From 622d318652fff7eb5ad5ff3ecdcfc3c6b82ebfd7 Mon Sep 17 00:00:00 2001 From: Chet Ramey Date: Mon, 22 Apr 2024 10:33:38 -0400 Subject: [PATCH] Bash-5.3-alpha release --- .gitignore | 1 + .gitignore~ | 115 - CHANGES | 637 + COMPAT | 82 +- CWRU/changelog | 5168 +++++++- CWRU/misc/open-files.c | 1 + CWRU/misc/sigs.c | 8 +- CWRU/misc/sigstat.c | 9 +- ChangeLog | 5168 +++++++- INSTALL | 438 +- MANIFEST | 146 +- Makefile.in | 98 +- NEWS | 132 + POSIX | 321 +- RBASH | 52 +- README | 2 +- aclocal.m4 | 132 +- alias.c | 88 +- alias.h | 22 +- array.c | 177 +- array.h | 92 +- array2.c | 204 +- arrayfunc.c | 393 +- arrayfunc.h | 124 +- assoc.c | 88 +- assoc.h | 42 +- bashansi.h | 26 +- bashhist.c | 145 +- bashhist.h | 45 +- bashline.c | 1000 +- bashline.h | 49 +- bashtypes.h | 14 +- bracecomp.c | 23 +- braces.c | 223 +- builtins/Makefile.in | 14 +- builtins/alias.def | 40 +- builtins/bashgetopt.c | 10 +- builtins/bashgetopt.h | 6 +- builtins/bind.def | 65 +- builtins/break.def | 24 +- builtins/builtin.def | 5 +- builtins/caller.def | 14 +- builtins/cd.def | 107 +- builtins/colon.def | 8 +- builtins/command.def | 20 +- builtins/common.c | 262 +- builtins/common.h | 220 +- builtins/complete.def | 156 +- builtins/declare.def | 179 +- builtins/echo.def | 8 +- builtins/enable.def | 122 +- builtins/eval.def | 5 +- builtins/evalfile.c | 67 +- builtins/evalstring.c | 125 +- builtins/exec.def | 15 +- builtins/exit.def | 19 +- builtins/fc.def | 97 +- builtins/fg_bg.def | 14 +- builtins/gen-helpfiles.c | 20 +- builtins/getopt.c | 27 +- builtins/getopt.h | 14 +- builtins/getopts.def | 41 +- builtins/hash.def | 48 +- builtins/help.def | 73 +- builtins/history.def | 50 +- builtins/jobs.def | 27 +- builtins/kill.def | 13 +- builtins/let.def | 6 +- builtins/mapfile.def | 43 +- builtins/mkbuiltins.c | 276 +- builtins/printf.def | 789 +- builtins/psize.c | 9 +- builtins/pushd.def | 99 +- builtins/read.def | 244 +- builtins/reserved.def | 10 + builtins/return.def | 11 +- builtins/set.def | 173 +- builtins/setattr.def | 100 +- builtins/shift.def | 18 +- builtins/shopt.def | 180 +- builtins/source.def | 13 +- builtins/suspend.def | 10 +- builtins/test.def | 5 +- builtins/times.def | 10 +- builtins/trap.def | 120 +- builtins/type.def | 45 +- builtins/ulimit.def | 99 +- builtins/umask.def | 152 +- builtins/wait.def | 79 +- command.h | 18 +- config-bot.h | 11 - config-top.h | 23 +- config.h.in | 139 +- configure | 10503 +++++++++------- configure.ac | 88 +- copy_cmd.c | 92 +- dispose_cmd.c | 41 +- dispose_cmd.h | 23 +- doc/Makefile.in | 14 +- doc/bash.0 | 4221 ++++--- doc/bash.1 | 2033 +-- doc/bash.html | 1830 ++- doc/bash.info | 8251 ++++++------ doc/bash.pdf | Bin 401989 -> 409790 bytes doc/bash.ps | 17983 ++++++++++++++------------- doc/bashref.dvi | Bin 823680 -> 853856 bytes doc/bashref.html | 13710 ++++++++++---------- doc/bashref.info | 8251 ++++++------ doc/bashref.pdf | Bin 795771 -> 818717 bytes doc/bashref.ps | 15482 ++++++++++++----------- doc/bashref.texi | 872 +- doc/builtins.0 | 1616 +-- doc/builtins.1 | 2 +- doc/builtins.ps | 5716 +++++---- doc/rbash.0 | 30 +- doc/rbash.ps | 110 +- doc/version.texi | 12 +- error.c | 131 +- error.h | 40 +- eval.c | 45 +- examples/loadables/Makefile.in | 33 +- examples/loadables/accept.c | 12 +- examples/loadables/asort.c | 38 +- examples/loadables/basename.c | 5 +- examples/loadables/cat.c | 15 +- examples/loadables/csv.c | 17 +- examples/loadables/cut.c | 68 +- examples/loadables/dirname.c | 5 +- examples/loadables/dsv.c | 18 +- examples/loadables/fdflags.c | 37 +- examples/loadables/finfo.c | 144 +- examples/loadables/getconf.c | 88 +- examples/loadables/getconf.h | 8 - examples/loadables/head.c | 10 +- examples/loadables/hello.c | 11 +- examples/loadables/id.c | 34 +- examples/loadables/ln.c | 18 +- examples/loadables/logname.c | 5 +- examples/loadables/mkdir.c | 92 +- examples/loadables/mkfifo.c | 7 +- examples/loadables/mktemp.c | 7 +- examples/loadables/mypid.c | 6 +- examples/loadables/necho.c | 8 +- examples/loadables/pathchk.c | 26 +- examples/loadables/print.c | 17 +- examples/loadables/printenv.c | 5 +- examples/loadables/push.c | 5 +- examples/loadables/realpath.c | 6 +- examples/loadables/rm.c | 5 +- examples/loadables/rmdir.c | 5 +- examples/loadables/seq.c | 40 +- examples/loadables/setpgid.c | 9 +- examples/loadables/sleep.c | 6 +- examples/loadables/stat.c | 49 +- examples/loadables/strftime.c | 13 +- examples/loadables/sync.c | 64 +- examples/loadables/tee.c | 7 +- examples/loadables/template.c | 11 +- examples/loadables/truefalse.c | 8 +- examples/loadables/tty.c | 7 +- examples/loadables/uname.c | 11 +- examples/loadables/unlink.c | 5 +- examples/loadables/whoami.c | 5 +- execute_cmd.c | 1132 +- execute_cmd.h | 104 +- expr.c | 264 +- externs.h | 486 +- findcmd.c | 144 +- findcmd.h | 23 +- flags.c | 22 +- flags.h | 16 +- general.c | 267 +- general.h | 208 +- hashcmd.c | 26 +- hashcmd.h | 12 +- hashlib.c | 81 +- hashlib.h | 40 +- include/ansi_stdlib.h | 8 +- include/memalloc.h | 14 +- include/ocache.h | 8 +- include/posixselect.h | 4 +- include/posixtime.h | 13 +- include/shmbchar.h | 15 + include/shmbutil.h | 38 +- include/shtty.h | 42 +- include/stdc.h | 14 +- include/systimes.h | 4 +- input.c | 172 +- input.h | 99 +- jobs.c | 811 +- jobs.h | 165 +- lib/glob/collsyms.h | 6 +- lib/glob/glob.c | 172 +- lib/glob/glob.h | 10 +- lib/glob/glob_loop.c | 7 +- lib/glob/gm_loop.c | 15 +- lib/glob/gmisc.c | 10 +- lib/glob/sm_loop.c | 282 +- lib/glob/smatch.c | 98 +- lib/glob/strmatch.c | 16 +- lib/glob/strmatch.h | 6 +- lib/glob/xmbsrtowcs.c | 32 +- lib/intl/Makefile.in | 477 +- lib/intl/VERSION | 2 +- lib/intl/bindtextdom.c | 301 +- lib/intl/dcgettext.c | 29 +- lib/intl/dcigettext.c | 1294 +- lib/intl/dcngettext.c | 31 +- lib/intl/dgettext.c | 31 +- lib/intl/dngettext.c | 32 +- lib/intl/eval-plural.h | 30 +- lib/intl/explodename.c | 223 +- lib/intl/finddomain.c | 146 +- lib/intl/gettext.c | 27 +- lib/intl/gettextP.h | 257 +- lib/intl/gmo.h | 42 +- lib/intl/hash-string.h | 63 +- lib/intl/intl-compat.c | 71 +- lib/intl/l10nflist.c | 370 +- lib/intl/loadinfo.h | 133 +- lib/intl/loadmsgcat.c | 976 +- lib/intl/localcharset.c | 1326 +- lib/intl/localcharset.h | 124 +- lib/intl/localealias.c | 187 +- lib/intl/localename.c | 3471 +++++- lib/intl/log.c | 122 +- lib/intl/ngettext.c | 27 +- lib/intl/os2compat.c | 22 +- lib/intl/os2compat.h | 30 +- lib/intl/osdep.c | 26 +- lib/intl/plural-exp.c | 41 +- lib/intl/plural-exp.h | 120 +- lib/intl/plural.c | 1794 ++- lib/intl/plural.y | 115 +- lib/intl/ref-add.sin | 10 +- lib/intl/ref-del.sin | 10 +- lib/intl/relocatable.c | 483 +- lib/intl/relocatable.h | 81 +- lib/intl/textdomain.c | 69 +- lib/malloc/alloca.c | 11 +- lib/malloc/imalloc.h | 20 +- lib/malloc/malloc.c | 198 +- lib/malloc/mstats.h | 10 +- lib/malloc/shmalloc.h | 46 +- lib/malloc/stats.c | 32 +- lib/malloc/table.c | 66 +- lib/malloc/table.h | 22 +- lib/malloc/trace.c | 30 +- lib/malloc/watch.c | 20 +- lib/malloc/watch.h | 6 +- lib/malloc/xmalloc.c | 21 +- lib/readline/Makefile.in | 3 + lib/readline/ansi_stdlib.h | 8 +- lib/readline/bind.c | 399 +- lib/readline/callback.c | 21 +- lib/readline/chardefs.h | 2 +- lib/readline/colors.c | 2 +- lib/readline/complete.c | 349 +- lib/readline/display.c | 317 +- lib/readline/doc/history.texi | 2 +- lib/readline/doc/hstech.texi | 9 +- lib/readline/doc/hsuser.texi | 49 +- lib/readline/doc/rltech.texi | 156 +- lib/readline/doc/rluser.texi | 131 +- lib/readline/doc/version.texi | 12 +- lib/readline/emacs_keymap.c | 2 +- lib/readline/examples/excallback.c | 2 +- lib/readline/examples/fileman.c | 170 +- lib/readline/examples/histexamp.c | 10 +- lib/readline/examples/manexamp.c | 42 +- lib/readline/examples/rl.c | 14 +- lib/readline/examples/rlcat.c | 20 +- lib/readline/examples/rltest.c | 6 +- lib/readline/funmap.c | 9 +- lib/readline/histexpand.c | 65 +- lib/readline/histfile.c | 118 +- lib/readline/histlib.h | 13 +- lib/readline/history.c | 161 +- lib/readline/history.h | 12 +- lib/readline/histsearch.c | 109 +- lib/readline/input.c | 102 +- lib/readline/isearch.c | 92 +- lib/readline/kill.c | 32 +- lib/readline/macro.c | 2 +- lib/readline/mbutil.c | 121 +- lib/readline/misc.c | 175 +- lib/readline/parens.c | 5 +- lib/readline/parse-colors.c | 45 +- lib/readline/posixselect.h | 4 +- lib/readline/posixtime.h | 13 +- lib/readline/readline.c | 60 +- lib/readline/readline.h | 105 +- lib/readline/rlconf.h | 5 + lib/readline/rldefs.h | 16 +- lib/readline/rlmbutil.h | 32 +- lib/readline/rlprivate.h | 78 +- lib/readline/rlstdc.h | 14 +- lib/readline/rltty.c | 35 +- lib/readline/rltypedefs.h | 16 +- lib/readline/search.c | 173 +- lib/readline/shell.c | 4 - lib/readline/signals.c | 22 +- lib/readline/tcap.h | 14 +- lib/readline/terminal.c | 99 +- lib/readline/text.c | 528 +- lib/readline/tilde.c | 21 +- lib/readline/undo.c | 4 +- lib/readline/util.c | 116 +- lib/readline/vi_mode.c | 83 +- lib/readline/xmalloc.c | 2 +- lib/readline/xmalloc.h | 10 +- lib/sh/Makefile.in | 60 +- lib/sh/casemod.c | 13 +- lib/sh/clktck.c | 4 +- lib/sh/clock.c | 25 +- lib/sh/dprintf.c | 18 +- lib/sh/eaccess.c | 31 +- lib/sh/fmtulong.c | 26 +- lib/sh/fnxform.c | 32 +- lib/sh/fpurge.c | 4 +- lib/sh/getcwd.c | 18 +- lib/sh/getenv.c | 55 +- lib/sh/gettimeofday.c | 30 +- lib/sh/inet_aton.c | 7 +- lib/sh/input_avail.c | 19 +- lib/sh/itos.c | 19 +- lib/sh/mailstat.c | 6 +- lib/sh/makepath.c | 14 +- lib/sh/mbscasecmp.c | 21 +- lib/sh/mbschr.c | 6 - lib/sh/mbscmp.c | 17 +- lib/sh/mktime.c | 157 +- lib/sh/netconn.c | 5 +- lib/sh/netopen.c | 49 +- lib/sh/oslib.c | 53 +- lib/sh/pathcanon.c | 14 +- lib/sh/pathphys.c | 43 +- lib/sh/random.c | 52 +- lib/sh/rename.c | 5 +- lib/sh/setlinebuf.c | 3 +- lib/sh/shmatch.c | 38 +- lib/sh/shmbchar.c | 13 +- lib/sh/shquote.c | 54 +- lib/sh/shtty.c | 62 +- lib/sh/snprintf.c | 193 +- lib/sh/spell.c | 23 +- lib/sh/strcasecmp.c | 11 +- lib/sh/strcasestr.c | 6 +- lib/sh/strchrnul.c | 6 +- lib/sh/strdup.c | 5 +- lib/sh/strerror.c | 5 +- lib/sh/stringlist.c | 69 +- lib/sh/stringvec.c | 82 +- lib/sh/strnlen.c | 6 +- lib/sh/strpbrk.c | 6 +- lib/sh/strstr.c | 2 +- lib/sh/strtod.c | 12 +- lib/sh/strtoimax.c | 11 +- lib/sh/strtol.c | 11 +- lib/sh/strtoumax.c | 11 +- lib/sh/strtrans.c | 55 +- lib/sh/strvis.c | 10 +- lib/sh/timers.c | 6 +- lib/sh/times.c | 7 +- lib/sh/timeval.c | 60 +- lib/sh/tmpfile.c | 118 +- lib/sh/uconvert.c | 13 +- lib/sh/ufuncs.c | 84 +- lib/sh/unicode.c | 45 +- lib/sh/utf8.c | 28 +- lib/sh/vprint.c | 15 +- lib/sh/wcsdup.c | 5 +- lib/sh/wcsnwidth.c | 6 +- lib/sh/wcswidth.c | 6 +- lib/sh/winsize.c | 16 +- lib/sh/zcatfd.c | 10 +- lib/sh/zgetline.c | 25 +- lib/sh/zmapfd.c | 9 +- lib/sh/zread.c | 35 +- lib/sh/zwrite.c | 7 +- lib/termcap/termcap.h | 26 +- lib/tilde/shell.c | 2 +- lib/tilde/tilde.c | 21 +- list.c | 24 +- locale.c | 97 +- m4/codeset.m4 | 2 +- m4/extern-inline.m4 | 11 +- m4/fcntl-o.m4 | 5 +- m4/gettext.m4 | 91 +- m4/host-cpu-c-abi.m4 | 52 +- m4/iconv.m4 | 67 +- m4/intdiv0.m4 | 21 +- m4/intl-thread-locale.m4 | 78 +- m4/intl.m4 | 65 +- m4/intlmacosx.m4 | 33 +- m4/inttypes.m4 | 57 +- m4/inttypes_h.m4 | 2 +- m4/lcmessage.m4 | 10 +- m4/lib-ld.m4 | 6 +- m4/lib-link.m4 | 173 +- m4/lib-prefix.m4 | 206 +- m4/lock.m4 | 2 +- m4/nls.m4 | 10 +- m4/po.m4 | 49 +- m4/printf-posix.m4 | 6 +- m4/progtest.m4 | 16 +- m4/pthread_rwlock_rdlock.m4 | 30 +- m4/size_max.m4 | 8 +- m4/stdint_h.m4 | 2 +- m4/strtoimax.m4 | 6 +- m4/threadlib.m4 | 673 +- m4/wchar_t.m4 | 2 +- m4/wint_t.m4 | 47 +- m4/xsize.m4 | 2 +- mailcheck.c | 88 +- mailcheck.h | 18 +- make_cmd.c | 173 +- make_cmd.h | 66 +- mksyntax.c | 54 +- nojobs.c | 192 +- parse.y | 1479 ++- parser-built | 193 + parser.h | 15 +- patchlevel.h | 4 +- pathexp.c | 374 +- pathexp.h | 41 +- pcomplete.c | 377 +- pcomplete.h | 41 +- pcomplib.c | 36 +- po/POTFILES.in | 2 +- po/af.gmo | Bin 1280 -> 1277 bytes po/af.po | 1255 +- po/bash.pot | 1238 +- po/bg.gmo | Bin 248812 -> 188584 bytes po/bg.po | 2682 ++-- po/ca.gmo | Bin 183474 -> 139703 bytes po/ca.po | 1985 +-- po/cs.gmo | Bin 185301 -> 140362 bytes po/cs.po | 2395 ++-- po/da.gmo | Bin 70624 -> 64592 bytes po/da.po | 1312 +- po/de.gmo | Bin 125828 -> 119767 bytes po/de.po | 1688 ++- po/el.gmo | Bin 83800 -> 81167 bytes po/el.po | 1275 +- po/en@boldquot.gmo | Bin 164675 -> 179377 bytes po/en@boldquot.po | 1464 ++- po/en@quot.gmo | Bin 163043 -> 177713 bytes po/en@quot.po | 1455 ++- po/eo.gmo | Bin 162418 -> 128900 bytes po/eo.po | 1315 +- po/es.gmo | Bin 183966 -> 140118 bytes po/es.po | 2024 +-- po/et.gmo | Bin 12156 -> 11809 bytes po/et.po | 1264 +- po/fi.gmo | Bin 73116 -> 67131 bytes po/fi.po | 1305 +- po/fr.gmo | Bin 190057 -> 144345 bytes po/fr.po | 3583 ++++-- po/ga.gmo | Bin 115689 -> 107587 bytes po/ga.po | 1305 +- po/gl.gmo | Bin 53798 -> 51476 bytes po/gl.po | 1298 +- po/hr.gmo | Bin 178383 -> 136072 bytes po/hr.po | 2057 +-- po/hu.gmo | Bin 152745 -> 127894 bytes po/hu.po | 1306 +- po/id.gmo | Bin 98266 -> 88444 bytes po/id.po | 1306 +- po/it.gmo | Bin 83883 -> 74282 bytes po/it.po | 1327 +- po/ja.gmo | Bin 114809 -> 103348 bytes po/ja.po | 2095 ++-- po/ko.gmo | Bin 185651 -> 141298 bytes po/ko.po | 1834 +-- po/lt.gmo | Bin 28770 -> 28154 bytes po/lt.po | 1289 +- po/nb.gmo | Bin 172246 -> 131325 bytes po/nb.po | 2161 ++-- po/nl.gmo | Bin 181276 -> 136756 bytes po/nl.po | 2296 ++-- po/pl.gmo | Bin 184164 -> 140184 bytes po/pl.po | 2170 ++-- po/pt.gmo | Bin 170400 -> 134586 bytes po/pt.po | 1319 +- po/pt_BR.gmo | Bin 183592 -> 139749 bytes po/pt_BR.po | 3062 +++-- po/ro.gmo | Bin 190030 -> 144317 bytes po/ro.po | 2714 ++-- po/ru.gmo | Bin 128223 -> 113166 bytes po/ru.po | 4076 +++--- po/sk.gmo | Bin 83429 -> 73926 bytes po/sk.po | 1299 +- po/sl.gmo | Bin 80665 -> 71446 bytes po/sl.po | 1304 +- po/sr.gmo | Bin 232614 -> 176640 bytes po/sr.po | 2319 ++-- po/sv.gmo | Bin 176963 -> 134628 bytes po/sv.po | 1978 +-- po/tr.gmo | Bin 130291 -> 106418 bytes po/tr.po | 2435 ++-- po/uk.gmo | Bin 237263 -> 179853 bytes po/uk.po | 2226 ++-- po/vi.gmo | Bin 133752 -> 120328 bytes po/vi.po | 1297 +- po/zh_CN.gmo | Bin 170166 -> 130043 bytes po/zh_CN.po | 1783 +-- po/zh_TW.gmo | Bin 168819 -> 129220 bytes po/zh_TW.po | 1785 +-- print_cmd.c | 472 +- quit.h | 11 + redir.c | 149 +- redir.h | 12 +- shell.c | 369 +- shell.h | 30 +- sig.c | 105 +- sig.h | 52 +- siglist.c | 4 +- siglist.h | 4 +- stringlib.c | 101 +- subst.c | 2383 ++-- subst.h | 183 +- support/bashbug.sh | 2 +- support/bashbug.sh.in | 4 +- support/bashversion.c | 17 +- support/config.guess | 102 +- support/config.rpath | 6 +- support/config.sub | 239 +- support/man2html.c | 13 +- support/mksignames.c | 13 +- support/mkversion.sh | 6 +- support/printenv.c | 6 +- support/recho.c | 11 +- support/rlvers.sh | 1 + support/shobj-conf | 20 +- support/signames.c | 25 +- support/xcase.c | 6 +- support/zecho.c | 4 +- test.c | 217 +- test.h | 11 +- tests/alias.right | 19 + tests/alias.tests | 12 +- tests/alias4.sub | 7 + tests/arith-for.right | 10 + tests/arith-for.tests | 14 + tests/arith.right | 102 +- tests/arith.tests | 22 + tests/array.right | 127 +- tests/array.tests | 49 +- tests/array16.sub | 9 + tests/array27.sub | 3 + tests/assoc.right | 11 +- tests/assoc.tests | 7 + tests/assoc13.sub | 14 +- tests/attr.right | 4 +- tests/braces.right | 7 + tests/braces.tests | 15 + tests/builtins.right | 220 +- tests/builtins.tests | 61 +- tests/builtins1.sub | 4 + tests/builtins2.sub | 4 + tests/case.right | 3 + tests/case.tests | 9 + tests/casemod.right | 2 + tests/casemod.tests | 7 +- tests/complete.right | 323 + tests/complete.tests | 33 + tests/comsub-eof.right | 4 +- tests/comsub-eof0.sub | 6 + tests/comsub.right | 20 +- tests/comsub.tests | 25 + tests/cond-regexp2.sub | 10 + tests/cond.right | 56 +- tests/cond.tests | 20 +- tests/dbg-support.right | 135 +- tests/dbg-support.tests | 4 + tests/dollar-at-star | 3 + tests/dollar.right | 40 + tests/dynvar.right | 8 + tests/dynvar.tests | 26 +- tests/errors.right | 307 +- tests/errors.tests | 100 +- tests/errors1.sub | 9 +- tests/errors4.sub | 16 + tests/errors7.sub | 3 + tests/errors8.sub | 3 + tests/exec.right | 60 +- tests/exec6.sub | 16 + tests/execscript | 47 +- tests/exp.right | 18 +- tests/exp.tests | 9 + tests/exp1.sub | 20 + tests/exportfunc.right | 2 +- tests/exportfunc.tests | 1 + tests/extglob.right | 7 + tests/extglob.tests | 6 + tests/func.right | 94 + tests/func.tests | 15 + tests/getopts.right | 2 + tests/getopts10.sub | 6 + tests/glob.right | 18 +- tests/glob.tests | 1 + tests/glob10.sub | 2 +- tests/glob2.sub | 8 +- tests/glob8.sub | 2 +- tests/heredoc.right | 41 +- tests/heredoc.tests | 40 +- tests/histexp.right | 4 + tests/histexp1.sub | 8 + tests/history.right | 83 +- tests/history.tests | 3 + tests/history1.sub | 5 + tests/history3.sub | 3 + tests/history5.sub | 16 + tests/intl.right | 12 +- tests/intl.tests | 2 + tests/jobs.right | 40 +- tests/jobs.tests | 32 +- tests/jobs5.sub | 5 + tests/lastpipe.right | 1 + tests/lastpipe.tests | 3 + tests/more-exp.right | 2 +- tests/nameref.right | 34 +- tests/nameref23.sub | 1 + tests/nameref4.sub | 14 + tests/new-exp.right | 41 +- tests/new-exp.tests | 5 + tests/new-exp10.sub | 49 +- tests/parser.right | 1 + tests/parser.tests | 10 + tests/posixpipe.right | 4 + tests/posixpipe.tests | 7 + tests/printf.right | 131 +- tests/printf.tests | 47 +- tests/printf1.sub | 10 +- tests/quote.right | 2 + tests/quote.tests | 7 + tests/quotearray.right | 16 +- tests/read.right | 9 + tests/read.tests | 19 + tests/read2.sub | 7 +- tests/read3.sub | 4 + tests/read7.sub | 3 +- tests/redir.right | 31 +- tests/redir.tests | 31 +- tests/redir11.sub | 2 + tests/redir12.sub | 62 +- tests/redir8.sub | 5 + tests/rsh.right | 15 +- tests/rsh.tests | 1 + tests/run-all | 2 +- tests/run-braces | 2 +- tests/run-cond | 2 + tests/run-extglob | 2 +- tests/run-minimal | 2 +- tests/run-set-x | 2 +- tests/set-e.right | 2 + tests/set-e.tests | 13 + tests/set-x.right | 12 + tests/set-x.tests | 5 + tests/set-x1.sub | 3 + tests/shopt.right | 7 +- tests/test.right | 69 +- tests/test.tests | 54 +- tests/test1.sub | 2 +- tests/tilde.right | 1 + tests/tilde.tests | 1 + tests/trap.right | 22 + tests/trap.tests | 27 +- tests/trap2.sub | 2 + tests/trap6.sub | 11 + tests/type.right | 40 +- tests/type.tests | 31 +- tests/type4.sub | 10 + tests/unicode1.sub | 49 +- tests/varenv.right | 56 + tests/varenv.tests | 2 + tests/varenv1.sub | 23 + tests/varenv12.sub | 13 + tests/varenv14.sub | 43 + tests/varenv2.sub | 4 + tests/varenv21.sub | 1 + tests/varenv7.sub | 4 +- tests/vredir.right | 28 +- tests/vredir.tests | 4 +- tests/vredir1.sub | 17 + tests/vredir4.sub | 18 + tests/vredir7.sub | 6 + tests/vredir8.sub | 29 +- trap.c | 332 +- trap.h | 122 +- unwind_prot.c | 139 +- unwind_prot.h | 34 +- variables.c | 1349 +- variables.h | 361 +- version.c | 13 +- xmalloc.c | 80 +- xmalloc.h | 25 +- y.tab.c | 3263 +++-- y.tab.h | 10 +- 700 files changed, 134807 insertions(+), 94693 deletions(-) delete mode 100644 .gitignore~ diff --git a/.gitignore b/.gitignore index 7855139b1..0aa4be7bb 100644 --- a/.gitignore +++ b/.gitignore @@ -68,6 +68,7 @@ support/bashbug.sh lsignames.h pathnames.h signames.h +stdckdint.h version.h syntax.c stamp-h diff --git a/.gitignore~ b/.gitignore~ deleted file mode 100644 index 1512a9ab0..000000000 --- a/.gitignore~ +++ /dev/null @@ -1,115 +0,0 @@ -# don't push out -i --i - -*.save -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -# -# these files are all created by the build process; none are in the repository -# -*.o -*.a -*.dSYM -.build -.made - -config.h -config.status -config.cache -config.log - -autom4te.cache - -bash -bashbug -bashversion - -Makefile -builtins/Makefile -builtins/builtext.h -builtins/builtins.c -builtins/mkbuiltins -builtins/pipesize.h -builtins/psize.aux - -doc/Makefile -examples/loadables/Makefile -examples/loadables/Makefile.inc -examples/loadables/perl/Makefile -lib/glob/Makefile -lib/intl/Makefile -lib/malloc/Makefile -lib/readline/Makefile -lib/sh/Makefile -lib/termcap/Makefile -lib/tilde/Makefile -support/Makefile - -lib/intl/charset.alias -lib/intl/libgnuintl.h -lib/intl/libintl.h -lib/intl/ref-add.sed -lib/intl/ref-del.sed - -po/Makefile -po/Makefile.in -po/POTFILES -po/stamp-po - -support/bash.pc -support/man2html -support/bashbug.sh - -lsignames.h -pathnames.h -signames.h -version.h -syntax.c -stamp-h - -mksignames -mksyntax - -printenv -recho -xcase -zecho -tests/printenv -tests/recho -tests/xcase -tests/zecho - -examples/loadables/accept -examples/loadables/basename -examples/loadables/csv -examples/loadables/cut -examples/loadables/dirname -examples/loadables/fdflags -examples/loadables/finfo -examples/loadables/head -examples/loadables/id -examples/loadables/ln -examples/loadables/logname -examples/loadables/mkdir -examples/loadables/mkfifo -examples/loadables/mktemp -examples/loadables/mypid -examples/loadables/pathchk -examples/loadables/print -examples/loadables/push -examples/loadables/realpath -examples/loadables/rm -examples/loadables/rmdir -examples/loadables/seq -examples/loadables/setpgid -examples/loadables/sleep -examples/loadables/strftime -examples/loadables/sync -examples/loadables/tee -examples/loadables/truefalse -examples/loadables/tty -examples/loadables/uname -examples/loadables/unlink -examples/loadables/whoami diff --git a/CHANGES b/CHANGES index e4e0124f2..56c14a64c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,640 @@ +This document details the changes between this version, bash-5.3-alpha, and +the previous version, bash-5.2-release. + +1. Changes to Bash + +a. Stop checking for new mail if an interactive shell is in the middle of + programmable completion or readline command dispatching. + +b. Changes to multibyte character translation to handle shift states better. + +c. Fixed a bug with subshell command execution that caused it to set LINENO + incorrectly. + +d. Fixed a bug that caused some array subscript references in arithmetic + expansions to seg fault. + +e. Don't report on foreground jobs that we won't notify the user about if + jobs is run from a trap handler or a `bind -x' command. + +f. Fixed a bug where temporarily turning on `extglob' while parsing a command + substitution in compatibility mode could leave it set. + +g. Fixed a bug where nested word expansions confused the state parser and + resulted in quotes being required where they should not have been. + +h. Fixed a bug where nested function definitions resulted in `display -F' + printing incorrect line numbers. + +i. Fixed the message printed when the shell gets ENOENT from execve: specific + message about a bad interpreter before the generic error message. + +j. Fixed a spurious debug message when errexit is set and the shell is + exiting from an eval command in a shell function. + +k. Fixed a bug where a pending signal would cause pattern matching to fail in + an exit trap. + +l. Fixed a crash caused by a null replacement string in pattern replacement. + +m. Fixed a bug in interactive shells where a SIGINT received while parsing a + command substitution would leave the expand_aliases option disabled. + +n. Fixed a bug with command printing when printing multiple shell functions + with here-documents inside a command substitution. + +o. Fixed a bug with expanding aliases while parsing command substitutions + inside another word expansion. + +p. Fixed a bug with alias expansion in posix mode in an eval command inside a + command substitution. + +q. Fixed a bug that caused the parser not to reset correctly if it encountered + a syntax error while trying to read a WORD token. + +r. Fixed a bug that caused `<(' and `>(' to trigger process substitution inside + an arithmetic expression. + +s. Fixed a bug that caused the shell to unlink FIFOs used for process + substitution before a compound command completes. + +t. Fixed a bug that caused the read builtin to not recognize some negative + fractional arguments. + +u. Fixed a bug that caused subshells not to run the EXIT trap if a signal + arrived after the command and before returning to the caller. + +v. Fixed a bug where `wait' without arguments could wait for inherited + process substitutions, which are not children of this shell. + +w. Fixed a bug with expanding $* in a here-document body. + +x. Fixed a bug where `declare -p' in a shell function would show the wrong + command for `local -'. + +y. Change for POSIX interpretation 1602 about the default return status for + `return' in a trap command. + +z. Fixed a bug that caused double evaluation of a dynamic variable like + $RANDOM when using certain parameter expansions. + +aa. Fixed a bug where `read -e -t' would cause an interactive shell to exit. + +bb. Fixed a number of bugs with pathname expansion/pattern matching and + slashes in bracket expressions. + +cc. Fixed several bugs with optimizing out forks. + +dd. Fixed a memory leak when referencing unset associative array elements. + +ee. System-specific changes for: WIN32 + +ff. Perform more cleanup if the shell exceeds maximum function nesting level. + +gg. Fixed a bug that caused `eval' to run the ERR trap in commands where it + should not. + +hh. Fixed nameref expansion where nameref values are valid length expansion + expressions but invalid identifiers. + +ii. Fixed an error that caused syntax errors when expanding nested word + expansions inside a here-document. + +jj. POSIX special builtins now exit the shell in posix mode on more failure + cases. + +kk. Brace expansion is interruptible at more spots, so long expansions can + be interrupted more quickly. + +ll. Fixed a crash caused by running `set -o emacs' in `bash -c command'. + +mm. Fixed a bug that caused bash to reset the terminal process group before + a command exited if it received a SIGINT in a non-interactive shell. + +nn. Significant changes to the source code to make it C23-conformant, including + C23 undefined behavior. + +oo. Treat read(2) errors while reading input as immediately fatal errors + instead of the traditional EOF; POSIX interp 1629 + +pp. Fix to allow asynchronous commands to use `trap' to reset signals that + are ignored during the command; POSIX interp 751. + +qq. Fix a posix-mode bug with alias expansion when checking for reserved + words and the previous alias expansion ends with a space. + +rr. Programmable completion now creates empty elements in COMP_WORDS if the + cursor is on whitespace just preceding a word. + +ss. Fixed a bug that prevented aliases ending with a space from alias + expanding the next word if more than two aliases are expanded from a + single word. + +tt. Fixed a bug that caused the shell to give the terminal to the shell's + process group when reaping a background job. + +uu. Command printing is more consistent when to print `function' before a + shell function name. + +vv. Fixed a bug that caused unset not to remove a function named a[b] if + there was no array variable a. + +ww. Posix mode doesn't perform function lookup for function names containing + a slash. + +xx. <( and >( can now be used in funtion names. + +yy. Fixed a bug that caused tilde expansion not to be performed on some + array subscripts. + +zz. Fixed key-value pair associative array assignment to be more consistent + with compound array assignment, and indexed array assignment (a=(zero one)) + to be more consistent with explicitly assigning indices one by one. + +aaa. In posix mode, extra arguments to `fc' are now an error. + +bbb. The bash readline commands that perform history and alias expansion try + to place point closer to where it was in the unexpanded line. + +ccc. Fixed multiple invocations of `local -' in the same shell function to + have the same effect as one. + +ddd. Don't export $_ if allexport is set. + +eee. Don't add extra newlines to the history if parsing a delimited construct. + +fff. Dynamically-loaded builtins cannot have slashes in their names, since + they'll never be called. + +ggg. Fixed a bug that could cause reading EOF while parsing a quoted string + to terminate the shell. + +hhh. Fixed a bug that caused local variables with the same name as variables + in `declare's temporary environment to be propagated back to the caller. + +iii. Don't try to perform brace expansion on assignment statements in compound + assignments. + +jjj. Fixed a bug that could cause a crash while evaluating an arithmetic for + command if one of the expressions expands to NULL. + +kkk. In posix mode, cd tries to change to what the user typed if the + canonicalized version of that pathname is longer than PATH_MAX. + +lll. Fixes for some errors revealed by address sanitizer. + +mmm. If fork(2) fails, kill the current pipeline processes with SIGKILL after + SIGTERM, in case they're ignoring SIGTERM. + +nnn. Fix to adding command substitutions to history to avoid adding semicolons + where they shouldn't be. + +ooo. Programmable completion and compgen honor the setting of `dotglob'. + +ppp. Use gettimeofday(2) to get time information instead of using time(3). + +qqq. Save and restore readline variables affecting filename completions in + case someone runs `compgen' in the foreground. + +rrr. Treat the failure to open file in $(&- so it doesn't silently close stdin if var is not a number. + +uuu. Follow namerefs in ${name=word} so the shell can implement the POSIX + semantics of returning "the final value of parameter." + +vvv. Bash performs better nameref loop detection in several lookup cases. + +www. SIGINT will now break out of loops if a process executed in the loop dies + due to SIGINT, not just if the loop body is a list. This is no longer + dependent on the compatibility level. + +xxx. FIGNORE suffixes can now match the entire pathname, like tcsh, instead + of requiring a non-empty prefix. + +yyy. Fix bug that caused FUNCNAME not to be reset after a parse error with + compound assignments to local variables. + +zzz. Fix bug that caused `jobs' not to remove jobs from the list in a SIGCHLD + trap. + +aaaa. Fix bug that caused `ignoreeof' to be ignored if EOF is read at a + secondary prompt or while parsing a command substitution. + +bbbb. Fixes to removing jobs from the jobs table when the user isn't notified; + has effects of fixing issues with `wait -n' not finding jobs. + +cccc. Fixes to loadable builtin processing so that we never pass a null + pathname or try to load a builtin that's not found if the -n option is + supplied. + +dddd. Work around system-specific problems (macOS) where isblank(3) returns + true for characters >= 0x80 in a UTF-8 locale. + +eeee. Fix for crash while parsing alias expansions that include compound + assignments. + +ffff. Fixe for non-interactive shells reading a script file that ends with + backslash preceding EOF. + +gggg. Fix to command printing when here-documents are attached to compound + commands in lists. + +hhhh. Fix bug with sourcing `files' created by process substitutions inside + a `.' script. + +iiii. Fixes to declare builtin to treat arguments to declare -f that look like + assignment statements or array references as function names. + +jjjj. Fixed a variable conversion problem when exporting a variable in the + temporary environment back to the calling scope. + +kkkk. BASH_REMATCH can now be a local variable. + +llll. Subshell commands clear process substitutions so anything created by a + redirection doesn't affect the subshell. + +mmmm. Fixes for several small memory leaks. + +nnnn. The shell simply ignores attempts to assign to `noassign' variables + instead of treating them as an assignment error and possibly causing + the shell to exit. + +oooo. If the cd builtin uses $OLDPWD, allow it to use $CDPATH if the user has + set it to something that's not a full pathname. + +pppp. The test builtin only supports the optional argument to -t if parsing + an expression with more than four aguments and not in posix mode. + +qqqq. Changes to filename quoting and rewriting to deal with NFC and NFD + Unicode forms (primarily for macOS). + +rrrr. Send SIGCONT to a job we've just restarted with fg or bg, even if we + think it's already running. + +ssss. Fixes for setting the line number associated with a simple command. + +tttt. Many changes for integer overflow and out-of-range arguments to printf. + +uuuu. Fixes for the read builtin and unescaped backslashes preceding NULs or + the end of the input. + +vvvv. The -[anrw] options to the history builtin should have no effect if + HISTFILE is unset or null. + +wwww. If programmable completion uses something different than what the user + typed as the command name (full pathname, alias, etc.), display what's + actually used in `compopt' output. + +xxxx. Fix bug with closing /dev/fd process substitutions in shell functions. + +yyyy. Fix bug with `declare -g' trying to convert a global associative array + to an indexed array. + +zzzz. Fix bash history expansion characters so we don't get empty history + events. + +aaaaa. Allow `time' and `!' reserved words to be followed by `&', which POSIX + interp 267 says is required. + +bbbbb. Upgrade intl library to the one from gettext-0.21.1. + +ccccc. Fix line number in the event that a simple command jumps back to the + top level on error. + +ddddd. Make the order of setting BASH_COMMAND, running the DEBUG trap, and + printing PS4 consistent across all command types. + +eeeee. Rely on child processes to set the terminal process group instead of + having the parent do it as well. + +fffff. Fix `printf' to consume entire multibyte characters in the format string, + in case the encoding contains `/' or `%'. + +ggggg. Fix `hash' to return 1 if -d is supplied and the hash table is empty. + +hhhhh. Fix `select' command to be like `for' in that an invalid selection + variable is a fatal error in posix mode. + +iiiii. Fix to parameter length expansion to avoid expanding dynamic variables + (e.g., RANDOM) more than once. + +jjjjj. Fix to `shift', `break', and `continue' to skip over a `--' when + printing an invalid argument error message. + +kkkkk. Fix bug that caused an invalid arithmetic expression in an arithmetic + `for' command to leave the loop level set to the wrong value, preventing + `break' and `continue' from working. + +lllll. Fix problem with removing escapes in the `E' variable transformation. + +mmmmm. Fix bug with word splitting if `read' assigns to IFS. + +nnnnn. Fix posix-mode cases where failure of special builtins did not cause + the shell to exit. + +ooooo. Some fixes to cases where the shell quotes characters that are special + internally. + +ppppp. Fix error with read builtin trying to assign to a readonly variable. + +qqqqq. Fix a slight race condition when bash receives a SIGINT while waiting + for a foreground job. + +rrrrr. Fix integer parsing to accept more whitespace characters after the + digit string -- the same ones we accept before the digits. + +sssss. Fix a crash when attempting to brace-expand a very large list of + strings fails. + +ttttt. Fix dynamic loading of builtins not to look in the current directory + if looking in BASH_LOADABLES_PATH is not successful, like $PATH + searching. + +uuuuu. Fix `bind -x' commands to understand negative argument counts. + +vvvvv. Disable fork optimization if the shell is running startup files because + SSH_SOURCE_BASHRC was enabled; prevents infinite recursion. + +wwwww. Fix `unset' builtin to implement POSIX interp 1009, which says that + unsetting a variable in the temporary environment unsets the variable + in the enclosing scope also, in posix mode. + +xxxxx. Fix parser to read here-document body from the current alias, if that's + where input is being read from. + +yyyyy. Fix an off-by-one error that caused completion to fail for certain + pathnames containing backslash-quoted single-quotes. + +zzzzz. Fix command printing to print a coproc name only if the coproc command + is not a simple command. + +aaaaaa. Fix prompt string decoding to preserve the value of $_. + +bbbbbb. In posix mode, supplying a non-identifier as a function name to `export' + or `readonly' should cause the shell to exit, since these are special + builtins. + +cccccc. Fix a crash that happens due to accessing freed memory if the parser + encounters a syntax error while parsing an alias or a compound + assignment. + +dddddd. Fix a bug that could cause errors while executing a DEBUG trap in a + pipeline. + +eeeeee. Fix a bug where exiting a subshell should not try to restore the + terminal settings if that subshell didn't reinitialize them. + +ffffff. Remove long-lived workaround for old AFS bug that causes problems with + modern implementations. + +gggggg. Fix a bug that caused an assignment error to BASHOPTS or SHELLOPTS to + remove the variable's readonly attribute. + +hhhhhh. Fix for a crash if a pathname argument to `cd' is NULL and the current + directory has been removed. + +iiiiii. Fix a bug with shell-expand-line readline command that caused it to + interpret quoted single quotes incorrectly when inside $'...'. + +jjjjjj. Fix to the declare builtin to catch more invalid option combinations. + +kkkkkk. Fix to avoid unsafe execution of the EXIT trap if a terminating signal + arrives while bash is waiting for a foreground process. + +llllll. Fixed a bug that allowed attribute changes to readonly variables that + changed the effects of attempted assignments. + +mmmmmm. Fix bug that caused quoting errors if $* was expanded in a context + where word splitting was not performed. + +oooooo. Fix bug that caused declare commands with `-' and `+' options and an + assignment statement to be misinterpreted. + +pppppp. Retry opening startup files if the open is interrupted by a signal + and is not automatically restarted. + +qqqqqq. Fix printing a case command where one of the case command lists begins + with the word `esac'. + +rrrrrr. Fix for history and command number expansion when expanding a prompt + string that contains the @P variable transformation. + +ssssss. Fix a bug that could cause the shell to hang if a script used multiple + coprocesses without manually closing file descriptors associated with + existing coprocesses. + +2. Changes to Readline + +a. Fixed a bug in clearing the visible line structure before redisplay. + +b. Fix a bug where setlocale(3) returning NULL caused a crash. + +c. Fixed signal checking in callback mode to handle signals that arrive before + readline restore's the application's signal handlers. + +d. Fixed a bug with word completion where the directory name needs to be + dequoted and tilde-expanded. + +e. Fixed a bug that caused compilation to fail on systems with select but not + pselect. + +f. System-specific changes for: WIN32, z/OS, Cygwin, MSYS + +g. Fixed a bug that caused word completion mismatches if the quoted text the + user typed was longer than the unquoted match. + +h. Fixes for freeing undo lists that might appear in history list entries + after non-incremental searches. + +i. Fixes for some errors revealed by address sanitizer. + +j. In vi mode, if an `f' or `F' move command associated with a `c' or `C' + command fails, don't enter insert mode. + +k. Fixed bug with truncating a history file containing timestamps that caused + the timestamp associated with the first history entry not to be written. + +l. Fix vi-mode so that a motion command attached to d/D, y/Y, or t/T must + consume or delete at least one character. + +m. Fix a redisplay error when displaying meta characters as octal sequences + and other C locale issues. + +n. Fix error that caused characters composing an incomplete multibyte + character not to be inserted into the line. + +o. In callback mode, let the application echo the signal characters (e.g., ^C) + when the application's signal handlers are installed. + +p. Added some support for lines that consume more than the physical number of + screen lines. + +q. Make sure dump-variables returns the string values for active-region-start-color + and active-region-end-color if they're set. + +r. Fixes to how characters between 128 and 159 are printed when displaying + macro values (use symbolic notation instead of directly printing the + character). + +s. Don't convert meta characters that contain NULL (\M-\C-@) to actual NULs, + which prematurely terminates the macro value. + +t. Fix typo in the readline color prefix extension that it uses for coloring + filename prefixes when displaying possible completions. + +u. Call the filename rewrite hook on the word being completed before comparing + it against possible completions from the file system to get consistent + strings. + +v. Fix infinite recursion that can happen if someone binds a key that doesn't + have a different upper and lower case represenation to do-lowercase-version. + +w. Check for non-ANSI (dumb) terminals a little more thoroughly. + +x. Don't attempt to history-expand the `quick substitution' character at the + beginning of a line if the application has set the quoting state to single + quotes. + +y. Fix small memory leak if non-incremental or incremental search is + interrupted by a signal. + +z. Loading very large history files should be much faster. + +aa. Retry opening startup files if the open is interrupted by a signal + and is not automatically restarted. + +3. New Features in Bash + +a. When checking whether a script file argument is a binary file, check the + first two lines of a script if the first line begins with `#!'. + +b. Bash does a better job of preserving user-supplied quotes around a word + completion, instead of requoting it. + +c. Bash reports the starting line number in an error message about an + unterminated compound command like `if' without a `fi'. + +d. Implement the POSIX requirement that running the `jobs' builtin removes + jobs from the jobs list. + +f. Call bash signal handlers while executing programmable completion commands, + instead of readline's. + +g. Print an error message if a regular expression used with [[ fails to compile. + +h. The `umask' builtin now has additional features for full POSIX conformance. + +i. `type -a -P' reports both hashed pathnames and the result of a $PATH search. + +j. `trap' has a new -P option that prints the trap action associated with each + signal argument. + +k. The `command' builtin preceding a declaration builtin (e.g., `declare') + preserves the special asisgnment statement parsing for the declation + builtin. This is a new POSIX requirement. + +l. `printf' uses the `alternate form' for %q and %Q to force single quoting. + +m. `printf' now interprets %ls (%S) and %lc (%C)nas referring to wide strings + and characters, respectively, when in a multibyte locale. + +n. The shell can be compiled with a different default value for the + patsub_replacement option. + +o. Check for window size changes during trap commands, `bind -x' commands, + and programmable completion. + +p. Treat a NULL value for $PATH as equivalent to ".". + +p. New loadable builtins: kv, strptime + +q. GLOBSORT: new variable to specify how to sort the results of pathname + expansion (name, size, blocks, mtime, atime, ctime, none) in ascending + or descending order. + +r. `compgen' has a new option: -V varname. If supplied, it stores the generated + completions into VARNAME instead of printing them on stdout. + +s. New form of command substitution: ${ command; } or ${|command;} to capture + the output of COMMAND without forking a child process and using pipes. + +t. array_expand_once: new shopt option, replaces assoc_expand_once + +u. complete/compopt new option: fullquote; sets rl_full_quoting_desired so all + possible completions are quoted as if they were filenames. + +v. Command timing now allows precisions up to 6 digits instead of 3 in + $TIMEFORMAT. + +w. BASH_MONOSECONDS: new dynamic variable that returns the value of the + system's monotonic clock, if one is available. + +x. BASH_TRAPSIG: new variable, set to the numeric signal number of the trap + being executed while it's running. + +y. The checkwinsize option can be used in subshell commands started from + interactive shells. + +z. In posix mode, the test command < and > binary primaries compare strings + using the current locale. + +aa. bind -x allows new key binding syntax: separate the key sequence and the + command string with whitespace, but require the command string to be + double-quoted if this is used. This allows different quoting options for + the command string. + +bb. Print commands bound to key sequences using `bind -x' with the new key + binding syntax it allows. + +cc. `read' has a new `-E' option to use readline but with the default bash + completion (including programmable completion). + +dd. New bindable readline command name: `bash-vi-complete'. + +ee. New test builtin behavior when parsing a parenthesized subexpression and + test was given more than 4 arguments: scan forward for a closing paren and + call posixtest() if there are 4 or fewer arguments between the parentheses. + Added for compatibility with coreutils test, dependent on the shell + compatibility level. Such expressions remain ambiguous. + +4. New Features in Readline + +a. Output a newline if there is no prompt and readline reads an empty line. + +b. The history library falls back to stdio when writing the history list if + mmap fails. + +c. New bindable variable `search-ignore-case', causes readline to perform + case-insensitive incremental and non-incremental history searches. + +d. rl_full_quoting_desired: new application-settable variable, causes all + completions to be quoted as if they were filenames. + +e. rl_macro_display_hook: new application-settable function pointer, used if + the application wants to print macro values itself instead of letting + readline do it + +f. rl_reparse_colors: new application-callable function, reparses $LS_COLORS + (presumably after the user changes it) + +g. rl_completion_rewrite_hook: new application-settable function pointer, + called to modify the word being completed before comparing it against + pathnames from the file system. + +h. execute-named-command: a new bindable command that reads the name of a + readline command from the standard input and executes it. Bound to M-x + in emacs mode by default. + +i. Incremental and non-incremental searches now allow ^V/^Q (or, in the former + case, anything bound to quoted-insert) to quote characters in the search + string. + +------------------------------------------------------------------------------ This document details the changes between this version, bash-5.2-release, and the previous version, bash-5.2-rc4. diff --git a/COMPAT b/COMPAT index 9fda7fb8f..3f7547fd5 100644 --- a/COMPAT +++ b/COMPAT @@ -2,13 +2,13 @@ Compatibility with previous versions ==================================== This document details the incompatibilities between this version of bash, -bash-5.2, and the previous widely-available versions, bash-3.2 (which is +bash-5.3, and the previous widely-available versions, bash-3.2 (which is still the `standard' version for Mac OS X), 4.2/4.3 (which are still -standard on a few Linux distributions), and bash-4.4/bash-5.0/bash-5.1, -the current widely-available versions. These were discovered by users of -bash-2.x through 5.x, so this list is not comprehensive. Some of these -incompatibilities occur between the current version and versions 2.0 and -above. +standard on a few Linux distributions), and bash-4.4 and +bash-5.0/bash-5.1/bash-5.2, the current widely-available versions. +These were discovered by users of bash-2.x through 5.x, so this list is not +comprehensive. Some of these incompatibilities occur between the current +version and versions 2.0 and above. 1. Bash uses a new quoting syntax, $"...", to do locale-specific string translation. Users who have relied on the (undocumented) @@ -315,118 +315,118 @@ above. string if there is not enough input. Previous versions discarded the characters read. -41. Beginning with bash-4.0, when one of the commands in a pipeline is killed - by a SIGINT while executing a command list, the shell acts as if it - received the interrupt. This can be disabled by setting the compat31 or - compat32 shell options. - -42. Bash-4.0 changes the handling of the set -e option so that the shell exits +41. Bash-4.0 changes the handling of the set -e option so that the shell exits if a pipeline fails (and not just if the last command in the failing pipeline is a simple command). This is not as Posix specifies. There is work underway to update this portion of the standard; the bash-4.0 behavior attempts to capture the consensus at the time of release. -43. Bash-4.0 fixes a Posix mode bug that caused the . (source) builtin to +42. Bash-4.0 fixes a Posix mode bug that caused the . (source) builtin to search the current directory for its filename argument, even if "." is not in $PATH. Posix says that the shell shouldn't look in $PWD in this case. -44. Bash-4.1 uses the current locale when comparing strings using the < and +43. Bash-4.1 uses the current locale when comparing strings using the < and > operators to the `[[' command. This can be reverted to the previous behavior (ASCII collating and strcmp(3)) by setting one of the `compatNN' shopt options, where NN is less than 41. -45. Bash-4.1 conforms to the current Posix specification for `set -u': +44. Bash-4.1 conforms to the current Posix specification for `set -u': expansions of $@ and $* when there are no positional parameters do not cause the shell to exit. -46. Bash-4.1 implements the current Posix specification for `set -e' and +45. Bash-4.1 implements the current Posix specification for `set -e' and exits when any command fails, not just a simple command or pipeline. -47. Command substitutions now remove the caller's trap strings when trap is +46. Command substitutions now remove the caller's trap strings when trap is run to set a new trap in the subshell. Previous to bash-4.2, the old trap strings persisted even though the actual signal handlers were reset. -48. When in Posix mode, a single quote is not treated specially in a +47. When in Posix mode, a single quote is not treated specially in a double-quoted ${...} expansion, unless the expansion operator is # or % or the new `//', `^', or `,' expansions. In particular, it does not define a new quoting context. This is from Posix interpretation 221. -49. Posix mode shells no longer exit if a variable assignment error occurs +48. Posix mode shells no longer exit if a variable assignment error occurs with an assignment preceding a command that is not a special builtin. -50. Bash-4.2 attempts to preserve what the user typed when performing word +49. Bash-4.2 attempts to preserve what the user typed when performing word completion, instead of, for instance, expanding shell variable references to their value. -51. When in Posix mode, bash-4.2 exits if the filename supplied as an argument +50. When in Posix mode, bash-4.2 exits if the filename supplied as an argument to `.' is not found and the shell is not interactive. -52. When compiled for strict Posix compatibility, bash-4.3 does not enable +51. When compiled for strict Posix compatibility, bash-4.3 does not enable history expansion by default in interactive shells, since it results in a non-conforming environment. -53. Bash-4.3 runs the replacement string in the pattern substitution word +52. Bash-4.3 runs the replacement string in the pattern substitution word expansion through quote removal. The code already treats quote characters in the replacement string as special; if it treats them as special, then quote removal should remove them. -54. Bash-4.4 no longer considers a reference to ${a[@]} or ${a[*]}, where `a' +53. Bash-4.4 no longer considers a reference to ${a[@]} or ${a[*]}, where `a' is an array without any elements set, to be a reference to an unset variable. This means that such a reference will not cause the shell to exit when the `-u' option is enabled. -55. Bash-4.4 allows double quotes to quote the history expansion character (!) +54. Bash-4.4 allows double quotes to quote the history expansion character (!) when in Posix mode, since Posix specifies the effects of double quotes. -56. Bash-4.4 does not inherit $PS4 from the environment if running as root. +55. Bash-4.4 does not inherit $PS4 from the environment if running as root. -57. Bash-4.4 doesn't allow a `break' or `continue' in a function to affect +56. Bash-4.4 doesn't allow a `break' or `continue' in a function to affect loop execution in the calling context. -58. Bash-4.4 no longer expands tildes in $PATH elements when in Posix mode. +57. Bash-4.4 no longer expands tildes in $PATH elements when in Posix mode. -59. Bash-4.4 does not attempt to perform a compound array assignment if an +58. Bash-4.4 does not attempt to perform a compound array assignment if an argument to `declare' or a similar builtin expands to a word that looks like a compound array assignment (e.g. declare w=$x where x='(foo)'). -60. Bash-5.0 only sets up BASH_ARGV and BASH_ARGC at startup if extended +59. Bash-5.0 only sets up BASH_ARGV and BASH_ARGC at startup if extended debugging mode is active. The old behavior of unconditionally setting BASH_ARGC and BASH_ARGV is available at compatibility levels less than or equal to 44. -61. Bash-5.0 doesn't allow a `break' or `continue' in a subshell to attempt +60. Bash-5.0 doesn't allow a `break' or `continue' in a subshell to attempt to break or continue loop execution inherited from the calling context. -62. Bash-5.0 doesn't allow variable assignments preceding builtins like +61. Bash-5.0 doesn't allow variable assignments preceding builtins like export and readonly to modify variables with the same name in preceding contexts (including the global context) unless the shell is in posix mode, since export and readonly are special builtins. -63. Bash-5.1 changes the way posix-mode shells handle assignment statements +62. Bash-5.1 changes the way posix-mode shells handle assignment statements preceding shell function calls. Previous versions of POSIX specified that such assignments would persist after the function returned; subsequent versions of the standard removed that requirement (interpretation #654). Bash-5.1 posix mode assignment statements preceding shell function calls do not persist after the function returns. -64. Bash-5.1 reverts to the bash-4.4 treatment of pathname expansion of words +63. Bash-5.1 reverts to the bash-4.4 treatment of pathname expansion of words containing backslashes but no other special globbing characters. This comes after a protracted discussion and a POSIX interpretation (#1234). -65. In bash-5.1, disabling posix mode attempts to restore the state of several +64. In bash-5.1, disabling posix mode attempts to restore the state of several options that posix mode modifies to the state they had before enabling posix mode. Previous versions restored these options to default values. -66. Bash-5.2 attempts to prevent double-expansion of array subscripts under +65. Bash-5.2 attempts to prevent double-expansion of array subscripts under certain circumstances, especially arithmetic evaluation, by acting as if the `assoc_expand_once' shell option were set. -67. The `unset' builtin in bash-5.2 treats array subscripts `@' and `*' +66. The `unset' builtin in bash-5.2 treats array subscripts `@' and `*' differently than previous versions, and differently depending on whether the array is indexed or associative. +67. The `test' builtin in bash-5.3 treats parenthesized subexpressions when + given more than four arguments differently. It scans forward for a + closing paren and counts the number of arguments between the parens. If + there are four or fewer, it uses the posix test algorithm on the + subexpression. Shell Compatibility Level ========================= @@ -485,10 +485,6 @@ compat31 compat32 - the < and > operators to the [[ command do not consider the current locale when comparing strings; they use ASCII ordering - - interrupting a command list such as "a ; b ; c" causes the execution - of the next command in the list (in bash-4.0 and later versions, - the shell acts as if it received the interrupt, so interrupting - one command in a list aborts the execution of the entire list) compat40 - the < and > operators to the [[ command do not consider the current @@ -588,6 +584,10 @@ compat51 (set using BASH_COMPAT) expansion time if extglob hasn't been enabled by the time the command is executed. +compat52 (set using BASH_COMPAT) + - the test builtin uses its historical algorithm for parsing + expressions composed of five or more primaries. + ------------------------------------------------------------------------------- Copying and distribution of this file, with or without modification, diff --git a/CWRU/changelog b/CWRU/changelog index da6d4aa1c..ecf478ffb 100644 --- a/CWRU/changelog +++ b/CWRU/changelog @@ -1,4 +1,4 @@ - +\ 12/6/2020 --------- @@ -3950,3 +3950,5169 @@ lib/readline/history.c 9/23 ---- [bash-5.2 frozen] + + 9/26 + ---- +[bash-5.2 released] + + 9/27 + ---- +mailcheck.c + - time_to_check_mail: don't bother if we're in the middle of readline + completion or command dispatching. + From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1019462 + +lib/readline/display.c + - rl_forced_update_display: use memset to clear out visible_line + instead of trying to use a loop; line_size is the size. + Report from + +print_cmd.c + - indirection_level_string: use MBRLEN and an initialized mbstate_t + object to avoid altering an internal mbstate_t. + From Koichi Murase + +subst.c + - string_extract_verbatim: use an explicit mbstate_t object and pass + it to MBRLEN and mbrtowc to avoid altering the state that + ADVANCE_CHAR is using. + From Koichi Murase + - setifs: use an explicit mbstate_t object and pass it to MBRLEN so + to avoid altering an internal mbstate_t. + From Koichi Murase + +builtins/printf.def + - asciicode: use an explicit mbstate_t object and pass it to mbrtowc + to avoid using an incorrect internal mbstate_t + From Koichi Murase + +lib/sh/{mbscasecmp,mbscmp}.c + - mbscasecmp,mbscmp: use different mbstate_t objects for the different + strings so they don't affect each others' intermediate mbstate. + From Koichi Murase + + 9/28 + ---- +execute_cmd.c + - execute_command_internal: if executing a (command) subshell, restore + the value of line_number from save_line_number before returning early + due to being a non-terminal pipeline element. + From https://savannah.gnu.org/support/index.php?110714 + + 9/30 + ---- +subst.c + - expand_array_subscript: make sure to pass a non-NULL first argument + to sh_backslash_quote. Report from Emanuele Torre , + patch from Koichi Murase + + 9/30 + ---- +jobs.c + - cleanup_dead_jobs: delete dead foreground jobs we won't notify the + user about (those not killed by a signal or killed by SIGINT/SIGPIPE). + From a report from Koichi Murase + - wait_for_any_job: never return a foreground job, even when requested + by pid, if it's in the jobs list + Report and fix from Koichi Murase + +m4/strtoimax.m4 + - BASH_FUNC_STRTOIMAX: fix logic inversion of result; we should be + replacing the function if the tests show we *don't* have a working + version. Report from Emanuel Haupt + + 10/4 + ---- +lib/readline/nls.c + - _rl_init_locale: cope with setlocale returning NULL, make sure we + set up a default value for LC_CTYPE. Report from + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1021109 + +lib/readline/{input.c,rlprivate.h} + - fixes for compiling on w64-mingw32 + + 10/5 + ---- +parse.y + - xparse_dolparen: save and restore extended_glob using local_extglob + in the same way that parse_comsub does. Fixes compat issue reported in + https://bugs.gentoo.org/873931 and by Kerin Millar + + 10/6 + ---- +subst.c + - extract_dollar_brace_string: keep a stack of dolbrace_state values + to handle nested expansions. Report from + Antoine + + 10/7 + ---- +builtins/{shopt.def,common.h} + - extglob_flag: new variable to hold the state of the `extglob' option; + initialized to EXTGLOB_DEFAULT like extended_glob + - shopt_set_extglob: new function to set extended_glob to the right + value for the rest of the shell + +parse.y + - reset_parser: set extended_glob to extglob_flag, which is only + changed by shopt, remove global_extglob + - parse_comsub,parse_cond_command,xparse_dolparen: no longer use + global_extglob + +execute_cmd.c + - execute_cond_node: reset extended_glob to the value of extglob_flag, + since we're executing a command here + + 10/8 + ---- +parse.y + - save_dstart: when we set the value of function_dstart, save the old + value in save_dstart (read_token, read_token_word); restore it in + the grammar production after calling make_function_def. This gives + you correct line numbers for one level of function nesting. + Report from Daniel Castro + + 10/10 + ----- +execute_cmd.c + - shell_execve: rearrange code so that we check for a bad interpreter + before printing a generic ENOENT error message. Report from + Kirill Elagin + + 10/12 + ----- +lib/readline/callback.c + - CALLBACK_READ_RETURN: add an inlined call to RL_CHECK_SIGNALS so we + can handle any signals that arrived before we restored the calling + application's signal handlers. From a gdb dicussion with + Simon Marchi + + 10/12 + ----- +variables.c + - pop_var_context: flag an internal error for shell_variables not + pointing to a function context only if we haven't already flushed + all the local contexts and reset variable_context. This can happen + if errexit is enabled and we're going to be exiting the shell, but + we're running unwind-protects on our way out. Report from + Xavier Delaruelle + + 10/13 + ----- +sig.c + - kill_shell: broke the code that resets the signal disposition to the + default and sends a terminating signal to the shell into a separate + function + - termsig_handler: set handling_termsig to terminating_signal and make + it file-scope so other functions know we're handling a terminating + signal and are about to exit, and which signal it is (latter not used + yet) + - termsig_sighandler: if we get a fatal signal while we're handling a + fatal signal, kill ourselves with the second fatal signal immediately. + Fixes issue reported by Andreas Schwab + +execute_cmd.c + - execute_case_command: call CHECK_TERMSIG after the call to strmatch, + since gmatch will return FNM_NOMATCH if there's a pending terminating + signal and we don't want incorrect results + +subst.c + - pat_subst: make sure REP is non-NULL before calling savestring on it. + Report from Justin Wood (Callek) + + 10/14 + ----- +builtins/{shopt.def,common.h} + - expand_aliases: split into a variable that holds the current state + of alias expansion (expand_aliases) and a variable that reflects the + global option value (expalias_flag), make sure expand_aliases is set + appropriately by shopt + +shell.c,execute_cmd.c,general.c + - expand_aliases: make sure expand_aliases and expalias_flag always + agree + +parser.h + - PST_STRING: new parser flag, set when parsing a string to a command + or word list + +parse.y + - reset_parser: if we're parsing a command substitution or a string, + and need to restore expand_aliases, make sure it's set to the value + of expalias_flag. + Fixes SIGINT during interactive command substitution parsing bug + reported by feng xiangjun + - parse_string_to_word_list,parse_string_to_command: make sure to set + PST_STRING in parser_flags since we're resetting expand_aliases + + 10/17 + ----- +print_cmd.c + - print_function_def, named_function_string: if the function doesn't + have any here-documents, unset was_heredoc after printing the + closing brace so we can add a separator if there is another command + following the function definition. Fixes bug with multiple function + definitions and here-documents reported by D630 + - make_command_string_internal: if we're printing a command + substitution, make sure to preserve newlines in the comsub so we + avoid problems with re-parsing function defs or command substitutions + containing multiple compound commands that need to be separated + by newlines, but don't double them up + +parse.y + - P_ARITH: new parse_matched_pair flags value; used to jump to + parse_comsub if we see a $( inside a $(( )), $[ ], or (( )) + - parse_matched_pair,parse_comsub,parse_arith_command,read_token_word: + make sure to call parse_matched_pair with P_ARITH if we're parsing + an arithmetic command or expansion + - parse_matched_pair: if we see $( inside a call with P_ARITH in the + flags argument, jump to parse_dollar_word and call parse_comsub to + parse it. The rest of the steps assume that parse_comsub has + expanded aliases (or not) appropriately. Fixes bug 2 from + https://bugzilla.redhat.com/show_bug.cgi?id=2134307 + + 10/18 + ----- +builtins/evalstring.c + - parse_and_execute: we play tricks in the parser and in command_substitute + to turn expand_aliases on and off depending on the comsub parser + pass and whether or not we're in posix mode. Since this should only + matter for parsing, when we're processing a command substitution, we + set expand_aliases to the global flag value after parsing the + command and before executing it, and restore it if the global flag + value isn't changed during execution. Fixes bug 1 from + https://bugzilla.redhat.com/show_bug.cgi?id=2134307 + +command.h + - PF_BACKQUOTE: new flag value, only used by command_substitute to + differentiate between `` and $() forms. The former does not have + aliases expanded by parse_comsub in posix mode, so needs to expand + them in parse_and_execute like default mode + +subst.c + - command_substitute: don't modify expand_aliases if PF_BACKQUOTE is + included in flags, since aliases haven't been expanded in the + command string (it was run through parse.y:parse_matched_pair()) + - expand_word_internal: pass PF_BACKQUOTE to command_substitute() if + expanding a `` command substitution + + 10/20 + ----- +parse.y + - yylex: return YYUNDEF as current_token if read_token returns < 0. + Fixes parser reset issue reported by Todd Stein + in https://savannah.gnu.org/support/index.php?110745 + +subst.c + - ARITH_EXP_CHARS: chars that are special and trigger expansion in + arithmetic expressions, EXP_CHARS without `<' and `>'. Fixes bug + reported by Glenn Jackman + +execute_cmd.c + - retain_fifos: replace executing_list (which is still present) as the + indicator of whether or not to save and restore the FIFO list around + a call to execute_command_internal/execute_command; it's more + descriptive and can be used elsewhere + - execute_for_command: set retain_fifos so we don't unlink the fifo + list until the for command completes. Fixes issue reported in + https://savannah.gnu.org/support/index.php?110743 + +lib/readline/xmalloc.c + - memory_error_and_abort: add `const' qualifiers to the argument. Fix + from Markus Elfring + + 10/24 + ----- +general.c + - check_binary_file: check the first two lines for NULs if the first + line begins with a `#!'; otherwise check the first. From a discussion + and patch in https://savannah.gnu.org/support/?110744 + (larsh@apache.org) + +parse.y + - parse_matched_pair: set PST_NOERROR if we read to EOF without finding + a closing match and call parser_error; avoids redundant error + message + +lib/sh/uconvert.c + - uconvert: RETURN: if ipart (integer part) is 0, but upart (fractional + part) is non-zero, multiply upart by mult so we don't lose the sign + for values in the range (-1, 0]. From a report by + izabera + +execute_cmd.c + - execute_in_subshell: check for terminating signals before we return + to our caller, which will immediately exit, and before running any + exit trap (since termsig_handler will run any exit trap). Fixes bug + reported by Andrew Neff + + 10/26 + ----- +lib/readline/complete.c + - rl_filename_completion_function: if the application doesn't supply + any directory hook functions, we need to handle the case where we + dequoted users_dirname and also tilde-expanded dirname. We choose + to tilde expand users_dirname rather than call the application + dequoting function again. Report and patch from + Stefan H. Holek + + 10/27 + ----- +execute_cmd.c + - execute_in_subshell: call procsub_clear in addition to clear_fifo_list, + since none of these process substitutions are children of this new + subshell + +jobs.c + - wait_for_background_pids: call procsub_waitpid on the last procsub + created as long as it's the same as $!, then call reap_procsubs to + clean up the procsub list. Don't call procsub_waitall. Report from + Oguz İsmail Uysal + + 10/31 + ----- +expr.c + - expr_streval: explicitly permit `@' and `*' as associative array + subscripts if the shell compatibility level is greater than 51. + Prompted by report from Corey Hickey + +subst.c + - string_list_pos_params, param_expand: make sure that $* is treated + the same as "$*" in here-document bodies that are being expanded. + From https://lists.gnu.org/archive/html/bug-bash/2022-09/msg00002.html + + 11/1 + ---- +lib/readline/readline.c + - readline_internal_char: save and restore the value of _rl_top_level + around our use of setjmp, even though it doesn't matter in most + cases. Report from sparrowhawk996@gmail.com that it causes crashes + in some obscure callback-mode cases + +lib/readline/isearch.c + - _rl_isearch_dispatch: if we end the search and stuff characters back + to be read again, decrement the current key sequence index by 2 so + we don't have duplicate characters in the sequence + +lib/readline/misc.c + - rl_digit_argument: call _rl_del_executing_keyseq after rl_execute_next + + 11/3 + ---- +builtins/setattr.def + - show_localname_attributes: special-case "-" local variable, since + there is no `declare -' equivalent. + Reported by Emanuele Torre . + + 11/4 + ---- +lib/sh/tmpfile.c + - sh_mktmpname,sh_mktmpfd: use get_urandom32() instead of random() if + we're not using mktemp or mkstemp and the system provides the + appropriate support + +trap.c + - trap_variable_context: new variable, set to variable_context every + time a trap string runs (that is, every time running_trap is set to + a value > 0) in _run_trap_internal, run_exit_trap, run_pending_traps + +trap.h + - trap_variable_context: extern declaration + +builtins/common.c + - get_exitstat: if the `return' builtin is running, we are running a + trap (but not the DEBUG trap), and the return would cause the trap + string to complete (variable_context == trap_variable_context, so + we haven't executed another shell function), use the last command + exit value as the return status. POSIX interp 1602, from + https://www.austingroupbugs.net/view.php?id=1602 + + 11/4 + ---- + +lib/readline/display.c + - local_prompt_invis_chars: new array variable, similar to + local_prompt_newlines, that keeps track of the number of invisible + characters on each line of the prompt string. Use in WRAP_OFFSET + macro with eye to using in W_OFFSET as well. Used for the case where + the last line of the prompt is not the last line with invisible + characters. Can use this in more calculations replacing wrap_offset + and prompt_invis_chars_first_line going forward. Inspired by report + from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1018851 + - update_line: use local_prompt_invis_chars to set _rl_last_c_pos + correctly when on a non-terminal prompt line that contains + invisible characters + + 11/7 + ---- +subst.c + - get_var_and_type: allocate new memory for *valp and return it if the + type is VT_ARRAYMEMBER. The callers -- all of which treat this case + the same as VT_VARIABLE -- will free appropriately. Fixes problems + with using parameter operations like ## on dynamic array variables, + reported by Ivan Kapranov back on 8/31/2022 + +expr.c + - change some error messages to make it clearer these are arithmetic + syntax errors. These will require new translations. + +test.c + - integer_expected_error: change the message to remove `expression', + since this is only called for the `test' builtin, where TEST_ARITHEXP + is not in FLAGS. This will require a new translation. + Reported by Emanuele Torre back on + 6/15/2022 + + 11/10 + ----- +builtins/read.def + - reset_timeout: when a timer expires, make sure to cancel any + readline timeout as well with rl_clear_timeout(). + From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1023776 + + 11/11 + ----- +builtins/reserved.def + - !: add short help text + +lib/readline/complete.c + - make_quoted_replacement: if readline found quote characters anywhere + in the filename, but is not completing on an unclosed quoted string, + and there is an application filename quoting function, let that + function quote the filename if necessary + +bashline.c + - COMPLETE_DQUOTE2: new completion quoting style define + - bash_expand_filename: new function, runs a filename passed to it + through word expansion, suppressing command and process substitution + and returns the result (in new memory if it's different than the + filename argument) + - bash_quote_filename: if the return value from bash_check_expchar is + `$' or ``', expand the filename and if it contains characters that + should be quoted, set the quoting style to COMPLETE_DQUOTE2 + - bash_quote_filename: if the completion quoting style is COMPLETE_DQUOTE2, + use sh_mkdoublequoted to put double quotes around the entire + unexpanded filename instead of using sh_double_quote, which will + backslash-quote any `$'. This is a start at preserving user-supplied + quotes if the (expanded) completed filename requires them. From + reports by Peng Yu in 5/2020 and + Pedro Gimeno in 6/2021 + + 11/14 + ----- +parse.y + - report_syntax_error: if word_top is set and we reach EOF, report the + starting line number in the error message. From a patch from + L A Walsh and Manuel Reiter + back in 9/2018 + - MAX_CASE_NEST: doubled to 256, renamed to MAX_COMPOUND_NEST + - read_token_word: add `if', `while', and `until' to the set of + compound commands that use WORD_TOP and WORD_LINENO (with + corresponding changes to grammar productions) + - [grammar]: changed check to decrement WORD_TOP to >= 0 since we + start at -1 and we want to decrement back to -1 when all loops are + closed + +builtins/jobs.def + - jobs_builtin: call notify_and_cleanup after displaying the status of + jobs to implement POSIX requirement that `jobs' remove terminated + jobs from the jobs list + https://pubs.opengroup.org/onlinepubs/9699919799/utilities/jobs.html#tag_20_62 + + 11/15 + ----- +lib/sh/input_avail.c + - include signal.h unconditionally, we need it for HAVE_SELECT and + HAVE_PSELECT + - nchars_avail: make sure we declare and use readfds and exceptfds if + we have pselect or select available + +lib/readline/input.c + - rl_gather_tyi,rl_getc: need to declare and use readfds and exceptfds + if HAVE_PSELECT or HAVE_SELECT is set. Report from + Henry Bent , fixes from + Koichi Murase + + 11/16 + ----- +lib/sh/ufuncs.c + - quit.h: include unconditionally for declaration of sigemptyset even + if HAVE_SELECT is not defined + +lib/sh/timers.c + - USEC_PER_SEC: make sure it's defined even if HAVE_SELECT is not + +lib/glob/sm_loop.c + - BRACKMATCH: if an equivalence class does not match, and the next + character following the class is a `]', treat that as the end of + the bracket expression. + Report and fix from Koichi Murase + - GMATCH: if the current character in the string is a `/' and the + current element in the pattern is a bracket expresion, and the FLAGS + include FNM_PATHNAME, return FNM_NOMATCH immediately. A bracket + expression can never match a slash. + Report and fix from Koichi Murase + - BRACKMATCH: if we encounter a in a bracket expression, either + individually or as part of an equivalence class, nullify the bracket + expression and force the `[' to be matched as an ordinary + character + + 11/17 + ----- +lib/glob/sm_loop.c + - BRACKMATCH: if a slash character appears as the first character + after a non-matching character class or equivalence class, treat + the bracket as an ordinary character that must be matched literally + - BRACKMATCH: if a slash character appears as the second character + of a range expression, treat the bracket as an ordinary character + - BRACKMATCH: if a slash character appears in the portion of a + bracket expression that already matched, treat the bracket as an + ordinary character + Updates from Koichi Murase + - BRACKMATCH: if a range expression is incomplete (no end char), + treat the bracket as an ordinary character + + 11/18 + ----- +doc/bashref.texi + - Reporting Bugs: add mention of the Savannah project page. Suggested + by Loïc Yhuel + + 11/20 + ----- +builtins/common.h + - SEVAL_NOOPTIMIZE: new flag for parse_and_execute: means don't try to + optimize forks out of any simple or conditional commands + +builtins/evalstring.c + - parse_and_execute: if FLAGS includes SEVAL_NOOPTIMIZE, don't try to + call can_optimize_connection to optimize away forks from AND_AND or + OR_OR commands + +builtins/eval.def,trap.c,parse.y,jobs.c + - parse_and_execute: include SEVAL_NOOPTIMIZE in any calls to + parse_and_execute. Fixes bug reported by + Frode Nordahl + + 11/21 + ----- +lib/readline/readline.c + - readline_initialize_everything: use xmalloc to initialize + rl_executing_keyseq, since we use xrealloc to reallocate it and + don't check it for NULL anywhere + +subst.c + - parameter_brace_expand_word: make sure to update *ESTATEP and pass + ES back to the caller even if array_value returns NULL. Fixes + memory leak referencing unset associative array elements reported + by Ralf Oehler ; fix from + Koichi Murase + + 11/22 + ----- +lib/glob/sm_loop.c + - BRACKMATCH: if a backslash appears before a slash in a bracket + expression, treat the whole thing as literal and try to match the + open bracket + - BRACKMATCH: if a bracket expression ends in an unquoted backslash, + try to match the left bracket literally and go on. More discussion with + Koichi Murase + +execute_cmd.c + - execute_in_subshell: don't try to optimize away forks in the command + if the subshell command is being timed or its return value is being + inverted. Report from Dabrien 'Dabe' Murphy + + 11/23 + ----- +lib/readline/complete.c + - __WIN32__: remove uses of this preprocessor symbol, use _WIN32 + +lib/readline/rldefs.h + - Don't define NEW_TTY_DRIVER on _WIN32. Fix from + sparrowhawk996@gmail.com + +include/posixselect.h + - include "posixtime.h" instead of so the right guards + are present + +builtins/read.def + - read_builtin_timeout: make sure we don't try to call shtimer_select + if HAVE_SELECT isn't define; it won't be compiled in + +include/stdc.h + - restrict: make sure we have a definition if __STDC__ is not defined + +include/posixtime.h,lib/sh/gettimeofday.c + - gettimeofday: make sure the function signature matches POSIX by + adding `restrict' + + 11/25 + ----- +include/posixselect.h + - don't try to define HAVE_SELECT at all if _WIN32 is defined + +lib/readline/kill.c + - define WIN32_LEAN_AND_MEAN for the windows-specific paste function + +lib/readline/rlprivate.h + - _rl_timeout_select: only include declaration if HAVE_SELECT or + HAVE_PSELECT are defined + + 11/28 + ----- +lib/readline/input.c + - rl_gather_tyi: call rl_input_available_hook after FIONREAD test, + let the application hook into whether or not there are characters + to read + +execute_cmd.c + - execute_function: if the maximum function nesting level is exceeded, + run the unwind-protects before jumping back to top level. Report + from felix + +variables.c + - find_variable_nameref_for_create,find_variable_nameref_for_assignment: + handle find_variable_nameref returning &nameref_maxloop_value, return + NULL and print a warning message in that case + - find_variable_nameref: return &namref_maxloop_value instead of NULL + if the number of resolution cycles exceeds NAMEREF_MAX; change + callers to print a new error message in this case; no other change + in behavior. From a 4/2020 suggestion from Andrej Podzimek + + - find_variable_nameref_context, find_nameref_at_context, + find_variable_last_nameref_context: make sure to return + &nameref_maxloop_value consistently and handle getting it as a + return value from other functions + + 11/29 + ----- +lib/readline/display.c + - _rl_update_final: if there is only one line (_rl_vis_botlin == 0) + and that line is empty (botline_length == 0), assume there is no + prompt and the line has no contents, so output the CR/LF to indicate + that the newline has been read. From a report from + Kevin Pulo + + 11/30 + ----- +builtins/evalstring.c + - parse_and_execute: if we are executing the eval builtin, and the + return status from the command is suppressed (builtin_ignoring_errexit), + set CMD_IGNORE_RETURN in the parsed command's flags. From a report + from Tycho Kirchner + + 12/1 + ---- +lib/glob/sm_loop.c + - PARSE_SUBBRACKET: a reworked PARSE_COLLSYM, generalized to handle + [:, [=, and [. special bracket expressions + - BRACKMATCH: change to use PARSE_SUBBRACKET consistently to parse + [:, [=, and [. special bracket expressions + - PATSCAN: takes new FLAGS arg, changed all callers to just pass the + flags they get through to PATSCAN + - PATSCAN: call PARSE_SUBBRACKET for [:, [=, and [. to treat them + consistently (uses FLAGS argument here) + - PATSCAN: handle FNM_NOESCAPE appearing in FLAGS argument + This set of fixes contributed by Koichi Murase + +lib/glob/{glob,gmisc}.c + - PATSCAN: change all callers to add extra flags arg of 0 + +doc/{bash.1,bashref.texi} + - trap description: replace ARG with ACTION + - clarify the language describing what trap without arguments and + trap -p without arguments display + - clarify that trap in non-interactive shells does not allow signals + that were ignored at shell start to be trapped; interactive shells + allow this + - trap: add missing command types to the description of when the + DEBUG trap is executed + +builtins/trap.def + - LONG_DOC: replace ARG with ACTION + - make it clear that trap and trap -p without arguments display a + information about specified signals, but in a form that may be + reused as shell input + + 12/5 + ---- +pcomplete.c + - compgen_compspec: new flag saying whether or not we're running via + the compgen builtin or via programmable completion: set to 0 + every time gen_progcomp_completions runs, set to 1 in + gen_compspec_completions if this_shell_builtin == compgen_builtin + - gen_shell_function_completions: call rl_clear_signals and + rl_set_signals so the shell's signal handlers are active when + running shell functions to generate completions. We try to do it + only when programmable completion, not the compgen builtin, is active. + Idea from Koichi Murase , fixes bug + reported in 9/22 + +sig.c + - sigint_sighandler, termsig_sighandler: since these can now be called + during programmable completion, we need to set the readline signal + event hook if the readline state includes RL_STATE_DISPATCHING or + RL_STATE_COMPLETING, since we can't rely on RL_STATE_SIGHANDLER + being set and we want to call throw_to_top_level here + - throw_to_top_level: if the shell is interactive, before calling + bashline_reset (which zeroes rl_signal_event_hook), call + rl_cleanup_after_signal if we think readline hasn't called it + already + + 12/9 + ---- +configure.ac + - add "LOCAL_LDFLAGS = -rdynamic" for freebsd/openbsd/netbsd. Reported + by Christian Weisgerber + + 12/12 + ----- +subst.c + - parameter_brace_expand_length: handle namerefs with values that are + valid length expansion expressions but invalid identifiers. From + ed7-aspire4925@hotmail.com via https://savannah.gnu.org/support/?110799 + + 12/13 + ----- +subst.c + - extract_heredoc_dolbrace_string: fix off-by-one error after calling + extract_command_subst and extract_process_subst that caused it to + copy one too many parsed characters. Fix for bug reported by + Norbert Lange + + 12/14 + ----- +execute_cmd.c + - execute_cond_node: if a regular expression fails to compile, print + an error message. Report from Emanuele Torre + back on 6/15/2022 + +trap.c + - trap_variable_context -> trap_return_context, initialize from + funcnest + sourcenest instead of variable_context so we handle + shell function execution and `./source', both of which can use + `return'. Idea from Koichi Murase + +builtins/common.c + - get_exitstat: compare trap_return_context against funcnest+sourcenest, + since that's how it's initialized now + +lib/readline/readline.c + - readline_internal_charloop: if we're not using the callback interface, + don't restore _rl_top_level from olevel, since we will just be going + around the loop again and will potentially need to use it multiple + times. Report from Emanuele Torre + + 12/15 + ----- +shell.h + - EX_UTILERROR: new generic special builtin return status to indicate a + POSIX utility error that should cause a non-interactive shell to abort + +execute_cmd.c + - builtin_status: translate EX_UTILERROR to EXECUTION_FAILURE + +builtins/set.def + - unset_builtin: return EX_UTILERROR if posix_utility_error is set; + set it when trying to unset a non-identifier (variable) or a + non-unsettable or readonly variable + + 12/16 + ----- +subst.c + - de_backslash: now takes a second argument with the current quoting + flags + - de_backslash: if the quoting flags include Q_HERE_DOCUMENT and the + shell is in posix mode, remove backslashes quoting double quotes + +subst.h + - de_backslash: update extern declaration + +lib/readline/histexpand.c + - history_expand_internal,get_history_word_specifier,get_subst_pattern, + hist_error,history_find_word,hist_string_extract_single_quoted: + now take const char * string arguments + +lib/readline/mbutil.c + - _rl_get_char_len,_rl_adjust_point,_rl_find_next_mbchar_internal, + _rl_find_next_mbchar,_rl_find_prev_mbchar,_rl_find_prev_mbchar_internal, + _rl_test_nonzero,_rl_find_prev_utf8char,_rl_is_mbchar_matched, + _rl_compare_chars,_rl_char_value: take const char * string arguments + + 12/17 + ----- +builtins/umask.def + - parse_symbolic_umask: add missing POSIX pieces: + o `action' of ugo, meaning to copy portions of initial mask + o multiple `op' specs as part of the action string (`u=r-w') + (resets perm) + o missing perm characters Xst in action string + o default `who' equivalent to `a' instead of fixing up later + + 12/19 + ----- +builtins/type.def + - if -a and -P are both supplied, look in the command hash table but + continue and perform a $PATH search even if the NAME is hashed. + From a report by Adam Vodopjan + +doc/{bash.1,bashref.texi} + - type: update description to fix it to what the code actually does + +builtins/set.def + - set_edit_mode: don't run with_input_from_stdin or with_input_from_stream + unless command_execution_string is NULL. Report from + Harald van Dijk + + 12/20 + ----- +braces.c + - array_concat: add a check for interrupts and terminating signals + into the inner loop + +jobs.c + - without_job_control: set original_pgrp == NO_PID since we don't + want to be messing with the terminal pgrp if we call end_job_control. + From a report from ks1322 ks1322 + + 12/21 + ----- +include/{posixtime.h,systimes.h,shmbutil.h,shtty.h} + - PARAMS: remove + + 12/22 + ----- +builtins/evalfile.c + - _evalfile: add SEVAL_NOOPTIMIZE to the parse_and_execute flags + (maybe overkill, but safer). From a report by + Dan Church and Oguz + +lib/sh/gettimeofday.c + - gettimeofday: added code for _WIN32 version + + 12/27 + ----- +doc/{bash.1,bashref.texi},builtins/printf.def + - specify the valid format characters as a subset of what printf(3) + specifies, note that the %n format specifier takes a variable name + as an argument. Suggestion from Emanuele Torre + + 12/28 + ----- +{xmalloc,variables,unwind_prot,trap,test,subst,sig,siglist,shell,redir, +pcomplete,pathexp,make_cmd,mailcheck,jobs,input,hashcmd,hashlib,general, +flags,findcmd,externs,execute_cmd,error,dispose_cmd,command,bashline, +bashhist,assoc,arrayfunc,array,alias}.h +{version,version2}.c + - PARAMS: remove for ANSI C-ification + +builtins/{getopt,common,bashgetopt}.h +builtins/{mkbuiltins,gen-helpfiles,psize,psize-posix}.c +builtins/{evalstring,bashgetopt,common,evalfile,getopt}.c +builtins{alias,bind,break,cd,command,complete,declare,enable,exit,fc, +fg_bg,getopts,hash,help,history,jobs,kill,mapfile,printf,pushd,read,set, +shopt,source,suspend,trap,type,ulimit,umask,wait}.def + - PARAMS: remove for ANSI C-ification + +lib/malloc/{watch,table,shmalloc,mstats,imalloc}.h +lib/malloc/{malloc,stats,table,trace}.c + - PARAMS: remove for ANSI C-ification + +lib/glob/{glob,strmatch}.h +lib/glob/{glob,glob_loop,gmisc,sm_loop,smatch,strmatch,xmbsrtowcs}.c + - PARAMS: remove for ANSI C-ification + +lib/intl/{eval-plural,plural-exp,loadinfo,hash-string,gettextP}.h, +lib/intl{plural.y,plural.c}, +lib/intl/{finddomain,bindtextdom,dcigettext,l10nflist,loadmsgcat,localealias,plural-exp}.c + - PARAMS: remove for ANSI C-ification + - STATIC -> static + - internal_function -> inline + +lib/sh/{casemod,clock,eaccess,fnxform,fpurge,makepath,mktime,netopen,pathphys,random,shquote,snprintf,spell,strtod,strtoimax,strtoumax,times,timeval,tmpfile,unicode,winsize,zcatfd,zgetline,zmapfd}.c + - PARAMS: remove for ANSI C-ification + +support/{bashversion.c,mkversion.sh,mksignames.c} + - PARAMS: remove for ANSI C-ification + +lib/sh/{clock,strchrnul,getcwd,times,rename,inet_aton,strdup,strerror,strnlen +strpbrk,strtod,strtoimax,strtol,strtoumax,wcsdup,wcsnwidth,wcswidth,strcasecmp, +strcasestr}.c + - C89-style function declarations + +lib/malloc/{alloca,malloc,stats,table,trace,xmalloc}.c + - C89-style function declarations + + 12/29 + ----- +lib/glob/{glob,glob_loop,gmisc,sm_loop,smatch,strmatch,xmbsrtowcs}.c + - C89-style function declarations + +lib/sh/{zcatfd,zgetline,zmapfd,zread,zwrite,winsize,vprint,uconvert,ufuncs, +unicode,utf8}.c +lib/sh/{stringlist,stringvec,strtrans,strvis,timeval,tmpfile}.c +lib/sh/{setlinebuf,shmatch,shmbchar,shquote,shtty,snprintf,spell}.c +lib/sh/{random,pathcanon,pathphys,oslib,netconn,netopen}.c +lib/sh/{mailstat,makepath,mbscasecmp,mbschr,mbscmp,mktime}.c +lib/sh/{input_avail,itos,getenv,fmtulong,fnxform,eaccess,dprintf,casemod,clktck}.c + - C89-style function declarations + +examples/loadables/{accept,asort,basename,bcat,cat,csv,cut,dirname,dsv}.c +examples/loadables/{fdflags,finfo,head,hello,id,lcut,ln}.c +examples/loadables/{mkdir,mkfifo,mktemp,mypid,necho,pathchk}.c +examples/loadables/{print,printenv,push,realpath,rm,rmdir,seq}.c +examples/loadables/{setpgid,stat,strftime,sync,tee,template,truefalse,tty}.c +examples/loadables/{uname,unlink,whoami}.c + - C89-style function declarations + +xmalloc.c, array2.c, list.c, dispose_cmd.c, copy_cmd.c, bracecomp.c, mksyntax.c + - PARAMS: remove for ANSI C-ification + - C89-style function declarations + + 12/30 + ----- +hashlib.c,assoc.c,input.c,hashcmd.c,alias.c,alias.h,array.c,flags.c,pcomplib.c, +pcomplib.h,locale.c +variables.c,arrayfunc.c,bashhist.c,bashline.c,error.c,pathexp.c,nojobs.c, +stringlib.c,eval.c,findcmd.c,mailcheck.c,make_cmd.c,shell.c,print_cmd.c, +general.c,expr.c + - PARAMS: remove for ANSI C-ification + - C89-style function declarations + - add `const' and `inline' where it makes sense + + 12/31 + ----- +test.c,execute_cmd.c,parse.y,pcomplete.c,trap.c,subst.c,braces.c,jobs.c,sig.c +builtins/{evalstring.c,gen-helpfiles.c,mkbuiltins.c} +builtins/{alias.def,bind.def,break.def,builtin.def,caller.def,cd.def,colon.def} +builtins/{command.def,complete.def,declare.def,echo.def,enable.def,eval.def} +builtins/{exec.def,exit.def,fc.def,fg_bg.def,hash.def,help.def,history.def} +builtins/{jobs.def,kill.def,let.def,mapfile.def,printf.def,pushd.def,read.def} +builtins/{return.def,set.def,setattr.def,shift.def,shopt.def,source.def} +builtins/{suspend.def,test.def,times.def,trap.def,type.def,ulimit.def} +builtins/{umask.def,wait.def} + - PARAMS: remove for ANSI C-ification + - C89-style function declarations + - add `const' and `inline' where it makes sense + + 1/2/2023 + -------- +lib/sh/{stringvec.c,inet_aton.c,strnlen.c,spell.c,netopen.c,stringlist.c} +lib/sh/{strtrans.c,tmpfile.c,uconvert.c,zcatfd.c} +builtins/{common.c,common.h} +mailcheck.c,bashline.c,pathexp.c,stringlib.c,locale.c,pcomplete.c,redir.c +test.c,trap.c,variables.c,bashhist.c,expr.c,arrayfunc.c,assoc.c,variables.c +subst.c,findcmd.c +arrayfunc.h,variables.h,findcmd.h,bashline.h,trap.h,pathexp.h,externs.h, +pcomplete.h,bashhist.h,assoc.h,general.h,subst.h + - more `const' changes, remove `register' + + 1/3 + --- +parse.y + - more `const' changes, remove `register' + +variables.h + - VARLIST: list_len and list_size now size_t + +variables.c + - vlist_alloc: take size_t parameter, changed callers + - vlist_realloc: take size_t parameter, changed callers + +lib/sh/stringvec.c,externs.h + - functions that take int size params now take size_t + - strvec_len: returns size_t + +lib/sh/stringlist.c,externs.h + - STRINGLIST: list_size and list_len now size_t + - functions that take int size params now take size_t + +variables.c,bashline.c,builtins/bind.def + - change strvec_ int parameters to size_t where it makes sense + - change strlist_ int parameters to size_t where it makes sense + +builtins/shopt.def + - reset_shopt_options: set glob_always_skip_dot_and_dotdot to 1, + since that's the current default in lib/glob/glob.c + + 1/4 + --- +execute_cmd.c,parse.y,general.c,make_cmd.c,print_cmd.c,variables.c,expr.c +jobs.c,subst.c,input.c,unwind_prot.c,pathexp.c,pathexp.h,alias.c,bashline.c +bashhist.c,lib/sh/shquote.c,externs.h,stringlib.c,locale.c,findcmd.c +builtins/common.c,builtins/declare.def,builtins/enable.def,builtins/fc.def +lib/sh/zmapfd.c,builtins/help.def,builtins/mapfile.def,builtins/read.def +builtins/shopt.def,lib/glob/glob.c,lib/glob/smatch.c,lib/glob/sm_loop.c +lib/glob/xmbsrtowcs.c,lib/glob/gmisc.c,lib/glob/gm_loop.c +lib/sh/getenv.c,lib/sh/makepath.c,lib/sh/pathphys.c,lib/sh/tmpfile.c +lib/sh/stringlib.c,lib/sh/spell.c,lib/sh/strtrans.c,lib/sh/zgetline.c +lib/sh/mbscasecmp.c,lib/sh/utf8.c +lib/readline/readline.c,lib/readline/rlprivate.h,lib/readline/vi_mode.c +lib/readline/complete.c,lib/readline/bind.c,lib/readline/isearch.c +lib/readline/util.c,lib/readline/kill.c,lib/readline/macro.c +lib/readline/text.c,lib/readline/histexpand.c,lib/readline/histfile.c +lib/readline/mbutil.c,lib/tilde/tilde.c + - size_t changes + - remove some unused variables + - remove `register' + + 1/5 + --- +builtins/getopt.c + - sh_getopt_restore_state: make sure argv[sh_curopt] is non-null before + using it + +parse.y + - CHECK_FOR_RESERVED_WORD: make sure to set word_top appropriately if + the last token was IF, WHILE, or UNTIL, since these tokens can follow + those reserved words + +Makefile.in + - ubsan: new target, to build with gcc/clang UBSan undefined behavior + sanitizer + + 1/6 + --- +execute_cmd.[ch],locale.c,parse.y,expr.c,bracecomp.c,bashline.c,externs.h +stringlib.c,general.[ch] +builtins/{subst.c,array.c,echo.def,printf.def,enable.def,help.def,set.def} +lib/sh/{strtrans.c,stringvec.c,shquote.c} +lib/glob/sm_loop.c +lib/readline/{vi_mode.c,histfile.c,funmap.c,complete.c,display.c,bind.c,isearch.c} +lib/tilde/tilde.c + - final code cleanups for ANSI C and lint/ubsan/asan runs + + 1/7 + --- +lib/readline/complete.c + - rl_complete_internal: when computing nontrivial_lcd and the length + of the text from the line buffer, dequote the text from the line + buffer before comparing it against the common prefix of the matches + (matches[0]), so we don't get spurious mismatches if the quoted text + from the line is longer than the unquoted match. Report from + Martin Castillo + +input.[ch] + - get_buffered_stream(fd): new function, return the BUFFERED_STREAM * + corresponding to file descriptor FD, if it exists + + 1/8 + --- +parse.y + - shell_getc: if yy_getc returns EOF but the buffered stream input + indicates an error state, set shell_input_line_terminator to + READERR. Currently treated the same as EOF. + + 1/10 + ---- +lib/sh/random.c + - intrand32: use % operator instead of (mathematically equivalent) + subtraction and multiplication, which can cause signed 32-bit + overflow. Report from Sam James + +lib/readline/input.c + - rl_getc: if the application hasn't defined a signal event handler, + and readline is in callback mode, make sure SIGINT breaks out of + operations like incremental and non-incremental searches and digit + arguments by calling _rl_abort_internal, since the callback code + expects the various contexts that rl_callback_sigcleanup() resets + to be valid + - rl_getc: if there is a pending signal when we enter the while loop + in callback mode, handle it in the same way we would if a signal + arrived while we were waiting in select/pselect. That forces + callback mode to call _rl_abort_internal in the right place. + From a report from Andrew Burgess + + 1/13 + ---- +trap.c + - SIG_ASYNCSIG: new value for sigmodes; means that the signal is + ignored because an async command is being executed + - set_signal: if the original signal disposition is SIG_IGN only + return if SIG_ASYNCSIG isn't set. This implements POSIX interp 751 + for setting a trap + - ignore_signal: if we're ignoring a signal that already has SIG_IGNORED + set, make sure we set SIG_TRAPPED in case of SIG_ASYNCSIG (POSIX + interp 751) + - reset_signal,restore_signal: if we want to reset or restore a signal + that has SIG_ASYNCSIG set, make sure we reset to SIG_DFL if the + signal is trapped to maintain POSIX semantics + - set_signal_async_ignored: new function to set original_signals to + SIG_IGN and set the SIG_IGNORED and SIG_ASYNCSIG sigmode flags; used + by setup_async_signals + - signal_is_async_ignored: return true if the SIG argument is being + ignored because it's part of an async list + +trap.h + - set_signal_async_ignored,signal_is_async_ignored: extern declarations + +sig.c + - initialize_terminating_signals: if a signal is ignored because it's + part of an async list, don't bother trying to initialize or set the + hard ignored flag + +execute_cmd.c + - execute_simple_command: if we're executing a builtin or function + asynchronously, call reset_terminating_signals like we do in + execute_in_subshell() + - execute_subshell_builtin_or_function: only call set_sigint_handler + if async is 0, so we don't undo the work done by setup_async_signals. + If the old handler is SIG_IGN and the signal has SIG_ASYNCSIG set + and isn't trapped, restore the old handler + - setup_async_signals: call set_signal_async_ignored to set the right + flags + + 1/16 + ---- +parse.y + - read_token_word: if we're in posix mode, and we find a reserved word + before checking a token for aliases, turn off the `check next word + for aliases' flag (PST_ALEXPNEXT). This is for compatibility with + other shells. From a report by + - shell_getc: make sure the shell is reading a buffered stream before + checking the default buffered stream for errors if yy_getc returns 0 + + 1/17 + ---- +subst.c + - split_at_delims: if the cursor is at whitespace just preceding a + word, and we're doing this for completion (e.g., to build COMP_WORDS), + force the creation of an empty word and set the current word to it. + This is a change from previous behavior, but a useful one: it makes + COMP_WORDS[COMP_CWORD] and $2 to a completion function consistent + and the same as the word readline wants to complete. From a report + from Naim Favier back in 6/2022 + +parse.y + - read_token: turn off PST_ALEXPNEXT if we read a shell metacharacter: + we will expand aliases anyway if the token puts the shell in a + command word position and we took pains to turn it off for + redirection tokens; remove special cases that turned it off + - pop_string: don't turn off PST_ALEXPNEXT if it's on; this is what + prevents it from being enabled if an alias expansion of more than + two aliases ends with a space. Fixes issue reported by + + + 1/18 + ---- +jobs.c + - wait_for: if we are reaping a background job, don't bother trying to + give the terminal back to shell_pgrp -- we never set the terminal's + pgrp to that job in the first place. Fixes issue reported by + Steffen Nurpmeso + + 1/19 + ---- +lib/readline/{histexpand.c,history.h} + - history_expand: first argument is now `const char *'. Request from + Simon Marchi + +lib/readline/doc/{history.3,hstech.texi} + - history_expansion: change description to note new const first arg + + 1/21 + ---- +lib/readline/input.c + - rl_gather_tyi: move call to rl_input_available_hook to the top, + giving it first shot. There's still no way for it to set chars_avail. + Conditionalize the rest of the input methods based on whether the + result == -1. + +lib/readline/rl_private.h + - move the decision making about RL_TIMEOUT_USE_SELECT/RL_TIMEOUT_USE_SIGALRM + here from input.c + + 1/23 + ---- +trap.c + - restore_default_signal: if we have a signal that's not trapped, but + is a signal that is set to SIG_ASYNCSIG, POSIX interp 751 requires + the shell to allow it to be reset to the default, even though it + wasn't already trapped + +subst.c + - do_assignment_internal: don't allocate new memory for NAME, just + modify and restore it in place + + 1/25 + ---- +lib/readline/histfile.c + - history_write_slow: a fallback function that uses stdio to write the + history list to a supplied file descriptor + - history_do_write: call history_write_slow if ftruncate/mmap/malloc + fail; hope the simpler approach works + + 1/27 + ---- +general.[ch] + - valid_function_name: new function, returns non-zero if the name + can be used as a function name without the `function' prefix + +print_cmd.c + - named_function_string,print_function_def: use valid_function_name so + the rules about when to use the `function' reserved word are + consistent + +builtins/trap.def + - new option -P, which prints only the action associated with each + signal spec argument + +doc/{bash.1,bashref.texi} + - trap: document new -P option, add note that trap -p or trap -P in a + subshell can print the parent's traps + + 1/28 + ---- +parse.y + - shell_getc: make sure references to shell_input_line_property are + protected by #ifdef HANDLE_MULTIBYTE. From + https://savannah.gnu.org/patch/?10309 + +print_cmd.c + - named_function_string,print_function_def: don't copy the function + COMMAND * before printing it as text; unwind-protect any redirects + attached to the function body + +parse.y + - PST_CMDBLTIN: new parser state, means the previous token word was + `command' in a command position + - read_token_word: in posix mode, "command" followed by a declaration + utility preserves the declaration utility status of the following + word, so we mark that state and then check a word for being an + assignment builtin if in that state on the next call. This makes + compound assignments to builtins that accept them (e.g., `declare') + work as if `command' were not present. This is a POSIX issue 8 + requirement + - read_token: turn off PST_CMDBLTIN state as appropriate + +subst.c + - use locale_mb_cur_max instead of MB_CUR_MAX consistently + + 2/1 + --- +builtins/printf.def + - printf_builtin: %q and %Q use the `alternate form' flag to force + single quoting instead of backslash quoting. $'...' is still + preferred if there are characters that require it + - getwidestr, getwidechar: functions to take a possibly multibyte + character string and convert to a wide character string or a wide + character, respectively + - convwidestr, convwidechar: functions to take a wide character string + or single character, apply any precision, convert back to a multibyte + character string, and return the result for printing + - printf_builtin: consistently print an error message if printstr() + returns < 0, since it will only do that if ferror(stdout) is true; + let the PRETURN macro do that if appropriate, so we don't duplicate + code + + 2/2 + --- +builtins/printf.def + - printwidestr: wide-character version of printstr; understands + fieldwidth and precision as characters instead of bytes + - printf_builtin: interpret %ls and %lc as referring to wide strings + and characters, respectively; use printwidestr to print the wide- + character string obtained from the (presumably multibyte) argument. + Fieldwidth and precision are characters, not bytes + + 2/3 + --- +builtins/set.def + - unset_builtin: since tokenize_array_reference modifies its NAME + argument, we need to restore the original word if there is no + array variable found with that name, so we can go ahead and try to + unset a function with that wonky name. Inspired by a report from + Emanuele Torre + +parse.y + - read_token_word: don't set the W_HASDOLLAR flag in the returned WORD + for <(command) and >(command). That way they can be used in function + names. + +execute_cmd.c + - execute_simple_command: if in posix mode, don't perform function + lookup for command names that contain a slash + +builtins/enable.def + - dyn_load_builtins: don't allow dynamically loaded builtins to have + slashes in their name + + 2/4 + --- +general.c + - valid_function_word: new function, used to check whether a word can + be used as a function name. Replaces call to check_identifier(); + incorporates POSIX interp 383 check for special builtin so we can + move it out of execute_intern_function(). + - valid_function_name: use the FLAGS argument instead of POSIXLY_CORRECT; + only reject reserved words if FLAGS&1 + +execute_cmd.c + - execute_intern_function: call valid_function_word() instead of + check_identifier(); remove check for special builtin that + valid_function_word performs + +print_cmd.c + - print_function_def,named_function_string: pass POSIXLY_CORRECT to + valid_function_name as the FLAGS argument + + 2/6 + --- +subst.c + - expand_subscript_string: don't set W_NOTILDE in td.flags so we + perform `normal' tilde expansion (expansion at the start of the + word) on the array subscript + - expand_oneword,expand_compound_assignment_word: change second arg to + ATYPE, which better reflects its use + +arrayfunc.c + - assign_assoc_from_kvlist,assign_compound_array_list,expand_and_quote_assoc_word: + use expand_assignment_string_to_string instead of expand_subscript_string + for the rhs of the assignment or the second word in the kvpair to + be more consistent with how assignment statements behave (e.g., + tilde expansion). Fixes issue reported by maroloccio@gmail.com + + 2/7 + --- +parse.y + - discard_until: now returns the last character read. If we get an + EOF while processing a comment, return EOF (rarely happens; + shell_getc returns EOF only under certain circumstances) + - read_token: if discard_until returns EOF, return yacc_EOF + +input.h + - bclearerror: new macro, clears the B_ERROR flag in the buffered + stream BP + +input.c + - b_fill_buffer: try making errors `sticky': if the B_ERROR flag is + set for the buffered stream, return EOF immediately. This is similar + to what stdio does + +builtins/fc.def + - fc_builtin: in posix mode, if there are extra arguments supplied to + -s (e.g. pat=rep first last), throw an error + +doc/{bash.1,bashref.texi} + - printf: document new altform for %q/%Q and %ls/%lc + + 2/8 + --- +bashline.c + - set_up_new_line: if the new line doesn't change rl_line_buffer, + just return right away without changing rl_point. Affects + alias-expand-line, history-expand-line, and history-and-alias-expand-line. + Inspired by a report from + Addison Brendtro + +builtins/declare.def + - declare_internal: make multiple calls to `local -' at the same + context have no effect after the first one. That way we don't keep + overwriting the saved option set. Report and fix from + Emanuele Torre + + 2/10 + ---- +execute_cmd.[ch] + - bind_lastarg: now a public function + +parse.y + - execute_variable_command: call bind_lastarg instead of bind_variable + to avoid exporting $_ if allexport is set. Fix from + Emanuele Torre + - history_delimiting_chars: if we're parsing some kind of delimited + construct that's *not* a quoted string, don't bother adding an extra + newline to the history if the current history entry already ends in + a newline. From https://savannah.gnu.org/support/?110838 via + Ganapathi Kamath + + 2/13 + ---- +bashline.c + - set_up_new_line: add some more heuristics to try and usefully + position rl_point + + 2/16 + ---- +lib/readline/complete.c + - complete_fncmp: fix for case mapping `-' and `_' if the bytes do not + form a valid multibyte character + +lib/readline/util.c + - new functions: _rl_strcaseeqn, like strcasencmp but with a flag to + handle character mapping (-_) like completion-map-case wants, and + _rl_charcasecmp, to do the same thing for two characters. + Inspired by a patch from Brennan Vincent + +lib/readline/mbutil.c + - new functions: _rl_mb_strcaseeqn and _rl_mb_charcasecmp, multibyte + versions of the above + Inspired by a patch from Brennan Vincent + +lib/readline/{rlprivate.h,rlmbutil.h} + - extern declarations for the above functions + +lib/readline/complete.c + - complete_fncmp: use _rl_mb_strcaseeqn and _rl_strcaseeqn as + appropriate, remove duplicated inline code + Inspired by a patch from Brennan Vincent + +lib/readline/{isearch.c,rlprivate.h} + - _rl_search_case_fold: new variable, will be used to indicate case- + insensitive incremental and non-incremental searches + +lib/readline/bind.c + - search-ignore-case: new bindable variable, tied to _rl_search_case_fold + Inspired by a patch from Brennan Vincent + +lib/sh/mbsncmp.c + - mbsncmp(3) replacement + +lib/readline/isearch.c + - _rl_isearch_dispatch: honor `search-ignore-case' variable and perform + case-insensitive incremental searches if it's set + Inspired by a patch from Brennan Vincent + +lib/readline/histlib.h + - CASEFOLD_SEARCH: new flag for history searching, means to search + strings case-insensitively + +lib/readline/histsearch.c + - history_search_internal: anchored searches honor CASEFOLD_SEARCH + +lib/readline/histsearch.c + - history_search_internal: searches now honor CASEFOLD_SEARCH + - _hs_history_search: new function, just external interface to + history_search_internal, allows the rest of the library to specify + search flags + +lib/readline/histlib.h + - _hs_history_search: extern declaration + +lib/readline/search.c + - noninc_search_from_pos: use _hs_history_search, add CASEFOLD_SEARCH + to flags if _rl_search_case_fold is non-zero + +doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} + - search-ignore-case: document new bindable variable + + 2/17 + ---- +config-top.h + - PATSUB_REPLACE_DEFAULT: macro set to 1 or 0 to set the default value + of `patsub_replacement'. Can be overridden by -DPATSUB_REPLACE_DEFAULT=0 + in the `make' command + +builtins/shopt.def + - reset_shopt_options: reset patsub_replacement to PATSUB_REPLACE_DEFAULT + +subst.c + - patsub_replacement: initialize to PATSUB_REPLACE_DEFAULT + +parse.y + - shell_getc: only call clearerr(stdin) when yy_stream_get returns EOF + if the shell is currently interactive (interactive != 0) + - shell_getc: if the shell is not interactive (interactive_shell == 0) + and using stdio to read the script (bash_input.type == st_stream), + set shell_input_line_terminator to READERR if ferror(stdin) is true + after yy_stream_get returns EOF + + 2/20 + ---- +doc/{bash.1,bashref.texi} + - update aliases description based on a bug-bash discussion + - update description of word splitting behavior when IFS is unset + +builtins/evalfile.c + - _evalfile: if reading the entire file doesn't return the same + number of bytes as requested (the file size), treat this as a read + error + + 2/21 + ---- +parse.y + - yylex: if read_token returns < 0, return YYEOF if EOF_Reached = 1. + Don't return yacc_EOF because that allows commands to be executed. + - grammar: add a production to handle YYEOF, treating it the same as + yacc_EOF. Based on a report from + Eduardo A. Bustamante López + +jobs.c + - wait_for: if we're checking for window size changes, allow checks + during trap commands while readline is active or `bind -x' command + execution. Fix from Koichi Murase + + 2/22 + ---- +jobs.c + - wait_for: check for window size changes during programmable completion + + 2/23 + ---- +execute_cmd.c,input.c,jobs.c,nojobs.c,parse.y,redir.c,shell.c +builtins/{exec.def,read.def} +input.h + - BUFFERED_INPUT: preprocessor #define is gone, this code is now + unconditional + + 2/24 + ---- +builtins/declare.def + - declare_internal: set the att_propagate flag on a variable that is + marked as att_tempvar only if it's *not* marked att_local. The + effect is that local variables with the same name as variables in + the temporary environment are not propagated to the previous scope. + From a report by Voldemar Lazarev + that prompted a bug-bash discussion + +builtins/setattr.def + - set_var_attribute: don't set local variables for which we are setting + export or readonly to propagate back to the previous context, but + make sure we preserve posix semantics + +parse.y + - read_token_word: if we're parsing the words of a compound assignment + (parser_state & PST_COMPASSIGN), and we have a valid assignment + statement as a word ([sub]=value), set W_NOBRACE in the word so we + don't try and perform brace expansion on it. This makes ( [sub]=word ) + closer to name[sub]=word. + From a report by Ilkka Virta back in July, 2020: + https://lists.gnu.org/archive/html/bug-bash/2020-07/msg00133.html + + 2/27 + ---- +lib/readline/display.c + - rl_redisplay: if HANDLE_MULTIBYTE is defined, do the special META_CHAR + handling if wc_bytes == wc_width == 1 + +execute_cmd.c + - eval_arith_for_expr: make sure we don't call make_word with a NULL + string if expand_arith_string returns NULL. Report from + F G + +arrayfunc.c + - assign_assoc_from_kvlist: added code, currently disabled, to perform + all expansions, including word splitting, on the kv-pair word list + + 2/28 + ---- +lib/readline/search.c + - rl_history_search_reinit: change check against history_string_size + to account for history_string_size now being a size_t. Report and + fix from Grisha Levit + + 3/2 + --- +lib/readline/history.c + - _hs_search_history_data: search the history list for an entry with + `data' matching the argument; return the index + - _hs_replace_history_data: search backwards through the history list + from the end + +lib/readline/histlib.h + - _hs_search_history_data: extern declaration + +lib/readline/search.c + - make_history_line_current: make sure rl_undo_list doesn't appear in + any history entries (it should be a private search string undo list) + before freeing it + +lib/readline/misc.c + - _rl_free_saved_history_line: make sure the undo list in + _rl_saved_line_for_history isn't rl_undo_list and doesn't appear in + any history list entries as `data' before freeing it. Fixes core + dump after SIGINT reported by Grisha Levit + +parse.y,print_cmd.c + - changes for size_t when computing new amount for xrealloc + + 3/3 + --- +parse.y + - set_word_top: new inline function to check and set word_top; called + from the appropriate places + - parse_dparen: call set_word_top before parsing an arith command or + nested subshell. Fixes underflow issue reported by + Grisha Levit + +examples/loadables/kv.c + - kv: new loadable builtin, reads key-value pairs from stdin and assigns + them to an associative array + + 3/7 + --- +builtins/trap.def + - trap_builtin: if trying to restore SIGQUIT to its default disposition, + and the shell is in posix mode, set to SIG_DFL if the shell is + running as an async command and signal_is_async_ignored (SIGQUIT) is + true. Posix conformance issue 751 + + 3/8 + --- +builtins/alias.def + - print_alias: now returns int. Check for write errors using sh_chkwrite + and return EXECUTION_FAILURE if it fails + - alias_builtin: if print_alias returns EXECUTION_FAILURE, return + EXECUTION_FAILURE immediately (write error). POSIX test conformance + + 3/9 + --- +builtins/cd.def + - change_to_directory: if we're not in physical mode and are in posix + mode, add step 9 of the posix cd algorithm, which essentially tries + the pathname the user supplied if it's shorter than PATH_MAX and the + length of the canonicalized pathname is longer than PATH_MAX. This + is basically what default bash mode does without the length checks. + POSIX test conformance. + +subst.c + - strip_trailing_ifs_whitespace: use ifs_whitespace(*s) instead of + spctabnl(*s) like word splitting and get_word_from_string. POSIX + test conformance + +jobs.c + - wait_for: tweak change from 1/18 to make sure a J_ASYNC job isn't in + the foreground (J_FOREGROUND) as it would be if it had been continued + in the foreground with `fg'; if it is, we want to give the terminal + back to shell_pgrp + + 3/10 + ---- +input.c + - fd_berror: returns true if the file descriptor passed as an arg + corresponds to a buffered stream with an error condition + +parse.y + - shell_getc: use fd_berror instead of inline code + - shell_getc: if yy_getc returns EOF, immediately set line[0] to NULL + and set shell_input_line_terminator to READERR. Then exit immediately + with status 128 if index == 0, line[index] == NULL, and READERR. + Posix interp 1629 + +config-top.h + - FATAL_READERROR: now defined to 1 by default + +lib/readline/display.c + - rl_expand_prompt: allocate an empty string for local_prompt if prompt + is the NULL or empty string. Fixes seg fault with rl_message and + empty prompt reported by Grisha Levit + +lib/readline/histexpand.c + - history_expand: if hist_extract_single_quoted returns an index at or + past the end of the string, correct the index and break the loop, + which will cause a return. Report and fix from + Grisha Levit + + 3/13 + ---- +lib/readline/vi_mode.c + - rl_domove_motion_callback: set the MOVE_FAILED flag in the context M + if rl_dispatch returns non-zero and other movement-command-specific + conditions are met. Right now, an unsuccessful `f' or `F' command + is failure. + - _rl_vi_domove_motion_cleanup: if the command is `c' or `C', we don't + enter insert mode if the MOVE_FAILED flag is set in the context M. + This is how standalone vi works. + +lib/readline/kill.c + - rl_unix_filename_rubout: add some checks for rl_point > 0 before + looking at rl_line_buffer[rl_point - 1]. Report and fix from + Grisha Levit + +lib/readline/isearch.c + - _rl_isearch_dispatch: reset cxt->sline_index to 0 if it's past the + end of the history string (sline_len). Fixes asan bug reported by + Grisha Levit + +lib/readline/histexpand.c + - history_tokenize_word: don't increment the string index past the + NULL if the line ends in a backslash.Fixes asan bug reported by + Grisha Levit + +lib/readline/vi_mode.c + - rl_vi_yank_to,rl_vi_change_to,rl_vi_delete_to: if these are called + with an existing valid vimvcxt, save it and allocate a new one for + the current function call to use, then restore it before returning. + This prevents referencing vimvcxt after freeing it in the case that + these functions call each other recursively (e.g., y1y1, c1d1, etc.). + Fixes asan bug reported by Grisha Levit + + 3/14 + ---- +bashhist.c + - bash_add_history: make sure curlen is large enough before checking + curlen - 1 and curlen - 2, otherwise you can get buffer underflow. + Fixes asan bug reported by Grisha Levit + +bashline.c + - bash_spell_correct_shellword: don't bother trying to correct empty + words. Fixes asan bug reported by Grisha Levit + +lib/sh/shquote.c + - sh_mkdoublequoted: make sure to allocate enough memory for the + pathological case: where every character in the string needs to be + backslash-escaped because it's special within double quotes. + Fixes asan bug reported by Grisha Levit + +doc/{bash.1,bashref.texi} + - here documents: make sure the summary specifies the here-document is + terminated by `delimiter'; specify what the delimiter is if the word + is not quoted. Prompted by a help-bash post from + goncholden + + 3/15 + ---- +doc/bash.1,lib/readline/doc/rluser.texi + - shell-expand-line: enumerate the specific expansions performed. + From a request by Alex Bochannek + +findcmd.c + - path_value: new function, returns normalized version of $PATH. Takes + a single argument saying whether or not to look in the temporary + environment first. Normalizes null $PATH (PATH=) into ".". From a + bug-bash discussion started by Moshe Looks + - _find_user_command_in_path: use path_value() + - user_command_matches: use path_value() + - search_for_command: if PATH[0] == 0, set PATH = "." like path_value(). + This has the side effect of calling command_not_found_handle when + PATH is the empty string and the command isn't in the current + directory + - search_for_command: if path == 0, but we found an executable in the + current directory, make sure to set dot_found_in_search before adding + it to the command hash table + +findcmd.h + - path_value: extern declaration + +bashline.c + - command_word_completion_function: use path_value() + +builtins/enable.def + - dyn_load_builtin: use path_value for BASH_LOADABLES_PATH; it's cleaner + though it doesn't change the behavior + + 3/17 + ---- +bashline.c + - bashline_reset: reset rl_filename_quoting_function, since there is a + SIGINT code path where it could remain reset by glob completion. + Reported by Grisha Levit + - command_word_completion_function,command_subst_completion_function, + glob_complete_word: set some static variables to NULL + after freeing them so they don't potentially get freed twice after + a SIGINT during completion + Reported by Grisha Levit + +parse.y + - read_token_word: when deciding how to quote translated strings, don't + free ttok before comparing it to ttrans + Reported by Grisha Levit + - parse_matched_pair: same thing for freeing nestret + - read_token: if we return a newline, make sure we call set_word_top() + if necessary. + Fixes underflow reported by Grisha Levit + +lib/glob/sm_loop.c + - EXTMATCH: don't bother with FNM_PATHNAME checks; this function isn't + called with a pathname. + Fixes underflow reported by Grisha Levit + +lib/readline/misc.c + - rl_maybe_replace_line: if we replace a history entry's data with + rl_undo_list, we need to set rl_undo_list to 0, since we should not + have rl_undo_list pointing to something from a history entry + Fixes asan error reported by Grisha Levit + + 3/20 + ---- +lib/readline/histexpand.c + - postproc_subst_rhs: fix off-by-one error when reallocating new string + for case where we're *not* substituting for `&' + Fixes asan error reported by Grisha Levit + +jobs.c + - terminate_current_pipeline: add a SIGKILL call in there in case the + SIGTERM doesn't work + - terminate_current_pipeline: add a version that works when job control + isn't enabled (pipeline_pgrp == shell_pgrp) + +subst.c + - skip_to_delim: pass completeflag (SX_COMPLETE) to extract_dollar_brace_string + in case it includes a command substitution, since we want to inhibit + error messages in this case + +parse.y + - no_semi_successors: add DOLPAREN to list since something like $(\n + shouldn't have a semicolon added there. + From a report by Grisha Levit + + 3/21 + ---- +pcomplete.c + - gen_globpat_matches: set noglob_dot_filenames here since we're not + calling shell_glob_filename to do it + From a report by Grisha Levit + + 3/22 + ---- +lib/readline/misc.c + - rl_maybe_replace_line: if we're replacing a history entry with the + current line buffer and undo list, then zero out any undo list in + _rl_saved_line_for_history, since we're not going to use it any more + Fixes asan error reported by Grisha Levit + +lib/readline/undo.c + - rl_free_undo_list: if we're freeing rl_undo_list, it can't be a + valid value for data in _rl_saved_line_for_history + Fixes asan error reported by Grisha Levit + +lib/readline/complete.c + - display_matches: don't call rl_display_match_list if we received a + signal during get_y_or_n and didn't jump out for some reason + From a report by Grisha Levit + - rl_display_match_list: return if we received a signal during + _rl_internal_pager (via get_y_or_n) and didn't jump out + From a report by Grisha Levit + + 3/23 + ---- +lib/readline/history.c + - history_truncate_file: don't bother trying to read the existing + history file if we're just truncating it to 0 lines + + 3/24 + ---- +lib/readline/history.c + - history_truncate_file: fix off-by-one error that resulted in the + timestamp associated with the first history entry not being written + to the truncated history file + From a report by Grisha Levit + +parse.y + - decode_prompt_string: do something rational if localtime() returns + NULL (extraordinarily rare) + From a report by Paul Eggert + +examples/loadables/stat.c + - stattime: ditto + +examples/loadables/strftime.c + - strftime_builtin: ditto + +lib/readline/examples/histexamp.c + - main: ditto + +include/posixtime.h + - getnow(): new inline function, calls gettimeofday and returns tv_sec; + replacement for time(0). From Paul Eggert + +general.h + - NOW: use a call to getnow() to standardize on gettimeofday for time + information + +lib/readline/history.c + - include #posixtime.h for getnow() + - hist_inittime: use getnow() instead of calling time(0) + +parse.y + - posixtime.h: include instead of + - decode_prompt_string: use getnow() instead of calling time(0) + + 3/27 + ---- +parse.y + - count_all_jobs: add extern definition if JOB_CONTROL is not defined. + From Emanuele Torre + +bashhist.c + - bash_add_history: make sure the current history line is not empty + before checking what ended it. + From a report by Grisha Levit + +lib/readline/histexpand.c + - history_tokenize_word: break out of loop for incomplete command and + process substitution or extended globbing patterns + From a report by Grisha Levit + +bashline.c + - hostnames_matching: fix size_t issue when checking whether to realloc + From a report by Grisha Levit + +lib/sh/random.c + - genseed: use uintptr_t instead of u_bits32_t to silence compiler + warnings. From Paul Eggert + +aclocal.m4 +array2.c +builtins/mkbuiltins.c,builtins/psize-posix.c,version.c +builtins/getopts.def +lib/readline/text.c,lib/readline/bind.c +support/recho.c,support/mksignames.c,support/zecho.c,support/xcase.c +support/printenv.c,support/signames.c,support/bashversion.c +support/memtest.c,support/endian.c +lib/glob/gm_loop.c + - some cleanups for function prototypes and other stdc requirements + From Paul Eggert + +lib/readline/doc/{rltech.texi,hstech.texi} + - add prototypes and stdc requirements to the examples + +builtins/complete.def + - compgen_builtin: save and restore readline variables affecting how + filename completions are treated in case someone uses compgen in + the foreground. + From a report by Grisha Levit + + 3/28 + ---- +aclocal.m4 +builtins/enable.def,builtins/gen-helpfiles.c,builtins/help.def,builtins/printf.def +general.h,hashlib.h +include/ansi_stdlib.h,include/ocache.h +lib/glob/collsyms.h,lib/glob/glob.c +lib/readline/history.h,lib/readline/xmalloc.h +xmalloc.c,xmalloc.h +lib/sh/strtrans.c +lib/tilde/tilde.c +mksyntax.c +support/endian.c + - don't bother with __STDC__ if we are just using C89 features like + const, function prototypes, etc. + From Paul Eggert + +externs.h + - prototype the list functions that take GENERIC_LIST * + From Paul Eggert + +builtins/common.c,examples/loadables/getconf.c +execute_cmd.c,pcomplete.c,subst.c +lib/sh/stringlist.c,lib/sh/stringvec.c + - changes and casts now that the generic list functions are prototyped + From Paul Eggert + + 3/29 + ---- +aclocal.m4,configure.ac +builtins/common.c,builtins/mkbuiltins.c,builtins/printf.def +include/memalloc.h,include/stdc.h +general.h,jobs.h +pcomplete.c,print_cmd.c +m4/iconv.m4 +lib/readline/bind.c,lib/readline/complete.c,lib/readline/display.c +lib/readline/funmap.c,lib/readline/util.c,lib/readline/parens.c +lib/readline/histlib.h +lib/readline/readline.h,lib/readline/rldefs.h,lib/readline/rlstdc.h,lib/readline/rlprivate.h +lib/sh/dprintf.c,lib/sh/snprintf.c,lib/sh/vprintf.c +lib/malloc/shmalloc.h,lib/malloc/imalloc.h,lib/malloc/xmalloc.c +lib/termcap/termcap.h + - stdarg: since we now assume C89 for prototypes at least, always + prefer stdarg to old-style varargs + - SH_VA_START: now use plain old va_start + - don't bother with extern declarations for standard C89 functions + From Paul Eggert + +config-bot.h + - PREFER_STDARG: remove + +builtins/mkbuiltins.c +execute_cmd.c,unwind_prot.c +unwind_prot.h + - start on ANSI/ISO C changes for the unwind-protect framework + - introduce new unwind-protect function pointer type to replace + Function + From Paul Eggert + + 3/30 + ---- +builtins/command.def,builtins/fc.def,builtins/read.def,builtins/source.def +builtins/evalfile.c,builtins/evalstring.c +dispose_cmd.c,execute_cmd.c,pcomplete.c,print_cmd.c,subst.c,jobs.c,variables.c +dispose_cmd.h,general.h,trap.h +unwind_prot.c,unwind_prot.h + - rest of work to convert unwind-protect framework to ANSI/ISO C. + Convert unwind-protects to use new shim functions that obey the new + unwind-protect function type + From Paul Eggert + +general.h + - STREQ, STREQN: now static inline functions to take advantage of arg + type conversion + +pcomplete.c,subst.c +lib/readline/histexpand.c,lib/readline/mbutil.c + - fix size_t subtractions in comparisons to avoid unsigned underflow + +externs.h +execute_cmd.c +builtins/times.h + - add prototypes for functions taking clock_t and timeval, make their + declaration in externs.h conditional on NEED_CLOCK_FUNCS_DECL and + NEED_TIMEVAL_FUNCS_DECL, respectively + + 3/31 + ---- +subst.c + - expand_string_dollar_quote: check for zero-length return from + string_extract_{single,double}_quoted and avoid size_t underflow + Fixes asan error reported by Grisha Levit + + 4/3 + --- +builtins/evalstring.c + - open_redir_file: treat the case of failing to open the file as a + non-fatal expansion error instead of a (fatal) redirection error. + Report from Zev Weiss + + 4/4 + --- +lib/readline/vi_mode.c + - _rl_domove_motion_cleanup: d/D require the same special case as c/C + so that a motion command that doesn't move the cursor consumes/deletes + at least one character. + From Emanuele Torre + - _rl_domove_motion_cleanup: ditto for y/Y + - rl_domove_motion_callback: if t/T/;/, fail (return non-zero without + moving point), flag the motion command as having failed (MOVE_FAILED) + + 4/6 + --- +subst.c + - command_substitute: save the return status of the child process in + last_command_subst_status; don't assign to last_command_exit_value + in posix mode (posix interp 1150) + +execute_cmd.c + - execute_null_command: a simple command without a command word but + with command substitutions now returns last_command_subst_status. + It may or may not have already modified $? depending on posix mode + +redir.c + - redir_varvalue: legal_number validity check should be == 0, not < 0 + From a report by Grisha Levit + + 4/10 + ---- +subst.c + - parameter_brace_expand_rhs: check for namerefs in the variable name + part of the ${name=word} expansion so we can go back and implement + the POSIX semantics of returning "the final value of parameter." + From a report by Grisha Levit + +sig.c,sig.h + - sigpipe_handler: clean up, set $?, and throw to top level on receipt + of a SIGPIPE + - termsig_handler: if the variable builtin_catch_sigpipe is set (it's + not set anywhere yet), call sigpipe_handler instead of terminating + the shell. Still need to make sure a sighandler is installed for + SIGPIPE even if initialize_terminating_signals isn't called + + 4/14 + ---- +lib/sh/tmpfile.c + - sh_mktmpfd: add support for MT_UNLINK flag, unlinks created filename + before returning fd, fails if the unlink fails for some reason + + 4/15 + ---- +pathexp.c,pathexp.h + - globsort: support for various glob sorting criteria as defined by + the GLOBSORT variable: name, size, blocks, mtime, atime, ctime. + Default is ascending sort by name, as is traditional. Based on an + idea from Evan Gates + - setup_globsort: parse the value of the GLOBSORT variable, find + sorting type and whether or not it's ascending or descending + - noquote_glob_filename: glob_filename for programmable completion, + doesn't call quote_string_for_globbing and honors GLOBSORT, dotglob, + and globstar + +pcomplete.c + - gen_globpat_matches: call noquote_glob_filename, let that handle + all the variables and GLOB_FAILED + +variables.c + - GLOBSORT: support for special variable, call setup_globsort on + set or unset + +doc/bash.1,doc/bashref.texi + - GLOBSORT: document variable and its effects on pathname expansion + + 4/17 + ---- +builtins/complete.def + - build_actions: take an additional char ** arg VNAMEP; if it is non- + null, accept a -V VARNAME option that names an indexed array + variable in which to store the completions. + - compgen_builtin: if the -V option is supplied, store the possible + completions into VARNAME instead of printing them on stdout. From a + patch from Grisha Levit , idea originally + from konsolebox back in 2/2022 + +doc/bash.1,lib/readline/doc/rluser.texi + - compgen: document new -V option + + 4/18 + ---- +lib/readline/vi_mode.c + - rl_domove_read_callback: call _rl_arg_init before reading digit + argument so prompt gets saved, both callback and non-callback modes + From a report by Grisha Levit + - rl_vi_arg_dispatch: if we return 0 to end the digit argument and + turn off NUMERICARG, call rl_restore_prompt + +lib/readline/histexpand.c + - history_expand_internal: make sure subst_lhs is not null before we + call postproc_subst_rhs. + From a report by Grisha Levit + +lib/readline/display.c + - rl_redisplay: remove redundant code that ends up incrementing lpos + too much for meta characters displayed as octal escape sequences. + From a report by Grisha Levit + + 4/19 + ---- +bashline.c + - attempt_shell_completion: handle case where s > e after calls to + find_cmd_start and find_cmd_end, respectively. + From a report by Grisha Levit + +lib/readline/display.c + - update_line: fix setting of `wsatend' when computing ols and nls in + the multibyte case; this caused redisplay to print more characters + than it needed + - update_line: fix calculation of visible_wrap_offset when moving up + to line 0, trying to figure whether or not the visible prompt has + any invisible characters. Fixes C locale issue reported by + Grisha Levit + + 4/20 + ---- +lib/readline/text.c + - _rl_rubout_char: update erase-at-end-of-line hack to deal with the + unlikely event that a character in a non-multibyte locale is + displayed using an octal representation. + From a report by Grisha Levit + +execute_cmd.c,execute_cmd.h,builtins/evalstring.c + - interrupt_execution: replaces `executing_list' + - interrupt_execution: set while executing while, for, until, select, + and arithmetic for loops + +jobs.c + - wait_for: if a process dies due to a SIGINT while the shell is + executing a loop or a list, act as if the shell got SIGINT. This + is no longer dependent on the compatibility level + From a report by Grisha Levit + +bashline.c + - name_is_acceptable: allow FIGNORE suffixes to match the entire + pathname like tcsh does instead of requiring a non-empty prefix. + From Emanuele Torre + + 4/23 + ---- +lib/readline/misc.c + - _rl_unsave_line: new function, takes a HIST_ENTRY * as an argument, + generalized rl_maybe_unsave_line + - _rl_alloc_saved_line: allocate a new HIST_ENTRY *, populate it like + rl_saved_line_for_history + - _rl_free_saved_line: free a saved HIST_ENTRY * + - _rl_free_saved_history_line: call _rl_free_saved_line + - _rl_previous_history_internal: new function, internals of + rl_get_previous_history; change rl_get_previous_history to call it + +lib/readline/history.h + - HIST_ENTRY_DEFINED: define sentinel if HIST_ENTRY struct defined + +lib/readline/rlprivate.h + - _rl_alloc_saved_line,_rl_free_saved_line,_rl_unsave_line: new extern + function definitions + - _rl_free_saved_search_line: new extern definition + +lib/readline/search.c + - _rl_saved_line_for_search: use private storage to save current line, + avoid clashes with rl_saved_line_for_history + - _rl_free_saved_search_line,_rl_unsave_saved_search_line: new functions + to manage _rl_saved_line_for_search + - noninc_dosearch,_rl_nsearch_abort: clean up _rl_saved_line_for_search + instead of rl_saved_line_for_history + - rl_history_search_internal: allocate private _rl_saved_line_for_search; + unsave or free it as appropriate + - _rl_history_search_reinit: free up any _rl_saved_line_for_search just + in case + +lib/readline/vi_mode.c + - rl_vi_search: free _rl_saved_line_for_search, since that's what the + non-incremental search functions use now + - rl_domove_read_callback: if we read a numeric argument, then a motion + character, make sure the motion character is valid before returning + it and going on + From a report by minipython <599192367@qq.com> + + 4/27 + ---- +lib/readline/display.c + - _rl_move_cursor_relative: when checking to see whether data is within + the invisible line, make sure to stay within the invisible line + line break boundaries + From a report by minipython <599192367@qq.com> + +lib/readline/search.c + - dispose_saved_search_line: new function, either unsave the saved + search line (if we're not at the end of the history) or free it + (if we are). Needs to be immediately followed by call to + make_history_line_current, which resets rl_undo_list + - make_history_line_current: change strategy: rely on callers to + manage _rl_saved_line_for_search and rl_undo_list; just copy the + data from the passed history entry into the line buffer and reset + rl_undo_list + - noninc_dosearch,rl_history_search_internal: call dispose_saved_search_line + before calling make_history_line_current + +lib/readline/misc.c + - _rl_start_using_history: free the undo list associated with + _rl_saved_line_for_history, if one exists. Have to watch out for + this causing pointer aliasing problems, maybe add a call to + _hs_search_history_data() + + 4/28 + ---- +pathexp.c + - sh_globsort: a sort specifier of `nosort' disables sorting completely + +doc/bash.1,doc/bashref.texi + - GLOBSORT: document `nosort' sort specifier + +bashline.c + - attempt_shell_completion: attempt completion with the empty command + for a null command word on a line with only whitespace following any + optional assignment statements + - attempt_shell_completion: make sure that the start of the command + word is not after rl_point before calling the programmable completion + for the initial word. + From a report by Grisha Levit + +lib/readline/histexpand.c + - history_expand: don't read past the end of the string if it ends with + an incomplete multibyte character + From a report by Grisha Levit + + 5/1 + --- +lib/readline/text.c + - _rl_insert_char: make sure to return 1 in all cases where there are + pending bytes accumulating for a multibyte character + - _rl_insert_char: if the COUNT argument is 0, insert any pending + bytes read so far. The idea is that these bytes were accumulating + to compose a possible multibyte character, and the count of 0 + indicates that the current character doesn't contribute to that + because it's bound to an editing command. + - rl_insert, rl_quoted_insert: make sure to call _rl_insert_char + with a 0 count as appropriate to insert any accumulating bytes + From a patch by Grisha Levit + +sig.c + - top_level_cleanup,throw_to_top_level: set variable_context to 0, just + to make sure + +execute_cmd.c + - function_misc_cleanup: new function, runs make_funcname_visible and + unlink_fifo_list at the end of execute_function, replaces inline + code + - uw_function_misc_cleanup: unwind-protect function, just calls + function_misc_cleanup. Installed by execute_function. + Partial fix for FUNCNAME bug reported by Grisha Levit + - execute_builtin: run unwind-protects if evalnest exeeds max + - execute_builtin: run unwind-protects if sourcenest exeeds max + +parse.y + - parse_string_to_word_list: set current_token = '\n' on error + - parse_string_to_word_list: if we're executing and not running in + parse_and_execute, call top_level_cleanup before we jump to the + top level. Rest of fix for FUNCNAME bug + - parse_compound_assignment: set last_read_token and current_token to + '\n' on parse error. Fix for alias expansion bug reported by + Grisha Levit + - parse_compound_assignment: if we're executing and not running in + parse_and_execute, call top_level_cleanup before we jump to the + top level + + 5/2 + --- +jobs.c + - run_sigchld_trap: don't freeze and unfreeze the jobs list; move it + to the callers who are running this on SIGCHLD receipt and cannot + deal with jobs disappearing from the list while they're running + - waitchld: if we are running the wait builtin, continue to run the + SIGCHLD trap immediately upon signal receipt, but freeze and + unfreeze the jobs list around the call to run_sigchld_trap(). + Fixes issue with `jobs' in a SIGCHLD trap not removing jobs from + the jobs list reported by Guldrelokk + + 5/4 + --- +input.c + - fd_to_buffered_stream: make sure buffers[fd2] is non-null before + turning on SHAREDBUF. + From Emanuele Torre + +eval.c + - reader_loop: save and restore EOF_Reached around expanding $PS0, + setting it to 0 for the expansion so it doesn't affect things like + command substitution. + From a report by Grisha Levit + +parse.y + - parse_comsub: handle ${Ccommand; }, where C == space, tab, newline, + or '|' + - read_token_word: understand ${Ccommand; } and call parse_comsub to + parse the contents + - parse_matched_pair: understand ${Ccommand; } inside another paired + construct + - new `funsub' production, like comsub but for ${Ccommand;} nofork + command substitution + +execute_cmd.c + - execute_simple_command: if we fork because of pipes in or out, clear + the fifo list, since subshell aren't supposed to inherit fifos + + 5/8 + --- +parser.h + - PST_FUNSUBST: new parser state, parsing the command in ${Ccommand;}. + Primarily used to have read_token_word return `}' as a separate + token even if it's not delimited like a reserved word + +subst.h + - SX_FUNSUB: new flag, tell xparse_dolparen we are parsing the command + in a ${Ccommand;} nofork command substitution + +parse.y + - xparse_dolparen: handle parsing ${Ccommand;} nofork command + substitution like parse_comsub + - read_token: if we're parsing a foreground command substitution, + treat a word that begins with an unquoted `}' as a `}' token to + terminate the ${Ccommand;} construct without requiring that the + close brace be delimited like a reserved word + - no_semi_successors: add DOLBRACE + - reserved_word_acceptable: add DOLBRACE + +subst.c + - extract_function_subst: like extract_command_subst, but for nofork + command substitutions; calls xparse_dolparen with the SX_FUNSUB + flag to differentiate + - string_extract_double_quoted,extract_delimited_string, + extract_heredoc_dolbrace_string,extract_dollar_brace_string, + param_expand: call extract_function_subst as appropriate + - function_substitute: like command_substitute, but for nofork command + substitutions. Just a stub for now + + 5/11 + ---- +jobs.[ch] + - pipeline_saver: already_making_children now saved and restored as + part of the struct; no longer need a separate variable + - save_pipeline,restore_pipeline: save already_making_children to struct + +parse.y + - parse_comsub,xparse_dolparen: handle `(' as the first char of a + funsub (ksh93 supports that) + +subst.c + - function_substitute: complete implementation; handle both funsubs + and valsubs (need different terminology); dummy up a fake shell + function so local variables and `return' work; do the right thing + with process groups + - executing_funsub: flag for the rest of the shell to know we're + expanding a funsub; used by parse_and_execute + +builtins/evalstring.c + - parse_and_execute: check executing_funsub to do the right thing with + alias expansion and posix mode + + 5/12 + ---- +doc/bash.1,doc/bashref.texi + - function substitution (or lambda substitution, or nofork command + substitution): document + + 5/15 + ---- +subst.c + - function_substitute: make sure to decrement variable_context in the + unwind-protects since we don't unwind_protect it individually. + Report from Oguz + + 5/17 + ---- +configure.ac + - i370 machines cannot use the bash malloc + Patch from Igor Todorovski + +support/signames.c + - initialize_signames: add support for z/OS signals. + Patch from Igor Todorovski + +lib/glob/smatch.c + - collseqcmp: new name for collequiv[_wc], that function apparently + exists in libc on z/OS + Patch from Igor Todorovski + +jobs.c + - mark_all_jobs_as_dead: make sure to reset js.j_ndead to the right + number of jobs in the array + +execute_cmd.c + - execute_while_or_until: move call to REAP() after the action + executes, like other loop functions + +shell.c,parse.y,lib/intl/gettextP.h + - add some __MVS__ checks for z/OS systems + + 5/18 + ---- +jobs.c + - wait_for_any_job: catch jobs that can terminate and be reaped + when we call UNBLOCK_CHILD between the loop where we check the + jobs list for dead jobs and the loop where we check for running + jobs and poll for them with wait_for(). + Fixes bug reported by Aleksey Covacevice + + 5/20 + ---- +subst.c + - read_comsub: quote CTLNUL if it's in $IFS and we're parsing the + RHS of an assignment statement + - comsub_quote_string: ditto + - comsub_shouldquote: break code that decides whether to CTLESC escape + a character read from a command substitution or $REPLY into its own + inline function; change read_comsub/comsub_quote_string callers + + 5/21 + ---- +subst.c + - quote_escapes_internal: use ifs_cmap instead of iterating through + ifs_value to set skip_ctlesc and skip_ctlnul + + 5/23 + ---- +parser.h + - remove `(' from FUNSUB_CHARS + +parse.y + - parse_comsub: don't bother with `(' as one of the FUNSUB_CHARS + +doc/bash.1,doc/bashref.texi + - command substitution: remove mention of `(' as a valid character + following the open brace in nofork command substitution + + 5/24 + ---- +parse.y + - parse_comsub: avoid adding `;' to an empty ${ command substitution + - parse_comsub: if open == '{', push back a newline we read into + peekc to get PS2 prompting right. + From a report by Grisha Levit + +subst.c + - skip_double_quoted: pass the SX_COMPLETE flag down to + extract_dollar_brace_string in case it contains an unclosed command + substitution. + From a report by Grisha Levit + + 5/25 + ---- +shell.c + - make sure shell_initialized is set to 1 before running -c command + +make_cmd.c + - make_function_def: initialize source_file to something other than + `main' or `environment' if the shell is not interactive. + From a report from Emanuele Torre + +parse.y + - save_token_state,restore_token_state: save and restore token_to_read + - read_token_word: if we read EOF in an interactive shell, set + token_to_read to yacc_EOF and EOF_Reached to 1 so the token will + be delimited but the next call to read_token returns yacc_EOF + - handle_ignoreeof: broke the code that checks eof_encountered and + possibly exceeds the ignoreeof limit out into a separate public + function, called from handle_eof_input_unit + +eval.c + - reader_loop: if EOF_Reached is set in an interactive shell after + parse_command and execute_command, and ignoreeof has been enabled, + check for ignoreeof with handle_ignoreeof and reset EOF_Reached + back to 0 if we should not exit. This can occur when EOF delimits + a simple command (simple_command_terminator) + From a report by Grisha Levit + + 5/27 + ---- +lib/readline/mbutil.c + - _rl_get_char_len: if SRC is "", make sure to return 0 + +lib/readline/isearch.c + - _rl_isearch_callback: if _rl_search_getchar returns EOF, return 1 + to abort search; if it returns with RL_STATE_ISEARCH unset, return + 1 (handling a signal can turn it off via _rl_isearch_cleanup) + + 5/29 + ---- +lib/readline/text.c + - _rl_insert_char, rl_quoted_insert: minor fixes from Grisha Levit + +builtins/printf.def + - bexpand: use the same calculation for the size of the return buffer + as ansicstr(). + From a report by Grisha Levit + +locale.c + - locale_setblanks: work around problem with macOS where isblank(x) + incorrectly returns true for characters 0x80-0xff in a UTF-8 locale + From a report by Grisha Levit + - set_default_locale_vars,set_locale_vars,reset_locale_vars: make sure + we call locale_setblanks after setting/resetting locale_utf8locale, + since we use that in locale_setblanks + +lib/sh/smatch.c + - charseqcmp,is_cclass,FOLD: make sure we don't treat chars >= 0x80 + as valid in a UTF-8 locale, since they are multibyte characters. + From a report by Grisha Levit with a full + explanation in http://www.openradar.me/FB9973780 + + 5/30 + ---- +builtins/enable.def + - enable_builtin: don't call dlopen with a null pathname, it will + succeed. Report from Wiley Young + +lib/readline/readline.c + - _rl_dispatch_subseq: if a user binds do-lowercase-version to something + that isn't an uppercase character, flag an error rather than recurse. + From a report by Grisha Levit + + 5/31 + ---- +builtins/enable.def + - enable_builtin: don't try to load a builtin that's not found if + the -n flag is supplied. + From a report from Emanuele Torre + +parse.y + - parse_comsub: use was_word code again to make sure we add a closing + `;' if the last token parsed before the closing ';' or '\n' was a + word, no matter what character ends it. + From a report by Grisha Levit + +aclocal.m4,configure.ac,findcmd.c + - IBM z/OS changes from Igor Todorovski + + 6/1 + --- +parse.y + - shell_getc: if the shell is not interactive and reading from a + buffered stream or stdin, and not expanding an alias, add a + backslash to a line ending with like we do when + reading from a string. This prevents a backslash-newline from + being discarded when we are removing backslash-newlines from the + input, since we will add a newline to shell_input_line in this case. + From a report by Rob Landley + +parse.y + - parse_compound_assignment: check and compensate for an alias being + popped out from underneath this function by read_token() (e.g., + alias L='m=("x")'. Since we don't push a new input source, we should + never restore pushed_string_list from the saved parser state, but + we check and only do this if we were expanding an alias when this + function was called. + From a report by Wiley Young + + 6/2 + --- +print_cmd.c + - print_if_command: make sure to print any pending here-documents after + printing the test. + From https://bugzilla.redhat.com/show_bug.cgi?id=2211214 + +builtins/enable.def + - if -n is supplied with -f, attempt to load the builtin but mark it + as disabled after loading. + Suggested by Robert Elz + +builtins/evalfile.c + - _evalfile: increment retain_fifos, so we don't delete any FIFOs or + pipes we inherited before sourcing this file; restore original value + before we return. + From https://savannah.gnu.org/support/index.php?110883 + + 6/3 + --- +subst.c + - expand_string_dollar_quote: if singlequote_translations is set, there + is a chance for a use-after-free of `t'. + From a report by Grisha Levit + + 6/7 + --- +jobs.c,nojobs.c,jobs.h + - job_control_active_p: new function, returns 1 if job control is + currently enabled and we have given away the terminal + +builtins/evalstring.c + - should_suppress_fork: don't optimize away the fork if job control is + active because we need to call end_job_control and give the terminal + back to the original process group when this command finishes. Call + job_control_active_p() to check this. + Report from Andrew Hamon + + 6/8 + --- +shell.c + - ssh_run_startup_files: new variable, set by run_startup_files if + the shell decides it's being run by ssh and runs bashrc (only if + SSH_SOURCE_BASHRC is defined). Non-zero while the startup files + are being run. Not used by any other part of the shell yet. + + 6/12 + ---- +arrayfunc.h + - new inline functions to convert between assignment flags (ASS_*), + array value flags (AV_*), and valid array flags (VA_*) + +shell.h + - include arrayfunc.h after subst.h and variables.h so all the values + for the new inline functions are available + +variables.c + - bind_int_variable: use convert_assign_flags_to_validarray_flags and + convert_assign_flags_to_arrayval flags instead of inline assignments + +builtins/common.c + - builtin_bind_variable: use convert_assign_flags_to_validarray_flags + instead of inline assignments + +arrayfunc.c + - assign_array_element: use convert_assign_flags_to_arrayval_flags + instead of inline code + - assign_array_element_internal: use convert_assign_flags_to_arrayval_flags + to pass the right values to array_expand_index + - assign_array_var_from_string: since expand_compound_array_assignment + performs one round of expansion on the subscripts, make sure to add + ASS_NOEXPAND (if assoc_expand_once is set) and ASS_ALLOWALLSUB to the + flags we pass to assign_compound_array_list + - unbind_array_index: use convert_validarray_flags_to_array_value_flags + to pass the right values to array_expand_index + - array_expand_index: uncomment code tagged for bash-5.3 that checks + AV_NOEXPAND and suppresses call to expand_arith_string if it's set. + This set of changes extends assoc_expand_once to indexed arrays + +arrayfunc.[ch],execute_cmd.c,expr.c,test.c,builtins/common.c,builtins/mkbuiltins.c +builtins/declare.def,builtins/set.def,builtins/shopt.def + - array_expand_once: new name for internal assoc_expand_once variable + + 6/13 + ---- +builtins/shopt.def + - array_expand_once: new option, replaces assoc_expand_once + +doc/bash.1,doc/bashref.texi + - array_expand_once: document new shopt option + + 6/15 + ---- +lib/readline/complete.c + - rl_full_quoting_desired: new application-settable variable, if set + to non-zero by an application completion function, all completions + will be quoted as if they were filenames, subject to the value of + rl_filename_quote_characters. Initialized to 0 and reset to 0 + by set_completion_defaults. + From a contribution by Grisha Levit + - QUOTING_DESIRED: new macro to check whether we should quote completions + +lib/readline/readline.h + - rl_full_quoting_desired: extern declaration + +lib/readline/doc/rltech.texi + - rl_full_quoting_desired: document + +configure.ac + - bumped version to 5.3-devel + +pcomplete.h + - COPT_FULLQUOTE: new compspec option, for rl_full_quoting_desired + +pcomplete.c + - pcomp_set_readline_variables: set rl_full_quoting_desired according + to COPT_FULLQUOTE + +builtins/complete.def + - fullquote: add new complete/compopt option value + +doc/bash.1,lib/readline/doc/rluser.texi + - fullquote: document new complete/compopt option + +lib/sh/timeval.c + - timeval_to_secs: sfp argument is now a long *; there is a new + maxval argument (always 10^6 for now) that determines how to + round; returns tv_usec in *sfp if maxval == 10^6; otherwise + return value is basically tv_usec/maxval with rounding + - print_timeval: change argument type in call to timeval_to_secs + +lib/sh/clock.c + - clock_t_to_secs: sfp argument is now a long * + - print_clock_t: change argument type in call to clock_t_to_secs + +externs.h + - timeval_to_seconds, clock_t_to_seconds: change prototypes + +execute_cmd.c + - mkfmt,print_formatted_time: fractional seconds arguments are now + longs + - mkfmt: accept precisions up to 6; since sec_fraction is in usecs, + perform any necessary rounding for precisions < 6 + - print_formatted_time: allow precision specifiers up to 6; default + is still 3 + - time_command: fractional seconds variables are now long; add new + argument to timeval_to_secs (always 1000000) + - time_command: if we call clock_t_to_secs, multiply the return + fractional seconds value by 1000 to convert it from msec to usec + +doc/bash.1,doc/bashref.texi + - TIMEFORMAT: document that the max precision is now 6 + From https://savannah.gnu.org/support/?110343 + + 6/16 + ---- +variables.c + - get_monoseconds: use clock_gettime to return the value of the + system's monotonic clock, if available + - BASH_MONOSECONDS: a new dynamic variable that returns the value of + get_monoseconds + From a suggestion by William Kennington + +doc/bash.1,doc/bashref.texi + - BASH_MONOSECONDS: document + +trap.c + - save_bash_trapsig,set_bash_trapsig,restore_bash_trapsig: functions + to manage value of BASH_TRAPSIG + - run_pending_traps: save and restore the value of BASH_TRAPSIG; set + it to the numeric signal number of the trap being run while it's + executing + From a feature request by Eric Marceau + - _run_trap_internal,run_exit_trap: save and restore BASH_TRAPSIG; + make sure it's set appropriately + +doc/bash.1,doc/bashref.texi + - BASH_TRAPSIG: document + +builtins/declare.def + - declare_internal: if declare is supplied -f and an argument that + looks like an assignment statement, fail only if there is not a + function with that name already defined. + From a report from Emanuele Torre + back in 12/22 + +jobs.c + - wait_for: make checkwinsize work in subshell commands started from + interactive shells + New feature request by Kerin Millar + +print_cmd.c + - semicolon: don't return immediately unless a preceding `&' is + itself preceded by a space, as the rest of the printing code prints + asynchronous commands. + Report and patch by Grisha Levit + + 6/17 + ---- +arrayfunc.c + - arrayvar_copyval: copy an array or hash table from shell variable + V1 to V2 + +arrayfunc.h + - arrayvar_copyval: extern declaration + +subst.h + - ASS_NOTEMPENV: new flag for bind_variable and assignments + +variables.c + - bind_variable: if ASS_NOTEMPENV is in FLAGS, don't bother calling + bind_tempenv_variable + +builtins/declare.def + - declare_internal: if we find the variable in the temporary + environment, call bind_variable with the ASS_NOTEMPENV flag since + we are already dealing with a variable from the temporary environment + - declare_internal: if we bind a new global variable because we're + modifying a variable from the temporary environment, make sure to + call arrayvar_copyval to copy array variables from the temporary + environment to the global scope + +variables.c + - push_temp_var: if we are pushing an array variable, make sure to + call arrayvar_copyval on the new variable + Final fix for bug reported by Wiley Young + - push_posix_tempvar_internal: call arrayar_copyval instead of using + inline code + + 6/19 + ---- +lib/sh/shmatch.c + - sh_regmatch: use builtin_find_indexed_array to allow a local copy + of BASH_REMATCH. + From https://lists.gnu.org/archive/html/bug-bash/2022-05/msg00052.html + +execute_cmd.c + - execute_in_subshell: tentative change to clear procsub list after + performing redirections, so nothing in a redirection can affect + what's in the subshell. + From https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00114.html + +test.c + - binary_operator: in posix mode, the < and > operators compare strings + using the current locale (strcoll). + From https://www.austingroupbugs.net/view.php?id=375 + +bashline.c + - bash_default_completion: make sure that command completion adds the + trailing `/' suffix for directories even if the directory name is + the same as the common prefix of matches. + From https://lists.gnu.org/archive/html/bug-bash/2022-11/msg00034.html + +lib/readline/kill.c + - rl_vi_yank_pop: make repeated invocations of vi-yank-pop cycle + through the kill ring just like in emacs mode, even when point + is at the end of the line. + From https://lists.gnu.org/archive/html/bug-bash/2022-08/msg00105.html + +parse.y + - parse_comsub: set variables if the last token (last_read_token) is + `;', `\n', or `&', in addition to was_word + - parse_comsub: if the last read token was a newline (was_newline), + terminate the comsub with a newline instead of a semicolon; keeps + the line numbers more consistent. + From a report by Grisha Levit + +lib/sh/anonfile.c + - anonopen: use memfd_create if it is available, fall through to + traditional Unix/POSIX implementation if it fails + + 6/20 + ---- +parse.y + - yy_string_unget: don't push EOF back to a string, like the other + unget functions + + 6/21 + ---- +parse.y + - read_a_line: don't push an EOF back into the string or line if the + line ends in a backslash. + From a report by Rob Landley + + 6/22 + ---- +lib/readline/input.c + - rl_gather_tyi: make sure result is initialized + +lib/readline/kill.c + - _rl_read_bracketed_paste_prefix: make sure key is initialized + +builtins/read.def + - read_builtin: make sure pass_next and saw_escape are initialized + before a possible goto + - read_builtin: make sure to initialize prevset for very short + timeouts + +subst.c + - function_substitute: make sure tflag is initialized even when we + don't call read_comsub, since we return it in ret->flags + All from a report by Grisha Levit + +builtins/complete.def + - compgen_builtin: use array_from_argv to assign elements of the + stringlist to the array variable. + Update from Grisha Levit + +builtins/cd.def + - bindpwd: fix seg fault from an unlikely set of circumstances + From a report by Grisha Levit + +arrayfunc.h + - convert_validarray_flags_to_arrayval_flags: initialize avflags + From a report by Grisha Levit + +lib/sh/anonfile.c + - anonopen: set *fn if memfd_create is used + From a report by Grisha Levit + + 6/23 + ---- +arrayfunc.c + - bind_assoc_var_internal: free key to fix small leak if assign_func + used + - quote_compound_array_word: free value to fix small leak + +builtins/evalstring.c + - parse_and_execute: free parsed command on failed function definition + import + - open_redir_file: free FN if we're not passing it back to the caller + +subst.c + - param_expand: free TEMP1 in code paths that don't do it now + +bashline.c + - bash_command_name_stat_hook: if we modify *NAME, free the old value + +examples/loadables/{kv,stat}.c + - bind_assoc_variable is caller-free VALUE, so free when needed and + don't allocate a new copy if not + All from a report by Grisha Levit + + 6/24 + ---- +lib/readline/complete.c + - rl_menu_complete: use _rl_free_match_list instead of just freeing + MATCHES if we have too many possible completions to display. + From a report by Grisha Levit + + 6/25 + ---- +eval.c + - reader_loop: make sure to allow exit builtin (code == EXITBLTIN) to + exit the shell when ignoreeof is set + From a report by Grisha Levit + + 6/26 + ---- +lib/readline/complete.c + - complete_sigcleanarg_t: new struct to hold match list and saved line + buffer for cleanup on receipt of SIGINT + - _rl_complete_sigcleanup: use new sigcleanarg_t struct and free both + members + - rl_complete_internal: whenever we display the match list, set up to + clean the matches and saved line buffer in the event of a SIGINT + From a report by Grisha Levit + +lib/readline/signals.c + - _rl_handle_signal: if readline is compiled to include callbacks, only + call rl_echo_signal_char if we're not in callback mode or the + application has set rl_persistent_signal_handlers, leaving any + application signal handler to call it (or not) otherwise. + From a discussion with Andrew Burgess + +lib/glob/glob.c + - glob_filename: if ARRAY == TEMP_RESULTS, make sure to free TEMP_RESULTS + after copying the filenames out of ARRAY, since we either assigned it + directly or glob_dir_to_array returned it because the dirname was + the empty string. + From a report by Grisha Levit + +lib/readline/rltypedefs.h + - Function: only compile in these obsolete typedefs if + WANT_OBSOLETE_TYPEDEFS is defined + +print_cmd.c + - xtrace_print_assignment,xtrace_print_word_list: prioritize checking + for characters that need $'...' printing over shell metacharacters + so that strings containing both get the $'...' treatment + From a report by Grisha Levit + + 6/27 + ---- +subst.c + - skip_double_quoted: make sure to call extract_function_subst with + the SX_NOALLOC flag + From a report by Grisha Levit + +trap.c + - _run_trap_internal: if we're running a trap but shell_eof_token is + set, this means we're somehow running a trap while parsing a + command substitution (weird set of circumstances). Call + reset_parser and unset shell_eof_token if shell_eof_token is set + From a report by Wiley Young + +builtins/setattr.def + - set_var_attribute: don't set the att_propagate attribute unless the + variable whose attribute is being modified is in the temporary + environment for this builtin, not any previous temporary environments + (like the temp env for a function call, or a special builtin like + `.') + +variables.c + - push_posix_temp_var: if we have an array variable we're trying to + push up here, use arrayvar_copyval to copy the value correctly + +arrayfunc.c + - arrayvar_copyval: make sure that V2 ends up being the same type of + array as V1 (att_array or att_assoc), since we're copying the value. + Fixes issue reported by Grisha Levit , but + with the previous fix to set_var_attribute, it's not needed + - assign_compound_array_list: check for integer overflow if the max + index of the array is already INT_MAX. + From a report from Emanuele Torre + - assign_array_var_from_word_list: ditto + + 6/28 + ---- +pcomplete.c,bashline.c + - uw_restore_parser_state,uw_rl_set_signals: move to bashline.c so the + general readline support can use them + +bashline.h + - uw_restore_parser_state,uw_rl_set_signals: extern declarations + +bashline.c + - unset_readline_variables,uw_unset_readline_variables: function to + unset READLINE_{LINE,POINT,MARK,ARGUMENT} and its unwind-protect + counterpart + - bash_execute_unix_command: add unwind-protect to free up allocated + memory + Report and patch by Grisha Levit + +doc/bash.1,doc/bashref.texi + - BASH_ARGC,BASH_ARGV,BASH_SOURCE,BASH_LINENO: note that these variables + may not be assigned to or unset + + 6/29 + ---- +builtins/declare.def + - declare_internal: attempting to assign to a noassign variable is no + longer an assignment error; the attempt is just ignored + +arrayfunc.c + - find_or_make_array_variable: take a new flag value, 4: means to + return noassign variables as themselves instead of NULL without + performing the assignment so the caller can handle them differently. + - assign_array_from_string: pass flags & 4 to find_or_make_array_variable + so we can simply ignore attempted assignments to noassign array + variables instead of treating them as assignment errors + From a report by Kerin Millar + +expr.c + - exppower: only report negative exponent error if noeval == 0. + Fixes issue reported by Steffen Nurpmeso + + 6/30 + ---- +lib/sh/anonfile.c + - anonopen: add support for using shm_open or shm_mkstemp to create + an anonymous file using POSIX shared memory + +configure.ac + - if --enable-static-link is supplied, add -static to LDFLAGS on + Linux if opt_profiling isn't enabled + From a report from Emanuele Torre + +print_cmd.c + - make_command_string_internal: if we're recursively printing a list + (connection) with more than two elements, don't print any deferred + here-documents after the make_command_string_internal on the right + side of the connection unless we're at the end of the list + (printing_connection == 1). This way the caller gets to add the + appropriate connector before printing the deferred here-documents. + From a report by Grisha Levit + - make_command_string_internal,print_group_command: after we call + PRINT_DEFERRED_HEREDOCS and follow it with a closing `)' (subshell) + or `}' (group command), we can set was_heredoc to 0 because we are + no longer printing a here-document + From a report by Grisha Levit + + 7/3 + --- +lib/readline/complete.c + - rl_username_completion_function: simplify things by just skipping the + function body if HAVE_GETPWENT is not defined. + From a report by Grisha Levit + +lib/sh/ufuncs.c + - fsleep: broke into three functions: nsleep, which uses nanosleep, + ssleep, which uses select/pselect, and ancientsleep, which uses + sleep. Prefer nanosleep, use the others depending on what's + defined. + From a report and patch by Grisha Levit + +arrayfunc.c + - assign_compound_array_list: now behaves more like a series of + assignment statements (a=(one two) is more like a[0]=one a[1]=two) + in terms of error handling -- break after the first invalid + assignment -- and return value -- now return int, 0 on failure and + 1 on success so the callers can throw assignment errors + - assign_compound_array_list: if we have an explicit [subscript]=value + assignment, use the negative-indices-count-back-from-the-end strategy; + otherwise use last_ind and throw an error on overflow. This is like + standalone assignment statements + - assign_array_var_from_string: catch new return value from + assign_compound_array_list; return NULL if assign_compound_array_list + returns failure + +subst.c + - do_compound_assignment: if assign_compound_array_list or + assign_array_var_from_string return error (0 or NULL, respectively), + treat as an assignment error similar to assigning to a readonly + variable + Inspired by a report from Emanuele Torre + +arrayfunc.h + - assign_compound_array_list: new return type + + 7/5 + --- +builtins/enable.def + - enable_builtin: make sure dynamic builtin loading and unloading + updates the `enabled' and `disabled' programmable completion lists. + From a report and patch by Grisha Levit + +doc/bash.1,doc/bashref.texi + - hash: add note that assigment to PATH clears the hash table. + Report by Sebastian Carlos + +lib/readline/complete.c + - rl_filename_completion_function: make sure the results of + *rl_filename_rewrite_hook are freed consistently if the function + returns newly-allocated memory + From a report and patch by Grisha Levit + back in May + + 7/6 + --- +builtins/cd.def + - cd_builtin: if $OLDPWD is set by the user or script to something + that's not a full pathname, allow it to use $CDPATH. + From a report by Dustin Boyd + + 7/7 + --- +shell.h + - user_info: add members for saved uid and saved gid + +shell.c + - uidget: if we have setresuid/setresgid, get the saved uid and saved + gid so we can set them if we disable privileged mode + - disable_priv_mode: only call setuid/setresuid and setgid/setresgid + if the euid (egid) != uid (gid). If we have setresuid/setresgid, + add a check whether the saved uid (gid) isn't the same as the real + uid (gid). Potentially saves a couple of system calls. + Fixes Android issue, patch by Grisha Levit + +test.c + - unary_operator: only support historical handling of -t and its + optional argument when not in posix mode + - unary_test: print an error if the argument to -t is not a number + - unary_operator: only make the argument to -t optional if the + next argument is -a or -o and we are using the historical algorithm + (argc >= 5), otherwise force it to be a number and print an error + message if it's not + From a report by Stephane Chazelas + +doc/bash.1,doc/bashref.texi + - added note about test/[ sorting using the current locale with the + `<' and `>' operators when in posix mode + - added note about the integer argument to test -t being required + when in posix mode + - added note recommending against the use of test with 5 or more + arguments in favor of combining multiple instances of test with + && or || + From a report by Stephane Chazelas + + 7/10 + ---- +jobs.c + - start_job: turn off (on) the J_ASYNC flag depending on whether the + job is being started in the foreground (background). It matters now + that we use IS_ASYNC to determine whether to give the terminal + back to the shell's process group. + From a report by Grisha Levit + +bashline.c + - command_word_completion_function: if we have a glob pattern that + expands to multiple words, dispose of the list before returning NULL. + From a report by Grisha Levit + +variables.c + - makunbound: if we're unsetting a local variable, preserve the export + attribute even if the variable's not in the temporary environment + Tentative fix, compatible with other POSIX shells (except the BSD + variants of ash) + + 7/12 + ---- +lib/sh/unicode.c + - include if HAVE_LANGINFO_CODESET is defined, use + nl_langinfo (CODESET) if HAVE_LANGINFO_CODESET is define, since + we no longer check for nl_langinfo. This is what locale.c does. + + 7/15 + ---- +lib/readline/display.c + - rl_redisplay: rudimentary code to handle some cases where the line + buffer consumes more than the physical number of screen lines. It's + not a screen editor, but it handles some of the common cases. + From https://bugs.launchpad.net/ubuntu/+source/bash/+bug/2024628 + + 7/17 + ---- +builtins/printf.def + - getwidestr: make sure to force mbsrtowcs to convert the closing NULL + so the wide-character string is NULL-terminated. + From a report by Grisha Levit + +lib/sh/shmatch.c + - strregerror: new function to return regerror(3) error message text + in allocated memory + - sh_regmatch: add an additional argument to hold the error message + from regerror(3), in newly-allocated memory; generated by call to + strregerror() on regcomp(3) failure + From a patch by Grisha Levit + +externs.h + - sh_regmatch: update extern declaration + +execute_cmd.c + - execute_cond_node: pass pointer to buffer to return any error + message; if sh_regmatch returns 2, use a non-NULL error buffer in + the error message. + +lib/readline/bind.c + - _rl_get_string_variable_value: return the values for + active-region-start-color (_rl_active_region_start_color) and + active-region-end-color (_rl_active_region_end_color) if they + are set. + Fixes bind -v issue reported by Sebastian Carlos + - _rl_get_string_variable_value: if the history is stifled, make + sure we report the history size as < 0 so the output of bind -v + can be reused as input. + Fixes bind -v issue reported by Sebastian Carlos + + 7/20 + ---- +pathexp.c + - quote_string_for_globbing: don't bother backslash-quoting multibyte + characters. It matters for macOS and doesn't make a difference for + other systems, and those aren't going to be special globbing chars. + From a report by Grisha Levit + +lib/glob/glob.c + - glob_vector: normalize the pattern with fnx_fromfs so we make sure + it's also in NFC on macOS (other systems don't care). This is a + POSIX violation, but part of correcting the longtime HFS+ (and Finder) + misfeature + +lib/readline/complete.c + - rl_filename_completion_function: if the application sets a filename + rewrite hook, use it to rewrite the filename we're matching as well + as filenames read with readdir(). + [SUPERSEDED BY CHANGE OF 10/4/2023] + From a report by Grisha Levit + + 7/21 + ---- +pathexp.c + - quote_string_for_globbing: see if we can get away without backslash- + quoting single-byte characters that aren't CTLESC or characters + that are special to EREs or BREs, even if they're quoted + +bashline.c + - bashline_set_filename_hooks: convenience function to set the + directory hook and the filename rewrite and stat hooks; call from + other places in the file so these are set consistently + +bashline.h + - bashline_set_filename_hooks: extern declaration + +builtins/complete.def + - compgen_builtin: make sure to set the directory and filename hooks + so compgen called from a script works more like compgen called + from a word completion context. + Inspired by a report by Grisha Levit + +doc/Makefile.in + - bash.pdf: use groff -T pdf to create, instead of creating postscript + and then using ghostscript + + 7/24 + ---- +jobs.c + - start_job: unconditionally send SIGCONT to the job we just started, + even if we think it was already running, to reduce the window for a + potential race condition, and only change the state to RUNNING if + the SIGCONT succeeds or if the process has terminated so we can + clean it up later. + Report from Earl Chew + +make_cmd.c + - make_simple_command,make_bare_simple_command: now take line number as + an argument; used instead of line_number to set the line associated + with the simple command + +make_cmd.h + - make_simple_command,make_bare_simple_command: change prototype + +parse.y,builtins/command.def,builtins.jobs.def + - make_simple_command,make_bare_simple_command: change callers + + 7/25 + ---- +parse.y + - read_token_word: try to keep track of whether we are parsing the + first word of a simple command and set simplecmd_lineno if we + are. We start a simple command when we return ASSIGNMENT_WORD + or WORD in a command token position. This gives better values for + $LINENO in multi-line simple commands + - redirection: set simplecmd_lineno if it's -1, meaning this is a + simple command with a leading redirection or a null command with + only a redirection + - pass simplecmd_lineno to make_simple_command if we are starting a + simple command (the first ELEMENT) + - parse_comsub,xparse_dolparen: save and restore simplecmd_lineno + - simple_command,function_def production: reset simplecmd_lineno to -1 + after parsing a simple command or a function declared as WORD() + + 7/26 + ---- +doc/bash.1,doc/bashref.texi + - xpg_echo: add description of how this can be used to suppress echo + option interpretation + Inspired by report from Zachary Santer + + 7/27 + ---- +builtins/printf.def + - printf_erange: make out-of-range errors conversion errors even if + the conversion function fully consumes the argument. + From a report by thomas@habets.se + + 7/31 + ---- +lib/readline/rltypedefs.h + - rl_macro_print_func_t: typedef for a function to print macro key + bindings + +lib/readline/bind.c + - rl_macro_display_hook: hook function to call if the application + wants to display a key sequence bound to a macro + - rl_macro_dumper: if rl_macro_display_hook is non-NULL, call it to + display the macro value (after `untranslating' it to add back any + required backslashes) + +lib/readline/doc/rltech.texi + - rl_macro_display_hook: add description + +pathexp.c + - glob_char_p: add the characters that are special within BRE bracket + expressions. + Inspired by a report by Grisha Levit + +bashline.c + - bind_keyseq_to_unix_command: allow whitespace to separate the keyseq + and the command string, but require the command string to be + surrounded by double quotes if it is. If we get a whitespace + separator, call rl_macro_bind so we get the string `translated' + according to how readline does it (backslash-escape sequences + processed, etc.) + - print_unix_command: function to print a key sequence and a unix + command bound to it from cmd_xmap, using a space separator + - print_unix_command_map: make sure to set rl_macro_display_hook to + print_unix_command before calling rl_macro_dumper to print the + bound command strings + + 8/1 + --- +builtins/read.def + - read_builtin: saw_escape is now a count of CTLESCs we added to the + input + - read_builtin: since we increment saw_escape when we add a CTLESC, + decrement it when we remove one from the input (\\\n, \\\0) + - read_builtin: remove the CTLESC we added if we have a backslash- + escaped NULL character ('\0') + - read_builtin: if the input ends with an unescaped newline, remove + the CTLESC we added + From a report by Grisha Levit + + 8/2 + --- +builtins/history.def + - history_builtin: if history -[anrw] is used without a filename + argument, and HISTFILE is unset or null, return success immediately + From a report by Grisha Levit + +doc/{bash.1,bashref.texi},lib/readline/doc/hsuser.texi + - history: document that if filename is not supplied, and HISTFILE is + unset or null, the [-anrw] options have no effect + + 8/3 + --- +pcomplete.c + - gen_progcomp_completions: if the actual compspec that's run is + something different from what's typed (full pathname, alias, etc.), + set pcomp_curcmd to the word corresponding to the actual compspec, + instead of what was typed. This is what eventually gets used by + the compopt builtin's output. + From a report by Grisha Levit + +execute_cmd.c + - execute_coproc: in parent, close /dev/fd FIFOs only if we're not + executing a shell function, like other calls to unlink_fifo_list(). + Report from Hal Blackburn in + https://savannah.gnu.org/support/index.php?110910 + +subst.c + - do_compound_assignment: don't attempt to convert a global associative + array to an indexed array with declare -g. + From a report and patch by Grisha Levit + + 8/7 + --- +lib/readline/bind.c + - rl_print_keybinding: new function, prints a the key bindings for a + single function specified by name + - rl_function_dumper: call rl_print_keybinding for every function name + +lib/readline/readline.h + - rl_print_keybinding: extern declaration + +lib/readline/bind.c + - _rl_untranslate_macro_value: make sure characters betweeen 128 and + 159 (metafied control characters) are printed using the \M-\C- + notation instead of directly writing the control character. + From a report and patch by Grisha Levit + - rl_get_keyname: if a key binding shadows a function or macro, print + the ANYOTHERKEY binding as a null string + From a report and patch by Grisha Levit + - rl_untranslate_keyseq: make changes analogous to + _rl_untranslate_macro_value so that we don't print control characters + directly + - rl_invoking_keyseqs_in_map: if the key corresponds to a keymap, use + _rl_get_keyname to get its text representation, so this function + returns consistent results + - rl_translate_keyseq: if convert-meta is on, don't convert meta chars + that are, e.g., \M-\C-@ (128) into \e followed by a NUL, resulting + in truncated key sequences. Just don't honor convert-meta in this + case + + 8/8 + --- +bashhist.c + - bash_history_no_expand_chars: add the rest of the shell + metacharacters so we don't get empty history events; tcsh does more + or less the same thing + Inspired by a report from Emanuele Torre + + 8/9 + --- +parse.y + - grammar: change bare `time' and `!' productions to use nullcmd_terminator, + which is a list_terminator or a `&' to allow things like `time &' + and `! &' which the original version of POSIX interp 267 (the one + I implemented) says we should support + + 8/11 + ---- +m4/bison.m4,m4/flexmember.m4,m4/locale_h.m4 + - new m4 files from gettext-0.21.1 + +m4/gettext.m4,m4/intl.m4 +m4/{codeset,extern-inline,fcntl-o,glibc2,glibc21,host-cpu-c-abi,iconv,intdiv0}.$ +m4/{intl-thread-locale,intlmacosx,intmax,inttypes-pri,inttypes,inttypes_h}.m4 +m4/{lcmessage,lib-ld,lib-link,lib-prefix,locale_h,lock,nls,po,printf-posix}.m4 +m4/{progtest,pthread_rwlock_rdlock,size_max,stdint_h,strtoimax,threadlib}.m4 +m4/{uintmax_t,ulonglong,visibility,wchar_t,wint_t,xsize}.m4 + - updated m4 files from gettext-0.21.1 + +configure.ac,config.h.in + - updated autoconf files with changes for gettext-0.21.1 + +MANIFEST + - updated distribution manifest with new files from gettext-0.21.1 + +lib/sh/unicode.c + - u32cconv: prefer nl_langinfo to locale_charset like locale.c: + locale_isutf8() + +execute_cmd.c + - uw_restore_lineno: an unwind-protect fuction to restore a saved + line_number + - execute_command: add an unwind-protect to restore line_number in + case execute_simple_command longjmps back to top_level or a + return context. + Side effect of https://savannah.gnu.org/support/index.php?110919 + - execute_for_command, execute_select_command, execute_case_command: + add unwind-protect to restore line_number (could also do it for + if, while, until but those don't modify line_number) + - execute_command_internal: add_unwind_protect to restore line number + for arith, cond, function def commands + + 8/14 + ---- +execute_cmd.c + - execute_simple_command: don't call savestring on the_printed_command_except_trap + if it's NULL. + From a report by Grisha Levit + + 8/15 + ---- +lib/readline/rltty.c + - prepare_terminal_settings: replace USE_XON_XOFF macro with private + variable _rl_use_tty_xon_xoff (initially set to 1); if it's set to + 0 disable the tty start and stop characters. Prep for making it a + bindable variable setting + +builtins/read.def + - edit_line: now takes a third argument saying whether or not to + set rl_attempted_completion_function to NULL to use readline's + default filename completion (the default) + - read_builtin: new option -E to use readline and use the bash + default completion (that is, leave rl_attempted_completion_function + unchanged) + From a suggestion by konsolebox back in 5/2021 + + +doc/bash.1,doc/bashref.texi + - read: document new -E option + + 8/17 + ---- +aclocal.m4 + - BASH_CHECK_LIB_TERMCAP: add a check for bash_cv_termcap_lib == + "libcurses"; set TERMCAP_LIB=-lcurses in this case + + 8/18 + ---- +subst.c + - bash_variable_assignment_error: new function, implements default mode + behavior for variable assignment errors + - posix_variable_assignment_error: new function, implements posix mode + behavior for variable assignment errors + - parameter_brace_expand_rhs,expand_declaration_argument, + do_assignment_statements: call posix_variable_assignment_error or + bash_variable_assignment_error as appropriate + + 8/21 + ---- +lib/readline/misc.c + - _rl_arg_dispatch: add the digits or other characters to + rl_executing_keyseq if we're not calling _rl_dispatch. + From a report by Grisha Levit + +print_cmd.c + - print_simple_command: make sure that the_printed_command[0] == '\0' + if we're printing a null simple command with no words + Patch by Grisha Levit + + 8/22 + ---- +builtins/read.def + - read_builtin: make `delim' variable local, pass to edit_line to + set the last character of the returned line; change edit_line + prototype. + From a suggestion by Grisha Levit + + 8/23 + ---- +parse.y + - comsub and funsub productions: don't reset eof_encountered to 0 in + the action + +subst.c + - function_substitute: unwind-protect eof_encountered so ignoreeof + doesn't keep getting reset to 0 if PS1 includes a ${ ...;} command. + From a report by Grisha Levit + + 8/25 + ---- +doc/{bash.1,bashref.texi} + - clarify the cases where arrayname[@] doesn't refer to all the + elements of an associative array (the unset builtin and test/[/[[ -v + for now) + Inspired by https://savannah.gnu.org/support/index.php?110924 + + 8/28 + ---- +execute_cmd.c + - execute_for_command,execute_select_command,execute_arith_command, + execute_case_command: fix up order in which BASH_COMMAND is set, + the DEBUG trap is run, and PS4 is printed. + From a report by Grisha Levit + +lib/readline/colors.c + - RL_COLOR_PREFIX_EXTENSION: make sure the custom suffix has a leading + `.' + Report and fix from Stefan Klinger + +lib/readline/parse-colors.c + - free_color_ext_list: new function, called on parse error, frees the + list of extensions + - rl_reparse_colors: new public function, frees old extension list and + reparses (presumably new) value of LS_COLORS; some minimal checking + to make sure the value has really changed + + 9/1 + --- +parse.y + - time_command_acceptable: make sure `time' is recognized as a + reserved word after DOLPAREN and DOLBRACE. + Report from Dima Korobskiy + +builtins/printf.def + - printf_builtin: make 'C' equivalent to 'lc'; 'S' equivalent to 'ls' + as POSIX specifies + + 9/6 + --- +eval.c + - parse_command: don't run pending traps if we're parsing a command + substitution + From a report from Emanuele Torre + + 9/8 + --- +jobs.c + - stop_pipeline: don't have the parent set the terminal pgrp; rely on + child processes to do it to avoid potential race conditions. + From a discussion beginning at + https://lists.gnu.org/archive/html/bug-bash/2023-08/msg00087.html + +builtins/printf.def + - bexpand: when parsing the string to be expanded, consume entire + multibyte characters at a time, in case their encoding includes a + '\\' + - printf_builtin: when parsing the format string, consume entire + multibyte characters at a time unless they begin with '\\' or '%', + to avoid characters whose encoding contains those characters + + 9/11 + ---- +builtins/hash.def + - hash_builtin: if the -p option is supplied without a name to hash, + it's an error + +hashcmd.c + - phash_remove: if the hash table is empty, return 1 like unalias does + when the alias isn't in the hash table. + Report from from Mike Jonkmans + + 9/13 + ---- +test.c + - binary_test,unary_test: now static + - cond_test: new function, calls binary_test or unary_test as appropriate + and handles longjmps from test_syntax_error + +test.h + - cond_test: extern declaration + +execute_cmd.c + - execute_cond_node: call cond_test instead of binary_test or unary_test. + From a report and patch from Grisha Levit + +doc/bash.1,doc/bashref.texi + - hash: add some text about the mutual exclusivity of the -t, -p, and + -d options + + 9/14 + ---- +subst.c,subst.h,externs.h + - string_extract,string_extract_verbatim,string_extract_double_quoted, + string_extract_single_quoted,skip_single_quoted,skip_double_quoted, + extract_delimited_string,extract_heredoc_dolbrace_string, + extract_dollar_brace_string,parameter_brace_expand,param_expand, + extract_command_subst,extract_function_subst,extract_arithmetic_subst, + extract_process_subst,extract_array_assignment_list, + expand_array_subscript + change function signatures to take size_t * instead of int * for + arguments that are string indices or lengths, change callers + - unquoted_substring,unquoted_member,string_extract, + string_extract_double_quoted,skip_double_quoted, + string_extract_single_quoted,skip_single_quoted, + string_extract_verbatim,extract_delimited_string, + extract_heredoc_dolbrace_string,extract_dollar_brace_string, + parameter_brace_expand,param_expand,skip_matched_pair,skip_to_delim, + skip_to_histexp,list_string,expand_string_dollar_quote, + parameter_brace_expand_rhs,expand_array_subscript,shouldexp_replacement, + expand_array_subscript,string_quote_removal: change variables used + for string indexes to size_t + [merge from size_t branch] + +arrayfunc.c + - expand_compound_array_assignment: use size_t for string indices + +braces.c + - brace_gobbler: use size_t for string indices + +parse.y + - xparse_dolparen: change function signature to use size_t * + instead of int * for string index, use size_t for string indices + +general.c, general.h + - bash_tilde_find_word: change function signature to use size_t * + instead of int * for string index + +lib/readline/readline.h + - rl_reparse_colors: extern declaration + +lib/readline/doc/rltech.texi + - rl_reparse_colors: document as public function + + 9/21 + ---- +pcomplete.c + - it_init_aliases: move the free (alias_list) inside #ifdef ALIAS. + Report and fix from Mike Jonkmans + +redir.c + - redirection_error: set W_NOPROCSUB in the word redirection_error + creates to call redirection_expand + +builtins/bind.def + - bind_builtin: use CASE_HELPOPT so the long doc gets printed when + --help is supplied + +builtins/getopts.def + - getopts_builtin: change to use no_options() + + 9/22 + ---- +execute_cmd.c + - execute_select_command: in posix mode, an invalid selection variable + name is a fatal error, just like with `for'. This is compatible with + ksh93 and mksh + + 9/25 + ---- +subst.c + - parameter_brace_expand_length: rearrange the code slightly to reduce + the number of find_variable calls. This matters if the variable is + dynamic and produces a new value each time (e.g., RANDOM). + + 9/26 + ---- +builtins/shift.def + - shift_builtin: if get_numeric_arg returns a number out of range and + we're going to print an error message, make sure to skip over an + argument of `--' so we can print the right argument + +builtins/break.def + - break_builtin,continue_builtin: ditto with get_numeric_arg and `--' + + 9/28 + ---- +builtins/history.def + - history_builtin: changed error message if the numeric argument to -d + is invalid + + 9/29 + ---- +subst.c + - array_length_reference: include the open bracket in the error message + passed to err_badarraysub; it looks cleaner + + 10/2 + ---- +jobs.c + - delete_all_jobs: if we are clearing the jobs list, reset the stats + about running and dead jobs and child processes + Report from Koichi Murase + + 10/4 + ---- +lib/readline/complete.c + - rl_completion_rewrite_hook: rewrite hook applied to the completion + word before comparing against the possible completions from the + file system (modified by rl_filename_rewrite_hook) + - rl_filename_completion_function: call rl_completion_rewrite_hook, + if set by the calling application, on the filename portion of the + word to be completed + +lib/readline/readline.h + - rl_completion_rewrite_hook: extern declaration + +bashline.c + - bash_set_filename_hooks: set rl_completion_rewrite_hook to + bash_filename_rewrite_hook now that we've separated them + From a report and patch from Grisha Levit ; + original report from Stefan H. Holek + +lib/readline/doc/rltech.texi + - rl_completion_rewrite_hook: document + + 10/5 + ---- +lib/readline/complete.c + - rl_complete_internal: use `%' as an op character to indicate that + we should just display the completions, like '?' in previous versions + (nothing uses this yet) + - rl_possible_completions: set last_completion_failed to 0 before we + pass '?' to rl_complete_internal so we don't worry about trying to + insert a single completion + + 10/6 + ---- +subst.c + - string_transform: use ansicstr directly for the `E' transformation + so we don't accidentally remove too many escapes. + From a report and patch from Grisha Levit + +execute_cmd.c + - execute_arith_for_command: make sure a failed init expression resets + loop_level so break and continue work correctly + From a report and patch from Grisha Levit + - execute_for_command: set line_number for invalid identifier error + messages; restore before returning error + From a report and patch from Grisha Levit + +lib/readline/misc.c + - _rl_set_insert_mode: manage RL_STATE_OVERWRITE when modifiying + insert mode + +doc/bash.1,doc/bashref.texi + - some style and formatting changes from Bjarni Ingi Gislason + + +subst.c + - getifs: now returns allocated memory to insulate it from changes to + $IFS + +builtins/read.def + - read_builtin: since getifs now returns allocated memory, note when + we need to free ifs_chars and free it before returning. + Reported by Robert Elz in + https://www.austingroupbugs.net/view.php?id=1778#c6513 + + 10/7 + ---- +pathexp.c + - glob_char_p: add more of the extglob pattern characters; it doesn't + hurt to quote them + Report and patch from Grisha Levit + - unquoted_glob_pattern_p: don't treat a `(' immediately following a + `/' as a potential globbing character + - unquoted_glob_pattern_p: only treat the extended glob characters + followed by a `(' as a glob pattern if extended_glob is enabled + - unquoted_glob_pattern_p: an unquoted backslash isn't treated + specially any more, but if it's followed by a CTLESC, you still + don't treat the next character as an unquoted globbing char + Report and patch from Grisha Levit + + 10/9 + ---- +builtins/common.c + - get_numeric_arg: if fatal > 0, set the exit status to EX_USAGE + and call jump_to_top_level with EXITPROG or DISCARD. We don't + need to do everything that throw_to_top_level() does here (it's + really meant for signals and other exceptional failure conditions). + +builtins/cd.def + - cd_builtin: exit with EX_USAGE on too many arguments + +builtins/shift.def + - shift_builtin: return EX_USAGE if get_numeric_arg returns 0, + indicating that the argument wasn't a valid number + +builtins/history.def + - shift_builtin: return EX_USAGE if get_numeric_arg returns 0 + +builtins/exit.def + - exit_or_logout: if get_exitstat (which calls get_numeric_arg) returns + a value > EX_SHERRBASE, indicating an error, just return that to + the caller and let the caller deal with it. This means that + `exit xyz' is no longer a fatal error, but can potentially cause a + non-interactive posix-mode shell to exit because exit is a special + builtin + +builtins/return.def + - return_builtin: if a non-interactive shell in posix mode gets an + invalid numeric arg from get_exitstat, return immediately and let + the caller deal with exiting + All prompted by a report by Martin Schulte + + 10/13 + ----- +pathexp.c + - unquoted_glob_pattern_p: restore some of the special treatment of + backslash followed by CTLESC removed on 10/7 + Report and patch from Grisha Levit + +parse.y + - parse_matched_pair: don't add an extra CTLESC after reading \CTLESC, + like in other parts of the parser + +subst.c + - dequote_string: don't drop trailing CTLESC in a string with more + than a single character + Report and patch from Grisha Levit + +lib/sh/strtrans.c + - ansicstr: handle $'\c^A' and $'\c^?' correctly when being expanded + by the parser (flags&2). The parser passes these as \c^A^A and + \c^A^?, respectively, so we should strip the quoting CTLESC. + Report from Grisha Levit + +subst.[ch] + - extract_dollar_brace_string: now global so brace expansion can use it + +braces.c + - brace_gobbler: use extract_dollar_brace_string if we see ${ with + the appropriate value of QUOTING, so we don't have to teach brace + expansion more shell syntax. + Report from Emanuele Torre + - brace_gobbler: call the word extraction functions with SX_NOALLOC + so we don't have to allocate memory we're just going to free + + 10/16 + ----- +builtins/read.def + - read_builtin: return EX_MISCERROR (2) if there is an error trying + to assign to one of the variables. This is what the newest POSIX + draft specifies. + +variables.c + - dispose_variable_value: do the right thing for att_nofree vars + - makunbound: call dispose_variable_value instead of using inline code + +braces.c + - brace_gobbler: make sure to set no_longjmp_on_fatal_error around + calls to extract_dollar_brace_string + + 10/17 + ----- +braces.c + - brace_gobbler: set SX_NOLONGJMP|SX_NOERROR in the flags passed + to extract_command_subst; make sure no_longjmp_on_fatal_error + is set before that call + - brace_gobbler: revert 10/13 change to use extract_dollar_brace_string + + 10/20 + ----- +parse.y + + - xparse_dolparen,parse_string_to_command: if SX_NOERROR is set in + FLAGS, add PST_NOERROR to parser_state. Not much effect yet. + - parse_matched_pair: if PST_NOERROR is set in parser_state, don't + print an error message if we hit EOF, just return an error. A start + at using PST_NOERROR to suppress error messages, not just duplicate + ones. We'll see how this goes before adding more + +builtins/printf.def + - decodeprec: decode the precision into an intmax_t; clamp the return + value at INT_MAX + - printf_builtin: update to posix interp 1647 (even though it's about + fprintf(3)) and output a NUL byte if %lc is supplied a null argument. + - printf_builtin: fix case where %Q is supplied with a precision in + the format string + - printf_builtin: fix case where %Q is supplied with a precision + greater than INT_MAX + - getwidestr,getwidechar: handle case where there is no argument + supplied; return NULL or NUL + - convwidestr: allow a precedence of 0 for %ls + - getint: don't call getintmax any more, just use the same code style + inline; getintmax will consume an extra argument on an error + Report and patches from Grisha Levit + - printf_builtin: handle field width and precision overflow from + getint() by ignoring the argument (fieldwidth = 0, precision = -1) + + 10/26 + ----- +jobs.c + - wait_for: rearrange code that sets the SIGINT handler to + wait_sigint_handler and saves the old handler to old_sigint_handler + to avoid delay before assigning the handler + Report from Wenlin Kang + - wait_sigint_handler: if cur_sigint_handler (what restore_sigint_handler) + just restored or ignored) is INVALID_SIGNAL_HANDLER, set the + appropriate SIGINT handler with set_sigint_handler before sending + ourselves SIGINT + + 10/30 + ----- +general.c + - legal_number: use the same test (isspace(3)) to skip trailing + whitespace that strtoimax uses to skip leading whitespace. + Report and patch from Paul Eggert + +general.c,general.h + - legal_number: renamed to valid_number, changed all callers + - legal_identifier: renamed to valid_identifier, changed all callers + - legal_alias_name: renamed to valid_alias_name, changed all callers + +lib/sh/compat.c + - legal_number: definition of legal_number here for backwards compat + with old loadable builtins + - legal_identifier: definition of legal_identifier here for backwards + compat with old loadable builtins + - legal_alias_name: same + +subst.c + - brace_expand_word_list: if brace_expand returns NULL, dummy up a + single-element vector with a copy of the original word so we can + add it to the result list unchanged. + Inspired by https://savannah.gnu.org/support/?110948 + + 11/3 + ---- +lib/readline/text.c + - readstr: set of functions to read a string from the keyboard, using + rl_line_buffer for temporary storage, with minimal editing and an + optional caller-supplied completion function. Doesn't use the + callback framework yet since none of the functions are public + - rl_execute_named_command: new bindable function to read a bindable + command name (from the funmap_names array) and execute it, with + command name completion on SPACE and TAB + +lib/readline/readline.h + - rl_execute_named_command: new extern declaration + +lib/readline/rlprivate.h + - new extern declarations for the readstr function framework + +lib/readline/funmap.c + - execute-named-command: new bindable function name + +lib/readline/emacs_keymap.c + - rl_execute_named_function: bound to M-x by default + +lib/readline/doc/rluser.texi + - execute-named-command: document as bindable function name with its + default binding to M-x in emacs mode + + 11/6 + ---- +lib/readline/search.c + - _rl_nsearch_dispatch: use ^V/^Q for rl_quoted_insert into the + search string + +lib/readline/isearch.c + - _rl_isearch_dispatch: use ^V or anything bound to rl_quoted_insert + for rl_quoted_insert into the search string + +lib/readline/terminal.c + - add support for new BE/BD and PS/PE bracketed-paste capabilities. + Nothing uses them yet. + + 11/10 + ----- +builtins/enable.def + - dyn_load_builtin: if we don't find a pathname argument without a + slash in BASH_LOADABLES_PATH, convert it to a pathname with a slash + before calling dlopen, to force the loader to look in the current + directory (Linux, for example, will not). + + 11/14 + ----- +examples/loadables/fdflags.c + - fdflags_builtin: only parse the setspec once, since parsing uses + strtok. + Report and patch from Emanuele Torre + + 11/15 + ----- +builtins/enable.def + - dyn_load_builtin: if BASH_LOADABLES_PATH is set, use only it: don't + fall back to looking in the current directory. This changes the + historical behavior and brings the path behavior more in line with + PATH, but not CDPATH. + + 11/20 + ----- +lib/readline/complete.c + - rl_complete_internal: add `|' as a character for rl_complete_internal + that also just displays the completions, since `%' is overloaded by + rl_menu_complete + + 11/23 + ----- +examples/loadables/strptime.c + - strptime: new loadable builtin, interface to strptime(3). Takes a + date-time string as its arguments and tries to parse it according + to a number of built-in formats. If successful, it outputs the + result as a number of seconds since the epoch. Understands some + handy shorthands like "now" and "tomorrow". + + 11/24 + ----- +tests/unicode1.sub + - update the driver function using namerefs and ${!x[@]} + - zh_TW.BIG5: fixed some problems with the test encodings. + Report and patches from Grisha Levit + + 11/25 + ----- +tests/glob2.sub + - zh_HK.big5hkscs -> zh_TW.big5 to work around macOS 14 issues with + BSD-based locale definition + +bashline.c + - bash_execute_unix_command: check count != 1 instead of count > 1 to + handle negative arguments + +lib/readline/bind.c + - rl_trim_arg_from_keyseq: change the parsing_digits logic to handle + multiple instances of `-' the same way rl_digit_loop does (collapse + to 1) + - rl_trim_arg_from_keyseq: fix typo to correctly recognize a `-' + after a key sequence bound to universal-argument + - rl_trim_arg_from_keyseq: trim negative argument for a key sequence + that is shadowed by a longer key sequence (ANYOTHERKEY) + Report and patches from Grisha Levit + + 11/27 + ----- +support/shobj-conf + - solaris2: change PIC option for non-gcc Solaris 2 builds + +lib/malloc/malloc.c + - binsize: make sure indexing into binsizes casts to size_t (unsigned) + +examples/loadables/getconf.c + - protect more of the _SC defines with #ifdefs for different systems + +examples/loadables/fdflags.c + - ALLFLAGS: add some more flag values from Solaris/AIX/HP-UX + + 11/28 + ----- +subst.c + - function_substitute: unwind return_catch_flag unconditionally + Report and patch from Grisha Levit + - function_substitute: save getopts state and restore it if the + funsub declares a local copy of OPTIND + Report and patch from Grisha Levit + +lib/readline/display.c + - rl_redisplay: make sure lpos is initialized to 0 if local_prompt is + NULL + +shell.c + - run_startup_files: make sure ssh_reading_startup_files is set to 0 + in more places; still dependent on SSH_SOURCE_BASHRC + +builtins/evalstring.c + - should_suppress_fork: make sure ssh_reading_startup_files is 0 in + order to suppress a fork. It will never be non-zero unless someone + enables SSH_SOURCE_BASHRC. + Fixes https://issues.redhat.com/browse/RHEL-5653 + +variables.c + - posix_unbind_tempvar: new function to implement POSIX interp 1009, + which says that `x=4 unset x' not only unsets the variable in the + temporary environment but the most recent scope as well. + +variables.h + - posix_unbind_tempvar: extern declaration + +builtins/set.def + - unset_builtin: if we are unsetting a variable that is in some + temporary environment, and the shell is in posix mode, call + posix_unbind_tempvar to implement the right posix behavior + +doc/bashref.texi + - update posix mode section with change to unset for interp 1009 + + 12/1 + ---- +lib/readline/readline.c + - _rl_subseq_result: add check before _rl_do_lowercase_version that + _rl_to_lower actually results in a different key sequence + Report and patch from Grisha Levit + +lib/readline/isearch.c + - _rl_isearch_dispatch: if the function bound to a key and the function + bound to the result of _rl_to_lower for that key are both + rl_do_lowercase_version, just insert the key into the search string + + 12/5 + ---- +parse.y,parser.h + - heredoc_string: new variable to indicate whether or not we're reading + a here-document from an alias (a pushed string). Set in + gather_here_documents individually for each call to + make_here_document. + +parse.y + - read_a_line: if heredoc_string is non-zero, use shell_getc instead + of yy_getc to get the right alias processing + - shell_getc: if heredoc_string is non-zero, don't add a space to the + end of the alias -- it can mess up the here-document delimiter if + the next character is a newline + Report and sample patch from gldrk + +parse.y,make_cmd.c + - read_a_line,make_here_document: if we're using shell_getc to read + the body of a here-document, let it manage line_number + + 12/8 + ---- +bashline.c + - bash_dequote_filename: fix an off-by-one error that didn't remove a + closing single quote in a filename if it was backslash-escaped. + Report by Ole Tange , fix from Grisha Levit + +lib/readline/terminal.c + - _rl_check_ansi_terminal: check whether or not rl_terminal_name + appears to be an ANSI/ECMA-48 terminal. Check some common terminal + types and then check whether some common terminal capabilities + (ce, nd, ho, up) begin with CSI (ESC-[) and then have a correct + subsequent character + - _rl_term_isansi: new variable, holds readline's idea about whether + the value of rl_terminal_name is an ANSI/ECMA-48 terminal. Initialized + to RL_ANSI_TERM_DEFAULT; set to the result of _rl_check_ansi_terminal + if initialized to 0 and on a `non-dumb' terminal + From an idea by John Tsiombikas in 11/2023 + +lib/readline/rlconf.h + - RL_ANSI_TERM_DEFAULT: define to 1 (yes) or 0 (no) to tell readline + whether or not to assume it's running on an ANSI/ECMA-48 terminal. + The default is 1 (yes) + + 12/11 + ----- +print_cmd.c + - make_command_string_internal: when printing a coproc, print the + coproc name only if the coproc command is not a simple command. + Report from Albert Akchurin + + 12/14 + ----- +doc/bash.1,doc/bashref.texi + - bind: clarify meaning of `re-read' as being individual arguments + to `bind'. + Report from Dan Jacobson + - history expansion: add that the quick substitution character is + only active when it's the first character on the line. + Suggested by Dale R. Worley + +lib/readline/histexpand.c + - history_expand: if history_quoting_state is "'", don't try to + interpret the quick substitution syntax at the start of the string. + Report from Sundeep Agarwal + +execute_cmd.c,execute_cmd.h + - save_lastarg: new function, returns saved value of $_ in allocated + memory + +parse.y + - execute_variable_command: instead of inline code, call save_lastarg + +mailcheck.c + - check_mail: instead of inline code, call save_lastarg + - check_mail: instead of calling bind_variable, use bind_lastarg + +parse.y + - decode_prompt_string: use save_lastarg() and bind_lastarg() to preserve + the value of $_ across prompt string decoding. + Patch from Grisha Levit + + 12/21 + ----- +lib/readline/doc/readline.3 + - updates to some vi-mode bindings + Patch from Josh Brobst + +builtins/setattr.def + - set_or_show_attributes: in posix mode, supplying an argument that is + not an identifier when not acting on functions is a utility error. + This will cause a non-interactive shell to exit + + 12/27 + ----- +print_cmd.c + - command_print_word_list,print_select_command_head,print_case_command_head, + print_function_def: if we're in pretty-print mode, dequote words + before printing them + Report from Seth Sabar + +shell.c + - execute_profile_file,execute_bashrc_file: separate the (duplicated) + code that sources the various profile and bashrc files out into + separate functions + - find_bashrc_file: new function, returns the name of the interactive + shell startup file that should be executed if --rcfile (--init-file) + is not supplied; currently returns DEFAULT_BASHRC + - bashrc_file: default to NULL, making it just the filename supplied as + an argument to --rcfile/--init-file + - execute_bashrc_file: execute whatever find_bashrc_file() returns + if bashrc_file is NULL + From a patch from Allison Karlitskaya + + 1/3/2024 + -------- +print_cmd.c + - print_case_clauses: if we're printing a comsub for subsequent parsing, + don't add a newline before the first case clause, since it adds a + token after the `in' that will allow reserved words to be parsed. + Report from Oguz + + 1/5 + --- +lib/readline/doc/rltech.texi,lib/readline/doc/readline.3 + - Note that since quoted characters are possible, the line readline() + returns may contain embedded newlines. + From a report by Martin Buck + + 1/8 + --- +parse.y + - parse_compound_assignment,parse_string_to_word_list: if we call + reset_parser, directly or indirectly via yyerror, make sure to set + the pushed_strings member of the saved parser state to NULL, since + reset_parser already freed it and we don't want to try and restore + it in restore_parser_state. + From a report by Nathan Mills + + 1/10 + ---- +builtins/hash.def, builtins/ulimit.def + - add some calls to sh_chkwrite where there is builtin output + +lib/sh/eaccess.c + - sh_stat: use strcpy/strcpy when constructing pbuf instead of + strcpy/strcat + +lib/sh/tmpfile.c + - sh_mktmpname,sh_mktmpfd,sh_mktmpdir: use snprintf (filename, PATH_MAX, ...) + instead of sprintf (filename, ...) + + 1/11 + ---- +configure.ac + - unconditionally AC_DEFINE(PGRP_PIPE), to prevent the problem with a + pipeline and a DEBUG trap containing an external command described + in https://lists.gnu.org/archive/html/bug-bash/2024-01/msg00037.html + + 1/12 + ---- +jobs.c + - wait_for_any_job: if we're executing a funsub/varsub, do the wait + even if the jobs list is frozen, but don't remove the job from the + table or change its notification status + Report from Oguz + +subst.c + - uw_unbind_variable: unset the first instance of the named variable, + don't follow namerefs. This is for REPLY in a varsub if it's made + a nameref. + Report from Oguz + +shell.c + - main: call compat_init() so the linker drags in the old compatibility + functions from lib/sh/compat.c. Primarily for use by existing loadable + builtins + +parse.y + - parse_compound_assignment: handle error case (wl == &parse_string_error) + before restoring the parser state from ps + Report from Grisha Levit + + 1/13 + ---- +lib/readline/complete.c + - compute_lcd_of_matches: move a strlen out of a call to MBRTOWC by + computing the length of the entire string once and then using an + offset from it while going through the loop + + 1/15 + ---- +parse.y + - parse_compound_assignment: treat parsing a string following (( (read + by parse_dparen but not an arithmetic command) the same as + expanding an alias when fixing up the pushed string list + Report from Grisha Levit + + 1/18 + ---- +doc/bash.1 + - typos and style fixes to satisfy groff warnings; remove uses of the + `CW' constant-width font; use .EX/.EE for examples; use consistent + style for double-quoted strings; fix inconsistent inter-paragraph + spacing + Fixes from G. Branden Robinson + + 1/19 + ---- +test.c + - binary_test: make sure all calls in posix mode use TEST_LOCALE for + locale-specific string comparisons + +shell.c + - find_bashrc_file: remove + + 1/20 + ---- +shell.c + - exit_shell: don't try to call rl_deprep_terminal, regardless of the + readline state we inherited, if bash_readline_initialized is 0 + Fixes bug reported by Oguz + - shell_reinitialize: reset startup_state and reading_shell_script to 0; + reset debugging_mode to 0 + + 1/22 + ---- +builtins/shopt.def + - reset_shopt_options: reset debugging_mode to 0 + +builtins/set.def + - reset_shell_options: reset interactive_comments to 1 + +braces.c + - brace_expand: if the first call to brace_gobbler consumes the entire + string, don't try to call it again + - brace_expand: check that i < tlen before checking to see if + expand_seqterm left more of the string unconsumed + - brace_gobbler: if extract_command_subst hits the end of the string + without closing the command substitution, make sure we return 0 as + well as set *i = tlen + From a fuzzing report by Nathan Mills + + 1/23 + ---- +subst.c + - function_substitute: unwind-protect current_builtin and this_shell_builtin + like we do this_shell_function + From a fuzzing report by Nathan Mills + + 1/24 + ---- +braces.c + - brace_gobbler: handle nofork command substitutions; skip over any + enclosed command and any braces it contains + +bashline.c + - check_redir: return 0 if we're in a nofork comsub, so we will attempt + command word completion if appropriate + + 1/26 + ---- +lib/readline/readline.h + - RL_STATE_READSTR: new state flag saying we are reading an arbitrary + string from the keyboard using rl_readstr + +lib/readline/rlprivate.h + - READSTR_FREEPMT: new context state flag for rl_readstr; indicates + that we have allocated a new prompt with _rl_make_prompt_for_search + and we should free it with rl_restore_prompt because rl_clear_message + will not do it + +lib/readline/text.c + - _rl_readstr_init,_rl_readstr_cleanup: set and unset RL_STATE_READSTR + - _rl_unsave_saved_readstr_line: free any rl_undo_list, which we may + have accumulated while reading the string, before restoring the line + Fixes leaks reported by sparrowhawk996@gmail.com. + - _rl_readstr_init: set the READSTR_FREEPMT context flag after we + call _rl_make_prompt_for_search, which calls rl_save_prompt + - _rl_readstr_sigcleanup: new function to call from signal cleanup; + restores prompt and calls _rl_readstr_cleanup to free the readstr + context + - _rl_readstr_restore: if the RL_READSTR_FREEPMT flag is set in the + context, call rl_restore_prompt to deallocate the prompt we created + +lib/readline/callback.c + - rl_callback_sigcleanup: call _rl_readstr_sigcleanup to deallocate + readstr state on a signal + +lib/readline/text.c + - rl_execute_named_command: free COMMAND before returning + + 1/27 + ---- +lib/readline/rlprivate.h + - SF_FREEPMT: new flag for non-incremental search contexts: means we + saved the prompt data with _rl_make_prompt_for_search and need to + restore it with rl_restore_prompt, since rl_clear_message will not + +lib/readline/search.c + - _rl_nsearch_sigcleanup: new function that if calls rl_restore_prompt + to clean up the saved prompt data if necessary before calling the + context cleanup function, avoids memory leak + - _rl_nsearch_init: set the SF_FREEPMPT flag after calling + _rl_make_prompt_from_search so we can clean it up properly on errors + - _rl_nsearch_abort,_rl_nsearch_dosearch: call rl_restore_prompt only + if cxt->sflags includes SF_FREEPMT, manage SF_FREEPMT state + +lib/readline/signals.c + - _rl_state_sigcleanup: call _rl_nsearch_sigcleanup + +lib/readline/callback.c + - _rl_callback_sigcleanup: call _rl_nsearch_sigcleanup + + 1/29 + ---- +builtins/cd.def + - change_to_directory: don't try to canonicalize a NULL path that's + NULL after make_absolute. + From a report by Kerin Millar + +jobs.c + - retrieve_proc_status,delete_proc_status: external interfaces to + bgp_search and bgp_delete, respectively; these take an argument + that says whether or not to block SIGCHLD + +jobs.h + - retrieve_proc_status,delete_proc_status: extern declarations + +builtins/wait.def + - check_bgpids: new function to check whether a requested PID is in + the bgpids table (retrieve_proc_status) and optionally delete it + if it is (posixly_correct delete_proc_status) while returning its + status. If the PID isn't in the bgpids table, return -1 + - wait_builtin: if -n is supplied with pid/job arguments, use + check_bgpids to check the bgpids table for any of the requested + pids. Tagged for bash-5.3, might need another option + From a report by Steven Pelley + + 1/30 + ---- +redir.c + - redir_open: assume the AFS bug with O_CREAT and existing files in + protected directories has been fixed over the years, so take out + the workaround. + From a report by Etienne Champetier + +jobs.c + - wait_for_any_job: if the jobs list is frozen and we're running a + funsub, mark the job as notified so it gets cleaned up later + - wait_for_any_job: if we're in posix mode, we should remove the job + from the job list and not add it to the bgpids list, as posix + requires + +builtins/set.def + - set_shellopts: use ASS_FORCE in the call to bind_variable so we + don't have to mess with temporarily turning off readonly + +builtins/shopt.def + - set_bashopts: same + Report by Emanuele Torre + + 2/1 + --- +builtins/printf.def + - vblen: make it a size_t to avoid going negative on underflow + - clearerr, ferror, fflush: don't test these if vflag is set and we're + writing to a string (multiple places) + - vbprintf: pass through failure returns (< 0) from vsnprintf to the + caller(s) so we can return on errors + - printf_builtin: remove redundant test for empty or missing format + string + - PF: call builtin_error if vflag is set, sh_wrerror otherwise + (via PRETURN) + - PF: use PRETURN so we can get partial output to the variable on + error (if vflag is set) + - PRETURN: free conv_buf before attempting the write (it would get + cleaned up on the next call, but why not) + - PRETURN: clean up vbuf only if vflag is set, and clean it up on + error (it would get cleaned up on the next call, but...) + Fixes from Grisha Levit + + 2/2 + --- +doc/bash.1,doc/bashref.texi + - word expansions: make it clearer that quote removal is one of the + shell word expansions + +execute_cmd.c,execute_cmd.h + - currently_executing_command: no longer static, so other parts of + the shell can save and restore it if necessary + +subst.c + - function_substitute: unwind-protect currently_executing_command, + since parse_and_execute can overwrite it in the current shell + execution context. + Report from Grisha Levit + +lib/readline/readline.c + - readline_common_teardown: new function from the guts of + readline_internal_teardown, manages and deallocates rl_undo_list. + +lib/readline/callback.c + - rl_callback_handler_remove: if we're removing the line handler + while we still have an undo list, we didn't call + readline_internal_teardown. Call readline_common_teardown to manage + the undo list in case we are calling this from a signal handler + but not exiting the program. + Fixes leaks reported by sparrowhawk996@gmail.com. + +variables.c + - initialize_shell_variables: use ASS_FORCE when binding SHELLOPTS or + BASHOPTS if we get them from the environment, in case they've + already been created as shell variables and set to readonly (like + changes from 1/30) + - set_ppid: use ASS_FORCE in the call to bind_variable instead of + temporarily turning off att_readonly + +subst.c + - extract_delimited_string: pass FLAGS down to skip_single_quoted and + skip_double_quoted so we propagate SX_COMMAND and SX_COMPLETE + properly. + Fixes bug reported by A4-Tacks + + 2/3 + --- +bashline.c + - initialize_readline: add `bash-vi-complete' as a bindable command + name so users can bind other key sequences to it + - vi_advance_point: function to advance point by one character even + in the presence of multibyte characters + - bash_vi_complete: call vi_advance_point instead of just incrementing + rl_point + + 2/5 + --- +doc/bash.1,lib/readline/doc/readline.3 + - minor updates to handle old versions of troff and groff warnings + Fixes from G. Branden Robinson + + 2/7 + --- +jobs.c + - notify_of_job_status: in non-interactive shells, if we're not going + to print information about a terminated background job + (SIGINT/SIGTERM/SIGPIPE), don't mark it as notified, in the same + way that we don't mark background jobs that exit cleanly as notified + Inspired by a discussion with Robert Elz and + https://lists.gnu.org/archive/html/bug-bash/2024-01/msg00189.html + + 2/9 + --- +lib/readline/history.c + - DEFAULT_HISTORY_GROW_SIZE: bump up to 256 + - real_history, real_history_size: the true history array and its + allocated size. the_history begins a user-visible window into this + list, extending for history_size entries + - history_list_grow_size: compute how much to extend the history list; + increase by roughly sqrt(history_size), don't extend by less than + (new) DEFAULT_HISTORY_GROW_SIZE + - history_list_resize: possibly resize/realloc real_history and reset + the_history to real_history and history_size to real_history_size + - advance_history: make the `window' that the_history provides into + real_history advance to simulate dropping an initial entry; don't + need to memmove all the entries any more + - add_history: call advance_history as necessary to move the_history + window + - add_history: call history_list_resize as necessary + Report and initial patch from Casey Johnson + + 2/12 + ---- +bashline.c,lib/readline/bind.c,lib/readline/display.c + - replace some sprintf calls with snprintf to appease clang + +execute_cmd.c + - execute_simple_command: unwind-protect this_command_name, since we + assign it to something we will free if unwind-protects are run + - execute_function: unwind-protect currently_executing_command, since + execute_command_internal will change it to something will will free + if unwind-protects are run + Report from Grisha Levit + - execute_function: if we didn't compile with debugger support, restore + currently_executing_command after run_debug_trap, like in other + cases + + 2/13 + ---- +builtins/declare.def + - declare_invalid_opts: move the code that checks for invalid option + combinations to its own function; it returns 0 for no errors and + a return code for declare_internal to return otherwise + Inspired by report from Grisha Levit + - declare_invalid_opts: make -A -a and -A +A/-a +a option combinations + invalid + Report from Grisha Levit + + 2/14 + ---- +bashline.c,general.c,subst.c,lib/sh/pathphys.c,builtins/read.def, +support/bashversion.c + - changes for cygwin and msys (no new features) + +bashline.c,builtins/fc.def,general.c,parse.y,stringlib.c,subst.c,variables.c + - MSYS-specific changes to support \r\n line endings and DOS-style + paths + +configure.ac,cross-build/msys32.cache,support/config.rpath,support/shobj-conf + - MSYS-specific build options + +configure.ac,config.h.in,m4/unlocked-io.m4,general.h,include/unlocked-io.h +MANIFEST + - adapt Gnulib's unlocked-io module for faster stdio functions. + From Grisha Levit + +lib/malloc/malloc.c,lib/malloc/table.h,lib/sh/strlcpy.c + - fixes for ISO C 23 + Patch from Collin Funk + + 2/16 + ---- +jobs.c + - waitchld: note whether or not we are executing in a signal handler + context and break out of the loop if we receive a terminating + signal instead of calling termsig_handler, which can execute unsafe + functions + From https://issues.redhat.com/browse/RHEL-22295 + +variables.h + - valid_readonly_attrs,invalid_readonly_attrs: new defines for declare + to use to validate attempts to modify attributes of readonly + variables + +builtins/declare.def + - declare_internal: reject attempts to modify (set or unset) attributes + in invalid_readonly_attrs for readonly variables. + From a discussion with Grisha Levit + + 2/17 + ---- +variables.h + - add att_readonly to valid_readonly_attrs; it's valid to use + declare -r var ; declare -r var + +Makefile.in,builtins/Makefile.in + - add unlocked-io.h to dependencies and variable contents where + appropriate + - add additional include files to INSTALLED_INCFILES + +builtins/pushd.def,examples/loadables/necho.c + - fix order of includes to get unlocked-io.h + From Grisha Levit + +subst.c,subst.h + - rename quote_rhs -> quote_nosplit + + 2/19 + ---- + +subst.c + - quote_var_value: break the code that quotes a variable value ($x, + ${x}, ${x[n]}, etc.) into a separate inline function and call it + from param_expand and parameter_brace_expand_word so they do it + consistently + - param_expand: quote $* appropriately using quote_nosplit if we are + in a place where word splitting will not occur (PF_NOSPLIT2), + expand_no_split_dollar_star == 1 but quoted is 0 + - quote_var_value: use quote_nosplit if we are in a place where word + splitting will not occur (PF_NOSPLIT2) but quoted == 0. + Fixes bug with IFS=$'\1' reported by alex xmb sw ratchev + +arrayfunc.c + - array_value: make sure to quote ${A[*]} appropriately if not quoted + (quoted == 0) and in a place where word splitting does not occur + (flags & AV_ASSIGNRHS); the caller expects array_value to quote in + this case + +subst.c + - parameter_brace_expand_word: make sure to call array_value with + AV_ASSIGNRHS if we are expanding unquoted ${A[*]} in a place where + word splitting does not occur with a non-null $IFS; array_value will + quote appropriately here + - parameter_brace_expand_word,param_expand: use quote_var_value when + expanding $N and ${N} + +doc/bash.1,doc/bashref.texi + - HISTIGNORE: clarify the description a little to emphasize that lines + matching one of the patterns are not saved in the history list + From https://savannah.gnu.org/support/index.php?111020 + + 2/20 + ---- +builtins/evalfile.c + - FEVAL_RETRY: if set in FLAGS, _evalfile will retry an interrupted + open + - _evalfile: if open() returns -1, FEVAL_RETRY is set in FLAGS, and + errno == EINTR, retry the open after checking for interrupts or + terminating signals + - maybe_execute_file,force_execute_file: pass FEVAL_RETRY in flags + +bashhist.c + - load_history: retry read_history if it returns EINTR after checking + for interrupts or terminating signals + +lib/readline/bind.c + - _rl_read_init_file: retry the open once if it's interrupted due to a + signal. If we are at a point where readline has installed its + signal handlers, check for signals readline handles + From a patch from Grisha Levit + + 2/21 + ---- +subst.c + - make_internal_declare: now takes two strings of option arguments: + those to turn on (`-') and those to turn off (`+') + - expand_declaration_argument: simplify the code; handle `-' and `+' + optionsns; always call make_internal_declare + From a patch from Grisha Levit + + 2/22 + ---- +aclocal.m4 + - add additional character to test for broken wcwidth (0x200b) + +lib/readline/display.c + - update_line: use IS_COMBINING_CHAR instead of UNICODE_COMBINING_CHAR + plus WCWIDTH; it doesn't make sense on systems where wcwidth isn't + broken + + 2/27 + ---- +print_cmd.c + - print_case_clauses: if one of the case command pattern lists begins + with the word `esac' (unquoted), precede the pattern list with `(', + since it had to be there originally to get through the parser. + Report by Emanuele Torre + + 2/29 + ---- +general.c,general.h + - string_to_rlimtype: takes a second ENDP argument, like strtol, so + the caller doesn't have to check that the string is all digits, + but can optionally check for and disallow a 0x prefix + + 3/2 + --- +subst.c + - dequote_list: unset the W_QUOTED flag in the word after dequoting it + - parameter_brace_expand_rhs: if the word in the list returned by + expand_string_for_rhs has W_QUOTED set, but the string being + expanded was not quoted, turn on the W_QUOTED in the returned word + so we can potentially avoid word splitting + - expand_word_internal: if CTLNUL is a IFS character, don't add quoted + null strings to istring if we're going to be word splitting, since + they will be treated as word delimiters + + 3/6 + --- +examples/loadables/getconf.c + - getconf_builtin,getconf_all: changes for POSIX interp 1808 proposal + to allow an optional pathname argument with -a that forces its use + for pathconf variables + https://www.austingroupbugs.net/view.php?id=1808 + + 3/11 + ---- +builtins/printf.def + - printf_builtin: %lc/%ls (%C/%S) should only work on wide characters + when in a locale where MB_CUR_MAX > 1. + Report by Emanuele Torre + + 3/12 + ---- +jobs.c + - notify_of_job_status: don't mark terminated background jobs or stopped + jobs as notified in shells started to run -c command + From a report by Greg Wooledge + - notify_of_job_status: make the final marking the dead job as notified + a true catch-all so we can put a debugging message in there to see + if there are other missing cases + - notify_of_job_status: don't mark terminated jobs that died due to + a signal the shell trapped (on the assumption that the shell + received the signal, too) as notified, since we don't report on it + in the JDEAD case if the signal is trapped + + 3/13 + ---- +builtins/printf.def + - PF: print an error message if printf returns an error or leaves + ferror(stdout) true + From a report by Paul Eggert + + 3/14 + ---- +builtins/printf.def + - getint: now takes an int argument and returns it if the conversion + overflows an int; changed callers in printf_builtin + - getint: consolidate checks for overflow. This changes the behavior + if the argument overflows an intmax_t: it returns a field width of + 0 (the overflow result) instead of -1, which changes how printf + behaves. This is consistent with the behavior when the argument + overflows an int + - printf_builtin: change check for overflow of [LONG_MIN..LONG_MAX] + for %d/%i to be explicit instead of relying on integer overflow of p + - printstr,printwidestr: print message if field width or precision + overflow, since we don't call printf + - printstr,printwidestr: set field width and precision on integer + overflow the way we do in printf_builtin + From a report and patch by Paul Eggert + +bashtypes.h + - PRIdMAX: move redefinition here after including inttypes.h + +builtins/printf.def,examples/loadables/seq.c,examples/loadables/getconf.h + - remove PRIdMAX redefinitions, since it's now fixed in bashtypes.h + From a report and patch by Paul Eggert + + 3/15 + ---- +include/stdckdint.in.h,include/intprops-internal.h + - new files, from gnulib + +configure.ac + - stdckdint.h: create in the build directory if the system doesn't + provide one by copying ${srcdir}/include/stdckdint.in.h; make + sure we don't create a new one every time, changing the timestamp + +Makefile.in + - CREATED_HEADERS: add stdckdint.h + +stringlib.c,externs.h + - substring: now takes size_t arguments for START and END + +lib/sh/stringvec.c + - strvec_create,strvec_mcreate,strvec_resize,strvec_mresize: use + ckd_mul to avoid size_t overflow + - strvec_len,strvec_flush: use size_t variable as array index + From a report by Paul Eggert + +bashansi.h + - stdbool.h: include if we have it, typedef bool as unsigned char if + we don't and HAVE_C_BOOL isn't defined + + +m4/c-bool.m4 + - autoconf check for `bool' from gnulib + +configure.ac + - include m4/c-bool.m4, call gl_C_BOOL; don't explicitly check for + stdbool.h using AC_CHECK_HEADERS any more + +config.h.in + - HAVE_C_BOOL: define + + 3/16 + ---- + +builtins/printf.def + - decodeprec: now decodeint, takes new arguments: a char ** that is + the string to parse and update, an argument saying whether or not + to print an error message on overflow, and an argument that should + be the return value on overflow; use ckd_* macros to check overflow + - printstr, printwidestr: use a different mechanism to check overflow; + call decodeint to get precision and field width + +braces.c + - include stdckdint.h for the ckd_* overflow checking macros + - mkseq: the width argument is now size_t + - mkseq: perform overflow detection using the ckd_* macros + - mkseq: perform zero-padding directly instead of using asprintf; the + sprintf family has trouble when width > INT_MAX + - expand_seqterm: use size_t instead of int for length and width + variables + From a report and patch by Paul Eggert + + 3/18 + ---- +builtins/printf.def + - printstr,bexpand: changed size/length arguments to be size_t; changed + callers + +subst.c + - string_var_assignment: if the variable is a local variable at the + current scope, output a declare command even if there are no + attributes or value. Still tagged as tentative + + 3/23 + ---- +test.c + - posixtest: takes an argument, the number of test arguments to parse + - two_arguments,three_arguments: use advance() instead of accessing + and manipulating pos directly + - posixtest,three_arguments,two_arguments: don't set pos = argc + directly, rely on functions to advance pos appropriately + Picked up from coreutils test + - term: if we see a left paren, scan forward for a closing right paren + and use posixtest() if there are 1-4 arguments between the parens to + avoid ambiguous behavior for expressions like true -a \( ! -a \), + which, though it's horribly ambiguous, a user would expect to + return false instead of an error message + Picked up from coreutils-9.2 test + + 3/25 + ---- +bashansi.c + - HAVE_C_BOOL: prefer if defined, fall back to stdbool.h if bool isn't + a compiler builtin + +braces.c + - mkseq: simplify break condition + +builtins/printf.def + - decodeint: let the caller decide what to do with an overflow return, + don't return -1 after calling report_erange(). This will honor a + precision even if the field width overflows + - printf_builtin: check for overflow when adjusting precision for + string length with %Q + - printstr,printwidestr: now that the code uses decodeint, we don't + need to check the precision against INT_MAX + +bashansi.h + - include stddef.h if we have it, otherwise define replacements for + NULL and offsetof() + +builtins/help.def,lib/sh/fmtulong.c,lib/sh/getcwd.c,lib/sh/makepath.c, +lib/sh/snprintf.c,lib/sh/strtod.c,lib/sh/strtol.c,unwind_prot.c, +lib/readline/shell.c + - include bashansi.h instead of stddef.h, or remove a stddef.h include + if bashansi.h is already included + - remove extra definitions that appear in stddef.h or bashansi.h + +lib/sh/reallocarray.c,externs.h + - implementation of reallocarray(), originally from OpenBSD, from + Paul Eggert + +configure.ac + - use AC_REPLACE_FUNCS for reallocarray + +xmalloc.c,xmalloc.h + - xreallocarray: implementation of reallocarray that uses xrealloc + - sh_xreallocarray: implementation of reallocarray that uses + sh_xrealloc and has file and line information for error messages + +lib/sh/stringvec.c + - strvec_create, strvec_resize: rewrite in terms of xreallocarray + - strvec_mcreate, strvec_mresize: rewrite in terms of reallocarray + - strvec_remove, strvec_search, strvec_copy, strvec_from_word_list, + strvec_to_word_list: use size_t instead of int where appropriate + +lib/sh/stringvec.c,externs.h + - strvec_search: return a value of type ptrdiff_t, since size_t is + unsigned and we want to return -1 if not found + + All from a report and patch by Paul Eggert + +test.c + - term: change paren scan algorithm to count open and close parens so + we handle nested subexpressions. Still not compatible in the case + of something like test true -a \( ! -a \) \) + + 3/27 + ---- +parse.y + - flush_parser_state: new function, deallocates the members of a + parser state struct that are dynamically allocated + - parse_comsub: call flush_parser_state in places where we will + return an error or jump to the top level + Fixes memory leaks on error reported by bug_reports00@protonmail.com + +Makefile.in + - CREATED_MACOS: list of dSYM directories created by building and + testing + - distclean,maintainer-clean: remove $(CREATED_HEADERS) and + $(CREATED_MACOS) + - maintainer-clean: remove ctags/etags files + + 3/28 + ---- +bashline.c,bashline.h + - uw_restore_parser_state: moved to parse.y and declaration to shell.h + +shell.c,shell.h + - parsing_command: new flag, set to 1 when calling yyparse; saved and + restored by save_parser_state/restore_parser_state + +parse.y,shell.h + - parsing_command: new element of sh_parser_state_t + +sig.c + - throw_to_top_level: reset executing and parsing_command to 0 + +parse.y + - parse_comsub: set parsing_command to 1 before calling yyparse() + +eval.c + - parse_command: set parsing_command to 1 before calling yyparse(), + restore old value when yyparse returns + +subst.c + - function_substitute: if we are parsing a command, save the parser + state with save_parser_state and add an unwind-protect to restore it + From a report from Grisha Levit + - function_substitute: only save and restore the pipestatus array if + we are not parsing a command, since save_parser_state saves it + +parse.y,externs.h + - decode_prompt_string: now takes an additional argument to determine + whether this is expanding PS[0124] or the @P transformation + - decode_prompt_string: keep track of the (last) real prompt string + being decoded so a @P expansion embedded in the prompt returns the + same result as the prompt string itself for the \! and \# expansions + From a patch from Grisha Levit + +parse.y,print_cmd.c,eval.c,subst.c + - decode_prompt_string: changed all callers + + + 3/29 + ---- + +doc/bash.1,lib/readline/doc/readline.3,lib/readline/doc/history.3 + - fix some font-setting directives + - fix some word breaks for font-changing macros + +lib/readline/doc/history.3 + - fix the macros for function signatures for AT&T troff limitations + - fix some paragraph spacing and other layout/spacing/hyphenation + issues + Fixes from G. Branden Robinson + + 4/1 + --- +execute_cmd.c + - shell_execve: minor changes to code that checks the #! interpreter + name + +execute_cmd.c + - execute_coproc: if MULTIPLE_COPROCS is not defined, close any old + file descriptors corresponding to sh_coproc. The user can still + copy them from the coproc array if desired; this prevents the shell + from hanging if a second coproc inherits file descriptors from a + previous one + From a report by Carl Edquist + +jobs.c,nojobs.c,jobs.h + - process_exit_status: no longer static, public function with an + extern declaration + + 4/2 + --- +execute_cmd.c,execute_cmd.h + - coproc_pidchk: now takes a full WAIT status word as a second + argument instead of just the exit status; arranged the prototype + to only be included if the source file includes posixwait.h for WAIT + +jobs.c + - waitchld: call coproc_pidchk with a WAIT second argument (like + nojobs.c does) + +command.h + - COPROC_STOPPED,COPROC_FOREGROUND: new flags values for coproc + +execute_cmd.c + - coproc_setstatus: now takes a full WAIT status word as the second + argument, passed from coproc_pidchk + - coproc_setstatus: use process_exit_status to translate a WAIT into + an int status, doing proper termsig+128 handling + - coproc_getstate: take a WAIT and return the appropriate COPROC_ + status flag (DEAD, STOPPED, etc.) + - coproc_setstatus: use coproc_getstate to set cp->c_flags + + 4/4 + --- +configure.ac + - changed release status to bash-5.3-alpha + - AC_PROG_GCC_TRADITIONAL: removed, since it no longer is supported + in autoconf-2.72 (which MacPorts upgraded me to) + +test.c + - term: made change of 3/25 dependent on the compatibility level + +support/config.guess,support/config.sub,support/config.rpath + - new versions, imported from gnulib + + 4/5 + --- +doc/bashref.texi + - update compatibility, posix mode, and bourne shell sections for + bash-5.3-alpha release + +version.c + - update copyright date to 2024 + +[bash-5.3-alpha frozen] diff --git a/CWRU/misc/open-files.c b/CWRU/misc/open-files.c index 6a5557769..67440de4d 100644 --- a/CWRU/misc/open-files.c +++ b/CWRU/misc/open-files.c @@ -27,6 +27,7 @@ #include +int main() { register int i; diff --git a/CWRU/misc/sigs.c b/CWRU/misc/sigs.c index bae93f8ad..c575de90f 100644 --- a/CWRU/misc/sigs.c +++ b/CWRU/misc/sigs.c @@ -20,16 +20,16 @@ #include #include +#include extern const char * const sys_siglist[]; typedef void sighandler(); -main(argc, argv) -int argc; -char **argv; +int +main(int argc, char **argv) { - register int i; + int i; sighandler *h; for (i = 1; i < NSIG; i++) { diff --git a/CWRU/misc/sigstat.c b/CWRU/misc/sigstat.c index 9135baa4a..41ed361e1 100644 --- a/CWRU/misc/sigstat.c +++ b/CWRU/misc/sigstat.c @@ -26,14 +26,18 @@ #include #include #include +#include +#include +#include -extern char *strrchr(); static char *signames[NSIG]; char *progname; -void sigstat(); +void sigstat(int); +void init_signames(void); +int main(argc, argv) int argc; char **argv; @@ -83,6 +87,7 @@ int sig; printf("%s: signal is trapped (?)\n", signame); } +void init_signames() { register int i; diff --git a/ChangeLog b/ChangeLog index da6d4aa1c..ecf478ffb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ - +\ 12/6/2020 --------- @@ -3950,3 +3950,5169 @@ lib/readline/history.c 9/23 ---- [bash-5.2 frozen] + + 9/26 + ---- +[bash-5.2 released] + + 9/27 + ---- +mailcheck.c + - time_to_check_mail: don't bother if we're in the middle of readline + completion or command dispatching. + From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1019462 + +lib/readline/display.c + - rl_forced_update_display: use memset to clear out visible_line + instead of trying to use a loop; line_size is the size. + Report from + +print_cmd.c + - indirection_level_string: use MBRLEN and an initialized mbstate_t + object to avoid altering an internal mbstate_t. + From Koichi Murase + +subst.c + - string_extract_verbatim: use an explicit mbstate_t object and pass + it to MBRLEN and mbrtowc to avoid altering the state that + ADVANCE_CHAR is using. + From Koichi Murase + - setifs: use an explicit mbstate_t object and pass it to MBRLEN so + to avoid altering an internal mbstate_t. + From Koichi Murase + +builtins/printf.def + - asciicode: use an explicit mbstate_t object and pass it to mbrtowc + to avoid using an incorrect internal mbstate_t + From Koichi Murase + +lib/sh/{mbscasecmp,mbscmp}.c + - mbscasecmp,mbscmp: use different mbstate_t objects for the different + strings so they don't affect each others' intermediate mbstate. + From Koichi Murase + + 9/28 + ---- +execute_cmd.c + - execute_command_internal: if executing a (command) subshell, restore + the value of line_number from save_line_number before returning early + due to being a non-terminal pipeline element. + From https://savannah.gnu.org/support/index.php?110714 + + 9/30 + ---- +subst.c + - expand_array_subscript: make sure to pass a non-NULL first argument + to sh_backslash_quote. Report from Emanuele Torre , + patch from Koichi Murase + + 9/30 + ---- +jobs.c + - cleanup_dead_jobs: delete dead foreground jobs we won't notify the + user about (those not killed by a signal or killed by SIGINT/SIGPIPE). + From a report from Koichi Murase + - wait_for_any_job: never return a foreground job, even when requested + by pid, if it's in the jobs list + Report and fix from Koichi Murase + +m4/strtoimax.m4 + - BASH_FUNC_STRTOIMAX: fix logic inversion of result; we should be + replacing the function if the tests show we *don't* have a working + version. Report from Emanuel Haupt + + 10/4 + ---- +lib/readline/nls.c + - _rl_init_locale: cope with setlocale returning NULL, make sure we + set up a default value for LC_CTYPE. Report from + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1021109 + +lib/readline/{input.c,rlprivate.h} + - fixes for compiling on w64-mingw32 + + 10/5 + ---- +parse.y + - xparse_dolparen: save and restore extended_glob using local_extglob + in the same way that parse_comsub does. Fixes compat issue reported in + https://bugs.gentoo.org/873931 and by Kerin Millar + + 10/6 + ---- +subst.c + - extract_dollar_brace_string: keep a stack of dolbrace_state values + to handle nested expansions. Report from + Antoine + + 10/7 + ---- +builtins/{shopt.def,common.h} + - extglob_flag: new variable to hold the state of the `extglob' option; + initialized to EXTGLOB_DEFAULT like extended_glob + - shopt_set_extglob: new function to set extended_glob to the right + value for the rest of the shell + +parse.y + - reset_parser: set extended_glob to extglob_flag, which is only + changed by shopt, remove global_extglob + - parse_comsub,parse_cond_command,xparse_dolparen: no longer use + global_extglob + +execute_cmd.c + - execute_cond_node: reset extended_glob to the value of extglob_flag, + since we're executing a command here + + 10/8 + ---- +parse.y + - save_dstart: when we set the value of function_dstart, save the old + value in save_dstart (read_token, read_token_word); restore it in + the grammar production after calling make_function_def. This gives + you correct line numbers for one level of function nesting. + Report from Daniel Castro + + 10/10 + ----- +execute_cmd.c + - shell_execve: rearrange code so that we check for a bad interpreter + before printing a generic ENOENT error message. Report from + Kirill Elagin + + 10/12 + ----- +lib/readline/callback.c + - CALLBACK_READ_RETURN: add an inlined call to RL_CHECK_SIGNALS so we + can handle any signals that arrived before we restored the calling + application's signal handlers. From a gdb dicussion with + Simon Marchi + + 10/12 + ----- +variables.c + - pop_var_context: flag an internal error for shell_variables not + pointing to a function context only if we haven't already flushed + all the local contexts and reset variable_context. This can happen + if errexit is enabled and we're going to be exiting the shell, but + we're running unwind-protects on our way out. Report from + Xavier Delaruelle + + 10/13 + ----- +sig.c + - kill_shell: broke the code that resets the signal disposition to the + default and sends a terminating signal to the shell into a separate + function + - termsig_handler: set handling_termsig to terminating_signal and make + it file-scope so other functions know we're handling a terminating + signal and are about to exit, and which signal it is (latter not used + yet) + - termsig_sighandler: if we get a fatal signal while we're handling a + fatal signal, kill ourselves with the second fatal signal immediately. + Fixes issue reported by Andreas Schwab + +execute_cmd.c + - execute_case_command: call CHECK_TERMSIG after the call to strmatch, + since gmatch will return FNM_NOMATCH if there's a pending terminating + signal and we don't want incorrect results + +subst.c + - pat_subst: make sure REP is non-NULL before calling savestring on it. + Report from Justin Wood (Callek) + + 10/14 + ----- +builtins/{shopt.def,common.h} + - expand_aliases: split into a variable that holds the current state + of alias expansion (expand_aliases) and a variable that reflects the + global option value (expalias_flag), make sure expand_aliases is set + appropriately by shopt + +shell.c,execute_cmd.c,general.c + - expand_aliases: make sure expand_aliases and expalias_flag always + agree + +parser.h + - PST_STRING: new parser flag, set when parsing a string to a command + or word list + +parse.y + - reset_parser: if we're parsing a command substitution or a string, + and need to restore expand_aliases, make sure it's set to the value + of expalias_flag. + Fixes SIGINT during interactive command substitution parsing bug + reported by feng xiangjun + - parse_string_to_word_list,parse_string_to_command: make sure to set + PST_STRING in parser_flags since we're resetting expand_aliases + + 10/17 + ----- +print_cmd.c + - print_function_def, named_function_string: if the function doesn't + have any here-documents, unset was_heredoc after printing the + closing brace so we can add a separator if there is another command + following the function definition. Fixes bug with multiple function + definitions and here-documents reported by D630 + - make_command_string_internal: if we're printing a command + substitution, make sure to preserve newlines in the comsub so we + avoid problems with re-parsing function defs or command substitutions + containing multiple compound commands that need to be separated + by newlines, but don't double them up + +parse.y + - P_ARITH: new parse_matched_pair flags value; used to jump to + parse_comsub if we see a $( inside a $(( )), $[ ], or (( )) + - parse_matched_pair,parse_comsub,parse_arith_command,read_token_word: + make sure to call parse_matched_pair with P_ARITH if we're parsing + an arithmetic command or expansion + - parse_matched_pair: if we see $( inside a call with P_ARITH in the + flags argument, jump to parse_dollar_word and call parse_comsub to + parse it. The rest of the steps assume that parse_comsub has + expanded aliases (or not) appropriately. Fixes bug 2 from + https://bugzilla.redhat.com/show_bug.cgi?id=2134307 + + 10/18 + ----- +builtins/evalstring.c + - parse_and_execute: we play tricks in the parser and in command_substitute + to turn expand_aliases on and off depending on the comsub parser + pass and whether or not we're in posix mode. Since this should only + matter for parsing, when we're processing a command substitution, we + set expand_aliases to the global flag value after parsing the + command and before executing it, and restore it if the global flag + value isn't changed during execution. Fixes bug 1 from + https://bugzilla.redhat.com/show_bug.cgi?id=2134307 + +command.h + - PF_BACKQUOTE: new flag value, only used by command_substitute to + differentiate between `` and $() forms. The former does not have + aliases expanded by parse_comsub in posix mode, so needs to expand + them in parse_and_execute like default mode + +subst.c + - command_substitute: don't modify expand_aliases if PF_BACKQUOTE is + included in flags, since aliases haven't been expanded in the + command string (it was run through parse.y:parse_matched_pair()) + - expand_word_internal: pass PF_BACKQUOTE to command_substitute() if + expanding a `` command substitution + + 10/20 + ----- +parse.y + - yylex: return YYUNDEF as current_token if read_token returns < 0. + Fixes parser reset issue reported by Todd Stein + in https://savannah.gnu.org/support/index.php?110745 + +subst.c + - ARITH_EXP_CHARS: chars that are special and trigger expansion in + arithmetic expressions, EXP_CHARS without `<' and `>'. Fixes bug + reported by Glenn Jackman + +execute_cmd.c + - retain_fifos: replace executing_list (which is still present) as the + indicator of whether or not to save and restore the FIFO list around + a call to execute_command_internal/execute_command; it's more + descriptive and can be used elsewhere + - execute_for_command: set retain_fifos so we don't unlink the fifo + list until the for command completes. Fixes issue reported in + https://savannah.gnu.org/support/index.php?110743 + +lib/readline/xmalloc.c + - memory_error_and_abort: add `const' qualifiers to the argument. Fix + from Markus Elfring + + 10/24 + ----- +general.c + - check_binary_file: check the first two lines for NULs if the first + line begins with a `#!'; otherwise check the first. From a discussion + and patch in https://savannah.gnu.org/support/?110744 + (larsh@apache.org) + +parse.y + - parse_matched_pair: set PST_NOERROR if we read to EOF without finding + a closing match and call parser_error; avoids redundant error + message + +lib/sh/uconvert.c + - uconvert: RETURN: if ipart (integer part) is 0, but upart (fractional + part) is non-zero, multiply upart by mult so we don't lose the sign + for values in the range (-1, 0]. From a report by + izabera + +execute_cmd.c + - execute_in_subshell: check for terminating signals before we return + to our caller, which will immediately exit, and before running any + exit trap (since termsig_handler will run any exit trap). Fixes bug + reported by Andrew Neff + + 10/26 + ----- +lib/readline/complete.c + - rl_filename_completion_function: if the application doesn't supply + any directory hook functions, we need to handle the case where we + dequoted users_dirname and also tilde-expanded dirname. We choose + to tilde expand users_dirname rather than call the application + dequoting function again. Report and patch from + Stefan H. Holek + + 10/27 + ----- +execute_cmd.c + - execute_in_subshell: call procsub_clear in addition to clear_fifo_list, + since none of these process substitutions are children of this new + subshell + +jobs.c + - wait_for_background_pids: call procsub_waitpid on the last procsub + created as long as it's the same as $!, then call reap_procsubs to + clean up the procsub list. Don't call procsub_waitall. Report from + Oguz İsmail Uysal + + 10/31 + ----- +expr.c + - expr_streval: explicitly permit `@' and `*' as associative array + subscripts if the shell compatibility level is greater than 51. + Prompted by report from Corey Hickey + +subst.c + - string_list_pos_params, param_expand: make sure that $* is treated + the same as "$*" in here-document bodies that are being expanded. + From https://lists.gnu.org/archive/html/bug-bash/2022-09/msg00002.html + + 11/1 + ---- +lib/readline/readline.c + - readline_internal_char: save and restore the value of _rl_top_level + around our use of setjmp, even though it doesn't matter in most + cases. Report from sparrowhawk996@gmail.com that it causes crashes + in some obscure callback-mode cases + +lib/readline/isearch.c + - _rl_isearch_dispatch: if we end the search and stuff characters back + to be read again, decrement the current key sequence index by 2 so + we don't have duplicate characters in the sequence + +lib/readline/misc.c + - rl_digit_argument: call _rl_del_executing_keyseq after rl_execute_next + + 11/3 + ---- +builtins/setattr.def + - show_localname_attributes: special-case "-" local variable, since + there is no `declare -' equivalent. + Reported by Emanuele Torre . + + 11/4 + ---- +lib/sh/tmpfile.c + - sh_mktmpname,sh_mktmpfd: use get_urandom32() instead of random() if + we're not using mktemp or mkstemp and the system provides the + appropriate support + +trap.c + - trap_variable_context: new variable, set to variable_context every + time a trap string runs (that is, every time running_trap is set to + a value > 0) in _run_trap_internal, run_exit_trap, run_pending_traps + +trap.h + - trap_variable_context: extern declaration + +builtins/common.c + - get_exitstat: if the `return' builtin is running, we are running a + trap (but not the DEBUG trap), and the return would cause the trap + string to complete (variable_context == trap_variable_context, so + we haven't executed another shell function), use the last command + exit value as the return status. POSIX interp 1602, from + https://www.austingroupbugs.net/view.php?id=1602 + + 11/4 + ---- + +lib/readline/display.c + - local_prompt_invis_chars: new array variable, similar to + local_prompt_newlines, that keeps track of the number of invisible + characters on each line of the prompt string. Use in WRAP_OFFSET + macro with eye to using in W_OFFSET as well. Used for the case where + the last line of the prompt is not the last line with invisible + characters. Can use this in more calculations replacing wrap_offset + and prompt_invis_chars_first_line going forward. Inspired by report + from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1018851 + - update_line: use local_prompt_invis_chars to set _rl_last_c_pos + correctly when on a non-terminal prompt line that contains + invisible characters + + 11/7 + ---- +subst.c + - get_var_and_type: allocate new memory for *valp and return it if the + type is VT_ARRAYMEMBER. The callers -- all of which treat this case + the same as VT_VARIABLE -- will free appropriately. Fixes problems + with using parameter operations like ## on dynamic array variables, + reported by Ivan Kapranov back on 8/31/2022 + +expr.c + - change some error messages to make it clearer these are arithmetic + syntax errors. These will require new translations. + +test.c + - integer_expected_error: change the message to remove `expression', + since this is only called for the `test' builtin, where TEST_ARITHEXP + is not in FLAGS. This will require a new translation. + Reported by Emanuele Torre back on + 6/15/2022 + + 11/10 + ----- +builtins/read.def + - reset_timeout: when a timer expires, make sure to cancel any + readline timeout as well with rl_clear_timeout(). + From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1023776 + + 11/11 + ----- +builtins/reserved.def + - !: add short help text + +lib/readline/complete.c + - make_quoted_replacement: if readline found quote characters anywhere + in the filename, but is not completing on an unclosed quoted string, + and there is an application filename quoting function, let that + function quote the filename if necessary + +bashline.c + - COMPLETE_DQUOTE2: new completion quoting style define + - bash_expand_filename: new function, runs a filename passed to it + through word expansion, suppressing command and process substitution + and returns the result (in new memory if it's different than the + filename argument) + - bash_quote_filename: if the return value from bash_check_expchar is + `$' or ``', expand the filename and if it contains characters that + should be quoted, set the quoting style to COMPLETE_DQUOTE2 + - bash_quote_filename: if the completion quoting style is COMPLETE_DQUOTE2, + use sh_mkdoublequoted to put double quotes around the entire + unexpanded filename instead of using sh_double_quote, which will + backslash-quote any `$'. This is a start at preserving user-supplied + quotes if the (expanded) completed filename requires them. From + reports by Peng Yu in 5/2020 and + Pedro Gimeno in 6/2021 + + 11/14 + ----- +parse.y + - report_syntax_error: if word_top is set and we reach EOF, report the + starting line number in the error message. From a patch from + L A Walsh and Manuel Reiter + back in 9/2018 + - MAX_CASE_NEST: doubled to 256, renamed to MAX_COMPOUND_NEST + - read_token_word: add `if', `while', and `until' to the set of + compound commands that use WORD_TOP and WORD_LINENO (with + corresponding changes to grammar productions) + - [grammar]: changed check to decrement WORD_TOP to >= 0 since we + start at -1 and we want to decrement back to -1 when all loops are + closed + +builtins/jobs.def + - jobs_builtin: call notify_and_cleanup after displaying the status of + jobs to implement POSIX requirement that `jobs' remove terminated + jobs from the jobs list + https://pubs.opengroup.org/onlinepubs/9699919799/utilities/jobs.html#tag_20_62 + + 11/15 + ----- +lib/sh/input_avail.c + - include signal.h unconditionally, we need it for HAVE_SELECT and + HAVE_PSELECT + - nchars_avail: make sure we declare and use readfds and exceptfds if + we have pselect or select available + +lib/readline/input.c + - rl_gather_tyi,rl_getc: need to declare and use readfds and exceptfds + if HAVE_PSELECT or HAVE_SELECT is set. Report from + Henry Bent , fixes from + Koichi Murase + + 11/16 + ----- +lib/sh/ufuncs.c + - quit.h: include unconditionally for declaration of sigemptyset even + if HAVE_SELECT is not defined + +lib/sh/timers.c + - USEC_PER_SEC: make sure it's defined even if HAVE_SELECT is not + +lib/glob/sm_loop.c + - BRACKMATCH: if an equivalence class does not match, and the next + character following the class is a `]', treat that as the end of + the bracket expression. + Report and fix from Koichi Murase + - GMATCH: if the current character in the string is a `/' and the + current element in the pattern is a bracket expresion, and the FLAGS + include FNM_PATHNAME, return FNM_NOMATCH immediately. A bracket + expression can never match a slash. + Report and fix from Koichi Murase + - BRACKMATCH: if we encounter a in a bracket expression, either + individually or as part of an equivalence class, nullify the bracket + expression and force the `[' to be matched as an ordinary + character + + 11/17 + ----- +lib/glob/sm_loop.c + - BRACKMATCH: if a slash character appears as the first character + after a non-matching character class or equivalence class, treat + the bracket as an ordinary character that must be matched literally + - BRACKMATCH: if a slash character appears as the second character + of a range expression, treat the bracket as an ordinary character + - BRACKMATCH: if a slash character appears in the portion of a + bracket expression that already matched, treat the bracket as an + ordinary character + Updates from Koichi Murase + - BRACKMATCH: if a range expression is incomplete (no end char), + treat the bracket as an ordinary character + + 11/18 + ----- +doc/bashref.texi + - Reporting Bugs: add mention of the Savannah project page. Suggested + by Loïc Yhuel + + 11/20 + ----- +builtins/common.h + - SEVAL_NOOPTIMIZE: new flag for parse_and_execute: means don't try to + optimize forks out of any simple or conditional commands + +builtins/evalstring.c + - parse_and_execute: if FLAGS includes SEVAL_NOOPTIMIZE, don't try to + call can_optimize_connection to optimize away forks from AND_AND or + OR_OR commands + +builtins/eval.def,trap.c,parse.y,jobs.c + - parse_and_execute: include SEVAL_NOOPTIMIZE in any calls to + parse_and_execute. Fixes bug reported by + Frode Nordahl + + 11/21 + ----- +lib/readline/readline.c + - readline_initialize_everything: use xmalloc to initialize + rl_executing_keyseq, since we use xrealloc to reallocate it and + don't check it for NULL anywhere + +subst.c + - parameter_brace_expand_word: make sure to update *ESTATEP and pass + ES back to the caller even if array_value returns NULL. Fixes + memory leak referencing unset associative array elements reported + by Ralf Oehler ; fix from + Koichi Murase + + 11/22 + ----- +lib/glob/sm_loop.c + - BRACKMATCH: if a backslash appears before a slash in a bracket + expression, treat the whole thing as literal and try to match the + open bracket + - BRACKMATCH: if a bracket expression ends in an unquoted backslash, + try to match the left bracket literally and go on. More discussion with + Koichi Murase + +execute_cmd.c + - execute_in_subshell: don't try to optimize away forks in the command + if the subshell command is being timed or its return value is being + inverted. Report from Dabrien 'Dabe' Murphy + + 11/23 + ----- +lib/readline/complete.c + - __WIN32__: remove uses of this preprocessor symbol, use _WIN32 + +lib/readline/rldefs.h + - Don't define NEW_TTY_DRIVER on _WIN32. Fix from + sparrowhawk996@gmail.com + +include/posixselect.h + - include "posixtime.h" instead of so the right guards + are present + +builtins/read.def + - read_builtin_timeout: make sure we don't try to call shtimer_select + if HAVE_SELECT isn't define; it won't be compiled in + +include/stdc.h + - restrict: make sure we have a definition if __STDC__ is not defined + +include/posixtime.h,lib/sh/gettimeofday.c + - gettimeofday: make sure the function signature matches POSIX by + adding `restrict' + + 11/25 + ----- +include/posixselect.h + - don't try to define HAVE_SELECT at all if _WIN32 is defined + +lib/readline/kill.c + - define WIN32_LEAN_AND_MEAN for the windows-specific paste function + +lib/readline/rlprivate.h + - _rl_timeout_select: only include declaration if HAVE_SELECT or + HAVE_PSELECT are defined + + 11/28 + ----- +lib/readline/input.c + - rl_gather_tyi: call rl_input_available_hook after FIONREAD test, + let the application hook into whether or not there are characters + to read + +execute_cmd.c + - execute_function: if the maximum function nesting level is exceeded, + run the unwind-protects before jumping back to top level. Report + from felix + +variables.c + - find_variable_nameref_for_create,find_variable_nameref_for_assignment: + handle find_variable_nameref returning &nameref_maxloop_value, return + NULL and print a warning message in that case + - find_variable_nameref: return &namref_maxloop_value instead of NULL + if the number of resolution cycles exceeds NAMEREF_MAX; change + callers to print a new error message in this case; no other change + in behavior. From a 4/2020 suggestion from Andrej Podzimek + + - find_variable_nameref_context, find_nameref_at_context, + find_variable_last_nameref_context: make sure to return + &nameref_maxloop_value consistently and handle getting it as a + return value from other functions + + 11/29 + ----- +lib/readline/display.c + - _rl_update_final: if there is only one line (_rl_vis_botlin == 0) + and that line is empty (botline_length == 0), assume there is no + prompt and the line has no contents, so output the CR/LF to indicate + that the newline has been read. From a report from + Kevin Pulo + + 11/30 + ----- +builtins/evalstring.c + - parse_and_execute: if we are executing the eval builtin, and the + return status from the command is suppressed (builtin_ignoring_errexit), + set CMD_IGNORE_RETURN in the parsed command's flags. From a report + from Tycho Kirchner + + 12/1 + ---- +lib/glob/sm_loop.c + - PARSE_SUBBRACKET: a reworked PARSE_COLLSYM, generalized to handle + [:, [=, and [. special bracket expressions + - BRACKMATCH: change to use PARSE_SUBBRACKET consistently to parse + [:, [=, and [. special bracket expressions + - PATSCAN: takes new FLAGS arg, changed all callers to just pass the + flags they get through to PATSCAN + - PATSCAN: call PARSE_SUBBRACKET for [:, [=, and [. to treat them + consistently (uses FLAGS argument here) + - PATSCAN: handle FNM_NOESCAPE appearing in FLAGS argument + This set of fixes contributed by Koichi Murase + +lib/glob/{glob,gmisc}.c + - PATSCAN: change all callers to add extra flags arg of 0 + +doc/{bash.1,bashref.texi} + - trap description: replace ARG with ACTION + - clarify the language describing what trap without arguments and + trap -p without arguments display + - clarify that trap in non-interactive shells does not allow signals + that were ignored at shell start to be trapped; interactive shells + allow this + - trap: add missing command types to the description of when the + DEBUG trap is executed + +builtins/trap.def + - LONG_DOC: replace ARG with ACTION + - make it clear that trap and trap -p without arguments display a + information about specified signals, but in a form that may be + reused as shell input + + 12/5 + ---- +pcomplete.c + - compgen_compspec: new flag saying whether or not we're running via + the compgen builtin or via programmable completion: set to 0 + every time gen_progcomp_completions runs, set to 1 in + gen_compspec_completions if this_shell_builtin == compgen_builtin + - gen_shell_function_completions: call rl_clear_signals and + rl_set_signals so the shell's signal handlers are active when + running shell functions to generate completions. We try to do it + only when programmable completion, not the compgen builtin, is active. + Idea from Koichi Murase , fixes bug + reported in 9/22 + +sig.c + - sigint_sighandler, termsig_sighandler: since these can now be called + during programmable completion, we need to set the readline signal + event hook if the readline state includes RL_STATE_DISPATCHING or + RL_STATE_COMPLETING, since we can't rely on RL_STATE_SIGHANDLER + being set and we want to call throw_to_top_level here + - throw_to_top_level: if the shell is interactive, before calling + bashline_reset (which zeroes rl_signal_event_hook), call + rl_cleanup_after_signal if we think readline hasn't called it + already + + 12/9 + ---- +configure.ac + - add "LOCAL_LDFLAGS = -rdynamic" for freebsd/openbsd/netbsd. Reported + by Christian Weisgerber + + 12/12 + ----- +subst.c + - parameter_brace_expand_length: handle namerefs with values that are + valid length expansion expressions but invalid identifiers. From + ed7-aspire4925@hotmail.com via https://savannah.gnu.org/support/?110799 + + 12/13 + ----- +subst.c + - extract_heredoc_dolbrace_string: fix off-by-one error after calling + extract_command_subst and extract_process_subst that caused it to + copy one too many parsed characters. Fix for bug reported by + Norbert Lange + + 12/14 + ----- +execute_cmd.c + - execute_cond_node: if a regular expression fails to compile, print + an error message. Report from Emanuele Torre + back on 6/15/2022 + +trap.c + - trap_variable_context -> trap_return_context, initialize from + funcnest + sourcenest instead of variable_context so we handle + shell function execution and `./source', both of which can use + `return'. Idea from Koichi Murase + +builtins/common.c + - get_exitstat: compare trap_return_context against funcnest+sourcenest, + since that's how it's initialized now + +lib/readline/readline.c + - readline_internal_charloop: if we're not using the callback interface, + don't restore _rl_top_level from olevel, since we will just be going + around the loop again and will potentially need to use it multiple + times. Report from Emanuele Torre + + 12/15 + ----- +shell.h + - EX_UTILERROR: new generic special builtin return status to indicate a + POSIX utility error that should cause a non-interactive shell to abort + +execute_cmd.c + - builtin_status: translate EX_UTILERROR to EXECUTION_FAILURE + +builtins/set.def + - unset_builtin: return EX_UTILERROR if posix_utility_error is set; + set it when trying to unset a non-identifier (variable) or a + non-unsettable or readonly variable + + 12/16 + ----- +subst.c + - de_backslash: now takes a second argument with the current quoting + flags + - de_backslash: if the quoting flags include Q_HERE_DOCUMENT and the + shell is in posix mode, remove backslashes quoting double quotes + +subst.h + - de_backslash: update extern declaration + +lib/readline/histexpand.c + - history_expand_internal,get_history_word_specifier,get_subst_pattern, + hist_error,history_find_word,hist_string_extract_single_quoted: + now take const char * string arguments + +lib/readline/mbutil.c + - _rl_get_char_len,_rl_adjust_point,_rl_find_next_mbchar_internal, + _rl_find_next_mbchar,_rl_find_prev_mbchar,_rl_find_prev_mbchar_internal, + _rl_test_nonzero,_rl_find_prev_utf8char,_rl_is_mbchar_matched, + _rl_compare_chars,_rl_char_value: take const char * string arguments + + 12/17 + ----- +builtins/umask.def + - parse_symbolic_umask: add missing POSIX pieces: + o `action' of ugo, meaning to copy portions of initial mask + o multiple `op' specs as part of the action string (`u=r-w') + (resets perm) + o missing perm characters Xst in action string + o default `who' equivalent to `a' instead of fixing up later + + 12/19 + ----- +builtins/type.def + - if -a and -P are both supplied, look in the command hash table but + continue and perform a $PATH search even if the NAME is hashed. + From a report by Adam Vodopjan + +doc/{bash.1,bashref.texi} + - type: update description to fix it to what the code actually does + +builtins/set.def + - set_edit_mode: don't run with_input_from_stdin or with_input_from_stream + unless command_execution_string is NULL. Report from + Harald van Dijk + + 12/20 + ----- +braces.c + - array_concat: add a check for interrupts and terminating signals + into the inner loop + +jobs.c + - without_job_control: set original_pgrp == NO_PID since we don't + want to be messing with the terminal pgrp if we call end_job_control. + From a report from ks1322 ks1322 + + 12/21 + ----- +include/{posixtime.h,systimes.h,shmbutil.h,shtty.h} + - PARAMS: remove + + 12/22 + ----- +builtins/evalfile.c + - _evalfile: add SEVAL_NOOPTIMIZE to the parse_and_execute flags + (maybe overkill, but safer). From a report by + Dan Church and Oguz + +lib/sh/gettimeofday.c + - gettimeofday: added code for _WIN32 version + + 12/27 + ----- +doc/{bash.1,bashref.texi},builtins/printf.def + - specify the valid format characters as a subset of what printf(3) + specifies, note that the %n format specifier takes a variable name + as an argument. Suggestion from Emanuele Torre + + 12/28 + ----- +{xmalloc,variables,unwind_prot,trap,test,subst,sig,siglist,shell,redir, +pcomplete,pathexp,make_cmd,mailcheck,jobs,input,hashcmd,hashlib,general, +flags,findcmd,externs,execute_cmd,error,dispose_cmd,command,bashline, +bashhist,assoc,arrayfunc,array,alias}.h +{version,version2}.c + - PARAMS: remove for ANSI C-ification + +builtins/{getopt,common,bashgetopt}.h +builtins/{mkbuiltins,gen-helpfiles,psize,psize-posix}.c +builtins/{evalstring,bashgetopt,common,evalfile,getopt}.c +builtins{alias,bind,break,cd,command,complete,declare,enable,exit,fc, +fg_bg,getopts,hash,help,history,jobs,kill,mapfile,printf,pushd,read,set, +shopt,source,suspend,trap,type,ulimit,umask,wait}.def + - PARAMS: remove for ANSI C-ification + +lib/malloc/{watch,table,shmalloc,mstats,imalloc}.h +lib/malloc/{malloc,stats,table,trace}.c + - PARAMS: remove for ANSI C-ification + +lib/glob/{glob,strmatch}.h +lib/glob/{glob,glob_loop,gmisc,sm_loop,smatch,strmatch,xmbsrtowcs}.c + - PARAMS: remove for ANSI C-ification + +lib/intl/{eval-plural,plural-exp,loadinfo,hash-string,gettextP}.h, +lib/intl{plural.y,plural.c}, +lib/intl/{finddomain,bindtextdom,dcigettext,l10nflist,loadmsgcat,localealias,plural-exp}.c + - PARAMS: remove for ANSI C-ification + - STATIC -> static + - internal_function -> inline + +lib/sh/{casemod,clock,eaccess,fnxform,fpurge,makepath,mktime,netopen,pathphys,random,shquote,snprintf,spell,strtod,strtoimax,strtoumax,times,timeval,tmpfile,unicode,winsize,zcatfd,zgetline,zmapfd}.c + - PARAMS: remove for ANSI C-ification + +support/{bashversion.c,mkversion.sh,mksignames.c} + - PARAMS: remove for ANSI C-ification + +lib/sh/{clock,strchrnul,getcwd,times,rename,inet_aton,strdup,strerror,strnlen +strpbrk,strtod,strtoimax,strtol,strtoumax,wcsdup,wcsnwidth,wcswidth,strcasecmp, +strcasestr}.c + - C89-style function declarations + +lib/malloc/{alloca,malloc,stats,table,trace,xmalloc}.c + - C89-style function declarations + + 12/29 + ----- +lib/glob/{glob,glob_loop,gmisc,sm_loop,smatch,strmatch,xmbsrtowcs}.c + - C89-style function declarations + +lib/sh/{zcatfd,zgetline,zmapfd,zread,zwrite,winsize,vprint,uconvert,ufuncs, +unicode,utf8}.c +lib/sh/{stringlist,stringvec,strtrans,strvis,timeval,tmpfile}.c +lib/sh/{setlinebuf,shmatch,shmbchar,shquote,shtty,snprintf,spell}.c +lib/sh/{random,pathcanon,pathphys,oslib,netconn,netopen}.c +lib/sh/{mailstat,makepath,mbscasecmp,mbschr,mbscmp,mktime}.c +lib/sh/{input_avail,itos,getenv,fmtulong,fnxform,eaccess,dprintf,casemod,clktck}.c + - C89-style function declarations + +examples/loadables/{accept,asort,basename,bcat,cat,csv,cut,dirname,dsv}.c +examples/loadables/{fdflags,finfo,head,hello,id,lcut,ln}.c +examples/loadables/{mkdir,mkfifo,mktemp,mypid,necho,pathchk}.c +examples/loadables/{print,printenv,push,realpath,rm,rmdir,seq}.c +examples/loadables/{setpgid,stat,strftime,sync,tee,template,truefalse,tty}.c +examples/loadables/{uname,unlink,whoami}.c + - C89-style function declarations + +xmalloc.c, array2.c, list.c, dispose_cmd.c, copy_cmd.c, bracecomp.c, mksyntax.c + - PARAMS: remove for ANSI C-ification + - C89-style function declarations + + 12/30 + ----- +hashlib.c,assoc.c,input.c,hashcmd.c,alias.c,alias.h,array.c,flags.c,pcomplib.c, +pcomplib.h,locale.c +variables.c,arrayfunc.c,bashhist.c,bashline.c,error.c,pathexp.c,nojobs.c, +stringlib.c,eval.c,findcmd.c,mailcheck.c,make_cmd.c,shell.c,print_cmd.c, +general.c,expr.c + - PARAMS: remove for ANSI C-ification + - C89-style function declarations + - add `const' and `inline' where it makes sense + + 12/31 + ----- +test.c,execute_cmd.c,parse.y,pcomplete.c,trap.c,subst.c,braces.c,jobs.c,sig.c +builtins/{evalstring.c,gen-helpfiles.c,mkbuiltins.c} +builtins/{alias.def,bind.def,break.def,builtin.def,caller.def,cd.def,colon.def} +builtins/{command.def,complete.def,declare.def,echo.def,enable.def,eval.def} +builtins/{exec.def,exit.def,fc.def,fg_bg.def,hash.def,help.def,history.def} +builtins/{jobs.def,kill.def,let.def,mapfile.def,printf.def,pushd.def,read.def} +builtins/{return.def,set.def,setattr.def,shift.def,shopt.def,source.def} +builtins/{suspend.def,test.def,times.def,trap.def,type.def,ulimit.def} +builtins/{umask.def,wait.def} + - PARAMS: remove for ANSI C-ification + - C89-style function declarations + - add `const' and `inline' where it makes sense + + 1/2/2023 + -------- +lib/sh/{stringvec.c,inet_aton.c,strnlen.c,spell.c,netopen.c,stringlist.c} +lib/sh/{strtrans.c,tmpfile.c,uconvert.c,zcatfd.c} +builtins/{common.c,common.h} +mailcheck.c,bashline.c,pathexp.c,stringlib.c,locale.c,pcomplete.c,redir.c +test.c,trap.c,variables.c,bashhist.c,expr.c,arrayfunc.c,assoc.c,variables.c +subst.c,findcmd.c +arrayfunc.h,variables.h,findcmd.h,bashline.h,trap.h,pathexp.h,externs.h, +pcomplete.h,bashhist.h,assoc.h,general.h,subst.h + - more `const' changes, remove `register' + + 1/3 + --- +parse.y + - more `const' changes, remove `register' + +variables.h + - VARLIST: list_len and list_size now size_t + +variables.c + - vlist_alloc: take size_t parameter, changed callers + - vlist_realloc: take size_t parameter, changed callers + +lib/sh/stringvec.c,externs.h + - functions that take int size params now take size_t + - strvec_len: returns size_t + +lib/sh/stringlist.c,externs.h + - STRINGLIST: list_size and list_len now size_t + - functions that take int size params now take size_t + +variables.c,bashline.c,builtins/bind.def + - change strvec_ int parameters to size_t where it makes sense + - change strlist_ int parameters to size_t where it makes sense + +builtins/shopt.def + - reset_shopt_options: set glob_always_skip_dot_and_dotdot to 1, + since that's the current default in lib/glob/glob.c + + 1/4 + --- +execute_cmd.c,parse.y,general.c,make_cmd.c,print_cmd.c,variables.c,expr.c +jobs.c,subst.c,input.c,unwind_prot.c,pathexp.c,pathexp.h,alias.c,bashline.c +bashhist.c,lib/sh/shquote.c,externs.h,stringlib.c,locale.c,findcmd.c +builtins/common.c,builtins/declare.def,builtins/enable.def,builtins/fc.def +lib/sh/zmapfd.c,builtins/help.def,builtins/mapfile.def,builtins/read.def +builtins/shopt.def,lib/glob/glob.c,lib/glob/smatch.c,lib/glob/sm_loop.c +lib/glob/xmbsrtowcs.c,lib/glob/gmisc.c,lib/glob/gm_loop.c +lib/sh/getenv.c,lib/sh/makepath.c,lib/sh/pathphys.c,lib/sh/tmpfile.c +lib/sh/stringlib.c,lib/sh/spell.c,lib/sh/strtrans.c,lib/sh/zgetline.c +lib/sh/mbscasecmp.c,lib/sh/utf8.c +lib/readline/readline.c,lib/readline/rlprivate.h,lib/readline/vi_mode.c +lib/readline/complete.c,lib/readline/bind.c,lib/readline/isearch.c +lib/readline/util.c,lib/readline/kill.c,lib/readline/macro.c +lib/readline/text.c,lib/readline/histexpand.c,lib/readline/histfile.c +lib/readline/mbutil.c,lib/tilde/tilde.c + - size_t changes + - remove some unused variables + - remove `register' + + 1/5 + --- +builtins/getopt.c + - sh_getopt_restore_state: make sure argv[sh_curopt] is non-null before + using it + +parse.y + - CHECK_FOR_RESERVED_WORD: make sure to set word_top appropriately if + the last token was IF, WHILE, or UNTIL, since these tokens can follow + those reserved words + +Makefile.in + - ubsan: new target, to build with gcc/clang UBSan undefined behavior + sanitizer + + 1/6 + --- +execute_cmd.[ch],locale.c,parse.y,expr.c,bracecomp.c,bashline.c,externs.h +stringlib.c,general.[ch] +builtins/{subst.c,array.c,echo.def,printf.def,enable.def,help.def,set.def} +lib/sh/{strtrans.c,stringvec.c,shquote.c} +lib/glob/sm_loop.c +lib/readline/{vi_mode.c,histfile.c,funmap.c,complete.c,display.c,bind.c,isearch.c} +lib/tilde/tilde.c + - final code cleanups for ANSI C and lint/ubsan/asan runs + + 1/7 + --- +lib/readline/complete.c + - rl_complete_internal: when computing nontrivial_lcd and the length + of the text from the line buffer, dequote the text from the line + buffer before comparing it against the common prefix of the matches + (matches[0]), so we don't get spurious mismatches if the quoted text + from the line is longer than the unquoted match. Report from + Martin Castillo + +input.[ch] + - get_buffered_stream(fd): new function, return the BUFFERED_STREAM * + corresponding to file descriptor FD, if it exists + + 1/8 + --- +parse.y + - shell_getc: if yy_getc returns EOF but the buffered stream input + indicates an error state, set shell_input_line_terminator to + READERR. Currently treated the same as EOF. + + 1/10 + ---- +lib/sh/random.c + - intrand32: use % operator instead of (mathematically equivalent) + subtraction and multiplication, which can cause signed 32-bit + overflow. Report from Sam James + +lib/readline/input.c + - rl_getc: if the application hasn't defined a signal event handler, + and readline is in callback mode, make sure SIGINT breaks out of + operations like incremental and non-incremental searches and digit + arguments by calling _rl_abort_internal, since the callback code + expects the various contexts that rl_callback_sigcleanup() resets + to be valid + - rl_getc: if there is a pending signal when we enter the while loop + in callback mode, handle it in the same way we would if a signal + arrived while we were waiting in select/pselect. That forces + callback mode to call _rl_abort_internal in the right place. + From a report from Andrew Burgess + + 1/13 + ---- +trap.c + - SIG_ASYNCSIG: new value for sigmodes; means that the signal is + ignored because an async command is being executed + - set_signal: if the original signal disposition is SIG_IGN only + return if SIG_ASYNCSIG isn't set. This implements POSIX interp 751 + for setting a trap + - ignore_signal: if we're ignoring a signal that already has SIG_IGNORED + set, make sure we set SIG_TRAPPED in case of SIG_ASYNCSIG (POSIX + interp 751) + - reset_signal,restore_signal: if we want to reset or restore a signal + that has SIG_ASYNCSIG set, make sure we reset to SIG_DFL if the + signal is trapped to maintain POSIX semantics + - set_signal_async_ignored: new function to set original_signals to + SIG_IGN and set the SIG_IGNORED and SIG_ASYNCSIG sigmode flags; used + by setup_async_signals + - signal_is_async_ignored: return true if the SIG argument is being + ignored because it's part of an async list + +trap.h + - set_signal_async_ignored,signal_is_async_ignored: extern declarations + +sig.c + - initialize_terminating_signals: if a signal is ignored because it's + part of an async list, don't bother trying to initialize or set the + hard ignored flag + +execute_cmd.c + - execute_simple_command: if we're executing a builtin or function + asynchronously, call reset_terminating_signals like we do in + execute_in_subshell() + - execute_subshell_builtin_or_function: only call set_sigint_handler + if async is 0, so we don't undo the work done by setup_async_signals. + If the old handler is SIG_IGN and the signal has SIG_ASYNCSIG set + and isn't trapped, restore the old handler + - setup_async_signals: call set_signal_async_ignored to set the right + flags + + 1/16 + ---- +parse.y + - read_token_word: if we're in posix mode, and we find a reserved word + before checking a token for aliases, turn off the `check next word + for aliases' flag (PST_ALEXPNEXT). This is for compatibility with + other shells. From a report by + - shell_getc: make sure the shell is reading a buffered stream before + checking the default buffered stream for errors if yy_getc returns 0 + + 1/17 + ---- +subst.c + - split_at_delims: if the cursor is at whitespace just preceding a + word, and we're doing this for completion (e.g., to build COMP_WORDS), + force the creation of an empty word and set the current word to it. + This is a change from previous behavior, but a useful one: it makes + COMP_WORDS[COMP_CWORD] and $2 to a completion function consistent + and the same as the word readline wants to complete. From a report + from Naim Favier back in 6/2022 + +parse.y + - read_token: turn off PST_ALEXPNEXT if we read a shell metacharacter: + we will expand aliases anyway if the token puts the shell in a + command word position and we took pains to turn it off for + redirection tokens; remove special cases that turned it off + - pop_string: don't turn off PST_ALEXPNEXT if it's on; this is what + prevents it from being enabled if an alias expansion of more than + two aliases ends with a space. Fixes issue reported by + + + 1/18 + ---- +jobs.c + - wait_for: if we are reaping a background job, don't bother trying to + give the terminal back to shell_pgrp -- we never set the terminal's + pgrp to that job in the first place. Fixes issue reported by + Steffen Nurpmeso + + 1/19 + ---- +lib/readline/{histexpand.c,history.h} + - history_expand: first argument is now `const char *'. Request from + Simon Marchi + +lib/readline/doc/{history.3,hstech.texi} + - history_expansion: change description to note new const first arg + + 1/21 + ---- +lib/readline/input.c + - rl_gather_tyi: move call to rl_input_available_hook to the top, + giving it first shot. There's still no way for it to set chars_avail. + Conditionalize the rest of the input methods based on whether the + result == -1. + +lib/readline/rl_private.h + - move the decision making about RL_TIMEOUT_USE_SELECT/RL_TIMEOUT_USE_SIGALRM + here from input.c + + 1/23 + ---- +trap.c + - restore_default_signal: if we have a signal that's not trapped, but + is a signal that is set to SIG_ASYNCSIG, POSIX interp 751 requires + the shell to allow it to be reset to the default, even though it + wasn't already trapped + +subst.c + - do_assignment_internal: don't allocate new memory for NAME, just + modify and restore it in place + + 1/25 + ---- +lib/readline/histfile.c + - history_write_slow: a fallback function that uses stdio to write the + history list to a supplied file descriptor + - history_do_write: call history_write_slow if ftruncate/mmap/malloc + fail; hope the simpler approach works + + 1/27 + ---- +general.[ch] + - valid_function_name: new function, returns non-zero if the name + can be used as a function name without the `function' prefix + +print_cmd.c + - named_function_string,print_function_def: use valid_function_name so + the rules about when to use the `function' reserved word are + consistent + +builtins/trap.def + - new option -P, which prints only the action associated with each + signal spec argument + +doc/{bash.1,bashref.texi} + - trap: document new -P option, add note that trap -p or trap -P in a + subshell can print the parent's traps + + 1/28 + ---- +parse.y + - shell_getc: make sure references to shell_input_line_property are + protected by #ifdef HANDLE_MULTIBYTE. From + https://savannah.gnu.org/patch/?10309 + +print_cmd.c + - named_function_string,print_function_def: don't copy the function + COMMAND * before printing it as text; unwind-protect any redirects + attached to the function body + +parse.y + - PST_CMDBLTIN: new parser state, means the previous token word was + `command' in a command position + - read_token_word: in posix mode, "command" followed by a declaration + utility preserves the declaration utility status of the following + word, so we mark that state and then check a word for being an + assignment builtin if in that state on the next call. This makes + compound assignments to builtins that accept them (e.g., `declare') + work as if `command' were not present. This is a POSIX issue 8 + requirement + - read_token: turn off PST_CMDBLTIN state as appropriate + +subst.c + - use locale_mb_cur_max instead of MB_CUR_MAX consistently + + 2/1 + --- +builtins/printf.def + - printf_builtin: %q and %Q use the `alternate form' flag to force + single quoting instead of backslash quoting. $'...' is still + preferred if there are characters that require it + - getwidestr, getwidechar: functions to take a possibly multibyte + character string and convert to a wide character string or a wide + character, respectively + - convwidestr, convwidechar: functions to take a wide character string + or single character, apply any precision, convert back to a multibyte + character string, and return the result for printing + - printf_builtin: consistently print an error message if printstr() + returns < 0, since it will only do that if ferror(stdout) is true; + let the PRETURN macro do that if appropriate, so we don't duplicate + code + + 2/2 + --- +builtins/printf.def + - printwidestr: wide-character version of printstr; understands + fieldwidth and precision as characters instead of bytes + - printf_builtin: interpret %ls and %lc as referring to wide strings + and characters, respectively; use printwidestr to print the wide- + character string obtained from the (presumably multibyte) argument. + Fieldwidth and precision are characters, not bytes + + 2/3 + --- +builtins/set.def + - unset_builtin: since tokenize_array_reference modifies its NAME + argument, we need to restore the original word if there is no + array variable found with that name, so we can go ahead and try to + unset a function with that wonky name. Inspired by a report from + Emanuele Torre + +parse.y + - read_token_word: don't set the W_HASDOLLAR flag in the returned WORD + for <(command) and >(command). That way they can be used in function + names. + +execute_cmd.c + - execute_simple_command: if in posix mode, don't perform function + lookup for command names that contain a slash + +builtins/enable.def + - dyn_load_builtins: don't allow dynamically loaded builtins to have + slashes in their name + + 2/4 + --- +general.c + - valid_function_word: new function, used to check whether a word can + be used as a function name. Replaces call to check_identifier(); + incorporates POSIX interp 383 check for special builtin so we can + move it out of execute_intern_function(). + - valid_function_name: use the FLAGS argument instead of POSIXLY_CORRECT; + only reject reserved words if FLAGS&1 + +execute_cmd.c + - execute_intern_function: call valid_function_word() instead of + check_identifier(); remove check for special builtin that + valid_function_word performs + +print_cmd.c + - print_function_def,named_function_string: pass POSIXLY_CORRECT to + valid_function_name as the FLAGS argument + + 2/6 + --- +subst.c + - expand_subscript_string: don't set W_NOTILDE in td.flags so we + perform `normal' tilde expansion (expansion at the start of the + word) on the array subscript + - expand_oneword,expand_compound_assignment_word: change second arg to + ATYPE, which better reflects its use + +arrayfunc.c + - assign_assoc_from_kvlist,assign_compound_array_list,expand_and_quote_assoc_word: + use expand_assignment_string_to_string instead of expand_subscript_string + for the rhs of the assignment or the second word in the kvpair to + be more consistent with how assignment statements behave (e.g., + tilde expansion). Fixes issue reported by maroloccio@gmail.com + + 2/7 + --- +parse.y + - discard_until: now returns the last character read. If we get an + EOF while processing a comment, return EOF (rarely happens; + shell_getc returns EOF only under certain circumstances) + - read_token: if discard_until returns EOF, return yacc_EOF + +input.h + - bclearerror: new macro, clears the B_ERROR flag in the buffered + stream BP + +input.c + - b_fill_buffer: try making errors `sticky': if the B_ERROR flag is + set for the buffered stream, return EOF immediately. This is similar + to what stdio does + +builtins/fc.def + - fc_builtin: in posix mode, if there are extra arguments supplied to + -s (e.g. pat=rep first last), throw an error + +doc/{bash.1,bashref.texi} + - printf: document new altform for %q/%Q and %ls/%lc + + 2/8 + --- +bashline.c + - set_up_new_line: if the new line doesn't change rl_line_buffer, + just return right away without changing rl_point. Affects + alias-expand-line, history-expand-line, and history-and-alias-expand-line. + Inspired by a report from + Addison Brendtro + +builtins/declare.def + - declare_internal: make multiple calls to `local -' at the same + context have no effect after the first one. That way we don't keep + overwriting the saved option set. Report and fix from + Emanuele Torre + + 2/10 + ---- +execute_cmd.[ch] + - bind_lastarg: now a public function + +parse.y + - execute_variable_command: call bind_lastarg instead of bind_variable + to avoid exporting $_ if allexport is set. Fix from + Emanuele Torre + - history_delimiting_chars: if we're parsing some kind of delimited + construct that's *not* a quoted string, don't bother adding an extra + newline to the history if the current history entry already ends in + a newline. From https://savannah.gnu.org/support/?110838 via + Ganapathi Kamath + + 2/13 + ---- +bashline.c + - set_up_new_line: add some more heuristics to try and usefully + position rl_point + + 2/16 + ---- +lib/readline/complete.c + - complete_fncmp: fix for case mapping `-' and `_' if the bytes do not + form a valid multibyte character + +lib/readline/util.c + - new functions: _rl_strcaseeqn, like strcasencmp but with a flag to + handle character mapping (-_) like completion-map-case wants, and + _rl_charcasecmp, to do the same thing for two characters. + Inspired by a patch from Brennan Vincent + +lib/readline/mbutil.c + - new functions: _rl_mb_strcaseeqn and _rl_mb_charcasecmp, multibyte + versions of the above + Inspired by a patch from Brennan Vincent + +lib/readline/{rlprivate.h,rlmbutil.h} + - extern declarations for the above functions + +lib/readline/complete.c + - complete_fncmp: use _rl_mb_strcaseeqn and _rl_strcaseeqn as + appropriate, remove duplicated inline code + Inspired by a patch from Brennan Vincent + +lib/readline/{isearch.c,rlprivate.h} + - _rl_search_case_fold: new variable, will be used to indicate case- + insensitive incremental and non-incremental searches + +lib/readline/bind.c + - search-ignore-case: new bindable variable, tied to _rl_search_case_fold + Inspired by a patch from Brennan Vincent + +lib/sh/mbsncmp.c + - mbsncmp(3) replacement + +lib/readline/isearch.c + - _rl_isearch_dispatch: honor `search-ignore-case' variable and perform + case-insensitive incremental searches if it's set + Inspired by a patch from Brennan Vincent + +lib/readline/histlib.h + - CASEFOLD_SEARCH: new flag for history searching, means to search + strings case-insensitively + +lib/readline/histsearch.c + - history_search_internal: anchored searches honor CASEFOLD_SEARCH + +lib/readline/histsearch.c + - history_search_internal: searches now honor CASEFOLD_SEARCH + - _hs_history_search: new function, just external interface to + history_search_internal, allows the rest of the library to specify + search flags + +lib/readline/histlib.h + - _hs_history_search: extern declaration + +lib/readline/search.c + - noninc_search_from_pos: use _hs_history_search, add CASEFOLD_SEARCH + to flags if _rl_search_case_fold is non-zero + +doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} + - search-ignore-case: document new bindable variable + + 2/17 + ---- +config-top.h + - PATSUB_REPLACE_DEFAULT: macro set to 1 or 0 to set the default value + of `patsub_replacement'. Can be overridden by -DPATSUB_REPLACE_DEFAULT=0 + in the `make' command + +builtins/shopt.def + - reset_shopt_options: reset patsub_replacement to PATSUB_REPLACE_DEFAULT + +subst.c + - patsub_replacement: initialize to PATSUB_REPLACE_DEFAULT + +parse.y + - shell_getc: only call clearerr(stdin) when yy_stream_get returns EOF + if the shell is currently interactive (interactive != 0) + - shell_getc: if the shell is not interactive (interactive_shell == 0) + and using stdio to read the script (bash_input.type == st_stream), + set shell_input_line_terminator to READERR if ferror(stdin) is true + after yy_stream_get returns EOF + + 2/20 + ---- +doc/{bash.1,bashref.texi} + - update aliases description based on a bug-bash discussion + - update description of word splitting behavior when IFS is unset + +builtins/evalfile.c + - _evalfile: if reading the entire file doesn't return the same + number of bytes as requested (the file size), treat this as a read + error + + 2/21 + ---- +parse.y + - yylex: if read_token returns < 0, return YYEOF if EOF_Reached = 1. + Don't return yacc_EOF because that allows commands to be executed. + - grammar: add a production to handle YYEOF, treating it the same as + yacc_EOF. Based on a report from + Eduardo A. Bustamante López + +jobs.c + - wait_for: if we're checking for window size changes, allow checks + during trap commands while readline is active or `bind -x' command + execution. Fix from Koichi Murase + + 2/22 + ---- +jobs.c + - wait_for: check for window size changes during programmable completion + + 2/23 + ---- +execute_cmd.c,input.c,jobs.c,nojobs.c,parse.y,redir.c,shell.c +builtins/{exec.def,read.def} +input.h + - BUFFERED_INPUT: preprocessor #define is gone, this code is now + unconditional + + 2/24 + ---- +builtins/declare.def + - declare_internal: set the att_propagate flag on a variable that is + marked as att_tempvar only if it's *not* marked att_local. The + effect is that local variables with the same name as variables in + the temporary environment are not propagated to the previous scope. + From a report by Voldemar Lazarev + that prompted a bug-bash discussion + +builtins/setattr.def + - set_var_attribute: don't set local variables for which we are setting + export or readonly to propagate back to the previous context, but + make sure we preserve posix semantics + +parse.y + - read_token_word: if we're parsing the words of a compound assignment + (parser_state & PST_COMPASSIGN), and we have a valid assignment + statement as a word ([sub]=value), set W_NOBRACE in the word so we + don't try and perform brace expansion on it. This makes ( [sub]=word ) + closer to name[sub]=word. + From a report by Ilkka Virta back in July, 2020: + https://lists.gnu.org/archive/html/bug-bash/2020-07/msg00133.html + + 2/27 + ---- +lib/readline/display.c + - rl_redisplay: if HANDLE_MULTIBYTE is defined, do the special META_CHAR + handling if wc_bytes == wc_width == 1 + +execute_cmd.c + - eval_arith_for_expr: make sure we don't call make_word with a NULL + string if expand_arith_string returns NULL. Report from + F G + +arrayfunc.c + - assign_assoc_from_kvlist: added code, currently disabled, to perform + all expansions, including word splitting, on the kv-pair word list + + 2/28 + ---- +lib/readline/search.c + - rl_history_search_reinit: change check against history_string_size + to account for history_string_size now being a size_t. Report and + fix from Grisha Levit + + 3/2 + --- +lib/readline/history.c + - _hs_search_history_data: search the history list for an entry with + `data' matching the argument; return the index + - _hs_replace_history_data: search backwards through the history list + from the end + +lib/readline/histlib.h + - _hs_search_history_data: extern declaration + +lib/readline/search.c + - make_history_line_current: make sure rl_undo_list doesn't appear in + any history entries (it should be a private search string undo list) + before freeing it + +lib/readline/misc.c + - _rl_free_saved_history_line: make sure the undo list in + _rl_saved_line_for_history isn't rl_undo_list and doesn't appear in + any history list entries as `data' before freeing it. Fixes core + dump after SIGINT reported by Grisha Levit + +parse.y,print_cmd.c + - changes for size_t when computing new amount for xrealloc + + 3/3 + --- +parse.y + - set_word_top: new inline function to check and set word_top; called + from the appropriate places + - parse_dparen: call set_word_top before parsing an arith command or + nested subshell. Fixes underflow issue reported by + Grisha Levit + +examples/loadables/kv.c + - kv: new loadable builtin, reads key-value pairs from stdin and assigns + them to an associative array + + 3/7 + --- +builtins/trap.def + - trap_builtin: if trying to restore SIGQUIT to its default disposition, + and the shell is in posix mode, set to SIG_DFL if the shell is + running as an async command and signal_is_async_ignored (SIGQUIT) is + true. Posix conformance issue 751 + + 3/8 + --- +builtins/alias.def + - print_alias: now returns int. Check for write errors using sh_chkwrite + and return EXECUTION_FAILURE if it fails + - alias_builtin: if print_alias returns EXECUTION_FAILURE, return + EXECUTION_FAILURE immediately (write error). POSIX test conformance + + 3/9 + --- +builtins/cd.def + - change_to_directory: if we're not in physical mode and are in posix + mode, add step 9 of the posix cd algorithm, which essentially tries + the pathname the user supplied if it's shorter than PATH_MAX and the + length of the canonicalized pathname is longer than PATH_MAX. This + is basically what default bash mode does without the length checks. + POSIX test conformance. + +subst.c + - strip_trailing_ifs_whitespace: use ifs_whitespace(*s) instead of + spctabnl(*s) like word splitting and get_word_from_string. POSIX + test conformance + +jobs.c + - wait_for: tweak change from 1/18 to make sure a J_ASYNC job isn't in + the foreground (J_FOREGROUND) as it would be if it had been continued + in the foreground with `fg'; if it is, we want to give the terminal + back to shell_pgrp + + 3/10 + ---- +input.c + - fd_berror: returns true if the file descriptor passed as an arg + corresponds to a buffered stream with an error condition + +parse.y + - shell_getc: use fd_berror instead of inline code + - shell_getc: if yy_getc returns EOF, immediately set line[0] to NULL + and set shell_input_line_terminator to READERR. Then exit immediately + with status 128 if index == 0, line[index] == NULL, and READERR. + Posix interp 1629 + +config-top.h + - FATAL_READERROR: now defined to 1 by default + +lib/readline/display.c + - rl_expand_prompt: allocate an empty string for local_prompt if prompt + is the NULL or empty string. Fixes seg fault with rl_message and + empty prompt reported by Grisha Levit + +lib/readline/histexpand.c + - history_expand: if hist_extract_single_quoted returns an index at or + past the end of the string, correct the index and break the loop, + which will cause a return. Report and fix from + Grisha Levit + + 3/13 + ---- +lib/readline/vi_mode.c + - rl_domove_motion_callback: set the MOVE_FAILED flag in the context M + if rl_dispatch returns non-zero and other movement-command-specific + conditions are met. Right now, an unsuccessful `f' or `F' command + is failure. + - _rl_vi_domove_motion_cleanup: if the command is `c' or `C', we don't + enter insert mode if the MOVE_FAILED flag is set in the context M. + This is how standalone vi works. + +lib/readline/kill.c + - rl_unix_filename_rubout: add some checks for rl_point > 0 before + looking at rl_line_buffer[rl_point - 1]. Report and fix from + Grisha Levit + +lib/readline/isearch.c + - _rl_isearch_dispatch: reset cxt->sline_index to 0 if it's past the + end of the history string (sline_len). Fixes asan bug reported by + Grisha Levit + +lib/readline/histexpand.c + - history_tokenize_word: don't increment the string index past the + NULL if the line ends in a backslash.Fixes asan bug reported by + Grisha Levit + +lib/readline/vi_mode.c + - rl_vi_yank_to,rl_vi_change_to,rl_vi_delete_to: if these are called + with an existing valid vimvcxt, save it and allocate a new one for + the current function call to use, then restore it before returning. + This prevents referencing vimvcxt after freeing it in the case that + these functions call each other recursively (e.g., y1y1, c1d1, etc.). + Fixes asan bug reported by Grisha Levit + + 3/14 + ---- +bashhist.c + - bash_add_history: make sure curlen is large enough before checking + curlen - 1 and curlen - 2, otherwise you can get buffer underflow. + Fixes asan bug reported by Grisha Levit + +bashline.c + - bash_spell_correct_shellword: don't bother trying to correct empty + words. Fixes asan bug reported by Grisha Levit + +lib/sh/shquote.c + - sh_mkdoublequoted: make sure to allocate enough memory for the + pathological case: where every character in the string needs to be + backslash-escaped because it's special within double quotes. + Fixes asan bug reported by Grisha Levit + +doc/{bash.1,bashref.texi} + - here documents: make sure the summary specifies the here-document is + terminated by `delimiter'; specify what the delimiter is if the word + is not quoted. Prompted by a help-bash post from + goncholden + + 3/15 + ---- +doc/bash.1,lib/readline/doc/rluser.texi + - shell-expand-line: enumerate the specific expansions performed. + From a request by Alex Bochannek + +findcmd.c + - path_value: new function, returns normalized version of $PATH. Takes + a single argument saying whether or not to look in the temporary + environment first. Normalizes null $PATH (PATH=) into ".". From a + bug-bash discussion started by Moshe Looks + - _find_user_command_in_path: use path_value() + - user_command_matches: use path_value() + - search_for_command: if PATH[0] == 0, set PATH = "." like path_value(). + This has the side effect of calling command_not_found_handle when + PATH is the empty string and the command isn't in the current + directory + - search_for_command: if path == 0, but we found an executable in the + current directory, make sure to set dot_found_in_search before adding + it to the command hash table + +findcmd.h + - path_value: extern declaration + +bashline.c + - command_word_completion_function: use path_value() + +builtins/enable.def + - dyn_load_builtin: use path_value for BASH_LOADABLES_PATH; it's cleaner + though it doesn't change the behavior + + 3/17 + ---- +bashline.c + - bashline_reset: reset rl_filename_quoting_function, since there is a + SIGINT code path where it could remain reset by glob completion. + Reported by Grisha Levit + - command_word_completion_function,command_subst_completion_function, + glob_complete_word: set some static variables to NULL + after freeing them so they don't potentially get freed twice after + a SIGINT during completion + Reported by Grisha Levit + +parse.y + - read_token_word: when deciding how to quote translated strings, don't + free ttok before comparing it to ttrans + Reported by Grisha Levit + - parse_matched_pair: same thing for freeing nestret + - read_token: if we return a newline, make sure we call set_word_top() + if necessary. + Fixes underflow reported by Grisha Levit + +lib/glob/sm_loop.c + - EXTMATCH: don't bother with FNM_PATHNAME checks; this function isn't + called with a pathname. + Fixes underflow reported by Grisha Levit + +lib/readline/misc.c + - rl_maybe_replace_line: if we replace a history entry's data with + rl_undo_list, we need to set rl_undo_list to 0, since we should not + have rl_undo_list pointing to something from a history entry + Fixes asan error reported by Grisha Levit + + 3/20 + ---- +lib/readline/histexpand.c + - postproc_subst_rhs: fix off-by-one error when reallocating new string + for case where we're *not* substituting for `&' + Fixes asan error reported by Grisha Levit + +jobs.c + - terminate_current_pipeline: add a SIGKILL call in there in case the + SIGTERM doesn't work + - terminate_current_pipeline: add a version that works when job control + isn't enabled (pipeline_pgrp == shell_pgrp) + +subst.c + - skip_to_delim: pass completeflag (SX_COMPLETE) to extract_dollar_brace_string + in case it includes a command substitution, since we want to inhibit + error messages in this case + +parse.y + - no_semi_successors: add DOLPAREN to list since something like $(\n + shouldn't have a semicolon added there. + From a report by Grisha Levit + + 3/21 + ---- +pcomplete.c + - gen_globpat_matches: set noglob_dot_filenames here since we're not + calling shell_glob_filename to do it + From a report by Grisha Levit + + 3/22 + ---- +lib/readline/misc.c + - rl_maybe_replace_line: if we're replacing a history entry with the + current line buffer and undo list, then zero out any undo list in + _rl_saved_line_for_history, since we're not going to use it any more + Fixes asan error reported by Grisha Levit + +lib/readline/undo.c + - rl_free_undo_list: if we're freeing rl_undo_list, it can't be a + valid value for data in _rl_saved_line_for_history + Fixes asan error reported by Grisha Levit + +lib/readline/complete.c + - display_matches: don't call rl_display_match_list if we received a + signal during get_y_or_n and didn't jump out for some reason + From a report by Grisha Levit + - rl_display_match_list: return if we received a signal during + _rl_internal_pager (via get_y_or_n) and didn't jump out + From a report by Grisha Levit + + 3/23 + ---- +lib/readline/history.c + - history_truncate_file: don't bother trying to read the existing + history file if we're just truncating it to 0 lines + + 3/24 + ---- +lib/readline/history.c + - history_truncate_file: fix off-by-one error that resulted in the + timestamp associated with the first history entry not being written + to the truncated history file + From a report by Grisha Levit + +parse.y + - decode_prompt_string: do something rational if localtime() returns + NULL (extraordinarily rare) + From a report by Paul Eggert + +examples/loadables/stat.c + - stattime: ditto + +examples/loadables/strftime.c + - strftime_builtin: ditto + +lib/readline/examples/histexamp.c + - main: ditto + +include/posixtime.h + - getnow(): new inline function, calls gettimeofday and returns tv_sec; + replacement for time(0). From Paul Eggert + +general.h + - NOW: use a call to getnow() to standardize on gettimeofday for time + information + +lib/readline/history.c + - include #posixtime.h for getnow() + - hist_inittime: use getnow() instead of calling time(0) + +parse.y + - posixtime.h: include instead of + - decode_prompt_string: use getnow() instead of calling time(0) + + 3/27 + ---- +parse.y + - count_all_jobs: add extern definition if JOB_CONTROL is not defined. + From Emanuele Torre + +bashhist.c + - bash_add_history: make sure the current history line is not empty + before checking what ended it. + From a report by Grisha Levit + +lib/readline/histexpand.c + - history_tokenize_word: break out of loop for incomplete command and + process substitution or extended globbing patterns + From a report by Grisha Levit + +bashline.c + - hostnames_matching: fix size_t issue when checking whether to realloc + From a report by Grisha Levit + +lib/sh/random.c + - genseed: use uintptr_t instead of u_bits32_t to silence compiler + warnings. From Paul Eggert + +aclocal.m4 +array2.c +builtins/mkbuiltins.c,builtins/psize-posix.c,version.c +builtins/getopts.def +lib/readline/text.c,lib/readline/bind.c +support/recho.c,support/mksignames.c,support/zecho.c,support/xcase.c +support/printenv.c,support/signames.c,support/bashversion.c +support/memtest.c,support/endian.c +lib/glob/gm_loop.c + - some cleanups for function prototypes and other stdc requirements + From Paul Eggert + +lib/readline/doc/{rltech.texi,hstech.texi} + - add prototypes and stdc requirements to the examples + +builtins/complete.def + - compgen_builtin: save and restore readline variables affecting how + filename completions are treated in case someone uses compgen in + the foreground. + From a report by Grisha Levit + + 3/28 + ---- +aclocal.m4 +builtins/enable.def,builtins/gen-helpfiles.c,builtins/help.def,builtins/printf.def +general.h,hashlib.h +include/ansi_stdlib.h,include/ocache.h +lib/glob/collsyms.h,lib/glob/glob.c +lib/readline/history.h,lib/readline/xmalloc.h +xmalloc.c,xmalloc.h +lib/sh/strtrans.c +lib/tilde/tilde.c +mksyntax.c +support/endian.c + - don't bother with __STDC__ if we are just using C89 features like + const, function prototypes, etc. + From Paul Eggert + +externs.h + - prototype the list functions that take GENERIC_LIST * + From Paul Eggert + +builtins/common.c,examples/loadables/getconf.c +execute_cmd.c,pcomplete.c,subst.c +lib/sh/stringlist.c,lib/sh/stringvec.c + - changes and casts now that the generic list functions are prototyped + From Paul Eggert + + 3/29 + ---- +aclocal.m4,configure.ac +builtins/common.c,builtins/mkbuiltins.c,builtins/printf.def +include/memalloc.h,include/stdc.h +general.h,jobs.h +pcomplete.c,print_cmd.c +m4/iconv.m4 +lib/readline/bind.c,lib/readline/complete.c,lib/readline/display.c +lib/readline/funmap.c,lib/readline/util.c,lib/readline/parens.c +lib/readline/histlib.h +lib/readline/readline.h,lib/readline/rldefs.h,lib/readline/rlstdc.h,lib/readline/rlprivate.h +lib/sh/dprintf.c,lib/sh/snprintf.c,lib/sh/vprintf.c +lib/malloc/shmalloc.h,lib/malloc/imalloc.h,lib/malloc/xmalloc.c +lib/termcap/termcap.h + - stdarg: since we now assume C89 for prototypes at least, always + prefer stdarg to old-style varargs + - SH_VA_START: now use plain old va_start + - don't bother with extern declarations for standard C89 functions + From Paul Eggert + +config-bot.h + - PREFER_STDARG: remove + +builtins/mkbuiltins.c +execute_cmd.c,unwind_prot.c +unwind_prot.h + - start on ANSI/ISO C changes for the unwind-protect framework + - introduce new unwind-protect function pointer type to replace + Function + From Paul Eggert + + 3/30 + ---- +builtins/command.def,builtins/fc.def,builtins/read.def,builtins/source.def +builtins/evalfile.c,builtins/evalstring.c +dispose_cmd.c,execute_cmd.c,pcomplete.c,print_cmd.c,subst.c,jobs.c,variables.c +dispose_cmd.h,general.h,trap.h +unwind_prot.c,unwind_prot.h + - rest of work to convert unwind-protect framework to ANSI/ISO C. + Convert unwind-protects to use new shim functions that obey the new + unwind-protect function type + From Paul Eggert + +general.h + - STREQ, STREQN: now static inline functions to take advantage of arg + type conversion + +pcomplete.c,subst.c +lib/readline/histexpand.c,lib/readline/mbutil.c + - fix size_t subtractions in comparisons to avoid unsigned underflow + +externs.h +execute_cmd.c +builtins/times.h + - add prototypes for functions taking clock_t and timeval, make their + declaration in externs.h conditional on NEED_CLOCK_FUNCS_DECL and + NEED_TIMEVAL_FUNCS_DECL, respectively + + 3/31 + ---- +subst.c + - expand_string_dollar_quote: check for zero-length return from + string_extract_{single,double}_quoted and avoid size_t underflow + Fixes asan error reported by Grisha Levit + + 4/3 + --- +builtins/evalstring.c + - open_redir_file: treat the case of failing to open the file as a + non-fatal expansion error instead of a (fatal) redirection error. + Report from Zev Weiss + + 4/4 + --- +lib/readline/vi_mode.c + - _rl_domove_motion_cleanup: d/D require the same special case as c/C + so that a motion command that doesn't move the cursor consumes/deletes + at least one character. + From Emanuele Torre + - _rl_domove_motion_cleanup: ditto for y/Y + - rl_domove_motion_callback: if t/T/;/, fail (return non-zero without + moving point), flag the motion command as having failed (MOVE_FAILED) + + 4/6 + --- +subst.c + - command_substitute: save the return status of the child process in + last_command_subst_status; don't assign to last_command_exit_value + in posix mode (posix interp 1150) + +execute_cmd.c + - execute_null_command: a simple command without a command word but + with command substitutions now returns last_command_subst_status. + It may or may not have already modified $? depending on posix mode + +redir.c + - redir_varvalue: legal_number validity check should be == 0, not < 0 + From a report by Grisha Levit + + 4/10 + ---- +subst.c + - parameter_brace_expand_rhs: check for namerefs in the variable name + part of the ${name=word} expansion so we can go back and implement + the POSIX semantics of returning "the final value of parameter." + From a report by Grisha Levit + +sig.c,sig.h + - sigpipe_handler: clean up, set $?, and throw to top level on receipt + of a SIGPIPE + - termsig_handler: if the variable builtin_catch_sigpipe is set (it's + not set anywhere yet), call sigpipe_handler instead of terminating + the shell. Still need to make sure a sighandler is installed for + SIGPIPE even if initialize_terminating_signals isn't called + + 4/14 + ---- +lib/sh/tmpfile.c + - sh_mktmpfd: add support for MT_UNLINK flag, unlinks created filename + before returning fd, fails if the unlink fails for some reason + + 4/15 + ---- +pathexp.c,pathexp.h + - globsort: support for various glob sorting criteria as defined by + the GLOBSORT variable: name, size, blocks, mtime, atime, ctime. + Default is ascending sort by name, as is traditional. Based on an + idea from Evan Gates + - setup_globsort: parse the value of the GLOBSORT variable, find + sorting type and whether or not it's ascending or descending + - noquote_glob_filename: glob_filename for programmable completion, + doesn't call quote_string_for_globbing and honors GLOBSORT, dotglob, + and globstar + +pcomplete.c + - gen_globpat_matches: call noquote_glob_filename, let that handle + all the variables and GLOB_FAILED + +variables.c + - GLOBSORT: support for special variable, call setup_globsort on + set or unset + +doc/bash.1,doc/bashref.texi + - GLOBSORT: document variable and its effects on pathname expansion + + 4/17 + ---- +builtins/complete.def + - build_actions: take an additional char ** arg VNAMEP; if it is non- + null, accept a -V VARNAME option that names an indexed array + variable in which to store the completions. + - compgen_builtin: if the -V option is supplied, store the possible + completions into VARNAME instead of printing them on stdout. From a + patch from Grisha Levit , idea originally + from konsolebox back in 2/2022 + +doc/bash.1,lib/readline/doc/rluser.texi + - compgen: document new -V option + + 4/18 + ---- +lib/readline/vi_mode.c + - rl_domove_read_callback: call _rl_arg_init before reading digit + argument so prompt gets saved, both callback and non-callback modes + From a report by Grisha Levit + - rl_vi_arg_dispatch: if we return 0 to end the digit argument and + turn off NUMERICARG, call rl_restore_prompt + +lib/readline/histexpand.c + - history_expand_internal: make sure subst_lhs is not null before we + call postproc_subst_rhs. + From a report by Grisha Levit + +lib/readline/display.c + - rl_redisplay: remove redundant code that ends up incrementing lpos + too much for meta characters displayed as octal escape sequences. + From a report by Grisha Levit + + 4/19 + ---- +bashline.c + - attempt_shell_completion: handle case where s > e after calls to + find_cmd_start and find_cmd_end, respectively. + From a report by Grisha Levit + +lib/readline/display.c + - update_line: fix setting of `wsatend' when computing ols and nls in + the multibyte case; this caused redisplay to print more characters + than it needed + - update_line: fix calculation of visible_wrap_offset when moving up + to line 0, trying to figure whether or not the visible prompt has + any invisible characters. Fixes C locale issue reported by + Grisha Levit + + 4/20 + ---- +lib/readline/text.c + - _rl_rubout_char: update erase-at-end-of-line hack to deal with the + unlikely event that a character in a non-multibyte locale is + displayed using an octal representation. + From a report by Grisha Levit + +execute_cmd.c,execute_cmd.h,builtins/evalstring.c + - interrupt_execution: replaces `executing_list' + - interrupt_execution: set while executing while, for, until, select, + and arithmetic for loops + +jobs.c + - wait_for: if a process dies due to a SIGINT while the shell is + executing a loop or a list, act as if the shell got SIGINT. This + is no longer dependent on the compatibility level + From a report by Grisha Levit + +bashline.c + - name_is_acceptable: allow FIGNORE suffixes to match the entire + pathname like tcsh does instead of requiring a non-empty prefix. + From Emanuele Torre + + 4/23 + ---- +lib/readline/misc.c + - _rl_unsave_line: new function, takes a HIST_ENTRY * as an argument, + generalized rl_maybe_unsave_line + - _rl_alloc_saved_line: allocate a new HIST_ENTRY *, populate it like + rl_saved_line_for_history + - _rl_free_saved_line: free a saved HIST_ENTRY * + - _rl_free_saved_history_line: call _rl_free_saved_line + - _rl_previous_history_internal: new function, internals of + rl_get_previous_history; change rl_get_previous_history to call it + +lib/readline/history.h + - HIST_ENTRY_DEFINED: define sentinel if HIST_ENTRY struct defined + +lib/readline/rlprivate.h + - _rl_alloc_saved_line,_rl_free_saved_line,_rl_unsave_line: new extern + function definitions + - _rl_free_saved_search_line: new extern definition + +lib/readline/search.c + - _rl_saved_line_for_search: use private storage to save current line, + avoid clashes with rl_saved_line_for_history + - _rl_free_saved_search_line,_rl_unsave_saved_search_line: new functions + to manage _rl_saved_line_for_search + - noninc_dosearch,_rl_nsearch_abort: clean up _rl_saved_line_for_search + instead of rl_saved_line_for_history + - rl_history_search_internal: allocate private _rl_saved_line_for_search; + unsave or free it as appropriate + - _rl_history_search_reinit: free up any _rl_saved_line_for_search just + in case + +lib/readline/vi_mode.c + - rl_vi_search: free _rl_saved_line_for_search, since that's what the + non-incremental search functions use now + - rl_domove_read_callback: if we read a numeric argument, then a motion + character, make sure the motion character is valid before returning + it and going on + From a report by minipython <599192367@qq.com> + + 4/27 + ---- +lib/readline/display.c + - _rl_move_cursor_relative: when checking to see whether data is within + the invisible line, make sure to stay within the invisible line + line break boundaries + From a report by minipython <599192367@qq.com> + +lib/readline/search.c + - dispose_saved_search_line: new function, either unsave the saved + search line (if we're not at the end of the history) or free it + (if we are). Needs to be immediately followed by call to + make_history_line_current, which resets rl_undo_list + - make_history_line_current: change strategy: rely on callers to + manage _rl_saved_line_for_search and rl_undo_list; just copy the + data from the passed history entry into the line buffer and reset + rl_undo_list + - noninc_dosearch,rl_history_search_internal: call dispose_saved_search_line + before calling make_history_line_current + +lib/readline/misc.c + - _rl_start_using_history: free the undo list associated with + _rl_saved_line_for_history, if one exists. Have to watch out for + this causing pointer aliasing problems, maybe add a call to + _hs_search_history_data() + + 4/28 + ---- +pathexp.c + - sh_globsort: a sort specifier of `nosort' disables sorting completely + +doc/bash.1,doc/bashref.texi + - GLOBSORT: document `nosort' sort specifier + +bashline.c + - attempt_shell_completion: attempt completion with the empty command + for a null command word on a line with only whitespace following any + optional assignment statements + - attempt_shell_completion: make sure that the start of the command + word is not after rl_point before calling the programmable completion + for the initial word. + From a report by Grisha Levit + +lib/readline/histexpand.c + - history_expand: don't read past the end of the string if it ends with + an incomplete multibyte character + From a report by Grisha Levit + + 5/1 + --- +lib/readline/text.c + - _rl_insert_char: make sure to return 1 in all cases where there are + pending bytes accumulating for a multibyte character + - _rl_insert_char: if the COUNT argument is 0, insert any pending + bytes read so far. The idea is that these bytes were accumulating + to compose a possible multibyte character, and the count of 0 + indicates that the current character doesn't contribute to that + because it's bound to an editing command. + - rl_insert, rl_quoted_insert: make sure to call _rl_insert_char + with a 0 count as appropriate to insert any accumulating bytes + From a patch by Grisha Levit + +sig.c + - top_level_cleanup,throw_to_top_level: set variable_context to 0, just + to make sure + +execute_cmd.c + - function_misc_cleanup: new function, runs make_funcname_visible and + unlink_fifo_list at the end of execute_function, replaces inline + code + - uw_function_misc_cleanup: unwind-protect function, just calls + function_misc_cleanup. Installed by execute_function. + Partial fix for FUNCNAME bug reported by Grisha Levit + - execute_builtin: run unwind-protects if evalnest exeeds max + - execute_builtin: run unwind-protects if sourcenest exeeds max + +parse.y + - parse_string_to_word_list: set current_token = '\n' on error + - parse_string_to_word_list: if we're executing and not running in + parse_and_execute, call top_level_cleanup before we jump to the + top level. Rest of fix for FUNCNAME bug + - parse_compound_assignment: set last_read_token and current_token to + '\n' on parse error. Fix for alias expansion bug reported by + Grisha Levit + - parse_compound_assignment: if we're executing and not running in + parse_and_execute, call top_level_cleanup before we jump to the + top level + + 5/2 + --- +jobs.c + - run_sigchld_trap: don't freeze and unfreeze the jobs list; move it + to the callers who are running this on SIGCHLD receipt and cannot + deal with jobs disappearing from the list while they're running + - waitchld: if we are running the wait builtin, continue to run the + SIGCHLD trap immediately upon signal receipt, but freeze and + unfreeze the jobs list around the call to run_sigchld_trap(). + Fixes issue with `jobs' in a SIGCHLD trap not removing jobs from + the jobs list reported by Guldrelokk + + 5/4 + --- +input.c + - fd_to_buffered_stream: make sure buffers[fd2] is non-null before + turning on SHAREDBUF. + From Emanuele Torre + +eval.c + - reader_loop: save and restore EOF_Reached around expanding $PS0, + setting it to 0 for the expansion so it doesn't affect things like + command substitution. + From a report by Grisha Levit + +parse.y + - parse_comsub: handle ${Ccommand; }, where C == space, tab, newline, + or '|' + - read_token_word: understand ${Ccommand; } and call parse_comsub to + parse the contents + - parse_matched_pair: understand ${Ccommand; } inside another paired + construct + - new `funsub' production, like comsub but for ${Ccommand;} nofork + command substitution + +execute_cmd.c + - execute_simple_command: if we fork because of pipes in or out, clear + the fifo list, since subshell aren't supposed to inherit fifos + + 5/8 + --- +parser.h + - PST_FUNSUBST: new parser state, parsing the command in ${Ccommand;}. + Primarily used to have read_token_word return `}' as a separate + token even if it's not delimited like a reserved word + +subst.h + - SX_FUNSUB: new flag, tell xparse_dolparen we are parsing the command + in a ${Ccommand;} nofork command substitution + +parse.y + - xparse_dolparen: handle parsing ${Ccommand;} nofork command + substitution like parse_comsub + - read_token: if we're parsing a foreground command substitution, + treat a word that begins with an unquoted `}' as a `}' token to + terminate the ${Ccommand;} construct without requiring that the + close brace be delimited like a reserved word + - no_semi_successors: add DOLBRACE + - reserved_word_acceptable: add DOLBRACE + +subst.c + - extract_function_subst: like extract_command_subst, but for nofork + command substitutions; calls xparse_dolparen with the SX_FUNSUB + flag to differentiate + - string_extract_double_quoted,extract_delimited_string, + extract_heredoc_dolbrace_string,extract_dollar_brace_string, + param_expand: call extract_function_subst as appropriate + - function_substitute: like command_substitute, but for nofork command + substitutions. Just a stub for now + + 5/11 + ---- +jobs.[ch] + - pipeline_saver: already_making_children now saved and restored as + part of the struct; no longer need a separate variable + - save_pipeline,restore_pipeline: save already_making_children to struct + +parse.y + - parse_comsub,xparse_dolparen: handle `(' as the first char of a + funsub (ksh93 supports that) + +subst.c + - function_substitute: complete implementation; handle both funsubs + and valsubs (need different terminology); dummy up a fake shell + function so local variables and `return' work; do the right thing + with process groups + - executing_funsub: flag for the rest of the shell to know we're + expanding a funsub; used by parse_and_execute + +builtins/evalstring.c + - parse_and_execute: check executing_funsub to do the right thing with + alias expansion and posix mode + + 5/12 + ---- +doc/bash.1,doc/bashref.texi + - function substitution (or lambda substitution, or nofork command + substitution): document + + 5/15 + ---- +subst.c + - function_substitute: make sure to decrement variable_context in the + unwind-protects since we don't unwind_protect it individually. + Report from Oguz + + 5/17 + ---- +configure.ac + - i370 machines cannot use the bash malloc + Patch from Igor Todorovski + +support/signames.c + - initialize_signames: add support for z/OS signals. + Patch from Igor Todorovski + +lib/glob/smatch.c + - collseqcmp: new name for collequiv[_wc], that function apparently + exists in libc on z/OS + Patch from Igor Todorovski + +jobs.c + - mark_all_jobs_as_dead: make sure to reset js.j_ndead to the right + number of jobs in the array + +execute_cmd.c + - execute_while_or_until: move call to REAP() after the action + executes, like other loop functions + +shell.c,parse.y,lib/intl/gettextP.h + - add some __MVS__ checks for z/OS systems + + 5/18 + ---- +jobs.c + - wait_for_any_job: catch jobs that can terminate and be reaped + when we call UNBLOCK_CHILD between the loop where we check the + jobs list for dead jobs and the loop where we check for running + jobs and poll for them with wait_for(). + Fixes bug reported by Aleksey Covacevice + + 5/20 + ---- +subst.c + - read_comsub: quote CTLNUL if it's in $IFS and we're parsing the + RHS of an assignment statement + - comsub_quote_string: ditto + - comsub_shouldquote: break code that decides whether to CTLESC escape + a character read from a command substitution or $REPLY into its own + inline function; change read_comsub/comsub_quote_string callers + + 5/21 + ---- +subst.c + - quote_escapes_internal: use ifs_cmap instead of iterating through + ifs_value to set skip_ctlesc and skip_ctlnul + + 5/23 + ---- +parser.h + - remove `(' from FUNSUB_CHARS + +parse.y + - parse_comsub: don't bother with `(' as one of the FUNSUB_CHARS + +doc/bash.1,doc/bashref.texi + - command substitution: remove mention of `(' as a valid character + following the open brace in nofork command substitution + + 5/24 + ---- +parse.y + - parse_comsub: avoid adding `;' to an empty ${ command substitution + - parse_comsub: if open == '{', push back a newline we read into + peekc to get PS2 prompting right. + From a report by Grisha Levit + +subst.c + - skip_double_quoted: pass the SX_COMPLETE flag down to + extract_dollar_brace_string in case it contains an unclosed command + substitution. + From a report by Grisha Levit + + 5/25 + ---- +shell.c + - make sure shell_initialized is set to 1 before running -c command + +make_cmd.c + - make_function_def: initialize source_file to something other than + `main' or `environment' if the shell is not interactive. + From a report from Emanuele Torre + +parse.y + - save_token_state,restore_token_state: save and restore token_to_read + - read_token_word: if we read EOF in an interactive shell, set + token_to_read to yacc_EOF and EOF_Reached to 1 so the token will + be delimited but the next call to read_token returns yacc_EOF + - handle_ignoreeof: broke the code that checks eof_encountered and + possibly exceeds the ignoreeof limit out into a separate public + function, called from handle_eof_input_unit + +eval.c + - reader_loop: if EOF_Reached is set in an interactive shell after + parse_command and execute_command, and ignoreeof has been enabled, + check for ignoreeof with handle_ignoreeof and reset EOF_Reached + back to 0 if we should not exit. This can occur when EOF delimits + a simple command (simple_command_terminator) + From a report by Grisha Levit + + 5/27 + ---- +lib/readline/mbutil.c + - _rl_get_char_len: if SRC is "", make sure to return 0 + +lib/readline/isearch.c + - _rl_isearch_callback: if _rl_search_getchar returns EOF, return 1 + to abort search; if it returns with RL_STATE_ISEARCH unset, return + 1 (handling a signal can turn it off via _rl_isearch_cleanup) + + 5/29 + ---- +lib/readline/text.c + - _rl_insert_char, rl_quoted_insert: minor fixes from Grisha Levit + +builtins/printf.def + - bexpand: use the same calculation for the size of the return buffer + as ansicstr(). + From a report by Grisha Levit + +locale.c + - locale_setblanks: work around problem with macOS where isblank(x) + incorrectly returns true for characters 0x80-0xff in a UTF-8 locale + From a report by Grisha Levit + - set_default_locale_vars,set_locale_vars,reset_locale_vars: make sure + we call locale_setblanks after setting/resetting locale_utf8locale, + since we use that in locale_setblanks + +lib/sh/smatch.c + - charseqcmp,is_cclass,FOLD: make sure we don't treat chars >= 0x80 + as valid in a UTF-8 locale, since they are multibyte characters. + From a report by Grisha Levit with a full + explanation in http://www.openradar.me/FB9973780 + + 5/30 + ---- +builtins/enable.def + - enable_builtin: don't call dlopen with a null pathname, it will + succeed. Report from Wiley Young + +lib/readline/readline.c + - _rl_dispatch_subseq: if a user binds do-lowercase-version to something + that isn't an uppercase character, flag an error rather than recurse. + From a report by Grisha Levit + + 5/31 + ---- +builtins/enable.def + - enable_builtin: don't try to load a builtin that's not found if + the -n flag is supplied. + From a report from Emanuele Torre + +parse.y + - parse_comsub: use was_word code again to make sure we add a closing + `;' if the last token parsed before the closing ';' or '\n' was a + word, no matter what character ends it. + From a report by Grisha Levit + +aclocal.m4,configure.ac,findcmd.c + - IBM z/OS changes from Igor Todorovski + + 6/1 + --- +parse.y + - shell_getc: if the shell is not interactive and reading from a + buffered stream or stdin, and not expanding an alias, add a + backslash to a line ending with like we do when + reading from a string. This prevents a backslash-newline from + being discarded when we are removing backslash-newlines from the + input, since we will add a newline to shell_input_line in this case. + From a report by Rob Landley + +parse.y + - parse_compound_assignment: check and compensate for an alias being + popped out from underneath this function by read_token() (e.g., + alias L='m=("x")'. Since we don't push a new input source, we should + never restore pushed_string_list from the saved parser state, but + we check and only do this if we were expanding an alias when this + function was called. + From a report by Wiley Young + + 6/2 + --- +print_cmd.c + - print_if_command: make sure to print any pending here-documents after + printing the test. + From https://bugzilla.redhat.com/show_bug.cgi?id=2211214 + +builtins/enable.def + - if -n is supplied with -f, attempt to load the builtin but mark it + as disabled after loading. + Suggested by Robert Elz + +builtins/evalfile.c + - _evalfile: increment retain_fifos, so we don't delete any FIFOs or + pipes we inherited before sourcing this file; restore original value + before we return. + From https://savannah.gnu.org/support/index.php?110883 + + 6/3 + --- +subst.c + - expand_string_dollar_quote: if singlequote_translations is set, there + is a chance for a use-after-free of `t'. + From a report by Grisha Levit + + 6/7 + --- +jobs.c,nojobs.c,jobs.h + - job_control_active_p: new function, returns 1 if job control is + currently enabled and we have given away the terminal + +builtins/evalstring.c + - should_suppress_fork: don't optimize away the fork if job control is + active because we need to call end_job_control and give the terminal + back to the original process group when this command finishes. Call + job_control_active_p() to check this. + Report from Andrew Hamon + + 6/8 + --- +shell.c + - ssh_run_startup_files: new variable, set by run_startup_files if + the shell decides it's being run by ssh and runs bashrc (only if + SSH_SOURCE_BASHRC is defined). Non-zero while the startup files + are being run. Not used by any other part of the shell yet. + + 6/12 + ---- +arrayfunc.h + - new inline functions to convert between assignment flags (ASS_*), + array value flags (AV_*), and valid array flags (VA_*) + +shell.h + - include arrayfunc.h after subst.h and variables.h so all the values + for the new inline functions are available + +variables.c + - bind_int_variable: use convert_assign_flags_to_validarray_flags and + convert_assign_flags_to_arrayval flags instead of inline assignments + +builtins/common.c + - builtin_bind_variable: use convert_assign_flags_to_validarray_flags + instead of inline assignments + +arrayfunc.c + - assign_array_element: use convert_assign_flags_to_arrayval_flags + instead of inline code + - assign_array_element_internal: use convert_assign_flags_to_arrayval_flags + to pass the right values to array_expand_index + - assign_array_var_from_string: since expand_compound_array_assignment + performs one round of expansion on the subscripts, make sure to add + ASS_NOEXPAND (if assoc_expand_once is set) and ASS_ALLOWALLSUB to the + flags we pass to assign_compound_array_list + - unbind_array_index: use convert_validarray_flags_to_array_value_flags + to pass the right values to array_expand_index + - array_expand_index: uncomment code tagged for bash-5.3 that checks + AV_NOEXPAND and suppresses call to expand_arith_string if it's set. + This set of changes extends assoc_expand_once to indexed arrays + +arrayfunc.[ch],execute_cmd.c,expr.c,test.c,builtins/common.c,builtins/mkbuiltins.c +builtins/declare.def,builtins/set.def,builtins/shopt.def + - array_expand_once: new name for internal assoc_expand_once variable + + 6/13 + ---- +builtins/shopt.def + - array_expand_once: new option, replaces assoc_expand_once + +doc/bash.1,doc/bashref.texi + - array_expand_once: document new shopt option + + 6/15 + ---- +lib/readline/complete.c + - rl_full_quoting_desired: new application-settable variable, if set + to non-zero by an application completion function, all completions + will be quoted as if they were filenames, subject to the value of + rl_filename_quote_characters. Initialized to 0 and reset to 0 + by set_completion_defaults. + From a contribution by Grisha Levit + - QUOTING_DESIRED: new macro to check whether we should quote completions + +lib/readline/readline.h + - rl_full_quoting_desired: extern declaration + +lib/readline/doc/rltech.texi + - rl_full_quoting_desired: document + +configure.ac + - bumped version to 5.3-devel + +pcomplete.h + - COPT_FULLQUOTE: new compspec option, for rl_full_quoting_desired + +pcomplete.c + - pcomp_set_readline_variables: set rl_full_quoting_desired according + to COPT_FULLQUOTE + +builtins/complete.def + - fullquote: add new complete/compopt option value + +doc/bash.1,lib/readline/doc/rluser.texi + - fullquote: document new complete/compopt option + +lib/sh/timeval.c + - timeval_to_secs: sfp argument is now a long *; there is a new + maxval argument (always 10^6 for now) that determines how to + round; returns tv_usec in *sfp if maxval == 10^6; otherwise + return value is basically tv_usec/maxval with rounding + - print_timeval: change argument type in call to timeval_to_secs + +lib/sh/clock.c + - clock_t_to_secs: sfp argument is now a long * + - print_clock_t: change argument type in call to clock_t_to_secs + +externs.h + - timeval_to_seconds, clock_t_to_seconds: change prototypes + +execute_cmd.c + - mkfmt,print_formatted_time: fractional seconds arguments are now + longs + - mkfmt: accept precisions up to 6; since sec_fraction is in usecs, + perform any necessary rounding for precisions < 6 + - print_formatted_time: allow precision specifiers up to 6; default + is still 3 + - time_command: fractional seconds variables are now long; add new + argument to timeval_to_secs (always 1000000) + - time_command: if we call clock_t_to_secs, multiply the return + fractional seconds value by 1000 to convert it from msec to usec + +doc/bash.1,doc/bashref.texi + - TIMEFORMAT: document that the max precision is now 6 + From https://savannah.gnu.org/support/?110343 + + 6/16 + ---- +variables.c + - get_monoseconds: use clock_gettime to return the value of the + system's monotonic clock, if available + - BASH_MONOSECONDS: a new dynamic variable that returns the value of + get_monoseconds + From a suggestion by William Kennington + +doc/bash.1,doc/bashref.texi + - BASH_MONOSECONDS: document + +trap.c + - save_bash_trapsig,set_bash_trapsig,restore_bash_trapsig: functions + to manage value of BASH_TRAPSIG + - run_pending_traps: save and restore the value of BASH_TRAPSIG; set + it to the numeric signal number of the trap being run while it's + executing + From a feature request by Eric Marceau + - _run_trap_internal,run_exit_trap: save and restore BASH_TRAPSIG; + make sure it's set appropriately + +doc/bash.1,doc/bashref.texi + - BASH_TRAPSIG: document + +builtins/declare.def + - declare_internal: if declare is supplied -f and an argument that + looks like an assignment statement, fail only if there is not a + function with that name already defined. + From a report from Emanuele Torre + back in 12/22 + +jobs.c + - wait_for: make checkwinsize work in subshell commands started from + interactive shells + New feature request by Kerin Millar + +print_cmd.c + - semicolon: don't return immediately unless a preceding `&' is + itself preceded by a space, as the rest of the printing code prints + asynchronous commands. + Report and patch by Grisha Levit + + 6/17 + ---- +arrayfunc.c + - arrayvar_copyval: copy an array or hash table from shell variable + V1 to V2 + +arrayfunc.h + - arrayvar_copyval: extern declaration + +subst.h + - ASS_NOTEMPENV: new flag for bind_variable and assignments + +variables.c + - bind_variable: if ASS_NOTEMPENV is in FLAGS, don't bother calling + bind_tempenv_variable + +builtins/declare.def + - declare_internal: if we find the variable in the temporary + environment, call bind_variable with the ASS_NOTEMPENV flag since + we are already dealing with a variable from the temporary environment + - declare_internal: if we bind a new global variable because we're + modifying a variable from the temporary environment, make sure to + call arrayvar_copyval to copy array variables from the temporary + environment to the global scope + +variables.c + - push_temp_var: if we are pushing an array variable, make sure to + call arrayvar_copyval on the new variable + Final fix for bug reported by Wiley Young + - push_posix_tempvar_internal: call arrayar_copyval instead of using + inline code + + 6/19 + ---- +lib/sh/shmatch.c + - sh_regmatch: use builtin_find_indexed_array to allow a local copy + of BASH_REMATCH. + From https://lists.gnu.org/archive/html/bug-bash/2022-05/msg00052.html + +execute_cmd.c + - execute_in_subshell: tentative change to clear procsub list after + performing redirections, so nothing in a redirection can affect + what's in the subshell. + From https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00114.html + +test.c + - binary_operator: in posix mode, the < and > operators compare strings + using the current locale (strcoll). + From https://www.austingroupbugs.net/view.php?id=375 + +bashline.c + - bash_default_completion: make sure that command completion adds the + trailing `/' suffix for directories even if the directory name is + the same as the common prefix of matches. + From https://lists.gnu.org/archive/html/bug-bash/2022-11/msg00034.html + +lib/readline/kill.c + - rl_vi_yank_pop: make repeated invocations of vi-yank-pop cycle + through the kill ring just like in emacs mode, even when point + is at the end of the line. + From https://lists.gnu.org/archive/html/bug-bash/2022-08/msg00105.html + +parse.y + - parse_comsub: set variables if the last token (last_read_token) is + `;', `\n', or `&', in addition to was_word + - parse_comsub: if the last read token was a newline (was_newline), + terminate the comsub with a newline instead of a semicolon; keeps + the line numbers more consistent. + From a report by Grisha Levit + +lib/sh/anonfile.c + - anonopen: use memfd_create if it is available, fall through to + traditional Unix/POSIX implementation if it fails + + 6/20 + ---- +parse.y + - yy_string_unget: don't push EOF back to a string, like the other + unget functions + + 6/21 + ---- +parse.y + - read_a_line: don't push an EOF back into the string or line if the + line ends in a backslash. + From a report by Rob Landley + + 6/22 + ---- +lib/readline/input.c + - rl_gather_tyi: make sure result is initialized + +lib/readline/kill.c + - _rl_read_bracketed_paste_prefix: make sure key is initialized + +builtins/read.def + - read_builtin: make sure pass_next and saw_escape are initialized + before a possible goto + - read_builtin: make sure to initialize prevset for very short + timeouts + +subst.c + - function_substitute: make sure tflag is initialized even when we + don't call read_comsub, since we return it in ret->flags + All from a report by Grisha Levit + +builtins/complete.def + - compgen_builtin: use array_from_argv to assign elements of the + stringlist to the array variable. + Update from Grisha Levit + +builtins/cd.def + - bindpwd: fix seg fault from an unlikely set of circumstances + From a report by Grisha Levit + +arrayfunc.h + - convert_validarray_flags_to_arrayval_flags: initialize avflags + From a report by Grisha Levit + +lib/sh/anonfile.c + - anonopen: set *fn if memfd_create is used + From a report by Grisha Levit + + 6/23 + ---- +arrayfunc.c + - bind_assoc_var_internal: free key to fix small leak if assign_func + used + - quote_compound_array_word: free value to fix small leak + +builtins/evalstring.c + - parse_and_execute: free parsed command on failed function definition + import + - open_redir_file: free FN if we're not passing it back to the caller + +subst.c + - param_expand: free TEMP1 in code paths that don't do it now + +bashline.c + - bash_command_name_stat_hook: if we modify *NAME, free the old value + +examples/loadables/{kv,stat}.c + - bind_assoc_variable is caller-free VALUE, so free when needed and + don't allocate a new copy if not + All from a report by Grisha Levit + + 6/24 + ---- +lib/readline/complete.c + - rl_menu_complete: use _rl_free_match_list instead of just freeing + MATCHES if we have too many possible completions to display. + From a report by Grisha Levit + + 6/25 + ---- +eval.c + - reader_loop: make sure to allow exit builtin (code == EXITBLTIN) to + exit the shell when ignoreeof is set + From a report by Grisha Levit + + 6/26 + ---- +lib/readline/complete.c + - complete_sigcleanarg_t: new struct to hold match list and saved line + buffer for cleanup on receipt of SIGINT + - _rl_complete_sigcleanup: use new sigcleanarg_t struct and free both + members + - rl_complete_internal: whenever we display the match list, set up to + clean the matches and saved line buffer in the event of a SIGINT + From a report by Grisha Levit + +lib/readline/signals.c + - _rl_handle_signal: if readline is compiled to include callbacks, only + call rl_echo_signal_char if we're not in callback mode or the + application has set rl_persistent_signal_handlers, leaving any + application signal handler to call it (or not) otherwise. + From a discussion with Andrew Burgess + +lib/glob/glob.c + - glob_filename: if ARRAY == TEMP_RESULTS, make sure to free TEMP_RESULTS + after copying the filenames out of ARRAY, since we either assigned it + directly or glob_dir_to_array returned it because the dirname was + the empty string. + From a report by Grisha Levit + +lib/readline/rltypedefs.h + - Function: only compile in these obsolete typedefs if + WANT_OBSOLETE_TYPEDEFS is defined + +print_cmd.c + - xtrace_print_assignment,xtrace_print_word_list: prioritize checking + for characters that need $'...' printing over shell metacharacters + so that strings containing both get the $'...' treatment + From a report by Grisha Levit + + 6/27 + ---- +subst.c + - skip_double_quoted: make sure to call extract_function_subst with + the SX_NOALLOC flag + From a report by Grisha Levit + +trap.c + - _run_trap_internal: if we're running a trap but shell_eof_token is + set, this means we're somehow running a trap while parsing a + command substitution (weird set of circumstances). Call + reset_parser and unset shell_eof_token if shell_eof_token is set + From a report by Wiley Young + +builtins/setattr.def + - set_var_attribute: don't set the att_propagate attribute unless the + variable whose attribute is being modified is in the temporary + environment for this builtin, not any previous temporary environments + (like the temp env for a function call, or a special builtin like + `.') + +variables.c + - push_posix_temp_var: if we have an array variable we're trying to + push up here, use arrayvar_copyval to copy the value correctly + +arrayfunc.c + - arrayvar_copyval: make sure that V2 ends up being the same type of + array as V1 (att_array or att_assoc), since we're copying the value. + Fixes issue reported by Grisha Levit , but + with the previous fix to set_var_attribute, it's not needed + - assign_compound_array_list: check for integer overflow if the max + index of the array is already INT_MAX. + From a report from Emanuele Torre + - assign_array_var_from_word_list: ditto + + 6/28 + ---- +pcomplete.c,bashline.c + - uw_restore_parser_state,uw_rl_set_signals: move to bashline.c so the + general readline support can use them + +bashline.h + - uw_restore_parser_state,uw_rl_set_signals: extern declarations + +bashline.c + - unset_readline_variables,uw_unset_readline_variables: function to + unset READLINE_{LINE,POINT,MARK,ARGUMENT} and its unwind-protect + counterpart + - bash_execute_unix_command: add unwind-protect to free up allocated + memory + Report and patch by Grisha Levit + +doc/bash.1,doc/bashref.texi + - BASH_ARGC,BASH_ARGV,BASH_SOURCE,BASH_LINENO: note that these variables + may not be assigned to or unset + + 6/29 + ---- +builtins/declare.def + - declare_internal: attempting to assign to a noassign variable is no + longer an assignment error; the attempt is just ignored + +arrayfunc.c + - find_or_make_array_variable: take a new flag value, 4: means to + return noassign variables as themselves instead of NULL without + performing the assignment so the caller can handle them differently. + - assign_array_from_string: pass flags & 4 to find_or_make_array_variable + so we can simply ignore attempted assignments to noassign array + variables instead of treating them as assignment errors + From a report by Kerin Millar + +expr.c + - exppower: only report negative exponent error if noeval == 0. + Fixes issue reported by Steffen Nurpmeso + + 6/30 + ---- +lib/sh/anonfile.c + - anonopen: add support for using shm_open or shm_mkstemp to create + an anonymous file using POSIX shared memory + +configure.ac + - if --enable-static-link is supplied, add -static to LDFLAGS on + Linux if opt_profiling isn't enabled + From a report from Emanuele Torre + +print_cmd.c + - make_command_string_internal: if we're recursively printing a list + (connection) with more than two elements, don't print any deferred + here-documents after the make_command_string_internal on the right + side of the connection unless we're at the end of the list + (printing_connection == 1). This way the caller gets to add the + appropriate connector before printing the deferred here-documents. + From a report by Grisha Levit + - make_command_string_internal,print_group_command: after we call + PRINT_DEFERRED_HEREDOCS and follow it with a closing `)' (subshell) + or `}' (group command), we can set was_heredoc to 0 because we are + no longer printing a here-document + From a report by Grisha Levit + + 7/3 + --- +lib/readline/complete.c + - rl_username_completion_function: simplify things by just skipping the + function body if HAVE_GETPWENT is not defined. + From a report by Grisha Levit + +lib/sh/ufuncs.c + - fsleep: broke into three functions: nsleep, which uses nanosleep, + ssleep, which uses select/pselect, and ancientsleep, which uses + sleep. Prefer nanosleep, use the others depending on what's + defined. + From a report and patch by Grisha Levit + +arrayfunc.c + - assign_compound_array_list: now behaves more like a series of + assignment statements (a=(one two) is more like a[0]=one a[1]=two) + in terms of error handling -- break after the first invalid + assignment -- and return value -- now return int, 0 on failure and + 1 on success so the callers can throw assignment errors + - assign_compound_array_list: if we have an explicit [subscript]=value + assignment, use the negative-indices-count-back-from-the-end strategy; + otherwise use last_ind and throw an error on overflow. This is like + standalone assignment statements + - assign_array_var_from_string: catch new return value from + assign_compound_array_list; return NULL if assign_compound_array_list + returns failure + +subst.c + - do_compound_assignment: if assign_compound_array_list or + assign_array_var_from_string return error (0 or NULL, respectively), + treat as an assignment error similar to assigning to a readonly + variable + Inspired by a report from Emanuele Torre + +arrayfunc.h + - assign_compound_array_list: new return type + + 7/5 + --- +builtins/enable.def + - enable_builtin: make sure dynamic builtin loading and unloading + updates the `enabled' and `disabled' programmable completion lists. + From a report and patch by Grisha Levit + +doc/bash.1,doc/bashref.texi + - hash: add note that assigment to PATH clears the hash table. + Report by Sebastian Carlos + +lib/readline/complete.c + - rl_filename_completion_function: make sure the results of + *rl_filename_rewrite_hook are freed consistently if the function + returns newly-allocated memory + From a report and patch by Grisha Levit + back in May + + 7/6 + --- +builtins/cd.def + - cd_builtin: if $OLDPWD is set by the user or script to something + that's not a full pathname, allow it to use $CDPATH. + From a report by Dustin Boyd + + 7/7 + --- +shell.h + - user_info: add members for saved uid and saved gid + +shell.c + - uidget: if we have setresuid/setresgid, get the saved uid and saved + gid so we can set them if we disable privileged mode + - disable_priv_mode: only call setuid/setresuid and setgid/setresgid + if the euid (egid) != uid (gid). If we have setresuid/setresgid, + add a check whether the saved uid (gid) isn't the same as the real + uid (gid). Potentially saves a couple of system calls. + Fixes Android issue, patch by Grisha Levit + +test.c + - unary_operator: only support historical handling of -t and its + optional argument when not in posix mode + - unary_test: print an error if the argument to -t is not a number + - unary_operator: only make the argument to -t optional if the + next argument is -a or -o and we are using the historical algorithm + (argc >= 5), otherwise force it to be a number and print an error + message if it's not + From a report by Stephane Chazelas + +doc/bash.1,doc/bashref.texi + - added note about test/[ sorting using the current locale with the + `<' and `>' operators when in posix mode + - added note about the integer argument to test -t being required + when in posix mode + - added note recommending against the use of test with 5 or more + arguments in favor of combining multiple instances of test with + && or || + From a report by Stephane Chazelas + + 7/10 + ---- +jobs.c + - start_job: turn off (on) the J_ASYNC flag depending on whether the + job is being started in the foreground (background). It matters now + that we use IS_ASYNC to determine whether to give the terminal + back to the shell's process group. + From a report by Grisha Levit + +bashline.c + - command_word_completion_function: if we have a glob pattern that + expands to multiple words, dispose of the list before returning NULL. + From a report by Grisha Levit + +variables.c + - makunbound: if we're unsetting a local variable, preserve the export + attribute even if the variable's not in the temporary environment + Tentative fix, compatible with other POSIX shells (except the BSD + variants of ash) + + 7/12 + ---- +lib/sh/unicode.c + - include if HAVE_LANGINFO_CODESET is defined, use + nl_langinfo (CODESET) if HAVE_LANGINFO_CODESET is define, since + we no longer check for nl_langinfo. This is what locale.c does. + + 7/15 + ---- +lib/readline/display.c + - rl_redisplay: rudimentary code to handle some cases where the line + buffer consumes more than the physical number of screen lines. It's + not a screen editor, but it handles some of the common cases. + From https://bugs.launchpad.net/ubuntu/+source/bash/+bug/2024628 + + 7/17 + ---- +builtins/printf.def + - getwidestr: make sure to force mbsrtowcs to convert the closing NULL + so the wide-character string is NULL-terminated. + From a report by Grisha Levit + +lib/sh/shmatch.c + - strregerror: new function to return regerror(3) error message text + in allocated memory + - sh_regmatch: add an additional argument to hold the error message + from regerror(3), in newly-allocated memory; generated by call to + strregerror() on regcomp(3) failure + From a patch by Grisha Levit + +externs.h + - sh_regmatch: update extern declaration + +execute_cmd.c + - execute_cond_node: pass pointer to buffer to return any error + message; if sh_regmatch returns 2, use a non-NULL error buffer in + the error message. + +lib/readline/bind.c + - _rl_get_string_variable_value: return the values for + active-region-start-color (_rl_active_region_start_color) and + active-region-end-color (_rl_active_region_end_color) if they + are set. + Fixes bind -v issue reported by Sebastian Carlos + - _rl_get_string_variable_value: if the history is stifled, make + sure we report the history size as < 0 so the output of bind -v + can be reused as input. + Fixes bind -v issue reported by Sebastian Carlos + + 7/20 + ---- +pathexp.c + - quote_string_for_globbing: don't bother backslash-quoting multibyte + characters. It matters for macOS and doesn't make a difference for + other systems, and those aren't going to be special globbing chars. + From a report by Grisha Levit + +lib/glob/glob.c + - glob_vector: normalize the pattern with fnx_fromfs so we make sure + it's also in NFC on macOS (other systems don't care). This is a + POSIX violation, but part of correcting the longtime HFS+ (and Finder) + misfeature + +lib/readline/complete.c + - rl_filename_completion_function: if the application sets a filename + rewrite hook, use it to rewrite the filename we're matching as well + as filenames read with readdir(). + [SUPERSEDED BY CHANGE OF 10/4/2023] + From a report by Grisha Levit + + 7/21 + ---- +pathexp.c + - quote_string_for_globbing: see if we can get away without backslash- + quoting single-byte characters that aren't CTLESC or characters + that are special to EREs or BREs, even if they're quoted + +bashline.c + - bashline_set_filename_hooks: convenience function to set the + directory hook and the filename rewrite and stat hooks; call from + other places in the file so these are set consistently + +bashline.h + - bashline_set_filename_hooks: extern declaration + +builtins/complete.def + - compgen_builtin: make sure to set the directory and filename hooks + so compgen called from a script works more like compgen called + from a word completion context. + Inspired by a report by Grisha Levit + +doc/Makefile.in + - bash.pdf: use groff -T pdf to create, instead of creating postscript + and then using ghostscript + + 7/24 + ---- +jobs.c + - start_job: unconditionally send SIGCONT to the job we just started, + even if we think it was already running, to reduce the window for a + potential race condition, and only change the state to RUNNING if + the SIGCONT succeeds or if the process has terminated so we can + clean it up later. + Report from Earl Chew + +make_cmd.c + - make_simple_command,make_bare_simple_command: now take line number as + an argument; used instead of line_number to set the line associated + with the simple command + +make_cmd.h + - make_simple_command,make_bare_simple_command: change prototype + +parse.y,builtins/command.def,builtins.jobs.def + - make_simple_command,make_bare_simple_command: change callers + + 7/25 + ---- +parse.y + - read_token_word: try to keep track of whether we are parsing the + first word of a simple command and set simplecmd_lineno if we + are. We start a simple command when we return ASSIGNMENT_WORD + or WORD in a command token position. This gives better values for + $LINENO in multi-line simple commands + - redirection: set simplecmd_lineno if it's -1, meaning this is a + simple command with a leading redirection or a null command with + only a redirection + - pass simplecmd_lineno to make_simple_command if we are starting a + simple command (the first ELEMENT) + - parse_comsub,xparse_dolparen: save and restore simplecmd_lineno + - simple_command,function_def production: reset simplecmd_lineno to -1 + after parsing a simple command or a function declared as WORD() + + 7/26 + ---- +doc/bash.1,doc/bashref.texi + - xpg_echo: add description of how this can be used to suppress echo + option interpretation + Inspired by report from Zachary Santer + + 7/27 + ---- +builtins/printf.def + - printf_erange: make out-of-range errors conversion errors even if + the conversion function fully consumes the argument. + From a report by thomas@habets.se + + 7/31 + ---- +lib/readline/rltypedefs.h + - rl_macro_print_func_t: typedef for a function to print macro key + bindings + +lib/readline/bind.c + - rl_macro_display_hook: hook function to call if the application + wants to display a key sequence bound to a macro + - rl_macro_dumper: if rl_macro_display_hook is non-NULL, call it to + display the macro value (after `untranslating' it to add back any + required backslashes) + +lib/readline/doc/rltech.texi + - rl_macro_display_hook: add description + +pathexp.c + - glob_char_p: add the characters that are special within BRE bracket + expressions. + Inspired by a report by Grisha Levit + +bashline.c + - bind_keyseq_to_unix_command: allow whitespace to separate the keyseq + and the command string, but require the command string to be + surrounded by double quotes if it is. If we get a whitespace + separator, call rl_macro_bind so we get the string `translated' + according to how readline does it (backslash-escape sequences + processed, etc.) + - print_unix_command: function to print a key sequence and a unix + command bound to it from cmd_xmap, using a space separator + - print_unix_command_map: make sure to set rl_macro_display_hook to + print_unix_command before calling rl_macro_dumper to print the + bound command strings + + 8/1 + --- +builtins/read.def + - read_builtin: saw_escape is now a count of CTLESCs we added to the + input + - read_builtin: since we increment saw_escape when we add a CTLESC, + decrement it when we remove one from the input (\\\n, \\\0) + - read_builtin: remove the CTLESC we added if we have a backslash- + escaped NULL character ('\0') + - read_builtin: if the input ends with an unescaped newline, remove + the CTLESC we added + From a report by Grisha Levit + + 8/2 + --- +builtins/history.def + - history_builtin: if history -[anrw] is used without a filename + argument, and HISTFILE is unset or null, return success immediately + From a report by Grisha Levit + +doc/{bash.1,bashref.texi},lib/readline/doc/hsuser.texi + - history: document that if filename is not supplied, and HISTFILE is + unset or null, the [-anrw] options have no effect + + 8/3 + --- +pcomplete.c + - gen_progcomp_completions: if the actual compspec that's run is + something different from what's typed (full pathname, alias, etc.), + set pcomp_curcmd to the word corresponding to the actual compspec, + instead of what was typed. This is what eventually gets used by + the compopt builtin's output. + From a report by Grisha Levit + +execute_cmd.c + - execute_coproc: in parent, close /dev/fd FIFOs only if we're not + executing a shell function, like other calls to unlink_fifo_list(). + Report from Hal Blackburn in + https://savannah.gnu.org/support/index.php?110910 + +subst.c + - do_compound_assignment: don't attempt to convert a global associative + array to an indexed array with declare -g. + From a report and patch by Grisha Levit + + 8/7 + --- +lib/readline/bind.c + - rl_print_keybinding: new function, prints a the key bindings for a + single function specified by name + - rl_function_dumper: call rl_print_keybinding for every function name + +lib/readline/readline.h + - rl_print_keybinding: extern declaration + +lib/readline/bind.c + - _rl_untranslate_macro_value: make sure characters betweeen 128 and + 159 (metafied control characters) are printed using the \M-\C- + notation instead of directly writing the control character. + From a report and patch by Grisha Levit + - rl_get_keyname: if a key binding shadows a function or macro, print + the ANYOTHERKEY binding as a null string + From a report and patch by Grisha Levit + - rl_untranslate_keyseq: make changes analogous to + _rl_untranslate_macro_value so that we don't print control characters + directly + - rl_invoking_keyseqs_in_map: if the key corresponds to a keymap, use + _rl_get_keyname to get its text representation, so this function + returns consistent results + - rl_translate_keyseq: if convert-meta is on, don't convert meta chars + that are, e.g., \M-\C-@ (128) into \e followed by a NUL, resulting + in truncated key sequences. Just don't honor convert-meta in this + case + + 8/8 + --- +bashhist.c + - bash_history_no_expand_chars: add the rest of the shell + metacharacters so we don't get empty history events; tcsh does more + or less the same thing + Inspired by a report from Emanuele Torre + + 8/9 + --- +parse.y + - grammar: change bare `time' and `!' productions to use nullcmd_terminator, + which is a list_terminator or a `&' to allow things like `time &' + and `! &' which the original version of POSIX interp 267 (the one + I implemented) says we should support + + 8/11 + ---- +m4/bison.m4,m4/flexmember.m4,m4/locale_h.m4 + - new m4 files from gettext-0.21.1 + +m4/gettext.m4,m4/intl.m4 +m4/{codeset,extern-inline,fcntl-o,glibc2,glibc21,host-cpu-c-abi,iconv,intdiv0}.$ +m4/{intl-thread-locale,intlmacosx,intmax,inttypes-pri,inttypes,inttypes_h}.m4 +m4/{lcmessage,lib-ld,lib-link,lib-prefix,locale_h,lock,nls,po,printf-posix}.m4 +m4/{progtest,pthread_rwlock_rdlock,size_max,stdint_h,strtoimax,threadlib}.m4 +m4/{uintmax_t,ulonglong,visibility,wchar_t,wint_t,xsize}.m4 + - updated m4 files from gettext-0.21.1 + +configure.ac,config.h.in + - updated autoconf files with changes for gettext-0.21.1 + +MANIFEST + - updated distribution manifest with new files from gettext-0.21.1 + +lib/sh/unicode.c + - u32cconv: prefer nl_langinfo to locale_charset like locale.c: + locale_isutf8() + +execute_cmd.c + - uw_restore_lineno: an unwind-protect fuction to restore a saved + line_number + - execute_command: add an unwind-protect to restore line_number in + case execute_simple_command longjmps back to top_level or a + return context. + Side effect of https://savannah.gnu.org/support/index.php?110919 + - execute_for_command, execute_select_command, execute_case_command: + add unwind-protect to restore line_number (could also do it for + if, while, until but those don't modify line_number) + - execute_command_internal: add_unwind_protect to restore line number + for arith, cond, function def commands + + 8/14 + ---- +execute_cmd.c + - execute_simple_command: don't call savestring on the_printed_command_except_trap + if it's NULL. + From a report by Grisha Levit + + 8/15 + ---- +lib/readline/rltty.c + - prepare_terminal_settings: replace USE_XON_XOFF macro with private + variable _rl_use_tty_xon_xoff (initially set to 1); if it's set to + 0 disable the tty start and stop characters. Prep for making it a + bindable variable setting + +builtins/read.def + - edit_line: now takes a third argument saying whether or not to + set rl_attempted_completion_function to NULL to use readline's + default filename completion (the default) + - read_builtin: new option -E to use readline and use the bash + default completion (that is, leave rl_attempted_completion_function + unchanged) + From a suggestion by konsolebox back in 5/2021 + + +doc/bash.1,doc/bashref.texi + - read: document new -E option + + 8/17 + ---- +aclocal.m4 + - BASH_CHECK_LIB_TERMCAP: add a check for bash_cv_termcap_lib == + "libcurses"; set TERMCAP_LIB=-lcurses in this case + + 8/18 + ---- +subst.c + - bash_variable_assignment_error: new function, implements default mode + behavior for variable assignment errors + - posix_variable_assignment_error: new function, implements posix mode + behavior for variable assignment errors + - parameter_brace_expand_rhs,expand_declaration_argument, + do_assignment_statements: call posix_variable_assignment_error or + bash_variable_assignment_error as appropriate + + 8/21 + ---- +lib/readline/misc.c + - _rl_arg_dispatch: add the digits or other characters to + rl_executing_keyseq if we're not calling _rl_dispatch. + From a report by Grisha Levit + +print_cmd.c + - print_simple_command: make sure that the_printed_command[0] == '\0' + if we're printing a null simple command with no words + Patch by Grisha Levit + + 8/22 + ---- +builtins/read.def + - read_builtin: make `delim' variable local, pass to edit_line to + set the last character of the returned line; change edit_line + prototype. + From a suggestion by Grisha Levit + + 8/23 + ---- +parse.y + - comsub and funsub productions: don't reset eof_encountered to 0 in + the action + +subst.c + - function_substitute: unwind-protect eof_encountered so ignoreeof + doesn't keep getting reset to 0 if PS1 includes a ${ ...;} command. + From a report by Grisha Levit + + 8/25 + ---- +doc/{bash.1,bashref.texi} + - clarify the cases where arrayname[@] doesn't refer to all the + elements of an associative array (the unset builtin and test/[/[[ -v + for now) + Inspired by https://savannah.gnu.org/support/index.php?110924 + + 8/28 + ---- +execute_cmd.c + - execute_for_command,execute_select_command,execute_arith_command, + execute_case_command: fix up order in which BASH_COMMAND is set, + the DEBUG trap is run, and PS4 is printed. + From a report by Grisha Levit + +lib/readline/colors.c + - RL_COLOR_PREFIX_EXTENSION: make sure the custom suffix has a leading + `.' + Report and fix from Stefan Klinger + +lib/readline/parse-colors.c + - free_color_ext_list: new function, called on parse error, frees the + list of extensions + - rl_reparse_colors: new public function, frees old extension list and + reparses (presumably new) value of LS_COLORS; some minimal checking + to make sure the value has really changed + + 9/1 + --- +parse.y + - time_command_acceptable: make sure `time' is recognized as a + reserved word after DOLPAREN and DOLBRACE. + Report from Dima Korobskiy + +builtins/printf.def + - printf_builtin: make 'C' equivalent to 'lc'; 'S' equivalent to 'ls' + as POSIX specifies + + 9/6 + --- +eval.c + - parse_command: don't run pending traps if we're parsing a command + substitution + From a report from Emanuele Torre + + 9/8 + --- +jobs.c + - stop_pipeline: don't have the parent set the terminal pgrp; rely on + child processes to do it to avoid potential race conditions. + From a discussion beginning at + https://lists.gnu.org/archive/html/bug-bash/2023-08/msg00087.html + +builtins/printf.def + - bexpand: when parsing the string to be expanded, consume entire + multibyte characters at a time, in case their encoding includes a + '\\' + - printf_builtin: when parsing the format string, consume entire + multibyte characters at a time unless they begin with '\\' or '%', + to avoid characters whose encoding contains those characters + + 9/11 + ---- +builtins/hash.def + - hash_builtin: if the -p option is supplied without a name to hash, + it's an error + +hashcmd.c + - phash_remove: if the hash table is empty, return 1 like unalias does + when the alias isn't in the hash table. + Report from from Mike Jonkmans + + 9/13 + ---- +test.c + - binary_test,unary_test: now static + - cond_test: new function, calls binary_test or unary_test as appropriate + and handles longjmps from test_syntax_error + +test.h + - cond_test: extern declaration + +execute_cmd.c + - execute_cond_node: call cond_test instead of binary_test or unary_test. + From a report and patch from Grisha Levit + +doc/bash.1,doc/bashref.texi + - hash: add some text about the mutual exclusivity of the -t, -p, and + -d options + + 9/14 + ---- +subst.c,subst.h,externs.h + - string_extract,string_extract_verbatim,string_extract_double_quoted, + string_extract_single_quoted,skip_single_quoted,skip_double_quoted, + extract_delimited_string,extract_heredoc_dolbrace_string, + extract_dollar_brace_string,parameter_brace_expand,param_expand, + extract_command_subst,extract_function_subst,extract_arithmetic_subst, + extract_process_subst,extract_array_assignment_list, + expand_array_subscript + change function signatures to take size_t * instead of int * for + arguments that are string indices or lengths, change callers + - unquoted_substring,unquoted_member,string_extract, + string_extract_double_quoted,skip_double_quoted, + string_extract_single_quoted,skip_single_quoted, + string_extract_verbatim,extract_delimited_string, + extract_heredoc_dolbrace_string,extract_dollar_brace_string, + parameter_brace_expand,param_expand,skip_matched_pair,skip_to_delim, + skip_to_histexp,list_string,expand_string_dollar_quote, + parameter_brace_expand_rhs,expand_array_subscript,shouldexp_replacement, + expand_array_subscript,string_quote_removal: change variables used + for string indexes to size_t + [merge from size_t branch] + +arrayfunc.c + - expand_compound_array_assignment: use size_t for string indices + +braces.c + - brace_gobbler: use size_t for string indices + +parse.y + - xparse_dolparen: change function signature to use size_t * + instead of int * for string index, use size_t for string indices + +general.c, general.h + - bash_tilde_find_word: change function signature to use size_t * + instead of int * for string index + +lib/readline/readline.h + - rl_reparse_colors: extern declaration + +lib/readline/doc/rltech.texi + - rl_reparse_colors: document as public function + + 9/21 + ---- +pcomplete.c + - it_init_aliases: move the free (alias_list) inside #ifdef ALIAS. + Report and fix from Mike Jonkmans + +redir.c + - redirection_error: set W_NOPROCSUB in the word redirection_error + creates to call redirection_expand + +builtins/bind.def + - bind_builtin: use CASE_HELPOPT so the long doc gets printed when + --help is supplied + +builtins/getopts.def + - getopts_builtin: change to use no_options() + + 9/22 + ---- +execute_cmd.c + - execute_select_command: in posix mode, an invalid selection variable + name is a fatal error, just like with `for'. This is compatible with + ksh93 and mksh + + 9/25 + ---- +subst.c + - parameter_brace_expand_length: rearrange the code slightly to reduce + the number of find_variable calls. This matters if the variable is + dynamic and produces a new value each time (e.g., RANDOM). + + 9/26 + ---- +builtins/shift.def + - shift_builtin: if get_numeric_arg returns a number out of range and + we're going to print an error message, make sure to skip over an + argument of `--' so we can print the right argument + +builtins/break.def + - break_builtin,continue_builtin: ditto with get_numeric_arg and `--' + + 9/28 + ---- +builtins/history.def + - history_builtin: changed error message if the numeric argument to -d + is invalid + + 9/29 + ---- +subst.c + - array_length_reference: include the open bracket in the error message + passed to err_badarraysub; it looks cleaner + + 10/2 + ---- +jobs.c + - delete_all_jobs: if we are clearing the jobs list, reset the stats + about running and dead jobs and child processes + Report from Koichi Murase + + 10/4 + ---- +lib/readline/complete.c + - rl_completion_rewrite_hook: rewrite hook applied to the completion + word before comparing against the possible completions from the + file system (modified by rl_filename_rewrite_hook) + - rl_filename_completion_function: call rl_completion_rewrite_hook, + if set by the calling application, on the filename portion of the + word to be completed + +lib/readline/readline.h + - rl_completion_rewrite_hook: extern declaration + +bashline.c + - bash_set_filename_hooks: set rl_completion_rewrite_hook to + bash_filename_rewrite_hook now that we've separated them + From a report and patch from Grisha Levit ; + original report from Stefan H. Holek + +lib/readline/doc/rltech.texi + - rl_completion_rewrite_hook: document + + 10/5 + ---- +lib/readline/complete.c + - rl_complete_internal: use `%' as an op character to indicate that + we should just display the completions, like '?' in previous versions + (nothing uses this yet) + - rl_possible_completions: set last_completion_failed to 0 before we + pass '?' to rl_complete_internal so we don't worry about trying to + insert a single completion + + 10/6 + ---- +subst.c + - string_transform: use ansicstr directly for the `E' transformation + so we don't accidentally remove too many escapes. + From a report and patch from Grisha Levit + +execute_cmd.c + - execute_arith_for_command: make sure a failed init expression resets + loop_level so break and continue work correctly + From a report and patch from Grisha Levit + - execute_for_command: set line_number for invalid identifier error + messages; restore before returning error + From a report and patch from Grisha Levit + +lib/readline/misc.c + - _rl_set_insert_mode: manage RL_STATE_OVERWRITE when modifiying + insert mode + +doc/bash.1,doc/bashref.texi + - some style and formatting changes from Bjarni Ingi Gislason + + +subst.c + - getifs: now returns allocated memory to insulate it from changes to + $IFS + +builtins/read.def + - read_builtin: since getifs now returns allocated memory, note when + we need to free ifs_chars and free it before returning. + Reported by Robert Elz in + https://www.austingroupbugs.net/view.php?id=1778#c6513 + + 10/7 + ---- +pathexp.c + - glob_char_p: add more of the extglob pattern characters; it doesn't + hurt to quote them + Report and patch from Grisha Levit + - unquoted_glob_pattern_p: don't treat a `(' immediately following a + `/' as a potential globbing character + - unquoted_glob_pattern_p: only treat the extended glob characters + followed by a `(' as a glob pattern if extended_glob is enabled + - unquoted_glob_pattern_p: an unquoted backslash isn't treated + specially any more, but if it's followed by a CTLESC, you still + don't treat the next character as an unquoted globbing char + Report and patch from Grisha Levit + + 10/9 + ---- +builtins/common.c + - get_numeric_arg: if fatal > 0, set the exit status to EX_USAGE + and call jump_to_top_level with EXITPROG or DISCARD. We don't + need to do everything that throw_to_top_level() does here (it's + really meant for signals and other exceptional failure conditions). + +builtins/cd.def + - cd_builtin: exit with EX_USAGE on too many arguments + +builtins/shift.def + - shift_builtin: return EX_USAGE if get_numeric_arg returns 0, + indicating that the argument wasn't a valid number + +builtins/history.def + - shift_builtin: return EX_USAGE if get_numeric_arg returns 0 + +builtins/exit.def + - exit_or_logout: if get_exitstat (which calls get_numeric_arg) returns + a value > EX_SHERRBASE, indicating an error, just return that to + the caller and let the caller deal with it. This means that + `exit xyz' is no longer a fatal error, but can potentially cause a + non-interactive posix-mode shell to exit because exit is a special + builtin + +builtins/return.def + - return_builtin: if a non-interactive shell in posix mode gets an + invalid numeric arg from get_exitstat, return immediately and let + the caller deal with exiting + All prompted by a report by Martin Schulte + + 10/13 + ----- +pathexp.c + - unquoted_glob_pattern_p: restore some of the special treatment of + backslash followed by CTLESC removed on 10/7 + Report and patch from Grisha Levit + +parse.y + - parse_matched_pair: don't add an extra CTLESC after reading \CTLESC, + like in other parts of the parser + +subst.c + - dequote_string: don't drop trailing CTLESC in a string with more + than a single character + Report and patch from Grisha Levit + +lib/sh/strtrans.c + - ansicstr: handle $'\c^A' and $'\c^?' correctly when being expanded + by the parser (flags&2). The parser passes these as \c^A^A and + \c^A^?, respectively, so we should strip the quoting CTLESC. + Report from Grisha Levit + +subst.[ch] + - extract_dollar_brace_string: now global so brace expansion can use it + +braces.c + - brace_gobbler: use extract_dollar_brace_string if we see ${ with + the appropriate value of QUOTING, so we don't have to teach brace + expansion more shell syntax. + Report from Emanuele Torre + - brace_gobbler: call the word extraction functions with SX_NOALLOC + so we don't have to allocate memory we're just going to free + + 10/16 + ----- +builtins/read.def + - read_builtin: return EX_MISCERROR (2) if there is an error trying + to assign to one of the variables. This is what the newest POSIX + draft specifies. + +variables.c + - dispose_variable_value: do the right thing for att_nofree vars + - makunbound: call dispose_variable_value instead of using inline code + +braces.c + - brace_gobbler: make sure to set no_longjmp_on_fatal_error around + calls to extract_dollar_brace_string + + 10/17 + ----- +braces.c + - brace_gobbler: set SX_NOLONGJMP|SX_NOERROR in the flags passed + to extract_command_subst; make sure no_longjmp_on_fatal_error + is set before that call + - brace_gobbler: revert 10/13 change to use extract_dollar_brace_string + + 10/20 + ----- +parse.y + + - xparse_dolparen,parse_string_to_command: if SX_NOERROR is set in + FLAGS, add PST_NOERROR to parser_state. Not much effect yet. + - parse_matched_pair: if PST_NOERROR is set in parser_state, don't + print an error message if we hit EOF, just return an error. A start + at using PST_NOERROR to suppress error messages, not just duplicate + ones. We'll see how this goes before adding more + +builtins/printf.def + - decodeprec: decode the precision into an intmax_t; clamp the return + value at INT_MAX + - printf_builtin: update to posix interp 1647 (even though it's about + fprintf(3)) and output a NUL byte if %lc is supplied a null argument. + - printf_builtin: fix case where %Q is supplied with a precision in + the format string + - printf_builtin: fix case where %Q is supplied with a precision + greater than INT_MAX + - getwidestr,getwidechar: handle case where there is no argument + supplied; return NULL or NUL + - convwidestr: allow a precedence of 0 for %ls + - getint: don't call getintmax any more, just use the same code style + inline; getintmax will consume an extra argument on an error + Report and patches from Grisha Levit + - printf_builtin: handle field width and precision overflow from + getint() by ignoring the argument (fieldwidth = 0, precision = -1) + + 10/26 + ----- +jobs.c + - wait_for: rearrange code that sets the SIGINT handler to + wait_sigint_handler and saves the old handler to old_sigint_handler + to avoid delay before assigning the handler + Report from Wenlin Kang + - wait_sigint_handler: if cur_sigint_handler (what restore_sigint_handler) + just restored or ignored) is INVALID_SIGNAL_HANDLER, set the + appropriate SIGINT handler with set_sigint_handler before sending + ourselves SIGINT + + 10/30 + ----- +general.c + - legal_number: use the same test (isspace(3)) to skip trailing + whitespace that strtoimax uses to skip leading whitespace. + Report and patch from Paul Eggert + +general.c,general.h + - legal_number: renamed to valid_number, changed all callers + - legal_identifier: renamed to valid_identifier, changed all callers + - legal_alias_name: renamed to valid_alias_name, changed all callers + +lib/sh/compat.c + - legal_number: definition of legal_number here for backwards compat + with old loadable builtins + - legal_identifier: definition of legal_identifier here for backwards + compat with old loadable builtins + - legal_alias_name: same + +subst.c + - brace_expand_word_list: if brace_expand returns NULL, dummy up a + single-element vector with a copy of the original word so we can + add it to the result list unchanged. + Inspired by https://savannah.gnu.org/support/?110948 + + 11/3 + ---- +lib/readline/text.c + - readstr: set of functions to read a string from the keyboard, using + rl_line_buffer for temporary storage, with minimal editing and an + optional caller-supplied completion function. Doesn't use the + callback framework yet since none of the functions are public + - rl_execute_named_command: new bindable function to read a bindable + command name (from the funmap_names array) and execute it, with + command name completion on SPACE and TAB + +lib/readline/readline.h + - rl_execute_named_command: new extern declaration + +lib/readline/rlprivate.h + - new extern declarations for the readstr function framework + +lib/readline/funmap.c + - execute-named-command: new bindable function name + +lib/readline/emacs_keymap.c + - rl_execute_named_function: bound to M-x by default + +lib/readline/doc/rluser.texi + - execute-named-command: document as bindable function name with its + default binding to M-x in emacs mode + + 11/6 + ---- +lib/readline/search.c + - _rl_nsearch_dispatch: use ^V/^Q for rl_quoted_insert into the + search string + +lib/readline/isearch.c + - _rl_isearch_dispatch: use ^V or anything bound to rl_quoted_insert + for rl_quoted_insert into the search string + +lib/readline/terminal.c + - add support for new BE/BD and PS/PE bracketed-paste capabilities. + Nothing uses them yet. + + 11/10 + ----- +builtins/enable.def + - dyn_load_builtin: if we don't find a pathname argument without a + slash in BASH_LOADABLES_PATH, convert it to a pathname with a slash + before calling dlopen, to force the loader to look in the current + directory (Linux, for example, will not). + + 11/14 + ----- +examples/loadables/fdflags.c + - fdflags_builtin: only parse the setspec once, since parsing uses + strtok. + Report and patch from Emanuele Torre + + 11/15 + ----- +builtins/enable.def + - dyn_load_builtin: if BASH_LOADABLES_PATH is set, use only it: don't + fall back to looking in the current directory. This changes the + historical behavior and brings the path behavior more in line with + PATH, but not CDPATH. + + 11/20 + ----- +lib/readline/complete.c + - rl_complete_internal: add `|' as a character for rl_complete_internal + that also just displays the completions, since `%' is overloaded by + rl_menu_complete + + 11/23 + ----- +examples/loadables/strptime.c + - strptime: new loadable builtin, interface to strptime(3). Takes a + date-time string as its arguments and tries to parse it according + to a number of built-in formats. If successful, it outputs the + result as a number of seconds since the epoch. Understands some + handy shorthands like "now" and "tomorrow". + + 11/24 + ----- +tests/unicode1.sub + - update the driver function using namerefs and ${!x[@]} + - zh_TW.BIG5: fixed some problems with the test encodings. + Report and patches from Grisha Levit + + 11/25 + ----- +tests/glob2.sub + - zh_HK.big5hkscs -> zh_TW.big5 to work around macOS 14 issues with + BSD-based locale definition + +bashline.c + - bash_execute_unix_command: check count != 1 instead of count > 1 to + handle negative arguments + +lib/readline/bind.c + - rl_trim_arg_from_keyseq: change the parsing_digits logic to handle + multiple instances of `-' the same way rl_digit_loop does (collapse + to 1) + - rl_trim_arg_from_keyseq: fix typo to correctly recognize a `-' + after a key sequence bound to universal-argument + - rl_trim_arg_from_keyseq: trim negative argument for a key sequence + that is shadowed by a longer key sequence (ANYOTHERKEY) + Report and patches from Grisha Levit + + 11/27 + ----- +support/shobj-conf + - solaris2: change PIC option for non-gcc Solaris 2 builds + +lib/malloc/malloc.c + - binsize: make sure indexing into binsizes casts to size_t (unsigned) + +examples/loadables/getconf.c + - protect more of the _SC defines with #ifdefs for different systems + +examples/loadables/fdflags.c + - ALLFLAGS: add some more flag values from Solaris/AIX/HP-UX + + 11/28 + ----- +subst.c + - function_substitute: unwind return_catch_flag unconditionally + Report and patch from Grisha Levit + - function_substitute: save getopts state and restore it if the + funsub declares a local copy of OPTIND + Report and patch from Grisha Levit + +lib/readline/display.c + - rl_redisplay: make sure lpos is initialized to 0 if local_prompt is + NULL + +shell.c + - run_startup_files: make sure ssh_reading_startup_files is set to 0 + in more places; still dependent on SSH_SOURCE_BASHRC + +builtins/evalstring.c + - should_suppress_fork: make sure ssh_reading_startup_files is 0 in + order to suppress a fork. It will never be non-zero unless someone + enables SSH_SOURCE_BASHRC. + Fixes https://issues.redhat.com/browse/RHEL-5653 + +variables.c + - posix_unbind_tempvar: new function to implement POSIX interp 1009, + which says that `x=4 unset x' not only unsets the variable in the + temporary environment but the most recent scope as well. + +variables.h + - posix_unbind_tempvar: extern declaration + +builtins/set.def + - unset_builtin: if we are unsetting a variable that is in some + temporary environment, and the shell is in posix mode, call + posix_unbind_tempvar to implement the right posix behavior + +doc/bashref.texi + - update posix mode section with change to unset for interp 1009 + + 12/1 + ---- +lib/readline/readline.c + - _rl_subseq_result: add check before _rl_do_lowercase_version that + _rl_to_lower actually results in a different key sequence + Report and patch from Grisha Levit + +lib/readline/isearch.c + - _rl_isearch_dispatch: if the function bound to a key and the function + bound to the result of _rl_to_lower for that key are both + rl_do_lowercase_version, just insert the key into the search string + + 12/5 + ---- +parse.y,parser.h + - heredoc_string: new variable to indicate whether or not we're reading + a here-document from an alias (a pushed string). Set in + gather_here_documents individually for each call to + make_here_document. + +parse.y + - read_a_line: if heredoc_string is non-zero, use shell_getc instead + of yy_getc to get the right alias processing + - shell_getc: if heredoc_string is non-zero, don't add a space to the + end of the alias -- it can mess up the here-document delimiter if + the next character is a newline + Report and sample patch from gldrk + +parse.y,make_cmd.c + - read_a_line,make_here_document: if we're using shell_getc to read + the body of a here-document, let it manage line_number + + 12/8 + ---- +bashline.c + - bash_dequote_filename: fix an off-by-one error that didn't remove a + closing single quote in a filename if it was backslash-escaped. + Report by Ole Tange , fix from Grisha Levit + +lib/readline/terminal.c + - _rl_check_ansi_terminal: check whether or not rl_terminal_name + appears to be an ANSI/ECMA-48 terminal. Check some common terminal + types and then check whether some common terminal capabilities + (ce, nd, ho, up) begin with CSI (ESC-[) and then have a correct + subsequent character + - _rl_term_isansi: new variable, holds readline's idea about whether + the value of rl_terminal_name is an ANSI/ECMA-48 terminal. Initialized + to RL_ANSI_TERM_DEFAULT; set to the result of _rl_check_ansi_terminal + if initialized to 0 and on a `non-dumb' terminal + From an idea by John Tsiombikas in 11/2023 + +lib/readline/rlconf.h + - RL_ANSI_TERM_DEFAULT: define to 1 (yes) or 0 (no) to tell readline + whether or not to assume it's running on an ANSI/ECMA-48 terminal. + The default is 1 (yes) + + 12/11 + ----- +print_cmd.c + - make_command_string_internal: when printing a coproc, print the + coproc name only if the coproc command is not a simple command. + Report from Albert Akchurin + + 12/14 + ----- +doc/bash.1,doc/bashref.texi + - bind: clarify meaning of `re-read' as being individual arguments + to `bind'. + Report from Dan Jacobson + - history expansion: add that the quick substitution character is + only active when it's the first character on the line. + Suggested by Dale R. Worley + +lib/readline/histexpand.c + - history_expand: if history_quoting_state is "'", don't try to + interpret the quick substitution syntax at the start of the string. + Report from Sundeep Agarwal + +execute_cmd.c,execute_cmd.h + - save_lastarg: new function, returns saved value of $_ in allocated + memory + +parse.y + - execute_variable_command: instead of inline code, call save_lastarg + +mailcheck.c + - check_mail: instead of inline code, call save_lastarg + - check_mail: instead of calling bind_variable, use bind_lastarg + +parse.y + - decode_prompt_string: use save_lastarg() and bind_lastarg() to preserve + the value of $_ across prompt string decoding. + Patch from Grisha Levit + + 12/21 + ----- +lib/readline/doc/readline.3 + - updates to some vi-mode bindings + Patch from Josh Brobst + +builtins/setattr.def + - set_or_show_attributes: in posix mode, supplying an argument that is + not an identifier when not acting on functions is a utility error. + This will cause a non-interactive shell to exit + + 12/27 + ----- +print_cmd.c + - command_print_word_list,print_select_command_head,print_case_command_head, + print_function_def: if we're in pretty-print mode, dequote words + before printing them + Report from Seth Sabar + +shell.c + - execute_profile_file,execute_bashrc_file: separate the (duplicated) + code that sources the various profile and bashrc files out into + separate functions + - find_bashrc_file: new function, returns the name of the interactive + shell startup file that should be executed if --rcfile (--init-file) + is not supplied; currently returns DEFAULT_BASHRC + - bashrc_file: default to NULL, making it just the filename supplied as + an argument to --rcfile/--init-file + - execute_bashrc_file: execute whatever find_bashrc_file() returns + if bashrc_file is NULL + From a patch from Allison Karlitskaya + + 1/3/2024 + -------- +print_cmd.c + - print_case_clauses: if we're printing a comsub for subsequent parsing, + don't add a newline before the first case clause, since it adds a + token after the `in' that will allow reserved words to be parsed. + Report from Oguz + + 1/5 + --- +lib/readline/doc/rltech.texi,lib/readline/doc/readline.3 + - Note that since quoted characters are possible, the line readline() + returns may contain embedded newlines. + From a report by Martin Buck + + 1/8 + --- +parse.y + - parse_compound_assignment,parse_string_to_word_list: if we call + reset_parser, directly or indirectly via yyerror, make sure to set + the pushed_strings member of the saved parser state to NULL, since + reset_parser already freed it and we don't want to try and restore + it in restore_parser_state. + From a report by Nathan Mills + + 1/10 + ---- +builtins/hash.def, builtins/ulimit.def + - add some calls to sh_chkwrite where there is builtin output + +lib/sh/eaccess.c + - sh_stat: use strcpy/strcpy when constructing pbuf instead of + strcpy/strcat + +lib/sh/tmpfile.c + - sh_mktmpname,sh_mktmpfd,sh_mktmpdir: use snprintf (filename, PATH_MAX, ...) + instead of sprintf (filename, ...) + + 1/11 + ---- +configure.ac + - unconditionally AC_DEFINE(PGRP_PIPE), to prevent the problem with a + pipeline and a DEBUG trap containing an external command described + in https://lists.gnu.org/archive/html/bug-bash/2024-01/msg00037.html + + 1/12 + ---- +jobs.c + - wait_for_any_job: if we're executing a funsub/varsub, do the wait + even if the jobs list is frozen, but don't remove the job from the + table or change its notification status + Report from Oguz + +subst.c + - uw_unbind_variable: unset the first instance of the named variable, + don't follow namerefs. This is for REPLY in a varsub if it's made + a nameref. + Report from Oguz + +shell.c + - main: call compat_init() so the linker drags in the old compatibility + functions from lib/sh/compat.c. Primarily for use by existing loadable + builtins + +parse.y + - parse_compound_assignment: handle error case (wl == &parse_string_error) + before restoring the parser state from ps + Report from Grisha Levit + + 1/13 + ---- +lib/readline/complete.c + - compute_lcd_of_matches: move a strlen out of a call to MBRTOWC by + computing the length of the entire string once and then using an + offset from it while going through the loop + + 1/15 + ---- +parse.y + - parse_compound_assignment: treat parsing a string following (( (read + by parse_dparen but not an arithmetic command) the same as + expanding an alias when fixing up the pushed string list + Report from Grisha Levit + + 1/18 + ---- +doc/bash.1 + - typos and style fixes to satisfy groff warnings; remove uses of the + `CW' constant-width font; use .EX/.EE for examples; use consistent + style for double-quoted strings; fix inconsistent inter-paragraph + spacing + Fixes from G. Branden Robinson + + 1/19 + ---- +test.c + - binary_test: make sure all calls in posix mode use TEST_LOCALE for + locale-specific string comparisons + +shell.c + - find_bashrc_file: remove + + 1/20 + ---- +shell.c + - exit_shell: don't try to call rl_deprep_terminal, regardless of the + readline state we inherited, if bash_readline_initialized is 0 + Fixes bug reported by Oguz + - shell_reinitialize: reset startup_state and reading_shell_script to 0; + reset debugging_mode to 0 + + 1/22 + ---- +builtins/shopt.def + - reset_shopt_options: reset debugging_mode to 0 + +builtins/set.def + - reset_shell_options: reset interactive_comments to 1 + +braces.c + - brace_expand: if the first call to brace_gobbler consumes the entire + string, don't try to call it again + - brace_expand: check that i < tlen before checking to see if + expand_seqterm left more of the string unconsumed + - brace_gobbler: if extract_command_subst hits the end of the string + without closing the command substitution, make sure we return 0 as + well as set *i = tlen + From a fuzzing report by Nathan Mills + + 1/23 + ---- +subst.c + - function_substitute: unwind-protect current_builtin and this_shell_builtin + like we do this_shell_function + From a fuzzing report by Nathan Mills + + 1/24 + ---- +braces.c + - brace_gobbler: handle nofork command substitutions; skip over any + enclosed command and any braces it contains + +bashline.c + - check_redir: return 0 if we're in a nofork comsub, so we will attempt + command word completion if appropriate + + 1/26 + ---- +lib/readline/readline.h + - RL_STATE_READSTR: new state flag saying we are reading an arbitrary + string from the keyboard using rl_readstr + +lib/readline/rlprivate.h + - READSTR_FREEPMT: new context state flag for rl_readstr; indicates + that we have allocated a new prompt with _rl_make_prompt_for_search + and we should free it with rl_restore_prompt because rl_clear_message + will not do it + +lib/readline/text.c + - _rl_readstr_init,_rl_readstr_cleanup: set and unset RL_STATE_READSTR + - _rl_unsave_saved_readstr_line: free any rl_undo_list, which we may + have accumulated while reading the string, before restoring the line + Fixes leaks reported by sparrowhawk996@gmail.com. + - _rl_readstr_init: set the READSTR_FREEPMT context flag after we + call _rl_make_prompt_for_search, which calls rl_save_prompt + - _rl_readstr_sigcleanup: new function to call from signal cleanup; + restores prompt and calls _rl_readstr_cleanup to free the readstr + context + - _rl_readstr_restore: if the RL_READSTR_FREEPMT flag is set in the + context, call rl_restore_prompt to deallocate the prompt we created + +lib/readline/callback.c + - rl_callback_sigcleanup: call _rl_readstr_sigcleanup to deallocate + readstr state on a signal + +lib/readline/text.c + - rl_execute_named_command: free COMMAND before returning + + 1/27 + ---- +lib/readline/rlprivate.h + - SF_FREEPMT: new flag for non-incremental search contexts: means we + saved the prompt data with _rl_make_prompt_for_search and need to + restore it with rl_restore_prompt, since rl_clear_message will not + +lib/readline/search.c + - _rl_nsearch_sigcleanup: new function that if calls rl_restore_prompt + to clean up the saved prompt data if necessary before calling the + context cleanup function, avoids memory leak + - _rl_nsearch_init: set the SF_FREEPMPT flag after calling + _rl_make_prompt_from_search so we can clean it up properly on errors + - _rl_nsearch_abort,_rl_nsearch_dosearch: call rl_restore_prompt only + if cxt->sflags includes SF_FREEPMT, manage SF_FREEPMT state + +lib/readline/signals.c + - _rl_state_sigcleanup: call _rl_nsearch_sigcleanup + +lib/readline/callback.c + - _rl_callback_sigcleanup: call _rl_nsearch_sigcleanup + + 1/29 + ---- +builtins/cd.def + - change_to_directory: don't try to canonicalize a NULL path that's + NULL after make_absolute. + From a report by Kerin Millar + +jobs.c + - retrieve_proc_status,delete_proc_status: external interfaces to + bgp_search and bgp_delete, respectively; these take an argument + that says whether or not to block SIGCHLD + +jobs.h + - retrieve_proc_status,delete_proc_status: extern declarations + +builtins/wait.def + - check_bgpids: new function to check whether a requested PID is in + the bgpids table (retrieve_proc_status) and optionally delete it + if it is (posixly_correct delete_proc_status) while returning its + status. If the PID isn't in the bgpids table, return -1 + - wait_builtin: if -n is supplied with pid/job arguments, use + check_bgpids to check the bgpids table for any of the requested + pids. Tagged for bash-5.3, might need another option + From a report by Steven Pelley + + 1/30 + ---- +redir.c + - redir_open: assume the AFS bug with O_CREAT and existing files in + protected directories has been fixed over the years, so take out + the workaround. + From a report by Etienne Champetier + +jobs.c + - wait_for_any_job: if the jobs list is frozen and we're running a + funsub, mark the job as notified so it gets cleaned up later + - wait_for_any_job: if we're in posix mode, we should remove the job + from the job list and not add it to the bgpids list, as posix + requires + +builtins/set.def + - set_shellopts: use ASS_FORCE in the call to bind_variable so we + don't have to mess with temporarily turning off readonly + +builtins/shopt.def + - set_bashopts: same + Report by Emanuele Torre + + 2/1 + --- +builtins/printf.def + - vblen: make it a size_t to avoid going negative on underflow + - clearerr, ferror, fflush: don't test these if vflag is set and we're + writing to a string (multiple places) + - vbprintf: pass through failure returns (< 0) from vsnprintf to the + caller(s) so we can return on errors + - printf_builtin: remove redundant test for empty or missing format + string + - PF: call builtin_error if vflag is set, sh_wrerror otherwise + (via PRETURN) + - PF: use PRETURN so we can get partial output to the variable on + error (if vflag is set) + - PRETURN: free conv_buf before attempting the write (it would get + cleaned up on the next call, but why not) + - PRETURN: clean up vbuf only if vflag is set, and clean it up on + error (it would get cleaned up on the next call, but...) + Fixes from Grisha Levit + + 2/2 + --- +doc/bash.1,doc/bashref.texi + - word expansions: make it clearer that quote removal is one of the + shell word expansions + +execute_cmd.c,execute_cmd.h + - currently_executing_command: no longer static, so other parts of + the shell can save and restore it if necessary + +subst.c + - function_substitute: unwind-protect currently_executing_command, + since parse_and_execute can overwrite it in the current shell + execution context. + Report from Grisha Levit + +lib/readline/readline.c + - readline_common_teardown: new function from the guts of + readline_internal_teardown, manages and deallocates rl_undo_list. + +lib/readline/callback.c + - rl_callback_handler_remove: if we're removing the line handler + while we still have an undo list, we didn't call + readline_internal_teardown. Call readline_common_teardown to manage + the undo list in case we are calling this from a signal handler + but not exiting the program. + Fixes leaks reported by sparrowhawk996@gmail.com. + +variables.c + - initialize_shell_variables: use ASS_FORCE when binding SHELLOPTS or + BASHOPTS if we get them from the environment, in case they've + already been created as shell variables and set to readonly (like + changes from 1/30) + - set_ppid: use ASS_FORCE in the call to bind_variable instead of + temporarily turning off att_readonly + +subst.c + - extract_delimited_string: pass FLAGS down to skip_single_quoted and + skip_double_quoted so we propagate SX_COMMAND and SX_COMPLETE + properly. + Fixes bug reported by A4-Tacks + + 2/3 + --- +bashline.c + - initialize_readline: add `bash-vi-complete' as a bindable command + name so users can bind other key sequences to it + - vi_advance_point: function to advance point by one character even + in the presence of multibyte characters + - bash_vi_complete: call vi_advance_point instead of just incrementing + rl_point + + 2/5 + --- +doc/bash.1,lib/readline/doc/readline.3 + - minor updates to handle old versions of troff and groff warnings + Fixes from G. Branden Robinson + + 2/7 + --- +jobs.c + - notify_of_job_status: in non-interactive shells, if we're not going + to print information about a terminated background job + (SIGINT/SIGTERM/SIGPIPE), don't mark it as notified, in the same + way that we don't mark background jobs that exit cleanly as notified + Inspired by a discussion with Robert Elz and + https://lists.gnu.org/archive/html/bug-bash/2024-01/msg00189.html + + 2/9 + --- +lib/readline/history.c + - DEFAULT_HISTORY_GROW_SIZE: bump up to 256 + - real_history, real_history_size: the true history array and its + allocated size. the_history begins a user-visible window into this + list, extending for history_size entries + - history_list_grow_size: compute how much to extend the history list; + increase by roughly sqrt(history_size), don't extend by less than + (new) DEFAULT_HISTORY_GROW_SIZE + - history_list_resize: possibly resize/realloc real_history and reset + the_history to real_history and history_size to real_history_size + - advance_history: make the `window' that the_history provides into + real_history advance to simulate dropping an initial entry; don't + need to memmove all the entries any more + - add_history: call advance_history as necessary to move the_history + window + - add_history: call history_list_resize as necessary + Report and initial patch from Casey Johnson + + 2/12 + ---- +bashline.c,lib/readline/bind.c,lib/readline/display.c + - replace some sprintf calls with snprintf to appease clang + +execute_cmd.c + - execute_simple_command: unwind-protect this_command_name, since we + assign it to something we will free if unwind-protects are run + - execute_function: unwind-protect currently_executing_command, since + execute_command_internal will change it to something will will free + if unwind-protects are run + Report from Grisha Levit + - execute_function: if we didn't compile with debugger support, restore + currently_executing_command after run_debug_trap, like in other + cases + + 2/13 + ---- +builtins/declare.def + - declare_invalid_opts: move the code that checks for invalid option + combinations to its own function; it returns 0 for no errors and + a return code for declare_internal to return otherwise + Inspired by report from Grisha Levit + - declare_invalid_opts: make -A -a and -A +A/-a +a option combinations + invalid + Report from Grisha Levit + + 2/14 + ---- +bashline.c,general.c,subst.c,lib/sh/pathphys.c,builtins/read.def, +support/bashversion.c + - changes for cygwin and msys (no new features) + +bashline.c,builtins/fc.def,general.c,parse.y,stringlib.c,subst.c,variables.c + - MSYS-specific changes to support \r\n line endings and DOS-style + paths + +configure.ac,cross-build/msys32.cache,support/config.rpath,support/shobj-conf + - MSYS-specific build options + +configure.ac,config.h.in,m4/unlocked-io.m4,general.h,include/unlocked-io.h +MANIFEST + - adapt Gnulib's unlocked-io module for faster stdio functions. + From Grisha Levit + +lib/malloc/malloc.c,lib/malloc/table.h,lib/sh/strlcpy.c + - fixes for ISO C 23 + Patch from Collin Funk + + 2/16 + ---- +jobs.c + - waitchld: note whether or not we are executing in a signal handler + context and break out of the loop if we receive a terminating + signal instead of calling termsig_handler, which can execute unsafe + functions + From https://issues.redhat.com/browse/RHEL-22295 + +variables.h + - valid_readonly_attrs,invalid_readonly_attrs: new defines for declare + to use to validate attempts to modify attributes of readonly + variables + +builtins/declare.def + - declare_internal: reject attempts to modify (set or unset) attributes + in invalid_readonly_attrs for readonly variables. + From a discussion with Grisha Levit + + 2/17 + ---- +variables.h + - add att_readonly to valid_readonly_attrs; it's valid to use + declare -r var ; declare -r var + +Makefile.in,builtins/Makefile.in + - add unlocked-io.h to dependencies and variable contents where + appropriate + - add additional include files to INSTALLED_INCFILES + +builtins/pushd.def,examples/loadables/necho.c + - fix order of includes to get unlocked-io.h + From Grisha Levit + +subst.c,subst.h + - rename quote_rhs -> quote_nosplit + + 2/19 + ---- + +subst.c + - quote_var_value: break the code that quotes a variable value ($x, + ${x}, ${x[n]}, etc.) into a separate inline function and call it + from param_expand and parameter_brace_expand_word so they do it + consistently + - param_expand: quote $* appropriately using quote_nosplit if we are + in a place where word splitting will not occur (PF_NOSPLIT2), + expand_no_split_dollar_star == 1 but quoted is 0 + - quote_var_value: use quote_nosplit if we are in a place where word + splitting will not occur (PF_NOSPLIT2) but quoted == 0. + Fixes bug with IFS=$'\1' reported by alex xmb sw ratchev + +arrayfunc.c + - array_value: make sure to quote ${A[*]} appropriately if not quoted + (quoted == 0) and in a place where word splitting does not occur + (flags & AV_ASSIGNRHS); the caller expects array_value to quote in + this case + +subst.c + - parameter_brace_expand_word: make sure to call array_value with + AV_ASSIGNRHS if we are expanding unquoted ${A[*]} in a place where + word splitting does not occur with a non-null $IFS; array_value will + quote appropriately here + - parameter_brace_expand_word,param_expand: use quote_var_value when + expanding $N and ${N} + +doc/bash.1,doc/bashref.texi + - HISTIGNORE: clarify the description a little to emphasize that lines + matching one of the patterns are not saved in the history list + From https://savannah.gnu.org/support/index.php?111020 + + 2/20 + ---- +builtins/evalfile.c + - FEVAL_RETRY: if set in FLAGS, _evalfile will retry an interrupted + open + - _evalfile: if open() returns -1, FEVAL_RETRY is set in FLAGS, and + errno == EINTR, retry the open after checking for interrupts or + terminating signals + - maybe_execute_file,force_execute_file: pass FEVAL_RETRY in flags + +bashhist.c + - load_history: retry read_history if it returns EINTR after checking + for interrupts or terminating signals + +lib/readline/bind.c + - _rl_read_init_file: retry the open once if it's interrupted due to a + signal. If we are at a point where readline has installed its + signal handlers, check for signals readline handles + From a patch from Grisha Levit + + 2/21 + ---- +subst.c + - make_internal_declare: now takes two strings of option arguments: + those to turn on (`-') and those to turn off (`+') + - expand_declaration_argument: simplify the code; handle `-' and `+' + optionsns; always call make_internal_declare + From a patch from Grisha Levit + + 2/22 + ---- +aclocal.m4 + - add additional character to test for broken wcwidth (0x200b) + +lib/readline/display.c + - update_line: use IS_COMBINING_CHAR instead of UNICODE_COMBINING_CHAR + plus WCWIDTH; it doesn't make sense on systems where wcwidth isn't + broken + + 2/27 + ---- +print_cmd.c + - print_case_clauses: if one of the case command pattern lists begins + with the word `esac' (unquoted), precede the pattern list with `(', + since it had to be there originally to get through the parser. + Report by Emanuele Torre + + 2/29 + ---- +general.c,general.h + - string_to_rlimtype: takes a second ENDP argument, like strtol, so + the caller doesn't have to check that the string is all digits, + but can optionally check for and disallow a 0x prefix + + 3/2 + --- +subst.c + - dequote_list: unset the W_QUOTED flag in the word after dequoting it + - parameter_brace_expand_rhs: if the word in the list returned by + expand_string_for_rhs has W_QUOTED set, but the string being + expanded was not quoted, turn on the W_QUOTED in the returned word + so we can potentially avoid word splitting + - expand_word_internal: if CTLNUL is a IFS character, don't add quoted + null strings to istring if we're going to be word splitting, since + they will be treated as word delimiters + + 3/6 + --- +examples/loadables/getconf.c + - getconf_builtin,getconf_all: changes for POSIX interp 1808 proposal + to allow an optional pathname argument with -a that forces its use + for pathconf variables + https://www.austingroupbugs.net/view.php?id=1808 + + 3/11 + ---- +builtins/printf.def + - printf_builtin: %lc/%ls (%C/%S) should only work on wide characters + when in a locale where MB_CUR_MAX > 1. + Report by Emanuele Torre + + 3/12 + ---- +jobs.c + - notify_of_job_status: don't mark terminated background jobs or stopped + jobs as notified in shells started to run -c command + From a report by Greg Wooledge + - notify_of_job_status: make the final marking the dead job as notified + a true catch-all so we can put a debugging message in there to see + if there are other missing cases + - notify_of_job_status: don't mark terminated jobs that died due to + a signal the shell trapped (on the assumption that the shell + received the signal, too) as notified, since we don't report on it + in the JDEAD case if the signal is trapped + + 3/13 + ---- +builtins/printf.def + - PF: print an error message if printf returns an error or leaves + ferror(stdout) true + From a report by Paul Eggert + + 3/14 + ---- +builtins/printf.def + - getint: now takes an int argument and returns it if the conversion + overflows an int; changed callers in printf_builtin + - getint: consolidate checks for overflow. This changes the behavior + if the argument overflows an intmax_t: it returns a field width of + 0 (the overflow result) instead of -1, which changes how printf + behaves. This is consistent with the behavior when the argument + overflows an int + - printf_builtin: change check for overflow of [LONG_MIN..LONG_MAX] + for %d/%i to be explicit instead of relying on integer overflow of p + - printstr,printwidestr: print message if field width or precision + overflow, since we don't call printf + - printstr,printwidestr: set field width and precision on integer + overflow the way we do in printf_builtin + From a report and patch by Paul Eggert + +bashtypes.h + - PRIdMAX: move redefinition here after including inttypes.h + +builtins/printf.def,examples/loadables/seq.c,examples/loadables/getconf.h + - remove PRIdMAX redefinitions, since it's now fixed in bashtypes.h + From a report and patch by Paul Eggert + + 3/15 + ---- +include/stdckdint.in.h,include/intprops-internal.h + - new files, from gnulib + +configure.ac + - stdckdint.h: create in the build directory if the system doesn't + provide one by copying ${srcdir}/include/stdckdint.in.h; make + sure we don't create a new one every time, changing the timestamp + +Makefile.in + - CREATED_HEADERS: add stdckdint.h + +stringlib.c,externs.h + - substring: now takes size_t arguments for START and END + +lib/sh/stringvec.c + - strvec_create,strvec_mcreate,strvec_resize,strvec_mresize: use + ckd_mul to avoid size_t overflow + - strvec_len,strvec_flush: use size_t variable as array index + From a report by Paul Eggert + +bashansi.h + - stdbool.h: include if we have it, typedef bool as unsigned char if + we don't and HAVE_C_BOOL isn't defined + + +m4/c-bool.m4 + - autoconf check for `bool' from gnulib + +configure.ac + - include m4/c-bool.m4, call gl_C_BOOL; don't explicitly check for + stdbool.h using AC_CHECK_HEADERS any more + +config.h.in + - HAVE_C_BOOL: define + + 3/16 + ---- + +builtins/printf.def + - decodeprec: now decodeint, takes new arguments: a char ** that is + the string to parse and update, an argument saying whether or not + to print an error message on overflow, and an argument that should + be the return value on overflow; use ckd_* macros to check overflow + - printstr, printwidestr: use a different mechanism to check overflow; + call decodeint to get precision and field width + +braces.c + - include stdckdint.h for the ckd_* overflow checking macros + - mkseq: the width argument is now size_t + - mkseq: perform overflow detection using the ckd_* macros + - mkseq: perform zero-padding directly instead of using asprintf; the + sprintf family has trouble when width > INT_MAX + - expand_seqterm: use size_t instead of int for length and width + variables + From a report and patch by Paul Eggert + + 3/18 + ---- +builtins/printf.def + - printstr,bexpand: changed size/length arguments to be size_t; changed + callers + +subst.c + - string_var_assignment: if the variable is a local variable at the + current scope, output a declare command even if there are no + attributes or value. Still tagged as tentative + + 3/23 + ---- +test.c + - posixtest: takes an argument, the number of test arguments to parse + - two_arguments,three_arguments: use advance() instead of accessing + and manipulating pos directly + - posixtest,three_arguments,two_arguments: don't set pos = argc + directly, rely on functions to advance pos appropriately + Picked up from coreutils test + - term: if we see a left paren, scan forward for a closing right paren + and use posixtest() if there are 1-4 arguments between the parens to + avoid ambiguous behavior for expressions like true -a \( ! -a \), + which, though it's horribly ambiguous, a user would expect to + return false instead of an error message + Picked up from coreutils-9.2 test + + 3/25 + ---- +bashansi.c + - HAVE_C_BOOL: prefer if defined, fall back to stdbool.h if bool isn't + a compiler builtin + +braces.c + - mkseq: simplify break condition + +builtins/printf.def + - decodeint: let the caller decide what to do with an overflow return, + don't return -1 after calling report_erange(). This will honor a + precision even if the field width overflows + - printf_builtin: check for overflow when adjusting precision for + string length with %Q + - printstr,printwidestr: now that the code uses decodeint, we don't + need to check the precision against INT_MAX + +bashansi.h + - include stddef.h if we have it, otherwise define replacements for + NULL and offsetof() + +builtins/help.def,lib/sh/fmtulong.c,lib/sh/getcwd.c,lib/sh/makepath.c, +lib/sh/snprintf.c,lib/sh/strtod.c,lib/sh/strtol.c,unwind_prot.c, +lib/readline/shell.c + - include bashansi.h instead of stddef.h, or remove a stddef.h include + if bashansi.h is already included + - remove extra definitions that appear in stddef.h or bashansi.h + +lib/sh/reallocarray.c,externs.h + - implementation of reallocarray(), originally from OpenBSD, from + Paul Eggert + +configure.ac + - use AC_REPLACE_FUNCS for reallocarray + +xmalloc.c,xmalloc.h + - xreallocarray: implementation of reallocarray that uses xrealloc + - sh_xreallocarray: implementation of reallocarray that uses + sh_xrealloc and has file and line information for error messages + +lib/sh/stringvec.c + - strvec_create, strvec_resize: rewrite in terms of xreallocarray + - strvec_mcreate, strvec_mresize: rewrite in terms of reallocarray + - strvec_remove, strvec_search, strvec_copy, strvec_from_word_list, + strvec_to_word_list: use size_t instead of int where appropriate + +lib/sh/stringvec.c,externs.h + - strvec_search: return a value of type ptrdiff_t, since size_t is + unsigned and we want to return -1 if not found + + All from a report and patch by Paul Eggert + +test.c + - term: change paren scan algorithm to count open and close parens so + we handle nested subexpressions. Still not compatible in the case + of something like test true -a \( ! -a \) \) + + 3/27 + ---- +parse.y + - flush_parser_state: new function, deallocates the members of a + parser state struct that are dynamically allocated + - parse_comsub: call flush_parser_state in places where we will + return an error or jump to the top level + Fixes memory leaks on error reported by bug_reports00@protonmail.com + +Makefile.in + - CREATED_MACOS: list of dSYM directories created by building and + testing + - distclean,maintainer-clean: remove $(CREATED_HEADERS) and + $(CREATED_MACOS) + - maintainer-clean: remove ctags/etags files + + 3/28 + ---- +bashline.c,bashline.h + - uw_restore_parser_state: moved to parse.y and declaration to shell.h + +shell.c,shell.h + - parsing_command: new flag, set to 1 when calling yyparse; saved and + restored by save_parser_state/restore_parser_state + +parse.y,shell.h + - parsing_command: new element of sh_parser_state_t + +sig.c + - throw_to_top_level: reset executing and parsing_command to 0 + +parse.y + - parse_comsub: set parsing_command to 1 before calling yyparse() + +eval.c + - parse_command: set parsing_command to 1 before calling yyparse(), + restore old value when yyparse returns + +subst.c + - function_substitute: if we are parsing a command, save the parser + state with save_parser_state and add an unwind-protect to restore it + From a report from Grisha Levit + - function_substitute: only save and restore the pipestatus array if + we are not parsing a command, since save_parser_state saves it + +parse.y,externs.h + - decode_prompt_string: now takes an additional argument to determine + whether this is expanding PS[0124] or the @P transformation + - decode_prompt_string: keep track of the (last) real prompt string + being decoded so a @P expansion embedded in the prompt returns the + same result as the prompt string itself for the \! and \# expansions + From a patch from Grisha Levit + +parse.y,print_cmd.c,eval.c,subst.c + - decode_prompt_string: changed all callers + + + 3/29 + ---- + +doc/bash.1,lib/readline/doc/readline.3,lib/readline/doc/history.3 + - fix some font-setting directives + - fix some word breaks for font-changing macros + +lib/readline/doc/history.3 + - fix the macros for function signatures for AT&T troff limitations + - fix some paragraph spacing and other layout/spacing/hyphenation + issues + Fixes from G. Branden Robinson + + 4/1 + --- +execute_cmd.c + - shell_execve: minor changes to code that checks the #! interpreter + name + +execute_cmd.c + - execute_coproc: if MULTIPLE_COPROCS is not defined, close any old + file descriptors corresponding to sh_coproc. The user can still + copy them from the coproc array if desired; this prevents the shell + from hanging if a second coproc inherits file descriptors from a + previous one + From a report by Carl Edquist + +jobs.c,nojobs.c,jobs.h + - process_exit_status: no longer static, public function with an + extern declaration + + 4/2 + --- +execute_cmd.c,execute_cmd.h + - coproc_pidchk: now takes a full WAIT status word as a second + argument instead of just the exit status; arranged the prototype + to only be included if the source file includes posixwait.h for WAIT + +jobs.c + - waitchld: call coproc_pidchk with a WAIT second argument (like + nojobs.c does) + +command.h + - COPROC_STOPPED,COPROC_FOREGROUND: new flags values for coproc + +execute_cmd.c + - coproc_setstatus: now takes a full WAIT status word as the second + argument, passed from coproc_pidchk + - coproc_setstatus: use process_exit_status to translate a WAIT into + an int status, doing proper termsig+128 handling + - coproc_getstate: take a WAIT and return the appropriate COPROC_ + status flag (DEAD, STOPPED, etc.) + - coproc_setstatus: use coproc_getstate to set cp->c_flags + + 4/4 + --- +configure.ac + - changed release status to bash-5.3-alpha + - AC_PROG_GCC_TRADITIONAL: removed, since it no longer is supported + in autoconf-2.72 (which MacPorts upgraded me to) + +test.c + - term: made change of 3/25 dependent on the compatibility level + +support/config.guess,support/config.sub,support/config.rpath + - new versions, imported from gnulib + + 4/5 + --- +doc/bashref.texi + - update compatibility, posix mode, and bourne shell sections for + bash-5.3-alpha release + +version.c + - update copyright date to 2024 + +[bash-5.3-alpha frozen] diff --git a/INSTALL b/INSTALL index 2033143a1..f2e66b22e 100644 --- a/INSTALL +++ b/INSTALL @@ -5,45 +5,45 @@ These are installation instructions for Bash. The simplest way to compile Bash is: - 1. 'cd' to the directory containing the source code and type - './configure' to configure Bash for your system. If you're using - 'csh' on an old version of System V, you might need to type 'sh - ./configure' instead to prevent 'csh' from trying to execute - 'configure' itself. + 1. ‘cd’ to the directory containing the source code and type + ‘./configure’ to configure Bash for your system. If you're using + ‘csh’ on an old version of System V, you might need to type ‘sh + ./configure’ instead to prevent ‘csh’ from trying to execute + ‘configure’ itself. - Running 'configure' takes some time. While running, it prints + Running ‘configure’ takes some time. While running, it prints messages telling which features it is checking for. - 2. Type 'make' to compile Bash and build the 'bashbug' bug reporting + 2. Type ‘make’ to compile Bash and build the ‘bashbug’ bug reporting script. - 3. Optionally, type 'make tests' to run the Bash test suite. + 3. Optionally, type ‘make tests’ to run the Bash test suite. - 4. Type 'make install' to install 'bash' and 'bashbug'. This will + 4. Type ‘make install’ to install ‘bash’ and ‘bashbug’. This will also install the manual pages and Info file, message translation files, some supplemental documentation, a number of example loadable builtin commands, and a set of header files for developing loadable builtins. You may need additional privileges to install - 'bash' to your desired destination, so 'sudo make install' might be + ‘bash’ to your desired destination, so ‘sudo make install’ might be required. More information about controlling the locations where - 'bash' and other files are installed is below (*note Installation + ‘bash’ and other files are installed is below (*note Installation Names::). -The 'configure' shell script attempts to guess correct values for +The ‘configure’ shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses -those values to create a 'Makefile' in each directory of the package -(the top directory, the 'builtins', 'doc', 'po', and 'support' -directories, each directory under 'lib', and several others). It also -creates a 'config.h' file containing system-dependent definitions. -Finally, it creates a shell script named 'config.status' that you can +those values to create a ‘Makefile’ in each directory of the package +(the top directory, the ‘builtins’, ‘doc’, ‘po’, and ‘support’ +directories, each directory under ‘lib’, and several others). It also +creates a ‘config.h’ file containing system-dependent definitions. +Finally, it creates a shell script named ‘config.status’ that you can run in the future to recreate the current configuration, a file -'config.cache' that saves the results of its tests to speed up -reconfiguring, and a file 'config.log' containing compiler output -(useful mainly for debugging 'configure'). If at some point -'config.cache' contains results you don't want to keep, you may remove +‘config.cache’ that saves the results of its tests to speed up +reconfiguring, and a file ‘config.log’ containing compiler output +(useful mainly for debugging ‘configure’). If at some point +‘config.cache’ contains results you don't want to keep, you may remove or edit it. -To find out more about the options and arguments that the 'configure' +To find out more about the options and arguments that the ‘configure’ script understands, type bash-4.2$ ./configure --help @@ -53,8 +53,8 @@ at the Bash prompt in your Bash source directory. If you want to build Bash in a directory separate from the source directory - to build for multiple architectures, for example - just use the full path to the configure script. The following commands will -build bash in a directory under '/usr/local/build' from the source code -in '/usr/local/src/bash-4.4': +build Bash in a directory under ‘/usr/local/build’ from the source code +in ‘/usr/local/src/bash-4.4’: mkdir /usr/local/build/bash-4.4 cd /usr/local/build/bash-4.4 @@ -65,32 +65,32 @@ See *note Compiling For Multiple Architectures:: for more information about building in a directory separate from the source. If you need to do unusual things to compile Bash, please try to figure -out how 'configure' could check whether or not to do them, and mail +out how ‘configure’ could check whether or not to do them, and mail diffs or instructions to so they can be considered for the next release. -The file 'configure.ac' is used to create 'configure' by a program -called Autoconf. You only need 'configure.ac' if you want to change it -or regenerate 'configure' using a newer version of Autoconf. If you do +The file ‘configure.ac’ is used to create ‘configure’ by a program +called Autoconf. You only need ‘configure.ac’ if you want to change it +or regenerate ‘configure’ using a newer version of Autoconf. If you do this, make sure you are using Autoconf version 2.69 or newer. You can remove the program binaries and object files from the source -code directory by typing 'make clean'. To also remove the files that -'configure' created (so you can compile Bash for a different kind of -computer), type 'make distclean'. +code directory by typing ‘make clean’. To also remove the files that +‘configure’ created (so you can compile Bash for a different kind of +computer), type ‘make distclean’. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the -'configure' script does not know about. You can give 'configure' +‘configure’ script does not know about. You can give ‘configure’ initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure -On systems that have the 'env' program, you can do it like this: +On systems that have the ‘env’ program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure @@ -101,69 +101,69 @@ Compiling For Multiple Architectures You can compile Bash for more than one kind of computer at the same time, by placing the object files for each architecture in their own -directory. To do this, you must use a version of 'make' that supports -the 'VPATH' variable, such as GNU 'make'. 'cd' to the directory where -you want the object files and executables to go and run the 'configure' +directory. To do this, you must use a version of ‘make’ that supports +the ‘VPATH’ variable, such as GNU ‘make’. ‘cd’ to the directory where +you want the object files and executables to go and run the ‘configure’ script from the source directory (*note Basic Installation::). You may -need to supply the '--srcdir=PATH' argument to tell 'configure' where -the source files are. 'configure' automatically checks for the source -code in the directory that 'configure' is in and in '..'. +need to supply the ‘--srcdir=PATH’ argument to tell ‘configure’ where +the source files are. ‘configure’ automatically checks for the source +code in the directory that ‘configure’ is in and in '..'. -If you have to use a 'make' that does not support the 'VPATH' variable, +If you have to use a ‘make’ that does not support the ‘VPATH’ variable, you can compile Bash for one architecture at a time in the source code directory. After you have installed Bash for one architecture, use -'make distclean' before reconfiguring for another architecture. +‘make distclean’ before reconfiguring for another architecture. Alternatively, if your system supports symbolic links, you can use the -'support/mkclone' script to create a build tree which has symbolic links +‘support/mkclone’ script to create a build tree which has symbolic links back to each file in the source directory. Here's an example that creates a build directory in the current directory from a source -directory '/usr/gnu/src/bash-2.0': +directory ‘/usr/gnu/src/bash-2.0’: bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 . -The 'mkclone' script requires Bash, so you must have already built Bash +The ‘mkclone’ script requires Bash, so you must have already built Bash for at least one architecture before you can create build directories for other architectures. Installation Names ================== -By default, 'make install' will install into '/usr/local/bin', -'/usr/local/man', etc.; that is, the "installation prefix" defaults to -'/usr/local'. You can specify an installation prefix other than -'/usr/local' by giving 'configure' the option '--prefix=PATH', or by -specifying a value for the 'prefix' 'make' variable when running 'make -install' (e.g., 'make install prefix=PATH'). The 'prefix' variable -provides a default for 'exec_prefix' and other variables used when -installing bash. +By default, ‘make install’ will install into ‘/usr/local/bin’, +‘/usr/local/man’, etc.; that is, the “installation prefix” defaults to +‘/usr/local’. You can specify an installation prefix other than +‘/usr/local’ by giving ‘configure’ the option ‘--prefix=PATH’, or by +specifying a value for the ‘prefix’ ‘make’ variable when running ‘make +install’ (e.g., ‘make install prefix=PATH’). The ‘prefix’ variable +provides a default for ‘exec_prefix’ and other variables used when +installing Bash. You can specify separate installation prefixes for architecture-specific -files and architecture-independent files. If you give 'configure' the -option '--exec-prefix=PATH', 'make install' will use PATH as the prefix +files and architecture-independent files. If you give ‘configure’ the +option ‘--exec-prefix=PATH’, ‘make install’ will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. If you would like to change the installation locations for a single run, -you can specify these variables as arguments to 'make': 'make install -exec_prefix=/' will install 'bash' and 'bashbug' into '/bin' instead of -the default '/usr/local/bin'. +you can specify these variables as arguments to ‘make’: ‘make install +exec_prefix=/’ will install ‘bash’ and ‘bashbug’ into ‘/bin’ instead of +the default ‘/usr/local/bin’. -If you want to see the files bash will install and where it will install +If you want to see the files Bash will install and where it will install them without changing anything on your system, specify the variable -'DESTDIR' as an argument to 'make'. Its value should be the absolute +‘DESTDIR’ as an argument to ‘make’. Its value should be the absolute directory path you'd like to use as the root of your sample installation tree. For example, mkdir /fs1/bash-install make install DESTDIR=/fs1/bash-install -will install 'bash' into '/fs1/bash-install/usr/local/bin/bash', the +will install ‘bash’ into ‘/fs1/bash-install/usr/local/bin/bash’, the documentation into directories within -'/fs1/bash-install/usr/local/share', the example loadable builtins into -'/fs1/bash-install/usr/local/lib/bash', and so on. You can use the -usual 'exec_prefix' and 'prefix' variables to alter the directory paths -beneath the value of 'DESTDIR'. +‘/fs1/bash-install/usr/local/share’, the example loadable builtins into +‘/fs1/bash-install/usr/local/lib/bash’, and so on. You can use the +usual ‘exec_prefix’ and ‘prefix’ variables to alter the directory paths +beneath the value of ‘DESTDIR’. The GNU Makefile standards provide a more complete description of these variables and their effects. @@ -171,325 +171,325 @@ variables and their effects. Specifying the System Type ========================== -There may be some features 'configure' can not figure out automatically, +There may be some features ‘configure’ can not figure out automatically, but needs to determine by the type of host Bash will run on. Usually -'configure' can figure that out, but if it prints a message saying it -can not guess the host type, give it the '--host=TYPE' option. 'TYPE' -can either be a short name for the system type, such as 'sun4', or a -canonical name with three fields: 'CPU-COMPANY-SYSTEM' (e.g., -'i386-unknown-freebsd4.2'). +‘configure’ can figure that out, but if it prints a message saying it +can not guess the host type, give it the ‘--host=TYPE’ option. ‘TYPE’ +can either be a short name for the system type, such as ‘sun4’, or a +canonical name with three fields: ‘CPU-COMPANY-SYSTEM’ (e.g., +‘i386-unknown-freebsd4.2’). -See the file 'support/config.sub' for the possible values of each field. +See the file ‘support/config.sub’ for the possible values of each field. Sharing Defaults ================ -If you want to set default values for 'configure' scripts to share, you -can create a site shell script called 'config.site' that gives default -values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' -looks for 'PREFIX/share/config.site' if it exists, then -'PREFIX/etc/config.site' if it exists. Or, you can set the -'CONFIG_SITE' environment variable to the location of the site script. -A warning: the Bash 'configure' looks for a site script, but not all -'configure' scripts do. +If you want to set default values for ‘configure’ scripts to share, you +can create a site shell script called ‘config.site’ that gives default +values for variables like ‘CC’, ‘cache_file’, and ‘prefix’. ‘configure’ +looks for ‘PREFIX/share/config.site’ if it exists, then +‘PREFIX/etc/config.site’ if it exists. Or, you can set the +‘CONFIG_SITE’ environment variable to the location of the site script. +A warning: the Bash ‘configure’ looks for a site script, but not all +‘configure’ scripts do. Operation Controls ================== -'configure' recognizes the following options to control how it operates. +‘configure’ recognizes the following options to control how it operates. -'--cache-file=FILE' +‘--cache-file=FILE’ Use and save the results of the tests in FILE instead of - './config.cache'. Set FILE to '/dev/null' to disable caching, for - debugging 'configure'. + ‘./config.cache’. Set FILE to ‘/dev/null’ to disable caching, for + debugging ‘configure’. -'--help' - Print a summary of the options to 'configure', and exit. +‘--help’ + Print a summary of the options to ‘configure’, and exit. -'--quiet' -'--silent' -'-q' +‘--quiet’ +‘--silent’ +‘-q’ Do not print messages saying which checks are being made. -'--srcdir=DIR' +‘--srcdir=DIR’ Look for the Bash source code in directory DIR. Usually - 'configure' can determine that directory automatically. + ‘configure’ can determine that directory automatically. -'--version' - Print the version of Autoconf used to generate the 'configure' +‘--version’ + Print the version of Autoconf used to generate the ‘configure’ script, and exit. -'configure' also accepts some other, not widely used, boilerplate -options. 'configure --help' prints the complete list. +‘configure’ also accepts some other, not widely used, boilerplate +options. ‘configure --help’ prints the complete list. Optional Features ================= -The Bash 'configure' has a number of '--enable-FEATURE' options, where +The Bash ‘configure’ has a number of ‘--enable-FEATURE’ options, where FEATURE indicates an optional part of Bash. There are also several -'--with-PACKAGE' options, where PACKAGE is something like 'bash-malloc' -or 'purify'. To turn off the default use of a package, use -'--without-PACKAGE'. To configure Bash without a feature that is -enabled by default, use '--disable-FEATURE'. +‘--with-PACKAGE’ options, where PACKAGE is something like ‘bash-malloc’ +or ‘purify’. To turn off the default use of a package, use +‘--without-PACKAGE’. To configure Bash without a feature that is +enabled by default, use ‘--disable-FEATURE’. -Here is a complete list of the '--enable-' and '--with-' options that -the Bash 'configure' recognizes. +Here is a complete list of the ‘--enable-’ and ‘--with-’ options that +the Bash ‘configure’ recognizes. -'--with-afs' +‘--with-afs’ Define if you are using the Andrew File System from Transarc. -'--with-bash-malloc' - Use the Bash version of 'malloc' in the directory 'lib/malloc'. - This is not the same 'malloc' that appears in GNU libc, but an - older version originally derived from the 4.2 BSD 'malloc'. This - 'malloc' is very fast, but wastes some space on each allocation. - This option is enabled by default. The 'NOTES' file contains a +‘--with-bash-malloc’ + Use the Bash version of ‘malloc’ in the directory ‘lib/malloc’. + This is not the same ‘malloc’ that appears in GNU libc, but an + older version originally derived from the 4.2 BSD ‘malloc’. This + ‘malloc’ is very fast, but wastes some space on each allocation. + This option is enabled by default. The ‘NOTES’ file contains a list of systems for which this should be turned off, and - 'configure' disables this option automatically for a number of + ‘configure’ disables this option automatically for a number of systems. -'--with-curses' +‘--with-curses’ Use the curses library instead of the termcap library. This should be supplied if your system has an inadequate or incomplete termcap database. -'--with-gnu-malloc' - A synonym for '--with-bash-malloc'. +‘--with-gnu-malloc’ + A synonym for ‘--with-bash-malloc’. -'--with-installed-readline[=PREFIX]' +‘--with-installed-readline[=PREFIX]’ Define this to make Bash link with a locally-installed version of - Readline rather than the version in 'lib/readline'. This works - only with Readline 5.0 and later versions. If PREFIX is 'yes' or - not supplied, 'configure' uses the values of the make variables - 'includedir' and 'libdir', which are subdirectories of 'prefix' by + Readline rather than the version in ‘lib/readline’. This works + only with Readline 5.0 and later versions. If PREFIX is ‘yes’ or + not supplied, ‘configure’ uses the values of the make variables + ‘includedir’ and ‘libdir’, which are subdirectories of ‘prefix’ by default, to find the installed version of Readline if it is not in the standard system include and library directories. If PREFIX is - 'no', Bash links with the version in 'lib/readline'. If PREFIX is - set to any other value, 'configure' treats it as a directory + ‘no’, Bash links with the version in ‘lib/readline’. If PREFIX is + set to any other value, ‘configure’ treats it as a directory pathname and looks for the installed version of Readline in - subdirectories of that directory (include files in PREFIX/'include' - and the library in PREFIX/'lib'). + subdirectories of that directory (include files in PREFIX/‘include’ + and the library in PREFIX/‘lib’). -'--with-libintl-prefix[=PREFIX]' +‘--with-libintl-prefix[=PREFIX]’ Define this to make Bash link with a locally-installed version of - the libintl library instead of the version in 'lib/intl'. + the libintl library instead of the version in ‘lib/intl’. -'--with-libiconv-prefix[=PREFIX]' +‘--with-libiconv-prefix[=PREFIX]’ Define this to make Bash look for libiconv in PREFIX instead of the standard system locations. There is no version included with Bash. -'--enable-minimal-config' +‘--enable-minimal-config’ This produces a shell with minimal features, close to the historical Bourne shell. -There are several '--enable-' options that alter how Bash is compiled, +There are several ‘--enable-’ options that alter how Bash is compiled, linked, and installed, rather than changing run-time features. -'--enable-largefile' +‘--enable-largefile’ Enable support for large files (http://www.unix.org/version2/whatsnew/lfs20mar.html) if the operating system requires special compiler options to build programs which can access large files. This is enabled by default, if the operating system provides large file support. -'--enable-profiling' +‘--enable-profiling’ This builds a Bash binary that produces profiling information to be - processed by 'gprof' each time it is executed. + processed by ‘gprof’ each time it is executed. -'--enable-separate-helpfiles' - Use external files for the documentation displayed by the 'help' +‘--enable-separate-helpfiles’ + Use external files for the documentation displayed by the ‘help’ builtin instead of storing the text internally. -'--enable-static-link' - This causes Bash to be linked statically, if 'gcc' is being used. +‘--enable-static-link’ + This causes Bash to be linked statically, if ‘gcc’ is being used. This could be used to build a version to use as root's shell. -The 'minimal-config' option can be used to disable all of the following +The ‘minimal-config’ option can be used to disable all of the following options, but it is processed first, so individual options may be enabled -using 'enable-FEATURE'. +using ‘enable-FEATURE’. -All of the following options except for 'alt-array-implementation', -'disabled-builtins', 'direxpand-default', 'strict-posix-default', and -'xpg-echo-default' are enabled by default, unless the operating system +All of the following options except for ‘alt-array-implementation’, +‘disabled-builtins’, ‘direxpand-default’, ‘strict-posix-default’, and +‘xpg-echo-default’ are enabled by default, unless the operating system does not provide the necessary support. -'--enable-alias' - Allow alias expansion and include the 'alias' and 'unalias' +‘--enable-alias’ + Allow alias expansion and include the ‘alias’ and ‘unalias’ builtins (*note Aliases::). -'--enable-alt-array-implementation' - This builds bash using an alternate implementation of arrays (*note +‘--enable-alt-array-implementation’ + This builds Bash using an alternate implementation of arrays (*note Arrays::) that provides faster access at the expense of using more memory (sometimes many times more, depending on how sparse an array is). -'--enable-arith-for-command' - Include support for the alternate form of the 'for' command that - behaves like the C language 'for' statement (*note Looping +‘--enable-arith-for-command’ + Include support for the alternate form of the ‘for’ command that + behaves like the C language ‘for’ statement (*note Looping Constructs::). -'--enable-array-variables' +‘--enable-array-variables’ Include support for one-dimensional array shell variables (*note Arrays::). -'--enable-bang-history' - Include support for 'csh'-like history substitution (*note History +‘--enable-bang-history’ + Include support for ‘csh’-like history substitution (*note History Interaction::). -'--enable-brace-expansion' - Include 'csh'-like brace expansion ( 'b{a,b}c' ==> 'bac bbc' ). - See *note Brace Expansion::, for a complete description. +‘--enable-brace-expansion’ + Include ‘csh’-like brace expansion ( ‘b{a,b}c’ ↦ ‘bac bbc’ ). See + *note Brace Expansion::, for a complete description. -'--enable-casemod-attributes' - Include support for case-modifying attributes in the 'declare' - builtin and assignment statements. Variables with the 'uppercase' +‘--enable-casemod-attributes’ + Include support for case-modifying attributes in the ‘declare’ + builtin and assignment statements. Variables with the ‘uppercase’ attribute, for example, will have their values converted to uppercase upon assignment. -'--enable-casemod-expansion' +‘--enable-casemod-expansion’ Include support for case-modifying word expansions. -'--enable-command-timing' - Include support for recognizing 'time' as a reserved word and for - displaying timing statistics for the pipeline following 'time' +‘--enable-command-timing’ + Include support for recognizing ‘time’ as a reserved word and for + displaying timing statistics for the pipeline following ‘time’ (*note Pipelines::). This allows pipelines as well as shell builtins and functions to be timed. -'--enable-cond-command' - Include support for the '[[' conditional command. (*note +‘--enable-cond-command’ + Include support for the ‘[[’ conditional command. (*note Conditional Constructs::). -'--enable-cond-regexp' +‘--enable-cond-regexp’ Include support for matching POSIX regular expressions using the - '=~' binary operator in the '[[' conditional command. (*note + ‘=~’ binary operator in the ‘[[’ conditional command. (*note Conditional Constructs::). -'--enable-coprocesses' - Include support for coprocesses and the 'coproc' reserved word +‘--enable-coprocesses’ + Include support for coprocesses and the ‘coproc’ reserved word (*note Pipelines::). -'--enable-debugger' - Include support for the bash debugger (distributed separately). +‘--enable-debugger’ + Include support for the Bash debugger (distributed separately). -'--enable-dev-fd-stat-broken' - If calling 'stat' on /dev/fd/N returns different results than - calling 'fstat' on file descriptor N, supply this option to enable +‘--enable-dev-fd-stat-broken’ + If calling ‘stat’ on /dev/fd/N returns different results than + calling ‘fstat’ on file descriptor N, supply this option to enable a workaround. This has implications for conditional commands that test file attributes. -'--enable-direxpand-default' - Cause the 'direxpand' shell option (*note The Shopt Builtin::) to +‘--enable-direxpand-default’ + Cause the ‘direxpand’ shell option (*note The Shopt Builtin::) to be enabled by default when the shell starts. It is normally disabled by default. -'--enable-directory-stack' - Include support for a 'csh'-like directory stack and the 'pushd', - 'popd', and 'dirs' builtins (*note The Directory Stack::). +‘--enable-directory-stack’ + Include support for a ‘csh’-like directory stack and the ‘pushd’, + ‘popd’, and ‘dirs’ builtins (*note The Directory Stack::). -'--enable-disabled-builtins' - Allow builtin commands to be invoked via 'builtin xxx' even after - 'xxx' has been disabled using 'enable -n xxx'. See *note Bash - Builtins::, for details of the 'builtin' and 'enable' builtin +‘--enable-disabled-builtins’ + Allow builtin commands to be invoked via ‘builtin xxx’ even after + ‘xxx’ has been disabled using ‘enable -n xxx’. See *note Bash + Builtins::, for details of the ‘builtin’ and ‘enable’ builtin commands. -'--enable-dparen-arithmetic' - Include support for the '((...))' command (*note Conditional +‘--enable-dparen-arithmetic’ + Include support for the ‘((...))’ command (*note Conditional Constructs::). -'--enable-extended-glob' +‘--enable-extended-glob’ Include support for the extended pattern matching features described above under *note Pattern Matching::. -'--enable-extended-glob-default' - Set the default value of the 'extglob' shell option described above +‘--enable-extended-glob-default’ + Set the default value of the ‘extglob’ shell option described above under *note The Shopt Builtin:: to be enabled. -'--enable-function-import' +‘--enable-function-import’ Include support for importing function definitions exported by another instance of the shell from the environment. This option is enabled by default. -'--enable-glob-asciirange-default' - Set the default value of the 'globasciiranges' shell option +‘--enable-glob-asciiranges-default’ + Set the default value of the ‘globasciiranges’ shell option described above under *note The Shopt Builtin:: to be enabled. This controls the behavior of character ranges when used in pattern matching bracket expressions. -'--enable-help-builtin' - Include the 'help' builtin, which displays help on shell builtins +‘--enable-help-builtin’ + Include the ‘help’ builtin, which displays help on shell builtins and variables (*note Bash Builtins::). -'--enable-history' - Include command history and the 'fc' and 'history' builtin commands +‘--enable-history’ + Include command history and the ‘fc’ and ‘history’ builtin commands (*note Bash History Facilities::). -'--enable-job-control' +‘--enable-job-control’ This enables the job control features (*note Job Control::), if the operating system supports them. -'--enable-multibyte' +‘--enable-multibyte’ This enables support for multibyte characters if the operating system provides the necessary support. -'--enable-net-redirections' +‘--enable-net-redirections’ This enables the special handling of filenames of the form - '/dev/tcp/HOST/PORT' and '/dev/udp/HOST/PORT' when used in + ‘/dev/tcp/HOST/PORT’ and ‘/dev/udp/HOST/PORT’ when used in redirections (*note Redirections::). -'--enable-process-substitution' +‘--enable-process-substitution’ This enables process substitution (*note Process Substitution::) if the operating system provides the necessary support. -'--enable-progcomp' +‘--enable-progcomp’ Enable the programmable completion facilities (*note Programmable Completion::). If Readline is not enabled, this option has no effect. -'--enable-prompt-string-decoding' +‘--enable-prompt-string-decoding’ Turn on the interpretation of a number of backslash-escaped - characters in the '$PS0', '$PS1', '$PS2', and '$PS4' prompt + characters in the ‘$PS0’, ‘$PS1’, ‘$PS2’, and ‘$PS4’ prompt strings. See *note Controlling the Prompt::, for a complete list of prompt string escape sequences. -'--enable-readline' +‘--enable-readline’ Include support for command-line editing and history with the Bash version of the Readline library (*note Command Line Editing::). -'--enable-restricted' - Include support for a "restricted shell". If this is enabled, - Bash, when called as 'rbash', enters a restricted mode. See *note +‘--enable-restricted’ + Include support for a “restricted shell”. If this is enabled, + Bash, when called as ‘rbash’, enters a restricted mode. See *note The Restricted Shell::, for a description of restricted mode. -'--enable-select' - Include the 'select' compound command, which allows the generation +‘--enable-select’ + Include the ‘select’ compound command, which allows the generation of simple menus (*note Conditional Constructs::). -'--enable-single-help-strings' - Store the text displayed by the 'help' builtin as a single string +‘--enable-single-help-strings’ + Store the text displayed by the ‘help’ builtin as a single string for each help topic. This aids in translating the text to different languages. You may need to disable this if your compiler cannot handle very long string literals. -'--enable-strict-posix-default' +‘--enable-strict-posix-default’ Make Bash POSIX-conformant by default (*note Bash POSIX Mode::). -'--enable-translatable-strings' - Enable support for '$"STRING"' translatable strings (*note Locale +‘--enable-translatable-strings’ + Enable support for ‘$"STRING"’ translatable strings (*note Locale Translation::). -'--enable-usg-echo-default' - A synonym for '--enable-xpg-echo-default'. +‘--enable-usg-echo-default’ + A synonym for ‘--enable-xpg-echo-default’. -'--enable-xpg-echo-default' - Make the 'echo' builtin expand backslash-escaped characters by - default, without requiring the '-e' option. This sets the default - value of the 'xpg_echo' shell option to 'on', which makes the Bash - 'echo' behave more like the version specified in the Single Unix +‘--enable-xpg-echo-default’ + Make the ‘echo’ builtin expand backslash-escaped characters by + default, without requiring the ‘-e’ option. This sets the default + value of the ‘xpg_echo’ shell option to ‘on’, which makes the Bash + ‘echo’ behave more like the version specified in the Single Unix Specification, version 3. *Note Bash Builtins::, for a description - of the escape sequences that 'echo' recognizes. + of the escape sequences that ‘echo’ recognizes. -The file 'config-top.h' contains C Preprocessor '#define' statements for -options which are not settable from 'configure'. Some of these are not +The file ‘config-top.h’ contains C Preprocessor ‘#define’ statements for +options which are not settable from ‘configure’. Some of these are not meant to be changed; beware of the consequences if you do. Read the comments associated with each definition for more information about its effect. diff --git a/MANIFEST b/MANIFEST index a45b3cfc2..1514c3e92 100644 --- a/MANIFEST +++ b/MANIFEST @@ -211,6 +211,7 @@ builtins/bashgetopt.c f builtins/common.h f builtins/bashgetopt.h f #cross-build/cygwin32.cache f +cross-build/msys32.cache f cross-build/x86-beos.cache f cross-build/opennt.cache f cross-build/qnx.cache f @@ -218,6 +219,7 @@ include/ansi_stdlib.h f include/chartypes.h f include/filecntl.h f include/gettext.h f +include/intprops-internal.h f include/maxpath.h f include/memalloc.h f include/ocache.h f @@ -232,10 +234,12 @@ include/shmbutil.h f include/shtty.h f include/stat-time.h f include/stdc.h f +include/stdckdint.in.h f include/systimes.h f include/timer.h f include/typemax.h f include/unionwait.h f +include/unlocked-io.h f lib/glob/Makefile.in f lib/glob/sm_loop.c f lib/glob/smatch.c f @@ -250,48 +254,78 @@ lib/glob/xmbsrtowcs.c f lib/glob/collsyms.h f lib/glob/doc/Makefile f lib/glob/doc/glob.texi f -lib/glob/ndir.h f -lib/intl/ChangeLog f lib/intl/Makefile.in f lib/intl/VERSION f +lib/intl/ref-add.sin f +lib/intl/ref-del.sin f lib/intl/bindtextdom.c f -lib/intl/config.charset f lib/intl/dcgettext.c f lib/intl/dcigettext.c f lib/intl/dcngettext.c f lib/intl/dgettext.c f lib/intl/dngettext.c f -lib/intl/eval-plural.h f lib/intl/explodename.c f lib/intl/finddomain.c f lib/intl/gettext.c f -lib/intl/gettextP.h f -lib/intl/gmo.h f -lib/intl/hash-string.h f +lib/intl/hash-string.c f lib/intl/intl-compat.c f +lib/intl/intl-exports.c f lib/intl/l10nflist.c f -lib/intl/libgnuintl.h.in f -lib/intl/loadinfo.h f +lib/intl/langprefs.c f lib/intl/loadmsgcat.c f lib/intl/localcharset.c f -lib/intl/localcharset.h f -lib/intl/locale.alias f lib/intl/localealias.c f +lib/intl/localename-table.c f lib/intl/localename.c f +lib/intl/lock.c f lib/intl/log.c f lib/intl/ngettext.c f lib/intl/os2compat.c f -lib/intl/os2compat.h f lib/intl/osdep.c f lib/intl/plural-exp.c f -lib/intl/plural-exp.h f lib/intl/plural.c f lib/intl/plural.y f -lib/intl/ref-add.sin f -lib/intl/ref-del.sin f +lib/intl/printf-args.c f +lib/intl/printf-parse.c f +lib/intl/printf.c f lib/intl/relocatable.c f -lib/intl/relocatable.h f +lib/intl/setlocale-lock.c f +lib/intl/setlocale.c f +lib/intl/setlocale_null.c f lib/intl/textdomain.c f +lib/intl/threadlib.c f +lib/intl/tsearch.c f +lib/intl/vasnprintf.c f +lib/intl/version.c f +lib/intl/xsize.c f +lib/intl/arg-nonnull.h f +lib/intl/attribute.h f +lib/intl/eval-plural.h f +lib/intl/export.h f +lib/intl/filename.h f +lib/intl/flexmember.h f +lib/intl/gettextP.h f +lib/intl/gmo.h f +lib/intl/hash-string.h f +lib/intl/libgnuintl.in.h f +lib/intl/loadinfo.h f +lib/intl/localcharset.h f +lib/intl/localename-table.in.h f +lib/intl/lock.h f +lib/intl/os2compat.h f +lib/intl/plural-exp.h f +lib/intl/plural.h f +lib/intl/printf-args.h f +lib/intl/printf-parse.h f +lib/intl/relocatable.h f +lib/intl/setlocale_null.h f +lib/intl/thread-optim.h f +lib/intl/tsearch.h f +lib/intl/vasnprintf.h f +lib/intl/vasnwprintf.h f +lib/intl/verify.h f +lib/intl/wprintf-parse.h f +lib/intl/xsize.h f lib/malloc/Makefile.in f lib/malloc/getpagesize.h f lib/malloc/imalloc.h f @@ -307,6 +341,7 @@ lib/malloc/trace.c f lib/malloc/watch.c f lib/malloc/xmalloc.c f lib/malloc/xleaktrace f 755 +lib/malloc/sbrk.c f lib/malloc/stub.c f lib/malloc/i386-alloca.s f lib/malloc/x386-alloca.s f @@ -398,9 +433,11 @@ lib/readline/examples/rl.c f lib/readline/examples/rlcat.c f lib/readline/examples/Inputrc f lib/sh/Makefile.in f +lib/sh/anonfile.c f lib/sh/casemod.c f lib/sh/clktck.c f lib/sh/clock.c f +lib/sh/compat.c f lib/sh/dprintf.c f lib/sh/eaccess.c f lib/sh/fmtullong.c f @@ -419,6 +456,7 @@ lib/sh/makepath.c f lib/sh/mbscasecmp.c f lib/sh/mbschr.c f lib/sh/mbscmp.c f +lib/sh/mbsncmp.c f lib/sh/memset.c f lib/sh/mktime.c f lib/sh/netconn.c f @@ -427,6 +465,7 @@ lib/sh/oslib.c f lib/sh/pathcanon.c f lib/sh/pathphys.c f lib/sh/random.c f +lib/sh/reallocarray.c f lib/sh/rename.c f lib/sh/setlinebuf.c f lib/sh/shmatch.c f @@ -443,8 +482,10 @@ lib/sh/strerror.c f lib/sh/strftime.c f lib/sh/stringlist.c f lib/sh/stringvec.c f +lib/sh/strlcpy.c f lib/sh/strnlen.c f lib/sh/strpbrk.c f +lib/sh/strscpy.c f lib/sh/strstr.c f lib/sh/strtod.c f lib/sh/strtoimax.c f @@ -484,12 +525,16 @@ lib/tilde/Makefile.in f lib/tilde/tilde.c f lib/tilde/tilde.h f lib/tilde/shell.c f +m4/unlocked-io.m4 f m4/strtoimax.m4 f m4/stat-time.m4 f m4/timespec.m4 f +m4/bison.m4 f +m4/c-bool.m4 f m4/codeset.m4 f m4/extern-inline.m4 f m4/fcntl-o.m4 f +m4/flexmember.m4 f m4/gettext.m4 f m4/glibc2.m4 f m4/glibc21.m4 f @@ -507,6 +552,7 @@ m4/lcmessage.m4 f m4/lib-ld.m4 f m4/lib-link.m4 f m4/lib-prefix.m4 f +m4/locale_h.m4 f m4/lock.m4 f m4/nls.m4 f m4/po.m4 f @@ -620,7 +666,6 @@ CWRU/misc/sigstat.c f CWRU/misc/bison f CWRU/misc/errlist.c f CWRU/misc/hpux10-dlfcn.h f -CWRU/PLATFORMS f CWRU/README f CWRU/changelog f CWRU/sh-redir-hack f @@ -693,7 +738,7 @@ support/fixlinks f 755 support/install.sh f 755 support/texi2dvi f 755 support/texi2html f 755 -support/xenix-link.sh f 755 +#support/xenix-link.sh f 755 support/shobj-conf f 755 support/rlvers.sh f 755 examples/INDEX.txt f @@ -728,6 +773,7 @@ examples/loadables/seq.c f examples/loadables/setpgid.c f examples/loadables/sleep.c f examples/loadables/strftime.c f +examples/loadables/strptime.c f examples/loadables/truefalse.c f examples/loadables/getconf.h f examples/loadables/getconf.c f @@ -736,6 +782,7 @@ examples/loadables/finfo.c f examples/loadables/cat.c f examples/loadables/csv.c f examples/loadables/dsv.c f +examples/loadables/kv.c f examples/loadables/cut.c f examples/loadables/logname.c f examples/loadables/basename.c f @@ -844,6 +891,7 @@ examples/scripts/inpath f #examples/scripts/scrollbar2 f #examples/scripts/self-repro f #examples/scripts/showperm.bash f +examples/scripts/secure-script f examples/scripts/shprompt f examples/scripts/spin.bash f #examples/scripts/timeout f @@ -892,6 +940,7 @@ tests/alias3.sub f tests/alias4.sub f tests/alias5.sub f tests/alias6.sub f +tests/alias7.sub f tests/alias.right f tests/appendop.tests f tests/appendop1.sub f @@ -909,6 +958,7 @@ tests/arith5.sub f tests/arith6.sub f tests/arith7.sub f tests/arith8.sub f +tests/arith9.sub f tests/array.tests f tests/array.right f tests/array1.sub f @@ -941,6 +991,9 @@ tests/array27.sub f tests/array28.sub f tests/array29.sub f tests/array30.sub f +tests/array31.sub f +tests/array32.sub f +tests/array33.sub f tests/array-at-star f tests/array2.right f tests/assoc.tests f @@ -963,6 +1016,7 @@ tests/assoc15.sub f tests/assoc16.sub f tests/assoc17.sub f tests/assoc18.sub f +tests/assoc19.sub f tests/attr.tests f tests/attr.right f tests/attr1.sub f @@ -978,6 +1032,11 @@ tests/builtins4.sub f tests/builtins5.sub f tests/builtins6.sub f tests/builtins7.sub f +tests/builtins8.sub f +tests/builtins9.sub f +tests/builtins10.sub f +tests/builtins11.sub f +tests/builtins12.sub f tests/source1.sub f tests/source2.sub f tests/source3.sub f @@ -1003,6 +1062,15 @@ tests/comsub3.sub f tests/comsub4.sub f tests/comsub5.sub f tests/comsub6.sub f +tests/comsub7.sub f +tests/comsub2.tests f +tests/comsub2.right f +tests/comsub21.sub f +tests/comsub22.sub f +tests/comsub23.sub f +tests/comsub24.sub f +tests/comsub25.sub f +tests/comsub26.sub f tests/comsub-eof.tests f tests/comsub-eof0.sub f tests/comsub-eof1.sub f @@ -1021,9 +1089,11 @@ tests/comsub-posix5.sub f tests/comsub-posix6.sub f tests/cond.tests f tests/cond.right f +tests/cond-error1.sub f tests/cond-regexp1.sub f tests/cond-regexp2.sub f tests/cond-regexp3.sub f +tests/cond-xtrace1.sub f tests/coproc.tests f tests/coproc.right f tests/cprint.tests f @@ -1063,6 +1133,7 @@ tests/dollar-star7.sub f tests/dollar-star8.sub f tests/dollar-star9.sub f tests/dollar-star10.sub f +tests/dollar-star11.sub f tests/dollar.right f tests/dstack.tests f tests/dstack.right f @@ -1081,6 +1152,8 @@ tests/errors6.sub f tests/errors7.sub f tests/errors8.sub f tests/errors9.sub f +tests/errors10.sub f +tests/errors11.sub f tests/execscript f tests/exec.right f tests/exec1.sub f 755 @@ -1097,6 +1170,7 @@ tests/exec11.sub f tests/exec12.sub f tests/exec13.sub f tests/exec14.sub f +tests/exec15.sub f tests/exp.tests f tests/exp.right f tests/exp1.sub f @@ -1131,12 +1205,14 @@ tests/extglob4.sub f tests/extglob5.sub f tests/extglob6.sub f tests/extglob7.sub f +tests/extglob8.sub f tests/func.tests f tests/func.right f tests/func1.sub f tests/func2.sub f tests/func3.sub f tests/func4.sub f +tests/func5.sub f tests/getopts.tests f tests/getopts.right f tests/getopts1.sub f @@ -1160,12 +1236,15 @@ tests/glob7.sub f tests/glob8.sub f tests/glob9.sub f tests/glob10.sub f +tests/glob11.sub f tests/glob.right f tests/globstar.tests f tests/globstar.right f tests/globstar1.sub f tests/globstar2.sub f tests/globstar3.sub f +tests/glob-bracket.tests f +tests/glob-bracket.right f tests/heredoc.tests f tests/heredoc.right f tests/heredoc1.sub f @@ -1175,6 +1254,9 @@ tests/heredoc4.sub f tests/heredoc5.sub f tests/heredoc6.sub f tests/heredoc7.sub f +tests/heredoc8.sub f +tests/heredoc9.sub f +tests/heredoc10.sub f tests/herestr.tests f tests/herestr.right f tests/herestr1.sub f @@ -1196,6 +1278,8 @@ tests/history3.sub f tests/history4.sub f tests/history5.sub f tests/history6.sub f +tests/history7.sub f +tests/history8.sub f tests/ifs.tests f tests/ifs.right f tests/ifs1.sub f @@ -1208,7 +1292,13 @@ tests/intl.tests f tests/intl1.sub f tests/intl2.sub f tests/intl3.sub f +tests/intl4.sub f tests/intl.right f +tests/invocation.tests f +tests/invocation.right f +tests/invocation1.sub f +tests/invocation2.sub f +tests/invocation3.sub f tests/iquote.tests f tests/iquote.right f tests/iquote1.sub f @@ -1222,6 +1312,8 @@ tests/jobs4.sub f tests/jobs5.sub f tests/jobs6.sub f tests/jobs7.sub f +tests/jobs8.sub f +tests/jobs9.sub f tests/jobs.right f tests/lastpipe.right f tests/lastpipe.tests f @@ -1259,6 +1351,7 @@ tests/nameref20.sub f tests/nameref21.sub f tests/nameref22.sub f tests/nameref23.sub f +tests/nameref24.sub f tests/nameref.right f tests/new-exp.tests f tests/new-exp1.sub f @@ -1325,6 +1418,9 @@ tests/printf1.sub f tests/printf2.sub f tests/printf3.sub f tests/printf4.sub f +tests/printf5.sub f +tests/printf6.sub f +tests/printf7.sub f tests/procsub.tests f tests/procsub.right f tests/procsub1.sub f @@ -1352,6 +1448,8 @@ tests/read5.sub f tests/read6.sub f tests/read7.sub f tests/read8.sub f +tests/read9.sub f +tests/read10.sub f tests/redir.tests f tests/redir.right f tests/redir1.sub f @@ -1368,6 +1466,8 @@ tests/redir8.sub f tests/redir9.sub f tests/redir10.sub f tests/redir11.sub f +tests/redir12.sub f +tests/redir13.in f tests/rhs-exp.tests f tests/rhs-exp.right f tests/rhs-exp1.sub f @@ -1391,6 +1491,7 @@ tests/run-case f tests/run-casemod f tests/run-complete f tests/run-comsub f +tests/run-comsub2 f tests/run-comsub-eof f tests/run-comsub-posix f tests/run-cond f @@ -1411,6 +1512,7 @@ tests/run-extglob3 f tests/run-func f tests/run-getopts f tests/run-glob-test f +tests/run-glob-bracket f tests/run-globstar f tests/run-heredoc f tests/run-herestr f @@ -1420,6 +1522,7 @@ tests/run-ifs f tests/run-ifs-posix f tests/run-input-test f tests/run-intl f +tests/run-invocation f tests/run-iquote f tests/run-invert f tests/run-jobs f @@ -1468,6 +1571,7 @@ tests/set-e3a.sub f tests/set-e.right f tests/set-x.tests f tests/set-x1.sub f +tests/set-x2.sub f tests/set-x.right f tests/shopt.tests f tests/shopt1.sub f @@ -1491,12 +1595,16 @@ tests/trap3.sub f tests/trap4.sub f tests/trap5.sub f tests/trap6.sub f +tests/trap7.sub f +tests/trap8.sub f +tests/trap9.sub f tests/type.tests f tests/type.right f tests/type1.sub f tests/type2.sub f tests/type3.sub f tests/type4.sub f +tests/type5.sub f tests/unicode1.sub f tests/unicode2.sub f tests/unicode3.sub f @@ -1525,6 +1633,8 @@ tests/varenv19.sub f tests/varenv20.sub f tests/varenv21.sub f tests/varenv22.sub f +tests/varenv23.sub f +tests/varenv24.sub f tests/version f tests/version.mini f tests/vredir.tests f diff --git a/Makefile.in b/Makefile.in index 0b4df73a7..14092c41c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,6 +1,6 @@ -# Makefile for bash-5.2, version 5.1 +# Makefile for bash-5.3, version 5.5 # -# Copyright (C) 1996-2021 Free Software Foundation, Inc. +# Copyright (C) 1996-2024 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -166,18 +166,27 @@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ $(LOCAL_LDFLAGS) $(CFLAGS_FOR_BUILD) ASAN_XCFLAGS = -fsanitize=address -fno-omit-frame-pointer ASAN_XLDFLAGS = -fsanitize=address +UBSAN_XCFLAGS = -fsanitize=undefined -fsanitize-recover -fstack-protector +UBSAN_XLDFLAGS = -fsanitize=undefined + GCOV_XCFLAGS = -fprofile-arcs -ftest-coverage GCOV_XLDFLAGS = -fprofile-arcs -ftest-coverage +# these need CC=clang +LSAN_CC = clang +LSAN_XCFLAGS = -fsanitize=leak -fno-common -fno-omit-frame-pointer -fno-optimize-sibling-calls +LSAN_XLDFLAGS = -fsanitize=leak + INCLUDES = -I. @RL_INCLUDE@ -I$(srcdir) -I$(BASHINCDIR) -I$(LIBSRC) $(INTL_INC) # Maybe add: -Wextra GCC_LINT_FLAGS = -O -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wno-parentheses \ -Wcast-align -Wstrict-prototypes -Wconversion -Wformat \ - -Wformat-nonliteral -Wmissing-braces -Wuninitialized \ + -Wmissing-braces -Wuninitialized \ -Wmissing-declarations -Winline \ - -Wmissing-prototypes -Wtraditional -Wredundant-decls \ - -Wformat-security -pedantic + -Wmissing-prototypes -Wredundant-decls \ + -Wformat-security -pedantic \ + -Werror=incompatible-pointer-types GCC_LINT_CFLAGS = $(BASE_CCFLAGS) $(CPPFLAGS) $(GCC_LINT_FLAGS) @@ -233,6 +242,7 @@ SHLIB_SOURCE = ${SH_LIBSRC}/clktck.c ${SH_LIBSRC}/getcwd.c \ ${SH_LIBSRC}/eaccess.c ${SH_LIBSRC}/wcsdup.c \ ${SH_LIBSRC}/zmapfd.c ${SH_LIBSRC}/fpurge.c \ ${SH_LIBSRC}/zgetline.c ${SH_LIBSRC}/mbscmp.c \ + ${SH_LIBSRC}/mbsncmp.c ${SH_LIBSRC}/anonfile.c \ ${SH_LIBSRC}/casemod.c ${SH_LIBSRC}/uconvert.c \ ${SH_LIBSRC}/ufuncs.c ${SH_LIBSRC}/dprintf.c \ ${SH_LIBSRC}/input_avail.c ${SH_LIBSRC}/mbscasecmp.c \ @@ -240,7 +250,9 @@ SHLIB_SOURCE = ${SH_LIBSRC}/clktck.c ${SH_LIBSRC}/getcwd.c \ ${SH_LIBSRC}/wcswidth.c ${SH_LIBSRC}/wcsnwidth.c \ ${SH_LIBSRC}/shmbchar.c ${SH_LIBSRC}/utf8.c \ ${SH_LIBSRC}/random.c ${SH_LIBSRC}/gettimeofday.c \ - ${SH_LIBSRC}/timers.c ${SH_LIBSRC}/strvis.c + ${SH_LIBSRC}/timers.c ${SH_LIBSRC}/strvis.c \ + ${SH_LIBSRC}/strlcpy.c ${SH_LIBSRC}/strscpy.c \ + ${SH_LIBSRC}/compat.c SHLIB_LIB = -lsh SHLIB_LIBNAME = libsh.a @@ -426,7 +438,11 @@ BASHINCFILES = $(BASHINCDIR)/posixstat.h $(BASHINCDIR)/ansi_stdlib.h \ $(BASHINCDIR)/posixtime.h $(BASHINCDIR)/systimes.h \ $(BASHINCDIR)/unionwait.h $(BASHINCDIR)/maxpath.h \ $(BASHINCDIR)/shtty.h $(BASHINCDIR)/typemax.h \ - $(BASHINCDIR)/ocache.h + $(BASHINCDIR)/ocache.h $(BASHINCDIR)/unlocked-io.h \ + $(BASHINCDIR)/chartypes.h \ + $(BASHINCDIR)/gettext.h $(BASHINCDIR)/posixselect.h \ + $(BASHINCDIR)/shmbchar.h $(BASHINCDIR)/shmbutil.h \ + $(BASHINCDIR)/stat-time.h $(BASHINCDIR)/timer.h LIBRARIES = $(GLOB_LIB) $(SHLIB_LIB) $(READLINE_LIB) $(HISTORY_LIB) \ $(TERMCAP_LIB) $(TILDE_LIB) $(MALLOC_LIB) $(INTL_LIB) $(LIBICONV) \ @@ -475,7 +491,8 @@ INSTALLED_BUILTINS_HEADERS = bashgetopt.h common.h getopt.h INSTALLED_INCFILES = posixstat.h ansi_stdlib.h filecntl.h posixdir.h \ memalloc.h stdc.h posixjmp.h posixwait.h posixtime.h systimes.h \ unionwait.h maxpath.h shtty.h typemax.h ocache.h chartypes.h gettext.h \ - posixstat.h shmbchar.h shmbutil.h stat-time.h + posixstat.h shmbchar.h shmbutil.h stat-time.h posixselect.h \ + timer.h unlocked-io.h # header files chosen based on running of configure SIGNAMES_H = @SIGNAMES_H@ @@ -566,8 +583,11 @@ CREATED_SUPPORT = signames.h recho$(EXEEXT) zecho$(EXEEXT) printenv$(EXEEXT) \ mksignames$(EXEEXT) lsignames.h \ mksyntax${EXEEXT} syntax.c $(VERSPROG) $(VERSOBJ) \ buildversion.o mksignames.o signames.o buildsignames.o +CREATED_MACOS = recho.dSYM zecho.dSYM printenv.dSYM xcase.dSYM \ + bashversion.dSYM mksyntax.dSYM ${DEFDIR}/psize.aux.dSYM CREATED_CONFIGURE = config.h config.cache config.status config.log \ - stamp-h po/POTFILES config.status.lineno + stamp-h po/POTFILES config.status.lineno \ + stdckdint.h CREATED_MAKEFILES = Makefile builtins/Makefile doc/Makefile \ lib/readline/Makefile lib/glob/Makefile \ lib/sh/Makefile lib/tilde/Makefile lib/malloc/Makefile \ @@ -621,13 +641,20 @@ lint: asan: ${MAKE} ${MFLAGS} ADDON_CFLAGS='${ASAN_XCFLAGS}' ADDON_LDFLAGS='${ASAN_XLDFLAGS}' .made +ubsan: + ${MAKE} ${MFLAGS} ADDON_CFLAGS='${UBSAN_XCFLAGS}' ADDON_LDFLAGS='${UBSAN_XLDFLAGS}' .made + valgrind: ${MAKE} ${MFLAGS} ADDON_CFLAGS='-DDISABLE_MALLOC_WRAPPERS' ADDON_LDFLAGS= .made +lsan: + ${MAKE} ${MFLAGS} CC=${LSAN_CC} ADDON_CFLAGS='${LSAN_XCFLAGS}' ADDON_LDFLAGS='${LSAN_XLDFLAGS}' .made + # cheating gcov: ${MAKE} ${MFLAGS} CFLAGS=-g ADDON_CFLAGS='${GCOV_XCFLAGS}' ADDON_LDFLAGS='${GCOV_XLDFLAGS}' .made + # have to make this separate because making tests depend on $(PROGRAM) asan-tests: asan $(TESTS_SUPPORT) @-test -d tests || mkdir tests @@ -635,6 +662,13 @@ asan-tests: asan $(TESTS_SUPPORT) @( cd $(srcdir)/tests && \ BUILD_DIR=$(BUILD_DIR) PATH=$(BUILD_DIR)/tests:$$PATH THIS_SH=$(THIS_SH) $(SHELL) ${TESTSCRIPT} ) +# have to make this separate because making tests depend on $(PROGRAM) +lsan-tests: lsan $(TESTS_SUPPORT) + @-test -d tests || mkdir tests + @cp $(TESTS_SUPPORT) tests + @( cd $(srcdir)/tests && \ + BUILD_DIR=$(BUILD_DIR) PATH=$(BUILD_DIR)/tests:$$PATH THIS_SH=$(THIS_SH) $(SHELL) ${TESTSCRIPT} ) + profiling-tests: ${PROGRAM} @test "X$$PROFILE_FLAGS" == "X" && { echo "profiling-tests: must be built with profiling enabled" >&2; exit 1; } @${MAKE} ${MFLAGS} tests TESTSCRIPT=run-gprof @@ -795,6 +829,9 @@ pathnames.h: Makefile $(srcdir)/pathnames.h.in fi @${RM} pathnames.tmp +$(SDIR)/bashbug.sh: $(SDIR)/bashbug.sh.in + CONFIG_FILES=$(SDIR)/bashbug.sh CONFIG_HEADERS= $(SHELL) ./config.status + # comment out for distribution $(srcdir)/configure: $(srcdir)/configure.ac $(srcdir)/aclocal.m4 $(srcdir)/config.h.in cd $(srcdir) && autoconf @@ -803,7 +840,8 @@ $(srcdir)/configure: $(srcdir)/configure.ac $(srcdir)/aclocal.m4 $(srcdir)/confi reconfig: force sh $(srcdir)/configure -C -loadables: +# force loadables to wait until the shell is built +loadables: .made cd $(LOADABLES_DIR) && $(MAKE) $(MFLAGS) all #newversion: mkversion @@ -895,7 +933,7 @@ uninstall: .made -( cd $(PO_DIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) -( cd $(LOADABLES_DIR) && $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) -.PHONY: basic-clean clean realclean maintainer-clean distclean mostlyclean maybe-clean +.PHONY: basic-clean clean maintainer-clean distclean mostlyclean maybe-clean LIB_SUBDIRS = ${RL_LIBDIR} ${HIST_LIBDIR} ${TERM_LIBDIR} ${GLOB_LIBDIR} \ ${INTL_LIBDIR} ${TILDE_LIBDIR} ${ALLOC_LIBDIR} ${SH_LIBDIR} @@ -914,6 +952,7 @@ clean: basic-clean -( cd $(PO_DIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) -( cd $(LOADABLES_DIR) && $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) $(RM) $(CREATED_SUPPORT) + $(RM) -rf $(CREATED_MACOS) mostlyclean: basic-clean ( cd $(DOCDIR) && $(MAKE) $(MFLAGS) $@ ) @@ -935,7 +974,8 @@ distclean: basic-clean maybe-clean -( cd $(PO_DIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) -( cd $(LOADABLES_DIR) && $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) $(RM) $(CREATED_CONFIGURE) tags TAGS - $(RM) $(CREATED_SUPPORT) Makefile $(CREATED_MAKEFILES) pathnames.h + $(RM) $(CREATED_SUPPORT) Makefile $(CREATED_MAKEFILES) $(CREATED_HEADERS) + $(RM) -rf $(CREATED_MACOS) maintainer-clean: basic-clean @echo This command is intended for maintainers to use. @@ -949,8 +989,9 @@ maintainer-clean: basic-clean done -( cd $(PO_DIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) -( cd $(LOADABLES_DIR) && $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) - $(RM) $(CREATED_CONFIGURE) $(CREATED_MAKEFILES) - $(RM) $(CREATED_SUPPORT) Makefile pathnames.h + $(RM) $(CREATED_CONFIGURE) Makefile $(CREATED_MAKEFILES) + $(RM) $(CREATED_SUPPORT) $(CREATED_HEADERS) + $(RM) -rf $(CREATED_MACOS) maybe-clean: -if test X"`cd $(topdir) && pwd -P`" != X"`cd $(BUILD_DIR) && pwd -P`" ; then \ @@ -1032,6 +1073,7 @@ copy_cmd.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h copy_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h copy_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h copy_cmd.o: bashansi.h assoc.h $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h +copy_cmd.o: $(BASHINCDIR)/unlocked-io.h dispose_cmd.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h dispose_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h dispose_cmd.o: error.h general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h @@ -1039,6 +1081,7 @@ dispose_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h dispose_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h dispose_cmd.o: ${BASHINCDIR}/ocache.h dispose_cmd.o: assoc.h ${BASHINCDIR}/chartypes.h +dispose_cmd.o: $(BASHINCDIR)/unlocked-io.h error.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h flags.h ${BASHINCDIR}/stdc.h error.h error.o: command.h general.h xmalloc.h externs.h input.h bashhist.h error.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h @@ -1047,12 +1090,14 @@ error.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h error.o: make_cmd.h subst.h sig.h pathnames.h externs.h execute_cmd.h error.o: input.h execute_cmd.h error.o: $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h assoc.h +error.o: $(BASHINCDIR)/unlocked-io.h eval.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h trap.h flags.h ${DEFSRC}/common.h eval.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h eval.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h eval.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h eval.o: make_cmd.h subst.h sig.h pathnames.h externs.h parser.h eval.o: input.h execute_cmd.h +eval.o: $(BASHINCDIR)/unlocked-io.h eval.o: bashhist.h assoc.h ${BASHINCDIR}/ocache.h ${BASHINCDIR}/chartypes.h execute_cmd.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h execute_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h @@ -1066,6 +1111,7 @@ execute_cmd.o: ${BASHINCDIR}/posixtime.h ${BASHINCDIR}/chartypes.h execute_cmd.o: $(DEFSRC)/getopt.h execute_cmd.o: bashhist.h input.h ${GRAM_H} assoc.h hashcmd.h alias.h execute_cmd.o: ${BASHINCDIR}/ocache.h ${BASHINCDIR}/posixwait.h +execute_cmd.o: $(BASHINCDIR)/unlocked-io.h expr.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h expr.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h expr.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h @@ -1129,6 +1175,7 @@ mailcheck.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h mailcheck.o: make_cmd.h subst.h sig.h pathnames.h externs.h mailcheck.o: execute_cmd.h mailcheck.h mailcheck.o: ${BASHINCDIR}/ocache.h ${BASHINCDIR}/chartypes.h assoc.h +mailcheck.o: $(BASHINCDIR)/unlocked-io.h make_cmd.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h bashansi.h make_cmd.o: command.h ${BASHINCDIR}/stdc.h general.h xmalloc.h error.h flags.h make_cmd.h make_cmd.o: variables.h arrayfunc.h conftypes.h array.h hashlib.h subst.h input.h externs.h @@ -1146,6 +1193,7 @@ y.tab.o: trap.h flags.h parser.h input.h mailcheck.h $(DEFSRC)/common.h y.tab.o: $(DEFDIR)/builtext.h bashline.h bashhist.h jobs.h siglist.h alias.h y.tab.o: ${BASHINCDIR}/typemax.h assoc.h ${BASHINCDIR}/ocache.h y.tab.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h ${BASHINCDIR}/posixwait.h +y.tab.o: $(BASHINCDIR)/unlocked-io.h pathexp.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h pathexp.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h pathexp.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h @@ -1164,6 +1212,7 @@ print_cmd.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h print_cmd.o: ${GRAM_H} $(DEFSRC)/common.h print_cmd.o: flags.h input.h assoc.h print_cmd.o: $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h +print_cmd.o: $(BASHINCDIR)/unlocked-io.h redir.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/filecntl.h redir.o: ${BASHINCDIR}/memalloc.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h redir.o: general.h xmalloc.h variables.h arrayfunc.h conftypes.h array.h hashlib.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h @@ -1171,6 +1220,7 @@ redir.o: dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h externs.h redir.o: flags.h execute_cmd.h redir.h input.h redir.o: ${DEFDIR}/pipesize.h redir.o: trap.h assoc.h $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h +redir.o: $(BASHINCDIR)/unlocked-io.h shell.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/filecntl.h shell.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h shell.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h @@ -1180,6 +1230,7 @@ shell.o: flags.h trap.h mailcheck.h builtins.h $(DEFSRC)/common.h shell.o: jobs.h siglist.h input.h execute_cmd.h findcmd.h bashhist.h bashline.h shell.o: ${GLOB_LIBSRC}/strmatch.h ${BASHINCDIR}/posixtime.h ${BASHINCDIR}/posixwait.h shell.o: ${BASHINCDIR}/ocache.h ${BASHINCDIR}/chartypes.h assoc.h alias.h +shell.o: $(BASHINCDIR)/unlocked-io.h sig.o: config.h bashtypes.h sig.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h sig.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h @@ -1187,6 +1238,7 @@ sig.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h sig.o: make_cmd.h subst.h sig.h pathnames.h externs.h execute_cmd.h sig.o: jobs.h siglist.h trap.h $(DEFSRC)/common.h bashline.h bashhist.h sig.o: ${DEFDIR}/builtext.h +sig.o: $(BASHINCDIR)/unlocked-io.h siglist.o: config.h bashtypes.h siglist.h trap.h stringlib.o: bashtypes.h ${BASHINCDIR}/chartypes.h stringlib.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h @@ -1206,6 +1258,7 @@ subst.o: bashline.h bashhist.h ${GLOB_LIBSRC}/strmatch.h subst.o: ${BASHINCDIR}/chartypes.h subst.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h subst.o: ${DEFDIR}/builtext.h +subst.o: $(BASHINCDIR)/unlocked-io.h test.o: bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h test.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h test.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h @@ -1250,11 +1303,13 @@ jobs.o: jobs.h flags.h $(DEFSRC)/common.h $(DEFDIR)/builtext.h jobs.o: ${BASHINCDIR}/posixwait.h ${BASHINCDIR}/unionwait.h jobs.o: ${BASHINCDIR}/posixtime.h jobs.o: $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h $(BASHINCDIR)/typemax.h +jobs.o: $(BASHINCDIR)/unlocked-io.h nojobs.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h bashjmp.h ${BASHINCDIR}/posixjmp.h nojobs.o: command.h ${BASHINCDIR}/stdc.h general.h xmalloc.h jobs.h quit.h siglist.h externs.h nojobs.o: sig.h error.h ${BASHINCDIR}/shtty.h input.h parser.h nojobs.o: $(DEFDIR)/builtext.h nojobs.o: $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h $(BASHINCDIR)/typemax.h +nojobs.o: $(BASHINCDIR)/unlocked-io.h # shell features that may be compiled in @@ -1322,6 +1377,7 @@ pcomplete.o: externs.h ${BASHINCDIR}/maxpath.h execute_cmd.h pcomplete.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h pcomplete.o: builtins.h ${DEFDIR}/builtext.h ${DEFSRC}/common.h pcomplete.o: ${GLOB_LIBSRC}/glob.h ${GLOB_LIBSRC}/strmatch.h +pcomplete.o: $(BASHINCDIR)/unlocked-io.h # library support files @@ -1345,6 +1401,7 @@ bashline.o: $(DEFSRC)/common.h $(GLOB_LIBSRC)/glob.h alias.h bashline.o: pcomplete.h ${BASHINCDIR}/chartypes.h input.h bashline.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h bashline.o: ${DEFDIR}/builtext.h +bashline.o: $(BASHINCDIR)/unlocked-io.h bracecomp.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bracecomp.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h bracecomp.o: command.h ${BASHINCDIR}/stdc.h error.h @@ -1432,6 +1489,7 @@ siglist.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h subst.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h test.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h trap.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h +unwind_prot.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h variables.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h version.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h xmalloc.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h @@ -1458,6 +1516,7 @@ builtins/common.o: dispose_cmd.h make_cmd.h subst.h externs.h bashhist.h builtins/common.o: execute_cmd.h ${BASHINCDIR}/stdc.h general.h xmalloc.h error.h pathnames.h builtins/common.o: ${DEFDIR}/builtext.h parser.h builtins/common.o: ${BASHINCDIR}/chartypes.h +builtins/common.o: $(BASHINCDIR)/unlocked-io.h builtins/evalfile.o: bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h builtins/evalfile.o: shell.h syntax.h config.h bashjmp.h command.h general.h xmalloc.h error.h builtins/evalfile.o: variables.h arrayfunc.h conftypes.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h @@ -1527,6 +1586,7 @@ builtins/echo.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwin builtins/echo.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/echo.o: pathnames.h builtins/echo.o: $(DEFSRC)/common.h +builtins/echo.o: $(BASHINCDIR)/unlocked-io.h builtins/enable.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/enable.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h builtins/enable.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h @@ -1547,6 +1607,7 @@ builtins/exit.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwin builtins/exit.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/exit.o: pathnames.h execute_cmd.h builtins/exit.o: ${DEFDIR}/builtext.h +builtins/exit.o: $(BASHINCDIR)/unlocked-io.h builtins/fc.o: bashtypes.h ${BASHINCDIR}/posixstat.h builtins/fc.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h builtins.h command.h ${BASHINCDIR}/stdc.h builtins/fc.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h @@ -1554,6 +1615,7 @@ builtins/fc.o: flags.h unwind_prot.h variables.h arrayfunc.h conftypes.h shell.h builtins/fc.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h quit.h builtins/fc.o: $(DEFSRC)/bashgetopt.h bashhist.h pathnames.h parser.h builtins/fc.o: ${BASHINCDIR}/chartypes.h +builtins/fc.o: $(BASHINCDIR)/unlocked-io.h builtins/fg_bg.o: bashtypes.h $(DEFSRC)/bashgetopt.h builtins/fg_bg.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/fg_bg.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h @@ -1568,16 +1630,19 @@ builtins/hash.o: builtins.h command.h findcmd.h ${BASHINCDIR}/stdc.h $(DEFSRC)/c builtins/hash.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/hash.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h builtins/hash.o: pathnames.h +builtins/hash.o: $(BASHINCDIR)/unlocked-io.h builtins/help.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/help.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/help.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h builtins/help.o: conftypes.h quit.h execute_cmd.h builtins/help.o: $(GLOB_LIBSRC)/glob.h pathnames.h +builtins/help.o: $(BASHINCDIR)/unlocked-io.h builtins/history.o: bashtypes.h pathnames.h parser.h builtins/history.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/history.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/history.o: ${BASHINCDIR}/filecntl.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h builtins/history.o: bashhist.h variables.h arrayfunc.h conftypes.h +builtins/history.o: $(BASHINCDIR)/unlocked-io.h builtins/inlib.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/inlib.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h builtins/inlib.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h @@ -1595,22 +1660,26 @@ builtins/let.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xm builtins/let.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/let.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h builtins/let.o: pathnames.h +builtins/let.o: $(BASHINCDIR)/unlocked-io.h builtins/printf.o: config.h ${BASHINCDIR}/memalloc.h bashjmp.h command.h error.h builtins/printf.o: general.h xmalloc.h quit.h dispose_cmd.h make_cmd.h subst.h builtins/printf.o: externs.h sig.h pathnames.h shell.h syntax.h unwind_prot.h builtins/printf.o: variables.h arrayfunc.h conftypes.h ${BASHINCDIR}/stdc.h $(DEFSRC)/bashgetopt.h builtins/printf.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h builtins/printf.o: ${BASHINCDIR}/chartypes.h +builtins/printf.o: $(BASHINCDIR)/unlocked-io.h builtins/pushd.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/pushd.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/pushd.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h builtins/pushd.o: $(DEFSRC)/common.h pathnames.h builtins/pushd.o: ${DEFDIR}/builtext.h +builtins/pushd.o: $(BASHINCDIR)/unlocked-io.h builtins/read.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/read.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/read.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h builtins/read.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h builtins/read.o: pathnames.h +builtins/read.o: $(BASHINCDIR)/unlocked-io.h builtins/return.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/return.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/return.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h @@ -1651,6 +1720,7 @@ builtins/times.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h builtins/times.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/times.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h builtins/times.o: pathnames.h +builtins/times.o: $(BASHINCDIR)/unlocked-io.h builtins/trap.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/trap.o: quit.h $(DEFSRC)/common.h builtins/trap.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h diff --git a/NEWS b/NEWS index 62d22127f..a9b99054e 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,135 @@ +This is a terse description of the new features added to bash-5.3 since +the release of bash-5.2. As always, the manual page (doc/bash.1) is +the place to look for complete descriptions. + +1. New Features in Bash + +a. When checking whether a script file argument is a binary file, check the + first two lines of a script if the first line begins with `#!'. + +b. Bash does a better job of preserving user-supplied quotes around a word + completion, instead of requoting it. + +c. Bash reports the starting line number in an error message about an + unterminated compound command like `if' without a `fi'. + +d. Implement the POSIX requirement that running the `jobs' builtin removes + jobs from the jobs list. + +f. Call bash signal handlers while executing programmable completion commands, + instead of readline's. + +g. Print an error message if a regular expression used with [[ fails to compile. + +h. The `umask' builtin now has additional features for full POSIX conformance. + +i. `type -a -P' reports both hashed pathnames and the result of a $PATH search. + +j. `trap' has a new -P option that prints the trap action associated with each + signal argument. + +k. The `command' builtin preceding a declaration builtin (e.g., `declare') + preserves the special asisgnment statement parsing for the declation + builtin. This is a new POSIX requirement. + +l. `printf' uses the `alternate form' for %q and %Q to force single quoting. + +m. `printf' now interprets %ls (%S) and %lc (%C)nas referring to wide strings + and characters, respectively, when in a multibyte locale. + +n. The shell can be compiled with a different default value for the + patsub_replacement option. + +o. Check for window size changes during trap commands, `bind -x' commands, + and programmable completion. + +p. Treat a NULL value for $PATH as equivalent to ".". + +p. New loadable builtins: kv, strptime + +q. GLOBSORT: new variable to specify how to sort the results of pathname + expansion (name, size, blocks, mtime, atime, ctime, none) in ascending + or descending order. + +r. `compgen' has a new option: -V varname. If supplied, it stores the generated + completions into VARNAME instead of printing them on stdout. + +s. New form of command substitution: ${ command; } or ${|command;} to capture + the output of COMMAND without forking a child process and using pipes. + +t. array_expand_once: new shopt option, replaces assoc_expand_once + +u. complete/compopt new option: fullquote; sets rl_full_quoting_desired so all + possible completions are quoted as if they were filenames. + +v. Command timing now allows precisions up to 6 digits instead of 3 in + $TIMEFORMAT. + +w. BASH_MONOSECONDS: new dynamic variable that returns the value of the + system's monotonic clock, if one is available. + +x. BASH_TRAPSIG: new variable, set to the numeric signal number of the trap + being executed while it's running. + +y. The checkwinsize option can be used in subshell commands started from + interactive shells. + +z. In posix mode, the test command < and > binary primaries compare strings + using the current locale. + +aa. bind -x allows new key binding syntax: separate the key sequence and the + command string with whitespace, but require the command string to be + double-quoted if this is used. This allows different quoting options for + the command string. + +bb. Print commands bound to key sequences using `bind -x' with the new key + binding syntax it allows. + +cc. `read' has a new `-E' option to use readline but with the default bash + completion (including programmable completion). + +dd. New bindable readline command name: `bash-vi-complete'. + +ee. New test builtin behavior when parsing a parenthesized subexpression and + test was given more than 4 arguments: scan forward for a closing paren and + call posixtest() if there are 4 or fewer arguments between the parentheses. + Added for compatibility with coreutils test, dependent on the shell + compatibility level. Such expressions remain ambiguous. + +2. New Features in Readline + +a. Output a newline if there is no prompt and readline reads an empty line. + +b. The history library falls back to stdio when writing the history list if + mmap fails. + +c. New bindable variable `search-ignore-case', causes readline to perform + case-insensitive incremental and non-incremental history searches. + +d. rl_full_quoting_desired: new application-settable variable, causes all + completions to be quoted as if they were filenames. + +e. rl_macro_display_hook: new application-settable function pointer, used if + the application wants to print macro values itself instead of letting + readline do it + +f. rl_reparse_colors: new application-callable function, reparses $LS_COLORS + (presumably after the user changes it) + +g. rl_completion_rewrite_hook: new application-settable function pointer, + called to modify the word being completed before comparing it against + pathnames from the file system. + +h. execute-named-command: a new bindable command that reads the name of a + readline command from the standard input and executes it. Bound to M-x + in emacs mode by default. + +i. Incremental and non-incremental searches now allow ^V/^Q (or, in the former + case, anything bound to quoted-insert) to quote characters in the search + string. + + +------------------------------------------------------------------------------- This is a terse description of the new features added to bash-5.2 since the release of bash-5.1. As always, the manual page (doc/bash.1) is the place to look for complete descriptions. diff --git a/POSIX b/POSIX index 4e78dbb75..a3132f5bb 100644 --- a/POSIX +++ b/POSIX @@ -1,32 +1,78 @@ -6.11 Bash POSIX Mode -==================== - -Starting Bash with the '--posix' command-line option or executing 'set --o posix' while Bash is running will cause Bash to conform more closely +6.11 Bash and POSIX +=================== + +6.11.1 What is POSIX? +--------------------- + +POSIX is the name for a family of standards based on Unix. A number of +Unix services, tools, and functions are part of the standard, ranging +from the basic system calls and C library functions to common +applications and tools to system administration and management. + +The POSIX Shell and Utilities standard was originally developed by IEEE +Working Group 1003.2 (POSIX.2). The first edition of the 1003.2 +standard was published in 1992. It was merged with the original IEEE +1003.1 Working Group and is currently maintained by the Austin Group (a +joint working group of the IEEE, The Open Group and ISO/IEC SC22/WG15). +Today the Shell and Utilities are a volume within the set of documents +that make up IEEE Std 1003.1-2017, and thus the former POSIX.2 (from +1992) is now part of the current unified POSIX standard. + +The Shell and Utilities volume concentrates on the command interpreter +interface and utility programs commonly executed from the command line +or by other programs. The standard is freely available on the web at +. + +Bash is concerned with the aspects of the shell's behavior defined by +the POSIX Shell and Utilities volume. The shell command language has of +course been standardized, including the basic flow control and program +execution constructs, I/O redirection and pipelines, argument handling, +variable expansion, and quoting. + +The special builtins, which must be implemented as part of the shell to +provide the desired functionality, are specified as being part of the +shell; examples of these are ‘eval’ and ‘export’. Other utilities +appear in the sections of POSIX not devoted to the shell which are +commonly (and in some cases must be) implemented as builtin commands, +such as ‘read’ and ‘test’. POSIX also specifies aspects of the shell's +interactive behavior, including job control and command line editing. +Only vi-style line editing commands have been standardized; emacs +editing commands were left out due to objections. + +6.11.2 Bash POSIX Mode +---------------------- + +Although Bash is an implementation of the POSIX shell specification, +there are areas where the Bash default behavior differs from the +specification. The Bash “posix mode” changes the Bash behavior in these +areas so that it conforms to the standard more closely. + +Starting Bash with the ‘--posix’ command-line option or executing ‘set +-o posix’ while Bash is running will cause Bash to conform more closely to the POSIX standard by changing the behavior to match that specified by POSIX in areas where the Bash default differs. -When invoked as 'sh', Bash enters POSIX mode after reading the startup +When invoked as ‘sh’, Bash enters POSIX mode after reading the startup files. The following list is what's changed when 'POSIX mode' is in effect: - 1. Bash ensures that the 'POSIXLY_CORRECT' variable is set. + 1. Bash ensures that the ‘POSIXLY_CORRECT’ variable is set. 2. When a command in the hash table no longer exists, Bash will - re-search '$PATH' to find the new location. This is also available - with 'shopt -s checkhash'. + re-search ‘$PATH’ to find the new location. This is also available + with ‘shopt -s checkhash’. 3. Bash will not insert a command without the execute bit set into the command hash table, even if it returns it as a (last-ditch) result - from a '$PATH' search. + from a ‘$PATH’ search. 4. The message printed by the job control code and builtins when a job exits with a non-zero status is 'Done(status)'. 5. The message printed by the job control code and builtins when a job is stopped is 'Stopped(SIGNAME)', where SIGNAME is, for example, - 'SIGTSTP'. + ‘SIGTSTP’. 6. Alias expansion is always enabled, even in non-interactive shells. @@ -40,19 +86,19 @@ The following list is what's changed when 'POSIX mode' is in effect: the command substitution is initially parsed (e.g., as part of a function definition). - 9. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number - and '!!' to '!' are enabled, and parameter expansion is performed - on the values of 'PS1' and 'PS2' regardless of the setting of the - 'promptvars' option. + 9. The POSIX ‘PS1’ and ‘PS2’ expansions of ‘!’ to the history number + and ‘!!’ to ‘!’ are enabled, and parameter expansion is performed + on the values of ‘PS1’ and ‘PS2’ regardless of the setting of the + ‘promptvars’ option. - 10. The POSIX startup files are executed ('$ENV') rather than the + 10. The POSIX startup files are executed (‘$ENV’) rather than the normal Bash files. 11. Tilde expansion is only performed on assignments preceding a command name, rather than on all assignment statements on the line. - 12. The default history file is '~/.sh_history' (this is the default - value of '$HISTFILE'). + 12. The default history file is ‘~/.sh_history’ (this is the default + value the shell assigns to ‘$HISTFILE’). 13. Redirection operators do not perform filename expansion on the word in the redirection unless the shell is interactive. @@ -60,7 +106,7 @@ The following list is what's changed when 'POSIX mode' is in effect: 14. Redirection operators do not perform word splitting on the word in the redirection. - 15. Function names must be valid shell 'name's. That is, they may not + 15. Function names must be valid shell ‘name’s. That is, they may not contain characters other than letters, digits, and underscores, and may not start with a digit. Declaring a function with an invalid name causes a fatal syntax error in non-interactive shells. @@ -68,45 +114,62 @@ The following list is what's changed when 'POSIX mode' is in effect: 16. Function names may not be the same as one of the POSIX special builtins. - 17. POSIX special builtins are found before shell functions during - command lookup. + 17. Even if a shell function whose name contains a slash was defined + before entering POSIX mode, the shell will not execute a function + whose name contains one or more slashes. + + 18. POSIX special builtins are found before shell functions during + command lookup, including output printed by the ‘type’ and + ‘command’ builtins. - 18. When printing shell function definitions (e.g., by 'type'), Bash - does not print the 'function' keyword. + 19. When printing shell function definitions (e.g., by ‘type’), Bash + does not print the ‘function’ keyword. - 19. Literal tildes that appear as the first character in elements of - the 'PATH' variable are not expanded as described above under *note + 20. Literal tildes that appear as the first character in elements of + the ‘PATH’ variable are not expanded as described above under *note Tilde Expansion::. - 20. The 'time' reserved word may be used by itself as a command. When + 21. The ‘time’ reserved word may be used by itself as a command. When used in this way, it displays timing statistics for the shell and - its completed children. The 'TIMEFORMAT' variable controls the + its completed children. The ‘TIMEFORMAT’ variable controls the format of the timing information. - 21. When parsing and expanding a ${...} expansion that appears within + 22. When parsing and expanding a ${...} expansion that appears within double quotes, single quotes are no longer special and cannot be used to quote a closing brace or other special character, unless the operator is one of those defined to perform pattern removal. In this case, they do not have to appear as matched pairs. - 22. The parser does not recognize 'time' as a reserved word if the - next token begins with a '-'. + 23. The parser does not recognize ‘time’ as a reserved word if the + next token begins with a ‘-’. - 23. The '!' character does not introduce history expansion within a - double-quoted string, even if the 'histexpand' option is enabled. + 24. The ‘!’ character does not introduce history expansion within a + double-quoted string, even if the ‘histexpand’ option is enabled. - 24. If a POSIX special builtin returns an error status, a + 25. If a POSIX special builtin returns an error status, a non-interactive shell exits. The fatal errors are those listed in the POSIX standard, and include things like passing incorrect options, redirection errors, variable assignment errors for assignments preceding the command name, and so on. - 25. A non-interactive shell exits with an error status if a variable + 26. The ‘unset’ builtin with the ‘-v’ option specified returns a fatal + error if it attempts to unset a ‘readonly’ or ‘non-unsettable’ + variable, or encounters a variable name argument that is an invalid + identifier, which causes a non-interactive shell to exit. + + 27. When asked to unset a variable that appears in an assignment + statement preceding the command, the ‘unset’ builtin attempts to + unset a variable of the same name in the current or previous scope + as well. This implements the required "if an assigned variable is + further modified by the utility, the modifications made by the + utility shall persist" behavior. + + 28. A non-interactive shell exits with an error status if a variable assignment error occurs when no command name follows the assignment statements. A variable assignment error occurs, for example, when trying to assign a value to a readonly variable. - 26. A non-interactive shell exits with an error status if a variable + 29. A non-interactive shell exits with an error status if a variable assignment error occurs in an assignment statement preceding a special builtin, but not with any other simple command. For any other simple command, the shell aborts execution of that command, @@ -114,151 +177,187 @@ The following list is what's changed when 'POSIX mode' is in effect: perform any further processing of the command in which the error occurred"). - 27. A non-interactive shell exits with an error status if the - iteration variable in a 'for' statement or the selection variable - in a 'select' statement is a readonly variable. + 30. A non-interactive shell exits with an error status if the + iteration variable in a ‘for’ statement or the selection variable + in a ‘select’ statement is a readonly variable or has an invalid + name. - 28. Non-interactive shells exit if FILENAME in '.' FILENAME is not + 31. Non-interactive shells exit if FILENAME in ‘.’ FILENAME is not found. - 29. Non-interactive shells exit if a syntax error in an arithmetic + 32. Non-interactive shells exit if a syntax error in an arithmetic expansion results in an invalid expression. - 30. Non-interactive shells exit if a parameter expansion error occurs. + 33. Non-interactive shells exit if a parameter expansion error occurs. - 31. Non-interactive shells exit if there is a syntax error in a script - read with the '.' or 'source' builtins, or in a string processed by - the 'eval' builtin. + 34. Non-interactive shells exit if there is a syntax error in a script + read with the ‘.’ or ‘source’ builtins, or in a string processed by + the ‘eval’ builtin. - 32. While variable indirection is available, it may not be applied to - the '#' and '?' special parameters. + 35. While variable indirection is available, it may not be applied to + the ‘#’ and ‘?’ special parameters. - 33. Expanding the '*' special parameter in a pattern context where the - expansion is double-quoted does not treat the '$*' as if it were + 36. Expanding the ‘*’ special parameter in a pattern context where the + expansion is double-quoted does not treat the ‘$*’ as if it were double-quoted. - 34. Assignment statements preceding POSIX special builtins persist in + 37. Assignment statements preceding POSIX special builtins persist in the shell environment after the builtin completes. - 35. The 'command' builtin does not prevent builtins that take + 38. The ‘command’ builtin does not prevent builtins that take assignment statements as arguments from expanding them as assignment statements; when not in POSIX mode, assignment builtins lose their assignment statement expansion properties when preceded - by 'command'. + by ‘command’. - 36. The 'bg' builtin uses the required format to describe each job + 39. The ‘bg’ builtin uses the required format to describe each job placed in the background, which does not include an indication of whether the job is the current or previous job. - 37. The output of 'kill -l' prints all the signal names on a single - line, separated by spaces, without the 'SIG' prefix. + 40. The output of ‘kill -l’ prints all the signal names on a single + line, separated by spaces, without the ‘SIG’ prefix. - 38. The 'kill' builtin does not accept signal names with a 'SIG' + 41. The ‘kill’ builtin does not accept signal names with a ‘SIG’ prefix. - 39. The 'export' and 'readonly' builtin commands display their output + 42. The ‘export’ and ‘readonly’ builtin commands display their output in the format required by POSIX. - 40. The 'trap' builtin displays signal names without the leading - 'SIG'. + 43. If the ‘export’ and ‘readonly’ builtin commands get an argument + that is not a valid identifier, and they are not operating on shell + functions, they return an error. This will cause a non-interactive + shell to exit because these are special builtins. + + 44. The ‘trap’ builtin displays signal names without the leading + ‘SIG’. - 41. The 'trap' builtin doesn't check the first argument for a possible + 45. The ‘trap’ builtin doesn't check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given signal to the original disposition, they should - use '-' as the first argument. + use ‘-’ as the first argument. - 42. 'trap -p' displays signals whose dispositions are set to SIG_DFL - and those that were ignored when the shell started. + 46. ‘trap -p’ without arguments displays signals whose dispositions + are set to SIG_DFL and those that were ignored when the shell + started, not just trapped signals. - 43. The '.' and 'source' builtins do not search the current directory - for the filename argument if it is not found by searching 'PATH'. + 47. The ‘.’ and ‘source’ builtins do not search the current directory + for the filename argument if it is not found by searching ‘PATH’. - 44. Enabling POSIX mode has the effect of setting the - 'inherit_errexit' option, so subshells spawned to execute command - substitutions inherit the value of the '-e' option from the parent - shell. When the 'inherit_errexit' option is not enabled, Bash - clears the '-e' option in such subshells. + 48. Enabling POSIX mode has the effect of setting the + ‘inherit_errexit’ option, so subshells spawned to execute command + substitutions inherit the value of the ‘-e’ option from the parent + shell. When the ‘inherit_errexit’ option is not enabled, Bash + clears the ‘-e’ option in such subshells. - 45. Enabling POSIX mode has the effect of setting the 'shift_verbose' - option, so numeric arguments to 'shift' that exceed the number of + 49. Enabling POSIX mode has the effect of setting the ‘shift_verbose’ + option, so numeric arguments to ‘shift’ that exceed the number of positional parameters will result in an error message. - 46. When the 'alias' builtin displays alias definitions, it does not - display them with a leading 'alias ' unless the '-p' option is + 50. When the ‘alias’ builtin displays alias definitions, it does not + display them with a leading ‘alias ’ unless the ‘-p’ option is supplied. - 47. When the 'set' builtin is invoked without options, it does not + 51. When the ‘set’ builtin is invoked without options, it does not display shell function names and definitions. - 48. When the 'set' builtin is invoked without options, it displays + 52. When the ‘set’ builtin is invoked without options, it displays variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. - 49. When the 'cd' builtin is invoked in logical mode, and the pathname - constructed from '$PWD' and the directory name supplied as an - argument does not refer to an existing directory, 'cd' will fail + 53. When the ‘cd’ builtin is invoked in logical mode, and the pathname + constructed from ‘$PWD’ and the directory name supplied as an + argument does not refer to an existing directory, ‘cd’ will fail instead of falling back to physical mode. - 50. When the 'cd' builtin cannot change a directory because the length - of the pathname constructed from '$PWD' and the directory name - supplied as an argument exceeds 'PATH_MAX' when all symbolic links - are expanded, 'cd' will fail instead of attempting to use only the - supplied directory name. + 54. When the ‘cd’ builtin cannot change a directory because the length + of the pathname constructed from ‘$PWD’ and the directory name + supplied as an argument exceeds ‘PATH_MAX’ when canonicalized, ‘cd’ + will attempt to use the supplied directory name. - 51. The 'pwd' builtin verifies that the value it prints is the same as + 55. The ‘pwd’ builtin verifies that the value it prints is the same as the current directory, even if it is not asked to check the file - system with the '-P' option. + system with the ‘-P’ option. - 52. When listing the history, the 'fc' builtin does not include an + 56. When listing the history, the ‘fc’ builtin does not include an indication of whether or not a history entry has been modified. - 53. The default editor used by 'fc' is 'ed'. + 57. The default editor used by ‘fc’ is ‘ed’. + + 58. ‘fc’ treats extra arguments as an error instead of ignoring them. - 54. The 'type' and 'command' builtins will not report a non-executable + 59. If there are too many arguments supplied to ‘fc -s’, ‘fc’ prints + an error message and returns failure. + + 60. The ‘type’ and ‘command’ builtins will not report a non-executable file as having been found, though the shell will attempt to execute - such a file if it is the only so-named file found in '$PATH'. + such a file if it is the only so-named file found in ‘$PATH’. - 55. The 'vi' editing mode will invoke the 'vi' editor directly when - the 'v' command is run, instead of checking '$VISUAL' and - '$EDITOR'. + 61. The ‘vi’ editing mode will invoke the ‘vi’ editor directly when + the ‘v’ command is run, instead of checking ‘$VISUAL’ and + ‘$EDITOR’. - 56. When the 'xpg_echo' option is enabled, Bash does not attempt to - interpret any arguments to 'echo' as options. Each argument is + 62. When the ‘xpg_echo’ option is enabled, Bash does not attempt to + interpret any arguments to ‘echo’ as options. Each argument is displayed, after escape characters are converted. - 57. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' - and '-f' options. + 63. The ‘ulimit’ builtin uses a block size of 512 bytes for the ‘-c’ + and ‘-f’ options. - 58. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not - interrupt the 'wait' builtin and cause it to return immediately. + 64. The arrival of ‘SIGCHLD’ when a trap is set on ‘SIGCHLD’ does not + interrupt the ‘wait’ builtin and cause it to return immediately. The trap command is run once for each child that exits. - 59. The 'read' builtin may be interrupted by a signal for which a trap + 65. The ‘read’ builtin may be interrupted by a signal for which a trap has been set. If Bash receives a trapped signal while executing - 'read', the trap handler executes and 'read' returns an exit status + ‘read’, the trap handler executes and ‘read’ returns an exit status greater than 128. - 60. The 'printf' builtin uses 'double' (via 'strtod') to convert + 66. The ‘printf’ builtin uses ‘double’ (via ‘strtod’) to convert arguments corresponding to floating point conversion specifiers, - instead of 'long double' if it's available. The 'L' length - modifier forces 'printf' to use 'long double' if it's available. + instead of ‘long double’ if it's available. The ‘L’ length + modifier forces ‘printf’ to use ‘long double’ if it's available. + + 67. Bash removes an exited background process's status from the list + of such statuses after the ‘wait’ builtin is used to obtain it. + + 68. A double quote character (‘"’) is treated specially when it + appears in a backquoted command substitution in the body of a + here-document that undergoes expansion. That means, for example, + that a backslash preceding a double quote character will escape it + and the backslash will be removed. - 61. Bash removes an exited background process's status from the list - of such statuses after the 'wait' builtin is used to obtain it. + 69. The ‘test’ builtin compares strings using the current locale when + processing the ‘<’ and ‘>’ binary operators. + + 70. The ‘test’ builtin's ‘-t’ unary primary requires an argument. + Historical versions of ‘test’ made the argument optional in certain + cases, and Bash attempts to accommodate those for backwards + compatibility. + + 71. Command substitutions don't set the ‘?’ special parameter. The + exit status of a simple command without a command word is still the + exit status of the last command substitution that occurred while + evaluating the variable assignments and redirections in that + command, but that does not happen until after all of the + assignments and redirections. There is other POSIX behavior that Bash does not implement by default even when in POSIX mode. Specifically: - 1. The 'fc' builtin checks '$EDITOR' as a program to edit history - entries if 'FCEDIT' is unset, rather than defaulting directly to - 'ed'. 'fc' uses 'ed' if 'EDITOR' is unset. + 1. The ‘fc’ builtin checks ‘$EDITOR’ as a program to edit history + entries if ‘FCEDIT’ is unset, rather than defaulting directly to + ‘ed’. ‘fc’ uses ‘ed’ if ‘EDITOR’ is unset. + + 2. A non-interactive shell does not exit if a variable assignment + preceding the ‘command’ builtin or another non-special builtin + fails. - 2. As noted above, Bash requires the 'xpg_echo' option to be enabled - for the 'echo' builtin to be fully conformant. + 3. As noted above, Bash requires the ‘xpg_echo’ option to be enabled + for the ‘echo’ builtin to be fully conformant. Bash can be configured to be POSIX-conformant by default, by specifying -the '--enable-strict-posix-default' to 'configure' when building (*note +the ‘--enable-strict-posix-default’ to ‘configure’ when building (*note Optional Features::). diff --git a/RBASH b/RBASH index 7d0a5e8d1..8dc5d3cbe 100644 --- a/RBASH +++ b/RBASH @@ -1,52 +1,52 @@ 6.10 The Restricted Shell ========================= -If Bash is started with the name 'rbash', or the '--restricted' or '-r' +If Bash is started with the name ‘rbash’, or the ‘--restricted’ or ‘-r’ 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. A restricted shell behaves identically to 'bash' +the standard shell. A restricted shell behaves identically to ‘bash’ with the exception that the following are disallowed or not performed: - * Changing directories with the 'cd' builtin. - * Setting or unsetting the values of the 'SHELL', 'PATH', 'HISTFILE', - 'ENV', or 'BASH_ENV' variables. - * Specifying command names containing slashes. - * Specifying a filename containing a slash as an argument to the '.' + • Changing directories with the ‘cd’ builtin. + • Setting or unsetting the values of the ‘SHELL’, ‘PATH’, ‘HISTFILE’, + ‘ENV’, or ‘BASH_ENV’ variables. + • Specifying command names containing slashes. + • Specifying a filename containing a slash as an argument to the ‘.’ builtin command. - * Specifying a filename containing a slash as an argument to the - 'history' builtin command. - * Specifying a filename containing a slash as an argument to the '-p' - option to the 'hash' builtin command. - * Importing function definitions from the shell environment at + • Specifying a filename containing a slash as an argument to the + ‘history’ builtin command. + • Specifying a filename containing a slash as an argument to the ‘-p’ + option to the ‘hash’ builtin command. + • Importing function definitions from the shell environment at startup. - * Parsing the value of 'SHELLOPTS' from the shell environment at + • Parsing the value of ‘SHELLOPTS’ from the shell environment at startup. - * Redirecting output using the '>', '>|', '<>', '>&', '&>', and '>>' + • Redirecting output using the ‘>’, ‘>|’, ‘<>’, ‘>&’, ‘&>’, and ‘>>’ redirection operators. - * Using the 'exec' builtin to replace the shell with another command. - * Adding or deleting builtin commands with the '-f' and '-d' options - to the 'enable' builtin. - * Using the 'enable' builtin command to enable disabled shell + • Using the ‘exec’ builtin to replace the shell with another command. + • Adding or deleting builtin commands with the ‘-f’ and ‘-d’ options + to the ‘enable’ builtin. + • Using the ‘enable’ builtin command to enable disabled shell builtins. - * Specifying the '-p' option to the 'command' builtin. - * Turning off restricted mode with 'set +r' or 'shopt -u - restricted_shell'. + • Specifying the ‘-p’ option to the ‘command’ builtin. + • Turning off restricted mode with ‘set +r’ or ‘shopt -u + restricted_shell’. These restrictions are enforced after any startup files are read. When a command that is found to be a shell script is executed (*note -Shell Scripts::), 'rbash' turns off any restrictions in the shell +Shell Scripts::), ‘rbash’ turns off any restrictions in the shell spawned to execute the script. The restricted shell mode is only one component of a useful restricted -environment. It should be accompanied by setting 'PATH' to a value that +environment. It should be accompanied by setting ‘PATH’ to a value that allows execution of only a few verified commands (commands that allow shell escapes are particularly vulnerable), changing the current -directory to a non-writable directory other than '$HOME' after login, +directory to a non-writable directory other than ‘$HOME’ after login, not allowing the restricted shell to execute shell scripts, and cleaning the environment of variables that cause some commands to modify their -behavior (e.g., 'VISUAL' or 'PAGER'). +behavior (e.g., ‘VISUAL’ or ‘PAGER’). Modern systems provide more secure ways to implement a restricted -environment, such as 'jails', 'zones', or 'containers'. +environment, such as ‘jails’, ‘zones’, or ‘containers’. diff --git a/README b/README index 90d0be5bf..1ed6e8630 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ Introduction ============ -This is GNU Bash, version 5.2. Bash is the GNU Project's Bourne +This is GNU Bash, version 5.3. Bash is the GNU Project's Bourne Again SHell, a complete implementation of the POSIX shell spec, but also with interactive command line editing, job control on architectures that support it, csh-like features such as history diff --git a/aclocal.m4 b/aclocal.m4 index cc97bd4b8..ac42dbf6f 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -3,7 +3,7 @@ dnl Bash specific tests dnl dnl Some derived from PDKSH 5.1.3 autoconf tests dnl -dnl Copyright (C) 1987-2021 Free Software Foundation, Inc. +dnl Copyright (C) 1987-2024 Free Software Foundation, Inc. dnl dnl @@ -69,11 +69,7 @@ AC_DEFUN(BASH_DECL_PRINTF, AC_CACHE_VAL(bash_cv_printf_declared, [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include -#ifdef __STDC__ typedef int (*_bashfunc)(const char *, ...); -#else -typedef int (*_bashfunc)(); -#endif #include int main() @@ -238,6 +234,9 @@ AC_CACHE_VAL(bash_cv_dup2_broken, #include #include #include +#ifdef HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ int main() { @@ -432,6 +431,7 @@ AC_CACHE_VAL(bash_cv_sizeof_rlim_cur, #endif #include #include +int main() { struct rlimit r; @@ -457,6 +457,7 @@ AC_CACHE_VAL(bash_cv_sizeof_quad_t, #include #endif +int main() { #if HAVE_QUAD_T @@ -558,18 +559,8 @@ AC_CACHE_VAL(bash_cv_getenv_redef, # include #endif #include -#ifndef __STDC__ -# ifndef const -# define const -# endif -#endif char * -getenv (name) -#if defined (__linux__) || defined (__bsdi__) || defined (convex) - const char *name; -#else - char const *name; -#endif /* !__linux__ && !__bsdi__ && !convex */ +getenv (const char *name) { return "42"; } @@ -599,7 +590,6 @@ fi # We should check for putenv before calling this AC_DEFUN(BASH_FUNC_STD_PUTENV, [ -AC_REQUIRE([AC_C_PROTOTYPES]) AC_CACHE_CHECK([for standard-conformant putenv declaration], bash_cv_std_putenv, [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #if HAVE_STDLIB_H @@ -608,16 +598,7 @@ AC_CACHE_CHECK([for standard-conformant putenv declaration], bash_cv_std_putenv, #if HAVE_STDDEF_H #include #endif -#ifndef __STDC__ -# ifndef const -# define const -# endif -#endif -#ifdef PROTOTYPES extern int putenv (char *); -#else -extern int putenv (); -#endif ]], [[return (putenv == 0);]] )], [bash_cv_std_putenv=yes], [bash_cv_std_putenv=no] )]) @@ -629,7 +610,6 @@ fi # We should check for unsetenv before calling this AC_DEFUN(BASH_FUNC_STD_UNSETENV, [ -AC_REQUIRE([AC_C_PROTOTYPES]) AC_CACHE_CHECK([for standard-conformant unsetenv declaration], bash_cv_std_unsetenv, [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #if HAVE_STDLIB_H @@ -638,16 +618,7 @@ AC_CACHE_CHECK([for standard-conformant unsetenv declaration], bash_cv_std_unset #if HAVE_STDDEF_H #include #endif -#ifndef __STDC__ -# ifndef const -# define const -# endif -#endif -#ifdef PROTOTYPES extern int unsetenv (const char *); -#else -extern int unsetenv (); -#endif ]], [[return (unsetenv == 0);]] )], [bash_cv_std_unsetenv=yes], [bash_cv_std_unsetenv=no] )]) @@ -841,9 +812,7 @@ AC_CACHE_VAL(bash_cv_func_strcoll_broken, #include int -main(c, v) -int c; -char *v[]; +main(int c, char **v) { int r1, r2; char *deflocale, *defcoll; @@ -986,6 +955,9 @@ TERMCAP_DEP= elif test $bash_cv_termcap_lib = libncurses; then TERMCAP_LIB=-lncurses TERMCAP_DEP= +elif test $bash_cv_termcap_lib = libcurses; then +TERMCAP_LIB=-lcurses +TERMCAP_DEP= elif test $bash_cv_termcap_lib = libc; then TERMCAP_LIB= TERMCAP_DEP= @@ -1345,15 +1317,13 @@ AC_CACHE_VAL(bash_cv_must_reinstall_sighandlers, #endif #include -typedef void sigfunc(); +typedef void sigfunc(int); volatile int nsigint; #ifdef HAVE_POSIX_SIGNALS sigfunc * -set_signal_handler(sig, handler) - int sig; - sigfunc *handler; +set_signal_handler(int sig, sigfunc *handler) { struct sigaction act, oact; act.sa_handler = handler; @@ -1368,8 +1338,7 @@ set_signal_handler(sig, handler) #endif void -sigint(s) -int s; +sigint(int s) { nsigint++; } @@ -1607,13 +1576,15 @@ AC_DEFUN(BASH_CHECK_DEV_FD, [AC_MSG_CHECKING(whether /dev/fd is available) AC_CACHE_VAL(bash_cv_dev_fd, [bash_cv_dev_fd="" -if test -d /dev/fd && (exec test -r /dev/fd/0 < /dev/null) ; then +if test -d /dev/fd && (exec test -r /dev/fd/0 < /dev/null) ; then # check for systems like FreeBSD 5 that only provide /dev/fd/[012] if (exec test -r /dev/fd/3 3 int -main(c, v) -int c; -char **v; +main(int c, char **v) { int w; setlocale(LC_ALL, "en_US.UTF-8"); w = wcwidth (0x0301); + if (w != 0) + exit (0); + w = wcwidth (0x200b); exit (w == 0); /* exit 0 if wcwidth broken */ } ]])], [bash_cv_wcwidth_broken=yes], [bash_cv_wcwidth_broken=no], @@ -2093,31 +2070,17 @@ AC_DEFUN([BASH_FUNC_VSNPRINTF], if test X$ac_cv_func_vsnprintf = Xyes; then AC_CACHE_CHECK([for standard-conformant vsnprintf], [bash_cv_func_vsnprintf], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ -#if HAVE_STDARG_H #include -#else -#include -#endif #include #include static int -#if HAVE_STDARG_H foo(const char *fmt, ...) -#else -foo(format, va_alist) - const char *format; - va_dcl -#endif { va_list args; int n; -#if HAVE_STDARG_H va_start(args, fmt); -#else - va_start(args); -#endif n = vsnprintf(0, 0, fmt, args); va_end (args); return n; @@ -2154,9 +2117,7 @@ AC_CACHE_VAL(bash_cv_wexitstatus_offset, #include int -main(c, v) - int c; - char **v; +main(int c, char **v) { pid_t pid, p; int s, i, n; @@ -2230,6 +2191,43 @@ main(int c, char **v) fi ]) +AC_DEFUN([BASH_FUNC_BRK], +[ + AC_MSG_CHECKING([for brk]) + AC_CACHE_VAL(ac_cv_func_brk, + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[ void *x = brk (0); ]])], + [ac_cv_func_brk=yes],[ac_cv_func_brk=no])]) + AC_MSG_RESULT($ac_cv_func_brk) + if test X$ac_cv_func_brk = Xyes; then + AC_CACHE_CHECK([for working brk], [bash_cv_func_brk], + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include +#include + +int +main(int c, char **v) +{ + void *x; + + x = brk (0); + exit ((x == (void *)-1) ? 1 : 0); +} +]])],[bash_cv_func_brk=yes],[bash_cv_func_brk=no],[AC_MSG_WARN([cannot check working brk if cross-compiling]) + bash_cv_func_brk=yes +])]) + if test $bash_cv_func_brk = no; then + ac_cv_func_brk=no + fi + fi + if test $ac_cv_func_brk = yes; then + AC_DEFINE(HAVE_BRK, 1, + [Define if you have a working brk function.]) + fi +]) + AC_DEFUN(BASH_FUNC_FNMATCH_EQUIV_FALLBACK, [AC_MSG_CHECKING(whether fnmatch can be used to check bracket equivalence classes) AC_CACHE_VAL(bash_cv_fnmatch_equiv_fallback, diff --git a/alias.c b/alias.c index 23f967fa8..cb52507c9 100644 --- a/alias.c +++ b/alias.c @@ -1,7 +1,7 @@ /* alias.c -- Not a full alias, but just the kind that we use in the shell. Csh style alias is somewhere else (`over there, in a box'). */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -48,17 +48,17 @@ #define ALIAS_HASH_BUCKETS 64 /* must be power of two */ -typedef int sh_alias_map_func_t PARAMS((alias_t *)); +typedef int sh_alias_map_func_t (alias_t *); -static void free_alias_data PARAMS((PTR_T)); -static alias_t **map_over_aliases PARAMS((sh_alias_map_func_t *)); -static void sort_aliases PARAMS((alias_t **)); -static int qsort_alias_compare PARAMS((alias_t **, alias_t **)); +static void free_alias_data (PTR_T); +static alias_t **map_over_aliases (sh_alias_map_func_t *); +static void sort_aliases (alias_t **); +static int qsort_alias_compare (alias_t **, alias_t **); #if defined (READLINE) -static int skipquotes PARAMS((char *, int)); -static int skipws PARAMS((char *, int)); -static int rd_token PARAMS((char *, int)); +static int skipquotes (char *, int); +static int skipws (char *, int); +static int rd_token (char *, int); #endif /* Non-zero means expand all words on the line. Otherwise, expand @@ -69,7 +69,7 @@ int alias_expand_all = 0; HASH_TABLE *aliases = (HASH_TABLE *)NULL; void -initialize_aliases () +initialize_aliases (void) { if (aliases == 0) aliases = hash_create (ALIAS_HASH_BUCKETS); @@ -78,8 +78,7 @@ initialize_aliases () /* Scan the list of aliases looking for one with NAME. Return NULL if the alias doesn't exist, else a pointer to the alias_t. */ alias_t * -find_alias (name) - char *name; +find_alias (const char *name) { BUCKET_CONTENTS *al; @@ -92,8 +91,7 @@ find_alias (name) /* Return the value of the alias for NAME, or NULL if there is none. */ char * -get_alias_value (name) - char *name; +get_alias_value (const char *name) { alias_t *alias; @@ -107,8 +105,7 @@ get_alias_value (name) /* Make a new alias from NAME and VALUE. If NAME can be found, then replace its value. */ void -add_alias (name, value) - char *name, *value; +add_alias (const char *name, const char *value) { BUCKET_CONTENTS *elt; alias_t *temp; @@ -158,8 +155,7 @@ add_alias (name, value) /* Delete a single alias structure. */ static void -free_alias_data (data) - PTR_T data; +free_alias_data (PTR_T data) { register alias_t *a; @@ -177,8 +173,7 @@ free_alias_data (data) the number of aliases left in the table, or -1 if the alias didn't exist. */ int -remove_alias (name) - char *name; +remove_alias (const char *name) { BUCKET_CONTENTS *elt; @@ -201,7 +196,7 @@ remove_alias (name) /* Delete all aliases. */ void -delete_all_aliases () +delete_all_aliases (void) { if (aliases == 0) return; @@ -217,11 +212,10 @@ delete_all_aliases () /* Return an array of aliases that satisfy the conditions tested by FUNCTION. If FUNCTION is NULL, return all aliases. */ static alias_t ** -map_over_aliases (function) - sh_alias_map_func_t *function; +map_over_aliases (sh_alias_map_func_t *function) { register int i; - register BUCKET_CONTENTS *tlist; + BUCKET_CONTENTS *tlist; alias_t *alias, **list; int list_index; @@ -246,16 +240,8 @@ map_over_aliases (function) return (list); } -static void -sort_aliases (array) - alias_t **array; -{ - qsort (array, strvec_len ((char **)array), sizeof (alias_t *), (QSFUNC *)qsort_alias_compare); -} - static int -qsort_alias_compare (as1, as2) - alias_t **as1, **as2; +qsort_alias_compare (alias_t **as1, alias_t **as2) { int result; @@ -265,9 +251,15 @@ qsort_alias_compare (as1, as2) return (result); } +static void +sort_aliases (alias_t **array) +{ + qsort (array, strvec_len ((char **)array), sizeof (alias_t *), (QSFUNC *)qsort_alias_compare); +} + /* Return a sorted list of all defined aliases */ alias_t ** -all_aliases () +all_aliases (void) { alias_t **list; @@ -281,8 +273,7 @@ all_aliases () } char * -alias_expand_word (s) - char *s; +alias_expand_word (const char *s) { alias_t *r; @@ -319,9 +310,7 @@ static int command_word; backslash-escaped characters. */ static int -skipquotes (string, start) - char *string; - int start; +skipquotes (char *string, int start) { register int i; int delimiter = string[start]; @@ -348,9 +337,7 @@ skipquotes (string, start) START. Return the new index into STRING, after zero or more characters have been skipped. */ static int -skipws (string, start) - char *string; - int start; +skipws (char *string, int start) { register int i; int pass_next, backslash_quoted_word; @@ -435,9 +422,7 @@ skipws (string, start) skipquotes () for quoted strings in the middle or at the end of tokens, so all characters show up (e.g. foo'' and foo""bar) */ static int -rd_token (string, start) - char *string; - int start; +rd_token (char *string, int start) { register int i; @@ -476,12 +461,13 @@ rd_token (string, start) /* Return a new line, with any aliases substituted. */ char * -alias_expand (string) - char *string; + +alias_expand (char *string) { - register int i, j, start; + int i, start; char *line, *token; - int line_len, tl, real_start, expand_next, expand_this_token; + size_t j, line_len; + int tl, real_start, expand_next, expand_this_token; alias_t *alias; line_len = strlen (string) + 1; @@ -560,7 +546,7 @@ alias_expand (string) (alias = find_alias (token))) { char *v; - int vlen, llen; + size_t vlen, llen; v = alias->value; vlen = strlen (v); @@ -577,7 +563,7 @@ alias_expand (string) } else { - int llen, tlen; + size_t llen, tlen; llen = strlen (line); tlen = i - real_start; /* tlen == strlen(token) */ diff --git a/alias.h b/alias.h index 4e2d67c0f..af4a54486 100644 --- a/alias.h +++ b/alias.h @@ -1,6 +1,6 @@ /* alias.h -- structure definitions. */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -38,36 +38,36 @@ typedef struct alias { /* The list of known aliases. */ extern HASH_TABLE *aliases; -extern void initialize_aliases PARAMS((void)); +extern void initialize_aliases (void); /* Scan the list of aliases looking for one with NAME. Return NULL if the alias doesn't exist, else a pointer to the alias. */ -extern alias_t *find_alias PARAMS((char *)); +extern alias_t *find_alias (const char *); /* Return the value of the alias for NAME, or NULL if there is none. */ -extern char *get_alias_value PARAMS((char *)); +extern char *get_alias_value (const char *); /* Make a new alias from NAME and VALUE. If NAME can be found, then replace its value. */ -extern void add_alias PARAMS((char *, char *)); +extern void add_alias (const char *, const char *); /* Remove the alias with name NAME from the alias list. Returns the index of the removed alias, or -1 if the alias didn't exist. */ -extern int remove_alias PARAMS((char *)); +extern int remove_alias (const char *); /* Remove all aliases. */ -extern void delete_all_aliases PARAMS((void)); +extern void delete_all_aliases (void); /* Return an array of all defined aliases. */ -extern alias_t **all_aliases PARAMS((void)); +extern alias_t **all_aliases (void); /* Expand a single word for aliases. */ -extern char *alias_expand_word PARAMS((char *)); +extern char *alias_expand_word (const char *); /* Return a new line, with any aliases expanded. */ -extern char *alias_expand PARAMS((char *)); +extern char *alias_expand (char *); /* Helper definition for the parser */ -extern void clear_string_list_expander PARAMS((alias_t *)); +extern void clear_string_list_expander (alias_t *); #endif /* _ALIAS_H_ */ diff --git a/array.c b/array.c index 910bbaad8..dbfe90968 100644 --- a/array.c +++ b/array.c @@ -9,7 +9,7 @@ * chet@ins.cwru.edu */ -/* Copyright (C) 1997-2021 Free Software Foundation, Inc. +/* Copyright (C) 1997-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -61,7 +61,7 @@ ae->next = new; \ } while (0) -static char *array_to_string_internal PARAMS((ARRAY_ELEMENT *, ARRAY_ELEMENT *, char *, int)); +static char *array_to_string_internal (ARRAY_ELEMENT *, ARRAY_ELEMENT *, char *, int); static char *spacesep = " "; @@ -78,7 +78,7 @@ static char *spacesep = " "; #define UNSET_LASTREF(a) a->lastref = 0; ARRAY * -array_create() +array_create(void) { ARRAY *r; ARRAY_ELEMENT *head; @@ -94,8 +94,7 @@ array_create() } void -array_flush (a) -ARRAY *a; +array_flush (ARRAY *a) { register ARRAY_ELEMENT *r, *r1; @@ -113,8 +112,7 @@ ARRAY *a; } void -array_dispose(a) -ARRAY *a; +array_dispose(ARRAY *a) { if (a == 0) return; @@ -124,8 +122,7 @@ ARRAY *a; } ARRAY * -array_copy(a) -ARRAY *a; +array_copy(ARRAY *a) { ARRAY *a1; ARRAY_ELEMENT *ae, *new; @@ -149,9 +146,7 @@ ARRAY *a; * S to E, inclusive. */ ARRAY * -array_slice(array, s, e) -ARRAY *array; -ARRAY_ELEMENT *s, *e; +array_slice(ARRAY *array, ARRAY_ELEMENT *s, ARRAY_ELEMENT *e) { ARRAY *a; ARRAY_ELEMENT *p, *n; @@ -175,10 +170,7 @@ ARRAY_ELEMENT *s, *e; * element as the argument. */ void -array_walk(a, func, udata) -ARRAY *a; -sh_ae_map_func_t *func; -void *udata; +array_walk(ARRAY *a, sh_ae_map_func_t *func, void *udata) { register ARRAY_ELEMENT *ae; @@ -198,9 +190,7 @@ void *udata; * and returns NULL. */ ARRAY_ELEMENT * -array_shift(a, n, flags) -ARRAY *a; -int n, flags; +array_shift(ARRAY *a, int n, int flags) { register ARRAY_ELEMENT *ae, *ret; register int i; @@ -258,10 +248,7 @@ int n, flags; * shift. */ int -array_rshift (a, n, s) -ARRAY *a; -int n; -char *s; +array_rshift (ARRAY *a, int n, char *s) { register ARRAY_ELEMENT *ae, *new; @@ -294,23 +281,19 @@ char *s; } ARRAY_ELEMENT * -array_unshift_element(a) -ARRAY *a; +array_unshift_element(ARRAY *a) { return (array_shift (a, 1, 0)); } int -array_shift_element(a, v) -ARRAY *a; -char *v; +array_shift_element(ARRAY *a, char *v) { return (array_rshift (a, 1, v)); } ARRAY * -array_quote(array) -ARRAY *array; +array_quote(ARRAY *array) { ARRAY_ELEMENT *a; char *t; @@ -326,8 +309,7 @@ ARRAY *array; } ARRAY * -array_quote_escapes(array) -ARRAY *array; +array_quote_escapes(ARRAY *array) { ARRAY_ELEMENT *a; char *t; @@ -343,8 +325,7 @@ ARRAY *array; } ARRAY * -array_dequote(array) -ARRAY *array; +array_dequote(ARRAY *array) { ARRAY_ELEMENT *a; char *t; @@ -360,8 +341,7 @@ ARRAY *array; } ARRAY * -array_dequote_escapes(array) -ARRAY *array; +array_dequote_escapes(ARRAY *array) { ARRAY_ELEMENT *a; char *t; @@ -377,8 +357,7 @@ ARRAY *array; } ARRAY * -array_remove_quoted_nulls(array) -ARRAY *array; +array_remove_quoted_nulls(ARRAY *array) { ARRAY_ELEMENT *a; @@ -395,10 +374,7 @@ ARRAY *array; * Since arrays are sparse, unset array elements are not counted. */ char * -array_subrange (a, start, nelem, starsub, quoted, pflags) -ARRAY *a; -arrayind_t start, nelem; -int starsub, quoted, pflags; +array_subrange (ARRAY *a, arrayind_t start, arrayind_t nelem, int starsub, int quoted, int pflags) { ARRAY *a2; ARRAY_ELEMENT *h, *p; @@ -440,10 +416,7 @@ int starsub, quoted, pflags; } char * -array_patsub (a, pat, rep, mflags) -ARRAY *a; -char *pat, *rep; -int mflags; +array_patsub (ARRAY *a, char *pat, char *rep, int mflags) { char *t; int pchar, qflags, pflags; @@ -473,11 +446,7 @@ int mflags; } char * -array_modcase (a, pat, modop, mflags) -ARRAY *a; -char *pat; -int modop; -int mflags; +array_modcase (ARRAY *a, char *pat, int modop, int mflags) { char *t; int pchar, qflags, pflags; @@ -511,9 +480,7 @@ int mflags; * VALUE. */ ARRAY_ELEMENT * -array_create_element(indx, value) -arrayind_t indx; -char *value; +array_create_element(arrayind_t indx, char *value) { ARRAY_ELEMENT *r; @@ -526,8 +493,7 @@ char *value; #ifdef INCLUDE_UNUSED ARRAY_ELEMENT * -array_copy_element(ae) -ARRAY_ELEMENT *ae; +array_copy_element(ARRAY_ELEMENT *ae) { return(ae ? array_create_element(element_index(ae), element_value(ae)) : (ARRAY_ELEMENT *) NULL); @@ -535,8 +501,7 @@ ARRAY_ELEMENT *ae; #endif void -array_dispose_element(ae) -ARRAY_ELEMENT *ae; +array_dispose_element(ARRAY_ELEMENT *ae) { if (ae) { FREE(ae->value); @@ -548,10 +513,7 @@ ARRAY_ELEMENT *ae; * Add a new element with index I and value V to array A (a[i] = v). */ int -array_insert(a, i, v) -ARRAY *a; -arrayind_t i; -char *v; +array_insert(ARRAY *a, arrayind_t i, char *v) { register ARRAY_ELEMENT *new, *ae, *start; arrayind_t startind; @@ -637,9 +599,7 @@ char *v; * caller can dispose of it. */ ARRAY_ELEMENT * -array_remove(a, i) -ARRAY *a; -arrayind_t i; +array_remove(ARRAY *a, arrayind_t i) { register ARRAY_ELEMENT *ae, *start; arrayind_t startind; @@ -694,9 +654,7 @@ arrayind_t i; * Return the value of a[i]. */ char * -array_reference(a, i) -ARRAY *a; -arrayind_t i; +array_reference(ARRAY *a, arrayind_t i) { register ARRAY_ELEMENT *ae, *start; arrayind_t startind; @@ -748,8 +706,7 @@ arrayind_t i; by the rest of the code. */ WORD_LIST * -array_to_word_list(a) -ARRAY *a; +array_to_word_list(ARRAY *a) { WORD_LIST *list; ARRAY_ELEMENT *ae; @@ -763,8 +720,7 @@ ARRAY *a; } ARRAY * -array_from_word_list (list) -WORD_LIST *list; +array_from_word_list (WORD_LIST *list) { ARRAY *a; @@ -775,8 +731,7 @@ WORD_LIST *list; } WORD_LIST * -array_keys_to_word_list(a) -ARRAY *a; +array_keys_to_word_list(ARRAY *a) { WORD_LIST *list; ARRAY_ELEMENT *ae; @@ -794,8 +749,7 @@ ARRAY *a; } WORD_LIST * -array_to_kvpair_list(a) -ARRAY *a; +array_to_kvpair_list(ARRAY *a) { WORD_LIST *list; ARRAY_ELEMENT *ae; @@ -815,9 +769,7 @@ ARRAY *a; } ARRAY * -array_assign_list (array, list) -ARRAY *array; -WORD_LIST *list; +array_assign_list (ARRAY *array, WORD_LIST *list) { register WORD_LIST *l; register arrayind_t i; @@ -828,9 +780,7 @@ WORD_LIST *list; } char ** -array_to_argv (a, countp) -ARRAY *a; -int *countp; +array_to_argv (ARRAY *a, int *countp) { char **ret, *t; int i; @@ -855,10 +805,7 @@ int *countp; } ARRAY * -array_from_argv(a, vec, count) -ARRAY *a; -char **vec; -int count; +array_from_argv(ARRAY *a, char **vec, int count) { arrayind_t i; ARRAY_ELEMENT *ae; @@ -867,7 +814,7 @@ int count; if (a == 0 || array_num_elements (a) == 0) { for (i = 0; i < count; i++) - array_insert (a, i, t); + array_insert (a, i, vec[i]); return a; } @@ -908,10 +855,7 @@ int count; * to END, separated by SEP. */ static char * -array_to_string_internal (start, end, sep, quoted) -ARRAY_ELEMENT *start, *end; -char *sep; -int quoted; +array_to_string_internal (ARRAY_ELEMENT *start, ARRAY_ELEMENT *end, char *sep, int quoted) { char *result, *t; ARRAY_ELEMENT *ae; @@ -949,9 +893,7 @@ int quoted; } char * -array_to_kvpair (a, quoted) -ARRAY *a; -int quoted; +array_to_kvpair (ARRAY *a, int quoted) { char *result, *valstr, *is; char indstr[INT_STRLEN_BOUND(intmax_t) + 1]; @@ -1003,9 +945,7 @@ int quoted; } char * -array_to_assign (a, quoted) -ARRAY *a; -int quoted; +array_to_assign (ARRAY *a, int quoted) { char *result, *valstr, *is; char indstr[INT_STRLEN_BOUND(intmax_t) + 1]; @@ -1057,10 +997,7 @@ int quoted; } char * -array_to_string (a, sep, quoted) -ARRAY *a; -char *sep; -int quoted; +array_to_string (ARRAY *a, char *sep, int quoted) { if (a == 0) return((char *)NULL); @@ -1074,8 +1011,7 @@ int quoted; * Return an array consisting of elements in S, separated by SEP */ ARRAY * -array_from_string(s, sep) -char *s, *sep; +array_from_string(char *s, char *sep) { ARRAY *a; WORD_LIST *w; @@ -1098,8 +1034,7 @@ char *s, *sep; int interrupt_immediately = 0; int -signal_is_trapped(s) -int s; +signal_is_trapped(int s) { return 0; } @@ -1119,8 +1054,7 @@ programming_error(const char *s, ...) } WORD_DESC * -make_bare_word (s) -const char *s; +make_bare_word (const char *s) { WORD_DESC *w; @@ -1131,9 +1065,7 @@ const char *s; } WORD_LIST * -make_word_list(x, l) -WORD_DESC *x; -WORD_LIST *l; +make_word_list(WORD_DESC *x, WORD_LIST *l) { WORD_LIST *w; @@ -1144,9 +1076,7 @@ WORD_LIST *l; } WORD_LIST * -list_string(s, t, i) -char *s, *t; -int i; +list_string(char *s, char *t, int i) { char *r, *a; WORD_LIST *wl; @@ -1164,8 +1094,7 @@ int i; } GENERIC_LIST * -list_reverse (list) -GENERIC_LIST *list; +list_reverse (GENERIC_LIST *list) { register GENERIC_LIST *next, *prev; @@ -1179,22 +1108,19 @@ GENERIC_LIST *list; } char * -pat_subst(s, t, u, i) -char *s, *t, *u; -int i; +pat_subst(char *s, char *t, char *u, int i) { return ((char *)NULL); } char * -quote_string(s) -char *s; +quote_string(char *s) { return savestring(s); } -print_element(ae) -ARRAY_ELEMENT *ae; +void +print_element(ARRAY_ELEMENT *ae) { char lbuf[INT_STRLEN_BOUND (intmax_t) + 1]; @@ -1203,14 +1129,15 @@ ARRAY_ELEMENT *ae; element_value(ae)); } -print_array(a) -ARRAY *a; +void +print_array(ARRAY *a) { printf("\n"); array_walk(a, print_element, (void *)NULL); } -main() +int +main(int c, char **v) { ARRAY *a, *new_a, *copy_of_a; ARRAY_ELEMENT *ae, *aew; diff --git a/array.h b/array.h index 4214e8b41..47712e88a 100644 --- a/array.h +++ b/array.h @@ -1,7 +1,7 @@ /* array.h -- definitions for the interface exported by array.c that allows the rest of the shell to manipulate array variables. */ -/* Copyright (C) 1997-2021 Free Software Foundation, Inc. +/* Copyright (C) 1997-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -50,70 +50,70 @@ typedef struct array_element { #define ARRAY_DEFAULT_SIZE 1024 -typedef int sh_ae_map_func_t PARAMS((ARRAY_ELEMENT *, void *)); +typedef int sh_ae_map_func_t (ARRAY_ELEMENT *, void *); /* Basic operations on entire arrays */ #ifdef ALT_ARRAY_IMPLEMENTATION -extern void array_alloc PARAMS((ARRAY *, arrayind_t)); -extern void array_resize PARAMS((ARRAY *, arrayind_t)); -extern void array_expand PARAMS((ARRAY *, arrayind_t)); -extern void array_dispose_elements PARAMS((ARRAY_ELEMENT **)); +extern void array_alloc (ARRAY *, arrayind_t); +extern void array_resize (ARRAY *, arrayind_t); +extern void array_expand (ARRAY *, arrayind_t); +extern void array_dispose_elements (ARRAY_ELEMENT **); #endif -extern ARRAY *array_create PARAMS((void)); -extern void array_flush PARAMS((ARRAY *)); -extern void array_dispose PARAMS((ARRAY *)); -extern ARRAY *array_copy PARAMS((ARRAY *)); +extern ARRAY *array_create (void); +extern void array_flush (ARRAY *); +extern void array_dispose (ARRAY *); +extern ARRAY *array_copy (ARRAY *); #ifndef ALT_ARRAY_IMPLEMENTATION -extern ARRAY *array_slice PARAMS((ARRAY *, ARRAY_ELEMENT *, ARRAY_ELEMENT *)); +extern ARRAY *array_slice (ARRAY *, ARRAY_ELEMENT *, ARRAY_ELEMENT *); #else -extern ARRAY *array_slice PARAMS((ARRAY *, arrayind_t, arrayind_t)); +extern ARRAY *array_slice (ARRAY *, arrayind_t, arrayind_t); #endif -extern void array_walk PARAMS((ARRAY *, sh_ae_map_func_t *, void *)); +extern void array_walk (ARRAY *, sh_ae_map_func_t *, void *); #ifndef ALT_ARRAY_IMPLEMENTATION -extern ARRAY_ELEMENT *array_shift PARAMS((ARRAY *, int, int)); +extern ARRAY_ELEMENT *array_shift (ARRAY *, int, int); #else -extern ARRAY_ELEMENT **array_shift PARAMS((ARRAY *, int, int)); +extern ARRAY_ELEMENT **array_shift (ARRAY *, int, int); #endif -extern int array_rshift PARAMS((ARRAY *, int, char *)); -extern ARRAY_ELEMENT *array_unshift_element PARAMS((ARRAY *)); -extern int array_shift_element PARAMS((ARRAY *, char *)); +extern int array_rshift (ARRAY *, int, char *); +extern ARRAY_ELEMENT *array_unshift_element (ARRAY *); +extern int array_shift_element (ARRAY *, char *); -extern ARRAY *array_quote PARAMS((ARRAY *)); -extern ARRAY *array_quote_escapes PARAMS((ARRAY *)); -extern ARRAY *array_dequote PARAMS((ARRAY *)); -extern ARRAY *array_dequote_escapes PARAMS((ARRAY *)); -extern ARRAY *array_remove_quoted_nulls PARAMS((ARRAY *)); +extern ARRAY *array_quote (ARRAY *); +extern ARRAY *array_quote_escapes (ARRAY *); +extern ARRAY *array_dequote (ARRAY *); +extern ARRAY *array_dequote_escapes (ARRAY *); +extern ARRAY *array_remove_quoted_nulls (ARRAY *); -extern char *array_subrange PARAMS((ARRAY *, arrayind_t, arrayind_t, int, int, int)); -extern char *array_patsub PARAMS((ARRAY *, char *, char *, int)); -extern char *array_modcase PARAMS((ARRAY *, char *, int, int)); +extern char *array_subrange (ARRAY *, arrayind_t, arrayind_t, int, int, int); +extern char *array_patsub (ARRAY *, char *, char *, int); +extern char *array_modcase (ARRAY *, char *, int, int); /* Basic operations on array elements. */ -extern ARRAY_ELEMENT *array_create_element PARAMS((arrayind_t, char *)); -extern ARRAY_ELEMENT *array_copy_element PARAMS((ARRAY_ELEMENT *)); -extern void array_dispose_element PARAMS((ARRAY_ELEMENT *)); +extern ARRAY_ELEMENT *array_create_element (arrayind_t, char *); +extern ARRAY_ELEMENT *array_copy_element (ARRAY_ELEMENT *); +extern void array_dispose_element (ARRAY_ELEMENT *); -extern int array_insert PARAMS((ARRAY *, arrayind_t, char *)); -extern ARRAY_ELEMENT *array_remove PARAMS((ARRAY *, arrayind_t)); -extern char *array_reference PARAMS((ARRAY *, arrayind_t)); +extern int array_insert (ARRAY *, arrayind_t, char *); +extern ARRAY_ELEMENT *array_remove (ARRAY *, arrayind_t); +extern char *array_reference (ARRAY *, arrayind_t); /* Converting to and from arrays */ -extern WORD_LIST *array_to_word_list PARAMS((ARRAY *)); -extern ARRAY *array_from_word_list PARAMS((WORD_LIST *)); -extern WORD_LIST *array_keys_to_word_list PARAMS((ARRAY *)); -extern WORD_LIST *array_to_kvpair_list PARAMS((ARRAY *)); +extern WORD_LIST *array_to_word_list (ARRAY *); +extern ARRAY *array_from_word_list (WORD_LIST *); +extern WORD_LIST *array_keys_to_word_list (ARRAY *); +extern WORD_LIST *array_to_kvpair_list (ARRAY *); -extern ARRAY *array_assign_list PARAMS((ARRAY *, WORD_LIST *)); +extern ARRAY *array_assign_list (ARRAY *, WORD_LIST *); -extern char **array_to_argv PARAMS((ARRAY *, int *)); -extern ARRAY *array_from_argv PARAMS((ARRAY *, char **, int)); +extern char **array_to_argv (ARRAY *, int *); +extern ARRAY *array_from_argv (ARRAY *, char **, int); -extern char *array_to_kvpair PARAMS((ARRAY *, int)); -extern char *array_to_assign PARAMS((ARRAY *, int)); -extern char *array_to_string PARAMS((ARRAY *, char *, int)); -extern ARRAY *array_from_string PARAMS((char *, char *)); +extern char *array_to_kvpair (ARRAY *, int); +extern char *array_to_assign (ARRAY *, int); +extern char *array_to_string (ARRAY *, char *, int); +extern ARRAY *array_from_string (char *, char *); /* Flags for array_shift */ #define AS_DISPOSE 0x01 @@ -137,8 +137,8 @@ extern ARRAY *array_from_string PARAMS((char *, char *)); #define element_forw(ae) ((ae)->next) #define element_back(ae) ((ae)->prev) #else -extern arrayind_t element_forw PARAMS((ARRAY *, arrayind_t)); -extern arrayind_t element_back PARAMS((ARRAY *, arrayind_t)); +extern arrayind_t element_forw (ARRAY *, arrayind_t); +extern arrayind_t element_back (ARRAY *, arrayind_t); #endif @@ -177,6 +177,6 @@ extern arrayind_t element_back PARAMS((ARRAY *, arrayind_t)); #define ALL_ELEMENT_SUB(c) ((c) == '@' || (c) == '*') /* In eval.c, but uses ARRAY * */ -extern int execute_array_command PARAMS((ARRAY *, void *)); +extern int execute_array_command (ARRAY *, void *); #endif /* _ARRAY_H_ */ diff --git a/array2.c b/array2.c index fa8be00d6..49745cc95 100644 --- a/array2.c +++ b/array2.c @@ -9,7 +9,7 @@ * chet@ins.cwru.edu */ -/* Copyright (C) 1997-2021 Free Software Foundation, Inc. +/* Copyright (C) 1997-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -47,15 +47,13 @@ #define ARRAY_MAX_DOUBLE 16777216 -static ARRAY_ELEMENT **array_copy_elements PARAMS((ARRAY *)); -static char *array_to_string_internal PARAMS((ARRAY *, arrayind_t, arrayind_t, char *, int)); +static ARRAY_ELEMENT **array_copy_elements (ARRAY *); +static char *array_to_string_internal (ARRAY *, arrayind_t, arrayind_t, char *, int); static char *spacesep = " "; void -array_alloc (a, n) -ARRAY *a; -arrayind_t n; +array_alloc (ARRAY *a, arrayind_t n) { arrayind_t i; @@ -68,9 +66,7 @@ arrayind_t n; } void -array_resize (a, n) -ARRAY *a; -arrayind_t n; +array_resize (ARRAY *a, arrayind_t n) { ARRAY_ELEMENT **e, *ae; arrayind_t i, nsize; @@ -90,9 +86,7 @@ arrayind_t n; } void -array_expand (a, n) -ARRAY *a; -arrayind_t n; +array_expand (ARRAY *a, arrayind_t n) { arrayind_t nsize; @@ -107,7 +101,7 @@ arrayind_t n; } ARRAY * -array_create() +array_create(void) { ARRAY *r; @@ -120,8 +114,7 @@ array_create() } void -array_flush (a) -ARRAY *a; +array_flush (ARRAY *a) { int r; @@ -141,8 +134,7 @@ ARRAY *a; } void -array_dispose_elements(elist) -ARRAY_ELEMENT **elist; +array_dispose_elements(ARRAY_ELEMENT **elist) { arrayind_t i; @@ -154,8 +146,7 @@ ARRAY_ELEMENT **elist; } void -array_dispose(a) -ARRAY *a; +array_dispose(ARRAY *a) { if (a == 0) return; @@ -165,8 +156,7 @@ ARRAY *a; } static ARRAY_ELEMENT ** -array_copy_elements (a) -ARRAY *a; +array_copy_elements (ARRAY *a) { ARRAY_ELEMENT **ret; arrayind_t i; @@ -180,8 +170,7 @@ ARRAY *a; } ARRAY * -array_copy(a) -ARRAY *a; +array_copy(ARRAY *a) { ARRAY *a1; @@ -203,9 +192,7 @@ ARRAY *a; * S to E, inclusive. The callers do the bounds checking. */ ARRAY * -array_slice(array, s, e) -ARRAY *array; -arrayind_t s, e; +array_slice(ARRAY *array, arrayind_t s, arrayind_t e) { ARRAY *a; ARRAY_ELEMENT *p, *n; @@ -239,10 +226,7 @@ arrayind_t s, e; * element as the argument. */ void -array_walk(a, func, udata) -ARRAY *a; -sh_ae_map_func_t *func; -void *udata; +array_walk(ARRAY *a, sh_ae_map_func_t *func, void *udata) { arrayind_t i; register ARRAY_ELEMENT *ae; @@ -266,9 +250,7 @@ void *udata; * returns NULL. */ ARRAY_ELEMENT ** -array_shift(a, n, flags) -ARRAY *a; -int n, flags; +array_shift(ARRAY *a, int n, int flags) { ARRAY_ELEMENT **r, *ae; register arrayind_t ni, ri; @@ -354,10 +336,7 @@ if (j < n) * shift. */ int -array_rshift (a, n, s) -ARRAY *a; -int n; -char *s; +array_rshift (ARRAY *a, int n, char *s) { register ARRAY_ELEMENT *ae, *new; arrayind_t ni, nsize; @@ -399,8 +378,7 @@ char *s; } ARRAY_ELEMENT * -array_unshift_element(a) -ARRAY *a; +array_unshift_element(ARRAY *a) { ARRAY_ELEMENT **r, *ret; @@ -411,16 +389,13 @@ ARRAY *a; } int -array_shift_element(a, v) -ARRAY *a; -char *v; +array_shift_element(ARRAY *a, char *v) { return (array_rshift (a, 1, v)); } ARRAY * -array_quote(array) -ARRAY *array; +array_quote(ARRAY *array) { register arrayind_t i; ARRAY_ELEMENT *a; @@ -439,8 +414,7 @@ ARRAY *array; } ARRAY * -array_quote_escapes(array) -ARRAY *array; +array_quote_escapes(ARRAY *array) { register arrayind_t i; ARRAY_ELEMENT *a; @@ -459,8 +433,7 @@ ARRAY *array; } ARRAY * -array_dequote(array) -ARRAY *array; +array_dequote(ARRAY *array) { register arrayind_t i; ARRAY_ELEMENT *a; @@ -480,8 +453,7 @@ ARRAY *array; } ARRAY * -array_dequote_escapes(array) -ARRAY *array; +array_dequote_escapes(ARRAY *array) { register arrayind_t i; ARRAY_ELEMENT *a; @@ -500,8 +472,7 @@ ARRAY *array; } ARRAY * -array_remove_quoted_nulls(array) -ARRAY *array; +array_remove_quoted_nulls(ARRAY *array) { register arrayind_t i; ARRAY_ELEMENT *a; @@ -522,10 +493,7 @@ ARRAY *array; * Since arrays are sparse, unset array elements are not counted. */ char * -array_subrange (a, start, nelem, starsub, quoted, pflags) -ARRAY *a; -arrayind_t start, nelem; -int starsub, quoted, pflags; +array_subrange (ARRAY *a, arrayind_t start, arrayind_t nelem, int starsub, int quoted, int pflags) { ARRAY *a2; arrayind_t s, e; @@ -568,10 +536,7 @@ int starsub, quoted, pflags; } char * -array_patsub (a, pat, rep, mflags) -ARRAY *a; -char *pat, *rep; -int mflags; +array_patsub (ARRAY *a, char *pat, char *rep, int mflags) { char *t; int pchar, qflags, pflags; @@ -601,11 +566,7 @@ int mflags; } char * -array_modcase (a, pat, modop, mflags) -ARRAY *a; -char *pat; -int modop; -int mflags; +array_modcase (ARRAY *a, char *pat, int modop, int mflags) { char *t; int pchar, qflags, pflags; @@ -639,9 +600,7 @@ int mflags; * VALUE. */ ARRAY_ELEMENT * -array_create_element(indx, value) -arrayind_t indx; -char *value; +array_create_element(arrayind_t indx, char *value) { ARRAY_ELEMENT *r; @@ -652,16 +611,14 @@ char *value; } ARRAY_ELEMENT * -array_copy_element(ae) -ARRAY_ELEMENT *ae; +array_copy_element(ARRAY_ELEMENT *ae) { return(ae ? array_create_element(element_index(ae), element_value(ae)) : (ARRAY_ELEMENT *) NULL); } void -array_dispose_element(ae) -ARRAY_ELEMENT *ae; +array_dispose_element(ARRAY_ELEMENT *ae) { if (ae) { FREE(ae->value); @@ -673,10 +630,7 @@ ARRAY_ELEMENT *ae; * Add a new element with index I and value V to array A (a[i] = v). */ int -array_insert(a, i, v) -ARRAY *a; -arrayind_t i; -char *v; +array_insert(ARRAY *a, arrayind_t i, char *v) { register ARRAY_ELEMENT *new, *old; arrayind_t nsize; @@ -709,9 +663,7 @@ char *v; * caller can dispose of it. */ ARRAY_ELEMENT * -array_remove(a, i) -ARRAY *a; -arrayind_t i; +array_remove(ARRAY *a, arrayind_t i) { register ARRAY_ELEMENT *ae; arrayind_t ind; @@ -746,9 +698,7 @@ arrayind_t i; * Return the value of a[i]. */ char * -array_reference(a, i) -ARRAY *a; -arrayind_t i; +array_reference(ARRAY *a, arrayind_t i) { register ARRAY_ELEMENT *ae; @@ -765,8 +715,7 @@ arrayind_t i; by the rest of the code. */ WORD_LIST * -array_to_word_list(a) -ARRAY *a; +array_to_word_list(ARRAY *a) { register arrayind_t i; WORD_LIST *list; @@ -785,8 +734,7 @@ ARRAY *a; } ARRAY * -array_from_word_list (list) -WORD_LIST *list; +array_from_word_list (WORD_LIST *list) { ARRAY *a; @@ -797,8 +745,7 @@ WORD_LIST *list; } WORD_LIST * -array_keys_to_word_list(a) -ARRAY *a; +array_keys_to_word_list(ARRAY *a) { arrayind_t ind; WORD_LIST *list; @@ -819,8 +766,7 @@ ARRAY *a; } WORD_LIST * -array_to_kvpair_list(a) -ARRAY *a; +array_to_kvpair_list (ARRAY *a) { arrayind_t ind; WORD_LIST *list; @@ -843,9 +789,7 @@ ARRAY *a; } ARRAY * -array_assign_list (array, list) -ARRAY *array; -WORD_LIST *list; +array_assign_list (ARRAY *array, WORD_LIST *list) { register WORD_LIST *l; register arrayind_t i; @@ -856,9 +800,7 @@ WORD_LIST *list; } char ** -array_to_argv (a, countp) -ARRAY *a; -int *countp; +array_to_argv (ARRAY *a, int *countp) { char **ret, *t; int i; @@ -883,10 +825,7 @@ int *countp; } ARRAY * -array_from_argv(a, vec, count) -ARRAY *a; -char **vec; -int count; +array_from_argv(ARRAY *a, char **vec, int count) { arrayind_t i; char *t; @@ -935,9 +874,7 @@ int count; * Return the next non-null array element after A[IND] */ arrayind_t -element_forw(a, ind) -ARRAY *a; -arrayind_t ind; +element_forw(ARRAY *a, arrayind_t ind) { register arrayind_t i; @@ -953,9 +890,7 @@ arrayind_t ind; * Return the previous non-null array element before A[IND] */ arrayind_t -element_back (a, ind) -ARRAY *a; -arrayind_t ind; +element_back (ARRAY *a, arrayind_t ind) { register arrayind_t i; @@ -972,11 +907,7 @@ arrayind_t ind; * to END, separated by SEP. */ static char * -array_to_string_internal (a, start, end, sep, quoted) -ARRAY *a; -arrayind_t start, end; -char *sep; -int quoted; +array_to_string_internal (ARRAY *a, arrayind_t start, arrayind_t end, char *sep, int quoted) { arrayind_t i; char *result, *t; @@ -1014,9 +945,7 @@ int quoted; } char * -array_to_kvpair (a, quoted) -ARRAY *a; -int quoted; +array_to_kvpair (ARRAY *a, int quoted) { arrayind_t ind; char *result, *valstr, *is; @@ -1071,9 +1000,7 @@ int quoted; } char * -array_to_assign (a, quoted) -ARRAY *a; -int quoted; +array_to_assign (ARRAY *a, int quoted) { arrayind_t ind; char *result, *valstr, *is; @@ -1128,10 +1055,7 @@ int quoted; } char * -array_to_string (a, sep, quoted) -ARRAY *a; -char *sep; -int quoted; +array_to_string (ARRAY *a, char *sep, int quoted) { if (a == 0) return((char *)NULL); @@ -1145,8 +1069,7 @@ int quoted; * Return an array consisting of elements in S, separated by SEP */ ARRAY * -array_from_string(s, sep) -char *s, *sep; +array_from_string(char *s, char *sep) { ARRAY *a; WORD_LIST *w; @@ -1169,8 +1092,7 @@ char *s, *sep; int interrupt_immediately = 0; int -signal_is_trapped(s) -int s; +signal_is_trapped(int s) { return 0; } @@ -1190,8 +1112,7 @@ programming_error(const char *s, ...) } WORD_DESC * -make_bare_word (s) -const char *s; +make_bare_word (const char *s) { WORD_DESC *w; @@ -1202,9 +1123,7 @@ const char *s; } WORD_LIST * -make_word_list(x, l) -WORD_DESC *x; -WORD_LIST *l; +make_word_list(WORD_DESC *x, WORD_LIST *l) { WORD_LIST *w; @@ -1215,9 +1134,7 @@ WORD_LIST *l; } WORD_LIST * -list_string(s, t, i) -char *s, *t; -int i; +list_string(char *s, char *t, int i) { char *r, *a; WORD_LIST *wl; @@ -1235,8 +1152,7 @@ int i; } GENERIC_LIST * -list_reverse (list) -GENERIC_LIST *list; +list_reverse (GENERIC_LIST *list) { register GENERIC_LIST *next, *prev; @@ -1250,22 +1166,19 @@ GENERIC_LIST *list; } char * -pat_subst(s, t, u, i) -char *s, *t, *u; -int i; +pat_subst(char *s, char *t, char *u, int i) { return ((char *)NULL); } char * -quote_string(s) -char *s; +quote_string(char *s) { return savestring(s); } -print_element(ae) -ARRAY_ELEMENT *ae; +void +print_element(ARRAY_ELEMENT *ae) { char lbuf[INT_STRLEN_BOUND (intmax_t) + 1]; @@ -1274,14 +1187,15 @@ ARRAY_ELEMENT *ae; element_value(ae)); } -print_array(a) -ARRAY *a; +void +print_array(ARRAY *a) { printf("\n"); array_walk(a, print_element, (void *)NULL); } -main() +int +main(int c, char **v) { ARRAY *a, *new_a, *copy_of_a; ARRAY_ELEMENT *ae, *aew; diff --git a/arrayfunc.c b/arrayfunc.c index 412562276..489caec96 100644 --- a/arrayfunc.c +++ b/arrayfunc.c @@ -1,6 +1,6 @@ /* arrayfunc.c -- High-level array functions used by other parts of the shell. */ -/* Copyright (C) 2001-2021 Free Software Foundation, Inc. +/* Copyright (C) 2001-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -45,22 +45,19 @@ # define RBRACK ']' #endif -/* This variable means to not expand associative array subscripts more than - once, when performing variable expansion. */ -int assoc_expand_once = 0; - -/* Ditto for indexed array subscripts -- currently unused */ +/* This variable means to not expand associative or indexed array subscripts + more than once, when performing variable expansion. */ int array_expand_once = 0; -static SHELL_VAR *bind_array_var_internal PARAMS((SHELL_VAR *, arrayind_t, char *, char *, int)); -static SHELL_VAR *assign_array_element_internal PARAMS((SHELL_VAR *, char *, char *, char *, int, char *, int, array_eltstate_t *)); +static SHELL_VAR *bind_array_var_internal (SHELL_VAR *, arrayind_t, char *, const char *, int); +static SHELL_VAR *assign_array_element_internal (SHELL_VAR *, const char *, char *, char *, int, const char *, int, array_eltstate_t *); -static void assign_assoc_from_kvlist PARAMS((SHELL_VAR *, WORD_LIST *, HASH_TABLE *, int)); +static void assign_assoc_from_kvlist (SHELL_VAR *, WORD_LIST *, HASH_TABLE *, int); -static char *quote_assign PARAMS((const char *)); -static void quote_array_assignment_chars PARAMS((WORD_LIST *)); -static char *quote_compound_array_word PARAMS((char *, int)); -static char *array_value_internal PARAMS((const char *, int, int, array_eltstate_t *)); +static char *quote_assign (const char *); +static void quote_array_assignment_chars (WORD_LIST *); +static char *quote_compound_array_word (char *, int); +static char *array_value_internal (const char *, int, int, array_eltstate_t *); /* Standard error message to use when encountering an invalid array subscript */ const char * const bash_badsub_errmsg = N_("bad array subscript"); @@ -74,8 +71,7 @@ const char * const bash_badsub_errmsg = N_("bad array subscript"); /* Convert a shell variable to an array variable. The original value is saved as array[0]. */ SHELL_VAR * -convert_var_to_array (var) - SHELL_VAR *var; +convert_var_to_array (SHELL_VAR *var) { char *oldval; ARRAY *array; @@ -112,8 +108,7 @@ convert_var_to_array (var) /* Convert a shell variable to an array variable. The original value is saved as array[0]. */ SHELL_VAR * -convert_var_to_assoc (var) - SHELL_VAR *var; +convert_var_to_assoc (SHELL_VAR *var) { char *oldval; HASH_TABLE *hash; @@ -147,13 +142,28 @@ convert_var_to_assoc (var) return var; } +/* Copy the array (ARRAY *) or assoc (HASH_TABLE *) from variable V1 to V2, + and return V2. */ +SHELL_VAR * +arrayvar_copyval (SHELL_VAR *v1, SHELL_VAR *v2) +{ + FREE (value_cell (v2)); + VUNSETATTR (v2, (att_array | att_assoc)); + if (array_p (v1)) + { + var_setarray (v2, array_copy (array_cell (v1))); + VSETATTR (v2, att_array); + } + else if (assoc_p (v1)) + { + var_setassoc (v2, assoc_copy (assoc_cell (v1))); + VSETATTR (v2, att_assoc); + } + return v2; +} + char * -make_array_variable_value (entry, ind, key, value, flags) - SHELL_VAR *entry; - arrayind_t ind; - char *key; - char *value; - int flags; +make_array_variable_value (SHELL_VAR *entry, arrayind_t ind, const char *key, const char *value, int flags) { SHELL_VAR *dentry; char *newval; @@ -195,12 +205,7 @@ make_array_variable_value (entry, ind, key, value, flags) XXX - make sure that any dynamic associative array variables recreate the hash table on each assignment. BASH_CMDS and BASH_ALIASES already do this */ static SHELL_VAR * -bind_assoc_var_internal (entry, hash, key, value, flags) - SHELL_VAR *entry; - HASH_TABLE *hash; - char *key; - char *value; - int flags; +bind_assoc_var_internal (SHELL_VAR *entry, HASH_TABLE *hash, char *key, const char *value, int flags) { char *newval; @@ -208,7 +213,10 @@ bind_assoc_var_internal (entry, hash, key, value, flags) newval = make_array_variable_value (entry, 0, key, value, flags); if (entry->assign_func) - (*entry->assign_func) (entry, newval, 0, key); + { + (*entry->assign_func) (entry, newval, 0, key); + FREE (key); + } else assoc_insert (hash, key, newval); @@ -223,12 +231,7 @@ bind_assoc_var_internal (entry, hash, key, value, flags) /* Perform ENTRY[IND]=VALUE or ENTRY[KEY]=VALUE. This is not called for every assignment to an associative array; see assign_compound_array_list below. */ static SHELL_VAR * -bind_array_var_internal (entry, ind, key, value, flags) - SHELL_VAR *entry; - arrayind_t ind; - char *key; - char *value; - int flags; +bind_array_var_internal (SHELL_VAR *entry, arrayind_t ind, char *key, const char *value, int flags) { char *newval; @@ -256,11 +259,7 @@ bind_array_var_internal (entry, ind, key, value, flags) If NAME does not exist, just create an array variable, no matter what IND's value may be. */ SHELL_VAR * -bind_array_variable (name, ind, value, flags) - char *name; - arrayind_t ind; - char *value; - int flags; +bind_array_variable (const char *name, arrayind_t ind, const char *value, int flags) { SHELL_VAR *entry; @@ -291,22 +290,13 @@ bind_array_variable (name, ind, value, flags) } SHELL_VAR * -bind_array_element (entry, ind, value, flags) - SHELL_VAR *entry; - arrayind_t ind; - char *value; - int flags; +bind_array_element (SHELL_VAR *entry, arrayind_t ind, char *value, int flags) { return (bind_array_var_internal (entry, ind, 0, value, flags)); } SHELL_VAR * -bind_assoc_variable (entry, name, key, value, flags) - SHELL_VAR *entry; - char *name; - char *key; - char *value; - int flags; +bind_assoc_variable (SHELL_VAR *entry, const char *name, char *key, const char *value, int flags) { if ((readonly_p (entry) && (flags&ASS_FORCE) == 0) || noassign_p (entry)) { @@ -341,20 +331,13 @@ flush_eltstate (array_eltstate_t *estatep) assign VALUE to that array element by calling bind_array_variable(). Flags are ASS_ assignment flags */ SHELL_VAR * -assign_array_element (name, value, flags, estatep) - char *name, *value; - int flags; - array_eltstate_t *estatep; +assign_array_element (const char *name, const char *value, int flags, array_eltstate_t *estatep) { char *sub, *vname; int sublen, isassoc, avflags; SHELL_VAR *entry; - avflags = 0; - if (flags & ASS_NOEXPAND) - avflags |= AV_NOEXPAND; - if (flags & ASS_ONEWORD) - avflags |= AV_ONEWORD; + avflags = convert_assign_flags_to_arrayval_flags (flags); vname = array_variable_name (name, avflags, &sub, &sublen); if (vname == 0) @@ -391,16 +374,14 @@ assign_array_element (name, value, flags, estatep) return entry; } +/* Assign VALUE to the index computed from SUB of length SUBLEN of array + VNAME. NAME is the complete variable reference. FLAGS are ASS_ assignment + flags. ENTRY is the SHELL_VAR corresponding to VNAME. The caller + initializes ESTATEP, and we set it to the values we compute. */ static SHELL_VAR * -assign_array_element_internal (entry, name, vname, sub, sublen, value, flags, estatep) - SHELL_VAR *entry; - char *name; /* only used for error messages */ - char *vname; - char *sub; - int sublen; - char *value; - int flags; - array_eltstate_t *estatep; +assign_array_element_internal (SHELL_VAR *entry, const char *name, char *vname, + char *sub, int sublen, const char *value, + int flags, array_eltstate_t *estatep) { char *akey, *nkey; arrayind_t ind; @@ -434,7 +415,11 @@ assign_array_element_internal (entry, name, vname, sub, sublen, value, flags, es } else { - ind = array_expand_index (entry, sub, sublen, 0); + /* convert ASS_ flags to AV_FLAGS here */ + int avflags; + + avflags = convert_assign_flags_to_arrayval_flags (flags); + ind = array_expand_index (entry, sub, sublen, avflags); /* negative subscripts to indexed arrays count back from end */ if (entry && ind < 0) ind = (array_p (entry) ? array_max_index (array_cell (entry)) : 0) + 1 + ind; @@ -460,11 +445,10 @@ assign_array_element_internal (entry, name, vname, sub, sublen, value, flags, es convert it to an indexed array. If FLAGS&1 is non-zero, an existing variable is checked for the readonly or noassign attribute in preparation for assignment (e.g., by the `read' builtin). If FLAGS&2 is non-zero, we - create an associative array. */ + create an associative array. If FLAGS&4 is non-zero, we return noassign + variables instead of NULL because the caller wants to handle them. */ SHELL_VAR * -find_or_make_array_variable (name, flags) - char *name; - int flags; +find_or_make_array_variable (const char *name, int flags) { SHELL_VAR *var; @@ -496,6 +480,8 @@ find_or_make_array_variable (name, flags) { if (readonly_p (var)) err_readonly (name); + if ((flags & 4) && noassign_p (var)) + return (var); return ((SHELL_VAR *)NULL); } else if ((flags & 2) && array_p (var)) @@ -515,9 +501,7 @@ find_or_make_array_variable (name, flags) /* Perform a compound assignment statement for array NAME, where VALUE is the text between the parens: NAME=( VALUE ) */ SHELL_VAR * -assign_array_from_string (name, value, flags) - char *name, *value; - int flags; +assign_array_from_string (const char *name, char *value, int flags) { SHELL_VAR *var; int vflags; @@ -525,10 +509,11 @@ assign_array_from_string (name, value, flags) vflags = 1; if (flags & ASS_MKASSOC) vflags |= 2; + vflags |= 4; /* we want to handle noassign variables ourselves */ var = find_or_make_array_variable (name, vflags); - if (var == 0) - return ((SHELL_VAR *)NULL); + if (var == 0 || noassign_p (var)) + return (var); return (assign_array_var_from_string (var, value, flags)); } @@ -536,10 +521,7 @@ assign_array_from_string (name, value, flags) /* Sequentially assign the indices of indexed array variable VAR from the words in LIST. */ SHELL_VAR * -assign_array_var_from_word_list (var, list, flags) - SHELL_VAR *var; - WORD_LIST *list; - int flags; +assign_array_var_from_word_list (SHELL_VAR *var, WORD_LIST *list, int flags) { register arrayind_t i; register WORD_LIST *l; @@ -549,7 +531,19 @@ assign_array_var_from_word_list (var, list, flags) i = (flags & ASS_APPEND) ? array_max_index (a) + 1 : 0; for (l = list; l; l = l->next, i++) - bind_array_var_internal (var, i, 0, l->word->word, flags & ~ASS_APPEND); + { + if (a && i < 0) /* overflow */ + { + char *num; + + num = itos (i); + report_error ("%s[%s]: %s", var->name, num, bash_badsub_errmsg); + free (num); + return (var); /* XXX */ + } + + bind_array_var_internal (var, i, 0, l->word->word, flags & ~ASS_APPEND); + } VUNSETATTR (var, att_invisible); /* no longer invisible */ @@ -557,14 +551,11 @@ assign_array_var_from_word_list (var, list, flags) } WORD_LIST * -expand_compound_array_assignment (var, value, flags) - SHELL_VAR *var; - char *value; - int flags; +expand_compound_array_assignment (SHELL_VAR *var, char *value, int flags) { WORD_LIST *list, *nlist; char *val; - int ni; + size_t ni; /* This condition is true when invoked from the declare builtin with a command like @@ -624,17 +615,22 @@ expand_compound_array_assignment (var, value, flags) } #if ASSOC_KVPAIR_ASSIGNMENT +/* If non-zero, we split the words in kv-pair compound array assignments in + addition to performing the other expansions. */ +int split_kvpair_assignments = 0; + +/* We have a set of key-value pairs that should be expanded and split + (because they are not assignment statements). They are not expanded + and split in expand_compound_array_assignment because assoc_p (var) + is true. We defer the expansion until now. */ static void -assign_assoc_from_kvlist (var, nlist, h, flags) - SHELL_VAR *var; - WORD_LIST *nlist; - HASH_TABLE *h; - int flags; +assign_assoc_from_kvlist (SHELL_VAR *var, WORD_LIST *nlist, HASH_TABLE *h, int flags) { - WORD_LIST *list; + WORD_LIST *list, *explist; char *akey, *aval, *k, *v; - for (list = nlist; list; list = list->next) + explist = split_kvpair_assignments ? expand_words_no_vars (nlist) : nlist; + for (list = explist; list; list = list->next) { k = list->word->word; v = list->next ? list->next->word->word : 0; @@ -642,7 +638,7 @@ assign_assoc_from_kvlist (var, nlist, h, flags) if (list->next) list = list->next; - akey = expand_subscript_string (k, 0); + akey = split_kvpair_assignments ? savestring (k) : expand_subscript_string (k, 0); if (akey == 0 || *akey == 0) { err_badarraysub (k); @@ -650,7 +646,7 @@ assign_assoc_from_kvlist (var, nlist, h, flags) continue; } - aval = expand_assignment_string_to_string (v, 0); + aval = split_kvpair_assignments ? savestring (v) : expand_assignment_string_to_string (v, 0); if (aval == 0) { aval = (char *)xmalloc (1); @@ -658,22 +654,24 @@ assign_assoc_from_kvlist (var, nlist, h, flags) } bind_assoc_var_internal (var, h, akey, aval, flags); + free (aval); } + + if (explist != nlist) + dispose_words (explist); } /* Return non-zero if L appears to be a key-value pair associative array compound assignment. */ int -kvpair_assignment_p (l) - WORD_LIST *l; +kvpair_assignment_p (WORD_LIST *l) { return (l && (l->word->flags & W_ASSIGNMENT) == 0 && l->word->word[0] != '['); /*]*/ } char * -expand_and_quote_kvpair_word (w) - char *w; +expand_and_quote_kvpair_word (const char *w) { char *r, *s, *t; @@ -695,17 +693,14 @@ expand_and_quote_kvpair_word (w) If this is an associative array, we perform the assignments into NHASH and set NHASH to be the value of VAR after processing the assignments in NLIST */ -void -assign_compound_array_list (var, nlist, flags) - SHELL_VAR *var; - WORD_LIST *nlist; - int flags; +int +assign_compound_array_list (SHELL_VAR *var, WORD_LIST *nlist, int flags) { ARRAY *a; HASH_TABLE *h, *nhash; WORD_LIST *list; char *w, *val, *nval, *savecmd; - int len, iflags, free_val; + int len, iflags, free_val, any_failed; arrayind_t ind, last_ind; char *akey; @@ -715,6 +710,8 @@ assign_compound_array_list (var, nlist, flags) akey = (char *)0; ind = 0; + any_failed = 0; + /* Now that we are ready to assign values to the array, kill the existing value. */ if ((flags & ASS_APPEND) == 0) @@ -725,8 +722,6 @@ assign_compound_array_list (var, nlist, flags) nhash = assoc_create (h->nbuckets); } - last_ind = (a && (flags & ASS_APPEND)) ? array_max_index (a) + 1 : 0; - #if ASSOC_KVPAIR_ASSIGNMENT if (assoc_p (var) && kvpair_assignment_p (nlist)) { @@ -738,10 +733,12 @@ assign_compound_array_list (var, nlist, flags) var_setassoc (var, nhash); assoc_dispose (h); } - return; + return 1; /* XXX - check return value */ } #endif + last_ind = (a && (flags & ASS_APPEND)) ? array_max_index (a) + 1 : 0; + for (list = nlist; list; list = list->next) { /* Don't allow var+=(values) to make assignments in VALUES append to @@ -760,10 +757,11 @@ assign_compound_array_list (var, nlist, flags) /* XXX - changes for `+=' */ if (w[len] != ']' || (w[len+1] != '=' && (w[len+1] != '+' || w[len+2] != '='))) { - if (assoc_p (var)) + if (assoc_p (var) || last_ind < 0) { err_badarraysub (w); - continue; + any_failed++; + break; } nval = make_variable_value (var, w, flags); if (var->assign_func) @@ -778,26 +776,33 @@ assign_compound_array_list (var, nlist, flags) if (len == 1) { err_badarraysub (w); - continue; + any_failed++; + break; } if (ALL_ELEMENT_SUB (w[1]) && len == 2 && array_p (var)) { set_exit_status (EXECUTION_FAILURE); report_error (_("%s: cannot assign to non-numeric index"), w); - continue; + any_failed++; + break; } if (array_p (var)) { - ind = array_expand_index (var, w + 1, len, 0); + int avflags; + + /* convert ASS_ FLAGS to AV_ flags here */ + avflags = convert_assign_flags_to_arrayval_flags (flags); + ind = array_expand_index (var, w + 1, len, avflags); /* negative subscripts to indexed arrays count back from end */ if (ind < 0) ind = array_max_index (array_cell (var)) + 1 + ind; if (ind < 0) { err_badarraysub (w); - continue; + any_failed++; + break; } last_ind = ind; @@ -813,7 +818,8 @@ assign_compound_array_list (var, nlist, flags) { err_badarraysub (w); FREE (akey); - continue; + any_failed++; + break; } } @@ -830,7 +836,8 @@ assign_compound_array_list (var, nlist, flags) { set_exit_status (EXECUTION_FAILURE); report_error (_("%s: %s: must use subscript when assigning associative array"), var->name, w); - continue; + any_failed++; + break; } else /* No [ind]=value, just a stray `=' */ { @@ -838,6 +845,16 @@ assign_compound_array_list (var, nlist, flags) val = w; } + if (array_p (var) && ind < 0) /* overflow */ + { + char *num; + + num = itos (ind); + report_error ("%s[%s]: %s", var->name, num, bash_badsub_errmsg); + free (num); + return 0; + } + free_val = 0; /* See above; we need to expand the value here */ if (assoc_p (var)) @@ -853,7 +870,7 @@ assign_compound_array_list (var, nlist, flags) savecmd = this_command_name; if (integer_p (var)) - this_command_name = (char *)NULL; /* no command name for errors */ + this_command_name = 0; /* no command name for errors */ if (assoc_p (var)) bind_assoc_var_internal (var, nhash, akey, val, iflags); else @@ -871,23 +888,36 @@ assign_compound_array_list (var, nlist, flags) var_setassoc (var, nhash); assoc_dispose (h); } + +#if ARRAY_EXPORT + if (var && exported_p (var)) + { + INVALIDATE_EXPORTSTR (var); + array_needs_making = 1; + } +#endif + + return (any_failed ? 0 : 1); } /* Perform a compound array assignment: VAR->name=( VALUE ). The - VALUE has already had the parentheses stripped. */ + VALUE has already had the parentheses stripped. FLAGS are ASS_ + assignment flags. */ SHELL_VAR * -assign_array_var_from_string (var, value, flags) - SHELL_VAR *var; - char *value; - int flags; +assign_array_var_from_string (SHELL_VAR *var, char *value, int flags) { WORD_LIST *nlist; + int aflags, r; if (value == 0) return var; nlist = expand_compound_array_assignment (var, value, flags); - assign_compound_array_list (var, nlist, flags); + /* This is were we set ASS_NOEXPAND and ASS_ONEWORD if we need to, since + expand_compound_array_assignment performs word expansions. Honors + array_expand_once; allows @ and * as associative array keys. */ + aflags = flags | (array_expand_once ? ASS_NOEXPAND : 0) | ASS_ALLOWALLSUB; + r = assign_compound_array_list (var, nlist, aflags); if (nlist) dispose_words (nlist); @@ -895,15 +925,14 @@ assign_array_var_from_string (var, value, flags) if (var) VUNSETATTR (var, att_invisible); /* no longer invisible */ - return (var); + return (r == 0 ? (SHELL_VAR *)0 : var); } /* Quote globbing chars and characters in $IFS before the `=' in an assignment statement (usually a compound array assignment) to protect them from unwanted filename expansion or word splitting. */ static char * -quote_assign (string) - const char *string; +quote_assign (const char *string) { size_t slen; int saw_eq; @@ -949,9 +978,7 @@ quote_assign (string) indexed arrays. W has already undergone word expansions. If W has no [IND]=, just single-quote and return it. */ static char * -quote_compound_array_word (w, type) - char *w; - int type; +quote_compound_array_word (char *w, int type) { char *nword, *sub, *value, *t; int ind, wlen, i; @@ -985,6 +1012,7 @@ quote_compound_array_word (w, type) if (t != w+ind) free (t); strcpy (nword + i, value); + free (value); return nword; } @@ -997,9 +1025,7 @@ quote_compound_array_word (w, type) Used for compound assignments to associative arrays that are arguments to declaration builtins (declare -A a=( list )). */ char * -expand_and_quote_assoc_word (w, type) - char *w; - int type; +expand_and_quote_assoc_word (char *w, int type) { char *nword, *key, *value, *s, *t; int ind, wlen, i; @@ -1050,9 +1076,7 @@ expand_and_quote_assoc_word (w, type) the = sign (and any `+') alone. If it's not an assignment, just single- quote the word. This is used for indexed arrays. */ void -quote_compound_array_list (list, type) - WORD_LIST *list; - int type; +quote_compound_array_list (WORD_LIST *list, int type) { char *s, *t; WORD_LIST *l; @@ -1078,8 +1102,7 @@ quote_compound_array_list (list, type) /* For each word in a compound array assignment, if the word looks like [ind]=value, quote globbing chars and characters in $IFS before the `='. */ static void -quote_array_assignment_chars (list) - WORD_LIST *list; +quote_array_assignment_chars (WORD_LIST *list) { char *nword; WORD_LIST *l; @@ -1112,14 +1135,12 @@ quote_array_assignment_chars (list) the subscript, we just assume the subscript ends with a close bracket, if one is present, and use what's inside the brackets. */ int -unbind_array_element (var, sub, flags) - SHELL_VAR *var; - char *sub; - int flags; +unbind_array_element (SHELL_VAR *var, char *sub, int flags) { arrayind_t ind; char *akey; ARRAY_ELEMENT *ae; + int avflags; /* Assume that the caller (unset_builtin) passes us a null-terminated SUB, so we don't have to use VA_ONEWORD or parse the subscript again with @@ -1176,7 +1197,9 @@ unbind_array_element (var, sub, flags) } /* Fall through for behavior 3 */ } - ind = array_expand_index (var, sub, strlen (sub) + 1, 0); + + avflags = convert_validarray_flags_to_arrayval_flags (flags); + ind = array_expand_index (var, sub, strlen (sub) + 1, avflags); /* negative subscripts to indexed arrays count back from end */ if (ind < 0) ind = array_max_index (array_cell (var)) + 1 + ind; @@ -1192,7 +1215,8 @@ unbind_array_element (var, sub, flags) else /* array_p (var) == 0 && assoc_p (var) == 0 */ { akey = this_command_name; - ind = array_expand_index (var, sub, strlen (sub) + 1, 0); + avflags = convert_validarray_flags_to_arrayval_flags (flags); + ind = array_expand_index (var, sub, strlen (sub) + 1, avflags); this_command_name = akey; if (ind == 0) { @@ -1209,9 +1233,7 @@ unbind_array_element (var, sub, flags) /* Format and output an array assignment in compound form VAR=(VALUES), suitable for re-use as input. */ void -print_array_assignment (var, quoted) - SHELL_VAR *var; - int quoted; +print_array_assignment (SHELL_VAR *var, int quoted) { char *vstr; @@ -1229,9 +1251,7 @@ print_array_assignment (var, quoted) /* Format and output an associative array assignment in compound form VAR=(VALUES), suitable for re-use as input. */ void -print_assoc_assignment (var, quoted) - SHELL_VAR *var; - int quoted; +print_assoc_assignment (SHELL_VAR *var, int quoted) { char *vstr; @@ -1254,8 +1274,6 @@ print_assoc_assignment (var, quoted) /* Return 1 if NAME is a properly-formed array reference v[sub]. */ -/* Return 1 if NAME is a properly-formed array reference v[sub]. */ - /* When NAME is a properly-formed array reference and a non-null argument SUBP is supplied, '[' and ']' that enclose the subscript are replaced by '\0', and the pointer to the subscript in NAME is assigned to *SUBP, so that NAME @@ -1264,10 +1282,7 @@ print_assoc_assignment (var, quoted) not be modified. */ /* We need to reserve 1 for FLAGS, which we pass to skipsubscript. */ int -tokenize_array_reference (name, flags, subp) - char *name; - int flags; - char **subp; +tokenize_array_reference (const char *name, int flags, char **subp) { char *t; int r, len, isassoc, ssflags; @@ -1278,7 +1293,7 @@ tokenize_array_reference (name, flags, subp) if (t) { *t = '\0'; - r = legal_identifier (name); + r = valid_identifier (name); if (flags & VA_NOEXPAND) /* Don't waste a lookup if we don't need one */ isassoc = (entry = find_variable (name)) && assoc_p (entry); *t = '['; @@ -1327,20 +1342,15 @@ tokenize_array_reference (name, flags, subp) /* We need to reserve 1 for FLAGS, which we pass to skipsubscript. */ int -valid_array_reference (name, flags) - const char *name; - int flags; +valid_array_reference (const char *name, int flags) { - return tokenize_array_reference ((char *)name, flags, (char **)NULL); + return tokenize_array_reference (name, flags, (char **)NULL); } -/* Expand the array index beginning at S and extending LEN characters. */ +/* Expand the array index beginning at S and extending LEN characters. FLAGS + are AV_ flags saying how to compute the array value. */ arrayind_t -array_expand_index (var, s, len, flags) - SHELL_VAR *var; - char *s; - int len; - int flags; +array_expand_index (SHELL_VAR *var, const char *s, int len, int flags) { char *exp, *t, *savecmd; int expok, eflag; @@ -1349,8 +1359,12 @@ array_expand_index (var, s, len, flags) exp = (char *)xmalloc (len); strncpy (exp, s, len - 1); exp[len - 1] = '\0'; -#if 0 /* TAG: maybe bash-5.2 */ +#if 1 /* TAG: bash-5.3 */ +#if 0 + if (shell_compatibility_level <= 52 || (flags & AV_NOEXPAND) == 0) +#else if ((flags & AV_NOEXPAND) == 0) +#endif t = expand_arith_string (exp, Q_DOUBLE_QUOTES|Q_ARITH|Q_ARRAYSUB); /* XXX - Q_ARRAYSUB for future use */ else t = exp; @@ -1382,11 +1396,7 @@ array_expand_index (var, s, len, flags) in *SUBP. If LENP is non-null, the length of the subscript is returned in *LENP. This returns newly-allocated memory. */ char * -array_variable_name (s, flags, subp, lenp) - const char *s; - int flags; - char **subp; - int *lenp; +array_variable_name (const char *s, int flags, char **subp, int *lenp) { char *t, *ret; int ind, ni, ssflags; @@ -1436,11 +1446,7 @@ array_variable_name (s, flags, subp, lenp) non-null, return a pointer to the start of the subscript in *SUBP. If LENP is non-null, the length of the subscript is returned in *LENP. */ SHELL_VAR * -array_variable_part (s, flags, subp, lenp) - const char *s; - int flags; - char **subp; - int *lenp; +array_variable_part (const char *s, int flags, char **subp, int *lenp) { char *t; SHELL_VAR *var; @@ -1475,10 +1481,7 @@ array_variable_part (s, flags, subp, lenp) is non-null it gets 1 if the array reference is name[*], 2 if the reference is name[@], and 0 otherwise. */ static char * -array_value_internal (s, quoted, flags, estatep) - const char *s; - int quoted, flags; - array_eltstate_t *estatep; +array_value_internal (const char *s, int quoted, int flags, array_eltstate_t *estatep) { int len, isassoc, subtype; arrayind_t ind; @@ -1552,6 +1555,12 @@ array_value_internal (s, quoted, flags, estatep) retval = quote_string (temp); free (temp); } + else if (t[0] == '*' && quoted == 0 && (flags & AV_ASSIGNRHS)) + { + temp = string_list_dollar_star (l, quoted, PF_ASSIGNRHS); + retval = quote_nosplit (temp); + free (temp); + } else /* ${name[@]} or unquoted ${name[*]} */ retval = string_list_dollar_at (l, quoted, (flags & AV_ASSIGNRHS) ? PF_ASSIGNRHS : 0); @@ -1636,10 +1645,7 @@ array_value_internal (s, quoted, flags, estatep) /* Return a string containing the elements described by the array and subscript contained in S, obeying quoting for subscripts * and @. */ char * -array_value (s, quoted, flags, estatep) - const char *s; - int quoted, flags; - array_eltstate_t *estatep; +array_value (const char *s, int quoted, int flags, array_eltstate_t *estatep) { char *retval; @@ -1652,10 +1658,7 @@ array_value (s, quoted, flags, estatep) is used by other parts of the shell such as the arithmetic expression evaluator in expr.c. */ char * -get_array_value (s, flags, estatep) - const char *s; - int flags; - array_eltstate_t *estatep; +get_array_value (const char *s, int flags, array_eltstate_t *estatep) { char *retval; @@ -1664,9 +1667,7 @@ get_array_value (s, flags, estatep) } char * -array_keys (s, quoted, pflags) - char *s; - int quoted, pflags; +array_keys (const char *s, int quoted, int pflags) { int len; char *retval, *t, *temp; diff --git a/arrayfunc.h b/arrayfunc.h index 69112b579..41e4b079b 100644 --- a/arrayfunc.h +++ b/arrayfunc.h @@ -1,6 +1,6 @@ /* arrayfunc.h -- declarations for miscellaneous array functions in arrayfunc.c */ -/* Copyright (C) 2001-2021 Free Software Foundation, Inc. +/* Copyright (C) 2001-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -48,11 +48,8 @@ typedef struct element_state #if defined (ARRAY_VARS) -/* This variable means to not expand associative array subscripts more than - once, when performing variable expansion. */ -extern int assoc_expand_once; - -/* The analog for indexed array subscripts */ +/* This variable means to not expand associative or indexed array subscripts + more than once, when performing variable expansion. */ extern int array_expand_once; /* Flags for array_value_internal and callers array_value/get_array_value; also @@ -73,49 +70,51 @@ extern int array_expand_once; #define VA_ONEWORD 0x002 #define VA_ALLOWALL 0x004 /* allow @ to mean all elements of the array */ -extern SHELL_VAR *convert_var_to_array PARAMS((SHELL_VAR *)); -extern SHELL_VAR *convert_var_to_assoc PARAMS((SHELL_VAR *)); +extern SHELL_VAR *convert_var_to_array (SHELL_VAR *); +extern SHELL_VAR *convert_var_to_assoc (SHELL_VAR *); + +extern SHELL_VAR *arrayvar_copyval (SHELL_VAR *, SHELL_VAR *); -extern char *make_array_variable_value PARAMS((SHELL_VAR *, arrayind_t, char *, char *, int)); +extern char *make_array_variable_value (SHELL_VAR *, arrayind_t, const char *, const char *, int); -extern SHELL_VAR *bind_array_variable PARAMS((char *, arrayind_t, char *, int)); -extern SHELL_VAR *bind_array_element PARAMS((SHELL_VAR *, arrayind_t, char *, int)); -extern SHELL_VAR *assign_array_element PARAMS((char *, char *, int, array_eltstate_t *)); +extern SHELL_VAR *bind_array_variable (const char *, arrayind_t, const char *, int); +extern SHELL_VAR *bind_array_element (SHELL_VAR *, arrayind_t, char *, int); +extern SHELL_VAR *assign_array_element (const char *, const char *, int, array_eltstate_t *); -extern SHELL_VAR *bind_assoc_variable PARAMS((SHELL_VAR *, char *, char *, char *, int)); +extern SHELL_VAR *bind_assoc_variable (SHELL_VAR *, const char *, char *, const char *, int); -extern SHELL_VAR *find_or_make_array_variable PARAMS((char *, int)); +extern SHELL_VAR *find_or_make_array_variable (const char *, int); -extern SHELL_VAR *assign_array_from_string PARAMS((char *, char *, int)); -extern SHELL_VAR *assign_array_var_from_word_list PARAMS((SHELL_VAR *, WORD_LIST *, int)); +extern SHELL_VAR *assign_array_from_string (const char *, char *, int); +extern SHELL_VAR *assign_array_var_from_word_list (SHELL_VAR *, WORD_LIST *, int); -extern WORD_LIST *expand_compound_array_assignment PARAMS((SHELL_VAR *, char *, int)); -extern void assign_compound_array_list PARAMS((SHELL_VAR *, WORD_LIST *, int)); -extern SHELL_VAR *assign_array_var_from_string PARAMS((SHELL_VAR *, char *, int)); +extern WORD_LIST *expand_compound_array_assignment (SHELL_VAR *, char *, int); +extern int assign_compound_array_list (SHELL_VAR *, WORD_LIST *, int); +extern SHELL_VAR *assign_array_var_from_string (SHELL_VAR *, char *, int); -extern char *expand_and_quote_assoc_word PARAMS((char *, int)); -extern void quote_compound_array_list PARAMS((WORD_LIST *, int)); +extern char *expand_and_quote_assoc_word (char *, int); +extern void quote_compound_array_list (WORD_LIST *, int); -extern int kvpair_assignment_p PARAMS((WORD_LIST *)); -extern char *expand_and_quote_kvpair_word PARAMS((char *)); +extern int kvpair_assignment_p (WORD_LIST *); +extern char *expand_and_quote_kvpair_word (const char *); -extern int unbind_array_element PARAMS((SHELL_VAR *, char *, int)); -extern int skipsubscript PARAMS((const char *, int, int)); +extern int unbind_array_element (SHELL_VAR *, char *, int); +extern int skipsubscript (const char *, int, int); -extern void print_array_assignment PARAMS((SHELL_VAR *, int)); -extern void print_assoc_assignment PARAMS((SHELL_VAR *, int)); +extern void print_array_assignment (SHELL_VAR *, int); +extern void print_assoc_assignment (SHELL_VAR *, int); -extern arrayind_t array_expand_index PARAMS((SHELL_VAR *, char *, int, int)); -extern int valid_array_reference PARAMS((const char *, int)); -extern int tokenize_array_reference PARAMS((char *, int, char **)); +extern arrayind_t array_expand_index (SHELL_VAR *, const char *, int, int); +extern int valid_array_reference (const char *, int); +extern int tokenize_array_reference (const char *, int, char **); -extern char *array_value PARAMS((const char *, int, int, array_eltstate_t *)); -extern char *get_array_value PARAMS((const char *, int, array_eltstate_t *)); +extern char *array_value (const char *, int, int, array_eltstate_t *); +extern char *get_array_value (const char *, int, array_eltstate_t *); -extern char *array_keys PARAMS((char *, int, int)); +extern char *array_keys (const char *, int, int); -extern char *array_variable_name PARAMS((const char *, int, char **, int *)); -extern SHELL_VAR *array_variable_part PARAMS((const char *, int, char **, int *)); +extern char *array_variable_name (const char *, int, char **, int *); +extern SHELL_VAR *array_variable_part (const char *, int, char **, int *); extern void init_eltstate (array_eltstate_t *); extern void flush_eltstate (array_eltstate_t *); @@ -137,4 +136,59 @@ extern void flush_eltstate (array_eltstate_t *); #endif +/* Functions to convert from other flag values to AV_ array variable flags */ + +#if defined (ASS_NOEXPAND) +static inline int +convert_assign_flags_to_arrayval_flags (int aflags) +{ + int avflags; + + avflags = 0; + if (aflags & ASS_NOEXPAND) + avflags |= AV_NOEXPAND; + if (aflags & ASS_ONEWORD) + avflags |= AV_ONEWORD; + if (aflags & ASS_NOEVAL) + avflags |= AV_NOEXPAND; + if (aflags & ASS_ALLOWALLSUB) + avflags |= AV_ATSTARKEYS; + return avflags; +} +#endif + +#if defined (VA_NOEXPAND) +static inline int +convert_validarray_flags_to_arrayval_flags (int vflags) +{ + int avflags; + + avflags = 0; + if (vflags & VA_NOEXPAND) + avflags |= AV_NOEXPAND; + if (vflags & VA_ONEWORD) + avflags |= AV_ONEWORD; + if (vflags & VA_ALLOWALL) + avflags |= AV_ATSTARKEYS; + return avflags; +} +#endif + +#if defined (ASS_NOEXPAND) +static inline int +convert_assign_flags_to_validarray_flags (int flags) +{ + int vflags; + + vflags = 0; + if (flags & ASS_NOEXPAND) + vflags |= VA_NOEXPAND; + if (flags & ASS_ONEWORD) + vflags |= VA_ONEWORD; + if (flags & ASS_ALLOWALLSUB) + vflags |= VA_ALLOWALL; + return vflags; +} +#endif + #endif /* !_ARRAYFUNC_H_ */ diff --git a/assoc.c b/assoc.c index cbb5c7e4f..5a8e81800 100644 --- a/assoc.c +++ b/assoc.c @@ -7,7 +7,7 @@ * chet@ins.cwru.edu */ -/* Copyright (C) 2008,2009,2011-2021 Free Software Foundation, Inc. +/* Copyright (C) 2008,2009,2011-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -44,13 +44,12 @@ #include "assoc.h" #include "builtins/common.h" -static WORD_LIST *assoc_to_word_list_internal PARAMS((HASH_TABLE *, int)); +static WORD_LIST *assoc_to_word_list_internal (HASH_TABLE *, int); /* assoc_create == hash_create */ void -assoc_dispose (hash) - HASH_TABLE *hash; +assoc_dispose (HASH_TABLE *hash) { if (hash) { @@ -60,17 +59,13 @@ assoc_dispose (hash) } void -assoc_flush (hash) - HASH_TABLE *hash; +assoc_flush (HASH_TABLE *hash) { hash_flush (hash, 0); } int -assoc_insert (hash, key, value) - HASH_TABLE *hash; - char *key; - char *value; +assoc_insert (HASH_TABLE *hash, char *key, char *value) { BUCKET_CONTENTS *b; @@ -89,10 +84,7 @@ assoc_insert (hash, key, value) /* Like assoc_insert, but returns b->data instead of freeing it */ PTR_T -assoc_replace (hash, key, value) - HASH_TABLE *hash; - char *key; - char *value; +assoc_replace (HASH_TABLE *hash, char *key, char *value) { BUCKET_CONTENTS *b; PTR_T t; @@ -111,9 +103,7 @@ assoc_replace (hash, key, value) } void -assoc_remove (hash, string) - HASH_TABLE *hash; - char *string; +assoc_remove (HASH_TABLE *hash, const char *string) { BUCKET_CONTENTS *b; @@ -127,9 +117,7 @@ assoc_remove (hash, string) } char * -assoc_reference (hash, string) - HASH_TABLE *hash; - char *string; +assoc_reference (HASH_TABLE *hash, const char *string) { BUCKET_CONTENTS *b; @@ -143,8 +131,7 @@ assoc_reference (hash, string) /* Quote the data associated with each element of the hash table ASSOC, using quote_string */ HASH_TABLE * -assoc_quote (h) - HASH_TABLE *h; +assoc_quote (HASH_TABLE *h) { int i; BUCKET_CONTENTS *tlist; @@ -167,8 +154,7 @@ assoc_quote (h) /* Quote escape characters in the data associated with each element of the hash table ASSOC, using quote_escapes */ HASH_TABLE * -assoc_quote_escapes (h) - HASH_TABLE *h; +assoc_quote_escapes (HASH_TABLE *h) { int i; BUCKET_CONTENTS *tlist; @@ -189,8 +175,7 @@ assoc_quote_escapes (h) } HASH_TABLE * -assoc_dequote (h) - HASH_TABLE *h; +assoc_dequote (HASH_TABLE *h) { int i; BUCKET_CONTENTS *tlist; @@ -211,8 +196,7 @@ assoc_dequote (h) } HASH_TABLE * -assoc_dequote_escapes (h) - HASH_TABLE *h; +assoc_dequote_escapes (HASH_TABLE *h) { int i; BUCKET_CONTENTS *tlist; @@ -233,8 +217,7 @@ assoc_dequote_escapes (h) } HASH_TABLE * -assoc_remove_quoted_nulls (h) - HASH_TABLE *h; +assoc_remove_quoted_nulls (HASH_TABLE *h) { int i; BUCKET_CONTENTS *tlist; @@ -258,10 +241,7 @@ assoc_remove_quoted_nulls (h) * the STARTth element and spanning NELEM members. Null elements are counted. */ char * -assoc_subrange (hash, start, nelem, starsub, quoted, pflags) - HASH_TABLE *hash; - arrayind_t start, nelem; - int starsub, quoted, pflags; +assoc_subrange (HASH_TABLE *hash, arrayind_t start, arrayind_t nelem, int starsub, int quoted, int pflags) { WORD_LIST *l, *save, *h, *t; int i, j; @@ -296,14 +276,12 @@ assoc_subrange (hash, start, nelem, starsub, quoted, pflags) dispose_words (save); return (ret); - } +/* Substitute REP for each match of PAT in each element of hash table H, + qualified by FLAGS to say what kind of quoting to do. */ char * -assoc_patsub (h, pat, rep, mflags) - HASH_TABLE *h; - char *pat, *rep; - int mflags; +assoc_patsub (HASH_TABLE *h, char *pat, char *rep, int mflags) { char *t; int pchar, qflags, pflags; @@ -334,11 +312,7 @@ assoc_patsub (h, pat, rep, mflags) } char * -assoc_modcase (h, pat, modop, mflags) - HASH_TABLE *h; - char *pat; - int modop; - int mflags; +assoc_modcase (HASH_TABLE *h, char *pat, int modop, int mflags) { char *t; int pchar, qflags, pflags; @@ -369,9 +343,7 @@ assoc_modcase (h, pat, modop, mflags) } char * -assoc_to_kvpair (hash, quoted) - HASH_TABLE *hash; - int quoted; +assoc_to_kvpair (HASH_TABLE *hash, int quoted) { char *ret; char *istr, *vstr; @@ -439,9 +411,7 @@ assoc_to_kvpair (hash, quoted) } char * -assoc_to_assign (hash, quoted) - HASH_TABLE *hash; - int quoted; +assoc_to_assign (HASH_TABLE *hash, int quoted) { char *ret; char *istr, *vstr; @@ -508,9 +478,7 @@ assoc_to_assign (hash, quoted) } static WORD_LIST * -assoc_to_word_list_internal (h, t) - HASH_TABLE *h; - int t; +assoc_to_word_list_internal (HASH_TABLE *h, int t) { WORD_LIST *list; int i; @@ -531,22 +499,19 @@ assoc_to_word_list_internal (h, t) } WORD_LIST * -assoc_to_word_list (h) - HASH_TABLE *h; +assoc_to_word_list (HASH_TABLE *h) { return (assoc_to_word_list_internal (h, 0)); } WORD_LIST * -assoc_keys_to_word_list (h) - HASH_TABLE *h; +assoc_keys_to_word_list (HASH_TABLE *h) { return (assoc_to_word_list_internal (h, 1)); } WORD_LIST * -assoc_to_kvpair_list (h) - HASH_TABLE *h; +assoc_to_kvpair_list (HASH_TABLE *h) { WORD_LIST *list; int i; @@ -569,10 +534,7 @@ assoc_to_kvpair_list (h) } char * -assoc_to_string (h, sep, quoted) - HASH_TABLE *h; - char *sep; - int quoted; +assoc_to_string (HASH_TABLE *h, char *sep, int quoted) { BUCKET_CONTENTS *tlist; int i; diff --git a/assoc.h b/assoc.h index 664d13740..46dc0aef6 100644 --- a/assoc.h +++ b/assoc.h @@ -1,7 +1,7 @@ /* assoc.h -- definitions for the interface exported by assoc.c that allows the rest of the shell to manipulate associative array variables. */ -/* Copyright (C) 2008,2009-2021 Free Software Foundation, Inc. +/* Copyright (C) 2008,2009-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -36,31 +36,31 @@ #define assoc_walk(h, f) (hash_walk((h), (f)) -extern void assoc_dispose PARAMS((HASH_TABLE *)); -extern void assoc_flush PARAMS((HASH_TABLE *)); +extern void assoc_dispose (HASH_TABLE *); +extern void assoc_flush (HASH_TABLE *); -extern int assoc_insert PARAMS((HASH_TABLE *, char *, char *)); -extern PTR_T assoc_replace PARAMS((HASH_TABLE *, char *, char *)); -extern void assoc_remove PARAMS((HASH_TABLE *, char *)); +extern int assoc_insert (HASH_TABLE *, char *, char *); +extern PTR_T assoc_replace (HASH_TABLE *, char *, char *); +extern void assoc_remove (HASH_TABLE *, const char *); -extern char *assoc_reference PARAMS((HASH_TABLE *, char *)); +extern char *assoc_reference (HASH_TABLE *, const char *); -extern char *assoc_subrange PARAMS((HASH_TABLE *, arrayind_t, arrayind_t, int, int, int)); -extern char *assoc_patsub PARAMS((HASH_TABLE *, char *, char *, int)); -extern char *assoc_modcase PARAMS((HASH_TABLE *, char *, int, int)); +extern char *assoc_subrange (HASH_TABLE *, arrayind_t, arrayind_t, int, int, int); +extern char *assoc_patsub (HASH_TABLE *, char *, char *, int); +extern char *assoc_modcase (HASH_TABLE *, char *, int, int); -extern HASH_TABLE *assoc_quote PARAMS((HASH_TABLE *)); -extern HASH_TABLE *assoc_quote_escapes PARAMS((HASH_TABLE *)); -extern HASH_TABLE *assoc_dequote PARAMS((HASH_TABLE *)); -extern HASH_TABLE *assoc_dequote_escapes PARAMS((HASH_TABLE *)); -extern HASH_TABLE *assoc_remove_quoted_nulls PARAMS((HASH_TABLE *)); +extern HASH_TABLE *assoc_quote (HASH_TABLE *); +extern HASH_TABLE *assoc_quote_escapes (HASH_TABLE *); +extern HASH_TABLE *assoc_dequote (HASH_TABLE *); +extern HASH_TABLE *assoc_dequote_escapes (HASH_TABLE *); +extern HASH_TABLE *assoc_remove_quoted_nulls (HASH_TABLE *); -extern char *assoc_to_kvpair PARAMS((HASH_TABLE *, int)); -extern char *assoc_to_assign PARAMS((HASH_TABLE *, int)); +extern char *assoc_to_kvpair (HASH_TABLE *, int); +extern char *assoc_to_assign (HASH_TABLE *, int); -extern WORD_LIST *assoc_to_word_list PARAMS((HASH_TABLE *)); -extern WORD_LIST *assoc_keys_to_word_list PARAMS((HASH_TABLE *)); -extern WORD_LIST *assoc_to_kvpair_list PARAMS((HASH_TABLE *)); +extern WORD_LIST *assoc_to_word_list (HASH_TABLE *); +extern WORD_LIST *assoc_keys_to_word_list (HASH_TABLE *); +extern WORD_LIST *assoc_to_kvpair_list (HASH_TABLE *); -extern char *assoc_to_string PARAMS((HASH_TABLE *, char *, int)); +extern char *assoc_to_string (HASH_TABLE *, char *, int); #endif /* _ASSOC_H_ */ diff --git a/bashansi.h b/bashansi.h index dd2a544cd..16772d226 100644 --- a/bashansi.h +++ b/bashansi.h @@ -1,6 +1,6 @@ /* bashansi.h -- Typically included information required by picky compilers. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,4 +35,28 @@ # include "ansi_stdlib.h" #endif /* !HAVE_STDLIB_H */ +/* If bool is not a compiler builtin, prefer stdbool.h if we have it */ +#if !defined (HAVE_C_BOOL) +# if defined (HAVE_STDBOOL_H) +# include +# else +# undef bool +typedef unsigned char bool; +# define true 1 +# define false 0 +# endif +#endif + +/* Include , or define substitutes (config.h handles ptrdiff_t). */ +#ifdef HAVE_STDDEF_H +# include +#endif +/* Substitutes for definitions in stddef.h */ +#ifndef NULL +# define NULL 0 +#endif +#ifndef offsetof +# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif + #endif /* !_BASHANSI_H_ */ diff --git a/bashhist.c b/bashhist.c index 90cd8c34f..fb9935f5d 100644 --- a/bashhist.c +++ b/bashhist.c @@ -1,6 +1,6 @@ /* bashhist.c -- bash interface to the GNU history library. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -68,10 +68,10 @@ extern int rl_done, rl_dispatching; /* should really include readline.h */ extern int errno; #endif -static int histignore_item_func PARAMS((struct ign *)); -static int check_history_control PARAMS((char *)); -static void hc_erasedups PARAMS((char *)); -static void really_add_history PARAMS((char *)); +static int histignore_item_func (struct ign *); +static int check_history_control (char *); +static void hc_erasedups (char *); +static void really_add_history (char *); static struct ignorevar histignore = { @@ -193,25 +193,27 @@ int hist_verify; int dont_save_function_defs; #if defined (BANG_HISTORY) -static int bash_history_inhibit_expansion PARAMS((char *, int)); +/* The usual history no-expand characters plus the shell metacharacters that + would result in an empty history event. */ +static char *bash_history_no_expand_chars = " \t\n\r=;&|()<>"; + +static int bash_history_inhibit_expansion (char *, int); #endif #if defined (READLINE) -static void re_edit PARAMS((char *)); +static void re_edit (char *); #endif -static int history_expansion_p PARAMS((char *)); -static int shell_comment PARAMS((char *)); -static int should_expand PARAMS((char *)); -static HIST_ENTRY *last_history_entry PARAMS((void)); -static char *expand_histignore_pattern PARAMS((char *)); -static int history_should_ignore PARAMS((char *)); +static int history_expansion_p (char *); +static int shell_comment (char *); +static int should_expand (char *); +static HIST_ENTRY *last_history_entry (void); +static char *expand_histignore_pattern (char *); +static int history_should_ignore (char *); #if defined (BANG_HISTORY) /* Is the history expansion starting at string[i] one that should not be expanded? */ static int -bash_history_inhibit_expansion (string, i) - char *string; - int i; +bash_history_inhibit_expansion (char *string, int i) { int t, si; char hx[2]; @@ -232,6 +234,7 @@ bash_history_inhibit_expansion (string, i) else if (i > 1 && string[i - 1] == '$' && string[i] == '!') return (1); #if defined (EXTENDED_GLOB) + /* This is on all the time now; see bash_history_no_expand_characters above */ else if (extended_glob && i > 1 && string[i+1] == '(' && member (')', string + i + 2)) return (1); #endif @@ -267,30 +270,31 @@ bash_history_inhibit_expansion (string, i) #endif void -bash_initialize_history () +bash_initialize_history (void) { history_quotes_inhibit_expansion = 1; history_search_delimiter_chars = ";&()|<>"; #if defined (BANG_HISTORY) history_inhibit_expansion_function = bash_history_inhibit_expansion; + history_no_expand_chars = bash_history_no_expand_chars; sv_histchars ("histchars"); #endif } void -bash_history_reinit (interact) - int interact; +bash_history_reinit (int interact) { #if defined (BANG_HISTORY) history_expansion = (interact == 0) ? histexp_flag : HISTEXPAND_DEFAULT; history_expansion_inhibited = (interact == 0) ? 1 - histexp_flag : 0; /* changed in bash_history_enable() */ history_inhibit_expansion_function = bash_history_inhibit_expansion; + history_no_expand_chars = bash_history_no_expand_chars; #endif remember_on_history = enable_history_list; } void -bash_history_disable () +bash_history_disable (void) { remember_on_history = 0; #if defined (BANG_HISTORY) @@ -299,12 +303,13 @@ bash_history_disable () } void -bash_history_enable () +bash_history_enable (void) { remember_on_history = enable_history_list = 1; #if defined (BANG_HISTORY) history_expansion_inhibited = 0; history_inhibit_expansion_function = bash_history_inhibit_expansion; + history_no_expand_chars = bash_history_no_expand_chars; #endif sv_history_control ("HISTCONTROL"); sv_histignore ("HISTIGNORE"); @@ -312,7 +317,7 @@ bash_history_enable () /* Load the history list from the history file. */ void -load_history () +load_history (void) { char *hf; @@ -331,7 +336,8 @@ load_history () if (hf && *hf && file_exists (hf)) { - read_history (hf); + while (read_history (hf) == EINTR) /* 0 on success */ + QUIT; /* We have read all of the lines from the history file, even if we read more lines than $HISTSIZE. Remember the total number of lines we read so we don't count the last N lines as new over and over @@ -343,7 +349,7 @@ load_history () } void -bash_clear_history () +bash_clear_history (void) { clear_history (); history_lines_this_session = 0; @@ -352,8 +358,7 @@ bash_clear_history () /* Delete and free the history list entry at offset I. */ int -bash_delete_histent (i) - int i; +bash_delete_histent (int i) { HIST_ENTRY *discard; @@ -367,8 +372,7 @@ bash_delete_histent (i) } int -bash_delete_history_range (first, last) - int first, last; +bash_delete_history_range (int first, int last) { register int i; HIST_ENTRY **discard_list; @@ -385,7 +389,7 @@ bash_delete_history_range (first, last) } int -bash_delete_last_history () +bash_delete_last_history (void) { register int i; HIST_ENTRY **hlist, *histent; @@ -412,10 +416,16 @@ bash_delete_last_history () return r; } +char * +bash_default_histfile (void) +{ + return (bash_tilde_expand (posixly_correct ? "~/.sh_history" : "~/.bash_history", 0)); +} + #ifdef INCLUDE_UNUSED /* Write the existing history out to the history file. */ void -save_history () +save_history (void) { char *hf; int r; @@ -437,8 +447,7 @@ save_history () #endif int -maybe_append_history (filename) - char *filename; +maybe_append_history (char *filename) { int fd, result, histlen; struct stat buf; @@ -476,7 +485,7 @@ maybe_append_history (filename) /* If this is an interactive shell, then append the lines executed this session to the history file. */ int -maybe_save_shell_history () +maybe_save_shell_history (void) { int result; char *hf; @@ -523,8 +532,7 @@ maybe_save_shell_history () #if defined (READLINE) /* Tell readline () that we have some text for it to edit. */ static void -re_edit (text) - char *text; +re_edit (char *text) { if (bash_input.type == st_stdin) bash_re_edit (text); @@ -533,8 +541,7 @@ re_edit (text) /* Return 1 if this line needs history expansion. */ static int -history_expansion_p (line) - char *line; +history_expansion_p (char *line) { register char *s; @@ -552,9 +559,7 @@ history_expansion_p (line) REMEMBER_ON_HISTORY can veto, and does. Right now this does history expansion. */ char * -pre_process_line (line, print_changes, addit) - char *line; - int print_changes, addit; +pre_process_line (char *line, int print_changes, int addit) { char *history_value; char *return_value; @@ -650,8 +655,7 @@ pre_process_line (line, print_changes, addit) first non-whitespace character. Return 0 if the line does not contain a comment. */ static int -shell_comment (line) - char *line; +shell_comment (char *line) { char *p; int n; @@ -672,8 +676,7 @@ shell_comment (line) /* Remove shell comments from LINE. A `#' and anything after it is a comment. This isn't really useful yet, since it doesn't handle quoting. */ static char * -filter_comments (line) - char *line; +filter_comments (char *line) { char *p; @@ -688,8 +691,7 @@ filter_comments (line) /* Check LINE against what HISTCONTROL says to do. Returns 1 if the line should be saved; 0 if it should be discarded. */ static int -check_history_control (line) - char *line; +check_history_control (char *line) { HIST_ENTRY *temp; int r; @@ -721,8 +723,7 @@ check_history_control (line) /* Remove all entries matching LINE from the history list. Triggered when HISTCONTROL includes `erasedups'. */ static void -hc_erasedups (line) - char *line; +hc_erasedups (char *line) { HIST_ENTRY *temp; int r; @@ -756,8 +757,7 @@ hc_erasedups (line) entered. We also make sure to save multiple-line quoted strings or other constructs. */ void -maybe_add_history (line) - char *line; +maybe_add_history (char *line) { int is_comment; @@ -786,9 +786,7 @@ maybe_add_history (line) history if it's OK. Used by `history -s' as well as maybe_add_history(). Returns 1 if the line was saved in the history, 0 otherwise. */ int -check_add_history (line, force) - char *line; - int force; +check_add_history (char *line, int force) { if (check_history_control (line) && history_should_ignore (line) == 0) { @@ -825,8 +823,7 @@ int syslog_history = 1; #endif void -bash_syslog_history (line) - const char *line; +bash_syslog_history (const char *line) { char trunc[SYSLOG_MAXLEN], *msg; char loghdr[SYSLOG_MAXHDR]; @@ -869,10 +866,10 @@ bash_syslog_history (line) complete parser construct, append LINE to the last history line instead of adding it as a new line. */ void -bash_add_history (line) - char *line; +bash_add_history (char *line) { - int add_it, offset, curlen, is_comment; + int add_it, offset, is_comment; + size_t curlen; HIST_ENTRY *current, *old; char *chars_to_add, *new_line; @@ -913,8 +910,8 @@ bash_add_history (line) newline, since that is what happens when the line is parsed. */ curlen = strlen (current->line); - if (dstack.delimiter_depth == 0 && current->line[curlen - 1] == '\\' && - current->line[curlen - 2] != '\\') + if (dstack.delimiter_depth == 0 && curlen > 0 && current->line[curlen - 1] == '\\' && + (curlen < 2 || current->line[curlen - 2] != '\\')) { current->line[curlen - 1] = '\0'; curlen--; @@ -925,7 +922,7 @@ bash_add_history (line) entry ends with a newline, and we're going to add a semicolon, don't. In some cases, it results in a syntax error (e.g., before a close brace), and it should not be needed. */ - if (dstack.delimiter_depth == 0 && current->line[curlen - 1] == '\n' && *chars_to_add == ';') + if (dstack.delimiter_depth == 0 && curlen > 0 && current->line[curlen - 1] == '\n' && *chars_to_add == ';') chars_to_add++; new_line = (char *)xmalloc (1 @@ -959,8 +956,7 @@ bash_add_history (line) } static void -really_add_history (line) - char *line; +really_add_history (char *line) { hist_last_line_added = 1; hist_last_line_pushed = 0; @@ -969,15 +965,14 @@ really_add_history (line) } int -history_number () +history_number (void) { using_history (); return ((remember_on_history || enable_history_list) ? history_base + where_history () : 1); } -static int -should_expand (s) - char *s; +static inline int +should_expand (char *s) { char *p; @@ -992,8 +987,7 @@ should_expand (s) } static int -histignore_item_func (ign) - struct ign *ign; +histignore_item_func (struct ign *ign) { if (should_expand (ign->val)) ign->flags |= HIGN_EXPAND; @@ -1001,14 +995,13 @@ histignore_item_func (ign) } void -setup_history_ignore (varname) - char *varname; +setup_history_ignore (const char *varname) { setup_ignore_patterns (&histignore); } static HIST_ENTRY * -last_history_entry () +last_history_entry (void) { HIST_ENTRY *he; @@ -1019,7 +1012,7 @@ last_history_entry () } char * -last_history_line () +last_history_line (void) { HIST_ENTRY *he; @@ -1030,8 +1023,7 @@ last_history_line () } static char * -expand_histignore_pattern (pat) - char *pat; +expand_histignore_pattern (char *pat) { HIST_ENTRY *phe; char *ret; @@ -1049,8 +1041,7 @@ expand_histignore_pattern (pat) /* Return 1 if we should not put LINE into the history according to the patterns in HISTIGNORE. */ static int -history_should_ignore (line) - char *line; +history_should_ignore (char *line) { register int i, match; char *npat; diff --git a/bashhist.h b/bashhist.h index 615f5d256..e3ca4fd8f 100644 --- a/bashhist.h +++ b/bashhist.h @@ -1,6 +1,6 @@ /* bashhist.h -- interface to the bash history functions in bashhist.c. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -64,26 +64,27 @@ extern int history_expansion_inhibited; extern int double_quotes_inhibit_history_expansion; # endif /* BANG_HISTORY */ -extern void bash_initialize_history PARAMS((void)); -extern void bash_history_reinit PARAMS((int)); -extern void bash_history_disable PARAMS((void)); -extern void bash_history_enable PARAMS((void)); -extern void bash_clear_history PARAMS((void)); -extern int bash_delete_histent PARAMS((int)); -extern int bash_delete_history_range PARAMS((int, int)); -extern int bash_delete_last_history PARAMS((void)); -extern void load_history PARAMS((void)); -extern void save_history PARAMS((void)); -extern int maybe_append_history PARAMS((char *)); -extern int maybe_save_shell_history PARAMS((void)); -extern char *pre_process_line PARAMS((char *, int, int)); -extern void maybe_add_history PARAMS((char *)); -extern void bash_add_history PARAMS((char *)); -extern int check_add_history PARAMS((char *, int)); -extern int history_number PARAMS((void)); - -extern void setup_history_ignore PARAMS((char *)); - -extern char *last_history_line PARAMS((void)); +extern void bash_initialize_history (void); +extern void bash_history_reinit (int); +extern void bash_history_disable (void); +extern void bash_history_enable (void); +extern void bash_clear_history (void); +extern int bash_delete_histent (int); +extern int bash_delete_history_range (int, int); +extern int bash_delete_last_history (void); +extern void load_history (void); +extern void save_history (void); +extern char *bash_default_histfile (void); +extern int maybe_append_history (char *); +extern int maybe_save_shell_history (void); +extern char *pre_process_line (char *, int, int); +extern void maybe_add_history (char *); +extern void bash_add_history (char *); +extern int check_add_history (char *, int); +extern int history_number (void); + +extern void setup_history_ignore (const char *); + +extern char *last_history_line (void); #endif /* _BASHHIST_H_ */ diff --git a/bashline.c b/bashline.c index c85b05b69..eedb09ffe 100644 --- a/bashline.c +++ b/bashline.c @@ -1,6 +1,6 @@ /* bashline.c -- Bash's interface to the readline library. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -104,126 +104,127 @@ #define RL_BOOLEAN_VARIABLE_VALUE(s) ((s)[0] == 'o' && (s)[1] == 'n' && (s)[2] == '\0') #if defined (BRACE_COMPLETION) -extern int bash_brace_completion PARAMS((int, int)); +extern int bash_brace_completion (int, int); #endif /* BRACE_COMPLETION */ /* To avoid including curses.h/term.h/termcap.h and that whole mess. */ #ifdef _MINIX -extern int tputs PARAMS((const char *string, int nlines, void (*outx)(int))); +extern int tputs (const char *string, int nlines, void (*outx)(int)); #else -extern int tputs PARAMS((const char *string, int nlines, int (*outx)(int))); +extern int tputs (const char *string, int nlines, int (*outx)(int)); #endif /* Forward declarations */ /* Functions bound to keys in Readline for Bash users. */ -static int shell_expand_line PARAMS((int, int)); -static int display_shell_version PARAMS((int, int)); +static int shell_expand_line (int, int); +static int display_shell_version (int, int); -static int bash_ignore_filenames PARAMS((char **)); -static int bash_ignore_everything PARAMS((char **)); -static int bash_progcomp_ignore_filenames PARAMS((char **)); +static int bash_ignore_filenames (char **); +static int bash_ignore_everything (char **); +static int bash_progcomp_ignore_filenames (char **); #if defined (BANG_HISTORY) -static char *history_expand_line_internal PARAMS((char *)); -static int history_expand_line PARAMS((int, int)); -static int tcsh_magic_space PARAMS((int, int)); +static char *history_expand_line_internal (char *); +static int history_expand_line (int, int); +static int tcsh_magic_space (int, int); #endif /* BANG_HISTORY */ #ifdef ALIAS -static int alias_expand_line PARAMS((int, int)); +static int alias_expand_line (int, int); #endif #if defined (BANG_HISTORY) && defined (ALIAS) -static int history_and_alias_expand_line PARAMS((int, int)); +static int history_and_alias_expand_line (int, int); #endif -static int bash_forward_shellword PARAMS((int, int)); -static int bash_backward_shellword PARAMS((int, int)); -static int bash_kill_shellword PARAMS((int, int)); -static int bash_backward_kill_shellword PARAMS((int, int)); -static int bash_transpose_shellwords PARAMS((int, int)); +static int bash_forward_shellword (int, int); +static int bash_backward_shellword (int, int); +static int bash_kill_shellword (int, int); +static int bash_backward_kill_shellword (int, int); +static int bash_transpose_shellwords (int, int); -static int bash_spell_correct_shellword PARAMS((int, int)); +static int bash_spell_correct_shellword (int, int); /* Helper functions for Readline. */ -static char *restore_tilde PARAMS((char *, char *)); -static char *maybe_restore_tilde PARAMS((char *, char *)); - -static char *bash_filename_rewrite_hook PARAMS((char *, int)); - -static void bash_directory_expansion PARAMS((char **)); -static int bash_filename_stat_hook PARAMS((char **)); -static int bash_command_name_stat_hook PARAMS((char **)); -static int bash_directory_completion_hook PARAMS((char **)); -static int filename_completion_ignore PARAMS((char **)); -static int bash_push_line PARAMS((void)); - -static int executable_completion PARAMS((const char *, int)); - -static rl_icppfunc_t *save_directory_hook PARAMS((void)); -static void restore_directory_hook PARAMS((rl_icppfunc_t)); - -static int directory_exists PARAMS((const char *, int)); - -static void cleanup_expansion_error PARAMS((void)); -static void maybe_make_readline_line PARAMS((char *)); -static void set_up_new_line PARAMS((char *)); - -static int check_redir PARAMS((int)); -static char **attempt_shell_completion PARAMS((const char *, int, int)); -static char *variable_completion_function PARAMS((const char *, int)); -static char *hostname_completion_function PARAMS((const char *, int)); -static char *command_subst_completion_function PARAMS((const char *, int)); - -static void build_history_completion_array PARAMS((void)); -static char *history_completion_generator PARAMS((const char *, int)); -static int dynamic_complete_history PARAMS((int, int)); -static int bash_dabbrev_expand PARAMS((int, int)); - -static void initialize_hostname_list PARAMS((void)); -static void add_host_name PARAMS((char *)); -static void snarf_hosts_from_file PARAMS((char *)); -static char **hostnames_matching PARAMS((char *)); - -static void _ignore_completion_names PARAMS((char **, sh_ignore_func_t *)); -static int name_is_acceptable PARAMS((const char *)); -static int test_for_directory PARAMS((const char *)); -static int test_for_canon_directory PARAMS((const char *)); -static int return_zero PARAMS((const char *)); - -static char *bash_dequote_filename PARAMS((char *, int)); -static char *quote_word_break_chars PARAMS((char *)); -static int bash_check_expchar PARAMS((char *, int, int *, int *)); -static void set_filename_quote_chars PARAMS((int, int, int)); -static void set_filename_bstab PARAMS((const char *)); -static char *bash_quote_filename PARAMS((char *, int, char *)); +static char *restore_tilde (const char *, char *); +static char *maybe_restore_tilde (char *, char *); + +static char *bash_filename_rewrite_hook (char *, int); + +static void bash_directory_expansion (char **); +static char *bash_expand_filename (char *); +static int bash_filename_stat_hook (char **); +static int bash_command_name_stat_hook (char **); +static int bash_directory_completion_hook (char **); +static int filename_completion_ignore (char **); +static int bash_push_line (void); + +static int executable_completion (const char *, int); + +static rl_icppfunc_t *save_directory_hook (void); +static void restore_directory_hook (rl_icppfunc_t); + +static int directory_exists (const char *, int); + +static void cleanup_expansion_error (void); +static void maybe_make_readline_line (const char *); +static void set_up_new_line (char *); + +static int check_redir (int); +static char **attempt_shell_completion (const char *, int, int); +static char *variable_completion_function (const char *, int); +static char *hostname_completion_function (const char *, int); +static char *command_subst_completion_function (const char *, int); + +static void build_history_completion_array (void); +static char *history_completion_generator (const char *, int); +static int dynamic_complete_history (int, int); +static int bash_dabbrev_expand (int, int); + +static void initialize_hostname_list (void); +static void add_host_name (const char *); +static void snarf_hosts_from_file (const char *); +static char **hostnames_matching (const char *); + +static void _ignore_completion_names (char **, sh_ignore_func_t *); +static int name_is_acceptable (const char *); +static int test_for_directory (const char *); +static int test_for_canon_directory (const char *); +static int return_zero (const char *); + +static char *bash_dequote_filename (char *, int); +static char *quote_word_break_chars (char *); +static int bash_check_expchar (char *, int, int *, int *); +static void set_filename_quote_chars (int, int, int); +static void set_filename_bstab (const char *); +static char *bash_quote_filename (char *, int, char *); #ifdef _MINIX -static void putx PARAMS((int)); +static void putx (int); #else -static int putx PARAMS((int)); +static int putx (int); #endif -static int readline_get_char_offset PARAMS((int)); -static void readline_set_char_offset PARAMS((int, int *)); +static int readline_get_char_offset (int); +static void readline_set_char_offset (int, int *); -static Keymap get_cmd_xmap_from_edit_mode PARAMS((void)); -static Keymap get_cmd_xmap_from_keymap PARAMS((Keymap)); +static Keymap get_cmd_xmap_from_edit_mode (void); +static Keymap get_cmd_xmap_from_keymap (Keymap); -static void init_unix_command_map PARAMS((void)); -static int isolate_sequence PARAMS((char *, int, int, int *)); +static void init_unix_command_map (void); +static int isolate_sequence (char *, int, int, int *); -static int set_saved_history PARAMS((void)); +static int set_saved_history (void); #if defined (ALIAS) -static int posix_edit_macros PARAMS((int, int)); +static int posix_edit_macros (int, int); #endif -static int bash_event_hook PARAMS((void)); +static int bash_event_hook (void); #if defined (PROGRAMMABLE_COMPLETION) -static int find_cmd_start PARAMS((int)); -static int find_cmd_end PARAMS((int)); -static char *find_cmd_name PARAMS((int, int *, int *)); -static char *prog_complete_return PARAMS((const char *, int)); +static int find_cmd_start (int); +static int find_cmd_end (int); +static char *find_cmd_name (int, int *, int *); +static char *prog_complete_return (const char *, int); static char **prog_complete_matches; #endif @@ -239,40 +240,40 @@ extern sh_timer *read_timeout; #define SPECIFIC_COMPLETION_FUNCTIONS #if defined (SPECIFIC_COMPLETION_FUNCTIONS) -static int bash_specific_completion PARAMS((int, rl_compentry_func_t *)); - -static int bash_complete_filename_internal PARAMS((int)); -static int bash_complete_username_internal PARAMS((int)); -static int bash_complete_hostname_internal PARAMS((int)); -static int bash_complete_variable_internal PARAMS((int)); -static int bash_complete_command_internal PARAMS((int)); - -static int bash_complete_filename PARAMS((int, int)); -static int bash_possible_filename_completions PARAMS((int, int)); -static int bash_complete_username PARAMS((int, int)); -static int bash_possible_username_completions PARAMS((int, int)); -static int bash_complete_hostname PARAMS((int, int)); -static int bash_possible_hostname_completions PARAMS((int, int)); -static int bash_complete_variable PARAMS((int, int)); -static int bash_possible_variable_completions PARAMS((int, int)); -static int bash_complete_command PARAMS((int, int)); -static int bash_possible_command_completions PARAMS((int, int)); - -static int completion_glob_pattern PARAMS((char *)); -static char *glob_complete_word PARAMS((const char *, int)); -static int bash_glob_completion_internal PARAMS((int)); -static int bash_glob_complete_word PARAMS((int, int)); -static int bash_glob_expand_word PARAMS((int, int)); -static int bash_glob_list_expansions PARAMS((int, int)); +static int bash_specific_completion (int, rl_compentry_func_t *); + +static int bash_complete_filename_internal (int); +static int bash_complete_username_internal (int); +static int bash_complete_hostname_internal (int); +static int bash_complete_variable_internal (int); +static int bash_complete_command_internal (int); + +static int bash_complete_filename (int, int); +static int bash_possible_filename_completions (int, int); +static int bash_complete_username (int, int); +static int bash_possible_username_completions (int, int); +static int bash_complete_hostname (int, int); +static int bash_possible_hostname_completions (int, int); +static int bash_complete_variable (int, int); +static int bash_possible_variable_completions (int, int); +static int bash_complete_command (int, int); +static int bash_possible_command_completions (int, int); + +static int completion_glob_pattern (const char *); +static char *glob_complete_word (const char *, int); +static int bash_glob_completion_internal (int); +static int bash_glob_complete_word (int, int); +static int bash_glob_expand_word (int, int); +static int bash_glob_list_expansions (int, int); #endif /* SPECIFIC_COMPLETION_FUNCTIONS */ -static int edit_and_execute_command PARAMS((int, int, int, char *)); +static int edit_and_execute_command (int, int, int, const char *); #if defined (VI_MODE) -static int vi_edit_and_execute_command PARAMS((int, int)); -static int bash_vi_complete PARAMS((int, int)); +static int vi_edit_and_execute_command (int, int); +static int bash_vi_complete (int, int); #endif -static int emacs_edit_and_execute_command PARAMS((int, int)); +static int emacs_edit_and_execute_command (int, int); /* Non-zero once initialize_readline () has been called. */ int bash_readline_initialized = 0; @@ -328,10 +329,13 @@ static int dabbrev_expand_active = 0; COMPLETE_DQUOTE = double-quoting the filename COMPLETE_SQUOTE = single_quoting the filename COMPLETE_BSQUOTE = backslash-quoting special chars in the filename + COMPLETE_DQUOTE2 = double-quote filename, but leave $ and ` unquoted */ #define COMPLETE_DQUOTE 1 #define COMPLETE_SQUOTE 2 #define COMPLETE_BSQUOTE 3 +#define COMPLETE_DQUOTE2 4 + static int completion_quoting_style = COMPLETE_BSQUOTE; /* Flag values for the final argument to bash_default_completion */ @@ -342,8 +346,7 @@ static rl_command_func_t *vi_tab_binding = rl_complete; /* Change the readline VI-mode keymaps into or out of Posix.2 compliance. Called when the shell is put into or out of `posix' mode. */ void -posix_readline_initialize (on_or_off) - int on_or_off; +posix_readline_initialize (int on_or_off) { static char kseq[2] = { CTRL ('I'), 0 }; /* TAB */ @@ -364,7 +367,7 @@ posix_readline_initialize (on_or_off) } void -reset_completer_word_break_chars () +reset_completer_word_break_chars (void) { rl_completer_word_break_characters = perform_hostname_completion ? savestring (bash_completer_word_break_characters) : savestring (bash_nohostname_word_break_characters); } @@ -372,8 +375,7 @@ reset_completer_word_break_chars () /* When this function returns, rl_completer_word_break_characters points to dynamically allocated memory. */ int -enable_hostname_completion (on_or_off) - int on_or_off; +enable_hostname_completion (int on_or_off) { int old_value; char *nv, *nval; @@ -446,7 +448,7 @@ enable_hostname_completion (on_or_off) /* Called once from parse.y if we are going to use readline. */ void -initialize_readline () +initialize_readline (void) { rl_command_func_t *func; char kseq[2]; @@ -591,13 +593,7 @@ initialize_readline () /* Tell the completer that we want a crack first. */ rl_attempted_completion_function = attempt_shell_completion; - /* Tell the completer that we might want to follow symbolic links or - do other expansion on directory names. */ - set_directory_hook (); - - rl_filename_rewrite_hook = bash_filename_rewrite_hook; - - rl_filename_stat_hook = bash_filename_stat_hook; + bashline_set_filename_hooks (); /* Tell the filename completer we want a chance to ignore some names. */ rl_ignore_some_completions_function = filename_completion_ignore; @@ -610,6 +606,7 @@ initialize_readline () rl_bind_key_if_unbound_in_map ('@', posix_edit_macros, vi_movement_keymap); # endif + rl_add_defun ("bash-vi-complete", bash_vi_complete, -1); rl_bind_key_in_map ('\\', bash_vi_complete, vi_movement_keymap); rl_bind_key_in_map ('*', bash_vi_complete, vi_movement_keymap); rl_bind_key_in_map ('=', bash_vi_complete, vi_movement_keymap); @@ -650,19 +647,19 @@ initialize_readline () } void -bashline_reinitialize () +bashline_reinitialize (void) { bash_readline_initialized = 0; } void -bashline_set_event_hook () +bashline_set_event_hook (void) { rl_signal_event_hook = bash_event_hook; } void -bashline_reset_event_hook () +bashline_reset_event_hook (void) { rl_signal_event_hook = 0; } @@ -673,7 +670,7 @@ bashline_reset_event_hook () word. This just resets all the completion functions to the right thing. It's called from throw_to_top_level(). */ void -bashline_reset () +bashline_reset (void) { tilde_initialize (); rl_attempted_completion_function = attempt_shell_completion; @@ -684,8 +681,9 @@ bashline_reset () rl_filename_quote_characters = default_filename_quote_characters; set_filename_bstab (rl_filename_quote_characters); - set_directory_hook (); - rl_filename_stat_hook = bash_filename_stat_hook; + rl_filename_quoting_function = bash_quote_filename; + + bashline_set_filename_hooks (); bashline_reset_event_hook (); @@ -698,7 +696,7 @@ static char *push_to_readline = (char *)NULL; /* Push the contents of push_to_readline into the readline buffer. */ static int -bash_push_line () +bash_push_line (void) { if (push_to_readline) { @@ -713,8 +711,7 @@ bash_push_line () /* Call this to set the initial text for the next line to read from readline. */ int -bash_re_edit (line) - char *line; +bash_re_edit (const char *line) { FREE (push_to_readline); @@ -726,8 +723,7 @@ bash_re_edit (line) } static int -display_shell_version (count, c) - int count, c; +display_shell_version (int count, int c) { rl_crlf (); show_shell_version (0); @@ -753,17 +749,17 @@ display_shell_version (count, c) static char **hostname_list = (char **)NULL; /* The physical size of the above list. */ -static int hostname_list_size; +static size_t hostname_list_size; /* The number of hostnames in the above list. */ -static int hostname_list_length; +static size_t hostname_list_length; /* Whether or not HOSTNAME_LIST has been initialized. */ int hostname_list_initialized = 0; /* Initialize the hostname completion table. */ static void -initialize_hostname_list () +initialize_hostname_list (void) { char *temp; @@ -781,8 +777,7 @@ initialize_hostname_list () /* Add NAME to the list of hosts. */ static void -add_host_name (name) - char *name; +add_host_name (const char *name) { if (hostname_list_length + 2 > hostname_list_size) { @@ -797,14 +792,17 @@ add_host_name (name) #define cr_whitespace(c) ((c) == '\r' || (c) == '\n' || whitespace(c)) static void -snarf_hosts_from_file (filename) - char *filename; +snarf_hosts_from_file (const char *filename) { FILE *file; char *temp, buffer[256], name[256]; register int i, start; +#ifdef __MSYS__ + file = fopen (filename, "rt"); +#else file = fopen (filename, "r"); +#endif if (file == 0) return; @@ -864,7 +862,7 @@ snarf_hosts_from_file (filename) /* Return the hostname list. */ char ** -get_hostname_list () +get_hostname_list (void) { if (hostname_list_initialized == 0) initialize_hostname_list (); @@ -872,7 +870,7 @@ get_hostname_list () } void -clear_hostname_list () +clear_hostname_list (void) { register int i; @@ -887,11 +885,11 @@ clear_hostname_list () Initialize the hostname list the first time if necessary. The array is malloc ()'ed, but not the individual strings. */ static char ** -hostnames_matching (text) - char *text; +hostnames_matching (const char *text) { - register int i, len, nmatch, rsize; + int i, nmatch; char **result; + size_t rsize, len; if (hostname_list_initialized == 0) initialize_hostname_list (); @@ -919,7 +917,7 @@ hostnames_matching (text) continue; /* OK, it matches. Add it to the list. */ - if (nmatch >= (rsize - 1)) + if (nmatch + 1 >= rsize) { rsize = (rsize + 16) - (rsize % 16); result = strvec_resize (result, rsize); @@ -941,9 +939,7 @@ hostnames_matching (text) #define POSIX_VI_EDIT_COMMAND "fc -e vi" static int -edit_and_execute_command (count, c, editing_mode, edit_command) - int count, c, editing_mode; - char *edit_command; +edit_and_execute_command (int count, int c, int editing_mode, const char *edit_command) { char *command, *metaval; int r, rrs, metaflag; @@ -957,8 +953,11 @@ edit_and_execute_command (count, c, editing_mode, edit_command) if (rl_explicit_arg) { - command = (char *)xmalloc (strlen (edit_command) + 8); - sprintf (command, "%s %d", edit_command, count); + size_t clen; + /* 32 exceeds strlen (itos (INTMAX_MAX)) (19) */ + clen = strlen (edit_command) + 32; + command = (char *)xmalloc (clen); + snprintf (command, clen, "%s %d", edit_command, count); } else { @@ -1017,27 +1016,24 @@ edit_and_execute_command (count, c, editing_mode, edit_command) #if defined (VI_MODE) static int -vi_edit_and_execute_command (count, c) - int count, c; +vi_edit_and_execute_command (int count, int key) { if (posixly_correct) - return (edit_and_execute_command (count, c, VI_EDITING_MODE, POSIX_VI_EDIT_COMMAND)); + return (edit_and_execute_command (count, key, VI_EDITING_MODE, POSIX_VI_EDIT_COMMAND)); else - return (edit_and_execute_command (count, c, VI_EDITING_MODE, VI_EDIT_COMMAND)); + return (edit_and_execute_command (count, key, VI_EDITING_MODE, VI_EDIT_COMMAND)); } #endif /* VI_MODE */ static int -emacs_edit_and_execute_command (count, c) - int count, c; +emacs_edit_and_execute_command (int count, int key) { - return (edit_and_execute_command (count, c, EMACS_EDITING_MODE, EMACS_EDIT_COMMAND)); + return (edit_and_execute_command (count, key, EMACS_EDITING_MODE, EMACS_EDIT_COMMAND)); } #if defined (ALIAS) static int -posix_edit_macros (count, key) - int count, key; +posix_edit_macros (int count, int key) { int c; char alias_name[3], *alias_value, *macro; @@ -1065,8 +1061,7 @@ posix_edit_macros (count, key) #define WORDDELIM(c) (shellmeta(c) || shellblank(c)) static int -bash_forward_shellword (count, key) - int count, key; +bash_forward_shellword (int count, int key) { size_t slen; int c, p; @@ -1174,8 +1169,7 @@ bash_forward_shellword (count, key) } static int -bash_backward_shellword (count, key) - int count, key; +bash_backward_shellword (int count, int key) { size_t slen; int c, p, prev_p; @@ -1236,8 +1230,7 @@ bash_backward_shellword (count, key) } static int -bash_kill_shellword (count, key) - int count, key; +bash_kill_shellword (int count, int key) { int p; @@ -1258,8 +1251,7 @@ bash_kill_shellword (count, key) } static int -bash_backward_kill_shellword (count, key) - int count, key; +bash_backward_kill_shellword (int count, int key) { int p; @@ -1279,8 +1271,7 @@ bash_backward_kill_shellword (count, key) } static int -bash_transpose_shellwords (count, key) - int count, key; +bash_transpose_shellwords (int count, int key) { char *word1, *word2; int w1_beg, w1_end, w2_beg, w2_end; @@ -1340,13 +1331,11 @@ bash_transpose_shellwords (count, key) /* Directory name spelling correction on the current word (not shellword). COUNT > 1 is not exactly correct yet. */ static int -bash_spell_correct_shellword (count, key) - int count, key; +bash_spell_correct_shellword (int count, int key) { - int opoint, wbeg, wend; + int wbeg, wend; char *text, *newdir; - opoint = rl_point; while (count) { bash_backward_shellword (1, key); @@ -1358,6 +1347,8 @@ bash_spell_correct_shellword (count, key) break; text = rl_copy_text (wbeg, wend); + if (text == 0 || *text == 0) + break; newdir = dirspell (text); if (newdir) @@ -1399,21 +1390,21 @@ bash_spell_correct_shellword (count, key) /* check for redirections and other character combinations that are not command separators */ -static int -check_redir (ti) - int ti; +static inline int +check_redir (int ti) { - register int this_char, prev_char; + int this_char, prev_char, next_char; /* Handle the two character tokens `>&', `<&', and `>|'. We are not in a command position after one of these. */ this_char = rl_line_buffer[ti]; prev_char = (ti > 0) ? rl_line_buffer[ti - 1] : 0; + next_char = (ti < rl_end) ? rl_line_buffer[ti + 1] : 0; if ((this_char == '&' && (prev_char == '<' || prev_char == '>')) || (this_char == '|' && prev_char == '>')) return (1); - else if (this_char == '{' && prev_char == '$') /*}*/ + else if (this_char == '{' && prev_char == '$' && FUNSUB_CHAR (next_char) == 0) /*}*/ return (1); #if 0 /* Not yet */ else if (this_char == '(' && prev_char == '$') /*)*/ @@ -1437,8 +1428,7 @@ check_redir (ti) * happen, but fix later after 2.05a-release. */ static int -find_cmd_start (start) - int start; +find_cmd_start (int start) { register int s, os, ns; @@ -1486,8 +1476,7 @@ find_cmd_start (start) } static int -find_cmd_end (end) - int end; +find_cmd_end (int end) { register int e; @@ -1496,9 +1485,7 @@ find_cmd_end (end) } static char * -find_cmd_name (start, sp, ep) - int start; - int *sp, *ep; +find_cmd_name (int start, int *sp, int *ep) { char *name; register int s, e; @@ -1520,9 +1507,7 @@ find_cmd_name (start, sp, ep) } static char * -prog_complete_return (text, matchnum) - const char *text; - int matchnum; +prog_complete_return (const char *text, int matchnum) { static int ind; @@ -1539,9 +1524,7 @@ prog_complete_return (text, matchnum) /* Try and catch completion attempts that are syntax errors or otherwise invalid. */ static int -invalid_completion (text, ind) - const char *text; - int ind; +invalid_completion (const char *text, int ind) { int pind; @@ -1567,9 +1550,7 @@ invalid_completion (text, ind) /* Do some completion on TEXT. The indices of TEXT in RL_LINE_BUFFER are at START and END. Return an array of matches, or NULL if none. */ static char ** -attempt_shell_completion (text, start, end) - const char *text; - int start, end; +attempt_shell_completion (const char *text, int start, int end) { int in_command_position, ti, qc, dflags; char **matches, *command_separator_chars; @@ -1585,8 +1566,7 @@ attempt_shell_completion (text, start, end) complete_fullquote = 1; /* full filename quoting by default */ rl_filename_quote_characters = default_filename_quote_characters; set_filename_bstab (rl_filename_quote_characters); - set_directory_hook (); - rl_filename_stat_hook = bash_filename_stat_hook; + bashline_set_filename_hooks (); rl_sort_completion_matches = 1; /* sort by default */ @@ -1693,6 +1673,10 @@ attempt_shell_completion (text, start, end) s1 = s = e1; break; } + else if (s > e) + { + s = s1 = start; e = e1 = end; /* reset */ + } /* Skip over assignment statements preceding a command name. If we don't find a command name at all, we can perform command name completion. If we find a partial command name, we should perform @@ -1712,10 +1696,12 @@ attempt_shell_completion (text, start, end) end == index of where word to be completed ends if (s == start) we are doing command word completion for sure if (e1 == end) we are at the end of the command name and completing it */ - if (start == 0 && end == 0 && e != 0 && text[0] == '\0') /* beginning of non-empty line */ + if (start == 0 && end == 0 && e != 0 && e1 < rl_end && text[0] == '\0') /* beginning of non-empty line */ foundcs = 0; else if (start == end && start == s1 && e != 0 && e1 > end) /* beginning of command name, leading whitespace */ foundcs = 0; + else if (start == 0 && start == end && start < s1 && e != 0 && e1 > end && text[0] == '\0' && have_progcomps) /* no command name, leading whitespace only */ + prog_complete_matches = programmable_completions (EMPTYCMD, text, s, e, &foundcs); else if (e == 0 && e == s && text[0] == '\0' && have_progcomps) /* beginning of empty line */ prog_complete_matches = programmable_completions (EMPTYCMD, text, s, e, &foundcs); else if (start == end && text[0] == '\0' && s1 > start && whitespace (rl_line_buffer[start])) @@ -1759,7 +1745,14 @@ attempt_shell_completion (text, start, end) /* If we have defined a compspec for the initial (command) word, call it and process the results like any other programmable completion. */ if (in_command_position && have_progcomps && foundcs == 0 && iw_compspec) - prog_complete_matches = programmable_completions (INITIALWORD, text, s, e, &foundcs); + { + /* Do some sanity checking on S and E. Room for more here. */ + if (s > rl_point) + s = rl_point; + if (e > rl_end) + e = rl_end; + prog_complete_matches = programmable_completions (INITIALWORD, text, s, e, &foundcs); + } FREE (n); /* XXX - if we found a COMPSPEC for the command, just return whatever @@ -1794,9 +1787,7 @@ attempt_shell_completion (text, start, end) } char ** -bash_default_completion (text, start, end, qc, compflags) - const char *text; - int start, end, qc, compflags; +bash_default_completion (const char *text, int start, int end, int qc, int compflags) { char **matches, *t; @@ -1807,6 +1798,8 @@ bash_default_completion (text, start, end, qc, compflags) { if (qc != '\'' && text[1] == '(') /* ) */ matches = rl_completion_matches (text, command_subst_completion_function); + else if (qc != '\'' && text[1] == '{' && FUNSUB_CHAR (text[2])) /* } */ + matches = rl_completion_matches (text, command_subst_completion_function); else { matches = rl_completion_matches (text, variable_completion_function); @@ -1873,7 +1866,12 @@ bash_default_completion (text, start, end, qc, compflags) rl_completion_suppress_append = 1; rl_filename_completion_desired = 0; } +#if 1 + else if (matches[0] && matches[1] && STREQ (matches[0], matches[1]) && + matches[2] && STREQ (matches[1], matches[2]) && CMD_IS_DIR (matches[0])) +#else else if (matches[0] && matches[1] && STREQ (matches[0], matches[1]) && CMD_IS_DIR (matches[0])) +#endif /* There are multiple instances of the same match (duplicate completions haven't yet been removed). In this case, all of the matches will be the same, and the duplicate removal code @@ -1891,7 +1889,7 @@ bash_default_completion (text, start, end, qc, compflags) /* This could be a globbing pattern, so try to expand it using pathname expansion. */ - if (!matches && completion_glob_pattern ((char *)text)) + if (!matches && completion_glob_pattern (text)) { matches = rl_completion_matches (text, glob_complete_word); /* A glob expression that matches more than one filename is problematic. @@ -1912,8 +1910,7 @@ bash_default_completion (text, start, end, qc, compflags) } static int -bash_command_name_stat_hook (name) - char **name; +bash_command_name_stat_hook (char **name) { char *cname, *result; @@ -1928,6 +1925,7 @@ bash_command_name_stat_hook (name) result = search_for_command (cname, 0); if (result) { + FREE (*name); *name = result; return 1; } @@ -1935,21 +1933,15 @@ bash_command_name_stat_hook (name) } static int -executable_completion (filename, searching_path) - const char *filename; - int searching_path; +executable_completion (const char *filename, int searching_path) { char *f, c; int r; /* This gets an unquoted filename, so we need to quote special characters in the filename before the completion hook gets it. */ -#if 0 - f = savestring (filename); -#else c = 0; f = bash_quote_filename ((char *)filename, SINGLE_MATCH, &c); -#endif bash_directory_completion_hook (&f); r = searching_path ? executable_file (f) : executable_or_directory (f); @@ -1962,9 +1954,7 @@ executable_completion (filename, searching_path) that match. It also scans aliases, function names, and the shell_builtin table. */ char * -command_word_completion_function (hint_text, state) - const char *hint_text; - int state; +command_word_completion_function (const char *hint_text, int state) { static char *hint = (char *)NULL; static char *path = (char *)NULL; @@ -1974,7 +1964,8 @@ command_word_completion_function (hint_text, state) static char *dequoted_hint = (char *)NULL; static char *directory_part = (char *)NULL; static char **glob_matches = (char **)NULL; - static int path_index, hint_len, istate, igncase; + static int path_index, istate, igncase; + static size_t hint_len; static int mapping_over, local_index, searching_path, hint_is_dir; static int old_glob_ignore_case, globpat; static SHELL_VAR **varlist = (SHELL_VAR **)NULL; @@ -1993,6 +1984,7 @@ command_word_completion_function (hint_text, state) free (dequoted_hint); if (hint) free (hint); + dequoted_hint = hint = (char *)NULL; mapping_over = searching_path = 0; hint_is_dir = CMD_IS_DIR (hint_text); @@ -2009,7 +2001,7 @@ command_word_completion_function (hint_text, state) glob_matches = (char **)NULL; } - globpat = completion_glob_pattern ((char *)hint_text); + globpat = completion_glob_pattern (hint_text); /* If this is an absolute program name, do not check it against aliases, reserved words, functions or builtins. We must check @@ -2087,7 +2079,7 @@ command_word_completion_function (hint_text, state) if (rl_completion_found_quote && rl_completion_quote_character == 0) dequoted_hint = bash_dequote_filename (hint, 0); - path = get_string_value ("PATH"); + path = path_value ("PATH", 0); path_index = dot_in_path = 0; /* Initialize the variables for each type of command word. */ @@ -2203,7 +2195,11 @@ globword: local_index = 0; if (glob_matches[1] && rl_completion_type == TAB) /* multiple matches are bad */ - return ((char *)NULL); + { + strvec_dispose (glob_matches); + glob_matches = (char **)NULL; + return ((char *)NULL); + } } while (val = glob_matches[local_index++]) @@ -2275,6 +2271,7 @@ globword: free (fnhint); if (filename_hint) free (filename_hint); + fnhint = filename_hint = (char *)NULL; filename_hint = sh_makepath (current_path, hint, 0); /* Need a quoted version (though it doesn't matter much in most @@ -2370,6 +2367,7 @@ globword: t1 = make_absolute (val, t); free (t); cval = sh_canonpath (t1, PATH_CHECKDOTDOT|PATH_CHECKEXISTS); + free (t1); } else #endif @@ -2397,9 +2395,7 @@ globword: /* Completion inside an unterminated command substitution. */ static char * -command_subst_completion_function (text, state) - const char *text; - int state; +command_subst_completion_function (const char *text, int state) { static char **matches = (char **)NULL; static const char *orig_start; @@ -2416,13 +2412,18 @@ command_subst_completion_function (text, state) text++; else if (*text == '$' && text[1] == '(') /* ) */ text += 2; + else if (*text == '$' && text[1] == '{' && FUNSUB_CHAR (text[2])) /*}*/ + text += 3; /* nofork command substitution */ /* If the text was quoted, suppress any quote character that the readline completion code would insert. */ rl_completion_suppress_quote = 1; start_len = text - orig_start; filename_text = savestring (text); if (matches) - free (matches); + { + free (matches); + matches = (char **)NULL; + } /* * At this point we can entertain the idea of re-parsing @@ -2480,9 +2481,7 @@ command_subst_completion_function (text, state) /* Okay, now we write the entry_function for variable completion. */ static char * -variable_completion_function (text, state) - const char *text; - int state; +variable_completion_function (const char *text, int state) { static char **varlist = (char **)NULL; static int varlist_index; @@ -2540,9 +2539,7 @@ variable_completion_function (text, state) /* How about a completion function for hostnames? */ static char * -hostname_completion_function (text, state) - const char *text; - int state; +hostname_completion_function (const char *text, int state) { static char **list = (char **)NULL; static int list_index = 0; @@ -2583,16 +2580,14 @@ hostname_completion_function (text, state) * A completion function for service names from /etc/services (or wherever). */ char * -bash_servicename_completion_function (text, state) - const char *text; - int state; +bash_servicename_completion_function (const char *text, int state) { #if defined (__WIN32__) || defined (__OPENNT) || !defined (HAVE_GETSERVENT) return ((char *)NULL); #else static char *sname = (char *)NULL; static struct servent *srvent; - static int snamelen; + static size_t snamelen; char *value; char **alist, *aentry; int afound; @@ -2641,16 +2636,14 @@ bash_servicename_completion_function (text, state) * A completion function for group names from /etc/group (or wherever). */ char * -bash_groupname_completion_function (text, state) - const char *text; - int state; +bash_groupname_completion_function (const char *text, int state) { #if defined (__WIN32__) || defined (__OPENNT) || !defined (HAVE_GRP_H) return ((char *)NULL); #else static char *gname = (char *)NULL; static struct group *grent; - static int gnamelen; + static size_t gnamelen; char *value; if (state == 0) @@ -2686,8 +2679,7 @@ bash_groupname_completion_function (text, state) is done, pre_process_line() returns what it was passed, so we need to allocate a new line here. */ static char * -history_expand_line_internal (line) - char *line; +history_expand_line_internal (char *line) { char *new_line; int old_verify; @@ -2704,7 +2696,7 @@ history_expand_line_internal (line) /* There was an error in expansion. Let the preprocessor print the error here. */ static void -cleanup_expansion_error () +cleanup_expansion_error (void) { char *to_free; #if defined (BANG_HISTORY) @@ -2729,8 +2721,7 @@ cleanup_expansion_error () undo record to get from the readline line buffer contents to the new line and make NEW_LINE the current readline line. */ static void -maybe_make_readline_line (new_line) - char *new_line; +maybe_make_readline_line (const char *new_line) { if (new_line && strcmp (new_line, rl_line_buffer) != 0) { @@ -2744,15 +2735,27 @@ maybe_make_readline_line (new_line) } } -/* Make NEW_LINE be the current readline line. This frees NEW_LINE. */ +/* Make NEW_LINE be the current readline line. This frees NEW_LINE. We use + several heuristics to decide where to put rl_point. */ + static void -set_up_new_line (new_line) - char *new_line; +set_up_new_line (char *new_line) { - int old_point, at_end; + + int old_point, old_end, dist, nb; + char *s, *t; + + /* If we didn't expand anything, don't change anything. */ + if (STREQ (new_line, rl_line_buffer)) + { + free (new_line); + return; + } old_point = rl_point; - at_end = rl_point == rl_end; + old_end = rl_end; + dist = rl_end - rl_point; + nb = rl_end - old_end; /* If the line was history and alias expanded, then make that be one thing to undo. */ @@ -2760,21 +2763,37 @@ set_up_new_line (new_line) free (new_line); /* Place rl_point where we think it should go. */ - if (at_end) + if (dist == 0) rl_point = rl_end; - else if (old_point < rl_end) + else if (old_point == 0) + { + /* this is what the old code did, but separate it out so we can treat + it differently */ + rl_point = 0; + if (!whitespace (rl_line_buffer[rl_point])) + rl_forward_word (1, 0); + } + else if (rl_point < old_point+nb) { + /* let's assume that this means the new point is within the changed region */ rl_point = old_point; if (!whitespace (rl_line_buffer[rl_point])) rl_forward_word (1, 0); } + else + rl_point = rl_end - dist; /* try to put point the same distance from end */ + + if (rl_point < 0) + rl_point = 0; + else if (rl_point > rl_end) + rl_point = rl_end; + rl_mark = 0; /* XXX */ } #if defined (ALIAS) /* Expand aliases in the current readline line. */ static int -alias_expand_line (count, ignore) - int count, ignore; +alias_expand_line (int count, int ignore) { char *new_line; @@ -2796,8 +2815,7 @@ alias_expand_line (count, ignore) #if defined (BANG_HISTORY) /* History expand the line. */ static int -history_expand_line (count, ignore) - int count, ignore; +history_expand_line (int count, int ignore) { char *new_line; @@ -2818,8 +2836,7 @@ history_expand_line (count, ignore) /* Expand history substitutions in the current line and then insert a space (hopefully close to where we were before). */ static int -tcsh_magic_space (count, ignore) - int count, ignore; +tcsh_magic_space (int count, int ignore) { int dist_from_end, old_point; @@ -2841,10 +2858,9 @@ tcsh_magic_space (count, ignore) /* History and alias expand the line. */ static int -history_and_alias_expand_line (count, ignore) - int count, ignore; +history_and_alias_expand_line (int count, int ignore) { - char *new_line, *t; + char *new_line; new_line = 0; #if defined (BANG_HISTORY) @@ -2879,8 +2895,7 @@ history_and_alias_expand_line (count, ignore) because we want the variable expansions as a separate undo'able set of operations. */ static int -shell_expand_line (count, ignore) - int count, ignore; +shell_expand_line (int count, int ignore) { char *new_line, *t; WORD_LIST *expanded_string; @@ -2981,12 +2996,10 @@ static struct ignorevar fignore = }; static void -_ignore_completion_names (names, name_func) - char **names; - sh_ignore_func_t *name_func; +_ignore_completion_names (char **names, sh_ignore_func_t *name_func) { char **newnames; - int idx, nidx; + size_t idx, nidx; char **oldnames; int oidx; @@ -3072,15 +3085,14 @@ _ignore_completion_names (names, name_func) } static int -name_is_acceptable (name) - const char *name; +name_is_acceptable (const char *name) { struct ign *p; - int nlen; + size_t nlen; for (nlen = strlen (name), p = fignore.ignores; p->val; p++) { - if (nlen > p->len && p->len > 0 && STREQ (p->val, &name[nlen - p->len])) + if (nlen >= p->len && p->len > 0 && STREQ (p->val, &name[nlen - p->len])) return (0); } @@ -3089,16 +3101,14 @@ name_is_acceptable (name) #if 0 static int -ignore_dot_names (name) - char *name; +ignore_dot_names (const char *name) { return (name[0] != '.'); } #endif static int -filename_completion_ignore (names) - char **names; +filename_completion_ignore (char **names) { #if 0 if (glob_dot_filenames == 0) @@ -3117,13 +3127,25 @@ filename_completion_ignore (names) /* Return 1 if NAME is a directory. NAME undergoes tilde expansion. */ static int -test_for_directory (name) - const char *name; +test_for_directory (const char *name) { char *fn; int r; fn = bash_tilde_expand (name, 0); + +#if __CYGWIN + /* stat("//server") can only be successful as a directory, but can take + seconds to time out on failure. It is much faster to assume that + "//server" is a valid name than it is to wait for a stat, even if it + gives false positives on bad names. */ + if (fn[0] == '/' && fn[1] == '/' && ! strchr (&fn[2], '/')) + { + free (fn); + return 1; + } +#endif + r = file_isdir (fn); free (fn); @@ -3131,8 +3153,7 @@ test_for_directory (name) } static int -test_for_canon_directory (name) - const char *name; +test_for_canon_directory (const char *name) { char *fn; int r; @@ -3147,31 +3168,27 @@ test_for_canon_directory (name) /* Remove files from NAMES, leaving directories. */ static int -bash_ignore_filenames (names) - char **names; +bash_ignore_filenames (char **names) { _ignore_completion_names (names, test_for_directory); return 0; } static int -bash_progcomp_ignore_filenames (names) - char **names; +bash_progcomp_ignore_filenames (char **names) { _ignore_completion_names (names, test_for_canon_directory); return 0; } static int -return_zero (name) - const char *name; +return_zero (const char *name) { return 0; } static int -bash_ignore_everything (names) - char **names; +bash_ignore_everything (char **names) { _ignore_completion_names (names, return_zero); return 0; @@ -3181,10 +3198,9 @@ bash_ignore_everything (names) is an expanded filename. DIRECTORY_PART is the tilde-prefix portion of the un-tilde-expanded version of VAL (what the user typed). */ static char * -restore_tilde (val, directory_part) - char *val, *directory_part; +restore_tilde (const char *val, char *directory_part) { - int l, vl, dl2, xl; + size_t l, vl, dl2, xl; char *dh2, *expdir, *ret, *v; vl = strlen (val); @@ -3238,8 +3254,7 @@ restore_tilde (val, directory_part) } static char * -maybe_restore_tilde (val, directory_part) - char *val, *directory_part; +maybe_restore_tilde (char *val, char *directory_part) { rl_icppfunc_t *save; char *ret; @@ -3255,8 +3270,7 @@ maybe_restore_tilde (val, directory_part) rl_filename_completion_function. This must be called with the address of a pointer to malloc'd memory. */ static void -bash_directory_expansion (dirname) - char **dirname; +bash_directory_expansion (char **dirname) { char *d, *nd; @@ -3285,9 +3299,7 @@ bash_directory_expansion (dirname) /* If necessary, rewrite directory entry */ static char * -bash_filename_rewrite_hook (fname, fnlen) - char *fname; - int fnlen; +bash_filename_rewrite_hook (char *fname, int fnlen) { char *conv; @@ -3300,7 +3312,7 @@ bash_filename_rewrite_hook (fname, fnlen) /* Functions to save and restore the appropriate directory hook */ /* This is not static so the shopt code can call it */ void -set_directory_hook () +set_directory_hook (void) { if (dircomplete_expand) { @@ -3315,7 +3327,7 @@ set_directory_hook () } static rl_icppfunc_t * -save_directory_hook () +save_directory_hook (void) { rl_icppfunc_t *ret; @@ -3334,8 +3346,7 @@ save_directory_hook () } static void -restore_directory_hook (hookf) - rl_icppfunc_t *hookf; +restore_directory_hook (rl_icppfunc_t *hookf) { if (dircomplete_expand) rl_directory_completion_hook = hookf; @@ -3343,12 +3354,24 @@ restore_directory_hook (hookf) rl_directory_rewrite_hook = hookf; } +/* Set the readline hooks that affect how directories and filenames are + converted. Extern so other parts of the shell can use. */ +void +bashline_set_filename_hooks (void) +{ + /* Tell the completer that we might want to follow symbolic links or + do other expansion on directory names. */ + set_directory_hook (); + + rl_filename_rewrite_hook = bash_filename_rewrite_hook; + rl_completion_rewrite_hook = bash_filename_rewrite_hook; + rl_filename_stat_hook = bash_filename_stat_hook; +} + /* Check whether not DIRNAME, with any trailing slash removed, exists. If SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */ static int -directory_exists (dirname, should_dequote) - const char *dirname; - int should_dequote; +directory_exists (const char *dirname, int should_dequote) { char *new_dirname; int dirlen, r; @@ -3368,12 +3391,42 @@ directory_exists (dirname, should_dequote) free (new_dirname); return (r); } + +static char * +bash_expand_filename (char *filename) +{ + char *newname; + int global_nounset; + WORD_LIST *wl; + + newname = savestring (filename); + /* no error messages, and expand_prompt_string doesn't longjmp so we don't + have to worry about restoring this setting. */ + global_nounset = unbound_vars_is_error; + unbound_vars_is_error = 0; + wl = expand_prompt_string (newname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */ + unbound_vars_is_error = global_nounset; + free (newname); + + if (wl == 0) + return filename; + else + { + newname = string_list (wl); + dispose_words (wl); + if (newname && *newname && STREQ (newname, filename)) + { + free (newname); + return filename; + } + return newname; + } +} /* Expand a filename before the readline completion code passes it to stat(2). The filename will already have had tilde expansion performed. */ static int -bash_filename_stat_hook (dirname) - char **dirname; +bash_filename_stat_hook (char **dirname) { char *local_dirname, *new_dirname, *t; int should_expand_dirname, return_value; @@ -3452,8 +3505,7 @@ bash_filename_stat_hook (dirname) the DIRNAME argument, 0 otherwise. It should make sure not to modify DIRNAME if it returns 0. */ static int -bash_directory_completion_hook (dirname) - char **dirname; +bash_directory_completion_hook (char **dirname) { char *local_dirname, *new_dirname, *t; int return_value, should_expand_dirname, nextch, closer; @@ -3516,7 +3568,7 @@ bash_directory_completion_hook (dirname) if (no_symbolic_links == 0 && (local_dirname[0] != '.' || local_dirname[1])) { char *temp1, *temp2; - int len1, len2; + size_t len1, len2; /* If we have a relative path (local_dirname[0] != '/' && local_dirname[0] != '.') @@ -3590,11 +3642,11 @@ bash_directory_completion_hook (dirname) } static char **history_completion_array = (char **)NULL; -static int harry_size; -static int harry_len; +static size_t harry_size; +static size_t harry_len; static void -build_history_completion_array () +build_history_completion_array (void) { register int i, j; HIST_ENTRY **hlist; @@ -3640,11 +3692,10 @@ build_history_completion_array () } static char * -history_completion_generator (hint_text, state) - const char *hint_text; - int state; +history_completion_generator (const char *hint_text, int state) { - static int local_index, len; + static int local_index; + static size_t len; static const char *text; /* If this is the first call to the generator, then initialize the @@ -3669,8 +3720,7 @@ history_completion_generator (hint_text, state) } static int -dynamic_complete_history (count, key) - int count, key; +dynamic_complete_history (int count, int key) { int r; rl_compentry_func_t *orig_func; @@ -3699,8 +3749,7 @@ dynamic_complete_history (count, key) } static int -bash_dabbrev_expand (count, key) - int count, key; +bash_dabbrev_expand (int count, int key) { int r, orig_suppress, orig_sort; rl_compentry_func_t *orig_func; @@ -3739,43 +3788,37 @@ bash_dabbrev_expand (count, key) #if defined (SPECIFIC_COMPLETION_FUNCTIONS) static int -bash_complete_username (ignore, ignore2) - int ignore, ignore2; +bash_complete_username (int ignore, int ignore2) { return bash_complete_username_internal (rl_completion_mode (bash_complete_username)); } static int -bash_possible_username_completions (ignore, ignore2) - int ignore, ignore2; +bash_possible_username_completions (int ignore, int ignore2) { return bash_complete_username_internal ('?'); } static int -bash_complete_username_internal (what_to_do) - int what_to_do; +bash_complete_username_internal (int what_to_do) { return bash_specific_completion (what_to_do, rl_username_completion_function); } static int -bash_complete_filename (ignore, ignore2) - int ignore, ignore2; +bash_complete_filename (int ignore, int ignore2) { return bash_complete_filename_internal (rl_completion_mode (bash_complete_filename)); } static int -bash_possible_filename_completions (ignore, ignore2) - int ignore, ignore2; +bash_possible_filename_completions (int ignore, int ignore2) { return bash_complete_filename_internal ('?'); } static int -bash_complete_filename_internal (what_to_do) - int what_to_do; +bash_complete_filename_internal (int what_to_do) { rl_compentry_func_t *orig_func; rl_completion_func_t *orig_attempt_func; @@ -3809,71 +3852,61 @@ bash_complete_filename_internal (what_to_do) } static int -bash_complete_hostname (ignore, ignore2) - int ignore, ignore2; +bash_complete_hostname (int ignore, int ignore2) { return bash_complete_hostname_internal (rl_completion_mode (bash_complete_hostname)); } static int -bash_possible_hostname_completions (ignore, ignore2) - int ignore, ignore2; +bash_possible_hostname_completions (int ignore, int ignore2) { return bash_complete_hostname_internal ('?'); } static int -bash_complete_variable (ignore, ignore2) - int ignore, ignore2; +bash_complete_variable (int ignore, int ignore2) { return bash_complete_variable_internal (rl_completion_mode (bash_complete_variable)); } static int -bash_possible_variable_completions (ignore, ignore2) - int ignore, ignore2; +bash_possible_variable_completions (int ignore, int ignore2) { return bash_complete_variable_internal ('?'); } static int -bash_complete_command (ignore, ignore2) - int ignore, ignore2; +bash_complete_command (int ignore, int ignore2) { return bash_complete_command_internal (rl_completion_mode (bash_complete_command)); } static int -bash_possible_command_completions (ignore, ignore2) - int ignore, ignore2; +bash_possible_command_completions (int ignore, int ignore2) { return bash_complete_command_internal ('?'); } static int -bash_complete_hostname_internal (what_to_do) - int what_to_do; +bash_complete_hostname_internal (int what_to_do) { return bash_specific_completion (what_to_do, hostname_completion_function); } static int -bash_complete_variable_internal (what_to_do) - int what_to_do; +bash_complete_variable_internal (int what_to_do) { return bash_specific_completion (what_to_do, variable_completion_function); } static int -bash_complete_command_internal (what_to_do) - int what_to_do; +bash_complete_command_internal (int what_to_do) { return bash_specific_completion (what_to_do, command_word_completion_function); } static int -completion_glob_pattern (string) - char *string; +completion_glob_pattern (const char *string) { return (glob_pattern_p (string) == 1); } @@ -3882,22 +3915,22 @@ static char *globtext; static char *globorig; static char * -glob_complete_word (text, state) - const char *text; - int state; +glob_complete_word (const char *text, int state) { static char **matches = (char **)NULL; static int ind; - int glen; + size_t glen; char *ret, *ttext; if (state == 0) { rl_filename_completion_desired = 1; FREE (matches); + matches = (char **)NULL; if (globorig != globtext) FREE (globorig); FREE (globtext); + globorig = globtext = (char *)NULL; ttext = bash_tilde_expand (text, 0); @@ -3928,8 +3961,7 @@ glob_complete_word (text, state) } static int -bash_glob_completion_internal (what_to_do) - int what_to_do; +bash_glob_completion_internal (int what_to_do) { return bash_specific_completion (what_to_do, glob_complete_word); } @@ -3937,10 +3969,7 @@ bash_glob_completion_internal (what_to_do) /* A special quoting function so we don't end up quoting globbing characters in the word if there are no matches or multiple matches. */ static char * -bash_glob_quote_filename (s, rtype, qcp) - char *s; - int rtype; - char *qcp; +bash_glob_quote_filename (char *s, int rtype, char *qcp) { if (globorig && qcp && *qcp == '\0' && STREQ (s, globorig)) return (savestring (s)); @@ -3949,8 +3978,7 @@ bash_glob_quote_filename (s, rtype, qcp) } static int -bash_glob_complete_word (count, key) - int count, key; +bash_glob_complete_word (int count, int key) { int r; rl_quote_func_t *orig_quoting_function; @@ -3967,23 +3995,19 @@ bash_glob_complete_word (count, key) } static int -bash_glob_expand_word (count, key) - int count, key; +bash_glob_expand_word (int count, int key) { return bash_glob_completion_internal ('*'); } static int -bash_glob_list_expansions (count, key) - int count, key; +bash_glob_list_expansions (int count, int key) { return bash_glob_completion_internal ('?'); } static int -bash_specific_completion (what_to_do, generator) - int what_to_do; - rl_compentry_func_t *generator; +bash_specific_completion (int what_to_do, rl_compentry_func_t *generator) { rl_compentry_func_t *orig_func; rl_completion_func_t *orig_attempt_func; @@ -4009,13 +4033,40 @@ bash_specific_completion (what_to_do, generator) #endif /* SPECIFIC_COMPLETION_FUNCTIONS */ #if defined (VI_MODE) +/* This does pretty much what _rl_vi_advance_point does. */ +static inline int +vi_advance_point (void) +{ + int point; + DECLARE_MBSTATE; + + point = rl_point; + if (rl_point < rl_end) +#if defined (HANDLE_MULTIBYTE) + { + if (locale_mb_cur_max == 1) + rl_point++; + else + { + point = rl_point; + ADVANCE_CHAR (rl_line_buffer, rl_end, rl_point); + if (point == rl_point || rl_point > rl_end) + rl_point = rl_end; + } + } +#else + rl_point++: +#endif + return point; +} + /* Completion, from vi mode's point of view. This is a modified version of rl_vi_complete which uses the bash globbing code to implement what POSIX - specifies, which is to append a `*' and attempt filename generation (which - has the side effect of expanding any globbing characters in the word). */ + specifies, which is to optinally append a `*' and attempt filename + generation (which has the side effect of expanding any globbing characters + in the word). */ static int -bash_vi_complete (count, key) - int count, key; +bash_vi_complete (int count, int key) { #if defined (SPECIFIC_COMPLETION_FUNCTIONS) int p, r; @@ -4025,7 +4076,7 @@ bash_vi_complete (count, key) { if (!whitespace (rl_line_buffer[rl_point + 1])) rl_vi_end_word (1, 'E'); - rl_point++; + vi_advance_point (); } /* Find boundaries of current word, according to vi definition of a @@ -4070,26 +4121,23 @@ bash_vi_complete (count, key) quotes, and backslashes). It allows single quotes to appear within double quotes, and vice versa. It should be smarter. */ static char * -bash_dequote_filename (text, quote_char) - char *text; - int quote_char; +bash_dequote_filename (char *text, int quote_char) { char *ret, *p, *r; - int l, quoted; + int quoted; + size_t l; l = strlen (text); ret = (char *)xmalloc (l + 1); for (quoted = quote_char, p = text, r = ret; p && *p; p++) { - /* Allow backslash-escaped characters to pass through unscathed. */ - if (*p == '\\') + /* Allow backslash-escaped characters to pass through unscathed. Backslashes + aren't special in single quotes. */ + if (quoted != '\'' && *p == '\\') { - /* Backslashes are preserved within single quotes. */ - if (quoted == '\'') - *r++ = *p; /* Backslashes are preserved within double quotes unless the character is one that is defined to be escaped */ - else if (quoted == '"' && ((sh_syntaxtab[(unsigned char)p[1]] & CBSDQUOTE) == 0)) + if (quoted == '"' && ((sh_syntaxtab[(unsigned char)p[1]] & CBSDQUOTE) == 0)) *r++ = *p; *r++ = *++p; @@ -4119,11 +4167,10 @@ bash_dequote_filename (text, quote_char) word break characters with backslashes. Pass backslash-quoted characters through without examination. */ static char * -quote_word_break_chars (text) - char *text; +quote_word_break_chars (char *text) { char *ret, *r, *s; - int l; + size_t l; l = strlen (text); ret = (char *)xmalloc ((2 * l) + 1); @@ -4160,10 +4207,7 @@ quote_word_break_chars (text) used in case DIRNAME is going to be expanded. If DIRNAME is just going to be quoted, NEED_CLOSER will be 0. */ static int -bash_check_expchar (dirname, need_closer, nextp, closerp) - char *dirname; - int need_closer; - int *nextp, *closerp; +bash_check_expchar (char *dirname, int need_closer, int *nextp, int *closerp) { char *t; int ret, n, c; @@ -4219,10 +4263,10 @@ bash_check_expchar (dirname, need_closer, nextp, closerp) of characters to be backslash-escaped. This is the only place custom_filename_quote_characters is modified. */ static void -set_filename_quote_chars (expchar, nextch, closer) - int expchar, nextch, closer; +set_filename_quote_chars (int expchar, int nextch, int closer) { - int i, j, c; + size_t i, j; + int c; if (rl_filename_quote_characters && *rl_filename_quote_characters) { @@ -4244,8 +4288,7 @@ set_filename_quote_chars (expchar, nextch, closer) be backslash-quoted. The table will be used for sh_backslash_quote from this file. */ static void -set_filename_bstab (string) - const char *string; +set_filename_bstab (const char *string) { const char *s; @@ -4261,14 +4304,11 @@ set_filename_bstab (string) quote_word_break_chars on the result. This returns newly-allocated memory. */ static char * -bash_quote_filename (s, rtype, qcp) - char *s; - int rtype; - char *qcp; +bash_quote_filename (char *s, int rtype, char *qcp) { char *rtext, *mtext, *ret; - int rlen, cs; - int expchar, nextch, closer; + size_t rlen; + int cs, expchar, nextch, closer; rtext = (char *)NULL; @@ -4291,6 +4331,17 @@ bash_quote_filename (s, rtype, qcp) (expchar = bash_check_expchar (s, 0, &nextch, &closer)) && file_exists (s) == 0) { + /* If it looks like the name is subject to expansion, see if we want to + double-quote it. */ + if (expchar == '$' || expchar == '`') + { + char *newname; + newname = bash_expand_filename (s); + if (newname && strpbrk (newname, rl_filename_quote_characters)) + cs = COMPLETE_DQUOTE2; + if (newname != s) + free (newname); + } /* Usually this will have been set by bash_directory_completion_hook, but there are cases where it will not be. */ if (rl_filename_quote_characters != custom_filename_quote_characters) @@ -4300,7 +4351,12 @@ bash_quote_filename (s, rtype, qcp) else if (*qcp == '\0' && cs == COMPLETE_BSQUOTE && mbschr (s, '\n')) cs = COMPLETE_SQUOTE; else if (*qcp == '"') - cs = COMPLETE_DQUOTE; + { + if ((expchar = bash_check_expchar (s, 0, &nextch, &closer)) == '$' || expchar == '`') + cs = COMPLETE_DQUOTE2; + else + cs = COMPLETE_DQUOTE; + } else if (*qcp == '\'') cs = COMPLETE_SQUOTE; #if defined (BANG_HISTORY) @@ -4324,6 +4380,9 @@ bash_quote_filename (s, rtype, qcp) switch (cs) { + case COMPLETE_DQUOTE2: + rtext = sh_mkdoublequoted (mtext, strlen (mtext), 1); /* For now */ + break; case COMPLETE_DQUOTE: rtext = sh_double_quote (mtext); break; @@ -4383,8 +4442,7 @@ static void #else static int #endif -putx(c) - int c; +putx(int c) { int x; x = putc (c, rl_outstream); @@ -4394,8 +4452,7 @@ putx(c) } static int -readline_get_char_offset (ind) - int ind; +readline_get_char_offset (int ind) { int r, old_ch; @@ -4413,9 +4470,7 @@ readline_get_char_offset (ind) } static void -readline_set_char_offset (ind, varp) - int ind; - int *varp; +readline_set_char_offset (int ind, int *varp) { int i; @@ -4435,16 +4490,36 @@ readline_set_char_offset (ind, varp) } } +void +uw_rl_set_signals (void *ignore) +{ + rl_set_signals (); +} + +static void +unbind_readline_variables (void) +{ + check_unbind_variable ("READLINE_LINE"); + check_unbind_variable ("READLINE_POINT"); + check_unbind_variable ("READLINE_MARK"); + check_unbind_variable ("READLINE_ARGUMENT"); + array_needs_making = 1; +} + +static void +uw_unbind_readline_variables (void *ignore) +{ + unbind_readline_variables (); +} + int -bash_execute_unix_command (count, key) - int count; /* ignored */ - int key; +bash_execute_unix_command (int count, int key) { int type; register int i, r; intmax_t mi; sh_parser_state_t ps; - char *cmd, *value, *ce, old_ch; + char *cmd, *value, *ce; SHELL_VAR *v; char ibuf[INT_STRLEN_BOUND(int) + 1]; Keymap cmd_xmap; @@ -4455,7 +4530,7 @@ bash_execute_unix_command (count, key) kslen = rl_key_sequence_length; /* If we have a numeric argument, chop it off the front of the key sequence */ - if (count > 1 || rl_explicit_arg) + if (count != 1 || rl_explicit_arg) { i = rl_trim_arg_from_keyseq (rl_executing_keyseq, rl_key_sequence_length, rl_get_keymap ()); if (i > 0) @@ -4507,7 +4582,7 @@ bash_execute_unix_command (count, key) if (v) VSETATTR (v, att_exported); - if (count > 1 || rl_explicit_arg) + if (count != 1 || rl_explicit_arg) { value = inttostr (count, ibuf, sizeof (ibuf)); v = bind_int_variable ("READLINE_ARGUMENT", value, 0); @@ -4516,8 +4591,12 @@ bash_execute_unix_command (count, key) } array_needs_making = 1; + begin_unwind_frame ("execute-unix-command"); save_parser_state (&ps); rl_clear_signals (); + add_unwind_protect (uw_unbind_readline_variables, 0); + add_unwind_protect (uw_restore_parser_state, &ps); + add_unwind_protect (uw_rl_set_signals, 0); r = parse_and_execute (savestring (cmd), "bash_execute_unix_command", SEVAL_NOHIST); rl_set_signals (); restore_parser_state (&ps); @@ -4526,18 +4605,15 @@ bash_execute_unix_command (count, key) maybe_make_readline_line (v ? value_cell (v) : 0); v = find_variable ("READLINE_POINT"); - if (v && legal_number (value_cell (v), &mi)) + if (v && valid_number (value_cell (v), &mi)) readline_set_char_offset (mi, &rl_point); v = find_variable ("READLINE_MARK"); - if (v && legal_number (value_cell (v), &mi)) + if (v && valid_number (value_cell (v), &mi)) readline_set_char_offset (mi, &rl_mark); - check_unbind_variable ("READLINE_LINE"); - check_unbind_variable ("READLINE_POINT"); - check_unbind_variable ("READLINE_MARK"); - check_unbind_variable ("READLINE_ARGUMENT"); - array_needs_making = 1; + unbind_readline_variables (); + discard_unwind_frame ("execute-unix-command"); /* and restore the readline buffer and display after command execution. */ /* If we clear the last line of the prompt above, redraw only that last @@ -4551,21 +4627,35 @@ bash_execute_unix_command (count, key) return 0; } +/* This only has to handle macros/shell commandsfrom print_unix_command_map */ +static void +print_unix_command (const char *kseq, const char *value, int readable, const char *prefix) +{ + if (readable) + fprintf (rl_outstream, "\"%s%s\" \"%s\"\n", prefix ? prefix : "", kseq, value ? value : ""); + else + fprintf (rl_outstream, "%s%s outputs %s\n", prefix ? prefix : "", kseq, value ? value : ""); +} + int -print_unix_command_map () +print_unix_command_map (void) { Keymap save, cmd_xmap; + rl_macro_print_func_t *old_printer; save = rl_get_keymap (); cmd_xmap = get_cmd_xmap_from_keymap (save); rl_set_keymap (cmd_xmap); + old_printer = rl_macro_display_hook; + rl_macro_display_hook = print_unix_command; rl_macro_dumper (1); + rl_macro_display_hook = old_printer; rl_set_keymap (save); return 0; } static void -init_unix_command_map () +init_unix_command_map (void) { emacs_std_cmd_xmap = rl_make_bare_keymap (); @@ -4581,7 +4671,7 @@ init_unix_command_map () } static Keymap -get_cmd_xmap_from_edit_mode () +get_cmd_xmap_from_edit_mode (void) { if (emacs_std_cmd_xmap == 0) init_unix_command_map (); @@ -4600,8 +4690,7 @@ get_cmd_xmap_from_edit_mode () } static Keymap -get_cmd_xmap_from_keymap (kmap) - Keymap kmap; +get_cmd_xmap_from_keymap (Keymap kmap) { if (emacs_std_cmd_xmap == 0) init_unix_command_map (); @@ -4623,9 +4712,7 @@ get_cmd_xmap_from_keymap (kmap) } static int -isolate_sequence (string, ind, need_dquote, startp) - char *string; - int ind, need_dquote, *startp; +isolate_sequence (char *string, int ind, int need_dquote, int *startp) { register int i; int c, passc, delim; @@ -4672,17 +4759,16 @@ isolate_sequence (string, ind, need_dquote, startp) } int -bind_keyseq_to_unix_command (line) - char *line; +bind_keyseq_to_unix_command (char *line) { Keymap kmap, cmd_xmap; char *kseq, *value; - int i, kstart; + int i, kstart, translate; kmap = rl_get_keymap (); /* We duplicate some of the work done by rl_parse_and_bind here, but - this code only has to handle `"keyseq": ["]command["]' and can + this code only has to handle `"keyseq"[:][ \t]+["]command["]' and can generate an error for anything else. */ i = isolate_sequence (line, 0, 1, &kstart); if (i < 0) @@ -4691,16 +4777,26 @@ bind_keyseq_to_unix_command (line) /* Create the key sequence string to pass to rl_generic_bind */ kseq = substring (line, kstart, i); - for ( ; line[i] && line[i] != ':'; i++) + /* Allow colon or whitespace to separate the key sequence and command string. */ + for ( ; line[i] && line[i] != ':' && whitespace (line[i]) == 0; i++) ; - if (line[i] != ':') + if (line[i] != ':' && whitespace (line[i]) == 0) { - builtin_error (_("%s: missing colon separator"), line); + builtin_error (_("%s: missing separator"), line); FREE (kseq); return -1; } - i = isolate_sequence (line, i + 1, 0, &kstart); + /* If we have a whitespace separator we're going to call rl_macro_bind so + we get the readline-translated version of the value (backslash-escapes + handled, etc.) */ + translate = line[i] != ':'; + + /* Kind of tricky. If we use whitespace as a delimiter, we can backslash- + quote double quotes and have them preserved in the value. However, we + still want to be able to auto-detect quoted strings and only require + them with whitespace delimiters. */ + i = isolate_sequence (line, i + 1, translate, &kstart); if (i < 0) { FREE (kseq); @@ -4712,7 +4808,10 @@ bind_keyseq_to_unix_command (line) /* Save the command to execute and the key sequence in the CMD_XMAP */ cmd_xmap = get_cmd_xmap_from_keymap (kmap); - rl_generic_bind (ISMACR, kseq, value, cmd_xmap); + if (translate) + rl_macro_bind (kseq, value, cmd_xmap); + else + rl_generic_bind (ISMACR, kseq, value, cmd_xmap); /* and bind the key sequence in the current keymap to a function that understands how to execute from CMD_XMAP */ @@ -4723,8 +4822,7 @@ bind_keyseq_to_unix_command (line) } int -unbind_unix_command (kseq) - char *kseq; +unbind_unix_command (char *kseq) { Keymap cmd_xmap; @@ -4741,8 +4839,7 @@ unbind_unix_command (kseq) but return only directories as matches. Dequotes the filename before attempting to find matches. */ char ** -bash_directory_completion_matches (text) - const char *text; +bash_directory_completion_matches (const char *text) { char **m1; char *dfn; @@ -4770,8 +4867,7 @@ bash_directory_completion_matches (text) } char * -bash_dequote_text (text) - const char *text; +bash_dequote_text (const char *text) { char *dtxt; int qc; @@ -4786,7 +4882,7 @@ bash_dequote_text (text) and fatal signals without executing too much code in a signal handler context. */ static int -bash_event_hook () +bash_event_hook (void) { int sig; diff --git a/bashline.h b/bashline.h index d40228e29..430e369fe 100644 --- a/bashline.h +++ b/bashline.h @@ -1,6 +1,6 @@ /* bashline.h -- interface to the bash readline functions in bashline.c. */ -/* Copyright (C) 1993-2019 Free Software Foundation, Inc. +/* Copyright (C) 1993-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,35 +35,38 @@ extern int dircomplete_expand; extern int dircomplete_expand_relpath; extern int complete_fullquote; -extern void posix_readline_initialize PARAMS((int)); -extern void reset_completer_word_break_chars PARAMS((void)); -extern int enable_hostname_completion PARAMS((int)); -extern void initialize_readline PARAMS((void)); -extern void bashline_reset PARAMS((void)); -extern void bashline_reinitialize PARAMS((void)); -extern int bash_re_edit PARAMS((char *)); +extern void posix_readline_initialize (int); +extern void reset_completer_word_break_chars (void); +extern int enable_hostname_completion (int); +extern void initialize_readline (void); +extern void bashline_reset (void); +extern void bashline_reinitialize (void); +extern int bash_re_edit (const char *); -extern void bashline_set_event_hook PARAMS((void)); -extern void bashline_reset_event_hook PARAMS((void)); +extern void bashline_set_event_hook (void); +extern void bashline_reset_event_hook (void); -extern int bind_keyseq_to_unix_command PARAMS((char *)); -extern int bash_execute_unix_command PARAMS((int, int)); -extern int print_unix_command_map PARAMS((void)); -extern int unbind_unix_command PARAMS((char *)); +extern void uw_rl_set_signals (void *); -extern char **bash_default_completion PARAMS((const char *, int, int, int, int)); +extern int bind_keyseq_to_unix_command (char *); +extern int bash_execute_unix_command (int, int); +extern int print_unix_command_map (void); +extern int unbind_unix_command (char *); -extern void set_directory_hook PARAMS((void)); +extern char **bash_default_completion (const char *, int, int, int, int); + +extern void bashline_set_filename_hooks (void); +extern void set_directory_hook (void); /* Used by programmable completion code. */ -extern char *command_word_completion_function PARAMS((const char *, int)); -extern char *bash_groupname_completion_function PARAMS((const char *, int)); -extern char *bash_servicename_completion_function PARAMS((const char *, int)); +extern char *command_word_completion_function (const char *, int); +extern char *bash_groupname_completion_function (const char *, int); +extern char *bash_servicename_completion_function (const char *, int); -extern char **get_hostname_list PARAMS((void)); -extern void clear_hostname_list PARAMS((void)); +extern char **get_hostname_list (void); +extern void clear_hostname_list (void); -extern char **bash_directory_completion_matches PARAMS((const char *)); -extern char *bash_dequote_text PARAMS((const char *)); +extern char **bash_directory_completion_matches (const char *); +extern char *bash_dequote_text (const char *); #endif /* _BASHLINE_H_ */ diff --git a/bashtypes.h b/bashtypes.h index 01afef4b4..9d666d4f1 100644 --- a/bashtypes.h +++ b/bashtypes.h @@ -1,6 +1,6 @@ /* bashtypes.h -- Bash system types. */ -/* Copyright (C) 1993-2009 Free Software Foundation, Inc. +/* Copyright (C) 1993-2009,2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,6 +35,18 @@ # include #endif +/* Fix PRIdMAX on systems where it's broken. */ +#ifdef PRI_MACROS_BROKEN +# undef PRIdMAX +#endif +#ifndef PRIdMAX +# if HAVE_LONG_LONG +# define PRIdMAX "lld" +# else +# define PRIdMAX "ld" +# endif +#endif + #if HAVE_STDINT_H # include #endif diff --git a/bracecomp.c b/bracecomp.c index 2ea8ba971..1effa9aa7 100644 --- a/bracecomp.c +++ b/bracecomp.c @@ -4,7 +4,7 @@ /* Original version by tromey@cns.caltech.edu, Fri Feb 7 1992. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -41,12 +41,11 @@ #include "shell.h" #include -static int _strcompare PARAMS((char **, char **)); +static int _strcompare (const char **, const char **); /* Find greatest common prefix of two strings. */ static int -string_gcd (s1, s2) - char *s1, *s2; +string_gcd (char *s1, char *s2) { register int i; @@ -63,13 +62,12 @@ string_gcd (s1, s2) } static char * -really_munge_braces (array, real_start, real_end, gcd_zero) - char **array; - int real_start, real_end, gcd_zero; +really_munge_braces (char **array, int real_start, int real_end, int gcd_zero) { int start, end, gcd; char *result, *subterm, *x; - int result_size, flag, tlen; + size_t result_size; + int flag, tlen; flag = 0; @@ -150,8 +148,7 @@ really_munge_braces (array, real_start, real_end, gcd_zero) } static int -_strcompare (s1, s2) - char **s1, **s2; +_strcompare (const char **s1, const char **s2) { int result; @@ -163,8 +160,7 @@ _strcompare (s1, s2) } static int -hack_braces_completion (names) - char **names; +hack_braces_completion (char **names) { register int i; char *temp; @@ -187,8 +183,7 @@ hack_braces_completion (names) /* We handle quoting ourselves within hack_braces_completion, so we turn off rl_filename_quoting_desired and rl_filename_quoting_function. */ int -bash_brace_completion (count, ignore) - int count, ignore; +bash_brace_completion (int count, int ignore) { rl_compignore_func_t *orig_ignore_func; rl_compentry_func_t *orig_entry_func; diff --git a/braces.c b/braces.c index e91d326ea..099312e44 100644 --- a/braces.c +++ b/braces.c @@ -1,7 +1,7 @@ /* braces.c -- code for doing word expansion in curly braces. */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. - +/* Copyright (C) 1987-2020,2022-2024 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 @@ -32,12 +32,14 @@ #endif #include +#include #include "bashansi.h" #include "bashintl.h" #if defined (SHELL) # include "shell.h" +# include "parser.h" /* FUNSUB_CHAR */ #else # if defined (TEST) typedef char *WORD_DESC; @@ -59,7 +61,7 @@ extern int errno; #define BRACE_SEQ_SPECIFIER ".." -extern int asprintf PARAMS((char **, const char *, ...)) __attribute__((__format__ (printf, 2, 3))); +extern int asprintf (char **, const char *, ...) __attribute__((__format__ (printf, 2, 3))); /* Basic idea: @@ -73,19 +75,11 @@ extern int asprintf PARAMS((char **, const char *, ...)) __attribute__((__format /* The character which is used to separate arguments. */ static const int brace_arg_separator = ','; -#if defined (PARAMS) -static int brace_gobbler PARAMS((char *, size_t, int *, int)); -static char **expand_amble PARAMS((char *, size_t, int)); -static char **expand_seqterm PARAMS((char *, size_t)); -static char **mkseq PARAMS((intmax_t, intmax_t, intmax_t, int, int)); -static char **array_concat PARAMS((char **, char **)); -#else -static int brace_gobbler (); -static char **expand_amble (); -static char **expand_seqterm (); -static char **mkseq(); -static char **array_concat (); -#endif +static int brace_gobbler (char *, size_t, int *, int); +static char **expand_amble (char *, size_t, int); +static char **expand_seqterm (char *, size_t); +static char **mkseq (intmax_t, intmax_t, intmax_t, int, size_t); +static char **array_concat (char **, char **); #if 0 static void @@ -101,8 +95,7 @@ dump_result (a) /* Return an array of strings; the brace expansion of TEXT. */ char ** -brace_expand (text) - char *text; +brace_expand (char *text) { register int start; size_t tlen; @@ -124,6 +117,8 @@ brace_expand (text) do { c = brace_gobbler (text, tlen, &i, '{'); /* } */ + if (i >= tlen) + break; c1 = c; /* Verify that c begins a valid brace expansion word. If it doesn't, we go on. Loop stops when there are no more open braces in the word. */ @@ -234,7 +229,7 @@ brace_expand (text) tack = expand_seqterm (amble, alen); if (tack) goto add_tack; - else if (text[i + 1]) + else if (i < tlen && text[i + 1]) { /* If the sequence expansion fails (e.g., because the integers overflow), but there is more in the string, try and process @@ -282,10 +277,7 @@ add_tack: expand each slot which needs it, until there are no more slots which need it. */ static char ** -expand_amble (text, tlen, flags) - char *text; - size_t tlen; - int flags; +expand_amble (char *text, size_t tlen, int flags) { char **result, **partial, **tresult; char *tem; @@ -316,7 +308,8 @@ expand_amble (text, tlen, flags) result = partial; else { - register int lr, lp, j; + size_t lr, lp; + int j; lr = strvec_len (result); lp = strvec_len (partial); @@ -357,53 +350,37 @@ expand_amble (text, tlen, flags) #define ST_ZINT 3 static char ** -mkseq (start, end, incr, type, width) - intmax_t start, end, incr; - int type, width; +mkseq (intmax_t start, intmax_t end, intmax_t incr, int type, size_t width) { - intmax_t n, prevn; - int i, nelem; + intmax_t prevn, n, abs_incr; + size_t nelem, i; char **result, *t; + char lbuf[INT_BUFSIZE_BOUND (uintmax_t)]; if (incr == 0) incr = 1; - if (start > end && incr > 0) - incr = -incr; - else if (start < end && incr < 0) - { - if (incr == INTMAX_MIN) /* Don't use -INTMAX_MIN */ - return ((char **)NULL); - incr = -incr; - } - - /* Check that end-start will not overflow INTMAX_MIN, INTMAX_MAX. The +3 - and -2, not strictly necessary, are there because of the way the number - of elements and value passed to strvec_create() are calculated below. */ - if (SUBOVERFLOW (end, start, INTMAX_MIN+3, INTMAX_MAX-2)) + abs_incr = incr; + if (incr < 0 && ckd_sub (&abs_incr, 0, incr)) return ((char **)NULL); - prevn = sh_imaxabs (end - start); - /* Need to check this way in case INT_MAX == INTMAX_MAX */ - if (INT_MAX == INTMAX_MAX && (ADDOVERFLOW (prevn, 2, INT_MIN, INT_MAX))) + /* Make sure incr agrees with start and end */ + if ((start < end) == (incr < 0) && ckd_sub (&incr, 0, incr)) return ((char **)NULL); - /* Make sure the assignment to nelem below doesn't end up <= 0 due to - intmax_t overflow */ - else if (ADDOVERFLOW ((prevn/sh_imaxabs(incr)), 1, INTMAX_MIN, INTMAX_MAX)) + + /* prevn = sh_imaxabs (end - start); */ + if (start < end ? ckd_sub (&prevn, end, start) : ckd_sub (&prevn, start, end)) return ((char **)NULL); - /* XXX - TOFIX: potentially allocating a lot of extra memory if - imaxabs(incr) != 1 */ - /* Instead of a simple nelem = prevn + 1, something like: - nelem = (prevn / imaxabs(incr)) + 1; - would work */ - if ((prevn / sh_imaxabs (incr)) > INT_MAX - 3) /* check int overflow */ + /* nelem = floor (abs ((end - start) / incr)) plus 1 for first element plus + trailing null. Account for trailing null up here for overflow check */ + if (ckd_add (&nelem, prevn / abs_incr, 2)) return ((char **)NULL); - nelem = (prevn / sh_imaxabs(incr)) + 1; - result = strvec_mcreate (nelem + 1); + + result = strvec_mcreate (nelem); if (result == 0) { - internal_error (_("brace expansion: failed to allocate memory for %u elements"), (unsigned int)nelem); + internal_error (_("brace expansion: failed to allocate memory for %s elements"), uinttostr (nelem - 1, lbuf, sizeof (lbuf))); return ((char **)NULL); } @@ -422,13 +399,26 @@ mkseq (start, end, incr, type, width) QUIT; #endif if (type == ST_INT) - result[i++] = t = itos (n); + t = itos (n); else if (type == ST_ZINT) { - int len, arg; - arg = n; - len = asprintf (&t, "%0*d", width, arg); - result[i++] = t; + size_t tlen; + + t = itos (n); + tlen = strlen (t); + if (tlen < width) /* zero-pad the result directly to avoid sprintf */ + { + char *t0; + t0 = t; + t = realloc (t, width + 1); + if (t == 0) + free (t0); + else + { + memmove (t + (width - tlen), t, tlen + 1); + memset (t + (n < 0), '0', width - tlen); + } + } } else { @@ -437,44 +427,37 @@ mkseq (start, end, incr, type, width) t[0] = n; t[1] = '\0'; } - result[i++] = t; } + result[i++] = t; + /* We failed to allocate memory for this number, so we bail. */ if (t == 0) { - char *p, lbuf[INT_STRLEN_BOUND(intmax_t) + 1]; + char *p; /* Easier to do this than mess around with various intmax_t printf formats (%ld? %lld? %jd?) and PRIdMAX. */ - p = inttostr (n, lbuf, sizeof (lbuf)); + p = uinttostr (n, lbuf, sizeof (lbuf)); internal_error (_("brace expansion: failed to allocate memory for `%s'"), p); strvec_dispose (result); return ((char **)NULL); } - /* Handle overflow and underflow of n+incr */ - if (ADDOVERFLOW (n, incr, INTMAX_MIN, INTMAX_MAX)) - break; - n += incr; - - if ((incr < 0 && n < end) || (incr > 0 && n > end)) - break; } - while (1); + while (i < nelem - 1); result[i] = (char *)0; return (result); } static char ** -expand_seqterm (text, tlen) - char *text; - size_t tlen; +expand_seqterm (char *text, size_t tlen) { char *t, *lhs, *rhs; - int lhs_t, rhs_t, lhs_l, rhs_l, width; + int lhs_t, rhs_t; + size_t lhs_l, rhs_l, width; intmax_t lhs_v, rhs_v, incr; intmax_t tl, tr; char **result, *ep, *oep; @@ -496,7 +479,7 @@ expand_seqterm (text, tlen) /* Now figure out whether LHS and RHS are integers or letters. Both sides have to match. */ - lhs_t = (legal_number (lhs, &tl)) ? ST_INT : + lhs_t = (valid_number (lhs, &tl)) ? ST_INT : ((ISALPHA (lhs[0]) && lhs[1] == 0) ? ST_CHAR : ST_BAD); /* Decide on rhs and whether or not it looks like the user specified @@ -591,15 +574,11 @@ expand_seqterm (text, tlen) an inner set of braces. */ static int -brace_gobbler (text, tlen, indx, satisfy) - char *text; - size_t tlen; - int *indx; - int satisfy; +brace_gobbler (char *text, size_t tlen, int *indx, int satisfy) { register int i, c, quoted, level, commas, pass_next; #if defined (SHELL) - int si; + size_t si; char *t; #endif DECLARE_MBSTATE; @@ -636,8 +615,30 @@ brace_gobbler (text, tlen, indx, satisfy) #if defined (SHELL) /* If compiling for the shell, treat ${...} like \{...} */ - if (c == '$' && text[i+1] == '{' && quoted != '\'') /* } */ + if (c == '$' && i < tlen && text[i+1] == '{' && quoted != '\'') /* } */ { +#if 1 + /* nofork command substitution */ + if (i < tlen - 1 && FUNSUB_CHAR (text[i+2])) + { + int o, f; +funsub: + o = no_longjmp_on_fatal_error; + no_longjmp_on_fatal_error = 1; + f = (quoted == '"') ? Q_DOUBLE_QUOTES : 0; + si = i + 2; + t = extract_function_subst (text, &si, f, SX_NOALLOC|SX_NOLONGJMP|SX_NOERROR); + i = si + 1; + no_longjmp_on_fatal_error = o; + if (i > tlen) + { + i = tlen; + c = 0; + break; + } + continue; + } +#endif pass_next = 1; i++; if (quoted == 0) @@ -652,7 +653,7 @@ brace_gobbler (text, tlen, indx, satisfy) quoted = 0; #if defined (SHELL) /* The shell allows quoted command substitutions */ - if (quoted == '"' && c == '$' && text[i+1] == '(') /*)*/ + if (quoted == '"' && c == '$' && i < tlen && text[i+1] == '(') /*)*/ goto comsub; #endif #if defined (SHELL) @@ -672,14 +673,23 @@ brace_gobbler (text, tlen, indx, satisfy) #if defined (SHELL) /* Pass new-style command and process substitutions through unchanged. */ - if ((c == '$' || c == '<' || c == '>') && text[i+1] == '(') /* ) */ + if ((c == '$' || c == '<' || c == '>') && i < tlen && text[i+1] == '(') /* ) */ { + int o; + comsub: + o = no_longjmp_on_fatal_error; + no_longjmp_on_fatal_error = 1; si = i + 2; - t = extract_command_subst (text, &si, 0); - i = si; - free (t); - i++; + t = extract_command_subst (text, &si, SX_NOALLOC|SX_NOLONGJMP|SX_NOERROR); + i = si + 1; + no_longjmp_on_fatal_error = o; + if (i > tlen) + { + i = tlen; + c = 0; + break; + } continue; } #endif @@ -729,11 +739,11 @@ comsub: are free ()'ed. ARR1 can be NULL, in that case, a new version of ARR2 is returned. */ static char ** -array_concat (arr1, arr2) - char **arr1, **arr2; +array_concat (char **arr1, char **arr2) { - register int i, j, len, len1, len2; - register char **result; + int i, j, len; + size_t len1, len2; + char **result; if (arr1 == 0) return (arr2); /* XXX - see if we can get away without copying? */ @@ -767,6 +777,17 @@ array_concat (arr1, arr2) for (j = 0; j < len2; j++) { +#if defined (SHELL) + if (ISINTERRUPT) + { + result[len] = (char *)NULL; + strvec_dispose (result); + result = (char **)NULL; + strvec_dispose (arr1); /* caller expects us to free arr1 */ + } + QUIT; +#endif + result[len] = (char *)xmalloc (1 + strlen_1 + strlen (arr2[j])); strcpy (result[len], arr1[i]); strcpy (result[len] + strlen_1, arr2[j]); @@ -784,29 +805,25 @@ array_concat (arr1, arr2) #include void * -xmalloc(n) - size_t n; +xmalloc(size_t n) { return (malloc (n)); } void * -xrealloc(p, n) - void *p; - size_t n; +xrealloc(void *p, size_t n) { return (realloc (p, n)); } int -internal_error (format, arg1, arg2) - char *format, *arg1, *arg2; +internal_error (char *format, char *arg1, char *arg2) { fprintf (stderr, format, arg1, arg2); fprintf (stderr, "\n"); } -main () +main (int c, char **v) { char example[256]; diff --git a/builtins/Makefile.in b/builtins/Makefile.in index 642878c6c..86c7827fb 100644 --- a/builtins/Makefile.in +++ b/builtins/Makefile.in @@ -1,6 +1,6 @@ # This Makefile for building libbuiltins.a is in -*- text -*- for Emacs. # -# Copyright (C) 1996-2022 Free Software Foundation, Inc. +# Copyright (C) 1996-2024 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -343,6 +343,7 @@ common.o: $(topdir)/builtins.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h common.o: $(topdir)/subst.h $(topdir)/execute_cmd.h $(topdir)/error.h common.o: $(topdir)/externs.h ../pathnames.h ./builtext.h common.o: $(BASHINCDIR)/chartypes.h +common.o: $(BASHINCDIR)/unlocked-io.h evalfile.o: $(topdir)/bashtypes.h $(BASHINCDIR)/posixstat.h ${BASHINCDIR}/filecntl.h evalfile.o: $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h evalfile.o: $(topdir)/shell.h $(topdir)/syntax.h ../config.h $(topdir)/bashjmp.h @@ -439,6 +440,7 @@ echo.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/ echo.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h echo.o: $(BASHINCDIR)/maxpath.h ../pathnames.h echo.o: $(srcdir)/common.h +echo.o: $(BASHINCDIR)/unlocked-io.h enable.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h enable.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h enable.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h @@ -468,6 +470,7 @@ exit.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/jobs.h exit.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h exit.o: $(topdir)/execute_cmd.h exit.o: $(BASHINCDIR)/maxpath.h ./builtext.h ../pathnames.h +exit.o: $(BASHINCDIR)/unlocked-io.h fc.o: $(topdir)/bashtypes.h $(BASHINCDIR)/posixstat.h fc.o: $(topdir)/builtins.h $(topdir)/command.h $(srcdir)/bashgetopt.h fc.o: $(topdir)/bashhist.h $(topdir)/parser.h @@ -478,6 +481,7 @@ fc.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/shell.h $(topdir)/syntax.h fc.o: $(topdir)/flags.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h fc.o: $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h $(BASHINCDIR)/chartypes.h fc.o: ../pathnames.h +fc.o: $(BASHINCDIR)/unlocked-io.h fg_bg.o: $(topdir)/bashtypes.h $(srcdir)/bashgetopt.h fg_bg.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h fg_bg.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h @@ -498,6 +502,7 @@ hash.o: $(topdir)/findcmd.h $(topdir)/hashlib.h $(topdir)/sig.h hash.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h hash.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h hash.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h +hash.o: $(BASHINCDIR)/unlocked-io.h hash.o: $(topdir)/conftypes.h $(topdir)/execute_cmd.h hash.o: $(srcdir)/common.h $(BASHINCDIR)/maxpath.h ../pathnames.h help.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h @@ -507,6 +512,7 @@ help.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h help.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h help.o: $(topdir)/conftypes.h $(topdir)/execute_cmd.h help.o: ${srcdir}/common.h $(topdir)/sig.h ../pathnames.h +help.o: $(BASHINCDIR)/unlocked-io.h history.o: $(topdir)/bashtypes.h history.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h history.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h @@ -515,6 +521,7 @@ history.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/sig.h $(topdir)/pars history.o: ${BASHINCDIR}/filecntl.h $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h history.o: $(topdir)/variables.h $(topdir)/conftypes.h $(topdir)/bashhist.h $(BASHINCDIR)/maxpath.h history.o: ../pathnames.h +history.o: $(BASHINCDIR)/unlocked-io.h inlib.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h inlib.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h inlib.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h @@ -538,6 +545,7 @@ let.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/s let.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h let.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h let.o: ../pathnames.h +let.o: $(BASHINCDIR)/unlocked-io.h printf.o: ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/bashjmp.h printf.o: $(topdir)/command.h $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h printf.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h @@ -547,6 +555,7 @@ printf.o: $(topdir)/variables.h $(topdir)/conftypes.h $(BASHINCDIR)/stdc.h $(src printf.o: $(topdir)/bashtypes.h ${srcdir}/common.h $(BASHINCDIR)/chartypes.h printf.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h printf.o: ../pathnames.h +printf.o: $(BASHINCDIR)/unlocked-io.h pushd.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h pushd.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h pushd.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h @@ -554,6 +563,7 @@ pushd.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/sig.h pushd.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h pushd.o: $(BASHINCDIR)/maxpath.h $(srcdir)/common.h ./builtext.h pushd.o: ../pathnames.h +pushd.o: $(BASHINCDIR)/unlocked-io.h read.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h read.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h read.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h @@ -562,6 +572,7 @@ read.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/v read.o: $(BASHINCDIR)/shtty.h $(topdir)/sig.h read.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h read.o: $(topdir)/arrayfunc.h ../pathnames.h +read.o: $(BASHINCDIR)/unlocked-io.h return.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h return.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h return.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/sig.h @@ -622,6 +633,7 @@ times.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir) times.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h times.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h times.o: $(BASHINCDIR)/posixtime.h ../pathnames.h +times.o: $(BASHINCDIR)/unlocked-io.h trap.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h trap.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/externs.h trap.o: $(topdir)/quit.h $(srcdir)/common.h $(BASHINCDIR)/maxpath.h $(topdir)/sig.h diff --git a/builtins/alias.def b/builtins/alias.def index 0ab906964..0deb9d34b 100644 --- a/builtins/alias.def +++ b/builtins/alias.def @@ -1,7 +1,7 @@ This file is alias.def, from which is created alias.c It implements the builtins "alias" and "unalias" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -63,12 +63,11 @@ $END /* Flags for print_alias */ #define AL_REUSABLE 0x01 -static void print_alias PARAMS((alias_t *, int)); +static int print_alias (alias_t *, int); /* Hack the alias command in a Korn shell way. */ int -alias_builtin (list) - WORD_LIST *list; +alias_builtin (WORD_LIST *list) { int any_failed, offset, pflag, dflags; alias_t **alias_list, *t; @@ -104,13 +103,14 @@ alias_builtin (list) if (alias_list == 0) return (EXECUTION_SUCCESS); + any_failed = EXECUTION_SUCCESS; for (offset = 0; alias_list[offset]; offset++) - print_alias (alias_list[offset], dflags); + if (any_failed = print_alias (alias_list[offset], dflags) != EXECUTION_SUCCESS) + break; free (alias_list); /* XXX - Do not free the strings. */ - if (list == 0) - return (sh_chkwrite (EXECUTION_SUCCESS)); + return (any_failed != EXECUTION_SUCCESS ? EXECUTION_FAILURE : sh_chkwrite (EXECUTION_SUCCESS)); } any_failed = 0; @@ -126,7 +126,7 @@ alias_builtin (list) name[offset] = '\0'; value = name + offset + 1; - if (legal_alias_name (name, 0) == 0) + if (valid_alias_name (name, 0) == 0) { builtin_error (_("`%s': invalid alias name"), name); any_failed++; @@ -138,7 +138,10 @@ alias_builtin (list) { t = find_alias (name); if (t) - print_alias (t, dflags); + { + if (print_alias (t, dflags) != EXECUTION_SUCCESS) + return (EXECUTION_FAILURE); + } else { sh_notfound (name); @@ -167,10 +170,9 @@ $END #if defined (ALIAS) /* Remove aliases named in LIST from the aliases database. */ int -unalias_builtin (list) - register WORD_LIST *list; +unalias_builtin (WORD_LIST *list) { - register alias_t *alias; + alias_t *alias; int opt, aflag; aflag = 0; @@ -206,11 +208,7 @@ unalias_builtin (list) aflag = 0; while (list) { - alias = find_alias (list->word->word); - - if (alias) - remove_alias (alias->name); - else + if (remove_alias (list->word->word) < 0) { sh_notfound (list->word->word); aflag++; @@ -223,10 +221,8 @@ unalias_builtin (list) } /* Output ALIAS in such a way as to allow it to be read back in. */ -static void -print_alias (alias, flags) - alias_t *alias; - int flags; +static int +print_alias (alias_t *alias, int flags) { char *value; @@ -236,6 +232,6 @@ print_alias (alias, flags) printf ("%s=%s\n", alias->name, value); free (value); - fflush (stdout); + return (sh_chkwrite (EXECUTION_SUCCESS)); } #endif /* ALIAS */ diff --git a/builtins/bashgetopt.c b/builtins/bashgetopt.c index d40ffa23a..92c015592 100644 --- a/builtins/bashgetopt.c +++ b/builtins/bashgetopt.c @@ -1,6 +1,6 @@ /* bashgetopt.c -- `getopt' for use by the builtins. */ -/* Copyright (C) 1992-2021 Free Software Foundation, Inc. +/* Copyright (C) 1992-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -48,9 +48,7 @@ WORD_LIST *lcurrent = (WORD_LIST *)NULL; WORD_LIST *loptend; /* Points to the first non-option argument in the list */ int -internal_getopt(list, opts) -WORD_LIST *list; -char *opts; +internal_getopt(WORD_LIST *list, char *opts) { register int c; register char *cp; @@ -154,7 +152,7 @@ char *opts; list_optflags = 0; } } else { - if (lcurrent->next && legal_number(lcurrent->next->word->word, (intmax_t *)0)) { + if (lcurrent->next && valid_number(lcurrent->next->word->word, (intmax_t *)0)) { lcurrent = lcurrent->next; list_optarg = lcurrent->word->word; list_optflags = lcurrent->word->flags; @@ -187,7 +185,7 @@ char *opts; */ void -reset_internal_getopt () +reset_internal_getopt (void) { lhead = lcurrent = loptend = (WORD_LIST *)NULL; sp = 1; diff --git a/builtins/bashgetopt.h b/builtins/bashgetopt.h index 79be34315..4f58b4ba5 100644 --- a/builtins/bashgetopt.h +++ b/builtins/bashgetopt.h @@ -1,6 +1,6 @@ /* bashgetopt.h -- extern declarations for stuff defined in bashgetopt.c. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -37,7 +37,7 @@ extern int list_opttype; extern WORD_LIST *lcurrent; extern WORD_LIST *loptend; -extern int internal_getopt PARAMS((WORD_LIST *, char *)); -extern void reset_internal_getopt PARAMS((void)); +extern int internal_getopt (WORD_LIST *, char *); +extern void reset_internal_getopt (void); #endif /* !__BASH_GETOPT_H */ diff --git a/builtins/bind.def b/builtins/bind.def index 53a65ac7c..e52e1cb06 100644 --- a/builtins/bind.def +++ b/builtins/bind.def @@ -1,7 +1,7 @@ This file is bind.def, from which is created bind.c. It implements the builtin "bind" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -86,9 +86,9 @@ extern int errno; #include "bashgetopt.h" #include "common.h" -static int query_bindings PARAMS((char *)); -static int unbind_command PARAMS((char *)); -static int unbind_keyseq PARAMS((char *)); +static int query_bindings (char *); +static int unbind_command (char *); +static int unbind_keyseq (char *); #define BIND_RETURN(x) do { return_code = x; goto bind_exit; } while (0) @@ -108,8 +108,7 @@ static int unbind_keyseq PARAMS((char *)); #define XXFLAG 0x2000 int -bind_builtin (list) - WORD_LIST *list; +bind_builtin (WORD_LIST *list) { int return_code; Keymap kmap, saved_keymap; @@ -117,14 +116,7 @@ bind_builtin (list) char *initfile, *map_name, *fun_name, *unbind_name, *remove_seq, *cmd_seq, *t; if (no_line_editing) - { -#if 0 - builtin_error (_("line editing not enabled")); - return (EXECUTION_FAILURE); -#else - builtin_warning (_("line editing not enabled")); -#endif - } + builtin_warning (_("line editing not enabled")); kmap = saved_keymap = (Keymap) NULL; flags = 0; @@ -192,7 +184,7 @@ bind_builtin (list) case 'X': flags |= XXFLAG; break; - case GETOPT_HELP: + CASE_HELPOPT; default: builtin_usage (); BIND_RETURN (EX_USAGE); @@ -227,10 +219,37 @@ bind_builtin (list) rl_list_funmap_names (); if (flags & PFLAG) - rl_function_dumper (1); + { +#if 0 /* TAG:bash-5.3 */ + if (list == 0) + rl_function_dumper (1); + else + while (list) + { + rl_print_keybinding (list->word->word, kmap, 1); + list = list->next; + } +#else + rl_function_dumper (1); +#endif + } if (flags & PPFLAG) - rl_function_dumper (0); + { +#if 0 /* TAG:bash-5.3 */ + if (list == 0) + rl_function_dumper (0); + else + while (list) + { + rl_print_keybinding (list->word->word, kmap, 0); + list = list->next; + } +#else + rl_function_dumper (0); +#endif + } + if (flags & SFLAG) rl_macro_dumper (1); @@ -277,7 +296,8 @@ bind_builtin (list) /* Process the rest of the arguments as binding specifications. */ while (list) { - int olen, nlen, d, i; + size_t olen, nlen; + int d, i; char **obindings, **nbindings; obindings = rl_invoking_keyseqs (bash_execute_unix_command); @@ -315,8 +335,7 @@ bind_builtin (list) } static int -query_bindings (name) - char *name; +query_bindings (char *name) { rl_command_func_t *function; char **keyseqs; @@ -347,8 +366,7 @@ query_bindings (name) } static int -unbind_command (name) - char *name; +unbind_command (char *name) { rl_command_func_t *function; @@ -364,8 +382,7 @@ unbind_command (name) } static int -unbind_keyseq (seq) - char *seq; +unbind_keyseq (char *seq) { char *kseq; int kslen, type; diff --git a/builtins/break.def b/builtins/break.def index b73ed5e5b..b0c0a780e 100644 --- a/builtins/break.def +++ b/builtins/break.def @@ -1,7 +1,7 @@ This file is break.def, from which is created break.c. It implements the builtins "break" and "continue" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -46,7 +46,7 @@ $END #include "../execute_cmd.h" #include "common.h" -static int check_loop_level PARAMS((void)); +static int check_loop_level (void); /* The depth of while's and until's. */ int loop_level = 0; @@ -60,8 +60,7 @@ int continuing = 0; /* Set up to break x levels, where x defaults to 1, but can be specified as the first argument. */ int -break_builtin (list) - WORD_LIST *list; +break_builtin (WORD_LIST *list) { intmax_t newbreak; @@ -70,10 +69,14 @@ break_builtin (list) if (check_loop_level () == 0) return (EXECUTION_SUCCESS); - (void)get_numeric_arg (list, 1, &newbreak); + /* This will not return if an error is encountered. */ + (void)get_numeric_arg (list, interactive_shell ? 2 : 1, &newbreak); if (newbreak <= 0) { + /* skip over `--' option to get the right error message */ + if (list && list->word && ISOPTION (list->word->word, '-')) + list = list->next; sh_erange (list->word->word, _("loop count")); breaking = loop_level; return (EXECUTION_FAILURE); @@ -102,8 +105,7 @@ $END /* Set up to continue x levels, where x defaults to 1, but can be specified as the first argument. */ int -continue_builtin (list) - WORD_LIST *list; +continue_builtin (WORD_LIST *list) { intmax_t newcont; @@ -112,10 +114,14 @@ continue_builtin (list) if (check_loop_level () == 0) return (EXECUTION_SUCCESS); - (void)get_numeric_arg (list, 1, &newcont); + /* This will not return if an error is encountered. */ + (void)get_numeric_arg (list, interactive_shell ? 2 : 1, &newcont); if (newcont <= 0) { + /* skip over `--' option to get the right error message */ + if (list && list->word && ISOPTION (list->word->word, '-')) + list = list->next; sh_erange (list->word->word, _("loop count")); breaking = loop_level; return (EXECUTION_FAILURE); @@ -132,7 +138,7 @@ continue_builtin (list) /* Return non-zero if a break or continue command would be okay. Print an error message if break or continue is meaningless here. */ static int -check_loop_level () +check_loop_level (void) { #if defined (BREAK_COMPLAINS) if (loop_level == 0 && posixly_correct == 0) diff --git a/builtins/builtin.def b/builtins/builtin.def index 74060ee09..3ceb50a6d 100644 --- a/builtins/builtin.def +++ b/builtins/builtin.def @@ -1,7 +1,7 @@ This file is builtin.def, from which is created builtin.c. It implements the builtin "builtin" in Bash. -Copyright (C) 1987-2017 Free Software Foundation, Inc. +Copyright (C) 1987-2017,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -50,8 +50,7 @@ $END /* Run the command mentioned in list directly, without going through the normal alias/function/builtin/filename lookup process. */ int -builtin_builtin (list) - WORD_LIST *list; +builtin_builtin (WORD_LIST *list) { sh_builtin_func_t *function; register char *command; diff --git a/builtins/caller.def b/builtins/caller.def index 1000979dd..e0909cf56 100644 --- a/builtins/caller.def +++ b/builtins/caller.def @@ -2,7 +2,7 @@ This file is caller.def, from which is created caller.c. It implements the builtin "caller" in Bash. Copyright (C) 2002-2008 Rocky Bernstein for Free Software Foundation, Inc. -Copyright (C) 2008-2019 Free Software Foundation, Inc. +Copyright (C) 2008-2019,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -69,8 +69,7 @@ extern int errno; #endif /* !errno */ int -caller_builtin (list) - WORD_LIST *list; +caller_builtin (WORD_LIST *list) { #if !defined (ARRAY_VARS) printf ("1 NULL\n"); @@ -109,7 +108,7 @@ caller_builtin (list) if (funcname_a == 0 || array_empty (funcname_a)) return (EXECUTION_FAILURE); - if (legal_number (list->word->word, &num)) + if (valid_number (list->word->word, &num)) { lineno_s = array_reference (bash_lineno_a, num); source_s = array_reference (bash_source_a, num+1); @@ -140,7 +139,12 @@ N_("Returns the context of the current subroutine call.\n\ provide a stack trace.\n\ \n\ The value of EXPR indicates how many call frames to go back before the\n\ - current one; the top frame is frame 0."), + current one; the top frame is frame 0.\n\ + \n\ + Exit Status:\n\ + Returns 0 unless the shell is not executing a shell function or EXPR\n\ + is invalid." +), (char *)NULL }; diff --git a/builtins/cd.def b/builtins/cd.def index b87c5d9d2..c99d67cfc 100644 --- a/builtins/cd.def +++ b/builtins/cd.def @@ -1,7 +1,7 @@ This file is cd.def, from which is created cd.c. It implements the builtins "cd" and "pwd" in Bash. -Copyright (C) 1987-2022 Free Software Foundation, Inc. +Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -56,13 +56,13 @@ extern int errno; extern const char * const bash_getcwd_errstr; -static int bindpwd PARAMS((int)); -static int setpwd PARAMS((char *)); -static char *resetpwd PARAMS((char *)); -static int change_to_directory PARAMS((char *, int, int)); +static int bindpwd (int); +static int setpwd (char *); +static char *resetpwd (char *); +static int change_to_directory (char *, int, int); -static int cdxattr PARAMS((char *, char **)); -static void resetxattr PARAMS((void)); +static int cdxattr (char *, char **); +static void resetxattr (void); /* Change this to 1 to get cd spelling correction by default. */ int cdspelling = 0; @@ -75,7 +75,7 @@ static int xattrfd = -1; $BUILTIN cd $FUNCTION cd_builtin -$SHORT_DOC cd [-L|[-P [-e]] [-@]] [dir] +$SHORT_DOC cd [-L|[-P [-e]]] [-@] [dir] Change the shell working directory. Change the current directory to DIR. The default DIR is the value of the @@ -115,8 +115,7 @@ $END /* Just set $PWD, don't change OLDPWD. Used by `pwd -P' in posix mode. */ static int -setpwd (dirname) - char *dirname; +setpwd (char *dirname) { int old_anm; SHELL_VAR *tvar; @@ -134,8 +133,7 @@ setpwd (dirname) } static int -bindpwd (no_symlinks) - int no_symlinks; +bindpwd (int no_symlinks) { char *dirname, *pwdvar; int old_anm, r, canon_failed; @@ -160,10 +158,9 @@ bindpwd (no_symlinks) pwdvar = get_string_value ("PWD"); tvar = bind_variable ("OLDPWD", pwdvar, 0); - if (tvar && readonly_p (tvar)) + if (tvar == 0 || readonly_p (tvar)) r = EXECUTION_FAILURE; - - if (old_anm == 0 && array_needs_making && exported_p (tvar)) + else if (old_anm == 0 && array_needs_making && exported_p (tvar)) { update_export_env_inplace ("OLDPWD=", 7, pwdvar); array_needs_making = 0; @@ -183,8 +180,7 @@ bindpwd (no_symlinks) /* Call get_working_directory to reset the value of the_current_working_directory () */ static char * -resetpwd (caller) - char *caller; +resetpwd (char *caller) { char *tdir; @@ -194,10 +190,9 @@ resetpwd (caller) return (tdir); } +/* return new constructed directory name in *NDIRP */ static int -cdxattr (dir, ndirp) - char *dir; /* don't assume we can always free DIR */ - char **ndirp; /* return new constructed directory name */ +cdxattr (char *dir, char **ndirp) { #if defined (O_XATTR) int apfd, fd, r, e; @@ -241,7 +236,7 @@ cdxattr (dir, ndirp) /* Clean up the O_XATTR baggage. Currently only closes xattrfd */ static void -resetxattr () +resetxattr (void) { #if defined (O_XATTR) if (xattrfd >= 0) @@ -264,8 +259,7 @@ resetxattr () so the programming interface is simple, and it handles errors and restrictions properly. */ int -cd_builtin (list) - WORD_LIST *list; +cd_builtin (WORD_LIST *list) { char *dirname, *cdpath, *path, *temp; int path_index, no_symlinks, opt, lflag, e; @@ -320,9 +314,9 @@ cd_builtin (list) if (list == 0) { /* `cd' without arguments is equivalent to `cd $HOME' */ - dirname = get_string_value ("HOME"); + dirname = get_string_value ("HOME"); /* POSIX cd step 2 */ - if (dirname == 0) + if (dirname == 0) /* POSIX cd step 1 */ { builtin_error (_("HOME not set")); return (EXECUTION_FAILURE); @@ -333,13 +327,13 @@ cd_builtin (list) else if (list->next) { builtin_error (_("too many arguments")); - return (EXECUTION_FAILURE); + return (EX_USAGE); } #endif #if 0 else if (list->word->word[0] == '\0') { - builtin_error (_("null directory")); + builtin_error (_("null directory")); /* POSIX cd implementation defined */ return (EXECUTION_FAILURE); } #endif @@ -353,19 +347,14 @@ cd_builtin (list) builtin_error (_("OLDPWD not set")); return (EXECUTION_FAILURE); } -#if 0 - lflag = interactive ? LCD_PRINTPATH : 0; -#else - lflag = LCD_PRINTPATH; /* According to SUSv3 */ -#endif + lflag = LCD_PRINTPATH; /* POSIX cd `-' operand */ } - else if (absolute_pathname (list->word->word)) + else dirname = list->word->word; - else if (privileged_mode == 0 && (cdpath = get_string_value ("CDPATH"))) - { - dirname = list->word->word; - /* Find directory in $CDPATH. */ + if (privileged_mode == 0 && absolute_pathname (dirname) == 0 && (cdpath = get_string_value ("CDPATH"))) + { + /* Find directory in $CDPATH, POSIX cd step 5. */ path_index = 0; while (path = extract_colon_unit (cdpath, &path_index)) { @@ -395,23 +384,7 @@ cd_builtin (list) else free (temp); } - -#if 0 - /* changed for bash-4.2 Posix cd description steps 5-6 */ - /* POSIX.2 says that if `.' does not appear in $CDPATH, we don't - try the current directory, so we just punt now with an error - message if POSIXLY_CORRECT is non-zero. The check for cdpath[0] - is so we don't mistakenly treat a CDPATH value of "" as not - specifying the current directory. */ - if (posixly_correct && cdpath[0]) - { - builtin_error ("%s: %s", dirname, strerror (ENOENT)); - return (EXECUTION_FAILURE); - } -#endif } - else - dirname = list->word->word; /* When we get here, DIRNAME is the directory to change to. If we chdir successfully, just return. */ @@ -482,8 +455,7 @@ static int verbatim_pwd; /* Print the name of the current working directory. */ int -pwd_builtin (list) - WORD_LIST *list; +pwd_builtin (WORD_LIST *list) { char *directory; int opt, pflag; @@ -548,9 +520,7 @@ pwd_builtin (list) to the working directory. Return 1 on success, 0 on failure. */ static int -change_to_directory (newdir, nolinks, xattr) - char *newdir; - int nolinks, xattr; +change_to_directory (char *newdir, int nolinks, int xattr) { char *t, *tdir, *ndir; int err, canon_failed, r, ndlen; @@ -568,8 +538,11 @@ change_to_directory (newdir, nolinks, xattr) /* TDIR is either the canonicalized absolute pathname of NEWDIR (nolinks == 0) or the absolute physical pathname of NEWDIR (nolinks != 0). */ - tdir = nolinks ? sh_physpath (t, 0) - : sh_canonpath (t, PATH_CHECKDOTDOT|PATH_CHECKEXISTS); + if (t && *t) + tdir = nolinks ? sh_physpath (t, 0) + : sh_canonpath (t, PATH_CHECKDOTDOT|PATH_CHECKEXISTS); + else + tdir = NULL; ndlen = strlen (newdir); @@ -662,9 +635,17 @@ change_to_directory (newdir, nolinks, xattr) /* We're not in physical mode (nolinks == 0), but we failed to change to the canonicalized directory name (TDIR). Try what the user passed - verbatim. If we succeed, reinitialize the_current_working_directory. - POSIX requires that we just fail here, so we do in posix mode. */ - if (posixly_correct == 0 && chdir (newdir) == 0) + verbatim. If we succeed, reinitialize the_current_working_directory. */ + + /* The first block is step 9 in the POSIX cd algorithm. */ + if (posixly_correct && ndlen < PATH_MAX && strlen (tdir) >= PATH_MAX) + r = chdir (newdir); + else if (posixly_correct == 0) + r = chdir (newdir); + else + r = -1; + + if (r == 0) { t = resetpwd ("cd"); if (t == 0) diff --git a/builtins/colon.def b/builtins/colon.def index 6891b0799..7fe8cf00f 100644 --- a/builtins/colon.def +++ b/builtins/colon.def @@ -1,7 +1,7 @@ This file is colon.def, from which is created colon.c. It implements the builtin ":" in Bash. -Copyright (C) 1987-2019 Free Software Foundation, Inc. +Copyright (C) 1987-2019,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -61,16 +61,14 @@ $END /* Return a successful result. */ int -colon_builtin (ignore) - WORD_LIST *ignore; +colon_builtin (WORD_LIST *ignore) { return (0); } /* Return an unsuccessful result. */ int -false_builtin (ignore) - WORD_LIST *ignore; +false_builtin (WORD_LIST *ignore) { return (1); } diff --git a/builtins/command.def b/builtins/command.def index 3efdbe6bc..4f980592a 100644 --- a/builtins/command.def +++ b/builtins/command.def @@ -1,7 +1,7 @@ This file is command.def, from which is created command.c. It implements the builtin "command" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -53,18 +53,18 @@ $END #include "../shell.h" #include "../execute_cmd.h" #include "../flags.h" +#include "../parser.h" #include "bashgetopt.h" #include "common.h" #if defined (_CS_PATH) && defined (HAVE_CONFSTR) && !HAVE_DECL_CONFSTR -extern size_t confstr PARAMS((int, char *, size_t)); +extern size_t confstr (int, char *, size_t); #endif /* Run the commands mentioned in LIST without paying attention to shell functions. */ int -command_builtin (list) - WORD_LIST *list; +command_builtin (WORD_LIST *list) { int result, verbose, use_standard_path, opt; COMMAND *command; @@ -124,20 +124,22 @@ command_builtin (list) #define COMMAND_BUILTIN_FLAGS (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION | CMD_COMMAND_BUILTIN | (use_standard_path ? CMD_STDPATH : 0)) - INTERNAL_DEBUG (("command_builtin: running execute_command for `%s'", list->word->word)); + /* This code isn't executed any more; look at execute_cmd.c:execute_simple_command() + where command is treated as a pseudo-reserved prefix so we can optimize + away forks where possible. */ /* We don't want this to be reparsed (consider command echo 'foo &'), so just make a simple_command structure and call execute_command with it. */ - command = make_bare_simple_command (); + command = make_bare_simple_command (line_number); command->value.Simple->words = (WORD_LIST *)copy_word_list (list); command->value.Simple->redirects = (REDIRECT *)NULL; command->flags |= COMMAND_BUILTIN_FLAGS; command->value.Simple->flags |= COMMAND_BUILTIN_FLAGS; - add_unwind_protect ((char *)dispose_command, command); + add_unwind_protect (uw_dispose_command, command); result = execute_command (command); + dispose_command (command); - run_unwind_frame ("command_builtin"); - + discard_unwind_frame ("command_builtin"); return (result); } diff --git a/builtins/common.c b/builtins/common.c index 19b00c4d0..ed672342c 100644 --- a/builtins/common.c +++ b/builtins/common.c @@ -1,6 +1,6 @@ /* common.c - utility functions for all builtins */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -34,12 +34,7 @@ #include #include - -#if defined (PREFER_STDARG) -# include -#else -# include -#endif +#include #include "../bashansi.h" #include "../bashintl.h" @@ -85,7 +80,7 @@ sh_builtin_func_t *this_shell_builtin = (sh_builtin_func_t *)NULL; shell. */ static void -builtin_error_prolog () +builtin_error_prolog (void) { char *name; @@ -100,19 +95,13 @@ builtin_error_prolog () } void -#if defined (PREFER_STDARG) builtin_error (const char *format, ...) -#else -builtin_error (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; builtin_error_prolog (); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); va_end (args); @@ -120,20 +109,14 @@ builtin_error (format, va_alist) } void -#if defined (PREFER_STDARG) builtin_warning (const char *format, ...) -#else -builtin_warning (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; builtin_error_prolog (); fprintf (stderr, _("warning: ")); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); va_end (args); @@ -142,7 +125,7 @@ builtin_warning (format, va_alist) /* Print a usage summary for the currently-executing builtin command. */ void -builtin_usage () +builtin_usage (void) { if (this_command_name && *this_command_name) fprintf (stderr, _("%s: usage: "), this_command_name); @@ -153,22 +136,25 @@ builtin_usage () /* Return if LIST is NULL else barf and jump to top_level. Used by some builtins that do not accept arguments. */ void -no_args (list) - WORD_LIST *list; +no_args (WORD_LIST *list, int fatal) { if (list) { builtin_error (_("too many arguments")); top_level_cleanup (); - jump_to_top_level (DISCARD); + set_exit_status (EX_BADUSAGE); + /* for now, the caller determines whether this is a fatal error */ + if (interactive_shell == 0 && fatal) + jump_to_top_level (EXITPROG); + else + jump_to_top_level (DISCARD); } } /* Check that no options were given to the currently-executing builtin, and return 0 if there were options. */ int -no_options (list) - WORD_LIST *list; +no_options (WORD_LIST *list) { int opt; @@ -187,22 +173,19 @@ no_options (list) } void -sh_needarg (s) - char *s; +sh_needarg (const char *s) { builtin_error (_("%s: option requires an argument"), s); } void -sh_neednumarg (s) - char *s; +sh_neednumarg (const char *s) { builtin_error (_("%s: numeric argument required"), s); } void -sh_notfound (s) - char *s; +sh_notfound (const char *s) { builtin_error (_("%s: not found"), s); } @@ -210,29 +193,25 @@ sh_notfound (s) /* Function called when one of the builtin commands detects an invalid option. */ void -sh_invalidopt (s) - char *s; +sh_invalidopt (const char *s) { builtin_error (_("%s: invalid option"), s); } void -sh_invalidoptname (s) - char *s; +sh_invalidoptname (const char *s) { builtin_error (_("%s: invalid option name"), s); } void -sh_invalidid (s) - char *s; +sh_invalidid (const char *s) { builtin_error (_("`%s': not a valid identifier"), s); } void -sh_invalidnum (s) - char *s; +sh_invalidnum (const char *s) { char *msg; @@ -246,36 +225,31 @@ sh_invalidnum (s) } void -sh_invalidsig (s) - char *s; +sh_invalidsig (const char *s) { builtin_error (_("%s: invalid signal specification"), s); } void -sh_badpid (s) - char *s; +sh_badpid (const char *s) { builtin_error (_("`%s': not a pid or valid job spec"), s); } void -sh_readonly (s) - const char *s; +sh_readonly (const char *s) { builtin_error (_("%s: readonly variable"), s); } void -sh_noassign (s) - const char *s; +sh_noassign (const char *s) { internal_error (_("%s: cannot assign"), s); /* XXX */ } void -sh_erange (s, desc) - char *s, *desc; +sh_erange (const char *s, const char *desc) { if (s) builtin_error (_("%s: %s out of range"), s, desc ? desc : _("argument")); @@ -285,15 +259,13 @@ sh_erange (s, desc) #if defined (JOB_CONTROL) void -sh_badjob (s) - char *s; +sh_badjob (const char *s) { builtin_error (_("%s: no such job"), s); } void -sh_nojobs (s) - char *s; +sh_nojobs (const char *s) { if (s) builtin_error (_("%s: no job control"), s); @@ -304,8 +276,7 @@ sh_nojobs (s) #if defined (RESTRICTED_SHELL) void -sh_restricted (s) - char *s; +sh_restricted (const char *s) { if (s) builtin_error (_("%s: restricted"), s); @@ -315,14 +286,13 @@ sh_restricted (s) #endif void -sh_notbuiltin (s) - char *s; +sh_notbuiltin (const char *s) { builtin_error (_("%s: not a shell builtin"), s); } void -sh_wrerror () +sh_wrerror (void) { #if defined (DONT_REPORT_BROKEN_PIPE_WRITE_ERRORS) && defined (EPIPE) if (errno != EPIPE) @@ -331,8 +301,7 @@ sh_wrerror () } void -sh_ttyerror (set) - int set; +sh_ttyerror (int set) { if (set) builtin_error (_("error setting terminal attributes: %s"), strerror (errno)); @@ -341,8 +310,7 @@ sh_ttyerror (set) } int -sh_chkwrite (s) - int s; +sh_chkwrite (int s) { QUIT; fflush (stdout); @@ -367,9 +335,7 @@ sh_chkwrite (s) in the list in *IP, if IP is non-null. A convenience function for loadable builtins; also used by `test'. */ char ** -make_builtin_argv (list, ip) - WORD_LIST *list; - int *ip; +make_builtin_argv (WORD_LIST *list, int *ip) { char **argv; @@ -383,9 +349,7 @@ make_builtin_argv (list, ip) only discard the ones that are to be replaced. Set POSPARAM_COUNT to the number of args assigned (length of LIST). */ void -remember_args (list, destructive) - WORD_LIST *list; - int destructive; +remember_args (WORD_LIST *list, int destructive) { register int i; @@ -413,7 +377,7 @@ remember_args (list, destructive) { dispose_words (rest_of_args); rest_of_args = copy_word_list (list); - posparam_count += list_length (list); + posparam_count += list_length ((GENERIC_LIST *)list); } if (destructive) @@ -423,8 +387,7 @@ remember_args (list, destructive) } void -shift_args (times) - int times; +shift_args (int times) { WORD_LIST *temp; int count; @@ -456,7 +419,7 @@ shift_args (times) } int -number_of_args () +number_of_args (void) { #if 0 register WORD_LIST *list; @@ -479,19 +442,19 @@ static int changed_dollar_vars; /* Have the dollar variables been reset to new values since we last checked? */ int -dollar_vars_changed () +dollar_vars_changed (void) { return (changed_dollar_vars); } void -set_dollar_vars_unchanged () +set_dollar_vars_unchanged (void) { changed_dollar_vars = 0; } void -set_dollar_vars_changed () +set_dollar_vars_changed (void) { if (variable_context) changed_dollar_vars |= ARGS_FUNC; @@ -515,10 +478,7 @@ set_dollar_vars_changed () current command; if FATAL is 0, return an indication of an invalid number by setting *NUMOK == 0 and return -1. */ int -get_numeric_arg (list, fatal, count) - WORD_LIST *list; - int fatal; - intmax_t *count; +get_numeric_arg (WORD_LIST *list, int fatal, intmax_t *count) { char *arg; @@ -531,20 +491,17 @@ get_numeric_arg (list, fatal, count) if (list) { arg = list->word->word; - if (arg == 0 || (legal_number (arg, count) == 0)) + if (arg == 0 || (valid_number (arg, count) == 0)) { sh_neednumarg (list->word->word ? list->word->word : "`'"); if (fatal == 0) return 0; - else if (fatal == 1) /* fatal == 1; abort */ - throw_to_top_level (); - else /* fatal == 2; discard current command */ - { - top_level_cleanup (); - jump_to_top_level (DISCARD); - } + set_exit_status (EX_BADUSAGE); + /* fatal == 1: abort; fatal == 2: discard current command */ + top_level_cleanup (); + jump_to_top_level ((fatal == 1) ? EXITPROG : DISCARD); } - no_args (list->next); + no_args (list->next, 0); } return (1); @@ -552,8 +509,7 @@ get_numeric_arg (list, fatal, count) /* Get an eight-bit status value from LIST */ int -get_exitstat (list) - WORD_LIST *list; +get_exitstat (WORD_LIST *list) { int status; intmax_t sval; @@ -564,24 +520,27 @@ get_exitstat (list) if (list == 0) { - /* If we're not running the DEBUG trap, the return builtin, when not - given any arguments, uses the value of $? before the trap ran. If - given an argument, return uses it. This means that the trap can't - change $?. The DEBUG trap gets to change $?, though, since that is - part of its reason for existing, and because the extended debug mode - does things with the return value. */ - if (this_shell_builtin == return_builtin && running_trap > 0 && running_trap != DEBUG_TRAP+1) + /* If we're not running the DEBUG trap, and haven't executed a shell + function from the trap action, the return builtin, when not given + any arguments, uses the value of $? before the trap ran. The business + about executing a shell function from the trap action is from POSIX + interp 1602 (10/2022). If given an argument, return uses it + unconditionally. This means that the trap can't change $?. The DEBUG + trap gets to change $?, though, since that is part of its reason for + existing, and because the extended debug mode does things with the + return value. */ + if (this_shell_builtin == return_builtin && running_trap > 0 && running_trap != DEBUG_TRAP+1 && trap_return_context == funcnest + sourcenest) return (trap_saved_exit_value); return (last_command_exit_value); } arg = list->word->word; - if (arg == 0 || legal_number (arg, &sval) == 0) + if (arg == 0 || valid_number (arg, &sval) == 0) { sh_neednumarg (list->word->word ? list->word->word : "`'"); - return EX_BADUSAGE; + return EX_USAGE; } - no_args (list->next); + no_args (list->next, 0); status = sval & 255; return status; @@ -590,8 +549,7 @@ get_exitstat (list) /* Return the octal number parsed from STRING, or -1 to indicate that the string contained a bad number. */ int -read_octal (string) - char *string; +read_octal (char *string) { int result, digits; @@ -621,8 +579,7 @@ read_octal (string) char *the_current_working_directory = (char *)NULL; char * -get_working_directory (for_whom) - char *for_whom; +get_working_directory (const char *for_whom) { if (no_symbolic_links) { @@ -651,8 +608,7 @@ get_working_directory (for_whom) /* Make NAME our internal idea of the current working directory. */ void -set_working_directory (name) - char *name; +set_working_directory (const char *name) { FREE (the_current_working_directory); the_current_working_directory = savestring (name); @@ -666,13 +622,12 @@ set_working_directory (name) #if defined (JOB_CONTROL) int -get_job_by_name (name, flags) - const char *name; - int flags; +get_job_by_name (const char *name, int flags) { - register int i, wl, cl, match, job; - register PROCESS *p; - register JOB *j; + int i, match, job; + size_t wl, cl; + PROCESS *p; + JOB *j; job = NO_JOB; wl = strlen (name); @@ -721,8 +676,7 @@ get_job_by_name (name, flags) /* Return the job spec found in LIST. */ int -get_job_spec (list) - WORD_LIST *list; +get_job_spec (WORD_LIST *list) { register char *word; int job, jflags; @@ -770,9 +724,7 @@ get_job_spec (list) * NOTE: `kill' calls this function with forcecols == 0 */ int -display_signal_list (list, forcecols) - WORD_LIST *list; - int forcecols; +display_signal_list (WORD_LIST *list, int forcecols) { register int i, column; char *name; @@ -818,7 +770,7 @@ display_signal_list (list, forcecols) /* List individual signal names or numbers. */ while (list) { - if (legal_number (list->word->word, &lsignum)) + if (valid_number (list->word->word, &lsignum)) { /* This is specified by Posix.2 so that exit statuses can be mapped into signal numbers. */ @@ -875,9 +827,7 @@ display_signal_list (list, forcecols) Return the address of the builtin. DISABLED_OKAY means find it even if the builtin is disabled. */ struct builtin * -builtin_address_internal (name, disabled_okay) - char *name; - int disabled_okay; +builtin_address_internal (const char *name, int disabled_okay) { int hi, lo, mid, j; @@ -915,8 +865,7 @@ builtin_address_internal (name, disabled_okay) /* Return the pointer to the function implementing builtin command NAME. */ sh_builtin_func_t * -find_shell_builtin (name) - char *name; +find_shell_builtin (const char *name) { current_builtin = builtin_address_internal (name, 0); return (current_builtin ? current_builtin->function : (sh_builtin_func_t *)NULL); @@ -924,8 +873,7 @@ find_shell_builtin (name) /* Return the address of builtin with NAME, whether it is enabled or not. */ sh_builtin_func_t * -builtin_address (name) - char *name; +builtin_address (const char *name) { current_builtin = builtin_address_internal (name, 1); return (current_builtin ? current_builtin->function : (sh_builtin_func_t *)NULL); @@ -934,8 +882,7 @@ builtin_address (name) /* Return the function implementing the builtin NAME, but only if it is a POSIX.2 special builtin. */ sh_builtin_func_t * -find_special_builtin (name) - char *name; +find_special_builtin (const char *name) { current_builtin = builtin_address_internal (name, 0); return ((current_builtin && (current_builtin->flags & SPECIAL_BUILTIN)) ? @@ -944,8 +891,7 @@ find_special_builtin (name) } static int -shell_builtin_compare (sbp1, sbp2) - struct builtin *sbp1, *sbp2; +shell_builtin_compare (const struct builtin *sbp1, const struct builtin *sbp2) { int result; @@ -958,7 +904,7 @@ shell_builtin_compare (sbp1, sbp2) /* Sort the table of shell builtins so that the binary search will work in find_shell_builtin. */ void -initialize_shell_builtins () +initialize_shell_builtins (void) { qsort (shell_builtins, num_shell_builtins, sizeof (struct builtin), (QSFUNC *)shell_builtin_compare); @@ -966,7 +912,7 @@ initialize_shell_builtins () #if !defined (HELP_BUILTIN) void -builtin_help () +builtin_help (void) { printf ("%s: %s\n", this_command_name, _("help not available in this version")); } @@ -980,10 +926,7 @@ builtin_help () /* Assign NAME=VALUE, passing FLAGS to the assignment functions. */ SHELL_VAR * -builtin_bind_variable (name, value, flags) - char *name; - char *value; - int flags; +builtin_bind_variable (char *name, char *value, int flags) { SHELL_VAR *v; int vflags, bindflags; @@ -991,12 +934,11 @@ builtin_bind_variable (name, value, flags) #if defined (ARRAY_VARS) /* Callers are responsible for calling this with array references that have already undergone valid_array_reference checks (read, printf). */ - vflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0; - bindflags = flags | (assoc_expand_once ? ASS_NOEXPAND : 0) | ASS_ALLOWALLSUB; - if (flags & ASS_NOEXPAND) - vflags |= VA_NOEXPAND; - if (flags & ASS_ONEWORD) - vflags |= VA_ONEWORD; + /* XXX - should we unconditionally set ASS_NOEXPAND if the shell + compatibility level is > 52? */ + bindflags = flags | (array_expand_once ? ASS_NOEXPAND : 0) | ASS_ALLOWALLSUB; + vflags = convert_assign_flags_to_validarray_flags (flags); + vflags |= array_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0; if (valid_array_reference (name, vflags) == 0) v = bind_variable (name, value, flags); @@ -1013,10 +955,7 @@ builtin_bind_variable (name, value, flags) } SHELL_VAR * -builtin_bind_var_to_int (name, val, flags) - char *name; - intmax_t val; - int flags; +builtin_bind_var_to_int (char *name, intmax_t val, int flags) { SHELL_VAR *v; @@ -1026,13 +965,11 @@ builtin_bind_var_to_int (name, val, flags) #if defined (ARRAY_VARS) SHELL_VAR * -builtin_find_indexed_array (array_name, flags) - char *array_name; - int flags; +builtin_find_indexed_array (char *array_name, int flags) { SHELL_VAR *entry; - if ((flags & 2) && legal_identifier (array_name) == 0) + if ((flags & 2) && valid_identifier (array_name) == 0) { sh_invalidid (array_name); return (SHELL_VAR *)NULL; @@ -1061,8 +998,7 @@ builtin_find_indexed_array (array_name, flags) /* Like check_unbind_variable, but for use by builtins (only matters for error messages). */ int -builtin_unbind_variable (vname) - const char *vname; +builtin_unbind_variable (const char *vname) { SHELL_VAR *v; @@ -1081,16 +1017,13 @@ builtin_unbind_variable (vname) } int -builtin_arrayref_flags (w, baseflags) - WORD_DESC *w; - int baseflags; +builtin_arrayref_flags (WORD_DESC *w, int baseflags) { - char *t; int vflags; vflags = baseflags; - /* Don't require assoc_expand_once if we have an argument that's already + /* Don't require array_expand_once if we have an argument that's already passed through valid_array_reference and been expanded once. That doesn't protect it from normal expansions like word splitting, so proper quoting is still required. */ @@ -1099,7 +1032,7 @@ builtin_arrayref_flags (w, baseflags) # if 0 /* This is a little sketchier but handles quoted arguments. */ - if (assoc_expand_once && (t = strchr (w->word, '[')) && t[strlen(t) - 1] == ']') + if (array_expand_once && (t = strchr (w->word, '[')) && t[strlen(t) - 1] == ']') vflags |= VA_ONEWORD|VA_NOEXPAND; # endif @@ -1114,17 +1047,16 @@ builtin_arrayref_flags (w, baseflags) #if defined (ARRAY_VARS) int -set_expand_once (nval, uwp) - int nval, uwp; +set_expand_once (int nval, int uwp) { int oa; - oa = assoc_expand_once; + oa = array_expand_once; if (shell_compatibility_level > 51) /* XXX - internal */ { if (uwp) - unwind_protect_int (assoc_expand_once); - assoc_expand_once = nval; + unwind_protect_int (array_expand_once); + array_expand_once = nval; } return oa; } diff --git a/builtins/common.h b/builtins/common.h index a170f8fcf..81ce259d9 100644 --- a/builtins/common.h +++ b/builtins/common.h @@ -81,163 +81,163 @@ do { \ #define MAX_ATTRIBUTES 16 /* Functions from common.c */ -extern void builtin_error PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); -extern void builtin_warning PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); -extern void builtin_usage PARAMS((void)); -extern void no_args PARAMS((WORD_LIST *)); -extern int no_options PARAMS((WORD_LIST *)); +extern void builtin_error (const char *, ...) __attribute__((__format__ (printf, 1, 2))); +extern void builtin_warning (const char *, ...) __attribute__((__format__ (printf, 1, 2))); +extern void builtin_usage (void); +extern void no_args (WORD_LIST *, int); +extern int no_options (WORD_LIST *); /* common error message functions */ -extern void sh_needarg PARAMS((char *)); -extern void sh_neednumarg PARAMS((char *)); -extern void sh_notfound PARAMS((char *)); -extern void sh_invalidopt PARAMS((char *)); -extern void sh_invalidoptname PARAMS((char *)); -extern void sh_invalidid PARAMS((char *)); -extern void sh_invalidnum PARAMS((char *)); -extern void sh_invalidsig PARAMS((char *)); -extern void sh_readonly PARAMS((const char *)); -extern void sh_noassign PARAMS((const char *)); -extern void sh_erange PARAMS((char *, char *)); -extern void sh_badpid PARAMS((char *)); -extern void sh_badjob PARAMS((char *)); -extern void sh_nojobs PARAMS((char *)); -extern void sh_restricted PARAMS((char *)); -extern void sh_notbuiltin PARAMS((char *)); -extern void sh_wrerror PARAMS((void)); -extern void sh_ttyerror PARAMS((int)); -extern int sh_chkwrite PARAMS((int)); - -extern char **make_builtin_argv PARAMS((WORD_LIST *, int *)); -extern void remember_args PARAMS((WORD_LIST *, int)); -extern void shift_args PARAMS((int)); -extern int number_of_args PARAMS((void)); - -extern int dollar_vars_changed PARAMS((void)); -extern void set_dollar_vars_unchanged PARAMS((void)); -extern void set_dollar_vars_changed PARAMS((void)); - -extern int get_numeric_arg PARAMS((WORD_LIST *, int, intmax_t *)); -extern int get_exitstat PARAMS((WORD_LIST *)); -extern int read_octal PARAMS((char *)); +extern void sh_needarg (const char *); +extern void sh_neednumarg (const char *); +extern void sh_notfound (const char *); +extern void sh_invalidopt (const char *); +extern void sh_invalidoptname (const char *); +extern void sh_invalidid (const char *); +extern void sh_invalidnum (const char *); +extern void sh_invalidsig (const char *); +extern void sh_readonly (const char *); +extern void sh_noassign (const char *); +extern void sh_erange (const char *, const char *); +extern void sh_badpid (const char *); +extern void sh_badjob (const char *); +extern void sh_nojobs (const char *); +extern void sh_restricted (const char *); +extern void sh_notbuiltin (const char *); +extern void sh_wrerror (void); +extern void sh_ttyerror (int); +extern int sh_chkwrite (int); + +extern char **make_builtin_argv (WORD_LIST *, int *); +extern void remember_args (WORD_LIST *, int); +extern void shift_args (int); +extern int number_of_args (void); + +extern int dollar_vars_changed (void); +extern void set_dollar_vars_unchanged (void); +extern void set_dollar_vars_changed (void); + +extern int get_numeric_arg (WORD_LIST *, int, intmax_t *); +extern int get_exitstat (WORD_LIST *); +extern int read_octal (char *); /* Keeps track of the current working directory. */ extern char *the_current_working_directory; -extern char *get_working_directory PARAMS((char *)); -extern void set_working_directory PARAMS((char *)); +extern char *get_working_directory (const char *); +extern void set_working_directory (const char *); #if defined (JOB_CONTROL) -extern int get_job_by_name PARAMS((const char *, int)); -extern int get_job_spec PARAMS((WORD_LIST *)); +extern int get_job_by_name (const char *, int); +extern int get_job_spec (WORD_LIST *); #endif -extern int display_signal_list PARAMS((WORD_LIST *, int)); +extern int display_signal_list (WORD_LIST *, int); /* It's OK to declare a function as returning a Function * without providing a definition of what a `Function' is. */ -extern struct builtin *builtin_address_internal PARAMS((char *, int)); -extern sh_builtin_func_t *find_shell_builtin PARAMS((char *)); -extern sh_builtin_func_t *builtin_address PARAMS((char *)); -extern sh_builtin_func_t *find_special_builtin PARAMS((char *)); -extern void initialize_shell_builtins PARAMS((void)); +extern struct builtin *builtin_address_internal (const char *, int); +extern sh_builtin_func_t *find_shell_builtin (const char *); +extern sh_builtin_func_t *builtin_address (const char *); +extern sh_builtin_func_t *find_special_builtin (const char *); +extern void initialize_shell_builtins (void); #if defined (ARRAY_VARS) -extern int set_expand_once PARAMS((int, int)); +extern int set_expand_once (int, int); #endif /* Functions from exit.def */ -extern void bash_logout PARAMS((void)); +extern void bash_logout (void); /* Functions from getopts.def */ -extern void getopts_reset PARAMS((int)); +extern void getopts_reset (int); /* Functions from help.def */ -extern void builtin_help PARAMS((void)); +extern void builtin_help (void); /* Functions from read.def */ -extern void read_tty_cleanup PARAMS((void)); -extern int read_tty_modified PARAMS((void)); +extern void read_tty_cleanup (void); +extern int read_tty_modified (void); -extern int read_builtin_timeout PARAMS((int)); -extern void check_read_timeout PARAMS((void)); +extern int read_builtin_timeout (int); +extern void check_read_timeout (void); /* Functions from set.def */ -extern int minus_o_option_value PARAMS((char *)); -extern void list_minus_o_opts PARAMS((int, int)); -extern char **get_minus_o_opts PARAMS((void)); -extern int set_minus_o_option PARAMS((int, char *)); +extern int minus_o_option_value (char *); +extern void list_minus_o_opts (int, int); +extern char **get_minus_o_opts (void); +extern int set_minus_o_option (int, char *); -extern void set_shellopts PARAMS((void)); -extern void parse_shellopts PARAMS((char *)); -extern void initialize_shell_options PARAMS((int)); +extern void set_shellopts (void); +extern void parse_shellopts (char *); +extern void initialize_shell_options (int); -extern void reset_shell_options PARAMS((void)); +extern void reset_shell_options (void); -extern char *get_current_options PARAMS((void)); -extern void set_current_options PARAMS((const char *)); +extern char *get_current_options (void); +extern void set_current_options (const char *); /* Functions from shopt.def */ -extern void reset_shopt_options PARAMS((void)); -extern char **get_shopt_options PARAMS((void)); +extern void reset_shopt_options (void); +extern char **get_shopt_options (void); -extern int shopt_setopt PARAMS((char *, int)); -extern int shopt_listopt PARAMS((char *, int)); +extern int shopt_setopt (char *, int); +extern int shopt_listopt (char *, int); -extern int set_login_shell PARAMS((char *, int)); +extern int set_login_shell (char *, int); -extern void set_bashopts PARAMS((void)); -extern void parse_bashopts PARAMS((char *)); -extern void initialize_bashopts PARAMS((int)); +extern void set_bashopts (void); +extern void parse_bashopts (char *); +extern void initialize_bashopts (int); -extern void set_compatibility_opts PARAMS((void)); +extern void set_compatibility_opts (void); /* Functions from type.def */ -extern int describe_command PARAMS((char *, int)); +extern int describe_command (char *, int); /* Functions from setattr.def */ -extern int set_or_show_attributes PARAMS((WORD_LIST *, int, int)); -extern int show_all_var_attributes PARAMS((int, int)); -extern int show_local_var_attributes PARAMS((int, int)); -extern int show_var_attributes PARAMS((SHELL_VAR *, int, int)); -extern int show_name_attributes PARAMS((char *, int)); -extern int show_localname_attributes PARAMS((char *, int)); -extern int show_func_attributes PARAMS((char *, int)); -extern void set_var_attribute PARAMS((char *, int, int)); -extern int var_attribute_string PARAMS((SHELL_VAR *, int, char *)); +extern int set_or_show_attributes (WORD_LIST *, int, int); +extern int show_all_var_attributes (int, int); +extern int show_local_var_attributes (int, int); +extern int show_var_attributes (SHELL_VAR *, int, int); +extern int show_name_attributes (char *, int); +extern int show_localname_attributes (char *, int); +extern int show_func_attributes (char *, int); +extern void set_var_attribute (char *, int, int); +extern int var_attribute_string (SHELL_VAR *, int, char *); /* Functions from pushd.def */ -extern char *get_dirstack_from_string PARAMS((char *)); -extern char *get_dirstack_element PARAMS((intmax_t, int)); -extern void set_dirstack_element PARAMS((intmax_t, int, char *)); -extern WORD_LIST *get_directory_stack PARAMS((int)); +extern char *get_dirstack_from_string (char *); +extern char *get_dirstack_element (intmax_t, int); +extern void set_dirstack_element (intmax_t, int, char *); +extern WORD_LIST *get_directory_stack (int); /* Functions from evalstring.c */ -extern int parse_and_execute PARAMS((char *, const char *, int)); -extern int evalstring PARAMS((char *, const char *, int)); -extern void parse_and_execute_cleanup PARAMS((int)); -extern int parse_string PARAMS((char *, const char *, int, COMMAND **, char **)); -extern int should_suppress_fork PARAMS((COMMAND *)); -extern int can_optimize_connection PARAMS((COMMAND *)); -extern int can_optimize_cat_file PARAMS((COMMAND *)); -extern void optimize_connection_fork PARAMS((COMMAND *)); -extern void optimize_subshell_command PARAMS((COMMAND *)); -extern void optimize_shell_function PARAMS((COMMAND *)); +extern int parse_and_execute (char *, const char *, int); +extern int evalstring (char *, const char *, int); +extern void parse_and_execute_cleanup (int); +extern int parse_string (char *, const char *, int, COMMAND **, char **); +extern int should_suppress_fork (COMMAND *); +extern int can_optimize_connection (COMMAND *); +extern int can_optimize_cat_file (COMMAND *); +extern void optimize_connection_fork (COMMAND *); +extern void optimize_subshell_command (COMMAND *); +extern void optimize_shell_function (COMMAND *); /* Functions from evalfile.c */ -extern int maybe_execute_file PARAMS((const char *, int)); -extern int force_execute_file PARAMS((const char *, int)); -extern int source_file PARAMS((const char *, int)); -extern int fc_execute_file PARAMS((const char *)); +extern int maybe_execute_file (const char *, int); +extern int force_execute_file (const char *, int); +extern int source_file (const char *, int); +extern int fc_execute_file (const char *); /* variables from common.c */ extern sh_builtin_func_t *this_shell_builtin; extern sh_builtin_func_t *last_shell_builtin; -extern SHELL_VAR *builtin_bind_variable PARAMS((char *, char *, int)); -extern SHELL_VAR *builtin_bind_var_to_int PARAMS((char *, intmax_t, int)); -extern int builtin_unbind_variable PARAMS((const char *)); +extern SHELL_VAR *builtin_bind_variable (char *, char *, int); +extern SHELL_VAR *builtin_bind_var_to_int (char *, intmax_t, int); +extern int builtin_unbind_variable (const char *); -extern SHELL_VAR *builtin_find_indexed_array PARAMS((char *, int)); -extern int builtin_arrayref_flags PARAMS((WORD_DESC *, int)); +extern SHELL_VAR *builtin_find_indexed_array (char *, int); +extern int builtin_arrayref_flags (WORD_DESC *, int); /* variables from evalfile.c */ extern int sourcelevel; @@ -275,9 +275,9 @@ extern int wait_intr_flag; #if defined (ARRAY_VARS) #define SET_VFLAGS(wordflags, vflags, bindflags) \ do { \ - vflags = assoc_expand_once ? VA_NOEXPAND : 0; \ - bindflags = assoc_expand_once ? ASS_NOEXPAND : 0; \ - if (assoc_expand_once && (wordflags & W_ARRAYREF)) \ + vflags = array_expand_once ? VA_NOEXPAND : 0; \ + bindflags = array_expand_once ? ASS_NOEXPAND : 0; \ + if (array_expand_once && (wordflags & W_ARRAYREF)) \ vflags |= VA_ONEWORD|VA_NOEXPAND; \ if (vflags & VA_NOEXPAND) \ bindflags |= ASS_NOEXPAND; \ diff --git a/builtins/complete.def b/builtins/complete.def index 6d600efb5..236cd42c9 100644 --- a/builtins/complete.def +++ b/builtins/complete.def @@ -1,7 +1,7 @@ This file is complete.def, from which is created complete.c. It implements the builtins "complete", "compgen", and "compopt" in Bash. -Copyright (C) 1999-2021 Free Software Foundation, Inc. +Copyright (C) 1999-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -27,8 +27,8 @@ $SHORT_DOC complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G glo Specify how arguments are to be completed by Readline. For each NAME, specify how arguments are to be completed. If no options -are supplied, existing completion specifications are printed in a way that -allows them to be reused as input. +or NAMEs are supplied, display existing completion specifications in a way +that allows them to be reused as input. Options: -p print existing completion specifications in a reusable format @@ -84,23 +84,23 @@ struct _optflags { int Iflag; }; -static int find_compact PARAMS((char *)); -static int find_compopt PARAMS((char *)); +static int find_compact (char *); +static int find_compopt (char *); -static int build_actions PARAMS((WORD_LIST *, struct _optflags *, unsigned long *, unsigned long *)); +static int build_actions (WORD_LIST *, struct _optflags *, unsigned long *, unsigned long *, char **); -static int remove_cmd_completions PARAMS((WORD_LIST *)); +static int remove_cmd_completions (WORD_LIST *); -static int print_one_completion PARAMS((char *, COMPSPEC *)); -static int print_compitem PARAMS((BUCKET_CONTENTS *)); -static void print_compopts PARAMS((const char *, COMPSPEC *, int)); -static void print_all_completions PARAMS((void)); -static int print_cmd_completions PARAMS((WORD_LIST *)); +static int print_one_completion (char *, COMPSPEC *); +static int print_compitem (BUCKET_CONTENTS *); +static void print_compopts (const char *, COMPSPEC *, int); +static void print_all_completions (void); +static int print_cmd_completions (WORD_LIST *); -static void print_compoptions PARAMS((unsigned long, int)); -static void print_compactions PARAMS((unsigned long)); -static void print_arg PARAMS((const char *, const char *, int)); -static void print_cmd_name PARAMS((const char *)); +static void print_compoptions (unsigned long, int); +static void print_compactions (unsigned long); +static void print_arg (const char *, const char *, int); +static void print_cmd_name (const char *); static char *Garg, *Warg, *Parg, *Sarg, *Xarg, *Farg, *Carg; @@ -145,6 +145,7 @@ static const struct _compopt { { "default", COPT_DEFAULT }, { "dirnames", COPT_DIRNAMES }, { "filenames",COPT_FILENAMES}, + { "fullquote",COPT_FULLQUOTE}, { "noquote", COPT_NOQUOTE }, { "nosort", COPT_NOSORT }, { "nospace", COPT_NOSPACE }, @@ -153,8 +154,7 @@ static const struct _compopt { }; static int -find_compact (name) - char *name; +find_compact (char *name) { register int i; @@ -165,8 +165,7 @@ find_compact (name) } static int -find_compopt (name) - char *name; +find_compopt (char *name) { register int i; @@ -182,6 +181,8 @@ find_compopt (name) bitmap of compspec options (arguments to `-o'). PP, if non-null, gets 1 if -p is supplied; RP, if non-null, gets 1 if -r is supplied. If either is null, the corresponding option generates an error. + VNAMEP is a pointer to a string to store the name of the output variable + supplied with the -V option. This also sets variables corresponding to options that take arguments as a side effect; the caller should ensure that those variables are set to NULL before calling build_actions. Return value: @@ -191,10 +192,7 @@ find_compopt (name) */ static int -build_actions (list, flagp, actp, optp) - WORD_LIST *list; - struct _optflags *flagp; - unsigned long *actp, *optp; +build_actions (WORD_LIST *list, struct _optflags *flagp, unsigned long *actp, unsigned long *optp, char **vnamep) { int opt, ind, opt_given; unsigned long acts, copts; @@ -204,7 +202,7 @@ build_actions (list, flagp, actp, optp) opt_given = 0; reset_internal_getopt (); - while ((opt = internal_getopt (list, "abcdefgjko:prsuvA:G:W:P:S:X:F:C:DEI")) != -1) + while ((opt = internal_getopt (list, "abcdefgjko:prsuvA:G:W:P:S:X:F:C:V:DEI")) != -1) { opt_given = 1; switch (opt) @@ -346,6 +344,25 @@ build_actions (list, flagp, actp, optp) case 'S': Sarg = list_optarg; break; + case 'V': +#if defined (ARRAY_VARS) + if (vnamep) + { + *vnamep = list_optarg; + if (valid_identifier (list_optarg) == 0) + { + sh_invalidid (list_optarg); + return (EX_USAGE); + } + } + else +#endif + { + sh_invalidopt ("-V"); + builtin_usage (); + return (EX_USAGE); + } + break; case 'W': Warg = list_optarg; break; @@ -367,8 +384,7 @@ build_actions (list, flagp, actp, optp) /* Add, remove, and display completion specifiers. */ int -complete_builtin (list) - WORD_LIST *list; +complete_builtin (WORD_LIST *list) { int opt_given, rval; unsigned long acts, copts; @@ -391,7 +407,7 @@ complete_builtin (list) /* Build the actions from the arguments. Also sets the [A-Z]arg variables as a side effect if they are supplied as options. */ - rval = build_actions (list, &oflags, &acts, &copts); + rval = build_actions (list, &oflags, &acts, &copts, (char **)NULL); if (rval == EX_USAGE) return (rval); opt_given = rval != EXECUTION_FAILURE; @@ -473,8 +489,7 @@ complete_builtin (list) } static int -remove_cmd_completions (list) - WORD_LIST *list; +remove_cmd_completions (WORD_LIST *list) { WORD_LIST *l; int ret; @@ -491,9 +506,7 @@ remove_cmd_completions (list) } static void -print_compoptions (copts, full) - unsigned long copts; - int full; +print_compoptions (unsigned long copts, int full) { const struct _compopt *co; @@ -505,8 +518,7 @@ print_compoptions (copts, full) } static void -print_compactions (acts) - unsigned long acts; +print_compactions (unsigned long acts) { const struct _compacts *ca; @@ -522,9 +534,7 @@ print_compactions (acts) } static void -print_arg (arg, flag, quote) - const char *arg, *flag; - int quote; +print_arg (const char *arg, const char *flag, int quote) { char *x; @@ -538,8 +548,7 @@ print_arg (arg, flag, quote) } static void -print_cmd_name (cmd) - const char *cmd; +print_cmd_name (const char *cmd) { char *x; @@ -562,9 +571,7 @@ print_cmd_name (cmd) } static int -print_one_completion (cmd, cs) - char *cmd; - COMPSPEC *cs; +print_one_completion (char *cmd, COMPSPEC *cs) { printf ("complete "); @@ -592,10 +599,7 @@ print_one_completion (cmd, cs) } static void -print_compopts (cmd, cs, full) - const char *cmd; - COMPSPEC *cs; - int full; +print_compopts (const char *cmd, COMPSPEC *cs, int full) { printf ("compopt "); @@ -606,8 +610,7 @@ print_compopts (cmd, cs, full) } static int -print_compitem (item) - BUCKET_CONTENTS *item; +print_compitem (BUCKET_CONTENTS *item) { COMPSPEC *cs; char *cmd; @@ -619,14 +622,13 @@ print_compitem (item) } static void -print_all_completions () +print_all_completions (void) { progcomp_walk (print_compitem); } static int -print_cmd_completions (list) - WORD_LIST *list; +print_cmd_completions (WORD_LIST *list) { WORD_LIST *l; COMPSPEC *cs; @@ -650,20 +652,22 @@ print_cmd_completions (list) $BUILTIN compgen $DEPENDS_ON PROGRAMMABLE_COMPLETION $FUNCTION compgen_builtin -$SHORT_DOC compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word] +$SHORT_DOC compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word] Display possible completions depending on the options. Intended to be used from within a shell function generating possible -completions. If the optional WORD argument is supplied, matches against -WORD are generated. +completions. If the optional WORD argument is present, generate matches +against WORD. + +If the -V option is supplied, store the possible completions in the indexed +array VARNAME instead of printing them to the standard output. Exit Status: Returns success unless an invalid option is supplied or an error occurs. $END int -compgen_builtin (list) - WORD_LIST *list; +compgen_builtin (WORD_LIST *list) { int rval; unsigned long acts, copts; @@ -671,7 +675,9 @@ compgen_builtin (list) STRINGLIST *sl; char *word, **matches; char *old_line; - int old_ind; + int old_ind, old_completion, old_quoting, old_suppress; + SHELL_VAR *var; + char *varname; if (list == 0) return (EXECUTION_SUCCESS); @@ -679,10 +685,11 @@ compgen_builtin (list) acts = copts = (unsigned long)0L; Garg = Warg = Parg = Sarg = Xarg = Farg = Carg = (char *)NULL; cs = (COMPSPEC *)NULL; + varname = 0; /* Build the actions from the arguments. Also sets the [A-Z]arg variables as a side effect if they are supplied as options. */ - rval = build_actions (list, (struct _optflags *)NULL, &acts, &copts); + rval = build_actions (list, (struct _optflags *)NULL, &acts, &copts, &varname); if (rval == EX_USAGE) return (rval); if (rval == EXECUTION_FAILURE) @@ -713,6 +720,12 @@ compgen_builtin (list) rval = EXECUTION_FAILURE; + old_completion = rl_filename_completion_desired; + old_quoting = rl_filename_quoting_desired; + old_suppress = rl_completion_suppress_append; + + bashline_set_filename_hooks (); + /* probably don't have to save these, just being safe */ old_line = pcomp_line; old_ind = pcomp_ind; @@ -741,15 +754,29 @@ compgen_builtin (list) strvec_dispose (matches); } - if (sl) + rl_filename_completion_desired = old_completion; + rl_filename_quoting_desired = old_quoting; + rl_completion_suppress_append = old_suppress; + +#if defined (ARRAY_VARS) + if (varname) { - if (sl->list && sl->list_len) + var = builtin_find_indexed_array (varname, 1); + if (var && sl && sl->list && sl->list_len) { + array_from_argv (array_cell (var), sl->list, sl->list_len); rval = EXECUTION_SUCCESS; - strlist_print (sl, (char *)NULL); } - strlist_dispose (sl); } + else +#endif + if (sl && sl->list && sl->list_len) + { + rval = EXECUTION_SUCCESS; + strlist_print (sl, (char *)NULL); + } + if (sl) + strlist_dispose (sl); compspec_dispose (cs); return (rval); @@ -787,8 +814,7 @@ have a completion specification defined. $END int -compopt_builtin (list) - WORD_LIST *list; +compopt_builtin (WORD_LIST *list) { int opts_on, opts_off, *opts, opt, oind, ret, Dflag, Eflag, Iflag; WORD_LIST *l, *wl; diff --git a/builtins/declare.def b/builtins/declare.def index 7a1b60c8a..cacf286c9 100644 --- a/builtins/declare.def +++ b/builtins/declare.def @@ -1,7 +1,7 @@ This file is declare.def, from which is created declare.c. It implements the builtins "declare" and "local" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -49,7 +49,8 @@ Options which set attributes: -u to convert the value of each NAME to upper case on assignment -x to make NAMEs export -Using `+' instead of `-' turns off the given attribute. +Using `+' instead of `-' turns off the given attribute, except for a, +A, and r. Variables with the integer attribute have arithmetic evaluation (see the `let' command) performed when the variable is assigned a value. @@ -90,16 +91,15 @@ $END #include "builtext.h" #include "bashgetopt.h" -static SHELL_VAR *declare_find_variable PARAMS((const char *, int, int)); -static char *declare_build_newname PARAMS((char *, char *, int, char *, int)); -static char *declare_transform_name PARAMS((char *, int, int)); +static SHELL_VAR *declare_find_variable (const char *, int, int); +static char *declare_build_newname (char *, char *, int, char *, int); +static char *declare_transform_name (char *, int, int); -static int declare_internal PARAMS((register WORD_LIST *, int)); +static int declare_internal (register WORD_LIST *, int); /* Declare or change variable attributes. */ int -declare_builtin (list) - register WORD_LIST *list; +declare_builtin (WORD_LIST *list) { return (declare_internal (list, 0)); } @@ -120,8 +120,7 @@ Returns success unless an invalid option is supplied, a variable assignment error occurs, or the shell is not executing a function. $END int -local_builtin (list) - register WORD_LIST *list; +local_builtin (WORD_LIST *list) { /* Catch a straight `local --help' before checking function context */ if (list && list->word && STREQ (list->word->word, "--help")) @@ -146,9 +145,7 @@ local_builtin (list) #endif static SHELL_VAR * -declare_find_variable (name, mkglobal, chklocal) - const char *name; - int mkglobal, chklocal; +declare_find_variable (const char *name, int mkglobal, int chklocal) { SHELL_VAR *var; @@ -169,11 +166,7 @@ declare_find_variable (name, mkglobal, chklocal) NAME[SUBSCRIPT][[+]=VALUE] from expanding a nameref into NAME */ static char * -declare_build_newname (name, subscript_start, offset, value, aflags) - char *name, *subscript_start; - int offset; - char *value; - int aflags; +declare_build_newname (char *name, char *subscript_start, int offset, char *value, int aflags) { size_t namelen, savelen; char *ret; @@ -203,9 +196,7 @@ declare_build_newname (name, subscript_start, offset, value, aflags) } static char * -declare_transform_name (name, flags_on, flags_off) - char *name; - int flags_on, flags_off; +declare_transform_name (char *name, int flags_on, int flags_off) { SHELL_VAR *var, *v; char *newname; @@ -227,11 +218,48 @@ declare_transform_name (name, flags_on, flags_off) return (newname); } +/* Some option combinations that don't make any sense */ +static int +declare_invalid_opts (int flags_on, int flags_off) +{ + if ((flags_on & att_function) && (flags_on & (att_array|att_assoc|att_integer|att_nameref))) + { + char *optchar; + + if (flags_on & att_nameref) + optchar = "-n"; + else if (flags_on & att_integer) + optchar = "-i"; + else if (flags_on & att_assoc) + optchar = "-A"; + else if (flags_on & att_array) + optchar = "-a"; + + sh_invalidopt (optchar); + return (EXECUTION_FAILURE); + } + else if ((flags_on & att_assoc) && (flags_off & att_assoc)) + { + sh_invalidopt ("-A"); + return (EX_BADUSAGE); + } + else if ((flags_on & att_array) && (flags_off & att_array)) + { + sh_invalidopt ("-a"); + return (EX_BADUSAGE); + } + else if ((flags_on & att_assoc) && (flags_on & att_array)) + { + sh_invalidopt ("-a"); + return (EX_BADUSAGE); + } + + return 0; +} + /* The workhorse function. */ static int -declare_internal (list, local_var) - register WORD_LIST *list; - int local_var; +declare_internal (WORD_LIST *list, int local_var) { int flags_on, flags_off, *flags; int any_failed, assign_error, pflag, nodefs, opt, onref, offref; @@ -255,6 +283,10 @@ declare_internal (list, local_var) case 'a': #if defined (ARRAY_VARS) *flags |= att_array; +#if 0 + if (flags == &flags_on) + *flags &= ~att_assoc; /* last one wins */ +#endif break; #else builtin_usage (); @@ -263,6 +295,10 @@ declare_internal (list, local_var) case 'A': #if defined (ARRAY_VARS) *flags |= att_assoc; +#if 0 + if (flags == &flags_on) + *flags &= ~att_array; /* last one wins */ +#endif break; #else builtin_usage (); @@ -370,24 +406,11 @@ declare_internal (list, local_var) return (sh_chkwrite (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS)); } - /* Some option combinations that don't make any sense */ - if ((flags_on & att_function) && (flags_on & (att_array|att_assoc|att_integer|att_nameref))) - { - char *optchar; - - if (flags_on & att_nameref) - optchar = "-n"; - else if (flags_on & att_integer) - optchar = "-i"; - else if (flags_on & att_assoc) - optchar = "-A"; - else if (flags_on & att_array) - optchar = "-a"; - - sh_invalidopt (optchar); - return (EXECUTION_FAILURE); - } - + /* check for some invalid option combinations that are usage errors */ + opt = declare_invalid_opts (flags_on, flags_off); + if (opt != 0) + return (opt); + #define NEXT_VARIABLE() free (name); list = list->next; continue /* There are arguments left, so we are making variables. */ @@ -404,7 +427,7 @@ declare_internal (list, local_var) name = savestring (list->word->word); wflags = list->word->flags; #if defined (ARRAY_VARS) - assoc_noexpand = assoc_expand_once && (wflags & W_ASSIGNMENT); + assoc_noexpand = array_expand_once && (wflags & W_ASSIGNMENT); #else assoc_noexpand = 0; #endif @@ -442,9 +465,14 @@ declare_internal (list, local_var) /* Can't define functions using assignment statements */ if (offset && (flags_on & att_function)) /* declare -f [-rix] foo=bar */ { - builtin_error (_("cannot use `-f' to make functions")); - free (name); - return (EXECUTION_FAILURE); + if (var = find_function (name)) + offset = 0; + else + { + builtin_error (_("cannot use `-f' to make functions")); + free (name); + return (EXECUTION_FAILURE); + } } /* There should be a way, however, to let people look at a particular @@ -456,7 +484,7 @@ declare_internal (list, local_var) /* Should we restrict this when the shell is in posix mode even if the function was created before the shell entered posix mode? Previous versions of the shell enforced the restriction. */ - if (posixly_correct && legal_identifier (name) == 0) + if (posixly_correct && valid_identifier (name) == 0) { sh_invalidid (name); assign_error++; @@ -583,7 +611,7 @@ restart_new_var_name: #endif /* Ensure the argument is a valid, well-formed shell identifier. */ - if (legal_identifier (name) == 0) + if (valid_identifier (name) == 0) { sh_invalidid (name); assign_error++; @@ -644,6 +672,10 @@ restart_new_var_name: any_failed++; NEXT_VARIABLE (); } + /* See below; ksh93 doesn't allow the nameref attribute to be removed + from a readonly nameref that has a value, even if it doesn't + reference an existing variable, so we don't allow it for + compatibility. */ if (var && nameref_p (var) && readonly_p (var) && nameref_cell (var) && (flags_off & att_nameref)) { sh_readonly (name); @@ -683,7 +715,7 @@ restart_new_var_name: if (refvar && nameref_p (refvar) == 0) refvar = 0; /* If the nameref is readonly but doesn't have a value, ksh93 - allows the nameref attribute to be removed. If it's readonly + allows the nameref attribute to be removed. If it's readonly and has a value, even if the value doesn't reference an existing variable, we disallow the modification */ if (refvar && nameref_cell (refvar) && readonly_p (refvar)) @@ -850,10 +882,26 @@ restart_new_var_name: else if ((readonly_p (var) || noassign_p (var)) && offset) { if (readonly_p (var)) - sh_readonly (name); - assign_error++; + { + sh_readonly (name); + assign_error++; + } + /* just ignore attempts to assign to noassign variables; returning + EXECUTION_FAILURE would cause set -e to exit the shell. */ + NEXT_VARIABLE (); + } +#if 1 + /* TAG:bash-5.3 20240216 */ + /* Cannot set or unset invalid attributes on readonly variables */ + else if (readonly_p (var) && ((flags_on & invalid_readonly_attrs) || (flags_off & invalid_readonly_attrs))) + { + /* The restrictions on namerefs and readonly variables are handled + above. */ + sh_readonly (name_cell (var)); + any_failed++; NEXT_VARIABLE (); } +#endif #if defined (ARRAY_VARS) /* Array variable error checking. */ @@ -884,7 +932,7 @@ restart_new_var_name: simple_array_assign = 1; else if ((making_array_special || creating_array || array_exists) && offset) { - int vlen; + size_t vlen; vlen = STRLEN (value); /*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/ @@ -1001,7 +1049,10 @@ restart_new_var_name: /* If we found this variable in the temporary environment, as with `var=value declare -x var', make sure it is treated identically to `var=value export var'. Do the same for `declare -r' and - `readonly'. Preserve the attributes, except for att_tempvar. */ + `readonly'. Preserve the attributes, except for att_tempvar. + This doesn't happen in functions, since declare in shell functions + always creates local variables (that inherit their value from the + tempenv variable). We don't check variable_context; maybe we should. */ /* XXX -- should this create a variable in the global scope, or modify the local variable flags? ksh93 has it modify the global scope. @@ -1010,22 +1061,32 @@ restart_new_var_name: if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var)) { SHELL_VAR *tv; - char *tvalue; + /* Temporary environment? Or in the local variable context? */ tv = find_tempenv_variable (name_cell (var)); if (tv) { - tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring (""); - tv = bind_variable (name_cell (var), tvalue, 0); + /* We don't bother with modifying the temporary env because + we're already using it. */ + tv = bind_variable (name_cell (var), value_cell (var), ASS_NOTEMPENV); + if (tv) { +#if defined (ARRAY_VARS) + /* copy array value if array variable */ + if ((array_p (var) || assoc_p (var))) + arrayvar_copyval (var, tv); +#endif + /* then copy attributes */ tv->attributes |= var->attributes & ~att_tempvar; - if (tv->context > 0) + if (tv->context > 0 && local_p (var) == 0) /* just paranoia here */ VSETATTR (tv, att_propagate); } - free (tvalue); } - VSETATTR (var, att_propagate); + /* XXX - don't propagate local variables back to a previous scope, + even in posix mode. */ + if (local_p (var) == 0) + VSETATTR (var, att_propagate); } /* Turn on nameref attribute we deferred above. */ diff --git a/builtins/echo.def b/builtins/echo.def index 4e2243dbe..37b0bbac1 100644 --- a/builtins/echo.def +++ b/builtins/echo.def @@ -1,7 +1,7 @@ This file is echo.def, from which is created echo.c. It implements the builtin "echo" in Bash. -Copyright (C) 1987-2018 Free Software Foundation, Inc. +Copyright (C) 1987-2018,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -107,10 +107,10 @@ int xpg_echo = 0; `-n', then don't print a trailing newline. We also support the echo syntax from Version 9 Unix systems. */ int -echo_builtin (list) - WORD_LIST *list; +echo_builtin (WORD_LIST *list) { - int display_return, do_v9, i, len; + int display_return, do_v9, i; + size_t len; char *temp, *s; do_v9 = xpg_echo; diff --git a/builtins/enable.def b/builtins/enable.def index 27d341a6f..136884bf5 100644 --- a/builtins/enable.def +++ b/builtins/enable.def @@ -1,7 +1,7 @@ This file is enable.def, from which is created enable.c. It implements the builtin "enable" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -41,6 +41,11 @@ Options controlling dynamic loading: Without options, each NAME is enabled. +On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH +defines a search path for the directory containing FILENAMEs that do +not contain a slash. It may include "." to force a search of the current +directory. + To use the `test' found in $PATH instead of the shell builtin version, type `enable -n test'. @@ -85,13 +90,13 @@ $END #define SFLAG 0x20 #if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM) -static int dyn_load_builtin PARAMS((WORD_LIST *, int, char *)); +static int dyn_load_builtin (WORD_LIST *, int, char *); #endif #if defined (HAVE_DLCLOSE) -static int dyn_unload_builtin PARAMS((char *)); -static void delete_builtin PARAMS((struct builtin *)); -static int local_dlclose PARAMS((void *)); +static int dyn_unload_builtin (char *); +static void delete_builtin (struct builtin *); +static int local_dlclose (void *); #endif #define STRUCT_SUFFIX "_struct" @@ -99,15 +104,14 @@ static int local_dlclose PARAMS((void *)); #define LOAD_SUFFIX "_builtin_load" #define UNLOAD_SUFFIX "_builtin_unload" -static void list_some_builtins PARAMS((int)); -static int enable_shell_command PARAMS((char *, int)); +static void list_some_builtins (int); +static int enable_shell_command (char *, int); /* Enable/disable shell commands present in LIST. If list is not specified, then print out a list of shell commands showing which are enabled and which are disabled. */ int -enable_builtin (list) - WORD_LIST *list; +enable_builtin (WORD_LIST *list) { int result, flags; int opt, filter; @@ -194,6 +198,8 @@ enable_builtin (list) result = EXECUTION_FAILURE; /* normalize return value */ #if defined (PROGRAMMABLE_COMPLETION) set_itemlist_dirty (&it_builtins); + set_itemlist_dirty (&it_enabled); + set_itemlist_dirty (&it_disabled); #endif } #endif @@ -209,6 +215,8 @@ enable_builtin (list) } #if defined (PROGRAMMABLE_COMPLETION) set_itemlist_dirty (&it_builtins); + set_itemlist_dirty (&it_enabled); + set_itemlist_dirty (&it_disabled); #endif } #endif @@ -216,32 +224,37 @@ enable_builtin (list) { while (list) { - opt = enable_shell_command (list->word->word, flags & NFLAG); + char *command; + + command = list->word->word; + opt = enable_shell_command (command, flags & NFLAG); next = list->next; #if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM) /* If we try to enable a non-existent builtin, and we have dynamic loading, try the equivalent of `enable -f name name'. */ - if (opt == EX_NOTFOUND) + if (*command && (flags & NFLAG) == 0 && opt == EX_NOTFOUND) { int dflags, r; dflags = ENABLED|SILENT|((flags & SFLAG) ? SPECIAL : 0); list->next = 0; - r = dyn_load_builtin (list, dflags, list->word->word); + r = dyn_load_builtin (list, dflags, command); list->next = next; if (r == EXECUTION_SUCCESS) opt = r; #if defined (PROGRAMMABLE_COMPLETION) set_itemlist_dirty (&it_builtins); + set_itemlist_dirty (&it_enabled); + set_itemlist_dirty (&it_disabled); #endif } #endif if (opt == EX_NOTFOUND) { - sh_notbuiltin (list->word->word); + sh_notbuiltin (command); result = EXECUTION_FAILURE; } else if (opt != EXECUTION_SUCCESS) @@ -254,10 +267,9 @@ enable_builtin (list) } /* List some builtins. - FILTER is a mask with two slots: ENABLED and DISABLED. */ + FILTER is a mask with three slots: SPECIAL, ENABLED, and DISABLED. */ static void -list_some_builtins (filter) - int filter; +list_some_builtins (int filter) { register int i; @@ -281,9 +293,7 @@ list_some_builtins (filter) /* Enable the shell command NAME. If DISABLE_P is non-zero, then disable NAME instead. */ static int -enable_shell_command (name, disable_p) - char *name; - int disable_p; +enable_shell_command (char *name, int disable_p) { struct builtin *b; @@ -318,15 +328,13 @@ enable_shell_command (name, disable_p) #endif static int -dyn_load_builtin (list, flags, filename) - WORD_LIST *list; - int flags; - char *filename; +dyn_load_builtin (WORD_LIST *list, int flags, char *filename) { WORD_LIST *l; void *handle; - int total, size, new, replaced, r; + int total, replaced, r; + size_t size, new; char *struct_name, *name, *funcname; sh_load_func_t *loadfunc; struct builtin **new_builtins, *b, *new_shell_builtins, *old_builtin; @@ -339,32 +347,33 @@ dyn_load_builtin (list, flags, filename) #define RTLD_LAZY 1 #endif - handle = 0; - if (absolute_program (filename) == 0) - { - loadables_path = get_string_value ("BASH_LOADABLES_PATH"); - if (loadables_path) - { - load_path = find_in_path (filename, loadables_path, FS_NODIRS|FS_EXEC_PREFERRED); - if (load_path) - { #if defined (_AIX) - handle = dlopen (load_path, RTLD_NOW|RTLD_GLOBAL); +# define DLFLAGS (RTLD_NOW|RTLD_GLOBAL) #else - handle = dlopen (load_path, RTLD_LAZY); +# define DLFLAGS RTLD_LAZY #endif /* !_AIX */ - free (load_path); - } + + handle = 0; + if (absolute_program (filename)) + handle = dlopen (filename, DLFLAGS); + else if (loadables_path = path_value ("BASH_LOADABLES_PATH", 1)) + { + /* If we have a loadables path, don't fall back to the current directory. */ + load_path = find_in_path (filename, loadables_path, FS_NODIRS|FS_EXEC_PREFERRED); + if (load_path) + { + handle = dlopen (load_path, DLFLAGS); + free (load_path); } } + else /* no loadables path, look in current directory */ + { + char *openname; - /* Fall back to current directory for now */ - if (handle == 0) -#if defined (_AIX) - handle = dlopen (filename, RTLD_NOW|RTLD_GLOBAL); -#else - handle = dlopen (filename, RTLD_LAZY); -#endif /* !_AIX */ + openname = make_absolute (filename, "."); + handle = dlopen (openname, DLFLAGS); + free (openname); + } if (handle == 0) { @@ -387,9 +396,14 @@ dyn_load_builtin (list, flags, filename) /* For each new builtin in the shared object, find it and its describing structure. If this is overwriting an existing builtin, do so, otherwise save the loaded struct for creating the new list of builtins. */ - for (replaced = new = 0; list; list = list->next) + for (replaced = 0, new = 0; list; list = list->next) { name = list->word->word; + if (absolute_program (name)) + { + builtin_error (_("%s: builtin names may not contain slashes"), name); + continue; + } size = strlen (name); struct_name = (char *)xmalloc (size + 8); @@ -433,6 +447,8 @@ dyn_load_builtin (list, flags, filename) b->flags &= ~STATIC_BUILTIN; if (flags & SPECIAL) b->flags |= SPECIAL_BUILTIN; + if (flags & DISABLED) + b->flags &= ~BUILTIN_ENABLED; b->handle = handle; if (old_builtin) @@ -483,18 +499,13 @@ dyn_load_builtin (list, flags, filename) #if defined (HAVE_DLCLOSE) static void -delete_builtin (b) - struct builtin *b; +delete_builtin (struct builtin *b) { int ind, size; struct builtin *new_shell_builtins; /* XXX - funky pointer arithmetic - XXX */ -#ifdef __STDC__ ind = b - shell_builtins; -#else - ind = ((int)b - (int)shell_builtins) / sizeof (struct builtin); -#endif size = num_shell_builtins * sizeof (struct builtin); new_shell_builtins = (struct builtin *)xmalloc (size); @@ -519,8 +530,7 @@ delete_builtin (b) /* Tenon's MachTen has a dlclose that doesn't return a value, so we finesse it with a local wrapper. */ static int -local_dlclose (handle) - void *handle; +local_dlclose (void *handle) { #if !defined (__MACHTEN__) return (dlclose (handle)); @@ -531,14 +541,14 @@ local_dlclose (handle) } static int -dyn_unload_builtin (name) - char *name; +dyn_unload_builtin (char *name) { struct builtin *b; void *handle; char *funcname; sh_unload_func_t *unloadfunc; - int ref, i, size; + int ref, i; + size_t size; b = builtin_address_internal (name, 1); if (b == 0) diff --git a/builtins/eval.def b/builtins/eval.def index f459bce34..0160b9618 100644 --- a/builtins/eval.def +++ b/builtins/eval.def @@ -1,7 +1,7 @@ This file is eval.def, from which is created eval.c. It implements the builtin "eval" in Bash. -Copyright (C) 1987-2016 Free Software Foundation, Inc. +Copyright (C) 1987-2016,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -46,8 +46,7 @@ $END /* Parse the string that these words make, and execute the command found. */ int -eval_builtin (list) - WORD_LIST *list; +eval_builtin (WORD_LIST *list) { if (no_options (list)) return (EX_USAGE); diff --git a/builtins/evalfile.c b/builtins/evalfile.c index 604de577e..17a568a04 100644 --- a/builtins/evalfile.c +++ b/builtins/evalfile.c @@ -1,6 +1,6 @@ /* evalfile.c - read and evaluate commands from a file or file descriptor */ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. +/* Copyright (C) 1996-2017,2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -68,14 +68,13 @@ extern int errno; #define FEVAL_CHECKBINARY 0x040 #define FEVAL_REGFILE 0x080 #define FEVAL_NOPUSHARGS 0x100 +#define FEVAL_RETRY 0x200 /* How many `levels' of sourced files we have. */ int sourcelevel = 0; static int -_evalfile (filename, flags) - const char *filename; - int flags; +_evalfile (const char *filename, int flags) { volatile int old_interactive; procenv_t old_return_catch; @@ -98,17 +97,16 @@ _evalfile (filename, flags) USE_VAR(pflags); -#if defined (ARRAY_VARS) - GET_ARRAY_FROM_VAR ("FUNCNAME", funcname_v, funcname_a); - GET_ARRAY_FROM_VAR ("BASH_SOURCE", bash_source_v, bash_source_a); - GET_ARRAY_FROM_VAR ("BASH_LINENO", bash_lineno_v, bash_lineno_a); -# if defined (DEBUGGER) - GET_ARRAY_FROM_VAR ("BASH_ARGV", bash_argv_v, bash_argv_a); - GET_ARRAY_FROM_VAR ("BASH_ARGC", bash_argc_v, bash_argc_a); -# endif -#endif - - fd = open (filename, O_RDONLY); + errno = 0; + do + { + fd = open (filename, O_RDONLY); + i = errno; + if (fd < 0 && i == EINTR) + QUIT; + errno = i; + } + while (fd < 0 && errno == EINTR && (flags & FEVAL_RETRY)); if (fd < 0 || (fstat (fd, &finfo) == -1)) { @@ -153,7 +151,7 @@ file_error_and_exit: (*errfunc) (_("%s: file is too large"), filename); close (fd); return ((flags & FEVAL_BUILTIN) ? EXECUTION_FAILURE : -1); - } + } if (S_ISREG (finfo.st_mode) && file_size <= SSIZE_MAX) { @@ -161,6 +159,8 @@ file_error_and_exit: nr = read (fd, string, file_size); if (nr >= 0) string[nr] = '\0'; + if (nr != file_size) + nr = -1; /* XXX - didn't get the whole file */ } else nr = zmapfd (fd, &string, 0); @@ -218,6 +218,7 @@ file_error_and_exit: if (flags & FEVAL_NONINT) unwind_protect_int (interactive); unwind_protect_int (sourcelevel); + unwind_protect_int (retain_fifos); } else { @@ -232,7 +233,17 @@ file_error_and_exit: return_catch_flag++; sourcelevel++; + retain_fifos++; /* XXX */ + #if defined (ARRAY_VARS) + GET_ARRAY_FROM_VAR ("FUNCNAME", funcname_v, funcname_a); + GET_ARRAY_FROM_VAR ("BASH_SOURCE", bash_source_v, bash_source_a); + GET_ARRAY_FROM_VAR ("BASH_LINENO", bash_lineno_v, bash_lineno_a); +# if defined (DEBUGGER) + GET_ARRAY_FROM_VAR ("BASH_ARGV", bash_argv_v, bash_argv_a); + GET_ARRAY_FROM_VAR ("BASH_ARGC", bash_argc_v, bash_argc_a); +# endif + array_push (bash_source_a, (char *)filename); t = itos (executing_line_number ()); array_push (bash_lineno_a, t); @@ -247,7 +258,7 @@ file_error_and_exit: fa->funcname_a = funcname_a; fa->funcname_v = funcname_v; if (flags & FEVAL_UNWINDPROT) - add_unwind_protect (restore_funcarray_state, fa); + add_unwind_protect (uw_restore_funcarray_state, fa); # if defined (DEBUGGER) /* Have to figure out a better way to do this when `source' is supplied @@ -260,7 +271,7 @@ file_error_and_exit: tt[0] = '1'; tt[1] = '\0'; array_push (bash_argc_a, tt); if (flags & FEVAL_UNWINDPROT) - add_unwind_protect (pop_args, 0); + add_unwind_protect (uw_pop_args, 0); } # endif #endif @@ -304,6 +315,7 @@ file_error_and_exit: #endif return_catch_flag--; sourcelevel--; + retain_fifos--; COPY_PROCENV (old_return_catch, return_catch); } @@ -316,15 +328,13 @@ file_error_and_exit: } int -maybe_execute_file (fname, force_noninteractive) - const char *fname; - int force_noninteractive; +maybe_execute_file (const char *fname, int force_noninteractive) { char *filename; int result, flags; filename = bash_tilde_expand (fname, 0); - flags = FEVAL_ENOENTOK; + flags = FEVAL_ENOENTOK|FEVAL_RETRY; if (force_noninteractive) flags |= FEVAL_NONINT; result = _evalfile (filename, flags); @@ -333,15 +343,13 @@ maybe_execute_file (fname, force_noninteractive) } int -force_execute_file (fname, force_noninteractive) - const char *fname; - int force_noninteractive; +force_execute_file (const char *fname, int force_noninteractive) { char *filename; int result, flags; filename = bash_tilde_expand (fname, 0); - flags = 0; + flags = FEVAL_RETRY; if (force_noninteractive) flags |= FEVAL_NONINT; result = _evalfile (filename, flags); @@ -351,8 +359,7 @@ force_execute_file (fname, force_noninteractive) #if defined (HISTORY) int -fc_execute_file (filename) - const char *filename; +fc_execute_file (const char *filename) { int flags; @@ -365,9 +372,7 @@ fc_execute_file (filename) #endif /* HISTORY */ int -source_file (filename, sflags) - const char *filename; - int sflags; +source_file (const char *filename, int sflags) { int flags, rval; diff --git a/builtins/evalstring.c b/builtins/evalstring.c index df3dd68e2..fedacdfc6 100644 --- a/builtins/evalstring.c +++ b/builtins/evalstring.c @@ -1,6 +1,6 @@ /* evalstring.c - evaluate a string as one or more shell commands. */ -/* Copyright (C) 1996-2022 Free Software Foundation, Inc. +/* Copyright (C) 1996-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -63,31 +63,47 @@ extern int errno; int parse_and_execute_level = 0; -static int cat_file PARAMS((REDIRECT *)); +static int cat_file (REDIRECT *); #define PE_TAG "parse_and_execute top" #define PS_TAG "parse_string top" #if defined (HISTORY) static void -set_history_remembering () +uw_set_history_remembering (void *ignore) { remember_on_history = enable_history_list; } + #endif static void -restore_lastcom (x) - char *x; +uw_restore_lastcom (void *x) { FREE (the_printed_command_except_trap); the_printed_command_except_trap = x; } +static void +uw_set_current_prompt_level (void *x) +{ + set_current_prompt_level ((intptr_t) x); +} + +static void +uw_pop_stream (void *x) +{ + pop_stream (); +} + +static void +uw_parser_restore_alias (void *x) +{ + parser_restore_alias (); +} + int -should_optimize_fork (command, subshell) - COMMAND *command; - int subshell; +should_optimize_fork (COMMAND *command, int subshell) { return (running_trap == 0 && command->type == cm_simple && @@ -102,9 +118,10 @@ should_optimize_fork (command, subshell) /* This has extra tests to account for STARTUP_STATE == 2, which is for -c command but has been extended to command and process substitution (basically any time you call parse_and_execute in a subshell). */ +/* ssh_reading_startup_files will never be non-zero unless someone goes + and uncomments SSH_SOURCE_BASHRC in config-top.h */ int -should_suppress_fork (command) - COMMAND *command; +should_suppress_fork (COMMAND *command) { int subshell; @@ -112,12 +129,13 @@ should_suppress_fork (command) return (startup_state == 2 && parse_and_execute_level == 1 && *bash_input.location.string == '\0' && parser_expanding_alias () == 0 && + job_control_active_p () == 0 && + ssh_reading_startup_files == 0 && should_optimize_fork (command, subshell)); } int -can_optimize_connection (command) - COMMAND *command; +can_optimize_connection (COMMAND *command) { return (*bash_input.location.string == '\0' && parser_expanding_alias () == 0 && @@ -126,8 +144,7 @@ can_optimize_connection (command) } void -optimize_connection_fork (command) - COMMAND *command; +optimize_connection_fork (COMMAND *command) { if (command->type == cm_connection && (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && @@ -141,8 +158,7 @@ optimize_connection_fork (command) } void -optimize_subshell_command (command) - COMMAND *command; +optimize_subshell_command (COMMAND *command) { if (should_optimize_fork (command, 0)) { @@ -160,8 +176,7 @@ optimize_subshell_command (command) } void -optimize_shell_function (command) - COMMAND *command; +optimize_shell_function (COMMAND *command) { COMMAND *fc; @@ -180,8 +195,7 @@ optimize_shell_function (command) } int -can_optimize_cat_file (command) - COMMAND *command; +can_optimize_cat_file (COMMAND *command) { return (command->type == cm_simple && !command->redirects && (command->flags & CMD_TIME_PIPELINE) == 0 && @@ -194,8 +208,7 @@ can_optimize_cat_file (command) /* How to force parse_and_execute () to clean up after itself. */ void -parse_and_execute_cleanup (old_running_trap) - int old_running_trap; +parse_and_execute_cleanup (int old_running_trap) { if (running_trap > 0) { @@ -215,10 +228,7 @@ parse_and_execute_cleanup (old_running_trap) } static void -parse_prologue (string, flags, tag) - char *string; - int flags; - char *tag; +parse_prologue (char *string, int flags, char *tag) { char *orig_string, *lastcom; int x; @@ -232,14 +242,15 @@ parse_prologue (string, flags, tag) unwind_protect_int (line_number); unwind_protect_int (line_number_for_err_trap); unwind_protect_int (loop_level); - unwind_protect_int (executing_list); + unwind_protect_int (interrupt_execution); unwind_protect_int (comsub_ignore_return); + unwind_protect_int (builtin_ignoring_errexit); if (flags & (SEVAL_NONINT|SEVAL_INTERACT)) unwind_protect_int (interactive); #if defined (HISTORY) if (parse_and_execute_level == 0) - add_unwind_protect (set_history_remembering, (char *)NULL); + add_unwind_protect (uw_set_history_remembering, (char *)NULL); else unwind_protect_int (remember_on_history); /* can be used in scripts */ # if defined (BANG_HISTORY) @@ -250,18 +261,18 @@ parse_prologue (string, flags, tag) if (interactive_shell) { x = get_current_prompt_level (); - add_unwind_protect (set_current_prompt_level, x); + add_unwind_protect (uw_set_current_prompt_level, (void *) (intptr_t) x); } if (the_printed_command_except_trap) { lastcom = savestring (the_printed_command_except_trap); - add_unwind_protect (restore_lastcom, lastcom); + add_unwind_protect (uw_restore_lastcom, lastcom); } - add_unwind_protect (pop_stream, (char *)NULL); + add_unwind_protect (uw_pop_stream, (char *)NULL); if (parser_expanding_alias ()) - add_unwind_protect (parser_restore_alias, (char *)NULL); + add_unwind_protect (uw_parser_restore_alias, (char *)NULL); if (orig_string && ((flags & SEVAL_NOFREE) == 0)) add_unwind_protect (xfree, orig_string); @@ -294,12 +305,9 @@ parse_prologue (string, flags, tag) */ int -parse_and_execute (string, from_file, flags) - char *string; - const char *from_file; - int flags; +parse_and_execute (char *string, const char *from_file, int flags) { - int code, lreset; + int code, lreset, ignore_return; volatile int should_jump_to_top_level, last_result; COMMAND *volatile command; volatile sigset_t pe_sigmask; @@ -309,6 +317,8 @@ parse_and_execute (string, from_file, flags) parse_and_execute_level++; lreset = flags & SEVAL_RESETLINE; + ignore_return = (this_shell_builtin == eval_builtin || this_shell_builtin == source_builtin) && + builtin_ignoring_errexit; #if defined (HAVE_POSIX_SIGNALS) /* If we longjmp and are going to go on, use this to restore signal mask */ @@ -408,6 +418,7 @@ parse_and_execute (string, from_file, flags) run_unwind_frame ("pe_dispose"); last_result = last_command_exit_value = EXECUTION_FAILURE; /* XXX */ set_pipestatus_from_exit (last_command_exit_value); + if (subshell_environment) { should_jump_to_top_level = 1; @@ -461,6 +472,8 @@ parse_and_execute (string, from_file, flags) should_jump_to_top_level = 0; last_result = last_command_exit_value = EX_BADUSAGE; set_pipestatus_from_exit (last_command_exit_value); + dispose_command (command); + global_command = (COMMAND *)NULL; reset_parser (); break; } @@ -468,14 +481,17 @@ parse_and_execute (string, from_file, flags) bitmap = new_fd_bitmap (FD_BITMAP_SIZE); begin_unwind_frame ("pe_dispose"); - add_unwind_protect (dispose_fd_bitmap, bitmap); - add_unwind_protect (dispose_command, command); /* XXX */ + add_unwind_protect (uw_dispose_fd_bitmap, bitmap); + add_unwind_protect (uw_dispose_command, command); /* XXX */ global_command = (COMMAND *)NULL; if ((subshell_environment & SUBSHELL_COMSUB) && comsub_ignore_return) command->flags |= CMD_IGNORE_RETURN; + if (ignore_return) + command->flags |= CMD_IGNORE_RETURN; + #if defined (ONESHOT) /* * IF @@ -522,7 +538,7 @@ parse_and_execute (string, from_file, flags) the global value of the flag (expaliases_flag) changes). */ local_expalias = expand_aliases; local_alflag = expaliases_flag; - if (subshell_environment & SUBSHELL_COMSUB) + if ((subshell_environment & SUBSHELL_COMSUB) || executing_funsub) expand_aliases = expaliases_flag; /* See if this is a candidate for $( instruction != r_input_direction) return -1; @@ -753,7 +763,7 @@ open_redir_file (r, fnp) fd = open(fn, O_RDONLY); if (fd < 0) { - file_error (fn); + internal_error ("%s: %s", fn, strerror (errno)); free (fn); if (fnp) *fnp = 0; @@ -762,6 +772,9 @@ open_redir_file (r, fnp) if (fnp) *fnp = fn; + else + free (fn); + return fd; } @@ -769,8 +782,7 @@ open_redir_file (r, fnp) returning errors as appropriate, then just cats the file to the standard output. */ static int -cat_file (r) - REDIRECT *r; +cat_file (REDIRECT *r) { char *fn; int fd, rval; @@ -788,10 +800,7 @@ cat_file (r) } int -evalstring (string, from_file, flags) - char *string; - const char *from_file; - int flags; +evalstring (char *string, const char *from_file, int flags) { volatile int r, rflag, rcatch; volatile int was_trap; diff --git a/builtins/exec.def b/builtins/exec.def index add908229..fc7bc6725 100644 --- a/builtins/exec.def +++ b/builtins/exec.def @@ -1,7 +1,7 @@ This file is exec.def, from which is created exec.c. It implements the builtin "exec" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2021,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -85,8 +85,7 @@ int no_exit_on_failed_exec; /* If the user wants this to look like a login shell, then prepend a `-' onto NAME and return the new name. */ static char * -mkdashname (name) - char *name; +mkdashname (char *name) { char *ret; @@ -97,15 +96,15 @@ mkdashname (name) } int -exec_builtin (list) - WORD_LIST *list; +exec_builtin (WORD_LIST *list) { - int exit_value = EXECUTION_FAILURE; + int exit_value; int cleanenv, login, opt, orig_job_control; char *argv0, *command, **args, **env, *newname, *com2; cleanenv = login = orig_job_control = 0; exec_argv0 = argv0 = (char *)NULL; + exit_value = EXECUTION_FAILURE; reset_internal_getopt (); while ((opt = internal_getopt (list, "cla:")) != -1) @@ -225,12 +224,11 @@ exec_builtin (list) default_tty_job_signals (); /* undo initialize_job_signals */ #endif /* JOB_CONTROL */ -#if defined (BUFFERED_INPUT) if (default_buffered_input >= 0) sync_buffered_stream (default_buffered_input); -#endif exit_value = shell_execve (command, args, env); + opt = errno; /* We have to set this to NULL because shell_execve has called realloc() to stuff more items at the front of the array, which may have caused @@ -243,6 +241,7 @@ exec_builtin (list) goto failed_exec; else if (executable_file (command) == 0) { + errno = opt; builtin_error (_("%s: cannot execute: %s"), command, strerror (errno)); exit_value = EX_NOEXEC; /* As per Posix.2, 3.14.6 */ } diff --git a/builtins/exit.def b/builtins/exit.def index 9c85bc582..94c2bf3f6 100644 --- a/builtins/exit.def +++ b/builtins/exit.def @@ -1,7 +1,7 @@ This file is exit.def, from which is created exit.c. It implements the builtins "exit", and "logout" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -48,14 +48,11 @@ $END #include "common.h" #include "builtext.h" /* for jobs_builtin */ -extern int check_jobs_at_exit; - -static int exit_or_logout PARAMS((WORD_LIST *)); +static int exit_or_logout (WORD_LIST *); static int sourced_logout; int -exit_builtin (list) - WORD_LIST *list; +exit_builtin (WORD_LIST *list) { CHECK_HELPOPT (list); @@ -79,8 +76,7 @@ $END /* How to logout. */ int -logout_builtin (list) - WORD_LIST *list; +logout_builtin (WORD_LIST *list) { CHECK_HELPOPT (list); @@ -94,8 +90,7 @@ logout_builtin (list) } static int -exit_or_logout (list) - WORD_LIST *list; +exit_or_logout (WORD_LIST *list) { int exit_value; @@ -145,6 +140,8 @@ exit_or_logout (list) (list == 0), use the exit status we saved before running the trap commands (trap_saved_exit_value). */ exit_value = (running_trap == 1 && list == 0) ? trap_saved_exit_value : get_exitstat (list); + if (exit_value > EX_SHERRBASE) /* some kind of error */ + return (exit_value); bash_logout (); @@ -156,7 +153,7 @@ exit_or_logout (list) } void -bash_logout () +bash_logout (void) { /* Run our `~/.bash_logout' file if it exists, and this is a login shell. */ if (login_shell && sourced_logout++ == 0 && subshell_environment == 0) diff --git a/builtins/fc.def b/builtins/fc.def index 9b8a997de..17121037a 100644 --- a/builtins/fc.def +++ b/builtins/fc.def @@ -1,7 +1,7 @@ This file is fc.def, from which is created fc.c. It implements the builtin "fc" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -45,6 +45,8 @@ 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 command. +The history builtin also operates on the history list. + Exit Status: Returns success or status of executed command; non-zero if an error occurs. $END @@ -94,9 +96,11 @@ extern int errno; #define HN_LISTING 0x01 #define HN_FIRST 0x02 -extern int unlink PARAMS((const char *)); +#ifndef HAVE_UNISTD_H +extern int unlink (const char *); +#endif -extern FILE *sh_mktmpfp PARAMS((char *, int, char **)); +extern FILE *sh_mktmpfp (char *, int, char **); extern int suppress_debug_trap_verbose; @@ -154,22 +158,28 @@ typedef struct repl { } \ } while (0) -static char *fc_dosubs PARAMS((char *, REPL *)); -static char *fc_gethist PARAMS((char *, HIST_ENTRY **, int)); -static int fc_gethnum PARAMS((char *, HIST_ENTRY **, int)); -static int fc_number PARAMS((WORD_LIST *)); -static void fc_replhist PARAMS((char *)); +static char *fc_dosubs (char *, REPL *); +static char *fc_gethist (char *, HIST_ENTRY **, int); +static int fc_gethnum (char *, HIST_ENTRY **, int); +static int fc_number (WORD_LIST *); +static void fc_replhist (char *); #ifdef INCLUDE_UNUSED -static char *fc_readline PARAMS((FILE *)); -static void fc_addhist PARAMS((char *)); +static char *fc_readline (FILE *); +static void fc_addhist (char *); #endif static void -set_verbose_flag () +uw_set_verbose_flag (void *ignore) { echo_input_at_read = verbose_flag; } +static void +uw_unlink (void *fn) +{ + unlink ((const char *)fn); +} + /* String to execute on a file that we want to edit. */ #define FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-vi}}" #if defined (STRICT_POSIX) @@ -179,8 +189,7 @@ set_verbose_flag () #endif int -fc_builtin (list) - WORD_LIST *list; +fc_builtin (WORD_LIST *list) { register int i; register char *sep; @@ -279,6 +288,15 @@ fc_builtin (list) return (EXECUTION_FAILURE); } + if (posixly_correct && list && list->next) + { + builtin_error (_("too many arguments")); + if (rlist) + FREE_RLIST (); + + return (EXECUTION_FAILURE); + } + if (rlist) { newcom = fc_dosubs (command, rlist); @@ -515,8 +533,8 @@ fc_builtin (list) will be echoed as they are read by the parser. */ begin_unwind_frame ("fc builtin"); add_unwind_protect (xfree, fn); - add_unwind_protect (unlink, fn); - add_unwind_protect (set_verbose_flag, (char *)NULL); + add_unwind_protect (uw_unlink, fn); + add_unwind_protect (uw_set_verbose_flag, (char *)NULL); unwind_protect_int (suppress_debug_trap_verbose); echo_input_at_read = 1; suppress_debug_trap_verbose = 1; @@ -529,8 +547,7 @@ fc_builtin (list) /* Return 1 if LIST->word->word is a legal number for fc's use. */ static int -fc_number (list) - WORD_LIST *list; +fc_number (WORD_LIST *list) { char *s; @@ -539,7 +556,7 @@ fc_number (list) s = list->word->word; if (*s == '-') s++; - return (legal_number (s, (intmax_t *)NULL)); + return (valid_number (s, (intmax_t *)NULL)); } /* Return an absolute index into HLIST which corresponds to COMMAND. If @@ -549,14 +566,12 @@ fc_number (list) are executing them. If MODE includes HN_FIRST we are looking for the first history number specification. */ static int -fc_gethnum (command, hlist, mode) - char *command; - HIST_ENTRY **hlist; - int mode; +fc_gethnum (char *command, HIST_ENTRY **hlist, int mode) { - int sign, n, clen, rh; - register int i, j, last_hist, real_last, listing; - register char *s; + int sign, n, rh; + size_t clen; + int i, j, last_hist, real_last, listing; + char *s; listing = mode & HN_LISTING; sign = 1; @@ -654,10 +669,7 @@ fc_gethnum (command, hlist, mode) COMMAND in HLIST, and return a malloc()'ed copy of it. MODE is 1 if we are listing commands, 0 if we are executing them. */ static char * -fc_gethist (command, hlist, mode) - char *command; - HIST_ENTRY **hlist; - int mode; +fc_gethist (char *command, HIST_ENTRY **hlist, int mode) { int i; @@ -677,10 +689,12 @@ fc_gethist (command, hlist, mode) one at a time. This can read unlimited length lines. The caller should free the storage. */ static char * -fc_readline (stream) - FILE *stream; +fc_readline (FILE *stream) { register int c; +#ifdef __MSYS__ + register int d; +#endif int line_len = 0, lindex = 0; char *line = (char *)NULL; @@ -689,6 +703,11 @@ fc_readline (stream) if ((lindex + 2) >= line_len) line = (char *)xrealloc (line, (line_len += 128)); +#ifdef __MSYS__ + if (d == '\r') + lindex--; +#endif + if (c == '\n') { line[lindex++] = '\n'; @@ -697,6 +716,10 @@ fc_readline (stream) } else line[lindex++] = c; + +#ifdef __MSYS__ + d = c; +#endif } if (!lindex) @@ -721,9 +744,7 @@ fc_readline (stream) Return a pointer to a malloc'ed string which contains the substituted command. */ static char * -fc_dosubs (command, subs) - char *command; - REPL *subs; +fc_dosubs (char *command, REPL *subs) { register char *new, *t; register REPL *r; @@ -742,10 +763,9 @@ fc_dosubs (command, subs) become the history entry, and that `fc' should never appear in the history list. This way you can do `r' to your heart's content. */ static void -fc_replhist (command) - char *command; +fc_replhist (char *command) { - int n; + size_t n; if (command == 0 || *command == '\0') return; @@ -764,8 +784,7 @@ fc_replhist (command) #ifdef INCLUDE_UNUSED /* Add LINE to the history, after removing a single trailing newline. */ static void -fc_addhist (line) - char *line; +fc_addhist (char *line) { register int n; diff --git a/builtins/fg_bg.def b/builtins/fg_bg.def index 0fb53223d..bfff5f9bc 100644 --- a/builtins/fg_bg.def +++ b/builtins/fg_bg.def @@ -1,7 +1,7 @@ This file is fg_bg.def, from which is created fg_bg.c. It implements the builtins "bg" and "fg" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -52,12 +52,11 @@ $END #include "bashgetopt.h" #if defined (JOB_CONTROL) -static int fg_bg PARAMS((WORD_LIST *, int)); +static int fg_bg (WORD_LIST *, int); /* How to bring a job into the foreground. */ int -fg_builtin (list) - WORD_LIST *list; +fg_builtin (WORD_LIST *list) { int fg_bit; register WORD_LIST *t; @@ -101,8 +100,7 @@ $END #if defined (JOB_CONTROL) /* How to put a job into the background. */ int -bg_builtin (list) - WORD_LIST *list; +bg_builtin (WORD_LIST *list) { int r; @@ -135,9 +133,7 @@ bg_builtin (list) /* How to put a job into the foreground/background. */ static int -fg_bg (list, foreground) - WORD_LIST *list; - int foreground; +fg_bg (WORD_LIST *list, int foreground) { sigset_t set, oset; int job, status, old_async_pid; diff --git a/builtins/gen-helpfiles.c b/builtins/gen-helpfiles.c index d27d306b1..4a5ac15fc 100644 --- a/builtins/gen-helpfiles.c +++ b/builtins/gen-helpfiles.c @@ -1,6 +1,6 @@ /* gen-helpfiles - create files containing builtin help text */ -/* Copyright (C) 2012-2021 Free Software Foundation, Inc. +/* Copyright (C) 2012-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -72,10 +72,6 @@ extern int errno; #endif -#if !defined (__STDC__) && !defined (strcpy) -extern char *strcpy (); -#endif /* !__STDC__ && !strcpy */ - #define whitespace(c) (((c) == ' ') || ((c) == '\t')) /* Flag values that builtins can have. */ @@ -99,15 +95,13 @@ char *helpfile_directory; /* Forward declarations. */ -int write_helpfiles PARAMS((struct builtin *)); +int write_helpfiles (struct builtin *); /* For each file mentioned on the command line, process it and write the information to STRUCTFILE and EXTERNFILE, while creating the production file if necessary. */ int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { int arg_index = 1; @@ -138,10 +132,7 @@ main (argc, argv) internationalization (gettext) and the single-string vs. multiple-strings issues. */ void -write_documentation (stream, documentation, indentation) - FILE *stream; - char *documentation; - int indentation; +write_documentation (FILE *stream, char *documentation, int indentation) { if (stream == 0) return; @@ -151,8 +142,7 @@ write_documentation (stream, documentation, indentation) } int -write_helpfiles (builtins) - struct builtin *builtins; +write_helpfiles (struct builtin *builtins) { char *helpfile, *bname, *fname; FILE *helpfp; diff --git a/builtins/getopt.c b/builtins/getopt.c index 9529bc37d..6fbb6edb1 100644 --- a/builtins/getopt.c +++ b/builtins/getopt.c @@ -1,6 +1,6 @@ /* getopt.c - getopt for Bash. Used by the getopt builtin. */ -/* Copyright (C) 1993-2009 Free Software Foundation, Inc. +/* Copyright (C) 1993-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -111,10 +111,7 @@ int sh_badopt = 0; #define NEEDARG(x) fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], x) int -sh_getopt (argc, argv, optstring) - int argc; - char *const *argv; - const char *optstring; +sh_getopt (int argc, char *const *argv, const char *optstring) { char c, *temp; @@ -216,10 +213,9 @@ sh_getopt (argc, argv, optstring) } void -sh_getopt_restore_state (argv) - char **argv; +sh_getopt_restore_state (char **argv) { - if (nextchar) + if (nextchar && argv && argv[sh_curopt]) nextchar = argv[sh_curopt] + sh_charindex; } @@ -233,14 +229,13 @@ sh_getopt_alloc_istate () } void -sh_getopt_dispose_istate (gs) - sh_getopt_state_t *gs; +sh_getopt_dispose_istate (sh_getopt_state_t *gs) { free (gs); } sh_getopt_state_t * -sh_getopt_save_istate () +sh_getopt_save_istate (void) { sh_getopt_state_t *ret; @@ -257,8 +252,7 @@ sh_getopt_save_istate () } void -sh_getopt_restore_istate (state) - sh_getopt_state_t *state; +sh_getopt_restore_istate (sh_getopt_state_t *state) { sh_optarg = state->gs_optarg; sh_optind = state->gs_optind; @@ -271,8 +265,7 @@ sh_getopt_restore_istate (state) #if 0 void -sh_getopt_debug_restore_state (argv) - char **argv; +sh_getopt_debug_restore_state (char **argv) { if (nextchar && nextchar != argv[sh_curopt] + sh_charindex) { @@ -288,9 +281,7 @@ sh_getopt_debug_restore_state (argv) the above definition of `sh_getopt'. */ int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { int c; int digit_sh_optind = 0; diff --git a/builtins/getopt.h b/builtins/getopt.h index fd9785975..a17bc0ba9 100644 --- a/builtins/getopt.h +++ b/builtins/getopt.h @@ -1,6 +1,6 @@ /* getopt.h - declarations for getopt. */ -/* Copyright (C) 1989-2020 Free Software Foundation, Inc. +/* Copyright (C) 1989-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -59,7 +59,7 @@ extern int sh_optopt; /* Set to 1 when an unrecognized option is encountered. */ extern int sh_badopt; -extern int sh_getopt PARAMS((int, char *const *, const char *)); +extern int sh_getopt (int, char *const *, const char *); typedef struct sh_getopt_state { @@ -71,12 +71,12 @@ typedef struct sh_getopt_state int gs_flags; } sh_getopt_state_t; -extern void sh_getopt_restore_state PARAMS((char **)); +extern void sh_getopt_restore_state (char **); -extern sh_getopt_state_t *sh_getopt_alloc_istate PARAMS((void)); -extern void sh_getopt_dispose_istate PARAMS((sh_getopt_state_t *)); +extern sh_getopt_state_t *sh_getopt_alloc_istate (void); +extern void sh_getopt_dispose_istate (sh_getopt_state_t *); -extern sh_getopt_state_t *sh_getopt_save_istate PARAMS((void)); -extern void sh_getopt_restore_istate PARAMS((sh_getopt_state_t *)); +extern sh_getopt_state_t *sh_getopt_save_istate (void); +extern void sh_getopt_restore_istate (sh_getopt_state_t *); #endif /* _SH_GETOPT_H */ diff --git a/builtins/getopts.def b/builtins/getopts.def index 4c39c474c..7f30bbb61 100644 --- a/builtins/getopts.def +++ b/builtins/getopts.def @@ -1,7 +1,7 @@ This file is getopts.def, from which is created getopts.c. It implements the builtin "getopts" in Bash. -Copyright (C) 1987-2019 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -86,23 +86,21 @@ $END #define G_INVALID_OPT -2 #define G_ARG_MISSING -3 -static int getopts_unbind_variable PARAMS((char *)); -static int getopts_bind_variable PARAMS((char *, char *)); -static int dogetopts PARAMS((int, char **)); +static int getopts_unbind_variable (char *); +static int getopts_bind_variable (char *, char *); +static int dogetopts (int, char **); /* getopts_reset is magic code for when OPTIND is reset. N is the value that has just been assigned to OPTIND. */ void -getopts_reset (newind) - int newind; +getopts_reset (int newind) { sh_optind = newind; sh_badopt = 0; } static int -getopts_unbind_variable (name) - char *name; +getopts_unbind_variable (char *name) { #if 0 return (unbind_variable (name)); @@ -112,12 +110,11 @@ getopts_unbind_variable (name) } static int -getopts_bind_variable (name, value) - char *name, *value; +getopts_bind_variable (char *name, char *value) { SHELL_VAR *v; - if (legal_identifier (name)) + if (valid_identifier (name)) { v = bind_variable (name, value, 0); if (v && (readonly_p (v) || noassign_p (v))) @@ -159,9 +156,7 @@ getopts_bind_variable (name, value) */ static int -dogetopts (argc, argv) - int argc; - char **argv; +dogetopts (int argc, char **argv) { int ret, special_error, old_opterr, i, n; char strval[2], numval[16]; @@ -312,29 +307,21 @@ dogetopts (argc, argv) /* The getopts builtin. Build an argv, and call dogetopts with it. */ int -getopts_builtin (list) - WORD_LIST *list; +getopts_builtin (WORD_LIST *list) { char **av; int ac, ret; + if (no_options (list)) + return (EX_USAGE); + list = loptend; /* skip over possible `--' */ + if (list == 0) { builtin_usage (); return EX_USAGE; } - reset_internal_getopt (); - if ((ret = internal_getopt (list, "")) != -1) - { - if (ret == GETOPT_HELP) - builtin_help (); - else - builtin_usage (); - return (EX_USAGE); - } - list = loptend; - av = make_builtin_argv (list, &ac); ret = dogetopts (ac, av); free ((char *)av); diff --git a/builtins/hash.def b/builtins/hash.def index 03ae5474d..ee8da9d00 100644 --- a/builtins/hash.def +++ b/builtins/hash.def @@ -1,7 +1,7 @@ This file is hash.def, from which is created hash.c. It implements the builtin "hash" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -68,20 +68,17 @@ $END #include "common.h" #include "bashgetopt.h" -extern int dot_found_in_search; - -static int add_hashed_command PARAMS((char *, int)); -static int print_hash_info PARAMS((BUCKET_CONTENTS *)); -static int print_portable_hash_info PARAMS((BUCKET_CONTENTS *)); -static int print_hashed_commands PARAMS((int)); -static int list_hashed_filename_targets PARAMS((WORD_LIST *, int)); +static int add_hashed_command (char *, int); +static int print_hash_info (BUCKET_CONTENTS *); +static int print_portable_hash_info (BUCKET_CONTENTS *); +static int print_hashed_commands (int); +static int list_hashed_filename_targets (WORD_LIST *, int); /* Print statistics on the current state of hashed commands. If LIST is not empty, then rehash (or hash in the first place) the specified commands. */ int -hash_builtin (list) - WORD_LIST *list; +hash_builtin (WORD_LIST *list) { int expunge_hash_table, list_targets, list_portably, delete, opt; char *w, *pathname; @@ -126,11 +123,19 @@ hash_builtin (list) if (list == 0 && (delete || list_targets)) { sh_needarg (delete ? "-d" : "-t"); - return (EXECUTION_FAILURE); + return (sh_chkwrite (EXECUTION_FAILURE)); + } + + /* It's an error to specify a pathname to hash to, but no name to hash. */ + if (pathname && list == 0) + { + builtin_usage (); + return (EX_USAGE); } /* We want hash -r to be silent, but hash -- to print hashing info, so we test expunge_hash_table. */ + if (list == 0 && expunge_hash_table == 0) { opt = print_hashed_commands (list_portably); @@ -147,7 +152,7 @@ hash_builtin (list) /* If someone runs `hash -r -t xyz' he will be disappointed. */ if (list_targets) return (list_hashed_filename_targets (list, list_portably)); - + #if defined (RESTRICTED_SHELL) if (restricted && pathname) { @@ -206,9 +211,7 @@ hash_builtin (list) } static int -add_hashed_command (w, quiet) - char *w; - int quiet; +add_hashed_command (char *w, int quiet) { int rv; char *full_path; @@ -233,16 +236,14 @@ add_hashed_command (w, quiet) /* Print information about current hashed info. */ static int -print_hash_info (item) - BUCKET_CONTENTS *item; +print_hash_info (BUCKET_CONTENTS *item) { printf ("%4d\t%s\n", item->times_found, pathdata(item)->path); return 0; } static int -print_portable_hash_info (item) - BUCKET_CONTENTS *item; +print_portable_hash_info (BUCKET_CONTENTS *item) { char *fp, *fn; @@ -257,8 +258,7 @@ print_portable_hash_info (item) } static int -print_hashed_commands (fmt) - int fmt; +print_hashed_commands (int fmt) { if (hashed_filenames == 0 || HASH_ENTRIES (hashed_filenames) == 0) return (0); @@ -270,9 +270,7 @@ print_hashed_commands (fmt) } static int -list_hashed_filename_targets (list, fmt) - WORD_LIST *list; - int fmt; +list_hashed_filename_targets (WORD_LIST *list, int fmt) { int all_found, multiple; char *target; @@ -301,5 +299,5 @@ list_hashed_filename_targets (list, fmt) free (target); } - return (all_found ? EXECUTION_SUCCESS : EXECUTION_FAILURE); + return (sh_chkwrite (all_found ? EXECUTION_SUCCESS : EXECUTION_FAILURE)); } diff --git a/builtins/help.def b/builtins/help.def index 346d93fe8..0831cab00 100644 --- a/builtins/help.def +++ b/builtins/help.def @@ -1,7 +1,7 @@ This file is help.def, from which is created help.c. It implements the builtin "help" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -58,7 +58,7 @@ $END #include #include -#include +#include "../bashansi.h" #include "../bashintl.h" @@ -79,22 +79,22 @@ extern int errno; extern const char * const bash_copyright; extern const char * const bash_license; -static void show_builtin_command_help PARAMS((void)); -static int open_helpfile PARAMS((char *)); -static void show_desc PARAMS((char *, int)); -static void show_manpage PARAMS((char *, int)); -static void show_longdoc PARAMS((int)); +static void show_builtin_command_help (void); +static int open_helpfile (const char *); +static void show_desc (char *, int); +static void show_manpage (char *, int); +static void show_longdoc (int); /* Print out a list of the known functions in the shell, and what they do. If LIST is supplied, print out the list which matches for each pattern specified. */ int -help_builtin (list) - WORD_LIST *list; +help_builtin (WORD_LIST *list) { register int i; char *pattern, *name; - int plen, match_found, sflag, dflag, mflag, m, pass, this_found; + int match_found, sflag, dflag, mflag, m, pass, this_found; + size_t plen; dflag = sflag = mflag = 0; reset_internal_getopt (); @@ -190,30 +190,21 @@ help_builtin (list) } void -builtin_help () +builtin_help (void) { int ind; - ptrdiff_t d; current_builtin = builtin_address_internal (this_command_name, 0); if (current_builtin == 0) return; - d = current_builtin - shell_builtins; - -#if defined (__STDC__) - ind = (int)d; -#else - ind = (int)d / sizeof (struct builtin); -#endif - + ind = current_builtin - shell_builtins; printf ("%s: %s\n", this_command_name, _(shell_builtins[ind].short_doc)); show_longdoc (ind); } static int -open_helpfile (name) - char *name; +open_helpfile (const char *name) { int fd; @@ -230,8 +221,7 @@ open_helpfile (name) used, the long_doc array contains one string -- the full pathname of the help file for this builtin. */ static void -show_longdoc (i) - int i; +show_longdoc (int i) { register int j; char * const *doc; @@ -253,15 +243,13 @@ show_longdoc (i) } static void -show_desc (name, i) - char *name; - int i; +show_desc (char *name, int i) { register int j, r; - char **doc, *line; + char * const *doc, *line; int fd, usefile; - doc = (char **)shell_builtins[i].long_doc; + doc = shell_builtins[i].long_doc; usefile = (doc && doc[0] && *doc[0] == '/' && doc[1] == (char *)NULL); if (usefile) @@ -292,15 +280,14 @@ show_desc (name, i) /* Print builtin help in pseudo-manpage format. */ static void -show_manpage (name, i) - char *name; - int i; +show_manpage (char *name, int i) { register int j; - char **doc, *line; + char * const *doc; + char *line; int fd, usefile; - doc = (char **)shell_builtins[i].long_doc; + doc = shell_builtins[i].long_doc; usefile = (doc && doc[0] && *doc[0] == '/' && doc[1] == (char *)NULL); if (usefile) @@ -366,14 +353,10 @@ show_manpage (name, i) } static void -dispcolumn (i, buf, bufsize, width, height) - int i; - char *buf; - size_t bufsize; - int width, height; +dispcolumn (int i, char *buf, size_t bufsize, int width, int height) { int j; - int dispcols; + size_t dispcols; char *helpdoc; /* first column */ @@ -408,11 +391,7 @@ dispcolumn (i, buf, bufsize, width, height) #if defined (HANDLE_MULTIBYTE) static void -wdispcolumn (i, buf, bufsize, width, height) - int i; - char *buf; - size_t bufsize; - int width, height; +wdispcolumn (int i, char *buf, size_t bufsize, int width, int height) { int j; int dispcols, dispchars; @@ -513,9 +492,9 @@ wdispcolumn (i, buf, bufsize, width, height) #endif /* HANDLE_MULTIBYTE */ static void -show_builtin_command_help () +show_builtin_command_help (void) { - int i, j; + int i; int height, width; char *t, blurb[128]; diff --git a/builtins/history.def b/builtins/history.def index 6918d8a42..ae64726a9 100644 --- a/builtins/history.def +++ b/builtins/history.def @@ -1,7 +1,7 @@ This file is history.def, from which is created history.c. It implements the builtin "history" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -46,7 +46,11 @@ Options: -s append the ARGs to the history list as a single entry If FILENAME is given, it is used as the history file. Otherwise, -if HISTFILE has a value, that is used, else ~/.bash_history. +if HISTFILE has a value, that is used. If FILENAME is not supplied +and HISTFILE is unset or null, the -a, -n, -r, and -w options have +no effect and return success. + +The fc builtin also operates on the history list. If the HISTTIMEFORMAT variable is set and not null, its value is used as a format string for strftime(3) to print the time stamp associated @@ -86,10 +90,10 @@ $END extern int errno; #endif -static char *histtime PARAMS((HIST_ENTRY *, const char *)); -static int display_history PARAMS((WORD_LIST *)); -static void push_history PARAMS((WORD_LIST *)); -static int expand_and_print_history PARAMS((WORD_LIST *)); +static char *histtime (HIST_ENTRY *, const char *); +static int display_history (WORD_LIST *); +static void push_history (WORD_LIST *); +static int expand_and_print_history (WORD_LIST *); #define AFLAG 0x01 #define RFLAG 0x02 @@ -105,8 +109,7 @@ static int expand_and_print_history PARAMS((WORD_LIST *)); #endif int -history_builtin (list) - WORD_LIST *list; +history_builtin (WORD_LIST *list) { int flags, opt, result, old_history_lines, obase, ind; char *filename, *delete_arg, *range; @@ -186,7 +189,7 @@ history_builtin (list) { intmax_t delete_start, delete_end; *range++ = '\0'; - if (legal_number (delete_arg, &delete_start) == 0 || legal_number (range, &delete_end) == 0) + if (valid_number (delete_arg, &delete_start) == 0 || valid_number (range, &delete_end) == 0) { range[-1] = '-'; sh_erange (delete_arg, _("history position")); @@ -223,9 +226,9 @@ history_builtin (list) } else if (flags & DFLAG) { - if (legal_number (delete_arg, &delete_offset) == 0) + if (valid_number (delete_arg, &delete_offset) == 0) { - sh_erange (delete_arg, _("history position")); + sh_invalidnum (delete_arg); return (EXECUTION_FAILURE); } /* check for negative offsets, count back from end of list */ @@ -268,6 +271,16 @@ history_builtin (list) filename = list ? list->word->word : get_string_value ("HISTFILE"); result = EXECUTION_SUCCESS; + if (filename == 0 || *filename == 0) + { + if (interactive_shell == 0 || interactive) + if (list && filename == list->word->word) + builtin_error (_("empty filename")); + else + builtin_error (_("%s: parameter null or not set"), "HISTFILE"); + return (interactive ? EXECUTION_SUCCESS : EXECUTION_FAILURE); + } + #if defined (RESTRICTED_SHELL) if (restricted && strchr (filename, '/')) { @@ -322,9 +335,7 @@ history_builtin (list) #define histdata(i) (hlist[(i)]->data) static char * -histtime (hlist, histtimefmt) - HIST_ENTRY *hlist; - const char *histtimefmt; +histtime (HIST_ENTRY *hlist, const char *histtimefmt) { static char timestr[TIMELEN_MAX]; time_t t; @@ -343,8 +354,7 @@ histtime (hlist, histtimefmt) } static int -display_history (list) - WORD_LIST *list; +display_history (WORD_LIST *list) { register int i; intmax_t limit; @@ -354,7 +364,7 @@ display_history (list) if (list) { if (get_numeric_arg (list, 0, &limit) == 0) - return (EXECUTION_FAILURE); + return (EX_USAGE); if (limit < 0) limit = -limit; @@ -395,8 +405,7 @@ display_history (list) /* Remove the last entry in the history list and add each argument in LIST to the history. */ static void -push_history (list) - WORD_LIST *list; +push_history (WORD_LIST *list) { char *s; @@ -432,8 +441,7 @@ push_history (list) #if defined (BANG_HISTORY) static int -expand_and_print_history (list) - WORD_LIST *list; +expand_and_print_history (WORD_LIST *list) { char *s; int r, result; diff --git a/builtins/jobs.def b/builtins/jobs.def index 1ce098d08..df7305c46 100644 --- a/builtins/jobs.def +++ b/builtins/jobs.def @@ -1,7 +1,7 @@ This file is jobs.def, from which is created jobs.c. It implements the builtins "jobs" and "disown" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -61,6 +61,7 @@ $END #include "../shell.h" #include "../jobs.h" #include "../execute_cmd.h" +#include "../parser.h" #include "bashgetopt.h" #include "common.h" @@ -68,7 +69,7 @@ $END #define JSTATE_RUNNING 0x1 #define JSTATE_STOPPED 0x2 -static int execute_list_with_replacements PARAMS((WORD_LIST *)); +static int execute_list_with_replacements (WORD_LIST *); /* The `jobs' command. Prints outs a list of active jobs. If the argument `-l' is given, then the process id's are printed also. @@ -79,8 +80,7 @@ static int execute_list_with_replacements PARAMS((WORD_LIST *)); group leader and execute the command. The -r and -s options mean to print info about running and stopped jobs only, respectively. */ int -jobs_builtin (list) - WORD_LIST *list; +jobs_builtin (WORD_LIST *list) { int form, execute, state, opt, any_failed, job; sigset_t set, oset; @@ -136,6 +136,9 @@ jobs_builtin (list) { case JSTATE_ANY: list_all_jobs (form); + /* POSIX says to remove terminated jobs from the list after the jobs + builtin reports their status. */ + notify_and_cleanup (); /* the notify part will be a no-op */ break; case JSTATE_RUNNING: list_running_jobs (form); @@ -163,12 +166,15 @@ jobs_builtin (list) UNBLOCK_CHILD (oset); list = list->next; } + /* POSIX says to remove terminated jobs from the list after the jobs + builtin reports their status. */ + notify_and_cleanup (); + return (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS); } static int -execute_list_with_replacements (list) - WORD_LIST *list; +execute_list_with_replacements (WORD_LIST *list) { register WORD_LIST *l; int job, result; @@ -195,13 +201,13 @@ execute_list_with_replacements (list) /* Next make a new simple command and execute it. */ begin_unwind_frame ("jobs_builtin"); - command = make_bare_simple_command (); + command = make_bare_simple_command (line_number); command->value.Simple->words = copy_word_list (list); command->value.Simple->redirects = (REDIRECT *)NULL; command->flags |= CMD_INHIBIT_EXPANSION; command->value.Simple->flags |= CMD_INHIBIT_EXPANSION; - add_unwind_protect (dispose_command, command); + add_unwind_protect (uw_dispose_command, command); result = execute_command (command); dispose_command (command); @@ -231,8 +237,7 @@ $END #if defined (JOB_CONTROL) int -disown_builtin (list) - WORD_LIST *list; +disown_builtin (WORD_LIST *list) { int opt, job, retval, nohup_only, running_jobs, all_jobs; sigset_t set, oset; @@ -275,7 +280,7 @@ disown_builtin (list) do { BLOCK_CHILD (set, oset); - job = (list && legal_number (list->word->word, &pid_value) && pid_value == (pid_t) pid_value) + job = (list && valid_number (list->word->word, &pid_value) && pid_value == (pid_t) pid_value) ? get_job_by_pid ((pid_t) pid_value, 0, 0) : get_job_spec (list); diff --git a/builtins/kill.def b/builtins/kill.def index c655092e7..c1ea14b8c 100644 --- a/builtins/kill.def +++ b/builtins/kill.def @@ -1,7 +1,7 @@ This file is kill.def, from which is created kill.c. It implements the builtin "kill" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -70,7 +70,7 @@ $END extern int errno; #endif /* !errno */ -static void kill_error PARAMS((pid_t, int)); +static void kill_error (pid_t, int); #if !defined (CONTINUE_AFTER_KILL_ERROR) # define CONTINUE_OR_FAIL return (EXECUTION_FAILURE) @@ -82,8 +82,7 @@ static void kill_error PARAMS((pid_t, int)); kill -KILL %1? No, if you fill up the process table this way you can still kill some. */ int -kill_builtin (list) - WORD_LIST *list; +kill_builtin (WORD_LIST *list) { int sig, any_succeeded, listing, saw_signal, dflags; char *sigspec, *word; @@ -190,7 +189,7 @@ use_sigspec: word++; /* Use the entire argument in case of minus sign presence. */ - if (*word && legal_number (list->word->word, &pid_value) && (pid_value == (pid_t)pid_value)) + if (*word && valid_number (list->word->word, &pid_value) && (pid_value == (pid_t)pid_value)) { pid = (pid_t) pid_value; @@ -263,9 +262,7 @@ use_sigspec: } static void -kill_error (pid, e) - pid_t pid; - int e; +kill_error (pid_t pid, int e) { char *x; diff --git a/builtins/let.def b/builtins/let.def index d090a45bc..df4e3c4f2 100644 --- a/builtins/let.def +++ b/builtins/let.def @@ -80,8 +80,7 @@ $END /* Arithmetic LET function. */ int -let_builtin (list) - WORD_LIST *list; +let_builtin (WORD_LIST *list) { intmax_t ret; int expok; @@ -110,8 +109,7 @@ let_builtin (list) #ifdef INCLUDE_UNUSED int -exp_builtin (list) - WORD_LIST *list; +exp_builtin (WORD_LIST *list) { char *exp; intmax_t ret; diff --git a/builtins/mapfile.def b/builtins/mapfile.def index 4ddd72338..770d5e377 100644 --- a/builtins/mapfile.def +++ b/builtins/mapfile.def @@ -2,7 +2,7 @@ This file is mapfile.def, from which is created mapfile.c. It implements the builtin "mapfile" in Bash. Copyright (C) 2005-2006 Rocky Bernstein for Free Software Foundation, Inc. -Copyright (C) 2008-2021 Free Software Foundation, Inc. +Copyright (C) 2008-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -92,7 +92,7 @@ extern int errno; #if defined (ARRAY_VARS) -static int run_callback PARAMS((const char *, unsigned int, const char *)); +static int run_callback (const char *, unsigned int, const char *); #define DEFAULT_ARRAY_NAME "MAPFILE" #define DEFAULT_VARIABLE_NAME "MAPLINE" /* not used right now */ @@ -104,13 +104,8 @@ static int run_callback PARAMS((const char *, unsigned int, const char *)); #define MAPF_CLEARARRAY 0x01 #define MAPF_CHOP 0x02 -static int delim; - static int -run_callback (callback, curindex, curline) - const char *callback; - unsigned int curindex; - const char *curline; +run_callback (const char *callback, unsigned int curindex, const char *curline) { unsigned int execlen; char *execstr, *qline; @@ -134,9 +129,7 @@ run_callback (callback, curindex, curline) } static void -do_chop(line, delim) - char *line; - unsigned char delim; +do_chop(char *line, unsigned char delim) { int length; @@ -146,12 +139,8 @@ do_chop(line, delim) } static int -mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_name, delim, flags) - int fd; - long line_count_goal, origin, nskip, callback_quantum; - char *callback, *array_name; - int delim; - int flags; +mapfile (int fd, long line_count_goal, long origin, long nskip, long callback_quantum, + char *callback, char *array_name, int delim, int flags) { char *line; size_t line_length; @@ -231,10 +220,9 @@ mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_n } int -mapfile_builtin (list) - WORD_LIST *list; +mapfile_builtin (WORD_LIST *list) { - int opt, code, fd, flags; + int opt, code, fd, flags, delim; intmax_t intval; long lines, origin, nskip, callback_quantum; char *array_name, *callback; @@ -255,7 +243,7 @@ mapfile_builtin (list) delim = *list_optarg; break; case 'u': - code = legal_number (list_optarg, &intval); + code = valid_number (list_optarg, &intval); if (code == 0 || intval < 0 || intval != (int)intval) { builtin_error (_("%s: invalid file descriptor specification"), list_optarg); @@ -272,7 +260,7 @@ mapfile_builtin (list) break; case 'n': - code = legal_number (list_optarg, &intval); + code = valid_number (list_optarg, &intval); if (code == 0 || intval < 0 || intval != (unsigned)intval) { builtin_error (_("%s: invalid line count"), list_optarg); @@ -283,7 +271,7 @@ mapfile_builtin (list) break; case 'O': - code = legal_number (list_optarg, &intval); + code = valid_number (list_optarg, &intval); if (code == 0 || intval < 0 || intval != (unsigned)intval) { builtin_error (_("%s: invalid array origin"), list_optarg); @@ -300,7 +288,7 @@ mapfile_builtin (list) callback = list_optarg; break; case 'c': - code = legal_number (list_optarg, &intval); + code = valid_number (list_optarg, &intval); if (code == 0 || intval <= 0 || intval != (unsigned)intval) { builtin_error (_("%s: invalid callback quantum"), list_optarg); @@ -310,7 +298,7 @@ mapfile_builtin (list) callback_quantum = intval; break; case 's': - code = legal_number (list_optarg, &intval); + code = valid_number (list_optarg, &intval); if (code == 0 || intval < 0 || intval != (unsigned)intval) { builtin_error (_("%s: invalid line count"), list_optarg); @@ -342,7 +330,7 @@ mapfile_builtin (list) else array_name = list->word->word; - if (legal_identifier (array_name) == 0) + if (valid_identifier (array_name) == 0) { sh_invalidid (array_name); return (EXECUTION_FAILURE); @@ -354,8 +342,7 @@ mapfile_builtin (list) #else int -mapfile_builtin (list) - WORD_LIST *list; +mapfile_builtin (WORD_LIST *list) { builtin_error (_("array variable support required")); return (EXECUTION_FAILURE); diff --git a/builtins/mkbuiltins.c b/builtins/mkbuiltins.c index f505ebde1..690a65c77 100644 --- a/builtins/mkbuiltins.c +++ b/builtins/mkbuiltins.c @@ -1,7 +1,7 @@ /* mkbuiltins.c - Create builtins.c, builtext.h, and builtdoc.c from a single source file called builtins.def. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -59,11 +59,8 @@ extern int errno; #endif -static char *xmalloc (), *xrealloc (); - -#if !defined (__STDC__) && !defined (strcpy) -extern char *strcpy (); -#endif /* !__STDC__ && !strcpy */ +static void *xmalloc (size_t); +static void *xrealloc (void *, size_t); #define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x)) #define whitespace(c) (((c) == ' ') || ((c) == '\t')) @@ -175,13 +172,14 @@ char *localvar_builtins[] = /* The builtin commands that are special to the POSIX search order. */ char *posix_builtins[] = { - "alias", "bg", "cd", "command", "false", "fc", "fg", "getopts", "jobs", - "kill", "newgrp", "pwd", "read", "true", "umask", "unalias", "wait", + "alias", "bg", "cd", "command", "false", "fc", "fg", "getopts", "hash", + "jobs", "kill", "newgrp", "pwd", "read", "true", "type", "ulimit", + "umask", "unalias", "wait", (char *)NULL }; /* The builtin commands that can take array references as arguments and pay - attention to `assoc_expand_once'. These are the ones that don't assign + attention to `array_expand_once'. These are the ones that don't assign values, but need to avoid double expansions. */ char *arrayvar_builtins[] = { @@ -191,47 +189,47 @@ char *arrayvar_builtins[] = }; /* Forward declarations. */ -static int is_special_builtin (); -static int is_assignment_builtin (); -static int is_localvar_builtin (); -static int is_posix_builtin (); -static int is_arrayvar_builtin (); +static int is_special_builtin (char *); +static int is_assignment_builtin (char *); +static int is_localvar_builtin (char *); +static int is_posix_builtin (char *); +static int is_arrayvar_builtin (char *); #if !defined (HAVE_RENAME) -static int rename (); +static int rename (char *, char *); #endif -void extract_info (); +void extract_info (char *, FILE *, FILE *); + +void file_error (char *); +void line_error (DEF_FILE *, char *, char *, char *); -void file_error (); -void line_error (); +void write_file_headers (FILE *, FILE *); +void write_file_footers (FILE *, FILE *); +void write_ifdefs (FILE *, char **); +void write_endifs (FILE *, char **); +void write_documentation (FILE *, char **, int, int); +void write_dummy_declarations (FILE *, ARRAY *); +void write_longdocs (FILE *, ARRAY *); +void write_builtins (DEF_FILE *, FILE *, FILE *); -void write_file_headers (); -void write_file_footers (); -void write_ifdefs (); -void write_endifs (); -void write_documentation (); -void write_longdocs (); -void write_builtins (); +int write_helpfiles (ARRAY *); -int write_helpfiles (); +static int _find_in_table (char *, char **); -void free_defs (); -void add_documentation (); +void free_defs (DEF_FILE *); +void add_documentation (DEF_FILE *, char *); -void must_be_building (); -void remove_trailing_whitespace (); +void must_be_building (char *, DEF_FILE *); +void remove_trailing_whitespace (char *); #define document_name(b) ((b)->docname ? (b)->docname : (b)->name) - /* For each file mentioned on the command line, process it and write the information to STRUCTFILE and EXTERNFILE, while creating the production file if necessary. */ int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { int arg_index = 1; FILE *structfile, *externfile; @@ -384,8 +382,7 @@ main (argc, argv) /* Make a new array, and return a pointer to it. The array will contain elements of size WIDTH, and is initialized to no elements. */ ARRAY * -array_create (width) - int width; +array_create (int width) { ARRAY *array; @@ -404,8 +401,7 @@ array_create (width) /* Copy the array of strings in ARRAY. */ ARRAY * -copy_string_array (array) - ARRAY *array; +copy_string_array (ARRAY *array) { register int i; ARRAY *copy; @@ -431,9 +427,7 @@ copy_string_array (array) /* Add ELEMENT to ARRAY, growing the array if necessary. */ void -array_add (element, array) - char *element; - ARRAY *array; +array_add (char *element, ARRAY *array) { if (array->sindex + 2 > array->size) array->array = (char **)xrealloc @@ -445,8 +439,7 @@ array_add (element, array) /* Free an allocated array and data pointer. */ void -array_free (array) - ARRAY *array; +array_free (ARRAY *array) { if (array->array) free (array->array); @@ -461,8 +454,7 @@ array_free (array) /* **************************************************************** */ /* The definition of a function. */ -typedef int Function (); -typedef int mk_handler_func_t PARAMS((char *, DEF_FILE *, char *)); +typedef int mk_handler_func_t (char *, DEF_FILE *, char *); /* Structure handles processor directives. */ typedef struct { @@ -470,14 +462,14 @@ typedef struct { mk_handler_func_t *function; } HANDLER_ENTRY; -extern int builtin_handler PARAMS((char *, DEF_FILE *, char *)); -extern int function_handler PARAMS((char *, DEF_FILE *, char *)); -extern int short_doc_handler PARAMS((char *, DEF_FILE *, char *)); -extern int comment_handler PARAMS((char *, DEF_FILE *, char *)); -extern int depends_on_handler PARAMS((char *, DEF_FILE *, char *)); -extern int produces_handler PARAMS((char *, DEF_FILE *, char *)); -extern int end_handler PARAMS((char *, DEF_FILE *, char *)); -extern int docname_handler PARAMS((char *, DEF_FILE *, char *)); +extern int builtin_handler (char *, DEF_FILE *, char *); +extern int function_handler (char *, DEF_FILE *, char *); +extern int short_doc_handler (char *, DEF_FILE *, char *); +extern int comment_handler (char *, DEF_FILE *, char *); +extern int depends_on_handler (char *, DEF_FILE *, char *); +extern int produces_handler (char *, DEF_FILE *, char *); +extern int end_handler (char *, DEF_FILE *, char *); +extern int docname_handler (char *, DEF_FILE *, char *); HANDLER_ENTRY handlers[] = { { "BUILTIN", builtin_handler }, @@ -494,8 +486,7 @@ HANDLER_ENTRY handlers[] = { /* Return the entry in the table of handlers for NAME. */ HANDLER_ENTRY * -find_directive (directive) - char *directive; +find_directive (char *directive) { register int i; @@ -524,9 +515,7 @@ int output_cpp_line_info = 0; builtins found in each $BUILTIN. Plain text found before the $PRODUCES is ignored, as is "$$ comment text". */ void -extract_info (filename, structfile, externfile) - char *filename; - FILE *structfile, *externfile; +extract_info (char *filename, FILE *structfile, FILE *externfile) { register int i; DEF_FILE *defs; @@ -609,7 +598,7 @@ extract_info (filename, structfile, externfile) if (!handler) { - line_error (defs, "Unknown directive `%s'", directive); + line_error (defs, "Unknown directive `%s'", directive, ""); free (directive); continue; } @@ -666,8 +655,7 @@ extract_info (filename, structfile, externfile) #define free_safely(x) if (x) free (x) static void -free_builtin (builtin) - BUILTIN_DESC *builtin; +free_builtin (BUILTIN_DESC *builtin) { register int i; @@ -689,8 +677,7 @@ free_builtin (builtin) /* Free all of the memory allocated to a DEF_FILE. */ void -free_defs (defs) - DEF_FILE *defs; +free_defs (DEF_FILE *defs) { register int i; register BUILTIN_DESC *builtin; @@ -722,8 +709,7 @@ free_defs (defs) /* Strip surrounding whitespace from STRING, and return a pointer to the start of it. */ char * -strip_whitespace (string) - char *string; +strip_whitespace (char *string) { while (whitespace (*string)) string++; @@ -734,8 +720,7 @@ strip_whitespace (string) /* Remove only the trailing whitespace from STRING. */ void -remove_trailing_whitespace (string) - char *string; +remove_trailing_whitespace (char *string) { register int i; @@ -752,35 +737,29 @@ remove_trailing_whitespace (string) DEFS is the DEF_FILE in which the directive is found. If there is no argument, produce an error. */ char * -get_arg (for_whom, defs, string) - char *for_whom, *string; - DEF_FILE *defs; +get_arg (char *for_whom, DEF_FILE *defs, char *string) { char *new; new = strip_whitespace (string); if (!*new) - line_error (defs, "%s requires an argument", for_whom); + line_error (defs, "%s requires an argument", for_whom, ""); return (savestring (new)); } /* Error if not building a builtin. */ void -must_be_building (directive, defs) - char *directive; - DEF_FILE *defs; +must_be_building (char *directive, DEF_FILE *defs) { if (!building_builtin) - line_error (defs, "%s must be inside of a $BUILTIN block", directive); + line_error (defs, "%s must be inside of a $BUILTIN block", directive, ""); } /* Return the current builtin. */ BUILTIN_DESC * -current_builtin (directive, defs) - char *directive; - DEF_FILE *defs; +current_builtin (char *directive, DEF_FILE *defs) { must_be_building (directive, defs); if (defs->builtins) @@ -792,9 +771,7 @@ current_builtin (directive, defs) /* Add LINE to the long documentation for the current builtin. Ignore blank lines until the first non-blank line has been seen. */ void -add_documentation (defs, line) - DEF_FILE *defs; - char *line; +add_documentation (DEF_FILE *defs, char *line) { register BUILTIN_DESC *builtin; @@ -813,10 +790,7 @@ add_documentation (defs, line) /* How to handle the $BUILTIN directive. */ int -builtin_handler (self, defs, arg) - char *self; - DEF_FILE *defs; - char *arg; +builtin_handler (char *self, DEF_FILE *defs, char *arg) { BUILTIN_DESC *new; char *name; @@ -824,7 +798,7 @@ builtin_handler (self, defs, arg) /* If we are already building a builtin, we cannot start a new one. */ if (building_builtin) { - line_error (defs, "%s found before $END", self); + line_error (defs, "%s found before $END", self, ""); return (-1); } @@ -865,10 +839,7 @@ builtin_handler (self, defs, arg) /* How to handle the $FUNCTION directive. */ int -function_handler (self, defs, arg) - char *self; - DEF_FILE *defs; - char *arg; +function_handler (char *self, DEF_FILE *defs, char *arg) { register BUILTIN_DESC *builtin; @@ -876,7 +847,7 @@ function_handler (self, defs, arg) if (builtin == 0) { - line_error (defs, "syntax error: no current builtin for $FUNCTION directive"); + line_error (defs, "syntax error: no current builtin for $FUNCTION directive", "", ""); exit (1); } if (builtin->function) @@ -890,10 +861,7 @@ function_handler (self, defs, arg) /* How to handle the $DOCNAME directive. */ int -docname_handler (self, defs, arg) - char *self; - DEF_FILE *defs; - char *arg; +docname_handler (char *self, DEF_FILE *defs, char *arg) { register BUILTIN_DESC *builtin; @@ -910,10 +878,7 @@ docname_handler (self, defs, arg) /* How to handle the $SHORT_DOC directive. */ int -short_doc_handler (self, defs, arg) - char *self; - DEF_FILE *defs; - char *arg; +short_doc_handler (char *self, DEF_FILE *defs, char *arg) { register BUILTIN_DESC *builtin; @@ -930,20 +895,14 @@ short_doc_handler (self, defs, arg) /* How to handle the $COMMENT directive. */ int -comment_handler (self, defs, arg) - char *self; - DEF_FILE *defs; - char *arg; +comment_handler (char *self, DEF_FILE *defs, char *arg) { return (0); } /* How to handle the $DEPENDS_ON directive. */ int -depends_on_handler (self, defs, arg) - char *self; - DEF_FILE *defs; - char *arg; +depends_on_handler (char *self, DEF_FILE *defs, char *arg) { register BUILTIN_DESC *builtin; char *dependent; @@ -961,10 +920,7 @@ depends_on_handler (self, defs, arg) /* How to handle the $PRODUCES directive. */ int -produces_handler (self, defs, arg) - char *self; - DEF_FILE *defs; - char *arg; +produces_handler (char *self, DEF_FILE *defs, char *arg) { /* If just hacking documentation, don't change any of the production files. */ @@ -995,10 +951,7 @@ produces_handler (self, defs, arg) /* How to handle the $END directive. */ int -end_handler (self, defs, arg) - char *self; - DEF_FILE *defs; - char *arg; +end_handler (char *self, DEF_FILE *defs, char *arg) { must_be_building (self, defs); building_builtin = 0; @@ -1013,9 +966,7 @@ end_handler (self, defs, arg) /* Produce an error for DEFS with FORMAT and ARGS. */ void -line_error (defs, format, arg1, arg2) - DEF_FILE *defs; - char *format, *arg1, *arg2; +line_error (DEF_FILE *defs, char *format, char *arg1, char *arg2) { if (defs->filename[0] != '/') fprintf (stderr, "%s", error_directory ? error_directory : "./"); @@ -1027,8 +978,7 @@ line_error (defs, format, arg1, arg2) /* Print error message for FILENAME. */ void -file_error (filename) - char *filename; +file_error (char *filename) { perror (filename); exit (2); @@ -1040,30 +990,27 @@ file_error (filename) /* */ /* **************************************************************** */ -static void memory_error_and_abort (); +static void memory_error_and_abort (void); -static char * -xmalloc (bytes) - int bytes; +static void * +xmalloc (size_t bytes) { - char *temp = (char *)malloc (bytes); + void *temp = malloc (bytes); if (!temp) memory_error_and_abort (); return (temp); } -static char * -xrealloc (pointer, bytes) - char *pointer; - int bytes; +static void * +xrealloc (void *pointer, size_t bytes) { - char *temp; + void *temp; if (!pointer) - temp = (char *)malloc (bytes); + temp = malloc (bytes); else - temp = (char *)realloc (pointer, bytes); + temp = realloc (pointer, bytes); if (!temp) memory_error_and_abort (); @@ -1072,7 +1019,7 @@ xrealloc (pointer, bytes) } static void -memory_error_and_abort () +memory_error_and_abort (void) { fprintf (stderr, "mkbuiltins: out of virtual memory\n"); abort (); @@ -1087,8 +1034,7 @@ memory_error_and_abort () /* Return a pointer to a newly allocated builtin which is an exact copy of BUILTIN. */ BUILTIN_DESC * -copy_builtin (builtin) - BUILTIN_DESC *builtin; +copy_builtin (BUILTIN_DESC *builtin) { BUILTIN_DESC *new; @@ -1109,8 +1055,7 @@ copy_builtin (builtin) /* How to save away a builtin. */ void -save_builtin (builtin) - BUILTIN_DESC *builtin; +save_builtin (BUILTIN_DESC *builtin) { BUILTIN_DESC *newbuiltin; @@ -1187,8 +1132,7 @@ char *structfile_footer[] = { /* Write out any necessary opening information for STRUCTFILE and EXTERNFILE. */ void -write_file_headers (structfile, externfile) - FILE *structfile, *externfile; +write_file_headers (FILE *structfile, FILE *externfile) { register int i; @@ -1214,8 +1158,7 @@ write_file_headers (structfile, externfile) /* Write out any necessary closing information for STRUCTFILE and EXTERNFILE. */ void -write_file_footers (structfile, externfile) - FILE *structfile, *externfile; +write_file_footers (FILE *structfile, FILE *externfile) { register int i; @@ -1230,9 +1173,7 @@ write_file_footers (structfile, externfile) /* Write out the information accumulated in DEFS to STRUCTFILE and EXTERNFILE. */ void -write_builtins (defs, structfile, externfile) - DEF_FILE *defs; - FILE *structfile, *externfile; +write_builtins (DEF_FILE *defs, FILE *structfile, FILE *externfile) { register int i; @@ -1258,7 +1199,7 @@ write_builtins (defs, structfile, externfile) if (externfile) { if (builtin->function) - fprintf (externfile, "extern int %s PARAMS((WORD_LIST *));\n", + fprintf (externfile, "extern int %s (WORD_LIST *);\n", builtin->function); fprintf (externfile, "extern char * const %s_doc[];\n", @@ -1336,9 +1277,7 @@ write_builtins (defs, structfile, externfile) /* Write out the long documentation strings in BUILTINS to STREAM. */ void -write_longdocs (stream, builtins) - FILE *stream; - ARRAY *builtins; +write_longdocs (FILE *stream, ARRAY *builtins) { register int i; register BUILTIN_DESC *builtin; @@ -1375,9 +1314,7 @@ write_longdocs (stream, builtins) } void -write_dummy_declarations (stream, builtins) - FILE *stream; - ARRAY *builtins; +write_dummy_declarations (FILE *stream, ARRAY *builtins) { register int i; BUILTIN_DESC *builtin; @@ -1401,9 +1338,7 @@ write_dummy_declarations (stream, builtins) If a define is preceded by an `!', then the sense of the test is reversed. */ void -write_ifdefs (stream, defines) - FILE *stream; - char **defines; +write_ifdefs (FILE *stream, char **defines) { register int i; @@ -1432,9 +1367,7 @@ write_ifdefs (stream, defines) STREAM is the stream to write the information to. DEFINES is a null terminated array of define names. */ void -write_endifs (stream, defines) - FILE *stream; - char **defines; +write_endifs (FILE *stream, char **defines) { register int i; @@ -1459,10 +1392,7 @@ write_endifs (stream, defines) internationalization (gettext) and the single-string vs. multiple-strings issues. */ void -write_documentation (stream, documentation, indentation, flags) - FILE *stream; - char **documentation; - int indentation, flags; +write_documentation (FILE *stream, char **documentation, int indentation, int flags) { register int i, j; register char *line; @@ -1590,8 +1520,7 @@ write_documentation (stream, documentation, indentation, flags) } int -write_helpfiles (builtins) - ARRAY *builtins; +write_helpfiles (ARRAY *builtins) { char *helpfile, *bname; FILE *helpfp; @@ -1632,8 +1561,7 @@ write_helpfiles (builtins) } static int -_find_in_table (name, name_table) - char *name, *name_table[]; +_find_in_table (char *name, char **name_table) { register int i; @@ -1644,44 +1572,38 @@ _find_in_table (name, name_table) } static int -is_special_builtin (name) - char *name; +is_special_builtin (char *name) { return (_find_in_table (name, special_builtins)); } static int -is_assignment_builtin (name) - char *name; +is_assignment_builtin (char *name) { return (_find_in_table (name, assignment_builtins)); } static int -is_localvar_builtin (name) - char *name; +is_localvar_builtin (char *name) { return (_find_in_table (name, localvar_builtins)); } static int -is_posix_builtin (name) - char *name; +is_posix_builtin (char *name) { return (_find_in_table (name, posix_builtins)); } static int -is_arrayvar_builtin (name) - char *name; +is_arrayvar_builtin (char *name) { return (_find_in_table (name, arrayvar_builtins)); } #if !defined (HAVE_RENAME) static int -rename (from, to) - char *from, *to; +rename (char *from, char *to) { unlink (to); if (link (from, to) < 0) diff --git a/builtins/printf.def b/builtins/printf.def index 84658c399..91b76d6e0 100644 --- a/builtins/printf.def +++ b/builtins/printf.def @@ -1,7 +1,7 @@ This file is printf.def, from which is created printf.c. It implements the builtin "printf" in Bash. -Copyright (C) 1997-2021 Free Software Foundation, Inc. +Copyright (C) 1997-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,8 +35,8 @@ sequences, which are converted and copied to the standard output; and format specifications, each of which causes printing of the next successive argument. -In addition to the standard format specifications described in printf(1), -printf interprets: +In addition to the standard format characters csndiouxXeEfFgGaA described +in printf(3), printf interprets: %b expand backslash escape sequences in the corresponding argument %q quote the argument in a way that can be reused as shell input @@ -68,12 +68,9 @@ $END # define INT_MIN (-2147483647-1) #endif -#if defined (PREFER_STDARG) -# include -#else -# include -#endif +#include +#include #include #include @@ -93,28 +90,60 @@ $END #include "bashgetopt.h" #include "common.h" -#if defined (PRI_MACROS_BROKEN) -# undef PRIdMAX -#endif - -#if !defined (PRIdMAX) -# if HAVE_LONG_LONG -# define PRIdMAX "lld" -# else -# define PRIdMAX "ld" -# endif -#endif - #if !defined (errno) extern int errno; #endif +/* We free the buffer used by mklong() if it's `too big'. */ +#define PRETURN(value) \ + do \ + { \ + QUIT; \ + retval = value; \ + if (conv_bufsize > 4096 ) \ + { \ + free (conv_buf); \ + conv_bufsize = 0; \ + conv_buf = 0; \ + } \ + if (vflag) \ + { \ + SHELL_VAR *v; \ + v = builtin_bind_variable (vname, vbuf, bindflags); \ + stupidly_hack_special_variables (vname); \ + if (v == 0 || readonly_p (v) || noassign_p (v)) \ + retval = EXECUTION_FAILURE; \ + if (vbsize > 4096) \ + { \ + free (vbuf); \ + vbsize = 0; \ + vbuf = 0; \ + } \ + else if (vbuf) \ + vbuf[0] = 0; \ + } \ + else \ + { \ + if (ferror (stdout) == 0) \ + fflush (stdout); \ + QUIT; \ + if (ferror (stdout)) \ + { \ + sh_wrerror (); \ + clearerr (stdout); \ + retval = EXECUTION_FAILURE; \ + } \ + } \ + return (retval); \ + } \ + while (0) + #define PC(c) \ do { \ char b[2]; \ tw++; \ b[0] = c; b[1] = '\0'; \ - if (vflag) \ + if (vflag) \ vbadd (b, 1); \ else \ putchar (c); \ @@ -124,7 +153,9 @@ extern int errno; #define PF(f, func) \ do { \ int nw; \ - clearerr (stdout); \ + if (vflag == 0) \ + clearerr (stdout); \ + errno = 0; \ if (have_fieldwidth && have_precision) \ nw = vflag ? vbprintf (f, fieldwidth, precision, func) : printf (f, fieldwidth, precision, func); \ else if (have_fieldwidth) \ @@ -133,56 +164,16 @@ extern int errno; nw = vflag ? vbprintf (f, precision, func) : printf (f, precision, func); \ else \ nw = vflag ? vbprintf (f, func) : printf (f, func); \ - tw += nw; \ - QUIT; \ - if (ferror (stdout)) \ + if (nw < 0 || (vflag == 0 && ferror (stdout))) \ { \ - sh_wrerror (); \ - clearerr (stdout); \ - return (EXECUTION_FAILURE); \ + QUIT; \ + builtin_error ("%s", strerror (errno)); \ + PRETURN (EXECUTION_FAILURE); \ } \ + tw += nw; \ + QUIT; \ } while (0) -/* We free the buffer used by mklong() if it's `too big'. */ -#define PRETURN(value) \ - do \ - { \ - QUIT; \ - if (vflag) \ - { \ - SHELL_VAR *v; \ - v = builtin_bind_variable (vname, vbuf, bindflags); \ - stupidly_hack_special_variables (vname); \ - if (v == 0 || readonly_p (v) || noassign_p (v)) \ - return (EXECUTION_FAILURE); \ - } \ - if (conv_bufsize > 4096 ) \ - { \ - free (conv_buf); \ - conv_bufsize = 0; \ - conv_buf = 0; \ - } \ - if (vbsize > 4096) \ - { \ - free (vbuf); \ - vbsize = 0; \ - vbuf = 0; \ - } \ - else if (vbuf) \ - vbuf[0] = 0; \ - if (ferror (stdout) == 0) \ - fflush (stdout); \ - QUIT; \ - if (ferror (stdout)) \ - { \ - sh_wrerror (); \ - clearerr (stdout); \ - return (EXECUTION_FAILURE); \ - } \ - return (value); \ - } \ - while (0) - #define SKIP1 "#'-+ 0" #define LENMODS "hjlLtz" @@ -193,25 +184,26 @@ extern int errno; extern time_t shell_start_time; #if !HAVE_ASPRINTF -extern int asprintf PARAMS((char **, const char *, ...)) __attribute__((__format__ (printf, 2, 3))); +extern int asprintf (char **, const char *, ...) __attribute__((__format__ (printf, 2, 3))); #endif #if !HAVE_VSNPRINTF -extern int vsnprintf PARAMS((char *, size_t, const char *, va_list)) __attribute__((__format__ (printf, 3, 0))); +extern int vsnprintf (char *, size_t, const char *, va_list) __attribute__((__format__ (printf, 3, 0))); #endif -static void printf_erange PARAMS((char *)); -static int printstr PARAMS((char *, char *, int, int, int)); -static int tescape PARAMS((char *, char *, int *, int *)); -static char *bexpand PARAMS((char *, int, int *, int *)); -static char *vbadd PARAMS((char *, int)); -static int vbprintf PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); -static char *mklong PARAMS((char *, char *, size_t)); -static int getchr PARAMS((void)); -static char *getstr PARAMS((void)); -static int getint PARAMS((void)); -static intmax_t getintmax PARAMS((void)); -static uintmax_t getuintmax PARAMS((void)); +static inline void printf_erange (char *); +static inline void report_erange (char *, char *); +static int printstr (char *, char *, size_t, int, int); +static int tescape (char *, char *, int *, int *); +static char *bexpand (char *, size_t, int *, size_t *); +static char *vbadd (char *, int); +static int vbprintf (const char *, ...) __attribute__((__format__ (printf, 1, 2))); +static char *mklong (char *, char *, size_t); +static int getchr (void); +static char *getstr (void); +static int getint (int); +static intmax_t getintmax (void); +static uintmax_t getuintmax (void); #if defined (HAVE_LONG_DOUBLE) && HAVE_DECL_STRTOLD && !defined(STRTOLD_BROKEN) typedef long double floatmax_t; @@ -224,10 +216,18 @@ typedef double floatmax_t; # define FLOATMAX_CONV "" # define strtofltmax strtod #endif -static double getdouble PARAMS((void)); -static floatmax_t getfloatmax PARAMS((void)); +static double getdouble (void); +static floatmax_t getfloatmax (void); + +static intmax_t asciicode (void); -static intmax_t asciicode PARAMS((void)); +#if defined (HANDLE_MULTIBYTE) +static wchar_t *getwidestr (size_t *); +static wint_t getwidechar (void); +static char *convwidestr (wchar_t *, int); +static char *convwidechar (wint_t, int); +static int printwidestr (char *, wchar_t *, size_t, int, int); +#endif static WORD_LIST *garglist, *orig_arglist; static int retval; @@ -238,23 +238,45 @@ static int vflag = 0; static int bindflags = 0; static char *vbuf, *vname; static size_t vbsize; -static int vblen; +static size_t vblen; static intmax_t tw; static char *conv_buf; static size_t conv_bufsize; +static inline int +decodeint (char **str, int diagnose, int overflow_return) +{ + int pr, v; + char *ps; + + ps = *str; + pr = *ps++ - '0'; + v = 0; + + /* use C23 macros to check overflow */ + for (; DIGIT (*ps); ps++) + { + v |= ckd_mul (&pr, pr, 10); + v |= ckd_add (&pr, pr, *ps - '0'); + } + if (v && diagnose) + report_erange (*str, ps); + + *str = ps; + return (v ? overflow_return : pr); +} + int -printf_builtin (list) - WORD_LIST *list; +printf_builtin (WORD_LIST *list) { int ch, fieldwidth, precision; - int have_fieldwidth, have_precision, use_Lmod, altform; + int have_fieldwidth, have_precision, use_Lmod, altform, longform; char convch, thisch, nextch, *format, *modstart, *precstart, *fmt, *start; #if defined (HANDLE_MULTIBYTE) char mbch[25]; /* 25 > MB_LEN_MAX, plus can handle 4-byte UTF-8 and large Unicode characters*/ - int mbind, mblen; + int mbind, mblen, mb_cur_max; #endif #if defined (ARRAY_VARS) int arrayflags; @@ -273,9 +295,9 @@ printf_builtin (list) bindflags = 0; #if defined (ARRAY_VARS) SET_VFLAGS (list_optflags, arrayflags, bindflags); - retval = legal_identifier (vname) || valid_array_reference (vname, arrayflags); + retval = valid_identifier (vname) || valid_array_reference (vname, arrayflags); #else - retval = legal_identifier (vname); + retval = valid_identifier (vname); #endif if (retval) { @@ -315,6 +337,7 @@ printf_builtin (list) return ((v == 0 || readonly_p (v) || noassign_p (v)) ? EXECUTION_FAILURE : EXECUTION_SUCCESS); } + /* If the format string is empty after preprocessing, return immediately. */ if (list->word->word == 0 || list->word->word[0] == '\0') return (EXECUTION_SUCCESS); @@ -324,9 +347,7 @@ printf_builtin (list) garglist = orig_arglist = list->next; - /* If the format string is empty after preprocessing, return immediately. */ - if (format == 0 || *format == 0) - return (EXECUTION_SUCCESS); + mb_cur_max = MB_CUR_MAX; /* Basic algorithm is to scan the format string for conversion specifications -- once one is found, find out if the field @@ -341,7 +362,7 @@ printf_builtin (list) for (fmt = format; *fmt; fmt++) { precision = fieldwidth = 0; - have_fieldwidth = have_precision = altform = 0; + have_fieldwidth = have_precision = altform = longform = 0; precstart = 0; if (*fmt == '\\') @@ -366,7 +387,16 @@ printf_builtin (list) if (*fmt != '%') { +#if defined (HANDLE_MULTIBYTE) + size_t l; + int i; + l = mbcharlen (fmt, mb_cur_max); + for (i = 0; i < l; i++, fmt++) + PC (*fmt); + fmt--; /* for loop will increment it for us again */ +#else PC (*fmt); +#endif continue; } @@ -390,7 +420,9 @@ printf_builtin (list) { fmt++; have_fieldwidth = 1; - fieldwidth = getint (); + /* Handle field with overflow by ignoring fieldwidth for now. + getint() prints a message. */ + fieldwidth = getint (0); } else while (DIGIT (*fmt)) @@ -404,7 +436,10 @@ printf_builtin (list) { fmt++; have_precision = 1; - precision = getint (); + /* Handle precision overflow by ignoring precision for now. + getint() prints a message. + "A negative precision is treated as if it were missing." */ + precision = getint (-1); } else { @@ -431,6 +466,7 @@ printf_builtin (list) while (*fmt && strchr (LENMODS, *fmt)) { use_Lmod |= USE_LONG_DOUBLE && *fmt == 'L'; + longform |= *fmt == 'l'; fmt++; } @@ -450,27 +486,97 @@ printf_builtin (list) switch(convch) { case 'c': + case 'C': { char p; +#if defined (HANDLE_MULTIBYTE) + if ((longform || convch == 'C') && locale_mb_cur_max > 1) + { + wchar_t wc, ws[2]; + int r; + + wc = getwidechar (); + ws[0] = wc; + ws[1] = L'\0'; + + /* If %lc is supplied a null argument, posix interp 1647 + says it should produce a single null byte. */ + if (wc == L'\0') + r = printstr (start, "", 1, fieldwidth, precision); + else + r = printwidestr (start, ws, 1, fieldwidth, precision); + if (r < 0) + PRETURN (EXECUTION_FAILURE); + break; + } +#endif p = getchr (); PF(start, p); break; } case 's': + case 'S': { char *p; +#if defined (HANDLE_MULTIBYTE) + if ((longform || convch == 'S') && locale_mb_cur_max > 1) + { + wchar_t *wp; + size_t slen; + int r; + + wp = getwidestr (&slen); + r = printwidestr (start, wp, slen, fieldwidth, precision); + FREE (wp); + if (r < 0) + PRETURN (EXECUTION_FAILURE); + break; + } +#endif +#if 0 /*TAG:bash-5.4*/ + if (altform == 0) +#endif + { + p = getstr (); + PF(start, p); + break; + } + } + /*FALLTHROUGH*/ + + case 'b': /* expand escapes in argument */ + { + char *p, *xp; + size_t rlen; + int r; p = getstr (); - PF(start, p); + ch = r = 0; + rlen = 0; + xp = bexpand (p, strlen (p), &ch, &rlen); + + if (xp) + { + /* Have to use printstr because of possible NUL bytes + in XP -- printf does not handle that well. */ + r = printstr (start, xp, rlen, fieldwidth, precision); + if (r < 0) + retval = EXECUTION_FAILURE; + free (xp); + } + + if (ch || r < 0) + PRETURN (retval); break; } case '(': { char *timefmt, timebuf[TIMELEN_MAX], *t; - int n; + size_t n; + int r; intmax_t arg; time_t secs; struct tm *tm; @@ -530,16 +636,9 @@ printf_builtin (list) /* convert to %s format that preserves fieldwidth and precision */ modstart[0] = 's'; modstart[1] = '\0'; - n = printstr (start, timebuf, strlen (timebuf), fieldwidth, precision); /* XXX - %s for now */ - if (n < 0) - { - if (ferror (stdout) == 0) - { - sh_wrerror (); - clearerr (stdout); - } - PRETURN (EXECUTION_FAILURE); - } + r = printstr (start, timebuf, strlen (timebuf), fieldwidth, precision); /* XXX - %s for now */ + if (r < 0) + PRETURN (EXECUTION_FAILURE); break; } @@ -550,7 +649,7 @@ printf_builtin (list) var = getstr (); if (var && *var) { - if (legal_identifier (var)) + if (valid_identifier (var)) bind_var_to_int (var, tw, 0); else { @@ -561,80 +660,52 @@ printf_builtin (list) break; } - case 'b': /* expand escapes in argument */ - { - char *p, *xp; - int rlen, r; - - p = getstr (); - ch = rlen = r = 0; - xp = bexpand (p, strlen (p), &ch, &rlen); - - if (xp) - { - /* Have to use printstr because of possible NUL bytes - in XP -- printf does not handle that well. */ - r = printstr (start, xp, rlen, fieldwidth, precision); - if (r < 0) - { - if (ferror (stdout) == 0) - { - sh_wrerror (); - clearerr (stdout); - } - retval = EXECUTION_FAILURE; - } - free (xp); - } - - if (ch || r < 0) - PRETURN (retval); - break; - } - case 'q': /* print with shell quoting */ case 'Q': { char *p, *xp; - int r, mpr; + int r; size_t slen; r = 0; p = getstr (); /* Decode precision and apply it to the unquoted string. */ - if (convch == 'Q' && precstart) + if (convch == 'Q' && (have_precision || precstart)) { - mpr = *precstart++ - '0'; - while (DIGIT (*precstart)) - mpr = (mpr * 10) + (*precstart++ - '0'); - /* Error if precision > INT_MAX here? */ - precision = (mpr < 0 || mpr > INT_MAX) ? INT_MAX : mpr; + if (precstart) + { + char *prec; + prec = precstart; + precision = decodeint (&prec, 0, -1); + } slen = strlen (p); /* printf precision works in bytes. */ - if (precision < slen) + if (precision >= 0 && precision < slen) p[precision] = '\0'; } if (p && *p == 0) /* XXX - getstr never returns null */ xp = savestring ("''"); else if (ansic_shouldquote (p)) xp = ansic_quote (p, 0, (int *)0); + else if (altform) + xp = sh_single_quote (p); else xp = sh_backslash_quote (p, 0, 3); if (xp) { + slen = strlen (xp); if (convch == 'Q') { - slen = strlen (xp); - if (slen > precision) - precision = slen; + /* check for string length overflow when adjusting precision */ + if (ckd_add (&precision, slen, 0)) + { + builtin_error (_("%%Q: string length: %s"), strerror (ERANGE)); + precision = -1; + } } /* Use printstr to get fieldwidth and precision right. */ - r = printstr (start, xp, strlen (xp), fieldwidth, precision); - if (r < 0) - { - sh_wrerror (); - clearerr (stdout); - } + r = printstr (start, xp, slen, fieldwidth, precision); + /* Let PRETURN print the error message. */ free (xp); } @@ -650,8 +721,8 @@ printf_builtin (list) long p; intmax_t pp; - p = pp = getintmax (); - if (p != pp) + pp = getintmax (); + if (pp < LONG_MIN || pp > LONG_MAX) { f = mklong (start, PRIdMAX, sizeof (PRIdMAX) - 2); PF (f, pp); @@ -662,6 +733,7 @@ printf_builtin (list) in "long". This also works around some long long and/or intmax_t library bugs in the common case, e.g. glibc 2.2 x86. */ + p = pp; f = mklong (start, "l", 1); PF (f, p); } @@ -735,7 +807,7 @@ printf_builtin (list) modstart[1] = nextch; } - if (ferror (stdout)) + if (vflag == 0 && ferror (stdout)) { /* PRETURN will print error message. */ PRETURN (EXECUTION_FAILURE); @@ -749,28 +821,41 @@ printf_builtin (list) PRETURN (retval); } -static void -printf_erange (s) - char *s; +static inline void +printf_erange (char *s) +{ + builtin_error (_("%s: %s"), s, strerror(ERANGE)); + conversion_error = 1; +} + +static inline void +report_erange (char *s, char *e) { - builtin_error (_("warning: %s: %s"), s, strerror(ERANGE)); + unsigned char sc; + + sc = *e; + *e = 0; + printf_erange (s); + *e = sc; } /* We duplicate a lot of what printf(3) does here. */ +/* FMT: format + STRING: expanded string argument + LEN: length of expanded string + FIELDWIDTH: argument for width of `*' + PRECISION: argument for precision of `*' + + Returns -1 on detectable write error, 0 otherwise. */ + static int -printstr (fmt, string, len, fieldwidth, precision) - char *fmt; /* format */ - char *string; /* expanded string argument */ - int len; /* length of expanded string */ - int fieldwidth; /* argument for width of `*' */ - int precision; /* argument for precision of `*' */ +printstr (char *fmt, char *string, size_t len, int fieldwidth, int precision) { #if 0 char *s; #endif int padlen, nc, ljust, i; int fw, pr; /* fieldwidth and precision */ - intmax_t mfw, mpr; if (string == 0) string = ""; @@ -783,8 +868,6 @@ printstr (fmt, string, len, fieldwidth, precision) ljust = fw = 0; pr = -1; - mfw = 0; - mpr = -1; /* skip flags */ while (strchr (SKIP1, *fmt)) @@ -806,13 +889,7 @@ printstr (fmt, string, len, fieldwidth, precision) } } else if (DIGIT (*fmt)) - { - mfw = *fmt++ - '0'; - while (DIGIT (*fmt)) - mfw = (mfw * 10) + (*fmt++ - '0'); - /* Error if fieldwidth > INT_MAX here? */ - fw = (mfw < 0 || mfw > INT_MAX) ? INT_MAX : mfw; - } + fw = decodeint (&fmt, 1, 0); /* get precision, if present. doesn't handle negative precisions */ if (*fmt == '.') @@ -825,13 +902,11 @@ printstr (fmt, string, len, fieldwidth, precision) } else if (DIGIT (*fmt)) { - mpr = *fmt++ - '0'; - while (DIGIT (*fmt)) - mpr = (mpr * 10) + (*fmt++ - '0'); - /* Error if precision > INT_MAX here? */ - pr = (mpr < 0 || mpr > INT_MAX) ? INT_MAX : mpr; - if (pr < precision && precision < INT_MAX) - pr = precision; /* XXX */ + pr = decodeint (&fmt, 1, -1); + /* pr < precision means we adjusted precision in printf_builtin + for the quoted string length (%Q), so we use the adjusted value */ + if (pr < precision) + pr = precision; } else pr = 0; /* "a null digit string is treated as zero" */ @@ -867,8 +942,103 @@ printstr (fmt, string, len, fieldwidth, precision) for (; padlen < 0; padlen++) PC (' '); - return (ferror (stdout) ? -1 : 0); + return ((vflag == 0 && ferror (stdout)) ? -1 : 0); +} + +#if defined (HANDLE_MULTIBYTE) +/* A wide-character version of printstr */ +static int +printwidestr (char *fmt, wchar_t *wstring, size_t len, int fieldwidth, int precision) +{ + char *s; + char *string; + int padlen, nc, ljust, i; + int fw, pr; /* fieldwidth and precision */ + + if (wstring == 0) + wstring = L""; + +#if 0 + s = fmt; +#endif + if (*fmt == '%') + fmt++; + + ljust = fw = 0; + pr = -1; + + /* skip flags */ + while (strchr (SKIP1, *fmt)) + { + if (*fmt == '-') + ljust = 1; + fmt++; + } + + /* get fieldwidth, if present. rely on caller to clamp fieldwidth at INT_MAX */ + if (*fmt == '*') + { + fmt++; + fw = fieldwidth; + if (fw < 0) + { + fw = -fw; + ljust = 1; + } + } + else if (DIGIT (*fmt)) + fw = decodeint (&fmt, 1, 0); + + /* get precision, if present. doesn't handle negative precisions */ + if (*fmt == '.') + { + fmt++; + if (*fmt == '*') + { + fmt++; + pr = precision; + } + else if (DIGIT (*fmt)) + { + pr = decodeint (&fmt, 1, -1); + /* pr < precision means we adjusted precision in printf_builtin + for the quoted string length (%Q), so we use the adjusted value */ + if (pr < precision) + pr = precision; + } + else + pr = 0; /* "a null digit string is treated as zero" */ + } + + /* chars from wide string to print */ + nc = (pr >= 0 && pr <= len) ? pr : len; + + padlen = fw - nc; + if (padlen < 0) + padlen = 0; + if (ljust) + padlen = -padlen; + + /* leading pad characters */ + for (; padlen > 0; padlen--) + PC (' '); + + /* convert WSTRING to multibyte character STRING, honoring PRECISION */ + string = convwidestr (wstring, pr); + + /* output STRING, assuming that convwidestr has taken care of the precision + and returned only the necessary bytes. */ + for (i = 0; string[i]; i++) + PC (string[i]); + + /* output any necessary trailing padding */ + for (; padlen < 0; padlen++) + PC (' '); + + free (string); + return ((vflag == 0 && ferror (stdout)) ? -1 : 0); } +#endif /* Convert STRING by expanding the escape sequences specified by the POSIX standard for printf's `%b' format string. If SAWC is non-null, @@ -884,10 +1054,7 @@ printstr (fmt, string, len, fieldwidth, precision) do the \c short-circuiting, and \c is treated as an unrecognized escape sequence; we also bypass the other processing specific to %b arguments. */ static int -tescape (estart, cp, lenp, sawc) - char *estart; - char *cp; - int *lenp, *sawc; +tescape (char *estart, char *cp, int *lenp, int *sawc) { register char *p; int temp, c, evalue; @@ -899,11 +1066,7 @@ tescape (estart, cp, lenp, sawc) switch (c = *p++) { -#if defined (__STDC__) case 'a': *cp = '\a'; break; -#else - case 'a': *cp = '\007'; break; -#endif case 'b': *cp = '\b'; break; @@ -1001,16 +1164,15 @@ tescape (estart, cp, lenp, sawc) } static char * -bexpand (string, len, sawc, lenp) - char *string; - int len, *sawc, *lenp; +bexpand (char *string, size_t len, int *sawc, size_t *lenp) { - int temp; - char *ret, *r, *s, c; + int temp, c; + char *ret, *r, *s, *send; #if defined (HANDLE_MULTIBYTE) char mbch[25]; int mbind, mblen; #endif + DECLARE_MBSTATE; if (string == 0 || len == 0) { @@ -1023,15 +1185,32 @@ bexpand (string, len, sawc, lenp) return (ret); } +#if defined (HANDLE_MULTIBYTE) + /* same logic as lib/sh/strtrans.c:ansicstr() */ + temp = 4*len + 4; + if (temp < 12) + temp = 12; /* ensure enough for eventual u32cesc */ + ret = (char *)xmalloc (temp); +#else ret = (char *)xmalloc (len + 1); +#endif + + send = string + len; for (r = ret, s = string; s && *s; ) { - c = *s++; - if (c != '\\' || *s == '\0') + if (s[1] == '\0') + { + *r++ = *s; + break; + } + else if (*s != '\\') { - *r++ = c; + COPY_CHAR_P (r, s, send); continue; } + else + s++; /* *s == '\\' */ + temp = 0; #if defined (HANDLE_MULTIBYTE) memset (mbch, '\0', sizeof (mbch)); @@ -1061,9 +1240,7 @@ bexpand (string, len, sawc, lenp) } static char * -vbadd (buf, blen) - char *buf; - int blen; +vbadd (char *buf, int blen) { size_t nlen; @@ -1085,37 +1262,35 @@ vbadd (buf, blen) #ifdef DEBUG if (strlen (vbuf) != vblen) - internal_error ("printf:vbadd: vblen (%d) != strlen (vbuf) (%d)", vblen, (int)strlen (vbuf)); + internal_error ("printf:vbadd: vblen (%zu) != strlen (vbuf) (%zu)", vblen, strlen (vbuf)); #endif return vbuf; } static int -#if defined (PREFER_STDARG) vbprintf (const char *format, ...) -#else -vbprintf (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; size_t nlen; int blen; - SH_VA_START (args, format); + va_start (args, format); blen = vsnprintf (vbuf + vblen, vbsize - vblen, format, args); va_end (args); + if (blen < 0) + return (blen); nlen = vblen + blen + 1; if (nlen >= vbsize) { vbsize = ((nlen + 63) >> 6) << 6; vbuf = (char *)xrealloc (vbuf, vbsize); - SH_VA_START (args, format); + va_start (args, format); blen = vsnprintf (vbuf + vblen, vbsize - vblen, format, args); va_end (args); + if (blen < 0) + return (blen); } vblen += blen; @@ -1123,17 +1298,14 @@ vbprintf (format, va_alist) #ifdef DEBUG if (strlen (vbuf) != vblen) - internal_error ("printf:vbprintf: vblen (%d) != strlen (vbuf) (%d)", vblen, (int)strlen (vbuf)); + internal_error ("printf:vbprintf: vblen (%zu) != strlen (vbuf) (%zu)", vblen, strlen (vbuf)); #endif return (blen); } static char * -mklong (str, modifiers, mlen) - char *str; - char *modifiers; - size_t mlen; +mklong (char *str, char *modifiers, size_t mlen) { size_t len, slen; @@ -1155,7 +1327,7 @@ mklong (str, modifiers, mlen) } static int -getchr () +getchr (void) { int ret; @@ -1168,7 +1340,7 @@ getchr () } static char * -getstr () +getstr (void) { char *ret; @@ -1180,32 +1352,39 @@ getstr () return ret; } +/* Don't call getintmax here because it may consume an argument on error, and + we call this to get field width/precision arguments. */ static int -getint () +getint (int overflow_retval) { intmax_t ret; - - ret = getintmax (); + char *ep; + int overflow; if (garglist == 0) - return ret; + return (0); - if (ret > INT_MAX) - { - printf_erange (garglist->word->word); - ret = INT_MAX; - } - else if (ret < INT_MIN) + if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"') + return asciicode (); + + errno = 0; + ret = strtoimax (garglist->word->word, &ep, 0); + overflow = (errno == ERANGE) || (ret < INT_MIN || ret > INT_MAX); + + if (*ep) { - printf_erange (garglist->word->word); - ret = INT_MIN; + sh_invalidnum (garglist->word->word); + conversion_error = 1; } + else if (overflow) + printf_erange (garglist->word->word); - return ((int)ret); + garglist = garglist->next; + return (overflow ? overflow_retval : (int)ret); } static intmax_t -getintmax () +getintmax (void) { intmax_t ret; char *ep; @@ -1240,7 +1419,7 @@ getintmax () } static uintmax_t -getuintmax () +getuintmax (void) { uintmax_t ret; char *ep; @@ -1271,7 +1450,7 @@ getuintmax () } static double -getdouble () +getdouble (void) { double ret; char *ep; @@ -1298,7 +1477,7 @@ getdouble () } static floatmax_t -getfloatmax () +getfloatmax (void) { floatmax_t ret; char *ep; @@ -1330,7 +1509,7 @@ getfloatmax () /* NO check is needed for garglist here. */ static intmax_t -asciicode () +asciicode (void) { register intmax_t ch; #if defined (HANDLE_MULTIBYTE) @@ -1343,7 +1522,7 @@ asciicode () #if defined (HANDLE_MULTIBYTE) slen = strlen (garglist->word->word+1); wc = 0; - mblength = mbtowc (&wc, garglist->word->word+1, slen); + mblength = mbrtowc (&wc, garglist->word->word+1, slen, &state); if (mblength > 0) ch = wc; /* XXX */ else @@ -1353,3 +1532,125 @@ asciicode () garglist = garglist->next; return (ch); } + +#if defined (HANDLE_MULTIBYTE) +static wchar_t * +getwidestr (size_t *lenp) +{ + wchar_t *ws; + const char *mbs; + size_t slen, mblength; + DECLARE_MBSTATE; + + if (garglist == 0) + { + if (lenp) + *lenp = 0; + return NULL; + } + + mbs = garglist->word->word; + slen = strlen (mbs); + ws = (wchar_t *)xmalloc ((slen + 1) * sizeof (wchar_t)); + mblength = mbsrtowcs (ws, &mbs, slen + 1, &state); + if (lenp) + *lenp = mblength; + + if (MB_INVALIDCH (mblength)) + { + int i; + for (i = 0; i < slen; i++) + ws[i] = (wchar_t)garglist->word->word[i]; + ws[slen] = L'\0'; + if (lenp) + *lenp = slen; + } + + garglist = garglist->next; + return (ws); +} + +static wint_t +getwidechar (void) +{ + wchar_t wc; + size_t slen, mblength; + DECLARE_MBSTATE; + + if (garglist == 0) + return L'\0'; + + wc = 0; + mblength = mbrtowc (&wc, garglist->word->word, locale_mb_cur_max, &state); + if (MB_INVALIDCH (mblength)) + wc = (wchar_t)garglist->word->word[0]; + + garglist = garglist->next; + return (wc); +} + +/* The basic approach is to take the wide character string, apply any + precision in terms of characters (otherwise the precision is useless), + compute the size of the output buffer, call wcsrtombs to convert back + to multibyte characters, and return the result. */ +static char * +convwidestr (wchar_t *ws, int prec) +{ + const wchar_t *ts; + wchar_t wc; + char *ret; + size_t rlen, rsize; + DECLARE_MBSTATE; + + ts = (const wchar_t *)ws; + + if (prec >= 0) + { + rsize = prec * MB_CUR_MAX; + ret = (char *)xmalloc (rsize + 1); +#if defined (HAVE_WCSNRTOMBS) + rlen = wcsnrtombs (ret, &ts, prec, rsize, &state); +#else + wc = ws[prec]; + ws[prec] = L'\0'; + rlen = wcsrtombs (ret, &ts, rsize, &state); + ws[prec] = wc; +#endif + } + else + { + rlen = wcsrtombs (NULL, &ts, 0, &state); + if (rlen != (size_t)-1) + { + memset (&state, '\0', sizeof (mbstate_t)); + ret = (char *)xmalloc (rlen + 1); + rlen = wcsrtombs (ret, &ts, rlen, &state); + } + else + ret = (char *)xmalloc (1); + } + if (MB_INVALIDCH (rlen)) + rlen = 0; + + ret[rlen] = '\0'; + return ret; +} + +static char * +convwidechar (wint_t wi, int prec) +{ + wchar_t wc; + char *ret; + size_t rlen; + DECLARE_MBSTATE; + + wc = (wchar_t)wi; + ret = (char *)xmalloc (MB_LEN_MAX + 1); + rlen = wcrtomb (ret, wc, &state); + if (MB_INVALIDCH (rlen)) + rlen = 0; + + ret[rlen] = '\0'; + return ret; +} +#endif diff --git a/builtins/psize.c b/builtins/psize.c index 30881fb3f..d499a1de6 100644 --- a/builtins/psize.c +++ b/builtins/psize.c @@ -1,6 +1,6 @@ /* psize.c - Find pipe size. */ -/* Copyright (C) 1987, 1991 Free Software Foundation, Inc. +/* Copyright (C) 1987, 1991, 2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -48,17 +48,14 @@ extern int errno; int nw; sighandler -sigpipe (sig) - int sig; +sigpipe (int sig) { fprintf (stderr, "%d\n", nw); exit (0); } int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { char buf[128]; register int i; diff --git a/builtins/pushd.def b/builtins/pushd.def index 829f827d5..b3a6f5d37 100644 --- a/builtins/pushd.def +++ b/builtins/pushd.def @@ -1,7 +1,7 @@ This file is pushd.def, from which is created pushd.c. It implements the builtins "pushd", "popd", and "dirs" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -116,6 +116,10 @@ $END #include #if defined (PUSHD_AND_POPD) +#ifdef LOADABLE_BUILTIN +# include "builtins.h" +#endif + #include #if defined (HAVE_SYS_PARAM_H) # include @@ -140,10 +144,6 @@ $END #include "common.h" #include "builtext.h" -#ifdef LOADABLE_BUILTIN -# include "builtins.h" -#endif - #if !defined (errno) extern int errno; #endif /* !errno */ @@ -152,17 +152,17 @@ extern int errno; static char **pushd_directory_list = (char **)NULL; /* Number of existing slots in this list. */ -static int directory_list_size; +static size_t directory_list_size; /* Offset to the end of the list. */ static int directory_list_offset; -static void pushd_error PARAMS((int, char *)); -static void clear_directory_stack PARAMS((void)); -static int cd_to_string PARAMS((char *)); -static int change_to_temp PARAMS((char *)); -static void add_dirstack_element PARAMS((char *)); -static int get_dirstack_index PARAMS((intmax_t, int, int *)); +static void pushd_error (int, char *); +static void clear_directory_stack (void); +static int cd_to_string (char *); +static int change_to_temp (char *); +static void add_dirstack_element (char *); +static int get_dirstack_index (intmax_t, int, int *); #define NOCD 0x01 #define ROTATE 0x02 @@ -170,8 +170,7 @@ static int get_dirstack_index PARAMS((intmax_t, int, int *)); #define CLEARSTAK 0x08 int -pushd_builtin (list) - WORD_LIST *list; +pushd_builtin (WORD_LIST *list) { WORD_LIST *orig_list; char *temp, *current_directory, *top; @@ -228,7 +227,7 @@ pushd_builtin (list) break; else if (((direction = list->word->word[0]) == '+') || direction == '-') { - if (legal_number (list->word->word + 1, &num) == 0) + if (valid_number (list->word->word + 1, &num) == 0) { sh_invalidnum (list->word->word); builtin_usage (); @@ -316,8 +315,7 @@ pushd_builtin (list) If LIST is non-null it should consist of a word +N or -N, which says what element to delete from the stack. The default is the top one. */ int -popd_builtin (list) - WORD_LIST *list; +popd_builtin (WORD_LIST *list) { register int i; intmax_t which; @@ -341,7 +339,7 @@ popd_builtin (list) } else if (((direction = list->word->word[0]) == '+') || direction == '-') { - if (legal_number (list->word->word + 1, &which) == 0) + if (valid_number (list->word->word + 1, &which) == 0) { sh_invalidnum (list->word->word); builtin_usage (); @@ -365,6 +363,30 @@ popd_builtin (list) break; } +#if 0 + /* If we didn't find `which' but there are arguments remaining, assume we + got `--' */ + if (which_word == 0 && list) + { + if (((direction = list->word->word[0]) == '+') || direction == '-') + { + if (valid_number (list->word->word + 1, &which) == 0) + { + sh_invalidnum (list->word->word); + builtin_usage (); + return (EX_USAGE); + } + which_word = list->word->word; + } + else + { + builtin_error (_("%s: invalid argument"), list->word->word); + builtin_usage (); + return (EX_USAGE); + } + } +#endif + if (which > directory_list_offset || (which < -directory_list_offset) || (directory_list_offset == 0 && which == 0)) { pushd_error (directory_list_offset, which_word ? which_word : ""); @@ -406,8 +428,7 @@ popd_builtin (list) /* Print the current list of directories on the directory stack. */ int -dirs_builtin (list) - WORD_LIST *list; +dirs_builtin (WORD_LIST *list) { int flags, desired_index, index_flag, vflag; intmax_t i; @@ -440,7 +461,7 @@ dirs_builtin (list) else if (*list->word->word == '+' || *list->word->word == '-') { int sign; - if (legal_number (w = list->word->word + 1, &i) == 0) + if (valid_number (w = list->word->word + 1, &i) == 0) { sh_invalidnum (list->word->word); builtin_usage (); @@ -516,9 +537,7 @@ dirs_builtin (list) } static void -pushd_error (offset, arg) - int offset; - char *arg; +pushd_error (int offset, char *arg) { if (offset == 0) builtin_error (_("directory stack empty")); @@ -527,7 +546,7 @@ pushd_error (offset, arg) } static void -clear_directory_stack () +clear_directory_stack (void) { register int i; @@ -540,8 +559,7 @@ clear_directory_stack () so if the result is EXECUTION_FAILURE then an error message has already been printed. */ static int -cd_to_string (name) - char *name; +cd_to_string (char *name) { WORD_LIST *tlist; WORD_LIST *dir; @@ -555,8 +573,7 @@ cd_to_string (name) } static int -change_to_temp (temp) - char *temp; +change_to_temp (char *temp) { int tt; @@ -569,8 +586,7 @@ change_to_temp (temp) } static void -add_dirstack_element (dir) - char *dir; +add_dirstack_element (char *dir) { if (directory_list_offset == directory_list_size) pushd_directory_list = strvec_resize (pushd_directory_list, directory_list_size += 10); @@ -578,9 +594,7 @@ add_dirstack_element (dir) } static int -get_dirstack_index (ind, sign, indexp) - intmax_t ind; - int sign, *indexp; +get_dirstack_index (intmax_t ind, int sign, int *indexp) { if (indexp) *indexp = sign > 0 ? 1 : 2; @@ -603,8 +617,7 @@ get_dirstack_index (ind, sign, indexp) /* Used by the tilde expansion code. */ char * -get_dirstack_from_string (string) - char *string; +get_dirstack_from_string (char *string) { int ind, sign, index_flag; intmax_t i; @@ -615,7 +628,7 @@ get_dirstack_from_string (string) sign = (*string == '-') ? -1 : 1; string++; } - if (legal_number (string, &i) == 0) + if (valid_number (string, &i) == 0) return ((char *)NULL); index_flag = 0; @@ -630,9 +643,7 @@ get_dirstack_from_string (string) #ifdef INCLUDE_UNUSED char * -get_dirstack_element (ind, sign) - intmax_t ind; - int sign; +get_dirstack_element (intmax_t ind, int sign) { int i; @@ -643,10 +654,7 @@ get_dirstack_element (ind, sign) #endif void -set_dirstack_element (ind, sign, value) - intmax_t ind; - int sign; - char *value; +set_dirstack_element (intmax_t ind, int sign, char *value) { int i; @@ -658,8 +666,7 @@ set_dirstack_element (ind, sign, value) } WORD_LIST * -get_directory_stack (flags) - int flags; +get_directory_stack (int flags) { register int i; WORD_LIST *ret; diff --git a/builtins/read.def b/builtins/read.def index ddd91d32d..28491d300 100644 --- a/builtins/read.def +++ b/builtins/read.def @@ -1,7 +1,7 @@ This file is read.def, from which is created read.c. It implements the builtin "read" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -22,7 +22,7 @@ $PRODUCES read.c $BUILTIN read $FUNCTION read_builtin -$SHORT_DOC read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] +$SHORT_DOC read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] Read a line from the standard input and split it into fields. Reads a single line from the standard input, or from file descriptor FD @@ -41,6 +41,8 @@ Options: -d delim continue until the first character of DELIM is read, rather than newline -e use Readline to obtain the line + -E use Readline to obtain the line and use the bash default + completion instead of Readline's default completion -i text use TEXT as the initial text for Readline -n nchars return after reading NCHARS characters rather than waiting for a newline, but honor a delimiter if fewer than @@ -86,7 +88,6 @@ $END #ifdef __CYGWIN__ # include -# include #endif #include "../bashintl.h" @@ -103,9 +104,7 @@ $END #include #endif -#if defined (BUFFERED_INPUT) -# include "input.h" -#endif +#include "input.h" #include "shmbutil.h" #include "timer.h" @@ -121,28 +120,29 @@ struct ttsave }; #if defined (READLINE) -static void reset_attempted_completion_function PARAMS((char *)); -static int set_itext PARAMS((void)); -static char *edit_line PARAMS((char *, char *)); -static void set_eol_delim PARAMS((int)); -static void reset_eol_delim PARAMS((char *)); -static void set_readline_timeout PARAMS((sh_timer *t, time_t, long)); +static void uw_reset_attempted_completion_function (void *); +static int set_itext (void); +static char *edit_line (char *, char *, unsigned char, int); +static void set_eol_delim (int); +static void reset_eol_delim (void *); +static void set_readline_timeout (sh_timer *t, time_t, long); +static void uw_bashline_reset_event_hook (void *); #endif -static SHELL_VAR *bind_read_variable PARAMS((char *, char *, int)); +static SHELL_VAR *bind_read_variable (char *, char *, int); #if defined (HANDLE_MULTIBYTE) -static int read_mbchar PARAMS((int, char *, int, int, int)); +static int read_mbchar (int, char *, int, int, int); #endif -static void ttyrestore PARAMS((struct ttsave *)); +static void ttyrestore (struct ttsave *); +static void uw_ttyrestore (void *); -static sighandler sigalrm PARAMS((int)); -static void reset_timeout PARAMS((void)); +static sighandler sigalrm (int); +static void reset_timeout (void); +static void uw_reset_timeout (void *); /* Try this to see what the rest of the shell can do with the information. */ sh_timer *read_timeout; static int reading, tty_modified; -static SigHandler *old_alrm; -static unsigned char delim; static struct ttsave termsave; @@ -153,8 +153,7 @@ static struct ttsave termsave; /* Set a flag that check_read_timeout can check. This relies on zread or read_builtin calling trap.c:check_signals() (which calls check_read_timeout()) */ static sighandler -sigalrm (s) - int s; +sigalrm (int s) { /* Display warning if this is called without read_timeout set? */ if (read_timeout) @@ -162,7 +161,7 @@ sigalrm (s) } static void -reset_timeout () +reset_timeout (void) { /* Cancel alarm before restoring signal handler. */ if (read_timeout) @@ -173,24 +172,33 @@ reset_timeout () read_timeout = 0; } +static void +uw_reset_timeout (void *ignore) +{ + reset_timeout (); +} + void -check_read_timeout () +check_read_timeout (void) { if (read_timeout && shtimer_chktimeout (read_timeout)) sh_longjmp (read_timeout->jmpenv, 1); } int -read_builtin_timeout (fd) - int fd; +read_builtin_timeout (int fd) { if ((read_timeout == 0) || (read_timeout->fd != fd) || (read_timeout->tmout.tv_sec == 0 && read_timeout->tmout.tv_usec == 0)) return 0; +#if defined (HAVE_SELECT) return ((read_timeout->flags & SHTIMER_ALARM) ? shtimer_alrm (read_timeout) : shtimer_select (read_timeout)); +#else + return (shtimer_alrm (read_timeout)); +#endif } /* Read the value of the shell variables whose names follow. @@ -200,20 +208,23 @@ read_builtin_timeout (fd) gets the remainder of the words on the line. If no variables are mentioned in LIST, then the default variable is $REPLY. */ int -read_builtin (list) - WORD_LIST *list; +read_builtin (WORD_LIST *list) { - register char *varname; - int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2, nflag; + char *varname; + int nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2, nflag; + size_t size; volatile int i; int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; - int raw, edit, nchars, silent, have_timeout, ignore_delim, fd; + int edit, use_bash_completion; + int raw, nchars, silent, have_timeout, ignore_delim, fd; + int free_ifs; int lastsig, t_errno; int mb_cur_max; unsigned int tmsec, tmusec; long ival, uval; intmax_t intval; char c; + unsigned char delim; char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; char *e, *t, *t1, *ps2, *tofree; struct stat tsb; @@ -239,6 +250,8 @@ read_builtin (list) USE_VAR(input_is_pipe); /* USE_VAR(raw); */ USE_VAR(edit); + USE_VAR(use_bash_completion); + USE_VAR(delim); USE_VAR(tmsec); USE_VAR(tmusec); USE_VAR(nchars); @@ -260,6 +273,7 @@ read_builtin (list) i = 0; /* Index into the string that we are reading. */ raw = edit = 0; /* Not reading raw input by default. */ + use_bash_completion = 0; silent = 0; arrayname = prompt = (char *)NULL; fd = 0; /* file descriptor to read from */ @@ -276,7 +290,7 @@ read_builtin (list) ignore_delim = nflag = 0; reset_internal_getopt (); - while ((opt = internal_getopt (list, "ersa:d:i:n:p:t:u:N:")) != -1) + while ((opt = internal_getopt (list, "Eersa:d:i:n:p:t:u:N:")) != -1) { switch (opt) { @@ -294,6 +308,12 @@ read_builtin (list) edit = 1; #endif break; + case 'E': +#if defined (READLINE) + edit = use_bash_completion = 1; +#endif + break; + case 'i': #if defined (READLINE) itext = list_optarg; @@ -323,7 +343,7 @@ read_builtin (list) delim = -1; case 'n': nflag = 1; - code = legal_number (list_optarg, &intval); + code = valid_number (list_optarg, &intval); if (code == 0 || intval < 0 || intval != (int)intval) { sh_invalidnum (list_optarg); @@ -333,7 +353,7 @@ read_builtin (list) nchars = intval; break; case 'u': - code = legal_number (list_optarg, &intval); + code = valid_number (list_optarg, &intval); if (code == 0 || intval < 0 || intval != (int)intval) { builtin_error (_("%s: invalid file descriptor specification"), list_optarg); @@ -368,10 +388,10 @@ read_builtin (list) #if defined (ARRAY_VARS) if (list) SET_VFLAGS (list->word->flags, vflags, bindflags); - if (list && legal_identifier (list->word->word) == 0 && valid_array_reference (list->word->word, vflags) == 0) + if (list && valid_identifier (list->word->word) == 0 && valid_array_reference (list->word->word, vflags) == 0) #else bindflags = 0; - if (list && legal_identifier (list->word->word) == 0) + if (list && valid_identifier (list->word->word) == 0) #endif { sh_invalidid (list->word->word); @@ -383,18 +403,27 @@ read_builtin (list) delim = -1; /* IF IFS is unset, we use the default of " \t\n". */ - ifs_chars = getifs (); - if (ifs_chars == 0) /* XXX - shouldn't happen */ - ifs_chars = ""; + free_ifs = 0; /* If we want to read exactly NCHARS chars, don't split on IFS */ if (ignore_delim) ifs_chars = ""; + else + { + ifs_chars = getifs (); + if (ifs_chars == 0) /* XXX - shouldn't happen */ + ifs_chars = ""; + else + free_ifs = 1; + } for (skip_ctlesc = skip_ctlnul = 0, e = ifs_chars; *e; e++) skip_ctlesc |= *e == CTLESC, skip_ctlnul |= *e == CTLNUL; input_string = (char *)xmalloc (size = 112); /* XXX was 128 */ input_string[0] = '\0'; + pass_next = 0; /* Non-zero signifies last char was backslash. */ + saw_escape = 0; /* Non-zero is count of escape chars we added */ + /* More input and options validation */ if (nflag == 1 && nchars == 0) { @@ -420,14 +449,14 @@ read_builtin (list) sigemptyset (&chldset); sigprocmask (SIG_BLOCK, (sigset_t *)0, &chldset); sigaddset (&chldset, SIGCHLD); + sigemptyset (&prevset); + sigprocmask (SIG_SETMASK, (sigset_t *)0, &prevset); #endif begin_unwind_frame ("read_builtin"); -#if defined (BUFFERED_INPUT) if (interactive == 0 && default_buffered_input >= 0 && fd_is_bash_input (fd)) sync_buffered_stream (default_buffered_input); -#endif #if 1 input_is_tty = isatty (fd); @@ -436,7 +465,7 @@ read_builtin (list) #endif if (input_is_tty == 0) #ifndef __CYGWIN__ - input_is_pipe = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE); + input_is_pipe = fd_ispipe (fd); #else input_is_pipe = 1; #endif @@ -457,9 +486,6 @@ read_builtin (list) add_unwind_protect (xfree, rlbuf); #endif - pass_next = 0; /* Non-zero signifies last char was backslash. */ - saw_escape = 0; /* Non-zero signifies that we saw an escape char */ - if (tmsec > 0 || tmusec > 0) { /* Turn off the timeout if stdin is a regular file (e.g. from @@ -473,7 +499,7 @@ read_builtin (list) read_timeout = shtimer_alloc (); read_timeout->flags = SHTIMER_LONGJMP; -#if defined (HAVE_SELECT) +#if defined (HAVE_SELECT) || defined (HAVE_PSELECT) read_timeout->flags |= (edit || posixly_correct) ? SHTIMER_ALARM : SHTIMER_SELECT; #else read_timeout->flags |= SHTIMER_ALARM; @@ -489,7 +515,9 @@ read_builtin (list) if (code) { reset_timeout (); +#if defined (SIGCHLD) sigprocmask (SIG_SETMASK, &prevset, (sigset_t *)0); +#endif /* Tricky. The top of the unwind-protect stack is the free of input_string. We want to run all the rest and use input_string, @@ -512,12 +540,12 @@ read_builtin (list) } if (interactive_shell == 0) initialize_terminating_signals (); - add_unwind_protect (reset_timeout, (char *)NULL); + add_unwind_protect (uw_reset_timeout, NULL); #if defined (READLINE) if (edit) { - add_unwind_protect (reset_attempted_completion_function, (char *)NULL); - add_unwind_protect (bashline_reset_event_hook, (char *)NULL); + add_unwind_protect (uw_reset_attempted_completion_function, NULL); + add_unwind_protect (uw_bashline_reset_event_hook, NULL); set_readline_timeout (read_timeout, tmsec, tmusec); } else @@ -541,7 +569,7 @@ read_builtin (list) if (delim != '\n') { set_eol_delim (delim); - add_unwind_protect (reset_eol_delim, (char *)NULL); + add_unwind_protect (reset_eol_delim, NULL); } } else @@ -558,7 +586,7 @@ read_builtin (list) if (i < 0) sh_ttyerror (1); tty_modified = 1; - add_unwind_protect ((Function *)ttyrestore, (char *)&termsave); + add_unwind_protect (uw_ttyrestore, &termsave); if (interactive_shell == 0) initialize_terminating_signals (); } @@ -576,7 +604,7 @@ read_builtin (list) sh_ttyerror (1); tty_modified = 1; - add_unwind_protect ((Function *)ttyrestore, (char *)&termsave); + add_unwind_protect (uw_ttyrestore, &termsave); if (interactive_shell == 0) initialize_terminating_signals (); } @@ -614,10 +642,6 @@ read_builtin (list) fflush (stderr); } -#if defined (__CYGWIN__) && defined (O_TEXT) - setmode (0, O_TEXT); -#endif - ps2 = 0; for (print_ps2 = eof = retval = 0;;) { @@ -639,7 +663,7 @@ read_builtin (list) if (rlbuf == 0) { reading = 1; - rlbuf = edit_line (prompt ? prompt : "", itext); + rlbuf = edit_line (prompt ? prompt : "", itext, delim, use_bash_completion); reading = 0; rlind = 0; } @@ -690,9 +714,9 @@ read_builtin (list) if (retval <= 0) { - int t; + int x; - t = errno; + x = errno; if (retval < 0 && errno == EINTR) { check_signals (); /* in case we didn't call zread via zreadc */ @@ -709,7 +733,7 @@ read_builtin (list) ttyrestore (&termsave); /* fix terminal before exiting */ CHECK_TERMSIG; eof = 1; - errno = t; /* preserve it for the error message below */ + errno = x; /* preserve it for the error message below */ break; } @@ -724,13 +748,13 @@ read_builtin (list) /* XXX -- use i + mb_cur_max (at least 4) for multibyte/read_mbchar */ if (i + (mb_cur_max > 4 ? mb_cur_max : 4) >= size) { - char *t; - t = (char *)xrealloc (input_string, size += 128); + char *x; + x = (char *)xrealloc (input_string, size += 128); /* Only need to change unwind-protect if input_string changes */ - if (t != input_string) + if (x != input_string) { - input_string = t; + input_string = x; remove_unwind_protect (); add_unwind_protect (xfree, input_string); } @@ -741,11 +765,14 @@ read_builtin (list) if (pass_next) { pass_next = 0; - if (c == '\n') + if (c == '\n' || c == '\0') { if (skip_ctlesc == 0 && i > 0) - i--; /* back up over the CTLESC */ - if (interactive && input_is_tty && raw == 0) + { + i--; /* back up over the CTLESC */ + saw_escape--; /* one fewer CTLESC in the input */ + } + if (interactive && input_is_tty && raw == 0 && c == '\n') print_ps2 = 1; } else @@ -815,6 +842,17 @@ add_char: if (nchars > 0 && nr >= nchars) break; } + /* Back up over trailing CTLESC if the input ends with an unescaped + backslash */ + if (pass_next && skip_ctlesc == 0) + { + i--; + saw_escape--; /* that CTLESC is no longer in the input */ + } + /* I don't think this clause ever tests true. */ + if (skip_ctlnul && saw_escape && i == 1 && input_string[0] == CTLNUL) + saw_escape = 0; /* Avoid dequoting bare CTLNUL */ + input_string[i] = '\0'; check_read_timeout (); @@ -843,7 +881,7 @@ add_char: if (nchars > 0) rl_num_chars_to_read = 0; if (delim != '\n') - reset_eol_delim ((char *)NULL); + reset_eol_delim (NULL); } else #endif @@ -923,7 +961,7 @@ assign_vars: else var = bind_variable ("REPLY", input_string, 0); if (var == 0 || readonly_p (var) || noassign_p (var)) - retval = EXECUTION_FAILURE; + retval = EX_MISCERROR; else VUNSETATTR (var, att_invisible); @@ -945,9 +983,9 @@ assign_vars: varname = list->word->word; #if defined (ARRAY_VARS) SET_VFLAGS (list->word->flags, vflags, bindflags); - if (legal_identifier (varname) == 0 && valid_array_reference (varname, vflags) == 0) + if (valid_identifier (varname) == 0 && valid_array_reference (varname, vflags) == 0) #else - if (legal_identifier (varname) == 0) + if (valid_identifier (varname) == 0) #endif { sh_invalidid (varname); @@ -984,7 +1022,7 @@ assign_vars: if (var == 0) { free (orig_input_string); - return (EXECUTION_FAILURE); + return (EX_MISCERROR); } stupidly_hack_special_variables (varname); @@ -994,9 +1032,9 @@ assign_vars: /* Now assign the rest of the line to the last variable argument. */ #if defined (ARRAY_VARS) SET_VFLAGS (list->word->flags, vflags, bindflags); - if (legal_identifier (list->word->word) == 0 && valid_array_reference (list->word->word, vflags) == 0) + if (valid_identifier (list->word->word) == 0 && valid_array_reference (list->word->word, vflags) == 0) #else - if (legal_identifier (list->word->word) == 0) + if (valid_identifier (list->word->word) == 0) #endif { sh_invalidid (list->word->word); @@ -1044,6 +1082,8 @@ assign_vars: else retval = EXECUTION_FAILURE; + if (free_ifs) + free (ifs_chars); FREE (tofree); free (orig_input_string); @@ -1051,9 +1091,7 @@ assign_vars: } static SHELL_VAR * -bind_read_variable (name, value, flags) - char *name, *value; - int flags; +bind_read_variable (char *name, char *value, int flags) { SHELL_VAR *v; @@ -1064,10 +1102,7 @@ bind_read_variable (name, value, flags) #if defined (HANDLE_MULTIBYTE) static int -read_mbchar (fd, string, ind, ch, unbuffered) - int fd; - char *string; - int ind, ch, unbuffered; +read_mbchar (int fd, char *string, int ind, int ch, int unbuffered) { char mbchar[MB_LEN_MAX + 1]; int i, n, r; @@ -1116,22 +1151,27 @@ mbchar_return: static void -ttyrestore (ttp) - struct ttsave *ttp; +ttyrestore (struct ttsave *ttp) { ttsetattr (ttp->fd, &(ttp->attrs)); tty_modified = 0; } +static void +uw_ttyrestore (void *ttp) +{ + ttyrestore (ttp); +} + void -read_tty_cleanup () +read_tty_cleanup (void) { if (tty_modified) ttyrestore (&termsave); } int -read_tty_modified () +read_tty_modified (void) { return (tty_modified); } @@ -1142,15 +1182,20 @@ static rl_hook_func_t *old_startup_hook; static char *deftext; static void -reset_attempted_completion_function (cp) - char *cp; +uw_reset_attempted_completion_function (void *cp) { if (rl_attempted_completion_function == 0 && old_attempted_completion_function) rl_attempted_completion_function = old_attempted_completion_function; } +static void +uw_bashline_reset_event_hook (void *ignore) +{ + bashline_reset_event_hook (); +} + static int -set_itext () +set_itext (void) { int r1, r2; @@ -1168,18 +1213,19 @@ set_itext () } static char * -edit_line (p, itext) - char *p; - char *itext; +edit_line (char *p, char *itext, unsigned char delim, int keep_completion_func) { char *ret; - int len; + size_t len; if (bash_readline_initialized == 0) initialize_readline (); old_attempted_completion_function = rl_attempted_completion_function; - rl_attempted_completion_function = (rl_completion_func_t *)NULL; + /* If we don't indicate that we want to keep the attempted completion + function, reset it so we use the default readline word completion. */ + if (keep_completion_func == 0) + rl_attempted_completion_function = (rl_completion_func_t *)NULL; bashline_set_event_hook (); if (itext) { @@ -1190,7 +1236,8 @@ edit_line (p, itext) ret = readline (p); - rl_attempted_completion_function = old_attempted_completion_function; + if (keep_completion_func == 0) + rl_attempted_completion_function = old_attempted_completion_function; old_attempted_completion_function = (rl_completion_func_t *)NULL; bashline_reset_event_hook (); @@ -1212,10 +1259,7 @@ edit_line (p, itext) } static void -set_readline_timeout (t, sec, usec) - sh_timer *t; - time_t sec; - long usec; +set_readline_timeout (sh_timer *t, time_t sec, long usec) { t->tmout.tv_sec = sec; t->tmout.tv_usec = usec; @@ -1230,8 +1274,7 @@ static rl_command_func_t *old_newline_func; static unsigned char delim_char; static void -set_eol_delim (c) - int c; +set_eol_delim (int c) { Keymap cmap; @@ -1257,8 +1300,7 @@ set_eol_delim (c) } static void -reset_eol_delim (cp) - char *cp; +reset_eol_delim (void *ignore) { Keymap cmap; diff --git a/builtins/reserved.def b/builtins/reserved.def index 420042dcf..359754e34 100644 --- a/builtins/reserved.def +++ b/builtins/reserved.def @@ -19,6 +19,16 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bash. If not, see . +$BUILTIN ! +$DOCNAME bang +$SHORT_DOC ! PIPELINE +Execute PIPELINE, which can be a simple command, and negate PIPELINE's +return status. + +Exit Status: +The logical negation of PIPELINE's return status. +$END + $BUILTIN for $SHORT_DOC for NAME [in WORDS ... ] ; do COMMANDS; done Execute commands for each member in a list. diff --git a/builtins/return.def b/builtins/return.def index 03c98eb11..049446dc1 100644 --- a/builtins/return.def +++ b/builtins/return.def @@ -1,7 +1,7 @@ This file is return.def, from which is created return.c. It implements the builtin "return" in Bash. -Copyright (C) 1987-2015 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -54,12 +54,17 @@ $END specified as an argument. if no argument is given, then the last exit status is used. */ int -return_builtin (list) - WORD_LIST *list; +return_builtin (WORD_LIST *list) { CHECK_HELPOPT (list); return_catch_value = get_exitstat (list); + /* return is a special builtin, so non-interactive shells in posix mode + exit on an invalid numeric argument. We have to do it this way because + the return_catch targets aren't set up to deal with EXITSHELL, so we + just jump_to_top_level directly. */ + if (interactive_shell == 0 && posixly_correct && executing_command_builtin == 0 && return_catch_value > EX_SHERRBASE) + return (return_catch_value); if (return_catch_flag) sh_longjmp (return_catch, 1); diff --git a/builtins/set.def b/builtins/set.def index 44f176919..13630c22d 100644 --- a/builtins/set.def +++ b/builtins/set.def @@ -1,7 +1,7 @@ This file is set.def, from which is created set.c. It implements the "set" and "unset" builtins in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -141,6 +141,10 @@ Options: - Assign any remaining arguments to the positional parameters. The -x and -v options are turned off. +If -o is supplied with no option-name, set prints the current shell +option settings. If +o is supplied with no option-name, set prints a +series of set commands to recreate the current option settings. + Using + rather than - causes these flags to be turned off. The flags can also be used upon invocation of the shell. The current set of flags may be found in $-. The remaining n ARGs are positional @@ -151,24 +155,24 @@ Exit Status: Returns success unless an invalid option is given. $END -typedef int setopt_set_func_t PARAMS((int, char *)); -typedef int setopt_get_func_t PARAMS((char *)); +typedef int setopt_set_func_t (int, char *); +typedef int setopt_get_func_t (char *); -static int find_minus_o_option PARAMS((char *)); +static int find_minus_o_option (char *); -static void print_minus_o_option PARAMS((char *, int, int)); -static void print_all_shell_variables PARAMS((void)); +static void print_minus_o_option (char *, int, int); +static void print_all_shell_variables (void); -static int set_ignoreeof PARAMS((int, char *)); -static int set_posix_mode PARAMS((int, char *)); +static int set_ignoreeof (int, char *); +static int set_posix_mode (int, char *); #if defined (READLINE) -static int set_edit_mode PARAMS((int, char *)); -static int get_edit_mode PARAMS((char *)); +static int set_edit_mode (int, char *); +static int get_edit_mode (char *); #endif #if defined (HISTORY) -static int bash_set_history PARAMS((int, char *)); +static int bash_set_history (int, char *); #endif static const char * const on = "on"; @@ -245,8 +249,7 @@ const struct { : (*o_options[i].variable = (onoff == FLAG_ON))) static int -find_minus_o_option (name) - char *name; +find_minus_o_option (char *name) { register int i; @@ -257,8 +260,7 @@ find_minus_o_option (name) } int -minus_o_option_value (name) - char *name; +minus_o_option_value (char *name) { register int i; int *on_or_off; @@ -279,9 +281,7 @@ minus_o_option_value (name) #define MINUS_O_FORMAT "%-15s\t%s\n" static void -print_minus_o_option (name, value, pflag) - char *name; - int value, pflag; +print_minus_o_option (char *name, int value, int pflag) { if (pflag == 0) printf (MINUS_O_FORMAT, name, value ? on : off); @@ -290,8 +290,7 @@ print_minus_o_option (name, value, pflag) } void -list_minus_o_opts (mode, reusable) - int mode, reusable; +list_minus_o_opts (int mode, int reusable) { register int i; int *on_or_off, value; @@ -317,7 +316,7 @@ list_minus_o_opts (mode, reusable) } char ** -get_minus_o_opts () +get_minus_o_opts (void) { char **ret; int i; @@ -330,10 +329,11 @@ get_minus_o_opts () } char * -get_current_options () +get_current_options (void) { char *temp; - int i, posixopts; + int i; + size_t posixopts; posixopts = num_posix_options (); /* shopts modified by posix mode */ /* Make the buffer big enough to hold the set -o options and the shopt @@ -355,8 +355,7 @@ get_current_options () } void -set_current_options (bitmap) - const char *bitmap; +set_current_options (const char *bitmap) { int i, v, cv, *on_or_off; @@ -388,9 +387,7 @@ set_current_options (bitmap) } static int -set_ignoreeof (on_or_off, option_name) - int on_or_off; - char *option_name; +set_ignoreeof (int on_or_off, char *option_name) { ignoreeof = on_or_off == FLAG_ON; unbind_variable_noref ("ignoreeof"); @@ -403,9 +400,7 @@ set_ignoreeof (on_or_off, option_name) } static int -set_posix_mode (on_or_off, option_name) - int on_or_off; - char *option_name; +set_posix_mode (int on_or_off, char *option_name) { /* short-circuit on no-op */ if ((on_or_off == FLAG_ON && posixly_correct) || @@ -424,9 +419,7 @@ set_posix_mode (on_or_off, option_name) #if defined (READLINE) /* Magic. This code `knows' how readline handles rl_editing_mode. */ static int -set_edit_mode (on_or_off, option_name) - int on_or_off; - char *option_name; +set_edit_mode (int on_or_off, char *option_name) { int isemacs; @@ -434,7 +427,7 @@ set_edit_mode (on_or_off, option_name) { rl_variable_bind ("editing-mode", option_name); - if (interactive) + if (interactive && command_execution_string == 0) with_input_from_stdin (); no_line_editing = 0; } @@ -443,7 +436,7 @@ set_edit_mode (on_or_off, option_name) isemacs = rl_editing_mode == 1; if ((isemacs && *option_name == 'e') || (!isemacs && *option_name == 'v')) { - if (interactive) + if (interactive && command_execution_string == 0) with_input_from_stream (stdin, "stdin"); no_line_editing = 1; } @@ -452,8 +445,7 @@ set_edit_mode (on_or_off, option_name) } static int -get_edit_mode (name) - char *name; +get_edit_mode (char *name) { return (*name == 'e' ? no_line_editing == 0 && rl_editing_mode == 1 : no_line_editing == 0 && rl_editing_mode == 0); @@ -462,9 +454,7 @@ get_edit_mode (name) #if defined (HISTORY) static int -bash_set_history (on_or_off, option_name) - int on_or_off; - char *option_name; +bash_set_history (int on_or_off, char *option_name) { if (on_or_off == FLAG_ON) { @@ -483,9 +473,7 @@ bash_set_history (on_or_off, option_name) #endif int -set_minus_o_option (on_or_off, option_name) - int on_or_off; - char *option_name; +set_minus_o_option (int on_or_off, char *option_name) { register int i; @@ -515,7 +503,7 @@ set_minus_o_option (on_or_off, option_name) } static void -print_all_shell_variables () +print_all_shell_variables (void) { SHELL_VAR **vars; @@ -540,11 +528,12 @@ print_all_shell_variables () } void -set_shellopts () +set_shellopts (void) { char *value; char tflag[N_O_OPTIONS]; - int vsize, i, vptr, *ip, exported; + int i, *ip, exported; + size_t vsize, vptr; SHELL_VAR *v; for (vsize = i = 0; o_options[i].name; i++) @@ -584,17 +573,12 @@ set_shellopts () v = find_variable ("SHELLOPTS"); - /* Turn off the read-only attribute so we can bind the new value, and - note whether or not the variable was exported. */ - if (v) - { - VUNSETATTR (v, att_readonly); - exported = exported_p (v); - } - else - exported = 0; + /* Note whether or not the variable was exported so we can adjust after the + assignment. */ + exported = v ? exported_p (v) : 0; - v = bind_variable ("SHELLOPTS", value, 0); + /* ASS_FORCE so we don't have to temporarily turn off readonly */ + v = bind_variable ("SHELLOPTS", value, ASS_FORCE); /* Turn the read-only attribute back on, and turn off the export attribute if it was set implicitly by mark_modified_vars and SHELLOPTS was not @@ -607,8 +591,7 @@ set_shellopts () } void -parse_shellopts (value) - char *value; +parse_shellopts (char *value) { char *vname; int vptr; @@ -622,8 +605,7 @@ parse_shellopts (value) } void -initialize_shell_options (no_shellopts) - int no_shellopts; +initialize_shell_options (int no_shellopts) { char *temp; SHELL_VAR *var; @@ -651,11 +633,13 @@ initialize_shell_options (no_shellopts) called from execute_cmd.c:initialize_subshell() when setting up a subshell to run an executable shell script without a leading `#!'. */ void -reset_shell_options () +reset_shell_options (void) { pipefail_opt = 0; ignoreeof = 0; + interactive_comments = 1; + #if defined (STRICT_POSIX) posixly_correct = 1; #else @@ -671,8 +655,7 @@ reset_shell_options () then print out the values of the variables instead. If LIST contains non-flags, then set $1 - $9 to the successive words of LIST. */ int -set_builtin (list) - WORD_LIST *list; +set_builtin (WORD_LIST *list) { int on_or_off, flag_name, force_assignment, opts_changed, rv, r; register char *arg; @@ -830,15 +813,26 @@ $END #define NEXT_VARIABLE() any_failed++; list = list->next; continue; +#define RESTORE_NAME() \ +do { \ + tname = name + strlen (name); \ + if (tname == t - 1) /* probably a paranoid check */ \ + { \ + tname[0] = '['; \ + t[strlen (t)] = ']'; \ + } \ +} while (0) + int -unset_builtin (list) - WORD_LIST *list; +unset_builtin (WORD_LIST *list) { int unset_function, unset_variable, unset_array, opt, nameref, any_failed; int global_unset_func, global_unset_var, vflags, base_vflags, valid_id; + int posix_utility_error; char *name, *tname; - unset_function = unset_variable = unset_array = nameref = any_failed = 0; + unset_function = unset_variable = unset_array = nameref = 0; + posix_utility_error = any_failed = 0; global_unset_func = global_unset_var = 0; reset_internal_getopt (); @@ -873,7 +867,7 @@ unset_builtin (list) nameref = 0; #if defined (ARRAY_VARS) - base_vflags = assoc_expand_once ? VA_NOEXPAND : 0; + base_vflags = array_expand_once ? VA_NOEXPAND : 0; #endif while (list) @@ -891,23 +885,26 @@ unset_builtin (list) #if defined (ARRAY_VARS) vflags = builtin_arrayref_flags (list->word, base_vflags); -#endif - -#if defined (ARRAY_VARS) unset_array = 0; /* XXX valid array reference second arg was 0 */ - if (!unset_function && nameref == 0 && tokenize_array_reference (name, vflags, &t)) + /* XXX tokenize_array_reference modifies NAME if it succeeds */ + if (unset_function == 0 && nameref == 0 && tokenize_array_reference (name, vflags, &t)) unset_array = 1; #endif + /* Get error checking out of the way first. The low-level functions just perform the unset, relying on the caller to verify. */ - valid_id = legal_identifier (name); + valid_id = valid_identifier (name); /* Whether or not we are in posix mode, if neither -f nor -v appears, skip over trying to unset variables with invalid names and just treat them as potential shell function names. */ if (global_unset_func == 0 && global_unset_var == 0 && valid_id == 0) { +#if defined (ARRAY_VARS) + if (unset_array) + RESTORE_NAME (); +#endif unset_variable = unset_array = 0; unset_function = 1; } @@ -918,6 +915,7 @@ unset_builtin (list) if (unset_function == 0 && valid_id == 0) { sh_invalidid (name); + posix_utility_error++; NEXT_VARIABLE (); } @@ -930,6 +928,7 @@ unset_builtin (list) if (var && unset_function == 0 && non_unsettable_p (var)) { builtin_error (_("%s: cannot unset"), name); + posix_utility_error++; NEXT_VARIABLE (); } @@ -941,8 +940,20 @@ unset_builtin (list) find a function after unsuccessfully searching for a variable, note that we're acting on a function now as if -f were supplied. The readonly check below takes care of it. */ - if (var == 0 && nameref == 0 && unset_variable == 0 && unset_function == 0) + if (var == 0 && nameref == 0 && unset_variable == 0 && unset_function == 0) { +#if defined (ARRAY_VARS) + /* We modified NAME in the call to tokenize_array_reference, so we + need to restore it here. We turned the original `[' and `]' into + NULL, to isolate the array name and subscript. This only happens + if tokenize_array_reference succeeds with a non-NULL subscript + pointer, and UNSET_ARRAY is set to 1 only in this case. */ + if (unset_array) + { + RESTORE_NAME(); + unset_array = 0; + } +#endif if (var = find_function (name)) unset_function = 1; } @@ -952,6 +963,7 @@ unset_builtin (list) { builtin_error (_("%s: cannot unset: readonly %s"), var->name, unset_function ? "function" : "variable"); + posix_utility_error++; NEXT_VARIABLE (); } @@ -987,6 +999,7 @@ unset_builtin (list) int len; tname = savestring (nameref_cell (var)); + tem = 0; if (var = array_variable_part (tname, 0, &t, &len)) { /* change to what unbind_array_element now expects */ @@ -1000,16 +1013,22 @@ unset_builtin (list) #endif tem = unbind_variable (nameref_cell (var)); } + else if (posixly_correct && var && tempvar_p (var)) + tem = posix_unbind_tempvar (name); else tem = unbind_variable (name); } + else if (posixly_correct && unset_function == 0 && nameref == 0 && var && tempvar_p (var)) + tem = posix_unbind_tempvar (name); else tem = unset_function ? unbind_func (name) : (nameref ? unbind_nameref (name) : unbind_variable (name)); /* This is what Posix.2 says: ``If neither -f nor -v is specified, the name refers to a variable; if a variable by - that name does not exist, a function by that name, if any, - shall be unset.'' */ + that name does not exist, it is unspecified whether a function + by that name, if any, shall be unset.'' The unspecified part is a + recent addition, so we continue to try to unset a shell function if + we don't find a variable named NAME. */ if (tem == -1 && nameref == 0 && unset_function == 0 && unset_variable == 0) tem = unbind_func (name); @@ -1024,5 +1043,5 @@ unset_builtin (list) list = list->next; } - return (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS); + return (any_failed ? (posix_utility_error ? EX_UTILERROR : EXECUTION_FAILURE) : EXECUTION_SUCCESS); } diff --git a/builtins/setattr.def b/builtins/setattr.def index 50c8edf68..146b2e0d7 100644 --- a/builtins/setattr.def +++ b/builtins/setattr.def @@ -1,7 +1,7 @@ This file is setattr.def, from which is created setattr.c. It implements the builtins "export" and "readonly", in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -38,16 +38,16 @@ $PRODUCES setattr.c #include "../flags.h" #include "common.h" #include "bashgetopt.h" +#include "builtext.h" extern sh_builtin_func_t *this_shell_builtin; -#ifdef ARRAY_VARS -extern int declare_builtin PARAMS((WORD_LIST *)); -#endif - #define READONLY_OR_EXPORT \ (this_shell_builtin == readonly_builtin || this_shell_builtin == export_builtin) +#define SPECIAL_LOCAL(n) \ + (this_shell_builtin == local_builtin && n[0] == '-' && n[1] == 0) + $BUILTIN export $FUNCTION export_builtin $SHORT_DOC export [-fn] [name[=value] ...] or export -p @@ -73,8 +73,7 @@ $END exported attribute from variables named in LIST. An argument of -f indicates that the names present in LIST refer to functions. */ int -export_builtin (list) - register WORD_LIST *list; +export_builtin (WORD_LIST *list) { return (set_or_show_attributes (list, att_exported, 0)); } @@ -104,8 +103,7 @@ $END /* For each variable name in LIST, make that variable readonly. Given an empty LIST, print out all existing readonly variables. */ int -readonly_builtin (list) - register WORD_LIST *list; +readonly_builtin (WORD_LIST *list) { return (set_or_show_attributes (list, att_readonly, 0)); } @@ -120,12 +118,10 @@ readonly_builtin (list) ATTRIBUTE. An arg of `-n' says to remove the attribute from the the remaining names in LIST (doesn't work for readonly). */ int -set_or_show_attributes (list, attribute, nodefs) - register WORD_LIST *list; - int attribute, nodefs; +set_or_show_attributes (WORD_LIST *list, int attribute, int nodefs) { register SHELL_VAR *var; - int assign, undo, any_failed, assign_error, opt; + int assign, undo, any_failed, assign_error, util_error, opt, retval; int functions_only, arrays_only, assoc_only; int aflags; char *name; @@ -137,7 +133,9 @@ set_or_show_attributes (list, attribute, nodefs) #endif functions_only = arrays_only = assoc_only = 0; - undo = any_failed = assign_error = 0; + undo = any_failed = assign_error = util_error = 0; + retval = EXECUTION_SUCCESS; + /* Read arguments from the front of the list. */ reset_internal_getopt (); while ((opt = internal_getopt (list, ATTROPTS)) != -1) @@ -215,11 +213,16 @@ set_or_show_attributes (list, attribute, nodefs) } } - if (legal_identifier (name) == 0) + if (valid_identifier (name) == 0) { sh_invalidid (name); if (assign) assign_error++; + else if (posixly_correct) + { + util_error++; + break; /* exit immediately on bad identifier */ + } else any_failed++; list = list->next; @@ -342,16 +345,21 @@ set_or_show_attributes (list, attribute, nodefs) } } - return (assign_error ? EX_BADASSIGN - : ((any_failed == 0) ? EXECUTION_SUCCESS - : EXECUTION_FAILURE)); + /* various failure modes */ + if (assign_error) + retval = EX_BADASSIGN; + else if (util_error) /* only posix mode sets this */ + retval = EX_UTILERROR; + else if (any_failed) + retval = EXECUTION_FAILURE; + + return (retval); } /* Show all variable variables (v == 1) or functions (v == 0) with attributes. */ int -show_all_var_attributes (v, nodefs) - int v, nodefs; +show_all_var_attributes (int v, int nodefs) { SHELL_VAR **variable_list, *var; int any_failed; @@ -378,8 +386,7 @@ show_all_var_attributes (v, nodefs) /* Show all local variable variables with their attributes. This shows unset local variables (all_local_variables called with 0 argument). */ int -show_local_var_attributes (v, nodefs) - int v, nodefs; +show_local_var_attributes (int v, int nodefs) { SHELL_VAR **variable_list, *var; int any_failed; @@ -403,11 +410,9 @@ show_local_var_attributes (v, nodefs) return (any_failed == 0 ? EXECUTION_SUCCESS : EXECUTION_FAILURE); } +/* Fill in FLAGS with attribute characters */ int -var_attribute_string (var, pattr, flags) - SHELL_VAR *var; - int pattr; - char *flags; /* filled in with attributes */ +var_attribute_string (SHELL_VAR *var, int pattr, char *flags) { int i; @@ -476,9 +481,7 @@ var_attribute_string (var, pattr, flags) or `readonly') instead of `declare', and doesn't print function defs when called by `export' or `readonly'. */ int -show_var_attributes (var, pattr, nodefs) - SHELL_VAR *var; - int pattr, nodefs; +show_var_attributes (SHELL_VAR *var, int pattr, int nodefs) { char flags[MAX_ATTRIBUTES], *x; int i; @@ -533,9 +536,7 @@ show_var_attributes (var, pattr, nodefs) } int -show_name_attributes (name, nodefs) - char *name; - int nodefs; +show_name_attributes (char *name, int nodefs) { SHELL_VAR *var; @@ -551,9 +552,7 @@ show_name_attributes (name, nodefs) } int -show_localname_attributes (name, nodefs) - char *name; - int nodefs; +show_localname_attributes (char *name, int nodefs) { SHELL_VAR *var; @@ -561,7 +560,11 @@ show_localname_attributes (name, nodefs) if (var && local_p (var) && var->context == variable_context) /* show every variable with attributes, even unset ones */ { - show_var_attributes (var, READONLY_OR_EXPORT, nodefs); + /* There is no equivalent `declare -'. */ + if (STREQ (var->name, "-")) + printf ("local -\n"); + else + show_var_attributes (var, READONLY_OR_EXPORT, nodefs); return (0); } else @@ -569,9 +572,7 @@ show_localname_attributes (name, nodefs) } int -show_func_attributes (name, nodefs) - char *name; - int nodefs; +show_func_attributes (char *name, int nodefs) { SHELL_VAR *var; @@ -586,10 +587,10 @@ show_func_attributes (name, nodefs) return (1); } +/* This is only called by readonly/export, so we can implement posix-mode + semantics for special variables. */ void -set_var_attribute (name, attribute, undo) - char *name; - int attribute, undo; +set_var_attribute (char *name, int attribute, int undo) { SHELL_VAR *var, *tv, *v, *refvar; char *tvalue; @@ -598,10 +599,8 @@ set_var_attribute (name, attribute, undo) var = find_variable (name); else { + /* var=value readonly var */ tv = find_tempenv_variable (name); - /* XXX -- need to handle case where tv is a temp variable in a - function-scope context, since function_env has been merged into - the local variables table. */ if (tv && tempvar_p (tv)) { tvalue = var_isset (tv) ? savestring (value_cell (tv)) : savestring (""); @@ -640,6 +639,9 @@ set_var_attribute (name, attribute, undo) } else { + /* Handle case where var is a temp variable in a function-scope + context, since function_env has been merged into the local + variables table (see below). */ var = find_variable_notempenv (name); if (var == 0) { @@ -659,7 +661,13 @@ set_var_attribute (name, attribute, undo) if (var) VSETATTR (var, att_invisible); } - else if (var->context != 0) + /* We don't want to do this for local variables or variables we found + in previous temporary environment contexts. */ +#if 0 + else if (var->context != 0 && local_p (var) == 0) +#else + else if (var->context != 0 && local_p (var) == 0 && tempvar_p (var) == 0) +#endif VSETATTR (var, att_propagate); } } diff --git a/builtins/shift.def b/builtins/shift.def index bb9af01b5..34bf9c8ab 100644 --- a/builtins/shift.def +++ b/builtins/shift.def @@ -1,7 +1,7 @@ This file is shift.def, from which is created shift.c. It implements the builtin "shift" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -54,8 +54,7 @@ int print_shift_error; anything in it, it is a number which says where to start the shifting. Return > 0 if `times' > $#, otherwise 0. */ int -shift_builtin (list) - WORD_LIST *list; +shift_builtin (WORD_LIST *list) { intmax_t times; int itimes, nargs; @@ -63,12 +62,15 @@ shift_builtin (list) CHECK_HELPOPT (list); if (get_numeric_arg (list, 0, ×) == 0) - return (EXECUTION_FAILURE); + return (EX_USAGE); if (times == 0) return (EXECUTION_SUCCESS); else if (times < 0) { + /* skip over `--' option to get the right error message */ + if (list && list->word && ISOPTION (list->word->word, '-')) + list = list->next; sh_erange (list ? list->word->word : NULL, _("shift count")); return (EXECUTION_FAILURE); } @@ -76,7 +78,13 @@ shift_builtin (list) if (times > nargs) { if (print_shift_error) - sh_erange (list ? list->word->word : NULL, _("shift count")); + { + /* skip over `--' option to get the right error message */ + if (list && list->word && ISOPTION (list->word->word, '-')) + list = list->next; + + sh_erange (list ? list->word->word : NULL, _("shift count")); + } return (EXECUTION_FAILURE); } else if (times == nargs) diff --git a/builtins/shopt.def b/builtins/shopt.def index ba97e7028..b3e1cfe50 100644 --- a/builtins/shopt.def +++ b/builtins/shopt.def @@ -1,7 +1,7 @@ This file is shopt.def, from which is created shopt.c. It implements the Bash `shopt' builtin. -Copyright (C) 1994-2021 Free Software Foundation, Inc. +Copyright (C) 1994-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -109,7 +109,7 @@ extern int force_fignore; extern int dircomplete_spelling, dircomplete_expand; extern int complete_fullquote; -extern int enable_hostname_completion PARAMS((int)); +extern int enable_hostname_completion (int); #endif #if defined (PROGRAMMABLE_COMPLETION) @@ -122,7 +122,6 @@ extern int debugging_mode; #endif #if defined (ARRAY_VARS) -extern int assoc_expand_once; extern int array_expand_once; int expand_once_flag; #endif @@ -131,33 +130,33 @@ int expand_once_flag; extern int syslog_history; #endif -static void shopt_error PARAMS((char *)); +static void shopt_error (char *); -static int set_shellopts_after_change PARAMS((char *, int)); -static int set_compatibility_level PARAMS((char *, int)); +static int set_shellopts_after_change (char *, int); +static int set_compatibility_level (char *, int); #if defined (RESTRICTED_SHELL) -static int set_restricted_shell PARAMS((char *, int)); +static int set_restricted_shell (char *, int); #endif #if defined (READLINE) -static int shopt_enable_hostname_completion PARAMS((char *, int)); -static int shopt_set_complete_direxpand PARAMS((char *, int)); +static int shopt_enable_hostname_completion (char *, int); +static int shopt_set_complete_direxpand (char *, int); #endif #if defined (ARRAY_VARS) -static int set_assoc_expand PARAMS((char *, int)); +static int set_array_expand (char *, int); #endif #if defined (EXTENDED_GLOB) int extglob_flag = EXTGLOB_DEFAULT; -static int shopt_set_extglob PARAMS((char *, int)); +static int shopt_set_extglob (char *, int); #endif int expaliases_flag = 0; -static int shopt_set_expaliases PARAMS((char *, int)); +static int shopt_set_expaliases (char *, int); -static int shopt_set_debug_mode PARAMS((char *, int)); +static int shopt_set_debug_mode (char *, int); static int shopt_login_shell; static int shopt_compat31; @@ -168,7 +167,7 @@ static int shopt_compat42; static int shopt_compat43; static int shopt_compat44; -typedef int shopt_set_func_t PARAMS((char *, int)); +typedef int shopt_set_func_t (char *, int); /* If you add a new variable name here, make sure to set the default value appropriately in reset_shopt_options. */ @@ -180,7 +179,8 @@ static struct { } shopt_vars[] = { { "autocd", &autocd, (shopt_set_func_t *)NULL }, #if defined (ARRAY_VARS) - { "assoc_expand_once", &expand_once_flag, set_assoc_expand }, + { "array_expand_once", &expand_once_flag, set_array_expand }, + { "assoc_expand_once", &expand_once_flag, set_array_expand }, #endif { "cdable_vars", &cdable_vars, (shopt_set_func_t *)NULL }, { "cdspell", &cdspelling, (shopt_set_func_t *)NULL }, @@ -276,14 +276,14 @@ static struct { static const char * const on = "on"; static const char * const off = "off"; -static int find_shopt PARAMS((char *)); -static int toggle_shopts PARAMS((int, WORD_LIST *, int)); -static void print_shopt PARAMS((char *, int, int)); -static int list_shopts PARAMS((WORD_LIST *, int)); -static int list_some_shopts PARAMS((int, int)); -static int list_shopt_o_options PARAMS((WORD_LIST *, int)); -static int list_some_o_options PARAMS((int, int)); -static int set_shopt_o_options PARAMS((int, WORD_LIST *, int)); +static int find_shopt (char *); +static int toggle_shopts (int, WORD_LIST *, int); +static void print_shopt (char *, int, int); +static int list_shopts (WORD_LIST *, int); +static int list_some_shopts (int, int); +static int list_shopt_o_options (WORD_LIST *, int); +static int list_some_o_options (int, int); +static int set_shopt_o_options (int, WORD_LIST *, int); #define SFLAG 0x01 #define UFLAG 0x02 @@ -292,8 +292,7 @@ static int set_shopt_o_options PARAMS((int, WORD_LIST *, int)); #define PFLAG 0x10 int -shopt_builtin (list) - WORD_LIST *list; +shopt_builtin (WORD_LIST *list) { int opt, flags, rval; @@ -351,7 +350,7 @@ shopt_builtin (list) /* Reset the options managed by `shopt' to the values they would have at shell startup. Variables from shopt_vars. */ void -reset_shopt_options () +reset_shopt_options (void) { autocd = cdable_vars = cdspelling = 0; check_hashed_filenames = CHECKHASH_DEFAULT; @@ -375,7 +374,7 @@ reset_shopt_options () source_uses_path = promptvars = 1; varassign_redir_autoclose = 0; singlequote_translations = 0; - patsub_replacement = 1; + patsub_replacement = PATSUB_REPLACE_DEFAULT; #if defined (JOB_CONTROL) check_jobs_at_exit = 0; @@ -384,9 +383,10 @@ reset_shopt_options () #if defined (EXTENDED_GLOB) extended_glob = extglob_flag = EXTGLOB_DEFAULT; #endif + glob_always_skip_dot_and_dotdot = 1; /* new default as of bash-5.2 */ #if defined (ARRAY_VARS) - expand_once_flag = assoc_expand_once = 0; + expand_once_flag = array_expand_once = 0; #endif #if defined (HISTORY) @@ -430,12 +430,15 @@ reset_shopt_options () xpg_echo = 0; #endif /* DEFAULT_ECHO_TO_XPG */ +#if defined (DEBUGGER) + debugging_mode = 0; +#endif + shopt_login_shell = login_shell; } static int -find_shopt (name) - char *name; +find_shopt (char *name) { int i; @@ -446,17 +449,13 @@ find_shopt (name) } static void -shopt_error (s) - char *s; +shopt_error (char *s) { builtin_error (_("%s: invalid shell option name"), s); } static int -toggle_shopts (mode, list, quiet) - int mode; - WORD_LIST *list; - int quiet; +toggle_shopts (int mode, WORD_LIST *list, int quiet) { WORD_LIST *l; int ind, rval; @@ -485,9 +484,7 @@ toggle_shopts (mode, list, quiet) } static void -print_shopt (name, val, flags) - char *name; - int val, flags; +print_shopt (char *name, int val, int flags) { if (flags & PFLAG) printf ("shopt %s %s\n", val ? "-s" : "-u", name); @@ -498,9 +495,7 @@ print_shopt (name, val, flags) /* List the values of all or any of the `shopt' options. Returns 0 if all were listed or all variables queried were on; 1 otherwise. */ static int -list_shopts (list, flags) - WORD_LIST *list; - int flags; +list_shopts (WORD_LIST *list, int flags) { WORD_LIST *l; int i, val, rval; @@ -536,8 +531,7 @@ list_shopts (list, flags) } static int -list_some_shopts (mode, flags) - int mode, flags; +list_some_shopts (int mode, int flags) { int val, i; @@ -551,9 +545,7 @@ list_some_shopts (mode, flags) } static int -list_shopt_o_options (list, flags) - WORD_LIST *list; - int flags; +list_shopt_o_options (WORD_LIST *list, int flags) { WORD_LIST *l; int val, rval; @@ -588,8 +580,7 @@ list_shopt_o_options (list, flags) } static int -list_some_o_options (mode, flags) - int mode, flags; +list_some_o_options (int mode, int flags) { if ((flags & QFLAG) == 0) list_minus_o_opts (mode, (flags & PFLAG)); @@ -597,10 +588,7 @@ list_some_o_options (mode, flags) } static int -set_shopt_o_options (mode, list, quiet) - int mode; - WORD_LIST *list; - int quiet; +set_shopt_o_options (int mode, WORD_LIST *list, int quiet) { WORD_LIST *l; int rval; @@ -617,18 +605,14 @@ set_shopt_o_options (mode, list, quiet) /* If we set or unset interactive_comments with shopt, make sure the change is reflected in $SHELLOPTS. */ static int -set_shellopts_after_change (option_name, mode) - char *option_name; - int mode; +set_shellopts_after_change (char *option_name, int mode) { set_shellopts (); return (0); } static int -shopt_set_debug_mode (option_name, mode) - char *option_name; - int mode; +shopt_set_debug_mode (char *option_name, int mode) { #if defined (DEBUGGER) error_trace_mode = function_trace_mode = debugging_mode; @@ -640,9 +624,7 @@ shopt_set_debug_mode (option_name, mode) } static int -shopt_set_expaliases (option_name, mode) - char *option_name; - int mode; +shopt_set_expaliases (char *option_name, int mode) { expand_aliases = expaliases_flag; return 0; @@ -650,9 +632,7 @@ shopt_set_expaliases (option_name, mode) #if defined (EXTENDED_GLOB) static int -shopt_set_extglob (option_name, mode) - char *option_name; - int mode; +shopt_set_extglob (char *option_name, int mode) { extended_glob = extglob_flag; return 0; @@ -661,26 +641,21 @@ shopt_set_extglob (option_name, mode) #if defined (READLINE) static int -shopt_enable_hostname_completion (option_name, mode) - char *option_name; - int mode; +shopt_enable_hostname_completion (char *option_name, int mode) { return (enable_hostname_completion (mode)); } #endif static int -set_compatibility_level (option_name, mode) - char *option_name; - int mode; +set_compatibility_level (char *option_name, int mode) { int ind, oldval; char *rhs; /* If we're unsetting one of the compatibility options, make sure the current value is in the range of the compatNN space. */ - if (mode == 0) - oldval = shell_compatibility_level; + oldval = (mode == 0) ? shell_compatibility_level : 0; /* If we're setting something, redo some of the work we did above in toggle_shopt(). Unset everything and reset the appropriate option @@ -725,7 +700,7 @@ set_compatibility_level (option_name, mode) /* Set and unset the various compatibility options from the value of shell_compatibility_level; used by sv_shcompat */ void -set_compatibility_opts () +set_compatibility_opts (void) { shopt_compat31 = shopt_compat32 = 0; shopt_compat40 = shopt_compat41 = shopt_compat42 = shopt_compat43 = 0; @@ -755,9 +730,7 @@ set_compatibility_opts () #if defined (READLINE) static int -shopt_set_complete_direxpand (option_name, mode) - char *option_name; - int mode; +shopt_set_complete_direxpand (char *option_name, int mode) { set_directory_hook (); return 0; @@ -768,9 +741,7 @@ shopt_set_complete_direxpand (option_name, mode) /* Don't allow the value of restricted_shell to be modified. */ static int -set_restricted_shell (option_name, mode) - char *option_name; - int mode; +set_restricted_shell (char *option_name, int mode) { static int save_restricted = -1; @@ -784,19 +755,18 @@ set_restricted_shell (option_name, mode) /* Not static so shell.c can call it to initialize shopt_login_shell */ int -set_login_shell (option_name, mode) - char *option_name; - int mode; +set_login_shell (char *option_name, int mode) { shopt_login_shell = login_shell != 0; return (0); } char ** -get_shopt_options () +get_shopt_options (void) { char **ret; - int n, i; + int i; + size_t n; n = sizeof (shopt_vars) / sizeof (shopt_vars[0]); ret = strvec_create (n + 1); @@ -812,9 +782,7 @@ get_shopt_options () * REUSABLE is 1 if we want to print output in a form that may be reused. */ int -shopt_setopt (name, mode) - char *name; - int mode; +shopt_setopt (char *name, int mode) { WORD_LIST *wl; int r; @@ -826,9 +794,7 @@ shopt_setopt (name, mode) } int -shopt_listopt (name, reusable) - char *name; - int reusable; +shopt_listopt (char *name, int reusable) { int i; @@ -847,11 +813,12 @@ shopt_listopt (name, reusable) } void -set_bashopts () +set_bashopts (void) { char *value; char tflag[N_SHOPT_OPTIONS]; - int vsize, i, vptr, *ip, exported; + int i, exported; + size_t vsize, vptr; SHELL_VAR *v; for (vsize = i = 0; shopt_vars[i].name; i++) @@ -882,17 +849,12 @@ set_bashopts () v = find_variable ("BASHOPTS"); - /* Turn off the read-only attribute so we can bind the new value, and - note whether or not the variable was exported. */ - if (v) - { - VUNSETATTR (v, att_readonly); - exported = exported_p (v); - } - else - exported = 0; + /* Note whether or not the variable was exported so we can adjust after the + assignment. */ + exported = v ? exported_p (v) : 0; - v = bind_variable ("BASHOPTS", value, 0); + /* ASS_FORCE so we don't have to temporarily turn off readonly */ + v = bind_variable ("BASHOPTS", value, ASS_FORCE); /* Turn the read-only attribute back on, and turn off the export attribute if it was set implicitly by mark_modified_vars and SHELLOPTS was not @@ -905,8 +867,7 @@ set_bashopts () } void -parse_bashopts (value) - char *value; +parse_bashopts (char *value) { char *vname; int vptr, ind; @@ -926,8 +887,7 @@ parse_bashopts (value) } void -initialize_bashopts (no_bashopts) - int no_bashopts; +initialize_bashopts (int no_bashopts) { char *temp; SHELL_VAR *var; @@ -953,14 +913,12 @@ initialize_bashopts (no_bashopts) #if defined (ARRAY_VARS) static int -set_assoc_expand (option_name, mode) - char *option_name; - int mode; +set_array_expand (char *option_name, int mode) { #if 0 /* leave this disabled */ if (shell_compatibility_level <= 51) #endif - assoc_expand_once = expand_once_flag; + array_expand_once = expand_once_flag; return 0; } #endif diff --git a/builtins/source.def b/builtins/source.def index 5b2f994db..b68d16a59 100644 --- a/builtins/source.def +++ b/builtins/source.def @@ -1,7 +1,7 @@ This file is source.def, from which is created source.c. It implements the builtins "." and "source" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -80,7 +80,7 @@ $END extern int errno; #endif /* !errno */ -static void maybe_pop_dollar_vars PARAMS((void)); +static void uw_maybe_pop_dollar_vars (void *); /* If non-zero, `.' uses $PATH to look up the script to be sourced. */ int source_uses_path = 1; @@ -96,7 +96,7 @@ int source_searches_cwd = 1; not executing a shell function, we leave the new values alone and free the saved values. */ static void -maybe_pop_dollar_vars () +uw_maybe_pop_dollar_vars (void *ignore) { if (variable_context == 0 && (dollar_vars_changed () & ARGS_SETBLTIN)) dispose_saved_dollar_vars (); @@ -113,8 +113,7 @@ maybe_pop_dollar_vars () take place in there. So, I open the file, place it into a large string, close the file, and then execute the string. */ int -source_builtin (list) - WORD_LIST *list; +source_builtin (WORD_LIST *list) { int result; char *filename, *debug_trap, *x; @@ -171,7 +170,7 @@ source_builtin (list) if (list->next) { push_dollar_vars (); - add_unwind_protect ((Function *)maybe_pop_dollar_vars, (char *)NULL); + add_unwind_protect (uw_maybe_pop_dollar_vars, NULL); if (debugging_mode || shell_compatibility_level <= 44) init_bash_argv (); /* Initialize BASH_ARGV and BASH_ARGC */ remember_args (list->next, 1); @@ -188,7 +187,7 @@ source_builtin (list) { debug_trap = savestring (debug_trap); add_unwind_protect (xfree, debug_trap); - add_unwind_protect (maybe_set_debug_trap, debug_trap); + add_unwind_protect (uw_maybe_set_debug_trap, debug_trap); restore_default_signal (DEBUG_TRAP); } diff --git a/builtins/suspend.def b/builtins/suspend.def index 4f3a56c9c..73922ef3f 100644 --- a/builtins/suspend.def +++ b/builtins/suspend.def @@ -56,7 +56,7 @@ $END #include "common.h" #include "bashgetopt.h" -static sighandler suspend_continue PARAMS((int)); +static sighandler suspend_continue (int); static SigHandler *old_cont; #if 0 @@ -65,8 +65,7 @@ static SigHandler *old_stop; /* Continue handler. */ static sighandler -suspend_continue (sig) - int sig; +suspend_continue (int sig) { set_signal_handler (SIGCONT, old_cont); #if 0 @@ -78,8 +77,7 @@ suspend_continue (sig) /* Suspending the shell. If -f is the arg, then do the suspend no matter what. Otherwise, complain if a login shell. */ int -suspend_builtin (list) - WORD_LIST *list; +suspend_builtin (WORD_LIST *list) { int opt, force; @@ -98,7 +96,7 @@ suspend_builtin (list) } list = loptend; - no_args (list); + no_args (list, 0); if (force == 0) { diff --git a/builtins/test.def b/builtins/test.def index bd9a203b6..da7870c77 100644 --- a/builtins/test.def +++ b/builtins/test.def @@ -1,7 +1,7 @@ This file is test.def, from which is created test.c. It implements the builtin "test" in Bash. -Copyright (C) 1987-2015 Free Software Foundation, Inc. +Copyright (C) 1987-2015,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -131,8 +131,7 @@ $END /* TEST/[ builtin. */ int -test_builtin (list) - WORD_LIST *list; +test_builtin (WORD_LIST *list) { char **argv; int argc, result; diff --git a/builtins/times.def b/builtins/times.def index f31f43331..b6d9faf25 100644 --- a/builtins/times.def +++ b/builtins/times.def @@ -1,7 +1,7 @@ This file is times.def, from which is created times.c. It implements the builtin "times" in Bash. -Copyright (C) 1987-2009 Free Software Foundation, Inc. +Copyright (C) 1987-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -43,7 +43,6 @@ $END #include #include "../bashtypes.h" -#include "../shell.h" #include @@ -55,12 +54,15 @@ $END # include #endif +#define NEED_CLOCK_FUNCS_DECL +#define NEED_TIMEVAL_FUNCS_DECL + +#include "../shell.h" #include "common.h" /* Print the totals for system and user time used. */ int -times_builtin (list) - WORD_LIST *list; +times_builtin (WORD_LIST *list) { #if defined (HAVE_GETRUSAGE) && defined (HAVE_TIMEVAL) && defined (RUSAGE_SELF) struct rusage self, kids; diff --git a/builtins/trap.def b/builtins/trap.def index 94229433c..f28bde8e8 100644 --- a/builtins/trap.def +++ b/builtins/trap.def @@ -1,7 +1,7 @@ This file is trap.def, from which is created trap.c. It implements the builtin "trap" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -22,31 +22,38 @@ $PRODUCES trap.c $BUILTIN trap $FUNCTION trap_builtin -$SHORT_DOC trap [-lp] [[arg] signal_spec ...] +$SHORT_DOC trap [-Plp] [[action] signal_spec ...] Trap signals and other events. Defines and activates handlers to be run when the shell receives signals or other conditions. -ARG is a command to be read and executed when the shell receives the -signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC +ACTION is a command to be read and executed when the shell receives the +signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC is supplied) or `-', each specified signal is reset to its original -value. If ARG is the null string each SIGNAL_SPEC is ignored by the +value. If ACTION is the null string each SIGNAL_SPEC is ignored by the shell and by the commands it invokes. -If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. If -a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command. If -a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a -script run by the . or source builtins finishes executing. A SIGNAL_SPEC -of ERR means to execute ARG each time a command's failure would cause the -shell to exit when the -e option is enabled. +If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell. +If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple command +and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is +executed each time a shell function or a script run by the . or source +builtins finishes executing. A SIGNAL_SPEC of ERR means to execute ACTION +each time a command's failure would cause the shell to exit when the -e +option is enabled. If no arguments are supplied, trap prints the list of commands associated -with each signal. +with each trapped signal in a form that may be reused as shell input to +restore the same signal dispositions. Options: -l print a list of signal names and their corresponding numbers - -p display the trap commands associated with each SIGNAL_SPEC + -p display the trap commands associated with each SIGNAL_SPEC in a + form that may be reused as shell input; or for all trapped + signals if no arguments are supplied + -P display the trap commands associated with each SIGNAL_SPEC. At least + one SIGNAL_SPEC must be supplied. -P and -p cannot be used + together. Each SIGNAL_SPEC is either a signal name in or a signal number. Signal names are case insensitive and the SIG prefix is optional. A @@ -75,13 +82,13 @@ $END #include "common.h" #include "bashgetopt.h" -static void showtrap PARAMS((int, int)); -static int display_traps PARAMS((WORD_LIST *, int)); +static void showtrap (int, int); +static int display_traps (WORD_LIST *, int); /* The trap command: - trap - trap + trap + trap trap -l trap -p [sigspec ...] trap [--] @@ -97,17 +104,21 @@ static int display_traps PARAMS((WORD_LIST *, int)); #define REVERT 1 /* Revert to this signals original value. */ #define IGNORE 2 /* Ignore this signal. */ +/* Flags saying how to display the trap list. */ +#define DISP_TRAPCMD 1 +#define DISP_ALLSIGS 2 +#define DISP_ACTIONONLY 4 + int -trap_builtin (list) - WORD_LIST *list; +trap_builtin (WORD_LIST *list) { - int list_signal_names, display, result, opt; + int list_signal_names, result, opt, dflags; - list_signal_names = display = 0; + list_signal_names = dflags = 0; result = EXECUTION_SUCCESS; reset_internal_getopt (); - while ((opt = internal_getopt (list, "lp")) != -1) + while ((opt = internal_getopt (list, "lpP")) != -1) { switch (opt) { @@ -115,7 +126,10 @@ trap_builtin (list) list_signal_names++; break; case 'p': - display++; + dflags |= DISP_TRAPCMD; + break; + case 'P': + dflags |= DISP_ACTIONONLY; break; CASE_HELPOPT; default: @@ -127,13 +141,26 @@ trap_builtin (list) opt = DSIG_NOCASE|DSIG_SIGPREFIX; /* flags for decode_signal */ + if ((dflags & DISP_TRAPCMD) && (dflags & DISP_ACTIONONLY)) + { + builtin_error ("cannot specify both -p and -P"); + return EX_USAGE; + } + if ((dflags & DISP_ACTIONONLY) && list == 0) + { + builtin_error ("-P requires at least one signal name"); + return EX_USAGE; + } + if (list_signal_names) return (sh_chkwrite (display_signal_list ((WORD_LIST *)NULL, 1))); - else if (display || list == 0) + else if (dflags || list == 0) { initialize_terminating_signals (); get_all_original_signals (); - return (sh_chkwrite (display_traps (list, display && posixly_correct))); + if (dflags & DISP_TRAPCMD) + dflags |= posixly_correct ? DISP_ALLSIGS : 0; + return (sh_chkwrite (display_traps (list, dflags))); } else { @@ -207,7 +234,13 @@ trap_builtin (list) { case SIGINT: /* XXX - should we do this if original disposition - was SIG_IGN? */ + was SIG_IGN? Yes, because setup_async_signals can + set the original disposition to SIG_IGN to keep + restore_signal from restoring the SIGINT + disposition from when the shell was invoked, and + we want to allow an asynchronous subshell to + use `trap' to restore the default disposition or + set a trap command. */ if (interactive) set_signal_handler (SIGINT, sigint_sighandler); /* special cases for interactive == 0 */ @@ -218,8 +251,13 @@ trap_builtin (list) break; case SIGQUIT: - /* Always ignore SIGQUIT. */ - set_signal_handler (SIGQUIT, SIG_IGN); + /* Always ignore SIGQUIT, but allow a posix-mode shell + that is running asynchronously and has ignored + SIGQUIT to reset it to the default. POSIX interp 751. */ + if (posixly_correct && signal_is_async_ignored (SIGQUIT)) + set_signal_handler (SIGQUIT, termsig_sighandler); + else + set_signal_handler (SIGQUIT, SIG_IGN); break; case SIGTERM: #if defined (JOB_CONTROL) @@ -246,8 +284,7 @@ trap_builtin (list) } static void -showtrap (i, show_default) - int i, show_default; +showtrap (int i, int show_default) { char *t, *p, *sn; int free_t; @@ -286,13 +323,18 @@ showtrap (i, show_default) FREE (t); } +/* Flags saying how to display the trap list. */ +#define DISP_TRAPCMD 1 +#define DISP_ALLSIGS 2 +#define DISP_ACTIONONLY 4 + + static int -display_traps (list, show_all) - WORD_LIST *list; - int show_all; +display_traps (WORD_LIST *list, int flags) { - int result, i; + int result, i, show_all; + show_all = flags & DISP_ALLSIGS; if (list == 0) { for (i = 0; i < BASH_NSIG; i++) @@ -308,6 +350,16 @@ display_traps (list, show_all) sh_invalidsig (list->word->word); result = EXECUTION_FAILURE; } + else if (flags & DISP_ACTIONONLY) + { + char *t; + t = trap_list[i]; + if (t == (char *)DEFAULT_SIG || signal_is_hard_ignored (i)) + continue; + else if (t == (char *)IGNORE_SIG) + t = ""; + printf ("%s\n", t); + } else showtrap (i, show_all); } diff --git a/builtins/type.def b/builtins/type.def index a8e47c0ac..6eaa3f03f 100644 --- a/builtins/type.def +++ b/builtins/type.def @@ -1,7 +1,7 @@ This file is type.def, from which is created type.c. It implements the builtin "type" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -64,6 +64,7 @@ $END #include "../bashintl.h" #include "../shell.h" +#include "../builtins.h" #include "../parser.h" #include "../execute_cmd.h" #include "../findcmd.h" @@ -76,8 +77,6 @@ $END #include "common.h" #include "bashgetopt.h" -extern int find_reserved_word PARAMS((char *)); - /* For each word in LIST, find out what the shell is going to do with it as a simple command. i.e., which file would this shell use to execve, or if it is a builtin command, or an alias. Possible flag @@ -107,8 +106,7 @@ extern int find_reserved_word PARAMS((char *)); */ int -type_builtin (list) - WORD_LIST *list; +type_builtin (WORD_LIST *list) { int dflags, any_failed, opt; WORD_LIST *this; @@ -163,7 +161,7 @@ type_builtin (list) dflags |= CDESC_TYPE; dflags &= ~(CDESC_PATH_ONLY|CDESC_SHORTDESC); break; - case 'P': /* shorthand for type -ap */ + case 'P': /* force path search only plus hash table lookup */ dflags |= (CDESC_PATH_ONLY|CDESC_FORCE_PATH); dflags &= ~(CDESC_TYPE|CDESC_SHORTDESC); break; @@ -210,11 +208,9 @@ type_builtin (list) * return after finding it once. */ int -describe_command (command, dflags) - char *command; - int dflags; +describe_command (char *command, int dflags) { - int found, i, found_file, f, all; + int found, i, found_file, f, all, skipbuiltin; char *full_path, *x, *pathlist; SHELL_VAR *func; #if defined (ALIAS) @@ -242,7 +238,7 @@ describe_command (command, dflags) found = 1; - if (all == 0) + if (all == 0) /* type -p returns, any executable file would not have precedence */ return (1); } #endif /* ALIAS */ @@ -263,6 +259,24 @@ describe_command (command, dflags) return (1); } + /* In posix mode, we find special builtins before shell functions. */ + /* find_shell_builtin sets current_builtin as a side effect */ + skipbuiltin = 0; + if (posixly_correct && (dflags & CDESC_FORCE_PATH) == 0 && find_shell_builtin (command) != 0 && (current_builtin->flags & SPECIAL_BUILTIN)) + { + if (dflags & CDESC_TYPE) + puts ("builtin"); + else if (dflags & CDESC_SHORTDESC) + printf (_("%s is a special shell builtin\n"), command); + else if (dflags & CDESC_REUSABLE) + printf ("%s\n", command); + + skipbuiltin = found = 1; + + if (all == 0) + return (1); + } + /* Command is a function? */ if (((dflags & (CDESC_FORCE_PATH|CDESC_NOFUNCS)) == 0) && (func = find_function (command))) { @@ -289,13 +303,14 @@ describe_command (command, dflags) } /* Command is a builtin? */ - if (((dflags & CDESC_FORCE_PATH) == 0) && find_shell_builtin (command)) + /* find_shell_builtin sets current_builtin as a side effect */ + if (skipbuiltin == 0 && ((dflags & CDESC_FORCE_PATH) == 0) && find_shell_builtin (command)) { if (dflags & CDESC_TYPE) puts ("builtin"); else if (dflags & CDESC_SHORTDESC) { - if (posixly_correct && find_special_builtin (command) != 0) + if (posixly_correct && (current_builtin->flags & SPECIAL_BUILTIN)) printf (_("%s is a special shell builtin\n"), command); else printf (_("%s is a shell builtin\n"), command); @@ -345,7 +360,8 @@ describe_command (command, dflags) printf ("%s\n", full_path); free (full_path); - return (1); + if (all == 0) + return (1); } } @@ -371,6 +387,7 @@ describe_command (command, dflags) probably doesn't exist. Check whether or not the command is an executable file. If it's not, don't report a match. This is the default posix mode behavior */ + /* This code path isn't executed any more as of 3/2023. */ if (STREQ (full_path, command) || posixly_correct) { f = file_status (full_path); diff --git a/builtins/ulimit.def b/builtins/ulimit.def index fd9f7a3df..316d0ec33 100644 --- a/builtins/ulimit.def +++ b/builtins/ulimit.def @@ -1,7 +1,7 @@ This file is ulimit.def, from which is created ulimit.c. It implements the builtin "ulimit" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -63,9 +63,10 @@ current soft limit, the current hard limit, and no limit, respectively. Otherwise, the current value of the specified resource is printed. If no option is given, then -f is assumed. -Values are in 1024-byte increments, except for -t, which is in seconds, --p, which is in increments of 512 bytes, and -u, which is an unscaled -number of processes. +Values are in 1024-byte increments, except for -t, which is in seconds; +-p, which is in increments of 512 bytes; -R, which is in microseconds; +-b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P, +which accept unscaled values. Exit Status: Returns success unless an invalid option is supplied or an error occurs. @@ -93,6 +94,7 @@ $END #include "common.h" #include "bashgetopt.h" #include "pipesize.h" +#include #if !defined (errno) extern int errno; @@ -130,7 +132,7 @@ extern int errno; #if !defined (RLIMTYPE) # define RLIMTYPE long -# define string_to_rlimtype(s) strtol(s, (char **)NULL, 10) +# define string_to_rlimtype(s, ep) strtol(s, ep, 10) # define print_rlimtype(num, nl) printf ("%ld%s", num, nl ? "\n" : "") #endif @@ -204,22 +206,22 @@ extern int errno; #define BLOCKSIZE(x) (((x) == POSIXBLK) ? (posixly_correct ? 512 : 1024) : (x)) -static int _findlim PARAMS((int)); +static int _findlim (int); -static int ulimit_internal PARAMS((int, char *, int, int)); +static int ulimit_internal (int, char *, int, int); -static int get_limit PARAMS((int, RLIMTYPE *, RLIMTYPE *)); -static int set_limit PARAMS((int, RLIMTYPE, int)); +static int get_limit (int, RLIMTYPE *, RLIMTYPE *); +static int set_limit (int, RLIMTYPE, int); -static void printone PARAMS((int, RLIMTYPE, int)); -static void print_all_limits PARAMS((int)); +static void printone (int, RLIMTYPE, int); +static void print_all_limits (int); -static int set_all_limits PARAMS((int, RLIMTYPE)); +static int set_all_limits (int, RLIMTYPE); -static int filesize PARAMS((RLIMTYPE *)); -static int pipesize PARAMS((RLIMTYPE *)); -static int getmaxuprc PARAMS((RLIMTYPE *)); -static int getmaxvm PARAMS((RLIMTYPE *, RLIMTYPE *)); +static int filesize (RLIMTYPE *); +static int pipesize (RLIMTYPE *); +static int getmaxuprc (RLIMTYPE *); +static int getmaxvm (RLIMTYPE *, RLIMTYPE *); typedef struct { int option; /* The ulimit option for this limit. */ @@ -299,13 +301,11 @@ typedef struct _cmd { static ULCMD *cmdlist; static int ncmd; -static int cmdlistsz; +static size_t cmdlistsz; #if !defined (HAVE_RESOURCE) && !defined (HAVE_ULIMIT) long -ulimit (cmd, newlim) - int cmd; - long newlim; +ulimit (int cmd, long newlim) { errno = EINVAL; return -1; @@ -313,8 +313,7 @@ ulimit (cmd, newlim) #endif /* !HAVE_RESOURCE && !HAVE_ULIMIT */ static int -_findlim (opt) - int opt; +_findlim (int opt) { register int i; @@ -329,8 +328,7 @@ static char optstring[4 + 2 * NCMDS]; /* Report or set limits associated with certain per-process resources. See the help documentation in builtins.c for a full description. */ int -ulimit_builtin (list) - register WORD_LIST *list; +ulimit_builtin (WORD_LIST *list) { register char *s; int c, limind, mode, opt, all_limits; @@ -441,14 +439,11 @@ ulimit_builtin (list) if (ulimit_internal (cmdlist[c].cmd, cmdlist[c].arg, mode, ncmd > 1) == EXECUTION_FAILURE) return (EXECUTION_FAILURE); - return (EXECUTION_SUCCESS); + return (sh_chkwrite (EXECUTION_SUCCESS)); } static int -ulimit_internal (cmd, cmdarg, mode, multiple) - int cmd; - char *cmdarg; - int mode, multiple; +ulimit_internal (int cmd, char *cmdarg, int mode, int multiple) { int opt, limind, setting; int block_factor; @@ -479,9 +474,16 @@ ulimit_internal (cmd, cmdarg, mode, multiple) real_limit = soft_limit; else if (STREQ (cmdarg, "unlimited")) real_limit = RLIM_INFINITY; - else if (all_digits (cmdarg)) + else if (DIGIT (*cmdarg) && (cmdarg[1] == 0 || DIGIT (cmdarg[1]))) { - limit = string_to_rlimtype (cmdarg); + char *endp; + limit = string_to_rlimtype (cmdarg, &endp); + if (*endp != '\0') + { + sh_invalidnum (cmdarg); + return (EXECUTION_FAILURE); + } + block_factor = BLOCKSIZE(limits[limind].block_factor); real_limit = limit * block_factor; @@ -508,9 +510,7 @@ ulimit_internal (cmd, cmdarg, mode, multiple) } static int -get_limit (ind, softlim, hardlim) - int ind; - RLIMTYPE *softlim, *hardlim; +get_limit (int ind, RLIMTYPE *softlim, RLIMTYPE *hardlim) { RLIMTYPE value; #if defined (HAVE_RESOURCE) @@ -569,10 +569,7 @@ get_limit (ind, softlim, hardlim) } static int -set_limit (ind, newlim, mode) - int ind; - RLIMTYPE newlim; - int mode; +set_limit (int ind, RLIMTYPE newlim, int mode) { #if defined (HAVE_RESOURCE) struct rlimit limit; @@ -634,8 +631,7 @@ set_limit (ind, newlim, mode) } static int -getmaxvm (softlim, hardlim) - RLIMTYPE *softlim, *hardlim; +getmaxvm (RLIMTYPE *softlim, RLIMTYPE *hardlim) { #if defined (HAVE_RESOURCE) struct rlimit datalim, stacklim; @@ -657,8 +653,7 @@ getmaxvm (softlim, hardlim) } static int -filesize(valuep) - RLIMTYPE *valuep; +filesize (RLIMTYPE *valuep) { #if !defined (HAVE_RESOURCE) long result; @@ -674,8 +669,7 @@ filesize(valuep) } static int -pipesize (valuep) - RLIMTYPE *valuep; +pipesize (RLIMTYPE *valuep) { #if defined (PIPE_BUF) /* This is defined on Posix systems. */ @@ -699,8 +693,7 @@ pipesize (valuep) } static int -getmaxuprc (valuep) - RLIMTYPE *valuep; +getmaxuprc (RLIMTYPE *valuep) { long maxchild; @@ -718,8 +711,7 @@ getmaxuprc (valuep) } static void -print_all_limits (mode) - int mode; +print_all_limits (int mode) { register int i; RLIMTYPE softlim, hardlim; @@ -738,10 +730,7 @@ print_all_limits (mode) } static void -printone (limind, curlim, pdesc) - int limind; - RLIMTYPE curlim; - int pdesc; +printone (int limind, RLIMTYPE curlim, int pdesc) { char unitstr[64]; int factor; @@ -766,6 +755,7 @@ printone (limind, curlim, pdesc) print_rlimtype ((curlim / factor), 1); } +#ifdef NOTYET /* Set all limits to NEWLIM. NEWLIM currently must be RLIM_INFINITY, which causes all limits to be set as high as possible depending on mode (like csh `unlimit'). Returns -1 if NEWLIM is invalid, 0 if all limits @@ -780,9 +770,7 @@ printone (limind, curlim, pdesc) */ static int -set_all_limits (mode, newlim) - int mode; - RLIMTYPE newlim; +set_all_limits (int mode, RLIMTYPE newlim) { register int i; int retval = 0; @@ -805,5 +793,6 @@ set_all_limits (mode, newlim) } return retval; } +#endif /* NOTYET */ #endif /* !_MINIX */ diff --git a/builtins/umask.def b/builtins/umask.def index 8041d56b7..d3488bf90 100644 --- a/builtins/umask.def +++ b/builtins/umask.def @@ -1,7 +1,7 @@ This file is umask.def, from which is created umask.c. It implements the builtin "umask" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -67,14 +67,13 @@ $END /* */ /* **************************************************************** */ -static void print_symbolic_umask PARAMS((mode_t)); -static int symbolic_umask PARAMS((WORD_LIST *)); +static void print_symbolic_umask (mode_t); +static int symbolic_umask (WORD_LIST *); /* Set or display the mask used by the system when creating files. Flag of -S means display the umask in a symbolic mode. */ int -umask_builtin (list) - WORD_LIST *list; +umask_builtin (WORD_LIST *list) { int print_symbolically, opt, umask_value, pflag; mode_t umask_arg; @@ -146,12 +145,7 @@ umask_builtin (list) /* Print the umask in a symbolic form. In the output, a letter is printed if the corresponding bit is clear in the umask. */ static void -#if defined (__STDC__) print_symbolic_umask (mode_t um) -#else -print_symbolic_umask (um) - mode_t um; -#endif { char ubits[4], gbits[4], obits[4]; /* u=rwx,g=rwx,o=rwx */ int i; @@ -186,17 +180,41 @@ print_symbolic_umask (um) printf ("u=%s,g=%s,o=%s\n", ubits, gbits, obits); } +static inline mode_t +copyuser (mode_t mask) +{ + return ((mask & S_IRUSR) ? S_IRUGO : 0) | + ((mask & S_IWUSR) ? S_IWUGO : 0) | + ((mask & S_IXUSR) ? S_IXUGO : 0); +} + +static inline mode_t +copygroup (mode_t mask) +{ + return ((mask & S_IRGRP) ? S_IRUGO : 0) | + ((mask & S_IWGRP) ? S_IWUGO : 0) | + ((mask & S_IXGRP) ? S_IXUGO : 0); +} + +static inline mode_t +copyother (mode_t mask) +{ + return ((mask & S_IROTH) ? S_IRUGO : 0) | + ((mask & S_IWOTH) ? S_IWUGO : 0) | + ((mask & S_IXOTH) ? S_IXUGO : 0); +} + int -parse_symbolic_mode (mode, initial_bits) - char *mode; - int initial_bits; +parse_symbolic_mode (char *mode, mode_t initial_bits) { - int who, op, perm, bits, c; + char op, c; + mode_t who, perm, bits; char *s; for (s = mode, bits = initial_bits;;) { - who = op = perm = 0; + who = 0; + op = 0; /* Parse the `who' portion of the symbolic mode clause. */ while (member (*s, "agou")) @@ -220,7 +238,13 @@ parse_symbolic_mode (mode, initial_bits) } } + /* default `who' is `a' */ + if (who == 0) + who = S_IRWXU | S_IRWXG | S_IRWXO; + /* The operation is now sitting in *s. */ +start_op: + perm = 0; op = *s++; switch (op) { @@ -233,57 +257,87 @@ parse_symbolic_mode (mode, initial_bits) return (-1); } - /* Parse out the `perm' section of the symbolic mode clause. */ - while (member (*s, "rwx")) + /* Parse out the `action' section of the symbolic mode clause. An + action can be a set of permissions (rwxXst), a copy specification + (ugo), or another op (+-=). */ + while (member (*s, "rwxXstugo")) { - c = *s++; - - switch (c) + switch (*s) { + /* First the copy specification */ + case 'u': + perm = copyuser (initial_bits); + break; + case 'g': + perm = copygroup (initial_bits); + break; + case 'o': + perm = copyother (initial_bits); + break; + + /* Then the permissions. */ case 'r': perm |= S_IRUGO; break; case 'w': perm |= S_IWUGO; break; + case 'X': + /* for chmod, this includes S_ISDIR but that doesn't make sense here */ + if ((initial_bits & S_IXUGO) == 0) + break; /* no-op if original mask doesn't include execute bits */ + /* FALLTHROUGH */ case 'x': perm |= S_IXUGO; break; + case 's': +#ifdef S_ISUID + perm |= S_ISUID | S_ISGID; + break; +#else + goto spec_error; +#endif + case 't': +#ifdef S_ISVTX + perm |= S_ISVTX; + break; +#else + goto spec_error; +#endif } + s++; } /* Now perform the operation or return an error for a bad permission string. */ - if (!*s || *s == ',') - { - if (who) - perm &= who; + perm &= who; - switch (op) - { - case '+': - bits |= perm; - break; - case '-': - bits &= ~perm; - break; - case '=': - if (who == 0) - who = S_IRWXU | S_IRWXG | S_IRWXO; - bits &= ~who; - bits |= perm; - break; - - /* No other values are possible. */ - } - - if (*s == '\0') - break; - else - s++; /* skip past ',' */ + switch (op) + { + case '+': + bits |= perm; + break; + case '-': + bits &= ~perm; + break; + case '=': + bits &= ~who; + bits |= perm; + break; } + + /* Break if the end of the action string, loop if we're going to parse + another `who', go back to parsing another op if we have an op spec + (+-=). Return an invalid mode character error for everything else. */ + if (*s == '\0') + break; + else if (*s == ',') + s++; /* skip past ',' */ + else if (*s == '+' || *s == '-' || *s == '=') + goto start_op; else { +spec_error: builtin_error (_("`%c': invalid symbolic mode character"), *s); return (-1); } @@ -296,10 +350,10 @@ parse_symbolic_mode (mode, initial_bits) by chmod. If the -S argument is given, then print the umask in a symbolic form. */ static int -symbolic_umask (list) - WORD_LIST *list; +symbolic_umask (WORD_LIST *list) { - int um, bits; + mode_t um; + int bits; /* Get the initial umask. Don't change it yet. */ um = umask (022); diff --git a/builtins/wait.def b/builtins/wait.def index b066d78d0..a0e43bf82 100644 --- a/builtins/wait.def +++ b/builtins/wait.def @@ -1,7 +1,7 @@ -'This file is wait.def, from which is created wait.c. +This file is wait.def, from which is created wait.c. It implements the builtin "wait" in Bash. -Copyright (C) 1987-2021 Free Software Foundation, Inc. +Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -90,8 +90,9 @@ extern int wait_signal_received; procenv_t wait_intr_buf; int wait_intr_flag; -static int set_waitlist PARAMS((WORD_LIST *)); -static void unset_waitlist PARAMS((void)); +static int set_waitlist (WORD_LIST *); +static void unset_waitlist (void); +static int check_bgpids (WORD_LIST *, struct procstat *); /* Wait for the pid in LIST to stop or die. If no arguments are given, then wait for all of the active background processes of the shell and return @@ -108,8 +109,7 @@ static void unset_waitlist PARAMS((void)); while (0) int -wait_builtin (list) - WORD_LIST *list; +wait_builtin (WORD_LIST *list) { int status, code, opt, nflag, vflags, bindflags; volatile int wflags; @@ -154,10 +154,10 @@ wait_builtin (list) int arrayflags; SET_VFLAGS (vflags, arrayflags, bindflags); - if (legal_identifier (vname) == 0 && valid_array_reference (vname, arrayflags) == 0) + if (valid_identifier (vname) == 0 && valid_array_reference (vname, arrayflags) == 0) #else bindflags = 0; - if (legal_identifier (vname) == 0) + if (valid_identifier (vname) == 0) #endif { sh_invalidid (vname); @@ -211,6 +211,21 @@ wait_builtin (list) #if defined (JOB_CONTROL) if (nflag) { +#if 0 /* TAG:bash-5.3 stevenpelley@gmail.com 01/22/2024 */ + /* First let's see if there are any requested pids that have already + been removed from the jobs list and saved on bgpids. */ + if (list) + { + status = check_bgpids (list, &pstat); + if (status != -1) + { + if (vname) + builtin_bind_var_to_int (vname, pstat.pid, bindflags); + WAIT_RETURN (status); + } + } +#endif + if (list) { opt = set_waitlist (list); @@ -255,7 +270,7 @@ wait_builtin (list) w = list->word->word; if (DIGIT (*w)) { - if (legal_number (w, &pid_value) && pid_value == (pid_t)pid_value) + if (valid_number (w, &pid_value) && pid_value == (pid_t)pid_value) { pid = (pid_t)pid_value; status = wait_for_single_pid (pid, wflags|JWAIT_PERROR); @@ -331,11 +346,10 @@ wait_builtin (list) J_WAITING, so wait -n knows which jobs to wait for. Return the number of jobs we found. */ static int -set_waitlist (list) - WORD_LIST *list; +set_waitlist (WORD_LIST *list) { sigset_t set, oset; - int job, r, njob; + int job, njob; intmax_t pid; WORD_LIST *l; @@ -344,7 +358,7 @@ set_waitlist (list) for (l = list; l; l = l->next) { job = NO_JOB; - job = (l && legal_number (l->word->word, &pid) && pid == (pid_t) pid) + job = (l && l->word && valid_number (l->word->word, &pid) && pid == (pid_t) pid) ? get_job_by_pid ((pid_t) pid, 0, 0) : get_job_spec (l); if (job == NO_JOB || jobs == 0 || INVALID_JOB (job)) @@ -367,7 +381,7 @@ set_waitlist (list) /* Clean up after a call to wait -n jobs */ static void -unset_waitlist () +unset_waitlist (void) { int i; sigset_t set, oset; @@ -378,4 +392,41 @@ unset_waitlist () jobs[i]->flags &= ~J_WAITING; UNBLOCK_CHILD (oset); } + +#if 0 /* TAG:bash-5.3 */ +static int +check_bgpids (WORD_LIST *list, struct procstat *pstat) +{ + sigset_t set, oset; + pid_t pid; + intmax_t ipid; + WORD_LIST *l; + int r, s; + + r = -1; + + BLOCK_CHILD (set, oset); + for (l = list; l; l = l->next) + { + if (l && valid_number (l->word->word, &ipid) && ipid == (pid_t) ipid) + pid = ipid; + else + continue; /* skip job ids for now */ + + if ((s = retrieve_proc_status (pid, 0)) != -1) + { + pstat->pid = pid; + pstat->status = r = s; + /* If running in posix mode, `wait -n pid' deletes pid from bgpids, + just like `wait pid'. */ + if (posixly_correct) + delete_proc_status (pid, 0); + break; + } + } + UNBLOCK_CHILD (oset); + + return r; +} +#endif #endif diff --git a/command.h b/command.h index 6230354ba..1c0681482 100644 --- a/command.h +++ b/command.h @@ -1,7 +1,7 @@ /* command.h -- The structures used internally to represent commands, and the extern declarations of the functions used to create them. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -366,6 +366,8 @@ typedef struct subshell_com { #define COPROC_RUNNING 0x01 #define COPROC_DEAD 0x02 +#define COPROC_STOPPED 0x04 +#define COPROC_FOREGROUND 0x08 /* why would you want to do this? */ typedef struct coproc { char *c_name; @@ -398,13 +400,13 @@ extern Coproc sh_coproc; /* Forward declarations of functions declared in copy_cmd.c. */ -extern FUNCTION_DEF *copy_function_def_contents PARAMS((FUNCTION_DEF *, FUNCTION_DEF *)); -extern FUNCTION_DEF *copy_function_def PARAMS((FUNCTION_DEF *)); +extern FUNCTION_DEF *copy_function_def_contents (FUNCTION_DEF *, FUNCTION_DEF *); +extern FUNCTION_DEF *copy_function_def (FUNCTION_DEF *); -extern WORD_DESC *copy_word PARAMS((WORD_DESC *)); -extern WORD_LIST *copy_word_list PARAMS((WORD_LIST *)); -extern REDIRECT *copy_redirect PARAMS((REDIRECT *)); -extern REDIRECT *copy_redirects PARAMS((REDIRECT *)); -extern COMMAND *copy_command PARAMS((COMMAND *)); +extern WORD_DESC *copy_word (WORD_DESC *); +extern WORD_LIST *copy_word_list (WORD_LIST *); +extern REDIRECT *copy_redirect (REDIRECT *); +extern REDIRECT *copy_redirects (REDIRECT *); +extern COMMAND *copy_command (COMMAND *); #endif /* _COMMAND_H_ */ diff --git a/config-bot.h b/config-bot.h index a687e4029..07e910f1e 100644 --- a/config-bot.h +++ b/config-bot.h @@ -36,17 +36,6 @@ # define HAVE_BSD_PGRP #endif -/* Try this without testing __STDC__ for the time being. */ -#if defined (HAVE_STDARG_H) -# define PREFER_STDARG -# define USE_VARARGS -#else -# if defined (HAVE_VARARGS_H) -# define PREFER_VARARGS -# define USE_VARARGS -# endif -#endif - #if defined (HAVE_SYS_SOCKET_H) && defined (HAVE_GETPEERNAME) && defined (HAVE_NETINET_IN_H) # define HAVE_NETWORK #endif diff --git a/config-top.h b/config-top.h index db4ab6ee3..29b369930 100644 --- a/config-top.h +++ b/config-top.h @@ -1,6 +1,6 @@ /* config-top.h - various user-settable options not under the control of autoconf. */ -/* Copyright (C) 2002-2021 Free Software Foundation, Inc. +/* Copyright (C) 2002-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -31,11 +31,6 @@ error messages about multiple directory arguments to `cd'. */ #define CD_COMPLAINS -/* Define BUFFERED_INPUT if you want the shell to do its own input - buffering, rather than using stdio. Do not undefine this; it's - required to preserve semantics required by POSIX. */ -#define BUFFERED_INPUT - /* Define ONESHOT if you want sh -c 'command' to avoid forking to execute `command' whenever possible. This is a big efficiency improvement. */ #define ONESHOT @@ -50,7 +45,7 @@ when a job like `cat jobs.c | exit 1' terminates due to a SIGPIPE. */ #define DONT_REPORT_SIGPIPE -/* Define DONT_REPORT_SIGTERM if you don't want to see `Terminates' message +/* Define DONT_REPORT_SIGTERM if you don't want to see `Terminated' message when a job exits due to SIGTERM, since that's the default signal sent by the kill builtin. */ #define DONT_REPORT_SIGTERM @@ -74,7 +69,7 @@ the Posix.2 confstr () function, or CS_PATH define are not present. */ #ifndef STANDARD_UTILS_PATH #define STANDARD_UTILS_PATH \ - "/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc" + "/bin:/usr/bin:/sbin:/usr/sbin" #endif /* The default path for enable -f */ @@ -144,6 +139,7 @@ /* Define as 1 if you want to enable code that implements multiple coprocs executing simultaneously */ +/* TAG: bash-5.3 */ #ifndef MULTIPLE_COPROCS # define MULTIPLE_COPROCS 0 #endif @@ -199,3 +195,14 @@ /* Undefine or define to 0 if you don't want to allow associative array assignment using a compound list of key-value pairs. */ #define ASSOC_KVPAIR_ASSIGNMENT 1 + +/* Define if you want read errors in non-interactive shells to be fatal + errors instead of the historical practice of treating them as EOF. The + next version of POSIX will require this (interp 1629). */ +#define FATAL_READERROR 1 + +/* Define to 0 if you want the `patsub_replacement' shell option to be disabled + by default. */ +#ifndef PATSUB_REPLACE_DEFAULT +#define PATSUB_REPLACE_DEFAULT 1 +#endif diff --git a/config.h.in b/config.h.in index d6d52930b..cee53587d 100644 --- a/config.h.in +++ b/config.h.in @@ -1,6 +1,6 @@ /* config.h -- Configuration file for bash. */ -/* Copyright (C) 1987-2009,2011-2012,2013-2019 Free Software Foundation, Inc. +/* Copyright (C) 1987-2009,2011-2012,2013-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -239,6 +239,8 @@ /* The number of bytes in a `wchar_t', if supported */ #undef SIZEOF_WCHAR_T +#undef HAVE_C_BOOL + /* System paths */ #define DEFAULT_MAIL_DIRECTORY "/usr/spool/mail" @@ -345,8 +347,11 @@ #undef uintmax_t /* Define to integer type wide enough to hold a pointer if doesn't define. */ +#undef intptr_t + +/* Define to unsigned integer type wide enough to hold a pointer if doesn't define. */ #undef uintptr_t - + /* Define to `int' if doesn't define. */ #undef uid_t @@ -477,6 +482,8 @@ /* Define if you have and it defines AUDIT_USER_TTY */ #undef HAVE_DECL_AUDIT_USER_TTY +#undef HAVE_DECL_BRK + #undef HAVE_DECL_CONFSTR #undef HAVE_DECL_PRINTF @@ -505,6 +512,22 @@ #undef HAVE_DECL_STRTOULL #undef HAVE_DECL_STRTOUMAX +/* These are checked with BASH_FUNC_UNLOCKED_IO */ + +#undef HAVE_DECL_CLEARERR_UNLOCKED +#undef HAVE_DECL_FEOF_UNLOCKED +#undef HAVE_DECL_FERROR_UNLOCKED +#undef HAVE_DECL_FFLUSH_UNLOCKED +#undef HAVE_DECL_FGETS_UNLOCKED +#undef HAVE_DECL_FPUTC_UNLOCKED +#undef HAVE_DECL_FPUTS_UNLOCKED +#undef HAVE_DECL_FREAD_UNLOCKED +#undef HAVE_DECL_FWRITE_UNLOCKED +#undef HAVE_DECL_GETC_UNLOCKED +#undef HAVE_DECL_GETCHAR_UNLOCKED +#undef HAVE_DECL_PUTC_UNLOCKED +#undef HAVE_DECL_PUTCHAR_UNLOCKED + /* Characteristics of system calls and C library functions. */ /* Define if the `getpgrp' function takes no argument. */ @@ -571,12 +594,18 @@ /* Define if you have the bcopy function. */ #undef HAVE_BCOPY +/* Define if you have the brk function. */ +#undef HAVE_BRK + /* Define if you have the bzero function. */ #undef HAVE_BZERO /* Define if you have the chown function. */ #undef HAVE_CHOWN +/* Define if you have the clock_gettime function. */ +#undef HAVE_CLOCK_GETTIME + /* Define if you have the confstr function. */ #undef HAVE_CONFSTR @@ -738,12 +767,18 @@ /* Define if you have the mbscmp function. */ #undef HAVE_MBSCMP +/* Define if you have the mbsncmp function. */ +#undef HAVE_MBSNCMP + /* Define if you have the mbsnrtowcs function. */ #undef HAVE_MBSNRTOWCS /* Define if you have the mbsrtowcs function. */ #undef HAVE_MBSRTOWCS +/* Define if you have the memfd_create function. */ +#undef HAVE_MEMFD_CREATE + /* Define if you have the memmove function. */ #undef HAVE_MEMMOVE @@ -822,6 +857,12 @@ #undef HAVE_SETRESUID #undef HAVE_DECL_SETRESUID +/* Define if you have the shm_open function. */ +#undef HAVE_SHM_OPEN + +/* Define if you have the shm_mkstemp function. */ +#undef HAVE_SHM_MKSTEMP + /* Define if you have the setvbuf function. */ #undef HAVE_SETVBUF @@ -855,6 +896,9 @@ /* Define if you have the strftime function. */ #undef HAVE_STRFTIME +/* Define if you have the strlcat function. */ +#undef HAVE_STRLCAT + /* Define if you have the strnlen function. */ #undef HAVE_STRNLEN @@ -948,6 +992,9 @@ /* Define if you have the wcsdup function. */ #undef HAVE_WCSDUP +/* Define if you have the wcsnrtombs function. */ +#undef HAVE_WCSNRTOMBS + /* Define if you have the wctype function. */ #undef HAVE_WCTYPE @@ -1166,6 +1213,32 @@ /* Additional defines for configuring lib/intl, maintained by autoscan/autoheader */ +/* System characteristics */ +#undef HAVE_LC_MESSAGE +#undef HAVE_LOCALE_NULL +#undef HAVE_NAMELESS_LOCALES +#undef HAVE_PER_THREAD_LOCALE +#undef HAVE_SOLARIS114_LOCALES + +/* Compiler characteristics */ +#undef FLEXIBLE_ARRAY_MEMBER + +#undef HAVE_VISIBILITY + +#undef HAVE_BUILTIN_EXPECT + +#undef HAVE_WEAK_SYMBOLS + +#define _GL_ATTRIBUTE_MALLOC +#define _GL_ATTRIBUTE_DEALLOC_FREE +#define _GL_ATTRIBUTE_FALLTHROUGH +#define _GL_ATTRIBUTE_PURE +#define _GL_UNUSED + +#define _GL_INLINE_HEADER_BEGIN +#define _GL_INLINE_HEADER_END +#define _GL_EXTERN_INLINE + /* Define if you have the header file. */ #undef HAVE_ARGZ_H @@ -1175,15 +1248,41 @@ /* Define if you have the header file. */ #undef HAVE_FCNTL_H +#undef HAVE_INTTYPES_H_WITH_UINTMAX + /* Define if you have the header file. */ #undef HAVE_MALLOC_H +#undef HAVE_STDINT_H_WITH_UINTMAX + /* Define if you have the header file. */ #undef HAVE_STDIO_EXT_H +/* Define if you have the header file. */ +#undef HAVE_THREADS_H + +/* Define if you have the header file. */ +#undef HAVE_XLOCALE_H + +/* Declarations */ +#undef HAVE_DECL_FEOF_UNLOCKED +#undef HAVE_DECL_FGETS_UNLOCKED +#undef HAVE_DECL__SNPRINTF +#undef HAVE_DECL__SNWPRINTF + /* Define if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT +#undef HAVE_GETUID +#undef HAVE_GETEUID + +#undef HAVE_GETGID +#undef HAVE_GETEGID + +#undef HAVE_GETLOCALENAME_L +#undef HAVE_GOOD_USELOCALE +#undef HAVE_ICONV + /* Define if you have the `localeconv' function. */ #undef HAVE_LOCALECONV @@ -1202,9 +1301,25 @@ /* Define if you have the `munmap' function. */ #undef HAVE_MUNMAP +/* Define if you have the `nanosleep' function. */ +#undef HAVE_NANOSLEEP + +/* Define if you have the `newlocale' function. */ +#undef HAVE_NEWLOCALE + /* Define if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO +#undef HAVE_POSIX_PRINTF + +#undef HAVE_PTHREAD_API +#undef HAVE_PTHREAD_MUTEX_RECURSIVE +#undef HAVE_PTHREAD_RWLOCK +#undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER + +#undef HAVE_SNPRINTF_RETVAL_C99 +#undef HAVE_SNPRINTF_TRUNCATION_C99 + /* Define if you have the `stpcpy' function. */ #undef HAVE_STPCPY @@ -1214,6 +1329,18 @@ /* Define if you have the `strdup' function. */ #undef HAVE_STRDUP +#undef HAVE_TSEARCH + +/* Define if you have the `uselocale' function. */ +#undef HAVE_USELOCALE +#undef HAVE_WORKING_USELOCALE + +#undef HAVE_WCSLEN +#undef HAVE_WCSNLEN + +/* Define if you have the `wprintf' function. */ +#undef HAVE_WPRINTF + /* Define if you have the `__argz_count' function. */ #undef HAVE___ARGZ_COUNT @@ -1223,6 +1350,14 @@ /* Define if you have the `__argz_stringify' function. */ #undef HAVE___ARGZ_STRINGIFY +#undef HAVE___FSETLOCKING + +/* macOS specific defines */ + +#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES + +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + /* End additions for lib/intl */ #include "config-bot.h" diff --git a/configure b/configure index 47313753e..459ddb2a7 100755 --- a/configure +++ b/configure @@ -1,12 +1,12 @@ #! /bin/sh -# From configure.ac for Bash 5.2, version 5.046. +# From configure.ac for Bash 5.3, version 5.063. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for bash 5.2-release. +# Generated by GNU Autoconf 2.72 for bash 5.3-alpha. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # @@ -18,7 +18,6 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -27,12 +26,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -104,7 +104,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -134,15 +134,14 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -150,12 +149,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop - case \`(set -o) 2>/dev/null\` in #( +else case e in #( + e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi " @@ -173,8 +173,9 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else \$as_nop - exitcode=1; echo positional parameters were not saved. +else case e in #( + e) exitcode=1; echo positional parameters were not saved. ;; +esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -188,14 +189,15 @@ test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else $as_nop - as_have_required=no +else case e in #( + e) as_have_required=no ;; +esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -228,12 +230,13 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else case e in #( + e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi +fi ;; +esac fi @@ -255,7 +258,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -275,7 +278,8 @@ $0: manually run the script under such a shell if you do $0: have one." fi exit 1 -fi +fi ;; +esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -314,14 +318,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -390,11 +386,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -408,21 +405,14 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -496,6 +486,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' + t clear + :clear s/[$]LINENO.*/&-/ t lineno b @@ -544,7 +536,6 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -556,9 +547,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -583,10 +574,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 /dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1053,7 +1049,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1266,7 +1262,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1282,7 +1278,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1312,8 +1308,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: '$ac_option' +Try '$0 --help' for more information" ;; *=*) @@ -1321,7 +1317,7 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1371,7 +1367,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: `$host' +# There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1439,7 +1435,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1467,7 +1463,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bash 5.2-release to adapt to many kinds of systems. +'configure' configures bash 5.3-alpha to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1481,11 +1477,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' + -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] + --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1493,10 +1489,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. +By default, 'make install' will install all the files in +'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify +an installation prefix other than '$ac_default_prefix' using '--prefix', +for instance '--prefix=\$HOME'. For better control, use the options below. @@ -1533,7 +1529,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bash 5.2-release:";; + short | recursive ) echo "Configuration of bash 5.3-alpha:";; esac cat <<\_ACEOF @@ -1619,10 +1615,11 @@ Optional Features: --enable-static-link link bash statically, for use as a root shell --disable-largefile omit support for large files --disable-nls do not use Native Language Support - --enable-threads={posix|solaris|pth|windows} + --enable-threads={isoc|posix|isoc+posix|windows} specify multithreading API --disable-threads build without multithread safety --disable-rpath do not hardcode runtime library paths + --enable-year2038 support timestamps after 2038 Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1636,8 +1633,6 @@ Optional Packages: use a version of the readline library that is already installed --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib - --without-libpth-prefix don't search for libpth in includedir and libdir --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-included-gettext use the GNU gettext library included here @@ -1665,15 +1660,15 @@ Some influential environment variables: LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory - CPP C preprocessor - YACC The `Yet Another Compiler Compiler' implementation to use. - Defaults to the first program found out of: `bison -y', `byacc', - `yacc'. + YACC The 'Yet Another Compiler Compiler' implementation to use. + Defaults to the first program found out of: 'bison -y', 'byacc', + 'yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a - default value of `-d' given by some make applications. + default value of '-d' given by some make applications. + CPP C preprocessor -Use these variables to override the choices made by `configure' or to help +Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1740,10 +1735,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bash configure 5.2-release -generated by GNU Autoconf 2.71 +bash configure 5.3-alpha +generated by GNU Autoconf 2.72 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1782,11 +1777,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1805,8 +1801,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1814,10 +1810,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1826,44 +1824,6 @@ printf "%s\n" "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1895,11 +1855,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1922,15 +1883,15 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (void); below. */ #include #undef $2 @@ -1941,7 +1902,7 @@ else $as_nop #ifdef __cplusplus extern "C" #endif -char $2 (); +char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ @@ -1960,11 +1921,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2003,12 +1966,13 @@ printf "%s\n" "$ac_try_echo"; } >&5 test $ac_status = 0; }; } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 +else case e in #( + e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=$ac_status + ac_retval=$ac_status ;; +esac fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno @@ -2016,6 +1980,45 @@ fi } # ac_fn_c_try_run +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + } +then : + ac_retval=0 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 ;; +esac +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -2028,8 +2031,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @@ -2059,12 +2062,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - eval "$3=yes" +else case e in #( + e) eval "$3=yes" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2086,8 +2091,8 @@ printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` +else case e in #( + e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -2111,12 +2116,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS - + ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2170,18 +2177,19 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid; break -else $as_nop - as_fn_arith $ac_mid + 1 && ac_lo=$as_val +else case e in #( + e) as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int @@ -2216,20 +2224,23 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=$ac_mid; break -else $as_nop - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val +else case e in #( + e) as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else $as_nop - ac_lo= ac_hi= +else case e in #( + e) ac_lo= ac_hi= ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. @@ -2252,8 +2263,9 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid -else $as_nop - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +else case e in #( + e) as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done @@ -2301,8 +2313,9 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : echo >>conftest.val; read $3 &6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -2343,8 +2356,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -2360,12 +2373,15 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else $as_nop - eval "$4=no" +else case e in #( + e) eval "$4=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2397,8 +2413,8 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bash $as_me 5.2-release, which was -generated by GNU Autoconf 2.71. Invocation command line was +It was created by bash $as_me 5.3-alpha, which was +generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -2644,10 +2660,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi done @@ -2683,9 +2699,7 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; +static char *e (char **p, int i) { return p[i]; } @@ -2699,6 +2713,21 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } +/* C89 style stringification. */ +#define noexpand_stringify(a) #a +const char *stringified = noexpand_stringify(arbitrary+token=sequence); + +/* C89 style token pasting. Exercises some of the corner cases that + e.g. old MSVC gets wrong, but not very hard. */ +#define noexpand_concat(a,b) a##b +#define expand_concat(a,b) noexpand_concat(a,b) +extern int vA; +extern int vbee; +#define aye A +#define bee B +int *pvA = &expand_concat(v,aye); +int *pvbee = &noexpand_concat(v,bee); + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -2726,16 +2755,19 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? +/* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif +// See if C++-style comments work. + #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); +extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -2785,7 +2817,6 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { - // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -2851,6 +2882,8 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; + // Work around memory leak warnings. + free (ia); // Check named initializers. struct named_init ni = { @@ -2872,7 +2905,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? +/* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -2987,9 +3020,11 @@ as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" +as_fn_append ac_header_c_list " stdbool.h stdbool_h HAVE_STDBOOL_H" gt_needs="$gt_needs need-ngettext" as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H" as_fn_append ac_func_c_list " getpagesize HAVE_GETPAGESIZE" +as_fn_append ac_header_c_list " threads.h threads_h HAVE_THREADS_H" as_fn_append ac_func_c_list " symlink HAVE_SYMLINK" as_fn_append ac_func_c_list " uselocale HAVE_USELOCALE" as_fn_append ac_header_c_list " xlocale.h xlocale_h HAVE_XLOCALE_H" @@ -3079,8 +3114,9 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; +esac fi @@ -3108,12 +3144,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -3122,18 +3158,18 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -3149,11 +3185,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -3175,8 +3211,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" -BASHVERS=5.2 -RELSTATUS=release +BASHVERS=5.3 +RELSTATUS=alpha case "$RELSTATUS" in alp*|bet*|dev*|rc*|releng*|maint*) DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;; @@ -3195,15 +3231,16 @@ printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_build_alias=$build_alias +else case e in #( + e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } @@ -3230,14 +3267,15 @@ printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "x$host_alias" = x; then +else case e in #( + e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } @@ -3282,7 +3320,7 @@ m68k-sysv) opt_bash_malloc=no ;; # fixes file descriptor leak in closedir # These need additional investigation sparc-linux*) opt_bash_malloc=no ;; # sparc running linux; requires ELF *-aix*) opt_bash_malloc=no ;; # AIX machines -*-cygwin*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment +*-cygwin*|msys*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment # These lack a working sbrk(2) aarch64-freebsd*) opt_bash_malloc=no ;; riscv*-freebsd*) opt_bash_malloc=no ;; @@ -3298,6 +3336,8 @@ riscv*-freebsd*) opt_bash_malloc=no ;; *-nsk*) opt_bash_malloc=no ;; # HP NonStop *-haiku*) opt_bash_malloc=no ;; # Haiku OS *-genode*) opt_bash_malloc=no ;; # Genode has no sbrk +i370-openedition*) opt_bash_malloc=no LOCAL_LIBS=-lzoslib LIBS_FOR_BUILD=-lzoslib ;; # IBM z/OS machines +i370-*) opt_bash_malloc=no ;; # generic (?) IBM 370 machines esac # memory scrambling on free() @@ -3915,8 +3955,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3938,7 +3978,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3960,8 +4001,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3983,7 +4024,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -4018,8 +4060,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4041,7 +4083,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -4063,8 +4106,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no @@ -4103,7 +4146,8 @@ if test $ac_prog_rejected = yes; then ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -4127,8 +4171,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4150,7 +4194,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -4176,8 +4221,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4199,7 +4244,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -4237,8 +4283,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4260,7 +4306,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -4282,8 +4329,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4305,7 +4352,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -4334,10 +4382,10 @@ fi fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -4409,8 +4457,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. +# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -4430,7 +4478,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' + # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -4441,8 +4489,9 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop - ac_file='' +else case e in #( + e) ac_file='' ;; +esac fi if test -z "$ac_file" then : @@ -4451,13 +4500,14 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -4481,10 +4531,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. + # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) +# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will +# work properly (i.e., refer to 'conftest.exe'), while it won't with +# 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -4494,11 +4544,12 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -4514,6 +4565,8 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); + if (!f) + return 1; return ferror (f) || fclose (f) != 0; ; @@ -4553,26 +4606,27 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use '--host'. +See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext \ + conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4604,16 +4658,18 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext +rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -4624,8 +4680,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4642,12 +4698,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -4665,8 +4723,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -4684,8 +4742,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4700,8 +4758,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4718,12 +4776,15 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -4750,8 +4811,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4768,25 +4829,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" + CC="$CC $ac_cv_prog_cc_c11" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 + ac_prog_cc_stdc=c11 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -4796,8 +4860,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no +else case e in #( + e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4814,25 +4878,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" + CC="$CC $ac_cv_prog_cc_c99" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 + ac_prog_cc_stdc=c99 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -4842,8 +4909,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no +else case e in #( + e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4860,25 +4927,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 + ac_prog_cc_stdc=c89 ;; +esac fi fi @@ -4939,8 +5009,8 @@ printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 @@ -4956,10 +5026,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes -else $as_nop - ac_cv_safe_to_define___extensions__=no +else case e in #( + e) ac_cv_safe_to_define___extensions__=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } @@ -4969,8 +5041,8 @@ printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_should_define__xopen_source=no +else case e in #( + e) ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4989,8 +5061,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 @@ -5008,10 +5080,12 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } @@ -5036,6 +5110,8 @@ printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h @@ -5055,8 +5131,9 @@ then : printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h -else $as_nop - MINIX= +else case e in #( + e) MINIX= ;; +esac fi if test $ac_cv_safe_to_define___extensions__ = yes then : @@ -5074,31 +5151,34 @@ if test ${enable_largefile+y} then : enableval=$enable_largefile; fi - -if test "$enable_largefile" != no; then - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -printf %s "checking for special C compiler options needed for large files... " >&6; } -if test ${ac_cv_sys_largefile_CC+y} +if test "$enable_largefile,$enable_year2038" != no,no +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5 +printf %s "checking for $CC option to enable large file support... " >&6; } +if test ${ac_cv_sys_largefile_opts+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) ac_save_CC="$CC" + ac_opt_found=no + for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do + if test x"$ac_opt" != x"none needed" +then : + CC="$ac_save_CC $ac_opt" +fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, +#ifndef FTYPE +# define FTYPE off_t +#endif + /* Check that FTYPE can represent 2**63 - 1 correctly. + We can't simply define LARGE_FTYPE to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) +#define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) + int FTYPE_is_large[(LARGE_FTYPE % 2147483629 == 721 + && LARGE_FTYPE % 2147483647 == 1) ? 1 : -1]; int main (void) @@ -5108,72 +5188,88 @@ main (void) return 0; } _ACEOF - if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - CC="$CC -n32" + if test x"$ac_opt" = x"none needed" +then : + # GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. + CC="$CC -DFTYPE=ino_t" if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_largefile_CC=' -n32'; break + +else case e in #( + e) CC="$CC -D_FILE_OFFSET_BITS=64" + if ac_fn_c_try_compile "$LINENO" +then : + ac_opt='-D_FILE_OFFSET_BITS=64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi + ac_cv_sys_largefile_opts=$ac_opt + ac_opt_found=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + test $ac_opt_found = no || break + done + CC="$ac_save_CC" + + test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5 +printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; } + +ac_have_largefile=yes +case $ac_cv_sys_largefile_opts in #( + "none needed") : + ;; #( + "supported through gnulib") : + ;; #( + "support not detected") : + ac_have_largefile=no ;; #( + "-D_FILE_OFFSET_BITS=64") : + +printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h + ;; #( + "-D_LARGE_FILES=1") : + +printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h + ;; #( + "-n32") : + CC="$CC -n32" ;; #( + *) : + as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;; +esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if test ${ac_cv_sys_file_offset_bits+y} +if test "$enable_year2038" != no +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option for timestamps after 2038" >&5 +printf %s "checking for $CC option for timestamps after 2038... " >&6; } +if test ${ac_cv_sys_year2038_opts+y} then : printf %s "(cached) " >&6 -else $as_nop - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" +else case e in #( + e) ac_save_CPPFLAGS="$CPPFLAGS" + ac_opt_found=no + for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do + if test x"$ac_opt" != x"none needed" then : - ac_cv_sys_file_offset_bits=no; break + CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; + + #include + /* Check that time_t can represent 2**32 - 1 correctly. */ + #define LARGE_TIME_T \\ + ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) + int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 + && LARGE_TIME_T % 65537 == 0) + ? 1 : -1]; + int main (void) { @@ -5184,95 +5280,47 @@ main (void) _ACEOF if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_file_offset_bits=64; break + ac_cv_sys_year2038_opts="$ac_opt" + ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h -;; + test $ac_opt_found = no || break + done + CPPFLAGS="$ac_save_CPPFLAGS" + test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" ;; esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } -if test ${ac_cv_sys_large_files+y} -then : - printf %s "(cached) " >&6 -else $as_nop - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_sys_large_files=no; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5 +printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; } - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_sys_large_files=1; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -printf "%s\n" "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h -;; +ac_have_year2038=yes +case $ac_cv_sys_year2038_opts in #( + "none needed") : + ;; #( + "support not detected") : + ac_have_year2038=no ;; #( + "-D_TIME_BITS=64") : + +printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h + ;; #( + "-D__MINGW_USE_VC2005_COMPAT") : + +printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h + ;; #( + "-U_USE_32_BIT_TIME_T"*) : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It +will stop working after mid-January 2038. Remove +_USE_32BIT_TIME_T from the compiler flags. +See 'config.log' for more details" "$LINENO" 5; } ;; #( + *) : + as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;; esac -rm -rf conftest* - fi + fi +fi SIGNAMES_O= @@ -5286,6 +5334,9 @@ if test "x$cross_compiling" = "xyes"; then *-cygwin*) cross_cache=${srcdir}/cross-build/cygwin32.cache ;; + *-msys*) + cross_cache=${srcdir}/cross-build/msys32.cache + ;; *-mingw*) cross_cache=${srcdir}/cross-build/cygwin32.cache ;; @@ -5333,7 +5384,8 @@ if test "$opt_static_link" = yes; then if test "$GCC" = "yes"; then STATIC_LD="-static" case "$host_os" in - solaris2*|linux*) ;; + solaris2*) ;; + linux*) test "$opt_profiling" = "no" && LDFLAGS="$LDFLAGS -static" ;; *) LDFLAGS="$LDFLAGS -static" ;; # XXX experimental esac fi @@ -5382,483 +5434,193 @@ fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -printf %s "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= + + +if test "$opt_readline" = yes && test "$opt_with_installed_readline" != "no" +then + # If the user specified --with-installed-readline=PREFIX and PREFIX + # is not `yes', set ac_cv_rl_prefix to PREFIX + test $opt_with_installed_readline != "yes" && ac_cv_rl_prefix=$opt_with_installed_readline + + +if test "X$bash_cv_termcap_lib" = "X"; then +_bash_needmsg=yes +else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 +printf %s "checking which library has the termcap functions... " >&6; } +_bash_needmsg= fi -if test -z "$CPP"; then - if test ${ac_cv_prog_CPP+y} +if test ${bash_cv_termcap_lib+y} then : printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CC needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO" +else case e in #( + e) ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent" +if test "x$ac_cv_func_tgetent" = xyes then : - -else $as_nop - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO" + bash_cv_termcap_lib=libc +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 +printf %s "checking for tgetent in -ltermcap... " >&6; } +if test ${ac_cv_lib_termcap_tgetent+y} then : - # Broken: success on invalid input. -continue -else $as_nop - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-ltermcap $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); +int +main (void) +{ +return tgetent (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" then : - break -fi - - done - ac_cv_prog_CPP=$CPP - + ac_cv_lib_termcap_tgetent=yes +else case e in #( + e) ac_cv_lib_termcap_tgetent=no ;; +esac fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -printf "%s\n" "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_termcap_tgetent" >&6; } +if test "x$ac_cv_lib_termcap_tgetent" = xyes +then : + bash_cv_termcap_lib=libtermcap +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 +printf %s "checking for tgetent in -ltinfo... " >&6; } +if test ${ac_cv_lib_tinfo_tgetent+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-ltinfo $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include - Syntax error + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); +int +main (void) +{ +return tgetent (); + ; + return 0; +} _ACEOF -if ac_fn_c_try_cpp "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - -else $as_nop - # Broken: fails on valid input. -continue + ac_cv_lib_tinfo_tgetent=yes +else case e in #( + e) ac_cv_lib_tinfo_tgetent=no ;; +esac fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_tinfo_tgetent" >&6; } +if test "x$ac_cv_lib_tinfo_tgetent" = xyes +then : + bash_cv_termcap_lib=libtinfo +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 +printf %s "checking for tgetent in -lcurses... " >&6; } +if test ${ac_cv_lib_curses_tgetent+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lcurses $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); +int +main (void) +{ +return tgetent (); + ; + return 0; +} _ACEOF -if ac_fn_c_try_cpp "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - # Broken: success on invalid input. -continue -else $as_nop - # Passes both tests. -ac_preproc_ok=: -break + ac_cv_lib_curses_tgetent=yes +else case e in #( + e) ac_cv_lib_curses_tgetent=no ;; +esac fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : - -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in grep ggrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in egrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -if test $ac_cv_c_compiler_gnu = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 -printf %s "checking whether $CC needs -traditional... " >&6; } -if test ${ac_cv_prog_gcc_traditional+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_pattern="Autoconf.*'x'" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -Autoconf TIOCGETP -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1 -then : - ac_cv_prog_gcc_traditional=yes -else $as_nop - ac_cv_prog_gcc_traditional=no -fi -rm -rf conftest* - - - if test $ac_cv_prog_gcc_traditional = no; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -Autoconf TCGETA -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1 -then : - ac_cv_prog_gcc_traditional=yes -fi -rm -rf conftest* - - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 -printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; } - if test $ac_cv_prog_gcc_traditional = yes; then - CC="$CC -traditional" - fi -fi - - - -if test "$opt_readline" = yes && test "$opt_with_installed_readline" != "no" -then - # If the user specified --with-installed-readline=PREFIX and PREFIX - # is not `yes', set ac_cv_rl_prefix to PREFIX - test $opt_with_installed_readline != "yes" && ac_cv_rl_prefix=$opt_with_installed_readline - - -if test "X$bash_cv_termcap_lib" = "X"; then -_bash_needmsg=yes -else -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 -printf %s "checking which library has the termcap functions... " >&6; } -_bash_needmsg= -fi -if test ${bash_cv_termcap_lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent" -if test "x$ac_cv_func_tgetent" = xyes -then : - bash_cv_termcap_lib=libc -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 -printf %s "checking for tgetent in -ltermcap... " >&6; } -if test ${ac_cv_lib_termcap_tgetent+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-ltermcap $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); -int -main (void) -{ -return tgetent (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_termcap_tgetent=yes -else $as_nop - ac_cv_lib_termcap_tgetent=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 -printf "%s\n" "$ac_cv_lib_termcap_tgetent" >&6; } -if test "x$ac_cv_lib_termcap_tgetent" = xyes -then : - bash_cv_termcap_lib=libtermcap -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 -printf %s "checking for tgetent in -ltinfo... " >&6; } -if test ${ac_cv_lib_tinfo_tgetent+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-ltinfo $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); -int -main (void) -{ -return tgetent (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_tinfo_tgetent=yes -else $as_nop - ac_cv_lib_tinfo_tgetent=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5 -printf "%s\n" "$ac_cv_lib_tinfo_tgetent" >&6; } -if test "x$ac_cv_lib_tinfo_tgetent" = xyes -then : - bash_cv_termcap_lib=libtinfo -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 -printf %s "checking for tgetent in -lcurses... " >&6; } -if test ${ac_cv_lib_curses_tgetent+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcurses $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); -int -main (void) -{ -return tgetent (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_curses_tgetent=yes -else $as_nop - ac_cv_lib_curses_tgetent=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5 -printf "%s\n" "$ac_cv_lib_curses_tgetent" >&6; } -if test "x$ac_cv_lib_curses_tgetent" = xyes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_curses_tgetent" >&6; } +if test "x$ac_cv_lib_curses_tgetent" = xyes then : bash_cv_termcap_lib=libcurses -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 printf %s "checking for tgetent in -lncurses... " >&6; } if test ${ac_cv_lib_ncurses_tgetent+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); int main (void) { @@ -5870,34 +5632,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ncurses_tgetent=yes -else $as_nop - ac_cv_lib_ncurses_tgetent=no +else case e in #( + e) ac_cv_lib_ncurses_tgetent=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 printf "%s\n" "$ac_cv_lib_ncurses_tgetent" >&6; } if test "x$ac_cv_lib_ncurses_tgetent" = xyes then : bash_cv_termcap_lib=libncurses -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5 printf %s "checking for tgetent in -lncursesw... " >&6; } if test ${ac_cv_lib_ncursesw_tgetent+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lncursesw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); int main (void) { @@ -5909,32 +5679,41 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ncursesw_tgetent=yes -else $as_nop - ac_cv_lib_ncursesw_tgetent=no +else case e in #( + e) ac_cv_lib_ncursesw_tgetent=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5 printf "%s\n" "$ac_cv_lib_ncursesw_tgetent" >&6; } if test "x$ac_cv_lib_ncursesw_tgetent" = xyes then : bash_cv_termcap_lib=libncursesw -else $as_nop - bash_cv_termcap_lib=gnutermcap +else case e in #( + e) bash_cv_termcap_lib=gnutermcap ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi if test "X$_bash_needmsg" = "Xyes"; then @@ -5956,6 +5735,9 @@ TERMCAP_DEP= elif test $bash_cv_termcap_lib = libncurses; then TERMCAP_LIB=-lncurses TERMCAP_DEP= +elif test $bash_cv_termcap_lib = libcurses; then +TERMCAP_LIB=-lcurses +TERMCAP_DEP= elif test $bash_cv_termcap_lib = libc; then TERMCAP_LIB= TERMCAP_DEP= @@ -5996,13 +5778,13 @@ LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}" if test ${ac_cv_rl_version+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : ac_cv_rl_version='8.0' -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -6030,13 +5812,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_rl_version=`cat conftest.rlv` -else $as_nop - ac_cv_rl_version='0.0' +else case e in #( + e) ac_cv_rl_version='0.0' ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi @@ -6139,7 +5924,7 @@ if test $opt_readline = yes; then # section for OS versions that don't allow unresolved symbols # to be compiled into dynamic libraries. case "$host_os" in - cygwin*) TILDE_LIB= ;; + cygwin*|msys*) TILDE_LIB= ;; esac else RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' @@ -6226,8 +6011,8 @@ if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS @@ -6281,7 +6066,8 @@ esac IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir - + ;; +esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install @@ -6312,8 +6098,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AR"; then +else case e in #( + e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6335,7 +6121,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then @@ -6357,8 +6144,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_AR"; then +else case e in #( + e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6380,7 +6167,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then @@ -6415,8 +6203,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$RANLIB"; then +else case e in #( + e) if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6438,7 +6226,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then @@ -6460,8 +6249,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_RANLIB"; then +else case e in #( + e) if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6483,7 +6272,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then @@ -6518,8 +6308,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_YACC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$YACC"; then +else case e in #( + e) if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6541,7 +6331,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then @@ -6564,8 +6355,8 @@ ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 -else $as_nop - cat >conftest.make <<\_ACEOF +else case e in #( + e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' @@ -6577,7 +6368,8 @@ case `${MAKE-make} -f conftest.make 2>/dev/null` in *) eval ac_cv_prog_make_${ac_make}_set=no;; esac -rm -f conftest.make +rm -f conftest.make ;; +esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -6662,6 +6454,16 @@ fi +# unlocked-io.m4 serial 16 + +# Copyright (C) 1998-2006, 2009-2024 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + + # codeset.m4 serial 5 (gettext-0.18.2) @@ -6673,25 +6475,79 @@ fi -# fcntl-o.m4 serial 6 +# serial 10 +# Copyright (C) 2002-2006, 2008-2022 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# There are two types of parser skeletons: +# +# * Those that can be used with any Yacc implementation, including bison. +# For these, in the configure.ac, up to Autoconf 2.69, you could use +# AC_PROG_YACC +# In newer Autoconf versions, however, this macro is broken. See +# https://lists.gnu.org/archive/html/autoconf-patches/2013-03/msg00000.html +# https://lists.gnu.org/archive/html/bug-autoconf/2018-12/msg00001.html +# In the Makefile.am you could use +# $(SHELL) $(YLWRAP) $(srcdir)/foo.y \ +# y.tab.c foo.c \ +# y.tab.h foo.h \ +# y.output foo.output \ +# -- $(YACC) $(YFLAGS) $(AM_YFLAGS) +# or similar. +# +# * Those that make use of Bison extensions. For example, +# - %define api.pure requires bison 2.7 or newer, +# - %precedence requires bison 3.0 or newer. +# For these, in the configure.ac you will need an invocation of +# gl_PROG_BISON([VARIABLE], [MIN_BISON_VERSION]) +# Example: +# gl_PROG_BISON([PARSE_DATETIME_BISON], [2.4]) +# With this preparation, in the Makefile.am there are two ways to formulate +# the invocation. Both are direct, without use of 'ylwrap'. +# (a) You can invoke +# $(VARIABLE) -d $(SOME_BISON_OPTIONS) --output foo.c $(srcdir)/foo.y +# or similar. +# (b) If you want the invocation to honor an YFLAGS=... parameter passed to +# 'configure' or an YFLAGS environment variable present at 'configure' +# time, add an invocation of gl_BISON to the configure.ac, and write +# $(VARIABLE) -d $(YFLAGS) $(AM_YFLAGS) $(srcdir)/foo.y +# or similar. -# Test whether the flags O_NOATIME and O_NOFOLLOW actually work. -# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. -# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. +# This macro defines the autoconf variable VARIABLE to 'bison' if the specified +# minimum version of bison is found in $PATH, or to ':' otherwise. + + +# This macro sets the autoconf variables YACC (for old-style yacc Makefile +# rules) and YFLAGS (to allow options to be passed as 'configure' time). -# gettext.m4 serial 69 (gettext-0.19.9) +# fcntl-o.m4 serial 7 +# Test whether the flags O_NOATIME and O_NOFOLLOW actually work. +# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. +# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. + + +# serial 5 +# Check for flexible array member support. + +# Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# Written by Paul Eggert. +# gettext.m4 serial 72 (gettext-0.21.1) @@ -6701,29 +6557,25 @@ fi -# glibc2.m4 serial 3 -# Test for the GNU C Library, version 2.0 or newer. -# From Bruno Haible. -# glibc21.m4 serial 5 -# Test for the GNU C Library, version 2.1 or newer, or uClibc. -# From Bruno Haible. -# host-cpu-c-abi.m4 serial 11 +# glibc2.m4 serial 3 +# Test for the GNU C Library, version 2.0 or newer. +# From Bruno Haible. +# iconv.m4 serial 24 -# iconv.m4 serial 21 @@ -6733,12 +6585,12 @@ fi -# intdiv0.m4 serial 6 (gettext-0.18.2) +# intdiv0.m4 serial 9 (gettext-0.21.1) -# intl.m4 serial 34 (gettext-0.19.9) +# intl.m4 serial 51 (gettext-0.21.1) @@ -6750,11 +6602,11 @@ fi -# intlmacosx.m4 serial 6 (gettext-0.19.9) +# intlmacosx.m4 serial 8 (gettext-0.20.2) -# intl-thread-locale.m4 serial 4 +# intl-thread-locale.m4 serial 9 @@ -6775,7 +6627,7 @@ fi -# inttypes.m4 serial 27 +# inttypes.m4 serial 36 @@ -6793,6 +6645,15 @@ fi # $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. +# gl_INTTYPES_MODULE_INDICATOR([modulename]) +# sets the shell variable that indicates the presence of the given module +# to a C preprocessor expression that will evaluate to 1. +# This macro invocation must not occur in macros that are AC_REQUIREd. + + +# Initializes the default values for AC_SUBSTed shell variables. +# This macro must not be AC_REQUIREd. It must only be invoked, and only +# outside of macros or in macros that are not AC_REQUIREd. @@ -6805,21 +6666,21 @@ fi -# lcmessage.m4 serial 7 (gettext-0.18.2) +# lcmessage.m4 serial 8 # Check whether LC_MESSAGES is available in . -# lib-ld.m4 serial 9 +# lib-ld.m4 serial 10 -# lib-link.m4 serial 28 +# lib-link.m4 serial 33 @@ -6838,7 +6699,7 @@ fi -# lib-prefix.m4 serial 14 +# lib-prefix.m4 serial 20 @@ -6849,6 +6710,25 @@ fi +# locale_h.m4 serial 28 + + + + + +# gl_LOCALE_MODULE_INDICATOR([modulename]) +# sets the shell variable that indicates the presence of the given module +# to a C preprocessor expression that will evaluate to 1. +# This macro invocation must not occur in macros that are AC_REQUIREd. + + +# Initializes the default values for AC_SUBSTed shell variables. +# This macro must not be AC_REQUIREd. It must only be invoked, and only +# outside of macros or in macros that are not AC_REQUIREd. + + + + # lock.m4 serial 14 @@ -6857,14 +6737,14 @@ fi # Prerequisites of lib/glthread/lock.c. -# nls.m4 serial 5 (gettext-0.18) +# nls.m4 serial 6 (gettext-0.20.2) -# po.m4 serial 24a +# po.m4 serial 32 (gettext-0.21.1) @@ -6877,12 +6757,12 @@ fi -# printf-posix.m4 serial 6 (gettext-0.18.2) +# printf-posix.m4 serial 7 (gettext-0.21.1) -# progtest.m4 serial 7 (gettext-0.18.2) +# progtest.m4 serial 9 (gettext-0.21.1) @@ -6891,12 +6771,12 @@ fi -# pthread_rwlock_rdlock.m4 serial 2 +# pthread_rwlock_rdlock.m4 serial 4 -# size_max.m4 serial 11 +# size_max.m4 serial 12 @@ -6911,7 +6791,35 @@ fi -# threadlib.m4 serial 16 +# threadlib.m4 serial 32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6956,7 +6864,7 @@ fi -# wint_t.m4 serial 7 +# wint_t.m4 serial 11 @@ -6968,13 +6876,35 @@ fi +# glibc21.m4 serial 5 + +# Test for the GNU C Library, version 2.1 or newer, or uClibc. +# From Bruno Haible. + + + +# host-cpu-c-abi.m4 serial 15 + + + + + + + + +# Check for bool that conforms to C2023. + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 printf %s "checking for an ANSI C-conforming const... " >&6; } if test ${ac_cv_c_const+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7038,10 +6968,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_const=yes -else $as_nop - ac_cv_c_const=no +else case e in #( + e) ac_cv_c_const=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 printf "%s\n" "$ac_cv_c_const" >&6; } @@ -7056,8 +6988,8 @@ printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no +else case e in #( + e) ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7075,7 +7007,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } @@ -7100,8 +7033,8 @@ printf %s "checking whether byte ordering is bigendian... " >&6; } if test ${ac_cv_c_bigendian+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_bigendian=unknown +else case e in #( + e) ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7147,8 +7080,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext int main (void) { -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\ && LITTLE_ENDIAN) bogus endian macros #endif @@ -7179,8 +7112,9 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes -else $as_nop - ac_cv_c_bigendian=no +else case e in #( + e) ac_cv_c_bigendian=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -7224,8 +7158,9 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes -else $as_nop - ac_cv_c_bigendian=no +else case e in #( + e) ac_cv_c_bigendian=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -7252,22 +7187,23 @@ unsigned short int ascii_mm[] = int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } - extern int foo; - -int -main (void) -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} + int + main (int argc, char **argv) + { + /* Intimidate the compiler so that it does not + optimize the arrays away. */ + char *p = argv[0]; + ascii_mm[1] = *p++; ebcdic_mm[1] = *p++; + ascii_ii[1] = *p++; ebcdic_ii[1] = *p++; + return use_ascii (argc) == use_ebcdic (*p); + } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then ac_cv_c_bigendian=yes fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else @@ -7276,9 +7212,10 @@ then : fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -7301,14 +7238,17 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_bigendian=no -else $as_nop - ac_cv_c_bigendian=yes +else case e in #( + e) ac_cv_c_bigendian=yes ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 printf "%s\n" "$ac_cv_c_bigendian" >&6; } @@ -7328,31 +7268,8 @@ printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for preprocessor stringizing operator" >&5 -printf %s "checking for preprocessor stringizing operator... " >&6; } -if test ${ac_cv_c_stringize+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define x(y) #y - -char *s = x(teststring); -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "#teststring" >/dev/null 2>&1 -then : - ac_cv_c_stringize=no -else $as_nop - ac_cv_c_stringize=yes -fi -rm -rf conftest* -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stringize" >&5 -printf "%s\n" "$ac_cv_c_stringize" >&6; } -if test $ac_cv_c_stringize = yes; then +if test "$ac_prog_cc_stdc" != no; then printf "%s\n" "#define HAVE_STRINGIZE 1" >>confdefs.h @@ -7364,8 +7281,8 @@ printf %s "checking for long double... " >&6; } if test ${ac_cv_type_long_double+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$GCC" = yes; then +else case e in #( + e) if test "$GCC" = yes; then ac_cv_type_long_double=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -7388,11 +7305,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_type_long_double=yes -else $as_nop - ac_cv_type_long_double=no +else case e in #( + e) ac_cv_type_long_double=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5 printf "%s\n" "$ac_cv_type_long_double" >&6; } @@ -7402,22 +7321,13 @@ printf "%s\n" "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi -if test "$ac_prog_cc_stdc" != no; then - -printf "%s\n" "#define PROTOTYPES 1" >>confdefs.h - - -printf "%s\n" "#define __PROTOTYPES 1" >>confdefs.h - -fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 printf %s "checking whether char is unsigned... " >&6; } if test ${ac_cv_c_char_unsigned+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -7434,10 +7344,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_char_unsigned=no -else $as_nop - ac_cv_c_char_unsigned=yes +else case e in #( + e) ac_cv_c_char_unsigned=yes ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 printf "%s\n" "$ac_cv_c_char_unsigned" >&6; } @@ -7451,8 +7363,8 @@ printf %s "checking for working volatile... " >&6; } if test ${ac_cv_c_volatile+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7469,10 +7381,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_volatile=yes -else $as_nop - ac_cv_c_volatile=no +else case e in #( + e) ac_cv_c_volatile=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 printf "%s\n" "$ac_cv_c_volatile" >&6; } @@ -7487,8 +7401,8 @@ printf %s "checking for C/C++ restrict keyword... " >&6; } if test ${ac_cv_c_restrict+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_restrict=no +else case e in #( + e) ac_cv_c_restrict=no # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html # Put 'restrict' last, because C++ lacks it. @@ -7519,7 +7433,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 printf "%s\n" "$ac_cv_c_restrict" >&6; } @@ -7534,14 +7449,53 @@ printf "%s\n" "$ac_cv_c_restrict" >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bool, true, false" >&5 +printf %s "checking for bool, true, false... " >&6; } +if test ${gl_cv_c_bool+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if true == false + #error "true == false" + #endif + extern bool b; + bool b = true == false; +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + gl_cv_c_bool=yes +else case e in #( + e) gl_cv_c_bool=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_bool" >&5 +printf "%s\n" "$gl_cv_c_bool" >&6; } + if test "$gl_cv_c_bool" = yes; then + +printf "%s\n" "#define HAVE_C_BOOL 1" >>confdefs.h + + fi + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS @@ -7555,7 +7509,7 @@ do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ - 'BusyBox '* | \ + *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; @@ -7564,18 +7518,17 @@ do done done IFS=$as_save_IFS - + ;; +esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" + # As a last resort, use plain mkdir -p, + # in the hope it doesn't have the bugs of ancient mkdir. + MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 @@ -7586,8 +7539,8 @@ printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ +else case e in #( + e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done @@ -7612,9 +7565,10 @@ do as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in +case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -7649,7 +7603,8 @@ IFS=$as_save_IFS else ac_cv_path_SED=$SED fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } @@ -7663,8 +7618,9 @@ printf %s "checking whether NLS is requested... " >&6; } if test ${enable_nls+y} then : enableval=$enable_nls; USE_NLS=$enableval -else $as_nop - USE_NLS=yes +else case e in #( + e) USE_NLS=yes ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 @@ -7673,7 +7629,7 @@ printf "%s\n" "$USE_NLS" >&6; } - GETTEXT_MACRO_VERSION=0.19 + GETTEXT_MACRO_VERSION=0.20 @@ -7712,8 +7668,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MSGFMT+y} then : printf %s "(cached) " >&6 -else $as_nop - case "$MSGFMT" in +else case e in #( + e) case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; @@ -7736,6 +7692,7 @@ else $as_nop IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; +esac ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" @@ -7754,8 +7711,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_GMSGFMT+y} then : printf %s "(cached) " >&6 -else $as_nop - case $GMSGFMT in +else case e in #( + e) case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; @@ -7781,6 +7738,7 @@ IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; +esac ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT @@ -7794,12 +7752,7 @@ fi - case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; - *) MSGFMT_015=$MSGFMT ;; - esac - - case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac @@ -7840,8 +7793,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_XGETTEXT+y} then : printf %s "(cached) " >&6 -else $as_nop - case "$XGETTEXT" in +else case e in #( + e) case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; @@ -7864,6 +7817,7 @@ else $as_nop IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; +esac ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" @@ -7918,8 +7872,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MSGMERGE+y} then : printf %s "(cached) " >&6 -else $as_nop - case "$MSGMERGE" in +else case e in #( + e) case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; @@ -7941,6 +7895,7 @@ else $as_nop IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; +esac ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" @@ -7953,23 +7908,307 @@ printf "%s\n" "no" >&6; } fi + if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then + MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt' + else + if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then + MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet' + else + MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet' + fi + fi + + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5 -printf %s "checking whether we are using the GNU C Library 2 or newer... " >&6; } -if test ${ac_cv_gnu_library_2+y} +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 -else $as_nop +else case e in #( + e) # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#include +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else case e in #( + e) # Passes both tests. +ac_preproc_ok=: +break ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + + done + ac_cv_prog_CPP=$CPP + ;; +esac +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else case e in #( + e) # Passes both tests. +ac_preproc_ok=: +break ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See 'config.log' for more details" "$LINENO" 5; } ;; +esac +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep -e" >&5 +printf %s "checking for egrep -e... " >&6; } +if test ${ac_cv_path_EGREP_TRADITIONAL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -z "$EGREP_TRADITIONAL"; then + ac_path_EGREP_TRADITIONAL_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue +# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. + # Check for GNU $ac_path_EGREP_TRADITIONAL +case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( +*GNU*) + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; +#( +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" + "$ac_path_EGREP_TRADITIONAL" -E 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" + ac_path_EGREP_TRADITIONAL_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_TRADITIONAL_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then + : + fi +else + ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL +fi + + if test "$ac_cv_path_EGREP_TRADITIONAL" +then : + ac_cv_path_EGREP_TRADITIONAL="$ac_cv_path_EGREP_TRADITIONAL -E" +else case e in #( + e) if test -z "$EGREP_TRADITIONAL"; then + ac_path_EGREP_TRADITIONAL_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue +# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. + # Check for GNU $ac_path_EGREP_TRADITIONAL +case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( +*GNU*) + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; +#( +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" + "$ac_path_EGREP_TRADITIONAL" 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" + ac_path_EGREP_TRADITIONAL_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_TRADITIONAL_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL +fi + ;; +esac +fi ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP_TRADITIONAL" >&5 +printf "%s\n" "$ac_cv_path_EGREP_TRADITIONAL" >&6; } + EGREP_TRADITIONAL=$ac_cv_path_EGREP_TRADITIONAL + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5 +printf %s "checking whether we are using the GNU C Library 2 or newer... " >&6; } +if test ${ac_cv_gnu_library_2+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user @@ -7978,16 +8217,18 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Lucky GNU user" >/dev/null 2>&1 + $EGREP_TRADITIONAL "Lucky GNU user" >/dev/null 2>&1 then : ac_cv_gnu_library_2=yes -else $as_nop - ac_cv_gnu_library_2=no +else case e in #( + e) ac_cv_gnu_library_2=no ;; +esac fi rm -rf conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2" >&5 printf "%s\n" "$ac_cv_gnu_library_2" >&6; } @@ -8005,8 +8246,8 @@ printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 -else $as_nop - gl_save_CFLAGS="$CFLAGS" +else case e in #( + e) gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8022,12 +8263,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes -else $as_nop - gl_cv_cc_vis_werror=no +else case e in #( + e) gl_cv_cc_vis_werror=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } @@ -8036,8 +8279,8 @@ printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 -else $as_nop - gl_save_CFLAGS="$CFLAGS" +else case e in #( + e) gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" @@ -8061,12 +8304,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes -else $as_nop - gl_cv_cc_visibility=no +else case e in #( + e) gl_cv_cc_visibility=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } @@ -8085,10 +8330,11 @@ ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define size_t unsigned int" >>confdefs.h - + ;; +esac fi @@ -8097,8 +8343,8 @@ printf %s "checking for stdint.h... " >&6; } if test ${gl_cv_header_stdint_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -8113,10 +8359,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_stdint_h=yes -else $as_nop - gl_cv_header_stdint_h=no +else case e in #( + e) gl_cv_header_stdint_h=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 printf "%s\n" "$gl_cv_header_stdint_h" >&6; } @@ -8133,8 +8381,8 @@ printf %s "checking for working alloca.h... " >&6; } if test ${ac_cv_working_alloca_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -8149,11 +8397,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_working_alloca_h=yes -else $as_nop - ac_cv_working_alloca_h=no +else case e in #( + e) ac_cv_working_alloca_h=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 printf "%s\n" "$ac_cv_working_alloca_h" >&6; } @@ -8168,10 +8418,10 @@ printf %s "checking for alloca... " >&6; } if test ${ac_cv_func_alloca_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test $ac_cv_working_alloca_h = yes; then - ac_cv_func_alloca_works=yes -else +else case e in #( + e) ac_cv_func_alloca_works=$ac_cv_working_alloca_h +if test "$ac_cv_func_alloca_works" != yes +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8202,15 +8452,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_func_alloca_works=yes -else $as_nop - ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 printf "%s\n" "$ac_cv_func_alloca_works" >&6; } -fi if test $ac_cv_func_alloca_works = yes; then @@ -8232,12 +8481,12 @@ printf %s "checking stack direction for C alloca... " >&6; } if test ${ac_cv_c_stack_direction+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : ac_cv_c_stack_direction=0 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -8260,13 +8509,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_stack_direction=1 -else $as_nop - ac_cv_c_stack_direction=-1 +else case e in #( + e) ac_cv_c_stack_direction=-1 ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 printf "%s\n" "$ac_cv_c_stack_direction" >&6; } @@ -8296,8 +8548,8 @@ printf %s "checking for working mmap... " >&6; } if test ${ac_cv_func_mmap_fixed_mapped+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. @@ -8305,8 +8557,8 @@ then : # If we don't know, assume the worst. *) ac_cv_func_mmap_fixed_mapped=no ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ @@ -8327,21 +8579,21 @@ $ac_includes_default VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get - propagated back to all the places they're supposed to be. - - Grep wants private fixed already mapped. - The main things grep needs to know about mmap are: - * does it exist and is it safe to write into the mmap'd area - * how to use it (BSD variants) */ + propagated back to all the places they're supposed to be. */ #include #include -/* This mess was copied from the GNU getpagesize.h. */ -#ifndef HAVE_GETPAGESIZE +#ifndef getpagesize +/* Prefer sysconf to the legacy getpagesize function, as getpagesize has + been removed from POSIX and is limited to page sizes that fit in 'int'. */ # ifdef _SC_PAGESIZE -# define getpagesize() sysconf(_SC_PAGESIZE) -# else /* no _SC_PAGESIZE */ +# define getpagesize() sysconf (_SC_PAGESIZE) +# elif defined _SC_PAGE_SIZE +# define getpagesize() sysconf (_SC_PAGE_SIZE) +# elif HAVE_GETPAGESIZE +int getpagesize (); +# else # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE @@ -8365,16 +8617,15 @@ $ac_includes_default # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ -# endif /* no _SC_PAGESIZE */ - -#endif /* no HAVE_GETPAGESIZE */ +# endif +#endif int main (void) { char *data, *data2, *data3; const char *cdata2; - int i, pagesize; + long i, pagesize; int fd, fd2; pagesize = getpagesize (); @@ -8408,8 +8659,7 @@ main (void) if (*(data2 + i)) return 7; close (fd2); - if (munmap (data2, pagesize)) - return 8; + /* 'return 8;' not currently used. */ /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that @@ -8446,13 +8696,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_mmap_fixed_mapped=yes -else $as_nop - ac_cv_func_mmap_fixed_mapped=no +else case e in #( + e) ac_cv_func_mmap_fixed_mapped=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; } @@ -8470,8 +8723,8 @@ printf %s "checking whether integer division by zero raises SIGFPE... " >&6; } if test ${gt_cv_int_divbyzero_sigfpe+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) gt_cv_int_divbyzero_sigfpe= case "$host_os" in macos* | darwin[6-9]* | darwin[1-9][0-9]*) @@ -8496,24 +8749,27 @@ then : gt_cv_int_divbyzero_sigfpe="guessing no";; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include /* for exit() */ #include +#if !(defined _WIN32 && !defined __CYGWIN__) +#include /* for _exit() */ +#endif static void sigfpe_handler (int sig) { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ - exit (sig != SIGFPE); + _exit (sig != SIGFPE); } int x = 1; int y = 0; int z; -int xnan; +int inan; int main () { @@ -8528,7 +8784,7 @@ int main () #endif z = x / y; - xnan = y / y; + inan = y / y; exit (2); } @@ -8536,21 +8792,24 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : gt_cv_int_divbyzero_sigfpe=yes -else $as_nop - gt_cv_int_divbyzero_sigfpe=no +else case e in #( + e) gt_cv_int_divbyzero_sigfpe=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5 printf "%s\n" "$gt_cv_int_divbyzero_sigfpe" >&6; } case "$gt_cv_int_divbyzero_sigfpe" in - *yes) value=1;; - *) value=0;; + *yes) value=1 ;; + *) value=0 ;; esac printf "%s\n" "#define INTDIV0_RAISES_SIGFPE $value" >>confdefs.h @@ -8562,8 +8821,8 @@ printf %s "checking for inttypes.h... " >&6; } if test ${gl_cv_header_inttypes_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -8580,10 +8839,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_inttypes_h=yes -else $as_nop - gl_cv_header_inttypes_h=no +else case e in #( + e) gl_cv_header_inttypes_h=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 printf "%s\n" "$gl_cv_header_inttypes_h" >&6; } @@ -8599,8 +8860,8 @@ printf %s "checking for unsigned long long int... " >&6; } if test ${ac_cv_type_unsigned_long_long_int+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_type_unsigned_long_long_int=yes +else case e in #( + e) ac_cv_type_unsigned_long_long_int=yes case $ac_prog_cc_stdc in no | c89) ;; *) @@ -8639,12 +8900,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : -else $as_nop - ac_cv_type_unsigned_long_long_int=no +else case e in #( + e) ac_cv_type_unsigned_long_long_int=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext;; - esac + esac ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 printf "%s\n" "$ac_cv_type_unsigned_long_long_int" >&6; } @@ -8672,59 +8935,6 @@ printf "%s\n" "#define HAVE_UINTMAX_T 1" >>confdefs.h fi - ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" -if test "x$ac_cv_header_inttypes_h" = xyes -then : - printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h - -fi - - if test $ac_cv_header_inttypes_h = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 -printf %s "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } -if test ${gt_cv_inttypes_pri_broken+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#ifdef PRId32 -char *p = PRId32; -#endif - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - gt_cv_inttypes_pri_broken=no -else $as_nop - gt_cv_inttypes_pri_broken=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 -printf "%s\n" "$gt_cv_inttypes_pri_broken" >&6; } - fi - if test "$gt_cv_inttypes_pri_broken" = yes; then - -printf "%s\n" "#define PRI_MACROS_BROKEN 1" >>confdefs.h - - PRI_MACROS_BROKEN=1 - else - PRI_MACROS_BROKEN=0 - fi - - @@ -8734,26 +8944,40 @@ printf "%s\n" "#define PRI_MACROS_BROKEN 1" >>confdefs.h if test ${enable_threads+y} then : enableval=$enable_threads; gl_use_threads=$enableval -else $as_nop - if test -n "$gl_use_threads_default"; then +else case e in #( + e) if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else case "$host_os" in - osf*) gl_use_threads=no ;; - cygwin*) + osf*) gl_use_threads=no ;; + cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; + mingw*) + case "$gl_use_winpthreads_default" in + yes) gl_use_threads=posix ;; + no) gl_use_threads=windows ;; + *) gl_use_threads=yes ;; + esac + ;; *) gl_use_threads=yes ;; esac fi - + ;; +esac fi - if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then - # For using : + if test "$gl_use_threads" = yes \ + || test "$gl_use_threads" = isoc \ + || test "$gl_use_threads" = posix \ + || test "$gl_use_threads" = isoc+posix; then + # For using or : + + + if test -z "$gl_anythreadlib_early_done"; then case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it @@ -8769,839 +8993,717 @@ fi # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in - aix* | freebsd* | midnightbsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac + gl_anythreadlib_early_done=done fi + fi - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" -# Check whether --with-gnu-ld was given. -if test ${with_gnu_ld+y} -then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else $as_nop - with_gnu_ld=no -fi + gl_threads_api=none + LIBTHREAD= + LTLIBTHREAD= + LIBMULTITHREAD= + LTLIBMULTITHREAD= + if test "$gl_use_threads" != no; then -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which - # contains only /bin. Note that ksh looks also at the FPATH variable, - # so we have to set that as well for the test. - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ - && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ - || PATH_SEPARATOR=';' - } -fi -if test -n "$LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 -printf %s "checking for ld... " >&6; } -elif test "$GCC" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -printf %s "checking for ld used by $CC... " >&6; } -elif test "$with_gnu_ld" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -printf %s "checking for GNU ld... " >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -printf %s "checking for non-GNU ld... " >&6; } -fi -if test -n "$LD"; then - # Let the user override the test with a path. - : -else - if test ${acl_cv_path_LD+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 +printf %s "checking whether imported symbols can be declared weak... " >&6; } +if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 -else $as_nop - - acl_cv_path_LD= # Final result of this test - ac_prog=ld # Program to search in $PATH - if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - acl_output=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $acl_output in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` - while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do - acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` - done - # Got the pathname. No search in PATH is needed. - acl_cv_path_LD="$acl_output" - ac_prog= - ;; - "") - # If it fails, then pretend we aren't using GCC. - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac - fi - if test -n "$ac_prog"; then - # Search for $ac_prog in $PATH. - acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$acl_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - acl_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$acl_cv_path_LD" -v 2>&1 conftest.$ac_ext +else case e in #( + e) case "$host_os" in + cygwin*) + gl_cv_have_weak="guessing no" + ;; + *) + gl_cv_have_weak=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined __powerpc64__ || defined _ARCH_PPC64 - int ok; - #else - error fail - #endif - +extern void xyzzy (); +#pragma weak xyzzy +int +main (void) +{ +xyzzy(); + ; + return 0; +} _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - # The compiler produces 64-bit code. Add option '-b64' so that the - # linker groks 64-bit object files. - case "$acl_cv_path_LD " in - *" -b64 "*) ;; - *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; - esac - + gl_cv_have_weak=maybe fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; - sparc64-*-netbsd*) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test $gl_cv_have_weak = maybe; then + if test "$cross_compiling" = yes +then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined __sparcv9 || defined __arch64__ - int ok; - #else - error fail - #endif +#ifdef __ELF__ + Extensible Linking Format + #endif _ACEOF -if ac_fn_c_try_compile "$LINENO" +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP_TRADITIONAL "Extensible Linking Format" >/dev/null 2>&1 then : - -else $as_nop - # The compiler produces 32-bit code. Add option '-m elf32_sparc' - # so that the linker groks 32-bit object files. - case "$acl_cv_path_LD " in - *" -m elf32_sparc "*) ;; - *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; - esac - + gl_cv_have_weak="guessing yes" +else case e in #( + e) gl_cv_have_weak="guessing no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; - esac +rm -rf conftest* -fi - LD="$acl_cv_path_LD" -fi -if test -n "$LD"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -printf "%s\n" "$LD" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -printf %s "checking if the linker ($LD) is GNU ld... " >&6; } -if test ${acl_cv_prog_gnu_ld+y} +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#pragma weak fputs +int main () +{ + return (fputs == NULL); +} +_ACEOF +if ac_fn_c_try_run "$LINENO" then : - printf %s "(cached) " >&6 -else $as_nop - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$acl_cv_prog_gnu_ld - - - - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 -printf %s "checking for shared library run path origin... " >&6; } -if test ${acl_cv_rpath+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ - ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 -printf "%s\n" "$acl_cv_rpath" >&6; } - wl="$acl_cv_wl" - acl_libext="$acl_cv_libext" - acl_shlibext="$acl_cv_shlibext" - acl_libname_spec="$acl_cv_libname_spec" - acl_library_names_spec="$acl_cv_library_names_spec" - acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - acl_hardcode_direct="$acl_cv_hardcode_direct" - acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" - # Check whether --enable-rpath was given. -if test ${enable_rpath+y} -then : - enableval=$enable_rpath; : -else $as_nop - enable_rpath=yes + fi + ;; + esac + case " $LDFLAGS " in + *" -static "*) gl_cv_have_weak=no ;; + esac + case "$gl_cv_have_weak" in + *yes) + case "$host_os" in + freebsd* | dragonfly* | midnightbsd*) + : > conftest1.c + $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 + cat < conftest2.c +#include +#pragma weak pthread_mutexattr_gettype +int main () +{ + return (pthread_mutexattr_gettype != NULL); +} +EOF + $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ + || gl_cv_have_weak=no + rm -f conftest1.c libempty.so conftest2.c conftest + ;; + esac + ;; + esac + ;; +esac fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 +printf "%s\n" "$gl_cv_have_weak" >&6; } + case "$gl_cv_have_weak" in + *yes) +printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h + ;; + esac + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 -printf %s "checking 32-bit host C ABI... " >&6; } -if test ${gl_cv_host_cpu_c_abi_32bit+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$gl_cv_host_cpu_c_abi"; then - case "$gl_cv_host_cpu_c_abi" in - i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) - gl_cv_host_cpu_c_abi_32bit=yes ;; - *) - gl_cv_host_cpu_c_abi_32bit=no ;; - esac - else - case "$host_cpu" in - - i[4567]86 ) - gl_cv_host_cpu_c_abi_32bit=yes - ;; - - x86_64 ) - # On x86_64 systems, the C compiler may be generating code in one of - # these ABIs: - # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. - # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 - # with native Windows (mingw, MSVC). - # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. - # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if (defined __x86_64__ || defined __amd64__ \ - || defined _M_X64 || defined _M_AMD64) \ - && !(defined __ILP32__ || defined _ILP32) - int ok; - #else - error fail - #endif + : + fi + if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then -_ACEOF -if ac_fn_c_try_compile "$LINENO" + gl_have_isoc_threads="$ac_cv_header_threads_h" + fi + if test "$gl_use_threads" = yes \ + || test "$gl_use_threads" = posix \ + || test "$gl_use_threads" = isoc+posix; then + + + if test -z "$gl_pthreadlib_body_done"; then + gl_pthread_api=no + LIBPTHREAD= + LIBPMULTITHREAD= + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks . It's added above, in gl_ANYTHREADLIB_EARLY. + ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes then : - gl_cv_host_cpu_c_abi_32bit=no -else $as_nop - gl_cv_host_cpu_c_abi_32bit=yes + gl_have_pthread_h=yes +else case e in #( + e) gl_have_pthread_h=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; - arm* | aarch64 ) - # Assume arm with EABI. - # On arm64 systems, the C compiler may be generating code in one of - # these ABIs: - # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. - # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. - # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + # + # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 + # needs -pthread for some reason. See: + # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html + save_LIBS=$LIBS + for gl_pthread in '' '-pthread'; do + LIBS="$LIBS $gl_pthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) - int ok; - #else - error fail - #endif +#include + pthread_mutex_t m; + pthread_mutexattr_t ma; +int +main (void) +{ +pthread_mutex_lock (&m); + pthread_mutexattr_init (&ma); + ; + return 0; +} _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - gl_cv_host_cpu_c_abi_32bit=no -else $as_nop - gl_cv_host_cpu_c_abi_32bit=yes + gl_pthread_api=yes + LIBPTHREAD=$gl_pthread + LIBPMULTITHREAD=$gl_pthread fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$save_LIBS + test $gl_pthread_api = yes && break + done + echo "$as_me:9200: gl_pthread_api=$gl_pthread_api" >&5 + echo "$as_me:9201: LIBPTHREAD=$LIBPTHREAD" >&5 - hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) - # On hppa, the C compiler may be generating 32-bit code or 64-bit - # code. In the latter case, it defines _LP64 and __LP64__. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + gl_pthread_in_glibc=no + # On Linux with glibc >= 2.34, libc contains the fully functional + # pthread functions. + case "$host_os" in + linux*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __LP64__ - int ok; - #else - error fail - #endif +#include + #ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) + Lucky user + #endif + #endif _ACEOF -if ac_fn_c_try_compile "$LINENO" +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP_TRADITIONAL "Lucky user" >/dev/null 2>&1 then : - gl_cv_host_cpu_c_abi_32bit=no -else $as_nop - gl_cv_host_cpu_c_abi_32bit=yes + gl_pthread_in_glibc=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; +rm -rf conftest* - ia64* ) - # On ia64 on HP-UX, the C compiler may be generating 64-bit code or - # 32-bit code. In the latter case, it defines _ILP32. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ;; + esac + echo "$as_me:9227: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 + + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +printf %s "checking for pthread_kill in -lpthread... " >&6; } +if test ${ac_cv_lib_pthread_pthread_kill+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef _ILP32 - int ok; - #else - error fail - #endif +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (void); +int +main (void) +{ +return pthread_kill (); + ; + return 0; +} _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - gl_cv_host_cpu_c_abi_32bit=yes -else $as_nop - gl_cv_host_cpu_c_abi_32bit=no + ac_cv_lib_pthread_pthread_kill=yes +else case e in #( + e) ac_cv_lib_pthread_pthread_kill=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes +then : + if test $gl_pthread_in_glibc = yes; then + LIBPMULTITHREAD= + else + LIBPMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + # On Solaris 10 or newer, this test is no longer needed, because + # libc contains the fully functional pthread functions. + case "$host_os" in + solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) - mips* ) - # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this - # at 32. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) - int ok; - #else - error fail - #endif +printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h + + esac + fi -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - gl_cv_host_cpu_c_abi_32bit=no -else $as_nop - gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; - powerpc* ) - # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. - # No need to distinguish them here; the caller may distinguish - # them based on the OS. - # On powerpc64 systems, the C compiler may still be generating - # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may - # be generating 64-bit code. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + elif test $gl_pthread_api != yes; then + # Some library is needed. Try libpthread and libc_r. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +printf %s "checking for pthread_kill in -lpthread... " >&6; } +if test ${ac_cv_lib_pthread_pthread_kill+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined __powerpc64__ || defined _ARCH_PPC64 - int ok; - #else - error fail - #endif +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (void); +int +main (void) +{ +return pthread_kill (); + ; + return 0; +} _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - gl_cv_host_cpu_c_abi_32bit=no -else $as_nop - gl_cv_host_cpu_c_abi_32bit=yes + ac_cv_lib_pthread_pthread_kill=yes +else case e in #( + e) ac_cv_lib_pthread_pthread_kill=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; - - rs6000 ) - gl_cv_host_cpu_c_abi_32bit=yes - ;; - - riscv32 | riscv64 ) - # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. - # Size of 'long' and 'void *': - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined __LP64__ - int ok; - #else - error fail - #endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - gl_cv_host_cpu_c_abi_32bit=no -else $as_nop - gl_cv_host_cpu_c_abi_32bit=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; - - s390* ) - # On s390x, the C compiler may be generating 64-bit (= s390x) code - # or 31-bit (= s390) code. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined __LP64__ || defined __s390x__ - int ok; - #else - error fail - #endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - gl_cv_host_cpu_c_abi_32bit=no -else $as_nop - gl_cv_host_cpu_c_abi_32bit=yes +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; - - sparc | sparc64 ) - # UltraSPARCs running Linux have `uname -m` = "sparc64", but the - # C compiler still generates 32-bit code. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined __sparcv9 || defined __arch64__ - int ok; - #else - error fail - #endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : - gl_cv_host_cpu_c_abi_32bit=no -else $as_nop - gl_cv_host_cpu_c_abi_32bit=yes + gl_pthread_api=yes + LIBPTHREAD=-lpthread + LIBPMULTITHREAD=-lpthread fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ;; - - *) - gl_cv_host_cpu_c_abi_32bit=no - ;; - esac - fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 -printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; } - - HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" - - - - - case "$host_os" in - solaris*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 -printf %s "checking for 64-bit host... " >&6; } -if test ${gl_cv_solaris_64bit+y} + if test $gl_pthread_api != yes; then + # For FreeBSD 4. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 +printf %s "checking for pthread_kill in -lc_r... " >&6; } +if test ${ac_cv_lib_c_r_pthread_kill+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef _LP64 - int ok; - #else - error fail - #endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - gl_cv_solaris_64bit=yes -else $as_nop - gl_cv_solaris_64bit=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 -printf "%s\n" "$gl_cv_solaris_64bit" >&6; };; - esac - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 -printf %s "checking for the common suffixes of directories in the library search path... " >&6; } -if test ${acl_cv_libdirstems+y} -then : - printf %s "(cached) " >&6 -else $as_nop - acl_libdirstem=lib - acl_libdirstem2= - case "$host_os" in - solaris*) - if test $gl_cv_solaris_64bit = yes; then - acl_libdirstem=lib/64 - case "$host_cpu" in - sparc*) acl_libdirstem2=lib/sparcv9 ;; - i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; - esac - fi - ;; - *) - if test "$HOST_CPU_C_ABI_32BIT" != yes; then - searchpath=`(if test -f /usr/bin/gcc \ - && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ - LC_ALL=C /usr/bin/gcc -print-search-dirs; \ - else \ - LC_ALL=C $CC -print-search-dirs; \ - fi) 2>/dev/null \ - | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - */../ | */.. ) - # Better ignore directories of this form. They are misleading. - ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" - fi - fi - ;; - esac - test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" - acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 -printf "%s\n" "$acl_cv_libdirstems" >&6; } - # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. - acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` - acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` - - - gl_threads_api=none - LIBTHREAD= - LTLIBTHREAD= - LIBMULTITHREAD= - LTLIBMULTITHREAD= - if test "$gl_use_threads" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 -printf %s "checking whether imported symbols can be declared weak... " >&6; } -if test ${gl_cv_have_weak+y} -then : - printf %s "(cached) " >&6 -else $as_nop - gl_cv_have_weak=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -extern void xyzzy (); -#pragma weak xyzzy +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (void); int main (void) { -xyzzy(); +return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : - gl_cv_have_weak=maybe + ac_cv_lib_c_r_pthread_kill=yes +else case e in #( + e) ac_cv_lib_c_r_pthread_kill=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - if test $gl_cv_have_weak = maybe; then - if test "$cross_compiling" = yes -then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __ELF__ - Extensible Linking Format - #endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Extensible Linking Format" >/dev/null 2>&1 +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 +printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } +if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : - gl_cv_have_weak="guessing yes" -else $as_nop - gl_cv_have_weak="guessing no" + gl_pthread_api=yes + LIBPTHREAD=-lc_r + LIBPMULTITHREAD=-lc_r fi -rm -rf conftest* + fi + fi + echo "$as_me:9405: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 +printf %s "checking whether POSIX threads API is available... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 +printf "%s\n" "$gl_pthread_api" >&6; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#pragma weak fputs -int main () -{ - return (fputs == NULL); -} -_ACEOF -if ac_fn_c_try_run "$LINENO" -then : - gl_cv_have_weak=yes -else $as_nop - gl_cv_have_weak=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi + if test $gl_pthread_api = yes; then - fi - case " $LDFLAGS " in - *" -static "*) gl_cv_have_weak=no ;; - esac +printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 -printf "%s\n" "$gl_cv_have_weak" >&6; } - if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then - # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that - # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. - ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" -if test "x$ac_cv_header_pthread_h" = xyes -then : - gl_have_pthread_h=yes -else $as_nop - gl_have_pthread_h=no -fi - - if test "$gl_have_pthread_h" = yes; then - # Other possible tests: - # -lpthreads (FSU threads, PCthreads) - # -lgthreads - gl_have_pthread= - # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist - # in libc. IRIX 6.5 has the first one in both libc and libpthread, but - # the second one only in libpthread, and lock.c needs it. - # - # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 - # needs -pthread for some reason. See: - # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html - save_LIBS=$LIBS - for gl_pthread in '' '-pthread'; do - LIBS="$LIBS $gl_pthread" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - pthread_mutex_t m; - pthread_mutexattr_t ma; + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include int main (void) { -pthread_mutex_lock (&m); - pthread_mutexattr_init (&ma); +sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : - gl_have_pthread=yes - LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread - LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$save_LIBS - test -n "$gl_have_pthread" && break - done - - # Test for libpthread by looking for pthread_kill. (Not pthread_self, - # since it is defined as a macro on OSF/1.) - if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then - # The program links fine without libpthread. But it may actually - # need to link with libpthread in order to create multiple threads. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 -printf %s "checking for pthread_kill in -lpthread... " >&6; } -if test ${ac_cv_lib_pthread_pthread_kill+y} + LIB_SCHED_YIELD= + +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 +printf %s "checking for sched_yield in -lrt... " >&6; } +if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char pthread_kill (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (void); int main (void) { -return pthread_kill (); +return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : - ac_cv_lib_pthread_pthread_kill=yes -else $as_nop - ac_cv_lib_pthread_pthread_kill=no + ac_cv_lib_rt_sched_yield=yes +else case e in #( + e) ac_cv_lib_rt_sched_yield=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 -printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } -if test "x$ac_cv_lib_pthread_pthread_kill" = xyes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 +printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } +if test "x$ac_cv_lib_rt_sched_yield" = xyes then : - LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread - # On Solaris and HP-UX, most pthread functions exist also in libc. - # Therefore pthread_in_use() needs to actually try to create a - # thread: pthread_create from libc will fail, whereas - # pthread_create will actually create a thread. - # On Solaris 10 or newer, this test is no longer needed, because - # libc contains the fully functional pthread functions. - case "$host_os" in - solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) - -printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h - - esac - -fi - - elif test -z "$gl_have_pthread"; then - # Some library is needed. Try libpthread and libc_r. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 -printf %s "checking for pthread_kill in -lpthread... " >&6; } -if test ${ac_cv_lib_pthread_pthread_kill+y} + LIB_SCHED_YIELD=-lrt +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 +printf %s "checking for sched_yield in -lposix4... " >&6; } +if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char pthread_kill (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (void); int main (void) { -return pthread_kill (); +return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : - ac_cv_lib_pthread_pthread_kill=yes -else $as_nop - ac_cv_lib_pthread_pthread_kill=no + ac_cv_lib_posix4_sched_yield=yes +else case e in #( + e) ac_cv_lib_posix4_sched_yield=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 -printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } -if test "x$ac_cv_lib_pthread_pthread_kill" = xyes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 +printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } +if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : - gl_have_pthread=yes - LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread - LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread + LIB_SCHED_YIELD=-lposix4 +fi + ;; +esac fi - if test -z "$gl_have_pthread"; then - # For FreeBSD 4. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 -printf %s "checking for pthread_kill in -lc_r... " >&6; } -if test ${ac_cv_lib_c_r_pthread_kill+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lc_r $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext -/* Override any GCC internal prototype to avoid an error. + + gl_pthreadlib_body_done=done + fi + + LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD + LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD + if test $gl_pthread_api = yes; then + if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then + gl_threads_api='isoc+posix' + +printf "%s\n" "#define USE_ISOC_AND_POSIX_THREADS 1" >>confdefs.h + + LIBTHREAD= LTLIBTHREAD= + else + gl_threads_api=posix + +printf "%s\n" "#define USE_POSIX_THREADS 1" >>confdefs.h + + if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then + +printf "%s\n" "#define USE_POSIX_THREADS_FROM_LIBC 1" >>confdefs.h + + else + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + +printf "%s\n" "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= LTLIBTHREAD= + else + case "$host_os" in + freebsd* | dragonfly* | midnightbsd*) + if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then + +printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h + + fi + ;; + esac + fi + fi + fi + fi + fi + if test $gl_threads_api = none; then + if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then + + + + if test -z "$gl_stdthreadlib_body_done"; then + + + case "$host_os" in + mingw*) + LIBSTDTHREAD= + ;; + *) + + + if test -z "$gl_pthreadlib_body_done"; then + gl_pthread_api=no + LIBPTHREAD= + LIBPMULTITHREAD= + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks . It's added above, in gl_ANYTHREADLIB_EARLY. + ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes +then : + gl_have_pthread_h=yes +else case e in #( + e) gl_have_pthread_h=no ;; +esac +fi + + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + # + # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 + # needs -pthread for some reason. See: + # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html + save_LIBS=$LIBS + for gl_pthread in '' '-pthread'; do + LIBS="$LIBS $gl_pthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + pthread_mutex_t m; + pthread_mutexattr_t ma; + +int +main (void) +{ +pthread_mutex_lock (&m); + pthread_mutexattr_init (&ma); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + gl_pthread_api=yes + LIBPTHREAD=$gl_pthread + LIBPMULTITHREAD=$gl_pthread +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$save_LIBS + test $gl_pthread_api = yes && break + done + echo "$as_me:9652: gl_pthread_api=$gl_pthread_api" >&5 + echo "$as_me:9653: LIBPTHREAD=$LIBPTHREAD" >&5 + + gl_pthread_in_glibc=no + # On Linux with glibc >= 2.34, libc contains the fully functional + # pthread functions. + case "$host_os" in + linux*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) + Lucky user + #endif + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP_TRADITIONAL "Lucky user" >/dev/null 2>&1 +then : + gl_pthread_in_glibc=yes +fi +rm -rf conftest* + + ;; + esac + echo "$as_me:9679: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 + + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +printf %s "checking for pthread_kill in -lpthread... " >&6; } +if test ${ac_cv_lib_pthread_pthread_kill+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char pthread_kill (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (void); int main (void) { @@ -9612,958 +9714,1390 @@ return pthread_kill (); _ACEOF if ac_fn_c_try_link "$LINENO" then : - ac_cv_lib_c_r_pthread_kill=yes -else $as_nop - ac_cv_lib_c_r_pthread_kill=no + ac_cv_lib_pthread_pthread_kill=yes +else case e in #( + e) ac_cv_lib_pthread_pthread_kill=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 -printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } -if test "x$ac_cv_lib_c_r_pthread_kill" = xyes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : - gl_have_pthread=yes - LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r - LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r -fi - - fi - fi - if test -n "$gl_have_pthread"; then - gl_threads_api=posix + if test $gl_pthread_in_glibc = yes; then + LIBPMULTITHREAD= + else + LIBPMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + # On Solaris 10 or newer, this test is no longer needed, because + # libc contains the fully functional pthread functions. + case "$host_os" in + solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) -printf "%s\n" "#define USE_POSIX_THREADS 1" >>confdefs.h +printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h - if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + esac + fi -printf "%s\n" "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h +fi - LIBTHREAD= - LTLIBTHREAD= - fi - fi - fi - fi - fi - if test -z "$gl_have_pthread"; then - if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then - gl_have_solaristhread= - gl_save_LIBS="$LIBS" - LIBS="$LIBS -lthread" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + elif test $gl_pthread_api != yes; then + # Some library is needed. Try libpthread and libc_r. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +printf %s "checking for pthread_kill in -lpthread... " >&6; } +if test ${ac_cv_lib_pthread_pthread_kill+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include - +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (void); int main (void) { -thr_self(); +return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : - gl_have_solaristhread=yes + ac_cv_lib_pthread_pthread_kill=yes +else case e in #( + e) ac_cv_lib_pthread_pthread_kill=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - LIBS="$gl_save_LIBS" - if test -n "$gl_have_solaristhread"; then - gl_threads_api=solaris - LIBTHREAD=-lthread - LTLIBTHREAD=-lthread - LIBMULTITHREAD="$LIBTHREAD" - LTLIBMULTITHREAD="$LTLIBTHREAD" - -printf "%s\n" "#define USE_SOLARIS_THREADS 1" >>confdefs.h +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes +then : + gl_pthread_api=yes + LIBPTHREAD=-lpthread + LIBPMULTITHREAD=-lpthread +fi - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + if test $gl_pthread_api != yes; then + # For FreeBSD 4. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 +printf %s "checking for pthread_kill in -lc_r... " >&6; } +if test ${ac_cv_lib_c_r_pthread_kill+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -printf "%s\n" "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (void); +int +main (void) +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_c_r_pthread_kill=yes +else case e in #( + e) ac_cv_lib_c_r_pthread_kill=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 +printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } +if test "x$ac_cv_lib_c_r_pthread_kill" = xyes +then : + gl_pthread_api=yes + LIBPTHREAD=-lc_r + LIBPMULTITHREAD=-lc_r +fi - LIBTHREAD= - LTLIBTHREAD= - fi fi fi + echo "$as_me:9857: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi - if test "$gl_use_threads" = pth; then - gl_save_CPPFLAGS="$CPPFLAGS" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 +printf %s "checking whether POSIX threads API is available... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 +printf "%s\n" "$gl_pthread_api" >&6; } + if test $gl_pthread_api = yes; then +printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h + fi + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + LIB_SCHED_YIELD= - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 -printf %s "checking how to link with libpth... " >&6; } -if test ${ac_cv_libpth_libs+y} +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 +printf %s "checking for sched_yield in -lrt... " >&6; } +if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 -else $as_nop +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (void); +int +main (void) +{ +return sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_rt_sched_yield=yes +else case e in #( + e) ac_cv_lib_rt_sched_yield=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 +printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } +if test "x$ac_cv_lib_rt_sched_yield" = xyes +then : + LIB_SCHED_YIELD=-lrt +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 +printf %s "checking for sched_yield in -lposix4... " >&6; } +if test ${ac_cv_lib_posix4_sched_yield+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix4 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (void); +int +main (void) +{ +return sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_posix4_sched_yield=yes +else case e in #( + e) ac_cv_lib_posix4_sched_yield=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 +printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } +if test "x$ac_cv_lib_posix4_sched_yield" = xyes +then : + LIB_SCHED_YIELD=-lposix4 +fi + ;; +esac +fi + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + gl_pthreadlib_body_done=done + fi + if test $ac_cv_header_threads_h = yes; then + ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create" +if test "x$ac_cv_func_thrd_create" = xyes +then : + printf "%s\n" "#define HAVE_THRD_CREATE 1" >>confdefs.h - use_additional=yes - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - +fi -# Check whether --with-libpth-prefix was given. -if test ${with_libpth_prefix+y} + if test $ac_cv_func_thrd_create = yes; then + LIBSTDTHREAD= + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thrd_create in -lstdthreads" >&5 +printf %s "checking for thrd_create in -lstdthreads... " >&6; } +if test ${ac_cv_lib_stdthreads_thrd_create+y} then : - withval=$with_libpth_prefix; - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-lstdthreads $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char thrd_create (void); +int +main (void) +{ +return thrd_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_stdthreads_thrd_create=yes +else case e in #( + e) ac_cv_lib_stdthreads_thrd_create=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_stdthreads_thrd_create" >&5 +printf "%s\n" "$ac_cv_lib_stdthreads_thrd_create" >&6; } +if test "x$ac_cv_lib_stdthreads_thrd_create" = xyes +then : - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && test ! -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi - fi - fi + LIBSTDTHREAD='-lstdthreads -lpthread' +else case e in #( + e) + LIBSTDTHREAD="$LIBPMULTITHREAD" + ;; +esac fi - LIBPTH= - LTLIBPTH= - INCPTH= - LIBPTH_PREFIX= - HAVE_LIBPTH= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='pth ' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value" - else - : fi else - found_dir= - found_la= - found_so= - found_a= - eval libname=\"$acl_libname_spec\" # typically: libname=lib$name - if test -n "$acl_shlibext"; then - shrext=".$acl_shlibext" # typically: shrext=.so - else - shrext= - fi - if test $use_additional = yes; then - dir="$additional_libdir" - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIBPTH; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - if test "$enable_rpath" = no \ - || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" - else - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - if test "$acl_hardcode_direct" = yes; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" - else - if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - haveit= - for x in $LDFLAGS $LIBPTH; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir" - fi - if test "$acl_hardcode_minus_L" != no; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" - else - LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a" - else - LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name" - fi - fi - additional_includedir= - case "$found_dir" in - */$acl_libdirstem | */$acl_libdirstem/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` - if test "$name" = 'pth'; then - LIBPTH_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - */$acl_libdirstem2 | */$acl_libdirstem2/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` - if test "$name" = 'pth'; then - LIBPTH_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INCPTH; do + LIBSTDTHREAD="$LIBPMULTITHREAD $LIB_SCHED_YIELD" + fi + ;; + esac - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - if test -n "$found_la"; then - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIBPTH; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ISO C threads API is available" >&5 +printf %s "checking whether ISO C threads API is available... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_threads_h" >&5 +printf "%s\n" "$ac_cv_header_threads_h" >&6; } + gl_stdthreadlib_body_done=done + fi - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIBPTH; do + LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD + LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD + gl_threads_api=isoc - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +printf "%s\n" "#define USE_ISOC_THREADS 1" >>confdefs.h - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - LIBPTH="${LIBPTH}${LIBPTH:+ }$dep" - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep" - ;; - esac - done - fi - else - LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name" - fi - fi fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$acl_hardcode_libdir_separator"; then - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" - else - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" - done + fi + if test $gl_threads_api = none; then + case "$gl_use_threads" in + yes | windows | win32) # The 'win32' is for backward compatibility. + if { case "$host_os" in + mingw*) true;; + *) false;; + esac + }; then + gl_threads_api=windows + +printf "%s\n" "#define USE_WINDOWS_THREADS 1" >>confdefs.h + + fi + ;; + esac fi fi - if test "X$ltrpathdirs" != "X"; then - for found_dir in $ltrpathdirs; do - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir" - done - fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 +printf %s "checking for multithread API to use... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 +printf "%s\n" "$gl_threads_api" >&6; } + + + + + + - ac_cv_libpth_libs="$LIBPTH" - ac_cv_libpth_ltlibs="$LTLIBPTH" - ac_cv_libpth_cppflags="$INCPTH" - ac_cv_libpth_prefix="$LIBPTH_PREFIX" + if test "$gl_threads_api" = posix; then + # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the + # pthread_rwlock_* functions. + has_rwlock=false + ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include +" +if test "x$ac_cv_type_pthread_rwlock_t" = xyes +then : + has_rwlock=true + +printf "%s\n" "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 -printf "%s\n" "$ac_cv_libpth_libs" >&6; } - LIBPTH="$ac_cv_libpth_libs" - LTLIBPTH="$ac_cv_libpth_ltlibs" - INCPTH="$ac_cv_libpth_cppflags" - LIBPTH_PREFIX="$ac_cv_libpth_prefix" - for element in $INCPTH; do - haveit= - for x in $CPPFLAGS; do + if $has_rwlock; then - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 +printf %s "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } +if test ${gl_cv_pthread_rwlock_rdlock_prefer_writer+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) save_LIBS="$LIBS" + LIBS="$LIBS $LIBMULTITHREAD" + if test "$cross_compiling" = yes +then : + case "$host_os" in + # Guess no on glibc systems. + *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess no on musl systems. + *-musl*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess no on bionic systems. + *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess yes on native Windows with the mingw-w64 winpthreads library. + # Guess no on native Windows with the gnulib windows-rwlock module. + mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" + else + gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" + fi + ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; + esac + +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +#include + +#define SUCCEED() exit (0) +#define FAILURE() exit (1) +#define UNEXPECTED(n) (exit (10 + (n))) + +/* The main thread creates the waiting writer and the requesting reader threads + in the default way; this guarantees that they have the same priority. + We can reuse the main thread as first reader thread. */ + +static pthread_rwlock_t lock; +static pthread_t reader1; +static pthread_t writer; +static pthread_t reader2; +static pthread_t timer; +/* Used to pass control from writer to reader2 and from reader2 to timer, + as in a relay race. + Passing control from one running thread to another running thread + is most likely faster than to create the second thread. */ +static pthread_mutex_t baton; + +static void * +timer_func (void *ignored) +{ + /* Step 13 (can be before or after step 12): + The timer thread takes the baton, then waits a moment to make sure + it can tell whether the second reader thread is blocked at step 12. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (13); + usleep (100000); + /* By the time we get here, it's clear that the second reader thread is + blocked at step 12. This is the desired behaviour. */ + SUCCEED (); +} + +static void * +reader2_func (void *ignored) +{ + int err; + + /* Step 8 (can be before or after step 7): + The second reader thread takes the baton, then waits a moment to make sure + the writer thread has reached step 7. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (8); + usleep (100000); + /* Step 9: The second reader thread requests the lock. */ + err = pthread_rwlock_tryrdlock (&lock); + if (err == 0) + FAILURE (); + else if (err != EBUSY) + UNEXPECTED (9); + /* Step 10: Launch a timer, to test whether the next call blocks. */ + if (pthread_create (&timer, NULL, timer_func, NULL)) + UNEXPECTED (10); + /* Step 11: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (11); + /* Step 12: The second reader thread requests the lock. */ + err = pthread_rwlock_rdlock (&lock); + if (err == 0) + FAILURE (); + else + UNEXPECTED (12); +} + +static void * +writer_func (void *ignored) +{ + /* Step 4: Take the baton, so that the second reader thread does not go ahead + too early. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (4); + /* Step 5: Create the second reader thread. */ + if (pthread_create (&reader2, NULL, reader2_func, NULL)) + UNEXPECTED (5); + /* Step 6: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (6); + /* Step 7: The writer thread requests the lock. */ + if (pthread_rwlock_wrlock (&lock)) + UNEXPECTED (7); + return NULL; +} + +int +main () +{ + reader1 = pthread_self (); + + /* Step 1: The main thread initializes the lock and the baton. */ + if (pthread_rwlock_init (&lock, NULL)) + UNEXPECTED (1); + if (pthread_mutex_init (&baton, NULL)) + UNEXPECTED (1); + /* Step 2: The main thread acquires the lock as a reader. */ + if (pthread_rwlock_rdlock (&lock)) + UNEXPECTED (2); + /* Step 3: Create the writer thread. */ + if (pthread_create (&writer, NULL, writer_func, NULL)) + UNEXPECTED (3); + /* Job done. Go to sleep. */ + for (;;) + { + sleep (1); + } +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + gl_cv_pthread_rwlock_rdlock_prefer_writer=yes +else case e in #( + e) gl_cv_pthread_rwlock_rdlock_prefer_writer=no ;; +esac +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac +fi + + LIBS="$save_LIBS" + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 +printf "%s\n" "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } + case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in + *yes) + +printf "%s\n" "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h + + ;; + esac + fi - done + # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include +int +main (void) +{ +#if __FreeBSD__ == 4 +error "No, in FreeBSD 4.0 recursive mutexes actually don't work." +#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ + && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) +error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." +#else +int x = (int)PTHREAD_MUTEX_RECURSIVE; +return !x; +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : +printf "%s\n" "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h - HAVE_LIBPTH=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } +if test ${ac_cv_c_undeclared_builtin_options+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_save_CFLAGS=$CFLAGS + ac_cv_c_undeclared_builtin_options='cannot detect' + for ac_arg in '' -fno-builtin; do + CFLAGS="$ac_save_CFLAGS $ac_arg" + # This test program should *not* compile successfully. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main (void) +{ +(void) strchr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : - gl_have_pth= - gl_save_LIBS="$LIBS" - LIBS="$LIBS $LIBPTH" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) # This test program should compile successfully. + # No library function is consistently available on + # freestanding implementations, so test against a dummy + # declaration. Include always-available headers on the + # off chance that they somehow elicit warnings. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include +#include +#include +#include +extern void ac_decl (int, char *); + int main (void) { -pth_self(); +(void) ac_decl (0, (char *) 0); + (void) ac_decl; + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_compile "$LINENO" +then : + if test x"$ac_arg" = x then : - gl_have_pth=yes + ac_cv_c_undeclared_builtin_options='none needed' +else case e in #( + e) ac_cv_c_undeclared_builtin_options=$ac_arg ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gl_save_LIBS" - if test -n "$gl_have_pth"; then - gl_threads_api=pth - LIBTHREAD="$LIBPTH" - LTLIBTHREAD="$LTLIBPTH" - LIBMULTITHREAD="$LIBTHREAD" - LTLIBMULTITHREAD="$LTLIBTHREAD" + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + done + CFLAGS=$ac_save_CFLAGS + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 +printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } + case $ac_cv_c_undeclared_builtin_options in #( + 'cannot detect') : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "cannot make $CC report undeclared builtins +See 'config.log' for more details" "$LINENO" 5; } ;; #( + 'none needed') : + ac_c_undeclared_builtin_options='' ;; #( + *) : + ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; +esac + -printf "%s\n" "#define USE_PTH_THREADS 1" >>confdefs.h + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" - if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then -printf "%s\n" "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h - LIBTHREAD= - LTLIBTHREAD= - fi - fi - else - CPPFLAGS="$gl_save_CPPFLAGS" - fi - fi - if test -z "$gl_have_pthread"; then - case "$gl_use_threads" in - yes | windows | win32) # The 'win32' is for backward compatibility. - if { case "$host_os" in - mingw*) true;; - *) false;; - esac - }; then - gl_threads_api=windows +# Check whether --with-gnu-ld was given. +if test ${with_gnu_ld+y} +then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else case e in #( + e) with_gnu_ld=no ;; +esac +fi -printf "%s\n" "#define USE_WINDOWS_THREADS 1" >>confdefs.h +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi - fi +if test -n "$LD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 +printf %s "checking for ld... " >&6; } +elif test "$GCC" = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } +elif test "$with_gnu_ld" = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } +fi +if test -n "$LD"; then + # Let the user override the test with a path. + : +else + if test ${acl_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) + acl_cv_path_LD= # Final result of this test + ac_prog=ld # Program to search in $PATH + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + acl_output=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $acl_output in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` + while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do + acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` + done + # Got the pathname. No search in PATH is needed. + acl_cv_path_LD="$acl_output" + ac_prog= + ;; + "") + # If it fails, then pretend we aren't using GCC. + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown ;; esac fi - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 -printf %s "checking for multithread API to use... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 -printf "%s\n" "$gl_threads_api" >&6; } + if test -n "$ac_prog"; then + # Search for $ac_prog in $PATH. + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 conftest.$ac_ext +/* end confdefs.h. */ +#if defined __powerpc64__ || defined __LP64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + # The compiler produces 64-bit code. Add option '-b64' so that the + # linker groks 64-bit object files. + case "$acl_cv_path_LD " in + *" -b64 "*) ;; + *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; + esac + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; + sparc64-*-netbsd*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else case e in #( + e) # The compiler produces 32-bit code. Add option '-m elf32_sparc' + # so that the linker groks 32-bit object files. + case "$acl_cv_path_LD " in + *" -m elf32_sparc "*) ;; + *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; + esac + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; + esac + ;; +esac +fi + LD="$acl_cv_path_LD" +fi +if test -n "$LD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${acl_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +printf %s "checking for shared library run path origin... " >&6; } +if test ${acl_cv_rpath+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +printf "%s\n" "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test ${enable_rpath+y} +then : + enableval=$enable_rpath; : +else case e in #( + e) enable_rpath=yes ;; +esac +fi - if test "$gl_threads_api" = posix; then - # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the - # pthread_rwlock_* functions. - has_rwlock=false - ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include -" -if test "x$ac_cv_type_pthread_rwlock_t" = xyes + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 +printf %s "checking 32-bit host C ABI... " >&6; } +if test ${gl_cv_host_cpu_c_abi_32bit+y} then : - has_rwlock=true - -printf "%s\n" "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$gl_cv_host_cpu_c_abi"; then + case "$gl_cv_host_cpu_c_abi" in + i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) + gl_cv_host_cpu_c_abi_32bit=yes ;; + x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) + gl_cv_host_cpu_c_abi_32bit=no ;; + *) + gl_cv_host_cpu_c_abi_32bit=unknown ;; + esac + else + case "$host_cpu" in -fi + # CPUs that only support a 32-bit ABI. + arc \ + | bfin \ + | cris* \ + | csky \ + | epiphany \ + | ft32 \ + | h8300 \ + | m68k \ + | microblaze | microblazeel \ + | nds32 | nds32le | nds32be \ + | nios2 | nios2eb | nios2el \ + | or1k* \ + | or32 \ + | sh | sh1234 | sh1234elb \ + | tic6x \ + | xtensa* ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; - if $has_rwlock; then + # CPUs that only support a 64-bit ABI. + alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ + | mmix ) + gl_cv_host_cpu_c_abi_32bit=no + ;; + i[34567]86 ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 -printf %s "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } -if test ${gl_cv_pthread_rwlock_rdlock_prefer_writer+y} -then : - printf %s "(cached) " >&6 -else $as_nop - save_LIBS="$LIBS" - LIBS="$LIBS $LIBMULTITHREAD" - if test "$cross_compiling" = yes -then : - gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + x86_64 ) + # On x86_64 systems, the C compiler may be generating code in one of + # these ABIs: + # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. + # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 + # with native Windows (mingw, MSVC). + # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#if (defined __x86_64__ || defined __amd64__ \ + || defined _M_X64 || defined _M_AMD64) \ + && !(defined __ILP32__ || defined _ILP32) + int ok; + #else + error fail + #endif -#include -#include -#include -#include - -#define SUCCEED() exit (0) -#define FAILURE() exit (1) -#define UNEXPECTED(n) (exit (10 + (n))) - -/* The main thread creates the waiting writer and the requesting reader threads - in the default way; this guarantees that they have the same priority. - We can reuse the main thread as first reader thread. */ +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + gl_cv_host_cpu_c_abi_32bit=no +else case e in #( + e) gl_cv_host_cpu_c_abi_32bit=yes ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; -static pthread_rwlock_t lock; -static pthread_t reader1; -static pthread_t writer; -static pthread_t reader2; -static pthread_t timer; -/* Used to pass control from writer to reader2 and from reader2 to timer, - as in a relay race. - Passing control from one running thread to another running thread - is most likely faster than to create the second thread. */ -static pthread_mutex_t baton; + arm* | aarch64 ) + # Assume arm with EABI. + # On arm64 systems, the C compiler may be generating code in one of + # these ABIs: + # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. + # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) + int ok; + #else + error fail + #endif -static void * -timer_func (void *ignored) -{ - /* Step 13 (can be before or after step 12): - The timer thread takes the baton, then waits a moment to make sure - it can tell whether the second reader thread is blocked at step 12. */ - if (pthread_mutex_lock (&baton)) - UNEXPECTED (13); - usleep (100000); - /* By the time we get here, it's clear that the second reader thread is - blocked at step 12. This is the desired behaviour. */ - SUCCEED (); -} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + gl_cv_host_cpu_c_abi_32bit=no +else case e in #( + e) gl_cv_host_cpu_c_abi_32bit=yes ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; -static void * -reader2_func (void *ignored) -{ - int err; + hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) + # On hppa, the C compiler may be generating 32-bit code or 64-bit + # code. In the latter case, it defines _LP64 and __LP64__. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __LP64__ + int ok; + #else + error fail + #endif - /* Step 8 (can be before or after step 7): - The second reader thread takes the baton, then waits a moment to make sure - the writer thread has reached step 7. */ - if (pthread_mutex_lock (&baton)) - UNEXPECTED (8); - usleep (100000); - /* Step 9: The second reader thread requests the lock. */ - err = pthread_rwlock_tryrdlock (&lock); - if (err == 0) - FAILURE (); - else if (err != EBUSY) - UNEXPECTED (9); - /* Step 10: Launch a timer, to test whether the next call blocks. */ - if (pthread_create (&timer, NULL, timer_func, NULL)) - UNEXPECTED (10); - /* Step 11: Release the baton. */ - if (pthread_mutex_unlock (&baton)) - UNEXPECTED (11); - /* Step 12: The second reader thread requests the lock. */ - err = pthread_rwlock_rdlock (&lock); - if (err == 0) - FAILURE (); - else - UNEXPECTED (12); -} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + gl_cv_host_cpu_c_abi_32bit=no +else case e in #( + e) gl_cv_host_cpu_c_abi_32bit=yes ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; -static void * -writer_func (void *ignored) -{ - /* Step 4: Take the baton, so that the second reader thread does not go ahead - too early. */ - if (pthread_mutex_lock (&baton)) - UNEXPECTED (4); - /* Step 5: Create the second reader thread. */ - if (pthread_create (&reader2, NULL, reader2_func, NULL)) - UNEXPECTED (5); - /* Step 6: Release the baton. */ - if (pthread_mutex_unlock (&baton)) - UNEXPECTED (6); - /* Step 7: The writer thread requests the lock. */ - if (pthread_rwlock_wrlock (&lock)) - UNEXPECTED (7); - return NULL; -} + ia64* ) + # On ia64 on HP-UX, the C compiler may be generating 64-bit code or + # 32-bit code. In the latter case, it defines _ILP32. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef _ILP32 + int ok; + #else + error fail + #endif -int -main () -{ - reader1 = pthread_self (); +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + gl_cv_host_cpu_c_abi_32bit=yes +else case e in #( + e) gl_cv_host_cpu_c_abi_32bit=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; - /* Step 1: The main thread initializes the lock and the baton. */ - if (pthread_rwlock_init (&lock, NULL)) - UNEXPECTED (1); - if (pthread_mutex_init (&baton, NULL)) - UNEXPECTED (1); - /* Step 2: The main thread acquires the lock as a reader. */ - if (pthread_rwlock_rdlock (&lock)) - UNEXPECTED (2); - /* Step 3: Create the writer thread. */ - if (pthread_create (&writer, NULL, writer_func, NULL)) - UNEXPECTED (3); - /* Job done. Go to sleep. */ - for (;;) - { - sleep (1); - } -} + mips* ) + # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this + # at 32. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) + int ok; + #else + error fail + #endif _ACEOF -if ac_fn_c_try_run "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - gl_cv_pthread_rwlock_rdlock_prefer_writer=yes -else $as_nop - gl_cv_pthread_rwlock_rdlock_prefer_writer=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + gl_cv_host_cpu_c_abi_32bit=no +else case e in #( + e) gl_cv_host_cpu_c_abi_32bit=yes ;; +esac fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; - LIBS="$save_LIBS" + powerpc* ) + # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. + # No need to distinguish them here; the caller may distinguish + # them based on the OS. + # On powerpc64 systems, the C compiler may still be generating + # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may + # be generating 64-bit code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __powerpc64__ || defined __LP64__ + int ok; + #else + error fail + #endif +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + gl_cv_host_cpu_c_abi_32bit=no +else case e in #( + e) gl_cv_host_cpu_c_abi_32bit=yes ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 -printf "%s\n" "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } - case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in - *yes) - -printf "%s\n" "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; - ;; - esac + rs6000 ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; - fi - # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + riscv32 | riscv64 ) + # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. + # Size of 'long' and 'void *': + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#if defined __LP64__ + int ok; + #else + error fail + #endif - #include -int -main (void) -{ - -#if __FreeBSD__ == 4 -error "No, in FreeBSD 4.0 recursive mutexes actually don't work." -#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ - && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) -error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." -#else -int x = (int)PTHREAD_MUTEX_RECURSIVE; -return !x; -#endif - - ; - return 0; -} _ACEOF if ac_fn_c_try_compile "$LINENO" then : - -printf "%s\n" "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h - + gl_cv_host_cpu_c_abi_32bit=no +else case e in #( + e) gl_cv_host_cpu_c_abi_32bit=yes ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - fi - : + ;; -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 -printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } -if test ${ac_cv_c_undeclared_builtin_options+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_CFLAGS=$CFLAGS - ac_cv_c_undeclared_builtin_options='cannot detect' - for ac_arg in '' -fno-builtin; do - CFLAGS="$ac_save_CFLAGS $ac_arg" - # This test program should *not* compile successfully. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + s390* ) + # On s390x, the C compiler may be generating 64-bit (= s390x) code + # or 31-bit (= s390) code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#if defined __LP64__ || defined __s390x__ + int ok; + #else + error fail + #endif -int -main (void) -{ -(void) strchr; - ; - return 0; -} _ACEOF if ac_fn_c_try_compile "$LINENO" then : + gl_cv_host_cpu_c_abi_32bit=no +else case e in #( + e) gl_cv_host_cpu_c_abi_32bit=yes ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; -else $as_nop - # This test program should compile successfully. - # No library function is consistently available on - # freestanding implementations, so test against a dummy - # declaration. Include always-available headers on the - # off chance that they somehow elicit warnings. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + sparc | sparc64 ) + # UltraSPARCs running Linux have `uname -m` = "sparc64", but the + # C compiler still generates 32-bit code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include -#include -extern void ac_decl (int, char *); - -int -main (void) -{ -(void) ac_decl (0, (char *) 0); - (void) ac_decl; +#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif - ; - return 0; -} _ACEOF if ac_fn_c_try_compile "$LINENO" then : - if test x"$ac_arg" = x -then : - ac_cv_c_undeclared_builtin_options='none needed' -else $as_nop - ac_cv_c_undeclared_builtin_options=$ac_arg -fi - break + gl_cv_host_cpu_c_abi_32bit=no +else case e in #( + e) gl_cv_host_cpu_c_abi_32bit=yes ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; + + *) + gl_cv_host_cpu_c_abi_32bit=unknown + ;; + esac + fi + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - done - CFLAGS=$ac_save_CFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 +printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; } + + HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5 +printf %s "checking for ELF binary format... " >&6; } +if test ${gl_cv_elf+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __ELF__ || (defined __linux__ && defined __EDG__) + Extensible Linking Format + #endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP_TRADITIONAL "Extensible Linking Format" >/dev/null 2>&1 +then : + gl_cv_elf=yes +else case e in #( + e) gl_cv_elf=no ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 -printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } - case $ac_cv_c_undeclared_builtin_options in #( - 'cannot detect') : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot make $CC report undeclared builtins -See \`config.log' for more details" "$LINENO" 5; } ;; #( - 'none needed') : - ac_c_undeclared_builtin_options='' ;; #( - *) : - ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; +rm -rf conftest* + + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5 +printf "%s\n" "$gl_cv_elf" >&6; } + if test $gl_cv_elf = yes; then + # Extract the ELF class of a file (5th byte) in decimal. + # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header + if od -A x < /dev/null >/dev/null 2>/dev/null; then + # Use POSIX od. + func_elfclass () + { + od -A n -t d1 -j 4 -N 1 + } + else + # Use BSD hexdump. + func_elfclass () + { + dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' + echo + } + fi + # Use 'expr', not 'test', to compare the values of func_elfclass, because on + # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, + # not 1 or 2. + case $HOST_CPU_C_ABI_32BIT in + yes) + # 32-bit ABI. + acl_is_expected_elfclass () + { + expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null + } + ;; + no) + # 64-bit ABI. + acl_is_expected_elfclass () + { + expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null + } + ;; + *) + # Unknown. + acl_is_expected_elfclass () + { + : + } + ;; + esac + else + acl_is_expected_elfclass () + { + : + } + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 +printf %s "checking for the common suffixes of directories in the library search path... " >&6; } +if test ${acl_cv_libdirstems+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) acl_libdirstem=lib + acl_libdirstem2= + acl_libdirstem3= + case "$host_os" in + solaris*) + if test $HOST_CPU_C_ABI_32BIT = no; then + acl_libdirstem2=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem3=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ + | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test $HOST_CPU_C_ABI_32BIT != no; then + # 32-bit or unknown ABI. + if test -d /usr/lib32; then + acl_libdirstem2=lib32 + fi + fi + if test $HOST_CPU_C_ABI_32BIT != yes; then + # 64-bit or unknown ABI. + if test -d /usr/lib64; then + acl_libdirstem3=lib64 + fi + fi + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; + */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib32 ) acl_libdirstem2=lib32 ;; + */lib64 ) acl_libdirstem3=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + if test $HOST_CPU_C_ABI_32BIT = yes; then + # 32-bit ABI. + acl_libdirstem3= + fi + if test $HOST_CPU_C_ABI_32BIT = no; then + # 64-bit ABI. + acl_libdirstem2= + fi + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" + acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" + ;; esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 +printf "%s\n" "$acl_cv_libdirstems" >&6; } + acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` + acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` + acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` @@ -10584,6 +11118,8 @@ esac eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" @@ -10605,6 +11141,8 @@ then : eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" @@ -10612,15 +11150,19 @@ then : else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && test ! -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi + additional_libdir2="$withval/$acl_libdirstem2" + additional_libdir3="$withval/$acl_libdirstem3" fi fi fi + if test "X$additional_libdir2" = "X$additional_libdir"; then + additional_libdir2= + fi + if test "X$additional_libdir3" = "X$additional_libdir"; then + additional_libdir3= + fi LIBICONV= LTLIBICONV= INCICONV= @@ -10666,45 +11208,51 @@ fi shrext= fi if test $use_additional = yes; then - dir="$additional_libdir" - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" + for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do + if test "X$found_dir" = "X"; then + eval dir=\$$additional_libdir_variable + if test -n "$dir"; then + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" - found_so="$dir/$f" - break + found_a="$dir/$libname.$acl_libext" fi - done + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi fi fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi + done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do @@ -10721,7 +11269,7 @@ fi -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else @@ -10731,14 +11279,14 @@ fi | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do - if test -f "$dir/$f"; then + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break @@ -10748,7 +11296,7 @@ fi fi fi if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi @@ -10770,7 +11318,8 @@ fi if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= @@ -10849,6 +11398,13 @@ fi fi additional_includedir="$basedir/include" ;; + */$acl_libdirstem3 | */$acl_libdirstem3/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then @@ -10894,12 +11450,14 @@ fi for dep in $dependency_libs; do case "$dep" in -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; @@ -10918,14 +11476,14 @@ fi exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$dependency_libdir" fi fi haveit= @@ -10939,14 +11497,14 @@ fi exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$dependency_libdir" fi fi fi @@ -10978,7 +11536,14 @@ fi fi ;; -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + dep=`echo "X$dep" | sed -e 's/^X-l//'` + if test "X$dep" != Xc \ + || case $host_os in + linux* | gnu* | k*bsd*-gnu) false ;; + *) true ;; + esac; then + names_next_round="$names_next_round $dep" + fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` @@ -11065,8 +11630,8 @@ printf %s "checking for iconv... " >&6; } if test ${am_cv_func_iconv+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11119,7 +11684,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 printf "%s\n" "$am_cv_func_iconv" >&6; } @@ -11129,8 +11695,8 @@ printf %s "checking for working iconv... " >&6; } if test ${am_cv_func_iconv_works+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" @@ -11143,8 +11709,8 @@ then : aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -11158,8 +11724,9 @@ int main (void) { int result = 0; - /* Test against AIX 5.1 bug: Failures are not distinguishable from successful - returns. */ + /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from + successful returns. This is even documented in + */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) @@ -11272,13 +11839,15 @@ then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 printf "%s\n" "$am_cv_func_iconv_works" >&6; } @@ -11308,14 +11877,13 @@ printf "%s\n" "$LIBICONV" >&6; } if test "$am_cv_func_iconv" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 -printf %s "checking for iconv declaration... " >&6; } - if test ${am_cv_proto_iconv+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether iconv is compatible with its POSIX signature" >&5 +printf %s "checking whether iconv is compatible with its POSIX signature... " >&6; } +if test ${gl_cv_iconv_nonconst+y} then : printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -11324,11 +11892,7 @@ extern #ifdef __cplusplus "C" #endif -#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); -#else -size_t iconv(); -#endif int main (void) @@ -11340,24 +11904,27 @@ main (void) _ACEOF if ac_fn_c_try_compile "$LINENO" then : - am_cv_proto_iconv_arg1="" -else $as_nop - am_cv_proto_iconv_arg1="const" + gl_cv_iconv_nonconst=yes +else case e in #( + e) gl_cv_iconv_nonconst=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" + ;; +esac fi - - am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: - $am_cv_proto_iconv" >&5 -printf "%s\n" " - $am_cv_proto_iconv" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_iconv_nonconst" >&5 +printf "%s\n" "$gl_cv_iconv_nonconst" >&6; } + else + gl_cv_iconv_nonconst=yes + fi + if test $gl_cv_iconv_nonconst = yes; then + iconv_arg1="" else - am_cv_proto_iconv_arg1="" + iconv_arg1="const" fi -printf "%s\n" "#define ICONV_CONST $am_cv_proto_iconv_arg1" >>confdefs.h +printf "%s\n" "#define ICONV_CONST $iconv_arg1" >>confdefs.h @@ -11384,23 +11951,11 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - ac_fn_c_check_header_compile "$LINENO" "argz.h" "ac_cv_header_argz_h" "$ac_includes_default" -if test "x$ac_cv_header_argz_h" = xyes -then : - printf "%s\n" "#define HAVE_ARGZ_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" + ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_inttypes_h" = xyes then : printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" -if test "x$ac_cv_header_limits_h" = xyes -then : - printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h - fi ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes @@ -11468,42 +12023,12 @@ if test "x$ac_cv_func_strcasecmp" = xyes then : printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" -if test "x$ac_cv_func_strdup" = xyes -then : - printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul" -if test "x$ac_cv_func_strtoul" = xyes -then : - printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h - fi ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" if test "x$ac_cv_func_tsearch" = xyes then : printf "%s\n" "#define HAVE_TSEARCH 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "argz_count" "ac_cv_func_argz_count" -if test "x$ac_cv_func_argz_count" = xyes -then : - printf "%s\n" "#define HAVE_ARGZ_COUNT 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "argz_stringify" "ac_cv_func_argz_stringify" -if test "x$ac_cv_func_argz_stringify" = xyes -then : - printf "%s\n" "#define HAVE_ARGZ_STRINGIFY 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "argz_next" "ac_cv_func_argz_next" -if test "x$ac_cv_func_argz_next" = xyes -then : - printf "%s\n" "#define HAVE_ARGZ_NEXT 1" >>confdefs.h - fi ac_fn_c_check_func "$LINENO" "__fsetlocking" "ac_cv_func___fsetlocking" if test "x$ac_cv_func___fsetlocking" = xyes @@ -11513,21 +12038,14 @@ then : fi - ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv" -if test "x$ac_cv_func_localeconv" = xyes -then : - printf "%s\n" "#define HAVE_LOCALECONV 1" >>confdefs.h - -fi - - ac_fn_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_feof_unlocked" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "#include @@ -11535,15 +12053,25 @@ ac_fn_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "#i if test "x$ac_cv_have_decl_fgets_unlocked" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl" >>confdefs.h - for ac_prog in bison + ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv" +if test "x$ac_cv_func_localeconv" = xyes +then : + printf "%s\n" "#define HAVE_LOCALECONV 1" >>confdefs.h + +fi + + + + for ac_prog in bison do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -11552,8 +12080,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_INTLBISON+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$INTLBISON"; then +else case e in #( + e) if test -n "$INTLBISON"; then ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -11575,7 +12103,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi INTLBISON=$ac_cv_prog_INTLBISON if test -n "$INTLBISON"; then @@ -11593,15 +12122,23 @@ done if test -z "$INTLBISON"; then ac_verc_fail=yes else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5 -printf %s "checking version of bison... " >&6; } + cat >conftest.y <<_ACEOF +%require "3.0" +%% +exp: +_ACEOF + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bison 3.0 or newer" >&5 +printf %s "checking for bison 3.0 or newer... " >&6; } ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` - case $ac_prog_version in - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 2.[7-9]* | [3-9].*) - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; - esac + : ${ac_prog_version:='v. ?.??'} + if $INTLBISON conftest.y -o conftest.c 2>/dev/null; then + ac_prog_version="$ac_prog_version, ok" + ac_verc_fail=no + else + ac_prog_version="$ac_prog_version, bad" + ac_verc_fail=yes + fi + rm -f conftest.y conftest.c { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 printf "%s\n" "$ac_prog_version" >&6; } fi @@ -11611,13 +12148,16 @@ printf "%s\n" "$ac_prog_version" >&6; } + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 printf %s "checking for long long int... " >&6; } if test ${ac_cv_type_long_long_int+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_type_long_long_int=yes +else case e in #( + e) ac_cv_type_long_long_int=yes case $ac_prog_cc_stdc in no | c89) ;; *) @@ -11626,12 +12166,12 @@ else $as_nop if test "$cross_compiling" = yes then : : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX - # define HALF \ + # define HALF \\ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif @@ -11656,15 +12196,18 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : -else $as_nop - ac_cv_type_long_long_int=no +else case e in #( + e) ac_cv_type_long_long_int=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi fi;; - esac + esac ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 printf "%s\n" "$ac_cv_type_long_long_int" >&6; } @@ -11680,8 +12223,8 @@ printf %s "checking for wchar_t... " >&6; } if test ${gt_cv_c_wchar_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; @@ -11696,10 +12239,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_wchar_t=yes -else $as_nop - gt_cv_c_wchar_t=no +else case e in #( + e) gt_cv_c_wchar_t=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 printf "%s\n" "$gt_cv_c_wchar_t" >&6; } @@ -11715,17 +12260,9 @@ printf %s "checking for wint_t... " >&6; } if test ${gt_cv_c_wint_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be included - before . */ -#include -#include -#include #include wint_t foo = (wchar_t)'\0'; int @@ -11739,10 +12276,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_wint_t=yes -else $as_nop - gt_cv_c_wint_t=no +else case e in #( + e) gt_cv_c_wint_t=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 printf "%s\n" "$gt_cv_c_wint_t" >&6; } @@ -11751,24 +12290,14 @@ printf "%s\n" "$gt_cv_c_wint_t" >&6; } printf "%s\n" "#define HAVE_WINT_T 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5 -printf %s "checking whether wint_t is too small... " >&6; } -if test ${gl_cv_type_wint_t_too_small+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wint_t is large enough" >&5 +printf %s "checking whether wint_t is large enough... " >&6; } +if test ${gl_cv_type_wint_t_large_enough+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include -# include -# include -#endif #include int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; @@ -11782,21 +12311,23 @@ main (void) _ACEOF if ac_fn_c_try_compile "$LINENO" then : - gl_cv_type_wint_t_too_small=no -else $as_nop - gl_cv_type_wint_t_too_small=yes + gl_cv_type_wint_t_large_enough=yes +else case e in #( + e) gl_cv_type_wint_t_large_enough=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5 -printf "%s\n" "$gl_cv_type_wint_t_too_small" >&6; } - if test $gl_cv_type_wint_t_too_small = yes; then - GNULIB_OVERRIDES_WINT_T=1 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_large_enough" >&5 +printf "%s\n" "$gl_cv_type_wint_t_large_enough" >&6; } + if test $gl_cv_type_wint_t_large_enough = no; then + GNULIBHEADERS_OVERRIDE_WINT_T=1 else - GNULIB_OVERRIDES_WINT_T=0 + GNULIBHEADERS_OVERRIDE_WINT_T=0 fi else - GNULIB_OVERRIDES_WINT_T=0 + GNULIBHEADERS_OVERRIDE_WINT_T=0 fi @@ -11808,8 +12339,8 @@ printf %s "checking for intmax_t... " >&6; } if test ${gt_cv_c_intmax_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -11833,10 +12364,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_intmax_t=yes -else $as_nop - gt_cv_c_intmax_t=no +else case e in #( + e) gt_cv_c_intmax_t=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 printf "%s\n" "$gt_cv_c_intmax_t" >&6; } @@ -11853,8 +12386,8 @@ printf %s "checking whether printf() supports POSIX/XSI format strings... " >&6; if test ${gt_cv_func_printf_posix+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) if test "$cross_compiling" = yes then : @@ -11867,17 +12400,18 @@ then : _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "notposix" >/dev/null 2>&1 + $EGREP_TRADITIONAL "notposix" >/dev/null 2>&1 then : gt_cv_func_printf_posix="guessing no" -else $as_nop - gt_cv_func_printf_posix="guessing yes" +else case e in #( + e) gt_cv_func_printf_posix="guessing yes" ;; +esac fi rm -rf conftest* -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -11895,14 +12429,17 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : gt_cv_func_printf_posix=yes -else $as_nop - gt_cv_func_printf_posix=no +else case e in #( + e) gt_cv_func_printf_posix=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5 printf "%s\n" "$gt_cv_func_printf_posix" >&6; } @@ -11915,45 +12452,6 @@ printf "%s\n" "#define HAVE_POSIX_PRINTF 1" >>confdefs.h esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5 -printf %s "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; } -if test ${ac_cv_gnu_library_2_1+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) - Lucky GNU user - #endif -#endif -#ifdef __UCLIBC__ - Lucky user -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Lucky" >/dev/null 2>&1 -then : - ac_cv_gnu_library_2_1=yes -else $as_nop - ac_cv_gnu_library_2_1=no -fi -rm -rf conftest* - - - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 -printf "%s\n" "$ac_cv_gnu_library_2_1" >&6; } - - GLIBC21="$ac_cv_gnu_library_2_1" - - - ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes then : @@ -11966,9 +12464,9 @@ printf %s "checking for SIZE_MAX... " >&6; } if test ${gl_cv_size_max+y} then : printf %s "(cached) " >&6 -else $as_nop - - gl_cv_size_max= +else case e in #( + e) + gl_cv_size_max=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11982,26 +12480,28 @@ Found it _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Found it" >/dev/null 2>&1 + $EGREP_TRADITIONAL "Found it" >/dev/null 2>&1 then : gl_cv_size_max=yes fi rm -rf conftest* - if test -z "$gl_cv_size_max"; then + if test $gl_cv_size_max != yes; then if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include #include " then : -else $as_nop - size_t_bits_minus_1= +else case e in #( + e) size_t_bits_minus_1= ;; +esac fi if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include " then : -else $as_nop - fits_in_uint= +else case e in #( + e) fits_in_uint= ;; +esac fi if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then @@ -12035,7 +12535,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext gl_cv_size_max='((size_t)~(size_t)0)' fi fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 printf "%s\n" "$gl_cv_size_max" >&6; } @@ -12067,8 +12568,8 @@ printf %s "checking for working fcntl.h... " >&6; } if test ${gl_cv_header_working_fcntl_h+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess 'no' on native Windows. @@ -12076,8 +12577,8 @@ then : *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -12089,6 +12590,7 @@ else $as_nop # defined sleep(n) _sleep ((n) * 1000) #endif #include + GL_MDA_DEFINES #ifndef O_NOATIME #define O_NOATIME 0 #endif @@ -12175,19 +12677,22 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_header_working_fcntl_h=yes -else $as_nop - case $? in #( +else case e in #( + e) case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; - esac + esac ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 printf "%s\n" "$gl_cv_header_working_fcntl_h" >&6; } @@ -12209,6 +12714,17 @@ printf "%s\n" "#define HAVE_WORKING_O_NOFOLLOW $ac_val" >>confdefs.h + HAVE_NEWLOCALE=1; + HAVE_DUPLOCALE=1; + HAVE_FREELOCALE=1; + REPLACE_LOCALECONV=0; + REPLACE_SETLOCALE=0; + REPLACE_NEWLOCALE=0; + REPLACE_DUPLOCALE=0; + REPLACE_FREELOCALE=0; + REPLACE_STRUCT_LCONV=0; + LOCALENAME_ENHANCE_LOCALE_FUNCS=0; + @@ -12220,30 +12736,33 @@ printf "%s\n" "#define HAVE_WORKING_O_NOFOLLOW $ac_val" >>confdefs.h - if test $ac_cv_func_uselocale = yes; then + + + if test $ac_cv_func_uselocale = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether uselocale works" >&5 printf %s "checking whether uselocale works... " >&6; } if test ${gt_cv_func_uselocale_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : - # Guess no on AIX, yes otherwise. + # Guess no on AIX and z/OS, yes otherwise. case "$host_os" in - aix*) gt_cv_func_uselocale_works="guessing no" ;; - *) gt_cv_func_uselocale_works="guessing yes" ;; + aix* | openedition*) gt_cv_func_uselocale_works="guessing no" ;; + *) gt_cv_func_uselocale_works="guessing yes" ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_XLOCALE_H # include #endif +locale_t loc1; int main () { uselocale (NULL); @@ -12254,14 +12773,17 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : gt_cv_func_uselocale_works=yes -else $as_nop - gt_cv_func_uselocale_works=no +else case e in #( + e) gt_cv_func_uselocale_works=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_uselocale_works" >&5 printf "%s\n" "$gt_cv_func_uselocale_works" >&6; } @@ -12270,9 +12792,13 @@ printf "%s\n" "$gt_cv_func_uselocale_works" >&6; } fi case "$gt_cv_func_uselocale_works" in *yes) + gt_working_uselocale=yes printf "%s\n" "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h + ;; + *) + gt_working_uselocale=no ;; esac @@ -12285,16 +12811,16 @@ printf %s "checking for fake locale system (OpenBSD)... " >&6; } if test ${gt_cv_locale_fake+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in openbsd*) gt_cv_locale_fake="guessing yes" ;; *) gt_cv_locale_fake="guessing no" ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -12314,14 +12840,17 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : gt_cv_locale_fake=yes -else $as_nop - gt_cv_locale_fake=no +else case e in #( + e) gt_cv_locale_fake=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fake" >&5 printf "%s\n" "$gt_cv_locale_fake" >&6; } @@ -12330,9 +12859,13 @@ printf "%s\n" "$gt_cv_locale_fake" >&6; } esac case "$gt_cv_locale_fake" in *yes) + gt_fake_locales=yes printf "%s\n" "#define HAVE_FAKE_LOCALES 1" >>confdefs.h + ;; + *) + gt_fake_locales=no ;; esac @@ -12343,8 +12876,8 @@ printf %s "checking for Solaris 11.4 locale system... " >&6; } if test ${gt_cv_locale_solaris114+y} then : printf %s "(cached) " >&6 -else $as_nop - case "$host_os" in +else case e in #( + e) case "$host_os" in solaris*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12364,14 +12897,16 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_locale_solaris114=yes -else $as_nop - gt_cv_locale_solaris114=no +else case e in #( + e) gt_cv_locale_solaris114=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) gt_cv_locale_solaris114=no ;; esac - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_solaris114" >&5 printf "%s\n" "$gt_cv_locale_solaris114" >&6; } @@ -12396,12 +12931,33 @@ fi ;; esac - gt_nameless_locales=no - if false; then - gt_nameless_locales=yes + gt_nameless_locales=no + case "$host_os" in + aix*) + gt_nameless_locales=yes printf "%s\n" "#define HAVE_NAMELESS_LOCALES 1" >>confdefs.h + ;; + esac + + if test $gt_working_uselocale = yes && test $gt_fake_locales = no; then + gt_good_uselocale=yes + +printf "%s\n" "#define HAVE_GOOD_USELOCALE 1" >>confdefs.h + + else + gt_good_uselocale=no + fi + + if test $gt_good_uselocale = yes && test $gt_nameless_locales = yes; then + gt_localename_enhances_locale_funcs=yes + LOCALENAME_ENHANCE_LOCALE_FUNCS=1 + +printf "%s\n" "#define LOCALENAME_ENHANCE_LOCALE_FUNCS 1" >>confdefs.h + + else + gt_localename_enhances_locale_funcs=no fi @@ -12410,80 +12966,46 @@ printf %s "checking for CFPreferencesCopyAppValue... " >&6; } if test ${gt_cv_func_CFPreferencesCopyAppValue+y} then : printf %s "(cached) " >&6 -else $as_nop - gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -CFPreferencesCopyAppValue(NULL, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - gt_cv_func_CFPreferencesCopyAppValue=yes -else $as_nop - gt_cv_func_CFPreferencesCopyAppValue=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 -printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } - if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then - -printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h - - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 -printf %s "checking for CFLocaleCopyCurrent... " >&6; } -if test ${gt_cv_func_CFLocaleCopyCurrent+y} -then : - printf %s "(cached) " >&6 -else $as_nop - gt_save_LIBS="$LIBS" +else case e in #( + e) gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include int main (void) { -CFLocaleCopyCurrent(); +CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : - gt_cv_func_CFLocaleCopyCurrent=yes -else $as_nop - gt_cv_func_CFLocaleCopyCurrent=no + gt_cv_func_CFPreferencesCopyAppValue=yes +else case e in #( + e) gt_cv_func_CFPreferencesCopyAppValue=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" + LIBS="$gt_save_LIBS" ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 -printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; } - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then -printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h +printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; } if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y} then : printf %s "(cached) " >&6 -else $as_nop - gt_save_LIBS="$LIBS" +else case e in #( + e) gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12499,12 +13021,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFLocaleCopyPreferredLanguages=yes -else $as_nop - gt_cv_func_CFLocaleCopyPreferredLanguages=no +else case e in #( + e) gt_cv_func_CFLocaleCopyPreferredLanguages=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" + LIBS="$gt_save_LIBS" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } @@ -12515,7 +13039,6 @@ printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ - || test $gt_cv_func_CFLocaleCopyCurrent = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi @@ -12527,26 +13050,31 @@ printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexible array members" >&5 -printf %s "checking for flexible array members... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexible array member" >&5 +printf %s "checking for flexible array member... " >&6; } if test ${ac_cv_c_flexmember+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include - #include - #include - struct s { int n; double d[]; }; + #include + #include + struct m { struct m *next, **list; char name[]; }; + struct s { struct s *p; struct m *m; int n; double d[]; }; int main (void) { int m = getchar (); - struct s *p = (struct s *) malloc (offsetof (struct s, d) - + m * sizeof (double)); - p->d[0] = 0.0; - return p->d != (double *) NULL; + size_t nbytes = offsetof (struct s, d) + m * sizeof (double); + nbytes += sizeof (struct s) - 1; + nbytes -= nbytes % sizeof (struct s); + struct s *p = malloc (nbytes); + p->p = p; + p->m = NULL; + p->d[0] = 0.0; + return p->d != (double *) NULL; ; return 0; } @@ -12554,10 +13082,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_flexmember=yes -else $as_nop - ac_cv_c_flexmember=no +else case e in #( + e) ac_cv_c_flexmember=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 printf "%s\n" "$ac_cv_c_flexmember" >&6; } @@ -12577,6 +13107,9 @@ printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h + + + if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -12585,8 +13118,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AR"; then +else case e in #( + e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -12608,7 +13141,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then @@ -12630,8 +13164,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_AR"; then +else case e in #( + e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -12653,7 +13187,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then @@ -12697,11 +13232,12 @@ fi if test "x$ac_cv_type_ptrdiff_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define ptrdiff_t long" >>confdefs.h - + ;; +esac fi ac_fn_c_check_header_compile "$LINENO" "features.h" "ac_cv_header_features_h" "$ac_includes_default" @@ -12735,10 +13271,10 @@ then : printf "%s\n" "#define HAVE_ASPRINTF 1" >>confdefs.h fi -ac_fn_c_check_func "$LINENO" "fwprintf" "ac_cv_func_fwprintf" -if test "x$ac_cv_func_fwprintf" = xyes +ac_fn_c_check_func "$LINENO" "wprintf" "ac_cv_func_wprintf" +if test "x$ac_cv_func_wprintf" = xyes then : - printf "%s\n" "#define HAVE_FWPRINTF 1" >>confdefs.h + printf "%s\n" "#define HAVE_WPRINTF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" @@ -12758,12 +13294,6 @@ if test "x$ac_cv_func_setenv" = xyes then : printf "%s\n" "#define HAVE_SETENV 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" -if test "x$ac_cv_func_setlocale" = xyes -then : - printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h - fi ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" if test "x$ac_cv_func_snprintf" = xyes @@ -12814,8 +13344,9 @@ fi if test "x$ac_cv_have_decl__snprintf" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL__SNPRINTF $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "_snwprintf" "ac_cv_have_decl__snwprintf" "#include @@ -12823,8 +13354,9 @@ ac_fn_check_decl "$LINENO" "_snwprintf" "ac_cv_have_decl__snwprintf" "#include < if test "x$ac_cv_have_decl__snwprintf" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL__SNWPRINTF $ac_have_decl" >>confdefs.h @@ -12834,15 +13366,16 @@ printf "%s\n" "#define HAVE_DECL__SNWPRINTF $ac_have_decl" >>confdefs.h if test "x$ac_cv_have_decl_getc_unlocked" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl" >>confdefs.h case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; - *) HAVE_POSIX_PRINTF=0 ;; + *) HAVE_POSIX_PRINTF=0 ;; esac if test "$ac_cv_func_asprintf" = yes; then @@ -12876,8 +13409,8 @@ printf %s "checking for nl_langinfo and CODESET... " >&6; } if test ${am_cv_langinfo_codeset+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -12891,12 +13424,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : am_cv_langinfo_codeset=yes -else $as_nop - am_cv_langinfo_codeset=no +else case e in #( + e) am_cv_langinfo_codeset=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 printf "%s\n" "$am_cv_langinfo_codeset" >&6; } @@ -12912,8 +13447,8 @@ printf %s "checking for LC_MESSAGES... " >&6; } if test ${gt_cv_val_LC_MESSAGES+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -12927,11 +13462,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_val_LC_MESSAGES=yes -else $as_nop - gt_cv_val_LC_MESSAGES=no +else case e in #( + e) gt_cv_val_LC_MESSAGES=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5 printf "%s\n" "$gt_cv_val_LC_MESSAGES" >&6; } @@ -12942,10 +13479,10 @@ printf "%s\n" "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi - if test $gt_nameless_locales = yes; then - HAVE_NAMELESS_LOCALES=1 + if test $gt_localename_enhances_locale_funcs = yes; then + ENHANCE_LOCALE_FUNCS=1 else - HAVE_NAMELESS_LOCALES=0 + ENHANCE_LOCALE_FUNCS=0 fi @@ -12975,8 +13512,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$WINDRES"; then +else case e in #( + e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -12998,7 +13535,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then @@ -13020,8 +13558,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_WINDRES"; then +else case e in #( + e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -13043,7 +13581,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then @@ -13100,8 +13639,8 @@ printf %s "checking for CFPreferencesCopyAppValue... " >&6; } if test ${gt_cv_func_CFPreferencesCopyAppValue+y} then : printf %s "(cached) " >&6 -else $as_nop - gt_save_LIBS="$LIBS" +else case e in #( + e) gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13117,12 +13656,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFPreferencesCopyAppValue=yes -else $as_nop - gt_cv_func_CFPreferencesCopyAppValue=no +else case e in #( + e) gt_cv_func_CFPreferencesCopyAppValue=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" + LIBS="$gt_save_LIBS" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } @@ -13131,49 +13672,13 @@ printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 -printf %s "checking for CFLocaleCopyCurrent... " >&6; } -if test ${gt_cv_func_CFLocaleCopyCurrent+y} -then : - printf %s "(cached) " >&6 -else $as_nop - gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -CFLocaleCopyCurrent(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - gt_cv_func_CFLocaleCopyCurrent=yes -else $as_nop - gt_cv_func_CFLocaleCopyCurrent=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 -printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; } - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then - -printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h - - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; } if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y} then : printf %s "(cached) " >&6 -else $as_nop - gt_save_LIBS="$LIBS" +else case e in #( + e) gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13189,12 +13694,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFLocaleCopyPreferredLanguages=yes -else $as_nop - gt_cv_func_CFLocaleCopyPreferredLanguages=no +else case e in #( + e) gt_cv_func_CFLocaleCopyPreferredLanguages=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" + LIBS="$gt_save_LIBS" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } @@ -13205,7 +13712,6 @@ printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ - || test $gt_cv_func_CFLocaleCopyCurrent = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi @@ -13240,8 +13746,9 @@ printf %s "checking whether included gettext is requested... " >&6; } if test ${with_included_gettext+y} then : withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval -else $as_nop - nls_cv_force_use_gnu_gettext=no +else case e in #( + e) nls_cv_force_use_gnu_gettext=no ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5 @@ -13272,8 +13779,8 @@ printf %s "checking for GNU gettext in libc... " >&6; } if eval test \${$gt_func_gnugettext_libc+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -13300,11 +13807,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$gt_func_gnugettext_libc=yes" -else $as_nop - eval "$gt_func_gnugettext_libc=no" +else case e in #( + e) eval "$gt_func_gnugettext_libc=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi eval ac_res=\$$gt_func_gnugettext_libc { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -13327,6 +13836,8 @@ printf "%s\n" "$ac_res" >&6; } eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" @@ -13348,6 +13859,8 @@ then : eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" @@ -13355,15 +13868,19 @@ then : else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && test ! -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi + additional_libdir2="$withval/$acl_libdirstem2" + additional_libdir3="$withval/$acl_libdirstem3" fi fi fi + if test "X$additional_libdir2" = "X$additional_libdir"; then + additional_libdir2= + fi + if test "X$additional_libdir3" = "X$additional_libdir"; then + additional_libdir3= + fi LIBINTL= LTLIBINTL= INCINTL= @@ -13409,45 +13926,51 @@ fi shrext= fi if test $use_additional = yes; then - dir="$additional_libdir" - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" + for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do + if test "X$found_dir" = "X"; then + eval dir=\$$additional_libdir_variable + if test -n "$dir"; then + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" - found_so="$dir/$f" - break + found_a="$dir/$libname.$acl_libext" fi - done + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi fi fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi + done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do @@ -13464,7 +13987,7 @@ fi -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else @@ -13474,14 +13997,14 @@ fi | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do - if test -f "$dir/$f"; then + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break @@ -13491,7 +14014,7 @@ fi fi fi if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi @@ -13513,7 +14036,8 @@ fi if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= @@ -13592,6 +14116,13 @@ fi fi additional_includedir="$basedir/include" ;; + */$acl_libdirstem3 | */$acl_libdirstem3/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then @@ -13637,12 +14168,14 @@ fi for dep in $dependency_libs; do case "$dep" in -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; @@ -13661,14 +14194,14 @@ fi exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$dependency_libdir" fi fi haveit= @@ -13682,14 +14215,14 @@ fi exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$dependency_libdir" fi fi fi @@ -13721,7 +14254,14 @@ fi fi ;; -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + dep=`echo "X$dep" | sed -e 's/^X-l//'` + if test "X$dep" != Xc \ + || case $host_os in + linux* | gnu* | k*bsd*-gnu) false ;; + *) true ;; + esac; then + names_next_round="$names_next_round $dep" + fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` @@ -13777,8 +14317,8 @@ printf %s "checking for GNU gettext in libintl... " >&6; } if eval test \${$gt_func_gnugettext_libintl+y} then : printf %s "(cached) " >&6 -else $as_nop - gt_save_CPPFLAGS="$CPPFLAGS" +else case e in #( + e) gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" @@ -13813,8 +14353,9 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$gt_func_gnugettext_libintl=yes" -else $as_nop - eval "$gt_func_gnugettext_libintl=no" +else case e in #( + e) eval "$gt_func_gnugettext_libintl=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -13859,7 +14400,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS" + LIBS="$gt_save_LIBS" ;; +esac fi eval ac_res=\$$gt_func_gnugettext_libintl { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -13886,8 +14428,10 @@ printf "%s\n" "$ac_res" >&6; } if test "$nls_cv_use_gnu_gettext" = "yes"; then BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes +# LIBINTL="m4_if([lib/intl],[],\${top_builddir}/intl,[lib/intl])/libintl.la $LIBICONV $LIBTHREAD" + # we don't build with libtool LIBINTL="lib/intl/libintl.a $LIBICONV $LIBTHREAD" - LTLIBINTL="lib/intl/libintl.a $LTLIBICONV $LTLIBTHREAD" + LTLIBINTL="lib/intl/libintl.la $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi @@ -13981,33 +14525,10 @@ printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h fi - if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then - BUILD_INCLUDED_LIBINTL=yes - fi - - - - - - nls_cv_header_intl= - nls_cv_header_libgt= - - DATADIRNAME=share - - - INSTOBJEXT=.mo - - - GENCAT=gencat - + BUILD_INCLUDED_LIBINTL=yes - INTLOBJS= - if test "$USE_INCLUDED_LIBINTL" = yes; then - INTLOBJS="\$(GETTOBJS)" - fi - INTL_LIBTOOL_SUFFIX_PREFIX= @@ -14021,14 +14542,14 @@ printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` + as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 printf %s "checking for $ac_hdr that defines DIR... " >&6; } if eval test \${$as_ac_Header+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> @@ -14045,10 +14566,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_ac_Header=yes" -else $as_nop - eval "$as_ac_Header=no" +else case e in #( + e) eval "$as_ac_Header=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$as_ac_Header { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -14056,7 +14579,7 @@ printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_hdr" | sed "$as_sed_cpp"` 1 _ACEOF ac_header_dirent=$ac_hdr; break @@ -14070,15 +14593,21 @@ printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char opendir (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (void); int main (void) { @@ -14109,11 +14638,13 @@ done if test ${ac_cv_search_opendir+y} then : -else $as_nop - ac_cv_search_opendir=no +else case e in #( + e) ac_cv_search_opendir=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } @@ -14130,15 +14661,21 @@ printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char opendir (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (void); int main (void) { @@ -14169,11 +14706,13 @@ done if test ${ac_cv_search_opendir+y} then : -else $as_nop - ac_cv_search_opendir=no +else case e in #( + e) ac_cv_search_opendir=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } @@ -14228,12 +14767,6 @@ if test "x$ac_cv_header_stdlib_h" = xyes then : printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default" -if test "x$ac_cv_header_stdarg_h" = xyes -then : - printf "%s\n" "#define HAVE_STDARG_H 1" >>confdefs.h - fi ac_fn_c_check_header_compile "$LINENO" "varargs.h" "ac_cv_header_varargs_h" "$ac_includes_default" if test "x$ac_cv_header_varargs_h" = xyes @@ -14288,12 +14821,6 @@ if test "x$ac_cv_header_dlfcn_h" = xyes then : printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h -fi -ac_fn_c_check_header_compile "$LINENO" "stdbool.h" "ac_cv_header_stdbool_h" "$ac_includes_default" -if test "x$ac_cv_header_stdbool_h" = xyes -then : - printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h - fi ac_fn_c_check_header_compile "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default" if test "x$ac_cv_header_stddef_h" = xyes @@ -14330,6 +14857,12 @@ if test "x$ac_cv_header_strings_h" = xyes then : printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "stdckdint.h" "ac_cv_header_stdckdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdckdint_h" = xyes +then : + printf "%s\n" "#define HAVE_STDCKDINT_H 1" >>confdefs.h + fi ac_fn_c_check_header_compile "$LINENO" "regex.h" "ac_cv_header_regex_h" "$ac_includes_default" if test "x$ac_cv_header_regex_h" = xyes @@ -14481,8 +15014,8 @@ printf %s "checking for working alloca.h... " >&6; } if test ${ac_cv_working_alloca_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -14497,11 +15030,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_working_alloca_h=yes -else $as_nop - ac_cv_working_alloca_h=no +else case e in #( + e) ac_cv_working_alloca_h=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 printf "%s\n" "$ac_cv_working_alloca_h" >&6; } @@ -14516,10 +15051,10 @@ printf %s "checking for alloca... " >&6; } if test ${ac_cv_func_alloca_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test $ac_cv_working_alloca_h = yes; then - ac_cv_func_alloca_works=yes -else +else case e in #( + e) ac_cv_func_alloca_works=$ac_cv_working_alloca_h +if test "$ac_cv_func_alloca_works" != yes +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -14550,15 +15085,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_func_alloca_works=yes -else $as_nop - ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 printf "%s\n" "$ac_cv_func_alloca_works" >&6; } -fi if test $ac_cv_func_alloca_works = yes; then @@ -14580,12 +15114,12 @@ printf %s "checking stack direction for C alloca... " >&6; } if test ${ac_cv_c_stack_direction+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : ac_cv_c_stack_direction=0 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -14608,13 +15142,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_stack_direction=1 -else $as_nop - ac_cv_c_stack_direction=-1 +else case e in #( + e) ac_cv_c_stack_direction=-1 ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 printf "%s\n" "$ac_cv_c_stack_direction" >&6; } @@ -14623,36 +15160,26 @@ printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 -printf %s "checking for uid_t in sys/types.h... " >&6; } -if test ${ac_cv_type_uid_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1 +ac_fn_c_check_type "$LINENO" "uid_t" "ac_cv_type_uid_t" "$ac_includes_default" +if test "x$ac_cv_type_uid_t" = xyes then : - ac_cv_type_uid_t=yes -else $as_nop - ac_cv_type_uid_t=no -fi -rm -rf conftest* - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 -printf "%s\n" "$ac_cv_type_uid_t" >&6; } -if test $ac_cv_type_uid_t = no; then +else case e in #( + e) printf "%s\n" "#define uid_t int" >>confdefs.h + ;; +esac +fi +ac_fn_c_check_type "$LINENO" "gid_t" "ac_cv_type_gid_t" "$ac_includes_default" +if test "x$ac_cv_type_gid_t" = xyes +then : +else case e in #( + e) printf "%s\n" "#define gid_t int" >>confdefs.h - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working chown" >&5 @@ -14660,8 +15187,8 @@ printf %s "checking for working chown... " >&6; } if test ${ac_cv_func_chown_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. @@ -14669,8 +15196,8 @@ then : # If we don't know, assume the worst. *) ac_cv_func_chown_works=no ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include @@ -14698,15 +15225,18 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_chown_works=yes -else $as_nop - ac_cv_func_chown_works=no +else case e in #( + e) ac_cv_func_chown_works=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f conftest.chown - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5 printf "%s\n" "$ac_cv_func_chown_works" >&6; } @@ -14721,8 +15251,8 @@ printf %s "checking whether getpgrp requires zero arguments... " >&6; } if test ${ac_cv_func_getpgrp_void+y} then : printf %s "(cached) " >&6 -else $as_nop - # Use it with a single arg. +else case e in #( + e) # Use it with a single arg. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -14737,11 +15267,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_func_getpgrp_void=no -else $as_nop - ac_cv_func_getpgrp_void=yes +else case e in #( + e) ac_cv_func_getpgrp_void=yes ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getpgrp_void" >&5 printf "%s\n" "$ac_cv_func_getpgrp_void" >&6; } @@ -14769,8 +15301,8 @@ printf %s "checking for working strcoll... " >&6; } if test ${ac_cv_func_strcoll_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. @@ -14778,8 +15310,8 @@ then : # If we don't know, assume the worst. *) ac_cv_func_strcoll_works=no ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -14795,13 +15327,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_strcoll_works=yes -else $as_nop - ac_cv_func_strcoll_works=no +else case e in #( + e) ac_cv_func_strcoll_works=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strcoll_works" >&5 printf "%s\n" "$ac_cv_func_strcoll_works" >&6; } @@ -14832,7 +15367,7 @@ printf %s "checking for declaration of vprintf in stdio.h... " >&6; } _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "[int[ ]*vprintf[^a-zA-Z0-9]]" >/dev/null 2>&1 + $EGREP_TRADITIONAL "[int[ ]*vprintf[^a-zA-Z0-9]]" >/dev/null 2>&1 then : ac_cv_func_vprintf=yes fi @@ -14875,9 +15410,10 @@ if test "x$ac_cv_func_mkfifo" = xyes then : printf "%s\n" "#define HAVE_MKFIFO 1" >>confdefs.h -else $as_nop - printf "%s\n" "#define MKFIFO_MISSING 1" >>confdefs.h - +else case e in #( + e) printf "%s\n" "#define MKFIFO_MISSING 1" >>confdefs.h + ;; +esac fi @@ -14976,6 +15512,12 @@ if test "x$ac_cv_func_lstat" = xyes then : printf "%s\n" "#define HAVE_LSTAT 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "nanosleep" "ac_cv_func_nanosleep" +if test "x$ac_cv_func_nanosleep" = xyes +then : + printf "%s\n" "#define HAVE_NANOSLEEP 1" >>confdefs.h + fi ac_fn_c_check_func "$LINENO" "pselect" "ac_cv_func_pselect" if test "x$ac_cv_func_pselect" = xyes @@ -15037,13 +15579,14 @@ if test "x$ac_cv_func_rename" = xyes then : printf "%s\n" "#define HAVE_RENAME 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" rename.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS rename.$ac_objext" ;; esac - + ;; +esac fi @@ -15058,6 +15601,12 @@ if test "x$ac_cv_func_bzero" = xyes then : printf "%s\n" "#define HAVE_BZERO 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" +if test "x$ac_cv_func_clock_gettime" = xyes +then : + printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h + fi ac_fn_c_check_func "$LINENO" "confstr" "ac_cv_func_confstr" if test "x$ac_cv_func_confstr" = xyes @@ -15324,32 +15873,61 @@ then : fi +ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat" +if test "x$ac_cv_func_strlcat" = xyes +then : + printf "%s\n" "#define HAVE_STRLCAT 1" >>confdefs.h + +fi + + +ac_fn_c_check_func "$LINENO" "memfd_create" "ac_cv_func_memfd_create" +if test "x$ac_cv_func_memfd_create" = xyes +then : + printf "%s\n" "#define HAVE_MEMFD_CREATE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "shm_open" "ac_cv_func_shm_open" +if test "x$ac_cv_func_shm_open" = xyes +then : + printf "%s\n" "#define HAVE_SHM_OPEN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "shm_mkstemp" "ac_cv_func_shm_mkstemp" +if test "x$ac_cv_func_shm_mkstemp" = xyes +then : + printf "%s\n" "#define HAVE_SHM_MKSTEMP 1" >>confdefs.h + +fi + ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" if test "x$ac_cv_func_getcwd" = xyes then : printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" getcwd.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getcwd.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes then : printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" memset.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memset.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" @@ -15357,91 +15935,98 @@ if test "x$ac_cv_func_strcasecmp" = xyes then : printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strcasecmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strcasecmp.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" if test "x$ac_cv_func_strcasestr" = xyes then : printf "%s\n" "#define HAVE_STRCASESTR 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strcasestr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strcasestr.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes then : printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strerror.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strerror.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = xyes then : printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strftime.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strftime.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen" if test "x$ac_cv_func_strnlen" = xyes then : printf "%s\n" "#define HAVE_STRNLEN 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strnlen.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strnlen.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strpbrk" "ac_cv_func_strpbrk" if test "x$ac_cv_func_strpbrk" = xyes then : printf "%s\n" "#define HAVE_STRPBRK 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strpbrk.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strpbrk.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr" if test "x$ac_cv_func_strstr" = xyes then : printf "%s\n" "#define HAVE_STRSTR 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strstr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strstr.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strtod" "ac_cv_func_strtod" @@ -15449,78 +16034,84 @@ if test "x$ac_cv_func_strtod" = xyes then : printf "%s\n" "#define HAVE_STRTOD 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strtod.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtod.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" if test "x$ac_cv_func_strtol" = xyes then : printf "%s\n" "#define HAVE_STRTOL 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strtol.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtol.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul" if test "x$ac_cv_func_strtoul" = xyes then : printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strtoul.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoul.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll" if test "x$ac_cv_func_strtoll" = xyes then : printf "%s\n" "#define HAVE_STRTOLL 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strtoll.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoll.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull" if test "x$ac_cv_func_strtoull" = xyes then : printf "%s\n" "#define HAVE_STRTOULL 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strtoull.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoull.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strtoumax" "ac_cv_func_strtoumax" if test "x$ac_cv_func_strtoumax" = xyes then : printf "%s\n" "#define HAVE_STRTOUMAX 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strtoumax.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoumax.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "dprintf" "ac_cv_func_dprintf" @@ -15528,13 +16119,14 @@ if test "x$ac_cv_func_dprintf" = xyes then : printf "%s\n" "#define HAVE_DPRINTF 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" dprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS dprintf.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul" @@ -15542,13 +16134,14 @@ if test "x$ac_cv_func_strchrnul" = xyes then : printf "%s\n" "#define HAVE_STRCHRNUL 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strchrnul.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strchrnul.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" @@ -15556,13 +16149,44 @@ if test "x$ac_cv_func_strdup" = xyes then : printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strdup.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strdup.$ac_objext" ;; esac + ;; +esac +fi + +ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" +if test "x$ac_cv_func_strlcpy" = xyes +then : + printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h + +else case e in #( + e) case " $LIBOBJS " in + *" strlcpy.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext" + ;; +esac + ;; +esac +fi + +ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray" +if test "x$ac_cv_func_reallocarray" = xyes +then : + printf "%s\n" "#define HAVE_REALLOCARRAY 1" >>confdefs.h +else case e in #( + e) case " $LIBOBJS " in + *" reallocarray.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS reallocarray.$ac_objext" + ;; +esac + ;; +esac fi @@ -15578,8 +16202,9 @@ ac_fn_check_decl "$LINENO" "AUDIT_USER_TTY" "ac_cv_have_decl_AUDIT_USER_TTY" "#i if test "x$ac_cv_have_decl_AUDIT_USER_TTY" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_AUDIT_USER_TTY $ac_have_decl" >>confdefs.h @@ -15588,8 +16213,9 @@ ac_fn_check_decl "$LINENO" "confstr" "ac_cv_have_decl_confstr" "$ac_includes_def if test "x$ac_cv_have_decl_confstr" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_CONFSTR $ac_have_decl" >>confdefs.h @@ -15597,17 +16223,29 @@ ac_fn_check_decl "$LINENO" "printf" "ac_cv_have_decl_printf" "$ac_includes_defau if test "x$ac_cv_have_decl_printf" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_PRINTF $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "brk" "ac_cv_have_decl_brk" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_brk" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_BRK $ac_have_decl" >>confdefs.h + ac_fn_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_sbrk" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_SBRK $ac_have_decl" >>confdefs.h @@ -15615,8 +16253,9 @@ ac_fn_check_decl "$LINENO" "setregid" "ac_cv_have_decl_setregid" "$ac_includes_d if test "x$ac_cv_have_decl_setregid" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_SETREGID $ac_have_decl" >>confdefs.h @@ -15624,8 +16263,9 @@ ac_fn_check_decl "$LINENO" "strcpy" "ac_cv_have_decl_strcpy" "$ac_includes_defau if test "x$ac_cv_have_decl_strcpy" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRCPY $ac_have_decl" >>confdefs.h @@ -15633,8 +16273,9 @@ ac_fn_check_decl "$LINENO" "strsignal" "ac_cv_have_decl_strsignal" "$ac_includes if test "x$ac_cv_have_decl_strsignal" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRSIGNAL $ac_have_decl" >>confdefs.h @@ -15657,8 +16298,9 @@ ac_fn_check_decl "$LINENO" "strtold" "ac_cv_have_decl_strtold" "$ac_includes_def if test "x$ac_cv_have_decl_strtold" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRTOLD $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 @@ -15669,14 +16311,14 @@ printf %s "checking for broken strtold... " >&6; } if test ${bash_cv_strtold_broken+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { -long double r; char *foo, bar; r = strtold(foo, &bar); +long double r; char *foo, *bar; r = strtold(foo, &bar); ; return 0; @@ -15685,12 +16327,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_strtold_broken=no -else $as_nop - bash_cv_strtold_broken=yes +else case e in #( + e) bash_cv_strtold_broken=yes ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_strtold_broken" >&5 @@ -15707,8 +16351,9 @@ ac_fn_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_defau if test "x$ac_cv_have_decl_strtol" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRTOL $ac_have_decl" >>confdefs.h @@ -15716,8 +16361,9 @@ ac_fn_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_def if test "x$ac_cv_have_decl_strtoll" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRTOLL $ac_have_decl" >>confdefs.h @@ -15725,8 +16371,9 @@ ac_fn_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_def if test "x$ac_cv_have_decl_strtoul" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRTOUL $ac_have_decl" >>confdefs.h @@ -15734,8 +16381,9 @@ ac_fn_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_d if test "x$ac_cv_have_decl_strtoull" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRTOULL $ac_have_decl" >>confdefs.h @@ -15743,8 +16391,9 @@ ac_fn_check_decl "$LINENO" "strtoumax" "ac_cv_have_decl_strtoumax" "$ac_includes if test "x$ac_cv_have_decl_strtoumax" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRTOUMAX $ac_have_decl" >>confdefs.h @@ -15758,12 +16407,12 @@ printf %s "checking for working mktime... " >&6; } if test ${ac_cv_func_working_mktime+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : ac_cv_func_working_mktime=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test program from Paul Eggert and Tony Leneis. */ #include @@ -15798,7 +16447,7 @@ static const char *tz_strings[] = { /* Return 0 if mktime fails to convert a date in the spring-forward gap. Based on a problem report from Andreas Jaeger. */ static int -spring_forward_gap () +spring_forward_gap (void) { /* glibc (up to about 1998-10-07) failed this test. */ struct tm tm; @@ -15835,7 +16484,7 @@ mktime_test (time_t now) } static int -irix_6_4_bug () +irix_6_4_bug (void) { /* Based on code from Ariel Faigon. */ struct tm tm; @@ -15877,7 +16526,7 @@ bigtime_test (int j) } static int -year_2050_test () +year_2050_test (void) { /* The correct answer for 2050-02-01 00:00:00 in Pacific time, ignoring leap seconds. */ @@ -15954,13 +16603,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_working_mktime=yes -else $as_nop - ac_cv_func_working_mktime=no +else case e in #( + e) ac_cv_func_working_mktime=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_working_mktime" >&5 printf "%s\n" "$ac_cv_func_working_mktime" >&6; } @@ -16007,6 +16659,8 @@ then : fi +printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 @@ -16014,8 +16668,8 @@ printf %s "checking for working mmap... " >&6; } if test ${ac_cv_func_mmap_fixed_mapped+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. @@ -16023,8 +16677,8 @@ then : # If we don't know, assume the worst. *) ac_cv_func_mmap_fixed_mapped=no ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ @@ -16045,21 +16699,21 @@ $ac_includes_default VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get - propagated back to all the places they're supposed to be. - - Grep wants private fixed already mapped. - The main things grep needs to know about mmap are: - * does it exist and is it safe to write into the mmap'd area - * how to use it (BSD variants) */ + propagated back to all the places they're supposed to be. */ #include #include -/* This mess was copied from the GNU getpagesize.h. */ -#ifndef HAVE_GETPAGESIZE +#ifndef getpagesize +/* Prefer sysconf to the legacy getpagesize function, as getpagesize has + been removed from POSIX and is limited to page sizes that fit in 'int'. */ # ifdef _SC_PAGESIZE -# define getpagesize() sysconf(_SC_PAGESIZE) -# else /* no _SC_PAGESIZE */ +# define getpagesize() sysconf (_SC_PAGESIZE) +# elif defined _SC_PAGE_SIZE +# define getpagesize() sysconf (_SC_PAGE_SIZE) +# elif HAVE_GETPAGESIZE +int getpagesize (); +# else # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE @@ -16083,16 +16737,15 @@ $ac_includes_default # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ -# endif /* no _SC_PAGESIZE */ - -#endif /* no HAVE_GETPAGESIZE */ +# endif +#endif int main (void) { char *data, *data2, *data3; const char *cdata2; - int i, pagesize; + long i, pagesize; int fd, fd2; pagesize = getpagesize (); @@ -16126,8 +16779,7 @@ main (void) if (*(data2 + i)) return 7; close (fd2); - if (munmap (data2, pagesize)) - return 8; + /* 'return 8;' not currently used. */ /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that @@ -16164,13 +16816,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_mmap_fixed_mapped=yes -else $as_nop - ac_cv_func_mmap_fixed_mapped=no +else case e in #( + e) ac_cv_func_mmap_fixed_mapped=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; } @@ -16204,6 +16859,12 @@ if test "x$ac_cv_func_dcgettext" = xyes then : printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset" +if test "x$ac_cv_func_locale_charset" = xyes +then : + printf "%s\n" "#define HAVE_LOCALE_CHARSET 1" >>confdefs.h + fi ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" if test "x$ac_cv_func_mempcpy" = xyes @@ -16242,6 +16903,9 @@ if test "x$USE_INCLUDED_LIBINTL" = "xyes"; then INTL_DEP='${INTL_LIBDIR}/libintl.a' INTL_INC='-I${INTL_LIBSRC} -I${INTL_BUILDDIR}' LIBINTL_H='${INTL_BUILDDIR}/libintl.h' + + printf "%s\n" "#define HAVE_LOCALE_CHARSET 1" >>confdefs.h + fi @@ -16289,7 +16953,7 @@ fi ac_fn_c_check_func "$LINENO" "mbscasecmp" "ac_cv_func_mbscasecmp" if test "x$ac_cv_func_mbscasecmp" = xyes then : - printf "%s\n" "#define HAVE_MBSCMP 1" >>confdefs.h + printf "%s\n" "#define HAVE_MBSCASECMP 1" >>confdefs.h fi @@ -16300,6 +16964,13 @@ then : fi +ac_fn_c_check_func "$LINENO" "mbsncmp" "ac_cv_func_mbsncmp" +if test "x$ac_cv_func_mbsncmp" = xyes +then : + printf "%s\n" "#define HAVE_MBSNCMP 1" >>confdefs.h + +fi + ac_fn_c_check_func "$LINENO" "mbsnrtowcs" "ac_cv_func_mbsnrtowcs" if test "x$ac_cv_func_mbsnrtowcs" = xyes then : @@ -16320,13 +16991,14 @@ if test "x$ac_cv_func_mbschr" = xyes then : printf "%s\n" "#define HAVE_MBSCHR 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" mbschr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS mbschr.$ac_objext" ;; esac - + ;; +esac fi @@ -16365,19 +17037,27 @@ then : fi +ac_fn_c_check_func "$LINENO" "wcsnrtombs" "ac_cv_func_wcsnrtombs" +if test "x$ac_cv_func_wcsnrtombs" = xyes +then : + printf "%s\n" "#define HAVE_WCSNRTOMBS 1" >>confdefs.h + +fi + ac_fn_c_check_func "$LINENO" "wcswidth" "ac_cv_func_wcswidth" if test "x$ac_cv_func_wcswidth" = xyes then : printf "%s\n" "#define HAVE_WCSWIDTH 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" wcswidth.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS wcswidth.$ac_objext" ;; esac - + ;; +esac fi @@ -16387,8 +17067,8 @@ printf %s "checking whether mbrtowc and mbstate_t are properly declared... " >&6 if test ${ac_cv_func_mbrtowc+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -16406,11 +17086,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_func_mbrtowc=yes -else $as_nop - ac_cv_func_mbrtowc=no +else case e in #( + e) ac_cv_func_mbrtowc=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 printf "%s\n" "$ac_cv_func_mbrtowc" >&6; } @@ -16464,8 +17146,8 @@ printf %s "checking for wchar_t in wchar.h... " >&6; } if test ${bash_cv_type_wchar_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -16483,11 +17165,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_type_wchar_t=yes -else $as_nop - bash_cv_type_wchar_t=no - +else case e in #( + e) bash_cv_type_wchar_t=no + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wchar_t" >&5 printf "%s\n" "$bash_cv_type_wchar_t" >&6; } @@ -16502,8 +17186,8 @@ printf %s "checking for wctype_t in wctype.h... " >&6; } if test ${bash_cv_type_wctype_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -16521,11 +17205,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_type_wctype_t=yes -else $as_nop - bash_cv_type_wctype_t=no - +else case e in #( + e) bash_cv_type_wctype_t=no + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wctype_t" >&5 printf "%s\n" "$bash_cv_type_wctype_t" >&6; } @@ -16540,8 +17226,8 @@ printf %s "checking for wint_t in wctype.h... " >&6; } if test ${bash_cv_type_wint_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -16559,11 +17245,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_type_wint_t=yes -else $as_nop - bash_cv_type_wint_t=no - +else case e in #( + e) bash_cv_type_wint_t=no + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wint_t" >&5 printf "%s\n" "$bash_cv_type_wint_t" >&6; } @@ -16578,13 +17266,13 @@ printf %s "checking for wcwidth broken with unicode combining characters... " >& if test ${bash_cv_wcwidth_broken+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : bash_cv_wcwidth_broken=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -16595,14 +17283,15 @@ else $as_nop #include int -main(c, v) -int c; -char **v; +main(int c, char **v) { int w; setlocale(LC_ALL, "en_US.UTF-8"); w = wcwidth (0x0301); + if (w != 0) + exit (0); + w = wcwidth (0x200b); exit (w == 0); /* exit 0 if wcwidth broken */ } @@ -16610,13 +17299,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_wcwidth_broken=yes -else $as_nop - bash_cv_wcwidth_broken=no +else case e in #( + e) bash_cv_wcwidth_broken=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcwidth_broken" >&5 printf "%s\n" "$bash_cv_wcwidth_broken" >&6; } @@ -16641,28 +17333,30 @@ fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5 printf %s "checking size of wchar_t... " >&6; } if test ${ac_cv_sizeof_wchar_t+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_wchar_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_wchar_t" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (wchar_t) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_wchar_t=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5 printf "%s\n" "$ac_cv_sizeof_wchar_t" >&6; } @@ -16681,16 +17375,22 @@ printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -16702,12 +17402,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes -else $as_nop - ac_cv_lib_dl_dlopen=no +else case e in #( + e) ac_cv_lib_dl_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } @@ -16747,8 +17449,8 @@ printf %s "checking for inet_aton... " >&6; } if test ${bash_cv_func_inet_aton+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -16766,11 +17468,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_func_inet_aton=yes -else $as_nop - bash_cv_func_inet_aton=no +else case e in #( + e) bash_cv_func_inet_aton=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_inet_aton" >&5 printf "%s\n" "$bash_cv_func_inet_aton" >&6; } @@ -16794,16 +17498,22 @@ printf %s "checking for getpwent in -lsun... " >&6; } if test ${ac_cv_lib_sun_getpwent+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsun $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char getpwent (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char getpwent (void); int main (void) { @@ -16815,12 +17525,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_sun_getpwent=yes -else $as_nop - ac_cv_lib_sun_getpwent=no +else case e in #( + e) ac_cv_lib_sun_getpwent=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sun_getpwent" >&5 printf "%s\n" "$ac_cv_lib_sun_getpwent" >&6; } @@ -16846,22 +17558,28 @@ fi if test ${bash_cv_have_socklib+y} then : printf %s "(cached) " >&6 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpeername in -lsocket" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpeername in -lsocket" >&5 printf %s "checking for getpeername in -lsocket... " >&6; } if test ${ac_cv_lib_socket_getpeername+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket -lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char getpeername (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char getpeername (void); int main (void) { @@ -16873,22 +17591,26 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_socket_getpeername=yes -else $as_nop - ac_cv_lib_socket_getpeername=no +else case e in #( + e) ac_cv_lib_socket_getpeername=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_getpeername" >&5 printf "%s\n" "$ac_cv_lib_socket_getpeername" >&6; } if test "x$ac_cv_lib_socket_getpeername" = xyes then : bash_cv_have_socklib=yes -else $as_nop - bash_cv_have_socklib=no +else case e in #( + e) bash_cv_have_socklib=no ;; +esac fi - + ;; +esac fi if test "X$_bash_needmsg" = Xyes; then @@ -16908,22 +17630,28 @@ printf %s "checking for libnsl... " >&6; } if test ${bash_cv_have_libnsl+y} then : printf %s "(cached) " >&6 -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5 printf %s "checking for t_open in -lnsl... " >&6; } if test ${ac_cv_lib_nsl_t_open+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char t_open (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char t_open (void); int main (void) { @@ -16935,22 +17663,26 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_nsl_t_open=yes -else $as_nop - ac_cv_lib_nsl_t_open=no +else case e in #( + e) ac_cv_lib_nsl_t_open=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_t_open" >&5 printf "%s\n" "$ac_cv_lib_nsl_t_open" >&6; } if test "x$ac_cv_lib_nsl_t_open" = xyes then : bash_cv_have_libnsl=yes -else $as_nop - bash_cv_have_libnsl=no +else case e in #( + e) bash_cv_have_libnsl=no ;; +esac fi - + ;; +esac fi if test "X$_bash_needmsg" = Xyes; then @@ -16981,8 +17713,8 @@ fi if test ${bash_cv_have_gethostbyname+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -17001,12 +17733,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_have_gethostbyname=yes -else $as_nop - bash_cv_have_gethostbyname=no - +else case e in #( + e) bash_cv_have_gethostbyname=no + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi if test "X$_bash_needmsg" = Xyes; then @@ -17027,67 +17761,118 @@ printf %s "checking type of array argument to getgroups... " >&6; } if test ${ac_cv_type_getgroups+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) # If AC_TYPE_UID_T says there isn't any gid_t typedef, then we can skip +# everything below. +if test $ac_cv_type_gid_t = no +then : + ac_cv_type_getgroups=int +else case e in #( + e) # Test programs below rely on strict type checking of extern declarations: + # 'extern int getgroups(int, int *); extern int getgroups(int, pid_t *);' + # is valid in C89 if and only if pid_t is a typedef for int. Unlike + # anything involving either an assignment or a function call, compilers + # tend to make this kind of type mismatch a hard error, not just an + # "incompatible pointer types" warning. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +extern int getgroups(int, gid_t *); +int +main (void) +{ +return !(getgroups(0, 0) >= 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" then : - ac_cv_type_getgroups=cross -else $as_nop + ac_getgroups_gidarray=yes +else case e in #( + e) ac_getgroups_gidarray=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Thanks to Mike Rendell for this test. */ $ac_includes_default -#define NGID 256 -#undef MAX -#define MAX(x, y) ((x) > (y) ? (x) : (y)) - +extern int getgroups(int, int *); +int +main (void) +{ +return !(getgroups(0, 0) >= 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_getgroups_intarray=yes +else case e in #( + e) ac_getgroups_intarray=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + case int:$ac_getgroups_intarray,gid:$ac_getgroups_gidarray in #( + int:yes,gid:no) : + ac_cv_type_getgroups=int ;; #( + int:no,gid:yes) : + ac_cv_type_getgroups=gid_t ;; #( + int:yes,gid:yes) : + + # Both programs compiled - this means *either* that getgroups + # was declared with no prototype, in which case we should use int, + # or that it was declared prototyped but gid_t is a typedef for int, + # in which case we should use gid_t. Distinguish the two cases + # by testing if the compiler catches a blatantly incorrect function + # signature for getgroups. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +extern int getgroups(int, float); int main (void) { - gid_t gidset[NGID]; - int i, n; - union { gid_t gval; long int lval; } val; - - val.lval = -1; - for (i = 0; i < NGID; i++) - gidset[i] = val.gval; - n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, - gidset); - /* Exit non-zero if getgroups seems to require an array of ints. This - happens when gid_t is short int but getgroups modifies an array - of ints. */ - return n > 0 && gidset[n] != val.gval; +return !(getgroups(0, 0) >= 0); + ; + return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - ac_cv_type_getgroups=gid_t -else $as_nop - ac_cv_type_getgroups=int -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -if test $ac_cv_type_getgroups = cross; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include + # Compiler did not catch incorrect argument list; + # getgroups is unprototyped. + ac_cv_type_getgroups=int -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1 -then : - ac_cv_type_getgroups=gid_t -else $as_nop - ac_cv_type_getgroups=int +else case e in #( + e) + # Compiler caught incorrect argument list; + # gid_t is a typedef for int. + ac_cv_type_getgroups=gid_t + ;; +esac fi -rm -rf conftest* +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; #( + *) : + # Both programs failed to compile - this probably means getgroups + # wasn't declared at all. Use 'int', as this is probably a very + # old system where the type _would have been_ int. + ac_cv_type_getgroups=int + ;; +esac + ;; +esac fi + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 printf "%s\n" "$ac_cv_type_getgroups" >&6; } - printf "%s\n" "#define GETGROUPS_T $ac_cv_type_getgroups" >>confdefs.h @@ -17095,52 +17880,44 @@ ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define off_t long int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define mode_t int" >>confdefs.h - + ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 -printf %s "checking for uid_t in sys/types.h... " >&6; } -if test ${ac_cv_type_uid_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1 +ac_fn_c_check_type "$LINENO" "uid_t" "ac_cv_type_uid_t" "$ac_includes_default" +if test "x$ac_cv_type_uid_t" = xyes then : - ac_cv_type_uid_t=yes -else $as_nop - ac_cv_type_uid_t=no -fi -rm -rf conftest* - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 -printf "%s\n" "$ac_cv_type_uid_t" >&6; } -if test $ac_cv_type_uid_t = no; then +else case e in #( + e) printf "%s\n" "#define uid_t int" >>confdefs.h + ;; +esac +fi +ac_fn_c_check_type "$LINENO" "gid_t" "ac_cv_type_gid_t" "$ac_includes_default" +if test "x$ac_cv_type_gid_t" = xyes +then : +else case e in #( + e) printf "%s\n" "#define gid_t int" >>confdefs.h - + ;; +esac fi @@ -17149,8 +17926,8 @@ fi if test "x$ac_cv_type_pid_t" = xyes then : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ @@ -17169,14 +17946,16 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' +else case e in #( + e) ac_pid_type='__int64' ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - + ;; +esac fi @@ -17184,21 +17963,59 @@ ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define size_t unsigned int" >>confdefs.h + ;; +esac +fi + + + ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default" +if test "x$ac_cv_type_intptr_t" = xyes +then : + +printf "%s\n" "#define HAVE_INTPTR_T 1" >>confdefs.h + +else case e in #( + e) for ac_type in 'int' 'long int' 'long long int'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main (void) +{ +static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; +test_array [0] = 0; +return test_array [0]; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +printf "%s\n" "#define intptr_t $ac_type" >>confdefs.h + + ac_type= +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + test -z "$ac_type" && break + done ;; +esac fi + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" if test "x$ac_cv_type_uintptr_t" = xyes then : printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h -else $as_nop - for ac_type in 'unsigned int' 'unsigned long int' \ +else case e in #( + e) for ac_type in 'unsigned int' 'unsigned long int' \ 'unsigned long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17223,7 +18040,8 @@ printf "%s\n" "#define uintptr_t $ac_type" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break - done + done ;; +esac fi @@ -17232,20 +18050,22 @@ ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_defaul if test "x$ac_cv_type_ssize_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define ssize_t int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "time_t" "ac_cv_type_time_t" "$ac_includes_default" if test "x$ac_cv_type_time_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define time_t long" >>confdefs.h - + ;; +esac fi @@ -17256,8 +18076,8 @@ printf %s "checking for long long int... " >&6; } if test ${ac_cv_type_long_long_int+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_type_long_long_int=yes +else case e in #( + e) ac_cv_type_long_long_int=yes case $ac_prog_cc_stdc in no | c89) ;; *) @@ -17266,12 +18086,12 @@ else $as_nop if test "$cross_compiling" = yes then : : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX - # define HALF \ + # define HALF \\ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif @@ -17296,15 +18116,18 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : -else $as_nop - ac_cv_type_long_long_int=no +else case e in #( + e) ac_cv_type_long_long_int=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi fi;; - esac + esac ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 printf "%s\n" "$ac_cv_type_long_long_int" >&6; } @@ -17320,8 +18143,8 @@ printf %s "checking for unsigned long long int... " >&6; } if test ${ac_cv_type_unsigned_long_long_int+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_type_unsigned_long_long_int=yes +else case e in #( + e) ac_cv_type_unsigned_long_long_int=yes case $ac_prog_cc_stdc in no | c89) ;; *) @@ -17360,12 +18183,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : -else $as_nop - ac_cv_type_unsigned_long_long_int=no +else case e in #( + e) ac_cv_type_unsigned_long_long_int=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext;; - esac + esac ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 printf "%s\n" "$ac_cv_type_unsigned_long_long_int" >&6; } @@ -17381,8 +18206,8 @@ printf %s "checking for sig_atomic_t in signal.h... " >&6; } if test ${ac_cv_have_sig_atomic_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -17396,11 +18221,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_have_sig_atomic_t=yes -else $as_nop - ac_cv_have_sig_atomic_t=no +else case e in #( + e) ac_cv_have_sig_atomic_t=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_sig_atomic_t" >&5 printf "%s\n" "$ac_cv_have_sig_atomic_t" >&6; } @@ -17413,8 +18240,8 @@ printf %s "checking for sig_atomic_t... " >&6; } if test ${bash_cv_type_sig_atomic_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_STDLIB_H @@ -17433,14 +18260,16 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "sig_atomic_t" >/dev/null 2>&1 + $EGREP_TRADITIONAL "sig_atomic_t" >/dev/null 2>&1 then : bash_cv_type_sig_atomic_t=yes -else $as_nop - bash_cv_type_sig_atomic_t=no +else case e in #( + e) bash_cv_type_sig_atomic_t=no ;; +esac fi rm -rf conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sig_atomic_t" >&5 @@ -17456,28 +18285,30 @@ fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 printf %s "checking size of char... " >&6; } if test ${ac_cv_sizeof_char+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_char" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_char" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 printf "%s\n" "$ac_cv_sizeof_char" >&6; } @@ -17489,28 +18320,30 @@ printf "%s\n" "#define SIZEOF_CHAR $ac_cv_sizeof_char" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 printf %s "checking size of short... " >&6; } if test ${ac_cv_sizeof_short+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_short" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_short" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 printf "%s\n" "$ac_cv_sizeof_short" >&6; } @@ -17522,28 +18355,30 @@ printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 printf %s "checking size of int... " >&6; } if test ${ac_cv_sizeof_int+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_int" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_int" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 printf "%s\n" "$ac_cv_sizeof_int" >&6; } @@ -17555,28 +18390,30 @@ printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 printf %s "checking size of long... " >&6; } if test ${ac_cv_sizeof_long+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_long" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 printf "%s\n" "$ac_cv_sizeof_long" >&6; } @@ -17588,28 +18425,30 @@ printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of char *" >&5 printf %s "checking size of char *... " >&6; } if test ${ac_cv_sizeof_char_p+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char *))" "ac_cv_sizeof_char_p" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char *))" "ac_cv_sizeof_char_p" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_char_p" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_char_p" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char *) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char_p=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char_p" >&5 printf "%s\n" "$ac_cv_sizeof_char_p" >&6; } @@ -17621,28 +18460,30 @@ printf "%s\n" "#define SIZEOF_CHAR_P $ac_cv_sizeof_char_p" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 printf %s "checking size of size_t... " >&6; } if test ${ac_cv_sizeof_size_t+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_size_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_size_t" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (size_t) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_size_t=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 printf "%s\n" "$ac_cv_sizeof_size_t" >&6; } @@ -17654,28 +18495,30 @@ printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 printf %s "checking size of double... " >&6; } if test ${ac_cv_sizeof_double+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_double" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_double" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_double=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 printf "%s\n" "$ac_cv_sizeof_double" >&6; } @@ -17687,28 +18530,30 @@ printf "%s\n" "#define SIZEOF_DOUBLE $ac_cv_sizeof_double" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 printf %s "checking size of long long... " >&6; } if test ${ac_cv_sizeof_long_long+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_long_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_long_long" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_long=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 printf "%s\n" "$ac_cv_sizeof_long_long" >&6; } @@ -17723,20 +18568,22 @@ ac_fn_c_check_type "$LINENO" "u_int" "ac_cv_type_u_int" "$ac_includes_default" if test "x$ac_cv_type_u_int" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define u_int unsigned int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "u_long" "ac_cv_type_u_long" "$ac_includes_default" if test "x$ac_cv_type_u_long" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define u_long unsigned long" >>confdefs.h - + ;; +esac fi @@ -17746,10 +18593,11 @@ if test "$ac_cv_sizeof_short" = 2; then if test "x$ac_cv_type_bits16_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits16_t short" >>confdefs.h - + ;; +esac fi elif test "$ac_cv_sizeof_char" = 2; then @@ -17757,10 +18605,11 @@ elif test "$ac_cv_sizeof_char" = 2; then if test "x$ac_cv_type_bits16_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits16_t char" >>confdefs.h - + ;; +esac fi else @@ -17768,10 +18617,11 @@ else if test "x$ac_cv_type_bits16_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits16_t short" >>confdefs.h - + ;; +esac fi fi @@ -17782,10 +18632,11 @@ if test "$ac_cv_sizeof_short" = 2; then if test "x$ac_cv_type_u_bits16_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define u_bits16_t unsigned short" >>confdefs.h - + ;; +esac fi elif test "$ac_cv_sizeof_char" = 2; then @@ -17793,10 +18644,11 @@ elif test "$ac_cv_sizeof_char" = 2; then if test "x$ac_cv_type_u_bits16_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define u_bits16_t unsigned char" >>confdefs.h - + ;; +esac fi else @@ -17804,10 +18656,11 @@ else if test "x$ac_cv_type_u_bits16_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define u_bits16_t unsigned short" >>confdefs.h - + ;; +esac fi fi @@ -17818,10 +18671,11 @@ if test "$ac_cv_sizeof_int" = 4; then if test "x$ac_cv_type_bits32_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits32_t int" >>confdefs.h - + ;; +esac fi elif test "$ac_cv_sizeof_long" = 4; then @@ -17829,10 +18683,11 @@ elif test "$ac_cv_sizeof_long" = 4; then if test "x$ac_cv_type_bits32_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits32_t long" >>confdefs.h - + ;; +esac fi else @@ -17840,10 +18695,11 @@ else if test "x$ac_cv_type_bits32_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits32_t int" >>confdefs.h - + ;; +esac fi fi @@ -17854,10 +18710,11 @@ if test "$ac_cv_sizeof_int" = 4; then if test "x$ac_cv_type_u_bits32_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define u_bits32_t unsigned int" >>confdefs.h - + ;; +esac fi elif test "$ac_cv_sizeof_long" = 4; then @@ -17865,10 +18722,11 @@ elif test "$ac_cv_sizeof_long" = 4; then if test "x$ac_cv_type_u_bits32_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define u_bits32_t unsigned long" >>confdefs.h - + ;; +esac fi else @@ -17876,10 +18734,11 @@ else if test "x$ac_cv_type_u_bits32_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define u_bits32_t unsigned int" >>confdefs.h - + ;; +esac fi fi @@ -17890,10 +18749,11 @@ if test "$ac_cv_sizeof_char_p" = 8; then if test "x$ac_cv_type_bits64_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits64_t char *" >>confdefs.h - + ;; +esac fi elif test "$ac_cv_sizeof_double" = 8; then @@ -17901,10 +18761,11 @@ elif test "$ac_cv_sizeof_double" = 8; then if test "x$ac_cv_type_bits64_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits64_t double" >>confdefs.h - + ;; +esac fi elif test -n "$ac_cv_type_long_long" && test "$ac_cv_sizeof_long_long" = 8; then @@ -17912,10 +18773,11 @@ elif test -n "$ac_cv_type_long_long" && test "$ac_cv_sizeof_long_long" = 8; then if test "x$ac_cv_type_bits64_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits64_t long long" >>confdefs.h - + ;; +esac fi elif test "$ac_cv_sizeof_long" = 8; then @@ -17923,10 +18785,11 @@ elif test "$ac_cv_sizeof_long" = 8; then if test "x$ac_cv_type_bits64_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits64_t long" >>confdefs.h - + ;; +esac fi else @@ -17934,10 +18797,11 @@ else if test "x$ac_cv_type_bits64_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define bits64_t double" >>confdefs.h - + ;; +esac fi fi @@ -17949,10 +18813,11 @@ if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_char_p"; then if test "x$ac_cv_type_ptrdiff_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define ptrdiff_t int" >>confdefs.h - + ;; +esac fi elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then @@ -17960,10 +18825,11 @@ elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then if test "x$ac_cv_type_ptrdiff_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define ptrdiff_t long" >>confdefs.h - + ;; +esac fi elif test "$ac_cv_type_long_long" = yes && test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_char_p"; then @@ -17971,10 +18837,11 @@ elif test "$ac_cv_type_long_long" = yes && test "$ac_cv_sizeof_long_long" = "$ac if test "x$ac_cv_type_ptrdiff_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define ptrdiff_t long long" >>confdefs.h - + ;; +esac fi else @@ -17982,10 +18849,11 @@ else if test "x$ac_cv_type_ptrdiff_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define ptrdiff_t int" >>confdefs.h - + ;; +esac fi fi @@ -17996,8 +18864,8 @@ printf %s "checking whether stat file-mode macros are broken... " >&6; } if test ${ac_cv_header_stat_broken+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -18022,10 +18890,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_stat_broken=no -else $as_nop - ac_cv_header_stat_broken=yes +else case e in #( + e) ac_cv_header_stat_broken=yes ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 printf "%s\n" "$ac_cv_header_stat_broken" >&6; } @@ -18041,8 +18911,8 @@ printf %s "checking whether #! works in shell scripts... " >&6; } if test ${ac_cv_sys_interpreter+y} then : printf %s "(cached) " >&6 -else $as_nop - echo '#! /bin/cat +else case e in #( + e) echo '#! /bin/cat exit 69 ' >conftest chmod u+x conftest @@ -18052,7 +18922,8 @@ if test $? -ne 69; then else ac_cv_sys_interpreter=no fi -rm -f conftest +rm -f conftest ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_interpreter" >&5 printf "%s\n" "$ac_cv_sys_interpreter" >&6; } @@ -18069,8 +18940,8 @@ printf %s "checking for lstat... " >&6; } if test ${bash_cv_func_lstat+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18087,11 +18958,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_func_lstat=yes -else $as_nop - bash_cv_func_lstat=no +else case e in #( + e) bash_cv_func_lstat=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_lstat" >&5 printf "%s\n" "$bash_cv_func_lstat" >&6; } @@ -18107,20 +18980,23 @@ printf %s "checking if dup2 fails to clear the close-on-exec flag... " >&6; } if test ${bash_cv_dup2_broken+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&2;} bash_cv_dup2_broken=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include +#ifdef HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ int main() { @@ -18140,13 +19016,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_dup2_broken=yes -else $as_nop - bash_cv_dup2_broken=no +else case e in #( + e) bash_cv_dup2_broken=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dup2_broken" >&5 @@ -18162,15 +19041,15 @@ printf %s "checking whether pgrps need synchronization... " >&6; } if test ${bash_cv_pgrp_pipe+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&2;} bash_cv_pgrp_pipe=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_UNISTD_H @@ -18230,13 +19109,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_pgrp_pipe=no -else $as_nop - bash_cv_pgrp_pipe=yes +else case e in #( + e) bash_cv_pgrp_pipe=yes ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_pgrp_pipe" >&5 @@ -18251,13 +19133,13 @@ printf %s "checking for type of signal functions... " >&6; } if test ${bash_cv_signal_vintage+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) if test ${bash_cv_posix_signals+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18279,12 +19161,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_posix_signals=yes -else $as_nop - bash_cv_posix_signals=no - +else case e in #( + e) bash_cv_posix_signals=no + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi @@ -18294,8 +19178,8 @@ else if test ${bash_cv_bsd_signals+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18314,12 +19198,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_bsd_signals=yes -else $as_nop - bash_cv_bsd_signals=no - +else case e in #( + e) bash_cv_bsd_signals=no + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi @@ -18329,8 +19215,8 @@ fi if test ${bash_cv_sysv_signals+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18351,12 +19237,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_sysv_signals=yes -else $as_nop - bash_cv_sysv_signals=no - +else case e in #( + e) bash_cv_sysv_signals=no + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi @@ -18367,7 +19255,8 @@ fi fi fi fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_signal_vintage" >&5 @@ -18389,8 +19278,8 @@ printf %s "checking for sys_errlist and sys_nerr... " >&6; } if test ${bash_cv_sys_errlist+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18410,12 +19299,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_sys_errlist=yes -else $as_nop - bash_cv_sys_errlist=no - +else case e in #( + e) bash_cv_sys_errlist=no + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_errlist" >&5 @@ -18435,8 +19326,9 @@ ac_fn_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include if test "x$ac_cv_have_decl_sys_siglist" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_SYS_SIGLIST $ac_have_decl" >>confdefs.h @@ -18447,15 +19339,15 @@ printf %s "checking for sys_siglist in system C library... " >&6; } if test ${bash_cv_sys_siglist+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&2;} bash_cv_sys_siglist=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18478,13 +19370,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_sys_siglist=yes -else $as_nop - bash_cv_sys_siglist=no +else case e in #( + e) bash_cv_sys_siglist=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_siglist" >&5 @@ -18499,8 +19394,8 @@ printf %s "checking for _sys_siglist in signal.h or unistd.h... " >&6; } if test ${bash_cv_decl_under_sys_siglist+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18519,10 +19414,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_decl_under_sys_siglist=yes -else $as_nop - bash_cv_decl_under_sys_siglist=no +else case e in #( + e) bash_cv_decl_under_sys_siglist=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_under_sys_siglist" >&5 printf "%s\n" "$bash_cv_decl_under_sys_siglist" >&6; } @@ -18537,15 +19434,15 @@ printf %s "checking for _sys_siglist in system C library... " >&6; } if test ${bash_cv_under_sys_siglist+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&2;} bash_cv_under_sys_siglist=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18568,13 +19465,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_under_sys_siglist=yes -else $as_nop - bash_cv_under_sys_siglist=no +else case e in #( + e) bash_cv_under_sys_siglist=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_under_sys_siglist" >&5 @@ -18592,8 +19492,8 @@ printf %s "checking for clock_t... " >&6; } if test ${bash_cv_type_clock_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_STDLIB_H @@ -18612,14 +19512,16 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "clock_t" >/dev/null 2>&1 + $EGREP_TRADITIONAL "clock_t" >/dev/null 2>&1 then : bash_cv_type_clock_t=yes -else $as_nop - bash_cv_type_clock_t=no +else case e in #( + e) bash_cv_type_clock_t=no ;; +esac fi rm -rf conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_clock_t" >&5 @@ -18637,8 +19539,8 @@ printf %s "checking for sigset_t... " >&6; } if test ${bash_cv_type_sigset_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_STDLIB_H @@ -18657,14 +19559,16 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "sigset_t" >/dev/null 2>&1 + $EGREP_TRADITIONAL "sigset_t" >/dev/null 2>&1 then : bash_cv_type_sigset_t=yes -else $as_nop - bash_cv_type_sigset_t=no +else case e in #( + e) bash_cv_type_sigset_t=no ;; +esac fi rm -rf conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sigset_t" >&5 @@ -18683,8 +19587,8 @@ printf %s "checking for socklen_t... " >&6; } if test ${bash_cv_type_socklen_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_STDLIB_H @@ -18703,14 +19607,16 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "socklen_t" >/dev/null 2>&1 + $EGREP_TRADITIONAL "socklen_t" >/dev/null 2>&1 then : bash_cv_type_socklen_t=yes -else $as_nop - bash_cv_type_socklen_t=no +else case e in #( + e) bash_cv_type_socklen_t=no ;; +esac fi rm -rf conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_socklen_t" >&5 @@ -18738,8 +19644,8 @@ printf %s "checking for type of struct rlimit fields... " >&6; } if test ${bash_cv_type_rlimit+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18756,22 +19662,22 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_type_rlimit=rlim_t -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for size of struct rlimit fields" >&5 printf %s "checking for size of struct rlimit fields... " >&6; } if test ${bash_cv_sizeof_rlim_cur+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check size of rlimit fields if cross compiling -- defaulting to long" >&5 printf "%s\n" "$as_me: WARNING: cannot check size of rlimit fields if cross compiling -- defaulting to long" >&2;} bash_cv_sizeof_rlim_cur=$ac_cv_sizeof_long -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_SYS_TIME_H @@ -18779,6 +19685,7 @@ else $as_nop #endif #include #include +int main() { struct rlimit r; @@ -18789,13 +19696,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_sizeof_rlim_cur=$? -else $as_nop - bash_cv_sizeof_rlim_cur=$? +else case e in #( + e) bash_cv_sizeof_rlim_cur=$? ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sizeof_rlim_cur" >&5 @@ -18806,15 +19716,15 @@ printf %s "checking for size of quad_t... " >&6; } if test ${bash_cv_sizeof_quad_t+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check size of quad_t if cross compiling -- defaulting to 0" >&5 printf "%s\n" "$as_me: WARNING: cannot check size of quad_t if cross compiling -- defaulting to 0" >&2;} bash_cv_sizeof_quad_t=0 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18826,6 +19736,7 @@ else $as_nop #include #endif +int main() { #if HAVE_QUAD_T @@ -18840,13 +19751,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_sizeof_quad_t=$? -else $as_nop - bash_cv_sizeof_quad_t=$? +else case e in #( + e) bash_cv_sizeof_quad_t=$? ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sizeof_quad_t" >&5 @@ -18864,9 +19778,11 @@ else bash_cv_type_rlimit='unsigned long' fi - + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_rlimit" >&5 @@ -18883,13 +19799,14 @@ then : printf "%s\n" "#define HAVE_INTMAX_T 1" >>confdefs.h -else $as_nop - test $ac_cv_type_long_long_int = yes \ +else case e in #( + e) test $ac_cv_type_long_long_int = yes \ && ac_type='long long int' \ || ac_type='long int' printf "%s\n" "#define intmax_t $ac_type" >>confdefs.h - + ;; +esac fi @@ -18901,41 +19818,44 @@ then : printf "%s\n" "#define HAVE_UINTMAX_T 1" >>confdefs.h -else $as_nop - test $ac_cv_type_unsigned_long_long_int = yes \ +else case e in #( + e) test $ac_cv_type_unsigned_long_long_int = yes \ && ac_type='unsigned long long int' \ || ac_type='unsigned long int' printf "%s\n" "#define uintmax_t $ac_type" >>confdefs.h - + ;; +esac fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of intmax_t" >&5 printf %s "checking size of intmax_t... " >&6; } if test ${ac_cv_sizeof_intmax_t+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (intmax_t))" "ac_cv_sizeof_intmax_t" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (intmax_t))" "ac_cv_sizeof_intmax_t" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_intmax_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_intmax_t" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (intmax_t) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_intmax_t=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_intmax_t" >&5 printf "%s\n" "$ac_cv_sizeof_intmax_t" >&6; } @@ -18978,8 +19898,8 @@ printf %s "checking for struct dirent.d_ino... " >&6; } if test ${bash_cv_dirent_has_d_ino+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_fn_c_check_member "$LINENO" "struct dirent" "d_ino" "ac_cv_member_struct_dirent_d_ino" " #include @@ -19009,11 +19929,13 @@ then : printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_INO 1" >>confdefs.h bash_cv_dirent_has_d_ino=yes -else $as_nop - bash_cv_dirent_has_d_ino=no +else case e in #( + e) bash_cv_dirent_has_d_ino=no ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_ino" >&5 @@ -19029,8 +19951,8 @@ printf %s "checking for struct dirent.d_fileno... " >&6; } if test ${bash_cv_dirent_has_d_fileno+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_fn_c_check_member "$LINENO" "struct dirent" "d_fileno" "ac_cv_member_struct_dirent_d_fileno" " #include @@ -19060,11 +19982,13 @@ then : printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_FILENO 1" >>confdefs.h bash_cv_dirent_has_d_fileno=yes -else $as_nop - bash_cv_dirent_has_d_fileno=no +else case e in #( + e) bash_cv_dirent_has_d_fileno=no ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_fileno" >&5 @@ -19080,8 +20004,8 @@ printf %s "checking for struct dirent.d_namlen... " >&6; } if test ${bash_cv_dirent_has_d_namlen+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_fn_c_check_member "$LINENO" "struct dirent" "d_namlen" "ac_cv_member_struct_dirent_d_namlen" " #include @@ -19111,11 +20035,13 @@ then : printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_NAMLEN 1" >>confdefs.h bash_cv_dirent_has_d_namlen=yes -else $as_nop - bash_cv_dirent_has_d_namlen=no +else case e in #( + e) bash_cv_dirent_has_d_namlen=no ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_namlen" >&5 @@ -19130,13 +20056,13 @@ printf %s "checking for struct winsize in sys/ioctl.h and termios.h... " >&6; } if test ${bash_cv_struct_winsize_header+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) if test ${bash_cv_struct_winsize_ioctl+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19156,19 +20082,21 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_struct_winsize_ioctl=yes -else $as_nop - bash_cv_struct_winsize_ioctl=no +else case e in #( + e) bash_cv_struct_winsize_ioctl=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi if test ${bash_cv_struct_winsize_termios+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19188,11 +20116,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_struct_winsize_termios=yes -else $as_nop - bash_cv_struct_winsize_termios=no +else case e in #( + e) bash_cv_struct_winsize_termios=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi @@ -19204,7 +20134,8 @@ elif test $bash_cv_struct_winsize_termios = yes; then else bash_cv_struct_winsize_header=other fi - + ;; +esac fi if test $bash_cv_struct_winsize_header = ioctl_h; then @@ -19227,8 +20158,8 @@ printf %s "checking for struct timeval in sys/time.h and time.h... " >&6; } if test ${bash_cv_struct_timeval+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H #include @@ -19247,11 +20178,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_struct_timeval=yes -else $as_nop - bash_cv_struct_timeval=no +else case e in #( + e) bash_cv_struct_timeval=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timeval" >&5 @@ -19275,8 +20208,8 @@ printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test ${ac_cv_struct_tm+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -19294,10 +20227,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm=time.h -else $as_nop - ac_cv_struct_tm=sys/time.h +else case e in #( + e) ac_cv_struct_tm=sys/time.h ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 printf "%s\n" "$ac_cv_struct_tm" >&6; } @@ -19329,8 +20264,9 @@ else if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h @@ -19339,8 +20275,8 @@ printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if !HAVE_DECL_TZNAME @@ -19358,11 +20294,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes -else $as_nop - ac_cv_var_tzname=no +else case e in #( + e) ac_cv_var_tzname=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } @@ -19378,36 +20316,39 @@ printf %s "checking for struct timezone in sys/time.h and time.h... " >&6; } if test ${bash_cv_struct_timezone+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "struct timezone" >/dev/null 2>&1 + $EGREP_TRADITIONAL "struct timezone" >/dev/null 2>&1 then : bash_cv_struct_timezone=yes -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "struct timezone" >/dev/null 2>&1 + $EGREP_TRADITIONAL "struct timezone" >/dev/null 2>&1 then : bash_cv_struct_timezone=yes -else $as_nop - bash_cv_struct_timezone=no +else case e in #( + e) bash_cv_struct_timezone=no ;; +esac fi rm -rf conftest* - + ;; +esac fi rm -rf conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timezone" >&5 @@ -19423,15 +20364,15 @@ printf %s "checking for offset of exit status in return status from wait... " >& if test ${bash_cv_wexitstatus_offset+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&5 printf "%s\n" "$as_me: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&2;} bash_cv_wexitstatus_offset=0 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19440,9 +20381,7 @@ else $as_nop #include int -main(c, v) - int c; - char **v; +main(int c, char **v) { pid_t pid, p; int s, i, n; @@ -19472,13 +20411,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_wexitstatus_offset=0 -else $as_nop - bash_cv_wexitstatus_offset=$? +else case e in #( + e) bash_cv_wexitstatus_offset=$? ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi if test "$bash_cv_wexitstatus_offset" -gt 32 ; then @@ -19500,8 +20442,8 @@ printf %s "checking for struct timespec in ... " >&6; } if test ${bash_cv_sys_struct_timespec_in_time_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19516,10 +20458,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_sys_struct_timespec_in_time_h=yes -else $as_nop - bash_cv_sys_struct_timespec_in_time_h=no +else case e in #( + e) bash_cv_sys_struct_timespec_in_time_h=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_time_h" >&5 printf "%s\n" "$bash_cv_sys_struct_timespec_in_time_h" >&6; } @@ -19540,8 +20484,8 @@ printf %s "checking for struct timespec in ... " >&6; } if test ${bash_cv_sys_struct_timespec_in_sys_time_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19556,10 +20500,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_sys_struct_timespec_in_sys_time_h=yes -else $as_nop - bash_cv_sys_struct_timespec_in_sys_time_h=no +else case e in #( + e) bash_cv_sys_struct_timespec_in_sys_time_h=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_sys_time_h" >&5 printf "%s\n" "$bash_cv_sys_struct_timespec_in_sys_time_h" >&6; } @@ -19575,8 +20521,8 @@ printf %s "checking for struct timespec in ... " >&6; } if test ${bash_cv_sys_struct_timespec_in_pthread_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19591,10 +20537,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_sys_struct_timespec_in_pthread_h=yes -else $as_nop - bash_cv_sys_struct_timespec_in_pthread_h=no +else case e in #( + e) bash_cv_sys_struct_timespec_in_pthread_h=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_pthread_h" >&5 printf "%s\n" "$bash_cv_sys_struct_timespec_in_pthread_h" >&6; } @@ -19629,8 +20577,8 @@ printf %s "checking whether struct stat.st_atim is of type struct timespec... " if test ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19655,10 +20603,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes -else $as_nop - ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no +else case e in #( + e) ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5 printf "%s\n" "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } @@ -19667,8 +20617,8 @@ printf "%s\n" "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } printf "%s\n" "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h fi -else $as_nop - ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include +else case e in #( + e) ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include #include " if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes @@ -19677,8 +20627,8 @@ then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1" >>confdefs.h -else $as_nop - ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include +else case e in #( + e) ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include #include " if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes @@ -19687,8 +20637,8 @@ then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1" >>confdefs.h -else $as_nop - ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include +else case e in #( + e) ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include #include " if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes @@ -19697,61 +20647,154 @@ then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1" >>confdefs.h -fi +fi + ;; +esac +fi + ;; +esac +fi + ;; +esac +fi + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sbrk" >&5 +printf %s "checking for sbrk... " >&6; } + if test ${ac_cv_func_sbrk+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ + void *x = sbrk (4096); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_func_sbrk=yes +else case e in #( + e) ac_cv_func_sbrk=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; +esac +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_sbrk" >&5 +printf "%s\n" "$ac_cv_func_sbrk" >&6; } + if test X$ac_cv_func_sbrk = Xyes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working sbrk" >&5 +printf %s "checking for working sbrk... " >&6; } +if test ${bash_cv_func_sbrk+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check working sbrk if cross-compiling" >&5 +printf "%s\n" "$as_me: WARNING: cannot check working sbrk if cross-compiling" >&2;} + bash_cv_func_sbrk=yes + +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main(int c, char **v) +{ + void *x; + + x = sbrk (4096); + exit ((x == (void *)-1) ? 1 : 0); +} +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + bash_cv_func_sbrk=yes +else case e in #( + e) bash_cv_func_sbrk=no ;; +esac fi - +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sbrk" >&5 +printf "%s\n" "$bash_cv_func_sbrk" >&6; } + if test $bash_cv_func_sbrk = no; then + ac_cv_func_sbrk=no + fi + fi + if test $ac_cv_func_sbrk = yes; then +printf "%s\n" "#define HAVE_SBRK 1" >>confdefs.h + fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sbrk" >&5 -printf %s "checking for sbrk... " >&6; } - if test ${ac_cv_func_sbrk+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for brk" >&5 +printf %s "checking for brk... " >&6; } + if test ${ac_cv_func_brk+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { - void *x = sbrk (4096); + void *x = brk (0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : - ac_cv_func_sbrk=yes -else $as_nop - ac_cv_func_sbrk=no + ac_cv_func_brk=yes +else case e in #( + e) ac_cv_func_brk=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_sbrk" >&5 -printf "%s\n" "$ac_cv_func_sbrk" >&6; } - if test X$ac_cv_func_sbrk = Xyes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working sbrk" >&5 -printf %s "checking for working sbrk... " >&6; } -if test ${bash_cv_func_sbrk+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_brk" >&5 +printf "%s\n" "$ac_cv_func_brk" >&6; } + if test X$ac_cv_func_brk = Xyes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working brk" >&5 +printf %s "checking for working brk... " >&6; } +if test ${bash_cv_func_brk+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check working sbrk if cross-compiling" >&5 -printf "%s\n" "$as_me: WARNING: cannot check working sbrk if cross-compiling" >&2;} - bash_cv_func_sbrk=yes + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check working brk if cross-compiling" >&5 +printf "%s\n" "$as_me: WARNING: cannot check working brk if cross-compiling" >&2;} + bash_cv_func_brk=yes -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19762,31 +20805,34 @@ main(int c, char **v) { void *x; - x = sbrk (4096); + x = brk (0); exit ((x == (void *)-1) ? 1 : 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : - bash_cv_func_sbrk=yes -else $as_nop - bash_cv_func_sbrk=no + bash_cv_func_brk=yes +else case e in #( + e) bash_cv_func_brk=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sbrk" >&5 -printf "%s\n" "$bash_cv_func_sbrk" >&6; } - if test $bash_cv_func_sbrk = no; then - ac_cv_func_sbrk=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_brk" >&5 +printf "%s\n" "$bash_cv_func_brk" >&6; } + if test $bash_cv_func_brk = no; then + ac_cv_func_brk=no fi fi - if test $ac_cv_func_sbrk = yes; then + if test $ac_cv_func_brk = yes; then -printf "%s\n" "#define HAVE_SBRK 1" >>confdefs.h +printf "%s\n" "#define HAVE_BRK 1" >>confdefs.h fi @@ -19796,8 +20842,8 @@ printf %s "checking for the existence of strsignal... " >&6; } if test ${bash_cv_have_strsignal+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -19813,11 +20859,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_have_strsignal=yes -else $as_nop - bash_cv_have_strsignal=no +else case e in #( + e) bash_cv_have_strsignal=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_strsignal" >&5 @@ -19832,15 +20880,15 @@ printf %s "checking if opendir() opens non-directories... " >&6; } if test ${bash_cv_opendir_not_robust+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&2;} bash_cv_opendir_not_robust=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19891,13 +20939,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_opendir_not_robust=yes -else $as_nop - bash_cv_opendir_not_robust=no +else case e in #( + e) bash_cv_opendir_not_robust=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_opendir_not_robust" >&5 @@ -19912,15 +20963,15 @@ printf %s "checking whether ulimit can substitute for getdtablesize... " >&6; } if test ${bash_cv_ulimit_maxfds+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&2;} bash_cv_ulimit_maxfds=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19938,13 +20989,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_ulimit_maxfds=yes -else $as_nop - bash_cv_ulimit_maxfds=no +else case e in #( + e) bash_cv_ulimit_maxfds=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_ulimit_maxfds" >&5 @@ -19964,8 +21018,9 @@ fi if test "x$ac_cv_have_decl_fpurge" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_FPURGE $ac_have_decl" >>confdefs.h @@ -19975,33 +21030,23 @@ printf %s "checking to see if getenv can be redefined... " >&6; } if test ${bash_cv_getenv_redef+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&5 printf "%s\n" "$as_me: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&2;} bash_cv_getenv_redef=yes -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_UNISTD_H # include #endif #include -#ifndef __STDC__ -# ifndef const -# define const -# endif -#endif char * -getenv (name) -#if defined (__linux__) || defined (__bsdi__) || defined (convex) - const char *name; -#else - char const *name; -#endif /* !__linux__ && !__bsdi__ && !convex */ +getenv (const char *name) { return "42"; } @@ -20023,13 +21068,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_getenv_redef=yes -else $as_nop - bash_cv_getenv_redef=no +else case e in #( + e) bash_cv_getenv_redef=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getenv_redef" >&5 @@ -20045,15 +21093,15 @@ printf %s "checking if getcwd() will dynamically allocate memory with 0 size... if test ${bash_cv_getcwd_malloc+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&2;} bash_cv_getcwd_malloc=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -20074,13 +21122,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_getcwd_malloc=yes -else $as_nop - bash_cv_getcwd_malloc=no +else case e in #( + e) bash_cv_getcwd_malloc=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getcwd_malloc" >&5 @@ -20097,14 +21148,16 @@ esac fi fi +printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5 printf %s "checking for presence of POSIX-style sigsetjmp/siglongjmp... " >&6; } if test ${bash_cv_func_sigsetjmp+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to $bash_cv_posix_signals" >&5 printf "%s\n" "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to $bash_cv_posix_signals" >&2;} @@ -20114,8 +21167,8 @@ printf "%s\n" "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-c bash_cv_func_sigsetjmp=missing fi -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_UNISTD_H @@ -20171,13 +21224,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_func_sigsetjmp=present -else $as_nop - bash_cv_func_sigsetjmp=missing +else case e in #( + e) bash_cv_func_sigsetjmp=missing ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sigsetjmp" >&5 @@ -20192,15 +21248,15 @@ printf %s "checking whether or not strcoll and strcmp differ... " >&6; } if test ${bash_cv_func_strcoll_broken+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&2;} bash_cv_func_strcoll_broken=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -20211,9 +21267,7 @@ else $as_nop #include int -main(c, v) -int c; -char *v[]; +main(int c, char **v) { int r1, r2; char *deflocale, *defcoll; @@ -20245,13 +21299,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_func_strcoll_broken=yes -else $as_nop - bash_cv_func_strcoll_broken=no +else case e in #( + e) bash_cv_func_strcoll_broken=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strcoll_broken" >&5 @@ -20270,15 +21327,15 @@ printf %s "checking for standard-conformant snprintf... " >&6; } if test ${bash_cv_func_snprintf+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard snprintf if cross-compiling" >&5 printf "%s\n" "$as_me: WARNING: cannot check standard snprintf if cross-compiling" >&2;} bash_cv_func_snprintf=yes -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -20296,13 +21353,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_func_snprintf=yes -else $as_nop - bash_cv_func_snprintf=no +else case e in #( + e) bash_cv_func_snprintf=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_snprintf" >&5 printf "%s\n" "$bash_cv_func_snprintf" >&6; } @@ -20325,42 +21385,28 @@ printf %s "checking for standard-conformant vsnprintf... " >&6; } if test ${bash_cv_func_vsnprintf+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard vsnprintf if cross-compiling" >&5 printf "%s\n" "$as_me: WARNING: cannot check standard vsnprintf if cross-compiling" >&2;} bash_cv_func_vsnprintf=yes -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if HAVE_STDARG_H #include -#else -#include -#endif #include #include static int -#if HAVE_STDARG_H foo(const char *fmt, ...) -#else -foo(format, va_alist) - const char *format; - va_dcl -#endif { va_list args; int n; -#if HAVE_STDARG_H va_start(args, fmt); -#else - va_start(args); -#endif n = vsnprintf(0, 0, fmt, args); va_end (args); return n; @@ -20377,93 +21423,247 @@ main() _ACEOF if ac_fn_c_try_run "$LINENO" then : - bash_cv_func_vsnprintf=yes -else $as_nop - bash_cv_func_vsnprintf=no + bash_cv_func_vsnprintf=yes +else case e in #( + e) bash_cv_func_vsnprintf=no ;; +esac +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac +fi + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_vsnprintf" >&5 +printf "%s\n" "$bash_cv_func_vsnprintf" >&6; } + if test $bash_cv_func_vsnprintf = no; then + ac_cv_func_vsnprintf=no + fi + fi + if test $ac_cv_func_vsnprintf = no; then + +printf "%s\n" "#define HAVE_VSNPRINTF 0" >>confdefs.h + + fi + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for usable strtoimax" >&5 +printf %s "checking for usable strtoimax... " >&6; } +if test ${bash_cv_func_strtoimax+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) + HAVE_STRTOIMAX=0 HAVE_DECL_STRTOIMAX=0 + + ac_fn_c_check_func "$LINENO" "strtoimax" "ac_cv_func_strtoimax" +if test "x$ac_cv_func_strtoimax" = xyes +then : + printf "%s\n" "#define HAVE_STRTOIMAX 1" >>confdefs.h + +fi + + ac_fn_check_decl "$LINENO" "strtoimax" "ac_cv_have_decl_strtoimax" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strtoimax" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_STRTOIMAX $ac_have_decl" >>confdefs.h + + + if test "$ac_cv_func_strtoimax" = "yes" ; then + HAVE_STRTOIMAX=1 + fi + if test "$ac_cv_have_decl_strtoimax" = "yes" ; then + HAVE_DECL_STRTOIMAX=1 + fi + if test "$HAVE_STRTOIMAX" = 0 || test "$HAVE_DECL_STRTOIMAX" = 0 ; then + bash_cv_func_strtoimax=no REPLACE_STRTOIMAX=1 + else + bash_cv_func_strtoimax=yes + fi + ;; +esac +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strtoimax" >&5 +printf "%s\n" "$bash_cv_func_strtoimax" >&6; } +if test "$ac_cv_have_decl_strtoimax" = "yes" ; then +printf "%s\n" "#define HAVE_DECL_STRTOIMAX 1" >>confdefs.h + +fi +if test $bash_cv_func_strtoimax = no; then +case " $LIBOBJS " in + *" strtoimax.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strtoimax.$ac_objext" + ;; +esac + +fi + +ac_fn_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_CLEARERR_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_feof_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "ferror_unlocked" "ac_cv_have_decl_ferror_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_ferror_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_FERROR_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_fflush_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_FFLUSH_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_fgets_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "fputc_unlocked" "ac_cv_have_decl_fputc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_fputc_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_FPUTC_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_fputs_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_FPUTS_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_fread_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_FREAD_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "fwrite_unlocked" "ac_cv_have_decl_fwrite_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_fwrite_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_getc_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac +fi +printf "%s\n" "#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_getchar_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +printf "%s\n" "#define HAVE_DECL_GETCHAR_UNLOCKED $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_putc_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac fi +printf "%s\n" "#define HAVE_DECL_PUTC_UNLOCKED $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "putchar_unlocked" "ac_cv_have_decl_putchar_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_putchar_unlocked" = xyes +then : + ac_have_decl=1 +else case e in #( + e) ac_have_decl=0 ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_vsnprintf" >&5 -printf "%s\n" "$bash_cv_func_vsnprintf" >&6; } - if test $bash_cv_func_vsnprintf = no; then - ac_cv_func_vsnprintf=no - fi - fi - if test $ac_cv_func_vsnprintf = no; then +printf "%s\n" "#define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl" >>confdefs.h -printf "%s\n" "#define HAVE_VSNPRINTF 0" >>confdefs.h - fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for usable strtoimax" >&5 -printf %s "checking for usable strtoimax... " >&6; } -if test ${bash_cv_func_strtoimax+y} -then : - printf %s "(cached) " >&6 -else $as_nop - HAVE_STRTOIMAX=0 HAVE_DECL_STRTOIMAX=0 - ac_fn_c_check_func "$LINENO" "strtoimax" "ac_cv_func_strtoimax" -if test "x$ac_cv_func_strtoimax" = xyes -then : - printf "%s\n" "#define HAVE_STRTOIMAX 1" >>confdefs.h -fi - ac_fn_check_decl "$LINENO" "strtoimax" "ac_cv_have_decl_strtoimax" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_strtoimax" = xyes -then : - ac_have_decl=1 -else $as_nop - ac_have_decl=0 -fi -printf "%s\n" "#define HAVE_DECL_STRTOIMAX $ac_have_decl" >>confdefs.h - if test "$ac_cv_func_strtoimax" = "yes" ; then - HAVE_STRTOIMAX=1 - fi - if test "$ac_cv_have_decl_strtoimax" = "yes" ; then - HAVE_DECL_STRTOIMAX=1 - fi - if test "$HAVE_STRTOIMAX" = 0 || test "$HAVE_DECL_STRTOIMAX" = 0 ; then - bash_cv_func_strtoimax=no REPLACE_STRTOIMAX=1 - else - bash_cv_func_strtoimax=yes - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strtoimax" >&5 -printf "%s\n" "$bash_cv_func_strtoimax" >&6; } -if test $bash_cv_func_strtoimax = yes; then -case " $LIBOBJS " in - *" strtoimax.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strtoimax.$ac_objext" - ;; -esac -fi -if test "$ac_cv_func_putenv" = "yes"; then +if test "$ac_cv_func_putenv" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant putenv declaration" >&5 printf %s "checking for standard-conformant putenv declaration... " >&6; } if test ${bash_cv_std_putenv+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_STDLIB_H @@ -20472,16 +21672,7 @@ else $as_nop #if HAVE_STDDEF_H #include #endif -#ifndef __STDC__ -# ifndef const -# define const -# endif -#endif -#ifdef PROTOTYPES extern int putenv (char *); -#else -extern int putenv (); -#endif int main (void) @@ -20494,12 +21685,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_std_putenv=yes -else $as_nop - bash_cv_std_putenv=no - +else case e in #( + e) bash_cv_std_putenv=no + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_putenv" >&5 printf "%s\n" "$bash_cv_std_putenv" >&6; } @@ -20514,14 +21707,13 @@ printf "%s\n" "#define HAVE_STD_PUTENV 1" >>confdefs.h fi if test "$ac_cv_func_unsetenv" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant unsetenv declaration" >&5 printf %s "checking for standard-conformant unsetenv declaration... " >&6; } if test ${bash_cv_std_unsetenv+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_STDLIB_H @@ -20530,16 +21722,7 @@ else $as_nop #if HAVE_STDDEF_H #include #endif -#ifndef __STDC__ -# ifndef const -# define const -# endif -#endif -#ifdef PROTOTYPES extern int unsetenv (const char *); -#else -extern int unsetenv (); -#endif int main (void) @@ -20552,12 +21735,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : bash_cv_std_unsetenv=yes -else $as_nop - bash_cv_std_unsetenv=no - +else case e in #( + e) bash_cv_std_unsetenv=no + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_unsetenv" >&5 printf "%s\n" "$bash_cv_std_unsetenv" >&6; } @@ -20576,15 +21761,15 @@ printf %s "checking for printf floating point output in hex notation... " >&6; } if test ${bash_cv_printf_a_format+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check printf if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check printf if cross compiling -- defaulting to no" >&2;} bash_cv_printf_a_format=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -20605,13 +21790,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_printf_a_format=yes -else $as_nop - bash_cv_printf_a_format=no +else case e in #( + e) bash_cv_printf_a_format=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_printf_a_format" >&5 @@ -20627,15 +21815,15 @@ printf %s "checking whether fnmatch can be used to check bracket equivalence cla if test ${bash_cv_fnmatch_equiv_fallback+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&2;} bash_cv_fnmatch_equiv_fallback=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -20662,13 +21850,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_fnmatch_equiv_fallback=yes -else $as_nop - bash_cv_fnmatch_equiv_fallback=no +else case e in #( + e) bash_cv_fnmatch_equiv_fallback=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fnmatch_equiv_fallback" >&5 @@ -20689,15 +21880,15 @@ printf %s "checking if signal handlers must be reinstalled when invoked... " >&6 if test ${bash_cv_must_reinstall_sighandlers+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&2;} bash_cv_must_reinstall_sighandlers=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -20706,15 +21897,13 @@ else $as_nop #endif #include -typedef void sigfunc(); +typedef void sigfunc(int); volatile int nsigint; #ifdef HAVE_POSIX_SIGNALS sigfunc * -set_signal_handler(sig, handler) - int sig; - sigfunc *handler; +set_signal_handler(int sig, sigfunc *handler) { struct sigaction act, oact; act.sa_handler = handler; @@ -20729,8 +21918,7 @@ set_signal_handler(sig, handler) #endif void -sigint(s) -int s; +sigint(int s) { nsigint++; } @@ -20749,13 +21937,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_must_reinstall_sighandlers=no -else $as_nop - bash_cv_must_reinstall_sighandlers=yes +else case e in #( + e) bash_cv_must_reinstall_sighandlers=yes ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_must_reinstall_sighandlers" >&5 @@ -20771,8 +21962,8 @@ printf %s "checking for presence of necessary job control definitions... " >&6; if test ${bash_cv_job_control_missing+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -20827,11 +22018,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_job_control_missing=present -else $as_nop - bash_cv_job_control_missing=missing - +else case e in #( + e) bash_cv_job_control_missing=missing + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_job_control_missing" >&5 @@ -20846,15 +22039,15 @@ printf %s "checking for presence of named pipes... " >&6; } if test ${bash_cv_sys_named_pipes+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&5 printf "%s\n" "$as_me: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&2;} bash_cv_sys_named_pipes=missing -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -20902,13 +22095,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_sys_named_pipes=present -else $as_nop - bash_cv_sys_named_pipes=missing +else case e in #( + e) bash_cv_sys_named_pipes=missing ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_named_pipes" >&5 @@ -20924,25 +22120,23 @@ printf %s "checking whether termios.h defines TIOCGWINSZ... " >&6; } if test ${ac_cv_sys_tiocgwinsz_in_termios_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +$ac_includes_default #include -#ifdef TIOCGWINSZ - yes -#endif +const int tiocgwinsz = TIOCGWINSZ; _ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1 +if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_tiocgwinsz_in_termios_h=yes -else $as_nop - ac_cv_sys_tiocgwinsz_in_termios_h=no +else case e in #( + e) ac_cv_sys_tiocgwinsz_in_termios_h=no ;; +esac fi -rm -rf conftest* - +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 printf "%s\n" "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } @@ -20953,25 +22147,23 @@ printf %s "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } if test ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +$ac_includes_default #include -#ifdef TIOCGWINSZ - yes -#endif +const int tiocgwinsz = TIOCGWINSZ; _ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1 +if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes -else $as_nop - ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no +else case e in #( + e) ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no ;; +esac fi -rm -rf conftest* - +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 printf "%s\n" "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } @@ -20988,8 +22180,8 @@ printf %s "checking for TIOCSTAT in sys/ioctl.h... " >&6; } if test ${bash_cv_tiocstat_in_ioctl+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -21005,11 +22197,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_tiocstat_in_ioctl=yes -else $as_nop - bash_cv_tiocstat_in_ioctl=no - +else case e in #( + e) bash_cv_tiocstat_in_ioctl=no + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_tiocstat_in_ioctl" >&5 @@ -21024,8 +22218,8 @@ printf %s "checking for FIONREAD in sys/ioctl.h... " >&6; } if test ${bash_cv_fionread_in_ioctl+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -21041,11 +22235,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_fionread_in_ioctl=yes -else $as_nop - bash_cv_fionread_in_ioctl=no - +else case e in #( + e) bash_cv_fionread_in_ioctl=no + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fionread_in_ioctl" >&5 @@ -21062,15 +22258,15 @@ printf %s "checking whether WCONTINUED flag to waitpid is unavailable or availab if test ${bash_cv_wcontinued_broken+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&5 printf "%s\n" "$as_me: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&2;} bash_cv_wcontinued_broken=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -21098,13 +22294,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_wcontinued_broken=no -else $as_nop - bash_cv_wcontinued_broken=yes +else case e in #( + e) bash_cv_wcontinued_broken=yes ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcontinued_broken" >&5 @@ -21120,8 +22319,8 @@ printf %s "checking for speed_t in sys/types.h... " >&6; } if test ${bash_cv_speed_t_in_sys_types+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -21135,10 +22334,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_speed_t_in_sys_types=yes -else $as_nop - bash_cv_speed_t_in_sys_types=no +else case e in #( + e) bash_cv_speed_t_in_sys_types=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_speed_t_in_sys_types" >&5 @@ -21153,8 +22354,8 @@ printf %s "checking whether getpw functions are declared in pwd.h... " >&6; } if test ${bash_cv_getpw_declared+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -21165,14 +22366,16 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "getpwuid" >/dev/null 2>&1 + $EGREP_TRADITIONAL "getpwuid" >/dev/null 2>&1 then : bash_cv_getpw_declared=yes -else $as_nop - bash_cv_getpw_declared=no +else case e in #( + e) bash_cv_getpw_declared=no ;; +esac fi rm -rf conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getpw_declared" >&5 @@ -21187,15 +22390,15 @@ printf %s "checking for unusable real-time signals due to large values... " >&6; if test ${bash_cv_unusable_rtsigs+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&5 printf "%s\n" "$as_me: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&2;} bash_cv_unusable_rtsigs=yes -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -21223,13 +22426,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : bash_cv_unusable_rtsigs=yes -else $as_nop - bash_cv_unusable_rtsigs=no +else case e in #( + e) bash_cv_unusable_rtsigs=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_unusable_rtsigs" >&5 @@ -21257,12 +22463,12 @@ printf %s "checking whether $host_os needs _KERNEL for RLIMIT defines... " >&6; if test ${bash_cv_kernel_rlimit+y} then : printf %s "(cached) " >&6 -else $as_nop - if test ${bash_cv_rlimit+y} +else case e in #( + e) if test ${bash_cv_rlimit+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -21282,11 +22488,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_rlimit=yes -else $as_nop - bash_cv_rlimit=no - +else case e in #( + e) bash_cv_rlimit=no + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi @@ -21313,12 +22521,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : bash_cv_kernel_rlimit=yes -else $as_nop - bash_cv_kernel_rlimit=no +else case e in #( + e) bash_cv_kernel_rlimit=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_kernel_rlimit" >&5 @@ -21345,27 +22555,33 @@ fi if test ${bash_cv_termcap_lib+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent" +else case e in #( + e) ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent" if test "x$ac_cv_func_tgetent" = xyes then : bash_cv_termcap_lib=libc -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 printf %s "checking for tgetent in -ltermcap... " >&6; } if test ${ac_cv_lib_termcap_tgetent+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ltermcap $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); int main (void) { @@ -21377,34 +22593,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_termcap_tgetent=yes -else $as_nop - ac_cv_lib_termcap_tgetent=no +else case e in #( + e) ac_cv_lib_termcap_tgetent=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 printf "%s\n" "$ac_cv_lib_termcap_tgetent" >&6; } if test "x$ac_cv_lib_termcap_tgetent" = xyes then : bash_cv_termcap_lib=libtermcap -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 printf %s "checking for tgetent in -ltinfo... " >&6; } if test ${ac_cv_lib_tinfo_tgetent+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ltinfo $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); int main (void) { @@ -21416,34 +22640,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_tinfo_tgetent=yes -else $as_nop - ac_cv_lib_tinfo_tgetent=no +else case e in #( + e) ac_cv_lib_tinfo_tgetent=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5 printf "%s\n" "$ac_cv_lib_tinfo_tgetent" >&6; } if test "x$ac_cv_lib_tinfo_tgetent" = xyes then : bash_cv_termcap_lib=libtinfo -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 printf %s "checking for tgetent in -lcurses... " >&6; } if test ${ac_cv_lib_curses_tgetent+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); int main (void) { @@ -21455,34 +22687,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_tgetent=yes -else $as_nop - ac_cv_lib_curses_tgetent=no +else case e in #( + e) ac_cv_lib_curses_tgetent=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5 printf "%s\n" "$ac_cv_lib_curses_tgetent" >&6; } if test "x$ac_cv_lib_curses_tgetent" = xyes then : bash_cv_termcap_lib=libcurses -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 printf %s "checking for tgetent in -lncurses... " >&6; } if test ${ac_cv_lib_ncurses_tgetent+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); int main (void) { @@ -21494,34 +22734,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ncurses_tgetent=yes -else $as_nop - ac_cv_lib_ncurses_tgetent=no +else case e in #( + e) ac_cv_lib_ncurses_tgetent=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 printf "%s\n" "$ac_cv_lib_ncurses_tgetent" >&6; } if test "x$ac_cv_lib_ncurses_tgetent" = xyes then : bash_cv_termcap_lib=libncurses -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5 printf %s "checking for tgetent in -lncursesw... " >&6; } if test ${ac_cv_lib_ncursesw_tgetent+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lncursesw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char tgetent (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char tgetent (void); int main (void) { @@ -21533,32 +22781,41 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ncursesw_tgetent=yes -else $as_nop - ac_cv_lib_ncursesw_tgetent=no +else case e in #( + e) ac_cv_lib_ncursesw_tgetent=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5 printf "%s\n" "$ac_cv_lib_ncursesw_tgetent" >&6; } if test "x$ac_cv_lib_ncursesw_tgetent" = xyes then : bash_cv_termcap_lib=libncursesw -else $as_nop - bash_cv_termcap_lib=gnutermcap +else case e in #( + e) bash_cv_termcap_lib=gnutermcap ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi if test "X$_bash_needmsg" = "Xyes"; then @@ -21580,6 +22837,9 @@ TERMCAP_DEP= elif test $bash_cv_termcap_lib = libncurses; then TERMCAP_LIB=-lncurses TERMCAP_DEP= +elif test $bash_cv_termcap_lib = libcurses; then +TERMCAP_LIB=-lcurses +TERMCAP_DEP= elif test $bash_cv_termcap_lib = libc; then TERMCAP_LIB= TERMCAP_DEP= @@ -21598,15 +22858,17 @@ printf %s "checking whether /dev/fd is available... " >&6; } if test ${bash_cv_dev_fd+y} then : printf %s "(cached) " >&6 -else $as_nop - bash_cv_dev_fd="" -if test -d /dev/fd && (exec test -r /dev/fd/0 < /dev/null) ; then +else case e in #( + e) bash_cv_dev_fd="" +if test -d /dev/fd && (exec test -r /dev/fd/0 < /dev/null) ; then # check for systems like FreeBSD 5 that only provide /dev/fd/[012] if (exec test -r /dev/fd/3 3&5 @@ -21630,6 +22893,11 @@ elif test $bash_cv_dev_fd = "whacky"; then printf "%s\n" "#define DEV_FD_PREFIX \"/proc/self/fd/\"" >>confdefs.h +elif test $bash_cv_dev_fd = "nodir"; then + printf "%s\n" "#define HAVE_DEV_FD 1" >>confdefs.h + + printf "%s\n" "#define DEV_FD_PREFIX \"/dev/fd\"" >>confdefs.h + fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether /dev/stdin stdout stderr are available" >&5 @@ -21637,13 +22905,14 @@ printf %s "checking whether /dev/stdin stdout stderr are available... " >&6; } if test ${bash_cv_dev_stdin+y} then : printf %s "(cached) " >&6 -else $as_nop - if (exec test -r /dev/stdin < /dev/null) ; then +else case e in #( + e) if (exec test -r /dev/stdin < /dev/null) ; then bash_cv_dev_stdin=present else bash_cv_dev_stdin=absent fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dev_stdin" >&5 @@ -21658,8 +22927,8 @@ printf %s "checking for default mail directory... " >&6; } if test ${bash_cv_mail_dir+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -d /var/mail; then +else case e in #( + e) if test -d /var/mail; then bash_cv_mail_dir=/var/mail elif test -d /var/spool/mail; then bash_cv_mail_dir=/var/spool/mail @@ -21670,7 +22939,8 @@ else $as_nop else bash_cv_mail_dir=unknown fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_mail_dir" >&5 @@ -21733,7 +23003,7 @@ freebsd*|midnightbsd*) LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;; *qnx[67]*) LOCAL_LIBS="-lncurses" ;; *qnx*) LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;; powerux*) LOCAL_LIBS="-lgen" ;; -cygwin*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; +cygwin*|msys*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO -D_POSIX_SOURCE -D_ALL_SOURCE -DRECYCLES_PIDS" ;; *openstep*) LOCAL_CFLAGS="-D__APPLE_CC__" ;; esac @@ -21751,7 +23021,9 @@ freebsd[3-9]*) if test -x /usr/bin/objformat && test "`/usr/bin/objformat`" = "elf" ; then LOCAL_LDFLAGS=-rdynamic # allow dynamic loading fi ;; -freebsdelf*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading +freebsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading +openbsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading +netbsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading dragonfly*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading midnightbsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading esac @@ -21869,6 +23141,14 @@ ac_config_files="$ac_config_files Makefile builtins/Makefile lib/readline/Makefi ac_config_commands="$ac_config_commands stamp-h" +if test "$ac_cv_header_stdckdint_h" = yes; then + rm -f stdckdint.h +elif cmp ${srcdir}/include/stdckdint.in.h stdckdint.h 2>/dev/null; then + : +else + cp ${srcdir}/include/stdckdint.in.h stdckdint.h +fi + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -21879,8 +23159,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -21910,14 +23190,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -21978,6 +23258,12 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs +# Check whether --enable-year2038 was given. +if test ${enable_year2038+y} +then : + enableval=$enable_year2038; +fi + : "${CONFIG_STATUS=./config.status}" @@ -22008,7 +23294,6 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -22017,12 +23302,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -22094,7 +23380,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -22123,7 +23409,6 @@ as_fn_error () } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -22163,11 +23448,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -22181,11 +23467,12 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -22268,9 +23555,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -22351,10 +23638,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 @@ -22369,8 +23658,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bash $as_me 5.2-release, which was -generated by GNU Autoconf 2.71. Invocation command line was +This file was extended by bash $as_me 5.3-alpha, which was +generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -22402,7 +23691,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions +'$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -22437,11 +23726,11 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -bash config.status 5.2-release -configured by $0, generated by GNU Autoconf 2.71, +bash config.status 5.3-alpha +configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -22502,8 +23791,8 @@ do ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; + as_fn_error $? "ambiguous option: '$1' +Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ @@ -22511,8 +23800,8 @@ Try \`$0 --help' for more information.";; ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: '$1' +Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -22592,7 +23881,7 @@ do "support/bashbug.sh") CONFIG_FILES="$CONFIG_FILES support/bashbug.sh" ;; "stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done @@ -22612,7 +23901,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. +# after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= @@ -22636,7 +23925,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. +# This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -22794,13 +24083,13 @@ fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. +# This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF -# Transform confdefs.h into an awk script `defines.awk', embedded as +# Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. @@ -22910,7 +24199,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -22932,19 +24221,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. + # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is `configure' which instantiates (i.e., don't + # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -23077,7 +24366,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when `$srcdir' = `.'. +# Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -23108,9 +24397,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -23235,7 +24524,9 @@ printf "%s\n" "$as_me: executing $ac_file commands" >&6;} # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in - "$presentlang"*) useit=yes;; + "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) + useit=yes + ;; esac done if test $useit = yes; then diff --git a/configure.ac b/configure.ac index 50a6e2016..7382ea96a 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ dnl -dnl Configure script for bash-5.2 +dnl Configure script for bash-5.3 dnl -dnl report bugs to chet@po.cwru.edu +dnl report bugs to chet.ramey@case.edu dnl dnl Process this file with autoconf to produce a configure script. -# Copyright (C) 1987-2022 Free Software Foundation, Inc. +# Copyright (C) 1987-2024 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify @@ -21,10 +21,10 @@ dnl Process this file with autoconf to produce a configure script. # You should have received a copy of the GNU General Public License # along with this program. If not, see . -AC_REVISION([for Bash 5.2, version 5.046])dnl +AC_REVISION([for Bash 5.3, version 5.063])dnl -define(bashvers, 5.2) -define(relstatus, release) +define(bashvers, 5.3) +define(relstatus, alpha) AC_INIT([bash], bashvers-relstatus, [bug-bash@gnu.org]) @@ -76,7 +76,7 @@ m68k-sysv) opt_bash_malloc=no ;; # fixes file descriptor leak in closedir # These need additional investigation sparc-linux*) opt_bash_malloc=no ;; # sparc running linux; requires ELF *-aix*) opt_bash_malloc=no ;; # AIX machines -*-cygwin*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment +*-cygwin*|msys*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment # These lack a working sbrk(2) aarch64-freebsd*) opt_bash_malloc=no ;; riscv*-freebsd*) opt_bash_malloc=no ;; @@ -92,6 +92,8 @@ riscv*-freebsd*) opt_bash_malloc=no ;; *-nsk*) opt_bash_malloc=no ;; # HP NonStop *-haiku*) opt_bash_malloc=no ;; # Haiku OS *-genode*) opt_bash_malloc=no ;; # Genode has no sbrk +i370-openedition*) opt_bash_malloc=no LOCAL_LIBS=-lzoslib LIBS_FOR_BUILD=-lzoslib ;; # IBM z/OS machines +i370-*) opt_bash_malloc=no ;; # generic (?) IBM 370 machines esac # memory scrambling on free() @@ -462,6 +464,9 @@ if test "x$cross_compiling" = "xyes"; then *-cygwin*) cross_cache=${srcdir}/cross-build/cygwin32.cache ;; + *-msys*) + cross_cache=${srcdir}/cross-build/msys32.cache + ;; *-mingw*) cross_cache=${srcdir}/cross-build/cygwin32.cache ;; @@ -513,7 +518,8 @@ if test "$opt_static_link" = yes; then if test "$GCC" = "yes"; then STATIC_LD="-static" case "$host_os" in - solaris2*|linux*) ;; + solaris2*) ;; + linux*) test "$opt_profiling" = "no" && LDFLAGS="$LDFLAGS -static" ;; *) LDFLAGS="$LDFLAGS -static" ;; # XXX experimental esac fi @@ -562,7 +568,8 @@ AC_SUBST(CPPFLAGS_FOR_BUILD) AC_SUBST(LDFLAGS_FOR_BUILD) AC_SUBST(LIBS_FOR_BUILD) -AC_PROG_GCC_TRADITIONAL +dnl This macro is obsolete +dnl AC_PROG_GCC_TRADITIONAL dnl BEGIN READLINE and HISTORY LIBRARY SECTION dnl prepare to allow bash to be linked against an already-installed readline @@ -602,7 +609,7 @@ if test $opt_readline = yes; then # section for OS versions that don't allow unresolved symbols # to be compiled into dynamic libraries. case "$host_os" in - cygwin*) TILDE_LIB= ;; + cygwin*|msys*) TILDE_LIB= ;; esac else RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' @@ -714,16 +721,18 @@ m4_include([m4/stat-time.m4]) m4_include([m4/timespec.m4]) m4_include([m4/strtoimax.m4]) +m4_include([m4/unlocked-io.m4]) dnl include files for gettext m4_include([m4/codeset.m4]) m4_include([m4/extern-inline.m4]) + +m4_include([m4/bison.m4]) m4_include([m4/fcntl-o.m4]) +m4_include([m4/flexmember.m4]) m4_include([m4/gettext.m4]) m4_include([m4/glibc2.m4]) -m4_include([m4/glibc21.m4]) -m4_include([m4/host-cpu-c-abi.m4]) m4_include([m4/iconv.m4]) m4_include([m4/intdiv0.m4]) m4_include([m4/intl.m4]) @@ -737,6 +746,7 @@ m4_include([m4/lcmessage.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) +m4_include([m4/locale_h.m4]) m4_include([m4/lock.m4]) m4_include([m4/nls.m4]) m4_include([m4/po.m4]) @@ -753,19 +763,26 @@ m4_include([m4/wchar_t.m4]) m4_include([m4/wint_t.m4]) m4_include([m4/xsize.m4]) +m4_include([m4/glibc21.m4]) +m4_include([m4/host-cpu-c-abi.m4]) + +m4_include([m4/c-bool.m4]) + dnl C compiler characteristics AC_C_CONST AC_C_INLINE AC_C_BIGENDIAN AC_C_STRINGIZE AC_TYPE_LONG_DOUBLE -AC_C_PROTOTYPES AC_C_CHAR_UNSIGNED AC_C_VOLATILE AC_C_RESTRICT +gl_C_BOOL + dnl initialize GNU gettext -BASH_GNU_GETTEXT([no-libtool], [need-ngettext], [lib/intl]) +dnl the use-libtool is a lie, we just use the standard Unix tools +BASH_GNU_GETTEXT([use-libtool], [need-ngettext], [lib/intl]) dnl header files AC_HEADER_DIRENT @@ -773,9 +790,10 @@ AC_HEADER_MAJOR BASH_HEADER_INTTYPES -AC_CHECK_HEADERS(unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \ +AC_CHECK_HEADERS(unistd.h stdlib.h varargs.h limits.h string.h \ memory.h locale.h termcap.h termio.h termios.h dlfcn.h \ - stdbool.h stddef.h stdint.h netdb.h pwd.h grp.h strings.h \ + stddef.h stdint.h netdb.h pwd.h grp.h strings.h \ + stdckdint.h \ regex.h syslog.h ulimit.h) AC_CHECK_HEADERS(sys/pte.h sys/stream.h sys/select.h sys/file.h sys/ioctl.h \ sys/mman.h sys/param.h sys/random.h sys/socket.h sys/stat.h \ @@ -842,12 +860,13 @@ AC_CHECK_FUNC(mkfifo, AC_DEFINE(HAVE_MKFIFO), AC_DEFINE(MKFIFO_MISSING)) dnl checks for system calls AC_CHECK_FUNCS(dup2 eaccess fcntl getdtablesize getentropy getgroups \ gethostname getpagesize getpeername getrandom getrlimit \ - getrusage gettimeofday kill killpg lstat pselect readlink \ + getrusage gettimeofday kill killpg lstat nanosleep \ + pselect readlink \ select setdtablesize setitimer tcgetpgrp uname ulimit waitpid) AC_REPLACE_FUNCS(rename) dnl checks for c library functions -AC_CHECK_FUNCS(bcopy bzero confstr faccessat fnmatch \ +AC_CHECK_FUNCS(bcopy bzero clock_gettime confstr faccessat fnmatch \ getaddrinfo gethostbyname getservbyname getservent inet_aton \ imaxdiv memmove pathconf putenv raise random regcomp regexec \ setenv setlinebuf setlocale setvbuf siginterrupt strchr \ @@ -858,6 +877,9 @@ AC_CHECK_FUNCS(isascii isblank isgraph isprint isspace isxdigit) AC_CHECK_FUNCS(getpwent getpwnam getpwuid) AC_CHECK_FUNCS(mkstemp mkdtemp) AC_CHECK_FUNCS(arc4random) +AC_CHECK_FUNCS(strlcat) + +AC_CHECK_FUNCS(memfd_create shm_open shm_mkstemp) AC_REPLACE_FUNCS(getcwd memset) AC_REPLACE_FUNCS(strcasecmp strcasestr strerror strftime strnlen strpbrk strstr) @@ -865,12 +887,15 @@ AC_REPLACE_FUNCS(strtod strtol strtoul strtoll strtoull strtoumax) AC_REPLACE_FUNCS(dprintf) AC_REPLACE_FUNCS(strchrnul) AC_REPLACE_FUNCS(strdup) +AC_REPLACE_FUNCS(strlcpy) +AC_REPLACE_FUNCS(reallocarray) AC_CHECK_HEADERS(libaudit.h) AC_CHECK_DECLS([AUDIT_USER_TTY],,, [[#include ]]) AC_CHECK_DECLS([confstr]) AC_CHECK_DECLS([printf]) +AC_CHECK_DECLS([brk]) AC_CHECK_DECLS([sbrk]) AC_CHECK_DECLS([setregid]) AC_CHECK_DECLS([strcpy]) @@ -885,7 +910,7 @@ AC_CHECK_DECLS([strtold], [ [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], - [[long double r; char *foo, bar; r = strtold(foo, &bar);]] + [[long double r; char *foo, *bar; r = strtold(foo, &bar);]] )], [bash_cv_strtold_broken=no],[bash_cv_strtold_broken=yes]) ] @@ -912,8 +937,10 @@ dnl AC_CHECK_HEADERS([argz.h errno.h fcntl.h malloc.h stdio_ext.h]) dnl AC_FUNC_MALLOC +AC_DEFINE([HAVE_MALLOC]) AC_FUNC_MMAP -AC_CHECK_FUNCS([__argz_count __argz_next __argz_stringify dcgettext mempcpy \ +AC_CHECK_FUNCS([__argz_count __argz_next __argz_stringify dcgettext \ + locale_charset mempcpy \ munmap mremap stpcpy strcspn]) INTL_DEP= INTL_INC= LIBINTL_H= @@ -921,6 +948,8 @@ if test "x$USE_INCLUDED_LIBINTL" = "xyes"; then INTL_DEP='${INTL_LIBDIR}/libintl.a' INTL_INC='-I${INTL_LIBSRC} -I${INTL_BUILDDIR}' LIBINTL_H='${INTL_BUILDDIR}/libintl.h' + + AC_DEFINE([HAVE_LOCALE_CHARSET], 1) fi AC_SUBST(INTL_DEP) AC_SUBST(INTL_INC) @@ -965,6 +994,7 @@ AC_TYPE_MODE_T AC_TYPE_UID_T AC_TYPE_PID_T AC_TYPE_SIZE_T +AC_TYPE_INTPTR_T AC_TYPE_UINTPTR_T AC_CHECK_TYPE(ssize_t, int) @@ -1054,6 +1084,7 @@ BASH_STAT_TIME dnl checks for system calls BASH_FUNC_SBRK +BASH_FUNC_BRK dnl presence and behavior of C library functions BASH_FUNC_STRSIGNAL @@ -1064,12 +1095,15 @@ BASH_FUNC_GETENV if test "$ac_cv_func_getcwd" = "yes"; then BASH_FUNC_GETCWD fi +dnl either way this is correct +AC_DEFINE([HAVE_GETCWD]) BASH_FUNC_POSIX_SETJMP BASH_FUNC_STRCOLL BASH_FUNC_SNPRINTF BASH_FUNC_VSNPRINTF BASH_FUNC_STRTOIMAX +BASH_FUNC_UNLOCKED_IO dnl If putenv or unsetenv is not present, set the right define so the dnl prototype and declaration in lib/sh/getenv.c will be standard-conformant @@ -1180,7 +1214,7 @@ freebsd*|midnightbsd*) LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;; *qnx[[67]]*) LOCAL_LIBS="-lncurses" ;; *qnx*) LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;; powerux*) LOCAL_LIBS="-lgen" ;; -cygwin*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; +cygwin*|msys*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO -D_POSIX_SOURCE -D_ALL_SOURCE -DRECYCLES_PIDS" ;; *openstep*) LOCAL_CFLAGS="-D__APPLE_CC__" ;; esac @@ -1200,7 +1234,9 @@ freebsd[[3-9]]*) if test -x /usr/bin/objformat && test "`/usr/bin/objformat`" = "elf" ; then LOCAL_LDFLAGS=-rdynamic # allow dynamic loading fi ;; -freebsdelf*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading +freebsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading +openbsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading +netbsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading dragonfly*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading midnightbsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading esac @@ -1323,4 +1359,12 @@ AC_CONFIG_FILES([Makefile builtins/Makefile lib/readline/Makefile \ dnl Makefile uses this timestamp file to record whether config.h is up to date. AC_CONFIG_COMMANDS([stamp-h], [echo timestamp > stamp-h]) +if test "$ac_cv_header_stdckdint_h" = yes; then + rm -f stdckdint.h +elif cmp ${srcdir}/include/stdckdint.in.h stdckdint.h 2>/dev/null; then + : +else + cp ${srcdir}/include/stdckdint.in.h stdckdint.h +fi + AC_OUTPUT diff --git a/copy_cmd.c b/copy_cmd.c index 758ff238a..6426c016f 100644 --- a/copy_cmd.c +++ b/copy_cmd.c @@ -2,7 +2,7 @@ primarily for making function definitions, but I'm not sure that anyone else will need it. */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -32,29 +32,28 @@ #include "shell.h" -static PATTERN_LIST *copy_case_clause PARAMS((PATTERN_LIST *)); -static PATTERN_LIST *copy_case_clauses PARAMS((PATTERN_LIST *)); -static FOR_COM *copy_for_command PARAMS((FOR_COM *)); +static PATTERN_LIST *copy_case_clause (PATTERN_LIST *); +static PATTERN_LIST *copy_case_clauses (PATTERN_LIST *); +static FOR_COM *copy_for_command (FOR_COM *); #if defined (ARITH_FOR_COMMAND) -static ARITH_FOR_COM *copy_arith_for_command PARAMS((ARITH_FOR_COM *)); +static ARITH_FOR_COM *copy_arith_for_command (ARITH_FOR_COM *); #endif -static GROUP_COM *copy_group_command PARAMS((GROUP_COM *)); -static SUBSHELL_COM *copy_subshell_command PARAMS((SUBSHELL_COM *)); -static COPROC_COM *copy_coproc_command PARAMS((COPROC_COM *)); -static CASE_COM *copy_case_command PARAMS((CASE_COM *)); -static WHILE_COM *copy_while_command PARAMS((WHILE_COM *)); -static IF_COM *copy_if_command PARAMS((IF_COM *)); +static GROUP_COM *copy_group_command (GROUP_COM *); +static SUBSHELL_COM *copy_subshell_command (SUBSHELL_COM *); +static COPROC_COM *copy_coproc_command (COPROC_COM *); +static CASE_COM *copy_case_command (CASE_COM *); +static WHILE_COM *copy_while_command (WHILE_COM *); +static IF_COM *copy_if_command (IF_COM *); #if defined (DPAREN_ARITHMETIC) -static ARITH_COM *copy_arith_command PARAMS((ARITH_COM *)); +static ARITH_COM *copy_arith_command (ARITH_COM *); #endif #if defined (COND_COMMAND) -static COND_COM *copy_cond_command PARAMS((COND_COM *)); +static COND_COM *copy_cond_command (COND_COM *); #endif -static SIMPLE_COM *copy_simple_command PARAMS((SIMPLE_COM *)); +static SIMPLE_COM *copy_simple_command (SIMPLE_COM *); WORD_DESC * -copy_word (w) - WORD_DESC *w; +copy_word (WORD_DESC *w) { WORD_DESC *new_word; @@ -66,8 +65,7 @@ copy_word (w) /* Copy the chain of words in LIST. Return a pointer to the new chain. */ WORD_LIST * -copy_word_list (list) - WORD_LIST *list; +copy_word_list (WORD_LIST *list) { WORD_LIST *new_list, *tl; @@ -86,8 +84,7 @@ copy_word_list (list) } static PATTERN_LIST * -copy_case_clause (clause) - PATTERN_LIST *clause; +copy_case_clause (PATTERN_LIST *clause) { PATTERN_LIST *new_clause; @@ -99,8 +96,7 @@ copy_case_clause (clause) } static PATTERN_LIST * -copy_case_clauses (clauses) - PATTERN_LIST *clauses; +copy_case_clauses (PATTERN_LIST *clauses) { PATTERN_LIST *new_list, *new_clause; @@ -115,17 +111,12 @@ copy_case_clauses (clauses) /* Copy a single redirect. */ REDIRECT * -copy_redirect (redirect) - REDIRECT *redirect; +copy_redirect (REDIRECT *redirect) { REDIRECT *new_redirect; new_redirect = (REDIRECT *)xmalloc (sizeof (REDIRECT)); -#if 0 - FASTCOPY ((char *)redirect, (char *)new_redirect, (sizeof (REDIRECT))); -#else *new_redirect = *redirect; /* let the compiler do the fast structure copy */ -#endif if (redirect->rflags & REDIR_VARASSIGN) new_redirect->redirector.filename = copy_word (redirect->redirector.filename); @@ -162,8 +153,7 @@ copy_redirect (redirect) } REDIRECT * -copy_redirects (list) - REDIRECT *list; +copy_redirects (REDIRECT *list) { REDIRECT *new_list, *temp; @@ -177,8 +167,7 @@ copy_redirects (list) } static FOR_COM * -copy_for_command (com) - FOR_COM *com; +copy_for_command (FOR_COM *com) { FOR_COM *new_for; @@ -193,8 +182,7 @@ copy_for_command (com) #if defined (ARITH_FOR_COMMAND) static ARITH_FOR_COM * -copy_arith_for_command (com) - ARITH_FOR_COM *com; +copy_arith_for_command (ARITH_FOR_COM *com) { ARITH_FOR_COM *new_arith_for; @@ -210,8 +198,7 @@ copy_arith_for_command (com) #endif /* ARITH_FOR_COMMAND */ static GROUP_COM * -copy_group_command (com) - GROUP_COM *com; +copy_group_command (GROUP_COM *com) { GROUP_COM *new_group; @@ -221,8 +208,7 @@ copy_group_command (com) } static SUBSHELL_COM * -copy_subshell_command (com) - SUBSHELL_COM *com; +copy_subshell_command (SUBSHELL_COM *com) { SUBSHELL_COM *new_subshell; @@ -234,8 +220,7 @@ copy_subshell_command (com) } static COPROC_COM * -copy_coproc_command (com) - COPROC_COM *com; +copy_coproc_command (COPROC_COM *com) { COPROC_COM *new_coproc; @@ -247,8 +232,7 @@ copy_coproc_command (com) } static CASE_COM * -copy_case_command (com) - CASE_COM *com; +copy_case_command (CASE_COM *com) { CASE_COM *new_case; @@ -261,8 +245,7 @@ copy_case_command (com) } static WHILE_COM * -copy_while_command (com) - WHILE_COM *com; +copy_while_command (WHILE_COM *com) { WHILE_COM *new_while; @@ -274,8 +257,7 @@ copy_while_command (com) } static IF_COM * -copy_if_command (com) - IF_COM *com; +copy_if_command (IF_COM *com) { IF_COM *new_if; @@ -289,8 +271,7 @@ copy_if_command (com) #if defined (DPAREN_ARITHMETIC) static ARITH_COM * -copy_arith_command (com) - ARITH_COM *com; +copy_arith_command (ARITH_COM *com) { ARITH_COM *new_arith; @@ -305,8 +286,7 @@ copy_arith_command (com) #if defined (COND_COMMAND) static COND_COM * -copy_cond_command (com) - COND_COM *com; +copy_cond_command (COND_COM *com) { COND_COM *new_cond; @@ -323,8 +303,7 @@ copy_cond_command (com) #endif static SIMPLE_COM * -copy_simple_command (com) - SIMPLE_COM *com; +copy_simple_command (SIMPLE_COM *com) { SIMPLE_COM *new_simple; @@ -337,8 +316,7 @@ copy_simple_command (com) } FUNCTION_DEF * -copy_function_def_contents (old, new_def) - FUNCTION_DEF *old, *new_def; +copy_function_def_contents (FUNCTION_DEF *old, FUNCTION_DEF *new_def) { new_def->name = copy_word (old->name); new_def->command = old->command ? copy_command (old->command) : old->command; @@ -349,8 +327,7 @@ copy_function_def_contents (old, new_def) } FUNCTION_DEF * -copy_function_def (com) - FUNCTION_DEF *com; +copy_function_def (FUNCTION_DEF *com) { FUNCTION_DEF *new_def; @@ -363,8 +340,7 @@ copy_function_def (com) copy. Don't you forget to dispose_command () on this pointer later! */ COMMAND * -copy_command (command) - COMMAND *command; +copy_command (COMMAND *command) { COMMAND *new_command; diff --git a/dispose_cmd.c b/dispose_cmd.c index c624605b5..d2821fed7 100644 --- a/dispose_cmd.c +++ b/dispose_cmd.c @@ -1,6 +1,6 @@ /* dispose_command.c -- dispose of a COMMAND structure. */ -/* Copyright (C) 1987-2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-2009,2022,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -33,8 +33,7 @@ extern sh_obj_cache_t wdcache, wlcache; /* Dispose of the command structure passed. */ void -dispose_command (command) - COMMAND *command; +dispose_command (COMMAND *command) { if (command == 0) return; @@ -205,11 +204,16 @@ dispose_command (command) free (command); } +void +uw_dispose_command (void *command) +{ + dispose_command (command); +} + #if defined (COND_COMMAND) /* How to free a node in a conditional command. */ void -dispose_cond_node (cond) - COND_COM *cond; +dispose_cond_node (COND_COM *cond) { if (cond) { @@ -225,8 +229,7 @@ dispose_cond_node (cond) #endif /* COND_COMMAND */ void -dispose_function_def_contents (c) - FUNCTION_DEF *c; +dispose_function_def_contents (FUNCTION_DEF *c) { dispose_word (c->name); dispose_command (c->command); @@ -234,8 +237,7 @@ dispose_function_def_contents (c) } void -dispose_function_def (c) - FUNCTION_DEF *c; +dispose_function_def (FUNCTION_DEF *c) { dispose_function_def_contents (c); free (c); @@ -243,8 +245,7 @@ dispose_function_def (c) /* How to free a WORD_DESC. */ void -dispose_word (w) - WORD_DESC *w; +dispose_word (WORD_DESC *w) { FREE (w->word); ocache_free (wdcache, WORD_DESC, w); @@ -252,8 +253,7 @@ dispose_word (w) /* Free a WORD_DESC, but not the word contained within. */ void -dispose_word_desc (w) - WORD_DESC *w; +dispose_word_desc (WORD_DESC *w) { w->word = 0; ocache_free (wdcache, WORD_DESC, w); @@ -261,8 +261,7 @@ dispose_word_desc (w) /* How to get rid of a linked list of words. A WORD_LIST. */ void -dispose_words (list) - WORD_LIST *list; +dispose_words (WORD_LIST *list) { WORD_LIST *t; @@ -279,12 +278,17 @@ dispose_words (list) } } +void +uw_dispose_words (void *list) +{ + dispose_words (list); +} + #ifdef INCLUDE_UNUSED /* How to dispose of an array of pointers to char. This is identical to free_array in stringlib.c. */ void -dispose_word_array (array) - char **array; +dispose_word_array (char **array) { register int count; @@ -300,8 +304,7 @@ dispose_word_array (array) /* How to dispose of an list of redirections. A REDIRECT. */ void -dispose_redirects (list) - REDIRECT *list; +dispose_redirects (REDIRECT *list) { register REDIRECT *t; diff --git a/dispose_cmd.h b/dispose_cmd.h index 6095d44a4..5ac900aa5 100644 --- a/dispose_cmd.h +++ b/dispose_cmd.h @@ -1,6 +1,6 @@ /* dispose_cmd.h -- Functions appearing in dispose_cmd.c. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -23,18 +23,21 @@ #include "stdc.h" -extern void dispose_command PARAMS((COMMAND *)); -extern void dispose_word_desc PARAMS((WORD_DESC *)); -extern void dispose_word PARAMS((WORD_DESC *)); -extern void dispose_words PARAMS((WORD_LIST *)); -extern void dispose_word_array PARAMS((char **)); -extern void dispose_redirects PARAMS((REDIRECT *)); +extern void dispose_command (COMMAND *); +extern void dispose_word_desc (WORD_DESC *); +extern void dispose_word (WORD_DESC *); +extern void dispose_words (WORD_LIST *); +extern void dispose_word_array (char **); +extern void dispose_redirects (REDIRECT *); #if defined (COND_COMMAND) -extern void dispose_cond_node PARAMS((COND_COM *)); +extern void dispose_cond_node (COND_COM *); #endif -extern void dispose_function_def_contents PARAMS((FUNCTION_DEF *)); -extern void dispose_function_def PARAMS((FUNCTION_DEF *)); +extern void dispose_function_def_contents (FUNCTION_DEF *); +extern void dispose_function_def (FUNCTION_DEF *); + +extern void uw_dispose_command (void *); +extern void uw_dispose_words (void *); #endif /* !_DISPOSE_CMD_H_ */ diff --git a/doc/Makefile.in b/doc/Makefile.in index 8bf775e14..856faf457 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -109,6 +109,10 @@ BASHREF_FILES = $(srcdir)/bashref.texi $(srcdir)/fdl.texi $(srcdir)/version.texi $(RM) $@ -${GROFF} -I${srcdir} -man $< > $@ +.1.pdf: + $(RM) $@ + -${GROFF} -I${srcdir} -man -T pdf $< > $@ + .1.0: $(RM) $@ -${NROFF} -I${srcdir} -man $< > $@ @@ -153,9 +157,9 @@ BASHREF_FILES = $(srcdir)/bashref.texi $(srcdir)/fdl.texi $(srcdir)/version.texi # $(RM) $@ # -${TEXI2PDF} $< -all: ps info dvi text html $(MAN2HTML) +all: info dvi text html pdf $(MAN2HTML) nodvi: ps info text html -everything: all pdf +everything: all ps PSFILES = bash.ps bashbug.ps article.ps builtins.ps rbash.ps DVIFILES = bashref.dvi bashref.ps @@ -207,11 +211,11 @@ article.ps: article.ms bashref.ps: bashref.dvi -article.pdf: article.ps -#bashref.pdf: bashref.dvi # experimental bashref.pdf: bashref.texi -bash.pdf: bash.ps +bash.pdf: bash.1 + +article.pdf: article.ps rose94.pdf: rose94.ps OTHER_DOCS = $(srcdir)/FAQ $(srcdir)/INTRO diff --git a/doc/bash.0 b/doc/bash.0 index 1580b77aa..860abdc5e 100644 --- a/doc/bash.0 +++ b/doc/bash.0 @@ -1,6 +1,4 @@ -BASH(1) General Commands Manual BASH(1) - - +_B_A_S_H(1) General Commands Manual _B_A_S_H(1) NNAAMMEE bash - GNU Bourne-Again SHell @@ -9,24 +7,25 @@ SSYYNNOOPPSSIISS bbaasshh [options] [command_string | file] CCOOPPYYRRIIGGHHTT - Bash is Copyright (C) 1989-2022 by the Free Software Foundation, Inc. + Bash is Copyright (C) 1989-2023 by the Free Software Foundation, Inc. DDEESSCCRRIIPPTTIIOONN BBaasshh is an sshh-compatible command language interpreter that executes commands read from the standard input or from a file. BBaasshh also incor- porates useful features from the _K_o_r_n and _C shells (kksshh and ccsshh). + POSIX is the name for a family of computing standards based on Unix. BBaasshh is intended to be a conformant implementation of the Shell and Utilities portion of the IEEE POSIX specification (IEEE Standard 1003.1). BBaasshh can be configured to be POSIX-conformant by default. OOPPTTIIOONNSS All of the single-character shell options documented in the description - of the sseett builtin command, including --oo, can be used as options when - the shell is invoked. In addition, bbaasshh interprets the following op- + of the sseett builtin command, including --oo, can be used as options when + the shell is invoked. In addition, bbaasshh interprets the following op- tions when it is invoked: - --cc If the --cc option is present, then commands are read from the + --cc If the --cc option is present, then commands are read from the first non-option argument _c_o_m_m_a_n_d___s_t_r_i_n_g. If there are argu- ments after the _c_o_m_m_a_n_d___s_t_r_i_n_g, the first argument is as- signed to $$00 and any remaining arguments are assigned to the @@ -45,22 +44,23 @@ OOPPTTIIOONNSS --DD A list of all double-quoted strings preceded by $$ is printed on the standard output. These are the strings that are sub- ject to language translation when the current locale is not CC - or PPOOSSIIXX. This implies the --nn option; no commands will be + or PPOOSSIIXX. This implies the --nn option; no commands will be executed. [[--++]]OO [[_s_h_o_p_t___o_p_t_i_o_n]] - _s_h_o_p_t___o_p_t_i_o_n is one of the shell options accepted by the - sshhoopptt builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). If + _s_h_o_p_t___o_p_t_i_o_n is one of the shell options accepted by the + sshhoopptt builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). If _s_h_o_p_t___o_p_t_i_o_n is present, --OO sets the value of that option; ++OO unsets it. If _s_h_o_p_t___o_p_t_i_o_n is not supplied, the names and values of the shell options accepted by sshhoopptt are printed on the standard output. If the invocation option is ++OO, the output is displayed in a format that may be reused as input. ---- A ---- signals the end of options and disables further option - processing. Any arguments after the ---- are treated as file- - names and arguments. An argument of -- is equivalent to ----. + processing. Any arguments after the ---- are treated as a + shell script filename (see below) and arguments passed to + that script. An argument of -- is equivalent to ----. - BBaasshh also interprets a number of multi-character options. These op- - tions must appear on the command line before the single-character op- + BBaasshh also interprets a number of multi-character options. These op- + tions must appear on the command line before the single-character op- tions to be recognized. ----ddeebbuuggggeerr @@ -68,8 +68,8 @@ OOPPTTIIOONNSS starts. Turns on extended debugging mode (see the description of the eexxttddeebbuugg option to the sshhoopptt builtin below). ----dduummpp--ppoo--ssttrriinnggss - Equivalent to --DD, but the output is in the GNU _g_e_t_t_e_x_t ppoo (por- - table object) file format. + Equivalent to --DD, but the output is in the GNU _g_e_t_t_e_x_t ppoo + (portable object) file format. ----dduummpp--ssttrriinnggss Equivalent to --DD. ----hheellpp Display a usage message on standard output and exit success- @@ -77,21 +77,21 @@ OOPPTTIIOONNSS ----iinniitt--ffiillee _f_i_l_e ----rrccffiillee _f_i_l_e Execute commands from _f_i_l_e instead of the standard personal ini- - tialization file _~_/_._b_a_s_h_r_c if the shell is interactive (see IINN-- + tialization file _~_/_._b_a_s_h_r_c if the shell is interactive (see IINN-- VVOOCCAATTIIOONN below). ----llooggiinn Equivalent to --ll. ----nnooeeddiittiinngg - Do not use the GNU rreeaaddlliinnee library to read command lines when + Do not use the GNU rreeaaddlliinnee library to read command lines when the shell is interactive. ----nnoopprrooffiillee - Do not read either the system-wide startup file _/_e_t_c_/_p_r_o_f_i_l_e or - any of the personal initialization files _~_/_._b_a_s_h___p_r_o_f_i_l_e, - _~_/_._b_a_s_h___l_o_g_i_n, or _~_/_._p_r_o_f_i_l_e. By default, bbaasshh reads these - files when it is invoked as a login shell (see IINNVVOOCCAATTIIOONN be- + Do not read either the system-wide startup file _/_e_t_c_/_p_r_o_f_i_l_e or + any of the personal initialization files _~_/_._b_a_s_h___p_r_o_f_i_l_e, + _~_/_._b_a_s_h___l_o_g_i_n, or _~_/_._p_r_o_f_i_l_e. By default, bbaasshh reads these + files when it is invoked as a login shell (see IINNVVOOCCAATTIIOONN be- low). ----nnoorrcc Do not read and execute the personal initialization file @@ -101,7 +101,7 @@ OOPPTTIIOONNSS ----ppoossiixx Change the behavior of bbaasshh where the default operation differs from the POSIX standard to match the standard (_p_o_s_i_x _m_o_d_e). See - SSEEEE AALLSSOO below for a reference to a document that details how + SSEEEE AALLSSOO below for a reference to a document that details how posix mode affects bash's behavior. ----rreessttrriicctteedd @@ -111,27 +111,27 @@ OOPPTTIIOONNSS Equivalent to --vv. ----vveerrssiioonn - Show version information for this instance of bbaasshh on the stan- + Show version information for this instance of bbaasshh on the stan- dard output and exit successfully. AARRGGUUMMEENNTTSS If arguments remain after option processing, and neither the --cc nor the --ss option has been supplied, the first argument is assumed to be the - name of a file containing shell commands. If bbaasshh is invoked in this - fashion, $$00 is set to the name of the file, and the positional parame- - ters are set to the remaining arguments. BBaasshh reads and executes com- - mands from this file, then exits. BBaasshh's exit status is the exit sta- - tus of the last command executed in the script. If no commands are ex- - ecuted, the exit status is 0. An attempt is first made to open the - file in the current directory, and, if no file is found, then the shell - searches the directories in PPAATTHH for the script. + name of a file containing shell commands (a _s_h_e_l_l _s_c_r_i_p_t). If bbaasshh is + invoked in this fashion, $$00 is set to the name of the file, and the po- + sitional parameters are set to the remaining arguments. BBaasshh reads and + executes commands from this file, then exits. BBaasshh's exit status is + the exit status of the last command executed in the script. If no com- + mands are executed, the exit status is 0. An attempt is first made to + open the file in the current directory, and, if no file is found, then + the shell searches the directories in PPAATTHH for the script. IINNVVOOCCAATTIIOONN - A _l_o_g_i_n _s_h_e_l_l is one whose first character of argument zero is a --, or + A _l_o_g_i_n _s_h_e_l_l is one whose first character of argument zero is a --, or one started with the ----llooggiinn option. - An _i_n_t_e_r_a_c_t_i_v_e shell is one started without non-option arguments (un- - less --ss is specified) and without the --cc option, whose standard input + An _i_n_t_e_r_a_c_t_i_v_e shell is one started without non-option arguments (un- + less --ss is specified) and without the --cc option, whose standard input and error are both connected to terminals (as determined by _i_s_a_t_t_y(3)), or one started with the --ii option. PPSS11 is set and $$-- includes ii if bbaasshh is interactive, allowing a shell script or a startup file to test @@ -146,8 +146,8 @@ IINNVVOOCCAATTIIOONN active shell with the ----llooggiinn option, it first reads and executes com- mands from the file _/_e_t_c_/_p_r_o_f_i_l_e, if that file exists. After reading that file, it looks for _~_/_._b_a_s_h___p_r_o_f_i_l_e, _~_/_._b_a_s_h___l_o_g_i_n, and _~_/_._p_r_o_f_i_l_e, - in that order, and reads and executes commands from the first one that - exists and is readable. The ----nnoopprrooffiillee option may be used when the + in that order, and reads and executes commands from the first one that + exists and is readable. The ----nnoopprrooffiillee option may be used when the shell is started to inhibit this behavior. When an interactive login shell exits, or a non-interactive login shell @@ -165,7 +165,9 @@ IINNVVOOCCAATTIIOONN its value if it appears there, and uses the expanded value as the name of a file to read and execute. BBaasshh behaves as if the following com- mand were executed: + if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi + but the value of the PPAATTHH variable is not used to search for the file- name. @@ -179,22 +181,22 @@ IINNVVOOCCAATTIIOONN name sshh, bbaasshh looks for the variable EENNVV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sshh does not attempt to read and exe- - cute commands from any other startup files, the ----rrccffiillee option has no - effect. A non-interactive shell invoked with the name sshh does not at- + cute commands from any other startup files, the ----rrccffiillee option has no + effect. A non-interactive shell invoked with the name sshh does not at- tempt to read any other startup files. When invoked as sshh, bbaasshh enters _p_o_s_i_x mode after the startup files are read. When bbaasshh is started in _p_o_s_i_x mode, as with the ----ppoossiixx command line option, it follows the POSIX standard for startup files. In this mode, - interactive shells expand the EENNVV variable and commands are read and - executed from the file whose name is the expanded value. No other + interactive shells expand the EENNVV variable and commands are read and + executed from the file whose name is the expanded value. No other startup files are read. BBaasshh attempts to determine when it is being run with its standard input connected to a network connection, as when executed by the historical remote shell daemon, usually _r_s_h_d, or the secure shell daemon _s_s_h_d. If - bbaasshh determines it is being run non-interactively in this fashion, it - reads and executes commands from _~_/_._b_a_s_h_r_c, if that file exists and is + bbaasshh determines it is being run non-interactively in this fashion, it + reads and executes commands from _~_/_._b_a_s_h_r_c, if that file exists and is readable. It will not do this if invoked as sshh. The ----nnoorrcc option may be used to inhibit this behavior, and the ----rrccffiillee option may be used to force another file to be read, but neither _r_s_h_d nor _s_s_h_d generally @@ -203,22 +205,22 @@ IINNVVOOCCAATTIIOONN 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, no startup files are read, shell functions are not inherited from the environment, - the SSHHEELLLLOOPPTTSS, BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if they ap- - pear in the environment, are ignored, and the effective user id is set - to the real user id. If the --pp option is supplied at invocation, the + the SSHHEELLLLOOPPTTSS, BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if they ap- + pear in the environment, are ignored, and the effective user id is set + to the real user id. If the --pp option is supplied at invocation, the startup behavior is the same, but the effective user id is not reset. DDEEFFIINNIITTIIOONNSS - The following definitions are used throughout the rest of this docu- + The following definitions are used throughout the rest of this docu- ment. bbllaannkk A space or tab. - wwoorrdd A sequence of characters considered as a single unit by the + wwoorrdd A sequence of characters considered as a single unit by the shell. Also known as a ttookkeenn. - nnaammee A _w_o_r_d consisting only of alphanumeric characters and under- - scores, and beginning with an alphabetic character or an under- + nnaammee A _w_o_r_d consisting only of alphanumeric characters and under- + scores, and beginning with an alphabetic character or an under- score. Also referred to as an iiddeennttiiffiieerr. mmeettaacchhaarraacctteerr - A character that, when unquoted, separates words. One of the + A character that, when unquoted, separates words. One of the following: || && ;; (( )) << >> ssppaaccee ttaabb nneewwlliinnee ccoonnttrrooll ooppeerraattoorr @@ -244,14 +246,14 @@ SSHHEELLLL GGRRAAMMMMAARR A _s_i_m_p_l_e _c_o_m_m_a_n_d is a sequence of optional variable assignments fol- lowed by bbllaannkk-separated words and redirections, and terminated by a _c_o_n_t_r_o_l _o_p_e_r_a_t_o_r. The first word specifies the command to be executed, - and is passed as argument zero. The remaining words are passed as ar- + and is passed as argument zero. The remaining words are passed as ar- guments to the invoked command. - The return value of a _s_i_m_p_l_e _c_o_m_m_a_n_d is its exit status, or 128+_n if + The return value of a _s_i_m_p_l_e _c_o_m_m_a_n_d is its exit status, or 128+_n if the command is terminated by signal _n. PPiippeelliinneess - A _p_i_p_e_l_i_n_e is a sequence of one or more commands separated by one of + A _p_i_p_e_l_i_n_e is a sequence of one or more commands separated by one of the control operators || or ||&&. The format for a pipeline is: [ttiimmee [--pp]] [ ! ] _c_o_m_m_a_n_d_1 [ [|||||&&] _c_o_m_m_a_n_d_2 ... ] @@ -259,10 +261,10 @@ SSHHEELLLL GGRRAAMMMMAARR The standard output of _c_o_m_m_a_n_d_1 is connected via a pipe to the standard input of _c_o_m_m_a_n_d_2. This connection is performed before any redirec- tions specified by the _c_o_m_m_a_n_d_1(see RREEDDIIRREECCTTIIOONN below). If ||&& is used, - _c_o_m_m_a_n_d_1's standard error, in addition to its standard output, is con- - nected to _c_o_m_m_a_n_d_2's standard input through the pipe; it is shorthand - for 22>>&&11 ||. This implicit redirection of the standard error to the - standard output is performed after any redirections specified by _c_o_m_- + _c_o_m_m_a_n_d_1's standard error, in addition to its standard output, is con- + nected to _c_o_m_m_a_n_d_2's standard input through the pipe; it is shorthand + for 22>>&&11 ||. This implicit redirection of the standard error to the + standard output is performed after any redirections specified by _c_o_m_- _m_a_n_d_1. The return status of a pipeline is the exit status of the last command, @@ -270,23 +272,23 @@ SSHHEELLLL GGRRAAMMMMAARR pipeline's return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit success- fully. If the reserved word !! precedes a pipeline, the exit status of - that pipeline is the logical negation of the exit status as described - above. The shell waits for all commands in the pipeline to terminate + that pipeline is the logical negation of the exit status as described + above. The shell waits for all commands in the pipeline to terminate before returning a value. - If the ttiimmee reserved word precedes a pipeline, the elapsed as well as - user and system time consumed by its execution are reported when the - pipeline terminates. The --pp option changes the output format to that - specified by POSIX. When the shell is in _p_o_s_i_x _m_o_d_e, it does not rec- - ognize ttiimmee as a reserved word if the next token begins with a `-'. - The TTIIMMEEFFOORRMMAATT variable may be set to a format string that specifies - how the timing information should be displayed; see the description of + If the ttiimmee reserved word precedes a pipeline, the elapsed as well as + user and system time consumed by its execution are reported when the + pipeline terminates. The --pp option changes the output format to that + specified by POSIX. When the shell is in _p_o_s_i_x _m_o_d_e, it does not rec- + ognize ttiimmee as a reserved word if the next token begins with a "-". + The TTIIMMEEFFOORRMMAATT variable may be set to a format string that specifies + how the timing information should be displayed; see the description of TTIIMMEEFFOORRMMAATT under SShheellll VVaarriiaabblleess below. When the shell is in _p_o_s_i_x _m_o_d_e, ttiimmee may be followed by a newline. In this case, the shell displays the total user and system time consumed - by the shell and its children. The TTIIMMEEFFOORRMMAATT variable may be used to - specify the format of the time information. + by the shell and its children. The TTIIMMEEFFOORRMMAATT variable specifies the + format of the time information. Each command in a multi-command pipeline, where pipes are created, is executed in a _s_u_b_s_h_e_l_l, which is a separate process. See CCOOMMMMAANNDD EEXXEE-- @@ -311,35 +313,35 @@ SSHHEELLLL GGRRAAMMMMAARR wait for the command to finish, and the return status is 0. These are referred to as _a_s_y_n_c_h_r_o_n_o_u_s commands. Commands separated by a ;; are executed sequentially; the shell waits for each command to terminate in - turn. The return status is the exit status of the last command exe- + turn. The return status is the exit status of the last command exe- cuted. - AND and OR lists are sequences of one or more pipelines separated by - the &&&& and |||| control operators, respectively. AND and OR lists are + AND and OR lists are sequences of one or more pipelines separated by + the &&&& and |||| control operators, respectively. AND and OR lists are executed with left associativity. An AND list has the form _c_o_m_m_a_n_d_1 &&&& _c_o_m_m_a_n_d_2 - _c_o_m_m_a_n_d_2 is executed if, and only if, _c_o_m_m_a_n_d_1 returns an exit status + _c_o_m_m_a_n_d_2 is executed if, and only if, _c_o_m_m_a_n_d_1 returns an exit status of zero (success). An OR list has the form _c_o_m_m_a_n_d_1 |||| _c_o_m_m_a_n_d_2 - _c_o_m_m_a_n_d_2 is executed if, and only if, _c_o_m_m_a_n_d_1 returns a non-zero exit - status. The return status of AND and OR lists is the exit status of + _c_o_m_m_a_n_d_2 is executed if, and only if, _c_o_m_m_a_n_d_1 returns a non-zero exit + status. The return status of AND and OR lists is the exit status of the last command executed in the list. CCoommppoouunndd CCoommmmaannddss - A _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d is one of the following. In most cases a _l_i_s_t in a - command's description may be separated from the rest of the command by - one or more newlines, and may be followed by a newline in place of a + A _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d is one of the following. In most cases a _l_i_s_t in a + command's description may be separated from the rest of the command by + one or more newlines, and may be followed by a newline in place of a semicolon. - (_l_i_s_t) _l_i_s_t is executed in a subshell (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONN-- - MMEENNTT below for a description of a subshell environment). Vari- - able assignments and builtin commands that affect the shell's + (_l_i_s_t) _l_i_s_t is executed in a subshell (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONN-- + MMEENNTT below for a description of a subshell environment). Vari- + able assignments and builtin commands that affect the shell's environment do not remain in effect after the command completes. The return status is the exit status of _l_i_s_t. @@ -349,8 +351,8 @@ SSHHEELLLL GGRRAAMMMMAARR as a _g_r_o_u_p _c_o_m_m_a_n_d. The return status is the exit status of _l_i_s_t. Note that unlike the metacharacters (( and )), {{ and }} are _r_e_s_e_r_v_e_d _w_o_r_d_s and must occur where a reserved word is permitted - to be recognized. Since they do not cause a word break, they - must be separated from _l_i_s_t by whitespace or another shell + to be recognized. Since they do not cause a word break, they + must be separated from _l_i_s_t by whitespace or another shell metacharacter. ((_e_x_p_r_e_s_s_i_o_n)) @@ -367,9 +369,9 @@ SSHHEELLLL GGRRAAMMMMAARR the primaries described below under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS. The words between the [[[[ and ]]]] do not undergo word splitting and pathname expansion. The shell performs tilde expansion, pa- - rameter and variable expansion, arithmetic expansion, command - substitution, process substitution, and quote removal on those - words (the expansions that would occur if the words were en- + rameter and variable expansion, arithmetic expansion, command + substitution, process substitution, and quote removal on those + words (the expansions that would occur if the words were en- closed in double quotes). Conditional operators such as --ff must be unquoted to be recognized as primaries. @@ -380,15 +382,15 @@ SSHHEELLLL GGRRAAMMMMAARR of the operator is considered a pattern and matched according to the rules described below under PPaatttteerrnn MMaattcchhiinngg, as if the eexxtt-- gglloobb shell option were enabled. The == operator is equivalent to - ====. If the nnooccaasseemmaattcchh shell option is enabled, the match is - performed without regard to the case of alphabetic characters. - The return value is 0 if the string matches (====) or does not - match (!!==) the pattern, and 1 otherwise. Any part of the pat- - tern may be quoted to force the quoted portion to be matched as + ====. If the nnooccaasseemmaattcchh shell option is enabled, the match is + performed without regard to the case of alphabetic characters. + The return value is 0 if the string matches (====) or does not + match (!!==) the pattern, and 1 otherwise. Any part of the pat- + tern may be quoted to force the quoted portion to be matched as a string. - An additional binary operator, ==~~, is available, with the same - precedence as ==== and !!==. When it is used, the string to the + An additional binary operator, ==~~, is available, with the same + precedence as ==== and !!==. When it is used, the string to the right of the operator is considered a POSIX extended regular ex- pression and matched accordingly (using the POSIX _r_e_g_c_o_m_p and _r_e_g_e_x_e_c interfaces usually described in _r_e_g_e_x(3)). The return @@ -397,11 +399,11 @@ SSHHEELLLL GGRRAAMMMMAARR tional expression's return value is 2. If the nnooccaasseemmaattcchh shell option is enabled, the match is performed without regard to the case of alphabetic characters. If any part of the pattern is - quoted, the quoted portion is matched literally. This means ev- - ery character in the quoted portion matches itself, instead of - having any special pattern matching meaning. If the pattern is - stored in a shell variable, quoting the variable expansion - forces the entire pattern to be matched literally. Treat + quoted, the quoted portion is matched literally. This means + every character in the quoted portion matches itself, instead of + having any special pattern matching meaning. If the pattern is + stored in a shell variable, quoting the variable expansion + forces the entire pattern to be matched literally. Treat bracket expressions in regular expressions carefully, since nor- mal quoting and pattern characters lose their meanings between brackets. @@ -409,21 +411,21 @@ SSHHEELLLL GGRRAAMMMMAARR The pattern will match if it matches any part of the string. Anchor the pattern using the ^^ and $$ regular expression opera- tors to force it to match the entire string. The array variable - BBAASSHH__RREEMMAATTCCHH records which parts of the string matched the pat- - tern. The element of BBAASSHH__RREEMMAATTCCHH with index 0 contains the - portion of the string matching the entire regular expression. - Substrings matched by parenthesized subexpressions within the - regular expression are saved in the remaining BBAASSHH__RREEMMAATTCCHH in- - dices. The element of BBAASSHH__RREEMMAATTCCHH with index _n is the portion - of the string matching the _nth parenthesized subexpression. - Bash sets BBAASSHH__RREEMMAATTCCHH in the global scope; declaring it as a + BBAASSHH__RREEMMAATTCCHH records which parts of the string matched the pat- + tern. The element of BBAASSHH__RREEMMAATTCCHH with index 0 contains the + portion of the string matching the entire regular expression. + Substrings matched by parenthesized subexpressions within the + regular expression are saved in the remaining BBAASSHH__RREEMMAATTCCHH in- + dices. The element of BBAASSHH__RREEMMAATTCCHH with index _n is the portion + of the string matching the _nth parenthesized subexpression. + BBaasshh sets BBAASSHH__RREEMMAATTCCHH in the global scope; declaring it as a local variable will lead to unexpected results. - 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_e_s_s_i_o_n )) - Returns the value of _e_x_p_r_e_s_s_i_o_n. This may be used to + Returns the value of _e_x_p_r_e_s_s_i_o_n. This may be used to override the normal precedence of operators. !! _e_x_p_r_e_s_s_i_o_n True if _e_x_p_r_e_s_s_i_o_n is false. @@ -459,37 +461,37 @@ SSHHEELLLL GGRRAAMMMMAARR sseelleecctt _n_a_m_e [ iinn _w_o_r_d ] ; ddoo _l_i_s_t ; ddoonnee The list of words following iinn is expanded, generating a list of - items, and the set of expanded words is printed on the standard - error, each preceded by a number. If the iinn _w_o_r_d is omitted, - the positional parameters are printed (see PPAARRAAMMEETTEERRSS below). - sseelleecctt then displays the PPSS33 prompt and reads a line from the - standard input. If the line consists of a number corresponding - to one of the displayed words, then the value of _n_a_m_e is set to - that word. If the line is empty, the words and prompt are dis- - played again. If EOF is read, the sseelleecctt command completes and - returns 1. Any other value read causes _n_a_m_e to be set to null. - The line read is saved in the variable RREEPPLLYY. The _l_i_s_t is exe- - cuted after each selection until a bbrreeaakk command is executed. + items, and the set of expanded words is printed on the standard + error, each preceded by a number. If the iinn _w_o_r_d is omitted, + the positional parameters are printed (see PPAARRAAMMEETTEERRSS below). + sseelleecctt then displays the PPSS33 prompt and reads a line from the + standard input. If the line consists of a number corresponding + to one of the displayed words, then the value of _n_a_m_e is set to + that word. If the line is empty, the words and prompt are dis- + played again. If EOF is read, the sseelleecctt command completes and + returns 1. Any other value read causes _n_a_m_e to be set to null. + The line read is saved in the variable RREEPPLLYY. The _l_i_s_t is exe- + cuted after each selection until a bbrreeaakk command is executed. The exit status of sseelleecctt is the exit status of the last command executed in _l_i_s_t, or zero if no commands were executed. ccaassee _w_o_r_d iinn [ [(] _p_a_t_t_e_r_n [ || _p_a_t_t_e_r_n ] ... ) _l_i_s_t ;; ] ... eessaacc A ccaassee command first expands _w_o_r_d, and tries to match it against - each _p_a_t_t_e_r_n in turn, using the matching rules described under + each _p_a_t_t_e_r_n in turn, using the matching rules described under PPaatttteerrnn MMaattcchhiinngg below. The _w_o_r_d is expanded using tilde expan- sion, parameter and variable expansion, arithmetic expansion, command substitution, process substitution and quote removal. Each _p_a_t_t_e_r_n examined is expanded using tilde expansion, parame- - ter and variable expansion, arithmetic expansion, command sub- - stitution, process substitution, and quote removal. If the nnoo-- - ccaasseemmaattcchh shell option is enabled, the match is performed with- - out regard to the case of alphabetic characters. When a match - is found, the corresponding _l_i_s_t is executed. If the ;;;; opera- + ter and variable expansion, arithmetic expansion, command sub- + stitution, process substitution, and quote removal. If the nnoo-- + ccaasseemmaattcchh shell option is enabled, the match is performed with- + out regard to the case of alphabetic characters. When a match + is found, the corresponding _l_i_s_t is executed. If the ;;;; opera- tor is used, no subsequent matches are attempted after the first pattern match. Using ;;&& in place of ;;;; causes execution to con- - tinue with the _l_i_s_t associated with the next set of patterns. - Using ;;;;&& in place of ;;;; causes the shell to test the next pat- - tern list in the statement, if any, and execute any associated + tinue with the _l_i_s_t associated with the next set of patterns. + Using ;;;;&& in place of ;;;; causes the shell to test the next pat- + tern list in the statement, if any, and execute any associated _l_i_s_t on a successful match, continuing the case statement execu- tion as if the pattern list had not matched. The exit status is zero if no pattern matches. Otherwise, it is the exit status of @@ -500,7 +502,7 @@ SSHHEELLLL GGRRAAMMMMAARR _l_i_s_t is executed. Otherwise, each eelliiff _l_i_s_t is executed in turn, and if its exit status is zero, the corresponding tthheenn _l_i_s_t is executed and the command completes. Otherwise, the eellssee - _l_i_s_t is executed, if present. The exit status is the exit sta- + _l_i_s_t is executed, if present. The exit status is the exit sta- tus of the last command executed, or zero if no condition tested true. @@ -508,7 +510,7 @@ SSHHEELLLL GGRRAAMMMMAARR uunnttiill _l_i_s_t_-_1; ddoo _l_i_s_t_-_2; ddoonnee The wwhhiillee command continuously executes the list _l_i_s_t_-_2 as long as the last command in the list _l_i_s_t_-_1 returns an exit status of - zero. The uunnttiill command is identical to the wwhhiillee command, ex- + zero. The uunnttiill command is identical to the wwhhiillee command, ex- cept that the test is negated: _l_i_s_t_-_2 is executed as long as the last command in _l_i_s_t_-_1 returns a non-zero exit status. The exit status of the wwhhiillee and uunnttiill commands is the exit status of the @@ -516,40 +518,40 @@ SSHHEELLLL GGRRAAMMMMAARR CCoopprroocceesssseess A _c_o_p_r_o_c_e_s_s is a shell command preceded by the ccoopprroocc reserved word. A - coprocess is executed asynchronously in a subshell, as if the command - had been terminated with the && control operator, with a two-way pipe + coprocess is executed asynchronously in a subshell, as if the command + had been terminated with the && control operator, with a two-way pipe established between the executing shell and the coprocess. The syntax for a coprocess is: ccoopprroocc [_N_A_M_E] _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s] - This creates a coprocess named _N_A_M_E. _c_o_m_m_a_n_d may be either a simple - command or a compound command (see above). _N_A_M_E is a shell variable + This creates a coprocess named _N_A_M_E. _c_o_m_m_a_n_d may be either a simple + command or a compound command (see above). _N_A_M_E is a shell variable name. If _N_A_M_E is not supplied, the default name is CCOOPPRROOCC. The recommended form to use for a coprocess is ccoopprroocc _N_A_M_E { _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s]; } - This form is recommended because simple commands result in the copro- - cess always being named CCOOPPRROOCC, and it is simpler to use and more com- - plete than the other compound commands. + This form is recommended because simple commands result in the co- + process always being named CCOOPPRROOCC, and it is simpler to use and more + complete than the other compound commands. - If _c_o_m_m_a_n_d is a compound command, _N_A_M_E is optional. The word following - ccoopprroocc determines whether that word is interpreted as a variable name: - it is interpreted as _N_A_M_E if it is not a reserved word that introduces - a compound command. If _c_o_m_m_a_n_d is a simple command, _N_A_M_E is not al- - lowed; this is to avoid confusion between _N_A_M_E and the first word of + If _c_o_m_m_a_n_d is a compound command, _N_A_M_E is optional. The word following + ccoopprroocc determines whether that word is interpreted as a variable name: + it is interpreted as _N_A_M_E if it is not a reserved word that introduces + a compound command. If _c_o_m_m_a_n_d is a simple command, _N_A_M_E is not al- + lowed; this is to avoid confusion between _N_A_M_E and the first word of the simple command. - When the coprocess is executed, the shell creates an array variable - (see AArrrraayyss below) named _N_A_M_E in the context of the executing shell. - The standard output of _c_o_m_m_a_n_d is connected via a pipe to a file de- - scriptor in the executing shell, and that file descriptor is assigned + When the coprocess is executed, the shell creates an array variable + (see AArrrraayyss below) named _N_A_M_E in the context of the executing shell. + The standard output of _c_o_m_m_a_n_d is connected via a pipe to a file de- + scriptor in the executing shell, and that file descriptor is assigned to _N_A_M_E[0]. The standard input of _c_o_m_m_a_n_d is connected via a pipe to a file descriptor in the executing shell, and that file descriptor is as- - signed to _N_A_M_E[1]. This pipe is established before any redirections + signed to _N_A_M_E[1]. This pipe is established before any redirections specified by the command (see RREEDDIIRREECCTTIIOONN below). The file descriptors can be utilized as arguments to shell commands and redirections using standard word expansions. Other than those created to execute command @@ -572,23 +574,23 @@ SSHHEELLLL GGRRAAMMMMAARR _f_n_a_m_e () _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n] ffuunnccttiioonn _f_n_a_m_e [()] _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n] This defines a function named _f_n_a_m_e. The reserved word ffuunnccttiioonn - is optional. If the ffuunnccttiioonn reserved word is supplied, the - parentheses are optional. The _b_o_d_y of the function is the com- - pound command _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d (see CCoommppoouunndd CCoommmmaannddss above). - That command is usually a _l_i_s_t of commands between { and }, but + is optional. If the ffuunnccttiioonn reserved word is supplied, the + parentheses are optional. The _b_o_d_y of the function is the com- + pound command _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d (see CCoommppoouunndd CCoommmmaannddss above). + That command is usually a _l_i_s_t of commands between { and }, but may be any command listed under CCoommppoouunndd CCoommmmaannddss above. If the ffuunnccttiioonn reserved word is used, but the parentheses are not sup- plied, the braces are recommended. _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d is executed whenever _f_n_a_m_e is specified as the name of a simple command. When in _p_o_s_i_x _m_o_d_e, _f_n_a_m_e must be a valid shell _n_a_m_e and may not - be the name of one of the POSIX _s_p_e_c_i_a_l _b_u_i_l_t_i_n_s. In default - mode, a function name can be any unquoted shell word that does - not contain $$. Any redirections (see RREEDDIIRREECCTTIIOONN below) speci- - fied when a function is defined are performed when the function - is executed. The exit status of a function definition is zero - unless a syntax error occurs or a readonly function with the - same name already exists. When executed, the exit status of a - function is the exit status of the last command executed in the + be the name of one of the POSIX _s_p_e_c_i_a_l _b_u_i_l_t_i_n_s. In default + mode, a function name can be any unquoted shell word that does + not contain $$. Any redirections (see RREEDDIIRREECCTTIIOONN below) speci- + fied when a function is defined are performed when the function + is executed. The exit status of a function definition is zero + unless a syntax error occurs or a readonly function with the + same name already exists. When executed, the exit status of a + function is the exit status of the last command executed in the body. (See FFUUNNCCTTIIOONNSS below.) CCOOMMMMEENNTTSS @@ -601,8 +603,8 @@ CCOOMMMMEENNTTSS tive shells. QQUUOOTTIINNGG - _Q_u_o_t_i_n_g is used to remove the special meaning of certain characters or - words to the shell. Quoting can be used to disable special treatment + _Q_u_o_t_i_n_g is used to remove the special meaning of certain characters or + words to the shell. Quoting can be used to disable special treatment for special characters, to prevent reserved words from being recognized as such, and to prevent parameter expansion. @@ -613,38 +615,38 @@ QQUUOOTTIINNGG TTOORRYY EEXXPPAANNSSIIOONN below), the _h_i_s_t_o_r_y _e_x_p_a_n_s_i_o_n character, usually !!, must be quoted to prevent history expansion. - There are three quoting mechanisms: the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r, single + There are three quoting mechanisms: the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r, single quotes, and double quotes. - A non-quoted backslash (\\) is the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r. It preserves the + A non-quoted backslash (\\) is the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r. It preserves the literal value of the next character that follows, with the exception of . If a \\ pair appears, and the backslash is not it- self quoted, the \\ is treated as a line continuation (that is, it is removed from the input stream and effectively ignored). - Enclosing characters in single quotes preserves the literal value of + Enclosing characters in single quotes preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash. Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of $$, ``, \\, and, when history expansion is enabled, !!. When the shell is in _p_o_s_i_x _m_o_d_e, - the !! has no special meaning within double quotes, even when history - expansion is enabled. The characters $$ and `` retain their special - meaning within double quotes. The backslash retains its special mean- - ing only when followed by one of the following characters: $$, ``, "", \\, - or <>. A double quote may be quoted within double quotes by - preceding it with a backslash. If enabled, history expansion will be - performed unless an !! appearing in double quotes is escaped using a + the !! has no special meaning within double quotes, even when history + expansion is enabled. The characters $$ and `` retain their special + meaning within double quotes. The backslash retains its special mean- + ing only when followed by one of the following characters: $$, ``, "", \\, + or <>. A double quote may be quoted within double quotes by + preceding it with a backslash. If enabled, history expansion will be + performed unless an !! appearing in double quotes is escaped using a backslash. The backslash preceding the !! is not removed. - The special parameters ** and @@ have special meaning when in double + The special parameters ** and @@ have special meaning when in double quotes (see PPAARRAAMMEETTEERRSS below). - Character sequences of the form $$'_s_t_r_i_n_g' are treated as a special - variant of single quotes. The sequence expands to _s_t_r_i_n_g, with back- - slash-escaped characters in _s_t_r_i_n_g replaced as specified by the ANSI C - standard. Backslash escape sequences, if present, are decoded as fol- + Character sequences of the form $$'_s_t_r_i_n_g' are treated as a special + variant of single quotes. The sequence expands to _s_t_r_i_n_g, with back- + slash-escaped characters in _s_t_r_i_n_g replaced as specified by the ANSI C + standard. Backslash escape sequences, if present, are decoded as fol- lows: \\aa alert (bell) \\bb backspace @@ -659,18 +661,18 @@ QQUUOOTTIINNGG \\'' single quote \\"" double quote \\?? question mark - \\_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) - \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the + \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H (one to four hex digits) \\UU_H_H_H_H_H_H_H_H - the Unicode (ISO/IEC 10646) character whose value is the + the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits) \\cc_x a control-_x character - The expanded result is single-quoted, as if the dollar sign had not + The expanded result is single-quoted, as if the dollar sign had not been present. A double-quoted string preceded by a dollar sign ($$"_s_t_r_i_n_g") will cause @@ -680,51 +682,51 @@ QQUUOOTTIINNGG current locale is CC or PPOOSSIIXX, if there are no translations available, or if the string is not translated, the dollar sign is ignored. This is a form of double quoting, so the string remains double-quoted by de- - fault, whether or not it is translated and replaced. If the nnooeexx-- - ppaanndd__ttrraannssllaattiioonn option is enabled using the sshhoopptt builtin, translated - strings are single-quoted instead of double-quoted. See the descrip- - tion of sshhoopptt below under SSHHEELLLLBUILTINCCOOMMMMAANNDDSS. + fault, whether or not it is translated and replaced. If the nnooeexx-- + ppaanndd__ttrraannssllaattiioonn option is enabled using the sshhoopptt builtin, translated + strings are single-quoted instead of double-quoted. See the descrip- + tion of sshhoopptt below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS. PPAARRAAMMEETTEERRSS - A _p_a_r_a_m_e_t_e_r is an entity that stores values. It can be a _n_a_m_e, a num- - ber, or one of the special characters listed below under SSppeecciiaall PPaarraamm-- - eetteerrss. A _v_a_r_i_a_b_l_e is a parameter denoted by a _n_a_m_e. A variable has a + A _p_a_r_a_m_e_t_e_r is an entity that stores values. It can be a _n_a_m_e, a num- + ber, or one of the special characters listed below under SSppeecciiaall PPaarraa-- + mmeetteerrss. A _v_a_r_i_a_b_l_e is a parameter denoted by a _n_a_m_e. A variable has a _v_a_l_u_e and zero or more _a_t_t_r_i_b_u_t_e_s. Attributes are assigned using the ddeeccllaarree builtin command (see ddeeccllaarree below in SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS). A parameter is set if it has been assigned a value. The null string is - a valid value. Once a variable is set, it may be unset only by using + a valid value. Once a variable is set, it may be unset only by using the uunnsseett builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A _v_a_r_i_a_b_l_e may be assigned to by a statement of the form _n_a_m_e=[_v_a_l_u_e] - If _v_a_l_u_e is not given, the variable is assigned the null string. All - _v_a_l_u_e_s undergo tilde expansion, parameter and variable expansion, com- - mand substitution, arithmetic expansion, and quote removal (see EEXXPPAANN-- + If _v_a_l_u_e is not given, the variable is assigned the null string. All + _v_a_l_u_e_s undergo tilde expansion, parameter and variable expansion, com- + mand substitution, arithmetic expansion, and quote removal (see EEXXPPAANN-- SSIIOONN below). If the variable has its iinntteeggeerr attribute set, then _v_a_l_u_e - is evaluated as an arithmetic expression even if the $((...)) expansion + is evaluated as an arithmetic expression even if the $$((((...)))) expansion is not used (see AArriitthhmmeettiicc EExxppaannssiioonn below). Word splitting and path- name expansion are not performed. Assignment statements may also ap- pear as arguments to the aalliiaass, ddeeccllaarree, ttyyppeesseett, eexxppoorrtt, rreeaaddoonnllyy, and - llooccaall builtin commands (_d_e_c_l_a_r_a_t_i_o_n commands). When in _p_o_s_i_x _m_o_d_e, - these builtins may appear in a command after one or more instances of + llooccaall builtin commands (_d_e_c_l_a_r_a_t_i_o_n commands). When in _p_o_s_i_x _m_o_d_e, + these builtins may appear in a command after one or more instances of the ccoommmmaanndd builtin and retain these assignment statement properties. - In the context where an assignment statement is assigning a value to a + In the context where an assignment statement is assigning a value to a shell variable or array index, the += operator can be used to append to or add to the variable's previous value. This includes arguments to - builtin commands such as ddeeccllaarree that accept assignment statements - (_d_e_c_l_a_r_a_t_i_o_n commands). When += is applied to a variable for which the + builtin commands such as ddeeccllaarree that accept assignment statements (_d_e_- + _c_l_a_r_a_t_i_o_n commands). When += is applied to a variable for which the iinntteeggeerr attribute has been set, _v_a_l_u_e is evaluated as an arithmetic ex- pression and added to the variable's current value, which is also eval- - uated. When += is applied to an array variable using compound assign- - ment (see AArrrraayyss below), the variable's value is not unset (as it is - when using =), and new values are appended to the array beginning at - one greater than the array's maximum index (for indexed arrays) or - added as additional key-value pairs in an associative array. When ap- - plied to a string-valued variable, _v_a_l_u_e is expanded and appended to + uated. When += is applied to an array variable using compound assign- + ment (see AArrrraayyss below), the variable's value is not unset (as it is + when using =), and new values are appended to the array beginning at + one greater than the array's maximum index (for indexed arrays) or + added as additional key-value pairs in an associative array. When ap- + plied to a string-valued variable, _v_a_l_u_e is expanded and appended to the variable's value. A variable can be assigned the _n_a_m_e_r_e_f attribute using the --nn option to @@ -736,10 +738,12 @@ PPAARRAAMMEETTEERRSS itself), the operation is actually performed on the variable specified by the nameref variable's value. A nameref is commonly used within shell functions to refer to a variable whose name is passed as an argu- - ment to the function. For instance, if a variable name is passed to a + ment to the function. For instance, if a variable name is passed to a shell function as its first argument, running + declare -n ref=$1 - inside the function creates a nameref variable rreeff whose value is the + + inside the function creates a nameref variable rreeff whose value is the variable name passed as the first argument. References and assignments to rreeff, and changes to its attributes, are treated as references, as- signments, and attribute modifications to the variable whose name was @@ -747,14 +751,14 @@ PPAARRAAMMEETTEERRSS attribute, the list of words can be a list of shell variables, and a name reference will be established for each word in the list, in turn, when the loop is executed. Array variables cannot be given the nnaammeerreeff - attribute. However, nameref variables can reference array variables - and subscripted array variables. Namerefs can be unset using the --nn - option to the uunnsseett builtin. Otherwise, if uunnsseett is executed with the - name of a nameref variable as an argument, the variable referenced by + attribute. However, nameref variables can reference array variables + and subscripted array variables. Namerefs can be unset using the --nn + option to the uunnsseett builtin. Otherwise, if uunnsseett is executed with the + name of a nameref variable as an argument, the variable referenced by the nameref variable will be unset. PPoossiittiioonnaall PPaarraammeetteerrss - A _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r is a parameter denoted by one or more digits, + A _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r is a parameter denoted by one or more digits, other than the single digit 0. Positional parameters are assigned from the shell's arguments when it is invoked, and may be reassigned using the sseett builtin command. Positional parameters may not be assigned to @@ -768,42 +772,42 @@ PPAARRAAMMEETTEERRSS The shell treats several parameters specially. These parameters may only be referenced; assignment to them is not allowed. ** Expands to the positional parameters, starting from one. When - the expansion is not within double quotes, each positional pa- - rameter expands to a separate word. In contexts where it is - performed, those words are subject to further word splitting and - pathname expansion. When the expansion occurs within double - quotes, it expands to a single word with the value of each pa- - rameter separated by the first character of the IIFFSS special - variable. That is, "$$**" is equivalent to "$$11_c$$22_c......", where _c - is the first character of the value of the IIFFSS variable. If IIFFSS - is unset, the parameters are separated by spaces. If IIFFSS is - null, the parameters are joined without intervening separators. - @@ Expands to the positional parameters, starting from one. In - contexts where word splitting is performed, this expands each - positional parameter to a separate word; if not within double - quotes, these words are subject to word splitting. In contexts - where word splitting is not performed, this expands to a single - word with each positional parameter separated by a space. When - the expansion occurs within double quotes, each parameter ex- - pands to a separate word. That is, "$$@@" is equivalent to "$$11" - "$$22" ... If the double-quoted expansion occurs within a word, - the expansion of the first parameter is joined with the begin- - ning part of the original word, and the expansion of the last - parameter is joined with the last part of the original word. - When there are no positional parameters, "$$@@" and $$@@ expand to - nothing (i.e., they are removed). + the expansion is not within double quotes, each positional para- + meter expands to a separate word. In contexts where it is per- + formed, those words are subject to further word splitting and + pathname expansion. When the expansion occurs within double + quotes, it expands to a single word with the value of each para- + meter separated by the first character of the IIFFSS special vari- + able. That is, ""$$**"" is equivalent to ""$$11_c$$22_c......"", where _c is + the first character of the value of the IIFFSS variable. If IIFFSS is + unset, the parameters are separated by spaces. If IIFFSS is null, + the parameters are joined without intervening separators. + @@ Expands to the positional parameters, starting from one. In + contexts where word splitting is performed, this expands each + positional parameter to a separate word; if not within double + quotes, these words are subject to word splitting. In contexts + where word splitting is not performed, this expands to a single + word with each positional parameter separated by a space. When + the expansion occurs within double quotes, each parameter ex- + pands to a separate word. That is, ""$$@@"" is equivalent to + ""$$11"" ""$$22"" ...... If the double-quoted expansion occurs within a + word, the expansion of the first parameter is joined with the + beginning part of the original word, and the expansion of the + last parameter is joined with the last part of the original + word. When there are no positional parameters, ""$$@@"" and $$@@ ex- + pand to nothing (i.e., they are removed). ## Expands to the number of positional parameters in decimal. - ?? Expands to the exit status of the most recently executed fore- + ?? Expands to the exit status of the most recently executed fore- ground pipeline. - -- Expands to the current option flags as specified upon invoca- - tion, by the sseett builtin command, or those set by the shell it- + -- Expands to the current option flags as specified upon invoca- + tion, by the sseett builtin command, or those set by the shell it- self (such as the --ii option). - $$ Expands to the process ID of the shell. In a subshell, it ex- + $$ Expands to the process ID of the shell. In a subshell, it ex- pands to the process ID of the current shell, not the subshell. - !! Expands to the process ID of the job most recently placed into - the background, whether executed as an asynchronous command or + !! Expands to the process ID of the job most recently placed into + the background, whether executed as an asynchronous command or using the bbgg builtin (see JJOOBB CCOONNTTRROOLL below). - 00 Expands to the name of the shell or shell script. This is set + 00 Expands to the name of the shell or shell script. This is set at shell initialization. If bbaasshh is invoked with a file of com- mands, $$00 is set to the name of that file. If bbaasshh is started with the --cc option, then $$00 is set to the first argument after @@ -828,55 +832,57 @@ PPAARRAAMMEETTEERRSS A colon-separated list of enabled shell options. Each word in the list is a valid argument for the --ss option to the sshhoopptt builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The options - appearing in BBAASSHHOOPPTTSS are those reported as _o_n by sshhoopptt. If - this variable is in the environment when bbaasshh starts up, each - shell option in the list will be enabled before reading any + appearing in BBAASSHHOOPPTTSS are those reported as _o_n by sshhoopptt. If + this variable is in the environment when bbaasshh starts up, each + shell option in the list will be enabled before reading any startup files. This variable is read-only. BBAASSHHPPIIDD - Expands to the process ID of the current bbaasshh process. This - differs from $$$$ under certain circumstances, such as subshells - that do not require bbaasshh to be re-initialized. Assignments to - BBAASSHHPPIIDD have no effect. If BBAASSHHPPIIDD is unset, it loses its spe- + Expands to the process ID of the current bbaasshh process. This + differs from $$$$ under certain circumstances, such as subshells + that do not require bbaasshh to be re-initialized. Assignments to + BBAASSHHPPIIDD have no effect. If BBAASSHHPPIIDD is unset, it loses its spe- cial properties, even if it is subsequently reset. BBAASSHH__AALLIIAASSEESS - An associative array variable whose members correspond to the - internal list of aliases as maintained by the aalliiaass builtin. - Elements added to this array appear in the alias list; however, - unsetting array elements currently does not cause aliases to be + An associative array variable whose members correspond to the + internal list of aliases as maintained by the aalliiaass builtin. + Elements added to this array appear in the alias list; however, + unsetting array elements currently does not cause aliases to be removed from the alias list. If BBAASSHH__AALLIIAASSEESS is unset, it loses its special properties, even if it is subsequently reset. BBAASSHH__AARRGGCC An array variable whose values are the number of parameters in each frame of the current bbaasshh execution call stack. The number - of parameters to the current subroutine (shell function or - script executed with .. or ssoouurrccee) is at the top of the stack. - When a subroutine is executed, the number of parameters passed + of parameters to the current subroutine (shell function or + script executed with .. or ssoouurrccee) is at the top of the stack. + When a subroutine is executed, the number of parameters passed is pushed onto BBAASSHH__AARRGGCC. The shell sets BBAASSHH__AARRGGCC only when in extended debugging mode (see the description of the eexxttddeebbuugg op- - tion to the sshhoopptt builtin below). Setting eexxttddeebbuugg after the + tion to the sshhoopptt builtin below). Setting eexxttddeebbuugg after the shell has started to execute a script, or referencing this vari- able when eexxttddeebbuugg is not set, may result in inconsistent val- - ues. + ues. Assignments to BBAASSHH__AARRGGCC have no effect, and it may not be + unset. BBAASSHH__AARRGGVV An array variable containing all of the parameters in the cur- rent bbaasshh execution call stack. The final parameter of the last - subroutine call is at the top of the stack; the first parameter + subroutine call is at the top of the stack; the first parameter of the initial call is at the bottom. When a subroutine is exe- cuted, the parameters supplied are pushed onto BBAASSHH__AARRGGVV. The shell sets BBAASSHH__AARRGGVV only when in extended debugging mode (see the description of the eexxttddeebbuugg option to the sshhoopptt builtin be- low). Setting eexxttddeebbuugg after the shell has started to execute a - script, or referencing this variable when eexxttddeebbuugg is not set, - may result in inconsistent values. + script, or referencing this variable when eexxttddeebbuugg is not set, + may result in inconsistent values. Assignments to BBAASSHH__AARRGGVV + have no effect, and it may not be unset. BBAASSHH__AARRGGVV00 When referenced, this variable expands to the name of the shell or shell script (identical to $$00; see the description of special - parameter 0 above). Assignment to BBAASSHH__AARRGGVV00 causes the value - assigned to also be assigned to $$00. If BBAASSHH__AARRGGVV00 is unset, it + parameter 0 above). Assignment to BBAASSHH__AARRGGVV00 causes the value + assigned to also be assigned to $$00. If BBAASSHH__AARRGGVV00 is unset, it loses its special properties, even if it is subsequently reset. BBAASSHH__CCMMDDSS - An associative array variable whose members correspond to the - internal hash table of commands as maintained by the hhaasshh + An associative array variable whose members correspond to the + internal hash table of commands as maintained by the hhaasshh builtin. Elements added to this array appear in the hash table; however, unsetting array elements currently does not cause com- mand names to be removed from the hash table. If BBAASSHH__CCMMDDSS is @@ -885,18 +891,19 @@ PPAARRAAMMEETTEERRSS BBAASSHH__CCOOMMMMAANNDD The command currently being executed or about to be executed, unless the shell is executing a command as the result of a trap, - in which case it is the command executing at the time of the - trap. If BBAASSHH__CCOOMMMMAANNDD is unset, it loses its special proper- + in which case it is the command executing at the time of the + trap. If BBAASSHH__CCOOMMMMAANNDD is unset, it loses its special proper- ties, even if it is subsequently reset. BBAASSHH__EEXXEECCUUTTIIOONN__SSTTRRIINNGG The command argument to the --cc invocation option. BBAASSHH__LLIINNEENNOO - An array variable whose members are the line numbers in source - files where each corresponding member of FFUUNNCCNNAAMMEE was invoked. + An array variable whose members are the line numbers in source + files where each corresponding member of FFUUNNCCNNAAMMEE was invoked. $${{BBAASSHH__LLIINNEENNOO[[_$_i]]}} is the line number in the source file ($${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}}) where $${{FFUUNNCCNNAAMMEE[[_$_i]]}} was called (or - $${{BBAASSHH__LLIINNEENNOO[[_$_i_-_1]]}} if referenced within another shell func- - tion). Use LLIINNEENNOO to obtain the current line number. + $${{BBAASSHH__LLIINNEENNOO[[_$_i_-_1]]}} if referenced within another shell func- + tion). Use LLIINNEENNOO to obtain the current line number. Assign- + ments to BBAASSHH__LLIINNEENNOO have no effect, and it may not be unset. BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH A colon-separated list of directories in which the shell looks for dynamically loadable builtins specified by the eennaabbllee com- @@ -907,32 +914,44 @@ PPAARRAAMMEETTEERRSS 0 is the portion of the string matching the entire regular ex- pression. The element with index _n is the portion of the string matching the _nth parenthesized subexpression. + BBAASSHH__MMOONNOOSSEECCOONNDDSS + Each time this variable is referenced, it expands to the value + returned by the system's monotonic clock, if one is available. + If there is no monotonic clock, this is equivalent to EEPPOOCCHHSSEECC-- + OONNDDSS. If BBAASSHH__MMOONNOOSSEECCOONNDDSS is unset, it loses its special prop- + erties, even if it is subsequently reset. BBAASSHH__SSOOUURRCCEE - An array variable whose members are the source filenames where - the corresponding shell function names in the FFUUNNCCNNAAMMEE array + An array variable whose members are the source filenames where + the corresponding shell function names in the FFUUNNCCNNAAMMEE array variable are defined. The shell function $${{FFUUNNCCNNAAMMEE[[_$_i]]}} is de- fined in the file $${{BBAASSHH__SSOOUURRCCEE[[_$_i]]}} and called from - $${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}}. + $${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}}. Assignments to BBAASSHH__SSOOUURRCCEE have no ef- + fect, and it may not be unset. BBAASSHH__SSUUBBSSHHEELLLL - Incremented by one within each subshell or subshell environment - when the shell begins executing in that environment. The ini- - tial value is 0. If BBAASSHH__SSUUBBSSHHEELLLL is unset, it loses its spe- + Incremented by one within each subshell or subshell environment + when the shell begins executing in that environment. The ini- + tial value is 0. If BBAASSHH__SSUUBBSSHHEELLLL is unset, it loses its spe- cial properties, even if it is subsequently reset. + BBAASSHH__TTRRAAPPSSIIGG + Set to the signal number corresponding to the trap action being + executed during its execution. See the description of ttrraapp un- + der SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below for information about signal + numbers and trap execution. BBAASSHH__VVEERRSSIINNFFOO A readonly array variable whose members hold version information - for this instance of bbaasshh. The values assigned to the array + for this instance of bbaasshh. The values assigned to the array members are as follows: BBAASSHH__VVEERRSSIINNFFOO[[0]] The major version number (the _r_e_l_e_a_s_e). BBAASSHH__VVEERRSSIINNFFOO[[1]] The minor version number (the _v_e_r_s_i_o_n). BBAASSHH__VVEERRSSIINNFFOO[[2]] The patch level. BBAASSHH__VVEERRSSIINNFFOO[[3]] The build version. - BBAASSHH__VVEERRSSIINNFFOO[[4]] The release status (e.g., _b_e_t_a_1). + BBAASSHH__VVEERRSSIINNFFOO[[4]] The release status (e.g., _b_e_t_a). BBAASSHH__VVEERRSSIINNFFOO[[5]] The value of MMAACCHHTTYYPPEE. BBAASSHH__VVEERRSSIIOONN - Expands to a string describing the version of this instance of + Expands to a string describing the version of this instance of bbaasshh. CCOOMMPP__CCWWOORRDD - An index into $${{CCOOMMPP__WWOORRDDSS}} of the word containing the current + An index into $${{CCOOMMPP__WWOORRDDSS}} of the word containing the current cursor position. This variable is available only in shell func- tions invoked by the programmable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). @@ -940,16 +959,16 @@ PPAARRAAMMEETTEERRSS The key (or final key of a key sequence) used to invoke the cur- rent completion function. CCOOMMPP__LLIINNEE - The current command line. This variable is available only in - shell functions and external commands invoked by the program- - mable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). + The current command line. This variable is available only in + shell functions and external commands invoked by the programma- + ble completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). CCOOMMPP__PPOOIINNTT - The index of the current cursor position relative to the begin- - ning of the current command. If the current cursor position is + The index of the current cursor position relative to the begin- + ning of the current command. If the current cursor position is at the end of the current command, the value of this variable is equal to $${{##CCOOMMPP__LLIINNEE}}. This variable is available only in - shell functions and external commands invoked by the program- - mable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). + shell functions and external commands invoked by the programma- + ble completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). CCOOMMPP__TTYYPPEE Set to an integer value corresponding to the type of completion attempted that caused a completion function to be called: _T_A_B, @@ -957,8 +976,8 @@ PPAARRAAMMEETTEERRSS sive tabs, _!, for listing alternatives on partial word comple- tion, _@, to list completions if the word is not unmodified, or _%, for menu completion. This variable is available only in - shell functions and external commands invoked by the program- - mable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). + shell functions and external commands invoked by the programma- + ble completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). CCOOMMPP__WWOORRDDBBRREEAAKKSS The set of characters that the rreeaaddlliinnee library treats as word separators when performing word completion. If CCOOMMPP__WWOORRDDBBRREEAAKKSS @@ -976,19 +995,19 @@ PPAARRAAMMEETTEERRSS (see CCoopprroocceesssseess above). DDIIRRSSTTAACCKK An array variable (see AArrrraayyss below) containing the current con- - tents of the directory stack. Directories appear in the stack - in the order they are displayed by the ddiirrss builtin. Assigning + tents of the directory stack. Directories appear in the stack + in the order they are displayed by the ddiirrss builtin. Assigning to members of this array variable may be used to modify directo- ries already in the stack, but the ppuusshhdd and ppooppdd builtins must be used to add and remove directories. Assignment to this vari- - able will not change the current directory. If DDIIRRSSTTAACCKK is un- + able will not change the current directory. If DDIIRRSSTTAACCKK is un- set, it loses its special properties, even if it is subsequently reset. EEPPOOCCHHRREEAALLTTIIMMEE Each time this parameter is referenced, it expands to the number - of seconds since the Unix Epoch (see _t_i_m_e(3)) as a floating + of seconds since the Unix Epoch (see _t_i_m_e(3)) as a floating point value with micro-second granularity. Assignments to - EEPPOOCCHHRREEAALLTTIIMMEE are ignored. If EEPPOOCCHHRREEAALLTTIIMMEE is unset, it loses + EEPPOOCCHHRREEAALLTTIIMMEE are ignored. If EEPPOOCCHHRREEAALLTTIIMMEE is unset, it loses its special properties, even if it is subsequently reset. EEPPOOCCHHSSEECCOONNDDSS Each time this parameter is referenced, it expands to the number @@ -1010,13 +1029,13 @@ PPAARRAAMMEETTEERRSS This variable can be used with BBAASSHH__LLIINNEENNOO and BBAASSHH__SSOOUURRCCEE. Each element of FFUUNNCCNNAAMMEE has corresponding elements in BBAASSHH__LLIINNEENNOO and BBAASSHH__SSOOUURRCCEE to describe the call stack. For in- - stance, $${{FFUUNNCCNNAAMMEE[[_$_i]]}} was called from the file - $${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}} at line number $${{BBAASSHH__LLIINNEENNOO[[_$_i]]}}. The + stance, $${{FFUUNNCCNNAAMMEE[[_$_i]]}} was called from the file + $${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}} at line number $${{BBAASSHH__LLIINNEENNOO[[_$_i]]}}. The ccaalllleerr builtin displays the current call stack using this infor- mation. GGRROOUUPPSS An array variable containing the list of groups of which the current user is a member. Assignments to GGRROOUUPPSS have no effect. - If GGRROOUUPPSS is unset, it loses its special properties, even if it + If GGRROOUUPPSS is unset, it loses its special properties, even if it is subsequently reset. HHIISSTTCCMMDD The history number, or index in the history list, of the current @@ -1036,34 +1055,34 @@ PPAARRAAMMEETTEERRSS be meaningful. If LLIINNEENNOO is unset, it loses its special proper- ties, even if it is subsequently reset. MMAACCHHTTYYPPEE - Automatically set to a string that fully describes the system - type on which bbaasshh is executing, in the standard GNU _c_p_u_-_c_o_m_- + Automatically set to a string that fully describes the system + type on which bbaasshh is executing, in the standard GNU _c_p_u_-_c_o_m_- _p_a_n_y_-_s_y_s_t_e_m format. The default is system-dependent. MMAAPPFFIILLEE - An array variable (see AArrrraayyss below) created to hold the text + An array variable (see AArrrraayyss below) created to hold the text read by the mmaappffiillee builtin when no variable name is supplied. OOLLDDPPWWDD The previous working directory as set by the ccdd command. - OOPPTTAARRGG The value of the last option argument processed by the ggeettooppttss + OOPPTTAARRGG The value of the last option argument processed by the ggeettooppttss builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). - OOPPTTIINNDD The index of the next argument to be processed by the ggeettooppttss + OOPPTTIINNDD The index of the next argument to be processed by the ggeettooppttss builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). - OOSSTTYYPPEE Automatically set to a string that describes the operating sys- - tem on which bbaasshh is executing. The default is system-depen- + OOSSTTYYPPEE Automatically set to a string that describes the operating sys- + tem on which bbaasshh is executing. The default is system-depen- dent. PPIIPPEESSTTAATTUUSS - An array variable (see AArrrraayyss below) containing a list of exit - status values from the processes in the most-recently-executed + An array variable (see AArrrraayyss below) containing a list of exit + status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command). - PPPPIIDD The process ID of the shell's parent. This variable is read- + PPPPIIDD The process ID of the shell's parent. This variable is read- only. PPWWDD The current working directory as set by the ccdd command. - RRAANNDDOOMM Each time this parameter is referenced, it expands to a random - integer between 0 and 32767. Assigning a value to RRAANNDDOOMM ini- - tializes (seeds) the sequence of random numbers. If RRAANNDDOOMM is - unset, it loses its special properties, even if it is subse- + RRAANNDDOOMM Each time this parameter is referenced, it expands to a random + integer between 0 and 32767. Assigning a value to RRAANNDDOOMM ini- + tializes (seeds) the sequence of random numbers. If RRAANNDDOOMM is + unset, it loses its special properties, even if it is subse- quently reset. RREEAADDLLIINNEE__AARRGGUUMMEENNTT - Any numeric argument given to a readline command that was de- + Any numeric argument given to a readline command that was de- fined using "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) when it was invoked. RREEAADDLLIINNEE__LLIINNEE @@ -1081,16 +1100,16 @@ PPAARRAAMMEETTEERRSS no arguments are supplied. SSEECCOONNDDSS Each time this parameter is referenced, it expands to the number - of seconds since shell invocation. If a value is assigned to - SSEECCOONNDDSS, the value returned upon subsequent references is the - number of seconds since the assignment plus the value assigned. - The number of seconds at shell invocation and the current time - are always determined by querying the system clock. If SSEECCOONNDDSS - is unset, it loses its special properties, even if it is subse- + of seconds since shell invocation. If a value is assigned to + SSEECCOONNDDSS, the value returned upon subsequent references is the + number of seconds since the assignment plus the value assigned. + The number of seconds at shell invocation and the current time + are always determined by querying the system clock. If SSEECCOONNDDSS + is unset, it loses its special properties, even if it is subse- quently reset. SSHHEELLLLOOPPTTSS - A colon-separated list of enabled shell options. Each word in - the list is a valid argument for the --oo option to the sseett + A colon-separated list of enabled shell options. Each word in + the list is a valid argument for the --oo option to the sseett builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The options appearing in SSHHEELLLLOOPPTTSS are those reported as _o_n by sseett --oo. If this variable is in the environment when bbaasshh starts up, each @@ -1099,10 +1118,10 @@ PPAARRAAMMEETTEERRSS SSHHLLVVLL Incremented by one each time an instance of bbaasshh is started. SSRRAANNDDOOMM This variable expands to a 32-bit pseudo-random number each time - it is referenced. The random number generator is not linear on - systems that support /dev/urandom or _a_r_c_4_r_a_n_d_o_m, so each re- - turned number has no relationship to the numbers preceding it. - The random number generator cannot be seeded, so assignments to + it is referenced. The random number generator is not linear on + systems that support _/_d_e_v_/_u_r_a_n_d_o_m or _a_r_c_4_r_a_n_d_o_m(3), so each re- + turned number has no relationship to the numbers preceding it. + The random number generator cannot be seeded, so assignments to this variable have no effect. If SSRRAANNDDOOMM is unset, it loses its special properties, even if it is subsequently reset. UUIIDD Expands to the user ID of the current user, initialized at shell @@ -1115,47 +1134,48 @@ PPAARRAAMMEETTEERRSS The value is used to set the shell's compatibility level. See SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE below for a description of the various compatibility levels and their effects. The value may be a dec- - imal number (e.g., 4.2) or an integer (e.g., 42) corresponding - to the desired compatibility level. If BBAASSHH__CCOOMMPPAATT is unset or - set to the empty string, the compatibility level is set to the - default for the current version. If BBAASSHH__CCOOMMPPAATT is set to a - value that is not one of the valid compatibility levels, the - shell prints an error message and sets the compatibility level - to the default for the current version. The valid values corre- - spond to the compatibility levels described below under SSHHEELLLL - CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE. For example, 4.2 and 42 are valid values - that correspond to the ccoommppaatt4422 sshhoopptt option and set the compat- - ibility level to 42. The current version is also a valid value. + imal number (e.g., 4.2) or an integer (e.g., 42) corresponding + to the desired compatibility level. If BBAASSHH__CCOOMMPPAATT is unset or + set to the empty string, the compatibility level is set to the + default for the current version. If BBAASSHH__CCOOMMPPAATT is set to a + value that is not one of the valid compatibility levels, the + shell prints an error message and sets the compatibility level + to the default for the current version. A subset of the valid + values correspond to the compatibility levels described below + under SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE. For example, 4.2 and 42 are + valid values that correspond to the ccoommppaatt4422 sshhoopptt option and + set the compatibility level to 42. The current version is also + a valid value. BBAASSHH__EENNVV If this parameter is set when bbaasshh is executing a shell script, its value is interpreted as a filename containing commands to initialize the shell, as in _~_/_._b_a_s_h_r_c. The value of BBAASSHH__EENNVV is - subjected to parameter expansion, command substitution, and - arithmetic expansion before being interpreted as a filename. + subjected to parameter expansion, command substitution, and + arithmetic expansion before being interpreted as a filename. PPAATTHH is not used to search for the resultant filename. BBAASSHH__XXTTRRAACCEEFFDD - If set to an integer corresponding to a valid file descriptor, - bbaasshh will write the trace output generated when _s_e_t _-_x is en- - abled to that file descriptor. The file descriptor is closed - when BBAASSHH__XXTTRRAACCEEFFDD is unset or assigned a new value. Unsetting - BBAASSHH__XXTTRRAACCEEFFDD or assigning it the empty string causes the trace - output to be sent to the standard error. Note that setting + If set to an integer corresponding to a valid file descriptor, + bbaasshh will write the trace output generated when "set -x" is en- + abled to that file descriptor. The file descriptor is closed + when BBAASSHH__XXTTRRAACCEEFFDD is unset or assigned a new value. Unsetting + BBAASSHH__XXTTRRAACCEEFFDD or assigning it the empty string causes the trace + output to be sent to the standard error. Note that setting BBAASSHH__XXTTRRAACCEEFFDD to 2 (the standard error file descriptor) and then unsetting it will result in the standard error being closed. CCDDPPAATTHH The search path for the ccdd command. This is a colon-separated list of directories in which the shell looks for destination di- - rectories specified by the ccdd command. A sample value is + rectories specified by the ccdd command. A sample value is ".:~:/usr". CCHHIILLDD__MMAAXX - Set the number of exited child status values for the shell to - remember. Bash will not allow this value to be decreased below - a POSIX-mandated minimum, and there is a maximum value (cur- - rently 8192) that this may not exceed. The minimum value is + Set the number of exited child status values for the shell to + remember. BBaasshh will not allow this value to be decreased below + a POSIX-mandated minimum, and there is a maximum value (cur- + rently 8192) that this may not exceed. The minimum value is system-dependent. CCOOLLUUMMNNSS - Used by the sseelleecctt compound command to determine the terminal - width when printing selection lists. Automatically set if the - cchheecckkwwiinnssiizzee option is enabled or in an interactive shell upon + Used by the sseelleecctt compound command to determine the terminal + width when printing selection lists. Automatically set if the + cchheecckkwwiinnssiizzee option is enabled or in an interactive shell upon receipt of a SSIIGGWWIINNCCHH. CCOOMMPPRREEPPLLYY An array variable from which bbaasshh reads the possible completions @@ -1182,22 +1202,41 @@ PPAARRAAMMEETTEERRSS FFIIGGNNOORREE A colon-separated list of suffixes to ignore when performing filename completion (see RREEAADDLLIINNEE below). A filename whose suf- - fix matches one of the entries in FFIIGGNNOORREE is excluded from the + fix matches one of the entries in FFIIGGNNOORREE is excluded from the list of matched filenames. A sample value is ".o:~". FFUUNNCCNNEESSTT - If set to a numeric value greater than 0, defines a maximum - function nesting level. Function invocations that exceed this + If set to a numeric value greater than 0, defines a maximum + function nesting level. Function invocations that exceed this nesting level will cause the current command to abort. GGLLOOBBIIGGNNOORREE - A colon-separated list of patterns defining the set of file - names to be ignored by pathname expansion. If a file name - matched by a pathname expansion pattern also matches one of the + A colon-separated list of patterns defining the set of file + names to be ignored by pathname expansion. If a file name + matched by a pathname expansion pattern also matches one of the patterns in GGLLOOBBIIGGNNOORREE, it is removed from the list of matches. + GGLLOOBBSSOORRTT + Control how the results of pathname expansion are sorted. The + value of this variable specifies the sort criteria and sort or- + der for the results of pathname expansion. If this variable is + unset or set to the null string, pathname expansion uses the + historical behavior of sorting by name. If set, a valid value + begins with an optional _+, which is ignored, or _-, which re- + verses the sort order from ascending to descending, followed by + a sort specifier. The valid sort specifiers are _n_a_m_e, _s_i_z_e, + _m_t_i_m_e, _a_t_i_m_e, _c_t_i_m_e, and _b_l_o_c_k_s, which sort the files on name, + file size, modification time, access time, inode change time, + and number of blocks, respectively. For example, a value of + _-_m_t_i_m_e sorts the results in descending order by modification + time (newest first). A sort specifier of _n_o_s_o_r_t disables sort- + ing completely; the results are returned in the order they are + read from the file system,. If the sort specifier is missing, + it defaults to _n_a_m_e, so a value of _+ is equivalent to the null + string, and a value of _- sorts by name in descending order. Any + invalid value restores the historical sorting behavior. HHIISSTTCCOONNTTRROOLL - A colon-separated list of values controlling how commands are - saved on the history list. If the list of values includes _i_g_- - _n_o_r_e_s_p_a_c_e, lines which begin with a ssppaaccee character are not - saved in the history list. A value of _i_g_n_o_r_e_d_u_p_s causes lines + A colon-separated list of values controlling how commands are + saved on the history list. If the list of values includes + _i_g_n_o_r_e_s_p_a_c_e, lines which begin with a ssppaaccee character are not + saved in the history list. A value of _i_g_n_o_r_e_d_u_p_s causes lines matching the previous history entry to not be saved. A value of _i_g_n_o_r_e_b_o_t_h is shorthand for _i_g_n_o_r_e_s_p_a_c_e and _i_g_n_o_r_e_d_u_p_s. A value of _e_r_a_s_e_d_u_p_s causes all previous lines matching the current line @@ -1205,13 +1244,14 @@ PPAARRAAMMEETTEERRSS Any value not in the above list is ignored. If HHIISSTTCCOONNTTRROOLL is unset, or does not include a valid value, all lines read by the shell parser are saved on the history list, subject to the value - of HHIISSTTIIGGNNOORREE. The second and subsequent lines of a multi-line - compound command are not tested, and are added to the history + of HHIISSTTIIGGNNOORREE. The second and subsequent lines of a multi-line + compound command are not tested, and are added to the history regardless of the value of HHIISSTTCCOONNTTRROOLL. HHIISSTTFFIILLEE The name of the file in which command history is saved (see HHIISS-- - TTOORRYY below). The default value is _~_/_._b_a_s_h___h_i_s_t_o_r_y. If unset, - the command history is not saved when a shell exits. + TTOORRYY below). BBaasshh assigns a default value of _~_/_._b_a_s_h___h_i_s_t_o_r_y. + If HHIISSTTFFIILLEE is unset or null, the command history is not saved + when a shell exits. HHIISSTTFFIILLEESSIIZZEE The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is trun- @@ -1224,20 +1264,22 @@ PPAARRAAMMEETTEERRSS HHIISSTTSSIIZZEE after reading any startup files. HHIISSTTIIGGNNOORREE A colon-separated list of patterns used to decide which command - lines should be saved on the history list. Each pattern is an- - chored at the beginning of the line and must match the complete - line (no implicit `**' is appended). Each pattern is tested + lines should be saved on the history list. If a command line + matches one of the patterns in the value of HHIISSTTIIGGNNOORREE, it is + not saved on the history list. Each pattern is anchored at the + beginning of the line and must match the complete line (bbaasshh + will not implicitly append a "**"). Each pattern is tested against the line after the checks specified by HHIISSTTCCOONNTTRROOLL are applied. In addition to the normal shell pattern matching char- - acters, `&&' matches the previous history line. `&&' may be es- - caped using a backslash; the backslash is removed before at- - tempting a match. The second and subsequent lines of a multi- - line compound command are not tested, and are added to the his- - tory regardless of the value of HHIISSTTIIGGNNOORREE. The pattern match- - ing honors the setting of the eexxttgglloobb shell option. + acters, "&&" matches the previous history line. A backslash will + escape the "&&"; the backslash is removed before attempting a + match. The second and subsequent lines of a multi-line compound + command are not tested, and are added to the history regardless + of the value of HHIISSTTIIGGNNOORREE. The pattern matching honors the + setting of the eexxttgglloobb shell option. HHIISSTTSSIIZZEE - The number of commands to remember in the command history (see - HHIISSTTOORRYY below). If the value is 0, commands are not saved in + The number of commands to remember in the command history (see + HHIISSTTOORRYY below). If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved on the history list (there is no limit). The shell sets the default value to 500 after reading any @@ -1245,16 +1287,16 @@ PPAARRAAMMEETTEERRSS HHIISSTTTTIIMMEEFFOORRMMAATT If this variable is set and not null, its value is used as a format string for _s_t_r_f_t_i_m_e(3) to print the time stamp associated - with each history entry displayed by the hhiissttoorryy builtin. If - this variable is set, time stamps are written to the history - file so they may be preserved across shell sessions. This uses - the history comment character to distinguish timestamps from + with each history entry displayed by the hhiissttoorryy builtin. If + this variable is set, time stamps are written to the history + file so they may be preserved across shell sessions. This uses + the history comment character to distinguish timestamps from other history lines. HHOOMMEE The home directory of the current user; the default argument for the ccdd builtin command. The value of this variable is also used when performing tilde expansion. HHOOSSTTFFIILLEE - Contains the name of a file in the same format as _/_e_t_c_/_h_o_s_t_s + Contains the name of a file in the same format as _/_e_t_c_/_h_o_s_t_s that should be read when the shell needs to complete a hostname. The list of possible hostname completions may be changed while the shell is running; the next time hostname completion is at- @@ -1264,9 +1306,8 @@ PPAARRAAMMEETTEERRSS read _/_e_t_c_/_h_o_s_t_s to obtain the list of possible hostname comple- tions. When HHOOSSTTFFIILLEE is unset, the hostname list is cleared. IIFFSS The _I_n_t_e_r_n_a_l _F_i_e_l_d _S_e_p_a_r_a_t_o_r that is used for word splitting af- - ter expansion and to split lines into words with the rreeaadd - builtin command. The default value is ``''. + ter expansion and to split lines into words with the rreeaadd + builtin command. The default value is "". IIGGNNOORREEEEOOFF Controls the action of an interactive shell on receipt of an EEOOFF character as the sole input. If set, the value is the number of @@ -1322,12 +1363,11 @@ PPAARRAAMMEETTEERRSS A colon-separated list of filenames to be checked for mail. The message to be printed when mail arrives in a particular file may be specified by separating the filename from the message with a - `?'. When used in the text of the message, $$__ expands to the + "?". When used in the text of the message, $$__ expands to the name of the current mailfile. Example: - MMAAIILLPPAATTHH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has - mail!"' - BBaasshh can be configured to supply a default value for this vari- - able (there is no value by default), but the location of the + MMAAIILLPPAATTHH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"' + BBaasshh can be configured to supply a default value for this vari- + able (there is no value by default), but the location of the user mail files that it uses is system dependent (e.g., /var/mail/$$UUSSEERR). OOPPTTEERRRR If set to the value 1, bbaasshh displays error messages generated by @@ -1338,17 +1378,16 @@ PPAARRAAMMEETTEERRSS directories in which the shell looks for commands (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN below). A zero-length (null) directory name in the value of PPAATTHH indicates the current directory. A null directory - name may appear as two adjacent colons, or as an initial or - trailing colon. The default path is system-dependent, and is + name may appear as two adjacent colons, or as an initial or + trailing colon. The default path is system-dependent, and is set by the administrator who installs bbaasshh. A common value is - ``/usr/local/bin:/usr/lo- - cal/sbin:/usr/bin:/usr/sbin:/bin:/sbin''. + "/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin". PPOOSSIIXXLLYY__CCOORRRREECCTT - If this variable is in the environment when bbaasshh starts, the - shell enters _p_o_s_i_x _m_o_d_e before reading the startup files, as if - the ----ppoossiixx invocation option had been supplied. If it is set - while the shell is running, bbaasshh enables _p_o_s_i_x _m_o_d_e, as if the - command _s_e_t _-_o _p_o_s_i_x had been executed. When the shell enters + If this variable is in the environment when bbaasshh starts, the + shell enters _p_o_s_i_x _m_o_d_e before reading the startup files, as if + the ----ppoossiixx invocation option had been supplied. If it is set + while the shell is running, bbaasshh enables _p_o_s_i_x _m_o_d_e, as if the + command "set -o posix" had been executed. When the shell enters _p_o_s_i_x _m_o_d_e, it sets this variable if it was not already set. PPRROOMMPPTT__CCOOMMMMAANNDD If this variable is set, and is an array, the value of each set @@ -1358,44 +1397,44 @@ PPAARRAAMMEETTEERRSS PPRROOMMPPTT__DDIIRRTTRRIIMM If set to a number greater than zero, the value is used as the number of trailing directory components to retain when expanding - the \\ww and \\WW prompt string escapes (see PPRROOMMPPTTIINNGG below). + the \\ww and \\WW prompt string escapes (see PPRROOMMPPTTIINNGG below). Characters removed are replaced with an ellipsis. - PPSS00 The value of this parameter is expanded (see PPRROOMMPPTTIINNGG below) - and displayed by interactive shells after reading a command and + PPSS00 The value of this parameter is expanded (see PPRROOMMPPTTIINNGG below) + and displayed by interactive shells after reading a command and before the command is executed. - PPSS11 The value of this parameter is expanded (see PPRROOMMPPTTIINNGG below) - and used as the primary prompt string. The default value is - ``\\ss--\\vv\\$$ ''. - PPSS22 The value of this parameter is expanded as with PPSS11 and used as - the secondary prompt string. The default is ``>> ''. + PPSS11 The value of this parameter is expanded (see PPRROOMMPPTTIINNGG below) + and used as the primary prompt string. The default value is + "\s-\v\$ ". + PPSS22 The value of this parameter is expanded as with PPSS11 and used as + the secondary prompt string. The default is "> ". PPSS33 The value of this parameter is used as the prompt for the sseelleecctt command (see SSHHEELLLL GGRRAAMMMMAARR above). PPSS44 The value of this parameter is expanded as with PPSS11 and the value is printed before each command bbaasshh displays during an ex- ecution trace. The first character of the expanded value of PPSS44 is replicated multiple times, as necessary, to indicate multiple - levels of indirection. The default is ``++ ''. - SSHHEELLLL This variable expands to the full pathname to the shell. If it - is not set when the shell starts, bbaasshh assigns to it the full + levels of indirection. The default is "+ ". + SSHHEELLLL This variable expands to the full pathname to the shell. If it + is not set when the shell starts, bbaasshh assigns to it the full pathname of the current user's login shell. TTIIMMEEFFOORRMMAATT - The value of this parameter is used as a format string specify- - ing how the timing information for pipelines prefixed with the - ttiimmee reserved word should be displayed. The %% character intro- - duces an escape sequence that is expanded to a time value or - other information. The escape sequences and their meanings are - as follows; the braces denote optional portions. + The value of this parameter is used as a format string specify- + ing how the timing information for pipelines prefixed with the + ttiimmee reserved word should be displayed. The %% character intro- + duces an escape sequence that is expanded to a time value or + other information. The escape sequences and their meanings are + as follows; the brackets denote optional portions. %%%% A literal %%. %%[[_p]][[ll]]RR The elapsed time in seconds. %%[[_p]][[ll]]UU The number of CPU seconds spent in user mode. %%[[_p]][[ll]]SS The number of CPU seconds spent in system mode. %%PP The CPU percentage, computed as (%U + %S) / %R. - The optional _p is a digit specifying the _p_r_e_c_i_s_i_o_n, the number + The optional _p is a digit specifying the _p_r_e_c_i_s_i_o_n, the number of fractional digits after a decimal point. A value of 0 causes - no decimal point or fraction to be output. At most three places + no decimal point or fraction to be output. At most six places after the decimal point may be specified; values of _p greater - than 3 are changed to 3. If _p is not specified, the value 3 is + than 6 are changed to 6. If _p is not specified, the value 3 is used. The optional ll specifies a longer format, including minutes, of @@ -1404,10 +1443,10 @@ PPAARRAAMMEETTEERRSS If this variable is not set, bbaasshh acts as if it had the value $$''\\nnrreeaall\\tt%%33llRR\\nnuusseerr\\tt%%33llUU\\nnssyyss\\tt%%33llSS''. If the value is null, - no timing information is displayed. A trailing newline is added - when the format string is displayed. + bbaasshh does not display any timing information. A trailing new- + line is added when the format string is displayed. TTMMOOUUTT If set to a value greater than zero, TTMMOOUUTT is treated as the de- - fault timeout for the rreeaadd builtin. The sseelleecctt command termi- + fault timeout for the rreeaadd builtin. The sseelleecctt command termi- nates if input does not arrive after TTMMOOUUTT seconds when input is coming from a terminal. In an interactive shell, the value is interpreted as the number of seconds to wait for a line of input @@ -1418,50 +1457,51 @@ PPAARRAAMMEETTEERRSS bbaasshh creates temporary files for the shell's use. aauuttoo__rreessuummee This variable controls how the shell interacts with the user and - job control. If this variable is set, single word simple com- + job control. If this variable is set, single word simple com- mands without redirections are treated as candidates for resump- tion of an existing stopped job. There is no ambiguity allowed; - if there is more than one job beginning with the string typed, - the job most recently accessed is selected. The _n_a_m_e of a - stopped job, in this context, is the command line used to start - it. If set to the value _e_x_a_c_t, the string supplied must match - the name of a stopped job exactly; if set to _s_u_b_s_t_r_i_n_g, the - string supplied needs to match a substring of the name of a - stopped job. The _s_u_b_s_t_r_i_n_g value provides functionality analo- - gous to the %%?? job identifier (see JJOOBB CCOONNTTRROOLL below). If set - to any other value, the supplied string must be a prefix of a + if there is more than one job beginning with the string typed, + the job most recently accessed is selected. The _n_a_m_e of a + stopped job, in this context, is the command line used to start + it. If set to the value _e_x_a_c_t, the string supplied must match + the name of a stopped job exactly; if set to _s_u_b_s_t_r_i_n_g, the + string supplied needs to match a substring of the name of a + stopped job. The _s_u_b_s_t_r_i_n_g value provides functionality analo- + gous to the %%?? job identifier (see JJOOBB CCOONNTTRROOLL 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 %%_s_t_r_i_n_g job identifier. hhiissttcchhaarrss The two or three characters which control history expansion and tokenization (see HHIISSTTOORRYY EEXXPPAANNSSIIOONN below). The first character - is the _h_i_s_t_o_r_y _e_x_p_a_n_s_i_o_n character, the character which signals - the start of a history expansion, normally `!!'. The second - character is the _q_u_i_c_k _s_u_b_s_t_i_t_u_t_i_o_n character, which is used as - shorthand for re-running the previous command entered, substi- - tuting one string for another in the command. The default is - `^^'. The optional third character is the character which indi- - cates that the remainder of the line is a comment when found as - the first character of a word, normally `##'. The history com- - ment character causes history substitution to be skipped for the - remaining words on the line. It does not necessarily cause the - shell parser to treat the rest of the line as a comment. + is the _h_i_s_t_o_r_y _e_x_p_a_n_s_i_o_n character, the character which signals + the start of a history expansion, normally "!!". The second + character is the _q_u_i_c_k _s_u_b_s_t_i_t_u_t_i_o_n character, which is used as + shorthand for re-running the previous command entered, substi- + tuting one string for another in the command, when it appears as + the first character on the line. The default is "^^". The op- + tional third character is the character which indicates that the + remainder of the line is a comment when found as the first char- + acter of a word, normally "##". The history comment character + causes history substitution to be skipped for the remaining + words on the line. It does not necessarily cause the shell + parser to treat the rest of the line as a comment. AArrrraayyss - BBaasshh provides one-dimensional indexed and associative array variables. - Any variable may be used as an indexed array; the ddeeccllaarree builtin will - explicitly declare an array. There is no maximum limit on the size of - an array, nor any requirement that members be indexed or assigned con- - tiguously. Indexed arrays are referenced using integers (including + BBaasshh provides one-dimensional indexed and associative array variables. + Any variable may be used as an indexed array; the ddeeccllaarree builtin will + explicitly declare an array. There is no maximum limit on the size of + an array, nor any requirement that members be indexed or assigned con- + tiguously. Indexed arrays are referenced using integers (including arithmetic expressions) and are zero-based; associative arrays are ref- erenced using arbitrary strings. Unless otherwise noted, indexed array indices must be non-negative integers. - An indexed array is created automatically if any variable is assigned + An indexed array is created automatically if any variable is assigned to using the syntax _n_a_m_e[_s_u_b_s_c_r_i_p_t]=_v_a_l_u_e. The _s_u_b_s_c_r_i_p_t is treated as an arithmetic expression that must evaluate to a number. To explicitly - declare an indexed array, use ddeeccllaarree --aa _n_a_m_e (see SSHHEELLLL BBUUIILLTTIINN CCOOMM-- - MMAANNDDSS below). ddeeccllaarree --aa _n_a_m_e[[_s_u_b_s_c_r_i_p_t]] is also accepted; the _s_u_b_- + declare an indexed array, use ddeeccllaarree --aa _n_a_m_e (see SSHHEELLLL BBUUIILLTTIINN CCOOMM-- + MMAANNDDSS below). ddeeccllaarree --aa _n_a_m_e[[_s_u_b_s_c_r_i_p_t]] is also accepted; the _s_u_b_- _s_c_r_i_p_t is ignored. Associative arrays are created using ddeeccllaarree --AA _n_a_m_e. @@ -1472,11 +1512,14 @@ PPAARRAAMMEETTEERRSS Arrays are assigned to using compound assignments of the form _n_a_m_e=((value_1 ... value_n)), where each _v_a_l_u_e may be of the form [_s_u_b_- _s_c_r_i_p_t]=_s_t_r_i_n_g. Indexed array assignments do not require anything but - _s_t_r_i_n_g. Each _v_a_l_u_e in the list is expanded using all the shell expan- - sions described below under EEXXPPAANNSSIIOONN. When assigning to indexed ar- - rays, if the optional brackets and subscript are supplied, that index - is assigned to; otherwise the index of the element assigned is the last - index assigned to by the statement plus one. Indexing starts at zero. + _s_t_r_i_n_g. Each _v_a_l_u_e in the list is expanded using the shell expansions + described below under EEXXPPAANNSSIIOONN, but _v_a_l_u_es that are valid variable as- + signments including the brackets and subscript do not undergo brace ex- + pansion and word splitting, as with individual variable assignments. + When assigning to indexed arrays, if the optional brackets and sub- + script are supplied, that index is assigned to; otherwise the index of + the element assigned is the last index assigned to by the statement + plus one. Indexing starts at zero. When assigning to an associative array, the words in a compound assign- ment may be either assignment statements, for which the subscript is @@ -1496,33 +1539,34 @@ PPAARRAAMMEETTEERRSS count back from the end of the array, and an index of -1 references the last element. - The += operator will append to an array variable when assigning using + The += operator will append to an array variable when assigning using the compound assignment syntax; see PPAARRAAMMEETTEERRSS above. - Any element of an array may be referenced using ${_n_a_m_e[_s_u_b_s_c_r_i_p_t]}. + Any element of an array may be referenced using ${_n_a_m_e[_s_u_b_s_c_r_i_p_t]}. The braces are required to avoid conflicts with pathname expansion. If - _s_u_b_s_c_r_i_p_t is @@ or **, the word expands to all members of _n_a_m_e. These - subscripts differ only when the word appears within double quotes. If - the word is double-quoted, ${_n_a_m_e[*]} expands to a single word with the + _s_u_b_s_c_r_i_p_t is @@ or **, the word expands to all members of _n_a_m_e, unless + noted in the description of a builtin or word expansion. These sub- + scripts differ only when the word appears within double quotes. If the + word is double-quoted, ${_n_a_m_e[*]} expands to a single word with the value of each array member separated by the first character of the IIFFSS special variable, and ${_n_a_m_e[@]} expands each element of _n_a_m_e to a sep- - arate word. When there are no array members, ${_n_a_m_e[@]} expands to - nothing. If the double-quoted expansion occurs within a word, the ex- + arate word. When there are no array members, ${_n_a_m_e[@]} expands to + nothing. If the double-quoted expansion occurs within a word, the ex- pansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. This is analogous to the expansion - of the special parameters ** and @@ (see SSppeecciiaall PPaarraammeetteerrss above). - ${#_n_a_m_e[_s_u_b_s_c_r_i_p_t]} expands to the length of ${_n_a_m_e[_s_u_b_s_c_r_i_p_t]}. If + of the special parameters ** and @@ (see SSppeecciiaall PPaarraammeetteerrss above). + ${#_n_a_m_e[_s_u_b_s_c_r_i_p_t]} expands to the length of ${_n_a_m_e[_s_u_b_s_c_r_i_p_t]}. If _s_u_b_s_c_r_i_p_t is ** or @@, the expansion is the number of elements in the ar- ray. If the _s_u_b_s_c_r_i_p_t used to reference an element of an indexed array - evaluates to a number less than zero, it is interpreted as relative to - one greater than the maximum index of the array, so negative indices + evaluates to a number less than zero, it is interpreted as relative to + one greater than the maximum index of the array, so negative indices count back from the end of the array, and an index of -1 references the last element. Referencing an array variable without a subscript is equivalent to ref- - erencing the array with a subscript of 0. Any reference to a variable - using a valid subscript is legal, and bbaasshh will create an array if nec- + erencing the array with a subscript of 0. Any reference to a variable + using a valid subscript is valid, and bbaasshh will create an array if nec- essary. An array variable is considered set if a subscript has been assigned a @@ -1535,12 +1579,12 @@ PPAARRAAMMEETTEERRSS The uunnsseett builtin is used to destroy arrays. uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t] de- stroys the array element at index _s_u_b_s_c_r_i_p_t, for both indexed and asso- - ciative arrays. Negative subscripts to indexed arrays are interpreted - as described above. Unsetting the last element of an array variable - does not unset the variable. uunnsseett _n_a_m_e, where _n_a_m_e is an array, re- + ciative arrays. Negative subscripts to indexed arrays are interpreted + as described above. Unsetting the last element of an array variable + does not unset the variable. uunnsseett _n_a_m_e, where _n_a_m_e is an array, re- moves the entire array. uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t], where _s_u_b_s_c_r_i_p_t is ** or @@, behaves differently depending on whether _n_a_m_e is an indexed or asso- - ciative array. If _n_a_m_e is an associative array, this unsets the ele- + ciative array. If _n_a_m_e is an associative array, this unsets the ele- ment with subscript ** or @@. If _n_a_m_e is an indexed array, unset removes all of the elements but does not remove the array itself. @@ -1549,37 +1593,37 @@ PPAARRAAMMEETTEERRSS scribed above, the argument is subject to pathname expansion. If path- name expansion is not desired, the argument should be quoted. - The ddeeccllaarree, llooccaall, and rreeaaddoonnllyy builtins each accept a --aa option to - specify an indexed array and a --AA option to specify an associative ar- - ray. If both options are supplied, --AA takes precedence. The rreeaadd - builtin accepts a --aa option to assign a list of words read from the + The ddeeccllaarree, llooccaall, and rreeaaddoonnllyy builtins each accept a --aa option to + specify an indexed array and a --AA option to specify an associative ar- + ray. If both options are supplied, --AA takes precedence. The rreeaadd + builtin accepts a --aa option to assign a list of words read from the standard input to an array. The sseett and ddeeccllaarree builtins display array values in a way that allows them to be reused as assignments. EEXXPPAANNSSIIOONN Expansion is performed on the command line after it has been split into - words. There are seven kinds of expansion performed: _b_r_a_c_e _e_x_p_a_n_s_i_o_n, - _t_i_l_d_e _e_x_p_a_n_s_i_o_n, _p_a_r_a_m_e_t_e_r _a_n_d _v_a_r_i_a_b_l_e _e_x_p_a_n_s_i_o_n, _c_o_m_m_a_n_d _s_u_b_s_t_i_t_u_- - _t_i_o_n, _a_r_i_t_h_m_e_t_i_c _e_x_p_a_n_s_i_o_n, _w_o_r_d _s_p_l_i_t_t_i_n_g, and _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n. + words. The shell performs these expansions: _b_r_a_c_e _e_x_p_a_n_s_i_o_n, _t_i_l_d_e _e_x_- + _p_a_n_s_i_o_n, _p_a_r_a_m_e_t_e_r _a_n_d _v_a_r_i_a_b_l_e _e_x_p_a_n_s_i_o_n, _c_o_m_m_a_n_d _s_u_b_s_t_i_t_u_t_i_o_n, _a_r_i_t_h_- + _m_e_t_i_c _e_x_p_a_n_s_i_o_n, _w_o_r_d _s_p_l_i_t_t_i_n_g, _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n, and _q_u_o_t_e _r_e_m_o_v_a_l. The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution - (done in a left-to-right fashion); word splitting; and pathname expan- - sion. + (done in a left-to-right fashion); word splitting; pathname expansion; + and quote removal. On systems that can support it, there is an additional expansion avail- - able: _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. This is performed at the same time as - tilde, parameter, variable, and arithmetic expansion and command sub- + able: _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. This is performed at the same time as + tilde, parameter, variable, and arithmetic expansion and command sub- stitution. - After these expansions are performed, quote characters present in the - original word are removed unless they have been quoted themselves - (_q_u_o_t_e _r_e_m_o_v_a_l). + _Q_u_o_t_e _r_e_m_o_v_a_l is always performed last. It removes quote characters + present in the original word, not ones resulting from one of the other + expansions, unless they have been quoted themselves. - Only brace expansion, word splitting, and pathname expansion can in- - crease the number of words of the expansion; other expansions expand a - single word to a single word. The only exceptions to this are the ex- - pansions of "$$@@" and "$${{_n_a_m_e[[@@]]}}", and, in most cases, $$** and + Only brace expansion, word splitting, and pathname expansion can in- + crease the number of words of the expansion; other expansions expand a + single word to a single word. The only exceptions to this are the ex- + pansions of ""$$@@"" and ""$${{_n_a_m_e[[@@]]}}"", and, in most cases, $$** and $${{_n_a_m_e[[**]]}} as explained above (see PPAARRAAMMEETTEERRSS). BBrraaccee EExxppaannssiioonn @@ -1592,22 +1636,23 @@ EEXXPPAANNSSIIOONN string contained within the braces, and the postscript is then appended to each resulting string, expanding left to right. - Brace expansions may be nested. The results of each expanded string - are not sorted; left to right order is preserved. For example, - a{{d,c,b}}e expands into `ade ace abe'. + Brace expansions may be nested. The results of each expanded string + are not sorted; left to right order is preserved. For example, + a{{d,c,b}}e expands into "ade ace abe". - A sequence expression takes the form {{_x...._y[[...._i_n_c_r]]}}, where _x and _y are - either integers or single letters, and _i_n_c_r, an optional increment, is + A sequence expression takes the form {{_x...._y[[...._i_n_c_r]]}}, where _x and _y are + either integers or single letters, and _i_n_c_r, an optional increment, is an integer. When integers are supplied, the expression expands to each - number between _x and _y, inclusive. Supplied integers may be prefixed - with _0 to force each term to have the same width. When either _x or _y - begins with a zero, the shell attempts to force all generated terms to - contain the same number of digits, zero-padding where necessary. When - letters are supplied, the expression expands to each character lexico- - graphically between _x and _y, inclusive, using the default C locale. - Note that both _x and _y must be of the same type (integer or letter). - When the increment is supplied, it is used as the difference between - each term. The default increment is 1 or -1 as appropriate. + number between _x and _y, inclusive. If the supplied integers are pre- + fixed with _0, each term will have the same width, zero-padding if nec- + essary. When either _x or _y begins with a zero, the shell attempts to + force all generated terms to contain the same number of digits, zero- + padding where necessary. When letters are supplied, the expression ex- + pands to each character lexicographically between _x and _y, inclusive, + using the default C locale. Note that both _x and _y must be of the same + type (integer or letter). When the increment is supplied, it is used + as the difference between each term. The default increment is 1 or -1 + as appropriate. Brace expansion is performed before any other expansions, and any char- acters special to other expansions are preserved in the result. It is @@ -1640,26 +1685,26 @@ EEXXPPAANNSSIIOONN mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). TTiillddee EExxppaannssiioonn - If a word begins with an unquoted tilde character (`~~'), all of the - characters preceding the first unquoted slash (or all characters, if - there is no unquoted slash) are considered a _t_i_l_d_e_-_p_r_e_f_i_x. If none of - the characters in the tilde-prefix are quoted, the characters in the - tilde-prefix following the tilde are treated as a possible _l_o_g_i_n _n_a_m_e. - If this login name is the null string, the tilde is replaced with the - value of the shell parameter HHOOMMEE. If HHOOMMEE is unset, the home direc- - tory of the user executing the shell is substituted instead. Other- - wise, the tilde-prefix is replaced with the home directory associated + If a word begins with an unquoted tilde character ("~~"), all of the + characters preceding the first unquoted slash (or all characters, if + there is no unquoted slash) are considered a _t_i_l_d_e_-_p_r_e_f_i_x. If none of + the characters in the tilde-prefix are quoted, the characters in the + tilde-prefix following the tilde are treated as a possible _l_o_g_i_n _n_a_m_e. + If this login name is the null string, the tilde is replaced with the + value of the shell parameter HHOOMMEE. If HHOOMMEE is unset, the home direc- + tory of the user executing the shell is substituted instead. Other- + wise, the tilde-prefix is replaced with the home directory associated with the specified login name. - If the tilde-prefix is a `~+', the value of the shell variable PPWWDD re- - places the tilde-prefix. If the tilde-prefix is a `~-', the value of - the shell variable OOLLDDPPWWDD, if it is set, is substituted. If the char- - acters following the tilde in the tilde-prefix consist of a number _N, - optionally prefixed by a `+' or a `-', the tilde-prefix is replaced + If the tilde-prefix is a "~+", the value of the shell variable PPWWDD re- + places the tilde-prefix. If the tilde-prefix is a "~-", the value of + the shell variable OOLLDDPPWWDD, if it is set, is substituted. If the char- + acters following the tilde in the tilde-prefix consist of a number _N, + optionally prefixed by a "+" or a "-", the tilde-prefix is replaced with the corresponding element from the directory stack, as it would be displayed by the ddiirrss builtin invoked with the tilde-prefix as an argu- - ment. If the characters following the tilde in the tilde-prefix con- - sist of a number without a leading `+' or `-', `+' is assumed. + ment. If the characters following the tilde in the tilde-prefix con- + sist of a number without a leading "+" or "-", "+" is assumed. If the login name is invalid, or the tilde expansion fails, the word is unchanged. @@ -1667,22 +1712,22 @@ EEXXPPAANNSSIIOONN Each variable assignment is checked for unquoted tilde-prefixes immedi- ately following a :: or the first ==. In these cases, tilde expansion is also performed. Consequently, one may use filenames with tildes in as- - signments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the ex- + signments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the ex- panded value. - Bash also performs tilde expansion on words satisfying the conditions + BBaasshh also performs tilde expansion on words satisfying the conditions of variable assignments (as described above under PPAARRAAMMEETTEERRSS) when they - appear as arguments to simple commands. Bash does not do this, except + appear as arguments to simple commands. BBaasshh does not do this, except for the _d_e_c_l_a_r_a_t_i_o_n commands listed above, when in _p_o_s_i_x _m_o_d_e. PPaarraammeetteerr EExxppaannssiioonn - The `$$' character introduces parameter expansion, command substitution, - or arithmetic expansion. The parameter name or symbol to be expanded - may be enclosed in braces, which are optional but serve to protect the - variable to be expanded from characters immediately following it which + The "$$" character introduces parameter expansion, command substitution, + or arithmetic expansion. The parameter name or symbol to be expanded + may be enclosed in braces, which are optional but serve to protect the + variable to be expanded from characters immediately following it which could be interpreted as part of the name. - When braces are used, the matching ending brace is the first `}}' not + When braces are used, the matching ending brace is the first "}}" not escaped by a backslash or within a quoted string, and not within an em- bedded arithmetic expansion, command substitution, or parameter expan- sion. @@ -1701,35 +1746,35 @@ EEXXPPAANNSSIIOONN _r_a_m_e_t_e_r; this is then expanded and that value is used in the rest of the expansion, rather than the expansion of the original _p_a_r_a_m_e_t_e_r. This is known as _i_n_d_i_r_e_c_t _e_x_p_a_n_s_i_o_n. The value is subject to tilde ex- - pansion, parameter expansion, command substitution, and arithmetic ex- - pansion. If _p_a_r_a_m_e_t_e_r is a nameref, this expands to the name of the - parameter referenced by _p_a_r_a_m_e_t_e_r instead of performing the complete - indirect expansion. The exceptions to this are the expansions of - ${!!_p_r_e_f_i_x**} and ${!!_n_a_m_e[_@]} described below. The exclamation point - must immediately follow the left brace in order to introduce indirec- + pansion, parameter expansion, command substitution, and arithmetic ex- + pansion. If _p_a_r_a_m_e_t_e_r is a nameref, this expands to the name of the + parameter referenced by _p_a_r_a_m_e_t_e_r instead of performing the complete + indirect expansion. The exceptions to this are the expansions of + ${!!_p_r_e_f_i_x**} and ${!!_n_a_m_e[_@]} described below. The exclamation point + must immediately follow the left brace in order to introduce indirec- tion. In each of the cases below, _w_o_r_d is subject to tilde expansion, parame- ter expansion, command substitution, and arithmetic expansion. When not performing substring expansion, using the forms documented be- - low (e.g., ::--), bbaasshh tests for a parameter that is unset or null. - Omitting the colon results in a test only for a parameter that is un- + low (e.g., ::--), bbaasshh tests for a parameter that is unset or null. + Omitting the colon results in a test only for a parameter that is un- set. ${_p_a_r_a_m_e_t_e_r::--_w_o_r_d} - UUssee DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the expan- - sion of _w_o_r_d is substituted. Otherwise, the value of _p_a_r_a_m_e_t_e_r + UUssee DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the expan- + sion of _w_o_r_d is substituted. Otherwise, the value of _p_a_r_a_m_e_t_e_r is substituted. ${_p_a_r_a_m_e_t_e_r::==_w_o_r_d} - AAssssiiggnn DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the ex- - pansion of _w_o_r_d is assigned to _p_a_r_a_m_e_t_e_r. The value of _p_a_r_a_m_e_- - _t_e_r is then substituted. Positional parameters and special pa- + AAssssiiggnn DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the ex- + pansion of _w_o_r_d is assigned to _p_a_r_a_m_e_t_e_r. The value of _p_a_r_a_m_e_- + _t_e_r is then substituted. Positional parameters and special pa- rameters may not be assigned to in this way. ${_p_a_r_a_m_e_t_e_r::??_w_o_r_d} - DDiissppllaayy EErrrroorr iiff NNuullll oorr UUnnsseett. If _p_a_r_a_m_e_t_e_r is null or unset, - the expansion of _w_o_r_d (or a message to that effect if _w_o_r_d is - not present) is written to the standard error and the shell, if + DDiissppllaayy EErrrroorr iiff NNuullll oorr UUnnsseett. If _p_a_r_a_m_e_t_e_r is null or unset, + the expansion of _w_o_r_d (or a message to that effect if _w_o_r_d is + not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of _p_a_r_a_m_e_t_e_r is substituted. ${_p_a_r_a_m_e_t_e_r::++_w_o_r_d} @@ -1748,7 +1793,7 @@ EEXXPPAANNSSIIOONN If _o_f_f_s_e_t evaluates to a number less than zero, the value is used as an offset in characters from the end of the value of _p_a_- - _r_a_m_e_t_e_r. If _l_e_n_g_t_h evaluates to a number less than zero, it is + _r_a_m_e_t_e_r. If _l_e_n_g_t_h evaluates to a number less than zero, it is interpreted as an offset in characters from the end of the value of _p_a_r_a_m_e_t_e_r rather than a number of characters, and the expan- sion is the characters between _o_f_f_s_e_t and that result. Note @@ -1758,27 +1803,27 @@ EEXXPPAANNSSIIOONN If _p_a_r_a_m_e_t_e_r is @@ or **, the result is _l_e_n_g_t_h positional parame- ters beginning at _o_f_f_s_e_t. A negative _o_f_f_s_e_t is taken relative to one greater than the greatest positional parameter, so an - offset of -1 evaluates to the last positional parameter. It is - an expansion error if _l_e_n_g_t_h evaluates to a number less than - zero. + offset of -1 evaluates to the last positional parameter (or 0 if + there are no positional parameters). It is an expansion error + if _l_e_n_g_t_h evaluates to a number less than zero. If _p_a_r_a_m_e_t_e_r is an indexed array name subscripted by @ or *, the - result is the _l_e_n_g_t_h members of the array beginning with ${_p_a_- - _r_a_m_e_t_e_r[_o_f_f_s_e_t]}. A negative _o_f_f_s_e_t is taken relative to one + result is the _l_e_n_g_t_h members of the array beginning with ${_p_a_r_a_- + _m_e_t_e_r[_o_f_f_s_e_t]}. A negative _o_f_f_s_e_t is taken relative to one greater than the maximum index of the specified array. It is an expansion error if _l_e_n_g_t_h evaluates to a number less than zero. Substring expansion applied to an associative array produces un- defined results. - Substring indexing is zero-based unless the positional parame- - ters are used, in which case the indexing starts at 1 by de- - fault. If _o_f_f_s_e_t is 0, and the positional parameters are used, + Substring indexing is zero-based unless the positional parame- + ters are used, in which case the indexing starts at 1 by de- + fault. If _o_f_f_s_e_t is 0, and the positional parameters are used, $$00 is prefixed to the list. ${!!_p_r_e_f_i_x**} ${!!_p_r_e_f_i_x@@} - NNaammeess mmaattcchhiinngg pprreeffiixx. Expands to the names of variables whose + NNaammeess mmaattcchhiinngg pprreeffiixx. Expands to the names of variables whose names begin with _p_r_e_f_i_x, separated by the first character of the IIFFSS special variable. When _@ is used and the expansion appears within double quotes, each variable name expands to a separate @@ -1808,16 +1853,16 @@ EEXXPPAANNSSIIOONN RReemmoovvee mmaattcchhiinngg pprreeffiixx ppaatttteerrnn. The _w_o_r_d is expanded to produce a pattern just as in pathname expansion, and matched against the expanded value of _p_a_r_a_m_e_t_e_r using the rules described under PPaatt-- - tteerrnn MMaattcchhiinngg below. If the pattern matches the beginning of - the value of _p_a_r_a_m_e_t_e_r, then the result of the expansion is the - expanded value of _p_a_r_a_m_e_t_e_r with the shortest matching pattern - (the ``##'' case) or the longest matching pattern (the ``####'' - case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern removal op- - eration is applied to each positional parameter in turn, and the - expansion is the resultant list. If _p_a_r_a_m_e_t_e_r is an array vari- - able subscripted with @@ or **, the pattern removal operation is - applied to each member of the array in turn, and the expansion - is the resultant list. + tteerrnn MMaattcchhiinngg below. If the pattern matches the beginning of + the value of _p_a_r_a_m_e_t_e_r, then the result of the expansion is the + expanded value of _p_a_r_a_m_e_t_e_r with the shortest matching pattern + (the "#" case) or the longest matching pattern (the "##" case) + deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern removal operation + is applied to each positional parameter in turn, and the expan- + sion is the resultant list. If _p_a_r_a_m_e_t_e_r is an array variable + subscripted with @@ or **, the pattern removal operation is ap- + plied to each member of the array in turn, and the expansion is + the resultant list. ${_p_a_r_a_m_e_t_e_r%%_w_o_r_d} ${_p_a_r_a_m_e_t_e_r%%%%_w_o_r_d} @@ -1827,33 +1872,33 @@ EEXXPPAANNSSIIOONN tteerrnn MMaattcchhiinngg below. If the pattern matches a trailing portion of the expanded value of _p_a_r_a_m_e_t_e_r, then the result of the ex- pansion is the expanded value of _p_a_r_a_m_e_t_e_r with the shortest - matching pattern (the ``%%'' case) or the longest matching pat- - tern (the ``%%%%'' case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the - pattern removal operation is applied to each positional parame- - ter in turn, and the expansion is the resultant list. If _p_a_r_a_m_- - _e_t_e_r is an array variable subscripted with @@ or **, the pattern - removal operation is applied to each member of the array in - turn, and the expansion is the resultant list. + matching pattern (the "%" case) or the longest matching pattern + (the "%%" case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern + removal operation is applied to each positional parameter in + turn, and the expansion is the resultant list. If _p_a_r_a_m_e_t_e_r is + an array variable subscripted with @@ or **, the pattern removal + operation is applied to each member of the array in turn, and + the expansion is the resultant list. ${_p_a_r_a_m_e_t_e_r//_p_a_t_t_e_r_n//_s_t_r_i_n_g} ${_p_a_r_a_m_e_t_e_r////_p_a_t_t_e_r_n//_s_t_r_i_n_g} ${_p_a_r_a_m_e_t_e_r//##_p_a_t_t_e_r_n//_s_t_r_i_n_g} ${_p_a_r_a_m_e_t_e_r//%%_p_a_t_t_e_r_n//_s_t_r_i_n_g} PPaatttteerrnn ssuubbssttiittuuttiioonn. The _p_a_t_t_e_r_n is expanded to produce a pat- - tern just as in pathname expansion. _P_a_r_a_m_e_t_e_r is expanded and - the longest match of _p_a_t_t_e_r_n against its value is replaced with - _s_t_r_i_n_g. _s_t_r_i_n_g undergoes tilde expansion, parameter and vari- - able expansion, arithmetic expansion, command and process sub- - stitution, and quote removal. The match is performed using the + tern just as in pathname expansion. _P_a_r_a_m_e_t_e_r is expanded and + the longest match of _p_a_t_t_e_r_n against its value is replaced with + _s_t_r_i_n_g. _s_t_r_i_n_g undergoes tilde expansion, parameter and vari- + able expansion, arithmetic expansion, command and process sub- + stitution, and quote removal. The match is performed using the rules described under PPaatttteerrnn MMaattcchhiinngg below. In the first form above, only the first match is replaced. If there are two slashes separating _p_a_r_a_m_e_t_e_r and _p_a_t_t_e_r_n (the second form above), all matches of _p_a_t_t_e_r_n are replaced with _s_t_r_i_n_g. If _p_a_t_t_e_r_n is preceded by ## (the third form above), it must match at the beginning of the expanded value of _p_a_r_a_m_e_t_e_r. If _p_a_t_t_e_r_n - is preceded by %% (the fourth form above), it must match at the - end of the expanded value of _p_a_r_a_m_e_t_e_r. If the expansion of - _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted. If _s_t_r_i_n_g is + is preceded by %% (the fourth form above), it must match at the + end of the expanded value of _p_a_r_a_m_e_t_e_r. If the expansion of + _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted. If _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted and the // following _p_a_t_t_e_r_n may be omitted. @@ -1862,34 +1907,34 @@ EEXXPPAANNSSIIOONN matching portion of _p_a_t_t_e_r_n. Quoting any part of _s_t_r_i_n_g inhibits replacement in the expansion - of the quoted portion, including replacement strings stored in - shell variables. Backslash will escape && in _s_t_r_i_n_g; the back- - slash is removed in order to permit a literal && in the replace- - ment string. Backslash can also be used to escape a backslash; - \\\\ results in a literal backslash in the replacement. Users - should take care if _s_t_r_i_n_g is double-quoted to avoid unwanted - interactions between the backslash and double-quoting, since - backslash has special meaning within double quotes. Pattern - substitution performs the check for unquoted && after expanding + of the quoted portion, including replacement strings stored in + shell variables. Backslash will escape && in _s_t_r_i_n_g; the back- + slash is removed in order to permit a literal && in the replace- + ment string. Backslash can also be used to escape a backslash; + \\\\ results in a literal backslash in the replacement. Users + should take care if _s_t_r_i_n_g is double-quoted to avoid unwanted + interactions between the backslash and double-quoting, since + backslash has special meaning within double quotes. Pattern + substitution performs the check for unquoted && after expanding _s_t_r_i_n_g; shell programmers should quote any occurrences of && they want to be taken literally in the replacement and ensure any in- stances of && they want to be replaced are unquoted. - If the nnooccaasseemmaattcchh shell option is enabled, the match is per- - formed without regard to the case of alphabetic characters. If - _p_a_r_a_m_e_t_e_r is @@ or **, the substitution operation is applied to - each positional parameter in turn, and the expansion is the re- - sultant list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted - with @@ or **, the substitution operation is applied to each mem- - ber of the array in turn, and the expansion is the resultant + If the nnooccaasseemmaattcchh shell option is enabled, the match is per- + formed without regard to the case of alphabetic characters. If + _p_a_r_a_m_e_t_e_r is @@ or **, the substitution operation is applied to + each positional parameter in turn, and the expansion is the re- + sultant list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted + with @@ or **, the substitution operation is applied to each mem- + ber of the array in turn, and the expansion is the resultant list. ${_p_a_r_a_m_e_t_e_r^^_p_a_t_t_e_r_n} ${_p_a_r_a_m_e_t_e_r^^^^_p_a_t_t_e_r_n} ${_p_a_r_a_m_e_t_e_r,,_p_a_t_t_e_r_n} ${_p_a_r_a_m_e_t_e_r,,,,_p_a_t_t_e_r_n} - CCaassee mmooddiiffiiccaattiioonn. This expansion modifies the case of alpha- - betic characters in _p_a_r_a_m_e_t_e_r. The _p_a_t_t_e_r_n is expanded to pro- + CCaassee mmooddiiffiiccaattiioonn. This expansion modifies the case of alpha- + betic characters in _p_a_r_a_m_e_t_e_r. The _p_a_t_t_e_r_n is expanded to pro- duce a pattern just as in pathname expansion. Each character in the expanded value of _p_a_r_a_m_e_t_e_r is tested against _p_a_t_t_e_r_n, and, if it matches the pattern, its case is converted. The pattern @@ -1909,14 +1954,14 @@ EEXXPPAANNSSIIOONN ${_p_a_r_a_m_e_t_e_r@@_o_p_e_r_a_t_o_r} PPaarraammeetteerr ttrraannssffoorrmmaattiioonn. The expansion is either a transforma- - tion of the value of _p_a_r_a_m_e_t_e_r or information about _p_a_r_a_m_e_t_e_r - itself, depending on the value of _o_p_e_r_a_t_o_r. Each _o_p_e_r_a_t_o_r is a + tion of the value of _p_a_r_a_m_e_t_e_r or information about _p_a_r_a_m_e_t_e_r + itself, depending on the value of _o_p_e_r_a_t_o_r. Each _o_p_e_r_a_t_o_r is a single letter: - UU The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r - with lowercase alphabetic characters converted to upper- + UU The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + with lowercase alphabetic characters converted to upper- case. - uu The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + uu The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r with the first character converted to uppercase, if it is alphabetic. LL The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r @@ -1926,17 +1971,18 @@ EEXXPPAANNSSIIOONN quoted in a format that can be reused as input. EE The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r with backslash escape sequences expanded as with the - $$''......'' quoting mechanism. + $$''...'' quoting mechanism. PP The expansion is a string that is the result of expanding the value of _p_a_r_a_m_e_t_e_r as if it were a prompt string (see PPRROOMMPPTTIINNGG below). AA The expansion is a string in the form of an assignment statement or ddeeccllaarree command that, if evaluated, will recreate _p_a_r_a_m_e_t_e_r with its attributes and value. - KK Produces a possibly-quoted version of the value of _p_a_r_a_m_- - _e_t_e_r, except that it prints the values of indexed and as- - sociative arrays as a sequence of quoted key-value pairs - (see AArrrraayyss above). + KK Produces a possibly-quoted version of the value of _p_a_r_a_- + _m_e_t_e_r, except that it prints the values of indexed and + associative arrays as a sequence of quoted key-value + pairs (see AArrrraayyss above). The keys and values are quoted + in a format that can be reused as input. aa The expansion is a string consisting of flag values rep- resenting _p_a_r_a_m_e_t_e_r's attributes. kk Like the K transformation, but expands the keys and val- @@ -1949,51 +1995,83 @@ EEXXPPAANNSSIIOONN **, the operation is applied to each member of the array in turn, and the expansion is the resultant list. - The result of the expansion is subject to word splitting and + The result of the expansion is subject to word splitting and pathname expansion as described below. CCoommmmaanndd SSuubbssttiittuuttiioonn _C_o_m_m_a_n_d _s_u_b_s_t_i_t_u_t_i_o_n allows the output of a command to replace the com- - mand name. There are two forms: + mand itself. There are two standard forms: $$((_c_o_m_m_a_n_d)) - or - ``_c_o_m_m_a_n_d`` + or (deprecated) + ``_c_o_m_m_a_n_d``. BBaasshh performs the expansion by executing _c_o_m_m_a_n_d in a subshell environ- ment and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are - not deleted, but they may be removed during word splitting. The com- - mand substitution $$((ccaatt _f_i_l_e)) can be replaced by the equivalent but + not deleted, but they may be removed during word splitting. The com- + mand substitution $$((ccaatt _f_i_l_e)) can be replaced by the equivalent but faster $$((<< _f_i_l_e)). - When the old-style backquote form of substitution is used, backslash - retains its literal meaning except when followed by $$, ``, or \\. The - first backquote not preceded by a backslash terminates the command sub- - stitution. When using the $(_c_o_m_m_a_n_d) form, all characters between the + With the old-style backquote form of substitution, backslash retains + its literal meaning except when followed by $$, ``, or \\. The first + backquote not preceded by a backslash terminates the command substitu- + tion. When using the $(_c_o_m_m_a_n_d) form, all characters between the parentheses make up the command; none are treated specially. + There is an alternate form of command substitution: + + $${{_c _c_o_m_m_a_n_d;;}} + + which executes _c_o_m_m_a_n_d in the current execution environment and cap- + tures its output, again with trailing newlines removed. + + The character _c following the open brace must be a space, tab, newline, + or ||, and the close brace must be in a position where a reserved word + may appear (i.e., preceded by a command terminator such as semicolon). + BBaasshh allows the close brace to be joined to the remaining characters in + the word without being followed by a shell metacharacter as a reserved + word would usually require. + + Any side effects of _c_o_m_m_a_n_d take effect immediately in the current exe- + cution environment and persist in the current environment after the + command completes (e.g., the eexxiitt builtin will exit the shell). + + This type of command substitution superficially resembles executing an + unnamed shell function: local variables are created as when a shell + function is executing, and the rreettuurrnn builtin forces _c_o_m_m_a_n_d to com- + plete; however, the rest of the execution environment, including the + positional parameters, is shared with the caller. + + If the first character following the open brace is a ||, the construct + expands to the value of the RREEPPLLYY shell variable after _c_o_m_m_a_n_d exe- + cutes, without removing any trailing newlines, and the standard output + of _c_o_m_m_a_n_d remains the same as in the calling shell. BBaasshh creates RREE-- + PPLLYY as an initially-unset local variable when _c_o_m_m_a_n_d executes, and re- + stores RREEPPLLYY to the value it had before the command substitution after + _c_o_m_m_a_n_d completes, as with any local variable. + Command substitutions may be nested. To nest when using the backquoted form, escape the inner backquotes with backslashes. - If the substitution appears within double quotes, word splitting and - pathname expansion are not performed on the results. + If the substitution appears within double quotes, bbaasshh does not perform + word splitting and pathname expansion on the results. AArriitthhmmeettiicc EExxppaannssiioonn - Arithmetic expansion allows the evaluation of an arithmetic expression - and the substitution of the result. The format for arithmetic expan- + Arithmetic expansion allows the evaluation of an arithmetic expression + and the substitution of the result. The format for arithmetic expan- sion is: $$((((_e_x_p_r_e_s_s_i_o_n)))) - The _e_x_p_r_e_s_s_i_o_n undergoes the same expansions as if it were within dou- - ble quotes, but double quote characters in _e_x_p_r_e_s_s_i_o_n are not treated - specially and are removed. All tokens in the expression undergo param- - eter and variable expansion, command substitution, and quote removal. - The result is treated as the arithmetic expression to be evaluated. + The _e_x_p_r_e_s_s_i_o_n undergoes the same expansions as if it were within dou- + ble quotes, but double quote characters in _e_x_p_r_e_s_s_i_o_n are not treated + specially and are removed. All tokens in the expression undergo para- + meter and variable expansion, command substitution, and quote removal. + The result is treated as the arithmetic expression to be evaluated. Arithmetic expansions may be nested. - The evaluation is performed according to the rules listed below under + The evaluation is performed according to the rules listed below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If _e_x_p_r_e_s_s_i_o_n is invalid, bbaasshh prints a message indicating failure and no substitution occurs. @@ -2002,9 +2080,9 @@ EEXXPPAANNSSIIOONN to using a filename. It takes the form of <<((_l_i_s_t)) or >>((_l_i_s_t)). The process _l_i_s_t is run asynchronously, and its input or output appears as a filename. This filename is passed as an argument to the current com- - mand as the result of the expansion. If the >>((_l_i_s_t)) form is used, - writing to the file will provide input for _l_i_s_t. If the <<((_l_i_s_t)) form - is used, the file passed as an argument should be read to obtain the + mand as the result of the expansion. If the >>((_l_i_s_t)) form is used, + writing to the file will provide input for _l_i_s_t. If the <<((_l_i_s_t)) form + is used, the file passed as an argument should be read to obtain the output of _l_i_s_t. Process substitution is supported on systems that sup- port named pipes (_F_I_F_O_s) or the //ddeevv//ffdd method of naming open files. @@ -2019,18 +2097,23 @@ EEXXPPAANNSSIIOONN The shell treats each character of IIFFSS as a delimiter, and splits the results of the other expansions into words using these characters as - field terminators. If IIFFSS is unset, or its value is exactly - <><><>, the default, then sequences of <>, <>, - and <> at the beginning and end of the results of the previous - expansions are ignored, and any sequence of IIFFSS characters not at the - beginning or end serves to delimit words. If IIFFSS has a value other - than the default, then sequences of the whitespace characters ssppaaccee, - ttaabb, and nneewwlliinnee are ignored at the beginning and end of the word, as - long as the whitespace character is in the value of IIFFSS (an IIFFSS white- - space character). Any character in IIFFSS that is not IIFFSS whitespace, - along with any adjacent IIFFSS whitespace characters, delimits a field. A - sequence of IIFFSS whitespace characters is also treated as a delimiter. - If the value of IIFFSS is null, no word splitting occurs. + field terminators. + + If IIFFSS is unset, or its value is exactly <><><>, the de- + fault, then sequences of ssppaaccee, ttaabb, and nneewwlliinnee at the beginning and + end of the results of the previous expansions are ignored, and any se- + quence of IIFFSS characters not at the beginning or end serves to delimit + words. If IIFFSS has a value other than the default, then sequences of + the whitespace characters ssppaaccee, ttaabb, and nneewwlliinnee are ignored at the + beginning and end of the word, as long as the whitespace character is + in the value of IIFFSS (an IIFFSS whitespace character). Any character in + IIFFSS that is not IIFFSS whitespace, along with any adjacent IIFFSS whitespace + characters, delimits a field. A sequence of IIFFSS whitespace characters + is also treated as a delimiter. + + If the value of IIFFSS is null, no word splitting occurs. If IIFFSS is un- + set, word splitting behaves as if it contained the default value of + <><><>. Explicit null arguments ("""" or '''') are retained and passed to commands as empty strings. Unquoted implicit null arguments, resulting from the @@ -2038,8 +2121,8 @@ EEXXPPAANNSSIIOONN ter with no value is expanded within double quotes, a null argument re- sults and is retained and passed to a command as an empty string. When a quoted null argument appears as part of a word whose expansion is - non-null, the null argument is removed. That is, the word -d'' becomes - -d after word splitting and null argument removal. + non-null, the null argument is removed. That is, the word "-d''" be- + comes "-d" after word splitting and null argument removal. Note that if no expansion occurs, no splitting is performed. @@ -2047,74 +2130,75 @@ EEXXPPAANNSSIIOONN After word splitting, unless the --ff option has been set, bbaasshh scans each word for the characters **, ??, and [[. If one of these characters appears, and is not quoted, then the word is regarded as a _p_a_t_t_e_r_n, and - replaced with an alphabetically sorted list of filenames matching the - pattern (see PPaatttteerrnn MMaattcchhiinngg below). If no matching filenames are - found, and the shell option nnuullllgglloobb is not enabled, the word is left - unchanged. If the nnuullllgglloobb option is set, and no matches are found, - the word is removed. If the ffaaiillgglloobb shell option is set, and no - matches are found, an error message is printed and the command is not + replaced with an alphabetically sorted list of filenames matching the + pattern (see PPaatttteerrnn MMaattcchhiinngg below). If no matching filenames are + found, and the shell option nnuullllgglloobb is not enabled, the word is left + unchanged. If the nnuullllgglloobb option is set, and no matches are found, + the word is removed. If the ffaaiillgglloobb shell option is set, and no + matches are found, an error message is printed and the command is not executed. If the shell option nnooccaasseegglloobb is enabled, the match is per- formed without regard to the case of alphabetic characters. When a - pattern is used for pathname expansion, the character ````..'''' at the - start of a name or immediately following a slash must be matched ex- - plicitly, unless the shell option ddoottgglloobb is set. In order to match - the filenames ````..'''' and ````....'''', the pattern must begin with ``.'' (for - example, ``.?''), even if ddoottgglloobb is set. If the gglloobbsskkiippddoottss shell - option is enabled, the filenames ````..'''' and ````....'''' are never matched, - even if the pattern begins with a ````..''''. When not matching pathnames, - the ````..'''' character is not treated specially. When matching a path- - name, the slash character must always be matched explicitly by a slash - in the pattern, but in other matching contexts it can be matched by a - special pattern character as described below under PPaatttteerrnn MMaattcchhiinngg. - See the description of sshhoopptt below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS for a - description of the nnooccaasseegglloobb, nnuullllgglloobb, gglloobbsskkiippddoottss, ffaaiillgglloobb, and - ddoottgglloobb shell options. - - The GGLLOOBBIIGGNNOORREE shell variable may be used to restrict the set of file - names matching a _p_a_t_t_e_r_n. If GGLLOOBBIIGGNNOORREE is set, each matching file - name that also matches one of the patterns in GGLLOOBBIIGGNNOORREE is removed - from the list of matches. If the nnooccaasseegglloobb option is set, the match- - ing against the patterns in GGLLOOBBIIGGNNOORREE is performed without regard to - case. The filenames ````..'''' and ````....'''' are always ignored when GGLLOOBBIIGG-- - NNOORREE is set and not null. However, setting GGLLOOBBIIGGNNOORREE to a non-null - value has the effect of enabling the ddoottgglloobb shell option, so all other - filenames beginning with a ````..'''' will match. To get the old behavior - of ignoring filenames beginning with a ````..'''', make ````..**'''' one of the - patterns in GGLLOOBBIIGGNNOORREE. The ddoottgglloobb option is disabled when GGLLOOBBIIGGNNOORREE - is unset. The pattern matching honors the setting of the eexxttgglloobb shell - option. + pattern is used for pathname expansion, the character "." at the start + of a name or immediately following a slash must be matched explicitly, + unless the shell option ddoottgglloobb is set. In order to match the file- + names "." and "..", the pattern must begin with "." (for example, + ".?"), even if ddoottgglloobb is set. If the gglloobbsskkiippddoottss shell option is en- + abled, the filenames "." and ".." never match, even if the pattern be- + gins with a "." When not matching pathnames, the "." character is not + treated specially. When matching a pathname, the slash character must + always be matched explicitly by a slash in the pattern, but in other + matching contexts it can be matched by a special pattern character as + described below under PPaatttteerrnn MMaattcchhiinngg. See the description of sshhoopptt + below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS for a description of the nnooccaasseegglloobb, + nnuullllgglloobb, gglloobbsskkiippddoottss, ffaaiillgglloobb, and ddoottgglloobb shell options. + + The GGLLOOBBIIGGNNOORREE shell variable may be used to restrict the set of file + names matching a _p_a_t_t_e_r_n. If GGLLOOBBIIGGNNOORREE is set, each matching file + name that also matches one of the patterns in GGLLOOBBIIGGNNOORREE is removed + from the list of matches. If the nnooccaasseegglloobb option is set, the match- + ing against the patterns in GGLLOOBBIIGGNNOORREE is performed without regard to + case. The filenames "." and ".." are always ignored when GGLLOOBBIIGGNNOORREE is + set and not null. However, setting GGLLOOBBIIGGNNOORREE to a non-null value has + the effect of enabling the ddoottgglloobb shell option, so all other filenames + beginning with a Q . will match. To get the old behavior of ignoring + filenames beginning with a ".", make ".*" one of the patterns in GGLLOO-- + BBIIGGNNOORREE. The ddoottgglloobb option is disabled when GGLLOOBBIIGGNNOORREE is unset. The + pattern matching honors the setting of the eexxttgglloobb shell option. + + The GGLLOOBBSSOORRTT variable controls how the results of pathname expansion + are sorted, as described above. PPaatttteerrnn MMaattcchhiinngg Any character that appears in a pattern, other than the special pattern - characters described below, matches itself. The NUL character may not - occur in a pattern. A backslash escapes the following character; the - escaping backslash is discarded when matching. The special pattern + characters described below, matches itself. The NUL character may not + occur in a pattern. A backslash escapes the following character; the + escaping backslash is discarded when matching. The special pattern characters must be quoted if they are to be matched literally. The special pattern characters have the following meanings: - ** Matches any string, including the null string. When the - gglloobbssttaarr shell option is enabled, and ** is used in a - pathname expansion context, two adjacent **s used as a - single pattern will match all files and zero or more di- - rectories and subdirectories. If followed by a //, two - adjacent **s will match only directories and subdirecto- + ** Matches any string, including the null string. When the + gglloobbssttaarr shell option is enabled, and ** is used in a + pathname expansion context, two adjacent **s used as a + single pattern will match all files and zero or more di- + rectories and subdirectories. If followed by a //, two + adjacent **s will match only directories and subdirecto- ries. ?? Matches any single character. - [[......]] Matches any one of the enclosed characters. A pair of - characters separated by a hyphen denotes a _r_a_n_g_e _e_x_p_r_e_s_- - _s_i_o_n; any character that falls between those two charac- + [[...]] Matches any one of the enclosed characters. A pair of + characters separated by a hyphen denotes a _r_a_n_g_e _e_x_p_r_e_s_- + _s_i_o_n; any character that falls between those two charac- ters, inclusive, using the current locale's collating se- quence and character set, is matched. If the first char- - acter following the [[ is a !! or a ^^ then any character + acter following the [[ is a !! or a ^^ then any character not enclosed is matched. The sorting order of characters in range expressions, and the characters included in the range, are determined by the current locale and the val- ues of the LLCC__CCOOLLLLAATTEE or LLCC__AALLLL shell variables, if set. To obtain the traditional interpretation of range expres- - sions, where [[aa--dd]] is equivalent to [[aabbccdd]], set value of - the LLCC__AALLLL shell variable to CC, or enable the gglloobbaassccii-- + sions, where [[aa--dd]] is equivalent to [[aabbccdd]], set value of + the LLCC__AALLLL shell variable to CC, or enable the gglloobbaassccii-- iirraannggeess shell option. A -- may be matched by including it as the first or last character in the set. A ]] may be matched by including it as the first character in the @@ -2123,8 +2207,10 @@ EEXXPPAANNSSIIOONN Within [[ and ]], _c_h_a_r_a_c_t_e_r _c_l_a_s_s_e_s can be specified using the syntax [[::_c_l_a_s_s::]], where _c_l_a_s_s is one of the following classes defined in the POSIX standard: - aallnnuumm aallpphhaa aasscciiii bbllaannkk ccnnttrrll ddiiggiitt ggrraapphh lloowweerr pprriinntt + + aallnnuumm aallpphhaa aasscciiii bbllaannkk ccnnttrrll ddiiggiitt ggrraapphh lloowweerr pprriinntt ppuunncctt ssppaaccee uuppppeerr wwoorrdd xxddiiggiitt + A character class matches any character belonging to that class. The wwoorrdd character class matches letters, digits, and the character _. @@ -2137,8 +2223,8 @@ EEXXPPAANNSSIIOONN Within [[ and ]], the syntax [[.._s_y_m_b_o_l..]] matches the collat- ing symbol _s_y_m_b_o_l. - If the eexxttgglloobb shell option is enabled using the sshhoopptt builtin, the - shell recognizes several extended pattern matching operators. In the + If the eexxttgglloobb shell option is enabled using the sshhoopptt builtin, the + shell recognizes several extended pattern matching operators. In the following description, a _p_a_t_t_e_r_n_-_l_i_s_t is a list of one or more patterns separated by a ||. Composite patterns may be formed using one or more of the following sub-patterns: @@ -2154,23 +2240,23 @@ EEXXPPAANNSSIIOONN !!((_p_a_t_t_e_r_n_-_l_i_s_t)) Matches anything except one of the given patterns - Theeexxttgglloobb option changes the behavior of the parser, since the paren- - theses are normally treated as operators with syntactic meaning. To - ensure that extended matching patterns are parsed correctly, make sure - that eexxttgglloobb is enabled before parsing constructs containing the pat- + The eexxttgglloobb option changes the behavior of the parser, since the paren- + theses are normally treated as operators with syntactic meaning. To + ensure that extended matching patterns are parsed correctly, make sure + that eexxttgglloobb is enabled before parsing constructs containing the pat- terns, including shell functions and command substitutions. When matching filenames, the ddoottgglloobb shell option determines the set of filenames that are tested: when ddoottgglloobb is enabled, the set of file- - names includes all files beginning with ``.'', but ``.'' and ``..'' - must be matched by a pattern or sub-pattern that begins with a dot; - when it is disabled, the set does not include any filenames beginning - with ``.'' unless the pattern or sub-pattern begins with a ``.''. As - above, ``.'' only has a special meaning when matching filenames. + names includes all files beginning with ".", but "." and ".." must be + matched by a pattern or sub-pattern that begins with a dot; when it is + disabled, the set does not include any filenames beginning with "." un- + less the pattern or sub-pattern begins with a ".". As above, "." only + has a special meaning when matching filenames. Complicated extended pattern matching against long strings is slow, es- pecially when the patterns contain alternations and the strings contain - multiple matches. Using separate matches against shorter strings, or + multiple matches. Using separate matches against shorter strings, or using arrays of strings instead of a single long string, may be faster. QQuuoottee RReemmoovvaall @@ -2183,8 +2269,8 @@ RREEDDIIRREECCTTIIOONN using a special notation interpreted by the shell. _R_e_d_i_r_e_c_t_i_o_n allows commands' file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and - writes to. Redirection may also be used to modify file handles in the - current shell execution environment. The following redirection opera- + writes to. Redirection may also be used to modify file handles in the + current shell execution environment. The following redirection opera- tors may precede or appear anywhere within a _s_i_m_p_l_e _c_o_m_m_a_n_d or may fol- low a _c_o_m_m_a_n_d. Redirections are processed in the order they appear, from left to right. @@ -2194,14 +2280,14 @@ RREEDDIIRREECCTTIIOONN each redirection operator except >&- and <&-, the shell will allocate a file descriptor greater than or equal to 10 and assign it to _v_a_r_n_a_m_e. If >&- or <&- is preceded by {_v_a_r_n_a_m_e}, the value of _v_a_r_n_a_m_e defines - the file descriptor to close. If {_v_a_r_n_a_m_e} is supplied, the redirect- - ion persists beyond the scope of the command, allowing the shell pro- + the file descriptor to close. If {_v_a_r_n_a_m_e} is supplied, the redirec- + tion persists beyond the scope of the command, allowing the shell pro- grammer to manage the file descriptor's lifetime manually. The vvaarrrreeddiirr__cclloossee shell option manages this behavior. In the following descriptions, if the file descriptor number is omit- - ted, and the first character of the redirection operator is <<, the re- - direction refers to the standard input (file descriptor 0). If the + ted, and the first character of the redirection operator is <<, the + redirection refers to the standard input (file descriptor 0). If the first character of the redirection operator is >>, the redirection refers to the standard output (file descriptor 1). @@ -2228,11 +2314,11 @@ RREEDDIIRREECCTTIIOONN BBaasshh handles several filenames specially when they are used in redirec- tions, as described in the following table. If the operating system on which bbaasshh is running provides these special files, bash will use them; - otherwise it will emulate them internally with the behavior described + otherwise it will emulate them internally with the behavior described below. //ddeevv//ffdd//_f_d - If _f_d is a valid integer, file descriptor _f_d is dupli- + If _f_d is a valid integer, file descriptor _f_d is dupli- cated. //ddeevv//ssttddiinn File descriptor 0 is duplicated. @@ -2246,13 +2332,13 @@ RREEDDIIRREECCTTIIOONN to open the corresponding TCP socket. //ddeevv//uuddpp//_h_o_s_t//_p_o_r_t If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t - is an integer port number or service name, bbaasshh attempts + is an integer port number or service name, bbaasshh attempts to open the corresponding UDP socket. A failure to open or create a file causes the redirection to fail. - Redirections using file descriptors greater than 9 should be used with - care, as they may conflict with file descriptors the shell uses inter- + Redirections using file descriptors greater than 9 should be used with + care, as they may conflict with file descriptors the shell uses inter- nally. RReeddiirreeccttiinngg IInnppuutt @@ -2268,24 +2354,24 @@ RREEDDIIRREECCTTIIOONN Redirection of output causes the file whose name results from the ex- pansion of _w_o_r_d to be opened for writing on file descriptor _n, or the standard output (file descriptor 1) if _n is not specified. If the file - does not exist it is created; if it does exist it is truncated to zero + does not exist it is created; if it does exist it is truncated to zero size. The general format for redirecting output is: [_n]>>_w_o_r_d - If the redirection operator is >>, and the nnoocclloobbbbeerr option to the sseett - builtin has been enabled, the redirection will fail if the file whose - name results from the expansion of _w_o_r_d exists and is a regular file. + If the redirection operator is >>, and the nnoocclloobbbbeerr option to the sseett + builtin has been enabled, the redirection will fail if the file whose + name results from the expansion of _w_o_r_d exists and is a regular file. If the redirection operator is >>||, or the redirection operator is >> and - the nnoocclloobbbbeerr option to the sseett builtin command is not enabled, the re- - direction is attempted even if the file named by _w_o_r_d exists. + the nnoocclloobbbbeerr option to the sseett builtin command is not enabled, the + redirection is attempted even if the file named by _w_o_r_d exists. AAppppeennddiinngg RReeddiirreecctteedd OOuuttppuutt Redirection of output in this fashion causes the file whose name re- sults from the expansion of _w_o_r_d to be opened for appending on file de- - scriptor _n, or the standard output (file descriptor 1) if _n is not + scriptor _n, or the standard output (file descriptor 1) if _n is not specified. If the file does not exist it is created. The general format for appending output is: @@ -2293,11 +2379,11 @@ RREEDDIIRREECCTTIIOONN [_n]>>>>_w_o_r_d RReeddiirreeccttiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr - This construct allows both the standard output (file descriptor 1) and - the standard error output (file descriptor 2) to be redirected to the + This construct allows both the standard output (file descriptor 1) and + the standard error output (file descriptor 2) to be redirected to the file whose name is the expansion of _w_o_r_d. - There are two formats for redirecting standard output and standard er- + There are two formats for redirecting standard output and standard er- ror: &&>>_w_o_r_d @@ -2330,8 +2416,8 @@ RREEDDIIRREECCTTIIOONN HHeerree DDooccuummeennttss This type of redirection instructs the shell to read input from the - current source until a line containing only _d_e_l_i_m_i_t_e_r (with no trailing - blanks) is seen. All of the lines read up to that point are then used + current source until it reads a line containing only _d_e_l_i_m_i_t_e_r (with no + trailing blanks). All of the lines read up to that point are then used as the standard input (or file descriptor _n if _n is specified) for a command. @@ -2342,17 +2428,18 @@ RREEDDIIRREECCTTIIOONN _d_e_l_i_m_i_t_e_r No parameter and variable expansion, command substitution, arithmetic - expansion, or pathname expansion is performed on _w_o_r_d. If any part of - _w_o_r_d is quoted, the _d_e_l_i_m_i_t_e_r is the result of quote removal on _w_o_r_d, - and the lines in the here-document are not expanded. If _w_o_r_d is un- - quoted, all lines of the here-document are subjected to parameter ex- - pansion, command substitution, and arithmetic expansion, the character - sequence \\<> is ignored, and \\ must be used to quote the charac- - ters \\, $$, and ``. + expansion, or pathname expansion is performed on _w_o_r_d. + + If any part of _w_o_r_d is quoted, the _d_e_l_i_m_i_t_e_r is the result of quote re- + moval on _w_o_r_d, and the lines in the here-document are not expanded. If + _w_o_r_d is unquoted, the _d_e_l_i_m_i_t_e_r is _w_o_r_d itself, all lines of the here- + document are subjected to parameter expansion, command substitution, + and arithmetic expansion, the character sequence \\<> is ignored, + and \\ must be used to quote the characters \\, $$, and ``. If the redirection operator is <<<<--, then all leading tab characters are - stripped from input lines and the line containing _d_e_l_i_m_i_t_e_r. This al- - lows here-documents within shell scripts to be indented in a natural + stripped from input lines and the line containing _d_e_l_i_m_i_t_e_r. This al- + lows here-documents within shell scripts to be indented in a natural fashion. HHeerree SSttrriinnggss @@ -2360,9 +2447,9 @@ RREEDDIIRREECCTTIIOONN [_n]<<<<<<_w_o_r_d - The _w_o_r_d undergoes tilde expansion, parameter and variable expansion, - command substitution, arithmetic expansion, and quote removal. Path- - name expansion and word splitting are not performed. The result is + The _w_o_r_d undergoes tilde expansion, parameter and variable expansion, + command substitution, arithmetic expansion, and quote removal. Path- + name expansion and word splitting are not performed. The result is supplied as a single string, with a newline appended, to the command on its standard input (or file descriptor _n if _n is specified). @@ -2372,8 +2459,8 @@ RREEDDIIRREECCTTIIOONN [_n]<<&&_w_o_r_d is used to duplicate input file descriptors. If _w_o_r_d expands to one or - more digits, the file descriptor denoted by _n is made to be a copy of - that file descriptor. If the digits in _w_o_r_d do not specify a file de- + more digits, the file descriptor denoted by _n is made to be a copy of + that file descriptor. If the digits in _w_o_r_d do not specify a file de- scriptor open for input, a redirection error occurs. If _w_o_r_d evaluates to --, file descriptor _n is closed. If _n is not specified, the standard input (file descriptor 0) is used. @@ -2382,10 +2469,10 @@ RREEDDIIRREECCTTIIOONN [_n]>>&&_w_o_r_d - is used similarly to duplicate output file descriptors. If _n is not - specified, the standard output (file descriptor 1) is used. If the - digits in _w_o_r_d do not specify a file descriptor open for output, a re- - direction error occurs. If _w_o_r_d evaluates to --, file descriptor _n is + is used similarly to duplicate output file descriptors. If _n is not + specified, the standard output (file descriptor 1) is used. If the + digits in _w_o_r_d do not specify a file descriptor open for output, a + redirection error occurs. If _w_o_r_d evaluates to --, file descriptor _n is closed. As a special case, if _n is omitted, and _w_o_r_d does not expand to one or more digits or --, the standard output and standard error are redirected as described previously. @@ -2403,7 +2490,7 @@ RREEDDIIRREECCTTIIOONN [_n]>>&&_d_i_g_i_t-- - moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard + moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard output (file descriptor 1) if _n is not specified. OOppeenniinngg FFiillee DDeessccrriippttoorrss ffoorr RReeaaddiinngg aanndd WWrriittiinngg @@ -2411,26 +2498,34 @@ RREEDDIIRREECCTTIIOONN [_n]<<>>_w_o_r_d - causes the file whose name is the expansion of _w_o_r_d to be opened for - both reading and writing on file descriptor _n, or on file descriptor 0 + causes the file whose name is the expansion of _w_o_r_d to be opened for + both reading and writing on file descriptor _n, or on file descriptor 0 if _n is not specified. If the file does not exist, it is created. AALLIIAASSEESS - _A_l_i_a_s_e_s allow a string to be substituted for a word when it is used as - the first word of a simple command. The shell maintains a list of - aliases that may be set and unset with the aalliiaass and uunnaalliiaass builtin - commands (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The first word of each - simple command, if unquoted, is checked to see if it has an alias. If - so, that word is replaced by the text of the alias. The characters //, - $$, ``, and == and any of the shell _m_e_t_a_c_h_a_r_a_c_t_e_r_s or quoting characters - listed above may not appear in an alias name. The replacement text may - contain any valid shell input, including shell metacharacters. The - first word of the replacement text is tested for aliases, but a word - that is identical to an alias being expanded is not expanded a second - time. This means that one may alias llss to llss --FF, for instance, and - bbaasshh does not try to recursively expand the replacement text. If the - last character of the alias value is a _b_l_a_n_k, then the next command - word following the alias is also checked for alias expansion. + _A_l_i_a_s_e_s allow a string to be substituted for a word that is in a posi- + tion in the input where it can be the first word of a simple command. + Aliases have names and corresponding values that are set and unset us- + ing the aalliiaass and uunnaalliiaass builtin commands (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS + below). + + If the shell reads an unquoted word in the right position, it checks + the word to see if it matches an alias name. If it matches, the shell + replaces the word with the alias value, and reads that value as if it + had been read instead of the word. The shell doesn't look at any char- + acters following the word before attempting alias substitution. + + The characters //, $$, ``, and == and any of the shell _m_e_t_a_c_h_a_r_a_c_t_e_r_s or + quoting characters listed above may not appear in an alias name. The + replacement text may contain any valid shell input, including shell + metacharacters. The first word of the replacement text is tested for + aliases, but a word that is identical to an alias being expanded is not + expanded a second time. This means that one may alias llss to llss --FF, for + instance, and bbaasshh does not try to recursively expand the replacement + text. + + If the last character of the alias value is a _b_l_a_n_k, then the next com- + mand word following the alias is also checked for alias expansion. Aliases are created and listed with the aalliiaass command, and removed with the uunnaalliiaass command. @@ -2464,9 +2559,9 @@ FFUUNNCCTTIIOONNSS stores a series of commands for later execution. When the name of a shell function is used as a simple command name, the list of commands associated with that function name is executed. Functions are executed - in the context of the current shell; no new process is created to in- - terpret them (contrast this with the execution of a shell script). - When a function is executed, the arguments to the function become the + in the context of the current shell; no new process is created to in- + terpret them (contrast this with the execution of a shell script). + When a function is executed, the arguments to the function become the positional parameters during its execution. The special parameter ## is updated to reflect the change. Special parameter 00 is unchanged. The first element of the FFUUNNCCNNAAMMEE variable is set to the name of the func- @@ -2506,12 +2601,12 @@ FFUUNNCCTTIIOONNSS values are a result of the sequence of function calls that caused exe- cution to reach the current function. The value of a variable that a function sees depends on its value within its caller, if any, whether - that caller is the "global" scope or another shell function. This is - also the value that a local variable declaration "shadows", and the - value that is restored when the function returns. + that caller is the global scope or another shell function. This is + also the value that a local variable declaration shadows, and the value + that is restored when the function returns. - For example, if a variable _v_a_r is declared as local in function _f_u_n_c_1, - and _f_u_n_c_1 calls another function _f_u_n_c_2, references to _v_a_r made from + For example, if a variable _v_a_r is declared as local in function _f_u_n_c_1, + and _f_u_n_c_1 calls another function _f_u_n_c_2, references to _v_a_r made from within _f_u_n_c_2 will resolve to the local variable _v_a_r from _f_u_n_c_1, shadow- ing any global variable named _v_a_r. @@ -2522,16 +2617,16 @@ FFUUNNCCTTIIOONNSS main so (appearing as unset) until it is reset in that scope or until the function returns. Once the function returns, any instance of the variable at a previous scope will become visible. If the unset acts on - a variable at a previous scope, any instance of a variable with that - name that had been shadowed will become visible (see below how the lloo-- + a variable at a previous scope, any instance of a variable with that + name that had been shadowed will become visible (see below how the lloo-- ccaallvvaarr__uunnsseett shell option changes this behavior). - The FFUUNNCCNNEESSTT variable, if set to a numeric value greater than 0, de- - fines a maximum function nesting level. Function invocations that ex- + The FFUUNNCCNNEESSTT variable, if set to a numeric value greater than 0, de- + fines a maximum function nesting level. Function invocations that ex- ceed the limit cause the entire command to abort. - If the builtin command rreettuurrnn is executed in a function, the function - completes and execution resumes with the next command after the func- + If the builtin command rreettuurrnn is executed in a function, the function + completes and execution resumes with the next command after the func- tion call. Any command associated with the RREETTUURRNN trap is executed be- fore execution resumes. When a function completes, the values of the positional parameters and the special parameter ## are restored to the @@ -2539,15 +2634,15 @@ FFUUNNCCTTIIOONNSS Function names and definitions may be listed with the --ff option to the ddeeccllaarree or ttyyppeesseett builtin commands. The --FF option to ddeeccllaarree or ttyyppee-- - sseett will list the function names only (and optionally the source file - and line number, if the eexxttddeebbuugg shell option is enabled). Functions - may be exported so that child shell processes (those created when exe- - cuting a separate shell invocation) automatically have them defined + sseett will list the function names only (and optionally the source file + and line number, if the eexxttddeebbuugg shell option is enabled). Functions + may be exported so that child shell processes (those created when exe- + cuting a separate shell invocation) automatically have them defined with the --ff option to the eexxppoorrtt builtin. A function definition may be deleted using the --ff option to the uunnsseett builtin. Functions may be recursive. The FFUUNNCCNNEESSTT variable may be used to limit - the depth of the function call stack and restrict the number of func- + the depth of the function call stack and restrict the number of func- tion invocations. By default, no limit is imposed on the number of re- cursive calls. @@ -2555,9 +2650,9 @@ AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN The shell allows arithmetic expressions to be evaluated, under certain circumstances (see the lleett and ddeeccllaarree builtin commands, the (((( com- pound command, and AArriitthhmmeettiicc EExxppaannssiioonn). Evaluation is done in fixed- - width integers with no check for overflow, though division by 0 is - trapped and flagged as an error. The operators and their precedence, - associativity, and values are the same as in the C language. The fol- + width integers with no check for overflow, though division by 0 is + trapped and flagged as an error. The operators and their precedence, + associativity, and values are the same as in the C language. The fol- lowing list of operators is grouped into levels of equal-precedence op- erators. The levels are listed in order of decreasing precedence. @@ -2588,21 +2683,21 @@ AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN Shell variables are allowed as operands; parameter expansion is per- formed before the expression is evaluated. Within an expression, shell - variables may also be referenced by name without using the parameter - expansion syntax. A shell variable that is null or unset evaluates to + variables may also be referenced by name without using the parameter + expansion syntax. A shell variable that is null or unset evaluates to 0 when referenced by name without using the parameter expansion syntax. The value of a variable is evaluated as an arithmetic expression when it is referenced, or when a variable which has been given the _i_n_t_e_g_e_r attribute using ddeeccllaarree --ii is assigned a value. A null value evaluates - to 0. A shell variable need not have its _i_n_t_e_g_e_r attribute turned on + to 0. A shell variable need not have its _i_n_t_e_g_e_r attribute turned on to be used in an expression. Integer constants follow the C language definition, without suffixes or character constants. Constants with a leading 0 are interpreted as oc- - tal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, num- - bers take the form [_b_a_s_e_#]n, where the optional _b_a_s_e is a decimal num- - ber between 2 and 64 representing the arithmetic base, and _n is a num- - ber in that base. If _b_a_s_e_# is omitted, then base 10 is used. When + tal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, num- + bers take the form [_b_a_s_e_#]n, where the optional _b_a_s_e is a decimal num- + ber between 2 and 64 representing the arithmetic base, and _n is a num- + ber in that base. If _b_a_s_e_# is omitted, then base 10 is used. When specifying _n, if a non-digit is required, the digits greater than 9 are represented by the lowercase letters, the uppercase letters, @, and _, in that order. If _b_a_s_e is less than or equal to 36, lowercase and up- @@ -2623,8 +2718,8 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS Expressions are formed from the following unary or binary primaries. BBaasshh handles several filenames specially when they are used in expres- sions. If the operating system on which bbaasshh is running provides these - special files, bash will use them; otherwise it will emulate them in- - ternally with this behavior: If any _f_i_l_e argument to one of the pri- + special files, bash will use them; otherwise it will emulate them in- + ternally with this behavior: If any _f_i_l_e argument to one of the pri- maries is of the form _/_d_e_v_/_f_d_/_n, then file descriptor _n is checked. If the _f_i_l_e argument to one of the primaries is one of _/_d_e_v_/_s_t_d_i_n, _/_d_e_v_/_s_t_d_o_u_t, or _/_d_e_v_/_s_t_d_e_r_r, file descriptor 0, 1, or 2, respectively, @@ -2634,8 +2729,10 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS bolic links and operate on the target of the link, rather than the link itself. - When used with [[[[, the << and >> operators sort lexicographically using - the current locale. The tteesstt command sorts using ASCII ordering. + When used with [[[[, or when the shell is in _p_o_s_i_x _m_o_d_e, the << and >> op- + erators sort lexicographically using the current locale. When the + shell is not in _p_o_s_i_x _m_o_d_e, the tteesstt command sorts using ASCII order- + ing. --aa _f_i_l_e True if _f_i_l_e exists. @@ -2654,7 +2751,7 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS --hh _f_i_l_e True if _f_i_l_e exists and is a symbolic link. --kk _f_i_l_e - True if _f_i_l_e exists and its ``sticky'' bit is set. + True if _f_i_l_e exists and its "sticky" bit is set. --pp _f_i_l_e True if _f_i_l_e exists and is a named pipe (FIFO). --rr _f_i_l_e @@ -2694,9 +2791,13 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS builtin below. --vv _v_a_r_n_a_m_e True if the shell variable _v_a_r_n_a_m_e is set (has been assigned a - value). + value). If _v_a_r_n_a_m_e is an indexed array variable name sub- + scripted by _@ or _*, this returns true if the array has any set + elements. If _v_a_r_n_a_m_e is an associative array variable name sub- + scripted by _@ or _*, this returns true if an element with that + key is set. --RR _v_a_r_n_a_m_e - True if the shell variable _v_a_r_n_a_m_e is set and is a name refer- + True if the shell variable _v_a_r_n_a_m_e is set and is a name refer- ence. --zz _s_t_r_i_n_g True if the length of _s_t_r_i_n_g is zero. @@ -2706,8 +2807,8 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS _s_t_r_i_n_g_1 ==== _s_t_r_i_n_g_2 _s_t_r_i_n_g_1 == _s_t_r_i_n_g_2 - True if the strings are equal. == should be used with the tteesstt - command for POSIX conformance. When used with the [[[[ command, + True if the strings are equal. == should be used with the tteesstt + command for POSIX conformance. When used with the [[[[ command, this performs pattern matching as described above (CCoommppoouunndd CCoomm-- mmaannddss). @@ -2731,23 +2832,23 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS SSIIMMPPLLEE CCOOMMMMAANNDD EEXXPPAANNSSIIOONN When a simple command is executed, the shell performs the following ex- - pansions, assignments, and redirections, from left to right, in the + pansions, assignments, and redirections, from left to right, in the following order. - 1. The words that the parser has marked as variable assignments - (those preceding the command name) and redirections are saved + 1. The words that the parser has marked as variable assignments + (those preceding the command name) and redirections are saved for later processing. - 2. The words that are not variable assignments or redirections are - expanded. If any words remain after expansion, the first word - is taken to be the name of the command and the remaining words + 2. The words that are not variable assignments or redirections are + expanded. If any words remain after expansion, the first word + is taken to be the name of the command and the remaining words are the arguments. 3. Redirections are performed as described above under RREEDDIIRREECCTTIIOONN. 4. The text after the == in each variable assignment undergoes tilde expansion, parameter expansion, command substitution, arithmetic - expansion, and quote removal before being assigned to the vari- + expansion, and quote removal before being assigned to the vari- able. If no command name results, the variable assignments affect the current @@ -2756,24 +2857,24 @@ SSIIMMPPLLEE CCOOMMMMAANNDD EEXXPPAANNSSIIOONN are performed before redirections. Otherwise, the variables are added to the environment of the executed command and do not affect the cur- rent shell environment. If any of the assignments attempts to assign a - value to a readonly variable, an error occurs, and the command exits + value to a readonly variable, an error occurs, and the command exits with a non-zero status. - If no command name results, redirections are performed, but do not af- - fect the current shell environment. A redirection error causes the + If no command name results, redirections are performed, but do not af- + fect the current shell environment. A redirection error causes the command to exit with a non-zero status. - If there is a command name left after expansion, execution proceeds as - described below. Otherwise, the command exits. If one of the expan- - sions contained a command substitution, the exit status of the command - is the exit status of the last command substitution performed. If + If there is a command name left after expansion, execution proceeds as + described below. Otherwise, the command exits. If one of the expan- + sions contained a command substitution, the exit status of the command + is the exit status of the last command substitution performed. If there were no command substitutions, the command exits with a status of zero. CCOOMMMMAANNDD EEXXEECCUUTTIIOONN After a command has been split into words, if it results in a simple - command and an optional list of arguments, the following actions are - taken. + command and an optional list of arguments, the shell performs the fol- + lowing actions. If the command name contains no slashes, the shell attempts to locate it. If there exists a shell function by that name, that function is @@ -2784,14 +2885,14 @@ CCOOMMMMAANNDD EEXXEECCUUTTIIOONN If the name is neither a shell function nor a builtin, and contains no slashes, bbaasshh searches each element of the PPAATTHH for a directory con- taining an executable file by that name. BBaasshh uses a hash table to re- - member the full pathnames of executable files (see hhaasshh under SSHHEELLLL - BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A full search of the directories in PPAATTHH is - performed only if the command is not found in the hash table. If the + member the full pathnames of executable files (see hhaasshh under SSHHEELLLL + BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A full search of the directories in PPAATTHH is + performed only if the command is not found in the hash table. If the search is unsuccessful, the shell searches for a defined shell function named ccoommmmaanndd__nnoott__ffoouunndd__hhaannddllee. If that function exists, it is invoked - in a separate execution environment with the original command and the - original command's arguments as its arguments, and the function's exit - status becomes the exit status of that subshell. If that function is + in a separate execution environment with the original command and the + original command's arguments as its arguments, and the function's exit + status becomes the exit status of that subshell. If that function is not defined, the shell prints an error message and returns an exit sta- tus of 127. @@ -2803,7 +2904,7 @@ CCOOMMMMAANNDD EEXXEECCUUTTIIOONN If this execution fails because the file is not in executable format, and the file is not a directory, it is assumed to be a _s_h_e_l_l _s_c_r_i_p_t, a file containing shell commands, and the shell creates a new instance of - itself to execute it. This subshell reinitializes itself, so that the + itself to execute it. This subshell reinitializes itself, so that the effect is as if a new shell had been invoked to handle the script, with the exception that the locations of commands remembered by the parent (see hhaasshh below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS) are retained by the @@ -2835,33 +2936,32 @@ CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENN +o shell parameters that are set by variable assignment or with sseett or inherited from the shell's parent in the environment - +o shell functions defined during execution or inherited from the + +o shell functions defined during execution or inherited from the shell's parent in the environment - +o options enabled at invocation (either by default or with com- + +o options enabled at invocation (either by default or with com- mand-line arguments) or by sseett +o options enabled by sshhoopptt +o shell aliases defined with aalliiaass - +o various process IDs, including those of background jobs, the + +o various process IDs, including those of background jobs, the value of $$$$, and the value of PPPPIIDD - When a simple command other than a builtin or shell function is to be - executed, it is invoked in a separate execution environment that con- - sists of the following. Unless otherwise noted, the values are inher- + When a simple command other than a builtin or shell function is to be + executed, it is invoked in a separate execution environment that con- + sists of the following. Unless otherwise noted, the values are inher- ited from the shell. - - +o the shell's open files, plus any modifications and additions + +o the shell's open files, plus any modifications and additions specified by redirections to the command +o the current working directory +o the file creation mode mask - +o shell variables and functions marked for export, along with + +o shell variables and functions marked for export, along with variables exported for the command, passed in the environment +o traps caught by the shell are reset to the values inherited from @@ -2880,34 +2980,36 @@ CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENN executed in a subshell environment. Changes made to the subshell envi- ronment cannot affect the shell's execution environment. - Subshells spawned to execute command substitutions inherit the value of - the --ee option from the parent shell. When not in _p_o_s_i_x _m_o_d_e, bbaasshh - clears the --ee option in such subshells. + When the shell is in _p_o_s_i_x _m_o_d_e, subshells spawned to execute command + substitutions inherit the value of the --ee option from their parent + shell. When not in _p_o_s_i_x _m_o_d_e, bbaasshh clears the --ee option in such sub- + shells. See the description of the iinnhheerriitt__eerrrreexxiitt shell option below + for how to control this behavior when not in posix mode. If a command is followed by a && and job control is not active, the de- fault standard input for the command is the empty file _/_d_e_v_/_n_u_l_l. Oth- - erwise, the invoked command inherits the file descriptors of the call- + erwise, the invoked command inherits the file descriptors of the call- ing shell as modified by redirections. EENNVVIIRROONNMMEENNTT - When a program is invoked it is given an array of strings called the + When a program is invoked it is given an array of strings called the _e_n_v_i_r_o_n_m_e_n_t. This is a list of _n_a_m_e-_v_a_l_u_e pairs, of the form _n_a_m_e=_v_a_l_u_e. - The shell provides several ways to manipulate the environment. On in- - vocation, the shell scans its own environment and creates a parameter - for each name found, automatically marking it for _e_x_p_o_r_t to child pro- - cesses. Executed commands inherit the environment. The eexxppoorrtt and ddee-- - ccllaarree --xx commands allow parameters and functions to be added to and + The shell provides several ways to manipulate the environment. On in- + vocation, the shell scans its own environment and creates a parameter + for each name found, automatically marking it for _e_x_p_o_r_t to child + processes. Executed commands inherit the environment. The eexxppoorrtt and + ddeeccllaarree --xx commands allow parameters and functions to be added to and deleted from the environment. If the value of a parameter in the envi- ronment is modified, the new value becomes part of the environment, re- - placing the old. The environment inherited by any executed command - consists of the shell's initial environment, whose values may be modi- - fied in the shell, less any pairs removed by the uunnsseett command, plus + placing the old. The environment inherited by any executed command + consists of the shell's initial environment, whose values may be modi- + fied in the shell, less any pairs removed by the uunnsseett command, plus any additions via the eexxppoorrtt and ddeeccllaarree --xx commands. - The environment for any _s_i_m_p_l_e _c_o_m_m_a_n_d or function may be augmented - temporarily by prefixing it with parameter assignments, as described + The environment for any _s_i_m_p_l_e _c_o_m_m_a_n_d or function may be augmented + temporarily by prefixing it with parameter assignments, as described above in PPAARRAAMMEETTEERRSS. These assignment statements affect only the envi- ronment seen by that command. @@ -2920,7 +3022,7 @@ EENNVVIIRROONNMMEENNTT ment. EEXXIITT SSTTAATTUUSS - The exit status of an executed command is the value returned by the + The exit status of an executed command is the value returned by the _w_a_i_t_p_i_d system call or equivalent function. Exit statuses fall between 0 and 255, though, as explained below, the shell may use values above 125 specially. Exit statuses from shell builtins and compound commands @@ -2928,12 +3030,12 @@ EEXXIITT SSTTAATTUUSS will use special values to indicate specific failure modes. For the shell's purposes, a command which exits with a zero exit status - has succeeded. An exit status of zero indicates success. A non-zero - exit status indicates failure. When a command terminates on a fatal + has succeeded. An exit status of zero indicates success. A non-zero + exit status indicates failure. When a command terminates on a fatal signal _N, bbaasshh uses the value of 128+_N as the exit status. - If a command is not found, the child process created to execute it re- - turns a status of 127. If a command is found but is not executable, + If a command is not found, the child process created to execute it re- + turns a status of 127. If a command is found but is not executable, the return status is 126. If a command fails because of an error during expansion or redirection, @@ -2947,12 +3049,12 @@ EEXXIITT SSTTAATTUUSS The exit status of the last command is available in the special parame- ter $?. - BBaasshh itself returns the exit status of the last command executed, un- - less a syntax error occurs, in which case it exits with a non-zero + BBaasshh itself returns the exit status of the last command executed, un- + less a syntax error occurs, in which case it exits with a non-zero value. See also the eexxiitt builtin command below. SSIIGGNNAALLSS - When bbaasshh is interactive, in the absence of any traps, it ignores + When bbaasshh is interactive, in the absence of any traps, it ignores SSIIGGTTEERRMM (so that kkiillll 00 does not kill an interactive shell), and SSIIGGIINNTT is caught and handled (so that the wwaaiitt builtin is interruptible). In all cases, bbaasshh ignores SSIIGGQQUUIITT. If job control is in effect, bbaasshh ig- @@ -2960,38 +3062,38 @@ SSIIGGNNAALLSS Non-builtin commands run by bbaasshh have signal handlers set to the values inherited by the shell from its parent. When job control is not in ef- - fect, asynchronous commands ignore SSIIGGIINNTT and SSIIGGQQUUIITT in addition to - these inherited handlers. Commands run as a result of command substi- + fect, asynchronous commands ignore SSIIGGIINNTT and SSIIGGQQUUIITT in addition to + these inherited handlers. Commands run as a result of command substi- tution ignore the keyboard-generated job control signals SSIIGGTTTTIINN, SSIIGGTT-- TTOOUU, and SSIIGGTTSSTTPP. The shell exits by default upon receipt of a SSIIGGHHUUPP. Before exiting, an interactive shell resends the SSIIGGHHUUPP to all jobs, running or stopped. Stopped jobs are sent SSIIGGCCOONNTT to ensure that they receive the - SSIIGGHHUUPP. To prevent the shell from sending the signal to a particular - job, it should be removed from the jobs table with the ddiissoowwnn builtin - (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) or marked to not receive SSIIGGHHUUPP us- + SSIIGGHHUUPP. To prevent the shell from sending the signal to a particular + job, it should be removed from the jobs table with the ddiissoowwnn builtin + (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) or marked to not receive SSIIGGHHUUPP us- ing ddiissoowwnn --hh. - If the hhuuppoonneexxiitt shell option has been set with sshhoopptt, bbaasshh sends a + If the hhuuppoonneexxiitt shell option has been set with sshhoopptt, bbaasshh sends a SSIIGGHHUUPP to all jobs when an interactive login shell exits. - If bbaasshh is waiting for a command to complete and receives a signal for + If bbaasshh 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 com- mand completes. When bbaasshh is waiting for an asynchronous command via the wwaaiitt builtin, the reception of a signal for which a trap has been set will cause the wwaaiitt builtin to return immediately with an exit sta- tus greater than 128, immediately after which the trap is executed. - When job control is not enabled, and bbaasshh is waiting for a foreground + When job control is not enabled, and bbaasshh is waiting for a foreground command to complete, the shell receives keyboard-generated signals such as SSIIGGIINNTT (usually generated by ^^CC) that users commonly intend to send to that command. This happens because the shell and the command are in - the same process group as the terminal, and ^^CC sends SSIIGGIINNTT to all pro- - cesses in that process group. + the same process group as the terminal, and ^^CC sends SSIIGGIINNTT to all + processes in that process group. - When bbaasshh is running without job control enabled and receives SSIIGGIINNTT - while waiting for a foreground command, it waits until that foreground + When bbaasshh is running without job control enabled and receives SSIIGGIINNTT + while waiting for a foreground command, it waits until that foreground command terminates and then decides what to do about the SSIIGGIINNTT: 1. If the command terminates due to the SSIIGGIINNTT, bbaasshh concludes that @@ -3004,30 +3106,30 @@ SSIIGGNNAALLSS nal, either, instead assuming that the SSIIGGIINNTT was used as part of the program's normal operation (e.g., emacs uses it to abort editing commands) or deliberately discarded. However, bbaasshh will - run any trap set on SSIIGGIINNTT, as it does with any other trapped - signal it receives while it is waiting for the foreground com- + run any trap set on SSIIGGIINNTT, as it does with any other trapped + signal it receives while it is waiting for the foreground com- mand to complete, for compatibility. JJOOBB CCOONNTTRROOLL _J_o_b _c_o_n_t_r_o_l refers to the ability to selectively stop (_s_u_s_p_e_n_d) the ex- ecution of processes and continue (_r_e_s_u_m_e) their execution at a later point. A user typically employs this facility via an interactive in- - terface supplied jointly by the operating system kernel's terminal - driver and bbaasshh. + terface supplied jointly by the operating system kernel's terminal dri- + ver and bbaasshh. - The shell associates a _j_o_b with each pipeline. It keeps a table of - currently executing jobs, which may be listed with the jjoobbss command. - When bbaasshh starts a job asynchronously (in the _b_a_c_k_g_r_o_u_n_d), it prints a + The shell associates a _j_o_b with each pipeline. It keeps a table of + currently executing jobs, which may be listed with the jjoobbss command. + When bbaasshh starts a job asynchronously (in the _b_a_c_k_g_r_o_u_n_d), it prints a line that looks like: [1] 25647 indicating that this job is job number 1 and that the process ID of the last process in the pipeline associated with this job is 25647. All of - the processes in a single pipeline are members of the same job. BBaasshh + the processes in a single pipeline are members of the same job. BBaasshh uses the _j_o_b abstraction as the basis for job control. - To facilitate the implementation of the user interface to job control, + To facilitate the implementation of the user interface to job control, the operating system maintains the notion of a _c_u_r_r_e_n_t _t_e_r_m_i_n_a_l _p_r_o_c_e_s_s _g_r_o_u_p _I_D. Members of this process group (processes whose process group ID is equal to the current terminal process group ID) receive keyboard- @@ -3035,11 +3137,10 @@ JJOOBB CCOONNTTRROOLL the _f_o_r_e_g_r_o_u_n_d. _B_a_c_k_g_r_o_u_n_d processes are those whose process group ID differs from the terminal's; such processes are immune to keyboard-gen- erated signals. Only foreground processes are allowed to read from or, - if the user so specifies with stty tostop, write to the terminal. - Background processes which attempt to read from (write to when stty - tostop is in effect) the terminal are sent a SSIIGGTTTTIINN ((SSIIGGTTTTOOUU)) signal - by the kernel's terminal driver, which, unless caught, suspends the - process. + if the user so specifies with "stty tostop", write to the terminal. + Background processes which attempt to read from (write to when "tostop" + is in effect) the terminal are sent a SSIIGGTTTTIINN ((SSIIGGTTTTOOUU)) signal by the + kernel's terminal driver, which, unless caught, suspends the process. If the operating system on which bbaasshh is running supports job control, bbaasshh contains facilities to use it. Typing the _s_u_s_p_e_n_d character (typ- @@ -3047,8 +3148,8 @@ JJOOBB CCOONNTTRROOLL be stopped and returns control to bbaasshh. Typing the _d_e_l_a_y_e_d _s_u_s_p_e_n_d character (typically ^^YY, Control-Y) causes the process to be stopped when it attempts to read input from the terminal, and control to be re- - turned to bbaasshh. The user may then manipulate the state of this job, - using the bbgg command to continue it in the background, the ffgg command + turned to bbaasshh. The user may then manipulate the state of this job, + using the bbgg command to continue it in the background, the ffgg command to continue it in the foreground, or the kkiillll command to kill it. A ^^ZZ takes effect immediately, and has the additional side effect of causing pending output and typeahead to be discarded. @@ -3060,7 +3161,7 @@ JJOOBB CCOONNTTRROOLL line. For example, %%ccee refers to a stopped job whose command name be- gins with ccee. If a prefix matches more than one job, bbaasshh reports an error. Using %%??ccee, on the other hand, refers to any job containing the - string ccee in its command line. If the substring matches more than one + string ccee in its command line. If the substring matches more than one job, bbaasshh reports an error. The symbols %%%% and %%++ refer to the shell's notion of the _c_u_r_r_e_n_t _j_o_b, which is the last job stopped while it was in the foreground or started in the background. The _p_r_e_v_i_o_u_s _j_o_b may @@ -3071,19 +3172,19 @@ JJOOBB CCOONNTTRROOLL job specification) also refers to the current job. Simply naming a job can be used to bring it into the foreground: %%11 is - a synonym for ````ffgg %%11'''', bringing job 1 from the background into the - foreground. Similarly, ````%%11 &&'''' resumes job 1 in the background, - equivalent to ````bbgg %%11''''. + a synonym for "fg %1", bringing job 1 from the background into the + foreground. Similarly, "%1 &" resumes job 1 in the background, equiva- + lent to "bg %1". - The shell learns immediately whenever a job changes state. Normally, + The shell learns immediately whenever a job changes state. Normally, bbaasshh waits until it is about to print a prompt before reporting changes in a job's status so as to not interrupt any other output. If the --bb option to the sseett builtin command is enabled, bbaasshh reports such changes - immediately. Any trap on SSIIGGCCHHLLDD is executed for each child that ex- + immediately. Any trap on SSIIGGCCHHLLDD is executed for each child that ex- its. - If an attempt to exit bbaasshh is made while jobs are stopped (or, if the - cchheecckkjjoobbss shell option has been enabled using the sshhoopptt builtin, run- + If an attempt to exit bbaasshh is made while jobs are stopped (or, if the + cchheecckkjjoobbss shell option has been enabled using the sshhoopptt builtin, run- ning), the shell prints a warning message, and, if the cchheecckkjjoobbss option is enabled, lists the jobs and their statuses. The jjoobbss command may then be used to inspect their status. If a second attempt to exit is @@ -3097,29 +3198,29 @@ JJOOBB CCOONNTTRROOLL PPRROOMMPPTTIINNGG When executing interactively, bbaasshh displays the primary prompt PPSS11 when - it is ready to read a command, and the secondary prompt PPSS22 when it - needs more input to complete a command. BBaasshh displays PPSS00 after it - reads a command but before executing it. BBaasshh displays PPSS44 as de- - scribed above before tracing each command when the --xx option is en- - abled. BBaasshh allows these prompt strings to be customized by inserting - a number of backslash-escaped special characters that are decoded as + it is ready to read a command, and the secondary prompt PPSS22 when it + needs more input to complete a command. BBaasshh displays PPSS00 after it + reads a command but before executing it. BBaasshh displays PPSS44 as de- + scribed above before tracing each command when the --xx option is en- + abled. BBaasshh allows these prompt strings to be customized by inserting + a number of backslash-escaped special characters that are decoded as follows: \\aa an ASCII bell character (07) - \\dd the date in "Weekday Month Date" format (e.g., "Tue May + \\dd the date in "Weekday Month Date" format (e.g., "Tue May 26") \\DD{{_f_o_r_m_a_t}} the _f_o_r_m_a_t is passed to _s_t_r_f_t_i_m_e(3) and the result is in- serted into the prompt string; an empty _f_o_r_m_a_t results in - a locale-specific time representation. The braces are + a locale-specific time representation. The braces are required \\ee an ASCII escape character (033) - \\hh the hostname up to the first `.' + \\hh the hostname up to the first "." \\HH the hostname \\jj the number of jobs currently managed by the shell \\ll the basename of the shell's terminal device name \\nn newline \\rr carriage return - \\ss the name of the shell, the basename of $$00 (the portion + \\ss the name of the shell, the basename of $$00 (the portion following the final slash) \\tt the current time in 24-hour HH:MM:SS format \\TT the current time in 12-hour HH:MM:SS format @@ -3128,8 +3229,8 @@ PPRROOMMPPTTIINNGG \\uu the username of the current user \\vv the version of bbaasshh (e.g., 2.00) \\VV the release of bbaasshh, version + patch level (e.g., 2.00.0) - \\ww the value of the PPWWDD shell variable ($$PPWWDD), with $$HHOOMMEE - abbreviated with a tilde (uses the value of the + \\ww the value of the PPWWDD shell variable ($$PPWWDD), with $$HHOOMMEE + abbreviated with a tilde (uses the value of the PPRROOMMPPTT__DDIIRRTTRRIIMM variable) \\WW the basename of $$PPWWDD, with $$HHOOMMEE abbreviated with a tilde \\!! the history number of this command @@ -3137,18 +3238,18 @@ PPRROOMMPPTTIINNGG \\$$ if the effective UID is 0, a ##, otherwise a $$ \\_n_n_n the character corresponding to the octal number _n_n_n \\\\ a backslash - \\[[ begin a sequence of non-printing characters, which could - be used to embed a terminal control sequence into the + \\[[ begin a sequence of non-printing characters, which could + be used to embed a terminal control sequence into the prompt \\]] end a sequence of non-printing characters - The command number and the history number are usually different: the - history number of a command is its position in the history list, which - may include commands restored from the history file (see HHIISSTTOORRYY be- - low), while the command number is the position in the sequence of com- - mands executed during the current shell session. After the string is - decoded, it is expanded via parameter expansion, command substitution, - arithmetic expansion, and quote removal, subject to the value of the + The command number and the history number are usually different: the + history number of a command is its position in the history list, which + may include commands restored from the history file (see HHIISSTTOORRYY be- + low), while the command number is the position in the sequence of com- + mands executed during the current shell session. After the string is + decoded, it is expanded via parameter expansion, command substitution, + arithmetic expansion, and quote removal, subject to the value of the pprroommppttvvaarrss shell option (see the description of the sshhoopptt command under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). This can have unwanted side effects if escaped portions of the string appear within command substitution or @@ -3167,21 +3268,21 @@ RREEAADDLLIINNEE RReeaaddlliinnee NNoottaattiioonn In this section, the Emacs-style notation is used to denote keystrokes. - Control keys are denoted by C-_k_e_y, e.g., C-n means Control-N. Simi- - larly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means Meta-X. (On key- - boards without a _m_e_t_a key, M-_x means ESC _x, i.e., press the Escape key + Control keys are denoted by C-_k_e_y, e.g., C-n means Control-N. Simi- + larly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means Meta-X. (On key- + boards without a _m_e_t_a key, M-_x means ESC _x, i.e., press the Escape key then the _x key. This makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x means ESC-Control-_x, or press the Escape key then hold the Control key while pressing the _x key.) Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, which normally act as - a repeat count. Sometimes, however, it is the sign of the argument - that is significant. Passing a negative argument to a command that - acts in the forward direction (e.g., kkiillll--lliinnee) causes that command to - act in a backward direction. Commands whose behavior with arguments + a repeat count. Sometimes, however, it is the sign of the argument + that is significant. Passing a negative argument to a command that + acts in the forward direction (e.g., kkiillll--lliinnee) causes that command to + act in a backward direction. Commands whose behavior with arguments deviates from this are noted below. - When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved + When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). The killed text is saved in a _k_i_l_l _r_i_n_g. Consecutive kills cause the text to be accumulated into one unit, which can be yanked all at once. Commands which do not kill text @@ -3191,16 +3292,16 @@ RREEAADDLLIINNEE Readline is customized by putting commands in an initialization file (the _i_n_p_u_t_r_c file). The name of this file is taken from the value of the IINNPPUUTTRRCC variable. If that variable is unset, the default is _~_/_._i_n_- - _p_u_t_r_c. If that file does not exist or cannot be read, the ultimate - default is _/_e_t_c_/_i_n_p_u_t_r_c. When a program which uses the readline li- - brary starts up, the initialization file is read, and the key bindings - and variables are set. There are only a few basic constructs allowed - in the readline initialization file. Blank lines are ignored. Lines - beginning with a ## are comments. Lines beginning with a $$ indicate - conditional constructs. Other lines denote key bindings and variable + _p_u_t_r_c. If that file does not exist or cannot be read, the ultimate + default is _/_e_t_c_/_i_n_p_u_t_r_c. When a program which uses the readline li- + brary starts up, the initialization file is read, and the key bindings + and variables are set. There are only a few basic constructs allowed + in the readline initialization file. Blank lines are ignored. Lines + beginning with a ## are comments. Lines beginning with a $$ indicate + conditional constructs. Other lines denote key bindings and variable settings. - The default key-bindings may be changed with an _i_n_p_u_t_r_c file. Other + The default key-bindings may be changed with an _i_n_p_u_t_r_c file. Other programs that use this library may add their own commands and bindings. For example, placing @@ -3208,18 +3309,19 @@ RREEAADDLLIINNEE M-Control-u: universal-argument or C-Meta-u: universal-argument - into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_- + + into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_- _s_a_l_-_a_r_g_u_m_e_n_t. - The following symbolic character names are recognized: _R_U_B_O_U_T, _D_E_L, + The following symbolic character names are recognized: _R_U_B_O_U_T, _D_E_L, _E_S_C, _L_F_D, _N_E_W_L_I_N_E, _R_E_T, _R_E_T_U_R_N, _S_P_C, _S_P_A_C_E, and _T_A_B. - In addition to command names, readline allows keys to be bound to a + In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a _m_a_c_r_o). RReeaaddlliinnee KKeeyy BBiinnddiinnggss - The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple. - All that is required is the name of the command or the text of a macro + The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple. + All that is required is the name of the command or the text of a macro and a key sequence to which it should be bound. The name may be speci- fied in one of two ways: as a symbolic key name, possibly with _M_e_t_a_- or _C_o_n_t_r_o_l_- prefixes, or as a key sequence. @@ -3234,7 +3336,7 @@ RREEAADDLLIINNEE In the above example, _C_-_u is bound to the function uunniivveerrssaall--aarrgguummeenntt, _M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to run the macro expressed on the right hand side (that is, to insert the - text ``> output'' into the line). + text "> output" into the line). In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs from kkeeyynnaammee above in that strings denoting an entire key sequence may @@ -3247,8 +3349,8 @@ RREEAADDLLIINNEE "\e[11~": "Function Key 1" In this example, _C_-_u is again bound to the function uunniivveerrssaall--aarrgguummeenntt. - _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is - bound to insert the text ``Function Key 1''. + _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is + bound to insert the text "Function Key 1". The full set of GNU Emacs style escape sequences is \\CC-- control prefix @@ -3258,7 +3360,7 @@ RREEAADDLLIINNEE \\"" literal " \\'' literal ' - In addition to the GNU Emacs style escape sequences, a second set of + In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: \\aa alert (bell) \\bb backspace @@ -3268,20 +3370,20 @@ RREEAADDLLIINNEE \\rr carriage return \\tt horizontal tab \\vv vertical tab - \\_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 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) When entering the text of a macro, single or double quotes must be used to indicate a macro definition. Unquoted text is assumed to be a func- - tion name. In the macro body, the backslash escapes described above - are expanded. Backslash will quote any other character in the macro + tion name. In the macro body, the backslash escapes described above + are expanded. Backslash will quote any other character in the macro text, including " and '. - BBaasshh allows the current readline key bindings to be displayed or modi- - fied with the bbiinndd builtin command. The editing mode may be switched - during interactive use by using the --oo option to the sseett builtin com- + BBaasshh allows the current readline key bindings to be displayed or modi- + fied with the bbiinndd builtin command. The editing mode may be switched + during interactive use by using the --oo option to the sseett builtin com- mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). RReeaaddlliinnee VVaarriiaabblleess @@ -3292,62 +3394,65 @@ RREEAADDLLIINNEE sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e or using the bbiinndd builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). - Except where noted, readline variables can take the values OOnn or OOffff - (without regard to case). Unrecognized variable names are ignored. - When a variable value is read, empty or null values, "on" (case-insen- - sitive), and "1" are equivalent to OOnn. All other values are equivalent - to OOffff. The variables and their default values are: + Except where noted, readline variables can take the values OOnn or OOffff + (without regard to case). Unrecognized variable names are ignored. + When readline reads a variable value, empty or null values, "on" (case- + insensitive), and "1" are equivalent to OOnn. All other values are + equivalent to OOffff. The variables and their default values are: aaccttiivvee--rreeggiioonn--ssttaarrtt--ccoolloorr A string variable that controls the text color and background when displaying the text in the active region (see the descrip- tion of eennaabbllee--aaccttiivvee--rreeggiioonn below). This string must not take up any physical character positions on the display, so it should - consist only of terminal escape sequences. It is output to the - terminal before displaying the text in the active region. This - variable is reset to the default value whenever the terminal - type changes. The default value is the string that puts the - terminal in standout mode, as obtained from the terminal's ter- + consist only of terminal escape sequences. It is output to the + terminal before displaying the text in the active region. This + variable is reset to the default value whenever the terminal + type changes. The default value is the string that puts the + terminal in standout mode, as obtained from the terminal's ter- minfo description. A sample value might be "\e[01;33m". aaccttiivvee--rreeggiioonn--eenndd--ccoolloorr - A string variable that "undoes" the effects of aaccttiivvee--rree-- - ggiioonn--ssttaarrtt--ccoolloorr and restores "normal" terminal display appear- - ance after displaying text in the active region. This string - must not take up any physical character positions on the dis- - play, so it should consist only of terminal escape sequences. - It is output to the terminal after displaying the text in the - active region. This variable is reset to the default value - whenever the terminal type changes. The default value is the - string that restores the terminal from standout mode, as ob- + A string variable that "undoes" the effects of aaccttiivvee--rree-- + ggiioonn--ssttaarrtt--ccoolloorr and restores "normal" terminal display appear- + ance after displaying text in the active region. This string + must not take up any physical character positions on the dis- + play, so it should consist only of terminal escape sequences. + It is output to the terminal after displaying the text in the + active region. This variable is reset to the default value + whenever the terminal type changes. The default value is the + string that restores the terminal from standout mode, as ob- tained from the terminal's terminfo description. A sample value might be "\e[0m". bbeellll--ssttyyllee ((aauuddiibbllee)) Controls what happens when readline wants to ring the terminal bell. If set to nnoonnee, readline never rings the bell. If set to - vviissiibbllee, readline uses a visible bell if one is available. If + vviissiibbllee, readline uses a visible bell if one is available. If set to aauuddiibbllee, readline attempts to ring the terminal's bell. bbiinndd--ttttyy--ssppeecciiaall--cchhaarrss ((OOnn)) - If set to OOnn, readline attempts to bind the control characters - treated specially by the kernel's terminal driver to their read- - line equivalents. + If set to OOnn (the default), readline attempts to bind the con- + trol characters that are treated specially by the kernel's ter- + minal driver to their readline equivalents. These override the + default readline bindings described here. Type "stty -a" at a + bbaasshh prompt to see your current terminal settings, including the + special control characters (usually cccchhaarrss). bblliinnkk--mmaattcchhiinngg--ppaarreenn ((OOffff)) If set to OOnn, readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. ccoolloorreedd--ccoommpplleettiioonn--pprreeffiixx ((OOffff)) - If set to OOnn, when listing completions, readline displays the + If set to OOnn, when listing completions, readline displays the common prefix of the set of possible completions using a differ- ent color. The color definitions are taken from the value of the LLSS__CCOOLLOORRSS environment variable. If there is a color defini- - tion in $$LLSS__CCOOLLOORRSS for the custom suffix "readline-colored-com- - pletion-prefix", readline uses this color for the common prefix + tion in $$LLSS__CCOOLLOORRSS for the custom suffix "readline-colored-com- + pletion-prefix", readline uses this color for the common prefix instead of its default. ccoolloorreedd--ssttaattss ((OOffff)) - If set to OOnn, readline displays possible completions using dif- - ferent colors to indicate their file type. The color defini- - tions are taken from the value of the LLSS__CCOOLLOORRSS environment + If set to OOnn, readline displays possible completions using dif- + ferent colors to indicate their file type. The color defini- + tions are taken from the value of the LLSS__CCOOLLOORRSS environment variable. - ccoommmmeenntt--bbeeggiinn ((````##'''')) - The string that is inserted when the readline iinnsseerrtt--ccoommmmeenntt + ccoommmmeenntt--bbeeggiinn (("##")) + The string that is inserted when the readline iinnsseerrtt--ccoommmmeenntt command is executed. This command is bound to MM--## in emacs mode and to ## in vi command mode. ccoommpplleettiioonn--ddiissppllaayy--wwiiddtthh ((--11)) @@ -3360,26 +3465,26 @@ RREEAADDLLIINNEE If set to OOnn, readline performs filename matching and completion in a case-insensitive fashion. ccoommpplleettiioonn--mmaapp--ccaassee ((OOffff)) - If set to OOnn, and ccoommpplleettiioonn--iiggnnoorree--ccaassee is enabled, readline - treats hyphens (_-) and underscores (__) as equivalent when per- + If set to OOnn, and ccoommpplleettiioonn--iiggnnoorree--ccaassee is enabled, readline + treats hyphens (_-) and underscores (__) as equivalent when per- forming case-insensitive filename matching and completion. ccoommpplleettiioonn--pprreeffiixx--ddiissppllaayy--lleennggtthh ((00)) - The length in characters of the common prefix of a list of pos- - sible completions that is displayed without modification. When - set to a value greater than zero, common prefixes longer than - this value are replaced with an ellipsis when displaying possi- + The length in characters of the common prefix of a list of pos- + sible completions that is displayed without modification. When + set to a value greater than zero, common prefixes longer than + this value are replaced with an ellipsis when displaying possi- ble completions. ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000)) - This determines when the user is queried about viewing the num- - ber of possible completions generated by the ppoossssiibbllee--ccoommppllee-- - ttiioonnss command. It may be set to any integer value greater than - or equal to zero. If the number of possible completions is - greater than or equal to the value of this variable, readline - will ask whether or not the user wishes to view them; otherwise - they are simply listed on the terminal. A zero value means + This determines when the user is queried about viewing the num- + ber of possible completions generated by the ppoossssiibbllee--ccoommppllee-- + ttiioonnss command. It may be set to any integer value greater than + or equal to zero. If the number of possible completions is + greater than or equal to the value of this variable, readline + will ask whether or not the user wishes to view them; otherwise + they are simply listed on the terminal. A zero value means readline should never ask; negative values are treated as zero. ccoonnvveerrtt--mmeettaa ((OOnn)) - If set to OOnn, readline will convert characters with the eighth + If set to OOnn, readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing an escape character (in effect, using escape as the _m_e_t_a _p_r_e_f_i_x). The default is _O_n, but readline will set it to @@ -3388,10 +3493,10 @@ RREEAADDLLIINNEE the locale is changed. ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) If set to OOnn, readline will inhibit word completion. Completion - characters will be inserted into the line as if they had been + characters will be inserted into the line as if they had been mapped to sseellff--iinnsseerrtt. eecchhoo--ccoonnttrrooll--cchhaarraacctteerrss ((OOnn)) - When set to OOnn, on operating systems that indicate they support + When set to OOnn, on operating systems that indicate they support it, readline echoes a character corresponding to a signal gener- ated from the keyboard. eeddiittiinngg--mmooddee ((eemmaaccss)) @@ -3429,19 +3534,19 @@ RREEAADDLLIINNEE pad when it is called. Some systems need this to enable the ar- row keys. eennaabbllee--mmeettaa--kkeeyy ((OOnn)) - When set to OOnn, readline will try to enable any meta modifier - key the terminal claims to support when it is called. On many + When set to OOnn, readline will try to enable any meta modifier + key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. eexxppaanndd--ttiillddee ((OOffff)) - If set to OOnn, tilde expansion is performed when readline at- + If set to OOnn, tilde expansion is performed when readline at- tempts word completion. hhiissttoorryy--pprreesseerrvvee--ppooiinntt ((OOffff)) - If set to OOnn, the history code attempts to place point at the - same location on each history line retrieved with pprreevviioouuss--hhiiss-- + If set to OOnn, the history code attempts to place point at the + same location on each history line retrieved with pprreevviioouuss--hhiiss-- ttoorryy or nneexxtt--hhiissttoorryy. hhiissttoorryy--ssiizzee ((uunnsseett)) - Set the maximum number of history entries saved in the history - list. If set to zero, any existing history entries are deleted + Set the maximum number of history entries saved in the history + list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is set to the value of the HHIISSTTSSIIZZEE @@ -3449,7 +3554,7 @@ RREEAADDLLIINNEE non-numeric value, the maximum number of history entries will be set to 500. hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) - When set to OOnn, makes readline use a single line for display, + When set to OOnn, makes readline use a single line for display, scrolling the input horizontally on a single screen line when it becomes longer than the screen width rather than wrapping to a new line. This setting is automatically enabled for terminals @@ -3457,25 +3562,25 @@ RREEAADDLLIINNEE iinnppuutt--mmeettaa ((OOffff)) If set to OOnn, readline will enable eight-bit input (that is, it will not strip the eighth bit from the characters it reads), re- - gardless of what the terminal claims it can support. The name - mmeettaa--ffllaagg is a synonym for this variable. The default is _O_f_f, - but readline will set it to _O_n if the locale contains eight-bit - characters. This variable is dependent on the LLCC__CCTTYYPPEE locale + gardless of what the terminal claims it can support. The name + mmeettaa--ffllaagg is a synonym for this variable. The default is _O_f_f, + but readline will set it to _O_n if the locale contains eight-bit + characters. This variable is dependent on the LLCC__CCTTYYPPEE locale category, and may change if the locale is changed. - iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[CC--JJ'''')) - The string of characters that should terminate an incremental - search without subsequently executing the character as a com- - mand. If this variable has not been given a value, the charac- + iisseeaarrcchh--tteerrmmiinnaattoorrss (("CC--[[CC--JJ")) + The string of characters that should terminate an incremental + search without subsequently executing the character as a com- + mand. If this variable has not been given a value, the charac- ters _E_S_C and _C_-_J will terminate an incremental search. kkeeyymmaapp ((eemmaaccss)) - Set the current readline keymap. The set of valid keymap names - is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_- - _m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is - equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the + Set the current readline keymap. The set of valid keymap names + is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_- + _m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is + equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the value of eeddiittiinngg--mmooddee also affects the default keymap. kkeeyysseeqq--ttiimmeeoouutt ((550000)) - Specifies the duration _r_e_a_d_l_i_n_e will wait for a character when - reading an ambiguous key sequence (one that can form a complete + Specifies the duration _r_e_a_d_l_i_n_e will wait for a character when + reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is re- ceived within the timeout, _r_e_a_d_l_i_n_e will use the shorter but @@ -3492,15 +3597,15 @@ RREEAADDLLIINNEE played with a preceding asterisk (**). mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff)) If set to OOnn, completed names which are symbolic links to direc- - tories have a slash appended (subject to the value of mmaarrkk--ddii-- + tories have a slash appended (subject to the value of mmaarrkk--ddii-- rreeccttoorriieess). mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn)) - This variable, when set to OOnn, causes readline to match files - whose names begin with a `.' (hidden files) when performing - filename completion. If set to OOffff, the leading `.' must be - supplied by the user in the filename to be completed. + This variable, when set to OOnn, forces readline to match files + whose names begin with a "." (hidden files) when performing + filename completion. If set to OOffff, the user must include the + leading "." in the filename to be completed. mmeennuu--ccoommpplleettee--ddiissppllaayy--pprreeffiixx ((OOffff)) - If set to OOnn, menu completion displays the common prefix of the + If set to OOnn, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. oouuttppuutt--mmeettaa ((OOffff)) @@ -3520,15 +3625,18 @@ RREEAADDLLIINNEE rreevveerrtt--aallll--aatt--nneewwlliinnee ((OOffff)) If set to OOnn, readline will undo all changes to history lines before returning when aacccceepptt--lliinnee is executed. By default, his- - tory lines may be modified and retain individual undo lists + tory lines may be modified and retain individual undo lists across calls to rreeaaddlliinnee. + sseeaarrcchh--iiggnnoorree--ccaassee ((OOffff)) + If set to OOnn, readline performs incremental and non-incremental + history list searches in a case-insensitive fashion. sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) This alters the default behavior of the completion functions. If set to OOnn, words which have more than one possible completion - cause the matches to be listed immediately instead of ringing + cause the matches to be listed immediately instead of ringing the bell. sshhooww--aallll--iiff--uunnmmooddiiffiieedd ((OOffff)) - This alters the default behavior of the completion functions in + This alters the default behavior of the completion functions in a fashion similar to sshhooww--aallll--iiff--aammbbiigguuoouuss. If set to OOnn, words which have more than one possible completion without any possi- ble partial completion (the possible completions don't share a @@ -3548,7 +3656,7 @@ RREEAADDLLIINNEE vvii--ccmmdd--mmooddee--ssttrriinngg ((((ccmmdd)))) If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is displayed immediately before the last line of the primary prompt - when vi editing mode is active and in command mode. The value + when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the \1 and \2 escapes to begin and end sequences of non- @@ -3559,35 +3667,35 @@ RREEAADDLLIINNEE displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and - control prefixes and backslash escape sequences is available. - Use the \1 and \2 escapes to begin and end sequences of non- - printing characters, which can be used to embed a terminal con- + control prefixes and backslash escape sequences is available. + Use the \1 and \2 escapes to begin and end sequences of non- + printing characters, which can be used to embed a terminal con- trol sequence into the mode string. vviissiibbllee--ssttaattss ((OOffff)) - If set to OOnn, a character denoting a file's type as reported by - _s_t_a_t(2) is appended to the filename when listing possible com- + If set to OOnn, a character denoting a file's type as reported by + _s_t_a_t(2) is appended to the filename when listing possible com- pletions. RReeaaddlliinnee CCoonnddiittiioonnaall CCoonnssttrruuccttss - Readline implements a facility similar in spirit to the conditional - compilation features of the C preprocessor which allows key bindings - and variable settings to be performed as the result of tests. There + Readline implements a facility similar in spirit to the conditional + compilation features of the C preprocessor which allows key bindings + and variable settings to be performed as the result of tests. There are four parser directives used. - $$iiff The $$iiff construct allows bindings to be made based on the edit- - ing mode, the terminal being used, or the application using - readline. The text of the test, after any comparison operator, - extends to the end of the line; unless otherwise noted, no - characters are required to isolate it. - - mmooddee The mmooddee== form of the $$iiff directive is used to test - whether readline is in emacs or vi mode. This may be - used in conjunction with the sseett kkeeyymmaapp command, for in- - stance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and - _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in + $$iiff The $$iiff construct allows bindings to be made based on the edit- + ing mode, the terminal being used, or the application using + readline. The text of the test, after any comparison operator, + extends to the end of the line; unless otherwise noted, no char- + acters are required to isolate it. + + mmooddee The mmooddee== form of the $$iiff directive is used to test + whether readline is in emacs or vi mode. This may be + used in conjunction with the sseett kkeeyymmaapp command, for in- + stance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and + _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in emacs mode. - tteerrmm The tteerrmm== form may be used to include terminal-specific + tteerrmm The tteerrmm== form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the == is tested against both the full name of the ter- @@ -3603,14 +3711,14 @@ RREEAADDLLIINNEE The version number supplied on the right side of the op- erator consists of a major version number, an optional decimal point, and an optional minor version (e.g., 77..11). - If the minor version is omitted, it is assumed to be 00. + If the minor version is omitted, it is assumed to be 00. The operator may be separated from the string vveerrssiioonn and from the version number argument by whitespace. - aapppplliiccaattiioonn - The aapppplliiccaattiioonn construct is used to include application- - specific settings. Each program using the readline li- - brary sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization + _a_p_p_l_i_c_a_t_i_o_n + The _a_p_p_l_i_c_a_t_i_o_n construct is used to include application- + specific settings. Each program using the readline li- + brary sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization file can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key @@ -3624,8 +3732,8 @@ RREEAADDLLIINNEE _v_a_r_i_a_b_l_e The _v_a_r_i_a_b_l_e construct provides simple equality tests for - readline variables and values. The permitted comparison - operators are _=, _=_=, and _!_=. The variable name must be + readline variables and values. The permitted comparison + operators are _=, _=_=, and _!_=. The variable name must be separated from the comparison operator by whitespace; the operator may be separated from the value on the right hand side by whitespace. Both string and boolean vari- @@ -3650,40 +3758,40 @@ RREEAADDLLIINNEE (see HHIISSTTOORRYY below) for lines containing a specified string. There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_t_a_l. - Incremental searches begin before the user has finished typing the - search string. As each character of the search string is typed, read- + Incremental searches begin before the user has finished typing the + search string. As each character of the search string is typed, read- line displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. The characters present in the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an incremental search. If that variable has not been assigned a value the - Escape and Control-J characters will terminate an incremental search. - Control-G will abort an incremental search and restore the original - line. When the search is terminated, the history entry containing the + Escape and Control-J characters will terminate an incremental search. + Control-G will abort an incremental search and restore the original + line. When the search is terminated, the history entry containing the search string becomes the current line. - To find other matching entries in the history list, type Control-S or - Control-R as appropriate. This will search backward or forward in the - history for the next entry matching the search string typed so far. - Any other key sequence bound to a readline command will terminate the - search and execute that command. For instance, a _n_e_w_l_i_n_e will termi- + To find other matching entries in the history list, type Control-S or + Control-R as appropriate. This will search backward or forward in the + history for the next entry matching the search string typed so far. + Any other key sequence bound to a readline command will terminate the + search and execute that command. For instance, a _n_e_w_l_i_n_e will termi- nate the search and accept the line, thereby executing the command from the history list. Readline remembers the last incremental search string. If two Control- - Rs are typed without any intervening characters defining a new search - string, any remembered search string is used. + Rs are typed without any intervening characters defining a new search + string, readline uses any remembered search string. - Non-incremental searches read the entire search string before starting - to search for matching history lines. The search string may be typed + Non-incremental searches read the entire search string before starting + to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line. RReeaaddlliinnee CCoommmmaanndd NNaammeess - The following is a list of the names of the commands and the default + The following is a list of the names of the commands and the default key sequences to which they are bound. Command names without an accom- panying key sequence are unbound by default. In the following descrip- - tions, _p_o_i_n_t refers to the current cursor position, and _m_a_r_k refers to - a cursor position saved by the sseett--mmaarrkk command. The text between the + tions, _p_o_i_n_t refers to the current cursor position, and _m_a_r_k refers to + a cursor position saved by the sseett--mmaarrkk command. The text between the point and mark is referred to as the _r_e_g_i_o_n. CCoommmmaannddss ffoorr MMoovviinngg @@ -3716,12 +3824,12 @@ RREEAADDLLIINNEE nneexxtt--ssccrreeeenn--lliinnee Attempt to move point to the same physical screen column on the next physical screen line. This will not have the desired effect - if the current readline line does not take up more than one - physical line or if the length of the current readline line is + if the current readline line does not take up more than one + physical line or if the length of the current readline line is not greater than the length of the prompt plus the screen width. cclleeaarr--ddiissppllaayy ((MM--CC--ll)) - Clear the screen and, if possible, the terminal's scrollback - buffer, then redraw the current line, leaving the current line + Clear the screen and, if possible, the terminal's scrollback + buffer, then redraw the current line, leaving the current line at the top of the screen. cclleeaarr--ssccrreeeenn ((CC--ll)) Clear the screen, then redraw the current line, leaving the cur- @@ -3733,8 +3841,8 @@ RREEAADDLLIINNEE CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) Accept the line regardless of where the cursor is. If this line - is non-empty, add it to the history list according to the state - of the HHIISSTTCCOONNTTRROOLL variable. If the line is a modified history + is non-empty, add it to the history list according to the state + of the HHIISSTTCCOONNTTRROOLL variable. If the line is a modified history line, then restore the history line to its original state. pprreevviioouuss--hhiissttoorryy ((CC--pp)) Fetch the previous command from the history list, moving back in @@ -3757,12 +3865,12 @@ RREEAADDLLIINNEE and make it the current line. Without an argument, move back to the first entry in the history list. rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) - Search backward starting at the current line and moving `up' - through the history as necessary. This is an incremental + Search backward starting at the current line and moving "up" + through the history as necessary. This is an incremental search. ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) - Search forward starting at the current line and moving `down' - through the history as necessary. This is an incremental + Search forward starting at the current line and moving "down" + through the history as necessary. This is an incremental search. nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) Search backward through the history starting at the current line @@ -3777,42 +3885,46 @@ RREEAADDLLIINNEE non-incremental search. hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd Search backward through the history for the string of characters - between the start of the current line and the point. This is a + between the start of the current line and the point. This is a non-incremental search. hhiissttoorryy--ssuubbssttrriinngg--sseeaarrcchh--bbaacckkwwaarrdd Search backward through the history for the string of characters between the start of the current line and the current cursor po- - sition (the _p_o_i_n_t). The search string may match anywhere in a + sition (the _p_o_i_n_t). The search string may match anywhere in a history line. This is a non-incremental search. hhiissttoorryy--ssuubbssttrriinngg--sseeaarrcchh--ffoorrwwaarrdd - Search forward through the history for the string of characters + Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-in- cremental search. yyaannkk--nntthh--aarrgg ((MM--CC--yy)) Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument _n, - insert the _nth word from the previous command (the words in the - previous command begin with word 0). A negative argument in- - serts the _nth word from the end of the previous command. Once - the argument _n is computed, the argument is extracted as if the + insert the _nth word from the previous command (the words in the + previous command begin with word 0). A negative argument in- + serts the _nth word from the end of the previous command. Once + the argument _n is computed, the argument is extracted as if the "!_n" history expansion had been specified. yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__)) - Insert the last argument to the previous command (the last word + Insert the last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yyaannkk--nntthh--aarrgg. Successive calls to yyaannkk--llaasstt--aarrgg move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive - calls determines the direction to move through the history. A - negative argument switches the direction through the history + calls determines the direction to move through the history. A + negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last word, as if the "!$" history expansion had been specified. sshheellll--eexxppaanndd--lliinnee ((MM--CC--ee)) - Expand the line as the shell does. This performs alias and his- - tory expansion as well as all of the shell word expansions. See - HHIISSTTOORRYY EEXXPPAANNSSIIOONN below for a description of history expansion. + Expand the line by performing shell word expansions. This per- + forms alias and history expansion, $$'_s_t_r_i_n_g' and $$"_s_t_r_i_n_g" quot- + ing, tilde expansion, parameter and variable expansion, arith- + metic expansion, command and process substitution, word split- + ting, and quote removal. An explicit argument suppresses com- + mand and process substitution. See HHIISSTTOORRYY EEXXPPAANNSSIIOONN below for + a description of history expansion. hhiissttoorryy--eexxppaanndd--lliinnee ((MM--^^)) Perform history expansion on the current line. See HHIISSTTOORRYY EEXX-- PPAANNSSIIOONN below for a description of history expansion. @@ -3821,23 +3933,23 @@ RREEAADDLLIINNEE space. See HHIISSTTOORRYY EEXXPPAANNSSIIOONN below for a description of history expansion. aalliiaass--eexxppaanndd--lliinnee - Perform alias expansion on the current line. See AALLIIAASSEESS above + Perform alias expansion on the current line. See AALLIIAASSEESS above for a description of alias expansion. hhiissttoorryy--aanndd--aalliiaass--eexxppaanndd--lliinnee Perform history and alias expansion on the current line. iinnsseerrtt--llaasstt--aarrgguummeenntt ((MM--..,, MM--__)) A synonym for yyaannkk--llaasstt--aarrgg. eeddiitt--aanndd--eexxeeccuuttee--ccoommmmaanndd ((CC--xx CC--ee)) - Invoke an editor on the current command line, and execute the + Invoke an editor on the current command line, and execute the result as shell commands. BBaasshh attempts to invoke $$VVIISSUUAALL, $$EEDD-- IITTOORR, and _e_m_a_c_s as the editor, in that order. CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt _e_n_d_-_o_f_-_f_i_l_e ((uussuuaallllyy CC--dd)) The character indicating end-of-file as set, for example, by - ``stty''. If this character is read when there are no charac- - ters on the line, and point is at the beginning of the line, - readline interprets it as the end of input and returns EEOOFF. + _s_t_t_y(1). If this character is read when there are no characters + on the line, and point is at the beginning of the line, readline + interprets it as the end of input and returns EEOOFF. ddeelleettee--cchhaarr ((CC--dd)) Delete the character at point. If this function is bound to the same character as the tty EEOOFF character, as CC--dd commonly is, see @@ -3850,26 +3962,26 @@ RREEAADDLLIINNEE the end of the line, in which case the character behind the cur- sor is deleted. qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) - Add the next character typed to the line verbatim. This is how + Add the next character typed to the line verbatim. This is how to insert characters like CC--qq, for example. ttaabb--iinnsseerrtt ((CC--vv TTAABB)) Insert a tab character. - sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......)) + sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ...)) Insert the character typed. ttrraannssppoossee--cchhaarrss ((CC--tt)) - Drag the character before point forward over the character at - point, moving point forward as well. If point is at the end of - the line, then this transposes the two characters before point. + Drag the character before point forward over the character at + point, moving point forward as well. If point is at the end of + the line, then this transposes the two characters before point. Negative arguments have no effect. ttrraannssppoossee--wwoorrddss ((MM--tt)) - Drag the word before point past the word after point, moving - point over that word as well. If point is at the end of the + Drag the word before point past the word after point, moving + point over that word as well. If point is at the end of the line, this transposes the last two words on the line. uuppccaassee--wwoorrdd ((MM--uu)) - Uppercase the current (or following) word. With a negative ar- + Uppercase the current (or following) word. With a negative ar- gument, uppercase the previous word, but do not move point. ddoowwnnccaassee--wwoorrdd ((MM--ll)) - Lowercase the current (or following) word. With a negative ar- + Lowercase the current (or following) word. With a negative ar- gument, lowercase the previous word, but do not move point. ccaappiittaalliizzee--wwoorrdd ((MM--cc)) Capitalize the current (or following) word. With a negative ar- @@ -3880,9 +3992,9 @@ RREEAADDLLIINNEE numeric argument, switches to insert mode. This command affects only eemmaaccss mode; vvii mode does overwrite differently. Each call to _r_e_a_d_l_i_n_e_(_) starts in insert mode. In overwrite mode, charac- - ters bound to sseellff--iinnsseerrtt replace the text at point rather than - pushing the text to the right. Characters bound to bbaacckk-- - wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a + ters bound to sseellff--iinnsseerrtt replace the text at point rather than + pushing the text to the right. Characters bound to bbaacckk-- + wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a space. By default, this command is unbound. KKiilllliinngg aanndd YYaannkkiinngg @@ -3891,31 +4003,31 @@ RREEAADDLLIINNEE bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) Kill backward to the beginning of the line. uunniixx--lliinnee--ddiissccaarrdd ((CC--uu)) - Kill backward from point to the beginning of the line. The + Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring. kkiillll--wwhhoollee--lliinnee - Kill all characters on the current line, no matter where point + Kill all characters on the current line, no matter where point is. kkiillll--wwoorrdd ((MM--dd)) - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the + Kill from point to the end of the current word, or if between + words, to the end of the next word. Word boundaries are the same as those used by ffoorrwwaarrdd--wwoorrdd. bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) - Kill the word behind point. Word boundaries are the same as + Kill the word behind point. Word boundaries are the same as those used by bbaacckkwwaarrdd--wwoorrdd. sshheellll--kkiillll--wwoorrdd - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the + Kill from point to the end of the current word, or if between + words, to the end of the next word. Word boundaries are the same as those used by sshheellll--ffoorrwwaarrdd--wwoorrdd. sshheellll--bbaacckkwwaarrdd--kkiillll--wwoorrdd - Kill the word behind point. Word boundaries are the same as + Kill the word behind point. Word boundaries are the same as those used by sshheellll--bbaacckkwwaarrdd--wwoorrdd. uunniixx--wwoorrdd--rruubboouutt ((CC--ww)) - Kill the word behind point, using white space as a word bound- + Kill the word behind point, using white space as a word bound- ary. The killed text is saved on the kill-ring. uunniixx--ffiilleennaammee--rruubboouutt - Kill the word behind point, using white space and the slash - character as the word boundaries. The killed text is saved on + Kill the word behind point, using white space and the slash + character as the word boundaries. The killed text is saved on the kill-ring. ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\)) Delete all spaces and tabs around point. @@ -3924,25 +4036,25 @@ RREEAADDLLIINNEE ccooppyy--rreeggiioonn--aass--kkiillll Copy the text in the region to the kill buffer. ccooppyy--bbaacckkwwaarrdd--wwoorrdd - Copy the word before point to the kill buffer. The word bound- + Copy the word before point to the kill buffer. The word bound- aries are the same as bbaacckkwwaarrdd--wwoorrdd. ccooppyy--ffoorrwwaarrdd--wwoorrdd - Copy the word following point to the kill buffer. The word + Copy the word following point to the kill buffer. The word boundaries are the same as ffoorrwwaarrdd--wwoorrdd. yyaannkk ((CC--yy)) Yank the top of the kill ring into the buffer at point. yyaannkk--ppoopp ((MM--yy)) - Rotate the kill ring, and yank the new top. Only works follow- + Rotate the kill ring, and yank the new top. Only works follow- ing yyaannkk or yyaannkk--ppoopp. NNuummeerriicc AArrgguummeennttss - ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) - Add this digit to the argument already accumulating, or start a + ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ...,, MM----)) + Add this digit to the argument already accumulating, or start a new argument. M-- starts a negative argument. uunniivveerrssaall--aarrgguummeenntt - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is fol- + This is another way to specify an argument. If this command is + followed by one or more digits, optionally with a leading minus + sign, those digits define the argument. If the command is fol- lowed by digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the nu- meric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is nei- @@ -3954,7 +4066,7 @@ RREEAADDLLIINNEE CCoommpplleettiinngg ccoommpplleettee ((TTAABB)) - Attempt to perform completion on the text before point. BBaasshh + Attempt to perform completion on the text before point. BBaasshh attempts completion treating the text as a variable (if the text begins with $$), username (if the text begins with ~~), hostname (if the text begins with @@), or command (including aliases and @@ -3963,25 +4075,25 @@ RREEAADDLLIINNEE ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??)) List the possible completions of the text before point. iinnsseerrtt--ccoommpplleettiioonnss ((MM--**)) - Insert all completions of the text before point that would have + Insert all completions of the text before point that would have been generated by ppoossssiibbllee--ccoommpplleettiioonnss. mmeennuu--ccoommpplleettee - Similar to ccoommpplleettee, but replaces the word to be completed with - a single match from the list of possible completions. Repeated - execution of mmeennuu--ccoommpplleettee steps through the list of possible - completions, inserting each match in turn. At the end of the + Similar to ccoommpplleettee, but replaces the word to be completed with + a single match from the list of possible completions. Repeated + execution of mmeennuu--ccoommpplleettee steps through the list of possible + completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of bbeellll--ssttyyllee) and the original text is restored. An argument of _n moves _n positions forward in the list of matches; a negative ar- gument may be used to move backward through the list. This com- mand is intended to be bound to TTAABB, but is unbound by default. mmeennuu--ccoommpplleettee--bbaacckkwwaarrdd - Identical to mmeennuu--ccoommpplleettee, but moves backward through the list - of possible completions, as if mmeennuu--ccoommpplleettee had been given a + Identical to mmeennuu--ccoommpplleettee, but moves backward through the list + of possible completions, as if mmeennuu--ccoommpplleettee had been given a negative argument. This command is unbound by default. ddeelleettee--cchhaarr--oorr--lliisstt - Deletes the character under the cursor if not at the beginning - or end of the line (like ddeelleettee--cchhaarr). If at the end of the + Deletes the character under the cursor if not at the beginning + or end of the line (like ddeelleettee--cchhaarr). If at the end of the line, behaves identically to ppoossssiibbllee--ccoommpplleettiioonnss. This command is unbound by default. ccoommpplleettee--ffiilleennaammee ((MM--//)) @@ -3990,7 +4102,7 @@ RREEAADDLLIINNEE List the possible completions of the text before point, treating it as a filename. ccoommpplleettee--uusseerrnnaammee ((MM--~~)) - Attempt completion on the text before point, treating it as a + Attempt completion on the text before point, treating it as a username. ppoossssiibbllee--uusseerrnnaammee--ccoommpplleettiioonnss ((CC--xx ~~)) List the possible completions of the text before point, treating @@ -4002,7 +4114,7 @@ RREEAADDLLIINNEE List the possible completions of the text before point, treating it as a shell variable. ccoommpplleettee--hhoossttnnaammee ((MM--@@)) - Attempt completion on the text before point, treating it as a + Attempt completion on the text before point, treating it as a hostname. ppoossssiibbllee--hhoossttnnaammee--ccoommpplleettiioonnss ((CC--xx @@)) List the possible completions of the text before point, treating @@ -4016,21 +4128,21 @@ RREEAADDLLIINNEE List the possible completions of the text before point, treating it as a command name. ddyynnaammiicc--ccoommpplleettee--hhiissttoorryy ((MM--TTAABB)) - Attempt completion on the text before point, comparing the text - against lines from the history list for possible completion + Attempt completion on the text before point, comparing the text + against lines from the history list for possible completion matches. ddaabbbbrreevv--eexxppaanndd - Attempt menu completion on the text before point, comparing the + Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches. ccoommpplleettee--iinnttoo--bbrraacceess ((MM--{{)) Perform filename completion and insert the list of possible com- - pletions enclosed within braces so the list is available to the + pletions enclosed within braces so the list is available to the shell (see BBrraaccee EExxppaannssiioonn above). KKeeyybbooaarrdd MMaaccrrooss ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) - Begin saving the characters typed into the current keyboard + Begin saving the characters typed into the current keyboard macro. eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) Stop saving the characters typed into the current keyboard macro @@ -4049,7 +4161,7 @@ RREEAADDLLIINNEE aabboorrtt ((CC--gg)) Abort the current editing command and ring the terminal's bell (subject to the setting of bbeellll--ssttyyllee). - ddoo--lloowweerrccaassee--vveerrssiioonn ((MM--AA,, MM--BB,, MM--_x,, ......)) + ddoo--lloowweerrccaassee--vveerrssiioonn ((MM--AA,, MM--BB,, MM--_x,, ...)) If the metafied character _x is uppercase, run the command that is bound to the corresponding metafied lowercase character. The behavior is undefined if _x is already lowercase. @@ -4058,17 +4170,17 @@ RREEAADDLLIINNEE uunnddoo ((CC--__,, CC--xx CC--uu)) Incremental undo, separately remembered for each line. rreevveerrtt--lliinnee ((MM--rr)) - Undo all changes made to this line. This is like executing the - uunnddoo command enough times to return the line to its initial + Undo all changes made to this line. This is like executing the + uunnddoo command enough times to return the line to its initial state. ttiillddee--eexxppaanndd ((MM--&&)) Perform tilde expansion on the current word. sseett--mmaarrkk ((CC--@@,, MM--<>)) - Set the mark to the point. If a numeric argument is supplied, + Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx)) - Swap the point with the mark. The current cursor position is - set to the saved position, and the old cursor position is saved + Swap the point with the mark. The current cursor position is + set to the saved position, and the old cursor position is saved as the mark. cchhaarraacctteerr--sseeaarrcchh ((CC--]])) A character is read and point is moved to the next occurrence of @@ -4082,55 +4194,55 @@ RREEAADDLLIINNEE Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this - sequence is bound to "\[", keys producing such sequences will - have no effect unless explicitly bound to a readline command, - instead of inserting stray characters into the editing buffer. + sequence is bound to "\[", keys producing such sequences will + have no effect unless explicitly bound to a readline command, + instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. iinnsseerrtt--ccoommmmeenntt ((MM--##)) - Without a numeric argument, the value of the readline ccoomm-- - mmeenntt--bbeeggiinn variable is inserted at the beginning of the current + Without a numeric argument, the value of the readline ccoomm-- + mmeenntt--bbeeggiinn variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of ccoommmmeenntt--bbeeggiinn, the value is inserted, other- wise the characters in ccoommmmeenntt--bbeeggiinn are deleted from the begin- - ning of the line. In either case, the line is accepted as if a - newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn - causes this command to make the current line a shell comment. - If a numeric argument causes the comment character to be re- + ning of the line. In either case, the line is accepted as if a + newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn + causes this command to make the current line a shell comment. + If a numeric argument causes the comment character to be re- moved, the line will be executed by the shell. ssppeellll--ccoorrrreecctt--wwoorrdd ((CC--xx ss)) - Perform spelling correction on the current word, treating it as - a directory or filename, in the same way as the ccddssppeellll shell - option. Word boundaries are the same as those used by + Perform spelling correction on the current word, treating it as + a directory or filename, in the same way as the ccddssppeellll shell + option. Word boundaries are the same as those used by sshheellll--ffoorrwwaarrdd--wwoorrdd. gglloobb--ccoommpplleettee--wwoorrdd ((MM--gg)) - The word before point is treated as a pattern for pathname ex- - pansion, with an asterisk implicitly appended. This pattern is - used to generate a list of matching filenames for possible com- + The word before point is treated as a pattern for pathname ex- + pansion, with an asterisk implicitly appended. This pattern is + used to generate a list of matching filenames for possible com- pletions. gglloobb--eexxppaanndd--wwoorrdd ((CC--xx **)) - The word before point is treated as a pattern for pathname ex- + The word before point is treated as a pattern for pathname ex- pansion, and the list of matching filenames is inserted, replac- ing the word. If a numeric argument is supplied, an asterisk is appended before pathname expansion. gglloobb--lliisstt--eexxppaannssiioonnss ((CC--xx gg)) - The list of expansions that would have been generated by - gglloobb--eexxppaanndd--wwoorrdd is displayed, and the line is redrawn. If a - numeric argument is supplied, an asterisk is appended before + The list of expansions that would have been generated by + gglloobb--eexxppaanndd--wwoorrdd is displayed, and the line is redrawn. If a + numeric argument is supplied, an asterisk is appended before pathname expansion. dduummpp--ffuunnccttiioonnss - Print all of the functions and their key bindings to the read- + Print all of the functions and their key bindings to the read- line output stream. If a numeric argument is supplied, the out- put is formatted in such a way that it can be made part of an _i_n_p_u_t_r_c file. dduummpp--vvaarriiaabblleess Print all of the settable readline variables and their values to - the readline output stream. If a numeric argument is supplied, - the output is formatted in such a way that it can be made part + the readline output stream. If a numeric argument is supplied, + the output is formatted in such a way that it can be made part of an _i_n_p_u_t_r_c file. dduummpp--mmaaccrrooss - Print all of the readline key sequences bound to macros and the - strings they output. If a numeric argument is supplied, the + Print all of the readline key sequences bound to macros and the + 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 _i_n_p_u_t_r_c file. ddiissppllaayy--sshheellll--vveerrssiioonn ((CC--xx CC--vv)) @@ -4139,13 +4251,13 @@ RREEAADDLLIINNEE PPrrooggrraammmmaabbllee CCoommpplleettiioonn When word completion is attempted for an argument to a command for which a completion specification (a _c_o_m_p_s_p_e_c) has been defined using - the ccoommpplleettee builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below), the program- - mable completion facilities are invoked. + the ccoommpplleettee builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below), the programma- + ble completion facilities are invoked. - First, the command name is identified. If the command word is the - empty string (completion attempted at the beginning of an empty line), - any compspec defined with the --EE option to ccoommpplleettee is used. If a - compspec has been defined for that command, the compspec is used to + First, the command name is identified. If the command word is the + empty string (completion attempted at the beginning of an empty line), + any compspec defined with the --EE option to ccoommpplleettee is used. If a + compspec has been defined for that command, the compspec is used to generate the list of possible completions for the word. If the command word is a full pathname, a compspec for the full pathname is searched for first. If no compspec is found for the full pathname, an attempt @@ -4166,15 +4278,15 @@ RREEAADDLLIINNEE shell variable FFIIGGNNOORREE is used to filter the matches. Any completions specified by a pathname expansion pattern to the --GG op- - tion are generated next. The words generated by the pattern need not - match the word being completed. The GGLLOOBBIIGGNNOORREE shell variable is not + tion are generated next. The words generated by the pattern need not + match the word being completed. The GGLLOOBBIIGGNNOORREE shell variable is not used to filter the matches, but the FFIIGGNNOORREE variable is used. - Next, the string specified as the argument to the --WW option is consid- - ered. The string is first split using the characters in the IIFFSS spe- - cial variable as delimiters. Shell quoting is honored. Each word is - then expanded using brace expansion, tilde expansion, parameter and - variable expansion, command substitution, and arithmetic expansion, as + Next, the string specified as the argument to the --WW option is consid- + ered. The string is first split using the characters in the IIFFSS spe- + cial variable as delimiters. Shell quoting is honored. Each word is + then expanded using brace expansion, tilde expansion, parameter and + variable expansion, command substitution, and arithmetic expansion, as described above under EEXXPPAANNSSIIOONN. The results are split using the rules described above under WWoorrdd SSpplliittttiinngg. The results of the expansion are prefix-matched against the word being completed, and the matching words @@ -4210,19 +4322,19 @@ RREEAADDLLIINNEE with a backslash; the backslash is removed before attempting a match. Any completion that matches the pattern will be removed from the list. A leading !! negates the pattern; in this case any completion not match- - ing the pattern will be removed. If the nnooccaasseemmaattcchh shell option is - enabled, the match is performed without regard to the case of alpha- + ing the pattern will be removed. If the nnooccaasseemmaattcchh shell option is + enabled, the match is performed without regard to the case of alpha- betic characters. Finally, any prefix and suffix specified with the --PP and --SS options are added to each member of the completion list, and the result is returned to the readline completion code as the list of possible completions. - If the previously-applied actions do not generate any matches, and the - --oo ddiirrnnaammeess option was supplied to ccoommpplleettee when the compspec was de- + If the previously-applied actions do not generate any matches, and the + --oo ddiirrnnaammeess option was supplied to ccoommpplleettee when the compspec was de- fined, directory name completion is attempted. - If the --oo pplluussddiirrss option was supplied to ccoommpplleettee when the compspec + If the --oo pplluussddiirrss option was supplied to ccoommpplleettee when the compspec was defined, directory name completion is attempted and any matches are added to the results of the other actions. @@ -4232,47 +4344,47 @@ RREEAADDLLIINNEE filename completion is disabled. If the --oo bbaasshhddeeffaauulltt option was sup- plied to ccoommpplleettee when the compspec was defined, the bbaasshh default com- pletions are attempted if the compspec generates no matches. If the --oo - ddeeffaauulltt option was supplied to ccoommpplleettee when the compspec was defined, - readline's default completion will be performed if the compspec (and, + ddeeffaauulltt option was supplied to ccoommpplleettee when the compspec was defined, + readline's default completion will be performed if the compspec (and, if attempted, the default bbaasshh completions) generate no matches. - When a compspec indicates that directory name completion is desired, - the programmable completion functions force readline to append a slash - to completed names which are symbolic links to directories, subject to - the value of the mmaarrkk--ddiirreeccttoorriieess readline variable, regardless of the + When a compspec indicates that directory name completion is desired, + the programmable completion functions force readline to append a slash + to completed names which are symbolic links to directories, subject to + the value of the mmaarrkk--ddiirreeccttoorriieess readline variable, regardless of the setting of the mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess readline variable. - There is some support for dynamically modifying completions. This is - most useful when used in combination with a default completion speci- - fied with ccoommpplleettee --DD. It's possible for shell functions executed as - completion handlers to indicate that completion should be retried by - returning an exit status of 124. If a shell function returns 124, and + There is some support for dynamically modifying completions. This is + most useful when used in combination with a default completion speci- + fied with ccoommpplleettee --DD. It's possible for shell functions executed as + completion handlers to indicate that completion should be retried by + returning an exit status of 124. If a shell function returns 124, and changes the compspec associated with the command on which completion is being attempted (supplied as the first argument when the function is executed), programmable completion restarts from the beginning, with an - attempt to find a new compspec for that command. This allows a set of - completions to be built dynamically as completion is attempted, rather + attempt to find a new compspec for that command. This allows a set of + completions to be built dynamically as completion is attempted, rather than being loaded all at once. - For instance, assuming that there is a library of compspecs, each kept - in a file corresponding to the name of the command, the following de- + For instance, assuming that there is a library of compspecs, each kept + in a file corresponding to the name of the command, the following de- fault completion function would load completions dynamically: - - _completion_loader() - { - . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 - } - complete -D -F _completion_loader -o bashdefault -o default - + _completion_loader() + { + . "/etc/bash_completion.d/$1.sh" \ + >/dev/null 2>&1 && return 124 + } + complete -D -F _completion_loader \ + -o bashdefault -o default HHIISSTTOORRYY - When the --oo hhiissttoorryy option to the sseett builtin is enabled, the shell + When the --oo hhiissttoorryy option to the sseett builtin is enabled, the shell provides access to the _c_o_m_m_a_n_d _h_i_s_t_o_r_y, the list of commands previously typed. The value of the HHIISSTTSSIIZZEE variable is used as the number of commands to save in a history list. The text of the last HHIISSTTSSIIZZEE com- - mands (default 500) is saved. The shell stores each command in the - history list prior to parameter and variable expansion (see EEXXPPAANNSSIIOONN - above) but after history expansion is performed, subject to the values + mands (default 500) is saved. The shell stores each command in the + history list prior to parameter and variable expansion (see EEXXPPAANNSSIIOONN + above) but after history expansion is performed, subject to the values of the shell variables HHIISSTTIIGGNNOORREE and HHIISSTTCCOONNTTRROOLL. On startup, the history is initialized from the file named by the vari- @@ -4289,38 +4401,38 @@ HHIISSTTOORRYY history list to $$HHIISSTTFFIILLEE. If the hhiissttaappppeenndd shell option is enabled (see the description of sshhoopptt under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below), the lines are appended to the history file, otherwise the history file is - overwritten. If HHIISSTTFFIILLEE is unset, or if the history file is un- - writable, the history is not saved. If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is - set, time stamps are written to the history file, marked with the his- - tory comment character, so they may be preserved across shell sessions. - This uses the history comment character to distinguish timestamps from - other history lines. After saving the history, the history file is - truncated to contain no more than HHIISSTTFFIILLEESSIIZZEE lines. If HHIISSTTFFIILLEESSIIZZEE - is unset, or set to null, a non-numeric value, or a numeric value less - than zero, the history file is not truncated. + overwritten. If HHIISSTTFFIILLEE is unset or null, or if the history file is + unwritable, the history is not saved. If the HHIISSTTTTIIMMEEFFOORRMMAATT variable + is set, time stamps are written to the history file, marked with the + history comment character, so they may be preserved across shell ses- + sions. This uses the history comment character to distinguish time- + stamps from other history lines. After saving the history, the history + file is truncated to contain no more than HHIISSTTFFIILLEESSIIZZEE lines. If HHIISSTT-- + FFIILLEESSIIZZEE is unset, or set to null, a non-numeric value, or a numeric + value less than zero, the history file is not truncated. The builtin command ffcc (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) may be used to list or edit and re-execute a portion of the history list. The hhiiss-- - ttoorryy builtin may be used to display or modify the history list and ma- - nipulate the history file. When using command-line editing, search - commands are available in each editing mode that provide access to the + ttoorryy builtin may be used to display or modify the history list and ma- + nipulate the history file. When using command-line editing, search + commands are available in each editing mode that provide access to the history list. - The shell allows control over which commands are saved on the history - list. The HHIISSTTCCOONNTTRROOLL and HHIISSTTIIGGNNOORREE variables may be set to cause the + The shell allows control over which commands are saved on the history + list. The HHIISSTTCCOONNTTRROOLL and HHIISSTTIIGGNNOORREE variables are used to cause the shell to save only a subset of the commands entered. The ccmmddhhiisstt shell option, if enabled, causes the shell to attempt to save each line of a multi-line command in the same history entry, adding semicolons where necessary to preserve syntactic correctness. The lliitthhiisstt shell option causes the shell to save the command with embedded newlines instead of semicolons. See the description of the sshhoopptt builtin below under SSHHEELLLL - BBUUIILLTTIINN CCOOMMMMAANNDDSS for information on setting and unsetting shell op- + BBUUIILLTTIINN CCOOMMMMAANNDDSS for information on setting and unsetting shell op- tions. HHIISSTTOORRYY EEXXPPAANNSSIIOONN - The shell supports a history expansion feature that is similar to the - history expansion in ccsshh. This section describes what syntax features - are available. This feature is enabled by default for interactive + The shell supports a history expansion feature that is similar to the + history expansion in ccsshh. This section describes what syntax features + are available. This feature is enabled by default for interactive shells, and can be disabled using the ++HH option to the sseett builtin com- mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). Non-interactive shells do not perform history expansion by default. @@ -4330,27 +4442,41 @@ HHIISSTTOORRYY EEXXPPAANNSSIIOONN previous command into the current input line, or fix errors in previous commands quickly. - History expansion is performed immediately after a complete line is - read, before the shell breaks it into words, and is performed on each - line individually without taking quoting on previous lines into ac- - count. It takes place in two parts. The first is to determine which - line from the history list to use during substitution. The second is - to select portions of that line for inclusion into the current one. - The line selected from the history is the _e_v_e_n_t, and the portions of - that line that are acted upon are _w_o_r_d_s. Various _m_o_d_i_f_i_e_r_s are avail- - able to manipulate the selected words. The line is broken into words - in the same fashion as when reading input, so that several _m_e_t_a_c_h_a_r_a_c_- - _t_e_r-separated words surrounded by quotes are considered one word. His- - tory expansions are introduced by the appearance of the history expan- - sion character, which is !! by default. Only backslash (\\) and single - quotes can quote the history expansion character, but the history ex- - pansion character is also treated as quoted if it immediately precedes - the closing double quote in a double-quoted string. - - Several characters inhibit history expansion if found immediately fol- - lowing the history expansion character, even if it is unquoted: space, - tab, newline, carriage return, and ==. If the eexxttgglloobb shell option is - enabled, (( will also inhibit expansion. + History expansion is performed immediately after a complete line is + read, before the shell breaks it into words, and is performed on each + line individually without taking quoting on previous lines into ac- + count. It takes place in two parts. The first is to determine which + line from the history list to use during substitution. The second is + to select portions of that line for inclusion into the current one. + The line selected from the history is the _e_v_e_n_t, and the portions of + that line that are acted upon are _w_o_r_d_s. The line is broken into words + in the same fashion as when reading input, so that several _m_e_t_a_c_h_a_r_a_c_- + _t_e_r-separated words surrounded by quotes are considered one word. The + _e_v_e_n_t _d_e_s_i_g_n_a_t_o_r selects the event, the optional _w_o_r_d _d_e_s_i_g_n_a_t_o_r se- + lects words from the event, and various optional _m_o_d_i_f_i_e_r_s are avail- + able to manipulate the selected words. + + History expansions are introduced by the appearance of the history ex- + pansion character, which is !! by default. History expansions may ap- + pear anywhere in the input, but do not nest. + + Only backslash (\\) and single quotes can quote the history expansion + character, but the history expansion character is also treated as + quoted if it immediately precedes the closing double quote in a double- + quoted string. + + Several characters inhibit history expansion if found immediately fol- + lowing the history expansion character, even if it is unquoted: space, + tab, newline, carriage return, ==, and the other shell metacharacters + defined above. + + There is a special abbreviation for substitution, active when the _q_u_i_c_k + _s_u_b_s_t_i_t_u_t_i_o_n character (described above under hhiissttcchhaarrss) is the first + character on the line. It selects the previous history entry, using an + event designator equivalent to !!!!, and substitutes one string for an- + other in that line. It is described below under EEvveenntt DDeessiiggnnaattoorrss. + This is the only history expansion that does not begin with the history + expansion character. Several shell options settable with the sshhoopptt builtin may be used to tailor the behavior of history expansion. If the hhiissttvveerriiffyy shell op- @@ -4358,30 +4484,33 @@ HHIISSTTOORRYY EEXXPPAANNSSIIOONN rreeaaddlliinnee is being used, history substitutions are not immediately passed to the shell parser. Instead, the expanded line is reloaded into the rreeaaddlliinnee editing buffer for further modification. If rreeaaddlliinnee - is being used, and the hhiissttrreeeeddiitt shell option is enabled, a failed - history substitution will be reloaded into the rreeaaddlliinnee editing buffer - for correction. The --pp option to the hhiissttoorryy builtin command may be - used to see what a history expansion will do before using it. The --ss + is being used, and the hhiissttrreeeeddiitt shell option is enabled, a failed + history substitution will be reloaded into the rreeaaddlliinnee editing buffer + for correction. The --pp option to the hhiissttoorryy builtin command may be + used to see what a history expansion will do before using it. The --ss option to the hhiissttoorryy builtin may be used to add commands to the end of the history list without actually executing them, so that they are available for subsequent recall. The shell allows control of the various characters used by the history expansion mechanism (see the description of hhiissttcchhaarrss above under SShheellll - VVaarriiaabblleess). The shell uses the history comment character to mark his- + VVaarriiaabblleess). The shell uses the history comment character to mark his- tory timestamps when writing the history file. EEvveenntt DDeessiiggnnaattoorrss - An event designator is a reference to a command line entry in the his- - tory list. Unless the reference is absolute, events are relative to - the current position in the history list. + An event designator is a reference to a command line entry in the his- + tory list. The event designator consists of the portion of the word + beginning with the history expansion character and ending with the word + designator if present, or the end of the word. Unless the reference is + absolute, events are relative to the current position in the history + list. !! Start a history substitution, except when followed by a bbllaannkk, newline, carriage return, = or ( (when the eexxttgglloobb shell option is enabled using the sshhoopptt builtin). !!_n Refer to command line _n. !!--_n Refer to the current command minus _n. - !!!! Refer to the previous command. This is a synonym for `!-1'. + !!!! Refer to the previous command. This is a synonym for "!-1". !!_s_t_r_i_n_g Refer to the most recent command preceding the current position in the history list starting with _s_t_r_i_n_g. @@ -4393,7 +4522,7 @@ HHIISSTTOORRYY EEXXPPAANNSSIIOONN used; it is an error if there is no previous search string. ^^_s_t_r_i_n_g_1^^_s_t_r_i_n_g_2^^ Quick substitution. Repeat the previous command, replacing - _s_t_r_i_n_g_1 with _s_t_r_i_n_g_2. Equivalent to ``!!:s^_s_t_r_i_n_g_1^_s_t_r_i_n_g_2^'' + _s_t_r_i_n_g_1 with _s_t_r_i_n_g_2. Equivalent to "!!:s^_s_t_r_i_n_g_1^_s_t_r_i_n_g_2^" (see MMooddiiffiieerrss below). !!## The entire command line typed so far. @@ -4411,23 +4540,23 @@ HHIISSTTOORRYY EEXXPPAANNSSIIOONN ^^ The first argument. That is, word 1. $$ The last word. This is usually the last argument, but will ex- pand to the zeroth word if there is only one word in the line. - %% The first word matched by the most recent `?_s_t_r_i_n_g?' search, if - the search string begins with a character that is part of a + %% The first word matched by the most recent "?_s_t_r_i_n_g?'" search, + if the search string begins with a character that is part of a word. - _x--_y A range of words; `-_y' abbreviates `0-_y'. - ** All of the words but the zeroth. This is a synonym for `_1_-_$'. + _x--_y A range of words; "-_y" abbreviates "0-_y". + ** All of the words but the zeroth. This is a synonym for "_1_-_$". It is not an error to use ** if there is just one word in the event; the empty string is returned in that case. xx** Abbreviates _x_-_$. xx-- Abbreviates _x_-_$ like xx**, but omits the last word. If xx is miss- ing, it defaults to 0. - If a word designator is supplied without an event specification, the + If a word designator is supplied without an event specification, the previous command is used as the event. MMooddiiffiieerrss - After the optional word designator, there may appear a sequence of one - or more of the following modifiers, each preceded by a `:'. These mod- + After the optional word designator, there may appear a sequence of one + or more of the following modifiers, each preceded by a ":". These mod- ify, or edit, the word or words selected from the history event. hh Remove a trailing filename component, leaving only the head. @@ -4442,20 +4571,20 @@ HHIISSTTOORRYY EEXXPPAANNSSIIOONN ss//_o_l_d//_n_e_w// Substitute _n_e_w for the first occurrence of _o_l_d in the event line. Any character may be used as the delimiter in place of /. - The final delimiter is optional if it is the last character of + The final delimiter is optional if it is the last character of the event line. The delimiter may be quoted in _o_l_d and _n_e_w with a single backslash. If & appears in _n_e_w, it is replaced by _o_l_d. - A single backslash will quote the &. If _o_l_d is null, it is set - to the last _o_l_d substituted, or, if no previous history substi- - tutions took place, the last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]] search. + A single backslash will quote the &. If _o_l_d is null, it is set + to the last _o_l_d substituted, or, if no previous history substi- + tutions took place, the last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]] search. If _n_e_w is null, each matching _o_l_d is deleted. && Repeat the previous substitution. gg Cause changes to be applied over the entire event line. This is - used in conjunction with `::ss' (e.g., `::ggss//_o_l_d//_n_e_w//') or `::&&'. - If used with `::ss', any delimiter can be used in place of /, and + used in conjunction with "::ss" (e.g., "::ggss//_o_l_d//_n_e_w//") or "::&&". + If used with "::ss", any delimiter can be used in place of /, and the final delimiter is optional if it is the last character of the event line. An aa may be used as a synonym for gg. - GG Apply the following `ss' or `&&' modifier once to each word in the + GG Apply the following "ss" or "&&" modifier once to each word in the event line. SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS @@ -4468,38 +4597,39 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS are not specified as accepting options interpret arguments beginning with -- as invalid options and require ---- to prevent this interpreta- tion. + :: [_a_r_g_u_m_e_n_t_s] No effect; the command does nothing beyond expanding _a_r_g_u_m_e_n_t_s and performing any specified redirections. The return status is zero. - .. _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] + .. _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] ssoouurrccee _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] Read and execute commands from _f_i_l_e_n_a_m_e in the current shell en- vironment and return the exit status of the last command exe- cuted from _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e does not contain a slash, filenames in PPAATTHH are used to find the directory containing _f_i_l_e_n_a_m_e, but _f_i_l_e_n_a_m_e does not need to be executable. The file - searched for in PPAATTHH need not be executable. When bbaasshh is not - in _p_o_s_i_x _m_o_d_e, it searches the current directory if no file is - found in PPAATTHH. If the ssoouurrcceeppaatthh option to the sshhoopptt builtin - command is turned off, the PPAATTHH is not searched. If any _a_r_g_u_- - _m_e_n_t_s are supplied, they become the positional parameters when - _f_i_l_e_n_a_m_e is executed. Otherwise the positional parameters are - unchanged. If the --TT option is enabled, .. inherits any trap on + searched for in PPAATTHH need not be executable. When bbaasshh is not + in _p_o_s_i_x _m_o_d_e, it searches the current directory if no file is + found in PPAATTHH. If the ssoouurrcceeppaatthh option to the sshhoopptt builtin + command is turned off, the PPAATTHH is not searched. If any _a_r_g_u_- + _m_e_n_t_s are supplied, they become the positional parameters when + _f_i_l_e_n_a_m_e is executed. Otherwise the positional parameters are + unchanged. If the --TT option is enabled, .. inherits any trap on DDEEBBUUGG; if it is not, any DDEEBBUUGG trap string is saved and restored around the call to .., and .. unsets the DDEEBBUUGG trap while it exe- cutes. If --TT is not set, and the sourced file changes the DDEEBBUUGG - trap, the new value is retained when .. completes. The return - status is the status of the last command exited within the + trap, the new value is retained when .. completes. The return + status is the status of the last command exited within the script (0 if no commands are executed), and false if _f_i_l_e_n_a_m_e is not found or cannot be read. aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] AAlliiaass with no arguments or with the --pp option prints the list of - aliases in the form aalliiaass _n_a_m_e=_v_a_l_u_e on standard output. When - arguments are supplied, an alias is defined for each _n_a_m_e whose - _v_a_l_u_e is given. A trailing space in _v_a_l_u_e causes the next word + aliases in the form aalliiaass _n_a_m_e=_v_a_l_u_e on standard output. When + arguments are supplied, an alias is defined for each _n_a_m_e whose + _v_a_l_u_e is given. A trailing space in _v_a_l_u_e causes the next word to be checked for alias substitution when the alias is expanded. For each _n_a_m_e in the argument list for which no _v_a_l_u_e is sup- plied, the name and value of the alias is printed. AAlliiaass re- @@ -4509,42 +4639,45 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS bbgg [_j_o_b_s_p_e_c ...] Resume each suspended job _j_o_b_s_p_e_c in the background, as if it had been started with &&. 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. bbgg _j_o_b_s_p_e_c returns 0 unless - run when job control is disabled or, when run with job control - enabled, any specified _j_o_b_s_p_e_c was not found or was started + notion of the _c_u_r_r_e_n_t _j_o_b is used. bbgg _j_o_b_s_p_e_c returns 0 unless + run when job control is disabled or, when run with job control + enabled, any specified _j_o_b_s_p_e_c was not found or was started without job control. bbiinndd [--mm _k_e_y_m_a_p] [--llppssvvPPSSVVXX] bbiinndd [--mm _k_e_y_m_a_p] [--qq _f_u_n_c_t_i_o_n] [--uu _f_u_n_c_t_i_o_n] [--rr _k_e_y_s_e_q] bbiinndd [--mm _k_e_y_m_a_p] --ff _f_i_l_e_n_a_m_e - bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q:_s_h_e_l_l_-_c_o_m_m_a_n_d + bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q[:] _s_h_e_l_l_-_c_o_m_m_a_n_d bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d_-_l_i_n_e - Display current rreeaaddlliinnee key and function bindings, bind a key - sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee + Display current rreeaaddlliinnee key and function bindings, bind a key + sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee variable. Each non-option argument is a command as it would ap- pear in a rreeaaddlliinnee initialization file such as _._i_n_p_u_t_r_c, but each binding or command must be passed as a separate argument; - e.g., '"\C-x\C-r": re-read-init-file'. Options, if supplied, - have the following meanings: + e.g., '"\C-x\C-r": re-read-init-file'. In the following de- + scriptions, output available to be re-read is formatted as com- + mands that would appear in a rreeaaddlliinnee initialization file or + that would be supplied as individual arguments to a bbiinndd com- + mand. Options, if supplied, have the following meanings: --mm _k_e_y_m_a_p Use _k_e_y_m_a_p as the keymap to be affected by the subsequent bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_- - _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, - and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e - is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- + _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, + and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e + is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- _d_a_r_d. --ll List the names of all rreeaaddlliinnee functions. - --pp Display rreeaaddlliinnee function names and bindings in such a + --pp Display rreeaaddlliinnee function names and bindings in such a way that they can be re-read. --PP List current rreeaaddlliinnee function names and bindings. - --ss Display rreeaaddlliinnee key sequences bound to macros and the - strings they output in such a way that they can be re- + --ss Display rreeaaddlliinnee key sequences bound to macros and the + strings they output in such a way that they can be re- read. - --SS Display rreeaaddlliinnee key sequences bound to macros and the + --SS Display rreeaaddlliinnee key sequences bound to macros and the strings they output. - --vv Display rreeaaddlliinnee variable names and values in such a way + --vv Display rreeaaddlliinnee variable names and values in such a way that they can be re-read. --VV List current rreeaaddlliinnee variable names and values. --ff _f_i_l_e_n_a_m_e @@ -4555,39 +4688,48 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS Unbind all keys bound to the named _f_u_n_c_t_i_o_n. --rr _k_e_y_s_e_q Remove any current binding for _k_e_y_s_e_q. - --xx _k_e_y_s_e_q::_s_h_e_l_l_-_c_o_m_m_a_n_d + --xx _k_e_y_s_e_q[[:: ]]_s_h_e_l_l_-_c_o_m_m_a_n_d Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is en- - tered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets - the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- - lliinnee line buffer and the RREEAADDLLIINNEE__PPOOIINNTT and RREEAADDLLIINNEE__MMAARRKK - variables to the current location of the insertion point - and the saved insertion point (the mark), respectively. - The shell assigns any numeric argument the user supplied - to the RREEAADDLLIINNEE__AARRGGUUMMEENNTT variable. If there was no argu- - ment, that variable is not set. If the executed command - changes the value of any of RREEAADDLLIINNEE__LLIINNEE, RREEAADD-- - LLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, those new values will be - reflected in the editing state. + tered. The separator between _k_e_y_s_e_q and _s_h_e_l_l_-_c_o_m_m_a_n_d is + either whitespace or a colon optionally followed by + whitespace. If the separator is whitespace, _s_h_e_l_l_-_c_o_m_- + _m_a_n_d must be enclosed in double quotes and rreeaaddlliinnee ex- + pands any of its special backslash-escapes in _s_h_e_l_l_-_c_o_m_- + _m_a_n_d before saving it. If the separator is a colon, any + enclosing double quotes are optional, and rreeaaddlliinnee does + not expand the command string before saving it. Since + the entire key binding expression must be a single argu- + ment, it should be enclosed in quotes. When _s_h_e_l_l_-_c_o_m_- + _m_a_n_d is executed, the shell sets the RREEAADDLLIINNEE__LLIINNEE vari- + able to the contents of the rreeaaddlliinnee line buffer and the + RREEAADDLLIINNEE__PPOOIINNTT and RREEAADDLLIINNEE__MMAARRKK variables to the current + location of the insertion point and the saved insertion + point (the mark), respectively. The shell assigns any + numeric argument the user supplied to the RREEAADDLLIINNEE__AARRGGUU-- + MMEENNTT variable. If there was no argument, that variable + is not set. If the executed command changes the value of + any of RREEAADDLLIINNEE__LLIINNEE, RREEAADDLLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, + those new values will be reflected in the editing state. --XX List all key sequences bound to shell commands and the associated commands in a format that can be reused as in- put. - The return value is 0 unless an unrecognized option is given or + The return value is 0 unless an unrecognized option is given or an error occurred. bbrreeaakk [_n] - Exit from within a ffoorr, wwhhiillee, uunnttiill, or sseelleecctt loop. If _n is - specified, break _n levels. _n must be >= 1. If _n is greater - than the number of enclosing loops, all enclosing loops are ex- - ited. The return value is 0 unless _n is not greater than or + Exit from within a ffoorr, wwhhiillee, uunnttiill, or sseelleecctt loop. If _n is + specified, break _n levels. _n must be >= 1. If _n is greater + than the number of enclosing loops, all enclosing loops are ex- + ited. The return value is 0 unless _n is not greater than or equal to 1. bbuuiillttiinn _s_h_e_l_l_-_b_u_i_l_t_i_n [_a_r_g_u_m_e_n_t_s] - Execute the specified shell builtin, passing it _a_r_g_u_m_e_n_t_s, and + Execute the specified shell builtin, passing it _a_r_g_u_m_e_n_t_s, and return its exit status. This is useful when defining a function whose name is the same as a shell builtin, retaining the func- tionality of the builtin within the function. The ccdd builtin is - commonly redefined this way. The return status is false if + commonly redefined this way. The return status is false if _s_h_e_l_l_-_b_u_i_l_t_i_n is not a shell builtin command. ccaalllleerr [_e_x_p_r] @@ -4596,38 +4738,38 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS out _e_x_p_r, ccaalllleerr displays the line number and source filename of the current subroutine call. If a non-negative integer is sup- plied as _e_x_p_r, ccaalllleerr displays the line number, subroutine name, - and source file corresponding to that position in the current - execution call stack. This extra information may be used, for - example, to print a stack trace. The current frame is frame 0. - The return value is 0 unless the shell is not executing a sub- - routine call or _e_x_p_r does not correspond to a valid position in + and source file corresponding to that position in the current + execution call stack. This extra information may be used, for + example, to print a stack trace. The current frame is frame 0. + The return value is 0 unless the shell is not executing a sub- + routine call or _e_x_p_r does not correspond to a valid position in the call stack. - ccdd [--LL|[--PP [--ee]] [-@]] [_d_i_r] - Change the current directory to _d_i_r. if _d_i_r is not supplied, - the value of the HHOOMMEE shell variable is the default. The vari- + ccdd [--LL|[--PP [--ee]]] [-@] [_d_i_r] + Change the current directory to _d_i_r. if _d_i_r is not supplied, + the value of the HHOOMMEE shell variable is the default. The vari- able CCDDPPAATTHH defines the search path for the directory containing - _d_i_r: each directory name in CCDDPPAATTHH is searched for _d_i_r. Alter- - native directory names in CCDDPPAATTHH are separated by a colon (:). - A null directory name in CCDDPPAATTHH is the same as the current di- - rectory, i.e., ``..''. If _d_i_r begins with a slash (/), then CCDD-- - PPAATTHH is not used. The --PP option causes ccdd to use the physical + _d_i_r: the shell searches each directory name in CCDDPPAATTHH for _d_i_r. + Alternative directory names in CCDDPPAATTHH are separated by a colon + (:). A null directory name in CCDDPPAATTHH is the same as the current + directory, i.e., ".". If _d_i_r begins with a slash (/), then CCDD-- + PPAATTHH is not used. The --PP option causes ccdd to use the physical directory structure by resolving symbolic links while traversing _d_i_r and before processing instances of _._. in _d_i_r (see also the --PP option to the sseett builtin command); the --LL option forces sym- - bolic links to be followed by resolving the link after process- - ing instances of _._. in _d_i_r. If _._. appears in _d_i_r, it is pro- - cessed by removing the immediately previous pathname component - from _d_i_r, back to a slash or the beginning of _d_i_r. If the --ee - option is supplied with --PP, and the current working directory + bolic links to be followed by resolving the link after process- + ing instances of _._. in _d_i_r. If _._. appears in _d_i_r, it is + processed by removing the immediately previous pathname compo- + nent from _d_i_r, back to a slash or the beginning of _d_i_r. If the + --ee option is supplied with --PP, and the current working directory cannot be successfully determined after a successful directory change, ccdd will return an unsuccessful status. On systems that support it, the --@@ option presents the extended attributes asso- - ciated with a file as a directory. An argument of -- is con- - verted to $$OOLLDDPPWWDD before the directory change is attempted. If - a non-empty directory name from CCDDPPAATTHH is used, or if -- is the - first argument, and the directory change is successful, the ab- - solute pathname of the new working directory is written to the + ciated with a file as a directory. An argument of -- is con- + verted to $$OOLLDDPPWWDD before the directory change is attempted. If + a non-empty directory name from CCDDPPAATTHH is used, or if -- is the + first argument, and the directory change is successful, the ab- + solute pathname of the new working directory is written to the standard output. If the directory change is successful, ccdd sets the value of the PPWWDD environment variable to the new directory name, and sets the OOLLDDPPWWDD environment variable to the value of @@ -4638,25 +4780,28 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...] Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function lookup. Only builtin commands or commands found in the PPAATTHH are - executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is - performed using a default value for PPAATTHH that is guaranteed to - find all of the standard utilities. If either the --VV or --vv op- - tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv - option causes a single word indicating the command or filename + executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is + performed using a default value for PPAATTHH that is guaranteed to + find all of the standard utilities. If either the --VV or --vv op- + tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv + option causes a single word indicating the command or filename used to invoke _c_o_m_m_a_n_d to be displayed; the --VV option produces a more verbose description. If the --VV or --vv option is supplied, the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If neither option is supplied and an error occurred or _c_o_m_m_a_n_d can- - not be found, the exit status is 127. Otherwise, the exit sta- + not be found, the exit status is 127. Otherwise, the exit sta- tus of the ccoommmmaanndd builtin is the exit status of _c_o_m_m_a_n_d. - ccoommppggeenn [_o_p_t_i_o_n] [_w_o_r_d] - Generate possible completion matches for _w_o_r_d according to the - _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee - builtin with the exception of --pp and --rr, and write the matches - to the standard output. When using the --FF or --CC options, the - various shell variables set by the programmable completion fa- - cilities, while available, will not have useful values. + ccoommppggeenn [--VV _v_a_r_n_a_m_e] [_o_p_t_i_o_n] [_w_o_r_d] + Generate possible completion matches for _w_o_r_d according to the + _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee + builtin with the exceptions of --pp, --rr, --DD, --EE, and --II, and write + the matches to the standard output. If the --VV option is sup- + plied, ccoommppggeenn stores the generated completions into the indexed + array variable _v_a_r_n_a_m_e instead of writing them to the standard + output. When using the --FF or --CC options, the various shell + variables set by the programmable completion facilities, while + available, will not have useful values. The matches will be generated in the same way as if the program- mable completion code had generated them directly from a comple- @@ -4666,39 +4811,40 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS The return value is true unless an invalid option is supplied, or no matches were generated. - ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- - _p_a_t] [--WW _w_o_r_d_l_i_s_t] - [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_- - _f_i_x] _n_a_m_e [_n_a_m_e _._._.] + ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] + [--GG _g_l_o_b_p_a_t] [--WW _w_o_r_d_l_i_s_t] [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] + [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_f_i_x] _n_a_m_e [_n_a_m_e ...] ccoommpplleettee --pprr [--DDEEII] [_n_a_m_e ...] Specify how arguments to each _n_a_m_e should be completed. If the - --pp option is supplied, or if no options are supplied, existing - completion specifications are printed in a way that allows them - to be reused as input. The --rr option removes a completion spec- - ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- - pletion specifications. The --DD option indicates that other sup- - plied options and actions should apply to the ``default'' com- - mand completion; that is, completion attempted on a command for - which no completion has previously been defined. The --EE option - indicates that other supplied options and actions should apply - to ``empty'' command completion; that is, completion attempted - on a blank line. The --II option indicates that other supplied - options and actions should apply to completion on the initial - non-assignment word on the line, or after a command delimiter - such as ;; or ||, which is usually command name completion. If - multiple options are supplied, the --DD option takes precedence - over --EE, and both take precedence over --II. If any of --DD, --EE, or - --II are supplied, any other _n_a_m_e arguments are ignored; these - completions only apply to the case specified by the option. - - The process of applying these completion specifications when - word completion is attempted is described above under PPrrooggrraamm-- - mmaabbllee CCoommpplleettiioonn. + --pp option is supplied, or if no options or _n_a_m_es are supplied, + existing completion specifications are printed in a way that al- + lows them to be reused as input. The --rr option removes a com- + pletion specification for each _n_a_m_e, or, if no _n_a_m_es are sup- + plied, all completion specifications. The --DD option indicates + that other supplied options and actions should apply to the "de- + fault" command completion; that is, completion attempted on a + command for which no completion has previously been defined. + The --EE option indicates that other supplied options and actions + should apply to "empty" command completion; that is, completion + attempted on a blank line. The --II option indicates that other + supplied options and actions should apply to completion on the + initial non-assignment word on the line, or after a command de- + limiter such as ;; or ||, which is usually command name comple- + tion. If multiple options are supplied, the --DD option takes + precedence over --EE, and both take precedence over --II. If any of + --DD, --EE, or --II are supplied, any other _n_a_m_e arguments are ig- + nored; these completions only apply to the case specified by the + option. + + The process of applying these completion specifications when + word completion is attempted is described above under PPrrooggrraammmmaa-- + bbllee CCoommpplleettiioonn. Other options, if specified, have the following meanings. The arguments to the --GG, --WW, and --XX options (and, if necessary, the --PP and --SS options) should be quoted to protect them from expan- sion before the ccoommpplleettee builtin is invoked. + --oo _c_o_m_p_-_o_p_t_i_o_n The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- spec's behavior beyond the simple generation of comple- @@ -4706,18 +4852,21 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS bbaasshhddeeffaauulltt Perform the rest of the default bbaasshh completions if the compspec generates no matches. - ddeeffaauulltt Use readline's default filename completion if + ddeeffaauulltt Use readline's default filename completion if the compspec generates no matches. ddiirrnnaammeess - Perform directory name completion if the comp- + Perform directory name completion if the comp- spec generates no matches. ffiilleennaammeess - Tell readline that the compspec generates file- - names, so it can perform any filename-specific - processing (like adding a slash to directory - names, quoting special characters, or suppress- - ing trailing spaces). Intended to be used with + Tell readline that the compspec generates file- + names, so it can perform any filename-specific + processing (like adding a slash to directory + names, quoting special characters, or suppress- + ing trailing spaces). Intended to be used with shell functions. + ffuullllqquuoottee + Tell readline to quote all the completed words + even if they are not filenames. nnooqquuoottee Tell readline not to quote the completed words if they are filenames (quoting filenames is the default). @@ -4732,13 +4881,13 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS tempted and any matches are added to the results of the other actions. --AA _a_c_t_i_o_n - The _a_c_t_i_o_n may be one of the following to generate a + The _a_c_t_i_o_n may be one of the following to generate a list of possible completions: aalliiaass Alias names. May also be specified as --aa. aarrrraayyvvaarr Array variable names. bbiinnddiinngg RReeaaddlliinnee key binding names. - bbuuiillttiinn Names of shell builtin commands. May also be + bbuuiillttiinn Names of shell builtin commands. May also be specified as --bb. ccoommmmaanndd Command names. May also be specified as --cc. ddiirreeccttoorryy @@ -4746,7 +4895,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS ddiissaabblleedd Names of disabled shell builtins. eennaabblleedd Names of enabled shell builtins. - eexxppoorrtt Names of exported shell variables. May also be + eexxppoorrtt Names of exported shell variables. May also be specified as --ee. ffiillee File names. May also be specified as --ff. ffuunnccttiioonn @@ -4755,17 +4904,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS hheellppttooppiicc Help topics as accepted by the hheellpp builtin. hhoossttnnaammee - Hostnames, as taken from the file specified by + Hostnames, as taken from the file specified by the HHOOSSTTFFIILLEE shell variable. - jjoobb Job names, if job control is active. May also + jjoobb Job names, if job control is active. May also be specified as --jj. - kkeeyywwoorrdd Shell reserved words. May also be specified as + kkeeyywwoorrdd Shell reserved words. May also be specified as --kk. rruunnnniinngg Names of running jobs, if job control is active. sseerrvviiccee Service names. May also be specified as --ss. - sseettoopptt Valid arguments for the --oo option to the sseett + sseettoopptt Valid arguments for the --oo option to the sseett builtin. - sshhoopptt Shell option names as accepted by the sshhoopptt + sshhoopptt Shell option names as accepted by the sshhoopptt builtin. ssiiggnnaall Signal names. ssttooppppeedd Names of stopped jobs, if job control is active. @@ -4783,15 +4932,15 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS first argument ($$11) is the name of the command whose ar- guments are being completed, the second argument ($$22) is the word being completed, and the third argument ($$33) is - the word preceding the word being completed on the cur- - rent command line. When it finishes, the possible com- - pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY + the word preceding the word being completed on the cur- + rent command line. When it finishes, the possible com- + pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY array variable. --GG _g_l_o_b_p_a_t - The pathname expansion pattern _g_l_o_b_p_a_t is expanded to + The pathname expansion pattern _g_l_o_b_p_a_t is expanded to generate the possible completions. --PP _p_r_e_f_i_x - _p_r_e_f_i_x is added at the beginning of each possible com- + _p_r_e_f_i_x is added at the beginning of each possible com- pletion after all other options have been applied. --SS _s_u_f_f_i_x _s_u_f_f_i_x is appended to each possible completion after all @@ -4801,11 +4950,11 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS special variable as delimiters, and each resultant word is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t, in order to provide a mechanism for the words to contain - shell metacharacters or characters in the value of IIFFSS. - The possible completions are the members of the resul- + shell metacharacters or characters in the value of IIFFSS. + The possible completions are the members of the resul- tant list which match the word being completed. --XX _f_i_l_t_e_r_p_a_t - _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. + _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. It is applied to the list of possible completions gener- ated by the preceding options and arguments, and each completion matching _f_i_l_t_e_r_p_a_t is removed from the list. @@ -4813,53 +4962,53 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS case, any completion not matching _f_i_l_t_e_r_p_a_t is removed. The return value is true unless an invalid option is supplied, - an option other than --pp or --rr is supplied without a _n_a_m_e argu- - ment, an attempt is made to remove a completion specification - for a _n_a_m_e for which no specification exists, or an error occurs - adding a completion specification. + an option other than --pp, --rr, --DD, --EE, or --II is supplied without a + _n_a_m_e argument, an attempt is made to remove a completion speci- + fication for a _n_a_m_e for which no specification exists, or an er- + ror occurs adding a completion specification. ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEEII] [++oo _o_p_t_i_o_n] [_n_a_m_e] Modify completion options for each _n_a_m_e according to the _o_p_- _t_i_o_ns, or for the currently-executing completion if no _n_a_m_es are - supplied. If no _o_p_t_i_o_ns are given, display the completion op- - tions for each _n_a_m_e or the current completion. The possible - values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- - scribed above. The --DD option indicates that other supplied op- - tions should apply to the ``default'' command completion; that - is, completion attempted on a command for which no completion - has previously been defined. The --EE option indicates that other - supplied options should apply to ``empty'' command completion; + supplied. If no _o_p_t_i_o_ns are given, display the completion op- + tions for each _n_a_m_e or the current completion. The possible + values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- + scribed above. The --DD option indicates that other supplied op- + tions should apply to the "default" command completion; that is, + completion attempted on a command for which no completion has + previously been defined. The --EE option indicates that other + supplied options should apply to "empty" command completion; that is, completion attempted on a blank line. The --II option indicates that other supplied options should apply to completion - on the initial non-assignment word on the line, or after a com- - mand delimiter such as ;; or ||, which is usually command name + on the initial non-assignment word on the line, or after a com- + mand delimiter such as ;; or ||, which is usually command name completion. - The return value is true unless an invalid option is supplied, + The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a _n_a_m_e for which no completion specification exists, or an output error occurs. ccoonnttiinnuuee [_n] Resume the next iteration of the enclosing ffoorr, wwhhiillee, uunnttiill, or - sseelleecctt loop. If _n is specified, resume at the _nth enclosing - loop. _n must be >= 1. If _n is greater than the number of en- - closing loops, the last enclosing loop (the ``top-level'' loop) - is resumed. The return value is 0 unless _n is not greater than - or equal to 1. + sseelleecctt loop. If _n is specified, resume at the _nth enclosing + loop. _n must be >= 1. If _n is greater than the number of en- + closing loops, the shell resumes the last enclosing loop (the + "top-level" loop). The return value is 0 unless _n is not + greater than or equal to 1. ddeeccllaarree [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] ttyyppeesseett [--aaAAffFFggiiIIllnnrrttuuxx] [--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 + 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 with _n_a_m_e arguments, additional options, other than --ff and --FF, are ignored. When --pp is supplied without _n_a_m_e arguments, it will display the attributes and values of all variables having the attributes specified by the additional options. If no other - options are supplied with --pp, ddeeccllaarree will display the at- - tributes and values of all shell variables. The --ff option will - restrict the display to shell functions. The --FF option inhibits - the display of function definitions; only the function name and + options are supplied with --pp, ddeeccllaarree will display the attrib- + utes and values of all shell variables. The --ff option will re- + strict the display to shell functions. 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 each _n_a_m_e is defined are displayed as well. The --FF option implies @@ -4868,42 +5017,42 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS tion. It is ignored in all other cases. The --II option causes local variables to inherit the attributes (except the _n_a_m_e_r_e_f attribute) and value of any existing variable with the same _n_a_m_e - at a surrounding scope. If there is no existing variable, the + at a surrounding scope. If there is no existing variable, the local variable is initially unset. The following options can be - used to restrict output to variables with the specified attri- - bute or to give variables attributes: + used to restrict output to variables with the specified at- + tribute or to give variables attributes: --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss above). --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss above). --ff Use function names only. --ii The variable is treated as an integer; arithmetic evalua- - tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when + tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when the variable is assigned a value. - --ll When the variable is assigned a value, all upper-case - characters are converted to lower-case. The upper-case + --ll When the variable is assigned a value, all upper-case + characters are converted to lower-case. The upper-case attribute is disabled. - --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name - reference to another variable. That other variable is - defined by the value of _n_a_m_e. All references, assign- - ments, and attribute modifications to _n_a_m_e, except those - using or changing the --nn attribute itself, are performed - on the variable referenced by _n_a_m_e's value. The nameref + --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name + reference to another variable. That other variable is + defined by the value of _n_a_m_e. All references, assign- + ments, and attribute modifications to _n_a_m_e, except those + using or changing the --nn attribute itself, are performed + on the variable referenced by _n_a_m_e's value. The nameref attribute cannot be applied to array variables. --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 in- - herit the DDEEBBUUGG and RREETTUURRNN traps from the calling shell. + herit the DDEEBBUUGG and RREETTUURRNN traps from the calling shell. The trace attribute has no special meaning for variables. - --uu When the variable is assigned a value, all lower-case - characters are converted to upper-case. The lower-case + --uu When the variable is assigned a value, all lower-case + characters are converted to upper-case. The lower-case attribute is disabled. - --xx Mark _n_a_m_es for export to subsequent commands via the en- + --xx Mark _n_a_m_es for export to subsequent commands via the en- vironment. - Using `+' instead of `-' turns off the attribute instead, with - the exceptions that ++aa and ++AA may not be used to destroy array - variables and ++rr will not remove the readonly attribute. When + Using "+" instead of "-" turns off the attribute instead, with + the exceptions that ++aa and ++AA may not be used to destroy array + variables and ++rr will not remove the readonly attribute. When used in a function, ddeeccllaarree and ttyyppeesseett make each _n_a_m_e local, as with the llooccaall command, unless the --gg option is supplied. If a variable name is followed by =_v_a_l_u_e, the value of the variable @@ -4911,12 +5060,12 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS ment syntax to create array variables, additional attributes do not take effect until subsequent assignments. 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 + 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 as- sign a value to an array variable without using the compound as- - signment 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 + signment 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. @@ -4927,17 +5076,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS list with the ppuusshhdd command; the ppooppdd command removes entries from the list. The current directory is always the first direc- tory in the stack. - --cc Clears the directory stack by deleting all of the en- + --cc Clears the directory stack by deleting all of the en- tries. - --ll Produces a listing using full pathnames; the default + --ll Produces a listing using full pathnames; 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. ++_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. @@ -4951,7 +5100,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 re- ceives a SSIIGGHHUUPP. 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 ar- + to remove or mark all jobs; the --rr option without a _j_o_b_s_p_e_c ar- gument 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. @@ -4959,14 +5108,14 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS Output the _a_r_gs, separated by spaces, followed by a newline. The return status is 0 unless a write error occurs. If --nn is specified, the trailing newline is suppressed. If the --ee option - is given, interpretation of the following backslash-escaped - characters is enabled. The --EE option disables the interpreta- - tion of these escape characters, 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 es- - cape characters by default. eecchhoo does not interpret ---- to mean - the end of options. eecchhoo interprets the following escape se- - quences: + is given, interpretation of the following backslash-escaped + characters is enabled. The --EE option disables the interpreta- + tion of these escape characters, even on systems where they are + interpreted by default. The xxppgg__eecchhoo shell option may be used + to dynamically determine whether or not eecchhoo interprets any op- + tions and 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 \\cc suppress further output @@ -4991,29 +5140,30 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...] 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 en- - abled. 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 - shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading. - Bash will use the value of the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a + 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 en- + abled. 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 shared + object _f_i_l_e_n_a_m_e, on systems that support dynamic loading. BBaasshh + will use the value of the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a colon-separated list of directories in which to search for _f_i_l_e_- - _n_a_m_e. The default is system-dependent. The --dd option will - delete a builtin previously loaded with --ff. If no _n_a_m_e argu- - ments are given, or if the --pp option is supplied, a list of - shell builtins is printed. With no other option arguments, the - list consists of all enabled shell builtins. If --nn is supplied, - only disabled builtins are printed. If --aa is supplied, the list - printed includes all builtins, with an indication of whether or - not each is enabled. If --ss is supplied, the output is re- - stricted to the POSIX _s_p_e_c_i_a_l builtins. If no options are sup- - plied and a _n_a_m_e is not a shell builtin, eennaabbllee will attempt to - load _n_a_m_e from a shared object named _n_a_m_e, as if the command - were ``enable -f _n_a_m_e _n_a_m_e . 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. + _n_a_m_e, if _f_i_l_e_n_a_m_e does not contain a slash. The default is sys- + tem-dependent, and may include "." to force a search of the cur- + rent directory. 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 arguments, the list consists of all enabled + shell builtins. If --nn is supplied, only disabled builtins are + printed. If --aa is supplied, the list printed includes all + builtins, with an indication 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. If no options are supplied and a _n_a_m_e is not a shell + builtin, eennaabbllee will attempt to load _n_a_m_e from a shared object + named _n_a_m_e, as if the command were "enable -f _n_a_m_e _n_a_m_e". 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- @@ -5029,16 +5179,16 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS _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 can- - not be executed for some reason, a non-interactive shell exits, - unless the eexxeeccffaaiill shell option is enabled. In that case, it - returns failure. An interactive shell returns failure if the - file cannot be executed. A subshell exits unconditionally if - eexxeecc fails. 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 + not be executed for some reason, a non-interactive shell exits, + unless the eexxeeccffaaiill shell option is enabled. In that case, it + returns failure. An interactive shell returns failure if the + file cannot be executed. A subshell exits unconditionally if + eexxeecc fails. 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. @@ -5052,62 +5202,64 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 sup- + of the _n_a_m_e_s is not a valid shell variable name, or --ff is sup- plied with a _n_a_m_e that is not a function. + ffaallssee Does nothing, returns a non-zero status. + ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t] ffcc --ss [_p_a_t=_r_e_p] [_c_m_d] - The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t - from the history list and displays or edits and re-executes - them. _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 current command number). When listing, a - _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to - the current command (usually the ffcc command); otherwise 0 is - equivalent to -1 and -0 is invalid. If _l_a_s_t is not specified, - it is set to 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 specified, it is set to the previous command for + The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t + from the history list and displays or edits and re-executes + them. _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 current command number). When listing, a + _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to + the current command (usually the ffcc command); otherwise 0 is + equivalent to -1 and -0 is invalid. If _l_a_s_t is not specified, + it is set to 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 specified, 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. _C_o_m_m_a_n_d is interpreted the same as - _f_i_r_s_t above. 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 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. _C_o_m_m_a_n_d is interpreted the same as + _f_i_r_s_t above. 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 command. - If the first form is used, the return value is 0 unless an in- - valid 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 in- + valid 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 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 _._._.] - 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 ex- + ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g ...] + 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 ex- pected 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 @@ -5117,56 +5269,60 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 1 each time the shell or a shell script is invoked. When an op- tion requires an argument, ggeettooppttss places that argument into the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automatically; - it must be manually reset between multiple calls to ggeettooppttss - within the same shell invocation if a new set of parameters is + it must be manually reset between multiple calls to ggeettooppttss + within the same shell invocation if a new set of parameters is to be used. When the end of options is encountered, ggeettooppttss exits with a re- turn value greater than zero. OOPPTTIINNDD is set to the index of the first non-option argument, and _n_a_m_e is set to ?. - ggeettooppttss normally parses the positional parameters, but if more - arguments are supplied as _a_r_g values, ggeettooppttss parses those in- + ggeettooppttss normally parses the positional parameters, but if more + arguments are supplied as _a_r_g values, ggeettooppttss parses those in- stead. - 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 OOPP-- - TTAARRGG and no diagnostic message is printed. + If ggeettooppttss detects an invalid option, it places ? into _n_a_m_e and, + if not silent, prints an error message and unsets OOPPTTAARRGG. If + ggeettooppttss is silent, it assigns the option character found to OOPP-- + TTAARRGG and does not print a diagnostic message. 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 + it sets the value of _n_a_m_e to a question mark (??), unsets OOPPTTAARRGG, + and prints a diagnostic message. If ggeettooppttss is silent, it sets + the value of _n_a_m_e to a colon (::) and sets OOPPTTAARRGG 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] Each time hhaasshh is invoked, the full pathname of the command _n_a_m_e - is determined by searching the directories in $$PPAATTHH and remem- + is determined by searching the directories in $$PPAATTHH and remem- bered. Any previously-remembered pathname is discarded. 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 filename of the command. The --rr option - causes the shell to forget all remembered locations. The --dd op- - tion 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 - 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 - 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 - or an invalid option is supplied. + --pp option is supplied, hhaasshh uses _f_i_l_e_n_a_m_e as the full filename + of the command. The --rr option causes the shell to forget all + remembered locations. Assigning to the PPAATTHH variable also + clears all hashed filenames. 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 pathname. The --ll option + causes output to be displayed in a format that may be reused as + input. If no arguments are given, or if only --ll is supplied, + information about remembered commands is printed. The --tt, --dd, + and --pp options (the options that act on the _n_a_m_e arguments) are + mutually exclusive. Only one will be active. If more than one + is supplied, --tt has higher priority than --pp, and both are higher + priority than --dd. The return status is true unless a _n_a_m_e is + not found or an invalid option is supplied. hheellpp [--ddmmss] [_p_a_t_t_e_r_n] Display helpful information about builtin commands. If _p_a_t_t_e_r_n @@ -5185,18 +5341,19 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS hhiissttoorryy --dd _o_f_f_s_e_t hhiissttoorryy --dd _s_t_a_r_t-_e_n_d hhiissttoorryy --aannrrww [_f_i_l_e_n_a_m_e] - hhiissttoorryy --pp _a_r_g [_a_r_g _._._.] - hhiissttoorryy --ss _a_r_g [_a_r_g _._._.] + hhiissttoorryy --pp _a_r_g [_a_r_g ...] + 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 - following meanings: + _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. If _f_i_l_e_n_a_m_e is not supplied and + HHIISSTTFFIILLEE is unset or null, the --aa,, --nn,, --rr,, and --ww options have + no effect. 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. If _o_f_f_s_e_t @@ -5208,15 +5365,15 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS Delete the range of history entries between positions _s_t_a_r_t and _e_n_d, inclusive. Positive and negative values for _s_t_a_r_t and _e_n_d are interpreted as described above. - --aa Append the ``new'' history lines to the history file. + --aa Append the "new" history lines to the history file. These are history lines entered since the beginning of the current bbaasshh session, but not already appended to the history file. - --nn Read the history lines not already read from the history - file into the current history list. These are lines ap- - pended 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 ap- + pended to the history file since the beginning of the current bbaasshh session. - --rr Read the contents of the history file and append them to + --rr Read the contents of the history file and append them to the current history list. --ww Write the current history list to the history file, over- writing the history file's contents. @@ -5244,15 +5401,15 @@ 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. - --nn Display information only about jobs that have changed + --nn Display information only about jobs that have changed status since the user was last notified of their status. - --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. --rr Display only running jobs. --ss Display only 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 @@ -5261,13 +5418,13 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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|--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. The --LL option is @@ -5284,22 +5441,22 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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- - tion and its children. If _n_a_m_e is -, the set of shell options - is made local to the function in which llooccaall is invoked: shell - options changed using the sseett builtin inside the function are - restored to their original values when the function returns. - The restore is effected as if a series of sseett commands were exe- - cuted to restore the values that were in place before the func- - tion. With no operands, llooccaall writes a list of 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, or _n_a_m_e is a - readonly variable. + variable _n_a_m_e to have a visible scope restricted to that func- + tion and its children. If _n_a_m_e is -, the set of shell options + is made local to the function in which llooccaall is invoked: shell + options changed using the sseett builtin inside the function after + the call to llooccaall are restored to their original values when the + function returns. The restore is effected as if a series of sseett + commands were executed to restore the values that were in place + before the function. With no operands, llooccaall writes a list of + 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, + or _n_a_m_e is a readonly variable. llooggoouutt Exit a login shell. - mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC + mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] rreeaaddaarrrraayy [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] @@ -5311,31 +5468,31 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS input line, rather than newline. If _d_e_l_i_m is the empty string, mmaappffiillee will terminate a line when it reads a NUL character. - --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are + --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are copied. - --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default + --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default index is 0. --ss Discard the first _c_o_u_n_t lines read. - --tt Remove a trailing _d_e_l_i_m (default newline) from each line + --tt Remove a trailing _d_e_l_i_m (default newline) from each line read. - --uu Read lines from file descriptor _f_d instead of the stan- + --uu Read lines from file descriptor _f_d instead of the stan- dard input. - --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The + --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The --cc option specifies _q_u_a_n_t_u_m. - --cc Specify the number of lines read between each call to + --cc Specify the number of lines read between each call to _c_a_l_l_b_a_c_k. - If --CC is specified without --cc, the default quantum is 5000. + If --CC is specified without --cc, the default quantum is 5000. When _c_a_l_l_b_a_c_k is evaluated, it is supplied the index of the next array element to be assigned and the line to be assigned to that - element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after + element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after the line is read but before the array element is assigned. - If not supplied with an explicit origin, mmaappffiillee will clear _a_r_- + If not supplied with an explicit origin, mmaappffiillee will clear _a_r_- _r_a_y before assigning to it. - mmaappffiillee returns successfully unless an invalid option or option - argument is supplied, _a_r_r_a_y is invalid or unassignable, or if + mmaappffiillee returns successfully unless an invalid option or option + argument is supplied, _a_r_r_a_y is invalid or unassignable, or if _a_r_r_a_y is not an indexed array. ppooppdd [-nn] [+_n] [-_n] @@ -5344,16 +5501,16 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS With no arguments, ppooppdd removes the top directory from the stack, and changes to the new top directory. Arguments, if sup- plied, have the following meanings: - --nn Suppresses the normal change of directory when removing + --nn Suppresses the normal change of directory when removing directories from the stack, so that only the stack is ma- nipulated. ++_n Removes the _nth entry counting from the left of the list shown by ddiirrss, starting with zero, from the stack. For - example: ``popd +0'' removes the first directory, ``popd - +1'' the second. + 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. If the top element of the directory stack is modified, and the @@ -5361,7 +5518,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS to the directory at the top of the stack. If the ccdd fails, ppooppdd returns a non-zero value. - Otherwise, ppooppdd returns false if an invalid option is encoun- + Otherwise, ppooppdd returns false if an invalid option is encoun- tered, the directory stack is empty, or a non-existent directory stack entry is specified. @@ -5380,40 +5537,56 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS output, character escape sequences, which are converted and copied to the standard output, and format 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) format specifications, pprriinnttff - interprets the following extensions: + addition to the standard _p_r_i_n_t_f(3) format characters ccssnnddiioouuxxXXee-- + EEffFFggGGaaAA, pprriinnttff interprets the following additional format spec- + ifiers: %%bb causes pprriinnttff to expand backslash escape sequences in the corresponding _a_r_g_u_m_e_n_t in the same way as eecchhoo --ee. %%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. - %%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_- + format that can be reused as shell input. %%qq and %%QQ use + the $$'''' quoting style if any characters in the argument + string require it, and backslash quoting otherwise. If + the format string uses the _p_r_i_n_t_f alternate form, these + two formats quote the argument string using single + quotes. + %%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_- _m_e_n_t before quoting it. %%((_d_a_t_e_f_m_t))TT - causes pprriinnttff to output the date-time string resulting - from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). + causes pprriinnttff to output the date-time string resulting + from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). The corresponding _a_r_g_u_m_e_n_t is an integer representing the number of seconds since the epoch. Two special argument values may be used: -1 represents the current time, and -2 represents the time the shell was invoked. If no ar- gument is specified, conversion behaves as if -1 had been - given. This is an exception to the usual pprriinnttff behav- + given. This is an exception to the usual pprriinnttff behav- ior. - The %b, %q, and %T directives all use the field width and preci- - sion arguments from the format specification and write that many - bytes from (or use that wide a field for) the expanded argument, - which usually contains more characters than the original. + The %b, %q, and %T format specifiers all use the field width and + precision arguments from the format specification and write that + many bytes from (or use that wide a field for) the expanded ar- + gument, which usually contains more characters than the origi- + nal. + + The %n format specifier accepts a corresponding argument that is + treated as a shell variable name. + + The %s and %c format specifiers accept an l (long) modifier, + which forces them to convert the argument string to a wide-char- + acter string and apply any supplied field width and precision in + terms of characters, not bytes. - Arguments to non-string format specifiers are treated as C con- + Arguments to non-string format specifiers are treated as C con- stants, except that a leading plus or minus sign is allowed, and if the leading character is a single or double quote, the value is the ASCII value of the following character. 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 - value is zero on success, non-zero on failure. + 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 if an invalid option is sup- + plied or a write or assignment error occurs. ppuusshhdd [--nn] [+_n] [-_n] ppuusshhdd [--nn] [_d_i_r] @@ -5434,7 +5607,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS _d_i_r Adds _d_i_r to the directory stack at the top After the stack has been modified, if the --nn option was not sup- - plied, ppuusshhdd uses the ccdd builtin to change to the directory at + plied, ppuusshhdd uses the ccdd builtin to change to the directory at the top of the stack. If the ccdd fails, ppuusshhdd returns a non-zero value. @@ -5455,13 +5628,13 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS occurs while reading the name of the current directory or an in- valid option is supplied. - rreeaadd [--eerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] [--pp - _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...] + rreeaadd [--EEeerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] + [--pp _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...] One line is read from the standard input, or from the file de- scriptor _f_d supplied as an argument to the --uu option, split into - words as described above under WWoorrdd SSpplliittttiinngg, and the first - word is assigned to the first _n_a_m_e, the second word to the sec- - ond _n_a_m_e, and so on. If there are more words than names, the + words as described above under WWoorrdd SSpplliittttiinngg, and the first + word is assigned to the first _n_a_m_e, the second word to the sec- + ond _n_a_m_e, and so on. If there are more words than names, the remaining words and their intervening delimiters are 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 val- @@ -5469,39 +5642,45 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS words using the same rules the shell uses for expansion (de- scribed above under WWoorrdd SSpplliittttiinngg). The backslash character (\\) may be used to remove any special meaning for the next char- - acter read and for line continuation. Options, if supplied, + acter read and for line continuation. Options, if supplied, have the following meanings: --aa _a_n_a_m_e The words are assigned to sequential indices of the array variable _a_n_a_m_e, starting at 0. _a_n_a_m_e is unset before any - new values are assigned. Other _n_a_m_e arguments are ig- + new values are assigned. Other _n_a_m_e arguments are ig- nored. --dd _d_e_l_i_m The first character of _d_e_l_i_m is used to terminate the in- put line, rather than newline. If _d_e_l_i_m is the empty string, rreeaadd will terminate a line when it reads a NUL character. - --ee If the standard input is coming from a terminal, rreeaaddlliinnee - (see RREEAADDLLIINNEE above) is used to obtain the line. Read- - line uses the current (or default, if line editing was - not previously active) editing settings, but uses read- - line's default filename completion. + --ee If the standard input is coming from a terminal, rreeaadd + uses rreeaaddlliinnee (see RREEAADDLLIINNEE above) to obtain the line. + Readline uses the current (or default, if line editing + was not previously active) editing settings, but uses + readline's default filename completion. + --EE If the standard input is coming from a terminal, rreeaadd + uses rreeaaddlliinnee (see RREEAADDLLIINNEE above) to obtain the line. + Readline uses the current (or default, if line editing + was not previously active) editing settings, but uses + bash's default completion, including programmable comple- + tion. --ii _t_e_x_t If rreeaaddlliinnee is being used to read the line, _t_e_x_t is placed into the editing buffer before editing begins. --nn _n_c_h_a_r_s rreeaadd returns after reading _n_c_h_a_r_s characters rather than waiting for a complete line of input, but honors a delim- - iter if fewer than _n_c_h_a_r_s characters are read before the + iter if fewer than _n_c_h_a_r_s characters are read before the delimiter. --NN _n_c_h_a_r_s - rreeaadd returns after reading exactly _n_c_h_a_r_s characters - rather than waiting for a complete line of input, unless - EOF is encountered or rreeaadd times out. Delimiter charac- - ters encountered in the input are not treated specially - and do not cause rreeaadd to return until _n_c_h_a_r_s characters - are read. The result is not split on the characters in - IIFFSS; the intent is that the variable is assigned exactly + rreeaadd returns after reading exactly _n_c_h_a_r_s characters + rather than waiting for a complete line of input, unless + EOF is encountered or rreeaadd times out. Delimiter charac- + ters encountered in the input are not treated specially + and do not cause rreeaadd to return until _n_c_h_a_r_s characters + are read. The result is not split on the characters in + IIFFSS; the intent is that the variable is assigned exactly the characters read (with the exception of backslash; see the --rr option below). --pp _p_r_o_m_p_t @@ -5509,8 +5688,8 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 then be used as a + slash is considered to be part of the line. In particu- + lar, a backslash-newline pair may not then be used as a line continuation. --ss Silent mode. If input is coming from a terminal, charac- ters are not echoed. @@ -5523,14 +5702,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS reading input from a terminal, pipe, or other special file; it has no effect when reading from regular files. If rreeaadd times out, rreeaadd saves any partial input read into - the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- - turns immediately, without trying to read any data. The - exit status is 0 if input is available on the specified - file descriptor, or the read will return EOF, non-zero - otherwise. The exit status is greater than 128 if the + the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- + turns immediately, without trying to read any data. The + exit status is 0 if input is available on the specified + file descriptor, or the read will return EOF, non-zero + otherwise. The exit status is greater than 128 if the timeout is exceeded. --uu _f_d Read input from file descriptor _f_d. + Other than the case where _d_e_l_i_m is the empty string, rreeaadd ig- + nores any NUL characters in the input. + If no _n_a_m_e_s are supplied, the line read, without the ending de- limiter but otherwise unmodified, is assigned to the variable RREEPPLLYY. The exit status is zero, unless end-of-file is encoun- @@ -5540,19 +5722,19 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS as the argument to --uu. rreeaaddoonnllyy [--aaAAff] [--pp] [_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 - marked. The --aa option restricts the variables to indexed ar- - rays; the --AA option restricts the variables to associative ar- + 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 indexed ar- + rays; the --AA option restricts the variables to associative ar- rays. If both options are supplied, --AA takes precedence. 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 other options may be - used to restrict the output to a subset of the set of readonly - names. 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 variable is set to _w_o_r_d. The return - status is 0 unless an invalid option is encountered, one of the + used to restrict the output to a subset of the set of readonly + names. 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 variable 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. @@ -5561,14 +5743,14 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS fied by _n to its caller. If _n is omitted, the return status is that of the last command executed in the function body. If rree-- ttuurrnn is executed by a trap handler, the last command used to de- - termine the status is the last command executed before the trap - handler. If rreettuurrnn is executed during a DDEEBBUUGG trap, the last - command used to determine the status is the last command exe- - cuted by the trap handler before rreettuurrnn was invoked. If rreettuurrnn - is 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 + termine the status is the last command executed before the trap + handler. If rreettuurrnn is executed during a DDEEBBUUGG trap, the last + command used to determine the status is the last command exe- + cuted by the trap handler before rreettuurrnn was invoked. If rreettuurrnn + is 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 _n is supplied, the return value is its least signif- icant 8 bits. The return status is non-zero if rreettuurrnn is sup- plied a non-numeric argument, or is used outside a function and @@ -5578,15 +5760,16 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS sseett [--aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] - Without options, display the name and value of each shell vari- - able in a format that can be reused as input for setting or re- + sseett --oo + sseett ++oo Without options, display the name and value of each shell vari- + able in a format that can be reused as input for setting or re- setting the currently-set variables. Read-only variables cannot be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. The output is sorted according to the current locale. When options are specified, they set or unset shell attributes. Any argu- ments remaining after option processing 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 Each variable or function that is created or modified is given the export attribute and marked for export to the @@ -5594,8 +5777,8 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS --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 _p_i_p_e_l_i_n_e (which may consist of a - single _s_i_m_p_l_e _c_o_m_m_a_n_d), a _l_i_s_t, or a _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d + --ee Exit immediately if a _p_i_p_e_l_i_n_e (which may consist of a + single _s_i_m_p_l_e _c_o_m_m_a_n_d), a _l_i_s_t, or a _c_o_m_p_o_u_n_d _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 @@ -5603,34 +5786,34 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS eelliiff reserved words, part of any command executed in a &&&& or |||| list except the command following the final &&&& or ||||, any command in a pipeline but the last, or if the - command's return value is being inverted with !!. If a - compound command other than a subshell returns a non- - zero status because a command failed while --ee was being - ignored, the shell does not exit. A trap on EERRRR, if - set, is executed before the shell exits. This option + command's return value is being inverted with !!. If a + compound command other than a subshell returns a non- + zero status because a command failed while --ee was being + ignored, the shell does not exit. A trap on EERRRR, if + set, is executed before the shell exits. This option applies to the shell environment and each subshell envi- ronment separately (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT above), and may cause subshells to exit before executing all the commands in the subshell. - If a compound command or shell function executes in a - context where --ee is being ignored, none of the commands - executed within the compound command or function body - will be affected by the --ee setting, even if --ee is set - and a command returns a failure status. If a compound - command or shell function sets --ee while executing in a - context where --ee is ignored, that setting will not have - any effect until the compound command or the command + If a compound command or shell function executes in a + context where --ee is being ignored, none of the commands + executed within the compound command or function body + will be affected by the --ee setting, even if --ee is set + and a command returns a failure status. If a compound + command or shell function sets --ee while executing in a + context where --ee is ignored, that setting will not have + any effect until the compound command or the command containing the function call completes. --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). All processes run + --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). All processes run in a separate process group. When a background job com- pletes, the shell prints a line containing its exit sta- tus. @@ -5660,9 +5843,9 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS HHIISSTTOORRYY. This option is on by default in inter- active shells. iiggnnoorreeeeooff - The effect is as if the shell command ``IG- - NOREEOF=10'' had been executed (see SShheellll VVaarrii-- - aabblleess above). + 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. nnoocclloobbbbeerr @@ -5689,14 +5872,14 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS pprriivviilleeggeedd Same as --pp. vveerrbboossee Same as --vv. - vvii Use a vi-style command line editing interface. + vvii Use a vi-style command line editing interface. This also affects the editing interface used for rreeaadd --ee. 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 + If --oo is supplied with no _o_p_t_i_o_n_-_n_a_m_e, sseett prints the + current shell option settings. If ++oo is supplied with + no _o_p_t_i_o_n_-_n_a_m_e, sseett prints a series of sseett commands to + recreate the current option settings 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 @@ -5706,34 +5889,35 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS started with the effective user (group) id not equal to the real user (group) id, and the --pp option is not sup- plied, these actions are taken and the effective user id - is set to the real user id. If the --pp option is sup- - plied at startup, the effective user id is not reset. - Turning this option off causes the effective user and + is set to the real user id. If the --pp option is sup- + plied 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 ids. --rr Enable restricted shell mode. This option cannot be un- set once it has been set. --tt Exit after reading and executing one command. --uu Treat unset variables and parameters other than the spe- - cial parameters "@" and "*", or array variables sub- - scripted with "@" or "*", as an error when performing - parameter expansion. If expansion is attempted on an - unset variable or parameter, the shell prints an error - message, and, if not interactive, exits with a non-zero + cial parameters "@" and "*", or array variables sub- + scripted with "@" or "*", as an error when performing + parameter expansion. If expansion is attempted on an + unset variable or parameter, 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 - and its expanded arguments or associated word list. - --BB The shell performs brace expansion (see BBrraaccee EExxppaannssiioonn + and its expanded arguments or associated word list, to + standard error. + --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. @@ -5741,23 +5925,23 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 traps on DDEEBBUUGG and RREETTUURRNN are inherited by + --TT If set, any traps on DDEEBBUUGG and RREETTUURRNN are inherited by shell functions, command substitutions, and commands ex- ecuted in a subshell environment. The DDEEBBUUGG and RREETTUURRNN traps are normally not inherited in such cases. ---- 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 op- + The options are off by default unless otherwise noted. Using + + rather than - causes these options to be turned off. The op- tions can also be specified as arguments to an invocation of the shell. The current set of options may be found in $$--. The re- turn status is always true unless an invalid option is encoun- @@ -5768,8 +5952,8 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS Parameters represented by the numbers $$## down to $$##-_n+1 are un- set. _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 param- - eters are not changed. The return status is greater than zero + assumed to be 1. If _n is greater than $$##, the positional para- + meters 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 ...] @@ -5779,12 +5963,12 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS builtin command. With no options, or with the --pp option, a list of all settable options is displayed, with an indication of whether or not each is set; if _o_p_t_n_a_m_e_s are supplied, the output - is restricted to those options. The --pp option causes output to - be displayed in a form that may be reused as input. Other op- + is restricted to those options. The --pp option causes output to + be displayed in a form that may be reused as input. Other op- tions 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- @@ -5804,12 +5988,14 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS The list of sshhoopptt options is: - aassssoocc__eexxppaanndd__oonnccee + aarrrraayy__eexxppaanndd__oonnccee If set, the shell suppresses multiple evaluation of as- - sociative array subscripts during arithmetic expression - evaluation, while executing builtins that can perform - variable assignments, and while executing builtins that - perform array dereferencing. + sociative and indexed array subscripts during arithmetic + expression evaluation, while executing builtins that can + perform variable assignments, and while executing + builtins that perform array dereferencing. + aassssoocc__eexxppaanndd__oonnccee + Deprecated; a synonym for aarrrraayy__eexxppaanndd__oonnccee. aauuttooccdd If set, a command name that is the name of a directory is executed as if it were the argument to the ccdd com- mand. This option is only used by interactive shells. @@ -5818,7 +6004,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 filename is printed, and the com- @@ -5826,14 +6012,14 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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. cchheecckkjjoobbss If set, bbaasshh lists the status of any stopped and running jobs before exiting an interactive shell. If any jobs are running, this causes the exit to be deferred until a - second exit is attempted without an intervening command + second exit is attempted without an intervening command (see JJOOBB CCOONNTTRROOLL above). The shell always postpones ex- iting if any jobs are stopped. cchheecckkwwiinnssiizzee @@ -5861,70 +6047,70 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS If set, bbaasshh quotes all shell metacharacters in file- names and directory names when performing completion. If not set, bbaasshh removes metacharacters such as the dol- - lar 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 ex- - pand 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 back- - slashes to quote completed filenames. This variable is - set by default, which is the default bash behavior in + lar 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 ex- + pand 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 back- + slashes to quote completed filenames. This variable is + set by default, which is the default bash behavior in versions through 4.2. ddiirreexxppaanndd - If set, bbaasshh replaces directory names with the results - of word expansion when performing filename completion. - This changes the contents of the readline editing buf- - fer. If not set, bbaasshh attempts to preserve what the + If set, bbaasshh replaces directory names with the results + of word expansion when performing filename completion. + This changes the contents of the readline editing + buffer. If not set, bbaasshh attempts to preserve what the user typed. ddiirrssppeellll - If set, bbaasshh attempts spelling correction on directory - names during word completion if the directory name ini- + If set, bbaasshh attempts spelling correction on directory + names during word completion if the directory name ini- tially supplied does not exist. - ddoottgglloobb If set, bbaasshh includes filenames beginning with a `.' in - the results of pathname expansion. The filenames ````..'''' - and ````....'''' must always be matched explicitly, even if - ddoottgglloobb is set. + ddoottgglloobb If set, bbaasshh includes filenames beginning with a "." in + the results of pathname expansion. The filenames "." + and ".." must always be matched explicitly, even if ddoott-- + gglloobb is set. 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 at shell invocation, or in a shell startup file, arrange to execute the debugger profile before the shell - starts, identical to the ----ddeebbuuggggeerr option. If set af- - ter invocation, behavior intended for use by debuggers + starts, identical to the ----ddeebbuuggggeerr option. If set af- + ter invocation, 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), the shell + 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), the shell simulates a call to rreettuurrnn. - 44.. BBAASSHH__AARRGGCC and BBAASSHH__AARRGGVV are updated as described + 44.. BBAASSHH__AARRGGCC and BBAASSHH__AARRGGVV are updated as described in their descriptions above). - 55.. Function tracing is enabled: command substitu- + 55.. Function tracing is enabled: command substitu- tion, shell functions, and subshells invoked with (( _c_o_m_m_a_n_d )) inherit the DDEEBBUUGG and RREETTUURRNN traps. @@ -5936,17 +6122,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 de- scription of FFIIGGNNOORREE. This option is enabled by de- @@ -5963,13 +6149,13 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS gglloobbsskkiippddoottss If set, pathname expansion will never match the file- - names ````..'''' and ````....'''', even if the pattern begins with - a ````..''''. This option is enabled by default. + names "." and "..", even if the pattern begins with a + ".". This option is enabled by default. gglloobbssttaarr If set, the pattern **** used in a pathname expansion con- - text will match all files and zero or more directories - and subdirectories. If the pattern is followed by a //, + text will match all files and zero or more directories + and subdirectories. If the pattern is followed by a //, only directories and subdirectories match. ggnnuu__eerrrrffmmtt @@ -5982,20 +6168,20 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS its, 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 @@ -6010,12 +6196,12 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 op- + and all remaining characters on that line to be ignored + in an interactive shell (see CCOOMMMMEENNTTSS above). This op- tion is enabled by default. llaassttppiippee - If set, and job control is not active, the shell runs + If set, and job control is not active, the shell runs the last command of a pipeline not executed in the back- ground in the current shell environment. @@ -6043,9 +6229,9 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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- - played. + been accessed since the last time it was checked, bbaasshh + displays the message "The mail in _m_a_i_l_f_i_l_e has been + read". nnoo__eemmppttyy__ccmmdd__ccoommpplleettiioonn If set, and rreeaaddlliinnee is being used, bbaasshh will not at- @@ -6058,21 +6244,21 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS EExxppaannssiioonn above). nnooccaasseemmaattcchh - If set, bbaasshh matches patterns in a case-insensitive + If set, bbaasshh matches patterns in a case-insensitive fashion when performing matching while executing ccaassee or [[[[ conditional commands, when performing pattern substi- - tution word expansions, or when filtering possible com- + tution word expansions, or when filtering possible com- pletions as part of programmable completion. nnooeexxppaanndd__ttrraannssllaattiioonn - If set, bbaasshh encloses the translated results of $"..." - quoting in single quotes instead of double quotes. If + If set, bbaasshh encloses the translated results of $$""..."" + quoting in single quotes instead of double quotes. If the string is not translated, this has no effect. nnuullllgglloobb - If set, bbaasshh allows patterns which match no files (see - PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string, - rather than themselves. + If set, pathname expansion patterns which match no files + (see PPaatthhnnaammee EExxppaannssiioonn above) expand to nothing and are + removed, rather than expanding to themselves. ppaattssuubb__rreeppllaacceemmeenntt If set, bbaasshh expands occurrences of && in the replacement @@ -6094,51 +6280,52 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS pprroommppttvvaarrss If set, prompt strings undergo parameter expansion, com- - mand substitution, arithmetic expansion, and quote re- - moval after being expanded as described in PPRROOMMPPTTIINNGG + mand substitution, arithmetic expansion, and quote re- + moval 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 re- - stricted 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- + The shell sets this option if it is started in re- + stricted 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- 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. vvaarrrreeddiirr__cclloossee - If set, the shell automatically closes file descriptors - assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see RREE-- - DDIIRREECCTTIIOONN above) instead of leaving them open when the + If set, the shell automatically closes file descriptors + assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see + RREEDDIIRREECCTTIIOONN above) instead of leaving them open when the command completes. xxppgg__eecchhoo If set, the eecchhoo builtin expands backslash-escape se- - quences by default. + quences by default. If the ppoossiixx shell option is also + enabled, eecchhoo does not interpret any options. ssuussppeenndd [--ff] - Suspend the execution of this shell until it receives a SSIIGGCCOONNTT - signal. A login shell, or a shell without job control enabled, - cannot be suspended; the --ff option can be used to override this - and force the suspension. The return status is 0 unless the - shell is a login shell or job control is not enabled and --ff is + Suspend the execution of this shell until it receives a SSIIGGCCOONNTT + signal. A login shell, or a shell without job control enabled, + cannot be suspended; the --ff option can be used to override this + and force the suspension. The return status is 0 unless the + shell is a login shell or job control is not enabled and --ff is not supplied. tteesstt _e_x_p_r [[ _e_x_p_r ]] Return a status of 0 (true) or 1 (false) depending on the evalu- - ation of the conditional expression _e_x_p_r. Each operator and op- - erand must be a separate argument. Expressions are composed of - the primaries described above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS. + ation 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. tteesstt does not accept any options, nor does it accept and ignore an argument of ---- as signifying the end of options. @@ -6165,9 +6352,9 @@ 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. @@ -6195,109 +6382,131 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS wise, the expression is parsed and evaluated 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. - When used with tteesstt or [[, the << and >> operators sort lexico- - graphically using ASCII ordering. + When the shell is in _p_o_s_i_x _m_o_d_e, or if the expression is part of + the [[[[ command, the << and >> operators sort using the current lo- + cale. If the shell is not in _p_o_s_i_x _m_o_d_e, the tteesstt and [[ com- + mands sort lexicographically using ASCII ordering. - 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 re- - ceives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a sin- - gle _s_i_g_s_p_e_c) or --, each specified signal is reset to its origi- - nal 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 com- - mands associated with each signal. The --ll option causes the - shell to print a list of signal names and their corresponding - 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 SSIIGG 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 exe- - cuted 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 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. - - If a _s_i_g_s_p_e_c is EERRRR, the command _a_r_g is executed whenever a + ttrraapp [--llpp] [[_a_c_t_i_o_n] _s_i_g_s_p_e_c ...] + The _a_c_t_i_o_n is a command that is read and executed when the shell + receives signal(s) _s_i_g_s_p_e_c. If _a_c_t_i_o_n 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_c_t_i_o_n 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 in- + vokes. + + If no arguments are supplied, ttrraapp displays the actions associ- + ated with each trapped signal as a set of ttrraapp commands that can + be reused as shell input to restore the current signal disposi- + tions. If --pp is given, and _a_c_t_i_o_n is not present, then ttrraapp + displays the actions associated with each _s_i_g_s_p_e_c or, if none + are supplied, for all trapped signals, as a set of ttrraapp commands + that can be reused as shell input to restore the current signal + dispositions. The --PP option behaves similarly, but displays + only the actions associated with each _s_i_g_s_p_e_c argument. --PP re- + quires at least one _s_i_g_s_p_e_c argument. The --PP or --pp options to + ttrraapp may be used in a subshell environment (e.g., command sub- + stitution) and, as long as they are used before ttrraapp is used to + change a signal's handling, will display the state of its par- + ent's traps. + + The --ll option causes ttrraapp to print a list of signal names and + their corresponding 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 SSIIGG prefix is optional. + + If a _s_i_g_s_p_e_c is EEXXIITT (0) the command _a_c_t_i_o_n is executed on exit + from the shell. If a _s_i_g_s_p_e_c is DDEEBBUUGG, the command _a_c_t_i_o_n 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, (( arithmetic command, [[ conditional command, + arithmetic _f_o_r command, and before the first command executes in + a shell function (see SSHHEELLLL GGRRAAMMMMAARR above). Refer to the de- + scription of the eexxttddeebbuugg option to the sshhoopptt builtin for de- + tails of its effect on the DDEEBBUUGG trap. If a _s_i_g_s_p_e_c is RREETTUURRNN, + the command _a_c_t_i_o_n is executed each time a shell function or a + script executed with the .. or ssoouurrccee builtins finishes execut- + ing. + + If a _s_i_g_s_p_e_c is EERRRR, the command _a_c_t_i_o_n is executed whenever a pipeline (which may consist of a single simple command), a list, or a compound command returns a non-zero exit status, subject to - the following conditions. The EERRRR trap is not executed if the + 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 command executed in a &&&& or |||| list except the command - following the final &&&& or ||||, any command in a pipeline but the - last, or if the command's return value is being inverted using + following the final &&&& or ||||, any command in a pipeline but the + last, or if the command's return value is being inverted using !!. These are the same conditions obeyed by the eerrrreexxiitt (--ee) op- tion. - Signals ignored upon entry to the shell cannot be trapped or re- - set. Trapped signals that are not being ignored are reset to - their original values in a subshell or subshell environment when - one is created. The return status is false if any _s_i_g_s_p_e_c is - invalid; otherwise ttrraapp returns true. + When the shell is not interactive, signals ignored upon entry to + the shell cannot be trapped or reset. Interactive shells permit + trapping signals ignored on entry. Trapped signals that are not + being ignored are reset to their original values in a subshell + or subshell environment when one is created. The return status + is false if any _s_i_g_s_p_e_c is invalid; otherwise ttrraapp returns true. + + ttrruuee Does nothing, returns a 0 status. ttyyppee [--aaffttppPP] _n_a_m_e [_n_a_m_e ...] 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 re- - turned. 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 specified - as a command name, or nothing if ``type -t name'' would not re- - turn _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, which is not necessar- - ily 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 - function lookup, as with the ccoommmmaanndd builtin. ttyyppee returns true - if all of the arguments are found, false if any are not found. + 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 executable disk file, respectively. If the _n_a_m_e is + not found, then nothing is printed, and ttyyppee returns a non-zero + exit status. If the --pp option is used, ttyyppee either returns the + name of the executable file that would be found by searching + $$PPAATTHH if _n_a_m_e were specified 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, even if "type -t name" would not re- + turn _f_i_l_e. If a command is hashed, --pp and --PP print the hashed + value, which is not necessarily the file that appears first in + PPAATTHH. If the --aa option is used, ttyyppee prints all of the places + that contain a command named _n_a_m_e. This includes aliases, re- + served words, functions, and builtins, but the path search op- + tions (--pp and --PP) can be supplied to restrict the output to exe- + cutable files. ttyyppee does not consult the table of hashed com- + mands when using --aa with --pp, and only performs a PPAATTHH search for + _n_a_m_e. The --ff option suppresses shell function lookup, as with + the ccoommmmaanndd builtin. ttyyppee returns true if all of the arguments + are found, false if any are not found. uulliimmiitt [--HHSS] --aa uulliimmiitt [--HHSS] [--bbccddeeffiikkllmmnnppqqrrssttuuvvxxPPRRTT [_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. The --HH and --SS options specify that the hard or soft limit is set - for the given resource. A hard limit cannot be increased by a - non-root user once it is set; a soft limit may be increased up - to the value of the hard limit. If neither --HH nor --SS is speci- + for the given resource. A hard limit cannot be increased by a + non-root user once it is set; a soft limit may be increased up + to the value of the hard limit. If neither --HH nor --SS is speci- fied, 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, re- spectively. 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, if appropriate, are printed before the value. Other op- + When more than one resource is specified, the limit name and + unit, if appropriate, are printed before the value. Other op- tions are interpreted as follows: --aa All current limits are reported; no limits are set --bb The maximum socket buffer size --cc The maximum size of core files created --dd The maximum size of a process's data segment - --ee The maximum scheduling priority ("nice") - --ff The maximum size of files written by the shell and its + --ee The maximum scheduling priority ("nice"). + --ff The maximum size of files written by the shell and its children --ii The maximum number of pending signals --kk The maximum number of kqueues that may be allocated --ll The maximum size that may be locked into memory - --mm The maximum resident set size (many systems do not honor + --mm The maximum resident set size (many systems do not honor this limit) --nn The maximum number of open file descriptors (most systems do not allow this value to be set) @@ -6328,23 +6537,23 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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] [-nn] [_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 the --vv option is given, each _n_a_m_e refers to a shell variable, and that variable is removed. Read-only variables may not be unset. If --ff is specified, each _n_a_m_e refers to a shell func- @@ -6363,16 +6572,16 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS sequently reset. The exit status is true unless a _n_a_m_e is read- only or may not be unset. - wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_i_d _._._.] + wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_i_d ...] Wait for each specified child process and return its termination - status. Each _i_d 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 _i_d is not given, wwaaiitt waits for all running - background jobs and the last-executed process substitution, if + status. Each _i_d 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 _i_d is not given, wwaaiitt waits for all running + background jobs and the last-executed process substitution, if its process id is the same as $$!!, and the return status is zero. If the --nn option is supplied, wwaaiitt waits for a single job from the list of _i_ds or, if no _i_ds are supplied, any job, to complete - and returns its exit status. If none of the supplied arguments + and returns its exit status. If none of the supplied arguments is a child of the shell, or if no arguments are supplied and the shell has no unwaited-for children, the exit status is 127. If the --pp option is supplied, the process or job identifier of the @@ -6382,33 +6591,33 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS only when the --nn option is supplied. Supplying the --ff option, when job control is enabled, forces wwaaiitt to wait for _i_d to ter- minate before returning its status, instead of returning when it - changes status. If _i_d specifies a non-existent process or job, - the return status is 127. If wwaaiitt is interrupted by a signal, - the return status will be greater than 128, as described under - SSIIGGNNAALLSS above. Otherwise, the return status is the exit status + changes status. If _i_d specifies a non-existent process or job, + the return status is 127. If wwaaiitt is interrupted by a signal, + the return status will be greater than 128, as described under + SSIIGGNNAALLSS above. Otherwise, the return status is the exit status of the last process or job waited for. SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE - Bash-4.0 introduced the concept of a _s_h_e_l_l _c_o_m_p_a_t_i_b_i_l_i_t_y _l_e_v_e_l, speci- - fied as a set of options to the shopt builtin ( ccoommppaatt3311, ccoommppaatt3322, - ccoommppaatt4400, ccoommppaatt4411, and so on). There is only one current compatibil- - ity level -- each option is mutually exclusive. The compatibility - level is intended to allow users to select behavior from previous ver- - sions that is incompatible with newer versions while they migrate - scripts to use current features and behavior. It's intended to be a - temporary solution. - - This section does not mention behavior that is standard for a particu- - lar version (e.g., setting ccoommppaatt3322 means that quoting the rhs of the - regexp matching operator quotes special regexp characters in the word, + Bash-4.0 introduced the concept of a _s_h_e_l_l _c_o_m_p_a_t_i_b_i_l_i_t_y _l_e_v_e_l, speci- + fied as a set of options to the shopt builtin (ccoommppaatt3311, ccoommppaatt3322, ccoomm-- + ppaatt4400, ccoommppaatt4411, and so on). There is only one current compatibility + level -- each option is mutually exclusive. The compatibility level is + intended to allow users to select behavior from previous versions that + is incompatible with newer versions while they migrate scripts to use + current features and behavior. It's intended to be a temporary solu- + tion. + + This section does not mention behavior that is standard for a particu- + lar version (e.g., setting ccoommppaatt3322 means that quoting the rhs of the + regexp matching operator quotes special regexp characters in the word, which is default behavior in bash-3.2 and subsequent versions). - If a user enables, say, ccoommppaatt3322, it may affect the behavior of other - compatibility levels up to and including the current compatibility - level. The idea is that each compatibility level controls behavior - that changed in that version of bbaasshh, but that behavior may have been - present in earlier versions. For instance, the change to use locale- - based comparisons with the [[[[ command came in bash-4.1, and earlier + If a user enables, say, ccoommppaatt3322, it may affect the behavior of other + compatibility levels up to and including the current compatibility + level. The idea is that each compatibility level controls behavior + that changed in that version of bbaasshh, but that behavior may have been + present in earlier versions. For instance, the change to use locale- + based comparisons with the [[[[ command came in bash-4.1, and earlier versions used ASCII-based comparisons, so enabling ccoommppaatt3322 will enable ASCII-based comparisons as well. That granularity may not be suffi- cient for all uses, and as a result users should employ compatibility @@ -6417,16 +6626,16 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE Bash-4.3 introduced a new shell variable: BBAASSHH__CCOOMMPPAATT. The value as- signed to this variable (a decimal version number like 4.2, or an inte- - ger corresponding to the ccoommppaatt_N_N option, like 42) determines the com- + ger corresponding to the ccoommppaatt_N_N option, like 42) determines the com- patibility level. - Starting with bash-4.4, Bash has begun deprecating older compatibility - levels. Eventually, the options will be removed in favor of BBAASSHH__CCOOMM-- + Starting with bash-4.4, bbaasshh has begun deprecating older compatibility + levels. Eventually, the options will be removed in favor of BBAASSHH__CCOOMM-- PPAATT. - Bash-5.0 is the final version for which there will be an individual - shopt option for the previous version. Users should use BBAASSHH__CCOOMMPPAATT on - bash-5.0 and later versions. + Bash-5.0 was the final version for which there will be an individual + shopt option for the previous version. Users should control the compat- + ibility level with BBAASSHH__CCOOMMPPAATT. The following table describes the behavior changes controlled by each compatibility level setting. The ccoommppaatt_N_N tag is used as shorthand for @@ -6441,16 +6650,14 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE ator (=~) has no special effect ccoommppaatt3322 - +o interrupting a command list such as "a ; b ; c" causes - the execution of the next command in the list (in - bash-4.0 and later versions, the shell acts as if it re- - ceived the interrupt, so interrupting one command in a - list aborts the execution of the entire list) + +o the << and >> operators to the [[[[ command do not consider + the current locale when comparing strings; they use ASCII + ordering. ccoommppaatt4400 +o the << and >> operators to the [[[[ command do not consider the current locale when comparing strings; they use ASCII - ordering. Bash versions prior to bash-4.1 use ASCII col- + ordering. BBaasshh versions prior to bash-4.1 use ASCII col- lation and _s_t_r_c_m_p(3); bash-4.1 and later use the current locale's collation sequence and _s_t_r_c_o_l_l(3). @@ -6466,45 +6673,45 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE ccoommppaatt4422 +o the replacement string in double-quoted pattern substitu- - tion does not undergo quote removal, as it does in ver- + tion does not undergo quote removal, as it does in ver- sions after bash-4.2 - +o in posix mode, single quotes are considered special when - expanding the _w_o_r_d portion of a double-quoted parameter - expansion and can be used to quote a closing brace or - other special character (this is part of POSIX interpre- - tation 221); in later versions, single quotes are not + +o in posix mode, single quotes are considered special when + expanding the _w_o_r_d portion of a double-quoted parameter + expansion and can be used to quote a closing brace or + other special character (this is part of POSIX interpre- + tation 221); in later versions, single quotes are not special within double-quoted word expansions ccoommppaatt4433 - +o the shell does not print a warning message if an attempt - is made to use a quoted compound assignment as an argu- - ment to declare (e.g., declare -a foo='(1 2)'). Later + +o the shell does not print a warning message if an attempt + is made to use a quoted compound assignment as an argu- + ment to declare (e.g., declare -a foo='(1 2)'). Later versions warn that this usage is deprecated - +o word expansion errors are considered non-fatal errors - that cause the current command to fail, even in posix - mode (the default behavior is to make them fatal errors + +o word expansion errors are considered non-fatal errors + that cause the current command to fail, even in posix + mode (the default behavior is to make them fatal errors that cause the shell to exit) - +o when executing a shell function, the loop state + +o when executing a shell function, the loop state (while/until/etc.) is not reset, so bbrreeaakk or ccoonnttiinnuuee in that function will break or continue loops in the calling - context. Bash-4.4 and later reset the loop state to pre- + context. Bash-4.4 and later reset the loop state to pre- vent this ccoommppaatt4444 - +o the shell sets up the values used by BBAASSHH__AARRGGVV and - BBAASSHH__AARRGGCC so they can expand to the shell's positional + +o the shell sets up the values used by BBAASSHH__AARRGGVV and + BBAASSHH__AARRGGCC so they can expand to the shell's positional parameters even if extended debugging mode is not enabled - +o a subshell inherits loops from its parent context, so - bbrreeaakk or ccoonnttiinnuuee will cause the subshell to exit. - Bash-5.0 and later reset the loop state to prevent the + +o a subshell inherits loops from its parent context, so + bbrreeaakk or ccoonnttiinnuuee will cause the subshell to exit. + Bash-5.0 and later reset the loop state to prevent the exit - +o variable assignments preceding builtins like eexxppoorrtt and + +o variable assignments preceding builtins like eexxppoorrtt and rreeaaddoonnllyy that set attributes continue to affect variables with the same name in the calling environment even if the shell is not in posix mode ccoommppaatt5500 - +o Bash-5.1 changed the way $$RRAANNDDOOMM is generated to intro- + +o Bash-5.1 changed the way $$RRAANNDDOOMM is generated to intro- duce slightly more randomness. If the shell compatibility level is set to 50 or lower, it reverts to the method from bash-5.0 and previous versions, so seeding the ran- @@ -6521,6 +6728,33 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE scripts @@ and ** differently depending on whether the ar- ray is indexed or associative, and differently than in previous versions. + +o arithmetic commands ( ((((...)))) ) and the expressions in an + arithmetic for statement can be expanded more than once + +o expressions used as arguments to arithmetic operators in + the [[[[ conditional command can be expanded more than once + +o the expressions in substring parameter brace expansion + can be expanded more than once + +o the expressions in the $$((((...)))) word expansion can be ex- + panded more than once + +o arithmetic expressions used as indexed array subscripts + can be expanded more than once + +o tteesstt --vv, when given an argument of AA[[@@]], where AA is an + existing associative array, will return true if the array + has any set elements. Bash-5.2 will look for and report + on a key named @@. + +o the ${_p_a_r_a_m_e_t_e_r[[::]]==_v_a_l_u_e} word expansion will return + _v_a_l_u_e, before any variable-specific transformations have + been performed (e.g., converting to lowercase). Bash-5.2 + will return the final value assigned to the variable. + +o Parsing command substitutions will behave as if extended + globbing (see the description of the sshhoopptt builtin above) + is enabled, so that parsing a command substitution con- + taining an extglob pattern (say, as part of a shell func- + tion) will not fail. This assumes the intent is to en- + able extglob before the command is executed and word ex- + pansions are performed. It will fail at word expansion + time if extglob hasn't been enabled by the time the com- + mand is executed. RREESSTTRRIICCTTEEDD SSHHEELLLL If bbaasshh is started with the name rrbbaasshh, or the --rr option is supplied at @@ -6551,21 +6785,21 @@ RREESSTTRRIICCTTEEDD SSHHEELLLL +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at startup - +o redirecting output using the >, >|, <>, >&, &>, and >> redirect- - ion operators + +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 - +o turning off restricted mode with sseett ++rr or sshhoopptt --uu rree-- + +o turning off restricted mode with sseett ++rr or sshhoopptt --uu rree-- ssttrriicctteedd__sshheellll. These restrictions are enforced after any startup files are read. @@ -6578,7 +6812,7 @@ 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 -- http://pubs.opengroup.org/onlinepubs/9699919799/ http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode @@ -6596,10 +6830,10 @@ 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 _~_/_._b_a_s_h___h_i_s_t_o_r_y - The default value of HHIISSTTFFIILLEE, the file in which bash saves the + The default value of HHIISSTTFFIILLEE, the file in which bash saves the command history _~_/_._i_n_p_u_t_r_c Individual _r_e_a_d_l_i_n_e initialization file @@ -6612,7 +6846,7 @@ AAUUTTHHOORRSS chet.ramey@case.edu BBUUGG RREEPPOORRTTSS - If you find a bug in bbaasshh,, you should report it. But first, you should + 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 _f_t_p_:_/_/_f_t_p_._g_n_u_._o_r_g_/_p_u_b_/_g_n_u_/_b_a_s_h_/ and _h_t_t_p_:_/_/_g_i_t_._s_a_v_a_n_- @@ -6620,8 +6854,8 @@ BBUUGG RREEPPOORRTTSS 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 + to mail that as well! You may send suggestions and "philosophical" bug + reports to _b_u_g_-_b_a_s_h_@_g_n_u_._o_r_g or post them to the Usenet newsgroup ggnnuu..bbaasshh..bbuugg. ALL bug reports should include: @@ -6630,9 +6864,9 @@ BBUUGG RREEPPOORRTTSS The hardware and operating system The compiler used to compile A description of the bug behaviour - A short script or `recipe' which exercises the bug + 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 @@ -6648,17 +6882,16 @@ BBUUGGSS Shell builtin commands and functions are not stoppable/restartable. - Compound commands and command sequences of the form `a ; b ; c' are not + Compound commands and command sequences of the form "a ; b ; c" are not handled gracefully when process suspension is attempted. When a process is stopped, the shell immediately executes the next command in the sequence. It suffices to place the sequence of commands between parentheses to force it into a subshell, which may be stopped as a - unit. + unit, or to start the command in the background and immediately bring + it into the foreground. Array variables may not (yet) be exported. There may be only one active coprocess at a time. - - -GNU Bash 5.2 2022 September 19 BASH(1) +GNU Bash 5.3 2024 March 29 _B_A_S_H(1) diff --git a/doc/bash.1 b/doc/bash.1 index 55c562208..35ff16cc9 100644 --- a/doc/bash.1 +++ b/doc/bash.1 @@ -5,12 +5,14 @@ .\" Case Western Reserve University .\" chet.ramey@case.edu .\" -.\" Last Change: Mon Sep 19 11:13:21 EDT 2022 +.\" Last Change: Fri Mar 29 11:54:22 EDT 2024 .\" .\" bash_builtins, strip all but Built-Ins section +.\" avoid a warning about an undefined register +.\" .if !rzY .nr zY 0 .if \n(zZ=1 .ig zZ .if \n(zY=1 .ig zY -.TH BASH 1 "2022 September 19" "GNU Bash 5.2" +.TH BASH 1 "2024 March 29" "GNU Bash 5.3" .\" .\" There's some problem with having a `@' .\" in a tagged paragraph with the BSD man macros. @@ -37,11 +39,45 @@ .\" .}f .\" .. .\" +.ie \n(.g \{\ +.ds ' \(aq +.ds " \(dq +.ds ^ \(ha +.ds ~ \(ti +.\} +.el \{\ +.ds ' ' +.\" not usable in macro arguments on AT&T troff (DWB, Solaris 10) +.ds " ""\" two adjacent quotes and no space before this comment +.ds ^ ^ +.ds ~ ~ +.\} +. .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. +.\" \% at the beginning of the string protects the filename from hyphenation. .\" .de FN -\fI\|\\$1\|\fP +\%\fI\|\\$1\|\fP +.. +.\" +.\" Quotation macro: generate consistent quoted strings that don't rely +.\" on the presence of the `CW' constant-width font. +.\" +.de Q +.ie \n(.g \(lq\\$1\(rq\\$2 +.el \{\ +. if t ``\\$1''\\$2 +. if n "\\$1"\\$2 +.\} +.. +.\" Q but disallowing hyphenation of the string +.de QN +.ie \n(.g \%\(lq\\$1\(rq\\$2 +.el \{\ +. if t \%``\\$1''\\$2 +. if n \%"\\$1"\\$2 +.\} .. .SH NAME bash \- GNU Bourne-Again SHell @@ -50,16 +86,17 @@ bash \- GNU Bourne-Again SHell [options] [command_string | file] .SH COPYRIGHT -.if n Bash is Copyright (C) 1989-2022 by the Free Software Foundation, Inc. -.if t Bash is Copyright \(co 1989-2022 by the Free Software Foundation, Inc. +.if n Bash is Copyright (C) 1989-2023 by the Free Software Foundation, Inc. +.if t Bash is Copyright \(co 1989-2023 by the Free Software Foundation, Inc. .SH DESCRIPTION .B Bash -is an \fBsh\fR-compatible command language interpreter that +is an \fBsh\fP-compatible command language interpreter that executes commands read from the standard input or from a file. .B Bash also incorporates useful features from the \fIKorn\fP and \fIC\fP shells (\fBksh\fP and \fBcsh\fP). .PP +POSIX is the name for a family of computing standards based on Unix. .B Bash is intended to be a conformant implementation of the Shell and Utilities portion of the IEEE POSIX specification @@ -68,9 +105,9 @@ Shell and Utilities portion of the IEEE POSIX specification can be configured to be POSIX-conformant by default. .SH OPTIONS All of the single-character shell options documented in the -description of the \fBset\fR builtin command, including \fB\-o\fP, +description of the \fBset\fP builtin command, including \fB\-o\fP, can be used as options when the shell is invoked. -In addition, \fBbash\fR +In addition, \fBbash\fP interprets the following options when it is invoked: .PP .PD 0 @@ -149,7 +186,9 @@ A signals the end of options and disables further option processing. Any arguments after the .B \-\- -are treated as filenames and arguments. An argument of +are treated as a shell script filename (see below) +and arguments passed to that script. +An argument of .B \- is equivalent to \fB\-\-\fP. .PD @@ -188,7 +227,7 @@ Display a usage message on standard output and exit successfully. Execute commands from .I file instead of the standard personal initialization file -.I ~/.bashrc +.I \*~/.bashrc if the shell is interactive (see .SM .B INVOCATION @@ -206,10 +245,10 @@ library to read command lines when the shell is interactive. Do not read either the system-wide startup file .FN /etc/profile or any of the personal initialization files -.IR ~/.bash_profile , -.IR ~/.bash_login , +.IR \*~/.bash_profile , +.IR \*~/.bash_login , or -.IR ~/.profile . +.IR \*~/.profile . By default, .B bash reads these files when it is invoked as a login shell (see @@ -219,7 +258,7 @@ below). .TP .B \-\-norc Do not read and execute the personal initialization file -.I ~/.bashrc +.I \*~/.bashrc if the shell is interactive. This option is on by default if the shell is invoked as .BR sh . @@ -253,7 +292,7 @@ If arguments remain after option processing, and neither the nor the .B \-s option has been supplied, the first argument is assumed to -be the name of a file containing shell commands. +be the name of a file containing shell commands (a \fIshell script\fP). If .B bash is invoked in this fashion, @@ -318,8 +357,8 @@ is invoked as an interactive login shell, or as a non-interactive shell with the \fB\-\-login\fP option, it first reads and executes commands from the file \fI/etc/profile\fP, if that file exists. -After reading that file, it looks for \fI~/.bash_profile\fP, -\fI~/.bash_login\fP, and \fI~/.profile\fP, in that order, and reads +After reading that file, it looks for \fI\*~/.bash_profile\fP, +\fI\*~/.bash_login\fP, and \fI\*~/.profile\fP, in that order, and reads and executes commands from the first one that exists and is readable. The .B \-\-noprofile @@ -328,18 +367,18 @@ option may be used when the shell is started to inhibit this behavior. When an interactive login shell exits, or a non-interactive login shell executes the \fBexit\fP builtin command, .B bash -reads and executes commands from the file \fI~/.bash_logout\fP, if it +reads and executes commands from the file \fI\*~/.bash_logout\fP, if it exists. .PP When an interactive shell that is not a login shell is started, .B bash -reads and executes commands from \fI~/.bashrc\fP, if that file exists. +reads and executes commands from \fI\*~/.bashrc\fP, if that file exists. This may be inhibited by using the .B \-\-norc option. The \fB\-\-rcfile\fP \fIfile\fP option will force .B bash -to read and execute commands from \fIfile\fP instead of \fI~/.bashrc\fP. +to read and execute commands from \fIfile\fP instead of \fI\*~/.bashrc\fP. .PP When .B bash @@ -351,12 +390,13 @@ in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. .B Bash behaves as if the following command were executed: -.sp .5 +.PP .RS -.if t \f(CWif [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi\fP -.if n if [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi +.EX +if [ \-n \*"$BASH_ENV\*" ]; then . \*"$BASH_ENV\*"; fi +.EE .RE -.sp .5 +.PP but the value of the .SM .B PATH @@ -375,7 +415,7 @@ shell with the \fB\-\-login\fP option, it first attempts to read and execute commands from .I /etc/profile and -.IR ~/.profile , +.IR \*~/.profile , in that order. The .B \-\-noprofile @@ -426,7 +466,7 @@ or the secure shell daemon \fIsshd\fP. If .B bash determines it is being run non-interactively in this fashion, -it reads and executes commands from \fI~/.bashrc\fP, +it reads and executes commands from \fI\*~/.bashrc\fP, if that file exists and is readable. It will not do this if invoked as \fBsh\fP. The @@ -509,7 +549,8 @@ command (only \fBin\fP and \fBdo\fP are valid): .if t .RS .PP .B -.if n ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]] +.if n ! case coproc do done elif else esac fi for function if in select \ +then until while { } time [[ ]] .if t ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]] .if t .RE .SH "SHELL GRAMMAR" @@ -532,7 +573,7 @@ or \fB|&\fP. The format for a pipeline is: .RS .PP -[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand1\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ] +[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand1\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP .\|.\|.\& ] .RE .PP The standard output of @@ -570,7 +611,8 @@ system time consumed by its execution are reported when the pipeline terminates. The \fB\-p\fP option changes the output format to that specified by POSIX. When the shell is in \fIposix mode\fP, it does not recognize -\fBtime\fP as a reserved word if the next token begins with a `-'. +\fBtime\fP as a reserved word if the next token begins with a +.Q \- . The .SM .B TIMEFORMAT @@ -588,8 +630,7 @@ total user and system time consumed by the shell and its children. The .SM .B TIMEFORMAT -variable may be used to specify the format of -the time information. +variable specifies the format of the time information. .PP Each command in a multi-command pipeline, where pipes are created, @@ -712,6 +753,7 @@ but double quote characters in \fIexpression\fP are not treated specially and are removed. .TP \fB[[\fP \fIexpression\fP \fB]]\fP +.PD Return a status of 0 or 1 depending on the evaluation of the conditional expression \fIexpression\fP. Expressions are composed of the primaries described below under @@ -725,12 +767,10 @@ substitution, and quote removal on those words (the expansions that would occur if the words were enclosed in double quotes). Conditional operators such as \fB\-f\fP must be unquoted to be recognized as primaries. -.if t .sp 0.5 -.if n .sp 1 +.IP When used with \fB[[\fP, the \fB<\fP and \fB>\fP operators sort lexicographically using the current locale. -.if t .sp 0.5 -.if n .sp 1 +.IP When the \fB==\fP and \fB!=\fP operators are used, the string to the right of the operator is considered a pattern and matched according to the rules described below under \fBPattern Matching\fP, @@ -744,14 +784,14 @@ The return value is 0 if the string matches (\fB==\fP) or does not match (\fB!=\fP) the pattern, and 1 otherwise. Any part of the pattern may be quoted to force the quoted portion to be matched as a string. -.if t .sp 0.5 -.if n .sp 1 -An additional binary operator, \fB=~\fP, is available, with the same +.IP +An additional binary operator, \fB=\*~\fP, is available, with the same precedence as \fB==\fP and \fB!=\fP. When it is used, the string to the right of the operator is considered a POSIX extended regular expression and matched accordingly (using the POSIX \fIregcomp\fP and \fIregexec\fP interfaces -usually described in \fIregex\fP(3)). +usually described in +.IR regex (3)). The return value is 0 if the string matches the pattern, and 1 otherwise. If the regular expression is syntactically incorrect, the conditional @@ -768,10 +808,9 @@ expansion forces the entire pattern to be matched literally. Treat bracket expressions in regular expressions carefully, since normal quoting and pattern characters lose their meanings between brackets. -.if t .sp 0.5 -.if n .sp 1 +.IP The pattern will match if it matches any part of the string. -Anchor the pattern using the \fB^\fP and \fB$\fP regular expression +Anchor the pattern using the \fB\*^\fP and \fB$\fP regular expression operators to force it to match the entire string. The array variable .SM @@ -791,17 +830,15 @@ indices. The element of .B BASH_REMATCH with index \fIn\fP is the portion of the string matching the \fIn\fPth parenthesized subexpression. -Bash sets +\fBBash\fP sets .SM .B BASH_REMATCH in the global scope; declaring it as a local variable will lead to unexpected results. -.if t .sp 0.5 -.if n .sp 1 +.IP Expressions may be combined using the following operators, listed in decreasing order of precedence: -.if t .sp 0.5 -.if n .sp 1 +.IP .RS .PD 0 .TP @@ -835,7 +872,7 @@ operators do not evaluate \fIexpression2\fP if the value of the entire conditional expression. .RE .TP -\fBfor\fP \fIname\fP [ [ \fBin\fP [ \fIword ...\fP ] ] ; ] \fBdo\fP \fIlist\fP ; \fBdone\fP +\fBfor\fP \fIname\fP [ [ \fBin\fP [ \fIword .\|.\|.\&\fP ] ] ; ] \fBdo\fP \fIlist\fP ; \fBdone\fP The list of words following \fBin\fP is expanded, generating a list of items. The variable \fIname\fP is set to each element of this list @@ -898,7 +935,8 @@ is the exit status of the last command executed in or zero if no commands were executed. .TP \fBcase\fP \fIword\fP \fBin\fP [ [(] \fIpattern\fP [ \fB|\fP \fIpattern\fP ] \ -... ) \fIlist\fP ;; ] ... \fBesac\fP +.\|.\|.\& ) \fIlist\fP ;; ] .\|.\|.\& \ +\fBesac\fP A \fBcase\fP command first expands \fIword\fP, and tries to match it against each \fIpattern\fP in turn, using the matching rules described under @@ -928,7 +966,7 @@ pattern matches. Otherwise, it is the exit status of the last command executed in \fIlist\fP. .TP \fBif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; \ -[ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] ... \ +[ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] .\|.\|.\& \ [ \fBelse\fP \fIlist\fP; ] \fBfi\fP The .B if @@ -1134,7 +1172,7 @@ retains its special meaning only when followed by one of the following characters: .BR $ , .BR \` , -\^\fB"\fP\^, +\^\fB\*"\fP\^, .BR \e , or .BR . @@ -1157,7 +1195,7 @@ quotes (see .B PARAMETERS below). .PP -Character sequences of the form \fB$\fP\(aq\fIstring\fP\(aq are treated +Character sequences of the form \fB$\fP\*'\fIstring\fP\*' are treated as a special variant of single quotes. The sequence expands to \fIstring\fP, with backslash-escaped characters in \fIstring\fP replaced as specified by the ANSI C standard. @@ -1194,10 +1232,10 @@ vertical tab .B \e\e backslash .TP -.B \e\(aq +.B \e\*' single quote .TP -.B \e\(dq +.B \e\*" double quote .TP .B \e? @@ -1227,7 +1265,7 @@ a control-\fIx\fP character The expanded result is single-quoted, as if the dollar sign had not been present. .PP -A double-quoted string preceded by a dollar sign (\fB$\fP\(dq\fIstring\fP\(dq) +A double-quoted string preceded by a dollar sign (\fB$\fP\*"\fIstring\fP\*") will cause the string to be translated according to the current locale. The \fIgettext\fP infrastructure performs the lookup and translation, using the \fBLC_MESSAGES\fP, \fBTEXTDOMAINDIR\fP, @@ -1245,7 +1283,7 @@ See the description of .B shopt below under .SM -.BR SHELL BUILTIN COMMANDS . +.BR "SHELL BUILTIN COMMANDS" . .SH PARAMETERS A .I parameter @@ -1297,8 +1335,9 @@ below). If the variable has its .B integer attribute set, then .I value -is evaluated as an arithmetic expression even if the $((...)) expansion is -not used (see +is evaluated as an arithmetic expression even if the +.BR $(( .\|.\|.\& )) +expansion is not used (see .B "Arithmetic Expansion" below). Word splitting and pathname expansion are not performed. @@ -1347,12 +1386,13 @@ A nameref is commonly used within shell functions to refer to a variable whose name is passed as an argument to the function. For instance, if a variable name is passed to a shell function as its first argument, running -.sp .5 +.PP .RS -.if t \f(CWdeclare -n ref=$1\fP -.if n declare -n ref=$1 +.EX +declare \-n ref=$1 +.EE .RE -.sp .5 +.PP inside the function creates a nameref variable \fBref\fP whose value is the variable name passed as the first argument. References and assignments to \fBref\fP, and changes to its attributes, @@ -1403,8 +1443,12 @@ When the expansion occurs within double quotes, it expands to a single word with the value of each parameter separated by the first character of the .SM .B IFS -special variable. That is, "\fB$*\fP" is equivalent -to "\fB$1\fP\fIc\fP\fB$2\fP\fIc\fP\fB...\fP", where +special variable. +That is, +.B \*"$*\*" +is equivalent to +.BR \*"$1\fIc\fP$2\fIc\fP.\|.\|.\*" , +where .I c is the first character of the value of the .SM @@ -1426,15 +1470,19 @@ quotes, these words are subject to word splitting. In contexts where word splitting is not performed, this expands to a single word with each positional parameter separated by a space. -When the -expansion occurs within double quotes, each parameter expands to a -separate word. That is, "\fB$@\fP" is equivalent to -"\fB$1\fP" "\fB$2\fP" ... +When the expansion occurs within double quotes, +each parameter expands to a separate word. +That is, +.B \&\*"$@\*" +is equivalent to +.B \&\*"\&$1\&\*"\ \*"$2\*"\ .\|.\|. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. -When there are no positional parameters, "\fB$@\fP" and +When there are no positional parameters, +.B \&\*"$@\*" +and .B $@ expand to nothing (i.e., they are removed). .TP @@ -1570,6 +1618,10 @@ builtin below). Setting \fBextdebug\fP after the shell has started to execute a script, or referencing this variable when \fBextdebug\fP is not set, may result in inconsistent values. +Assignments to +.SM +.B BASH_ARGC +have no effect, and it may not be unset. .TP .B BASH_ARGV An array variable containing all of the parameters in the current \fBbash\fP @@ -1591,6 +1643,10 @@ builtin below). Setting \fBextdebug\fP after the shell has started to execute a script, or referencing this variable when \fBextdebug\fP is not set, may result in inconsistent values. +Assignments to +.SM +.B BASH_ARGV +have no effect, and it may not be unset. .TP .B BASH_ARGV0 When referenced, this variable expands to the name of the shell or shell @@ -1637,12 +1693,16 @@ was invoked. \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP is the line number in the source file (\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP) where \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP was called -(or \fB${BASH_LINENO[\fP\fI$i-1\fP\fB]}\fP if referenced within another +(or \fB${BASH_LINENO[\fP\fI$i\-1\fP\fB]}\fP if referenced within another shell function). Use .SM .B LINENO to obtain the current line number. +Assignments to +.SM +.B BASH_LINENO +have no effect, and it may not be unset. .TP .B BASH_LOADABLES_PATH A colon-separated list of directories in which the shell looks for @@ -1651,13 +1711,22 @@ dynamically loadable builtins specified by the command. .TP .B BASH_REMATCH -An array variable whose members are assigned by the \fB=~\fP binary +An array variable whose members are assigned by the \fB=\*~\fP binary operator to the \fB[[\fP conditional command. The element with index 0 is the portion of the string matching the entire regular expression. The element with index \fIn\fP is the portion of the string matching the \fIn\fPth parenthesized subexpression. .TP +.B BASH_MONOSECONDS +Each time this variable is referenced, it expands to the value returned +by the system's monotonic clock, if one is available. +If there is no monotonic clock, this is equivalent to \fBEPOCHSECONDS\fP. +If +.B BASH_MONOSECONDS +is unset, it loses its special properties, even if it is +subsequently reset. +.TP .B BASH_SOURCE An array variable whose members are the source filenames where the corresponding shell function names in the @@ -1668,6 +1737,10 @@ The shell function \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP is defined in the file \fB${BASH_SOURCE[\fP\fI$i\fP\fB]}\fP and called from \fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP. +Assignments to +.SM +.B BASH_SOURCE +have no effect, and it may not be unset. .TP .B BASH_SUBSHELL Incremented by one within each subshell or subshell environment when @@ -1678,12 +1751,20 @@ If is unset, it loses its special properties, even if it is subsequently reset. .TP +.B BASH_TRAPSIG +Set to the signal number corresponding to the trap action being executed +during its execution. +See the description of \fBtrap\fP under +.SM +.B SHELL BUILTIN COMMANDS +below for information about signal numbers and trap execution. +.TP .B BASH_VERSINFO A readonly array variable whose members hold version information for this instance of .BR bash . The values assigned to the array members are as follows: -.sp .5 +.PP .RS .TP 24 .B BASH_VERSINFO[\fR0\fP] @@ -1699,7 +1780,7 @@ The patch level. The build version. .TP .B BASH_VERSINFO[\fR4\fP] -The release status (e.g., \fIbeta1\fP). +The release status (e.g., \fIbeta\fP). .TP .B BASH_VERSINFO[\fR5\fP] The value of @@ -1800,8 +1881,9 @@ subsequently reset. .TP .B EPOCHREALTIME Each time this parameter is referenced, it expands to the number of seconds -since the Unix Epoch (see \fItime\fP\fR(3)\fP) as a floating point value -with micro-second granularity. +since the Unix Epoch (see +.IR time (3)) +as a floating point value with micro-second granularity. Assignments to .SM .B EPOCHREALTIME @@ -1814,7 +1896,8 @@ subsequently reset. .TP .B EPOCHSECONDS Each time this parameter is referenced, it expands to the number of seconds -since the Unix Epoch (see \fItime\fP\fR(3)\fP). +since the Unix Epoch (see +.IR time (3)). Assignments to .SM .B EPOCHSECONDS @@ -1830,13 +1913,13 @@ Expands to the effective user ID of the current user, initialized at shell startup. This variable is readonly. .TP .B FUNCNAME +.PD An array variable containing the names of all shell functions currently in the execution call stack. The element with index 0 is the name of any currently-executing shell function. The bottom-most element (the one with the highest index) is -.if t \f(CW"main"\fP. -.if n "main". +.Q main . This variable exists only when a shell function is executing. Assignments to .SM @@ -1847,8 +1930,7 @@ If .B FUNCNAME is unset, it loses its special properties, even if it is subsequently reset. -.if t .sp 0.5 -.if n .sp 1 +.IP This variable can be used with \fBBASH_LINENO\fP and \fBBASH_SOURCE\fP. Each element of \fBFUNCNAME\fP has corresponding elements in \fBBASH_LINENO\fP and \fBBASH_SOURCE\fP to describe the call stack. @@ -1857,6 +1939,7 @@ For instance, \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP was called from the file \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP. The \fBcaller\fP builtin displays the current call stack using this information. +.PD 0 .TP .B GROUPS An array variable containing the list of groups of which the current @@ -1966,7 +2049,7 @@ between 0 and 32767. Assigning a value to .SM -.BR RANDOM +.B RANDOM initializes (seeds) the sequence of random numbers. If .SM @@ -1976,8 +2059,7 @@ subsequently reset. .TP .B READLINE_ARGUMENT Any numeric argument given to a readline command that was defined using -.if t \f(CWbind -x\fP -.if n "bind -x" +.Q "bind \-x" (see .SM .B "SHELL BUILTIN COMMANDS" @@ -1988,8 +2070,7 @@ when it was invoked. The contents of the .B readline line buffer, for use with -.if t \f(CWbind -x\fP -.if n "bind -x" +.Q "bind \-x" (see .SM .B "SHELL BUILTIN COMMANDS" @@ -1999,8 +2080,7 @@ below). The position of the mark (saved insertion point) in the .B readline line buffer, for use with -.if t \f(CWbind -x\fP -.if n "bind -x" +.Q "bind \-x" (see .SM .B "SHELL BUILTIN COMMANDS" @@ -2012,8 +2092,7 @@ called the \fIregion\fP. The position of the insertion point in the .B readline line buffer, for use with -.if t \f(CWbind -x\fP -.if n "bind -x" +.Q "bind \-x" (see .SM .B "SHELL BUILTIN COMMANDS" @@ -2070,7 +2149,11 @@ is started. .B SRANDOM This variable expands to a 32-bit pseudo-random number each time it is referenced. The random number generator is not linear on systems that -support \f(CW/dev/urandom\fP or \fIarc4random\fP, so each returned number +support +.FN /dev/urandom +or +.IR arc4random (3), +so each returned number has no relationship to the numbers preceding it. The random number generator cannot be seeded, so assignments to this variable have no effect. @@ -2106,7 +2189,7 @@ level is set to the default for the current version. If \fBBASH_COMPAT\fP is set to a value that is not one of the valid compatibility levels, the shell prints an error message and sets the compatibility level to the default for the current version. -The valid values correspond to the compatibility levels +A subset of the valid values correspond to the compatibility levels described below under .SM .BR "SHELL COMPATIBILITY MODE" . @@ -2119,7 +2202,7 @@ The current version is also a valid value. If this parameter is set when \fBbash\fP is executing a shell script, its value is interpreted as a filename containing commands to initialize the shell, as in -.IR ~/.bashrc . +.IR \*~/.bashrc . The value of .SM .B BASH_ENV @@ -2132,8 +2215,7 @@ is not used to search for the resultant filename. .B BASH_XTRACEFD If set to an integer corresponding to a valid file descriptor, \fBbash\fP will write the trace output generated when -.if t \f(CWset -x\fP -.if n \fIset -x\fP +.Q "set \-x" is enabled to that file descriptor. The file descriptor is closed when .SM @@ -2160,12 +2242,11 @@ for destination directories specified by the .B cd command. A sample value is -.if t \f(CW".:~:/usr"\fP. -.if n ".:~:/usr". +.Q .:\*~:/usr . .TP .B CHILD_MAX Set the number of exited child status values for the shell to remember. -Bash will not allow this value to be decreased below a POSIX-mandated +\fBBash\fP will not allow this value to be decreased below a POSIX-mandated minimum, and there is a maximum value (currently 8192) that this may not exceed. The minimum value is system-dependent. @@ -2188,8 +2269,7 @@ Each array element contains one possible completion. .B EMACS If \fBbash\fP finds this variable in the environment when the shell starts with value -.if t \f(CWt\fP, -.if n "t", +.Q t , it assumes that the shell is running in an Emacs shell buffer and disables line editing. .TP @@ -2231,8 +2311,7 @@ A filename whose suffix matches one of the entries in .B FIGNORE is excluded from the list of matched filenames. A sample value is -.if t \f(CW".o:~"\fP. -.if n ".o:~". +.Q .o:\*~ . .TP .B FUNCNEST If set to a numeric value greater than 0, defines a maximum function @@ -2248,6 +2327,34 @@ of the patterns in .BR GLOBIGNORE , it is removed from the list of matches. .TP +.B GLOBSORT +Control how the results of pathname expansion are sorted. +The value of this variable specifies the sort criteria and sort order for +the results of pathname expansion. +If this variable is unset or set to the null string, pathname expansion +uses the historical behavior of sorting by name. +If set, a valid value begins with an optional \fI+\fP, which is ignored, +or \fI\-\fP, which reverses the sort order from ascending to descending, +followed by a sort specifier. +The valid sort specifiers are +.IR name , +.IR size , +.IR mtime , +.IR atime , +.IR ctime , +and +.IR blocks , +which sort the files on name, file size, modification time, access time, +inode change time, and number of blocks, respectively. +For example, a value of \fI\-mtime\fP sorts the results in descending +order by modification time (newest first). +A sort specifier of \fInosort\fP disables sorting completely; the results +are returned in the order they are read from the file system,. +If the sort specifier is missing, it defaults to \fIname\fP, +so a value of \fI+\fP is equivalent to the null string, +and a value of \fI-\fP sorts by name in descending order. +Any invalid value restores the historical sorting behavior. +.TP .B HISTCONTROL A colon-separated list of values controlling how commands are saved on the history list. @@ -2284,8 +2391,10 @@ not tested, and are added to the history regardless of the value of The name of the file in which command history is saved (see .SM .B HISTORY -below). The default value is \fI~/.bash_history\fP. If unset, the -command history is not saved when a shell exits. +below). +\fBBash\fP assigns a default value of \fI\*~/.bash_history\fP. +If \fBHISTFILE\fP is unset or null, +the command history is not saved when a shell exits. .TP .B HISTFILESIZE The maximum number of lines contained in the history file. When this @@ -2301,16 +2410,26 @@ after reading any startup files. .TP .B HISTIGNORE A colon-separated list of patterns used to decide which command lines -should be saved on the history list. Each pattern is anchored at the -beginning of the line and must match the complete line (no implicit -`\fB*\fP' is appended). Each pattern is tested against the line +should be saved on the history list. +If a command line matches one of the patterns in the value of +.SM +.BR HISTIGNORE , +it is not saved on the history list. +Each pattern is anchored at the +beginning of the line and must match the complete line +(\fBbash\fP will not implicitly append a +.Q \fB*\fP ). +Each pattern is tested against the line after the checks specified by .SM .B HISTCONTROL are applied. -In addition to the normal shell pattern matching characters, `\fB&\fP' -matches the previous history line. `\fB&\fP' may be escaped using a -backslash; the backslash is removed before attempting a match. +In addition to the normal shell pattern matching characters, +.Q \fB&\fP +matches the previous history line. +A backslash will escape the +.Q \fB&\fP ; +the backslash is removed before attempting a match. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of .SM @@ -2330,7 +2449,9 @@ The shell sets the default value to 500 after reading any startup files. .TP .B HISTTIMEFORMAT If this variable is set and not null, its value is used as a format string -for \fIstrftime\fP(3) to print the time stamp associated with each history +for +.IR strftime (3) +to print the time stamp associated with each history entry displayed by the \fBhistory\fP builtin. If this variable is set, time stamps are written to the history file so they may be preserved across shell sessions. @@ -2373,7 +2494,7 @@ for word splitting after expansion and to split lines into words with the .B read builtin command. The default value is -``''. +.Q . .TP .B IGNOREEOF Controls the @@ -2397,7 +2518,7 @@ signifies the end of input to the shell. The filename for the .B readline startup file, overriding the default of -.FN ~/.inputrc +.FN \*~/.inputrc (see .SM .B READLINE @@ -2471,13 +2592,16 @@ greater than or equal to zero, the shell disables mail checking. .B MAILPATH A colon-separated list of filenames to be checked for mail. The message to be printed when mail arrives in a particular file -may be specified by separating the filename from the message with a `?'. +may be specified by separating the filename from the message with a +.Q ? . When used in the text of the message, \fB$_\fP expands to the name of the current mailfile. Example: .RS .PP -\fBMAILPATH\fP=\(aq/var/mail/bfox?"You have mail":~/shell\-mail?"$_ has mail!"\(aq +.EX +\fBMAILPATH\fP=\*'/var/mail/bfox?\*"You have mail\*":\*~/shell\-mail?\*"$_ has mail!\*"\*' +.EE .PP .B Bash can be configured to supply @@ -2518,8 +2642,7 @@ and is set by the administrator who installs .BR bash . A common value is .na -.if t \f(CW/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin\fP. -.if n ``/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''. +.Q /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin . .ad .TP .B POSIXLY_CORRECT @@ -2528,8 +2651,7 @@ enters \fIposix mode\fP before reading the startup files, as if the .B \-\-posix invocation option had been supplied. If it is set while the shell is running, \fBbash\fP enables \fIposix mode\fP, as if the command -.if t \f(CWset -o posix\fP -.if n \fIset -o posix\fP +.Q "set \-o posix" had been executed. When the shell enters \fIposix mode\fP, it sets this variable if it was not already set. @@ -2538,7 +2660,7 @@ not already set. If this variable is set, and is an array, the value of each set element is executed as a command prior to issuing each primary prompt. -If this is set but not an array variable, +If this is set but not an array variable, its value is used as a command to execute instead. .TP .B PROMPT_DIRTRIM @@ -2561,14 +2683,14 @@ The value of this parameter is expanded (see .SM .B PROMPTING below) and used as the primary prompt string. The default value is -``\fB\es\-\ev\e$ \fP''. +.Q \es\-\ev\e$\ . .TP .B PS2 The value of this parameter is expanded as with .SM .B PS1 and used as the secondary prompt string. The default is -``\fB> \fP''. +.Q >\ . .TP .B PS3 The value of this parameter is used as the prompt for the @@ -2584,12 +2706,14 @@ The value of this parameter is expanded as with .B PS1 and the value is printed before each command .B bash -displays during an execution trace. The first character of -the expanded value of +displays during an execution trace. +The first character of the expanded value of .SM .B PS4 is replicated multiple times, as necessary, to indicate multiple -levels of indirection. The default is ``\fB+ \fP''. +levels of indirection. +The default is +.Q +\ . .TP .B SHELL This variable expands to the full pathname to the shell. @@ -2605,8 +2729,8 @@ reserved word should be displayed. The \fB%\fP character introduces an escape sequence that is expanded to a time value or other information. The escape sequences and their meanings are as follows; the -braces denote optional portions. -.sp .5 +brackets denote optional portions. +.PP .RS .PD 0 .TP 10 @@ -2630,8 +2754,8 @@ The CPU percentage, computed as (%U + %S) / %R. The optional \fIp\fP is a digit specifying the \fIprecision\fP, the number of fractional digits after a decimal point. A value of 0 causes no decimal point or fraction to be output. -At most three places after the decimal point may be specified; -values of \fIp\fP greater than 3 are changed to 3. +At most six places after the decimal point may be specified; +values of \fIp\fP greater than 6 are changed to 6. If \fIp\fP is not specified, the value 3 is used. .IP The optional \fBl\fP specifies a longer format, including @@ -2640,8 +2764,8 @@ The value of \fIp\fP determines whether or not the fraction is included. .IP If this variable is not set, \fBbash\fP acts as if it had the -value \fB$\(aq\enreal\et%3lR\enuser\et%3lU\ensys\et%3lS\(aq\fP. -If the value is null, no timing information is displayed. +value \fB$\*'\enreal\et%3lR\enuser\et%3lU\ensys\et%3lS\*'\fP. +If the value is null, \fBbash\fP does not display any timing information. A trailing newline is added when the format string is displayed. .PD 0 .TP @@ -2701,17 +2825,22 @@ and tokenization (see .B HISTORY EXPANSION below). The first character is the \fIhistory expansion\fP character, the character which signals the start of a history -expansion, normally `\fB!\fP'. +expansion, normally +.Q \fB!\fP . The second character is the \fIquick substitution\fP character, which is used as shorthand for re-running the previous -command entered, substituting one string for another in the command. -The default is `\fB^\fP'. -The optional third character is the character -which indicates that the remainder of the line is a comment when found -as the first character of a word, normally `\fB#\fP'. The history -comment character causes history substitution to be skipped for the -remaining words on the line. It does not necessarily cause the shell -parser to treat the rest of the line as a comment. +command entered, substituting one string for another in the command, +when it appears as the first character on the line. +The default is +.Q \fB\*^\fP . +The optional third character is the character which indicates that +the remainder of the line is a comment when found as the first character +of a word, normally +.Q \fB#\fP . +The history comment character causes history substitution to be skipped +for the remaining words on the line. +It does not necessarily cause the shell parser to treat the rest of the +line as a comment. .PD .SS Arrays .B Bash @@ -2751,13 +2880,17 @@ and builtins. Each attribute applies to all members of an array. .PP Arrays are assigned to using compound assignments of the form -\fIname\fP=\fB(\fPvalue\fI1\fP ... value\fIn\fP\fB)\fP, where each +\fIname\fP=\fB(\fPvalue\fI1\fP .\|.\|.\& value\fIn\fP\fB)\fP, where each \fIvalue\fP may be of the form [\fIsubscript\fP]=\fIstring\fP. Indexed array assignments do not require anything but \fIstring\fP. -Each \fIvalue\fP in the list is expanded using all the shell expansions +Each \fIvalue\fP in the list is expanded using the shell expansions described below under .SM -.BR EXPANSION . +.BR EXPANSION , +but \fIvalue\fPs that are valid variable assignments +including the brackets and subscript do not undergo +brace expansion and word splitting, as with individual +variable assignments. When assigning to indexed arrays, if the optional brackets and subscript are supplied, that index is assigned to; otherwise the index of the element assigned is the last index assigned @@ -2767,9 +2900,10 @@ When assigning to an associative array, the words in a compound assignment may be either assignment statements, for which the subscript is required, or a list of words that is interpreted as a sequence of alternating keys and values: -\fIname\fP=\fB( \fP\fIkey1 value1 key2 value2\fP ...\fB)\fP. +\fIname\fP=\fB( \fP\fIkey1 value1 key2 value2\fP .\|.\|.\&\fB)\fP. These are treated identically to -\fIname\fP=\fB(\fP [\fIkey1\fP]=\fIvalue1\fP [\fIkey2\fP]=\fIvalue2\fP ...\fB)\fP. +\fIname\fP=\fB(\fP [\fIkey1\fP]=\fIvalue1\fP [\fIkey2\fP]=\fIvalue2\fP +\&.\|.\|.\&\fB)\fP. The first word in the list determines how the remaining words are interpreted; all assignments in a list must be of the same type. When using key/value pairs, the keys may not be missing or empty; @@ -2796,7 +2930,9 @@ Any element of an array may be referenced using ${\fIname\fP[\fIsubscript\fP]}. The braces are required to avoid conflicts with pathname expansion. If \fIsubscript\fP is \fB@\fP or \fB*\fP, the word expands to -all members of \fIname\fP. These subscripts differ only when the +all members of \fIname\fP, +unless noted in the description of a builtin or word expansion. +These subscripts differ only when the word appears within double quotes. If the word is double-quoted, ${\fIname\fP[*]} expands to a single word with the value of each array member separated by the first @@ -2826,7 +2962,7 @@ array, and an index of \-1 references the last element. .PP Referencing an array variable without a subscript is equivalent to referencing the array with a subscript of 0. -Any reference to a variable using a valid subscript is legal, and +Any reference to a variable using a valid subscript is valid, and .B bash will create an array if necessary. .PP @@ -2887,22 +3023,24 @@ builtins display array values in a way that allows them to be reused as assignments. .SH EXPANSION Expansion is performed on the command line after it has been split into -words. There are seven kinds of expansion performed: +words. The shell performs these expansions: .IR "brace expansion" , .IR "tilde expansion" , .IR "parameter and variable expansion" , .IR "command substitution" , .IR "arithmetic expansion" , .IR "word splitting" , +.IR "pathname expansion" , and -.IR "pathname expansion" . +.IR "quote removal" . .PP The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; -and pathname expansion. +pathname expansion; +and quote removal. .PP On systems that can support it, there is an additional expansion available: \fIprocess substitution\fP. @@ -2910,15 +3048,19 @@ This is performed at the same time as tilde, parameter, variable, and arithmetic expansion and command substitution. .PP -After these expansions are performed, quote characters present in the -original word are removed unless they have been quoted themselves -(\fIquote removal\fP). +\fIQuote removal\fP is always performed last. +It removes quote characters present in the original word, +not ones resulting from one of the other expansions, +unless they have been quoted themselves. .PP Only brace expansion, word splitting, and pathname expansion can increase the number of words of the expansion; other expansions expand a single word to a single word. The only exceptions to this are the expansions of -"\fB$@\fP" and "\fB${\fP\fIname\fP\fB[@]}\fP", +.B \&\*"$@\*" +and +.B \&\*"${\fIname\fP[@]}\*"\c \" keep leading \& for AT&T troff +.BR \& , \" .BR + \& + \*" doesn't work with AT&T troff and, in most cases, \fB$*\fP and \fB${\fP\fIname\fP\fB[*]}\fP as explained above (see .SM @@ -2941,7 +3083,8 @@ to each resulting string, expanding left to right. .PP Brace expansions may be nested. The results of each expanded string are not sorted; left to right order is preserved. -For example, a\fB{\fPd,c,b\fB}\fPe expands into `ade ace abe'. +For example, a\fB{\fPd,c,b\fB}\fPe expands into +.Q "ade ace abe" . .PP A sequence expression takes the form \fB{\fP\fIx\fP\fB..\fP\fIy\fP\fB[..\fP\fIincr\fP\fB]}\fP, @@ -2949,8 +3092,8 @@ where \fIx\fP and \fIy\fP are either integers or single letters, and \fIincr\fP, an optional increment, is an integer. When integers are supplied, the expression expands to each number between \fIx\fP and \fIy\fP, inclusive. -Supplied integers may be prefixed with \fI0\fP to force each term to have the -same width. +If the supplied integers are prefixed with \fI0\fP, each term will +have the same width, zero-padding if necessary. When either \fIx\fP or \fPy\fP begins with a zero, the shell attempts to force all generated terms to contain the same number of digits, zero-padding where necessary. @@ -3022,7 +3165,9 @@ command (see .B SHELL BUILTIN COMMANDS below). .SS Tilde Expansion -If a word begins with an unquoted tilde character (`\fB~\fP'), all of +If a word begins with an unquoted tilde character (\c +.Q \fB\*~\fP ), +all of the characters preceding the first unquoted slash (or all characters, if there is no unquoted slash) are considered a \fItilde-prefix\fP. If none of the characters in the tilde-prefix are quoted, the @@ -3040,22 +3185,35 @@ substituted instead. Otherwise, the tilde-prefix is replaced with the home directory associated with the specified login name. .PP -If the tilde-prefix is a `~+', the value of the shell variable +If the tilde-prefix is a +.Q \*~+ , +the value of the shell variable .SM .B PWD replaces the tilde-prefix. -If the tilde-prefix is a `~\-', the value of the shell variable +If the tilde-prefix is a +.Q \*~\- , +the value of the shell variable .SM .BR OLDPWD , if it is set, is substituted. If the characters following the tilde in the tilde-prefix consist of a number \fIN\fP, optionally prefixed -by a `+' or a `\-', the tilde-prefix is replaced with the corresponding +by a +.Q + +or a +.Q \- , +the tilde-prefix is replaced with the corresponding element from the directory stack, as it would be displayed by the .B dirs builtin invoked with the tilde-prefix as an argument. If the characters following the tilde in the tilde-prefix consist of a -number without a leading `+' or `\-', `+' is assumed. +number without a leading +.Q + +or +.Q \- , +.Q + +is assumed. .PP If the login name is invalid, or the tilde expansion fails, the word is unchanged. @@ -3076,22 +3234,25 @@ and .BR CDPATH , and the shell assigns the expanded value. .PP -Bash also performs tilde expansion on words satisfying the conditions of -variable assignments (as described above under +\fBBash\fP also performs tilde expansion on words satisfying the conditions +of variable assignments (as described above under .SM .BR PARAMETERS ) when they appear as arguments to simple commands. -Bash does not do this, except for the \fIdeclaration\fP commands listed +\fBBash\fP does not do this, except for the \fIdeclaration\fP commands listed above, when in \fIposix mode\fP. .SS Parameter Expansion -The `\fB$\fP' character introduces parameter expansion, +The +.Q \fB$\fP +character introduces parameter expansion, command substitution, or arithmetic expansion. The parameter name or symbol to be expanded may be enclosed in braces, which are optional but serve to protect the variable to be expanded from characters immediately following it which could be interpreted as part of the name. .PP -When braces are used, the matching ending brace is the first `\fB}\fP' +When braces are used, the matching ending brace is the first +.Q \fB}\fP not escaped by a backslash or within a quoted string, and not within an embedded arithmetic expansion, command substitution, or parameter expansion. @@ -3199,7 +3360,7 @@ and extending to the end of the value. .B ARITHMETIC EVALUATION below). -.sp 1 +.IP If \fIoffset\fP evaluates to a number less than zero, the value is used as an offset in characters from the end of the value of \fIparameter\fP. @@ -3210,15 +3371,15 @@ a number of characters, and the expansion is the characters between \fIoffset\fP and that result. Note that a negative offset must be separated from the colon by at least one space to avoid being confused with the \fB:-\fP expansion. -.sp 1 +.IP If \fIparameter\fP is \fB@\fP or \fB*\fP, the result is \fIlength\fP positional parameters beginning at \fIoffset\fP. A negative \fIoffset\fP is taken relative to one greater than the greatest positional parameter, so an offset of \-1 evaluates to the last positional -parameter. +parameter (or 0 if there are no positional parameters). It is an expansion error if \fIlength\fP evaluates to a number less than zero. -.sp 1 +.IP If \fIparameter\fP is an indexed array name subscripted by @ or *, the result is the \fIlength\fP members of the array beginning with ${\fIparameter\fP[\fIoffset\fP]}. @@ -3226,10 +3387,10 @@ A negative \fIoffset\fP is taken relative to one greater than the maximum index of the specified array. It is an expansion error if \fIlength\fP evaluates to a number less than zero. -.sp 1 +.IP Substring expansion applied to an associative array produces undefined results. -.sp 1 +.IP Substring indexing is zero-based unless the positional parameters are used, in which case the indexing starts at 1 by default. If \fIoffset\fP is 0, and the positional parameters are used, \fB$0\fP is @@ -3305,8 +3466,11 @@ the value of .IR parameter , then the result of the expansion is the expanded value of .I parameter -with the shortest matching pattern (the ``\fB#\fP'' case) or the -longest matching pattern (the ``\fB##\fP'' case) deleted. +with the shortest matching pattern (the +.Q # +case) or the longest matching pattern (the +.Q ## +case) deleted. If .I parameter is @@ -3340,8 +3504,11 @@ If the pattern matches a trailing portion of the expanded value of .IR parameter , then the result of the expansion is the expanded value of .I parameter -with the shortest matching pattern (the ``\fB%\fP'' case) or the -longest matching pattern (the ``\fB%%\fP'' case) deleted. +with the shortest matching pattern (the +.Q % +case) or the longest matching pattern (the +.Q %% +case) deleted. If .I parameter is @@ -3379,7 +3546,7 @@ The match is performed using the rules described under .B Pattern Matching below. In the first form above, only the first match is replaced. -If there are two slashes separating \fIparameter\fP and \fIpattern\fP +If there are two slashes separating \fIparameter\fP and \fIpattern\fP (the second form above), all matches of \fIpattern\fP are replaced with \fIstring\fP. If \fIpattern\fP is preceded by \fB#\fP (the third form above), @@ -3391,11 +3558,11 @@ matches of \fIpattern\fP are deleted. If \fIstring\fP is null, matches of \fIpattern\fP are deleted and the \fB/\fP following \fIpattern\fP may be omitted. -.sp 1 +.IP If the \fBpatsub_replacement\fP shell option is enabled using \fBshopt\fP, any unquoted instances of \fB&\fP in \fIstring\fP are replaced with the matching portion of \fIpattern\fP. -.sp 1 +.IP Quoting any part of \fIstring\fP inhibits replacement in the expansion of the quoted portion, including replacement strings stored in shell variables. @@ -3411,7 +3578,7 @@ expanding \fIstring\fP; shell programmers should quote any occurrences of \fB&\fP they want to be taken literally in the replacement and ensure any instances of \fB&\fP they want to be replaced are unquoted. -.sp 1 +.IP If the .B nocasematch shell option is enabled, the match is performed without regard to the case @@ -3433,10 +3600,10 @@ or the substitution operation is applied to each member of the array in turn, and the expansion is the resultant list. .TP -${\fIparameter\fP\fB^\fP\fIpattern\fP} +${\fIparameter\fP\fB\*^\fP\fIpattern\fP} .PD 0 .TP -${\fIparameter\fP\fB^^\fP\fIpattern\fP} +${\fIparameter\fP\fB\*^\*^\fP\fIpattern\fP} .TP ${\fIparameter\fP\fB,\fP\fIpattern\fP} .TP @@ -3449,11 +3616,11 @@ pathname expansion. Each character in the expanded value of \fIparameter\fP is tested against \fIpattern\fP, and, if it matches the pattern, its case is converted. The pattern should not attempt to match more than one character. -The \fB^\fP operator converts lowercase letters matching \fIpattern\fP +The \fB\*^\fP operator converts lowercase letters matching \fIpattern\fP to uppercase; the \fB,\fP operator converts matching uppercase letters to lowercase. -The \fB^^\fP and \fB,,\fP expansions convert each matched character in the -expanded value; the \fB^\fP and \fB,\fP expansions match and convert only +The \fB\*^\*^\fP and \fB,,\fP expansions convert each matched character in the +expanded value; the \fB\*^\fP and \fB,\fP expansions match and convert only the first character in the expanded value. If \fIpattern\fP is omitted, it is treated like a \fB?\fP, which matches every character. @@ -3479,7 +3646,7 @@ ${\fIparameter\fP\fB@\fP\fIoperator\fP} The expansion is either a transformation of the value of \fIparameter\fP or information about \fIparameter\fP itself, depending on the value of \fIoperator\fP. Each \fIoperator\fP is a single letter: -.sp 1 +.PP .RS .PD 0 .TP @@ -3501,7 +3668,8 @@ format that can be reused as input. .TP .B E The expansion is a string that is the value of \fIparameter\fP with backslash -escape sequences expanded as with the \fB$\(aq...\(aq\fP quoting mechanism. +escape sequences expanded as with the \fB$\*'\fP.\|.\|.\%\fB\*'\fP +quoting mechanism. .TP .B P The expansion is a string that is the result of expanding the value of @@ -3517,6 +3685,7 @@ Produces a possibly-quoted version of the value of \fIparameter\fP, except that it prints the values of indexed and associative arrays as a sequence of quoted key-value pairs (see \fBArrays\fP above). +The keys and values are quoted in a format that can be reused as input. .TP .B a The expansion is a string consisting of flag values representing @@ -3543,20 +3712,21 @@ or .BR * , the operation is applied to each member of the array in turn, and the expansion is the resultant list. -.sp 1 +.PP The result of the expansion is subject to word splitting and pathname expansion as described below. .RE .SS Command Substitution \fICommand substitution\fP allows the output of a command to replace -the command name. There are two forms: +the command itself. +There are two standard forms: .RS .PP \fB$(\fP\fIcommand\fP\|\fB)\fP .RE -or +or (deprecated) .RS -\fB\`\fP\fIcommand\fP\fB\`\fP +\fB\`\fP\fIcommand\fP\fB\`\fP. .RE .PP .B Bash @@ -3568,7 +3738,7 @@ word splitting. The command substitution \fB$(cat \fIfile\fP)\fR can be replaced by the equivalent but faster \fB$(< \fIfile\fP)\fR. .PP -When the old-style backquote form of substitution is used, +With the old-style backquote form of substitution, backslash retains its literal meaning except when followed by .BR $ , .BR \` , @@ -3579,11 +3749,51 @@ command substitution. When using the $(\^\fIcommand\fP\|) form, all characters between the parentheses make up the command; none are treated specially. .PP +There is an alternate form of command substitution: +.RS +.PP +\fB${\fP\fIc\fP \fIcommand\fP\fB;\fP\|\fB}\fP +.RE +.PP +which executes \fIcommand\fP in the current execution environment +and captures its output, again with trailing newlines removed. +.PP +The character \fIc\fP following the open brace must be a space, tab, +newline, or \fB|\fP, and the close brace must be in a position +where a reserved word may appear (i.e., preceded by a command terminator +such as semicolon). +\fBBash\fP allows the close brace to be joined to the remaining characters in +the word without being followed by a shell metacharacter as a reserved +word would usually require. +.PP +Any side effects of \fIcommand\fP take effect immediately +in the current execution environment and persist in the current +environment after the command completes (e.g., the \fBexit\fP builtin +will exit the shell). +.PP +This type of command substitution superficially resembles executing an +unnamed shell function: local variables are created as when a shell +function is executing, and the \fBreturn\fP builtin forces +\fIcommand\fP to complete; +however, the rest of the execution environment, +including the positional parameters, is shared with the caller. +.PP +If the first character following the open brace +is a \fB|\fP, the construct expands to the +value of the \fBREPLY\fP shell variable after \fIcommand\fP executes, +without removing any trailing newlines, +and the standard output of \fIcommand\fP remains the same as in the +calling shell. +\fBBash\fP creates \fBREPLY\fP as an initially-unset local variable when +\fIcommand\fP executes, and restores \fBREPLY\fP to the value it had +before the command substitution after \fIcommand\fP completes, +as with any local variable. +.PP Command substitutions may be nested. To nest when using the backquoted form, escape the inner backquotes with backslashes. .PP -If the substitution appears within double quotes, word splitting and -pathname expansion are not performed on the results. +If the substitution appears within double quotes, \fBbash\fP does not perform +word splitting and pathname expansion on the results. .SS Arithmetic Expansion Arithmetic expansion allows the evaluation of an arithmetic expression and the substitution of the result. The format for arithmetic expansion is: @@ -3648,6 +3858,7 @@ The shell treats each character of .B IFS as a delimiter, and splits the results of the other expansions into words using these characters as field terminators. +.PP If .SM .B IFS @@ -3656,10 +3867,10 @@ value is exactly .BR , the default, then sequences of -.BR , -.BR , +.BR space , +.BR tab , and -.B +.B newline at the beginning and end of the results of the previous expansions are ignored, and any sequence of @@ -3698,12 +3909,20 @@ A sequence of .SM .B IFS whitespace characters is also treated as a delimiter. +.PP If the value of .SM .B IFS is null, no word splitting occurs. +If +.SM +.B IFS +is unset, word splitting behaves as if it contained the default value +of +.BR . .PP -Explicit null arguments (\^\f3"\^"\fP or \^\f3\(aq\^\(aq\fP\^) are retained +Explicit null arguments (\^\fB\*"\^\*"\fP or +\^\fB\*'\^\*'\fP\^) are retained and passed to commands as empty strings. Unquoted implicit null arguments, resulting from the expansion of parameters that have no values, are removed. @@ -3713,8 +3932,10 @@ and passed to a command as an empty string. When a quoted null argument appears as part of a word whose expansion is non-null, the null argument is removed. That is, the word -\f(CW\-d\(aq\^\(aq\fP becomes \f(CW\-d\fP after word splitting and -null argument removal. +.Q "\-d\*'\^\*'" +becomes +.Q \-d +after word splitting and null argument removal. .PP Note that if no expansion occurs, no splitting is performed. @@ -3756,29 +3977,32 @@ is enabled, the match is performed without regard to the case of alphabetic characters. When a pattern is used for pathname expansion, the character -.B ``.'' +.Q .\& at the start of a name or immediately following a slash must be matched explicitly, unless the shell option .B dotglob is set. In order to match the filenames -.B ``.'' +.Q .\& and -.BR ``..'' , -the pattern must begin with ``.'' (for example, ``.?''), +.Q ..\& , +the pattern must begin with +.Q .\& +(for example, +.Q .?\& ), even if .B dotglob is set. If the .B globskipdots shell option is enabled, the filenames -.B ``.'' +.Q .\& and -.BR ``..'' -are never matched, even if the pattern begins with a -.BR ``.'' . +.Q ..\& +never match, even if the pattern begins with a +.Q .\& When not matching pathnames, the -.B ``.'' +.Q .\& character is not treated specially. When matching a pathname, the slash character must always be matched explicitly by a slash in the pattern, but in other matching @@ -3817,24 +4041,25 @@ If the \fBnocaseglob\fP option is set, the matching against the patterns in .B GLOBIGNORE is performed without regard to case. The filenames -.B ``.'' +.Q .\& and -.B ``..'' +.Q ..\& are always ignored when .SM .B GLOBIGNORE -is set and not null. However, setting +is set and not null. +However, setting .SM .B GLOBIGNORE to a non-null value has the effect of enabling the .B dotglob shell option, so all other filenames beginning with a -.B ``.'' +Q .\& will match. To get the old behavior of ignoring filenames beginning with a -.BR ``.'' , +.Q .\& , make -.B ``.*'' +.Q .* one of the patterns in .SM .BR GLOBIGNORE . @@ -3847,12 +4072,19 @@ is unset. The pattern matching honors the setting of the \fBextglob\fP shell option. .PP +The +.SM +.B GLOBSORT +variable controls how the results of pathname expansion are sorted, as +described above. +.PP \fBPattern Matching\fP .PP Any character that appears in a pattern, other than the special pattern -characters described below, matches itself. The NUL character may not -occur in a pattern. A backslash escapes the following character; the -escaping backslash is discarded when matching. +characters described below, matches itself. +The NUL character may not occur in a pattern. +A backslash escapes the following character; the escaping backslash is +discarded when matching. The special pattern characters must be quoted if they are to be matched literally. .PP @@ -3873,9 +4105,9 @@ and subdirectories. .B ? Matches any single character. .TP -.B [...] -Matches any one of the enclosed characters. A pair of characters -separated by a hyphen denotes a +.BR [ .\|.\|. ] +Matches any one of the enclosed characters. +A pair of characters separated by a hyphen denotes a \fIrange expression\fP; any character that falls between those two characters, inclusive, using the current locale's collating sequence and character set, @@ -3884,7 +4116,7 @@ is matched. If the first character following the is a .B ! or a -.B ^ +.B \*^ then any character not enclosed is matched. The sorting order of characters in range expressions, and the characters included in the range, @@ -3915,9 +4147,8 @@ A .B ] may be matched by including it as the first character in the set. -.br -.if t .sp 0.5 -.if n .sp 1 +.PD +.IP Within .B [ and @@ -3925,17 +4156,18 @@ and \fIcharacter classes\fP can be specified using the syntax \fB[:\fP\fIclass\fP\fB:]\fP, where \fIclass\fP is one of the following classes defined in the POSIX standard: -.PP +.IP .RS .B -.if n alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit -.if t alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit -.br +.if n alnum alpha ascii blank cntrl digit graph lower print punct space \ +upper word xdigit +.if t alnum alpha ascii blank cntrl digit graph lower \ +print punct space upper word xdigit +.RE +.IP A character class matches any character belonging to that class. The \fBword\fP character class matches letters, digits, and the character _. -.br -.if t .sp 0.5 -.if n .sp 1 +.IP Within .B [ and @@ -3944,9 +4176,7 @@ an \fIequivalence class\fP can be specified using the syntax \fB[=\fP\fIc\fP\fB=]\fP, which matches all characters with the same collation weight (as defined by the current locale) as the character \fIc\fP. -.br -.if t .sp 0.5 -.if n .sp 1 +.IP Within .B [ and @@ -3954,8 +4184,6 @@ and the syntax \fB[.\fP\fIsymbol\fP\fB.]\fP matches the collating symbol \fIsymbol\fP. .RE -.RE -.PD .PP If the \fBextglob\fP shell option is enabled using the \fBshopt\fP builtin, the shell recognizes several extended pattern matching operators. @@ -3963,7 +4191,7 @@ In the following description, a \fIpattern-list\fP is a list of one or more patterns separated by a \fB|\fP. Composite patterns may be formed using one or more of the following sub-patterns: -.sp 1 +.PP .PD 0 .RS .TP @@ -3984,7 +4212,7 @@ Matches anything except one of the given patterns .RE .PD .PP -The\fBextglob\fP option changes the behavior of the parser, since the +The \fBextglob\fP option changes the behavior of the parser, since the parentheses are normally treated as operators with syntactic meaning. To ensure that extended matching patterns are parsed correctly, make sure that \fBextglob\fP is enabled before parsing constructs containing the @@ -3993,12 +4221,21 @@ patterns, including shell functions and command substitutions. When matching filenames, the \fBdotglob\fP shell option determines the set of filenames that are tested: when \fBdotglob\fP is enabled, the set of filenames includes all files -beginning with ``.'', but ``.'' and ``..'' must be matched by a -pattern or sub-pattern that begins with a dot; +beginning with +.Q .\& , +but +.Q .\& +and +.Q ..\& +must be matched by a pattern or sub-pattern that begins with a dot; when it is disabled, the set does not -include any filenames beginning with ``.'' unless the pattern -or sub-pattern begins with a ``.''. -As above, ``.'' only has a special meaning when matching filenames. +include any filenames beginning with +.Q .\& +unless the pattern or sub-pattern begins with a +.Q .\& . +As above, +.Q .\& +only has a special meaning when matching filenames. .PP Complicated extended pattern matching against long strings is slow, especially when the patterns contain alternations and the strings @@ -4009,8 +4246,8 @@ strings instead of a single long string, may be faster. After the preceding expansions, all unquoted occurrences of the characters .BR \e , -.BR \(aq , -and \^\f3"\fP\^ that did not result from one of the above +.BR \*' , +and \^\fB\*"\fP\^ that did not result from one of the above expansions are removed. .SH REDIRECTION Before a command is executed, its input and output @@ -4241,11 +4478,10 @@ This is semantically equivalent to (see \fBDuplicating File Descriptors\fP below). .SS Here Documents This type of redirection instructs the shell to read input from the -current source until a line containing only +current source until it reads a line containing only .I delimiter -(with no trailing blanks) -is seen. All of -the lines read up to that point are then used as the standard +(with no trailing blanks). +All of the lines read up to that point are then used as the standard input (or file descriptor \fIn\fP if \fIn\fP is specified) for a command. .PP The format of here-documents is: @@ -4261,6 +4497,7 @@ The format of here-documents is: No parameter and variable expansion, command substitution, arithmetic expansion, or pathname expansion is performed on .IR word . +.PP If any part of .I word is quoted, the @@ -4268,7 +4505,9 @@ is quoted, the is the result of quote removal on .IR word , and the lines in the here-document are not expanded. -If \fIword\fP is unquoted, +If \fIword\fP is unquoted, the +.I delimiter +is \fIword\fP itself, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion, the character sequence @@ -4389,19 +4628,22 @@ or on file descriptor 0 if .I n is not specified. If the file does not exist, it is created. .SH ALIASES -\fIAliases\fP allow a string to be substituted for a word when it is used -as the first word of a simple command. -The shell maintains a list of aliases that may be set and unset with the -.B alias -and -.B unalias -builtin commands (see +\fIAliases\fP allow a string to be substituted for a word that is in +a position in the input where it can be the first word of a simple +command. Aliases have names and corresponding values that are set +and unset using the \fBalias\fP and \fBunalias\fP builtin commands +(see .SM .B SHELL BUILTIN COMMANDS below). -The first word of each simple command, if unquoted, -is checked to see if it has an -alias. If so, that word is replaced by the text of the alias. +.PP +If the shell reads an unquoted word in the right position, it checks +the word to see if it matches an alias name. If it matches, the shell +replaces the word with the alias value, and reads that value as if it +had been read instead of the word. +The shell doesn't look at any characters following the word before +attempting alias substitution. +.PP The characters \fB/\fP, \fB$\fP, \fB\`\fP, and \fB=\fP and any of the shell \fImetacharacters\fP or quoting characters listed above may not appear in an alias name. @@ -4417,6 +4659,7 @@ to for instance, and .B bash does not try to recursively expand the replacement text. +.PP If the last character of the alias value is a .IR blank , then the next command @@ -4504,7 +4747,7 @@ traps (see the description of the .B trap builtin under .SM -.B SHELL BUILTIN COMMANDS +.B "SHELL BUILTIN COMMANDS" below) are not inherited unless the function has been given the \fBtrace\fP attribute (see the description of the .SM @@ -4531,13 +4774,16 @@ it calls). In the following description, the \fIcurrent scope\fP is a currently- executing function. Previous scopes consist of that function's caller and so on, -back to the "global" scope, where the shell is not executing -any shell function. +back to the +.Q global +scope, where the shell is not executing any shell function. Consequently, a local variable at the current scope is a variable declared using the \fBlocal\fP or \fBdeclare\fP builtins in the function that is currently executing. .PP -Local variables "shadow" variables with the same name declared at +Local variables +.Q shadow +variables with the same name declared at previous scopes. For instance, a local variable declared in a function hides a global variable of the same name: references and assignments @@ -4551,10 +4797,11 @@ are a result of the sequence of function calls that caused execution to reach the current function. The value of a variable that a function sees depends on its value within its caller, if any, whether that caller is -the "global" scope or another shell function. +the global +scope or another shell function. This is also the value that a local variable -declaration "shadows", and the value that is restored when the function -returns. +declaration shadows, +and the value that is restored when the function returns. .PP For example, if a variable \fIvar\fP is declared as local in function \fIfunc1\fP, and \fIfunc1\fP calls another function \fIfunc2\fP, @@ -4647,7 +4894,7 @@ unary minus and plus .B ++\fIid\fP \-\-\fIid\fP variable pre-increment and pre-decrement .TP -.B ! ~ +.B ! \*~ logical and bitwise negation .TP .B ** @@ -4671,7 +4918,7 @@ equality and inequality .B & bitwise AND .TP -.B ^ +.B \*^ bitwise exclusive OR .TP .B | @@ -4686,7 +4933,7 @@ logical OR .B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP conditional operator .TP -.B = *= /= %= += \-= <<= >>= &= ^= |= +.B "= *= /= %= += \-= <<= >>= &= \*^= |=" assignment .TP .B \fIexpr1\fP , \fIexpr2\fP @@ -4747,12 +4994,14 @@ descriptor 0, 1, or 2, respectively, is checked. .PP Unless otherwise specified, primaries that operate on files follow symbolic links and operate on the target of the link, rather than the link itself. -.if t .sp 0.5 -.if n .sp 1 -When used with \fB[[\fP, the \fB<\fP and \fB>\fP operators sort +.PP +When used with \fB[[\fP, +or when the shell is in \fIposix mode\fP, +the \fB<\fP and \fB>\fP operators sort lexicographically using the current locale. -The \fBtest\fP command sorts using ASCII ordering. -.sp 1 +When the shell is not in \fIposix mode\fP, +the \fBtest\fP command sorts using ASCII ordering. +.PP .PD 0 .TP .B \-a \fIfile\fP @@ -4780,7 +5029,9 @@ True if \fIfile\fP exists and is set-group-id. True if \fIfile\fP exists and is a symbolic link. .TP .B \-k \fIfile\fP -True if \fIfile\fP exists and its ``sticky'' bit is set. +True if \fIfile\fP exists and its +.Q sticky +bit is set. .TP .B \-p \fIfile\fP True if \fIfile\fP exists and is a named pipe (FIFO). @@ -4846,6 +5097,12 @@ builtin below. True if the shell variable .I varname is set (has been assigned a value). +If \fIvarname\fP is an indexed +array variable name subscripted by \fI@\fP or \fI*\fP, +this returns true if the array has any set elements. +If \fIvarname\fP is an associative +array variable name subscripted by \fI@\fP or \fI*\fP, +this returns true if an element with that key is set. .TP .B \-R \fIvarname\fP True if the shell variable @@ -4953,8 +5210,8 @@ the exit status of the last command substitution performed. If there were no command substitutions, the command exits with a status of zero. .SH "COMMAND EXECUTION" After a command has been split into words, if it results in a -simple command and an optional list of arguments, the following -actions are taken. +simple command and an optional list of arguments, the shell performs +the following actions. .PP If the command name contains no slashes, the shell attempts to locate it. If there exists a shell function by that name, that @@ -5063,7 +5320,6 @@ is to be executed, it is invoked in a separate execution environment that consists of the following. Unless otherwise noted, the values are inherited from the shell. -.if n .sp 1 .IP \(bu the shell's open files, plus any modifications and additions specified by redirections to the command @@ -5092,9 +5348,15 @@ commands that are invoked as part of a pipeline are also executed in a subshell environment. Changes made to the subshell environment cannot affect the shell's execution environment. .PP -Subshells spawned to execute command substitutions inherit the value of -the \fB\-e\fP option from the parent shell. When not in \fIposix mode\fP, +When the shell is in +\fIposix mode\fP, +subshells spawned to execute command substitutions inherit the value of +the \fB\-e\fP option from their parent shell. +When not in \fIposix mode\fP, \fBbash\fP clears the \fB\-e\fP option in such subshells. +See the +description of the \fBinherit_errexit\fP shell option below +for how to control this behavior when not in posix mode. .PP If a command is followed by a \fB&\fP and job control is not active, the default standard input for the command is the empty file \fI/dev/null\fP. @@ -5284,15 +5546,15 @@ command to complete, the shell receives keyboard-generated signals such as .SM .B SIGINT -(usually generated by \fB^C\fP) that users commonly intend to send +(usually generated by \fB\*^C\fP) that users commonly intend to send to that command. This happens because the shell and the command are in the -same process group as the terminal, and \fB^C\fP sends +same process group as the terminal, and \fB\*^C\fP sends .SM .B SIGINT to all processes in that process group. .PP -When \fBbash\fP is running without job control enabled and receives +When \fBbash\fP is running without job control enabled and receives .SM .B SIGINT while waiting for a foreground command, it waits until that foreground @@ -5380,11 +5642,12 @@ These processes are said to be in the processes are those whose process group ID differs from the terminal's; such processes are immune to keyboard-generated signals. Only foreground processes are allowed to read from or, if the -user so specifies with \f(CWstty tostop\fP, write to the -terminal. +user so specifies with +.Q "stty tostop" , +write to the terminal. Background processes which attempt to read from (write to when -\f(CWstty tostop\fP is in effect) the -terminal are sent a +.Q tostop +is in effect) the terminal are sent a .SM .B SIGTTIN (SIGTTOU) signal by the kernel's terminal driver, @@ -5399,14 +5662,14 @@ contains facilities to use it. Typing the .I suspend character (typically -.BR ^Z , +.BR \*^Z , Control-Z) while a process is running causes that process to be stopped and returns control to .BR bash . Typing the .I "delayed suspend" character (typically -.BR ^Y , +.BR \*^Y , Control-Y) causes the process to be stopped when it attempts to read input from the terminal, and control to be returned to @@ -5418,7 +5681,7 @@ command to continue it in the background, the command to continue it in the foreground, or the .B kill -command to kill it. A \fB^Z\fP takes effect immediately, +command to kill it. A \fB\*^Z\fP takes effect immediately, and has the additional side effect of causing pending output and typeahead to be discarded. .PP @@ -5471,12 +5734,12 @@ Simply naming a job can be used to bring it into the foreground: .B %1 is a synonym for -\fB``fg %1''\fP, +.Q "fg %1" , bringing job 1 from the background into the foreground. Similarly, -.B ``%1 &'' +.Q "%1 &" resumes job 1 in the background, equivalent to -\fB``bg %1''\fP. +.Q "bg %1" . .PP The shell learns immediately whenever a job changes state. Normally, @@ -5544,10 +5807,15 @@ backslash-escaped special characters that are decoded as follows: an ASCII bell character (07) .TP .B \ed -the date in "Weekday Month Date" format (e.g., "Tue May 26") +the date in +.Q "Weekday Month Date" +format (e.g., +.Q "Tue May 26" ) .TP .B \eD{\fIformat\fP} -the \fIformat\fP is passed to \fIstrftime\fP(3) and the result is inserted +the \fIformat\fP is passed to +.IR strftime (3) +and the result is inserted into the prompt string; an empty \fIformat\fP results in a locale-specific time representation. The braces are required .TP @@ -5555,7 +5823,8 @@ time representation. The braces are required an ASCII escape character (033) .TP .B \eh -the hostname up to the first `.' +the hostname up to the first +.Q . .TP .B \eH the hostname @@ -5692,11 +5961,12 @@ options to the builtin. .SS "Readline Notation" In this section, the Emacs-style notation is used to denote -keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n -means Control\-N. Similarly, +keystrokes. +Control keys are denoted by C\-\fIkey\fP, e.g., C\-n means Control\-N. +Similarly, .I meta -keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards -without a +keys are denoted by M\-\fIkey\fP, so M\-x means Meta\-X. +(On keyboards without a .I meta key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key then the @@ -5732,7 +6002,7 @@ The name of this file is taken from the value of the .SM .B INPUTRC variable. If that variable is unset, the default is -.IR ~/.inputrc . +.IR \*~/.inputrc . If that file does not exist or cannot be read, the ultimate default is .IR /etc/inputrc . When a program which uses the readline library starts up, the @@ -5760,6 +6030,7 @@ or .RS C\-Meta\-u: universal\-argument .RE +.LP into the .I inputrc would make M\-C\-u execute the readline command @@ -5792,13 +6063,15 @@ prefixes, or as a key sequence. When using the form \fBkeyname\fP:\^\fIfunction\-name\fP or \fImacro\fP, .I keyname is the name of a key spelled out in English. For example: -.sp +.PP .RS +.EX +.nf Control-u: universal\-argument -.br Meta-Rubout: backward-kill-word -.br -Control-o: "> output" +Control-o: \*"> output\*" +.fi +.EE .RE .LP In the above example, @@ -5812,11 +6085,11 @@ and .I C\-o is bound to run the macro expressed on the right hand side (that is, to insert the text -.if t \f(CW> output\fP -.if n ``> output'' +.Q "> output" into the line). .PP -In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP, +In the second form, +\fB\*"keyseq\*"\fP:\^\fIfunction\-name\fP or \fImacro\fP, .B keyseq differs from .B keyname @@ -5825,13 +6098,15 @@ an entire key sequence may be specified by placing the sequence within double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the symbolic character names are not recognized. -.sp +.PP .RS -"\eC\-u": universal\-argument -.br -"\eC\-x\eC\-r": re\-read\-init\-file -.br -"\ee[11~": "Function Key 1" +.EX +.nf +\*"\eC\-u\*": universal\-argument +\*"\eC\-x\eC\-r\*": re\-read\-init\-file +\*"\ee[11\*~\*": \*"Function Key 1\*" +.fi +.EE .RE .PP In this example, @@ -5842,10 +6117,9 @@ is again bound to the function is bound to the function .BR re\-read\-init\-file , and -.I "ESC [ 1 1 ~" +.I "ESC [ 1 1 \*~" is bound to insert the text -.if t \f(CWFunction Key 1\fP. -.if n ``Function Key 1''. +.Q "Function Key 1" . .PP The full set of GNU Emacs style escape sequences is .RS @@ -5863,11 +6137,11 @@ an escape character .B \e\e backslash .TP -.B \e" -literal " +.B \e\*" +literal \*" .TP -.B \e\(aq -literal \(aq +.B \e\*' +literal \*' .RE .PD .PP @@ -5915,7 +6189,7 @@ be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, -including " and \(aq. +including \*" and \*'. .PP .B Bash allows the current readline key bindings to be displayed or modified @@ -5950,14 +6224,18 @@ or .B Off (without regard to case). Unrecognized variable names are ignored. -When a variable value is read, empty or null values, "on" (case-insensitive), -and "1" are equivalent to \fBOn\fP. All other values are equivalent to +When readline reads a variable value, empty or null values, +.Q "on" +(case-insensitive), and +.Q 1 +are equivalent to \fBOn\fP. +All other values are equivalent to \fBOff\fP. The variables and their default values are: .PP .PD 0 .TP -.B active\-region\-start\-color +.B active\-region\-start\-color A string variable that controls the text color and background when displaying the text in the active region (see the description of \fBenable\-active\-region\fP below). @@ -5967,19 +6245,24 @@ It is output to the terminal before displaying the text in the active region. This variable is reset to the default value whenever the terminal type changes. The default value is the string that puts the terminal in standout mode, as obtained from the terminal's terminfo description. -A sample value might be \f(CW"\ee[01;33m"\fP. -.TP -.B active\-region\-end\-color -A string variable that "undoes" the effects of \fBactive\-region\-start\-color\fP -and restores "normal" terminal display appearance after displaying text -in the active region. +A sample value might be +.Q \ee[01;33m . +.TP +.B active\-region\-end\-color +A string variable that +.Q undoes +the effects of \fBactive\-region\-start\-color\fP +and restores +.Q normal +terminal display appearance after displaying text in the active region. This string must not take up any physical character positions on the display, so it should consist only of terminal escape sequences. It is output to the terminal after displaying the text in the active region. This variable is reset to the default value whenever the terminal type changes. The default value is the string that restores the terminal from standout mode, as obtained from the terminal's terminfo description. -A sample value might be \f(CW"\ee[0m"\fP. +A sample value might be +.Q \ee[0m . .TP .B bell\-style (audible) Controls what happens when readline wants to ring the terminal bell. @@ -5988,9 +6271,14 @@ If set to \fBnone\fP, readline never rings the bell. If set to If set to \fBaudible\fP, readline attempts to ring the terminal's bell. .TP .B bind\-tty\-special\-chars (On) -If set to \fBOn\fP, readline attempts to bind the control characters -treated specially by the kernel's terminal driver to their readline -equivalents. +If set to \fBOn\fP (the default), readline attempts to bind +the control characters that are treated specially by the kernel's +terminal driver to their readline equivalents. +These override the default readline bindings described here. +Type +.Q "stty \-a" +at a \fBbash\fP prompt to see your current terminal settings, +including the special control characters (usually \fBcchars\fP). .TP .B blink\-matching\-paren (Off) If set to \fBOn\fP, readline attempts to briefly move the cursor to an @@ -6002,7 +6290,8 @@ common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the \fBLS_COLORS\fP environment variable. If there is a color definition in \fB$LS_COLORS\fP for the custom suffix -"readline-colored-completion-prefix", readline uses this color for +.Q readline-colored-completion-prefix , +readline uses this color for the common prefix instead of its default. .TP .B colored\-stats (Off) @@ -6010,8 +6299,12 @@ If set to \fBOn\fP, readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the \fBLS_COLORS\fP environment variable. +.\" Tucking multiple macro calls into a paragraph tag requires some +.\" finesse. We require `\c`, and while the single-font macros don't +.\" honor input trap continuation, the font alternation macros do. .TP -.B comment\-begin (``#'') +.BR comment\-begin\ ( \c +.Q \fB#\fP \fB)\fP The string that is inserted when the readline .B insert\-comment command is executed. @@ -6063,7 +6356,7 @@ by stripping the eighth bit and prefixing an escape character (in effect, using escape as the \fImeta prefix\fP). The default is \fIOn\fP, but readline will set it to \fIOff\fP if the locale contains eight-bit characters. -This variable is dependent on the \fBLC_CTYPE\fP locale category, and +This variable is dependent on the \fBLC_CTYPE\fP locale category, and may change if the locale is changed. .TP .B disable\-completion (Off) @@ -6096,11 +6389,11 @@ non-printing characters, which can be used to embed a terminal control sequence into the mode string. .TP .B enable\-active\-region (On) -The \fIpoint\fP is the current cursor position, and \fImark\fP refers -to a saved cursor position. -The text between the point and mark is referred to as the \fIregion\fP. +The \fIpoint\fP is the current cursor position, and \fImark\fP refers +to a saved cursor position. +The text between the point and mark is referred to as the \fIregion\fP. When this variable is set to \fIOn\fP, readline allows certain commands -to designate the region as \fIactive\fP. +to designate the region as \fIactive\fP. When the region is active, readline highlights the text in the region using the value of the \fBactive\-region\-start\-color\fP, which defaults to the string that enables @@ -6159,10 +6452,11 @@ regardless of what the terminal claims it can support. The name is a synonym for this variable. The default is \fIOff\fP, but readline will set it to \fIOn\fP if the locale contains eight-bit characters. -This variable is dependent on the \fBLC_CTYPE\fP locale category, and +This variable is dependent on the \fBLC_CTYPE\fP locale category, and may change if the locale is changed. .TP -.B isearch\-terminators (``C\-[C\-J'') +.BR isearch\-terminators\ ( \c +.Q \fBC\-[C\-J\fP \fB)\fP The string of characters that should terminate an incremental search without subsequently executing the character as a command. If this variable has not been given a value, the characters @@ -6207,11 +6501,13 @@ have a slash appended (subject to the value of \fBmark\-directories\fP). .TP .B match\-hidden\-files (On) -This variable, when set to \fBOn\fP, causes readline to match files whose -names begin with a `.' (hidden files) when performing filename -completion. -If set to \fBOff\fP, the leading `.' must be -supplied by the user in the filename to be completed. +This variable, when set to \fBOn\fP, forces readline to match files whose +names begin with a +.Q . +(hidden files) when performing filename completion. +If set to \fBOff\fP, the user must include the leading +.Q . +in the filename to be completed. .TP .B menu\-complete\-display\-prefix (Off) If set to \fBOn\fP, menu completion displays the common prefix of the @@ -6224,7 +6520,7 @@ eighth bit set directly rather than as a meta-prefixed escape sequence. The default is \fIOff\fP, but readline will set it to \fIOn\fP if the locale contains eight-bit characters. -This variable is dependent on the \fBLC_CTYPE\fP locale category, and +This variable is dependent on the \fBLC_CTYPE\fP locale category, and may change if the locale is changed. .TP .B page\-completions (On) @@ -6241,6 +6537,10 @@ before returning when \fBaccept\-line\fP is executed. By default, history lines may be modified and retain individual undo lists across calls to \fBreadline\fP. .TP +.B search\-ignore\-case (Off) +If set to \fBOn\fP, readline performs incremental and non-incremental +history list searches in a case\-insensitive fashion. +.TP .B show\-all\-if\-ambiguous (Off) This alters the default behavior of the completion functions. If set to @@ -6303,23 +6603,26 @@ Readline implements a facility similar in spirit to the conditional compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used. -.IP \fB$if\fP +.TP +.B $if The .B $if construct allows bindings to be made based on the editing mode, the terminal being used, or the application using readline. The text of the test, after any comparison operator, - extends to the end of the line; +extends to the end of the line; unless otherwise noted, no characters are required to isolate it. .RS -.IP \fBmode\fP +.TP +.B mode The \fBmode=\fP form of the \fB$if\fP directive is used to test whether readline is in emacs or vi mode. This may be used in conjunction with the \fBset keymap\fP command, for instance, to set bindings in the \fIemacs\-standard\fP and \fIemacs\-ctlx\fP keymaps only if readline is starting out in emacs mode. -.IP \fBterm\fP +.TP +.B term The \fBterm=\fP form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the @@ -6332,7 +6635,8 @@ to match both and .IR sun\-cmd , for instance. -.IP \fBversion\fP +.TP +.B version The \fBversion\fP test may be used to perform comparisons against specific readline versions. The \fBversion\fP expands to the current readline version. @@ -6352,24 +6656,29 @@ minor version (e.g., \fB7.1\fP). If the minor version is omitted, it is assumed to be \fB0\fP. The operator may be separated from the string \fBversion\fP and from the version number argument by whitespace. -.IP \fBapplication\fP -The \fBapplication\fP construct is used to include -application-specific settings. Each program using the readline +.TP +.I application +The \fIapplication\fP construct is used to include +application-specific settings. +Each program using the readline library sets the \fIapplication name\fP, and an initialization file can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in \fBbash\fP: -.sp 1 +.PP .RS +.EX .nf \fB$if\fP Bash # Quote the current or previous word -"\eC\-xq": "\eeb\e"\eef\e"" +\*"\eC-xq\*": \*"\eeb\e\*"\eef\e\*"\*" \fB$endif\fP .fi +.EE .RE -.IP \fIvariable\fP +.TP +.I variable The \fIvariable\fP construct provides simple equality tests for readline variables and values. The permitted comparison operators are \fI=\fP, \fI==\fP, and \fI!=\fP. @@ -6379,17 +6688,20 @@ side by whitespace. Both string and boolean variables may be tested. Boolean variables must be tested against the values \fIon\fP and \fIoff\fP. .RE -.IP \fB$endif\fP +.TP +.B $endif This command, as seen in the previous example, terminates an \fB$if\fP command. -.IP \fB$else\fP +.TP +.B $else Commands in this branch of the \fB$if\fP directive are executed if the test fails. -.IP \fB$include\fP +.TP +.B $include This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive would read \fI/etc/inputrc\fP: -.sp 1 +.PP .RS .nf \fB$include\fP \^ \fI/etc/inputrc\fP @@ -6432,7 +6744,7 @@ the line, thereby executing the command from the history list. .PP Readline remembers the last incremental search string. If two Control-Rs are typed without any intervening characters defining a -new search string, any remembered search string is used. +new search string, readline uses any remembered search string. .PP Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be @@ -6543,12 +6855,16 @@ and make it the current line. Without an argument, move back to the first entry in the history list. .TP .B reverse\-search\-history (C\-r) -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. +Search backward starting at the current line and moving +.Q up +through the history as necessary. +This is an incremental search. .TP .B forward\-search\-history (C\-s) -Search forward starting at the current line and moving `down' through -the history as necessary. This is an incremental search. +Search forward starting at the current line and moving +.Q down +through the history as necessary. +This is an incremental search. .TP .B non\-incremental\-reverse\-search\-history (M\-p) Search backward through the history starting at the current line @@ -6590,7 +6906,9 @@ insert the \fIn\fPth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the \fIn\fPth word from the end of the previous command. Once the argument \fIn\fP is computed, the argument is extracted -as if the "!\fIn\fP" history expansion had been specified. +as if the +.Q !\fIn\fP +history expansion had been specified. .TP .B yank\-last\-arg (M\-.\^, M\-_\^) @@ -6604,17 +6922,24 @@ Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last word, -as if the "!$" history expansion had been specified. +as if the +.Q !$ +history expansion had been specified. .TP .B shell\-expand\-line (M\-C\-e) -Expand the line as the shell does. This -performs alias and history expansion as well as all of the shell -word expansions. See +Expand the line by performing shell word expansions. +This performs alias and history expansion, +\fB$\fP\*'\fIstring\fP\*' and \fB$\fP\*"\fIstring\fP\*" quoting, +tilde expansion, parameter and variable expansion, arithmetic expansion, +command and process substitution, +word splitting, and quote removal. +An explicit argument suppresses command and process substitution. +See .SM .B HISTORY EXPANSION below for a description of history expansion. .TP -.B history\-expand\-line (M\-^) +.B history\-expand\-line (M\-\*^) Perform history expansion on the current line. See .SM @@ -6656,8 +6981,7 @@ and \fIemacs\fP as the editor, in that order. .TP .B \fIend\-of\-file\fP (usually C\-d) The character indicating end-of-file as set, for example, by -.if t \f(CWstty\fP. -.if n ``stty''. +.IR stty (1). If this character is read when there are no characters on the line, and point is at the beginning of the line, readline interprets it as the end of input and returns @@ -6686,7 +7010,7 @@ how to insert characters like \fBC\-q\fP, for example. .B tab\-insert (C\-v TAB) Insert a tab character. .TP -.B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...) +.B "self\-insert (a, b, A, 1, !, \fR.\|.\|.\fP)" Insert the character typed. .TP .B transpose\-chars (C\-t) @@ -6798,7 +7122,7 @@ or .SS Numeric Arguments .PD 0 .TP -.B digit\-argument (M\-0, M\-1, ..., M\-\-) +.B digit\-argument (M\-0, M\-1, \fR.\|.\|.\fP, M\-\-) Add this digit to the argument already accumulating, or start a new argument. M\-\- starts a negative argument. .TP @@ -6824,7 +7148,7 @@ Attempt to perform completion on the text before point. .B Bash attempts completion treating the text as a variable (if the text begins with \fB$\fP), username (if the text begins with -\fB~\fP), hostname (if the text begins with \fB@\fP), or +\fB\*~\fP), hostname (if the text begins with \fB@\fP), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. .TP @@ -6869,11 +7193,11 @@ Attempt filename completion on the text before point. List the possible completions of the text before point, treating it as a filename. .TP -.B complete\-username (M\-~) +.B complete\-username (M\-\*~) Attempt completion on the text before point, treating it as a username. .TP -.B possible\-username\-completions (C\-x ~) +.B possible\-username\-completions (C\-x \*~) List the possible completions of the text before point, treating it as a username. .TP @@ -6950,7 +7274,7 @@ Abort the current editing command and ring the terminal's bell (subject to the setting of .BR bell\-style ). .TP -.B do\-lowercase\-version (M\-A, M\-B, M\-\fIx\fP, ...) +.B do\-lowercase\-version (M\-A, M\-B, M\-\fIx\fP, \fR.\|.\|.\fP) If the metafied character \fIx\fP is uppercase, run the command that is bound to the corresponding metafied lowercase character. The behavior is undefined if \fIx\fP is already lowercase. @@ -6994,7 +7318,9 @@ character. A negative argument searches for subsequent occurrences. Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC\-[. If this sequence is -bound to "\e[", keys producing such sequences will have no effect +bound to +.Q \e[ , +keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC\-[. @@ -7238,18 +7564,29 @@ being loaded all at once. For instance, assuming that there is a library of compspecs, each kept in a file corresponding to the name of the command, the following default completion function would load completions dynamically: -.PP -\f(CW_completion_loader() -.br +.RS +.EX +.nf +_completion_loader() { + . \*"/etc/bash_completion.d/$1.sh\*" \c +.if \n(LL<80n \{\ +\e .br - . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 -.br +.ti +4n +.\} +>/dev/null 2>&1 && return 124 } +complete \-D \-F _completion_loader \c +.if \n(LL<80n \{\ +\e .br -complete -D -F _completion_loader -o bashdefault -o default -.br -\fP +.ti +4n +.\} +\-o bashdefault \-o default +.fi +.EE +.RE .SH HISTORY When the .B \-o history @@ -7283,7 +7620,7 @@ On startup, the history is initialized from the file named by the variable .SM .B HISTFILE -(default \fI~/.bash_history\fP). +(default \fI\*~/.bash_history\fP). The file named by the value of .SM .B HISTFILE @@ -7319,8 +7656,8 @@ otherwise the history file is overwritten. If .SM .B HISTFILE -is unset, or if the history file is unwritable, the history is -not saved. +is unset or null, +or if the history file is unwritable, the history is not saved. If the .SM .B HISTTIMEFORMAT @@ -7361,7 +7698,7 @@ list. The and .SM .B HISTIGNORE -variables may be set to cause the shell to save only a subset of the +variables are used to cause the shell to save only a subset of the commands entered. The .B cmdhist @@ -7409,12 +7746,18 @@ The second is to select portions of that line for inclusion into the current one. The line selected from the history is the \fIevent\fP, and the portions of that line that are acted upon are \fIwords\fP. -Various \fImodifiers\fP are available to manipulate the selected words. The line is broken into words in the same fashion as when reading input, so that several \fImetacharacter\fP-separated words surrounded by quotes are considered one word. +The \fIevent designator\fP selects the event, the optional +\fIword designator\fP selects words from the event, and +various optional \fImodifiers\fP are available to manipulate the +selected words. +.PP History expansions are introduced by the appearance of the history expansion character, which is \^\fB!\fP\^ by default. +History expansions may appear anywhere in the input, but do not nest. +.PP Only backslash (\^\fB\e\fP\^) and single quotes can quote the history expansion character, but the history expansion character is also treated as quoted if it immediately precedes the closing double quote @@ -7422,9 +7765,19 @@ in a double-quoted string. .PP Several characters inhibit history expansion if found immediately following the history expansion character, even if it is unquoted: -space, tab, newline, carriage return, and \fB=\fP. -If the \fBextglob\fP shell option is enabled, \fB(\fP will also -inhibit expansion. +space, tab, newline, carriage return, \fB=\fP, +and the other shell metacharacters defined above. +.PP +There is a special abbreviation for substitution, active when the +\fIquick substitution\fP character (described above under +.BR histchars ) +is the first character on the line. +It selects the previous history entry, using an event designator +equivalent to \fB!!\fP, +and substitutes one string for another in that line. +It is described below under \fBEvent Designators\fP. +This is the only history expansion that does not begin with the history +expansion character. .PP Several shell options settable with the .B shopt @@ -7473,6 +7826,10 @@ writing the history file. .SS Event Designators An event designator is a reference to a command line entry in the history list. +The event designator +consists of the portion of the word beginning with the history +expansion character and ending with the word designator if present, +or the end of the word. Unless the reference is absolute, events are relative to the current position in the history list. .PP @@ -7485,23 +7842,24 @@ newline, carriage return, = or ( (when the \fBextglob\fP shell option is enabled using the \fBshopt\fP builtin). .TP -.B !\fIn\fR +.B !\fIn\fP Refer to command line .IR n . .TP -.B !\-\fIn\fR +.B !\-\fIn\fP Refer to the current command minus .IR n . .TP .B !! -Refer to the previous command. This is a synonym for `!\-1'. +Refer to the previous command. This is a synonym for +.Q !\-1 . .TP -.B !\fIstring\fR +.B !\fIstring\fP Refer to the most recent command preceding the current position in the history list starting with .IR string . .TP -.B !?\fIstring\fR\fB[?]\fR +.B !?\fIstring\fR\fB[?]\fP Refer to the most recent command preceding the current position in the history list containing .IR string . @@ -7511,13 +7869,13 @@ is followed immediately by a newline. If \fIstring\fP is missing, the string from the most recent search is used; it is an error if there is no previous search string. .TP -.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u +.B \d\s+2\*^\s-2\u\fIstring1\fP\d\s+2\*^\s-2\u\fIstring2\fP\d\s+2\*^\s-2\u Quick substitution. Repeat the previous command, replacing .I string1 with .IR string2 . Equivalent to -``!!:s\d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u'' +.Q !!:s\d\s+2\*^\s-2\u\fIstring1\fP\d\s+2\*^\s-2\u\fIstring2\fP\d\s+2\*^\s-2\u (see \fBModifiers\fP below). .TP .B !# @@ -7529,7 +7887,7 @@ A .B : separates the event specification from the word designator. It may be omitted if the word designator begins with a -.BR ^ , +.BR \*^ , .BR $ , .BR * , .BR \- , @@ -7546,9 +7904,9 @@ The zeroth word. For the shell, this is the command word. .TP .I n -The \fIn\fRth word. +The \fIn\fPth word. .TP -.B ^ +.B \*^ The first argument. That is, word 1. .TP .B $ @@ -7556,15 +7914,22 @@ The last word. This is usually the last argument, but will expand to the zeroth word if there is only one word in the line. .TP .B % -The first word matched by the most recent `?\fIstring\fR?' search, +The first word matched by the most recent +.Q ?\fIstring\fP?' +search, if the search string begins with a character that is part of a word. .TP .I x\fB\-\fPy -A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'. +A range of words; +.Q \-\fIy\fP +abbreviates +.Q 0\-\fIy\fP . .TP .B * -All of the words but the zeroth. This is a synonym -for `\fI1\-$\fP'. It is not an error to use +All of the words but the zeroth. +This is a synonym for +.Q \fI1\-$\fP . +It is not an error to use .B * if there is just one word in the event; the empty string is returned in that case. @@ -7581,7 +7946,8 @@ If a word designator is supplied without an event specification, the previous command is used as the event. .SS Modifiers After the optional word designator, there may appear a sequence of -one or more of the following modifiers, each preceded by a `:'. +one or more of the following modifiers, each preceded by a +.Q : . These modify, or edit, the word or words selected from the history event. .PP .PD 0 @@ -7640,7 +8006,7 @@ substituted, or, if no previous history substitutions took place, the last .I string in a -.B !?\fIstring\fR\fB[?]\fR +.B !?\fIstring\fP[?] search. If .I new @@ -7652,17 +8018,26 @@ is deleted. Repeat the previous substitution. .TP .B g -Cause changes to be applied over the entire event line. This is -used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR') -or `\fB:&\fP'. If used with -`\fB:s\fP', any delimiter can be used -in place of /, and the final delimiter is optional +Cause changes to be applied over the entire event line. +This is used in conjunction with +.Q \fB:s\fP +(e.g., +.Q \fB:gs/\fIold\fP/\fInew\fP/\fR ) +or +.Q \fB:&\fP . +If used with +.Q \fB:s\fP , +any delimiter can be used in place of /, +and the final delimiter is optional if it is the last character of the event line. An \fBa\fP may be used as a synonym for \fBg\fP. .TP .B G -Apply the following `\fBs\fP' or `\fB&\fP' modifier once to each word -in the event line. +Apply the following +.Q \fBs\fP +or +.Q \fB&\fP +modifier once to each word in the event line. .PD .SH "SHELL BUILTIN COMMANDS" .\" start of bash_builtins @@ -7683,7 +8058,7 @@ and \fBshift\fP builtins accept and process arguments beginning with Other builtins that accept arguments but are not specified as accepting options interpret arguments beginning with \fB\-\fP as invalid options and require \fB\-\-\fP to prevent this interpretation. -.sp .5 +.PP .PD 0 .TP \fB:\fP [\fIarguments\fP] @@ -7694,7 +8069,7 @@ and performing any specified redirections. The return status is zero. .TP -\fB .\| \fP \fIfilename\fP [\fIarguments\fP] +\fB\&.\| \fP \fIfilename\fP [\fIarguments\fP] .PD 0 .TP \fBsource\fP \fIfilename\fP [\fIarguments\fP] @@ -7743,7 +8118,7 @@ the script (0 if no commands are executed), and false if .I filename is not found or cannot be read. .TP -\fBalias\fP [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...] +\fBalias\fP [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] .\|.\|.] \fBAlias\fP with no arguments or with the .B \-p option prints the list of aliases in the form @@ -7757,7 +8132,7 @@ is supplied, the name and value of the alias is printed. \fBAlias\fP returns true unless a \fIname\fP is given for which no alias has been defined. .TP -\fBbg\fP [\fIjobspec\fP ...] +\fBbg\fP [\fIjobspec\fP .\|.\|.] Resume each suspended job \fIjobspec\fP in the background, as if it had been started with .BR & . @@ -7777,7 +8152,7 @@ or was started without job control. .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-f\fP \fIfilename\fP .TP -\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-x\fP \fIkeyseq\fP:\fIshell\-command\fP +\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-x\fP \fIkeyseq\fP[:] \fIshell\-command\fP .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIfunction\-name\fP .TP @@ -7797,7 +8172,13 @@ Each non-option argument is a command as it would appear in a initialization file such as .IR .inputrc , but each binding or command must be passed as a separate argument; -e.g., '"\eC\-x\eC\-r": re\-read\-init\-file'. +e.g., \*'\*"\eC\-x\eC\-r\*": re\-read\-init\-file\*'. +In the following descriptions, output available to be re-read is formatted +as commands that would appear in a +.B readline +initialization file or that would be supplied as individual arguments to a +.B bind +command. Options, if supplied, have the following meanings: .RS .PD 0 @@ -7853,9 +8234,18 @@ Unbind all keys bound to the named \fIfunction\fP. .B \-r \fIkeyseq\fP Remove any current binding for \fIkeyseq\fP. .TP -.B \-x \fIkeyseq\fP:\fIshell\-command\fP +.B \-x \fIkeyseq\fP[: ]\fIshell\-command\fP Cause \fIshell\-command\fP to be executed whenever \fIkeyseq\fP is entered. +The separator between \fIkeyseq\fP and \fIshell\-command\fP is either +whitespace or a colon optionally followed by whitespace. +If the separator is whitespace, \fIshell\-command\fP +must be enclosed in double quotes and \fBreadline\fP expands any of its +special backslash-escapes in \fIshell\-command\fP before saving it. +If the separator is a colon, any enclosing double quotes are optional, and +\fBreadline\fP does not expand the command string before saving it. +Since the entire key binding expression must be a single argument, it +should be enclosed in quotes. When \fIshell\-command\fP is executed, the shell sets the .SM .B READLINE_LINE @@ -7867,7 +8257,7 @@ and .B READLINE_MARK variables to the current location of the insertion point and the saved insertion point (the mark), respectively. -The shell assigns any numeric argument the user supplied to the +The shell assigns any numeric argument the user supplied to the .SM .B READLINE_ARGUMENT variable. @@ -7932,7 +8322,7 @@ The return value is 0 unless the shell is not executing a subroutine call or \fIexpr\fP does not correspond to a valid position in the call stack. .TP -\fBcd\fP [\fB\-L\fP|[\fB\-P\fP [\fB\-e\fP]] [\-@]] [\fIdir\fP] +\fBcd\fP [\fB\-L\fP|[\fB\-P\fP [\fB\-e\fP]]] [\-@] [\fIdir\fP] Change the current directory to \fIdir\fP. if \fIdir\fP is not supplied, the value of the .SM @@ -7943,17 +8333,19 @@ The variable .B CDPATH defines the search path for the directory containing .IR dir : -each directory name in +the shell searches each directory name in .SM .B CDPATH -is searched for \fIdir\fP. +for \fIdir\fP. Alternative directory names in .SM .B CDPATH are separated by a colon (:). A null directory name in .SM .B CDPATH -is the same as the current directory, i.e., ``\fB.\fP''. If +is the same as the current directory, i.e., +.Q .\& . +If .I dir begins with a slash (/), then @@ -8003,7 +8395,7 @@ directory before the change. The return value is true if the directory was successfully changed; false otherwise. .TP -\fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP ...] +\fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP .\|.\|.] Run .I command with @@ -8048,44 +8440,61 @@ cannot be found, the exit status is 127. Otherwise, the exit status of the builtin is the exit status of .IR command . .TP -\fBcompgen\fP [\fIoption\fP] [\fIword\fP] +\fBcompgen\fP [\fB\-V\fP \fIvarname\fP] [\fIoption\fP] [\fIword\fP] Generate possible completion matches for \fIword\fP according to the \fIoption\fPs, which may be any option accepted by the .B complete -builtin with the exception of \fB\-p\fP and \fB\-r\fP, and write -the matches to the standard output. +builtin with the exceptions of +.BR \-p , +.BR \-r , +.BR \-D , +.BR \-E , +and +.BR \-I , +and write the matches to the standard output. +If the \fB\-V\fP option is supplied, \fBcompgen\fP stores the generated +completions into the indexed array variable \fIvarname\fP instead of writing +them to the standard output. When using the \fB\-F\fP or \fB\-C\fP options, the various shell variables set by the programmable completion facilities, while available, will not have useful values. -.sp 1 +.IP The matches will be generated in the same way as if the programmable completion code had generated them directly from a completion specification with the same flags. If \fIword\fP is specified, only those completions matching \fIword\fP will be displayed. -.sp 1 +.IP The return value is true unless an invalid option is supplied, or no matches were generated. .TP -\fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp-option\fP] [\fB\-DEI\fP] [\fB\-A\fP \fIaction\fP] [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] +\fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp-option\fP] [\fB\-DEI\fP] [\fB\-A\fP \fIaction\fP] +.br +[\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] .br -[\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] [\fB\-X\fP \fIfilterpat\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP] \fIname\fP [\fIname ...\fP] +[\fB\-X\fP \fIfilterpat\fP] [\fB\-P\fP \fIprefix\fP] \ +[\fB\-S\fP \fIsuffix\fP] \fIname\fP [\fIname\fP .\|.\|.] .PD 0 .TP -\fBcomplete\fP \fB\-pr\fP [\fB\-DEI\fP] [\fIname\fP ...] +\fBcomplete\fP \fB\-pr\fP [\fB\-DEI\fP] [\fIname\fP .\|.\|.] .PD Specify how arguments to each \fIname\fP should be completed. -If the \fB\-p\fP option is supplied, or if no options are supplied, +If the \fB\-p\fP option is supplied, or if no options or \fIname\fPs +are supplied, existing completion specifications are printed in a way that allows them to be reused as input. The \fB\-r\fP option removes a completion specification for each \fIname\fP, or, if no \fIname\fPs are supplied, all completion specifications. The \fB\-D\fP option indicates that other supplied options and actions should -apply to the ``default'' command completion; that is, completion attempted +apply to the +.Q default +command completion; that is, completion attempted on a command for which no completion has previously been defined. The \fB\-E\fP option indicates that other supplied options and actions should -apply to ``empty'' command completion; that is, completion attempted on a +apply to +.Q empty +command completion; that is, completion attempted on a blank line. The \fB\-I\fP option indicates that other supplied options and actions should apply to completion on the initial non-assignment word on the line, or after @@ -8096,18 +8505,19 @@ over \fB\-E\fP, and both take precedence over \fB\-I\fP. If any of \fB\-D\fP, \fB\-E\fP, or \fB\-I\fP are supplied, any other \fIname\fP arguments are ignored; these completions only apply to the case specified by the option. -.sp 1 +.IP The process of applying these completion specifications when word completion is attempted is described -.ie \n(zZ=1 in \fIbash(1)\fP. +.ie \n(zZ=1 in \fIbash\fP(1). .el above under \fBProgrammable Completion\fP. -.sp 1 +.IP Other options, if specified, have the following meanings. The arguments to the \fB\-G\fP, \fB\-W\fP, and \fB\-X\fP options (and, if necessary, the \fB\-P\fP and \fB\-S\fP options) should be quoted to protect them from expansion before the .B complete builtin is invoked. +.IP .RS .PD 0 .TP 8 @@ -8134,6 +8544,10 @@ filename\-specific processing (like adding a slash to directory names, quoting special characters, or suppressing trailing spaces). Intended to be used with shell functions. .TP 8 +.B fullquote +Tell readline to quote all the completed words even if they are not +filenames. +.TP 8 .B noquote Tell readline not to quote the completed words if they are filenames (quoting filenames is the default). @@ -8288,7 +8702,14 @@ case, any completion not matching \fIfilterpat\fP is removed. .PD .PP The return value is true unless an invalid option is supplied, an option -other than \fB\-p\fP or \fB\-r\fP is supplied without a \fIname\fP +other than +.BR \-p , +.BR \-r , +.BR \-D , +.BR \-E , +or +.B \-I +is supplied without a \fIname\fP argument, an attempt is made to remove a completion specification for a \fIname\fP for which no specification exists, or an error occurs adding a completion specification. @@ -8303,16 +8724,19 @@ If no \fIoption\fPs are given, display the completion options for each The possible values of \fIoption\fP are those valid for the \fBcomplete\fP builtin described above. The \fB\-D\fP option indicates that other supplied options should -apply to the ``default'' command completion; that is, completion attempted +apply to the +.Q default +command completion; that is, completion attempted on a command for which no completion has previously been defined. The \fB\-E\fP option indicates that other supplied options should -apply to ``empty'' command completion; that is, completion attempted on a -blank line. +apply to +.Q empty +command completion; that is, completion attempted on a blank line. The \fB\-I\fP option indicates that other supplied options should apply to completion on the initial non-assignment word on the line, or after a command delimiter such as \fB;\fP or \fB|\fP, which is usually command name completion. -.sp 1 +.IP The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a \fIname\fP for which no completion specification exists, or an output error occurs. @@ -8331,14 +8755,19 @@ is specified, resume at the \fIn\fPth enclosing loop. .I n must be \(>= 1. If .I n -is greater than the number of enclosing loops, the last enclosing loop -(the ``top-level'' loop) is resumed. +is greater than the number of enclosing loops, the shell resumes +the last enclosing loop +(the +.Q top-level +loop). The return value is 0 unless \fIn\fP is not greater than or equal to 1. .TP -\fBdeclare\fP [\fB\-aAfFgiIlnrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...] +\fBdeclare\fP [\fB\-aAfFgiIlnrtux\fP] [\fB\-p\fP] \ +[\fIname\fP[=\fIvalue\fP] .\|.\|.] .PD 0 .TP -\fBtypeset\fP [\fB\-aAfFgiIlnrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...] +\fBtypeset\fP [\fB\-aAfFgiIlnrtux\fP] [\fB\-p\fP] \ +[\fIname\fP[=\fIvalue\fP] .\|.\|.] .PD Declare variables and/or give them attributes. If no \fIname\fPs are given then display the values of variables. @@ -8376,7 +8805,7 @@ It is ignored in all other cases. The .B \-I option causes local variables to inherit the attributes -(except the \fInameref\fP attribute) +(except the \fInameref\fP attribute) and value of any existing variable with the same \fIname\fP at a surrounding scope. If there is no existing variable, the local variable is initially unset. @@ -8389,13 +8818,13 @@ to give variables attributes: .B \-a Each \fIname\fP is an indexed array variable (see .B Arrays -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP .B \-A Each \fIname\fP is an associative array variable (see .B Arrays -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP .B \-f @@ -8405,7 +8834,7 @@ Use function names only. The variable is treated as an integer; arithmetic evaluation (see .SM .B "ARITHMETIC EVALUATION" -.ie \n(zZ=1 in \fIbash(1)\fP) +.ie \n(zZ=1 in \fIbash\fP(1)) .el above) is performed when the variable is assigned a value. .TP @@ -8443,7 +8872,10 @@ The lower-case attribute is disabled. Mark \fIname\fPs for export to subsequent commands via the environment. .PD .PP -Using `+' instead of `\-' +Using +.Q + +instead of +.Q \- turns off the attribute instead, with the exceptions that \fB+a\fP and \fB+A\fP may not be used to destroy array variables and \fB+r\fP will not @@ -8464,13 +8896,12 @@ create array variables, additional attributes do not take effect until subsequent assignments. The return value is 0 unless an invalid option is encountered, an attempt is made to define a function using -.if n ``\-f foo=bar'', -.if t \f(CW\-f foo=bar\fP, +.Q "\-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 .B Arrays -.ie \n(zZ=1 in \fIbash(1)\fP), +.ie \n(zZ=1 in \fIbash\fP(1)), .el above), one of the \fInames\fP is not a valid shell variable name, an attempt is made to turn off readonly status for a readonly variable, @@ -8523,7 +8954,8 @@ invalid option is supplied or \fIn\fP indexes beyond the end of the directory stack. .RE .TP -\fBdisown\fP [\fB\-ar\fP] [\fB\-h\fP] [\fIjobspec\fP ... | \fIpid\fP ... ] +\fBdisown\fP [\fB\-ar\fP] [\fB\-h\fP] \ +[\fIjobspec\fP .\|.\|. | \fIpid\fP .\|.\|. ] Without options, remove each .I jobspec from the table of active jobs. @@ -8552,7 +8984,7 @@ The return value is 0 unless a .I jobspec does not specify a valid job. .TP -\fBecho\fP [\fB\-neE\fP] [\fIarg\fP ...] +\fBecho\fP [\fB\-neE\fP] [\fIarg\fP .\|.\|.] Output the \fIarg\fPs, separated by spaces, followed by a newline. The return status is 0 unless a write error occurs. If \fB\-n\fP is specified, the trailing newline is @@ -8562,8 +8994,9 @@ the following backslash-escaped characters is enabled. The option disables the interpretation of these escape characters, even on systems where they are interpreted by default. The \fBxpg_echo\fP shell option may be used to -dynamically determine whether or not \fBecho\fP expands these -escape characters by default. +dynamically determine whether or not \fBecho\fP +interprets any options +and expands these escape characters by default. .B echo does not interpret \fB\-\-\fP to mean the end of options. .B echo @@ -8621,7 +9054,8 @@ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value .PD .RE .TP -\fBenable\fP [\fB\-a\fP] [\fB\-dnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP ...] +\fBenable\fP [\fB\-a\fP] [\fB\-dnps\fP] [\fB\-f\fP \fIfilename\fP] \ +[\fIname\fP .\|.\|.] 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, @@ -8634,8 +9068,7 @@ binary found via the .SM .B PATH instead of the shell builtin version, run -.if t \f(CWenable -n test\fP. -.if n ``enable -n test''. +.QN "enable \-n test" . The .B \-f option means to load the new builtin command @@ -8643,9 +9076,13 @@ option means to load the new builtin command from shared object .IR filename , on systems that support dynamic loading. -Bash will use the value of the \fBBASH_LOADABLES_PATH\fP variable as a -colon-separated list of directories in which to search for \fIfilename\fP. -The default is system-dependent. +\fBBash\fP will use the value of the \fBBASH_LOADABLES_PATH\fP variable as a +colon-separated list of directories in which to search for \fIfilename\fP, +if \fIfilename\fP does not contain a slash. +The default is system-dependent, +and may include +.Q .\& +to force a search of the current directory. The .B \-d option will delete a builtin previously loaded with @@ -8663,14 +9100,13 @@ If \fB\-s\fP is supplied, the output is restricted to the POSIX If no options are supplied and a \fIname\fP is not a shell builtin, \fBenable\fP will attempt to load \fIname\fP from a shared object named \fIname\fP, as if the command were -.if t \f(CWenable \-f\fP \fIname name\fP . -.if n ``enable -f \fIname name\fP . +.QN "enable \-f \fIname name\fP" . The return value is 0 unless a .I name is not a shell builtin or there is an error loading a new builtin from a shared object. .TP -\fBeval\fP [\fIarg\fP ...] +\fBeval\fP [\fIarg\fP .\|.\|.] The \fIarg\fPs are read and concatenated together into a single command. This command is then read and executed by the shell, and its exit status is returned as the value of @@ -8730,7 +9166,7 @@ A trap on .B EXIT is executed before the shell terminates. .TP -\fBexport\fP [\fB\-fn\fP\^] [\fIname\fP[=\fIword\fP]] ... +\fBexport\fP [\fB\-fn\fP\^] [\fIname\fP[=\fIword\fP]] .\|.\|. .PD 0 .TP .B export \-p @@ -8764,6 +9200,9 @@ is supplied with a .I name that is not a function. .TP +\fBfalse\fP +Does nothing, returns a non-zero status. +.TP \fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-lnr\fP] [\fIfirst\fP] [\fIlast\fP] .PD 0 .TP @@ -8789,8 +9228,7 @@ If .I last is not specified, it is set to the current command for listing (so that -.if n ``fc \-l \-10'' -.if t \f(CWfc \-l \-10\fP +.QN "fc \-l \-10" prints the last 10 commands) and to .I first otherwise. @@ -8798,7 +9236,7 @@ If .I first is not specified, it is set to the previous command for editing and \-16 for listing. -.sp 1 +.IP The .B \-n option suppresses @@ -8829,24 +9267,20 @@ is not set. If neither variable is set, .FN vi is used. When editing is complete, the edited commands are echoed and executed. -.sp 1 +.IP In the second form, \fIcommand\fP is re-executed after each instance of \fIpat\fP is replaced by \fIrep\fP. \fICommand\fP is interpreted the same as \fIfirst\fP above. A useful alias to use with this is -.if n ``r="fc -s"'', -.if t \f(CWr='fc \-s'\fP, +.Q "r=\*"fc \-s\*"" , so that typing -.if n ``r cc'' -.if t \f(CWr cc\fP +.Q "r cc" runs the last command beginning with -.if n ``cc'' -.if t \f(CWcc\fP +.Q cc and typing -.if n ``r'' -.if t \f(CWr\fP +.Q r re-executes the last command. -.sp 1 +.IP If the first form is used, the return value is 0 unless an invalid option is encountered or .I first @@ -8879,7 +9313,7 @@ does not specify a valid job or .I jobspec specifies a job that was started without job control. .TP -\fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIarg ...\fP] +\fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIarg\fP .\|.\|.] .B getopts is used by shell procedures to parse positional parameters. .I optstring @@ -8915,14 +9349,14 @@ calls to .B getopts within the same shell invocation if a new set of parameters is to be used. -.sp 1 +.IP When the end of options is encountered, \fBgetopts\fP exits with a return value greater than zero. .SM .B OPTIND is set to the index of the first non-option argument, and \fIname\fP is set to ?. -.sp 1 +.IP .B getopts normally parses the positional parameters, but if more arguments are supplied as @@ -8930,7 +9364,7 @@ supplied as values, .B getopts parses those instead. -.sp 1 +.IP .B getopts can report errors in two ways. If the first character of .I optstring @@ -8946,10 +9380,10 @@ is set to 0, no error messages will be displayed, even if the first character of .I optstring is not a colon. -.sp 1 -If an invalid option is seen, +.IP +If .B getopts -places ? into +detects an invalid option, it places ? into .I name and, if not silent, prints an error message and unsets @@ -8957,29 +9391,26 @@ prints an error message and unsets .BR OPTARG . If .B getopts -is silent, -the option character found is placed in +is silent, it assigns the option character found to .SM .B OPTARG -and no diagnostic message is printed. -.sp 1 +and does not print a diagnostic message. +.IP If a required argument is not found, and .B getopts -is not silent, -a question mark (\^\fB?\fP\^) is placed in -.IR name , +is not silent, it sets the value of \fIname\fP to +a question mark (\^\fB?\fP\^), unsets .SM -.B OPTARG -is unset, and a diagnostic message is printed. +.BR OPTARG , +and prints a diagnostic message. If .B getopts -is silent, then a colon (\^\fB:\fP\^) is placed in -.I name -and +is silent, it sets the value of \fIname\fP to a colon (\^\fB:\fP\^) +and sets .SM .B OPTARG -is set to the option character found. -.sp 1 +to the option character found. +.IP .B getopts returns true if an option, specified or unspecified, is found. It returns false if the end of options is encountered or an @@ -8995,13 +9426,14 @@ the directories in and remembered. Any previously-remembered pathname is discarded. If the .B \-p -option is supplied, no path search is performed, and +option is supplied, \fBhash\fP uses .I filename -is used as the full filename of the command. +as the full filename of the command. The .B \-r option causes the shell to forget all remembered locations. +Assigning to the \fBPATH\fP variable also clears all hashed filenames. The .B \-d option causes the shell to forget the remembered location of each \fIname\fP. @@ -9015,6 +9447,11 @@ The option causes output to be displayed in a format that may be reused as input. If no arguments are given, or if only \fB\-l\fP is supplied, information about remembered commands is printed. +The \fB\-t\fP, \fB\-d\fP, and \fB\-p\fP options (the options that +act on the \fIname\fP arguments) are mutually exclusive. +Only one will be active. +If more than one is supplied, \fB\-t\fP has higher priority than +\fB\-p\fP, and both are higher priority than \fB\-d\fP. The return status is true unless a .I name is not found or an invalid option is supplied. @@ -9040,10 +9477,10 @@ Display the description of each \fIpattern\fP in a manpage-like format .B \-s Display only a short usage synopsis for each \fIpattern\fP .PD -.PP +.RE +.IP The return status is 0 unless no command matches .IR pattern . -.RE .TP \fBhistory [\fIn\fP] .PD 0 @@ -9052,13 +9489,13 @@ The return status is 0 unless no command matches .TP \fBhistory \-d\fP \fIoffset\fP .TP -\fBhistory \-d\fP \fIstart\fP\-\fIend\fP +\fBhistory \-d\fP \fIstart\fP-\fIend\fP .TP \fBhistory\fP \fB\-anrw\fP [\fIfilename\fP] .TP -\fBhistory\fP \fB\-p\fP \fIarg\fP [\fIarg ...\fP] +\fBhistory\fP \fB\-p\fP \fIarg\fP [\fIarg\fP .\|.\|.] .TP -\fBhistory\fP \fB\-s\fP \fIarg\fP [\fIarg ...\fP] +\fBhistory\fP \fB\-s\fP \fIarg\fP [\fIarg\fP .\|.\|.] .PD With no options, display the command history list with line numbers. Lines listed @@ -9073,15 +9510,22 @@ If the shell variable .SM .B HISTTIMEFORMAT is set and not null, -it is used as a format string for \fIstrftime\fP(3) to display -the time stamp associated with each displayed history entry. +it is used as a format string for +.IR strftime (3) +to display the time stamp associated with each displayed history entry. No intervening blank is printed between the formatted time stamp and the history line. If \fIfilename\fP is supplied, it is used as the name of the history file; if not, the value of .SM .B HISTFILE -is used. Options, if supplied, have the following meanings: +is used. +If \fIfilename\fP is not supplied and +.SM +.B HISTFILE +is unset or null, the \fB\-a, \-n, \-r,\fP and \fB\-w\fP options +have no effect. +Options, if supplied, have the following meanings: .RS .PD 0 .TP @@ -9093,7 +9537,7 @@ Delete the history entry at position \fIoffset\fP. If \fIoffset\fP is negative, it is interpreted as relative to one greater than the last history position, so negative indices count back from the end of the history, and an index of \-1 refers to the current -\fBhistory -d\fP command. +\fBhistory \-d\fP command. .TP \fB\-d\fP \fIstart\fP\-\fIend\fP Delete the range of history entries between positions \fIstart\fP and @@ -9102,7 +9546,9 @@ Positive and negative values for \fIstart\fP and \fIend\fP are interpreted as described above. .TP .B \-a -Append the ``new'' history lines to the history file. +Append the +.Q new +history lines to the history file. These are history lines entered since the beginning of the current \fBbash\fP session, but not already appended to the history file. .TP @@ -9150,10 +9596,10 @@ error occurs while reading or writing the history file, an invalid history expansion supplied as an argument to \fB\-p\fP fails. .RE .TP -\fBjobs\fP [\fB\-lnprs\fP] [ \fIjobspec\fP ... ] +\fBjobs\fP [\fB\-lnprs\fP] [ \fIjobspec\fP .\|.\|. ] .PD 0 .TP -\fBjobs\fP \fB\-x\fP \fIcommand\fP [ \fIargs\fP ... ] +\fBjobs\fP \fB\-x\fP \fIcommand\fP [ \fIargs\fP .\|.\|. ] .PD The first form lists the active jobs. The options have the following meanings: @@ -9204,7 +9650,8 @@ passing it returning its exit status. .RE .TP -\fBkill\fP [\fB\-s\fP \fIsigspec\fP | \fB\-n\fP \fIsignum\fP | \fB\-\fP\fIsigspec\fP] [\fIpid\fP | \fIjobspec\fP] ... +\fBkill\fP [\fB\-s\fP \fIsigspec\fP | \fB\-n\fP \fIsignum\fP | \fB\-\fP\fIsigspec\fP] \ +[\fIpid\fP | \fIjobspec\fP] .\|.\|. .PD 0 .TP \fBkill\fP \fB\-l\fP|\fB\-L\fP [\fIsigspec\fP | \fIexit_status\fP] @@ -9251,13 +9698,13 @@ option is equivalent to \fB\-l\fP. returns true if at least one signal was successfully sent, or false if an error occurs or an invalid option is encountered. .TP -\fBlet\fP \fIarg\fP [\fIarg\fP ...] +\fBlet\fP \fIarg\fP [\fIarg\fP .\|.\|.] Each .I arg is an arithmetic expression to be evaluated (see .SM .B "ARITHMETIC EVALUATION" -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). If the last .I arg @@ -9265,7 +9712,7 @@ evaluates to 0, .B let returns 1; 0 is returned otherwise. .TP -\fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] ... | \- ] +\fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] .\|.\|. | \- ] For each argument, a local variable named .I name is created, and assigned @@ -9278,7 +9725,9 @@ is used within a function, it causes the variable to have a visible scope restricted to that function and its children. If \fIname\fP is \-, the set of shell options is made local to the function in which \fBlocal\fP is invoked: shell options changed using the -\fBset\fP builtin inside the function are restored to their original values +\fBset\fP builtin inside the function +after the call to \fBlocal\fP +are restored to their original values when the function returns. The restore is effected as if a series of \fBset\fP commands were executed to restore the values that were in place before the function. @@ -9395,11 +9844,9 @@ shown by .BR dirs , starting with zero, from the stack. For example: -.if n ``popd +0'' -.if t \f(CWpopd +0\fP +.Q "popd +0" removes the first directory, -.if n ``popd +1'' -.if t \f(CWpopd +1\fP +.Q "popd +1" the second. .TP \fB\-\fP\fIn\fP @@ -9407,16 +9854,14 @@ Removes the \fIn\fPth entry counting from the right of the list shown by .BR dirs , starting with zero. For example: -.if n ``popd -0'' -.if t \f(CWpopd -0\fP +.Q "popd \-0" removes the last directory, -.if n ``popd -1'' -.if t \f(CWpopd -1\fP +.Q "popd \-1" the next to last. .PD .PP If the top element of the directory stack is modified, and -the \fI-n\fP option was not supplied, \fBpopd\fP uses the \fBcd\fP +the \fI\-n\fP option was not supplied, \fBpopd\fP uses the \fBcd\fP builtin to change to the directory at the top of the stack. If the \fBcd\fP fails, \fBpopd\fP returns a non-zero value. .PP @@ -9439,14 +9884,17 @@ Write the formatted \fIarguments\fP to the standard output under the control of the \fIformat\fP. The \fB\-v\fP option causes the output to be assigned to the variable \fIvar\fP rather than being printed to the standard output. -.sp 1 +.IP The \fIformat\fP 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 format specifications, each of which causes printing of the next successive \fIargument\fP. -In addition to the standard \fIprintf\fP(1) format specifications, -\fBprintf\fP interprets the following extensions: +In addition to the standard +.IR printf (3) +format characters +.BR csndiouxXeEfFgGaA , +\fBprintf\fP interprets the following additional format specifiers: .RS .PD 0 .TP @@ -9459,6 +9907,10 @@ in the same way as \fBecho \-e\fP. .B %q causes \fBprintf\fP to output the corresponding \fIargument\fP in a format that can be reused as shell input. +\fB%q\fP and \fB%Q\fP use the \fB$\*'\*'\fP quoting style if any characters +in the argument string require it, and backslash quoting otherwise. +If the format string uses the \fIprintf\fP alternate form, these two +formats quote the argument string using single quotes. .TP .B %Q like \fB%q\fP, but applies any supplied precision to the \fIargument\fP @@ -9466,7 +9918,8 @@ before quoting it. .TP .B %(\fIdatefmt\fP)T causes \fBprintf\fP to output the date-time string resulting from using -\fIdatefmt\fP as a format string for \fIstrftime\fP(3). +\fIdatefmt\fP as a format string for +.IR strftime (3). The corresponding \fIargument\fP is an integer representing the number of seconds since the epoch. Two special argument values may be used: \-1 represents the current @@ -9475,11 +9928,21 @@ If no argument is specified, conversion behaves as if \-1 had been given. This is an exception to the usual \fBprintf\fP behavior. .PD .PP -The %b, %q, and %T directives all use the field width and precision +The %b, %q, and %T format specifiers all use the field width and precision arguments from the format specification and write that many bytes from (or use that wide a field for) the expanded argument, which usually contains more characters than the original. .PP +The %n format specifier accepts a corresponding argument that is treated +as a shell variable name. +.PP +The %s and %c format specifiers accept an l (long) modifier, which forces +them to convert the argument string to a wide-character string and apply +any supplied field width and precision in terms of characters, not bytes. +.\" .PP +.\" The %s format specifier understands the "altform" flag (#) and behaves +.\" identically to the %b format specifier if it's supplied. +.PP Arguments to non-string format specifiers are treated as C constants, except that a leading plus or minus sign is allowed, and if the leading character is a single or double quote, the value is the ASCII value of @@ -9489,7 +9952,9 @@ The \fIformat\fP is reused as necessary to consume all of the \fIarguments\fP. If the \fIformat\fP requires more \fIarguments\fP than are supplied, 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. +The return value is zero on success, +non-zero if an invalid option is supplied or a write or assignment error +occurs. .RE .TP \fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP] @@ -9566,11 +10031,15 @@ The return status is 0 unless an error occurs while reading the name of the current directory or an invalid option is supplied. .TP -\fBread\fP [\fB\-ers\fP] [\fB\-a\fP \fIaname\fP] [\fB\-d\fP \fIdelim\fP] [\fB\-i\fP \fItext\fP] [\fB\-n\fP \fInchars\fP] [\fB\-N\fP \fInchars\fP] [\fB\-p\fP \fIprompt\fP] [\fB\-t\fP \fItimeout\fP] [\fB\-u\fP \fIfd\fP] [\fIname\fP ...] +\fBread\fP [\fB\-Eers\fP] [\fB\-a\fP \fIaname\fP] \ +[\fB\-d\fP \fIdelim\fP] [\fB\-i\fP \fItext\fP] \ +[\fB\-n\fP \fInchars\fP] [\fB\-N\fP \fInchars\fP] \ +[\fB\-p\fP \fIprompt\fP] [\fB\-t\fP \fItimeout\fP] \ +[\fB\-u\fP \fIfd\fP] [\fIname\fP .\|.\|.] One line is read from the standard input, or from the file descriptor \fIfd\fP supplied as an argument to the \fB\-u\fP option, split into words as described -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP (1) .el above under \fBWord Splitting\fP, and the first word @@ -9589,7 +10058,7 @@ The characters in .B IFS are used to split the line into words using the same rules the shell uses for expansion (described -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP (1) .el above under \fBWord Splitting\fP). The backslash character (\fB\e\fP) may be used to remove any special @@ -9616,16 +10085,32 @@ when it reads a NUL character. .B \-e If the standard input is coming from a terminal, +\fBread\fP uses .B readline (see .SM .B READLINE -.ie \n(zZ=1 in \fIbash(1)\fP) +.ie \n(zZ=1 in \fIbash\fP(1)) .el above) -is used to obtain the line. +to obtain the line. Readline uses the current (or default, if line editing was not previously active) editing settings, but uses readline's default filename completion. .TP +.B \-E +If the standard input +is coming from a terminal, +\fBread\fP uses +.B readline +(see +.SM +.B READLINE +.ie \n(zZ=1 in \fIbash\fP(1)) +.el above) +to obtain the line. +Readline uses the current (or default, if line editing was not previously +active) editing settings, but uses bash's default completion, including +programmable completion. +.TP .B \-i \fItext\fP If .B readline @@ -9685,6 +10170,9 @@ The exit status is greater than 128 if the timeout is exceeded. Read input from file descriptor \fIfd\fP. .PD .PP +Other than the case where \fIdelim\fP is the empty string, \fBread\fP +ignores any NUL characters in the input. +.PP If no .I names are supplied, the line read, @@ -9698,7 +10186,7 @@ a variable assignment error (such as assigning to a readonly variable) occurs, or an invalid file descriptor is supplied as the argument to \fB\-u\fP. .RE .TP -\fBreadonly\fP [\fB\-aAf\fP] [\fB\-p\fP] [\fIname\fP[=\fIword\fP] ...] +\fBreadonly\fP [\fB\-aAf\fP] [\fB\-p\fP] [\fIname\fP[=\fIword\fP] .\|.\|.] .PD The given \fInames\fP are marked readonly; the values of these @@ -9772,10 +10260,16 @@ function and not during execution of a script by \fB.\fP\^ or \fBsource\fP. Any command associated with the \fBRETURN\fP trap is executed before execution resumes after the function or script. .TP -\fBset\fP [\fB\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP ...] +\fBset\fP [\fB\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] \ +[\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP .\|.\|.] .PD 0 .TP -\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP ...] +\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] \ +[\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP .\|.\|.] +.TP +\fBset \-o\fP +.TP +\fBset +o\fP .PD Without options, display the name and value of each shell variable in a format that can be reused as input @@ -9788,7 +10282,7 @@ Any arguments remaining after option processing are treated as values for the positional parameters and are assigned, in order, to .BR $1 , .BR $2 , -.B ... +\&.\|.\|., .BR $\fIn\fP . Options, if specified, have the following meanings: .RS @@ -9805,6 +10299,7 @@ immediately, rather than before the next primary prompt. This is effective only when job control is enabled. .TP 8 .B \-e +.PD Exit immediately if a \fIpipeline\fP (which may consist of a single \fIsimple command\fP), a \fIlist\fP, @@ -9812,7 +10307,7 @@ or a \fIcompound command\fP (see .SM .B SHELL GRAMMAR -.ie \n(zZ=1 in \fIbash(1)\fP), +.ie \n(zZ=1 in \fIbash\fP(1)), .el above), exits with a non-zero status. The shell does not exit if the @@ -9842,12 +10337,11 @@ This option applies to the shell environment and each subshell environment separately (see .SM .B "COMMAND EXECUTION ENVIRONMENT" -.ie \n(zZ=1 in \fIbash(1)\fP), +.ie \n(zZ=1 in \fIbash\fP(1)), .el above), and may cause subshells to exit before executing all the commands in the subshell. -.if t .sp 0.5 -.if n .sp 1 +.IP If a compound command or shell function executes in a context where \fB\-e\fP is being ignored, none of the commands executed within the compound command or function body @@ -9857,6 +10351,7 @@ If a compound command or shell function sets \fB\-e\fP while executing in a context where \fB\-e\fP is ignored, that setting will not have any effect until the compound command or the command containing the function call completes. +.PD 0 .TP 8 .B \-f Disable pathname expansion. @@ -9876,7 +10371,7 @@ by default for interactive shells on systems that support it (see .SM .B JOB CONTROL -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). All processes run in a separate process group. When a background job completes, the shell prints a line @@ -9929,7 +10424,7 @@ Same as .TP 8 .B history Enable command history, as described -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP(1) .el above under .SM @@ -9938,12 +10433,11 @@ This option is on by default in interactive shells. .TP 8 .B ignoreeof The effect is as if the shell command -.if t \f(CWIGNOREEOF=10\fP -.if n ``IGNOREEOF=10'' +.QN "IGNOREEOF=10" had been executed (see .B Shell Variables -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP 8 .B keyword @@ -9999,7 +10493,7 @@ from the POSIX standard to match the standard (\fIposix mode\fP). See .SM .B "SEE ALSO" -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP(1) .el below for a reference to a document that details how posix mode affects bash's behavior. @@ -10019,18 +10513,18 @@ This also affects the editing interface used for \fBread \-e\fP. .B xtrace Same as .BR \-x . -.sp .5 .PP If .B \-o -is supplied with no \fIoption\-name\fP, the values of the current options are -printed. +is supplied with no \fIoption\-name\fP, +\fBset\fP prints the current shell option settings. If .B +o -is supplied with no \fIoption\-name\fP, a series of +is supplied with no \fIoption\-name\fP, +\fBset\fP prints a series of .B set -commands to recreate the current option settings is displayed on -the standard output. +commands to recreate the current option settings +on the standard output. .RE .TP 8 .B \-p @@ -10071,11 +10565,17 @@ Exit after reading and executing one command. .TP 8 .B \-u Treat unset variables and parameters other than the special -parameters "@" and "*", -or array variables subscripted with "@" or "*", -as an error when performing -parameter expansion. If expansion is attempted on an -unset variable or parameter, the shell prints an error message, and, +parameters +.Q @ +and +.Q * , +or array variables subscripted with +.Q @ +or +.Q * , +as an error when performing parameter expansion. +If expansion is attempted on an unset variable or parameter, +the shell prints an error message, and, if not interactive, exits with a non-zero status. .TP 8 .B \-v @@ -10088,12 +10588,12 @@ arithmetic \fBfor\fP command, display the expanded value of .SM .BR PS4 , followed by the command and its expanded arguments -or associated word list. +or associated word list, to standard error. .TP 8 .B \-B The shell performs brace expansion (see .B Brace Expansion -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). This is on by default. .TP 8 @@ -10166,9 +10666,9 @@ The return status is always true unless an invalid option is encountered. .RE .TP \fBshift\fP [\fIn\fP] -The positional parameters from \fIn\fP+1 ... are renamed to +The positional parameters from \fIn\fP+1 .\|.\|.\& are renamed to .B $1 -.B .... +.B .\|.\|.. Parameters represented by the numbers \fB$#\fP down to \fB$#\fP\-\fIn\fP+1 are unset. .I n @@ -10188,7 +10688,7 @@ is greater than .B $# or less than zero; otherwise 0. .TP -\fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP ...] +\fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP .\|.\|.] Toggle the values of settings controlling optional shell behavior. The settings can be either those listed below, or, if the .B \-o @@ -10244,16 +10744,19 @@ the return status is zero unless an \fIoptname\fP is not a valid shell option. .PP The list of \fBshopt\fP options is: -.if t .sp .5v -.if n .sp 1v +.PP .PD 0 .TP 8 -.B assoc_expand_once -If set, the shell suppresses multiple evaluation of associative array -subscripts during arithmetic expression evaluation, while executing +.B array_expand_once +If set, the shell suppresses multiple evaluation of +associative and indexed array subscripts +during arithmetic expression evaluation, while executing builtins that can perform variable assignments, and while executing builtins that perform array dereferencing. .TP 8 +.B assoc_expand_once +Deprecated; a synonym for \fBarray_expand_once\fP. +.TP 8 .B autocd If set, a command name that is the name of a directory is executed as if it were the argument to the \fBcd\fP command. @@ -10288,7 +10791,7 @@ the exit to be deferred until a second exit is attempted without an intervening command (see .SM .B "JOB CONTROL" -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). The shell always postpones exiting if any jobs are stopped. .TP 8 @@ -10310,7 +10813,7 @@ command in the same history entry. This allows easy re-editing of multi-line commands. This option is enabled by default, but only has an effect if command history is enabled, as described -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP(1) .el above under .SM @@ -10337,7 +10840,7 @@ These control aspects of the shell's compatibility mode (see .SM .B "SHELL COMPATIBILITY MODE" -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el below). .TP 8 .B complete_fullquote @@ -10378,12 +10881,13 @@ if the directory name initially supplied does not exist. .B dotglob If set, .B bash -includes filenames beginning with a `.' in the results of pathname -expansion. +includes filenames beginning with a +.Q .\& +in the results of pathname expansion. The filenames -.B ``.'' +.Q .\& and -.B ``..'' +.Q ..\& must always be matched explicitly, even if .B dotglob is set. @@ -10398,7 +10902,7 @@ fails. .TP 8 .B expand_aliases If set, aliases are expanded as described -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP(1) .el above under .SM @@ -10435,7 +10939,7 @@ and .SM .B BASH_ARGV are updated as described in their descriptions -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP .B 5. @@ -10451,13 +10955,13 @@ subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the .TP 8 .B extglob If set, the extended pattern matching features described -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP(1) .el above under \fBPathname Expansion\fP are enabled. .TP 8 .B extquote -If set, \fB$\fP\(aq\fIstring\fP\(aq and \fB$\fP"\fIstring\fP" quoting is +If set, \fB$\fP\*'\fIstring\fP\*' and \fB$\fP\*"\fIstring\fP\*" quoting is performed within \fB${\fP\fIparameter\fP\fB}\fP expansions enclosed in double quotes. This option is enabled by default. .TP 8 @@ -10475,7 +10979,7 @@ the ignored words are the only possible completions. See .SM \fBSHELL VARIABLES\fP -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP(1) .el above for a description of .SM @@ -10486,7 +10990,7 @@ This option is enabled by default. If set, range expressions used in pattern matching bracket expressions (see .SM .B Pattern Matching -.ie \n(zZ=1 in \fIbash(1)\fP) +.ie \n(zZ=1 in \fIbash\fP(1)) .el above) behave as if in the traditional C locale when performing comparisons. That is, the current locale's collating sequence @@ -10500,11 +11004,11 @@ and upper-case and lower-case ASCII characters will collate together. .TP 8 .B globskipdots If set, pathname expansion will never match the filenames -.B ``.'' +.Q .\& and -.BR ``..'' , +.Q ..\& , even if the pattern begins with a -.BR ``.'' . +.Q .\& . This option is enabled by default. .TP 8 .B globstar @@ -10546,7 +11050,7 @@ word containing a \fB@\fP is being completed (see under .SM .B READLINE -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). This is enabled by default. .TP 8 @@ -10568,7 +11072,7 @@ to cause that word and all remaining characters on that line to be ignored in an interactive shell (see .SM .B COMMENTS -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). This option is enabled by default. .TP 8 @@ -10597,14 +11101,15 @@ at the current function scope. The shell sets this option if it is started as a login shell (see .SM .B "INVOCATION" -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). The value may not be changed. .TP 8 .B mailwarn If set, and a file that \fBbash\fP is checking for mail has been -accessed since the last time it was checked, the message ``The mail in -\fImailfile\fP has been read'' is displayed. +accessed since the last time it was checked, +\fBbash\fP displays the message +.Q "The mail in \fImailfile\fP has been read" . .TP 8 .B no_empty_cmd_completion If set, and @@ -10623,7 +11128,7 @@ If set, matches filenames in a case\-insensitive fashion when performing pathname expansion (see .B Pathname Expansion -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP 8 .B nocasematch @@ -10637,33 +11142,33 @@ or when filtering possible completions as part of programmable completion. .B noexpand_translation If set, .B bash -encloses the translated results of $"..." quoting in single quotes -instead of double quotes. +encloses the translated results of +.BR $\*" .\|.\|.\& \*" +quoting in single quotes instead of double quotes. If the string is not translated, this has no effect. .TP 8 .B nullglob -If set, -.B bash -allows patterns which match no -files (see +If set, pathname expansion patterns which match no files +(see .B Pathname Expansion -.ie \n(zZ=1 in \fIbash(1)\fP) +.ie \n(zZ=1 in \fIbash\fP(1)) .el above) -to expand to a null string, rather than themselves. +expand to nothing and are removed, +rather than expanding to themselves. .TP 8 .B patsub_replacement If set, \fBbash\fP expands occurrences of \fB&\fP in the replacement string of pattern substitution to the text matched by the pattern, as described under \fBParameter Expansion\fP -.ie \n(zZ=1 in \fIbash(1)\fP. +.ie \n(zZ=1 in \fIbash\fP(1). .el above. This option is enabled by default. .TP 8 .B progcomp If set, the programmable completion facilities (see \fBProgrammable Completion\fP -.ie \n(zZ=1 in \fIbash(1)\fP) +.ie \n(zZ=1 in \fIbash\fP(1)) .el above) are enabled. This option is enabled by default. @@ -10680,7 +11185,7 @@ parameter expansion, command substitution, arithmetic expansion, and quote removal after being expanded as described in .SM .B PROMPTING -.ie \n(zZ=1 in \fIbash(1)\fP. +.ie \n(zZ=1 in \fIbash\fP(1). .el above. This option is enabled by default. .TP 8 @@ -10689,7 +11194,7 @@ The shell sets this option if it is started in restricted mode (see .SM .B "RESTRICTED SHELL" -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el below). The value may not be changed. This is not reset when the startup files are executed, allowing @@ -10714,13 +11219,15 @@ If set, the shell automatically closes file descriptors assigned using the \fI{varname}\fP redirection syntax (see .SM .B REDIRECTION -.ie \n(zZ=1 in \fIbash(1)\fP) +.ie \n(zZ=1 in \fIbash\fP(1)) .el above) instead of leaving them open when the command completes. .TP 8 .B xpg_echo If set, the \fBecho\fP builtin expands backslash-escape sequences by default. +If the \fBposix\fP shell option is also enabled, \fBecho\fP does not +interpret any options. .RE .PD .TP @@ -10743,20 +11250,20 @@ is not supplied. .PD 0 .TP \fB[\fP \fIexpr\fP \fB]\fP +.PD Return a status of 0 (true) or 1 (false) depending on the evaluation of the conditional expression .IR expr . Each operator and operand must be a separate argument. -Expressions are composed of the primaries described -.ie \n(zZ=1 in \fIbash(1)\fP +Expressions are composed of the primaries described +.ie \n(zZ=1 in \fIbash\fP(1) .el above under .SM .BR "CONDITIONAL EXPRESSIONS" . \fBtest\fP does not accept any options, nor does it accept and ignore an argument of \fB\-\-\fP as signifying the end of options. -.if t .sp 0.5 -.if n .sp 1 +.IP Expressions may be combined using the following operators, listed in decreasing order of precedence. The evaluation depends on the number of arguments; see below. @@ -10790,8 +11297,7 @@ is true. .PP \fBtest\fP and \fB[\fP evaluate conditional expressions using a set of rules based on the number of arguments. -.if t .sp 0.5 -.if n .sp 1 +.PP .PD 0 .TP 0 arguments @@ -10804,7 +11310,7 @@ The expression is true if and only if the argument is not null. If the first argument is \fB!\fP, the expression is true if and only if the second argument is null. If the first argument is one of the unary conditional operators listed -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP(1) .el above under .SM @@ -10816,7 +11322,7 @@ is false. 3 arguments The following conditions are applied in the order listed. If the second argument is one of the binary conditional operators listed -.ie \n(zZ=1 in \fIbash(1)\fP +.ie \n(zZ=1 in \fIbash\fP(1) .el above under .SM @@ -10846,51 +11352,71 @@ precedence using the rules listed above. 5 or more arguments The expression is parsed and evaluated according to precedence using the rules listed above. -.if t .sp 0.5 -.if n .sp 1 -.LP -When used with \fBtest\fP or \fB[\fP, the \fB<\fP and \fB>\fP operators -sort lexicographically using ASCII ordering. -.RE .PD +.PP +When the shell is in \fIposix mode\fP, or if the expression is part +of the \fB[[\fP command, +the \fB<\fP and \fB>\fP operators sort using the +current locale. +If the shell is not in \fIposix mode\fP, the \fBtest\fP and \fB[\fP +commands sort lexicographically using ASCII ordering. +.RE .TP .B times Print the accumulated user and system times for the shell and for processes run from the shell. The return status is 0. .TP -\fBtrap\fP [\fB\-lp\fP] [[\fIarg\fP] \fIsigspec\fP ...] -The command -.I arg -is to be read and executed when the shell receives +\fBtrap\fP [\fB\-lp\fP] [[\fIaction\fP] \fIsigspec\fP .\|.\|.] +The +.I action +is a command that is read and executed when the shell receives signal(s) .IR sigspec . If -.I arg +.I action is absent (and there is a single \fIsigspec\fP) or .BR \- , each specified signal is reset to its original disposition (the value it had upon entrance to the shell). If -.I arg +.I action is the null string the signal specified by each .I sigspec is ignored by the shell and by the commands it invokes. +.IP +If no arguments are supplied, +.B trap +displays the actions associated with each trapped signal +as a set of \fBtrap\fP commands +that can be reused as shell input to +restore the current signal dispositions. If -.I arg -is not present and -.B \-p -has been supplied, then the trap commands associated with each -.I sigspec -are displayed. -If no arguments are supplied or if only .B \-p is given, -.B trap -prints the list of commands associated with each signal. +and +.I action +is not present, +then \fBtrap\fP displays the actions associated with each +.I sigspec +or, if none are supplied, for all trapped signals, +as a set of \fBtrap\fP commands +that can be reused as shell input to +restore the current signal dispositions. +The +.B \-P +option behaves similarly, but displays only the actions +associated with each \fIsigspec\fP argument. +.B \-P +requires at least one \fIsigspec\fP argument. +The \fB\-P\fP or \fB\-p\fP options to \fBtrap\fP may be used +in a subshell environment (e.g., command substitution) and, as +long as they are used before \fBtrap\fP is used to change a signal's +handling, will display the state of its parent's traps. +.IP The .B \-l -option causes the shell to print a list of signal names and +option causes \fBtrap\fP to print a list of signal names and their corresponding numbers. Each .I sigspec @@ -10900,15 +11426,14 @@ Signal names are case insensitive and the .SM .B SIG prefix is optional. -.if t .sp 0.5 -.if n .sp 1 +.IP If a .I sigspec is .SM .B EXIT (0) the command -.I arg +.I action is executed on exit from the shell. If a .I sigspec @@ -10916,13 +11441,15 @@ is .SM .BR DEBUG , the command -.I arg +.I action is executed before every \fIsimple command\fP, \fIfor\fP command, -\fIcase\fP command, \fIselect\fP command, every arithmetic \fIfor\fP -command, and before the first command executes in a shell function (see +\fIcase\fP command, \fIselect\fP command, (( arithmetic command, +[[ conditional command, +arithmetic \fIfor\fP command, and before the first command executes +in a shell function (see .SM .B SHELL GRAMMAR -.ie \n(zZ=1 in \fIbash(1)\fP). +.ie \n(zZ=1 in \fIbash\fP(1)). .el above). Refer to the description of the \fBextdebug\fP option to the \fBshopt\fP builtin for details of its effect on the \fBDEBUG\fP trap. @@ -10932,18 +11459,17 @@ is .SM .BR RETURN , the command -.I arg +.I action is executed each time a shell function or a script executed with the \fB.\fP or \fBsource\fP builtins finishes executing. -.if t .sp 0.5 -.if n .sp 1 +.IP If a .I sigspec is .SM .BR ERR , the command -.I arg +.I action is executed whenever a pipeline (which may consist of a single simple command), a list, or a compound command returns a @@ -10970,9 +11496,10 @@ or if the command's return value is being inverted using .BR ! . These are the same conditions obeyed by the \fBerrexit\fP (\fB\-e\fP) option. -.if t .sp 0.5 -.if n .sp 1 -Signals ignored upon entry to the shell cannot be trapped or reset. +.IP +When the shell is not interactive, +signals ignored upon entry to the shell cannot be trapped or reset. +Interactive shells permit trapping signals ignored on entry. Trapped signals that are not being ignored are reset to their original values in a subshell or subshell environment when one is created. The return status is false if any @@ -10981,7 +11508,10 @@ is invalid; otherwise .B trap returns true. .TP -\fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP ...] +\fBtrue\fP +Does nothing, returns a 0 status. +.TP +\fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP .\|.\|.] With no options, indicate how each .I name @@ -10999,23 +11529,24 @@ or .I file if .I name -is an alias, shell reserved word, function, builtin, or disk file, +is an alias, shell reserved word, function, builtin, or executable disk file, respectively. If the .I name -is not found, then nothing is printed, and an exit status of false -is returned. +is not found, then nothing is printed, and \fBtype\fP returns a +non-zero exit status. If the .B \-p option is used, .B type -either returns the name of the disk file -that would be executed if +either returns the name of the executable file +that would be found by searching +.B $PATH +if .I name were specified as a command name, or nothing if -.if t \f(CWtype -t name\fP -.if n ``type -t name'' +.Q "type \-t name" would not return .IR file . The @@ -11024,8 +11555,7 @@ option forces a .SM .B PATH search for each \fIname\fP, even if -.if t \f(CWtype -t name\fP -.if n ``type -t name'' +.Q "type \-t name" would not return .IR file . If a command is hashed, @@ -11040,16 +11570,20 @@ If the .B \-a option is used, .B type -prints all of the places that contain -an executable named +prints all of the places that contain a command named .IR name . -This includes aliases and functions, -if and only if the -.B \-p -option is not also used. -The table of hashed commands is not consulted +This includes aliases, reserved words, functions, and builtins, +but the path search options (\fB\-p\fP and \fB\-P\fP) +can be supplied to restrict the output to executable files. +\fBtype\fP does not consult the table of hashed commands when using -.BR \-a . +.B \-a +with +.BR \-p , +and only performs a +.SM +.B PATH +search for \fIname\fP. The .B \-f option suppresses shell function lookup, as with the \fBcommand\fP builtin. @@ -11103,7 +11637,8 @@ The maximum size of core files created The maximum size of a process's data segment .TP .B \-e -The maximum scheduling priority ("nice") +The maximum scheduling priority (\c +.Q nice ). .TP .B \-f The maximum size of files written by the shell and its children @@ -11216,7 +11751,7 @@ 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 \fImode\fP argument was supplied, and false otherwise. .TP -\fBunalias\fP [\-\fBa\fP] [\fIname\fP ...] +\fBunalias\fP [\-\fBa\fP] [\fIname\fP .\|.\|.] Remove each \fIname\fP from the list of defined aliases. If .B \-a is supplied, all alias definitions are removed. The return @@ -11224,7 +11759,7 @@ value is true unless a supplied .I name is not a defined alias. .TP -\fBunset\fP [\-\fBfv\fP] [\-\fBn\fP] [\fIname\fP ...] +\fBunset\fP [\-\fBfv\fP] [\-\fBn\fP] [\fIname\fP .\|.\|.] For each .IR name , remove the corresponding variable or function. @@ -11292,7 +11827,7 @@ subsequently reset. The exit status is true unless a .I name is readonly or may not be unset. .TP -\fBwait\fP [\fB\-fn\fP] [\fP\-p\fP \fIvarname\fP] [\fIid ...\fP] +\fBwait\fP [\fB\-fn\fP] [\fP\-p\fP \fIvarname\fP] [\fIid\fP .\|.\|.] Wait for each specified child process and return its termination status. Each .I id @@ -11326,20 +11861,20 @@ specifies a non-existent process or job, the return status is 127. If \fBwait\fP is interrupted by a signal, the return status will be greater than 128, as described under .B SIGNALS -.ie \n(zZ=1 in \fIbash(1)\fP. +.ie \n(zZ=1 in \fIbash\fP(1). .el above. Otherwise, the return status is the exit status of the last process or job waited for. .SH "SHELL COMPATIBILITY MODE" Bash-4.0 introduced the concept of a \fIshell compatibility level\fP, -specified as a set of options to the shopt builtin ( +specified as a set of options to the shopt builtin (\c .BR compat31 , .BR compat32 , .BR compat40 , .BR compat41 , and so on). There is only one current -compatibility level -- each option is mutually exclusive. +compatibility level \(em each option is mutually exclusive. The compatibility level is intended to allow users to select behavior from previous versions that is incompatible with newer versions while they migrate scripts to use current features and @@ -11348,7 +11883,7 @@ behavior. It's intended to be a temporary solution. This section does not mention behavior that is standard for a particular version (e.g., setting \fBcompat32\fP means that quoting the rhs of the regexp matching operator quotes special regexp characters in the word, which is -default behavior in bash-3.2 and subsequent versions). +default behavior in bash-3.2 and subsequent versions). .PP If a user enables, say, \fBcompat32\fP, it may affect the behavior of other compatibility levels up to and including the current compatibility level. @@ -11371,17 +11906,17 @@ to this variable (a decimal version number like 4.2, or an integer corresponding to the \fBcompat\fP\fINN\fP option, like 42) determines the compatibility level. .PP -Starting with bash-4.4, Bash has begun deprecating older compatibility +Starting with bash-4.4, \fBbash\fP has begun deprecating older compatibility levels. Eventually, the options will be removed in favor of .SM .BR BASH_COMPAT . .PP -Bash-5.0 is the final version for which there will be an individual shopt -option for the previous version. Users should use +Bash-5.0 was the final version for which there will be an individual shopt +option for the previous version. Users should control the compatibility +level with .SM -.B BASH_COMPAT -on bash-5.0 and later versions. +.BR BASH_COMPAT . .PP The following table describes the behavior changes controlled by each compatibility level setting. @@ -11400,7 +11935,7 @@ and it is required for bash-5.1 and later versions. .PD 0 .RS .IP \(bu -quoting the rhs of the \fB[[\fP command's regexp matching operator (=~) +quoting the rhs of the \fB[[\fP command's regexp matching operator (=\*~) has no special effect .RE .PD @@ -11409,11 +11944,9 @@ has no special effect .PD 0 .RS .IP \(bu -interrupting a command list such as "a ; b ; c" causes the execution -of the next command in the list (in bash-4.0 and later versions, -the shell acts as if it received the interrupt, so -interrupting one command in a list aborts the execution of the -entire list) +the \fB<\fP and \fB>\fP operators to the \fB[[\fP command do not +consider the current locale when comparing strings; they use ASCII +ordering. .RE .PD .TP @@ -11424,7 +11957,7 @@ entire list) the \fB<\fP and \fB>\fP operators to the \fB[[\fP command do not consider the current locale when comparing strings; they use ASCII ordering. -Bash versions prior to bash-4.1 use ASCII collation and +\fBBash\fP versions prior to bash-4.1 use ASCII collation and .IR strcmp (3); bash-4.1 and later use the current locale's collation sequence and .IR strcoll (3). @@ -11468,7 +12001,7 @@ are not special within double-quoted word expansions .IP \(bu the shell does not print a warning message if an attempt is made to use a quoted compound assignment as an argument to declare -(e.g., declare -a foo=\(aq(1 2)\(aq). Later versions warn that this usage is +(e.g., declare \-a foo=\*'(1 2)\*'). Later versions warn that this usage is deprecated .IP \(bu word expansion errors are considered non-fatal errors that cause the @@ -11536,6 +12069,45 @@ when the \fB\-l\fP option is supplied. The \fBunset\fP builtin treats attempts to unset array subscripts \fB@\fP and \fB*\fP differently depending on whether the array is indexed or associative, and differently than in previous versions. +.IP \(bu +arithmetic commands ( +.BR (( .\|.\|.\& )) +) and the expressions in an arithmetic for +statement can be expanded more than once +.IP \(bu +expressions used as arguments to arithmetic operators in the \fB[[\fP +conditional command can be expanded more than once +.IP \(bu +the expressions in substring parameter brace expansion can be +expanded more than once +.IP \(bu +the expressions in the +.BR $(( .\|.\|.\& )) +word expansion can be expanded more than once +.IP \(bu +arithmetic expressions used as indexed array subscripts can be +expanded more than once +.IP \(bu +\fBtest \-v\fP, when given an argument of \fBA[@]\fP, where \fBA\fP is +an existing associative array, will return true if the array has any set +elements. +Bash-5.2 will look for and report on a key named \fB@\fP. +.IP \(bu +the ${\fIparameter\fP\fB[:]=\fP\fIvalue\fP} word expansion will return +\fIvalue\fP, before any variable-specific transformations have been +performed (e.g., converting to lowercase). +Bash-5.2 will return the final value assigned to the variable. +.IP \(bu +Parsing command substitutions will behave as if extended globbing +(see the description of the +.B shopt +builtin above) +is enabled, so that parsing a command substitution containing an extglob +pattern (say, as part of a shell function) will not fail. +This assumes the intent is to enable extglob before the command is executed +and word expansions are performed. +It will fail at word expansion time if extglob hasn't been +enabled by the time the command is executed. .RE .PD .\" bash_builtins @@ -11622,7 +12194,7 @@ option to the builtin command .IP \(bu turning off restricted mode with -\fBset +r\fP or \fBshopt -u restricted_shell\fP. +\fBset +r\fP or \fBshopt \-u restricted_shell\fP. .PP These restrictions are enforced after any startup files are read. .PP @@ -11632,7 +12204,7 @@ These restrictions are enforced after any startup files are read. .SM .B "COMMAND EXECUTION" above), -\} +.\} .B rbash turns off any restrictions in the shell spawned to execute the script. @@ -11647,10 +12219,10 @@ script. .TP \fIThe Gnu History Library\fP, Brian Fox and Chet Ramey .TP -\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE -- +\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE \(em http://pubs.opengroup.org/onlinepubs/9699919799/ .TP -http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode +http://tiswww.case.edu/\*~chet/bash/POSIX \(em a description of posix mode .TP \fIsh\fP(1), \fIksh\fP(1), \fIcsh\fP(1) .TP @@ -11667,20 +12239,20 @@ The \fBbash\fP executable .FN /etc/profile The systemwide initialization file, executed for login shells .TP -.FN ~/.bash_profile +.FN \*~/.bash_profile The personal initialization file, executed for login shells .TP -.FN ~/.bashrc +.FN \*~/.bashrc The individual per-interactive-shell startup file .TP -.FN ~/.bash_logout +.FN \*~/.bash_logout The individual login shell cleanup file, executed when a login shell exits .TP -.FN ~/.bash_history +.FN \*~/.bash_history The default value of \fBHISTFILE\fP, the file in which bash saves the command history .TP -.FN ~/.inputrc +.FN \*~/.inputrc Individual \fIreadline\fP initialization file .PD .SH AUTHORS @@ -11693,7 +12265,7 @@ Chet Ramey, Case Western Reserve University chet.ramey@case.edu .SH BUG REPORTS If you find a bug in -.B bash, +.BR bash , 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 @@ -11706,8 +12278,9 @@ Once you have determined that a bug actually exists, use the .I bashbug 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 \fIbug-bash@gnu.org\fP or posted to the Usenet +You may send suggestions and +.Q philosophical +bug reports to \fIbug-bash@gnu.org\fP or post them to the Usenet newsgroup .BR gnu.bash.bug . .PP @@ -11715,7 +12288,7 @@ ALL bug reports should include: .PP .PD 0 .TP 20 -The version number of \fBbash\fR +The version number of \fBbash\fP .TP The hardware and operating system .TP @@ -11723,7 +12296,9 @@ The compiler used to compile .TP A description of the bug behaviour .TP -A short script or `recipe' which exercises the bug +A short script or \c +.Q recipe " \c" +which exercises the bug .PD .PP .I bashbug @@ -11749,13 +12324,15 @@ Aliases are confusing in some uses. .PP Shell builtin commands and functions are not stoppable/restartable. .PP -Compound commands and command sequences of the form `a ; b ; c' +Compound commands and command sequences of the form +.Q "a ; b ; c" are not handled gracefully when process suspension is attempted. When a process is stopped, the shell immediately executes the next command in the sequence. -It suffices to place the sequence of commands between -parentheses to force it into a subshell, which may be stopped as -a unit. +It suffices to place the sequence of commands between parentheses to +force it into a subshell, which may be stopped as a unit, +or to start the command in the background and immediately +bring it into the foreground. .PP Array variables may not (yet) be exported. .PP diff --git a/doc/bash.html b/doc/bash.html index d80936900..98efa763e 100644 --- a/doc/bash.html +++ b/doc/bash.html @@ -3,7 +3,7 @@ -
BASH(1)2022 September 19BASH(1) +BASH(1)2024 March 29BASH(1)

Index @@ -28,6 +28,25 @@ + + + + + + + + + + + + + + + + + + + @@ -54,7 +73,7 @@ bash - GNU Bourne-Again SHell

COPYRIGHT

-Bash is Copyright © 1989-2022 by the Free Software Foundation, Inc. +Bash is Copyright © 1989-2023 by the Free Software Foundation, Inc.  

DESCRIPTION

@@ -68,6 +87,7 @@ also incorporates useful features from the Korn and C shells (ksh and csh).

+POSIX is the name for a family of computing standards based on Unix. Bash is intended to be a conformant implementation of the @@ -187,7 +207,9 @@ signals the end of options and disables further option processing. Any arguments after the -- -are treated as filenames and arguments. An argument of +are treated as a shell script filename (see below) +and arguments passed to that script. +An argument of - is equivalent to --. @@ -330,7 +352,7 @@ nor the -s option has been supplied, the first argument is assumed to -be the name of a file containing shell commands. +be the name of a file containing shell commands (a shell script). If bash @@ -463,12 +485,19 @@ expanded value as the name of a file to read and execute. behaves as if the following command were executed:

+

-if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi + +if [ -n " +$BASH_ENV" + ]; then . " +$BASH_ENV" +; fi

+ but the value of the PATH @@ -762,7 +791,8 @@ system time consumed by its execution are reported when the pipeline terminates. The -p option changes the output format to that specified by POSIX. When the shell is in posix mode, it does not recognize -time as a reserved word if the next token begins with a `-'. +time as a reserved word if the next token begins with a + The TIMEFORMAT @@ -785,8 +815,7 @@ The TIMEFORMAT -variable may be used to specify the format of -the time information. +variable specifies the format of the time information.

Each command in a multi-command pipeline, @@ -938,6 +967,7 @@ as if it were within double quotes, but double quote characters in expression are not treated specially and are removed.

[[ expression ]]
+ Return a status of 0 or 1 depending on the evaluation of the conditional expression expression. Expressions are composed of the primaries described below under @@ -952,14 +982,10 @@ substitution, and quote removal on those words (the expansions that would occur if the words were enclosed in double quotes). Conditional operators such as -f must be unquoted to be recognized as primaries. -

- - +

When used with [[, the < and > operators sort lexicographically using the current locale. -

- - +

When the == and != operators are used, the string to the right of the operator is considered a pattern and matched according to the rules described below under Pattern Matching, @@ -974,15 +1000,15 @@ The return value is 0 if the string matches (==) or does not match (!=) the pattern, and 1 otherwise. Any part of the pattern may be quoted to force the quoted portion to be matched as a string. -

- - +

An additional binary operator, =~, is available, with the same precedence as == and !=. When it is used, the string to the right of the operator is considered a POSIX extended regular expression and matched accordingly (using the POSIX regcomp and regexec interfaces -usually described in regex(3)). +usually described in +regex(3)). + The return value is 0 if the string matches the pattern, and 1 otherwise. If the regular expression is syntactically incorrect, the conditional @@ -1000,9 +1026,7 @@ expansion forces the entire pattern to be matched literally. Treat bracket expressions in regular expressions carefully, since normal quoting and pattern characters lose their meanings between brackets. -

- - +

The pattern will match if it matches any part of the string. Anchor the pattern using the ^ and $ regular expression operators to force it to match the entire string. @@ -1028,20 +1052,16 @@ indices. The element of with index n is the portion of the string matching the nth parenthesized subexpression. -Bash sets +Bash sets BASH_REMATCH in the global scope; declaring it as a local variable will lead to unexpected results. -

- - +

Expressions may be combined using the following operators, listed in decreasing order of precedence: -

- - +

@@ -1155,7 +1175,7 @@ is the exit status of the last command executed in or zero if no commands were executed.
case word in [ [(] pattern [ | pattern ] -
+.. ) list ;; ] ... esac
A case command first expands word, and tries to match it against each pattern in turn, using the matching rules described under @@ -1444,7 +1464,8 @@ characters: `, -", +" +, \, or @@ -1476,7 +1497,7 @@ quotes (see below).

-Character sequences of the form $aqstringaq are treated +Character sequences of the form $'string' are treated as a special variant of single quotes. The sequence expands to string, with backslash-escaped characters in string replaced as specified by the ANSI C standard. @@ -1523,11 +1544,11 @@ vertical tab

backslash -
\aq +
\'
single quote -
\dq +
\
double quote @@ -1568,7 +1589,9 @@ The expanded result is single-quoted, as if the dollar sign had not been present.

-A double-quoted string preceded by a dollar sign ($dqstringdq) +A double-quoted string preceded by a dollar sign ($" +string" +) will cause the string to be translated according to the current locale. The gettext infrastructure performs the lookup and translation, using the LC_MESSAGES, TEXTDOMAINDIR, @@ -1586,7 +1609,7 @@ See the description of shopt below under -SHELLBUILTINCOMMANDS. +SHELL BUILTIN COMMANDS.   @@ -1663,8 +1686,10 @@ below). If the variable has its attribute set, then value -is evaluated as an arithmetic expression even if the $((...)) expansion is -not used (see +is evaluated as an arithmetic expression even if the +$((...)) + +expansion is not used (see Arithmetic Expansion below). @@ -1724,12 +1749,15 @@ whose name is passed as an argument to the function. For instance, if a variable name is passed to a shell function as its first argument, running

+

-declare -n ref=$1 + +declare -n ref=$1

+ inside the function creates a nameref variable ref whose value is the variable name passed as the first argument. References and assignments to ref, and changes to its attributes, @@ -1792,8 +1820,14 @@ with the value of each parameter separated by the first character of the IFS -special variable. That is, "$*" is equivalent -to "$1c$2c...", where +special variable. +That is, +$* + +is equivalent to +$1c$2c..., + +where c is the first character of the value of the @@ -1820,15 +1854,22 @@ quotes, these words are subject to word splitting. In contexts where word splitting is not performed, this expands to a single word with each positional parameter separated by a space. -When the -expansion occurs within double quotes, each parameter expands to a -separate word. That is, "$@" is equivalent to -"$1" "$2" ... +When the expansion occurs within double quotes, +each parameter expands to a separate word. +That is, +$@ + +is equivalent to +$1 $2 ... + If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. -When there are no positional parameters, "$@" and +When there are no positional parameters, +$@ + +and $@ expand to nothing (i.e., they are removed). @@ -2005,6 +2046,11 @@ builtin below). Setting extdebug after the shell has started to execute a script, or referencing this variable when extdebug is not set, may result in inconsistent values. +Assignments to +BASH_ARGC + + +have no effect, and it may not be unset.

BASH_ARGV
@@ -2031,6 +2077,11 @@ builtin below). Setting extdebug after the shell has started to execute a script, or referencing this variable when extdebug is not set, may result in inconsistent values. +Assignments to +BASH_ARGV + + +have no effect, and it may not be unset.
BASH_ARGV0
@@ -2095,6 +2146,11 @@ Use to obtain the current line number. +Assignments to +BASH_LINENO + + +have no effect, and it may not be unset.
BASH_LOADABLES_PATH
@@ -2112,6 +2168,17 @@ The element with index 0 is the portion of the string matching the entire regular expression. The element with index n is the portion of the string matching the nth parenthesized subexpression. +
BASH_MONOSECONDS + +
+Each time this variable is referenced, it expands to the value returned +by the system's monotonic clock, if one is available. +If there is no monotonic clock, this is equivalent to EPOCHSECONDS. +If +BASH_MONOSECONDS + +is unset, it loses its special properties, even if it is +subsequently reset.
BASH_SOURCE
@@ -2125,6 +2192,11 @@ The shell function ${FUNCNAME[$i]} is defined in the file ${BASH_SOURCE[$i]} and called from ${BASH_SOURCE[$i+1]}. +Assignments to +BASH_SOURCE + + +have no effect, and it may not be unset.
BASH_SUBSHELL
@@ -2136,6 +2208,16 @@ If is unset, it loses its special properties, even if it is subsequently reset. +
BASH_TRAPSIG + +
+Set to the signal number corresponding to the trap action being executed +during its execution. +See the description of trap under +SHELL BUILTIN COMMANDS + + +below for information about signal numbers and trap execution.
BASH_VERSINFO
@@ -2144,7 +2226,9 @@ this instance of bash. The values assigned to the array members are as follows: +

+

BASH_VERSINFO[0] @@ -2166,7 +2250,7 @@ The build version.
BASH_VERSINFO[4]
-The release status (e.g., beta1). +The release status (e.g., beta).
BASH_VERSINFO[5]
@@ -2176,6 +2260,7 @@ The value of
+
BASH_VERSION
@@ -2289,8 +2374,10 @@ subsequently reset.
Each time this parameter is referenced, it expands to the number of seconds -since the Unix Epoch (see time(3)) as a floating point value -with micro-second granularity. +since the Unix Epoch (see +time(3)) + +as a floating point value with micro-second granularity. Assignments to EPOCHREALTIME @@ -2306,7 +2393,9 @@ subsequently reset.
Each time this parameter is referenced, it expands to the number of seconds -since the Unix Epoch (see time(3)). +since the Unix Epoch (see +time(3)). + Assignments to EPOCHSECONDS @@ -2326,12 +2415,12 @@ shell startup. This variable is readonly.
FUNCNAME
+ An array variable containing the names of all shell functions currently in the execution call stack. The element with index 0 is the name of any currently-executing shell function. The bottom-most element (the one with the highest index) is -"main". This variable exists only when a shell function is executing. Assignments to @@ -2345,9 +2434,7 @@ If is unset, it loses its special properties, even if it is subsequently reset. -

- - +

This variable can be used with BASH_LINENO and BASH_SOURCE. Each element of FUNCNAME has corresponding elements in BASH_LINENO and BASH_SOURCE to describe the call stack. @@ -2356,6 +2443,7 @@ For instance, ${FUNCNAME[$i]} was called from the file ${BASH_LINENO[$i]}. The caller builtin displays the current call stack using this information. +
GROUPS
@@ -2508,7 +2596,6 @@ subsequently reset.
Any numeric argument given to a readline command that was defined using -bind -x (see SHELL BUILTIN COMMANDS @@ -2523,7 +2610,6 @@ The contents of the readline line buffer, for use with -bind -x (see SHELL BUILTIN COMMANDS @@ -2537,7 +2623,6 @@ The position of the mark (saved insertion point) in the readline line buffer, for use with -bind -x (see SHELL BUILTIN COMMANDS @@ -2553,7 +2638,6 @@ The position of the insertion point in the readline line buffer, for use with -bind -x (see SHELL BUILTIN COMMANDS @@ -2627,7 +2711,14 @@ is started.
This variable expands to a 32-bit pseudo-random number each time it is referenced. The random number generator is not linear on systems that -support /dev/urandom or arc4random, so each returned number +support + +/dev/urandom + +or +arc4random(3), + +so each returned number has no relationship to the numbers preceding it. The random number generator cannot be seeded, so assignments to this variable have no effect. @@ -2672,7 +2763,7 @@ level is set to the default for the current version. If BASH_COMPAT is set to a value that is not one of the valid compatibility levels, the shell prints an error message and sets the compatibility level to the default for the current version. -The valid values correspond to the compatibility levels +A subset of the valid values correspond to the compatibility levels described below under SHELL COMPATIBILITY MODE. @@ -2704,7 +2795,6 @@ is not used to search for the resultant filename.
If set to an integer corresponding to a valid file descriptor, bash will write the trace output generated when -set -x is enabled to that file descriptor. The file descriptor is closed when @@ -2738,13 +2828,12 @@ for destination directories specified by the command. A sample value is -".:~:/usr".
CHILD_MAX
Set the number of exited child status values for the shell to remember. -Bash will not allow this value to be decreased below a POSIX-mandated +Bash will not allow this value to be decreased below a POSIX-mandated minimum, and there is a maximum value (currently 8192) that this may not exceed. The minimum value is system-dependent. @@ -2772,7 +2861,6 @@ Each array element contains one possible completion.
If bash finds this variable in the environment when the shell starts with value -t, it assumes that the shell is running in an Emacs shell buffer and disables line editing. @@ -2823,7 +2911,6 @@ A filename whose suffix matches one of the entries in is excluded from the list of matched filenames. A sample value is -".o:~".
FUNCNEST @@ -2842,6 +2929,41 @@ of the patterns in it is removed from the list of matches. +
GLOBSORT + +
+Control how the results of pathname expansion are sorted. +The value of this variable specifies the sort criteria and sort order for +the results of pathname expansion. +If this variable is unset or set to the null string, pathname expansion +uses the historical behavior of sorting by name. +If set, a valid value begins with an optional +, which is ignored, +or -, which reverses the sort order from ascending to descending, +followed by a sort specifier. +The valid sort specifiers are +name, + +size, + +mtime, + +atime, + +ctime, + +and +blocks, + +which sort the files on name, file size, modification time, access time, +inode change time, and number of blocks, respectively. +For example, a value of -mtime sorts the results in descending +order by modification time (newest first). +A sort specifier of nosort disables sorting completely; the results +are returned in the order they are read from the file system,. +If the sort specifier is missing, it defaults to name, +so a value of + is equivalent to the null string, +and a value of - sorts by name in descending order. +Any invalid value restores the historical sorting behavior.
HISTCONTROL
@@ -2890,8 +3012,10 @@ The name of the file in which command history is saved (see HISTORY -below). The default value is ~/.bash_history. If unset, the -command history is not saved when a shell exits. +below). +Bash assigns a default value of ~/.bash_history. +If HISTFILE is unset or null, +the command history is not saved when a shell exits.
HISTFILESIZE
@@ -2909,17 +3033,28 @@ after reading any startup files.
A colon-separated list of patterns used to decide which command lines -should be saved on the history list. Each pattern is anchored at the -beginning of the line and must match the complete line (no implicit -`*' is appended). Each pattern is tested against the line +should be saved on the history list. +If a command line matches one of the patterns in the value of +HISTIGNORE, + + +it is not saved on the history list. +Each pattern is anchored at the +beginning of the line and must match the complete line +(bash will not implicitly append a + +Each pattern is tested against the line after the checks specified by HISTCONTROL are applied. -In addition to the normal shell pattern matching characters, `&' -matches the previous history line. `&' may be escaped using a -backslash; the backslash is removed before attempting a match. +In addition to the normal shell pattern matching characters, + +matches the previous history line. +A backslash will escape the + +the backslash is removed before attempting a match. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of HISTIGNORE. @@ -2943,7 +3078,10 @@ The shell sets the default value to 500 after reading any startup files.
If this variable is set and not null, its value is used as a format string -for strftime(3) to print the time stamp associated with each history +for +strftime(3) + +to print the time stamp associated with each history entry displayed by the history builtin. If this variable is set, time stamps are written to the history file so they may be preserved across shell sessions. @@ -2998,7 +3136,7 @@ split lines into words with the read builtin command. The default value is -``<space><tab><newline>''. +
IGNOREEOF
@@ -3124,14 +3262,21 @@ greater than or equal to zero, the shell disables mail checking.
A colon-separated list of filenames to be checked for mail. The message to be printed when mail arrives in a particular file -may be specified by separating the filename from the message with a `?'. +may be specified by separating the filename from the message with a + When used in the text of the message, $_ expands to the name of the current mailfile. Example:

-MAILPATH=aq/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"aq + +MAILPATH='/var/mail/bfox?" +You have mail" +:~/shell-mail?" +$_ has mail!" +' +

Bash @@ -3184,7 +3329,6 @@ and is set by the administrator who installs A common value is -/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin.

POSIXLY_CORRECT @@ -3196,7 +3340,6 @@ enters posix mode before reading the startup files, as if the invocation option had been supplied. If it is set while the shell is running, bash enables posix mode, as if the command -set -o posix had been executed. When the shell enters posix mode, it sets this variable if it was @@ -3207,7 +3350,7 @@ not already set. If this variable is set, and is an array, the value of each set element is executed as a command prior to issuing each primary prompt. -If this is set but not an array variable, +If this is set but not an array variable, its value is used as a command to execute instead.
PROMPT_DIRTRIM @@ -3236,7 +3379,7 @@ The value of this parameter is expanded (see below) and used as the primary prompt string. The default value is -``\s-\v\$ ''. +
PS2
@@ -3245,7 +3388,7 @@ The value of this parameter is expanded as with and used as the secondary prompt string. The default is -``> ''. +
PS3
@@ -3267,13 +3410,15 @@ The value of this parameter is expanded as with and the value is printed before each command bash -displays during an execution trace. The first character of -the expanded value of +displays during an execution trace. +The first character of the expanded value of PS4 is replicated multiple times, as necessary, to indicate multiple -levels of indirection. The default is ``+ ''. +levels of indirection. +The default is +
SHELL
@@ -3293,8 +3438,10 @@ reserved word should be displayed. The % character introduces an escape sequence that is expanded to a time value or other information. The escape sequences and their meanings are as follows; the -braces denote optional portions. +brackets denote optional portions. +

+

@@ -3321,12 +3468,13 @@ The CPU percentage, computed as (%U + %S) / %R.
+
The optional p is a digit specifying the precision, the number of fractional digits after a decimal point. A value of 0 causes no decimal point or fraction to be output. -At most three places after the decimal point may be specified; -values of p greater than 3 are changed to 3. +At most six places after the decimal point may be specified; +values of p greater than 6 are changed to 6. If p is not specified, the value 3 is used.
The optional l specifies a longer format, including @@ -3335,8 +3483,8 @@ The value of p determines whether or not the fraction is included.
If this variable is not set, bash acts as if it had the -value $aq\nreal\t%3lR\nuser\t%3lU\nsys\t%3lSaq. -If the value is null, no timing information is displayed. +value $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. +If the value is null, bash does not display any timing information. A trailing newline is added when the format string is displayed.
TMOUT @@ -3410,17 +3558,22 @@ and tokenization (see below). The first character is the history expansion character, the character which signals the start of a history -expansion, normally `!'. +expansion, normally + The second character is the quick substitution character, which is used as shorthand for re-running the previous -command entered, substituting one string for another in the command. -The default is `^'. -The optional third character is the character -which indicates that the remainder of the line is a comment when found -as the first character of a word, normally `#'. The history -comment character causes history substitution to be skipped for the -remaining words on the line. It does not necessarily cause the shell -parser to treat the rest of the line as a comment. +command entered, substituting one string for another in the command, +when it appears as the first character on the line. +The default is + +The optional third character is the character which indicates that +the remainder of the line is a comment when found as the first character +of a word, normally + +The history comment character causes history substitution to be skipped +for the remaining words on the line. +It does not necessarily cause the shell parser to treat the rest of the +line as a comment.
  @@ -3479,11 +3632,15 @@ Arrays are assigned to using compound assignments of the form name=(value1 ... valuen), where each value may be of the form [subscript]=string. Indexed array assignments do not require anything but string. -Each value in the list is expanded using all the shell expansions +Each value in the list is expanded using the shell expansions described below under -EXPANSION. +EXPANSION, +but values that are valid variable assignments +including the brackets and subscript do not undergo +brace expansion and word splitting, as with individual +variable assignments. When assigning to indexed arrays, if the optional brackets and subscript are supplied, that index is assigned to; otherwise the index of the element assigned is the last index assigned @@ -3496,7 +3653,8 @@ or a list of words that is interpreted as a sequence of alternating keys and values: name=( key1 value1 key2 value2 ...). These are treated identically to -name=( [key1]=value1 [key2]=value2 ...). +name=( [key1]=value1 [key2]=value2 +...). The first word in the list determines how the remaining words are interpreted; all assignments in a list must be of the same type. When using key/value pairs, the keys may not be missing or empty; @@ -3529,7 +3687,9 @@ Any element of an array may be referenced using ${name[subscript]}. The braces are required to avoid conflicts with pathname expansion. If subscript is @ or *, the word expands to -all members of name. These subscripts differ only when the +all members of name, +unless noted in the description of a builtin or word expansion. +These subscripts differ only when the word appears within double quotes. If the word is double-quoted, ${name[*]} expands to a single word with the value of each array member separated by the first @@ -3563,7 +3723,7 @@ array, and an index of -1 references the last element. Referencing an array variable without a subscript is equivalent to referencing the array with a subscript of 0. -Any reference to a variable using a valid subscript is legal, and +Any reference to a variable using a valid subscript is valid, and bash will create an array if necessary. @@ -3643,7 +3803,7 @@ reused as assignments.

EXPANSION

Expansion is performed on the command line after it has been split into -words. There are seven kinds of expansion performed: +words. The shell performs these expansions: brace expansion, tilde expansion, @@ -3656,8 +3816,10 @@ words. There are seven kinds of expansion performed: word splitting, +pathname expansion, + and -pathname expansion. +quote removal.

@@ -3666,7 +3828,8 @@ brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; -and pathname expansion. +pathname expansion; +and quote removal.

On systems that can support it, there is an additional expansion @@ -3676,16 +3839,23 @@ same time as tilde, parameter, variable, and arithmetic expansion and command substitution.

-After these expansions are performed, quote characters present in the -original word are removed unless they have been quoted themselves -(quote removal). +Quote removal is always performed last. +It removes quote characters present in the original word, +not ones resulting from one of the other expansions, +unless they have been quoted themselves.

Only brace expansion, word splitting, and pathname expansion can increase the number of words of the expansion; other expansions expand a single word to a single word. The only exceptions to this are the expansions of -"$@" and "${name[@]}", +$@ + +and +${name[@]} , + + + and, in most cases, $* and ${name[*]} as explained above (see PARAMETERS). @@ -3715,7 +3885,8 @@ to each resulting string, expanding left to right. Brace expansions may be nested. The results of each expanded string are not sorted; left to right order is preserved. -For example, a{d,c,b}e expands into `ade ace abe'. +For example, a{d,c,b}e expands into +

A sequence expression takes the form @@ -3724,8 +3895,8 @@ where x and y are either integers or single letters, and incr, an optional increment, is an integer. When integers are supplied, the expression expands to each number between x and y, inclusive. -Supplied integers may be prefixed with 0 to force each term to have the -same width. +If the supplied integers are prefixed with 0, each term will +have the same width, zero-padding if necessary. When either x or y begins with a zero, the shell attempts to force all generated terms to contain the same number of digits, zero-padding where necessary. @@ -3819,7 +3990,9 @@ below).  

Tilde Expansion

-If a word begins with an unquoted tilde character (`~'), all of +If a word begins with an unquoted tilde character ( + +all of the characters preceding the first unquoted slash (or all characters, if there is no unquoted slash) are considered a tilde-prefix. If none of the characters in the tilde-prefix are quoted, the @@ -3840,25 +4013,38 @@ Otherwise, the tilde-prefix is replaced with the home directory associated with the specified login name.

-If the tilde-prefix is a `~+', the value of the shell variable +If the tilde-prefix is a + +the value of the shell variable PWD replaces the tilde-prefix. -If the tilde-prefix is a `~-', the value of the shell variable +If the tilde-prefix is a + +the value of the shell variable OLDPWD, if it is set, is substituted. If the characters following the tilde in the tilde-prefix consist of a number N, optionally prefixed -by a `+' or a `-', the tilde-prefix is replaced with the corresponding +by a + +or a + +the tilde-prefix is replaced with the corresponding element from the directory stack, as it would be displayed by the dirs builtin invoked with the tilde-prefix as an argument. If the characters following the tilde in the tilde-prefix consist of a -number without a leading `+' or `-', `+' is assumed. +number without a leading + +or + + +is assumed.

If the login name is invalid, or the tilde expansion fails, the word @@ -3887,18 +4073,20 @@ and and the shell assigns the expanded value.

-Bash also performs tilde expansion on words satisfying the conditions of -variable assignments (as described above under +Bash also performs tilde expansion on words satisfying the conditions +of variable assignments (as described above under PARAMETERS) when they appear as arguments to simple commands. -Bash does not do this, except for the declaration commands listed +Bash does not do this, except for the declaration commands listed above, when in posix mode.  

Parameter Expansion

-The `$' character introduces parameter expansion, +The + +character introduces parameter expansion, command substitution, or arithmetic expansion. The parameter name or symbol to be expanded may be enclosed in braces, which are optional but serve to protect the variable to be expanded from @@ -3906,7 +4094,8 @@ characters immediately following it which could be interpreted as part of the name.

-When braces are used, the matching ending brace is the first `}' +When braces are used, the matching ending brace is the first + not escaped by a backslash or within a quoted string, and not within an embedded arithmetic expansion, command substitution, or parameter expansion. @@ -4028,7 +4217,7 @@ and extending to the end of the value. below). -

+

If offset evaluates to a number less than zero, the value is used as an offset in characters from the end of the value of parameter. @@ -4039,15 +4228,15 @@ a number of characters, and the expansion is the characters between offset and that result. Note that a negative offset must be separated from the colon by at least one space to avoid being confused with the :- expansion. -

+

If parameter is @ or *, the result is length positional parameters beginning at offset. A negative offset is taken relative to one greater than the greatest positional parameter, so an offset of -1 evaluates to the last positional -parameter. +parameter (or 0 if there are no positional parameters). It is an expansion error if length evaluates to a number less than zero. -

+

If parameter is an indexed array name subscripted by @ or *, the result is the length members of the array beginning with ${parameter[offset]}. @@ -4055,10 +4244,10 @@ A negative offset is taken relative to one greater than the maximum index of the specified array. It is an expansion error if length evaluates to a number less than zero. -

+

Substring expansion applied to an associative array produces undefined results. -

+

Substring indexing is zero-based unless the positional parameters are used, in which case the indexing starts at 1 by default. If offset is 0, and the positional parameters are used, $0 is @@ -4140,8 +4329,11 @@ the value of then the result of the expansion is the expanded value of parameter -with the shortest matching pattern (the ``#'' case) or the -longest matching pattern (the ``##'' case) deleted. +with the shortest matching pattern (the + +case) or the longest matching pattern (the + +case) deleted. If parameter @@ -4183,8 +4375,11 @@ If the pattern matches a trailing portion of the expanded value of then the result of the expansion is the expanded value of parameter -with the shortest matching pattern (the ``%'' case) or the -longest matching pattern (the ``%%'' case) deleted. +with the shortest matching pattern (the + +case) or the longest matching pattern (the + +case) deleted. If parameter @@ -4225,7 +4420,7 @@ The match is performed using the rules described under below. In the first form above, only the first match is replaced. -If there are two slashes separating parameter and pattern +If there are two slashes separating parameter and pattern (the second form above), all matches of pattern are replaced with string. If pattern is preceded by # (the third form above), @@ -4237,11 +4432,11 @@ matches of pattern are deleted. If string is null, matches of pattern are deleted and the / following pattern may be omitted. -

+

If the patsub_replacement shell option is enabled using shopt, any unquoted instances of & in string are replaced with the matching portion of pattern. -

+

Quoting any part of string inhibits replacement in the expansion of the quoted portion, including replacement strings stored in shell variables. @@ -4257,7 +4452,7 @@ expanding string; shell programmers should quote any occurrences of & they want to be taken literally in the replacement and ensure any instances of & they want to be replaced are unquoted. -

+

If the nocasematch @@ -4333,7 +4528,9 @@ array in turn, and the expansion is the resultant list. The expansion is either a transformation of the value of parameter or information about parameter itself, depending on the value of operator. Each operator is a single letter: +

+

@@ -4361,7 +4558,8 @@ format that can be reused as input.
The expansion is a string that is the value of parameter with backslash -escape sequences expanded as with the $aq...aq quoting mechanism. +escape sequences expanded as with the $'...' +quoting mechanism.
P
@@ -4380,6 +4578,7 @@ Produces a possibly-quoted version of the value of parameter, except that it prints the values of indexed and associative arrays as a sequence of quoted key-value pairs (see Arrays above). +The keys and values are quoted in a format that can be reused as input.
a
@@ -4417,25 +4616,26 @@ or the operation is applied to each member of the array in turn, and the expansion is the resultant list.

+ The result of the expansion is subject to word splitting and pathname expansion as described below.

-
 

Command Substitution

Command substitution allows the output of a command to replace -the command name. There are two forms: +the command itself. +There are two standard forms:

$(command)

-or +or (deprecated)
-`command` +`command`.

@@ -4451,7 +4651,7 @@ The command substitution $(cat file) can be replaced by the equivalent but faster $(< file).

-When the old-style backquote form of substitution is used, +With the old-style backquote form of substitution, backslash retains its literal meaning except when followed by $, @@ -4466,12 +4666,60 @@ When using the $(command) form, all characters between the parentheses make up the command; none are treated specially.

+There is an alternate form of command substitution: +

+

+ +${c command;} +

+ +

+ +which executes command in the current execution environment +and captures its output, again with trailing newlines removed. +

+ +The character c following the open brace must be a space, tab, +newline, or |, and the close brace must be in a position +where a reserved word may appear (i.e., preceded by a command terminator +such as semicolon). +Bash allows the close brace to be joined to the remaining characters in +the word without being followed by a shell metacharacter as a reserved +word would usually require. +

+ +Any side effects of command take effect immediately +in the current execution environment and persist in the current +environment after the command completes (e.g., the exit builtin +will exit the shell). +

+ +This type of command substitution superficially resembles executing an +unnamed shell function: local variables are created as when a shell +function is executing, and the return builtin forces +command to complete; +however, the rest of the execution environment, +including the positional parameters, is shared with the caller. +

+ +If the first character following the open brace +is a |, the construct expands to the +value of the REPLY shell variable after command executes, +without removing any trailing newlines, +and the standard output of command remains the same as in the +calling shell. +Bash creates REPLY as an initially-unset local variable when +command executes, and restores REPLY to the value it had +before the command substitution after command completes, +as with any local variable. +

+ Command substitutions may be nested. To nest when using the backquoted form, escape the inner backquotes with backslashes.

-If the substitution appears within double quotes, word splitting and -pathname expansion are not performed on the results. +If the substitution appears within double quotes, bash does not perform +word splitting and pathname expansion on the results.  

Arithmetic Expansion

@@ -4554,6 +4802,8 @@ The shell treats each character of
as a delimiter, and splits the results of the other expansions into words using these characters as field terminators. +

+ If IFS @@ -4564,12 +4814,12 @@ value is exactly the default, then sequences of -<space>, +space, -<tab>, +tab, and -<newline> +newline at the beginning and end of the results of the previous expansions are ignored, and @@ -4620,14 +4870,27 @@ A sequence of whitespace characters is also treated as a delimiter. +

+ If the value of IFS is null, no word splitting occurs. +If +IFS + + +is unset, word splitting behaves as if it contained the default value +of +<space><tab><newline>. +

-Explicit null arguments ("" or aqaq) are retained +Explicit null arguments (" +" + or +'') are retained and passed to commands as empty strings. Unquoted implicit null arguments, resulting from the expansion of parameters that have no values, are removed. @@ -4637,8 +4900,10 @@ and passed to a command as an empty string. When a quoted null argument appears as part of a word whose expansion is non-null, the null argument is removed. That is, the word --daqaq becomes -d after word splitting and -null argument removal. + +becomes + +after word splitting and null argument removal.

Note that if no expansion occurs, no splitting @@ -4694,7 +4959,6 @@ is enabled, the match is performed without regard to the case of alphabetic characters. When a pattern is used for pathname expansion, the character -``.'' at the start of a name or immediately following a slash must be matched explicitly, unless the shell option @@ -4702,12 +4966,13 @@ must be matched explicitly, unless the shell option is set. In order to match the filenames -``.'' and -``..'', -the pattern must begin with ``.'' (for example, ``.?''), +the pattern must begin with + +(for example, + even if dotglob @@ -4716,16 +4981,12 @@ If the globskipdots shell option is enabled, the filenames -``.'' and -``..'' -are never matched, even if the pattern begins with a -``.''. +never match, even if the pattern begins with a When not matching pathnames, the -``.'' character is not treated specially. When matching a pathname, the slash character must always be @@ -4779,16 +5040,15 @@ If the nocaseglob option is set, the matching against the patterns in is performed without regard to case. The filenames -``.'' and -``..'' are always ignored when GLOBIGNORE -is set and not null. However, setting +is set and not null. +However, setting GLOBIGNORE @@ -4796,14 +5056,11 @@ to a non-null value has the effect of enabling the dotglob shell option, so all other filenames beginning with a -``.'' - +Q . will match. To get the old behavior of ignoring filenames beginning with a -``.'', make -``.*'' one of the patterns in GLOBIGNORE. @@ -4821,13 +5078,22 @@ The pattern matching honors the setting of the extglob shell option.

+The +GLOBSORT + + +variable controls how the results of pathname expansion are sorted, as +described above. +

+ Pattern Matching

Any character that appears in a pattern, other than the special pattern -characters described below, matches itself. The NUL character may not -occur in a pattern. A backslash escapes the following character; the -escaping backslash is discarded when matching. +characters described below, matches itself. +The NUL character may not occur in a pattern. +A backslash escapes the following character; the escaping backslash is +discarded when matching. The special pattern characters must be quoted if they are to be matched literally.

@@ -4852,11 +5118,11 @@ and subdirectories.

Matches any single character. -
[...] +
[...]
-Matches any one of the enclosed characters. A pair of characters -separated by a hyphen denotes a +Matches any one of the enclosed characters. +A pair of characters separated by a hyphen denotes a range expression; any character that falls between those two characters, inclusive, using the current locale's collating sequence and character set, @@ -4908,11 +5174,8 @@ A may be matched by including it as the first character in the set. -
- -

- +

Within [ @@ -4922,23 +5185,18 @@ and character classes can be specified using the syntax [:class:], where class is one of the following classes defined in the POSIX standard: -
-

- +

alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit -
+
+
A character class matches any character belonging to that class. The word character class matches letters, digits, and the character _. -
- -

- - +

Within [ @@ -4949,11 +5207,7 @@ an equivalence class can be specified using the syntax [=c=], which matches all characters with the same collation weight (as defined by the current locale) as the character c. -
- -

- - +

Within [ @@ -4962,10 +5216,7 @@ and the syntax [.symbol.] matches the collating symbol symbol. - - - - +

@@ -4977,6 +5228,7 @@ Composite patterns may be formed using one or more of the following sub-patterns:

+

?(pattern-list)
@@ -4994,7 +5246,7 @@ Matches anything except one of the given patterns

-Theextglob option changes the behavior of the parser, since the +The extglob option changes the behavior of the parser, since the parentheses are normally treated as operators with syntactic meaning. To ensure that extended matching patterns are parsed correctly, make sure that extglob is enabled before parsing constructs containing the @@ -5004,12 +5256,21 @@ patterns, including shell functions and command substitutions. When matching filenames, the dotglob shell option determines the set of filenames that are tested: when dotglob is enabled, the set of filenames includes all files -beginning with ``.'', but ``.'' and ``..'' must be matched by a -pattern or sub-pattern that begins with a dot; +beginning with + +but + +and + +must be matched by a pattern or sub-pattern that begins with a dot; when it is disabled, the set does not -include any filenames beginning with ``.'' unless the pattern -or sub-pattern begins with a ``.''. -As above, ``.'' only has a special meaning when matching filenames. +include any filenames beginning with + +unless the pattern or sub-pattern begins with a + +As above, + +only has a special meaning when matching filenames.

Complicated extended pattern matching against long strings is slow, @@ -5024,9 +5285,10 @@ After the preceding expansions, all unquoted occurrences of the characters \, -aq, +', -and " that did not result from one of the above +and " + that did not result from one of the above expansions are removed.  

REDIRECTION

@@ -5345,12 +5607,11 @@ This is semantically equivalent to

Here Documents

This type of redirection instructs the shell to read input from the -current source until a line containing only +current source until it reads a line containing only delimiter -(with no trailing blanks) -is seen. All of -the lines read up to that point are then used as the standard +(with no trailing blanks). +All of the lines read up to that point are then used as the standard input (or file descriptor n if n is specified) for a command.

@@ -5372,6 +5633,8 @@ No parameter and variable expansion, command substitution, arithmetic expansion, or pathname expansion is performed on word. +

+ If any part of word @@ -5382,7 +5645,10 @@ is the result of quote removal on word, and the lines in the here-document are not expanded. -If word is unquoted, +If word is unquoted, the +delimiter + +is word itself, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion, the character sequence @@ -5559,22 +5825,25 @@ is not specified. If the file does not exist, it is created.  

ALIASES

-Aliases allow a string to be substituted for a word when it is used -as the first word of a simple command. -The shell maintains a list of aliases that may be set and unset with the -alias - -and -unalias - -builtin commands (see +Aliases allow a string to be substituted for a word that is in +a position in the input where it can be the first word of a simple +command. Aliases have names and corresponding values that are set +and unset using the alias and unalias builtin commands +(see SHELL BUILTIN COMMANDS below). -The first word of each simple command, if unquoted, -is checked to see if it has an -alias. If so, that word is replaced by the text of the alias. +

+ +If the shell reads an unquoted word in the right position, it checks +the word to see if it matches an alias name. If it matches, the shell +replaces the word with the alias value, and reads that value as if it +had been read instead of the word. +The shell doesn't look at any characters following the word before +attempting alias substitution. +

+ The characters /, $, `, and = and any of the shell metacharacters or quoting characters listed above may not appear in an alias name. @@ -5593,6 +5862,8 @@ for instance, and bash does not try to recursively expand the replacement text. +

+ If the last character of the alias value is a blank, @@ -5735,14 +6006,17 @@ it calls). In the following description, the current scope is a currently- executing function. Previous scopes consist of that function's caller and so on, -back to the "global" scope, where the shell is not executing -any shell function. +back to the + +scope, where the shell is not executing any shell function. Consequently, a local variable at the current scope is a variable declared using the local or declare builtins in the function that is currently executing.

-Local variables "shadow" variables with the same name declared at +Local variables + +variables with the same name declared at previous scopes. For instance, a local variable declared in a function hides a global variable of the same name: references and assignments @@ -5757,10 +6031,11 @@ are a result of the sequence of function calls that caused execution to reach the current function. The value of a variable that a function sees depends on its value within its caller, if any, whether that caller is -the "global" scope or another shell function. +the global +scope or another shell function. This is also the value that a local variable -declaration "shadows", and the value that is restored when the function -returns. +declaration shadows, +and the value that is restored when the function returns.

For example, if a variable var is declared as local in function @@ -6002,12 +6277,15 @@ Unless otherwise specified, primaries that operate on files follow symbolic links and operate on the target of the link, rather than the link itself.

- -When used with [[, the < and > operators sort +When used with [[, +or when the shell is in posix mode, +the < and > operators sort lexicographically using the current locale. -The test command sorts using ASCII ordering. +When the shell is not in posix mode, +the test command sorts using ASCII ordering.

+

-a file @@ -6044,7 +6322,9 @@ True if file exists and is a symbolic link.
-k file
-True if file exists and its ``sticky'' bit is set. +True if file exists and its + +bit is set.
-p file
@@ -6126,6 +6406,12 @@ True if the shell variable varname is set (has been assigned a value). +If varname is an indexed +array variable name subscripted by @ or *, +this returns true if the array has any set elements. +If varname is an associative +array variable name subscripted by @ or *, +this returns true if an element with that key is set.
-R varname
@@ -6256,8 +6542,8 @@ were no command substitutions, the command exits with a status of zero.

COMMAND EXECUTION

After a command has been split into words, if it results in a -simple command and an optional list of arguments, the following -actions are taken. +simple command and an optional list of arguments, the shell performs +the following actions.

If the command name contains no slashes, the shell attempts to @@ -6385,7 +6671,6 @@ is to be executed, it is invoked in a separate execution environment that consists of the following. Unless otherwise noted, the values are inherited from the shell. -

*
the shell's open files, plus any modifications and additions specified @@ -6420,9 +6705,15 @@ subshell environment. Changes made to the subshell environment cannot affect the shell's execution environment.

-Subshells spawned to execute command substitutions inherit the value of -the -e option from the parent shell. When not in posix mode, +When the shell is in +posix mode, +subshells spawned to execute command substitutions inherit the value of +the -e option from their parent shell. +When not in posix mode, bash clears the -e option in such subshells. +See the +description of the inherit_errexit shell option below +for how to control this behavior when not in posix mode.

If a command is followed by a & and job control is not active, the @@ -6684,7 +6975,7 @@ same process group as the terminal, and ^C sends to all processes in that process group.

-When bash is running without job control enabled and receives +When bash is running without job control enabled and receives SIGINT @@ -6802,11 +7093,12 @@ These processes are said to be in the processes are those whose process group ID differs from the terminal's; such processes are immune to keyboard-generated signals. Only foreground processes are allowed to read from or, if the -user so specifies with stty tostop, write to the -terminal. +user so specifies with + +write to the terminal. Background processes which attempt to read from (write to when -stty tostop is in effect) the -terminal are sent a + +is in effect) the terminal are sent a SIGTTIN (SIGTTOU) @@ -6926,13 +7218,12 @@ foreground: %1 is a synonym for -``fg %1'', + bringing job 1 from the background into the foreground. Similarly, -``%1 &'' resumes job 1 in the background, equivalent to -``bg %1''. +

The shell learns immediately whenever a job changes state. @@ -7023,11 +7314,17 @@ an ASCII bell character (07)

\d
-the date in "Weekday Month Date" format (e.g., "Tue May 26") +the date in + +format (e.g., +
\D{format}
-the format is passed to strftime(3) and the result is inserted +the format is passed to +strftime(3) + +and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required
\e @@ -7037,7 +7334,8 @@ an ASCII escape character (033)
\h
-the hostname up to the first `.' +the hostname up to the first +
\H
@@ -7220,12 +7518,13 @@ builtin.

Readline Notation

In this section, the Emacs-style notation is used to denote -keystrokes. Control keys are denoted by C-key, e.g., C-n -means Control-N. Similarly, +keystrokes. +Control keys are denoted by C-key, e.g., C-n means Control-N. +Similarly, meta -keys are denoted by M-key, so M-x means Meta-X. (On keyboards -without a +keys are denoted by M-key, so M-x means Meta-X. +(On keyboards without a meta key, M-x means ESC x, i.e., press the Escape key @@ -7306,6 +7605,8 @@ or C-Meta-u: universal-argument
+

+ into the inputrc @@ -7358,14 +7659,18 @@ When using the form keyname:function-name or macro, is the name of a key spelled out in English. For example:

+

-Control-u: universal-argument -
+
+Control-u: universal-argument
 Meta-Rubout: backward-kill-word
-
+Control-o: " +> output" + +
+ -Control-o: "> output"

@@ -7386,12 +7691,14 @@ and is bound to run the macro expressed on the right hand side (that is, to insert the text -> output into the line).

-In the second form, "keyseq":function-name or macro, +In the second form, +" +keyseq" +:function-name or macro, keyseq differs from @@ -7403,14 +7710,24 @@ within double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the symbolic character names are not recognized.

+

-"\C-u": universal-argument -
-"\C-x\C-r": re-read-init-file -
+
+"
+\C-u"
+: universal-argument
+"
+\C-x\C-r"
+: re-read-init-file
+"
+\e[11~"
+: "
+Function Key 1"
+
+
+ -"\e[11~": "Function Key 1"

@@ -7430,7 +7747,6 @@ and ESC [ 1 1 ~ is bound to insert the text -Function Key 1.

@@ -7458,10 +7774,11 @@ backslash

literal " -
\aq + +
\'
-literal aq +literal '
@@ -7524,7 +7841,8 @@ be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, -including " and aq. +including " + and '.

Bash @@ -7574,15 +7892,19 @@ or (without regard to case). Unrecognized variable names are ignored. -When a variable value is read, empty or null values, "on" (case-insensitive), -and "1" are equivalent to On. All other values are equivalent to +When readline reads a variable value, empty or null values, + +(case-insensitive), and + +are equivalent to On. +All other values are equivalent to Off. The variables and their default values are:

-
active-region-start-color +
active-region-start-color
A string variable that controls the text color and background when displaying @@ -7594,20 +7916,25 @@ It is output to the terminal before displaying the text in the active region. This variable is reset to the default value whenever the terminal type changes. The default value is the string that puts the terminal in standout mode, as obtained from the terminal's terminfo description. -A sample value might be "\e[01;33m". -
active-region-end-color +A sample value might be + +
active-region-end-color
-A string variable that "undoes" the effects of active-region-start-color -and restores "normal" terminal display appearance after displaying text -in the active region. +A string variable that + +the effects of active-region-start-color +and restores + +terminal display appearance after displaying text in the active region. This string must not take up any physical character positions on the display, so it should consist only of terminal escape sequences. It is output to the terminal after displaying the text in the active region. This variable is reset to the default value whenever the terminal type changes. The default value is the string that restores the terminal from standout mode, as obtained from the terminal's terminfo description. -A sample value might be "\e[0m". +A sample value might be +
bell-style (audible)
@@ -7618,9 +7945,14 @@ If set to audible, readline attempts to ring the terminal's bell.
bind-tty-special-chars (On)
-If set to On, readline attempts to bind the control characters -treated specially by the kernel's terminal driver to their readline -equivalents. +If set to On (the default), readline attempts to bind +the control characters that are treated specially by the kernel's +terminal driver to their readline equivalents. +These override the default readline bindings described here. +Type + +at a bash prompt to see your current terminal settings, +including the special control characters (usually cchars).
blink-matching-paren (Off)
@@ -7634,7 +7966,8 @@ common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the LS_COLORS environment variable. If there is a color definition in $LS_COLORS for the custom suffix -"readline-colored-completion-prefix", readline uses this color for + +readline uses this color for the common prefix instead of its default.
colored-stats (Off) @@ -7643,9 +7976,13 @@ If set to On, readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LS_COLORS environment variable. -
comment-begin (``#'') + + + +
comment-begin (
+ The string that is inserted when the readline insert-comment @@ -7706,7 +8043,7 @@ by stripping the eighth bit and prefixing an escape character (in effect, using escape as the meta prefix). The default is On, but readline will set it to Off if the locale contains eight-bit characters. -This variable is dependent on the LC_CTYPE locale category, and +This variable is dependent on the LC_CTYPE locale category, and may change if the locale is changed.
disable-completion (Off) @@ -7747,11 +8084,11 @@ sequence into the mode string.
enable-active-region (On)
-The point is the current cursor position, and mark refers -to a saved cursor position. -The text between the point and mark is referred to as the region. +The point is the current cursor position, and mark refers +to a saved cursor position. +The text between the point and mark is referred to as the region. When this variable is set to On, readline allows certain commands -to designate the region as active. +to designate the region as active. When the region is active, readline highlights the text in the region using the value of the active-region-start-color, which defaults to the string that enables @@ -7819,11 +8156,12 @@ regardless of what the terminal claims it can support. The name is a synonym for this variable. The default is Off, but readline will set it to On if the locale contains eight-bit characters. -This variable is dependent on the LC_CTYPE locale category, and +This variable is dependent on the LC_CTYPE locale category, and may change if the locale is changed. -
isearch-terminators (``C-[C-J'') +
isearch-terminators (
+ The string of characters that should terminate an incremental search without subsequently executing the character as a command. If this variable has not been given a value, the characters @@ -7877,11 +8215,13 @@ have a slash appended (subject to the value of
match-hidden-files (On)
-This variable, when set to On, causes readline to match files whose -names begin with a `.' (hidden files) when performing filename -completion. -If set to Off, the leading `.' must be -supplied by the user in the filename to be completed. +This variable, when set to On, forces readline to match files whose +names begin with a + +(hidden files) when performing filename completion. +If set to Off, the user must include the leading + +in the filename to be completed.
menu-complete-display-prefix (Off)
@@ -7896,7 +8236,7 @@ eighth bit set directly rather than as a meta-prefixed escape sequence. The default is Off, but readline will set it to On if the locale contains eight-bit characters. -This variable is dependent on the LC_CTYPE locale category, and +This variable is dependent on the LC_CTYPE locale category, and may change if the locale is changed.
page-completions (On) @@ -7915,6 +8255,11 @@ If set to On, readline will undo all changes to history lines before returning when accept-line is executed. By default, history lines may be modified and retain individual undo lists across calls to readline. +
search-ignore-case (Off) + +
+If set to On, readline performs incremental and non-incremental +history list searches in a case-insensitive fashion.
show-all-if-ambiguous (Off)
@@ -7991,25 +8336,31 @@ compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used.
-
$if
+
$if + +
The $if construct allows bindings to be made based on the editing mode, the terminal being used, or the application using readline. The text of the test, after any comparison operator, -
 extends to the end of the line; +extends to the end of the line; unless otherwise noted, no characters are required to isolate it.
-
mode
+
mode + +
The mode= form of the $if directive is used to test whether readline is in emacs or vi mode. This may be used in conjunction with the set keymap command, for instance, to set bindings in the emacs-standard and emacs-ctlx keymaps only if readline is starting out in emacs mode. -
term
+
term + +
The term= form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the @@ -8026,7 +8377,9 @@ and sun-cmd, for instance. -
version
+
version + +
The version test may be used to perform comparisons against specific readline versions. The version expands to the current readline version. @@ -8053,26 +8406,42 @@ minor version (e.g., 7.1). If the minor version is omitted, it is assumed to be 0. The operator may be separated from the string version and from the version number argument by whitespace. -
application
-The application construct is used to include -application-specific settings. Each program using the readline +
application + +
+The application construct is used to include +application-specific settings. +Each program using the readline library sets the application name, and an initialization file can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in bash: +

+

+
 $if Bash
 # Quote the current or previous word
-"\C-xq": "\eb\"\ef\""
+"
+\C-xq"
+: "
+\eb\"
+\ef\"
+"
+
 $endif
 
+
-
variable
+
+
variable + +
The variable construct provides simple equality tests for readline variables and values. The permitted comparison operators are =, ==, and !=. @@ -8083,17 +8452,25 @@ Both string and boolean variables may be tested. Boolean variables must be tested against the values on and off.
-
$endif
+
$endif + +
This command, as seen in the previous example, terminates an $if command. -
$else
+
$else + +
Commands in this branch of the $if directive are executed if the test fails. -
$include
+
$include + +
This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive would read /etc/inputrc: +

+

 $include  /etc/inputrc
@@ -8101,7 +8478,6 @@ would read /etc/inputrc:
 
 
-
 

Searching

@@ -8147,7 +8523,7 @@ the line, thereby executing the command from the history list. Readline remembers the last incremental search string. If two Control-Rs are typed without any intervening characters defining a -new search string, any remembered search string is used. +new search string, readline uses any remembered search string.

Non-incremental searches read the entire search string before starting @@ -8289,13 +8665,17 @@ Without an argument, move back to the first entry in the history list.

reverse-search-history (C-r)
-Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. +Search backward starting at the current line and moving + +through the history as necessary. +This is an incremental search.
forward-search-history (C-s)
-Search forward starting at the current line and moving `down' through -the history as necessary. This is an incremental search. +Search forward starting at the current line and moving + +through the history as necessary. +This is an incremental search.
non-incremental-reverse-search-history (M-p)
@@ -8345,7 +8725,9 @@ insert the nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the nth word from the end of the previous command. Once the argument n is computed, the argument is extracted -as if the "!n" history expansion had been specified. +as if the + +history expansion had been specified.
yank-last-arg (M-., M-_)
@@ -8359,13 +8741,22 @@ Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last word, -as if the "!$" history expansion had been specified. +as if the + +history expansion had been specified.
shell-expand-line (M-C-e)
-Expand the line as the shell does. This -performs alias and history expansion as well as all of the shell -word expansions. See +Expand the line by performing shell word expansions. +This performs alias and history expansion, +$'string' and $" +string" + quoting, +tilde expansion, parameter and variable expansion, arithmetic expansion, +command and process substitution, +word splitting, and quote removal. +An explicit argument suppresses command and process substitution. +See HISTORY EXPANSION @@ -8429,7 +8820,7 @@ and emacs as the editor, in that order.
The character indicating end-of-file as set, for example, by -stty. +stty(1). If this character is read when there are no characters on the line, and point is at the beginning of the line, readline @@ -8464,7 +8855,7 @@ how to insert characters like C-q, for example.
Insert a tab character. -
self-insert (a, b, A, 1, !, ...) +
self-insert (a, b, A, 1, !, ...)
Insert the character typed. @@ -8610,7 +9001,7 @@ or
-
digit-argument (M-0, M-1, ..., M--) +
digit-argument (M-0, M-1, ..., M--)
Add this digit to the argument already accumulating, or start a new @@ -8864,7 +9255,9 @@ character. A negative argument searches for subsequent occurrences. Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is -bound to "\[", keys producing such sequences will have no effect +bound to + +keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. @@ -9155,24 +9548,33 @@ being loaded all at once. For instance, assuming that there is a library of compspecs, each kept in a file corresponding to the name of the command, the following default completion function would load completions dynamically: -

- -_completion_loader() -
+

+
+_completion_loader()
 {
+  . "
+/etc/bash_completion.d/$1.sh"
+ 
+\
 
-       . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124

- +     +>/dev/null 2>&1 && return 124 } +complete -D -F _completion_loader +\
-complete -D -F _completion_loader -o bashdefault -o default
+     +-o bashdefault -o default +
+ + +
-  

HISTORY

@@ -9262,8 +9664,8 @@ If HISTFILE -is unset, or if the history file is unwritable, the history is -not saved. +is unset or null, +or if the history file is unwritable, the history is not saved. If the HISTTIMEFORMAT @@ -9314,7 +9716,7 @@ and HISTIGNORE -variables may be set to cause the shell to save only a subset of the +variables are used to cause the shell to save only a subset of the commands entered. The cmdhist @@ -9374,12 +9776,20 @@ The second is to select portions of that line for inclusion into the current one. The line selected from the history is the event, and the portions of that line that are acted upon are words. -Various modifiers are available to manipulate the selected words. The line is broken into words in the same fashion as when reading input, so that several metacharacter-separated words surrounded by quotes are considered one word. +The event designator selects the event, the optional +word designator selects words from the event, and +various optional modifiers are available to manipulate the +selected words. +

+ History expansions are introduced by the appearance of the history expansion character, which is ! by default. +History expansions may appear anywhere in the input, but do not nest. +

+ Only backslash (\) and single quotes can quote the history expansion character, but the history expansion character is also treated as quoted if it immediately precedes the closing double quote @@ -9388,9 +9798,21 @@ in a double-quoted string. Several characters inhibit history expansion if found immediately following the history expansion character, even if it is unquoted: -space, tab, newline, carriage return, and =. -If the extglob shell option is enabled, ( will also -inhibit expansion. +space, tab, newline, carriage return, =, +and the other shell metacharacters defined above. +

+ +There is a special abbreviation for substitution, active when the +quick substitution character (described above under +histchars) + +is the first character on the line. +It selects the previous history entry, using an event designator +equivalent to !!, +and substitutes one string for another in that line. +It is described below under Event Designators. +This is the only history expansion that does not begin with the history +expansion character.

Several shell options settable with the @@ -9457,6 +9879,10 @@ writing the history file. An event designator is a reference to a command line entry in the history list. +The event designator +consists of the portion of the word beginning with the history +expansion character and ending with the word designator if present, +or the end of the word. Unless the reference is absolute, events are relative to the current position in the history list.

@@ -9487,7 +9913,8 @@ Refer to the current command minus

!!
-Refer to the previous command. This is a synonym for `!-1'. +Refer to the previous command. This is a synonym for +
!string
@@ -9518,7 +9945,7 @@ with string2. Equivalent to -``!!:s^string1^string2^'' + (see Modifiers below).
!# @@ -9574,17 +10001,24 @@ zeroth word if there is only one word in the line.
%
-The first word matched by the most recent `?string?' search, +The first word matched by the most recent + +search, if the search string begins with a character that is part of a word.
x-y
-A range of words; `-y' abbreviates `0-y'. +A range of words; + +abbreviates +
*
-All of the words but the zeroth. This is a synonym -for `1-$'. It is not an error to use +All of the words but the zeroth. +This is a synonym for + +It is not an error to use * if there is just one @@ -9608,7 +10042,8 @@ previous command is used as the event.

Modifiers

After the optional word designator, there may appear a sequence of -one or more of the following modifiers, each preceded by a `:'. +one or more of the following modifiers, each preceded by a + These modify, or edit, the word or words selected from the history event.

@@ -9688,7 +10123,7 @@ the last string in a -!?string[?] +!?string[?] search. If @@ -9705,18 +10140,27 @@ Repeat the previous substitution.

g
-Cause changes to be applied over the entire event line. This is -used in conjunction with `:s' (e.g., `:gs/old/new/') -or `:&'. If used with -`:s', any delimiter can be used -in place of /, and the final delimiter is optional +Cause changes to be applied over the entire event line. +This is used in conjunction with + +(e.g., + +or + +If used with + +any delimiter can be used in place of /, +and the final delimiter is optional if it is the last character of the event line. An a may be used as a synonym for g.
G -
-Apply the following `s' or `&' modifier once to each word -in the event line. +
+Apply the following + +or + +modifier once to each word in the event line.
  @@ -9745,6 +10189,7 @@ options interpret arguments beginning with - as invalid options and require -- to prevent this interpretation.

+

: [arguments]
@@ -9754,7 +10199,7 @@ No effect; the command does nothing beyond expanding and performing any specified redirections. The return status is zero. -
. filename [arguments]
+
. filename [arguments]
source filename [arguments]
@@ -9846,7 +10291,7 @@ or was started without job control.
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
-
bind [-m keymap] -x keyseq:shell-command
+
bind [-m keymap] -x keyseq[:] shell-command
bind [-m keymap] keyseq:function-name
bind [-m keymap] keyseq:readline-command
bind readline-command-line
@@ -9868,7 +10313,17 @@ initialization file such as .inputrc, but each binding or command must be passed as a separate argument; -e.g., '"\C-x\C-r": re-read-init-file'. +e.g., '" +\C-x\C-r" +: re-read-init-file'. +In the following descriptions, output available to be re-read is formatted +as commands that would appear in a +readline + +initialization file or that would be supplied as individual arguments to a +bind + +command. Options, if supplied, have the following meanings:
@@ -9939,11 +10394,20 @@ Unbind all keys bound to the named function.
Remove any current binding for keyseq. -
-x keyseq:shell-command +
-x keyseq[: ]shell-command
Cause shell-command to be executed whenever keyseq is entered. +The separator between keyseq and shell-command is either +whitespace or a colon optionally followed by whitespace. +If the separator is whitespace, shell-command +must be enclosed in double quotes and readline expands any of its +special backslash-escapes in shell-command before saving it. +If the separator is a colon, any enclosing double quotes are optional, and +readline does not expand the command string before saving it. +Since the entire key binding expression must be a single argument, it +should be enclosed in quotes. When shell-command is executed, the shell sets the READLINE_LINE @@ -9958,7 +10422,7 @@ and variables to the current location of the insertion point and the saved insertion point (the mark), respectively. -The shell assigns any numeric argument the user supplied to the +The shell assigns any numeric argument the user supplied to the READLINE_ARGUMENT @@ -10035,7 +10499,7 @@ current frame is frame 0. The return value is 0 unless the shell is not executing a subroutine call or expr does not correspond to a valid position in the call stack. -
cd [-L|[-P [-e]] [-@]] [dir]
+
cd [-L|[-P [-e]]] [-@] [dir]
Change the current directory to dir. if dir is not supplied, the value of the HOME @@ -10049,11 +10513,11 @@ The variable defines the search path for the directory containing dir: -each directory name in +the shell searches each directory name in CDPATH -is searched for dir. +for dir. Alternative directory names in CDPATH @@ -10062,7 +10526,9 @@ are separated by a colon (:). A null directory name in CDPATH -is the same as the current directory, i.e., ``.''. If +is the same as the current directory, i.e., + +If dir begins with a slash (/), @@ -10184,44 +10650,66 @@ cannot be found, the exit status is 127. Otherwise, the exit status of the builtin is the exit status of command. -
compgen [option] [word]
+
compgen [-V varname] [option] [word]
Generate possible completion matches for word according to the options, which may be any option accepted by the complete -builtin with the exception of -p and -r, and write -the matches to the standard output. +builtin with the exceptions of +-p, + +-r, + +-D, + +-E, + +and +-I, + +and write the matches to the standard output. +If the -V option is supplied, compgen stores the generated +completions into the indexed array variable varname instead of writing +them to the standard output. When using the -F or -C options, the various shell variables set by the programmable completion facilities, while available, will not have useful values. -

+

The matches will be generated in the same way as if the programmable completion code had generated them directly from a completion specification with the same flags. If word is specified, only those completions matching word will be displayed. -

+

The return value is true unless an invalid option is supplied, or no matches were generated. -
complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat] [-W wordlist]
+
complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action]
+
+ +[-G globpat] [-W wordlist] [-F function] [-C command]
-[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...] +[-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [-DEI] [name ...]
Specify how arguments to each name should be completed. -If the -p option is supplied, or if no options are supplied, +If the -p option is supplied, or if no options or names +are supplied, existing completion specifications are printed in a way that allows them to be reused as input. The -r option removes a completion specification for each name, or, if no names are supplied, all completion specifications. The -D option indicates that other supplied options and actions should -apply to the ``default'' command completion; that is, completion attempted +apply to the + +command completion; that is, completion attempted on a command for which no completion has previously been defined. The -E option indicates that other supplied options and actions should -apply to ``empty'' command completion; that is, completion attempted on a +apply to + +command completion; that is, completion attempted on a blank line. The -I option indicates that other supplied options and actions should apply to completion on the initial non-assignment word on the line, or after @@ -10232,12 +10720,12 @@ over -E, and both take precedence over -I. If any of -D, -E, or -I are supplied, any other name arguments are ignored; these completions only apply to the case specified by the option. -

+

The process of applying these completion specifications when word completion is attempted is described above under Programmable Completion. -

+

Other options, if specified, have the following meanings. The arguments to the -G, -W, and -X options (and, if necessary, the -P and -S options) @@ -10245,6 +10733,7 @@ should be quoted to protect them from expansion before the complete builtin is invoked. +
@@ -10275,6 +10764,11 @@ Tell readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names, quoting special characters, or suppressing trailing spaces). Intended to be used with shell functions. +
fullquote + +
+Tell readline to quote all the completed words even if they are not +filenames.
noquote
@@ -10459,7 +10953,19 @@ case, any completion not matching filterpat is removed.

The return value is true unless an invalid option is supplied, an option -other than -p or -r is supplied without a name +other than +-p, + +-r, + +-D, + +-E, + +or +-I + +is supplied without a name argument, an attempt is made to remove a completion specification for a name for which no specification exists, or an error occurs adding a completion specification. @@ -10474,16 +10980,19 @@ If no options are given, display the completion options for each The possible values of option are those valid for the complete builtin described above. The -D option indicates that other supplied options should -apply to the ``default'' command completion; that is, completion attempted +apply to the + +command completion; that is, completion attempted on a command for which no completion has previously been defined. The -E option indicates that other supplied options should -apply to ``empty'' command completion; that is, completion attempted on a -blank line. +apply to + +command completion; that is, completion attempted on a blank line. The -I option indicates that other supplied options should apply to completion on the initial non-assignment word on the line, or after a command delimiter such as ; or |, which is usually command name completion. -

+

The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a name for which no completion specification exists, or an output error occurs. @@ -10508,8 +11017,11 @@ is specified, resume at the nth enclosing loop. must be >= 1. If n -is greater than the number of enclosing loops, the last enclosing loop -(the ``top-level'' loop) is resumed. +is greater than the number of enclosing loops, the shell resumes +the last enclosing loop +(the + +loop). The return value is 0 unless n is not greater than or equal to 1.
declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
@@ -10560,7 +11072,7 @@ The -I option causes local variables to inherit the attributes -(except the nameref attribute) +(except the nameref attribute) and value of any existing variable with the same name at a surrounding scope. If there is no existing variable, the local variable is initially unset. @@ -10643,7 +11155,10 @@ Mark names for export to subsequent commands via the environment.

-Using `+' instead of `-' +Using + +instead of + turns off the attribute instead, with the exceptions that +a and +A may not be used to destroy array variables and +r will not @@ -10668,7 +11183,6 @@ subsequent assignments. 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 @@ -10787,8 +11301,9 @@ the following backslash-escaped characters is enabled. The option disables the interpretation of these escape characters, even on systems where they are interpreted by default. The xpg_echo shell option may be used to -dynamically determine whether or not echo expands these -escape characters by default. +dynamically determine whether or not echo +interprets any options +and expands these escape characters by default. echo does not interpret -- to mean the end of options. @@ -10879,7 +11394,14 @@ binary found via the instead of the shell builtin version, run -enable -n test. + + +``enable -n test''. + + + + + The -f @@ -10891,9 +11413,13 @@ from shared object filename, on systems that support dynamic loading. -Bash will use the value of the BASH_LOADABLES_PATH variable as a -colon-separated list of directories in which to search for filename. -The default is system-dependent. +Bash will use the value of the BASH_LOADABLES_PATH variable as a +colon-separated list of directories in which to search for filename, +if filename does not contain a slash. +The default is system-dependent, +and may include + +to force a search of the current directory. The -d @@ -10914,7 +11440,14 @@ If -s is supplied, the output is restricted to the POSIX If no options are supplied and a name is not a shell builtin, enable will attempt to load name from a shared object named name, as if the command were -enable -f name name . + + +``enable -f name name''. + + + + + The return value is 0 unless a name @@ -11038,6 +11571,8 @@ is supplied with a name that is not a function. +

false
+Does nothing, returns a non-zero status.
fc [-e ename] [-lnr] [first] [last]
fc -s [pat=rep] [cmd]
@@ -11068,7 +11603,14 @@ If is not specified, it is set to the current command for listing (so that -fc -l -10 + +``fc -l -10'' + + + + + + prints the last 10 commands) and to first @@ -11078,7 +11620,7 @@ If is not specified, it is set to the previous command for editing and -16 for listing. -

+

The -n @@ -11119,24 +11661,20 @@ is not set. If neither variable is set, is used. When editing is complete, the edited commands are echoed and executed. -

+

In the second form, command is re-executed after each instance of pat is replaced by rep. Command is interpreted the same as first above. 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 command. -

+

If the first form is used, the return value is 0 unless an invalid option is encountered or first @@ -11176,7 +11714,7 @@ does not specify a valid job or jobspec specifies a job that was started without job control. -
getopts optstring name [arg ...]
+
getopts optstring name [arg ...]
getopts is used by shell procedures to parse positional parameters. @@ -11223,7 +11761,7 @@ calls to within the same shell invocation if a new set of parameters is to be used. -

+

When the end of options is encountered, getopts exits with a return value greater than zero. OPTIND @@ -11231,7 +11769,7 @@ return value greater than zero. is set to the index of the first non-option argument, and name is set to ?. -

+

getopts normally parses the positional parameters, but if more arguments are @@ -11242,7 +11780,7 @@ values, getopts parses those instead. -

+

getopts can report errors in two ways. If the first character of @@ -11263,11 +11801,11 @@ character of optstring is not a colon. -

-If an invalid option is seen, +

+If getopts -places ? into +detects an invalid option, it places ? into name and, if not silent, @@ -11278,36 +11816,31 @@ prints an error message and unsets If getopts -is silent, -the option character found is placed in +is silent, it assigns the option character found to OPTARG -and no diagnostic message is printed. -

+and does not print a diagnostic message. +

If a required argument is not found, and getopts -is not silent, -a question mark (?) is placed in -name, - -OPTARG +is not silent, it sets the value of name to +a question mark (?), unsets +OPTARG, -is unset, and a diagnostic message is printed. +and prints a diagnostic message. If getopts -is silent, then a colon (:) is placed in -name - -and +is silent, it sets the value of name to a colon (:) +and sets OPTARG -is set to the option character found. -

+to the option character found. +

getopts returns true if an option, specified or unspecified, is found. @@ -11326,15 +11859,16 @@ and remembered. Any previously-remembered pathname is discarded. If the -p -option is supplied, no path search is performed, and +option is supplied, hash uses filename -is used as the full filename of the command. +as the full filename of the command. The -r option causes the shell to forget all remembered locations. +Assigning to the PATH variable also clears all hashed filenames. The -d @@ -11351,6 +11885,11 @@ The option causes output to be displayed in a format that may be reused as input. If no arguments are given, or if only -l is supplied, information about remembered commands is printed. +The -t, -d, and -p options (the options that +act on the name arguments) are mutually exclusive. +Only one will be active. +If more than one is supplied, -t has higher priority than +-p, and both are higher priority than -d. The return status is true unless a name @@ -11383,22 +11922,20 @@ Display the description of each pattern in a manpage-like format
Display only a short usage synopsis for each pattern -
-

+

+
The return status is 0 unless no command matches pattern. -
-
history [n]
history -c
history -d offset
history -d start-end
history -anrw [filename]
-
history -p arg [arg ...]
-
history -s arg [arg ...]
+
history -p arg [arg ...]
+
history -s arg [arg ...]
With no options, display the command history list with line numbers. Lines listed @@ -11417,8 +11954,10 @@ If the shell variable is set and not null, -it is used as a format string for strftime(3) to display -the time stamp associated with each displayed history entry. +it is used as a format string for +strftime(3) + +to display the time stamp associated with each displayed history entry. No intervening blank is printed between the formatted time stamp and the history line. If filename is supplied, it is used as the @@ -11426,7 +11965,14 @@ name of the history file; if not, the value of HISTFILE -is used. Options, if supplied, have the following meanings: +is used. +If filename is not supplied and +HISTFILE + + +is unset or null, the -a, -n, -r, and -w options +have no effect. +Options, if supplied, have the following meanings:
@@ -11448,7 +11994,9 @@ are interpreted as described above.
-a
-Append the ``new'' history lines to the history file. +Append the + +history lines to the history file. These are history lines entered since the beginning of the current bash session, but not already appended to the history file.
-n @@ -11671,7 +12219,9 @@ is used within a function, it causes the variable to have a visible scope restricted to that function and its children. If name is -, the set of shell options is made local to the function in which local is invoked: shell options changed using the -set builtin inside the function are restored to their original values +set builtin inside the function +after the call to local +are restored to their original values when the function returns. The restore is effected as if a series of set commands were executed to restore the values that were in place before the function. @@ -11819,10 +12369,8 @@ shown by starting with zero, from the stack. For example: -popd +0 removes the first directory, -popd +1 the second.
-n
Removes the nth entry counting from the right of the list @@ -11831,10 +12379,8 @@ shown by starting with zero. For example: -popd -0 removes the last directory, -popd -1 the next to last.
@@ -11869,14 +12415,19 @@ Write the formatted arguments to the standard output under the control of the format. The -v option causes the output to be assigned to the variable var rather than being printed to the standard output. -

+

The format 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 format specifications, each of which causes printing of the next successive argument. -In addition to the standard printf(1) format specifications, -printf interprets the following extensions: +In addition to the standard +printf(3) + +format characters +csndiouxXeEfFgGaA, + +printf interprets the following additional format specifiers:
@@ -11892,6 +12443,10 @@ in the same way as echo -e.
causes printf to output the corresponding argument in a format that can be reused as shell input. +%q and %Q use the $'' quoting style if any characters +in the argument string require it, and backslash quoting otherwise. +If the format string uses the printf alternate form, these two +formats quote the argument string using single quotes.
%Q
@@ -11901,7 +12456,9 @@ before quoting it.
causes printf to output the date-time string resulting from using -datefmt as a format string for strftime(3). +datefmt as a format string for +strftime(3). + The corresponding argument is an integer representing the number of seconds since the epoch. Two special argument values may be used: -1 represents the current @@ -11912,10 +12469,22 @@ This is an exception to the usual printf behavior.

-The %b, %q, and %T directives all use the field width and precision +The %b, %q, and %T format specifiers all use the field width and precision arguments from the format specification and write that many bytes from (or use that wide a field for) the expanded argument, which usually contains more characters than the original. +

+ +The %n format specifier accepts a corresponding argument that is treated +as a shell variable name. +

+ +The %s and %c format specifiers accept an l (long) modifier, which forces +them to convert the argument string to a wide-character string and apply +any supplied field width and precision in terms of characters, not bytes. + + +

Arguments to non-string format specifiers are treated as C constants, @@ -11928,7 +12497,9 @@ The format is reused as necessary to consume all of the arguments. If the format requires more arguments than are supplied, 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. +The return value is zero on success, +non-zero if an invalid option is supplied or a write or assignment error +occurs.

pushd [-n] [+n] [-n]
@@ -12019,7 +12590,7 @@ 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. -
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
+
read [-Eers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
One line is read from the standard input, or from the file descriptor fd supplied as an argument to the -u option, split into words as described @@ -12079,6 +12650,7 @@ when it reads a NUL character.
If the standard input is coming from a terminal, +read uses readline (see @@ -12087,9 +12659,27 @@ is coming from a terminal, above) -is used to obtain the line. +to obtain the line. Readline uses the current (or default, if line editing was not previously active) editing settings, but uses readline's default filename completion. +
-E + +
+If the standard input +is coming from a terminal, +read uses +readline + +(see +READLINE + + + +above) +to obtain the line. +Readline uses the current (or default, if line editing was not previously +active) editing settings, but uses bash's default completion, including +programmable completion.
-i text
@@ -12161,6 +12751,10 @@ Read input from file descriptor fd.

+Other than the case where delim is the empty string, read +ignores any NUL characters in the input. +

+ If no names @@ -12268,6 +12862,8 @@ before execution resumes after the function or script.

set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [--] [-] [arg ...]
+
set -o
+
set +o
Without options, display the name and value of each shell variable in a format that can be reused as input @@ -12282,8 +12878,7 @@ as values for the positional parameters and are assigned, in order, to $2, -... - +..., $n. Options, if specified, have the following meanings: @@ -12305,6 +12900,7 @@ effective only when job control is enabled.
-e
+ Exit immediately if a pipeline (which may consist of a single simple command), a list, @@ -12355,9 +12951,7 @@ separately (see above), and may cause subshells to exit before executing all the commands in the subshell. -

- - +

If a compound command or shell function executes in a context where -e is being ignored, none of the commands executed within the compound command or function body @@ -12367,6 +12961,7 @@ If a compound command or shell function sets -e while executing in a context where -e is ignored, that setting will not have any effect until the compound command or the command containing the function call completes. +
-f
@@ -12475,7 +13070,14 @@ This option is on by default in interactive shells.
The effect is as if the shell command -IGNOREEOF=10 + + +``IGNOREEOF=10'' + + + + + had been executed (see @@ -12587,23 +13189,23 @@ This also affects the editing interface used for read -e. Same as -x. -

If -o -is supplied with no option-name, the values of the current options are -printed. +is supplied with no option-name, +set prints the current shell option settings. If +o -is supplied with no option-name, a series of +is supplied with no option-name, +set prints a series of set -commands to recreate the current option settings is displayed on -the standard output. +commands to recreate the current option settings +on the standard output.

-p @@ -12656,11 +13258,17 @@ Exit after reading and executing one command.
Treat unset variables and parameters other than the special -parameters "@" and "*", -or array variables subscripted with "@" or "*", -as an error when performing -parameter expansion. If expansion is attempted on an -unset variable or parameter, the shell prints an error message, and, +parameters + +and + +or array variables subscripted with + +or + +as an error when performing parameter expansion. +If expansion is attempted on an unset variable or parameter, +the shell prints an error message, and, if not interactive, exits with a non-zero status.
-v @@ -12676,7 +13284,7 @@ arithmetic for command, display the expanded value of followed by the command and its expanded arguments -or associated word list. +or associated word list, to standard error.
-B
@@ -12884,15 +13492,19 @@ The list of shopt options is:

-

-
assoc_expand_once +
array_expand_once
-If set, the shell suppresses multiple evaluation of associative array -subscripts during arithmetic expression evaluation, while executing +If set, the shell suppresses multiple evaluation of +associative and indexed array subscripts +during arithmetic expression evaluation, while executing builtins that can perform variable assignments, and while executing builtins that perform array dereferencing. +
assoc_expand_once + +
+Deprecated; a synonym for array_expand_once.
autocd
@@ -13051,13 +13663,12 @@ if the directory name initially supplied does not exist. If set, bash -includes filenames beginning with a `.' in the results of pathname -expansion. +includes filenames beginning with a + +in the results of pathname expansion. The filenames -``.'' and -``..'' must always be matched explicitly, even if dotglob @@ -13151,7 +13762,9 @@ under
extquote
-If set, $aqstringaq and $"string" quoting is +If set, $'string' and $" +string" + quoting is performed within ${parameter} expansions enclosed in double quotes. This option is enabled by default.
failglob @@ -13203,13 +13816,10 @@ and upper-case and lower-case ASCII characters will collate together.
If set, pathname expansion will never match the filenames -``.'' and -``..'', even if the pattern begins with a -``.''. This option is enabled by default.
globstar @@ -13335,8 +13945,9 @@ The value may not be changed.
If set, and a file that bash is checking for mail has been -accessed since the last time it was checked, the message ``The mail in -mailfile has been read'' is displayed. +accessed since the last time it was checked, +bash displays the message +
no_empty_cmd_completion
@@ -13380,22 +13991,22 @@ or when filtering possible completions as part of programmable completion. If set, bash -encloses the translated results of $"..." quoting in single quotes -instead of double quotes. +encloses the translated results of +$ ... + +quoting in single quotes instead of double quotes. If the string is not translated, this has no effect.
nullglob
-If set, -bash - -allows patterns which match no -files (see +If set, pathname expansion patterns which match no files +(see Pathname Expansion above) -to expand to a null string, rather than themselves. +expand to nothing and are removed, +rather than expanding to themselves.
patsub_replacement
@@ -13481,6 +14092,8 @@ instead of leaving them open when the command completes.
If set, the echo builtin expands backslash-escape sequences by default. +If the posix shell option is also enabled, echo does not +interpret any options.
@@ -13504,12 +14117,13 @@ is not supplied.
test expr
[ expr ]
+ Return a status of 0 (true) or 1 (false) depending on the evaluation of the conditional expression expr. Each operator and operand must be a separate argument. -Expressions are composed of the primaries described +Expressions are composed of the primaries described above under @@ -13518,9 +14132,7 @@ under test does not accept any options, nor does it accept and ignore an argument of -- as signifying the end of options. -

- - +

Expressions may be combined using the following operators, listed in decreasing order of precedence. The evaluation depends on the number of arguments; see below. @@ -13565,7 +14177,6 @@ expressions using a set of rules based on the number of arguments.

-

0 arguments
The expression is false. @@ -13616,32 +14227,33 @@ precedence using the rules listed above.
5 or more arguments
The expression is parsed and evaluated according to precedence using the rules listed above. -

-

-When used with test or [, the < and > operators -sort lexicographically using ASCII ordering. +When the shell is in posix mode, or if the expression is part +of the [[ command, +the < and > operators sort using the +current locale. +If the shell is not in posix mode, the test and [ +commands sort lexicographically using ASCII ordering. -

times
Print the accumulated user and system times for the shell and for processes run from the shell. The return status is 0. -
trap [-lp] [[arg] sigspec ...]
-The command -arg +
trap [-lp] [[action] sigspec ...]
+The +action -is to be read and executed when the shell receives +is a command that is read and executed when the shell receives signal(s) sigspec. If -arg +action is absent (and there is a single sigspec) or -, @@ -13650,33 +14262,52 @@ each specified signal is reset to its original disposition (the value it had upon entrance to the shell). If -arg +action is the null string the signal specified by each sigspec is ignored by the shell and by the commands it invokes. -If -arg +
+If no arguments are supplied, +trap -is not present and +displays the actions associated with each trapped signal +as a set of trap commands +that can be reused as shell input to +restore the current signal dispositions. +If -p -has been supplied, then the trap commands associated with each +is given, +and +action + +is not present, +then trap displays the actions associated with each sigspec -are displayed. -If no arguments are supplied or if only --p +or, if none are supplied, for all trapped signals, +as a set of trap commands +that can be reused as shell input to +restore the current signal dispositions. +The +-P -is given, -trap +option behaves similarly, but displays only the actions +associated with each sigspec argument. +-P -prints the list of commands associated with each signal. +requires at least one sigspec argument. +The -P or -p options to trap may be used +in a subshell environment (e.g., command substitution) and, as +long as they are used before trap is used to change a signal's +handling, will display the state of its parent's traps. +
The -l -option causes the shell to print a list of signal names and +option causes trap to print a list of signal names and their corresponding numbers. Each sigspec @@ -13688,9 +14319,7 @@ Signal names are case insensitive and the prefix is optional. -

- - +

If a sigspec @@ -13699,7 +14328,7 @@ is (0) the command -arg +action is executed on exit from the shell. If a @@ -13710,11 +14339,13 @@ is the command -arg +action is executed before every simple command, for command, -case command, select command, every arithmetic for -command, and before the first command executes in a shell function (see +case command, select command, (( arithmetic command, +[[ conditional command, +arithmetic for command, and before the first command executes +in a shell function (see SHELL GRAMMAR @@ -13730,13 +14361,11 @@ is the command -arg +action is executed each time a shell function or a script executed with the . or source builtins finishes executing. -

- - +

If a sigspec @@ -13745,7 +14374,7 @@ is the command -arg +action is executed whenever a pipeline (which may consist of a single simple @@ -13780,10 +14409,10 @@ being inverted using !. These are the same conditions obeyed by the errexit (-e) option. -

- - -Signals ignored upon entry to the shell cannot be trapped or reset. +

+When the shell is not interactive, +signals ignored upon entry to the shell cannot be trapped or reset. +Interactive shells permit trapping signals ignored on entry. Trapped signals that are not being ignored are reset to their original values in a subshell or subshell environment when one is created. The return status is false if any @@ -13793,6 +14422,8 @@ is invalid; otherwise trap returns true. +
true
+Does nothing, returns a 0 status.
type [-aftpP] name [name ...]
With no options, indicate how each @@ -13820,26 +14451,28 @@ or if name -is an alias, shell reserved word, function, builtin, or disk file, +is an alias, shell reserved word, function, builtin, or executable disk file, respectively. If the name -is not found, then nothing is printed, and an exit status of false -is returned. +is not found, then nothing is printed, and type returns a +non-zero exit status. If the -p option is used, type -either returns the name of the disk file -that would be executed if +either returns the name of the executable file +that would be found by searching +$PATH + +if name were specified as a command name, or nothing if -type -t name would not return file. @@ -13852,7 +14485,6 @@ option forces a search for each name, even if -type -t name would not return file. @@ -13874,19 +14506,24 @@ If the option is used, type -prints all of the places that contain -an executable named +prints all of the places that contain a command named name. -This includes aliases and functions, -if and only if the --p - -option is not also used. -The table of hashed commands is not consulted +This includes aliases, reserved words, functions, and builtins, +but the path search options (-p and -P) +can be supplied to restrict the output to executable files. +type does not consult the table of hashed commands when using --a. +-a + +with +-p, + +and only performs a +PATH + +search for name. The -f @@ -13951,7 +14588,8 @@ The maximum size of a process's data segment
-e
-The maximum scheduling priority ("nice") +The maximum scheduling priority ( +
-f
@@ -14203,7 +14841,7 @@ subsequently reset. The exit status is true unless a name is readonly or may not be unset. -
wait [-fn] [-p varname] [id ...]
+
wait [-fn] [-p varname] [id ...]
Wait for each specified child process and return its termination status. Each id @@ -14261,7 +14899,7 @@ specified as a set of options to the shopt builtin ( and so on). There is only one current -compatibility level -- each option is mutually exclusive. +compatibility level - each option is mutually exclusive. The compatibility level is intended to allow users to select behavior from previous versions that is incompatible with newer versions while they migrate scripts to use current features and @@ -14271,7 +14909,7 @@ behavior. It's intended to be a temporary solution. This section does not mention behavior that is standard for a particular version (e.g., setting compat32 means that quoting the rhs of the regexp matching operator quotes special regexp characters in the word, which is -default behavior in bash-3.2 and subsequent versions). +default behavior in bash-3.2 and subsequent versions).

If a user enables, say, compat32, it may affect the behavior of other @@ -14298,7 +14936,7 @@ corresponding to the compatNN option, like 42) determines the compatibility level.

-Starting with bash-4.4, Bash has begun deprecating older compatibility +Starting with bash-4.4, bash has begun deprecating older compatibility levels. Eventually, the options will be removed in favor of BASH_COMPAT. @@ -14306,12 +14944,12 @@ Eventually, the options will be removed in favor of

-Bash-5.0 is the final version for which there will be an individual shopt -option for the previous version. Users should use -BASH_COMPAT +Bash-5.0 was the final version for which there will be an individual shopt +option for the previous version. Users should control the compatibility +level with +BASH_COMPAT. -on bash-5.0 and later versions.

The following table describes the behavior changes controlled by each @@ -14343,11 +14981,9 @@ has no special effect

*
-interrupting a command list such as "a ; b ; c" causes the execution -of the next command in the list (in bash-4.0 and later versions, -the shell acts as if it received the interrupt, so -interrupting one command in a list aborts the execution of the -entire list) +the < and > operators to the [[ command do not +consider the current locale when comparing strings; they use ASCII +ordering.
@@ -14359,7 +14995,7 @@ entire list) the < and > operators to the [[ command do not consider the current locale when comparing strings; they use ASCII ordering. -Bash versions prior to bash-4.1 use ASCII collation and +Bash versions prior to bash-4.1 use ASCII collation and strcmp(3); bash-4.1 and later use the current locale's collation sequence and @@ -14408,7 +15044,7 @@ are not special within double-quoted word expansions
*
the shell does not print a warning message if an attempt is made to use a quoted compound assignment as an argument to declare -(e.g., declare -a foo=aq(1 2)aq). Later versions warn that this usage is +(e.g., declare -a foo='(1 2)'). Later versions warn that this usage is deprecated
*
word expansion errors are considered non-fatal errors that cause the @@ -14483,6 +15119,48 @@ when the -l option is supplied. The unset builtin treats attempts to unset array subscripts @ and * differently depending on whether the array is indexed or associative, and differently than in previous versions. +
*
+arithmetic commands ( +((...)) + +) and the expressions in an arithmetic for +statement can be expanded more than once +
*
+expressions used as arguments to arithmetic operators in the [[ +conditional command can be expanded more than once +
*
+the expressions in substring parameter brace expansion can be +expanded more than once +
*
+the expressions in the +$((...)) + +word expansion can be expanded more than once +
*
+arithmetic expressions used as indexed array subscripts can be +expanded more than once +
*
+test -v, when given an argument of A[@], where A is +an existing associative array, will return true if the array has any set +elements. +Bash-5.2 will look for and report on a key named @. +
*
+the ${parameter[:]=value} word expansion will return +value, before any variable-specific transformations have been +performed (e.g., converting to lowercase). +Bash-5.2 will return the final value assigned to the variable. +
*
+Parsing command substitutions will behave as if extended globbing +(see the description of the +shopt + +builtin above) +is enabled, so that parsing a command substitution containing an extglob +pattern (say, as part of a shell function) will not fail. +This assumes the intent is to enable extglob before the command is executed +and word expansions are performed. +It will fail at word expansion time if extglob hasn't been +enabled by the time the command is executed. @@ -14613,6 +15291,7 @@ These restrictions are enforced after any startup files are read. above), + rbash turns off any restrictions in the shell spawned to execute the @@ -14627,9 +15306,9 @@ script.
Bash Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and Chet Ramey
-
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE --
+
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE -
http://pubs.opengroup.org/onlinepubs/9699919799/ -
http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
+
http://tiswww.case.edu/~chet/bash/POSIX - a description of posix mode
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)
@@ -14695,7 +15374,7 @@ Chet Ramey, Case Western Reserve University

BUG REPORTS

If you find a bug in -bash, +bash, you should report it. But first, you should make sure that it really is a bug, and that it appears in the latest @@ -14712,8 +15391,9 @@ Once you have determined that a bug actually exists, use the 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 bug-bash@gnu.org or posted to the Usenet +You may send suggestions and + +bug reports to bug-bash@gnu.org or post them to the Usenet newsgroup gnu.bash.bug. @@ -14728,7 +15408,9 @@ ALL bug reports should include:
The hardware and operating system
The compiler used to compile
A description of the bug behaviour
-
A short script or `recipe' which exercises the bug
+
A short script or
+ +which exercises the bug

@@ -14768,13 +15450,15 @@ Aliases are confusing in some uses. Shell builtin commands and functions are not stoppable/restartable.

-Compound commands and command sequences of the form `a ; b ; c' +Compound commands and command sequences of the form + are not handled gracefully when process suspension is attempted. When a process is stopped, the shell immediately executes the next command in the sequence. -It suffices to place the sequence of commands between -parentheses to force it into a subshell, which may be stopped as -a unit. +It suffices to place the sequence of commands between parentheses to +force it into a subshell, which may be stopped as a unit, +or to start the command in the background and immediately +bring it into the foreground.

Array variables may not (yet) be exported. @@ -14787,7 +15471,7 @@ There may be only one active coprocess at a time.


-
GNU Bash 5.22022 September 19BASH(1) +GNU Bash 5.32024 March 29BASH(1)

@@ -14893,7 +15577,7 @@ There may be only one active coprocess at a time.
BUGS

-This document was created by man2html from /usr/local/src/bash/bash-20220907/doc/bash.1.
-Time: 19 September 2022 12:02:51 EDT +This document was created by man2html from /usr/local/src/bash/bash-20240402/doc/bash.1.
+Time: 04 April 2024 17:50:28 EDT diff --git a/doc/bash.info b/doc/bash.info index 6d31de621..996f95338 100644 --- a/doc/bash.info +++ b/doc/bash.info @@ -1,12 +1,12 @@ -This is bash.info, produced by makeinfo version 6.8 from bashref.texi. +This is bash.info, produced by makeinfo version 7.1 from bashref.texi. This text is a brief description of the features that are present in the -Bash shell (version 5.2, 19 September 2022). +Bash shell (version 5.3, 5 April 2024). - This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash -Reference Manual', for 'Bash', Version 5.2. + This is Edition 5.3, last updated 5 April 2024, of ‘The GNU Bash +Reference Manual’, for ‘Bash’, Version 5.3. - Copyright (C) 1988-2022 Free Software Foundation, Inc. + Copyright © 1988-2023 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, @@ -26,16 +26,16 @@ Bash Features ************* This text is a brief description of the features that are present in the -Bash shell (version 5.2, 19 September 2022). The Bash home page is +Bash shell (version 5.3, 5 April 2024). The Bash home page is . - This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash -Reference Manual', for 'Bash', Version 5.2. + This is Edition 5.3, last updated 5 April 2024, of ‘The GNU Bash +Reference Manual’, for ‘Bash’, Version 5.3. Bash contains features that appear in other popular shells, and some features that only appear in Bash. Some of the shells that Bash has -borrowed concepts from are the Bourne Shell ('sh'), the Korn Shell -('ksh'), and the C-shell ('csh' and its successor, 'tcsh'). The +borrowed concepts from are the Bourne Shell (‘sh’), the Korn Shell +(‘ksh’), and the C-shell (‘csh’ and its successor, ‘tcsh’). The following menu breaks the features up into categories, noting which features were inspired by other shells and which are specific to Bash. @@ -83,22 +83,22 @@ File: bash.info, Node: What is Bash?, Next: What is a shell?, Up: Introductio ================= Bash is the shell, or command language interpreter, for the GNU -operating system. The name is an acronym for the 'Bourne-Again SHell', +operating system. The name is an acronym for the ‘Bourne-Again SHell’, a pun on Stephen Bourne, the author of the direct ancestor of the -current Unix shell 'sh', which appeared in the Seventh Edition Bell Labs +current Unix shell ‘sh’, which appeared in the Seventh Edition Bell Labs Research version of Unix. - Bash is largely compatible with 'sh' and incorporates useful features -from the Korn shell 'ksh' and the C shell 'csh'. It is intended to be a + Bash is largely compatible with ‘sh’ and incorporates useful features +from the Korn shell ‘ksh’ and the C shell ‘csh’. It is intended to be a conformant implementation of the IEEE POSIX Shell and Tools portion of the IEEE POSIX specification (IEEE Standard 1003.1). It offers -functional improvements over 'sh' for both interactive and programming +functional improvements over ‘sh’ for both interactive and programming use. While the GNU operating system provides other shells, including a -version of 'csh', Bash is the default shell. Like other GNU software, +version of ‘csh’, Bash is the default shell. Like other GNU software, Bash is quite portable. It currently runs on nearly every version of -Unix and a few other operating systems - independently-supported ports +Unix and a few other operating systems − independently-supported ports exist for MS-DOS, OS/2, and Windows platforms.  @@ -117,7 +117,7 @@ interface to the rich set of GNU utilities. The programming language features allow these utilities to be combined. Files containing commands can be created, and become commands themselves. These new commands have the same status as system commands in directories such as -'/bin', allowing users or groups to establish custom environments to +‘/bin’, allowing users or groups to establish custom environments to automate their common tasks. Shells may be used interactively or non-interactively. In @@ -128,15 +128,15 @@ executing non-interactively, shells execute commands read from a file. asynchronously. The shell waits for synchronous commands to complete before accepting more input; asynchronous commands continue to execute in parallel with the shell while it reads and executes additional -commands. The "redirection" constructs permit fine-grained control of +commands. The “redirection” constructs permit fine-grained control of the input and output of those commands. Moreover, the shell allows control over the contents of commands' environments. - Shells also provide a small set of built-in commands ("builtins") + Shells also provide a small set of built-in commands (“builtins”) implementing functionality impossible or inconvenient to obtain via -separate utilities. For example, 'cd', 'break', 'continue', and 'exec' +separate utilities. For example, ‘cd’, ‘break’, ‘continue’, and ‘exec’ cannot be implemented outside of the shell because they directly -manipulate the shell itself. The 'history', 'getopts', 'kill', or 'pwd' +manipulate the shell itself. The ‘history’, ‘getopts’, ‘kill’, or ‘pwd’ builtins, among others, could be implemented in separate utilities, but they are more convenient to use as builtin commands. All of the shell builtins are described in subsequent sections. @@ -159,90 +159,90 @@ File: bash.info, Node: Definitions, Next: Basic Shell Features, Prev: Introdu These definitions are used throughout the remainder of this manual. -'POSIX' +‘POSIX’ A family of open system standards based on Unix. Bash is primarily concerned with the Shell and Utilities portion of the POSIX 1003.1 standard. -'blank' +‘blank’ A space or tab character. -'builtin' +‘builtin’ A command that is implemented internally by the shell itself, rather than by an executable program somewhere in the file system. -'control operator' - A 'token' that performs a control function. It is a 'newline' or - one of the following: '||', '&&', '&', ';', ';;', ';&', ';;&', '|', - '|&', '(', or ')'. +‘control operator’ + A ‘token’ that performs a control function. It is a ‘newline’ or + one of the following: ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘;&’, ‘;;&’, ‘|’, + ‘|&’, ‘(’, or ‘)’. -'exit status' +‘exit status’ The value returned by a command to its caller. The value is restricted to eight bits, so the maximum value is 255. -'field' +‘field’ A unit of text that is the result of one of the shell expansions. After expansion, when executing a command, the resulting fields are used as the command name and arguments. -'filename' +‘filename’ A string of characters used to identify a file. -'job' +‘job’ A set of processes comprising a pipeline, and any processes descended from it, that are all in the same process group. -'job control' +‘job control’ A mechanism by which users can selectively stop (suspend) and restart (resume) execution of processes. -'metacharacter' +‘metacharacter’ A character that, when unquoted, separates words. A metacharacter - is a 'space', 'tab', 'newline', or one of the following characters: - '|', '&', ';', '(', ')', '<', or '>'. + is a ‘space’, ‘tab’, ‘newline’, or one of the following characters: + ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, or ‘>’. -'name' - A 'word' consisting solely of letters, numbers, and underscores, - and beginning with a letter or underscore. 'Name's are used as +‘name’ + A ‘word’ consisting solely of letters, numbers, and underscores, + and beginning with a letter or underscore. ‘Name’s are used as shell variable and function names. Also referred to as an - 'identifier'. + ‘identifier’. -'operator' - A 'control operator' or a 'redirection operator'. *Note +‘operator’ + A ‘control operator’ or a ‘redirection operator’. *Note Redirections::, for a list of redirection operators. Operators - contain at least one unquoted 'metacharacter'. + contain at least one unquoted ‘metacharacter’. -'process group' +‘process group’ A collection of related processes each having the same process group ID. -'process group ID' - A unique identifier that represents a 'process group' during its +‘process group ID’ + A unique identifier that represents a ‘process group’ during its lifetime. -'reserved word' - A 'word' that has a special meaning to the shell. Most reserved - words introduce shell flow control constructs, such as 'for' and - 'while'. +‘reserved word’ + A ‘word’ that has a special meaning to the shell. Most reserved + words introduce shell flow control constructs, such as ‘for’ and + ‘while’. -'return status' - A synonym for 'exit status'. +‘return status’ + A synonym for ‘exit status’. -'signal' +‘signal’ A mechanism by which a process may be notified by the kernel of an event occurring in the system. -'special builtin' +‘special builtin’ A shell builtin command that has been classified as special by the POSIX standard. -'token' +‘token’ A sequence of characters considered a single unit by the shell. It - is either a 'word' or an 'operator'. + is either a ‘word’ or an ‘operator’. -'word' +‘word’ A sequence of characters treated as a unit by the shell. Words may - not include unquoted 'metacharacters'. + not include unquoted ‘metacharacters’.  File: bash.info, Node: Basic Shell Features, Next: Shell Builtin Commands, Prev: Definitions, Up: Top @@ -250,7 +250,7 @@ File: bash.info, Node: Basic Shell Features, Next: Shell Builtin Commands, Pr 3 Basic Shell Features ********************** -Bash is an acronym for 'Bourne-Again SHell'. The Bourne shell is the +Bash is an acronym for ‘Bourne-Again SHell’. The Bourne shell is the traditional Unix shell originally written by Stephen Bourne. All of the Bourne shell builtin commands are available in Bash, The rules for evaluation and quoting are taken from the POSIX specification for the @@ -287,7 +287,7 @@ File: bash.info, Node: Shell Syntax, Next: Shell Commands, Up: Basic Shell Fe When the shell reads input, it proceeds through a sequence of operations. If the input indicates the beginning of a comment, the -shell ignores the comment symbol ('#'), and the rest of that line. +shell ignores the comment symbol (‘#’), and the rest of that line. Otherwise, roughly speaking, the shell reads its input and divides the input into words and operators, employing the quoting rules to @@ -309,12 +309,12 @@ The following is a brief description of the shell's operation when it reads and executes a command. Basically, the shell does the following: 1. Reads its input from a file (*note Shell Scripts::), from a string - supplied as an argument to the '-c' invocation option (*note + supplied as an argument to the ‘-c’ invocation option (*note Invoking Bash::), or from the user's terminal. 2. Breaks the input into words and operators, obeying the quoting rules described in *note Quoting::. These tokens are separated by - 'metacharacters'. Alias expansion is performed by this step (*note + ‘metacharacters’. Alias expansion is performed by this step (*note Aliases::). 3. Parses the tokens into simple and compound commands (*note Shell @@ -358,11 +358,11 @@ as such, and to prevent parameter expansion. Each of the shell metacharacters (*note Definitions::) has special meaning to the shell and must be quoted if it is to represent itself. When the command history expansion facilities are being used (*note -History Interaction::), the "history expansion" character, usually '!', +History Interaction::), the “history expansion” character, usually ‘!’, must be quoted to prevent history expansion. *Note Bash History Facilities::, for more details concerning history expansion. - There are three quoting mechanisms: the "escape character", single + There are three quoting mechanisms: the “escape character”, single quotes, and double quotes.  @@ -371,10 +371,10 @@ File: bash.info, Node: Escape Character, Next: Single Quotes, Up: Quoting 3.1.2.1 Escape Character ........................ -A non-quoted backslash '\' is the Bash escape character. It preserves +A non-quoted backslash ‘\’ is the Bash escape character. It preserves the literal value of the next character that follows, with the exception -of 'newline'. If a '\newline' pair appears, and the backslash itself is -not quoted, the '\newline' is treated as a line continuation (that is, +of ‘newline’. If a ‘\newline’ pair appears, and the backslash itself is +not quoted, the ‘\newline’ is treated as a line continuation (that is, it is removed from the input stream and effectively ignored).  @@ -383,7 +383,7 @@ File: bash.info, Node: Single Quotes, Next: Double Quotes, Prev: Escape Chara 3.1.2.2 Single Quotes ..................... -Enclosing characters in single quotes (''') preserves the literal value +Enclosing characters in single quotes (‘'’) preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash. @@ -393,23 +393,23 @@ File: bash.info, Node: Double Quotes, Next: ANSI-C Quoting, Prev: Single Quot 3.1.2.3 Double Quotes ..................... -Enclosing characters in double quotes ('"') preserves the literal value -of all characters within the quotes, with the exception of '$', '`', -'\', and, when history expansion is enabled, '!'. When the shell is in -POSIX mode (*note Bash POSIX Mode::), the '!' has no special meaning +Enclosing characters in double quotes (‘"’) preserves the literal value +of all characters within the quotes, with the exception of ‘$’, ‘`’, +‘\’, and, when history expansion is enabled, ‘!’. When the shell is in +POSIX mode (*note Bash POSIX Mode::), the ‘!’ has no special meaning within double quotes, even when history expansion is enabled. The -characters '$' and '`' retain their special meaning within double quotes +characters ‘$’ and ‘`’ retain their special meaning within double quotes (*note Shell Expansions::). The backslash retains its special meaning -only when followed by one of the following characters: '$', '`', '"', -'\', or 'newline'. Within double quotes, backslashes that are followed +only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, +‘\’, or ‘newline’. Within double quotes, backslashes that are followed by one of these characters are removed. Backslashes preceding characters without a special meaning are left unmodified. A double quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless an -'!' appearing in double quotes is escaped using a backslash. The -backslash preceding the '!' is not removed. +‘!’ appearing in double quotes is escaped using a backslash. The +backslash preceding the ‘!’ is not removed. - The special parameters '*' and '@' have special meaning when in + The special parameters ‘*’ and ‘@’ have special meaning when in double quotes (*note Shell Parameter Expansion::).  @@ -418,50 +418,50 @@ File: bash.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Double 3.1.2.4 ANSI-C Quoting ...................... -Character sequences of the form $'STRING' are treated as a special kind -of single quotes. The sequence expands to STRING, with +Character sequences of the form ‘$'STRING'’ are treated as a special +kind of single quotes. The sequence expands to STRING, with backslash-escaped characters in STRING replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: -'\a' +‘\a’ alert (bell) -'\b' +‘\b’ backspace -'\e' -'\E' +‘\e’ +‘\E’ an escape character (not ANSI C) -'\f' +‘\f’ form feed -'\n' +‘\n’ newline -'\r' +‘\r’ carriage return -'\t' +‘\t’ horizontal tab -'\v' +‘\v’ vertical tab -'\\' +‘\\’ backslash -'\'' +‘\'’ single quote -'\"' +‘\"’ double quote -'\?' +‘\?’ question mark -'\NNN' +‘\NNN’ the eight-bit character whose value is the octal value NNN (one to three octal digits) -'\xHH' +‘\xHH’ the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) -'\uHHHH' +‘\uHHHH’ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) -'\UHHHHHHHH' +‘\UHHHHHHHH’ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits) -'\cX' +‘\cX’ a control-X character The expanded result is single-quoted, as if the dollar sign had not been @@ -478,17 +478,17 @@ File: bash.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoting * Creating Internationalized Scripts:: How to use translations and different languages in your scripts. -Prefixing a double-quoted string with a dollar sign ('$'), such as +Prefixing a double-quoted string with a dollar sign (‘$’), such as $"hello, world", will cause the string to be translated according to the -current locale. The 'gettext' infrastructure performs the lookup and -translation, using the 'LC_MESSAGES', 'TEXTDOMAINDIR', and 'TEXTDOMAIN' +current locale. The ‘gettext’ infrastructure performs the lookup and +translation, using the ‘LC_MESSAGES’, ‘TEXTDOMAINDIR’, and ‘TEXTDOMAIN’ shell variables, as explained below. See the gettext documentation for -additional details not covered here. If the current locale is 'C' or -'POSIX', if there are no translations available, of if the string is not +additional details not covered here. If the current locale is ‘C’ or +‘POSIX’, if there are no translations available, or if the string is not translated, the dollar sign is ignored. Since this is a form of double quoting, the string remains double-quoted by default, whether or not it -is translated and replaced. If the 'noexpand_translation' option is -enabled using the 'shopt' builtin (*note The Shopt Builtin::), +is translated and replaced. If the ‘noexpand_translation’ option is +enabled using the ‘shopt’ builtin (*note The Shopt Builtin::), translated strings are single-quoted instead of double-quoted. The rest of this section is a brief overview of how you use gettext @@ -503,21 +503,21 @@ using $"...", you create a gettext "template" file using the command bash --dump-po-strings SCRIPTNAME > DOMAIN.pot -The DOMAIN is your "message domain". It's just an arbitrary string +The DOMAIN is your “message domain”. It's just an arbitrary string that's used to identify the files gettext needs, like a package or script name. It needs to be unique among all the message domains on systems where you install the translations, so gettext knows which translations correspond to your script. You'll use the template file to create translations for each target language. The template file -conventionally has the suffix '.pot'. +conventionally has the suffix ‘.pot’. You copy this template file to a separate file for each target language you want to support (called "PO" files, which use the suffix -'.po'). PO files use various naming conventions, but when you are +‘.po’). PO files use various naming conventions, but when you are working to translate a template file into a particular language, you first copy the template file to a file whose name is the language you -want to target, with the '.po' suffix. For instance, the Spanish -translations of your strings would be in a file named 'es.po', and to +want to target, with the ‘.po’ suffix. For instance, the Spanish +translations of your strings would be in a file named ‘es.po’, and to get started using a message domain named "example," you would run cp example.pot es.po @@ -534,7 +534,7 @@ be done manually. gettext tools to produce what are called "MO" files, which are compiled versions of the PO files the gettext tools use to look up translations efficiently. MO files are also called "message catalog" files. You use -the 'msgfmt' program to do this. For instance, if you had a file with +the ‘msgfmt’ program to do this. For instance, if you had a file with Spanish translations, you could run msgfmt -o es.mo es.po @@ -542,29 +542,29 @@ Spanish translations, you could run to produce the corresponding MO file. Once you have the MO files, you decide where to install them and use -the 'TEXTDOMAINDIR' shell variable to tell the gettext tools where they +the ‘TEXTDOMAINDIR’ shell variable to tell the gettext tools where they are. Make sure to use the same message domain to name the MO files as you did for the PO files when you install them. - Your users will use the 'LANG' or 'LC_MESSAGES' shell variables to + Your users will use the ‘LANG’ or ‘LC_MESSAGES’ shell variables to select the desired language. - You set the 'TEXTDOMAIN' variable to the script's message domain. As + You set the ‘TEXTDOMAIN’ variable to the script's message domain. As above, you use the message domain to name your translation files. - You, or possibly your users, set the 'TEXTDOMAINDIR' variable to the + You, or possibly your users, set the ‘TEXTDOMAINDIR’ variable to the name of a directory where the message catalog files are stored. If you install the message files into the system's standard message catalog directory, you don't need to worry about this variable. The directory where the message catalog files are stored varies between systems. Some use the message catalog selected by the -'LC_MESSAGES' shell variable. Others create the name of the message -catalog from the value of the 'TEXTDOMAIN' shell variable, possibly -adding the '.mo' suffix. If you use the 'TEXTDOMAIN' variable, you may -need to set the 'TEXTDOMAINDIR' variable to the location of the message +‘LC_MESSAGES’ shell variable. Others create the name of the message +catalog from the value of the ‘TEXTDOMAIN’ shell variable, possibly +adding the ‘.mo’ suffix. If you use the ‘TEXTDOMAIN’ variable, you may +need to set the ‘TEXTDOMAINDIR’ variable to the location of the message catalog files, as above. It's common to use both variables in this -fashion: '$TEXTDOMAINDIR'/'$LC_MESSAGES'/LC_MESSAGES/'$TEXTDOMAIN'.mo. +fashion: ‘$TEXTDOMAINDIR’/‘$LC_MESSAGES’/LC_MESSAGES/‘$TEXTDOMAIN’.mo. If you used that last convention, and you wanted to store the message catalog files with Spanish (es) and Esperanto (eo) translations into a @@ -579,7 +579,7 @@ local directory you use for custom translation files, you could run When all of this is done, and the message catalog files containing the compiled translations are installed in the correct location, your users will be able to see translated strings in any of the supported -languages by setting the 'LANG' or 'LC_MESSAGES' environment variables +languages by setting the ‘LANG’ or ‘LC_MESSAGES’ environment variables before running your script.  @@ -589,11 +589,11 @@ File: bash.info, Node: Comments, Prev: Quoting, Up: Shell Syntax -------------- In a non-interactive shell, or an interactive shell in which the -'interactive_comments' option to the 'shopt' builtin is enabled (*note -The Shopt Builtin::), a word beginning with '#' causes that word and all +‘interactive_comments’ option to the ‘shopt’ builtin is enabled (*note +The Shopt Builtin::), a word beginning with ‘#’ causes that word and all remaining characters on that line to be ignored. An interactive shell -without the 'interactive_comments' option enabled does not allow -comments. The 'interactive_comments' option is on by default in +without the ‘interactive_comments’ option enabled does not allow +comments. The ‘interactive_comments’ option is on by default in interactive shells. *Note Interactive Shells::, for a description of what makes a shell interactive. @@ -603,7 +603,7 @@ File: bash.info, Node: Shell Commands, Next: Shell Functions, Prev: Shell Syn 3.2 Shell Commands ================== -A simple shell command such as 'echo a b c' consists of the command +A simple shell command such as ‘echo a b c’ consists of the command itself followed by arguments, separated by spaces. More complex shell commands are composed of simple commands arranged @@ -634,14 +634,14 @@ are used to begin and end the shell's compound commands. The following words are recognized as reserved when unquoted and the first word of a command (see below for exceptions): -'if' 'then' 'elif' 'else' 'fi' 'time' -'for' 'in' 'until' 'while' 'do' 'done' -'case' 'esac' 'coproc''select''function' -'{' '}' '[[' ']]' '!' +‘if’ ‘then’ ‘elif’ ‘else’ ‘fi’ ‘time’ +‘for’ ‘in’ ‘until’ ‘while’ ‘do’ ‘done’ +‘case’ ‘esac’ ‘coproc’‘select’‘function’ +‘{’ ‘}’ ‘[[’ ‘]]’ ‘!’ -'in' is recognized as a reserved word if it is the third word of a -'case' or 'select' command. 'in' and 'do' are recognized as reserved -words if they are the third word in a 'for' command. +‘in’ is recognized as a reserved word if it is the third word of a +‘case’ or ‘select’ command. ‘in’ and ‘do’ are recognized as reserved +words if they are the third word in a ‘for’ command.  File: bash.info, Node: Simple Commands, Next: Pipelines, Prev: Reserved Words, Up: Shell Commands @@ -650,13 +650,13 @@ File: bash.info, Node: Simple Commands, Next: Pipelines, Prev: Reserved Words --------------------- A simple command is the kind of command encountered most often. It's -just a sequence of words separated by 'blank's, terminated by one of the +just a sequence of words separated by ‘blank’s, terminated by one of the shell's control operators (*note Definitions::). The first word generally specifies a command to be executed, with the rest of the words being that command's arguments. The return status (*note Exit Status::) of a simple command is its -exit status as provided by the POSIX 1003.1 'waitpid' function, or 128+N +exit status as provided by the POSIX 1003.1 ‘waitpid’ function, or 128+N if the command was terminated by signal N.  @@ -665,8 +665,8 @@ File: bash.info, Node: Pipelines, Next: Lists, Prev: Simple Commands, Up: Sh 3.2.3 Pipelines --------------- -A 'pipeline' is a sequence of one or more commands separated by one of -the control operators '|' or '|&'. +A ‘pipeline’ is a sequence of one or more commands separated by one of +the control operators ‘|’ or ‘|&’. The format for a pipeline is [time [-p]] [!] COMMAND1 [ | or |& COMMAND2 ] ... @@ -676,47 +676,46 @@ the input of the next command. That is, each command reads the previous command's output. This connection is performed before any redirections specified by COMMAND1. - If '|&' is used, COMMAND1's standard error, in addition to its + If ‘|&’ is used, COMMAND1's standard error, in addition to its standard output, is connected to COMMAND2's standard input through the -pipe; it is shorthand for '2>&1 |'. This implicit redirection of the +pipe; it is shorthand for ‘2>&1 |’. This implicit redirection of the standard error to the standard output is performed after any redirections specified by COMMAND1. - The reserved word 'time' causes timing statistics to be printed for + The reserved word ‘time’ causes timing statistics to be printed for the pipeline once it finishes. The statistics currently consist of elapsed (wall-clock) time and user and system time consumed by the -command's execution. The '-p' option changes the output format to that +command's execution. The ‘-p’ option changes the output format to that specified by POSIX. When the shell is in POSIX mode (*note Bash POSIX -Mode::), it does not recognize 'time' as a reserved word if the next -token begins with a '-'. The 'TIMEFORMAT' variable may be set to a +Mode::), it does not recognize ‘time’ as a reserved word if the next +token begins with a ‘-’. The ‘TIMEFORMAT’ variable may be set to a format string that specifies how the timing information should be displayed. *Note Bash Variables::, for a description of the available -formats. The use of 'time' as a reserved word permits the timing of -shell builtins, shell functions, and pipelines. An external 'time' +formats. The use of ‘time’ as a reserved word permits the timing of +shell builtins, shell functions, and pipelines. An external ‘time’ command cannot time these easily. - When the shell is in POSIX mode (*note Bash POSIX Mode::), 'time' may + When the shell is in POSIX mode (*note Bash POSIX Mode::), ‘time’ may be followed by a newline. In this case, the shell displays the total user and system time consumed by the shell and its children. The -'TIMEFORMAT' variable may be used to specify the format of the time -information. +‘TIMEFORMAT’ variable specifies the format of the time information. If the pipeline is not executed asynchronously (*note Lists::), the shell waits for all commands in the pipeline to complete. Each command in a multi-command pipeline, where pipes are created, is -executed in its own "subshell", which is a separate process (*note -Command Execution Environment::). If the 'lastpipe' option is enabled -using the 'shopt' builtin (*note The Shopt Builtin::), the last element +executed in its own “subshell”, which is a separate process (*note +Command Execution Environment::). If the ‘lastpipe’ option is enabled +using the ‘shopt’ builtin (*note The Shopt Builtin::), the last element of a pipeline may be run by the shell process when job control is not active. The exit status of a pipeline is the exit status of the last command -in the pipeline, unless the 'pipefail' option is enabled (*note The Set -Builtin::). If 'pipefail' is enabled, the pipeline's return status is +in the pipeline, unless the ‘pipefail’ option is enabled (*note The Set +Builtin::). If ‘pipefail’ is enabled, the pipeline's return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully. If the reserved word -'!' precedes the pipeline, the exit status is the logical negation of +‘!’ precedes the pipeline, the exit status is the logical negation of the exit status as described above. The shell waits for all commands in the pipeline to terminate before returning a value. @@ -726,31 +725,31 @@ File: bash.info, Node: Lists, Next: Compound Commands, Prev: Pipelines, Up: 3.2.4 Lists of Commands ----------------------- -A 'list' is a sequence of one or more pipelines separated by one of the -operators ';', '&', '&&', or '||', and optionally terminated by one of -';', '&', or a 'newline'. +A ‘list’ is a sequence of one or more pipelines separated by one of the +operators ‘;’, ‘&’, ‘&&’, or ‘||’, and optionally terminated by one of +‘;’, ‘&’, or a ‘newline’. - Of these list operators, '&&' and '||' have equal precedence, -followed by ';' and '&', which have equal precedence. + Of these list operators, ‘&&’ and ‘||’ have equal precedence, +followed by ‘;’ and ‘&’, which have equal precedence. - A sequence of one or more newlines may appear in a 'list' to delimit + A sequence of one or more newlines may appear in a ‘list’ to delimit commands, equivalent to a semicolon. - If a command is terminated by the control operator '&', the shell + If a command is terminated by the control operator ‘&’, the shell executes the command asynchronously in a subshell. This is known as -executing the command in the "background", and these are referred to as -"asynchronous" commands. The shell does not wait for the command to +executing the command in the “background”, and these are referred to as +“asynchronous” commands. The shell does not wait for the command to finish, and the return status is 0 (true). When job control is not active (*note Job Control::), the standard input for asynchronous commands, in the absence of any explicit redirections, is redirected -from '/dev/null'. +from ‘/dev/null’. - Commands separated by a ';' are executed sequentially; the shell + Commands separated by a ‘;’ are executed sequentially; the shell waits for each command to terminate in turn. The return status is the exit status of the last command executed. AND and OR lists are sequences of one or more pipelines separated by -the control operators '&&' and '||', respectively. AND and OR lists are +the control operators ‘&&’ and ‘||’, respectively. AND and OR lists are executed with left associativity. An AND list has the form @@ -802,11 +801,11 @@ File: bash.info, Node: Looping Constructs, Next: Conditional Constructs, Up: Bash supports the following looping constructs. - Note that wherever a ';' appears in the description of a command's + Note that wherever a ‘;’ appears in the description of a command's syntax, it may be replaced with one or more newlines. -'until' - The syntax of the 'until' command is: +‘until’ + The syntax of the ‘until’ command is: until TEST-COMMANDS; do CONSEQUENT-COMMANDS; done @@ -815,8 +814,8 @@ syntax, it may be replaced with one or more newlines. the last command executed in CONSEQUENT-COMMANDS, or zero if none was executed. -'while' - The syntax of the 'while' command is: +‘while’ + The syntax of the ‘while’ command is: while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done @@ -825,23 +824,23 @@ syntax, it may be replaced with one or more newlines. command executed in CONSEQUENT-COMMANDS, or zero if none was executed. -'for' - The syntax of the 'for' command is: +‘for’ + The syntax of the ‘for’ command is: for NAME [ [in [WORDS ...] ] ; ] do COMMANDS; done Expand WORDS (*note Shell Expansions::), and execute COMMANDS once for each member in the resultant list, with NAME bound to the - current member. If 'in WORDS' is not present, the 'for' command + current member. If ‘in WORDS’ is not present, the ‘for’ command executes the COMMANDS once for each positional parameter that is - set, as if 'in "$@"' had been specified (*note Special + set, as if ‘in "$@"’ had been specified (*note Special Parameters::). The return status is the exit status of the last command that executes. If there are no items in the expansion of WORDS, no commands are executed, and the return status is zero. - An alternate form of the 'for' command is also supported: + An alternate form of the ‘for’ command is also supported: for (( EXPR1 ; EXPR2 ; EXPR3 )) ; do COMMANDS ; done @@ -855,7 +854,7 @@ syntax, it may be replaced with one or more newlines. command in COMMANDS that is executed, or false if any of the expressions is invalid. - The 'break' and 'continue' builtins (*note Bourne Shell Builtins::) + The ‘break’ and ‘continue’ builtins (*note Bourne Shell Builtins::) may be used to control loop execution.  @@ -864,8 +863,8 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: 3.2.5.2 Conditional Constructs .............................. -'if' - The syntax of the 'if' command is: +‘if’ + The syntax of the ‘if’ command is: if TEST-COMMANDS; then CONSEQUENT-COMMANDS; @@ -876,33 +875,33 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: The TEST-COMMANDS list is executed, and if its return status is zero, the CONSEQUENT-COMMANDS list is executed. If TEST-COMMANDS - returns a non-zero status, each 'elif' list is executed in turn, + returns a non-zero status, each ‘elif’ list is executed in turn, and if its exit status is zero, the corresponding MORE-CONSEQUENTS - is executed and the command completes. If 'else - ALTERNATE-CONSEQUENTS' is present, and the final command in the - final 'if' or 'elif' clause has a non-zero exit status, then + is executed and the command completes. If ‘else + ALTERNATE-CONSEQUENTS’ is present, and the final command in the + final ‘if’ or ‘elif’ clause has a non-zero exit status, then ALTERNATE-CONSEQUENTS is executed. The return status is the exit status of the last command executed, or zero if no condition tested true. -'case' - The syntax of the 'case' command is: +‘case’ + The syntax of the ‘case’ command is: case WORD in [ [(] PATTERN [| PATTERN]...) COMMAND-LIST ;;]... esac - 'case' will selectively execute the COMMAND-LIST corresponding to + ‘case’ will selectively execute the COMMAND-LIST corresponding to the first PATTERN that matches WORD. The match is performed according to the rules described below in *note Pattern Matching::. - If the 'nocasematch' shell option (see the description of 'shopt' + If the ‘nocasematch’ shell option (see the description of ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed - without regard to the case of alphabetic characters. The '|' is - used to separate multiple patterns, and the ')' operator terminates + without regard to the case of alphabetic characters. The ‘|’ is + used to separate multiple patterns, and the ‘)’ operator terminates a pattern list. A list of patterns and an associated command-list is known as a CLAUSE. - Each clause must be terminated with ';;', ';&', or ';;&'. The WORD + Each clause must be terminated with ‘;;’, ‘;&’, or ‘;;&’. The WORD undergoes tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal (*note Shell Parameter Expansion::) before matching is attempted. Each PATTERN @@ -910,13 +909,13 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: substitution, arithmetic expansion, process substitution, and quote removal. - There may be an arbitrary number of 'case' clauses, each terminated - by a ';;', ';&', or ';;&'. The first pattern that matches + There may be an arbitrary number of ‘case’ clauses, each terminated + by a ‘;;’, ‘;&’, or ‘;;&’. The first pattern that matches determines the command-list that is executed. It's a common idiom - to use '*' as the final pattern to define the default case, since + to use ‘*’ as the final pattern to define the default case, since that pattern will always match. - Here is an example using 'case' in a script that could be used to + Here is an example using ‘case’ in a script that could be used to describe one interesting feature of an animal: echo -n "Enter the name of an animal: " @@ -929,11 +928,10 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: esac echo " legs." - - If the ';;' operator is used, no subsequent matches are attempted - after the first pattern match. Using ';&' in place of ';;' causes + If the ‘;;’ operator is used, no subsequent matches are attempted + after the first pattern match. Using ‘;&’ in place of ‘;;’ causes execution to continue with the COMMAND-LIST associated with the - next clause, if any. Using ';;&' in place of ';;' causes the shell + next clause, if any. Using ‘;;&’ in place of ‘;;’ causes the shell to test the patterns in the next clause, if any, and execute any associated COMMAND-LIST on a successful match, continuing the case statement execution as if the pattern list had not matched. @@ -941,27 +939,27 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: The return status is zero if no PATTERN is matched. Otherwise, the return status is the exit status of the COMMAND-LIST executed. -'select' +‘select’ - The 'select' construct allows the easy generation of menus. It has - almost the same syntax as the 'for' command: + The ‘select’ construct allows the easy generation of menus. It has + almost the same syntax as the ‘for’ command: select NAME [in WORDS ...]; do COMMANDS; done - The list of words following 'in' is expanded, generating a list of + The list of words following ‘in’ is expanded, generating a list of items, and the set of expanded words is printed on the standard - error output stream, each preceded by a number. If the 'in WORDS' - is omitted, the positional parameters are printed, as if 'in "$@"' - had been specified. 'select' then displays the 'PS3' prompt and + error output stream, each preceded by a number. If the ‘in WORDS’ + is omitted, the positional parameters are printed, as if ‘in "$@"’ + had been specified. ‘select’ then displays the ‘PS3’ prompt and reads a line from the standard input. If the line consists of a number corresponding to one of the displayed words, then the value of NAME is set to that word. If the line is empty, the words and - prompt are displayed again. If 'EOF' is read, the 'select' command + prompt are displayed again. If ‘EOF’ is read, the ‘select’ command completes and returns 1. Any other value read causes NAME to be - set to null. The line read is saved in the variable 'REPLY'. + set to null. The line read is saved in the variable ‘REPLY’. - The COMMANDS are executed after each selection until a 'break' - command is executed, at which point the 'select' command completes. + The COMMANDS are executed after each selection until a ‘break’ + command is executed, at which point the ‘select’ command completes. Here is an example that allows the user to pick a filename from the current directory, and displays the name and index of the file @@ -973,7 +971,7 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: break; done -'((...))' +‘((...))’ (( EXPRESSION )) The arithmetic EXPRESSION is evaluated according to the rules @@ -983,47 +981,47 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: are removed. If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. -'[[...]]' +‘[[...]]’ [[ EXPRESSION ]] Return a status of 0 or 1 depending on the evaluation of the conditional expression EXPRESSION. Expressions are composed of the primaries described below in *note Bash Conditional Expressions::. - The words between the '[[' and ']]' do not undergo word splitting + The words between the ‘[[’ and ‘]]’ do not undergo word splitting and filename expansion. The shell performs tilde expansion, parameter and variable expansion, arithmetic expansion, command substitution, process substitution, and quote removal on those words (the expansions that would occur if the words were enclosed - in double quotes). Conditional operators such as '-f' must be + in double quotes). Conditional operators such as ‘-f’ must be unquoted to be recognized as primaries. - When used with '[[', the '<' and '>' operators sort + When used with ‘[[’, the ‘<’ and ‘>’ operators sort lexicographically using the current locale. - When the '==' and '!=' operators are used, the string to the right + When the ‘==’ and ‘!=’ operators are used, the string to the right of the operator is considered a pattern and matched according to the rules described below in *note Pattern Matching::, as if the - 'extglob' shell option were enabled. The '=' operator is identical - to '=='. If the 'nocasematch' shell option (see the description of - 'shopt' in *note The Shopt Builtin::) is enabled, the match is + ‘extglob’ shell option were enabled. The ‘=’ operator is identical + to ‘==’. If the ‘nocasematch’ shell option (see the description of + ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. The - return value is 0 if the string matches ('==') or does not match - ('!=') the pattern, and 1 otherwise. + return value is 0 if the string matches (‘==’) or does not match + (‘!=’) the pattern, and 1 otherwise. If you quote any part of the pattern, using any of the shell's quoting mechanisms, the quoted portion is matched literally. This means every character in the quoted portion matches itself, instead of having any special pattern matching meaning. - An additional binary operator, '=~', is available, with the same - precedence as '==' and '!='. When you use '=~', the string to the + An additional binary operator, ‘=~’, is available, with the same + precedence as ‘==’ and ‘!=’. When you use ‘=~’, the string to the right of the operator is considered a POSIX extended regular expression pattern and matched accordingly (using the POSIX - 'regcomp' and 'regexec' interfaces usually described in regex(3)). + ‘regcomp’ and ‘regexec’ interfaces usually described in regex(3)). The return value is 0 if the string matches the pattern, and 1 if it does not. If the regular expression is syntactically incorrect, - the conditional expression returns 2. If the 'nocasematch' shell - option (see the description of 'shopt' in *note The Shopt + the conditional expression returns 2. If the ‘nocasematch’ shell + option (see the description of ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. @@ -1035,39 +1033,39 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: The pattern will match if it matches any part of the string. If you want to force the pattern to match the entire string, anchor - the pattern using the '^' and '$' regular expression operators. + the pattern using the ‘^’ and ‘$’ regular expression operators. For example, the following will match a line (stored in the shell - variable 'line') if there is a sequence of characters anywhere in + variable ‘line’) if there is a sequence of characters anywhere in the value consisting of any number, including zero, of characters - in the 'space' character class, immediately followed by zero or one - instances of 'a', then a 'b': + in the ‘space’ character class, immediately followed by zero or one + instances of ‘a’, then a ‘b’: [[ $line =~ [[:space:]]*(a)?b ]] - That means values for 'line' like 'aab', ' aaaaaab', 'xaby', and ' - ab' will all match, as will a line containing a 'b' anywhere in its + That means values for ‘line’ like ‘aab’, ‘ aaaaaab’, ‘xaby’, and ‘ + ab’ will all match, as will a line containing a ‘b’ anywhere in its value. If you want to match a character that's special to the regular - expression grammar ('^$|[]()\.*+?'), it has to be quoted to remove - its special meaning. This means that in the pattern 'xxx.txt', the - '.' matches any character in the string (its usual regular - expression meaning), but in the pattern '"xxx.txt"', it can only - match a literal '.'. + expression grammar (‘^$|[]()\.*+?’), it has to be quoted to remove + its special meaning. This means that in the pattern ‘xxx.txt’, the + ‘.’ matches any character in the string (its usual regular + expression meaning), but in the pattern ‘"xxx.txt"’, it can only + match a literal ‘.’. Likewise, if you want to include a character in your pattern that has a special meaning to the regular expression grammar, you must make sure it's not quoted. If you want to anchor a pattern at the beginning or end of the string, for instance, you cannot quote the - '^' or '$' characters using any form of shell quoting. + ‘^’ or ‘$’ characters using any form of shell quoting. - If you want to match 'initial string' at the start of a line, the + If you want to match ‘initial string’ at the start of a line, the following will work: [[ $line =~ ^"initial string" ]] but this will not: [[ $line =~ "^initial string" ]] - because in the second example the '^' is quoted and doesn't have + because in the second example the ‘^’ is quoted and doesn't have its usual special meaning. It is sometimes difficult to specify a regular expression properly @@ -1105,13 +1103,13 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: The first two matches will succeed, but the second two will not, because in the second two the backslash will be part of the pattern to be matched. In the first two examples, the pattern passed to - the regular expression parser is '\.'. The backslash removes the - special meaning from '.', so the literal '.' matches. In the + the regular expression parser is ‘\.’. The backslash removes the + special meaning from ‘.’, so the literal ‘.’ matches. In the second two examples, the pattern passed to the regular expression - parser has the backslash quoted (e.g., '\\\.'), which will not + parser has the backslash quoted (e.g., ‘\\\.’), which will not match the string, since it does not contain a backslash. If the - string in the first examples were anything other than '.', say 'a', - the pattern would not match, because the quoted '.' in the pattern + string in the first examples were anything other than ‘.’, say ‘a’, + the pattern would not match, because the quoted ‘.’ in the pattern loses its special meaning of matching any single character. Bracket expressions in regular expressions can be sources of errors @@ -1122,7 +1120,7 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: purpose. Though it might seem like a strange way to write it, the following - pattern will match a '.' in the string: + pattern will match a ‘.’ in the string: [[ . =~ [.] ]] @@ -1135,35 +1133,35 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: twice as much as possible, so shell quoting should be sufficient to quote special pattern characters where that's necessary. - The array variable 'BASH_REMATCH' records which parts of the string - matched the pattern. The element of 'BASH_REMATCH' with index 0 + The array variable ‘BASH_REMATCH’ records which parts of the string + matched the pattern. The element of ‘BASH_REMATCH’ with index 0 contains the portion of the string matching the entire regular expression. Substrings matched by parenthesized subexpressions within the regular expression are saved in the remaining - 'BASH_REMATCH' indices. The element of 'BASH_REMATCH' with index N + ‘BASH_REMATCH’ indices. The element of ‘BASH_REMATCH’ with index N is the portion of the string matching the Nth parenthesized subexpression. - Bash sets 'BASH_REMATCH' in the global scope; declaring it as a + Bash sets ‘BASH_REMATCH’ in the global scope; declaring it as a local variable will lead to unexpected results. Expressions may be combined using the following operators, listed in decreasing order of precedence: - '( EXPRESSION )' + ‘( EXPRESSION )’ Returns the value of EXPRESSION. This may be used to override the normal precedence of operators. - '! EXPRESSION' + ‘! EXPRESSION’ True if EXPRESSION is false. - 'EXPRESSION1 && EXPRESSION2' + ‘EXPRESSION1 && EXPRESSION2’ True if both EXPRESSION1 and EXPRESSION2 are true. - 'EXPRESSION1 || EXPRESSION2' + ‘EXPRESSION1 || EXPRESSION2’ True if either EXPRESSION1 or EXPRESSION2 is true. - The '&&' and '||' operators do not evaluate EXPRESSION2 if the + The ‘&&’ and ‘||’ operators do not evaluate EXPRESSION2 if the value of EXPRESSION1 is sufficient to determine the return value of the entire conditional expression. @@ -1178,7 +1176,7 @@ unit. When commands are grouped, redirections may be applied to the entire command list. For example, the output of all the commands in the list may be redirected to a single stream. -'()' +‘()’ ( LIST ) Placing a list of commands between parentheses forces the shell to @@ -1187,7 +1185,7 @@ list may be redirected to a single stream. Since the LIST is executed in a subshell, variable assignments do not remain in effect after the subshell completes. -'{}' +‘{}’ { LIST; } Placing a list of commands between curly braces causes the list to @@ -1197,7 +1195,7 @@ list may be redirected to a single stream. In addition to the creation of a subshell, there is a subtle difference between these two constructs due to historical reasons. The braces are reserved words, so they must be separated from the LIST by -'blank's or other shell metacharacters. The parentheses are operators, +‘blank’s or other shell metacharacters. The parentheses are operators, and are recognized as separate tokens by the shell even if they are not separated from the LIST by whitespace. @@ -1210,9 +1208,9 @@ File: bash.info, Node: Coprocesses, Next: GNU Parallel, Prev: Compound Comman 3.2.6 Coprocesses ----------------- -A 'coprocess' is a shell command preceded by the 'coproc' reserved word. +A ‘coprocess’ is a shell command preceded by the ‘coproc’ reserved word. A coprocess is executed asynchronously in a subshell, as if the command -had been terminated with the '&' control operator, with a two-way pipe +had been terminated with the ‘&’ control operator, with a two-way pipe established between the executing shell and the coprocess. The syntax for a coprocess is: @@ -1222,14 +1220,14 @@ established between the executing shell and the coprocess. This creates a coprocess named NAME. COMMAND may be either a simple command (*note Simple Commands::) or a compound command (*note Compound Commands::). NAME is a shell variable name. If NAME is not supplied, -the default name is 'COPROC'. +the default name is ‘COPROC’. The recommended form to use for a coprocess is coproc NAME { COMMAND; } This form is recommended because simple commands result in the coprocess -always being named 'COPROC', and it is simpler to use and more complete +always being named ‘COPROC’, and it is simpler to use and more complete than the other compound commands. There are other forms of coprocesses: @@ -1239,7 +1237,7 @@ than the other compound commands. coproc SIMPLE-COMMAND If COMMAND is a compound command, NAME is optional. The word following -'coproc' determines whether that word is interpreted as a variable name: +‘coproc’ determines whether that word is interpreted as a variable name: it is interpreted as NAME if it is not a reserved word that introduces a compound command. If COMMAND is a simple command, NAME is not allowed; this is to avoid confusion between NAME and the first word of the simple @@ -1259,11 +1257,11 @@ process substitutions, the file descriptors are not available in subshells. The process ID of the shell spawned to execute the coprocess is -available as the value of the variable 'NAME_PID'. The 'wait' builtin +available as the value of the variable ‘NAME_PID’. The ‘wait’ builtin command may be used to wait for the coprocess to terminate. Since the coprocess is created as an asynchronous command, the -'coproc' command always returns success. The return status of a +‘coproc’ command always returns success. The return status of a coprocess is the exit status of COMMAND.  @@ -1281,7 +1279,7 @@ arguments, whether they are filenames, usernames, hostnames, or lines read from files. GNU Parallel provides shorthand references to many of the most common operations (input lines, various portions of the input line, different ways to specify the input source, and so on). Parallel -can replace 'xargs' or feed commands from its input sources to several +can replace ‘xargs’ or feed commands from its input sources to several different instances of Bash. For a complete description, refer to the GNU Parallel documentation, @@ -1309,20 +1307,20 @@ new process is created to interpret them. function FNAME [()] COMPOUND-COMMAND [ REDIRECTIONS ] This defines a shell function named FNAME. The reserved word -'function' is optional. If the 'function' reserved word is supplied, -the parentheses are optional. The "body" of the function is the +‘function’ is optional. If the ‘function’ reserved word is supplied, +the parentheses are optional. The “body” of the function is the compound command COMPOUND-COMMAND (*note Compound Commands::). That command is usually a LIST enclosed between { and }, but may be any -compound command listed above. If the 'function' reserved word is used, +compound command listed above. If the ‘function’ reserved word is used, but the parentheses are not supplied, the braces are recommended. COMPOUND-COMMAND is executed whenever FNAME is specified as the name of a simple command. When the shell is in POSIX mode (*note Bash POSIX Mode::), FNAME must be a valid shell name and may not be the same as one of the special builtins (*note Special Builtins::). In default mode, a -function name can be any unquoted shell word that does not contain '$'. +function name can be any unquoted shell word that does not contain ‘$’. Any redirections (*note Redirections::) associated with the shell function are performed when the function is executed. A function -definition may be deleted using the '-f' option to the 'unset' builtin +definition may be deleted using the ‘-f’ option to the ‘unset’ builtin (*note Bourne Shell Builtins::). The exit status of a function definition is zero unless a syntax @@ -1332,55 +1330,55 @@ last command executed in the body. Note that for historical reasons, in the most common usage the curly braces that surround the body of the function must be separated from the -body by 'blank's or newlines. This is because the braces are reserved +body by ‘blank’s or newlines. This is because the braces are reserved words and are only recognized as such when they are separated from the command list by whitespace or another shell metacharacter. Also, when -using the braces, the LIST must be terminated by a semicolon, a '&', or +using the braces, the LIST must be terminated by a semicolon, a ‘&’, or a newline. When a function is executed, the arguments to the function become the positional parameters during its execution (*note Positional -Parameters::). The special parameter '#' that expands to the number of +Parameters::). The special parameter ‘#’ that expands to the number of positional parameters is updated to reflect the change. Special -parameter '0' is unchanged. The first element of the 'FUNCNAME' +parameter ‘0’ is unchanged. The first element of the ‘FUNCNAME’ variable is set to the name of the function while the function is executing. All other aspects of the shell execution environment are identical -between a function and its caller with these exceptions: the 'DEBUG' and -'RETURN' traps are not inherited unless the function has been given the -'trace' attribute using the 'declare' builtin or the '-o functrace' -option has been enabled with the 'set' builtin, (in which case all -functions inherit the 'DEBUG' and 'RETURN' traps), and the 'ERR' trap is -not inherited unless the '-o errtrace' shell option has been enabled. -*Note Bourne Shell Builtins::, for the description of the 'trap' +between a function and its caller with these exceptions: the ‘DEBUG’ and +‘RETURN’ traps are not inherited unless the function has been given the +‘trace’ attribute using the ‘declare’ builtin or the ‘-o functrace’ +option has been enabled with the ‘set’ builtin, (in which case all +functions inherit the ‘DEBUG’ and ‘RETURN’ traps), and the ‘ERR’ trap is +not inherited unless the ‘-o errtrace’ shell option has been enabled. +*Note Bourne Shell Builtins::, for the description of the ‘trap’ builtin. - The 'FUNCNEST' variable, if set to a numeric value greater than 0, + The ‘FUNCNEST’ variable, if set to a numeric value greater than 0, defines a maximum function nesting level. Function invocations that exceed the limit cause the entire command to abort. - If the builtin command 'return' is executed in a function, the + If the builtin command ‘return’ is executed in a function, the function completes and execution resumes with the next command after the -function call. Any command associated with the 'RETURN' trap is +function call. Any command associated with the ‘RETURN’ trap is executed before execution resumes. When a function completes, the -values of the positional parameters and the special parameter '#' are +values of the positional parameters and the special parameter ‘#’ are restored to the values they had prior to the function's execution. If a -numeric argument is given to 'return', that is the function's return +numeric argument is given to ‘return’, that is the function's return status; otherwise the function's return status is the exit status of the -last command executed before the 'return'. +last command executed before the ‘return’. - Variables local to the function may be declared with the 'local' -builtin ("local variables"). Ordinarily, variables and their values are + Variables local to the function may be declared with the ‘local’ +builtin (“local variables”). Ordinarily, variables and their values are shared between a function and its caller. These variables are visible only to the function and the commands it invokes. This is particularly important when a shell function calls other functions. - In the following description, the "current scope" is a currently- + In the following description, the “current scope” is a currently- executing function. Previous scopes consist of that function's caller and so on, back to the "global" scope, where the shell is not executing any shell function. Consequently, a local variable at the current local -scope is a variable declared using the 'local' or 'declare' builtins in +scope is a variable declared using the ‘local’ or ‘declare’ builtins in the function that is currently executing. Local variables "shadow" variables with the same name declared at @@ -1389,19 +1387,19 @@ hides a global variable of the same name: references and assignments refer to the local variable, leaving the global variable unmodified. When the function returns, the global variable is once again visible. - The shell uses "dynamic scoping" to control a variable's visibility + The shell uses “dynamic scoping” to control a variable's visibility within functions. With dynamic scoping, visible variables and their values are a result of the sequence of function calls that caused execution to reach the current function. The value of a variable that a function sees depends on its value within its caller, if any, whether -that caller is the "global" scope or another shell function. This is -also the value that a local variable declaration "shadows", and the -value that is restored when the function returns. +that caller is the global scope or another shell function. This is also +the value that a local variable declaration shadows, and the value that +is restored when the function returns. - For example, if a variable 'var' is declared as local in function -'func1', and 'func1' calls another function 'func2', references to 'var' -made from within 'func2' will resolve to the local variable 'var' from -'func1', shadowing any global variable named 'var'. + For example, if a variable ‘var’ is declared as local in function +‘func1’, and ‘func1’ calls another function ‘func2’, references to ‘var’ +made from within ‘func2’ will resolve to the local variable ‘var’ from +‘func1’, shadowing any global variable named ‘var’. The following script demonstrates this behavior. When executed, the script displays @@ -1422,8 +1420,8 @@ script displays var=global func1 - The 'unset' builtin also acts using the same dynamic scope: if a -variable is local to the current scope, 'unset' will unset it; otherwise + The ‘unset’ builtin also acts using the same dynamic scope: if a +variable is local to the current scope, ‘unset’ will unset it; otherwise the unset will refer to the variable found in any calling scope as described above. If a variable at the current local scope is unset, it will remain so (appearing as unset) until it is reset in that scope or @@ -1431,18 +1429,18 @@ until the function returns. Once the function returns, any instance of the variable at a previous scope will become visible. If the unset acts on a variable at a previous scope, any instance of a variable with that name that had been shadowed will become visible (see below how -'localvar_unset'shell option changes this behavior). +‘localvar_unset’shell option changes this behavior). - Function names and definitions may be listed with the '-f' option to -the 'declare' ('typeset') builtin command (*note Bash Builtins::). The -'-F' option to 'declare' or 'typeset' will list the function names only -(and optionally the source file and line number, if the 'extdebug' shell + Function names and definitions may be listed with the ‘-f’ option to +the ‘declare’ (‘typeset’) builtin command (*note Bash Builtins::). The +‘-F’ option to ‘declare’ or ‘typeset’ will list the function names only +(and optionally the source file and line number, if the ‘extdebug’ shell option is enabled). Functions may be exported so that child shell processes (those created when executing a separate shell invocation) -automatically have them defined with the '-f' option to the 'export' +automatically have them defined with the ‘-f’ option to the ‘export’ builtin (*note Bourne Shell Builtins::). - Functions may be recursive. The 'FUNCNEST' variable may be used to + Functions may be recursive. The ‘FUNCNEST’ variable may be used to limit the depth of the function call stack and restrict the number of function invocations. By default, no limit is placed on the number of recursive calls. @@ -1458,50 +1456,50 @@ File: bash.info, Node: Shell Parameters, Next: Shell Expansions, Prev: Shell * Positional Parameters:: The shell's command-line arguments. * Special Parameters:: Parameters denoted by special characters. -A "parameter" is an entity that stores values. It can be a 'name', a -number, or one of the special characters listed below. A "variable" is -a parameter denoted by a 'name'. A variable has a 'value' and zero or -more 'attributes'. Attributes are assigned using the 'declare' builtin -command (see the description of the 'declare' builtin in *note Bash +A “parameter” is an entity that stores values. It can be a ‘name’, a +number, or one of the special characters listed below. A “variable” is +a parameter denoted by a ‘name’. A variable has a ‘value’ and zero or +more ‘attributes’. Attributes are assigned using the ‘declare’ builtin +command (see the description of the ‘declare’ builtin in *note Bash Builtins::). A parameter is set if it has been assigned a value. The null string is a valid value. Once a variable is set, it may be unset only by using -the 'unset' builtin command. +the ‘unset’ builtin command. A variable may be assigned to by a statement of the form NAME=[VALUE] If VALUE is not given, the variable is assigned the null string. All VALUEs undergo tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, and quote removal (*note -Shell Parameter Expansion::). If the variable has its 'integer' +Shell Parameter Expansion::). If the variable has its ‘integer’ attribute set, then VALUE is evaluated as an arithmetic expression even -if the '$((...))' expansion is not used (*note Arithmetic Expansion::). +if the ‘$((...))’ expansion is not used (*note Arithmetic Expansion::). Word splitting and filename expansion are not performed. Assignment -statements may also appear as arguments to the 'alias', 'declare', -'typeset', 'export', 'readonly', and 'local' builtin commands -("declaration" commands). When in POSIX mode (*note Bash POSIX Mode::), +statements may also appear as arguments to the ‘alias’, ‘declare’, +‘typeset’, ‘export’, ‘readonly’, and ‘local’ builtin commands +(“declaration” commands). When in POSIX mode (*note Bash POSIX Mode::), these builtins may appear in a command after one or more instances of -the 'command' builtin and retain these assignment statement properties. +the ‘command’ builtin and retain these assignment statement properties. In the context where an assignment statement is assigning a value to -a shell variable or array index (*note Arrays::), the '+=' operator can +a shell variable or array index (*note Arrays::), the ‘+=’ operator can be used to append to or add to the variable's previous value. This -includes arguments to builtin commands such as 'declare' that accept -assignment statements (declaration commands). When '+=' is applied to a -variable for which the 'integer' attribute has been set, VALUE is +includes arguments to builtin commands such as ‘declare’ that accept +assignment statements (declaration commands). When ‘+=’ is applied to a +variable for which the ‘integer’ attribute has been set, VALUE is evaluated as an arithmetic expression and added to the variable's -current value, which is also evaluated. When '+=' is applied to an +current value, which is also evaluated. When ‘+=’ is applied to an array variable using compound assignment (*note Arrays::), the -variable's value is not unset (as it is when using '='), and new values +variable's value is not unset (as it is when using ‘=’), and new values are appended to the array beginning at one greater than the array's maximum index (for indexed arrays), or added as additional key-value pairs in an associative array. When applied to a string-valued variable, VALUE is expanded and appended to the variable's value. - A variable can be assigned the 'nameref' attribute using the '-n' -option to the 'declare' or 'local' builtin commands (*note Bash -Builtins::) to create a "nameref", or a reference to another variable. + A variable can be assigned the ‘nameref’ attribute using the ‘-n’ +option to the ‘declare’ or ‘local’ builtin commands (*note Bash +Builtins::) to create a “nameref”, or a reference to another variable. This allows variables to be manipulated indirectly. Whenever the nameref variable is referenced, assigned to, unset, or has its attributes modified (other than using or changing the nameref attribute @@ -1511,19 +1509,19 @@ shell functions to refer to a variable whose name is passed as an argument to the function. For instance, if a variable name is passed to a shell function as its first argument, running declare -n ref=$1 -inside the function creates a nameref variable 'ref' whose value is the +inside the function creates a nameref variable ‘ref’ whose value is the variable name passed as the first argument. References and assignments -to 'ref', and changes to its attributes, are treated as references, +to ‘ref’, and changes to its attributes, are treated as references, assignments, and attribute modifications to the variable whose name was -passed as '$1'. +passed as ‘$1’. - If the control variable in a 'for' loop has the nameref attribute, + If the control variable in a ‘for’ loop has the nameref attribute, the list of words can be a list of shell variables, and a name reference will be established for each word in the list, in turn, when the loop is executed. Array variables cannot be given the nameref attribute. However, nameref variables can reference array variables and subscripted -array variables. Namerefs can be unset using the '-n' option to the -'unset' builtin (*note Bourne Shell Builtins::). Otherwise, if 'unset' +array variables. Namerefs can be unset using the ‘-n’ option to the +‘unset’ builtin (*note Bourne Shell Builtins::). Otherwise, if ‘unset’ is executed with the name of a nameref variable as an argument, the variable referenced by the nameref variable will be unset. @@ -1533,13 +1531,13 @@ File: bash.info, Node: Positional Parameters, Next: Special Parameters, Up: S 3.4.1 Positional Parameters --------------------------- -A "positional parameter" is a parameter denoted by one or more digits, -other than the single digit '0'. Positional parameters are assigned +A “positional parameter” is a parameter denoted by one or more digits, +other than the single digit ‘0’. Positional parameters are assigned from the shell's arguments when it is invoked, and may be reassigned -using the 'set' builtin command. Positional parameter 'N' may be -referenced as '${N}', or as '$N' when 'N' consists of a single digit. +using the ‘set’ builtin command. Positional parameter ‘N’ may be +referenced as ‘${N}’, or as ‘$N’ when ‘N’ consists of a single digit. Positional parameters may not be assigned to with assignment statements. -The 'set' and 'shift' builtins are used to set and unset them (*note +The ‘set’ and ‘shift’ builtins are used to set and unset them (*note Shell Builtin Commands::). The positional parameters are temporarily replaced when a shell function is executed (*note Shell Functions::). @@ -1555,20 +1553,20 @@ File: bash.info, Node: Special Parameters, Prev: Positional Parameters, Up: S The shell treats several parameters specially. These parameters may only be referenced; assignment to them is not allowed. -'*' +‘*’ ($*) Expands to the positional parameters, starting from one. When the expansion is not within double quotes, each positional parameter expands to a separate word. In contexts where it is performed, those words are subject to further word splitting and filename expansion. When the expansion occurs within double quotes, it expands to a single word with the value of each - parameter separated by the first character of the 'IFS' special - variable. That is, '"$*"' is equivalent to '"$1C$2C..."', where C - is the first character of the value of the 'IFS' variable. If - 'IFS' is unset, the parameters are separated by spaces. If 'IFS' + parameter separated by the first character of the ‘IFS’ special + variable. That is, ‘"$*"’ is equivalent to ‘"$1C$2C..."’, where C + is the first character of the value of the ‘IFS’ variable. If + ‘IFS’ is unset, the parameters are separated by spaces. If ‘IFS’ is null, the parameters are joined without intervening separators. -'@' +‘@’ ($@) Expands to the positional parameters, starting from one. In contexts where word splitting is performed, this expands each positional parameter to a separate word; if not within double @@ -1577,41 +1575,41 @@ only be referenced; assignment to them is not allowed. word with each positional parameter separated by a space. When the expansion occurs within double quotes, and word splitting is performed, each parameter expands to a separate word. That is, - '"$@"' is equivalent to '"$1" "$2" ...'. If the double-quoted + ‘"$@"’ is equivalent to ‘"$1" "$2" ...’. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. When there are no positional - parameters, '"$@"' and '$@' expand to nothing (i.e., they are + parameters, ‘"$@"’ and ‘$@’ expand to nothing (i.e., they are removed). -'#' +‘#’ ($#) Expands to the number of positional parameters in decimal. -'?' +‘?’ ($?) Expands to the exit status of the most recently executed foreground pipeline. -'-' +‘-’ ($-, a hyphen.) Expands to the current option flags as specified - upon invocation, by the 'set' builtin command, or those set by the - shell itself (such as the '-i' option). + upon invocation, by the ‘set’ builtin command, or those set by the + shell itself (such as the ‘-i’ option). -'$' +‘$’ ($$) Expands to the process ID of the shell. In a subshell, it expands to the process ID of the invoking shell, not the subshell. -'!' +‘!’ ($!) Expands to the process ID of the job most recently placed into the background, whether executed as an asynchronous command or - using the 'bg' builtin (*note Job Control Builtins::). + using the ‘bg’ builtin (*note Job Control Builtins::). -'0' +‘0’ ($0) Expands to the name of the shell or shell script. This is set at shell initialization. If Bash is invoked with a file of - commands (*note Shell Scripts::), '$0' is set to the name of that - file. If Bash is started with the '-c' option (*note Invoking - Bash::), then '$0' is set to the first argument after the string to + commands (*note Shell Scripts::), ‘$0’ is set to the name of that + file. If Bash is started with the ‘-c’ option (*note Invoking + Bash::), then ‘$0’ is set to the first argument after the string to be executed, if one is present. Otherwise, it is set to the filename used to invoke Bash, as given by argument zero. @@ -1622,15 +1620,16 @@ File: bash.info, Node: Shell Expansions, Next: Redirections, Prev: Shell Para ==================== Expansion is performed on the command line after it has been split into -'token's. There are seven kinds of expansion performed: +‘token’s. Bash performs these expansions: - * brace expansion - * tilde expansion - * parameter and variable expansion - * command substitution - * arithmetic expansion - * word splitting - * filename expansion + • brace expansion + • tilde expansion + • parameter and variable expansion + • command substitution + • arithmetic expansion + • word splitting + • filename expansion + • quote removal * Menu: @@ -1649,26 +1648,24 @@ Expansion is performed on the command line after it has been split into The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command -substitution (done in a left-to-right fashion); word splitting; and -filename expansion. +substitution (done in a left-to-right fashion); word splitting; filename +expansion; and quote removal. On systems that can support it, there is an additional expansion -available: "process substitution". This is performed at the same time +available: “process substitution”. This is performed at the same time as tilde, parameter, variable, and arithmetic expansion and command substitution. - After these expansions are performed, quote characters present in the -original word are removed unless they have been quoted themselves -("quote removal"). + “Quote removal” is always performed last. It removes quote +characters present in the original word, not ones resulting from one of +the other expansions, unless they have been quoted themselves. *Note +Quote Removal:: for more details. Only brace expansion, word splitting, and filename expansion can increase the number of words of the expansion; other expansions expand a single word to a single word. The only exceptions to this are the -expansions of '"$@"' and '$*' (*note Special Parameters::), and -'"${NAME[@]}"' and '${NAME[*]}' (*note Arrays::). - - After all expansions, 'quote removal' (*note Quote Removal::) is -performed. +expansions of ‘"$@"’ and ‘$*’ (*note Special Parameters::), and +‘"${NAME[@]}"’ and ‘${NAME[*]}’ (*note Arrays::).  File: bash.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell Expansions @@ -1677,7 +1674,7 @@ File: bash.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell Expa --------------------- Brace expansion is a mechanism by which arbitrary strings may be -generated. This mechanism is similar to "filename expansion" (*note +generated. This mechanism is similar to “filename expansion” (*note Filename Expansion::), but the filenames generated need not exist. Patterns to be brace expanded take the form of an optional PREAMBLE, followed by either a series of comma-separated strings or a sequence @@ -1691,18 +1688,17 @@ are not sorted; left to right order is preserved. For example, bash$ echo a{d,c,b}e ade ace abe - A sequence expression takes the form '{X..Y[..INCR]}', where X and Y + A sequence expression takes the form ‘{X..Y[..INCR]}’, where X and Y are either integers or letters, and INCR, an optional increment, is an integer. When integers are supplied, the expression expands to each -number between X and Y, inclusive. Supplied integers may be prefixed -with '0' to force each term to have the same width. When either X or Y -begins with a zero, the shell attempts to force all generated terms to -contain the same number of digits, zero-padding where necessary. When -letters are supplied, the expression expands to each character -lexicographically between X and Y, inclusive, using the default C -locale. Note that both X and Y must be of the same type (integer or -letter). When the increment is supplied, it is used as the difference -between each term. The default increment is 1 or -1 as appropriate. +number between X and Y, inclusive. When either X or Y begins with a +zero, the shell attempts to force all generated terms to contain the +same number of digits, zero-padding where necessary. When letters are +supplied, the expression expands to each character lexicographically +between X and Y, inclusive, using the default C locale. Note that both +X and Y must be of the same type (integer or letter). When the +increment is supplied, it is used as the difference between each term. +The default increment is 1 or -1 as appropriate. Brace expansion is performed before any other expansions, and any characters special to other expansions are preserved in the result. It @@ -1713,10 +1709,10 @@ to the context of the expansion or the text between the braces. closing braces, and at least one unquoted comma or a valid sequence expression. Any incorrectly formed brace expansion is left unchanged. - A { or ',' may be quoted with a backslash to prevent its being + A { or ‘,’ may be quoted with a backslash to prevent its being considered part of a brace expression. To avoid conflicts with -parameter expansion, the string '${' is not considered eligible for -brace expansion, and inhibits brace expansion until the closing '}'. +parameter expansion, the string ‘${’ is not considered eligible for +brace expansion, and inhibits brace expansion until the closing ‘}’. This construct is typically used as shorthand when the common prefix of the strings to be generated is longer than in the above example: @@ -1730,62 +1726,62 @@ File: bash.info, Node: Tilde Expansion, Next: Shell Parameter Expansion, Prev 3.5.2 Tilde Expansion --------------------- -If a word begins with an unquoted tilde character ('~'), all of the +If a word begins with an unquoted tilde character (‘~’), all of the characters up to the first unquoted slash (or all characters, if there -is no unquoted slash) are considered a "tilde-prefix". If none of the +is no unquoted slash) are considered a “tilde-prefix”. If none of the characters in the tilde-prefix are quoted, the characters in the -tilde-prefix following the tilde are treated as a possible "login name". +tilde-prefix following the tilde are treated as a possible “login name”. If this login name is the null string, the tilde is replaced with the -value of the 'HOME' shell variable. If 'HOME' is unset, the home +value of the ‘HOME’ shell variable. If ‘HOME’ is unset, the home directory of the user executing the shell is substituted instead. Otherwise, the tilde-prefix is replaced with the home directory associated with the specified login name. - If the tilde-prefix is '~+', the value of the shell variable 'PWD' -replaces the tilde-prefix. If the tilde-prefix is '~-', the value of -the shell variable 'OLDPWD', if it is set, is substituted. + If the tilde-prefix is ‘~+’, the value of the shell variable ‘PWD’ +replaces the tilde-prefix. If the tilde-prefix is ‘~-’, the value of +the shell variable ‘OLDPWD’, if it is set, is substituted. If the characters following the tilde in the tilde-prefix consist of -a number N, optionally prefixed by a '+' or a '-', the tilde-prefix is +a number N, optionally prefixed by a ‘+’ or a ‘-’, the tilde-prefix is replaced with the corresponding element from the directory stack, as it -would be displayed by the 'dirs' builtin invoked with the characters +would be displayed by the ‘dirs’ builtin invoked with the characters following tilde in the tilde-prefix as an argument (*note The Directory Stack::). If the tilde-prefix, sans the tilde, consists of a number -without a leading '+' or '-', '+' is assumed. +without a leading ‘+’ or ‘-’, ‘+’ is assumed. If the login name is invalid, or the tilde expansion fails, the word is left unchanged. Each variable assignment is checked for unquoted tilde-prefixes -immediately following a ':' or the first '='. In these cases, tilde +immediately following a ‘:’ or the first ‘=’. In these cases, tilde expansion is also performed. Consequently, one may use filenames with -tildes in assignments to 'PATH', 'MAILPATH', and 'CDPATH', and the shell +tildes in assignments to ‘PATH’, ‘MAILPATH’, and ‘CDPATH’, and the shell assigns the expanded value. The following table shows how Bash treats unquoted tilde-prefixes: -'~' - The value of '$HOME' -'~/foo' - '$HOME/foo' +‘~’ + The value of ‘$HOME’ +‘~/foo’ + ‘$HOME/foo’ -'~fred/foo' - The subdirectory 'foo' of the home directory of the user 'fred' +‘~fred/foo’ + The subdirectory ‘foo’ of the home directory of the user ‘fred’ -'~+/foo' - '$PWD/foo' +‘~+/foo’ + ‘$PWD/foo’ -'~-/foo' - '${OLDPWD-'~-'}/foo' +‘~-/foo’ + ‘${OLDPWD-'~-'}/foo’ -'~N' - The string that would be displayed by 'dirs +N' +‘~N’ + The string that would be displayed by ‘dirs +N’ -'~+N' - The string that would be displayed by 'dirs +N' +‘~+N’ + The string that would be displayed by ‘dirs +N’ -'~-N' - The string that would be displayed by 'dirs -N' +‘~-N’ + The string that would be displayed by ‘dirs -N’ Bash also performs tilde expansion on words satisfying the conditions of variable assignments (*note Shell Parameters::) when they appear as @@ -1798,13 +1794,13 @@ File: bash.info, Node: Shell Parameter Expansion, Next: Command Substitution, 3.5.3 Shell Parameter Expansion ------------------------------- -The '$' character introduces parameter expansion, command substitution, +The ‘$’ character introduces parameter expansion, command substitution, or arithmetic expansion. The parameter name or symbol to be expanded may be enclosed in braces, which are optional but serve to protect the variable to be expanded from characters immediately following it which could be interpreted as part of the name. - When braces are used, the matching ending brace is the first '}' not + When braces are used, the matching ending brace is the first ‘}’ not escaped by a backslash or within a quoted string, and not within an embedded arithmetic expansion, command substitution, or parameter expansion. @@ -1821,7 +1817,7 @@ PARAMETER is not a nameref, it introduces a level of indirection. Bash uses the value formed by expanding the rest of PARAMETER as the new PARAMETER; this is then expanded and that value is used in the rest of the expansion, rather than the expansion of the original PARAMETER. -This is known as 'indirect expansion'. The value is subject to tilde +This is known as ‘indirect expansion’. The value is subject to tilde expansion, parameter expansion, command substitution, and arithmetic expansion. If PARAMETER is a nameref, this expands to the name of the variable referenced by PARAMETER instead of performing the complete @@ -1832,22 +1828,30 @@ immediately follow the left brace in order to introduce indirection. In each of the cases below, WORD is subject to tilde expansion, parameter expansion, command substitution, and arithmetic expansion. - When not performing substring expansion, using the form described -below (e.g., ':-'), Bash tests for a parameter that is unset or null. + When not performing substring expansion, using the forms described +below (e.g., ‘:-’), Bash tests for a parameter that is unset or null. Omitting the colon results in a test only for a parameter that is unset. Put another way, if the colon is included, the operator tests for both PARAMETER's existence and that its value is not null; if the colon is omitted, the operator tests only for existence. -'${PARAMETER:-WORD}' +‘${PARAMETER:−WORD}’ If PARAMETER is unset or null, the expansion of WORD is substituted. Otherwise, the value of PARAMETER is substituted. $ v=123 $ echo ${v-unset} 123 + $ echo ${v:-unset-or-null} + 123 + $ unset v + $ echo ${v-unset} + unset + $ v= + $ echo ${v:-unset-or-null} + unset-or-null -'${PARAMETER:=WORD}' +‘${PARAMETER:=WORD}’ If PARAMETER is unset or null, the expansion of WORD is assigned to PARAMETER. The value of PARAMETER is then substituted. Positional parameters and special parameters may not be assigned to in this @@ -1858,7 +1862,7 @@ omitted, the operator tests only for existence. $ echo $var DEFAULT -'${PARAMETER:?WORD}' +‘${PARAMETER:?WORD}’ If PARAMETER is null or unset, the expansion of WORD (or a message to that effect if WORD is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, @@ -1868,7 +1872,7 @@ omitted, the operator tests only for existence. $ : ${var:?var is unset or null} bash: var: var is unset or null -'${PARAMETER:+WORD}' +‘${PARAMETER:+WORD}’ If PARAMETER is null or unset, nothing is substituted, otherwise the expansion of WORD is substituted. @@ -1876,12 +1880,12 @@ omitted, the operator tests only for existence. $ echo ${var:+var is set and not null} var is set and not null -'${PARAMETER:OFFSET}' -'${PARAMETER:OFFSET:LENGTH}' +‘${PARAMETER:OFFSET}’ +‘${PARAMETER:OFFSET:LENGTH}’ This is referred to as Substring Expansion. It expands to up to LENGTH characters of the value of PARAMETER starting at the - character specified by OFFSET. If PARAMETER is '@' or '*', an - indexed array subscripted by '@' or '*', or an associative array + character specified by OFFSET. If PARAMETER is ‘@’ or ‘*’, an + indexed array subscripted by ‘@’ or ‘*’, or an associative array name, the results differ as described below. If LENGTH is omitted, it expands to the substring of the value of PARAMETER starting at the character specified by OFFSET and extending to the end of the @@ -1895,7 +1899,7 @@ omitted, the operator tests only for existence. rather than a number of characters, and the expansion is the characters between OFFSET and that result. Note that a negative offset must be separated from the colon by at least one space to - avoid being confused with the ':-' expansion. + avoid being confused with the ‘:-’ expansion. Here are some examples illustrating substring expansion on parameters and subscripted arrays: @@ -1952,11 +1956,12 @@ omitted, the operator tests only for existence. $ echo ${array[0]: -7:-2} bcdef - If PARAMETER is '@' or '*', the result is LENGTH positional + If PARAMETER is ‘@’ or ‘*’, the result is LENGTH positional parameters beginning at OFFSET. A negative OFFSET is taken relative to one greater than the greatest positional parameter, so - an offset of -1 evaluates to the last positional parameter. It is - an expansion error if LENGTH evaluates to a number less than zero. + an offset of -1 evaluates to the last positional parameter (or 0 if + there are no positional parameters). It is an expansion error if + LENGTH evaluates to a number less than zero. The following examples illustrate substring expansion using positional parameters: @@ -1979,9 +1984,9 @@ omitted, the operator tests only for existence. $ echo ${@: -7:0} - If PARAMETER is an indexed array name subscripted by '@' or '*', + If PARAMETER is an indexed array name subscripted by ‘@’ or ‘*’, the result is the LENGTH members of the array beginning with - '${PARAMETER[OFFSET]}'. A negative OFFSET is taken relative to one + ‘${PARAMETER[OFFSET]}’. A negative OFFSET is taken relative to one greater than the maximum index of the specified array. It is an expansion error if LENGTH evaluates to a number less than zero. @@ -2009,66 +2014,66 @@ omitted, the operator tests only for existence. Substring indexing is zero-based unless the positional parameters are used, in which case the indexing starts at 1 by default. If - OFFSET is 0, and the positional parameters are used, '$0' is + OFFSET is 0, and the positional parameters are used, ‘$0’ is prefixed to the list. -'${!PREFIX*}' -'${!PREFIX@}' +‘${!PREFIX*}’ +‘${!PREFIX@}’ Expands to the names of variables whose names begin with PREFIX, - separated by the first character of the 'IFS' special variable. - When '@' is used and the expansion appears within double quotes, + separated by the first character of the ‘IFS’ special variable. + When ‘@’ is used and the expansion appears within double quotes, each variable name expands to a separate word. -'${!NAME[@]}' -'${!NAME[*]}' +‘${!NAME[@]}’ +‘${!NAME[*]}’ If NAME is an array variable, expands to the list of array indices (keys) assigned in NAME. If NAME is not an array, expands to 0 if - NAME is set and null otherwise. When '@' is used and the expansion + NAME is set and null otherwise. When ‘@’ is used and the expansion appears within double quotes, each key expands to a separate word. -'${#PARAMETER}' +‘${#PARAMETER}’ The length in characters of the expanded value of PARAMETER is - substituted. If PARAMETER is '*' or '@', the value substituted is + substituted. If PARAMETER is ‘*’ or ‘@’, the value substituted is the number of positional parameters. If PARAMETER is an array name - subscripted by '*' or '@', the value substituted is the number of + subscripted by ‘*’ or ‘@’, the value substituted is the number of elements in the array. If PARAMETER is an indexed array name subscripted by a negative number, that number is interpreted as relative to one greater than the maximum index of PARAMETER, so negative indices count back from the end of the array, and an index of -1 references the last element. -'${PARAMETER#WORD}' -'${PARAMETER##WORD}' +‘${PARAMETER#WORD}’ +‘${PARAMETER##WORD}’ The WORD is expanded to produce a pattern and matched according to the rules described below (*note Pattern Matching::). If the pattern matches the beginning of the expanded value of PARAMETER, then the result of the expansion is the expanded value of PARAMETER - with the shortest matching pattern (the '#' case) or the longest - matching pattern (the '##' case) deleted. If PARAMETER is '@' or - '*', the pattern removal operation is applied to each positional + with the shortest matching pattern (the ‘#’ case) or the longest + matching pattern (the ‘##’ case) deleted. If PARAMETER is ‘@’ or + ‘*’, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. If - PARAMETER is an array variable subscripted with '@' or '*', the + PARAMETER is an array variable subscripted with ‘@’ or ‘*’, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. -'${PARAMETER%WORD}' -'${PARAMETER%%WORD}' +‘${PARAMETER%WORD}’ +‘${PARAMETER%%WORD}’ The WORD is expanded to produce a pattern and matched according to the rules described below (*note Pattern Matching::). If the pattern matches a trailing portion of the expanded value of PARAMETER, then the result of the expansion is the value of - PARAMETER with the shortest matching pattern (the '%' case) or the - longest matching pattern (the '%%' case) deleted. If PARAMETER is - '@' or '*', the pattern removal operation is applied to each + PARAMETER with the shortest matching pattern (the ‘%’ case) or the + longest matching pattern (the ‘%%’ case) deleted. If PARAMETER is + ‘@’ or ‘*’, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant - list. If PARAMETER is an array variable subscripted with '@' or - '*', the pattern removal operation is applied to each member of the + list. If PARAMETER is an array variable subscripted with ‘@’ or + ‘*’, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. -'${PARAMETER/PATTERN/STRING}' -'${PARAMETER//PATTERN/STRING}' -'${PARAMETER/#PATTERN/STRING}' -'${PARAMETER/%PATTERN/STRING}' +‘${PARAMETER/PATTERN/STRING}’ +‘${PARAMETER//PATTERN/STRING}’ +‘${PARAMETER/#PATTERN/STRING}’ +‘${PARAMETER/%PATTERN/STRING}’ The PATTERN is expanded to produce a pattern just as in filename expansion. PARAMETER is expanded and the longest match of PATTERN against its value is replaced with STRING. STRING undergoes tilde @@ -2080,30 +2085,30 @@ omitted, the operator tests only for existence. In the first form above, only the first match is replaced. If there are two slashes separating PARAMETER and PATTERN (the second form above), all matches of PATTERN are replaced with STRING. If - PATTERN is preceded by '#' (the third form above), it must match at + PATTERN is preceded by ‘#’ (the third form above), it must match at the beginning of the expanded value of PARAMETER. If PATTERN is - preceded by '%' (the fourth form above), it must match at the end + preceded by ‘%’ (the fourth form above), it must match at the end of the expanded value of PARAMETER. If the expansion of STRING is null, matches of PATTERN are deleted. If STRING is null, matches - of PATTERN are deleted and the '/' following PATTERN may be + of PATTERN are deleted and the ‘/’ following PATTERN may be omitted. - If the 'patsub_replacement' shell option is enabled using 'shopt', - any unquoted instances of '&' in STRING are replaced with the + If the ‘patsub_replacement’ shell option is enabled using ‘shopt’, + any unquoted instances of ‘&’ in STRING are replaced with the matching portion of PATTERN. This is intended to duplicate a - common 'sed' idiom. + common ‘sed’ idiom. Quoting any part of STRING inhibits replacement in the expansion of the quoted portion, including replacement strings stored in shell - variables. Backslash will escape '&' in STRING; the backslash is - removed in order to permit a literal '&' in the replacement string. + variables. Backslash will escape ‘&’ in STRING; the backslash is + removed in order to permit a literal ‘&’ in the replacement string. Users should take care if STRING is double-quoted to avoid unwanted interactions between the backslash and double-quoting, since backslash has special meaning within double quotes. Pattern - substitution performs the check for unquoted '&' after expanding + substitution performs the check for unquoted ‘&’ after expanding STRING, so users should ensure to properly quote any occurrences of - '&' they want to be taken literally in the replacement and ensure - any instances of '&' they want to be replaced are unquoted. + ‘&’ they want to be taken literally in the replacement and ensure + any instances of ‘&’ they want to be replaced are unquoted. For instance, @@ -2130,33 +2135,33 @@ omitted, the operator tests only for existence. a context that doesn't take any enclosing double quotes into account. - Since backslash can escape '&', it can also escape a backslash in - the replacement string. This means that '\\' will insert a literal - backslash into the replacement, so these two 'echo' commands + Since backslash can escape ‘&’, it can also escape a backslash in + the replacement string. This means that ‘\\’ will insert a literal + backslash into the replacement, so these two ‘echo’ commands var=abcdef rep='\\&xyz' echo ${var/abc/\\&xyz} echo ${var/abc/$rep} - will both output '\abcxyzdef'. + will both output ‘\abcxyzdef’. It should rarely be necessary to enclose only STRING in double quotes. - If the 'nocasematch' shell option (see the description of 'shopt' + If the ‘nocasematch’ shell option (see the description of ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. If PARAMETER - is '@' or '*', the substitution operation is applied to each + is ‘@’ or ‘*’, the substitution operation is applied to each positional parameter in turn, and the expansion is the resultant - list. If PARAMETER is an array variable subscripted with '@' or - '*', the substitution operation is applied to each member of the + list. If PARAMETER is an array variable subscripted with ‘@’ or + ‘*’, the substitution operation is applied to each member of the array in turn, and the expansion is the resultant list. -'${PARAMETER^PATTERN}' -'${PARAMETER^^PATTERN}' -'${PARAMETER,PATTERN}' -'${PARAMETER,,PATTERN}' +‘${PARAMETER^PATTERN}’ +‘${PARAMETER^^PATTERN}’ +‘${PARAMETER,PATTERN}’ +‘${PARAMETER,,PATTERN}’ This expansion modifies the case of alphabetic characters in PARAMETER. The PATTERN is expanded to produce a pattern just as in filename expansion. Each character in the expanded value of @@ -2164,68 +2169,69 @@ omitted, the operator tests only for existence. pattern, its case is converted. The pattern should not attempt to match more than one character. - The '^' operator converts lowercase letters matching PATTERN to - uppercase; the ',' operator converts matching uppercase letters to - lowercase. The '^^' and ',,' expansions convert each matched - character in the expanded value; the '^' and ',' expansions match + The ‘^’ operator converts lowercase letters matching PATTERN to + uppercase; the ‘,’ operator converts matching uppercase letters to + lowercase. The ‘^^’ and ‘,,’ expansions convert each matched + character in the expanded value; the ‘^’ and ‘,’ expansions match and convert only the first character in the expanded value. If - PATTERN is omitted, it is treated like a '?', which matches every + PATTERN is omitted, it is treated like a ‘?’, which matches every character. - If PARAMETER is '@' or '*', the case modification operation is + If PARAMETER is ‘@’ or ‘*’, the case modification operation is applied to each positional parameter in turn, and the expansion is the resultant list. If PARAMETER is an array variable subscripted - with '@' or '*', the case modification operation is applied to each + with ‘@’ or ‘*’, the case modification operation is applied to each member of the array in turn, and the expansion is the resultant list. -'${PARAMETER@OPERATOR}' +‘${PARAMETER@OPERATOR}’ The expansion is either a transformation of the value of PARAMETER or information about PARAMETER itself, depending on the value of OPERATOR. Each OPERATOR is a single letter: - 'U' + ‘U’ The expansion is a string that is the value of PARAMETER with lowercase alphabetic characters converted to uppercase. - 'u' + ‘u’ The expansion is a string that is the value of PARAMETER with the first character converted to uppercase, if it is alphabetic. - 'L' + ‘L’ The expansion is a string that is the value of PARAMETER with uppercase alphabetic characters converted to lowercase. - 'Q' + ‘Q’ The expansion is a string that is the value of PARAMETER quoted in a format that can be reused as input. - 'E' + ‘E’ The expansion is a string that is the value of PARAMETER with - backslash escape sequences expanded as with the '$'...'' + backslash escape sequences expanded as with the ‘$'...'’ quoting mechanism. - 'P' + ‘P’ The expansion is a string that is the result of expanding the value of PARAMETER as if it were a prompt string (*note Controlling the Prompt::). - 'A' + ‘A’ The expansion is a string in the form of an assignment - statement or 'declare' command that, if evaluated, will + statement or ‘declare’ command that, if evaluated, will recreate PARAMETER with its attributes and value. - 'K' + ‘K’ Produces a possibly-quoted version of the value of PARAMETER, except that it prints the values of indexed and associative arrays as a sequence of quoted key-value pairs (*note - Arrays::). - 'a' + Arrays::). The keys and values are quoted in a format that + can be reused as input. + ‘a’ The expansion is a string consisting of flag values representing PARAMETER's attributes. - 'k' - Like the 'K' transformation, but expands the keys and values + ‘k’ + Like the ‘K’ transformation, but expands the keys and values of indexed and associative arrays to separate words after word splitting. - If PARAMETER is '@' or '*', the operation is applied to each + If PARAMETER is ‘@’ or ‘*’, the operation is applied to each positional parameter in turn, and the expansion is the resultant - list. If PARAMETER is an array variable subscripted with '@' or - '*', the operation is applied to each member of the array in turn, + list. If PARAMETER is an array variable subscripted with ‘@’ or + ‘*’, the operation is applied to each member of the array in turn, and the expansion is the resultant list. The result of the expansion is subject to word splitting and @@ -2238,30 +2244,77 @@ File: bash.info, Node: Command Substitution, Next: Arithmetic Expansion, Prev -------------------------- Command substitution allows the output of a command to replace the -command itself. Command substitution occurs when a command is enclosed -as follows: +command itself. The standard form of command substitution occurs when a +command is enclosed as follows: $(COMMAND) -or - `COMMAND` +or (deprecated) + `COMMAND`. -Bash performs the expansion by executing COMMAND in a subshell +Bash performs command substitution by executing COMMAND in a subshell environment and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting. -The command substitution '$(cat FILE)' can be replaced by the equivalent -but faster '$(< FILE)'. +The command substitution ‘$(cat FILE)’ can be replaced by the equivalent +but faster ‘$(< FILE)’. - When the old-style backquote form of substitution is used, backslash -retains its literal meaning except when followed by '$', '`', or '\'. -The first backquote not preceded by a backslash terminates the command -substitution. When using the '$(COMMAND)' form, all characters between + With the old-style backquote form of substitution, backslash retains +its literal meaning except when followed by ‘$’, ‘`’, or ‘\’. The first +backquote not preceded by a backslash terminates the command +substitution. When using the ‘$(COMMAND)’ form, all characters between the parentheses make up the command; none are treated specially. + There is an alternate form of command substitution: + + ${C COMMAND; } + +which executes COMMAND in the current execution environment and captures +its output, again with trailing newlines removed. + + The character C following the open brace must be a space, tab, +newline, or ‘|’, and the close brace must be in a position where a +reserved word may appear (i.e., preceded by a command terminator such as +semicolon). Bash allows the close brace to be joined to the remaining +characters in the word without being followed by a shell metacharacter +as a reserved word would usually require. + + Any side effects of COMMAND take effect immediately in the current +execution environment and persist in the current environment after the +command completes (e.g., the ‘exit’ builtin will exit the shell). + + This type of command substitution superficially resembles executing +an unnamed shell function: local variables are created as when a shell +function is executing, and the ‘return’ builtin forces COMMAND to +complete; however, the rest of the execution environment, including the +positional parameters, is shared with the caller. + + If the first character following the open brace is a ‘|’, the +construct expands to the value of the ‘REPLY’ shell variable after +COMMAND executes, without removing any trailing newlines, and the +standard output of COMMAND remains the same as in the calling shell. +Bash creates ‘REPLY’ as an initially-unset local variable when COMMAND +executes, and restores ‘REPLY’ to the value it had before the command +substitution after COMMAND completes, as with any local variable. + + For example, this construct expands to ‘12345’, and leaves the shell +variable ‘X’ unchanged in the current execution environment: + + + ${ local X=12345 ; echo $X; } + +(not declaring ‘X’ as local would modify its value in the current +environment, as with normal shell function execution), while this +construct does not require any output to expand to ‘12345’: + + ${| REPLY=12345; } + +and restores ‘REPLY’ to the value it had before the command +substitution. + Command substitutions may be nested. To nest when using the backquoted form, escape the inner backquotes with backslashes. - If the substitution appears within double quotes, word splitting and -filename expansion are not performed on the results. + If the substitution appears within double quotes, Bash does not +perform word splitting and filename expansion on the results.  File: bash.info, Node: Arithmetic Expansion, Next: Process Substitution, Prev: Command Substitution, Up: Shell Expansions @@ -2300,13 +2353,13 @@ or >(LIST) The process LIST is run asynchronously, and its input or output appears as a filename. This filename is passed as an argument to the current -command as the result of the expansion. If the '>(LIST)' form is used, -writing to the file will provide input for LIST. If the '<(LIST)' form +command as the result of the expansion. If the ‘>(LIST)’ form is used, +writing to the file will provide input for LIST. If the ‘<(LIST)’ form is used, the file passed as an argument should be read to obtain the -output of LIST. Note that no space may appear between the '<' or '>' +output of LIST. Note that no space may appear between the ‘<’ or ‘>’ and the left parenthesis, otherwise the construct would be interpreted as a redirection. Process substitution is supported on systems that -support named pipes (FIFOs) or the '/dev/fd' method of naming open +support named pipes (FIFOs) or the ‘/dev/fd’ method of naming open files. When available, process substitution is performed simultaneously with @@ -2323,30 +2376,34 @@ The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting. - The shell treats each character of '$IFS' as a delimiter, and splits + The shell treats each character of ‘$IFS’ as a delimiter, and splits the results of the other expansions into words using these characters as -field terminators. If 'IFS' is unset, or its value is exactly -'', the default, then sequences of ' ', -'', and '' at the beginning and end of the results of the -previous expansions are ignored, and any sequence of 'IFS' characters -not at the beginning or end serves to delimit words. If 'IFS' has a -value other than the default, then sequences of the whitespace -characters 'space', 'tab', and 'newline' are ignored at the beginning -and end of the word, as long as the whitespace character is in the value -of 'IFS' (an 'IFS' whitespace character). Any character in 'IFS' that -is not 'IFS' whitespace, along with any adjacent 'IFS' whitespace -characters, delimits a field. A sequence of 'IFS' whitespace characters -is also treated as a delimiter. If the value of 'IFS' is null, no word -splitting occurs. - - Explicit null arguments ('""' or '''') are retained and passed to +field terminators. + + If ‘IFS’ is unset, or its value is exactly ‘’, +the default, then sequences of ‘space’, ‘tab’, and ‘newline’ at the +beginning and end of the results of the previous expansions are ignored, +and any sequence of ‘IFS’ characters not at the beginning or end serves +to delimit words. If ‘IFS’ has a value other than the default, then +sequences of the whitespace characters ‘space’, ‘tab’, and ‘newline’ are +ignored at the beginning and end of the word, as long as the whitespace +character is in the value of ‘IFS’ (an ‘IFS’ whitespace character). Any +character in ‘IFS’ that is not ‘IFS’ whitespace, along with any adjacent +‘IFS’ whitespace characters, delimits a field. A sequence of ‘IFS’ +whitespace characters is also treated as a delimiter. + + If the value of ‘IFS’ is null, no word splitting occurs. If ‘IFS’ is +unset, word splitting behaves as if it contained the default value +‘’. + + Explicit null arguments (‘""’ or ‘''’) are retained and passed to commands as empty strings. Unquoted implicit null arguments, resulting from the expansion of parameters that have no values, are removed. If a parameter with no value is expanded within double quotes, a null argument results and is retained and passed to a command as an empty string. When a quoted null argument appears as part of a word whose expansion is non-null, the null argument is removed. That is, the word -'-d''' becomes '-d' after word splitting and null argument removal. +‘-d''’ becomes ‘-d’ after word splitting and null argument removal. Note that if no expansion occurs, no splitting is performed. @@ -2360,26 +2417,26 @@ File: bash.info, Node: Filename Expansion, Next: Quote Removal, Prev: Word Sp * Pattern Matching:: How the shell matches patterns. -After word splitting, unless the '-f' option has been set (*note The Set -Builtin::), Bash scans each word for the characters '*', '?', and '['. +After word splitting, unless the ‘-f’ option has been set (*note The Set +Builtin::), Bash scans each word for the characters ‘*’, ‘?’, and ‘[’. If one of these characters appears, and is not quoted, then the word is regarded as a PATTERN, and replaced with an alphabetically sorted list of filenames matching the pattern (*note Pattern Matching::). If no -matching filenames are found, and the shell option 'nullglob' is -disabled, the word is left unchanged. If the 'nullglob' option is set, -and no matches are found, the word is removed. If the 'failglob' shell +matching filenames are found, and the shell option ‘nullglob’ is +disabled, the word is left unchanged. If the ‘nullglob’ option is set, +and no matches are found, the word is removed. If the ‘failglob’ shell option is set, and no matches are found, an error message is printed and -the command is not executed. If the shell option 'nocaseglob' is +the command is not executed. If the shell option ‘nocaseglob’ is enabled, the match is performed without regard to the case of alphabetic characters. - When a pattern is used for filename expansion, the character '.' at + When a pattern is used for filename expansion, the character ‘.’ at the start of a filename or immediately following a slash must be matched -explicitly, unless the shell option 'dotglob' is set. In order to match -the filenames '.' and '..', the pattern must begin with '.' (for -example, '.?'), even if 'dotglob' is set. If the 'globskipdots' shell -option is enabled, the filenames '.' and '..' are never matched, even if -the pattern begins with a '.'. When not matching filenames, the '.' +explicitly, unless the shell option ‘dotglob’ is set. In order to match +the filenames ‘.’ and ‘..’, the pattern must begin with ‘.’ (for +example, ‘.?’), even if ‘dotglob’ is set. If the ‘globskipdots’ shell +option is enabled, the filenames ‘.’ and ‘..’ never match, even if the +pattern begins with a ‘.’. When not matching filenames, the ‘.’ character is not treated specially. When matching a filename, the slash character must always be matched @@ -2387,22 +2444,26 @@ explicitly by a slash in the pattern, but in other matching contexts it can be matched by a special pattern character as described below (*note Pattern Matching::). - See the description of 'shopt' in *note The Shopt Builtin::, for a -description of the 'nocaseglob', 'nullglob', 'globskipdots', 'failglob', -and 'dotglob' options. + See the description of ‘shopt’ in *note The Shopt Builtin::, for a +description of the ‘nocaseglob’, ‘nullglob’, ‘globskipdots’, ‘failglob’, +and ‘dotglob’ options. - The 'GLOBIGNORE' shell variable may be used to restrict the set of -file names matching a pattern. If 'GLOBIGNORE' is set, each matching -file name that also matches one of the patterns in 'GLOBIGNORE' is -removed from the list of matches. If the 'nocaseglob' option is set, -the matching against the patterns in 'GLOBIGNORE' is performed without -regard to case. The filenames '.' and '..' are always ignored when -'GLOBIGNORE' is set and not null. However, setting 'GLOBIGNORE' to a -non-null value has the effect of enabling the 'dotglob' shell option, so -all other filenames beginning with a '.' will match. To get the old -behavior of ignoring filenames beginning with a '.', make '.*' one of -the patterns in 'GLOBIGNORE'. The 'dotglob' option is disabled when -'GLOBIGNORE' is unset. + The ‘GLOBIGNORE’ shell variable may be used to restrict the set of +file names matching a pattern. If ‘GLOBIGNORE’ is set, each matching +file name that also matches one of the patterns in ‘GLOBIGNORE’ is +removed from the list of matches. If the ‘nocaseglob’ option is set, +the matching against the patterns in ‘GLOBIGNORE’ is performed without +regard to case. The filenames ‘.’ and ‘..’ are always ignored when +‘GLOBIGNORE’ is set and not null. However, setting ‘GLOBIGNORE’ to a +non-null value has the effect of enabling the ‘dotglob’ shell option, so +all other filenames beginning with a ‘.’ will match. To get the old +behavior of ignoring filenames beginning with a ‘.’, make ‘.*’ one of +the patterns in ‘GLOBIGNORE’. The ‘dotglob’ option is disabled when +‘GLOBIGNORE’ is unset. + + After the pattern is expanded and matched against filenames, the +value of the ‘GLOBSORT’ variable controls how the results are sorted, as +described below (*note Bash Variables::).  File: bash.info, Node: Pattern Matching, Up: Filename Expansion @@ -2417,91 +2478,91 @@ escaping backslash is discarded when matching. The special pattern characters must be quoted if they are to be matched literally. The special pattern characters have the following meanings: -'*' - Matches any string, including the null string. When the 'globstar' - shell option is enabled, and '*' is used in a filename expansion - context, two adjacent '*'s used as a single pattern will match all +‘*’ + Matches any string, including the null string. When the ‘globstar’ + shell option is enabled, and ‘*’ is used in a filename expansion + context, two adjacent ‘*’s used as a single pattern will match all files and zero or more directories and subdirectories. If followed - by a '/', two adjacent '*'s will match only directories and + by a ‘/’, two adjacent ‘*’s will match only directories and subdirectories. -'?' +‘?’ Matches any single character. -'[...]' +‘[...]’ Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a RANGE EXPRESSION; any character that falls between those two characters, inclusive, using the current locale's collating sequence and character set, is matched. - If the first character following the '[' is a '!' or a '^' then any - character not enclosed is matched. A '-' may be matched by - including it as the first or last character in the set. A ']' may + If the first character following the ‘[’ is a ‘!’ or a ‘^’ then any + character not enclosed is matched. A ‘−’ may be matched by + including it as the first or last character in the set. A ‘]’ may be matched by including it as the first character in the set. The sorting order of characters in range expressions, and the characters included in the range, are determined by the current - locale and the values of the 'LC_COLLATE' and 'LC_ALL' shell + locale and the values of the ‘LC_COLLATE’ and ‘LC_ALL’ shell variables, if set. - For example, in the default C locale, '[a-dx-z]' is equivalent to - '[abcdxyz]'. Many locales sort characters in dictionary order, and - in these locales '[a-dx-z]' is typically not equivalent to - '[abcdxyz]'; it might be equivalent to '[aBbCcDdxYyZz]', for + For example, in the default C locale, ‘[a-dx-z]’ is equivalent to + ‘[abcdxyz]’. Many locales sort characters in dictionary order, and + in these locales ‘[a-dx-z]’ is typically not equivalent to + ‘[abcdxyz]’; it might be equivalent to ‘[aBbCcDdxYyZz]’, for example. To obtain the traditional interpretation of ranges in bracket expressions, you can force the use of the C locale by - setting the 'LC_COLLATE' or 'LC_ALL' environment variable to the - value 'C', or enable the 'globasciiranges' shell option. + setting the ‘LC_COLLATE’ or ‘LC_ALL’ environment variable to the + value ‘C’, or enable the ‘globasciiranges’ shell option. - Within '[' and ']', "character classes" can be specified using the - syntax '[:'CLASS':]', where CLASS is one of the following classes + Within ‘[’ and ‘]’, “character classes” can be specified using the + syntax ‘[:’CLASS‘:]’, where CLASS is one of the following classes defined in the POSIX standard: alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit A character class matches any character belonging to that class. - The 'word' character class matches letters, digits, and the - character '_'. + The ‘word’ character class matches letters, digits, and the + character ‘_’. - Within '[' and ']', an "equivalence class" can be specified using - the syntax '[='C'=]', which matches all characters with the same + Within ‘[’ and ‘]’, an “equivalence class” can be specified using + the syntax ‘[=’C‘=]’, which matches all characters with the same collation weight (as defined by the current locale) as the character C. - Within '[' and ']', the syntax '[.'SYMBOL'.]' matches the collating + Within ‘[’ and ‘]’, the syntax ‘[.’SYMBOL‘.]’ matches the collating symbol SYMBOL. - If the 'extglob' shell option is enabled using the 'shopt' builtin, + If the ‘extglob’ shell option is enabled using the ‘shopt’ builtin, the shell recognizes several extended pattern matching operators. In the following description, a PATTERN-LIST is a list of one or more -patterns separated by a '|'. When matching filenames, the 'dotglob' +patterns separated by a ‘|’. When matching filenames, the ‘dotglob’ shell option determines the set of filenames that are tested, as described above. Composite patterns may be formed using one or more of the following sub-patterns: -'?(PATTERN-LIST)' +‘?(PATTERN-LIST)’ Matches zero or one occurrence of the given patterns. -'*(PATTERN-LIST)' +‘*(PATTERN-LIST)’ Matches zero or more occurrences of the given patterns. -'+(PATTERN-LIST)' +‘+(PATTERN-LIST)’ Matches one or more occurrences of the given patterns. -'@(PATTERN-LIST)' +‘@(PATTERN-LIST)’ Matches one of the given patterns. -'!(PATTERN-LIST)' +‘!(PATTERN-LIST)’ Matches anything except one of the given patterns. - The 'extglob' option changes the behavior of the parser, since the + The ‘extglob’ option changes the behavior of the parser, since the parentheses are normally treated as operators with syntactic meaning. To ensure that extended matching patterns are parsed correctly, make -sure that 'extglob' is enabled before parsing constructs containing the +sure that ‘extglob’ is enabled before parsing constructs containing the patterns, including shell functions and command substitutions. - When matching filenames, the 'dotglob' shell option determines the -set of filenames that are tested: when 'dotglob' is enabled, the set of -filenames includes all files beginning with '.', but the filenames '.' -and '..' must be matched by a pattern or sub-pattern that begins with a + When matching filenames, the ‘dotglob’ shell option determines the +set of filenames that are tested: when ‘dotglob’ is enabled, the set of +filenames includes all files beginning with ‘.’, but the filenames ‘.’ +and ‘..’ must be matched by a pattern or sub-pattern that begins with a dot; when it is disabled, the set does not include any filenames -beginning with "." unless the pattern or sub-pattern begins with a '.'. -As above, '.' only has a special meaning when matching filenames. +beginning with "." unless the pattern or sub-pattern begins with a ‘.’. +As above, ‘.’ only has a special meaning when matching filenames. Complicated extended pattern matching against long strings is slow, especially when the patterns contain alternations and the strings @@ -2516,7 +2577,7 @@ File: bash.info, Node: Quote Removal, Prev: Filename Expansion, Up: Shell Exp ------------------- After the preceding expansions, all unquoted occurrences of the -characters '\', ''', and '"' that did not result from one of the above +characters ‘\’, ‘'’, and ‘"’ that did not result from one of the above expansions are removed.  @@ -2525,8 +2586,8 @@ File: bash.info, Node: Redirections, Next: Executing Commands, Prev: Shell Ex 3.6 Redirections ================ -Before a command is executed, its input and output may be "redirected" -using a special notation interpreted by the shell. "Redirection" allows +Before a command is executed, its input and output may be “redirected” +using a special notation interpreted by the shell. “Redirection” allows commands' file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. Redirection may also be used to modify file handles in the @@ -2542,13 +2603,13 @@ file descriptor greater than 10 and assign it to {VARNAME}. If >&- or <&- is preceded by {VARNAME}, the value of VARNAME defines the file descriptor to close. If {VARNAME} is supplied, the redirection persists beyond the scope of the command, allowing the shell programmer to manage -the file descriptor's lifetime manually. The 'varredir_close' shell +the file descriptor's lifetime manually. The ‘varredir_close’ shell option manages this behavior (*note The Shopt Builtin::). In the following descriptions, if the file descriptor number is -omitted, and the first character of the redirection operator is '<', the +omitted, and the first character of the redirection operator is ‘<’, the redirection refers to the standard input (file descriptor 0). If the -first character of the redirection operator is '>', the redirection +first character of the redirection operator is ‘>’, the redirection refers to the standard output (file descriptor 1). The word following the redirection operator in the following @@ -2569,28 +2630,28 @@ was redirected to DIRLIST. Bash handles several filenames specially when they are used in redirections, as described in the following table. If the operating -system on which Bash is running provides these special files, bash will +system on which Bash is running provides these special files, Bash will use them; otherwise it will emulate them internally with the behavior described below. -'/dev/fd/FD' +‘/dev/fd/FD’ If FD is a valid integer, file descriptor FD is duplicated. -'/dev/stdin' +‘/dev/stdin’ File descriptor 0 is duplicated. -'/dev/stdout' +‘/dev/stdout’ File descriptor 1 is duplicated. -'/dev/stderr' +‘/dev/stderr’ File descriptor 2 is duplicated. -'/dev/tcp/HOST/PORT' +‘/dev/tcp/HOST/PORT’ If HOST is a valid hostname or Internet address, and PORT is an integer port number or service name, Bash attempts to open the corresponding TCP socket. -'/dev/udp/HOST/PORT' +‘/dev/udp/HOST/PORT’ If HOST is a valid hostname or Internet address, and PORT is an integer port number or service name, Bash attempts to open the corresponding UDP socket. @@ -2605,8 +2666,8 @@ internally. ----------------------- Redirection of input causes the file whose name results from the -expansion of WORD to be opened for reading on file descriptor 'n', or -the standard input (file descriptor 0) if 'n' is not specified. +expansion of WORD to be opened for reading on file descriptor ‘n’, or +the standard input (file descriptor 0) if ‘n’ is not specified. The general format for redirecting input is: [N][|]WORD - If the redirection operator is '>', and the 'noclobber' option to the -'set' builtin has been enabled, the redirection will fail if the file + If the redirection operator is ‘>’, and the ‘noclobber’ option to the +‘set’ builtin has been enabled, the redirection will fail if the file whose name results from the expansion of WORD exists and is a regular -file. If the redirection operator is '>|', or the redirection operator -is '>' and the 'noclobber' option is not enabled, the redirection is +file. If the redirection operator is ‘>|’, or the redirection operator +is ‘>’ and the ‘noclobber’ option is not enabled, the redirection is attempted even if the file named by WORD exists. 3.6.3 Appending Redirected Output @@ -2656,7 +2717,7 @@ and Of the two forms, the first is preferred. This is semantically equivalent to >WORD 2>&1 - When using the second form, WORD may not expand to a number or '-'. + When using the second form, WORD may not expand to a number or ‘-’. If it does, other redirection operators apply (see Duplicating File Descriptors below) for compatibility reasons. @@ -2677,26 +2738,28 @@ This is semantically equivalent to -------------------- This type of redirection instructs the shell to read input from the -current source until a line containing only WORD (with no trailing -blanks) is seen. All of the lines read up to that point are then used +current source until it reads a line containing only DELIMITER (with no +trailing blanks). All of the lines read up to that point are then used as the standard input (or file descriptor N if N is specified) for a command. The format of here-documents is: - [N]<<[-]WORD + [N]<<[−]WORD HERE-DOCUMENT DELIMITER No parameter and variable expansion, command substitution, arithmetic -expansion, or filename expansion is performed on WORD. If any part of -WORD is quoted, the DELIMITER is the result of quote removal on WORD, -and the lines in the here-document are not expanded. If WORD is -unquoted, all lines of the here-document are subjected to parameter -expansion, command substitution, and arithmetic expansion, the character -sequence '\newline' is ignored, and '\' must be used to quote the -characters '\', '$', and '`'. - - If the redirection operator is '<<-', then all leading tab characters +expansion, or filename expansion is performed on WORD. + + If any part of WORD is quoted, the DELIMITER is the result of quote +removal on WORD, and the lines in the here-document are not expanded. +If WORD is unquoted, DELIMITER is WORD itself, all lines of the +here-document are subjected to parameter expansion, command +substitution, and arithmetic expansion, the character sequence +‘\newline’ is ignored, and ‘\’ must be used to quote the characters ‘\’, +‘$’, and ‘`’. + + If the redirection operator is ‘<<-’, then all leading tab characters are stripped from input lines and the line containing DELIMITER. This allows here-documents within shell scripts to be indented in a natural fashion. @@ -2722,7 +2785,7 @@ is used to duplicate input file descriptors. If WORD expands to one or more digits, the file descriptor denoted by N is made to be a copy of that file descriptor. If the digits in WORD do not specify a file descriptor open for input, a redirection error occurs. If WORD -evaluates to '-', file descriptor N is closed. If N is not specified, +evaluates to ‘-’, file descriptor N is closed. If N is not specified, the standard input (file descriptor 0) is used. The operator @@ -2730,9 +2793,9 @@ the standard input (file descriptor 0) is used. is used similarly to duplicate output file descriptors. If N is not specified, the standard output (file descriptor 1) is used. If the digits in WORD do not specify a file descriptor open for output, a -redirection error occurs. If WORD evaluates to '-', file descriptor N +redirection error occurs. If WORD evaluates to ‘-’, file descriptor N is closed. As a special case, if N is omitted, and WORD does not expand -to one or more digits or '-', the standard output and standard error are +to one or more digits or ‘-’, the standard output and standard error are redirected as described previously. 3.6.9 Moving File Descriptors @@ -2800,7 +2863,7 @@ following order. 3. Redirections are performed as described above (*note Redirections::). - 4. The text after the '=' in each variable assignment undergoes tilde + 4. The text after the ‘=’ in each variable assignment undergoes tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal before being assigned to the variable. @@ -2831,8 +2894,8 @@ File: bash.info, Node: Command Search and Execution, Next: Command Execution E ---------------------------------- After a command has been split into words, if it results in a simple -command and an optional list of arguments, the following actions are -taken. +command and an optional list of arguments, the shell performs the +following actions. 1. If the command name contains no slashes, the shell attempts to locate it. If there exists a shell function by that name, that @@ -2843,14 +2906,14 @@ taken. invoked. 3. If the name is neither a shell function nor a builtin, and contains - no slashes, Bash searches each element of '$PATH' for a directory + no slashes, Bash searches each element of ‘$PATH’ for a directory containing an executable file by that name. Bash uses a hash table to remember the full pathnames of executable files to avoid - multiple 'PATH' searches (see the description of 'hash' in *note + multiple ‘PATH’ searches (see the description of ‘hash’ in *note Bourne Shell Builtins::). A full search of the directories in - '$PATH' is performed only if the command is not found in the hash + ‘$PATH’ is performed only if the command is not found in the hash table. If the search is unsuccessful, the shell searches for a - defined shell function named 'command_not_found_handle'. If that + defined shell function named ‘command_not_found_handle’. If that function exists, it is invoked in a separate execution environment with the original command and the original command's arguments as its arguments, and the function's exit status becomes the exit @@ -2865,7 +2928,7 @@ taken. 5. If this execution fails because the file is not in executable format, and the file is not a directory, it is assumed to be a - "shell script" and the shell executes it as described in *note + “shell script” and the shell executes it as described in *note Shell Scripts::. 6. If the command was not begun asynchronously, the shell waits for @@ -2877,59 +2940,59 @@ File: bash.info, Node: Command Execution Environment, Next: Environment, Prev 3.7.3 Command Execution Environment ----------------------------------- -The shell has an "execution environment", which consists of the +The shell has an “execution environment”, which consists of the following: - * open files inherited by the shell at invocation, as modified by - redirections supplied to the 'exec' builtin + • open files inherited by the shell at invocation, as modified by + redirections supplied to the ‘exec’ builtin - * the current working directory as set by 'cd', 'pushd', or 'popd', + • the current working directory as set by ‘cd’, ‘pushd’, or ‘popd’, or inherited by the shell at invocation - * the file creation mode mask as set by 'umask' or inherited from the + • the file creation mode mask as set by ‘umask’ or inherited from the shell's parent - * current traps set by 'trap' + • current traps set by ‘trap’ - * shell parameters that are set by variable assignment or with 'set' + • shell parameters that are set by variable assignment or with ‘set’ or inherited from the shell's parent in the environment - * shell functions defined during execution or inherited from the + • shell functions defined during execution or inherited from the shell's parent in the environment - * options enabled at invocation (either by default or with - command-line arguments) or by 'set' + • options enabled at invocation (either by default or with + command-line arguments) or by ‘set’ - * options enabled by 'shopt' (*note The Shopt Builtin::) + • options enabled by ‘shopt’ (*note The Shopt Builtin::) - * shell aliases defined with 'alias' (*note Aliases::) + • shell aliases defined with ‘alias’ (*note Aliases::) - * various process IDs, including those of background jobs (*note - Lists::), the value of '$$', and the value of '$PPID' + • various process IDs, including those of background jobs (*note + Lists::), the value of ‘$$’, and the value of ‘$PPID’ When a simple command other than a builtin or shell function is to be executed, it is invoked in a separate execution environment that consists of the following. Unless otherwise noted, the values are inherited from the shell. - * the shell's open files, plus any modifications and additions + • the shell's open files, plus any modifications and additions specified by redirections to the command - * the current working directory + • the current working directory - * the file creation mode mask + • the file creation mode mask - * shell variables and functions marked for export, along with + • shell variables and functions marked for export, along with variables exported for the command, passed in the environment (*note Environment::) - * traps caught by the shell are reset to the values inherited from + • traps caught by the shell are reset to the values inherited from the shell's parent, and traps ignored by the shell are ignored A command invoked in this separate environment cannot affect the shell's execution environment. - A "subshell" is a copy of the shell process. + A “subshell” is a copy of the shell process. Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a subshell environment that is a @@ -2939,12 +3002,15 @@ at invocation. Builtin commands that are invoked as part of a pipeline are also executed in a subshell environment. Changes made to the subshell environment cannot affect the shell's execution environment. - Subshells spawned to execute command substitutions inherit the value -of the '-e' option from the parent shell. When not in POSIX mode, Bash -clears the '-e' option in such subshells. + When the shell is in POSIX mode, subshells spawned to execute command +substitutions inherit the value of the ‘-e’ option from the parent +shell. When not in POSIX mode, Bash clears the ‘-e’ option in such +subshells See the description of the ‘inherit_errexit’ shell option +(*note Bash Builtins::) for how to control this behavior when not in +POSIX mode. - If a command is followed by a '&' and job control is not active, the -default standard input for the command is the empty file '/dev/null'. + If a command is followed by a ‘&’ and job control is not active, the +default standard input for the command is the empty file ‘/dev/null’. Otherwise, the invoked command inherits the file descriptors of the calling shell as modified by redirections. @@ -2955,20 +3021,20 @@ File: bash.info, Node: Environment, Next: Exit Status, Prev: Command Executio ----------------- When a program is invoked it is given an array of strings called the -"environment". This is a list of name-value pairs, of the form -'name=value'. +“environment”. This is a list of name-value pairs, of the form +‘name=value’. Bash provides several ways to manipulate the environment. On invocation, the shell scans its own environment and creates a parameter -for each name found, automatically marking it for 'export' to child -processes. Executed commands inherit the environment. The 'export' and -'declare -x' commands allow parameters and functions to be added to and +for each name found, automatically marking it for ‘export’ to child +processes. Executed commands inherit the environment. The ‘export’ and +‘declare -x’ commands allow parameters and functions to be added to and deleted from the environment. If the value of a parameter in the environment is modified, the new value becomes part of the environment, replacing the old. The environment inherited by any executed command consists of the shell's initial environment, whose values may be -modified in the shell, less any pairs removed by the 'unset' and 'export --n' commands, plus any additions via the 'export' and 'declare -x' +modified in the shell, less any pairs removed by the ‘unset’ and ‘export +-n’ commands, plus any additions via the ‘export’ and ‘declare -x’ commands. The environment for any simple command or function may be augmented @@ -2976,11 +3042,11 @@ temporarily by prefixing it with parameter assignments, as described in *note Shell Parameters::. These assignment statements affect only the environment seen by that command. - If the '-k' option is set (*note The Set Builtin::), then all + If the ‘-k’ option is set (*note The Set Builtin::), then all parameter assignments are placed in the environment for a command, not just those that precede the command name. - When Bash invokes an external command, the variable '$_' is set to + When Bash invokes an external command, the variable ‘$_’ is set to the full pathname of the command and passed to that command in its environment. @@ -2991,7 +3057,7 @@ File: bash.info, Node: Exit Status, Next: Signals, Prev: Environment, Up: Ex ----------------- The exit status of an executed command is the value returned by the -'waitpid' system call or equivalent function. Exit statuses fall +‘waitpid’ system call or equivalent function. Exit statuses fall between 0 and 255, though, as explained below, the shell may use values above 125 specially. Exit statuses from shell builtins and compound commands are also limited to this range. Under certain circumstances, @@ -3031,63 +3097,63 @@ File: bash.info, Node: Signals, Prev: Exit Status, Up: Executing Commands ------------- When Bash is interactive, in the absence of any traps, it ignores -'SIGTERM' (so that 'kill 0' does not kill an interactive shell), and -'SIGINT' is caught and handled (so that the 'wait' builtin is -interruptible). When Bash receives a 'SIGINT', it breaks out of any -executing loops. In all cases, Bash ignores 'SIGQUIT'. If job control -is in effect (*note Job Control::), Bash ignores 'SIGTTIN', 'SIGTTOU', -and 'SIGTSTP'. +‘SIGTERM’ (so that ‘kill 0’ does not kill an interactive shell), and +‘SIGINT’ is caught and handled (so that the ‘wait’ builtin is +interruptible). When Bash receives a ‘SIGINT’, it breaks out of any +executing loops. In all cases, Bash ignores ‘SIGQUIT’. If job control +is in effect (*note Job Control::), Bash ignores ‘SIGTTIN’, ‘SIGTTOU’, +and ‘SIGTSTP’. Non-builtin commands started by Bash have signal handlers set to the values inherited by the shell from its parent. When job control is not -in effect, asynchronous commands ignore 'SIGINT' and 'SIGQUIT' in +in effect, asynchronous commands ignore ‘SIGINT’ and ‘SIGQUIT’ in addition to these inherited handlers. Commands run as a result of command substitution ignore the keyboard-generated job control signals -'SIGTTIN', 'SIGTTOU', and 'SIGTSTP'. +‘SIGTTIN’, ‘SIGTTOU’, and ‘SIGTSTP’. - The shell exits by default upon receipt of a 'SIGHUP'. Before -exiting, an interactive shell resends the 'SIGHUP' to all jobs, running -or stopped. Stopped jobs are sent 'SIGCONT' to ensure that they receive -the 'SIGHUP'. To prevent the shell from sending the 'SIGHUP' signal to + The shell exits by default upon receipt of a ‘SIGHUP’. Before +exiting, an interactive shell resends the ‘SIGHUP’ to all jobs, running +or stopped. Stopped jobs are sent ‘SIGCONT’ to ensure that they receive +the ‘SIGHUP’. To prevent the shell from sending the ‘SIGHUP’ signal to a particular job, it should be removed from the jobs table with the -'disown' builtin (*note Job Control Builtins::) or marked to not receive -'SIGHUP' using 'disown -h'. +‘disown’ builtin (*note Job Control Builtins::) or marked to not receive +‘SIGHUP’ using ‘disown -h’. - If the 'huponexit' shell option has been set with 'shopt' (*note The -Shopt Builtin::), Bash sends a 'SIGHUP' to all jobs when an interactive + If the ‘huponexit’ shell option has been set with ‘shopt’ (*note The +Shopt Builtin::), Bash sends a ‘SIGHUP’ to all jobs when an interactive login shell exits. 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' builtin, the reception of a signal for which a trap has been -set will cause the 'wait' builtin to return immediately with an exit +the ‘wait’ builtin, the reception of a signal for which a trap has been +set will cause the ‘wait’ builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed. When job control is not enabled, and Bash is waiting for a foreground command to complete, the shell receives keyboard-generated signals such -as 'SIGINT' (usually generated by '^C') that users commonly intend to +as ‘SIGINT’ (usually generated by ‘^C’) that users commonly intend to send to that command. This happens because the shell and the command -are in the same process group as the terminal, and '^C' sends 'SIGINT' +are in the same process group as the terminal, and ‘^C’ sends ‘SIGINT’ to all processes in that process group. See *note Job Control::, for a more in-depth discussion of process groups. When Bash is running without job control enabled and receives -'SIGINT' while waiting for a foreground command, it waits until that +‘SIGINT’ while waiting for a foreground command, it waits until that foreground command terminates and then decides what to do about the -'SIGINT': +‘SIGINT’: - 1. If the command terminates due to the 'SIGINT', Bash concludes that - the user meant to end the entire script, and acts on the 'SIGINT' - (e.g., by running a 'SIGINT' trap or exiting itself); + 1. If the command terminates due to the ‘SIGINT’, Bash concludes that + the user meant to end the entire script, and acts on the ‘SIGINT’ + (e.g., by running a ‘SIGINT’ trap or exiting itself); - 2. If the pipeline does not terminate due to 'SIGINT', the program - handled the 'SIGINT' itself and did not treat it as a fatal signal. - In that case, Bash does not treat 'SIGINT' as a fatal signal, - either, instead assuming that the 'SIGINT' was used as part of the - program's normal operation (e.g., 'emacs' uses it to abort editing + 2. If the pipeline does not terminate due to ‘SIGINT’, the program + handled the ‘SIGINT’ itself and did not treat it as a fatal signal. + In that case, Bash does not treat ‘SIGINT’ as a fatal signal, + either, instead assuming that the ‘SIGINT’ was used as part of the + program's normal operation (e.g., ‘emacs’ uses it to abort editing commands) or deliberately discarded. However, Bash will run any - trap set on 'SIGINT', as it does with any other trapped signal it + trap set on ‘SIGINT’, as it does with any other trapped signal it receives while it is waiting for the foreground command to complete, for compatibility. @@ -3099,38 +3165,38 @@ File: bash.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic She A shell script is a text file containing shell commands. When such a file is used as the first non-option argument when invoking Bash, and -neither the '-c' nor '-s' option is supplied (*note Invoking Bash::), +neither the ‘-c’ nor ‘-s’ option is supplied (*note Invoking Bash::), Bash reads and executes commands from the file, then exits. This mode of operation creates a non-interactive shell. The shell first searches for the file in the current directory, and looks in the directories in -'$PATH' if not found there. +‘$PATH’ if not found there. - When Bash runs a shell script, it sets the special parameter '0' to + When Bash runs a shell script, it sets the special parameter ‘0’ to the name of the file, rather than the name of the shell, and the positional parameters are set to the remaining arguments, if any are given. If no additional arguments are supplied, the positional parameters are unset. - A shell script may be made executable by using the 'chmod' command to + A shell script may be made executable by using the ‘chmod’ command to turn on the execute bit. When Bash finds such a file while searching -the '$PATH' for a command, it creates a new instance of itself to +the ‘$PATH’ for a command, it creates a new instance of itself to execute it. In other words, executing filename ARGUMENTS is equivalent to executing bash filename ARGUMENTS -if 'filename' is an executable shell script. This subshell +if ‘filename’ is an executable shell script. This subshell reinitializes itself, so that the effect is as if a new shell had been invoked to interpret the script, with the exception that the locations -of commands remembered by the parent (see the description of 'hash' in +of commands remembered by the parent (see the description of ‘hash’ in *note Bourne Shell Builtins::) are retained by the child. Most versions of Unix make this a part of the operating system's command execution mechanism. If the first line of a script begins with -the two characters '#!', the remainder of the line specifies an +the two characters ‘#!’, the remainder of the line specifies an interpreter for the program and, depending on the operating system, one or more optional arguments for that interpreter. Thus, you can specify -Bash, 'awk', Perl, or some other interpreter and write the rest of the +Bash, ‘awk’, Perl, or some other interpreter and write the rest of the script file in that language. The arguments to the interpreter consist of one or more optional @@ -3144,12 +3210,12 @@ older versions of Unix limit the interpreter name and a single argument to a maximum of 32 characters, so it's not portable to assume that using more than one argument will work. - Bash scripts often begin with '#! /bin/bash' (assuming that Bash has -been installed in '/bin'), since this ensures that Bash will be used to + Bash scripts often begin with ‘#! /bin/bash’ (assuming that Bash has +been installed in ‘/bin’), since this ensures that Bash will be used to interpret the script, even if it is executed under another shell. It's -a common idiom to use 'env' to find 'bash' even if it's been installed -in another directory: '#!/usr/bin/env bash' will find the first -occurrence of 'bash' in '$PATH'. +a common idiom to use ‘env’ to find ‘bash’ even if it's been installed +in another directory: ‘#!/usr/bin/env bash’ will find the first +occurrence of ‘bash’ in ‘$PATH’.  File: bash.info, Node: Shell Builtin Commands, Next: Shell Variables, Prev: Basic Shell Features, Up: Top @@ -3188,14 +3254,14 @@ Completion Builtins::). Many of the builtins have been extended by POSIX or Bash. Unless otherwise noted, each builtin command documented as accepting -options preceded by '-' accepts '--' to signify the end of the options. -The ':', 'true', 'false', and 'test'/'[' builtins do not accept options -and do not treat '--' specially. The 'exit', 'logout', 'return', -'break', 'continue', 'let', and 'shift' builtins accept and process -arguments beginning with '-' without requiring '--'. Other builtins +options preceded by ‘-’ accepts ‘--’ to signify the end of the options. +The ‘:’, ‘true’, ‘false’, and ‘test’/‘[’ builtins do not accept options +and do not treat ‘--’ specially. The ‘exit’, ‘logout’, ‘return’, +‘break’, ‘continue’, ‘let’, and ‘shift’ builtins accept and process +arguments beginning with ‘-’ without requiring ‘--’. Other builtins that accept arguments but are not specified as accepting options -interpret arguments beginning with '-' as invalid options and require -'--' to prevent this interpretation. +interpret arguments beginning with ‘-’ as invalid options and require +‘--’ to prevent this interpretation.  File: bash.info, Node: Bourne Shell Builtins, Next: Bash Builtins, Up: Shell Builtin Commands @@ -3207,302 +3273,312 @@ The following shell builtin commands are inherited from the Bourne Shell. These commands are implemented as specified by the POSIX standard. -': (a colon)' +‘: (a colon)’ : [ARGUMENTS] Do nothing beyond expanding ARGUMENTS and performing redirections. The return status is zero. -'. (a period)' +‘. (a period)’ . FILENAME [ARGUMENTS] Read and execute commands from the FILENAME argument in the current - shell context. If FILENAME does not contain a slash, the 'PATH' + shell context. If FILENAME does not contain a slash, the ‘PATH’ variable is used to find FILENAME, but FILENAME does not need to be executable. When Bash is not in POSIX mode, it searches the - current directory if FILENAME is not found in '$PATH'. If any + current directory if FILENAME is not found in ‘$PATH’. If any ARGUMENTS are supplied, they become the positional parameters when FILENAME is executed. Otherwise the positional parameters are - unchanged. If the '-T' option is enabled, '.' inherits any trap on - 'DEBUG'; if it is not, any 'DEBUG' trap string is saved and - restored around the call to '.', and '.' unsets the 'DEBUG' trap - while it executes. If '-T' is not set, and the sourced file - changes the 'DEBUG' trap, the new value is retained when '.' + unchanged. If the ‘-T’ option is enabled, ‘.’ inherits any trap on + ‘DEBUG’; if it is not, any ‘DEBUG’ trap string is saved and + restored around the call to ‘.’, and ‘.’ unsets the ‘DEBUG’ trap + while it executes. If ‘-T’ is not set, and the sourced file + changes the ‘DEBUG’ trap, the new value is retained when ‘.’ completes. The return status is the exit status of the last command executed, or zero if no commands are executed. If FILENAME is not found, or cannot be read, the return status is non-zero. - This builtin is equivalent to 'source'. + This builtin is equivalent to ‘source’. -'break' +‘break’ break [N] - Exit from a 'for', 'while', 'until', or 'select' loop. If N is + Exit from a ‘for’, ‘while’, ‘until’, or ‘select’ loop. If N is supplied, the Nth enclosing loop is exited. N must be greater than or equal to 1. The return status is zero unless N is not greater than or equal to 1. -'cd' - cd [-L|[-P [-e]] [-@] [DIRECTORY] +‘cd’ + cd [-L|[-P [-e]]] [-@] [DIRECTORY] Change the current working directory to DIRECTORY. If DIRECTORY is - not supplied, the value of the 'HOME' shell variable is used. If - the shell variable 'CDPATH' exists, it is used as a search path: - each directory name in 'CDPATH' is searched for DIRECTORY, with - alternative directory names in 'CDPATH' separated by a colon (':'). - If DIRECTORY begins with a slash, 'CDPATH' is not used. - - The '-P' option means to not follow symbolic links: symbolic links - are resolved while 'cd' is traversing DIRECTORY and before - processing an instance of '..' in DIRECTORY. - - By default, or when the '-L' option is supplied, symbolic links in - DIRECTORY are resolved after 'cd' processes an instance of '..' in + not supplied, the value of the ‘HOME’ shell variable is used. If + the shell variable ‘CDPATH’ exists, ‘cd’ uses it as a search path: + ‘cd’ searches each directory name in ‘CDPATH’ for DIRECTORY, with + alternative directory names in ‘CDPATH’ separated by a colon (‘:’). + If DIRECTORY begins with a slash, ‘CDPATH’ is not used. + + The ‘-P’ option means to not follow symbolic links: symbolic links + are resolved while ‘cd’ is traversing DIRECTORY and before + processing an instance of ‘..’ in DIRECTORY. + + By default, or when the ‘-L’ option is supplied, symbolic links in + DIRECTORY are resolved after ‘cd’ processes an instance of ‘..’ in DIRECTORY. - If '..' appears in DIRECTORY, it is processed by removing the + If ‘..’ appears in DIRECTORY, it is processed by removing the immediately preceding pathname component, back to a slash or the beginning of DIRECTORY. - If the '-e' option is supplied with '-P' and the current working + If the ‘-e’ option is supplied with ‘-P’ and the current working directory cannot be successfully determined after a successful - directory change, 'cd' will return an unsuccessful status. + directory change, ‘cd’ will return an unsuccessful status. - On systems that support it, the '-@' option presents the extended + On systems that support it, the ‘-@’ option presents the extended attributes associated with a file as a directory. - If DIRECTORY is '-', it is converted to '$OLDPWD' before the + If DIRECTORY is ‘-’, it is converted to ‘$OLDPWD’ before the directory change is attempted. - If a non-empty directory name from 'CDPATH' is used, or if '-' is + If a non-empty directory name from ‘CDPATH’ is used, or if ‘-’ is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output. - If the directory change is successful, 'cd' sets the value of the - 'PWD' environment variable to the new directory name, and sets the - 'OLDPWD' environment variable to the value of the current working + If the directory change is successful, ‘cd’ sets the value of the + ‘PWD’ environment variable to the new directory name, and sets the + ‘OLDPWD’ environment variable to the value of the current working directory before the change. The return status is zero if the directory is successfully changed, non-zero otherwise. -'continue' +‘continue’ continue [N] - Resume the next iteration of an enclosing 'for', 'while', 'until', - or 'select' loop. If N is supplied, the execution of the Nth + Resume the next iteration of an enclosing ‘for’, ‘while’, ‘until’, + or ‘select’ loop. If N is supplied, the execution of the Nth enclosing loop is resumed. N must be greater than or equal to 1. The return status is zero unless N is not greater than or equal to 1. -'eval' +‘eval’ eval [ARGUMENTS] The arguments are concatenated together into a single command, which is then read and executed, and its exit status returned as - the exit status of 'eval'. If there are no arguments or only empty + the exit status of ‘eval’. If there are no arguments or only empty arguments, the return status is zero. -'exec' +‘exec’ exec [-cl] [-a NAME] [COMMAND [ARGUMENTS]] If COMMAND is supplied, it replaces the shell without creating a - new process. If the '-l' option is supplied, the shell places a + new process. If the ‘-l’ option is supplied, the shell places a dash at the beginning of the zeroth argument passed to COMMAND. - This is what the 'login' program does. The '-c' option causes - COMMAND to be executed with an empty environment. If '-a' is + This is what the ‘login’ program does. The ‘-c’ option causes + COMMAND to be executed with an empty environment. If ‘-a’ is supplied, the shell passes NAME as the zeroth argument to COMMAND. If COMMAND cannot be executed for some reason, a non-interactive - shell exits, unless the 'execfail' shell option is enabled. In + shell exits, unless the ‘execfail’ shell option is enabled. In that case, it returns failure. An interactive shell returns failure if the file cannot be executed. A subshell exits - unconditionally if 'exec' fails. If no COMMAND is specified, + unconditionally if ‘exec’ fails. If no COMMAND is specified, redirections may be used to affect the current shell environment. If there are no redirection errors, the return status is zero; otherwise the return status is non-zero. -'exit' +‘exit’ exit [N] Exit the shell, returning a status of N to the shell's parent. If N is omitted, the exit status is that of the last command executed. - Any trap on 'EXIT' is executed before the shell terminates. + Any trap on ‘EXIT’ is executed before the shell terminates. -'export' +‘export’ export [-fn] [-p] [NAME[=VALUE]] Mark each NAME to be passed to child processes in the environment. - If the '-f' option is supplied, the NAMEs refer to shell functions; - otherwise the names refer to shell variables. The '-n' option + If the ‘-f’ option is supplied, the NAMEs refer to shell functions; + otherwise the names refer to shell variables. The ‘-n’ option means to no longer mark each NAME for export. If no NAMEs are - supplied, or if the '-p' option is given, a list of names of all - exported variables is displayed. The '-p' option displays output + supplied, or if the ‘-p’ option is given, a list of names of all + exported variables is displayed. The ‘-p’ option displays output in a form that may be reused as input. If a variable name is followed by =VALUE, the value of the variable is set to VALUE. The return status is zero unless an invalid option is supplied, one - of the names is not a valid shell variable name, or '-f' is + of the names is not a valid shell variable name, or ‘-f’ is supplied with a name that is not a shell function. -'getopts' +‘false’ + false + + Does nothing, returns a non-zero status. + +‘getopts’ getopts OPTSTRING NAME [ARG ...] - 'getopts' is used by shell scripts to parse positional parameters. + ‘getopts’ is used by shell scripts to parse positional parameters. OPTSTRING contains the option characters to be recognized; if a character is followed by a colon, the option is expected to have an argument, which should be separated from it by whitespace. The - colon (':') and question mark ('?') may not be used as option - characters. Each time it is invoked, 'getopts' places the next + colon (‘:’) and question mark (‘?’) may not be used as option + characters. Each time it is invoked, ‘getopts’ places the next option in the shell variable NAME, initializing NAME if it does not exist, and the index of the next argument to be processed into the - variable 'OPTIND'. 'OPTIND' is initialized to 1 each time the + variable ‘OPTIND’. ‘OPTIND’ is initialized to 1 each time the shell or a shell script is invoked. When an option requires an - argument, 'getopts' places that argument into the variable - 'OPTARG'. The shell does not reset 'OPTIND' automatically; it must - be manually reset between multiple calls to 'getopts' within the + argument, ‘getopts’ places that argument into the variable + ‘OPTARG’. The shell does not reset ‘OPTIND’ automatically; it must + be manually reset between multiple calls to ‘getopts’ within the same shell invocation if a new set of parameters is to be used. - When the end of options is encountered, 'getopts' exits with a - return value greater than zero. 'OPTIND' is set to the index of - the first non-option argument, and NAME is set to '?'. + When the end of options is encountered, ‘getopts’ exits with a + return value greater than zero. ‘OPTIND’ is set to the index of + the first non-option argument, and NAME is set to ‘?’. - 'getopts' normally parses the positional parameters, but if more - arguments are supplied as ARG values, 'getopts' parses those + ‘getopts’ normally parses the positional parameters, but if more + arguments are supplied as ARG values, ‘getopts’ parses those instead. - 'getopts' can report errors in two ways. If the first character of + ‘getopts’ can report errors in two ways. If the first character of OPTSTRING is a colon, SILENT error reporting is used. In normal operation, diagnostic messages are printed when invalid options or - missing option arguments are encountered. If the variable 'OPTERR' + missing option arguments are encountered. If the variable ‘OPTERR’ is set to 0, no error messages will be displayed, even if the first - character of 'optstring' is not a colon. + character of ‘optstring’ is not a colon. - If an invalid option is seen, 'getopts' places '?' into NAME and, - if not silent, prints an error message and unsets 'OPTARG'. If - 'getopts' is silent, the option character found is placed in - 'OPTARG' and no diagnostic message is printed. + If ‘getopts’ detects an invalid option, it places ‘?’ into NAME + and, if not silent, prints an error message and unsets ‘OPTARG’. + If ‘getopts’ is silent, it assigns the option character found to + ‘OPTARG’ and does not print a diagnostic message. - If a required argument is not found, and 'getopts' is not silent, a - question mark ('?') is placed in NAME, 'OPTARG' is unset, and a - diagnostic message is printed. If 'getopts' is silent, then a - colon (':') is placed in NAME and 'OPTARG' is set to the option - character found. + If a required argument is not found, and ‘getopts’ is not silent, + it sets the value of NAME to a question mark (‘?’), unsets + ‘OPTARG’, and prints a diagnostic message. If ‘getopts’ is silent, + it sets the value of NAME to a colon (‘:’), and sets ‘OPTARG’ to + the option character found. -'hash' +‘hash’ hash [-r] [-p FILENAME] [-dt] [NAME] - Each time 'hash' is invoked, it remembers the full pathnames of the + Each time ‘hash’ is invoked, it remembers the full filenames of the commands specified as NAME arguments, so they need not be searched for on subsequent invocations. The commands are found by searching - through the directories listed in '$PATH'. Any - previously-remembered pathname is discarded. The '-p' option + through the directories listed in ‘$PATH’. Any + previously-remembered filename is discarded. The ‘-p’ option inhibits the path search, and FILENAME is used as the location of - NAME. The '-r' option causes the shell to forget all remembered - locations. The '-d' option causes the shell to forget the - remembered location of each NAME. If the '-t' option is supplied, + NAME. The ‘-r’ option causes the shell to forget all remembered + locations. Assigning to the ‘PATH’ variable also clears all hashed + filenames. The ‘-d’ option causes the shell to forget the + remembered location of each NAME. If the ‘-t’ option is supplied, the full pathname to which each NAME corresponds is printed. If - multiple NAME arguments are supplied with '-t', the NAME is printed - before the hashed full pathname. The '-l' option causes output to + multiple NAME arguments are supplied with ‘-t’, the NAME is printed + before the hashed full pathname. The ‘-l’ option causes output to be displayed in a format that may be reused as input. If no - arguments are given, or if only '-l' is supplied, information about - remembered commands is printed. The return status is zero unless a - NAME is not found or an invalid option is supplied. - -'pwd' + arguments are given, or if only ‘-l’ is supplied, information about + remembered commands is printed. The ‘-t’, ‘-d’, and ‘-p’ options + (the options that act on the NAME arguments) are mutually + exclusive. Only one will be active. If more than one is supplied, + ‘-t’ has higher priority than ‘-p’, and both are higher priority + than ‘-d’. The return status is zero unless a NAME is not found or + an invalid option is supplied. + +‘pwd’ pwd [-LP] Print the absolute pathname of the current working directory. If - the '-P' option is supplied, the pathname printed will not contain - symbolic links. If the '-L' option is supplied, the pathname + the ‘-P’ option is supplied, the pathname printed will not contain + symbolic links. If the ‘-L’ option is supplied, the pathname printed may contain symbolic links. The return status is zero unless an error is encountered while determining the name of the current directory or an invalid option is supplied. -'readonly' +‘readonly’ readonly [-aAf] [-p] [NAME[=VALUE]] ... Mark each NAME as readonly. The values of these names may not be - changed by subsequent assignment. If the '-f' option is supplied, - each NAME refers to a shell function. The '-a' option means each - NAME refers to an indexed array variable; the '-A' option means + changed by subsequent assignment. If the ‘-f’ option is supplied, + each NAME refers to a shell function. The ‘-a’ option means each + NAME refers to an indexed array variable; the ‘-A’ option means each NAME refers to an associative array variable. If both options - are supplied, '-A' takes precedence. If no NAME arguments are - given, or if the '-p' option is supplied, a list of all readonly + are supplied, ‘-A’ takes precedence. If no NAME arguments are + given, or if the ‘-p’ option is supplied, a list of all readonly names is printed. The other options may be used to restrict the - output to a subset of the set of readonly names. The '-p' option + output to a subset of the set of readonly names. The ‘-p’ option causes output to be displayed in a format that may be reused as input. If a variable name is followed by =VALUE, the value of the variable is set to VALUE. The return status is zero unless an invalid option is supplied, one of the NAME arguments is not a - valid shell variable or function name, or the '-f' option is + valid shell variable or function name, or the ‘-f’ option is supplied with a name that is not a shell function. -'return' +‘return’ return [N] Cause a shell function to stop executing and return the value N to its caller. If N is not supplied, the return value is the exit - status of the last command executed in the function. If 'return' + status of the last command executed in the function. If ‘return’ is executed by a trap handler, the last command used to determine the status is the last command executed before the trap handler. - If 'return' is executed during a 'DEBUG' trap, the last command + If ‘return’ is executed during a ‘DEBUG’ trap, the last command used to determine the status is the last command executed by the - trap handler before 'return' was invoked. 'return' may also be - used to terminate execution of a script being executed with the '.' - ('source') builtin, returning either N or the exit status of the + trap handler before ‘return’ was invoked. ‘return’ may also be + used to terminate execution of a script being executed with the ‘.’ + (‘source’) builtin, returning either N or the exit status of the last command executed within the script as the exit status of the script. If N is supplied, the return value is its least - significant 8 bits. Any command associated with the 'RETURN' trap + significant 8 bits. Any command associated with the ‘RETURN’ trap is executed before execution resumes after the function or script. - The return status is non-zero if 'return' is supplied a non-numeric + The return status is non-zero if ‘return’ is supplied a non-numeric argument or is used outside a function and not during the execution - of a script by '.' or 'source'. + of a script by ‘.’ or ‘source’. -'shift' +‘shift’ shift [N] Shift the positional parameters to the left by N. The positional - parameters from N+1 ... '$#' are renamed to '$1' ... '$#'-N. - 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 zero or greater than '$#', the positional parameters are + parameters from N+1 ... ‘$#’ are renamed to ‘$1’ ... ‘$#’-N. + 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 zero or greater than ‘$#’, the positional parameters are not changed. If N is not supplied, it is assumed to be 1. The - return status is zero unless N is greater than '$#' or less than + return status is zero unless N is greater than ‘$#’ or less than zero, non-zero otherwise. -'test' -'[' +‘test’ +‘[’ test EXPR Evaluate a conditional expression EXPR and return a status of 0 (true) or 1 (false). Each operator and operand must be a separate argument. Expressions are composed of the primaries described - below in *note Bash Conditional Expressions::. 'test' does not + below in *note Bash Conditional Expressions::. ‘test’ does not accept any options, nor does it accept and ignore an argument of - '--' as signifying the end of options. + ‘--’ as signifying the end of options. - When the '[' form is used, the last argument to the command must be - a ']'. + When the ‘[’ form is used, the last argument to the command must be + a ‘]’. Expressions may be combined using the following operators, listed in decreasing order of precedence. The evaluation depends on the number of arguments; see below. Operator precedence is used when there are five or more arguments. - '! EXPR' + ‘! EXPR’ True if EXPR is false. - '( EXPR )' + ‘( EXPR )’ Returns the value of EXPR. This may be used to override the normal precedence of operators. - 'EXPR1 -a EXPR2' + ‘EXPR1 -a EXPR2’ True if both EXPR1 and EXPR2 are true. - 'EXPR1 -o EXPR2' + ‘EXPR1 -o EXPR2’ True if either EXPR1 or EXPR2 is true. - The 'test' and '[' builtins evaluate conditional expressions using + The ‘test’ and ‘[’ builtins evaluate conditional expressions using a set of rules based on the number of arguments. 0 arguments @@ -3513,7 +3589,7 @@ standard. null. 2 arguments - If the first argument is '!', the expression is true if and + If the first argument is ‘!’, the expression is true if and only if the second argument is null. If the first argument is one of the unary conditional operators (*note Bash Conditional Expressions::), the expression is true if the unary test is @@ -3527,24 +3603,24 @@ standard. operators (*note Bash Conditional Expressions::), the result of the expression is the result of the binary test using the first and third arguments as operands. The - '-a' and '-o' operators are considered binary operators + ‘-a’ and ‘-o’ operators are considered binary operators when there are three arguments. - 2. If the first argument is '!', the value is the negation + 2. If the first argument is ‘!’, the value is the negation of the two-argument test using the second and third arguments. - 3. If the first argument is exactly '(' and the third - argument is exactly ')', the result is the one-argument + 3. If the first argument is exactly ‘(’ and the third + argument is exactly ‘)’, the result is the one-argument test of the second argument. 4. Otherwise, the expression is false. 4 arguments The following conditions are applied in the order listed. - 1. If the first argument is '!', the result is the negation + 1. If the first argument is ‘!’, the result is the negation of the three-argument expression composed of the remaining arguments. - 2. If the first argument is exactly '(' and the fourth - argument is exactly ')', the result is the two-argument + 2. If the first argument is exactly ‘(’ and the fourth + argument is exactly ‘)’, the result is the two-argument test of the second and third arguments. 3. Otherwise, the expression is parsed and evaluated according to precedence using the rules listed above. @@ -3553,92 +3629,127 @@ standard. The expression is parsed and evaluated according to precedence using the rules listed above. - When used with 'test' or '[', the '<' and '>' operators sort - lexicographically using ASCII ordering. + If the shell is in POSIX mode, or if the expression is part of the + ‘[[’ command, the ‘<’ and ‘>’ operators sort using the current + locale. If the shell is not in POSIX mode, the ‘test’ and ‘[’ + commands sort lexicographically using ASCII ordering. + + The historical operator-precedence parsing with 4 or more arguments + can lead to ambiguities when it encounters strings that look like + primaries. The POSIX standard has deprecated the ‘-a’ and ‘-o’ + primaries and enclosing expressions within parentheses. Scripts + should no longer use them. It's much more reliable to restrict + test invocations to a single primary, and to replace uses of ‘-a’ + and ‘-o’ with the shell's ‘&&’ and ‘||’ list operators. For + example, use -'times' + test -n string1 && test -n string2 + + instead of + + test -n string1 -a -n string2 + +‘times’ times Print out the user and system times used by the shell and its children. The return status is zero. -'trap' - trap [-lp] [ARG] [SIGSPEC ...] - - The commands in ARG are to be read and executed when the shell - receives signal SIGSPEC. If ARG is absent (and there is a single - SIGSPEC) or equal to '-', each specified signal's disposition is - reset to the value it had when the shell was started. If ARG is - the null string, then the signal specified by each SIGSPEC is - ignored by the shell and commands it invokes. If ARG is not - present and '-p' has been supplied, the shell displays the trap - commands associated with each SIGSPEC. If no arguments are - supplied, or only '-p' is given, 'trap' prints the list of commands - associated with each signal number in a form that may be reused as - shell input. The '-l' option causes the shell to print a list of - signal names and their corresponding numbers. Each SIGSPEC is - either a signal name or a signal number. Signal names are case - insensitive and the 'SIG' prefix is optional. - - If a SIGSPEC is '0' or 'EXIT', ARG is executed when the shell - exits. If a SIGSPEC is 'DEBUG', the command ARG is executed before - every simple command, 'for' command, 'case' command, 'select' - command, every arithmetic 'for' command, and before the first - command executes in a shell function. Refer to the description of - the 'extdebug' option to the 'shopt' builtin (*note The Shopt - Builtin::) for details of its effect on the 'DEBUG' trap. If a - SIGSPEC is 'RETURN', the command ARG is executed each time a shell - function or a script executed with the '.' or 'source' builtins - finishes executing. - - If a SIGSPEC is 'ERR', the command ARG is executed whenever a - pipeline (which may consist of a single simple command), a list, or - a compound command returns a non-zero exit status, subject to the - following conditions. The 'ERR' trap is not executed if the failed +‘trap’ + trap [-Plp] [ACTION] [SIGSPEC ...] + + The ACTION is a command that is read and executed when the shell + receives signal SIGSPEC. If ACTION is absent (and there is a + single SIGSPEC) or equal to ‘-’, each specified signal's + disposition is reset to the value it had when the shell was + started. If ACTION is the null string, then the signal specified + by each SIGSPEC is ignored by the shell and commands it invokes. + + If no arguments are supplied, ‘trap’ prints the actions associated + with each trapped signal as a set of ‘trap’ commands that can be + reused as shell input to restore the current signal dispositions. + If ACTION is not present and ‘-p’ has been supplied, ‘trap’ + displays the trap commands associated with each SIGSPEC, or, if no + SIGSPECs are supplied, for all trapped signals, as a set of ‘trap’ + commands that can be reused as shell input to restore the current + signal dispositions. The ‘-P’ option behaves similarly, but + displays only the actions associated with each SIGSPEC argument. + ‘-P’ requires at least one SIGSPEC argument. The ‘-P’ or ‘-p’ + options to ‘trap’ may be used in a subshell environment (e.g., + command substitution) and, as long as they are used before ‘trap’ + is used to change a signal's handling, will display the state of + its parent's traps. + + The ‘-l’ option causes ‘trap’ to print a list of signal names and + their corresponding numbers. Each SIGSPEC is either a signal name + or a signal number. Signal names are case insensitive and the + ‘SIG’ prefix is optional. + + If a SIGSPEC is ‘0’ or ‘EXIT’, ACTION is executed when the shell + exits. If a SIGSPEC is ‘DEBUG’, ACTION is executed before every + simple command, ‘for’ command, ‘case’ command, ‘select’ command, (( + arithmetic command, [[ conditional command, arithmetic ‘for’ + command, and before the first command executes in a shell function. + Refer to the description of the ‘extdebug’ option to the ‘shopt’ + builtin (*note The Shopt Builtin::) for details of its effect on + the ‘DEBUG’ trap. If a SIGSPEC is ‘RETURN’, ACTION is executed + each time a shell function or a script executed with the ‘.’ or + ‘source’ builtins finishes executing. + + If a SIGSPEC is ‘ERR’, ACTION is executed whenever a pipeline + (which may consist of a single simple command), a list, or a + compound command returns a non-zero exit status, subject to the + following conditions. The ‘ERR’ trap is not executed if the failed command is part of the command list immediately following an - 'until' or 'while' keyword, part of the test following the 'if' or - 'elif' reserved words, part of a command executed in a '&&' or '||' - list except the command following the final '&&' or '||', any + ‘until’ or ‘while’ keyword, part of the test following the ‘if’ or + ‘elif’ reserved words, part of a command executed in a ‘&&’ or ‘||’ + list except the command following the final ‘&&’ or ‘||’, any command in a pipeline but the last, or if the command's return - status is being inverted using '!'. These are the same conditions - obeyed by the 'errexit' ('-e') option. + status is being inverted using ‘!’. These are the same conditions + obeyed by the ‘errexit’ (‘-e’) option. - Signals ignored upon entry to the shell cannot be trapped or reset. - Trapped signals that are not being ignored are reset to their - original values in a subshell or subshell environment when one is - created. + Signals ignored upon entry to a non-interactive shell cannot be + trapped or reset. Interactive shells permit trapping signals + ignored on entry. Trapped signals that are not being ignored are + reset to their original values in a subshell or subshell + environment when one is created. The return status is zero unless a SIGSPEC does not specify a valid signal. -'umask' +‘true’ + true + + Does nothing, returns a 0 status. + +‘umask’ umask [-p] [-S] [MODE] Set the shell process's file creation mask to MODE. If MODE begins with a digit, it is interpreted as an octal number; if not, it is interpreted as a symbolic mode mask similar to that accepted by the - 'chmod' command. If MODE is omitted, the current value of the mask - is printed. If the '-S' option is supplied without a MODE - argument, the mask is printed in a symbolic format. If the '-p' + ‘chmod’ command. If MODE is omitted, the current value of the mask + is printed. If the ‘-S’ option is supplied without a MODE + argument, the mask is printed in a symbolic format. If the ‘-p’ option is supplied, and MODE is omitted, the output is in a form that may be reused as input. The return status is zero if the mode is successfully changed or if no MODE argument is supplied, and non-zero otherwise. Note that when the mode is interpreted as an octal number, each - number of the umask is subtracted from '7'. Thus, a umask of '022' - results in permissions of '755'. + number of the umask is subtracted from ‘7’. Thus, a umask of ‘022’ + results in permissions of ‘755’. -'unset' +‘unset’ unset [-fnv] [NAME] - Remove each variable or function NAME. If the '-v' option is + Remove each variable or function NAME. If the ‘-v’ option is given, each NAME refers to a shell variable and that variable is - removed. If the '-f' option is given, the NAMEs refer to shell - functions, and the function definition is removed. If the '-n' - option is supplied, and NAME is a variable with the 'nameref' + removed. If the ‘-f’ option is given, the NAMEs refer to shell + functions, and the function definition is removed. If the ‘-n’ + option is supplied, and NAME is a variable with the ‘nameref’ attribute, NAME will be unset rather than the variable it - references. '-n' has no effect if the '-f' option is supplied. If + references. ‘-n’ has no effect if the ‘-f’ option is supplied. If no options are supplied, each NAME refers to a variable; if there is no variable by that name, a function with that name, if any, is unset. Readonly variables and functions may not be unset. Some @@ -3657,21 +3768,21 @@ This section describes builtin commands which are unique to or have been extended in Bash. Some of these commands are specified in the POSIX standard. -'alias' +‘alias’ alias [-p] [NAME[=VALUE] ...] - Without arguments or with the '-p' option, 'alias' prints the list + Without arguments or with the ‘-p’ option, ‘alias’ prints the list of aliases on the standard output in a form that allows them to be reused as input. If arguments are supplied, an alias is defined for each NAME whose VALUE is given. If no VALUE is given, the name and value of the alias is printed. Aliases are described in *note Aliases::. -'bind' +‘bind’ bind [-m KEYMAP] [-lpsvPSVX] bind [-m KEYMAP] [-q FUNCTION] [-u FUNCTION] [-r KEYSEQ] bind [-m KEYMAP] -f FILENAME - bind [-m KEYMAP] -x KEYSEQ:SHELL-COMMAND + bind [-m KEYMAP] -x KEYSEQ[: ]SHELL-COMMAND bind [-m KEYMAP] KEYSEQ:FUNCTION-NAME bind [-m KEYMAP] KEYSEQ:READLINE-COMMAND bind READLINE-COMMAND-LINE @@ -3681,80 +3792,91 @@ standard. macro, or set a Readline variable. Each non-option argument is a command as it would appear in a Readline initialization file (*note Readline Init File::), but each binding or command must be passed - as a separate argument; e.g., '"\C-x\C-r":re-read-init-file'. + as a separate argument; e.g., ‘"\C-x\C-r":re-read-init-file’. Options, if supplied, have the following meanings: - '-m KEYMAP' + ‘-m KEYMAP’ Use KEYMAP as the keymap to be affected by the subsequent - bindings. Acceptable KEYMAP names are 'emacs', - 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move', - 'vi-command', and 'vi-insert'. 'vi' is equivalent to - 'vi-command' ('vi-move' is also a synonym); 'emacs' is - equivalent to 'emacs-standard'. + bindings. Acceptable KEYMAP names are ‘emacs’, + ‘emacs-standard’, ‘emacs-meta’, ‘emacs-ctlx’, ‘vi’, ‘vi-move’, + ‘vi-command’, and ‘vi-insert’. ‘vi’ is equivalent to + ‘vi-command’ (‘vi-move’ is also a synonym); ‘emacs’ is + equivalent to ‘emacs-standard’. - '-l' + ‘-l’ List the names of all Readline functions. - '-p' + ‘-p’ Display Readline function names and bindings in such a way - that they can be used as input or in a Readline initialization - file. + that they can be used as an argument to a subsequent ‘bind’ + command or in a Readline initialization file. - '-P' + ‘-P’ List current Readline function names and bindings. - '-v' + ‘-v’ Display Readline variable names and values in such a way that - they can be used as input or in a Readline initialization - file. + they can be used as an argument to a subsequent ‘bind’ command + or in a Readline initialization file. - '-V' + ‘-V’ List current Readline variable names and values. - '-s' + ‘-s’ Display Readline key sequences bound to macros and the strings - they output in such a way that they can be used as input or in - a Readline initialization file. + they output in such a way that they can be used as an argument + to a subsequent ‘bind’ command or in a Readline initialization + file. - '-S' + ‘-S’ Display Readline key sequences bound to macros and the strings they output. - '-f FILENAME' + ‘-f FILENAME’ Read key bindings from FILENAME. - '-q FUNCTION' + ‘-q FUNCTION’ Query about which keys invoke the named FUNCTION. - '-u FUNCTION' + ‘-u FUNCTION’ Unbind all keys bound to the named FUNCTION. - '-r KEYSEQ' + ‘-r KEYSEQ’ Remove any current binding for KEYSEQ. - '-x KEYSEQ:SHELL-COMMAND' + ‘-x KEYSEQ:SHELL-COMMAND’ Cause SHELL-COMMAND to be executed whenever KEYSEQ is entered. + The separator between KEYSEQ and SHELL-COMMAND is either + whitespace or a colon optionally followed by whitespace. If + the separator is whitespace, SHELL-COMMAND must be enclosed in + double quotes and Readline expands any of its special + backslash-escapes in SHELL-COMMAND before saving it. If the + separator is a colon, any enclosing double quotes are + optional, and Readline does not expand the command string + before saving it. Since the entire key binding expression + must be a single argument, it should be enclosed in quotes. When SHELL-COMMAND is executed, the shell sets the - 'READLINE_LINE' variable to the contents of the Readline line - buffer and the 'READLINE_POINT' and 'READLINE_MARK' variables + ‘READLINE_LINE’ variable to the contents of the Readline line + buffer and the ‘READLINE_POINT’ and ‘READLINE_MARK’ variables to the current location of the insertion point and the saved insertion point (the MARK), respectively. The shell assigns any numeric argument the user supplied to the - 'READLINE_ARGUMENT' variable. If there was no argument, that + ‘READLINE_ARGUMENT’ variable. If there was no argument, that variable is not set. If the executed command changes the - value of any of 'READLINE_LINE', 'READLINE_POINT', or - 'READLINE_MARK', those new values will be reflected in the + value of any of ‘READLINE_LINE’, ‘READLINE_POINT’, or + ‘READLINE_MARK’, those new values will be reflected in the editing state. - '-X' + ‘-X’ List all key sequences bound to shell commands and the - associated commands in a format that can be reused as input. + associated commands in a format that can be reused as an + argument to a subsequent ‘bind’ command. The return status is zero unless an invalid option is supplied or an error occurs. -'builtin' +‘builtin’ builtin [SHELL-BUILTIN [ARGS]] Run a shell builtin, passing it ARGS, and return its exit status. @@ -3763,15 +3885,15 @@ standard. the function. The return status is non-zero if SHELL-BUILTIN is not a shell builtin command. -'caller' +‘caller’ caller [EXPR] Returns the context of any active subroutine call (a shell function - or a script executed with the '.' or 'source' builtins). + or a script executed with the ‘.’ or ‘source’ builtins). - Without EXPR, 'caller' displays the line number and source filename + Without EXPR, ‘caller’ displays the line number and source filename of the current subroutine call. If a non-negative integer is - supplied as EXPR, 'caller' displays the line number, subroutine + supplied as EXPR, ‘caller’ displays the line number, subroutine name, and source file corresponding to that position in the current execution call stack. This extra information may be used, for example, to print a stack trace. The current frame is frame 0. @@ -3780,313 +3902,316 @@ standard. subroutine call or EXPR does not correspond to a valid position in the call stack. -'command' +‘command’ command [-pVv] COMMAND [ARGUMENTS ...] Runs COMMAND with ARGUMENTS ignoring any shell function named COMMAND. Only shell builtin commands or commands found by - searching the 'PATH' are executed. If there is a shell function - named 'ls', running 'command ls' within the function will execute - the external command 'ls' instead of calling the function - recursively. The '-p' option means to use a default value for - 'PATH' that is guaranteed to find all of the standard utilities. + searching the ‘PATH’ are executed. If there is a shell function + named ‘ls’, running ‘command ls’ within the function will execute + the external command ‘ls’ instead of calling the function + recursively. The ‘-p’ option means to use a default value for + ‘PATH’ that is guaranteed to find all of the standard utilities. The return status in this case is 127 if COMMAND cannot be found or an error occurred, and the exit status of COMMAND otherwise. - If either the '-V' or '-v' option is supplied, a description of - COMMAND is printed. The '-v' option causes a single word + If either the ‘-V’ or ‘-v’ option is supplied, a description of + COMMAND is printed. The ‘-v’ option causes a single word indicating the command or file name used to invoke COMMAND to be - displayed; the '-V' option produces a more verbose description. In + displayed; the ‘-V’ option produces a more verbose description. In this case, the return status is zero if COMMAND is found, and non-zero if not. -'declare' +‘declare’ declare [-aAfFgiIlnrtux] [-p] [NAME[=VALUE] ...] Declare variables and give them attributes. If no NAMEs are given, then display the values of variables instead. - The '-p' option will display the attributes and values of each - NAME. When '-p' is used with NAME arguments, additional options, - other than '-f' and '-F', are ignored. + The ‘-p’ option will display the attributes and values of each + NAME. When ‘-p’ is used with NAME arguments, additional options, + other than ‘-f’ and ‘-F’, are ignored. - When '-p' is supplied without NAME arguments, 'declare' will + When ‘-p’ is supplied without NAME arguments, ‘declare’ will display the attributes and values of all variables having the attributes specified by the additional options. If no other - options are supplied with '-p', 'declare' will display the - attributes and values of all shell variables. The '-f' option will + options are supplied with ‘-p’, ‘declare’ will display the + attributes and values of all shell variables. The ‘-f’ option will restrict the display to shell functions. - The '-F' option inhibits the display of function definitions; only - the function name and attributes are printed. If the 'extdebug' - shell option is enabled using 'shopt' (*note The Shopt Builtin::), + The ‘-F’ option inhibits the display of function definitions; only + the function name and attributes are printed. If the ‘extdebug’ + shell option is enabled using ‘shopt’ (*note The Shopt Builtin::), the source file name and line number where each NAME is defined are - displayed as well. '-F' implies '-f'. + displayed as well. ‘-F’ implies ‘-f’. - The '-g' option forces variables to be created or modified at the - global scope, even when 'declare' is executed in a shell function. + The ‘-g’ option forces variables to be created or modified at the + global scope, even when ‘declare’ is executed in a shell function. It is ignored in all other cases. - The '-I' option causes local variables to inherit the attributes - (except the 'nameref' attribute) and value of any existing variable + The ‘-I’ option causes local variables to inherit the attributes + (except the ‘nameref’ attribute) and value of any existing variable with the same NAME at a surrounding scope. If there is no existing variable, the local variable is initially unset. The following options can be used to restrict output to variables with the specified attributes or to give variables attributes: - '-a' + ‘-a’ Each NAME is an indexed array variable (*note Arrays::). - '-A' + ‘-A’ Each NAME is an associative array variable (*note Arrays::). - '-f' + ‘-f’ Use function names only. - '-i' + ‘-i’ The variable is to be treated as an integer; arithmetic evaluation (*note Shell Arithmetic::) is performed when the variable is assigned a value. - '-l' + ‘-l’ When the variable is assigned a value, all upper-case characters are converted to lower-case. The upper-case attribute is disabled. - '-n' - Give each NAME the 'nameref' attribute, making it a name + ‘-n’ + Give each NAME the ‘nameref’ attribute, making it a name reference to another variable. That other variable is defined by the value of NAME. All references, assignments, and attribute modifications to NAME, except for those using or - changing the '-n' attribute itself, are performed on the + changing the ‘-n’ attribute itself, are performed on the variable referenced by NAME's value. The nameref attribute cannot be applied to array variables. - '-r' + ‘-r’ Make NAMEs readonly. These names cannot then be assigned values by subsequent assignment statements or unset. - '-t' - Give each NAME the 'trace' attribute. Traced functions - inherit the 'DEBUG' and 'RETURN' traps from the calling shell. + ‘-t’ + Give each NAME the ‘trace’ attribute. Traced functions + inherit the ‘DEBUG’ and ‘RETURN’ traps from the calling shell. The trace attribute has no special meaning for variables. - '-u' + ‘-u’ When the variable is assigned a value, all lower-case characters are converted to upper-case. The lower-case attribute is disabled. - '-x' + ‘-x’ Mark each NAME for export to subsequent commands via the environment. - Using '+' instead of '-' turns off the attribute instead, with the - exceptions that '+a' and '+A' may not be used to destroy array - variables and '+r' will not remove the readonly attribute. When - used in a function, 'declare' makes each NAME local, as with the - 'local' command, unless the '-g' option is used. If a variable + Using ‘+’ instead of ‘-’ turns off the attribute instead, with the + exceptions that ‘+a’ and ‘+A’ may not be used to destroy array + variables and ‘+r’ will not remove the readonly attribute. When + used in a function, ‘declare’ makes each NAME local, as with the + ‘local’ command, unless the ‘-g’ option is used. If a variable name is followed by =VALUE, the value of the variable is set to VALUE. - When using '-a' or '-A' and the compound assignment syntax to + When using ‘-a’ or ‘-A’ and the compound assignment syntax to create array variables, additional attributes do not take effect until subsequent assignments. The return status is zero unless an invalid option is encountered, - an attempt is made to define a function using '-f foo=bar', an + 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 (*note Arrays::), one of the NAMEs is not a valid shell variable name, an attempt is made to turn off readonly 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 '-f'. + is made to display a non-existent function with ‘-f’. -'echo' +‘echo’ echo [-neE] [ARG ...] Output the ARGs, separated by spaces, terminated with a newline. - The return status is 0 unless a write error occurs. If '-n' is - specified, the trailing newline is suppressed. If the '-e' option + The return status is 0 unless a write error occurs. If ‘-n’ is + specified, the trailing newline is suppressed. If the ‘-e’ option is given, interpretation of the following backslash-escaped - characters is enabled. The '-E' option disables the interpretation + characters is enabled. The ‘-E’ option disables the interpretation of these escape characters, even on systems where they are - interpreted by default. The 'xpg_echo' shell option may be used to - dynamically determine whether or not 'echo' expands these escape - characters by default. 'echo' does not interpret '--' to mean the - end of options. + interpreted by default. The ‘xpg_echo’ shell option may be used to + dynamically determine whether or not ‘echo’ interprets any options + and expands these escape characters by default. ‘echo’ does not + interpret ‘--’ to mean the end of options. - 'echo' interprets the following escape sequences: - '\a' + ‘echo’ interprets the following escape sequences: + ‘\a’ alert (bell) - '\b' + ‘\b’ backspace - '\c' + ‘\c’ suppress further output - '\e' - '\E' + ‘\e’ + ‘\E’ escape - '\f' + ‘\f’ form feed - '\n' + ‘\n’ new line - '\r' + ‘\r’ carriage return - '\t' + ‘\t’ horizontal tab - '\v' + ‘\v’ vertical tab - '\\' + ‘\\’ backslash - '\0NNN' + ‘\0NNN’ the eight-bit character whose value is the octal value NNN (zero to three octal digits) - '\xHH' + ‘\xHH’ the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) - '\uHHHH' + ‘\uHHHH’ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) - '\UHHHHHHHH' + ‘\UHHHHHHHH’ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits) -'enable' +‘enable’ enable [-a] [-dnps] [-f FILENAME] [NAME ...] 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 '-n' + shell normally searches for builtins before disk commands. If ‘-n’ is used, the NAMEs become disabled. Otherwise NAMEs are enabled. - For example, to use the 'test' binary found via '$PATH' instead of - the shell builtin version, type 'enable -n test'. + For example, to use the ‘test’ binary found via ‘$PATH’ instead of + the shell builtin version, type ‘enable -n test’. - If the '-p' option is supplied, or no NAME arguments appear, a list + If the ‘-p’ option is supplied, or no NAME arguments appear, a list of shell builtins is printed. With no other arguments, the list - consists of all enabled shell builtins. The '-a' option means to + consists of all enabled shell builtins. The ‘-a’ option means to list each builtin with an indication of whether or not it is enabled. - The '-f' option means to load the new builtin command NAME from + The ‘-f’ option means to load the new builtin command NAME from shared object FILENAME, on systems that support dynamic loading. - Bash will use the value of the 'BASH_LOADABLES_PATH' variable as a + Bash will use the value of the ‘BASH_LOADABLES_PATH’ variable as a colon-separated list of directories in which to search for - FILENAME. The default is system-dependent. The '-d' option will - delete a builtin loaded with '-f'. + FILENAME, if FILENAME does not contain a slash. The default is + system-dependent, and may include "." to force a search of the + current directory. The ‘-d’ option will delete a builtin loaded + with ‘-f’. If there are no options, a list of the shell builtins is displayed. - The '-s' option restricts 'enable' to the POSIX special builtins. - If '-s' is used with '-f', the new builtin becomes a special + The ‘-s’ option restricts ‘enable’ to the POSIX special builtins. + If ‘-s’ is used with ‘-f’, the new builtin becomes a special builtin (*note Special Builtins::). If no options are supplied and a NAME is not a shell builtin, - 'enable' will attempt to load NAME from a shared object named NAME, - as if the command were 'enable -f NAME NAME'. + ‘enable’ will attempt to load NAME from a shared object named NAME, + as if the command were ‘enable -f NAME NAME’. The return status is zero unless a NAME is not a shell builtin or there is an error loading a new builtin from a shared object. -'help' +‘help’ help [-dms] [PATTERN] Display helpful information about builtin commands. If PATTERN is - specified, 'help' gives detailed help on all commands matching + specified, ‘help’ gives detailed help on all commands matching PATTERN, otherwise a list of the builtins is printed. Options, if supplied, have the following meanings: - '-d' + ‘-d’ Display a short description of each PATTERN - '-m' + ‘-m’ Display the description of each PATTERN in a manpage-like format - '-s' + ‘-s’ Display only a short usage synopsis for each PATTERN The return status is zero unless no command matches PATTERN. -'let' +‘let’ let EXPRESSION [EXPRESSION ...] - The 'let' builtin allows arithmetic to be performed on shell + The ‘let’ builtin allows arithmetic to be performed on shell variables. Each EXPRESSION is evaluated according to the rules given below in *note Shell Arithmetic::. If the last EXPRESSION - evaluates to 0, 'let' returns 1; otherwise 0 is returned. + evaluates to 0, ‘let’ returns 1; otherwise 0 is returned. -'local' +‘local’ local [OPTION] NAME[=VALUE] ... For each argument, a local variable named NAME is created, and assigned VALUE. The OPTION can be any of the options accepted by - 'declare'. 'local' can only be used within a function; it makes + ‘declare’. ‘local’ can only be used within a function; it makes the variable NAME have a visible scope restricted to that function - and its children. If NAME is '-', the set of shell options is made - local to the function in which 'local' is invoked: shell options - changed using the 'set' builtin inside the function are restored to - their original values when the function returns. The restore is - effected as if a series of 'set' commands were executed to restore - the values that were in place before the function. The return - status is zero unless 'local' is used outside a function, an - invalid NAME is supplied, or NAME is a readonly variable. - -'logout' + and its children. If NAME is ‘-’, the set of shell options is made + local to the function in which ‘local’ is invoked: shell options + changed using the ‘set’ builtin inside the function after the call + to ‘local’ are restored to their original values when the function + returns. The restore is effected as if a series of ‘set’ commands + were executed to restore the values that were in place before the + function. The return status is zero unless ‘local’ is used outside + a function, an invalid NAME is supplied, or NAME is a readonly + variable. + +‘logout’ logout [N] Exit a login shell, returning a status of N to the shell's parent. -'mapfile' +‘mapfile’ mapfile [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] [-u FD] [-C CALLBACK] [-c QUANTUM] [ARRAY] Read lines from the standard input into the indexed array variable - ARRAY, or from file descriptor FD if the '-u' option is supplied. - The variable 'MAPFILE' is the default ARRAY. Options, if supplied, + ARRAY, or from file descriptor FD if the ‘-u’ option is supplied. + The variable ‘MAPFILE’ is the default ARRAY. Options, if supplied, have the following meanings: - '-d' + ‘-d’ The first character of DELIM is used to terminate each input line, rather than newline. If DELIM is the empty string, - 'mapfile' will terminate a line when it reads a NUL character. - '-n' + ‘mapfile’ will terminate a line when it reads a NUL character. + ‘-n’ Copy at most COUNT lines. If COUNT is 0, all lines are copied. - '-O' + ‘-O’ Begin assigning to ARRAY at index ORIGIN. The default index is 0. - '-s' + ‘-s’ Discard the first COUNT lines read. - '-t' + ‘-t’ Remove a trailing DELIM (default newline) from each line read. - '-u' + ‘-u’ Read lines from file descriptor FD instead of the standard input. - '-C' - Evaluate CALLBACK each time QUANTUM lines are read. The '-c' + ‘-C’ + Evaluate CALLBACK each time QUANTUM lines are read. The ‘-c’ option specifies QUANTUM. - '-c' + ‘-c’ Specify the number of lines read between each call to CALLBACK. - If '-C' is specified without '-c', the default quantum is 5000. + If ‘-C’ is specified without ‘-c’, the default quantum is 5000. When CALLBACK is evaluated, it is supplied the index of the next array element to be assigned and the line to be assigned to that element as additional arguments. CALLBACK is evaluated after the line is read but before the array element is assigned. - If not supplied with an explicit origin, 'mapfile' will clear ARRAY + If not supplied with an explicit origin, ‘mapfile’ will clear ARRAY before assigning to it. - 'mapfile' returns successfully unless an invalid option or option + ‘mapfile’ returns successfully unless an invalid option or option argument is supplied, ARRAY is invalid or unassignable, or ARRAY is not an indexed array. -'printf' +‘printf’ printf [-v VAR] FORMAT [ARGUMENTS] Write the formatted ARGUMENTS to the standard output under the - control of the FORMAT. The '-v' option causes the output to be + control of the FORMAT. The ‘-v’ option causes the output to be assigned to the variable VAR rather than being printed to the standard output. @@ -4095,33 +4220,48 @@ standard. output, character escape sequences, which are converted and copied to the standard output, and format specifications, each of which causes printing of the next successive ARGUMENT. In addition to - the standard 'printf(1)' formats, 'printf' interprets the following - extensions: + the standard ‘printf(3)’ format characters ‘csndiouxXeEfFgGaA’, + ‘printf’ interprets the following additional format specifiers: - '%b' - Causes 'printf' to expand backslash escape sequences in the - corresponding ARGUMENT in the same way as 'echo -e' (*note + ‘%b’ + Causes ‘printf’ to expand backslash escape sequences in the + corresponding ARGUMENT in the same way as ‘echo -e’ (*note Bash Builtins::). - '%q' - Causes 'printf' to output the corresponding ARGUMENT in a - format that can be reused as shell input. - '%Q' - like '%q', but applies any supplied precision to the ARGUMENT + ‘%q’ + Causes ‘printf’ to output the corresponding ARGUMENT in a + format that can be reused as shell input. ‘%q’ and ‘%Q’P use + the ANSI-C quoting style (*note ANSI-C Quoting::) if any + characters in the argument string require it, and backslash + quoting otherwise. If the format string uses the ‘printf’ + ALTERNATE FORM, these two formats quote the argument string + using single quotes. + + ‘%Q’ + like ‘%q’, but applies any supplied precision to the ARGUMENT before quoting it. - '%(DATEFMT)T' - Causes 'printf' to output the date-time string resulting from - using DATEFMT as a format string for 'strftime'(3). The + + ‘%(DATEFMT)T’ + Causes ‘printf’ to output the date-time string resulting from + using DATEFMT as a format string for ‘strftime’(3). The corresponding ARGUMENT is an integer representing the number of seconds since the epoch. Two special argument values may be used: -1 represents the current time, and -2 represents the time the shell was invoked. If no argument is specified, conversion behaves as if -1 had been given. This is an - exception to the usual 'printf' behavior. + exception to the usual ‘printf’ behavior. + + The %b, %q, and %T format specifiers all use the field width and + precision arguments from the format specification and write that + many bytes from (or use that wide a field for) the expanded + argument, which usually contains more characters than the original. - The %b, %q, and %T directives all use the field width and precision - arguments from the format specification and write that many bytes - from (or use that wide a field for) the expanded argument, which - usually contains more characters than the original. + The %n format specifier accepts a corresponding argument that is + treated as a shell variable name. + + The %s and %c format specifiers accept an l (long) modifier, which + forces them to convert the argument string to a wide-character + string and apply any supplied field width and precision in terms of + characters, not bytes. Arguments to non-string format specifiers are treated as C language constants, except that a leading plus or minus sign is allowed, and @@ -4132,267 +4272,283 @@ standard. If the FORMAT requires more ARGUMENTS than are supplied, 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. + success, non-zero if an invalid option is supplied or a write or + assignment error occurs. -'read' - read [-ers] [-a ANAME] [-d DELIM] [-i TEXT] [-n NCHARS] +‘read’ + read [-Eers] [-a ANAME] [-d DELIM] [-i TEXT] [-n NCHARS] [-N NCHARS] [-p PROMPT] [-t TIMEOUT] [-u FD] [NAME ...] One line is read from the standard input, or from the file - descriptor FD supplied as an argument to the '-u' option, split + descriptor FD supplied as an argument to the ‘-u’ option, split into words as described above in *note Word Splitting::, and the first word is assigned to the first NAME, the second word to the second NAME, and so on. If there are more words than names, the remaining words and their intervening delimiters are assigned to the last NAME. If there are fewer words read from the input stream than names, the remaining names are assigned empty values. The - characters in the value of the 'IFS' variable are used to split the + characters in the value of the ‘IFS’ variable are used to split the line into words using the same rules the shell uses for expansion (described above in *note Word Splitting::). The backslash - character '\' may be used to remove any special meaning for the + character ‘\’ may be used to remove any special meaning for the next character read and for line continuation. Options, if supplied, have the following meanings: - '-a ANAME' + ‘-a ANAME’ The words are assigned to sequential indices of the array variable ANAME, starting at 0. All elements are removed from ANAME before the assignment. Other NAME arguments are ignored. - '-d DELIM' + ‘-d DELIM’ The first character of DELIM is used to terminate the input line, rather than newline. If DELIM is the empty string, - 'read' will terminate a line when it reads a NUL character. + ‘read’ will terminate a line when it reads a NUL character. - '-e' + ‘-e’ Readline (*note Command Line Editing::) is used to obtain the line. Readline uses the current (or default, if line editing was not previously active) editing settings, but uses Readline's default filename completion. - '-i TEXT' + ‘-E’ + Readline (*note Command Line Editing::) is used to obtain the + line. Readline uses the current (or default, if line editing + was not previously active) editing settings, but uses Bash's + default completion, including programmable completion. + + ‘-i TEXT’ If Readline is being used to read the line, TEXT is placed into the editing buffer before editing begins. - '-n NCHARS' - 'read' returns after reading NCHARS characters rather than + ‘-n NCHARS’ + ‘read’ returns after reading NCHARS characters rather than waiting for a complete line of input, but honors a delimiter if fewer than NCHARS characters are read before the delimiter. - '-N NCHARS' - 'read' returns after reading exactly NCHARS characters rather + ‘-N NCHARS’ + ‘read’ returns after reading exactly NCHARS characters rather than waiting for a complete line of input, unless EOF is - encountered or 'read' times out. Delimiter characters + encountered or ‘read’ times out. Delimiter characters encountered in the input are not treated specially and do not - cause 'read' to return until NCHARS characters are read. The - result is not split on the characters in 'IFS'; the intent is + cause ‘read’ to return until NCHARS characters are read. The + result is not split on the characters in ‘IFS’; the intent is that the variable is assigned exactly the characters read - (with the exception of backslash; see the '-r' option below). + (with the exception of backslash; see the ‘-r’ option below). - '-p PROMPT' + ‘-p PROMPT’ Display PROMPT, without a trailing newline, before attempting to read any input. The prompt is displayed only if input is coming from a terminal. - '-r' + ‘-r’ If this option is given, backslash does not act as an escape character. The backslash is considered to be part of the line. In particular, a backslash-newline pair may not then be used as a line continuation. - '-s' + ‘-s’ Silent mode. If input is coming from a terminal, characters are not echoed. - '-t TIMEOUT' - Cause 'read' to time out and return failure if a complete line + ‘-t TIMEOUT’ + Cause ‘read’ to time out and return failure if a complete line of input (or a specified number of characters) is not read within TIMEOUT seconds. TIMEOUT may be a decimal number with a fractional portion following the decimal point. This option - is only effective if 'read' is reading input from a terminal, + is only effective if ‘read’ is reading input from a terminal, pipe, or other special file; it has no effect when reading - from regular files. If 'read' times out, 'read' saves any + from regular files. If ‘read’ times out, ‘read’ saves any partial input read into the specified variable NAME. If - TIMEOUT is 0, 'read' returns immediately, without trying to + TIMEOUT is 0, ‘read’ returns immediately, without trying to read any data. The exit status is 0 if input is available on the specified file descriptor, or the read will return EOF, non-zero otherwise. The exit status is greater than 128 if the timeout is exceeded. - '-u FD' + ‘-u FD’ Read input from file descriptor FD. + Other than the case where DELIM is the empty string, ‘read’ ignores + any NUL characters in the input. + If no NAMEs are supplied, the line read, without the ending delimiter but otherwise unmodified, is assigned to the variable - 'REPLY'. The exit status is zero, unless end-of-file is - encountered, 'read' times out (in which case the status is greater + ‘REPLY’. The exit status is zero, unless end-of-file is + encountered, ‘read’ times out (in which case the status is greater than 128), a variable assignment error (such as assigning to a readonly variable) occurs, or an invalid file descriptor is - supplied as the argument to '-u'. + supplied as the argument to ‘-u’. -'readarray' +‘readarray’ readarray [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] [-u FD] [-C CALLBACK] [-c QUANTUM] [ARRAY] Read lines from the standard input into the indexed array variable - ARRAY, or from file descriptor FD if the '-u' option is supplied. + ARRAY, or from file descriptor FD if the ‘-u’ option is supplied. - A synonym for 'mapfile'. + A synonym for ‘mapfile’. -'source' +‘source’ source FILENAME - A synonym for '.' (*note Bourne Shell Builtins::). + A synonym for ‘.’ (*note Bourne Shell Builtins::). -'type' +‘type’ type [-afptP] [NAME ...] For each NAME, indicate how it would be interpreted if used as a command name. - If the '-t' option is used, 'type' prints a single word which is - one of 'alias', 'function', 'builtin', 'file' or 'keyword', if NAME - is an alias, shell function, shell builtin, disk file, or shell - reserved word, respectively. If the NAME is not found, then - nothing is printed, and 'type' returns a failure status. + If the ‘-t’ option is used, ‘type’ prints a single word which is + one of ‘alias’, ‘keyword’, ‘function’, ‘builtin’, or ‘file’, if + NAME is an alias, shell reserved word, shell function, shell + builtin, or executable disk file, respectively. If the NAME is not + found, then nothing is printed, and ‘type’ returns a failure + status. - If the '-p' option is used, 'type' either returns the name of the - disk file that would be executed, or nothing if '-t' would not - return 'file'. + If the ‘-p’ option is used, ‘type’ either returns the name of the + executable file that would be found by searching ‘$PATH’, or + nothing if ‘-t’ would not return ‘file’. - The '-P' option forces a path search for each NAME, even if '-t' - would not return 'file'. + The ‘-P’ option forces a path search for each NAME, even if ‘-t’ + would not return ‘file’. - If a command is hashed, '-p' and '-P' print the hashed value, which - is not necessarily the file that appears first in '$PATH'. + If a NAME is present in the table of hashed commands, options ‘-p’ + and ‘-P’ print the hashed value, which is not necessarily the file + that appears first in ‘$PATH’. - If the '-a' option is used, 'type' returns all of the places that - contain an executable named FILE. This includes aliases and - functions, if and only if the '-p' option is not also used. + If the ‘-a’ option is used, ‘type’ returns all of the places that + contain a command named NAME. This includes aliases, reserved + words, functions, and builtins, but the path search options (‘-p’ + and ‘-P’) can be supplied to restrict the output to executable + files. If ‘-a’ is supplied with ‘-p’, ‘type’ does not look in the + table of hashed commands, and only performs a ‘PATH’ search for + NAME. - If the '-f' option is used, 'type' does not attempt to find shell - functions, as with the 'command' builtin. + If the ‘-f’ option is used, ‘type’ does not attempt to find shell + functions, as with the ‘command’ builtin. The return status is zero if all of the NAMEs are found, non-zero if any are not found. -'typeset' +‘typeset’ typeset [-afFgrxilnrtux] [-p] [NAME[=VALUE] ...] - The 'typeset' command is supplied for compatibility with the Korn - shell. It is a synonym for the 'declare' builtin command. + The ‘typeset’ command is supplied for compatibility with the Korn + shell. It is a synonym for the ‘declare’ builtin command. -'ulimit' +‘ulimit’ ulimit [-HS] -a ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [LIMIT] - 'ulimit' provides control over the resources available to processes + ‘ulimit’ provides control over the resources available to processes started by the shell, on systems that allow such control. If an option is given, it is interpreted as follows: - '-S' + ‘-S’ Change and report the soft limit associated with a resource. - '-H' + ‘-H’ Change and report the hard limit associated with a resource. - '-a' + ‘-a’ All current limits are reported; no limits are set. - '-b' + ‘-b’ The maximum socket buffer size. - '-c' + ‘-c’ The maximum size of core files created. - '-d' + ‘-d’ The maximum size of a process's data segment. - '-e' + ‘-e’ The maximum scheduling priority ("nice"). - '-f' + ‘-f’ The maximum size of files written by the shell and its children. - '-i' + ‘-i’ The maximum number of pending signals. - '-k' + ‘-k’ The maximum number of kqueues that may be allocated. - '-l' + ‘-l’ The maximum size that may be locked into memory. - '-m' + ‘-m’ The maximum resident set size (many systems do not honor this limit). - '-n' + ‘-n’ The maximum number of open file descriptors (most systems do not allow this value to be set). - '-p' + ‘-p’ The pipe buffer size. - '-q' + ‘-q’ The maximum number of bytes in POSIX message queues. - '-r' + ‘-r’ The maximum real-time scheduling priority. - '-s' + ‘-s’ The maximum stack size. - '-t' + ‘-t’ The maximum amount of cpu time in seconds. - '-u' + ‘-u’ The maximum number of processes available to a single user. - '-v' + ‘-v’ The maximum amount of virtual memory available to the shell, and, on some systems, to its children. - '-x' + ‘-x’ The maximum number of file locks. - '-P' + ‘-P’ The maximum number of pseudoterminals. - '-R' + ‘-R’ The maximum time a real-time process can run before blocking, in microseconds. - '-T' + ‘-T’ The maximum number of threads. - If LIMIT is given, and the '-a' option is not used, LIMIT is the + If LIMIT is given, and the ‘-a’ option is not used, LIMIT is the new value of the specified resource. The special LIMIT values - 'hard', 'soft', and 'unlimited' stand for the current hard limit, + ‘hard’, ‘soft’, and ‘unlimited’ stand for the current hard limit, the current soft limit, and no limit, respectively. A hard limit cannot be increased by a non-root user once it is set; a soft limit may be increased up to the value of the hard limit. Otherwise, the current value of the soft limit for the specified resource is - printed, unless the '-H' option is supplied. When more than one + printed, unless the ‘-H’ option is supplied. When more than one resource is specified, the limit name and unit, if appropriate, are - printed before the value. When setting new limits, if neither '-H' - nor '-S' is supplied, both the hard and soft limits are set. If no - option is given, then '-f' is assumed. Values are in 1024-byte - increments, except for '-t', which is in seconds; '-R', which is in - microseconds; '-p', which is in units of 512-byte blocks; '-P', - '-T', '-b', '-k', '-n' and '-u', which are unscaled values; and, - when in POSIX Mode (*note Bash POSIX Mode::), '-c' and '-f', which + printed before the value. When setting new limits, if neither ‘-H’ + nor ‘-S’ is supplied, both the hard and soft limits are set. If no + option is given, then ‘-f’ is assumed. Values are in 1024-byte + increments, except for ‘-t’, which is in seconds; ‘-R’, which is in + microseconds; ‘-p’, which is in units of 512-byte blocks; ‘-P’, + ‘-T’, ‘-b’, ‘-k’, ‘-n’ and ‘-u’, which are unscaled values; and, + when in POSIX Mode (*note Bash POSIX Mode::), ‘-c’ and ‘-f’, which are in 512-byte increments. The return status is zero unless an invalid option or argument is supplied, or an error occurs while setting a new limit. -'unalias' +‘unalias’ unalias [-a] [NAME ... ] - Remove each NAME from the list of aliases. If '-a' is supplied, + Remove each NAME from the list of aliases. If ‘-a’ is supplied, all aliases are removed. Aliases are described in *note Aliases::.  @@ -4413,15 +4569,17 @@ File: bash.info, Node: The Set Builtin, Next: The Shopt Builtin, Up: Modifyin 4.3.1 The Set Builtin --------------------- -This builtin is so complicated that it deserves its own section. 'set' +This builtin is so complicated that it deserves its own section. ‘set’ allows you to change the values of shell options and set the positional parameters, or to display the names and values of shell variables. -'set' +‘set’ set [-abefhkmnptuvxBCEHPT] [-o OPTION-NAME] [--] [-] [ARGUMENT ...] set [+abefhkmnptuvxBCEHPT] [+o OPTION-NAME] [--] [-] [ARGUMENT ...] + set -o + set +o - If no options or arguments are supplied, 'set' displays the names + If no options or arguments are supplied, ‘set’ displays the names and values of all shell variables and functions, sorted according to the current locale, in a format that may be reused as input for setting or resetting the currently-set variables. Read-only @@ -4431,30 +4589,30 @@ parameters, or to display the names and values of shell variables. When options are supplied, they set or unset shell attributes. Options, if specified, have the following meanings: - '-a' + ‘-a’ Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands. - '-b' + ‘-b’ Cause the status of terminated background jobs to be reported immediately, rather than before printing the next primary prompt. - '-e' + ‘-e’ Exit immediately if a pipeline (*note Pipelines::), which may consist of a single simple command (*note Simple Commands::), a list (*note Lists::), or a compound command (*note Compound Commands::) returns a non-zero status. The shell does not exit if the command that fails is part of the command list - immediately following a 'while' or 'until' keyword, part of - the test in an 'if' statement, part of any command executed in - a '&&' or '||' list except the command following the final - '&&' or '||', any command in a pipeline but the last, or if - the command's return status is being inverted with '!'. If a + immediately following a ‘while’ or ‘until’ keyword, part of + the test in an ‘if’ statement, part of any command executed in + a ‘&&’ or ‘||’ list except the command following the final + ‘&&’ or ‘||’, any command in a pipeline but the last, or if + the command's return status is being inverted with ‘!’. If a compound command other than a subshell returns a non-zero - status because a command failed while '-e' was being ignored, - the shell does not exit. A trap on 'ERR', if set, is executed + status because a command failed while ‘-e’ was being ignored, + the shell does not exit. A trap on ‘ERR’, if set, is executed before the shell exits. This option applies to the shell environment and each subshell @@ -4463,232 +4621,237 @@ parameters, or to display the names and values of shell variables. executing all the commands in the subshell. If a compound command or shell function executes in a context - where '-e' is being ignored, none of the commands executed + where ‘-e’ is being ignored, none of the commands executed within the compound command or function body will be affected - by the '-e' setting, even if '-e' is set and a command returns + by the ‘-e’ setting, even if ‘-e’ is set and a command returns a failure status. If a compound command or shell function - sets '-e' while executing in a context where '-e' is ignored, + sets ‘-e’ while executing in a context where ‘-e’ is ignored, that setting will not have any effect until the compound command or the command containing the function call completes. - '-f' + ‘-f’ Disable filename expansion (globbing). - '-h' + ‘-h’ Locate and remember (hash) commands as they are looked up for execution. This option is enabled by default. - '-k' + ‘-k’ All arguments in the form of assignment statements are placed in the environment for a command, not just those that precede the command name. - '-m' + ‘-m’ Job control is enabled (*note Job Control::). All processes run in a separate process group. When a background job completes, the shell prints a line containing its exit status. - '-n' + ‘-n’ Read commands but do not execute them. This may be used to check a script for syntax errors. This option is ignored by interactive shells. - '-o OPTION-NAME' + ‘-o OPTION-NAME’ - Set the option corresponding to OPTION-NAME: + Set the option corresponding to OPTION-NAME. If ‘-o’ is + supplied with no OPTION-NAME, ‘set’ prints the current shell + options settings. If ‘+o’ is supplied with no OPTION-NAME, + ‘set’ prints a series of ‘set’ commands to recreate the + current option settings on the standard output. Valid option + names are: - 'allexport' - Same as '-a'. + ‘allexport’ + Same as ‘-a’. - 'braceexpand' - Same as '-B'. + ‘braceexpand’ + Same as ‘-B’. - 'emacs' - Use an 'emacs'-style line editing interface (*note + ‘emacs’ + Use an ‘emacs’-style line editing interface (*note Command Line Editing::). This also affects the editing - interface used for 'read -e'. + interface used for ‘read -e’. - 'errexit' - Same as '-e'. + ‘errexit’ + Same as ‘-e’. - 'errtrace' - Same as '-E'. + ‘errtrace’ + Same as ‘-E’. - 'functrace' - Same as '-T'. + ‘functrace’ + Same as ‘-T’. - 'hashall' - Same as '-h'. + ‘hashall’ + Same as ‘-h’. - 'histexpand' - Same as '-H'. + ‘histexpand’ + Same as ‘-H’. - 'history' + ‘history’ Enable command history, as described in *note Bash History Facilities::. This option is on by default in interactive shells. - 'ignoreeof' + ‘ignoreeof’ An interactive shell will not exit upon reading EOF. - 'keyword' - Same as '-k'. + ‘keyword’ + Same as ‘-k’. - 'monitor' - Same as '-m'. + ‘monitor’ + Same as ‘-m’. - 'noclobber' - Same as '-C'. + ‘noclobber’ + Same as ‘-C’. - 'noexec' - Same as '-n'. + ‘noexec’ + Same as ‘-n’. - 'noglob' - Same as '-f'. + ‘noglob’ + Same as ‘-f’. - 'nolog' + ‘nolog’ Currently ignored. - 'notify' - Same as '-b'. + ‘notify’ + Same as ‘-b’. - 'nounset' - Same as '-u'. + ‘nounset’ + Same as ‘-u’. - 'onecmd' - Same as '-t'. + ‘onecmd’ + Same as ‘-t’. - 'physical' - Same as '-P'. + ‘physical’ + Same as ‘-P’. - 'pipefail' + ‘pipefail’ 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. - 'posix' + ‘posix’ Change the behavior of Bash where the default operation differs from the POSIX standard to match the standard (*note Bash POSIX Mode::). This is intended to make Bash behave as a strict superset of that standard. - 'privileged' - Same as '-p'. + ‘privileged’ + Same as ‘-p’. - 'verbose' - Same as '-v'. + ‘verbose’ + Same as ‘-v’. - 'vi' - Use a 'vi'-style line editing interface. This also - affects the editing interface used for 'read -e'. + ‘vi’ + Use a ‘vi’-style line editing interface. This also + affects the editing interface used for ‘read -e’. - 'xtrace' - Same as '-x'. + ‘xtrace’ + Same as ‘-x’. - '-p' - Turn on privileged mode. In this mode, the '$BASH_ENV' and - '$ENV' files are not processed, shell functions are not - inherited from the environment, and the 'SHELLOPTS', - 'BASHOPTS', 'CDPATH' and 'GLOBIGNORE' variables, if they + ‘-p’ + Turn on privileged mode. In this mode, the ‘$BASH_ENV’ and + ‘$ENV’ files are not processed, shell functions are not + inherited from the environment, and the ‘SHELLOPTS’, + ‘BASHOPTS’, ‘CDPATH’ and ‘GLOBIGNORE’ variables, if they appear in the environment, are ignored. If the shell is started with the effective user (group) id not equal to the - real user (group) id, and the '-p' option is not supplied, + real user (group) id, and the ‘-p’ option is not supplied, these actions are taken and the effective user id is set to - the real user id. If the '-p' option is supplied at startup, + the real user id. If the ‘-p’ 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 ids. - '-r' - Enable restricted shell mode. This option cannot be unset - once it has been set. + ‘-r’ + Enable restricted shell mode (*note The Restricted Shell::). + This option cannot be unset once it has been set. - '-t' + ‘-t’ Exit after reading and executing one command. - '-u' + ‘-u’ Treat unset variables and parameters other than the special - parameters '@' or '*', or array variables subscripted with '@' - or '*', as an error when performing parameter expansion. An + parameters ‘@’ or ‘*’, or array variables subscripted with ‘@’ + or ‘*’, as an error when performing parameter expansion. An error message will be written to the standard error, and a non-interactive shell will exit. - '-v' + ‘-v’ Print shell input lines as they are read. - '-x' - Print a trace of simple commands, 'for' commands, 'case' - commands, 'select' commands, and arithmetic 'for' commands and - their arguments or associated word lists after they are - expanded and before they are executed. The value of the 'PS4' - variable is expanded and the resultant value is printed before + ‘-x’ + Print a trace of simple commands, ‘for’ commands, ‘case’ + commands, ‘select’ commands, and arithmetic ‘for’ commands and + their arguments or associated word lists to standard error + after they are expanded and before they are executed. The + shell prints the expanded value of the ‘PS4’ variable before the command and its expanded arguments. - '-B' + ‘-B’ The shell will perform brace expansion (*note Brace Expansion::). This option is on by default. - '-C' - Prevent output redirection using '>', '>&', and '<>' from + ‘-C’ + Prevent output redirection using ‘>’, ‘>&’, and ‘<>’ from overwriting existing files. - '-E' - If set, any trap on 'ERR' is inherited by shell functions, + ‘-E’ + If set, any trap on ‘ERR’ is inherited by shell functions, command substitutions, and commands executed in a subshell - environment. The 'ERR' trap is normally not inherited in such + environment. The ‘ERR’ trap is normally not inherited in such cases. - '-H' - Enable '!' style history substitution (*note History + ‘-H’ + Enable ‘!’ style history substitution (*note History Interaction::). This option is on by default for interactive shells. - '-P' + ‘-P’ If set, do not resolve symbolic links when performing commands - such as 'cd' which change the current directory. The physical + such as ‘cd’ which change the current directory. The physical directory is used instead. By default, Bash follows the logical chain of directories when performing commands which change the current directory. - For example, if '/usr/sys' is a symbolic link to - '/usr/local/sys' then: + For example, if ‘/usr/sys’ is a symbolic link to + ‘/usr/local/sys’ then: $ cd /usr/sys; echo $PWD /usr/sys $ cd ..; pwd /usr - If 'set -P' is on, then: + If ‘set -P’ is on, then: $ cd /usr/sys; echo $PWD /usr/local/sys $ cd ..; pwd /usr/local - '-T' - If set, any trap on 'DEBUG' and 'RETURN' are inherited by + ‘-T’ + If set, any trap on ‘DEBUG’ and ‘RETURN’ are inherited by shell functions, command substitutions, and commands executed - in a subshell environment. The 'DEBUG' and 'RETURN' traps are + in a subshell environment. The ‘DEBUG’ and ‘RETURN’ traps are normally not inherited in such cases. - '--' + ‘--’ If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters are set to the ARGUMENTS, even if some of them begin with a - '-'. + ‘-’. - '-' + ‘-’ Signal the end of options, cause all remaining ARGUMENTS to be - assigned to the positional parameters. The '-x' and '-v' + assigned to the positional parameters. The ‘-x’ and ‘-v’ options are turned off. If there are no arguments, the positional parameters remain unchanged. - Using '+' rather than '-' causes these options to be turned off. + Using ‘+’ rather than ‘-’ causes these options to be turned off. The options can also be used upon invocation of the shell. The - current set of options may be found in '$-'. + current set of options may be found in ‘$-’. The remaining N ARGUMENTS are positional parameters and are - assigned, in order, to '$1', '$2', ... '$N'. The special parameter - '#' is set to N. + assigned, in order, to ‘$1’, ‘$2’, ... ‘$N’. The special parameter + ‘#’ is set to N. The return status is always zero unless an invalid option is supplied. @@ -4701,39 +4864,39 @@ File: bash.info, Node: The Shopt Builtin, Prev: The Set Builtin, Up: Modifyin This builtin allows you to change additional shell optional behavior. -'shopt' +‘shopt’ shopt [-pqsu] [-o] [OPTNAME ...] Toggle the values of settings controlling optional shell behavior. - The settings can be either those listed below, or, if the '-o' - option is used, those available with the '-o' option to the 'set' + The settings can be either those listed below, or, if the ‘-o’ + option is used, those available with the ‘-o’ option to the ‘set’ builtin command (*note The Set Builtin::). With no options, or - with the '-p' option, a list of all settable options is displayed, + with the ‘-p’ option, a list of all settable options is displayed, with an indication of whether or not each is set; if OPTNAMEs are - supplied, the output is restricted to those options. The '-p' + supplied, the output is restricted to those options. The ‘-p’ option causes output to be displayed in a form that may be reused as input. Other options have the following meanings: - '-s' + ‘-s’ Enable (set) each OPTNAME. - '-u' + ‘-u’ Disable (unset) each OPTNAME. - '-q' + ‘-q’ Suppresses normal output; the return status indicates whether the OPTNAME is set or unset. If multiple OPTNAME arguments - are given with '-q', the return status is zero if all OPTNAMEs + are given with ‘-q’, the return status is zero if all OPTNAMEs are enabled; non-zero otherwise. - '-o' + ‘-o’ Restricts the values of OPTNAME to be those defined for the - '-o' option to the 'set' builtin (*note The Set Builtin::). + ‘-o’ option to the ‘set’ builtin (*note The Set Builtin::). - If either '-s' or '-u' is used with no OPTNAME arguments, 'shopt' + If either ‘-s’ or ‘-u’ is used with no OPTNAME arguments, ‘shopt’ shows only those options which are set or unset, respectively. - Unless otherwise noted, the 'shopt' options are disabled (off) by + Unless otherwise noted, the ‘shopt’ options are disabled (off) by default. The return status when listing options is zero if all OPTNAMEs are @@ -4741,39 +4904,42 @@ This builtin allows you to change additional shell optional behavior. the return status is zero unless an OPTNAME is not a valid shell option. - The list of 'shopt' options is: + The list of ‘shopt’ options is: - 'assoc_expand_once' + ‘array_expand_once’ If set, the shell suppresses multiple evaluation of - associative array subscripts during arithmetic expression - evaluation, while executing builtins that can perform variable - assignments, and while executing builtins that perform array - dereferencing. + associative and indexed array subscripts during arithmetic + expression evaluation, while executing builtins that can + perform variable assignments, and while executing builtins + that perform array dereferencing. + + ‘assoc_expand_once’ + Deprecated; a synonym for ‘array_expand_once’. - 'autocd' + ‘autocd’ If set, a command name that is the name of a directory is - executed as if it were the argument to the 'cd' command. This + executed as if it were the argument to the ‘cd’ command. This option is only used by interactive shells. - 'cdable_vars' - If this is set, an argument to the 'cd' builtin command that + ‘cdable_vars’ + If this is set, an argument to the ‘cd’ builtin command that is not a directory is assumed to be the name of a variable whose value is the directory to change to. - 'cdspell' + ‘cdspell’ If set, minor errors in the spelling of a directory component - in a 'cd' command will be corrected. The errors checked for + in a ‘cd’ command will be corrected. The errors checked for are transposed characters, a missing character, and a character too many. If a correction is found, the corrected path is printed, and the command proceeds. This option is only used by interactive shells. - 'checkhash' + ‘checkhash’ If this is set, Bash checks that a command found in the hash table exists before trying to execute it. If a hashed command no longer exists, a normal path search is performed. - 'checkjobs' + ‘checkjobs’ If set, Bash lists the status of any stopped and running jobs before exiting an interactive shell. If any jobs are running, this causes the exit to be deferred until a second exit is @@ -4781,29 +4947,29 @@ This builtin allows you to change additional shell optional behavior. Control::). The shell always postpones exiting if any jobs are stopped. - 'checkwinsize' + ‘checkwinsize’ If set, Bash checks the window size after each external (non-builtin) command and, if necessary, updates the values of - 'LINES' and 'COLUMNS'. This option is enabled by default. + ‘LINES’ and ‘COLUMNS’. This option is enabled by default. - 'cmdhist' + ‘cmdhist’ If set, Bash attempts to save all lines of a multiple-line command in the same history entry. This allows easy re-editing of multi-line commands. This option is enabled by default, but only has an effect if command history is enabled (*note Bash History Facilities::). - 'compat31' - 'compat32' - 'compat40' - 'compat41' - 'compat42' - 'compat43' - 'compat44' + ‘compat31’ + ‘compat32’ + ‘compat40’ + ‘compat41’ + ‘compat42’ + ‘compat43’ + ‘compat44’ These control aspects of the shell's compatibility mode (*note Shell Compatibility Mode::). - 'complete_fullquote' + ‘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 @@ -4812,257 +4978,260 @@ This builtin allows you to change additional shell optional behavior. 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 + 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. - 'direxpand' + ‘direxpand’ If set, Bash replaces directory names with the results of word expansion when performing filename completion. This changes the contents of the Readline editing buffer. If not set, Bash attempts to preserve what the user typed. - 'dirspell' + ‘dirspell’ If set, Bash attempts spelling correction on directory names during word completion if the directory name initially supplied does not exist. - 'dotglob' + ‘dotglob’ If set, Bash includes filenames beginning with a '.' in the - results of filename expansion. The filenames '.' and '..' - must always be matched explicitly, even if 'dotglob' is set. + results of filename expansion. The filenames ‘.’ and ‘..’ + must always be matched explicitly, even if ‘dotglob’ is set. - 'execfail' + ‘execfail’ If this is set, a non-interactive shell will not exit if it - cannot execute the file specified as an argument to the 'exec' - builtin command. An interactive shell does not exit if 'exec' + cannot execute the file specified as an argument to the ‘exec’ + builtin command. An interactive shell does not exit if ‘exec’ fails. - 'expand_aliases' + ‘expand_aliases’ If set, aliases are expanded as described below under Aliases, *note Aliases::. This option is enabled by default for interactive shells. - 'extdebug' + ‘extdebug’ If set at shell invocation, or in a shell startup file, arrange to execute the debugger profile before the shell - starts, identical to the '--debugger' option. If set after + starts, identical to the ‘--debugger’ option. If set after invocation, behavior intended for use by debuggers is enabled: - 1. The '-F' option to the 'declare' builtin (*note Bash + 1. The ‘-F’ option to the ‘declare’ builtin (*note Bash Builtins::) displays the source file name and line number corresponding to each function name supplied as an argument. - 2. If the command run by the 'DEBUG' trap returns a non-zero + 2. If the command run by the ‘DEBUG’ trap returns a non-zero value, the next command is skipped and not executed. - 3. If the command run by the 'DEBUG' trap returns a value of + 3. If the command run by the ‘DEBUG’ trap returns a value of 2, and the shell is executing in a subroutine (a shell - function or a shell script executed by the '.' or - 'source' builtins), the shell simulates a call to - 'return'. + function or a shell script executed by the ‘.’ or + ‘source’ builtins), the shell simulates a call to + ‘return’. - 4. 'BASH_ARGC' and 'BASH_ARGV' are updated as described in + 4. ‘BASH_ARGC’ and ‘BASH_ARGV’ are updated as described in their descriptions (*note Bash Variables::). 5. Function tracing is enabled: command substitution, shell - functions, and subshells invoked with '( COMMAND )' - inherit the 'DEBUG' and 'RETURN' traps. + functions, and subshells invoked with ‘( COMMAND )’ + inherit the ‘DEBUG’ and ‘RETURN’ traps. 6. Error tracing is enabled: command substitution, shell - functions, and subshells invoked with '( COMMAND )' - inherit the 'ERR' trap. + functions, and subshells invoked with ‘( COMMAND )’ + inherit the ‘ERR’ trap. - 'extglob' + ‘extglob’ If set, the extended pattern matching features described above (*note Pattern Matching::) are enabled. - 'extquote' - If set, '$'STRING'' and '$"STRING"' quoting is performed - within '${PARAMETER}' expansions enclosed in double quotes. + ‘extquote’ + If set, ‘$'STRING'’ and ‘$"STRING"’ quoting is performed + within ‘${PARAMETER}’ expansions enclosed in double quotes. This option is enabled by default. - 'failglob' + ‘failglob’ If set, patterns which fail to match filenames during filename expansion result in an expansion error. - 'force_fignore' - If set, the suffixes specified by the 'FIGNORE' shell variable + ‘force_fignore’ + If set, the suffixes specified by the ‘FIGNORE’ shell variable cause words to be ignored when performing word completion even if the ignored words are the only possible completions. *Note - Bash Variables::, for a description of 'FIGNORE'. This option + Bash Variables::, for a description of ‘FIGNORE’. This option is enabled by default. - 'globasciiranges' + ‘globasciiranges’ If set, range expressions used in pattern matching bracket expressions (*note Pattern Matching::) behave as if in the traditional C locale when performing comparisons. That is, the current locale's collating sequence is not taken into - account, so 'b' will not collate between 'A' and 'B', and + account, so ‘b’ will not collate between ‘A’ and ‘B’, and upper-case and lower-case ASCII characters will collate together. - 'globskipdots' - If set, filename expansion will never match the filenames '.' - and '..', even if the pattern begins with a '.'. This option + ‘globskipdots’ + If set, filename expansion will never match the filenames ‘.’ + and ‘..’, even if the pattern begins with a ‘.’. This option is enabled by default. - 'globstar' - If set, the pattern '**' used in a filename expansion context + ‘globstar’ + If set, the pattern ‘**’ used in a filename expansion context will match all files and zero or more directories and - subdirectories. If the pattern is followed by a '/', only + subdirectories. If the pattern is followed by a ‘/’, only directories and subdirectories match. - 'gnu_errfmt' + ‘gnu_errfmt’ If set, shell error messages are written in the standard GNU error message format. - 'histappend' + ‘histappend’ If set, the history list is appended to the file named by the - value of the 'HISTFILE' variable when the shell exits, rather + value of the ‘HISTFILE’ variable when the shell exits, rather than overwriting the file. - 'histreedit' + ‘histreedit’ If set, and Readline is being used, a user is given the opportunity to re-edit a failed history substitution. - 'histverify' + ‘histverify’ If set, and Readline is being used, the results of history substitution are not immediately passed to the shell parser. Instead, the resulting line is loaded into the Readline editing buffer, allowing further modification. - 'hostcomplete' + ‘hostcomplete’ If set, and Readline is being used, Bash will attempt to - perform hostname completion when a word containing a '@' is + perform hostname completion when a word containing a ‘@’ is being completed (*note Commands For Completion::). This option is enabled by default. - 'huponexit' - If set, Bash will send 'SIGHUP' to all jobs when an + ‘huponexit’ + If set, Bash will send ‘SIGHUP’ to all jobs when an interactive login shell exits (*note Signals::). - 'inherit_errexit' + ‘inherit_errexit’ If set, command substitution inherits the value of the - 'errexit' option, instead of unsetting it in the subshell + ‘errexit’ option, instead of unsetting it in the subshell environment. This option is enabled when POSIX mode is enabled. - 'interactive_comments' - Allow a word beginning with '#' to cause that word and all + ‘interactive_comments’ + Allow a word beginning with ‘#’ to cause that word and all remaining characters on that line to be ignored in an interactive shell. This option is enabled by default. - 'lastpipe' + ‘lastpipe’ If set, and job control is not active, the shell runs the last command of a pipeline not executed in the background in the current shell environment. - 'lithist' - If enabled, and the 'cmdhist' option is enabled, multi-line + ‘lithist’ + If enabled, and the ‘cmdhist’ option is enabled, multi-line commands are saved to the history with embedded newlines rather than using semicolon separators where possible. - 'localvar_inherit' + ‘localvar_inherit’ If set, local variables inherit the value and attributes of a variable of the same name that exists at a previous scope - before any new value is assigned. The 'nameref' attribute is + before any new value is assigned. The ‘nameref’ attribute is not inherited. - 'localvar_unset' - If set, calling 'unset' on local variables in previous + ‘localvar_unset’ + If set, calling ‘unset’ on local variables in previous function scopes marks them so subsequent lookups find them unset until that function returns. This is identical to the behavior of unsetting local variables at the current function scope. - 'login_shell' + ‘login_shell’ The shell sets this option if it is started as a login shell (*note Invoking Bash::). The value may not be changed. - 'mailwarn' + ‘mailwarn’ If set, and a file that Bash is checking for mail has been - accessed since the last time it was checked, the message '"The - mail in MAILFILE has been read"' is displayed. + accessed since the last time it was checked, the message ‘"The + mail in MAILFILE has been read"’ is displayed. - 'no_empty_cmd_completion' + ‘no_empty_cmd_completion’ If set, and Readline is being used, Bash will not attempt to - search the 'PATH' for possible completions when completion is + search the ‘PATH’ for possible completions when completion is attempted on an empty line. - 'nocaseglob' + ‘nocaseglob’ If set, Bash matches filenames in a case-insensitive fashion when performing filename expansion. - 'nocasematch' + ‘nocasematch’ If set, Bash matches patterns in a case-insensitive fashion - when performing matching while executing 'case' or '[[' + when performing matching while executing ‘case’ or ‘[[’ conditional commands (*note Conditional Constructs::, when performing pattern substitution word expansions, or when filtering possible completions as part of programmable completion. - 'noexpand_translation' + ‘noexpand_translation’ If set, Bash encloses the translated results of $"..." quoting in single quotes instead of double quotes. If the string is not translated, this has no effect. - 'nullglob' - If set, Bash allows filename patterns which match no files to - expand to a null string, rather than themselves. + ‘nullglob’ + If set, filename expansion patterns which match no files + (*note Filename Expansion::) expand to nothing and are + removed, rather than expanding to themselves. - 'patsub_replacement' - If set, Bash expands occurrences of '&' in the replacement + ‘patsub_replacement’ + If set, Bash expands occurrences of ‘&’ in the replacement string of pattern substitution to the text matched by the pattern, as described above (*note Shell Parameter Expansion::). This option is enabled by default. - 'progcomp' + ‘progcomp’ If set, the programmable completion facilities (*note Programmable Completion::) are enabled. This option is enabled by default. - 'progcomp_alias' + ‘progcomp_alias’ If set, and programmable completion is enabled, Bash treats a command name that doesn't have any completions as a possible alias and attempts alias expansion. If it has an alias, Bash attempts programmable completion using the command word resulting from the expanded alias. - 'promptvars' + ‘promptvars’ If set, prompt strings undergo parameter expansion, command substitution, arithmetic expansion, and quote removal after being expanded as described below (*note Controlling the Prompt::). This option is enabled by default. - 'restricted_shell' + ‘restricted_shell’ The shell sets this option if it is started in restricted mode (*note The Restricted Shell::). The value may not be changed. This is not reset when the startup files are executed, allowing the startup files to discover whether or not a shell is restricted. - 'shift_verbose' - If this is set, the 'shift' builtin prints an error message + ‘shift_verbose’ + If this is set, the ‘shift’ builtin prints an error message when the shift count exceeds the number of positional parameters. - 'sourcepath' - If set, the '.' ('source') builtin uses the value of 'PATH' to + ‘sourcepath’ + If set, the ‘.’ (‘source’) builtin uses the value of ‘PATH’ to find the directory containing the file supplied as an argument. This option is enabled by default. - 'varredir_close' + ‘varredir_close’ If set, the shell automatically closes file descriptors - assigned using the '{varname}' redirection syntax (*note + assigned using the ‘{varname}’ redirection syntax (*note Redirections::) instead of leaving them open when the command completes. - 'xpg_echo' - If set, the 'echo' builtin expands backslash-escape sequences - by default. + ‘xpg_echo’ + If set, the ‘echo’ builtin expands backslash-escape sequences + by default. If the ‘posix’ shell option (*note The Set + Builtin::) is also enabled, ‘echo’ does not interpret any + options.  File: bash.info, Node: Special Builtins, Prev: Modifying Shell Behavior, Up: Shell Builtin Commands @@ -5089,8 +5258,8 @@ differently than the rest of the Bash builtin commands. The Bash POSIX mode is described in *note Bash POSIX Mode::. These are the POSIX special builtins: - break : . continue eval exec exit export readonly return set - shift trap unset + break : . source continue eval exec exit export readonly return set + shift times trap unset  File: bash.info, Node: Shell Variables, Next: Bash Features, Prev: Shell Builtin Commands, Up: Top @@ -5116,53 +5285,53 @@ File: bash.info, Node: Bourne Shell Variables, Next: Bash Variables, Up: Shel Bash uses certain shell variables in the same way as the Bourne shell. In some cases, Bash assigns a default value to the variable. -'CDPATH' +‘CDPATH’ A colon-separated list of directories used as a search path for the - 'cd' builtin command. + ‘cd’ builtin command. -'HOME' - The current user's home directory; the default for the 'cd' builtin +‘HOME’ + The current user's home directory; the default for the ‘cd’ builtin command. The value of this variable is also used by tilde expansion (*note Tilde Expansion::). -'IFS' +‘IFS’ A list of characters that separate fields; used when the shell splits words as part of expansion. -'MAIL' +‘MAIL’ If this parameter is set to a filename or directory name and the - 'MAILPATH' variable is not set, Bash informs the user of the + ‘MAILPATH’ variable is not set, Bash informs the user of the arrival of mail in the specified file or Maildir-format directory. -'MAILPATH' +‘MAILPATH’ A colon-separated list of filenames which the shell periodically checks for new mail. Each list entry can specify the message that is printed when new mail arrives in the mail file by separating the - filename from the message with a '?'. When used in the text of the - message, '$_' expands to the name of the current mail file. + filename from the message with a ‘?’. When used in the text of the + message, ‘$_’ expands to the name of the current mail file. -'OPTARG' - The value of the last option argument processed by the 'getopts' +‘OPTARG’ + The value of the last option argument processed by the ‘getopts’ builtin. -'OPTIND' - The index of the last option argument processed by the 'getopts' +‘OPTIND’ + The index of the last option argument processed by the ‘getopts’ builtin. -'PATH' +‘PATH’ A colon-separated list of directories in which the shell looks for commands. A zero-length (null) directory name in the value of - 'PATH' indicates the current directory. A null directory name may + ‘PATH’ indicates the current directory. A null directory name may appear as two adjacent colons, or as an initial or trailing colon. -'PS1' - The primary prompt string. The default value is '\s-\v\$ '. *Note +‘PS1’ + The primary prompt string. The default value is ‘\s-\v\$ ’. *Note Controlling the Prompt::, for the complete list of escape sequences - that are expanded before 'PS1' is displayed. + that are expanded before ‘PS1’ is displayed. -'PS2' - The secondary prompt string. The default value is '> '. 'PS2' is - expanded in the same way as 'PS1' before being displayed. +‘PS2’ + The secondary prompt string. The default value is ‘> ’. ‘PS2’ is + expanded in the same way as ‘PS1’ before being displayed.  File: bash.info, Node: Bash Variables, Prev: Bourne Shell Variables, Up: Shell Variables @@ -5177,7 +5346,7 @@ normally treat them specially. variables for controlling the job control facilities (*note Job Control Variables::). -'_' +‘_’ ($_, an underscore.) At shell startup, set to the pathname used to invoke the shell or shell script being executed as passed in the environment or argument list. Subsequently, expands to the last @@ -5187,386 +5356,431 @@ Variables::). command. When checking mail, this parameter holds the name of the mail file. -'BASH' +‘BASH’ The full pathname used to execute the current instance of Bash. -'BASHOPTS' +‘BASHOPTS’ A colon-separated list of enabled shell options. Each word in the - list is a valid argument for the '-s' option to the 'shopt' builtin + list is a valid argument for the ‘-s’ option to the ‘shopt’ builtin command (*note The Shopt Builtin::). The options appearing in - 'BASHOPTS' are those reported as 'on' by 'shopt'. If this variable + ‘BASHOPTS’ are those reported as ‘on’ by ‘shopt’. If this variable is in the environment when Bash starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly. -'BASHPID' +‘BASHPID’ Expands to the process ID of the current Bash process. This - differs from '$$' under certain circumstances, such as subshells + differs from ‘$$’ under certain circumstances, such as subshells that do not require Bash to be re-initialized. Assignments to - 'BASHPID' have no effect. If 'BASHPID' is unset, it loses its + ‘BASHPID’ have no effect. If ‘BASHPID’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_ALIASES' +‘BASH_ALIASES’ An associative array variable whose members correspond to the - internal list of aliases as maintained by the 'alias' builtin. + internal list of aliases as maintained by the ‘alias’ builtin. (*note Bourne Shell Builtins::). Elements added to this array appear in the alias list; however, unsetting array elements currently does not cause aliases to be removed from the alias list. - If 'BASH_ALIASES' is unset, it loses its special properties, even + If ‘BASH_ALIASES’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_ARGC' +‘BASH_ARGC’ An array variable whose values are the number of parameters in each - frame of the current bash execution call stack. The number of + frame of the current Bash execution call stack. The number of parameters to the current subroutine (shell function or script - executed with '.' or 'source') is at the top of the stack. When a + executed with ‘.’ or ‘source’) is at the top of the stack. When a subroutine is executed, the number of parameters passed is pushed - onto 'BASH_ARGC'. The shell sets 'BASH_ARGC' only when in extended + onto ‘BASH_ARGC’. The shell sets ‘BASH_ARGC’ only when in extended debugging mode (see *note The Shopt Builtin:: for a description of - the 'extdebug' option to the 'shopt' builtin). Setting 'extdebug' + the ‘extdebug’ option to the ‘shopt’ builtin). Setting ‘extdebug’ after the shell has started to execute a script, or referencing - this variable when 'extdebug' is not set, may result in - inconsistent values. + this variable when ‘extdebug’ is not set, may result in + inconsistent values. Assignments to ‘BASH_ARGC’ have no effect, + and it may not be unset. -'BASH_ARGV' +‘BASH_ARGV’ An array variable containing all of the parameters in the current - bash execution call stack. The final parameter of the last + Bash execution call stack. The final parameter of the last subroutine call is at the top of the stack; the first parameter of the initial call is at the bottom. When a subroutine is executed, - the parameters supplied are pushed onto 'BASH_ARGV'. The shell - sets 'BASH_ARGV' only when in extended debugging mode (see *note - The Shopt Builtin:: for a description of the 'extdebug' option to - the 'shopt' builtin). Setting 'extdebug' after the shell has + the parameters supplied are pushed onto ‘BASH_ARGV’. The shell + sets ‘BASH_ARGV’ only when in extended debugging mode (see *note + The Shopt Builtin:: for a description of the ‘extdebug’ option to + the ‘shopt’ builtin). Setting ‘extdebug’ after the shell has started to execute a script, or referencing this variable when - 'extdebug' is not set, may result in inconsistent values. + ‘extdebug’ is not set, may result in inconsistent values. + Assignments to ‘BASH_ARGV’ have no effect, and it may not be unset. -'BASH_ARGV0' +‘BASH_ARGV0’ When referenced, this variable expands to the name of the shell or - shell script (identical to '$0'; *Note Special Parameters::, for + shell script (identical to ‘$0’; *Note Special Parameters::, for the description of special parameter 0). Assignment to - 'BASH_ARGV0' causes the value assigned to also be assigned to '$0'. - If 'BASH_ARGV0' is unset, it loses its special properties, even if + ‘BASH_ARGV0’ causes the value assigned to also be assigned to ‘$0’. + If ‘BASH_ARGV0’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_CMDS' +‘BASH_CMDS’ An associative array variable whose members correspond to the - internal hash table of commands as maintained by the 'hash' builtin + internal hash table of commands as maintained by the ‘hash’ builtin (*note Bourne Shell Builtins::). Elements added to this array appear in the hash table; however, unsetting array elements currently does not cause command names to be removed from the hash - table. If 'BASH_CMDS' is unset, it loses its special properties, + table. If ‘BASH_CMDS’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_COMMAND' +‘BASH_COMMAND’ The command currently being executed or about to be executed, unless the shell is executing a command as the result of a trap, in which case it is the command executing at the time of the trap. If - 'BASH_COMMAND' is unset, it loses its special properties, even if + ‘BASH_COMMAND’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_COMPAT' +‘BASH_COMPAT’ The value is used to set the shell's compatibility level. *Note Shell Compatibility Mode::, for a description of the various compatibility levels and their effects. The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42) corresponding to the - desired compatibility level. If 'BASH_COMPAT' is unset or set to + desired compatibility level. If ‘BASH_COMPAT’ is unset or set to the empty string, the compatibility level is set to the default for - the current version. If 'BASH_COMPAT' is set to a value that is + the current version. If ‘BASH_COMPAT’ is set to a value that is not one of the valid compatibility levels, the shell prints an error message and sets the compatibility level to the default for - the current version. The valid values correspond to the - compatibility levels described below (*note Shell Compatibility + the current version. A subset of the valid values correspond to + the compatibility levels described below (*note Shell Compatibility Mode::). For example, 4.2 and 42 are valid values that correspond - to the 'compat42' 'shopt' option and set the compatibility level to + to the ‘compat42’ ‘shopt’ option and set the compatibility level to 42. The current version is also a valid value. -'BASH_ENV' +‘BASH_ENV’ If this variable is set when Bash is invoked to execute a shell script, its value is expanded and used as the name of a startup file to read before executing the script. *Note Bash Startup Files::. -'BASH_EXECUTION_STRING' - The command argument to the '-c' invocation option. +‘BASH_EXECUTION_STRING’ + The command argument to the ‘-c’ invocation option. -'BASH_LINENO' +‘BASH_LINENO’ An array variable whose members are the line numbers in source - files where each corresponding member of 'FUNCNAME' was invoked. - '${BASH_LINENO[$i]}' is the line number in the source file - ('${BASH_SOURCE[$i+1]}') where '${FUNCNAME[$i]}' was called (or - '${BASH_LINENO[$i-1]}' if referenced within another shell - function). Use 'LINENO' to obtain the current line number. + files where each corresponding member of ‘FUNCNAME’ was invoked. + ‘${BASH_LINENO[$i]}’ is the line number in the source file + (‘${BASH_SOURCE[$i+1]}’) where ‘${FUNCNAME[$i]}’ was called (or + ‘${BASH_LINENO[$i-1]}’ if referenced within another shell + function). Use ‘LINENO’ to obtain the current line number. + Assignments to ‘BASH_LINENO’ have no effect, and it may not be + unset. -'BASH_LOADABLES_PATH' +‘BASH_LOADABLES_PATH’ A colon-separated list of directories in which the shell looks for - dynamically loadable builtins specified by the 'enable' command. + dynamically loadable builtins specified by the ‘enable’ command. -'BASH_REMATCH' - An array variable whose members are assigned by the '=~' binary - operator to the '[[' conditional command (*note Conditional +‘BASH_MONOSECONDS’ + Each time this variable is referenced, it expands to the value + returned by the system's monotonic clock, if one is available. If + there is no monotonic clock, this is equivalent to ‘EPOCHSECONDS’. + If ‘BASH_MONOSECONDS’ is unset, it loses its special properties, + even if it is subsequently reset. + +‘BASH_REMATCH’ + An array variable whose members are assigned by the ‘=~’ binary + operator to the ‘[[’ conditional command (*note Conditional Constructs::). The element with index 0 is the portion of the string matching the entire regular expression. The element with index N is the portion of the string matching the Nth parenthesized subexpression. -'BASH_SOURCE' +‘BASH_SOURCE’ An array variable whose members are the source filenames where the - corresponding shell function names in the 'FUNCNAME' array variable - are defined. The shell function '${FUNCNAME[$i]}' is defined in - the file '${BASH_SOURCE[$i]}' and called from - '${BASH_SOURCE[$i+1]}' + corresponding shell function names in the ‘FUNCNAME’ array variable + are defined. The shell function ‘${FUNCNAME[$i]}’ is defined in + the file ‘${BASH_SOURCE[$i]}’ and called from + ‘${BASH_SOURCE[$i+1]}’ Assignments to ‘BASH_SOURCE’ have no effect, + and it may not be unset. -'BASH_SUBSHELL' +‘BASH_SUBSHELL’ Incremented by one within each subshell or subshell environment when the shell begins executing in that environment. The initial - value is 0. If 'BASH_SUBSHELL' is unset, it loses its special + value is 0. If ‘BASH_SUBSHELL’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_VERSINFO' +‘BASH_TRAPSIG’ + Set to the signal number corresponding to the trap action being + executed during its execution. See the description of ‘trap’ + (*note Bourne Shell Builtins::) for information about signal + numbers and trap execution. + +‘BASH_VERSINFO’ A readonly array variable (*note Arrays::) whose members hold version information for this instance of Bash. The values assigned to the array members are as follows: - 'BASH_VERSINFO[0]' - The major version number (the "release"). + ‘BASH_VERSINFO[0]’ + The major version number (the “release”). - 'BASH_VERSINFO[1]' - The minor version number (the "version"). + ‘BASH_VERSINFO[1]’ + The minor version number (the “version”). - 'BASH_VERSINFO[2]' + ‘BASH_VERSINFO[2]’ The patch level. - 'BASH_VERSINFO[3]' + ‘BASH_VERSINFO[3]’ The build version. - 'BASH_VERSINFO[4]' - The release status (e.g., 'beta1'). + ‘BASH_VERSINFO[4]’ + The release status (e.g., ‘beta’). - 'BASH_VERSINFO[5]' - The value of 'MACHTYPE'. + ‘BASH_VERSINFO[5]’ + The value of ‘MACHTYPE’. -'BASH_VERSION' +‘BASH_VERSION’ The version number of the current instance of Bash. -'BASH_XTRACEFD' +‘BASH_XTRACEFD’ If set to an integer corresponding to a valid file descriptor, Bash - will write the trace output generated when 'set -x' is enabled to + will write the trace output generated when ‘set -x’ is enabled to that file descriptor. This allows tracing output to be separated from diagnostic and error messages. The file descriptor is closed - when 'BASH_XTRACEFD' is unset or assigned a new value. Unsetting - 'BASH_XTRACEFD' or assigning it the empty string causes the trace + when ‘BASH_XTRACEFD’ is unset or assigned a new value. Unsetting + ‘BASH_XTRACEFD’ or assigning it the empty string causes the trace output to be sent to the standard error. Note that setting - 'BASH_XTRACEFD' to 2 (the standard error file descriptor) and then + ‘BASH_XTRACEFD’ to 2 (the standard error file descriptor) and then unsetting it will result in the standard error being closed. -'CHILD_MAX' +‘CHILD_MAX’ Set the number of exited child status values for the shell to remember. Bash will not allow this value to be decreased below a POSIX-mandated minimum, and there is a maximum value (currently 8192) that this may not exceed. The minimum value is system-dependent. -'COLUMNS' - Used by the 'select' command to determine the terminal width when - printing selection lists. Automatically set if the 'checkwinsize' +‘COLUMNS’ + Used by the ‘select’ command to determine the terminal width when + printing selection lists. Automatically set if the ‘checkwinsize’ option is enabled (*note The Shopt Builtin::), or in an interactive - shell upon receipt of a 'SIGWINCH'. + shell upon receipt of a ‘SIGWINCH’. -'COMP_CWORD' - An index into '${COMP_WORDS}' of the word containing the current +‘COMP_CWORD’ + An index into ‘${COMP_WORDS}’ of the word containing the current cursor position. This variable is available only in shell functions invoked by the programmable completion facilities (*note Programmable Completion::). -'COMP_LINE' +‘COMP_LINE’ The current command line. This variable is available only in shell functions and external commands invoked by the programmable completion facilities (*note Programmable Completion::). -'COMP_POINT' +‘COMP_POINT’ The index of the current cursor position relative to the beginning of the current command. If the current cursor position is at the end of the current command, the value of this variable is equal to - '${#COMP_LINE}'. This variable is available only in shell + ‘${#COMP_LINE}’. This variable is available only in shell functions and external commands invoked by the programmable completion facilities (*note Programmable Completion::). -'COMP_TYPE' +‘COMP_TYPE’ Set to an integer value corresponding to the type of completion attempted that caused a completion function to be called: , - for normal completion, '?', for listing completions after - successive tabs, '!', for listing alternatives on partial word - completion, '@', to list completions if the word is not unmodified, - or '%', for menu completion. This variable is available only in + for normal completion, ‘?’, for listing completions after + successive tabs, ‘!’, for listing alternatives on partial word + completion, ‘@’, to list completions if the word is not unmodified, + or ‘%’, for menu completion. This variable is available only in shell functions and external commands invoked by the programmable completion facilities (*note Programmable Completion::). -'COMP_KEY' +‘COMP_KEY’ The key (or final key of a key sequence) used to invoke the current completion function. -'COMP_WORDBREAKS' +‘COMP_WORDBREAKS’ The set of characters that the Readline library treats as word - separators when performing word completion. If 'COMP_WORDBREAKS' + separators when performing word completion. If ‘COMP_WORDBREAKS’ is unset, it loses its special properties, even if it is subsequently reset. -'COMP_WORDS' +‘COMP_WORDS’ An array variable consisting of the individual words in the current command line. The line is split into words as Readline would split - it, using 'COMP_WORDBREAKS' as described above. This variable is + it, using ‘COMP_WORDBREAKS’ as described above. This variable is available only in shell functions invoked by the programmable completion facilities (*note Programmable Completion::). -'COMPREPLY' +‘COMPREPLY’ An array variable from which Bash reads the possible completions generated by a shell function invoked by the programmable completion facility (*note Programmable Completion::). Each array element contains one possible completion. -'COPROC' +‘COPROC’ An array variable created to hold the file descriptors for output from and input to an unnamed coprocess (*note Coprocesses::). -'DIRSTACK' +‘DIRSTACK’ An array variable containing the current contents of the directory stack. Directories appear in the stack in the order they are - displayed by the 'dirs' builtin. Assigning to members of this + displayed by the ‘dirs’ builtin. Assigning to members of this array variable may be used to modify directories already in the - stack, but the 'pushd' and 'popd' builtins must be used to add and + stack, but the ‘pushd’ and ‘popd’ builtins must be used to add and remove directories. Assignment to this variable will not change - the current directory. If 'DIRSTACK' is unset, it loses its + the current directory. If ‘DIRSTACK’ is unset, it loses its special properties, even if it is subsequently reset. -'EMACS' +‘EMACS’ If Bash finds this variable in the environment when the shell - starts with value 't', it assumes that the shell is running in an + starts with value ‘t’, it assumes that the shell is running in an Emacs shell buffer and disables line editing. -'ENV' - Expanded and executed similarly to 'BASH_ENV' (*note Bash Startup +‘ENV’ + Expanded and executed similarly to ‘BASH_ENV’ (*note Bash Startup Files::) when an interactive shell is invoked in POSIX Mode (*note Bash POSIX Mode::). -'EPOCHREALTIME' +‘EPOCHREALTIME’ Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch as a floating point value with micro-second granularity (see the documentation for the C library - function 'time' for the definition of Epoch). Assignments to - 'EPOCHREALTIME' are ignored. If 'EPOCHREALTIME' is unset, it loses + function ‘time’ for the definition of Epoch). Assignments to + ‘EPOCHREALTIME’ are ignored. If ‘EPOCHREALTIME’ is unset, it loses its special properties, even if it is subsequently reset. -'EPOCHSECONDS' +‘EPOCHSECONDS’ Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch (see the documentation for the C - library function 'time' for the definition of Epoch). Assignments - to 'EPOCHSECONDS' are ignored. If 'EPOCHSECONDS' is unset, it + library function ‘time’ for the definition of Epoch). Assignments + to ‘EPOCHSECONDS’ are ignored. If ‘EPOCHSECONDS’ is unset, it loses its special properties, even if it is subsequently reset. -'EUID' +‘EUID’ The numeric effective user id of the current user. This variable is readonly. -'EXECIGNORE' +‘EXECIGNORE’ A colon-separated list of shell patterns (*note Pattern Matching::) defining the list of filenames to be ignored by command search - using 'PATH'. Files whose full pathnames match one of these + using ‘PATH’. Files whose full pathnames match one of these patterns are not considered executable files for the purposes of - completion and command execution via 'PATH' lookup. This does not - affect the behavior of the '[', 'test', and '[[' commands. Full + completion and command execution via ‘PATH’ lookup. This does not + affect the behavior of the ‘[’, ‘test’, and ‘[[’ commands. Full pathnames in the command hash table are not subject to - 'EXECIGNORE'. Use this variable to ignore shared library files + ‘EXECIGNORE’. Use this variable to ignore shared library files that have the executable bit set, but are not executable files. - The pattern matching honors the setting of the 'extglob' shell + The pattern matching honors the setting of the ‘extglob’ shell option. -'FCEDIT' - The editor used as a default by the '-e' option to the 'fc' builtin +‘FCEDIT’ + The editor used as a default by the ‘-e’ option to the ‘fc’ builtin command. -'FIGNORE' +‘FIGNORE’ A colon-separated list of suffixes to ignore when performing filename completion. A filename whose suffix matches one of the - entries in 'FIGNORE' is excluded from the list of matched - filenames. A sample value is '.o:~' + entries in ‘FIGNORE’ is excluded from the list of matched + filenames. A sample value is ‘.o:~’ -'FUNCNAME' +‘FUNCNAME’ An array variable containing the names of all shell functions currently in the execution call stack. The element with index 0 is the name of any currently-executing shell function. The - bottom-most element (the one with the highest index) is '"main"'. + bottom-most element (the one with the highest index) is ‘"main"’. This variable exists only when a shell function is executing. - Assignments to 'FUNCNAME' have no effect. If 'FUNCNAME' is unset, + Assignments to ‘FUNCNAME’ have no effect. If ‘FUNCNAME’ is unset, it loses its special properties, even if it is subsequently reset. - This variable can be used with 'BASH_LINENO' and 'BASH_SOURCE'. - Each element of 'FUNCNAME' has corresponding elements in - 'BASH_LINENO' and 'BASH_SOURCE' to describe the call stack. For - instance, '${FUNCNAME[$i]}' was called from the file - '${BASH_SOURCE[$i+1]}' at line number '${BASH_LINENO[$i]}'. The - 'caller' builtin displays the current call stack using this + This variable can be used with ‘BASH_LINENO’ and ‘BASH_SOURCE’. + Each element of ‘FUNCNAME’ has corresponding elements in + ‘BASH_LINENO’ and ‘BASH_SOURCE’ to describe the call stack. For + instance, ‘${FUNCNAME[$i]}’ was called from the file + ‘${BASH_SOURCE[$i+1]}’ at line number ‘${BASH_LINENO[$i]}’. The + ‘caller’ builtin displays the current call stack using this information. -'FUNCNEST' +‘FUNCNEST’ If set to a numeric value greater than 0, defines a maximum function nesting level. Function invocations that exceed this nesting level will cause the current command to abort. -'GLOBIGNORE' +‘GLOBIGNORE’ A colon-separated list of patterns defining the set of file names to be ignored by filename expansion. If a file name matched by a filename expansion pattern also matches one of the patterns in - 'GLOBIGNORE', it is removed from the list of matches. The pattern - matching honors the setting of the 'extglob' shell option. - -'GROUPS' + ‘GLOBIGNORE’, it is removed from the list of matches. The pattern + matching honors the setting of the ‘extglob’ shell option. + +‘GLOBSORT’ + Control how the results of filename expansion are sorted. The + value of this variable specifies the sort criteria and sort order + for the results of filename expansion. If this variable is unset + or set to the null string, filename expansion uses the historical + behavior of sorting by name. If set, a valid value begins with an + optional ‘+’, which is ignored, or ‘-’, which reverses the sort + order from ascending to descending, followed by a sort specifier. + The valid sort specifiers are ‘name’, ‘size’, ‘mtime’, ‘atime’, + ‘ctime’, and ‘blocks’, which sort the files on name, file size, + modification time, access time, inode change time, and number of + blocks, respectively. + + For example, a value of ‘-mtime’ sorts the results in descending + order by modification time (newest first). + + A sort specifier of ‘nosort’ disables sorting completely; the + results are returned in the order they are read from the file + system,. + + If the sort specifier is missing, it defaults to NAME, so a value + of ‘+’ is equivalent to the null string, and a value of ‘-’ sorts + by name in descending order. + + Any invalid value restores the historical sorting behavior. + +‘GROUPS’ An array variable containing the list of groups of which the - current user is a member. Assignments to 'GROUPS' have no effect. - If 'GROUPS' is unset, it loses its special properties, even if it + current user is a member. Assignments to ‘GROUPS’ have no effect. + If ‘GROUPS’ is unset, it loses its special properties, even if it is subsequently reset. -'histchars' +‘histchars’ Up to three characters which control history expansion, quick substitution, and tokenization (*note History Interaction::). The - first character is the "history expansion" character, that is, the + first character is the “history expansion” character, that is, the character which signifies the start of a history expansion, - normally '!'. The second character is the character which - signifies 'quick substitution' when seen as the first character on - a line, normally '^'. The optional third character is the + normally ‘!’. The second character is the character which + signifies "quick substitution" when seen as the first character on + a line, normally ‘^’. The optional third character is the character which indicates that the remainder of the line is a - comment when found as the first character of a word, usually '#'. + comment when found as the first character of a word, usually ‘#’. The history comment character causes history substitution to be skipped for the remaining words on the line. It does not necessarily cause the shell parser to treat the rest of the line as a comment. -'HISTCMD' +‘HISTCMD’ The history number, or index in the history list, of the current - command. Assignments to 'HISTCMD' are ignored. If 'HISTCMD' is + command. Assignments to ‘HISTCMD’ are ignored. If ‘HISTCMD’ is unset, it loses its special properties, even if it is subsequently reset. -'HISTCONTROL' +‘HISTCONTROL’ A colon-separated list of values controlling how commands are saved - on the history list. If the list of values includes 'ignorespace', + on the history list. If the list of values includes ‘ignorespace’, lines which begin with a space character are not saved in the - history list. A value of 'ignoredups' causes lines which match the - previous history entry to not be saved. A value of 'ignoreboth' is - shorthand for 'ignorespace' and 'ignoredups'. A value of - 'erasedups' causes all previous lines matching the current line to + history list. A value of ‘ignoredups’ causes lines which match the + previous history entry to not be saved. A value of ‘ignoreboth’ is + shorthand for ‘ignorespace’ and ‘ignoredups’. A value of + ‘erasedups’ causes all previous lines matching the current line to be removed from the history list before that line is saved. Any - value not in the above list is ignored. If 'HISTCONTROL' is unset, + value not in the above list is ignored. If ‘HISTCONTROL’ is unset, or does not include a valid value, all lines read by the shell parser are saved on the history list, subject to the value of - 'HISTIGNORE'. The second and subsequent lines of a multi-line + ‘HISTIGNORE’. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history - regardless of the value of 'HISTCONTROL'. + regardless of the value of ‘HISTCONTROL’. -'HISTFILE' - The name of the file to which the command history is saved. The - default value is '~/.bash_history'. +‘HISTFILE’ + The name of the file to which the command history is saved. Bash + assigns a default value of ‘~/.bash_history’. If ‘HISTFILE’ is + unset or null, the command history is not saved when a shell exits. -'HISTFILESIZE' +‘HISTFILESIZE’ The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, to contain no more than that number of lines by @@ -5574,309 +5788,312 @@ Variables::). this size after writing it when a shell exits. If the value is 0, the history file is truncated to zero size. Non-numeric values and numeric values less than zero inhibit truncation. The shell sets - the default value to the value of 'HISTSIZE' after reading any + the default value to the value of ‘HISTSIZE’ after reading any startup files. -'HISTIGNORE' +‘HISTIGNORE’ A colon-separated list of patterns used to decide which command - lines should be saved on the history list. Each pattern is - anchored at the beginning of the line and must match the complete - line (no implicit '*' is appended). Each pattern is tested against - the line after the checks specified by 'HISTCONTROL' are applied. - In addition to the normal shell pattern matching characters, '&' - matches the previous history line. '&' may be escaped using a + lines should be saved on the history list. If a command line + matches one of the patterns in the value of ‘HISTIGNORE’, it is not + saved on the history list. Each pattern is anchored at the + beginning of the line and must match the complete line (Bash will + not implicitly append a ‘*’). Each pattern is tested against the + line after the checks specified by ‘HISTCONTROL’ are applied. In + addition to the normal shell pattern matching characters, ‘&’ + matches the previous history line. ‘&’ may be escaped using a backslash; the backslash is removed before attempting a match. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of - 'HISTIGNORE'. The pattern matching honors the setting of the - 'extglob' shell option. + ‘HISTIGNORE’. The pattern matching honors the setting of the + ‘extglob’ shell option. - 'HISTIGNORE' subsumes the function of 'HISTCONTROL'. A pattern of - '&' is identical to 'ignoredups', and a pattern of '[ ]*' is - identical to 'ignorespace'. Combining these two patterns, + ‘HISTIGNORE’ subsumes the function of ‘HISTCONTROL’. A pattern of + ‘&’ is identical to ‘ignoredups’, and a pattern of ‘[ ]*’ is + identical to ‘ignorespace’. Combining these two patterns, separating them with a colon, provides the functionality of - 'ignoreboth'. + ‘ignoreboth’. -'HISTSIZE' +‘HISTSIZE’ The maximum number of commands to remember on the history list. If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files. -'HISTTIMEFORMAT' +‘HISTTIMEFORMAT’ If this variable is set and not null, its value is used as a format - string for 'strftime' to print the time stamp associated with each - history entry displayed by the 'history' builtin. If this variable - is set, time stamps are written to the history file so they may be - preserved across shell sessions. This uses the history comment - character to distinguish timestamps from other history lines. - -'HOSTFILE' - Contains the name of a file in the same format as '/etc/hosts' that + string for ‘strftime’(3) to print the time stamp associated with + each history entry displayed by the ‘history’ builtin. If this + variable is set, time stamps are written to the history file so + they may be preserved across shell sessions. This uses the history + comment character to distinguish timestamps from other history + lines. + +‘HOSTFILE’ + Contains the name of a file in the same format as ‘/etc/hosts’ that should be read when the shell needs to complete a hostname. The list of possible hostname completions may be changed while the shell is running; the next time hostname completion is attempted after the value is changed, Bash adds the contents of the new file - to the existing list. If 'HOSTFILE' is set, but has no value, or - does not name a readable file, Bash attempts to read '/etc/hosts' + to the existing list. If ‘HOSTFILE’ is set, but has no value, or + does not name a readable file, Bash attempts to read ‘/etc/hosts’ to obtain the list of possible hostname completions. When - 'HOSTFILE' is unset, the hostname list is cleared. + ‘HOSTFILE’ is unset, the hostname list is cleared. -'HOSTNAME' +‘HOSTNAME’ The name of the current host. -'HOSTTYPE' +‘HOSTTYPE’ A string describing the machine Bash is running on. -'IGNOREEOF' - Controls the action of the shell on receipt of an 'EOF' character +‘IGNOREEOF’ + Controls the action of the shell on receipt of an ‘EOF’ character as the sole input. If set, the value denotes the number of - consecutive 'EOF' characters that can be read as the first + consecutive ‘EOF’ characters that can be read as the first character on an input line before the shell will exit. If the variable exists but does not have a numeric value, or has no value, - then the default is 10. If the variable does not exist, then 'EOF' + then the default is 10. If the variable does not exist, then ‘EOF’ signifies the end of input to the shell. This is only in effect for interactive shells. -'INPUTRC' +‘INPUTRC’ The name of the Readline initialization file, overriding the - default of '~/.inputrc'. + default of ‘~/.inputrc’. -'INSIDE_EMACS' +‘INSIDE_EMACS’ If Bash finds this variable in the environment when the shell starts, it assumes that the shell is running in an Emacs shell buffer and may disable line editing depending on the value of - 'TERM'. + ‘TERM’. -'LANG' +‘LANG’ Used to determine the locale category for any category not - specifically selected with a variable starting with 'LC_'. + specifically selected with a variable starting with ‘LC_’. -'LC_ALL' - This variable overrides the value of 'LANG' and any other 'LC_' +‘LC_ALL’ + This variable overrides the value of ‘LANG’ and any other ‘LC_’ variable specifying a locale category. -'LC_COLLATE' +‘LC_COLLATE’ This variable determines the collation order used when sorting the results of filename expansion, and determines the behavior of range expressions, equivalence classes, and collating sequences within filename expansion and pattern matching (*note Filename Expansion::). -'LC_CTYPE' +‘LC_CTYPE’ This variable determines the interpretation of characters and the behavior of character classes within filename expansion and pattern matching (*note Filename Expansion::). -'LC_MESSAGES' +‘LC_MESSAGES’ This variable determines the locale used to translate double-quoted - strings preceded by a '$' (*note Locale Translation::). + strings preceded by a ‘$’ (*note Locale Translation::). -'LC_NUMERIC' +‘LC_NUMERIC’ This variable determines the locale category used for number formatting. -'LC_TIME' +‘LC_TIME’ This variable determines the locale category used for data and time formatting. -'LINENO' +‘LINENO’ The line number in the script or shell function currently - executing. If 'LINENO' is unset, it loses its special properties, + executing. If ‘LINENO’ is unset, it loses its special properties, even if it is subsequently reset. -'LINES' - Used by the 'select' command to determine the column length for - printing selection lists. Automatically set if the 'checkwinsize' +‘LINES’ + Used by the ‘select’ command to determine the column length for + printing selection lists. Automatically set if the ‘checkwinsize’ option is enabled (*note The Shopt Builtin::), or in an interactive - shell upon receipt of a 'SIGWINCH'. + shell upon receipt of a ‘SIGWINCH’. -'MACHTYPE' +‘MACHTYPE’ A string that fully describes the system type on which Bash is executing, in the standard GNU CPU-COMPANY-SYSTEM format. -'MAILCHECK' +‘MAILCHECK’ How often (in seconds) that the shell should check for mail in the - files specified in the 'MAILPATH' or 'MAIL' variables. The default + files specified in the ‘MAILPATH’ or ‘MAIL’ variables. The default is 60 seconds. When it is time to check for mail, the shell does so before displaying the primary prompt. If this variable is unset, or set to a value that is not a number greater than or equal to zero, the shell disables mail checking. -'MAPFILE' - An array variable created to hold the text read by the 'mapfile' +‘MAPFILE’ + An array variable created to hold the text read by the ‘mapfile’ builtin when no variable name is supplied. -'OLDPWD' - The previous working directory as set by the 'cd' builtin. +‘OLDPWD’ + The previous working directory as set by the ‘cd’ builtin. -'OPTERR' +‘OPTERR’ If set to the value 1, Bash displays error messages generated by - the 'getopts' builtin command. + the ‘getopts’ builtin command. -'OSTYPE' +‘OSTYPE’ A string describing the operating system Bash is running on. -'PIPESTATUS' +‘PIPESTATUS’ An array variable (*note Arrays::) containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command). -'POSIXLY_CORRECT' +‘POSIXLY_CORRECT’ If this variable is in the environment when Bash starts, the shell enters POSIX mode (*note Bash POSIX Mode::) before reading the - startup files, as if the '--posix' invocation option had been + startup files, as if the ‘--posix’ invocation option had been supplied. If it is set while the shell is running, Bash enables POSIX mode, as if the command set -o posix had been executed. When the shell enters POSIX mode, it sets this variable if it was not already set. -'PPID' +‘PPID’ The process ID of the shell's parent process. This variable is readonly. -'PROMPT_COMMAND' +‘PROMPT_COMMAND’ If this variable is set, and is an array, the value of each set element is interpreted as a command to execute before printing the - primary prompt ('$PS1'). If this is set but not an array variable, + primary prompt (‘$PS1’). If this is set but not an array variable, its value is used as a command to execute instead. -'PROMPT_DIRTRIM' +‘PROMPT_DIRTRIM’ If set to a number greater than zero, the value is used as the number of trailing directory components to retain when expanding - the '\w' and '\W' prompt string escapes (*note Controlling the + the ‘\w’ and ‘\W’ prompt string escapes (*note Controlling the Prompt::). Characters removed are replaced with an ellipsis. -'PS0' - The value of this parameter is expanded like 'PS1' and displayed by +‘PS0’ + The value of this parameter is expanded like ‘PS1’ and displayed by interactive shells after reading a command and before the command is executed. -'PS3' - The value of this variable is used as the prompt for the 'select' - command. If this variable is not set, the 'select' command prompts - with '#? ' +‘PS3’ + The value of this variable is used as the prompt for the ‘select’ + command. If this variable is not set, the ‘select’ command prompts + with ‘#? ’ -'PS4' - The value of this parameter is expanded like 'PS1' and the expanded +‘PS4’ + The value of this parameter is expanded like ‘PS1’ and the expanded value is the prompt printed before the command line is echoed when - the '-x' option is set (*note The Set Builtin::). The first + the ‘-x’ option is set (*note The Set Builtin::). The first character of the expanded value is replicated multiple times, as necessary, to indicate multiple levels of indirection. The default - is '+ '. + is ‘+ ’. -'PWD' - The current working directory as set by the 'cd' builtin. +‘PWD’ + The current working directory as set by the ‘cd’ builtin. -'RANDOM' +‘RANDOM’ Each time this parameter is referenced, it expands to a random integer between 0 and 32767. Assigning a value to this variable - seeds the random number generator. If 'RANDOM' is unset, it loses + seeds the random number generator. If ‘RANDOM’ is unset, it loses its special properties, even if it is subsequently reset. -'READLINE_ARGUMENT' +‘READLINE_ARGUMENT’ Any numeric argument given to a Readline command that was defined - using 'bind -x' (*note Bash Builtins:: when it was invoked. + using ‘bind -x’ (*note Bash Builtins:: when it was invoked. -'READLINE_LINE' - The contents of the Readline line buffer, for use with 'bind -x' +‘READLINE_LINE’ + The contents of the Readline line buffer, for use with ‘bind -x’ (*note Bash Builtins::). -'READLINE_MARK' - The position of the "mark" (saved insertion point) in the Readline - line buffer, for use with 'bind -x' (*note Bash Builtins::). The +‘READLINE_MARK’ + The position of the “mark” (saved insertion point) in the Readline + line buffer, for use with ‘bind -x’ (*note Bash Builtins::). The characters between the insertion point and the mark are often - called the "region". + called the “region”. -'READLINE_POINT' +‘READLINE_POINT’ The position of the insertion point in the Readline line buffer, - for use with 'bind -x' (*note Bash Builtins::). + for use with ‘bind -x’ (*note Bash Builtins::). -'REPLY' - The default variable for the 'read' builtin. +‘REPLY’ + The default variable for the ‘read’ builtin. -'SECONDS' +‘SECONDS’ This variable expands to the number of seconds since the shell was started. Assignment to this variable resets the count to the value assigned, and the expanded value becomes the value assigned plus the number of seconds since the assignment. The number of seconds at shell invocation and the current time are always determined by - querying the system clock. If 'SECONDS' is unset, it loses its + querying the system clock. If ‘SECONDS’ is unset, it loses its special properties, even if it is subsequently reset. -'SHELL' +‘SHELL’ This environment variable expands to the full pathname to the shell. If it is not set when the shell starts, Bash assigns to it the full pathname of the current user's login shell. -'SHELLOPTS' +‘SHELLOPTS’ A colon-separated list of enabled shell options. Each word in the - list is a valid argument for the '-o' option to the 'set' builtin + list is a valid argument for the ‘-o’ option to the ‘set’ builtin command (*note The Set Builtin::). The options appearing in - 'SHELLOPTS' are those reported as 'on' by 'set -o'. If this + ‘SHELLOPTS’ are those reported as ‘on’ by ‘set -o’. If this variable is in the environment when Bash starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly. -'SHLVL' +‘SHLVL’ Incremented by one each time a new instance of Bash is started. This is intended to be a count of how deeply your Bash shells are nested. -'SRANDOM' +‘SRANDOM’ This variable expands to a 32-bit pseudo-random number each time it is referenced. The random number generator is not linear on - systems that support '/dev/urandom' or 'arc4random', so each + systems that support ‘/dev/urandom’ or ‘arc4random’, so each returned number has no relationship to the numbers preceding it. The random number generator cannot be seeded, so assignments to - this variable have no effect. If 'SRANDOM' is unset, it loses its + this variable have no effect. If ‘SRANDOM’ is unset, it loses its special properties, even if it is subsequently reset. -'TIMEFORMAT' +‘TIMEFORMAT’ The value of this parameter is used as a format string specifying - how the timing information for pipelines prefixed with the 'time' - reserved word should be displayed. The '%' character introduces an + how the timing information for pipelines prefixed with the ‘time’ + reserved word should be displayed. The ‘%’ character introduces an escape sequence that is expanded to a time value or other information. The escape sequences and their meanings are as - follows; the braces denote optional portions. + follows; the brackets denote optional portions. - '%%' - A literal '%'. + ‘%%’ + A literal ‘%’. - '%[P][l]R' + ‘%[P][l]R’ The elapsed time in seconds. - '%[P][l]U' + ‘%[P][l]U’ The number of CPU seconds spent in user mode. - '%[P][l]S' + ‘%[P][l]S’ The number of CPU seconds spent in system mode. - '%P' + ‘%P’ The CPU percentage, computed as (%U + %S) / %R. The optional P is a digit specifying the precision, the number of fractional digits after a decimal point. A value of 0 causes no - decimal point or fraction to be output. At most three places after - the decimal point may be specified; values of P greater than 3 are - changed to 3. If P is not specified, the value 3 is used. + decimal point or fraction to be output. At most six places after + the decimal point may be specified; values of P greater than 6 are + changed to 6. If P is not specified, the value 3 is used. - The optional 'l' specifies a longer format, including minutes, of + The optional ‘l’ specifies a longer format, including minutes, of the form MMmSS.FFs. The value of P determines whether or not the fraction is included. If this variable is not set, Bash acts as if it had the value $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS' - If the value is null, no timing information is displayed. A - trailing newline is added when the format string is displayed. - -'TMOUT' - If set to a value greater than zero, 'TMOUT' is treated as the - default timeout for the 'read' builtin (*note Bash Builtins::). - The 'select' command (*note Conditional Constructs::) terminates if - input does not arrive after 'TMOUT' seconds when input is coming + If the value is null, Bash does not display any timing information. + A trailing newline is added when the format string is displayed. + +‘TMOUT’ + If set to a value greater than zero, ‘TMOUT’ is treated as the + default timeout for the ‘read’ builtin (*note Bash Builtins::). + The ‘select’ command (*note Conditional Constructs::) terminates if + input does not arrive after ‘TMOUT’ seconds when input is coming from a terminal. In an interactive shell, the value is interpreted as the number of @@ -5884,11 +6101,11 @@ Variables::). prompt. Bash terminates after waiting for that number of seconds if a complete line of input does not arrive. -'TMPDIR' +‘TMPDIR’ If set, Bash uses its value as the name of a directory in which Bash creates temporary files for the shell's use. -'UID' +‘UID’ The numeric real user id of the current user. This variable is readonly. @@ -5907,7 +6124,7 @@ This chapter describes features unique to Bash. * Bash Startup Files:: When and how Bash executes scripts. * Interactive Shells:: What an interactive shell is. * Bash Conditional Expressions:: Primitives used in composing expressions for - the 'test' builtin. + the ‘test’ builtin. * Shell Arithmetic:: Arithmetic on shell variables. * Aliases:: Substituting one command for another. * Arrays:: Array Variables. @@ -5932,134 +6149,139 @@ File: bash.info, Node: Invoking Bash, Next: Bash Startup Files, Up: Bash Feat bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o OPTION] [-O SHOPT_OPTION] [ARGUMENT ...] - All of the single-character options used with the 'set' builtin + All of the single-character options used with the ‘set’ builtin (*note The Set Builtin::) can be used as options when the shell is invoked. In addition, there are several multi-character options that you can use. These options must appear on the command line before the single-character options to be recognized. -'--debugger' +‘--debugger’ Arrange for the debugger profile to be executed before the shell starts. Turns on extended debugging mode (see *note The Shopt - Builtin:: for a description of the 'extdebug' option to the 'shopt' + Builtin:: for a description of the ‘extdebug’ option to the ‘shopt’ builtin). -'--dump-po-strings' - A list of all double-quoted strings preceded by '$' is printed on - the standard output in the GNU 'gettext' PO (portable object) file - format. Equivalent to '-D' except for the output format. +‘--dump-po-strings’ + A list of all double-quoted strings preceded by ‘$’ is printed on + the standard output in the GNU ‘gettext’ PO (portable object) file + format. Equivalent to ‘-D’ except for the output format. -'--dump-strings' - Equivalent to '-D'. +‘--dump-strings’ + Equivalent to ‘-D’. -'--help' +‘--help’ Display a usage message on standard output and exit successfully. -'--init-file FILENAME' -'--rcfile FILENAME' - Execute commands from FILENAME (instead of '~/.bashrc') in an +‘--init-file FILENAME’ +‘--rcfile FILENAME’ + Execute commands from FILENAME (instead of ‘~/.bashrc’) in an interactive shell. -'--login' - Equivalent to '-l'. +‘--login’ + Equivalent to ‘-l’. -'--noediting' +‘--noediting’ Do not use the GNU Readline library (*note Command Line Editing::) to read command lines when the shell is interactive. -'--noprofile' - Don't load the system-wide startup file '/etc/profile' or any of - the personal initialization files '~/.bash_profile', - '~/.bash_login', or '~/.profile' when Bash is invoked as a login +‘--noprofile’ + Don't load the system-wide startup file ‘/etc/profile’ or any of + the personal initialization files ‘~/.bash_profile’, + ‘~/.bash_login’, or ‘~/.profile’ when Bash is invoked as a login shell. -'--norc' - Don't read the '~/.bashrc' initialization file in an interactive - shell. This is on by default if the shell is invoked as 'sh'. +‘--norc’ + Don't read the ‘~/.bashrc’ initialization file in an interactive + shell. This is on by default if the shell is invoked as ‘sh’. -'--posix' +‘--posix’ Change the behavior of Bash where the default operation differs from the POSIX standard to match the standard. This is intended to make Bash behave as a strict superset of that standard. *Note Bash POSIX Mode::, for a description of the Bash POSIX mode. -'--restricted' - Make the shell a restricted shell (*note The Restricted Shell::). +‘--restricted’ + Equivalent to ‘-r’. Make the shell a restricted shell (*note The + Restricted Shell::). -'--verbose' - Equivalent to '-v'. Print shell input lines as they're read. +‘--verbose’ + Equivalent to ‘-v’. Print shell input lines as they're read. -'--version' +‘--version’ Show version information for this instance of Bash on the standard output and exit successfully. There are several single-character options that may be supplied at -invocation which are not available with the 'set' builtin. +invocation which are not available with the ‘set’ builtin. -'-c' +‘-c’ Read and execute commands from the first non-option argument COMMAND_STRING, then exit. If there are arguments after the - COMMAND_STRING, the first argument is assigned to '$0' and any + COMMAND_STRING, the first argument is assigned to ‘$0’ and any remaining arguments are assigned to the positional parameters. The - assignment to '$0' sets the name of the shell, which is used in + assignment to ‘$0’ sets the name of the shell, which is used in warning and error messages. -'-i' +‘-i’ Force the shell to run interactively. Interactive shells are described in *note Interactive Shells::. -'-l' +‘-l’ Make this shell act as if it had been directly invoked by login. When the shell is interactive, this is equivalent to starting a - login shell with 'exec -l bash'. When the shell is not - interactive, the login shell startup files will be executed. 'exec - bash -l' or 'exec bash --login' will replace the current shell with + login shell with ‘exec -l bash’. When the shell is not + interactive, the login shell startup files will be executed. ‘exec + bash -l’ or ‘exec bash --login’ will replace the current shell with a Bash login shell. *Note Bash Startup Files::, for a description of the special behavior of a login shell. -'-r' +‘-r’ Make the shell a restricted shell (*note The Restricted Shell::). -'-s' +‘-s’ If this option is present, or if no arguments remain after option processing, then commands are read from the standard input. This option allows the positional parameters to be set when invoking an interactive shell or when reading input through a pipe. -'-D' - A list of all double-quoted strings preceded by '$' is printed on +‘-D’ + A list of all double-quoted strings preceded by ‘$’ is printed on the standard output. These are the strings that are subject to - language translation when the current locale is not 'C' or 'POSIX' - (*note Locale Translation::). This implies the '-n' option; no + language translation when the current locale is not ‘C’ or ‘POSIX’ + (*note Locale Translation::). This implies the ‘-n’ option; no commands will be executed. -'[-+]O [SHOPT_OPTION]' - SHOPT_OPTION is one of the shell options accepted by the 'shopt' +‘[-+]O [SHOPT_OPTION]’ + SHOPT_OPTION is one of the shell options accepted by the ‘shopt’ builtin (*note The Shopt Builtin::). If SHOPT_OPTION is present, - '-O' sets the value of that option; '+O' unsets it. If + ‘-O’ sets the value of that option; ‘+O’ unsets it. If SHOPT_OPTION is not supplied, the names and values of the shell - options accepted by 'shopt' are printed on the standard output. If - the invocation option is '+O', the output is displayed in a format + options accepted by ‘shopt’ are printed on the standard output. If + the invocation option is ‘+O’, the output is displayed in a format that may be reused as input. -'--' - A '--' signals the end of options and disables further option - processing. Any arguments after the '--' are treated as filenames - and arguments. +‘--’ + A ‘--’ signals the end of options and disables further option + processing. Any arguments after the ‘--’ are treated as a shell + script filename (*note Shell Scripts::) and arguments passed to + that script. - A _login_ shell is one whose first character of argument zero is '-', -or one invoked with the '--login' option. +‘-’ + Equivalent to ‘--’. + + A _login_ shell is one whose first character of argument zero is ‘-’, +or one invoked with the ‘--login’ option. An _interactive_ shell is one started without non-option arguments, -unless '-s' is specified, without specifying the '-c' option, and whose +unless ‘-s’ is specified, without specifying the ‘-c’ option, and whose input and output are both connected to terminals (as determined by -'isatty(3)'), or one started with the '-i' option. *Note Interactive +‘isatty(3)’), or one started with the ‘-i’ option. *Note Interactive Shells::, for more information. - If arguments remain after option processing, and neither the '-c' nor -the '-s' option has been supplied, the first argument is assumed to be + If arguments remain after option processing, and neither the ‘-c’ nor +the ‘-s’ option has been supplied, the first argument is assumed to be the name of a file containing shell commands (*note Shell Scripts::). -When Bash is invoked in this fashion, '$0' is set to the name of the +When Bash is invoked in this fashion, ‘$0’ is set to the name of the file, and the positional parameters are set to the remaining arguments. Bash reads and executes commands from this file, then exits. Bash's exit status is the exit status of the last command executed in the @@ -6078,32 +6300,32 @@ Tilde Expansion::). Interactive shells are described in *note Interactive Shells::. -Invoked as an interactive login shell, or with '--login' +Invoked as an interactive login shell, or with ‘--login’ ........................................................ When Bash is invoked as an interactive login shell, or as a -non-interactive shell with the '--login' option, it first reads and -executes commands from the file '/etc/profile', if that file exists. -After reading that file, it looks for '~/.bash_profile', -'~/.bash_login', and '~/.profile', in that order, and reads and executes +non-interactive shell with the ‘--login’ option, it first reads and +executes commands from the file ‘/etc/profile’, if that file exists. +After reading that file, it looks for ‘~/.bash_profile’, +‘~/.bash_login’, and ‘~/.profile’, in that order, and reads and executes commands from the first one that exists and is readable. The -'--noprofile' option may be used when the shell is started to inhibit +‘--noprofile’ option may be used when the shell is started to inhibit this behavior. When an interactive login shell exits, or a non-interactive login -shell executes the 'exit' builtin command, Bash reads and executes -commands from the file '~/.bash_logout', if it exists. +shell executes the ‘exit’ builtin command, Bash reads and executes +commands from the file ‘~/.bash_logout’, if it exists. Invoked as an interactive non-login shell ......................................... When an interactive shell that is not a login shell is started, Bash -reads and executes commands from '~/.bashrc', if that file exists. This -may be inhibited by using the '--norc' option. The '--rcfile FILE' +reads and executes commands from ‘~/.bashrc’, if that file exists. This +may be inhibited by using the ‘--norc’ option. The ‘--rcfile FILE’ option will force Bash to read and execute commands from FILE instead of -'~/.bashrc'. +‘~/.bashrc’. - So, typically, your '~/.bash_profile' contains the line + So, typically, your ‘~/.bash_profile’ contains the line if [ -f ~/.bashrc ]; then . ~/.bashrc; fi after (or before) any login-specific initializations. @@ -6111,46 +6333,46 @@ Invoked non-interactively ......................... When Bash is started non-interactively, to run a shell script, for -example, it looks for the variable 'BASH_ENV' in the environment, +example, it looks for the variable ‘BASH_ENV’ in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed: if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi -but the value of the 'PATH' variable is not used to search for the +but the value of the ‘PATH’ variable is not used to search for the filename. As noted above, if a non-interactive shell is invoked with the -'--login' option, Bash attempts to read and execute commands from the +‘--login’ option, Bash attempts to read and execute commands from the login shell startup files. -Invoked with name 'sh' +Invoked with name ‘sh’ ...................... -If Bash is invoked with the name 'sh', it tries to mimic the startup -behavior of historical versions of 'sh' as closely as possible, while +If Bash is invoked with the name ‘sh’, it tries to mimic the startup +behavior of historical versions of ‘sh’ as closely as possible, while conforming to the POSIX standard as well. When invoked as an interactive login shell, or as a non-interactive -shell with the '--login' option, it first attempts to read and execute -commands from '/etc/profile' and '~/.profile', in that order. The -'--noprofile' option may be used to inhibit this behavior. When invoked -as an interactive shell with the name 'sh', Bash looks for the variable -'ENV', expands its value if it is defined, and uses the expanded value +shell with the ‘--login’ option, it first attempts to read and execute +commands from ‘/etc/profile’ and ‘~/.profile’, in that order. The +‘--noprofile’ option may be used to inhibit this behavior. When invoked +as an interactive shell with the name ‘sh’, Bash looks for the variable +‘ENV’, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as -'sh' does not attempt to read and execute commands from any other -startup files, the '--rcfile' option has no effect. A non-interactive -shell invoked with the name 'sh' does not attempt to read any other +‘sh’ does not attempt to read and execute commands from any other +startup files, the ‘--rcfile’ option has no effect. A non-interactive +shell invoked with the name ‘sh’ does not attempt to read any other startup files. - When invoked as 'sh', Bash enters POSIX mode after the startup files + When invoked as ‘sh’, Bash enters POSIX mode after the startup files are read. Invoked in POSIX mode ..................... -When Bash is started in POSIX mode, as with the '--posix' command line +When Bash is started in POSIX mode, as with the ‘--posix’ command line option, it follows the POSIX standard for startup files. In this mode, -interactive shells expand the 'ENV' variable and commands are read and +interactive shells expand the ‘ENV’ variable and commands are read and executed from the file whose name is the expanded value. No other startup files are read. @@ -6159,12 +6381,12 @@ Invoked by remote shell daemon Bash attempts to determine when it is being run with its standard input connected to a network connection, as when executed by the historical -remote shell daemon, usually 'rshd', or the secure shell daemon 'sshd'. +remote shell daemon, usually ‘rshd’, or the secure shell daemon ‘sshd’. If Bash determines it is being run non-interactively in this fashion, it -reads and executes commands from '~/.bashrc', if that file exists and is -readable. It will not do this if invoked as 'sh'. The '--norc' option -may be used to inhibit this behavior, and the '--rcfile' option may be -used to force another file to be read, but neither 'rshd' nor 'sshd' +reads and executes commands from ‘~/.bashrc’, if that file exists and is +readable. It will not do this if invoked as ‘sh’. The ‘--norc’ option +may be used to inhibit this behavior, and the ‘--rcfile’ option may be +used to force another file to be read, but neither ‘rshd’ nor ‘sshd’ generally invoke the shell with those options or allow them to be specified. @@ -6172,11 +6394,11 @@ Invoked with unequal effective and real UID/GIDs ................................................ If Bash is started with the effective user (group) id not equal to the -real user (group) id, and the '-p' option is not supplied, no startup +real user (group) id, and the ‘-p’ option is not supplied, no startup files are read, shell functions are not inherited from the environment, -the 'SHELLOPTS', 'BASHOPTS', 'CDPATH', and 'GLOBIGNORE' variables, if +the ‘SHELLOPTS’, ‘BASHOPTS’, ‘CDPATH’, and ‘GLOBIGNORE’ variables, if they appear in the environment, are ignored, and the effective user id -is set to the real user id. If the '-p' option is supplied at +is set to the real user id. If the ‘-p’ option is supplied at invocation, the startup behavior is the same, but the effective user id is not reset. @@ -6199,14 +6421,14 @@ File: bash.info, Node: What is an Interactive Shell?, Next: Is this Shell Inte ----------------------------------- An interactive shell is one started without non-option arguments (unless -'-s' is specified) and without specifying the '-c' option, whose input +‘-s’ is specified) and without specifying the ‘-c’ option, whose input and error output are both connected to terminals (as determined by -'isatty(3)'), or one started with the '-i' option. +‘isatty(3)’), or one started with the ‘-i’ option. An interactive shell generally reads from and writes to a user's terminal. - The '-s' invocation option may be used to set the positional + The ‘-s’ invocation option may be used to set the positional parameters when an interactive shell is started.  @@ -6216,15 +6438,15 @@ File: bash.info, Node: Is this Shell Interactive?, Next: Interactive Shell Beh -------------------------------- To determine within a startup script whether or not Bash is running -interactively, test the value of the '-' special parameter. It contains -'i' when the shell is interactive. For example: +interactively, test the value of the ‘-’ special parameter. It contains +‘i’ when the shell is interactive. For example: case "$-" in *i*) echo This shell is interactive ;; *) echo This shell is not interactive ;; esac - Alternatively, startup scripts may examine the variable 'PS1'; it is + Alternatively, startup scripts may examine the variable ‘PS1’; it is unset in non-interactive shells, and set in interactive shells. Thus: if [ -z "$PS1" ]; then @@ -6247,55 +6469,55 @@ several ways. 2. Job Control (*note Job Control::) is enabled by default. When job control is in effect, Bash ignores the keyboard-generated job - control signals 'SIGTTIN', 'SIGTTOU', and 'SIGTSTP'. + control signals ‘SIGTTIN’, ‘SIGTTOU’, and ‘SIGTSTP’. - 3. Bash expands and displays 'PS1' before reading the first line of a - command, and expands and displays 'PS2' before reading the second + 3. Bash expands and displays ‘PS1’ before reading the first line of a + command, and expands and displays ‘PS2’ before reading the second and subsequent lines of a multi-line command. Bash expands and - displays 'PS0' after it reads a command but before executing it. + displays ‘PS0’ after it reads a command but before executing it. See *note Controlling the Prompt::, for a complete list of prompt string escape sequences. 4. Bash executes the values of the set elements of the - 'PROMPT_COMMAND' array variable as commands before printing the - primary prompt, '$PS1' (*note Bash Variables::). + ‘PROMPT_COMMAND’ array variable as commands before printing the + primary prompt, ‘$PS1’ (*note Bash Variables::). 5. Readline (*note Command Line Editing::) is used to read commands from the user's terminal. - 6. Bash inspects the value of the 'ignoreeof' option to 'set -o' - instead of exiting immediately when it receives an 'EOF' on its + 6. Bash inspects the value of the ‘ignoreeof’ option to ‘set -o’ + instead of exiting immediately when it receives an ‘EOF’ on its standard input when reading a command (*note The Set Builtin::). 7. Command history (*note Bash History Facilities::) and history expansion (*note History Interaction::) are enabled by default. - Bash will save the command history to the file named by '$HISTFILE' + Bash will save the command history to the file named by ‘$HISTFILE’ when a shell with history enabled exits. 8. Alias expansion (*note Aliases::) is performed by default. - 9. In the absence of any traps, Bash ignores 'SIGTERM' (*note + 9. In the absence of any traps, Bash ignores ‘SIGTERM’ (*note Signals::). - 10. In the absence of any traps, 'SIGINT' is caught and handled (*note - Signals::). 'SIGINT' will interrupt some shell builtins. + 10. In the absence of any traps, ‘SIGINT’ is caught and handled (*note + Signals::). ‘SIGINT’ will interrupt some shell builtins. - 11. An interactive login shell sends a 'SIGHUP' to all jobs on exit if - the 'huponexit' shell option has been enabled (*note Signals::). + 11. An interactive login shell sends a ‘SIGHUP’ to all jobs on exit if + the ‘huponexit’ shell option has been enabled (*note Signals::). - 12. The '-n' invocation option is ignored, and 'set -n' has no effect + 12. The ‘-n’ invocation option is ignored, and ‘set -n’ has no effect (*note The Set Builtin::). 13. Bash will check for mail periodically, depending on the values of - the 'MAIL', 'MAILPATH', and 'MAILCHECK' shell variables (*note Bash + the ‘MAIL’, ‘MAILPATH’, and ‘MAILCHECK’ shell variables (*note Bash Variables::). 14. Expansion errors due to references to unbound shell variables - after 'set -u' has been enabled will not cause the shell to exit + after ‘set -u’ has been enabled will not cause the shell to exit (*note The Set Builtin::). 15. The shell will not exit on expansion errors caused by VAR being - unset or null in '${VAR:?WORD}' expansions (*note Shell Parameter + unset or null in ‘${VAR:?WORD}’ expansions (*note Shell Parameter Expansion::). 16. Redirection errors encountered by shell builtins will not cause @@ -6304,20 +6526,20 @@ several ways. 17. When running in POSIX mode, a special builtin returning an error status will not cause the shell to exit (*note Bash POSIX Mode::). - 18. A failed 'exec' will not cause the shell to exit (*note Bourne + 18. A failed ‘exec’ will not cause the shell to exit (*note Bourne Shell Builtins::). 19. Parser syntax errors will not cause the shell to exit. - 20. If the 'cdspell' shell option is enabled, the shell will attempt - simple spelling correction for directory arguments to the 'cd' - builtin (see the description of the 'cdspell' option to the 'shopt' - builtin in *note The Shopt Builtin::). The 'cdspell' option is + 20. If the ‘cdspell’ shell option is enabled, the shell will attempt + simple spelling correction for directory arguments to the ‘cd’ + builtin (see the description of the ‘cdspell’ option to the ‘shopt’ + builtin in *note The Shopt Builtin::). The ‘cdspell’ option is only effective in interactive shells. - 21. The shell will check the value of the 'TMOUT' variable and exit if + 21. The shell will check the value of the ‘TMOUT’ variable and exit if a command is not read within the specified number of seconds after - printing '$PS1' (*note Bash Variables::). + printing ‘$PS1’ (*note Bash Variables::).  File: bash.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic, Prev: Interactive Shells, Up: Bash Features @@ -6325,9 +6547,9 @@ File: bash.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic, 6.4 Bash Conditional Expressions ================================ -Conditional expressions are used by the '[[' compound command (*note -Conditional Constructs::) and the 'test' and '[' builtin commands (*note -Bourne Shell Builtins::). The 'test' and '[' commands determine their +Conditional expressions are used by the ‘[[’ compound command (*note +Conditional Constructs::) and the ‘test’ and ‘[’ builtin commands (*note +Bourne Shell Builtins::). The ‘test’ and ‘[’ commands determine their behavior based on the number of arguments; see the descriptions of those commands for any other command-specific actions. @@ -6338,134 +6560,137 @@ well. Bash handles several filenames specially when they are used in expressions. If the operating system on which Bash is running provides these special files, Bash will use them; otherwise it will emulate them internally with this behavior: If the FILE argument to one of the -primaries is of the form '/dev/fd/N', then file descriptor N is checked. -If the FILE argument to one of the primaries is one of '/dev/stdin', -'/dev/stdout', or '/dev/stderr', file descriptor 0, 1, or 2, +primaries is of the form ‘/dev/fd/N’, then file descriptor N is checked. +If the FILE argument to one of the primaries is one of ‘/dev/stdin’, +‘/dev/stdout’, or ‘/dev/stderr’, file descriptor 0, 1, or 2, respectively, is checked. - When used with '[[', the '<' and '>' operators sort lexicographically -using the current locale. The 'test' command uses ASCII ordering. + When used with ‘[[’, the ‘<’ and ‘>’ operators sort lexicographically +using the current locale. The ‘test’ command uses ASCII ordering. Unless otherwise specified, primaries that operate on files follow symbolic links and operate on the target of the link, rather than the link itself. -'-a FILE' +‘-a FILE’ True if FILE exists. -'-b FILE' +‘-b FILE’ True if FILE exists and is a block special file. -'-c FILE' +‘-c FILE’ True if FILE exists and is a character special file. -'-d FILE' +‘-d FILE’ True if FILE exists and is a directory. -'-e FILE' +‘-e FILE’ True if FILE exists. -'-f FILE' +‘-f FILE’ True if FILE exists and is a regular file. -'-g FILE' +‘-g FILE’ True if FILE exists and its set-group-id bit is set. -'-h FILE' +‘-h FILE’ True if FILE exists and is a symbolic link. -'-k FILE' +‘-k FILE’ True if FILE exists and its "sticky" bit is set. -'-p FILE' +‘-p FILE’ True if FILE exists and is a named pipe (FIFO). -'-r FILE' +‘-r FILE’ True if FILE exists and is readable. -'-s FILE' +‘-s FILE’ True if FILE exists and has a size greater than zero. -'-t FD' +‘-t FD’ True if file descriptor FD is open and refers to a terminal. -'-u FILE' +‘-u FILE’ True if FILE exists and its set-user-id bit is set. -'-w FILE' +‘-w FILE’ True if FILE exists and is writable. -'-x FILE' +‘-x FILE’ True if FILE exists and is executable. -'-G FILE' +‘-G FILE’ True if FILE exists and is owned by the effective group id. -'-L FILE' +‘-L FILE’ True if FILE exists and is a symbolic link. -'-N FILE' +‘-N FILE’ True if FILE exists and has been modified since it was last read. -'-O FILE' +‘-O FILE’ True if FILE exists and is owned by the effective user id. -'-S FILE' +‘-S FILE’ True if FILE exists and is a socket. -'FILE1 -ef FILE2' +‘FILE1 -ef FILE2’ True if FILE1 and FILE2 refer to the same device and inode numbers. -'FILE1 -nt FILE2' +‘FILE1 -nt FILE2’ True if FILE1 is newer (according to modification date) than FILE2, or if FILE1 exists and FILE2 does not. -'FILE1 -ot FILE2' +‘FILE1 -ot FILE2’ True if FILE1 is older than FILE2, or if FILE2 exists and FILE1 does not. -'-o OPTNAME' +‘-o OPTNAME’ True if the shell option OPTNAME is enabled. The list of options - appears in the description of the '-o' option to the 'set' builtin + appears in the description of the ‘-o’ option to the ‘set’ builtin (*note The Set Builtin::). -'-v VARNAME' +‘-v VARNAME’ True if the shell variable VARNAME is set (has been assigned a - value). + value). If VARNAME is an indexed array variable name subscripted + by ‘@’ or ‘*’, this returns true if the array has any set elements. + If VARNAME is an associative array variable name subscripted by ‘@’ + or ‘*’, this returns true if an element with that key is set. -'-R VARNAME' +‘-R VARNAME’ True if the shell variable VARNAME is set and is a name reference. -'-z STRING' +‘-z STRING’ True if the length of STRING is zero. -'-n STRING' -'STRING' +‘-n STRING’ +‘STRING’ True if the length of STRING is non-zero. -'STRING1 == STRING2' -'STRING1 = STRING2' - True if the strings are equal. When used with the '[[' command, +‘STRING1 == STRING2’ +‘STRING1 = STRING2’ + True if the strings are equal. When used with the ‘[[’ command, this performs pattern matching as described above (*note Conditional Constructs::). - '=' should be used with the 'test' command for POSIX conformance. + ‘=’ should be used with the ‘test’ command for POSIX conformance. -'STRING1 != STRING2' +‘STRING1 != STRING2’ True if the strings are not equal. -'STRING1 < STRING2' +‘STRING1 < STRING2’ True if STRING1 sorts before STRING2 lexicographically. -'STRING1 > STRING2' +‘STRING1 > STRING2’ True if STRING1 sorts after STRING2 lexicographically. -'ARG1 OP ARG2' - 'OP' is one of '-eq', '-ne', '-lt', '-le', '-gt', or '-ge'. These +‘ARG1 OP ARG2’ + ‘OP’ is one of ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, or ‘-ge’. These arithmetic binary operators return true if ARG1 is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to ARG2, respectively. ARG1 and ARG2 may be - positive or negative integers. When used with the '[[' command, + positive or negative integers. When used with the ‘[[’ command, ARG1 and ARG2 are evaluated as arithmetic expressions (*note Shell Arithmetic::). @@ -6476,8 +6701,8 @@ File: bash.info, Node: Shell Arithmetic, Next: Aliases, Prev: Bash Conditiona ==================== The shell allows arithmetic expressions to be evaluated, as one of the -shell expansions or by using the '((' compound command, the 'let' -builtin, or the '-i' option to the 'declare' builtin. +shell expansions or by using the ‘((’ compound command, the ‘let’ +builtin, or the ‘-i’ option to the ‘declare’ builtin. Evaluation is done in fixed-width integers with no check for overflow, though division by 0 is trapped and flagged as an error. The @@ -6486,58 +6711,58 @@ as in the C language. The following list of operators is grouped into levels of equal-precedence operators. The levels are listed in order of decreasing precedence. -'ID++ ID--' +‘ID++ ID--’ variable post-increment and post-decrement -'++ID --ID' +‘++ID --ID’ variable pre-increment and pre-decrement -'- +' +‘- +’ unary minus and plus -'! ~' +‘! ~’ logical and bitwise negation -'**' +‘**’ exponentiation -'* / %' +‘* / %’ multiplication, division, remainder -'+ -' +‘+ -’ addition, subtraction -'<< >>' +‘<< >>’ left and right bitwise shifts -'<= >= < >' +‘<= >= < >’ comparison -'== !=' +‘== !=’ equality and inequality -'&' +‘&’ bitwise AND -'^' +‘^’ bitwise exclusive OR -'|' +‘|’ bitwise OR -'&&' +‘&&’ logical AND -'||' +‘||’ logical OR -'expr ? expr : expr' +‘expr ? if-true-expr : if-false-expr’ conditional operator -'= *= /= %= += -= <<= >>= &= ^= |=' +‘= *= /= %= += -= <<= >>= &= ^= |=’ assignment -'expr1 , expr2' +‘expr1 , expr2’ comma Shell variables are allowed as operands; parameter expansion is @@ -6547,19 +6772,19 @@ parameter expansion syntax. A shell variable that is null or unset evaluates to 0 when referenced by name without using the parameter expansion syntax. The value of a variable is evaluated as an arithmetic expression when it is referenced, or when a variable which has been -given the 'integer' attribute using 'declare -i' is assigned a value. A -null value evaluates to 0. A shell variable need not have its 'integer' +given the ‘integer’ attribute using ‘declare -i’ is assigned a value. A +null value evaluates to 0. A shell variable need not have its ‘integer’ attribute turned on to be used in an expression. Integer constants follow the C language definition, without suffixes or character constants. Constants with a leading 0 are interpreted as -octal numbers. A leading '0x' or '0X' denotes hexadecimal. Otherwise, -numbers take the form [BASE'#']N, where the optional BASE is a decimal +octal numbers. A leading ‘0x’ or ‘0X’ denotes hexadecimal. Otherwise, +numbers take the form [BASE‘#’]N, where the optional BASE is a decimal number between 2 and 64 representing the arithmetic base, and N is a -number in that base. If BASE'#' is omitted, then base 10 is used. When +number in that base. If BASE‘#’ is omitted, then base 10 is used. When specifying N, if a non-digit is required, the digits greater than 9 are -represented by the lowercase letters, the uppercase letters, '@', and -'_', in that order. If BASE is less than or equal to 36, lowercase and +represented by the lowercase letters, the uppercase letters, ‘@’, and +‘_’, in that order. If BASE is less than or equal to 36, lowercase and uppercase letters may be used interchangeably to represent numbers between 10 and 35. @@ -6573,33 +6798,39 @@ File: bash.info, Node: Aliases, Next: Arrays, Prev: Shell Arithmetic, Up: Ba 6.6 Aliases =========== -"Aliases" allow a string to be substituted for a word when it is used as -the first word of a simple command. The shell maintains a list of -aliases that may be set and unset with the 'alias' and 'unalias' builtin -commands. - - The first word of each simple command, if unquoted, is checked to see -if it has an alias. If so, that word is replaced by the text of the -alias. The characters '/', '$', '`', '=' and any of the shell -metacharacters or quoting characters listed above may not appear in an -alias name. The replacement text may contain any valid shell input, -including shell metacharacters. The first word of the replacement text -is tested for aliases, but a word that is identical to an alias being -expanded is not expanded a second time. This means that one may alias -'ls' to '"ls -F"', for instance, and Bash does not try to recursively -expand the replacement text. If the last character of the alias value -is a 'blank', then the next command word following the alias is also -checked for alias expansion. - - Aliases are created and listed with the 'alias' command, and removed -with the 'unalias' command. +“Aliases” allow a string to be substituted for a word that is in a +position in the input where it can be the first word of a simple +command. Aliases have names and corresponding values that are set and +unset using the ‘alias’ and ‘unalias’ builtin commands (*note Shell +Builtin Commands::). + + If the shell reads an unquoted word in the right position, it checks +the word to see if it matches an alias name. If it matches, the shell +replaces the word with the alias value, and reads that value as if it +had been read instead of the word. The shell doesn't look at any +characters following the word before attempting alias substitution. + + The characters ‘/’, ‘$’, ‘`’, ‘=’ and any of the shell metacharacters +or quoting characters listed above may not appear in an alias name. The +replacement text may contain any valid shell input, including shell +metacharacters. The first word of the replacement text is tested for +aliases, but a word that is identical to an alias being expanded is not +expanded a second time. This means that one may alias ‘ls’ to ‘"ls +-F"’, for instance, and Bash does not try to recursively expand the +replacement text. + + If the last character of the alias value is a ‘blank’, then the next +command word following the alias is also checked for alias expansion. + + Aliases are created and listed with the ‘alias’ command, and removed +with the ‘unalias’ command. There is no mechanism for using arguments in the replacement text, as -in 'csh'. If arguments are needed, use a shell function (*note Shell -Functions::). +in ‘csh’. If arguments are needed, use a shell function (*note Shell +Functions::) instead. Aliases are not expanded when the shell is not interactive, unless -the 'expand_aliases' shell option is set using 'shopt' (*note The Shopt +the ‘expand_aliases’ shell option is set using ‘shopt’ (*note The Shopt Builtin::). The rules concerning the definition and use of aliases are somewhat @@ -6615,7 +6846,7 @@ expanded when a function definition is read, not when the function is executed, because a function definition is itself a command. As a consequence, aliases defined in a function are not available until after that function is executed. To be safe, always put alias definitions on -a separate line, and do not use 'alias' in compound commands. +a separate line, and do not use ‘alias’ in compound commands. For almost every purpose, shell functions are preferred over aliases. @@ -6626,7 +6857,7 @@ File: bash.info, Node: Arrays, Next: The Directory Stack, Prev: Aliases, Up: ========== Bash provides one-dimensional indexed and associative array variables. -Any variable may be used as an indexed array; the 'declare' builtin will +Any variable may be used as an indexed array; the ‘declare’ builtin will explicitly declare an array. There is no maximum limit on the size of an array, nor any requirement that members be indexed or assigned contiguously. Indexed arrays are referenced using integers (including @@ -6648,20 +6879,22 @@ is also accepted; the SUBSCRIPT is ignored. Associative arrays are created using declare -A NAME - Attributes may be specified for an array variable using the 'declare' -and 'readonly' builtins. Each attribute applies to all members of an + Attributes may be specified for an array variable using the ‘declare’ +and ‘readonly’ builtins. Each attribute applies to all members of an array. Arrays are assigned to using compound assignments of the form NAME=(VALUE1 VALUE2 ... ) -where each VALUE may be of the form '[SUBSCRIPT]='STRING. Indexed array +where each VALUE may be of the form ‘[SUBSCRIPT]=’STRING. Indexed array assignments do not require anything but STRING. When assigning to indexed arrays, if the optional subscript is supplied, that index is assigned to; otherwise the index of the element assigned is the last index assigned to by the statement plus one. Indexing starts at zero. - Each VALUE in the list undergoes all the shell expansions described -above (*note Shell Expansions::). + Each VALUE in the list undergoes the shell expansions described above +(*note Shell Expansions::), but VALUEs that are valid variable +assignments including the brackets and subscript do not undergo brace +expansion and word splitting, as with individual variable assignments. When assigning to an associative array, the words in a compound assignment may be either assignment statements, for which the subscript @@ -6673,8 +6906,8 @@ interpreted; all assignments in a list must be of the same type. When using key/value pairs, the keys may not be missing or empty; a final missing value is treated like the empty string. - This syntax is also accepted by the 'declare' builtin. Individual -array elements may be assigned to using the 'NAME[SUBSCRIPT]=VALUE' + This syntax is also accepted by the ‘declare’ builtin. Individual +array elements may be assigned to using the ‘NAME[SUBSCRIPT]=VALUE’ syntax introduced above. When assigning to an indexed array, if NAME is subscripted by a @@ -6682,34 +6915,35 @@ negative number, that number is interpreted as relative to one greater than the maximum index of NAME, so negative indices count back from the end of the array, and an index of -1 references the last element. - The '+=' operator will append to an array variable when assigning + The ‘+=’ operator will append to an array variable when assigning using the compound assignment syntax; see *note Shell Parameters:: above. - Any element of an array may be referenced using '${NAME[SUBSCRIPT]}'. + Any element of an array may be referenced using ‘${NAME[SUBSCRIPT]}’. The braces are required to avoid conflicts with the shell's filename -expansion operators. If the SUBSCRIPT is '@' or '*', the word expands -to all members of the array NAME. These subscripts differ only when the -word appears within double quotes. If the word is double-quoted, -'${NAME[*]}' expands to a single word with the value of each array -member separated by the first character of the 'IFS' variable, and -'${NAME[@]}' expands each element of NAME to a separate word. When -there are no array members, '${NAME[@]}' expands to nothing. If the -double-quoted expansion occurs within a word, the expansion of the first -parameter is joined with the beginning part of the original word, and -the expansion of the last parameter is joined with the last part of the -original word. This is analogous to the expansion of the special -parameters '@' and '*'. '${#NAME[SUBSCRIPT]}' expands to the length of -'${NAME[SUBSCRIPT]}'. If SUBSCRIPT is '@' or '*', the expansion is the -number of elements in the array. If the SUBSCRIPT used to reference an -element of an indexed array evaluates to a number less than zero, it is -interpreted as relative to one greater than the maximum index of the -array, so negative indices count back from the end of the array, and an -index of -1 refers to the last element. +expansion operators. If the SUBSCRIPT is ‘@’ or ‘*’, the word expands +to all members of the array NAME, unless otherwise noted in the +description of a builtin or word expansion. These subscripts differ +only when the word appears within double quotes. If the word is +double-quoted, ‘${NAME[*]}’ expands to a single word with the value of +each array member separated by the first character of the ‘IFS’ +variable, and ‘${NAME[@]}’ expands each element of NAME to a separate +word. When there are no array members, ‘${NAME[@]}’ expands to nothing. +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. This is analogous to the expansion of the +special parameters ‘@’ and ‘*’. ‘${#NAME[SUBSCRIPT]}’ expands to the +length of ‘${NAME[SUBSCRIPT]}’. If SUBSCRIPT is ‘@’ or ‘*’, the +expansion is the number of elements in the array. If the SUBSCRIPT used +to reference an element of an indexed array evaluates to a number less +than zero, it is interpreted as relative to one greater than the maximum +index of the array, so negative indices count back from the end of the +array, and an index of -1 refers to the last element. Referencing an array variable without a subscript is equivalent to referencing with a subscript of 0. Any reference to a variable using a -valid subscript is legal, and 'bash' will create an array if necessary. +valid subscript is valid, and Bash will create an array if necessary. An array variable is considered set if a subscript has been assigned a value. The null string is a valid value. @@ -6717,32 +6951,32 @@ a value. The null string is a valid value. It is possible to obtain the keys (indices) of an array as well as the values. ${!NAME[@]} and ${!NAME[*]} expand to the indices assigned in array variable NAME. The treatment when in double quotes is similar -to the expansion of the special parameters '@' and '*' within double +to the expansion of the special parameters ‘@’ and ‘*’ within double quotes. - The 'unset' builtin is used to destroy arrays. 'unset -NAME[SUBSCRIPT]' destroys the array element at index SUBSCRIPT. + The ‘unset’ builtin is used to destroy arrays. ‘unset +NAME[SUBSCRIPT]’ destroys the array element at index SUBSCRIPT. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable does not unset -the variable. 'unset NAME', where NAME is an array, removes the entire -array. 'unset NAME[SUBSCRIPT]' behaves differently depending on the -array type when given a subscript of '*' or '@'. When NAME is an -associative array, it removes the element with key '*' or '@'. If NAME -is an indexed array, 'unset' removes all of the elements, but does not +the variable. ‘unset NAME’, where NAME is an array, removes the entire +array. ‘unset NAME[SUBSCRIPT]’ behaves differently depending on the +array type when given a subscript of ‘*’ or ‘@’. When NAME is an +associative array, it removes the element with key ‘*’ or ‘@’. If NAME +is an indexed array, ‘unset’ removes all of the elements, but does not remove the array itself. When using a variable name with a subscript as an argument to a -command, such as with 'unset', without using the word expansion syntax +command, such as with ‘unset’, without using the word expansion syntax described above, the argument is subject to the shell's filename expansion. If filename expansion is not desired, the argument should be quoted. - The 'declare', 'local', and 'readonly' builtins each accept a '-a' -option to specify an indexed array and a '-A' option to specify an -associative array. If both options are supplied, '-A' takes precedence. -The 'read' builtin accepts a '-a' option to assign a list of words read + The ‘declare’, ‘local’, and ‘readonly’ builtins each accept a ‘-a’ +option to specify an indexed array and a ‘-A’ option to specify an +associative array. If both options are supplied, ‘-A’ takes precedence. +The ‘read’ builtin accepts a ‘-a’ option to assign a list of words read from the standard input to an array, and can read values from the -standard input into individual array elements. The 'set' and 'declare' +standard input into individual array elements. The ‘set’ and ‘declare’ builtins display array values in a way that allows them to be reused as input. @@ -6758,14 +6992,14 @@ File: bash.info, Node: The Directory Stack, Next: Controlling the Prompt, Pre the directory stack. The directory stack is a list of recently-visited directories. The -'pushd' builtin adds directories to the stack as it changes the current -directory, and the 'popd' builtin removes specified directories from the +‘pushd’ builtin adds directories to the stack as it changes the current +directory, and the ‘popd’ builtin removes specified directories from the stack and changes the current directory to the directory removed. The -'dirs' builtin displays the contents of the directory stack. The +‘dirs’ builtin displays the contents of the directory stack. The current directory is always the "top" of the directory stack. The contents of the directory stack are also visible as the value of -the 'DIRSTACK' shell variable. +the ‘DIRSTACK’ shell variable.  File: bash.info, Node: Directory Stack Builtins, Up: The Directory Stack @@ -6773,105 +7007,105 @@ File: bash.info, Node: Directory Stack Builtins, Up: The Directory Stack 6.8.1 Directory Stack Builtins ------------------------------ -'dirs' +‘dirs’ dirs [-clpv] [+N | -N] Display the list of currently remembered directories. Directories - are added to the list with the 'pushd' command; the 'popd' command + are added to the list with the ‘pushd’ command; the ‘popd’ command removes directories from the list. The current directory is always the first directory in the stack. - '-c' + ‘-c’ Clears the directory stack by deleting all of the elements. - '-l' + ‘-l’ Produces a listing using full pathnames; the default listing format uses a tilde to denote the home directory. - '-p' - Causes 'dirs' to print the directory stack with one entry per + ‘-p’ + Causes ‘dirs’ to print the directory stack with one entry per line. - '-v' - Causes 'dirs' to print the directory stack with one entry per + ‘-v’ + Causes ‘dirs’ to print the directory stack with one entry per line, prefixing each entry with its index in the stack. - '+N' + ‘+N’ Displays the Nth directory (counting from the left of the list - printed by 'dirs' when invoked without options), starting with + printed by ‘dirs’ when invoked without options), starting with zero. - '-N' + ‘-N’ Displays the Nth directory (counting from the right of the - list printed by 'dirs' when invoked without options), starting + list printed by ‘dirs’ when invoked without options), starting with zero. -'popd' +‘popd’ popd [-n] [+N | -N] Removes elements from the directory stack. The elements are - numbered from 0 starting at the first directory listed by 'dirs'; - that is, 'popd' is equivalent to 'popd +0'. + numbered from 0 starting at the first directory listed by ‘dirs’; + that is, ‘popd’ is equivalent to ‘popd +0’. - When no arguments are given, 'popd' removes the top directory from + When no arguments are given, ‘popd’ removes the top directory from the stack and changes to the new top directory. Arguments, if supplied, have the following meanings: - '-n' + ‘-n’ Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated. - '+N' + ‘+N’ Removes the Nth directory (counting from the left of the list - printed by 'dirs'), starting with zero, from the stack. - '-N' + printed by ‘dirs’), starting with zero, from the stack. + ‘-N’ Removes the Nth directory (counting from the right of the list - printed by 'dirs'), starting with zero, from the stack. + printed by ‘dirs’), starting with zero, from the stack. - If the top element of the directory stack is modified, and the '-n' - option was not supplied, 'popd' uses the 'cd' builtin to change to - the directory at the top of the stack. If the 'cd' fails, 'popd' + If the top element of the directory stack is modified, and the ‘-n’ + option was not supplied, ‘popd’ uses the ‘cd’ builtin to change to + the directory at the top of the stack. If the ‘cd’ fails, ‘popd’ returns a non-zero value. - Otherwise, 'popd' returns an unsuccessful status if an invalid + Otherwise, ‘popd’ returns an unsuccessful status if an invalid option is encountered, the directory stack is empty, or a non-existent directory stack entry is specified. - If the 'popd' command is successful, Bash runs 'dirs' to show the + If the ‘popd’ command is successful, Bash runs ‘dirs’ to show the final contents of the directory stack, and the return status is 0. -'pushd' +‘pushd’ pushd [-n] [+N | -N | DIR] 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, 'pushd' exchanges the top two + directory. With no arguments, ‘pushd’ exchanges the top two elements of the directory stack. Arguments, if supplied, have the following meanings: - '-n' + ‘-n’ Suppresses the normal change of directory when rotating or adding directories to the stack, so that only the stack is manipulated. - '+N' + ‘+N’ Brings the Nth directory (counting from the left of the list - printed by 'dirs', starting with zero) to the top of the list + printed by ‘dirs’, starting with zero) to the top of the list by rotating the stack. - '-N' + ‘-N’ Brings the Nth directory (counting from the right of the list - printed by 'dirs', starting with zero) to the top of the list + printed by ‘dirs’, starting with zero) to the top of the list by rotating the stack. - 'DIR' + ‘DIR’ Makes DIR be the top of the stack. - After the stack has been modified, if the '-n' option was not - supplied, 'pushd' uses the 'cd' builtin to change to the directory - at the top of the stack. If the 'cd' fails, 'pushd' returns a + After the stack has been modified, if the ‘-n’ option was not + supplied, ‘pushd’ uses the ‘cd’ builtin to change to the directory + at the top of the stack. If the ‘cd’ fails, ‘pushd’ returns a non-zero value. - Otherwise, if no arguments are supplied, 'pushd' returns 0 unless + Otherwise, if no arguments are supplied, ‘pushd’ returns 0 unless the directory stack is empty. When rotating the directory stack, - 'pushd' returns 0 unless the directory stack is empty or a + ‘pushd’ returns 0 unless the directory stack is empty or a non-existent directory stack element is specified. - If the 'pushd' command is successful, Bash runs 'dirs' to show the + If the ‘pushd’ command is successful, Bash runs ‘dirs’ to show the final contents of the directory stack.  @@ -6880,72 +7114,72 @@ File: bash.info, Node: Controlling the Prompt, Next: The Restricted Shell, Pr 6.9 Controlling the Prompt ========================== -Bash examines the value of the array variable 'PROMPT_COMMAND' just +Bash examines the value of the array variable ‘PROMPT_COMMAND’ just before printing each primary prompt. If any elements in -'PROMPT_COMMAND' are set and non-null, Bash executes each value, in +‘PROMPT_COMMAND’ are set and non-null, Bash executes each value, in numeric order, just as if it had been typed on the command line. In addition, the following table describes the special characters -which can appear in the prompt variables 'PS0', 'PS1', 'PS2', and 'PS4': +which can appear in the prompt variables ‘PS0’, ‘PS1’, ‘PS2’, and ‘PS4’: -'\a' +‘\a’ A bell character. -'\d' +‘\d’ The date, in "Weekday Month Date" format (e.g., "Tue May 26"). -'\D{FORMAT}' - The FORMAT is passed to 'strftime'(3) and the result is inserted +‘\D{FORMAT}’ + The FORMAT is passed to ‘strftime’(3) and the result is inserted into the prompt string; an empty FORMAT results in a locale-specific time representation. The braces are required. -'\e' +‘\e’ An escape character. -'\h' +‘\h’ The hostname, up to the first '.'. -'\H' +‘\H’ The hostname. -'\j' +‘\j’ The number of jobs currently managed by the shell. -'\l' +‘\l’ The basename of the shell's terminal device name. -'\n' +‘\n’ A newline. -'\r' +‘\r’ A carriage return. -'\s' - The name of the shell, the basename of '$0' (the portion following +‘\s’ + The name of the shell, the basename of ‘$0’ (the portion following the final slash). -'\t' +‘\t’ The time, in 24-hour HH:MM:SS format. -'\T' +‘\T’ The time, in 12-hour HH:MM:SS format. -'\@' +‘\@’ The time, in 12-hour am/pm format. -'\A' +‘\A’ The time, in 24-hour HH:MM format. -'\u' +‘\u’ The username of the current user. -'\v' +‘\v’ The version of Bash (e.g., 2.00) -'\V' +‘\V’ The release of Bash, version + patchlevel (e.g., 2.00.0) -'\w' - The value of the 'PWD' shell variable ('$PWD'), with '$HOME' - abbreviated with a tilde (uses the '$PROMPT_DIRTRIM' variable). -'\W' - The basename of '$PWD', with '$HOME' abbreviated with a tilde. -'\!' +‘\w’ + The value of the ‘PWD’ shell variable (‘$PWD’), with ‘$HOME’ + abbreviated with a tilde (uses the ‘$PROMPT_DIRTRIM’ variable). +‘\W’ + The basename of ‘$PWD’, with ‘$HOME’ abbreviated with a tilde. +‘\!’ The history number of this command. -'\#' +‘\#’ The command number of this command. -'\$' - If the effective uid is 0, '#', otherwise '$'. -'\NNN' +‘\$’ + If the effective uid is 0, ‘#’, otherwise ‘$’. +‘\NNN’ The character whose ASCII code is the octal value NNN. -'\\' +‘\\’ A backslash. -'\[' +‘\[’ Begin a sequence of non-printing characters. This could be used to embed a terminal control sequence into the prompt. -'\]' +‘\]’ End a sequence of non-printing characters. The command number and the history number are usually different: the @@ -6956,7 +7190,7 @@ of commands executed during the current shell session. After the string is decoded, it is expanded via parameter expansion, command substitution, arithmetic expansion, and quote removal, subject -to the value of the 'promptvars' shell option (*note The Shopt +to the value of the ‘promptvars’ shell option (*note The Shopt Builtin::). This can have unwanted side effects if escaped portions of the string appear within command substitution or contain characters special to word expansion. @@ -6967,87 +7201,134 @@ File: bash.info, Node: The Restricted Shell, Next: Bash POSIX Mode, Prev: Con 6.10 The Restricted Shell ========================= -If Bash is started with the name 'rbash', or the '--restricted' or '-r' +If Bash is started with the name ‘rbash’, or the ‘--restricted’ or ‘-r’ 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. A restricted shell behaves identically to 'bash' +the standard shell. A restricted shell behaves identically to ‘bash’ with the exception that the following are disallowed or not performed: - * Changing directories with the 'cd' builtin. - * Setting or unsetting the values of the 'SHELL', 'PATH', 'HISTFILE', - 'ENV', or 'BASH_ENV' variables. - * Specifying command names containing slashes. - * Specifying a filename containing a slash as an argument to the '.' + • Changing directories with the ‘cd’ builtin. + • Setting or unsetting the values of the ‘SHELL’, ‘PATH’, ‘HISTFILE’, + ‘ENV’, or ‘BASH_ENV’ variables. + • Specifying command names containing slashes. + • Specifying a filename containing a slash as an argument to the ‘.’ builtin command. - * Specifying a filename containing a slash as an argument to the - 'history' builtin command. - * Specifying a filename containing a slash as an argument to the '-p' - option to the 'hash' builtin command. - * Importing function definitions from the shell environment at + • Specifying a filename containing a slash as an argument to the + ‘history’ builtin command. + • Specifying a filename containing a slash as an argument to the ‘-p’ + option to the ‘hash’ builtin command. + • Importing function definitions from the shell environment at startup. - * Parsing the value of 'SHELLOPTS' from the shell environment at + • Parsing the value of ‘SHELLOPTS’ from the shell environment at startup. - * Redirecting output using the '>', '>|', '<>', '>&', '&>', and '>>' + • Redirecting output using the ‘>’, ‘>|’, ‘<>’, ‘>&’, ‘&>’, and ‘>>’ redirection operators. - * Using the 'exec' builtin to replace the shell with another command. - * Adding or deleting builtin commands with the '-f' and '-d' options - to the 'enable' builtin. - * Using the 'enable' builtin command to enable disabled shell + • Using the ‘exec’ builtin to replace the shell with another command. + • Adding or deleting builtin commands with the ‘-f’ and ‘-d’ options + to the ‘enable’ builtin. + • Using the ‘enable’ builtin command to enable disabled shell builtins. - * Specifying the '-p' option to the 'command' builtin. - * Turning off restricted mode with 'set +r' or 'shopt -u - restricted_shell'. + • Specifying the ‘-p’ option to the ‘command’ builtin. + • Turning off restricted mode with ‘set +r’ or ‘shopt -u + restricted_shell’. These restrictions are enforced after any startup files are read. When a command that is found to be a shell script is executed (*note -Shell Scripts::), 'rbash' turns off any restrictions in the shell +Shell Scripts::), ‘rbash’ turns off any restrictions in the shell spawned to execute the script. The restricted shell mode is only one component of a useful -restricted environment. It should be accompanied by setting 'PATH' to a +restricted environment. It should be accompanied by setting ‘PATH’ to a value that allows execution of only a few verified commands (commands that allow shell escapes are particularly vulnerable), changing the -current directory to a non-writable directory other than '$HOME' after +current directory to a non-writable directory other than ‘$HOME’ after login, not allowing the restricted shell to execute shell scripts, and cleaning the environment of variables that cause some commands to modify -their behavior (e.g., 'VISUAL' or 'PAGER'). +their behavior (e.g., ‘VISUAL’ or ‘PAGER’). Modern systems provide more secure ways to implement a restricted -environment, such as 'jails', 'zones', or 'containers'. +environment, such as ‘jails’, ‘zones’, or ‘containers’.  File: bash.info, Node: Bash POSIX Mode, Next: Shell Compatibility Mode, Prev: The Restricted Shell, Up: Bash Features -6.11 Bash POSIX Mode -==================== +6.11 Bash and POSIX +=================== + +6.11.1 What is POSIX? +--------------------- + +POSIX is the name for a family of standards based on Unix. A number of +Unix services, tools, and functions are part of the standard, ranging +from the basic system calls and C library functions to common +applications and tools to system administration and management. + + The POSIX Shell and Utilities standard was originally developed by +IEEE Working Group 1003.2 (POSIX.2). The first edition of the 1003.2 +standard was published in 1992. It was merged with the original IEEE +1003.1 Working Group and is currently maintained by the Austin Group (a +joint working group of the IEEE, The Open Group and ISO/IEC SC22/WG15). +Today the Shell and Utilities are a volume within the set of documents +that make up IEEE Std 1003.1-2017, and thus the former POSIX.2 (from +1992) is now part of the current unified POSIX standard. + + The Shell and Utilities volume concentrates on the command +interpreter interface and utility programs commonly executed from the +command line or by other programs. The standard is freely available on +the web at +. + + Bash is concerned with the aspects of the shell's behavior defined by +the POSIX Shell and Utilities volume. The shell command language has of +course been standardized, including the basic flow control and program +execution constructs, I/O redirection and pipelines, argument handling, +variable expansion, and quoting. + + The special builtins, which must be implemented as part of the shell +to provide the desired functionality, are specified as being part of the +shell; examples of these are ‘eval’ and ‘export’. Other utilities +appear in the sections of POSIX not devoted to the shell which are +commonly (and in some cases must be) implemented as builtin commands, +such as ‘read’ and ‘test’. POSIX also specifies aspects of the shell's +interactive behavior, including job control and command line editing. +Only vi-style line editing commands have been standardized; emacs +editing commands were left out due to objections. + +6.11.2 Bash POSIX Mode +---------------------- + +Although Bash is an implementation of the POSIX shell specification, +there are areas where the Bash default behavior differs from the +specification. The Bash “posix mode” changes the Bash behavior in these +areas so that it conforms to the standard more closely. -Starting Bash with the '--posix' command-line option or executing 'set --o posix' while Bash is running will cause Bash to conform more closely -to the POSIX standard by changing the behavior to match that specified -by POSIX in areas where the Bash default differs. + Starting Bash with the ‘--posix’ command-line option or executing +‘set -o posix’ while Bash is running will cause Bash to conform more +closely to the POSIX standard by changing the behavior to match that +specified by POSIX in areas where the Bash default differs. - When invoked as 'sh', Bash enters POSIX mode after reading the + When invoked as ‘sh’, Bash enters POSIX mode after reading the startup files. The following list is what's changed when 'POSIX mode' is in effect: - 1. Bash ensures that the 'POSIXLY_CORRECT' variable is set. + 1. Bash ensures that the ‘POSIXLY_CORRECT’ variable is set. 2. When a command in the hash table no longer exists, Bash will - re-search '$PATH' to find the new location. This is also available - with 'shopt -s checkhash'. + re-search ‘$PATH’ to find the new location. This is also available + with ‘shopt -s checkhash’. 3. Bash will not insert a command without the execute bit set into the command hash table, even if it returns it as a (last-ditch) result - from a '$PATH' search. + from a ‘$PATH’ search. 4. The message printed by the job control code and builtins when a job exits with a non-zero status is 'Done(status)'. 5. The message printed by the job control code and builtins when a job is stopped is 'Stopped(SIGNAME)', where SIGNAME is, for example, - 'SIGTSTP'. + ‘SIGTSTP’. 6. Alias expansion is always enabled, even in non-interactive shells. @@ -7061,19 +7342,19 @@ startup files. the command substitution is initially parsed (e.g., as part of a function definition). - 9. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number - and '!!' to '!' are enabled, and parameter expansion is performed - on the values of 'PS1' and 'PS2' regardless of the setting of the - 'promptvars' option. + 9. The POSIX ‘PS1’ and ‘PS2’ expansions of ‘!’ to the history number + and ‘!!’ to ‘!’ are enabled, and parameter expansion is performed + on the values of ‘PS1’ and ‘PS2’ regardless of the setting of the + ‘promptvars’ option. - 10. The POSIX startup files are executed ('$ENV') rather than the + 10. The POSIX startup files are executed (‘$ENV’) rather than the normal Bash files. 11. Tilde expansion is only performed on assignments preceding a command name, rather than on all assignment statements on the line. - 12. The default history file is '~/.sh_history' (this is the default - value of '$HISTFILE'). + 12. The default history file is ‘~/.sh_history’ (this is the default + value the shell assigns to ‘$HISTFILE’). 13. Redirection operators do not perform filename expansion on the word in the redirection unless the shell is interactive. @@ -7081,7 +7362,7 @@ startup files. 14. Redirection operators do not perform word splitting on the word in the redirection. - 15. Function names must be valid shell 'name's. That is, they may not + 15. Function names must be valid shell ‘name’s. That is, they may not contain characters other than letters, digits, and underscores, and may not start with a digit. Declaring a function with an invalid name causes a fatal syntax error in non-interactive shells. @@ -7089,45 +7370,62 @@ startup files. 16. Function names may not be the same as one of the POSIX special builtins. - 17. POSIX special builtins are found before shell functions during - command lookup. + 17. Even if a shell function whose name contains a slash was defined + before entering POSIX mode, the shell will not execute a function + whose name contains one or more slashes. - 18. When printing shell function definitions (e.g., by 'type'), Bash - does not print the 'function' keyword. + 18. POSIX special builtins are found before shell functions during + command lookup, including output printed by the ‘type’ and + ‘command’ builtins. - 19. Literal tildes that appear as the first character in elements of - the 'PATH' variable are not expanded as described above under *note + 19. When printing shell function definitions (e.g., by ‘type’), Bash + does not print the ‘function’ keyword. + + 20. Literal tildes that appear as the first character in elements of + the ‘PATH’ variable are not expanded as described above under *note Tilde Expansion::. - 20. The 'time' reserved word may be used by itself as a command. When + 21. The ‘time’ reserved word may be used by itself as a command. When used in this way, it displays timing statistics for the shell and - its completed children. The 'TIMEFORMAT' variable controls the + its completed children. The ‘TIMEFORMAT’ variable controls the format of the timing information. - 21. When parsing and expanding a ${...} expansion that appears within + 22. When parsing and expanding a ${...} expansion that appears within double quotes, single quotes are no longer special and cannot be used to quote a closing brace or other special character, unless the operator is one of those defined to perform pattern removal. In this case, they do not have to appear as matched pairs. - 22. The parser does not recognize 'time' as a reserved word if the - next token begins with a '-'. + 23. The parser does not recognize ‘time’ as a reserved word if the + next token begins with a ‘-’. - 23. The '!' character does not introduce history expansion within a - double-quoted string, even if the 'histexpand' option is enabled. + 24. The ‘!’ character does not introduce history expansion within a + double-quoted string, even if the ‘histexpand’ option is enabled. - 24. If a POSIX special builtin returns an error status, a + 25. If a POSIX special builtin returns an error status, a non-interactive shell exits. The fatal errors are those listed in the POSIX standard, and include things like passing incorrect options, redirection errors, variable assignment errors for assignments preceding the command name, and so on. - 25. A non-interactive shell exits with an error status if a variable + 26. The ‘unset’ builtin with the ‘-v’ option specified returns a fatal + error if it attempts to unset a ‘readonly’ or ‘non-unsettable’ + variable, or encounters a variable name argument that is an invalid + identifier, which causes a non-interactive shell to exit. + + 27. When asked to unset a variable that appears in an assignment + statement preceding the command, the ‘unset’ builtin attempts to + unset a variable of the same name in the current or previous scope + as well. This implements the required "if an assigned variable is + further modified by the utility, the modifications made by the + utility shall persist" behavior. + + 28. A non-interactive shell exits with an error status if a variable assignment error occurs when no command name follows the assignment statements. A variable assignment error occurs, for example, when trying to assign a value to a readonly variable. - 26. A non-interactive shell exits with an error status if a variable + 29. A non-interactive shell exits with an error status if a variable assignment error occurs in an assignment statement preceding a special builtin, but not with any other simple command. For any other simple command, the shell aborts execution of that command, @@ -7135,152 +7433,188 @@ startup files. perform any further processing of the command in which the error occurred"). - 27. A non-interactive shell exits with an error status if the - iteration variable in a 'for' statement or the selection variable - in a 'select' statement is a readonly variable. + 30. A non-interactive shell exits with an error status if the + iteration variable in a ‘for’ statement or the selection variable + in a ‘select’ statement is a readonly variable or has an invalid + name. - 28. Non-interactive shells exit if FILENAME in '.' FILENAME is not + 31. Non-interactive shells exit if FILENAME in ‘.’ FILENAME is not found. - 29. Non-interactive shells exit if a syntax error in an arithmetic + 32. Non-interactive shells exit if a syntax error in an arithmetic expansion results in an invalid expression. - 30. Non-interactive shells exit if a parameter expansion error occurs. + 33. Non-interactive shells exit if a parameter expansion error occurs. - 31. Non-interactive shells exit if there is a syntax error in a script - read with the '.' or 'source' builtins, or in a string processed by - the 'eval' builtin. + 34. Non-interactive shells exit if there is a syntax error in a script + read with the ‘.’ or ‘source’ builtins, or in a string processed by + the ‘eval’ builtin. - 32. While variable indirection is available, it may not be applied to - the '#' and '?' special parameters. + 35. While variable indirection is available, it may not be applied to + the ‘#’ and ‘?’ special parameters. - 33. Expanding the '*' special parameter in a pattern context where the - expansion is double-quoted does not treat the '$*' as if it were + 36. Expanding the ‘*’ special parameter in a pattern context where the + expansion is double-quoted does not treat the ‘$*’ as if it were double-quoted. - 34. Assignment statements preceding POSIX special builtins persist in + 37. Assignment statements preceding POSIX special builtins persist in the shell environment after the builtin completes. - 35. The 'command' builtin does not prevent builtins that take + 38. The ‘command’ builtin does not prevent builtins that take assignment statements as arguments from expanding them as assignment statements; when not in POSIX mode, assignment builtins lose their assignment statement expansion properties when preceded - by 'command'. + by ‘command’. - 36. The 'bg' builtin uses the required format to describe each job + 39. The ‘bg’ builtin uses the required format to describe each job placed in the background, which does not include an indication of whether the job is the current or previous job. - 37. The output of 'kill -l' prints all the signal names on a single - line, separated by spaces, without the 'SIG' prefix. + 40. The output of ‘kill -l’ prints all the signal names on a single + line, separated by spaces, without the ‘SIG’ prefix. - 38. The 'kill' builtin does not accept signal names with a 'SIG' + 41. The ‘kill’ builtin does not accept signal names with a ‘SIG’ prefix. - 39. The 'export' and 'readonly' builtin commands display their output + 42. The ‘export’ and ‘readonly’ builtin commands display their output in the format required by POSIX. - 40. The 'trap' builtin displays signal names without the leading - 'SIG'. + 43. If the ‘export’ and ‘readonly’ builtin commands get an argument + that is not a valid identifier, and they are not operating on shell + functions, they return an error. This will cause a non-interactive + shell to exit because these are special builtins. - 41. The 'trap' builtin doesn't check the first argument for a possible + 44. The ‘trap’ builtin displays signal names without the leading + ‘SIG’. + + 45. The ‘trap’ builtin doesn't check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given signal to the original disposition, they should - use '-' as the first argument. + use ‘-’ as the first argument. - 42. 'trap -p' displays signals whose dispositions are set to SIG_DFL - and those that were ignored when the shell started. + 46. ‘trap -p’ without arguments displays signals whose dispositions + are set to SIG_DFL and those that were ignored when the shell + started, not just trapped signals. - 43. The '.' and 'source' builtins do not search the current directory - for the filename argument if it is not found by searching 'PATH'. + 47. The ‘.’ and ‘source’ builtins do not search the current directory + for the filename argument if it is not found by searching ‘PATH’. - 44. Enabling POSIX mode has the effect of setting the - 'inherit_errexit' option, so subshells spawned to execute command - substitutions inherit the value of the '-e' option from the parent - shell. When the 'inherit_errexit' option is not enabled, Bash - clears the '-e' option in such subshells. + 48. Enabling POSIX mode has the effect of setting the + ‘inherit_errexit’ option, so subshells spawned to execute command + substitutions inherit the value of the ‘-e’ option from the parent + shell. When the ‘inherit_errexit’ option is not enabled, Bash + clears the ‘-e’ option in such subshells. - 45. Enabling POSIX mode has the effect of setting the 'shift_verbose' - option, so numeric arguments to 'shift' that exceed the number of + 49. Enabling POSIX mode has the effect of setting the ‘shift_verbose’ + option, so numeric arguments to ‘shift’ that exceed the number of positional parameters will result in an error message. - 46. When the 'alias' builtin displays alias definitions, it does not - display them with a leading 'alias ' unless the '-p' option is + 50. When the ‘alias’ builtin displays alias definitions, it does not + display them with a leading ‘alias ’ unless the ‘-p’ option is supplied. - 47. When the 'set' builtin is invoked without options, it does not + 51. When the ‘set’ builtin is invoked without options, it does not display shell function names and definitions. - 48. When the 'set' builtin is invoked without options, it displays + 52. When the ‘set’ builtin is invoked without options, it displays variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. - 49. When the 'cd' builtin is invoked in logical mode, and the pathname - constructed from '$PWD' and the directory name supplied as an - argument does not refer to an existing directory, 'cd' will fail + 53. When the ‘cd’ builtin is invoked in logical mode, and the pathname + constructed from ‘$PWD’ and the directory name supplied as an + argument does not refer to an existing directory, ‘cd’ will fail instead of falling back to physical mode. - 50. When the 'cd' builtin cannot change a directory because the length - of the pathname constructed from '$PWD' and the directory name - supplied as an argument exceeds 'PATH_MAX' when all symbolic links - are expanded, 'cd' will fail instead of attempting to use only the - supplied directory name. + 54. When the ‘cd’ builtin cannot change a directory because the length + of the pathname constructed from ‘$PWD’ and the directory name + supplied as an argument exceeds ‘PATH_MAX’ when canonicalized, ‘cd’ + will attempt to use the supplied directory name. - 51. The 'pwd' builtin verifies that the value it prints is the same as + 55. The ‘pwd’ builtin verifies that the value it prints is the same as the current directory, even if it is not asked to check the file - system with the '-P' option. + system with the ‘-P’ option. - 52. When listing the history, the 'fc' builtin does not include an + 56. When listing the history, the ‘fc’ builtin does not include an indication of whether or not a history entry has been modified. - 53. The default editor used by 'fc' is 'ed'. + 57. The default editor used by ‘fc’ is ‘ed’. + + 58. ‘fc’ treats extra arguments as an error instead of ignoring them. - 54. The 'type' and 'command' builtins will not report a non-executable + 59. If there are too many arguments supplied to ‘fc -s’, ‘fc’ prints + an error message and returns failure. + + 60. The ‘type’ and ‘command’ builtins will not report a non-executable file as having been found, though the shell will attempt to execute - such a file if it is the only so-named file found in '$PATH'. + such a file if it is the only so-named file found in ‘$PATH’. - 55. The 'vi' editing mode will invoke the 'vi' editor directly when - the 'v' command is run, instead of checking '$VISUAL' and - '$EDITOR'. + 61. The ‘vi’ editing mode will invoke the ‘vi’ editor directly when + the ‘v’ command is run, instead of checking ‘$VISUAL’ and + ‘$EDITOR’. - 56. When the 'xpg_echo' option is enabled, Bash does not attempt to - interpret any arguments to 'echo' as options. Each argument is + 62. When the ‘xpg_echo’ option is enabled, Bash does not attempt to + interpret any arguments to ‘echo’ as options. Each argument is displayed, after escape characters are converted. - 57. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' - and '-f' options. + 63. The ‘ulimit’ builtin uses a block size of 512 bytes for the ‘-c’ + and ‘-f’ options. - 58. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not - interrupt the 'wait' builtin and cause it to return immediately. + 64. The arrival of ‘SIGCHLD’ when a trap is set on ‘SIGCHLD’ does not + interrupt the ‘wait’ builtin and cause it to return immediately. The trap command is run once for each child that exits. - 59. The 'read' builtin may be interrupted by a signal for which a trap + 65. The ‘read’ builtin may be interrupted by a signal for which a trap has been set. If Bash receives a trapped signal while executing - 'read', the trap handler executes and 'read' returns an exit status + ‘read’, the trap handler executes and ‘read’ returns an exit status greater than 128. - 60. The 'printf' builtin uses 'double' (via 'strtod') to convert + 66. The ‘printf’ builtin uses ‘double’ (via ‘strtod’) to convert arguments corresponding to floating point conversion specifiers, - instead of 'long double' if it's available. The 'L' length - modifier forces 'printf' to use 'long double' if it's available. + instead of ‘long double’ if it's available. The ‘L’ length + modifier forces ‘printf’ to use ‘long double’ if it's available. + + 67. Bash removes an exited background process's status from the list + of such statuses after the ‘wait’ builtin is used to obtain it. + + 68. A double quote character (‘"’) is treated specially when it + appears in a backquoted command substitution in the body of a + here-document that undergoes expansion. That means, for example, + that a backslash preceding a double quote character will escape it + and the backslash will be removed. + + 69. The ‘test’ builtin compares strings using the current locale when + processing the ‘<’ and ‘>’ binary operators. + + 70. The ‘test’ builtin's ‘-t’ unary primary requires an argument. + Historical versions of ‘test’ made the argument optional in certain + cases, and Bash attempts to accommodate those for backwards + compatibility. - 61. Bash removes an exited background process's status from the list - of such statuses after the 'wait' builtin is used to obtain it. + 71. Command substitutions don't set the ‘?’ special parameter. The + exit status of a simple command without a command word is still the + exit status of the last command substitution that occurred while + evaluating the variable assignments and redirections in that + command, but that does not happen until after all of the + assignments and redirections. There is other POSIX behavior that Bash does not implement by default even when in POSIX mode. Specifically: - 1. The 'fc' builtin checks '$EDITOR' as a program to edit history - entries if 'FCEDIT' is unset, rather than defaulting directly to - 'ed'. 'fc' uses 'ed' if 'EDITOR' is unset. + 1. The ‘fc’ builtin checks ‘$EDITOR’ as a program to edit history + entries if ‘FCEDIT’ is unset, rather than defaulting directly to + ‘ed’. ‘fc’ uses ‘ed’ if ‘EDITOR’ is unset. - 2. As noted above, Bash requires the 'xpg_echo' option to be enabled - for the 'echo' builtin to be fully conformant. + 2. A non-interactive shell does not exit if a variable assignment + preceding the ‘command’ builtin or another non-special builtin + fails. + + 3. As noted above, Bash requires the ‘xpg_echo’ option to be enabled + for the ‘echo’ builtin to be fully conformant. Bash can be configured to be POSIX-conformant by default, by -specifying the '--enable-strict-posix-default' to 'configure' when +specifying the ‘--enable-strict-posix-default’ to ‘configure’ when building (*note Optional Features::).  @@ -7289,9 +7623,9 @@ File: bash.info, Node: Shell Compatibility Mode, Prev: Bash POSIX Mode, Up: B 6.12 Shell Compatibility Mode ============================= -Bash-4.0 introduced the concept of a "shell compatibility level", -specified as a set of options to the shopt builtin ('compat31', -'compat32', 'compat40', 'compat41', and so on). There is only one +Bash-4.0 introduced the concept of a “shell compatibility level”, +specified as a set of options to the shopt builtin (‘compat31’, +‘compat32’, ‘compat40’, ‘compat41’, and so on). There is only one current compatibility level - each option is mutually exclusive. The compatibility level is intended to allow users to select behavior from previous versions that is incompatible with newer versions while they @@ -7299,152 +7633,150 @@ migrate scripts to use current features and behavior. It's intended to be a temporary solution. This section does not mention behavior that is standard for a -particular version (e.g., setting 'compat32' means that quoting the rhs +particular version (e.g., setting ‘compat32’ means that quoting the rhs of the regexp matching operator quotes special regexp characters in the word, which is default behavior in bash-3.2 and subsequent versions). - If a user enables, say, 'compat32', it may affect the behavior of + If a user enables, say, ‘compat32’, it may affect the behavior of other compatibility levels up to and including the current compatibility level. The idea is that each compatibility level controls behavior that changed in that version of Bash, but that behavior may have been present in earlier versions. For instance, the change to use locale-based -comparisons with the '[[' command came in bash-4.1, and earlier versions -used ASCII-based comparisons, so enabling 'compat32' will enable +comparisons with the ‘[[’ command came in bash-4.1, and earlier versions +used ASCII-based comparisons, so enabling ‘compat32’ will enable ASCII-based comparisons as well. That granularity may not be sufficient for all uses, and as a result users should employ compatibility levels carefully. Read the documentation for a particular feature to find out the current behavior. - Bash-4.3 introduced a new shell variable: 'BASH_COMPAT'. The value + Bash-4.3 introduced a new shell variable: ‘BASH_COMPAT’. The value assigned to this variable (a decimal version number like 4.2, or an -integer corresponding to the 'compat'NN option, like 42) determines the +integer corresponding to the ‘compat’NN option, like 42) determines the compatibility level. Starting with bash-4.4, Bash has begun deprecating older compatibility levels. Eventually, the options will be removed in favor -of 'BASH_COMPAT'. +of ‘BASH_COMPAT’. - Bash-5.0 is the final version for which there will be an individual -shopt option for the previous version. Users should use 'BASH_COMPAT' -on bash-5.0 and later versions. + Bash-5.0 was the final version for which there will be an individual +shopt option for the previous version. Users should control the +compatibility level with ‘BASH_COMPAT’. The following table describes the behavior changes controlled by each -compatibility level setting. The 'compat'NN tag is used as shorthand +compatibility level setting. The ‘compat’NN tag is used as shorthand for setting the compatibility level to NN using one of the following mechanisms. For versions prior to bash-5.0, the compatibility level may -be set using the corresponding 'compat'NN shopt option. For bash-4.3 -and later versions, the 'BASH_COMPAT' variable is preferred, and it is +be set using the corresponding ‘compat’NN shopt option. For bash-4.3 +and later versions, the ‘BASH_COMPAT’ variable is preferred, and it is required for bash-5.1 and later versions. -'compat31' - * quoting the rhs of the '[[' command's regexp matching operator +‘compat31’ + • quoting the rhs of the ‘[[’ command's regexp matching operator (=~) has no special effect -'compat32' - * interrupting a command list such as "a ; b ; c" causes the - execution of the next command in the list (in bash-4.0 and - later versions, the shell acts as if it received the - interrupt, so interrupting one command in a list aborts the - execution of the entire list) - -'compat40' - * the '<' and '>' operators to the '[[' command do not consider +‘compat40’ + • the ‘<’ and ‘>’ operators to the ‘[[’ command do not consider the current locale when comparing strings; they use ASCII ordering. Bash versions prior to bash-4.1 use ASCII collation and strcmp(3); bash-4.1 and later use the current locale's collation sequence and strcoll(3). -'compat41' - * in posix mode, 'time' may be followed by options and still be +‘compat41’ + • in posix mode, ‘time’ may be followed by options and still be recognized as a reserved word (this is POSIX interpretation 267) - * in posix mode, the parser requires that an even number of + • in posix mode, the parser requires that an even number of single quotes occur in the WORD portion of a double-quoted ${...} parameter expansion and treats them specially, so that characters within the single quotes are considered quoted (this is POSIX interpretation 221) -'compat42' - * the replacement string in double-quoted pattern substitution +‘compat42’ + • the replacement string in double-quoted pattern substitution does not undergo quote removal, as it does in versions after bash-4.2 - * in posix mode, single quotes are considered special when + • in posix mode, single quotes are considered special when expanding the WORD portion of a double-quoted ${...} parameter expansion and can be used to quote a closing brace or other special character (this is part of POSIX interpretation 221); in later versions, single quotes are not special within double-quoted word expansions -'compat43' - * the shell does not print a warning message if an attempt is +‘compat43’ + • the shell does not print a warning message if an attempt is made to use a quoted compound assignment as an argument to declare (e.g., declare -a foo='(1 2)'). Later versions warn that this usage is deprecated - * word expansion errors are considered non-fatal errors that + • word expansion errors are considered non-fatal errors that cause the current command to fail, even in posix mode (the default behavior is to make them fatal errors that cause the shell to exit) - * when executing a shell function, the loop state - (while/until/etc.) is not reset, so 'break' or 'continue' in + • when executing a shell function, the loop state + (while/until/etc.) is not reset, so ‘break’ or ‘continue’ in that function will break or continue loops in the calling context. Bash-4.4 and later reset the loop state to prevent this -'compat44' - * the shell sets up the values used by 'BASH_ARGV' and - 'BASH_ARGC' so they can expand to the shell's positional +‘compat44’ + • the shell sets up the values used by ‘BASH_ARGV’ and + ‘BASH_ARGC’ so they can expand to the shell's positional parameters even if extended debugging mode is not enabled - * a subshell inherits loops from its parent context, so 'break' - or 'continue' will cause the subshell to exit. Bash-5.0 and + • a subshell inherits loops from its parent context, so ‘break’ + or ‘continue’ will cause the subshell to exit. Bash-5.0 and later reset the loop state to prevent the exit - * variable assignments preceding builtins like 'export' and - 'readonly' that set attributes continue to affect variables + • variable assignments preceding builtins like ‘export’ and + ‘readonly’ that set attributes continue to affect variables with the same name in the calling environment even if the shell is not in posix mode -'compat50 (set using BASH_COMPAT)' - * Bash-5.1 changed the way '$RANDOM' is generated to introduce +‘compat50 (set using BASH_COMPAT)’ + • Bash-5.1 changed the way ‘$RANDOM’ is generated to introduce slightly more randomness. If the shell compatibility level is set to 50 or lower, it reverts to the method from bash-5.0 and previous versions, so seeding the random number generator by - assigning a value to 'RANDOM' will produce the same sequence + assigning a value to ‘RANDOM’ will produce the same sequence as in bash-5.0 - * If the command hash table is empty, Bash versions prior to + • If the command hash table is empty, Bash versions prior to bash-5.1 printed an informational message to that effect, even when producing output that can be reused as input. Bash-5.1 - suppresses that message when the '-l' option is supplied. + suppresses that message when the ‘-l’ option is supplied. -'compat51 (set using BASH_COMPAT)' - * The 'unset' builtin will unset the array 'a' given an argument - like 'a[@]'. Bash-5.2 will unset an element with key '@' +‘compat51 (set using BASH_COMPAT)’ + • The ‘unset’ builtin will unset the array ‘a’ given an argument + like ‘a[@]’. Bash-5.2 will unset an element with key ‘@’ (associative arrays) or remove all the elements without unsetting the array (indexed arrays) - * arithmetic commands ( ((...)) ) and the expressions in an + • arithmetic commands ( ((...)) ) and the expressions in an arithmetic for statement can be expanded more than once - * expressions used as arguments to arithmetic operators in the - '[[' conditional command can be expanded more than once - * the expressions in substring parameter brace expansion can be + • expressions used as arguments to arithmetic operators in the + ‘[[’ conditional command can be expanded more than once + • the expressions in substring parameter brace expansion can be expanded more than once - * the expressions in the $(( ... )) word expansion can be + • the expressions in the $(( ... )) word expansion can be expanded more than once - * arithmetic expressions used as indexed array subscripts can be + • arithmetic expressions used as indexed array subscripts can be expanded more than once - * 'test -v', when given an argument of 'A[@]', where A is an + • ‘test -v’, when given an argument of ‘A[@]’, where A is an existing associative array, will return true if the array has any set elements. Bash-5.2 will look for and report on a key - named '@' - * the ${PARAMETER[:]=VALUE} word expansion will return VALUE, + named ‘@’ + • the ${PARAMETER[:]=VALUE} word expansion will return VALUE, before any variable-specific transformations have been performed (e.g., converting to lowercase). Bash-5.2 will return the final value assigned to the variable. - * Parsing command substitutions will behave as if extended glob - (*note The Shopt Builtin::) is enabled, so that parsing a - command substitution containing an extglob pattern (say, as - part of a shell function) will not fail. This assumes the - intent is to enable extglob before the command is executed and - word expansions are performed. It will fail at word expansion - time if extglob hasn't been enabled by the time the command is - executed. + • Parsing command substitutions will behave as if extended + globbing (*note The Shopt Builtin::) is enabled, so that + parsing a command substitution containing an extglob pattern + (say, as part of a shell function) will not fail. This + assumes the intent is to enable extglob before the command is + executed and word expansions are performed. It will fail at + word expansion time if extglob hasn't been enabled by the time + the command is executed. + +‘compat52 (set using BASH_COMPAT)’ + • The ‘test’ builtin uses its historical algorithm to parse + parenthesized subexpressions when given five or more + arguments.  File: bash.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top @@ -7476,7 +7808,7 @@ interface supplied jointly by the operating system kernel's terminal driver and Bash. The shell associates a JOB with each pipeline. It keeps a table of -currently executing jobs, which may be listed with the 'jobs' command. +currently executing jobs, which may be listed with the ‘jobs’ command. When Bash starts a job asynchronously, it prints a line that looks like: [1] 25647 indicating that this job is job number 1 and that the process ID of the @@ -7488,71 +7820,71 @@ uses the JOB abstraction as the basis for job control. control, the operating system maintains the notion of a current terminal process group ID. Members of this process group (processes whose process group ID is equal to the current terminal process group ID) -receive keyboard-generated signals such as 'SIGINT'. These processes +receive keyboard-generated signals such as ‘SIGINT’. These processes are said to be in the foreground. Background processes are those whose process group ID differs from the terminal's; such processes are immune to keyboard-generated signals. Only foreground processes are allowed to -read from or, if the user so specifies with 'stty tostop', write to the +read from or, if the user so specifies with ‘stty tostop’, write to the terminal. Background processes which attempt to read from (write to -when 'stty tostop' is in effect) the terminal are sent a 'SIGTTIN' -('SIGTTOU') signal by the kernel's terminal driver, which, unless +when ‘tostop’ is in effect) the terminal are sent a ‘SIGTTIN’ +(‘SIGTTOU’) signal by the kernel's terminal driver, which, unless caught, suspends the process. If the operating system on which Bash is running supports job -control, Bash contains facilities to use it. Typing the "suspend" -character (typically '^Z', Control-Z) while a process is running causes +control, Bash contains facilities to use it. Typing the “suspend” +character (typically ‘^Z’, Control-Z) while a process is running causes that process to be stopped and returns control to Bash. Typing the -"delayed suspend" character (typically '^Y', Control-Y) causes the +“delayed suspend” character (typically ‘^Y’, Control-Y) causes the process to be stopped when it attempts to read input from the terminal, and control to be returned to Bash. The user then manipulates the state -of this job, using the 'bg' command to continue it in the background, -the 'fg' command to continue it in the foreground, or the 'kill' command -to kill it. A '^Z' takes effect immediately, and has the additional +of this job, using the ‘bg’ command to continue it in the background, +the ‘fg’ command to continue it in the foreground, or the ‘kill’ command +to kill it. A ‘^Z’ takes effect immediately, and has the additional side effect of causing pending output and typeahead to be discarded. There are a number of ways to refer to a job in the shell. The -character '%' introduces a job specification ("jobspec"). +character ‘%’ introduces a job specification (“jobspec”). - Job number 'n' may be referred to as '%n'. The symbols '%%' and '%+' + Job number ‘n’ may be referred to as ‘%n’. The symbols ‘%%’ and ‘%+’ refer to the shell's notion of the current job, which is the last job stopped while it was in the foreground or started in the background. A -single '%' (with no accompanying job specification) also refers to the -current job. The previous job may be referenced using '%-'. If there -is only a single job, '%+' and '%-' can both be used to refer to that -job. In output pertaining to jobs (e.g., the output of the 'jobs' -command), the current job is always flagged with a '+', and the previous -job with a '-'. +single ‘%’ (with no accompanying job specification) also refers to the +current job. The previous job may be referenced using ‘%-’. If there +is only a single job, ‘%+’ and ‘%-’ can both be used to refer to that +job. In output pertaining to jobs (e.g., the output of the ‘jobs’ +command), the current job is always flagged with a ‘+’, and the previous +job with a ‘-’. A job may also be referred to using a prefix of the name used to start it, or using a substring that appears in its command line. For -example, '%ce' refers to a stopped job whose command name begins with -'ce'. Using '%?ce', on the other hand, refers to any job containing the -string 'ce' in its command line. If the prefix or substring matches +example, ‘%ce’ refers to a stopped job whose command name begins with +‘ce’. Using ‘%?ce’, on the other hand, refers to any job containing the +string ‘ce’ in its command line. If the prefix or substring matches more than one job, Bash reports an error. - Simply naming a job can be used to bring it into the foreground: '%1' -is a synonym for 'fg %1', bringing job 1 from the background into the -foreground. Similarly, '%1 &' resumes job 1 in the background, -equivalent to 'bg %1' + Simply naming a job can be used to bring it into the foreground: ‘%1’ +is a synonym for ‘fg %1’, bringing job 1 from the background into the +foreground. Similarly, ‘%1 &’ resumes job 1 in the background, +equivalent to ‘bg %1’ The shell learns immediately whenever a job changes state. Normally, Bash waits until it is about to print a prompt before reporting changes -in a job's status so as to not interrupt any other output. If the '-b' -option to the 'set' builtin is enabled, Bash reports such changes -immediately (*note The Set Builtin::). Any trap on 'SIGCHLD' is +in a job's status so as to not interrupt any other output. If the ‘-b’ +option to the ‘set’ builtin is enabled, Bash reports such changes +immediately (*note The Set Builtin::). Any trap on ‘SIGCHLD’ is executed for each child process that exits. If an attempt to exit Bash is made while jobs are stopped, (or -running, if the 'checkjobs' option is enabled - see *note The Shopt -Builtin::), the shell prints a warning message, and if the 'checkjobs' -option is enabled, lists the jobs and their statuses. The 'jobs' +running, if the ‘checkjobs’ option is enabled - see *note The Shopt +Builtin::), the shell prints a warning message, and if the ‘checkjobs’ +option is enabled, lists the jobs and their statuses. The ‘jobs’ command may then be used to inspect their status. If a second attempt to exit is made without an intervening command, Bash does not print another warning, and any stopped jobs are terminated. - When the shell is waiting for a job or process using the 'wait' -builtin, and job control is enabled, 'wait' will return when the job -changes state. The '-f' option causes 'wait' to wait until the job or + When the shell is waiting for a job or process using the ‘wait’ +builtin, and job control is enabled, ‘wait’ will return when the job +changes state. The ‘-f’ option causes ‘wait’ to wait until the job or process terminates before returning.  @@ -7561,17 +7893,17 @@ File: bash.info, Node: Job Control Builtins, Next: Job Control Variables, Pre 7.2 Job Control Builtins ======================== -'bg' +‘bg’ bg [JOBSPEC ...] Resume each suspended job JOBSPEC in the background, as if it had - been started with '&'. If JOBSPEC is not supplied, the current job + been started with ‘&’. If JOBSPEC is not supplied, the current job is used. The return status is zero unless it is run when job control is not enabled, or, when run with job control enabled, any JOBSPEC was not found or specifies a job that was started without job control. -'fg' +‘fg’ fg [JOBSPEC] Resume the job JOBSPEC in the foreground and make it the current @@ -7581,106 +7913,106 @@ File: bash.info, Node: Job Control Builtins, Next: Job Control Variables, Pre control enabled, JOBSPEC does not specify a valid job or JOBSPEC specifies a job that was started without job control. -'jobs' +‘jobs’ jobs [-lnprs] [JOBSPEC] jobs -x COMMAND [ARGUMENTS] The first form lists the active jobs. The options have the following meanings: - '-l' + ‘-l’ List process IDs in addition to the normal information. - '-n' + ‘-n’ Display information only about jobs that have changed status since the user was last notified of their status. - '-p' + ‘-p’ List only the process ID of the job's process group leader. - '-r' + ‘-r’ Display only running jobs. - '-s' + ‘-s’ Display only stopped jobs. If JOBSPEC is given, output is restricted to information about that job. If JOBSPEC is not supplied, the status of all jobs is listed. - If the '-x' option is supplied, 'jobs' replaces any JOBSPEC found + If the ‘-x’ option is supplied, ‘jobs’ replaces any JOBSPEC found in COMMAND or ARGUMENTS with the corresponding process group ID, and executes COMMAND, passing it ARGUMENTs, returning its exit status. -'kill' +‘kill’ kill [-s SIGSPEC] [-n SIGNUM] [-SIGSPEC] JOBSPEC or PID kill -l|-L [EXIT_STATUS] Send a signal specified by SIGSPEC or SIGNUM to the process named by job specification JOBSPEC or process ID PID. SIGSPEC is either - a case-insensitive signal name such as 'SIGINT' (with or without - the 'SIG' prefix) or a signal number; SIGNUM is a signal number. - If SIGSPEC and SIGNUM are not present, 'SIGTERM' is used. The '-l' + a case-insensitive signal name such as ‘SIGINT’ (with or without + the ‘SIG’ prefix) or a signal number; SIGNUM is a signal number. + If SIGSPEC and SIGNUM are not present, ‘SIGTERM’ is used. The ‘-l’ option lists the signal names. If any arguments are supplied when - '-l' is given, the names of the signals corresponding to the + ‘-l’ is given, the names of the signals corresponding to the arguments are listed, and the return status is zero. EXIT_STATUS is a number specifying a signal number or the exit status of a - process terminated by a signal. The '-L' option is equivalent to - '-l'. The return status is zero if at least one signal was + process terminated by a signal. The ‘-L’ option is equivalent to + ‘-l’. The return status is zero if at least one signal was successfully sent, or non-zero if an error occurs or an invalid option is encountered. -'wait' +‘wait’ wait [-fn] [-p VARNAME] [JOBSPEC or PID ...] Wait until the child process specified by each process ID PID or job specification JOBSPEC exits and return the exit status of the last command waited for. If a job spec is given, all processes in - the job are waited for. If no arguments are given, 'wait' waits + the job are waited for. If no arguments are given, ‘wait’ waits for all running background jobs and the last-executed process substitution, if its process id is the same as $!, and the return - status is zero. If the '-n' option is supplied, 'wait' waits for a + status is zero. If the ‘-n’ option is supplied, ‘wait’ waits for a single job from the list of PIDs or JOBSPECs or, if no arguments are supplied, any job, to complete and returns its exit status. If none of the supplied arguments is a child of the shell, or if no arguments are supplied and the shell has no unwaited-for children, - the exit status is 127. If the '-p' option is supplied, the + the exit status is 127. If the ‘-p’ option is supplied, the process or job identifier of the job for which the exit status is returned is assigned to the variable VARNAME named by the option argument. The variable will be unset initially, before any - assignment. This is useful only when the '-n' option is supplied. - Supplying the '-f' option, when job control is enabled, forces - 'wait' to wait for each PID or JOBSPEC to terminate before + assignment. This is useful only when the ‘-n’ option is supplied. + Supplying the ‘-f’ option, when job control is enabled, forces + ‘wait’ to wait for each PID or JOBSPEC to terminate before returning its status, instead of returning when it changes status. If neither JOBSPEC nor PID specifies an active child process of the - shell, the return status is 127. If 'wait' is interrupted by a + shell, the return status is 127. If ‘wait’ is interrupted by a signal, the return status will be greater than 128, as described above (*note Signals::). Otherwise, the return status is the exit status of the last process or job waited for. -'disown' +‘disown’ disown [-ar] [-h] [JOBSPEC ... | PID ... ] Without options, remove each JOBSPEC from the table of active jobs. - If the '-h' option is given, the job is not removed from the table, - but is marked so that 'SIGHUP' is not sent to the job if the shell - receives a 'SIGHUP'. If JOBSPEC is not present, and neither the - '-a' nor the '-r' option is supplied, the current job is used. If - no JOBSPEC is supplied, the '-a' option means to remove or mark all - jobs; the '-r' option without a JOBSPEC argument restricts + If the ‘-h’ option is given, the job is not removed from the table, + but is marked so that ‘SIGHUP’ is not sent to the job if the shell + receives a ‘SIGHUP’. If JOBSPEC is not present, and neither the + ‘-a’ nor the ‘-r’ option is supplied, the current job is used. If + no JOBSPEC is supplied, the ‘-a’ option means to remove or mark all + jobs; the ‘-r’ option without a JOBSPEC argument restricts operation to running jobs. -'suspend' +‘suspend’ suspend [-f] - Suspend the execution of this shell until it receives a 'SIGCONT' + Suspend the execution of this shell until it receives a ‘SIGCONT’ signal. A login shell, or a shell without job control enabled, - cannot be suspended; the '-f' option can be used to override this + cannot be suspended; the ‘-f’ option can be used to override this and force the suspension. The return status is 0 unless the shell - is a login shell or job control is not enabled and '-f' is not + is a login shell or job control is not enabled and ‘-f’ is not supplied. - When job control is not active, the 'kill' and 'wait' builtins do not + When job control is not active, the ‘kill’ and ‘wait’ builtins do not accept JOBSPEC arguments. They must be supplied process IDs.  @@ -7689,7 +8021,7 @@ File: bash.info, Node: Job Control Variables, Prev: Job Control Builtins, Up: 7.3 Job Control Variables ========================= -'auto_resume' +‘auto_resume’ This variable controls how the shell interacts with the user and job control. If this variable exists then single word simple commands without redirections are treated as candidates for @@ -7697,14 +8029,14 @@ File: bash.info, Node: Job Control Variables, Prev: Job Control Builtins, Up: there is more than one job beginning with the string typed, then the most recently accessed job will be selected. The name of a stopped job, in this context, is the command line used to start it. - If this variable is set to the value 'exact', the string supplied + If this variable is set to the value ‘exact’, the string supplied must match the name of a stopped job exactly; if set to - 'substring', the string supplied needs to match a substring of the - name of a stopped job. The 'substring' value provides - functionality analogous to the '%?' job ID (*note Job Control + ‘substring’, the string supplied needs to match a substring of the + name of a stopped job. The ‘substring’ value provides + functionality analogous to the ‘%?’ job ID (*note Job Control Basics::). 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 '%' job ID. + analogous to the ‘%’ job ID.  File: bash.info, Node: Command Line Editing, Next: Using History Interactively, Prev: Job Control, Up: Top @@ -7716,14 +8048,14 @@ This chapter describes the basic features of the GNU command line editing interface. Command line editing is provided by the Readline library, which is used by several different programs, including Bash. Command line editing is enabled by default when using an interactive -shell, unless the '--noediting' option is supplied at shell invocation. -Line editing is also used when using the '-e' option to the 'read' +shell, unless the ‘--noediting’ option is supplied at shell invocation. +Line editing is also used when using the ‘-e’ option to the ‘read’ builtin command (*note Bash Builtins::). By default, the line editing commands are similar to those of Emacs. A vi-style line editing interface is also available. Line editing can be enabled at any time -using the '-o emacs' or '-o vi' options to the 'set' builtin command -(*note The Set Builtin::), or disabled using the '+o emacs' or '+o vi' -options to 'set'. +using the ‘-o emacs’ or ‘-o vi’ options to the ‘set’ builtin command +(*note The Set Builtin::), or disabled using the ‘+o emacs’ or ‘+o vi’ +options to ‘set’. * Menu: @@ -7750,10 +8082,10 @@ File: bash.info, Node: Introduction and Notation, Next: Readline Interaction, The following paragraphs describe the notation used to represent keystrokes. - The text 'C-k' is read as 'Control-K' and describes the character + The text ‘C-k’ is read as 'Control-K' and describes the character produced when the key is pressed while the Control key is depressed. - The text 'M-k' is read as 'Meta-K' and describes the character + The text ‘M-k’ is read as 'Meta-K' and describes the character produced when the Meta key (if you have one) is depressed, and the key is pressed. The Meta key is labeled on many keyboards. On keyboards with two keys labeled (usually to either side of the @@ -7764,11 +8096,11 @@ Compose key for typing accented characters. If you do not have a Meta or key, or another key working as a Meta key, the identical keystroke can be generated by typing -_first_, and then typing . Either process is known as "metafying" +_first_, and then typing . Either process is known as “metafying” the key. - The text 'M-C-k' is read as 'Meta-Control-k' and describes the -character produced by "metafying" 'C-k'. + The text ‘M-C-k’ is read as 'Meta-Control-k' and describes the +character produced by “metafying” ‘C-k’. In addition, several keys have their own names. Specifically, , , , , , and all stand for themselves when seen @@ -7815,8 +8147,8 @@ character to back up and delete the mistyped character. Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type -'C-b' to move the cursor to the left, and then correct your mistake. -Afterwards, you can move the cursor to the right with 'C-f'. +‘C-b’ to move the cursor to the left, and then correct your mistake. +Afterwards, you can move the cursor to the right with ‘C-f’. When you add text in the middle of a line, you will notice that characters to the right of the cursor are 'pushed over' to make room for @@ -7825,23 +8157,23 @@ the cursor, characters to the right of the cursor are 'pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows. -'C-b' +‘C-b’ Move back one character. -'C-f' +‘C-f’ Move forward one character. or Delete the character to the left of the cursor. -'C-d' +‘C-d’ Delete the character underneath the cursor. Printing characters Insert the character into the line at the cursor. -'C-_' or 'C-x C-u' +‘C-_’ or ‘C-x C-u’ Undo the last editing command. You can undo all the way back to an empty line. (Depending on your configuration, the key might be set to delete the character to the left of the cursor and the key set to -delete the character underneath the cursor, like 'C-d', rather than the +delete the character underneath the cursor, like ‘C-d’, rather than the character to the left of the cursor.)  @@ -7852,22 +8184,22 @@ File: bash.info, Node: Readline Movement Commands, Next: Readline Killing Comm The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other -commands have been added in addition to 'C-b', 'C-f', 'C-d', and . +commands have been added in addition to ‘C-b’, ‘C-f’, ‘C-d’, and . Here are some commands for moving more rapidly about the line. -'C-a' +‘C-a’ Move to the start of the line. -'C-e' +‘C-e’ Move to the end of the line. -'M-f' +‘M-f’ Move forward a word, where a word is composed of letters and digits. -'M-b' +‘M-b’ Move backward a word. -'C-l' +‘C-l’ Clear the screen, reprinting the current line at the top. - Notice how 'C-f' moves forward a character, while 'M-f' moves forward + Notice how ‘C-f’ moves forward a character, while ‘M-f’ moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words. @@ -7877,15 +8209,15 @@ File: bash.info, Node: Readline Killing Commands, Next: Readline Arguments, P 8.2.3 Readline Killing Commands ------------------------------- -"Killing" text means to delete the text from the line, but to save it -away for later use, usually by "yanking" (re-inserting) it back into the +“Killing” text means to delete the text from the line, but to save it +away for later use, usually by “yanking” (re-inserting) it back into the line. ('Cut' and 'paste' are more recent jargon for 'kill' and 'yank'.) If the description for a command says that it 'kills' text, then you can be sure that you can get the text back in a different (or the same) place later. - When you use a kill command, the text is saved in a "kill-ring". Any + When you use a kill command, the text is saved in a “kill-ring”. Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is @@ -7893,34 +8225,34 @@ available to be yanked back later, when you are typing another line. Here is the list of commands for killing text. -'C-k' +‘C-k’ Kill the text from the current cursor position to the end of the line. -'M-d' +‘M-d’ Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. Word boundaries are the same - as those used by 'M-f'. + as those used by ‘M-f’. -'M-' +‘M-’ Kill from the cursor to the start of the current word, or, if between words, to the start of the previous word. Word boundaries - are the same as those used by 'M-b'. + are the same as those used by ‘M-b’. -'C-w' +‘C-w’ Kill from the cursor to the previous whitespace. This is different - than 'M-' because the word boundaries differ. + than ‘M-’ because the word boundaries differ. - Here is how to "yank" the text back into the line. Yanking means to + Here is how to “yank” the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer. -'C-y' +‘C-y’ Yank the most recently killed text back into the buffer at the cursor. -'M-y' +‘M-y’ Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is 'C-y' or 'M-y'. + if the prior command is ‘C-y’ or ‘M-y’.  File: bash.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction @@ -7933,14 +8265,14 @@ argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the -start of the line, you might type 'M-- C-k'. +start of the line, you might type ‘M-- C-k’. The general way to pass numeric arguments to a command is to type meta digits before the command. If the first 'digit' typed is a minus -sign ('-'), then the sign of the argument will be negative. Once you +sign (‘-’), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the -'C-d' command an argument of 10, you could type 'M-1 0 C-d', which will +‘C-d’ command an argument of 10, you could type ‘M-1 0 C-d’, which will delete the next ten characters on the input line.  @@ -7951,25 +8283,25 @@ File: bash.info, Node: Searching, Prev: Readline Arguments, Up: Readline Inte Readline provides commands for searching through the command history (*note Bash History Facilities::) for lines containing a specified -string. There are two search modes: "incremental" and -"non-incremental". +string. There are two search modes: “incremental” and +“non-incremental”. Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the -history for a particular string, type 'C-r'. Typing 'C-s' searches +history for a particular string, type ‘C-r’. Typing ‘C-s’ searches forward through the history. The characters present in the value of the -'isearch-terminators' variable are used to terminate an incremental +‘isearch-terminators’ variable are used to terminate an incremental search. If that variable has not been assigned a value, the and -'C-J' characters will terminate an incremental search. 'C-g' will abort +‘C-J’ characters will terminate an incremental search. ‘C-g’ will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. - To find other matching entries in the history list, type 'C-r' or -'C-s' as appropriate. This will search backward or forward in the + To find other matching entries in the history list, type ‘C-r’ or +‘C-s’ as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a will terminate the @@ -7977,9 +8309,9 @@ search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. - Readline remembers the last incremental search string. If two 'C-r's + Readline remembers the last incremental search string. If two ‘C-r’s are typed without any intervening characters defining a new search -string, any remembered search string is used. +string, Readline uses any remembered search string. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be @@ -7994,18 +8326,18 @@ File: bash.info, Node: Readline Init File, Next: Bindable Readline Commands, Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by -putting commands in an "inputrc" file, conventionally in their home +putting commands in an “inputrc” file, conventionally in their home directory. The name of this file is taken from the value of the shell -variable 'INPUTRC'. If that variable is unset, the default is -'~/.inputrc'. If that file does not exist or cannot be read, the -ultimate default is '/etc/inputrc'. The 'bind' builtin command can also +variable ‘INPUTRC’. If that variable is unset, the default is +‘~/.inputrc’. If that file does not exist or cannot be read, the +ultimate default is ‘/etc/inputrc’. The ‘bind’ builtin command can also be used to set Readline keybindings and variables. *Note Bash Builtins::. When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. - In addition, the 'C-x C-r' command re-reads this init file, thus + In addition, the ‘C-x C-r’ command re-reads this init file, thus incorporating any changes that you might have made to it. * Menu: @@ -8023,20 +8355,20 @@ File: bash.info, Node: Readline Init File Syntax, Next: Conditional Init Const ------------------------------- There are only a few basic constructs allowed in the Readline init file. -Blank lines are ignored. Lines beginning with a '#' are comments. -Lines beginning with a '$' indicate conditional constructs (*note +Blank lines are ignored. Lines beginning with a ‘#’ are comments. +Lines beginning with a ‘$’ indicate conditional constructs (*note Conditional Init Constructs::). Other lines denote variable settings and key bindings. Variable Settings You can modify the run-time behavior of Readline by altering the - values of variables in Readline using the 'set' command within the + values of variables in Readline using the ‘set’ command within the init file. The syntax is simple: set VARIABLE VALUE Here, for example, is how to change from the default Emacs-like key - binding to use 'vi' line editing commands: + binding to use ‘vi’ line editing commands: set editing-mode vi @@ -8047,16 +8379,16 @@ Variable Settings on if the value is null or empty, ON (case-insensitive), or 1. Any other value results in the variable being set to off. - The 'bind -V' command lists the current Readline variable names and + The ‘bind -V’ command lists the current Readline variable names and values. *Note Bash Builtins::. A great deal of run-time behavior is changeable with the following variables. - 'active-region-start-color' + ‘active-region-start-color’ A string variable that controls the text color and background when displaying the text in the active region (see the - description of 'enable-active-region' below). This string + description of ‘enable-active-region’ below). This string must not take up any physical character positions on the display, so it should consist only of terminal escape sequences. It is output to the terminal before displaying the @@ -8064,11 +8396,11 @@ Variable Settings default value whenever the terminal type changes. The default value is the string that puts the terminal in standout mode, as obtained from the terminal's terminfo description. A - sample value might be '\e[01;33m'. + sample value might be ‘\e[01;33m’. - 'active-region-end-color' + ‘active-region-end-color’ A string variable that "undoes" the effects of - 'active-region-start-color' and restores "normal" terminal + ‘active-region-start-color’ and restores "normal" terminal display appearance after displaying text in the active region. This string must not take up any physical character positions on the display, so it should consist only of terminal escape @@ -8077,72 +8409,75 @@ Variable Settings default value whenever the terminal type changes. The default value is the string that restores the terminal from standout mode, as obtained from the terminal's terminfo description. A - sample value might be '\e[0m'. + sample value might be ‘\e[0m’. - 'bell-style' + ‘bell-style’ Controls what happens when Readline wants to ring the terminal - bell. If set to 'none', Readline never rings the bell. If - set to 'visible', Readline uses a visible bell if one is - available. If set to 'audible' (the default), Readline + bell. If set to ‘none’, Readline never rings the bell. If + set to ‘visible’, Readline uses a visible bell if one is + available. If set to ‘audible’ (the default), Readline attempts to ring the terminal's bell. - 'bind-tty-special-chars' - If set to 'on' (the default), Readline attempts to bind the - control characters treated specially by the kernel's terminal - driver to their Readline equivalents. + ‘bind-tty-special-chars’ + If set to ‘on’ (the default), Readline attempts to bind the + control characters that are treated specially by the kernel's + terminal driver to their Readline equivalents. These override + the default Readline bindings described here. Type ‘stty -a’ + at a Bash prompt to see your current terminal settings, + including the special control characters (usually ‘cchars’). - 'blink-matching-paren' - If set to 'on', Readline attempts to briefly move the cursor + ‘blink-matching-paren’ + If set to ‘on’, Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is - inserted. The default is 'off'. + inserted. The default is ‘off’. - 'colored-completion-prefix' - If set to 'on', when listing completions, Readline displays + ‘colored-completion-prefix’ + If set to ‘on’, when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the - value of the 'LS_COLORS' environment variable. If there is a - color definition in 'LS_COLORS' for the custom suffix - 'readline-colored-completion-prefix', Readline uses this color + value of the ‘LS_COLORS’ environment variable. If there is a + color definition in ‘LS_COLORS’ for the custom suffix + ‘readline-colored-completion-prefix’, Readline uses this color for the common prefix instead of its default. The default is - 'off'. + ‘off’. - 'colored-stats' - If set to 'on', Readline displays possible completions using + ‘colored-stats’ + If set to ‘on’, Readline displays possible completions using different colors to indicate their file type. The color - definitions are taken from the value of the 'LS_COLORS' - environment variable. The default is 'off'. + definitions are taken from the value of the ‘LS_COLORS’ + environment variable. The default is ‘off’. - 'comment-begin' + ‘comment-begin’ The string to insert at the beginning of the line when the - 'insert-comment' command is executed. The default value is - '"#"'. + ‘insert-comment’ command is executed. The default value is + ‘"#"’. - 'completion-display-width' + ‘completion-display-width’ The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. - 'completion-ignore-case' - If set to 'on', Readline performs filename matching and + ‘completion-ignore-case’ + If set to ‘on’, Readline performs filename matching and completion in a case-insensitive fashion. The default value - is 'off'. + is ‘off’. - 'completion-map-case' - If set to 'on', and COMPLETION-IGNORE-CASE is enabled, - Readline treats hyphens ('-') and underscores ('_') as + ‘completion-map-case’ + If set to ‘on’, and COMPLETION-IGNORE-CASE is enabled, + Readline treats hyphens (‘-’) and underscores (‘_’) as equivalent when performing case-insensitive filename matching - and completion. The default value is 'off'. + and completion. The default value is ‘off’. - 'completion-prefix-display-length' + ‘completion-prefix-display-length’ The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. - 'completion-query-items' + ‘completion-query-items’ The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater @@ -8151,88 +8486,88 @@ Variable Settings listed. This variable must be set to an integer value greater than or equal to zero. A zero value means Readline should never ask; negative values are treated as zero. The default - limit is '100'. + limit is ‘100’. - 'convert-meta' - If set to 'on', Readline will convert characters with the + ‘convert-meta’ + If set to ‘on’, Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing an character, converting them - to a meta-prefixed key sequence. The default value is 'on', - but will be set to 'off' if the locale is one that contains + to a meta-prefixed key sequence. The default value is ‘on’, + but will be set to ‘off’ if the locale is one that contains eight-bit characters. This variable is dependent on the - 'LC_CTYPE' locale category, and may change if the locale is + ‘LC_CTYPE’ locale category, and may change if the locale is changed. - 'disable-completion' - If set to 'On', Readline will inhibit word completion. + ‘disable-completion’ + If set to ‘On’, Readline will inhibit word completion. Completion characters will be inserted into the line as if - they had been mapped to 'self-insert'. The default is 'off'. + they had been mapped to ‘self-insert’. The default is ‘off’. - 'echo-control-characters' - When set to 'on', on operating systems that indicate they + ‘echo-control-characters’ + When set to ‘on’, on operating systems that indicate they support it, Readline echoes a character corresponding to a - signal generated from the keyboard. The default is 'on'. + signal generated from the keyboard. The default is ‘on’. - 'editing-mode' - The 'editing-mode' variable controls which default set of key + ‘editing-mode’ + The ‘editing-mode’ variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. - This variable can be set to either 'emacs' or 'vi'. + This variable can be set to either ‘emacs’ or ‘vi’. - 'emacs-mode-string' + ‘emacs-mode-string’ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. - Use the '\1' and '\2' escapes to begin and end sequences of + Use the ‘\1’ and ‘\2’ escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal - control sequence into the mode string. The default is '@'. + control sequence into the mode string. The default is ‘@’. - 'enable-active-region' - The "point" is the current cursor position, and "mark" refers + ‘enable-active-region’ + The “point” is the current cursor position, and “mark” refers to a saved cursor position (*note Commands For Moving::). The text between the point and mark is referred to as the - "region". When this variable is set to 'On', Readline allows - certain commands to designate the region as "active". When + “region”. When this variable is set to ‘On’, Readline allows + certain commands to designate the region as “active”. When the region is active, Readline highlights the text in the - region using the value of the 'active-region-start-color', + region using the value of the ‘active-region-start-color’, which defaults to the string that enables the terminal's standout mode. The active region shows the text inserted by bracketed-paste and any matching text found by incremental and - non-incremental history searches. The default is 'On'. + non-incremental history searches. The default is ‘On’. - 'enable-bracketed-paste' - When set to 'On', Readline configures the terminal to insert + ‘enable-bracketed-paste’ + When set to ‘On’, Readline configures the terminal to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. This is called putting the - terminal into "bracketed paste mode"; it prevents Readline + terminal into “bracketed paste mode”; it prevents Readline from executing any editing commands bound to key sequences - appearing in the pasted text. The default is 'On'. + appearing in the pasted text. The default is ‘On’. - 'enable-keypad' - When set to 'on', Readline will try to enable the application + ‘enable-keypad’ + When set to ‘on’, Readline will try to enable the application keypad when it is called. Some systems need this to enable - the arrow keys. The default is 'off'. + the arrow keys. The default is ‘off’. - 'enable-meta-key' - When set to 'on', Readline will try to enable any meta + ‘enable-meta-key’ + When set to ‘on’, Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit - characters. The default is 'on'. + characters. The default is ‘on’. - 'expand-tilde' - If set to 'on', tilde expansion is performed when Readline - attempts word completion. The default is 'off'. + ‘expand-tilde’ + If set to ‘on’, tilde expansion is performed when Readline + attempts word completion. The default is ‘off’. - 'history-preserve-point' - If set to 'on', the history code attempts to place the point + ‘history-preserve-point’ + If set to ‘on’, the history code attempts to place the point (the current cursor position) at the same location on each - history line retrieved with 'previous-history' or - 'next-history'. The default is 'off'. + history line retrieved with ‘previous-history’ or + ‘next-history’. The default is ‘off’. - 'history-size' + ‘history-size’ Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less @@ -8241,43 +8576,43 @@ Variable Settings attempt is made to set HISTORY-SIZE to a non-numeric value, the maximum number of history entries will be set to 500. - 'horizontal-scroll-mode' - This variable can be set to either 'on' or 'off'. Setting it - to 'on' means that the text of the lines being edited will + ‘horizontal-scroll-mode’ + This variable can be set to either ‘on’ or ‘off’. Setting it + to ‘on’ means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto - a new screen line. This variable is automatically set to 'on' + a new screen line. This variable is automatically set to ‘on’ for terminals of height 1. By default, this variable is set - to 'off'. + to ‘off’. - 'input-meta' - If set to 'on', Readline will enable eight-bit input (it will + ‘input-meta’ + If set to ‘on’, Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The - default value is 'off', but Readline will set it to 'on' if + default value is ‘off’, but Readline will set it to ‘on’ if the locale contains eight-bit characters. The name - 'meta-flag' is a synonym for this variable. This variable is - dependent on the 'LC_CTYPE' locale category, and may change if + ‘meta-flag’ is a synonym for this variable. This variable is + dependent on the ‘LC_CTYPE’ locale category, and may change if the locale is changed. - 'isearch-terminators' + ‘isearch-terminators’ The string of characters that should terminate an incremental search without subsequently executing the character as a command (*note Searching::). If this variable has not been - given a value, the characters and 'C-J' will terminate + given a value, the characters and ‘C-J’ will terminate an incremental search. - 'keymap' + ‘keymap’ Sets Readline's idea of the current keymap for key binding - commands. Built-in 'keymap' names are 'emacs', - 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move', - 'vi-command', and 'vi-insert'. 'vi' is equivalent to - 'vi-command' ('vi-move' is also a synonym); 'emacs' is - equivalent to 'emacs-standard'. Applications may add - additional names. The default value is 'emacs'. The value of - the 'editing-mode' variable also affects the default keymap. - - 'keyseq-timeout' + commands. Built-in ‘keymap’ names are ‘emacs’, + ‘emacs-standard’, ‘emacs-meta’, ‘emacs-ctlx’, ‘vi’, ‘vi-move’, + ‘vi-command’, and ‘vi-insert’. ‘vi’ is equivalent to + ‘vi-command’ (‘vi-move’ is also a synonym); ‘emacs’ is + equivalent to ‘emacs-standard’. Applications may add + additional names. The default value is ‘emacs’. The value of + the ‘editing-mode’ variable also affects the default keymap. + + ‘keyseq-timeout’ Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take @@ -8285,125 +8620,130 @@ Variable Settings input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current - input source ('rl_instream' by default). The value is + input source (‘rl_instream’ by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default - value is '500'. + value is ‘500’. - 'mark-directories' - If set to 'on', completed directory names have a slash - appended. The default is 'on'. + ‘mark-directories’ + If set to ‘on’, completed directory names have a slash + appended. The default is ‘on’. - 'mark-modified-lines' - This variable, when set to 'on', causes Readline to display an - asterisk ('*') at the start of history lines which have been - modified. This variable is 'off' by default. + ‘mark-modified-lines’ + This variable, when set to ‘on’, causes Readline to display an + asterisk (‘*’) at the start of history lines which have been + modified. This variable is ‘off’ by default. - 'mark-symlinked-directories' - If set to 'on', completed names which are symbolic links to + ‘mark-symlinked-directories’ + If set to ‘on’, completed names which are symbolic links to directories have a slash appended (subject to the value of - 'mark-directories'). The default is 'off'. + ‘mark-directories’). The default is ‘off’. - 'match-hidden-files' - This variable, when set to 'on', causes Readline to match - files whose names begin with a '.' (hidden files) when - performing filename completion. If set to 'off', the leading - '.' must be supplied by the user in the filename to be - completed. This variable is 'on' by default. + ‘match-hidden-files’ + This variable, when set to ‘on’, forces Readline to match + files whose names begin with a ‘.’ (hidden files) when + performing filename completion. If set to ‘off’, the user + must include the leading ‘.’ in the filename to be completed. + This variable is ‘on’ by default. - 'menu-complete-display-prefix' - If set to 'on', menu completion displays the common prefix of + ‘menu-complete-display-prefix’ + If set to ‘on’, menu completion displays the common prefix of the list of possible completions (which may be empty) before - cycling through the list. The default is 'off'. + cycling through the list. The default is ‘off’. - 'output-meta' - If set to 'on', Readline will display characters with the + ‘output-meta’ + If set to ‘on’, Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape - sequence. The default is 'off', but Readline will set it to - 'on' if the locale contains eight-bit characters. This - variable is dependent on the 'LC_CTYPE' locale category, and + sequence. The default is ‘off’, but Readline will set it to + ‘on’ if the locale contains eight-bit characters. This + variable is dependent on the ‘LC_CTYPE’ locale category, and may change if the locale is changed. - 'page-completions' - If set to 'on', Readline uses an internal 'more'-like pager to + ‘page-completions’ + If set to ‘on’, Readline uses an internal ‘more’-like pager to display a screenful of possible completions at a time. This - variable is 'on' by default. + variable is ‘on’ by default. - 'print-completions-horizontally' - If set to 'on', Readline will display completions with matches + ‘print-completions-horizontally’ + If set to ‘on’, Readline will display completions with matches sorted horizontally in alphabetical order, rather than down - the screen. The default is 'off'. + the screen. The default is ‘off’. - 'revert-all-at-newline' - If set to 'on', Readline will undo all changes to history - lines before returning when 'accept-line' is executed. By + ‘revert-all-at-newline’ + If set to ‘on’, Readline will undo all changes to history + lines before returning when ‘accept-line’ is executed. By default, history lines may be modified and retain individual - undo lists across calls to 'readline()'. The default is - 'off'. + undo lists across calls to ‘readline()’. The default is + ‘off’. - 'show-all-if-ambiguous' + ‘search-ignore-case’ + If set to ‘on’, Readline performs incremental and + non-incremental history list searches in a case-insensitive + fashion. The default value is ‘off’. + + ‘show-all-if-ambiguous’ This alters the default behavior of the completion functions. - If set to 'on', words which have more than one possible + If set to ‘on’, words which have more than one possible completion cause the matches to be listed immediately instead - of ringing the bell. The default value is 'off'. + of ringing the bell. The default value is ‘off’. - 'show-all-if-unmodified' + ‘show-all-if-unmodified’ This alters the default behavior of the completion functions in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to - 'on', words which have more than one possible completion + ‘on’, words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The - default value is 'off'. + default value is ‘off’. - 'show-mode-in-prompt' - If set to 'on', add a string to the beginning of the prompt + ‘show-mode-in-prompt’ + If set to ‘on’, add a string to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable (e.g., - EMACS-MODE-STRING). The default value is 'off'. + EMACS-MODE-STRING). The default value is ‘off’. - 'skip-completed-text' - If set to 'on', this alters the default completion behavior + ‘skip-completed-text’ + If set to ‘on’, this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, Readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting - completion when the cursor is after the 'e' in 'Makefile' will - result in 'Makefile' rather than 'Makefilefile', assuming + completion when the cursor is after the ‘e’ in ‘Makefile’ will + result in ‘Makefile’ rather than ‘Makefilefile’, assuming there is a single possible completion. The default value is - 'off'. + ‘off’. - 'vi-cmd-mode-string' + ‘vi-cmd-mode-string’ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences - is available. Use the '\1' and '\2' escapes to begin and end + is available. Use the ‘\1’ and ‘\2’ escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The - default is '(cmd)'. + default is ‘(cmd)’. - 'vi-ins-mode-string' + ‘vi-ins-mode-string’ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences - is available. Use the '\1' and '\2' escapes to begin and end + is available. Use the ‘\1’ and ‘\2’ escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The - default is '(ins)'. + default is ‘(ins)’. - 'visible-stats' - If set to 'on', a character denoting a file's type is appended + ‘visible-stats’ + If set to ‘on’, a character denoting a file's type is appended to the filename when listing possible completions. The - default is 'off'. + default is ‘off’. Key Bindings The syntax for controlling key bindings in the init file is simple. @@ -8422,7 +8762,7 @@ Key Bindings In addition to command names, Readline allows keys to be bound to a string that is inserted when the key is pressed (a MACRO). - The 'bind -p' command displays Readline function names and bindings + The ‘bind -p’ command displays Readline function names and bindings in a format that can be put directly into an initialization file. *Note Bash Builtins::. @@ -8433,11 +8773,11 @@ Key Bindings Meta-Rubout: backward-kill-word Control-o: "> output" - In the example above, 'C-u' is bound to the function - 'universal-argument', 'M-DEL' is bound to the function - 'backward-kill-word', and 'C-o' is bound to run the macro + In the example above, ‘C-u’ is bound to the function + ‘universal-argument’, ‘M-DEL’ is bound to the function + ‘backward-kill-word’, and ‘C-o’ is bound to run the macro expressed on the right hand side (that is, to insert the text - '> output' into the line). + ‘> output’ into the line). A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, @@ -8454,51 +8794,51 @@ Key Bindings "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1" - In the above example, 'C-u' is again bound to the function - 'universal-argument' (just as it was in the first example), - ''C-x' 'C-r'' is bound to the function 're-read-init-file', - and ' <[> <1> <1> <~>' is bound to insert the text - 'Function Key 1'. + In the above example, ‘C-u’ is again bound to the function + ‘universal-argument’ (just as it was in the first example), + ‘‘C-x’ ‘C-r’’ is bound to the function ‘re-read-init-file’, + and ‘ <[> <1> <1> <~>’ is bound to insert the text + ‘Function Key 1’. The following GNU Emacs style escape sequences are available when specifying key sequences: - '\C-' + ‘\C-’ control prefix - '\M-' + ‘\M-’ meta prefix - '\e' + ‘\e’ an escape character - '\\' + ‘\\’ backslash - '\"' + ‘\"’ <">, a double quotation mark - '\'' + ‘\'’ <'>, a single quote or apostrophe In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: - '\a' + ‘\a’ alert (bell) - '\b' + ‘\b’ backspace - '\d' + ‘\d’ delete - '\f' + ‘\f’ form feed - '\n' + ‘\n’ newline - '\r' + ‘\r’ carriage return - '\t' + ‘\t’ horizontal tab - '\v' + ‘\v’ vertical tab - '\NNN' + ‘\NNN’ the eight-bit character whose value is the octal value NNN (one to three digits) - '\xHH' + ‘\xHH’ the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) @@ -8506,8 +8846,8 @@ Key Bindings used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other - character in the macro text, including '"' and '''. For example, - the following binding will make ''C-x' \' insert a single '\' into + character in the macro text, including ‘"’ and ‘'’. For example, + the following binding will make ‘‘C-x’ \’ insert a single ‘\’ into the line: "\C-x\\": "\\" @@ -8522,45 +8862,45 @@ compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used. -'$if' - The '$if' construct allows bindings to be made based on the editing +‘$if’ + The ‘$if’ construct allows bindings to be made based on the editing mode, the terminal being used, or the application using Readline. The text of the test, after any comparison operator, extends to the end of the line; unless otherwise noted, no characters are required to isolate it. - 'mode' - The 'mode=' form of the '$if' directive is used to test - whether Readline is in 'emacs' or 'vi' mode. This may be used - in conjunction with the 'set keymap' command, for instance, to - set bindings in the 'emacs-standard' and 'emacs-ctlx' keymaps - only if Readline is starting out in 'emacs' mode. + ‘mode’ + The ‘mode=’ form of the ‘$if’ directive is used to test + whether Readline is in ‘emacs’ or ‘vi’ mode. This may be used + in conjunction with the ‘set keymap’ command, for instance, to + set bindings in the ‘emacs-standard’ and ‘emacs-ctlx’ keymaps + only if Readline is starting out in ‘emacs’ mode. - 'term' - The 'term=' form may be used to include terminal-specific key + ‘term’ + The ‘term=’ form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the - '=' is tested against both the full name of the terminal and - the portion of the terminal name before the first '-'. This - allows 'sun' to match both 'sun' and 'sun-cmd', for instance. + ‘=’ is tested against both the full name of the terminal and + the portion of the terminal name before the first ‘-’. This + allows ‘sun’ to match both ‘sun’ and ‘sun-cmd’, for instance. - 'version' - The 'version' test may be used to perform comparisons against - specific Readline versions. The 'version' expands to the + ‘version’ + The ‘version’ test may be used to perform comparisons against + specific Readline versions. The ‘version’ expands to the current Readline version. The set of comparison operators - includes '=' (and '=='), '!=', '<=', '>=', '<', and '>'. The + includes ‘=’ (and ‘==’), ‘!=’, ‘<=’, ‘>=’, ‘<’, and ‘>’. The version number supplied on the right side of the operator consists of a major version number, an optional decimal point, - and an optional minor version (e.g., '7.1'). If the minor - version is omitted, it is assumed to be '0'. The operator may - be separated from the string 'version' and from the version + and an optional minor version (e.g., ‘7.1’). If the minor + version is omitted, it is assumed to be ‘0’. The operator may + be separated from the string ‘version’ and from the version number argument by whitespace. The following example sets a variable if the Readline version being used is 7.0 or newer: $if version >= 7.0 set show-mode-in-prompt on $endif - 'application' + ‘application’ The APPLICATION construct is used to include application-specific settings. Each program using the Readline library sets the APPLICATION NAME, and you can test @@ -8573,32 +8913,32 @@ four parser directives used. "\C-xq": "\eb\"\ef\"" $endif - 'variable' + ‘variable’ The VARIABLE construct provides simple equality tests for Readline variables and values. The permitted comparison - operators are '=', '==', and '!='. The variable name must be + operators are ‘=’, ‘==’, and ‘!=’. The variable name must be separated from the comparison operator by whitespace; the operator may be separated from the value on the right hand side by whitespace. Both string and boolean variables may be tested. Boolean variables must be tested against the values ON and OFF. The following example is equivalent to the - 'mode=emacs' test described above: + ‘mode=emacs’ test described above: $if editing-mode == emacs set show-mode-in-prompt on $endif -'$endif' - This command, as seen in the previous example, terminates an '$if' +‘$endif’ + This command, as seen in the previous example, terminates an ‘$if’ command. -'$else' - Commands in this branch of the '$if' directive are executed if the +‘$else’ + Commands in this branch of the ‘$if’ directive are executed if the test fails. -'$include' +‘$include’ This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following - directive reads from '/etc/inputrc': + directive reads from ‘/etc/inputrc’: $include /etc/inputrc  @@ -8728,15 +9068,15 @@ File: bash.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Pr * Miscellaneous Commands:: Other miscellaneous commands. This section describes Readline commands that may be bound to key -sequences. You can list your key bindings by executing 'bind -P' or, -for a more terse format, suitable for an INPUTRC file, 'bind -p'. +sequences. You can list your key bindings by executing ‘bind -P’ or, +for a more terse format, suitable for an INPUTRC file, ‘bind -p’. (*Note Bash Builtins::.) Command names without an accompanying key sequence are unbound by default. - In the following descriptions, "point" refers to the current cursor -position, and "mark" refers to a cursor position saved by the 'set-mark' + In the following descriptions, “point” refers to the current cursor +position, and “mark” refers to a cursor position saved by the ‘set-mark’ command. The text between the point and mark is referred to as the -"region". +“region”.  File: bash.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands @@ -8744,58 +9084,58 @@ File: bash.info, Node: Commands For Moving, Next: Commands For History, Up: B 8.4.1 Commands For Moving ------------------------- -'beginning-of-line (C-a)' +‘beginning-of-line (C-a)’ Move to the start of the current line. -'end-of-line (C-e)' +‘end-of-line (C-e)’ Move to the end of the line. -'forward-char (C-f)' +‘forward-char (C-f)’ Move forward a character. -'backward-char (C-b)' +‘backward-char (C-b)’ Move back a character. -'forward-word (M-f)' +‘forward-word (M-f)’ Move forward to the end of the next word. Words are composed of letters and digits. -'backward-word (M-b)' +‘backward-word (M-b)’ Move back to the start of the current or previous word. Words are composed of letters and digits. -'shell-forward-word (M-C-f)' +‘shell-forward-word (M-C-f)’ Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters. -'shell-backward-word (M-C-b)' +‘shell-backward-word (M-C-b)’ Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters. -'previous-screen-line ()' +‘previous-screen-line ()’ Attempt to move point to the same physical screen column on the previous physical screen line. This will not have the desired effect if the current Readline line does not take up more than one physical line or if point is not greater than the length of the prompt plus the screen width. -'next-screen-line ()' +‘next-screen-line ()’ Attempt to move point to the same physical screen column on the next physical screen line. This will not have the desired effect if the current Readline line does not take up more than one physical line or if the length of the current Readline line is not greater than the length of the prompt plus the screen width. -'clear-display (M-C-l)' +‘clear-display (M-C-l)’ Clear the screen and, if possible, the terminal's scrollback buffer, then redraw the current line, leaving the current line at the top of the screen. -'clear-screen (C-l)' +‘clear-screen (C-l)’ Clear the screen, then redraw the current line, leaving the current line at the top of the screen. -'redraw-current-line ()' +‘redraw-current-line ()’ Refresh the current line. By default, this is unbound.  @@ -8804,104 +9144,104 @@ File: bash.info, Node: Commands For History, Next: Commands For Text, Prev: C 8.4.2 Commands For Manipulating The History ------------------------------------------- -'accept-line (Newline or Return)' +‘accept-line (Newline or Return)’ Accept the line regardless of where the cursor is. If this line is non-empty, add it to the history list according to the setting of - the 'HISTCONTROL' and 'HISTIGNORE' variables. If this line is a + the ‘HISTCONTROL’ and ‘HISTIGNORE’ variables. If this line is a modified history line, then restore the history line to its original state. -'previous-history (C-p)' +‘previous-history (C-p)’ Move 'back' through the history list, fetching the previous command. -'next-history (C-n)' +‘next-history (C-n)’ Move 'forward' through the history list, fetching the next command. -'beginning-of-history (M-<)' +‘beginning-of-history (M-<)’ Move to the first line in the history. -'end-of-history (M->)' +‘end-of-history (M->)’ Move to the end of the input history, i.e., the line currently being entered. -'reverse-search-history (C-r)' +‘reverse-search-history (C-r)’ Search backward starting at the current line and moving 'up' through the history as necessary. This is an incremental search. This command sets the region to the matched text and activates the mark. -'forward-search-history (C-s)' +‘forward-search-history (C-s)’ Search forward starting at the current line and moving 'down' through the history as necessary. This is an incremental search. This command sets the region to the matched text and activates the mark. -'non-incremental-reverse-search-history (M-p)' +‘non-incremental-reverse-search-history (M-p)’ Search backward starting at the current line and moving 'up' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. -'non-incremental-forward-search-history (M-n)' +‘non-incremental-forward-search-history (M-n)’ Search forward starting at the current line and moving 'down' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. -'history-search-forward ()' +‘history-search-forward ()’ Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. -'history-search-backward ()' +‘history-search-backward ()’ Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. -'history-substring-search-forward ()' +‘history-substring-search-forward ()’ Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. -'history-substring-search-backward ()' +‘history-substring-search-backward ()’ Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. -'yank-nth-arg (M-C-y)' +‘yank-nth-arg (M-C-y)’ Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument N, insert the Nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the Nth word from the end of the previous command. Once the - argument N is computed, the argument is extracted as if the '!N' + argument N is computed, the argument is extracted as if the ‘!N’ history expansion had been specified. -'yank-last-arg (M-. or M-_)' +‘yank-last-arg (M-. or M-_)’ Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly - like 'yank-nth-arg'. Successive calls to 'yank-last-arg' move back + like ‘yank-nth-arg’. Successive calls to ‘yank-last-arg’ move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, - as if the '!$' history expansion had been specified. + as if the ‘!$’ history expansion had been specified. -'operate-and-get-next (C-o)' +‘operate-and-get-next (C-o)’ Accept the current line for return to the calling application as if a newline had been entered, and fetch the next line relative to the current line from the history for editing. A numeric argument, if supplied, specifies the history entry to use instead of the current line. -'fetch-history ()' +‘fetch-history ()’ With a numeric argument, fetch that entry from the history list and make it the current line. Without an argument, move back to the first entry in the history list. @@ -8912,40 +9252,40 @@ File: bash.info, Node: Commands For Text, Next: Commands For Killing, Prev: C 8.4.3 Commands For Changing Text -------------------------------- -'end-of-file (usually C-d)' +‘end-of-file (usually C-d)’ The character indicating end-of-file as set, for example, by - 'stty'. If this character is read when there are no characters on + ‘stty’. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF. -'delete-char (C-d)' +‘delete-char (C-d)’ Delete the character at point. If this function is bound to the - same character as the tty EOF character, as 'C-d' commonly is, see + same character as the tty EOF character, as ‘C-d’ commonly is, see above for the effects. -'backward-delete-char (Rubout)' +‘backward-delete-char (Rubout)’ Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them. -'forward-backward-delete-char ()' +‘forward-backward-delete-char ()’ Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key. -'quoted-insert (C-q or C-v)' +‘quoted-insert (C-q or C-v)’ Add the next character typed to the line verbatim. This is how to - insert key sequences like 'C-q', for example. + insert key sequences like ‘C-q’, for example. -'self-insert (a, b, A, 1, !, ...)' +‘self-insert (a, b, A, 1, !, ...)’ Insert yourself. -'bracketed-paste-begin ()' +‘bracketed-paste-begin ()’ This function is intended to be bound to the "bracketed paste" escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating each character as if it had been read from the keyboard. The characters are inserted as if each one - was bound to 'self-insert' instead of executing any editing + was bound to ‘self-insert’ instead of executing any editing commands. Bracketed paste sets the region (the characters between point and @@ -8953,39 +9293,46 @@ File: bash.info, Node: Commands For Text, Next: Commands For Killing, Prev: C mark_: when the mark is active, Readline redisplay uses the terminal's standout mode to denote the region. -'transpose-chars (C-t)' +‘transpose-chars (C-t)’ Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point is at the end of the line, then this transposes the last two characters of the line. Negative arguments have no effect. -'transpose-words (M-t)' +‘transpose-words (M-t)’ Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. -'upcase-word (M-u)' +‘shell-transpose-words (M-C-t)’ + Drag the word before point past the word after point, moving point + past that word as well. If the insertion point is at the end of + the line, this transposes the last two words on the line. Word + boundaries are the same as ‘shell-forward-word’ and + ‘shell-backward-word’. + +‘upcase-word (M-u)’ Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. -'downcase-word (M-l)' +‘downcase-word (M-l)’ Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor. -'capitalize-word (M-c)' +‘capitalize-word (M-c)’ Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor. -'overwrite-mode ()' +‘overwrite-mode ()’ Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only - 'emacs' mode; 'vi' mode does overwrite differently. Each call to - 'readline()' starts in insert mode. + ‘emacs’ mode; ‘vi’ mode does overwrite differently. Each call to + ‘readline()’ starts in insert mode. - In overwrite mode, characters bound to 'self-insert' replace the + In overwrite mode, characters bound to ‘self-insert’ replace the text at point rather than pushing the text to the right. - Characters bound to 'backward-delete-char' replace the character + Characters bound to ‘backward-delete-char’ replace the character before point with a space. By default, this command is unbound. @@ -8996,85 +9343,78 @@ File: bash.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: C 8.4.4 Killing And Yanking ------------------------- -'kill-line (C-k)' +‘kill-line (C-k)’ Kill the text from point to the end of the line. With a negative numeric argument, kill backward from the cursor to the beginning of the current line. -'backward-kill-line (C-x Rubout)' +‘backward-kill-line (C-x Rubout)’ Kill backward from the cursor to the beginning of the current line. With a negative numeric argument, kill forward from the cursor to the end of the current line. -'unix-line-discard (C-u)' +‘unix-line-discard (C-u)’ Kill backward from the cursor to the beginning of the current line. -'kill-whole-line ()' +‘kill-whole-line ()’ Kill all characters on the current line, no matter where point is. By default, this is unbound. -'kill-word (M-d)' +‘kill-word (M-d)’ Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same - as 'forward-word'. + as ‘forward-word’. -'backward-kill-word (M-)' +‘backward-kill-word (M-)’ Kill the word behind point. Word boundaries are the same as - 'backward-word'. + ‘backward-word’. -'shell-kill-word (M-C-d)' +‘shell-kill-word (M-C-d)’ Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same - as 'shell-forward-word'. + as ‘shell-forward-word’. -'shell-backward-kill-word ()' +‘shell-backward-kill-word ()’ Kill the word behind point. Word boundaries are the same as - 'shell-backward-word'. - -'shell-transpose-words (M-C-t)' - Drag the word before point past the word after point, moving point - past that word as well. If the insertion point is at the end of - the line, this transposes the last two words on the line. Word - boundaries are the same as 'shell-forward-word' and - 'shell-backward-word'. + ‘shell-backward-word’. -'unix-word-rubout (C-w)' +‘unix-word-rubout (C-w)’ Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. -'unix-filename-rubout ()' +‘unix-filename-rubout ()’ Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. -'delete-horizontal-space ()' +‘delete-horizontal-space ()’ Delete all spaces and tabs around point. By default, this is unbound. -'kill-region ()' +‘kill-region ()’ Kill the text in the current region. By default, this command is unbound. -'copy-region-as-kill ()' +‘copy-region-as-kill ()’ Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound. -'copy-backward-word ()' +‘copy-backward-word ()’ Copy the word before point to the kill buffer. The word boundaries - are the same as 'backward-word'. By default, this command is + are the same as ‘backward-word’. By default, this command is unbound. -'copy-forward-word ()' +‘copy-forward-word ()’ Copy the word following point to the kill buffer. The word - boundaries are the same as 'forward-word'. By default, this + boundaries are the same as ‘forward-word’. By default, this command is unbound. -'yank (C-y)' +‘yank (C-y)’ Yank the top of the kill ring into the buffer at point. -'yank-pop (M-y)' +‘yank-pop (M-y)’ Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is 'yank' or 'yank-pop'. + if the prior command is ‘yank’ or ‘yank-pop’.  File: bash.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands @@ -9082,15 +9422,15 @@ File: bash.info, Node: Numeric Arguments, Next: Commands For Completion, Prev 8.4.5 Specifying Numeric Arguments ---------------------------------- -'digit-argument (M-0, M-1, ... M--)' +‘digit-argument (M-0, M-1, ... M--)’ Add this digit to the argument already accumulating, or start a new - argument. 'M--' starts a negative argument. + argument. ‘M--’ starts a negative argument. -'universal-argument ()' +‘universal-argument ()’ This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is followed - by digits, executing 'universal-argument' again ends the numeric + by digits, executing ‘universal-argument’ again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit nor minus sign, the argument count for the next command is @@ -9105,101 +9445,101 @@ File: bash.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: 8.4.6 Letting Readline Type For You ----------------------------------- -'complete ()' +‘complete ()’ Attempt to perform completion on the text before point. The actual completion performed is application-specific. Bash attempts completion treating the text as a variable (if the text begins with - '$'), username (if the text begins with '~'), hostname (if the text - begins with '@'), or command (including aliases and functions) in + ‘$’), username (if the text begins with ‘~’), hostname (if the text + begins with ‘@’), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. -'possible-completions (M-?)' +‘possible-completions (M-?)’ List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used - for display to the value of 'completion-display-width', the value - of the environment variable 'COLUMNS', or the screen width, in that + for display to the value of ‘completion-display-width’, the value + of the environment variable ‘COLUMNS’, or the screen width, in that order. -'insert-completions (M-*)' +‘insert-completions (M-*)’ Insert all completions of the text before point that would have - been generated by 'possible-completions'. + been generated by ‘possible-completions’. -'menu-complete ()' - Similar to 'complete', but replaces the word to be completed with a +‘menu-complete ()’ + Similar to ‘complete’, but replaces the word to be completed with a single match from the list of possible completions. Repeated - execution of 'menu-complete' steps through the list of possible + execution of ‘menu-complete’ steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of - 'bell-style') and the original text is restored. An argument of N + ‘bell-style’) and the original text is restored. An argument of N moves N positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to , but is unbound by default. -'menu-complete-backward ()' - Identical to 'menu-complete', but moves backward through the list - of possible completions, as if 'menu-complete' had been given a +‘menu-complete-backward ()’ + Identical to ‘menu-complete’, but moves backward through the list + of possible completions, as if ‘menu-complete’ had been given a negative argument. -'delete-char-or-list ()' +‘delete-char-or-list ()’ Deletes the character under the cursor if not at the beginning or - end of the line (like 'delete-char'). If at the end of the line, - behaves identically to 'possible-completions'. This command is + end of the line (like ‘delete-char’). If at the end of the line, + behaves identically to ‘possible-completions’. This command is unbound by default. -'complete-filename (M-/)' +‘complete-filename (M-/)’ Attempt filename completion on the text before point. -'possible-filename-completions (C-x /)' +‘possible-filename-completions (C-x /)’ List the possible completions of the text before point, treating it as a filename. -'complete-username (M-~)' +‘complete-username (M-~)’ Attempt completion on the text before point, treating it as a username. -'possible-username-completions (C-x ~)' +‘possible-username-completions (C-x ~)’ List the possible completions of the text before point, treating it as a username. -'complete-variable (M-$)' +‘complete-variable (M-$)’ Attempt completion on the text before point, treating it as a shell variable. -'possible-variable-completions (C-x $)' +‘possible-variable-completions (C-x $)’ List the possible completions of the text before point, treating it as a shell variable. -'complete-hostname (M-@)' +‘complete-hostname (M-@)’ Attempt completion on the text before point, treating it as a hostname. -'possible-hostname-completions (C-x @)' +‘possible-hostname-completions (C-x @)’ List the possible completions of the text before point, treating it as a hostname. -'complete-command (M-!)' +‘complete-command (M-!)’ Attempt completion on the text before point, treating it as a command name. Command completion attempts to match the text against aliases, reserved words, shell functions, shell builtins, and finally executable filenames, in that order. -'possible-command-completions (C-x !)' +‘possible-command-completions (C-x !)’ List the possible completions of the text before point, treating it as a command name. -'dynamic-complete-history (M-)' +‘dynamic-complete-history (M-)’ Attempt completion on the text before point, comparing the text against lines from the history list for possible completion matches. -'dabbrev-expand ()' +‘dabbrev-expand ()’ Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches. -'complete-into-braces (M-{)' +‘complete-into-braces (M-{)’ Perform filename completion and insert the list of possible completions enclosed within braces so the list is available to the shell (*note Brace Expansion::). @@ -9210,18 +9550,18 @@ File: bash.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: C 8.4.7 Keyboard Macros --------------------- -'start-kbd-macro (C-x ()' +‘start-kbd-macro (C-x ()’ Begin saving the characters typed into the current keyboard macro. -'end-kbd-macro (C-x ))' +‘end-kbd-macro (C-x ))’ Stop saving the characters typed into the current keyboard macro and save the definition. -'call-last-kbd-macro (C-x e)' +‘call-last-kbd-macro (C-x e)’ Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard. -'print-last-kbd-macro ()' +‘print-last-kbd-macro ()’ Print the last keyboard macro defined in a format suitable for the INPUTRC file. @@ -9231,53 +9571,53 @@ File: bash.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bin 8.4.8 Some Miscellaneous Commands --------------------------------- -'re-read-init-file (C-x C-r)' +‘re-read-init-file (C-x C-r)’ Read in the contents of the INPUTRC file, and incorporate any bindings or variable assignments found there. -'abort (C-g)' +‘abort (C-g)’ Abort the current editing command and ring the terminal's bell - (subject to the setting of 'bell-style'). + (subject to the setting of ‘bell-style’). -'do-lowercase-version (M-A, M-B, M-X, ...)' +‘do-lowercase-version (M-A, M-B, M-X, ...)’ If the metafied character X is upper case, run the command that is bound to the corresponding metafied lower case character. The behavior is undefined if X is already lower case. -'prefix-meta ()' +‘prefix-meta ()’ Metafy the next character typed. This is for keyboards without a - meta key. Typing ' f' is equivalent to typing 'M-f'. + meta key. Typing ‘ f’ is equivalent to typing ‘M-f’. -'undo (C-_ or C-x C-u)' +‘undo (C-_ or C-x C-u)’ Incremental undo, separately remembered for each line. -'revert-line (M-r)' +‘revert-line (M-r)’ Undo all changes made to this line. This is like executing the - 'undo' command enough times to get back to the beginning. + ‘undo’ command enough times to get back to the beginning. -'tilde-expand (M-&)' +‘tilde-expand (M-&)’ Perform tilde expansion on the current word. -'set-mark (C-@)' +‘set-mark (C-@)’ Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. -'exchange-point-and-mark (C-x C-x)' +‘exchange-point-and-mark (C-x C-x)’ Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark. -'character-search (C-])' +‘character-search (C-])’ A character is read and point is moved to the next occurrence of that character. A negative argument searches for previous occurrences. -'character-search-backward (M-C-])' +‘character-search-backward (M-C-])’ A character is read and point is moved to the previous occurrence of that character. A negative argument searches for subsequent occurrences. -'skip-csi-sequence ()' +‘skip-csi-sequence ()’ Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this @@ -9286,89 +9626,98 @@ File: bash.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bin inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. -'insert-comment (M-#)' - Without a numeric argument, the value of the 'comment-begin' +‘insert-comment (M-#)’ + Without a numeric argument, the value of the ‘comment-begin’ variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of - 'comment-begin', the value is inserted, otherwise the characters in - 'comment-begin' are deleted from the beginning of the line. In + ‘comment-begin’, the value is inserted, otherwise the characters in + ‘comment-begin’ are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. - The default value of 'comment-begin' causes this command to make + The default value of ‘comment-begin’ causes this command to make the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. -'dump-functions ()' +‘dump-functions ()’ Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. -'dump-variables ()' +‘dump-variables ()’ Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. -'dump-macros ()' +‘dump-macros ()’ Print all of the Readline key sequences bound to macros and the 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 INPUTRC file. This command is unbound by default. -'spell-correct-word (C-x s)' +‘spell-correct-word (C-x s)’ Perform spelling correction on the current word, treating it as a - directory or filename, in the same way as the 'cdspell' shell + directory or filename, in the same way as the ‘cdspell’ shell option. Word boundaries are the same as those used by - 'shell-forward-word'. + ‘shell-forward-word’. -'glob-complete-word (M-g)' +‘glob-complete-word (M-g)’ The word before point is treated as a pattern for pathname expansion, with an asterisk implicitly appended. This pattern is used to generate a list of matching file names for possible completions. -'glob-expand-word (C-x *)' +‘glob-expand-word (C-x *)’ The word before point is treated as a pattern for pathname expansion, and the list of matching file names is inserted, - replacing the word. If a numeric argument is supplied, a '*' is + replacing the word. If a numeric argument is supplied, a ‘*’ is appended before pathname expansion. -'glob-list-expansions (C-x g)' +‘glob-list-expansions (C-x g)’ The list of expansions that would have been generated by - 'glob-expand-word' is displayed, and the line is redrawn. If a - numeric argument is supplied, a '*' is appended before pathname + ‘glob-expand-word’ is displayed, and the line is redrawn. If a + numeric argument is supplied, a ‘*’ is appended before pathname expansion. -'display-shell-version (C-x C-v)' +‘display-shell-version (C-x C-v)’ Display version information about the current instance of Bash. -'shell-expand-line (M-C-e)' - Expand the line as the shell does. This performs alias and history - expansion as well as all of the shell word expansions (*note Shell - Expansions::). +‘shell-expand-line (M-C-e)’ + Expand the line by performing shell word expansions. This performs + alias and history expansion, $'STRING' and $"STRING" quoting, tilde + expansion, parameter and variable expansion, arithmetic expansion, + command and proces substitution, word splitting, and quote removal. + An explicit argument suppresses command and process substitution. -'history-expand-line (M-^)' +‘history-expand-line (M-^)’ Perform history expansion on the current line. -'magic-space ()' +‘magic-space ()’ Perform history expansion on the current line and insert a space (*note History Interaction::). -'alias-expand-line ()' +‘alias-expand-line ()’ Perform alias expansion on the current line (*note Aliases::). -'history-and-alias-expand-line ()' +‘history-and-alias-expand-line ()’ Perform history and alias expansion on the current line. -'insert-last-argument (M-. or M-_)' - A synonym for 'yank-last-arg'. +‘insert-last-argument (M-. or M-_)’ + A synonym for ‘yank-last-arg’. -'edit-and-execute-command (C-x C-e)' +‘edit-and-execute-command (C-x C-e)’ Invoke an editor on the current command line, and execute the - result as shell commands. Bash attempts to invoke '$VISUAL', - '$EDITOR', and 'emacs' as the editor, in that order. + result as shell commands. Bash attempts to invoke ‘$VISUAL’, + ‘$EDITOR’, and ‘emacs’ as the editor, in that order. + +‘execute-named-command (M-x)’ + Read a bindable readline command name from the input and execute + the function to which it's bound, as if the key sequence to which + it was bound appeared in the input. If this function is supplied + with a numeric argument, it passes that argument to the function it + executes.  File: bash.info, Node: Readline vi Mode, Next: Programmable Completion, Prev: Bindable Readline Commands, Up: Command Line Editing @@ -9376,19 +9725,19 @@ File: bash.info, Node: Readline vi Mode, Next: Programmable Completion, Prev: 8.5 Readline vi Mode ==================== -While the Readline library does not have a full set of 'vi' editing +While the Readline library does not have a full set of ‘vi’ editing functions, it does contain enough to allow simple editing of the line. -The Readline 'vi' mode behaves as specified in the POSIX standard. +The Readline ‘vi’ mode behaves as specified in the POSIX standard. - In order to switch interactively between 'emacs' and 'vi' editing -modes, use the 'set -o emacs' and 'set -o vi' commands (*note The Set -Builtin::). The Readline default is 'emacs' mode. + In order to switch interactively between ‘emacs’ and ‘vi’ editing +modes, use the ‘set -o emacs’ and ‘set -o vi’ commands (*note The Set +Builtin::). The Readline default is ‘emacs’ mode. - When you enter a line in 'vi' mode, you are already placed in -'insertion' mode, as if you had typed an 'i'. Pressing switches + When you enter a line in ‘vi’ mode, you are already placed in +'insertion' mode, as if you had typed an ‘i’. Pressing switches you into 'command' mode, where you can edit the text of the line with -the standard 'vi' movement keys, move to previous history lines with 'k' -and subsequent lines with 'j', and so forth. +the standard ‘vi’ movement keys, move to previous history lines with ‘k’ +and subsequent lines with ‘j’, and so forth.  File: bash.info, Node: Programmable Completion, Next: Programmable Completion Builtins, Prev: Readline vi Mode, Up: Command Line Editing @@ -9398,19 +9747,19 @@ File: bash.info, Node: Programmable Completion, Next: Programmable Completion When word completion is attempted for an argument to a command for which a completion specification (a COMPSPEC) has been defined using the -'complete' builtin (*note Programmable Completion Builtins::), the +‘complete’ builtin (*note Programmable Completion Builtins::), the programmable completion facilities are invoked. First, the command name is identified. If a compspec has been defined for that command, the compspec is used to generate the list of possible completions for the word. If the command word is the empty string (completion attempted at the beginning of an empty line), any -compspec defined with the '-E' option to 'complete' is used. If the +compspec defined with the ‘-E’ option to ‘complete’ is used. If the command word is a full pathname, a compspec for the full pathname is searched for first. If no compspec is found for the full pathname, an attempt is made to find a compspec for the portion following the final slash. If those searches do not result in a compspec, any compspec -defined with the '-D' option to 'complete' is used as the default. If +defined with the ‘-D’ option to ‘complete’ is used as the default. If there is no default compspec, Bash attempts alias expansion on the command word as a final resort, and attempts to find a compspec for the command word from any successful expansion @@ -9421,20 +9770,20 @@ described above (*note Commands For Completion::) is performed. First, the actions specified by the compspec are used. Only matches which are prefixed by the word being completed are returned. When the -'-f' or '-d' option is used for filename or directory name completion, -the shell variable 'FIGNORE' is used to filter the matches. *Note Bash -Variables::, for a description of 'FIGNORE'. +‘-f’ or ‘-d’ option is used for filename or directory name completion, +the shell variable ‘FIGNORE’ is used to filter the matches. *Note Bash +Variables::, for a description of ‘FIGNORE’. - Any completions specified by a filename expansion pattern to the '-G' + Any completions specified by a filename expansion pattern to the ‘-G’ option are generated next. The words generated by the pattern need not -match the word being completed. The 'GLOBIGNORE' shell variable is not -used to filter the matches, but the 'FIGNORE' shell variable is used. +match the word being completed. The ‘GLOBIGNORE’ shell variable is not +used to filter the matches, but the ‘FIGNORE’ shell variable is used. - Next, the string specified as the argument to the '-W' option is -considered. The string is first split using the characters in the 'IFS' + Next, the string specified as the argument to the ‘-W’ option is +considered. The string is first split using the characters in the ‘IFS’ special variable as delimiters. Shell quoting is honored within the string, in order to provide a mechanism for the words to contain shell -metacharacters or characters in the value of 'IFS'. Each word is then +metacharacters or characters in the value of ‘IFS’. Each word is then expanded using brace expansion, tilde expansion, parameter and variable expansion, command substitution, and arithmetic expansion, as described above (*note Shell Expansions::). The results are split using the rules @@ -9443,11 +9792,11 @@ are prefix-matched against the word being completed, and the matching words become the possible completions. After these matches have been generated, any shell function or -command specified with the '-F' and '-C' options is invoked. When the -command or function is invoked, the 'COMP_LINE', 'COMP_POINT', -'COMP_KEY', and 'COMP_TYPE' variables are assigned values as described +command specified with the ‘-F’ and ‘-C’ options is invoked. When the +command or function is invoked, the ‘COMP_LINE’, ‘COMP_POINT’, +‘COMP_KEY’, and ‘COMP_TYPE’ variables are assigned values as described above (*note Bash Variables::). If a shell function is being invoked, -the 'COMP_WORDS' and 'COMP_CWORD' variables are also set. When the +the ‘COMP_WORDS’ and ‘COMP_CWORD’ variables are also set. When the function or command is invoked, the first argument ($1) is the name of the command whose arguments are being completed, the second argument ($2) is the word being completed, and the third argument ($3) is the @@ -9456,49 +9805,49 @@ filtering of the generated completions against the word being completed is performed; the function or command has complete freedom in generating the matches. - Any function specified with '-F' is invoked first. The function may -use any of the shell facilities, including the 'compgen' and 'compopt' + Any function specified with ‘-F’ is invoked first. The function may +use any of the shell facilities, including the ‘compgen’ and ‘compopt’ builtins described below (*note Programmable Completion Builtins::), to generate the matches. It must put the possible completions in the -'COMPREPLY' array variable, one per array element. +‘COMPREPLY’ array variable, one per array element. - Next, any command specified with the '-C' option is invoked in an + Next, any command specified with the ‘-C’ option is invoked in an environment equivalent to command substitution. It should print a list of completions, one per line, to the standard output. Backslash may be used to escape a newline, if necessary. After all of the possible completions are generated, any filter -specified with the '-X' option is applied to the list. The filter is a -pattern as used for pathname expansion; a '&' in the pattern is replaced -with the text of the word being completed. A literal '&' may be escaped +specified with the ‘-X’ option is applied to the list. The filter is a +pattern as used for pathname expansion; a ‘&’ in the pattern is replaced +with the text of the word being completed. A literal ‘&’ may be escaped with a backslash; the backslash is removed before attempting a match. Any completion that matches the pattern will be removed from the list. -A leading '!' negates the pattern; in this case any completion not -matching the pattern will be removed. If the 'nocasematch' shell option -(see the description of 'shopt' in *note The Shopt Builtin::) is +A leading ‘!’ negates the pattern; in this case any completion not +matching the pattern will be removed. If the ‘nocasematch’ shell option +(see the description of ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. - Finally, any prefix and suffix specified with the '-P' and '-S' + Finally, any prefix and suffix specified with the ‘-P’ and ‘-S’ options are added to each member of the completion list, and the result is returned to the Readline completion code as the list of possible completions. If the previously-applied actions do not generate any matches, and -the '-o dirnames' option was supplied to 'complete' when the compspec +the ‘-o dirnames’ option was supplied to ‘complete’ when the compspec was defined, directory name completion is attempted. - If the '-o plusdirs' option was supplied to 'complete' when the + If the ‘-o plusdirs’ option was supplied to ‘complete’ when the compspec was defined, directory name completion is attempted and any matches are added to the results of the other actions. By default, if a compspec is found, whatever it generates is returned to the completion code as the full set of possible completions. The default Bash completions are not attempted, and the Readline default of -filename completion is disabled. If the '-o bashdefault' option was -supplied to 'complete' when the compspec was defined, the default Bash +filename completion is disabled. If the ‘-o bashdefault’ option was +supplied to ‘complete’ when the compspec was defined, the default Bash completions are attempted if the compspec generates no matches. If the -'-o default' option was supplied to 'complete' when the compspec was +‘-o default’ option was supplied to ‘complete’ when the compspec was defined, Readline's default completion will be performed if the compspec (and, if attempted, the default Bash completions) generate no matches. @@ -9510,7 +9859,7 @@ setting of the MARK-SYMLINKED-DIRECTORIES Readline variable. There is some support for dynamically modifying completions. This is most useful when used in combination with a default completion specified -with '-D'. It's possible for shell functions executed as completion +with ‘-D’. It's possible for shell functions executed as completion handlers to indicate that completion should be retried by returning an exit status of 124. If a shell function returns 124, and changes the compspec associated with the command on which completion is being @@ -9541,15 +9890,21 @@ completion facilities: one to specify how the arguments to a particular command are to be completed, and two to modify the completion as it is happening. -'compgen' - compgen [OPTION] [WORD] +‘compgen’ + compgen [-V VARNAME] [OPTION] [WORD] Generate possible completion matches for WORD according to the - OPTIONs, which may be any option accepted by the 'complete' builtin - with the exception of '-p' and '-r', and write the matches to the - standard output. When using the '-F' or '-C' options, the various - shell variables set by the programmable completion facilities, - while available, will not have useful values. + OPTIONs, which may be any option accepted by the ‘complete’ builtin + with the exceptions of ‘-p’, ‘-r’, ‘-D’, ‘-E’, and ‘-I’, and write + the matches to the standard output. + + If the ‘-V’ option is supplied, ‘compgen’ stores the generated + completions into the indexed array variable VARNAME instead of + writing them to the standard output. + + When using the ‘-F’ or ‘-C’ options, the various shell variables + set by the programmable completion facilities, while available, + will not have useful values. The matches will be generated in the same way as if the programmable completion code had generated them directly from a @@ -9559,29 +9914,29 @@ happening. The return value is true unless an invalid option is supplied, or no matches were generated. -'complete' - complete [-abcdefgjksuv] [-o COMP-OPTION] [-DEI] [-A ACTION] [-G GLOBPAT] - [-W WORDLIST] [-F FUNCTION] [-C COMMAND] [-X FILTERPAT] - [-P PREFIX] [-S SUFFIX] NAME [NAME ...] +‘complete’ + complete [-abcdefgjksuv] [-o COMP-OPTION] [-DEI] [-A ACTION] + [-G GLOBPAT] [-W WORDLIST] [-F FUNCTION] [-C COMMAND] + [-X FILTERPAT] [-P PREFIX] [-S SUFFIX] NAME [NAME ...] complete -pr [-DEI] [NAME ...] Specify how arguments to each NAME should be completed. If the - '-p' option is supplied, or if no options are supplied, existing - completion specifications are printed in a way that allows them to - be reused as input. The '-r' option removes a completion + ‘-p’ option is supplied, or if no options or NAMEs are supplied, + existing completion specifications are printed in a way that allows + them to be reused as input. The ‘-r’ option removes a completion specification for each NAME, or, if no NAMEs are supplied, all - completion specifications. The '-D' option indicates that other + completion specifications. The ‘-D’ option indicates that other supplied options and actions should apply to the "default" command completion; that is, completion attempted on a command for which no - completion has previously been defined. The '-E' option indicates + completion has previously been defined. The ‘-E’ option indicates that other supplied options and actions should apply to "empty" command completion; that is, completion attempted on a blank line. - The '-I' option indicates that other supplied options and actions + The ‘-I’ option indicates that other supplied options and actions should apply to completion on the initial non-assignment word on - the line, or after a command delimiter such as ';' or '|', which is + the line, or after a command delimiter such as ‘;’ or ‘|’, which is usually command name completion. If multiple options are supplied, - the '-D' option takes precedence over '-E', and both take - precedence over '-I'. If any of '-D', '-E', or '-I' are supplied, + the ‘-D’ option takes precedence over ‘-E’, and both take + precedence over ‘-I’. If any of ‘-D’, ‘-E’, or ‘-I’ are supplied, any other NAME arguments are ignored; these completions only apply to the case specified by the option. @@ -9590,202 +9945,206 @@ happening. Completion::). Other options, if specified, have the following meanings. The - arguments to the '-G', '-W', and '-X' options (and, if necessary, - the '-P' and '-S' options) should be quoted to protect them from - expansion before the 'complete' builtin is invoked. + arguments to the ‘-G’, ‘-W’, and ‘-X’ options (and, if necessary, + the ‘-P’ and ‘-S’ options) should be quoted to protect them from + expansion before the ‘complete’ builtin is invoked. - '-o COMP-OPTION' + ‘-o COMP-OPTION’ The COMP-OPTION controls several aspects of the compspec's behavior beyond the simple generation of completions. COMP-OPTION may be one of: - 'bashdefault' + ‘bashdefault’ Perform the rest of the default Bash completions if the compspec generates no matches. - 'default' + ‘default’ Use Readline's default filename completion if the compspec generates no matches. - 'dirnames' + ‘dirnames’ Perform directory name completion if the compspec generates no matches. - 'filenames' + ‘filenames’ Tell Readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names, quoting special characters, or suppressing trailing spaces). This option is intended to be used with shell functions specified - with '-F'. + with ‘-F’. - 'noquote' + ‘fullquote’ + Tell Readline to quote all the completed words even if + they are not filenames. + + ‘noquote’ Tell Readline not to quote the completed words if they are filenames (quoting filenames is the default). - 'nosort' + ‘nosort’ Tell Readline not to sort the list of possible completions alphabetically. - 'nospace' + ‘nospace’ Tell Readline not to append a space (the default) to words completed at the end of the line. - 'plusdirs' + ‘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' + ‘-A ACTION’ The ACTION may be one of the following to generate a list of possible completions: - 'alias' - Alias names. May also be specified as '-a'. + ‘alias’ + Alias names. May also be specified as ‘-a’. - 'arrayvar' + ‘arrayvar’ Array variable names. - 'binding' + ‘binding’ Readline key binding names (*note Bindable Readline Commands::). - 'builtin' + ‘builtin’ Names of shell builtin commands. May also be specified - as '-b'. + as ‘-b’. - 'command' - Command names. May also be specified as '-c'. + ‘command’ + Command names. May also be specified as ‘-c’. - 'directory' - Directory names. May also be specified as '-d'. + ‘directory’ + Directory names. May also be specified as ‘-d’. - 'disabled' + ‘disabled’ Names of disabled shell builtins. - 'enabled' + ‘enabled’ Names of enabled shell builtins. - 'export' + ‘export’ Names of exported shell variables. May also be specified - as '-e'. + as ‘-e’. - 'file' - File names. May also be specified as '-f'. + ‘file’ + File names. May also be specified as ‘-f’. - 'function' + ‘function’ Names of shell functions. - 'group' - Group names. May also be specified as '-g'. + ‘group’ + Group names. May also be specified as ‘-g’. - 'helptopic' - Help topics as accepted by the 'help' builtin (*note Bash + ‘helptopic’ + Help topics as accepted by the ‘help’ builtin (*note Bash Builtins::). - 'hostname' + ‘hostname’ Hostnames, as taken from the file specified by the - 'HOSTFILE' shell variable (*note Bash Variables::). + ‘HOSTFILE’ shell variable (*note Bash Variables::). - 'job' + ‘job’ Job names, if job control is active. May also be - specified as '-j'. + specified as ‘-j’. - 'keyword' - Shell reserved words. May also be specified as '-k'. + ‘keyword’ + Shell reserved words. May also be specified as ‘-k’. - 'running' + ‘running’ Names of running jobs, if job control is active. - 'service' - Service names. May also be specified as '-s'. + ‘service’ + Service names. May also be specified as ‘-s’. - 'setopt' - Valid arguments for the '-o' option to the 'set' builtin + ‘setopt’ + Valid arguments for the ‘-o’ option to the ‘set’ builtin (*note The Set Builtin::). - 'shopt' - Shell option names as accepted by the 'shopt' builtin + ‘shopt’ + Shell option names as accepted by the ‘shopt’ builtin (*note Bash Builtins::). - 'signal' + ‘signal’ Signal names. - 'stopped' + ‘stopped’ Names of stopped jobs, if job control is active. - 'user' - User names. May also be specified as '-u'. + ‘user’ + User names. May also be specified as ‘-u’. - 'variable' + ‘variable’ Names of all shell variables. May also be specified as - '-v'. + ‘-v’. - '-C COMMAND' + ‘-C COMMAND’ COMMAND is executed in a subshell environment, and its output is used as the possible completions. Arguments are passed as - with the '-F' option. + with the ‘-F’ option. - '-F FUNCTION' + ‘-F FUNCTION’ The shell function FUNCTION is executed in the current shell environment. When it is executed, $1 is the name of the command whose arguments are being completed, $2 is the word being completed, and $3 is the word preceding the word being completed, as described above (*note Programmable Completion::). When it finishes, the possible completions are - retrieved from the value of the 'COMPREPLY' array variable. + retrieved from the value of the ‘COMPREPLY’ array variable. - '-G GLOBPAT' + ‘-G GLOBPAT’ The filename expansion pattern GLOBPAT is expanded to generate the possible completions. - '-P PREFIX' + ‘-P PREFIX’ PREFIX is added at the beginning of each possible completion after all other options have been applied. - '-S SUFFIX' + ‘-S SUFFIX’ SUFFIX is appended to each possible completion after all other options have been applied. - '-W WORDLIST' - The WORDLIST is split using the characters in the 'IFS' + ‘-W WORDLIST’ + The WORDLIST is split using the characters in the ‘IFS’ special variable as delimiters, and each resultant word is expanded. The possible completions are the members of the resultant list which match the word being completed. - '-X FILTERPAT' + ‘-X FILTERPAT’ FILTERPAT is a pattern as used for filename expansion. It is applied to the list of possible completions generated by the preceding options and arguments, and each completion matching - FILTERPAT is removed from the list. A leading '!' in + FILTERPAT is removed from the list. A leading ‘!’ in FILTERPAT negates the pattern; in this case, any completion not matching FILTERPAT is removed. The return value is true unless an invalid option is supplied, an - option other than '-p' or '-r' is supplied without a NAME argument, - an attempt is made to remove a completion specification for a NAME - for which no specification exists, or an error occurs adding a - completion specification. + option other than ‘-p’, ‘-r’, ‘-D’, ‘-E’, or ‘-I’ is supplied + without a NAME argument, an attempt is made to remove a completion + specification for a NAME for which no specification exists, or an + error occurs adding a completion specification. -'compopt' +‘compopt’ compopt [-o OPTION] [-DEI] [+o OPTION] [NAME] Modify completion options for each NAME according to the OPTIONs, or for the currently-executing completion if no NAMEs are supplied. If no OPTIONs are given, display the completion options for each NAME or the current completion. The possible values of OPTION are - those valid for the 'complete' builtin described above. The '-D' + those valid for the ‘complete’ builtin described above. The ‘-D’ option indicates that other supplied options should apply to the "default" command completion; that is, completion attempted on a command for which no completion has previously been defined. The - '-E' option indicates that other supplied options should apply to + ‘-E’ option indicates that other supplied options should apply to "empty" command completion; that is, completion attempted on a - blank line. The '-I' option indicates that other supplied options + blank line. The ‘-I’ option indicates that other supplied options should apply to completion on the initial non-assignment word on - the line, or after a command delimiter such as ';' or '|', which is + the line, or after a command delimiter such as ‘;’ or ‘|’, which is usually command name completion. - If multiple options are supplied, the '-D' option takes precedence - over '-E', and both take precedence over '-I' + If multiple options are supplied, the ‘-D’ option takes precedence + over ‘-E’, and both take precedence over ‘-I’ The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a NAME for which no @@ -9798,23 +10157,23 @@ File: bash.info, Node: A Programmable Completion Example, Prev: Programmable C ===================================== The most common way to obtain additional completion functionality beyond -the default actions 'complete' and 'compgen' provide is to use a shell -function and bind it to a particular command using 'complete -F'. +the default actions ‘complete’ and ‘compgen’ provide is to use a shell +function and bind it to a particular command using ‘complete -F’. - The following function provides completions for the 'cd' builtin. It + The following function provides completions for the ‘cd’ builtin. It is a reasonably good example of what shell functions must do when used -for completion. This function uses the word passed as '$2' to determine -the directory name to complete. You can also use the 'COMP_WORDS' array -variable; the current word is indexed by the 'COMP_CWORD' variable. +for completion. This function uses the word passed as ‘$2’ to determine +the directory name to complete. You can also use the ‘COMP_WORDS’ array +variable; the current word is indexed by the ‘COMP_CWORD’ variable. - The function relies on the 'complete' and 'compgen' builtins to do -much of the work, adding only the things that the Bash 'cd' does beyond + The function relies on the ‘complete’ and ‘compgen’ builtins to do +much of the work, adding only the things that the Bash ‘cd’ does beyond accepting basic directory names: tilde expansion (*note Tilde Expansion::), searching directories in $CDPATH, which is described above -(*note Bourne Shell Builtins::), and basic support for the 'cdable_vars' -shell option (*note The Shopt Builtin::). '_comp_cd' modifies the value +(*note Bourne Shell Builtins::), and basic support for the ‘cdable_vars’ +shell option (*note The Shopt Builtin::). ‘_comp_cd’ modifies the value of IFS so that it contains only a newline to accommodate file names -containing spaces and tabs - 'compgen' prints the possible completions +containing spaces and tabs - ‘compgen’ prints the possible completions it generates one per line. Possible completions go into the COMPREPLY array variable, one @@ -9868,8 +10227,8 @@ retrieves the completions from there when the function returns. return 0 } - We install the completion function using the '-F' option to -'complete': + We install the completion function using the ‘-F’ option to +‘complete’: # Tell readline to quote appropriate and append slashes to directories; # use the bash default completion for other arguments @@ -9877,22 +10236,22 @@ retrieves the completions from there when the function returns. Since we'd like Bash and Readline to take care of some of the other details for us, we use several other options to tell Bash and Readline -what to do. The '-o filenames' option tells Readline that the possible +what to do. The ‘-o filenames’ option tells Readline that the possible completions should be treated as filenames, and quoted appropriately. That option will also cause Readline to append a slash to filenames it can determine are directories (which is why we might want to extend -'_comp_cd' to append a slash if we're using directories found via -CDPATH: Readline can't tell those completions are directories). The '-o -nospace' option tells Readline to not append a space character to the -directory name, in case we want to append to it. The '-o bashdefault' +‘_comp_cd’ to append a slash if we're using directories found via +CDPATH: Readline can't tell those completions are directories). The ‘-o +nospace’ option tells Readline to not append a space character to the +directory name, in case we want to append to it. The ‘-o bashdefault’ option brings in the rest of the "Bash default" completions - possible completions that Bash adds to the default Readline set. These include things like command name completion, variable completion for words -beginning with '$' or '${', completions containing pathname expansion +beginning with ‘$’ or ‘${’, completions containing pathname expansion patterns (*note Filename Expansion::), and so on. - Once installed using 'complete', '_comp_cd' will be called every time -we attempt word completion for a 'cd' command. + Once installed using ‘complete’, ‘_comp_cd’ will be called every time +we attempt word completion for a ‘cd’ command. Many more examples - an extensive collection of completions for most of the common GNU, Unix, and Linux commands - are available as part of @@ -9902,7 +10261,7 @@ project now lives at . There are ports for other systems such as Solaris and Mac OS X. An older version of the bash_completion package is distributed with -bash in the 'examples/complete' subdirectory. +bash in the ‘examples/complete’ subdirectory.  File: bash.info, Node: Using History Interactively, Next: Installing Bash, Prev: Command Line Editing, Up: Top @@ -9929,52 +10288,52 @@ File: bash.info, Node: Bash History Facilities, Next: Bash History Builtins, 9.1 Bash History Facilities =========================== -When the '-o history' option to the 'set' builtin is enabled (*note The -Set Builtin::), the shell provides access to the "command history", the -list of commands previously typed. The value of the 'HISTSIZE' shell +When the ‘-o history’ option to the ‘set’ builtin is enabled (*note The +Set Builtin::), the shell provides access to the “command history”, the +list of commands previously typed. The value of the ‘HISTSIZE’ shell variable is used as the number of commands to save in a history list. -The text of the last '$HISTSIZE' commands (default 500) is saved. The +The text of the last ‘$HISTSIZE’ commands (default 500) is saved. The shell stores each command in the history list prior to parameter and variable expansion but after history expansion is performed, subject to -the values of the shell variables 'HISTIGNORE' and 'HISTCONTROL'. +the values of the shell variables ‘HISTIGNORE’ and ‘HISTCONTROL’. When the shell starts up, the history is initialized from the file -named by the 'HISTFILE' variable (default '~/.bash_history'). The file -named by the value of 'HISTFILE' is truncated, if necessary, to contain +named by the ‘HISTFILE’ variable (default ‘~/.bash_history’). The file +named by the value of ‘HISTFILE’ is truncated, if necessary, to contain no more than the number of lines specified by the value of the -'HISTFILESIZE' variable. When a shell with history enabled exits, the -last '$HISTSIZE' lines are copied from the history list to the file -named by '$HISTFILE'. If the 'histappend' shell option is set (*note +‘HISTFILESIZE’ variable. When a shell with history enabled exits, the +last ‘$HISTSIZE’ lines are copied from the history list to the file +named by ‘$HISTFILE’. If the ‘histappend’ shell option is set (*note Bash Builtins::), the lines are appended to the history file, otherwise -the history file is overwritten. If 'HISTFILE' is unset, or if the -history file is unwritable, the history is not saved. After saving the -history, the history file is truncated to contain no more than -'$HISTFILESIZE' lines. If 'HISTFILESIZE' is unset, or set to null, a +the history file is overwritten. If ‘HISTFILE’ is unset or null, or if +the history file is unwritable, the history is not saved. After saving +the history, the history file is truncated to contain no more than +‘$HISTFILESIZE’ lines. If ‘HISTFILESIZE’ is unset, or set to null, a non-numeric value, or a numeric value less than zero, the history file is not truncated. - If the 'HISTTIMEFORMAT' is set, the time stamp information associated + If the ‘HISTTIMEFORMAT’ is set, the time stamp information associated with each history entry is written to the history file, marked with the history comment character. When the history file is read, lines beginning with the history comment character followed immediately by a digit are interpreted as timestamps for the following history entry. - The builtin command 'fc' may be used to list or edit and re-execute a -portion of the history list. The 'history' builtin may be used to + The ‘fc’ builtin command may be used to list or edit and re-execute a +portion of the history list. The ‘history’ builtin may be used to display or modify the history list and manipulate the history file. When using command-line editing, search commands are available in each editing mode that provide access to the history list (*note Commands For History::). The shell allows control over which commands are saved on the history -list. The 'HISTCONTROL' and 'HISTIGNORE' variables may be set to cause -the shell to save only a subset of the commands entered. The 'cmdhist' +list. The ‘HISTCONTROL’ and ‘HISTIGNORE’ variables are used to cause +the shell to save only a subset of the commands entered. The ‘cmdhist’ shell option, if enabled, causes the shell to attempt to save each line of a multi-line command in the same history entry, adding semicolons -where necessary to preserve syntactic correctness. The 'lithist' shell +where necessary to preserve syntactic correctness. The ‘lithist’ shell option causes the shell to save the command with embedded newlines -instead of semicolons. The 'shopt' builtin is used to set these -options. *Note The Shopt Builtin::, for a description of 'shopt'. +instead of semicolons. The ‘shopt’ builtin is used to set these +options. *Note The Shopt Builtin::, for a description of ‘shopt’.  File: bash.info, Node: Bash History Builtins, Next: History Interaction, Prev: Bash History Facilities, Up: Using History Interactively @@ -9985,7 +10344,7 @@ File: bash.info, Node: Bash History Builtins, Next: History Interaction, Prev Bash provides two builtin commands which manipulate the history list and history file. -'fc' +‘fc’ fc [-e ENAME] [-lnr] [FIRST] [LAST] fc -s [PAT=REP] [COMMAND] @@ -9997,19 +10356,19 @@ history file. from the current command number). When listing, a FIRST or LAST of 0 is equivalent to -1 and -0 is - equivalent to the current command (usually the 'fc' command); + equivalent to the current command (usually the ‘fc’ command); otherwise 0 is equivalent to -1 and -0 is invalid. If LAST is not specified, it is set to FIRST. If FIRST is not - specified, it is set to the previous command for editing and -16 - for listing. If the '-l' flag is given, the commands are listed on - standard output. The '-n' flag suppresses the command numbers when - listing. The '-r' flag reverses the order of the listing. + specified, it is set to the previous command for editing and −16 + for listing. If the ‘-l’ flag is given, the commands are listed on + standard output. The ‘-n’ flag suppresses the command numbers when + listing. The ‘-r’ flag reverses the order of the listing. Otherwise, the editor given by ENAME is invoked on a file containing those commands. If ENAME is not given, the value of the - following variable expansion is used: '${FCEDIT:-${EDITOR:-vi}}'. - This says to use the value of the 'FCEDIT' variable if set, or the - value of the 'EDITOR' variable if that is set, or 'vi' if neither + following variable expansion is used: ‘${FCEDIT:-${EDITOR:-vi}}’. + This says to use the value of the ‘FCEDIT’ variable if set, or the + value of the ‘EDITOR’ variable if that is set, or ‘vi’ if neither is set. When editing is complete, the edited commands are echoed and executed. @@ -10017,11 +10376,11 @@ history file. PAT in the selected command is replaced by REP. COMMAND is interpreted the same as FIRST above. - A useful alias to use with the 'fc' command is 'r='fc -s'', so that - typing 'r cc' runs the last command beginning with 'cc' and typing - 'r' re-executes the last command (*note Aliases::). + A useful alias to use with the ‘fc’ command is ‘r='fc -s'’, so that + typing ‘r cc’ runs the last command beginning with ‘cc’ and typing + ‘r’ re-executes the last command (*note Aliases::). -'history' +‘history’ history [N] history -c history -d OFFSET @@ -10030,68 +10389,69 @@ history file. history -ps ARG With no options, display the history list with line numbers. Lines - prefixed with a '*' have been modified. An argument of N lists - only the last N lines. If the shell variable 'HISTTIMEFORMAT' is - set and not null, it is used as a format string for STRFTIME to - display the time stamp associated with each displayed history + prefixed with a ‘*’ have been modified. An argument of N lists + only the last N lines. If the shell variable ‘HISTTIMEFORMAT’ is + set and not null, it is used as a format string for ‘strftime’(3) + to display the time stamp associated with each displayed history entry. No intervening blank is printed between the formatted time stamp and the history line. Options, if supplied, have the following meanings: - '-c' + ‘-c’ Clear the history list. This may be combined with the other options to replace the history list completely. - '-d OFFSET' + ‘-d OFFSET’ Delete the history entry at position OFFSET. If OFFSET is positive, it should be specified as it appears when the history is displayed. If OFFSET is negative, it is interpreted as relative to one greater than the last history position, so negative indices count back from the end of the - history, and an index of '-1' refers to the current 'history - -d' command. + history, and an index of ‘-1’ refers to the current ‘history + -d’ command. - '-d START-END' + ‘-d START-END’ Delete the range of history entries between positions START and END, inclusive. Positive and negative values for START and END are interpreted as described above. - '-a' + ‘-a’ Append the new history lines to the history file. These are history lines entered since the beginning of the current Bash session, but not already appended to the history file. - '-n' + ‘-n’ Append the history lines not already read from the history file to the current history list. These are lines appended to the history file since the beginning of the current Bash session. - '-r' + ‘-r’ Read the history file and append its contents to the history list. - '-w' + ‘-w’ Write out the current history list to the history file. - '-p' + ‘-p’ Perform history substitution on the ARGs and display the result on the standard output, without storing the results in the history list. - '-s' + ‘-s’ The ARGs are added to the end of the history list as a single entry. - If a FILENAME argument is supplied when any of the '-w', '-r', - '-a', or '-n' options is used, Bash uses FILENAME as the history - file. If not, then the value of the 'HISTFILE' variable is used. + If a FILENAME argument is supplied when any of the ‘-w’, ‘-r’, + ‘-a’, or ‘-n’ options is used, Bash uses FILENAME as the history + file. If not, then the value of the ‘HISTFILE’ variable is used. + If ‘HISTFILE’ is unset or null, these options have no effect. The return value is 0 unless an invalid option is encountered, an error occurs while reading or writing the history file, an invalid - OFFSET or range is supplied as an argument to '-d', or the history - expansion supplied as an argument to '-p' fails. + OFFSET or range is supplied as an argument to ‘-d’, or the history + expansion supplied as an argument to ‘-p’ fails.  File: bash.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively @@ -10100,7 +10460,7 @@ File: bash.info, Node: History Interaction, Prev: Bash History Builtins, Up: ===================== The History library provides a history expansion feature that is similar -to the history expansion provided by 'csh'. This section describes the +to the history expansion provided by ‘csh’. This section describes the syntax used to manipulate the history information. History expansions introduce words from the history list into the @@ -10116,13 +10476,19 @@ functions about quoting still in effect from previous lines. History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for -inclusion into the current one. The line selected from the history is -called the "event", and the portions of that line that are acted upon -are called "words". Various "modifiers" are available to manipulate the -selected words. The line is broken into words in the same fashion that -Bash does, so that several words surrounded by quotes are considered one -word. History expansions are introduced by the appearance of the -history expansion character, which is '!' by default. +inclusion into the current one. + + The line selected from the history is called the “event”, and the +portions of that line that are acted upon are called “words”. The line +is broken into words in the same fashion that Bash does, so that several +words surrounded by quotes are considered one word. The “event +designator” selects the event, the optional “word designator” selects +words from the event, and various optional “modifiers” are available to +manipulate the selected words. + + History expansions are introduced by the appearance of the history +expansion character, which is ‘!’ by default. History expansions may +appear anywhere in the input, but do not nest. History expansion implements shell-like quoting conventions: a backslash can be used to remove the special handling for the next @@ -10132,27 +10498,35 @@ double quotes may be subject to history expansion, since backslash can escape the history expansion character, but single quotes may not, since they are not treated specially within double quotes. - When using the shell, only '\' and ''' may be used to escape the + When using the shell, only ‘\’ and ‘'’ may be used to escape the history expansion character, but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string. - Several shell options settable with the 'shopt' builtin (*note The + There is a special abbreviation for substitution, active when the +QUICK SUBSTITUTION character (default ‘^’) is the first character on the +line. It selects the previous history list entry, using an event +designator equivalent to ‘!!’, and substitutes one string for another in +that line. It is described below (*note Event Designators::). This is +the only history expansion that does not begin with the history +expansion character. + + Several shell options settable with the ‘shopt’ builtin (*note The Shopt Builtin::) may be used to tailor the behavior of history -expansion. If the 'histverify' shell option is enabled, and Readline is +expansion. If the ‘histverify’ shell option is enabled, and Readline is being used, history substitutions are not immediately passed to the shell parser. Instead, the expanded line is reloaded into the Readline editing buffer for further modification. If Readline is being used, and -the 'histreedit' shell option is enabled, a failed history expansion +the ‘histreedit’ shell option is enabled, a failed history expansion will be reloaded into the Readline editing buffer for correction. The -'-p' option to the 'history' builtin command may be used to see what a -history expansion will do before using it. The '-s' option to the -'history' builtin may be used to add commands to the end of the history +‘-p’ option to the ‘history’ builtin command may be used to see what a +history expansion will do before using it. The ‘-s’ option to the +‘history’ builtin may be used to add commands to the end of the history list without actually executing them, so that they are available for subsequent recall. This is most useful in conjunction with Readline. The shell allows control of the various characters used by the -history expansion mechanism with the 'histchars' variable, as explained +history expansion mechanism with the ‘histchars’ variable, as explained above (*note Bash Variables::). The shell uses the history comment character to mark history timestamps when writing the history file. @@ -10170,38 +10544,41 @@ File: bash.info, Node: Event Designators, Next: Word Designators, Up: History An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to -the current position in the history list. +the current position in the history list. The event designator consists +of the portion of the word beginning with the history expansion +character, and ending with the word designator if one is present, or the +end of the word. -'!' +‘!’ Start a history substitution, except when followed by a space, tab, - the end of the line, '=' or '(' (when the 'extglob' shell option is - enabled using the 'shopt' builtin). + the end of the line, ‘=’, or the rest of the shell metacharacters + defined above (*note Definitions::). -'!N' +‘!N’ Refer to command line N. -'!-N' +‘!-N’ Refer to the command N lines back. -'!!' - Refer to the previous command. This is a synonym for '!-1'. +‘!!’ + Refer to the previous command. This is a synonym for ‘!-1’. -'!STRING' +‘!STRING’ Refer to the most recent command preceding the current position in the history list starting with STRING. -'!?STRING[?]' +‘!?STRING[?]’ Refer to the most recent command preceding the current position in - the history list containing STRING. The trailing '?' may be + the history list containing STRING. The trailing ‘?’ may be omitted if the STRING is followed immediately by a newline. If STRING is missing, the string from the most recent search is used; it is an error if there is no previous search string. -'^STRING1^STRING2^' +‘^STRING1^STRING2^’ Quick Substitution. Repeat the last command, replacing STRING1 - with STRING2. Equivalent to '!!:s^STRING1^STRING2^'. + with STRING2. Equivalent to ‘!!:s^STRING1^STRING2^’. -'!#' +‘!#’ The entire command line typed so far.  @@ -10210,58 +10587,60 @@ File: bash.info, Node: Word Designators, Next: Modifiers, Prev: Event Designa 9.3.2 Word Designators ---------------------- -Word designators are used to select desired words from the event. A ':' -separates the event specification from the word designator. It may be -omitted if the word designator begins with a '^', '$', '*', '-', or '%'. -Words are numbered from the beginning of the line, with the first word -being denoted by 0 (zero). Words are inserted into the current line -separated by single spaces. +Word designators are used to select desired words from the event. They +are optional; if the word designator isn't supplied, the history +expansion uses the entire event. A ‘:’ separates the event +specification from the word designator. It may be omitted if the word +designator begins with a ‘^’, ‘$’, ‘*’, ‘-’, or ‘%’. Words are numbered +from the beginning of the line, with the first word being denoted by 0 +(zero). Words are inserted into the current line separated by single +spaces. For example, -'!!' +‘!!’ designates the preceding command. When you type this, the preceding command is repeated in toto. -'!!:$' +‘!!:$’ designates the last argument of the preceding command. This may be - shortened to '!$'. + shortened to ‘!$’. -'!fi:2' +‘!fi:2’ designates the second argument of the most recent command starting - with the letters 'fi'. + with the letters ‘fi’. Here are the word designators: -'0 (zero)' - The '0'th word. For many applications, this is the command word. +‘0 (zero)’ + The ‘0’th word. For many applications, this is the command word. -'N' +‘N’ The Nth word. -'^' +‘^’ The first argument; that is, word 1. -'$' +‘$’ The last argument. -'%' - The first word matched by the most recent '?STRING?' search, if the +‘%’ + The first word matched by the most recent ‘?STRING?’ search, if the search string begins with a character that is part of a word. -'X-Y' - A range of words; '-Y' abbreviates '0-Y'. +‘X-Y’ + A range of words; ‘-Y’ abbreviates ‘0-Y’. -'*' - All of the words, except the '0'th. This is a synonym for '1-$'. - It is not an error to use '*' if there is just one word in the +‘*’ + All of the words, except the ‘0’th. This is a synonym for ‘1-$’. + It is not an error to use ‘*’ if there is just one word in the event; the empty string is returned in that case. -'X*' - Abbreviates 'X-$' +‘X*’ + Abbreviates ‘X-$’ -'X-' - Abbreviates 'X-$' like 'X*', but omits the last word. If 'x' is +‘X-’ + Abbreviates ‘X-$’ like ‘X*’, but omits the last word. If ‘x’ is missing, it defaults to 0. If a word designator is supplied without an event specification, the @@ -10274,54 +10653,54 @@ File: bash.info, Node: Modifiers, Prev: Word Designators, Up: History Interac --------------- After the optional word designator, you can add a sequence of one or -more of the following modifiers, each preceded by a ':'. These modify, +more of the following modifiers, each preceded by a ‘:’. These modify, or edit, the word or words selected from the history event. -'h' +‘h’ Remove a trailing pathname component, leaving only the head. -'t' +‘t’ Remove all leading pathname components, leaving the tail. -'r' - Remove a trailing suffix of the form '.SUFFIX', leaving the +‘r’ + Remove a trailing suffix of the form ‘.SUFFIX’, leaving the basename. -'e' +‘e’ Remove all but the trailing suffix. -'p' +‘p’ Print the new command but do not execute it. -'q' +‘q’ Quote the substituted words, escaping further substitutions. -'x' - Quote the substituted words as with 'q', but break into words at - spaces, tabs, and newlines. The 'q' and 'x' modifiers are mutually +‘x’ + Quote the substituted words as with ‘q’, but break into words at + spaces, tabs, and newlines. The ‘q’ and ‘x’ modifiers are mutually exclusive; the last one supplied is used. -'s/OLD/NEW/' +‘s/OLD/NEW/’ Substitute NEW for the first occurrence of OLD in the event line. - Any character may be used as the delimiter in place of '/'. The + Any character may be used as the delimiter in place of ‘/’. The delimiter may be quoted in OLD and NEW with a single backslash. If - '&' appears in NEW, it is replaced by OLD. A single backslash will - quote the '&'. If OLD is null, it is set to the last OLD + ‘&’ appears in NEW, it is replaced by OLD. A single backslash will + quote the ‘&’. If OLD is null, it is set to the last OLD substituted, or, if no previous history substitutions took place, - the last STRING in a !?STRING'[?]' search. If NEW is null, each + the last STRING in a !?STRING‘[?]’ search. If NEW is null, each matching OLD is deleted. The final delimiter is optional if it is the last character on the input line. -'&' +‘&’ Repeat the previous substitution. -'g' -'a' +‘g’ +‘a’ Cause changes to be applied over the entire event line. Used in - conjunction with 's', as in 'gs/OLD/NEW/', or with '&'. + conjunction with ‘s’, as in ‘gs/OLD/NEW/’, or with ‘&’. -'G' - Apply the following 's' or '&' modifier once to each word in the +‘G’ + Apply the following ‘s’ or ‘&’ modifier once to each word in the event.  @@ -10362,45 +10741,45 @@ These are installation instructions for Bash. The simplest way to compile Bash is: - 1. 'cd' to the directory containing the source code and type - './configure' to configure Bash for your system. If you're using - 'csh' on an old version of System V, you might need to type 'sh - ./configure' instead to prevent 'csh' from trying to execute - 'configure' itself. + 1. ‘cd’ to the directory containing the source code and type + ‘./configure’ to configure Bash for your system. If you're using + ‘csh’ on an old version of System V, you might need to type ‘sh + ./configure’ instead to prevent ‘csh’ from trying to execute + ‘configure’ itself. - Running 'configure' takes some time. While running, it prints + Running ‘configure’ takes some time. While running, it prints messages telling which features it is checking for. - 2. Type 'make' to compile Bash and build the 'bashbug' bug reporting + 2. Type ‘make’ to compile Bash and build the ‘bashbug’ bug reporting script. - 3. Optionally, type 'make tests' to run the Bash test suite. + 3. Optionally, type ‘make tests’ to run the Bash test suite. - 4. Type 'make install' to install 'bash' and 'bashbug'. This will + 4. Type ‘make install’ to install ‘bash’ and ‘bashbug’. This will also install the manual pages and Info file, message translation files, some supplemental documentation, a number of example loadable builtin commands, and a set of header files for developing loadable builtins. You may need additional privileges to install - 'bash' to your desired destination, so 'sudo make install' might be + ‘bash’ to your desired destination, so ‘sudo make install’ might be required. More information about controlling the locations where - 'bash' and other files are installed is below (*note Installation + ‘bash’ and other files are installed is below (*note Installation Names::). - The 'configure' shell script attempts to guess correct values for + The ‘configure’ shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses -those values to create a 'Makefile' in each directory of the package -(the top directory, the 'builtins', 'doc', 'po', and 'support' -directories, each directory under 'lib', and several others). It also -creates a 'config.h' file containing system-dependent definitions. -Finally, it creates a shell script named 'config.status' that you can +those values to create a ‘Makefile’ in each directory of the package +(the top directory, the ‘builtins’, ‘doc’, ‘po’, and ‘support’ +directories, each directory under ‘lib’, and several others). It also +creates a ‘config.h’ file containing system-dependent definitions. +Finally, it creates a shell script named ‘config.status’ that you can run in the future to recreate the current configuration, a file -'config.cache' that saves the results of its tests to speed up -reconfiguring, and a file 'config.log' containing compiler output -(useful mainly for debugging 'configure'). If at some point -'config.cache' contains results you don't want to keep, you may remove +‘config.cache’ that saves the results of its tests to speed up +reconfiguring, and a file ‘config.log’ containing compiler output +(useful mainly for debugging ‘configure’). If at some point +‘config.cache’ contains results you don't want to keep, you may remove or edit it. - To find out more about the options and arguments that the 'configure' + To find out more about the options and arguments that the ‘configure’ script understands, type bash-4.2$ ./configure --help @@ -10410,8 +10789,8 @@ at the Bash prompt in your Bash source directory. If you want to build Bash in a directory separate from the source directory - to build for multiple architectures, for example - just use the full path to the configure script. The following commands will -build bash in a directory under '/usr/local/build' from the source code -in '/usr/local/src/bash-4.4': +build Bash in a directory under ‘/usr/local/build’ from the source code +in ‘/usr/local/src/bash-4.4’: mkdir /usr/local/build/bash-4.4 cd /usr/local/build/bash-4.4 @@ -10422,19 +10801,19 @@ in '/usr/local/src/bash-4.4': about building in a directory separate from the source. If you need to do unusual things to compile Bash, please try to -figure out how 'configure' could check whether or not to do them, and +figure out how ‘configure’ could check whether or not to do them, and mail diffs or instructions to so they can be considered for the next release. - The file 'configure.ac' is used to create 'configure' by a program -called Autoconf. You only need 'configure.ac' if you want to change it -or regenerate 'configure' using a newer version of Autoconf. If you do + The file ‘configure.ac’ is used to create ‘configure’ by a program +called Autoconf. You only need ‘configure.ac’ if you want to change it +or regenerate ‘configure’ using a newer version of Autoconf. If you do this, make sure you are using Autoconf version 2.69 or newer. You can remove the program binaries and object files from the source -code directory by typing 'make clean'. To also remove the files that -'configure' created (so you can compile Bash for a different kind of -computer), type 'make distclean'. +code directory by typing ‘make clean’. To also remove the files that +‘configure’ created (so you can compile Bash for a different kind of +computer), type ‘make distclean’.  File: bash.info, Node: Compilers and Options, Next: Compiling For Multiple Architectures, Prev: Basic Installation, Up: Installing Bash @@ -10443,14 +10822,14 @@ File: bash.info, Node: Compilers and Options, Next: Compiling For Multiple Arc ========================== Some systems require unusual options for compilation or linking that the -'configure' script does not know about. You can give 'configure' +‘configure’ script does not know about. You can give ‘configure’ initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure - On systems that have the 'env' program, you can do it like this: + On systems that have the ‘env’ program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure @@ -10464,29 +10843,29 @@ File: bash.info, Node: Compiling For Multiple Architectures, Next: Installatio You can compile Bash for more than one kind of computer at the same time, by placing the object files for each architecture in their own -directory. To do this, you must use a version of 'make' that supports -the 'VPATH' variable, such as GNU 'make'. 'cd' to the directory where -you want the object files and executables to go and run the 'configure' +directory. To do this, you must use a version of ‘make’ that supports +the ‘VPATH’ variable, such as GNU ‘make’. ‘cd’ to the directory where +you want the object files and executables to go and run the ‘configure’ script from the source directory (*note Basic Installation::). You may -need to supply the '--srcdir=PATH' argument to tell 'configure' where -the source files are. 'configure' automatically checks for the source -code in the directory that 'configure' is in and in '..'. +need to supply the ‘--srcdir=PATH’ argument to tell ‘configure’ where +the source files are. ‘configure’ automatically checks for the source +code in the directory that ‘configure’ is in and in '..'. - If you have to use a 'make' that does not support the 'VPATH' + If you have to use a ‘make’ that does not support the ‘VPATH’ variable, you can compile Bash for one architecture at a time in the source code directory. After you have installed Bash for one -architecture, use 'make distclean' before reconfiguring for another +architecture, use ‘make distclean’ before reconfiguring for another architecture. Alternatively, if your system supports symbolic links, you can use -the 'support/mkclone' script to create a build tree which has symbolic +the ‘support/mkclone’ script to create a build tree which has symbolic links back to each file in the source directory. Here's an example that creates a build directory in the current directory from a source -directory '/usr/gnu/src/bash-2.0': +directory ‘/usr/gnu/src/bash-2.0’: bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 . -The 'mkclone' script requires Bash, so you must have already built Bash +The ‘mkclone’ script requires Bash, so you must have already built Bash for at least one architecture before you can create build directories for other architectures. @@ -10496,41 +10875,41 @@ File: bash.info, Node: Installation Names, Next: Specifying the System Type, 10.4 Installation Names ======================= -By default, 'make install' will install into '/usr/local/bin', -'/usr/local/man', etc.; that is, the "installation prefix" defaults to -'/usr/local'. You can specify an installation prefix other than -'/usr/local' by giving 'configure' the option '--prefix=PATH', or by -specifying a value for the 'prefix' 'make' variable when running 'make -install' (e.g., 'make install prefix=PATH'). The 'prefix' variable -provides a default for 'exec_prefix' and other variables used when -installing bash. +By default, ‘make install’ will install into ‘/usr/local/bin’, +‘/usr/local/man’, etc.; that is, the “installation prefix” defaults to +‘/usr/local’. You can specify an installation prefix other than +‘/usr/local’ by giving ‘configure’ the option ‘--prefix=PATH’, or by +specifying a value for the ‘prefix’ ‘make’ variable when running ‘make +install’ (e.g., ‘make install prefix=PATH’). The ‘prefix’ variable +provides a default for ‘exec_prefix’ and other variables used when +installing Bash. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -give 'configure' the option '--exec-prefix=PATH', 'make install' will +give ‘configure’ the option ‘--exec-prefix=PATH’, ‘make install’ will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. If you would like to change the installation locations for a single -run, you can specify these variables as arguments to 'make': 'make -install exec_prefix=/' will install 'bash' and 'bashbug' into '/bin' -instead of the default '/usr/local/bin'. +run, you can specify these variables as arguments to ‘make’: ‘make +install exec_prefix=/’ will install ‘bash’ and ‘bashbug’ into ‘/bin’ +instead of the default ‘/usr/local/bin’. - If you want to see the files bash will install and where it will + If you want to see the files Bash will install and where it will install them without changing anything on your system, specify the -variable 'DESTDIR' as an argument to 'make'. Its value should be the +variable ‘DESTDIR’ as an argument to ‘make’. Its value should be the absolute directory path you'd like to use as the root of your sample installation tree. For example, mkdir /fs1/bash-install make install DESTDIR=/fs1/bash-install -will install 'bash' into '/fs1/bash-install/usr/local/bin/bash', the +will install ‘bash’ into ‘/fs1/bash-install/usr/local/bin/bash’, the documentation into directories within -'/fs1/bash-install/usr/local/share', the example loadable builtins into -'/fs1/bash-install/usr/local/lib/bash', and so on. You can use the -usual 'exec_prefix' and 'prefix' variables to alter the directory paths -beneath the value of 'DESTDIR'. +‘/fs1/bash-install/usr/local/share’, the example loadable builtins into +‘/fs1/bash-install/usr/local/lib/bash’, and so on. You can use the +usual ‘exec_prefix’ and ‘prefix’ variables to alter the directory paths +beneath the value of ‘DESTDIR’. The GNU Makefile standards provide a more complete description of these variables and their effects. @@ -10541,15 +10920,15 @@ File: bash.info, Node: Specifying the System Type, Next: Sharing Defaults, Pr 10.5 Specifying the System Type =============================== -There may be some features 'configure' can not figure out automatically, +There may be some features ‘configure’ can not figure out automatically, but needs to determine by the type of host Bash will run on. Usually -'configure' can figure that out, but if it prints a message saying it -can not guess the host type, give it the '--host=TYPE' option. 'TYPE' -can either be a short name for the system type, such as 'sun4', or a -canonical name with three fields: 'CPU-COMPANY-SYSTEM' (e.g., -'i386-unknown-freebsd4.2'). +‘configure’ can figure that out, but if it prints a message saying it +can not guess the host type, give it the ‘--host=TYPE’ option. ‘TYPE’ +can either be a short name for the system type, such as ‘sun4’, or a +canonical name with three fields: ‘CPU-COMPANY-SYSTEM’ (e.g., +‘i386-unknown-freebsd4.2’). - See the file 'support/config.sub' for the possible values of each + See the file ‘support/config.sub’ for the possible values of each field.  @@ -10558,14 +10937,14 @@ File: bash.info, Node: Sharing Defaults, Next: Operation Controls, Prev: Spec 10.6 Sharing Defaults ===================== -If you want to set default values for 'configure' scripts to share, you -can create a site shell script called 'config.site' that gives default -values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' -looks for 'PREFIX/share/config.site' if it exists, then -'PREFIX/etc/config.site' if it exists. Or, you can set the -'CONFIG_SITE' environment variable to the location of the site script. -A warning: the Bash 'configure' looks for a site script, but not all -'configure' scripts do. +If you want to set default values for ‘configure’ scripts to share, you +can create a site shell script called ‘config.site’ that gives default +values for variables like ‘CC’, ‘cache_file’, and ‘prefix’. ‘configure’ +looks for ‘PREFIX/share/config.site’ if it exists, then +‘PREFIX/etc/config.site’ if it exists. Or, you can set the +‘CONFIG_SITE’ environment variable to the location of the site script. +A warning: the Bash ‘configure’ looks for a site script, but not all +‘configure’ scripts do.  File: bash.info, Node: Operation Controls, Next: Optional Features, Prev: Sharing Defaults, Up: Installing Bash @@ -10573,31 +10952,31 @@ File: bash.info, Node: Operation Controls, Next: Optional Features, Prev: Sha 10.7 Operation Controls ======================= -'configure' recognizes the following options to control how it operates. +‘configure’ recognizes the following options to control how it operates. -'--cache-file=FILE' +‘--cache-file=FILE’ Use and save the results of the tests in FILE instead of - './config.cache'. Set FILE to '/dev/null' to disable caching, for - debugging 'configure'. + ‘./config.cache’. Set FILE to ‘/dev/null’ to disable caching, for + debugging ‘configure’. -'--help' - Print a summary of the options to 'configure', and exit. +‘--help’ + Print a summary of the options to ‘configure’, and exit. -'--quiet' -'--silent' -'-q' +‘--quiet’ +‘--silent’ +‘-q’ Do not print messages saying which checks are being made. -'--srcdir=DIR' +‘--srcdir=DIR’ Look for the Bash source code in directory DIR. Usually - 'configure' can determine that directory automatically. + ‘configure’ can determine that directory automatically. -'--version' - Print the version of Autoconf used to generate the 'configure' +‘--version’ + Print the version of Autoconf used to generate the ‘configure’ script, and exit. - 'configure' also accepts some other, not widely used, boilerplate -options. 'configure --help' prints the complete list. + ‘configure’ also accepts some other, not widely used, boilerplate +options. ‘configure --help’ prints the complete list.  File: bash.info, Node: Optional Features, Prev: Operation Controls, Up: Installing Bash @@ -10605,271 +10984,271 @@ File: bash.info, Node: Optional Features, Prev: Operation Controls, Up: Insta 10.8 Optional Features ====================== -The Bash 'configure' has a number of '--enable-FEATURE' options, where +The Bash ‘configure’ has a number of ‘--enable-FEATURE’ options, where FEATURE indicates an optional part of Bash. There are also several -'--with-PACKAGE' options, where PACKAGE is something like 'bash-malloc' -or 'purify'. To turn off the default use of a package, use -'--without-PACKAGE'. To configure Bash without a feature that is -enabled by default, use '--disable-FEATURE'. +‘--with-PACKAGE’ options, where PACKAGE is something like ‘bash-malloc’ +or ‘purify’. To turn off the default use of a package, use +‘--without-PACKAGE’. To configure Bash without a feature that is +enabled by default, use ‘--disable-FEATURE’. - Here is a complete list of the '--enable-' and '--with-' options that -the Bash 'configure' recognizes. + Here is a complete list of the ‘--enable-’ and ‘--with-’ options that +the Bash ‘configure’ recognizes. -'--with-afs' +‘--with-afs’ Define if you are using the Andrew File System from Transarc. -'--with-bash-malloc' - Use the Bash version of 'malloc' in the directory 'lib/malloc'. - This is not the same 'malloc' that appears in GNU libc, but an - older version originally derived from the 4.2 BSD 'malloc'. This - 'malloc' is very fast, but wastes some space on each allocation. - This option is enabled by default. The 'NOTES' file contains a +‘--with-bash-malloc’ + Use the Bash version of ‘malloc’ in the directory ‘lib/malloc’. + This is not the same ‘malloc’ that appears in GNU libc, but an + older version originally derived from the 4.2 BSD ‘malloc’. This + ‘malloc’ is very fast, but wastes some space on each allocation. + This option is enabled by default. The ‘NOTES’ file contains a list of systems for which this should be turned off, and - 'configure' disables this option automatically for a number of + ‘configure’ disables this option automatically for a number of systems. -'--with-curses' +‘--with-curses’ Use the curses library instead of the termcap library. This should be supplied if your system has an inadequate or incomplete termcap database. -'--with-gnu-malloc' - A synonym for '--with-bash-malloc'. +‘--with-gnu-malloc’ + A synonym for ‘--with-bash-malloc’. -'--with-installed-readline[=PREFIX]' +‘--with-installed-readline[=PREFIX]’ Define this to make Bash link with a locally-installed version of - Readline rather than the version in 'lib/readline'. This works - only with Readline 5.0 and later versions. If PREFIX is 'yes' or - not supplied, 'configure' uses the values of the make variables - 'includedir' and 'libdir', which are subdirectories of 'prefix' by + Readline rather than the version in ‘lib/readline’. This works + only with Readline 5.0 and later versions. If PREFIX is ‘yes’ or + not supplied, ‘configure’ uses the values of the make variables + ‘includedir’ and ‘libdir’, which are subdirectories of ‘prefix’ by default, to find the installed version of Readline if it is not in the standard system include and library directories. If PREFIX is - 'no', Bash links with the version in 'lib/readline'. If PREFIX is - set to any other value, 'configure' treats it as a directory + ‘no’, Bash links with the version in ‘lib/readline’. If PREFIX is + set to any other value, ‘configure’ treats it as a directory pathname and looks for the installed version of Readline in - subdirectories of that directory (include files in PREFIX/'include' - and the library in PREFIX/'lib'). + subdirectories of that directory (include files in PREFIX/‘include’ + and the library in PREFIX/‘lib’). -'--with-libintl-prefix[=PREFIX]' +‘--with-libintl-prefix[=PREFIX]’ Define this to make Bash link with a locally-installed version of - the libintl library instead of the version in 'lib/intl'. + the libintl library instead of the version in ‘lib/intl’. -'--with-libiconv-prefix[=PREFIX]' +‘--with-libiconv-prefix[=PREFIX]’ Define this to make Bash look for libiconv in PREFIX instead of the standard system locations. There is no version included with Bash. -'--enable-minimal-config' +‘--enable-minimal-config’ This produces a shell with minimal features, close to the historical Bourne shell. - There are several '--enable-' options that alter how Bash is + There are several ‘--enable-’ options that alter how Bash is compiled, linked, and installed, rather than changing run-time features. -'--enable-largefile' +‘--enable-largefile’ Enable support for large files (http://www.unix.org/version2/whatsnew/lfs20mar.html) if the operating system requires special compiler options to build programs which can access large files. This is enabled by default, if the operating system provides large file support. -'--enable-profiling' +‘--enable-profiling’ This builds a Bash binary that produces profiling information to be - processed by 'gprof' each time it is executed. + processed by ‘gprof’ each time it is executed. -'--enable-separate-helpfiles' - Use external files for the documentation displayed by the 'help' +‘--enable-separate-helpfiles’ + Use external files for the documentation displayed by the ‘help’ builtin instead of storing the text internally. -'--enable-static-link' - This causes Bash to be linked statically, if 'gcc' is being used. +‘--enable-static-link’ + This causes Bash to be linked statically, if ‘gcc’ is being used. This could be used to build a version to use as root's shell. - The 'minimal-config' option can be used to disable all of the + The ‘minimal-config’ option can be used to disable all of the following options, but it is processed first, so individual options may -be enabled using 'enable-FEATURE'. +be enabled using ‘enable-FEATURE’. - All of the following options except for 'alt-array-implementation', -'disabled-builtins', 'direxpand-default', 'strict-posix-default', and -'xpg-echo-default' are enabled by default, unless the operating system + All of the following options except for ‘alt-array-implementation’, +‘disabled-builtins’, ‘direxpand-default’, ‘strict-posix-default’, and +‘xpg-echo-default’ are enabled by default, unless the operating system does not provide the necessary support. -'--enable-alias' - Allow alias expansion and include the 'alias' and 'unalias' +‘--enable-alias’ + Allow alias expansion and include the ‘alias’ and ‘unalias’ builtins (*note Aliases::). -'--enable-alt-array-implementation' - This builds bash using an alternate implementation of arrays (*note +‘--enable-alt-array-implementation’ + This builds Bash using an alternate implementation of arrays (*note Arrays::) that provides faster access at the expense of using more memory (sometimes many times more, depending on how sparse an array is). -'--enable-arith-for-command' - Include support for the alternate form of the 'for' command that - behaves like the C language 'for' statement (*note Looping +‘--enable-arith-for-command’ + Include support for the alternate form of the ‘for’ command that + behaves like the C language ‘for’ statement (*note Looping Constructs::). -'--enable-array-variables' +‘--enable-array-variables’ Include support for one-dimensional array shell variables (*note Arrays::). -'--enable-bang-history' - Include support for 'csh'-like history substitution (*note History +‘--enable-bang-history’ + Include support for ‘csh’-like history substitution (*note History Interaction::). -'--enable-brace-expansion' - Include 'csh'-like brace expansion ( 'b{a,b}c' ==> 'bac bbc' ). - See *note Brace Expansion::, for a complete description. +‘--enable-brace-expansion’ + Include ‘csh’-like brace expansion ( ‘b{a,b}c’ ↦ ‘bac bbc’ ). See + *note Brace Expansion::, for a complete description. -'--enable-casemod-attributes' - Include support for case-modifying attributes in the 'declare' - builtin and assignment statements. Variables with the 'uppercase' +‘--enable-casemod-attributes’ + Include support for case-modifying attributes in the ‘declare’ + builtin and assignment statements. Variables with the ‘uppercase’ attribute, for example, will have their values converted to uppercase upon assignment. -'--enable-casemod-expansion' +‘--enable-casemod-expansion’ Include support for case-modifying word expansions. -'--enable-command-timing' - Include support for recognizing 'time' as a reserved word and for - displaying timing statistics for the pipeline following 'time' +‘--enable-command-timing’ + Include support for recognizing ‘time’ as a reserved word and for + displaying timing statistics for the pipeline following ‘time’ (*note Pipelines::). This allows pipelines as well as shell builtins and functions to be timed. -'--enable-cond-command' - Include support for the '[[' conditional command. (*note +‘--enable-cond-command’ + Include support for the ‘[[’ conditional command. (*note Conditional Constructs::). -'--enable-cond-regexp' +‘--enable-cond-regexp’ Include support for matching POSIX regular expressions using the - '=~' binary operator in the '[[' conditional command. (*note + ‘=~’ binary operator in the ‘[[’ conditional command. (*note Conditional Constructs::). -'--enable-coprocesses' - Include support for coprocesses and the 'coproc' reserved word +‘--enable-coprocesses’ + Include support for coprocesses and the ‘coproc’ reserved word (*note Pipelines::). -'--enable-debugger' - Include support for the bash debugger (distributed separately). +‘--enable-debugger’ + Include support for the Bash debugger (distributed separately). -'--enable-dev-fd-stat-broken' - If calling 'stat' on /dev/fd/N returns different results than - calling 'fstat' on file descriptor N, supply this option to enable +‘--enable-dev-fd-stat-broken’ + If calling ‘stat’ on /dev/fd/N returns different results than + calling ‘fstat’ on file descriptor N, supply this option to enable a workaround. This has implications for conditional commands that test file attributes. -'--enable-direxpand-default' - Cause the 'direxpand' shell option (*note The Shopt Builtin::) to +‘--enable-direxpand-default’ + Cause the ‘direxpand’ shell option (*note The Shopt Builtin::) to be enabled by default when the shell starts. It is normally disabled by default. -'--enable-directory-stack' - Include support for a 'csh'-like directory stack and the 'pushd', - 'popd', and 'dirs' builtins (*note The Directory Stack::). +‘--enable-directory-stack’ + Include support for a ‘csh’-like directory stack and the ‘pushd’, + ‘popd’, and ‘dirs’ builtins (*note The Directory Stack::). -'--enable-disabled-builtins' - Allow builtin commands to be invoked via 'builtin xxx' even after - 'xxx' has been disabled using 'enable -n xxx'. See *note Bash - Builtins::, for details of the 'builtin' and 'enable' builtin +‘--enable-disabled-builtins’ + Allow builtin commands to be invoked via ‘builtin xxx’ even after + ‘xxx’ has been disabled using ‘enable -n xxx’. See *note Bash + Builtins::, for details of the ‘builtin’ and ‘enable’ builtin commands. -'--enable-dparen-arithmetic' - Include support for the '((...))' command (*note Conditional +‘--enable-dparen-arithmetic’ + Include support for the ‘((...))’ command (*note Conditional Constructs::). -'--enable-extended-glob' +‘--enable-extended-glob’ Include support for the extended pattern matching features described above under *note Pattern Matching::. -'--enable-extended-glob-default' - Set the default value of the 'extglob' shell option described above +‘--enable-extended-glob-default’ + Set the default value of the ‘extglob’ shell option described above under *note The Shopt Builtin:: to be enabled. -'--enable-function-import' +‘--enable-function-import’ Include support for importing function definitions exported by another instance of the shell from the environment. This option is enabled by default. -'--enable-glob-asciirange-default' - Set the default value of the 'globasciiranges' shell option +‘--enable-glob-asciiranges-default’ + Set the default value of the ‘globasciiranges’ shell option described above under *note The Shopt Builtin:: to be enabled. This controls the behavior of character ranges when used in pattern matching bracket expressions. -'--enable-help-builtin' - Include the 'help' builtin, which displays help on shell builtins +‘--enable-help-builtin’ + Include the ‘help’ builtin, which displays help on shell builtins and variables (*note Bash Builtins::). -'--enable-history' - Include command history and the 'fc' and 'history' builtin commands +‘--enable-history’ + Include command history and the ‘fc’ and ‘history’ builtin commands (*note Bash History Facilities::). -'--enable-job-control' +‘--enable-job-control’ This enables the job control features (*note Job Control::), if the operating system supports them. -'--enable-multibyte' +‘--enable-multibyte’ This enables support for multibyte characters if the operating system provides the necessary support. -'--enable-net-redirections' +‘--enable-net-redirections’ This enables the special handling of filenames of the form - '/dev/tcp/HOST/PORT' and '/dev/udp/HOST/PORT' when used in + ‘/dev/tcp/HOST/PORT’ and ‘/dev/udp/HOST/PORT’ when used in redirections (*note Redirections::). -'--enable-process-substitution' +‘--enable-process-substitution’ This enables process substitution (*note Process Substitution::) if the operating system provides the necessary support. -'--enable-progcomp' +‘--enable-progcomp’ Enable the programmable completion facilities (*note Programmable Completion::). If Readline is not enabled, this option has no effect. -'--enable-prompt-string-decoding' +‘--enable-prompt-string-decoding’ Turn on the interpretation of a number of backslash-escaped - characters in the '$PS0', '$PS1', '$PS2', and '$PS4' prompt + characters in the ‘$PS0’, ‘$PS1’, ‘$PS2’, and ‘$PS4’ prompt strings. See *note Controlling the Prompt::, for a complete list of prompt string escape sequences. -'--enable-readline' +‘--enable-readline’ Include support for command-line editing and history with the Bash version of the Readline library (*note Command Line Editing::). -'--enable-restricted' - Include support for a "restricted shell". If this is enabled, - Bash, when called as 'rbash', enters a restricted mode. See *note +‘--enable-restricted’ + Include support for a “restricted shell”. If this is enabled, + Bash, when called as ‘rbash’, enters a restricted mode. See *note The Restricted Shell::, for a description of restricted mode. -'--enable-select' - Include the 'select' compound command, which allows the generation +‘--enable-select’ + Include the ‘select’ compound command, which allows the generation of simple menus (*note Conditional Constructs::). -'--enable-single-help-strings' - Store the text displayed by the 'help' builtin as a single string +‘--enable-single-help-strings’ + Store the text displayed by the ‘help’ builtin as a single string for each help topic. This aids in translating the text to different languages. You may need to disable this if your compiler cannot handle very long string literals. -'--enable-strict-posix-default' +‘--enable-strict-posix-default’ Make Bash POSIX-conformant by default (*note Bash POSIX Mode::). -'--enable-translatable-strings' - Enable support for '$"STRING"' translatable strings (*note Locale +‘--enable-translatable-strings’ + Enable support for ‘$"STRING"’ translatable strings (*note Locale Translation::). -'--enable-usg-echo-default' - A synonym for '--enable-xpg-echo-default'. +‘--enable-usg-echo-default’ + A synonym for ‘--enable-xpg-echo-default’. -'--enable-xpg-echo-default' - Make the 'echo' builtin expand backslash-escaped characters by - default, without requiring the '-e' option. This sets the default - value of the 'xpg_echo' shell option to 'on', which makes the Bash - 'echo' behave more like the version specified in the Single Unix +‘--enable-xpg-echo-default’ + Make the ‘echo’ builtin expand backslash-escaped characters by + default, without requiring the ‘-e’ option. This sets the default + value of the ‘xpg_echo’ shell option to ‘on’, which makes the Bash + ‘echo’ behave more like the version specified in the Single Unix Specification, version 3. *Note Bash Builtins::, for a description - of the escape sequences that 'echo' recognizes. + of the escape sequences that ‘echo’ recognizes. - The file 'config-top.h' contains C Preprocessor '#define' statements -for options which are not settable from 'configure'. Some of these are + The file ‘config-top.h’ contains C Preprocessor ‘#define’ statements +for options which are not settable from ‘configure’. Some of these are not meant to be changed; beware of the consequences if you do. Read the comments associated with each definition for more information about its effect. @@ -10887,20 +11266,21 @@ of Bash. The latest version of Bash is always available for FTP from . Once you have determined that a bug actually exists, use the -'bashbug' 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 or posted to the Usenet -newsgroup 'gnu.bash.bug'. +‘bashbug’ command to submit a bug report or use the form at the Bash +project page (https://savannah.gnu.org/projects/bash/). If you have a +fix, you are encouraged to submit that as well! Suggestions and +'philosophical' bug reports may be mailed to or +. All bug reports should include: - * The version number of Bash. - * The hardware and operating system. - * The compiler used to compile Bash. - * A description of the bug behaviour. - * A short script or 'recipe' which exercises the bug and may be used + • The version number of Bash. + • The hardware and operating system. + • The compiler used to compile Bash. + • A description of the bug behaviour. + • A short script or 'recipe' which exercises the bug and may be used to reproduce it. -'bashbug' inserts the first three items automatically into the template +‘bashbug’ inserts the first three items automatically into the template it provides for filing a bug report. Please send all reports concerning this manual to . @@ -10917,314 +11297,349 @@ POSIX standard as the specification of how these features are to be implemented. There are some differences between the traditional Bourne shell and Bash; this section quickly details the differences of significance. A number of these differences are explained in greater -depth in previous sections. This section uses the version of 'sh' +depth in previous sections. This section uses the version of ‘sh’ included in SVR4.2 (the last version of the historical Bourne shell) as the baseline reference. - * Bash is POSIX-conformant, even where the POSIX specification - differs from traditional 'sh' behavior (*note Bash POSIX Mode::). + • Bash is POSIX-conformant, even where the POSIX specification + differs from traditional ‘sh’ behavior (*note Bash POSIX Mode::). - * Bash has multi-character invocation options (*note Invoking + • Bash has multi-character invocation options (*note Invoking Bash::). - * Bash has command-line editing (*note Command Line Editing::) and - the 'bind' builtin. + • Bash has command-line editing (*note Command Line Editing::) and + the ‘bind’ builtin. - * Bash provides a programmable word completion mechanism (*note - Programmable Completion::), and builtin commands 'complete', - 'compgen', and 'compopt', to manipulate it. + • Bash provides a programmable word completion mechanism (*note + Programmable Completion::), and builtin commands ‘complete’, + ‘compgen’, and ‘compopt’, to manipulate it. - * Bash has command history (*note Bash History Facilities::) and the - 'history' and 'fc' builtins to manipulate it. The Bash history + • Bash has command history (*note Bash History Facilities::) and the + ‘history’ and ‘fc’ builtins to manipulate it. The Bash history list maintains timestamp information and uses the value of the - 'HISTTIMEFORMAT' variable to display it. + ‘HISTTIMEFORMAT’ variable to display it. - * Bash implements 'csh'-like history expansion (*note History + • Bash implements ‘csh’-like history expansion (*note History Interaction::). - * Bash has one-dimensional array variables (*note Arrays::), and the + • Bash has one-dimensional array variables (*note Arrays::), and the appropriate variable expansions and assignment syntax to use them. Several of the Bash builtins take options to act on arrays. Bash provides a number of built-in array variables. - * The '$'...'' quoting syntax, which expands ANSI-C backslash-escaped + • The ‘$'...'’ quoting syntax, which expands ANSI-C backslash-escaped characters in the text between the single quotes, is supported (*note ANSI-C Quoting::). - * Bash supports the '$"..."' quoting syntax to do locale-specific - translation of the characters between the double quotes. The '-D', - '--dump-strings', and '--dump-po-strings' invocation options list + • Bash supports the ‘$"..."’ quoting syntax to do locale-specific + translation of the characters between the double quotes. The ‘-D’, + ‘--dump-strings’, and ‘--dump-po-strings’ invocation options list the translatable strings found in a script (*note Locale Translation::). - * Bash implements the '!' keyword to negate the return value of a - pipeline (*note Pipelines::). Very useful when an 'if' statement - needs to act only if a test fails. The Bash '-o pipefail' option - to 'set' will cause a pipeline to return a failure status if any + • Bash implements the ‘!’ keyword to negate the return value of a + pipeline (*note Pipelines::). Very useful when an ‘if’ statement + needs to act only if a test fails. The Bash ‘-o pipefail’ option + to ‘set’ will cause a pipeline to return a failure status if any command fails. - * Bash has the 'time' reserved word and command timing (*note + • Bash has the ‘time’ reserved word and command timing (*note Pipelines::). The display of the timing statistics may be - controlled with the 'TIMEFORMAT' variable. + controlled with the ‘TIMEFORMAT’ variable. - * Bash implements the 'for (( EXPR1 ; EXPR2 ; EXPR3 ))' arithmetic + • Bash implements the ‘for (( EXPR1 ; EXPR2 ; EXPR3 ))’ arithmetic for command, similar to the C language (*note Looping Constructs::). - * Bash includes the 'select' compound command, which allows the + • Bash includes the ‘select’ compound command, which allows the generation of simple menus (*note Conditional Constructs::). - * Bash includes the '[[' compound command, which makes conditional + • Bash includes the ‘[[’ compound command, which makes conditional testing part of the shell grammar (*note Conditional Constructs::), including optional regular expression matching. - * Bash provides optional case-insensitive matching for the 'case' and - '[[' constructs. + • Bash provides optional case-insensitive matching for the ‘case’ and + ‘[[’ constructs. - * Bash includes brace expansion (*note Brace Expansion::) and tilde + • Bash includes brace expansion (*note Brace Expansion::) and tilde expansion (*note Tilde Expansion::). - * Bash implements command aliases and the 'alias' and 'unalias' + • Bash implements command aliases and the ‘alias’ and ‘unalias’ builtins (*note Aliases::). - * Bash provides shell arithmetic, the '((' compound command (*note + • Bash provides shell arithmetic, the ‘((’ compound command (*note Conditional Constructs::), and arithmetic expansion (*note Shell Arithmetic::). - * Variables present in the shell's initial environment are + • Variables present in the shell's initial environment are automatically exported to child processes. The Bourne shell does not normally do this unless the variables are explicitly marked - using the 'export' command. + using the ‘export’ command. - * Bash supports the '+=' assignment operator, which appends to the + • Bash supports the ‘+=’ assignment operator, which appends to the value of the variable named on the left hand side. - * Bash includes the POSIX pattern removal '%', '#', '%%' and '##' + • Bash includes the POSIX pattern removal ‘%’, ‘#’, ‘%%’ and ‘##’ expansions to remove leading or trailing substrings from variable values (*note Shell Parameter Expansion::). - * The expansion '${#xx}', which returns the length of '${xx}', is + • The expansion ‘${#xx}’, which returns the length of ‘${xx}’, is supported (*note Shell Parameter Expansion::). - * The expansion '${var:'OFFSET'[:'LENGTH']}', which expands to the - substring of 'var''s value of length LENGTH, beginning at OFFSET, + • The expansion ‘${var:’OFFSET‘[:’LENGTH‘]}’, which expands to the + substring of ‘var’'s value of length LENGTH, beginning at OFFSET, is present (*note Shell Parameter Expansion::). - * The expansion '${VAR/[/]'PATTERN'[/'REPLACEMENT']}', which matches + • The expansion ‘${VAR/[/]’PATTERN‘[/’REPLACEMENT‘]}’, which matches PATTERN and replaces it with REPLACEMENT in the value of VAR, is - available (*note Shell Parameter Expansion::). + available (*note Shell Parameter Expansion::), with a mechanism to + use the matched text in REPLACEMENT. - * The expansion '${!PREFIX*}' expansion, which expands to the names + • The expansion ‘${!PREFIX*}’ expansion, which expands to the names of all shell variables whose names begin with PREFIX, is available (*note Shell Parameter Expansion::). - * Bash has indirect variable expansion using '${!word}' (*note Shell - Parameter Expansion::). + • Bash has indirect variable expansion using ‘${!word}’ (*note Shell + Parameter Expansion::) and implements the ‘nameref’ variable + attribute for automatic indirect variable expansion. + + • Bash can expand positional parameters beyond ‘$9’ using ‘${NUM}’. - * Bash can expand positional parameters beyond '$9' using '${NUM}'. + • Bash includes a set of parameter transformation word expansions of + the form ‘${var@X}’, where ‘X’ specifies the transformation. - * The POSIX '$()' form of command substitution is implemented (*note - Command Substitution::), and preferred to the Bourne shell's '``' + • The POSIX ‘$()’ form of command substitution is implemented (*note + Command Substitution::), and preferred to the Bourne shell's ‘``’ (which is also implemented for backwards compatibility). - * Bash has process substitution (*note Process Substitution::). + • Bash implements a variant of command substitution that runs the + enclosed command in the current shell execution environment (‘${ + COMMAND;}’). - * Bash automatically assigns variables that provide information about - the current user ('UID', 'EUID', and 'GROUPS'), the current host - ('HOSTTYPE', 'OSTYPE', 'MACHTYPE', and 'HOSTNAME'), and the - instance of Bash that is running ('BASH', 'BASH_VERSION', and - 'BASH_VERSINFO'). *Note Bash Variables::, for details. + • Bash has process substitution (*note Process Substitution::). - * The 'IFS' variable is used to split only the results of expansion, + • Bash automatically assigns variables that provide information about + the current user (‘UID’, ‘EUID’, and ‘GROUPS’), the current host + (‘HOSTTYPE’, ‘OSTYPE’, ‘MACHTYPE’, and ‘HOSTNAME’), and the + instance of Bash that is running (‘BASH’, ‘BASH_VERSION’, and + ‘BASH_VERSINFO’). *Note Bash Variables::, for details. + + • Bash uses many variables to provide functionality and customize + shell behavior that the Bourne shell does not. Examples include + ‘RANDOM’, ‘SRANDOM’, ‘EPOCHSECONDS’, ‘GLOBSORT’, ‘TIMEFORMAT’, + ‘BASHPID’, ‘BASH_XTRACEFD’, ‘GLOBIGNORE’, ‘HISTIGNORE’, and + ‘BASH_VERSION’. *Note Bash Variables::, for a complete list. + + • The ‘IFS’ variable is used to split only the results of expansion, not all words (*note Word Splitting::). This closes a longstanding shell security hole. - * The filename expansion bracket expression code uses '!' and '^' to + • The filename expansion bracket expression code uses ‘!’ and ‘^’ to negate the set of characters between the brackets. The Bourne - shell uses only '!'. + shell uses only ‘!’. - * Bash implements the full set of POSIX filename expansion operators, + • Bash implements the full set of POSIX filename expansion operators, including character classes, equivalence classes, and collating symbols (*note Filename Expansion::). - * Bash implements extended pattern matching features when the - 'extglob' shell option is enabled (*note Pattern Matching::). + • Bash implements extended pattern matching features when the + ‘extglob’ shell option is enabled (*note Pattern Matching::). - * It is possible to have a variable and a function with the same - name; 'sh' does not separate the two name spaces. + • It is possible to have a variable and a function with the same + name; ‘sh’ does not separate the two name spaces. - * Bash functions are permitted to have local variables using the - 'local' builtin, and thus useful recursive functions may be written + • Bash functions are permitted to have local variables using the + ‘local’ builtin, and thus useful recursive functions may be written (*note Bash Builtins::). - * Variable assignments preceding commands affect only that command, - even builtins and functions (*note Environment::). In 'sh', all + • Variable assignments preceding commands affect only that command, + even builtins and functions (*note Environment::). In ‘sh’, all variable assignments preceding commands are global unless the command is executed from the file system. - * Bash performs filename expansion on filenames specified as operands + • Bash performs filename expansion on filenames specified as operands to input and output redirection operators (*note Redirections::). - * Bash contains the '<>' redirection operator, allowing a file to be - opened for both reading and writing, and the '&>' redirection + • Bash contains the ‘<>’ redirection operator, allowing a file to be + opened for both reading and writing, and the ‘&>’ redirection operator, for directing standard output and standard error to the same file (*note Redirections::). - * Bash includes the '<<<' redirection operator, allowing a string to - be used as the standard input to a command. + • Bash includes the ‘<<<’ redirection operator, allowing a string to + be used as the standard input to a command (*note Redirections::). - * Bash implements the '[n]<&WORD' and '[n]>&WORD' redirection + • Bash implements the ‘[n]<&WORD’ and ‘[n]>&WORD’ redirection operators, which move one file descriptor to another. - * Bash treats a number of filenames specially when they are used in + • Bash treats a number of filenames specially when they are used in redirection operators (*note Redirections::). - * Bash can open network connections to arbitrary machines and + • Bash can open network connections to arbitrary machines and services with the redirection operators (*note Redirections::). - * The 'noclobber' option is available to avoid overwriting existing - files with output redirection (*note The Set Builtin::). The '>|' - redirection operator may be used to override 'noclobber'. + • The ‘noclobber’ option is available to avoid overwriting existing + files with output redirection (*note The Set Builtin::). The ‘>|’ + redirection operator may be used to override ‘noclobber’. - * The Bash 'cd' and 'pwd' builtins (*note Bourne Shell Builtins::) - each take '-L' and '-P' options to switch between logical and + • The Bash ‘cd’ and ‘pwd’ builtins (*note Bourne Shell Builtins::) + each take ‘-L’ and ‘-P’ options to switch between logical and physical modes. - * Bash allows a function to override a builtin with the same name, + • Bash allows a function to override a builtin with the same name, and provides access to that builtin's functionality within the - function via the 'builtin' and 'command' builtins (*note Bash + function via the ‘builtin’ and ‘command’ builtins (*note Bash Builtins::). - * The 'command' builtin allows selective disabling of functions when + • Bash implements support for dynamically loading builtin commands + from shared objects. + + • The ‘command’ builtin allows selective disabling of functions when command lookup is performed (*note Bash Builtins::). - * Individual builtins may be enabled or disabled using the 'enable' + • Individual builtins may be enabled or disabled using the ‘enable’ builtin (*note Bash Builtins::). - * The Bash 'exec' builtin takes additional options that allow users + • The Bash ‘exec’ builtin takes additional options that allow users to control the contents of the environment passed to the executed command, and what the zeroth argument to the command is to be (*note Bourne Shell Builtins::). - * Shell functions may be exported to children via the environment - using 'export -f' (*note Shell Functions::). + • Shell functions may be exported to children via the environment + using ‘export -f’ (*note Shell Functions::). + + • Bash decodes a number of backslash-escape sequences in the prompt + string variables (‘PS0’, ‘PS1’, ‘PS2’, and ‘PS4’). + + • Bash expands and displays the ‘PS0’ prompt string variable. - * The Bash 'export', 'readonly', and 'declare' builtins can take a - '-f' option to act on shell functions, a '-p' option to display + • Bash runs commands from the ‘PROMPT_COMMAND’ array variable before + issuing each primary prompt. + + • Bash decodes a number of backslash-escaped characters + • The Bash ‘export’, ‘readonly’, and ‘declare’ builtins can take a + ‘-f’ option to act on shell functions, a ‘-p’ option to display variables with various attributes set in a format that can be used - as shell input, a '-n' option to remove various variable - attributes, and 'name=value' arguments to set variable attributes + as shell input, a ‘-n’ option to remove various variable + attributes, and ‘name=value’ arguments to set variable attributes and values simultaneously. - * The Bash 'hash' builtin allows a name to be associated with an + • The Bash ‘hash’ builtin allows a name to be associated with an arbitrary filename, even when that filename cannot be found by - searching the '$PATH', using 'hash -p' (*note Bourne Shell + searching the ‘$PATH’, using ‘hash -p’ (*note Bourne Shell Builtins::). - * Bash includes a 'help' builtin for quick reference to shell + • Bash includes a ‘help’ builtin for quick reference to shell facilities (*note Bash Builtins::). - * The 'printf' builtin is available to display formatted output + • Bash includes the ‘mapfile’ builtin to quickly read the contents of + a file into an indexed array variable. + + • The ‘printf’ builtin is available to display formatted output (*note Bash Builtins::). - * The Bash 'read' builtin (*note Bash Builtins::) will read a line - ending in '\' with the '-r' option, and will use the 'REPLY' + • The Bash ‘read’ builtin (*note Bash Builtins::) will read a line + ending in ‘\’ with the ‘-r’ option, and will use the ‘REPLY’ variable as a default if no non-option arguments are supplied. The - Bash 'read' builtin also accepts a prompt string with the '-p' - option and will use Readline to obtain the line when given the '-e' - option. The 'read' builtin also has additional options to control - input: the '-s' option will turn off echoing of input characters as - they are read, the '-t' option will allow 'read' to time out if - input does not arrive within a specified number of seconds, the - '-n' option will allow reading only a specified number of - characters rather than a full line, and the '-d' option will read - until a particular character rather than newline. - - * The 'return' builtin may be used to abort execution of scripts - executed with the '.' or 'source' builtins (*note Bourne Shell + Bash ‘read’ builtin also accepts a prompt string with the ‘-p’ + option and will use Readline to obtain the line when given the ‘-e’ + or ‘-E’ options. The ‘read’ builtin also has additional options to + control input: the ‘-s’ option will turn off echoing of input + characters as they are read, the ‘-t’ option will allow ‘read’ to + time out if input does not arrive within a specified number of + seconds, the ‘-n’ option will allow reading only a specified number + of characters rather than a full line, and the ‘-d’ option will + read until a particular character rather than newline. + + • The ‘return’ builtin may be used to abort execution of scripts + executed with the ‘.’ or ‘source’ builtins (*note Bourne Shell Builtins::). - * Bash includes the 'shopt' builtin, for finer control of shell + • Bash includes the ‘shopt’ builtin, for finer control of shell optional capabilities (*note The Shopt Builtin::), and allows these options to be set and unset at shell invocation (*note Invoking Bash::). - * Bash has much more optional behavior controllable with the 'set' + • Bash has much more optional behavior controllable with the ‘set’ builtin (*note The Set Builtin::). - * The '-x' ('xtrace') option displays commands other than simple + • The ‘-x’ (‘xtrace’) option displays commands other than simple commands when performing an execution trace (*note The Set Builtin::). - * The 'test' builtin (*note Bourne Shell Builtins::) is slightly + • The ‘test’ builtin (*note Bourne Shell Builtins::) is slightly different, as it implements the POSIX algorithm, which specifies the behavior based on the number of arguments. - * Bash includes the 'caller' builtin, which displays the context of + • The Bash ‘wait’ builtin has a ‘-n’ option to wait for the next + child to exit, possibly selecting from a list of supplied jobs, and + the ‘-p’ option to store information about a terminated child + process in a shell variable. + + • Bash includes the ‘caller’ builtin, which displays the context of any active subroutine call (a shell function or a script executed - with the '.' or 'source' builtins). This supports the Bash + with the ‘.’ or ‘source’ builtins). This supports the Bash debugger. - * The 'trap' builtin (*note Bourne Shell Builtins::) allows a 'DEBUG' - pseudo-signal specification, similar to 'EXIT'. Commands specified - with a 'DEBUG' trap are executed before every simple command, 'for' - command, 'case' command, 'select' command, every arithmetic 'for' + • The ‘trap’ builtin (*note Bourne Shell Builtins::) allows a ‘DEBUG’ + pseudo-signal specification, similar to ‘EXIT’. Commands specified + with a ‘DEBUG’ trap are executed before every simple command, ‘for’ + command, ‘case’ command, ‘select’ command, every arithmetic ‘for’ command, and before the first command executes in a shell function. - The 'DEBUG' trap is not inherited by shell functions unless the - function has been given the 'trace' attribute or the 'functrace' - option has been enabled using the 'shopt' builtin. The 'extdebug' - shell option has additional effects on the 'DEBUG' trap. - - The 'trap' builtin (*note Bourne Shell Builtins::) allows an 'ERR' - pseudo-signal specification, similar to 'EXIT' and 'DEBUG'. - Commands specified with an 'ERR' trap are executed after a simple - command fails, with a few exceptions. The 'ERR' trap is not - inherited by shell functions unless the '-o errtrace' option to the - 'set' builtin is enabled. - - The 'trap' builtin (*note Bourne Shell Builtins::) allows a - 'RETURN' pseudo-signal specification, similar to 'EXIT' and - 'DEBUG'. Commands specified with a 'RETURN' trap are executed + The ‘DEBUG’ trap is not inherited by shell functions unless the + function has been given the ‘trace’ attribute or the ‘functrace’ + option has been enabled using the ‘shopt’ builtin. The ‘extdebug’ + shell option has additional effects on the ‘DEBUG’ trap. + + The ‘trap’ builtin (*note Bourne Shell Builtins::) allows an ‘ERR’ + pseudo-signal specification, similar to ‘EXIT’ and ‘DEBUG’. + Commands specified with an ‘ERR’ trap are executed after a simple + command fails, with a few exceptions. The ‘ERR’ trap is not + inherited by shell functions unless the ‘-o errtrace’ option to the + ‘set’ builtin is enabled. + + The ‘trap’ builtin (*note Bourne Shell Builtins::) allows a + ‘RETURN’ pseudo-signal specification, similar to ‘EXIT’ and + ‘DEBUG’. Commands specified with a ‘RETURN’ trap are executed before execution resumes after a shell function or a shell script - executed with '.' or 'source' returns. The 'RETURN' trap is not + executed with ‘.’ or ‘source’ returns. The ‘RETURN’ trap is not inherited by shell functions unless the function has been given the - 'trace' attribute or the 'functrace' option has been enabled using - the 'shopt' builtin. + ‘trace’ attribute or the ‘functrace’ option has been enabled using + the ‘shopt’ builtin. - * The Bash 'type' builtin is more extensive and gives more + • The Bash ‘type’ builtin is more extensive and gives more information about the names it finds (*note Bash Builtins::). - * The Bash 'umask' builtin permits a '-p' option to cause the output - to be displayed in the form of a 'umask' command that may be reused + • The Bash ‘umask’ builtin permits a ‘-p’ option to cause the output + to be displayed in the form of a ‘umask’ command that may be reused as input (*note Bourne Shell Builtins::). - * Bash implements a 'csh'-like directory stack, and provides the - 'pushd', 'popd', and 'dirs' builtins to manipulate it (*note The + • Bash implements a ‘csh’-like directory stack, and provides the + ‘pushd’, ‘popd’, and ‘dirs’ builtins to manipulate it (*note The Directory Stack::). Bash also makes the directory stack visible as - the value of the 'DIRSTACK' shell variable. + the value of the ‘DIRSTACK’ shell variable. - * Bash interprets special backslash-escaped characters in the prompt + • Bash interprets special backslash-escaped characters in the prompt strings when interactive (*note Controlling the Prompt::). - * The Bash restricted mode is more useful (*note The Restricted + • The Bash restricted mode is more useful (*note The Restricted Shell::); the SVR4.2 shell restricted mode is too limited. - * The 'disown' builtin can remove a job from the internal shell job + • The ‘disown’ builtin can remove a job from the internal shell job table (*note Job Control Builtins::) or suppress the sending of - 'SIGHUP' to a job when the shell exits as the result of a 'SIGHUP'. + ‘SIGHUP’ to a job when the shell exits as the result of a ‘SIGHUP’. - * Bash includes a number of features to support a separate debugger + • Bash includes a number of features to support a separate debugger for shell scripts. - * The SVR4.2 shell has two privilege-related builtins ('mldmode' and - 'priv') not present in Bash. + • The SVR4.2 shell has two privilege-related builtins (‘mldmode’ and + ‘priv’) not present in Bash. - * Bash does not have the 'stop' or 'newgrp' builtins. + • Bash does not have the ‘stop’ or ‘newgrp’ builtins. - * Bash does not use the 'SHACCT' variable or perform shell + • Bash does not use the ‘SHACCT’ variable or perform shell accounting. - * The SVR4.2 'sh' uses a 'TIMEOUT' variable like Bash uses 'TMOUT'. + • The SVR4.2 ‘sh’ uses a ‘TIMEOUT’ variable like Bash uses ‘TMOUT’. More features unique to Bash may be found in *note Bash Features::. @@ -11234,43 +11649,47 @@ B.1 Implementation Differences From The SVR4.2 Shell Since Bash is a completely new implementation, it does not suffer from many of the limitations of the SVR4.2 shell. For instance: - * Bash does not fork a subshell when redirecting into or out of a - shell control structure such as an 'if' or 'while' statement. + • Bash does not fork a subshell when redirecting into or out of a + shell control structure such as an ‘if’ or ‘while’ statement. - * Bash does not allow unbalanced quotes. The SVR4.2 shell will - silently insert a needed closing quote at 'EOF' under certain + • Bash does not allow unbalanced quotes. The SVR4.2 shell will + silently insert a needed closing quote at ‘EOF’ under certain circumstances. This can be the cause of some hard-to-find errors. - * The SVR4.2 shell uses a baroque memory management scheme based on - trapping 'SIGSEGV'. If the shell is started from a process with - 'SIGSEGV' blocked (e.g., by using the 'system()' C library function + • The SVR4.2 shell uses a baroque memory management scheme based on + trapping ‘SIGSEGV’. If the shell is started from a process with + ‘SIGSEGV’ blocked (e.g., by using the ‘system()’ C library function call), it misbehaves badly. - * In a questionable attempt at security, the SVR4.2 shell, when - invoked without the '-p' option, will alter its real and effective + • In a questionable attempt at security, the SVR4.2 shell, when + invoked without the ‘-p’ option, will alter its real and effective UID and GID if they are less than some magic threshold value, commonly 100. This can lead to unexpected results. - * The SVR4.2 shell does not allow users to trap 'SIGSEGV', 'SIGALRM', - or 'SIGCHLD'. + • The SVR4.2 shell does not allow users to trap ‘SIGSEGV’, ‘SIGALRM’, + or ‘SIGCHLD’. - * The SVR4.2 shell does not allow the 'IFS', 'MAILCHECK', 'PATH', - 'PS1', or 'PS2' variables to be unset. + • The SVR4.2 shell does not allow the ‘IFS’, ‘MAILCHECK’, ‘PATH’, + ‘PS1’, or ‘PS2’ variables to be unset. - * The SVR4.2 shell treats '^' as the undocumented equivalent of '|'. + • The SVR4.2 shell treats ‘^’ as the undocumented equivalent of ‘|’. - * Bash allows multiple option arguments when it is invoked ('-x -v'); - the SVR4.2 shell allows only one option argument ('-xv'). In fact, + • Bash allows multiple option arguments when it is invoked (‘-x -v’); + the SVR4.2 shell allows only one option argument (‘-xv’). In fact, some versions of the shell dump core if the second argument begins - with a '-'. + with a ‘-’. - * The SVR4.2 shell exits a script if any builtin fails; Bash exits a + • The SVR4.2 shell exits a script if any builtin fails; Bash exits a script only if one of the POSIX special builtins fails, and only for certain failures, as enumerated in the POSIX standard. - * The SVR4.2 shell behaves differently when invoked as 'jsh' (it + • The SVR4.2 shell behaves differently when invoked as ‘jsh’ (it turns on job control). + • If the ‘lastpipe’ option is enabled, and job control is not active, + Bash runs the last element of a pipeline in the current shell + execution environment. +  File: bash.info, Node: GNU Free Documentation License, Next: Indexes, Prev: Major Differences From The Bourne Shell, Up: Top @@ -11279,7 +11698,7 @@ Appendix C GNU Free Documentation License Version 1.3, 3 November 2008 - Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies @@ -11288,7 +11707,7 @@ Appendix C GNU Free Documentation License 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to + functional and useful document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the @@ -11778,38 +12197,38 @@ D.1 Index of Shell Builtin Commands [index] * Menu: -* .: Bourne Shell Builtins. - (line 17) * :: Bourne Shell Builtins. (line 11) +* .: Bourne Shell Builtins. + (line 17) * [: Bourne Shell Builtins. - (line 275) + (line 285) * alias: Bash Builtins. (line 11) * bg: Job Control Builtins. (line 7) * bind: Bash Builtins. (line 21) * break: Bourne Shell Builtins. (line 37) -* builtin: Bash Builtins. (line 108) -* caller: Bash Builtins. (line 117) +* builtin: Bash Builtins. (line 119) +* caller: Bash Builtins. (line 128) * cd: Bourne Shell Builtins. (line 45) -* command: Bash Builtins. (line 134) +* command: Bash Builtins. (line 145) * compgen: Programmable Completion Builtins. (line 12) * complete: Programmable Completion Builtins. - (line 30) + (line 36) * compopt: Programmable Completion Builtins. - (line 238) + (line 248) * continue: Bourne Shell Builtins. (line 90) -* declare: Bash Builtins. (line 154) +* declare: Bash Builtins. (line 165) * dirs: Directory Stack Builtins. (line 7) * disown: Job Control Builtins. (line 104) -* echo: Bash Builtins. (line 257) -* enable: Bash Builtins. (line 306) +* echo: Bash Builtins. (line 268) +* enable: Bash Builtins. (line 317) * eval: Bourne Shell Builtins. (line 99) * exec: Bourne Shell Builtins. @@ -11818,59 +12237,63 @@ D.1 Index of Shell Builtin Commands (line 125) * export: Bourne Shell Builtins. (line 132) +* false: Bourne Shell Builtins. + (line 148) * fc: Bash History Builtins. (line 10) * fg: Job Control Builtins. (line 17) * getopts: Bourne Shell Builtins. - (line 148) + (line 153) * hash: Bourne Shell Builtins. - (line 192) -* help: Bash Builtins. (line 342) + (line 197) +* help: Bash Builtins. (line 355) * history: Bash History Builtins. (line 46) * jobs: Job Control Builtins. (line 27) * kill: Job Control Builtins. (line 58) -* let: Bash Builtins. (line 361) -* local: Bash Builtins. (line 369) -* logout: Bash Builtins. (line 385) -* mapfile: Bash Builtins. (line 390) +* let: Bash Builtins. (line 374) +* local: Bash Builtins. (line 382) +* logout: Bash Builtins. (line 399) +* mapfile: Bash Builtins. (line 404) * popd: Directory Stack Builtins. (line 35) -* printf: Bash Builtins. (line 436) +* printf: Bash Builtins. (line 450) * pushd: Directory Stack Builtins. (line 69) * pwd: Bourne Shell Builtins. - (line 212) -* read: Bash Builtins. (line 488) -* readarray: Bash Builtins. (line 585) -* readonly: Bourne Shell Builtins. (line 222) +* read: Bash Builtins. (line 518) +* readarray: Bash Builtins. (line 624) +* readonly: Bourne Shell Builtins. + (line 232) * return: Bourne Shell Builtins. - (line 241) + (line 251) * set: The Set Builtin. (line 11) * shift: Bourne Shell Builtins. - (line 262) + (line 272) * shopt: The Shopt Builtin. (line 9) -* source: Bash Builtins. (line 594) +* source: Bash Builtins. (line 633) * suspend: Job Control Builtins. (line 116) * test: Bourne Shell Builtins. - (line 275) + (line 285) * times: Bourne Shell Builtins. - (line 360) + (line 387) * trap: Bourne Shell Builtins. - (line 366) -* type: Bash Builtins. (line 599) -* typeset: Bash Builtins. (line 631) -* ulimit: Bash Builtins. (line 637) + (line 393) +* true: Bourne Shell Builtins. + (line 455) +* type: Bash Builtins. (line 638) +* typeset: Bash Builtins. (line 676) +* ulimit: Bash Builtins. (line 682) * umask: Bourne Shell Builtins. - (line 415) -* unalias: Bash Builtins. (line 743) + (line 460) +* unalias: Bash Builtins. (line 788) * unset: Bourne Shell Builtins. - (line 433) + (line 478) * wait: Job Control Builtins. (line 76) @@ -11885,9 +12308,9 @@ D.2 Index of Shell Reserved Words * !: Pipelines. (line 9) * [[: Conditional Constructs. - (line 126) + (line 125) * ]]: Conditional Constructs. - (line 126) + (line 125) * {: Command Grouping. (line 21) * }: Command Grouping. (line 21) * case: Conditional Constructs. @@ -11909,7 +12332,7 @@ D.2 Index of Shell Reserved Words * in: Conditional Constructs. (line 28) * select: Conditional Constructs. - (line 84) + (line 83) * then: Conditional Constructs. (line 7) * time: Pipelines. (line 9) @@ -11925,24 +12348,24 @@ D.3 Parameter and Variable Index [index] * Menu: +* _: Bash Variables. (line 13) +* -: Special Parameters. (line 46) * !: Special Parameters. (line 55) +* ?: Special Parameters. (line 42) +* @: Special Parameters. (line 22) +* *: Special Parameters. (line 9) * #: Special Parameters. (line 39) * $: Special Parameters. (line 51) +* $_: Bash Variables. (line 14) +* $-: Special Parameters. (line 47) * $!: Special Parameters. (line 56) +* $?: Special Parameters. (line 43) +* $@: Special Parameters. (line 23) +* $*: Special Parameters. (line 10) * $#: Special Parameters. (line 40) * $$: Special Parameters. (line 52) -* $*: Special Parameters. (line 10) -* $-: Special Parameters. (line 47) * $0: Special Parameters. (line 61) -* $?: Special Parameters. (line 43) -* $@: Special Parameters. (line 23) -* $_: Bash Variables. (line 14) -* *: Special Parameters. (line 9) -* -: Special Parameters. (line 46) * 0: Special Parameters. (line 60) -* ?: Special Parameters. (line 42) -* @: Special Parameters. (line 22) -* _: Bash Variables. (line 13) * active-region-end-color: Readline Init File Syntax. (line 51) * active-region-start-color: Readline Init File Syntax. @@ -11950,212 +12373,217 @@ D.3 Parameter and Variable Index * auto_resume: Job Control Variables. (line 6) * BASH: Bash Variables. (line 23) -* BASHOPTS: Bash Variables. (line 26) -* BASHPID: Bash Variables. (line 35) * BASH_ALIASES: Bash Variables. (line 42) * BASH_ARGC: Bash Variables. (line 51) -* BASH_ARGV: Bash Variables. (line 64) -* BASH_ARGV0: Bash Variables. (line 76) -* BASH_CMDS: Bash Variables. (line 84) -* BASH_COMMAND: Bash Variables. (line 93) -* BASH_COMPAT: Bash Variables. (line 100) -* BASH_ENV: Bash Variables. (line 116) -* BASH_EXECUTION_STRING: Bash Variables. (line 122) -* BASH_LINENO: Bash Variables. (line 125) -* BASH_LOADABLES_PATH: Bash Variables. (line 133) -* BASH_REMATCH: Bash Variables. (line 137) -* BASH_SOURCE: Bash Variables. (line 145) -* BASH_SUBSHELL: Bash Variables. (line 152) -* BASH_VERSINFO: Bash Variables. (line 158) -* BASH_VERSION: Bash Variables. (line 181) -* BASH_XTRACEFD: Bash Variables. (line 184) +* BASH_ARGV: Bash Variables. (line 65) +* BASH_ARGV0: Bash Variables. (line 78) +* BASH_CMDS: Bash Variables. (line 86) +* BASH_COMMAND: Bash Variables. (line 95) +* BASH_COMPAT: Bash Variables. (line 102) +* BASH_ENV: Bash Variables. (line 118) +* BASH_EXECUTION_STRING: Bash Variables. (line 124) +* BASH_LINENO: Bash Variables. (line 127) +* BASH_LOADABLES_PATH: Bash Variables. (line 137) +* BASH_MONOSECONDS: Bash Variables. (line 141) +* BASH_REMATCH: Bash Variables. (line 148) +* BASH_SOURCE: Bash Variables. (line 156) +* BASH_SUBSHELL: Bash Variables. (line 164) +* BASH_TRAPSIG: Bash Variables. (line 170) +* BASH_VERSINFO: Bash Variables. (line 176) +* BASH_VERSION: Bash Variables. (line 199) +* BASH_XTRACEFD: Bash Variables. (line 202) +* BASHOPTS: Bash Variables. (line 26) +* BASHPID: Bash Variables. (line 35) * bell-style: Readline Init File Syntax. (line 64) * bind-tty-special-chars: Readline Init File Syntax. (line 71) * blink-matching-paren: Readline Init File Syntax. - (line 76) + (line 79) * CDPATH: Bourne Shell Variables. (line 9) -* CHILD_MAX: Bash Variables. (line 195) +* CHILD_MAX: Bash Variables. (line 213) * colored-completion-prefix: Readline Init File Syntax. - (line 81) + (line 84) * colored-stats: Readline Init File Syntax. - (line 91) -* COLUMNS: Bash Variables. (line 202) + (line 94) +* COLUMNS: Bash Variables. (line 220) * comment-begin: Readline Init File Syntax. - (line 97) + (line 100) +* COMP_CWORD: Bash Variables. (line 226) +* COMP_KEY: Bash Variables. (line 255) +* COMP_LINE: Bash Variables. (line 232) +* COMP_POINT: Bash Variables. (line 237) +* COMP_TYPE: Bash Variables. (line 245) +* COMP_WORDBREAKS: Bash Variables. (line 259) +* COMP_WORDS: Bash Variables. (line 265) * completion-display-width: Readline Init File Syntax. - (line 102) + (line 105) * completion-ignore-case: Readline Init File Syntax. - (line 109) + (line 112) * completion-map-case: Readline Init File Syntax. - (line 114) + (line 117) * completion-prefix-display-length: Readline Init File Syntax. - (line 120) + (line 123) * completion-query-items: Readline Init File Syntax. - (line 127) -* COMPREPLY: Bash Variables. (line 254) -* COMP_CWORD: Bash Variables. (line 208) -* COMP_KEY: Bash Variables. (line 237) -* COMP_LINE: Bash Variables. (line 214) -* COMP_POINT: Bash Variables. (line 219) -* COMP_TYPE: Bash Variables. (line 227) -* COMP_WORDBREAKS: Bash Variables. (line 241) -* COMP_WORDS: Bash Variables. (line 247) + (line 130) +* COMPREPLY: Bash Variables. (line 272) * convert-meta: Readline Init File Syntax. - (line 138) -* COPROC: Bash Variables. (line 260) -* DIRSTACK: Bash Variables. (line 264) + (line 141) +* COPROC: Bash Variables. (line 278) +* DIRSTACK: Bash Variables. (line 282) * disable-completion: Readline Init File Syntax. - (line 148) + (line 151) * echo-control-characters: Readline Init File Syntax. - (line 153) + (line 156) * editing-mode: Readline Init File Syntax. - (line 158) -* EMACS: Bash Variables. (line 274) + (line 161) +* EMACS: Bash Variables. (line 292) * emacs-mode-string: Readline Init File Syntax. - (line 164) + (line 167) * enable-active-region: Readline Init File Syntax. - (line 174) + (line 177) * enable-bracketed-paste: Readline Init File Syntax. - (line 187) + (line 190) * enable-keypad: Readline Init File Syntax. - (line 196) -* ENV: Bash Variables. (line 279) -* EPOCHREALTIME: Bash Variables. (line 284) -* EPOCHSECONDS: Bash Variables. (line 292) -* EUID: Bash Variables. (line 299) -* EXECIGNORE: Bash Variables. (line 303) + (line 199) +* ENV: Bash Variables. (line 297) +* EPOCHREALTIME: Bash Variables. (line 302) +* EPOCHSECONDS: Bash Variables. (line 310) +* EUID: Bash Variables. (line 317) +* EXECIGNORE: Bash Variables. (line 321) * expand-tilde: Readline Init File Syntax. - (line 207) -* FCEDIT: Bash Variables. (line 316) -* FIGNORE: Bash Variables. (line 320) -* FUNCNAME: Bash Variables. (line 326) -* FUNCNEST: Bash Variables. (line 343) -* GLOBIGNORE: Bash Variables. (line 348) -* GROUPS: Bash Variables. (line 355) -* histchars: Bash Variables. (line 361) -* HISTCMD: Bash Variables. (line 376) -* HISTCONTROL: Bash Variables. (line 382) -* HISTFILE: Bash Variables. (line 398) -* HISTFILESIZE: Bash Variables. (line 402) -* HISTIGNORE: Bash Variables. (line 413) + (line 210) +* FCEDIT: Bash Variables. (line 334) +* FIGNORE: Bash Variables. (line 338) +* FUNCNAME: Bash Variables. (line 344) +* FUNCNEST: Bash Variables. (line 361) +* GLOBIGNORE: Bash Variables. (line 366) +* GLOBSORT: Bash Variables. (line 373) +* GROUPS: Bash Variables. (line 399) +* histchars: Bash Variables. (line 405) +* HISTCMD: Bash Variables. (line 420) +* HISTCONTROL: Bash Variables. (line 426) +* HISTFILE: Bash Variables. (line 442) +* HISTFILESIZE: Bash Variables. (line 447) +* HISTIGNORE: Bash Variables. (line 458) * history-preserve-point: Readline Init File Syntax. - (line 211) + (line 214) * history-size: Readline Init File Syntax. - (line 217) -* HISTSIZE: Bash Variables. (line 433) -* HISTTIMEFORMAT: Bash Variables. (line 440) + (line 220) +* HISTSIZE: Bash Variables. (line 480) +* HISTTIMEFORMAT: Bash Variables. (line 487) * HOME: Bourne Shell Variables. (line 13) * horizontal-scroll-mode: Readline Init File Syntax. - (line 226) -* HOSTFILE: Bash Variables. (line 448) -* HOSTNAME: Bash Variables. (line 459) -* HOSTTYPE: Bash Variables. (line 462) + (line 229) +* HOSTFILE: Bash Variables. (line 496) +* HOSTNAME: Bash Variables. (line 507) +* HOSTTYPE: Bash Variables. (line 510) * IFS: Bourne Shell Variables. (line 18) -* IGNOREEOF: Bash Variables. (line 465) +* IGNOREEOF: Bash Variables. (line 513) * input-meta: Readline Init File Syntax. - (line 235) -* INPUTRC: Bash Variables. (line 475) -* INSIDE_EMACS: Bash Variables. (line 479) + (line 238) +* INPUTRC: Bash Variables. (line 523) +* INSIDE_EMACS: Bash Variables. (line 527) * isearch-terminators: Readline Init File Syntax. - (line 245) + (line 248) * keymap: Readline Init File Syntax. - (line 252) + (line 255) * LANG: Creating Internationalized Scripts. (line 51) -* LANG <1>: Bash Variables. (line 485) -* LC_ALL: Bash Variables. (line 489) -* LC_COLLATE: Bash Variables. (line 493) -* LC_CTYPE: Bash Variables. (line 500) +* LANG <1>: Bash Variables. (line 533) +* LC_ALL: Bash Variables. (line 537) +* LC_COLLATE: Bash Variables. (line 541) +* LC_CTYPE: Bash Variables. (line 548) * LC_MESSAGES: Creating Internationalized Scripts. (line 51) -* LC_MESSAGES <1>: Bash Variables. (line 505) -* LC_NUMERIC: Bash Variables. (line 509) -* LC_TIME: Bash Variables. (line 513) -* LINENO: Bash Variables. (line 517) -* LINES: Bash Variables. (line 522) -* MACHTYPE: Bash Variables. (line 528) +* LC_MESSAGES <1>: Bash Variables. (line 553) +* LC_NUMERIC: Bash Variables. (line 557) +* LC_TIME: Bash Variables. (line 561) +* LINENO: Bash Variables. (line 565) +* LINES: Bash Variables. (line 570) +* MACHTYPE: Bash Variables. (line 576) * MAIL: Bourne Shell Variables. (line 22) -* MAILCHECK: Bash Variables. (line 532) +* MAILCHECK: Bash Variables. (line 580) * MAILPATH: Bourne Shell Variables. (line 27) -* MAPFILE: Bash Variables. (line 540) +* MAPFILE: Bash Variables. (line 588) * mark-modified-lines: Readline Init File Syntax. - (line 282) + (line 285) * mark-symlinked-directories: Readline Init File Syntax. - (line 287) + (line 290) * match-hidden-files: Readline Init File Syntax. - (line 292) + (line 295) * menu-complete-display-prefix: Readline Init File Syntax. - (line 299) + (line 302) * meta-flag: Readline Init File Syntax. - (line 235) -* OLDPWD: Bash Variables. (line 544) + (line 238) +* OLDPWD: Bash Variables. (line 592) * OPTARG: Bourne Shell Variables. (line 34) -* OPTERR: Bash Variables. (line 547) +* OPTERR: Bash Variables. (line 595) * OPTIND: Bourne Shell Variables. (line 38) -* OSTYPE: Bash Variables. (line 551) +* OSTYPE: Bash Variables. (line 599) * output-meta: Readline Init File Syntax. - (line 304) + (line 307) * page-completions: Readline Init File Syntax. - (line 312) + (line 315) * PATH: Bourne Shell Variables. (line 42) -* PIPESTATUS: Bash Variables. (line 554) -* POSIXLY_CORRECT: Bash Variables. (line 559) -* PPID: Bash Variables. (line 569) -* PROMPT_COMMAND: Bash Variables. (line 573) -* PROMPT_DIRTRIM: Bash Variables. (line 579) -* PS0: Bash Variables. (line 585) +* PIPESTATUS: Bash Variables. (line 602) +* POSIXLY_CORRECT: Bash Variables. (line 607) +* PPID: Bash Variables. (line 617) +* PROMPT_COMMAND: Bash Variables. (line 621) +* PROMPT_DIRTRIM: Bash Variables. (line 627) +* PS0: Bash Variables. (line 633) * PS1: Bourne Shell Variables. (line 48) * PS2: Bourne Shell Variables. (line 53) -* PS3: Bash Variables. (line 590) -* PS4: Bash Variables. (line 595) -* PWD: Bash Variables. (line 603) -* RANDOM: Bash Variables. (line 606) -* READLINE_ARGUMENT: Bash Variables. (line 612) -* READLINE_LINE: Bash Variables. (line 616) -* READLINE_MARK: Bash Variables. (line 620) -* READLINE_POINT: Bash Variables. (line 626) -* REPLY: Bash Variables. (line 630) +* PS3: Bash Variables. (line 638) +* PS4: Bash Variables. (line 643) +* PWD: Bash Variables. (line 651) +* RANDOM: Bash Variables. (line 654) +* READLINE_ARGUMENT: Bash Variables. (line 660) +* READLINE_LINE: Bash Variables. (line 664) +* READLINE_MARK: Bash Variables. (line 668) +* READLINE_POINT: Bash Variables. (line 674) +* REPLY: Bash Variables. (line 678) * revert-all-at-newline: Readline Init File Syntax. - (line 322) -* SECONDS: Bash Variables. (line 633) -* SHELL: Bash Variables. (line 642) -* SHELLOPTS: Bash Variables. (line 647) -* SHLVL: Bash Variables. (line 656) + (line 325) +* search-ignore-case: Readline Init File Syntax. + (line 332) +* SECONDS: Bash Variables. (line 681) +* SHELL: Bash Variables. (line 690) +* SHELLOPTS: Bash Variables. (line 695) +* SHLVL: Bash Variables. (line 704) * show-all-if-ambiguous: Readline Init File Syntax. - (line 329) + (line 337) * show-all-if-unmodified: Readline Init File Syntax. - (line 335) + (line 343) * show-mode-in-prompt: Readline Init File Syntax. - (line 344) + (line 352) * skip-completed-text: Readline Init File Syntax. - (line 350) -* SRANDOM: Bash Variables. (line 661) + (line 358) +* SRANDOM: Bash Variables. (line 709) * TEXTDOMAIN: Creating Internationalized Scripts. (line 51) * TEXTDOMAINDIR: Creating Internationalized Scripts. (line 51) -* TIMEFORMAT: Bash Variables. (line 670) -* TMOUT: Bash Variables. (line 708) -* TMPDIR: Bash Variables. (line 720) -* UID: Bash Variables. (line 724) +* TIMEFORMAT: Bash Variables. (line 718) +* TMOUT: Bash Variables. (line 756) +* TMPDIR: Bash Variables. (line 768) +* UID: Bash Variables. (line 772) * vi-cmd-mode-string: Readline Init File Syntax. - (line 363) + (line 371) * vi-ins-mode-string: Readline Init File Syntax. - (line 374) + (line 382) * visible-stats: Readline Init File Syntax. - (line 385) + (line 393)  File: bash.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Indexes @@ -12171,7 +12599,7 @@ D.4 Function Index * accept-line (Newline or Return): Commands For History. (line 6) * alias-expand-line (): Miscellaneous Commands. - (line 131) + (line 133) * backward-char (C-b): Commands For Moving. (line 15) * backward-delete-char (Rubout): Commands For Text. (line 17) * backward-kill-line (C-x Rubout): Commands For Killing. @@ -12184,7 +12612,7 @@ D.4 Function Index * beginning-of-line (C-a): Commands For Moving. (line 6) * bracketed-paste-begin (): Commands For Text. (line 33) * call-last-kbd-macro (C-x e): Keyboard Macros. (line 13) -* capitalize-word (M-c): Commands For Text. (line 66) +* capitalize-word (M-c): Commands For Text. (line 73) * character-search (C-]): Miscellaneous Commands. (line 42) * character-search-backward (M-C-]): Miscellaneous Commands. @@ -12206,24 +12634,24 @@ D.4 Function Index * complete-variable (M-$): Commands For Completion. (line 64) * copy-backward-word (): Commands For Killing. - (line 69) + (line 62) * copy-forward-word (): Commands For Killing. - (line 74) + (line 67) * copy-region-as-kill (): Commands For Killing. - (line 65) + (line 58) * dabbrev-expand (): Commands For Completion. (line 95) * delete-char (C-d): Commands For Text. (line 12) * delete-char-or-list (): Commands For Completion. (line 43) * delete-horizontal-space (): Commands For Killing. - (line 57) + (line 50) * digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6) * display-shell-version (C-x C-v): Miscellaneous Commands. (line 116) * do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands. (line 14) -* downcase-word (M-l): Commands For Text. (line 62) +* downcase-word (M-l): Commands For Text. (line 69) * dump-functions (): Miscellaneous Commands. (line 74) * dump-macros (): Miscellaneous Commands. @@ -12233,7 +12661,7 @@ D.4 Function Index * dynamic-complete-history (M-): Commands For Completion. (line 90) * edit-and-execute-command (C-x C-e): Miscellaneous Commands. - (line 140) + (line 142) * end-kbd-macro (C-x )): Keyboard Macros. (line 9) * end-of-file (usually C-d): Commands For Text. (line 6) * end-of-history (M->): Commands For History. @@ -12241,6 +12669,8 @@ D.4 Function Index * end-of-line (C-e): Commands For Moving. (line 9) * exchange-point-and-mark (C-x C-x): Miscellaneous Commands. (line 37) +* execute-named-command (M-x): Miscellaneous Commands. + (line 147) * fetch-history (): Commands For History. (line 103) * forward-backward-delete-char (): Commands For Text. (line 21) @@ -12255,9 +12685,9 @@ D.4 Function Index * glob-list-expansions (C-x g): Miscellaneous Commands. (line 110) * history-and-alias-expand-line (): Miscellaneous Commands. - (line 134) + (line 136) * history-expand-line (M-^): Miscellaneous Commands. - (line 124) + (line 126) * history-search-backward (): Commands For History. (line 57) * history-search-forward (): Commands For History. @@ -12271,17 +12701,17 @@ D.4 Function Index * insert-completions (M-*): Commands For Completion. (line 22) * insert-last-argument (M-. or M-_): Miscellaneous Commands. - (line 137) + (line 139) * kill-line (C-k): Commands For Killing. (line 6) * kill-region (): Commands For Killing. - (line 61) + (line 54) * kill-whole-line (): Commands For Killing. (line 19) * kill-word (M-d): Commands For Killing. (line 23) * magic-space (): Miscellaneous Commands. - (line 127) + (line 129) * menu-complete (): Commands For Completion. (line 26) * menu-complete-backward (): Commands For Completion. @@ -12295,7 +12725,7 @@ D.4 Function Index (line 39) * operate-and-get-next (C-o): Commands For History. (line 96) -* overwrite-mode (): Commands For Text. (line 70) +* overwrite-mode (): Commands For Text. (line 77) * possible-command-completions (C-x !): Commands For Completion. (line 86) * possible-completions (M-?): Commands For Completion. @@ -12333,8 +12763,7 @@ D.4 Function Index * shell-forward-word (M-C-f): Commands For Moving. (line 26) * shell-kill-word (M-C-d): Commands For Killing. (line 32) -* shell-transpose-words (M-C-t): Commands For Killing. - (line 41) +* shell-transpose-words (M-C-t): Commands For Text. (line 58) * skip-csi-sequence (): Miscellaneous Commands. (line 52) * spell-correct-word (C-x s): Miscellaneous Commands. @@ -12348,20 +12777,20 @@ D.4 Function Index (line 23) * universal-argument (): Numeric Arguments. (line 10) * unix-filename-rubout (): Commands For Killing. - (line 52) + (line 45) * unix-line-discard (C-u): Commands For Killing. (line 16) * unix-word-rubout (C-w): Commands For Killing. - (line 48) -* upcase-word (M-u): Commands For Text. (line 58) + (line 41) +* upcase-word (M-u): Commands For Text. (line 65) * yank (C-y): Commands For Killing. - (line 79) + (line 72) * yank-last-arg (M-. or M-_): Commands For History. (line 84) * yank-nth-arg (M-C-y): Commands For History. (line 75) * yank-pop (M-y): Commands For Killing. - (line 82) + (line 75)  File: bash.info, Node: Concept Index, Prev: Function Index, Up: Indexes @@ -12376,11 +12805,14 @@ D.5 Concept Index * arithmetic evaluation: Shell Arithmetic. (line 6) * arithmetic expansion: Arithmetic Expansion. (line 6) +* arithmetic operators: Shell Arithmetic. (line 17) * arithmetic, shell: Shell Arithmetic. (line 6) * arrays: Arrays. (line 6) * background: Job Control Basics. (line 6) * Bash configuration: Basic Installation. (line 6) * Bash installation: Basic Installation. (line 6) +* binary arithmetic operators: Shell Arithmetic. (line 17) +* bitwise arithmetic operators: Shell Arithmetic. (line 17) * Bourne shell: Basic Shell Features. (line 6) * brace expansion: Brace Expansion. (line 6) @@ -12414,6 +12846,7 @@ D.5 Concept Index (line 6) * completion builtins: Programmable Completion Builtins. (line 6) +* conditional arithmetic operator: Shell Arithmetic. (line 17) * configuration: Basic Installation. (line 6) * control operator: Definitions. (line 21) * coprocess: Coprocesses. (line 6) @@ -12446,7 +12879,7 @@ D.5 Concept Index * functions, shell: Shell Functions. (line 6) * history builtins: Bash History Builtins. (line 6) -* history events: Event Designators. (line 8) +* history events: Event Designators. (line 11) * history expansion: History Interaction. (line 6) * history list: Bash History Facilities. (line 6) @@ -12457,7 +12890,7 @@ D.5 Concept Index * installation: Basic Installation. (line 6) * interaction, readline: Readline Interaction. (line 6) -* interactive shell: Invoking Bash. (line 131) +* interactive shell: Invoking Bash. (line 136) * interactive shell <1>: Interactive Shells. (line 6) * internationalization: Locale Translation. (line 6) * internationalized scripts: Creating Internationalized Scripts. @@ -12470,7 +12903,7 @@ D.5 Concept Index * killing text: Readline Killing Commands. (line 6) * localization: Locale Translation. (line 6) -* login shell: Invoking Bash. (line 128) +* login shell: Invoking Bash. (line 133) * matching, pattern: Pattern Matching. (line 6) * metacharacter: Definitions. (line 46) * name: Definitions. (line 51) @@ -12488,7 +12921,8 @@ D.5 Concept Index * pattern matching: Pattern Matching. (line 6) * pipeline: Pipelines. (line 6) * POSIX: Definitions. (line 9) -* POSIX Mode: Bash POSIX Mode. (line 6) +* POSIX description: Bash POSIX Mode. (line 9) +* POSIX Mode: Bash POSIX Mode. (line 48) * process group: Definitions. (line 62) * process group ID: Definitions. (line 66) * process substitution: Process Substitution. @@ -12523,6 +12957,7 @@ D.5 Concept Index * tilde expansion: Tilde Expansion. (line 6) * token: Definitions. (line 86) * translation, native languages: Locale Translation. (line 6) +* unary arithmetic operators: Shell Arithmetic. (line 17) * variable, shell: Shell Parameters. (line 6) * variables, readline: Readline Init File Syntax. (line 37) @@ -12534,138 +12969,138 @@ D.5 Concept Index  Tag Table: -Node: Top896 -Node: Introduction2815 -Node: What is Bash?3028 -Node: What is a shell?4139 -Node: Definitions6674 -Node: Basic Shell Features9622 -Node: Shell Syntax10838 -Node: Shell Operation11861 -Node: Quoting13151 -Node: Escape Character14452 -Node: Single Quotes14934 -Node: Double Quotes15279 -Node: ANSI-C Quoting16554 -Node: Locale Translation17861 -Node: Creating Internationalized Scripts19169 -Node: Comments23283 -Node: Shell Commands23898 -Node: Reserved Words24833 -Node: Simple Commands25586 -Node: Pipelines26237 -Node: Lists29233 -Node: Compound Commands31025 -Node: Looping Constructs32034 -Node: Conditional Constructs34526 -Node: Command Grouping49011 -Node: Coprocesses50486 -Node: GNU Parallel53146 -Node: Shell Functions54060 -Node: Shell Parameters61942 -Node: Positional Parameters66327 -Node: Special Parameters67226 -Node: Shell Expansions70437 -Node: Brace Expansion72561 -Node: Tilde Expansion75292 -Node: Shell Parameter Expansion77910 -Node: Command Substitution96258 -Node: Arithmetic Expansion97610 -Node: Process Substitution98575 -Node: Word Splitting99692 -Node: Filename Expansion101633 -Node: Pattern Matching104379 -Node: Quote Removal109378 -Node: Redirections109670 -Node: Executing Commands119327 -Node: Simple Command Expansion119994 -Node: Command Search and Execution122101 -Node: Command Execution Environment124476 -Node: Environment127508 -Node: Exit Status129168 -Node: Signals130949 -Node: Shell Scripts134395 -Node: Shell Builtin Commands137419 -Node: Bourne Shell Builtins139454 -Node: Bash Builtins160917 -Node: Modifying Shell Behavior191770 -Node: The Set Builtin192112 -Node: The Shopt Builtin202710 -Node: Special Builtins218619 -Node: Shell Variables219595 -Node: Bourne Shell Variables220029 -Node: Bash Variables222130 -Node: Bash Features254942 -Node: Invoking Bash255952 -Node: Bash Startup Files261962 -Node: Interactive Shells267090 -Node: What is an Interactive Shell?267498 -Node: Is this Shell Interactive?268144 -Node: Interactive Shell Behavior268956 -Node: Bash Conditional Expressions272582 -Node: Shell Arithmetic277221 -Node: Aliases280162 -Node: Arrays282772 -Node: The Directory Stack289160 -Node: Directory Stack Builtins289941 -Node: Controlling the Prompt294198 -Node: The Restricted Shell297160 -Node: Bash POSIX Mode299767 -Node: Shell Compatibility Mode311682 -Node: Job Control320246 -Node: Job Control Basics320703 -Node: Job Control Builtins325702 -Node: Job Control Variables331494 -Node: Command Line Editing332647 -Node: Introduction and Notation334315 -Node: Readline Interaction335935 -Node: Readline Bare Essentials337123 -Node: Readline Movement Commands338909 -Node: Readline Killing Commands339866 -Node: Readline Arguments341784 -Node: Searching342825 -Node: Readline Init File345008 -Node: Readline Init File Syntax346266 -Node: Conditional Init Constructs369849 -Node: Sample Init File374042 -Node: Bindable Readline Commands377163 -Node: Commands For Moving378364 -Node: Commands For History380412 -Node: Commands For Text385403 -Node: Commands For Killing389049 -Node: Numeric Arguments392079 -Node: Commands For Completion393215 -Node: Keyboard Macros397403 -Node: Miscellaneous Commands398088 -Node: Readline vi Mode404030 -Node: Programmable Completion404934 -Node: Programmable Completion Builtins412711 -Node: A Programmable Completion Example423460 -Node: Using History Interactively428705 -Node: Bash History Facilities429386 -Node: Bash History Builtins432388 -Node: History Interaction437409 -Node: Event Designators441026 -Node: Word Designators442377 -Node: Modifiers444134 -Node: Installing Bash445939 -Node: Basic Installation447073 -Node: Compilers and Options450792 -Node: Compiling For Multiple Architectures451530 -Node: Installation Names453219 -Node: Specifying the System Type455325 -Node: Sharing Defaults456039 -Node: Operation Controls456709 -Node: Optional Features457664 -Node: Reporting Bugs468880 -Node: Major Differences From The Bourne Shell470152 -Node: GNU Free Documentation License486998 -Node: Indexes512172 -Node: Builtin Index512623 -Node: Reserved Word Index519447 -Node: Variable Index521892 -Node: Function Index538663 -Node: Concept Index552444 +Node: Top893 +Node: Introduction2826 +Node: What is Bash?3039 +Node: What is a shell?4180 +Node: Definitions6759 +Node: Basic Shell Features9935 +Node: Shell Syntax11155 +Node: Shell Operation12182 +Node: Quoting13480 +Node: Escape Character14793 +Node: Single Quotes15291 +Node: Double Quotes15640 +Node: ANSI-C Quoting16983 +Node: Locale Translation18368 +Node: Creating Internationalized Scripts19712 +Node: Comments23910 +Node: Shell Commands24545 +Node: Reserved Words25484 +Node: Simple Commands26349 +Node: Pipelines27008 +Node: Lists30071 +Node: Compound Commands31943 +Node: Looping Constructs32952 +Node: Conditional Constructs35496 +Node: Command Grouping50400 +Node: Coprocesses51887 +Node: GNU Parallel54583 +Node: Shell Functions55501 +Node: Shell Parameters63607 +Node: Positional Parameters68140 +Node: Special Parameters69075 +Node: Shell Expansions72382 +Node: Brace Expansion74571 +Node: Tilde Expansion77234 +Node: Shell Parameter Expansion80000 +Node: Command Substitution99107 +Node: Arithmetic Expansion102640 +Node: Process Substitution103605 +Node: Word Splitting104742 +Node: Filename Expansion106883 +Node: Pattern Matching109979 +Node: Quote Removal115212 +Node: Redirections115516 +Node: Executing Commands125325 +Node: Simple Command Expansion125992 +Node: Command Search and Execution128103 +Node: Command Execution Environment130511 +Node: Environment133820 +Node: Exit Status135524 +Node: Signals137309 +Node: Shell Scripts140923 +Node: Shell Builtin Commands144015 +Node: Bourne Shell Builtins146126 +Node: Bash Builtins170530 +Node: Modifying Shell Behavior205135 +Node: The Set Builtin205477 +Node: The Shopt Builtin216992 +Node: Special Builtins233728 +Node: Shell Variables234717 +Node: Bourne Shell Variables235151 +Node: Bash Variables237344 +Node: Bash Features273894 +Node: Invoking Bash274908 +Node: Bash Startup Files281307 +Node: Interactive Shells286619 +Node: What is an Interactive Shell?287027 +Node: Is this Shell Interactive?287693 +Node: Interactive Shell Behavior288517 +Node: Bash Conditional Expressions292271 +Node: Shell Arithmetic297445 +Node: Aliases300527 +Node: Arrays303482 +Node: The Directory Stack310281 +Node: Directory Stack Builtins311078 +Node: Controlling the Prompt315527 +Node: The Restricted Shell318665 +Node: Bash POSIX Mode321452 +Node: Shell Compatibility Mode338963 +Node: Job Control347647 +Node: Job Control Basics348104 +Node: Job Control Builtins353278 +Node: Job Control Variables359238 +Node: Command Line Editing360415 +Node: Introduction and Notation362119 +Node: Readline Interaction363763 +Node: Readline Bare Essentials364951 +Node: Readline Movement Commands366769 +Node: Readline Killing Commands367766 +Node: Readline Arguments369744 +Node: Searching370801 +Node: Readline Init File373030 +Node: Readline Init File Syntax374312 +Node: Conditional Init Constructs399250 +Node: Sample Init File403615 +Node: Bindable Readline Commands406736 +Node: Commands For Moving407961 +Node: Commands For History410061 +Node: Commands For Text415144 +Node: Commands For Killing419219 +Node: Numeric Arguments422020 +Node: Commands For Completion423172 +Node: Keyboard Macros427488 +Node: Miscellaneous Commands428189 +Node: Readline vi Mode434843 +Node: Programmable Completion435795 +Node: Programmable Completion Builtins443752 +Node: A Programmable Completion Example455318 +Node: Using History Interactively460663 +Node: Bash History Facilities461344 +Node: Bash History Builtins464456 +Node: History Interaction469699 +Node: Event Designators474024 +Node: Word Designators475607 +Node: Modifiers477593 +Node: Installing Bash479502 +Node: Basic Installation480636 +Node: Compilers and Options484515 +Node: Compiling For Multiple Architectures485265 +Node: Installation Names487014 +Node: Specifying the System Type489248 +Node: Sharing Defaults489994 +Node: Operation Controls490708 +Node: Optional Features491727 +Node: Reporting Bugs503529 +Node: Major Differences From The Bourne Shell504878 +Node: GNU Free Documentation License524613 +Node: Indexes549790 +Node: Builtin Index550241 +Node: Reserved Word Index557339 +Node: Variable Index559784 +Node: Function Index576915 +Node: Concept Index590771  End Tag Table diff --git a/doc/bash.pdf b/doc/bash.pdf index b8f7dd695208cfe0557f3ac8ce57cc3521efe62a..099b3b11ef8cf781a034d7b790da0d8a09684bb8 100644 GIT binary patch literal 409790 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 z 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 literal 401989 zc-oA*LvSw8+F%{qwr$(CZQHhO+qRvY*gmnHym4}3=fB<6-T&ZDzS*u-PwmOxleOw0 zR}zz;XJ+7pA)mNTEP){>mv-=QG&Od!c68t&vUDY)cU2Nr5?4``))D8oGk0?{cli$z z6W5Ry73X&{v+#7Wb~7iUH&akl5>{6g|IbN8SWQ&wKQoH%ZcgrQ64rL+{DMS+FziH3 zM2;plFnoNBa^?<}ZdODb{~;=j{~7pScQQ)Y8M~Q_nVUMAnF|QOxVpKR8{5Np<&EiV zyKGM)`>$)xjtB&4BgbOzq*7{Y*im$xXt~korrE-R3B%YT6*)K8)vNUn3Z_8*nDzi5 zjD$AlHEL8E^fSSYDtZA=7t8z~Qh2#2kiU}y%ir0e9+rd)RKL{8f#tprcHSJGcI%Wg zPuG>5!~)t53!|E8VR2yvk{O?@SDRyY@3eIwcgpK8yIdih8MtqfR;pg7hqFEY-j;uR zvAvViwe!*51ma0^yN~1}2i&x8UZuOOC$Gw`M`gEwBo6Hj`@T;iY;fPnOPibcA+~Qe zBp(3rvyq{~JdH@$5_W zNLhC6<>Hz8W*=p(n%G@tMg60TA+Ui3}RvHsi zb^UJX#S_;SD%DS2V4nbY-*=CH7TsOl0W1;=70eF@Wc)PE<`cy;|G*K*PQ9?twi50p zSaQyIns2Bl=ZO0tnf&z4#3XXiq`R+D^d%lz<}O9^hkl8Hq-9y6g=m_tlz5A5$``UF z^z2%x68PSUZno-_V>!#_Q{Xq(RtqNDtPdll{~W@$5`|cO(14KmK0GY8m(`4MLK6(| zdvJ(Ys>8^Ko`obg!-%V}p}(bTJQvrXventP*lQ-)XSC_V|7ui7Yw{=Cq|p=r;b!aH zG^!VxuUG`{RWM9Q461T2UBEHKPK2u8bSb{dK6X*n%|026fN-45vncR^aJv8aF_j99 z82ea*9;JR(rZ(#HUd|2VVnZ^$;!Pk7djZ|29+Vp((cXX1sU3)CrRUm-ZpGBGavinN zbgIKUSxff|qHPM$>K5pgZMm%Mn7~1qJnQFTdgqRG4|yXPYU}CiCv*PiaRZ^OrgkM4 zZ4k6`0;R{6JTZPxG(b@5JoIuE{K^HwV*ClWG&FM3&QZ9Y%puQJ7+iYKKskerIW{wv zWi;C=&qIZ+{2h@Fapws-6_as^I8mOQfQwUvt%HPP?F#lN-BV07T$zxiJIqwe@yBtl z!73&YIkZ#P-i?v8LK}j9t?;OtazS-bfW z+_EBLAafw>7LTw&*Ee8 zwHH+pIPPgCLoSCIYa!5I=Nv( zGXP_><@s_HHMak;Vv++=;BlJd|4F>qkl$A(kO+o4J_0iu8VI84%aJWQcNwlSlvGNC z0{wvcYeOVB@4VZ>XiWt^Zhj-X+g4UL-TlQ;{q8JrK(0=;^G}ZzCODQxp^)pE$d$;* zi6MDDIGAJ@;KV|QHL?rYC7A%$Va|BZzHV{EP9+(@h}dy+jwWPM1$D1Z4DyQYm39An zubz}+FlhCg5tZr$HQbCILd@z1%YVNY?Yj@hxY*}(4UX5lzFz*gw+N*;?To%qlN9Q& zbU}oxXANJVv&8n^Fv|flL3eM@xyIG8HEo1SW$w@OeSn2z>>+1*(?gj84O_Ef^u?_y z3G7s00B9zl4*wDEfK-p4q7cPRNLfXVYq~UzjU@UWG6^x_Rf7kFmk~h{z3^YQj~C4O zCvF+f)}8+OhyYEH1fB=3yC1*+UmF34p?wKQwu+o#(y0u;^lTBy7J%BGQEP7IDFmMq zS}@}!-+dGnhhHK6scR5EzG+-9I1do{2?q~Rb-T^&613nwkdfL-9#7y@u^%x>m(4Y~?|8;8)dA{Rsop zhso8`L0lg)x{dX*i0?tYtfYEQax&7X**Vi0J9E0~dj8&M@Q1|*<-9u!*FVsVRLJw> zIoZCTW)G^PQO!}(7R(ho&S^G__s-P5Ul3Nobm8@#e$r_?Q@(!GbOfBs&^31wF zGanp@IkURtB6;R%+B<7AX#?3N#@HfJy?fD%5KKJQ8mMK<3JM7bi@gE3{wr0{XwvBi z?Yz&atYEOA6e9!&G+Z}IV&G3>t%E0`{sFOIR{l?(h(Dgwi7PQKl?Ts7HQyhq2vl|) zW_v57>O<++XBZL08^z9u+jCP*V@NVLXi3E!W6z!dHW@Q8{W=HmK&((^kZ(E2jgr>#E zybguw3Z$EcTl1xc24yOA^&B+pGg<9+iO3mcd@?)4k-koW-rke&#Mf>zoFVQz0M8 zz*;s=wKO)Hg*?@EPa9#O(jI22!0Ng+`+JNJSIg333+&nGjq_i*poe-7 z^Pg?8{V1hA9^D^f@Z=q{E9|l41j%}bPSC-G-uu7hVpQSx;_xPJk){BhJ+?YaAZ`J_ zvsj}ZV1{yP6;NC2h({%UQD2$dLl2N{y|UzDKpzc|{Ca&9x50CC`4D;q>`+T4Ef>}b zi;MXxISnOKoXJ?Y!b5A{n26%yM${3Ly5?ej-id?~JE-XPZPV|jX0Du7(Or*Eah2nf z73t?rjcJrNRBv`DrOooj;-E`_Rg^p#d*y(gpUzrv!L{qZv^rgB{mMvCE(~67JfV8# zq96HAK|I7&We#?Uk;R!y+EhX(zkh;9k$}+P4DKKG9ru0#KoXnhwpeIM zPR9qcpSy{N6>qr;aD*r;Pa^@cZ)1}VxI0&3+n_RDJmFepwzIC{v(Y}C-^&RAp1MuU zlF>H$*fCv_QsI#wQxDgf`5poBON7-+kj|%tqTpTQ)~V|^FWp3G-(wKIs-L0VmS?uW zyf+1G4G`B?f6ntOv1Xz7yQfo5Rj;@p#w#8+iuFF{vDZwKV8kV1gyK!av5S9q$c)5; zCtnW6gt<&htruZS&!H;=oJIlKyQ9dH!pJxtl47vHY~Z)q@qKSWH!+?Hl6JLrs!4!6 zRe40kdN*uIgQF7|FQS95qQW52$j7^eATa7c@!=#g){QX_cFzYTVA~k&`}UnYb>Q2F{GzF7R-M{}liV5smH z=rWuS*4)AD|0v#nPX9{_IsT6xva++W|6j)Z-_FSVKa$3Fon4n>j*R|S)q9f~5&KQM z5F)9gmQ-i*Kj{}{ThnqiC-u}iCAvGwQsHISFM8LgC+Z*gue?A|L1`zq@^c!78}=cC zL+|hNp7V!}!g$R@6@g~}pFng-!p4AJlgq~7_vSsweTGJdqo`P;?tY&~;!4Vy3EFQA z*ax!7Wj3wb#$m^OhK%2M{icL}Qcl`NV=ke;C&(iyfZF@p$j_u*#*n+(ipy#Iddrq5 zlm^Xlo4=kn0frp80&lXLc+VuXLc>iu=c|~Ac!|Z8jsjAo|KxE1$&(?t1=Zq(f_Gbq z?xmRV>%*8zXj3yQtetYtY z^d)Uk$IbvN3eMPLs*EJsSQt|8WsO{)s@z1(@?Te6wi_h8Pa3Qa_51Hn!&!Z;Vt8%` z!!qUhqtU!w^%o8Cv|PcAT>V|O9METDr1Fp)E~j*_M%Ctgj&OuA{-%7XNzg<{<%zLb=yrf+{u z`XAf(LQ8b;)fT<({J&W#12x1BmF58#kv4&kdXD#>N**KskQO6kpvK3YsLaU1{vOfz zsls1zA`#1zYDYcgL0J=wVRI%BcIYe7Xv&cYKL}wj!Ypid9n1DgfyK6v_~ET6G$TNY zY1m-=Rflm$kMghT>9?1$>J2VU>-{i1RqBL~-divmkbWRJTBlEy9Jm zrkSTvKA^`$TyNE1u8JBvUv`+$?@eNo4T)8{|C<0^pH~ul@b^4@#J=6LKjWIS(ZxgX87TQ*&93KO!wTXO$DE zk(w)Q-oc#5Q6AV%CO?sN8_&Ch3Z{)ByiD3-rN%Lo4GM`uI0&sFU$-CWuO1Ifdohho zwjgn!6@It(D=#i>fOe?3|3_cyO?TG2%kOphGkf50t}RL95pgxaMC9t{Jpg%54N)k_ z!G&8A0!UPt5&iH34Ly!nYg~aT_`WXZKz*LX`1$Pu#Ne+*^p>4J9vjvGO0KKcq4EH3vBWyP31nm#9daTCh3jk$B7{ksB^W_9f9zF8*v+7&LEe zoh7Q|=s78&B!$9uY+_pJc4(cqQjbCT?=C61X`irEh(!HfO~&u9<=tLG>R~06TO8N+ZIygQ|E9nGHhZ?y7%dHDHvtL0LlG--M)z}9D~3$ zH979$*OhP_Hy>S^XimBaN-s)lyr*`Y&~h0r*1~Sv3Oj2R(ST512KDpH;47N87#Nv- zovUKRN!Wg7ZuPrqQdj_D09jJ!HX6jfDGfDXdKF{X&Idwy40?5muU4wH=`ymx0CDw< zWD_QnV}+2$NzANczTcfflZhcIc@|t?XOCX6@6*Bi6L4@FxlI_D7fv-yd^n~_8A&GU zXLj+#pa>?b{<`>*34Q!)tAEe-2W^;bAc(i0x9xy0XZgk4E^0ah@=KrH^?TJTCZ*5&@3)EUkXOn7Ii^)q?54!_mr{oF4Hr!X%ijvjv!P8S*|b7vRfQo z#M0+Sd5o+3t{-fZnlM=xxJ-sMvVj~}IbWalAFihSY#bt_ct2kJKmoR3Gz+l=EZa>s zyjR=~E6$y3;DbQy&8I|%J#<=?5XI;5VN-4GT>H|;oxY$|TuS$$T*Nsw`AOOlUU9VQ z8Fg@r$L8x>{sV}ICNIZn0Ut;Zlt!pe6EFgYQZ#g+D$&byJ!-U4OZj4NHg0g(XxyJ$ z$q?-|*Wsk(LP?lsbBN>?RD@<2PWB=)arlC;ctgK2c9r~GDvA~KpxA1E0ucwS zgO4)G;IN~W?@BKV(P^ww_`?l7UqXd*T9DM}nsj2%bPt{})?}K=OQW2~mXVrZ7awSX zgFp5BS#+iLbKvKN>058_aQ-SriC4pUS|=3ZNEk-k9CawEaqh;h(`Cu0sM+xvJ!0kP zp||ySao1p5O6vqwQYwus!bD6sm_^J3Kz(SRHI`fzh1erE(*Z@fyH+OYW+!n1%_900(W}u9C|$MjkFq_w z)Tj1HcsLg8`uun0{CuFOWqtDE6vjvwSjZMkI=z=KMty*f4finR+#XO-n_f(O zK=&dWV!EZn=1zNIH!Cz%8wdKJ^)tKj&rcTCd)RO_j2?5jp5}p5 z6rJq6`T;?_7cc2!D#svAUWa#^!5Ms0nop0#pBnhu1Mlq@9$fG%d+Al0a`p6BbRQmjfsDyQ09PZT^AKB=rk%s&rpCNi;Te$_q;Kw+!fSlmR*?frOQ32*lu#J*Td$`;JMjP9Xw$&!(xJ+6z9mFv<`&To}WKkJB(@=Sms=RYcFl% zZ=FTr9aMl^iTU7)h80bL^iQ_9Qpi)?O}ow3l~*CWe65U?kWwpDRw2trYPQ!WGu&+N z%jC;{gCY?bS+||i5F0)ke2La(;xd@j#Fu~zfvZ20_8D(6*MZZYda4mLCzblVI+LsC z9~(anB1q8HFRMy@EI{)dUE2U&7_LB_%~usaeiIgVqzQR%Ea(D{K@^Hu!AKshg8l_J z=_=qEwX$pTezp)0ygKH7G&j ziK9I3l4kFOwCZ|-9lWY%Iy2RZ%Aiw-Pc#pRW%Njn}xofVc1 z@>GN9eZbKYBqfAOmm?&_F$j5}2TcsPHqQcBYa^^x6rC3dQCD%jl+li7t?tqmg|#uF z$Ood^@M6L2DA^vgyCDc|LCm%tF5956SNL^SZ`glpwN@=&LR6MV6(Pf_Dtwh7)S=YM zv>|~?HZwAdG^pO#y^~Q}f|vXK13jmW2iwA6Hwg|LRb42a z{iaS&20}OH>TX9?v`b}SYZfEhn!HugWg?>t@pdMc*Ir_Lww>_?cA`D5{_o8_s!xw9 zGWDMZczCXhOKvf}Qrh8H_y+4d=Gh1xVuv~7$E$>piVE3VOA(tK-0Zc~hgK_Lo?C0F zn<+xzMVpdCx;7rv2M@e*4zw!xQ5~$4_MXB{W(bXzoylvSNFbRZz%>%9Z;&R!y`nK{ z244IKqXXEOIT>X&nrXP|upz`#J_E602{67;J74ShOwlVSlEDTTT;!sF$#2RgB+J|Jl#YK4_sPD6{p}X5*9-U-h~A{ zulZSN!Wb!Ck^;i=iEdu{z}-CXH=17=L;+#(-(ETdmqN74ee-NYAs7n*pkfp2A7j+6 zcqdYW7Si(+qs=m>5{lUS7)XYBr{I-Zfm!JUSUO6$~ zCP_;*XTB*vw}4Ywe04?^O0_fhK&cvTbu*gfjX!gXIhBW7L;a=r0=8|3r|hgQhZZdV zPVAIccjwvMW1=b%NCq9&9^VNo36^N1)KO%W0eJZ6pm{hUTfCTqrf92EFJF> ziZ>afSrYm^@ks|+@D;TA~yV=z4+ve7%b|f;s8!M~u;ri@^=9;v=;vhk}P#a6dO)TwiW`R_iih8J{uN+!LTgYuE zSQQU6|MAXuKg)Z_{soF9Yg#6&b=c*3-EnnXZKQ+Yjy)&*2H5zbH0P!oDt3LPUkGaG zzU;nFvA~E=&udcd_bpsZy+22P#I*8Rc&9Wy-bml?){edZnxOSfh-byL4B`T8zZ3~v z`dk80{N4^(4l-e1Djcr*w-!J9=!UhbI7#1^3VUukY}P?Pt8HE{$!&#Z|9RBx1-OZ@ z#{aO)r(clMPCb~ToEqmemro){L>tSfZ7Kf%p0@>;MLX@3!@M)H!o!g%V;Ms#%#ZEo zEr4ze z*l~H+)>m~Dv~4q;FYE}=jY}-y1XkDN&9N}G$^x3U65Xr%)NB~Xq$gXcIJVW`J5?FS zNoKvQzx>qqHI}_&nP^EG2=}L=kD2(hK1i@?#PbG^%b_A55Tb^urbDlk84R{?Oz9lt zx}gr{t{hq~?y>u09uNAh9XDi%6Lv>lx3=fAvLc-y@F?pB)NA9q4bD{V;aW%D!~LLn z{fGKHu002SZ_`26?=~12ty^_4J_h>D*5iTi*sh`4EV^pHN0}kMj;-wJhN)t`&gcu2 zK(5QmLtuoAic!L~GvrCgkBhbU7Yvfbj8iNvTo(eFBIcn<#uTe}N2gu!Uh&pBSJ8zw z;OcH9LcVf1QUi+ z04!8S!pk2D0PifbZf$_RB@xf_i)1uZ+@$NX5L9Q^^PfkYBc+pZ{5daLOo`f@tpbus z*~grg9faEqr3h&okLNb+sIW+GK-)9M8fwa! zn35;F9)j8q$H>O>T+J2`OA~)g3QN^z@x>PK!YNxoA1o%Rt7oVhEMUSWDL^g?#6?zi z60y3Zb+rQbat<_kqX9Pp;(*KiwG*DH4$Ud=Vue;Pvpju`S6%|JnBAtbfmL zc#H*HLZtvQuy}E}!zO6PA6>7a6kunIXCdv=RF64?)0RqZtTLJse80{X6WZathq=*4 z!XE1&Y1X^CA*aQ_FtSrYH=6bUbe>?3XM=KGE6pkFS&E!<@XE!p2P$Yz^9P|*>xX&- zLj$VPV-qjGYgWVL;C7Uj zgRN&5iY{N}@^cAsGVoZ-(ewCTjYmd&62646+@wWA$~HO`zMXa@TCN82rt_fZu47tk z{(BZJ)1q{sdSaEcHz1jerq(}Nnvu}AM<{hltL@M<@P0TnrZfbK6@^0kP+B1Qz@7iOm@1~ zEs2UwnT}{UO%^IuKZ`S1ijvBxkNl{w7=q(N-@!uMTM7gZ&OdTQScB=P3ByO0TnRrB zUezC1hh^ag!HkSY_p@D%GDBI+%T)D|*IJDrr|%+3yRl14$bBVcq`e@meW` z;bDzS0{IeaDn2k{82YnvB1pXT=gbZR!YF5%NWKLBQ~8ZJS;K(VO0gF)BN!rXhQQdh zq?j~+8OK&c`Cb-onoOk#gap&8^65~tn(#@b2>r_86*d(q+=?&n6iOZvPdA$d=E6CJ zEtEv@BARacmV~PCl?%oM{CK9SbL&9S0e24?aUPu*(n+@(U`i4SgHiV zS^kfmtD4Ay^fkzyYr=|Fmsz75s8PomyoH0=%+gs)U0fjW)~<(m#0jRPD=uN9{aF}* z36v}-SIDq^m#t!>^6S%N;R_t{*2OTUCz2DxNm51gq?L?)Vfi@8_Erh-%g6JnugvWd_*`Vm3bnN5 zkk9z>_FCblG7`o@z4%EMN9M{F2X2}gS1Y_sgMk2k7CfuMDhIONoj1-j~@CN*y5HO;h-N-Bejw-54sSQkDP`*NX*(T0cl zm4nC+%Coi8HK3yu;m#$bN1FGovv6B&At>|Vr@FQsuBH4a*830OM+^=vTb}SZ)HeYaQJjRRoNK0&Pcp#ZAl^R~cZf&`m8z#vmV(J6|;++k^QS`A)CIX^d6Lw7J5RhQPc5lTcf4(;?0f06t?jScNN5Ctqh zPb9tO;Sqc>A-UUyNFNV8>|=xku3E%9;8*CCR!Ol!_wGQ_jV-p3#4?|4_7&yxkgk|l>(HT3Q+gTfz0NAJi~)J=XGI9HOfxdLIFeGBaU>?&CW_B5I#BSC_uhIv z_i)gg1(-Yh9mTnjYgQnsFCc~*p)Tz%(b>A9m1xu>$T!j@b(4kQMaDD&mc31AgC=Lw zsGD3whR?9V4?PD%GWjq>FBWsc=i_Ab_RoG>bVnr6k5u_=J}*r5h0D zqW921nzrG-R)?cuH822X=&TL+lCt~Fs3?ejDam@?Q%#y0ijs<;Jg)$C1F}fD6PiFzbOU=;$MVv&0%xc(+?6~DrUw1Kii?&8o{aw#W=Zt*t#Q`3lAl6c z-idez$=>vY2Z>i)S|>mMBId1__}0FfY^>Iv$=18GRb$_EfwLDWrTKZ(lXcZR=23OT z)2K&1V3kZ4fGGp>kY3=ihv?&)sAFk&d0L#YEJ&(?LJ*y^bY1j*-?|Ltw43F9Xp-r< ziU6tEL-{Pfs>uS7UZU&H+PC)Rm_leq+vR$9RXCHW^3fa67t%kvp~zmIo7bB5Z#dxF zQ`#;~mMvnIN zkLl4_ntfJx4u!pO#tC!^xhOJ2KkfOMM5gN-?V7#JRs{WjTMPQ6;IWj1a+?jk`DT@w z%q(UJDIS$2PEPB%+U3uu!a9T<^S~^m>>wZJ67TwXeIH+TKi3mi;IUn5lM58n;Jc56 z^f}-v(|*`?z-FnYd4za5RIY^$`tLaKcxiJP-lRo|^_L$Sjhlu&B5T zyMhMP;{UjZoq1=GNx%0&ooWgBu!*#?G%M>#@E}mV;8f#B`0&BaSjelBxusHtQ>1Mk zk|+*+dp~$-S!82oP+ZGRHrwPSJ4J)&Z8$9I18#~pz;mi}v_8*nYg=cA23)VS(11%pC1RmRhPQ7s@ZIJbRUuiY!sQ3ICr z*7zZ9zH+R-)`fr*M!V8Mv*mc8r@jiM+BfCxX0h(7KO=G(9rr+ts(?Sw z>QZv*6Ae@ut#1ns|8v8pvUF*{@zj&`4%&*$mxbMf5VH(${@jx<&8l^$ggR^Mt1P0W zyU^8tacD40j;y}>0y6Ah8H1AG*CxO=xMsMKCx;yAHp7Hc(t|-0ogmH8yIljWr6lu7 zkY>q9ug6t4s26I&P@ZWz8t3$9O^zMlkke5fTn<&O!`>vbMj~@jv&k0Ic=@+bS*CI= zcWFPTzrW$rpp$g6kDqW{}{KRyjQ!Y2}-mN>l!v*6NWgZaK&)?kQ8?7J@0NNKXC5VE8x zvPcRy%;0gTdr{z4@|)_Jr?lC8yC#GlkV6%4S5|;0vl_Mwrgq*4t2>K9mdC6 z9?+IAv66jl;#S`seyT4=YEJp?;k9Alo_n~BJ)hx5A_UpF<#SxTP`C;Eas=)>WpHHp z75&Qq3NiPY?H@qg$r&8PJopysaYC4A2H*3I=38RO{qlW<*tkDa`W6QmDl`mS_#xR% zAtUj6{rN=PQn(Ta7?HJ0<lztXY3PyPS0X&q`BW>k_F5} z$r{P1wQk$wD7Lc1b@NKhKJ7?Vr?1;dbd3)`3zf*x(yIwBQf~Ly{F#x+r~+4q9#%~5 zp``DW)5aw4Zc%{#Qukcu_@!(OVz9c15Ir<0%2Y@uE_gdNqv}EdJz*4dQh%&Y7H_-8 zUM9!EA96dng-^;N(wO*r7IlCEV&bD=sPF;a;$Y;sH}G*$sd-nKt5W7xb$9DnBcrvmK|@T@;X@Jh?uf500<4-7rCiD!hz&Ycc-2JpA=B-4U(&>a{B`Xh6YS zX|NnONNw}f9usE!N`-P#mTGy0`9r)v;BDOmN9wDM`%mMNH)0T`#0Ze1vm5h~W_xtx z6RJ|bcM$JWrEv}0+W`&VYf7cp&YBI9&^K5+qO(w?nQCjWCkk!%L_a>zJkZ*_xpsXN z^8GMF{CMWN=1+rEnWDd@HQn#dU-xk)v#*U!u+{uw_7K-Yy~nw0uy?k(6t1uvz(j9N zUuo^dWL-hw_4qP?o&UpBRW+6ZicIww$`xb!QoI-c`~sslD$57L>B@)VlC}<@{0$HM zf$mk+LjAAa^1nOE|L!fUoXr0Z{`bBG3&;Pgw_LgGbfEt{Md_55i9Nq+(Ml ztGb);wx_ePwphyCn6%q@OtDX;*ToSMH!fLT(LUkrK$&=&Q!f8Sj2A;0?Dhxn0uKDe zpkt|ivi4(du;U#T_6nJw_b0z}>`EIO=g-o}wB6ddJ|Ef#DK%?ZztLmC62)>PG`Cyd zt^lpIfg?2c1hP^YY2ba%?O}po#`n|T+Fxgmj;1dj82*&Fo9eiJh3Vjj(E+J7nf=zC z+cnxRe`9MluQGRlxk5Wxzh9={Z#dqbX4cEO|M8uIPd!)_oP3n~^lnd1-c}fP964jm zVQb#;uPb7;ri4ygStH1$l&D4CKHI?l*>YnRj-I^PycDP@G3ei)u^=w>KyU9YcF46s z-KBP43|ZvE&17_Xzv{ZYyoBJW`snYs?`XmPuv&HCxQVMQqZ23CpD}lPWb*ZV_EfaW za8j|@x%O|Z&M^cLR!uou>2tzg@a?Ycu?cFwwIrv@Vb0e!@(4hmADb})LJFt2DLRC|GQO9l|(8!)cQ=E(q z8zVHnS(mpJ^;jdpWlW2+^x_pjT6h53Gv}QRghFy&d1zu>`IvN?4?!Es1F5keoSTv( zTiBd9TjvrIOI#Iu1?Bg|UKs{op>Dau#j!0?^=ZCJ>tmRI1~oV(thlXb?|Zx0%ceV@bJ>0 zb8fn7JVjZS>t2W>p>8%z=l0E7r0O_L-gRo1;jG8x2@^(0V;J8E+qixlvP{y&KXotAd02&<--;CkBOVcV;jWdj3Q+QBsMp+w3Ju-XG-tr?{N2;W6TDn8;dtE*0D#&Y)#m3n0% z3B{YobA@6puS4T^-9zFSd96wq`G4J7O zU{NgTu`0`P{DfOyQ5e3z!ClajJAPBdxR%C6A2dKvOtgaF&mVBv=-I8|ySqF^*F5oM zc_(_t=HpTYXR{Xbk3JAhGAv+FR07!Q6-?cst2|gY?ki_9MM-c z;9_Ip?Fg4)!kaE+RmtZ)UcAUNkzLve`+f>|wgrG(6e(I~aq$gH%njRRe=Aq9yr@h=Ig~vw3 zEmyr9@7$p*qD}%4L_+a0yh&M2!~e9q zKXAL;+c)E8Rf_pgSdpW~#V&YIP& zoW`skXgcqxf3G(`^c#41P7i41Ow<@j47K1f&321+!Wj?i{>C*;g9{prU~aW`yb^DZ#_2_0bxH!|(YEWU@3T*F z&b``@q>2*|yf1H?f~ETGdXOt?OD~6EtVvrru#?xsFWEp_6Fv72#fGIxXPYQ#Xr%kas~TT<-+7; zg%U<+I*i^S;o;ZMENOg!DMwW)6kKYjh^@J&Eq&m2Rjg8vG9}l>atrviszOFNQQ_I< zBQhXq8!9oByJz2#of?!};f4(pXaw49^)H~TaG2#TE`ovnWtyI*d=URciSI!t;-h2w zHu@IS_@~*XOJ{~C1xBcLDPl>O7;LJnEeZx8#Wuxx-xq`zV4K53ftzEaV6OZYUp-r< zO!Q=Z^sfW#OI|$1xL&Z&$MwCHhnXrOW=Gf!WG{~KXIZAkA9dLW^+Zz6HT(Fzx1&)| z2>%b8eg+6;juRmiT=Ls&UC@meA05AmMiSqG-H(ItR)si0vz24+$GT89$qSx3M-ABio-O2}-pH_ij>tLI_ojP}yEIB*c0f1r|BoQpD)dvoeShB|vIP zl%uT?9#65@Z;s&Vp(aqf%Pzsbr5!mD9zGa?^ZU_JW23=@)g${k-7LODF1jble@JV8a1?E-r;W zbmAC>NG~@Ql4lL>AJ!f|rS)%!t4=HJ*IxN&qRfSZFqKWI(uaAYS20UI&~oxGRi50c znAp)AqkTH_!8Gp#Arn{?_!LJqv#&BWVg1a%Pko^V8YEDJ+r6ABk=D~P>Y!SNTO0G{ z4No*pr3W&xzDH=hor-)ZQ!YQ7!84Ms@*^H7_0_9Jegf(e5xLEhpp2lbxq$Izw|&A# z(x{14oBGj^{}z+p*F&VM!EjDScHKSIw?)n=D(moTB`lzc{Mg{}FJ2 z{O*aN8wzh-O`k-?p$fYYMwAISH+vcuYkH1C)gMq!MeYD2_0>Dav~~qE%4@y2@SXQ> zC=(z}j}^#M`lwibv*qyN=FI)@lAiwNZ&M<6`UmfPtKddJg2Vtct^k*VoA6L|M3$q$ zAFqF3r=5St7BKg}qHYS$k4_ac8`X!UgJj7xb)${?^9bzXi(dz zMCAYbj)#V)QdYT~n<)xeDxpryqyZ{kQ(zH=4u;L*yuEBtZxz_Ko0efbI6e$QHQ#7y zUW`h|=8*;}HXtO8mFULYs0*vT9Jnq!d2PL%Z|c_b$QUG=ye==cNOra|A?2JpkkF8qY`oGOUafG3N8mJ=LZ@6 z^MfDj2h8SW)lE-wxqH?Sry6Tq6F8}&YRWn_5qj~j8HFm&&p#P%O~gYO2fhz2B1!1| zZYv)YFW3oo5m<$1 zmYHSbmue)?j-gvCOe<4Ukj3B)P7UQPq5b1y57+};ZLXZ2AkL)5NF>E(GAXdW-KH&T z^x)NY&v^uM4OEy=Ie|*3P{QO^7h>j_w5e8=X6$?}**)i;L`ibh?NxAf#Mv&Qv?hbcZOj(m$hfi zBdJ*>Xla(^E!T!Qv`Sq*+|Z#{+XiRyW^YI6VG-GI>OJ= z0l-)a1BT8K=-#c?j=WbP$5vCR9%z|C5{G)WxOr?5lIBzkaBA9nR;=A6J&B_h!=GCh zw_UOO8mv&f2hii9nVw^q_ou`>!wQqi>G|np`i_K_tqM__hQ_aL06m%JzY`?~>#UPO z>-`El*3T7@Sk5jU7yFnsb&>2D!E-^H8-8hel5LUZ#lpw7>LtmSkmv%9d-tg*}p1W@iu zsD(mi9CIr1m+x2XixH?KI)Bo(Ybwqp8X)?vHyJKr$_~$Zw)FYWX$yGpsH}A45Ue9R zf0&QYM&JLP$LQ48?y=K>P-VLc3E%#0HS)V^c#><_(aOAcXz@zTxv(o#u3+_V8am7; zu&wGrbSD1i&>TQwQsPry++`nRI6`PF%Sb$g9_FNUBkO~IH8|1oYjgnqw_GAq>G0C} zWE-1#d7*_YHP&|l_ev-c+tj80+V$F~bf!Lu_tsNy21y+IoDM_^*qs)5!1vws$$hnv z)Qc&%m2AY?WtO^Zjnjp5@+SV8L}Qq=XbFy>TxLABwl#2Y;TH%o5M<@Qd%*v{f5FWC ze<3T=fAs)X=Ko0#DA&1hI2mvLZmcW{208=6iP)VxgG4bD+JkBaxofzSQGk=`$6SGv z9I-{^gy<*lfx9hl5cUT0n#H;J6Py}Yb(RZxEf5G80K9TR@P+IS*EDq;#6 zGCkWC{p#F=G~O{}IFp$(xrjT`Q>xUT{(%=3dS_C`GiK(D* z$93tB2)0BGB>`gZUveXp_~}9fHSJe3;S(&y37myVP1(=oJGawse4zF+Zh|4SLAgTz zrbra(FVcl72L1*!+dr^Gw@Q@_q5MoJ)9OSnGqpC8#k(Y1`Id+!9X=zeZ6Q%Shj=G5 z{W++d)=?4TV|3vc?&692{}{Q4;9P)pUBI!Otk`z4V%xUO72CFL+qP}%k8Rt&``)U1 zCVO%wJ$R?x)%CqkRrfMiIeQv#HJY={W8iN(R_avwczT9()=2D(k>t%);=fg&HTA;+ zyRdw?jauEGo(pcq@`%Vl^BpFRKYUh`hHy_}2Kkxm?y+MQ z$>e$G?Wv_fE+h})h6qVfEYx6Y(6Nek0&7=Ypw;FF<`)99)479H8NZsirWuS2*dvLv z-lpULoQ&Bt^LkiR`@O{4n&}&M-6dxZF6sG07Km(ykj&Q(+q}ZP(h=kcuE{|4HgJ;x{Q=}J91vGC?E83MqpnqCQgf|ON|y;_(0o>J0TD0I30 z;__R=&8D74KTuo>gy@lyrr3dUZAKX;xnLvBCqlgKyesEHOn*SH*<40~r#HUu!(jDU zbzTiNwgK(&uA^epGT*u2PYd_oP!SNhw%!A*ns=QF=&2$LLT}2aGhY7UAs^*hKtRfX z!u5sfs&fs@-^emMhQToV`;uFCWN75EI*we>*pbl!@w1`(;wW`J$f=}aM(EiL9#|d= za(-?f1Fx_#Lv2>sJD@V<3|eaY8R8IL$=Y3y$DeEM{(!xYuuJyc-R*8a44uBu%NfXH zv;=WyjJX<7Sd%EsC4*xUPz{ei6QoRx~O&Z89 zv=ygIn~=iV%KtrZCh!{|giB)lEHcbGy{?Vuei*r6yG)=j=NY$HS0TcK7o z31(V8DUl&Uz6r5mF+c(#hS^@YjiyL@^)B>OwjtG(W3UYj869ueg%Tb3TM2&*D$uOe zwiT_)KOr34UW!e#2icrqPHdE+O{~sFfEsEF1P4zDH?%tr)(oECY$8QmU>dGz1Qg4R z{x~;HlTtK=>zz8hCH(6*Z8lS_JQK~6DV;ts?Dtj{BbkT2Na^6`2YewW4i? zEPH)N)JYjRvCs2NIfv1TdF>q9DYKTOd81%xqNImg30=q$CJCpZVbF*F6bd9xnYIbE zw;~QXnVvD&&7P4H#t!GfxxdZ!P=Z$KnNdt~p!dJefQ*&_B`I7eu(`;CL&M;J7V=2V zno%#p2nwM*09^a3#~fS2diMqjV3vNs7R%c1r`vyO{M$g#cfL?6Js*S7YLmjkr6sP8v? zVyS{L1T6w@aR!{)Sn(p4`a8&Ctp*4v@YDvJt3u>2xH2`=9?zs~xtbLy^FP>N5tyw* zuv@3oD((|9f;26WXDhf{Uh=Q-cRp7rAfJ|t+>MXhWo%fe*aqyK6*@`^39!Ow%A`q2 z+M&ULw^!2|W4TgKRoqh0w&$9OV(}iOsd0qmTf=@leg=WuvA^;Hs6ekTs_#q3CN5fp zYQaSqyYE;eHN6O|)tU)X?DYCaZPQ{Q^ceyPe0Em(D?KQg`R4xF z`)I7O@{U$SE(2mL-P7*L#FreNUh|v~;?w3t&<&Tw4Ap$=J*SG9n=+k`DT7A7qbVaJC1i-{5DOhaW8h=u(vkJn2(7LqC%`l&Zx*{t_k@h;Cxa#Q z=Vr~AzeEZH-#UoP_fS1p0uA%69fDv(JAm0Nw>AzTl*eNIyZ7y#82m7a>cPxOWxL|dr(6dI` z0mqQueM7*IjSJnH3Qv^ zAHz_kxD(J2_w$xsqhSw-^u{_Za8}(*w4x!pdATnq1!;^{mHL6;H{td4Mw%!kLmKF$ zDs%6YVMTgt<+D|YkYe7t*+fz2>(xi9!;=9D-7e!M+Gi#HBo!^}CdfZRmHTW0&gZhX zpPrDSZ<5LAl_q1Z#PTGH*+LcyU~;GUMJ%rISBLDkyWi)d{Z(L-hq3-llAa$IoBz4J zZ~1g~cLv)xp%IK19hL;M4;j&(^5>HVVGC5!cr>*58S1m*83RDf{o!NhRF}0P4nh7% z#WvT2Bs>h(fOweFq$zK($I7-iq8;v3y%yXMBVjk7scq*jF8I**-aIiG(<~Ckwv8-s*jhMB!?>s;YHxOHXP?t#OCSSsswNG1~4GdKF_ks7u6H2yw%s{}$US`G=kPi|`Ri zYPQ^HpiGwi9s3S8gEwJt`ks&oA%(9jkRc3$BJuY7eW3Ocp6NM6L$Ax>A}XQ~z{Ad$ zx5Bi?aeU;u4bUVJi3|~YL79tX(ydY@R^MX>Rcgvh*xIYPS*$8~oLvwh%=LhxbmkP4 zODj_ZiI)Z=A*x)L%T02f_J=^MpsR%*dAtwzwII!PVs+zub!-AuPX%IJ8t8t0{G3$y z{?vA|;YABqp)X723EMwtlDO-g5oT%c6~r<=2mQ8&RP(@fVibA~jW)6b3A8N8WOx8< zGcTT`)!oeFVQLSy)tUe~0DQk}T_KS#>&dbouV0rFUdop2)h=H+>|ZTN@5QuFn;s<@ zKg?v$7cC`ONO@}AX2x96i$tV~u!JK0T@I5OmVcUWCnuCgkB&!E&glhrPL@UFfgWG1e zZB;I@9nfEE!2FYy%VeO^b#d28i=ki;CJgTfYy!+?g zmYaFw;Q3bXKps-l16G7toY_?rMGG%K4o%9BvojhXkN-z!xGozw zZE#dOOg)jhyi6`WKf#!LnnOEJBT^>C^B~OYmFWsQELq%O^$CXxRcTHW%EJNp^v6IKI;w!HyLr;i*}~RJ$7*AvQf$h zxTw-UuGOX{(t^*;wnG+>wk$v|I^%fb3O z)2YAnPYLcj;OQTo`GCe|;^)CurTgVk`?=vhq+D*N8g1n>%D%`Y{>cY0*GPWup)065 z-8p+aHbW;j5Q>)W>8D$>soj9aob63;#PYoekyJUJh3_V4jNw1z25l&Om6A~L0=Pg> z87Q1upsH21V4fA5^*)U&$V~J2-;nDUT=rsAJxq4rXNK!hk?sRApb_j?#7F^--U1eV zaZC%SGRwN-xj>O^gGHUimS`I}0nV1nl|L`$Q<{CbWR#qblF71fD+NOnvmKwsd$90) zU(2$g3%j^pGCSg&3UPup4BX1d#}Q9mLRwlsY_UH#-`6vUT1#;XF+*{@l7>LCr_eg` zZ6mn|vg=tta??FO7+k@DDt(nP$BL8Buh>q7kR4A*Tm!|`oL*(|L{d10939H>xklcD z5ALq&fvPG@ysb$zXzqV_ds-L^4O_!^%MEu*Hp(nnVX*{ihG#X~;&Y@DKtZPf65vlr zy3r{LgaKDvlw{|@aW=+y>u{`))%|$uzvgE0F>+r~Ldf^g!~4RN^}9Az%1C7m#__a= zKW%D{qvtdl{Jk(y&WEucblXbBgf3C3t+c_r=&FWX7R|t}lavWJonx1`GMzT%p=CZ8 zEWYj*;(L5_50~h~mAd4z`f8xGqrcR|^WVF`pUp8n3mU;|*P%;HcdP11ua4f3DU#b9Fx>mI2cW z;GawuMN}ts6aP?J34V`EvUbG^NG6%144d`VPB^;A!`{oOog8R{2|D~y&kxisSTBm$ z9-fi5J3zmIa@?DT`J<4GAQ?Om@09#@M-*k#Kw%?}+U|k1>N)}{cn=yAc!=@HQKI+< zbI^sc!aFm0>qmqtYx&mKfphMAyHP7-Qu{N9%FGFh7`(A+W$00ACkr%?{E3;_M-uTe z{L;?~8E!J$4cnFJopk-MD~9kzk=MiMvYIq9D1zyhj|wtHGrngiAMw_iFIi)$WTnW^ z^3@qczT~HDI?PiM`g+Mj7!jS6_$rU|SrNq&3-NIYf5g8QnU&HtL{KOCmbKfQzsja; z(5cBg{hOfk;xE3Nh!~8VX{|m1ugC)=xEJ!U=%BHf!h#Wgj@zbd&ia}Y78&@P0g@O0 z8IyflIP?F)`QGC1?Bx<$!ll+xtMU5OC-RP+^(p7!x}zDg(-@xwUk?bmN2 zj^Ox39F(XqI+1s3TXp#ZAZT1po{g(L`QTydxSWI_?T^ai~HntRK@wOp4RaI#dDD;SW^m&y)vKp4jE z8E&3(TPt6a%_&-&(Fh}h)mg{4ytUz<72qB9FB5c@DT#wN7SRdwjM{9a+!i6YWUql6 z&1o;yXgFjMD6)<7l^{o;qYJe4zs8rtXVcLg6fwZt-0l3E5Lze5{7q9OZwjXKc6|uE zbrCj!r0PZzp(8*jkN&>>wr<2N-yr{s`Eyqu9$;)jxqPtdhVcvU_XD4Z12p(w@bmvb z=l{VED7`03Hsj@umlk=DC zp=8jGP?4a%gnvMNDEiFlNJ><5-ADJWr$aEG&Axoi!TP}*Mus)|DEigAu07cMUXD|j z`N2NxQ|sEBI$oB=CDW|e(fz)$5tL8OqIpJ#g~3O&z@~Lm-%qQVm>f4fLN~xcOFuADMkI5fGmPOA?U& zBJy8-dSYhQ;sutOd0TG)9R}*bQy$WK`>m<@N+coFp%4=B*>(EW-$FjM&rx|3oq zIsT|5h4WBLlrE=)yHic7@awRD6nH0$D2A4OXmWSv915abVi_wToGVPWS7o+Z>{@|8 z2x%&S1;V)}6-y2mV2;KmPZ%a>)VV;~{5)P?x7A?;y3$74zb~&kD$im)@I=6oy{5?*Y7`$l zJ&YbUWT5s&7MNl+EWY`n9D8bBMl0T#vhpmBgZwCAhlC3ABACMk(miJTWs1&XlQ#7N zrzy`8slNGc@}414_|Yydp3$o*a#eTwd{b+z(gb5!)M5o$LRA`U)>PWuEd^e-4=r67 zYLiH{Z5n8+Um9Em3P<%%=ZAW-3TZ2h8ge5fB*&)=Jm84PC{jn*_9*PC&J76TRd;R+ zFCB~w<;S2~cV4$@f1%r*D(W4PUqvcWeMO849`s^&`L-jp&IrI7x2*~4t2^e_>aX&8 zz@zIdvpc?;@u9|EcIqzosp}ColMj6&(IizQmsH=HD4u(me-CWHu+d%zb=mJS#7EtO z!Y<3TR7`_F%Zvoy!>0)35ZT2am{k5n7ZN*|l(M_LpKqh4Hb{h9LZhv24a)@4Gw<&J zn1(7)@#$T3Kb6b^E_`LB6u`3I78X0KBeP9(-WwWTc;Q-{ljOquCl^eyOOn9w2q;c_ z?N(a0Y&V~|ISN@ySTZFYcm{r|xx-ed3M&*V7&HF%{VjOYy!I;ebPAQB%(kD}*)+d; zseoasUbCJJAKeFE_p=b1bL50cs~<8fmdp2c$-AhkedV*N(;RKH<#y~#{b`sws)o(kR+1Kj($28e+*-bTUIDcO7DEFCdZLhEM#+fMIgt9Q7F$m9!O>WCXQZczJ1yqF?WQ;)%x*RErfhH6t zF<~TBoZas9c)AH0xmTT%UD}ePaVT7|i6FVRmatIkpnI^!%tbdAZ7+0MU2?*JABE@S ziBQQW*CEXmkBl?q0ui7=fv@4SSW-YD1uxrt@mqNEtYYwphZ_?v z11>N3dai7u!JcSn0MH1tOv$R}&s4_J2h`l;uX~@|F9`* zN1A|B^yafwv>3L!T~W4C?Kk&qP2)9W$ga}N+;$BVulg(xoyKPsgu@^d@?7!ZT9W+B zJx#I&xiC&15lh+i*ai!=wE6S$^4!)owb`~i*GV8rD#O(QOJEty^e0gxd4K6!h~fnd ze;*URVsa#<7I#P^CX8r)8;7crvS&-0p~B#8KH99Ao@o;%!C;!mjn~ao!g+ywD>REm z4y`+(8|Eji!J8Z`GA}vtyhbSyOQ%b+1g*s_wmP*WWc^FG{2`~hHA6x32I_+e(XU6v z$%G8S&2HIJgeH=?XOy(C}oASWNOBrDBv0@?IgWMD|hY51S8H;nr?=q!xJ zS5KAO_6oO*%lljsm}b1?#N=p0Je8_H3ei^ruGD-8o7g(V_-a0n0^*p-C{%F*WlXn? ziEr7WoRDd@38c)@u|OK0MIJts3iB3luUg(6*7qTGyS}KwdY5X|f&^5hlve+{dnjl?S>S+|#*{9=0=i-}~ zCE|C|*V#!46ijATVximPv8}W;*V9LmFt+0i8e5p1b+4@7#-F&j0+!DDxFyW8A?7Fr z7}<{sp(oW{yQr8G zBo2_Qa(gf%r9DIqe^luAs~fHfQ7O7}5AhTpuR>_Sx`#42V%4MMjXz(eMy6Ki&yy<4 z@(hB&?}}P*Pam%SKIx=(3JUlU+%`JAAY=2-o^Uor;g*$vIScAI;@b1k^**S9>XnC_ zZ@j5iQI_CxuL7EsiM&}`i8*K5my`)?hn5H~#w;yyBxY8H>fB?Xd25MVuQi{h%A5b{x*%RNa~QbpeE)4=%}Ltv|FB>*s0Cbnf~a>P^kcKZ3W^_D5PiM@ zrm8n8W?}bs7C}Bw<*>^rr|g+00~)v<#3NZR`Q%JHB`34HZ&ldciPJzDZv5+rNV)$y zqy}w9Nw;80>C7S8pWzmc^MG;ri`9*KkY_eq$~(IDDY8I{_-37^FMPOf7d2~EQe8V} z!^jNpce&NcwUyK}lg$5O?F9^)^T^>2N;f{}q=k(ybWefiA3uCV(945lD`l7P^B5WJ zH23>Tnb|fAWDA{EMd=cVTZNMzs;5+zv#l)_n*FV<;o&}QRJ7swtax;yXsQLP#iQX7 zp!RS6?6s&Mbh!w|gD%ol|K=+H)N6r61+lH{9trnD)mqhaEJeurn{)JY;jFBeDu~Q? zg^y-G4LEp$$j-|kjM$M`6+E%W^<(}Znlws~Gum_#aJTs|!WiS}SsU4}U5uZzY8s6@H!9AljwXJ}Z*eKJVx3n)Bg5EX6O2$}wai zqtw-A8TQrWLb_3iM!}oS=sw#r%x#T(?Q{Xk+}Ebf>yAG&KSuayQIpo zQ9jwA)q-X$o~5dY=RDRj^t{yz8YefWOfsYN@8sm+%GpwRb@Yy3`M=GW@Tq; zPK*a@$RX}58?rvTlJrN0qEMK+;!hY&v)^XM)gR5l1OLR;0x#njl(; zh)eY20Rxp>aLYsgBN)UX8_=#PHA_y{msqWUQMXP z?(reNwWn&Xq5hQ+3pj$mKO7jXm9%j;)4)H19O@+UDBXY;2SSz9j3a(yPiL3$7q8g@ z?M%Y9Ywfr9P|v+a?poZ0@FJ-zNozGSsw(ZZ4w>?aFuSfjQ$3;9YZixdMRM&;jg__raUIo zv~+piSD#MY7l-C=D0R{bx4ack0J4ATtGjNsp0aN2(2qHTzfqoo!W;rjhMO@5h>D69g3?c0c?8MAvrSrX`o{->ZD;^Xu^wy4O7 zd8mR4xnAIga~x03{nT2Ym;H6i%U+;^k#2mt;%>QGL^m$o?Q5^T!j`$Dm_Y!TXeh6c zHWUD0cC|!5d`>$9Lhlr9!|+)76jV&w?q;u%dJ#Okvz+U;iCAi5+rGgv^SFrb^%a~a#ud7q`j^u(Js-_NZfGTs#2Aag|b*)Vc0c_FypFw35Njhk=Dd_MsKMJgzf=> zl98#B7pCVmws5pDrat(LXV2{IXvyedRA|h>182;PFUIP#TXP{;z?ry@BMGSJ}J+@<)f_qO08)kx%&QNsYlJy7Xxz9GdIL|Pyg5J$2Mw=w8b=pmx@z=Nwb1V zp(SZ`t0n`G#!xoR!XLA;v6|M7=>s0`rI0c5LA%M0D4W2%%k!`q@X#FtsA-5}0bHpM z8JH*Q#v0JGd(8CMsZuVbSRQOe_#@fOkm*d3Qz@k%T+w9G{E5D=s{OAI1}wuX#* zwjs8C0d)7BWGPfyCMYLJSC_s^&)i0J3fgX%=b&WA*bN`nF!%`+qeMHOUeaIM*H#z~ zA*)rf&lJiZZwal07O$?q8oUxDHTe7BG#8OblKV_gLw%?&wb|)e2o=f^d_)(IfLtK& z;n43q3vKOu$%7PgL7!ax!6zQ-r%!A`nxY+2EQtbjzc_f<_zYO}BXg$FSYkn(iy~&P zgyd#H0)p{P)T7$xILJ=7l3q#W9I{Az1uJQ037bai%Qf{NvPy}?>|TVW!Y@YLXYK%m z1Wn_yWW5=NnZopqB<09(fOiR~lwF_2T|J+B%C#`Ajo!RT!{2=3p~odKlO~p)VZCwk zqj!=4v%AU{1!)Za`)@RteYy?4Yv$T`1mQNzqlBsqx_>inDjmYITRM=~vbSoNzVl^V zJg?`c&?7-p4wr#-vCXj;xm}i;$r#B9l_$=wlZVzSTUa$yKbbPbXx*$^;&v-L+Rg~3 zcApiwTa>pTdR~z1=&AC4Wp$%zx`w(#sXfWtHzZhRLX*zgM>x_mK&&>V3Kn-|9wwYH>$hn^oXN z4pO%2>bu<&_Y>FODIQTtI`KS`AI1Nic54|IlwHUErIqCXG0V9aa;< z(qH{cM;5o6G*r+Pz9T#;&`B!Ao2FmRv^;f`ROZ8O4ZrU(b%y;^Tea7sQpWeGhVb#H ztKLZ3Rb4%}kd@y0GMmiRV^HFdpLT!3ep$J$)Z0dK$J)VuioUh|^(1RdmfF_=bIM{y zqXN(FBssg@WYzXjQcANAPZ`*mj>H8@EH;lW-)|&WWq$P#N;Mes&uMJ(}Y zM}m8qG2F$Xd-A{VW#b1*WX{#)_-$KySLOgVwskTHeZK)Ob7*Mu5W&|0SJ|ol`1mKeB(Lj7Q`k2X+hV{; zphhfOj4O1*IjZd_ zu!8_qT4A69uz3 z-dyDkN$vQ;@PcWrAU=Z!nM+`vmfsW1pfCNTV+gFQdOXgZ4p`gtRIcesM?BPKbqlFj zCg1uJzu1L5wgZx*^-`tJB8#=SKBGwl1}8iTbr!`x^pHZ-*|Cg!FMX^(11z3H_{^Ox z4;ocWITb7;9?S6X0piQnlGUI#@E!$%V{)K@>ocUoDjm`sA`3l(Lz0*$MxG{IBU{KS zGXnP8D~NB~zfM5?Y-s_GdLpK!-FGv4P#>>e$sKW(LFPWL8f0uAue+1r<2GA z!!rEOflL(k9n6Q*S*vBPsYjx64|AHS8=@*Nd(S*4Im>sTd<+8+UWWNe5|-umEFMmf zgT{Cl?ERl6_ECR-0SMREbpzPNh8@I;WO?+R0SQcQfD;y$>G2t?cq)t>{K3D?82!z03Pgg)i7)hD-h%os)kAnkm3QWf5oKog2 zILDBj@MXNZ2cr9urb*#d{?^`qXwZ8B+td(tT!neyC5?1<1}7ciC-Zn>Om6I z&TD&wFe5Cd=cmp@yUuGHN)Pf`w5}4$cRscWOlX60=LF%c2|h_`?Q6kQqsC`+nlex{ zw)R0$5HRG_Q;Yo+T&{~Cj~1nB2EN?nA)#o%v2HYWYhl(BMYH=Wo5+k6I(cG!RGuq8 z^S4vLn803*RLE#Mmf{9jJA7c(n&dYTED>yiFr^b@ruD~q&VrJ7eI=dd0qdf2ph6y& z=&k!8CvaI}7Pd{7!mDiLWoo4ZE@iUr%&s}ztPN$(WoVXdHw~8cMPjbYclCA~>10~b zSuop*J3Wm^R62_@ro!hs-!(@hRIMi!#;WuuBJ$y*gxWEvWEtXj< zV!UoqV-;a}%1cHHz@BY4lv%eSXfp#%UcUj)di!;ArnI&`R19CE>eH%1o6|wX_EOLe zLCBlFHXkHP*VFxe!<~GZDG!?HiYH;`8moX6=H1~dk^-t4fz)RGEyKAT%{Z$ ziS}-eBo$&)4{xt|gDISlI47vYVx9A!?~Zl(DBsES;kG>6;aA4xTX@*>r{}##W^)sxjiFLGQyfI?F7f z|98(8TF3z!-0R3KSPZ)%QP}ipB&rQUb*eMnzu0X~O5$Ih)|`iH0S+GvnR&}V*a{h( z$c+tDO9`qVolna?-aJ^n>?u_y2cqg3dh4L|^|F z@p!4g`O4O-tB1*R;@ZK0i-U7TejJ&y53SE4%t*b}GCBzP)adYJ2=Ibumr|I$iLDor z>j6vNQME;7;Gk%3a4pncP}M{JY^K7L;+_;`T=&Xvbui|^WCns^#0{MW_BG%`n^D!Y z@;xN_fw#pQmpUfTR5h0xOp$j+W-5-(z=oP|h0){v|QQuG?Fm9{F8zmDsby zsnmw%uQ(Q3&fWGZv5f01QEQd#B$E}lx*|pc%3LDwIXepyPm0H_dqn3rPoz;YF(-7i z`e9takBakIqJM%M58lD~n`jk>Nkf(-y}gF8KrT3&B}{ieYem1`Q#I$txoTkh4+MbR={HN zUh9q!a+C%6WD#iGUW7Ef2C$USOj2qa_(uOX3Hi=K_uDolk&mhv%OKF&dzS@#*Y5t1 zHAju&8=yy009ylWf#Lu{w3i8_kar|lq==TGD99xeJ&%@nd1dA(3No?dg9hnfFe*;K zZW=_@-llK9cf|?N3`lKN7FU~X%YT;j6=Iov#B0T-KPXrzDh;wmp?nbyvz#Y5dL}2q zrr9)x1&EKRh(#k%0=sJsv|}!KP44IX9rJ;T!ok0)sC01*`R6*LshyAZhF3~ExQJA6 z)pzdX<@daJ33WZ=tDG4J@<6-6I;)k`1)N*f+;Y{kCh#_v}LD z!i1^Zo$B_st9}}jHZwq=A3vg%2y(gF72R?eYGqzGwc`EWY{liYM-D6`E0_y83i=z^ zez_XqZ4O+~!ddSZ(5?+q_xh^+LkvpX(~Sc5JA=*8L@z>YLF*&^q=GT1>#$+xWOJW; z@-ei=NSM}Y95NJi*=vz?0hr0>70YK~x^NmB7)FRJpp5mC%LKL_H2Y!T;`{BkVd+Xt zyHHlnP)nHA#A3^!u!pGyd@Kn4rTb!cB>-qeXzLlDtPI-ZitFQi> zNjq+sCwUX7molIPu8`i;-z?qzyRAS(B|YoNXv^`+UKTc~?Q?Fz_Rr3wAag?8T-=n| zkWgS+!}c%ExTScY@ln&AvevxaMlX{MN+T6_IX_|ZQw_WEit223=)tO`>QG%Q?vjYZ zOt|jvG?;N};G*zssC~oC9D(l#_j~OX0o3@)B{-y%yahHiM8pk73l`uo=K?D2PJ#){ zFZr^fx3A{|=j)Rph+jp7lirXUD(n=zx#xAuX|6}~7p(+3O6jA>uhtF2;_3XL43^vv=bYeD_sP|zK?XHJyy|(x zZYS+&;^IfhCrXqoZjv@itt;y7I%{gV&-f3|m`Gw&=OAho{ErejTpW+yFoCZhPSfVp zSyiiDn3?okQ>RqBf_&*i0mDm|?vmZ;Sym~3W!M!k$Iw!T=f?>A4BOMW-41hUT=(=M z(?rxiDwubG&+e7hb96%_hU9f>M~wVRIjUN5^*mzrYuC`vn%$38O)QUob!AdxW0Vhz zYw~1*t7HOHLg`6EK?_@oufso7dU6 z+2VJx%@`mus*c=YjH)%&6r96BJEnBZqj{%u@*=OsXHBDLc~^DIJD3{AhP}~%=i6(d zskBNJw<-HX88c}JGnKAq$!~qqU?!Sq76RSRvsePl!XSOfuF=ImFFeE6p>u+(S8@6F z!Iz1zbuHH94((L)r>-u>fUcxU6r6_kt5`SrO*D}?sEvh++O(@VxkPgEA@eHAzW?5x z!@A40DPLGL%`Ilom7jL1(lbgp0Q5D9p47${fZ-S ztZhyam8nsps#wSo=hUXl0VXzw%+vxmY@|tM04zZ>i_2kEF3x6C+%NK9A3sB3mvpSS za_-0&)duUFI|u=lJ1Hj}a1>3vky-ke$F*Z3*~*^Arobr(*u` zi6#$NDv&Y#&}`}n%rx!Rc?jpX`@hv~efw0gzZgEOLN_dtos%G+TBZWKfWNq1+lHH& zXu^h+92Z)dWBmQ4<;>tK3)D2g)}UKMzE`=0+rFr{%%I0kQLUnw4AyfOUw>%ek@!cu z4ml>KV|{yv&lj7~9Gb4#7T)G<+xDRcDhYj?UNc4l&_^%l!;-&;34>*>SS!G^V1NoL zsVN8+D^uriAaA|igS>yPyAW6Xpr#aHFw4kyn51UV-vy~;|MapA@VRbQT#Ac=IVL@S z%~wd77yGvfPqdmh9@rSLiEk5-eVw^XrHrR1SF zL@-!??$E1lvHi2;z)yt-{)e6rsKbefhNW%l4eO5r(*zM}q-^tg5DX>Cr4K(VdPwTD zNTx~&@O)j$oCdNp{mJ8zZ2G!tiZ*BB!YXC%+`?XTK=(}J2G7tFGhK7pVvaEj&1y?2 z(Z12s&&AZ`tGa%5?e6yUy}E!dbCQ7DwQC)#lCB2pL-_0jIZHy6oU!1kR0!l~;6%`S zr>N9MjLEt%_ttG#jwY!JhtuRi{`=O+m2`9%# zpaL7VPyB=7oBK6c#6>ESeciy`^+n^kN!G$blfN2%OxWt*N(4|pagz;|l&xveDEu@BWofu2DVA2;;qOUL>#bN6Lw5=Eb!-`9%q(ks5t^CaXE-Q ziVxB9 z^s%af=-VFyDgt#hB4K*z_Sx3-BsMB9GIvn>U~_#`$n4;rSdJBq(-j-t|2FdQiNseg z6D_>^i#+}KPJc{8LyPP$?r+ZU#@Vo1lmr`SdlHd9Pi$em^Af#6uuo!gYI}dUJZU&V z8aD;sJ}>LYvOqao(<0PY*^vcLXJ*oXou%web?fJr1LIWS$~mM7RUhP-K~L|? zYHz!Kl1!TF-aqCJ-uiTWg% zX^Q4S0&U#NH=S#rg@pwyBEq~{Zd!x>33(GSbjpAG&L`$NfkcIvCRA2_o{*IXX?;`c zUY-hn!)zj!MkvezG7JxTYK~LG~x-R-0Lkd(>mBa&7kMEnka}`4NGg_&Wx6& zYTN0#GsokEdL6Py({t$++OTv)NKX2@4N|7%e;t=%f_=T(p+RhjlSSiOU)pZGVLuiP zp_=Kil?ua{fnGKpXfI0fkc+TF`O~K(b^}ep&4!$D91Qh?S8miHsFf*QjE<|H299}mC8z_xx zbZ>mIyJiE4W|=hg3f%YyL6Io`TlX*U!h$1qxrS)$qf%*E=nC zBG*zPFUBBLqhHU%R7F)Z!6Co5m!{Bm6Sc3?V*uASCkj(B^ql^+3x>Htcwt1QY6^2$ zP)T*x(Ow(c3eCU@QdKT}(^I}VR%NarrFJ$w&t8d`{-ohcx75QR4dA}6`Ek#>W02B zlQ?$@r>J+|YGi6B%qt%-re4L0IN^YtRq-!OCZWR#zRG})R-2UC0p)MG*#nsNrB8f{ z??Xanyq{E|73UvO8pXRoIZ;p+Qq7r5$Iws=0i;V=i}8QTt9bG@k&W90LHxKIX7fmC z!ls`_0cjIIb||o}6B)1{ElMK5TRs*Cm$d3c!^t3aT!(lS`_7J2zwbmm%KxK1xvt zC$st#j}}T9w5yWKiCRt`A{p~k?*<%-$hMkQy&QCuR4qPs-4GJ-FlMR$T)ZNcw3eMr zjpeOwMUE(!clu+UQW0)uEh7bxZoZp8Jj7;|LOjGR z1!J8eo9;L2f?7AxHVlG8RdcF;=JJoTY0~C=me59sYxtDW4n+^K(#%yexeuLB*MoYG zzJn=@m|VQ9$?CFZ=mxRW^(HoD~9w^Rck%{Z2>{HzoDu02iLBT zpYo1k^>(SkPBZ~%2^BP{^>Ygn zIi|ysFc_p#foQc+bEk|GbQFK&NTl$NGQt-(CC=uQ)#90+9jU`v#KrsdfIhGA8rF6` zw8K&*UGeWnzW91wk~O^Cqg@7H<%=oV1Pyqlj}-ohHarXJaQQs-i~ zz#Ejcwajf7M<6 zCU5d)r}p&hs&m%bYyT{*B>uks5R>(Oi7(`C7ydkc`6{iZ(-X70+Hhku;vBVd0~TV5 zajP>ULps)V*#QOgFs#m+i&ZEZI4-{{vdAZW3U@yNZ?}$v1iL=C_^|~~i!A%L z0wM;LS>kyfDWoYa4bfT4G_qC^hwYXSvIdCEZt{Z3+^jPUi-hdl^ym<++Z4Cf8`j5f zsnjupjk@ zEyXU9Sv?mFF$=R%E_Hy5Vt%{aR+nmjWXL#~s3K|0C-5GVdB+^#Q}(%|T8h1f_Ke^s zt+7E{VNp|lYJ+j*t#bWaP8&(}!cGmjM5=yZ^Ui^ZYkO2Q)tcb8YbN63BzWE5XNYH> zy1v0}SXwDV!aWFU;%Aa6k%~1<&Rt2zi8{XhOj!z-BMk!4qWd#YpL7q;NIesFfofGV zCj!ldu$tu&&$q{2#S);b|MFG-U%%x4JFs#7r^xZ&z6$661_ZHo+>$`~2K=kH0s|gg zm%@J;xD;(j!Y9_)v;E7=5rhu5BquurFPF$nSZ=in3 z8cj{g{L>g%f1_yP;`#6%c3z0`xq4C1tyPdWqDE%c$@9K18ey2xPHBNjicOiFX67A; z(!*s)_Y13HgpbOGERH~%Vf!X2flc@Bf}-C8NLYIg`KrZPPG_&P6j$hEqBZR~GxrTN zeDaP$BB^qxm&c-Y5)u^WE_ z85>vIL|ko{t}CvQ+eE7wdU4_+Od&JR;y5$L&)jbBspycdBiP!>-PAds<5DfJq?Cc# z*;3fMGyu`j|JB06D{)GOEpNPe)^Ia!T+?(}{h*Mn0N+*TEwj5H6(zr^9@sXcv|>i( zSdemO)H7wVe=N>V71$T@Fh9~&tb?D%h}z@eHvasK%G%WNU&l5^~QrBY^nB1}nT zDQ+wf7!wgsQVrOIv*cVxQVH@~Z|NaHge?#=?@=wifM&4QJahYEj?b2RZXa=+GNgcE zl88N8d#8I;_QP+DClQ5B;XO91uj#Tmdrir$fKHz{TS;uTwM@0`^I_*tKmDEi%V{%k z6;3$Ss-yn80u_17$W5PcHlU&dhQ|tF#mnM{4IE_l;@XvMrZ^rbBpY9Pkz5PPS84>z z_|bqao})q`p|Leno25!Dg3#;JYAG3%&32*y0_2cqqyA5hFxO_e4!tvhp?>Gv$@?CK zql_ior@_&<+kwvNWDuX+oa%g$cxtREON)RWp~-r5%fFS>A{r^QPN^?p`&bT20^9P2 zrJU!zsN3EXzkm=gm8)JLp;iFoIF!PY8N#pOZ7e$jfW!-qh_z+uBZr#(tFPNk@<+U& z>rVQ}S$FQw)>_UYpYPyGZ4vgHqgyH~eiukyk{R*A%Pl4KP*4n_myqSz5;*lL@Q3FY z(Wrsebur{%Xl(k}d^9Q?aFp|ecHQ85T+AKtg~{rQ<)hKG1P~g(LcEdCfcbVf7udFwRc|)wVqqPY$R1rwc?STiPBYB`f-m=^205^c`P~LY|ksLL#1+MMpH!r zp*NvC!Pr~E)iTqu!o!*1+rmOl`Ve^~m(SSxWuVo+~qK)y7OA5W5WS_Ng?^~MN($YQ{CoE z;&z5m%iAYN7Z-V#0j>!vDYYI5;Uo6_$MLNrL!F(%DYrQRyP&w{X{?yacmdtV`+-e) zT!6P%HY^)%kTw!s(R>wG)+ajIQVKY$54t85W%x>4X=j+b82!gX(P8jDMm z+923zl+A#pXL2*OLT=@^^%g z-)U}EvFi)fs{#R;CF#GJs==Bf)R9zS=~E+9P`lZ#?4%$QN2)4H?4=EX{_7v z8WJj*E<>$}4xj>Yv-$gQDT3Y(V$66yHqms2RQqZ(XKFPTL=HXH z3L5B?;e1v`^+xaUVH?-f68efQL6r0T zbZ$K_H&1-nis&TL<_%^*838FIh^}YgoundK5KJpya3gTev zSk7*?@m{n|0XisSG(D#CG`R~l@o@GLlC8jJ#|rO)PD%VmW^P^tHyanI@%HrzXcA(Y zAKLl{NvA`ZG~;dy6B_tgWQ_mch@kqaiG5cjUG}Ry6lb*JgbNT;pLUQlJN_1Y^(t@{ zmUk*NQIeGRxOCP+=P9cMkw-&+AINx#nLhI*!TW$}E3Jf@3yg@aE~y>R9%hK7g-5gD zI9N&gT)SvE9KBggd!3b;dBn!QohO@ekp#Yf;Ty>45~|Qf*+xLOG?@l%`1#8@7fPU4 zmVj_;`|YK1G$nn@@mTPbNjB4YNnLiW;wgyW4WsIy#Tq6y9&tUl&>HYoF#c>~te`%j zC4BYZM|&ldk1)Chssbt55_<;Y*J_B;$o^uc6nEbXf4vQ32^iv((t;RXYNW-qwG7z@ zCOjBOcHW}LV0RsFqJ%C6uvMPn`jw22Q0v36@W+&S@7tVomo}zD-ZP+($jQk2tfHi* zHQq6by3SAPt*w3sj77H0#r-A!cXZn6I$_#Y`EPXPQ>~-WvF@R#1kzIY)ARes(rc%v zTqIfv(LC!gVC4XT!Ms5rw}pyo1iw7iF>wO_fvCmK7?0?8vfdX88z;5t!qAs_99s=S zOD^>OPH{mX(VnsLnG7jA@{_fgv3spJG#4SkfmgN`Bf)@;T!4uJWc=%ZchfKDwbWU- zcd=yS&DPXr_7(_9)aey;r;6gKo*2wN3|QI5QhmBY8hfwFO>+Ge^jg_jjWc#J%D(J?M_2(=zf}EuwRb&LnMt`+IZgvhq z#j_8?0d03YuTg_sjI!?p3a_X=5@iQ|aL1H9rJF?QR8fHEBIxH!7@b z+*%l}n_(!u%_VHceRO$8G-vR>F*EO7l2-0OE-AuKvU|Z)k^6~nzT*5y{VnFd*3o}X z5~q&!47)w~tF*xDh2;|l1379mX96&yR7|P%xv`1R&L_e-+2|+kqgZT;rJPh5p*Clh zJ-QjhH-O689O3P%_bEy|f*9{}Z1B4cli`DG`_W(>EFuW@9PMFYQ-<%P6Da}cKs1jP zRSL*5=7|DRm%J zyBof;Og-jmthG&t_e`B;9hRK`po;Xi9SaZQg&`Mo^SzirH9_Q%q!Pm-lE81{JgMYf z$~w3`(7vcuDMkJ)7D77A<`A$8Rs$@5J0l zsV)$1LLFtYXX|n7BM4-#aNpQ3)J&9o-r3Pjs-lAF(Gm5!=H4SzkPTOn3?6mya%G8% z&mHz%-`cVn3he!RvqRm+h6q(0TV(yLU3%eMjr}G>+?tm6Q73OzvPEj-f3iz-#oj~Y( zeYuBt3Oao1;^y$`+im{OQ1*L15WXlXGGvex)5L$WjtI7V#pM#SM3vXAVb}bat3V*A z{r}QAHZnKd9<2pmG#WzJcD2{qMF@b_75ob^C zZK^TxDrx9*2f^_|ErOdcL9LzrioRdAj&MyO7dykVn%0baTJ%na5$MSSl@Yq9O1bl? zVIc)MaPl3M*yuDzR&TGr6ZA%CRkA_G@kl;Wkg`S+I|!nUSg7Bw_?#Fuuo42lm_<2J zkb%h$f)Mg>@f&G0YyZ4Qr4jF{K~~A&T|Z zRR_ZRxa9bp4QM~2{zDaAId%o_`<)kv&X@i!C;+n=3>!g!Dg`t#v;UBj;r1wH6YJA7 z>Kup4L-mxiR!*%6}M15MN&@_Kif)}{z^a< z&oi@J+j`$k7aHXv_`oC%=H}d*P{Ie>e%6s+M3c(Fl4qB&rU9~F1oh_m_=YWq^t5Z-!?W zFDwH3C}hQ*&|hp+`bT+V&QUN0)4Y!u`WW^LJ{4r6F={L?l~#%^+|_3g=1pxFX-Qh` zY)X$#@drNe2Qt74OZC6yH0S>xQ{ZCxPmZ4bzxkT%{}W#`UuQGnaJ1F`ww~w&i)k}y zvX*8CMmT9LIDdLz!YrWzl+cI*(JuO;oHUt*+I{Xz^nvrl^l^%a98TX*5tR9n{0PyyOy;$_Q=8Y@fi{Q$ECe%zuiow zs&w-4=*B5E;B)4BTd@I#kFu4jrD{LAi~dWIoQ&_mFSYk`DpD<=L;h#$<$CSv-rL%y zm`yNyUNjH~A+mf|VZt!?XByEPG%c(GHsIqT!U6ZQyo7VrTO+zeZUsP5qvvU>{rK_Z{l&K+URbYq`gH zxaODh27Su)S1cQSLBM(U2J%6KTFyG|`|>ezQ{BbKE|v029&>*j9`~922OlHl3XN3m z8c~oRyk5#{@j4vxkc#coHP=mb0kPs}OOd{yG&|)cEYL5&&X?;kC$B<|nnjh&w#o}y zU$X@aaP(?L4n}jX%TX~($jK>A9kYdh$K6DM>8{Le>ZX4vb32hkZ9U3ioiNt6+qQYc z_V4`v-XxdZokf+&%{RDKP~y8vNCw-8?@M?OWo_61;!2;t%(xmIw<~yT>Q> z{)6I?T$B??c8m6dVIy8tdJavOD;E~bq{ z!E`^8w@#!^S*v?fubPNMObc(nY02?8|FLM{E+J&w@qoh2Jn2R2uq!RW?P@$2l1#T! zdz5cM&AAwsqf5fl7Itg0uLADWg1c7l`9Tn+^%tRARVq{|8NHVA#l*3Q6bxG9?12XM z(z@v>rH;J3tH~x5o<6NMmAL~FC`clmm?F7sy&&J!ARKm3`6m}(r7FGj<+su1v3N63 z=N?D;sN(#@m(m?fAQTZm=*vtoz9VsVyfTfw=ZZ7I6pZpR!}JXFR-mF(5;SRk`@-Xd zapmrGF*y9zS8X5v->8GojwfkMKMax!UQE89}mOA^1u7P+Z4fk^P zOOytcf7^8nHZRXx8eCU+S&~lE$KS}6Aj_S_h8dH;GzejW?ru8$s^>yaG}gv$9AJ}r z<;ptfMp>^P>BEEk7%ZS`ES|Tu5xVN24C8$G`;~7H+FtNDjg>a!2slmZBt3H0#IyCf{mP>XEBEALF^>iDZ9D< z`;C z$j*fCDOqYY-f0n6@u$21DLev^5SO+-nUk@HVi8TG;YHZLGHM-)P7;$pSo#IGa@++X zverWPTLdlUBfZi8%Q)W!u{ZMW+SMKyJ=RYrVVo*LcN;k7#}j@+i3vW;nSma@{!s-9 z1cP=CB8B%y@*jtHSLR_^5@#Q}KVNeghkq?R%SR%elmKeHNHJR~?H8cMF5WAue24t( zNRJ~S?)jTM=GxgZt=(_l1mPVigrm~0h9@R8F!XPza}G7@cPpO&7^h;)qfgP}G+;;z zl3gTPymcy4CF$Ax#&s}A!Q|bF|KW>E?h5kh1{rIXhFl2|15;S2K)OR0WnZuL@&jP` z46AxZ_UKB%asSJ%K*`b+@lc(YUSr0W zy49LprAJaP+@8#AJ8?C)wo7qI(DU-ic!by0c-WW-!ecQB^H#OVGUerp1sE`obpr`t z2Yz_-LU6GewUs2}0qs0IceV335aw7Dyg6A(*V<`?Bq*|gEkK)t60~1LF;g#p=xi4K zcTaq(Zi1m!n$Sxy3w%GdAW1OXZoFIcD*g~E${}M_dCszEkZ18SZ?S@Ga$w*Lhoq^G z*>{6wI}!&PzM_3%o4T&aOiV!{$AC$oV4%*@(q3 za8Mfsqjj?3Yk4rrxJOc?eu6G2kn4(uObp$~8DDRQD;!lbu~hcq-IsHO`s zD(e#DnwggO0DjAht7?`YV7Qr)U6>R_wDIod88f78b?6S01;GATL zBo<|I{M(A`eawxtF>IAsivWy&`V15egSB^A%n|*KHHsy81~1TA0=OqA|DHe-z2x#+T6oNOCO&)iwqY&Sg{bgOb?IN9x1N!rlP6-}`{7H5uWx|C&&Ex97M zwmN7$c|--1qka3H&0a~}(;qY`ljFd*`)$^m#LjgG7ENbWCcg5kmHj zG!pO77X3b;UZlP1Oiz*bG7PDd$won7?rWyl!xBvsj7%^gO&bFhH(wL*pwTMVL?Mic zY;GE+#zoq4xw(3DgY)J~fEi82a=E`z?PIM7^9^{owr+FbdC{7w^44)`_%3xiq4Tn{ z_C$ex63LE6O0kSH85%jK7ihbn2tQo)ULJx0O*0!S+#RK#*XAq+j+TLzki(T{-yyPv zMAklAlIEGTg~q{g-+{QAArqVVpu0FFT@YVQ63H_{SaVUMYIs#kd97eD?#!~xghR~@ zn&Ha}K|%zb893#k76(SU{b zAXXmr_E4}}*fE$VvN@zhZyjy(1jIUGro952^6k#cT{r!+8h0gp+`c^^Y0hUc_|1Vb z%GLpvLAZ%Xv8XLNC=hOA)Qh|Qnv?%nzRqMePD6lm0*hYpm+Ub63If`OcN9({SlpV><03ZKS3I~#LmwL^>Q2r}>HcQDz4IygD)`Tj zupHo0f|dy2LCRE)P%8Yje@|VD!6kBVqt02L96`+WcDR+J=v)-T1AG2f?J9=ey5U2i-6UY=WP5jdOxNKV zA{Kq!jwT89bF))OBwHGHh>lm-&+Q)UJrN;Bi9?-G0T+KT@kStueV_JXx8Ai#pbd(= zs6=L3nB|C=If3gGfOS1MfcnwVLk0vfpR7Aclgb>UuG}qyyPpVWxFCieG6pHmA{L@y z1#r5x+j@&S=gr|yQCrF9#Ml!U2gCOw(n_?*H&7Le)5YUv^!x+}qc@R2-$G}08OM_J zs>b?C+aHWV)vMsBfPlN{FJz6#;B(zBi%1R&YHrg*VfTNYB}k2G zstXqC>(*VBalah@OdiSH7T#Q6c^Mb1us$BCz;q!mS^VfQJV@F57ytZO4MUo`PsR=J z)>#+sM(&i%ORM&7L~rRE<=k};Y$rmfQ7iXPYoWh)02C-XbZe#yIBs|Imug2J>&z|E z;gpKMXM_)&x2~NrX*6iR_;5~L;90iy8g{2G8)r&6D%=#rM46VKV*v|KS;CG0$ESgt zR|C$YK18?bV(DZJZ%+)Eh?09e8MDGMk2dB!lC)+&zsYS=3M1;;XRe$e8X$}a3%@d1 z>HRrPuW?4t%d{qFmBkMy1sMQLiOT6s(07E*7XTn8jcggiS7_9vmgYSnPBHv`cbfsA zX<@T&4w?n38w>prQh%#+nb^vVwtlrAuRl&je)&$BUpO-~fswELj9fdxf`+IW16J>{p$w z{{?i{k`N=h@MiT6+m|{Bqj(c^-5hKGWz(ZiBjviHGRYSghFoIu9$w_QNyjk0poyO9 zL{U!k%(vq`Q$mPMPD-JwXCAugnyvkNmXL5sUr z^fB{MAA@Xg8PM5Wq_0L$=9m#w&p$G}oNpIF{I?Ut%vYac4m!CSn(wvy{u{ndJ3hFi z0@E(wqm4iv15BCF%17FvmRFA)2sZ4Tj>zQRUjdIXkKN(~Z7M38o+0UgPKu%}%IsKF z;FGwh))$1+-I<{1f#b?FN-(c$b6iydyZco&u3BD4g6mAYsbUs4vLD_PhvH0D zFuq@V%Fcz8R~=(mAPuxh`NN;DliP{*nWro?k?lHiw-2H=6{T_-?^Oat`r~G{J5_z5 z9`veds3Dlan&zS~ut?gZajXi!Nd#u!RfQW|f*<9PiM;pxtXG(A0ORxrF)MojD0 zah|K=Jtj(cn%JAPNZ9aF*s(}_0(>51%{B902ygBv>E*P*D8;PiOAx~lsK#MmMqEVd>o zDfii>M;CpLxneJ4P7jV5XFpY3!tz-vY>xTeD&y|4&lo3(%n%nbCtq@CuaaOc=s>#- zqVcHf*4XFXb3JcoVlnv;fTXLAzNVMbb2rI@yzhK<*#b4CD*~-_m+>gDUYbA2M&ghu z=7G-3I>u$!U7dCMhyV8`hJ~eXRpOs3`*o4VLUUwu--l#~{O+ErQ(j*lPr~@Ivw^@& z;0E}5+qV#)I*i`FV8TH)Z8>ErKEOgbjgYX*W0$UeVi6Eh&%;&yfSCTX51prr1^KO` z4S7sF^&odfIQgwae;mq(P7JwwVOlwa$xq#1{_Uz-*VShI%1^DXl+;H0+3P^yENJ?> zkQTwc2unxs+_pw$=Z!_4jNkhDVi{7g1LrO(0OoIwIbJ5dn55iLhW9M+c5_Yp@Vv?S z=*dbDT!Rg}vm?t07(ww0IbGswtmL?kJMZxNV1j*iI+Z6l1YIecpMaW4`GdTHwrPWw zYsK(f%-H3_8P=T3H8seEI^d`O3ik7|EEFT0Se@%r87u#-%e-X&hhrQZ-aEtQa_cXJ zM&wW|87Bn&$FtXBTqGZ7-{Gw4xv^eX=e<7}De>XUU7-%Dmg%csnt`!#irEF^tiB$7 zAsz{o-ZX=pGZzD2EwOgst`zTi(MA23<>UaocIh{UAG0&)NUQ1zMH{7vDuEY>9c)cF z$^}+>9j}8l7qsldTMN1I_EHD1CTr&Av##78q2$r75P(F!#Ydb>@9wg-299cOzsh#*Onu&lT;%PkdoOQ zLjLr91|5wM7Mv(7Gu;7kyg>-oR-YV7ID60}?E(k7#8+L7kCs9wnF%qfMW!S2yak;K zwa=fGW9rd8sKSDa-V`oD?v?VCfZf+UjJG<6FQAG>sQBACNY7HHsd6lFnMsP^fk9}} z!?vp6w$}l7V69NY5#e7ey73n9p}6CXUrxCVbkaA}s_txOZN%Fg@L5bg%oSXg-z=!` zO}$sE*TVf4f*M-PUk!JAu6=WaJO-Aq9xym!Oy4A{r$xF*tXLKtG<|(K4s}6bEsO65 zg1cIh8jnB38Kc}@&?0B3U#kKL%$m}X^ac15KmH&?HkhxP19K_16=$+TSylZ2_DX72 z=f18NQ)5lIOVd4%FUUURDxonr2u^2dnb(ADkidH9Hn`!FlNHh`AIPV;m2JXJ7 z^595x0kZyj?Hizwa=pfXb!WcRs7DjPlwJs=rpSKP!98WW#)>?Tv^i4<#f-}bR!91gRrBqQ?0{Sc!T%2<*JovP$A&knT= z)ocVLIu+5pjHfW?g3DA=A3j~67|Z}OlN~6H$uskpWe?rfe7wvcU+glA%)A;aR)B19 zDIWGIad@!}nGk>=dh9m2cjCG{Ga0-Dt~OV(;%U&mHPVZjxh4ToQc7}6Q7sQ2(aNb) zRk8vECoW|zsO~FB!A__vJjTU;up2tF_Ll_wPVABlf1D{fy@f&pyu^R9M@#%3LBfu_ zOXd?O@-n{CsizokGRd!2XBYApB!TQ0KqF`}Xdmkn+8rII>Sm5K}gRL z(*z~zQD2yxu&8XTlnR-oL!`u24Ksw2t1g+Yi9rAhZwO;fPhlZ4AYmgYXJpF3^8qpv z3ggf~30+C9dbdq!81D`RSd6pF9pg8LXo0a0vTm2BSSAiT~ z6Geh1iHVQ=V29&32n6OlZN&Gg{TX~l zwVF#Ath~w+nJ}8dgTc{hoUEfMJ#pvG$N|czK*z$|(wa>)xTD|g6=CPF$_2H)t&SXdEF}ojYg$f@4Fj9amJ=}sJJ`=}A?C}& zy3eK@4X+u9O(m1JvKdx1Lm~h^O0BLFcK{Sy5deyqKveQzlgzlFgK_UHPl@?u@ zBt7EN&lTG@*F%Vu3_UC)tt$2)uv8&tP>OnyWBW;5(6H1_SQoI!Q8b*w^_KeeIJC_< zMm=sUpP|1}%i`bcd>8x=n6ZGq*q#+c;L;+j0H3up!y=AVZH?k1<5?y>#yG?4LRql8 z8c69G8;=R((-& zxgsu!+2MflCD+XOYlrVa^ykuHgK7#0=8;w7z!*(ePo14B%48E)1Utk8$1fAA;tFja zyxreWaI#e77JrPzN!6}^57Hd+9>f{KUG^r#UOz6(nBfw%;y29zvhjGeRXPh$WEbCL zR(>{vPxV*B!*)CxSzhjpN}_g>n5;U{H49bA*tsG~kdn4zw=_=9(|R|^AX7gQK8Oo>h=14mqaGOY{ z{eagp&cMo~lT5I)c7q-Wn&9rv?zTX809P!AP$@v%J$B}x7hJVJ;(HNvWuB@$fK7IsFC53XWrLutVE{lphl0-7@* zepNrUhmbKj7E=z6YwVAM>RxyVb1hJGrIOHf=K|$3&0lla9pMH#*h<&hKDZnE&G}L6 zsMF~)#GZRJkuXAySJ_AcA^~CC4F>J5{46;OIfS*tqY-K?VE=+hy{~9C5k%L;ou9rT z*k8f}*y^V%mZ9#?mrKl2so8K55HZY9h@!+Mw%nrN*KdpZuDGV*T~Zk$s5OY7r9Ud* zbv*UJd%GYX;W}~U*+{LeJ&LhDrQANp&tgaGf4hJ^Og2%4fpsvdL$w2jFHm7S^Cm4W z=C^Ir7C*(8=UbT+RgL{A+^=nR(_BpKL?x8K-cE4@9LZ}dD1G1kW52~s2@wPV*kt4iIv>j@I2Bv zDu3lV+c^qfee&dYNU=H+ZL^iN0u7n#@>$ybT5x$Ou__EtfEVry1QnUU^&O`w$=rUH zOrG<;-C6>d@4nBVI6$!&i%e6WF=vUcFso;at*ZWUi=$j$Q$$glqta96)WS&Y3!Azb zhyk3VyzkIrz{gO%tej1BtF1gKMYD^M!uXmCeAw)~$OXOfX8WV0(n`-W#Q%%lL zx>RUTq=rErnTAs{%v2t%Ujmf@k7$=#`{bUZSX4osDjZEL_P}C3xTB&voBxLhqs;OQ zrHKbvJhb7dOXGzuaY)T8GQm9*F&4xVxoD1@v4SrvbMeohM*X)O^#QG?e*jZ@-CWs2 z1|v%Fu!YLt^e@CFp<=gHWbyVOGD@&Q45MitUJ<*DK&Ufc`}60vgQ{sW^3r^)oeO9> zYuNXF-2yV+@41NxaBaesEO*jaBLJ*BO#5IZ{yHgCh=Up8hFA5XO1 zCNz~;p^C>rVhYp}W;WL(F*2{S$m@+>PF@L;xCzjoqCb3p#_EoJ;|#*?Z0b{~-KcBi z0IiZ*;UdZtiGbIo{qXoZSG|%n#HpgaoVJuPHq^d;rcCw(a|vMhkxU~YY)6gy04?S7=R;_AJ@IuAv7MX$J-qi7i0&QR?f58>6V5!R-W;b zPu#IDcPUy6ZFFMXyD{gi@^Oh@qtsU~*~wFDEIwr~>nw!f9{LZIr|b)54i|RVVFz}_ z(L8WFXX~cX5o4Y0B;M|_F{v2TldlWq1{W93Buz2W#U`g9N(5zvs2^NNKV`!&IFS4| z>!x#$LZt-%l)SZ-JO^+3>G|oL;7i1BGAi+Ry)Sk-Sg{T+{4|dz=Z683>Bburf!hp8}?`cTJ&#=N#nfKEzf^_WC9XPRKTWjwgV7>%`t zSl#2>UMA(nNP5$Clb*4=T83c!IxKSO)q9UzJ!ASYZEHKtT}I>Fra*&TJ54=(<+4dD zrJQU=UZ$x;x`t$8LSAJzNkUN7U_iulbwaUO5MQpWRG7>+h6&wfASI_3Wewyj}dwB$%53MV*+GROM@|GT?p${q#ArD8> zYD)Rx#K!jrN_zbT%#Xrd1S)CG@>>lO(#E%kNL$n;>Hc>14l3`~P$c`maem7Vl&v`B+R|5|w-D}11ejyrsS-HH3h)TkF63Z4BK z0w1!7a1jr!fPGqXYUJzAE&t3%E#8RE;~9g3BiR4%i^hy;D(&@=*Hie-icrfH!8fQ)Q%uBzOdJC7N2 zwG^N?`}1nols>BYjjh1xJoqO|X2oZDGhHEu<(#!sQNkX!KuYEQH(QN4ZMY}p;_Y@! zlF-6&Rza{}Zl{m?dw=2zfMuqxBCiGJ19hYCh*WM5y?o%gz*O6RGaSem0m%e5uTfBY zwmJxvzbN3XD^M4-1M()Ko#YZ9=%F1d+_*l6<+z(iP*}h}rj5o41}Ys(iVX~Kz?_h( zRvYs~C=EixeIzH-)_15Dmk|(s8A7G5l|h{bWTXleSeYKoJ0|~#@kq?{Cb6gPTJfV# zVh=Al(tGdw|L#AXxefXg2`=#RadUKoLth4&hY`bf9%}CBo6wjdt$$!nwzaG#WPw8@ zQQ0cyvNSNlXl$jl-Cd{yyJO#1CBg!I=ns^M27oC*mzpRf-u}G145l~U7+;pa;+n>B zYmisESwHA=Y%!N8GbRLlxT6INED&>878KQ<%YCMFQtVk~eyh}Ud7u8$k^Cxs6&)!>(s$4V4HkO6O;cYAYp z+I|lV2<3I+Ga*R2Kqf_Xqi%*_h(aAAkFJnrlS+v!OUw%Vc;RIysR;keKu68iVeBR6 zz|3bs`gh}dji~CD!WWt2f1bXqgi+*N*>i#9aFx*m;=tnp^RGJrJy8_ljut_G8Du2e z{9ZHYLeuES1h{F(TxcHHIOrlomX5h&0}VC|Fa^y%jrXwGib8m?;)sJ(v~J4cWU&Kb z58~~=83W{%>1wB^HwV%dY*1!;4)IKvd0{z9HcUW^Lf}sISV=TtdH*T`dbdsnl&)3T zJ*0_>yphPbOHdf-cgmp&s2;60wiClg27y7os(pPQ38+w_Dc3%ref^Bp+ zNq7l|aGUC;D|ZJdRD+!x7A)tm(l^uSvze!txsT=YP-JEvSLEmcYwHOJ#iq~`ArbCv znpIs6>mAZ(CGsLP&-durUm<#zF7^KuP>>XQK4q{hNjtR5!19?MJp|zHXYI`nQVV@L z3C{Hh3UKF9T{f)G+vYOz)=;IDjj5v%o_xLKv@ie*@*uEYtp_W(i|rqnt8R@sp2G#zAds zXogP#wQ!y+TU`z`X2&(9+FN^&UkD1}XAnv`Kq)jpZhPL|D#)guH>4A8;pYMHd1VgT zSfgy0>~At7_L^<##AjK9N*(`tI5BSiWkAq4csnt-{O(Ee(OhWWoj&8`kC?$xq;Jl- zkOUnCffbF&>sbB<1=Vu8_9(+8U$G0__#B zGkSLZD1w-JV(kaZmm8v55pEZsHt0-fBy%+9LVDVb*oVWiJUgIjmLepjCLrli9%!7M zdxuITQQ%fhTrWMI@NJr4Ox8UgC|lH?Q-}KtsGeNT5IK7MRq61rykQ9GV(m1^qiX(U zxf+^!Tpe@V6-YJJTUU80*HXjTkPD^>Cep^J_~Z$KLJe0k-&KSz65RO@`QIY=1W0l1KBvZWu?DhhF{Jt5yucyPAC;-POcJ4lc-zk z$M#UB_0pXn%Nq{K5Lw@5Fyf_(SHhx)dM8GDl#h8N-*p<3dik8!Hzgb|0s?YRY@GAJ zlyKtWK>6$ClDM9D{${e5;*wR_Whnxz6q;av&5nlh+f{|M&}miQ|9g4=`N&zZTZrv# zj>HGZIkOD%)Ov0=p|R?+#sC|=w{D_?MRE#Sr`b^sb(r*nj!kkO*7LqY*SM<%BIsd3 zB{W<5fB_BZlP)qIv>r!Va&E$FGxKsdeG!rknYYJV$*ZHWV81ZMx{~XM11prbiXYgTDL;xQ8UYJ9_O3z&`@HP>cys8o zGJE6;4(nnX3&sO6MR-gOv|vNmr4$YjkD5}oJZItO>G>qo{6T3$y?n!PS{x5nUk*kO z(syjjt&rxwF!!oY*og3oP4)t7rTQsp2waf3so*x zUYl;`f>;{!@;glmbN=0gCh#lMtX8wcd6JfHt|F#W^^rG>(;*|TIxBa4Y>{3gO;}1^ ztT0g)s(*%0W&P6eG!|#kE7g>gs~HSN^Zb*LD$0Lt;=G67Q}F#(cd5Q*vm2NY3c_BV zeDGQ0@9{C+I(`4G)As~yPVP*9!}1qXox^jc8<=1i0hSLy9MBZS%lHPhabu`^(QVR1csWlecEP2Yq3N*91Mg#t$ee<73-0|JYB6T~i{a9Iq9D z_>0CDK00F@D$EEDB>$HO1)2wZ_ZC88aNdtsx+6F1N6E_^{I61#;fK?ThpNh(F6c%5 z6c4MW+M?283Q`GzU7#%mHAzsxuraO@2`@{O@aoPC2P-MsOy=EjJTQJRz1k}7^#Mr- zbaQ=N7N>4f+P?Zy5&vkBQ&(A^cYyUTkgYuca)fpC zEVgIoNAmiI^pw?#W4lWQ6Ucdd-0o+KxFCMkjBDsxqKpUdGYd*`$vTT2$qT(cHML`4UjJ>>6lt@g&axFOuJ&>=j#zpl zODw5*0{GM_%|vagf^Ws&K9pFxU4FWr|FgPdjFeo?OIPGl>LS?g(`XFp2`8c_GBp(G zFp!(19}sNtuYIv>{f^B4Fy50OX%Hoe(V|gy-*9)6Y95!N3Vr%^dfwcz+2;kg zn>w2ZV{Oqm1jFrhtnKy^_B}5Q&#@nJtLmw9f~e~GqtzT5B7E#_$^r37A5J-!6fT5G zJ(?!q&~&bpYsYt_ap;dH;2X>dNq^cw@qXSP$bg)Cb50c!0J2+YN2}R~>gp{xk_7Xy z_b_x0`G8`W2a1*@^ambDQ8e*0FZI!FJL}V@e6NCQ*cU3%xo7eIYLD@5HxLL+s!ZU& zCE0&4d8}Oj8F+I1HztpR^?w_9+PiMaH2&Ne7Q=Riw~fQhoS93!!jdHb4{=LNafmBJ zi%)bl(XXYyNNsSPp#1{4KW7KTfQLYm$cHZ9(D}WaG=9)}4De)# zX{$)pYT4gKMqy=a<%iz}eo~tiVhlJ|mtRcM|FsN{^D5CCwVC(s+DxA*N9?7~4K+9d z+k>lN?fEzge!=>9!Mueby=RFRPdgr9nOH7)?ZFpg{ifTQ`?NhoZvde=>F_+a;w%aGVmpI&?5svui!UmAJshUSl<;cO3=4 z8d+D96CChrk9oD(OK{N!4Y1KgXzk=sUA52?17EV^pq{2EtTAdJIkwS<(6ahd)6~hZ zGA#rcZbKdyAynqfL^l`I1O`yNcSeyil%n&K5+$7-zbKtoH13~*&y{d7m}z;qd$;~Q zOS|Chr^M1BKZSzwkR)|}yZS7oVe)f*|2QCYBZI@8yJHX|`+pd_hb2(}WlNxC+qP}n zwr$(CZQHhO+qUbJ?S4Jz+k-oK)BJ#p$c!Cpo7$jYh*8&XvPfxMjVQw>`KBsB?JL?L zO6yzi#+1;+mUeP6$`;2+d(WLOWp>q2T?Kp|N5*P<}hp$}NjEb-8+zo1!EejX@qsISfh$qWd+ZnWV+htl{AgS6gj!UF`U3i8$Ag1c@&NYJb>->R9OF zdHK+ZOQ*b(OtL4C1PVghprN%qp~_LWZ(BY2N9QN{!p>kavnL`kGPNO^utqh&2$nVI z_pC4^L}qkJ;xVE%@6>qt-QcC8NNXDY5J59{Z4aELU5^WdjoFt}~l z^sF5s%_W5OKG_1iml?RI_QZ^!JWV=DYu`M`mFv<6%C+SMYcDpJ6H3RLp?9Mo0 z#&gWqKL1r4sxKHDU!GbvN2-ivg74Q^!4Y>7Yf&N!9gi$JO@+YWQqNn)JW**W+uYd+3DUps!0;bVdEXA zh9oe$BYP15blZ-V z00VJ|acP#VXXEl)ZG8~mBKCQ{U7dDEqxbvs7qiX_z-&$Hu5AT}M2Of;*Xa!B^p?R* z?Zr^S6y%~2WK7tA+*L6a*k)|oT$g3(B@&aF&^_&}sq1d;f(xss0^hF=b2s9&#P&=N z~A+c^m6GNYQ4JW39rmwfb zP@o7V!jHopiZxOd5C(FT>Y@SPFuBVNv<4l!*Vl}!2UItAt3 zoM)n`7*AE)3Wh-Cv?4sucOZTDUB=d8Nd>)P6O9o?G-Yzel*l91TA6=2JJ6sFP79=i zG9I5onkGdU)5rElp*n@0q%ATi^`!>=Bik{D2VFm3B#Juu!E20A8g}z@+uSDj8{iy_ z(|N3SmcuqDmxEf+Al+-_i$0v#&cTD@SO=aNz-8b zGB|FS6d+w1ucukw*{SdTj6&L}c01y&6v#QzHe9 zP6UAJ2q zQfv1>-jwTrk%&DH#97x8FRN@vH6?ZUKxHvQTGog=4-}H?ZB)sWIqXP>NN2iT+*%(etAB5IPJ?<)h%sy#qSkf0TxO>8G@*2x!HPEYZ9vZ z@ykgD(a}gT7@2^Kqo@abqwe;GP0tr7=HwHgLy;dYAbBR^+-|*k7=nAOON?o%t*zjN z!XuFBr;ITt=G5gd_$GHn54v~2Ln(j3+FVd$#7dBM<5tW0St@#`>hH}r8v}0 zw9~`)PNqbqCsf$}mYmBEPe*ar1w$u$#TpD$)MWa@!T-XZo%uZrbd8qcCZnq!BiMic zmVMkcy1IeHPo|yG$?eQ_8@wCX>Uz<2dRA;SuWoDBH}9T;X3?Q})_h=y80@q^l;)A! zJ83zGl@!VtbscJBDO8JmYh2-F7)MtbdKT-vZqH8E63UIfCldMQnXnZ=;gf}Zb>uiF z{L-vmOBN!1qMX*Oc-rwgx;t&7CTDAQGJy2mLo(F=`@SD86m7AeWY(s zBIG;qMGP!^+6Sqqvi^g?Sm^~UJpcn)#r`55auu6z8bDJ*-Na&E4yq)gq7QuB*=AiM7?E zfMxd-0a6rqKYC^Br%4?aX4%gcjvE9b3f?yqB9=Y@yq-0VkL4x(z-YhDo)tg)r)E5k zV%;?v;lhZlrc-i5Ga7)C_Nm2?OK^kgqXoc~K$kAqzqORg=9RVzj90hdaMR*5fk`)` zs_s#jcL%K7YqwR}HxvL;(|Kda8!XtT)vtDoZ|N3EthkIm6d`?w!=98>b_c*xGpBoK z2xBQkKME!E*^KO~YR$xPrLUxXXDqdYVHv69j9qqH6&sY`gg7++b(YEpEuLu#vCN@N zgvt9vCX=Ao5%vsUaiyHEVLOYDdLuFmj}8;PtE@aeN#2KMkk%uK@0sy6zdK`X>?`_- zyb=0U=V`n%bpqd&8t%0F;xk0O)Q!cs*Gfh}YPbl%xYNWx%&{Th znS!%c%7m}4JQ|DUbeu6pY1Z5Yo{>gp?<-YYHlX?;i7*a|5p)J#h~@F0kr>t{M>Q$5kc_$4Xtz0Zdg--H;{>Lo(LG8fh$@$$q@Mim~sM~St0 z0+Z#G(qAqXe()s;LFK=&VLmMyXDi9z_;KVQB5YO$ndm4z?t{qqu9RXWccaAYt@FbY zXOYqV-}}#RRwj+!=h0%CoU9WQ6@A5HAWZ#RBS9(~f_hnZKP5=T*(#-nq+71*T#QgV z-7wx!3Uo>-9_w}b@~Zh4K~~na(zPNLo5BS#e+hr|8%iZ;|xFxisV7xxT?-8$#2UXG#@UQ)4Cg&*Qef z&e~5wYkAp$PKbVj!b;otz-}1GRP$S}Z2nC^e167{P8suNrSy{cE$>N>9ZtU=Ai||{ zucba-qXZ5w$)ejzuyVM(EP)i_pO~-+zSKZ>4C}3REweR)MT>8rDXfSJGj!Wj@DdW| zque79%Ef5K%xoIZ{@5pCyX-}n6|WIn&O|h!4>00XoLf}l;CY$jWI>$k4MS`D8Rl(b z2aMj=W(5(4Ked2<2BZ7n4;ZWH71%Fw^rWMeSf6BGv`ymBqz8|XV(`$ZWR-{&g4V{b zeyLDttO-<+qorr0Oh^T^qpCUj9Jmb410&nbj-w(yE*!nuWIPp^72u;Fmy5WW7`nPX6=QEK~uSqrqhl{Af}Qxu5WGZdhw>RDdm~s{kc65rJPId`$|bkJH-Ln{YS>6 zSTkT}Q%8Zh)qngOL^eC_9JYui34G8$T+uObf-|_K`?Z&b`l@z)IV38`v3r;VDHR6n z#76AflVYFH{<~Q6#ydTu8D7Kg$0$&%<<-4d|Dv;wK2}a3XHjHU5X?YQnV-&+O0~O4g;Iq*~+j0jg&3Uc&DDQ*B1ni)fKm zl_@z=f+Q3~!az6xEwvwE9~V1%fOT#>@RFTYGRd*G-8tU3ov|OVr5Ob)-w*!s>gJSQ zoL@IF8}^BR)?GsO1Mo(P|9a&Wp0bzUaeErn$dMnR>x?fz!ZV2 zL$!Qf1{`DGpHIE7Xz`v@jS~wQre=%EkB5FEODC@nw}#L2lltI&gF%diYc4XCOk%vG z=crTJWd5T0;wi?psZx(+Gx_PDS!=54>8hH&1$K%BrkidRdBy2vdo|imm(xW#bpPy^ zWtUM@!`W;X3z|eZwNR_iiyF~P9J1K<7!nPWJk9S1qyt&i2dCR;^{X0T;geC4Rlu8- zX$a`a(x^FVM0Ih63Tyq5sD~oA$HoG!?jst62M;LaLhqxKMQ@h{ZMaxUwhDPHrLLW=fXgEi39so6v6AGB_-KD^&pK;=w*|(~>nkb; zkb9H^c^Q!7)8muf)$MnKehrj6l?ScCXez%y$DgVCOZAuOqz@aIA7wb`9bwz)giuYKZAb!pShRzKx}9HB6Mn zN!(k|pawcLp6sm2&_IDh!xu6hLRF{a!6D8wC@*ybXJcsvF`UW<8k~1gnz3C79kjf8 zf!8FsR&~De`+a5b2g?8^B6Cm7VC)N@B?ppCW0+-W6J*6t0Wtd6Z1WN47-X6Pu7Y_4 zMsS$-wdCaiL?MBO3u~O$00d8^<7@6?ximKKynZFCCF!gQ|Y623uvs| zOlk!flmB&ebEv^2&|Og+9aM5!b&nhq< zr(Q#Ct1*r>ngC+Xdvf3#GhIMaPz zxmSRdGXQ}#G$>|>ij>y@n2-8^7|1D4Ciyh~lM%Pp->%b$H6QH?FsdiGEu8W>fEAh% zBm7iPXGdpmA2*U`khcYwqjOpomY%Q!SB+ou1kSwG!M2U^1kB7sYi4KLx+&72OC%hr z`^Tnhh;;)KWeU1_qydAciOr*yYrm})J&>r5u&&ZY4D82Ko28|lb@D;WM{1kS?iNgM z+AbirnE`KV$^ba29}H));G-Ae2(A>kmdbH}H}#yO_D@YMRL#}&Bq&oPpkQJyl~bEG9h zVjkQhL{M{bf>`RBm%k#PY(P)K{xpe7;ASxw&*0{^0Q-Cv#<#=My~U`7#z8{Bdrc}{4WpIyFPahcZRSmM>hoCn}weQy$bM)&~03tWqoTaU97J#}C zK2>@Ea$wbIcMXEUEGLL25|-j42R@IScMT`Q2gSCUopPsUeR_$y{&0Z&U$NuzcJ-Tk zKTc|oyxO&pGKS(I!DD9)JME_tp|D5V%4~fZow+G6afD*7r*-t&xGi@sh*p&e;6n3_ z^6Uh%9~6=6wp#|stOky4cW-u#3WC@hzMM=A=4_GEpG_wslQ1(DiM5#TSA*>kb*ZVH z*;?x*8Ne1|42~9KUXM+T8k-Cc?N(a`u3Ku*j)dp^OX-C{@hgQC6JBy&;Q=O6s*-e7{8yQljD!-JcZH90duWYM7ylSsg=Jup6gTQLI}NO{q` zlo;Hbbwx_@PZlic^q}AD(9Oi5-OtIEtG{=~c(<^6m(=|Ub%Ys$9IgwIdHTnaf_wCt zY;V&&1nUkKq*)CP@|=v<8_5O~*&$;KJ+;j^ca;_#Sx>R0Khpsw(gW?%tD?NSS z^d!I;IEd8NbTUJtmm<-#Kc$qxyBeVnKamuGYH#hEKwy;Xs~t3FghG9{C3h+?KBxvfcX7u*`muPdMdglhrUG0lA9IGU!Dvx9EuxE#zf}l0>&A=jyPwey zZ)e&E`i1fMb#(S*;|Y*5cOdHJo%ZOK`kVDCbBOK`kT3$nCg7iylx2!aB{Y)N=CgfYu;dskz@Mq3?&U$j4kzxV=`7e8TC9LnvG$5aWY=al1bvly#zxd z`73%MLyq4SuTI9so3LYzJ@)Q;(Ns@C_2icf#z{Aj$LogX#y?-xCi!i--}Zu0`~DWbh@m*#-V?5EyK#na9`8=_w8g^|PCZ#E#Grs8mdw|{F{ z9k1UC9DM!$+K*`yN`4sn>b95QHuNfL9?#U5QQGt?kreiA(lwczXK!1#YyL$-jr2sJ zyAE8$@>=K$kB4jlzPJK;W1`XYgnawm3wBCT4O0m2 zOHQyeLI4zRTEYO46i~SM$F{=@7Zrk;_K->DdTa&~UhZ$_1|0$p1a_f4pq<_G3^WkH z(SZd9qti2(znXQTE`vr?P+C;5MHS5H;n|$xb;2Dg$uGn3oNV9h2QBpU)|?M0Pso&v z+617H;c6Yp(n7%FoX!H!hIx6*J_3>btB~fLX)@hnT-=(tW>kkG#ka#-)XvaCL^+2j zvn~WhgOsHdg&*x|{woI|!tzrBTIrU6XjkaU$oawj{RT(uxTgN^o8doN6$A5s0-Wss ztyQuAue7RBt!<~{vHu(3JeV~|<%rH4Y<+A&Csnhu-#jf#+LG-gaB2w>24Vq_Qp0-$ z{Z0KgmYYW5;weOAA ztC>rKOxA4C%IE!3SYWTdW`078heAZP#Hw{Oe~3PhUX9lPop+pM(oFR*Y8}J}J@z=c zrTKmTNzd@t6!BN8y}G95ov%)Uw9J!v7N+mst+QhnelD|vKO?jcIPlC;qkD5`6g#_FZow{w<5I9qnPEa|XNTF>jKpjqQCLORs6bU(2>#uIi*MGD$_b zwRrY*5tWA+bfTkr`Z#}g=tZEcrcxYPuhRcEemQ3zlxo7=8-z0*x~gsFbII+~N~QuTM`Ehu#sRo^D^9ez(`-`TM#meiLY* zn#q)xUiq|^y5$C)*hoTY;`3%Y`0p5xMh7YlHI?~@`QQ-`JM#Tb92&f01b-DHHWw@m z4q0HSgqthR^t+G+eRF~*>;Jlt6R}_ z#Z7US-UG0IlI7QHqtXrMJ~1k6*stGq^@%I9?p=zsjD@S}5<1+Y3h#~J3&bo)Eg&4c z_4XpVaFA)yp}0-k!}p3tFUTM1e0TeHMf9PojKu7dHdEc95(1p^0w2qAT@iQJYU4g= z{N=Ua0^x;$MPIu$(00!p>{4>*acJ~x!tgT^g+N*-V*b2uCgUK;8C`_yrB?ERh~4|m zis!lI!4Mt{3r;=w^D;mHtR2oo|300~esUR!XJi=A*^tQfNY-mPC+;5crX9R_t2Q#( zr0CIcO4P8YMAn(lFxoUNxPnSHzg)3;9D&I;CpME{U3EWVb7`bHrKW=H;m83CSNw^I zFi%Dg|1)o{AW(wiEi@F{DA9nmeP0(BBfQw`{ksdl2-eVjJz+a>@!s8kzeWEAZ}^9y zO1EXt?b_dp#<3x8CU-D>of)qtg92bSe9^Fy#ne>KbL$i=g3-v!;^q($1hZoaWkE2O zE4OV|07AeB-n-TA%C_aMn-`UaHAg%zib+{O`Yh3-x*wP=c3e~w^vni3paBTV)W`Nu z)9k+W@0{U6!s@Q@5jwNO>jto^7hJ@Ul)Gv{h=isZXjH-0= zQ8>y&a4<>-OT%ruP8Tlf!d&EE+bjbTf~vN@?L)huVLSN(Ovo0{D3>Ix_b%5Jg^)ZwIhwQF5TUy%kA(qcEClO<&%H3Pl zEv3Kg^(gChTmi zE4&@|zd_TK(q)u9(o5ao`TCUk7wXUu6|Gdoi|e&}XnEPoN&<)I9p+yZAF?G)NpJku zMS5*kjm?C^)|~l_cjhWR2ZEH3k-(O(ChPXMXr5^K5w(K0`2l=Lc@PfiXtxIr6RgxDpM$!nPZ5*A16xJbf2#a+)E>Y)3kJR#A~N%Ns$a zBi5J+Ct+f@(E2V$T<%)AZMzkrzAzI@TUT;Gks?qk%+20+yDd`4oB|3RMBg^W_IWtB zY0myb4bOwh-v~Sc&IPj1F}PC@QxrdnW7nu9Aw4M(oH!xe0Y&#brFhj3(z)=^5HI;^ zmRpsIIUr5!7FZwi7nEmqdNN0bs+zAHQT!Dw4soHVzFBa_>3;dvsTz(!Sq7PsQ0eQ+>@3h z2@+5izVsHQtv6`njXRS0HI)ddd{eo}ibT#hggfr*g^P2Q_O8~;Qe&l7yiFGp=tcYT z)jMzF@TQ1E+EVl3k-9R|L&!JgMpPC7N_dka_EAGcMwQh;fAq2w&IK$DQ{~g@wdU=Bl0xe3$_jSTf5%1rNZj7@gn#g_iJF5ziDOr5BUOtE(WZw&VeuKqLDr@&L;Y; zo1C-YL&{26jMmT%AD0l$2Cdr16~hy~W}TH2@`ezSVo#m%CB)v)$V=U~X-Z}!@#dmv zu6&bJO&jJWVi`k(xMQc9?Y3s_qUybFsoctCw;DlVSRSgb#c@M}&pm$l(htbRvoh7;V|X z5FAnBs9yR|LRWXt_*32DS)dHKj({ppXx>Z{n3s)a6NG7JO|qE5=NMN_8@Azj@r=1_ zk~hMVfZVR@-6^JqLlSl1cw~iHx@CuI2a#Fqq$XBH(hhhc@u-8RqI5W>?}jR1{~?Bb zId&`l)a+SZK@|%&QU0inqW0Y5|K>E$aL4LNmM5!c2ky%WUPuO85mm^NcK7%luq75bap|5EG}8DR^?-)FXXDp6`OpVJUH1Ka zAfgd;Go61b&ZFoiSB#!^_Jt6NJuc;+DEHr`Vj>)W=(kmkD%$u?7EYOXDut};a<9os zbJy(FlK^~=y_FXR}=i~VN6WIVrS?%BC52XW!M0A=4t3k!6h znoK^Y1EIpp8k|1|P~b?gd`Se=*(;O*AhJ+Z!Bd?giVajGOVqd@6r}eERnca?f%p@wM+n+tvA$&V&ZRH%MDN z4wJ0dJmlILJo%i#DtIDBJpVjVCYBv;8NB=~whD&T%#!61@FHW)bm{MR5XlCkt^C7+ zIh6G*F+{7VqWm*^TuS&1@2}C@)p?_wXGmi#yY=y^1i*C*Qn1SeY`>nn@=G%VTo zyeKT40}{}Z5U*)lt{Op!Mrxf~=Wkc%zM`S1;=n*(aOx0{sGRe5?DX+yuNiC(x!P!UFEa0j1tYaFf4iqk56B=7&t$y z=f+t%vFFI)PtMH2exHD%%}oypGEM4++^p%1S$i>57^dV3gyJQ$_eGa@6U^?~&%hHd zhn!{smymOJS~@(o^7XzLCM_}5byOL}-3_0=)^2bb5MfH@|JOy!%w3z<>Y$ML_ z+vG5uzBXXNlEmQo zqJ2-?mW~3tuMas~;x%PaiPyC9^pl7e1mf_v_Tc5LB1)oj32JV*-U^y%VqQ#-Qc>@i z71>6wBezy?9qw<@Xz8_bT4$fq$J5tsc~Lj_ss5)>CI!rnrfTL>qq@>|{mXf=Ob`N* z+Gn3tTXDzar?{-YDSMax{mD9_pPo(hiSnR)S>kw2>n8r& zy)^m&uK{{Xq>w1$3Fb~C{g%f<=r}!`=>L7+CErKi1K+!^t9bBBG6#%3$t~=-tl7PZ zD*M+vFUmZXJp)D&*p2M@Hi&+;eo$}UuT<3LgH%c)k>QTS=(wJJklyd_$^E*E?ODtg z8)}s)pf~^W#K|LF@qYR5c(h#K|Ig=h`+0F<2NBFOuZWZVmleOqaJtuQr`F@V6+50@ z0x5(<{(Ic&ptOBY&Gqs{m@%f;y}y8w2S=&DLVV9VyA3)1O#Wng(RFDSUkY++MquLuEY`x!c z?iqf&N?oy#h>Bbh4IFVc*83Lv$pkNfW`3nl0-QnNi(8Va zO;{+vyrlS3!H2OrD7t9n+sW1UVH?t@Ou+uOs%$H^+Zdj%;GFALwO8Gv`v|crTyX4hXEGF9A2YZ@;^fv~^S2WJ{kG)9y@&E} zH83D3SVf9}rBd{IwcI|Rz8>Bfl{fI~gKX$NL@(QjzYw5Kg|q0KRUdwNl>%BLr!wFm zXes~N&3!!%A-q+_D#mjXd@oQ}XF%(>y8v_s)tgI^&S4P)e6ApUZ0^Z;HTPzkVsQP1~`d1mZyr%6&}-W z8Mb$F!sj>$aE#kScN`VVu+b-OjJ5t2>?BiYJDvJT3CW76qwoFxE_%8-ev8Esnt(wB zzJJC)M64kwa2EF9>M6bcT%V8D>FQ71@LtqoG*je>^1bw$fD&QuU?k&1RK0M!M|S;| z;B(cB8<@FFw#3sG^qUn}52TcERR%x?C=}Syb^X;h6q*>sI!^GaS6k5?4DwM(@yg7G zW(=Yu;B>6eZ`Gn~xT8ccCA83Q)3+L!I#N#mPx%0piA?$gUeN^OevJNqR*RWn&gkzl zflX>mnA=6bGEE|!uyEIF8#RG<*_cN*D2XRVS)zVTbr)7%K)cu6`Cf1qI+8A9KZI8B zIngk4U-M_Crtg(81*Blj`T`9s#_TNBlm@{5@SEsCF8X!thQ03Bv?AHI9fx@+|GgeYT!2TSBmEd3k& ztGn?sfv|KL_de>i9wzuboT*hjHl-;62Q~tq#GmPEakE#w*zdV%C`-S3U(Q6X{;zet zP310gCCMEAoq?%@rB1$lMVeqlhGCERZ3L2)D5Q$FNl4$8s_UX4CccZ_vPzdaq6Jp4 z@T^naX9AIWIr;39Zmau<6d{OB4xVk2=Xe?CmIw9(UyMk{B!KNGOZYl(z<3?*-1{m_xO# zc47UfrFAG#DEA8hX|5+&BS z;0ojU)@7HySlkkDoq%1=tzrk1pXXW@!iACVi`sW4o%22_xDfCZ;1zu9_jsWb5i(a0 z!ir-BHzL>VU(P+ldeUrliT#O46&$Katu}*Ni#YZ&#C-u|qMgR0?V*(Ruc{lBm9rvh zGKFkc*8a>?pabe^!gzCEG#ipx7IWAh^;A6##$kOs=9i6|c0t>4tSnj1YUYj<#cB5D zTEG>JtnxM2PP?NK0kZo&V2_7H6sK{J%>YfxK8gZ2lmI2=IlmOXrH0KT5+Ncv;ZA&Y ze+c>ZW?A5rVVQ2{sg_6`f1)5JMMM`TKWB2n!qr3Gd7QdSM=>+EhPDb*HZbT3mh`6 zCH=O8txe*=Kap(xzJ-|cgSKkj595bzcIwSCQ9x$VnKf}uxck&=0g)?n!h89-e_o9| zEO4EOV5vKn4P#yiMyN=7jK@63!V>5=1G8JHEOywZP*JNFXEj|Ks|N_V#9v9navOWy zM#O=l{&F@8BT;`m-l{e+MdnkY`-PB~ABr#WjW69aOH_s@?_ur-rMO~htB&n%GAs6U z-L)7Hy6Iu{=jHu=T^&66Vdo@4V>sn0TXn*=78u)XDk(5f3v4M+hzjf%xsz2jHL`_n z4KsUG+r{VNkk)(Lp;%bGh1DHs4PzKVkL2s$*CCULX%)CEko)f(TuH!&6jbroUL$5= zF~TiGN|Pz(6g6d=AlZrD)UjqzI*vGk$>tsRE13+PozBPT7=-4DsAew>9E_Fc^THV})Y}KY&mmK9Vo0#ti*@65 z$;nvE!=Zf5*st%D;G4!W_xwIxUgu3Ja>e;3l_bSvkj7ZOV#;OMRJn9OheX*B^OrH!*dJ7c`f^Bp1=m|fRz(mX7PG;N~a$D=Qg|E`=q zTm=>XMn?KSNz82lrTx$%5ev%QmkqC z$q+MN0|@xso(Hg);Z;H{WDWm5T9!n3_s|lTQb48H9z_HZNRmj(07E9qjbxAwN&1zv z`+4zO##QhgB8#@}&WM>6*hCZpvx}X2tj~`nIbxlh4Jf1_aX#J1h7({`C5wa~->e|$ zCP_qvz2L%lfGh*@Dy7jIAV%vlau~7#Q&b?Eg6hX9aD17=9YjXy z-CHIIro0_$FiymWqcA#as^@V7=1ocXIij|5j)p=5Z(Evmh|ldIZiT1TV1=hFrqi&iKfXYzRG(6+JlV% zG}2+Fy=H_ahe*kz;fLxyRCGqz1&xoB2;URZ5zN(U89o zGbCUO0|l8raRP0cgAB`8wXziu#o&31(a*COAcB1DDjAyj;Lb}`=F=#wmjR|oGQ`pP zSzvPBctVJa{v&2nVT_UWe1;ArK36kmBXi4N2vz3kSw*I-a31@*kPC6L>1{HyY6>WOpo|jl zpPZKkPV=LZAAJZrI;q>il+#U`-29P{YeN{h+f;&f`a2OjjIQQW-@2Di6~bFj24hA2 zE5f}h#(5Q6$-_>rTM*vy08`$`$>PYu9P$#RA2 z-(5SPU&4L&WBozjW`MU-1EvlK?`n(d)&}D72{@#;q-Szw59}p06Po&1WHX;byf8YMB|35d(`Jdr`BTnp`|GUO2ZRhPV zRKNB50cBV>5)AKQpkx^{9C5dm#8Wl1vgN5<5Rh~tEd&Dqg{H>^{R8}6=hrZ3O48+r zU|Xj^UT?bnx7_A$)(B#xk@xXm-G6gO2fzQ;nTz;g|LKp?z598(A&Sd@OdtJwsU5LT z%VvH;fh2(?IUjU#NAvqLYy4*K0bN5xgG?)JFzO8Zn}`@l8gIT|j?Wi<^hE4YZ?$@Y zT2H2lrC|QQCD69b+ovyG(0nH^gEWs|3P9DNnm_--?6ALIUu?~2`wkjoM38hEMCd;s zu9hEnS6@!ctNrz|Qg3Y<4uTYHy;1^fEmoYWgLHpOcW~VVeK%@VuvxMTsH|5(MU~$; zzpZgoTo;CiY&TzIzfgQ?RYK~^h@wMUvGgS$Qr!>t+o9Ieb?+Mrh@vFPhI(k9R7-*0 z8Sc6s@%FRme_OwyKLf1rbvD*Dv4_KVx(TBtvPyTnn2A<8dbui|It@F7_wlZX?p8l} zDA)ySp;lczze;4mm^)uU*`_=Aqnk)@+fco0AmdX^1#M2zFSxBnNQNklO`wNW6l>oBGzzt*TnDJ_S~NwX5X5 zc#svP-Y*ajk2#)%^jv2Tq6+L~WV#;NQBSh*V0>++@!F}r4iJsgz<1SD>6jxUp(2+f zgef_uSJM?WE)dYLOjWG3r~0CUs$<>Uf#7gzPTfHBZU$8(Q_LjUeDbqUrU+X+!ro8c zj|%;iZHwViY3V@96J?g~%PQ#!Fsf*wX9V#~GYLLR57NAFH}1?n$dNdlbAA&+P}o*q zu&E{JlR>xAn)cGD9V%O!Y^+*hAUs5?j!SZJT&nJ#57(@k2@obZq=&y1UfQgT@-W#i z1`7KZw9tabFA|c1EW)osXU(EuVC2#S702+<;}{Qv9%zh4ayJQ5C*#ykt!LtT*g}hQ zL0FSE(D__}WfCJw@yb4XZs5IP(j+$#)esr@r+dN|%c|el@$KntZJ{_rj}=FID8p_z zGH5OjK$2BuK@IO#`0QQnR1#P;qQ82=k5_aZE@Z}PR2Az`OMEnK08dz`wxe#^W(&2z zsUej3D1pT+MVPVy4uhRu%fwwB(Ce@VkSLU~)_wv=Q$!uX(!7dYtHQ~;VI>+!LY)%$ zFcM>Ic`yEr0~=CFz7xp~P2;E?({LS&2`aVV--Wg z4UKyE=wfvPd)TJG-P?WR>@?S_*rQnx?|$_pMuv{g6A~CfPEP|h{iR!;fW{leyBy{} zNSgt;;@BPPyjSTk0Ep*BHB5{1h3qzMfaQ4#?A@vMs$I`VQwWqFOb;gObTE^%FxugG zR)ZUe>hIDwtT9mv4?Nf5a|)vez7DFP{sr!A2=DoXnyblg5%K7lHD#3}J{Wc{TmHNr z&px^dGVWHw@at`h??}4BkUH*AGMfd$Ly+zV!>?iq%BSWf9V2XN!WH_{n0x&4z019;I#lC2tfg+)g z*;@rS0SdQmzm4(SNWpNRhY_Jf)VI=2+%{aT)PpYopcNMw9Rd}cAX)=<6#PsM9E6vcHe_6;GVn&x_C}D6tR8Y0Ss>DvJ8|?c9^jp#; zsffj~uBQL?S*bA-&K8AmU_i-2vUv|bEB6%_P%1GUcBi{?N|(0#CnSej;}Y=HZc+Yp zqMp*#(V65A%Y6V_-UUJ|;9$aEv=AV%Dx&%I=rTmeNhROoGe;cZRIQS~NU4f76%|c0 zfe%);z99~-Tk#F>{AIY_5;SQ*4JK{kBWUI*lt0#@Jli>N@(^1BeFL;G5?{tND3j;{ zaRm1p^O;)01Y&?tHg@n-L5dIK=h{f3VK zr^ByI!K{QqwYfU#QO;~{P9Bmx5WMV6D$nI7l2eWw&%Hq6d*P1BJ99;pgyYq_f__&)PvC!A%*-vG&Q&nj7XA*kUnDd>jIg zB2dED5_|yukt%lL^biaj7N~*` z&1Y=^{vog-xPRLi;TWYdeKX#)4*}C!F^y`cnIG)Fd0YJ>eO+oAGis3E4Ydi0uQa0r z#Fa)?r=k&otXE0&hYqQ>A8sfr~DrFieGevPD*6-wam7B^$RLQd{K=;SqkQq6u?UKjP zP#-d7S=*UBbZz)-SC(l640VNve6yv3sIn`v^A9~0Q;*$>J>6r3aNT`C;R2C8vEe zEDl&uyree_w-?ky*QN=u7^-F!}a z){@HD@OOv+tlFQqe`-HVY_U5llyqz5st9V?FL<6Tr*dW7a&dO!!aeWtQj8L>@7+1) z5in;b9Ey~~taw*eN(-pjy*9|0FFh4C1(oWsCeL5f0`)U15-Irr{SiF&}^@K>z zewuM)MhbhpdCbS`z$?H%=g}HmdUdHRU6YUL&q-Su$yg=llXR{aR-?sv8A7U?s zp(0y%*b9Ascm_F-4r`xS>9cE-LJi?Iw4B2%%9U`2l0Q=O?K8`Ow~kiY{mNOfvRnvY zk387<{0M3=3Q*j`@V<<)ZLwLiRIf8x5~|NY)c&}zT_KHB?7A2844+{Y>Xnz)DN%(z zYqJ739!3`Lpb}Ur%i)u6Th<+uKK_T z=0b^J&rSi!QpUYj1Z>S2!L7*$mfiD{tAtGN;ml^K}cTI3QuO$edPt z=EptQf{dA#h8FNz`4Qi^T~v*EFxLlr!p42E5gS(mc?uj#EuN6!+a~sSlFUG&8t?Uf z&IP8UI!{Q(`!8&_ENtFaFS!+#rP0R(`u@bg*0OF~ALzkKLzVe&D1Zs|erktxN)JAw zU_*U0V#^@M3E{P4b1#TE+oE%_*^;rxT>Q+kdgWV+v7#^3gL1g4f|Il0it}8Qw5<*;56?QsgmENk*~4N>q7M*0L}*NvML6a<{ewfjHp_WC!=g zW%q3?reQdN1xlxVoZE6rOyV2w@+XPE3)3p=ZxJCa)3;zHi!Hr^FI{a=Bh;yrMxn^P z3u{L9I`q<{(vk{?4s||RVPBhYpjACwfdMzQ(e6l)kevYgbDZuI);}V`gA|N-NhSVt zoHP8lUWW0_L3Q8dz1AfQ74`OLz4@(k-2|7>D)ngajV2MXBU`|ihw2ne6iIoO_4WeM z;B5j!qKYQ9UP4jTy|qXdV;?gK3yQ)G&nU>nWVmTe`^zNlB-dG?AX>hX>xpkR-9{)V+|olP z0x@J0p>ui1*pxvb@N}-epJx%*)!CVMNEP3HueB+-U5$SbI17jraYM}1t}4%Rc)~k^ zOgcW@UWZTT(+T(JLIEeY<(OsS%%+s(;%-=&r{DZgd2{S)MD<>FHs6JI**fiQ%Merx z#y4js`9}+UXRJzDMu`W-geXj)AKvT2)ShRM@aBS7`U7OuNQK$xe7ULi5uR0nDe2uk zPNXm^TZhKSzn#KggR*0K^ARsW>}6H0f60fqPZ0J_FDLzOvv8f=oDV2Ol_nUr)6?4t z&xY$R0fR_`a!0OpJoWoKJ%Y9PL4vWW{!g6a1DL%3S!*xKCJuoqD3cDxG5(|9JY#|Rk0*KI^CNB(oZ)ZN(DTjfc78d-@E5K`-T3-n7q^f< ziv68^{saiDlRHvY708)iIM!t?se!H;AN(~eSmuR03I)m*Rwo3gprGO*LdL-8t zx_1Nyl&+?ZO;t~3O6VN2sGL!sd4MyQ?oY6OLtGdEVlx^o2JKIR7o6;jQtiuWQL#nu+;ytc+>=i=hBhcj_^Mv5|5MNzv)k(d$uh<~soD*9rW|4wTsb?B1`mV{AO`{>L* z(@-<4nWn2qKi!=;=dR8vOsFTDP-`ex&Uxba{s> zyQjPQ+5Hf0=}!WsLB{A89U-STeZywoOGsy#y{Q43 zG@{iTV4F8`v@ngtzkf4o4kX}UgvYOX!#nzIUrCBI0X4D{&272Wh1dx%eAdV&`)c8! zz9QREG!;hG0IyyC8~hA=BeNd1!wsd%D9w89=$`l8)J=O`=!mtG2OjzQX9sQF`D{!3 zd>7@~ksn_Y_f;T)i=e8!KAcQ z1bMD+wn_Eu6tRHb_z^x#=@!74jg#>fm-klV+2O^lIZQ(EMrxB+l!#R__2@|-#9ED|@ z#dqk27-u|ez5;&tQ1E`<_)GVQl4d^E({1v34TwbhuFVi)dKJMa9b*hSGH>6M@StRYvZk4lG10_&B4#h5de>;GFoaueWJ^0 z03NTU&N)GL;U3E7%?Hu}v4rmC9jYc{moFgw4qC+mte1L=X*9WV*U|vFLsrdKDgo=F}^A*2EC2XMHh9^TI!k`-39vwo(hzX zYs#y}L4+))CRFZ|t*lDI>!iB|2h44I=;aQ2THClMGzmU@6r=v!XuxlTwg_MB)tJ9c zyFyTLCcs*#8)$@T_@r&1O+TRm)fBsj+y2Qw!=jGg=`=|eh-%hST_ANac9Knt0djk} z`nbqfd?d7jz@`E(VG-f-j1|Dq*FrHNh28iri|5gsWI=t+Mj*L?iIXTvgC{#vBOS}c zd?nh%uHR6!OZt9jsTohg2qi0K-#MB+!}CsSf*O&h1F)KE-9jd2i@qT1ne1;AU{X?h z1`s7`O`{03)@dpSqBr_)PJaxV`e$yxV-jfY8&*9~HeRu@R>}6FhJ0kQiiD-VWU7!8w^ll}m zndeRB?5s>{w@*anJ|L;IRLS=iZ~v#!GJD}wN<y8$Q zF@>k!3SU+vcLZH6j(}W$m#{kThSj1nEU{%2gNqbK&1w*nfL%njLVPU5EY4&GqdXVP zMI?W*_Gux6PE8Y88MC3uY!ZiI*;)If@if8{K!i*0si#_)%D|+wa_;E>B>ox3jc=_- zbS${gf%+fy6mjL%>`Gz#vAYWYPjFjm=DjBWh) zaV2!xoF59c0lewq1X%X_dD~PR$g6^xU0aNmMa0>EN5OqqfJ%0E1WPK42ptmD=KntH zhh(u2D2D`m-+c1k)Tq2W&i7?iz@`CZ0_?pWGeV#{`5N$MI?jxgAjp+e1G;wGs`in# zXCby2+R@~s$*HxTv45rP#I!k1xW5dZcT%I7+PcPYF+_Wl-+|{_TIqs_({&AJ-*RnN zC&rOzD+lM=mRI?~yA_n|M!Ky@?Q_##-YS#6@;;i1>%-6#5sPToyuQjRG{G8Z+aDZy z0p~*P&=;TbR^_>9dRRE{uRph^kE10IA~c&+U7F3~`sg9ic7F`|webw)+Obydm}c$h z7gq!4%K5R)rjqTla>!VnuV~6;u}BRd-0KiRzV9*VC{O4iTMArj3^5@>YqbVL=%CWCOCDMa; z7hwkhX)RC+te=A+T{qD_!|W!^aGs%kJ}I!L0~*t=!wt-xZ#Msq{w`o0;dd_owqkv7 z!F_Ko$&jm@EjwAzB_n_7398fS+5}ZR;~@JcP0Y@C)o#pQ+_}Imczw;0sTf^oN2M6; zi}zy7ktFi{zC}YLgFYGG=sq1;lgyS?F+}x*-CLEBUP>KHx;Mf-$cpUkr&qPfGY7zRS+Y~M8(0&t+MsgbY%a2XIi3U^bPAYflgHl-k`DLVQ<;1XhN?<-q4SU$1KM%Pt4hhFxz<$!Y1{WSR#)w|L}=uht`g3G z9|#~lirz9Q;;*6c7gb%0JtL1djD+1w8ZqCWgNTtPR=B)Cpkl6i!lbq9WwN&ZB${3D zQtwQqa;se!ixK7j!iTdAZ={+^I5iCV*{CvIv;&&e#x ze+11YvuSvf$hOZQ=>ng(fmBg9=h42{33B?z{vk1}HBJs>c0xoc4vH+Au9lIb2_;0W zjgMXsBZ45KlT(Q&NeYaB=a`_qX20T-sx)M$Zpsql2tU)#SR zTumVgoNBdnv5su8y@7m9{fQ7zfUOvuY8hA-nv5gZ@9E?Fd~^%XieH)7$=}28?d#wY z(DAzqlSa9@B3NWV?3Se8h}P+iexObawoVJ6+AcFt

y<CgL3ZAD4rE6^_5^KL5 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%0AIHklM?d^zG%<?N!pN+g#?9BJyW_mkucG<_)mpV` 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 diff --git a/doc/bash.ps b/doc/bash.ps index b6a4bbe85..4c6650e2f 100644 --- a/doc/bash.ps +++ b/doc/bash.ps @@ -1,13 +1,14 @@ %!PS-Adobe-3.0 -%%Creator: groff version 1.22.4 -%%CreationDate: Mon Sep 19 12:02:42 2022 -%%DocumentNeededResources: font Times-Roman +%%Creator: groff version 1.23.0 +%%CreationDate: Thu Apr 4 17:50:31 2024 +%%DocumentNeededResources: font Times-Italic +%%+ font Times-Roman %%+ font Times-Bold -%%+ font Times-Italic %%+ font Courier %%+ font Symbol -%%DocumentSuppliedResources: procset grops 1.22 4 -%%Pages: 87 +%%+ font Courier-Bold +%%DocumentSuppliedResources: procset grops 1.23 0 +%%Pages: 90 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait @@ -16,7 +17,7 @@ %%PageMedia: Default %%EndDefaults %%BeginProlog -%%BeginResource: procset grops 1.22 4 +%%BeginResource: procset grops 1.23 0 %!PS-Adobe-3.0 Resource-ProcSet /setpacking where{ pop @@ -24,6 +25,7 @@ currentpacking true setpacking }if /grops 120 dict dup begin +% The ASCII code of the space character. /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def @@ -45,16 +47,18 @@ true setpacking /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +% name size font SF - /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def +% name a c d font MF - /MF{ findfont [5 2 roll -0 3 1 roll +0 3 1 roll % b neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def @@ -63,13 +67,19 @@ dup setfont /RES 0 def /PL 0 def /LS 0 def +% Enable manual feed. +% MANUAL - /MANUAL{ statusdict begin/manualfeed true store end }bind def +% Guess the page length. +% This assumes that the imageable area is vertically centered on the page. +% PLG - length /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def +% BP - /BP{ /level0 save def 1 setlinecap @@ -87,47 +97,61 @@ LS{ level0 restore showpage }def +% centerx centery radius startangle endangle DA - /DA{ newpath arcn stroke }bind def +% x y SN - x' y' +% round a position to nearest (pixel + (.25,.25)) /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def +% endx endy startx starty DL - +% we round the endpoints of the line, so that parallel horizontal +% and vertical lines will appear even /DL{ SN moveto SN lineto stroke }bind def +% centerx centery radius DC - /DC{ newpath 0 360 arc closepath }bind def /TM matrix def +% width height centerx centery DE - /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def +% these are for splines /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def +% fill the last path +% r g b Fr - /Fr{ setrgbcolor fill }bind def +% c m y k Fk - /setcmykcolor where{ pop /Fk{ setcmykcolor fill }bind def }if +% g Fg - /Fg{ setgray fill }bind def +% fill with the "current color" /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def @@ -136,6 +160,7 @@ pop /Ck/setcmykcolor load def }if /Cg/setgray load def +% new_font_name encoding_vector old_font_name RE - /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin @@ -150,6 +175,7 @@ dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def +% hpos vpos EBEGIN - /EBEGIN{ moveto DEFS begin @@ -157,11 +183,13 @@ DEFS begin /EEND/end load def /CNT 0 def /level1 0 def +% llx lly newwid wid newht ht newllx newlly PBEGIN - /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate +% set the graphics state to default values 0 setgray 0 setlinecap 1 setlinewidth @@ -180,6 +208,10 @@ newpath /CNT countdictstack def userdict begin /showpage{}def +% +% Any included setpagedevice should be ignored. +% See: http://www.w-beer.de/doc/ps/. +% /setpagedevice{}def mark }bind def @@ -199,11 +231,12 @@ setpacking %%BeginFeature: *PageSize Default << /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice %%EndFeature +%%IncludeResource: font Times-Italic %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold -%%IncludeResource: font Times-Italic %%IncludeResource: font Courier %%IncludeResource: font Symbol +%%IncludeResource: font Courier-Bold grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef @@ -232,936 +265,941 @@ def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash /ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def -/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE +/Courier-Bold@0 ENC0/Courier-Bold RE/Courier@0 ENC0/Courier RE /Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE +/Times-Italic@0 ENC0/Times-Italic RE %%EndSetup %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10.95 -/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0(bash \255 GNU Bourne-Ag) -108 96 Q(ain SHell)-.05 E F1(SYNOPSIS)72 112.8 Q/F2 10/Times-Bold@0 SF -(bash)108 124.8 Q F0([options] [command_string | \214le])2.5 E F1 -(COPYRIGHT)72 141.6 Q F0(Bash is Cop)108 153.6 Q -(yright \251 1989-2022 by the Free Softw)-.1 E(are F)-.1 E -(oundation, Inc.)-.15 E F1(DESCRIPTION)72 170.4 Q F2(Bash)108 182.4 Q F0 -.973(is an)3.474 F F2(sh)3.473 E F0 .973 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E +F1(bash \255 GNU Bourne-Ag)108 96 Q(ain SHell)-.05 E F2(SYNOPSIS)72 +112.8 Q/F3 10/Times-Bold@0 SF(bash)108 124.8 Q F1 +([options] [command_string | \214le])2.5 E F2(COPYRIGHT)72 141.6 Q F1 +(Bash is Cop)108 153.6 Q(yright \251 1989-2023 by the Free Softw)-.1 E +(are F)-.1 E(oundation, Inc.)-.15 E F2(DESCRIPTION)72 170.4 Q F3(Bash) +108 182.4 Q F1 .973(is an)3.474 F F3(sh)3.473 E F1 .973 (-compatible command language interpreter that e)B -.15(xe)-.15 G .973 (cutes commands read from the standard).15 F(input or from a \214le.)108 -194.4 Q F2(Bash)5 E F0(also incorporates useful features from the)2.5 E -/F3 10/Times-Italic@0 SF -.4(Ko)2.5 G(rn).4 E F0(and)2.5 E F3(C)2.5 E F0 -(shells \()2.5 E F2(ksh)A F0(and)2.5 E F2(csh)2.5 E F0(\).)A F2(Bash)108 -211.2 Q F0 .527(is intended to be a conformant implementation of the Sh\ -ell and Utilities portion of the IEEE POSIX)3.027 F -(speci\214cation \(IEEE Standard 1003.1\).)108 223.2 Q F2(Bash)5 E F0 -(can be con\214gured to be POSIX-conformant by def)2.5 E(ault.)-.1 E F1 -(OPTIONS)72 240 Q F0 .483(All of the single-character shell options doc\ -umented in the description of the)108 252 R F2(set)2.983 E F0 -.2(bu) -2.983 G .483(iltin command, includ-).2 F(ing)108 264 Q F2<ad6f>2.718 E -F0 2.718(,c)C .218(an be used as options when the shell is in)-2.718 F --.2(vo)-.4 G -.1(ke).2 G 2.718(d. In).1 F(addition,)2.719 E F2(bash) -2.719 E F0 .219(interprets the follo)2.719 F .219(wing options)-.25 F -(when it is in)108 276 Q -.2(vo)-.4 G -.1(ke).2 G(d:).1 E F2<ad63>108 -292.8 Q F0 .868(If the)158 292.8 R F2<ad63>3.368 E F0 .867(option is pr\ -esent, then commands are read from the \214rst non-option ar)3.368 F -(gument)-.18 E F3(com-)3.567 E(mand_string)158 304.8 Q F0 5.726(.I).22 G -3.226(ft)-5.726 G .726(here are ar)-3.226 F .727(guments after the)-.18 -F F3(command_string)3.427 E F0 3.227(,t).22 G .727(he \214rst ar)-3.227 -F .727(gument is assigned)-.18 F(to)158 316.8 Q F2($0)2.919 E F0 .419 -(and an)2.919 F 2.919(yr)-.15 G .419(emaining ar)-2.919 F .418 -(guments are assigned to the positional parameters.)-.18 F .418 -(The assignment)5.418 F(to)158 328.8 Q F2($0)2.5 E F0 +194.4 Q F3(Bash)5 E F1(also incorporates useful features from the)2.5 E +F0 -.4(Ko)2.5 G(rn).4 E F1(and)2.5 E F0(C)2.5 E F1(shells \()2.5 E F3 +(ksh)A F1(and)2.5 E F3(csh)2.5 E F1(\).)A .693 +(POSIX is the name for a f)108 211.2 R .694 +(amily of computing standards based on Unix.)-.1 F F3(Bash)5.694 E F1 +.694(is intended to be a confor)3.194 F(-)-.2 E 1.097(mant implementati\ +on of the Shell and Utilities portion of the IEEE POSIX speci\214cation\ + \(IEEE Standard)108 223.2 R(1003.1\).)108 235.2 Q F3(Bash)5 E F1 +(can be con\214gured to be POSIX-conformant by def)2.5 E(ault.)-.1 E F2 +(OPTIONS)72 252 Q F1 .483(All of the single-character shell options doc\ +umented in the description of the)108 264 R F3(set)2.984 E F1 -.2(bu) +2.984 G .484(iltin command, includ-).2 F(ing)108 276 Q F3<ad6f>2.719 E +F1 2.719(,c)C .218(an be used as options when the shell is in)-2.719 F +-.2(vo)-.4 G -.1(ke).2 G 2.718(d. In).1 F(addition,)2.718 E F3(bash) +2.718 E F1 .218(interprets the follo)2.718 F .218(wing options)-.25 F +(when it is in)108 288 Q -.2(vo)-.4 G -.1(ke).2 G(d:).1 E F3<ad63>108 +304.8 Q F1 .867(If the)158 304.8 R F3<ad63>3.367 E F1 .867(option is pr\ +esent, then commands are read from the \214rst non-option ar)3.367 F +(gument)-.18 E F0(com-)3.568 E(mand_string)158 316.8 Q F1 5.727(.I).22 G +3.227(ft)-5.727 G .727(here are ar)-3.227 F .727(guments after the)-.18 +F F0(command_string)3.427 E F1 3.227(,t).22 G .726(he \214rst ar)-3.227 +F .726(gument is assigned)-.18 F(to)158 328.8 Q F3($0)2.918 E F1 .418 +(and an)2.918 F 2.918(yr)-.15 G .418(emaining ar)-2.918 F .419 +(guments are assigned to the positional parameters.)-.18 F .419 +(The assignment)5.419 F(to)158 340.8 Q F3($0)2.5 E F1 (sets the name of the shell, which is used in w)2.5 E -(arning and error messages.)-.1 E F2<ad69>108 340.8 Q F0(If the)158 -340.8 Q F2<ad69>2.5 E F0(option is present, the shell is)2.5 E F3(inter) -2.51 E(active)-.15 E F0(.).18 E F2<ad6c>108 352.8 Q F0(Mak)158 352.8 Q -(e)-.1 E F2(bash)2.5 E F0(act as if it had been in)2.5 E -.2(vo)-.4 G +(arning and error messages.)-.1 E F3<ad69>108 352.8 Q F1(If the)158 +352.8 Q F3<ad69>2.5 E F1(option is present, the shell is)2.5 E F0(inter) +2.51 E(active)-.15 E F1(.).18 E F3<ad6c>108 364.8 Q F1(Mak)158 364.8 Q +(e)-.1 E F3(bash)2.5 E F1(act as if it had been in)2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5(da).1 G 2.5(sal)-2.5 G(ogin shell \(see)-2.5 E/F4 9 -/Times-Bold@0 SF(INV)2.5 E(OCA)-.405 E(TION)-.855 E F0(belo)2.25 E(w\).) --.25 E F2<ad72>108 364.8 Q F0(If the)158 364.8 Q F2<ad72>2.5 E F0 -(option is present, the shell becomes)2.5 E F3 -.37(re)2.5 G(stricted) -.37 E F0(\(see)3.27 E F4(RESTRICTED SHELL)2.5 E F0(belo)2.25 E(w\).)-.25 -E F2<ad73>108 376.8 Q F0 .602(If the)158 376.8 R F2<ad73>3.102 E F0 .602 +/Times-Bold@0 SF(INV)2.5 E(OCA)-.405 E(TION)-.855 E F1(belo)2.25 E(w\).) +-.25 E F3<ad72>108 376.8 Q F1(If the)158 376.8 Q F3<ad72>2.5 E F1 +(option is present, the shell becomes)2.5 E F0 -.37(re)2.5 G(stricted) +.37 E F1(\(see)3.27 E F4(RESTRICTED SHELL)2.5 E F1(belo)2.25 E(w\).)-.25 +E F3<ad73>108 388.8 Q F1 .602(If the)158 388.8 R F3<ad73>3.102 E F1 .602 (option is present, or if no ar)3.102 F .602 -(guments remain after option processing, then commands)-.18 F .617 -(are read from the standard input.)158 388.8 R .617(This option allo) -5.617 F .616(ws the positional parameters to be set when)-.25 F(in)158 -400.8 Q -.2(vo)-.4 G(king an interacti).2 E .3 -.15(ve s)-.25 H -(hell or when reading input through a pipe.).15 E F2<ad44>108 412.8 Q F0 -3.183(Al)158 412.8 S .683(ist of all double-quoted strings preceded by) --3.183 F F2($)3.184 E F0 .684(is printed on the standard output.)3.184 F -.684(These are)5.684 F .458(the strings that are subject to language tr\ -anslation when the current locale is not)158 424.8 R F2(C)2.958 E F0(or) -2.958 E F2(POSIX)2.958 E F0(.)A(This implies the)158 436.8 Q F2<ad6e>2.5 -E F0(option; no commands will be e)2.5 E -.15(xe)-.15 G(cuted.).15 E F2 -([\255+]O [)108 448.8 Q F3(shopt_option)A F2(])A F3(shopt_option)158 -460.8 Q F0 1.097(is one of the shell options accepted by the)3.596 F F2 -(shopt)3.597 E F0 -.2(bu)3.597 G 1.097(iltin \(see).2 F F4 1.097 -(SHELL B)3.597 F(UIL)-.09 E(TIN)-.828 E(COMMANDS)158 472.8 Q F0(belo) -3.003 E 3.253(w\). If)-.25 F F3(shopt_option)3.253 E F0 .753 -(is present,)3.253 F F2<ad4f>3.253 E F0 .753(sets the v)3.253 F .753 -(alue of that option;)-.25 F F2(+O)3.252 E F0(unsets)3.252 E 2.624 -(it. If)158 484.8 R F3(shopt_option)2.624 E F0 .124 -(is not supplied, the names and v)2.624 F .125 -(alues of the shell options accepted by)-.25 F F2(shopt)2.625 E F0 .506 -(are printed on the standard output.)158 496.8 R .505(If the in)5.505 F --.2(vo)-.4 G .505(cation option is).2 F F2(+O)3.005 E F0 3.005(,t)C .505 +(guments remain after option processing, then commands)-.18 F .616 +(are read from the standard input.)158 400.8 R .617(This option allo) +5.617 F .617(ws the positional parameters to be set when)-.25 F(in)158 +412.8 Q -.2(vo)-.4 G(king an interacti).2 E .3 -.15(ve s)-.25 H +(hell or when reading input through a pipe.).15 E F3<ad44>108 424.8 Q F1 +3.184(Al)158 424.8 S .684(ist of all double-quoted strings preceded by) +-3.184 F F3($)3.184 E F1 .684(is printed on the standard output.)3.184 F +.683(These are)5.683 F .458(the strings that are subject to language tr\ +anslation when the current locale is not)158 436.8 R F3(C)2.958 E F1(or) +2.959 E F3(POSIX)2.959 E F1(.)A(This implies the)158 448.8 Q F3<ad6e>2.5 +E F1(option; no commands will be e)2.5 E -.15(xe)-.15 G(cuted.).15 E F3 +([\255+]O [)108 460.8 Q F0(shopt_option)A F3(])A F0(shopt_option)158 +472.8 Q F1 1.097(is one of the shell options accepted by the)3.597 F F3 +(shopt)3.597 E F1 -.2(bu)3.597 G 1.097(iltin \(see).2 F F4 1.096 +(SHELL B)3.596 F(UIL)-.09 E(TIN)-.828 E(COMMANDS)158 484.8 Q F1(belo) +3.002 E 3.252(w\). If)-.25 F F0(shopt_option)3.253 E F1 .753 +(is present,)3.253 F F3<ad4f>3.253 E F1 .753(sets the v)3.253 F .753 +(alue of that option;)-.25 F F3(+O)3.253 E F1(unsets)3.253 E 2.625 +(it. If)158 496.8 R F0(shopt_option)2.625 E F1 .125 +(is not supplied, the names and v)2.625 F .124 +(alues of the shell options accepted by)-.25 F F3(shopt)2.624 E F1 .505 +(are printed on the standard output.)158 508.8 R .505(If the in)5.505 F +-.2(vo)-.4 G .505(cation option is).2 F F3(+O)3.005 E F1 3.005(,t)C .506 (he output is displayed in a)-3.005 F -(format that may be reused as input.)158 508.8 Q F2<adad>108 520.8 Q F0 -(A)158 520.8 Q F2<adad>3.363 E F0 .864 +(format that may be reused as input.)158 520.8 Q F3<adad>108 532.8 Q F1 +(A)158 532.8 Q F3<adad>3.364 E F1 .864 (signals the end of options and disables further option processing.) -3.363 F(An)5.864 E 3.364(ya)-.15 G -.18(rg)-3.364 G .864(uments after) -.18 F(the)158 532.8 Q F2<adad>2.5 E F0 -(are treated as \214lenames and ar)2.5 E 2.5(guments. An)-.18 F(ar)2.5 E -(gument of)-.18 E F2<ad>2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to) -.25 E F2<adad>2.5 E F0(.)A F2(Bash)108 549.6 Q F0 .304 +3.364 F(An)5.863 E 3.363(ya)-.15 G -.18(rg)-3.363 G .863(uments after) +.18 F(the)158 544.8 Q F3<adad>3.558 E F1 1.059 +(are treated as a shell script \214lename \(see belo)3.558 F 1.059 +(w\) and ar)-.25 F 1.059(guments passed to that script.)-.18 F(An ar)158 +556.8 Q(gument of)-.18 E F3<ad>2.5 E F1(is equi)2.5 E -.25(va)-.25 G +(lent to).25 E F3<adad>2.5 E F1(.)A F3(Bash)108 573.6 Q F1 .304 (also interprets a number of multi-character options.)2.804 F .303 (These options must appear on the command line)5.303 F -(before the single-character options to be recognized.)108 561.6 Q F2 -<adad646562>108 578.4 Q(ugger)-.2 E F0 .474(Arrange for the deb)144 -590.4 R .474(ugger pro\214le to be e)-.2 F -.15(xe)-.15 G .475 +(before the single-character options to be recognized.)108 585.6 Q F3 +<adad646562>108 602.4 Q(ugger)-.2 E F1 .474(Arrange for the deb)144 +614.4 R .474(ugger pro\214le to be e)-.2 F -.15(xe)-.15 G .475 (cuted before the shell starts.).15 F -.45(Tu)5.475 G .475(rns on e).45 F .475(xtended deb)-.15 F(ug-)-.2 E -(ging mode \(see the description of the)144 602.4 Q F2(extdeb)2.5 E(ug) --.2 E F0(option to the)2.5 E F2(shopt)2.5 E F0 -.2(bu)2.5 G(iltin belo) -.2 E(w\).)-.25 E F2(\255\255dump\255po\255strings)108 614.4 Q F0(Equi) -144 626.4 Q -.25(va)-.25 G(lent to).25 E F2<ad44>2.5 E F0 2.5(,b)C -(ut the output is in the GNU)-2.7 E F3 -.1(ge)2.5 G(tte).1 E(xt)-.2 E F2 -(po)2.5 E F0(\(portable object\) \214le format.)2.5 E F2 -(\255\255dump\255strings)108 638.4 Q F0(Equi)144 650.4 Q -.25(va)-.25 G -(lent to).25 E F2<ad44>2.5 E F0(.)A F2(\255\255help)108 662.4 Q F0 -(Display a usage message on standard output and e)144 662.4 Q -(xit successfully)-.15 E(.)-.65 E F2<adad696e6974ad8c6c65>108 674.4 Q F3 -(\214le)2.5 E F2<adad72>108 686.4 Q(c\214le)-.18 E F3(\214le)2.5 E F0 -(Ex)144 698.4 Q 1.599(ecute commands from)-.15 F F3(\214le)6.009 E F0 -1.598(instead of the standard personal initialization \214le)4.279 F F3 -(~/.bashr)3.598 E(c)-.37 E F0 1.598(if the)4.408 F(shell is interacti) -144 710.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(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(1)190.115 E 0 Cg EP +(ging mode \(see the description of the)144 626.4 Q F3(extdeb)2.5 E(ug) +-.2 E F1(option to the)2.5 E F3(shopt)2.5 E F1 -.2(bu)2.5 G(iltin belo) +.2 E(w\).)-.25 E F3(\255\255dump\255po\255strings)108 638.4 Q F1(Equi) +144 650.4 Q -.25(va)-.25 G(lent to).25 E F3<ad44>2.5 E F1 2.5(,b)C +(ut the output is in the GNU)-2.7 E F0 -.1(ge)2.5 G(tte).1 E(xt)-.2 E F3 +(po)2.5 E F1(\(portable object\) \214le format.)2.5 E F3 +(\255\255dump\255strings)108 662.4 Q F1(Equi)144 674.4 Q -.25(va)-.25 G +(lent to).25 E F3<ad44>2.5 E F1(.)A F3(\255\255help)108 686.4 Q F1 +(Display a usage message on standard output and e)144 686.4 Q +(xit successfully)-.15 E(.)-.65 E F3<adad696e6974ad8c6c65>108 698.4 Q F0 +(\214le)2.5 E F1(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(1)198.45 E +0 Cg EP %%Page: 2 2 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(\255\255login)108 84 Q F0(Equi)144 96 Q -.25(va)-.25 G(lent to).25 E -F1<ad6c>2.5 E F0(.)A F1(\255\255noediting)108 112.8 Q F0 -(Do not use the GNU)144 124.8 Q F1 -.18(re)2.5 G(adline).18 E F0 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF<adad72>108 84 Q(c\214le)-.18 +E F0(\214le)2.5 E F1(Ex)144 96 Q 1.393(ecute commands from)-.15 F F0 +(\214le)5.803 E F1 1.392 +(instead of the standard personal initialization \214le)4.073 F F0 +(\001/.bashr)3.992 E(c)-.37 E F1 1.392(if the)4.202 F +(shell is interacti)144 108 Q .3 -.15(ve \()-.25 H(see).15 E/F3 9 +/Times-Bold@0 SF(INV)2.5 E(OCA)-.405 E(TION)-.855 E F1(belo)2.25 E(w\).) +-.25 E F2(\255\255login)108 124.8 Q F1(Equi)144 136.8 Q -.25(va)-.25 G +(lent to).25 E F2<ad6c>2.5 E F1(.)A F2(\255\255noediting)108 153.6 Q F1 +(Do not use the GNU)144 165.6 Q F2 -.18(re)2.5 G(adline).18 E F1 (library to read command lines when the shell is interacti)2.5 E -.15 -(ve)-.25 G(.).15 E F1(\255\255nopr)108 141.6 Q(o\214le)-.18 E F0 .017 -(Do not read either the system-wide startup \214le)144 153.6 R/F2 10 -/Times-Italic@0 SF(/etc/pr)4.183 E(o\214le)-.45 E F0 .017(or an)4.183 F -2.517(yo)-.15 G 2.517(ft)-2.517 G .018 -(he personal initialization \214les)-2.517 F F2(~/.bash_pr)143.5 165.6 Q -(o\214le)-.45 E F0(,).18 E F2(~/.bash_lo)2.305 E(gin)-.1 E F0 2.805(,o) -.24 G(r)-2.805 E F2(~/.pr)2.305 E(o\214le)-.45 E F0 5.305(.B).18 G 2.805 -(yd)-5.305 G(ef)-2.805 E(ault,)-.1 E F1(bash)2.805 E F0 .305 -(reads these \214les when it is in)2.805 F -.2(vo)-.4 G -.1(ke).2 G -2.805(da).1 G(s)-2.805 E 2.5(al)144 177.6 S(ogin shell \(see)-2.5 E/F3 9 -/Times-Bold@0 SF(INV)2.5 E(OCA)-.405 E(TION)-.855 E F0(belo)2.25 E(w\).) --.25 E F1<adad6e6f72>108 194.4 Q(c)-.18 E F0 .161(Do not read and e)144 -194.4 R -.15(xe)-.15 G .162(cute the personal initialization \214le).15 -F F2(~/.bashr)2.162 E(c)-.37 E F0 .162(if the shell is interacti)2.972 F --.15(ve)-.25 G 5.162(.T).15 G .162(his op-)-5.162 F(tion is on by def) -144 206.4 Q(ault if the shell is in)-.1 E -.2(vo)-.4 G -.1(ke).2 G 2.5 -(da).1 G(s)-2.5 E F1(sh)2.5 E F0(.)A F1(\255\255posix)108 223.2 Q F0 -1.783(Change the beha)144 235.2 R 1.782(vior of)-.2 F F1(bash)4.282 E F0 -1.782(where the def)4.282 F 1.782(ault operation dif)-.1 F 1.782 +(ve)-.25 G(.).15 E F2(\255\255nopr)108 182.4 Q(o\214le)-.18 E F1 .017 +(Do not read either the system-wide startup \214le)144 194.4 R F0 +(/etc/pr)4.183 E(o\214le)-.45 E F1 .017(or an)4.183 F 2.517(yo)-.15 G +2.517(ft)-2.517 G .018(he personal initialization \214les)-2.517 F F0 +(\001/.bash_pr)144.1 206.4 Q(o\214le)-.45 E F1(,).18 E F0(\001/.bash_lo) +3.144 E(gin)-.1 E F1 3.043(,o).24 G(r)-3.043 E F0(\001/.pr)3.143 E +(o\214le)-.45 E F1 5.543(.B).18 G 3.043(yd)-5.543 G(ef)-3.043 E(ault,) +-.1 E F2(bash)3.043 E F1 .543(reads these \214les when it is in)3.043 F +-.2(vo)-.4 G -.1(ke).2 G(d).1 E(as a login shell \(see)144 218.4 Q F3 +(INV)2.5 E(OCA)-.405 E(TION)-.855 E F1(belo)2.25 E(w\).)-.25 E F2 +<adad6e6f72>108 235.2 Q(c)-.18 E F1 1.049(Do not read and e)144 235.2 R +-.15(xe)-.15 G 1.049(cute the personal initialization \214le).15 F F0 +(\001/.bashr)3.649 E(c)-.37 E F1 1.05(if the shell is interacti)3.859 F +-.15(ve)-.25 G 6.05(.T).15 G(his)-6.05 E(option is on by def)144 247.2 Q +(ault if the shell is in)-.1 E -.2(vo)-.4 G -.1(ke).2 G 2.5(da).1 G(s) +-2.5 E F2(sh)2.5 E F1(.)A F2(\255\255posix)108 264 Q F1 1.783 +(Change the beha)144 276 R 1.782(vior of)-.2 F F2(bash)4.282 E F1 1.782 +(where the def)4.282 F 1.782(ault operation dif)-.1 F 1.782 (fers from the POSIX standard to)-.25 F .332(match the standard \()144 -247.2 R F2 .332(posix mode)B F0 2.832(\). See)B F3 .333(SEE ALSO)2.833 F -F0(belo)2.583 E 2.833(wf)-.25 G .333 -(or a reference to a document that details)-2.833 F(ho)144 259.2 Q 2.5 -(wp)-.25 G(osix mode af)-2.5 E(fects bash')-.25 E 2.5(sb)-.55 G(eha)-2.5 -E(vior)-.2 E(.)-.55 E F1<adad72>108 276 Q(estricted)-.18 E F0 -(The shell becomes restricted \(see)144 288 Q F3(RESTRICTED SHELL)2.5 E -F0(belo)2.25 E(w\).)-.25 E F1<adad76>108 304.8 Q(erbose)-.1 E F0(Equi) -144 316.8 Q -.25(va)-.25 G(lent to).25 E F1<ad76>2.5 E F0(.)A F1<adad76> -108 333.6 Q(ersion)-.1 E F0(Sho)144 345.6 Q 2.5(wv)-.25 G -(ersion information for this instance of)-2.65 E F1(bash)2.5 E F0 +288 R F0 .332(posix mode)B F1 2.832(\). See)B F3 .333(SEE ALSO)2.833 F +F1(belo)2.583 E 2.833(wf)-.25 G .333 +(or a reference to a document that details)-2.833 F(ho)144 300 Q 2.5(wp) +-.25 G(osix mode af)-2.5 E(fects bash')-.25 E 2.5(sb)-.55 G(eha)-2.5 E +(vior)-.2 E(.)-.55 E F2<adad72>108 316.8 Q(estricted)-.18 E F1 +(The shell becomes restricted \(see)144 328.8 Q F3(RESTRICTED SHELL)2.5 +E F1(belo)2.25 E(w\).)-.25 E F2<adad76>108 345.6 Q(erbose)-.1 E F1(Equi) +144 357.6 Q -.25(va)-.25 G(lent to).25 E F2<ad76>2.5 E F1(.)A F2<adad76> +108 374.4 Q(ersion)-.1 E F1(Sho)144 386.4 Q 2.5(wv)-.25 G +(ersion information for this instance of)-2.65 E F2(bash)2.5 E F1 (on the standard output and e)2.5 E(xit successfully)-.15 E(.)-.65 E/F4 -10.95/Times-Bold@0 SF(ARGUMENTS)72 362.4 Q F0 .017(If ar)108 374.4 R -.016(guments remain after option processing, and neither the)-.18 F F1 -<ad63>2.516 E F0 .016(nor the)2.516 F F1<ad73>2.516 E F0 .016 -(option has been supplied, the \214rst)2.516 F(ar)108 386.4 Q .041(gume\ -nt is assumed to be the name of a \214le containing shell commands.)-.18 -F(If)5.041 E F1(bash)2.541 E F0 .041(is in)2.541 F -.2(vo)-.4 G -.1(ke) -.2 G 2.541(di).1 G 2.541(nt)-2.541 G .042(his f)-2.541 F(ashion,)-.1 E -F1($0)108 398.4 Q F0 .936(is set to the name of the \214le, and the pos\ -itional parameters are set to the remaining ar)3.436 F(guments.)-.18 E -F1(Bash)5.935 E F0 .233(reads and e)108 410.4 R -.15(xe)-.15 G .233 -(cutes commands from this \214le, then e).15 F(xits.)-.15 E F1(Bash) -5.234 E F0 1.334 -.55('s e)D .234(xit status is the e).4 F .234 -(xit status of the last com-)-.15 F .349(mand e)108 422.4 R -.15(xe)-.15 -G .349(cuted in the script.).15 F .349(If no commands are e)5.349 F -.15 -(xe)-.15 G .349(cuted, the e).15 F .348(xit status is 0.)-.15 F .348 -(An attempt is \214rst made to)5.348 F .253 -(open the \214le in the current directory)108 434.4 R 2.753(,a)-.65 G -.254 -(nd, if no \214le is found, then the shell searches the directories in) --2.753 F F3 -.666(PA)2.754 G(TH)-.189 E F0(for the script.)108 446.4 Q -F4(INV)72 463.2 Q(OCA)-.493 E(TION)-1.04 E F0(A)108 475.2 Q F2(lo)2.5 E -(gin shell)-.1 E F0(is one whose \214rst character of ar)2.5 E -(gument zero is a)-.18 E F1<ad>2.5 E F0 2.5(,o)C 2.5(ro)-2.5 G -(ne started with the)-2.5 E F1(\255\255login)2.5 E F0(option.)2.5 E(An) -108 492 Q F2(inter)2.734 E(active)-.15 E F0 .234 +10.95/Times-Bold@0 SF(ARGUMENTS)72 403.2 Q F1 .017(If ar)108 415.2 R +.016(guments remain after option processing, and neither the)-.18 F F2 +<ad63>2.516 E F1 .016(nor the)2.516 F F2<ad73>2.516 E F1 .016 +(option has been supplied, the \214rst)2.516 F(ar)108 427.2 Q .109(gume\ +nt is assumed to be the name of a \214le containing shell commands \(a) +-.18 F F0 .11(shell script)2.61 F F1 2.61(\). If)B F2(bash)2.61 E F1 .11 +(is in)2.61 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E .257(in this f)108 439.2 R +(ashion,)-.1 E F2($0)2.757 E F1 .257(is set to the name of the \214le, \ +and the positional parameters are set to the remaining ar)2.757 F(gu-) +-.18 E(ments.)108 451.2 Q F2(Bash)5.199 E F1 .199(reads and e)2.699 F +-.15(xe)-.15 G .199(cutes commands from this \214le, then e).15 F(xits.) +-.15 E F2(Bash)5.2 E F1 1.3 -.55('s e)D .2(xit status is the e).4 F .2 +(xit status of)-.15 F .587(the last command e)108 463.2 R -.15(xe)-.15 G +.587(cuted in the script.).15 F .586(If no commands are e)5.586 F -.15 +(xe)-.15 G .586(cuted, the e).15 F .586(xit status is 0.)-.15 F .586 +(An attempt is)5.586 F .367 +(\214rst made to open the \214le in the current directory)108 475.2 R +2.868(,a)-.65 G .368 +(nd, if no \214le is found, then the shell searches the direc-)-2.868 F +(tories in)108 487.2 Q F3 -.666(PA)2.5 G(TH)-.189 E F1(for the script.) +2.25 E F4(INV)72 504 Q(OCA)-.493 E(TION)-1.04 E F1(A)108 516 Q F0(lo)2.5 +E(gin shell)-.1 E F1(is one whose \214rst character of ar)2.5 E +(gument zero is a)-.18 E F2<ad>2.5 E F1 2.5(,o)C 2.5(ro)-2.5 G +(ne started with the)-2.5 E F2(\255\255login)2.5 E F1(option.)2.5 E(An) +108 532.8 Q F0(inter)2.734 E(active)-.15 E F1 .234 (shell is one started without non-option ar)2.734 F .234 -(guments \(unless)-.18 F F1<ad73>2.734 E F0 .233 -(is speci\214ed\) and without the)2.734 F F1<ad63>2.733 E F0 .352(optio\ +(guments \(unless)-.18 F F2<ad73>2.734 E F1 .233 +(is speci\214ed\) and without the)2.734 F F2<ad63>2.733 E F1 .352(optio\ n, whose standard input and error are both connected to terminals \(as \ -determined by)108 504 R F2(isatty)2.863 E F0 .353(\(3\)\), or one).32 F -.946(started with the)108 516 R F1<ad69>3.445 E F0(option.)3.445 E F3 -(PS1)5.945 E F0 .945(is set and)3.195 F F1<24ad>3.445 E F0(includes) -3.445 E F1(i)3.445 E F0(if)3.445 E F1(bash)3.445 E F0 .945(is interacti) +determined by)108 544.8 R F0(isatty)2.863 E F1 .353(\(3\)\), or one).32 +F .946(started with the)108 556.8 R F2<ad69>3.445 E F1(option.)3.445 E +F3(PS1)5.945 E F1 .945(is set and)3.195 F F2<24ad>3.445 E F1(includes) +3.445 E F2(i)3.445 E F1(if)3.445 E F2(bash)3.445 E F1 .945(is interacti) 3.445 F -.15(ve)-.25 G 3.445(,a).15 G(llo)-3.445 E .945 (wing a shell script or a)-.25 F(startup \214le to test this state.)108 -528 Q .032(The follo)108 544.8 R .032(wing paragraphs describe ho)-.25 F -(w)-.25 E F1(bash)2.532 E F0 -.15(exe)2.532 G .032 +568.8 Q .032(The follo)108 585.6 R .032(wing paragraphs describe ho)-.25 +F(w)-.25 E F2(bash)2.532 E F1 -.15(exe)2.532 G .032 (cutes its startup \214les.).15 F .032(If an)5.032 F 2.532(yo)-.15 G 2.532(ft)-2.532 G .032(he \214les e)-2.532 F .033(xist b)-.15 F .033 -(ut cannot be)-.2 F(read,)108 556.8 Q F1(bash)2.6 E F0 .1 +(ut cannot be)-.2 F(read,)108 597.6 Q F2(bash)2.6 E F1 .1 (reports an error)2.6 F 5.1(.T)-.55 G .1(ildes are e)-5.45 F .099 (xpanded in \214lenames as described belo)-.15 F 2.599(wu)-.25 G(nder) --2.599 E F1 -.18(Ti)2.599 G .099(lde Expansion).18 F F0(in)2.599 E(the) -108 568.8 Q F3(EXP)2.5 E(ANSION)-.666 E F0(section.)2.25 E(When)108 -585.6 Q F1(bash)2.895 E F0 .395(is in)2.895 F -.2(vo)-.4 G -.1(ke).2 G +-2.599 E F2 -.18(Ti)2.599 G .099(lde Expansion).18 F F1(in)2.599 E(the) +108 609.6 Q F3(EXP)2.5 E(ANSION)-.666 E F1(section.)2.25 E(When)108 +626.4 Q F2(bash)2.895 E F1 .395(is in)2.895 F -.2(vo)-.4 G -.1(ke).2 G 2.895(da).1 G 2.895(sa)-2.895 G 2.895(ni)-2.895 G(nteracti)-2.895 E .695 -.15(ve l)-.25 H .396(ogin shell, or as a non-interacti).15 F .696 -.15 -(ve s)-.25 H .396(hell with the).15 F F1(\255\255login)2.896 E F0 .396 -(option, it)2.896 F 1.334(\214rst reads and e)108 597.6 R -.15(xe)-.15 G -1.334(cutes commands from the \214le).15 F F2(/etc/pr)3.834 E(o\214le) --.45 E F0 3.834(,i)C 3.833(ft)-3.834 G 1.333(hat \214le e)-3.833 F 3.833 -(xists. After)-.15 F 1.333(reading that \214le, it)3.833 F .248 -(looks for)108 609.6 R F2(~/.bash_pr)2.748 E(o\214le)-.45 E F0(,)A F2 -(~/.bash_lo)2.748 E(gin)-.1 E F0 2.748(,a)C(nd)-2.748 E F2(~/.pr)2.748 E -(o\214le)-.45 E F0 2.748(,i)C 2.749(nt)-2.748 G .249(hat order)-2.749 F -2.749(,a)-.4 G .249(nd reads and e)-2.749 F -.15(xe)-.15 G .249 -(cutes commands from).15 F .076(the \214rst one that e)108 621.6 R .076 -(xists and is readable.)-.15 F(The)5.076 E F1(\255\255nopr)2.576 E -(o\214le)-.18 E F0 .076 -(option may be used when the shell is started to in-)2.576 F -(hibit this beha)108 633.6 Q(vior)-.2 E(.)-.55 E 1.104 -(When an interacti)108 650.4 R 1.404 -.15(ve l)-.25 H 1.104 +(ve s)-.25 H .396(hell with the).15 F F2(\255\255login)2.896 E F1 .396 +(option, it)2.896 F 1.334(\214rst reads and e)108 638.4 R -.15(xe)-.15 G +1.334(cutes commands from the \214le).15 F F0(/etc/pr)3.834 E(o\214le) +-.45 E F1 3.834(,i)C 3.833(ft)-3.834 G 1.333(hat \214le e)-3.833 F 3.833 +(xists. After)-.15 F 1.333(reading that \214le, it)3.833 F 1.475 +(looks for)108 650.4 R F0(\001/.bash_pr)3.975 E(o\214le)-.45 E F1(,)A F0 +(\001/.bash_lo)3.975 E(gin)-.1 E F1 3.975(,a)C(nd)-3.975 E F0(\001/.pr) +3.975 E(o\214le)-.45 E F1 3.975(,i)C 3.975(nt)-3.975 G 1.475(hat order) +-3.975 F 3.976(,a)-.4 G 1.476(nd reads and e)-3.976 F -.15(xe)-.15 G +1.476(cutes commands).15 F .183(from the \214rst one that e)108 662.4 R +.183(xists and is readable.)-.15 F(The)5.183 E F2(\255\255nopr)2.683 E +(o\214le)-.18 E F1 .182(option may be used when the shell is started) +2.683 F(to inhibit this beha)108 674.4 Q(vior)-.2 E(.)-.55 E 1.104 +(When an interacti)108 691.2 R 1.404 -.15(ve l)-.25 H 1.104 (ogin shell e).15 F 1.104(xits, or a non-interacti)-.15 F 1.404 -.15 (ve l)-.25 H 1.104(ogin shell e).15 F -.15(xe)-.15 G 1.104(cutes the).15 -F F1(exit)3.604 E F0 -.2(bu)3.604 G 1.104(iltin command,).2 F F1(bash) -108 662.4 Q F0(reads and e)2.5 E -.15(xe)-.15 G -(cutes commands from the \214le).15 E F2(~/.bash_lo)2.5 E(gout)-.1 E F0 -2.5(,i)C 2.5(fi)-2.5 G 2.5(te)-2.5 G(xists.)-2.65 E 1.698 -(When an interacti)108 679.2 R 1.998 -.15(ve s)-.25 H 1.698 -(hell that is not a login shell is started,).15 F F1(bash)4.197 E F0 +F F2(exit)3.604 E F1 -.2(bu)3.604 G 1.104(iltin command,).2 F F2(bash) +108 703.2 Q F1(reads and e)2.5 E -.15(xe)-.15 G +(cutes commands from the \214le).15 E F0(\001/.bash_lo)2.5 E(gout)-.1 E +F1 2.5(,i)C 2.5(fi)-2.5 G 2.5(te)-2.5 G(xists.)-2.65 E 1.698 +(When an interacti)108 720 R 1.998 -.15(ve s)-.25 H 1.698 +(hell that is not a login shell is started,).15 F F2(bash)4.197 E F1 1.697(reads and e)4.197 F -.15(xe)-.15 G 1.697(cutes commands from).15 F -F2(~/.bashr)108 691.2 Q(c)-.37 E F0 2.535(,i)C 2.535(ft)-2.535 G .035 -(hat \214le e)-2.535 F 2.535(xists. This)-.15 F .036 -(may be inhibited by using the)2.535 F F1<adad6e6f72>2.536 E(c)-.18 E F0 -2.536(option. The)2.536 F F1<adad72>2.536 E(c\214le)-.18 E F2(\214le) -2.536 E F0 .036(option will)2.536 F(force)108 703.2 Q F1(bash)2.5 E F0 -(to read and e)2.5 E -.15(xe)-.15 G(cute commands from).15 E F2(\214le) -2.5 E F0(instead of)2.5 E F2(~/.bashr)2.5 E(c)-.37 E F0(.)A(When)108 720 -Q F1(bash)5.306 E F0 2.806(is started non-interacti)5.306 F -.15(ve)-.25 -G(ly).15 E 5.306(,t)-.65 G 5.306(or)-5.306 G 2.806 -(un a shell script, for e)-5.306 F 2.805(xample, it looks for the v)-.15 -F(ariable)-.25 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(2) -190.115 E 0 Cg EP +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(2)198.45 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 9/Times-Bold@0 -SF -.27(BA)108 84 S(SH_ENV).27 E F0 1.01(in the en)3.26 F 1.01 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E F0(\001/.bashr)108 84 Q(c)-.37 E F1 3.477(,i)C +3.477(ft)-3.477 G .977(hat \214le e)-3.477 F 3.477(xists. This)-.15 F +.978(may be inhibited by using the)3.477 F/F2 10/Times-Bold@0 SF +<adad6e6f72>3.478 E(c)-.18 E F1 3.478(option. The)3.478 F F2<adad72> +3.478 E(c\214le)-.18 E F0(\214le)3.478 E F1(option)3.478 E(will force) +108 96 Q F2(bash)2.5 E F1(to read and e)2.5 E -.15(xe)-.15 G +(cute commands from).15 E F0(\214le)2.5 E F1(instead of)2.5 E F0 +(\001/.bashr)2.5 E(c)-.37 E F1(.)A(When)108 112.8 Q F2(bash)5.306 E F1 +2.806(is started non-interacti)5.306 F -.15(ve)-.25 G(ly).15 E 5.306(,t) +-.65 G 5.306(or)-5.306 G 2.806(un a shell script, for e)-5.306 F 2.805 +(xample, it looks for the v)-.15 F(ariable)-.25 E/F3 9/Times-Bold@0 SF +-.27(BA)108 124.8 S(SH_ENV).27 E F1 1.01(in the en)3.26 F 1.01 (vironment, e)-.4 F 1.01(xpands its v)-.15 F 1.01 (alue if it appears there, and uses the e)-.25 F 1.011(xpanded v)-.15 F -1.011(alue as the)-.25 F(name of a \214le to read and e)108 96 Q -.15 -(xe)-.15 G(cute.).15 E/F2 10/Times-Bold@0 SF(Bash)5 E F0(beha)2.5 E -.15 -(ve)-.2 G 2.5(sa).15 G 2.5(si)-2.5 G 2.5(ft)-2.5 G(he follo)-2.5 E -(wing command were e)-.25 E -.15(xe)-.15 G(cuted:).15 E/F3 10/Courier@0 -SF(if [ \255n "$BASH_ENV" ]; then . "$BASH_ENV"; fi)144 114 Q F0 -.2(bu) -108 132 S 2.5(tt).2 G(he v)-2.5 E(alue of the)-.25 E F1 -.666(PA)2.5 G -(TH)-.189 E F0 -.25(va)2.25 G -(riable is not used to search for the \214lename.).25 E(If)108 148.8 Q -F2(bash)3.417 E F0 .917(is in)3.417 F -.2(vo)-.4 G -.1(ke).2 G 3.417(dw) -.1 G .917(ith the name)-3.417 F F2(sh)3.417 E F0 3.417(,i)C 3.417(tt) +1.011(alue as the)-.25 F(name of a \214le to read and e)108 136.8 Q -.15 +(xe)-.15 G(cute.).15 E F2(Bash)5 E F1(beha)2.5 E -.15(ve)-.2 G 2.5(sa) +.15 G 2.5(si)-2.5 G 2.5(ft)-2.5 G(he follo)-2.5 E(wing command were e) +-.25 E -.15(xe)-.15 G(cuted:).15 E/F4 10/Courier@0 SF +(if [ \255n "$BASH_ENV" ]; then . "$BASH_ENV"; fi)144 153.6 Q F1 -.2(bu) +108 170.4 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 F1 -.25(va)2.25 G +(riable is not used to search for the \214lename.).25 E(If)108 187.2 Q +F2(bash)3.417 E F1 .917(is in)3.417 F -.2(vo)-.4 G -.1(ke).2 G 3.417(dw) +.1 G .917(ith the name)-3.417 F F2(sh)3.417 E F1 3.417(,i)C 3.417(tt) -3.417 G .917(ries to mimic the startup beha)-3.417 F .917 -(vior of historical v)-.2 F .917(ersions of)-.15 F F2(sh)3.417 E F0(as) +(vior of historical v)-.2 F .917(ersions of)-.15 F F2(sh)3.417 E F1(as) 3.417 E .145 (closely as possible, while conforming to the POSIX standard as well.) -108 160.8 R .145(When in)5.145 F -.2(vo)-.4 G -.1(ke).2 G 2.645(da).1 G +108 199.2 R .145(When in)5.145 F -.2(vo)-.4 G -.1(ke).2 G 2.645(da).1 G 2.645(sa)-2.645 G 2.645(ni)-2.645 G(nteracti)-2.645 E .445 -.15(ve l) --.25 H(ogin).15 E 1.264(shell, or a non-interacti)108 172.8 R 1.564 -.15 -(ve s)-.25 H 1.264(hell with the).15 F F2(\255\255login)3.764 E F0 1.264 +-.25 H(ogin).15 E 1.264(shell, or a non-interacti)108 211.2 R 1.564 -.15 +(ve s)-.25 H 1.264(hell with the).15 F F2(\255\255login)3.764 E F1 1.264 (option, it \214rst attempts to read and e)3.764 F -.15(xe)-.15 G 1.263 -(cute commands).15 F(from)108 184.8 Q/F4 10/Times-Italic@0 SF(/etc/pr) -4.173 E(o\214le)-.45 E F0(and)3.203 E F4(~/.pr)2.523 E(o\214le)-.45 E F0 -3.023(,i).18 G 3.024(nt)-3.023 G .524(hat order)-3.024 F 5.524(.T)-.55 G -(he)-5.524 E F2(\255\255nopr)3.024 E(o\214le)-.18 E F0 .524 -(option may be used to inhibit this beha)3.024 F(vior)-.2 E(.)-.55 E -.418(When in)108 196.8 R -.2(vo)-.4 G -.1(ke).2 G 2.918(da).1 G 2.918 +(cute commands).15 F(from)108 223.2 Q F0(/etc/pr)4.006 E(o\214le)-.45 E +F1(and)3.036 E F0(\001/.pr)2.956 E(o\214le)-.45 E F1 2.856(,i).18 G +2.856(nt)-2.856 G .356(hat order)-2.856 F 5.356(.T)-.55 G(he)-5.356 E F2 +(\255\255nopr)2.856 E(o\214le)-.18 E F1 .357 +(option may be used to inhibit this beha)2.856 F(vior)-.2 E(.)-.55 E +.418(When in)108 235.2 R -.2(vo)-.4 G -.1(ke).2 G 2.918(da).1 G 2.918 (sa)-2.918 G 2.918(ni)-2.918 G(nteracti)-2.918 E .718 -.15(ve s)-.25 H -.418(hell with the name).15 F F2(sh)2.918 E F0(,)A F2(bash)2.918 E F0 -.418(looks for the v)2.918 F(ariable)-.25 E F1(ENV)2.918 E/F5 9 -/Times-Roman@0 SF(,)A F0 -.15(ex)2.667 G .417(pands its v).15 F(alue) --.25 E .171(if it is de\214ned, and uses the e)108 208.8 R .171 +.418(hell with the name).15 F F2(sh)2.918 E F1(,)A F2(bash)2.918 E F1 +.418(looks for the v)2.918 F(ariable)-.25 E F3(ENV)2.918 E/F5 9 +/Times-Roman@0 SF(,)A F1 -.15(ex)2.667 G .417(pands its v).15 F(alue) +-.25 E .171(if it is de\214ned, and uses the e)108 247.2 R .171 (xpanded v)-.15 F .171(alue as the name of a \214le to read and e)-.25 F -.15(xe)-.15 G 2.671(cute. Since).15 F 2.671(as)2.671 G .171(hell in) --2.671 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E(as)108 220.8 Q F2(sh)3.081 E F0 +-2.671 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E(as)108 259.2 Q F2(sh)3.081 E F1 .581(does not attempt to read and e)3.081 F -.15(xe)-.15 G .581 (cute commands from an).15 F 3.08(yo)-.15 G .58 -(ther startup \214les, the)-3.08 F F2<adad72>3.08 E(c\214le)-.18 E F0 -.58(option has)3.08 F .182(no ef)108 232.8 R 2.682(fect. A)-.25 F +(ther startup \214les, the)-3.08 F F2<adad72>3.08 E(c\214le)-.18 E F1 +.58(option has)3.08 F .182(no ef)108 271.2 R 2.682(fect. A)-.25 F (non-interacti)2.682 E .482 -.15(ve s)-.25 H .182(hell in).15 F -.2(vo) -.4 G -.1(ke).2 G 2.682(dw).1 G .182(ith the name)-2.682 F F2(sh)2.682 E -F0 .182(does not attempt to read an)2.682 F 2.683(yo)-.15 G .183 -(ther startup \214les.)-2.683 F(When in)108 244.8 Q -.2(vo)-.4 G -.1(ke) -.2 G 2.5(da).1 G(s)-2.5 E F2(sh)2.5 E F0(,)A F2(bash)2.5 E F0(enters)2.5 -E F4(posix)3.75 E F0(mode after the startup \214les are read.)3.03 E -(When)108 261.6 Q F2(bash)2.727 E F0 .226(is started in)2.727 F F4 -(posix)3.976 E F0 .226(mode, as with the)3.256 F F2(\255\255posix)2.726 -E F0 .226(command line option, it follo)2.726 F .226(ws the POSIX stan-) --.25 F .341(dard for startup \214les.)108 273.6 R .341 -(In this mode, interacti)5.341 F .641 -.15(ve s)-.25 H .341(hells e).15 -F .341(xpand the)-.15 F F1(ENV)2.841 E F0 -.25(va)2.591 G .342 -(riable and commands are read and).25 F -.15(exe)108 285.6 S -(cuted from the \214le whose name is the e).15 E(xpanded v)-.15 E 2.5 -(alue. No)-.25 F(other startup \214les are read.)2.5 E F2(Bash)108 302.4 -Q F0 .224(attempts to determine when it is being run with its standard \ -input connected to a netw)2.724 F .223(ork connection,)-.1 F .521 -(as when e)108 314.4 R -.15(xe)-.15 G .521 -(cuted by the historical remote shell daemon, usually).15 F F4 -.1(rs) -3.021 G(hd).1 E F0 3.021(,o)C 3.021(rt)-3.021 G .521 -(he secure shell daemon)-3.021 F F4(sshd)3.022 E F0 5.522(.I)C(f)-5.522 -E F2(bash)108 326.4 Q F0 1.523(determines it is being run non-interacti) +F1 .182(does not attempt to read an)2.682 F 2.683(yo)-.15 G .183 +(ther startup \214les.)-2.683 F(When in)108 283.2 Q -.2(vo)-.4 G -.1(ke) +.2 G 2.5(da).1 G(s)-2.5 E F2(sh)2.5 E F1(,)A F2(bash)2.5 E F1(enters)2.5 +E F0(posix)3.75 E F1(mode after the startup \214les are read.)3.03 E +(When)108 300 Q F2(bash)2.727 E F1 .226(is started in)2.727 F F0(posix) +3.976 E F1 .226(mode, as with the)3.256 F F2(\255\255posix)2.726 E F1 +.226(command line option, it follo)2.726 F .226(ws the POSIX stan-)-.25 +F .341(dard for startup \214les.)108 312 R .341(In this mode, interacti) +5.341 F .641 -.15(ve s)-.25 H .341(hells e).15 F .341(xpand the)-.15 F +F3(ENV)2.841 E F1 -.25(va)2.591 G .342(riable and commands are read and) +.25 F -.15(exe)108 324 S(cuted from the \214le whose name is the e).15 E +(xpanded v)-.15 E 2.5(alue. No)-.25 F(other startup \214les are read.) +2.5 E F2(Bash)108 340.8 Q F1 .224(attempts to determine when it is bein\ +g run with its standard input connected to a netw)2.724 F .223 +(ork connection,)-.1 F .521(as when e)108 352.8 R -.15(xe)-.15 G .521 +(cuted by the historical remote shell daemon, usually).15 F F0 -.1(rs) +3.021 G(hd).1 E F1 3.021(,o)C 3.021(rt)-3.021 G .521 +(he secure shell daemon)-3.021 F F0(sshd)3.022 E F1 5.522(.I)C(f)-5.522 +E F2(bash)108 364.8 Q F1 1.523(determines it is being run non-interacti) 4.023 F -.15(ve)-.25 G 1.523(ly in this f).15 F 1.522 (ashion, it reads and e)-.1 F -.15(xe)-.15 G 1.522(cutes commands from) -.15 F F4(~/.bashr)108 338.4 Q(c)-.37 E F0 2.847(,i)C 2.847(ft)-2.847 G -.347(hat \214le e)-2.847 F .347(xists and is readable.)-.15 F .348 -(It will not do this if in)5.347 F -.2(vo)-.4 G -.1(ke).2 G 2.848(da).1 -G(s)-2.848 E F2(sh)2.848 E F0 5.348(.T)C(he)-5.348 E F2<adad6e6f72>2.848 -E(c)-.18 E F0 .348(option may be)2.848 F .61(used to inhibit this beha) -108 350.4 R(vior)-.2 E 3.11(,a)-.4 G .61(nd the)-3.11 F F2<adad72>3.11 E -(c\214le)-.18 E F0 .609 +.15 F F0(\001/.bashr)108 376.8 Q(c)-.37 E F1 2.748(,i)C 2.748(ft)-2.748 +G .248(hat \214le e)-2.748 F .248(xists and is readable.)-.15 F .249 +(It will not do this if in)5.248 F -.2(vo)-.4 G -.1(ke).2 G 2.749(da).1 +G(s)-2.749 E F2(sh)2.749 E F1 5.249(.T)C(he)-5.249 E F2<adad6e6f72>2.749 +E(c)-.18 E F1 .249(option may be)2.749 F .61(used to inhibit this beha) +108 388.8 R(vior)-.2 E 3.11(,a)-.4 G .61(nd the)-3.11 F F2<adad72>3.11 E +(c\214le)-.18 E F1 .609 (option may be used to force another \214le to be read, b)3.11 F .609 -(ut nei-)-.2 F(ther)108 362.4 Q F4 -.1(rs)2.5 G(hd).1 E F0(nor)2.5 E F4 -(sshd)2.5 E F0(generally in)2.5 E -.2(vo)-.4 G .2 -.1(ke t).2 H +(ut nei-)-.2 F(ther)108 400.8 Q F0 -.1(rs)2.5 G(hd).1 E F1(nor)2.5 E F0 +(sshd)2.5 E F1(generally in)2.5 E -.2(vo)-.4 G .2 -.1(ke t).2 H (he shell with those options or allo).1 E 2.5(wt)-.25 G (hem to be speci\214ed.)-2.5 E .433(If the shell is started with the ef) -108 379.2 R(fecti)-.25 E .733 -.15(ve u)-.25 H .433 +108 417.6 R(fecti)-.25 E .733 -.15(ve u)-.25 H .433 (ser \(group\) id not equal to the real user \(group\) id, and the).15 F -F2<ad70>2.934 E F0(op-)2.934 E 1.124(tion is not supplied, no startup \ +F2<ad70>2.934 E F1(op-)2.934 E 1.124(tion is not supplied, no startup \ \214les are read, shell functions are not inherited from the en)108 -391.2 R 1.124(vironment, the)-.4 F F1(SHELLOPTS)108 403.2 Q F5(,)A F1 --.27(BA)2.959 G(SHOPTS).27 E F5(,)A F1(CDP)2.959 E -.855(AT)-.666 G(H) -.855 E F5(,)A F0(and)2.959 E F1(GLOBIGNORE)3.209 E F0 -.25(va)2.959 G +429.6 R 1.124(vironment, the)-.4 F F3(SHELLOPTS)108 441.6 Q F5(,)A F3 +-.27(BA)2.959 G(SHOPTS).27 E F5(,)A F3(CDP)2.959 E -.855(AT)-.666 G(H) +.855 E F5(,)A F1(and)2.959 E F3(GLOBIGNORE)3.209 E F1 -.25(va)2.959 G .709(riables, if the).25 F 3.209(ya)-.15 G .71(ppear in the en)-3.209 F -.71(vironment, are)-.4 F .905(ignored, and the ef)108 415.2 R(fecti)-.25 +.71(vironment, are)-.4 F .905(ignored, and the ef)108 453.6 R(fecti)-.25 E 1.205 -.15(ve u)-.25 H .904(ser id is set to the real user id.).15 F -.904(If the)5.904 F F2<ad70>3.404 E F0 .904(option is supplied at in) -3.404 F -.2(vo)-.4 G .904(cation, the).2 F(startup beha)108 427.2 Q +.904(If the)5.904 F F2<ad70>3.404 E F1 .904(option is supplied at in) +3.404 F -.2(vo)-.4 G .904(cation, the).2 F(startup beha)108 465.6 Q (vior is the same, b)-.2 E(ut the ef)-.2 E(fecti)-.25 E .3 -.15(ve u) -.25 H(ser id is not reset.).15 E/F6 10.95/Times-Bold@0 SF(DEFINITIONS) -72 444 Q F0(The follo)108 456 Q +72 482.4 Q F1(The follo)108 494.4 Q (wing de\214nitions are used throughout the rest of this document.)-.25 -E F2(blank)108 468 Q F0 2.5(As)144 468 S(pace or tab)-2.5 E(.)-.4 E F2 --.1(wo)108 480 S(rd).1 E F0 2.5(As)144 480 S +E F2(blank)108 506.4 Q F1 2.5(As)144 506.4 S(pace or tab)-2.5 E(.)-.4 E +F2 -.1(wo)108 518.4 S(rd).1 E F1 2.5(As)144 518.4 S (equence of characters considered as a single unit by the shell.)-2.5 E -(Also kno)5 E(wn as a)-.25 E F2(tok)2.5 E(en)-.1 E F0(.)A F2(name)108 -492 Q F0(A)144 492 Q F4(wor)3.005 E(d)-.37 E F0 .165 +(Also kno)5 E(wn as a)-.25 E F2(tok)2.5 E(en)-.1 E F1(.)A F2(name)108 +530.4 Q F1(A)144 530.4 Q F0(wor)3.005 E(d)-.37 E F1 .165 (consisting only of alphanumeric characters and underscores, and be) 3.435 F .166(ginning with an alpha-)-.15 F -(betic character or an underscore.)144 504 Q(Also referred to as an)5 E -F2(identi\214er)2.5 E F0(.)A F2(metacharacter)108 516 Q F0 2.5(Ac)144 -528 S(haracter that, when unquoted, separates w)-2.5 E 2.5(ords. One)-.1 -F(of the follo)2.5 E(wing:)-.25 E F2 5(|&;\(\)<>s)144 540 S 2.5 -(pace tab newline)-5 F(contr)108 552 Q(ol operator)-.18 E F0(A)144 564 Q -F4(tok)2.5 E(en)-.1 E F0(that performs a control function.)2.5 E -(It is one of the follo)5 E(wing symbols:)-.25 E F2 2.5 -(|| & && ; ;; ;& ;;& \( \) | |&)144 576 R(<newline>)10 E F6(RESER)72 -592.8 Q(VED W)-.602 E(ORDS)-.11 E F4 .307(Reserved wor)108 604.8 R(ds) --.37 E F0 .307(are w)2.807 F .307(ords that ha)-.1 F .607 -.15(ve a s) --.2 H .306(pecial meaning to the shell.).15 F .306(The follo)5.306 F -.306(wing w)-.25 F .306(ords are recognized as)-.1 F(reserv)108 616.8 Q -.313(ed when unquoted and either the \214rst w)-.15 F .314 -(ord of a command \(see)-.1 F F1 .314(SHELL GRAMMAR)2.814 F F0(belo) -2.564 E .314(w\), the third)-.25 F -.1(wo)108 628.8 S .644(rd of a).1 F -F2(case)3.144 E F0(or)3.144 E F2(select)3.143 E F0 .643(command \(only) -3.143 F F2(in)3.143 E F0 .643(is v)3.143 F .643(alid\), or the third w) --.25 F .643(ord of a)-.1 F F2 -.25(fo)3.143 G(r).25 E F0 .643 -(command \(only)3.143 F F2(in)3.143 E F0(and)3.143 E F2(do)3.143 E F0 -(are v)108 640.8 Q(alid\):)-.25 E F2 11.295(!c)144 657.6 S 8.795 -(ase copr)-11.295 F 8.795(oc do done elif else esac \214 f)-.18 F 8.795 +(betic character or an underscore.)144 542.4 Q(Also referred to as an)5 +E F2(identi\214er)2.5 E F1(.)A F2(metacharacter)108 554.4 Q F1 2.5(Ac) +144 566.4 S(haracter that, when unquoted, separates w)-2.5 E 2.5 +(ords. One)-.1 F(of the follo)2.5 E(wing:)-.25 E F2 5(|&;\(\)<>s)144 +578.4 S 2.5(pace tab newline)-5 F(contr)108 590.4 Q(ol operator)-.18 E +F1(A)144 602.4 Q F0(tok)2.5 E(en)-.1 E F1 +(that performs a control function.)2.5 E(It is one of the follo)5 E +(wing symbols:)-.25 E F2 2.5(|| & && ; ;; ;& ;;& \( \) | |&)144 614.4 R +(<newline>)10 E F6(RESER)72 631.2 Q(VED W)-.602 E(ORDS)-.11 E F0 .307 +(Reserved wor)108 643.2 R(ds)-.37 E F1 .307(are w)2.807 F .307 +(ords that ha)-.1 F .607 -.15(ve a s)-.2 H .306 +(pecial meaning to the shell.).15 F .306(The follo)5.306 F .306(wing w) +-.25 F .306(ords are recognized as)-.1 F(reserv)108 655.2 Q .313 +(ed when unquoted and either the \214rst w)-.15 F .314 +(ord of a command \(see)-.1 F F3 .314(SHELL GRAMMAR)2.814 F F1(belo) +2.564 E .314(w\), the third)-.25 F -.1(wo)108 667.2 S .644(rd of a).1 F +F2(case)3.144 E F1(or)3.144 E F2(select)3.143 E F1 .643(command \(only) +3.143 F F2(in)3.143 E F1 .643(is v)3.143 F .643(alid\), or the third w) +-.25 F .643(ord of a)-.1 F F2 -.25(fo)3.143 G(r).25 E F1 .643 +(command \(only)3.143 F F2(in)3.143 E F1(and)3.143 E F2(do)3.143 E F1 +(are v)108 679.2 Q(alid\):)-.25 E F2 11.295(!c)144 696 S 8.795(ase copr) +-11.295 F 8.795(oc do done elif else esac \214 f)-.18 F 8.795 (or function if in select then)-.25 F 7.5(until while { } time [[ ]])144 -669.6 R F6(SHELL GRAMMAR)72 686.4 Q F0 -(This section describes the syntax of the v)108 698.4 Q -(arious forms of shell commands.)-.25 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(3)190.115 E 0 Cg EP +708 R F1(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(3)198.45 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(Simple Commands)87 84 Q F0(A)108 96 Q/F2 10/Times-Italic@0 SF .389 -(simple command)2.889 F F0 .389(is a sequence of optional v)2.889 F .388 -(ariable assignments follo)-.25 F .388(wed by)-.25 F F1(blank)2.888 E F0 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10.95/Times-Bold@0 SF(SHELL GRAMMAR)72 84 Q F1 +(This section describes the syntax of the v)108 96 Q +(arious forms of shell commands.)-.25 E/F3 10/Times-Bold@0 SF +(Simple Commands)87 112.8 Q F1(A)108 124.8 Q F0 .389(simple command) +2.889 F F1 .389(is a sequence of optional v)2.889 F .388 +(ariable assignments follo)-.25 F .388(wed by)-.25 F F3(blank)2.888 E F1 .388(-separated w)B .388(ords and)-.1 F .815 -(redirections, and terminated by a)108 108 R F2(contr)3.315 E .815 -(ol oper)-.45 F(ator)-.15 E F0 5.815(.T)C .815(he \214rst w)-5.815 F +(redirections, and terminated by a)108 136.8 R F0(contr)3.315 E .815 +(ol oper)-.45 F(ator)-.15 E F1 5.815(.T)C .815(he \214rst w)-5.815 F .816(ord speci\214es the command to be e)-.1 F -.15(xe)-.15 G(cuted,).15 -E(and is passed as ar)108 120 Q(gument zero.)-.18 E(The remaining w)5 E -(ords are passed as ar)-.1 E(guments to the in)-.18 E -.2(vo)-.4 G -.1 -(ke).2 G 2.5(dc).1 G(ommand.)-2.5 E(The return v)108 136.8 Q(alue of a) --.25 E F2(simple command)2.5 E F0(is its e)2.5 E(xit status, or 128+) --.15 E F2(n)A F0(if the command is terminated by signal)3.333 E F2(n) -2.86 E F0(.).24 E F1(Pipelines)87 153.6 Q F0(A)108 165.6 Q F2(pipeline) -2.996 E F0 .496(is a sequence of one or more commands separated by one \ -of the control operators)2.996 F F1(|)2.996 E F0(or)2.996 E F1(|&)2.996 -E F0 5.496(.T)C(he)-5.496 E(format for a pipeline is:)108 177.6 Q([)144 -194.4 Q F1(time)A F0([)2.5 E F1<ad70>A F0(]] [ ! ])A F2(command1)2.5 E -F0 2.5([[)2.5 G F1(|)-2.5 E/F3 10/Symbol SF<ef>A F1(|&)A F0(])A F2 -(command2)2.5 E F0(... ])2.5 E .799(The standard output of)108 211.2 R -F2(command1)3.499 E F0 .799 -(is connected via a pipe to the standard input of)3.299 F F2(command2) -3.5 E F0 5.8(.T).02 G .8(his con-)-5.8 F .215 -(nection is performed before an)108 223.2 R 2.715(yr)-.15 G .214 -(edirections speci\214ed by the)-2.715 F F2(command1)2.914 E F0(\(see)A -/F4 9/Times-Bold@0 SF(REDIRECTION)2.714 E F0(belo)2.464 E 2.714(w\). If) --.25 F F1(|&)2.714 E F0 .126(is used,)108 235.2 R F2(command1)2.626 E F0 +E(and is passed as ar)108 148.8 Q(gument zero.)-.18 E(The remaining w)5 +E(ords are passed as ar)-.1 E(guments to the in)-.18 E -.2(vo)-.4 G -.1 +(ke).2 G 2.5(dc).1 G(ommand.)-2.5 E(The return v)108 165.6 Q(alue of a) +-.25 E F0(simple command)2.5 E F1(is its e)2.5 E(xit status, or 128+) +-.15 E F0(n)A F1(if the command is terminated by signal)3.333 E F0(n) +2.86 E F1(.).24 E F3(Pipelines)87 182.4 Q F1(A)108 194.4 Q F0(pipeline) +2.996 E F1 .496(is a sequence of one or more commands separated by one \ +of the control operators)2.996 F F3(|)2.996 E F1(or)2.996 E F3(|&)2.996 +E F1 5.496(.T)C(he)-5.496 E(format for a pipeline is:)108 206.4 Q([)144 +223.2 Q F3(time)A F1([)2.5 E F3<ad70>A F1(]] [ ! ])A F0(command1)2.5 E +F1 2.5([[)2.5 G F3(|)-2.5 E/F4 10/Symbol SF<ef>A F3(|&)A F1(])A F0 +(command2)2.5 E F1 -3.332 1.666(... ])2.5 H .799(The standard output of) +108 240 R F0(command1)3.499 E F1 .799 +(is connected via a pipe to the standard input of)3.299 F F0(command2) +3.5 E F1 5.8(.T).02 G .8(his con-)-5.8 F .215 +(nection is performed before an)108 252 R 2.715(yr)-.15 G .214 +(edirections speci\214ed by the)-2.715 F F0(command1)2.914 E F1(\(see)A +/F5 9/Times-Bold@0 SF(REDIRECTION)2.714 E F1(belo)2.464 E 2.714(w\). If) +-.25 F F3(|&)2.714 E F1 .126(is used,)108 264 R F0(command1)2.626 E F1 1.226 -.55('s s)D .126(tandard error).55 F 2.626(,i)-.4 G 2.626(na) -2.626 G .126(ddition to its standard output, is connected to)-2.626 F -F2(command2)2.626 E F0 1.226 -.55('s s)D(tandard).55 E .028 -(input through the pipe; it is shorthand for)108 247.2 R F1 .028(2>&1 |) -2.528 F F0 5.028(.T)C .028 +F0(command2)2.626 E F1 1.226 -.55('s s)D(tandard).55 E .028 +(input through the pipe; it is shorthand for)108 276 R F3 .028(2>&1 |) +2.528 F F1 5.028(.T)C .028 (his implicit redirection of the standard error to the stan-)-5.028 F -(dard output is performed after an)108 259.2 Q 2.5(yr)-.15 G -(edirections speci\214ed by)-2.5 E F2(command1)2.5 E F0(.)A .48 -(The return status of a pipeline is the e)108 276 R .48 -(xit status of the last command, unless the)-.15 F F1(pipefail)2.98 E F0 -.48(option is enabled.)2.98 F(If)108 288 Q F1(pipefail)2.687 E F0 .187 +(dard output is performed after an)108 288 Q 2.5(yr)-.15 G +(edirections speci\214ed by)-2.5 E F0(command1)2.5 E F1(.)A .48 +(The return status of a pipeline is the e)108 304.8 R .48 +(xit status of the last command, unless the)-.15 F F3(pipefail)2.98 E F1 +.48(option is enabled.)2.98 F(If)108 316.8 Q F3(pipefail)2.687 E F1 .187 (is enabled, the pipeline')2.687 F 2.687(sr)-.55 G .186 (eturn status is the v)-2.687 F .186 (alue of the last \(rightmost\) command to e)-.25 F .186(xit with a)-.15 -F .61(non-zero status, or zero if all commands e)108 300 R .611 +F .61(non-zero status, or zero if all commands e)108 328.8 R .611 (xit successfully)-.15 F 5.611(.I)-.65 G 3.111(ft)-5.611 G .611 -(he reserv)-3.111 F .611(ed w)-.15 F(ord)-.1 E F1(!)3.111 E F0 .611 -(precedes a pipeline, the)5.611 F -.15(ex)108 312 S .55 +(he reserv)-3.111 F .611(ed w)-.15 F(ord)-.1 E F3(!)3.111 E F1 .611 +(precedes a pipeline, the)5.611 F -.15(ex)108 340.8 S .55 (it status of that pipeline is the logical ne).15 F -.05(ga)-.15 G .55 (tion of the e).05 F .55(xit status as described abo)-.15 F -.15(ve)-.15 G 5.55(.T).15 G .55(he shell w)-5.55 F .55(aits for)-.1 F -(all commands in the pipeline to terminate before returning a v)108 324 -Q(alue.)-.25 E .298(If the)108 340.8 R F1(time)2.799 E F0(reserv)2.799 E -.299(ed w)-.15 F .299(ord precedes a pipeline, the elapsed as well as u\ -ser and system time consumed by its)-.1 F -.15(exe)108 352.8 S .14 -(cution are reported when the pipeline terminates.).15 F(The)5.139 E F1 -<ad70>2.639 E F0 .139(option changes the output format to that spec-) -2.639 F .302(i\214ed by POSIX.)108 364.8 R .303(When the shell is in) -5.302 F F2 .303(posix mode)2.803 F F0 2.803(,i)C 2.803(td)-2.803 G .303 -(oes not recognize)-2.803 F F1(time)2.803 E F0 .303(as a reserv)2.803 F -.303(ed w)-.15 F .303(ord if the ne)-.1 F(xt)-.15 E(tok)108 376.8 Q .736 -(en be)-.1 F .736(gins with a `-'.)-.15 F(The)5.736 E F4(TIMEFORMA)3.236 -E(T)-.855 E F0 -.25(va)2.986 G .736 -(riable may be set to a format string that speci\214es ho).25 F 3.235 -(wt)-.25 G(he)-3.235 E .879 +(all commands in the pipeline to terminate before returning a v)108 +352.8 Q(alue.)-.25 E .298(If the)108 369.6 R F3(time)2.799 E F1(reserv) +2.799 E .299(ed w)-.15 F .299(ord precedes a pipeline, the elapsed as w\ +ell as user and system time consumed by its)-.1 F -.15(exe)108 381.6 S +.14(cution are reported when the pipeline terminates.).15 F(The)5.139 E +F3<ad70>2.639 E F1 .139(option changes the output format to that spec-) +2.639 F .302(i\214ed by POSIX.)108 393.6 R .303(When the shell is in) +5.302 F F0 .303(posix mode)2.803 F F1 2.803(,i)C 2.803(td)-2.803 G .303 +(oes not recognize)-2.803 F F3(time)2.803 E F1 .303(as a reserv)2.803 F +.303(ed w)-.15 F .303(ord if the ne)-.1 F(xt)-.15 E(tok)108 405.6 Q .485 +(en be)-.1 F .485(gins with a \231\255\232.)-.15 F(The)5.484 E F5 +(TIMEFORMA)2.984 E(T)-.855 E F1 -.25(va)2.734 G .484 +(riable may be set to a format string that speci\214es ho).25 F 2.984 +(wt)-.25 G(he)-2.984 E .879 (timing information should be displayed; see the description of)108 -388.8 R F4(TIMEFORMA)3.38 E(T)-.855 E F0(under)3.13 E F1 .88(Shell V) -3.38 F(ariables)-.92 E F0(be-)3.38 E(lo)108 400.8 Q -.65(w.)-.25 G .162 -(When the shell is in)108 417.6 R F2 .162(posix mode)2.662 F F0(,)A F1 -(time)2.662 E F0 .162(may be follo)2.662 F .161(wed by a ne)-.25 F 2.661 -(wline. In)-.25 F .161(this case, the shell displays the to-)2.661 F -.243(tal user and system time consumed by the shell and its children.) -108 429.6 R(The)5.243 E F4(TIMEFORMA)2.743 E(T)-.855 E F0 -.25(va)2.493 -G .243(riable may be used).25 F -(to specify the format of the time information.)108 441.6 Q .304(Each c\ -ommand in a multi-command pipeline, where pipes are created, is e)108 -458.4 R -.15(xe)-.15 G .303(cuted in a).15 F F2(subshell)2.803 E F0 -2.803(,w)C .303(hich is a)-2.803 F .207(separate process.)108 470.4 R -(See)5.207 E F4 .208(COMMAND EXECUTION ENVIR)2.708 F(ONMENT)-.27 E F0 -.208(for a description of subshells and a sub-)2.458 F .927(shell en)108 -482.4 R 3.427(vironment. If)-.4 F(the)3.427 E F1(lastpipe)3.427 E F0 -.927(option is enabled using the)3.427 F F1(shopt)3.427 E F0 -.2(bu) -3.427 G .927(iltin \(see the description of).2 F F1(shopt)3.426 E F0 -(belo)108 494.4 Q(w\), the last element of a pipeline may be run by the\ - shell process when job control is not acti)-.25 E -.15(ve)-.25 G(.).15 -E F1(Lists)87 511.2 Q F0(A)108 523.2 Q F2(list)2.849 E F0 .349(is a seq\ +417.6 R F5(TIMEFORMA)3.38 E(T)-.855 E F1(under)3.13 E F3 .88(Shell V) +3.38 F(ariables)-.92 E F1(be-)3.38 E(lo)108 429.6 Q -.65(w.)-.25 G .162 +(When the shell is in)108 446.4 R F0 .162(posix mode)2.662 F F1(,)A F3 +(time)2.662 E F1 .162(may be follo)2.662 F .161(wed by a ne)-.25 F 2.661 +(wline. In)-.25 F .161(this case, the shell displays the to-)2.661 F .31 +(tal user and system time consumed by the shell and its children.)108 +458.4 R(The)5.31 E F5(TIMEFORMA)2.81 E(T)-.855 E F1 -.25(va)2.56 G .31 +(riable speci\214es the).25 F(format of the time information.)108 470.4 +Q .304(Each command in a multi-command pipeline, where pipes are create\ +d, is e)108 487.2 R -.15(xe)-.15 G .303(cuted in a).15 F F0(subshell) +2.803 E F1 2.803(,w)C .303(hich is a)-2.803 F .207(separate process.)108 +499.2 R(See)5.207 E F5 .208(COMMAND EXECUTION ENVIR)2.708 F(ONMENT)-.27 +E F1 .208(for a description of subshells and a sub-)2.458 F .927 +(shell en)108 511.2 R 3.427(vironment. If)-.4 F(the)3.427 E F3(lastpipe) +3.427 E F1 .927(option is enabled using the)3.427 F F3(shopt)3.427 E F1 +-.2(bu)3.427 G .927(iltin \(see the description of).2 F F3(shopt)3.426 E +F1(belo)108 523.2 Q(w\), the last element of a pipeline may be run by t\ +he shell process when job control is not acti)-.25 E -.15(ve)-.25 G(.) +.15 E F3(Lists)87 540 Q F1(A)108 552 Q F0(list)2.849 E F1 .349(is a seq\ uence of one or more pipelines separated by one of the operators)2.849 F -F1(;)2.85 E F0(,)A F1(&)2.85 E F0(,)A F1(&&)2.85 E F0 2.85(,o)C(r)-2.85 -E F1(||)2.85 E F0 2.85(,a)C .35(nd option-)-2.85 F -(ally terminated by one of)108 535.2 Q F1(;)2.5 E F0(,)A F1(&)2.5 E F0 -2.5(,o)C(r)-2.5 E F1(<newline>)2.5 E F0(.)A .961 -(Of these list operators,)108 552 R F1(&&)3.461 E F0(and)3.461 E F1(||) -3.461 E F0(ha)3.461 E 1.261 -.15(ve e)-.2 H .961(qual precedence, follo) -.15 F .96(wed by)-.25 F F1(;)3.46 E F0(and)3.46 E F1(&)3.46 E F0 3.46 -(,w)C .96(hich ha)-3.46 F 1.26 -.15(ve e)-.2 H .96(qual prece-).15 F -(dence.)108 564 Q 2.5(As)108 580.8 S(equence of one or more ne)-2.5 E -(wlines may appear in a)-.25 E F2(list)2.5 E F0 -(instead of a semicolon to delimit commands.)2.5 E .029 -(If a command is terminated by the control operator)108 597.6 R F1(&) -2.529 E F0 2.529(,t)C .029(he shell e)-2.529 F -.15(xe)-.15 G .029 -(cutes the command in the).15 F F2(bac)2.529 E(kgr)-.2 E(ound)-.45 E F0 -(in)2.529 E 2.678(as)108 609.6 S 2.678(ubshell. The)-2.678 F .178 +F3(;)2.85 E F1(,)A F3(&)2.85 E F1(,)A F3(&&)2.85 E F1 2.85(,o)C(r)-2.85 +E F3(||)2.85 E F1 2.85(,a)C .35(nd option-)-2.85 F +(ally terminated by one of)108 564 Q F3(;)2.5 E F1(,)A F3(&)2.5 E F1 2.5 +(,o)C(r)-2.5 E F3(<newline>)2.5 E F1(.)A .961(Of these list operators,) +108 580.8 R F3(&&)3.461 E F1(and)3.461 E F3(||)3.461 E F1(ha)3.461 E +1.261 -.15(ve e)-.2 H .961(qual precedence, follo).15 F .96(wed by)-.25 +F F3(;)3.46 E F1(and)3.46 E F3(&)3.46 E F1 3.46(,w)C .96(hich ha)-3.46 F +1.26 -.15(ve e)-.2 H .96(qual prece-).15 F(dence.)108 592.8 Q 2.5(As)108 +609.6 S(equence of one or more ne)-2.5 E(wlines may appear in a)-.25 E +F0(list)2.5 E F1(instead of a semicolon to delimit commands.)2.5 E .029 +(If a command is terminated by the control operator)108 626.4 R F3(&) +2.529 E F1 2.529(,t)C .029(he shell e)-2.529 F -.15(xe)-.15 G .029 +(cutes the command in the).15 F F0(bac)2.529 E(kgr)-.2 E(ound)-.45 E F1 +(in)2.529 E 2.678(as)108 638.4 S 2.678(ubshell. The)-2.678 F .178 (shell does not w)2.678 F .178 (ait for the command to \214nish, and the return status is 0.)-.1 F .178 -(These are referred)5.178 F .778(to as)108 621.6 R F2(async)3.278 E(hr) --.15 E(onous)-.45 E F0 3.278(commands. Commands)3.278 F .779 -(separated by a)3.278 F F1(;)3.279 E F0 .779(are e)3.279 F -.15(xe)-.15 +(These are referred)5.178 F .778(to as)108 650.4 R F0(async)3.278 E(hr) +-.15 E(onous)-.45 E F1 3.278(commands. Commands)3.278 F .779 +(separated by a)3.278 F F3(;)3.279 E F1 .779(are e)3.279 F -.15(xe)-.15 G .779(cuted sequentially; the shell w).15 F .779(aits for)-.1 F -(each command to terminate in turn.)108 633.6 Q +(each command to terminate in turn.)108 662.4 Q (The return status is the e)5 E(xit status of the last command e)-.15 E -.15(xe)-.15 G(cuted.).15 E .172(AND and OR lists are sequences of one \ -or more pipelines separated by the)108 650.4 R F1(&&)2.671 E F0(and) -2.671 E F1(||)2.671 E F0 .171(control operators, re-)2.671 F(specti)108 -662.4 Q -.15(ve)-.25 G(ly).15 E 5(.A)-.65 G(ND and OR lists are e)-5 E +or more pipelines separated by the)108 679.2 R F3(&&)2.671 E F1(and) +2.671 E F3(||)2.671 E F1 .171(control operators, re-)2.671 F(specti)108 +691.2 Q -.15(ve)-.25 G(ly).15 E 5(.A)-.65 G(ND and OR lists are e)-5 E -.15(xe)-.15 G(cuted with left associati).15 E(vity)-.25 E 5(.A)-.65 G -2.5(nA)-5 G(ND list has the form)-2.5 E F2(command1)144 679.2 Q F1(&&) -2.5 E F2(command2)2.5 E(command2)108.2 696 Q F0(is e)2.52 E -.15(xe)-.15 -G(cuted if, and only if,).15 E F2(command1)2.7 E F0(returns an e)2.5 E -(xit status of zero \(success\).)-.15 E(An OR list has the form)108 -712.8 Q F2(command1)144 729.6 Q F1(||)2.5 E F2(command2)2.5 E F0 -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(4)190.115 E 0 Cg EP +2.5(nA)-5 G(ND list has the form)-2.5 E F0(command1)144 708 Q F3(&&)2.5 +E F0(command2)2.5 E(command2)108.2 724.8 Q F1(is e)2.52 E -.15(xe)-.15 G +(cuted if, and only if,).15 E F0(command1)2.7 E F1(returns an e)2.5 E +(xit status of zero \(success\).)-.15 E(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(4)198.45 E 0 Cg EP %%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 -/Times-Italic@0 SF(command2)108.2 84 Q F0 .434(is e)2.954 F -.15(xe)-.15 -G .434(cuted if, and only if,).15 F F1(command1)3.135 E F0 .435 -(returns a non-zero e)2.935 F .435(xit status.)-.15 F .435 -(The return status of AND)5.435 F(and OR lists is the e)108 96 Q -(xit status of the last command e)-.15 E -.15(xe)-.15 G -(cuted in the list.).15 E/F2 10/Times-Bold@0 SF(Compound Commands)87 -112.8 Q F0(A)108 124.8 Q F1 1.054(compound command)3.554 F F0 1.054 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(An OR list has the form)108 84 Q F0(command1)144 +100.8 Q/F2 10/Times-Bold@0 SF(||)2.5 E F0(command2)2.5 E(command2)108.2 +117.6 Q F1 .434(is e)2.954 F -.15(xe)-.15 G .434(cuted if, and only if,) +.15 F F0(command1)3.135 E F1 .435(returns a non-zero e)2.935 F .435 +(xit status.)-.15 F .435(The return status of AND)5.435 F +(and OR lists is the e)108 129.6 Q(xit status of the last command e)-.15 +E -.15(xe)-.15 G(cuted in the list.).15 E F2(Compound Commands)87 146.4 +Q F1(A)108 158.4 Q F0 1.054(compound command)3.554 F F1 1.054 (is one of the follo)3.554 F 3.553(wing. In)-.25 F 1.053(most cases a) -3.553 F F1(list)3.553 E F0 1.053(in a command')3.553 F 3.553(sd)-.55 G +3.553 F F0(list)3.553 E F1 1.053(in a command')3.553 F 3.553(sd)-.55 G 1.053(escription may be)-3.553 F 1.026 -(separated from the rest of the command by one or more ne)108 136.8 R +(separated from the rest of the command by one or more ne)108 170.4 R 1.026(wlines, and may be follo)-.25 F 1.027(wed by a ne)-.25 F 1.027 -(wline in)-.25 F(place of a semicolon.)108 148.8 Q(\()108 165.6 Q F1 -(list)A F0(\))A F1(list)144 165.6 Q F0 .215(is e)2.715 F -.15(xe)-.15 G +(wline in)-.25 F(place of a semicolon.)108 182.4 Q(\()108 199.2 Q F0 +(list)A F1(\))A F0(list)144 199.2 Q F1 .215(is e)2.715 F -.15(xe)-.15 G .215(cuted in a subshell \(see).15 F/F3 9/Times-Bold@0 SF .215 -(COMMAND EXECUTION ENVIR)2.715 F(ONMENT)-.27 E F0(belo)2.465 E 2.714(wf) --.25 G .214(or a descrip-)-2.714 F .209(tion of a subshell en)144 177.6 +(COMMAND EXECUTION ENVIR)2.715 F(ONMENT)-.27 E F1(belo)2.465 E 2.714(wf) +-.25 G .214(or a descrip-)-2.714 F .209(tion of a subshell en)144 211.2 R 2.709(vironment\). V)-.4 F .209(ariable assignments and b)-1.11 F .209 (uiltin commands that af)-.2 F .21(fect the shell')-.25 F(s)-.55 E(en) -144 189.6 Q 1.069(vironment do not remain in ef)-.4 F 1.069 +144 223.2 Q 1.069(vironment do not remain in ef)-.4 F 1.069 (fect after the command completes.)-.25 F 1.068 -(The return status is the e)6.069 F(xit)-.15 E(status of)144 201.6 Q F1 -(list)2.5 E F0(.)A({)108 218.4 Q F1(list)2.5 E F0 2.5(;})C F1(list)144 -218.4 Q F0 .401(is simply e)2.901 F -.15(xe)-.15 G .401 -(cuted in the current shell en).15 F(vironment.)-.4 E F1(list)5.401 E F0 +(The return status is the e)6.069 F(xit)-.15 E(status of)144 235.2 Q F0 +(list)2.5 E F1(.)A({)108 252 Q F0(list)2.5 E F1 2.5(;})C F0(list)144 252 +Q F1 .401(is simply e)2.901 F -.15(xe)-.15 G .401 +(cuted in the current shell en).15 F(vironment.)-.4 E F0(list)5.401 E F1 .402(must be terminated with a ne)2.901 F .402(wline or)-.25 F 3.215 -(semicolon. This)144 230.4 R .715(is kno)3.215 F .715(wn as a)-.25 F F1 -(gr)3.215 E .715(oup command)-.45 F F0 5.715(.T)C .715 -(he return status is the e)-5.715 F .714(xit status of)-.15 F F1(list) -3.214 E F0 5.714(.N)C(ote)-5.714 E .219(that unlik)144 242.4 R 2.719(et) --.1 G .219(he metacharacters)-2.719 F F2(\()2.719 E F0(and)2.719 E F2 -(\))2.719 E F0(,)A F2({)2.719 E F0(and)2.719 E F2(})2.719 E F0(are)2.719 -E F1 -.37(re)2.72 G .22(served wor).37 F(ds)-.37 E F0 .22 -(and must occur where a reserv)2.72 F(ed)-.15 E -.1(wo)144 254.4 S .257 +(semicolon. This)144 264 R .715(is kno)3.215 F .715(wn as a)-.25 F F0 +(gr)3.215 E .715(oup command)-.45 F F1 5.715(.T)C .715 +(he return status is the e)-5.715 F .714(xit status of)-.15 F F0(list) +3.214 E F1 5.714(.N)C(ote)-5.714 E .219(that unlik)144 276 R 2.719(et) +-.1 G .219(he metacharacters)-2.719 F F2(\()2.719 E F1(and)2.719 E F2 +(\))2.719 E F1(,)A F2({)2.719 E F1(and)2.719 E F2(})2.719 E F1(are)2.719 +E F0 -.37(re)2.72 G .22(served wor).37 F(ds)-.37 E F1 .22 +(and must occur where a reserv)2.72 F(ed)-.15 E -.1(wo)144 288 S .257 (rd is permitted to be recognized.).1 F .257(Since the)5.257 F 2.757(yd) -.15 G 2.756(on)-2.757 G .256(ot cause a w)-2.756 F .256(ord break, the) --.1 F 2.756(ym)-.15 G .256(ust be separated)-2.756 F(from)144 266.4 Q F1 -(list)2.5 E F0(by whitespace or another shell metacharacter)2.5 E(.)-.55 -E(\(\()108 283.2 Q F1 -.2(ex)C(pr).2 E(ession)-.37 E F0(\)\))A(The)144 -295.2 Q F1 -.2(ex)2.551 G(pr).2 E(ession)-.37 E F0 .051(is e)2.551 F +-.1 F 2.756(ym)-.15 G .256(ust be separated)-2.756 F(from)144 300 Q F0 +(list)2.5 E F1(by whitespace or another shell metacharacter)2.5 E(.)-.55 +E(\(\()108 316.8 Q F0 -.2(ex)C(pr).2 E(ession)-.37 E F1(\)\))A(The)144 +328.8 Q F0 -.2(ex)2.551 G(pr).2 E(ession)-.37 E F1 .051(is e)2.551 F -.25(va)-.25 G .051(luated according to the rules described belo).25 F 2.552(wu)-.25 G(nder)-2.552 E F3 .052(ARITHMETIC EV)2.552 F(ALU)-1.215 E -(A-)-.54 E(TION)144 307.2 Q/F4 9/Times-Roman@0 SF(.)A F0 .411(If the v) +(A-)-.54 E(TION)144 340.8 Q/F4 9/Times-Roman@0 SF(.)A F1 .411(If the v) 4.911 F .411(alue of the e)-.25 F .411(xpression is non-zero, the retur\ -n status is 0; otherwise the return status)-.15 F .186(is 1.)144 319.2 R -(The)5.186 E F1 -.2(ex)2.686 G(pr).2 E(ession)-.37 E F0(under)2.686 E +n status is 0; otherwise the return status)-.15 F .186(is 1.)144 352.8 R +(The)5.186 E F0 -.2(ex)2.686 G(pr).2 E(ession)-.37 E F1(under)2.686 E .186(goes the same e)-.18 F .186 (xpansions as if it were within double quotes, b)-.15 F .187(ut double) --.2 F(quote characters in)144 331.2 Q F1 -.2(ex)2.5 G(pr).2 E(ession) --.37 E F0(are not treated specially and are remo)2.5 E -.15(ve)-.15 G -(d.).15 E F2([[)108 348 Q F1 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F2(]]) -2.5 E F0 .003(Return a status of 0 or 1 depending on the e)144 360 R +-.2 F(quote characters in)144 364.8 Q F0 -.2(ex)2.5 G(pr).2 E(ession) +-.37 E F1(are not treated specially and are remo)2.5 E -.15(ve)-.15 G +(d.).15 E F2([[)108 381.6 Q F0 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F2(]]) +2.5 E F1 .003(Return a status of 0 or 1 depending on the e)144 393.6 R -.25(va)-.25 G .003(luation of the conditional e).25 F(xpression)-.15 E -F1 -.2(ex)2.503 G(pr).2 E(ession)-.37 E F0 5.003(.E)C(x-)-5.003 E .758 -(pressions are composed of the primaries described belo)144 372 R 3.259 -(wu)-.25 G(nder)-3.259 E F3(CONDITION)3.259 E .759(AL EXPRESSIONS)-.18 F -F4(.)A F0 .065(The w)144 384 R .065(ords between the)-.1 F F2([[)2.565 E -F0(and)2.565 E F2(]])2.565 E F0 .065(do not under)2.565 F .065(go w)-.18 -F .065(ord splitting and pathname e)-.1 F 2.565(xpansion. The)-.15 F -(shell)2.565 E .483(performs tilde e)144 396 R .483 -(xpansion, parameter and v)-.15 F .483(ariable e)-.25 F .483 +F0 -.2(ex)2.503 G(pr).2 E(ession)-.37 E F1 5.003(.E)C(x-)-5.003 E .758 +(pressions are composed of the primaries described belo)144 405.6 R +3.259(wu)-.25 G(nder)-3.259 E F3(CONDITION)3.259 E .759(AL EXPRESSIONS) +-.18 F F4(.)A F1 .065(The w)144 417.6 R .065(ords between the)-.1 F F2 +([[)2.565 E F1(and)2.565 E F2(]])2.565 E F1 .065(do not under)2.565 F +.065(go w)-.18 F .065(ord splitting and pathname e)-.1 F 2.565 +(xpansion. The)-.15 F(shell)2.565 E .483(performs tilde e)144 429.6 R +.483(xpansion, parameter and v)-.15 F .483(ariable e)-.25 F .483 (xpansion, arithmetic e)-.15 F .483(xpansion, command sub-)-.15 F .201 -(stitution, process substitution, and quote remo)144 408 R -.25(va)-.15 -G 2.701(lo).25 G 2.701(nt)-2.701 G .201(hose w)-2.701 F .201 +(stitution, process substitution, and quote remo)144 441.6 R -.25(va) +-.15 G 2.701(lo).25 G 2.701(nt)-2.701 G .201(hose w)-2.701 F .201 (ords \(the e)-.1 F .2(xpansions that w)-.15 F .2(ould occur)-.1 F .382 -(if the w)144 420 R .382(ords were enclosed in double quotes\).)-.1 F -.382(Conditional operators such as)5.382 F F2<ad66>2.882 E F0 .382 -(must be unquoted)2.882 F(to be recognized as primaries.)144 432 Q -(When used with)144 450 Q F2([[)2.5 E F0 2.5(,t)C(he)-2.5 E F2(<)2.5 E -F0(and)2.5 E F2(>)2.5 E F0(operators sort le)2.5 E -(xicographically using the current locale.)-.15 E .503(When the)144 468 -R F2(==)3.003 E F0(and)3.002 E F2(!=)3.002 E F0 .502(operators are used\ -, the string to the right of the operator is considered a pat-)3.002 F -.81(tern and matched according to the rules described belo)144 480 R -3.31(wu)-.25 G(nder)-3.31 E F2 -.1(Pa)3.31 G(tter).1 E 3.31(nM)-.15 G -(atching)-3.31 E F0 3.31(,a)C 3.31(si)-3.31 G 3.31(ft)-3.31 G(he)-3.31 E -F2(ext-)3.31 E(glob)144 492 Q F0 .313(shell option were enabled.)2.814 F -(The)5.313 E F2(=)2.813 E F0 .313(operator is equi)2.813 F -.25(va)-.25 -G .313(lent to).25 F F2(==)2.813 E F0 5.313(.I)C 2.813(ft)-5.313 G(he) --2.813 E F2(nocasematch)2.813 E F0 .313(shell op-)2.813 F .029 -(tion is enabled, the match is performed without re)144 504 R -.05(ga) +(if the w)144 453.6 R .382(ords were enclosed in double quotes\).)-.1 F +.382(Conditional operators such as)5.382 F F2<ad66>2.882 E F1 .382 +(must be unquoted)2.882 F(to be recognized as primaries.)144 465.6 Q +(When used with)144 482.4 Q F2([[)2.5 E F1 2.5(,t)C(he)-2.5 E F2(<)2.5 E +F1(and)2.5 E F2(>)2.5 E F1(operators sort le)2.5 E +(xicographically using the current locale.)-.15 E .503(When the)144 +499.2 R F2(==)3.003 E F1(and)3.002 E F2(!=)3.002 E F1 .502(operators ar\ +e used, the string to the right of the operator is considered a pat-) +3.002 F .81(tern and matched according to the rules described belo)144 +511.2 R 3.31(wu)-.25 G(nder)-3.31 E F2 -.1(Pa)3.31 G(tter).1 E 3.31(nM) +-.15 G(atching)-3.31 E F1 3.31(,a)C 3.31(si)-3.31 G 3.31(ft)-3.31 G(he) +-3.31 E F2(ext-)3.31 E(glob)144 523.2 Q F1 .313 +(shell option were enabled.)2.814 F(The)5.313 E F2(=)2.813 E F1 .313 +(operator is equi)2.813 F -.25(va)-.25 G .313(lent to).25 F F2(==)2.813 +E F1 5.313(.I)C 2.813(ft)-5.313 G(he)-2.813 E F2(nocasematch)2.813 E F1 +.313(shell op-)2.813 F .029 +(tion is enabled, the match is performed without re)144 535.2 R -.05(ga) -.15 G .03(rd to the case of alphabetic characters.).05 F .03(The re-) -5.03 F .259(turn v)144 516 R .259(alue is 0 if the string matches \() --.25 F F2(==)A F0 2.759(\)o)C 2.759(rd)-2.759 G .259(oes not match \() --2.759 F F2(!=)A F0 2.759(\)t)C .259(he pattern, and 1 otherwise.)-2.759 +5.03 F .259(turn v)144 547.2 R .259(alue is 0 if the string matches \() +-.25 F F2(==)A F1 2.759(\)o)C 2.759(rd)-2.759 G .259(oes not match \() +-2.759 F F2(!=)A F1 2.759(\)t)C .259(he pattern, and 1 otherwise.)-2.759 F(An)5.258 E(y)-.15 E(part of the pattern may be quoted to force the qu\ -oted portion to be matched as a string.)144 528 Q .243 -(An additional binary operator)144 546 R(,)-.4 E F2(=~)2.743 E F0 2.743 -(,i)C 2.743(sa)-2.743 G -.25(va)-2.943 G .243 -(ilable, with the same precedence as).25 F F2(==)2.743 E F0(and)2.743 E -F2(!=)2.743 E F0 5.243(.W)C .243(hen it is)-5.243 F .182 +oted portion to be matched as a string.)144 559.2 Q .133 +(An additional binary operator)144 576 R(,)-.4 E F2<3d01>2.633 E F1 +2.633(,i)C 2.633(sa)-2.633 G -.25(va)-2.833 G .133 +(ilable, with the same precedence as).25 F F2(==)2.633 E F1(and)2.633 E +F2(!=)2.633 E F1 5.133(.W)C .133(hen it is)-5.133 F .182 (used, the string to the right of the operator is considered a POSIX e) -144 558 R .182(xtended re)-.15 F .181(gular e)-.15 F .181(xpression and) --.15 F 2.623(matched accordingly \(using the POSIX)144 570 R F1 -.37(re) -5.124 G(gcomp)-.03 E F0(and)5.124 E F1 -.37(re)5.124 G -.1(ge)-.03 G -(xec)-.1 E F0(interf)5.124 E 2.624(aces usually described in)-.1 F F1 --.37(re)144 582 S -.1(ge)-.03 G(x)-.1 E F0 3.272(\(3\)\). The)B .772 -(return v)3.272 F .772 +144 588 R .182(xtended re)-.15 F .181(gular e)-.15 F .181(xpression and) +-.15 F 2.623(matched accordingly \(using the POSIX)144 600 R F0 -.37(re) +5.124 G(gcomp)-.03 E F1(and)5.124 E F0 -.37(re)5.124 G -.1(ge)-.03 G +(xec)-.1 E F1(interf)5.124 E 2.624(aces usually described in)-.1 F F0 +-.37(re)144 612 S -.1(ge)-.03 G(x)-.1 E F1 3.241(\(3\)\). The).53 F .741 +(return v)3.241 F .741 (alue is 0 if the string matches the pattern, and 1 otherwise.)-.25 F -.771(If the re)5.771 F(gular)-.15 E -.15(ex)144 594 S .508 +.74(If the re)5.74 F(gular)-.15 E -.15(ex)144 624 S .508 (pression is syntactically incorrect, the conditional e).15 F (xpression')-.15 E 3.008(sr)-.55 G .509(eturn v)-3.008 F .509 -(alue is 2.)-.25 F .509(If the)5.509 F F2(nocase-)3.009 E(match)144 606 -Q F0 1.307(shell option is enabled, the match is performed without re) +(alue is 2.)-.25 F .509(If the)5.509 F F2(nocase-)3.009 E(match)144 636 +Q F1 1.307(shell option is enabled, the match is performed without re) 3.807 F -.05(ga)-.15 G 1.306(rd to the case of alphabetic).05 F 2.599 -(characters. If)144 618 R(an)2.599 E 2.599(yp)-.15 G .099 +(characters. If)144 648 R(an)2.599 E 2.599(yp)-.15 G .099 (art of the pattern is quoted, the quoted portion is matched literally) --2.599 F 5.1(.T)-.65 G .1(his means)-5.1 F -2.15 -.25(ev e)144 630 T +-2.599 F 5.1(.T)-.65 G .1(his means)-5.1 F -2.15 -.25(ev e)144 660 T .032(ry character in the quoted portion matches itself, instead of ha) .25 F .031(ving an)-.2 F 2.531(ys)-.15 G .031(pecial pattern matching) --2.531 F 3.041(meaning. If)144 642 R .542 +-2.531 F 3.041(meaning. If)144 672 R .542 (the pattern is stored in a shell v)3.041 F .542(ariable, quoting the v) -.25 F .542(ariable e)-.25 F .542(xpansion forces the en-)-.15 F 1.825 -(tire pattern to be matched literally)144 654 R 6.825(.T)-.65 G 1.825 +(tire pattern to be matched literally)144 684 R 6.825(.T)-.65 G 1.825 (reat brack)-7.175 F 1.825(et e)-.1 F 1.825(xpressions in re)-.15 F 1.825(gular e)-.15 F 1.825(xpressions carefully)-.15 F(,)-.65 E(since n\ ormal quoting and pattern characters lose their meanings between brack) -144 666 Q(ets.)-.1 E .838(The pattern will match if it matches an)144 -684 R 3.338(yp)-.15 G .838(art of the string.)-3.338 F .839 -(Anchor the pattern using the)5.839 F F2(^)3.339 E F0(and)3.339 E F2($) -3.339 E F0(re)144 696 Q .847(gular e)-.15 F .846 -(xpression operators to force it to match the entire string.)-.15 F .846 -(The array v)5.846 F(ariable)-.25 E F3 -.27(BA)3.346 G(SH_RE-).27 E(MA) -144 708 Q(TCH)-.855 E F0 .321 -(records which parts of the string matched the pattern.)2.571 F .322 -(The element of)5.322 F F3 -.27(BA)2.822 G(SH_REMA).27 E(TCH)-.855 E F0 -.583(with inde)144 720 R 3.083(x0)-.15 G .582 -(contains the portion of the string matching the entire re)-.001 F .582 -(gular e)-.15 F 3.082(xpression. Substrings)-.15 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(5)190.115 E 0 Cg EP +144 696 Q(ets.)-.1 E .708(The pattern will match if it matches an)144 +712.8 R 3.208(yp)-.15 G .708(art of the string.)-3.208 F .708 +(Anchor the pattern using the)5.708 F F2<00>3.208 E F1(and)3.208 E F2($) +3.208 E F1(re)144 724.8 Q 4.507(gular e)-.15 F 4.506 +(xpression operators to force it to match the entire string.)-.15 F +4.506(The array v)9.506 F(ariable)-.25 E(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(5)198.45 E 0 Cg EP %%Page: 6 6 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .249 -(matched by parenthesized sube)144 84 R .249(xpressions within the re) --.15 F .249(gular e)-.15 F .249(xpression are sa)-.15 F -.15(ve)-.2 G -2.749(di).15 G 2.75(nt)-2.749 G .25(he remaining)-2.75 F/F1 9 -/Times-Bold@0 SF -.27(BA)144 96 S(SH_REMA).27 E(TCH)-.855 E F0 1.13 -(indices. The element of)3.38 F F1 -.27(BA)3.63 G(SH_REMA).27 E(TCH) --.855 E F0 1.13(with inde)3.38 F(x)-.15 E/F2 10/Times-Italic@0 SF(n)3.63 -E F0 1.13(is the portion of the)3.63 F 1.125(string matching the)144 108 -R F2(n)3.625 E F0 1.125(th parenthesized sube)B 3.625(xpression. Bash) --.15 F(sets)3.626 E F1 -.27(BA)3.626 G(SH_REMA).27 E(TCH)-.855 E F0 -1.126(in the global)3.376 F(scope; declaring it as a local v)144 120 Q +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 9/Times-Bold@0 SF -.27(BA)144 84 S(SH_REMA).27 E +(TCH)-.855 E F1 3.36 +(records which parts of the string matched the pattern.)5.61 F 3.36 +(The element of)8.36 F F2 -.27(BA)144 96 S(SH_REMA).27 E(TCH)-.855 E F1 +.768(with inde)3.018 F 3.268(x0c)-.15 G .768 +(ontains the portion of the string matching the entire re)-3.268 F .767 +(gular e)-.15 F(x-)-.15 E 3.54(pression. Substrings)144 108 R 1.04 +(matched by parenthesized sube)3.54 F 1.04(xpressions within the re)-.15 +F 1.04(gular e)-.15 F 1.04(xpression are)-.15 F(sa)144 120 Q -.15(ve)-.2 +G 2.713(di).15 G 2.713(nt)-2.713 G .213(he remaining)-2.713 F F2 -.27 +(BA)2.713 G(SH_REMA).27 E(TCH)-.855 E F1 .212(indices. The element of) +2.463 F F2 -.27(BA)2.712 G(SH_REMA).27 E(TCH)-.855 E F1 .212(with inde) +2.462 F(x)-.15 E F0(n)2.712 E F1 1.025 +(is the portion of the string matching the)144 132 R F0(n)3.525 E F1 +1.025(th parenthesized sube)B(xpression.)-.15 E/F3 10/Times-Bold@0 SF +(Bash)6.025 E F1(sets)3.525 E F2 -.27(BA)3.525 G(SH_RE-).27 E(MA)144 144 +Q(TCH)-.855 E F1(in the global scope; declaring it as a local v)2.25 E (ariable will lead to une)-.25 E(xpected results.)-.15 E .786 -(Expressions may be combined using the follo)144 138 R .785 +(Expressions may be combined using the follo)144 160.8 R .785 (wing operators, listed in decreasing order of prece-)-.25 F(dence:)144 -150 Q/F3 10/Times-Bold@0 SF(\()144 168 Q F2 -.2(ex)2.5 G(pr).2 E(ession) --.37 E F3(\))2.5 E F0 .522(Returns the v)180 180 R .522(alue of)-.25 F -F2 -.2(ex)3.022 G(pr).2 E(ession)-.37 E F0 5.522(.T)C .522 -(his may be used to o)-5.522 F -.15(ve)-.15 G .522 -(rride the normal precedence of).15 F(operators.)180 192 Q F3(!)144 204 -Q F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F0 -.35(Tr)180 216 S(ue if).35 E -F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F0(is f)2.74 E(alse.)-.1 E F2 -.2 -(ex)144 228 S(pr).2 E(ession1)-.37 E F3(&&)2.5 E F2 -.2(ex)2.5 G(pr).2 E -(ession2)-.37 E F0 -.35(Tr)180 240 S(ue if both).35 E F2 -.2(ex)2.5 G -(pr).2 E(ession1)-.37 E F0(and)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2) --.37 E F0(are true.)2.52 E F2 -.2(ex)144 252 S(pr).2 E(ession1)-.37 E F3 -(||)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0 -.35(Tr)180 264 S -(ue if either).35 E F2 -.2(ex)2.5 G(pr).2 E(ession1)-.37 E F0(or)2.5 E -F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0(is true.)2.52 E(The)144 280.8 -Q F3(&&)2.676 E F0(and)2.676 E F3(||)2.676 E F0 .175(operators do not e) -2.676 F -.25(va)-.25 G(luate).25 E F2 -.2(ex)2.675 G(pr).2 E(ession2) --.37 E F0 .175(if the v)2.675 F .175(alue of)-.25 F F2 -.2(ex)2.675 G -(pr).2 E(ession1)-.37 E F0 .175(is suf)2.675 F .175(\214cient to de-) --.25 F(termine the return v)144 292.8 Q -(alue of the entire conditional e)-.25 E(xpression.)-.15 E F3 -.25(fo) -108 309.6 S(r).25 E F2(name)2.5 E F0 2.5([[)2.5 G F3(in)A F0([)2.5 E F2 -(wor)2.5 E 2.5(d.)-.37 G(..)-2.5 E F0 2.5(]];])2.5 G F3(do)A F2(list)2.5 -E F0(;)2.5 E F3(done)2.5 E F0 .423(The list of w)144 321.6 R .423 -(ords follo)-.1 F(wing)-.25 E F3(in)2.923 E F0 .423(is e)2.923 F .423 -(xpanded, generating a list of items.)-.15 F .424(The v)5.424 F(ariable) --.25 E F2(name)2.924 E F0 .424(is set to)2.924 F .653 -(each element of this list in turn, and)144 333.6 R F2(list)3.153 E F0 -.653(is e)3.153 F -.15(xe)-.15 G .653(cuted each time.).15 F .653 -(If the)5.653 F F3(in)3.153 E F2(wor)3.153 E(d)-.37 E F0 .653 -(is omitted, the)3.153 F F3 -.25(fo)3.153 G(r).25 E F0 .648(command e) -144 345.6 R -.15(xe)-.15 G(cutes).15 E F2(list)3.148 E F0 .648 -(once for each positional parameter that is set \(see)3.148 F F1 -.666 -(PA)3.149 G(RAMETERS).666 E F0(belo)2.899 E(w\).)-.25 E .154 -(The return status is the e)144 357.6 R .153 +172.8 Q F3(\()144 189.6 Q F0 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F3(\)) +2.5 E F1 .522(Returns the v)180 201.6 R .522(alue of)-.25 F F0 -.2(ex) +3.022 G(pr).2 E(ession)-.37 E F1 5.522(.T)C .522(his may be used to o) +-5.522 F -.15(ve)-.15 G .522(rride the normal precedence of).15 F +(operators.)180 213.6 Q F3(!)144 225.6 Q F0 -.2(ex)2.5 G(pr).2 E(ession) +-.37 E F1 -.35(Tr)180 237.6 S(ue if).35 E F0 -.2(ex)2.5 G(pr).2 E +(ession)-.37 E F1(is f)2.74 E(alse.)-.1 E F0 -.2(ex)144 249.6 S(pr).2 E +(ession1)-.37 E F3(&&)2.5 E F0 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F1 +-.35(Tr)180 261.6 S(ue if both).35 E F0 -.2(ex)2.5 G(pr).2 E(ession1) +-.37 E F1(and)2.5 E F0 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F1(are true.) +2.52 E F0 -.2(ex)144 273.6 S(pr).2 E(ession1)-.37 E F3(||)2.5 E F0 -.2 +(ex)2.5 G(pr).2 E(ession2)-.37 E F1 -.35(Tr)180 285.6 S(ue if either).35 +E F0 -.2(ex)2.5 G(pr).2 E(ession1)-.37 E F1(or)2.5 E F0 -.2(ex)2.5 G(pr) +.2 E(ession2)-.37 E F1(is true.)2.52 E(The)144 302.4 Q F3(&&)2.676 E F1 +(and)2.676 E F3(||)2.676 E F1 .175(operators do not e)2.676 F -.25(va) +-.25 G(luate).25 E F0 -.2(ex)2.675 G(pr).2 E(ession2)-.37 E F1 .175 +(if the v)2.675 F .175(alue of)-.25 F F0 -.2(ex)2.675 G(pr).2 E(ession1) +-.37 E F1 .175(is suf)2.675 F .175(\214cient to de-)-.25 F +(termine the return v)144 314.4 Q(alue of the entire conditional e)-.25 +E(xpression.)-.15 E F3 -.25(fo)108 331.2 S(r).25 E F0(name)2.5 E F1 2.5 +([[)2.5 G F3(in)A F1([)2.5 E F0(wor)2.5 E 2.5(d.)-.37 G 1.666(..)-.834 G +F1 2.5(]];]).834 G F3(do)A F0(list)2.5 E F1(;)2.5 E F3(done)2.5 E F1 +.423(The list of w)144 343.2 R .423(ords follo)-.1 F(wing)-.25 E F3(in) +2.923 E F1 .423(is e)2.923 F .423(xpanded, generating a list of items.) +-.15 F .424(The v)5.424 F(ariable)-.25 E F0(name)2.924 E F1 .424 +(is set to)2.924 F .653(each element of this list in turn, and)144 355.2 +R F0(list)3.153 E F1 .653(is e)3.153 F -.15(xe)-.15 G .653 +(cuted each time.).15 F .653(If the)5.653 F F3(in)3.153 E F0(wor)3.153 E +(d)-.37 E F1 .653(is omitted, the)3.153 F F3 -.25(fo)3.153 G(r).25 E F1 +.648(command e)144 367.2 R -.15(xe)-.15 G(cutes).15 E F0(list)3.148 E F1 +.648(once for each positional parameter that is set \(see)3.148 F F2 +-.666(PA)3.149 G(RAMETERS).666 E F1(belo)2.899 E(w\).)-.25 E .154 +(The return status is the e)144 379.2 R .153 (xit status of the last command that e)-.15 F -.15(xe)-.15 G 2.653 (cutes. If).15 F .153(the e)2.653 F .153(xpansion of the items)-.15 F -(follo)144 369.6 Q(wing)-.25 E F3(in)2.5 E F0 +(follo)144 391.2 Q(wing)-.25 E F3(in)2.5 E F1 (results in an empty list, no commands are e)2.5 E -.15(xe)-.15 G -(cuted, and the return status is 0.).15 E F3 -.25(fo)108 386.4 S(r).25 E -F0(\(\()2.5 E F2 -.2(ex)2.5 G(pr1).2 E F0(;)2.5 E F2 -.2(ex)2.5 G(pr2).2 -E F0(;)2.5 E F2 -.2(ex)2.5 G(pr3).2 E F0(\)\) ;)2.5 E F3(do)2.5 E F2 -(list)2.5 E F0(;)2.5 E F3(done)2.5 E F0 1.235(First, the arithmetic e) -144 398.4 R(xpression)-.15 E F2 -.2(ex)3.735 G(pr1).2 E F0 1.235(is e) +(cuted, and the return status is 0.).15 E F3 -.25(fo)108 408 S(r).25 E +F1(\(\()2.5 E F0 -.2(ex)2.5 G(pr1).2 E F1(;)2.5 E F0 -.2(ex)2.5 G(pr2).2 +E F1(;)2.5 E F0 -.2(ex)2.5 G(pr3).2 E F1(\)\) ;)2.5 E F3(do)2.5 E F0 +(list)2.5 E F1(;)2.5 E F3(done)2.5 E F1 1.235(First, the arithmetic e) +144 420 R(xpression)-.15 E F0 -.2(ex)3.735 G(pr1).2 E F1 1.235(is e) 3.735 F -.25(va)-.25 G 1.236 (luated according to the rules described belo).25 F 3.736(wu)-.25 G -(nder)-3.736 E F1 .562(ARITHMETIC EV)144 410.4 R(ALU)-1.215 E -.855(AT) --.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F0 .562(The arithmetic e) -5.062 F(xpression)-.15 E F2 -.2(ex)3.062 G(pr2).2 E F0 .561(is then e) +(nder)-3.736 E F2 .562(ARITHMETIC EV)144 432 R(ALU)-1.215 E -.855(AT) +-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F1 .562(The arithmetic e) +5.062 F(xpression)-.15 E F0 -.2(ex)3.062 G(pr2).2 E F1 .561(is then e) 3.061 F -.25(va)-.25 G .561(luated repeatedly until).25 F .591(it e)144 -422.4 R -.25(va)-.25 G .591(luates to zero.).25 F .592(Each time)5.591 F -F2 -.2(ex)3.092 G(pr2).2 E F0 -.25(eva)3.092 G .592 -(luates to a non-zero v).25 F(alue,)-.25 E F2(list)3.092 E F0 .592(is e) +444 R -.25(va)-.25 G .591(luates to zero.).25 F .592(Each time)5.591 F +F0 -.2(ex)3.092 G(pr2).2 E F1 -.25(eva)3.092 G .592 +(luates to a non-zero v).25 F(alue,)-.25 E F0(list)3.092 E F1 .592(is e) 3.092 F -.15(xe)-.15 G .592(cuted and the arith-).15 F .229(metic e)144 -434.4 R(xpression)-.15 E F2 -.2(ex)2.729 G(pr3).2 E F0 .229(is e)2.729 F +456 R(xpression)-.15 E F0 -.2(ex)2.729 G(pr3).2 E F1 .229(is e)2.729 F -.25(va)-.25 G 2.729(luated. If).25 F(an)2.729 E 2.729(ye)-.15 G .229 (xpression is omitted, it beha)-2.879 F -.15(ve)-.2 G 2.729(sa).15 G 2.729(si)-2.729 G 2.729(fi)-2.729 G 2.728(te)-2.729 G -.25(va)-2.978 G -.228(luates to 1.).25 F .227(The return v)144 446.4 R .227 -(alue is the e)-.25 F .227(xit status of the last command in)-.15 F F2 -(list)2.728 E F0 .228(that is e)2.728 F -.15(xe)-.15 G .228(cuted, or f) -.15 F .228(alse if an)-.1 F 2.728(yo)-.15 G 2.728(ft)-2.728 G(he)-2.728 -E -.15(ex)144 458.4 S(pressions is in).15 E -.25(va)-.4 G(lid.).25 E F3 -(select)108 475.2 Q F2(name)2.5 E F0([)2.5 E F3(in)2.5 E F2(wor)2.5 E(d) --.37 E F0 2.5(];)2.5 G F3(do)A F2(list)2.5 E F0(;)2.5 E F3(done)2.5 E F0 -1.358(The list of w)144 487.2 R 1.358(ords follo)-.1 F(wing)-.25 E F3 -(in)3.858 E F0 1.358(is e)3.858 F 1.357 +.228(luates to 1.).25 F .227(The return v)144 468 R .227(alue is the e) +-.25 F .227(xit status of the last command in)-.15 F F0(list)2.728 E F1 +.228(that is e)2.728 F -.15(xe)-.15 G .228(cuted, or f).15 F .228 +(alse if an)-.1 F 2.728(yo)-.15 G 2.728(ft)-2.728 G(he)-2.728 E -.15(ex) +144 480 S(pressions is in).15 E -.25(va)-.4 G(lid.).25 E F3(select)108 +496.8 Q F0(name)2.5 E F1([)2.5 E F3(in)2.5 E F0(wor)2.5 E(d)-.37 E F1 +2.5(];)2.5 G F3(do)A F0(list)2.5 E F1(;)2.5 E F3(done)2.5 E F1 1.358 +(The list of w)144 508.8 R 1.358(ords follo)-.1 F(wing)-.25 E F3(in) +3.858 E F1 1.358(is e)3.858 F 1.357 (xpanded, generating a list of items, and the set of e)-.15 F(xpanded) --.15 E -.1(wo)144 499.2 S .601(rds is printed on the standard error).1 F +-.15 E -.1(wo)144 520.8 S .601(rds is printed on the standard error).1 F 3.101(,e)-.4 G .601(ach preceded by a number)-3.101 F 5.601(.I)-.55 G -3.101(ft)-5.601 G(he)-3.101 E F3(in)3.101 E F2(wor)3.101 E(d)-.37 E F0 +3.101(ft)-5.601 G(he)-3.101 E F3(in)3.101 E F0(wor)3.101 E(d)-.37 E F1 .602(is omitted, the)3.101 F .188 -(positional parameters are printed \(see)144 511.2 R F1 -.666(PA)2.688 G -(RAMETERS).666 E F0(belo)2.438 E(w\).)-.25 E F3(select)5.188 E F0 .188 -(then displays the)2.688 F F1(PS3)2.687 E F0(prompt)2.437 E .46 -(and reads a line from the standard input.)144 523.2 R .461 +(positional parameters are printed \(see)144 532.8 R F2 -.666(PA)2.688 G +(RAMETERS).666 E F1(belo)2.438 E(w\).)-.25 E F3(select)5.188 E F1 .188 +(then displays the)2.688 F F2(PS3)2.687 E F1(prompt)2.437 E .46 +(and reads a line from the standard input.)144 544.8 R .461 (If the line consists of a number corresponding to one of)5.46 F .141 -(the displayed w)144 535.2 R .141(ords, then the v)-.1 F .141(alue of) --.25 F F2(name)3.001 E F0 .141(is set to that w)2.821 F 2.641(ord. If) +(the displayed w)144 556.8 R .141(ords, then the v)-.1 F .141(alue of) +-.25 F F0(name)3.001 E F1 .141(is set to that w)2.821 F 2.641(ord. If) -.1 F .141(the line is empty)2.641 F 2.641(,t)-.65 G .141(he w)-2.641 F -.141(ords and)-.1 F 1.048(prompt are displayed ag)144 547.2 R 3.548 -(ain. If)-.05 F 1.048(EOF is read, the)3.548 F F3(select)3.548 E F0 +.141(ords and)-.1 F 1.048(prompt are displayed ag)144 568.8 R 3.548 +(ain. If)-.05 F 1.048(EOF is read, the)3.548 F F3(select)3.548 E F1 1.048(command completes and returns 1.)3.548 F(An)6.048 E(y)-.15 E .32 -(other v)144 559.2 R .32(alue read causes)-.25 F F2(name)3.18 E F0 .32 +(other v)144 580.8 R .32(alue read causes)-.25 F F0(name)3.18 E F1 .32 (to be set to null.)3 F .32(The line read is sa)5.32 F -.15(ve)-.2 G -2.82(di).15 G 2.82(nt)-2.82 G .319(he v)-2.82 F(ariable)-.25 E F1(REPL) -2.819 E(Y)-.828 E F4(.)A F0(The)4.819 E F2(list)144.09 571.2 Q F0 .055 +2.82(di).15 G 2.82(nt)-2.82 G .319(he v)-2.82 F(ariable)-.25 E F2(REPL) +2.819 E(Y)-.828 E F4(.)A F1(The)4.819 E F0(list)144.09 592.8 Q F1 .055 (is e)3.235 F -.15(xe)-.15 G .056(cuted after each selection until a).15 -F F3(br)2.556 E(eak)-.18 E F0 .056(command is e)2.556 F -.15(xe)-.15 G +F F3(br)2.556 E(eak)-.18 E F1 .056(command is e)2.556 F -.15(xe)-.15 G 2.556(cuted. The).15 F -.15(ex)2.556 G .056(it status of).15 F F3 -(select)2.556 E F0(is)2.556 E(the e)144 583.2 Q +(select)2.556 E F1(is)2.556 E(the e)144 604.8 Q (xit status of the last command e)-.15 E -.15(xe)-.15 G(cuted in).15 E -F2(list)2.59 E F0 2.5(,o).68 G 2.5(rz)-2.5 G(ero if no commands were e) --2.5 E -.15(xe)-.15 G(cuted.).15 E F3(case)108 600 Q F2(wor)2.5 E(d)-.37 -E F3(in)2.5 E F0 2.5([[)2.5 G(\(])-2.5 E F2(pattern)2.5 E F0([)2.5 E F3 -(|)2.5 E F2(pattern)2.5 E F0 2.5(].)2.5 G(.. \))-2.5 E F2(list)2.5 E F0 -(;; ] ...)2.5 E F3(esac)2.5 E F0(A)144 612 Q F3(case)3.265 E F0 .764 -(command \214rst e)3.265 F(xpands)-.15 E F2(wor)3.264 E(d)-.37 E F0 -3.264(,a)C .764(nd tries to match it ag)-3.264 F .764(ainst each)-.05 F -F2(pattern)3.264 E F0 .764(in turn, using the)3.264 F .883 -(matching rules described under)144 624 R F3 -.1(Pa)3.384 G(tter).1 E -3.384(nM)-.15 G(atching)-3.384 E F0(belo)3.384 E 4.684 -.65(w. T)-.25 H -(he).65 E F2(wor)3.384 E(d)-.37 E F0 .884(is e)3.384 F .884 -(xpanded using tilde e)-.15 F(x-)-.15 E .95(pansion, parameter and v)144 -636 R .95(ariable e)-.25 F .95(xpansion, arithmetic e)-.15 F .95 -(xpansion, command substitution, process)-.15 F .18 -(substitution and quote remo)144 648 R -.25(va)-.15 G 2.681(l. Each).25 -F F2(pattern)2.681 E F0 -.15(ex)2.681 G .181(amined is e).15 F .181 -(xpanded using tilde e)-.15 F .181(xpansion, param-)-.15 F .103 -(eter and v)144 660 R .103(ariable e)-.25 F .103(xpansion, arithmetic e) --.15 F .103(xpansion, command substitution, process substitution, and) --.15 F .138(quote remo)144 672 R -.25(va)-.15 G 2.638(l. If).25 F(the) -2.638 E F3(nocasematch)2.638 E F0 .139 -(shell option is enabled, the match is performed without re)2.638 F -.05 -(ga)-.15 G(rd).05 E .209(to the case of alphabetic characters.)144 684 R -.209(When a match is found, the corresponding)5.209 F F2(list)2.708 E F0 -.208(is e)2.708 F -.15(xe)-.15 G 2.708(cuted. If).15 F(the)144 696 Q F3 -(;;)3.349 E F0 .849(operator is used, no subsequent matches are attempt\ -ed after the \214rst pattern match.)3.349 F(Using)5.85 E F3(;&)144 708 Q -F0 .254(in place of)2.754 F F3(;;)2.754 E F0 .254(causes e)2.754 F -.15 -(xe)-.15 G .254(cution to continue with the).15 F F2(list)2.754 E F0 -.254(associated with the ne)2.754 F .253(xt set of patterns.)-.15 F -(Using)144 720 Q F3(;;&)3.378 E F0 .878(in place of)3.378 F F3(;;)3.378 -E F0 .878(causes the shell to test the ne)3.378 F .878 -(xt pattern list in the statement, if an)-.15 F 2.178 -.65(y, a)-.15 H -(nd).65 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(6)190.115 E -0 Cg EP +F0(list)2.59 E F1 2.5(,o).68 G 2.5(rz)-2.5 G(ero if no commands were e) +-2.5 E -.15(xe)-.15 G(cuted.).15 E F3(case)108 621.6 Q F0(wor)2.5 E(d) +-.37 E F3(in)2.5 E F1 2.5([[)2.5 G(\(])-2.5 E F0(pattern)2.5 E F1([)2.5 +E F3(|)2.5 E F0(pattern)2.5 E F1 2.5(].)2.5 G -3.332 1.666(.. \))-.834 H +F0(list).834 E F1(;; ] .)2.5 E 1.666(..)1.666 G F3(esac).834 E F1(A)144 +633.6 Q F3(case)3.265 E F1 .764(command \214rst e)3.265 F(xpands)-.15 E +F0(wor)3.264 E(d)-.37 E F1 3.264(,a)C .764(nd tries to match it ag) +-3.264 F .764(ainst each)-.05 F F0(pattern)3.264 E F1 .764 +(in turn, using the)3.264 F .883(matching rules described under)144 +645.6 R F3 -.1(Pa)3.384 G(tter).1 E 3.384(nM)-.15 G(atching)-3.384 E F1 +(belo)3.384 E 4.684 -.65(w. T)-.25 H(he).65 E F0(wor)3.384 E(d)-.37 E F1 +.884(is e)3.384 F .884(xpanded using tilde e)-.15 F(x-)-.15 E .95 +(pansion, parameter and v)144 657.6 R .95(ariable e)-.25 F .95 +(xpansion, arithmetic e)-.15 F .95 +(xpansion, command substitution, process)-.15 F .829 +(substitution and quote remo)144 669.6 R -.25(va)-.15 G 3.329(l. Each) +.25 F F0(pattern)3.329 E F1 -.15(ex)3.329 G .829(amined is e).15 F .829 +(xpanded using tilde e)-.15 F .83(xpansion, para-)-.15 F 1.133 +(meter and v)144 681.6 R 1.132(ariable e)-.25 F 1.132 +(xpansion, arithmetic e)-.15 F 1.132 +(xpansion, command substitution, process substitution,)-.15 F .917 +(and quote remo)144 693.6 R -.25(va)-.15 G 3.417(l. If).25 F(the)3.417 E +F3(nocasematch)3.417 E F1 .917 +(shell option is enabled, the match is performed without)3.417 F(re)144 +705.6 Q -.05(ga)-.15 G .5(rd to the case of alphabetic characters.).05 F +.499(When a match is found, the corresponding)5.499 F F0(list)2.999 E F1 +.499(is e)2.999 F -.15(xe)-.15 G(-).15 E 2.706(cuted. If)144 717.6 R +(the)2.706 E F3(;;)2.707 E F1 .207(operator is used, no subsequent matc\ +hes are attempted after the \214rst pattern match.)2.707 F(Using)144 +729.6 Q F3(;&)3.325 E F1 .825(in place of)3.325 F F3(;;)3.325 E F1 .825 +(causes e)3.325 F -.15(xe)-.15 G .824(cution to continue with the).15 F +F0(list)3.324 E F1 .824(associated with the ne)3.324 F .824(xt set of) +-.15 F(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(6)198.45 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.15(exe)144 84 S -.159(cute an).15 F 2.659(ya)-.15 G(ssociated)-2.659 E/F1 10 -/Times-Italic@0 SF(list)2.659 E F0 .159 -(on a successful match, continuing the case statement e)2.659 F -.15(xe) --.15 G .158(cution as if the).15 F .182(pattern list had not matched.) -144 96 R .183(The e)5.183 F .183 -(xit status is zero if no pattern matches.)-.15 F .183 -(Otherwise, it is the e)5.183 F(xit)-.15 E(status of the last command e) -144 108 Q -.15(xe)-.15 G(cuted in).15 E F1(list)2.5 E F0(.)A/F2 10 -/Times-Bold@0 SF(if)108 124.8 Q F1(list)2.5 E F0(;)A F2(then)2.5 E F1 -(list)2.5 E F0 2.5(;[)C F2(elif)A F1(list)2.5 E F0(;)A F2(then)2.5 E F1 -(list)2.5 E F0 2.5(;].)C(.. [)-2.5 E F2(else)2.5 E F1(list)2.5 E F0 2.5 -(;])C F2<8c>A F0(The)144 136.8 Q F2(if)2.978 E F1(list)3.068 E F0 .478 -(is e)3.658 F -.15(xe)-.15 G 2.978(cuted. If).15 F .478(its e)2.978 F -.478(xit status is zero, the)-.15 F F2(then)2.978 E F1(list)2.978 E F0 -.478(is e)2.978 F -.15(xe)-.15 G 2.978(cuted. Otherwise,).15 F(each) -2.978 E F2(elif)2.977 E F1(list)2.977 E F0 1.087(is e)144 148.8 R -.15 -(xe)-.15 G 1.087(cuted in turn, and if its e).15 F 1.087 -(xit status is zero, the corresponding)-.15 F F2(then)3.587 E F1(list) -3.587 E F0 1.088(is e)3.588 F -.15(xe)-.15 G 1.088(cuted and the).15 F -.104(command completes.)144 160.8 R .103(Otherwise, the)5.104 F F2(else) -2.603 E F1(list)2.603 E F0 .103(is e)2.603 F -.15(xe)-.15 G .103 -(cuted, if present.).15 F .103(The e)5.103 F .103(xit status is the e) --.15 F .103(xit sta-)-.15 F(tus of the last command e)144 172.8 Q -.15 -(xe)-.15 G(cuted, or zero if no condition tested true.).15 E F2(while) -108 189.6 Q F1(list-1)2.5 E F0(;)A F2(do)2.5 E F1(list-2)2.5 E F0(;)A F2 -(done)2.5 E(until)108 201.6 Q F1(list-1)2.5 E F0(;)A F2(do)2.5 E F1 -(list-2)2.5 E F0(;)A F2(done)2.5 E F0(The)144 213.6 Q F2(while)3.45 E F0 -.95(command continuously e)3.45 F -.15(xe)-.15 G .95(cutes the list).15 -F F1(list-2)3.45 E F0 .95(as long as the last command in the list)3.45 F -F1(list-1)144 225.6 Q F0 .205(returns an e)2.705 F .205 -(xit status of zero.)-.15 F(The)5.205 E F2(until)2.705 E F0 .205 -(command is identical to the)2.705 F F2(while)2.705 E F0 .205 -(command, e)2.705 F(xcept)-.15 E .599(that the test is ne)144 237.6 R --.05(ga)-.15 G(ted:).05 E F1(list-2)3.189 E F0 .599(is e)3.119 F -.15 -(xe)-.15 G .6(cuted as long as the last command in).15 F F1(list-1)3.19 -E F0 .6(returns a non-zero)3.1 F -.15(ex)144 249.6 S .205(it status.).15 -F .205(The e)5.205 F .205(xit status of the)-.15 F F2(while)2.705 E F0 -(and)2.705 E F2(until)2.704 E F0 .204(commands is the e)2.704 F .204 -(xit status of the last command)-.15 F -.15(exe)144 261.6 S(cuted in).15 -E F1(list-2)2.5 E F0 2.5(,o)C 2.5(rz)-2.5 G(ero if none w)-2.5 E(as e) --.1 E -.15(xe)-.15 G(cuted.).15 E F2(Copr)87 278.4 Q(ocesses)-.18 E F0 -(A)108 290.4 Q F1(copr)3.712 E(ocess)-.45 E F0 1.212 -(is a shell command preceded by the)3.712 F F2(copr)3.713 E(oc)-.18 E F0 -(reserv)3.713 E 1.213(ed w)-.15 F 3.713(ord. A)-.1 F 1.213 -(coprocess is e)3.713 F -.15(xe)-.15 G 1.213(cuted asyn-).15 F .575(chr\ -onously in a subshell, as if the command had been terminated with the) -108 302.4 R F2(&)3.074 E F0 .574(control operator)3.074 F 3.074(,w)-.4 G -.574(ith a tw)-3.074 F(o-)-.1 E -.1(wa)108 314.4 S 2.5(yp).1 G -(ipe established between the e)-2.5 E -.15(xe)-.15 G +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E 3.235(patterns. Using)144 84 R/F2 10/Times-Bold@0 +SF(;;&)3.235 E F1 .735(in place of)3.235 F F2(;;)3.236 E F1 .736 +(causes the shell to test the ne)3.236 F .736 +(xt pattern list in the statement, if)-.15 F(an)144 96 Q 1.369 -.65 +(y, a)-.15 H .069(nd e).65 F -.15(xe)-.15 G .069(cute an).15 F 2.569(ya) +-.15 G(ssociated)-2.569 E F0(list)2.569 E F1 .068 +(on a successful match, continuing the case statement e)2.569 F -.15(xe) +-.15 G(cution).15 E .063(as if the pattern list had not matched.)144 108 +R .063(The e)5.063 F .063(xit status is zero if no pattern matches.)-.15 +F .064(Otherwise, it is)5.064 F(the e)144 120 Q +(xit status of the last command e)-.15 E -.15(xe)-.15 G(cuted in).15 E +F0(list)2.5 E F1(.)A F2(if)108 136.8 Q F0(list)2.5 E F1(;)A F2(then)2.5 +E F0(list)2.5 E F1 2.5(;[)C F2(elif)A F0(list)2.5 E F1(;)A F2(then)2.5 E +F0(list)2.5 E F1 2.5(;].)C -3.332 1.666(.. [)-.834 H F2(else).834 E F0 +(list)2.5 E F1 2.5(;])C F2<8c>A F1(The)144 148.8 Q F2(if)2.978 E F0 +(list)3.068 E F1 .478(is e)3.658 F -.15(xe)-.15 G 2.978(cuted. If).15 F +.478(its e)2.978 F .478(xit status is zero, the)-.15 F F2(then)2.978 E +F0(list)2.978 E F1 .478(is e)2.978 F -.15(xe)-.15 G 2.978 +(cuted. Otherwise,).15 F(each)2.978 E F2(elif)2.977 E F0(list)2.977 E F1 +1.087(is e)144 160.8 R -.15(xe)-.15 G 1.087(cuted in turn, and if its e) +.15 F 1.087(xit status is zero, the corresponding)-.15 F F2(then)3.587 E +F0(list)3.587 E F1 1.088(is e)3.588 F -.15(xe)-.15 G 1.088 +(cuted and the).15 F .104(command completes.)144 172.8 R .103 +(Otherwise, the)5.104 F F2(else)2.603 E F0(list)2.603 E F1 .103(is e) +2.603 F -.15(xe)-.15 G .103(cuted, if present.).15 F .103(The e)5.103 F +.103(xit status is the e)-.15 F .103(xit sta-)-.15 F +(tus of the last command e)144 184.8 Q -.15(xe)-.15 G +(cuted, or zero if no condition tested true.).15 E F2(while)108 201.6 Q +F0(list-1)2.5 E F1(;)A F2(do)2.5 E F0(list-2)2.5 E F1(;)A F2(done)2.5 E +(until)108 213.6 Q F0(list-1)2.5 E F1(;)A F2(do)2.5 E F0(list-2)2.5 E F1 +(;)A F2(done)2.5 E F1(The)144 225.6 Q F2(while)3.45 E F1 .95 +(command continuously e)3.45 F -.15(xe)-.15 G .95(cutes the list).15 F +F0(list-2)3.45 E F1 .95(as long as the last command in the list)3.45 F +F0(list-1)144 237.6 Q F1 .205(returns an e)2.705 F .205 +(xit status of zero.)-.15 F(The)5.205 E F2(until)2.705 E F1 .205 +(command is identical to the)2.705 F F2(while)2.705 E F1 .205 +(command, e)2.705 F(xcept)-.15 E .599(that the test is ne)144 249.6 R +-.05(ga)-.15 G(ted:).05 E F0(list-2)3.189 E F1 .599(is e)3.119 F -.15 +(xe)-.15 G .6(cuted as long as the last command in).15 F F0(list-1)3.19 +E F1 .6(returns a non-zero)3.1 F -.15(ex)144 261.6 S .205(it status.).15 +F .205(The e)5.205 F .205(xit status of the)-.15 F F2(while)2.705 E F1 +(and)2.705 E F2(until)2.704 E F1 .204(commands is the e)2.704 F .204 +(xit status of the last command)-.15 F -.15(exe)144 273.6 S(cuted in).15 +E F0(list-2)2.5 E F1 2.5(,o)C 2.5(rz)-2.5 G(ero if none w)-2.5 E(as e) +-.1 E -.15(xe)-.15 G(cuted.).15 E F2(Copr)87 290.4 Q(ocesses)-.18 E F1 +(A)108 302.4 Q F0(copr)2.601 E(ocess)-.45 E F1 .102 +(is a shell command preceded by the)2.601 F F2(copr)2.602 E(oc)-.18 E F1 +(reserv)2.602 E .102(ed w)-.15 F 2.602(ord. A)-.1 F .102(coprocess is e) +2.602 F -.15(xe)-.15 G .102(cuted asynchro-).15 F .642 +(nously in a subshell, as if the command had been terminated with the) +108 314.4 R F2(&)3.141 E F1 .641(control operator)3.141 F 3.141(,w)-.4 G +.641(ith a tw)-3.141 F(o-w)-.1 E(ay)-.1 E +(pipe established between the e)108 326.4 Q -.15(xe)-.15 G (cuting shell and the coprocess.).15 E(The syntax for a coprocess is:) -108 331.2 Q F2(copr)144 348 Q(oc)-.18 E F0([)2.5 E F1 -.27(NA)C(ME).27 E -F0(])A F1(command)2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ections)-.37 E -F0(])A .598(This creates a coprocess named)108 364.8 R F1 -.27(NA)3.099 -G(ME).27 E F0(.)A F1(command)5.599 E F0 .599 +108 343.2 Q F2(copr)144 360 Q(oc)-.18 E F1([)2.5 E F0 -.27(NA)C(ME).27 E +F1(])A F0(command)2.5 E F1([)2.5 E F0 -.37(re)C(dir).37 E(ections)-.37 E +F1(])A .598(This creates a coprocess named)108 376.8 R F0 -.27(NA)3.099 +G(ME).27 E F1(.)A F0(command)5.599 E F1 .599 (may be either a simple command or a compound com-)3.099 F 1.4 -(mand \(see abo)108 376.8 R -.15(ve)-.15 G(\).).15 E F1 -.27(NA)6.4 G -(ME).27 E F0 1.4(is a shell v)3.9 F 1.4(ariable name.)-.25 F(If)6.4 E F1 --.27(NA)3.9 G(ME).27 E F0 1.4(is not supplied, the def)3.9 F 1.4 -(ault name is)-.1 F F2(CO-)3.9 E(PR)108 388.8 Q(OC)-.3 E F0(.)A -(The recommended form to use for a coprocess is)108 405.6 Q F2(copr)144 -422.4 Q(oc)-.18 E F1 -.27(NA)2.5 G(ME).27 E F0({)2.5 E F1(command)2.5 E -F0([)2.5 E F1 -.37(re)C(dir).37 E(ections)-.37 E F0(]; })A 1.313(This f\ +(mand \(see abo)108 388.8 R -.15(ve)-.15 G(\).).15 E F0 -.27(NA)6.4 G +(ME).27 E F1 1.4(is a shell v)3.9 F 1.4(ariable name.)-.25 F(If)6.4 E F0 +-.27(NA)3.9 G(ME).27 E F1 1.4(is not supplied, the def)3.9 F 1.4 +(ault name is)-.1 F F2(CO-)3.9 E(PR)108 400.8 Q(OC)-.3 E F1(.)A +(The recommended form to use for a coprocess is)108 417.6 Q F2(copr)144 +434.4 Q(oc)-.18 E F0 -.27(NA)2.5 G(ME).27 E F1({)2.5 E F0(command)2.5 E +F1([)2.5 E F0 -.37(re)C(dir).37 E(ections)-.37 E F1(]; })A 1.313(This f\ orm is recommended because simple commands result in the coprocess al) -108 439.2 R -.1(wa)-.1 G 1.313(ys being named).1 F F2(CO-)3.813 E(PR)108 -451.2 Q(OC)-.3 E F0 2.5(,a)C(nd it is simpler to use and more complete \ -than the other compound commands.)-2.5 E(If)108 468 Q F1(command)3.062 E -F0 .562(is a compound command,)3.062 F F1 -.27(NA)3.062 G(ME).27 E F0 +108 451.2 R -.1(wa)-.1 G 1.313(ys being named).1 F F2(CO-)3.813 E(PR)108 +463.2 Q(OC)-.3 E F1 2.5(,a)C(nd it is simpler to use and more complete \ +than the other compound commands.)-2.5 E(If)108 480 Q F0(command)3.062 E +F1 .562(is a compound command,)3.062 F F0 -.27(NA)3.062 G(ME).27 E F1 .561(is optional. The w)3.061 F .561(ord follo)-.1 F(wing)-.25 E F2 -(copr)3.061 E(oc)-.18 E F0 .561(determines whether)3.061 F .338(that w) -108 480 R .338(ord is interpreted as a v)-.1 F .338 -(ariable name: it is interpreted as)-.25 F F1 -.27(NA)2.839 G(ME).27 E -F0 .339(if it is not a reserv)2.839 F .339(ed w)-.15 F .339 -(ord that intro-)-.1 F 1.122(duces a compound command.)108 492 R(If) -6.121 E F1(command)3.621 E F0 1.121(is a simple command,)3.621 F F1 -.27 -(NA)3.621 G(ME).27 E F0 1.121(is not allo)3.621 F 1.121 -(wed; this is to a)-.25 F -.2(vo)-.2 G(id).2 E(confusion between)108 504 -Q F1 -.27(NA)2.5 G(ME).27 E F0(and the \214rst w)2.5 E -(ord of the simple command.)-.1 E .09(When the coprocess is e)108 520.8 +(copr)3.061 E(oc)-.18 E F1 .561(determines whether)3.061 F .338(that w) +108 492 R .338(ord is interpreted as a v)-.1 F .338 +(ariable name: it is interpreted as)-.25 F F0 -.27(NA)2.839 G(ME).27 E +F1 .339(if it is not a reserv)2.839 F .339(ed w)-.15 F .339 +(ord that intro-)-.1 F 1.122(duces a compound command.)108 504 R(If) +6.121 E F0(command)3.621 E F1 1.121(is a simple command,)3.621 F F0 -.27 +(NA)3.621 G(ME).27 E F1 1.121(is not allo)3.621 F 1.121 +(wed; this is to a)-.25 F -.2(vo)-.2 G(id).2 E(confusion between)108 516 +Q F0 -.27(NA)2.5 G(ME).27 E F1(and the \214rst w)2.5 E +(ord of the simple command.)-.1 E .09(When the coprocess is e)108 532.8 R -.15(xe)-.15 G .09(cuted, the shell creates an array v).15 F .09 -(ariable \(see)-.25 F F2(Arrays)2.59 E F0(belo)2.59 E .09(w\) named)-.25 -F F1 -.27(NA)2.59 G(ME).27 E F0 .09(in the)2.59 F(conte)108 532.8 Q .303 +(ariable \(see)-.25 F F2(Arrays)2.59 E F1(belo)2.59 E .09(w\) named)-.25 +F F0 -.27(NA)2.59 G(ME).27 E F1 .09(in the)2.59 F(conte)108 544.8 Q .303 (xt of the e)-.15 F -.15(xe)-.15 G .303(cuting shell.).15 F .302 -(The standard output of)5.302 F F1(command)3.002 E F0 .302 +(The standard output of)5.302 F F0(command)3.002 E F1 .302 (is connected via a pipe to a \214le descriptor)3.572 F .587(in the e) -108 544.8 R -.15(xe)-.15 G .587 -(cuting shell, and that \214le descriptor is assigned to).15 F F1 -.27 -(NA)3.087 G(ME).27 E F0 3.087([0]. The)B .587(standard input of)3.087 F -F1(command)3.287 E F0(is)3.858 E 2.029 -(connected via a pipe to a \214le descriptor in the e)108 556.8 R -.15 +108 556.8 R -.15(xe)-.15 G .587 +(cuting shell, and that \214le descriptor is assigned to).15 F F0 -.27 +(NA)3.087 G(ME).27 E F1 3.087([0]. The)B .587(standard input of)3.087 F +F0(command)3.287 E F1(is)3.858 E 2.029 +(connected via a pipe to a \214le descriptor in the e)108 568.8 R -.15 (xe)-.15 G 2.029 -(cuting shell, and that \214le descriptor is assigned to).15 F F1 -.27 -(NA)108 568.8 S(ME).27 E F0 2.879([1]. This)B .379 +(cuting shell, and that \214le descriptor is assigned to).15 F F0 -.27 +(NA)108 580.8 S(ME).27 E F1 2.879([1]. This)B .379 (pipe is established before an)2.879 F 2.879(yr)-.15 G .379 (edirections speci\214ed by the command \(see)-2.879 F/F3 9/Times-Bold@0 -SF(REDIRECTION)2.879 E F0(belo)108 580.8 Q 3.426(w\). The)-.25 F .926 +SF(REDIRECTION)2.879 E F1(belo)108 592.8 Q 3.426(w\). The)-.25 F .926 (\214le descriptors can be utilized as ar)3.426 F .925 (guments to shell commands and redirections using stan-)-.18 F .286 -(dard w)108 592.8 R .286(ord e)-.1 F 2.786(xpansions. Other)-.15 F .286 +(dard w)108 604.8 R .286(ord e)-.1 F 2.786(xpansions. Other)-.15 F .286 (than those created to e)2.786 F -.15(xe)-.15 G .286 (cute command and process substitutions, the \214le de-).15 F -(scriptors are not a)108 604.8 Q -.25(va)-.2 G(ilable in subshells.).25 -E 1.676(The process ID of the shell spa)108 621.6 R 1.676(wned to e)-.15 +(scriptors are not a)108 616.8 Q -.25(va)-.2 G(ilable in subshells.).25 +E 1.676(The process ID of the shell spa)108 633.6 R 1.676(wned to e)-.15 F -.15(xe)-.15 G 1.676(cute the coprocess is a).15 F -.25(va)-.2 G 1.676 -(ilable as the v).25 F 1.676(alue of the v)-.25 F(ariable)-.25 E F1 -.27 -(NA)108 633.6 S(ME).27 E F0 2.5(_PID. The)B F2(wait)2.5 E F0 -.2(bu)2.5 +(ilable as the v).25 F 1.676(alue of the v)-.25 F(ariable)-.25 E F0 -.27 +(NA)108 645.6 S(ME).27 E F1 2.5(_PID. The)B F2(wait)2.5 E F1 -.2(bu)2.5 G(iltin command may be used to w).2 E (ait for the coprocess to terminate.)-.1 E .336 (Since the coprocess is created as an asynchronous command, the)108 -650.4 R F2(copr)2.836 E(oc)-.18 E F0 .336(command al)2.836 F -.1(wa)-.1 +662.4 R F2(copr)2.836 E(oc)-.18 E F1 .336(command al)2.836 F -.1(wa)-.1 G .336(ys returns success.).1 F -(The return status of a coprocess is the e)108 662.4 Q(xit status of) --.15 E F1(command)2.5 E F0(.)A F2(Shell Function De\214nitions)87 679.2 -Q F0 2.698(As)108 691.2 S .198 +(The return status of a coprocess is the e)108 674.4 Q(xit status of) +-.15 E F0(command)2.5 E F1(.)A F2(Shell Function De\214nitions)87 691.2 +Q F1 2.698(As)108 703.2 S .198 (hell function is an object that is called lik)-2.698 F 2.698(eas)-.1 G .198(imple command and e)-2.698 F -.15(xe)-.15 G .197 -(cutes a compound command with).15 F 2.5(an)108 703.2 S .5 -.25(ew s) +(cutes a compound command with).15 F 2.5(an)108 715.2 S .5 -.25(ew s) -2.5 H(et of positional parameters.).25 E -(Shell functions are declared as follo)5 E(ws:)-.25 E(GNU Bash 5.2)72 -768 Q(2022 September 19)135.955 E(7)190.115 E 0 Cg EP +(Shell functions are declared as follo)5 E(ws:)-.25 E(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(7)198.45 E 0 Cg EP %%Page: 8 8 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 -/Times-Italic@0 SF(fname)108 84 Q F0(\(\))2.5 E F1(compound\255command) -2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ection)-.37 E F0(])A/F2 10 -/Times-Bold@0 SF(function)108 96 Q F1(fname)2.5 E F0([\(\)])2.5 E F1 -(compound\255command)2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ection)-.37 -E F0(])A .216(This de\214nes a function named)144 108 R F1(fname)2.716 E -F0 5.217(.T)C .217(he reserv)-5.217 F .217(ed w)-.15 F(ord)-.1 E F2 -(function)2.717 E F0 .217(is optional.)2.717 F .217(If the)5.217 F F2 -(function)2.717 E F0(re-)2.717 E(serv)144 120 Q .68(ed w)-.15 F .68 -(ord is supplied, the parentheses are optional.)-.1 F(The)5.68 E F1 -(body)3.18 E F0 .68(of the function is the compound)3.18 F(command)144 -132 Q F1(compound\255command)2.784 E F0(\(see)3.354 E F2 .084 -(Compound Commands)2.584 F F0(abo)2.584 E -.15(ve)-.15 G 2.584(\). That) -.15 F .084(command is usually a)2.584 F F1(list)144 144 Q F0 .044 -(of commands between { and }, b)2.544 F .044(ut may be an)-.2 F 2.544 -(yc)-.15 G .044(ommand listed under)-2.544 F F2 .044(Compound Commands) -2.544 F F0(abo)144 156 Q -.15(ve)-.15 G 5.531(.I).15 G 3.031(ft)-5.531 G -(he)-3.031 E F2(function)3.032 E F0(reserv)3.032 E .532(ed w)-.15 F .532 -(ord is used, b)-.1 F .532 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E F0(fname)108 84 Q F1(\(\))2.5 E F0 +(compound\255command)2.5 E F1([)2.5 E F0 -.37(re)C(dir).37 E(ection)-.37 +E F1(])A/F2 10/Times-Bold@0 SF(function)108 96 Q F0(fname)2.5 E F1 +([\(\)])2.5 E F0(compound\255command)2.5 E F1([)2.5 E F0 -.37(re)C(dir) +.37 E(ection)-.37 E F1(])A .216(This de\214nes a function named)144 108 +R F0(fname)2.716 E F1 5.217(.T)C .217(he reserv)-5.217 F .217(ed w)-.15 +F(ord)-.1 E F2(function)2.717 E F1 .217(is optional.)2.717 F .217 +(If the)5.217 F F2(function)2.717 E F1(re-)2.717 E(serv)144 120 Q .68 +(ed w)-.15 F .68(ord is supplied, the parentheses are optional.)-.1 F +(The)5.68 E F0(body)3.18 E F1 .68(of the function is the compound)3.18 F +(command)144 132 Q F0(compound\255command)2.784 E F1(\(see)3.354 E F2 +.084(Compound Commands)2.584 F F1(abo)2.584 E -.15(ve)-.15 G 2.584 +(\). That).15 F .084(command is usually a)2.584 F F0(list)144 144 Q F1 +.044(of commands between { and }, b)2.544 F .044(ut may be an)-.2 F +2.544(yc)-.15 G .044(ommand listed under)-2.544 F F2 .044 +(Compound Commands)2.544 F F1(abo)144 156 Q -.15(ve)-.15 G 5.531(.I).15 +G 3.031(ft)-5.531 G(he)-3.031 E F2(function)3.032 E F1(reserv)3.032 E +.532(ed w)-.15 F .532(ord is used, b)-.1 F .532 (ut the parentheses are not supplied, the braces are)-.2 F(recommended.) -144 168 Q F1(compound\255command)6.254 E F0 1.254(is e)3.754 F -.15(xe) --.15 G 1.254(cuted whene).15 F -.15(ve)-.25 G(r).15 E F1(fname)3.753 E -F0 1.253(is speci\214ed as the name of a)3.753 F 1.252(simple command.) -144 180 R 1.252(When in)6.252 F F1 1.252(posix mode)3.752 F F0(,)A F1 -(fname)3.752 E F0 1.252(must be a v)3.752 F 1.252(alid shell)-.25 F F1 -(name)3.753 E F0 1.253(and may not be the)3.753 F .089 -(name of one of the POSIX)144 192 R F1 .089(special b)2.589 F(uiltins) --.2 E F0 5.089(.I)C 2.589(nd)-5.089 G(ef)-2.589 E .089 +144 168 Q F0(compound\255command)6.254 E F1 1.254(is e)3.754 F -.15(xe) +-.15 G 1.254(cuted whene).15 F -.15(ve)-.25 G(r).15 E F0(fname)3.753 E +F1 1.253(is speci\214ed as the name of a)3.753 F 1.252(simple command.) +144 180 R 1.252(When in)6.252 F F0 1.252(posix mode)3.752 F F1(,)A F0 +(fname)3.752 E F1 1.252(must be a v)3.752 F 1.252(alid shell)-.25 F F0 +(name)3.753 E F1 1.253(and may not be the)3.753 F .089 +(name of one of the POSIX)144 192 R F0 .089(special b)2.589 F(uiltins) +-.2 E F1 5.089(.I)C 2.589(nd)-5.089 G(ef)-2.589 E .089 (ault mode, a function name can be an)-.1 F 2.588(yu)-.15 G(nquoted) -2.588 E .164(shell w)144 204 R .164(ord that does not contain)-.1 F F2 -($)2.665 E F0 5.165(.A)C .465 -.15(ny r)-5.165 H .165(edirections \(see) -.15 F/F3 9/Times-Bold@0 SF(REDIRECTION)2.665 E F0(belo)2.415 E .165 +($)2.665 E F1 5.165(.A)C .465 -.15(ny r)-5.165 H .165(edirections \(see) +.15 F/F3 9/Times-Bold@0 SF(REDIRECTION)2.665 E F1(belo)2.415 E .165 (w\) speci\214ed when a)-.25 F .061 (function is de\214ned are performed when the function is e)144 216 R -.15(xe)-.15 G 2.561(cuted. The).15 F -.15(ex)2.56 G .06 @@ -1170,51 +1208,51 @@ tax error occurs or a readonly function with the same name already e)144 228 R(x-)-.15 E 2.593(ists. When)144 240 R -.15(exe)2.593 G .093 (cuted, the e).15 F .093(xit status of a function is the e)-.15 F .093 (xit status of the last command e)-.15 F -.15(xe)-.15 G .092(cuted in) -.15 F(the body)144 252 Q 5(.\()-.65 G(See)-5 E F3(FUNCTIONS)2.5 E F0 +.15 F(the body)144 252 Q 5(.\()-.65 G(See)-5 E F3(FUNCTIONS)2.5 E F1 (belo)2.25 E -.65(w.)-.25 G(\)).65 E/F4 10.95/Times-Bold@0 SF(COMMENTS) -72 268.8 Q F0 .982(In a non-interacti)108 280.8 R 1.282 -.15(ve s)-.25 H +72 268.8 Q F1 .982(In a non-interacti)108 280.8 R 1.282 -.15(ve s)-.25 H .982(hell, or an interacti).15 F 1.282 -.15(ve s)-.25 H .982 (hell in which the).15 F F2(interacti)3.482 E -.1(ve)-.1 G(_comments).1 -E F0 .982(option to the)3.482 F F2(shopt)3.482 E F0 -.2(bu)108 292.8 S +E F1 .982(option to the)3.482 F F2(shopt)3.482 E F1 -.2(bu)108 292.8 S .952(iltin is enabled \(see).2 F F3 .952(SHELL B)3.452 F(UIL)-.09 E .952 -(TIN COMMANDS)-.828 F F0(belo)3.202 E .952(w\), a w)-.25 F .952(ord be) --.1 F .952(ginning with)-.15 F F2(#)3.451 E F0 .951(causes that w)3.451 +(TIN COMMANDS)-.828 F F1(belo)3.202 E .952(w\), a w)-.25 F .952(ord be) +-.1 F .952(ginning with)-.15 F F2(#)3.451 E F1 .951(causes that w)3.451 F(ord)-.1 E .604 (and all remaining characters on that line to be ignored.)108 304.8 R .605(An interacti)5.605 F .905 -.15(ve s)-.25 H .605(hell without the) -.15 F F2(interacti)3.105 E -.1(ve)-.1 G(_com-).1 E(ments)108 316.8 Q F0 +.15 F F2(interacti)3.105 E -.1(ve)-.1 G(_com-).1 E(ments)108 316.8 Q F1 .34(option enabled does not allo)2.84 F 2.84(wc)-.25 G 2.84 -(omments. The)-2.84 F F2(interacti)2.84 E -.1(ve)-.1 G(_comments).1 E F0 +(omments. The)-2.84 F F2(interacti)2.84 E -.1(ve)-.1 G(_comments).1 E F1 .34(option is on by def)2.84 F .34(ault in in-)-.1 F(teracti)108 328.8 Q .3 -.15(ve s)-.25 H(hells.).15 E F4 -.11(QU)72 345.6 S -.438(OT).11 G -(ING).438 E F1(Quoting)108 357.6 Q F0 .477(is used to remo)2.977 F .777 +(ING).438 E F0(Quoting)108 357.6 Q F1 .477(is used to remo)2.977 F .777 -.15(ve t)-.15 H .477(he special meaning of certain characters or w).15 F .477(ords to the shell.)-.1 F .478(Quoting can be)5.478 F .185 (used to disable special treatment for special characters, to pre)108 369.6 R -.15(ve)-.25 G .185(nt reserv).15 F .184(ed w)-.15 F .184 (ords from being recognized as)-.1 F(such, and to pre)108 381.6 Q -.15 (ve)-.25 G(nt parameter e).15 E(xpansion.)-.15 E .288(Each of the)108 -398.4 R F1(metac)2.788 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 .288 +398.4 R F0(metac)2.788 E(har)-.15 E(acter)-.15 E(s)-.1 E F1 .288 (listed abo)2.788 F .588 -.15(ve u)-.15 H(nder).15 E F3(DEFINITIONS) -2.788 E F0 .288(has special meaning to the shell and must be)2.538 F +2.788 E F1 .288(has special meaning to the shell and must be)2.538 F (quoted if it is to represent itself.)108 410.4 Q 1.345 (When the command history e)108 427.2 R 1.344(xpansion f)-.15 F 1.344 (acilities are being used \(see)-.1 F F3(HIST)3.844 E(OR)-.162 E 3.594 -(YE)-.315 G(XP)-3.594 E(ANSION)-.666 E F0(belo)3.594 E 1.344(w\), the) --.25 F F1(history e)108 439.2 Q(xpansion)-.2 E F0(character)2.5 E 2.5 -(,u)-.4 G(sually)-2.5 E F2(!)2.5 E F0 2.5(,m)C(ust be quoted to pre)-2.5 +(YE)-.315 G(XP)-3.594 E(ANSION)-.666 E F1(belo)3.594 E 1.344(w\), the) +-.25 F F0(history e)108 439.2 Q(xpansion)-.2 E F1(character)2.5 E 2.5 +(,u)-.4 G(sually)-2.5 E F2(!)2.5 E F1 2.5(,m)C(ust be quoted to pre)-2.5 E -.15(ve)-.25 G(nt history e).15 E(xpansion.)-.15 E -(There are three quoting mechanisms: the)108 456 Q F1(escape c)2.69 E -(har)-.15 E(acter)-.15 E F0 2.5(,s).73 G +(There are three quoting mechanisms: the)108 456 Q F0(escape c)2.69 E +(har)-.15 E(acter)-.15 E F1 2.5(,s).73 G (ingle quotes, and double quotes.)-2.5 E 2.962(An)108 472.8 S .463 -(on-quoted backslash \()-2.962 F F2(\\)A F0 2.963(\)i)C 2.963(st)-2.963 -G(he)-2.963 E F1 .463(escape c)3.153 F(har)-.15 E(acter)-.15 E F0 5.463 +(on-quoted backslash \()-2.962 F F2(\\)A F1 2.963(\)i)C 2.963(st)-2.963 +G(he)-2.963 E F0 .463(escape c)3.153 F(har)-.15 E(acter)-.15 E F1 5.463 (.I).73 G 2.963(tp)-5.463 G(reserv)-2.963 E .463(es the literal v)-.15 F .463(alue of the ne)-.25 F .463(xt character that)-.15 F(follo)108 484.8 Q 1.554(ws, with the e)-.25 F 1.553(xception of <ne)-.15 F 4.053 -(wline>. If)-.25 F(a)4.053 E F2(\\)4.053 E F0(<ne)A 1.553 +(wline>. If)-.25 F(a)4.053 E F2(\\)4.053 E F1(<ne)A 1.553 (wline> pair appears, and the backslash is not itself)-.25 F .347 -(quoted, the)108 496.8 R F2(\\)2.847 E F0(<ne)A .347 +(quoted, the)108 496.8 R F2(\\)2.847 E F1(<ne)A .347 (wline> is treated as a line continuation \(that is, it is remo)-.25 F -.15(ve)-.15 G 2.848(df).15 G .348(rom the input stream and ef-)-2.848 F (fecti)108 508.8 Q -.15(ve)-.25 G(ly ignored\).).15 E .295 @@ -1226,9244 +1264,9671 @@ Q 1.554(ws, with the e)-.25 F 1.553(xception of <ne)-.15 F 4.053 (Enclosing characters in double quotes preserv)108 554.4 R .034 (es the literal v)-.15 F .034 (alue of all characters within the quotes, with the)-.25 F -.15(ex)108 -566.4 S .108(ception of).15 F F2($)2.608 E F0(,)A F2<92>2.608 E F0(,)A -F2(\\)2.608 E F0 2.608(,a)C .107(nd, when history e)-2.608 F .107 -(xpansion is enabled,)-.15 F F2(!)2.607 E F0 5.107(.W)C .107 -(hen the shell is in)-5.107 F F1 .107(posix mode)2.607 F F0 2.607(,t)C -(he)-2.607 E F2(!)2.607 E F0 .107(has no)2.607 F .46 +566.4 S .108(ception of).15 F F2($)2.608 E F1(,)A F2<92>2.608 E F1(,)A +F2(\\)2.608 E F1 2.608(,a)C .107(nd, when history e)-2.608 F .107 +(xpansion is enabled,)-.15 F F2(!)2.607 E F1 5.107(.W)C .107 +(hen the shell is in)-5.107 F F0 .107(posix mode)2.607 F F1 2.607(,t)C +(he)-2.607 E F2(!)2.607 E F1 .107(has no)2.607 F .46 (special meaning within double quotes, e)108 578.4 R -.15(ve)-.25 G 2.96 (nw).15 G .46(hen history e)-2.96 F .46(xpansion is enabled.)-.15 F .46 -(The characters)5.46 F F2($)2.96 E F0(and)2.96 E F2<92>2.96 E F0(re-) +(The characters)5.46 F F2($)2.96 E F1(and)2.96 E F2<92>2.96 E F1(re-) 2.96 E .563(tain their special meaning within double quotes.)108 590.4 R .562(The backslash retains its special meaning only when fol-)5.563 F (lo)108 602.4 Q .601(wed by one of the follo)-.25 F .602 -(wing characters:)-.25 F F2($)3.102 E F0(,)A F2<92>3.102 E F0(,)A F2(") -3.935 E F0(,).833 E F2(\\)3.102 E F0 3.102(,o)C(r)-3.102 E F2(<newline>) -3.102 E F0 5.602(.A)C .602(double quote may be quoted within)-2.5 F .131 +(wing characters:)-.25 F F2($)3.102 E F1(,)A F2<92>3.102 E F1(,)A F2(") +3.935 E F1(,).833 E F2(\\)3.102 E F1 3.102(,o)C(r)-3.102 E F2(<newline>) +3.102 E F1 5.602(.A)C .602(double quote may be quoted within)-2.5 F .131 (double quotes by preceding it with a backslash.)108 614.4 R .131 (If enabled, history e)5.131 F .13(xpansion will be performed unless an) --.15 F F2(!)2.63 E F0 +-.15 F F2(!)2.63 E F1 (appearing in double quotes is escaped using a backslash.)108 626.4 Q -(The backslash preceding the)5 E F2(!)2.5 E F0(is not remo)5 E -.15(ve) --.15 G(d.).15 E(The special parameters)108 643.2 Q F2(*)2.5 E F0(and)2.5 -E F2(@)2.5 E F0(ha)2.5 E .3 -.15(ve s)-.2 H +(The backslash preceding the)5 E F2(!)2.5 E F1(is not remo)5 E -.15(ve) +-.15 G(d.).15 E(The special parameters)108 643.2 Q F2(*)2.5 E F1(and)2.5 +E F2(@)2.5 E F1(ha)2.5 E .3 -.15(ve s)-.2 H (pecial meaning when in double quotes \(see).15 E F3 -.666(PA)2.5 G -(RAMETERS).666 E F0(belo)2.25 E(w\).)-.25 E .148 -(Character sequences of the form)108 660 R F2($)2.649 E F0<08>A F1 -(string)A F0 2.649<0861>C .149(re treated as a special v)-2.649 F .149 +(RAMETERS).666 E F1(belo)2.25 E(w\).)-.25 E .148 +(Character sequences of the form)108 660 R F2($)2.649 E F1<08>A F0 +(string)A F1 2.649<0861>C .149(re treated as a special v)-2.649 F .149 (ariant of single quotes.)-.25 F .149(The sequence e)5.149 F(x-)-.15 E -.528(pands to)108 672 R F1(string)3.028 E F0 3.028(,w)C .528 -(ith backslash-escaped characters in)-3.028 F F1(string)3.027 E F0 .527 +.528(pands to)108 672 R F0(string)3.028 E F1 3.028(,w)C .528 +(ith backslash-escaped characters in)-3.028 F F0(string)3.027 E F1 .527 (replaced as speci\214ed by the ANSI C standard.)3.027 F (Backslash escape sequences, if present, are decoded as follo)108 684 Q -(ws:)-.25 E F2(\\a)144 696 Q F0(alert \(bell\))180 696 Q F2(\\b)144 708 -Q F0(backspace)180 708 Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 -E(8)190.115 E 0 Cg EP +(ws:)-.25 E F2(\\a)144 696 Q F1(alert \(bell\))180 696 Q(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(8)198.45 E 0 Cg EP %%Page: 9 9 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(\\e)144 84 Q(\\E)144 96 Q F0(an escape character)180 96 Q F1(\\f)144 -108 Q F0(form feed)180 108 Q F1(\\n)144 120 Q F0(ne)180 120 Q 2.5(wl) --.25 G(ine)-2.5 E F1(\\r)144 132 Q F0(carriage return)180 132 Q F1(\\t) -144 144 Q F0(horizontal tab)180 144 Q F1(\\v)144 156 Q F0 -.15(ve)180 -156 S(rtical tab).15 E F1(\\\\)144 168 Q F0(backslash)180 168 Q F1<5c08> -144 180 Q F0(single quote)180 180 Q F1(\\")144 192 Q F0(double quote)180 -192 Q F1(\\?)144 204 Q F0(question mark)180 204 Q F1(\\)144 216 Q/F2 10 -/Times-Italic@0 SF(nnn)A F0(the eight-bit character whose v)180 216 Q -(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 228 Q F2(HH)A F0 -(the eight-bit character whose v)180 228 Q(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(\\u)144 240 Q F2(HHHH)A F0 -1.506(the Unicode \(ISO/IEC 10646\) character whose v)180 252 R 1.507 -(alue is the he)-.25 F 1.507(xadecimal v)-.15 F(alue)-.25 E F2(HHHH) -4.007 E F0(\(one to four he)180 264 Q 2.5(xd)-.15 G(igits\))-2.5 E F1 -(\\U)144 276 Q F2(HHHHHHHH)A F0 .548 -(the Unicode \(ISO/IEC 10646\) character whose v)180 288 R .547 -(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-) -3.047 E(HHH)180 300 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\)) --2.5 E F1(\\c)144 312 Q F2(x)A F0 2.5(ac)180 312 S(ontrol-)-2.5 E F2(x)A -F0(character)2.5 E(The e)108 328.8 Q(xpanded result is single-quoted, a\ -s if the dollar sign had not been present.)-.15 E 2.64(Ad)108 345.6 S -.14(ouble-quoted string preceded by a dollar sign \()-2.64 F F1($)A F0 -(")A F2(string)A F0 .14 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(\\b)144 84 Q F1(backspace)180 +84 Q F2(\\e)144 96 Q(\\E)144 108 Q F1(an escape character)180 108 Q F2 +(\\f)144 120 Q F1(form feed)180 120 Q F2(\\n)144 132 Q F1(ne)180 132 Q +2.5(wl)-.25 G(ine)-2.5 E F2(\\r)144 144 Q F1(carriage return)180 144 Q +F2(\\t)144 156 Q F1(horizontal tab)180 156 Q F2(\\v)144 168 Q F1 -.15 +(ve)180 168 S(rtical tab).15 E F2(\\\\)144 180 Q F1(backslash)180 180 Q +F2<5c08>144 192 Q F1(single quote)180 192 Q F2(\\")144 204 Q F1 +(double quote)180 204 Q F2(\\?)144 216 Q F1(question mark)180 216 Q F2 +(\\)144 228 Q F0(nnn)A F1(the eight-bit character whose v)180 228 Q +(alue is the octal v)-.25 E(alue)-.25 E F0(nnn)2.5 E F1 +(\(one to three octal digits\))2.5 E F2(\\x)144 240 Q F0(HH)A F1 +(the eight-bit character whose v)180 240 Q(alue is the he)-.25 E +(xadecimal v)-.15 E(alue)-.25 E F0(HH)2.5 E F1(\(one or tw)2.5 E 2.5(oh) +-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F2(\\u)144 252 Q F0(HHHH)A F1 +1.506(the Unicode \(ISO/IEC 10646\) character whose v)180 264 R 1.507 +(alue is the he)-.25 F 1.507(xadecimal v)-.15 F(alue)-.25 E F0(HHHH) +4.007 E F1(\(one to four he)180 276 Q 2.5(xd)-.15 G(igits\))-2.5 E F2 +(\\U)144 288 Q F0(HHHHHHHH)A F1 .548 +(the Unicode \(ISO/IEC 10646\) character whose v)180 300 R .547 +(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F0(HHHHH-) +3.047 E(HHH)180 312 Q F1(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\)) +-2.5 E F2(\\c)144 324 Q F0(x)A F1 2.5(ac)180 324 S(ontrol-)-2.5 E F0(x)A +F1(character)2.5 E(The e)108 340.8 Q(xpanded result is single-quoted, a\ +s if the dollar sign had not been present.)-.15 E 2.64(Ad)108 357.6 S +.14(ouble-quoted string preceded by a dollar sign \()-2.64 F F2($)A F1 +(")A F0(string)A F1 .14 ("\) will cause the string to be translated according)B .785 -(to the current locale.)108 357.6 R(The)5.785 E F2 -.1(ge)3.284 G(tte).1 -E(xt)-.2 E F0 .784 +(to the current locale.)108 369.6 R(The)5.785 E F0 -.1(ge)3.284 G(tte).1 +E(xt)-.2 E F1 .784 (infrastructure performs the lookup and translation, using the)3.284 F -F1(LC_MES-)3.284 E(SA)108 369.6 Q(GES)-.55 E F0(,)A F1(TEXTDOMAINDIR) -2.76 E F0 2.76(,a)C(nd)-2.76 E F1(TEXTDOMAIN)2.76 E F0 .261(shell v) -2.761 F 2.761(ariables. If)-.25 F .261(the current locale is)2.761 F F1 -(C)2.761 E F0(or)2.761 E F1(POSIX)2.761 E F0(,)A .792 -(if there are no translations a)108 381.6 R -.25(va)-.2 G .791(ilable, \ +F2(LC_MES-)3.284 E(SA)108 381.6 Q(GES)-.55 E F1(,)A F2(TEXTDOMAINDIR) +2.76 E F1 2.76(,a)C(nd)-2.76 E F2(TEXTDOMAIN)2.76 E F1 .261(shell v) +2.761 F 2.761(ariables. If)-.25 F .261(the current locale is)2.761 F F2 +(C)2.761 E F1(or)2.761 E F2(POSIX)2.761 E F1(,)A .792 +(if there are no translations a)108 393.6 R -.25(va)-.2 G .791(ilable, \ or if the string is not translated, the dollar sign is ignored.).25 F .791(This is a)5.791 F .534 (form of double quoting, so the string remains double-quoted by def)108 -393.6 R .535(ault, whether or not it is translated and)-.1 F 2.798 -(replaced. If)108 405.6 R(the)2.798 E F1(noexpand_translation)2.797 E F0 -.297(option is enabled using the)2.797 F F1(shopt)2.797 E F0 -.2(bu) -2.797 G .297(iltin, translated strings are sin-).2 F 2.044 -(gle-quoted instead of double-quoted.)108 417.6 R 2.044 -(See the description of)7.044 F F1(shopt)4.545 E F0(belo)4.545 E 4.545 -(wu)-.25 G(nder)-4.545 E/F3 9/Times-Bold@0 SF(SHELL)4.545 E/F4 9 -/Times-Roman@0 SF -.09(BU)C(IL).09 E(TIN)-.828 E F3(COM-)A(MANDS)108 -429.6 Q F4(.)A/F5 10.95/Times-Bold@0 SF -.81(PA)72 446.4 S(RAMETERS).81 -E F0(A)108 458.4 Q F2(par)4.575 E(ameter)-.15 E F0 .825 -(is an entity that stores v)4.055 F 3.325(alues. It)-.25 F .825 -(can be a)3.325 F F2(name)3.684 E F0 3.324(,an).18 G(umber)-3.324 E -3.324(,o)-.4 G 3.324(ro)-3.324 G .824(ne of the special characters) --3.324 F .801(listed belo)108 470.4 R 3.301(wu)-.25 G(nder)-3.301 E F1 -.801(Special P)3.301 F(arameters)-.1 E F0 5.802(.A)C F2(variable)-2.21 E -F0 .802(is a parameter denoted by a)3.482 F F2(name)3.662 E F0 5.802(.A) -.18 G -.25(va)-2.5 G .802(riable has a).25 F F2(value)108 482.4 Q F0 -.369(and zero or more)2.869 F F2(attrib)2.869 E(utes)-.2 E F0 5.369(.A)C -(ttrib)-5.369 E .369(utes are assigned using the)-.2 F F1(declar)2.868 E -(e)-.18 E F0 -.2(bu)2.868 G .368(iltin command \(see).2 F F1(declar) -2.868 E(e)-.18 E F0(belo)108 494.4 Q 2.5(wi)-.25 G(n)-2.5 E F3(SHELL B) -2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F4(\).)A F0 2.754(Ap)108 511.2 S -.254(arameter is set if it has been assigned a v)-2.754 F 2.754 -(alue. The)-.25 F .254(null string is a v)2.754 F .255(alid v)-.25 F -2.755(alue. Once)-.25 F 2.755(av)2.755 G .255(ariable is set, it)-3.005 -F(may be unset only by using the)108 523.2 Q F1(unset)2.5 E F0 -.2(bu) -2.5 G(iltin command \(see).2 E F3(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS) --.828 E F0(belo)2.25 E(w\).)-.25 E(A)108 540 Q F2(variable)2.79 E F0 -(may be assigned to by a statement of the form)2.68 E F2(name)144 556.8 -Q F0(=[)A F2(value)A F0(])A(If)108 573.6 Q F2(value)3.023 E F0 .233 +405.6 R .535(ault, whether or not it is translated and)-.1 F 2.798 +(replaced. If)108 417.6 R(the)2.798 E F2(noexpand_translation)2.797 E F1 +.297(option is enabled using the)2.797 F F2(shopt)2.797 E F1 -.2(bu) +2.797 G .297(iltin, translated strings are sin-).2 F 1.228 +(gle-quoted instead of double-quoted.)108 429.6 R 1.229 +(See the description of)6.228 F F2(shopt)3.729 E F1(belo)3.729 E 3.729 +(wu)-.25 G(nder)-3.729 E/F3 9/Times-Bold@0 SF 1.229(SHELL B)3.729 F(UIL) +-.09 E 1.229(TIN COM-)-.828 F(MANDS)108 441.6 Q/F4 9/Times-Roman@0 SF(.) +A/F5 10.95/Times-Bold@0 SF -.81(PA)72 458.4 S(RAMETERS).81 E F1(A)108 +470.4 Q F0(par)4.575 E(ameter)-.15 E F1 .825(is an entity that stores v) +4.055 F 3.325(alues. It)-.25 F .825(can be a)3.325 F F0(name)3.684 E F1 +3.324(,an).18 G(umber)-3.324 E 3.324(,o)-.4 G 3.324(ro)-3.324 G .824 +(ne of the special characters)-3.324 F .801(listed belo)108 482.4 R +3.301(wu)-.25 G(nder)-3.301 E F2 .801(Special P)3.301 F(arameters)-.1 E +F1 5.802(.A)C F0(variable)-2.21 E F1 .802(is a parameter denoted by a) +3.482 F F0(name)3.662 E F1 5.802(.A).18 G -.25(va)-2.5 G .802 +(riable has a).25 F F0(value)108 494.4 Q F1 .369(and zero or more)2.869 +F F0(attrib)2.869 E(utes)-.2 E F1 5.369(.A)C(ttrib)-5.369 E .369 +(utes are assigned using the)-.2 F F2(declar)2.868 E(e)-.18 E F1 -.2(bu) +2.868 G .368(iltin command \(see).2 F F2(declar)2.868 E(e)-.18 E F1 +(belo)108 506.4 Q 2.5(wi)-.25 G(n)-2.5 E F3(SHELL B)2.5 E(UIL)-.09 E +(TIN COMMANDS)-.828 E F4(\).)A F1 2.754(Ap)108 523.2 S .254 +(arameter is set if it has been assigned a v)-2.754 F 2.754(alue. The) +-.25 F .254(null string is a v)2.754 F .255(alid v)-.25 F 2.755 +(alue. Once)-.25 F 2.755(av)2.755 G .255(ariable is set, it)-3.005 F +(may be unset only by using the)108 535.2 Q F2(unset)2.5 E F1 -.2(bu)2.5 +G(iltin command \(see).2 E F3(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS) +-.828 E F1(belo)2.25 E(w\).)-.25 E(A)108 552 Q F0(variable)2.79 E F1 +(may be assigned to by a statement of the form)2.68 E F0(name)144 568.8 +Q F1(=[)A F0(value)A F1(])A(If)108 585.6 Q F0(value)3.023 E F1 .233 (is not gi)2.913 F -.15(ve)-.25 G .233(n, the v).15 F .232 -(ariable is assigned the null string.)-.25 F(All)5.232 E F2(values)3.022 -E F0(under)3.002 E .232(go tilde e)-.18 F .232(xpansion, parameter)-.15 -F .515(and v)108 585.6 R .515(ariable e)-.25 F .515 +(ariable is assigned the null string.)-.25 F(All)5.232 E F0(values)3.022 +E F1(under)3.002 E .232(go tilde e)-.18 F .232(xpansion, parameter)-.15 +F .515(and v)108 597.6 R .515(ariable e)-.25 F .515 (xpansion, command substitution, arithmetic e)-.15 F .515 (xpansion, and quote remo)-.15 F -.25(va)-.15 G 3.015(l\().25 G(see) --3.015 E F3(EXP)3.015 E(ANSION)-.666 E F0(belo)108 597.6 Q 2.699 -(w\). If)-.25 F .199(the v)2.699 F .199(ariable has its)-.25 F F1 -(integer)2.698 E F0(attrib)2.698 E .198(ute set, then)-.2 F F2(value) -2.988 E F0 .198(is e)2.878 F -.25(va)-.25 G .198 +-3.015 E F3(EXP)3.015 E(ANSION)-.666 E F1(belo)108 609.6 Q 2.699 +(w\). If)-.25 F .199(the v)2.699 F .199(ariable has its)-.25 F F2 +(integer)2.698 E F1(attrib)2.698 E .198(ute set, then)-.2 F F0(value) +2.988 E F1 .198(is e)2.878 F -.25(va)-.25 G .198 (luated as an arithmetic e).25 F .198(xpression e)-.15 F -.15(ve)-.25 G -(n).15 E .745(if the $\(\(...\)\) e)108 609.6 R .745 -(xpansion is not used \(see)-.15 F F1 .745(Arithmetic Expansion)3.245 F -F0(belo)3.245 E 3.246(w\). W)-.25 F .746(ord splitting and pathname e) --.8 F(x-)-.15 E 1.364(pansion are not performed.)108 621.6 R 1.364 +(n).15 E .523(if the)108 621.6 R F2($\(\()3.023 E F1 1.666(...)C F2 +(\)\))-1.666 E F1 -.15(ex)3.023 G .523(pansion is not used \(see).15 F +F2 .523(Arithmetic Expansion)3.023 F F1(belo)3.023 E 3.023(w\). W)-.25 F +.524(ord splitting and pathname e)-.8 F(x-)-.15 E 1.364 +(pansion are not performed.)108 633.6 R 1.364 (Assignment statements may also appear as ar)6.364 F 1.363 -(guments to the)-.18 F F1(alias)3.863 E F0(,)A F1(declar)3.863 E(e)-.18 -E F0(,)A F1(typeset)108 633.6 Q F0(,)A F1(export)3.964 E F0(,)A F1 -.18 -(re)3.964 G(adonly).18 E F0 3.964(,a)C(nd)-3.964 E F1(local)3.964 E F0 --.2(bu)3.964 G 1.464(iltin commands \().2 F F2(declar)A(ation)-.15 E F0 -3.964(commands\). When)3.964 F(in)3.964 E F2 1.465(posix mode)3.965 F F0 -(,)A 1.142(these b)108 645.6 R 1.142 +(guments to the)-.18 F F2(alias)3.863 E F1(,)A F2(declar)3.863 E(e)-.18 +E F1(,)A F2(typeset)108 645.6 Q F1(,)A F2(export)3.964 E F1(,)A F2 -.18 +(re)3.964 G(adonly).18 E F1 3.964(,a)C(nd)-3.964 E F2(local)3.964 E F1 +-.2(bu)3.964 G 1.464(iltin commands \().2 F F0(declar)A(ation)-.15 E F1 +3.964(commands\). When)3.964 F(in)3.964 E F0 1.465(posix mode)3.965 F F1 +(,)A 1.142(these b)108 657.6 R 1.142 (uiltins may appear in a command after one or more instances of the)-.2 -F F1(command)3.641 E F0 -.2(bu)3.641 G 1.141(iltin and retain).2 F -(these assignment statement properties.)108 657.6 Q .376(In the conte) -108 674.4 R .376(xt where an assignment statement is assigning a v)-.15 +F F2(command)3.641 E F1 -.2(bu)3.641 G 1.141(iltin and retain).2 F +(these assignment statement properties.)108 669.6 Q .376(In the conte) +108 686.4 R .376(xt where an assignment statement is assigning a v)-.15 F .376(alue to a shell v)-.25 F .377(ariable or array inde)-.25 F .377 (x, the +=)-.15 F 1.631 -(operator can be used to append to or add to the v)108 686.4 R(ariable') +(operator can be used to append to or add to the v)108 698.4 R(ariable') -.25 E 4.13(sp)-.55 G(re)-4.13 E 1.63(vious v)-.25 F 4.13(alue. This) --.25 F 1.63(includes ar)4.13 F 1.63(guments to)-.18 F -.2(bu)108 698.4 S -.163(iltin commands such as).2 F F1(declar)2.664 E(e)-.18 E F0 .164 -(that accept assignment statements \()2.664 F F2(declar)A(ation)-.15 E -F0 2.664(commands\). When)2.664 F .164(+= is)2.664 F .132 -(applied to a v)108 710.4 R .132(ariable for which the)-.25 F F1 -(integer)2.632 E F0(attrib)2.632 E .132(ute has been set,)-.2 F F2 -(value)2.632 E F0 .131(is e)2.631 F -.25(va)-.25 G .131 -(luated as an arithmetic e).25 F(xpres-)-.15 E 1.226 -(sion and added to the v)108 722.4 R(ariable')-.25 E 3.726(sc)-.55 G -1.227(urrent v)-3.726 F 1.227(alue, which is also e)-.25 F -.25(va)-.25 -G 3.727(luated. When).25 F 1.227(+= is applied to an array)3.727 F -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(9)190.115 E 0 Cg EP +-.25 F 1.63(includes ar)4.13 F 1.63(guments to)-.18 F -.2(bu)108 710.4 S +.163(iltin commands such as).2 F F2(declar)2.664 E(e)-.18 E F1 .164 +(that accept assignment statements \()2.664 F F0(declar)A(ation)-.15 E +F1 2.664(commands\). When)2.664 F .164(+= is)2.664 F 2.009 +(applied to a v)108 722.4 R 2.009(ariable for which the)-.25 F F2 +(integer)4.509 E F1(attrib)4.509 E 2.009(ute has been set,)-.2 F F0 +(value)4.509 E F1 2.009(is e)4.509 F -.25(va)-.25 G 2.008 +(luated as an arithmetic).25 F(GNU Bash 5.3)72 768 Q(2024 March 29) +144.29 E(9)198.45 E 0 Cg EP %%Page: 10 10 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.25(va)108 84 S -.115(riable using compound assignment \(see).25 F/F1 10/Times-Bold@0 SF -(Arrays)2.615 E F0(belo)2.615 E .115(w\), the v)-.25 F(ariable')-.25 E -2.615(sv)-.55 G .114(alue is not unset \(as it is when us-)-2.865 F .387 -(ing =\), and ne)108 96 R 2.887(wv)-.25 G .388 -(alues are appended to the array be)-3.137 F .388 -(ginning at one greater than the array')-.15 F 2.888(sm)-.55 G .388 -(aximum inde)-2.888 F(x)-.15 E 1.597(\(for inde)108 108 R -.15(xe)-.15 G -4.097(da).15 G 1.596(rrays\) or added as additional k)-4.097 F -.15(ey) --.1 G<ad76>.15 E 1.596(alue pairs in an associati)-.25 F 1.896 -.15 -(ve a)-.25 H(rray).15 E 6.596(.W)-.65 G 1.596(hen applied to a)-6.596 F -(string-v)108 120 Q(alued v)-.25 E(ariable,)-.25 E/F2 10/Times-Italic@0 -SF(value)2.5 E F0(is e)2.5 E(xpanded and appended to the v)-.15 E -(ariable')-.25 E 2.5(sv)-.55 G(alue.)-2.75 E 3.382(Av)108 136.8 S .882 -(ariable can be assigned the)-3.632 F F2(namer)3.382 E(ef)-.37 E F0 -(attrib)3.382 E .882(ute using the)-.2 F F1<ad6e>3.382 E F0 .882 -(option to the)3.382 F F1(declar)3.382 E(e)-.18 E F0(or)3.383 E F1 -(local)3.383 E F0 -.2(bu)3.383 G .883(iltin com-).2 F .316 -(mands \(see the descriptions of)108 148.8 R F1(declar)2.816 E(e)-.18 E -F0(and)2.816 E F1(local)2.816 E F0(belo)2.816 E .316(w\) to create a) --.25 F F2(namer)2.815 E(ef)-.37 E F0 2.815(,o)C 2.815(rar)-2.815 G .315 -(eference to another v)-2.815 F(ari-)-.25 E 2.918(able. This)108 160.8 R +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E -.15(ex)108 84 S .32(pression and added to the v) +.15 F(ariable')-.25 E 2.82(sc)-.55 G .32(urrent v)-2.82 F .321 +(alue, which is also e)-.25 F -.25(va)-.25 G 2.821(luated. When).25 F +.321(+= is applied to an ar)2.821 F(-)-.2 E .083(ray v)108 96 R .083 +(ariable using compound assignment \(see)-.25 F/F2 10/Times-Bold@0 SF +(Arrays)2.583 E F1(belo)2.582 E .082(w\), the v)-.25 F(ariable')-.25 E +2.582(sv)-.55 G .082(alue is not unset \(as it is when)-2.832 F .502 +(using =\), and ne)108 108 R 3.002(wv)-.25 G .503 +(alues are appended to the array be)-3.252 F .503 +(ginning at one greater than the array')-.15 F 3.003(sm)-.55 G .503 +(aximum in-)-3.003 F(de)108 120 Q 3.015(x\()-.15 G .515(for inde)-3.015 +F -.15(xe)-.15 G 3.015(da).15 G .515(rrays\) or added as additional k) +-3.015 F -.15(ey)-.1 G<ad76>.15 E .515(alue pairs in an associati)-.25 F +.814 -.15(ve a)-.25 H(rray).15 E 5.514(.W)-.65 G .514(hen applied to a) +-5.514 F(string-v)108 132 Q(alued v)-.25 E(ariable,)-.25 E F0(value)2.5 +E F1(is e)2.5 E(xpanded and appended to the v)-.15 E(ariable')-.25 E 2.5 +(sv)-.55 G(alue.)-2.75 E 3.382(Av)108 148.8 S .882 +(ariable can be assigned the)-3.632 F F0(namer)3.382 E(ef)-.37 E F1 +(attrib)3.382 E .882(ute using the)-.2 F F2<ad6e>3.382 E F1 .882 +(option to the)3.382 F F2(declar)3.382 E(e)-.18 E F1(or)3.383 E F2 +(local)3.383 E F1 -.2(bu)3.383 G .883(iltin com-).2 F .316 +(mands \(see the descriptions of)108 160.8 R F2(declar)2.816 E(e)-.18 E +F1(and)2.816 E F2(local)2.816 E F1(belo)2.816 E .316(w\) to create a) +-.25 F F0(namer)2.815 E(ef)-.37 E F1 2.815(,o)C 2.815(rar)-2.815 G .315 +(eference to another v)-2.815 F(ari-)-.25 E 2.918(able. This)108 172.8 R (allo)2.918 E .418(ws v)-.25 F .418 (ariables to be manipulated indirectly)-.25 F 5.419(.W)-.65 G(hene) -5.419 E -.15(ve)-.25 G 2.919(rt).15 G .419(he nameref v)-2.919 F .419 (ariable is referenced, as-)-.25 F .133 -(signed to, unset, or has its attrib)108 172.8 R .132 -(utes modi\214ed \(other than using or changing the)-.2 F F2(namer)2.632 -E(ef)-.37 E F0(attrib)2.632 E .132(ute itself\), the)-.2 F 1.356 -(operation is actually performed on the v)108 184.8 R 1.357 +(signed to, unset, or has its attrib)108 184.8 R .132 +(utes modi\214ed \(other than using or changing the)-.2 F F0(namer)2.632 +E(ef)-.37 E F1(attrib)2.632 E .132(ute itself\), the)-.2 F 1.356 +(operation is actually performed on the v)108 196.8 R 1.357 (ariable speci\214ed by the nameref v)-.25 F(ariable')-.25 E 3.857(sv) -.55 G 3.857(alue. A)-4.107 F 1.357(nameref is)3.857 F .972 -(commonly used within shell functions to refer to a v)108 196.8 R .971 +(commonly used within shell functions to refer to a v)108 208.8 R .971 (ariable whose name is passed as an ar)-.25 F .971(gument to the)-.18 F -2.5(function. F)108 208.8 R(or instance, if a v)-.15 E +2.5(function. F)108 220.8 R(or instance, if a v)-.15 E (ariable name is passed to a shell function as its \214rst ar)-.25 E -(gument, running)-.18 E/F3 10/Courier@0 SF(declare -n ref=$1)144 226.8 Q -F0 .302(inside the function creates a nameref v)108 244.8 R(ariable)-.25 -E F1 -.18(re)2.803 G(f).18 E F0 .303(whose v)2.803 F .303(alue is the v) --.25 F .303(ariable name passed as the \214rst ar)-.25 F(gu-)-.18 E -3.592(ment. References)108 256.8 R 1.092(and assignments to)3.592 F F1 --.18(re)3.592 G(f).18 E F0 3.592(,a)C 1.092(nd changes to its attrib) --3.592 F 1.092(utes, are treated as references, assign-)-.2 F .143 -(ments, and attrib)108 268.8 R .144(ute modi\214cations to the v)-.2 F -.144(ariable whose name w)-.25 F .144(as passed as)-.1 F F1($1)2.644 E -F0 5.144(.I)C 2.644(ft)-5.144 G .144(he control v)-2.644 F .144 -(ariable in a)-.25 F F1 -.25(fo)108 280.8 S(r).25 E F0 .868 +(gument, running)-.18 E/F3 10/Courier@0 SF(declare \255n ref=$1)144 +237.6 Q F1 .302(inside the function creates a nameref v)108 254.4 R +(ariable)-.25 E F2 -.18(re)2.803 G(f).18 E F1 .303(whose v)2.803 F .303 +(alue is the v)-.25 F .303(ariable name passed as the \214rst ar)-.25 F +(gu-)-.18 E 3.592(ment. References)108 266.4 R 1.092(and assignments to) +3.592 F F2 -.18(re)3.592 G(f).18 E F1 3.592(,a)C 1.092 +(nd changes to its attrib)-3.592 F 1.092 +(utes, are treated as references, assign-)-.2 F .143(ments, and attrib) +108 278.4 R .144(ute modi\214cations to the v)-.2 F .144 +(ariable whose name w)-.25 F .144(as passed as)-.1 F F2($1)2.644 E F1 +5.144(.I)C 2.644(ft)-5.144 G .144(he control v)-2.644 F .144 +(ariable in a)-.25 F F2 -.25(fo)108 290.4 S(r).25 E F1 .868 (loop has the nameref attrib)3.368 F .868(ute, the list of w)-.2 F .867 (ords can be a list of shell v)-.1 F .867 (ariables, and a name reference)-.25 F .509 -(will be established for each w)108 292.8 R .509 +(will be established for each w)108 302.4 R .509 (ord in the list, in turn, when the loop is e)-.1 F -.15(xe)-.15 G 3.009 (cuted. Array).15 F -.25(va)3.009 G .509(riables cannot be).25 F(gi)108 -304.8 Q -.15(ve)-.25 G 3.032(nt).15 G(he)-3.032 E F1(namer)3.032 E(ef) --.18 E F0(attrib)3.032 E 3.032(ute. Ho)-.2 F(we)-.25 E -.15(ve)-.25 G +314.4 Q -.15(ve)-.25 G 3.032(nt).15 G(he)-3.032 E F2(namer)3.032 E(ef) +-.18 E F1(attrib)3.032 E 3.032(ute. Ho)-.2 F(we)-.25 E -.15(ve)-.25 G 1.332 -.4(r, n).15 H .532(ameref v).4 F .531 (ariables can reference array v)-.25 F .531(ariables and subscripted ar) --.25 F(-)-.2 E .533(ray v)108 316.8 R 3.033(ariables. Namerefs)-.25 F -.533(can be unset using the)3.033 F F1<ad6e>3.033 E F0 .533 -(option to the)3.033 F F1(unset)3.033 E F0 -.2(bu)3.034 G 3.034 -(iltin. Otherwise,).2 F(if)3.034 E F1(unset)3.034 E F0 .534(is e)3.034 F --.15(xe)-.15 G(-).15 E .443(cuted with the name of a nameref v)108 328.8 +-.25 F(-)-.2 E .533(ray v)108 326.4 R 3.033(ariables. Namerefs)-.25 F +.533(can be unset using the)3.033 F F2<ad6e>3.033 E F1 .533 +(option to the)3.033 F F2(unset)3.033 E F1 -.2(bu)3.034 G 3.034 +(iltin. Otherwise,).2 F(if)3.034 E F2(unset)3.034 E F1 .534(is e)3.034 F +-.15(xe)-.15 G(-).15 E .443(cuted with the name of a nameref v)108 338.4 R .442(ariable as an ar)-.25 F .442(gument, the v)-.18 F .442 (ariable referenced by the nameref v)-.25 F(ariable)-.25 E -(will be unset.)108 340.8 Q F1 -.2(Po)87 357.6 S(sitional P).2 E -(arameters)-.1 E F0(A)108 369.6 Q F2 .705(positional par)4.455 F(ameter) --.15 E F0 .706(is a parameter denoted by one or more digits, other than\ +(will be unset.)108 350.4 Q F2 -.2(Po)87 367.2 S(sitional P).2 E +(arameters)-.1 E F1(A)108 379.2 Q F0 .705(positional par)4.455 F(ameter) +-.15 E F1 .706(is a parameter denoted 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 381.6 R 2.944(sa) +(tional parameters are assigned from the shell')108 391.2 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(the)108 393.6 Q F1 -(set)3.333 E F0 -.2(bu)3.333 G .833(iltin command.).2 F .834(Positional\ +(ke).2 G .444(d, and may be reassigned using).1 F(the)108 403.2 Q F2 +(set)3.333 E F1 -.2(bu)3.333 G .833(iltin command.).2 F .834(Positional\ parameters may not be assigned to with assignment statements.)5.833 F (The)5.834 E(positional parameters are temporarily replaced when a shel\ -l function is e)108 405.6 Q -.15(xe)-.15 G(cuted \(see).15 E/F4 9 -/Times-Bold@0 SF(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E 1.404(When \ +l function is e)108 415.2 Q -.15(xe)-.15 G(cuted \(see).15 E/F4 9 +/Times-Bold@0 SF(FUNCTIONS)2.5 E F1(belo)2.25 E(w\).)-.25 E 1.404(When \ a positional parameter consisting of more than a single digit is e)108 -422.4 R 1.403(xpanded, it must be enclosed in)-.15 F(braces \(see)108 -434.4 Q F4(EXP)2.5 E(ANSION)-.666 E F0(belo)2.25 E(w\).)-.25 E F1 -(Special P)87 451.2 Q(arameters)-.1 E F0 1.674(The shell treats se)108 -463.2 R -.15(ve)-.25 G 1.674(ral parameters specially).15 F 6.675(.T) --.65 G 1.675(hese parameters may only be referenced; assignment to) --6.675 F(them is not allo)108 475.2 Q(wed.)-.25 E F1(*)108 487.2 Q F0 -.224(Expands to the positional parameters, starting from one.)144 487.2 -R .223(When the e)5.224 F .223(xpansion is not within double)-.15 F .662 -(quotes, each positional parameter e)144 499.2 R .662 +432 R 1.403(xpanded, it must be enclosed in)-.15 F(braces \(see)108 444 +Q F4(EXP)2.5 E(ANSION)-.666 E F1(belo)2.25 E(w\).)-.25 E F2(Special P)87 +460.8 Q(arameters)-.1 E F1 1.674(The shell treats se)108 472.8 R -.15 +(ve)-.25 G 1.674(ral parameters specially).15 F 6.675(.T)-.65 G 1.675 +(hese parameters may only be referenced; assignment to)-6.675 F +(them is not allo)108 484.8 Q(wed.)-.25 E F2(*)108 496.8 Q F1 .224 +(Expands to the positional parameters, starting from one.)144 496.8 R +.223(When the e)5.224 F .223(xpansion is not within double)-.15 F .662 +(quotes, each positional parameter e)144 508.8 R .662 (xpands to a separate w)-.15 F 3.162(ord. In)-.1 F(conte)3.162 E .662 -(xts where it is performed,)-.15 F 1.082(those w)144 511.2 R 1.082 +(xts where it is performed,)-.15 F 1.082(those w)144 520.8 R 1.082 (ords are subject to further w)-.1 F 1.081(ord splitting and pathname e) -.1 F 3.581(xpansion. When)-.15 F 1.081(the e)3.581 F(xpansion)-.15 E -.914(occurs within double quotes, it e)144 523.2 R .914 +.914(occurs within double quotes, it e)144 532.8 R .914 (xpands to a single w)-.15 F .915(ord with the v)-.1 F .915 -(alue of each parameter sepa-)-.25 F .891 -(rated by the \214rst character of the)144 535.2 R F4(IFS)3.39 E F0 .89 -(special v)3.14 F 3.39(ariable. That)-.25 F .89(is, ")3.39 F F1($*)A F0 -3.39("i)C 3.39(se)-3.39 G(qui)-3.39 E -.25(va)-.25 G .89(lent to ").25 F -F1($1)A F2(c)A F1($2)A F2(c)A F1(...)A F0(",)A(where)144 547.2 Q F2(c) -3.532 E F0 .832(is the \214rst character of the v)3.642 F .832 -(alue of the)-.25 F F4(IFS)3.332 E F0 -.25(va)3.082 G 3.332(riable. If) -.25 F F4(IFS)3.332 E F0 .833(is unset, the parameters are)3.082 F -(separated by spaces.)144 559.2 Q(If)5 E F4(IFS)2.5 E F0 +(alue of each parameter sepa-)-.25 F .315 +(rated by the \214rst character of the)144 544.8 R F4(IFS)2.815 E F1 +.315(special v)2.565 F 2.815(ariable. That)-.25 F(is,)2.814 E F2("$*") +2.814 E F1 .314(is equi)2.814 F -.25(va)-.25 G .314(lent to).25 F F2 +("$1)2.814 E F0(c)A F2($2)A F0(c)A F2 1.666(...)C(")-1.666 E F1(,)A +(where)144 556.8 Q F0(c)3.532 E F1 .832 +(is the \214rst character of the v)3.642 F .832(alue of the)-.25 F F4 +(IFS)3.332 E F1 -.25(va)3.082 G 3.332(riable. If).25 F F4(IFS)3.332 E F1 +.833(is unset, the parameters are)3.082 F(separated by spaces.)144 568.8 +Q(If)5 E F4(IFS)2.5 E F1 (is null, the parameters are joined without interv)2.25 E -(ening separators.)-.15 E F1(@)108 571.2 Q F0 .722 -(Expands to the positional parameters, starting from one.)144 571.2 R +(ening separators.)-.15 E F2(@)108 580.8 Q F1 .722 +(Expands to the positional parameters, starting from one.)144 580.8 R .722(In conte)5.722 F .722(xts where w)-.15 F .722(ord splitting is per) --.1 F(-)-.2 E 1.165(formed, this e)144 583.2 R 1.165 +-.1 F(-)-.2 E 1.165(formed, this e)144 592.8 R 1.165 (xpands each positional parameter to a separate w)-.15 F 1.165 -(ord; if not within double quotes,)-.1 F .655(these w)144 595.2 R .655 +(ord; if not within double quotes,)-.1 F .655(these w)144 604.8 R .655 (ords are subject to w)-.1 F .655(ord splitting.)-.1 F .655(In conte) 5.655 F .655(xts where w)-.15 F .654 -(ord splitting is not performed, this)-.1 F -.15(ex)144 607.2 S .748 +(ord splitting is not performed, this)-.1 F -.15(ex)144 616.8 S .748 (pands to a single w).15 F .748 (ord with each positional parameter separated by a space.)-.1 F .748 -(When the e)5.748 F(xpan-)-.15 E 1.091 -(sion occurs within double quotes, each parameter e)144 619.2 R 1.091 -(xpands to a separate w)-.15 F 3.59(ord. That)-.1 F 1.09(is, ")3.59 F F1 -($@)A F0 3.59("i)C(s)-3.59 E(equi)144 631.2 Q -.25(va)-.25 G .412 -(lent to ").25 F F1($1)A F0 2.912("")C F1($2)-2.912 E F0 2.912(".)C -2.912(.. If)-2.912 F .413(the double-quoted e)2.913 F .413 -(xpansion occurs within a w)-.15 F .413(ord, the e)-.1 F .413 -(xpansion of)-.15 F .38(the \214rst parameter is joined with the be)144 -643.2 R .379(ginning part of the original w)-.15 F .379(ord, and the e) --.1 F .379(xpansion of the)-.15 F .771 -(last parameter is joined with the last part of the original w)144 655.2 -R 3.271(ord. When)-.1 F .772(there are no positional pa-)3.271 F -(rameters, ")144 667.2 Q F1($@)A F0 2.5("a)C(nd)-2.5 E F1($@)2.5 E F0 --.15(ex)2.5 G(pand to nothing \(i.e., the).15 E 2.5(ya)-.15 G(re remo) --2.5 E -.15(ve)-.15 G(d\).).15 E F1(#)108 679.2 Q F0 -(Expands to the number of positional parameters in decimal.)144 679.2 Q -F1(?)108 691.2 Q F0(Expands to the e)144 691.2 Q +(When the e)5.748 F(xpan-)-.15 E .895 +(sion occurs within double quotes, each parameter e)144 628.8 R .895 +(xpands to a separate w)-.15 F 3.394(ord. That)-.1 F(is,)3.394 E F2 +("$@")3.394 E F1(is)3.394 E(equi)144 640.8 Q -.25(va)-.25 G .65(lent to) +.25 F F2("$1" "$2" .)3.15 E 1.666(..)1.666 G F1 .651 +(If the double-quoted e)3.984 F .651(xpansion occurs within a w)-.15 F +.651(ord, the e)-.1 F(xpansion)-.15 E .609 +(of the \214rst parameter is joined with the be)144 652.8 R .608 +(ginning part of the original w)-.15 F .608(ord, and the e)-.1 F .608 +(xpansion of)-.15 F .803 +(the last parameter is joined with the last part of the original w)144 +664.8 R 3.304(ord. When)-.1 F .804(there are no positional)3.304 F +(parameters,)144 676.8 Q F2("$@")2.5 E F1(and)2.5 E F2($@)2.5 E F1 -.15 +(ex)2.5 G(pand to nothing \(i.e., the).15 E 2.5(ya)-.15 G(re remo)-2.5 E +-.15(ve)-.15 G(d\).).15 E F2(#)108 688.8 Q F1 +(Expands to the number of positional parameters in decimal.)144 688.8 Q +F2(?)108 700.8 Q F1(Expands to the e)144 700.8 Q (xit status of the most recently e)-.15 E -.15(xe)-.15 G(cuted fore).15 -E(ground pipeline.)-.15 E F1<ad>108 703.2 Q F0 .882 -(Expands to the current option \215ags as speci\214ed upon in)144 703.2 -R -.2(vo)-.4 G .881(cation, by the).2 F F1(set)3.381 E F0 -.2(bu)3.381 G -.881(iltin command, or).2 F(those set by the shell itself \(such as the) -144 715.2 Q F1<ad69>2.5 E F0(option\).)2.5 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(10)185.115 E 0 Cg EP +E(ground pipeline.)-.15 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E +(10)193.45 E 0 Cg EP %%Page: 11 11 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF($)108 84 Q F0 .839 -(Expands to the process ID of the shell. In a subshell, it e)144 84 R +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF<ad>108 84 Q F1 .882 +(Expands to the current option \215ags as speci\214ed upon in)144 84 R +-.2(vo)-.4 G .881(cation, by the).2 F F2(set)3.381 E F1 -.2(bu)3.381 G +.881(iltin command, or).2 F(those set by the shell itself \(such as the) +144 96 Q F2<ad69>2.5 E F1(option\).)2.5 E F2($)108 108 Q F1 .839 +(Expands to the process ID of the shell. In a subshell, it e)144 108 R .839(xpands to the process ID of the current)-.15 F -(shell, not the subshell.)144 96 Q F1(!)108 108 Q F0 .499(Expands to th\ -e process ID of the job most recently placed into the background, wheth\ -er e)144 108 R -.15(xe)-.15 G(cuted).15 E -(as an asynchronous command or using the)144 120 Q F1(bg)2.5 E F0 -.2 -(bu)2.5 G(iltin \(see).2 E/F2 9/Times-Bold@0 SF(JOB CONTR)2.5 E(OL)-.27 -E F0(belo)2.25 E(w\).)-.25 E F1(0)108 132 Q F0 .886 -(Expands to the name of the shell or shell script.)144 132 R .886 -(This is set at shell initialization.)5.886 F(If)5.887 E F1(bash)3.387 E -F0 .887(is in-)3.387 F -.2(vo)144 144 S -.1(ke).2 G 2.668(dw).1 G .168 -(ith a \214le of commands,)-2.668 F F1($0)2.668 E F0 .167 -(is set to the name of that \214le.)2.667 F(If)5.167 E F1(bash)2.667 E -F0 .167(is started with the)2.667 F F1<ad63>2.667 E F0(op-)2.667 E .895 -(tion, then)144 156 R F1($0)3.395 E F0 .895(is set to the \214rst ar) +(shell, not the subshell.)144 120 Q F2(!)108 132 Q F1 .499(Expands to t\ +he process ID of the job most recently placed into the background, whet\ +her e)144 132 R -.15(xe)-.15 G(cuted).15 E +(as an asynchronous command or using the)144 144 Q F2(bg)2.5 E F1 -.2 +(bu)2.5 G(iltin \(see).2 E/F3 9/Times-Bold@0 SF(JOB CONTR)2.5 E(OL)-.27 +E F1(belo)2.25 E(w\).)-.25 E F2(0)108 156 Q F1 .886 +(Expands to the name of the shell or shell script.)144 156 R .886 +(This is set at shell initialization.)5.886 F(If)5.887 E F2(bash)3.387 E +F1 .887(is in-)3.387 F -.2(vo)144 168 S -.1(ke).2 G 2.668(dw).1 G .168 +(ith a \214le of commands,)-2.668 F F2($0)2.668 E F1 .167 +(is set to the name of that \214le.)2.667 F(If)5.167 E F2(bash)2.667 E +F1 .167(is started with the)2.667 F F2<ad63>2.667 E F1(op-)2.667 E .895 +(tion, then)144 180 R F2($0)3.395 E F1 .895(is set to the \214rst ar) 3.395 F .895(gument after the string to be e)-.18 F -.15(xe)-.15 G .896 (cuted, if one is present.).15 F(Other)5.896 E(-)-.2 E -(wise, it is set to the \214lename used to in)144 168 Q -.2(vo)-.4 G -.1 -(ke).2 G F1(bash)2.6 E F0 2.5(,a)C 2.5(sg)-2.5 G -2.15 -.25(iv e)-2.5 H -2.5(nb).25 G 2.5(ya)-2.5 G -.18(rg)-2.5 G(ument zero.).18 E F1(Shell V) -87 184.8 Q(ariables)-.92 E F0(The follo)108 196.8 Q(wing v)-.25 E -(ariables are set by the shell:)-.25 E F1(_)108 213.6 Q F0 1.526 -(At shell startup, set to the pathname used to in)144 213.6 R -.2(vo)-.4 +(wise, it is set to the \214lename used to in)144 192 Q -.2(vo)-.4 G -.1 +(ke).2 G F2(bash)2.6 E F1 2.5(,a)C 2.5(sg)-2.5 G -2.15 -.25(iv e)-2.5 H +2.5(nb).25 G 2.5(ya)-2.5 G -.18(rg)-2.5 G(ument zero.).18 E F2(Shell V) +87 208.8 Q(ariables)-.92 E F1(The follo)108 220.8 Q(wing v)-.25 E +(ariables are set by the shell:)-.25 E F2(_)108 237.6 Q F1 1.526 +(At shell startup, set to the pathname used to in)144 237.6 R -.2(vo)-.4 G 1.725 -.1(ke t).2 H 1.525(he shell or shell script being e).1 F -.15 -(xe)-.15 G 1.525(cuted as).15 F .173(passed in the en)144 225.6 R .173 +(xe)-.15 G 1.525(cuted as).15 F .173(passed in the en)144 249.6 R .173 (vironment or ar)-.4 F .173(gument list.)-.18 F(Subsequently)5.173 E 2.673(,e)-.65 G .173(xpands to the last ar)-2.823 F .174 -(gument to the pre-)-.18 F .337(vious simple command e)144 237.6 R -.15 +(gument to the pre-)-.18 F .337(vious simple command e)144 261.6 R -.15 (xe)-.15 G .337(cuted in the fore).15 F .336(ground, after e)-.15 F 2.836(xpansion. Also)-.15 F .336(set to the full pathname)2.836 F .365 -(used to in)144 249.6 R -.2(vo)-.4 G .565 -.1(ke e).2 H .365 +(used to in)144 273.6 R -.2(vo)-.4 G .565 -.1(ke e).2 H .365 (ach command e).1 F -.15(xe)-.15 G .366(cuted and placed in the en).15 F .366(vironment e)-.4 F .366(xported to that command.)-.15 F(When checki\ ng mail, this parameter holds the name of the mail \214le currently bei\ -ng check)144 261.6 Q(ed.)-.1 E F1 -.3(BA)108 273.6 S(SH).3 E F0 -(Expands to the full \214lename used to in)144 273.6 Q -.2(vo)-.4 G .2 --.1(ke t).2 H(his instance of).1 E F1(bash)2.5 E F0(.)A F1 -.3(BA)108 -285.6 S(SHOPTS).3 E F0 2.549(Ac)144 297.6 S .049 +ng check)144 285.6 Q(ed.)-.1 E F2 -.3(BA)108 297.6 S(SH).3 E F1 +(Expands to the full \214lename used to in)144 297.6 Q -.2(vo)-.4 G .2 +-.1(ke t).2 H(his instance of).1 E F2(bash)2.5 E F1(.)A F2 -.3(BA)108 +309.6 S(SHOPTS).3 E F1 2.549(Ac)144 321.6 S .049 (olon-separated list of enabled shell options.)-2.549 F .049(Each w) 5.049 F .049(ord in the list is a v)-.1 F .049(alid ar)-.25 F .049 -(gument for the)-.18 F F1<ad73>2.548 E F0 .115(option to the)144 309.6 R -F1(shopt)2.616 E F0 -.2(bu)2.616 G .116(iltin command \(see).2 F F2 .116 -(SHELL B)2.616 F(UIL)-.09 E .116(TIN COMMANDS)-.828 F F0(belo)2.366 E +(gument for the)-.18 F F2<ad73>2.548 E F1 .115(option to the)144 333.6 R +F2(shopt)2.616 E F1 -.2(bu)2.616 G .116(iltin command \(see).2 F F3 .116 +(SHELL B)2.616 F(UIL)-.09 E .116(TIN COMMANDS)-.828 F F1(belo)2.366 E 2.616(w\). The)-.25 F .116(options ap-)2.616 F 1.067(pearing in)144 -321.6 R F2 -.27(BA)3.567 G(SHOPTS).27 E F0 1.067(are those reported as) -3.317 F/F3 10/Times-Italic@0 SF(on)3.797 E F0(by)3.807 E F1(shopt)3.567 -E F0 6.066(.I)C 3.566(ft)-6.066 G 1.066(his v)-3.566 F 1.066 -(ariable is in the en)-.25 F(vironment)-.4 E(when)144 333.6 Q F1(bash) -3.141 E F0 .642(starts up, each shell option in the list will be enable\ -d before reading an)3.141 F 3.142(ys)-.15 G .642(tartup \214les.)-3.142 -F(This v)144 345.6 Q(ariable is read-only)-.25 E(.)-.65 E F1 -.3(BA)108 -357.6 S(SHPID).3 E F0 .188(Expands to the process ID of the current)144 -369.6 R F1(bash)2.688 E F0 2.687(process. This)2.687 F(dif)2.687 E .187 -(fers from)-.25 F F1($$)2.687 E F0 .187(under certain circum-)2.687 F -.548(stances, such as subshells that do not require)144 381.6 R F1(bash) -3.048 E F0 .548(to be re-initialized.)3.048 F .549(Assignments to)5.549 -F F2 -.27(BA)3.049 G(SHPID).27 E F0(ha)144 393.6 Q .3 -.15(ve n)-.2 H -2.5(oe).15 G -.25(ff)-2.5 G 2.5(ect. If).25 F F1 -.3(BA)2.5 G(SHPID).3 E -F0(is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5 +345.6 R F3 -.27(BA)3.567 G(SHOPTS).27 E F1 1.067(are those reported as) +3.317 F F0(on)3.797 E F1(by)3.807 E F2(shopt)3.567 E F1 6.066(.I)C 3.566 +(ft)-6.066 G 1.066(his v)-3.566 F 1.066(ariable is in the en)-.25 F +(vironment)-.4 E(when)144 357.6 Q F2(bash)3.141 E F1 .642(starts up, ea\ +ch shell option in the list will be enabled before reading an)3.141 F +3.142(ys)-.15 G .642(tartup \214les.)-3.142 F(This v)144 369.6 Q +(ariable is read-only)-.25 E(.)-.65 E F2 -.3(BA)108 381.6 S(SHPID).3 E +F1 .188(Expands to the process ID of the current)144 393.6 R F2(bash) +2.688 E F1 2.687(process. This)2.687 F(dif)2.687 E .187(fers from)-.25 F +F2($$)2.687 E F1 .187(under certain circum-)2.687 F .548 +(stances, such as subshells that do not require)144 405.6 R F2(bash) +3.048 E F1 .548(to be re-initialized.)3.048 F .549(Assignments to)5.549 +F F3 -.27(BA)3.049 G(SHPID).27 E F1(ha)144 417.6 Q .3 -.15(ve n)-.2 H +2.5(oe).15 G -.25(ff)-2.5 G 2.5(ect. If).25 F F2 -.3(BA)2.5 G(SHPID).3 E +F1(is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5 (ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) --2.5 E F1 -.3(BA)108 405.6 S(SH_ALIASES).3 E F0 1.195(An associati)144 -417.6 R 1.495 -.15(ve a)-.25 H 1.195(rray v).15 F 1.195(ariable whose m\ +-2.5 E F2 -.3(BA)108 429.6 S(SH_ALIASES).3 E F1 1.195(An associati)144 +441.6 R 1.495 -.15(ve a)-.25 H 1.195(rray v).15 F 1.195(ariable whose m\ embers correspond to the internal list of aliases as main-)-.25 F .16 -(tained by the)144 429.6 R F1(alias)2.66 E F0 -.2(bu)2.66 G 2.66 +(tained by the)144 453.6 R F2(alias)2.66 E F1 -.2(bu)2.66 G 2.66 (iltin. Elements).2 F .16 (added to this array appear in the alias list; ho)2.66 F(we)-.25 E -.15 (ve)-.25 G .96 -.4(r, u).15 H(nsetting).4 E 4.503 -(array elements currently does not cause aliases to be remo)144 441.6 R +(array elements currently does not cause aliases to be remo)144 465.6 R -.15(ve)-.15 G 7.003(df).15 G 4.503(rom the alias list.)-7.003 F(If) -9.502 E F1 -.3(BA)144 453.6 S(SH_ALIASES).3 E F0 +9.502 E F2 -.3(BA)144 477.6 S(SH_ALIASES).3 E F1 (is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5 (ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) --2.5 E F1 -.3(BA)108 465.6 S(SH_ARGC).3 E F0 .934(An array v)144 477.6 R +-2.5 E F2 -.3(BA)108 489.6 S(SH_ARGC).3 E F1 .934(An array v)144 501.6 R .934(ariable whose v)-.25 F .934 (alues are the number of parameters in each frame of the current)-.25 F -F1(bash)3.435 E F0 -.15(exe)144 489.6 S .535(cution call stack.).15 F +F2(bash)3.435 E F1 -.15(exe)144 513.6 S .535(cution call stack.).15 F .535(The number of parameters to the current subroutine \(shell functio\ -n or script)5.535 F -.15(exe)144 501.6 S .141(cuted with).15 F F1(.) -2.641 E F0(or)2.641 E F1(sour)2.641 E(ce)-.18 E F0 2.641(\)i)C 2.641(sa) +n or script)5.535 F -.15(exe)144 525.6 S .141(cuted with).15 F F2(.) +2.641 E F1(or)2.641 E F2(sour)2.641 E(ce)-.18 E F1 2.641(\)i)C 2.641(sa) -2.641 G 2.641(tt)-2.641 G .142(he top of the stack.)-2.641 F .142 (When a subroutine is e)5.142 F -.15(xe)-.15 G .142 (cuted, the number of).15 F 1.265(parameters passed is pushed onto)144 -513.6 R F2 -.27(BA)3.765 G(SH_ARGC).27 E/F4 9/Times-Roman@0 SF(.)A F0 -1.265(The shell sets)5.765 F F2 -.27(BA)3.765 G(SH_ARGC).27 E F0 1.265 -(only when in e)3.515 F(x-)-.15 E .947(tended deb)144 525.6 R .947 -(ugging mode \(see the description of the)-.2 F F1(extdeb)3.447 E(ug)-.2 -E F0 .947(option to the)3.447 F F1(shopt)3.447 E F0 -.2(bu)3.448 G .948 -(iltin belo).2 F(w\).)-.25 E(Setting)144 537.6 Q F1(extdeb)3.363 E(ug) --.2 E F0 .863(after the shell has started to e)3.363 F -.15(xe)-.15 G +537.6 R F3 -.27(BA)3.765 G(SH_ARGC).27 E/F4 9/Times-Roman@0 SF(.)A F1 +1.265(The shell sets)5.765 F F3 -.27(BA)3.765 G(SH_ARGC).27 E F1 1.265 +(only when in e)3.515 F(x-)-.15 E .947(tended deb)144 549.6 R .947 +(ugging mode \(see the description of the)-.2 F F2(extdeb)3.447 E(ug)-.2 +E F1 .947(option to the)3.447 F F2(shopt)3.447 E F1 -.2(bu)3.448 G .948 +(iltin belo).2 F(w\).)-.25 E(Setting)144 561.6 Q F2(extdeb)3.363 E(ug) +-.2 E F1 .863(after the shell has started to e)3.363 F -.15(xe)-.15 G .862(cute a script, or referencing this v).15 F .862(ariable when)-.25 F -F1(extdeb)144 549.6 Q(ug)-.2 E F0 -(is not set, may result in inconsistent v)2.5 E(alues.)-.25 E F1 -.3(BA) -108 561.6 S(SH_ARGV).3 E F0 .206(An array v)144 573.6 R .206 -(ariable containing all of the parameters in the current)-.25 F F1(bash) -2.706 E F0 -.15(exe)2.706 G .207(cution call stack.).15 F .207 -(The \214-)5.207 F .567(nal parameter of the last subroutine call is at\ - the top of the stack; the \214rst parameter of the initial)144 585.6 R -1.424(call is at the bottom.)144 597.6 R 1.424(When a subroutine is e) +F2(extdeb)144 573.6 Q(ug)-.2 E F1 .706 +(is not set, may result in inconsistent v)3.206 F 3.206 +(alues. Assignments)-.25 F(to)3.206 E F3 -.27(BA)3.206 G(SH_ARGC).27 E +F1(ha)2.957 E 1.007 -.15(ve n)-.2 H 3.207(oe).15 G(f-)-3.207 E +(fect, and it may not be unset.)144 585.6 Q F2 -.3(BA)108 597.6 S +(SH_ARGV).3 E F1 .207(An array v)144 609.6 R .206 +(ariable containing all of the parameters in the current)-.25 F F2(bash) +2.706 E F1 -.15(exe)2.706 G .206(cution call stack.).15 F .206 +(The \214-)5.206 F .567(nal parameter of the last subroutine call is at\ + the top of the stack; the \214rst parameter of the initial)144 621.6 R +1.424(call is at the bottom.)144 633.6 R 1.424(When a subroutine is e) 6.424 F -.15(xe)-.15 G 1.424 -(cuted, the parameters supplied are pushed onto).15 F F2 -.27(BA)144 -609.6 S(SH_ARGV).27 E F4(.)A F0 .854(The shell sets)5.354 F F2 -.27(BA) -3.354 G(SH_ARGV).27 E F0 .853(only when in e)3.104 F .853(xtended deb) --.15 F .853(ugging mode \(see the de-)-.2 F .475(scription of the)144 -621.6 R F1(extdeb)2.975 E(ug)-.2 E F0 .475(option to the)2.975 F F1 -(shopt)2.975 E F0 -.2(bu)2.975 G .475(iltin belo).2 F 2.975 -(w\). Setting)-.25 F F1(extdeb)2.976 E(ug)-.2 E F0 .476 -(after the shell has)2.976 F .45(started to e)144 633.6 R -.15(xe)-.15 G +(cuted, the parameters supplied are pushed onto).15 F F3 -.27(BA)144 +645.6 S(SH_ARGV).27 E F4(.)A F1 .853(The shell sets)5.353 F F3 -.27(BA) +3.353 G(SH_ARGV).27 E F1 .853(only when in e)3.103 F .854(xtended deb) +-.15 F .854(ugging mode \(see the de-)-.2 F .476(scription of the)144 +657.6 R F2(extdeb)2.976 E(ug)-.2 E F1 .476(option to the)2.976 F F2 +(shopt)2.975 E F1 -.2(bu)2.975 G .475(iltin belo).2 F 2.975 +(w\). Setting)-.25 F F2(extdeb)2.975 E(ug)-.2 E F1 .475 +(after the shell has)2.975 F .45(started to e)144 669.6 R -.15(xe)-.15 G .45(cute a script, or referencing this v).15 F .45(ariable when)-.25 F -F1(extdeb)2.95 E(ug)-.2 E F0 .45(is not set, may result in in-)2.95 F -(consistent v)144 645.6 Q(alues.)-.25 E F1 -.3(BA)108 657.6 S(SH_ARGV0) -.3 E F0 .25(When referenced, this v)144 669.6 R .25(ariable e)-.25 F -.251(xpands to the name of the shell or shell script \(identical to)-.15 -F F1($0)2.751 E F0 2.751(;s)C(ee)-2.751 E .041 -(the description of special parameter 0 abo)144 681.6 R -.15(ve)-.15 G -2.541(\). Assignment).15 F(to)2.541 E F1 -.3(BA)2.541 G(SH_ARGV0).3 E F0 -.04(causes the v)2.541 F .04(alue as-)-.25 F .216 -(signed to also be assigned to)144 693.6 R F1($0)2.716 E F0 5.216(.I)C -(f)-5.216 E F1 -.3(BA)2.716 G(SH_ARGV0).3 E F0 .216 +F2(extdeb)2.95 E(ug)-.2 E F1 .45(is not set, may result in in-)2.95 F +(consistent v)144 681.6 Q 2.5(alues. Assignments)-.25 F(to)2.5 E F3 -.27 +(BA)2.5 G(SH_ARGV).27 E F1(ha)2.25 E .3 -.15(ve n)-.2 H 2.5(oe).15 G +-.25(ff)-2.5 G(ect, and it may not be unset.).25 E F2 -.3(BA)108 693.6 S +(SH_ARGV0).3 E F1 .251(When referenced, this v)144 705.6 R .251 +(ariable e)-.25 F .251 +(xpands to the name of the shell or shell script \(identical to)-.15 F +F2($0)2.75 E F1 2.75(;s)C(ee)-2.75 E .04 +(the description of special parameter 0 abo)144 717.6 R -.15(ve)-.15 G +2.541(\). Assignment).15 F(to)2.541 E F2 -.3(BA)2.541 G(SH_ARGV0).3 E F1 +.041(causes the v)2.541 F .041(alue as-)-.25 F .216 +(signed to also be assigned to)144 729.6 R F2($0)2.716 E F1 5.216(.I)C +(f)-5.216 E F2 -.3(BA)2.716 G(SH_ARGV0).3 E F1 .216 (is unset, it loses its special properties, e)2.716 F -.15(ve)-.25 G -2.716(ni).15 G(f)-2.716 E(it is subsequently reset.)144 705.6 Q -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(11)185.115 E 0 Cg EP +2.715(ni).15 G(f)-2.715 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E +(11)193.45 E 0 Cg EP %%Page: 12 12 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF -.3(BA)108 84 S(SH_CMDS).3 E F0 .668(An associati)144 96 R .968 -.15 -(ve a)-.25 H .668(rray v).15 F .668(ariable whose members correspond to\ - the internal hash table of commands)-.25 F .195(as maintained by the) -144 108 R F1(hash)2.695 E F0 -.2(bu)2.695 G 2.695(iltin. Elements).2 F -.196(added to this array appear in the hash table; ho)2.696 F(we)-.25 E --.15(ve)-.25 G -.4(r,).15 G .852(unsetting array elements currently doe\ -s not cause command names to be remo)144 120 R -.15(ve)-.15 G 3.352(df) -.15 G .852(rom the hash)-3.352 F 2.5(table. If)144 132 R F1 -.3(BA)2.5 G -(SH_CMDS).3 E F0(is unset, it loses its special properties, e)2.5 E -.15 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(it is subsequently reset.)144 84 Q/F2 10 +/Times-Bold@0 SF -.3(BA)108 96 S(SH_CMDS).3 E F1 .667(An associati)144 +108 R .967 -.15(ve a)-.25 H .667(rray v).15 F .668(ariable whose member\ +s correspond to the internal hash table of commands)-.25 F .196 +(as maintained by the)144 120 R F2(hash)2.696 E F1 -.2(bu)2.696 G 2.696 +(iltin. Elements).2 F .195 +(added to this array appear in the hash table; ho)2.696 F(we)-.25 E -.15 +(ve)-.25 G -.4(r,).15 G .852(unsetting array elements currently does no\ +t cause command names to be remo)144 132 R -.15(ve)-.15 G 3.352(df).15 G +.853(rom the hash)-3.352 F 2.5(table. If)144 144 R F2 -.3(BA)2.5 G +(SH_CMDS).3 E F1(is unset, it loses its special properties, e)2.5 E -.15 (ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G -(ubsequently reset.)-2.5 E F1 -.3(BA)108 144 S(SH_COMMAND).3 E F0 1.242 -(The command currently being e)144 156 R -.15(xe)-.15 G 1.243 -(cuted or about to be e).15 F -.15(xe)-.15 G 1.243 -(cuted, unless the shell is e).15 F -.15(xe)-.15 G 1.243(cuting a).15 F -.263(command as the result of a trap, in which case it is the command e) -144 168 R -.15(xe)-.15 G .262(cuting at the time of the trap.).15 F(If) -144 180 Q F1 -.3(BA)2.5 G(SH_COMMAND).3 E F0 +(ubsequently reset.)-2.5 E F2 -.3(BA)108 156 S(SH_COMMAND).3 E F1 1.243 +(The command currently being e)144 168 R -.15(xe)-.15 G 1.243 +(cuted or about to be e).15 F -.15(xe)-.15 G 1.242 +(cuted, unless the shell is e).15 F -.15(xe)-.15 G 1.242(cuting a).15 F +.262(command as the result of a trap, in which case it is the command e) +144 180 R -.15(xe)-.15 G .263(cuting at the time of the trap.).15 F(If) +144 192 Q F2 -.3(BA)2.5 G(SH_COMMAND).3 E F1 (is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5 (ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) --2.5 E F1 -.3(BA)108 192 S(SH_EXECUTION_STRING).3 E F0(The command ar) -144 204 Q(gument to the)-.18 E F1<ad63>2.5 E F0(in)2.5 E -.2(vo)-.4 G -(cation option.).2 E F1 -.3(BA)108 216 S(SH_LINENO).3 E F0 .692 -(An array v)144 228 R .692(ariable whose members are the line numbers i\ -n source \214les where each corresponding)-.25 F .97(member of)144 240 R -/F2 9/Times-Bold@0 SF(FUNCN)3.47 E(AME)-.18 E F0 -.1(wa)3.22 G 3.47(si) -.1 G -1.9 -.4(nv o)-3.47 H -.1(ke).4 G(d.).1 E F1(${B)5.969 E -(ASH_LINENO[)-.3 E/F3 10/Times-Italic@0 SF($i)A F1(]})A F0 .969 -(is the line number in the source)3.469 F 14.671(\214le \()144 252 R F1 -(${B)A(ASH_SOURCE[)-.3 E F3($i+1)A F1(]})A F0 17.171(\)w)C(here)-17.171 -E F1(${FUNCN)17.172 E(AME[)-.2 E F3($i)A F1(]})A F0 -.1(wa)17.172 G -17.172(sc).1 G 14.672(alled \(or)-17.172 F F1(${B)144 264 Q(ASH_LINENO[) --.3 E F3($i-1)A F1(]})A F0 .115 -(if referenced within another shell function\).)2.615 F(Use)5.115 E F2 -(LINENO)2.615 E F0 .115(to obtain the)2.365 F(current line number)144 -276 Q(.)-.55 E F1 -.3(BA)108 288 S(SH_LO).3 E(AD)-.4 E(ABLES_P)-.35 E --.95(AT)-.74 G(H).95 E F0 4.07(Ac)144 300 S 1.57(olon-separated list of\ - directories in which the shell looks for dynamically loadable b)-4.07 F -(uiltins)-.2 E(speci\214ed by the)144 312 Q F1(enable)2.5 E F0(command.) -2.5 E F1 -.3(BA)108 324 S(SH_REMA).3 E(TCH)-.95 E F0 .006(An array v)144 -336 R .006(ariable whose members are assigned by the)-.25 F F1(=~)2.506 -E F0 .005(binary operator to the)2.506 F F1([[)2.505 E F0 .005 -(conditional com-)2.505 F 2.506(mand. The)144 348 R .007 -(element with inde)2.506 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 .007(gular e) --.15 F(xpression.)-.15 E .998(The element with inde)144 360 R(x)-.15 E -F3(n)3.498 E F0 .997(is the portion of the string matching the)3.498 F -F3(n)3.497 E F0 .997(th parenthesized sube)B(xpres-)-.15 E(sion.)144 372 -Q F1 -.3(BA)108 384 S(SH_SOURCE).3 E F0 .125(An array v)144 396 R .125(\ -ariable whose members are the source \214lenames where the correspondin\ -g shell function)-.25 F .781(names in the)144 408 R F2(FUNCN)3.28 E(AME) --.18 E F0 .78(array v)3.03 F .78(ariable are de\214ned.)-.25 F .78 -(The shell function)5.78 F F1(${FUNCN)3.28 E(AME[)-.2 E F3($i)A F1(]})A -F0(is)3.28 E(de\214ned in the \214le)144 420 Q F1(${B)2.5 E(ASH_SOURCE[) --.3 E F3($i)A F1(]})A F0(and called from)2.5 E F1(${B)2.5 E(ASH_SOURCE[) --.3 E F3($i+1)A F1(]})A F0(.)A F1 -.3(BA)108 432 S(SH_SUBSHELL).3 E F0 -.296(Incremented by one within each subshell or subshell en)144 444 R -.296(vironment when the shell be)-.4 F .297(gins e)-.15 F -.15(xe)-.15 G -(cuting).15 E 1.277(in that en)144 456 R 3.777(vironment. The)-.4 F -1.277(initial v)3.777 F 1.277(alue is 0.)-.25 F(If)6.277 E F1 -.3(BA) -3.777 G(SH_SUBSHELL).3 E F0 1.276(is unset, it loses its special)3.777 F -(properties, e)144 468 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5 -(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1 -.3(BA)108 480 S -(SH_VERSINFO).3 E F0 2.644(Ar)144 492 S .144(eadonly array v)-2.644 F -.144(ariable whose members hold v)-.25 F .144 -(ersion information for this instance of)-.15 F F1(bash)2.645 E F0 5.145 -(.T)C(he)-5.145 E -.25(va)144 504 S -(lues assigned to the array members are as follo).25 E(ws:)-.25 E F1 -.3 -(BA)144 522 S(SH_VERSINFO[).3 E F0(0)A F1(])A F0(The major v)264 522 Q -(ersion number \(the)-.15 E F3 -.37(re)2.5 G(lease).37 E F0(\).)A F1 -.3 -(BA)144 534 S(SH_VERSINFO[).3 E F0(1)A F1(])A F0(The minor v)264 534 Q -(ersion number \(the)-.15 E F3(ver)2.5 E(sion)-.1 E F0(\).)A F1 -.3(BA) -144 546 S(SH_VERSINFO[).3 E F0(2)A F1(])A F0(The patch le)264 546 Q -.15 -(ve)-.25 G(l.).15 E F1 -.3(BA)144 558 S(SH_VERSINFO[).3 E F0(3)A F1(])A -F0(The b)264 558 Q(uild v)-.2 E(ersion.)-.15 E F1 -.3(BA)144 570 S -(SH_VERSINFO[).3 E F0(4)A F1(])A F0(The release status \(e.g.,)264 570 Q -F3(beta1)2.5 E F0(\).)A F1 -.3(BA)144 582 S(SH_VERSINFO[).3 E F0(5)A F1 -(])A F0(The v)264 582 Q(alue of)-.25 E F2(MA)2.5 E(CHTYPE)-.495 E/F4 9 -/Times-Roman@0 SF(.)A F1 -.3(BA)108 594 S(SH_VERSION).3 E F0 -(Expands to a string describing the v)144 606 Q -(ersion of this instance of)-.15 E F1(bash)2.5 E F0(.)A F1(COMP_CW)108 -618 Q(ORD)-.1 E F0 .397(An inde)144 630 R 2.897(xi)-.15 G(nto)-2.897 E -F1(${COMP_W)2.896 E(ORDS})-.1 E F0 .396(of the w)2.896 F .396 -(ord containing the current cursor position.)-.1 F .396(This v)5.396 F -(ari-)-.25 E 1.18(able is a)144 642 R -.25(va)-.2 G 1.181 +-2.5 E F2 -.3(BA)108 204 S(SH_EXECUTION_STRING).3 E F1(The command ar) +144 216 Q(gument to the)-.18 E F2<ad63>2.5 E F1(in)2.5 E -.2(vo)-.4 G +(cation option.).2 E F2 -.3(BA)108 228 S(SH_LINENO).3 E F1 .693 +(An array v)144 240 R .692(ariable whose members are the line numbers i\ +n source \214les where each corresponding)-.25 F .969(member of)144 252 +R/F3 9/Times-Bold@0 SF(FUNCN)3.469 E(AME)-.18 E F1 -.1(wa)3.219 G 3.469 +(si).1 G -1.9 -.4(nv o)-3.469 H -.1(ke).4 G(d.).1 E F2(${B)5.969 E +(ASH_LINENO[)-.3 E F0($i)A F2(]})A F1 .97 +(is the line number in the source)3.469 F 14.672(\214le \()144 264 R F2 +(${B)A(ASH_SOURCE[)-.3 E F0($i+1)A F2(]})A F1 17.172(\)w)C(here)-17.172 +E F2(${FUNCN)17.172 E(AME[)-.2 E F0($i)A F2(]})A F1 -.1(wa)17.172 G +17.171(sc).1 G 14.671(alled \(or)-17.171 F F2(${B)144 276 Q(ASH_LINENO[) +-.3 E F0($i\2551)A F2(]})A F1 1.256 +(if referenced within another shell function\).)3.756 F(Use)6.257 E F3 +(LINENO)3.757 E F1 1.257(to obtain)3.507 F(the current line number)144 +288 Q 5(.A)-.55 G(ssignments to)-5 E F3 -.27(BA)2.5 G(SH_LINENO).27 E F1 +(ha)2.25 E .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G +(ect, and it may not be unset.).25 E F2 -.3(BA)108 300 S(SH_LO).3 E(AD) +-.4 E(ABLES_P)-.35 E -.95(AT)-.74 G(H).95 E F1 4.07(Ac)144 312 S 1.57(o\ +lon-separated list of directories in which the shell looks for dynamica\ +lly loadable b)-4.07 F(uiltins)-.2 E(speci\214ed by the)144 324 Q F2 +(enable)2.5 E F1(command.)2.5 E F2 -.3(BA)108 336 S(SH_REMA).3 E(TCH) +-.95 E F1 1.418(An array v)144 348 R 1.418 +(ariable whose members are assigned by the)-.25 F F2<3d01>3.918 E F1 +1.418(binary operator to the)3.918 F F2([[)3.918 E F1(conditional)3.918 +E 3.462(command. The)144 360 R .962(element with inde)3.462 F 3.462(x0i) +-.15 G 3.462(st)-3.462 G .962 +(he portion of the string matching the entire re)-3.462 F .961(gular e) +-.15 F(x-)-.15 E 3.82(pression. The)144 372 R 1.32(element with inde) +3.82 F(x)-.15 E F0(n)3.82 E F1 1.32 +(is the portion of the string matching the)3.82 F F0(n)3.82 E F1 1.32 +(th parenthesized)B(sube)144 384 Q(xpression.)-.15 E F2 -.3(BA)108 396 S +(SH_MONOSECONDS).3 E F1 .707(Each time this v)144 408 R .707 +(ariable is referenced, it e)-.25 F .707(xpands to the v)-.15 F .706 +(alue returned by the system')-.25 F 3.206(sm)-.55 G(onotonic)-3.206 E +.057(clock, if one is a)144 420 R -.25(va)-.2 G 2.557(ilable. If).25 F +.057(there is no monotonic clock, this is equi)2.557 F -.25(va)-.25 G +.058(lent to).25 F F2(EPOCHSECONDS)2.558 E F1(.)A(If)144 432 Q F2 -.3 +(BA)3.02 G(SH_MONOSECONDS).3 E F1 .519 +(is unset, it loses its special properties, e)3.02 F -.15(ve)-.25 G +3.019(ni).15 G 3.019(fi)-3.019 G 3.019(ti)-3.019 G 3.019(ss)-3.019 G +.519(ubsequently re-)-3.019 F(set.)144 444 Q F2 -.3(BA)108 456 S +(SH_SOURCE).3 E F1 .125(An array v)144 468 R .125(ariable whose members\ + are the source \214lenames where the corresponding shell function)-.25 +F .781(names in the)144 480 R F3(FUNCN)3.28 E(AME)-.18 E F1 .78(array v) +3.03 F .78(ariable are de\214ned.)-.25 F .78(The shell function)5.78 F +F2(${FUNCN)3.28 E(AME[)-.2 E F0($i)A F2(]})A F1(is)3.28 E .424 +(de\214ned in the \214le)144 492 R F2(${B)2.924 E(ASH_SOURCE[)-.3 E F0 +($i)A F2(]})A F1 .425(and called from)2.924 F F2(${B)2.925 E +(ASH_SOURCE[)-.3 E F0($i+1)A F2(]})A F1 5.425(.A)C(ssign-)-5.425 E +(ments to)144 504 Q F3 -.27(BA)2.5 G(SH_SOURCE).27 E F1(ha)2.25 E .3 +-.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G +(ect, and it may not be unset.).25 E F2 -.3(BA)108 516 S(SH_SUBSHELL).3 +E F1 .296(Incremented by one within each subshell or subshell en)144 528 +R .296(vironment when the shell be)-.4 F .296(gins e)-.15 F -.15(xe)-.15 +G(cuting).15 E 1.276(in that en)144 540 R 3.776(vironment. The)-.4 F +1.276(initial v)3.776 F 1.277(alue is 0.)-.25 F(If)6.277 E F2 -.3(BA) +3.777 G(SH_SUBSHELL).3 E F1 1.277(is unset, it loses its special)3.777 F +(properties, e)144 552 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5 +(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F2 -.3(BA)108 564 S +(SH_TRAPSIG).3 E F1 .203 +(Set to the signal number corresponding to the trap action being e)144 +576 R -.15(xe)-.15 G .202(cuted during its e).15 F -.15(xe)-.15 G 2.702 +(cution. See).15 F .782(the description of)144 588 R F2(trap)3.282 E F1 +(under)3.282 E F3 .782(SHELL B)3.282 F(UIL)-.09 E .782(TIN COMMANDS) +-.828 F F1(belo)3.032 E 3.282(wf)-.25 G .783 +(or information about signal)-3.282 F(numbers and trap e)144 600 Q -.15 +(xe)-.15 G(cution.).15 E F2 -.3(BA)108 612 S(SH_VERSINFO).3 E F1 2.645 +(Ar)144 624 S .145(eadonly array v)-2.645 F .144 +(ariable whose members hold v)-.25 F .144 +(ersion information for this instance of)-.15 F F2(bash)2.644 E F1 5.144 +(.T)C(he)-5.144 E -.25(va)144 636 S +(lues assigned to the array members are as follo).25 E(ws:)-.25 E F2 -.3 +(BA)144 648 S(SH_VERSINFO[).3 E F1(0)A F2(])A F1(The major v)264 648 Q +(ersion number \(the)-.15 E F0 -.37(re)2.5 G(lease).37 E F1(\).)A F2 -.3 +(BA)144 660 S(SH_VERSINFO[).3 E F1(1)A F2(])A F1(The minor v)264 660 Q +(ersion number \(the)-.15 E F0(ver)2.5 E(sion)-.1 E F1(\).)A F2 -.3(BA) +144 672 S(SH_VERSINFO[).3 E F1(2)A F2(])A F1(The patch le)264 672 Q -.15 +(ve)-.25 G(l.).15 E F2 -.3(BA)144 684 S(SH_VERSINFO[).3 E F1(3)A F2(])A +F1(The b)264 684 Q(uild v)-.2 E(ersion.)-.15 E F2 -.3(BA)144 696 S +(SH_VERSINFO[).3 E F1(4)A F2(])A F1(The release status \(e.g.,)264 696 Q +F0(beta)2.5 E F1(\).)A(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(12) +193.45 E 0 Cg EP +%%Page: 13 13 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF -.3(BA)144 84 S(SH_VERSINFO[) +.3 E F1(5)A F2(])A F1(The v)264 84 Q(alue of)-.25 E/F3 9/Times-Bold@0 SF +(MA)2.5 E(CHTYPE)-.495 E/F4 9/Times-Roman@0 SF(.)A F2 -.3(BA)108 96 S +(SH_VERSION).3 E F1(Expands to a string describing the v)144 108 Q +(ersion of this instance of)-.15 E F2(bash)2.5 E F1(.)A F2(COMP_CW)108 +120 Q(ORD)-.1 E F1 .396(An inde)144 132 R 2.896(xi)-.15 G(nto)-2.896 E +F2(${COMP_W)2.896 E(ORDS})-.1 E F1 .396(of the w)2.896 F .396 +(ord containing the current cursor position.)-.1 F .397(This v)5.397 F +(ari-)-.25 E 1.181(able is a)144 144 R -.25(va)-.2 G 1.181 (ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 3.681 -(db).1 G 3.681(yt)-3.681 G 1.181(he programmable completion f)-3.681 F -1.181(acilities \(see)-.1 F F1(Pr)144 654 Q(ogrammable Completion)-.18 E -F0(belo)2.5 E(w\).)-.25 E F1(COMP_KEY)108 666 Q F0(The k)144 678 Q .3 +(db).1 G 3.681(yt)-3.681 G 1.18(he programmable completion f)-3.681 F +1.18(acilities \(see)-.1 F F2(Pr)144 156 Q(ogrammable Completion)-.18 E +F1(belo)2.5 E(w\).)-.25 E F2(COMP_KEY)108 168 Q F1(The k)144 180 Q .3 -.15(ey \()-.1 H(or \214nal k).15 E .3 -.15(ey o)-.1 H 2.5(fak).15 G .3 -.15(ey s)-2.6 H(equence\) used to in).15 E -.2(vo)-.4 G .2 -.1(ke t).2 -H(he current completion function.).1 E F1(COMP_LINE)108 690 Q F0 1.208 -(The current command line.)144 702 R 1.208(This v)6.208 F 1.208 +H(he current completion function.).1 E F2(COMP_LINE)108 192 Q F1 1.207 +(The current command line.)144 204 R 1.208(This v)6.208 F 1.208 (ariable is a)-.25 F -.25(va)-.2 G 1.208 -(ilable only in shell functions and e).25 F 1.207(xternal com-)-.15 F -1.037(mands in)144 714 R -.2(vo)-.4 G -.1(ke).2 G 3.537(db).1 G 3.537 +(ilable only in shell functions and e).25 F 1.208(xternal com-)-.15 F +1.037(mands in)144 216 R -.2(vo)-.4 G -.1(ke).2 G 3.537(db).1 G 3.537 (yt)-3.537 G 1.037(he programmable completion f)-3.537 F 1.037 -(acilities \(see)-.1 F F1(Pr)3.537 E 1.037(ogrammable Completion)-.18 F -F0(be-)3.537 E(lo)144 726 Q(w\).)-.25 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(12)185.115 E 0 Cg EP -%%Page: 13 13 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(COMP_POINT)108 84 Q F0 .667(The inde)144 96 R 3.167(xo)-.15 G 3.167 -(ft)-3.167 G .666(he current cursor position relati)-3.167 F .966 -.15 -(ve t)-.25 H 3.166(ot).15 G .666(he be)-3.166 F .666 -(ginning of the current command.)-.15 F .666(If the)5.666 F .534 +(acilities \(see)-.1 F F2(Pr)3.537 E 1.037(ogrammable Completion)-.18 F +F1(be-)3.537 E(lo)144 228 Q(w\).)-.25 E F2(COMP_POINT)108 240 Q F1 .666 +(The inde)144 252 R 3.166(xo)-.15 G 3.166(ft)-3.166 G .666 +(he current cursor position relati)-3.166 F .966 -.15(ve t)-.25 H 3.166 +(ot).15 G .666(he be)-3.166 F .666(ginning of the current command.)-.15 +F .667(If the)5.667 F .535 (current cursor position is at the end of the current command, the v)144 -108 R .535(alue of this v)-.25 F .535(ariable is equal to)-.25 F F1 -(${#COMP_LINE})144 120 Q F0 5.705(.T)C .705(his v)-5.705 F .704 +264 R .534(alue of this v)-.25 F .534(ariable is equal to)-.25 F F2 +(${#COMP_LINE})144 276 Q F1 5.704(.T)C .704(his v)-5.704 F .704 (ariable is a)-.25 F -.25(va)-.2 G .704 -(ilable only in shell functions and e).25 F .704(xternal commands in-) --.15 F -.2(vo)144 132 S -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G -(he programmable completion f)-2.5 E(acilities \(see)-.1 E F1(Pr)2.5 E -(ogrammable Completion)-.18 E F0(belo)2.5 E(w\).)-.25 E F1(COMP_TYPE)108 -144 Q F0 .041(Set to an inte)144 156 R .041(ger v)-.15 F .041(alue corr\ +(ilable only in shell functions and e).25 F .705(xternal commands in-) +-.15 F -.2(vo)144 288 S -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G +(he programmable completion f)-2.5 E(acilities \(see)-.1 E F2(Pr)2.5 E +(ogrammable Completion)-.18 E F1(belo)2.5 E(w\).)-.25 E F2(COMP_TYPE)108 +300 Q F1 .042(Set to an inte)144 312 R .042(ger v)-.15 F .041(alue corr\ esponding to the type of completion attempted that caused a completion) --.25 F .338(function to be called:)144 168 R/F2 10/Times-Italic@0 SF -.5 -(TA)2.837 G(B).5 E F0 2.837(,f)C .337(or normal completion,)-2.837 F F2 -(?)2.837 E F0 2.837(,f)C .337(or listing completions after successi) --2.837 F .637 -.15(ve t)-.25 H(abs,).15 E F2(!)144 180 Q F0 3.067(,f)C -.567(or listing alternati)-3.067 F -.15(ve)-.25 G 3.067(so).15 G 3.067 -(np)-3.067 G .567(artial w)-3.067 F .567(ord completion,)-.1 F F2(@) -3.067 E F0 3.067(,t)C 3.067(ol)-3.067 G .567(ist completions if the w) --3.067 F .567(ord is not un-)-.1 F .418(modi\214ed, or)144 192 R F2(%) -2.918 E F0 2.918(,f)C .418(or menu completion.)-2.918 F .417(This v) -5.417 F .417(ariable is a)-.25 F -.25(va)-.2 G .417 +-.25 F .337(function to be called:)144 324 R F0 -.5(TA)2.837 G(B).5 E F1 +2.837(,f)C .337(or normal completion,)-2.837 F F0(?)2.837 E F1 2.837(,f) +C .337(or listing completions after successi)-2.837 F .638 -.15(ve t) +-.25 H(abs,).15 E F0(!)144 336 Q F1 3.068(,f)C .567 +(or listing alternati)-3.068 F -.15(ve)-.25 G 3.067(so).15 G 3.067(np) +-3.067 G .567(artial w)-3.067 F .567(ord completion,)-.1 F F0(@)3.067 E +F1 3.067(,t)C 3.067(ol)-3.067 G .567(ist completions if the w)-3.067 F +.567(ord is not un-)-.1 F .417(modi\214ed, or)144 348 R F0(%)2.917 E F1 +2.917(,f)C .417(or menu completion.)-2.917 F .417(This v)5.417 F .417 +(ariable is a)-.25 F -.25(va)-.2 G .418 (ilable only in shell functions and e).25 F(xter)-.15 E(-)-.2 E .704 -(nal commands in)144 204 R -.2(vo)-.4 G -.1(ke).2 G 3.204(db).1 G 3.204 +(nal commands in)144 360 R -.2(vo)-.4 G -.1(ke).2 G 3.204(db).1 G 3.204 (yt)-3.204 G .704(he programmable completion f)-3.204 F .704 -(acilities \(see)-.1 F F1(Pr)3.204 E .704(ogrammable Comple-)-.18 F -(tion)144 216 Q F0(belo)2.5 E(w\).)-.25 E F1(COMP_W)108 228 Q(ORDBREAKS) --.1 E F0 1.336(The set of characters that the)144 240 R F1 -.18(re)3.836 -G(adline).18 E F0 1.336(library treats as w)3.836 F 1.335 -(ord separators when performing w)-.1 F(ord)-.1 E 3.125(completion. If) -144 252 R/F3 9/Times-Bold@0 SF(COMP_W)3.125 E(ORDBREAKS)-.09 E F0 .626 -(is unset, it loses its special properties, e)2.875 F -.15(ve)-.25 G -3.126(ni).15 G 3.126(fi)-3.126 G 3.126(ti)-3.126 G 3.126(ss)-3.126 G -(ubse-)-3.126 E(quently reset.)144 264 Q F1(COMP_W)108 276 Q(ORDS)-.1 E -F0 .654(An array v)144 288 R .654(ariable \(see)-.25 F F1(Arrays)3.154 E -F0(belo)3.154 E .654(w\) consisting of the indi)-.25 F .653(vidual w) --.25 F .653(ords in the current command)-.1 F 3.191(line. The)144 300 R -.692(line is split into w)3.192 F .692(ords as)-.1 F F1 -.18(re)3.192 G -(adline).18 E F0 -.1(wo)3.192 G .692(uld split it, using).1 F F3(COMP_W) -3.192 E(ORDBREAKS)-.09 E F0 .692(as de-)2.942 F 1.558(scribed abo)144 -312 R -.15(ve)-.15 G 6.558(.T).15 G 1.558(his v)-6.558 F 1.558 +(acilities \(see)-.1 F F2(Pr)3.204 E .704(ogrammable Comple-)-.18 F +(tion)144 372 Q F1(belo)2.5 E(w\).)-.25 E F2(COMP_W)108 384 Q(ORDBREAKS) +-.1 E F1 1.335(The set of characters that the)144 396 R F2 -.18(re)3.836 +G(adline).18 E F1 1.336(library treats as w)3.836 F 1.336 +(ord separators when performing w)-.1 F(ord)-.1 E 3.126(completion. If) +144 408 R F3(COMP_W)3.126 E(ORDBREAKS)-.09 E F1 .626 +(is unset, it loses its special properties, e)2.876 F -.15(ve)-.25 G +3.125(ni).15 G 3.125(fi)-3.125 G 3.125(ti)-3.125 G 3.125(ss)-3.125 G +(ubse-)-3.125 E(quently reset.)144 420 Q F2(COMP_W)108 432 Q(ORDS)-.1 E +F1 .653(An array v)144 444 R .653(ariable \(see)-.25 F F2(Arrays)3.153 E +F1(belo)3.153 E .654(w\) consisting of the indi)-.25 F .654(vidual w) +-.25 F .654(ords in the current command)-.1 F 3.192(line. The)144 456 R +.692(line is split into w)3.192 F .692(ords as)-.1 F F2 -.18(re)3.192 G +(adline).18 E F1 -.1(wo)3.192 G .692(uld split it, using).1 F F3(COMP_W) +3.192 E(ORDBREAKS)-.09 E F1 .691(as de-)2.942 F 1.557(scribed abo)144 +468 R -.15(ve)-.15 G 6.557(.T).15 G 1.557(his v)-6.557 F 1.557 (ariable is a)-.25 F -.25(va)-.2 G 1.558 -(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 4.057 -(db).1 G 4.057(yt)-4.057 G 1.557(he programmable)-4.057 F(completion f) -144 324 Q(acilities \(see)-.1 E F1(Pr)2.5 E(ogrammable Completion)-.18 E -F0(belo)2.5 E(w\).)-.25 E F1(COPR)108 336 Q(OC)-.3 E F0 .168(An array v) -144 348 R .168(ariable \(see)-.25 F F1(Arrays)2.668 E F0(belo)2.669 E +(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 4.058 +(db).1 G 4.058(yt)-4.058 G 1.558(he programmable)-4.058 F(completion f) +144 480 Q(acilities \(see)-.1 E F2(Pr)2.5 E(ogrammable Completion)-.18 E +F1(belo)2.5 E(w\).)-.25 E F2(COPR)108 492 Q(OC)-.3 E F1 .169(An array v) +144 504 R .169(ariable \(see)-.25 F F2(Arrays)2.669 E F1(belo)2.669 E .169 (w\) created to hold the \214le descriptors for output from and input) --.25 F(to an unnamed coprocess \(see)144 360 Q F1(Copr)2.5 E(ocesses) --.18 E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1(DIRST)108 372 Q -.55(AC) --.9 G(K).55 E F0 .79(An array v)144 384 R .79(ariable \(see)-.25 F F1 -(Arrays)3.29 E F0(belo)3.289 E .789 +-.25 F(to an unnamed coprocess \(see)144 516 Q F2(Copr)2.5 E(ocesses) +-.18 E F1(abo)2.5 E -.15(ve)-.15 G(\).).15 E F2(DIRST)108 528 Q -.55(AC) +-.9 G(K).55 E F1 .789(An array v)144 540 R .789(ariable \(see)-.25 F F2 +(Arrays)3.289 E F1(belo)3.289 E .789 (w\) containing the current contents of the directory stack.)-.25 F(Di-) -5.789 E .099(rectories appear in the stack in the order the)144 396 R -2.599(ya)-.15 G .099(re displayed by the)-2.599 F F1(dirs)2.599 E F0 -.2 -(bu)2.599 G 2.599(iltin. Assigning).2 F .099(to mem-)2.599 F .84 -(bers of this array v)144 408 R .84 +5.79 E .099(rectories appear in the stack in the order the)144 552 R +2.599(ya)-.15 G .099(re displayed by the)-2.599 F F2(dirs)2.599 E F1 -.2 +(bu)2.599 G 2.598(iltin. Assigning).2 F .098(to mem-)2.598 F .84 +(bers of this array v)144 564 R .84 (ariable may be used to modify directories already in the stack, b)-.25 -F .84(ut the)-.2 F F1(pushd)3.34 E F0(and)144 420 Q F1(popd)3.45 E F0 --.2(bu)3.45 G .951(iltins must be used to add and remo).2 F 1.251 -.15 -(ve d)-.15 H 3.451(irectories. Assignment).15 F .951(to this v)3.451 F -.951(ariable will)-.25 F .379(not change the current directory)144 432 R -5.379(.I)-.65 G(f)-5.379 E F3(DIRST)2.879 E -.495(AC)-.81 G(K).495 E F0 -.378(is unset, it loses its special properties, e)2.629 F -.15(ve)-.25 G -2.878(ni).15 G 2.878(fi)-2.878 G 2.878(ti)-2.878 G(s)-2.878 E -(subsequently reset.)144 444 Q F1(EPOCHREAL)108 456 Q(TIME)-.92 E F0 -.337(Each time this parameter is referenced, it e)144 468 R .338 +F .84(ut the)-.2 F F2(pushd)3.34 E F1(and)144 576 Q F2(popd)3.451 E F1 +-.2(bu)3.451 G .951(iltins must be used to add and remo).2 F 1.251 -.15 +(ve d)-.15 H 3.45(irectories. Assignment).15 F .95(to this v)3.45 F .95 +(ariable will)-.25 F .378(not change the current directory)144 588 R +5.378(.I)-.65 G(f)-5.378 E F3(DIRST)2.878 E -.495(AC)-.81 G(K).495 E F1 +.379(is unset, it loses its special properties, e)2.628 F -.15(ve)-.25 G +2.879(ni).15 G 2.879(fi)-2.879 G 2.879(ti)-2.879 G(s)-2.879 E +(subsequently reset.)144 600 Q F2(EPOCHREAL)108 612 Q(TIME)-.92 E F1 +.338(Each time this parameter is referenced, it e)144 624 R .337 (xpands to the number of seconds since the Unix Epoch)-.15 F(\(see)144 -480 Q F2(time)2.917 E F0 .417(\(3\)\) as a \215oating point v)B .416 -(alue with micro-second granularity)-.25 F 5.416(.A)-.65 G .416 -(ssignments to)-5.416 F F3(EPOCHRE-)2.916 E(AL)144 492 Q(TIME)-.828 E F0 -1.09(are ignored.)3.34 F(If)6.09 E F3(EPOCHREAL)3.59 E(TIME)-.828 E F0 -1.09(is unset, it loses its special properties, e)3.34 F -.15(ve)-.25 G -3.591(ni).15 G 3.591(fi)-3.591 G 3.591(ti)-3.591 G(s)-3.591 E -(subsequently reset.)144 504 Q F1(EPOCHSECONDS)108 516 Q F0 .338 -(Each time this parameter is referenced, it e)144 528 R .337 +636 Q F0(time)3.02 E F1 .39(\(3\)\) as a \215oating point v).18 F .391 +(alue with micro-second granularity)-.25 F 5.391(.A)-.65 G .391 +(ssignments to)-5.391 F F3(EPOCHRE-)2.891 E(AL)144 648 Q(TIME)-.828 E F1 +1.091(are ignored.)3.341 F(If)6.091 E F3(EPOCHREAL)3.59 E(TIME)-.828 E +F1 1.09(is unset, it loses its special properties, e)3.34 F -.15(ve)-.25 +G 3.59(ni).15 G 3.59(fi)-3.59 G 3.59(ti)-3.59 G(s)-3.59 E +(subsequently reset.)144 660 Q F2(EPOCHSECONDS)108 672 Q F1 .337 +(Each time this parameter is referenced, it e)144 684 R .338 (xpands to the number of seconds since the Unix Epoch)-.15 F(\(see)144 -540 Q F2(time)4.041 E F0 4.041(\(3\)\). Assignments)B(to)4.041 E F3 -(EPOCHSECONDS)4.041 E F0 1.542(are ignored.)3.792 F(If)6.542 E F3 -(EPOCHSECONDS)4.042 E F0 1.542(is unset, it)3.792 F -(loses its special properties, e)144 552 Q -.15(ve)-.25 G 2.5(ni).15 G -2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1 -(EUID)108 564 Q F0 1.104(Expands to the ef)144 564 R(fecti)-.25 E 1.403 --.15(ve u)-.25 H 1.103(ser ID of the current user).15 F 3.603(,i)-.4 G -1.103(nitialized at shell startup.)-3.603 F 1.103(This v)6.103 F 1.103 -(ariable is)-.25 F(readonly)144 576 Q(.)-.65 E F1(FUNCN)108 588 Q(AME) --.2 E F0 .478(An array v)144 600 R .479 -(ariable containing the names of all shell functions currently in the e) --.25 F -.15(xe)-.15 G .479(cution call stack.).15 F .277 -(The element with inde)144 612 R 2.777(x0i)-.15 G 2.777(st)-2.777 G .276 -(he name of an)-2.777 F 2.776(yc)-.15 G(urrently-e)-2.776 E -.15(xe)-.15 -G .276(cuting shell function.).15 F .276(The bottom-most)5.276 F .384 -(element \(the one with the highest inde)144 624 R .384(x\) is)-.15 F/F4 -10/Courier@0 SF("main")2.884 E F0 5.384(.T)C .384(his v)-5.384 F .385 -(ariable e)-.25 F .385(xists only when a shell func-)-.15 F .076 -(tion is e)144 636 R -.15(xe)-.15 G 2.576(cuting. Assignments).15 F(to) -2.576 E F3(FUNCN)2.576 E(AME)-.18 E F0(ha)2.326 E .376 -.15(ve n)-.2 H -2.576(oe).15 G -.25(ff)-2.576 G 2.576(ect. If).25 F F3(FUNCN)2.575 E -(AME)-.18 E F0 .075(is unset, it loses its)2.325 F -(special properties, e)144 648 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 -G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E .11(This v)144 -666 R .111(ariable can be used with)-.25 F F1 -.3(BA)2.611 G(SH_LINENO) -.3 E F0(and)2.611 E F1 -.3(BA)2.611 G(SH_SOURCE).3 E F0 5.111(.E)C .111 -(ach element of)-5.111 F F1(FUNC-)2.611 E -.2(NA)144 678 S(ME).2 E F0 -1.404(has corresponding elements in)3.904 F F1 -.3(BA)3.904 G(SH_LINENO) -.3 E F0(and)3.904 E F1 -.3(BA)3.904 G(SH_SOURCE).3 E F0 1.404 -(to describe the)3.904 F .012(call stack.)144 690 R -.15(Fo)5.012 G -2.512(ri).15 G(nstance,)-2.512 E F1(${FUNCN)2.512 E(AME[)-.2 E F2($i)A -F1(]})A F0 -.1(wa)2.512 G 2.512(sc).1 G .012(alled from the \214le) --2.512 F F1(${B)2.512 E(ASH_SOURCE[)-.3 E F2($i+1)A F1(]})A F0 1.184 -(at line number)144 702 R F1(${B)3.684 E(ASH_LINENO[)-.3 E F2($i)A F1 -(]})A F0 6.184(.T)C(he)-6.184 E F1(caller)3.683 E F0 -.2(bu)3.683 G -1.183(iltin displays the current call stack using).2 F -(this information.)144 714 Q(GNU Bash 5.2)72 768 Q(2022 September 19) -135.955 E(13)185.115 E 0 Cg EP +696 Q F0(time)4.144 E F1 4.014(\(3\)\). Assignments).18 F(to)4.014 E F3 +(EPOCHSECONDS)4.014 E F1 1.513(are ignored.)3.764 F(If)6.513 E F3 +(EPOCHSECONDS)4.013 E F1 1.513(is unset, it)3.763 F +(loses its special properties, e)144 708 Q -.15(ve)-.25 G 2.5(ni).15 G +2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(13)193.45 E 0 Cg EP %%Page: 14 14 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(GR)108 84 Q(OUPS)-.3 E F0 1.228(An array v)144 96 R 1.228(ariable co\ -ntaining the list of groups of which the current user is a member)-.25 F -6.229(.A)-.55 G(ssign-)-6.229 E .572(ments to)144 108 R/F2 9 -/Times-Bold@0 SF(GR)3.072 E(OUPS)-.27 E F0(ha)2.822 E .872 -.15(ve n)-.2 -H 3.072(oe).15 G -.25(ff)-3.072 G 3.072(ect. If).25 F F2(GR)3.072 E -(OUPS)-.27 E F0 .572(is unset, it loses its special properties, e)2.822 -F -.15(ve)-.25 G 3.072(ni).15 G 3.071(fi)-3.072 G 3.071(ti)-3.071 G(s) --3.071 E(subsequently reset.)144 120 Q F1(HISTCMD)108 132 Q F0 2.81 -(The history number)144 144 R 5.31(,o)-.4 G 5.31(ri)-5.31 G(nde)-5.31 E -5.311(xi)-.15 G 5.311(nt)-5.311 G 2.811 -(he history list, of the current command.)-5.311 F 2.811(Assignments to) -7.811 F F2(HISTCMD)144 156 Q F0 1.135(are ignored.)3.385 F(If)6.135 E F2 -(HISTCMD)3.635 E F0 1.135(is unset, it loses its special properties, e) -3.385 F -.15(ve)-.25 G 3.634(ni).15 G 3.634(fi)-3.634 G 3.634(ti)-3.634 -G 3.634(ss)-3.634 G(ubse-)-3.634 E(quently reset.)144 168 Q F1(HOSTN)108 -180 Q(AME)-.2 E F0(Automatically set to the name of the current host.) -144 192 Q F1(HOSTTYPE)108 204 Q F0 .222(Automatically set to a string t\ -hat uniquely describes the type of machine on which)144 216 R F1(bash) -2.723 E F0 .223(is e)2.723 F -.15(xe)-.15 G(cut-).15 E 2.5(ing. The)144 -228 R(def)2.5 E(ault is system-dependent.)-.1 E F1(LINENO)108 240 Q F0 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(EUID)108 84 Q F1 1.103 +(Expands to the ef)144 84 R(fecti)-.25 E 1.403 -.15(ve u)-.25 H 1.103 +(ser ID of the current user).15 F 3.603(,i)-.4 G 1.103 +(nitialized at shell startup.)-3.603 F 1.104(This v)6.103 F 1.104 +(ariable is)-.25 F(readonly)144 96 Q(.)-.65 E F2(FUNCN)108 108 Q(AME)-.2 +E F1 .479(An array v)144 120 R .479 +(ariable containing the names of all shell functions currently in the e) +-.25 F -.15(xe)-.15 G .478(cution call stack.).15 F .276 +(The element with inde)144 132 R 2.776(x0i)-.15 G 2.776(st)-2.776 G .276 +(he name of an)-2.776 F 2.777(yc)-.15 G(urrently-e)-2.777 E -.15(xe)-.15 +G .277(cuting shell function.).15 F .277(The bottom-most)5.277 F .065 +(element \(the one with the highest inde)144 144 R .065 +(x\) is \231main\232.)-.15 F .065(This v)5.065 F .065(ariable e)-.25 F +.065(xists only when a shell function)-.15 F .002(is e)144 156 R -.15 +(xe)-.15 G 2.502(cuting. Assignments).15 F(to)2.502 E/F3 9/Times-Bold@0 +SF(FUNCN)2.502 E(AME)-.18 E F1(ha)2.252 E .302 -.15(ve n)-.2 H 2.502(oe) +.15 G -.25(ff)-2.502 G 2.502(ect. If).25 F F3(FUNCN)2.502 E(AME)-.18 E +F1 .003(is unset, it loses its spe-)2.252 F(cial properties, e)144 168 Q +-.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G +(ubsequently reset.)-2.5 E .111(This v)144 184.8 R .111 +(ariable can be used with)-.25 F F2 -.3(BA)2.611 G(SH_LINENO).3 E F1 +(and)2.611 E F2 -.3(BA)2.611 G(SH_SOURCE).3 E F1 5.111(.E)C .111 +(ach element of)-5.111 F F2(FUNC-)2.61 E -.2(NA)144 196.8 S(ME).2 E F1 +1.404(has corresponding elements in)3.904 F F2 -.3(BA)3.904 G(SH_LINENO) +.3 E F1(and)3.904 E F2 -.3(BA)3.904 G(SH_SOURCE).3 E F1 1.404 +(to describe the)3.904 F .012(call stack.)144 208.8 R -.15(Fo)5.012 G +2.512(ri).15 G(nstance,)-2.512 E F2(${FUNCN)2.512 E(AME[)-.2 E F0($i)A +F2(]})A F1 -.1(wa)2.512 G 2.512(sc).1 G .012(alled from the \214le) +-2.512 F F2(${B)2.512 E(ASH_SOURCE[)-.3 E F0($i+1)A F2(]})A F1 1.183 +(at line number)144 220.8 R F2(${B)3.683 E(ASH_LINENO[)-.3 E F0($i)A F2 +(]})A F1 6.183(.T)C(he)-6.183 E F2(caller)3.683 E F1 -.2(bu)3.683 G +1.184(iltin displays the current call stack using).2 F +(this information.)144 232.8 Q F2(GR)108 244.8 Q(OUPS)-.3 E F1 1.229 +(An array v)144 256.8 R 1.228(ariable containing the list of groups of \ +which the current user is a member)-.25 F 6.228(.A)-.55 G(ssign-)-6.228 +E .571(ments to)144 268.8 R F3(GR)3.071 E(OUPS)-.27 E F1(ha)2.822 E .872 +-.15(ve n)-.2 H 3.072(oe).15 G -.25(ff)-3.072 G 3.072(ect. If).25 F F3 +(GR)3.072 E(OUPS)-.27 E F1 .572 +(is unset, it loses its special properties, e)2.822 F -.15(ve)-.25 G +3.072(ni).15 G 3.072(fi)-3.072 G 3.072(ti)-3.072 G(s)-3.072 E +(subsequently reset.)144 280.8 Q F2(HISTCMD)108 292.8 Q F1 2.811 +(The history number)144 304.8 R 5.311(,o)-.4 G 5.311(ri)-5.311 G(nde) +-5.311 E 5.311(xi)-.15 G 5.311(nt)-5.311 G 2.811 +(he history list, of the current command.)-5.311 F 2.81(Assignments to) +7.81 F F3(HISTCMD)144 316.8 Q F1 1.134(are ignored.)3.384 F(If)6.134 E +F3(HISTCMD)3.634 E F1 1.135 +(is unset, it loses its special properties, e)3.385 F -.15(ve)-.25 G +3.635(ni).15 G 3.635(fi)-3.635 G 3.635(ti)-3.635 G 3.635(ss)-3.635 G +(ubse-)-3.635 E(quently reset.)144 328.8 Q F2(HOSTN)108 340.8 Q(AME)-.2 +E F1(Automatically set to the name of the current host.)144 352.8 Q F2 +(HOSTTYPE)108 364.8 Q F1 .223(Automatically set to a string that unique\ +ly describes the type of machine on which)144 376.8 R F2(bash)2.722 E F1 +.222(is e)2.722 F -.15(xe)-.15 G(cut-).15 E 2.5(ing. The)144 388.8 R +(def)2.5 E(ault is system-dependent.)-.1 E F2(LINENO)108 400.8 Q F1 1.408(Each time this parameter is referenced, the shell substitutes a d\ -ecimal number representing the)144 252 R .078(current sequential line n\ -umber \(starting with 1\) within a script or function.)144 264 R .079 -(When not in a script or)5.078 F .307(function, the v)144 276 R .307 -(alue substituted is not guaranteed to be meaningful.)-.25 F(If)5.306 E -F2(LINENO)2.806 E F0 .306(is unset, it loses its)2.556 F -(special properties, e)144 288 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 -G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1(MA)108 300 Q -(CHTYPE)-.55 E F0 .898(Automatically set to a string that fully describ\ -es the system type on which)144 312 R F1(bash)3.398 E F0 .899(is e)3.398 -F -.15(xe)-.15 G .899(cuting, in).15 F(the standard GNU)144 324 Q/F3 10 -/Times-Italic@0 SF(cpu-company-system)2.5 E F0 2.5(format. The)2.5 F -(def)2.5 E(ault is system-dependent.)-.1 E F1(MAPFILE)108 336 Q F0 .294 -(An array v)144 348 R .294(ariable \(see)-.25 F F1(Arrays)2.794 E F0 -(belo)2.794 E .294(w\) created to hold the te)-.25 F .293 -(xt read by the)-.15 F F1(map\214le)2.793 E F0 -.2(bu)2.793 G .293 -(iltin when no).2 F -.25(va)144 360 S(riable name is supplied.).25 E F1 -(OLDPWD)108 372 Q F0(The pre)144 384 Q(vious w)-.25 E -(orking directory as set by the)-.1 E F1(cd)2.5 E F0(command.)2.5 E F1 -(OPT)108 396 Q(ARG)-.9 E F0 1.626(The v)144 408 R 1.627 +ecimal number representing the)144 412.8 R .078(current sequential line\ + number \(starting with 1\) within a script or function.)144 424.8 R +.078(When not in a script or)5.078 F .306(function, the v)144 436.8 R +.306(alue substituted is not guaranteed to be meaningful.)-.25 F(If) +5.307 E F3(LINENO)2.807 E F1 .307(is unset, it loses its)2.557 F +(special properties, e)144 448.8 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi) +-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F2(MA)108 +460.8 Q(CHTYPE)-.55 E F1 .898(Automatically set to a string that fully \ +describes the system type on which)144 472.8 R F2(bash)3.398 E F1 .898 +(is e)3.398 F -.15(xe)-.15 G .898(cuting, in).15 F(the standard GNU)144 +484.8 Q F0(cpu-company-system)2.5 E F1 2.5(format. The)2.5 F(def)2.5 E +(ault is system-dependent.)-.1 E F2(MAPFILE)108 496.8 Q F1 .293 +(An array v)144 508.8 R .293(ariable \(see)-.25 F F2(Arrays)2.793 E F1 +(belo)2.793 E .293(w\) created to hold the te)-.25 F .294 +(xt read by the)-.15 F F2(map\214le)2.794 E F1 -.2(bu)2.794 G .294 +(iltin when no).2 F -.25(va)144 520.8 S(riable name is supplied.).25 E +F2(OLDPWD)108 532.8 Q F1(The pre)144 544.8 Q(vious w)-.25 E +(orking directory as set by the)-.1 E F2(cd)2.5 E F1(command.)2.5 E F2 +(OPT)108 556.8 Q(ARG)-.9 E F1 1.627(The v)144 568.8 R 1.627 (alue of the last option ar)-.25 F 1.627(gument processed by the)-.18 F -F1(getopts)4.127 E F0 -.2(bu)4.127 G 1.627(iltin command \(see).2 F F2 -(SHELL)4.127 E -.09(BU)144 420 S(IL).09 E(TIN COMMANDS)-.828 E F0(belo) -2.25 E(w\).)-.25 E F1(OPTIND)108 432 Q F0 1.652(The inde)144 444 R 4.152 -(xo)-.15 G 4.152(ft)-4.152 G 1.652(he ne)-4.152 F 1.652(xt ar)-.15 F -1.652(gument to be processed by the)-.18 F F1(getopts)4.151 E F0 -.2(bu) -4.151 G 1.651(iltin command \(see).2 F F2(SHELL)4.151 E -.09(BU)144 456 -S(IL).09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1(OSTYPE)108 -468 Q F0 .329(Automatically set to a string that describes the operatin\ -g system on which)144 480 R F1(bash)2.83 E F0 .33(is e)2.83 F -.15(xe) --.15 G 2.83(cuting. The).15 F(def)144 492 Q(ault is system-dependent.) --.1 E F1(PIPEST)108 504 Q -.95(AT)-.9 G(US).95 E F0 .61(An array v)144 -516 R .61(ariable \(see)-.25 F F1(Arrays)3.11 E F0(belo)3.11 E .61 -(w\) containing a list of e)-.25 F .61(xit status v)-.15 F .61 -(alues from the processes in)-.25 F(the most-recently-e)144 528 Q -.15 -(xe)-.15 G(cuted fore).15 E -(ground pipeline \(which may contain only a single command\).)-.15 E F1 -(PPID)108 540 Q F0(The process ID of the shell')144 540 Q 2.5(sp)-.55 G -2.5(arent. This)-2.5 F -.25(va)2.5 G(riable is readonly).25 E(.)-.65 E -F1(PWD)108 552 Q F0(The current w)144 552 Q -(orking directory as set by the)-.1 E F1(cd)2.5 E F0(command.)2.5 E F1 -(RANDOM)108 564 Q F0 .417(Each time this parameter is referenced, it e) -144 576 R .417(xpands to a random inte)-.15 F .417 -(ger between 0 and 32767.)-.15 F(As-)5.417 E .551(signing a v)144 588 R -.551(alue to)-.25 F F2(RANDOM)3.051 E F0 .551 -(initializes \(seeds\) the sequence of random numbers.)2.801 F(If)5.55 E -F2(RANDOM)3.05 E F0(is)2.8 E(unset, it loses its special properties, e) -144 600 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5 -(ss)-2.5 G(ubsequently reset.)-2.5 E F1(READLINE_ARGUMENT)108 612 Q F0 -(An)144 624 Q 4.694(yn)-.15 G 2.194(umeric ar)-4.694 F 2.194(gument gi) --.18 F -.15(ve)-.25 G 4.694(nt).15 G 4.694(oar)-4.694 G 2.194 -(eadline command that w)-4.694 F 2.194(as de\214ned using)-.1 F/F4 10 -/Courier@0 SF 2.195(bind -x)4.695 F F0(\(see)4.695 E F2(SHELL B)144 636 -Q(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\) when it w)-.25 E -(as in)-.1 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F1(READLINE_LINE)108 648 Q -F0 1.547(The contents of the)144 660 R F1 -.18(re)4.047 G(adline).18 E -F0 1.547(line b)4.047 F(uf)-.2 E(fer)-.25 E 4.047(,f)-.4 G 1.547 -(or use with)-4.047 F F4 1.547(bind -x)4.047 F F0(\(see)4.047 E F2 1.546 -(SHELL B)4.047 F(UIL)-.09 E 1.546(TIN COM-)-.828 F(MANDS)144 672 Q F0 -(belo)2.25 E(w\).)-.25 E F1(READLINE_MARK)108 684 Q F0 .106 -(The position of the mark \(sa)144 696 R -.15(ve)-.2 G 2.606(di).15 G -.106(nsertion point\) in the)-2.606 F F1 -.18(re)2.607 G(adline).18 E F0 -.107(line b)2.607 F(uf)-.2 E(fer)-.25 E 2.607(,f)-.4 G .107(or use with) --2.607 F F4 .107(bind -x)2.607 F F0(\(see)144 708 Q F2 1.017(SHELL B) -3.517 F(UIL)-.09 E 1.017(TIN COMMANDS)-.828 F F0(belo)3.267 E 3.516 -(w\). The)-.25 F 1.016(characters between the insertion point and the) -3.516 F(mark are often called the)144 720 Q F3 -.37(re)2.5 G(gion)-.03 E -F0(.)A(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(14)185.115 E 0 -Cg EP +F2(getopts)4.127 E F1 -.2(bu)4.127 G 1.626(iltin command \(see).2 F F3 +(SHELL)4.126 E -.09(BU)144 580.8 S(IL).09 E(TIN COMMANDS)-.828 E F1 +(belo)2.25 E(w\).)-.25 E F2(OPTIND)108 592.8 Q F1 1.651(The inde)144 +604.8 R 4.151(xo)-.15 G 4.151(ft)-4.151 G 1.651(he ne)-4.151 F 1.651 +(xt ar)-.15 F 1.652(gument to be processed by the)-.18 F F2(getopts) +4.152 E F1 -.2(bu)4.152 G 1.652(iltin command \(see).2 F F3(SHELL)4.152 +E -.09(BU)144 616.8 S(IL).09 E(TIN COMMANDS)-.828 E F1(belo)2.25 E(w\).) +-.25 E F2(OSTYPE)108 628.8 Q F1 .329(Automatically set to a string that\ + describes the operating system on which)144 640.8 R F2(bash)2.829 E F1 +.329(is e)2.829 F -.15(xe)-.15 G 2.829(cuting. The).15 F(def)144 652.8 Q +(ault is system-dependent.)-.1 E F2(PIPEST)108 664.8 Q -.95(AT)-.9 G(US) +.95 E F1 .61(An array v)144 676.8 R .61(ariable \(see)-.25 F F2(Arrays) +3.11 E F1(belo)3.11 E .61(w\) containing a list of e)-.25 F .61 +(xit status v)-.15 F .61(alues from the processes in)-.25 F +(the most-recently-e)144 688.8 Q -.15(xe)-.15 G(cuted fore).15 E +(ground pipeline \(which may contain only a single command\).)-.15 E F2 +(PPID)108 700.8 Q F1(The process ID of the shell')144 700.8 Q 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 5.3)72 768 Q(2024 March 29)144.29 E(14)193.45 E 0 Cg EP %%Page: 15 15 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(READLINE_POINT)108 84 Q F0 .313 -(The position of the insertion point in the)144 96 R F1 -.18(re)2.813 G -(adline).18 E F0 .313(line b)2.813 F(uf)-.2 E(fer)-.25 E 2.813(,f)-.4 G -.313(or use with)-2.813 F/F2 10/Courier@0 SF .314(bind -x)2.814 F F0 -(\(see)2.814 E/F3 9/Times-Bold@0 SF(SHELL)2.814 E -.09(BU)144 108 S(IL) -.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1(REPL)108 120 Q -(Y)-.92 E F0(Set to the line of input read by the)144 132 Q F1 -.18(re) -2.5 G(ad).18 E F0 -.2(bu)2.5 G(iltin command when no ar).2 E -(guments are supplied.)-.18 E F1(SECONDS)108 144 Q F0 .178 -(Each time this parameter is referenced, it e)144 156 R .177 -(xpands to the number of seconds since shell in)-.15 F -.2(vo)-.4 G -(cation.).2 E .712(If a v)144 168 R .712(alue is assigned to)-.25 F F3 -(SECONDS)3.212 E/F4 9/Times-Roman@0 SF(,)A F0 .712(the v)2.962 F .712 -(alue returned upon subsequent references is the number)-.25 F .628 -(of seconds since the assignment plus the v)144 180 R .627 -(alue assigned.)-.25 F .627(The number of seconds at shell in)5.627 F --.2(vo)-.4 G(ca-).2 E .111(tion and the current time are al)144 192 R +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(PWD)108 84 Q F1 +(The current w)144 84 Q(orking directory as set by the)-.1 E F2(cd)2.5 E +F1(command.)2.5 E F2(RANDOM)108 96 Q F1 .417 +(Each time this parameter is referenced, it e)144 108 R .417 +(xpands to a random inte)-.15 F .417(ger between 0 and 32767.)-.15 F +(As-)5.416 E .55(signing a v)144 120 R .55(alue to)-.25 F/F3 9 +/Times-Bold@0 SF(RANDOM)3.05 E F1 .551 +(initializes \(seeds\) the sequence of random numbers.)2.801 F(If)5.551 +E F3(RANDOM)3.051 E F1(is)2.801 E +(unset, it loses its special properties, e)144 132 Q -.15(ve)-.25 G 2.5 +(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) +-2.5 E F2(READLINE_ARGUMENT)108 144 Q F1(An)144 156 Q 2.527(yn)-.15 G +.027(umeric ar)-2.527 F .027(gument gi)-.18 F -.15(ve)-.25 G 2.527(nt) +.15 G 2.527(oar)-2.527 G .027(eadline command that w)-2.527 F .027 +(as de\214ned using \231bind \255x\232 \(see)-.1 F F3(SHELL)2.527 E -.09 +(BU)144 168 S(IL).09 E(TIN COMMANDS)-.828 E F1(belo)2.25 E +(w\) when it w)-.25 E(as in)-.1 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F2 +(READLINE_LINE)108 180 Q F1 1.693(The contents of the)144 192 R F2 -.18 +(re)4.193 G(adline).18 E F1 1.693(line b)4.193 F(uf)-.2 E(fer)-.25 E +4.193(,f)-.4 G 1.694(or use with \231bind \255x\232 \(see)-4.193 F F3 +1.694(SHELL B)4.194 F(UIL)-.09 E 1.694(TIN COM-)-.828 F(MANDS)144 204 Q +F1(belo)2.25 E(w\).)-.25 E F2(READLINE_MARK)108 216 Q F1 .236 +(The position of the mark \(sa)144 228 R -.15(ve)-.2 G 2.736(di).15 G +.236(nsertion point\) in the)-2.736 F F2 -.18(re)2.736 G(adline).18 E F1 +.236(line b)2.736 F(uf)-.2 E(fer)-.25 E 2.736(,f)-.4 G .236 +(or use with \231bind \255x\232)-2.736 F(\(see)144 240 Q F3 1.016 +(SHELL B)3.516 F(UIL)-.09 E 1.016(TIN COMMANDS)-.828 F F1(belo)3.266 E +3.516(w\). The)-.25 F 1.017 +(characters between the insertion point and the)3.516 F +(mark are often called the)144 252 Q F0 -.37(re)2.5 G(gion)-.03 E F1(.)A +F2(READLINE_POINT)108 264 Q F1 .443 +(The position of the insertion point in the)144 276 R F2 -.18(re)2.943 G +(adline).18 E F1 .443(line b)2.943 F(uf)-.2 E(fer)-.25 E 2.943(,f)-.4 G +.442(or use with \231bind \255x\232 \(see)-2.943 F F3(SHELL)2.942 E -.09 +(BU)144 288 S(IL).09 E(TIN COMMANDS)-.828 E F1(belo)2.25 E(w\).)-.25 E +F2(REPL)108 300 Q(Y)-.92 E F1(Set to the line of input read by the)144 +312 Q F2 -.18(re)2.5 G(ad).18 E F1 -.2(bu)2.5 G +(iltin command when no ar).2 E(guments are supplied.)-.18 E F2(SECONDS) +108 324 Q F1 .177(Each time this parameter is referenced, it e)144 336 R +.178(xpands to the number of seconds since shell in)-.15 F -.2(vo)-.4 G +(cation.).2 E .713(If a v)144 348 R .712(alue is assigned to)-.25 F F3 +(SECONDS)3.212 E/F4 9/Times-Roman@0 SF(,)A F1 .712(the v)2.962 F .712 +(alue returned upon subsequent references is the number)-.25 F .627 +(of seconds since the assignment plus the v)144 360 R .627 +(alue assigned.)-.25 F .628(The number of seconds at shell in)5.627 F +-.2(vo)-.4 G(ca-).2 E .112(tion and the current time are al)144 372 R -.1(wa)-.1 G .111(ys determined by querying the system clock.).1 F(If) -5.112 E F3(SECONDS)2.612 E F0 .112(is un-)2.362 F -(set, it loses its special properties, e)144 204 Q -.15(ve)-.25 G 2.5 +5.111 E F3(SECONDS)2.611 E F1 .111(is un-)2.361 F +(set, it loses its special properties, e)144 384 Q -.15(ve)-.25 G 2.5 (ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) --2.5 E F1(SHELLOPTS)108 216 Q F0 3.263(Ac)144 228 S .763 -(olon-separated list of enabled shell options.)-3.263 F .763(Each w) +-2.5 E F2(SHELLOPTS)108 396 Q F1 3.262(Ac)144 408 S .763 +(olon-separated list of enabled shell options.)-3.262 F .763(Each w) 5.763 F .763(ord in the list is a v)-.1 F .763(alid ar)-.25 F .763 -(gument for the)-.18 F F1<ad6f>144 240 Q F0 1.173(option to the)3.673 F -F1(set)3.673 E F0 -.2(bu)3.673 G 1.173(iltin command \(see).2 F F3 1.174 -(SHELL B)3.674 F(UIL)-.09 E 1.174(TIN COMMANDS)-.828 F F0(belo)3.424 E -3.674(w\). The)-.25 F(options)3.674 E .02(appearing in)144 252 R F3 -(SHELLOPTS)2.52 E F0 .019(are those reported as)2.27 F/F5 10 -/Times-Italic@0 SF(on)2.749 E F0(by)2.759 E F1 .019(set \255o)2.519 F F0 -5.019(.I)C 2.519(ft)-5.019 G .019(his v)-2.519 F .019 -(ariable is in the en)-.25 F(vironment)-.4 E(when)144 264 Q F1(bash) -3.141 E F0 .642(starts up, each shell option in the list will be enable\ -d before reading an)3.141 F 3.142(ys)-.15 G .642(tartup \214les.)-3.142 -F(This v)144 276 Q(ariable is read-only)-.25 E(.)-.65 E F1(SHL)108 288 Q -(VL)-.92 E F0(Incremented by one each time an instance of)144 300 Q F1 -(bash)2.5 E F0(is started.)2.5 E F1(SRANDOM)108 312 Q F0 .761(This v)144 -324 R .761(ariable e)-.25 F .761(xpands to a 32-bit pseudo-random numbe\ -r each time it is referenced. The random)-.15 F .564 -(number generator is not linear on systems that support)144 336 R F2 -(/dev/urandom)3.065 E F0(or)3.065 E F5(ar)3.065 E(c4r)-.37 E(andom)-.15 -E F0 3.065(,s)C 3.065(oe)-3.065 G(ach)-3.065 E .788 +(gument for the)-.18 F F2<ad6f>144 420 Q F1 1.174(option to the)3.674 F +F2(set)3.674 E F1 -.2(bu)3.674 G 1.174(iltin command \(see).2 F F3 1.173 +(SHELL B)3.673 F(UIL)-.09 E 1.173(TIN COMMANDS)-.828 F F1(belo)3.423 E +3.673(w\). The)-.25 F(options)3.673 E .019(appearing in)144 432 R F3 +(SHELLOPTS)2.519 E F1 .019(are those reported as)2.269 F F0(on)2.749 E +F1(by)2.759 E F2 .019(set \255o)2.519 F F1 5.019(.I)C 2.519(ft)-5.019 G +.019(his v)-2.519 F .02(ariable is in the en)-.25 F(vironment)-.4 E +(when)144 444 Q F2(bash)3.142 E F1 .642(starts up, each shell option in\ + the list will be enabled before reading an)3.142 F 3.141(ys)-.15 G .641 +(tartup \214les.)-3.141 F(This v)144 456 Q(ariable is read-only)-.25 E +(.)-.65 E F2(SHL)108 468 Q(VL)-.92 E F1 +(Incremented by one each time an instance of)144 480 Q F2(bash)2.5 E F1 +(is started.)2.5 E F2(SRANDOM)108 492 Q F1 .76(This v)144 504 R .76 +(ariable e)-.25 F .761(xpands to a 32-bit pseudo-random number each tim\ +e it is referenced. The random)-.15 F .65 +(number generator is not linear on systems that support)144 516 R F0 +(/de)4.816 E(v/ur)-.15 E(andom)-.15 E F1(or)4.816 E F0(ar)3.48 E(c4r) +-.37 E(andom)-.15 E F1 .649(\(3\), so each).32 F .788 (returned number has no relationship to the numbers preceding it.)144 -348 R .787(The random number generator)5.787 F .087 -(cannot be seeded, so assignments to this v)144 360 R .087(ariable ha) --.25 F .387 -.15(ve n)-.2 H 2.587(oe).15 G -.25(ff)-2.587 G 2.588 -(ect. If).25 F F3(SRANDOM)2.588 E F0 .088(is unset, it loses its)2.338 F -(special properties, e)144 372 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 -G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1(UID)108 384 Q -F0(Expands to the user ID of the current user)144 384 Q 2.5(,i)-.4 G +528 R .788(The random number generator)5.788 F .088 +(cannot be seeded, so assignments to this v)144 540 R .087(ariable ha) +-.25 F .387 -.15(ve n)-.2 H 2.587(oe).15 G -.25(ff)-2.587 G 2.587 +(ect. If).25 F F3(SRANDOM)2.587 E F1 .087(is unset, it loses its)2.337 F +(special properties, e)144 552 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 +G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F2(UID)108 564 Q +F1(Expands to the user ID of the current user)144 564 Q 2.5(,i)-.4 G (nitialized at shell startup.)-2.5 E(This v)5 E(ariable is readonly)-.25 -E(.)-.65 E .994(The follo)108 400.8 R .994(wing v)-.25 F .994 -(ariables are used by the shell.)-.25 F .994(In some cases,)5.994 F F1 -(bash)3.494 E F0 .994(assigns a def)3.494 F .994(ault v)-.1 F .993 -(alue to a v)-.25 F(ariable;)-.25 E(these cases are noted belo)108 412.8 -Q -.65(w.)-.25 G F1 -.3(BA)108 429.6 S(SH_COMP).3 E -.95(AT)-.74 G F0 -.502(The v)144 441.6 R .502(alue is used to set the shell')-.25 F 3.002 +E(.)-.65 E .993(The follo)108 580.8 R .993(wing v)-.25 F .994 +(ariables are used by the shell.)-.25 F .994(In some cases,)5.994 F F2 +(bash)3.494 E F1 .994(assigns a def)3.494 F .994(ault v)-.1 F .994 +(alue to a v)-.25 F(ariable;)-.25 E(these cases are noted belo)108 592.8 +Q -.65(w.)-.25 G F2 -.3(BA)108 609.6 S(SH_COMP).3 E -.95(AT)-.74 G F1 +.503(The v)144 621.6 R .502(alue is used to set the shell')-.25 F 3.002 (sc)-.55 G .502(ompatibility le)-3.002 F -.15(ve)-.25 G 3.002(l. See).15 -F F3 .503(SHELL COMP)3.002 F -.855(AT)-.666 G .503(IBILITY MODE).855 F -F0(be-)2.753 E(lo)144 453.6 Q 2.663(wf)-.25 G .163 -(or a description of the v)-2.663 F .162(arious compatibility le)-.25 F --.15(ve)-.25 G .162(ls and their ef).15 F 2.662(fects. The)-.25 F -.25 -(va)2.662 G .162(lue may be a dec-).25 F .33 -(imal number \(e.g., 4.2\) or an inte)144 465.6 R .33 +F F3 .502(SHELL COMP)3.002 F -.855(AT)-.666 G .502(IBILITY MODE).855 F +F1(be-)2.752 E(lo)144 633.6 Q 2.662(wf)-.25 G .162 +(or a description of the v)-2.662 F .162(arious compatibility le)-.25 F +-.15(ve)-.25 G .162(ls and their ef).15 F 2.663(fects. The)-.25 F -.25 +(va)2.663 G .163(lue may be a dec-).25 F .33 +(imal number \(e.g., 4.2\) or an inte)144 645.6 R .33 (ger \(e.g., 42\) corresponding to the desired compatibility le)-.15 F --.15(ve)-.25 G 2.83(l. If).15 F F1 -.3(BA)144 477.6 S(SH_COMP).3 E -.95 -(AT)-.74 G F0 .861 -(is unset or set to the empty string, the compatibility le)4.311 F -.15 -(ve)-.25 G 3.36(li).15 G 3.36(ss)-3.36 G .86(et to the def)-3.36 F(ault) --.1 E .39(for the current v)144 489.6 R 2.89(ersion. If)-.15 F F1 -.3 -(BA)2.89 G(SH_COMP).3 E -.95(AT)-.74 G F0 .39(is set to a v)3.84 F .39 -(alue that is not one of the v)-.25 F .39(alid compati-)-.25 F .278 -(bility le)144 501.6 R -.15(ve)-.25 G .278 +-.15(ve)-.25 G 2.83(l. If).15 F F2 -.3(BA)144 657.6 S(SH_COMP).3 E -.95 +(AT)-.74 G F1 .86 +(is unset or set to the empty string, the compatibility le)4.31 F -.15 +(ve)-.25 G 3.361(li).15 G 3.361(ss)-3.361 G .861(et to the def)-3.361 F +(ault)-.1 E .39(for the current v)144 669.6 R 2.89(ersion. If)-.15 F F2 +-.3(BA)2.89 G(SH_COMP).3 E -.95(AT)-.74 G F1 .39(is set to a v)3.84 F +.39(alue that is not one of the v)-.25 F .39(alid compati-)-.25 F .277 +(bility le)144 681.6 R -.15(ve)-.25 G .278 (ls, the shell prints an error message and sets the compatibility le).15 -F -.15(ve)-.25 G 2.777(lt).15 G 2.777(ot)-2.777 G .277(he def)-2.777 F -.277(ault for the)-.1 F 1.4(current v)144 513.6 R 3.9(ersion. The)-.15 F --.25(va)3.901 G 1.401(lid v).25 F 1.401 -(alues correspond to the compatibility le)-.25 F -.15(ve)-.25 G 1.401 -(ls described belo).15 F 3.901(wu)-.25 G(nder)-3.901 E F3 .154 -(SHELL COMP)144 525.6 R -.855(AT)-.666 G .154(IBILITY MODE).855 F F4(.)A -F0 -.15(Fo)4.654 G 2.654(re).15 G .154(xample, 4.2 and 42 are v)-2.804 F -.153(alid v)-.25 F .153(alues that correspond to the)-.25 F F1 .773 -(compat42 shopt)144 537.6 R F0 .774(option and set the compatibility le) -3.273 F -.15(ve)-.25 G 3.274(lt).15 G 3.274(o4)-3.274 G 3.274(2. The) --3.274 F .774(current v)3.274 F .774(ersion is also a v)-.15 F(alid)-.25 -E -.25(va)144 549.6 S(lue.).25 E F1 -.3(BA)108 561.6 S(SH_ENV).3 E F0 -.506(If this parameter is set when)144 573.6 R F1(bash)3.006 E F0 .506 -(is e)3.006 F -.15(xe)-.15 G .505(cuting a shell script, its v).15 F -.505(alue is interpreted as a \214lename)-.25 F .39 -(containing commands to initialize the shell, as in)144 585.6 R F5 -(~/.bashr)2.39 E(c)-.37 E F0 5.39(.T).31 G .39(he v)-5.39 F .391 -(alue of)-.25 F F3 -.27(BA)2.891 G(SH_ENV).27 E F0 .391(is subjected) -2.641 F .525(to parameter e)144 597.6 R .525 -(xpansion, command substitution, and arithmetic e)-.15 F .525 -(xpansion before being interpreted)-.15 F(as a \214lename.)144 609.6 Q -F3 -.666(PA)5 G(TH)-.189 E F0 -(is not used to search for the resultant \214lename.)2.25 E F1 -.3(BA) -108 621.6 S(SH_XTRA).3 E(CEFD)-.55 E F0 .48(If set to an inte)144 633.6 -R .48(ger corresponding to a v)-.15 F .481(alid \214le descriptor)-.25 F -(,)-.4 E F1(bash)2.981 E F0 .481(will write the trace output gener)2.981 -F(-)-.2 E 3.114(ated when)144 645.6 R F2 3.114(set -x)5.614 F F0 3.114 -(is enabled to that \214le descriptor)5.614 F 8.114(.T)-.55 G 3.114 -(he \214le descriptor is closed when)-8.114 F F3 -.27(BA)144 657.6 S -(SH_XTRA).27 E(CEFD)-.495 E F0 .138(is unset or assigned a ne)2.388 F -2.638(wv)-.25 G 2.638(alue. Unsetting)-2.888 F F3 -.27(BA)2.638 G -(SH_XTRA).27 E(CEFD)-.495 E F0 .138(or assigning it)2.388 F 2.531(the e\ -mpty string causes the trace output to be sent to the standard error)144 -669.6 R 7.53(.N)-.55 G 2.53(ote that setting)-7.53 F F3 -.27(BA)144 -681.6 S(SH_XTRA).27 E(CEFD)-.495 E F0 .74(to 2 \(the standard error \ -\214le descriptor\) and then unsetting it will result in the)2.99 F -(standard error being closed.)144 693.6 Q F1(CDP)108 705.6 Q -.95(AT) --.74 G(H).95 E F0 1.248(The search path for the)144 717.6 R F1(cd)3.748 -E F0 3.748(command. This)3.748 F 1.247 -(is a colon-separated list of directories in which the)3.748 F 3.795 -(shell looks for destination directories speci\214ed by the)144 729.6 R -F1(cd)6.295 E F0 6.296(command. A)6.296 F 3.796(sample v)6.296 F 3.796 -(alue is)-.25 F(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(15) -185.115 E 0 Cg EP +F -.15(ve)-.25 G 2.778(lt).15 G 2.778(ot)-2.778 G .278(he def)-2.778 F +.278(ault for the)-.1 F .628(current v)144 693.6 R 3.128(ersion. A)-.15 +F .627(subset of the v)3.127 F .627(alid v)-.25 F .627 +(alues correspond to the compatibility le)-.25 F -.15(ve)-.25 G .627 +(ls described be-).15 F(lo)144 705.6 Q 2.87(wu)-.25 G(nder)-2.87 E F3 +.37(SHELL COMP)2.87 F -.855(AT)-.666 G .371(IBILITY MODE).855 F F4(.)A +F1 -.15(Fo)4.871 G 2.871(re).15 G .371(xample, 4.2 and 42 are v)-3.021 F +.371(alid v)-.25 F .371(alues that corre-)-.25 F .55(spond to the)144 +717.6 R F2 .55(compat42 shopt)3.05 F F1 .549 +(option and set the compatibility le)3.05 F -.15(ve)-.25 G 3.049(lt).15 +G 3.049(o4)-3.049 G 3.049(2. The)-3.049 F .549(current v)3.049 F .549 +(ersion is)-.15 F(also a v)144 729.6 Q(alid v)-.25 E(alue.)-.25 E +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(15)193.45 E 0 Cg EP %%Page: 16 16 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Courier@0 SF -(".:~:/usr")144 84 Q F0(.)A/F2 10/Times-Bold@0 SF(CHILD_MAX)108 96 Q F0 -.997(Set the number of e)144 108 R .997(xited child status v)-.15 F .997 -(alues for the shell to remember)-.25 F 5.997(.B)-.55 G .997 -(ash will not allo)-5.997 F 3.497(wt)-.25 G(his)-3.497 E -.25(va)144 120 -S 1.077(lue to be decreased belo).25 F 3.577(waP)-.25 G 1.077 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF -.3(BA)108 84 S(SH_ENV).3 E +F1 .505(If this parameter is set when)144 96 R F2(bash)3.005 E F1 .505 +(is e)3.005 F -.15(xe)-.15 G .506(cuting a shell script, its v).15 F +.506(alue is interpreted as a \214lename)-.25 F .199 +(containing commands to initialize the shell, as in)144 108 R F0 +(\001/.bashr)2.799 E(c)-.37 E F1 5.199(.T).31 G .199(he v)-5.199 F .199 +(alue of)-.25 F/F3 9/Times-Bold@0 SF -.27(BA)2.699 G(SH_ENV).27 E F1 +.198(is subjected)2.448 F .525(to parameter e)144 120 R .525 +(xpansion, command substitution, and arithmetic e)-.15 F .525 +(xpansion before being interpreted)-.15 F(as a \214lename.)144 132 Q F3 +-.666(PA)5 G(TH)-.189 E F1 +(is not used to search for the resultant \214lename.)2.25 E F2 -.3(BA) +108 144 S(SH_XTRA).3 E(CEFD)-.55 E F1 .481(If set to an inte)144 156 R +.481(ger corresponding to a v)-.15 F .481(alid \214le descriptor)-.25 F +(,)-.4 E F2(bash)2.98 E F1 .48(will write the trace output gener)2.98 F +(-)-.2 E 3.305 +(ated when \231set \255x\232 is enabled to that \214le descriptor)144 +168 R 8.305(.T)-.55 G 3.306(he \214le descriptor is closed when)-8.305 F +F3 -.27(BA)144 180 S(SH_XTRA).27 E(CEFD)-.495 E F1 .138 +(is unset or assigned a ne)2.388 F 2.638(wv)-.25 G 2.638 +(alue. Unsetting)-2.888 F F3 -.27(BA)2.638 G(SH_XTRA).27 E(CEFD)-.495 E +F1 .138(or assigning it)2.388 F 2.531(the empty string causes the trace\ + output to be sent to the standard error)144 192 R 7.531(.N)-.55 G 2.531 +(ote that setting)-7.531 F F3 -.27(BA)144 204 S(SH_XTRA).27 E(CEFD)-.495 +E F1 .74(to 2 \(the standard error \214le descriptor\) and then unsetti\ +ng it will result in the)2.991 F(standard error being closed.)144 216 Q +F2(CDP)108 228 Q -.95(AT)-.74 G(H).95 E F1 1.247 +(The search path for the)144 240 R F2(cd)3.747 E F1 3.747(command. This) +3.747 F 1.248(is a colon-separated list of directories in which the) +3.747 F(shell looks for destination directories speci\214ed by the)144 +252 Q F2(cd)2.5 E F1 2.5(command. A)2.5 F(sample v)2.5 E +(alue is \231.:\001:/usr\232.)-.25 E F2(CHILD_MAX)108 264 Q F1 .932 +(Set the number of e)144 276 R .931(xited child status v)-.15 F .931 +(alues for the shell to remember)-.25 F(.)-.55 E F2(Bash)5.931 E F1 .931 +(will not allo)3.431 F 3.431(wt)-.25 G(his)-3.431 E -.25(va)144 288 S +1.077(lue to be decreased belo).25 F 3.577(waP)-.25 G 1.077 (OSIX-mandated minimum, and there is a maximum v)-3.577 F 1.078 -(alue \(cur)-.25 F(-)-.2 E(rently 8192\) that this may not e)144 132 Q +(alue \(cur)-.25 F(-)-.2 E(rently 8192\) that this may not e)144 300 Q 2.5(xceed. The)-.15 F(minimum v)2.5 E(alue is system-dependent.)-.25 E -F2(COLUMNS)108 144 Q F0 .829(Used by the)144 156 R F2(select)3.329 E F0 +F2(COLUMNS)108 312 Q F1 .829(Used by the)144 324 R F2(select)3.329 E F1 .828(compound command to determine the terminal width when printing sel\ -ection)3.329 F 3.466(lists. Automatically)144 168 R .966(set if the) -3.466 F F2(checkwinsize)3.466 E F0 .966 +ection)3.329 F 3.466(lists. Automatically)144 336 R .966(set if the) +3.466 F F2(checkwinsize)3.466 E F1 .966 (option is enabled or in an interacti)3.466 F 1.266 -.15(ve s)-.25 H -.966(hell upon re-).15 F(ceipt of a)144 180 Q/F3 9/Times-Bold@0 SF -(SIGWINCH)2.5 E/F4 9/Times-Roman@0 SF(.)A F2(COMPREPL)108 192 Q(Y)-.92 E -F0 .848(An array v)144 204 R .848(ariable from which)-.25 F F2(bash) -3.348 E F0 .848 +.966(hell upon re-).15 F(ceipt of a)144 348 Q F3(SIGWINCH)2.5 E/F4 9 +/Times-Roman@0 SF(.)A F2(COMPREPL)108 360 Q(Y)-.92 E F1 .848(An array v) +144 372 R .848(ariable from which)-.25 F F2(bash)3.348 E F1 .848 (reads the possible completions generated by a shell function)3.348 F -(in)144 216 Q -.2(vo)-.4 G -.1(ke).2 G 2.785(db).1 G 2.785(yt)-2.785 G +(in)144 384 Q -.2(vo)-.4 G -.1(ke).2 G 2.785(db).1 G 2.785(yt)-2.785 G .285(he programmable completion f)-2.785 F .285(acility \(see)-.1 F F2 -(Pr)2.785 E .285(ogrammable Completion)-.18 F F0(belo)2.785 E 2.785 +(Pr)2.785 E .285(ogrammable Completion)-.18 F F1(belo)2.785 E 2.785 (w\). Each)-.25 F(array element contains one possible completion.)144 -228 Q F2(EMA)108 240 Q(CS)-.55 E F0(If)144 252 Q F2(bash)2.536 E F0 .036 -(\214nds this v)2.536 F .036(ariable in the en)-.25 F .036 -(vironment when the shell starts with v)-.4 F(alue)-.25 E F1(t)2.535 E -F0 2.535(,i)C 2.535(ta)-2.535 G .035(ssumes that the)-2.535 F -(shell is running in an Emacs shell b)144 264 Q(uf)-.2 E -(fer and disables line editing.)-.25 E F2(ENV)108 276 Q F0 .67 -(Expanded and e)144 276 R -.15(xe)-.15 G .67(cuted similarly to).15 F F3 --.27(BA)3.17 G(SH_ENV).27 E F0(\(see)2.92 E F2(INV)3.17 E(OCA)-.45 E -(TION)-.95 E F0(abo)3.171 E -.15(ve)-.15 G 3.171(\)w).15 G .671 -(hen an interacti)-3.171 F -.15(ve)-.25 G(shell is in)144 288 Q -.2(vo) --.4 G -.1(ke).2 G 2.5(di).1 G(n)-2.5 E/F5 10/Times-Italic@0 SF -(posix mode)2.5 E F0(.)A F2(EXECIGNORE)108 300 Q F0 2.717(Ac)144 312 S -.217(olon-separated list of shell patterns \(see)-2.717 F F2 -.1(Pa) -2.717 G(tter).1 E 2.717(nM)-.15 G(atching)-2.717 E F0 2.717(\)d)C .216 +396 Q F2(EMA)108 408 Q(CS)-.55 E F1(If)144 420 Q F2(bash)3.071 E F1 .571 +(\214nds this v)3.071 F .571(ariable in the en)-.25 F .571 +(vironment when the shell starts with v)-.4 F .57 +(alue \231t\232, it assumes that)-.25 F +(the shell is running in an Emacs shell b)144 432 Q(uf)-.2 E +(fer and disables line editing.)-.25 E F2(ENV)108 444 Q F1 .67 +(Expanded and e)144 444 R -.15(xe)-.15 G .67(cuted similarly to).15 F F3 +-.27(BA)3.17 G(SH_ENV).27 E F1(\(see)2.92 E F2(INV)3.17 E(OCA)-.45 E +(TION)-.95 E F1(abo)3.171 E -.15(ve)-.15 G 3.171(\)w).15 G .671 +(hen an interacti)-3.171 F -.15(ve)-.25 G(shell is in)144 456 Q -.2(vo) +-.4 G -.1(ke).2 G 2.5(di).1 G(n)-2.5 E F0(posix mode)2.5 E F1(.)A F2 +(EXECIGNORE)108 468 Q F1 2.717(Ac)144 480 S .217 +(olon-separated list of shell patterns \(see)-2.717 F F2 -.1(Pa)2.717 G +(tter).1 E 2.717(nM)-.15 G(atching)-2.717 E F1 2.717(\)d)C .216 (e\214ning the list of \214lenames to be)-2.717 F .116 -(ignored by command search using)144 324 R F2 -.74(PA)2.616 G(TH)-.21 E -F0 5.116(.F)C .117 +(ignored by command search using)144 492 R F2 -.74(PA)2.616 G(TH)-.21 E +F1 5.116(.F)C .117 (iles whose full pathnames match one of these patterns)-5.116 F 1.433 -(are not considered e)144 336 R -.15(xe)-.15 G 1.432 +(are not considered e)144 504 R -.15(xe)-.15 G 1.432 (cutable \214les for the purposes of completion and command e).15 F -.15 -(xe)-.15 G 1.432(cution via).15 F F2 -.74(PA)144 348 S(TH)-.21 E F0 +(xe)-.15 G 1.432(cution via).15 F F2 -.74(PA)144 516 S(TH)-.21 E F1 2.908(lookup. This)2.908 F .408(does not af)2.908 F .408(fect the beha) --.25 F .408(vior of the)-.2 F F2([)2.908 E F0(,)A F2(test)2.908 E F0 -2.908(,a)C(nd)-2.908 E F2([[)2.908 E F0 2.909(commands. Full)2.908 F +-.25 F .408(vior of the)-.2 F F2([)2.908 E F1(,)A F2(test)2.908 E F1 +2.908(,a)C(nd)-2.908 E F2([[)2.908 E F1 2.909(commands. Full)2.908 F (pathnames)2.909 E .364(in the command hash table are not subject to)144 -360 R F2(EXECIGNORE)2.864 E F0 5.364(.U)C .364(se this v)-5.364 F .364 -(ariable to ignore shared)-.25 F 1.37(library \214les that ha)144 372 R +528 R F2(EXECIGNORE)2.864 E F1 5.364(.U)C .364(se this v)-5.364 F .364 +(ariable to ignore shared)-.25 F 1.37(library \214les that ha)144 540 R 1.67 -.15(ve t)-.2 H 1.37(he e).15 F -.15(xe)-.15 G 1.37 (cutable bit set, b).15 F 1.37(ut are not e)-.2 F -.15(xe)-.15 G 1.37 (cutable \214les.).15 F 1.37(The pattern matching)6.37 F -(honors the setting of the)144 384 Q F2(extglob)2.5 E F0(shell option.) -2.5 E F2(FCEDIT)108 396 Q F0(The def)144 408 Q(ault editor for the)-.1 E -F2(fc)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E F2(FIGNORE)108 420 Q F0 -2.599(Ac)144 432 S .098(olon-separated list of suf)-2.599 F<8c78>-.25 E +(honors the setting of the)144 552 Q F2(extglob)2.5 E F1(shell option.) +2.5 E F2(FCEDIT)108 564 Q F1(The def)144 576 Q(ault editor for the)-.1 E +F2(fc)2.5 E F1 -.2(bu)2.5 G(iltin command.).2 E F2(FIGNORE)108 588 Q F1 +2.599(Ac)144 600 S .098(olon-separated list of suf)-2.599 F<8c78>-.25 E .098(es to ignore when performing \214lename completion \(see)-.15 F F3 -(READLINE)2.598 E F0(belo)144 444 Q 2.704(w\). A)-.25 F .204 +(READLINE)2.598 E F1(belo)144 612 Q 2.704(w\). A)-.25 F .204 (\214lename whose suf)2.704 F .205(\214x matches one of the entries in) --.25 F F3(FIGNORE)2.705 E F0 .205(is e)2.455 F .205 -(xcluded from the list)-.15 F(of matched \214lenames.)144 456 Q 2.5(As)5 -G(ample v)-2.5 E(alue is)-.25 E F1(".o:~")2.5 E F0(.)A F2(FUNCNEST)108 -468 Q F0 .231(If set to a numeric v)144 480 R .231 +-.25 F F3(FIGNORE)2.705 E F1 .205(is e)2.455 F .205 +(xcluded from the list)-.15 F(of matched \214lenames.)144 624 Q 2.5(As)5 +G(ample v)-2.5 E(alue is \231.o:\001\232.)-.25 E F2(FUNCNEST)108 636 Q +F1 .231(If set to a numeric v)144 648 R .231 (alue greater than 0, de\214nes a maximum function nesting le)-.25 F -.15(ve)-.25 G 2.73(l. Function).15 F(in)2.73 E -.2(vo)-.4 G(-).2 E -(cations that e)144 492 Q(xceed this nesting le)-.15 E -.15(ve)-.25 G +(cations that e)144 660 Q(xceed this nesting le)-.15 E -.15(ve)-.25 G 2.5(lw).15 G(ill cause the current command to abort.)-2.5 E F2 -(GLOBIGNORE)108 504 Q F0 2.923(Ac)144 516 S .423(olon-separated list of\ +(GLOBIGNORE)108 672 Q F1 2.923(Ac)144 684 S .423(olon-separated list of\ patterns de\214ning the set of \214le names to be ignored by pathname \ -e)-2.923 F(xpan-)-.15 E 2.948(sion. If)144 528 R 2.948<618c>2.948 G .448 +e)-2.923 F(xpan-)-.15 E 2.948(sion. If)144 696 R 2.948<618c>2.948 G .448 (le name matched by a pathname e)-2.948 F .447 (xpansion pattern also matches one of the patterns in)-.15 F F3 -(GLOBIGNORE)144 540 Q F4(,)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 F2(HISTCONTR)108 552 Q(OL)-.3 E F0 -2.653(Ac)144 564 S .153(olon-separated list of v)-2.653 F .153 -(alues controlling ho)-.25 F 2.653(wc)-.25 G .153(ommands are sa)-2.653 -F -.15(ve)-.2 G 2.653(do).15 G 2.653(nt)-2.653 G .153(he history list.) --2.653 F .154(If the list)5.153 F .49(of v)144 576 R .49(alues includes) --.25 F F5(ignor)3 E(espace)-.37 E F0 2.99(,l).18 G .49(ines which be) --2.99 F .49(gin with a)-.15 F F2(space)2.99 E F0 .49 -(character are not sa)2.99 F -.15(ve)-.2 G 2.99(di).15 G 2.99(nt)-2.99 G -.49(he his-)-2.99 F .557(tory list.)144 588 R 3.057(Av)5.557 G .557 -(alue of)-3.307 F F5(ignor)3.067 E(edups)-.37 E F0 .557 -(causes lines matching the pre)3.327 F .558 -(vious history entry to not be sa)-.25 F -.15(ve)-.2 G(d.).15 E 2.926 -(Av)144 600 S .426(alue of)-3.176 F F5(ignor)2.936 E(eboth)-.37 E F0 -.426(is shorthand for)3.206 F F5(ignor)2.926 E(espace)-.37 E F0(and) -2.926 E F5(ignor)2.926 E(edups)-.37 E F0 5.426(.A)C -.25(va)-2.501 G -.425(lue of).25 F F5(er)3.115 E(asedups)-.15 E F0(causes)3.195 E .698 -(all pre)144 612 R .698 -(vious lines matching the current line to be remo)-.25 F -.15(ve)-.15 G -3.198(df).15 G .699(rom the history list before that line is)-3.198 F -(sa)144 624 Q -.15(ve)-.2 G 2.764(d. An).15 F 2.764(yv)-.15 G .264 -(alue not in the abo)-3.014 F .563 -.15(ve l)-.15 H .263 -(ist is ignored.).15 F(If)5.263 E F3(HISTCONTR)2.763 E(OL)-.27 E F0 .263 -(is unset, or does not include)2.513 F 2.941(av)144 636 S .441(alid v) --3.191 F .441(alue, all lines read by the shell parser are sa)-.25 F --.15(ve)-.2 G 2.942(do).15 G 2.942(nt)-2.942 G .442 -(he history list, subject to the v)-2.942 F .442(alue of)-.25 F F3 -(HISTIGNORE)144 648 Q F4(.)A F0 1.981(The second and subsequent lines o\ -f a multi-line compound command are not)6.482 F -(tested, and are added to the history re)144 660 Q -.05(ga)-.15 G -(rdless of the v).05 E(alue of)-.25 E F3(HISTCONTR)2.5 E(OL)-.27 E F4(.) -A F2(HISTFILE)108 672 Q F0 .181 -(The name of the \214le in which command history is sa)144 684 R -.15 -(ve)-.2 G 2.681(d\().15 G(see)-2.681 E F3(HIST)2.681 E(OR)-.162 E(Y) --.315 E F0(belo)2.431 E 2.682(w\). The)-.25 F(def)2.682 E .182(ault v) --.1 F(alue)-.25 E(is)144 696 Q F5(~/.bash_history)2.5 E F0 5(.I)C 2.5 -(fu)-5 G(nset, the command history is not sa)-2.5 E -.15(ve)-.2 G 2.5 -(dw).15 G(hen a shell e)-2.5 E(xits.)-.15 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(16)185.115 E 0 Cg EP +(GLOBIGNORE)144 708 Q F4(,)A F1(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 5.3)72 768 Q +(2024 March 29)144.29 E(16)193.45 E 0 Cg EP %%Page: 17 17 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(HISTFILESIZE)108 84 Q F0 1.623 -(The maximum number of lines contained in the history \214le.)144 96 R -1.622(When this v)6.623 F 1.622(ariable is assigned a)-.25 F -.25(va)144 -108 S .124(lue, the history \214le is truncated, if necessary).25 F -2.624(,t)-.65 G 2.624(oc)-2.624 G .125 -(ontain no more than that number of lines by re-)-2.624 F(mo)144 120 Q +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(GLOBSOR)108 84 Q(T)-.4 E F1 +.334(Control ho)144 96 R 2.834(wt)-.25 G .334(he results of pathname e) +-2.834 F .335(xpansion are sorted.)-.15 F .335(The v)5.335 F .335 +(alue of this v)-.25 F .335(ariable speci\214es the)-.25 F .36 +(sort criteria and sort order for the results of pathname e)144 108 R +2.859(xpansion. If)-.15 F .359(this v)2.859 F .359 +(ariable is unset or set to)-.25 F .311(the null string, pathname e)144 +120 R .311(xpansion uses the historical beha)-.15 F .311 +(vior of sorting by name.)-.2 F .312(If set, a v)5.312 F(alid)-.25 E +-.25(va)144 132 S .003(lue be).25 F .003(gins with an optional)-.15 F F0 +(+)2.503 E F1 2.503(,w)C .002(hich is ignored, or)-2.503 F F0<ad>2.502 E +F1 2.502(,w)C .002(hich re)-2.502 F -.15(ve)-.25 G .002 +(rses the sort order from ascend-).15 F 1.125(ing to descending, follo) +144 144 R 1.125(wed by a sort speci\214er)-.25 F 6.125(.T)-.55 G 1.125 +(he v)-6.125 F 1.126(alid sort speci\214ers are)-.25 F F0(name)3.986 E +F1(,).18 E F0(size)3.966 E F1(,).18 E F0(mtime)4.006 E F1(,).18 E F0 +(atime)144.33 156 Q F1(,).18 E F0(ctime)2.845 E F1 2.645(,a).18 G(nd) +-2.645 E F0(bloc)2.915 E(ks)-.2 E F1 2.645(,w).27 G .144(hich sort the \ +\214les on name, \214le size, modi\214cation time, access time, in-) +-2.645 F .075(ode change time, and number of blocks, respecti)144 168 R +-.15(ve)-.25 G(ly).15 E 5.076(.F)-.65 G .076(or e)-5.226 F .076 +(xample, a v)-.15 F .076(alue of)-.25 F F0(\255mtime)2.576 E F1 .076 +(sorts the re-)2.576 F .965 +(sults in descending order by modi\214cation time \(ne)144 180 R .964 +(west \214rst\).)-.25 F 3.464(As)5.964 G .964(ort speci\214er of)-3.464 +F F0(nosort)3.464 E F1(disables)3.464 E .497 +(sorting completely; the results are returned in the order the)144 192 R +2.997(ya)-.15 G .497(re read from the \214le system,.)-2.997 F .498 +(If the)5.497 F .52(sort speci\214er is missing, it def)144 204 R .52 +(aults to)-.1 F F0(name)3.02 E F1 3.02(,s)C 3.02(oav)-3.02 G .52 +(alue of)-3.27 F F0(+)3.02 E F1 .52(is equi)3.02 F -.25(va)-.25 G .52 +(lent to the null string, and a).25 F -.25(va)144 216 S .46(lue of).25 F +F0(-)2.96 E F1 .46(sorts by name in descending order)2.96 F 5.46(.A)-.55 +G .76 -.15(ny i)-5.46 H -1.95 -.4(nv a).15 H .46(lid v).4 F .46 +(alue restores the historical sorting be-)-.25 F(ha)144 228 Q(vior)-.2 E +(.)-.55 E F2(HISTCONTR)108 240 Q(OL)-.3 E F1 2.654(Ac)144 252 S .153 +(olon-separated list of v)-2.654 F .153(alues controlling ho)-.25 F +2.653(wc)-.25 G .153(ommands are sa)-2.653 F -.15(ve)-.2 G 2.653(do).15 +G 2.653(nt)-2.653 G .153(he history list.)-2.653 F .153(If the list) +5.153 F .49(of v)144 264 R .49(alues includes)-.25 F F0(ignor)3 E +(espace)-.37 E F1 2.99(,l).18 G .49(ines which be)-2.99 F .49 +(gin with a)-.15 F F2(space)2.99 E F1 .49(character are not sa)2.99 F +-.15(ve)-.2 G 2.99(di).15 G 2.99(nt)-2.99 G .49(he his-)-2.99 F .558 +(tory list.)144 276 R 3.058(Av)5.558 G .558(alue of)-3.308 F F0(ignor) +3.068 E(edups)-.37 E F1 .558(causes lines matching the pre)3.328 F .557 +(vious history entry to not be sa)-.25 F -.15(ve)-.2 G(d.).15 E 2.925 +(Av)144 288 S .425(alue of)-3.175 F F0(ignor)2.935 E(eboth)-.37 E F1 +.426(is shorthand for)3.205 F F0(ignor)2.926 E(espace)-.37 E F1(and) +2.926 E F0(ignor)2.926 E(edups)-.37 E F1 5.426(.A)C -.25(va)-2.5 G .426 +(lue of).25 F F0(er)3.116 E(asedups)-.15 E F1(causes)3.196 E .699 +(all pre)144 300 R .698 +(vious lines matching the current line to be remo)-.25 F -.15(ve)-.15 G +3.198(df).15 G .698(rom the history list before that line is)-3.198 F +(sa)144 312 Q -.15(ve)-.2 G 2.763(d. An).15 F 2.763(yv)-.15 G .263 +(alue not in the abo)-3.013 F .563 -.15(ve l)-.15 H .263 +(ist is ignored.).15 F(If)5.263 E/F3 9/Times-Bold@0 SF(HISTCONTR)2.763 E +(OL)-.27 E F1 .264(is unset, or does not include)2.513 F 2.942(av)144 +324 S .442(alid v)-3.192 F .442 +(alue, all lines read by the shell parser are sa)-.25 F -.15(ve)-.2 G +2.941(do).15 G 2.941(nt)-2.941 G .441(he history list, subject to the v) +-2.941 F .441(alue of)-.25 F F3(HISTIGNORE)144 336 Q/F4 9/Times-Roman@0 +SF(.)A F1 1.981(The second and subsequent lines of a multi-line compoun\ +d command are not)6.481 F(tested, and are added to the history re)144 +348 Q -.05(ga)-.15 G(rdless of the v).05 E(alue of)-.25 E F3(HISTCONTR) +2.5 E(OL)-.27 E F4(.)A F2(HISTFILE)108 360 Q F1 .818 +(The name of the \214le in which command history is sa)144 372 R -.15 +(ve)-.2 G 3.317(d\().15 G(see)-3.317 E F3(HIST)3.317 E(OR)-.162 E(Y) +-.315 E F1(belo)3.067 E(w\).)-.25 E F2(Bash)5.817 E F1 .817(assigns a) +3.317 F(def)144 384 Q .29(ault v)-.1 F .29(alue of)-.25 F F0 +(\001/.bash_history)2.79 E F1 5.29(.I)C(f)-5.29 E F2(HISTFILE)2.79 E F1 +.29(is unset or null, the command history is not sa)2.79 F -.15(ve)-.2 G +(d).15 E(when a shell e)144 396 Q(xits.)-.15 E F2(HISTFILESIZE)108 408 Q +F1 1.623(The maximum number of lines contained in the history \214le.) +144 420 R 1.622(When this v)6.623 F 1.622(ariable is assigned a)-.25 F +-.25(va)144 432 S .124 +(lue, the history \214le is truncated, if necessary).25 F 2.624(,t)-.65 +G 2.624(oc)-2.624 G .125 +(ontain no more than that number of lines by re-)-2.624 F(mo)144 444 Q .066(ving the oldest entries.)-.15 F .065(The history \214le is also tr\ uncated to this size after writing it when a shell)5.066 F -.15(ex)144 -132 S 2.927(its. If).15 F .427(the v)2.927 F .428 +456 S 2.927(its. If).15 F .427(the v)2.927 F .428 (alue is 0, the history \214le is truncated to zero size.)-.25 F .428 -(Non-numeric v)5.428 F .428(alues and numeric)-.25 F -.25(va)144 144 S +(Non-numeric v)5.428 F .428(alues and numeric)-.25 F -.25(va)144 468 S .152(lues less than zero inhibit truncation.).25 F .152 (The shell sets the def)5.152 F .152(ault v)-.1 F .152(alue to the v) --.25 F .151(alue of)-.25 F F1(HISTSIZE)2.651 E F0(after reading an)144 -156 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1(HISTIGNORE)108 168 Q F0 -2.657(Ac)144 180 S .157(olon-separated list of patterns used to decide \ +-.25 F .151(alue of)-.25 F F2(HISTSIZE)2.651 E F1(after reading an)144 +480 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F2(HISTIGNORE)108 492 Q F1 +2.657(Ac)144 504 S .157(olon-separated list of patterns used to decide \ which command lines should be sa)-2.657 F -.15(ve)-.2 G 2.658(do).15 G -2.658(nt)-2.658 G .158(he his-)-2.658 F .708(tory list.)144 192 R .708 -(Each pattern is anchored at the be)5.708 F .707 -(ginning of the line and must match the complete line)-.15 F .625 -(\(no implicit `)144 204 R F1(*)A F0 3.125('i)C 3.125(sa)-3.125 G 3.125 -(ppended\). Each)-3.125 F .626(pattern is tested ag)3.125 F .626 -(ainst the line after the checks speci\214ed by)-.05 F/F2 9/Times-Bold@0 -SF(HISTCONTR)144 216 Q(OL)-.27 E F0 1.793(are applied.)4.043 F 1.793 -(In addition to the normal shell pattern matching characters, `)6.793 F -F1(&)A F0(')A 1.44(matches the pre)144 228 R 1.44(vious history line.) --.25 F(`)6.44 E F1(&)A F0 3.94('m)C 1.44 -(ay be escaped using a backslash; the backslash is re-)-3.94 F(mo)144 -240 Q -.15(ve)-.15 G 3.95(db).15 G 1.45(efore attempting a match.)-3.95 -F 1.45(The second and subsequent lines of a multi-line compound)6.45 F -1.269(command are not tested, and are added to the history re)144 252 R --.05(ga)-.15 G 1.269(rdless of the v).05 F 1.269(alue of)-.25 F F2 -(HISTIGNORE)3.77 E/F3 9/Times-Roman@0 SF(.)A F0 -(The pattern matching honors the setting of the)144 264 Q F1(extglob)2.5 -E F0(shell option.)2.5 E F1(HISTSIZE)108 276 Q F0 1.387 -(The number of commands to remember in the command history \(see)144 288 -R F2(HIST)3.887 E(OR)-.162 E(Y)-.315 E F0(belo)3.637 E 3.887(w\). If) --.25 F(the)3.887 E -.25(va)144 300 S .412(lue is 0, commands are not sa) -.25 F -.15(ve)-.2 G 2.913(di).15 G 2.913(nt)-2.913 G .413 -(he history list.)-2.913 F .413(Numeric v)5.413 F .413 -(alues less than zero result in e)-.25 F(v-)-.25 E .344 -(ery command being sa)144 312 R -.15(ve)-.2 G 2.844(do).15 G 2.844(nt) --2.844 G .343(he history list \(there is no limit\).)-2.844 F .343 -(The shell sets the def)5.343 F .343(ault v)-.1 F .343(alue to)-.25 F -(500 after reading an)144 324 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1 -(HISTTIMEFORMA)108 336 Q(T)-.95 E F0 .951(If this v)144 348 R .951 -(ariable is set and not null, its v)-.25 F .952 -(alue is used as a format string for)-.25 F/F4 10/Times-Italic@0 SF -(strftime)3.452 E F0 .952(\(3\) to print the)B .673 -(time stamp associated with each history entry displayed by the)144 360 -R F1(history)3.173 E F0 -.2(bu)3.172 G 3.172(iltin. If).2 F .672(this v) -3.172 F .672(ariable is)-.25 F .144 -(set, time stamps are written to the history \214le so the)144 372 R +2.658(nt)-2.658 G .158(he his-)-2.658 F .997(tory list.)144 516 R .997 +(If a command line matches one of the patterns in the v)5.997 F .996 +(alue of)-.25 F F3(HISTIGNORE)3.496 E F4(,)A F1 .996(it is not)3.246 F +(sa)144 528 Q -.15(ve)-.2 G 2.771(do).15 G 2.771(nt)-2.771 G .271 +(he history list.)-2.771 F .271(Each pattern is anchored at the be)5.271 +F .271(ginning of the line and must match the)-.15 F .26 +(complete line \()144 540 R F2(bash)A F1 .26(will not)2.76 F .259 +(implicitly append a \231)5.26 F F2(*)A F1 2.759(\232\). Each)B .259 +(pattern is tested ag)2.759 F .259(ainst the line after)-.05 F 2.252 +(the checks speci\214ed by)144 552 R F3(HISTCONTR)4.752 E(OL)-.27 E F1 +2.252(are applied.)4.502 F 2.252 +(In addition to the normal shell pattern)7.252 F .275 +(matching characters, \231)144 564 R F2(&)A F1 2.775<9a6d>C .275 +(atches the pre)-2.775 F .274(vious history line.)-.25 F 2.774(Ab)5.274 +G .274(ackslash will escape the \231)-2.774 F F2(&)A F1 .274(\232; the)B +.375(backslash is remo)144 576 R -.15(ve)-.15 G 2.875(db).15 G .375 +(efore attempting a match.)-2.875 F .375 +(The second and subsequent lines of a multi-line)5.375 F 2.472 +(compound command are not tested, and are added to the history re)144 +588 R -.05(ga)-.15 G 2.472(rdless of the v).05 F 2.472(alue of)-.25 F F3 +(HISTIGNORE)144 600 Q F4(.)A F1 +(The pattern matching honors the setting of the)4.5 E F2(extglob)2.5 E +F1(shell option.)2.5 E F2(HISTSIZE)108 612 Q F1 1.387 +(The number of commands to remember in the command history \(see)144 624 +R F3(HIST)3.887 E(OR)-.162 E(Y)-.315 E F1(belo)3.637 E 3.887(w\). If) +-.25 F(the)3.888 E -.25(va)144 636 S 1.321 +(lue is 0, commands are not sa).25 F -.15(ve)-.2 G 3.821(di).15 G 3.821 +(nt)-3.821 G 1.321(he history list.)-3.821 F 1.32(Numeric v)6.32 F 1.32 +(alues less than zero result in)-.25 F -2.15 -.25(ev e)144 648 T .436 +(ry command being sa).25 F -.15(ve)-.2 G 2.936(do).15 G 2.936(nt)-2.936 +G .436(he history list \(there is no limit\).)-2.936 F .437 +(The shell sets the def)5.437 F .437(ault v)-.1 F(alue)-.25 E +(to 500 after reading an)144 660 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E +F2(HISTTIMEFORMA)108 672 Q(T)-.95 E F1 .926(If this v)144 684 R .926 +(ariable is set and not null, its v)-.25 F .925 +(alue is used as a format string for)-.25 F F0(strftime)3.765 E F1 .925 +(\(3\) to print the).18 F .672 +(time stamp associated with each history entry displayed by the)144 696 +R F2(history)3.173 E F1 -.2(bu)3.173 G 3.173(iltin. If).2 F .673(this v) +3.173 F .673(ariable is)-.25 F .144 +(set, time stamps are written to the history \214le so the)144 708 R 2.644(ym)-.15 G .144(ay be preserv)-2.644 F .144 -(ed across shell sessions.)-.15 F(This)5.145 E(uses the history comment\ - character to distinguish timestamps from other history lines.)144 384 Q -F1(HOME)108 396 Q F0 1.27 -(The home directory of the current user; the def)144 408 R 1.27(ault ar) --.1 F 1.27(gument for the)-.18 F F1(cd)3.77 E F0 -.2(bu)3.77 G 1.27 -(iltin command.).2 F(The)6.27 E -.25(va)144 420 S(lue of this v).25 E -(ariable is also used when performing tilde e)-.25 E(xpansion.)-.15 E F1 -(HOSTFILE)108 432 Q F0 1.015 -(Contains the name of a \214le in the same format as)144 444 R F4 -(/etc/hosts)5.181 E F0 1.015(that should be read when the shell)5.181 F -.551(needs to complete a hostname.)144 456 R .551 +(ed across shell sessions.)-.15 F(This)5.144 E(uses the history comment\ + character to distinguish timestamps from other history lines.)144 720 Q +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(17)193.45 E 0 Cg EP +%%Page: 18 18 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(HOME)108 84 Q F1 1.27 +(The home directory of the current user; the def)144 96 R 1.27(ault ar) +-.1 F 1.27(gument for the)-.18 F F2(cd)3.77 E F1 -.2(bu)3.77 G 1.27 +(iltin command.).2 F(The)6.27 E -.25(va)144 108 S(lue of this v).25 E +(ariable is also used when performing tilde e)-.25 E(xpansion.)-.15 E F2 +(HOSTFILE)108 120 Q F1 1.015 +(Contains the name of a \214le in the same format as)144 132 R F0 +(/etc/hosts)5.181 E F1 1.015(that should be read when the shell)5.181 F +.55(needs to complete a hostname.)144 144 R .551 (The list of possible hostname completions may be changed while)5.551 F -1.058(the shell is running; the ne)144 468 R 1.059 -(xt time hostname completion is attempted after the v)-.15 F 1.059 -(alue is changed,)-.25 F F1(bash)144 480 Q F0 .138 -(adds the contents of the ne)2.639 F 2.638<778c>-.25 G .138(le to the e) --2.638 F .138(xisting list.)-.15 F(If)5.138 E F2(HOSTFILE)2.638 E F0 -.138(is set, b)2.388 F .138(ut has no v)-.2 F .138(alue, or)-.25 F .517 -(does not name a readable \214le,)144 492 R F1(bash)3.017 E F0 .517 -(attempts to read)3.017 F F4(/etc/hosts)4.684 E F0 .518 -(to obtain the list of possible host-)4.684 F(name completions.)144 504 -Q(When)5 E F2(HOSTFILE)2.5 E F0(is unset, the hostname list is cleared.) -2.25 E F1(IFS)108 516 Q F0(The)144 516 Q F4 .556(Internal F)3.636 F .556 -(ield Separ)-.45 F(ator)-.15 E F0 .556(that is used for w)3.786 F .556 -(ord splitting after e)-.1 F .555(xpansion and to split lines into)-.15 -F -.1(wo)144 528 S(rds with the).1 E F1 -.18(re)2.5 G(ad).18 E F0 -.2 -(bu)2.5 G(iltin command.).2 E(The def)5 E(ault v)-.1 E(alue is `)-.25 E -(`<space><tab><ne)-.74 E(wline>')-.25 E('.)-.74 E F1(IGNOREEOF)108 540 Q -F0 .503(Controls the action of an interacti)144 552 R .803 -.15(ve s) --.25 H .503(hell on receipt of an).15 F F2(EOF)3.003 E F0 .503 -(character as the sole input.)2.753 F .504(If set,)5.504 F .426(the v) -144 564 R .426(alue is the number of consecuti)-.25 F -.15(ve)-.25 G F2 -(EOF)3.076 E F0 .426 -(characters which must be typed as the \214rst characters)2.676 F .302 -(on an input line before)144 576 R F1(bash)2.802 E F0 -.15(ex)2.802 G +1.059(the shell is running; the ne)144 156 R 1.059 +(xt time hostname completion is attempted after the v)-.15 F 1.058 +(alue is changed,)-.25 F F2(bash)144 168 Q F1 .138 +(adds the contents of the ne)2.638 F 2.638<778c>-.25 G .138(le to the e) +-2.638 F .138(xisting list.)-.15 F(If)5.138 E/F3 9/Times-Bold@0 SF +(HOSTFILE)2.638 E F1 .138(is set, b)2.388 F .139(ut has no v)-.2 F .139 +(alue, or)-.25 F .518(does not name a readable \214le,)144 180 R F2 +(bash)3.018 E F1 .518(attempts to read)3.018 F F0(/etc/hosts)4.683 E F1 +.517(to obtain the list of possible host-)4.683 F(name completions.)144 +192 Q(When)5 E F3(HOSTFILE)2.5 E F1 +(is unset, the hostname list is cleared.)2.25 E F2(IFS)108 204 Q F1(The) +144 204 Q F0 .555(Internal F)3.635 F .555(ield Separ)-.45 F(ator)-.15 E +F1 .555(that is used for w)3.785 F .556(ord splitting after e)-.1 F .556 +(xpansion and to split lines into)-.15 F -.1(wo)144 216 S(rds with the) +.1 E F2 -.18(re)2.5 G(ad).18 E F1 -.2(bu)2.5 G(iltin command.).2 E +(The def)5 E(ault v)-.1 E(alue is \231<space><tab><ne)-.25 E +(wline>\232.)-.25 E F2(IGNOREEOF)108 228 Q F1 .503 +(Controls the action of an interacti)144 240 R .803 -.15(ve s)-.25 H +.503(hell on receipt of an).15 F F3(EOF)3.003 E F1 .503 +(character as the sole input.)2.753 F .503(If set,)5.503 F .426(the v) +144 252 R .426(alue is the number of consecuti)-.25 F -.15(ve)-.25 G F3 +(EOF)3.076 E F1 .426 +(characters which must be typed as the \214rst characters)2.676 F .303 +(on an input line before)144 264 R F2(bash)2.802 E F1 -.15(ex)2.802 G 2.802(its. If).15 F .302(the v)2.802 F .302(ariable e)-.25 F .302 (xists b)-.15 F .302(ut does not ha)-.2 F .602 -.15(ve a n)-.2 H .302 -(umeric v).15 F .303(alue, or has)-.25 F(no v)144 588 Q(alue, the def) +(umeric v).15 F .302(alue, or has)-.25 F(no v)144 276 Q(alue, the def) -.25 E(ault v)-.1 E(alue is 10.)-.25 E(If it does not e)5 E(xist,)-.15 E -F2(EOF)2.5 E F0(signi\214es the end of input to the shell.)2.25 E F1 -(INPUTRC)108 600 Q F0 .261(The \214lename for the)144 612 R F1 -.18(re) -2.761 G(adline).18 E F0 .261(startup \214le, o)2.761 F -.15(ve)-.15 G -.26(rriding the def).15 F .26(ault of)-.1 F F4(~/.inputr)4.426 E(c)-.37 -E F0(\(see)4.426 E F2(READLINE)2.76 E F0(be-)2.51 E(lo)144 624 Q(w\).) --.25 E F1(INSIDE_EMA)108 636 Q(CS)-.55 E F0 .033(If this v)144 648 R -.033(ariable appears in the en)-.25 F .033 -(vironment when the shell starts,)-.4 F F1(bash)2.534 E F0 .034 -(assumes that it is running in-)2.534 F(side an Emacs shell b)144 660 Q +F3(EOF)2.5 E F1(signi\214es the end of input to the shell.)2.25 E F2 +(INPUTRC)108 288 Q F1 .111(The \214lename for the)144 300 R F2 -.18(re) +2.612 G(adline).18 E F1 .112(startup \214le, o)2.612 F -.15(ve)-.15 G +.112(rriding the def).15 F .112(ault of)-.1 F F0(\001/.inputr)4.278 E(c) +-.37 E F1(\(see)4.278 E F3(READLINE)2.612 E F1(be-)2.362 E(lo)144 312 Q +(w\).)-.25 E F2(INSIDE_EMA)108 324 Q(CS)-.55 E F1 .034(If this v)144 336 +R .034(ariable appears in the en)-.25 F .034 +(vironment when the shell starts,)-.4 F F2(bash)2.533 E F1 .033 +(assumes that it is running in-)2.533 F(side an Emacs shell b)144 348 Q (uf)-.2 E(fer and may disable line editing, depending on the v)-.25 E -(alue of)-.25 E F1(TERM)2.5 E F0(.)A F1(LANG)108 672 Q F0 1.24 -(Used to determine the locale cate)144 672 R 1.239(gory for an)-.15 F -3.739(yc)-.15 G(ate)-3.739 E 1.239 +(alue of)-.25 E F2(TERM)2.5 E F1(.)A F2(LANG)108 360 Q F1 1.239 +(Used to determine the locale cate)144 360 R 1.239(gory for an)-.15 F +3.739(yc)-.15 G(ate)-3.739 E 1.24 (gory not speci\214cally selected with a v)-.15 F(ariable)-.25 E -(starting with)144 684 Q F1(LC_)2.5 E F0(.)A F1(LC_ALL)108 696 Q F0 .973 -(This v)144 708 R .973(ariable o)-.25 F -.15(ve)-.15 G .973 -(rrides the v).15 F .973(alue of)-.25 F F2(LANG)3.473 E F0 .973(and an) -3.223 F 3.473(yo)-.15 G(ther)-3.473 E F1(LC_)3.473 E F0 -.25(va)3.473 G -.974(riable specifying a locale cate-).25 F(gory)144 720 Q(.)-.65 E -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(17)185.115 E 0 Cg EP -%%Page: 18 18 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(LC_COLLA)108 84 Q(TE)-.95 E F0 .412(This v)144 96 R .412(ariable det\ +(starting with)144 372 Q F2(LC_)2.5 E F1(.)A F2(LC_ALL)108 384 Q F1 .974 +(This v)144 396 R .974(ariable o)-.25 F -.15(ve)-.15 G .974 +(rrides the v).15 F .973(alue of)-.25 F F3(LANG)3.473 E F1 .973(and an) +3.223 F 3.473(yo)-.15 G(ther)-3.473 E F2(LC_)3.473 E F1 -.25(va)3.473 G +.973(riable specifying a locale cate-).25 F(gory)144 408 Q(.)-.65 E F2 +(LC_COLLA)108 420 Q(TE)-.95 E F1 .411(This v)144 432 R .412(ariable det\ ermines the collation order used when sorting the results of pathname e) --.25 F(xpansion,)-.15 E 1.464(and determines the beha)144 108 R 1.464 -(vior of range e)-.2 F 1.465(xpressions, equi)-.15 F -.25(va)-.25 G -1.465(lence classes, and collating sequences).25 F(within pathname e)144 -120 Q(xpansion and pattern matching.)-.15 E F1(LC_CTYPE)108 132 Q F0 -1.936(This v)144 144 R 1.936 +-.25 F(xpansion,)-.15 E 1.465(and determines the beha)144 444 R 1.465 +(vior of range e)-.2 F 1.464(xpressions, equi)-.15 F -.25(va)-.25 G +1.464(lence classes, and collating sequences).25 F(within pathname e)144 +456 Q(xpansion and pattern matching.)-.15 E F2(LC_CTYPE)108 468 Q F1 +1.935(This v)144 480 R 1.936 (ariable determines the interpretation of characters and the beha)-.25 F -1.935(vior of character classes)-.2 F(within pathname e)144 156 Q -(xpansion and pattern matching.)-.15 E F1(LC_MESSA)108 168 Q(GES)-.55 E -F0(This v)144 180 Q(ariable determines the locale used to translate dou\ -ble-quoted strings preceded by a)-.25 E F1($)2.5 E F0(.)A F1(LC_NUMERIC) -108 192 Q F0(This v)144 204 Q(ariable determines the locale cate)-.25 E -(gory used for number formatting.)-.15 E F1(LC_TIME)108 216 Q F0(This v) -144 228 Q(ariable determines the locale cate)-.25 E -(gory used for data and time formatting.)-.15 E F1(LINES)108 240 Q F0 -.054(Used by the)144 240 R F1(select)2.554 E F0 .054(compound command t\ -o determine the column length for printing selection lists.)2.554 F .265 -(Automatically set if the)144 252 R F1(checkwinsize)2.765 E F0 .264 -(option is enabled or in an interacti)2.765 F .564 -.15(ve s)-.25 H .264 -(hell upon receipt of a).15 F/F2 9/Times-Bold@0 SF(SIGWINCH)144 264 Q/F3 -9/Times-Roman@0 SF(.)A F1(MAIL)108 276 Q F0 .421 -(If this parameter is set to a \214le or directory name and the)144 276 -R F2(MAILP)2.922 E -.855(AT)-.666 G(H).855 E F0 -.25(va)2.672 G .422 -(riable is not set,).25 F F1(bash)2.922 E F0(in-)2.922 E -(forms the user of the arri)144 288 Q -.25(va)-.25 G 2.5(lo).25 G 2.5 +1.936(vior of character classes)-.2 F(within pathname e)144 492 Q +(xpansion and pattern matching.)-.15 E F2(LC_MESSA)108 504 Q(GES)-.55 E +F1(This v)144 516 Q(ariable determines the locale used to translate dou\ +ble-quoted strings preceded by a)-.25 E F2($)2.5 E F1(.)A F2(LC_NUMERIC) +108 528 Q F1(This v)144 540 Q(ariable determines the locale cate)-.25 E +(gory used for number formatting.)-.15 E F2(LC_TIME)108 552 Q F1(This v) +144 564 Q(ariable determines the locale cate)-.25 E +(gory used for data and time formatting.)-.15 E F2(LINES)108 576 Q F1 +.055(Used by the)144 576 R F2(select)2.555 E F1 .054(compound command t\ +o determine the column length for printing selection lists.)2.555 F .264 +(Automatically set if the)144 588 R F2(checkwinsize)2.764 E F1 .264 +(option is enabled or in an interacti)2.764 F .565 -.15(ve s)-.25 H .265 +(hell upon receipt of a).15 F F3(SIGWINCH)144 600 Q/F4 9/Times-Roman@0 +SF(.)A F2(MAIL)108 612 Q F1 .422 +(If this parameter is set to a \214le or directory name and the)144 612 +R F3(MAILP)2.921 E -.855(AT)-.666 G(H).855 E F1 -.25(va)2.671 G .421 +(riable is not set,).25 F F2(bash)2.921 E F1(in-)2.921 E +(forms the user of the arri)144 624 Q -.25(va)-.25 G 2.5(lo).25 G 2.5 (fm)-2.5 G(ail in the speci\214ed \214le or Maildir)-2.5 E -(-format directory)-.2 E(.)-.65 E F1(MAILCHECK)108 300 Q F0 .099 -(Speci\214es ho)144 312 R 2.599(wo)-.25 G .099(ften \(in seconds\)) --2.599 F F1(bash)2.598 E F0 .098(checks for mail.)2.598 F .098(The def) -5.098 F .098(ault is 60 seconds.)-.1 F .098(When it is time)5.098 F .223 +(-format directory)-.2 E(.)-.65 E F2(MAILCHECK)108 636 Q F1 .098 +(Speci\214es ho)144 648 R 2.598(wo)-.25 G .098(ften \(in seconds\)) +-2.598 F F2(bash)2.598 E F1 .098(checks for mail.)2.598 F .098(The def) +5.098 F .098(ault is 60 seconds.)-.1 F .099(When it is time)5.099 F .224 (to check for mail, the shell does so before displaying the primary pro\ -mpt.)144 324 R .224(If this v)5.224 F .224(ariable is unset,)-.25 F -(or set to a v)144 336 Q(alue that is not a number greater than or equa\ -l to zero, the shell disables mail checking.)-.25 E F1(MAILP)108 348 Q --.95(AT)-.74 G(H).95 E F0 2.99(Ac)144 360 S .49 +mpt.)144 660 R .223(If this v)5.223 F .223(ariable is unset,)-.25 F +(or set to a v)144 672 Q(alue that is not a number greater than or equa\ +l to zero, the shell disables mail checking.)-.25 E F2(MAILP)108 684 Q +-.95(AT)-.74 G(H).95 E F1 2.99(Ac)144 696 S .49 (olon-separated list of \214lenames to be check)-2.99 F .49 (ed for mail.)-.1 F .49(The message to be printed when mail)5.49 F(arri) -144 372 Q -.15(ve)-.25 G 2.62(si).15 G 2.62(nap)-2.62 G .12(articular \ -\214le may be speci\214ed by separating the \214lename from the message\ - with a `?'.)-2.62 F(When used in the te)144 384 Q(xt of the message,) --.15 E F1($_)2.5 E F0 -.15(ex)2.5 G -(pands to the name of the current mail\214le.).15 E(Example:)5 E F1 -(MAILP)144 396 Q -.95(AT)-.74 G(H).95 E F0(=\010/v)A(ar/mail/bfox?"Y) --.25 E(ou ha)-1.1 E .3 -.15(ve m)-.2 H -(ail":~/shell\255mail?"$_ has mail!"\010).15 E F1(Bash)144 408 Q F0 .015 -(can be con\214gured to supply a def)2.515 F .015(ault v)-.1 F .015 +144 708 Q -.15(ve)-.25 G 3.634(si).15 G 3.634(nap)-3.634 G 1.134(articu\ +lar \214le may be speci\214ed by separating the \214lename from the mes\ +sage with a)-3.634 F 4.557(\231?\232. When)144 720 R 2.057 +(used in the te)4.557 F 2.058(xt of the message,)-.15 F F2($_)4.558 E F1 +-.15(ex)4.558 G 2.058(pands to the name of the current mail\214le.).15 F +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(18)193.45 E 0 Cg EP +%%Page: 19 19 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(Example:)144 84 Q/F2 10/Courier-Bold@0 SF(MAILPATH) +144 96 Q/F3 10/Courier@0 SF(=\010/var/mail/bfox?"You have mail":\001/sh\ +ell\255mail?"$_ has mail!"\010)A/F4 10/Times-Bold@0 SF(Bash)144 108 Q F1 +.015(can be con\214gured to supply a def)2.515 F .015(ault v)-.1 F .015 (alue for this v)-.25 F .015(ariable \(there is no v)-.25 F .015 (alue by def)-.25 F .015(ault\), b)-.1 F(ut)-.2 E(the location of the u\ -ser mail \214les that it uses is system dependent \(e.g., /v)144 420 Q -(ar/mail/)-.25 E F1($USER)A F0(\).)A F1(OPTERR)108 432 Q F0 .389 -(If set to the v)144 444 R .389(alue 1,)-.25 F F1(bash)2.889 E F0 .389 -(displays error messages generated by the)2.889 F F1(getopts)2.89 E F0 --.2(bu)2.89 G .39(iltin command \(see).2 F F2 .36(SHELL B)144 456 R(UIL) --.09 E .36(TIN COMMANDS)-.828 F F0(belo)2.61 E(w\).)-.25 E F2(OPTERR) -5.36 E F0 .359(is initialized to 1 each time the shell is in)2.61 F -.2 -(vo)-.4 G -.1(ke).2 G(d).1 E(or a shell script is e)144 468 Q -.15(xe) --.15 G(cuted.).15 E F1 -.74(PA)108 480 S(TH)-.21 E F0 .587 -(The search path for commands.)144 480 R .588 +ser mail \214les that it uses is system dependent \(e.g., /v)144 120 Q +(ar/mail/)-.25 E F4($USER)A F1(\).)A F4(OPTERR)108 132 Q F1 .389 +(If set to the v)144 144 R .389(alue 1,)-.25 F F4(bash)2.889 E F1 .389 +(displays error messages generated by the)2.889 F F4(getopts)2.89 E F1 +-.2(bu)2.89 G .39(iltin command \(see).2 F/F5 9/Times-Bold@0 SF .36 +(SHELL B)144 156 R(UIL)-.09 E .36(TIN COMMANDS)-.828 F F1(belo)2.61 E +(w\).)-.25 E F5(OPTERR)5.36 E F1 .359 +(is initialized to 1 each time the shell is in)2.61 F -.2(vo)-.4 G -.1 +(ke).2 G(d).1 E(or a shell script is e)144 168 Q -.15(xe)-.15 G(cuted.) +.15 E F4 -.74(PA)108 180 S(TH)-.21 E F1 .587 +(The search path for commands.)144 180 R .588 (It is a colon-separated list of directories in which the shell looks) -5.587 F .472(for commands \(see)144 492 R F2 .472(COMMAND EXECUTION) -2.972 F F0(belo)2.722 E 2.972(w\). A)-.25 F .471 -(zero-length \(null\) directory name in the)2.972 F -.25(va)144 504 S -.535(lue of).25 F F2 -.666(PA)3.035 G(TH)-.189 E F0 .535 +5.587 F .472(for commands \(see)144 192 R F5 .472(COMMAND EXECUTION) +2.972 F F1(belo)2.722 E 2.972(w\). A)-.25 F .471 +(zero-length \(null\) directory name in the)2.972 F -.25(va)144 204 S +.535(lue of).25 F F5 -.666(PA)3.035 G(TH)-.189 E F1 .535 (indicates the current directory)2.785 F 5.535(.A)-.65 G .535 (null directory name may appear as tw)-2.5 F 3.036(oa)-.1 G(djacent) --3.036 E .868(colons, or as an initial or trailing colon.)144 516 R .868 +-3.036 E .868(colons, or as an initial or trailing colon.)144 216 R .868 (The def)5.868 F .867(ault path is system-dependent, and is set by the) --.1 F(administrator who installs)144 528 Q F1(bash)2.5 E F0 5(.A)C -(common v)-2.5 E(alue is)-.25 E/F4 10/Courier@0 SF -(/usr/local/bin:/usr/lo-)2.5 E(cal/sbin:/usr/bin:/usr/sbin:/bin:/sbin) -144 540 Q F0(.)A F1(POSIXL)108 552 Q(Y_CORRECT)-.92 E F0 .472(If this v) -144 564 R .472(ariable is in the en)-.25 F .471(vironment when)-.4 F F1 -(bash)2.971 E F0 .471(starts, the shell enters)2.971 F/F5 10 -/Times-Italic@0 SF .471(posix mode)2.971 F F0 .471(before reading)2.971 -F .011(the startup \214les, as if the)144 576 R F1(\255\255posix)2.511 E -F0(in)2.511 E -.2(vo)-.4 G .011(cation option had been supplied.).2 F -.011(If it is set while the shell is)5.011 F(running,)144 588 Q F1(bash) -4.498 E F0(enables)4.498 E F5 1.997(posix mode)4.497 F F0 4.497(,a)C -4.497(si)-4.497 G 4.497(ft)-4.497 G 1.997(he command)-4.497 F F4 1.997 -(set -o posix)4.497 F F0 1.997(had been e)4.497 F -.15(xe)-.15 G(cuted.) -.15 E(When the shell enters)144 600 Q F5(posix mode)2.5 E F0 2.5(,i)C -2.5(ts)-2.5 G(ets this v)-2.5 E(ariable if it w)-.25 E -(as not already set.)-.1 E F1(PR)108 612 Q(OMPT_COMMAND)-.3 E F0 .155 -(If this v)144 624 R .155(ariable is set, and is an array)-.25 F 2.655 +-.1 F(administrator who installs)144 228 Q F4(bash)2.5 E F1 5(.A)C +(common v)-2.5 E(alue is \231/usr/local/bin:/usr/lo-)-.25 E +(cal/sbin:/usr/bin:/usr/sbin:/bin:/sbin\232.)144 240 Q F4(POSIXL)108 252 +Q(Y_CORRECT)-.92 E F1 .471(If this v)144 264 R .471 +(ariable is in the en)-.25 F .471(vironment when)-.4 F F4(bash)2.971 E +F1 .471(starts, the shell enters)2.971 F F0 .472(posix mode)2.972 F F1 +.472(before reading)2.972 F .011(the startup \214les, as if the)144 276 +R F4(\255\255posix)2.511 E F1(in)2.511 E -.2(vo)-.4 G .011 +(cation option had been supplied.).2 F .011 +(If it is set while the shell is)5.011 F(running,)144 288 Q F4(bash) +3.418 E F1(enables)3.418 E F0 .918(posix mode)3.418 F F1 3.418(,a)C +3.419(si)-3.418 G 3.419(ft)-3.419 G .919 +(he command \231set \255o posix\232 had been e)-3.419 F -.15(xe)-.15 G +3.419(cuted. When).15 F(the shell enters)144 300 Q F0(posix mode)2.5 E +F1 2.5(,i)C 2.5(ts)-2.5 G(ets this v)-2.5 E(ariable if it w)-.25 E +(as not already set.)-.1 E F4(PR)108 312 Q(OMPT_COMMAND)-.3 E F1 .155 +(If this v)144 324 R .155(ariable is set, and is an array)-.25 F 2.655 (,t)-.65 G .155(he v)-2.655 F .155(alue of each set element is e)-.25 F -.15(xe)-.15 G .155(cuted as a command prior).15 F .407 -(to issuing each primary prompt.)144 636 R .407(If this is set b)5.407 F +(to issuing each primary prompt.)144 336 R .407(If this is set b)5.407 F .407(ut not an array v)-.2 F .407(ariable, its v)-.25 F .407 -(alue is used as a com-)-.25 F(mand to e)144 648 Q -.15(xe)-.15 G -(cute instead.).15 E F1(PR)108 660 Q(OMPT_DIR)-.3 E(TRIM)-.4 E F0 .676 -(If set to a number greater than zero, the v)144 672 R .676 +(alue is used as a com-)-.25 F(mand to e)144 348 Q -.15(xe)-.15 G +(cute instead.).15 E F4(PR)108 360 Q(OMPT_DIR)-.3 E(TRIM)-.4 E F1 .676 +(If set to a number greater than zero, the v)144 372 R .676 (alue is used as the number of trailing directory compo-)-.25 F .923 -(nents to retain when e)144 684 R .923(xpanding the)-.15 F F1(\\w)3.423 -E F0(and)3.423 E F1(\\W)3.423 E F0 .923(prompt string escapes \(see) -3.423 F F2(PR)3.423 E(OMPTING)-.27 E F0(belo)3.173 E(w\).)-.25 E -(Characters remo)144 696 Q -.15(ve)-.15 G 2.5(da).15 G -(re replaced with an ellipsis.)-2.5 E F1(PS0)108 708 Q F0 1.174(The v) -144 708 R 1.174(alue of this parameter is e)-.25 F 1.174(xpanded \(see) --.15 F F2(PR)3.674 E(OMPTING)-.27 E F0(belo)3.424 E 1.174 +(nents to retain when e)144 384 R .923(xpanding the)-.15 F F4(\\w)3.423 +E F1(and)3.423 E F4(\\W)3.423 E F1 .923(prompt string escapes \(see) +3.423 F F5(PR)3.423 E(OMPTING)-.27 E F1(belo)3.173 E(w\).)-.25 E +(Characters remo)144 396 Q -.15(ve)-.15 G 2.5(da).15 G +(re replaced with an ellipsis.)-2.5 E F4(PS0)108 408 Q F1 1.174(The v) +144 408 R 1.174(alue of this parameter is e)-.25 F 1.174(xpanded \(see) +-.15 F F5(PR)3.674 E(OMPTING)-.27 E F1(belo)3.424 E 1.174 (w\) and displayed by interacti)-.25 F -.15(ve)-.25 G -(shells after reading a command and before the command is e)144 720 Q --.15(xe)-.15 G(cuted.).15 E(GNU Bash 5.2)72 768 Q(2022 September 19) -135.955 E(18)185.115 E 0 Cg EP -%%Page: 19 19 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(PS1)108 84 Q F0 .065(The v)144 84 R .065(alue of this parameter is e) --.25 F .065(xpanded \(see)-.15 F/F2 9/Times-Bold@0 SF(PR)2.565 E -(OMPTING)-.27 E F0(belo)2.315 E .065(w\) and used as the primary prompt) --.25 F 2.5(string. The)144 96 R(def)2.5 E(ault v)-.1 E(alue is `)-.25 E -(`)-.74 E F1(\\s\255\\v\\$)A F0 -.74('')2.5 G(.).74 E F1(PS2)108 108 Q -F0 .117(The v)144 108 R .117(alue of this parameter is e)-.25 F .117 -(xpanded as with)-.15 F F2(PS1)2.617 E F0 .118 -(and used as the secondary prompt string.)2.368 F(The)5.118 E(def)144 -120 Q(ault is `)-.1 E(`)-.74 E F1(>)A F0 -.74('')2.5 G(.).74 E F1(PS3) -108 132 Q F0 1.116(The v)144 132 R 1.115 -(alue of this parameter is used as the prompt for the)-.25 F F1(select) -3.615 E F0 1.115(command \(see)3.615 F F2 1.115(SHELL GRAM-)3.615 F(MAR) -144 144 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E F1(PS4)108 156 Q F0 .1 -(The v)144 156 R .1(alue of this parameter is e)-.25 F .1 -(xpanded as with)-.15 F F2(PS1)2.6 E F0 .101(and the v)2.35 F .101 -(alue is printed before each command)-.25 F F1(bash)144 168 Q F0 .335 -(displays during an e)2.835 F -.15(xe)-.15 G .335(cution trace.).15 F +(shells after reading a command and before the command is e)144 420 Q +-.15(xe)-.15 G(cuted.).15 E F4(PS1)108 432 Q F1 .064(The v)144 432 R +.065(alue of this parameter is e)-.25 F .065(xpanded \(see)-.15 F F5(PR) +2.565 E(OMPTING)-.27 E F1(belo)2.315 E .065 +(w\) and used as the primary prompt)-.25 F 2.5(string. The)144 444 R +(def)2.5 E(ault v)-.1 E(alue is \231\\s\255\\v\\$ \232.)-.25 E F4(PS2) +108 456 Q F1 .118(The v)144 456 R .118(alue of this parameter is e)-.25 +F .118(xpanded as with)-.15 F F5(PS1)2.617 E F1 .117 +(and used as the secondary prompt string.)2.367 F(The)5.117 E(def)144 +468 Q(ault is \231> \232.)-.1 E F4(PS3)108 480 Q F1 1.115(The v)144 480 +R 1.115(alue of this parameter is used as the prompt for the)-.25 F F4 +(select)3.615 E F1 1.116(command \(see)3.616 F F5 1.116(SHELL GRAM-) +3.616 F(MAR)144 492 Q F1(abo)2.25 E -.15(ve)-.15 G(\).).15 E F4(PS4)108 +504 Q F1 .101(The v)144 504 R .101(alue of this parameter is e)-.25 F +.101(xpanded as with)-.15 F F5(PS1)2.6 E F1 .1(and the v)2.35 F .1 +(alue is printed before each command)-.25 F F4(bash)144 516 Q F1 .334 +(displays during an e)2.834 F -.15(xe)-.15 G .335(cution trace.).15 F .335(The \214rst character of the e)5.335 F .335(xpanded v)-.15 F .335 -(alue of)-.25 F F2(PS4)2.834 E F0 .334(is repli-)2.584 F -(cated multiple times, as necessary)144 180 Q 2.5(,t)-.65 G 2.5(oi)-2.5 +(alue of)-.25 F F5(PS4)2.835 E F1 .335(is repli-)2.585 F +(cated multiple times, as necessary)144 528 Q 2.5(,t)-.65 G 2.5(oi)-2.5 G(ndicate multiple le)-2.5 E -.15(ve)-.25 G(ls of indirection.).15 E -(The def)5 E(ault is `)-.1 E(`)-.74 E F1(+)A F0 -.74('')2.5 G(.).74 E F1 -(SHELL)108 192 Q F0 .542(This v)144 204 R .542(ariable e)-.25 F .542 -(xpands to the full pathname to the shell.)-.15 F .543 -(If it is not set when the shell starts,)5.543 F F1(bash)3.043 E F0 -(assigns to it the full pathname of the current user')144 216 Q 2.5(sl) --.55 G(ogin shell.)-2.5 E F1(TIMEFORMA)108 228 Q(T)-.95 E F0 .827(The v) -144 240 R .826 +(The def)5 E(ault is \231+ \232.)-.1 E F4(SHELL)108 540 Q F1 .543 +(This v)144 552 R .543(ariable e)-.25 F .543 +(xpands to the full pathname to the shell.)-.15 F .542 +(If it is not set when the shell starts,)5.543 F F4(bash)3.042 E F1 +(assigns to it the full pathname of the current user')144 564 Q 2.5(sl) +-.55 G(ogin shell.)-2.5 E F4(TIMEFORMA)108 576 Q(T)-.95 E F1 .826(The v) +144 588 R .826 (alue of this parameter is used as a format string specifying ho)-.25 F -3.326(wt)-.25 G .826(he timing information for)-3.326 F .648 -(pipelines pre\214x)144 252 R .648(ed with the)-.15 F F1(time)3.148 E F0 -(reserv)3.148 E .648(ed w)-.15 F .649(ord should be displayed.)-.1 F -(The)5.649 E F1(%)3.149 E F0 .649(character introduces)3.149 F .712 -(an escape sequence that is e)144 264 R .711(xpanded to a time v)-.15 F -.711(alue or other information.)-.25 F .711(The escape sequences)5.711 F -(and their meanings are as follo)144 276 Q -(ws; the braces denote optional portions.)-.25 E F1(%%)144 294 Q F0 2.5 -(Al)194 294 S(iteral)-2.5 E F1(%)2.5 E F0(.)A F1(%[)144 306 Q/F3 10 -/Times-Italic@0 SF(p)A F1(][l]R)A F0(The elapsed time in seconds.)194 -306 Q F1(%[)144 318 Q F3(p)A F1(][l]U)A F0 -(The number of CPU seconds spent in user mode.)194 318 Q F1(%[)144 330 Q -F3(p)A F1(][l]S)A F0(The number of CPU seconds spent in system mode.)194 -330 Q F1(%P)144 342 Q F0 -(The CPU percentage, computed as \(%U + %S\) / %R.)194 342 Q .87 -(The optional)144 358.8 R F3(p)3.37 E F0 .87(is a digit specifying the) -3.37 F F3(pr)3.37 E(ecision)-.37 E F0 3.37(,t)C .87 -(he number of fractional digits after a decimal)-3.37 F 2.526(point. A) -144 370.8 R -.25(va)2.526 G .025 -(lue of 0 causes no decimal point or fraction to be output.).25 F .025 -(At most three places after the)5.025 F .537 -(decimal point may be speci\214ed; v)144 382.8 R .537(alues of)-.25 F F3 -(p)3.037 E F0 .537(greater than 3 are changed to 3.)3.037 F(If)5.538 E -F3(p)3.038 E F0 .538(is not speci\214ed,)3.038 F(the v)144 394.8 Q -(alue 3 is used.)-.25 E .668(The optional)144 411.6 R F1(l)3.168 E F0 -.668(speci\214es a longer format, including minutes, of the form)3.168 F -F3(MM)3.168 E F0(m)A F3(SS)A F0(.)A F3(FF)A F0 3.167(s. The)B -.25(va) -3.167 G(lue).25 E(of)144 423.6 Q F3(p)2.5 E F0 -(determines whether or not the fraction is included.)2.5 E 13.364 -(If this v)144 440.4 R 13.364(ariable is not set,)-.25 F F1(bash)15.865 -E F0 13.365(acts as if it had the v)15.865 F(alue)-.25 E F1($\010\\nr) -144 452.4 Q(eal\\t%3lR\\nuser\\t%3lU\\nsys\\t%3lS\010)-.18 E F0 7.113 -(.I)C 4.613(ft)-7.113 G 2.113(he v)-4.613 F 2.113 -(alue is null, no timing information is dis-)-.25 F 2.5(played. A)144 -464.4 R(trailing ne)2.5 E -(wline is added when the format string is displayed.)-.25 E F1(TMOUT)108 -476.4 Q F0 .941(If set to a v)144 488.4 R .941(alue greater than zero,) --.25 F F2(TMOUT)3.441 E F0 .941(is treated as the def)3.191 F .941 -(ault timeout for the)-.1 F F1 -.18(re)3.441 G(ad).18 E F0 -.2(bu)3.441 -G(iltin.).2 E(The)144 500.4 Q F1(select)2.811 E F0 .311 -(command terminates if input does not arri)2.811 F .61 -.15(ve a)-.25 H -(fter).15 E F2(TMOUT)2.81 E F0 .31(seconds when input is com-)2.56 F -.885(ing from a terminal.)144 512.4 R .885(In an interacti)5.885 F 1.185 --.15(ve s)-.25 H .885(hell, the v).15 F .886 -(alue is interpreted as the number of seconds to)-.25 F -.1(wa)144 524.4 -S 1.05(it for a line of input after issuing the primary prompt.).1 F F1 -(Bash)6.05 E F0 1.05(terminates after w)3.55 F 1.05(aiting for that)-.1 -F(number of seconds if a complete line of input does not arri)144 536.4 -Q -.15(ve)-.25 G(.).15 E F1(TMPDIR)108 548.4 Q F0 .39(If set,)144 560.4 -R F1(bash)2.89 E F0 .39(uses its v)2.89 F .39 -(alue as the name of a directory in which)-.25 F F1(bash)2.891 E F0 .391 -(creates temporary \214les for the)2.891 F(shell')144 572.4 Q 2.5(su) --.55 G(se.)-2.5 E F1(auto_r)108 584.4 Q(esume)-.18 E F0 .531(This v)144 -596.4 R .531(ariable controls ho)-.25 F 3.031(wt)-.25 G .531 -(he shell interacts with the user and job control.)-3.031 F .53 -(If this v)5.53 F .53(ariable is set,)-.25 F .538(single w)144 608.4 R -.538(ord simple commands without redirections are treated as candidates\ - for resumption of an)-.1 F -.15(ex)144 620.4 S .367(isting stopped job) -.15 F 5.367(.T)-.4 G .366(here is no ambiguity allo)-5.367 F .366 -(wed; if there is more than one job be)-.25 F .366(ginning with)-.15 F -1.124(the string typed, the job most recently accessed is selected.)144 -632.4 R(The)6.125 E F3(name)3.985 E F0 1.125(of a stopped job, in this) -3.805 F(conte)144 644.4 Q 1.133 -(xt, is the command line used to start it.)-.15 F 1.133(If set to the v) -6.133 F(alue)-.25 E F3 -.2(ex)3.633 G(act).2 E F0 3.632(,t).68 G 1.132 -(he string supplied must)-3.632 F .605 -(match the name of a stopped job e)144 656.4 R .606(xactly; if set to) --.15 F F3(substring)3.446 E F0 3.106(,t).22 G .606 -(he string supplied needs to match a)-3.106 F .885 -(substring of the name of a stopped job)144 668.4 R 5.884(.T)-.4 G(he) --5.884 E F3(substring)3.724 E F0 -.25(va)3.604 G .884(lue pro).25 F .884 -(vides functionality analogous to)-.15 F(the)144 680.4 Q F1(%?)3.333 E -F0 .833(job identi\214er \(see)5.833 F F2 .834(JOB CONTR)3.334 F(OL)-.27 -E F0(belo)3.084 E 3.334(w\). If)-.25 F .834(set to an)3.334 F 3.334(yo) --.15 G .834(ther v)-3.334 F .834(alue, the supplied string)-.25 F .316 -(must be a pre\214x of a stopped job')144 692.4 R 2.816(sn)-.55 G .316 -(ame; this pro)-2.816 F .315(vides functionality analogous to the)-.15 F -F1(%)2.815 E F3(string)A F0(job)2.815 E(identi\214er)144 704.4 Q(.)-.55 -E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(19)185.115 E 0 Cg EP +3.327(wt)-.25 G .827(he timing information for)-3.327 F .649 +(pipelines pre\214x)144 600 R .649(ed with the)-.15 F F4(time)3.149 E F1 +(reserv)3.149 E .649(ed w)-.15 F .648(ord should be displayed.)-.1 F +(The)5.648 E F4(%)3.148 E F1 .648(character introduces)3.148 F .711 +(an escape sequence that is e)144 612 R .711(xpanded to a time v)-.15 F +.712(alue or other information.)-.25 F .712(The escape sequences)5.712 F +(and their meanings are as follo)144 624 Q(ws; the brack)-.25 E +(ets denote optional portions.)-.1 E F4(%%)144 636 Q F1 2.5(Al)194 636 S +(iteral)-2.5 E F4(%)2.5 E F1(.)A F4(%[)144 648 Q F0(p)A F4(][l]R)A F1 +(The elapsed time in seconds.)194 648 Q F4(%[)144 660 Q F0(p)A F4(][l]U) +A F1(The number of CPU seconds spent in user mode.)194 660 Q F4(%[)144 +672 Q F0(p)A F4(][l]S)A F1 +(The number of CPU seconds spent in system mode.)194 672 Q F4(%P)144 684 +Q F1(The CPU percentage, computed as \(%U + %S\) / %R.)194 684 Q .87 +(The optional)144 700.8 R F0(p)3.37 E F1 .87(is a digit specifying the) +3.37 F F0(pr)3.37 E(ecision)-.37 E F1 3.37(,t)C .87 +(he number of fractional digits after a decimal)-3.37 F 2.963(point. A) +144 712.8 R -.25(va)2.963 G .463 +(lue of 0 causes no decimal point or fraction to be output.).25 F .464 +(At most six places after the)5.463 F .538 +(decimal point may be speci\214ed; v)144 724.8 R .538(alues of)-.25 F F0 +(p)3.038 E F1 .537(greater than 6 are changed to 6.)3.037 F(If)5.537 E +F0(p)3.037 E F1 .537(is not speci\214ed,)3.037 F(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(19)193.45 E 0 Cg EP %%Page: 20 20 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(histchars)108 84 Q F0 .545(The tw)144 96 R 3.045(oo)-.1 G 3.045(rt) --3.045 G .545(hree characters which control history e)-3.045 F .546 -(xpansion and tok)-.15 F .546(enization \(see)-.1 F/F2 9/Times-Bold@0 SF -(HIST)3.046 E(OR)-.162 E 2.796(YE)-.315 G(X-)-2.796 E -.666(PA)144 108 S -(NSION).666 E F0(belo)2.988 E 3.238(w\). The)-.25 F .738 -(\214rst character is the)3.238 F/F3 10/Times-Italic@0 SF .737 -(history e)3.237 F(xpansion)-.2 E F0(character)3.237 E 3.237(,t)-.4 G -.737(he character which sig-)-3.237 F .76(nals the start of a history e) -144 120 R .761(xpansion, normally `)-.15 F F1(!)A F0 3.261('. The)B .761 -(second character is the)3.261 F F3(quic)3.261 E 3.261(ks)-.2 G -(ubstitution)-3.261 E F0(character)144 132 Q 3.477(,w)-.4 G .977 -(hich is used as shorthand for re-running the pre)-3.477 F .976 -(vious command entered, substituting)-.25 F .13 -(one string for another in the command.)144 144 R .131(The def)5.13 F -.131(ault is `)-.1 F F1(^)A F0 2.631('. The)B .131 -(optional third character is the char)2.631 F(-)-.2 E .276(acter which \ -indicates that the remainder of the line is a comment when found as the\ - \214rst character)144 156 R .459(of a w)144 168 R .459(ord, normally `) --.1 F F1(#)A F0 2.959('. The)B .459 -(history comment character causes history substitution to be skipped) -2.959 F .467(for the remaining w)144 180 R .467(ords on the line.)-.1 F -.466(It does not necessarily cause the shell parser to treat the rest) -5.467 F(of the line as a comment.)144 192 Q F1(Arrays)87 208.8 Q(Bash) -108 220.8 Q F0(pro)3.39 E .89(vides one-dimensional inde)-.15 F -.15(xe) --.15 G 3.39(da).15 G .891(nd associati)-3.39 F 1.191 -.15(ve a)-.25 H -.891(rray v).15 F 3.391(ariables. An)-.25 F 3.391(yv)-.15 G .891 -(ariable may be used as an)-3.641 F(inde)108 232.8 Q -.15(xe)-.15 G -2.574(da).15 G .074(rray; the)-2.574 F F1(declar)2.574 E(e)-.18 E F0 -.2 -(bu)2.574 G .074(iltin will e).2 F .073(xplicitly declare an array)-.15 -F 5.073(.T)-.65 G .073(here is no maximum limit on the size of)-5.073 F -.328(an array)108 244.8 R 2.828(,n)-.65 G .328(or an)-2.828 F 2.828(yr) --.15 G .329(equirement that members be inde)-2.828 F -.15(xe)-.15 G -2.829(do).15 G 2.829(ra)-2.829 G .329(ssigned contiguously)-2.829 F -5.329(.I)-.65 G(nde)-5.329 E -.15(xe)-.15 G 2.829(da).15 G .329 -(rrays are refer)-2.829 F(-)-.2 E 1.595(enced using inte)108 256.8 R +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(the v)144 84 Q(alue 3 is used.)-.25 E .667 +(The optional)144 100.8 R/F2 10/Times-Bold@0 SF(l)3.167 E F1 .668 +(speci\214es a longer format, including minutes, of the form)3.168 F F0 +(MM)3.168 E F1(m)A F0(SS)A F1(.)A F0(FF)A F1 3.168(s. The)B -.25(va) +3.168 G(lue).25 E(of)144 112.8 Q F0(p)2.5 E F1 +(determines whether or not the fraction is included.)2.5 E 13.365 +(If this v)144 129.6 R 13.365(ariable is not set,)-.25 F F2(bash)15.865 +E F1 13.364(acts as if it had the v)15.865 F(alue)-.25 E F2($\010\\nr) +144 141.6 Q(eal\\t%3lR\\nuser\\t%3lU\\nsys\\t%3lS\010)-.18 E F1 5.292 +(.I)C 2.792(ft)-5.292 G .292(he v)-2.792 F .293(alue is null,)-.25 F F2 +(bash)2.793 E F1 .293(does not display an)2.793 F 2.793(yt)-.15 G(iming) +-2.793 E 2.5(information. A)144 153.6 R(trailing ne)2.5 E +(wline is added when the format string is displayed.)-.25 E F2(TMOUT)108 +165.6 Q F1 .941(If set to a v)144 177.6 R .941(alue greater than zero,) +-.25 F/F3 9/Times-Bold@0 SF(TMOUT)3.441 E F1 .941(is treated as the def) +3.191 F .941(ault timeout for the)-.1 F F2 -.18(re)3.441 G(ad).18 E F1 +-.2(bu)3.441 G(iltin.).2 E(The)144 189.6 Q F2(select)2.81 E F1 .31 +(command terminates if input does not arri)2.81 F .611 -.15(ve a)-.25 H +(fter).15 E F3(TMOUT)2.811 E F1 .311(seconds when input is com-)2.561 F +.886(ing from a terminal.)144 201.6 R .886(In an interacti)5.886 F 1.185 +-.15(ve s)-.25 H .885(hell, the v).15 F .885 +(alue is interpreted as the number of seconds to)-.25 F -.1(wa)144 213.6 +S 1.05(it for a line of input after issuing the primary prompt.).1 F F2 +(Bash)6.05 E F1 1.05(terminates after w)3.55 F 1.05(aiting for that)-.1 +F(number of seconds if a complete line of input does not arri)144 225.6 +Q -.15(ve)-.25 G(.).15 E F2(TMPDIR)108 237.6 Q F1 .391(If set,)144 249.6 +R F2(bash)2.891 E F1 .391(uses its v)2.891 F .391 +(alue as the name of a directory in which)-.25 F F2(bash)2.89 E F1 .39 +(creates temporary \214les for the)2.89 F(shell')144 261.6 Q 2.5(su)-.55 +G(se.)-2.5 E F2(auto_r)108 273.6 Q(esume)-.18 E F1 .53(This v)144 285.6 +R .53(ariable controls ho)-.25 F 3.03(wt)-.25 G .531 +(he shell interacts with the user and job control.)-3.03 F .531 +(If this v)5.531 F .531(ariable is set,)-.25 F .539(single w)144 297.6 R +.538(ord simple commands without redirections are treated as candidates\ + for resumption of an)-.1 F -.15(ex)144 309.6 S .366(isting stopped job) +.15 F 5.366(.T)-.4 G .366(here is no ambiguity allo)-5.366 F .366 +(wed; if there is more than one job be)-.25 F .367(ginning with)-.15 F +1.125(the string typed, the job most recently accessed is selected.)144 +321.6 R(The)6.125 E F0(name)3.985 E F1 1.124(of a stopped job, in this) +3.805 F(conte)144 333.6 Q 1.132 +(xt, is the command line used to start it.)-.15 F 1.133(If set to the v) +6.133 F(alue)-.25 E F0 -.2(ex)3.633 G(act).2 E F1 3.633(,t).68 G 1.133 +(he string supplied must)-3.633 F .606 +(match the name of a stopped job e)144 345.6 R .606(xactly; if set to) +-.15 F F0(substring)3.445 E F1 3.105(,t).22 G .605 +(he string supplied needs to match a)-3.105 F .884 +(substring of the name of a stopped job)144 357.6 R 5.884(.T)-.4 G(he) +-5.884 E F0(substring)3.724 E F1 -.25(va)3.604 G .885(lue pro).25 F .885 +(vides functionality analogous to)-.15 F(the)144 369.6 Q F2(%?)3.334 E +F1 .834(job identi\214er \(see)5.834 F F3 .834(JOB CONTR)3.334 F(OL)-.27 +E F1(belo)3.084 E 3.334(w\). If)-.25 F .834(set to an)3.334 F 3.334(yo) +-.15 G .834(ther v)-3.334 F .833(alue, the supplied string)-.25 F .315 +(must be a pre\214x of a stopped job')144 381.6 R 2.816(sn)-.55 G .316 +(ame; this pro)-2.816 F .316(vides functionality analogous to the)-.15 F +F2(%)2.816 E F0(string)A F1(job)2.816 E(identi\214er)144 393.6 Q(.)-.55 +E F2(histchars)108 405.6 Q F1 .546(The tw)144 417.6 R 3.046(oo)-.1 G +3.046(rt)-3.046 G .546(hree characters which control history e)-3.046 F +.545(xpansion and tok)-.15 F .545(enization \(see)-.1 F F3(HIST)3.045 E +(OR)-.162 E 2.795(YE)-.315 G(X-)-2.795 E -.666(PA)144 429.6 S(NSION).666 +E F1(belo)2.987 E 3.237(w\). The)-.25 F .737(\214rst character is the) +3.237 F F0 .737(history e)3.237 F(xpansion)-.2 E F1(character)3.238 E +3.238(,t)-.4 G .738(he character which sig-)-3.238 F .613 +(nals the start of a history e)144 441.6 R .613(xpansion, normally \231) +-.15 F F2(!)A F1 3.113(\232. The)B .612(second character is the)3.113 F +F0(quic)3.112 E 3.112(ks)-.2 G(ubstitution)-3.112 E F1(character)144 +453.6 Q 3.476(,w)-.4 G .977 +(hich is used as shorthand for re-running the pre)-3.476 F .977 +(vious command entered, substituting)-.25 F .508(one string for another\ + in the command, when it appears as the \214rst character on the line.) +144 465.6 R .507(The de-)5.507 F -.1(fa)144 477.6 S .232(ult is \231).1 +F F2<00>A F1 2.732(\232. The)B .233(optional third character is the cha\ +racter which indicates that the remainder of the)2.732 F .069 +(line is a comment when found as the \214rst character of a w)144 489.6 +R .069(ord, normally \231)-.1 F F2(#)A F1 2.568(\232. The)B .068 +(history comment)2.568 F .141(character causes history substitution to \ +be skipped for the remaining w)144 501.6 R .141(ords on the line.)-.1 F +.142(It does not)5.142 F(necessarily cause the shell parser to treat th\ +e rest of the line as a comment.)144 513.6 Q F2(Arrays)87 530.4 Q(Bash) +108 542.4 Q F1(pro)3.391 E .891(vides one-dimensional inde)-.15 F -.15 +(xe)-.15 G 3.391(da).15 G .891(nd associati)-3.391 F 1.191 -.15(ve a) +-.25 H .891(rray v).15 F 3.391(ariables. An)-.25 F 3.391(yv)-.15 G .89 +(ariable may be used as an)-3.641 F(inde)108 554.4 Q -.15(xe)-.15 G +2.573(da).15 G .073(rray; the)-2.573 F F2(declar)2.573 E(e)-.18 E F1 -.2 +(bu)2.573 G .073(iltin will e).2 F .073(xplicitly declare an array)-.15 +F 5.073(.T)-.65 G .074(here is no maximum limit on the size of)-5.073 F +.329(an array)108 566.4 R 2.829(,n)-.65 G .329(or an)-2.829 F 2.829(yr) +-.15 G .329(equirement that members be inde)-2.829 F -.15(xe)-.15 G +2.829(do).15 G 2.829(ra)-2.829 G .328(ssigned contiguously)-2.829 F +5.328(.I)-.65 G(nde)-5.328 E -.15(xe)-.15 G 2.828(da).15 G .328 +(rrays are refer)-2.828 F(-)-.2 E 1.595(enced using inte)108 578.4 R 1.595(gers \(including arithmetic e)-.15 F 1.595 (xpressions\) and are zero-based; associati)-.15 F 1.895 -.15(ve a)-.25 H 1.595(rrays are refer).15 F(-)-.2 E(enced using arbitrary strings.)108 -268.8 Q(Unless otherwise noted, inde)5 E -.15(xe)-.15 G 2.5(da).15 G +590.4 Q(Unless otherwise noted, inde)5 E -.15(xe)-.15 G 2.5(da).15 G (rray indices must be non-ne)-2.5 E -.05(ga)-.15 G(ti).05 E .3 -.15 -(ve i)-.25 H(nte).15 E(gers.)-.15 E 2.462(An inde)108 285.6 R -.15(xe) --.15 G 4.962(da).15 G 2.462(rray is created automatically if an)-4.962 F -4.963(yv)-.15 G 2.463(ariable is assigned to using the syntax)-5.213 F -F3(name)4.963 E F0([)A F3(sub-)A(script)108 297.6 Q F0(]=)A F3(value)A -F0 5.507(.T)C(he)-5.507 E F3(subscript)3.347 E F0 .507 +(ve i)-.25 H(nte).15 E(gers.)-.15 E 2.463(An inde)108 607.2 R -.15(xe) +-.15 G 4.963(da).15 G 2.463(rray is created automatically if an)-4.963 F +4.963(yv)-.15 G 2.462(ariable is assigned to using the syntax)-5.213 F +F0(name)4.962 E F1([)A F0(sub-)A(script)108 619.2 Q F1(]=)A F0(value)A +F1 5.506(.T)C(he)-5.506 E F0(subscript)3.346 E F1 .507 (is treated as an arithmetic e)3.687 F .507(xpression that must e)-.15 F --.25(va)-.25 G .507(luate to a number).25 F 5.506(.T)-.55 G 3.006(oe) --6.306 G(x-)-3.156 E 1.192(plicitly declare an inde)108 309.6 R -.15(xe) --.15 G 3.692(da).15 G(rray)-3.692 E 3.692(,u)-.65 G(se)-3.692 E F1 -(declar)3.692 E 3.693<65ad>-.18 G(a)-3.693 E F3(name)3.693 E F0(\(see) -3.693 E F2 1.193(SHELL B)3.693 F(UIL)-.09 E 1.193(TIN COMMANDS)-.828 F -F0(belo)3.443 E(w\).)-.25 E F1(de-)6.193 E(clar)108 321.6 Q 2.5<65ad> --.18 G(a)-2.5 E F3(name)2.5 E F1([)A F3(subscript)A F1(])A F0 -(is also accepted; the)2.5 E F3(subscript)2.5 E F0(is ignored.)2.5 E -(Associati)108 338.4 Q .3 -.15(ve a)-.25 H(rrays are created using).15 E -F1(declar)2.5 E 2.5<65ad>-.18 G(A)-2.5 E F3(name)2.5 E F0(.)A(Attrib)108 -355.2 Q .941(utes may be speci\214ed for an array v)-.2 F .941 -(ariable using the)-.25 F F1(declar)3.441 E(e)-.18 E F0(and)3.44 E F1 --.18(re)3.44 G(adonly).18 E F0 -.2(bu)3.44 G 3.44(iltins. Each).2 F -(attrib)3.44 E(ute)-.2 E(applies to all members of an array)108 367.2 Q -(.)-.65 E 1.647 -(Arrays are assigned to using compound assignments of the form)108 384 R -F3(name)4.147 E F0(=)A F1(\()A F0 -.25(va)C(lue).25 E F3(1)A F0 1.647 -(... v)4.147 F(alue)-.25 E F3(n)A F1(\))A F0 4.148(,w)C 1.648(here each) --4.148 F F3(value)108 396 Q F0 .212(may be of the form [)2.712 F F3 -(subscript)A F0(]=)A F3(string)A F0 5.211(.I)C(nde)-5.211 E -.15(xe)-.15 -G 2.711(da).15 G .211(rray assignments do not require an)-2.711 F .211 -(ything b)-.15 F(ut)-.2 E F3(string)2.711 E F0(.)A(Each)108 408 Q F3 -(value)2.529 E F0 .029(in the list is e)2.529 F .029 -(xpanded using all the shell e)-.15 F .029(xpansions described belo)-.15 -F 2.529(wu)-.25 G(nder)-2.529 E F2(EXP)2.529 E(ANSION)-.666 E/F4 9 -/Times-Roman@0 SF(.)A F0(When)4.53 E .996(assigning to inde)108 420 R --.15(xe)-.15 G 3.496(da).15 G .996(rrays, if the optional brack)-3.496 F -.996(ets and subscript are supplied, that inde)-.1 F 3.495(xi)-.15 G -3.495(sa)-3.495 G .995(ssigned to;)-3.495 F .416(otherwise the inde)108 -432 R 2.916(xo)-.15 G 2.916(ft)-2.916 G .417 -(he element assigned is the last inde)-2.916 F 2.917(xa)-.15 G .417 -(ssigned to by the statement plus one.)-2.917 F(Inde)5.417 E(x-)-.15 E -(ing starts at zero.)108 444 Q 1.288(When assigning to an associati)108 -460.8 R 1.588 -.15(ve a)-.25 H(rray).15 E 3.788(,t)-.65 G 1.288(he w) --3.788 F 1.288(ords in a compound assignment may be either assignment) --.1 F .608 +-.25(va)-.25 G .507(luate to a number).25 F 5.507(.T)-.55 G 3.007(oe) +-6.307 G(x-)-3.157 E 1.193(plicitly declare an inde)108 631.2 R -.15(xe) +-.15 G 3.693(da).15 G(rray)-3.693 E 3.693(,u)-.65 G(se)-3.693 E F2 +(declar)3.693 E 3.693<65ad>-.18 G(a)-3.693 E F0(name)3.693 E F1(\(see) +3.692 E F3 1.192(SHELL B)3.692 F(UIL)-.09 E 1.192(TIN COMMANDS)-.828 F +F1(belo)3.442 E(w\).)-.25 E F2(de-)6.192 E(clar)108 643.2 Q 2.5<65ad> +-.18 G(a)-2.5 E F0(name)2.5 E F2([)A F0(subscript)A F2(])A F1 +(is also accepted; the)2.5 E F0(subscript)2.5 E F1(is ignored.)2.5 E +(Associati)108 660 Q .3 -.15(ve a)-.25 H(rrays are created using).15 E +F2(declar)2.5 E 2.5<65ad>-.18 G(A)-2.5 E F0(name)2.5 E F1(.)A(Attrib)108 +676.8 Q .94(utes may be speci\214ed for an array v)-.2 F .941 +(ariable using the)-.25 F F2(declar)3.441 E(e)-.18 E F1(and)3.441 E F2 +-.18(re)3.441 G(adonly).18 E F1 -.2(bu)3.441 G 3.441(iltins. Each).2 F +(attrib)3.441 E(ute)-.2 E(applies to all members of an array)108 688.8 Q +(.)-.65 E 1.409 +(Arrays are assigned to using compound assignments of the form)108 705.6 +R F0(name)3.909 E F1(=)A F2(\()A F1 -.25(va)C(lue).25 E F0(1)A F1 -1.923 +1.666(... v)3.909 H(alue)-1.916 E F0(n)A F2(\))A F1 3.909(,w)C 1.409 +(here each)-3.909 F F0(value)108 717.6 Q F1 .211(may be of the form [) +2.711 F F0(subscript)A F1(]=)A F0(string)A F1 5.211(.I)C(nde)-5.211 E +-.15(xe)-.15 G 2.711(da).15 G .212(rray assignments do not require an) +-2.711 F .212(ything b)-.15 F(ut)-.2 E F0(string)2.712 E F1(.)A(Each)108 +729.6 Q F0(value)4.268 E F1 1.768(in the list is e)4.268 F 1.768 +(xpanded using the shell e)-.15 F 1.767(xpansions described belo)-.15 F +4.267(wu)-.25 G(nder)-4.267 E F3(EXP)4.267 E(ANSION)-.666 E/F4 9 +/Times-Roman@0 SF(,)A F1 -.2(bu)4.017 G(t).2 E(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(20)193.45 E 0 Cg EP +%%Page: 21 21 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E F0(value)108 84 Q F1 2.719(st)C .219(hat are v) +-2.719 F .219(alid v)-.25 F .219 +(ariable assignments including the brack)-.25 F .22 +(ets and subscript do not under)-.1 F .22(go brace e)-.18 F(xpan-)-.15 E +.622(sion and w)108 96 R .622(ord splitting, as with indi)-.1 F .621 +(vidual v)-.25 F .621(ariable assignments.)-.25 F .621 +(When assigning to inde)5.621 F -.15(xe)-.15 G 3.121(da).15 G .621 +(rrays, if the)-3.121 F .795(optional brack)108 108 R .795 +(ets and subscript are supplied, that inde)-.1 F 3.296(xi)-.15 G 3.296 +(sa)-3.296 G .796(ssigned to; otherwise the inde)-3.296 F 3.296(xo)-.15 +G 3.296(ft)-3.296 G .796(he element)-3.296 F(assigned is the last inde) +108 120 Q 2.5(xa)-.15 G(ssigned to by the statement plus one.)-2.5 E +(Inde)5 E(xing starts at zero.)-.15 E 1.288 +(When assigning to an associati)108 136.8 R 1.588 -.15(ve a)-.25 H(rray) +.15 E 3.788(,t)-.65 G 1.288(he w)-3.788 F 1.288 +(ords in a compound assignment may be either assignment)-.1 F .608 (statements, for which the subscript is required, or a list of w)108 -472.8 R .608(ords that is interpreted as a sequence of alter)-.1 F(-)-.2 -E 1.957(nating k)108 484.8 R -.15(ey)-.1 G 4.457(sa).15 G 1.957(nd v) --4.457 F(alues:)-.25 E F3(name)4.457 E F0(=)A F1(\()A F3 -.1(ke)4.457 G -1.957(y1 value1 k)-.2 F -.3(ey)-.1 G 4.457(2v).3 G(alue2)-4.457 E F0 -(...)4.457 E F1(\))A F0 6.957(.T)C 1.956 -(hese are treated identically to)-6.957 F F3(name)4.456 E F0(=)A F1(\()A -F0([)108 496.8 Q F3 -.1(ke)C(y1)-.2 E F0(]=)A F3(value1)A F0([)3.132 E -F3 -.1(ke)C(y2)-.2 E F0(]=)A F3(value2)A F0(...)3.132 E F1(\))A F0 5.632 -(.T)C .632(he \214rst w)-5.632 F .633(ord in the list determines ho)-.1 -F 3.133(wt)-.25 G .633(he remaining w)-3.133 F .633(ords are inter)-.1 F -(-)-.2 E .154 -(preted; all assignments in a list must be of the same type.)108 508.8 R +148.8 R .608(ords that is interpreted as a sequence of alter)-.1 F(-)-.2 +E 1.735(nating k)108 160.8 R -.15(ey)-.1 G 4.235(sa).15 G 1.735(nd v) +-4.235 F(alues:)-.25 E F0(name)4.235 E F1(=)A/F2 10/Times-Bold@0 SF(\()A +F0 -.1(ke)4.235 G 1.735(y1 value1 k)-.2 F -.3(ey)-.1 G 4.235(2v).3 G +(alue2)-4.235 E F1 1.666(...)4.234 G F2(\))-1.666 E F1 6.734(.T)C 1.734 +(hese are treated identically to)-6.734 F F0(name)4.234 E F1(=)A F2(\()A +F1([)108 172.8 Q F0 -.1(ke)C(y1)-.2 E F1(]=)A F0(value1)A F1([)2.91 E F0 +-.1(ke)C(y2)-.2 E F1(]=)A F0(value2)A F1 1.666(...)2.91 G F2(\))-1.666 E +F1 5.41(.T)C .41(he \214rst w)-5.41 F .411 +(ord in the list determines ho)-.1 F 2.911(wt)-.25 G .411 +(he remaining w)-2.911 F .411(ords are inter)-.1 F(-)-.2 E .154 +(preted; all assignments in a list must be of the same type.)108 184.8 R .153(When using k)5.153 F -.15(ey)-.1 G(/v).15 E .153(alue pairs, the k) -.25 F -.15(ey)-.1 G 2.653(sm).15 G .153(ay not be)-2.653 F -(missing or empty; a \214nal missing v)108 520.8 Q(alue is treated lik) +(missing or empty; a \214nal missing v)108 196.8 Q(alue is treated lik) -.25 E 2.5(et)-.1 G(he empty string.)-2.5 E .239 -(This syntax is also accepted by the)108 537.6 R F1(declar)2.739 E(e) --.18 E F0 -.2(bu)2.739 G 2.739(iltin. Indi).2 F .24 -(vidual array elements may be assigned to using the)-.25 F F3(name)108 -549.6 Q F0([)A F3(subscript)A F0(]=)A F3(value)A F0 1.917 +(This syntax is also accepted by the)108 213.6 R F2(declar)2.739 E(e) +-.18 E F1 -.2(bu)2.739 G 2.739(iltin. Indi).2 F .24 +(vidual array elements may be assigned to using the)-.25 F F0(name)108 +225.6 Q F1([)A F0(subscript)A F1(]=)A F0(value)A F1 1.917 (syntax introduced abo)4.417 F -.15(ve)-.15 G 6.917(.W).15 G 1.917 (hen assigning to an inde)-6.917 F -.15(xe)-.15 G 4.417(da).15 G(rray) --4.417 E 4.417(,i)-.65 G(f)-4.417 E F3(name)4.777 E F0 1.916(is sub-) -4.597 F .115(scripted by a ne)108 561.6 R -.05(ga)-.15 G(ti).05 E .415 +-4.417 E 4.417(,i)-.65 G(f)-4.417 E F0(name)4.777 E F1 1.916(is sub-) +4.597 F .115(scripted by a ne)108 237.6 R -.05(ga)-.15 G(ti).05 E .415 -.15(ve n)-.25 H(umber).15 E 2.615(,t)-.4 G .115 (hat number is interpreted as relati)-2.615 F .415 -.15(ve t)-.25 H 2.615(oo).15 G .116(ne greater than the maximum inde)-2.615 F(x)-.15 E -(of)108 573.6 Q F3(name)2.677 E F0 2.677(,s)C 2.677(on)-2.677 G -2.25 +(of)108 249.6 Q F0(name)2.677 E F1 2.677(,s)C 2.677(on)-2.677 G -2.25 -.15(eg a)-2.677 H(ti).15 E .477 -.15(ve i)-.25 H .177 (ndices count back from the end of the array).15 F 2.677(,a)-.65 G .177 (nd an inde)-2.677 F 2.676(xo)-.15 G 2.676<66ad>-2.676 G 2.676(1r)-2.676 -G .176(eferences the last el-)-2.676 F(ement.)108 585.6 Q .716 -(The += operator will append to an array v)108 602.4 R .717 +G .176(eferences the last el-)-2.676 F(ement.)108 261.6 Q .716 +(The += operator will append to an array v)108 278.4 R .717 (ariable when assigning using the compound assignment syntax;)-.25 F -(see)108 614.4 Q F2 -.666(PA)2.5 G(RAMETERS).666 E F0(abo)2.25 E -.15 -(ve)-.15 G(.).15 E(An)108 631.2 Q 3.576(ye)-.15 G 1.076 -(lement of an array may be referenced using ${)-3.576 F F3(name)A F0([)A -F3(subscript)A F0 3.575(]}. The)B 1.075(braces are required to a)3.575 F --.2(vo)-.2 G(id).2 E 1.541(con\215icts with pathname e)108 643.2 R 4.041 -(xpansion. If)-.15 F F3(subscript)4.041 E F0(is)4.041 E F1(@)4.041 E F0 -(or)4.041 E F1(*)4.041 E F0 4.041(,t)C 1.541(he w)-4.041 F 1.541(ord e) --.1 F 1.541(xpands to all members of)-.15 F F3(name)4.042 E F0(.)A 1.057 -(These subscripts dif)108 655.2 R 1.057(fer only when the w)-.25 F 1.057 -(ord appears within double quotes.)-.1 F 1.056(If the w)6.056 F 1.056 -(ord is double-quoted,)-.1 F(${)108 667.2 Q F3(name)A F0 .52([*]} e)B -.52(xpands to a single w)-.15 F .52(ord with the v)-.1 F .521 -(alue of each array member separated by the \214rst character)-.25 F -1.375(of the)108 679.2 R F2(IFS)3.875 E F0 1.375(special v)3.625 F 1.375 -(ariable, and ${)-.25 F F3(name)A F0 1.375([@]} e)B 1.375 -(xpands each element of)-.15 F F3(name)3.875 E F0 1.374(to a separate w) -3.875 F 3.874(ord. When)-.1 F 2.027(there are no array members, ${)108 -691.2 R F3(name)A F0 2.028([@]} e)B 2.028(xpands to nothing.)-.15 F -2.028(If the double-quoted e)7.028 F 2.028(xpansion occurs)-.15 F .759 -(within a w)108 703.2 R .759(ord, the e)-.1 F .759 -(xpansion of the \214rst parameter is joined with the be)-.15 F .759 -(ginning part of the original w)-.15 F(ord,)-.1 E .515(and the e)108 -715.2 R .516(xpansion of the last parameter is joined with the last par\ -t of the original w)-.15 F 3.016(ord. This)-.1 F .516(is analogous)3.016 -F .228(to the e)108 727.2 R .228(xpansion of the special parameters)-.15 -F F1(*)2.728 E F0(and)2.728 E F1(@)2.728 E F0(\(see)2.728 E F1 .228 -(Special P)2.728 F(arameters)-.1 E F0(abo)2.727 E -.15(ve)-.15 G 2.727 -(\). ${#).15 F F3(name)A F0([)A F3(subscript)A F0(]})A(GNU Bash 5.2)72 -768 Q(2022 September 19)135.955 E(20)185.115 E 0 Cg EP -%%Page: 21 21 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.15(ex)108 84 S -.886(pands to the length of ${).15 F/F1 10/Times-Italic@0 SF(name)A F0 -([)A F1(subscript)A F0 3.386(]}. If)B F1(subscript)3.386 E F0(is)3.386 E -/F2 10/Times-Bold@0 SF(*)3.386 E F0(or)3.386 E F2(@)3.386 E F0 3.386(,t) -C .886(he e)-3.386 F .886(xpansion is the number of ele-)-.15 F .295 -(ments in the array)108 96 R 5.295(.I)-.65 G 2.795(ft)-5.295 G(he)-2.795 -E F1(subscript)3.135 E F0 .295(used to reference an element of an inde) -3.475 F -.15(xe)-.15 G 2.794(da).15 G .294(rray e)-2.794 F -.25(va)-.25 -G .294(luates to a number).25 F .628 -(less than zero, it is interpreted as relati)108 108 R .928 -.15(ve t) --.25 H 3.128(oo).15 G .629(ne greater than the maximum inde)-3.128 F -3.129(xo)-.15 G 3.129(ft)-3.129 G .629(he array)-3.129 F 3.129(,s)-.65 G -3.129(on)-3.129 G -2.25 -.15(eg a)-3.129 H(ti).15 E -.15(ve)-.25 G -(indices count back from the end of the array)108 120 Q 2.5(,a)-.65 G -(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G -(eferences the last element.)-2.5 E .595(Referencing an array v)108 -136.8 R .595(ariable without a subscript is equi)-.25 F -.25(va)-.25 G -.595(lent to referencing the array with a subscript of).25 F 2.5(0. An) -108 148.8 R 2.5(yr)-.15 G(eference to a v)-2.5 E(ariable using a v)-.25 -E(alid subscript is le)-.25 E -.05(ga)-.15 G(l, and).05 E F2(bash)2.5 E -F0(will create an array if necessary)2.5 E(.)-.65 E(An array v)108 165.6 -Q(ariable is considered set if a subscript has been assigned a v)-.25 E +(see)108 290.4 Q/F3 9/Times-Bold@0 SF -.666(PA)2.5 G(RAMETERS).666 E F1 +(abo)2.25 E -.15(ve)-.15 G(.).15 E(An)108 307.2 Q 3.576(ye)-.15 G 1.076 +(lement of an array may be referenced using ${)-3.576 F F0(name)A F1([)A +F0(subscript)A F1 3.575(]}. The)B 1.075(braces are required to a)3.575 F +-.2(vo)-.2 G(id).2 E .576(con\215icts with pathname e)108 319.2 R 3.076 +(xpansion. If)-.15 F F0(subscript)3.076 E F1(is)3.076 E F2(@)3.076 E F1 +(or)3.076 E F2(*)3.076 E F1 3.076(,t)C .576(he w)-3.076 F .576(ord e)-.1 +F .576(xpands to all members of)-.15 F F0(name)3.077 E F1 3.077(,u)C(n-) +-3.077 E .098(less noted in the description of a b)108 331.2 R .097 +(uiltin or w)-.2 F .097(ord e)-.1 F 2.597(xpansion. These)-.15 F .097 +(subscripts dif)2.597 F .097(fer only when the w)-.25 F .097(ord ap-)-.1 +F .852(pears within double quotes.)108 343.2 R .852(If the w)5.852 F +.852(ord is double-quoted, ${)-.1 F F0(name)A F1 .853([*]} e)B .853 +(xpands to a single w)-.15 F .853(ord with the)-.1 F -.25(va)108 355.2 S +.013(lue of each array member separated by the \214rst character of the) +.25 F F3(IFS)2.513 E F1 .013(special v)2.263 F .013(ariable, and ${)-.25 +F F0(name)A F1 .013([@]} e)B(x-)-.15 E .483(pands each element of)108 +367.2 R F0(name)2.983 E F1 .484(to a separate w)2.984 F 2.984(ord. When) +-.1 F .484(there are no array members, ${)2.984 F F0(name)A F1 .484 +([@]} e)B(xpands)-.15 E 1.074(to nothing.)108 379.2 R 1.074 +(If the double-quoted e)6.074 F 1.074(xpansion occurs within a w)-.15 F +1.074(ord, the e)-.1 F 1.073(xpansion of the \214rst parameter is)-.15 F +.614(joined with the be)108 391.2 R .614(ginning part of the original w) +-.15 F .614(ord, and the e)-.1 F .615 +(xpansion of the last parameter is joined with)-.15 F .04 +(the last part of the original w)108 403.2 R 2.54(ord. This)-.1 F .04 +(is analogous to the e)2.54 F .04(xpansion of the special parameters) +-.15 F F2(*)2.54 E F1(and)2.54 E F2(@)2.54 E F1(\(see)2.54 E F2 1.245 +(Special P)108 415.2 R(arameters)-.1 E F1(abo)3.745 E -.15(ve)-.15 G +3.745(\). ${#).15 F F0(name)A F1([)A F0(subscript)A F1 1.245(]} e)B +1.246(xpands to the length of ${)-.15 F F0(name)A F1([)A F0(subscript)A +F1 3.746(]}. If)B F0(sub-)3.746 E(script)108 427.2 Q F1(is)2.728 E F2(*) +2.728 E F1(or)2.728 E F2(@)2.728 E F1 2.728(,t)C .228(he e)-2.728 F .228 +(xpansion is the number of elements in the array)-.15 F 5.227(.I)-.65 G +2.727(ft)-5.227 G(he)-2.727 E F0(subscript)3.067 E F1 .227 +(used to reference an)3.407 F .437(element of an inde)108 439.2 R -.15 +(xe)-.15 G 2.937(da).15 G .437(rray e)-2.937 F -.25(va)-.25 G .437 +(luates to a number less than zero, it is interpreted as relati).25 F +.738 -.15(ve t)-.25 H 2.938(oo).15 G .438(ne greater)-2.938 F .02 +(than the maximum inde)108 451.2 R 2.52(xo)-.15 G 2.52(ft)-2.52 G .02 +(he array)-2.52 F 2.52(,s)-.65 G 2.52(on)-2.52 G -2.25 -.15(eg a)-2.52 H +(ti).15 E .32 -.15(ve i)-.25 H .02 +(ndices count back from the end of the array).15 F 2.52(,a)-.65 G .02 +(nd an inde)-2.52 F(x)-.15 E(of \2551 references the last element.)108 +463.2 Q .595(Referencing an array v)108 480 R .595 +(ariable without a subscript is equi)-.25 F -.25(va)-.25 G .595 +(lent to referencing the array with a subscript of).25 F 2.5(0. An)108 +492 R 2.5(yr)-.15 G(eference to a v)-2.5 E(ariable using a v)-.25 E +(alid subscript is v)-.25 E(alid, and)-.25 E F2(bash)2.5 E F1 +(will create an array if necessary)2.5 E(.)-.65 E(An array v)108 508.8 Q +(ariable is considered set if a subscript has been assigned a v)-.25 E 2.5(alue. The)-.25 F(null string is a v)2.5 E(alid v)-.25 E(alue.)-.25 E -.417(It is possible to obtain the k)108 182.4 R -.15(ey)-.1 G 2.918(s\() -.15 G .418(indices\) of an array as well as the v)-2.918 F 2.918 -(alues. ${)-.25 F F2(!)A F1(name)A F0([)A F1(@)A F0 .418(]} and ${)B F2 -(!)A F1(name)A F0([)A F1(*)A F0(]})A -.15(ex)108 194.4 S .75 -(pand to the indices assigned in array v).15 F(ariable)-.25 E F1(name) -3.249 E F0 5.749(.T)C .749 +.418(It is possible to obtain the k)108 525.6 R -.15(ey)-.1 G 2.918(s\() +.15 G .418(indices\) of an array as well as the v)-2.918 F 2.917 +(alues. ${)-.25 F F2(!)A F0(name)A F1([)A F0(@)A F1 .417(]} and ${)B F2 +(!)A F0(name)A F1([)A F0(*)A F1(]})A -.15(ex)108 537.6 S .749 +(pand to the indices assigned in array v).15 F(ariable)-.25 E F0(name) +3.249 E F1 5.749(.T)C .75 (he treatment when in double quotes is similar to)-5.749 F(the e)108 -206.4 Q(xpansion of the special parameters)-.15 E F1(@)2.5 E F0(and)2.5 -E F1(*)2.5 E F0(within double quotes.)2.5 E(The)108 223.2 Q F2(unset) -2.766 E F0 -.2(bu)2.766 G .267(iltin is used to destro).2 F 2.767(ya)-.1 -G(rrays.)-2.767 E F2(unset)5.267 E F1(name)2.767 E F0([)A F1(subscript)A -F0 2.767(]d)C(estro)-2.767 E .267(ys the array element at inde)-.1 F(x) --.15 E F1(sub-)2.767 E(script)108 235.2 Q F0 2.858(,f)C .358 +549.6 Q(xpansion of the special parameters)-.15 E F0(@)2.5 E F1(and)2.5 +E F0(*)2.5 E F1(within double quotes.)2.5 E(The)108 566.4 Q F2(unset) +2.767 E F1 -.2(bu)2.767 G .267(iltin is used to destro).2 F 2.767(ya)-.1 +G(rrays.)-2.767 E F2(unset)5.267 E F0(name)2.767 E F1([)A F0(subscript)A +F1 2.767(]d)C(estro)-2.767 E .267(ys the array element at inde)-.1 F(x) +-.15 E F0(sub-)2.766 E(script)108 578.4 Q F1 2.858(,f)C .358 (or both inde)-2.858 F -.15(xe)-.15 G 2.858(da).15 G .358(nd associati) -2.858 F .658 -.15(ve a)-.25 H 2.858(rrays. Ne).15 F -.05(ga)-.15 G(ti) .05 E .658 -.15(ve s)-.25 H .358(ubscripts to inde).15 F -.15(xe)-.15 G -2.858(da).15 G .358(rrays are interpreted as de-)-2.858 F 1.204 -(scribed abo)108 247.2 R -.15(ve)-.15 G 6.204(.U).15 G 1.204 -(nsetting the last element of an array v)-6.204 F 1.205 -(ariable does not unset the v)-.25 F(ariable.)-.25 E F2(unset)6.205 E F1 -(name)3.705 E F0(,)A(where)108 259.2 Q F1(name)3.413 E F0 .913 -(is an array)3.413 F 3.413(,r)-.65 G(emo)-3.413 E -.15(ve)-.15 G 3.413 -(st).15 G .912(he entire array)-3.413 F(.)-.65 E F2(unset)5.912 E F1 -(name)3.412 E F0([)A F1(subscript)A F0 .912(], where)B F1(subscript) -3.412 E F0(is)3.412 E F2(*)3.412 E F0(or)3.412 E F2(@)3.412 E F0 3.412 -(,b)C(e-)-3.412 E(ha)108 271.2 Q -.15(ve)-.2 G 3.125(sd).15 G(if)-3.125 -E .625(ferently depending on whether)-.25 F F1(name)3.125 E F0 .626 -(is an inde)3.125 F -.15(xe)-.15 G 3.126(do).15 G 3.126(ra)-3.126 G -(ssociati)-3.126 E .926 -.15(ve a)-.25 H(rray).15 E 5.626(.I)-.65 G(f) --5.626 E F1(name)3.126 E F0 .626(is an associati)3.126 F -.15(ve)-.25 G -(array)108 283.2 Q 3.067(,t)-.65 G .567 -(his unsets the element with subscript)-3.067 F F2(*)3.067 E F0(or)3.067 -E F2(@)3.067 E F0 5.567(.I)C(f)-5.567 E F1(name)3.067 E F0 .567 +2.858(da).15 G .358(rrays are interpreted as de-)-2.858 F 1.205 +(scribed abo)108 590.4 R -.15(ve)-.15 G 6.205(.U).15 G 1.205 +(nsetting the last element of an array v)-6.205 F 1.204 +(ariable does not unset the v)-.25 F(ariable.)-.25 E F2(unset)6.204 E F0 +(name)3.704 E F1(,)A(where)108 602.4 Q F0(name)3.412 E F1 .912 +(is an array)3.412 F 3.412(,r)-.65 G(emo)-3.412 E -.15(ve)-.15 G 3.412 +(st).15 G .912(he entire array)-3.412 F(.)-.65 E F2(unset)5.912 E F0 +(name)3.412 E F1([)A F0(subscript)A F1 .912(], where)B F0(subscript) +3.413 E F1(is)3.413 E F2(*)3.413 E F1(or)3.413 E F2(@)3.413 E F1 3.413 +(,b)C(e-)-3.413 E(ha)108 614.4 Q -.15(ve)-.2 G 3.126(sd).15 G(if)-3.126 +E .626(ferently depending on whether)-.25 F F0(name)3.126 E F1 .626 +(is an inde)3.126 F -.15(xe)-.15 G 3.126(do).15 G 3.126(ra)-3.126 G +(ssociati)-3.126 E .925 -.15(ve a)-.25 H(rray).15 E 5.625(.I)-.65 G(f) +-5.625 E F0(name)3.125 E F1 .625(is an associati)3.125 F -.15(ve)-.25 G +(array)108 626.4 Q 3.067(,t)-.65 G .567 +(his unsets the element with subscript)-3.067 F F2(*)3.067 E F1(or)3.067 +E F2(@)3.067 E F1 5.567(.I)C(f)-5.567 E F0(name)3.067 E F1 .567 (is an inde)3.067 F -.15(xe)-.15 G 3.067(da).15 G(rray)-3.067 E 3.067 (,u)-.65 G .567(nset remo)-3.067 F -.15(ve)-.15 G 3.067(sa).15 G .567 -(ll of the)-3.067 F(elements b)108 295.2 Q(ut does not remo)-.2 E .3 --.15(ve t)-.15 H(he array itself.).15 E .028(When using a v)108 312 R -.028(ariable name with a subscript as an ar)-.25 F .029 -(gument to a command, such as with)-.18 F F2(unset)2.529 E F0 2.529(,w)C -.029(ithout us-)-2.529 F .938(ing the w)108 324 R .938(ord e)-.1 F .938 -(xpansion syntax described abo)-.15 F -.15(ve)-.15 G 3.437(,t).15 G .937 -(he ar)-3.437 F .937(gument is subject to pathname e)-.18 F 3.437 -(xpansion. If)-.15 F(path-)3.437 E(name e)108 336 Q +(ll of the)-3.067 F(elements b)108 638.4 Q(ut does not remo)-.2 E .3 +-.15(ve t)-.15 H(he array itself.).15 E .029(When using a v)108 655.2 R +.029(ariable name with a subscript as an ar)-.25 F .028 +(gument to a command, such as with)-.18 F F2(unset)2.528 E F1 2.528(,w)C +.028(ithout us-)-2.528 F .937(ing the w)108 667.2 R .937(ord e)-.1 F +.937(xpansion syntax described abo)-.15 F -.15(ve)-.15 G 3.437(,t).15 G +.937(he ar)-3.437 F .938(gument is subject to pathname e)-.18 F 3.438 +(xpansion. If)-.15 F(path-)3.438 E(name e)108 679.2 Q (xpansion is not desired, the ar)-.15 E(gument should be quoted.)-.18 E -(The)108 352.8 Q F2(declar)2.683 E(e)-.18 E F0(,)A F2(local)2.683 E F0 -2.683(,a)C(nd)-2.683 E F2 -.18(re)2.683 G(adonly).18 E F0 -.2(bu)2.683 G -.184(iltins each accept a).2 F F2<ad61>2.684 E F0 .184 -(option to specify an inde)2.684 F -.15(xe)-.15 G 2.684(da).15 G .184 -(rray and a)-2.684 F F2<ad41>2.684 E F0(op-)2.684 E .042 -(tion to specify an associati)108 364.8 R .341 -.15(ve a)-.25 H(rray).15 -E 5.041(.I)-.65 G 2.541(fb)-5.041 G .041(oth options are supplied,) --2.541 F F2<ad41>2.541 E F0(tak)2.541 E .041(es precedence.)-.1 F(The) -5.041 E F2 -.18(re)2.541 G(ad).18 E F0 -.2(bu)2.541 G .041(iltin ac-).2 -F .863(cepts a)108 376.8 R F2<ad61>3.363 E F0 .864 -(option to assign a list of w)3.363 F .864 -(ords read from the standard input to an array)-.1 F 5.864(.T)-.65 G(he) --5.864 E F2(set)3.364 E F0(and)3.364 E F2(declar)3.364 E(e)-.18 E F0 -.2 -(bu)108 388.8 S(iltins display array v).2 E(alues in a w)-.25 E -(ay that allo)-.1 E(ws them to be reused as assignments.)-.25 E/F3 10.95 -/Times-Bold@0 SF(EXP)72 405.6 Q(ANSION)-.81 E F0 .76(Expansion is perfo\ -rmed on the command line after it has been split into w)108 417.6 R 3.26 -(ords. There)-.1 F .76(are se)3.26 F -.15(ve)-.25 G 3.26(nk).15 G .76 -(inds of)-3.26 F -.15(ex)108 429.6 S .2(pansion performed:).15 F F1(br) -2.971 E .201(ace e)-.15 F(xpansion)-.2 E F0(,).24 E F1 .201(tilde e) -2.831 F(xpansion)-.2 E F0(,).24 E F1(par)3.951 E .201 -(ameter and variable e)-.15 F(xpansion)-.2 E F0(,).24 E F1 .201 -(command sub-)2.901 F(stitution)108 441.6 Q F0(,).24 E F1(arithmetic e) -2.83 E(xpansion)-.2 E F0(,).24 E F1(wor)2.84 E 2.5(ds)-.37 G(plitting) --2.5 E F0 2.5(,a).22 G(nd)-2.5 E F1(pathname e)3.75 E(xpansion)-.2 E F0 -(.).24 E .419(The order of e)108 458.4 R .419(xpansions is: brace e)-.15 -F .418(xpansion; tilde e)-.15 F .418(xpansion, parameter and v)-.15 F -.418(ariable e)-.25 F .418(xpansion, arithmetic)-.15 F -.15(ex)108 470.4 -S .195(pansion, and command substitution \(done in a left-to-right f).15 -F .196(ashion\); w)-.1 F .196(ord splitting; and pathname e)-.1 F(xpan-) --.15 E(sion.)108 482.4 Q .257 -(On systems that can support it, there is an additional e)108 499.2 R -.257(xpansion a)-.15 F -.25(va)-.2 G(ilable:).25 E F1(pr)2.757 E .257 -(ocess substitution)-.45 F F0 5.257(.T)C .256(his is per)-5.257 F(-)-.2 -E(formed at the same time as tilde, parameter)108 511.2 Q 2.5(,v)-.4 G +(The)108 696 Q F2(declar)2.684 E(e)-.18 E F1(,)A F2(local)2.684 E F1 +2.684(,a)C(nd)-2.684 E F2 -.18(re)2.684 G(adonly).18 E F1 -.2(bu)2.684 G +.184(iltins each accept a).2 F F2<ad61>2.684 E F1 .184 +(option to specify an inde)2.684 F -.15(xe)-.15 G 2.683(da).15 G .183 +(rray and a)-2.683 F F2<ad41>2.683 E F1(op-)2.683 E .041 +(tion to specify an associati)108 708 R .341 -.15(ve a)-.25 H(rray).15 E +5.041(.I)-.65 G 2.541(fb)-5.041 G .041(oth options are supplied,)-2.541 +F F2<ad41>2.541 E F1(tak)2.541 E .041(es precedence.)-.1 F(The)5.041 E +F2 -.18(re)2.542 G(ad).18 E F1 -.2(bu)2.542 G .042(iltin ac-).2 F .864 +(cepts a)108 720 R F2<ad61>3.364 E F1 .864(option to assign a list of w) +3.364 F .864(ords read from the standard input to an array)-.1 F 5.863 +(.T)-.65 G(he)-5.863 E F2(set)3.363 E F1(and)3.363 E F2(declar)3.363 E +(e)-.18 E F1(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(21)193.45 E 0 +Cg EP +%%Page: 22 22 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E -.2(bu)108 84 S(iltins display array v).2 E +(alues in a w)-.25 E(ay that allo)-.1 E +(ws them to be reused as assignments.)-.25 E/F2 10.95/Times-Bold@0 SF +(EXP)72 100.8 Q(ANSION)-.81 E F1 .764(Expansion is performed on the com\ +mand line after it has been split into w)108 112.8 R 3.264(ords. The)-.1 +F .765(shell performs these)3.264 F -.15(ex)108 124.8 S(pansions:).15 E +F0(br)3.797 E 1.027(ace e)-.15 F(xpansion)-.2 E F1(,).24 E F0 1.027 +(tilde e)3.657 F(xpansion)-.2 E F1(,).24 E F0(par)4.777 E 1.027 +(ameter and variable e)-.15 F(xpansion)-.2 E F1(,).24 E F0 1.027 +(command substitution)3.727 F F1(,).24 E F0(arithmetic e)108.33 136.8 Q +(xpansion)-.2 E F1(,).24 E F0(wor)2.84 E 2.5(ds)-.37 G(plitting)-2.5 E +F1(,).22 E F0(pathname e)3.75 E(xpansion)-.2 E F1 2.5(,a).24 G(nd)-2.5 E +F0(quote r)2.75 E(emo)-.37 E(val)-.1 E F1(.).51 E .418(The order of e) +108 153.6 R .418(xpansions is: brace e)-.15 F .418(xpansion; tilde e) +-.15 F .419(xpansion, parameter and v)-.15 F .419(ariable e)-.25 F .419 +(xpansion, arithmetic)-.15 F -.15(ex)108 165.6 S .28 +(pansion, and command substitution \(done in a left-to-right f).15 F .28 +(ashion\); w)-.1 F .28(ord splitting; pathname e)-.1 F(xpansion;)-.15 E +(and quote remo)108 177.6 Q -.25(va)-.15 G(l.).25 E .257 +(On systems that can support it, there is an additional e)108 194.4 R +.257(xpansion a)-.15 F -.25(va)-.2 G(ilable:).25 E F0(pr)2.757 E .257 +(ocess substitution)-.45 F F1 5.257(.T)C .257(his is per)-5.257 F(-)-.2 +E(formed at the same time as tilde, parameter)108 206.4 Q 2.5(,v)-.4 G (ariable, and arithmetic e)-2.75 E(xpansion and command substitution.) --.15 E .002(After these e)108 528 R .003 -(xpansions are performed, quote characters present in the original w) --.15 F .003(ord are remo)-.1 F -.15(ve)-.15 G 2.503(du).15 G .003 -(nless the)-2.503 F(y)-.15 E(ha)108 540 Q .3 -.15(ve b)-.2 H -(een quoted themselv).15 E(es \()-.15 E F1(quote r)A(emo)-.37 E(val)-.1 -E F0(\).)A .172(Only brace e)108 556.8 R .172(xpansion, w)-.15 F .171 -(ord splitting, and pathname e)-.1 F .171 -(xpansion can increase the number of w)-.15 F .171(ords of the e)-.1 F -(x-)-.15 E .776(pansion; other e)108 568.8 R .776(xpansions e)-.15 F -.776(xpand a single w)-.15 F .776(ord to a single w)-.1 F 3.276 -(ord. The)-.1 F .776(only e)3.276 F .776(xceptions to this are the e) --.15 F(x-)-.15 E .696(pansions of ")108 580.8 R F2($@)A F0 3.196("a)C -.696(nd ")-3.196 F F2(${)A F1(name)A F2([@]})A F0 .696 -(", and, in most cases,)B F2($*)3.196 E F0(and)3.196 E F2(${)3.196 E F1 -(name)A F2([*]})A F0 .695(as e)3.196 F .695(xplained abo)-.15 F .995 --.15(ve \()-.15 H(see).15 E/F4 9/Times-Bold@0 SF -.666(PA)3.195 G(-).666 -E(RAMETERS)108 592.8 Q/F5 9/Times-Roman@0 SF(\).)A F2(Brace Expansion)87 -609.6 Q F1(Br)108.58 621.6 Q .606(ace e)-.15 F(xpansion)-.2 E F0 .606 +-.15 E F0 .25(Quote r)108 223.2 R(emo)-.37 E(val)-.1 E F1 .25(is al)2.75 +F -.1(wa)-.1 G .25(ys performed last.).1 F .249(It remo)5.25 F -.15(ve) +-.15 G 2.749(sq).15 G .249(uote characters present in the original w) +-2.749 F .249(ord, not ones)-.1 F(resulting from one of the other e)108 +235.2 Q(xpansions, unless the)-.15 E 2.5(yh)-.15 G -2.25 -.2(av e)-2.5 H +(been quoted themselv)2.7 E(es.)-.15 E .171(Only brace e)108 252 R .171 +(xpansion, w)-.15 F .171(ord splitting, and pathname e)-.1 F .171 +(xpansion can increase the number of w)-.15 F .172(ords of the e)-.1 F +(x-)-.15 E .777(pansion; other e)108 264 R .776(xpansions e)-.15 F .776 +(xpand a single w)-.15 F .776(ord to a single w)-.1 F 3.276(ord. The)-.1 +F .776(only e)3.276 F .776(xceptions to this are the e)-.15 F(x-)-.15 E +.328(pansions of)108 276 R/F3 10/Times-Bold@0 SF("$@")2.828 E F1(and) +2.828 E F3("${)2.828 E F0(name)A F3([@]}")A F1 2.828(,a)C .328 +(nd, in most cases,)-2.828 F F3($*)2.828 E F1(and)2.828 E F3(${)2.828 E +F0(name)A F3([*]})A F1 .329(as e)2.828 F .329(xplained abo)-.15 F .629 +-.15(ve \()-.15 H(see).15 E/F4 9/Times-Bold@0 SF -.666(PA)2.829 G(-).666 +E(RAMETERS)108 288 Q/F5 9/Times-Roman@0 SF(\).)A F3(Brace Expansion)87 +304.8 Q F0(Br)108.58 316.8 Q .606(ace e)-.15 F(xpansion)-.2 E F1 .606 (is a mechanism by which arbitrary strings may be generated.)3.346 F -.606(This mechanism is similar)5.606 F(to)108 633.6 Q F1 .415 -(pathname e)2.915 F(xpansion)-.2 E F0 2.915(,b)C .415 +.606(This mechanism is similar)5.606 F(to)108 328.8 Q F0 .415 +(pathname e)2.915 F(xpansion)-.2 E F1 2.915(,b)C .415 (ut the \214lenames generated need not e)-3.115 F 2.915(xist. P)-.15 F .415(atterns to be brace e)-.15 F .415(xpanded tak)-.15 F 2.915(et)-.1 G -(he)-2.915 E .073(form of an optional)108 645.6 R F1(pr)3.823 E(eamble) --.37 E F0 2.573(,f).18 G(ollo)-2.573 E .073 +(he)-2.915 E .074(form of an optional)108 340.8 R F0(pr)3.823 E(eamble) +-.37 E F1 2.573(,f).18 G(ollo)-2.573 E .073 (wed by either a series of comma-separated strings or a sequence e)-.25 -F(xpres-)-.15 E .49(sion between a pair of braces, follo)108 657.6 R -.489(wed by an optional)-.25 F F1(postscript)4.239 E F0 5.489(.T).68 G -.489(he preamble is pre\214x)-5.489 F .489(ed to each string)-.15 F .659 -(contained within the braces, and the postscript is then appended to ea\ -ch resulting string, e)108 669.6 R .659(xpanding left to)-.15 F(right.) -108 681.6 Q .719(Brace e)108 698.4 R .719(xpansions may be nested.)-.15 -F .719(The results of each e)5.719 F .719 +F(xpres-)-.15 E .489(sion between a pair of braces, follo)108 352.8 R +.489(wed by an optional)-.25 F F0(postscript)4.239 E F1 5.49(.T).68 G +.49(he preamble is pre\214x)-5.49 F .49(ed to each string)-.15 F .659(c\ +ontained within the braces, and the postscript is then appended to each\ + resulting string, e)108 364.8 R .658(xpanding left to)-.15 F(right.)108 +376.8 Q .718(Brace e)108 393.6 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(preserv) -108 710.4 Q 2.5(ed. F)-.15 F(or e)-.15 E(xample, a)-.15 E F2({)A F0 -(d,c,b)A F2(})A F0 2.5(ee)C(xpands into `ade ace abe'.)-2.65 E 3.148(As) -108 727.2 S .648(equence e)-3.148 F .648(xpression tak)-.15 F .649 -(es the form)-.1 F F2({)3.149 E F1(x)A F2(..)A F1(y)A F2([..)A F1(incr)A -F2(]})A F0 3.149(,w)C(here)-3.149 E F1(x)3.149 E F0(and)3.149 E F1(y) -3.149 E F0 .649(are either inte)3.149 F .649 -(gers or single letters, and)-.15 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(21)185.115 E 0 Cg EP -%%Page: 22 22 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 -/Times-Italic@0 SF(incr)108 84 Q F0 2.615(,a)C 2.615(no)-2.615 G .115 -(ptional increment, is an inte)-2.615 F(ger)-.15 E 5.115(.W)-.55 G .115 -(hen inte)-5.115 F .115(gers are supplied, the e)-.15 F .115 -(xpression e)-.15 F .115(xpands to each num-)-.15 F 1.013(ber between) -108 96 R F1(x)3.513 E F0(and)3.513 E F1(y)3.513 E F0 3.513(,i)C(nclusi) --3.513 E -.15(ve)-.25 G 6.013(.S).15 G 1.013(upplied inte)-6.013 F 1.013 -(gers may be pre\214x)-.15 F 1.013(ed with)-.15 F F1(0)3.513 E F0 1.013 -(to force each term to ha)3.513 F 1.314 -.15(ve t)-.2 H(he).15 E .015 -(same width.)108 108 R .015(When either)5.015 F F1(x)2.515 E F0(or)2.515 -E F1(y)2.515 E F0(be)2.515 E .014(gins with a zero, the shell attempts \ -to force all generated terms to contain)-.15 F 1.13 -(the same number of digits, zero-padding where necessary)108 120 R 6.131 -(.W)-.65 G 1.131(hen letters are supplied, the e)-6.131 F 1.131 -(xpression e)-.15 F(x-)-.15 E .485(pands to each character le)108 132 R -.485(xicographically between)-.15 F F1(x)2.985 E F0(and)2.984 E F1(y) -2.984 E F0 2.984(,i)C(nclusi)-2.984 E -.15(ve)-.25 G 2.984(,u).15 G .484 -(sing the def)-2.984 F .484(ault C locale.)-.1 F .484(Note that)5.484 F -(both)108 144 Q F1(x)2.966 E F0(and)2.966 E F1(y)2.966 E F0 .467 -(must be of the same type \(inte)2.966 F .467(ger or letter\).)-.15 F -.467(When the increment is supplied, it is used as the)5.467 F(dif)108 -156 Q(ference between each term.)-.25 E(The def)5 E -(ault increment is 1 or \2551 as appropriate.)-.1 E .582(Brace e)108 -172.8 R .582(xpansion is performed before an)-.15 F 3.082(yo)-.15 G .581 -(ther e)-3.082 F .581(xpansions, and an)-.15 F 3.081(yc)-.15 G .581 -(haracters special to other e)-3.081 F(xpansions)-.15 E .015 -(are preserv)108 184.8 R .015(ed in the result.)-.15 F .015 -(It is strictly te)5.015 F(xtual.)-.15 E/F2 10/Times-Bold@0 SF(Bash) -5.016 E F0 .016(does not apply an)2.516 F 2.516(ys)-.15 G .016 -(yntactic interpretation to the con-)-2.516 F(te)108 196.8 Q +108 405.6 Q 2.5(ed. F)-.15 F(or e)-.15 E(xample, a)-.15 E F3({)A F1 +(d,c,b)A F3(})A F1 2.5(ee)C(xpands into \231ade ace abe\232.)-2.65 E +3.149(As)108 422.4 S .649(equence e)-3.149 F .649(xpression tak)-.15 F +.649(es the form)-.1 F F3({)3.149 E F0(x)A F3(..)A F0(y)A F3([..)A F0 +(incr)A F3(]})A F1 3.149(,w)C(here)-3.149 E F0(x)3.149 E F1(and)3.149 E +F0(y)3.149 E F1 .649(are either inte)3.149 F .648 +(gers or single letters, and)-.15 F F0(incr)108 434.4 Q F1 2.615(,a)C +2.615(no)-2.615 G .115(ptional increment, is an inte)-2.615 F(ger)-.15 E +5.115(.W)-.55 G .115(hen inte)-5.115 F .115(gers are supplied, the e) +-.15 F .115(xpression e)-.15 F .115(xpands to each num-)-.15 F .736 +(ber between)108 446.4 R F0(x)3.236 E F1(and)3.236 E F0(y)3.236 E F1 +3.236(,i)C(nclusi)-3.236 E -.15(ve)-.25 G 5.736(.I).15 G 3.236(ft)-5.736 +G .736(he supplied inte)-3.236 F .736(gers are pre\214x)-.15 F .736 +(ed with)-.15 F F0(0)3.236 E F1 3.236(,e)C .735(ach term will ha)-3.236 +F 1.035 -.15(ve t)-.2 H .735(he same).15 F .225 +(width, zero-padding if necessary)108 458.4 R 5.225(.W)-.65 G .226 +(hen either)-5.225 F F0(x)2.726 E F1(or)2.726 E F0(y)2.726 E F1(be)2.726 +E .226(gins with a zero, the shell attempts to force all gen-)-.15 F +1.073(erated terms to contain the same number of digits, zero-padding w\ +here necessary)108 470.4 R 6.072(.W)-.65 G 1.072(hen letters are sup-) +-6.072 F .567(plied, the e)108 482.4 R .567(xpression e)-.15 F .567 +(xpands to each character le)-.15 F .567(xicographically between)-.15 F +F0(x)3.067 E F1(and)3.067 E F0(y)3.068 E F1 3.068(,i)C(nclusi)-3.068 E +-.15(ve)-.25 G 3.068(,u).15 G .568(sing the de-)-3.068 F -.1(fa)108 +494.4 S .574(ult C locale.).1 F .574(Note that both)5.574 F F0(x)3.074 E +F1(and)3.074 E F0(y)3.074 E F1 .574(must be of the same type \(inte) +3.074 F .574(ger or letter\).)-.15 F .573(When the increment is)5.573 F +(supplied, it is used as the dif)108 506.4 Q(ference between each term.) +-.25 E(The def)5 E(ault increment is 1 or \2551 as appropriate.)-.1 E +.581(Brace e)108 523.2 R .581(xpansion is performed before an)-.15 F +3.081(yo)-.15 G .581(ther e)-3.081 F .581(xpansions, and an)-.15 F 3.082 +(yc)-.15 G .582(haracters special to other e)-3.082 F(xpansions)-.15 E +.016(are preserv)108 535.2 R .016(ed in the result.)-.15 F .016 +(It is strictly te)5.016 F(xtual.)-.15 E F3(Bash)5.016 E F1 .015 +(does not apply an)2.516 F 2.515(ys)-.15 G .015 +(yntactic interpretation to the con-)-2.515 F(te)108 547.2 Q (xt of the e)-.15 E(xpansion or the te)-.15 E(xt between the braces.) --.15 E 2.502(Ac)108 213.6 S .002(orrectly-formed brace e)-2.502 F .001(\ -xpansion must contain unquoted opening and closing braces, and at least\ - one un-)-.15 F .457(quoted comma or a v)108 225.6 R .458 -(alid sequence e)-.25 F 2.958(xpression. An)-.15 F 2.958(yi)-.15 G .458 -(ncorrectly formed brace e)-2.958 F .458(xpansion is left unchanged.) --.15 F(A)108 237.6 Q F2({)2.522 E F0(or)2.522 E F2(,)2.522 E F0 .022 -(may be quoted with a backslash to pre)2.522 F -.15(ve)-.25 G .021 -(nt its being considered part of a brace e).15 F 2.521(xpression. T)-.15 -F 2.521(oa)-.8 G -.2(vo)-2.721 G(id).2 E .172 -(con\215icts with parameter e)108 249.6 R .172(xpansion, the string)-.15 -F F2(${)2.672 E F0 .172(is not considered eligible for brace e)2.672 F -.172(xpansion, and inhibits)-.15 F(brace e)108 261.6 Q -(xpansion until the closing)-.15 E F2(})2.5 E F0(.)A 1.476(This constru\ +-.15 E 2.501(Ac)108 564 S .001(orrectly-formed brace e)-2.501 F .001(xp\ +ansion must contain unquoted opening and closing braces, and at least o\ +ne un-)-.15 F .458(quoted comma or a v)108 576 R .458(alid sequence e) +-.25 F 2.958(xpression. An)-.15 F 2.958(yi)-.15 G .458 +(ncorrectly formed brace e)-2.958 F .457(xpansion is left unchanged.) +-.15 F(A)108 588 Q F3({)2.521 E F1(or)2.521 E F3(,)2.521 E F1 .021 +(may be quoted with a backslash to pre)2.521 F -.15(ve)-.25 G .022 +(nt its being considered part of a brace e).15 F 2.522(xpression. T)-.15 +F 2.522(oa)-.8 G -.2(vo)-2.722 G(id).2 E .172 +(con\215icts with parameter e)108 600 R .172(xpansion, the string)-.15 F +F3(${)2.672 E F1 .172(is not considered eligible for brace e)2.672 F +.172(xpansion, and inhibits)-.15 F(brace e)108 612 Q +(xpansion until the closing)-.15 E F3(})2.5 E F1(.)A 1.476(This constru\ ct is typically used as shorthand when the common pre\214x of the strin\ -gs to be generated is)108 278.4 R(longer than in the abo)108 290.4 Q .3 +gs to be generated is)108 628.8 R(longer than in the abo)108 640.8 Q .3 -.15(ve ex)-.15 H(ample:).15 E(mkdir /usr/local/src/bash/{old,ne)144 -307.2 Q -.65(w,)-.25 G(dist,b).65 E(ugs})-.2 E(or)108 319.2 Q(cho)144 -331.2 Q(wn root /usr/{ucb/{e)-.25 E(x,edit},lib/{e)-.15 E(x?.?*,ho)-.15 -E(w_e)-.25 E(x}})-.15 E .618(Brace e)108 348 R .618 +657.6 Q -.65(w,)-.25 G(dist,b).65 E(ugs})-.2 E(or)108 669.6 Q(cho)144 +681.6 Q(wn root /usr/{ucb/{e)-.25 E(x,edit},lib/{e)-.15 E(x?.?*,ho)-.15 +E(w_e)-.25 E(x}})-.15 E .618(Brace e)108 698.4 R .618 (xpansion introduces a slight incompatibility with historical v)-.15 F -.618(ersions of)-.15 F F2(sh)3.118 E F0(.)A F2(sh)5.618 E F0 .618 -(does not treat open-)3.118 F .248 -(ing or closing braces specially when the)108 360 R 2.748(ya)-.15 G .247 -(ppear as part of a w)-2.748 F .247(ord, and preserv)-.1 F .247 -(es them in the output.)-.15 F F2(Bash)5.247 E F0(remo)108 372 Q -.15 +.618(ersions of)-.15 F F3(sh)3.118 E F1(.)A F3(sh)5.618 E F1 .618 +(does not treat open-)3.118 F .247 +(ing or closing braces specially when the)108 710.4 R 2.747(ya)-.15 G +.247(ppear as part of a w)-2.747 F .248(ord, and preserv)-.1 F .248 +(es them in the output.)-.15 F F3(Bash)5.248 E F1(remo)108 722.4 Q -.15 (ve)-.15 G 3.53(sb).15 G 1.03(races from w)-3.53 F 1.03 (ords as a consequence of brace e)-.1 F 3.53(xpansion. F)-.15 F 1.03 -(or e)-.15 F 1.03(xample, a w)-.15 F 1.03(ord entered to)-.1 F F2(sh) -3.53 E F0(as)3.53 E F1(\214le{1,2})108 384 Q F0 .515 -(appears identically in the output.)3.015 F .515(The same w)5.515 F .515 -(ord is output as)-.1 F F1 .514(\214le1 \214le2)4.925 F F0 .514(after e) -3.034 F .514(xpansion by)-.15 F F2(bash)3.014 E F0(.)A .436 -(If strict compatibility with)108 396 R F2(sh)2.936 E F0 .436 -(is desired, start)2.936 F F2(bash)2.936 E F0 .436(with the)2.936 F F2 -(+B)2.936 E F0 .436(option or disable brace e)2.936 F .437 -(xpansion with the)-.15 F F2(+B)108 408 Q F0(option to the)2.5 E F2(set) -2.5 E F0(command \(see)2.5 E/F3 9/Times-Bold@0 SF(SHELL B)2.5 E(UIL)-.09 -E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F2 -.18(Ti)87 424.8 S -(lde Expansion).18 E F0 1.087(If a w)108 436.8 R 1.087(ord be)-.1 F -1.087(gins with an unquoted tilde character \(`)-.15 F F2(~)A F0 1.086 -('\), all of the characters preceding the \214rst unquoted)B .185(slash\ - \(or all characters, if there is no unquoted slash\) are considered a) -108 448.8 R F1(tilde-pr)2.685 E(e\214x)-.37 E F0 5.185(.I)C 2.685(fn) --5.185 G .185(one of the characters)-2.685 F .726(in the tilde-pre\214x\ - are quoted, the characters in the tilde-pre\214x follo)108 460.8 R .725 -(wing the tilde are treated as a possible)-.25 F F1(lo)108 472.8 Q .522 -(gin name)-.1 F F0 5.522(.I)C 3.022(ft)-5.522 G .522 -(his login name is the null string, the tilde is replaced with the v) --3.022 F .523(alue of the shell parameter)-.25 F F3(HOME)108 484.8 Q/F4 -9/Times-Roman@0 SF(.)A F0(If)4.787 E F3(HOME)2.787 E F0 .287 -(is unset, the home directory of the user e)2.537 F -.15(xe)-.15 G .286 -(cuting the shell is substituted instead.).15 F(Other)5.286 E(-)-.2 E(w\ -ise, the tilde-pre\214x is replaced with the home directory associated \ -with the speci\214ed login name.)108 496.8 Q .092 -(If the tilde-pre\214x is a `~+', the v)108 513.6 R .092 -(alue of the shell v)-.25 F(ariable)-.25 E F3(PWD)2.592 E F0 .092 -(replaces the tilde-pre\214x.)2.342 F .093(If the tilde-pre\214x is) -5.093 F 3.404(a`)108 525.6 S .904(~\255', the v)-3.404 F .904 -(alue of the shell v)-.25 F(ariable)-.25 E F3(OLDPWD)3.404 E F4(,)A F0 -.904(if it is set, is substituted.)3.154 F .903(If the characters follo) -5.903 F .903(wing the)-.25 F .879 -(tilde in the tilde-pre\214x consist of a number)108 537.6 R F1(N)3.379 -E F0 3.379(,o)C .879(ptionally pre\214x)-3.379 F .88 -(ed by a `+' or a `\255', the tilde-pre\214x is re-)-.15 F .138(placed \ -with the corresponding element from the directory stack, as it w)108 -549.6 R .138(ould be displayed by the)-.1 F F2(dirs)2.638 E F0 -.2(bu) -2.638 G(iltin).2 E(in)108 561.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.838(dw).1 G -.338(ith the tilde-pre\214x as an ar)-2.838 F 2.838(gument. If)-.18 F -.338(the characters follo)2.838 F .338 -(wing the tilde in the tilde-pre\214x consist)-.25 F -(of a number without a leading `+' or `\255', `+' is assumed.)108 573.6 -Q(If the login name is in)108 590.4 Q -.25(va)-.4 G(lid, or the tilde e) -.25 E(xpansion f)-.15 E(ails, the w)-.1 E(ord is unchanged.)-.1 E .167 -(Each v)108 607.2 R .167(ariable assignment is check)-.25 F .167 -(ed for unquoted tilde-pre\214x)-.1 F .167(es immediately follo)-.15 F -.167(wing a)-.25 F F2(:)2.667 E F0 .167(or the \214rst)2.667 F F2(=) -2.666 E F0 5.166(.I)C(n)-5.166 E .467(these cases, tilde e)108 619.2 R -.467(xpansion is also performed.)-.15 F(Consequently)5.467 E 2.967(,o) --.65 G .468(ne may use \214lenames with tildes in assign-)-2.967 F -(ments to)108 631.2 Q F3 -.666(PA)2.5 G(TH)-.189 E F4(,)A F3(MAILP)2.25 -E -.855(AT)-.666 G(H).855 E F4(,)A F0(and)2.25 E F3(CDP)2.5 E -.855(AT) --.666 G(H).855 E F4(,)A F0(and the shell assigns the e)2.25 E(xpanded v) --.15 E(alue.)-.25 E .024(Bash also performs tilde e)108 648 R .024 -(xpansion on w)-.15 F .023(ords satisfying the conditions of v)-.1 F -.023(ariable assignments \(as described)-.25 F(abo)108 660 Q .769 -.15 -(ve u)-.15 H(nder).15 E F3 -.666(PA)2.969 G(RAMETERS).666 E F4(\))A F0 -.469(when the)2.719 F 2.969(ya)-.15 G .469(ppear as ar)-2.969 F .469 -(guments to simple commands.)-.18 F .47(Bash does not do this,)5.469 F --.15(ex)108 672 S(cept for the).15 E F1(declar)2.5 E(ation)-.15 E F0 -(commands listed abo)2.5 E -.15(ve)-.15 G 2.5(,w).15 G(hen in)-2.5 E F1 -(posix mode)2.5 E F0(.)A F2 -.1(Pa)87 688.8 S(rameter Expansion).1 E F0 -.2(The `)108 700.8 R F2($)A F0 2.7('c)C .199 -(haracter introduces parameter e)-2.7 F .199 -(xpansion, command substitution, or arithmetic e)-.15 F 2.699 -(xpansion. The)-.15 F(pa-)2.699 E .314(rameter name or symbol to be e) -108 712.8 R .314 -(xpanded may be enclosed in braces, which are optional b)-.15 F .314 -(ut serv)-.2 F 2.814(et)-.15 G 2.814(op)-2.814 G(rotect)-2.814 E .415 -(the v)108 724.8 R .415(ariable to be e)-.25 F .415 -(xpanded from characters immediately follo)-.15 F .414 -(wing it which could be interpreted as part of)-.25 F(GNU Bash 5.2)72 -768 Q(2022 September 19)135.955 E(22)185.115 E 0 Cg EP +(or e)-.15 F 1.03(xample, a w)-.15 F 1.03(ord entered to)-.1 F F3(sh) +3.53 E F1(as)3.53 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(22) +193.45 E 0 Cg EP %%Page: 23 23 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(the name.)108 84 Q -1.189(When braces are used, the matching ending brace is the \214rst `) -108 100.8 R/F1 10/Times-Bold@0 SF(})A F0 3.69('n)C 1.19 -(ot escaped by a backslash or within a)-3.69 F .822 -(quoted string, and not within an embedded arithmetic e)108 112.8 R .821 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E F0(\214le{1,2})108 84 Q F1 .514 +(appears identically in the output.)3.014 F .515(The same w)5.515 F .515 +(ord is output as)-.1 F F0 .515(\214le1 \214le2)4.925 F F1 .515(after e) +3.035 F .515(xpansion by)-.15 F/F2 10/Times-Bold@0 SF(bash)3.015 E F1(.) +A .437(If strict compatibility with)108 96 R F2(sh)2.936 E F1 .436 +(is desired, start)2.936 F F2(bash)2.936 E F1 .436(with the)2.936 F F2 +(+B)2.936 E F1 .436(option or disable brace e)2.936 F .436 +(xpansion with the)-.15 F F2(+B)108 108 Q F1(option to the)2.5 E F2(set) +2.5 E F1(command \(see)2.5 E/F3 9/Times-Bold@0 SF(SHELL B)2.5 E(UIL)-.09 +E(TIN COMMANDS)-.828 E F1(belo)2.25 E(w\).)-.25 E F2 -.18(Ti)87 124.8 S +(lde Expansion).18 E F1 .845(If a w)108 136.8 R .846(ord be)-.1 F .846 +(gins with an unquoted tilde character \(\231)-.15 F F2<01>A F1 .846 +(\232\), all of the characters preceding the \214rst unquoted)B .185(sl\ +ash \(or all characters, if there is no unquoted slash\) are considered\ + a)108 148.8 R F0(tilde-pr)2.685 E(e\214x)-.37 E F1 5.185(.I)C 2.685(fn) +-5.185 G .185(one of the characters)-2.685 F .725(in the tilde-pre\214x\ + are quoted, the characters in the tilde-pre\214x follo)108 160.8 R .726 +(wing the tilde are treated as a possible)-.25 F F0(lo)108 172.8 Q .523 +(gin name)-.1 F F1 5.523(.I)C 3.023(ft)-5.523 G .523 +(his login name is the null string, the tilde is replaced with the v) +-3.023 F .522(alue of the shell parameter)-.25 F F3(HOME)108 184.8 Q/F4 +9/Times-Roman@0 SF(.)A F1(If)4.786 E F3(HOME)2.786 E F1 .287 +(is unset, the home directory of the user e)2.536 F -.15(xe)-.15 G .287 +(cuting the shell is substituted instead.).15 F(Other)5.287 E(-)-.2 E(w\ +ise, the tilde-pre\214x is replaced with the home directory associated \ +with the speci\214ed login name.)108 196.8 Q .368 +(If the tilde-pre\214x is a \231\001+\232, the v)108 213.6 R .368 +(alue of the shell v)-.25 F(ariable)-.25 E F3(PWD)2.868 E F1 .368 +(replaces the tilde-pre\214x.)2.618 F .368(If the tilde-pre\214x)5.368 F +.185(is a \231\001\255\232, the v)108 225.6 R .185(alue of the shell v) +-.25 F(ariable)-.25 E F3(OLDPWD)2.685 E F4(,)A F1 .185 +(if it is set, is substituted.)2.435 F .185(If the characters follo) +5.185 F .185(wing the)-.25 F .658 +(tilde in the tilde-pre\214x consist of a number)108 237.6 R F0(N)3.158 +E F1 3.158(,o)C .658(ptionally pre\214x)-3.158 F .657 +(ed by a \231+\232 or a \231\255\232, the tilde-pre\214x is re-)-.15 F +.138(placed with the corresponding element from the directory stack, as\ + it w)108 249.6 R .138(ould be displayed by the)-.1 F F2(dirs)2.639 E F1 +-.2(bu)2.639 G(iltin).2 E(in)108 261.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.839 +(dw).1 G .338(ith the tilde-pre\214x as an ar)-2.839 F 2.838(gument. If) +-.18 F .338(the characters follo)2.838 F .338 +(wing the tilde in the tilde-pre\214x consist)-.25 F(of a number withou\ +t a leading \231+\232 or \231\255\232, \231+\232 is assumed.)108 273.6 Q +(If the login name is in)108 290.4 Q -.25(va)-.4 G(lid, or the tilde e) +.25 E(xpansion f)-.15 E(ails, the w)-.1 E(ord is unchanged.)-.1 E .166 +(Each v)108 307.2 R .167(ariable assignment is check)-.25 F .167 +(ed for unquoted tilde-pre\214x)-.1 F .167(es immediately follo)-.15 F +.167(wing a)-.25 F F2(:)2.667 E F1 .167(or the \214rst)2.667 F F2(=) +2.667 E F1 5.167(.I)C(n)-5.167 E .468(these cases, tilde e)108 319.2 R +.468(xpansion is also performed.)-.15 F(Consequently)5.467 E 2.967(,o) +-.65 G .467(ne may use \214lenames with tildes in assign-)-2.967 F +(ments to)108 331.2 Q F3 -.666(PA)2.5 G(TH)-.189 E F4(,)A F3(MAILP)2.25 +E -.855(AT)-.666 G(H).855 E F4(,)A F1(and)2.25 E F3(CDP)2.5 E -.855(AT) +-.666 G(H).855 E F4(,)A F1(and the shell assigns the e)2.25 E(xpanded v) +-.15 E(alue.)-.25 E F2(Bash)108 348 Q F1 1.768(also performs tilde e) +4.268 F 1.768(xpansion on w)-.15 F 1.769 +(ords satisfying the conditions of v)-.1 F 1.769 +(ariable assignments \(as de-)-.25 F .464(scribed abo)108 360 R .764 +-.15(ve u)-.15 H(nder).15 E F3 -.666(PA)2.964 G(RAMETERS).666 E F4(\))A +F1 .464(when the)2.714 F 2.964(ya)-.15 G .464(ppear as ar)-2.964 F .463 +(guments to simple commands.)-.18 F F2(Bash)5.463 E F1 .463(does not) +2.963 F(do this, e)108 372 Q(xcept for the)-.15 E F0(declar)2.5 E(ation) +-.15 E F1(commands listed abo)2.5 E -.15(ve)-.15 G 2.5(,w).15 G(hen in) +-2.5 E F0(posix mode)2.5 E F1(.)A F2 -.1(Pa)87 388.8 S +(rameter Expansion).1 E F1 .014(The \231)108 400.8 R F2($)A F1 2.514 +<9a63>C .014(haracter introduces parameter e)-2.514 F .014 +(xpansion, command substitution, or arithmetic e)-.15 F 2.515 +(xpansion. The)-.15 F(pa-)2.515 E .314(rameter name or symbol to be e) +108 412.8 R .314 +(xpanded may be enclosed in braces, which are optional b)-.15 F .314 +(ut serv)-.2 F 2.813(et)-.15 G 2.813(op)-2.813 G(rotect)-2.813 E .414 +(the v)108 424.8 R .414(ariable to be e)-.25 F .414 +(xpanded from characters immediately follo)-.15 F .415 +(wing it which could be interpreted as part of)-.25 F(the name.)108 +436.8 Q 1.073 +(When braces are used, the matching ending brace is the \214rst \231)108 +453.6 R F2(})A F1 3.573<9a6e>C 1.072 +(ot escaped by a backslash or within a)-3.573 F .821 +(quoted string, and not within an embedded arithmetic e)108 465.6 R .822 (xpansion, command substitution, or parameter e)-.15 F(x-)-.15 E -(pansion.)108 124.8 Q(${)108 141.6 Q/F2 10/Times-Italic@0 SF(par)A -(ameter)-.15 E F0(})A .106(The v)144 153.6 R .106(alue of)-.25 F F2(par) -2.606 E(ameter)-.15 E F0 .106(is substituted.)2.606 F .106 -(The braces are required when)5.106 F F2(par)3.856 E(ameter)-.15 E F0 -.106(is a positional pa-)3.336 F .111 -(rameter with more than one digit, or when)144 165.6 R F2(par)3.861 E -(ameter)-.15 E F0 .111(is follo)3.341 F .11 +(pansion.)108 477.6 Q(${)108 494.4 Q F0(par)A(ameter)-.15 E F1(})A .106 +(The v)144 506.4 R .106(alue of)-.25 F F0(par)2.606 E(ameter)-.15 E F1 +.106(is substituted.)2.606 F .106(The braces are required when)5.106 F +F0(par)3.856 E(ameter)-.15 E F1 .106(is a positional pa-)3.336 F .11 +(rameter with more than one digit, or when)144 518.4 R F0(par)3.86 E +(ameter)-.15 E F1 .111(is follo)3.341 F .111 (wed by a character which is not to be)-.25 F .208 -(interpreted as part of its name.)144 177.6 R(The)5.208 E F2(par)2.708 E -(ameter)-.15 E F0 .208(is a shell parameter as described abo)2.708 F --.15(ve)-.15 G F1 -.74(PA)2.858 G(RAME-).74 E(TERS)144 189.6 Q F0 2.5 -(\)o)C 2.5(ra)-2.5 G 2.5(na)-2.5 G(rray reference \()-2.5 E F1(Arrays)A -F0(\).)A .347(If the \214rst character of)108 206.4 R F2(par)2.846 E -(ameter)-.15 E F0 .346(is an e)2.846 F .346(xclamation point \()-.15 F -F1(!)A F0 .346(\), and)B F2(par)2.846 E(ameter)-.15 E F0 .346(is not a) -2.846 F F2(namer)2.846 E(ef)-.37 E F0 2.846(,i)C 2.846(ti)-2.846 G -(ntroduces)-2.846 E 2.906(al)108 218.4 S -2.15 -.25(ev e)-2.906 H 2.906 -(lo).25 G 2.906(fi)-2.906 G(ndirection.)-2.906 E F1(Bash)5.406 E F0 .406 +(interpreted as part of its name.)144 530.4 R(The)5.208 E F0(par)2.708 E +(ameter)-.15 E F1 .208(is a shell parameter as described abo)2.708 F +-.15(ve)-.15 G F2 -.74(PA)2.858 G(RAME-).74 E(TERS)144 542.4 Q F1 2.5 +(\)o)C 2.5(ra)-2.5 G 2.5(na)-2.5 G(rray reference \()-2.5 E F2(Arrays)A +F1(\).)A .346(If the \214rst character of)108 559.2 R F0(par)2.846 E +(ameter)-.15 E F1 .346(is an e)2.846 F .346(xclamation point \()-.15 F +F2(!)A F1 .346(\), and)B F0(par)2.846 E(ameter)-.15 E F1 .346(is not a) +2.846 F F0(namer)2.846 E(ef)-.37 E F1 2.847(,i)C 2.847(ti)-2.847 G +(ntroduces)-2.847 E 2.907(al)108 571.2 S -2.15 -.25(ev e)-2.907 H 2.907 +(lo).25 G 2.906(fi)-2.907 G(ndirection.)-2.906 E F2(Bash)5.406 E F1 .406 (uses the v)2.906 F .406(alue formed by e)-.25 F .406 -(xpanding the rest of)-.15 F F2(par)2.906 E(ameter)-.15 E F0 .406 -(as the ne)2.906 F(w)-.25 E F2(par)2.907 E(ame-)-.15 E(ter)108 230.4 Q -F0 2.579(;t)C .079(his is then e)-2.579 F .079(xpanded and that v)-.15 F -.079(alue is used in the rest of the e)-.25 F .078 -(xpansion, rather than the e)-.15 F .078(xpansion of the)-.15 F -(original)108 242.4 Q F2(par)2.542 E(ameter)-.15 E F0 5.042(.T)C .042 -(his is kno)-5.042 F .042(wn as)-.25 F F2(indir)2.543 E .043(ect e)-.37 -F(xpansion)-.2 E F0 5.043(.T)C .043(he v)-5.043 F .043 -(alue is subject to tilde e)-.25 F .043(xpansion, parameter)-.15 F -.15 -(ex)108 254.4 S .249(pansion, command substitution, and arithmetic e).15 -F 2.749(xpansion. If)-.15 F F2(par)2.749 E(ameter)-.15 E F0 .248 -(is a nameref, this e)2.749 F .248(xpands to the)-.15 F 1.51 -(name of the parameter referenced by)108 266.4 R F2(par)4.01 E(ameter) --.15 E F0 1.51(instead of performing the complete indirect e)4.01 F -(xpansion.)-.15 E .388(The e)108 278.4 R .387 -(xceptions to this are the e)-.15 F .387(xpansions of ${)-.15 F F1(!)A -F2(pr)A(e\214x)-.37 E F1(*)A F0 2.887(}a)C .387(nd ${)-2.887 F F1(!)A F2 -(name)A F0([)A F2(@)A F0 .387(]} described belo)B 4.187 -.65(w. T)-.25 H -.387(he e).65 F(xclama-)-.15 E(tion point must immediately follo)108 -290.4 Q 2.5(wt)-.25 G(he left brace in order to introduce indirection.) --2.5 E .334(In each of the cases belo)108 307.2 R -.65(w,)-.25 G F2(wor) -3.484 E(d)-.37 E F0 .334(is subject to tilde e)2.834 F .334 +(xpanding the rest of)-.15 F F0(par)2.906 E(ameter)-.15 E F1 .406 +(as the ne)2.906 F(w)-.25 E F0(par)2.906 E(ame-)-.15 E(ter)108 583.2 Q +F1 2.578(;t)C .078(his is then e)-2.578 F .078(xpanded and that v)-.15 F +.079(alue is used in the rest of the e)-.25 F .079 +(xpansion, rather than the e)-.15 F .079(xpansion of the)-.15 F +(original)108 595.2 Q F0(par)2.543 E(ameter)-.15 E F1 5.043(.T)C .043 +(his is kno)-5.043 F .043(wn as)-.25 F F0(indir)2.543 E .043(ect e)-.37 +F(xpansion)-.2 E F1 5.043(.T)C .043(he v)-5.043 F .042 +(alue is subject to tilde e)-.25 F .042(xpansion, parameter)-.15 F -.15 +(ex)108 607.2 S .248(pansion, command substitution, and arithmetic e).15 +F 2.748(xpansion. If)-.15 F F0(par)2.749 E(ameter)-.15 E F1 .249 +(is a nameref, this e)2.749 F .249(xpands to the)-.15 F 1.51 +(name of the parameter referenced by)108 619.2 R F0(par)4.01 E(ameter) +-.15 E F1 1.51(instead of performing the complete indirect e)4.01 F +(xpansion.)-.15 E .387(The e)108 631.2 R .387 +(xceptions to this are the e)-.15 F .387(xpansions of ${)-.15 F F2(!)A +F0(pr)A(e\214x)-.37 E F2(*)A F1 2.887(}a)C .387(nd ${)-2.887 F F2(!)A F0 +(name)A F1([)A F0(@)A F1 .387(]} described belo)B 4.188 -.65(w. T)-.25 H +.388(he e).65 F(xclama-)-.15 E(tion point must immediately follo)108 +643.2 Q 2.5(wt)-.25 G(he left brace in order to introduce indirection.) +-2.5 E .334(In each of the cases belo)108 660 R -.65(w,)-.25 G F0(wor) +3.484 E(d)-.37 E F1 .334(is subject to tilde e)2.834 F .334 (xpansion, parameter e)-.15 F .334(xpansion, command substitution,)-.15 -F(and arithmetic e)108 319.2 Q(xpansion.)-.15 E .067 -(When not performing substring e)108 336 R .067 +F(and arithmetic e)108 672 Q(xpansion.)-.15 E .066 +(When not performing substring e)108 688.8 R .067 (xpansion, using the forms documented belo)-.15 F 2.567(w\()-.25 G -(e.g.,)-2.567 E F1(:-)2.567 E F0(\),)A F1(bash)2.567 E F0 .066 -(tests for a pa-)2.567 F(rameter that is unset or null.)108 348 Q(Omitt\ -ing the colon results in a test only for a parameter that is unset.)5 E -(${)108 364.8 Q F2(par)A(ameter)-.15 E F1<3aad>A F2(wor)A(d)-.37 E F0(}) -A F1 .722(Use Default V)144 376.8 R(alues)-.92 E F0 5.722(.I)C(f)-5.722 -E F2(par)4.472 E(ameter)-.15 E F0 .723(is unset or null, the e)3.952 F -.723(xpansion of)-.15 F F2(wor)3.563 E(d)-.37 E F0 .723(is substituted.) -3.993 F(Other)5.723 E(-)-.2 E(wise, the v)144 388.8 Q(alue of)-.25 E F2 -(par)3.75 E(ameter)-.15 E F0(is substituted.)3.23 E(${)108 400.8 Q F2 -(par)A(ameter)-.15 E F1(:=)A F2(wor)A(d)-.37 E F0(})A F1 .812 -(Assign Default V)144 412.8 R(alues)-.92 E F0 5.812(.I)C(f)-5.812 E F2 -(par)4.562 E(ameter)-.15 E F0 .812(is unset or null, the e)4.042 F .812 -(xpansion of)-.15 F F2(wor)3.652 E(d)-.37 E F0 .812(is assigned to)4.082 -F F2(pa-)4.561 E -.15(ra)144 424.8 S(meter).15 E F0 5.741(.T).73 G .741 -(he v)-5.741 F .741(alue of)-.25 F F2(par)4.491 E(ameter)-.15 E F0 .742 -(is then substituted.)3.972 F .742 -(Positional parameters and special parame-)5.742 F -(ters may not be assigned to in this w)144 436.8 Q(ay)-.1 E(.)-.65 E(${) -108 448.8 Q F2(par)A(ameter)-.15 E F1(:?)A F2(wor)A(d)-.37 E F0(})A F1 -.535(Display Err)144 460.8 R .535(or if Null or Unset)-.18 F F0 5.535 -(.I)C(f)-5.535 E F2(par)4.285 E(ameter)-.15 E F0 .535 -(is null or unset, the e)3.765 F .535(xpansion of)-.15 F F2(wor)3.035 E -(d)-.37 E F0 .535(\(or a mes-)3.035 F .012(sage to that ef)144 472.8 R -.012(fect if)-.25 F F2(wor)2.852 E(d)-.37 E F0 .013(is not present\) is\ - written to the standard error and the shell, if it is not in-)3.282 F -(teracti)144 484.8 Q -.15(ve)-.25 G 2.5(,e).15 G 2.5(xits. Otherwise,) --2.65 F(the v)2.5 E(alue of)-.25 E F2(par)2.5 E(ameter)-.15 E F0 -(is substituted.)2.5 E(${)108 496.8 Q F2(par)A(ameter)-.15 E F1(:+)A F2 -(wor)A(d)-.37 E F0(})A F1 .745(Use Alter)144 508.8 R .745(nate V)-.15 F -(alue)-.92 E F0 5.745(.I)C(f)-5.745 E F2(par)4.495 E(ameter)-.15 E F0 -.745(is null or unset, nothing is substituted, otherwise the e)3.975 F -(xpan-)-.15 E(sion of)144 520.8 Q F2(wor)2.84 E(d)-.37 E F0 -(is substituted.)3.27 E(${)108 532.8 Q F2(par)A(ameter)-.15 E F1(:)A F2 -(of)A(fset)-.18 E F0(})A(${)108 544.8 Q F2(par)A(ameter)-.15 E F1(:)A F2 -(of)A(fset)-.18 E F1(:)A F2(length)A F0(})A F1 .002(Substring Expansion) -144 556.8 R F0 5.002(.E)C .002(xpands to up to)-5.002 F F2(length)2.502 -E F0 .002(characters of the v)2.502 F .002(alue of)-.25 F F2(par)2.502 E -(ameter)-.15 E F0 .002(starting at the)2.502 F .004 -(character speci\214ed by)144 568.8 R F2(of)2.504 E(fset)-.18 E F0 5.003 -(.I)C(f)-5.003 E F2(par)2.503 E(ameter)-.15 E F0(is)2.503 E F1(@)2.503 E -F0(or)2.503 E F1(*)2.503 E F0 2.503(,a)C 2.503(ni)-2.503 G(nde)-2.503 E --.15(xe)-.15 G 2.503(da).15 G .003(rray subscripted by)-2.503 F F1(@) -2.503 E F0(or)2.503 E F1(*)2.503 E F0 2.503(,o)C 2.503(ra)-2.503 G(n) --2.503 E(associati)144 580.8 Q 1.022 -.15(ve a)-.25 H .722 -(rray name, the results dif).15 F .722(fer as described belo)-.25 F -4.522 -.65(w. I)-.25 H(f).65 E F2(length)3.222 E F0 .722(is omitted, e) -3.222 F .722(xpands to the)-.15 F .043(substring of the v)144 592.8 R -.043(alue of)-.25 F F2(par)2.543 E(ameter)-.15 E F0 .042 -(starting at the character speci\214ed by)2.543 F F2(of)2.542 E(fset) --.18 E F0 .042(and e)2.542 F .042(xtending to the)-.15 F .846 -(end of the v)144 604.8 R(alue.)-.25 E F2(length)5.846 E F0(and)3.346 E -F2(of)3.346 E(fset)-.18 E F0 .846(are arithmetic e)3.346 F .847 -(xpressions \(see)-.15 F/F3 9/Times-Bold@0 SF .847(ARITHMETIC EV)3.347 F -(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(belo)144 616.8 Q(w\).)-.25 E -(If)144 640.8 Q F2(of)3.029 E(fset)-.18 E F0 -.25(eva)3.029 G .529 -(luates to a number less than zero, the v).25 F .529 -(alue is used as an of)-.25 F .529(fset in characters from the)-.25 F -.045(end of the v)144 652.8 R .045(alue of)-.25 F F2(par)2.546 E(ameter) --.15 E F0 5.046(.I)C(f)-5.046 E F2(length)2.546 E F0 -.25(eva)2.546 G -.046(luates to a number less than zero, it is interpreted as an).25 F -(of)144 664.8 Q .203(fset in characters from the end of the v)-.25 F -.202(alue of)-.25 F F2(par)2.702 E(ameter)-.15 E F0 .202 -(rather than a number of characters, and)2.702 F .557(the e)144 676.8 R -.557(xpansion is the characters between)-.15 F F2(of)3.057 E(fset)-.18 E -F0 .557(and that result.)3.057 F .558(Note that a ne)5.558 F -.05(ga) --.15 G(ti).05 E .858 -.15(ve o)-.25 H -.25(ff).15 G .558(set must be).25 -F(separated from the colon by at least one space to a)144 688.8 Q -.2 -(vo)-.2 G(id being confused with the).2 E F1(:-)2.5 E F0 -.15(ex)2.5 G -(pansion.).15 E(If)144 712.8 Q F2(par)3.284 E(ameter)-.15 E F0(is)3.284 -E F1(@)3.284 E F0(or)3.284 E F1(*)3.284 E F0 3.284(,t)C .784 -(he result is)-3.284 F F2(length)3.284 E F0 .784 -(positional parameters be)3.284 F .783(ginning at)-.15 F F2(of)3.283 E -(fset)-.18 E F0 5.783(.A)C(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15(ve) --.25 G F2(of)144 724.8 Q(fset)-.18 E F0 1.551(is tak)4.051 F 1.551 -(en relati)-.1 F 1.851 -.15(ve t)-.25 H 4.051(oo).15 G 1.551 -(ne greater than the greatest positional parameter)-4.051 F 4.051(,s)-.4 -G 4.052(oa)-4.051 G 4.052(no)-4.052 G -.25(ff)-4.052 G 1.552 -(set of \2551).25 F(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E -(23)185.115 E 0 Cg EP +(e.g.,)-2.567 E F2(:-)2.567 E F1(\),)A F2(bash)2.567 E F1 .067 +(tests for a pa-)2.567 F(rameter that is unset or null.)108 700.8 Q(Omi\ +tting the colon results in a test only for a parameter that is unset.)5 +E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(23)193.45 E 0 Cg EP %%Page: 24 24 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.25(eva)144 84 S -.555(luates to the last positional parameter).25 F 5.555(.I)-.55 G 3.055 -(ti)-5.555 G 3.055(sa)-3.055 G 3.055(ne)-3.055 G .555(xpansion error if) --3.205 F/F1 10/Times-Italic@0 SF(length)3.055 E F0 -.25(eva)3.055 G .555 -(luates to a number).25 F(less than zero.)144 96 Q(If)144 120 Q F1(par) -3.013 E(ameter)-.15 E F0 .514(is an inde)3.013 F -.15(xe)-.15 G 3.014 -(da).15 G .514(rray name subscripted by @ or *, the result is the)-3.014 -F F1(length)3.014 E F0 .514(members of)3.014 F 1.082(the array be)144 -132 R 1.082(ginning with ${)-.15 F F1(par)A(ameter)-.15 E F0([)A F1(of)A -(fset)-.18 E F0 3.582(]}. A)B(ne)3.582 E -.05(ga)-.15 G(ti).05 E -.15 -(ve)-.25 G F1(of)3.732 E(fset)-.18 E F0 1.081(is tak)3.581 F 1.081 -(en relati)-.1 F 1.381 -.15(ve t)-.25 H 3.581(oo).15 G 1.081(ne greater) --3.581 F 1.079(than the maximum inde)144 144 R 3.579(xo)-.15 G 3.579(ft) --3.579 G 1.079(he speci\214ed array)-3.579 F 6.079(.I)-.65 G 3.579(ti) --6.079 G 3.579(sa)-3.579 G 3.58(ne)-3.579 G 1.08(xpansion error if)-3.73 -F F1(length)3.58 E F0 -.25(eva)3.58 G 1.08(luates to a).25 F -(number less than zero.)144 156 Q(Substring e)144 180 Q +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(${)108 84 Q F0(par)A(ameter)-.15 E/F2 10 +/Times-Bold@0 SF<3aad>A F0(wor)A(d)-.37 E F1(})A F2 .723(Use Default V) +144 96 R(alues)-.92 E F1 5.723(.I)C(f)-5.723 E F0(par)4.473 E(ameter) +-.15 E F1 .723(is unset or null, the e)3.953 F .722(xpansion of)-.15 F +F0(wor)3.562 E(d)-.37 E F1 .722(is substituted.)3.992 F(Other)5.722 E(-) +-.2 E(wise, the v)144 108 Q(alue of)-.25 E F0(par)3.75 E(ameter)-.15 E +F1(is substituted.)3.23 E(${)108 120 Q F0(par)A(ameter)-.15 E F2(:=)A F0 +(wor)A(d)-.37 E F1(})A F2 .265(Assign Default V)144 132 R(alues)-.92 E +F1 5.265(.I)C(f)-5.265 E F0(par)4.015 E(ameter)-.15 E F1 .266 +(is unset or null, the e)3.495 F .266(xpansion of)-.15 F F0(wor)3.106 E +(d)-.37 E F1 .266(is assigned to)3.536 F F0(par)4.016 E(a-)-.15 E(meter) +144 144 Q F1 5.545(.T).73 G .545(he v)-5.545 F .544(alue of)-.25 F F0 +(par)4.294 E(ameter)-.15 E F1 .544(is then substituted.)3.774 F .544 +(Positional parameters and special parameters)5.544 F +(may not be assigned to in this w)144 156 Q(ay)-.1 E(.)-.65 E(${)108 168 +Q F0(par)A(ameter)-.15 E F2(:?)A F0(wor)A(d)-.37 E F1(})A F2 .535 +(Display Err)144 180 R .535(or if Null or Unset)-.18 F F1 5.535(.I)C(f) +-5.535 E F0(par)4.285 E(ameter)-.15 E F1 .535(is null or unset, the e) +3.765 F .535(xpansion of)-.15 F F0(wor)3.035 E(d)-.37 E F1 .535 +(\(or a mes-)3.035 F .013(sage to that ef)144 192 R .013(fect if)-.25 F +F0(wor)2.853 E(d)-.37 E F1 .013(is not present\) is written to the stan\ +dard error and the shell, if it is not in-)3.283 F(teracti)144 204 Q +-.15(ve)-.25 G 2.5(,e).15 G 2.5(xits. Otherwise,)-2.65 F(the v)2.5 E +(alue of)-.25 E F0(par)2.5 E(ameter)-.15 E F1(is substituted.)2.5 E(${) +108 216 Q F0(par)A(ameter)-.15 E F2(:+)A F0(wor)A(d)-.37 E F1(})A F2 +.745(Use Alter)144 228 R .745(nate V)-.15 F(alue)-.92 E F1 5.745(.I)C(f) +-5.745 E F0(par)4.495 E(ameter)-.15 E F1 .745 +(is null or unset, nothing is substituted, otherwise the e)3.975 F +(xpan-)-.15 E(sion of)144 240 Q F0(wor)2.84 E(d)-.37 E F1 +(is substituted.)3.27 E(${)108 252 Q F0(par)A(ameter)-.15 E F2(:)A F0 +(of)A(fset)-.18 E F1(})A(${)108 264 Q F0(par)A(ameter)-.15 E F2(:)A F0 +(of)A(fset)-.18 E F2(:)A F0(length)A F1(})A F2 .002(Substring Expansion) +144 276 R F1 5.002(.E)C .002(xpands to up to)-5.002 F F0(length)2.502 E +F1 .002(characters of the v)2.502 F .002(alue of)-.25 F F0(par)2.502 E +(ameter)-.15 E F1 .002(starting at the)2.502 F .003 +(character speci\214ed by)144 288 R F0(of)2.503 E(fset)-.18 E F1 5.003 +(.I)C(f)-5.003 E F0(par)2.503 E(ameter)-.15 E F1(is)2.503 E F2(@)2.503 E +F1(or)2.503 E F2(*)2.503 E F1 2.503(,a)C 2.503(ni)-2.503 G(nde)-2.503 E +-.15(xe)-.15 G 2.503(da).15 G .003(rray subscripted by)-2.503 F F2(@) +2.503 E F1(or)2.503 E F2(*)2.504 E F1 2.504(,o)C 2.504(ra)-2.504 G(n) +-2.504 E(associati)144 300 Q 1.022 -.15(ve a)-.25 H .722 +(rray name, the results dif).15 F .722(fer as described belo)-.25 F +4.522 -.65(w. I)-.25 H(f).65 E F0(length)3.222 E F1 .722(is omitted, e) +3.222 F .722(xpands to the)-.15 F .042(substring of the v)144 312 R .042 +(alue of)-.25 F F0(par)2.542 E(ameter)-.15 E F1 .043 +(starting at the character speci\214ed by)2.542 F F0(of)2.543 E(fset) +-.18 E F1 .043(and e)2.543 F .043(xtending to the)-.15 F .847 +(end of the v)144 324 R(alue.)-.25 E F0(length)5.846 E F1(and)3.346 E F0 +(of)3.346 E(fset)-.18 E F1 .846(are arithmetic e)3.346 F .846 +(xpressions \(see)-.15 F/F3 9/Times-Bold@0 SF .846(ARITHMETIC EV)3.346 F +(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F1(belo)144 336 Q(w\).)-.25 E +(If)144 352.8 Q F0(of)3.028 E(fset)-.18 E F1 -.25(eva)3.029 G .529 +(luates to a number less than zero, the v).25 F .529 +(alue is used as an of)-.25 F .529(fset in characters from the)-.25 F +.046(end of the v)144 364.8 R .046(alue of)-.25 F F0(par)2.546 E(ameter) +-.15 E F1 5.046(.I)C(f)-5.046 E F0(length)2.546 E F1 -.25(eva)2.546 G +.046(luates to a number less than zero, it is interpreted as an).25 F +(of)144 376.8 Q .202(fset in characters from the end of the v)-.25 F +.202(alue of)-.25 F F0(par)2.702 E(ameter)-.15 E F1 .203 +(rather than a number of characters, and)2.702 F .558(the e)144 388.8 R +.558(xpansion is the characters between)-.15 F F0(of)3.058 E(fset)-.18 E +F1 .558(and that result.)3.058 F .557(Note that a ne)5.557 F -.05(ga) +-.15 G(ti).05 E .857 -.15(ve o)-.25 H -.25(ff).15 G .557(set must be).25 +F(separated from the colon by at least one space to a)144 400.8 Q -.2 +(vo)-.2 G(id being confused with the).2 E F2(:-)2.5 E F1 -.15(ex)2.5 G +(pansion.).15 E(If)144 417.6 Q F0(par)3.283 E(ameter)-.15 E F1(is)3.283 +E F2(@)3.283 E F1(or)3.283 E F2(*)3.284 E F1 3.284(,t)C .784 +(he result is)-3.284 F F0(length)3.284 E F1 .784 +(positional parameters be)3.284 F .784(ginning at)-.15 F F0(of)3.284 E +(fset)-.18 E F1 5.784(.A)C(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15(ve) +-.25 G F0(of)144 429.6 Q(fset)-.18 E F1 .167(is tak)2.667 F .167 +(en relati)-.1 F .467 -.15(ve t)-.25 H 2.667(oo).15 G .167 +(ne greater than the greatest positional parameter)-2.667 F 2.666(,s)-.4 +G 2.666(oa)-2.666 G 2.666(no)-2.666 G -.25(ff)-2.666 G .166 +(set of \2551 e).25 F -.25(va)-.25 G(l-).25 E .023(uates to the last po\ +sitional parameter \(or 0 if there are no positional parameters\).)144 +441.6 R .023(It is an e)5.023 F(xpansion)-.15 E(error if)144 453.6 Q F0 +(length)2.5 E F1 -.25(eva)2.5 G(luates to a number less than zero.).25 E +(If)144 470.4 Q F0(par)3.014 E(ameter)-.15 E F1 .514(is an inde)3.014 F +-.15(xe)-.15 G 3.014(da).15 G .514 +(rray name subscripted by @ or *, the result is the)-3.014 F F0(length) +3.014 E F1 .513(members of)3.013 F 1.081(the array be)144 482.4 R 1.081 +(ginning with ${)-.15 F F0(par)A(ameter)-.15 E F1([)A F0(of)A(fset)-.18 +E F1 3.581(]}. A)B(ne)3.581 E -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G F0 +(of)3.732 E(fset)-.18 E F1 1.082(is tak)3.582 F 1.082(en relati)-.1 F +1.382 -.15(ve t)-.25 H 3.582(oo).15 G 1.082(ne greater)-3.582 F 1.08 +(than the maximum inde)144 494.4 R 3.58(xo)-.15 G 3.58(ft)-3.58 G 1.08 +(he speci\214ed array)-3.58 F 6.079(.I)-.65 G 3.579(ti)-6.079 G 3.579 +(sa)-3.579 G 3.579(ne)-3.579 G 1.079(xpansion error if)-3.729 F F0 +(length)3.579 E F1 -.25(eva)3.579 G 1.079(luates to a).25 F +(number less than zero.)144 506.4 Q(Substring e)144 523.2 Q (xpansion applied to an associati)-.15 E .3 -.15(ve a)-.25 H -(rray produces unde\214ned results.).15 E .821(Substring inde)144 204 R +(rray produces unde\214ned results.).15 E .82(Substring inde)144 540 R .821(xing is zero-based unless the positional parameters are used, in w\ -hich case the in-)-.15 F(de)144 216 Q .159(xing starts at 1 by def)-.15 -F 2.659(ault. If)-.1 F F1(of)2.659 E(fset)-.18 E F0 .159 -(is 0, and the positional parameters are used,)2.659 F/F2 10 -/Times-Bold@0 SF($0)2.659 E F0 .159(is pre\214x)2.659 F .159(ed to)-.15 -F(the list.)144 228 Q(${)108 244.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(*)A -F0(})A(${)108 256.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(@)A F0(})A F2 .085 -(Names matching pr)144 268.8 R(e\214x)-.18 E F0 5.085(.E)C .084 -(xpands to the names of v)-5.085 F .084(ariables whose names be)-.25 F -.084(gin with)-.15 F F1(pr)2.584 E(e\214x)-.37 E F0 2.584(,s)C(epa-) --2.584 E .257(rated by the \214rst character of the)144 280.8 R/F3 9 -/Times-Bold@0 SF(IFS)2.757 E F0 .257(special v)2.507 F 2.757 -(ariable. When)-.25 F F1(@)2.758 E F0 .258(is used and the e)2.758 F -.258(xpansion appears)-.15 F(within double quotes, each v)144 292.8 Q -(ariable name e)-.25 E(xpands to a separate w)-.15 E(ord.)-.1 E(${)108 -309.6 Q F2(!)A F1(name)A F0([)A F1(@)A F0(]})A(${)108 321.6 Q F2(!)A F1 -(name)A F0([)A F1(*)A F0(]})A F2 1.137(List of array k)144 333.6 R(eys) --.1 E F0 6.136(.I)C(f)-6.136 E F1(name)3.636 E F0 1.136(is an array v) -3.636 F 1.136(ariable, e)-.25 F 1.136 -(xpands to the list of array indices \(k)-.15 F -.15(ey)-.1 G 1.136 -(s\) as-).15 F .397(signed in)144 345.6 R F1(name)2.897 E F0 5.397(.I)C -(f)-5.397 E F1(name)2.897 E F0 .397(is not an array)2.897 F 2.897(,e) --.65 G .397(xpands to 0 if)-3.047 F F1(name)2.897 E F0 .397 -(is set and null otherwise.)2.897 F(When)5.397 E F1(@)2.897 E F0 -(is used and the e)144 357.6 Q +hich case the in-)-.15 F(de)144 552 Q .159(xing starts at 1 by def)-.15 +F 2.659(ault. If)-.1 F F0(of)2.659 E(fset)-.18 E F1 .159 +(is 0, and the positional parameters are used,)2.659 F F2($0)2.659 E F1 +.159(is pre\214x)2.659 F .158(ed to)-.15 F(the list.)144 564 Q(${)108 +580.8 Q F2(!)A F0(pr)A(e\214x)-.37 E F2(*)A F1(})A(${)108 592.8 Q F2(!)A +F0(pr)A(e\214x)-.37 E F2(@)A F1(})A F2 .084(Names matching pr)144 604.8 +R(e\214x)-.18 E F1 5.084(.E)C .084(xpands to the names of v)-5.084 F +.084(ariables whose names be)-.25 F .085(gin with)-.15 F F0(pr)2.585 E +(e\214x)-.37 E F1 2.585(,s)C(epa-)-2.585 E .258 +(rated by the \214rst character of the)144 616.8 R F3(IFS)2.758 E F1 +.257(special v)2.507 F 2.757(ariable. When)-.25 F F0(@)2.757 E F1 .257 +(is used and the e)2.757 F .257(xpansion appears)-.15 F +(within double quotes, each v)144 628.8 Q(ariable name e)-.25 E +(xpands to a separate w)-.15 E(ord.)-.1 E(${)108 645.6 Q F2(!)A F0(name) +A F1([)A F0(@)A F1(]})A(${)108 657.6 Q F2(!)A F0(name)A F1([)A F0(*)A F1 +(]})A F2 1.136(List of array k)144 669.6 R(eys)-.1 E F1 6.136(.I)C(f) +-6.136 E F0(name)3.636 E F1 1.136(is an array v)3.636 F 1.136 +(ariable, e)-.25 F 1.136(xpands to the list of array indices \(k)-.15 F +-.15(ey)-.1 G 1.137(s\) as-).15 F .397(signed in)144 681.6 R F0(name) +2.897 E F1 5.397(.I)C(f)-5.397 E F0(name)2.897 E F1 .397 +(is not an array)2.897 F 2.897(,e)-.65 G .397(xpands to 0 if)-3.047 F F0 +(name)2.897 E F1 .397(is set and null otherwise.)2.897 F(When)5.397 E F0 +(@)2.897 E F1(is used and the e)144 693.6 Q (xpansion appears within double quotes, each k)-.15 E .3 -.15(ey ex)-.1 -H(pands to a separate w).15 E(ord.)-.1 E(${)108 374.4 Q F2(#)A F1(par)A -(ameter)-.15 E F0(})A F2 -.1(Pa)144 386.4 S .471(rameter length).1 F F0 -5.471(.T)C .471(he length in characters of the v)-5.471 F .471(alue of) --.25 F F1(par)2.971 E(ameter)-.15 E F0 .47(is substituted.)2.97 F(If) -5.47 E F1(par)4.22 E(ame-)-.15 E(ter)144 398.4 Q F0(is)3.626 E F2(*) -2.896 E F0(or)2.896 E F2(@)2.896 E F0 2.896(,t)C .396(he v)-2.896 F .397 +H(pands to a separate w).15 E(ord.)-.1 E(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(24)193.45 E 0 Cg EP +%%Page: 25 25 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(${)108 84 Q/F2 10/Times-Bold@0 SF(#)A F0(par)A +(ameter)-.15 E F1(})A F2 -.1(Pa)144 96 S .47(rameter length).1 F F1 5.47 +(.T)C .471(he length in characters of the v)-5.47 F .471(alue of)-.25 F +F0(par)2.971 E(ameter)-.15 E F1 .471(is substituted.)2.971 F(If)5.471 E +F0(par)4.221 E(ame-)-.15 E(ter)144 108 Q F1(is)3.627 E F2(*)2.897 E F1 +(or)2.897 E F2(@)2.897 E F1 2.897(,t)C .397(he v)-2.897 F .397 (alue substituted is the number of positional parameters.)-.25 F(If) -5.397 E F1(par)4.147 E(ameter)-.15 E F0 .397(is an ar)3.627 F(-)-.2 E -.781(ray name subscripted by)144 410.4 R F2(*)3.281 E F0(or)3.281 E F2 -(@)3.281 E F0 3.281(,t)C .781(he v)-3.281 F .78 -(alue substituted is the number of elements in the array)-.25 F 5.78(.I) --.65 G(f)-5.78 E F1(par)145.25 422.4 Q(ameter)-.15 E F0 .455(is an inde) -3.685 F -.15(xe)-.15 G 2.955(da).15 G .456 -(rray name subscripted by a ne)-2.955 F -.05(ga)-.15 G(ti).05 E .756 --.15(ve n)-.25 H(umber).15 E 2.956(,t)-.4 G .456 -(hat number is interpreted)-2.956 F .973(as relati)144 434.4 R 1.273 --.15(ve t)-.25 H 3.473(oo).15 G .973(ne greater than the maximum inde) --3.473 F 3.473(xo)-.15 G(f)-3.473 E F1(par)3.473 E(ameter)-.15 E F0 -3.472(,s)C 3.472(on)-3.472 G -2.25 -.15(eg a)-3.472 H(ti).15 E 1.272 --.15(ve i)-.25 H .972(ndices count back).15 F(from the end of the array) -144 446.4 Q 2.5(,a)-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 -G 2.5(1r)-2.5 G(eferences the last element.)-2.5 E(${)108 463.2 Q F1 -(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)-.37 E F0(})A(${)108 475.2 Q F1 -(par)A(ameter)-.15 E F2(##)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144 487.2 -Q 1.396 -.1(ve m)-.1 H 1.196(atching pr).1 F 1.196(e\214x patter)-.18 F -(n)-.15 E F0 6.196(.T)C(he)-6.196 E F1(wor)4.036 E(d)-.37 E F0 1.196 -(is e)4.466 F 1.196(xpanded to produce a pattern just as in path-)-.15 F -.544(name e)144 499.2 R .544(xpansion, and matched ag)-.15 F .544 -(ainst the e)-.05 F .544(xpanded v)-.15 F .544(alue of)-.25 F F1(par) -4.294 E(ameter)-.15 E F0 .543(using the rules described)3.774 F(under) -144 511.2 Q F2 -.1(Pa)3.132 G(tter).1 E 3.132(nM)-.15 G(atching)-3.132 E -F0(belo)3.132 E 4.432 -.65(w. I)-.25 H 3.132(ft).65 G .632 -(he pattern matches the be)-3.132 F .632(ginning of the v)-.15 F .633 -(alue of)-.25 F F1(par)4.383 E(ameter)-.15 E F0(,).73 E 1.152 -(then the result of the e)144 523.2 R 1.151(xpansion is the e)-.15 F -1.151(xpanded v)-.15 F 1.151(alue of)-.25 F F1(par)4.901 E(ameter)-.15 E -F0 1.151(with the shortest matching)4.381 F .183(pattern \(the `)144 -535.2 R(`)-.74 E F2(#)A F0 1.663 -.74('' c)D .184 -(ase\) or the longest matching pattern \(the `).74 F(`)-.74 E F2(##)A F0 -1.664 -.74('' c)D .184(ase\) deleted.).74 F(If)5.184 E F1(par)3.934 E -(ameter)-.15 E F0(is)3.414 E F2(@)2.684 E F0(or)144 547.2 Q F2(*)3.019 E -F0 3.019(,t)C .518(he pattern remo)-3.019 F -.25(va)-.15 G 3.018(lo).25 +5.396 E F0(par)4.146 E(ameter)-.15 E F1 .396(is an ar)3.626 F(-)-.2 E +.78(ray name subscripted by)144 120 R F2(*)3.28 E F1(or)3.28 E F2(@)3.28 +E F1 3.28(,t)C .78(he v)-3.28 F .781 +(alue substituted is the number of elements in the array)-.25 F 5.781 +(.I)-.65 G(f)-5.781 E F0(par)145.25 132 Q(ameter)-.15 E F1 .456 +(is an inde)3.686 F -.15(xe)-.15 G 2.956(da).15 G .456 +(rray name subscripted by a ne)-2.956 F -.05(ga)-.15 G(ti).05 E .756 +-.15(ve n)-.25 H(umber).15 E 2.955(,t)-.4 G .455 +(hat number is interpreted)-2.955 F .972(as relati)144 144 R 1.272 -.15 +(ve t)-.25 H 3.472(oo).15 G .973(ne greater than the maximum inde)-3.472 +F 3.473(xo)-.15 G(f)-3.473 E F0(par)3.473 E(ameter)-.15 E F1 3.473(,s)C +3.473(on)-3.473 G -2.25 -.15(eg a)-3.473 H(ti).15 E 1.273 -.15(ve i)-.25 +H .973(ndices count back).15 F(from the end of the array)144 156 Q 2.5 +(,a)-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G +(eferences the last element.)-2.5 E(${)108 172.8 Q F0(par)A(ameter)-.15 +E F2(#)A F0(wor)A(d)-.37 E F1(})A(${)108 184.8 Q F0(par)A(ameter)-.15 E +F2(##)A F0(wor)A(d)-.37 E F1(})A F2(Remo)144 196.8 Q 1.396 -.1(ve m)-.1 +H 1.196(atching pr).1 F 1.196(e\214x patter)-.18 F(n)-.15 E F1 6.196(.T) +C(he)-6.196 E F0(wor)4.036 E(d)-.37 E F1 1.196(is e)4.466 F 1.196 +(xpanded to produce a pattern just as in path-)-.15 F .543(name e)144 +208.8 R .544(xpansion, and matched ag)-.15 F .544(ainst the e)-.05 F +.544(xpanded v)-.15 F .544(alue of)-.25 F F0(par)4.294 E(ameter)-.15 E +F1 .544(using the rules described)3.774 F(under)144 220.8 Q F2 -.1(Pa) +3.133 G(tter).1 E 3.133(nM)-.15 G(atching)-3.133 E F1(belo)3.132 E 4.432 +-.65(w. I)-.25 H 3.132(ft).65 G .632(he pattern matches the be)-3.132 F +.632(ginning of the v)-.15 F .632(alue of)-.25 F F0(par)4.382 E(ameter) +-.15 E F1(,).73 E 1.151(then the result of the e)144 232.8 R 1.151 +(xpansion is the e)-.15 F 1.151(xpanded v)-.15 F 1.151(alue of)-.25 F F0 +(par)4.902 E(ameter)-.15 E F1 1.152(with the shortest matching)4.382 F +.554(pattern \(the \231#\232 case\) or the longest matching pattern \(t\ +he \231##\232 case\) deleted.)144 244.8 R(If)5.553 E F0(par)4.303 E +(ameter)-.15 E F1(is)3.783 E F2(@)3.053 E F1(or)144 256.8 Q F2(*)3.018 E +F1 3.018(,t)C .518(he pattern remo)-3.018 F -.25(va)-.15 G 3.018(lo).25 G .518 (peration is applied to each positional parameter in turn, and the e) --3.018 F(xpan-)-.15 E .303(sion is the resultant list.)144 559.2 R(If) -5.303 E F1(par)4.053 E(ameter)-.15 E F0 .303(is an array v)3.533 F .303 -(ariable subscripted with)-.25 F F2(@)2.804 E F0(or)2.804 E F2(*)2.804 E -F0 2.804(,t)C .304(he pattern re-)-2.804 F(mo)144 571.2 Q -.25(va)-.15 G -2.988(lo).25 G .487 +-3.018 F(xpan-)-.15 E .304(sion is the resultant list.)144 268.8 R(If) +5.304 E F0(par)4.054 E(ameter)-.15 E F1 .303(is an array v)3.533 F .303 +(ariable subscripted with)-.25 F F2(@)2.803 E F1(or)2.803 E F2(*)2.803 E +F1 2.803(,t)C .303(he pattern re-)-2.803 F(mo)144 280.8 Q -.25(va)-.15 G +2.987(lo).25 G .487 (peration is applied to each member of the array in turn, and the e) --2.988 F .487(xpansion is the resultant)-.15 F(list.)144 583.2 Q(${)108 -600 Q F1(par)A(ameter)-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108 612 -Q F1(par)A(ameter)-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144 -624 Q .346 -.1(ve m)-.1 H .146(atching suf\214x patter).1 F(n)-.15 E F0 -5.146(.T)C(he)-5.146 E F1(wor)2.646 E(d)-.37 E F0 .147(is e)2.647 F .147 -(xpanded to produce a pattern just as in pathname)-.15 F -.15(ex)144 636 -S .459(pansion, and matched ag).15 F .459(ainst the e)-.05 F .459 -(xpanded v)-.15 F .458(alue of)-.25 F F1(par)4.208 E(ameter)-.15 E F0 -.458(using the rules described under)3.688 F F2 -.1(Pa)144 648 S(tter).1 -E 3.314(nM)-.15 G(atching)-3.314 E F0(belo)3.314 E 4.614 -.65(w. I)-.25 -H 3.314(ft).65 G .814(he pattern matches a trailing portion of the e) --3.314 F .814(xpanded v)-.15 F .814(alue of)-.25 F F1(pa-)4.564 E -.15 -(ra)144 660 S(meter).15 E F0 3.817(,t).73 G 1.317 -(hen the result of the e)-3.817 F 1.317(xpansion is the e)-.15 F 1.317 -(xpanded v)-.15 F 1.316(alue of)-.25 F F1(par)5.066 E(ameter)-.15 E F0 -1.316(with the shortest)4.546 F 1.084(matching pattern \(the `)144 672 R -(`)-.74 E F2(%)A F0 2.564 -.74('' c)D 1.084 -(ase\) or the longest matching pattern \(the `).74 F(`)-.74 E F2(%%)A F0 -2.565 -.74('' c)D 1.085(ase\) deleted.).74 F(If)6.085 E F1(par)145.25 -684 Q(ameter)-.15 E F0(is)3.39 E F2(@)2.66 E F0(or)2.66 E F2(*)2.66 E F0 -2.66(,t)C .16(he pattern remo)-2.66 F -.25(va)-.15 G 2.659(lo).25 G .159 -(peration is applied to each positional parameter in turn,)-2.659 F .509 -(and the e)144 696 R .509(xpansion is the resultant list.)-.15 F(If) -5.509 E F1(par)4.259 E(ameter)-.15 E F0 .51(is an array v)3.739 F .51 -(ariable subscripted with)-.25 F F2(@)3.01 E F0(or)3.01 E F2(*)3.01 E F0 -(,)A .423(the pattern remo)144 708 R -.25(va)-.15 G 2.923(lo).25 G .422 +-2.987 F .487(xpansion is the resultant)-.15 F(list.)144 292.8 Q(${)108 +309.6 Q F0(par)A(ameter)-.15 E F2(%)A F0(wor)A(d)-.37 E F1(})A(${)108 +321.6 Q F0(par)A(ameter)-.15 E F2(%%)A F0(wor)A(d)-.37 E F1(})A F2(Remo) +144 333.6 Q .347 -.1(ve m)-.1 H .147(atching suf\214x patter).1 F(n)-.15 +E F1 5.147(.T)C(he)-5.147 E F0(wor)2.647 E(d)-.37 E F1 .147(is e)2.647 F +.146(xpanded to produce a pattern just as in pathname)-.15 F -.15(ex)144 +345.6 S .458(pansion, and matched ag).15 F .458(ainst the e)-.05 F .458 +(xpanded v)-.15 F .458(alue of)-.25 F F0(par)4.209 E(ameter)-.15 E F1 +.459(using the rules described under)3.689 F F2 -.1(Pa)144 357.6 S(tter) +.1 E 2.732(nM)-.15 G(atching)-2.732 E F1(belo)2.732 E 4.032 -.65(w. I) +-.25 H 2.732(ft).65 G .231 +(he pattern matches a trailing portion of the e)-2.732 F .231(xpanded v) +-.15 F .231(alue of)-.25 F F0(par)3.981 E(a-)-.15 E(meter)144 369.6 Q F1 +4.399(,t).73 G 1.899(hen the result of the e)-4.399 F 1.899 +(xpansion is the e)-.15 F 1.899(xpanded v)-.15 F 1.9(alue of)-.25 F F0 +(par)5.65 E(ameter)-.15 E F1 1.9(with the shortest)5.13 F .019(matching\ + pattern \(the \231%\232 case\) or the longest matching pattern \(the \ +\231%%\232 case\) deleted.)144 381.6 R(If)5.019 E F0(par)3.769 E(a-)-.15 +E(meter)144 393.6 Q F1(is)3.559 E F2(@)2.829 E F1(or)2.829 E F2(*)2.829 +E F1 2.829(,t)C .329(he pattern remo)-2.829 F -.25(va)-.15 G 2.829(lo) +.25 G .33(peration is applied to each positional parameter in turn, and) +-2.829 F .64(the e)144 405.6 R .64(xpansion is the resultant list.)-.15 +F(If)5.64 E F0(par)4.39 E(ameter)-.15 E F1 .64(is an array v)3.87 F .64 +(ariable subscripted with)-.25 F F2(@)3.14 E F1(or)3.14 E F2(*)3.14 E F1 +3.14(,t)C(he)-3.14 E .422(pattern remo)144 417.6 R -.25(va)-.15 G 2.922 +(lo).25 G .422 (peration is applied to each member of the array in turn, and the e) --2.923 F .422(xpansion is)-.15 F(the resultant list.)144 720 Q -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(24)185.115 E 0 Cg EP -%%Page: 25 25 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(${)108 84 Q/F1 10 -/Times-Italic@0 SF(par)A(ameter)-.15 E/F2 10/Times-Bold@0 SF(/)A F1 -(pattern)A F2(/)A F1(string)A F0(})A(${)108 96 Q F1(par)A(ameter)-.15 E -F2(//)A F1(pattern)A F2(/)A F1(string)A F0(})A(${)108 108 Q F1(par)A -(ameter)-.15 E F2(/#)A F1(pattern)A F2(/)A F1(string)A F0(})A(${)108 120 -Q F1(par)A(ameter)-.15 E F2(/%)A F1(pattern)A F2(/)A F1(string)A F0(})A -F2 -.1(Pa)144 132 S(tter).1 E 3.606(ns)-.15 G(ubstitution)-3.606 E F0 -6.106(.T)C(he)-6.106 E F1(pattern)3.606 E F0 1.106(is e)3.606 F 1.107 +-2.922 F .423(xpansion is the)-.15 F(resultant list.)144 429.6 Q(${)108 +446.4 Q F0(par)A(ameter)-.15 E F2(/)A F0(pattern)A F2(/)A F0(string)A F1 +(})A(${)108 458.4 Q F0(par)A(ameter)-.15 E F2(//)A F0(pattern)A F2(/)A +F0(string)A F1(})A(${)108 470.4 Q F0(par)A(ameter)-.15 E F2(/#)A F0 +(pattern)A F2(/)A F0(string)A F1(})A(${)108 482.4 Q F0(par)A(ameter)-.15 +E F2(/%)A F0(pattern)A F2(/)A F0(string)A F1(})A F2 -.1(Pa)144 494.4 S +(tter).1 E 3.607(ns)-.15 G(ubstitution)-3.607 E F1 6.107(.T)C(he)-6.107 +E F0(pattern)3.607 E F1 1.107(is e)3.607 F 1.106 (xpanded to produce a pattern just as in pathname e)-.15 F(xpan-)-.15 E -(sion.)144 144 Q F1 -.8(Pa)6.034 G -.15(ra).8 G(meter).15 E F0 1.034 -(is e)3.534 F 1.033(xpanded and the longest match of)-.15 F F1(pattern) -3.533 E F0(ag)3.533 E 1.033(ainst its v)-.05 F 1.033 -(alue is replaced with)-.25 F F1(string)144 156 Q F0(.)A F1(string)5.499 -E F0(under)2.999 E .499(goes tilde e)-.18 F .499 +(sion.)144 506.4 Q F0 -.8(Pa)6.033 G -.15(ra).8 G(meter).15 E F1 1.033 +(is e)3.533 F 1.033(xpanded and the longest match of)-.15 F F0(pattern) +3.533 E F1(ag)3.533 E 1.034(ainst its v)-.05 F 1.034 +(alue is replaced with)-.25 F F0(string)144 518.4 Q F1(.)A F0(string) +5.499 E F1(under)2.999 E .499(goes tilde e)-.18 F .499 (xpansion, parameter and v)-.15 F .499(ariable e)-.25 F .499 (xpansion, arithmetic e)-.15 F(xpansion,)-.15 E 1.137 -(command and process substitution, and quote remo)144 168 R -.25(va)-.15 -G 3.637(l. The).25 F 1.137(match is performed using the rules)3.637 F -.075(described under)144 180 R F2 -.1(Pa)2.575 G(tter).1 E 2.575(nM)-.15 -G(atching)-2.575 E F0(belo)2.575 E 3.875 -.65(w. I)-.25 H 2.575(nt).65 G -.075(he \214rst form abo)-2.575 F -.15(ve)-.15 G 2.575(,o).15 G .076 -(nly the \214rst match is replaced.)-2.575 F .48(If there are tw)144 192 -R 2.98(os)-.1 G .48(lashes separating)-2.98 F F1(par)2.98 E(ameter)-.15 -E F0(and)2.98 E F1(pattern)2.98 E F0 .48(\(the second form abo)2.98 F --.15(ve)-.15 G .48(\), all matches of).15 F F1(pattern)144 204 Q F0 .374 -(are replaced with)2.874 F F1(string)2.874 E F0 5.374(.I)C(f)-5.374 E F1 -(pattern)2.874 E F0 .374(is preceded by)2.874 F F2(#)2.874 E F0 .374 -(\(the third form abo)2.874 F -.15(ve)-.15 G .375(\), it must match).15 -F .089(at the be)144 216 R .089(ginning of the e)-.15 F .088(xpanded v) --.15 F .088(alue of)-.25 F F1(par)2.588 E(ameter)-.15 E F0 5.088(.I)C(f) --5.088 E F1(pattern)2.588 E F0 .088(is preceded by)2.588 F F2(%)2.588 E -F0 .088(\(the fourth form)2.588 F(abo)144 228 Q -.15(ve)-.15 G .315 +(command and process substitution, and quote remo)144 530.4 R -.25(va) +-.15 G 3.637(l. The).25 F 1.137(match is performed using the rules)3.637 +F .076(described under)144 542.4 R F2 -.1(Pa)2.576 G(tter).1 E 2.576(nM) +-.15 G(atching)-2.576 E F1(belo)2.576 E 3.876 -.65(w. I)-.25 H 2.575(nt) +.65 G .075(he \214rst form abo)-2.575 F -.15(ve)-.15 G 2.575(,o).15 G +.075(nly the \214rst match is replaced.)-2.575 F .48(If there are tw)144 +554.4 R 2.98(os)-.1 G .48(lashes separating)-2.98 F F0(par)2.98 E +(ameter)-.15 E F1(and)2.98 E F0(pattern)2.98 E F1 .48 +(\(the second form abo)2.98 F -.15(ve)-.15 G .48(\), all matches of).15 +F F0(pattern)144 566.4 Q F1 .375(are replaced with)2.875 F F0(string) +2.874 E F1 5.374(.I)C(f)-5.374 E F0(pattern)2.874 E F1 .374 +(is preceded by)2.874 F F2(#)2.874 E F1 .374(\(the third form abo)2.874 +F -.15(ve)-.15 G .374(\), it must match).15 F .088(at the be)144 578.4 R +.088(ginning of the e)-.15 F .088(xpanded v)-.15 F .088(alue of)-.25 F +F0(par)2.588 E(ameter)-.15 E F1 5.088(.I)C(f)-5.088 E F0(pattern)2.588 E +F1 .088(is preceded by)2.588 F F2(%)2.589 E F1 .089(\(the fourth form) +2.589 F(abo)144 590.4 Q -.15(ve)-.15 G .315 (\), it must match at the end of the e).15 F .315(xpanded v)-.15 F .315 -(alue of)-.25 F F1(par)2.815 E(ameter)-.15 E F0 5.315(.I)C 2.815(ft) --5.315 G .315(he e)-2.815 F .315(xpansion of)-.15 F F1(string)2.815 E F0 -(is)2.815 E .399(null, matches of)144 240 R F1(pattern)2.899 E F0 .399 -(are deleted.)2.899 F(If)5.399 E F1(string)2.898 E F0 .398 -(is null, matches of)2.898 F F1(pattern)2.898 E F0 .398 -(are deleted and the)2.898 F F2(/)2.898 E F0(fol-)2.898 E(lo)144 252 Q -(wing)-.25 E F1(pattern)2.5 E F0(may be omitted.)2.5 E .95(If the)144 -276 R F2(patsub_r)3.45 E(eplacement)-.18 E F0 .95 -(shell option is enabled using)3.45 F F2(shopt)3.45 E F0 3.45(,a)C 1.25 --.15(ny u)-3.45 H .95(nquoted instances of).15 F F2(&)3.45 E F0(in)3.45 -E F1(string)144 288 Q F0(are replaced with the matching portion of)2.5 E -F1(pattern)2.5 E F0(.)A .75(Quoting an)144 312 R 3.25(yp)-.15 G .75 -(art of)-3.25 F F1(string)3.25 E F0 .749(inhibits replacement in the e) -3.249 F .749(xpansion of the quoted portion, including)-.15 F .767 -(replacement strings stored in shell v)144 324 R 3.267 -(ariables. Backslash)-.25 F .767(will escape)3.267 F F2(&)3.267 E F0(in) -3.267 E F1(string)3.267 E F0 3.267(;t)C .768(he backslash is)-3.267 F -(remo)144 336 Q -.15(ve)-.15 G 2.669(di).15 G 2.669(no)-2.669 G .169 -(rder to permit a literal)-2.669 F F2(&)2.669 E F0 .169 +(alue of)-.25 F F0(par)2.815 E(ameter)-.15 E F1 5.315(.I)C 2.815(ft) +-5.315 G .315(he e)-2.815 F .315(xpansion of)-.15 F F0(string)2.815 E F1 +(is)2.815 E .398(null, matches of)144 602.4 R F0(pattern)2.898 E F1 .398 +(are deleted.)2.898 F(If)5.398 E F0(string)2.898 E F1 .398 +(is null, matches of)2.898 F F0(pattern)2.898 E F1 .399 +(are deleted and the)2.899 F F2(/)2.899 E F1(fol-)2.899 E(lo)144 614.4 Q +(wing)-.25 E F0(pattern)2.5 E F1(may be omitted.)2.5 E .95(If the)144 +631.2 R F2(patsub_r)3.45 E(eplacement)-.18 E F1 .95 +(shell option is enabled using)3.45 F F2(shopt)3.45 E F1 3.45(,a)C 1.25 +-.15(ny u)-3.45 H .95(nquoted instances of).15 F F2(&)3.45 E F1(in)3.45 +E F0(string)144 643.2 Q F1(are replaced with the matching portion of)2.5 +E F0(pattern)2.5 E F1(.)A .749(Quoting an)144 660 R 3.249(yp)-.15 G .749 +(art of)-3.249 F F0(string)3.249 E F1 .749 +(inhibits replacement in the e)3.249 F .75 +(xpansion of the quoted portion, including)-.15 F .767 +(replacement strings stored in shell v)144 672 R 3.267 +(ariables. Backslash)-.25 F .767(will escape)3.267 F F2(&)3.267 E F1(in) +3.267 E F0(string)3.267 E F1 3.267(;t)C .767(he backslash is)-3.267 F +(remo)144 684 Q -.15(ve)-.15 G 2.668(di).15 G 2.668(no)-2.668 G .169 +(rder to permit a literal)-2.668 F F2(&)2.669 E F1 .169 (in the replacement string.)2.669 F .169 -(Backslash can also be used to es-)5.169 F 1.428(cape a backslash;)144 -348 R F2(\\\\)3.928 E F0 1.428 +(Backslash can also be used to es-)5.169 F 1.429(cape a backslash;)144 +696 R F2(\\\\)3.928 E F1 1.428 (results in a literal backslash in the replacement.)3.928 F 1.428 -(Users should tak)6.428 F 3.929(ec)-.1 G 1.429(are if)-3.929 F F1 -(string)144 360 Q F0 .292(is double-quoted to a)2.792 F -.2(vo)-.2 G +(Users should tak)6.428 F 3.928(ec)-.1 G 1.428(are if)-3.928 F F0 +(string)144 708 Q F1 .292(is double-quoted to a)2.791 F -.2(vo)-.2 G .292(id unw).2 F .292 -(anted interactions between the backslash and double-quoting,)-.1 F .053 -(since backslash has special meaning within double quotes.)144 372 R --.15(Pa)5.053 G .054(ttern substitution performs the check).15 F .07 -(for unquoted)144 384 R F2(&)2.57 E F0 .07(after e)2.57 F(xpanding)-.15 -E F1(string)2.569 E F0 2.569(;s)C .069(hell programmers should quote an) --2.569 F 2.569(yo)-.15 G .069(ccurrences of)-2.569 F F2(&)2.569 E F0 -(the)2.569 E(y)-.15 E -.1(wa)144 396 S 1.112(nt to be tak).1 F 1.112 +(anted interactions between the backslash and double-quoting,)-.1 F .054 +(since backslash has special meaning within double quotes.)144 720 R +-.15(Pa)5.053 G .053(ttern substitution performs the check).15 F +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(25)193.45 E 0 Cg EP +%%Page: 26 26 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .069(for unquoted)144 84 R/F2 10/Times-Bold@0 SF(&) +2.569 E F1 .069(after e)2.569 F(xpanding)-.15 E F0(string)2.569 E F1 +2.569(;s)C .069(hell programmers should quote an)-2.569 F 2.57(yo)-.15 G +.07(ccurrences of)-2.57 F F2(&)2.57 E F1(the)2.57 E(y)-.15 E -.1(wa)144 +96 S 1.113(nt to be tak).1 F 1.112 (en literally in the replacement and ensure an)-.1 F 3.612(yi)-.15 G -1.112(nstances of)-3.612 F F2(&)3.612 E F0(the)3.612 E 3.613(yw)-.15 G -1.113(ant to be re-)-3.713 F(placed are unquoted.)144 408 Q .687(If the) -144 432 R F2(nocasematch)3.187 E F0 .687 +1.112(nstances of)-3.612 F F2(&)3.612 E F1(the)3.612 E 3.612(yw)-.15 G +1.112(ant to be re-)-3.712 F(placed are unquoted.)144 108 Q .686(If the) +144 124.8 R F2(nocasematch)3.186 E F1 .687 (shell option is enabled, the match is performed without re)3.187 F -.05 (ga)-.15 G .687(rd to the case of).05 F .736(alphabetic characters.)144 -444 R(If)5.736 E F1(par)4.486 E(ameter)-.15 E F0(is)3.966 E F2(@)3.236 E -F0(or)3.236 E F2(*)3.236 E F0 3.236(,t)C .736 -(he substitution operation is applied to each posi-)-3.236 F .655 -(tional parameter in turn, and the e)144 456 R .654 -(xpansion is the resultant list.)-.15 F(If)5.654 E F1(par)4.404 E -(ameter)-.15 E F0 .654(is an array v)3.884 F(ariable)-.25 E .347 -(subscripted with)144 468 R F2(@)2.847 E F0(or)2.847 E F2(*)2.847 E F0 -2.847(,t)C .348(he substitution operation is applied to each member of \ -the array in turn,)-2.847 F(and the e)144 480 Q -(xpansion is the resultant list.)-.15 E(${)108 496.8 Q F1(par)A(ameter) --.15 E F2(^)A F1(pattern)A F0(})A(${)108 508.8 Q F1(par)A(ameter)-.15 E -F2(^^)A F1(pattern)A F0(})A(${)108 520.8 Q F1(par)A(ameter)-.15 E F2(,)A -F1(pattern)A F0(})A(${)108 532.8 Q F1(par)A(ameter)-.15 E F2(,,)A F1 -(pattern)A F0(})A F2 .438(Case modi\214cation)144 544.8 R F0 5.438(.T)C -.438(his e)-5.438 F .437 -(xpansion modi\214es the case of alphabetic characters in)-.15 F F1(par) -2.937 E(ameter)-.15 E F0 5.437(.T)C(he)-5.437 E F1(pattern)144 556.8 Q -F0 .373(is e)2.873 F .374 +136.8 R(If)5.736 E F0(par)4.486 E(ameter)-.15 E F1(is)3.966 E F2(@)3.236 +E F1(or)3.236 E F2(*)3.236 E F1 3.236(,t)C .736 +(he substitution operation is applied to each posi-)-3.236 F .654 +(tional parameter in turn, and the e)144 148.8 R .654 +(xpansion is the resultant list.)-.15 F(If)5.655 E F0(par)4.405 E +(ameter)-.15 E F1 .655(is an array v)3.885 F(ariable)-.25 E .348 +(subscripted with)144 160.8 R F2(@)2.848 E F1(or)2.848 E F2(*)2.848 E F1 +2.848(,t)C .348(he substitution operation is applied to each member of \ +the array in turn,)-2.848 F(and the e)144 172.8 Q +(xpansion is the resultant list.)-.15 E(${)108 189.6 Q F0(par)A(ameter) +-.15 E F2<00>A F0(pattern)A F1(})A(${)108 201.6 Q F0(par)A(ameter)-.15 E +F2<0000>A F0(pattern)A F1(})A(${)108 213.6 Q F0(par)A(ameter)-.15 E F2 +(,)A F0(pattern)A F1(})A(${)108 225.6 Q F0(par)A(ameter)-.15 E F2(,,)A +F0(pattern)A F1(})A F2 .437(Case modi\214cation)144 237.6 R F1 5.437(.T) +C .437(his e)-5.437 F .438 +(xpansion modi\214es the case of alphabetic characters in)-.15 F F0(par) +2.938 E(ameter)-.15 E F1 5.438(.T)C(he)-5.438 E F0(pattern)144 249.6 Q +F1 .374(is e)2.874 F .374 (xpanded to produce a pattern just as in pathname e)-.15 F 2.874 -(xpansion. Each)-.15 F .374(character in the e)2.874 F(x-)-.15 E .514 -(panded v)144 568.8 R .514(alue of)-.25 F F1(par)3.014 E(ameter)-.15 E -F0 .514(is tested ag)3.014 F(ainst)-.05 E F1(pattern)3.014 E F0 3.014 -(,a)C .513(nd, if it matches the pattern, its case is con-)-3.014 F -.15 -(ve)144 580.8 S 2.822(rted. The).15 F .323 -(pattern should not attempt to match more than one character)2.822 F -5.323(.T)-.55 G(he)-5.323 E F2(^)2.823 E F0 .323(operator con)2.823 F --.15(ve)-.4 G(rts).15 E(lo)144 592.8 Q .181(wercase letters matching) --.25 F F1(pattern)2.681 E F0 .181(to uppercase; the)2.681 F F2(,)2.681 E -F0 .181(operator con)2.681 F -.15(ve)-.4 G .18 -(rts matching uppercase letters).15 F .085(to lo)144 604.8 R 2.585 -(wercase. The)-.25 F F2(^^)2.585 E F0(and)2.585 E F2(,,)2.585 E F0 -.15 -(ex)2.585 G .085(pansions con).15 F -.15(ve)-.4 G .085 -(rt each matched character in the e).15 F .085(xpanded v)-.15 F .085 -(alue; the)-.25 F F2(^)2.585 E F0(and)144 616.8 Q F2(,)3.591 E F0 -.15 -(ex)3.591 G 1.091(pansions match and con).15 F -.15(ve)-.4 G 1.091 -(rt only the \214rst character in the e).15 F 1.09(xpanded v)-.15 F 3.59 -(alue. If)-.25 F F1(pattern)3.59 E F0(is)3.59 E 1.12 -(omitted, it is treated lik)144 628.8 R 3.62(ea)-.1 G F2(?)A F0 3.62(,w) -C 1.12(hich matches e)-3.62 F -.15(ve)-.25 G 1.121(ry character).15 F -6.121(.I)-.55 G(f)-6.121 E F1(par)4.871 E(ameter)-.15 E F0(is)4.351 E F2 -(@)3.621 E F0(or)3.621 E F2(*)3.621 E F0 3.621(,t)C 1.121(he case)-3.621 -F .339(modi\214cation operation is applied to each positional parameter\ - in turn, and the e)144 640.8 R .339(xpansion is the re-)-.15 F .249 -(sultant list.)144 652.8 R(If)5.249 E F1(par)3.999 E(ameter)-.15 E F0 -.249(is an array v)3.479 F .249(ariable subscripted with)-.25 F F2(@) -2.749 E F0(or)2.75 E F2(*)2.75 E F0 2.75(,t)C .25 -(he case modi\214cation oper)-2.75 F(-)-.2 E +(xpansion. Each)-.15 F .373(character in the e)2.873 F(x-)-.15 E .513 +(panded v)144 261.6 R .513(alue of)-.25 F F0(par)3.013 E(ameter)-.15 E +F1 .513(is tested ag)3.013 F(ainst)-.05 E F0(pattern)3.013 E F1 3.013 +(,a)C .514(nd, if it matches the pattern, its case is con-)-3.013 F -.15 +(ve)144 273.6 S 2.658(rted. The).15 F .157 +(pattern should not attempt to match more than one character)2.658 F +5.157(.T)-.55 G(he)-5.157 E F2<00>2.657 E F1 .157(operator con)2.657 F +-.15(ve)-.4 G(rts).15 E(lo)144 285.6 Q .18(wercase letters matching)-.25 +F F0(pattern)2.681 E F1 .181(to uppercase; the)2.681 F F2(,)2.681 E F1 +.181(operator con)2.681 F -.15(ve)-.4 G .181 +(rts matching uppercase letters).15 F .149(to lo)144 297.6 R 2.649 +(wercase. The)-.25 F F2<0000>2.649 E F1(and)2.649 E F2(,,)2.649 E F1 +-.15(ex)2.649 G .149(pansions con).15 F -.15(ve)-.4 G .149 +(rt each matched character in the e).15 F .148(xpanded v)-.15 F .148 +(alue; the)-.25 F F2<00>144 309.6 Q F1(and)3.037 E F2(,)3.037 E F1 -.15 +(ex)3.037 G .537(pansions match and con).15 F -.15(ve)-.4 G .538 +(rt only the \214rst character in the e).15 F .538(xpanded v)-.15 F +3.038(alue. If)-.25 F F0(pattern)3.038 E F1(is)3.038 E 1.121 +(omitted, it is treated lik)144 321.6 R 3.621(ea)-.1 G F2(?)A F1 3.621 +(,w)C 1.121(hich matches e)-3.621 F -.15(ve)-.25 G 1.121(ry character) +.15 F 6.12(.I)-.55 G(f)-6.12 E F0(par)4.87 E(ameter)-.15 E F1(is)4.35 E +F2(@)3.62 E F1(or)3.62 E F2(*)3.62 E F1 3.62(,t)C 1.12(he case)-3.62 F +.339(modi\214cation operation is applied to each positional parameter i\ +n turn, and the e)144 333.6 R .34(xpansion is the re-)-.15 F .25 +(sultant list.)144 345.6 R(If)5.25 E F0(par)4 E(ameter)-.15 E F1 .25 +(is an array v)3.48 F .249(ariable subscripted with)-.25 F F2(@)2.749 E +F1(or)2.749 E F2(*)2.749 E F1 2.749(,t)C .249 +(he case modi\214cation oper)-2.749 F(-)-.2 E (ation is applied to each member of the array in turn, and the e)144 -664.8 Q(xpansion is the resultant list.)-.15 E(${)108 681.6 Q F1(par)A -(ameter)-.15 E F2(@)A F1(oper)A(ator)-.15 E F0(})A F2 -.1(Pa)144 693.6 S -.86(rameter transf).1 F(ormation)-.25 E F0 5.86(.T)C .86(he e)-5.86 F +357.6 Q(xpansion is the resultant list.)-.15 E(${)108 374.4 Q F0(par)A +(ameter)-.15 E F2(@)A F0(oper)A(ator)-.15 E F1(})A F2 -.1(Pa)144 386.4 S +.86(rameter transf).1 F(ormation)-.25 E F1 5.86(.T)C .86(he e)-5.86 F .86(xpansion is either a transformation of the v)-.15 F .86(alue of)-.25 -F F1(par)3.36 E(ameter)-.15 E F0 .153(or information about)144 705.6 R -F1(par)2.653 E(ameter)-.15 E F0 .153(itself, depending on the v)2.653 F -.153(alue of)-.25 F F1(oper)2.653 E(ator)-.15 E F0 5.154(.E)C(ach)-5.154 -E F1(oper)2.654 E(ator)-.15 E F0 .154(is a sin-)2.654 F(gle letter:)144 -717.6 Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(25)185.115 E 0 -Cg EP -%%Page: 26 26 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(U)144 84 Q F0 .143(The e)180 84 R .142 -(xpansion is a string that is the v)-.15 F .142(alue of)-.25 F/F2 10 -/Times-Italic@0 SF(par)2.642 E(ameter)-.15 E F0 .142(with lo)2.642 F -.142(wercase alphabetic charac-)-.25 F(ters con)180 96 Q -.15(ve)-.4 G -(rted to uppercase.).15 E F1(u)144 108 Q F0 .429(The e)180 108 R .429 -(xpansion is a string that is the v)-.15 F .429(alue of)-.25 F F2(par) -2.929 E(ameter)-.15 E F0 .43(with the \214rst character con)2.93 F -.15 -(ve)-.4 G(rted).15 E(to uppercase, if it is alphabetic.)180 120 Q F1(L) -144 132 Q F0 .125(The e)180 132 R .124 -(xpansion is a string that is the v)-.15 F .124(alue of)-.25 F F2(par) -2.624 E(ameter)-.15 E F0 .124(with uppercase alphabetic charac-)2.624 F -(ters con)180 144 Q -.15(ve)-.4 G(rted to lo).15 E(wercase.)-.25 E F1(Q) -144 156 Q F0 1.064(The e)180 156 R 1.064 -(xpansion is a string that is the v)-.15 F 1.065(alue of)-.25 F F2(par) -3.565 E(ameter)-.15 E F0 1.065(quoted in a format that can be)3.565 F -(reused as input.)180 168 Q F1(E)144 180 Q F0 .441(The e)180 180 R .441 -(xpansion is a string that is the v)-.15 F .441(alue of)-.25 F F2(par) -2.941 E(ameter)-.15 E F0 .44(with backslash escape sequences)2.94 F -.15 -(ex)180 192 S(panded as with the).15 E F1($\010...\010)2.5 E F0 -(quoting mechanism.)2.5 E F1(P)144 204 Q F0 1.072(The e)180 204 R 1.073 +F F0(par)3.36 E(ameter)-.15 E F1 .154(or information about)144 398.4 R +F0(par)2.654 E(ameter)-.15 E F1 .153(itself, depending on the v)2.654 F +.153(alue of)-.25 F F0(oper)2.653 E(ator)-.15 E F1 5.153(.E)C(ach)-5.153 +E F0(oper)2.653 E(ator)-.15 E F1 .153(is a sin-)2.653 F(gle letter:)144 +410.4 Q F2(U)144 427.2 Q F1 .142(The e)180 427.2 R .142 +(xpansion is a string that is the v)-.15 F .142(alue of)-.25 F F0(par) +2.642 E(ameter)-.15 E F1 .142(with lo)2.642 F .143 +(wercase alphabetic charac-)-.25 F(ters con)180 439.2 Q -.15(ve)-.4 G +(rted to uppercase.).15 E F2(u)144 451.2 Q F1 .43(The e)180 451.2 R .43 +(xpansion is a string that is the v)-.15 F .429(alue of)-.25 F F0(par) +2.929 E(ameter)-.15 E F1 .429(with the \214rst character con)2.929 F +-.15(ve)-.4 G(rted).15 E(to uppercase, if it is alphabetic.)180 463.2 Q +F2(L)144 475.2 Q F1 .124(The e)180 475.2 R .124 +(xpansion is a string that is the v)-.15 F .124(alue of)-.25 F F0(par) +2.624 E(ameter)-.15 E F1 .125(with uppercase alphabetic charac-)2.625 F +(ters con)180 487.2 Q -.15(ve)-.4 G(rted to lo).15 E(wercase.)-.25 E F2 +(Q)144 499.2 Q F1 1.065(The e)180 499.2 R 1.065 +(xpansion is a string that is the v)-.15 F 1.065(alue of)-.25 F F0(par) +3.565 E(ameter)-.15 E F1 1.064(quoted in a format that can be)3.565 F +(reused as input.)180 511.2 Q F2(E)144 523.2 Q F1 .44(The e)180 523.2 R +.441(xpansion is a string that is the v)-.15 F .441(alue of)-.25 F F0 +(par)2.941 E(ameter)-.15 E F1 .441(with backslash escape sequences)2.941 +F -.15(ex)180 535.2 S(panded as with the).15 E F2<2408>2.5 E F1 1.666 +(...)C F2<08>-1.666 E F1(quoting mechanism.)2.5 E F2(P)144 547.2 Q F1 +1.073(The e)180 547.2 R 1.073 (xpansion is a string that is the result of e)-.15 F 1.073 -(xpanding the v)-.15 F 1.073(alue of)-.25 F F2(par)3.573 E(ameter)-.15 E -F0 1.073(as if it)3.573 F(were a prompt string \(see)180 216 Q F1(PR)2.5 -E(OMPTING)-.3 E F0(belo)2.5 E(w\).)-.25 E F1(A)144 228 Q F0 1.138(The e) -180 228 R 1.138 +(xpanding the v)-.15 F 1.073(alue of)-.25 F F0(par)3.573 E(ameter)-.15 E +F1 1.073(as if it)3.573 F(were a prompt string \(see)180 559.2 Q F2(PR) +2.5 E(OMPTING)-.3 E F1(belo)2.5 E(w\).)-.25 E F2(A)144 571.2 Q F1 1.137 +(The e)180 571.2 R 1.138 (xpansion is a string in the form of an assignment statement or)-.15 F -F1(declar)3.637 E(e)-.18 E F0(command)3.637 E(that, if e)180 240 Q -.25 -(va)-.25 G(luated, will recreate).25 E F2(par)2.5 E(ameter)-.15 E F0 -(with its attrib)2.5 E(utes and v)-.2 E(alue.)-.25 E F1(K)144 252 Q F0 -1.339(Produces a possibly-quoted v)180 252 R 1.339(ersion of the v)-.15 -F 1.339(alue of)-.25 F F2(par)3.839 E(ameter)-.15 E F0 3.839(,e)C 1.34 -(xcept that it prints the)-3.989 F -.25(va)180 264 S .258(lues of inde) -.25 F -.15(xe)-.15 G 2.757(da).15 G .257(nd associati)-2.757 F .557 -.15 -(ve a)-.25 H .257(rrays as a sequence of quoted k).15 F -.15(ey)-.1 G -(-v).15 E .257(alue pairs \(see)-.25 F F1(Ar)2.757 E(-)-.37 E(rays)180 -276 Q F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1(a)144 288 Q F0(The e)180 -288 Q(xpansion is a string consisting of \215ag v)-.15 E -(alues representing)-.25 E F2(par)2.5 E(ameter)-.15 E F0 1.1 -.55('s a)D -(ttrib).55 E(utes.)-.2 E F1(k)144 300 Q F0(Lik)180 300 Q 2.657(et)-.1 G -.157(he K transformation, b)-2.657 F .157(ut e)-.2 F .157(xpands the k) --.15 F -.15(ey)-.1 G 2.657(sa).15 G .157(nd v)-2.657 F .157 -(alues of inde)-.25 F -.15(xe)-.15 G 2.657(da).15 G .158(nd associati) --2.657 F .458 -.15(ve a)-.25 H -.2(r-).15 G(rays to separate w)180 312 Q -(ords after w)-.1 E(ord splitting.)-.1 E(If)144 328.8 Q F2(par)4.403 E -(ameter)-.15 E F0(is)3.883 E F1(@)3.153 E F0(or)3.153 E F1(*)3.153 E F0 +F2(declar)3.638 E(e)-.18 E F1(command)3.638 E(that, if e)180 583.2 Q +-.25(va)-.25 G(luated, will recreate).25 E F0(par)2.5 E(ameter)-.15 E F1 +(with its attrib)2.5 E(utes and v)-.2 E(alue.)-.25 E F2(K)144 595.2 Q F1 +1.34(Produces a possibly-quoted v)180 595.2 R 1.339(ersion of the v)-.15 +F 1.339(alue of)-.25 F F0(par)3.839 E(ameter)-.15 E F1 3.839(,e)C 1.339 +(xcept that it prints the)-3.989 F -.25(va)180 607.2 S .257 +(lues of inde).25 F -.15(xe)-.15 G 2.757(da).15 G .257(nd associati) +-2.757 F .557 -.15(ve a)-.25 H .257(rrays as a sequence of quoted k).15 +F -.15(ey)-.1 G(-v).15 E .257(alue pairs \(see)-.25 F F2(Ar)2.758 E(-) +-.37 E(rays)180 619.2 Q F1(abo)2.5 E -.15(ve)-.15 G 2.5(\). The).15 F +-.1(ke)2.5 G(ys and v)-.05 E +(alues are quoted in a format that can be reused as input.)-.25 E F2(a) +144 631.2 Q F1(The e)180 631.2 Q +(xpansion is a string consisting of \215ag v)-.15 E(alues representing) +-.25 E F0(par)2.5 E(ameter)-.15 E F1 1.1 -.55('s a)D(ttrib).55 E(utes.) +-.2 E F2(k)144 643.2 Q F1(Lik)180 643.2 Q 2.658(et)-.1 G .157 +(he K transformation, b)-2.658 F .157(ut e)-.2 F .157(xpands the k)-.15 +F -.15(ey)-.1 G 2.657(sa).15 G .157(nd v)-2.657 F .157(alues of inde) +-.25 F -.15(xe)-.15 G 2.657(da).15 G .157(nd associati)-2.657 F .457 +-.15(ve a)-.25 H -.2(r-).15 G(rays to separate w)180 655.2 Q +(ords after w)-.1 E(ord splitting.)-.1 E(If)144 672 Q F0(par)4.402 E +(ameter)-.15 E F1(is)3.882 E F2(@)3.152 E F1(or)3.152 E F2(*)3.153 E F1 3.153(,t)C .653(he operation is applied to each positional parameter in\ turn, and the e)-3.153 F(x-)-.15 E .403(pansion is the resultant list.) -144 340.8 R(If)5.403 E F2(par)4.153 E(ameter)-.15 E F0 .403 -(is an array v)3.633 F .403(ariable subscripted with)-.25 F F1(@)2.903 E -F0(or)2.903 E F1(*)2.903 E F0 2.903(,t)C .403(he opera-)-2.903 F -(tion is applied to each member of the array in turn, and the e)144 -352.8 Q(xpansion is the resultant list.)-.15 E .708(The result of the e) -144 376.8 R .708(xpansion is subject to w)-.15 F .708 +144 684 R(If)5.403 E F0(par)4.153 E(ameter)-.15 E F1 .403(is an array v) +3.633 F .403(ariable subscripted with)-.25 F F2(@)2.903 E F1(or)2.903 E +F2(*)2.903 E F1 2.903(,t)C .402(he opera-)-2.903 F +(tion is applied to each member of the array in turn, and the e)144 696 +Q(xpansion is the resultant list.)-.15 E .708(The result of the e)144 +712.8 R .708(xpansion is subject to w)-.15 F .708 (ord splitting and pathname e)-.1 F .708(xpansion as described be-)-.15 -F(lo)144 388.8 Q -.65(w.)-.25 G F1(Command Substitution)87 405.6 Q F2 -1.697(Command substitution)108 417.6 R F0(allo)4.197 E 1.697 -(ws the output of a command to replace the command name.)-.25 F 1.698 -(There are tw)6.698 F(o)-.1 E(forms:)108 429.6 Q F1($\()144 446.4 Q F2 -(command)A F1(\))1.666 E F0(or)108 458.4 Q F1<92>144 470.4 Q F2(command) -A F1<92>A(Bash)108 487.2 Q F0 .089(performs the e)2.589 F .089 -(xpansion by e)-.15 F -.15(xe)-.15 G(cuting).15 E F2(command)2.589 E F0 -.088(in a subshell en)2.589 F .088(vironment and replacing the command) --.4 F .41(substitution with the standard output of the command, with an) -108 499.2 R 2.91(yt)-.15 G .41(railing ne)-2.91 F .41(wlines deleted.) --.25 F .41(Embedded ne)5.41 F(w-)-.25 E .192(lines are not deleted, b) -108 511.2 R .192(ut the)-.2 F 2.692(ym)-.15 G .192(ay be remo)-2.692 F --.15(ve)-.15 G 2.692(dd).15 G .192(uring w)-2.692 F .192(ord splitting.) --.1 F .192(The command substitution)5.192 F F1($\(cat)2.691 E F2(\214le) -2.691 E F1(\))A F0(can be replaced by the equi)108 523.2 Q -.25(va)-.25 -G(lent b).25 E(ut f)-.2 E(aster)-.1 E F1($\(<)2.5 E F2(\214le)2.5 E F1 -(\))A F0(.)A 1.724(When the old-style backquote form of substitution is\ - used, backslash retains its literal meaning e)108 540 R(xcept)-.15 E -.315(when follo)108 552 R .315(wed by)-.25 F F1($)2.815 E F0(,)A F1<92> -2.815 E F0 2.815(,o)C(r)-2.815 E F1(\\)2.815 E F0 5.315(.T)C .314(he \ -\214rst backquote not preceded by a backslash terminates the command su\ -b-)-5.315 F 3.886(stitution. When)108 564 R 1.386(using the $\()3.886 F -F2(command).833 E F0 3.886(\)f)1.666 G 1.387 -(orm, all characters between the parentheses mak)-3.886 F 3.887(eu)-.1 G -3.887(pt)-3.887 G 1.387(he com-)-3.887 F -(mand; none are treated specially)108 576 Q(.)-.65 E .894 -(Command substitutions may be nested.)108 592.8 R 2.494 -.8(To n)5.894 H -.894(est when using the backquoted form, escape the inner back-).8 F -(quotes with backslashes.)108 604.8 Q .422 -(If the substitution appears within double quotes, w)108 621.6 R .422 -(ord splitting and pathname e)-.1 F .423(xpansion are not performed)-.15 -F(on the results.)108 633.6 Q F1(Arithmetic Expansion)87 650.4 Q F0 -1.035(Arithmetic e)108 662.4 R 1.035(xpansion allo)-.15 F 1.035 -(ws the e)-.25 F -.25(va)-.25 G 1.034(luation of an arithmetic e).25 F -1.034(xpression and the substitution of the result.)-.15 F -(The format for arithmetic e)108 674.4 Q(xpansion is:)-.15 E F1($\(\() -144 691.2 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(\)\))A F0(The)108 708 Q -F2 -.2(ex)2.735 G(pr).2 E(ession)-.37 E F0(under)2.975 E .235 -(goes the same e)-.18 F .236 -(xpansions as if it were within double quotes, b)-.15 F .236 -(ut double quote charac-)-.2 F 2.8(ters in)108 720 R F2 -.2(ex)5.3 G(pr) -.2 E(ession)-.37 E F0 2.799(are not treated specially and are remo)5.3 F --.15(ve)-.15 G 5.299(d. All).15 F(tok)5.299 E 2.799(ens in the e)-.1 F -2.799(xpression under)-.15 F(go)-.18 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(26)185.115 E 0 Cg EP +F(lo)144 724.8 Q -.65(w.)-.25 G(GNU Bash 5.3)72 768 Q(2024 March 29) +144.29 E(26)193.45 E 0 Cg EP %%Page: 27 27 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .919 -(parameter and v)108 84 R .919(ariable e)-.25 F .919 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(Command Substitution)87 84 Q +F0 .324(Command substitution)108 96 R F1(allo)2.824 E .324 +(ws the output of a command to replace the command itself.)-.25 F .323 +(There are tw)5.323 F 2.823(os)-.1 G(tan-)-2.823 E(dard forms:)108 108 Q +F2($\()144 124.8 Q F0(command)A F2(\))1.666 E F1(or \(deprecated\))108 +136.8 Q F2<92>144 148.8 Q F0(command)A F2<92>A F1(.)A F2(Bash)108 165.6 +Q F1 .088(performs the e)2.588 F .088(xpansion by e)-.15 F -.15(xe)-.15 +G(cuting).15 E F0(command)2.588 E F1 .089(in a subshell en)2.589 F .089 +(vironment and replacing the command)-.4 F .41 +(substitution with the standard output of the command, with an)108 177.6 +R 2.91(yt)-.15 G .41(railing ne)-2.91 F .41(wlines deleted.)-.25 F .41 +(Embedded ne)5.41 F(w-)-.25 E .191(lines are not deleted, b)108 189.6 R +.192(ut the)-.2 F 2.692(ym)-.15 G .192(ay be remo)-2.692 F -.15(ve)-.15 +G 2.692(dd).15 G .192(uring w)-2.692 F .192(ord splitting.)-.1 F .192 +(The command substitution)5.192 F F2($\(cat)2.692 E F0(\214le)2.692 E F2 +(\))A F1(can be replaced by the equi)108 201.6 Q -.25(va)-.25 G(lent b) +.25 E(ut f)-.2 E(aster)-.1 E F2($\(<)2.5 E F0(\214le)2.5 E F2(\))A F1(.) +A -.4(Wi)108 218.4 S 1.237(th the old-style backquote form of substitut\ +ion, backslash retains its literal meaning e).4 F 1.237(xcept when fol-) +-.15 F(lo)108 230.4 Q .527(wed by)-.25 F F2($)3.027 E F1(,)A F2<92>3.027 +E F1 3.027(,o)C(r)-3.027 E F2(\\)3.027 E F1 5.527(.T)C .528(he \214rst \ +backquote not preceded by a backslash terminates the command substituti\ +on.)-5.527 F .092(When using the $\()108 242.4 R F0(command).833 E F1 +2.592(\)f)1.666 G .092(orm, all characters between the parentheses mak) +-2.592 F 2.592(eu)-.1 G 2.592(pt)-2.592 G .092(he command; none are) +-2.592 F(treated specially)108 254.4 Q(.)-.65 E +(There is an alternate form of command substitution:)108 271.2 Q F2(${) +144 288 Q F0 2.5(cc)C(ommand)-2.5 E F2 1.666(;})C F1 .639(which e)108 +304.8 R -.15(xe)-.15 G(cutes).15 E F0(command)3.139 E F1 .639 +(in the current e)3.139 F -.15(xe)-.15 G .639(cution en).15 F .639 +(vironment and captures its output, ag)-.4 F .64(ain with trailing)-.05 +F(ne)108 316.8 Q(wlines remo)-.25 E -.15(ve)-.15 G(d.).15 E .271 +(The character)108 333.6 R F0(c)2.771 E F1(follo)2.771 E .271 +(wing the open brace must be a space, tab, ne)-.25 F .271(wline, or)-.25 +F F2(|)2.771 E F1 2.771(,a)C .271(nd the close brace must be in)-2.771 F +2.821(ap)108 345.6 S .321(osition where a reserv)-2.821 F .321(ed w)-.15 +F .321(ord may appear \(i.e., preceded by a command terminator such as \ +semicolon\).)-.1 F F2(Bash)108 357.6 Q F1(allo)2.71 E .21 +(ws the close brace to be joined to the remaining characters in the w) +-.25 F .209(ord without being follo)-.1 F .209(wed by)-.25 F 2.5(as)108 +369.6 S(hell metacharacter as a reserv)-2.5 E(ed w)-.15 E(ord w)-.1 E +(ould usually require.)-.1 E(An)108 386.4 Q 3.384(ys)-.15 G .884(ide ef) +-3.384 F .884(fects of)-.25 F F0(command)3.384 E F1(tak)3.384 E 3.384 +(ee)-.1 G -.25(ff)-3.384 G .884(ect immediately in the current e).25 F +-.15(xe)-.15 G .884(cution en).15 F .884(vironment and persist in)-.4 F +(the current en)108 398.4 Q +(vironment after the command completes \(e.g., the)-.4 E F2(exit)2.5 E +F1 -.2(bu)2.5 G(iltin will e).2 E(xit the shell\).)-.15 E .221 +(This type of command substitution super\214cially resembles e)108 415.2 +R -.15(xe)-.15 G .221(cuting an unnamed shell function: local v).15 F +(ari-)-.25 E .172(ables are created as when a shell function is e)108 +427.2 R -.15(xe)-.15 G .172(cuting, and the).15 F F2 -.18(re)2.672 G +(tur).18 E(n)-.15 E F1 -.2(bu)2.672 G .172(iltin forces).2 F F0(command) +2.672 E F1 .172(to complete;)2.672 F(ho)108 439.2 Q(we)-.25 E -.15(ve) +-.25 G 2.521 -.4(r, t).15 H 1.721(he rest of the e).4 F -.15(xe)-.15 G +1.721(cution en).15 F 1.721 +(vironment, including the positional parameters, is shared with the)-.4 +F(caller)108 451.2 Q(.)-.55 E .392(If the \214rst character follo)108 +468 R .392(wing the open brace is a)-.25 F F2(|)2.892 E F1 2.892(,t)C +.392(he construct e)-2.892 F .392(xpands to the v)-.15 F .392 +(alue of the)-.25 F F2(REPL)2.892 E(Y)-.92 E F1(shell)2.892 E -.25(va) +108 480 S .505(riable after).25 F F0(command)3.005 E F1 -.15(exe)3.005 G +.505(cutes, without remo).15 F .505(ving an)-.15 F 3.005(yt)-.15 G .505 +(railing ne)-3.005 F .505(wlines, and the standard output of)-.25 F F0 +(com-)3.005 E(mand)108 492 Q F1 1.208 +(remains the same as in the calling shell.)3.708 F F2(Bash)6.208 E F1 +(creates)3.708 E F2(REPL)3.708 E(Y)-.92 E F1 1.208 +(as an initially-unset local v)3.708 F(ariable)-.25 E(when)108 504 Q F0 +(command)3.514 E F1 -.15(exe)3.514 G 1.014(cutes, and restores).15 F F2 +(REPL)3.514 E(Y)-.92 E F1 1.014(to the v)3.514 F 1.014 +(alue it had before the command substitution after)-.25 F F0(command)108 +516 Q F1(completes, as with an)2.5 E 2.5(yl)-.15 G(ocal v)-2.5 E +(ariable.)-.25 E .894(Command substitutions may be nested.)108 532.8 R +2.494 -.8(To n)5.894 H .894 +(est when using the backquoted form, escape the inner back-).8 F +(quotes with backslashes.)108 544.8 Q .004 +(If the substitution appears within double quotes,)108 561.6 R F2(bash) +2.504 E F1 .004(does not perform w)2.504 F .004 +(ord splitting and pathname e)-.1 F(xpan-)-.15 E(sion on the results.) +108 573.6 Q F2(Arithmetic Expansion)87 590.4 Q F1 1.034(Arithmetic e)108 +602.4 R 1.034(xpansion allo)-.15 F 1.034(ws the e)-.25 F -.25(va)-.25 G +1.034(luation of an arithmetic e).25 F 1.035 +(xpression and the substitution of the result.)-.15 F +(The format for arithmetic e)108 614.4 Q(xpansion is:)-.15 E F2($\(\() +144 631.2 Q F0 -.2(ex)C(pr).2 E(ession)-.37 E F2(\)\))A F1(The)108 648 Q +F0 -.2(ex)2.736 G(pr).2 E(ession)-.37 E F1(under)2.976 E .236 +(goes the same e)-.18 F .236 +(xpansions as if it were within double quotes, b)-.15 F .235 +(ut double quote charac-)-.2 F .42(ters in)108 660 R F0 -.2(ex)2.92 G +(pr).2 E(ession)-.37 E F1 .42(are not treated specially and are remo) +2.92 F -.15(ve)-.15 G 2.921(d. All).15 F(tok)2.921 E .421(ens in the e) +-.1 F .421(xpression under)-.15 F .421(go parame-)-.18 F 1.21(ter and v) +108 672 R 1.21(ariable e)-.25 F 1.209 (xpansion, command substitution, and quote remo)-.15 F -.25(va)-.15 G -3.419(l. The).25 F .92(result is treated as the)3.419 F(arithmetic e)108 -96 Q(xpression to be e)-.15 E -.25(va)-.25 G 2.5(luated. Arithmetic).25 -F -.15(ex)2.5 G(pansions may be nested.).15 E 1.379(The e)108 112.8 R --.25(va)-.25 G 1.378 +3.709(l. The).25 F 1.209(result is treated as the arith-)3.709 F +(metic e)108 684 Q(xpression to be e)-.15 E -.25(va)-.25 G 2.5 +(luated. Arithmetic).25 F -.15(ex)2.5 G(pansions may be nested.).15 E +1.378(The e)108 700.8 R -.25(va)-.25 G 1.378 (luation is performed according to the rules listed belo).25 F 3.878(wu) --.25 G(nder)-3.878 E/F1 9/Times-Bold@0 SF 1.378(ARITHMETIC EV)3.878 F -(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F2 9/Times-Roman@0 SF(.)A F0 -(If)5.878 E/F3 10/Times-Italic@0 SF -.2(ex)108 124.8 S(pr).2 E(ession) --.37 E F0(is in)2.74 E -.25(va)-.4 G(lid,).25 E/F4 10/Times-Bold@0 SF -(bash)2.5 E F0(prints a message indicating f)2.5 E -(ailure and no substitution occurs.)-.1 E F4(Pr)87 141.6 Q -(ocess Substitution)-.18 E F3(Pr)108 153.6 Q .405(ocess substitution) --.45 F F0(allo)2.905 E .405(ws a process')-.25 F 2.905(si)-.55 G .405 +-.25 G(nder)-3.878 E/F3 9/Times-Bold@0 SF 1.378(ARITHMETIC EV)3.878 F +(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F1 +(If)5.879 E F0 -.2(ex)108 712.8 S(pr).2 E(ession)-.37 E F1(is in)2.74 E +-.25(va)-.4 G(lid,).25 E F2(bash)2.5 E F1(prints a message indicating f) +2.5 E(ailure and no substitution occurs.)-.1 E(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(27)193.45 E 0 Cg EP +%%Page: 28 28 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(Pr)87 84 Q +(ocess Substitution)-.18 E F0(Pr)108 96 Q .405(ocess substitution)-.45 F +F1(allo)2.905 E .405(ws a process')-.25 F 2.905(si)-.55 G .405 (nput or output to be referred to using a \214lename.)-2.905 F .405 -(It tak)5.405 F .405(es the form)-.1 F(of)108 165.6 Q F4(<\()3.251 E F3 -(list)A F4(\)).833 E F0(or)3.251 E F4(>\()3.251 E F3(list)A F4(\)).833 E -F0 5.751(.T)C .751(he process)-5.751 F F3(list)3.251 E F0 .751 +(It tak)5.405 F .405(es the form)-.1 F(of)108 108 Q F2(<\()3.25 E F0 +(list)A F2(\)).833 E F1(or)3.25 E F2(>\()3.25 E F0(list)A F2(\)).833 E +F1 5.75(.T)C .751(he process)-5.75 F F0(list)3.251 E F1 .751 (is run asynchronously)3.251 F 3.251(,a)-.65 G .751 -(nd its input or output appears as a \214lename.)-3.251 F .147 -(This \214lename is passed as an ar)108 177.6 R .148 -(gument to the current command as the result of the e)-.18 F 2.648 -(xpansion. If)-.15 F(the)2.648 E F4(>\()2.648 E F3(list)A F4(\)).833 E -F0 .56(form is used, writing to the \214le will pro)108 189.6 R .56 -(vide input for)-.15 F F3(list)3.059 E F0 5.559(.I)C 3.059(ft)-5.559 G -(he)-3.059 E F4(<\()3.059 E F3(list)A F4(\)).833 E F0 .559 -(form is used, the \214le passed as an)3.059 F(ar)108 201.6 Q .308 -(gument should be read to obtain the output of)-.18 F F3(list)2.808 E F0 -5.308(.P)C .309(rocess substitution is supported on systems that sup-) --5.308 F(port named pipes \()108 213.6 Q F3(FIFOs)A F0 2.5(\)o)C 2.5(rt) --2.5 G(he)-2.5 E F4(/de)2.5 E(v/fd)-.15 E F0 -(method of naming open \214les.)2.5 E .897(When a)108 230.4 R -.25(va) +(nd its input or output appears as a \214lename.)-3.251 F .148 +(This \214lename is passed as an ar)108 120 R .148 +(gument to the current command as the result of the e)-.18 F 2.647 +(xpansion. If)-.15 F(the)2.647 E F2(>\()2.647 E F0(list)A F2(\)).833 E +F1 .559(form is used, writing to the \214le will pro)108 132 R .559 +(vide input for)-.15 F F0(list)3.059 E F1 5.559(.I)C 3.059(ft)-5.559 G +(he)-3.059 E F2(<\()3.06 E F0(list)A F2(\)).833 E F1 .56 +(form is used, the \214le passed as an)3.06 F(ar)108 144 Q .309 +(gument should be read to obtain the output of)-.18 F F0(list)2.808 E F1 +5.308(.P)C .308(rocess substitution is supported on systems that sup-) +-5.308 F(port named pipes \()108 156 Q F0(FIFOs)A F1 2.5(\)o)C 2.5(rt) +-2.5 G(he)-2.5 E F2(/de)2.5 E(v/fd)-.15 E F1 +(method of naming open \214les.)2.5 E .896(When a)108 172.8 R -.25(va) -.2 G .896(ilable, process substitution is performed simultaneously wit\ -h parameter and v).25 F .896(ariable e)-.25 F(xpansion,)-.15 E -(command substitution, and arithmetic e)108 242.4 Q(xpansion.)-.15 E F4 --.75(Wo)87 259.2 S(rd Splitting).75 E F0 1.142 -(The shell scans the results of parameter e)108 271.2 R 1.143 -(xpansion, command substitution, and arithmetic e)-.15 F 1.143 -(xpansion that)-.15 F(did not occur within double quotes for)108 283.2 Q -F3(wor)2.84 E 2.5(ds)-.37 G(plitting)-2.5 E F0(.).22 E .063 -(The shell treats each character of)108 300 R F1(IFS)2.563 E F0 .063 -(as a delimiter)2.313 F 2.563(,a)-.4 G .063 +h parameter and v).25 F .897(ariable e)-.25 F(xpansion,)-.15 E +(command substitution, and arithmetic e)108 184.8 Q(xpansion.)-.15 E F2 +-.75(Wo)87 201.6 S(rd Splitting).75 E F1 1.143 +(The shell scans the results of parameter e)108 213.6 R 1.142 +(xpansion, command substitution, and arithmetic e)-.15 F 1.142 +(xpansion that)-.15 F(did not occur within double quotes for)108 225.6 Q +F0(wor)2.84 E 2.5(ds)-.37 G(plitting)-2.5 E F1(.).22 E .063 +(The shell treats each character of)108 242.4 R/F3 9/Times-Bold@0 SF +(IFS)2.563 E F1 .063(as a delimiter)2.313 F 2.563(,a)-.4 G .063 (nd splits the results of the other e)-2.563 F .063(xpansions into w) --.15 F(ords)-.1 E .207(using these characters as \214eld terminators.) -108 312 R(If)5.207 E F1(IFS)2.707 E F0 .207(is unset, or its v)2.457 F -.207(alue is e)-.25 F(xactly)-.15 E F4(<space><tab><newline>)2.708 E F0 -(,)A .837(the def)108 324 R .837(ault, then sequences of)-.1 F F4 -(<space>)3.337 E F0(,)A F4(<tab>)3.337 E F0 3.337(,a)C(nd)-3.337 E F4 -(<newline>)3.337 E F0 .836(at the be)3.336 F .836 -(ginning and end of the results of)-.15 F .345(the pre)108 336 R .345 -(vious e)-.25 F .345(xpansions are ignored, and an)-.15 F 2.845(ys)-.15 -G .345(equence of)-2.845 F F1(IFS)2.845 E F0 .345 -(characters not at the be)2.595 F .345(ginning or end serv)-.15 F(es) --.15 E 1.237(to delimit w)108 348 R 3.737(ords. If)-.1 F F1(IFS)3.737 E -F0 1.236(has a v)3.486 F 1.236(alue other than the def)-.25 F 1.236 -(ault, then sequences of the whitespace characters)-.1 F F4(space)108 -360 Q F0(,)A F4(tab)2.506 E F0 2.506(,a)C(nd)-2.506 E F4(newline)2.506 E -F0 .006(are ignored at the be)2.506 F .006(ginning and end of the w)-.15 -F .007(ord, as long as the whitespace charac-)-.1 F .921 -(ter is in the v)108 372 R .92(alue of)-.25 F F1(IFS)3.42 E F0(\(an)3.17 -E F1(IFS)3.42 E F0 .92(whitespace character\).)3.17 F(An)5.92 E 3.42(yc) --.15 G .92(haracter in)-3.42 F F1(IFS)3.42 E F0 .92(that is not)3.17 F -F1(IFS)3.42 E F0(whitespace,)3.17 E .428(along with an)108 384 R 2.928 -(ya)-.15 G(djacent)-2.928 E F1(IFS)2.928 E F0 .428 -(whitespace characters, delimits a \214eld.)2.678 F 2.928(As)5.428 G -.428(equence of)-2.928 F F1(IFS)2.928 E F0 .429(whitespace charac-)2.679 -F(ters is also treated as a delimiter)108 396 Q 5(.I)-.55 G 2.5(ft)-5 G -(he v)-2.5 E(alue of)-.25 E F1(IFS)2.5 E F0(is null, no w)2.25 E -(ord splitting occurs.)-.1 E .783(Explicit null ar)108 412.8 R .783 -(guments \()-.18 F F4 .833("").833 G F0(or)2.449 E F4 .833<0808>4.115 G -F0 3.282(\)a)C .782 -(re retained and passed to commands as empty strings.)-3.282 F .782 -(Unquoted im-)5.782 F .178(plicit null ar)108 424.8 R .179 +-.15 F(ords)-.1 E(using these characters as \214eld terminators.)108 +254.4 Q(If)108 271.2 Q F3(IFS)3.083 E F1 .583(is unset, or its v)2.833 F +.582(alue is e)-.25 F(xactly)-.15 E F2(<space><tab><newline>)3.082 E F1 +3.082(,t)C .582(he def)-3.082 F .582(ault, then sequences of)-.1 F F2 +(space)3.082 E F1(,)A F2(tab)3.082 E F1(,)A(and)108 283.2 Q F2(newline) +3.626 E F1 1.126(at the be)3.626 F 1.126 +(ginning and end of the results of the pre)-.15 F 1.126(vious e)-.25 F +1.126(xpansions are ignored, and an)-.15 F 3.627(ys)-.15 G(e-)-3.627 E +.429(quence of)108 295.2 R F3(IFS)2.929 E F1 .428 +(characters not at the be)2.678 F .428(ginning or end serv)-.15 F .428 +(es to delimit w)-.15 F 2.928(ords. If)-.1 F F3(IFS)2.928 E F1 .428 +(has a v)2.678 F .428(alue other than)-.25 F .581(the def)108 307.2 R +.581(ault, then sequences of the whitespace characters)-.1 F F2(space) +3.081 E F1(,)A F2(tab)3.081 E F1 3.081(,a)C(nd)-3.081 E F2(newline)3.081 +E F1 .582(are ignored at the be)3.081 F(gin-)-.15 E .008 +(ning and end of the w)108 319.2 R .007 +(ord, as long as the whitespace character is in the v)-.1 F .007 +(alue of)-.25 F F3(IFS)2.507 E F1(\(an)2.257 E F3(IFS)2.507 E F1 .007 +(whitespace char)2.257 F(-)-.2 E 2.814(acter\). An)108 331.2 R 2.814(yc) +-.15 G .315(haracter in)-2.814 F F3(IFS)2.815 E F1 .315(that is not) +2.565 F F3(IFS)2.815 E F1 .315(whitespace, along with an)2.565 F 2.815 +(ya)-.15 G(djacent)-2.815 E F3(IFS)2.815 E F1 .315 +(whitespace characters,)2.565 F(delimits a \214eld.)108 343.2 Q 2.5(As)5 +G(equence of)-2.5 E F3(IFS)2.5 E F1 +(whitespace characters is also treated as a delimiter)2.25 E(.)-.55 E +.162(If the v)108 360 R .161(alue of)-.25 F F3(IFS)2.661 E F1 .161 +(is null, no w)2.411 F .161(ord splitting occurs.)-.1 F(If)5.161 E F3 +(IFS)2.661 E F1 .161(is unset, w)2.411 F .161(ord splitting beha)-.1 F +-.15(ve)-.2 G 2.661(sa).15 G 2.661(si)-2.661 G 2.661(fi)-2.661 G 2.661 +(tc)-2.661 G(ontained)-2.661 E(the def)108 372 Q(ault v)-.1 E(alue of) +-.25 E F2(<space><tab><newline>)2.5 E F1(.)A .782(Explicit null ar)108 +388.8 R .782(guments \()-.18 F F2 .833("").833 G F1(or)2.449 E F2 .833 +<0808>4.115 G F1 3.282(\)a)C .782 +(re retained and passed to commands as empty strings.)-3.282 F .783 +(Unquoted im-)5.783 F .179(plicit null ar)108 400.8 R .179 (guments, resulting from the e)-.18 F .179 (xpansion of parameters that ha)-.15 F .479 -.15(ve n)-.2 H 2.679(ov).15 -G .179(alues, are remo)-2.929 F -.15(ve)-.15 G 2.679(d. If).15 F 2.679 -(ap)2.679 G(a-)-2.679 E .319(rameter with no v)108 436.8 R .319 +G .179(alues, are remo)-2.929 F -.15(ve)-.15 G 2.678(d. If).15 F 2.678 +(ap)2.678 G(a-)-2.678 E .318(rameter with no v)108 412.8 R .319 (alue is e)-.25 F .319(xpanded within double quotes, a null ar)-.15 F -.319(gument results and is retained and passed)-.18 F -(to a command as an empty string.)108 448.8 Q(When a quoted null ar)5 E -.001(gument appears as part of a w)-.18 F .001(ord whose e)-.1 F -(xpansion)-.15 E .984(is non-null, the null ar)108 460.8 R .984 -(gument is remo)-.18 F -.15(ve)-.15 G 3.483(d. That).15 F .983 -(is, the w)3.483 F(ord)-.1 E/F5 10/Courier@0 SF -5.167<ad64082008>3.483 -F F0(becomes)3.483 E F5<ad64>3.483 E F0 .983(after w)3.483 F .983 -(ord splitting and)-.1 F(null ar)108 472.8 Q(gument remo)-.18 E -.25(va) --.15 G(l.).25 E(Note that if no e)108 489.6 Q -(xpansion occurs, no splitting is performed.)-.15 E F4 -.1(Pa)87 506.4 S -(thname Expansion).1 E F0 .37(After w)108 518.4 R .37 -(ord splitting, unless the)-.1 F F4<ad66>2.87 E F0 .37 -(option has been set,)2.87 F F4(bash)2.87 E F0 .371(scans each w)2.871 F -.371(ord for the characters)-.1 F F4(*)2.871 E F0(,)A F4(?)2.871 E F0 -2.871(,a)C(nd)-2.871 E F4([)2.871 E F0(.)A .634 +.319(gument results and is retained and passed)-.18 F .001 +(to a command as an empty string.)108 424.8 R .001 +(When a quoted null ar)5.001 F(gument appears as part of a w)-.18 E +(ord whose e)-.1 E(xpansion)-.15 E .592(is non-null, the null ar)108 +436.8 R .593(gument is remo)-.18 F -.15(ve)-.15 G 3.093(d. That).15 F +.593(is, the w)3.093 F .593<6f72642099ad6408>-.1 F .593 +(\010\232 becomes \231\255d\232 after w).833 F .593(ord splitting and) +-.1 F(null ar)108 448.8 Q(gument remo)-.18 E -.25(va)-.15 G(l.).25 E +(Note that if no e)108 465.6 Q +(xpansion occurs, no splitting is performed.)-.15 E F2 -.1(Pa)87 482.4 S +(thname Expansion).1 E F1 .371(After w)108 494.4 R .371 +(ord splitting, unless the)-.1 F F2<ad66>2.871 E F1 .371 +(option has been set,)2.871 F F2(bash)2.871 E F1 .37(scans each w)2.87 F +.37(ord for the characters)-.1 F F2(*)2.87 E F1(,)A F2(?)2.87 E F1 2.87 +(,a)C(nd)-2.87 E F2([)2.87 E F1(.)A .633 (If one of these characters appears, and is not quoted, then the w)108 -530.4 R .634(ord is re)-.1 F -.05(ga)-.15 G .633(rded as a).05 F F3 -(pattern)4.383 E F0 3.133(,a).24 G .633(nd replaced)-3.133 F 1.34(with \ +506.4 R .634(ord is re)-.1 F -.05(ga)-.15 G .634(rded as a).05 F F0 +(pattern)4.384 E F1 3.134(,a).24 G .634(nd replaced)-3.134 F 1.34(with \ an alphabetically sorted list of \214lenames matching the pattern \(see) -108 542.4 R F1 -.09(Pa)3.84 G(tter).09 E 3.59(nM)-.135 G(atching)-3.59 E -F0(belo)3.59 E 3.84(w\). If)-.25 F(no)3.84 E .534 -(matching \214lenames are found, and the shell option)108 554.4 R F4 -(nullglob)3.034 E F0 .534(is not enabled, the w)3.034 F .534 -(ord is left unchanged.)-.1 F(If)5.534 E(the)108 566.4 Q F4(nullglob) -3.284 E F0 .785(option is set, and no matches are found, the w)3.284 F -.785(ord is remo)-.1 F -.15(ve)-.15 G 3.285(d. If).15 F(the)3.285 E F4 -(failglob)3.285 E F0 .785(shell option is)3.285 F .754(set, and no matc\ +108 518.4 R F3 -.09(Pa)3.84 G(tter).09 E 3.59(nM)-.135 G(atching)-3.59 E +F1(belo)3.589 E 3.839(w\). If)-.25 F(no)3.839 E .534 +(matching \214lenames are found, and the shell option)108 530.4 R F2 +(nullglob)3.034 E F1 .534(is not enabled, the w)3.034 F .534 +(ord is left unchanged.)-.1 F(If)5.535 E(the)108 542.4 Q F2(nullglob) +3.285 E F1 .785(option is set, and no matches are found, the w)3.285 F +.785(ord is remo)-.1 F -.15(ve)-.15 G 3.285(d. If).15 F(the)3.284 E F2 +(failglob)3.284 E F1 .784(shell option is)3.284 F .754(set, and no matc\ hes are found, an error message is printed and the command is not e)108 -578.4 R -.15(xe)-.15 G 3.254(cuted. If).15 F .754(the shell)3.254 F -(option)108 590.4 Q F4(nocaseglob)3.263 E F0 .763 -(is enabled, the match is performed without re)3.263 F -.05(ga)-.15 G -.764(rd to the case of alphabetic characters.).05 F .039 -(When a pattern is used for pathname e)108 602.4 R .039 -(xpansion, the character)-.15 F F4 -.63(``)2.539 G -.55(.').63 G(')-.08 -E F0 .039(at the start of a name or immediately fol-)5.039 F(lo)108 -614.4 Q .19(wing a slash must be matched e)-.25 F(xplicitly)-.15 E 2.69 -(,u)-.65 G .19(nless the shell option)-2.69 F F4(dotglob)2.691 E F0 .191 -(is set.)2.691 F .191(In order to match the \214le-)5.191 F(names)108 -626.4 Q F4 -.63(``)3.645 G -.55(.').63 G(')-.08 E F0(and)6.145 E F4 -.63 -(``)3.645 G(..).63 E -.63('')-.55 G F0 3.645(,t).63 G 1.145 -(he pattern must be)-3.645 F 1.145(gin with `)-.15 F(`.)-.74 E 2.625 --.74('' \()-.7 H 1.145(for e).74 F 1.145(xample, `)-.15 F(`.?')-.74 E -1.145('\), e)-.74 F -.15(ve)-.25 G 3.645(ni).15 G(f)-3.645 E F4(dotglob) -3.644 E F0 1.144(is set.)3.644 F 1.144(If the)6.144 F F4(globskipdots) -108 638.4 Q F0 .153(shell option is enabled, the \214lenames)2.653 F F4 --.63(``)2.653 G -.55(.').63 G(')-.08 E F0(and)5.153 E F4 -.63(``)2.654 G -(..).63 E -.63('')-.55 G F0 .154(are ne)5.784 F -.15(ve)-.25 G 2.654(rm) -.15 G .154(atched, e)-2.654 F -.15(ve)-.25 G 2.654(ni).15 G 2.654(ft) --2.654 G .154(he pattern be-)-2.654 F .12(gins with a)108 650.4 R F4 --.63(``)2.62 G -.55(.').63 G(')-.08 E F0 5.12(.W)C .12 -(hen not matching pathnames, the)-5.12 F F4 -.63(``)2.62 G -.55(.').63 G -(')-.08 E F0 .12(character is not treated specially)5.12 F 5.12(.W)-.65 -G .12(hen matching)-5.12 F 3.54(ap)108 662.4 S 1.04 -(athname, the slash character must al)-3.54 F -.1(wa)-.1 G 1.04 -(ys be matched e).1 F 1.041(xplicitly by a slash in the pattern, b)-.15 -F 1.041(ut in other)-.2 F .132(matching conte)108 674.4 R .132 -(xts it can be matched by a special pattern character as described belo) --.15 F 2.631(wu)-.25 G(nder)-2.631 E F1 -.09(Pa)2.631 G(tter).09 E 2.381 -(nM)-.135 G(atch-)-2.381 E(ing)108 686.4 Q F2(.)A F0 .605 -(See the description of)5.105 F F4(shopt)3.105 E F0(belo)3.105 E 3.106 -(wu)-.25 G(nder)-3.106 E F1 .606(SHELL B)3.106 F(UIL)-.09 E .606 -(TIN COMMANDS)-.828 F F0 .606(for a description of the)2.856 F F4(no-) -3.106 E(caseglob)108 698.4 Q F0(,)A F4(nullglob)2.5 E F0(,)A F4 -(globskipdots)2.5 E F0(,)A F4(failglob)2.5 E F0 2.5(,a)C(nd)-2.5 E F4 -(dotglob)2.5 E F0(shell options.)2.5 E(The)108 715.2 Q F1(GLOBIGNORE) -2.562 E F0 .062(shell v)2.312 F .061 +554.4 R -.15(xe)-.15 G 3.255(cuted. If).15 F .755(the shell)3.255 F +(option)108 566.4 Q F2(nocaseglob)3.264 E F1 .763 +(is enabled, the match is performed without re)3.264 F -.05(ga)-.15 G +.763(rd to the case of alphabetic characters.).05 F .309 +(When a pattern is used for pathname e)108 578.4 R .309(xpansion, the c\ +haracter \231.\232 at the start of a name or immediately fol-)-.15 F(lo) +108 590.4 Q .191(wing a slash must be matched e)-.25 F(xplicitly)-.15 E +2.691(,u)-.65 G .191(nless the shell option)-2.691 F F2(dotglob)2.69 E +F1 .19(is set.)2.69 F .19(In order to match the \214le-)5.19 F .528 +(names \231.\232 and \231..\232, the pattern must be)108 602.4 R .528 +(gin with \231.\232 \(for e)-.15 F .528(xample, \231.?\232\), e)-.15 F +-.15(ve)-.25 G 3.028(ni).15 G(f)-3.028 E F2(dotglob)3.028 E F1 .528 +(is set.)3.028 F .528(If the)5.528 F F2(glob-)3.028 E(skipdots)108 614.4 +Q F1 .057 +(shell option is enabled, the \214lenames \231.\232 and \231..\232 ne) +2.557 F -.15(ve)-.25 G 2.556(rm).15 G .056(atch, e)-2.556 F -.15(ve)-.25 +G 2.556(ni).15 G 2.556(ft)-2.556 G .056(he pattern be)-2.556 F .056 +(gins with a \231.\232)-.15 F .627(When not matching pathnames, the \ +\231.\232 character is not treated specially)108 626.4 R 5.628(.W)-.65 G +.628(hen matching a pathname, the)-5.628 F .045(slash character must al) +108 638.4 R -.1(wa)-.1 G .045(ys be matched e).1 F .045 +(xplicitly by a slash in the pattern, b)-.15 F .045 +(ut in other matching conte)-.2 F .045(xts it)-.15 F .371 +(can be matched by a special pattern character as described belo)108 +650.4 R 2.871(wu)-.25 G(nder)-2.871 E F3 -.09(Pa)2.871 G(tter).09 E +2.621(nM)-.135 G(atching)-2.621 E/F4 9/Times-Roman@0 SF(.)A F1 .371 +(See the descrip-)4.871 F .978(tion of)108 662.4 R F2(shopt)3.478 E F1 +(belo)3.478 E 3.478(wu)-.25 G(nder)-3.478 E F3 .978(SHELL B)3.478 F(UIL) +-.09 E .978(TIN COMMANDS)-.828 F F1 .977(for a description of the)3.228 +F F2(nocaseglob)3.477 E F1(,)A F2(nullglob)3.477 E F1(,)A F2 +(globskipdots)108 674.4 Q F1(,)A F2(failglob)2.5 E F1 2.5(,a)C(nd)-2.5 E +F2(dotglob)2.5 E F1(shell options.)2.5 E(The)108 691.2 Q F3(GLOBIGNORE) +2.561 E F1 .061(shell v)2.311 F .061 (ariable may be used to restrict the set of \214le names matching a)-.25 -F F3(pattern)3.811 E F0 5.061(.I).24 G(f)-5.061 E F1(GLO-)2.561 E -(BIGNORE)108 727.2 Q F0 2.015(is set, each matching \214le name that al\ -so matches one of the patterns in)4.264 F F1(GLOBIGNORE)4.515 E F0(is) -4.265 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(27)185.115 E 0 -Cg EP -%%Page: 28 28 +F F0(pattern)3.812 E F1 5.062(.I).24 G(f)-5.062 E F3(GLO-)2.562 E +(BIGNORE)108 703.2 Q F1 1.096(is set, each matching \214le name that al\ +so matches one of the patterns in)3.347 F F3(GLOBIGNORE)3.596 E F1 1.096 +(is re-)3.346 F(mo)108 715.2 Q -.15(ve)-.15 G 2.85(df).15 G .351 +(rom the list of matches.)-2.85 F .351(If the)5.351 F F2(nocaseglob) +2.851 E F1 .351(option is set, the matching ag)2.851 F .351 +(ainst the patterns in)-.05 F F3(GLO-)2.851 E(BIGNORE)108 727.2 Q F1 +2.165(is performed without re)4.415 F -.05(ga)-.15 G 2.164(rd to case.) +.05 F 2.164(The \214lenames \231.\232 and \231..\232 are al)7.164 F -.1 +(wa)-.1 G 2.164(ys ignored when).1 F(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(28)193.45 E 0 Cg EP +%%Page: 29 29 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(remo)108 84 Q -.15 -(ve)-.15 G 3.915(df).15 G 1.415(rom the list of matches.)-3.915 F 1.415 -(If the)6.415 F/F1 10/Times-Bold@0 SF(nocaseglob)3.915 E F0 1.415 -(option is set, the matching ag)3.915 F 1.414(ainst the patterns in)-.05 -F/F2 9/Times-Bold@0 SF(GLOBIGNORE)108 96 Q F0 .146 -(is performed without re)2.396 F -.05(ga)-.15 G .146(rd to case.).05 F -.146(The \214lenames)5.146 F F1 -.63(``)2.646 G -.55(.').63 G(')-.08 E -F0(and)5.147 E F1 -.63(``)2.647 G(..).63 E -.63('')-.55 G F0 .147 -(are al)5.777 F -.1(wa)-.1 G .147(ys ignored when).1 F F2(GLOBIGNORE)108 -108 Q F0 .827(is set and not null.)3.077 F(Ho)5.827 E(we)-.25 E -.15(ve) --.25 G 1.627 -.4(r, s).15 H(etting).4 E F2(GLOBIGNORE)3.327 E F0 .827 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 9/Times-Bold@0 SF(GLOBIGNORE)108 84 Q F1 .827 +(is set and not null.)3.077 F(Ho)5.827 E(we)-.25 E -.15(ve)-.25 G 1.627 +-.4(r, s).15 H(etting).4 E F2(GLOBIGNORE)3.327 E F1 .827 (to a non-null v)3.077 F .827(alue has the ef)-.25 F .827(fect of)-.25 F -.682(enabling the)108 120 R F1(dotglob)3.182 E F0 .682 -(shell option, so all other \214lenames be)3.182 F .682(ginning with a) --.15 F F1 -.63(``)3.182 G -.55(.').63 G(')-.08 E F0 .682(will match.) -5.682 F 2.283 -.8(To g)5.683 H .683(et the old).8 F(beha)108 132 Q 1.185 -(vior of ignoring \214lenames be)-.2 F 1.185(ginning with a)-.15 F F1 --.63(``)3.684 G -.55(.').63 G(')-.08 E F0 3.684(,m)C(ak)-3.684 E(e)-.1 E -F1 -.63(``)3.684 G(.*').63 E(')-.63 E F0 1.184(one of the patterns in) -6.184 F F2(GLOBIGNORE)3.684 E/F3 9/Times-Roman@0 SF(.)A F0(The)108 144 Q -F1(dotglob)3.131 E F0 .631(option is disabled when)3.131 F F2 -(GLOBIGNORE)3.132 E F0 .632(is unset.)2.882 F .632 -(The pattern matching honors the setting of)5.632 F(the)108 156 Q F1 -(extglob)2.5 E F0(shell option.)2.5 E F1 -.1(Pa)108 172.8 S(tter).1 E -2.5(nM)-.15 G(atching)-2.5 E F0(An)108 189.6 Q 3.138(yc)-.15 G .638(har\ -acter that appears in a pattern, other than the special pattern charact\ -ers described belo)-3.138 F 1.938 -.65(w, m)-.25 H(atches).65 E 2.721 -(itself. The)108 201.6 R .221(NUL character may not occur in a pattern.) -2.721 F 2.721(Ab)5.221 G .221(ackslash escapes the follo)-2.721 F .222 -(wing character; the es-)-.25 F .418 -(caping backslash is discarded when matching.)108 213.6 R .418 -(The special pattern characters must be quoted if the)5.418 F 2.918(ya) --.15 G .418(re to)-2.918 F(be matched literally)108 225.6 Q(.)-.65 E -(The special pattern characters ha)108 242.4 Q .3 -.15(ve t)-.2 H -(he follo).15 E(wing meanings:)-.25 E F1(*)144 259.2 Q F0 .376 -(Matches an)180 259.2 R 2.876(ys)-.15 G .376 -(tring, including the null string.)-2.876 F .376(When the)5.376 F F1 -(globstar)2.876 E F0 .377(shell option is enabled,)2.876 F(and)180 271.2 -Q F1(*)3.275 E F0 .775(is used in a pathname e)3.275 F .775 -(xpansion conte)-.15 F .775(xt, tw)-.15 F 3.275(oa)-.1 G(djacent)-3.275 -E F1(*)3.275 E F0 3.275(su)C .775(sed as a single pattern)-3.275 F 1.058 -(will match all \214les and zero or more directories and subdirectories\ -.)180 283.2 R 1.058(If follo)6.058 F 1.058(wed by a)-.25 F F1(/)3.558 E -F0(,)A(tw)180 295.2 Q 2.5(oa)-.1 G(djacent)-2.5 E F1(*)2.5 E F0 2.5(sw)C -(ill match only directories and subdirectories.)-2.5 E F1(?)144 307.2 Q -F0(Matches an)180 307.2 Q 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 E -F1([...])144 319.2 Q F0 .579(Matches an)180 319.2 R 3.079(yo)-.15 G .579 -(ne of the enclosed characters.)-3.079 F 3.079(Ap)5.579 G .578 -(air of characters separated by a h)-3.079 F(yphen)-.05 E .684 -(denotes a)180 331.2 R/F4 10/Times-Italic@0 SF -.15(ra)3.184 G(ng).15 E -3.184(ee)-.1 G(xpr)-3.384 E(ession)-.37 E F0 3.184(;a)C .984 -.15(ny c) --3.184 H .684(haracter that f).15 F .684(alls between those tw)-.1 F -3.185(oc)-.1 G .685(haracters, inclu-)-3.185 F(si)180 343.2 Q -.15(ve) --.25 G 3.713(,u).15 G 1.213(sing the current locale')-3.713 F 3.712(sc) --.55 G 1.212(ollating sequence and character set, is matched.)-3.712 F -1.212(If the)6.212 F 1.123(\214rst character follo)180 355.2 R 1.123 -(wing the)-.25 F F1([)3.623 E F0 1.123(is a)3.623 F F1(!)3.623 E F0 -1.124(or a)6.123 F F1(^)3.624 E F0 1.124(then an)3.624 F 3.624(yc)-.15 G -1.124(haracter not enclosed is matched.)-3.624 F 1.045 -(The sorting order of characters in range e)180 367.2 R 1.044 +.065(enabling the)108 96 R/F3 10/Times-Bold@0 SF(dotglob)2.565 E F1 .065 +(shell option, so all other \214lenames be)2.565 F .065 +(ginning with a Q . will match.)-.15 F 1.665 -.8(To g)5.065 H .065 +(et the old be-).8 F(ha)108 108 Q .81(vior of ignoring \214lenames be) +-.2 F .81(ginning with a \231.\232, mak)-.15 F 3.31<6599>-.1 G 3.31 +(.*\232 one)-3.31 F .811(of the patterns in)3.311 F F2(GLOBIGNORE)3.311 +E/F4 9/Times-Roman@0 SF(.)A F1(The)5.311 E F3(dotglob)108 120 Q F1 .854 +(option is disabled when)3.354 F F2(GLOBIGNORE)3.354 E F1 .854 +(is unset.)3.104 F .853(The pattern matching honors the setting of the) +5.854 F F3(extglob)108 132 Q F1(shell option.)2.5 E(The)108 148.8 Q F2 +(GLOBSOR)2.5 E(T)-.36 E F1 -.25(va)2.25 G(riable controls ho).25 E 2.5 +(wt)-.25 G(he results of pathname e)-2.5 E +(xpansion are sorted, as described abo)-.15 E -.15(ve)-.15 G(.).15 E F3 +-.1(Pa)108 165.6 S(tter).1 E 2.5(nM)-.15 G(atching)-2.5 E F1(An)108 +182.4 Q 3.138(yc)-.15 G .638(haracter that appears in a pattern, other \ +than the special pattern characters described belo)-3.138 F 1.938 -.65 +(w, m)-.25 H(atches).65 E 2.722(itself. The)108 194.4 R .221 +(NUL character may not occur in a pattern.)2.722 F 2.721(Ab)5.221 G .221 +(ackslash escapes the follo)-2.721 F .221(wing character; the es-)-.25 F +.418(caping backslash is discarded when matching.)108 206.4 R .418 +(The special pattern characters must be quoted if the)5.418 F 2.919(ya) +-.15 G .419(re to)-2.919 F(be matched literally)108 218.4 Q(.)-.65 E +(The special pattern characters ha)108 235.2 Q .3 -.15(ve t)-.2 H +(he follo).15 E(wing meanings:)-.25 E F3(*)144 252 Q F1 .377(Matches an) +180 252 R 2.877(ys)-.15 G .376(tring, including the null string.)-2.877 +F .376(When the)5.376 F F3(globstar)2.876 E F1 .376 +(shell option is enabled,)2.876 F(and)180 264 Q F3(*)3.275 E F1 .775 +(is used in a pathname e)3.275 F .775(xpansion conte)-.15 F .775(xt, tw) +-.15 F 3.275(oa)-.1 G(djacent)-3.275 E F3(*)3.275 E F1 3.275(su)C .775 +(sed as a single pattern)-3.275 F 1.058(will match all \214les and zero\ + or more directories and subdirectories.)180 276 R 1.058(If follo)6.058 +F 1.058(wed by a)-.25 F F3(/)3.558 E F1(,)A(tw)180 288 Q 2.5(oa)-.1 G +(djacent)-2.5 E F3(*)2.5 E F1 2.5(sw)C +(ill match only directories and subdirectories.)-2.5 E F3(?)144 300 Q F1 +(Matches an)180 300 Q 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 E F3 +([)144 312 Q F1 1.666(...)C F3(])-1.666 E F1 .578(Matches an)180 312 R +3.078(yo)-.15 G .578(ne of the enclosed characters.)-3.078 F 3.079(Ap) +5.579 G .579(air of characters separated by a h)-3.079 F(yphen)-.05 E +.685(denotes a)180 324 R F0 -.15(ra)3.185 G(ng).15 E 3.184(ee)-.1 G(xpr) +-3.384 E(ession)-.37 E F1 3.184(;a)C .984 -.15(ny c)-3.184 H .684 +(haracter that f).15 F .684(alls between those tw)-.1 F 3.184(oc)-.1 G +.684(haracters, inclu-)-3.184 F(si)180 336 Q -.15(ve)-.25 G 3.712(,u).15 +G 1.212(sing the current locale')-3.712 F 3.712(sc)-.55 G 1.212 +(ollating sequence and character set, is matched.)-3.712 F 1.213(If the) +6.213 F .978(\214rst character follo)180 348 R .978(wing the)-.25 F F3 +([)3.478 E F1 .978(is a)3.478 F F3(!)3.478 E F1 .978(or a)5.978 F F3<00> +3.478 E F1 .977(then an)3.478 F 3.477(yc)-.15 G .977 +(haracter not enclosed is matched.)-3.477 F 1.044 +(The sorting order of characters in range e)180 360 R 1.045 (xpressions, and the characters included in the)-.15 F 2.34 -(range, are determined by the current locale and the v)180 379.2 R 2.341 -(alues of the)-.25 F F2(LC_COLLA)4.841 E(TE)-.855 E F0(or)4.591 E F2 -(LC_ALL)180 391.2 Q F0 1.079(shell v)3.329 F 1.079(ariables, if set.) --.25 F 2.679 -.8(To o)6.079 H 1.079 -(btain the traditional interpretation of range e).8 F(xpres-)-.15 E .392 -(sions, where)180 403.2 R F1([a\255d])2.892 E F0 .392(is equi)2.892 F --.25(va)-.25 G .392(lent to).25 F F1([abcd])2.893 E F0 2.893(,s)C .393 -(et v)-2.893 F .393(alue of the)-.25 F F1(LC_ALL)2.893 E F0 .393 -(shell v)2.893 F .393(ariable to)-.25 F F1(C)2.893 E F0(,)A .9 -(or enable the)180 415.2 R F1(globasciiranges)3.4 E F0 .9(shell option.) -3.4 F(A)5.899 E F1<ad>3.399 E F0 .899 -(may be matched by including it as the)3.399 F .405 -(\214rst or last character in the set.)180 427.2 R(A)5.405 E F1(])2.905 -E F0 .405(may be matched by including it as the \214rst character)2.905 -F(in the set.)180 439.2 Q -.4(Wi)180 457.2 S(thin).4 E F1([)3.071 E F0 -(and)3.071 E F1(])3.071 E F0(,)A F4 -.15(ch)3.071 G(ar).15 E .571 -(acter classes)-.15 F F0 .571(can be speci\214ed using the syntax)3.071 -F F1([:)3.07 E F4(class)A F1(:])A F0 3.07(,w)C(here)-3.07 E F4(class) -3.07 E F0(is one of the follo)180 469.2 Q -(wing classes de\214ned in the POSIX standard:)-.25 E F1 5.889 -(alnum alpha ascii blank cntrl digit graph lo)180 481.2 R 5.889 -(wer print punct space up-)-.1 F 5(per w)180 493.2 R 5(ord xdigit)-.1 F -F0 4.29(Ac)180 505.2 S 1.789(haracter class matches an)-4.29 F 4.289(yc) --.15 G 1.789(haracter belonging to that class.)-4.289 F(The)6.789 E F1 --.1(wo)4.289 G(rd).1 E F0(character)4.289 E -(class matches letters, digits, and the character _.)180 517.2 Q -.4(Wi) -180 535.2 S(thin).4 E F1([)4.536 E F0(and)4.536 E F1(])4.536 E F0 4.536 -(,a)C(n)-4.536 E F4 2.036(equivalence class)4.536 F F0 2.037 -(can be speci\214ed using the syntax)4.536 F F1([=)4.537 E F4(c)A F1(=]) -A F0 4.537(,w)C(hich)-4.537 E .125(matches all characters with the same\ +(range, are determined by the current locale and the v)180 372 R 2.34 +(alues of the)-.25 F F2(LC_COLLA)4.84 E(TE)-.855 E F1(or)4.59 E F2 +(LC_ALL)180 384 Q F1 1.078(shell v)3.328 F 1.078(ariables, if set.)-.25 +F 2.679 -.8(To o)6.079 H 1.079 +(btain the traditional interpretation of range e).8 F(xpres-)-.15 E .393 +(sions, where)180 396 R F3([a\255d])2.893 E F1 .393(is equi)2.893 F -.25 +(va)-.25 G .393(lent to).25 F F3([abcd])2.893 E F1 2.893(,s)C .393(et v) +-2.893 F .393(alue of the)-.25 F F3(LC_ALL)2.892 E F1 .392(shell v)2.892 +F .392(ariable to)-.25 F F3(C)2.892 E F1(,)A .899(or enable the)180 408 +R F3(globasciiranges)3.399 E F1 .899(shell option.)3.399 F(A)5.899 E F3 +<ad>3.399 E F1 .9(may be matched by including it as the)3.399 F .405 +(\214rst or last character in the set.)180 420 R(A)5.405 E F3(])2.905 E +F1 .405(may be matched by including it as the \214rst character)2.905 F +(in the set.)180 432 Q -.4(Wi)180 448.8 S(thin).4 E F3([)3.07 E F1(and) +3.07 E F3(])3.07 E F1(,)A F0 -.15(ch)3.07 G(ar).15 E .571(acter classes) +-.15 F F1 .571(can be speci\214ed using the syntax)3.071 F F3([:)3.071 E +F0(class)A F3(:])A F1 3.071(,w)C(here)-3.071 E F0(class)3.071 E F1 +(is one of the follo)180 460.8 Q +(wing classes de\214ned in the POSIX standard:)-.25 E F3 5.889 +(alnum alpha ascii blank cntrl digit graph lo)180 477.6 R 5.889 +(wer print punct space up-)-.1 F 5(per w)180 489.6 R 5(ord xdigit)-.1 F +F1 4.289(Ac)180 506.4 S 1.789(haracter class matches an)-4.289 F 4.289 +(yc)-.15 G 1.789(haracter belonging to that class.)-4.289 F(The)6.789 E +F3 -.1(wo)4.29 G(rd).1 E F1(character)4.29 E +(class matches letters, digits, and the character _.)180 518.4 Q -.4(Wi) +180 535.2 S(thin).4 E F3([)4.537 E F1(and)4.537 E F3(])4.537 E F1 4.537 +(,a)C(n)-4.537 E F0 2.037(equivalence class)4.537 F F1 2.036 +(can be speci\214ed using the syntax)4.536 F F3([=)4.536 E F0(c)A F3(=]) +A F1 4.536(,w)C(hich)-4.536 E .125(matches all characters with the same\ collation weight \(as de\214ned by the current locale\) as)180 547.2 R -(the character)180 559.2 Q F4(c)2.5 E F0(.)A -.4(Wi)180 577.2 S(thin).4 -E F1([)2.5 E F0(and)2.5 E F1(])2.5 E F0 2.5(,t)C(he syntax)-2.5 E F1([.) -2.5 E F4(symbol)A F1(.])A F0(matches the collating symbol)2.5 E F4 -(symbol)2.5 E F0(.)A .539(If the)108 594 R F1(extglob)3.039 E F0 .539 -(shell option is enabled using the)3.039 F F1(shopt)3.039 E F0 -.2(bu) -3.039 G .54(iltin, the shell recognizes se).2 F -.15(ve)-.25 G .54 -(ral e).15 F .54(xtended pattern)-.15 F .038(matching operators.)108 606 -R .038(In the follo)5.038 F .038(wing description, a)-.25 F F4 -(pattern-list)2.538 E F0 .037 -(is a list of one or more patterns separated by)2.538 F(a)108 618 Q F1 -(|)2.5 E F0 5(.C)C +(the character)180 559.2 Q F0(c)2.5 E F1(.)A -.4(Wi)180 576 S(thin).4 E +F3([)2.5 E F1(and)2.5 E F3(])2.5 E F1 2.5(,t)C(he syntax)-2.5 E F3([.) +2.5 E F0(symbol)A F3(.])A F1(matches the collating symbol)2.5 E F0 +(symbol)2.5 E F1(.)A .54(If the)108 592.8 R F3(extglob)3.04 E F1 .54 +(shell option is enabled using the)3.04 F F3(shopt)3.039 E F1 -.2(bu) +3.039 G .539(iltin, the shell recognizes se).2 F -.15(ve)-.25 G .539 +(ral e).15 F .539(xtended pattern)-.15 F .037(matching operators.)108 +604.8 R .037(In the follo)5.037 F .037(wing description, a)-.25 F F0 +(pattern-list)2.538 E F1 .038 +(is a list of one or more patterns separated by)2.538 F(a)108 616.8 Q F3 +(|)2.5 E F1 5(.C)C (omposite patterns may be formed using one or more of the follo)-5 E -(wing sub-patterns:)-.25 E F1(?\()144 642 Q F4(pattern-list).833 E F1 -(\)).833 E F0(Matches zero or one occurrence of the gi)180 654 Q -.15 -(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(*\()144 666 Q F4(pattern-list) -.833 E F1(\)).833 E F0(Matches zero or more occurrences of the gi)180 -678 Q -.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(+\()144 690 Q F4 -(pattern-list).833 E F1(\)).833 E F0 -(Matches one or more occurrences of the gi)180 702 Q -.15(ve)-.25 G 2.5 -(np).15 G(atterns)-2.5 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 -E(28)185.115 E 0 Cg EP -%%Page: 29 29 +(wing sub-patterns:)-.25 E F3(?\()144 633.6 Q F0(pattern-list).833 E F3 +(\)).833 E F1(Matches zero or one occurrence of the gi)180 645.6 Q -.15 +(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F3(*\()144 657.6 Q F0 +(pattern-list).833 E F3(\)).833 E F1 +(Matches zero or more occurrences of the gi)180 669.6 Q -.15(ve)-.25 G +2.5(np).15 G(atterns)-2.5 E F3(+\()144 681.6 Q F0(pattern-list).833 E F3 +(\)).833 E F1(Matches one or more occurrences of the gi)180 693.6 Q -.15 +(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F3(@\()144 705.6 Q F0 +(pattern-list).833 E F3(\)).833 E F1(Matches one of the gi)180 717.6 Q +-.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(29)193.45 E 0 Cg EP +%%Page: 30 30 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(@\()144 84 Q/F2 10/Times-Italic@0 SF(pattern-list).833 E F1(\)).833 E -F0(Matches one of the gi)180 96 Q -.15(ve)-.25 G 2.5(np).15 G(atterns) --2.5 E F1(!\()144 108 Q F2(pattern-list).833 E F1(\)).833 E F0 -(Matches an)180 120 Q(ything e)-.15 E(xcept one of the gi)-.15 E -.15 -(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E(The)108 136.8 Q F1(extglob)A F0 -.477(option changes the beha)2.977 F .477(vior of the parser)-.2 F 2.977 -(,s)-.4 G .478(ince the parentheses are normally treated as opera-) --2.977 F .105(tors with syntactic meaning.)108 148.8 R 1.705 -.8(To e) -5.105 H .105(nsure that e).8 F .105 -(xtended matching patterns are parsed correctly)-.15 F 2.604(,m)-.65 G -(ak)-2.604 E 2.604(es)-.1 G .104(ure that)-2.604 F F1(extglob)108 160.8 -Q F0 1.355(is enabled before parsing constructs containing the patterns\ -, including shell functions and com-)3.854 F(mand substitutions.)108 -172.8 Q .988(When matching \214lenames, the)108 189.6 R F1(dotglob)3.488 -E F0 .988 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(!\()144 84 Q F0(pattern-list) +.833 E F2(\)).833 E F1(Matches an)180 96 Q(ything e)-.15 E +(xcept one of the gi)-.15 E -.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E +(The)108 112.8 Q F2(extglob)2.792 E F1 .292(option changes the beha) +2.792 F .291(vior of the parser)-.2 F 2.791(,s)-.4 G .291 +(ince the parentheses are normally treated as opera-)-2.791 F .104 +(tors with syntactic meaning.)108 124.8 R 1.704 -.8(To e)5.104 H .105 +(nsure that e).8 F .105(xtended matching patterns are parsed correctly) +-.15 F 2.605(,m)-.65 G(ak)-2.605 E 2.605(es)-.1 G .105(ure that)-2.605 F +F2(extglob)108 136.8 Q F1 1.355(is enabled before parsing constructs co\ +ntaining the patterns, including shell functions and com-)3.855 F +(mand substitutions.)108 148.8 Q .988(When matching \214lenames, the)108 +165.6 R F2(dotglob)3.488 E F1 .988 (shell option determines the set of \214lenames that are tested: when) -3.488 F F1(dotglob)108 201.6 Q F0 1.391 -(is enabled, the set of \214lenames includes all \214les be)3.891 F -1.392(ginning with `)-.15 F(`.)-.74 E -.74('')-.7 G 3.892(,b).74 G 1.392 -(ut `)-4.092 F(`.)-.74 E 2.872 -.74('' a)-.7 H 1.392(nd `).74 F(`..)-.74 -E 2.872 -.74('' m)-.7 H 1.392(ust be).74 F .298 -(matched by a pattern or sub-pattern that be)108 213.6 R .298 +3.488 F F2(dotglob)108 177.6 Q F1 1.769 +(is enabled, the set of \214lenames includes all \214les be)4.269 F +1.768(ginning with \231.\232, b)-.15 F 1.768 +(ut \231.\232 and \231..\232 must be)-.2 F .298 +(matched by a pattern or sub-pattern that be)108 189.6 R .298 (gins with a dot; when it is disabled, the set does not include an)-.15 -F(y)-.15 E .327(\214lenames be)108 225.6 R .327(ginning with `)-.15 F -(`.)-.74 E 1.807 -.74('' u)-.7 H .327 -(nless the pattern or sub-pattern be).74 F .327(gins with a `)-.15 F(`.) --.74 E -.74('')-.7 G 5.327(.A).74 G 2.827(sa)-5.327 G(bo)-2.827 E -.15 -(ve)-.15 G 2.828(,`).15 G(`.)-3.568 E 1.808 -.74('' o)-.7 H .328 -(nly has a).74 F(special meaning when matching \214lenames.)108 237.6 Q -.969(Complicated e)108 254.4 R .969(xtended pattern matching ag)-.15 F -.969(ainst long strings is slo)-.05 F 2.268 -.65(w, e)-.25 H .968 -(specially when the patterns contain).65 F .09 -(alternations and the strings contain multiple matches.)108 266.4 R .091 -(Using separate matches ag)5.091 F .091(ainst shorter strings, or us-) +F(y)-.15 E .704(\214lenames be)108 201.6 R .704 +(ginning with \231.\232 unless the pattern or sub-pattern be)-.15 F .704 +(gins with a \231.\232.)-.15 F .704(As abo)5.704 F -.15(ve)-.15 G 3.204 +<2c99>.15 G .703(.\232 only has a)-3.204 F +(special meaning when matching \214lenames.)108 213.6 Q .968 +(Complicated e)108 230.4 R .968(xtended pattern matching ag)-.15 F .968 +(ainst long strings is slo)-.05 F 2.269 -.65(w, e)-.25 H .969 +(specially when the patterns contain).65 F .091 +(alternations and the strings contain multiple matches.)108 242.4 R .091 +(Using separate matches ag)5.091 F .09(ainst shorter strings, or us-) -.05 F(ing arrays of strings instead of a single long string, may be f) -108 278.4 Q(aster)-.1 E(.)-.55 E F1(Quote Remo)87 295.2 Q -.1(va)-.1 G -(l).1 E F0 1.113(After the preceding e)108 307.2 R 1.113 -(xpansions, all unquoted occurrences of the characters)-.15 F F1(\\) -3.613 E F0(,)A F1<08>3.612 E F0 3.612(,a)C(nd)-3.612 E F1(")4.445 E F0 -1.112(that did not result)4.445 F(from one of the abo)108 319.2 Q .3 +108 254.4 Q(aster)-.1 E(.)-.55 E F2(Quote Remo)87 271.2 Q -.1(va)-.1 G +(l).1 E F1 1.112(After the preceding e)108 283.2 R 1.112 +(xpansions, all unquoted occurrences of the characters)-.15 F F2(\\) +3.613 E F1(,)A F2<08>3.613 E F1 3.613(,a)C(nd)-3.613 E F2(")4.446 E F1 +1.113(that did not result)4.446 F(from one of the abo)108 295.2 Q .3 -.15(ve ex)-.15 H(pansions are remo).15 E -.15(ve)-.15 G(d.).15 E/F3 -10.95/Times-Bold@0 SF(REDIRECTION)72 336 Q F0 .545 -(Before a command is e)108 348 R -.15(xe)-.15 G .545 -(cuted, its input and output may be).15 F F2 -.37(re)3.045 G(dir).37 E -(ected)-.37 E F0 .545(using a special notation interpreted)3.815 F .429 -(by the shell.)108 360 R F2(Redir)5.428 E(ection)-.37 E F0(allo)2.928 E +10.95/Times-Bold@0 SF(REDIRECTION)72 312 Q F1 .545 +(Before a command is e)108 324 R -.15(xe)-.15 G .545 +(cuted, its input and output may be).15 F F0 -.37(re)3.045 G(dir).37 E +(ected)-.37 E F1 .545(using a special notation interpreted)3.815 F .428 +(by the shell.)108 336 R F0(Redir)5.428 E(ection)-.37 E F1(allo)2.928 E .428(ws commands' \214le handles to be duplicated, opened, closed, made\ - to refer to)-.25 F(dif)108 372 Q 1.019(ferent \214les, and can change \ -the \214les the command reads from and writes to.)-.25 F 1.02 -(Redirection may also be)6.02 F .215 -(used to modify \214le handles in the current shell e)108 384 R -.15(xe) + to refer to)-.25 F(dif)108 348 Q 1.02(ferent \214les, and can change t\ +he \214les the command reads from and writes to.)-.25 F 1.019 +(Redirection may also be)6.019 F .215 +(used to modify \214le handles in the current shell e)108 360 R -.15(xe) -.15 G .215(cution en).15 F 2.715(vironment. The)-.4 F(follo)2.715 E .215(wing redirection operators)-.25 F .862(may precede or appear an)108 -396 R .862(ywhere within a)-.15 F F2 .862(simple command)3.702 F F0 .862 -(or may follo)4.132 F 3.362(wa)-.25 G F2(command).2 E F0 5.862(.R).77 G -.862(edirections are)-5.862 F(processed in the order the)108 408 Q 2.5 +372 R .862(ywhere within a)-.15 F F0 .862(simple command)3.702 F F1 .862 +(or may follo)4.132 F 3.362(wa)-.25 G F0(command).2 E F1 5.862(.R).77 G +.862(edirections are)-5.862 F(processed in the order the)108 384 Q 2.5 (ya)-.15 G(ppear)-2.5 E 2.5(,f)-.4 G(rom left to right.)-2.5 E .771(Eac\ h redirection that may be preceded by a \214le descriptor number may in\ -stead be preceded by a w)108 424.8 R .771(ord of)-.1 F .292(the form {) -108 436.8 R F2(varname)A F0 2.793(}. In)B .293 +stead be preceded by a w)108 400.8 R .772(ord of)-.1 F .293(the form {) +108 412.8 R F0(varname)A F1 2.793(}. In)B .293 (this case, for each redirection operator e)2.793 F .293 -(xcept >&- and <&-, the shell will allocate)-.15 F 3.18<618c>108 448.8 S -.679(le descriptor greater than or equal to 10 and assign it to)-3.18 F -F2(varname)3.179 E F0 5.679(.I)C 3.179(f>)-5.679 G .679 -(&- or <&- is preceded by {)-3.179 F F2(var)A(-)-.2 E(name)108 460.8 Q -F0 .599(}, the v)B .599(alue of)-.25 F F2(varname)3.099 E F0 .599 -(de\214nes the \214le descriptor to close.)3.099 F .6(If {)5.6 F F2 -(varname)A F0 3.1(}i)C 3.1(ss)-3.1 G .6(upplied, the redirection)-3.1 F -.794(persists be)108 472.8 R .794(yond the scope of the command, allo) --.15 F .793(wing the shell programmer to manage the \214le descriptor') --.25 F(s)-.55 E(lifetime manually)108 484.8 Q 5(.T)-.65 G(he)-5 E F1 -.1 -(va)2.5 G(rr).1 E(edir_close)-.18 E F0(shell option manages this beha) -2.5 E(vior)-.2 E(.)-.55 E .283(In the follo)108 501.6 R .284(wing descr\ -iptions, if the \214le descriptor number is omitted, and the \214rst ch\ -aracter of the redirect-)-.25 F .513(ion operator is)108 513.6 R F1(<) -3.012 E F0 3.012(,t)C .512 +(xcept >&- and <&-, the shell will allocate)-.15 F 3.179<618c>108 424.8 +S .679(le descriptor greater than or equal to 10 and assign it to)-3.179 +F F0(varname)3.179 E F1 5.679(.I)C 3.179(f>)-5.679 G .679 +(&- or <&- is preceded by {)-3.179 F F0(var)A(-)-.2 E(name)108 436.8 Q +F1 .6(}, the v)B .6(alue of)-.25 F F0(varname)3.1 E F1 .599 +(de\214nes the \214le descriptor to close.)3.1 F .599(If {)5.599 F F0 +(varname)A F1 3.099(}i)C 3.099(ss)-3.099 G .599 +(upplied, the redirection)-3.099 F .793(persists be)108 448.8 R .793 +(yond the scope of the command, allo)-.15 F .794 +(wing the shell programmer to manage the \214le descriptor')-.25 F(s) +-.55 E(lifetime manually)108 460.8 Q 5(.T)-.65 G(he)-5 E F2 -.1(va)2.5 G +(rr).1 E(edir_close)-.18 E F1(shell option manages this beha)2.5 E(vior) +-.2 E(.)-.55 E .448(In the follo)108 477.6 R .447(wing descriptions, if\ + the \214le descriptor number is omitted, and the \214rst character of \ +the redirec-)-.25 F .365(tion operator is)108 489.6 R F2(<)2.865 E F1 +2.865(,t)C .366 (he redirection refers to the standard input \(\214le descriptor 0\).) --3.012 F .512(If the \214rst character of the)5.512 F -(redirection operator is)108 525.6 Q F1(>)2.5 E F0 2.5(,t)C +-2.865 F .366(If the \214rst character of the)5.366 F +(redirection operator is)108 501.6 Q F2(>)2.5 E F1 2.5(,t)C (he redirection refers to the standard output \(\214le descriptor 1\).) --2.5 E .824(The w)108 542.4 R .824(ord follo)-.1 F .824 -(wing the redirection operator in the follo)-.25 F .825 -(wing descriptions, unless otherwise noted, is sub-)-.25 F .463 -(jected to brace e)108 554.4 R .463(xpansion, tilde e)-.15 F .462 -(xpansion, parameter and v)-.15 F .462(ariable e)-.25 F .462 -(xpansion, command substitution, arith-)-.15 F .866(metic e)108 566.4 R -.866(xpansion, quote remo)-.15 F -.25(va)-.15 G .866(l, pathname e).25 F +-2.5 E .825(The w)108 518.4 R .825(ord follo)-.1 F .824 +(wing the redirection operator in the follo)-.25 F .824 +(wing descriptions, unless otherwise noted, is sub-)-.25 F .462 +(jected to brace e)108 530.4 R .462(xpansion, tilde e)-.15 F .463 +(xpansion, parameter and v)-.15 F .463(ariable e)-.25 F .463 +(xpansion, command substitution, arith-)-.15 F .867(metic e)108 542.4 R +.867(xpansion, quote remo)-.15 F -.25(va)-.15 G .867(l, pathname e).25 F .867(xpansion, and w)-.15 F .867(ord splitting.)-.1 F .867(If it e)5.867 -F .867(xpands to more than one)-.15 F -.1(wo)108 578.4 S(rd,).1 E F1 -(bash)2.5 E F0(reports an error)2.5 E(.)-.55 E -(Note that the order of redirections is signi\214cant.)108 595.2 Q -.15 -(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 612 Q F1(>)2.5 E -F0(dirlist 2)2.5 E F1(>&)A F0(1)A -(directs both standard output and standard error to the \214le)108 628.8 -Q F2(dirlist)2.85 E F0 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144 -645.6 Q F1(>&)A F0(1)A F1(>)2.5 E F0(dirlist)2.5 E .505 -(directs only the standard output to \214le)108 662.4 R F2(dirlist)3.355 -E F0 3.005(,b).68 G .505(ecause the standard error w)-3.005 F .505 +F .866(xpands to more than one)-.15 F -.1(wo)108 554.4 S(rd,).1 E F2 +(bash)2.5 E F1(reports an error)2.5 E(.)-.55 E +(Note that the order of redirections is signi\214cant.)108 571.2 Q -.15 +(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 588 Q F2(>)2.5 E +F1(dirlist 2)2.5 E F2(>&)A F1(1)A +(directs both standard output and standard error to the \214le)108 604.8 +Q F0(dirlist)2.85 E F1 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144 +621.6 Q F2(>&)A F1(1)A F2(>)2.5 E F1(dirlist)2.5 E .505 +(directs only the standard output to \214le)108 638.4 R F0(dirlist)3.355 +E F1 3.005(,b).68 G .505(ecause the standard error w)-3.005 F .505 (as duplicated from the standard)-.1 F -(output before the standard output w)108 674.4 Q(as redirected to)-.1 E -F2(dirlist)2.85 E F0(.).68 E F1(Bash)108 691.2 Q F0 .598(handles se) -3.098 F -.15(ve)-.25 G .598(ral \214lenames specially when the).15 F -3.099(ya)-.15 G .599(re used in redirections, as described in the follo) --3.099 F(wing)-.25 E 3.478(table. If)108 703.2 R .978 -(the operating system on which)3.478 F F1(bash)3.478 E F0 .978 -(is running pro)3.478 F .977 +(output before the standard output w)108 650.4 Q(as redirected to)-.1 E +F0(dirlist)2.85 E F1(.).68 E F2(Bash)108 667.2 Q F1 .599(handles se) +3.099 F -.15(ve)-.25 G .599(ral \214lenames specially when the).15 F +3.099(ya)-.15 G .598(re used in redirections, as described in the follo) +-3.099 F(wing)-.25 E 3.477(table. If)108 679.2 R .977 +(the operating system on which)3.477 F F2(bash)3.478 E F1 .978 +(is running pro)3.478 F .978 (vides these special \214les, bash will use them;)-.15 F -(otherwise it will emulate them internally with the beha)108 715.2 Q -(vior described belo)-.2 E -.65(w.)-.25 G(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(29)185.115 E 0 Cg EP -%%Page: 30 30 +(otherwise it will emulate them internally with the beha)108 691.2 Q +(vior described belo)-.2 E -.65(w.)-.25 G(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(30)193.45 E 0 Cg EP +%%Page: 31 31 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(/de)144 84 Q(v/fd/)-.15 E/F2 10/Times-Italic@0 SF(fd)A F0(If)180 96 Q -F2(fd)2.5 E F0(is a v)2.5 E(alid inte)-.25 E(ger)-.15 E 2.5<2c8c>-.4 G -(le descriptor)-2.5 E F2(fd)2.5 E F0(is duplicated.)2.5 E F1(/de)144 108 -Q(v/stdin)-.15 E F0(File descriptor 0 is duplicated.)180 120 Q F1(/de) -144 132 Q(v/stdout)-.15 E F0(File descriptor 1 is duplicated.)180 144 Q -F1(/de)144 156 Q(v/stderr)-.15 E F0(File descriptor 2 is duplicated.)180 -168 Q F1(/de)144 180 Q(v/tcp/)-.15 E F2(host)A F1(/)A F2(port)A F0(If) -180 192 Q F2(host)2.996 E F0 .496(is a v)2.996 F .496 -(alid hostname or Internet address, and)-.25 F F2(port)2.997 E F0 .497 -(is an inte)2.997 F .497(ger port number or ser)-.15 F(-)-.2 E -(vice name,)180 204 Q F1(bash)2.5 E F0 -(attempts to open the corresponding TCP sock)2.5 E(et.)-.1 E F1(/de)144 -216 Q(v/udp/)-.15 E F2(host)A F1(/)A F2(port)A F0(If)180 228 Q F2(host) -2.997 E F0 .497(is a v)2.997 F .497 -(alid hostname or Internet address, and)-.25 F F2(port)2.996 E F0 .496 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(/de)144 84 Q(v/fd/)-.15 E F0 +(fd)A F1(If)180 96 Q F0(fd)2.5 E F1(is a v)2.5 E(alid inte)-.25 E(ger) +-.15 E 2.5<2c8c>-.4 G(le descriptor)-2.5 E F0(fd)2.5 E F1 +(is duplicated.)2.5 E F2(/de)144 108 Q(v/stdin)-.15 E F1 +(File descriptor 0 is duplicated.)180 120 Q F2(/de)144 132 Q(v/stdout) +-.15 E F1(File descriptor 1 is duplicated.)180 144 Q F2(/de)144 156 Q +(v/stderr)-.15 E F1(File descriptor 2 is duplicated.)180 168 Q F2(/de) +144 180 Q(v/tcp/)-.15 E F0(host)A F2(/)A F0(port)A F1(If)180 192 Q F0 +(host)2.997 E F1 .497(is a v)2.997 F .497 +(alid hostname or Internet address, and)-.25 F F0(port)2.996 E F1 .496 (is an inte)2.996 F .496(ger port number or ser)-.15 F(-)-.2 E -(vice name,)180 240 Q F1(bash)2.5 E F0 +(vice name,)180 204 Q F2(bash)2.5 E F1 +(attempts to open the corresponding TCP sock)2.5 E(et.)-.1 E F2(/de)144 +216 Q(v/udp/)-.15 E F0(host)A F2(/)A F0(port)A F1(If)180 228 Q F0(host) +2.996 E F1 .496(is a v)2.996 F .496 +(alid hostname or Internet address, and)-.25 F F0(port)2.997 E F1 .497 +(is an inte)2.997 F .497(ger port number or ser)-.15 F(-)-.2 E +(vice name,)180 240 Q F2(bash)2.5 E F1 (attempts to open the corresponding UDP sock)2.5 E(et.)-.1 E 2.5(Af)108 256.8 S(ailure to open or create a \214le causes the redirection to f) --2.6 E(ail.)-.1 E .045(Redirections using \214le descriptors greater th\ -an 9 should be used with care, as the)108 273.6 R 2.546(ym)-.15 G .046 -(ay con\215ict with \214le de-)-2.546 F -(scriptors the shell uses internally)108 285.6 Q(.)-.65 E F1(Redir)87 -302.4 Q(ecting Input)-.18 E F0 .391 +-2.6 E(ail.)-.1 E .046(Redirections using \214le descriptors greater th\ +an 9 should be used with care, as the)108 273.6 R 2.545(ym)-.15 G .045 +(ay con\215ict with \214le de-)-2.545 F +(scriptors the shell uses internally)108 285.6 Q(.)-.65 E F2(Redir)87 +302.4 Q(ecting Input)-.18 E F1 .391 (Redirection of input causes the \214le whose name results from the e) -108 314.4 R .391(xpansion of)-.15 F F2(wor)3.231 E(d)-.37 E F0 .391 -(to be opened for read-)3.661 F(ing on \214le descriptor)108 326.4 Q F2 -(n)2.86 E F0 2.5(,o).24 G 2.5(rt)-2.5 G -(he standard input \(\214le descriptor 0\) if)-2.5 E F2(n)2.86 E F0 +108 314.4 R .391(xpansion of)-.15 F F0(wor)3.231 E(d)-.37 E F1 .391 +(to be opened for read-)3.661 F(ing on \214le descriptor)108 326.4 Q F0 +(n)2.86 E F1 2.5(,o).24 G 2.5(rt)-2.5 G +(he standard input \(\214le descriptor 0\) if)-2.5 E F0(n)2.86 E F1 (is not speci\214ed.)2.74 E -(The general format for redirecting input is:)108 343.2 Q([)144 360 Q F2 -(n)A F0(])A F1(<)A F2(wor)A(d)-.37 E F1(Redir)87 376.8 Q(ecting Output) --.18 E F0 .174 +(The general format for redirecting input is:)108 343.2 Q([)144 360 Q F0 +(n)A F1(])A F2(<)A F0(wor)A(d)-.37 E F2(Redir)87 376.8 Q(ecting Output) +-.18 E F1 .175 (Redirection of output causes the \214le whose name results from the e) -108 388.8 R .175(xpansion of)-.15 F F2(wor)3.015 E(d)-.37 E F0 .175 -(to be opened for writ-)3.445 F .084(ing on \214le descriptor)108 400.8 -R F2(n)2.944 E F0 2.583(,o).24 G 2.583(rt)-2.583 G .083 -(he standard output \(\214le descriptor 1\) if)-2.583 F F2(n)2.943 E F0 -.083(is not speci\214ed.)2.823 F .083(If the \214le does not e)5.083 F +108 388.8 R .174(xpansion of)-.15 F F0(wor)3.014 E(d)-.37 E F1 .174 +(to be opened for writ-)3.444 F .083(ing on \214le descriptor)108 400.8 +R F0(n)2.943 E F1 2.583(,o).24 G 2.583(rt)-2.583 G .083 +(he standard output \(\214le descriptor 1\) if)-2.583 F F0(n)2.943 E F1 +.083(is not speci\214ed.)2.823 F .084(If the \214le does not e)5.083 F (x-)-.15 E(ist it is created; if it does e)108 412.8 Q (xist it is truncated to zero size.)-.15 E (The general format for redirecting output is:)108 429.6 Q([)144 446.4 Q -F2(n)A F0(])A F1(>)A F2(wor)A(d)-.37 E F0 .154 -(If the redirection operator is)108 463.2 R F1(>)2.654 E F0 2.654(,a)C -.154(nd the)-2.654 F F1(noclob)2.654 E(ber)-.1 E F0 .154(option to the) -2.654 F F1(set)2.655 E F0 -.2(bu)2.655 G .155 -(iltin has been enabled, the redirection).2 F .658(will f)108 475.2 R -.658(ail if the \214le whose name results from the e)-.1 F .658 -(xpansion of)-.15 F F2(wor)3.158 E(d)-.37 E F0 -.15(ex)3.158 G .657 -(ists and is a re).15 F .657(gular \214le.)-.15 F .657(If the redi-) -5.657 F .408(rection operator is)108 487.2 R F1(>|)2.909 E F0 2.909(,o)C -2.909(rt)-2.909 G .409(he redirection operator is)-2.909 F F1(>)2.909 E -F0 .409(and the)2.909 F F1(noclob)2.909 E(ber)-.1 E F0 .409 -(option to the)2.909 F F1(set)2.909 E F0 -.2(bu)2.909 G .409 -(iltin command).2 F(is not enabled, the redirection is attempted e)108 +F0(n)A F1(])A F2(>)A F0(wor)A(d)-.37 E F1 .155 +(If the redirection operator is)108 463.2 R F2(>)2.655 E F1 2.655(,a)C +.155(nd the)-2.655 F F2(noclob)2.655 E(ber)-.1 E F1 .154(option to the) +2.654 F F2(set)2.654 E F1 -.2(bu)2.654 G .154 +(iltin has been enabled, the redirection).2 F .076(will f)108 475.2 R +.076(ail if the \214le whose name results from the e)-.1 F .076 +(xpansion of)-.15 F F0(wor)2.576 E(d)-.37 E F1 -.15(ex)2.576 G .076 +(ists and is a re).15 F .077(gular \214le.)-.15 F .077(If the redirec-) +5.077 F .548(tion operator is)108 487.2 R F2(>|)3.048 E F1 3.048(,o)C +3.048(rt)-3.048 G .548(he redirection operator is)-3.048 F F2(>)3.047 E +F1 .547(and the)3.047 F F2(noclob)3.047 E(ber)-.1 E F1 .547 +(option to the)3.047 F F2(set)3.047 E F1 -.2(bu)3.047 G .547 +(iltin command is).2 F(not enabled, the redirection is attempted e)108 499.2 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214le named by) --2.5 E F2(wor)2.5 E(d)-.37 E F0 -.15(ex)2.5 G(ists.).15 E F1 -.25(Ap)87 -516 S(pending Redir).25 E(ected Output)-.18 E F0 .642 +-2.5 E F0(wor)2.5 E(d)-.37 E F1 -.15(ex)2.5 G(ists.).15 E F2 -.25(Ap)87 +516 S(pending Redir).25 E(ected Output)-.18 E F1 .641 (Redirection of output in this f)108 528 R .642 -(ashion causes the \214le whose name results from the e)-.1 F .641 -(xpansion of)-.15 F F2(wor)3.481 E(d)-.37 E F0 .641(to be)3.911 F .454 -(opened for appending on \214le descriptor)108 540 R F2(n)3.315 E F0 +(ashion causes the \214le whose name results from the e)-.1 F .642 +(xpansion of)-.15 F F0(wor)3.482 E(d)-.37 E F1 .642(to be)3.912 F .455 +(opened for appending on \214le descriptor)108 540 R F0(n)3.315 E F1 2.955(,o).24 G 2.955(rt)-2.955 G .455 -(he standard output \(\214le descriptor 1\) if)-2.955 F F2(n)3.315 E F0 -.455(is not speci\214ed.)3.195 F(If)5.455 E(the \214le does not e)108 +(he standard output \(\214le descriptor 1\) if)-2.955 F F0(n)3.314 E F1 +.454(is not speci\214ed.)3.194 F(If)5.454 E(the \214le does not e)108 552 Q(xist it is created.)-.15 E (The general format for appending output is:)108 568.8 Q([)144 585.6 Q -F2(n)A F0(])A F1(>>)A F2(wor)A(d)-.37 E F1(Redir)87 602.4 Q -(ecting Standard Output and Standard Err)-.18 E(or)-.18 E F0 .249 +F0(n)A F1(])A F2(>>)A F0(wor)A(d)-.37 E F2(Redir)87 602.4 Q +(ecting Standard Output and Standard Err)-.18 E(or)-.18 E F1 .248 (This construct allo)108 614.4 R .249(ws both the standard output \(\ \214le descriptor 1\) and the standard error output \(\214le descrip-) -.25 F(tor 2\) to be redirected to the \214le whose name is the e)108 -626.4 Q(xpansion of)-.15 E F2(wor)2.84 E(d)-.37 E F0(.).77 E +626.4 Q(xpansion of)-.15 E F0(wor)2.84 E(d)-.37 E F1(.).77 E (There are tw)108 643.2 Q 2.5(of)-.1 G -(ormats for redirecting standard output and standard error:)-2.5 E F1 -(&>)144 660 Q F2(wor)A(d)-.37 E F0(and)108 672 Q F1(>&)144 684 Q F2(wor) -A(d)-.37 E F0(Of the tw)108 700.8 Q 2.5(of)-.1 G +(ormats for redirecting standard output and standard error:)-2.5 E F2 +(&>)144 660 Q F0(wor)A(d)-.37 E F1(and)108 672 Q F2(>&)144 684 Q F0(wor) +A(d)-.37 E F1(Of the tw)108 700.8 Q 2.5(of)-.1 G (orms, the \214rst is preferred.)-2.5 E(This is semantically equi)5 E --.25(va)-.25 G(lent to).25 E F1(>)144 717.6 Q F2(wor)A(d)-.37 E F0(2)2.5 -E F1(>&)A F0(1)A(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(30) -185.115 E 0 Cg EP -%%Page: 31 31 +-.25(va)-.25 G(lent to).25 E F2(>)144 717.6 Q F0(wor)A(d)-.37 E F1(2)2.5 +E F2(>&)A F1(1)A(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(31)193.45 +E 0 Cg EP +%%Page: 32 32 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .114 -(When using the second form,)108 84 R/F1 10/Times-Italic@0 SF(wor)2.614 -E(d)-.37 E F0 .114(may not e)2.614 F .114(xpand to a number or)-.15 F/F2 -10/Times-Bold@0 SF<ad>2.614 E F0 5.114(.I)C 2.614(fi)-5.114 G 2.615(td) --2.614 G .115(oes, other redirection operators)-2.615 F(apply \(see)108 -96 Q F2(Duplicating File Descriptors)2.5 E F0(belo)2.5 E -(w\) for compatibility reasons.)-.25 E F2 -.25(Ap)87 112.8 S -(pending Standard Output and Standard Err).25 E(or)-.18 E F0 .249 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .115(When using the second form,)108 84 R F0(wor) +2.614 E(d)-.37 E F1 .114(may not e)2.614 F .114(xpand to a number or) +-.15 F/F2 10/Times-Bold@0 SF<ad>2.614 E F1 5.114(.I)C 2.614(fi)-5.114 G +2.614(td)-2.614 G .114(oes, other redirection operators)-2.614 F +(apply \(see)108 96 Q F2(Duplicating File Descriptors)2.5 E F1(belo)2.5 +E(w\) for compatibility reasons.)-.25 E F2 -.25(Ap)87 112.8 S +(pending Standard Output and Standard Err).25 E(or)-.18 E F1 .248 (This construct allo)108 124.8 R .249(ws both the standard output \(\ \214le descriptor 1\) and the standard error output \(\214le descrip-) -.25 F(tor 2\) to be appended to the \214le whose name is the e)108 -136.8 Q(xpansion of)-.15 E F1(wor)2.84 E(d)-.37 E F0(.).77 E +136.8 Q(xpansion of)-.15 E F0(wor)2.84 E(d)-.37 E F1(.).77 E (The format for appending standard output and standard error is:)108 -153.6 Q F2(&>>)144 170.4 Q F1(wor)A(d)-.37 E F0 +153.6 Q F2(&>>)144 170.4 Q F0(wor)A(d)-.37 E F1 (This is semantically equi)108 187.2 Q -.25(va)-.25 G(lent to).25 E F2 -(>>)144 204 Q F1(wor)A(d)-.37 E F0(2)2.5 E F2(>&)A F0(1)A(\(see)108 -220.8 Q F2(Duplicating File Descriptors)2.5 E F0(belo)2.5 E(w\).)-.25 E -F2(Her)87 237.6 Q 2.5(eD)-.18 G(ocuments)-2.5 E F0 .33(This type of red\ -irection instructs the shell to read input from the current source unti\ -l a line containing only)108 249.6 R F1(delimiter)108.35 261.6 Q F0 .615 -(\(with no trailing blanks\) is seen.)3.845 F .615 -(All of the lines read up to that point are then used as the stan-)5.615 -F(dard input \(or \214le descriptor)108 273.6 Q F1(n)2.5 E F0(if)2.5 E -F1(n)2.5 E F0(is speci\214ed\) for a command.)2.5 E -(The format of here-documents is:)108 290.4 Q([)144 307.2 Q F1(n)A F0(]) -A F2(<<)A F0([)A F2<ad>A F0(])A F1(wor)A(d)-.37 E(her)164 319.2 Q -(e-document)-.37 E(delimiter)144 331.2 Q F0 .301(No parameter and v)108 +(>>)144 204 Q F0(wor)A(d)-.37 E F1(2)2.5 E F2(>&)A F1(1)A(\(see)108 +220.8 Q F2(Duplicating File Descriptors)2.5 E F1(belo)2.5 E(w\).)-.25 E +F2(Her)87 237.6 Q 2.5(eD)-.18 G(ocuments)-2.5 E F1 .211(This type of re\ +direction instructs the shell to read input from the current source unt\ +il it reads a line contain-)108 249.6 R .323(ing only)108 261.6 R F0 +(delimiter)3.173 E F1 .323(\(with no trailing blanks\).)3.553 F .323 +(All of the lines read up to that point are then used as the stan-)5.323 +F(dard input \(or \214le descriptor)108 273.6 Q F0(n)2.5 E F1(if)2.5 E +F0(n)2.5 E F1(is speci\214ed\) for a command.)2.5 E +(The format of here-documents is:)108 290.4 Q([)144 307.2 Q F0(n)A F1(]) +A F2(<<)A F1([)A F2<ad>A F1(])A F0(wor)A(d)-.37 E(her)164 319.2 Q +(e-document)-.37 E(delimiter)144 331.2 Q F1 .302(No parameter and v)108 348 R .302(ariable e)-.25 F .302 -(xpansion, command substitution, arithmetic e)-.15 F .302 -(xpansion, or pathname e)-.15 F(xpansion)-.15 E .381(is performed on)108 -360 R F1(wor)3.221 E(d)-.37 E F0 5.381(.I).77 G 2.881(fa)-5.381 G .681 --.15(ny p)-2.881 H .381(art of).15 F F1(wor)3.221 E(d)-.37 E F0 .381 -(is quoted, the)3.651 F F1(delimiter)3.231 E F0 .381 -(is the result of quote remo)3.611 F -.25(va)-.15 G 2.881(lo).25 G(n) --2.881 E F1(wor)3.221 E(d)-.37 E F0(,).77 E .773 -(and the lines in the here-document are not e)108 372 R 3.274 -(xpanded. If)-.15 F F1(wor)3.274 E(d)-.37 E F0 .774 -(is unquoted, all lines of the here-document)3.274 F 1.195 -(are subjected to parameter e)108 384 R 1.194 -(xpansion, command substitution, and arithmetic e)-.15 F 1.194 -(xpansion, the character se-)-.15 F(quence)108 396 Q F2(\\<newline>)2.5 -E F0(is ignored, and)2.5 E F2(\\)2.5 E F0 -(must be used to quote the characters)2.5 E F2(\\)2.5 E F0(,)A F2($)2.5 -E F0 2.5(,a)C(nd)-2.5 E F2<92>2.5 E F0(.)A .601 -(If the redirection operator is)108 412.8 R F2(<<\255)3.101 E F0 3.101 +(xpansion, command substitution, arithmetic e)-.15 F .301 +(xpansion, or pathname e)-.15 F(xpansion)-.15 E(is performed on)108 360 +Q F0(wor)2.84 E(d)-.37 E F1(.).77 E .052(If an)108 376.8 R 2.552(yp)-.15 +G .052(art of)-2.552 F F0(wor)2.892 E(d)-.37 E F1 .052(is quoted, the) +3.322 F F0(delimiter)2.902 E F1 .052(is the result of quote remo)3.282 F +-.25(va)-.15 G 2.552(lo).25 G(n)-2.552 E F0(wor)2.892 E(d)-.37 E F1 +2.553(,a).77 G .053(nd the lines in the here-)-2.553 F .028 +(document are not e)108 388.8 R 2.528(xpanded. If)-.15 F F0(wor)2.528 E +(d)-.37 E F1 .028(is unquoted, the)2.528 F F0(delimiter)2.878 E F1(is) +3.258 E F0(wor)2.528 E(d)-.37 E F1 .027 +(itself, all lines of the here-document)2.527 F 1.194 +(are subjected to parameter e)108 400.8 R 1.194 +(xpansion, command substitution, and arithmetic e)-.15 F 1.195 +(xpansion, the character se-)-.15 F(quence)108 412.8 Q F2(\\<newline>) +2.5 E F1(is ignored, and)2.5 E F2(\\)2.5 E F1 +(must be used to quote the characters)2.5 E F2(\\)2.5 E F1(,)A F2($)2.5 +E F1 2.5(,a)C(nd)-2.5 E F2<92>2.5 E F1(.)A .602 +(If the redirection operator is)108 429.6 R F2(<<\255)3.101 E F1 3.101 (,t)C .601(hen all leading tab characters are stripped from input lines\ - and the line)-3.101 F(containing)108 424.8 Q F1(delimiter)2.85 E F0 5 + and the line)-3.101 F(containing)108 441.6 Q F0(delimiter)2.85 E F1 5 (.T).73 G(his allo)-5 E (ws here-documents within shell scripts to be indented in a natural f) --.25 E(ashion.)-.1 E F2(Her)87 441.6 Q 2.5(eS)-.18 G(trings)-2.5 E F0 -2.5(Av)108 453.6 S(ariant of here documents, the format is:)-2.75 E([) -144 470.4 Q F1(n)A F0(])A F2(<<<)A F1(wor)A(d)-.37 E F0(The)108 487.2 Q -F1(wor)3.292 E(d)-.37 E F0(under)3.292 E .792(goes tilde e)-.18 F .792 -(xpansion, parameter and v)-.15 F .792(ariable e)-.25 F .791 -(xpansion, command substitution, arithmetic)-.15 F -.15(ex)108 499.2 S -1.187(pansion, and quote remo).15 F -.25(va)-.15 G 3.687(l. P).25 F +-.25 E(ashion.)-.1 E F2(Her)87 458.4 Q 2.5(eS)-.18 G(trings)-2.5 E F1 +2.5(Av)108 470.4 S(ariant of here documents, the format is:)-2.75 E([) +144 487.2 Q F0(n)A F1(])A F2(<<<)A F0(wor)A(d)-.37 E F1(The)108 504 Q F0 +(wor)3.291 E(d)-.37 E F1(under)3.291 E .792(goes tilde e)-.18 F .792 +(xpansion, parameter and v)-.15 F .792(ariable e)-.25 F .792 +(xpansion, command substitution, arithmetic)-.15 F -.15(ex)108 516 S +1.188(pansion, and quote remo).15 F -.25(va)-.15 G 3.687(l. P).25 F 1.187(athname e)-.15 F 1.187(xpansion and w)-.15 F 1.187 -(ord splitting are not performed.)-.1 F 1.188(The result is)6.187 F .375 -(supplied as a single string, with a ne)108 511.2 R .374(wline appended\ -, to the command on its standard input \(or \214le descrip-)-.25 F(tor) -108 523.2 Q F1(n)2.5 E F0(if)2.5 E F1(n)2.5 E F0(is speci\214ed\).)2.5 E -F2(Duplicating File Descriptors)87 540 Q F0(The redirection operator)108 -552 Q([)144 568.8 Q F1(n)A F0(])A F2(<&)A F1(wor)A(d)-.37 E F0 .126 -(is used to duplicate input \214le descriptors.)108 585.6 R(If)5.127 E -F1(wor)2.967 E(d)-.37 E F0 -.15(ex)3.397 G .127 +(ord splitting are not performed.)-.1 F 1.187(The result is)6.187 F .374 +(supplied as a single string, with a ne)108 528 R .375(wline appended, \ +to the command on its standard input \(or \214le descrip-)-.25 F(tor)108 +540 Q F0(n)2.5 E F1(if)2.5 E F0(n)2.5 E F1(is speci\214ed\).)2.5 E F2 +(Duplicating File Descriptors)87 556.8 Q F1(The redirection operator)108 +568.8 Q([)144 585.6 Q F0(n)A F1(])A F2(<&)A F0(wor)A(d)-.37 E F1 .127 +(is used to duplicate input \214le descriptors.)108 602.4 R(If)5.127 E +F0(wor)2.967 E(d)-.37 E F1 -.15(ex)3.397 G .126 (pands to one or more digits, the \214le descriptor denoted).15 F(by)108 -597.6 Q F1(n)3.318 E F0 .458(is made to be a cop)3.198 F 2.958(yo)-.1 G -2.958(ft)-2.958 G .457(hat \214le descriptor)-2.958 F 5.457(.I)-.55 G -2.957(ft)-5.457 G .457(he digits in)-2.957 F F1(wor)3.297 E(d)-.37 E F0 -.457(do not specify a \214le descriptor open)3.727 F .149 -(for input, a redirection error occurs.)108 609.6 R(If)5.149 E F1(wor) -2.989 E(d)-.37 E F0 -.25(eva)3.419 G .149(luates to).25 F F2<ad>2.649 E -F0 2.65<2c8c>C .15(le descriptor)-2.65 F F1(n)3.01 E F0 .15(is closed.) -2.89 F(If)5.15 E F1(n)3.01 E F0 .15(is not speci\214ed,)2.89 F -(the standard input \(\214le descriptor 0\) is used.)108 621.6 Q -(The operator)108 638.4 Q([)144 655.2 Q F1(n)A F0(])A F2(>&)A F1(wor)A -(d)-.37 E F0 .444 -(is used similarly to duplicate output \214le descriptors.)108 672 R(If) -5.444 E F1(n)3.304 E F0 .443 -(is not speci\214ed, the standard output \(\214le descrip-)3.183 F .565 -(tor 1\) is used.)108 684 R .565(If the digits in)5.565 F F1(wor)3.406 E -(d)-.37 E F0 .566(do not specify a \214le descriptor open for output, a\ - redirection error oc-)3.836 F 3.204(curs. If)108 696 R F1(wor)3.544 E -(d)-.37 E F0 -.25(eva)3.974 G .704(luates to).25 F F2<ad>3.204 E F0 -3.204<2c8c>C .704(le descriptor)-3.204 F F1(n)3.563 E F0 .703 -(is closed.)3.443 F .703(As a special case, if)5.703 F F1(n)3.203 E F0 -.703(is omitted, and)3.203 F F1(wor)3.203 E(d)-.37 E F0(does)3.203 E -.965(not e)108 708 R .965(xpand to one or more digits or)-.15 F F2<ad> -3.465 E F0 3.466(,t)C .966 +614.4 Q F0(n)3.317 E F1 .457(is made to be a cop)3.197 F 2.957(yo)-.1 G +2.957(ft)-2.957 G .457(hat \214le descriptor)-2.957 F 5.457(.I)-.55 G +2.957(ft)-5.457 G .457(he digits in)-2.957 F F0(wor)3.298 E(d)-.37 E F1 +.458(do not specify a \214le descriptor open)3.728 F .15 +(for input, a redirection error occurs.)108 626.4 R(If)5.15 E F0(wor) +2.99 E(d)-.37 E F1 -.25(eva)3.42 G .15(luates to).25 F F2<ad>2.65 E F1 +2.649<2c8c>C .149(le descriptor)-2.649 F F0(n)3.009 E F1 .149 +(is closed.)2.889 F(If)5.149 E F0(n)3.009 E F1 .149(is not speci\214ed,) +2.889 F(the standard input \(\214le descriptor 0\) is used.)108 638.4 Q +(The operator)108 655.2 Q([)144 672 Q F0(n)A F1(])A F2(>&)A F0(wor)A(d) +-.37 E F1 .443 +(is used similarly to duplicate output \214le descriptors.)108 688.8 R +(If)5.443 E F0(n)3.304 E F1 .444 +(is not speci\214ed, the standard output \(\214le descrip-)3.184 F .566 +(tor 1\) is used.)108 700.8 R .566(If the digits in)5.566 F F0(wor)3.406 +E(d)-.37 E F1 .566(do not specify a \214le descriptor open for output, \ +a redirection error oc-)3.836 F 3.203(curs. If)108 712.8 R F0(wor)3.543 +E(d)-.37 E F1 -.25(eva)3.973 G .703(luates to).25 F F2<ad>3.203 E F1 +3.203<2c8c>C .703(le descriptor)-3.203 F F0(n)3.563 E F1 .703 +(is closed.)3.443 F .703(As a special case, if)5.703 F F0(n)3.204 E F1 +.704(is omitted, and)3.204 F F0(wor)3.204 E(d)-.37 E F1(does)3.204 E +.966(not e)108 724.8 R .966(xpand to one or more digits or)-.15 F F2<ad> +3.466 E F1 3.466(,t)C .965 (he standard output and standard error are redirected as described) --3.466 F(pre)108 720 Q(viously)-.25 E(.)-.65 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(31)185.115 E 0 Cg EP -%%Page: 32 32 +-3.466 F(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(32)193.45 E 0 Cg +EP +%%Page: 33 33 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(Mo)87 84 Q(ving File Descriptors)-.1 E F0(The redirection operator) -108 96 Q([)144 112.8 Q/F2 10/Times-Italic@0 SF(n)A F0(])A F1(<&)A F2 -(digit)A F1<ad>A F0(mo)108 129.6 Q -.15(ve)-.15 G 3.018(st).15 G .518 -(he \214le descriptor)-3.018 F F2(digit)3.018 E F0 .518 -(to \214le descriptor)3.018 F F2(n)3.378 E F0 3.018(,o).24 G 3.018(rt) --3.018 G .517(he standard input \(\214le descriptor 0\) if)-3.018 F F2 -(n)3.017 E F0 .517(is not speci-)3.017 F(\214ed.)108 141.6 Q F2(digit)5 -E F0(is closed after being duplicated to)2.5 E F2(n)2.5 E F0(.)A -(Similarly)108 158.4 Q 2.5(,t)-.65 G(he redirection operator)-2.5 E([) -144 175.2 Q F2(n)A F0(])A F1(>&)A F2(digit)A F1<ad>A F0(mo)108 192 Q --.15(ve)-.15 G 2.767(st).15 G .267(he \214le descriptor)-2.767 F F2 -(digit)2.767 E F0 .267(to \214le descriptor)2.767 F F2(n)3.127 E F0 -2.767(,o).24 G 2.767(rt)-2.767 G .268 -(he standard output \(\214le descriptor 1\) if)-2.767 F F2(n)2.768 E F0 -.268(is not speci-)2.768 F(\214ed.)108 204 Q F1 -(Opening File Descriptors f)87 220.8 Q(or Reading and Writing)-.25 E F0 -(The redirection operator)108 232.8 Q([)144 249.6 Q F2(n)A F0(])A F1(<>) -A F2(wor)A(d)-.37 E F0 .518(causes the \214le whose name is the e)108 -266.4 R .518(xpansion of)-.15 F F2(wor)3.358 E(d)-.37 E F0 .518 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(pre)108 84 Q(viously)-.25 E(.)-.65 E/F2 10 +/Times-Bold@0 SF(Mo)87 100.8 Q(ving File Descriptors)-.1 E F1 +(The redirection operator)108 112.8 Q([)144 129.6 Q F0(n)A F1(])A F2(<&) +A F0(digit)A F2<ad>A F1(mo)108 146.4 Q -.15(ve)-.15 G 3.017(st).15 G +.517(he \214le descriptor)-3.017 F F0(digit)3.017 E F1 .517 +(to \214le descriptor)3.017 F F0(n)3.377 E F1 3.017(,o).24 G 3.017(rt) +-3.017 G .518(he standard input \(\214le descriptor 0\) if)-3.017 F F0 +(n)3.018 E F1 .518(is not speci-)3.018 F(\214ed.)108 158.4 Q F0(digit)5 +E F1(is closed after being duplicated to)2.5 E F0(n)2.5 E F1(.)A +(Similarly)108 175.2 Q 2.5(,t)-.65 G(he redirection operator)-2.5 E([) +144 192 Q F0(n)A F1(])A F2(>&)A F0(digit)A F2<ad>A F1(mo)108 208.8 Q +-.15(ve)-.15 G 2.768(st).15 G .268(he \214le descriptor)-2.768 F F0 +(digit)2.768 E F1 .268(to \214le descriptor)2.768 F F0(n)3.128 E F1 +2.768(,o).24 G 2.768(rt)-2.768 G .267 +(he standard output \(\214le descriptor 1\) if)-2.768 F F0(n)2.767 E F1 +.267(is not speci-)2.767 F(\214ed.)108 220.8 Q F2 +(Opening File Descriptors f)87 237.6 Q(or Reading and Writing)-.25 E F1 +(The redirection operator)108 249.6 Q([)144 266.4 Q F0(n)A F1(])A F2(<>) +A F0(wor)A(d)-.37 E F1 .518(causes the \214le whose name is the e)108 +283.2 R .518(xpansion of)-.15 F F0(wor)3.358 E(d)-.37 E F1 .518 (to be opened for both reading and writing on \214le de-)3.788 F -(scriptor)108 278.4 Q F2(n)2.86 E F0 2.5(,o).24 G 2.5(ro)-2.5 G 2.5 -<6e8c>-2.5 G(le descriptor 0 if)-2.5 E F2(n)2.86 E F0 +(scriptor)108 295.2 Q F0(n)2.86 E F1 2.5(,o).24 G 2.5(ro)-2.5 G 2.5 +<6e8c>-2.5 G(le descriptor 0 if)-2.5 E F0(n)2.86 E F1 (is not speci\214ed.)2.74 E(If the \214le does not e)5 E -(xist, it is created.)-.15 E/F3 10.95/Times-Bold@0 SF(ALIASES)72 295.2 Q -F2(Aliases)108 307.2 Q F0(allo)3.173 E 3.173(was)-.25 G .674 -(tring to be substituted for a w)-3.173 F .674 -(ord when it is used as the \214rst w)-.1 F .674 -(ord of a simple command.)-.1 F .394(The shell maintains a list of alia\ -ses that may be set and unset with the)108 319.2 R F1(alias)2.893 E F0 -(and)2.893 E F1(unalias)2.893 E F0 -.2(bu)2.893 G .393(iltin commands).2 -F(\(see)108 331.2 Q/F4 9/Times-Bold@0 SF 1.979(SHELL B)4.479 F(UIL)-.09 -E 1.979(TIN COMMANDS)-.828 F F0(belo)4.229 E 4.48(w\). The)-.25 F 1.98 -(\214rst w)4.48 F 1.98(ord of each simple command, if unquoted, is)-.1 F -(check)108 343.2 Q .473(ed to see if it has an alias.)-.1 F .473 -(If so, that w)5.473 F .472(ord is replaced by the te)-.1 F .472 -(xt of the alias.)-.15 F .472(The characters)5.472 F F1(/)2.972 E F0(,)A -F1($)2.972 E F0(,)A F1<92>2.972 E F0(,)A(and)108 355.2 Q F1(=)3.611 E F0 -1.111(and an)3.611 F 3.611(yo)-.15 G 3.611(ft)-3.611 G 1.111(he shell) --3.611 F F2(metac)3.612 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 1.112 -(or quoting characters listed abo)3.612 F 1.412 -.15(ve m)-.15 H 1.112 -(ay not appear in an alias).15 F 3.62(name. The)108 367.2 R 1.12 -(replacement te)3.62 F 1.119(xt may contain an)-.15 F 3.619(yv)-.15 G -1.119(alid shell input, including shell metacharacters.)-3.869 F 1.119 -(The \214rst)6.119 F -.1(wo)108 379.2 S .513(rd of the replacement te).1 -F .513(xt is tested for aliases, b)-.15 F .513(ut a w)-.2 F .514 -(ord that is identical to an alias being e)-.1 F .514(xpanded is)-.15 F -.296(not e)108 391.2 R .296(xpanded a second time.)-.15 F .296 -(This means that one may alias)5.296 F F1(ls)2.796 E F0(to)2.796 E F1 -.296(ls \255F)2.796 F F0 2.796(,f)C .295(or instance, and)-2.796 F F1 -(bash)2.795 E F0 .295(does not try)2.795 F .528(to recursi)108 403.2 R --.15(ve)-.25 G .528(ly e).15 F .528(xpand the replacement te)-.15 F -3.028(xt. If)-.15 F .528(the last character of the alias v)3.028 F .529 -(alue is a)-.25 F F2(blank)3.299 E F0 3.029(,t).67 G .529(hen the ne) --3.029 F(xt)-.15 E(command w)108 415.2 Q(ord follo)-.1 E -(wing the alias is also check)-.25 E(ed for alias e)-.1 E(xpansion.)-.15 -E(Aliases are created and listed with the)108 432 Q F1(alias)2.5 E F0 -(command, and remo)2.5 E -.15(ve)-.15 G 2.5(dw).15 G(ith the)-2.5 E F1 -(unalias)2.5 E F0(command.)2.5 E .742 -(There is no mechanism for using ar)108 448.8 R .741 +(xist, it is created.)-.15 E/F3 10.95/Times-Bold@0 SF(ALIASES)72 312 Q +F0(Aliases)108 324 Q F1(allo)3.002 E 3.002(was)-.25 G .502 +(tring to be substituted for a w)-3.002 F .502 +(ord that is in a position in the input where it can be the \214rst)-.1 +F -.1(wo)108 336 S .555(rd of a simple command. Aliases ha).1 F .855 +-.15(ve n)-.2 H .555(ames and corresponding v).15 F .556 +(alues that are set and unset using the)-.25 F F2(alias)108 348 Q F1 +(and)2.5 E F2(unalias)2.5 E F1 -.2(bu)2.5 G(iltin commands \(see).2 E/F4 +9/Times-Bold@0 SF(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F1(belo) +2.25 E(w\).)-.25 E 1.034(If the shell reads an unquoted w)108 364.8 R +1.033(ord in the right position, it checks the w)-.1 F 1.033 +(ord to see if it matches an alias)-.1 F .657 +(name. If it matches, the shell replaces the w)108 376.8 R .657 +(ord with the alias v)-.1 F .657(alue, and reads that v)-.25 F .658 +(alue as if it had been)-.25 F 1.082(read instead of the w)108 388.8 R +3.582(ord. The)-.1 F 1.082(shell doesn')3.582 F 3.582(tl)-.18 G 1.082 +(ook at an)-3.582 F 3.582(yc)-.15 G 1.082(haracters follo)-3.582 F 1.082 +(wing the w)-.25 F 1.081(ord before attempting)-.1 F +(alias substitution.)108 400.8 Q .264(The characters)108 417.6 R F2(/) +2.764 E F1(,)A F2($)2.764 E F1(,)A F2<92>2.764 E F1 2.764(,a)C(nd)-2.764 +E F2(=)2.764 E F1 .264(and an)2.764 F 2.764(yo)-.15 G 2.764(ft)-2.764 G +.264(he shell)-2.764 F F0(metac)2.764 E(har)-.15 E(acter)-.15 E(s)-.1 E +F1 .264(or quoting characters listed abo)2.764 F .565 -.15(ve m)-.15 H +.265(ay not).15 F .299(appear in an alias name.)108 429.6 R .298 +(The replacement te)5.298 F .298(xt may contain an)-.15 F 2.798(yv)-.15 +G .298(alid shell input, including shell metachar)-3.048 F(-)-.2 E 2.625 +(acters. The)108 441.6 R .125(\214rst w)2.625 F .125 +(ord of the replacement te)-.1 F .125(xt is tested for aliases, b)-.15 F +.125(ut a w)-.2 F .126(ord that is identical to an alias be-)-.1 F .666 +(ing e)108 453.6 R .666(xpanded is not e)-.15 F .666 +(xpanded a second time.)-.15 F .666(This means that one may alias)5.666 +F F2(ls)3.166 E F1(to)3.166 E F2 .666(ls \255F)3.166 F F1 3.166(,f)C +.666(or instance, and)-3.166 F F2(bash)108 465.6 Q F1 +(does not try to recursi)2.5 E -.15(ve)-.25 G(ly e).15 E +(xpand the replacement te)-.15 E(xt.)-.15 E .858 +(If the last character of the alias v)108 482.4 R .858(alue is a)-.25 F +F0(blank)3.628 E F1 3.358(,t).67 G .858(hen the ne)-3.358 F .858 +(xt command w)-.15 F .858(ord follo)-.1 F .858(wing the alias is also) +-.25 F(check)108 494.4 Q(ed for alias e)-.1 E(xpansion.)-.15 E +(Aliases are created and listed with the)108 511.2 Q F2(alias)2.5 E F1 +(command, and remo)2.5 E -.15(ve)-.15 G 2.5(dw).15 G(ith the)-2.5 E F2 +(unalias)2.5 E F1(command.)2.5 E .742 +(There is no mechanism for using ar)108 528 R .741 (guments in the replacement te)-.18 F 3.241(xt. If)-.15 F(ar)3.241 E -.741(guments are needed, use a shell)-.18 F(function \(see)108 460.8 Q -F4(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E .282(Aliases are not e)108 -477.6 R .282(xpanded when the shell is not interacti)-.15 F -.15(ve)-.25 -G 2.782(,u).15 G .282(nless the)-2.782 F F1(expand_aliases)2.783 E F0 -.283(shell option is set us-)2.783 F(ing)108 489.6 Q F1(shopt)2.5 E F0 -(\(see the description of)2.5 E F1(shopt)2.5 E F0(under)2.5 E F4 -(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 +.741(guments are needed, use a shell)-.18 F(function \(see)108 540 Q F4 +(FUNCTIONS)2.5 E F1(belo)2.25 E(w\).)-.25 E .282(Aliases are not e)108 +556.8 R .282(xpanded when the shell is not interacti)-.15 F -.15(ve)-.25 +G 2.782(,u).15 G .282(nless the)-2.782 F F2(expand_aliases)2.783 E F1 +.283(shell option is set us-)2.783 F(ing)108 568.8 Q F2(shopt)2.5 E F1 +(\(see the description of)2.5 E F2(shopt)2.5 E F1(under)2.5 E F4 +(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F1(belo)2.25 E(w\).)-.25 E .436 (The rules concerning the de\214nition and use of aliases are some)108 -506.4 R .435(what confusing.)-.25 F F1(Bash)5.435 E F0(al)2.935 E -.1 +585.6 R .435(what confusing.)-.25 F F2(Bash)5.435 E F1(al)2.935 E -.1 (wa)-.1 G .435(ys reads at least).1 F .67 -(one complete line of input, and all lines that mak)108 518.4 R 3.17(eu) +(one complete line of input, and all lines that mak)108 597.6 R 3.17(eu) -.1 G 3.17(pac)-3.17 G .67(ompound command, before e)-3.17 F -.15(xe) -.15 G .67(cuting an).15 F 3.17(yo)-.15 G 3.17(ft)-3.17 G(he)-3.17 E -1.059(commands on that line or the compound command.)108 530.4 R 1.059 +1.059(commands on that line or the compound command.)108 609.6 R 1.059 (Aliases are e)6.059 F 1.058(xpanded when a command is read, not)-.15 F -.074(when it is e)108 542.4 R -.15(xe)-.15 G 2.574(cuted. Therefore,).15 +.074(when it is e)108 621.6 R -.15(xe)-.15 G 2.574(cuted. Therefore,).15 F .075(an alias de\214nition appearing on the same line as another comm\ -and does not)2.574 F(tak)108 554.4 Q 2.838(ee)-.1 G -.25(ff)-2.838 G +and does not)2.574 F(tak)108 633.6 Q 2.838(ee)-.1 G -.25(ff)-2.838 G .338(ect until the ne).25 F .338(xt line of input is read.)-.15 F .337 (The commands follo)5.337 F .337 (wing the alias de\214nition on that line are)-.25 F .551(not af)108 -566.4 R .551(fected by the ne)-.25 F 3.051(wa)-.25 G 3.051(lias. This) +645.6 R .551(fected by the ne)-.25 F 3.051(wa)-.25 G 3.051(lias. This) -3.051 F(beha)3.051 E .551(vior is also an issue when functions are e) -.2 F -.15(xe)-.15 G 3.051(cuted. Aliases).15 F .552(are e)3.052 F(x-) -.15 E .426(panded when a function de\214nition is read, not when the f\ -unction is e)108 578.4 R -.15(xe)-.15 G .425 +unction is e)108 657.6 R -.15(xe)-.15 G .425 (cuted, because a function de\214nition).15 F .403(is itself a command.) -108 590.4 R .403 +108 669.6 R .403 (As a consequence, aliases de\214ned in a function are not a)5.403 F -.25(va)-.2 G .404(ilable until after that func-).25 F .862(tion is e) -108 602.4 R -.15(xe)-.15 G 3.362(cuted. T).15 F 3.362(ob)-.8 G 3.362(es) +108 681.6 R -.15(xe)-.15 G 3.362(cuted. T).15 F 3.362(ob)-.8 G 3.362(es) -3.362 G .862(afe, al)-3.362 F -.1(wa)-.1 G .862 -(ys put alias de\214nitions on a separate line, and do not use).1 F F1 -(alias)3.362 E F0 .862(in com-)3.362 F(pound commands.)108 614.4 Q -.15 -(Fo)108 631.2 S 2.5(ra).15 G(lmost e)-2.5 E -.15(ve)-.25 G -(ry purpose, aliases are superseded by shell functions.).15 E F3 -(FUNCTIONS)72 648 Q F0 3.467(As)108 660 S .967 -(hell function, de\214ned as described abo)-3.467 F 1.267 -.15(ve u)-.15 -H(nder).15 E F4 .967(SHELL GRAMMAR)3.467 F/F5 9/Times-Roman@0 SF(,)A F0 -.968(stores a series of commands for)3.217 F 1.002(later e)108 672 R --.15(xe)-.15 G 3.502(cution. When).15 F 1.002(the name of a shell funct\ -ion is used as a simple command name, the list of com-)3.502 F .315 -(mands associated with that function name is e)108 684 R -.15(xe)-.15 G +(ys put alias de\214nitions on a separate line, and do not use).1 F F2 +(alias)3.362 E F1 .862(in com-)3.362 F(pound commands.)108 693.6 Q -.15 +(Fo)108 710.4 S 2.5(ra).15 G(lmost e)-2.5 E -.15(ve)-.25 G +(ry purpose, aliases are superseded by shell functions.).15 E +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(33)193.45 E 0 Cg EP +%%Page: 34 34 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10.95/Times-Bold@0 SF(FUNCTIONS)72 84 Q F1 3.467 +(As)108 96 S .967(hell function, de\214ned as described abo)-3.467 F +1.267 -.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0 SF .967 +(SHELL GRAMMAR)3.467 F/F4 9/Times-Roman@0 SF(,)A F1 .968 +(stores a series of commands for)3.217 F 1.002(later e)108 108 R -.15 +(xe)-.15 G 3.502(cution. When).15 F 1.002(the name of a shell function \ +is used as a simple command name, the list of com-)3.502 F .315 +(mands associated with that function name is e)108 120 R -.15(xe)-.15 G 2.816(cuted. Functions).15 F .316(are e)2.816 F -.15(xe)-.15 G .316 (cuted in the conte).15 F .316(xt of the current)-.15 F .036 -(shell; no ne)108 696 R 2.536(wp)-.25 G .036 +(shell; no ne)108 132 R 2.536(wp)-.25 G .036 (rocess is created to interpret them \(contrast this with the e)-2.536 F -.15(xe)-.15 G .036(cution of a shell script\).).15 F .035(When a)5.035 -F .639(function is e)108 708 R -.15(xe)-.15 G .639(cuted, the ar).15 F +F .639(function is e)108 144 R -.15(xe)-.15 G .639(cuted, the ar).15 F .639 (guments to the function become the positional parameters during its e) --.18 F -.15(xe)-.15 G(cution.).15 E 1.659(The special parameter)108 720 -R F1(#)4.159 E F0 1.659(is updated to re\215ect the change.)4.159 F -1.659(Special parameter)6.659 F F1(0)4.159 E F0 1.658(is unchanged.) -4.158 F 1.658(The \214rst)6.658 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(32)185.115 E 0 Cg EP -%%Page: 33 33 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(element of the)108 -84 Q/F1 9/Times-Bold@0 SF(FUNCN)2.5 E(AME)-.18 E F0 -.25(va)2.25 G +-.18 F -.15(xe)-.15 G(cution.).15 E .533(The special parameter)108 156 R +/F5 10/Times-Bold@0 SF(#)3.033 E F1 .532 +(is updated to re\215ect the change.)3.033 F .532(Special parameter) +5.532 F F5(0)3.032 E F1 .532(is unchanged.)3.032 F .532 +(The \214rst ele-)5.532 F(ment of the)108 168 Q F3(FUNCN)2.5 E(AME)-.18 +E F1 -.25(va)2.25 G (riable is set to the name of the function while the function is e).25 E -.15(xe)-.15 G(cuting.).15 E 1.25(All other aspects of the shell e)108 -100.8 R -.15(xe)-.15 G 1.25(cution en).15 F 1.25 +184.8 R -.15(xe)-.15 G 1.25(cution en).15 F 1.25 (vironment are identical between a function and its caller with)-.4 F -1.215(these e)108 112.8 R 1.215(xceptions: the)-.15 F F1(DEB)3.715 E(UG) --.09 E F0(and)3.465 E/F2 10/Times-Bold@0 SF(RETURN)3.715 E F0 1.215 -(traps \(see the description of the)3.715 F F2(trap)3.714 E F0 -.2(bu) -3.714 G 1.214(iltin under).2 F F1(SHELL)3.714 E -.09(BU)108 124.8 S(IL) -.09 E .478(TIN COMMANDS)-.828 F F0(belo)2.728 E .479 +1.215(these e)108 196.8 R 1.215(xceptions: the)-.15 F F3(DEB)3.715 E(UG) +-.09 E F1(and)3.465 E F5(RETURN)3.715 E F1 1.215 +(traps \(see the description of the)3.715 F F5(trap)3.714 E F1 -.2(bu) +3.714 G 1.214(iltin under).2 F F3(SHELL)3.714 E -.09(BU)108 208.8 S(IL) +.09 E .478(TIN COMMANDS)-.828 F F1(belo)2.728 E .479 (w\) are not inherited unless the function has been gi)-.25 F -.15(ve) --.25 G 2.979(nt).15 G(he)-2.979 E F2(trace)2.979 E F0(attrib)2.979 E -.479(ute \(see)-.2 F .421(the description of the)108 136.8 R F1(declar) -2.92 E(e)-.162 E F0 -.2(bu)2.67 G .42(iltin belo).2 F .42(w\) or the) --.25 F F2 .42(\255o functrace)2.92 F F0 .42 -(shell option has been enabled with the)2.92 F F2(set)2.92 E F0 -.2(bu) -108 148.8 S .071(iltin \(in which case all functions inherit the).2 F F2 -(DEB)2.572 E(UG)-.1 E F0(and)2.572 E F2(RETURN)2.572 E F0 .072 -(traps\), and the)2.572 F F1(ERR)2.572 E F0 .072(trap is not inher)2.322 -F(-)-.2 E(ited unless the)108 160.8 Q F2(\255o errtrace)2.5 E F0 -(shell option has been enabled.)2.5 E -1.11(Va)108 177.6 S .368 -(riables local to the function may be declared with the)1.11 F F2(local) -2.868 E F0 -.2(bu)2.868 G .368(iltin command \().2 F/F3 10 -/Times-Italic@0 SF .368(local variables)B F0 2.868(\). Ordinar)B(-)-.2 E -(ily)108 189.6 Q 2.88(,v)-.65 G .38(ariables and their v)-3.13 F .38 +-.25 G 2.979(nt).15 G(he)-2.979 E F5(trace)2.979 E F1(attrib)2.979 E +.479(ute \(see)-.2 F .421(the description of the)108 220.8 R F3(declar) +2.92 E(e)-.162 E F1 -.2(bu)2.67 G .42(iltin belo).2 F .42(w\) or the) +-.25 F F5 .42(\255o functrace)2.92 F F1 .42 +(shell option has been enabled with the)2.92 F F5(set)2.92 E F1 -.2(bu) +108 232.8 S .071(iltin \(in which case all functions inherit the).2 F F5 +(DEB)2.572 E(UG)-.1 E F1(and)2.572 E F5(RETURN)2.572 E F1 .072 +(traps\), and the)2.572 F F3(ERR)2.572 E F1 .072(trap is not inher)2.322 +F(-)-.2 E(ited unless the)108 244.8 Q F5(\255o errtrace)2.5 E F1 +(shell option has been enabled.)2.5 E -1.11(Va)108 261.6 S .368 +(riables local to the function may be declared with the)1.11 F F5(local) +2.868 E F1 -.2(bu)2.868 G .368(iltin command \().2 F F0 .368 +(local variables)B F1 2.868(\). Ordinar)B(-)-.2 E(ily)108 273.6 Q 2.88 +(,v)-.65 G .38(ariables and their v)-3.13 F .38 (alues are shared between the function and its caller)-.25 F 5.38(.I) --.55 G 2.88(fav)-5.38 G .38(ariable is declared)-3.13 F F2(local)2.88 E -F0(,)A(the v)108 201.6 Q(ariable')-.25 E 2.5(sv)-.55 G(isible scope is \ +-.55 G 2.88(fav)-5.38 G .38(ariable is declared)-3.13 F F5(local)2.88 E +F1(,)A(the v)108 285.6 Q(ariable')-.25 E 2.5(sv)-.55 G(isible scope is \ restricted to that function and its children \(including the functions \ -it calls\).)-2.5 E .727(In the follo)108 218.4 R .727 -(wing description, the)-.25 F F3(curr)3.227 E .727(ent scope)-.37 F F0 +it calls\).)-2.5 E .727(In the follo)108 302.4 R .727 +(wing description, the)-.25 F F0(curr)3.227 E .727(ent scope)-.37 F F1 .726(is a currently- e)3.226 F -.15(xe)-.15 G .726(cuting function.).15 -F(Pre)5.726 E .726(vious scopes consist)-.25 F 1.003(of that function') -108 230.4 R 3.503(sc)-.55 G 1.004 -(aller and so on, back to the "global" scope, where the shell is not e) --3.503 F -.15(xe)-.15 G 1.004(cuting an).15 F 3.504(ys)-.15 G(hell) --3.504 E 3.41(function. Consequently)108 242.4 R 3.41(,al)-.65 G .91 -(ocal v)-3.41 F .909(ariable at the current scope is a v)-.25 F .909 -(ariable declared using the)-.25 F F2(local)3.409 E F0(or)3.409 E F2 -(de-)3.409 E(clar)108 254.4 Q(e)-.18 E F0 -.2(bu)2.5 G +F(Pre)5.726 E .726(vious scopes consist)-.25 F .965(of that function') +108 314.4 R 3.465(sc)-.55 G .966(aller and so on, back to the \231globa\ +l\232 scope, where the shell is not e)-3.465 F -.15(xe)-.15 G .966 +(cuting an).15 F 3.466(ys)-.15 G(hell)-3.466 E 3.41 +(function. Consequently)108 326.4 R 3.41(,al)-.65 G .91(ocal v)-3.41 F +.909(ariable at the current scope is a v)-.25 F .909 +(ariable declared using the)-.25 F F5(local)3.409 E F1(or)3.409 E F5 +(de-)3.409 E(clar)108 338.4 Q(e)-.18 E F1 -.2(bu)2.5 G (iltins in the function that is currently e).2 E -.15(xe)-.15 G(cuting.) -.15 E .635(Local v)108 271.2 R .635(ariables "shado)-.25 F .635(w" v) --.25 F .635(ariables with the same name declared at pre)-.25 F .636 -(vious scopes.)-.25 F -.15(Fo)5.636 G 3.136(ri).15 G .636 -(nstance, a local)-3.136 F -.25(va)108 283.2 S .581 +.15 E .587(Local v)108 355.2 R .587(ariables \231shado)-.25 F .587 +(w\232 v)-.25 F .587(ariables with the same name declared at pre)-.25 F +.588(vious scopes.)-.25 F -.15(Fo)5.588 G 3.088(ri).15 G .588 +(nstance, a local)-3.088 F -.25(va)108 367.2 S .581 (riable declared in a function hides a global v).25 F .58 (ariable of the same name: references and assignments refer)-.25 F .182 -(to the local v)108 295.2 R .182(ariable, lea)-.25 F .183 +(to the local v)108 379.2 R .182(ariable, lea)-.25 F .183 (ving the global v)-.2 F .183(ariable unmodi\214ed.)-.25 F .183 (When the function returns, the global v)5.183 F(ariable)-.25 E -(is once ag)108 307.2 Q(ain visible.)-.05 E .727(The shell uses)108 324 -R F3 .727(dynamic scoping)3.227 F F0 .726(to control a v)3.227 F +(is once ag)108 391.2 Q(ain visible.)-.05 E .727(The shell uses)108 408 +R F0 .727(dynamic scoping)3.227 F F1 .726(to control a v)3.227 F (ariable')-.25 E 3.226(sv)-.55 G .726(isibility within functions.)-3.226 -F -.4(Wi)5.726 G .726(th dynamic scoping,).4 F .007(visible v)108 336 R +F -.4(Wi)5.726 G .726(th dynamic scoping,).4 F .007(visible v)108 420 R .007(ariables and their v)-.25 F .007 (alues are a result of the sequence of function calls that caused e)-.25 F -.15(xe)-.15 G .008(cution to reach).15 F .814(the current function.) -108 348 R .813(The v)5.814 F .813(alue of a v)-.25 F .813 +108 432 R .813(The v)5.814 F .813(alue of a v)-.25 F .813 (ariable that a function sees depends on its v)-.25 F .813 -(alue within its caller)-.25 F 3.313(,i)-.4 G(f)-3.313 E(an)108 360 Q -2.116 -.65(y, w)-.15 H .816 -(hether that caller is the "global" scope or another shell function.).65 -F .817(This is also the v)5.816 F .817(alue that a local)-.25 F -.25(va) -108 372 S(riable declaration "shado).25 E(ws", and the v)-.25 E +(alue within its caller)-.25 F 3.313(,i)-.4 G(f)-3.313 E(an)108 444 Q +1.427 -.65(y, w)-.15 H .127 +(hether that caller is the global scope or another shell function.).65 F +.127(This is also the v)5.127 F .127(alue that a local v)-.25 F(ari-) +-.25 E(able declaration shado)108 456 Q(ws, and the v)-.25 E (alue that is restored when the function returns.)-.25 E -.15(Fo)108 -388.8 S 2.724(re).15 G .224(xample, if a v)-2.874 F(ariable)-.25 E F3 -(var)2.724 E F0 .223(is declared as local in function)2.724 F F3(func1) -2.723 E F0 2.723(,a)C(nd)-2.723 E F3(func1)2.723 E F0 .223 -(calls another function)2.723 F F3(func2)2.723 E F0(,)A .463 -(references to)108 400.8 R F3(var)2.963 E F0 .463(made from within)2.963 -F F3(func2)2.963 E F0 .463(will resolv)2.963 F 2.964(et)-.15 G 2.964(ot) --2.964 G .464(he local v)-2.964 F(ariable)-.25 E F3(var)2.964 E F0(from) -2.964 E F3(func1)2.964 E F0 2.964(,s)C(hado)-2.964 E .464(wing an)-.25 F -(y)-.15 E(global v)108 412.8 Q(ariable named)-.25 E F3(var)2.5 E F0(.)A -(The)108 429.6 Q F2(unset)2.983 E F0 -.2(bu)2.983 G .483 +472.8 S 2.724(re).15 G .224(xample, if a v)-2.874 F(ariable)-.25 E F0 +(var)2.724 E F1 .223(is declared as local in function)2.724 F F0(func1) +2.723 E F1 2.723(,a)C(nd)-2.723 E F0(func1)2.723 E F1 .223 +(calls another function)2.723 F F0(func2)2.723 E F1(,)A .463 +(references to)108 484.8 R F0(var)2.963 E F1 .463(made from within)2.963 +F F0(func2)2.963 E F1 .463(will resolv)2.963 F 2.964(et)-.15 G 2.964(ot) +-2.964 G .464(he local v)-2.964 F(ariable)-.25 E F0(var)2.964 E F1(from) +2.964 E F0(func1)2.964 E F1 2.964(,s)C(hado)-2.964 E .464(wing an)-.25 F +(y)-.15 E(global v)108 496.8 Q(ariable named)-.25 E F0(var)2.5 E F1(.)A +(The)108 513.6 Q F5(unset)2.983 E F1 -.2(bu)2.983 G .483 (iltin also acts using the same dynamic scope: if a v).2 F .482 -(ariable is local to the current scope,)-.25 F F2(unset)2.982 E F0 .19 -(will unset it; otherwise the unset will refer to the v)108 441.6 R .19 +(ariable is local to the current scope,)-.25 F F5(unset)2.982 E F1 .19 +(will unset it; otherwise the unset will refer to the v)108 525.6 R .19 (ariable found in an)-.25 F 2.69(yc)-.15 G .19 (alling scope as described abo)-2.69 F -.15(ve)-.15 G 5.19(.I).15 G(f) --5.19 E 3.325(av)108 453.6 S .824(ariable at the current local scope is\ +-5.19 E 3.325(av)108 537.6 S .824(ariable at the current local scope is\ unset, it will remain so \(appearing as unset\) until it is reset in t\ -hat)-3.575 F 1.141(scope or until the function returns.)108 465.6 R +hat)-3.575 F 1.141(scope or until the function returns.)108 549.6 R 1.141(Once the function returns, an)6.141 F 3.641(yi)-.15 G 1.141 (nstance of the v)-3.641 F 1.142(ariable at a pre)-.25 F(vious)-.25 E -.977(scope will become visible.)108 477.6 R .976 +.977(scope will become visible.)108 561.6 R .976 (If the unset acts on a v)5.977 F .976(ariable at a pre)-.25 F .976 (vious scope, an)-.25 F 3.476(yi)-.15 G .976(nstance of a v)-3.476 F -(ariable)-.25 E .007(with that name that had been shado)108 489.6 R .008 +(ariable)-.25 E .007(with that name that had been shado)108 573.6 R .008 (wed will become visible \(see belo)-.25 F 2.508(wh)-.25 G .508 -.25 -(ow t)-2.508 H(he).25 E F2(localv)2.508 E(ar_unset)-.1 E F0 .008 -(shell option)2.508 F(changes this beha)108 501.6 Q(vior\).)-.2 E(The) -108 518.4 Q F2(FUNCNEST)3.529 E F0 -.25(va)3.529 G 1.028 +(ow t)-2.508 H(he).25 E F5(localv)2.508 E(ar_unset)-.1 E F1 .008 +(shell option)2.508 F(changes this beha)108 585.6 Q(vior\).)-.2 E(The) +108 602.4 Q F5(FUNCNEST)3.529 E F1 -.25(va)3.529 G 1.028 (riable, if set to a numeric v).25 F 1.028 (alue greater than 0, de\214nes a maximum function nesting)-.25 F(le)108 -530.4 Q -.15(ve)-.25 G 2.5(l. Function).15 F(in)2.5 E -.2(vo)-.4 G +614.4 Q -.15(ve)-.25 G 2.5(l. Function).15 F(in)2.5 E -.2(vo)-.4 G (cations that e).2 E(xceed the limit cause the entire command to abort.) --.15 E .043(If the b)108 547.2 R .043(uiltin command)-.2 F F2 -.18(re) -2.543 G(tur).18 E(n)-.15 E F0 .043(is e)2.543 F -.15(xe)-.15 G .043 +-.15 E .043(If the b)108 631.2 R .043(uiltin command)-.2 F F5 -.18(re) +2.543 G(tur).18 E(n)-.15 E F1 .043(is e)2.543 F -.15(xe)-.15 G .043 (cuted in a function, the function completes and e).15 F -.15(xe)-.15 G -.044(cution resumes with).15 F 1.012(the ne)108 559.2 R 1.012 +.044(cution resumes with).15 F 1.012(the ne)108 643.2 R 1.012 (xt command after the function call.)-.15 F(An)6.011 E 3.511(yc)-.15 G -1.011(ommand associated with the)-3.511 F F2(RETURN)3.511 E F0 1.011 -(trap is e)3.511 F -.15(xe)-.15 G(cuted).15 E .213(before e)108 571.2 R +1.011(ommand associated with the)-3.511 F F5(RETURN)3.511 E F1 1.011 +(trap is e)3.511 F -.15(xe)-.15 G(cuted).15 E .213(before e)108 655.2 R -.15(xe)-.15 G .213(cution resumes.).15 F .213 (When a function completes, the v)5.213 F .214 (alues of the positional parameters and the spe-)-.25 F(cial parameter) -108 583.2 Q F2(#)2.5 E F0(are restored to the v)2.5 E(alues the)-.25 E +108 667.2 Q F5(#)2.5 E F1(are restored to the v)2.5 E(alues the)-.25 E 2.5(yh)-.15 G(ad prior to the function')-2.5 E 2.5(se)-.55 G -.15(xe) -2.65 G(cution.).15 E 1.359 -(Function names and de\214nitions may be listed with the)108 600 R F2 -<ad66>3.858 E F0 1.358(option to the)3.858 F F2(declar)3.858 E(e)-.18 E -F0(or)3.858 E F2(typeset)3.858 E F0 -.2(bu)3.858 G 1.358(iltin com-).2 F -3.39(mands. The)108 612 R F2<ad46>3.39 E F0 .89(option to)3.39 F F2 -(declar)3.39 E(e)-.18 E F0(or)3.39 E F2(typeset)3.39 E F0 .89 +(Function names and de\214nitions may be listed with the)108 684 R F5 +<ad66>3.858 E F1 1.358(option to the)3.858 F F5(declar)3.858 E(e)-.18 E +F1(or)3.858 E F5(typeset)3.858 E F1 -.2(bu)3.858 G 1.358(iltin com-).2 F +3.39(mands. The)108 696 R F5<ad46>3.39 E F1 .89(option to)3.39 F F5 +(declar)3.39 E(e)-.18 E F1(or)3.39 E F5(typeset)3.39 E F1 .89 (will list the function names only \(and optionally the source)3.39 F -.047(\214le and line number)108 624 R 2.546(,i)-.4 G 2.546(ft)-2.546 G -(he)-2.546 E F2(extdeb)2.546 E(ug)-.2 E F0 .046 +.047(\214le and line number)108 708 R 2.546(,i)-.4 G 2.546(ft)-2.546 G +(he)-2.546 E F5(extdeb)2.546 E(ug)-.2 E F1 .046 (shell option is enabled\).)2.546 F .046(Functions may be e)5.046 F .046 (xported so that child shell)-.15 F .492 -(processes \(those created when e)108 636 R -.15(xe)-.15 G .492 +(processes \(those created when e)108 720 R -.15(xe)-.15 G .492 (cuting a separate shell in).15 F -.2(vo)-.4 G .492 (cation\) automatically ha).2 F .793 -.15(ve t)-.2 H .493 -(hem de\214ned with).15 F(the)108 648 Q F2<ad66>3.201 E F0 .701 -(option to the)3.201 F F2(export)3.201 E F0 -.2(bu)3.201 G 3.201 -(iltin. A).2 F .7(function de\214nition may be deleted using the)3.201 F -F2<ad66>3.2 E F0 .7(option to the)3.2 F F2(unset)3.2 E F0 -.2(bu)108 660 -S(iltin.).2 E .371(Functions may be recursi)108 676.8 R -.15(ve)-.25 G -5.371(.T).15 G(he)-5.371 E F2(FUNCNEST)2.871 E F0 -.25(va)2.871 G .371 -(riable may be used to limit the depth of the function call).25 F .323 -(stack and restrict the number of function in)108 688.8 R -.2(vo)-.4 G -2.822(cations. By).2 F(def)2.822 E .322 -(ault, no limit is imposed on the number of re-)-.1 F(cursi)108 700.8 Q -.3 -.15(ve c)-.25 H(alls.).15 E(GNU Bash 5.2)72 768 Q(2022 September 19) -135.955 E(33)185.115 E 0 Cg EP -%%Page: 34 34 +(hem de\214ned with).15 F(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E +(34)193.45 E 0 Cg EP +%%Page: 35 35 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10.95 -/Times-Bold@0 SF(ARITHMETIC EV)72 84 Q(ALU)-1.478 E -1.04(AT)-.657 G -(ION)1.04 E F0 1.088(The shell allo)108 96 R 1.088(ws arithmetic e)-.25 -F 1.089(xpressions to be e)-.15 F -.25(va)-.25 G 1.089 -(luated, under certain circumstances \(see the).25 F/F2 10/Times-Bold@0 -SF(let)3.589 E F0(and)3.589 E F2(de-)3.589 E(clar)108 108 Q(e)-.18 E F0 --.2(bu)3.453 G .953(iltin commands, the).2 F F2(\(\()3.453 E F0 .952 -(compound command, and)3.452 F F2 .952(Arithmetic Expansion)3.452 F F0 -3.452(\). Ev)B .952(aluation is done in)-.25 F<8c78>108 120 Q 1.057 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(the)108 84 Q/F2 10/Times-Bold@0 SF<ad66>3.201 E F1 +.701(option to the)3.201 F F2(export)3.201 E F1 -.2(bu)3.201 G 3.201 +(iltin. A).2 F .7(function de\214nition may be deleted using the)3.201 F +F2<ad66>3.2 E F1 .7(option to the)3.2 F F2(unset)3.2 E F1 -.2(bu)108 96 +S(iltin.).2 E .371(Functions may be recursi)108 112.8 R -.15(ve)-.25 G +5.371(.T).15 G(he)-5.371 E F2(FUNCNEST)2.871 E F1 -.25(va)2.871 G .371 +(riable may be used to limit the depth of the function call).25 F .323 +(stack and restrict the number of function in)108 124.8 R -.2(vo)-.4 G +2.822(cations. By).2 F(def)2.822 E .322 +(ault, no limit is imposed on the number of re-)-.1 F(cursi)108 136.8 Q +.3 -.15(ve c)-.25 H(alls.).15 E/F3 10.95/Times-Bold@0 SF(ARITHMETIC EV) +72 153.6 Q(ALU)-1.478 E -1.04(AT)-.657 G(ION)1.04 E F1 1.088 +(The shell allo)108 165.6 R 1.088(ws arithmetic e)-.25 F 1.089 +(xpressions to be e)-.15 F -.25(va)-.25 G 1.089 +(luated, under certain circumstances \(see the).25 F F2(let)3.589 E F1 +(and)3.589 E F2(de-)3.589 E(clar)108 177.6 Q(e)-.18 E F1 -.2(bu)3.453 G +.953(iltin commands, the).2 F F2(\(\()3.453 E F1 .952 +(compound command, and)3.452 F F2 .952(Arithmetic Expansion)3.452 F F1 +3.452(\). Ev)B .952(aluation is done in)-.25 F<8c78>108 189.6 Q 1.057 (ed-width inte)-.15 F 1.057(gers with no check for o)-.15 F -.15(ve)-.15 G(r\215o).15 E 2.357 -.65(w, t)-.25 H 1.057(hough di).65 F 1.057 (vision by 0 is trapped and \215agged as an error)-.25 F(.)-.55 E .829 -(The operators and their precedence, associati)108 132 R(vity)-.25 E +(The operators and their precedence, associati)108 201.6 R(vity)-.25 E 3.329(,a)-.65 G .829(nd v)-3.329 F .829 (alues are the same as in the C language.)-.25 F .828(The fol-)5.828 F -(lo)108 144 Q .439(wing list of operators is grouped into le)-.25 F -.15 -(ve)-.25 G .439(ls of equal-precedence operators.).15 F .44(The le)5.44 -F -.15(ve)-.25 G .44(ls are listed in order).15 F -(of decreasing precedence.)108 156 Q/F3 10/Times-Italic@0 SF(id)108 -172.8 Q F2(++)A F3(id)2.5 E F2<adad>A F0 -.25(va)144 184.8 S -(riable post-increment and post-decrement).25 E F2 2.5<ad2b>108 196.8 S -F0(unary minus and plus)144 196.8 Q F2(++)108 208.8 Q F3(id)A F2<adad> -2.5 E F3(id)A F0 -.25(va)144 220.8 S -(riable pre-increment and pre-decrement).25 E F2 2.5(!~)108 232.8 S F0 -(logical and bitwise ne)144 232.8 Q -.05(ga)-.15 G(tion).05 E F2(**)108 -244.8 Q F0 -.15(ex)144 244.8 S(ponentiation).15 E F2 2.5(*/%)108 256.8 S -F0(multiplication, di)144 256.8 Q(vision, remainder)-.25 E F2 2.5<2bad> -108 268.8 S F0(addition, subtraction)144 268.8 Q F2(<< >>)108 280.8 Q F0 -(left and right bitwise shifts)144 280.8 Q F2(<= >= < >)108 292.8 Q F0 -(comparison)144 304.8 Q F2(== !=)108 316.8 Q F0(equality and inequality) -144 316.8 Q F2(&)108 328.8 Q F0(bitwise AND)144 328.8 Q F2(^)108 340.8 Q -F0(bitwise e)144 340.8 Q(xclusi)-.15 E .3 -.15(ve O)-.25 H(R).15 E F2(|) -108 352.8 Q F0(bitwise OR)144 352.8 Q F2(&&)108 364.8 Q F0(logical AND) -144 364.8 Q F2(||)108 376.8 Q F0(logical OR)144 376.8 Q F3 -.2(ex)108 -388.8 S(pr).2 E F2(?)A F3 -.2(ex)C(pr).2 E F2(:)A F3 -.2(ex)C(pr).2 E F0 -(conditional operator)144 400.8 Q F2 2.5(=*)108 412.8 S 2.5(=/)-2.5 G -2.5(=%)-2.5 G 2.5(=+)-2.5 G 2.5<3dad>-2.5 G 2.5(=<)-2.5 G -(<= >>= &= ^= |=)-2.5 E F0(assignment)144 424.8 Q F3 -.2(ex)108 436.8 S -(pr1).2 E F2(,)2.5 E F3 -.2(ex)2.5 G(pr2).2 E F0(comma)144 448.8 Q .68 -(Shell v)108 465.6 R .68(ariables are allo)-.25 F .68 +(lo)108 213.6 Q .439(wing list of operators is grouped into le)-.25 F +-.15(ve)-.25 G .439(ls of equal-precedence operators.).15 F .44(The le) +5.44 F -.15(ve)-.25 G .44(ls are listed in order).15 F +(of decreasing precedence.)108 225.6 Q F0(id)108 242.4 Q F2(++)A F0(id) +2.5 E F2<adad>A F1 -.25(va)144 254.4 S +(riable post-increment and post-decrement).25 E F2 2.5<ad2b>108 266.4 S +F1(unary minus and plus)144 266.4 Q F2(++)108 278.4 Q F0(id)A F2<adad> +2.5 E F0(id)A F1 -.25(va)144 290.4 S +(riable pre-increment and pre-decrement).25 E F2 2.5<2101>108 302.4 S F1 +(logical and bitwise ne)144 302.4 Q -.05(ga)-.15 G(tion).05 E F2(**)108 +314.4 Q F1 -.15(ex)144 314.4 S(ponentiation).15 E F2 2.5(*/%)108 326.4 S +F1(multiplication, di)144 326.4 Q(vision, remainder)-.25 E F2 2.5<2bad> +108 338.4 S F1(addition, subtraction)144 338.4 Q F2(<< >>)108 350.4 Q F1 +(left and right bitwise shifts)144 350.4 Q F2(<= >= < >)108 362.4 Q F1 +(comparison)144 374.4 Q F2(== !=)108 386.4 Q F1(equality and inequality) +144 386.4 Q F2(&)108 398.4 Q F1(bitwise AND)144 398.4 Q F2<00>108 410.4 +Q F1(bitwise e)144 410.4 Q(xclusi)-.15 E .3 -.15(ve O)-.25 H(R).15 E F2 +(|)108 422.4 Q F1(bitwise OR)144 422.4 Q F2(&&)108 434.4 Q F1 +(logical AND)144 434.4 Q F2(||)108 446.4 Q F1(logical OR)144 446.4 Q F0 +-.2(ex)108 458.4 S(pr).2 E F2(?)A F0 -.2(ex)C(pr).2 E F2(:)A F0 -.2(ex)C +(pr).2 E F1(conditional operator)144 470.4 Q F2 2.5(=*)108 482.4 S 2.5 +(=/)-2.5 G 2.5(=%)-2.5 G 2.5(=+)-2.5 G 2.5<3dad>-2.5 G 2.5(=<)-2.5 G +(<= >>= &= \000= |=)-2.5 E F1(assignment)144 494.4 Q F0 -.2(ex)108 506.4 +S(pr1).2 E F2(,)2.5 E F0 -.2(ex)2.5 G(pr2).2 E F1(comma)144 518.4 Q .68 +(Shell v)108 535.2 R .68(ariables are allo)-.25 F .68 (wed as operands; parameter e)-.25 F .68 (xpansion is performed before the e)-.15 F .68(xpression is e)-.15 F --.25(va)-.25 G(lu-).25 E 3.507(ated. W)108 477.6 R 1.007(ithin an e)-.4 +-.25(va)-.25 G(lu-).25 E 3.507(ated. W)108 547.2 R 1.007(ithin an e)-.4 F 1.007(xpression, shell v)-.15 F 1.007 (ariables may also be referenced by name without using the parameter) --.25 F -.15(ex)108 489.6 S .165(pansion syntax.).15 F 2.665(As)5.165 G +-.25 F -.15(ex)108 559.2 S .165(pansion syntax.).15 F 2.665(As)5.165 G .165(hell v)-2.665 F .165(ariable that is null or unset e)-.25 F -.25 (va)-.25 G .165(luates to 0 when referenced by name without us-).25 F -.42(ing the parameter e)108 501.6 R .42(xpansion syntax.)-.15 F .42 +.42(ing the parameter e)108 571.2 R .42(xpansion syntax.)-.15 F .42 (The v)5.42 F .421(alue of a v)-.25 F .421(ariable is e)-.25 F -.25(va) -.25 G .421(luated as an arithmetic e).25 F .421(xpression when)-.15 F -.154(it is referenced, or when a v)108 513.6 R .154 +.154(it is referenced, or when a v)108 583.2 R .154 (ariable which has been gi)-.25 F -.15(ve)-.25 G 2.654(nt).15 G(he) --2.654 E F3(inte)2.654 E -.1(ge)-.4 G(r).1 E F0(attrib)2.654 E .153 -(ute using)-.2 F F2(declar)2.653 E 2.653<65ad>-.18 G(i)-2.653 E F0 .153 -(is assigned a)2.653 F -.25(va)108 525.6 S 2.857(lue. A).25 F .357 +-2.654 E F0(inte)2.654 E -.1(ge)-.4 G(r).1 E F1(attrib)2.654 E .153 +(ute using)-.2 F F2(declar)2.653 E 2.653<65ad>-.18 G(i)-2.653 E F1 .153 +(is assigned a)2.653 F -.25(va)108 595.2 S 2.857(lue. A).25 F .357 (null v)2.857 F .357(alue e)-.25 F -.25(va)-.25 G .357(luates to 0.).25 F 2.857(As)5.357 G .357(hell v)-2.857 F .357(ariable need not ha)-.25 F -.657 -.15(ve i)-.2 H(ts).15 E F3(inte)2.857 E -.1(ge)-.4 G(r).1 E F0 -(attrib)2.857 E .357(ute turned on to be used)-.2 F(in an e)108 537.6 Q -(xpression.)-.15 E(Inte)108 554.4 Q .518(ger constants follo)-.15 F -3.018(wt)-.25 G .518(he C language de\214nition, without suf)-3.018 F -<8c78>-.25 E .517(es or character constants.)-.15 F .517(Constants with) -5.517 F 3.282(al)108 566.4 S .782 -(eading 0 are interpreted as octal numbers.)-3.282 F 3.283(Al)5.782 G -.783(eading 0x or 0X denotes he)-3.283 F 3.283(xadecimal. Otherwise,) --.15 F(num-)3.283 E .816(bers tak)108 578.4 R 3.316(et)-.1 G .816 -(he form [)-3.316 F F3(base#)A F0 .815(]n, where the optional)B F3(base) -3.315 E F0 .815(is a decimal number between 2 and 64 representing)3.315 -F .349(the arithmetic base, and)108 590.4 R F3(n)2.849 E F0 .349 -(is a number in that base.)2.849 F(If)5.35 E F3(base#)2.85 E F0 .35 +.657 -.15(ve i)-.2 H(ts).15 E F0(inte)2.857 E -.1(ge)-.4 G(r).1 E F1 +(attrib)2.857 E .357(ute turned on to be used)-.2 F(in an e)108 607.2 Q +(xpression.)-.15 E(Inte)108 624 Q .518(ger constants follo)-.15 F 3.018 +(wt)-.25 G .518(he C language de\214nition, without suf)-3.018 F<8c78> +-.25 E .517(es or character constants.)-.15 F .517(Constants with)5.517 +F 3.282(al)108 636 S .782(eading 0 are interpreted as octal numbers.) +-3.282 F 3.283(Al)5.782 G .783(eading 0x or 0X denotes he)-3.283 F 3.283 +(xadecimal. Otherwise,)-.15 F(num-)3.283 E .816(bers tak)108 648 R 3.316 +(et)-.1 G .816(he form [)-3.316 F F0(base#)A F1 .815 +(]n, where the optional)B F0(base)3.315 E F1 .815 +(is a decimal number between 2 and 64 representing)3.315 F .349 +(the arithmetic base, and)108 660 R F0(n)2.849 E F1 .349 +(is a number in that base.)2.849 F(If)5.35 E F0(base#)2.85 E F1 .35 (is omitted, then base 10 is used.)2.85 F .35(When speci-)5.35 F(fying) -108 602.4 Q F3(n)2.975 E F0 2.975(,i)C 2.975(fan)-2.975 G .474(on-digit\ - is required, the digits greater than 9 are represented by the lo)-2.975 -F .474(wercase letters, the up-)-.25 F .518 -(percase letters, @, and _, in that order)108 614.4 R 5.518(.I)-.55 G(f) --5.518 E F3(base)3.018 E F0 .518(is less than or equal to 36, lo)3.018 F +108 672 Q F0(n)2.975 E F1 2.975(,i)C 2.975(fan)-2.975 G .474(on-digit i\ +s required, the digits greater than 9 are represented by the lo)-2.975 F +.474(wercase letters, the up-)-.25 F .518 +(percase letters, @, and _, in that order)108 684 R 5.518(.I)-.55 G(f) +-5.518 E F0(base)3.018 E F1 .518(is less than or equal to 36, lo)3.018 F .518(wercase and uppercase letters)-.25 F (may be used interchangeably to represent numbers between 10 and 35.)108 -626.4 Q .235(Operators are e)108 643.2 R -.25(va)-.25 G .235 +696 Q .235(Operators are e)108 712.8 R -.25(va)-.25 G .235 (luated in order of precedence.).25 F(Sub-e)5.234 E .234 (xpressions in parentheses are e)-.15 F -.25(va)-.25 G .234 -(luated \214rst and may).25 F -.15(ove)108 655.2 S -(rride the precedence rules abo).15 E -.15(ve)-.15 G(.).15 E F1 -(CONDITION)72 672 Q(AL EXPRESSIONS)-.219 E F0 .255(Conditional e)108 684 -R .255(xpressions are used by the)-.15 F F2([[)2.755 E F0 .255 -(compound command and the)2.755 F F2(test)2.755 E F0(and)2.755 E F2([) -2.756 E F0 -.2(bu)2.756 G .256(iltin commands to test).2 F .134 -(\214le attrib)108 696 R .134 -(utes and perform string and arithmetic comparisons.)-.2 F(The)5.133 E -F2(test)2.633 E F0(and)2.633 E F2([)2.633 E F0 .133 -(commands determine their be-)2.633 F(ha)108 708 Q .197 -(vior based on the number of ar)-.2 F .198 -(guments; see the descriptions of those commands for an)-.18 F 2.698(yo) --.15 G .198(ther command-)-2.698 F(speci\214c actions.)108 720 Q -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(34)185.115 E 0 Cg EP -%%Page: 35 35 +(luated \214rst and may).25 F -.15(ove)108 724.8 S +(rride the precedence rules abo).15 E -.15(ve)-.15 G(.).15 E +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(35)193.45 E 0 Cg EP +%%Page: 36 36 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .235 -(Expressions are formed from the follo)108 84 R .234 -(wing unary or binary primaries.)-.25 F/F1 10/Times-Bold@0 SF(Bash)5.234 -E F0 .234(handles se)2.734 F -.15(ve)-.25 G .234(ral \214lenames spe-) -.15 F .424(cially when the)108 96 R 2.924(ya)-.15 G .424(re used in e) --2.924 F 2.925(xpressions. If)-.15 F .425(the operating system on which) -2.925 F F1(bash)2.925 E F0 .425(is running pro)2.925 F .425(vides these) --.15 F .345(special \214les, bash will use them; otherwise it will emul\ -ate them internally with this beha)108 108 R .344(vior: If an)-.2 F(y) --.15 E/F2 10/Times-Italic@0 SF(\214le)2.844 E F0(ar)2.844 E(-)-.2 E .805 -(gument to one of the primaries is of the form)108 120 R F2(/de)3.305 E -(v/fd/n)-.15 E F0 3.306(,t)C .806(hen \214le descriptor)-3.306 F F2(n) -3.306 E F0 .806(is check)3.306 F 3.306(ed. If)-.1 F(the)3.306 E F2 -(\214le)3.306 E F0(ar)3.306 E(gu-)-.18 E .03 -(ment to one of the primaries is one of)108 132 R F2(/de)2.53 E(v/stdin) --.15 E F0(,)A F2(/de)2.529 E(v/stdout)-.15 E F0 2.529(,o)C(r)-2.529 E F2 -(/de)2.529 E(v/stderr)-.15 E F0 2.529<2c8c>C .029 -(le descriptor 0, 1, or 2, respec-)-2.529 F(ti)108 144 Q -.15(ve)-.25 G -(ly).15 E 2.5(,i)-.65 G 2.5(sc)-2.5 G(heck)-2.5 E(ed.)-.1 E .721 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10.95/Times-Bold@0 SF(CONDITION)72 84 Q +(AL EXPRESSIONS)-.219 E F1 .255(Conditional e)108 96 R .255 +(xpressions are used by the)-.15 F/F3 10/Times-Bold@0 SF([[)2.755 E F1 +.255(compound command and the)2.755 F F3(test)2.755 E F1(and)2.755 E F3 +([)2.756 E F1 -.2(bu)2.756 G .256(iltin commands to test).2 F .134 +(\214le attrib)108 108 R .134 +(utes and perform string and arithmetic comparisons.)-.2 F(The)5.133 E +F3(test)2.633 E F1(and)2.633 E F3([)2.633 E F1 .133 +(commands determine their be-)2.633 F(ha)108 120 Q .197 +(vior based on the number of ar)-.2 F .198 +(guments; see the descriptions of those commands for an)-.18 F 2.698(yo) +-.15 G .198(ther command-)-2.698 F(speci\214c actions.)108 132 Q .235 +(Expressions are formed from the follo)108 148.8 R .234 +(wing unary or binary primaries.)-.25 F F3(Bash)5.234 E F1 .234 +(handles se)2.734 F -.15(ve)-.25 G .234(ral \214lenames spe-).15 F .424 +(cially when the)108 160.8 R 2.924(ya)-.15 G .424(re used in e)-2.924 F +2.925(xpressions. If)-.15 F .425(the operating system on which)2.925 F +F3(bash)2.925 E F1 .425(is running pro)2.925 F .425(vides these)-.15 F +.345(special \214les, bash will use them; otherwise it will emulate the\ +m internally with this beha)108 172.8 R .344(vior: If an)-.2 F(y)-.15 E +F0(\214le)2.844 E F1(ar)2.844 E(-)-.2 E .805 +(gument to one of the primaries is of the form)108 184.8 R F0(/de)3.305 +E(v/fd/n)-.15 E F1 3.306(,t)C .806(hen \214le descriptor)-3.306 F F0(n) +3.306 E F1 .806(is check)3.306 F 3.306(ed. If)-.1 F(the)3.306 E F0 +(\214le)3.306 E F1(ar)3.306 E(gu-)-.18 E .03 +(ment to one of the primaries is one of)108 196.8 R F0(/de)2.53 E +(v/stdin)-.15 E F1(,)A F0(/de)2.529 E(v/stdout)-.15 E F1 2.529(,o)C(r) +-2.529 E F0(/de)2.529 E(v/stderr)-.15 E F1 2.529<2c8c>C .029 +(le descriptor 0, 1, or 2, respec-)-2.529 F(ti)108 208.8 Q -.15(ve)-.25 +G(ly).15 E 2.5(,i)-.65 G 2.5(sc)-2.5 G(heck)-2.5 E(ed.)-.1 E .721 (Unless otherwise speci\214ed, primaries that operate on \214les follo) -108 160.8 R 3.221(ws)-.25 G .722(ymbolic links and operate on the tar) --3.221 F(get)-.18 E(of the link, rather than the link itself.)108 172.8 -Q 1.096(When used with)108 190.8 R F1([[)3.596 E F0 3.596(,t)C(he)-3.596 -E F1(<)3.596 E F0(and)3.595 E F1(>)3.595 E F0 1.095(operators sort le) -3.595 F 1.095(xicographically using the current locale.)-.15 F(The)6.095 -E F1(test)3.595 E F0(com-)3.595 E(mand sorts using ASCII ordering.)108 -202.8 Q F1<ad61>108 226.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 226.8 S -(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F1<ad62>108 -238.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 238.8 S(ue if).35 E F2(\214le)2.5 -E F0 -.15(ex)2.5 G(ists and is a block special \214le.).15 E F1<ad63>108 -250.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 250.8 S(ue if).35 E F2(\214le)2.5 -E F0 -.15(ex)2.5 G(ists and is a character special \214le.).15 E F1 -<ad64>108 262.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 262.8 S(ue if).35 E F2 -(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a directory).15 E(.)-.65 E F1 -<ad65>108 274.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 274.8 S(ue if).35 E F2 -(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F1<ad66>108 286.8 Q F2 -(\214le)2.5 E F0 -.35(Tr)144 286.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15 -(ex)2.5 G(ists and is a re).15 E(gular \214le.)-.15 E F1<ad67>108 298.8 -Q F2(\214le)2.5 E F0 -.35(Tr)144 298.8 S(ue if).35 E F2(\214le)2.5 E F0 --.15(ex)2.5 G(ists and is set-group-id.).15 E F1<ad68>108 310.8 Q F2 -(\214le)2.5 E F0 -.35(Tr)144 310.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15 -(ex)2.5 G(ists and is a symbolic link.).15 E F1<ad6b>108 322.8 Q F2 -(\214le)2.5 E F0 -.35(Tr)144 322.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15 -(ex)2.5 G(ists and its `).15 E(`stick)-.74 E(y')-.15 E 2.5('b)-.74 G -(it is set.)-2.5 E F1<ad70>108 334.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 -334.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G -(ists and is a named pipe \(FIFO\).).15 E F1<ad72>108 346.8 Q F2(\214le) -2.5 E F0 -.35(Tr)144 346.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 -G(ists and is readable.).15 E F1<ad73>108 358.8 Q F2(\214le)2.5 E F0 --.35(Tr)144 358.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G -(ists and has a size greater than zero.).15 E F1<ad74>108 370.8 Q F2(fd) -2.5 E F0 -.35(Tr)144 370.8 S(ue if \214le descriptor).35 E F2(fd)4.47 E -F0(is open and refers to a terminal.)3.27 E F1<ad75>108 382.8 Q F2 -(\214le)2.5 E F0 -.35(Tr)144 382.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15 -(ex)2.5 G(ists and its set-user).15 E(-id bit is set.)-.2 E F1<ad77>108 -394.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 394.8 S(ue if).35 E F2(\214le)2.5 -E F0 -.15(ex)2.5 G(ists and is writable.).15 E F1<ad78>108 406.8 Q F2 -(\214le)2.5 E F0 -.35(Tr)144 406.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15 -(ex)2.5 G(ists and is e).15 E -.15(xe)-.15 G(cutable.).15 E F1<ad47>108 -418.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 418.8 S(ue if).35 E F2(\214le)2.5 -E F0 -.15(ex)2.5 G(ists and is o).15 E(wned by the ef)-.25 E(fecti)-.25 -E .3 -.15(ve g)-.25 H(roup id.).15 E F1<ad4c>108 430.8 Q F2(\214le)2.5 E -F0 -.35(Tr)144 430.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G -(ists and is a symbolic link.).15 E F1<ad4e>108 442.8 Q F2(\214le)2.5 E -F0 -.35(Tr)144 442.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G -(ists and has been modi\214ed since it w).15 E(as last read.)-.1 E F1 -<ad4f>108 454.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 454.8 S(ue if).35 E F2 -(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is o).15 E(wned by the ef)-.25 E -(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id.).15 E F1<ad53>108 466.8 Q F2 -(\214le)2.5 E F0 -.35(Tr)144 466.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15 -(ex)2.5 G(ists and is a sock).15 E(et.)-.1 E F2(\214le1)108 478.8 Q F1 -(\255ef)2.5 E F2(\214le2)2.5 E F0 -.35(Tr)144 490.8 S(ue if).35 E F2 -(\214le1)2.5 E F0(and)2.5 E F2(\214le2)2.5 E F0(refer to the same de)2.5 -E(vice and inode numbers.)-.25 E F2(\214le1)108 502.8 Q F0<ad>2.5 E F1 -(nt)A F2(\214le2)2.5 E F0 -.35(Tr)144 514.8 S(ue if).35 E F2(\214le1)2.5 -E F0(is ne)2.5 E(wer \(according to modi\214cation date\) than)-.25 E F2 -(\214le2)2.5 E F0 2.5(,o)C 2.5(ri)-2.5 G(f)-2.5 E F2(\214le1)2.5 E F0 --.15(ex)2.5 G(ists and).15 E F2(\214le2)2.5 E F0(does not.)2.5 E F2 -(\214le1)108 526.8 Q F0<ad>2.5 E F1(ot)A F2(\214le2)2.5 E F0 -.35(Tr)144 -538.8 S(ue if).35 E F2(\214le1)2.5 E F0(is older than)2.5 E F2(\214le2) -2.5 E F0 2.5(,o)C 2.5(ri)-2.5 G(f)-2.5 E F2(\214le2)2.5 E F0 -.15(ex)2.5 -G(ists and).15 E F2(\214le1)2.5 E F0(does not.)2.5 E F1<ad6f>108 550.8 Q -F2(optname)2.5 E F0 -.35(Tr)144 562.8 S .262(ue if the shell option).35 -F F2(optname)2.992 E F0 .262(is enabled.)2.942 F .262 -(See the list of options under the description of the)5.262 F F1<ad6f> -2.763 E F0(option to the)144 574.8 Q F1(set)2.5 E F0 -.2(bu)2.5 G -(iltin belo).2 E -.65(w.)-.25 G F1<ad76>108 586.8 Q F2(varname)2.5 E F0 --.35(Tr)144 598.8 S(ue if the shell v).35 E(ariable)-.25 E F2(varname) -2.79 E F0(is set \(has been assigned a v)2.68 E(alue\).)-.25 E F1<ad52> -108 610.8 Q F2(varname)2.5 E F0 -.35(Tr)144 622.8 S(ue if the shell v) -.35 E(ariable)-.25 E F2(varname)2.79 E F0 -(is set and is a name reference.)2.68 E F1<ad7a>108 634.8 Q F2(string) -2.5 E F0 -.35(Tr)144 646.8 S(ue if the length of).35 E F2(string)2.5 E -F0(is zero.)2.5 E F2(string)108 658.8 Q F1<ad6e>108 670.8 Q F2(string) -2.5 E F0 -.35(Tr)144 682.8 S(ue if the length of).35 E F2(string)2.84 E -F0(is non-zero.)2.72 E F2(string1)108 699.6 Q F1(==)2.5 E F2(string2)2.5 -E F0(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(35)185.115 E 0 Cg -EP -%%Page: 36 36 +108 225.6 R 3.221(ws)-.25 G .722(ymbolic links and operate on the tar) +-3.221 F(get)-.18 E(of the link, rather than the link itself.)108 237.6 +Q .701(When used with)108 254.4 R F3([[)3.201 E F1 3.201(,o)C 3.201(rw) +-3.201 G .701(hen the shell is in)-3.201 F F0 .7(posix mode)3.201 F F1 +3.2(,t)C(he)-3.2 E F3(<)3.2 E F1(and)3.2 E F3(>)3.2 E F1 .7 +(operators sort le)3.2 F .7(xicographically using)-.15 F +(the current locale.)108 266.4 Q(When the shell is not in)5 E F0 +(posix mode)2.5 E F1 2.5(,t)C(he)-2.5 E F3(test)2.5 E F1 +(command sorts using ASCII ordering.)2.5 E F3<ad61>108 283.2 Q F0 +(\214le)2.5 E F1 -.35(Tr)144 283.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15 +(ex)2.5 G(ists.).15 E F3<ad62>108 295.2 Q F0(\214le)2.5 E F1 -.35(Tr)144 +295.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15(ex)2.5 G +(ists and is a block special \214le.).15 E F3<ad63>108 307.2 Q F0 +(\214le)2.5 E F1 -.35(Tr)144 307.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15 +(ex)2.5 G(ists and is a character special \214le.).15 E F3<ad64>108 +319.2 Q F0(\214le)2.5 E F1 -.35(Tr)144 319.2 S(ue if).35 E F0(\214le)2.5 +E F1 -.15(ex)2.5 G(ists and is a directory).15 E(.)-.65 E F3<ad65>108 +331.2 Q F0(\214le)2.5 E F1 -.35(Tr)144 331.2 S(ue if).35 E F0(\214le)2.5 +E F1 -.15(ex)2.5 G(ists.).15 E F3<ad66>108 343.2 Q F0(\214le)2.5 E F1 +-.35(Tr)144 343.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15(ex)2.5 G +(ists and is a re).15 E(gular \214le.)-.15 E F3<ad67>108 355.2 Q F0 +(\214le)2.5 E F1 -.35(Tr)144 355.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15 +(ex)2.5 G(ists and is set-group-id.).15 E F3<ad68>108 367.2 Q F0(\214le) +2.5 E F1 -.35(Tr)144 367.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15(ex)2.5 +G(ists and is a symbolic link.).15 E F3<ad6b>108 379.2 Q F0(\214le)2.5 E +F1 -.35(Tr)144 379.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15(ex)2.5 G +(ists and its \231stick).15 E(y\232 bit is set.)-.15 E F3<ad70>108 391.2 +Q F0(\214le)2.5 E F1 -.35(Tr)144 391.2 S(ue if).35 E F0(\214le)2.5 E F1 +-.15(ex)2.5 G(ists and is a named pipe \(FIFO\).).15 E F3<ad72>108 403.2 +Q F0(\214le)2.5 E F1 -.35(Tr)144 403.2 S(ue if).35 E F0(\214le)2.5 E F1 +-.15(ex)2.5 G(ists and is readable.).15 E F3<ad73>108 415.2 Q F0(\214le) +2.5 E F1 -.35(Tr)144 415.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15(ex)2.5 +G(ists and has a size greater than zero.).15 E F3<ad74>108 427.2 Q F0 +(fd)2.5 E F1 -.35(Tr)144 427.2 S(ue if \214le descriptor).35 E F0(fd) +4.47 E F1(is open and refers to a terminal.)3.27 E F3<ad75>108 439.2 Q +F0(\214le)2.5 E F1 -.35(Tr)144 439.2 S(ue if).35 E F0(\214le)2.5 E F1 +-.15(ex)2.5 G(ists and its set-user).15 E(-id bit is set.)-.2 E F3<ad77> +108 451.2 Q F0(\214le)2.5 E F1 -.35(Tr)144 451.2 S(ue if).35 E F0 +(\214le)2.5 E F1 -.15(ex)2.5 G(ists and is writable.).15 E F3<ad78>108 +463.2 Q F0(\214le)2.5 E F1 -.35(Tr)144 463.2 S(ue if).35 E F0(\214le)2.5 +E F1 -.15(ex)2.5 G(ists and is e).15 E -.15(xe)-.15 G(cutable.).15 E F3 +<ad47>108 475.2 Q F0(\214le)2.5 E F1 -.35(Tr)144 475.2 S(ue if).35 E F0 +(\214le)2.5 E F1 -.15(ex)2.5 G(ists and is o).15 E(wned by the ef)-.25 E +(fecti)-.25 E .3 -.15(ve g)-.25 H(roup id.).15 E F3<ad4c>108 487.2 Q F0 +(\214le)2.5 E F1 -.35(Tr)144 487.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15 +(ex)2.5 G(ists and is a symbolic link.).15 E F3<ad4e>108 499.2 Q F0 +(\214le)2.5 E F1 -.35(Tr)144 499.2 S(ue if).35 E F0(\214le)2.5 E F1 -.15 +(ex)2.5 G(ists and has been modi\214ed since it w).15 E(as last read.) +-.1 E F3<ad4f>108 511.2 Q F0(\214le)2.5 E F1 -.35(Tr)144 511.2 S(ue if) +.35 E F0(\214le)2.5 E F1 -.15(ex)2.5 G(ists and is o).15 E +(wned by the ef)-.25 E(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id.).15 E F3 +<ad53>108 523.2 Q F0(\214le)2.5 E F1 -.35(Tr)144 523.2 S(ue if).35 E F0 +(\214le)2.5 E F1 -.15(ex)2.5 G(ists and is a sock).15 E(et.)-.1 E F0 +(\214le1)108 535.2 Q F3(\255ef)2.5 E F0(\214le2)2.5 E F1 -.35(Tr)144 +547.2 S(ue if).35 E F0(\214le1)2.5 E F1(and)2.5 E F0(\214le2)2.5 E F1 +(refer to the same de)2.5 E(vice and inode numbers.)-.25 E F0(\214le1) +108 559.2 Q F1<ad>2.5 E F3(nt)A F0(\214le2)2.5 E F1 -.35(Tr)144 571.2 S +(ue if).35 E F0(\214le1)2.5 E F1(is ne)2.5 E +(wer \(according to modi\214cation date\) than)-.25 E F0(\214le2)2.5 E +F1 2.5(,o)C 2.5(ri)-2.5 G(f)-2.5 E F0(\214le1)2.5 E F1 -.15(ex)2.5 G +(ists and).15 E F0(\214le2)2.5 E F1(does not.)2.5 E F0(\214le1)108 583.2 +Q F1<ad>2.5 E F3(ot)A F0(\214le2)2.5 E F1 -.35(Tr)144 595.2 S(ue if).35 +E F0(\214le1)2.5 E F1(is older than)2.5 E F0(\214le2)2.5 E F1 2.5(,o)C +2.5(ri)-2.5 G(f)-2.5 E F0(\214le2)2.5 E F1 -.15(ex)2.5 G(ists and).15 E +F0(\214le1)2.5 E F1(does not.)2.5 E F3<ad6f>108 607.2 Q F0(optname)2.5 E +F1 -.35(Tr)144 619.2 S .262(ue if the shell option).35 F F0(optname) +2.992 E F1 .262(is enabled.)2.942 F .262 +(See the list of options under the description of the)5.262 F F3<ad6f> +2.763 E F1(option to the)144 631.2 Q F3(set)2.5 E F1 -.2(bu)2.5 G +(iltin belo).2 E -.65(w.)-.25 G F3<ad76>108 643.2 Q F0(varname)2.5 E F1 +-.35(Tr)144 655.2 S .327(ue if the shell v).35 F(ariable)-.25 E F0 +(varname)3.116 E F1 .326(is set \(has been assigned a v)3.006 F 2.826 +(alue\). If)-.25 F F0(varname)2.826 E F1 .326(is an inde)2.826 F -.15 +(xe)-.15 G 2.826(da).15 G -.2(r-)-2.826 G .131(ray v)144 667.2 R .131 +(ariable name subscripted by)-.25 F F0(@)2.631 E F1(or)2.631 E F0(*) +2.631 E F1 2.631(,t)C .131(his returns true if the array has an)-2.631 F +2.631(ys)-.15 G .131(et elements.)-2.631 F(If)5.131 E F0(var)2.632 E(-) +-.2 E(name)144 679.2 Q F1 .737(is an associati)3.238 F 1.037 -.15(ve a) +-.25 H .737(rray v).15 F .737(ariable name subscripted by)-.25 F F0(@) +3.237 E F1(or)3.237 E F0(*)3.237 E F1 3.237(,t)C .737 +(his returns true if an element)-3.237 F(with that k)144 691.2 Q .3 -.15 +(ey i)-.1 H 2.5(ss).15 G(et.)-2.5 E F3<ad52>108 703.2 Q F0(varname)2.5 E +F1 -.35(Tr)144 715.2 S(ue if the shell v).35 E(ariable)-.25 E F0 +(varname)2.79 E F1(is set and is a name reference.)2.68 E(GNU Bash 5.3) +72 768 Q(2024 March 29)144.29 E(36)193.45 E 0 Cg EP +%%Page: 37 37 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 -/Times-Italic@0 SF(string1)108 84 Q/F2 10/Times-Bold@0 SF(=)2.5 E F1 -(string2)2.5 E F0 -.35(Tr)144 96 S .862(ue if the strings are equal.).35 -F F2(=)5.861 E F0 .861(should be used with the)3.361 F F2(test)3.361 E -F0 .861(command for POSIX conformance.)3.361 F .446(When used with the) -144 108 R F2([[)2.946 E F0 .446 -(command, this performs pattern matching as described abo)2.946 F .747 --.15(ve \()-.15 H F2(Compound).15 E(Commands)144 120 Q F0(\).)A F1 -(string1)108 136.8 Q F2(!=)2.5 E F1(string2)2.5 E F0 -.35(Tr)144 148.8 S -(ue if the strings are not equal.).35 E F1(string1)108 165.6 Q F2(<)2.5 -E F1(string2)2.5 E F0 -.35(Tr)144 177.6 S(ue if).35 E F1(string1)2.5 E -F0(sorts before)2.5 E F1(string2)2.5 E F0(le)2.5 E(xicographically)-.15 -E(.)-.65 E F1(string1)108 194.4 Q F2(>)2.5 E F1(string2)2.5 E F0 -.35 -(Tr)144 206.4 S(ue if).35 E F1(string1)2.5 E F0(sorts after)2.5 E F1 -(string2)2.5 E F0(le)2.5 E(xicographically)-.15 E(.)-.65 E F1(ar)108.33 -223.2 Q(g1)-.37 E F2(OP)2.5 E F1(ar)2.5 E(g2)-.37 E/F3 9/Times-Bold@0 SF -(OP)144 235.2 Q F0 .385(is one of)2.635 F F2(\255eq)2.885 E F0(,)A F2 -(\255ne)2.885 E F0(,)A F2(\255lt)2.885 E F0(,)A F2(\255le)2.885 E F0(,)A -F2(\255gt)2.885 E F0 2.885(,o)C(r)-2.885 E F2(\255ge)2.885 E F0 5.385 -(.T)C .385(hese arithmetic binary operators return true if)-5.385 F F1 -(ar)2.884 E(g1)-.37 E F0 .845(is equal to, not equal to, less than, les\ -s than or equal to, greater than, or greater than or equal to)144 247.2 -R F1(ar)144 259.2 Q(g2)-.37 E F0 3.59(,r)C(especti)-3.59 E -.15(ve)-.25 -G(ly).15 E(.)-.65 E F1(Ar)7.1 E(g1)-.37 E F0(and)3.59 E F1(ar)3.92 E(g2) --.37 E F0 1.089(may be positi)3.61 F 1.389 -.15(ve o)-.25 H 3.589(rn).15 -G -2.25 -.15(eg a)-3.589 H(ti).15 E 1.389 -.15(ve i)-.25 H(nte).15 E -3.589(gers. When)-.15 F 1.089(used with the)3.589 F F2([[)3.589 E F0 -(command,)144 271.2 Q F1(Ar)4.447 E(g1)-.37 E F0(and)3.437 E F1(Ar)4.447 -E(g2)-.37 E F0 .937(are e)3.457 F -.25(va)-.25 G .937 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF<ad7a>108 84 Q F0(string)2.5 E +F1 -.35(Tr)144 96 S(ue if the length of).35 E F0(string)2.5 E F1 +(is zero.)2.5 E F0(string)108 108 Q F2<ad6e>108 120 Q F0(string)2.5 E F1 +-.35(Tr)144 132 S(ue if the length of).35 E F0(string)2.84 E F1 +(is non-zero.)2.72 E F0(string1)108 148.8 Q F2(==)2.5 E F0(string2)2.5 E +(string1)108 160.8 Q F2(=)2.5 E F0(string2)2.5 E F1 -.35(Tr)144 172.8 S +.861(ue if the strings are equal.).35 F F2(=)5.861 E F1 .861 +(should be used with the)3.361 F F2(test)3.361 E F1 .862 +(command for POSIX conformance.)3.362 F .447(When used with the)144 +184.8 R F2([[)2.946 E F1 .446 +(command, this performs pattern matching as described abo)2.946 F .746 +-.15(ve \()-.15 H F2(Compound).15 E(Commands)144 196.8 Q F1(\).)A F0 +(string1)108 213.6 Q F2(!=)2.5 E F0(string2)2.5 E F1 -.35(Tr)144 225.6 S +(ue if the strings are not equal.).35 E F0(string1)108 242.4 Q F2(<)2.5 +E F0(string2)2.5 E F1 -.35(Tr)144 254.4 S(ue if).35 E F0(string1)2.5 E +F1(sorts before)2.5 E F0(string2)2.5 E F1(le)2.5 E(xicographically)-.15 +E(.)-.65 E F0(string1)108 271.2 Q F2(>)2.5 E F0(string2)2.5 E F1 -.35 +(Tr)144 283.2 S(ue if).35 E F0(string1)2.5 E F1(sorts after)2.5 E F0 +(string2)2.5 E F1(le)2.5 E(xicographically)-.15 E(.)-.65 E F0(ar)108.33 +300 Q(g1)-.37 E F2(OP)2.5 E F0(ar)2.5 E(g2)-.37 E/F3 9/Times-Bold@0 SF +(OP)144 312 Q F1 .385(is one of)2.634 F F2(\255eq)2.885 E F1(,)A F2 +(\255ne)2.885 E F1(,)A F2(\255lt)2.885 E F1(,)A F2(\255le)2.885 E F1(,)A +F2(\255gt)2.885 E F1 2.885(,o)C(r)-2.885 E F2(\255ge)2.885 E F1 5.385 +(.T)C .385(hese arithmetic binary operators return true if)-5.385 F F0 +(ar)2.885 E(g1)-.37 E F1 .845(is equal to, not equal to, less than, les\ +s than or equal to, greater than, or greater than or equal to)144 324 R +F0(ar)144 336 Q(g2)-.37 E F1 3.589(,r)C(especti)-3.589 E -.15(ve)-.25 G +(ly).15 E(.)-.65 E F0(Ar)7.099 E(g1)-.37 E F1(and)3.589 E F0(ar)3.919 E +(g2)-.37 E F1 1.089(may be positi)3.609 F 1.389 -.15(ve o)-.25 H 3.589 +(rn).15 G -2.25 -.15(eg a)-3.589 H(ti).15 E 1.389 -.15(ve i)-.25 H(nte) +.15 E 3.59(gers. When)-.15 F 1.09(used with the)3.59 F F2([[)3.59 E F1 +(command,)144 348 Q F0(Ar)4.447 E(g1)-.37 E F1(and)3.437 E F0(Ar)4.447 E +(g2)-.37 E F1 .937(are e)3.457 F -.25(va)-.25 G .937 (luated as arithmetic e).25 F .937(xpressions \(see)-.15 F F3 .937 -(ARITHMETIC EV)3.437 F(ALU)-1.215 E(A-)-.54 E(TION)144 283.2 Q F0(abo) -2.25 E -.15(ve)-.15 G(\).).15 E/F4 10.95/Times-Bold@0 SF -(SIMPLE COMMAND EXP)72 300 Q(ANSION)-.81 E F0 .614 -(When a simple command is e)108 312 R -.15(xe)-.15 G .614 -(cuted, the shell performs the follo).15 F .613(wing e)-.25 F .613 -(xpansions, assignments, and redi-)-.15 F -(rections, from left to right, in the follo)108 324 Q(wing order)-.25 E -(.)-.55 E(1.)108 340.8 Q 1.848(The w)144 340.8 R 1.848 -(ords that the parser has mark)-.1 F 1.848(ed as v)-.1 F 1.849 +(ARITHMETIC EV)3.437 F(ALU)-1.215 E(A-)-.54 E(TION)144 360 Q F1(abo)2.25 +E -.15(ve)-.15 G(\).).15 E/F4 10.95/Times-Bold@0 SF(SIMPLE COMMAND EXP) +72 376.8 Q(ANSION)-.81 E F1 .613(When a simple command is e)108 388.8 R +-.15(xe)-.15 G .614(cuted, the shell performs the follo).15 F .614 +(wing e)-.25 F .614(xpansions, assignments, and redi-)-.15 F +(rections, from left to right, in the follo)108 400.8 Q(wing order)-.25 +E(.)-.55 E(1.)108 417.6 Q 1.849(The w)144 417.6 R 1.849 +(ords that the parser has mark)-.1 F 1.848(ed as v)-.1 F 1.848 (ariable assignments \(those preceding the command)-.25 F -(name\) and redirections are sa)144 352.8 Q -.15(ve)-.2 G 2.5(df).15 G -(or later processing.)-2.5 E(2.)108 369.6 Q .18(The w)144 369.6 R .18 +(name\) and redirections are sa)144 429.6 Q -.15(ve)-.2 G 2.5(df).15 G +(or later processing.)-2.5 E(2.)108 446.4 Q .179(The w)144 446.4 R .179 (ords that are not v)-.1 F .179 -(ariable assignments or redirections are e)-.25 F 2.679(xpanded. If)-.15 -F(an)2.679 E 2.679(yw)-.15 G .179(ords remain af-)-2.779 F .346(ter e) -144 381.6 R .346(xpansion, the \214rst w)-.15 F .346(ord is tak)-.1 F -.347(en to be the name of the command and the remaining w)-.1 F .347 -(ords are)-.1 F(the ar)144 393.6 Q(guments.)-.18 E(3.)108 410.4 Q -(Redirections are performed as described abo)144 410.4 Q .3 -.15(ve u) --.15 H(nder).15 E F3(REDIRECTION)2.5 E/F5 9/Times-Roman@0 SF(.)A F0(4.) -108 427.2 Q .717(The te)144 427.2 R .717(xt after the)-.15 F F2(=)3.217 -E F0 .717(in each v)3.217 F .717(ariable assignment under)-.25 F .717 +(ariable assignments or redirections are e)-.25 F 2.68(xpanded. If)-.15 +F(an)2.68 E 2.68(yw)-.15 G .18(ords remain af-)-2.78 F .347(ter e)144 +458.4 R .347(xpansion, the \214rst w)-.15 F .347(ord is tak)-.1 F .347 +(en to be the name of the command and the remaining w)-.1 F .346 +(ords are)-.1 F(the ar)144 470.4 Q(guments.)-.18 E(3.)108 487.2 Q +(Redirections are performed as described abo)144 487.2 Q .3 -.15(ve u) +-.15 H(nder).15 E F3(REDIRECTION)2.5 E/F5 9/Times-Roman@0 SF(.)A F1(4.) +108 504 Q .716(The te)144 504 R .717(xt after the)-.15 F F2(=)3.217 E F1 +.717(in each v)3.217 F .717(ariable assignment under)-.25 F .717 (goes tilde e)-.18 F .717(xpansion, parameter e)-.15 F(xpansion,)-.15 E -.339(command substitution, arithmetic e)144 439.2 R .339 +.34(command substitution, arithmetic e)144 516 R .339 (xpansion, and quote remo)-.15 F -.25(va)-.15 G 2.839(lb).25 G .339 -(efore being assigned to the v)-2.839 F(ari-)-.25 E(able.)144 451.2 Q -.587(If no command name results, the v)108 468 R .586 +(efore being assigned to the v)-2.839 F(ari-)-.25 E(able.)144 528 Q .586 +(If no command name results, the v)108 544.8 R .586 (ariable assignments af)-.25 F .586(fect the current shell en)-.25 F -3.086(vironment. In)-.4 F .586(the case of)3.086 F .371(such a command \ +3.087(vironment. In)-.4 F .587(the case of)3.087 F .371(such a command \ \(one that consists only of assignment statements and redirections\), a\ -ssignment statements)108 480 R .835(are performed before redirections.) -108 492 R .835(Otherwise, the v)5.835 F .835 -(ariables are added to the en)-.25 F .835(vironment of the e)-.4 F -.15 -(xe)-.15 G(cuted).15 E .838(command and do not af)108 504 R .838 -(fect the current shell en)-.25 F 3.338(vironment. If)-.4 F(an)3.338 E -3.338(yo)-.15 G 3.338(ft)-3.338 G .839 -(he assignments attempts to assign a)-3.338 F -.25(va)108 516 S +ssignment statements)108 556.8 R .835 +(are performed before redirections.)108 568.8 R .835(Otherwise, the v) +5.835 F .835(ariables are added to the en)-.25 F .835 +(vironment of the e)-.4 F -.15(xe)-.15 G(cuted).15 E .839 +(command and do not af)108 580.8 R .838(fect the current shell en)-.25 F +3.338(vironment. If)-.4 F(an)3.338 E 3.338(yo)-.15 G 3.338(ft)-3.338 G +.838(he assignments attempts to assign a)-3.338 F -.25(va)108 592.8 S (lue to a readonly v).25 E(ariable, an error occurs, and the command e) --.25 E(xits with a non-zero status.)-.15 E .15 -(If no command name results, redirections are performed, b)108 532.8 R -.149(ut do not af)-.2 F .149(fect the current shell en)-.25 F 2.649 -(vironment. A)-.4 F(redirection error causes the command to e)108 544.8 +-.25 E(xits with a non-zero status.)-.15 E .149 +(If no command name results, redirections are performed, b)108 609.6 R +.149(ut do not af)-.2 F .15(fect the current shell en)-.25 F 2.65 +(vironment. A)-.4 F(redirection error causes the command to e)108 621.6 Q(xit with a non-zero status.)-.15 E 1.064 -(If there is a command name left after e)108 561.6 R 1.064(xpansion, e) +(If there is a command name left after e)108 638.4 R 1.064(xpansion, e) -.15 F -.15(xe)-.15 G 1.064(cution proceeds as described belo).15 F -4.864 -.65(w. O)-.25 H 1.064(therwise, the).65 F .069(command e)108 -573.6 R 2.569(xits. If)-.15 F .069(one of the e)2.569 F .069 -(xpansions contained a command substitution, the e)-.15 F .068 -(xit status of the command)-.15 F .466(is the e)108 585.6 R .466 -(xit status of the last command substitution performed.)-.15 F .467 -(If there were no command substitutions, the)5.466 F(command e)108 597.6 -Q(xits with a status of zero.)-.15 E F4(COMMAND EXECUTION)72 614.4 Q F0 -.547(After a command has been split into w)108 626.4 R .546 +4.864 -.65(w. O)-.25 H 1.064(therwise, the).65 F .068(command e)108 +650.4 R 2.568(xits. If)-.15 F .069(one of the e)2.568 F .069 +(xpansions contained a command substitution, the e)-.15 F .069 +(xit status of the command)-.15 F .467(is the e)108 662.4 R .466 +(xit status of the last command substitution performed.)-.15 F .466 +(If there were no command substitutions, the)5.466 F(command e)108 674.4 +Q(xits with a status of zero.)-.15 E F4(COMMAND EXECUTION)72 691.2 Q F1 +.546(After a command has been split into w)108 703.2 R .547 (ords, if it results in a simple command and an optional list of ar)-.1 -F(gu-)-.18 E(ments, the follo)108 638.4 Q(wing actions are tak)-.25 E -(en.)-.1 E .379(If the command name contains no slashes, the shell atte\ -mpts to locate it.)108 655.2 R .379(If there e)5.379 F .379 -(xists a shell function by)-.15 F .246(that name, that function is in) -108 667.2 R -.2(vo)-.4 G -.1(ke).2 G 2.746(da).1 G 2.746(sd)-2.746 G -.246(escribed abo)-2.746 F .546 -.15(ve i)-.15 H(n).15 E F3(FUNCTIONS) -2.746 E F5(.)A F0 .246(If the name does not match a func-)4.746 F -(tion, the shell searches for it in the list of shell b)108 679.2 Q 2.5 -(uiltins. If)-.2 F 2.5(am)2.5 G(atch is found, that b)-2.5 E -(uiltin is in)-.2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E .309 -(If the name is neither a shell function nor a b)108 696 R .31 -(uiltin, and contains no slashes,)-.2 F F2(bash)2.81 E F0 .31 -(searches each element of)2.81 F(the)108 708 Q F3 -.666(PA)3.163 G(TH) --.189 E F0 .662(for a directory containing an e)2.913 F -.15(xe)-.15 G -.662(cutable \214le by that name.).15 F F2(Bash)5.662 E F0 .662 -(uses a hash table to remember)3.162 F 1.914(the full pathnames of e)108 -720 R -.15(xe)-.15 G 1.915(cutable \214les \(see).15 F F2(hash)4.415 E -F0(under)4.415 E F3 1.915(SHELL B)4.415 F(UIL)-.09 E 1.915(TIN COMMANDS) --.828 F F0(belo)4.165 E 4.415(w\). A)-.25 F(full)4.415 E(GNU Bash 5.2)72 -768 Q(2022 September 19)135.955 E(36)185.115 E 0 Cg EP -%%Page: 37 37 +F(gu-)-.18 E(ments, the shell performs the follo)108 715.2 Q +(wing actions.)-.25 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(37) +193.45 E 0 Cg EP +%%Page: 38 38 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .72 -(search of the directories in)108 84 R/F1 9/Times-Bold@0 SF -.666(PA) -3.22 G(TH)-.189 E F0 .719 -(is performed only if the command is not found in the hash table.)2.97 F -.719(If the)5.719 F .956(search is unsuccessful, the shell searches for\ - a de\214ned shell function named)108 96 R/F2 10/Times-Bold@0 SF -(command_not_f)3.456 E(ound_han-)-.25 E(dle)108 108 Q F0 6.006(.I)C -3.506(ft)-6.006 G 1.006(hat function e)-3.506 F 1.006(xists, it is in) --.15 F -.2(vo)-.4 G -.1(ke).2 G 3.506(di).1 G 3.506(nas)-3.506 G 1.005 -(eparate e)-3.506 F -.15(xe)-.15 G 1.005(cution en).15 F 1.005 -(vironment with the original command)-.4 F .255 -(and the original command')108 120 R 2.755(sa)-.55 G -.18(rg)-2.755 G -.255(uments as its ar).18 F .256(guments, and the function')-.18 F 2.756 -(se)-.55 G .256(xit status becomes the e)-2.906 F .256(xit sta-)-.15 F -.263(tus of that subshell.)108 132 R .263(If that function is not de\ +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .379(If the command name contains no slashes, the \ +shell attempts to locate it.)108 84 R .379(If there e)5.379 F .379 +(xists a shell function by)-.15 F .246(that name, that function is in) +108 96 R -.2(vo)-.4 G -.1(ke).2 G 2.746(da).1 G 2.746(sd)-2.746 G .246 +(escribed abo)-2.746 F .546 -.15(ve i)-.15 H(n).15 E/F2 9/Times-Bold@0 +SF(FUNCTIONS)2.746 E/F3 9/Times-Roman@0 SF(.)A F1 .246 +(If the name does not match a func-)4.746 F +(tion, the shell searches for it in the list of shell b)108 108 Q 2.5 +(uiltins. If)-.2 F 2.5(am)2.5 G(atch is found, that b)-2.5 E +(uiltin is in)-.2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E .31 +(If the name is neither a shell function nor a b)108 124.8 R .309 +(uiltin, and contains no slashes,)-.2 F/F4 10/Times-Bold@0 SF(bash)2.809 +E F1 .309(searches each element of)2.809 F(the)108 136.8 Q F2 -.666(PA) +3.162 G(TH)-.189 E F1 .662(for a directory containing an e)2.912 F -.15 +(xe)-.15 G .662(cutable \214le by that name.).15 F F4(Bash)5.662 E F1 +.663(uses a hash table to remember)3.162 F 1.915 +(the full pathnames of e)108 148.8 R -.15(xe)-.15 G 1.915 +(cutable \214les \(see).15 F F4(hash)4.415 E F1(under)4.415 E F2 1.915 +(SHELL B)4.415 F(UIL)-.09 E 1.914(TIN COMMANDS)-.828 F F1(belo)4.164 E +4.414(w\). A)-.25 F(full)4.414 E .719(search of the directories in)108 +160.8 R F2 -.666(PA)3.219 G(TH)-.189 E F1 .72 +(is performed only if the command is not found in the hash table.)2.969 +F .72(If the)5.72 F .956(search is unsuccessful, the shell searches for\ + a de\214ned shell function named)108 172.8 R F4(command_not_f)3.455 E +(ound_han-)-.25 E(dle)108 184.8 Q F1 6.005(.I)C 3.505(ft)-6.005 G 1.005 +(hat function e)-3.505 F 1.005(xists, it is in)-.15 F -.2(vo)-.4 G -.1 +(ke).2 G 3.506(di).1 G 3.506(nas)-3.506 G 1.006(eparate e)-3.506 F -.15 +(xe)-.15 G 1.006(cution en).15 F 1.006 +(vironment with the original command)-.4 F .256 +(and the original command')108 196.8 R 2.756(sa)-.55 G -.18(rg)-2.756 G +.256(uments as its ar).18 F .256(guments, and the function')-.18 F 2.755 +(se)-.55 G .255(xit status becomes the e)-2.905 F .255(xit sta-)-.15 F +.263(tus of that subshell.)108 208.8 R .263(If that function is not de\ \214ned, the shell prints an error message and returns an e)5.263 F .263 -(xit sta-)-.15 F(tus of 127.)108 144 Q 1.089(If the search is successfu\ -l, or if the command name contains one or more slashes, the shell e)108 -160.8 R -.15(xe)-.15 G 1.09(cutes the).15 F .198 -(named program in a separate e)108 172.8 R -.15(xe)-.15 G .198 +(xit sta-)-.15 F(tus of 127.)108 220.8 Q 1.089(If the search is success\ +ful, or if the command name contains one or more slashes, the shell e) +108 237.6 R -.15(xe)-.15 G 1.089(cutes the).15 F .197 +(named program in a separate e)108 249.6 R -.15(xe)-.15 G .197 (cution en).15 F 2.698(vironment. Ar)-.4 F .198 -(gument 0 is set to the name gi)-.18 F -.15(ve)-.25 G .197 -(n, and the remain-).15 F(ing ar)108 184.8 Q +(gument 0 is set to the name gi)-.18 F -.15(ve)-.25 G .198 +(n, and the remain-).15 F(ing ar)108 261.6 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 1.048(If this e)108 201.6 R --.15(xe)-.15 G 1.048(cution f).15 F 1.048 -(ails because the \214le is not in e)-.1 F -.15(xe)-.15 G 1.049 -(cutable format, and the \214le is not a directory).15 F 3.549(,i)-.65 G -3.549(ti)-3.549 G 3.549(sa)-3.549 G(s-)-3.549 E .143(sumed to be a)108 -213.6 R/F3 10/Times-Italic@0 SF .143(shell script)2.643 F F0 2.643 -(,a\214)C .143(le containing shell commands, and the shell creates a ne) --2.643 F 2.643(wi)-.25 G .143(nstance of itself to)-2.643 F -.15(exe)108 -225.6 S .136(cute it.).15 F .136 -(This subshell reinitializes itself, so that the ef)5.136 F .137 -(fect is as if a ne)-.25 F 2.637(ws)-.25 G .137(hell had been in)-2.637 -F -.2(vo)-.4 G -.1(ke).2 G 2.637(dt).1 G 2.637(oh)-2.637 G(andle)-2.637 -E .866(the script, with the e)108 237.6 R .866 +(ve)-.25 G(n, if an).15 E -.65(y.)-.15 G 1.049(If this e)108 278.4 R +-.15(xe)-.15 G 1.049(cution f).15 F 1.049 +(ails because the \214le is not in e)-.1 F -.15(xe)-.15 G 1.048 +(cutable format, and the \214le is not a directory).15 F 3.548(,i)-.65 G +3.548(ti)-3.548 G 3.548(sa)-3.548 G(s-)-3.548 E .143(sumed to be a)108 +290.4 R F0 .143(shell script)2.643 F F1 2.643(,a\214)C .143 +(le containing shell commands, and the shell creates a ne)-2.643 F 2.643 +(wi)-.25 G .143(nstance of itself to)-2.643 F -.15(exe)108 302.4 S .137 +(cute it.).15 F .137(This subshell reinitializes itself, so that the ef) +5.137 F .136(fect is as if a ne)-.25 F 2.636(ws)-.25 G .136 +(hell had been in)-2.636 F -.2(vo)-.4 G -.1(ke).2 G 2.636(dt).1 G 2.636 +(oh)-2.636 G(andle)-2.636 E .865(the script, with the e)108 314.4 R .866 (xception that the locations of commands remembered by the parent \(see) --.15 F F2(hash)3.365 E F0(belo)3.365 E(w)-.25 E(under)108 249.6 Q F1 -(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E/F4 9/Times-Roman@0 SF(\)) -A F0(are retained by the child.)2.25 E .347 -(If the program is a \214le be)108 266.4 R .347(ginning with)-.15 F F2 -(#!)2.847 E F0 2.847(,t)C .348(he remainder of the \214rst line speci\ -\214es an interpreter for the pro-)-2.847 F 3.178(gram. The)108 278.4 R -.678(shell e)3.178 F -.15(xe)-.15 G .678(cutes the speci\214ed interpre\ -ter on operating systems that do not handle this e).15 F -.15(xe)-.15 G -(cutable).15 E .206(format themselv)108 290.4 R 2.706(es. The)-.15 F(ar) -2.706 E .206(guments to the interpreter consist of a single optional ar) --.18 F .206(gument follo)-.18 F .206(wing the in-)-.25 F .268 -(terpreter name on the \214rst line of the program, follo)108 302.4 R -.267(wed by the name of the program, follo)-.25 F .267(wed by the com-) --.25 F(mand ar)108 314.4 Q(guments, if an)-.18 E -.65(y.)-.15 G/F5 10.95 -/Times-Bold@0 SF(COMMAND EXECUTION ENVIR)72 331.2 Q(ONMENT)-.329 E F0 -(The shell has an)108 343.2 Q F3 -.2(ex)2.5 G(ecution en).2 E(vir)-.4 E -(onment)-.45 E F0 2.5(,w)C(hich consists of the follo)-2.5 E(wing:)-.25 -E<83>108 360 Q 1.405(open \214les inherited by the shell at in)144 360 R --.2(vo)-.4 G 1.406 -(cation, as modi\214ed by redirections supplied to the).2 F F2(exec) -3.906 E F0 -.2(bu)144 372 S(iltin).2 E<83>108 388.8 Q(the current w)144 -388.8 Q(orking directory as set by)-.1 E F2(cd)2.5 E F0(,)A F2(pushd)2.5 -E F0 2.5(,o)C(r)-2.5 E F2(popd)2.5 E F0 2.5(,o)C 2.5(ri)-2.5 G -(nherited by the shell at in)-2.5 E -.2(vo)-.4 G(cation).2 E<83>108 -405.6 Q(the \214le creation mode mask as set by)144 405.6 Q F2(umask)2.5 -E F0(or inherited from the shell')2.5 E 2.5(sp)-.55 G(arent)-2.5 E<83> -108 422.4 Q(current traps set by)144 422.4 Q F2(trap)2.5 E F0<83>108 -439.2 Q .257(shell parameters that are set by v)144 439.2 R .256 -(ariable assignment or with)-.25 F F2(set)2.756 E F0 .256 -(or inherited from the shell')2.756 F 2.756(sp)-.55 G(arent)-2.756 E -(in the en)144 451.2 Q(vironment)-.4 E<83>108 468 Q -(shell functions de\214ned during e)144 468 Q -.15(xe)-.15 G +-.15 F F4(hash)3.366 E F1(belo)3.366 E(w)-.25 E(under)108 326.4 Q F2 +(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F3(\))A F1 +(are retained by the child.)2.25 E .348(If the program is a \214le be) +108 343.2 R .348(ginning with)-.15 F F4(#!)2.848 E F1 2.848(,t)C .347(h\ +e remainder of the \214rst line speci\214es an interpreter for the pro-) +-2.848 F 3.178(gram. The)108 355.2 R .678(shell e)3.178 F -.15(xe)-.15 G +.678(cutes the speci\214ed interpreter on operating systems that do not\ + handle this e).15 F -.15(xe)-.15 G(cutable).15 E .206(format themselv) +108 367.2 R 2.706(es. The)-.15 F(ar)2.706 E .206 +(guments to the interpreter consist of a single optional ar)-.18 F .206 +(gument follo)-.18 F .206(wing the in-)-.25 F .267 +(terpreter name on the \214rst line of the program, follo)108 379.2 R +.268(wed by the name of the program, follo)-.25 F .268(wed by the com-) +-.25 F(mand ar)108 391.2 Q(guments, if an)-.18 E -.65(y.)-.15 G/F5 10.95 +/Times-Bold@0 SF(COMMAND EXECUTION ENVIR)72 408 Q(ONMENT)-.329 E F1 +(The shell has an)108 420 Q F0 -.2(ex)2.5 G(ecution en).2 E(vir)-.4 E +(onment)-.45 E F1 2.5(,w)C(hich consists of the follo)-2.5 E(wing:)-.25 +E<83>108 436.8 Q 1.406(open \214les inherited by the shell at in)144 +436.8 R -.2(vo)-.4 G 1.405 +(cation, as modi\214ed by redirections supplied to the).2 F F4(exec) +3.905 E F1 -.2(bu)144 448.8 S(iltin).2 E<83>108 465.6 Q(the current w) +144 465.6 Q(orking directory as set by)-.1 E F4(cd)2.5 E F1(,)A F4 +(pushd)2.5 E F1 2.5(,o)C(r)-2.5 E F4(popd)2.5 E F1 2.5(,o)C 2.5(ri)-2.5 +G(nherited by the shell at in)-2.5 E -.2(vo)-.4 G(cation).2 E<83>108 +482.4 Q(the \214le creation mode mask as set by)144 482.4 Q F4(umask)2.5 +E F1(or inherited from the shell')2.5 E 2.5(sp)-.55 G(arent)-2.5 E<83> +108 499.2 Q(current traps set by)144 499.2 Q F4(trap)2.5 E F1<83>108 516 +Q .256(shell parameters that are set by v)144 516 R .256 +(ariable assignment or with)-.25 F F4(set)2.756 E F1 .257 +(or inherited from the shell')2.756 F 2.757(sp)-.55 G(arent)-2.757 E +(in the en)144 528 Q(vironment)-.4 E<83>108 544.8 Q +(shell functions de\214ned during e)144 544.8 Q -.15(xe)-.15 G (cution or inherited from the shell').15 E 2.5(sp)-.55 G -(arent in the en)-2.5 E(vironment)-.4 E<83>108 484.8 Q -(options enabled at in)144 484.8 Q -.2(vo)-.4 G(cation \(either by def) -.2 E(ault or with command-line ar)-.1 E(guments\) or by)-.18 E F2(set) -2.5 E F0<83>108 501.6 Q(options enabled by)144 501.6 Q F2(shopt)2.5 E F0 -<83>108 518.4 Q(shell aliases de\214ned with)144 518.4 Q F2(alias)2.5 E -F0<83>108 535.2 Q -.25(va)144 535.2 S +(arent in the en)-2.5 E(vironment)-.4 E<83>108 561.6 Q +(options enabled at in)144 561.6 Q -.2(vo)-.4 G(cation \(either by def) +.2 E(ault or with command-line ar)-.1 E(guments\) or by)-.18 E F4(set) +2.5 E F1<83>108 578.4 Q(options enabled by)144 578.4 Q F4(shopt)2.5 E F1 +<83>108 595.2 Q(shell aliases de\214ned with)144 595.2 Q F4(alias)2.5 E +F1<83>108 612 Q -.25(va)144 612 S (rious process IDs, including those of background jobs, the v).25 E -(alue of)-.25 E F2($$)2.5 E F0 2.5(,a)C(nd the v)-2.5 E(alue of)-.25 E -F1(PPID)2.5 E F0 .426(When a simple command other than a b)108 552 R -.427(uiltin or shell function is to be e)-.2 F -.15(xe)-.15 G .427 -(cuted, it is in).15 F -.2(vo)-.4 G -.1(ke).2 G 2.927(di).1 G 2.927(nas) --2.927 G(eparate)-2.927 E -.15(exe)108 564 S .134(cution en).15 F .134 +(alue of)-.25 E F4($$)2.5 E F1 2.5(,a)C(nd the v)-2.5 E(alue of)-.25 E +F2(PPID)2.5 E F1 .427(When a simple command other than a b)108 628.8 R +.426(uiltin or shell function is to be e)-.2 F -.15(xe)-.15 G .426 +(cuted, it is in).15 F -.2(vo)-.4 G -.1(ke).2 G 2.926(di).1 G 2.926(nas) +-2.926 G(eparate)-2.926 E -.15(exe)108 640.8 S .133(cution en).15 F .133 (vironment that consists of the follo)-.4 F 2.634(wing. Unless)-.25 F -.133(otherwise noted, the v)2.634 F .133(alues are inherited from)-.25 F -(the shell.)108 576 Q<83>108 592.8 Q 1.055(the shell')144 592.8 R 3.555 -(so)-.55 G 1.055(pen \214les, plus an)-3.555 F 3.556(ym)-.15 G 1.056 +.134(otherwise noted, the v)2.634 F .134(alues are inherited from)-.25 F +(the shell.)108 652.8 Q<83>108 669.6 Q 1.056(the shell')144 669.6 R +3.556(so)-.55 G 1.056(pen \214les, plus an)-3.556 F 3.556(ym)-.15 G +1.056 (odi\214cations and additions speci\214ed by redirections to the com-) --3.556 F(mand)144 604.8 Q<83>108 621.6 Q(the current w)144 621.6 Q -(orking directory)-.1 E<83>108 638.4 Q(the \214le creation mode mask)144 -638.4 Q<83>108 655.2 Q .857(shell v)144 655.2 R .857 -(ariables and functions mark)-.25 F .857(ed for e)-.1 F .857 -(xport, along with v)-.15 F .857(ariables e)-.25 F .857 -(xported for the command,)-.15 F(passed in the en)144 667.2 Q(vironment) --.4 E<83>108 684 Q .306(traps caught by the shell are reset to the v)144 -684 R .307(alues inherited from the shell')-.25 F 2.807(sp)-.55 G .307 -(arent, and traps ignored)-2.807 F(by the shell are ignored)144 696 Q -2.5(Ac)108 712.8 S(ommand in)-2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5(di).1 G -2.5(nt)-2.5 G(his separate en)-2.5 E(vironment cannot af)-.4 E -(fect the shell')-.25 E 2.5(se)-.55 G -.15(xe)-2.65 G(cution en).15 E -(vironment.)-.4 E(A)108 729.6 Q F3(subshell)2.5 E F0(is a cop)2.5 E 2.5 -(yo)-.1 G 2.5(ft)-2.5 G(he shell process.)-2.5 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(37)185.115 E 0 Cg EP -%%Page: 38 38 +-3.556 F(mand)144 681.6 Q<83>108 698.4 Q(the current w)144 698.4 Q +(orking directory)-.1 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(38) +193.45 E 0 Cg EP +%%Page: 39 39 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .577(Command subs\ -titution, commands grouped with parentheses, and asynchronous commands \ -are in)108 84 R -.2(vo)-.4 G -.1(ke).2 G 3.077(di).1 G(n)-3.077 E 2.744 -(as)108 96 S .244(ubshell en)-2.744 F .244 -(vironment that is a duplicate of the shell en)-.4 F .245(vironment, e) --.4 F .245(xcept that traps caught by the shell are)-.15 F .359 -(reset to the v)108 108 R .358 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E<83>108 84 Q(the \214le creation mode mask)144 84 Q +<83>108 100.8 Q .856(shell v)144 100.8 R .857 +(ariables and functions mark)-.25 F .857(ed for e)-.1 F .857 +(xport, along with v)-.15 F .857(ariables e)-.25 F .857 +(xported for the command,)-.15 F(passed in the en)144 112.8 Q(vironment) +-.4 E<83>108 129.6 Q .307(traps caught by the shell are reset to the v) +144 129.6 R .306(alues inherited from the shell')-.25 F 2.806(sp)-.55 G +.306(arent, and traps ignored)-2.806 F(by the shell are ignored)144 +141.6 Q 2.5(Ac)108 158.4 S(ommand in)-2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5 +(di).1 G 2.5(nt)-2.5 G(his separate en)-2.5 E(vironment cannot af)-.4 E +(fect the shell')-.25 E 2.5(se)-.55 G -.15(xe)-2.65 G(cution en).15 E +(vironment.)-.4 E(A)108 175.2 Q F0(subshell)2.5 E F1(is a cop)2.5 E 2.5 +(yo)-.1 G 2.5(ft)-2.5 G(he shell process.)-2.5 E .577(Command substitut\ +ion, commands grouped with parentheses, and asynchronous commands are i\ +n)108 192 R -.2(vo)-.4 G -.1(ke).2 G 3.078(di).1 G(n)-3.078 E 2.745(as) +108 204 S .245(ubshell en)-2.745 F .245 +(vironment that is a duplicate of the shell en)-.4 F .244(vironment, e) +-.4 F .244(xcept that traps caught by the shell are)-.15 F .358 +(reset to the v)108 216 R .358 (alues that the shell inherited from its parent at in)-.25 F -.2(vo)-.4 -G 2.858(cation. Builtin).2 F .358(commands that are in)2.858 F -.2(vo) --.4 G -.1(ke).2 G(d).1 E .856(as part of a pipeline are also e)108 120 R --.15(xe)-.15 G .856(cuted in a subshell en).15 F 3.357 -(vironment. Changes)-.4 F .857(made to the subshell en)3.357 F(viron-) --.4 E(ment cannot af)108 132 Q(fect the shell')-.25 E 2.5(se)-.55 G -.15 -(xe)-2.65 G(cution en).15 E(vironment.)-.4 E 1.377(Subshells spa)108 -148.8 R 1.377(wned to e)-.15 F -.15(xe)-.15 G 1.377 -(cute command substitutions inherit the v).15 F 1.377(alue of the)-.25 F -/F1 10/Times-Bold@0 SF<ad65>3.876 E F0 1.376(option from the parent) -3.876 F 2.5(shell. When)108 160.8 R(not in)2.5 E/F2 10/Times-Italic@0 SF -(posix mode)2.5 E F0(,)A F1(bash)2.5 E F0(clears the)2.5 E F1<ad65>2.5 E -F0(option in such subshells.)2.5 E .404(If a command is follo)108 177.6 -R .404(wed by a)-.25 F F1(&)2.904 E F0 .405(and job control is not acti) -2.904 F -.15(ve)-.25 G 2.905(,t).15 G .405(he def)-2.905 F .405 -(ault standard input for the command)-.1 F .198(is the empty \214le)108 -189.6 R F2(/de)2.698 E(v/null)-.15 E F0 5.198(.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 201.6 Q/F3 10.95/Times-Bold@0 SF -(ENVIR)72 218.4 Q(ONMENT)-.329 E F0 2.343(When a program is in)108 230.4 -R -.2(vo)-.4 G -.1(ke).2 G 4.843(di).1 G 4.843(ti)-4.843 G 4.843(sg) --4.843 G -2.15 -.25(iv e)-4.843 H 4.843(na).25 G 4.843(na)-4.843 G 2.343 -(rray of strings called the)-4.843 F F2(en)5.033 E(vir)-.4 E(onment)-.45 -E F0 7.343(.T).68 G 2.344(his is a list of)-7.343 F F2(name)108 242.4 Q -F0<ad>A F2(value)A F0(pairs, of the form)2.5 E F2(name)2.86 E F0(=)A F2 -(value)A F0(.).18 E .439(The shell pro)108 259.2 R .438(vides se)-.15 F --.15(ve)-.25 G .438(ral w).15 F .438(ays to manipulate the en)-.1 F -2.938(vironment. On)-.4 F(in)2.938 E -.2(vo)-.4 G .438 -(cation, the shell scans its o).2 F .438(wn en-)-.25 F .709(vironment a\ -nd creates a parameter for each name found, automatically marking it fo\ -r)108 271.2 R F2 -.2(ex)3.209 G(port).2 E F0 .709(to child pro-)3.889 F -2.704(cesses. Ex)108 283.2 R .203(ecuted commands inherit the en)-.15 F -2.703(vironment. The)-.4 F F1(export)2.703 E F0(and)2.703 E F1(declar) -2.703 E 2.703<65ad>-.18 G(x)-2.703 E F0 .203(commands allo)2.703 F 2.703 -(wp)-.25 G(aram-)-2.703 E .332 -(eters and functions to be added to and deleted from the en)108 295.2 R -2.832(vironment. If)-.4 F .332(the v)2.832 F .332 -(alue of a parameter in the en-)-.25 F .132 -(vironment is modi\214ed, the ne)108 307.2 R 2.632(wv)-.25 G .131 -(alue becomes part of the en)-2.882 F .131 -(vironment, replacing the old.)-.4 F .131(The en)5.131 F(vironment)-.4 E -.32(inherited by an)108 319.2 R 2.82(ye)-.15 G -.15(xe)-2.97 G .321 -(cuted command consists of the shell').15 F 2.821(si)-.55 G .321 -(nitial en)-2.821 F .321(vironment, whose v)-.4 F .321 -(alues may be modi-)-.25 F .534(\214ed in the shell, less an)108 331.2 R -3.034(yp)-.15 G .534(airs remo)-3.034 F -.15(ve)-.15 G 3.034(db).15 G -3.034(yt)-3.034 G(he)-3.034 E F1(unset)3.034 E F0 .534(command, plus an) -3.034 F 3.033(ya)-.15 G .533(dditions via the)-3.033 F F1(export)3.033 E -F0(and)3.033 E F1(de-)3.033 E(clar)108 343.2 Q 2.5<65ad>-.18 G(x)-2.5 E -F0(commands.)2.5 E .562(The en)108 360 R .562(vironment for an)-.4 F(y) --.15 E F2 .562(simple command)3.402 F F0 .563 +G 2.858(cation. Builtin).2 F .359(commands that are in)2.859 F -.2(vo) +-.4 G -.1(ke).2 G(d).1 E .857(as part of a pipeline are also e)108 228 R +-.15(xe)-.15 G .856(cuted in a subshell en).15 F 3.356 +(vironment. Changes)-.4 F .856(made to the subshell en)3.356 F(viron-) +-.4 E(ment cannot af)108 240 Q(fect the shell')-.25 E 2.5(se)-.55 G -.15 +(xe)-2.65 G(cution en).15 E(vironment.)-.4 E .605(When the shell is in) +108 256.8 R F0 .605(posix mode)3.105 F F1 3.105(,s)C .605(ubshells spa) +-3.105 F .605(wned to e)-.15 F -.15(xe)-.15 G .605 +(cute command substitutions inherit the v).15 F .605(alue of)-.25 F(the) +108 268.8 Q/F2 10/Times-Bold@0 SF<ad65>2.695 E F1 .195 +(option from their parent shell.)2.695 F .194(When not in)5.194 F F0 +.194(posix mode)2.694 F F1(,)A F2(bash)2.694 E F1 .194(clears the)2.694 +F F2<ad65>2.694 E F1 .194(option in such subshells.)2.694 F .613 +(See the description of the)108 280.8 R F2(inherit_err)3.113 E(exit)-.18 +E F1 .613(shell option belo)3.113 F 3.114(wf)-.25 G .614(or ho)-3.114 F +3.114(wt)-.25 G 3.114(oc)-3.114 G .614(ontrol this beha)-3.114 F .614 +(vior when not in)-.2 F(posix mode.)108 292.8 Q .405 +(If a command is follo)108 309.6 R .405(wed by a)-.25 F F2(&)2.905 E F1 +.404(and job control is not acti)2.905 F -.15(ve)-.25 G 2.904(,t).15 G +.404(he def)-2.904 F .404(ault standard input for the command)-.1 F .197 +(is the empty \214le)108 321.6 R F0(/de)2.697 E(v/null)-.15 E F1 5.197 +(.O)C .197(therwise, the in)-5.197 F -.2(vo)-.4 G -.1(ke).2 G 2.697(dc) +.1 G .198(ommand inherits the \214le descriptors of the calling shell) +-2.697 F(as modi\214ed by redirections.)108 333.6 Q/F3 10.95 +/Times-Bold@0 SF(ENVIR)72 350.4 Q(ONMENT)-.329 E F1 2.344 +(When a program is in)108 362.4 R -.2(vo)-.4 G -.1(ke).2 G 4.843(di).1 G +4.843(ti)-4.843 G 4.843(sg)-4.843 G -2.15 -.25(iv e)-4.843 H 4.843(na) +.25 G 4.843(na)-4.843 G 2.343(rray of strings called the)-4.843 F F0(en) +5.033 E(vir)-.4 E(onment)-.45 E F1 7.343(.T).68 G 2.343 +(his is a list of)-7.343 F F0(name)108 374.4 Q F1<ad>A F0(value)A F1 +(pairs, of the form)2.5 E F0(name)2.86 E F1(=)A F0(value)A F1(.).18 E +.438(The shell pro)108 391.2 R .438(vides se)-.15 F -.15(ve)-.25 G .438 +(ral w).15 F .438(ays to manipulate the en)-.1 F 2.938(vironment. On)-.4 +F(in)2.938 E -.2(vo)-.4 G .438(cation, the shell scans its o).2 F .439 +(wn en-)-.25 F 2.033(vironment and creates a parameter for each name fo\ +und, automatically marking it for)108 403.2 R F0 -.2(ex)4.533 G(port).2 +E F1 2.033(to child)5.213 F 2.873(processes. Ex)108 415.2 R .374 +(ecuted commands inherit the en)-.15 F 2.874(vironment. The)-.4 F F2 +(export)2.874 E F1(and)2.874 E F2(declar)2.874 E 2.874<65ad>-.18 G(x) +-2.874 E F1 .374(commands allo)2.874 F 2.874(wp)-.25 G(a-)-2.874 E .335 +(rameters and functions to be added to and deleted from the en)108 427.2 +R 2.835(vironment. If)-.4 F .335(the v)2.835 F .334 +(alue of a parameter in the)-.25 F(en)108 439.2 Q .64 +(vironment is modi\214ed, the ne)-.4 F 3.14(wv)-.25 G .64 +(alue becomes part of the en)-3.39 F .64(vironment, replacing the old.) +-.4 F .64(The en)5.64 F(viron-)-.4 E .58(ment inherited by an)108 451.2 +R 3.08(ye)-.15 G -.15(xe)-3.23 G .58 +(cuted command consists of the shell').15 F 3.08(si)-.55 G .58 +(nitial en)-3.08 F .58(vironment, whose v)-.4 F .58(alues may be)-.25 F +.3(modi\214ed in the shell, less an)108 463.2 R 2.8(yp)-.15 G .3 +(airs remo)-2.8 F -.15(ve)-.15 G 2.8(db).15 G 2.801(yt)-2.8 G(he)-2.801 +E F2(unset)2.801 E F1 .301(command, plus an)2.801 F 2.801(ya)-.15 G .301 +(dditions via the)-2.801 F F2(export)2.801 E F1(and)2.801 E F2(declar) +108 475.2 Q 2.5<65ad>-.18 G(x)-2.5 E F1(commands.)2.5 E .563(The en)108 +492 R .563(vironment for an)-.4 F(y)-.15 E F0 .563(simple command)3.403 +F F1 .562 (or function may be augmented temporarily by pre\214xing it with)3.833 F -.203(parameter assignments, as described abo)108 372 R .502 -.15(ve i) +.202(parameter assignments, as described abo)108 504 R .502 -.15(ve i) -.15 H(n).15 E/F4 9/Times-Bold@0 SF -.666(PA)2.702 G(RAMETERS).666 E/F5 -9/Times-Roman@0 SF(.)A F0 .202(These assignment statements af)4.702 F -.202(fect only the)-.25 F(en)108 384 Q(vironment seen by that command.) --.4 E .81(If the)108 400.8 R F1<ad6b>3.31 E F0 .81 -(option is set \(see the)3.31 F F1(set)3.31 E F0 -.2(bu)3.31 G .81 -(iltin command belo).2 F .81(w\), then)-.25 F F2(all)3.64 E F0 .81 -(parameter assignments are placed in)3.82 F(the en)108 412.8 Q +9/Times-Roman@0 SF(.)A F1 .202(These assignment statements af)4.702 F +.203(fect only the)-.25 F(en)108 516 Q(vironment seen by that command.) +-.4 E .81(If the)108 532.8 R F2<ad6b>3.31 E F1 .81 +(option is set \(see the)3.31 F F2(set)3.31 E F1 -.2(bu)3.31 G .81 +(iltin command belo).2 F .81(w\), then)-.25 F F0(all)3.64 E F1 .81 +(parameter assignments are placed in)3.82 F(the en)108 544.8 Q (vironment for a command, not just those that precede the command name.) --.4 E(When)108 429.6 Q F1(bash)3.586 E F0(in)3.586 E -.2(vo)-.4 G -.1 -(ke).2 G 3.586(sa).1 G 3.586(ne)-3.586 G 1.086(xternal command, the v) --3.736 F(ariable)-.25 E F1(_)3.586 E F0 1.085 +-.4 E(When)108 561.6 Q F2(bash)3.585 E F1(in)3.585 E -.2(vo)-.4 G -.1 +(ke).2 G 3.585(sa).1 G 3.585(ne)-3.585 G 1.085(xternal command, the v) +-3.735 F(ariable)-.25 E F2(_)3.585 E F1 1.086 (is set to the full \214lename of the command and)3.586 F -(passed to that command in its en)108 441.6 Q(vironment.)-.4 E F3 -(EXIT ST)72 458.4 Q -1.04(AT)-.986 G(US)1.04 E F0 .15(The e)108 470.4 R -.15(xit status of an e)-.15 F -.15(xe)-.15 G .15(cuted command is the v) -.15 F .151(alue returned by the)-.25 F F2(waitpid)2.651 E F0 .151 -(system call or equi)2.651 F -.25(va)-.25 G .151(lent func-).25 F 2.848 -(tion. Exit)108 482.4 R .348(statuses f)2.848 F .347 -(all between 0 and 255, though, as e)-.1 F .347(xplained belo)-.15 F -1.647 -.65(w, t)-.25 H .347(he shell may use v).65 F .347(alues abo)-.25 -F .647 -.15(ve 1)-.15 H(25).15 E(specially)108 494.4 Q 5.506(.E)-.65 G -.506(xit statuses from shell b)-5.506 F .507 +(passed to that command in its en)108 573.6 Q(vironment.)-.4 E F3 +(EXIT ST)72 590.4 Q -1.04(AT)-.986 G(US)1.04 E F1 .151(The e)108 602.4 R +.151(xit status of an e)-.15 F -.15(xe)-.15 G .151 +(cuted command is the v).15 F .15(alue returned by the)-.25 F F0 +(waitpid)2.65 E F1 .15(system call or equi)2.65 F -.25(va)-.25 G .15 +(lent func-).25 F 2.847(tion. Exit)108 614.4 R .347(statuses f)2.847 F +.347(all between 0 and 255, though, as e)-.1 F .347(xplained belo)-.15 F +1.647 -.65(w, t)-.25 H .347(he shell may use v).65 F .348(alues abo)-.25 +F .648 -.15(ve 1)-.15 H(25).15 E(specially)108 626.4 Q 5.507(.E)-.65 G +.507(xit statuses from shell b)-5.507 F .507 (uiltins and compound commands are also limited to this range.)-.2 F -(Under)5.507 E(certain circumstances, the shell will use special v)108 -506.4 Q(alues to indicate speci\214c f)-.25 E(ailure modes.)-.1 E -.15 -(Fo)108 523.2 S 3.373(rt).15 G .873(he shell')-3.373 F 3.373(sp)-.55 G -.873(urposes, a command which e)-3.373 F .873(xits with a zero e)-.15 F -.873(xit status has succeeded.)-.15 F .872(An e)5.872 F .872 -(xit status of)-.15 F .048(zero indicates success.)108 535.2 R 2.548(An) -5.048 G .049(on-zero e)-2.548 F .049(xit status indicates f)-.15 F 2.549 -(ailure. When)-.1 F 2.549(ac)2.549 G .049(ommand terminates on a f) --2.549 F .049(atal sig-)-.1 F(nal)108 547.2 Q F2(N)2.5 E F0(,)A F1(bash) -2.5 E F0(uses the v)2.5 E(alue of 128+)-.25 E F2(N)A F0(as the e)2.5 E -(xit status.)-.15 E .405 -(If a command is not found, the child process created to e)108 564 R --.15(xe)-.15 G .404(cute it returns a status of 127.).15 F .404 -(If a command is)5.404 F(found b)108 576 Q(ut is not e)-.2 E -.15(xe) --.15 G(cutable, the return status is 126.).15 E(If a command f)108 592.8 +(Under)5.506 E(certain circumstances, the shell will use special v)108 +638.4 Q(alues to indicate speci\214c f)-.25 E(ailure modes.)-.1 E -.15 +(Fo)108 655.2 S 3.372(rt).15 G .872(he shell')-3.372 F 3.372(sp)-.55 G +.873(urposes, a command which e)-3.372 F .873(xits with a zero e)-.15 F +.873(xit status has succeeded.)-.15 F .873(An e)5.873 F .873 +(xit status of)-.15 F .049(zero indicates success.)108 667.2 R 2.549(An) +5.049 G .049(on-zero e)-2.549 F .049(xit status indicates f)-.15 F 2.549 +(ailure. When)-.1 F 2.549(ac)2.549 G .048(ommand terminates on a f) +-2.549 F .048(atal sig-)-.1 F(nal)108 679.2 Q F0(N)2.5 E F1(,)A F2(bash) +2.5 E F1(uses the v)2.5 E(alue of 128+)-.25 E F0(N)A F1(as the e)2.5 E +(xit status.)-.15 E .404 +(If a command is not found, the child process created to e)108 696 R +-.15(xe)-.15 G .404(cute it returns a status of 127.).15 F .405 +(If a command is)5.405 F(found b)108 708 Q(ut is not e)-.2 E -.15(xe) +-.15 G(cutable, the return status is 126.).15 E(If a command f)108 724.8 Q(ails because of an error during e)-.1 E (xpansion or redirection, the e)-.15 E(xit status is greater than zero.) --.15 E .08(Shell b)108 609.6 R .08 -(uiltin commands return a status of 0 \()-.2 F F2(true)A F0 2.581(\)i)C -2.581(fs)-2.581 G .081(uccessful, and non-zero \()-2.581 F F2(false)A F0 -2.581(\)i)C 2.581(fa)-2.581 G 2.581(ne)-2.581 G .081(rror occurs while) --2.581 F(the)108 621.6 Q 2.968(ye)-.15 G -.15(xe)-3.118 G 2.968 -(cute. All).15 F -.2(bu)2.968 G .468(iltins return an e).2 F .468 -(xit status of 2 to indicate incorrect usage, generally in)-.15 F -.25 -(va)-.4 G .467(lid options or).25 F(missing ar)108 633.6 Q(guments.)-.18 -E(The e)108 650.4 Q(xit status of the last command is a)-.15 E -.25(va) --.2 G(ilable in the special parameter $?.).25 E F1(Bash)108 667.2 Q F0 -.201(itself returns the e)2.701 F .202(xit status of the last command e) --.15 F -.15(xe)-.15 G .202 -(cuted, unless a syntax error occurs, in which case).15 F(it e)108 679.2 -Q(xits with a non-zero v)-.15 E 2.5(alue. See)-.25 F(also the)2.5 E F1 -(exit)2.5 E F0 -.2(bu)2.5 G(iltin command belo).2 E -.65(w.)-.25 G F3 -(SIGN)72 696 Q(ALS)-.219 E F0(When)108 708 Q F1(bash)2.503 E F0 .002 -(is interacti)2.502 F -.15(ve)-.25 G 2.502(,i).15 G 2.502(nt)-2.502 G -.002(he absence of an)-2.502 F 2.502(yt)-.15 G .002(raps, it ignores) --2.502 F F4(SIGTERM)2.502 E F0 .002(\(so that)2.252 F F1 .002(kill 0) -2.502 F F0 .002(does not kill an in-)2.502 F(teracti)108 720 Q 1.215 --.15(ve s)-.25 H .915(hell\), and).15 F F4(SIGINT)3.415 E F0 .915 -(is caught and handled \(so that the)3.165 F F1(wait)3.415 E F0 -.2(bu) -3.416 G .916(iltin is interruptible\).).2 F .916(In all cases,)5.916 F -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(38)185.115 E 0 Cg EP -%%Page: 39 39 +-.15 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(39)193.45 E 0 Cg EP +%%Page: 40 40 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(bash)108 84 Q F0(ignores)2.5 E/F2 9/Times-Bold@0 SF(SIGQ)2.5 E(UIT) --.09 E/F3 9/Times-Roman@0 SF(.)A F0(If job control is in ef)4.5 E(fect,) --.25 E F1(bash)2.5 E F0(ignores)2.5 E F2(SIGTTIN)2.5 E F3(,)A F2(SIGTT) -2.25 E(OU)-.162 E F3(,)A F0(and)2.25 E F2(SIGTSTP)2.5 E F3(.)A F0(Non-b) -108 100.8 Q 1.065(uiltin commands run by)-.2 F F1(bash)3.565 E F0(ha) -3.565 E 1.365 -.15(ve s)-.2 H 1.065(ignal handlers set to the v).15 F -1.064(alues inherited by the shell from its)-.25 F 3.247(parent. When) -108 112.8 R .747(job control is not in ef)3.247 F .747 -(fect, asynchronous commands ignore)-.25 F F2(SIGINT)3.248 E F0(and) -2.998 E F2(SIGQ)3.248 E(UIT)-.09 E F0 .748(in addi-)2.998 F .653 -(tion to these inherited handlers.)108 124.8 R .653 -(Commands run as a result of command substitution ignore the k)5.653 F --.15(ey)-.1 G(board-).15 E(generated job control signals)108 136.8 Q F2 -(SIGTTIN)2.5 E F3(,)A F2(SIGTT)2.25 E(OU)-.162 E F3(,)A F0(and)2.25 E F2 -(SIGTSTP)2.5 E F3(.)A F0 2.045(The shell e)108 153.6 R 2.045 -(xits by def)-.15 F 2.045(ault upon receipt of a)-.1 F F2(SIGHUP)4.545 E -F3(.)A F0 2.045(Before e)6.545 F 2.045(xiting, an interacti)-.15 F 2.346 --.15(ve s)-.25 H 2.046(hell resends the).15 F F2(SIGHUP)108 165.6 Q F0 -1.005(to all jobs, running or stopped.)3.255 F 1.004 -(Stopped jobs are sent)6.005 F F2(SIGCONT)3.504 E F0 1.004 -(to ensure that the)3.254 F 3.504(yr)-.15 G(ecei)-3.504 E 1.304 -.15 -(ve t)-.25 H(he).15 E F2(SIGHUP)108 177.6 Q F3(.)A F0 2.529 -.8(To p) -5.429 H(re).8 E -.15(ve)-.25 G .93(nt the shell from sending the signal\ - to a particular job, it should be remo).15 F -.15(ve)-.15 G 3.43(df).15 -G .93(rom the)-3.43 F 1.357(jobs table with the)108 189.6 R F1(diso) -3.857 E(wn)-.1 E F0 -.2(bu)3.857 G 1.357(iltin \(see).2 F F2 1.356 -(SHELL B)3.856 F(UIL)-.09 E 1.356(TIN COMMANDS)-.828 F F0(belo)3.606 E -1.356(w\) or mark)-.25 F 1.356(ed to not recei)-.1 F -.15(ve)-.25 G F2 -(SIGHUP)108 201.6 Q F0(using)2.25 E F1(diso)2.5 E(wn \255h)-.1 E F0(.)A -.166(If the)108 218.4 R F1(huponexit)2.666 E F0 .166 -(shell option has been set with)2.666 F F1(shopt)2.666 E F0(,)A F1(bash) -2.666 E F0 .166(sends a)2.666 F F2(SIGHUP)2.666 E F0 .166 -(to all jobs when an interacti)2.416 F -.15(ve)-.25 G(login shell e)108 -230.4 Q(xits.)-.15 E(If)108 247.2 Q F1(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 259.2 R -.15(xe)-.15 G .662 -(cuted until the command completes.).15 F(When)5.663 E F1(bash)3.163 E -F0 .663(is w)3.163 F .663(aiting for an asynchronous command)-.1 F .327 -(via the)108 271.2 R F1(wait)2.827 E F0 -.2(bu)2.827 G .327(iltin, the \ +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .081(Shell b)108 84 R .081 +(uiltin commands return a status of 0 \()-.2 F F0(true)A F1 2.581(\)i)C +2.581(fs)-2.581 G .08(uccessful, and non-zero \()-2.581 F F0(false)A F1 +2.58(\)i)C 2.58(fa)-2.58 G 2.58(ne)-2.58 G .08(rror occurs while)-2.58 F +(the)108 96 Q 2.967(ye)-.15 G -.15(xe)-3.117 G 2.967(cute. All).15 F -.2 +(bu)2.967 G .467(iltins return an e).2 F .468 +(xit status of 2 to indicate incorrect usage, generally in)-.15 F -.25 +(va)-.4 G .468(lid options or).25 F(missing ar)108 108 Q(guments.)-.18 E +(The e)108 124.8 Q(xit status of the last command is a)-.15 E -.25(va) +-.2 G(ilable in the special parameter $?.).25 E/F2 10/Times-Bold@0 SF +(Bash)108 141.6 Q F1 .202(itself returns the e)2.702 F .202 +(xit status of the last command e)-.15 F -.15(xe)-.15 G .201 +(cuted, unless a syntax error occurs, in which case).15 F(it e)108 153.6 +Q(xits with a non-zero v)-.15 E 2.5(alue. See)-.25 F(also the)2.5 E F2 +(exit)2.5 E F1 -.2(bu)2.5 G(iltin command belo).2 E -.65(w.)-.25 G/F3 +10.95/Times-Bold@0 SF(SIGN)72 170.4 Q(ALS)-.219 E F1(When)108 182.4 Q F2 +(bash)2.502 E F1 .002(is interacti)2.502 F -.15(ve)-.25 G 2.502(,i).15 G +2.502(nt)-2.502 G .002(he absence of an)-2.502 F 2.502(yt)-.15 G .002 +(raps, it ignores)-2.502 F/F4 9/Times-Bold@0 SF(SIGTERM)2.502 E F1 .002 +(\(so that)2.252 F F2 .002(kill 0)2.502 F F1 .002(does not kill an in-) +2.502 F(teracti)108 194.4 Q 1.216 -.15(ve s)-.25 H .916(hell\), and).15 +F F4(SIGINT)3.416 E F1 .915(is caught and handled \(so that the)3.166 F +F2(wait)3.415 E F1 -.2(bu)3.415 G .915(iltin is interruptible\).).2 F +.915(In all cases,)5.915 F F2(bash)108 206.4 Q F1(ignores)2.5 E F4(SIGQ) +2.5 E(UIT)-.09 E/F5 9/Times-Roman@0 SF(.)A F1(If job control is in ef) +4.5 E(fect,)-.25 E F2(bash)2.5 E F1(ignores)2.5 E F4(SIGTTIN)2.5 E F5(,) +A F4(SIGTT)2.25 E(OU)-.162 E F5(,)A F1(and)2.25 E F4(SIGTSTP)2.5 E F5(.) +A F1(Non-b)108 223.2 Q 1.064(uiltin commands run by)-.2 F F2(bash)3.564 +E F1(ha)3.564 E 1.365 -.15(ve s)-.2 H 1.065(ignal handlers set to the v) +.15 F 1.065(alues inherited by the shell from its)-.25 F 3.248 +(parent. When)108 235.2 R .748(job control is not in ef)3.248 F .747 +(fect, asynchronous commands ignore)-.25 F F4(SIGINT)3.247 E F1(and) +2.997 E F4(SIGQ)3.247 E(UIT)-.09 E F1 .747(in addi-)2.997 F .652 +(tion to these inherited handlers.)108 247.2 R .653 +(Commands run as a result of command substitution ignore the k)5.652 F +-.15(ey)-.1 G(board-).15 E(generated job control signals)108 259.2 Q F4 +(SIGTTIN)2.5 E F5(,)A F4(SIGTT)2.25 E(OU)-.162 E F5(,)A F1(and)2.25 E F4 +(SIGTSTP)2.5 E F5(.)A F1 2.046(The shell e)108 276 R 2.046(xits by def) +-.15 F 2.045(ault upon receipt of a)-.1 F F4(SIGHUP)4.545 E F5(.)A F1 +2.045(Before e)6.545 F 2.045(xiting, an interacti)-.15 F 2.345 -.15 +(ve s)-.25 H 2.045(hell resends the).15 F F4(SIGHUP)108 288 Q F1 1.004 +(to all jobs, running or stopped.)3.254 F 1.004(Stopped jobs are sent) +6.004 F F4(SIGCONT)3.505 E F1 1.005(to ensure that the)3.255 F 3.505(yr) +-.15 G(ecei)-3.505 E 1.305 -.15(ve t)-.25 H(he).15 E F4(SIGHUP)108 300 Q +F5(.)A F1 2.53 -.8(To p)5.43 H(re).8 E -.15(ve)-.25 G .93(nt the shell \ +from sending the signal to a particular job, it should be remo).15 F +-.15(ve)-.15 G 3.429(df).15 G .929(rom the)-3.429 F 1.356 +(jobs table with the)108 312 R F2(diso)3.856 E(wn)-.1 E F1 -.2(bu)3.856 +G 1.356(iltin \(see).2 F F4 1.356(SHELL B)3.856 F(UIL)-.09 E 1.356 +(TIN COMMANDS)-.828 F F1(belo)3.607 E 1.357(w\) or mark)-.25 F 1.357 +(ed to not recei)-.1 F -.15(ve)-.25 G F4(SIGHUP)108 324 Q F1(using)2.25 +E F2(diso)2.5 E(wn \255h)-.1 E F1(.)A .166(If the)108 340.8 R F2 +(huponexit)2.666 E F1 .166(shell option has been set with)2.666 F F2 +(shopt)2.666 E F1(,)A F2(bash)2.666 E F1 .166(sends a)2.666 F F4(SIGHUP) +2.666 E F1 .166(to all jobs when an interacti)2.416 F -.15(ve)-.25 G +(login shell e)108 352.8 Q(xits.)-.15 E(If)108 369.6 Q F2(bash)3.046 E +F1 .546(is w)3.046 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 .663 +(will not be e)108 381.6 R -.15(xe)-.15 G .663 +(cuted until the command completes.).15 F(When)5.663 E F2(bash)3.163 E +F1 .662(is w)3.163 F .662(aiting for an asynchronous command)-.1 F .326 +(via the)108 393.6 R F2(wait)2.826 E F1 -.2(bu)2.826 G .327(iltin, the \ reception of a signal for which a trap has been set will cause the).2 F -F1(wait)2.826 E F0 -.2(bu)2.826 G .326(iltin to re-).2 F -(turn immediately with an e)108 283.2 Q +F2(wait)2.827 E F1 -.2(bu)2.827 G .327(iltin to re-).2 F +(turn immediately with an e)108 405.6 Q (xit status greater than 128, immediately after which the trap is e)-.15 -E -.15(xe)-.15 G(cuted.).15 E .498(When job control is not enabled, and) -108 300 R F1(bash)2.998 E F0 .498(is w)2.998 F .498(aiting for a fore) --.1 F .499(ground command to complete, the shell re-)-.15 F(cei)108 312 -Q -.15(ve)-.25 G 2.606(sk).15 G -.15(ey)-2.706 G .105 -(board-generated signals such as).15 F F2(SIGINT)2.605 E F0 .105 -(\(usually generated by)2.355 F F1(^C)2.605 E F0 2.605(\)t)C .105 -(hat users commonly intend to)-2.605 F .423(send to that command.)108 -324 R .424(This happens because the shell and the command are in the sa\ -me process group as)5.424 F(the terminal, and)108 336 Q F1(^C)2.5 E F0 -(sends)2.5 E F2(SIGINT)2.5 E F0(to all processes in that process group.) -2.25 E(When)108 352.8 Q F1(bash)3.801 E F0 1.3 -(is running without job control enabled and recei)3.8 F -.15(ve)-.25 G -(s).15 E F2(SIGINT)3.8 E F0 1.3(while w)3.55 F 1.3(aiting for a fore)-.1 -F(ground)-.15 E .809(command, it w)108 364.8 R .809 +E -.15(xe)-.15 G(cuted.).15 E .499(When job control is not enabled, and) +108 422.4 R F2(bash)2.998 E F1 .498(is w)2.998 F .498(aiting for a fore) +-.1 F .498(ground command to complete, the shell re-)-.15 F(cei)108 +434.4 Q -.15(ve)-.25 G 3.213(sk).15 G -.15(ey)-3.313 G .713 +(board-generated signals such as).15 F F4(SIGINT)3.213 E F1 .713 +(\(usually generated by)2.963 F F2<0043>3.213 E F1 3.213(\)t)C .714 +(hat users commonly intend)-3.213 F .455(to send to that command.)108 +446.4 R .454(This happens because the shell and the command are in the \ +same process group)5.455 F(as the terminal, and)108 458.4 Q F2<0043>2.5 +E F1(sends)2.5 E F4(SIGINT)2.5 E F1 +(to all processes in that process group.)2.25 E(When)108 475.2 Q F2 +(bash)3.8 E F1 1.3(is running without job control enabled and recei)3.8 +F -.15(ve)-.25 G(s).15 E F4(SIGINT)3.8 E F1 1.3(while w)3.55 F 1.3 +(aiting for a fore)-.1 F(ground)-.15 E .81(command, it w)108 487.2 R .81 (aits until that fore)-.1 F .81 (ground command terminates and then decides what to do about the)-.15 F -F2(SIG-)3.31 E(INT)108 376.8 Q F3(:)A F0(1.)108 393.6 Q .003 -(If the command terminates due to the)144 393.6 R F2(SIGINT)2.503 E F3 -(,)A F1(bash)2.252 E F0 .002 -(concludes that the user meant to end the entire)2.502 F -(script, and acts on the)144 405.6 Q F2(SIGINT)2.5 E F0 -(\(e.g., by running a)2.25 E F2(SIGINT)2.5 E F0(trap or e)2.25 E -(xiting itself\);)-.15 E(2.)108 422.4 Q .288 -(If the command does not terminate due to)144 422.4 R F2(SIGINT)2.788 E -F3(,)A F0 .288(the program handled the)2.538 F F2(SIGINT)2.789 E F0 .289 -(itself and did)2.539 F .728(not treat it as a f)144 434.4 R .728 -(atal signal.)-.1 F .728(In that case,)5.728 F F1(bash)3.228 E F0 .728 -(does not treat)3.228 F F2(SIGINT)3.228 E F0 .728(as a f)2.978 F .728 -(atal signal, either)-.1 F 3.228(,i)-.4 G(n-)-3.228 E .771 -(stead assuming that the)144 446.4 R F2(SIGINT)3.271 E F0 -.1(wa)3.021 G -3.271(su).1 G .771(sed as part of the program')-3.271 F 3.272(sn)-.55 G -.772(ormal operation \(e.g., emacs)-3.272 F .41 +F4(SIG-)3.309 E(INT)108 499.2 Q F5(:)A F1(1.)108 516 Q .002 +(If the command terminates due to the)144 516 R F4(SIGINT)2.502 E F5(,)A +F2(bash)2.252 E F1 .003(concludes that the user meant to end the entire) +2.502 F(script, and acts on the)144 528 Q F4(SIGINT)2.5 E F1 +(\(e.g., by running a)2.25 E F4(SIGINT)2.5 E F1(trap or e)2.25 E +(xiting itself\);)-.15 E(2.)108 544.8 Q .289 +(If the command does not terminate due to)144 544.8 R F4(SIGINT)2.788 E +F5(,)A F1 .288(the program handled the)2.538 F F4(SIGINT)2.788 E F1 .288 +(itself and did)2.538 F .728(not treat it as a f)144 556.8 R .728 +(atal signal.)-.1 F .728(In that case,)5.728 F F2(bash)3.228 E F1 .728 +(does not treat)3.228 F F4(SIGINT)3.228 E F1 .728(as a f)2.978 F .728 +(atal signal, either)-.1 F 3.229(,i)-.4 G(n-)-3.229 E .772 +(stead assuming that the)144 568.8 R F4(SIGINT)3.272 E F1 -.1(wa)3.022 G +3.272(su).1 G .771(sed as part of the program')-3.272 F 3.271(sn)-.55 G +.771(ormal operation \(e.g., emacs)-3.271 F .409 (uses it to abort editing commands\) or deliberately discarded.)144 -458.4 R(Ho)5.409 E(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F1(bash)3.309 E -F0 .409(will run an)2.909 F 2.909(yt)-.15 G .409(rap set)-2.909 F(on)144 -470.4 Q F2(SIGINT)3.788 E F3(,)A F0 1.288(as it does with an)3.538 F -3.788(yo)-.15 G 1.288(ther trapped signal it recei)-3.788 F -.15(ve)-.25 -G 3.789(sw).15 G 1.289(hile it is w)-3.789 F 1.289(aiting for the fore-) --.1 F(ground command to complete, for compatibility)144 482.4 Q(.)-.65 E -/F4 10.95/Times-Bold@0 SF(JOB CONTR)72 499.2 Q(OL)-.329 E/F5 10 -/Times-Italic@0 SF -.25(Jo)108 511.2 S 3.369(bc).25 G(ontr)-3.369 E(ol) --.45 E F0 .868(refers to the ability to selecti)3.879 F -.15(ve)-.25 G -.868(ly stop \().15 F F5(suspend)A F0 3.368(\)t)C .868(he e)-3.368 F --.15(xe)-.15 G .868(cution of processes and continue \().15 F F5 -.37 -(re)C(-).37 E(sume)108 523.2 Q F0 2.664(\)t)C .164(heir e)-2.664 F -.15 -(xe)-.15 G .164(cution at a later point.).15 F 2.665(Au)5.165 G .165 -(ser typically emplo)-2.665 F .165(ys this f)-.1 F .165 -(acility via an interacti)-.1 F .465 -.15(ve i)-.25 H(nterf).15 E .165 -(ace sup-)-.1 F(plied jointly by the operating system k)108 535.2 Q +580.8 R(Ho)5.409 E(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F2(bash)3.309 E +F1 .41(will run an)2.91 F 2.91(yt)-.15 G .41(rap set)-2.91 F(on)144 +592.8 Q F4(SIGINT)3.789 E F5(,)A F1 1.289(as it does with an)3.539 F +3.789(yo)-.15 G 1.288(ther trapped signal it recei)-3.789 F -.15(ve)-.25 +G 3.788(sw).15 G 1.288(hile it is w)-3.788 F 1.288(aiting for the fore-) +-.1 F(ground command to complete, for compatibility)144 604.8 Q(.)-.65 E +F3(JOB CONTR)72 621.6 Q(OL)-.329 E F0 -.25(Jo)108 633.6 S 3.368(bc).25 G +(ontr)-3.368 E(ol)-.45 E F1 .868(refers to the ability to selecti)3.878 +F -.15(ve)-.25 G .868(ly stop \().15 F F0(suspend)A F1 3.368(\)t)C .868 +(he e)-3.368 F -.15(xe)-.15 G .868(cution of processes and continue \() +.15 F F0 -.37(re)C(-).37 E(sume)108 645.6 Q F1 2.665(\)t)C .165(heir e) +-2.665 F -.15(xe)-.15 G .165(cution at a later point.).15 F 2.665(Au) +5.165 G .165(ser typically emplo)-2.665 F .165(ys this f)-.1 F .164 +(acility via an interacti)-.1 F .464 -.15(ve i)-.25 H(nterf).15 E .164 +(ace sup-)-.1 F(plied jointly by the operating system k)108 657.6 Q (ernel')-.1 E 2.5(st)-.55 G(erminal dri)-2.5 E -.15(ve)-.25 G 2.5(ra).15 -G(nd)-2.5 E F1(bash)2.5 E F0(.)A .785(The shell associates a)108 552 R -F5(job)5.025 E F0 .785(with each pipeline.)3.515 F .784(It k)5.785 F -.784(eeps a table of currently e)-.1 F -.15(xe)-.15 G .784 -(cuting jobs, which may be).15 F .324(listed with the)108 564 R F1(jobs) -2.824 E F0 2.824(command. When)2.824 F F1(bash)2.825 E F0 .325 -(starts a job asynchronously \(in the)2.825 F F5(bac)3.095 E(kgr)-.2 E -(ound)-.45 E F0 .325(\), it prints a line).77 F(that looks lik)108 576 Q -(e:)-.1 E([1] 25647)144 592.8 Q .241(indicating that this job is job nu\ -mber 1 and that the process ID of the last process in the pipeline asso\ -ciated)108 609.6 R .732(with this job is 25647.)108 621.6 R .733 -(All of the processes in a single pipeline are members of the same job) -5.732 F(.)-.4 E F1(Bash)5.733 E F0(uses)3.233 E(the)108 633.6 Q F5(job) -4.24 E F0(abstraction as the basis for job control.)2.73 E 1.982 -.8 -(To f)108 650.4 T .382(acilitate the implementation of the user interf) -.7 F .382(ace to job control, the operating system maintains the no-)-.1 -F 1.537(tion of a)108 662.4 R F5(curr)4.037 E 1.537(ent terminal pr)-.37 -F 1.537(ocess gr)-.45 F 1.537(oup ID)-.45 F F0 6.537(.M)C 1.538 -(embers of this process group \(processes whose process)-6.537 F .023 -(group ID is equal to the current terminal process group ID\) recei)108 -674.4 R .323 -.15(ve k)-.25 H -.15(ey).05 G .023 -(board-generated signals such as).15 F F2(SIG-)2.522 E(INT)108 686.4 Q -F3(.)A F0 1.215(These processes are said to be in the)5.715 F F5(for) -5.685 E -.4(eg)-.37 G -.45(ro).4 G(und).45 E F0(.).77 E F5(Bac)6.795 E -(kgr)-.2 E(ound)-.45 E F0 1.216(processes are those whose process)4.485 -F .146(group ID dif)108 698.4 R .146(fers from the terminal')-.25 F .146 -(s; such processes are immune to k)-.55 F -.15(ey)-.1 G .145 -(board-generated signals.).15 F .145(Only fore-)5.145 F .16 -(ground processes are allo)108 710.4 R .16(wed to read from or)-.25 F -2.66(,i)-.4 G 2.66(ft)-2.66 G .16(he user so speci\214es with)-2.66 F/F6 -10/Courier@0 SF .16(stty tostop)2.66 F F0 2.66(,w)C .16(rite to the ter) --2.66 F(-)-.2 E 3.052(minal. Background)108 722.4 R .551 -(processes which attempt to read from \(write to when)3.052 F F6 .551 -(stty tostop)3.051 F F0 .551(is in ef)3.051 F .551(fect\) the)-.25 F -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(39)185.115 E 0 Cg EP -%%Page: 40 40 +G(nd)-2.5 E F2(bash)2.5 E F1(.)A .784(The shell associates a)108 674.4 R +F0(job)5.024 E F1 .784(with each pipeline.)3.514 F .784(It k)5.784 F +.785(eeps a table of currently e)-.1 F -.15(xe)-.15 G .785 +(cuting jobs, which may be).15 F .325(listed with the)108 686.4 R F2 +(jobs)2.825 E F1 2.825(command. When)2.825 F F2(bash)2.825 E F1 .325 +(starts a job asynchronously \(in the)2.825 F F0(bac)3.094 E(kgr)-.2 E +(ound)-.45 E F1 .324(\), it prints a line).77 F(that looks lik)108 698.4 +Q(e:)-.1 E([1] 25647)144 715.2 Q(GNU Bash 5.3)72 768 Q(2024 March 29) +144.29 E(40)193.45 E 0 Cg EP +%%Page: 41 41 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .717 -(terminal are sent a)108 84 R/F1 9/Times-Bold@0 SF .717(SIGTTIN \(SIGTT) -3.217 F(OU\))-.162 E F0 .718(signal by the k)2.967 F(ernel')-.1 E 3.218 -(st)-.55 G .718(erminal dri)-3.218 F -.15(ve)-.25 G 1.518 -.4(r, w).15 H -.718(hich, unless caught, sus-).4 F(pends the process.)108 96 Q 1.088 -(If the operating system on which)108 112.8 R/F2 10/Times-Bold@0 SF -(bash)3.588 E F0 1.088(is running supports job control,)3.588 F F2(bash) -3.587 E F0 1.087(contains f)3.587 F 1.087(acilities to use it.)-.1 F -.8 -(Ty)108 124.8 S .301(ping the).8 F/F3 10/Times-Italic@0 SF(suspend)3.141 -E F0 .301(character \(typically)3.571 F F2(^Z)2.801 E F0 2.801(,C)C .301 -(ontrol-Z\) while a process is running causes that process to be)-2.801 -F 2.143(stopped and returns control to)108 136.8 R F2(bash)4.642 E F0 -7.142(.T)C 2.142(yping the)-7.942 F F3 2.142(delayed suspend)4.992 F F0 -2.142(character \(typically)5.412 F F2(^Y)4.642 E F0 4.642(,C)C -(ontrol-Y\))-4.642 E .021(causes the process to be stopped when it atte\ +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .241(indicating that this job is job number 1 and \ +that the process ID of the last process in the pipeline associated)108 +84 R .733(with this job is 25647.)108 96 R .732 +(All of the processes in a single pipeline are members of the same job) +5.733 F(.)-.4 E/F2 10/Times-Bold@0 SF(Bash)5.732 E F1(uses)3.232 E(the) +108 108 Q F0(job)4.24 E F1(abstraction as the basis for job control.) +2.73 E 1.981 -.8(To f)108 124.8 T .382 +(acilitate the implementation of the user interf).7 F .382 +(ace to job control, the operating system maintains the no-)-.1 F 1.538 +(tion of a)108 136.8 R F0(curr)4.038 E 1.538(ent terminal pr)-.37 F +1.537(ocess gr)-.45 F 1.537(oup ID)-.45 F F1 6.537(.M)C 1.537 +(embers of this process group \(processes whose process)-6.537 F .023 +(group ID is equal to the current terminal process group ID\) recei)108 +148.8 R .323 -.15(ve k)-.25 H -.15(ey).05 G .023 +(board-generated signals such as).15 F/F3 9/Times-Bold@0 SF(SIG-)2.523 E +(INT)108 160.8 Q/F4 9/Times-Roman@0 SF(.)A F1 1.215 +(These processes are said to be in the)5.716 F F0(for)5.685 E -.4(eg) +-.37 G -.45(ro).4 G(und).45 E F1(.).77 E F0(Bac)6.795 E(kgr)-.2 E(ound) +-.45 E F1 1.215(processes are those whose process)4.485 F .145 +(group ID dif)108 172.8 R .145(fers from the terminal')-.25 F .146 +(s; such processes are immune to k)-.55 F -.15(ey)-.1 G .146 +(board-generated signals.).15 F .146(Only fore-)5.146 F .421 +(ground processes are allo)108 184.8 R .421(wed to read from or)-.25 F +2.921(,i)-.4 G 2.921(ft)-2.921 G .421 +(he user so speci\214es with \231stty tostop\232, write to the termi-) +-2.921 F 2.588(nal. Background)108 196.8 R .089(processes which attempt\ + to read from \(write to when \231tostop\232 is in ef)2.588 F .089 +(fect\) the terminal are)-.25 F 1.899(sent a)108 208.8 R F3 1.899 +(SIGTTIN \(SIGTT)4.399 F(OU\))-.162 E F1 1.899(signal by the k)4.149 F +(ernel')-.1 E 4.399(st)-.55 G 1.899(erminal dri)-4.399 F -.15(ve)-.25 G +2.699 -.4(r, w).15 H 1.898(hich, unless caught, suspends the).4 F +(process.)108 220.8 Q 1.087(If the operating system on which)108 237.6 R +F2(bash)3.587 E F1 1.088(is running supports job control,)3.588 F F2 +(bash)3.588 E F1 1.088(contains f)3.588 F 1.088(acilities to use it.)-.1 +F -.8(Ty)108 249.6 S .147(ping the).8 F F0(suspend)2.987 E F1 .147 +(character \(typically)3.417 F F2<005a>2.646 E F1 2.646(,C)C .146 +(ontrol-Z\) while a process is running causes that process to be)-2.646 +F 1.951(stopped and returns control to)108 261.6 R F2(bash)4.451 E F1 +6.951(.T)C 1.952(yping the)-7.751 F F0 1.952(delayed suspend)4.802 F F1 +1.952(character \(typically)5.222 F F2<0059>4.452 E F1 4.452(,C)C +(ontrol-Y\))-4.452 E .021(causes the process to be stopped when it atte\ mpts to read input from the terminal, and control to be returned)108 -148.8 R(to)108 160.8 Q F2(bash)3.392 E F0 5.892(.T)C .892 +273.6 R(to)108 285.6 Q F2(bash)3.392 E F1 5.892(.T)C .892 (he user may then manipulate the state of this job, using the)-5.892 F -F2(bg)3.392 E F0 .892(command to continue it in the)3.392 F .17 -(background, the)108 172.8 R F2(fg)2.67 E F0 .17 -(command to continue it in the fore)2.67 F .17(ground, or the)-.15 F F2 -(kill)2.67 E F0 .17(command to kill it.)2.67 F(A)5.17 E F2(^Z)2.67 E F0 -(tak)2.67 E .17(es ef-)-.1 F 1.419(fect immediately)108 184.8 R 3.919 -(,a)-.65 G 1.418(nd has the additional side ef)-3.919 F 1.418 -(fect of causing pending output and typeahead to be dis-)-.25 F(carded.) -108 196.8 Q .777(There are a number of w)108 213.6 R .777 +F2(bg)3.392 E F1 .892(command to continue it in the)3.392 F .046 +(background, the)108 297.6 R F2(fg)2.546 E F1 .046 +(command to continue it in the fore)2.546 F .046(ground, or the)-.15 F +F2(kill)2.546 E F1 .046(command to kill it.)2.546 F(A)5.046 E F2<005a> +2.546 E F1(tak)2.546 E .046(es ef-)-.1 F 1.418(fect immediately)108 +309.6 R 3.918(,a)-.65 G 1.418(nd has the additional side ef)-3.918 F +1.418(fect of causing pending output and typeahead to be dis-)-.25 F +(carded.)108 321.6 Q .777(There are a number of w)108 338.4 R .777 (ays to refer to a job in the shell.)-.1 F .777(The character)5.777 F F2 -(%)3.277 E F0 .777(introduces a job speci\214cation)3.277 F(\()108 225.6 -Q F3(jobspec)A F0 3.458(\). Job)B(number)3.458 E F3(n)3.818 E F0 .957 -(may be referred to as)3.697 F F2(%n)3.457 E F0 5.957(.A)C .957 +(%)3.277 E F1 .777(introduces a job speci\214cation)3.277 F(\()108 350.4 +Q F0(jobspec)A F1 3.457(\). Job)B(number)3.457 E F0(n)3.817 E F1 .957 +(may be referred to as)3.697 F F2(%n)3.457 E F1 5.957(.A)C .957 (job may also be referred to using a pre\214x of the)-2.5 F .59(name us\ ed to start it, or using a substring that appears in its command line.) -108 237.6 R -.15(Fo)5.59 G 3.09(re).15 G(xample,)-3.24 E F2(%ce)3.09 E -F0 .59(refers to a)3.09 F .385(stopped job whose command name be)108 -249.6 R .385(gins with)-.15 F F2(ce)2.885 E F0 5.385(.I)C 2.885(fap) +108 362.4 R -.15(Fo)5.59 G 3.09(re).15 G(xample,)-3.24 E F2(%ce)3.09 E +F1 .59(refers to a)3.09 F .385(stopped job whose command name be)108 +374.4 R .385(gins with)-.15 F F2(ce)2.885 E F1 5.385(.I)C 2.885(fap) -5.385 G .385(re\214x matches more than one job,)-2.885 F F2(bash)2.885 -E F0 .385(reports an)2.885 F(error)108 261.6 Q 5.194(.U)-.55 G(sing) --5.194 E F2(%?ce)2.694 E F0 2.694(,o)C 2.694(nt)-2.694 G .194 +E F1 .385(reports an)2.885 F(error)108 386.4 Q 5.194(.U)-.55 G(sing) +-5.194 E F2(%?ce)2.694 E F1 2.694(,o)C 2.694(nt)-2.694 G .194 (he other hand, refers to an)-2.694 F 2.694(yj)-.15 G .194 -(ob containing the string)-2.694 F F2(ce)2.694 E F0 .194 +(ob containing the string)-2.694 F F2(ce)2.694 E F1 .194 (in its command line.)2.694 F .194(If the)5.194 F .306 -(substring matches more than one job,)108 273.6 R F2(bash)2.806 E F0 +(substring matches more than one job,)108 398.4 R F2(bash)2.806 E F1 .306(reports an error)2.806 F 5.306(.T)-.55 G .306(he symbols)-5.306 F -F2(%%)2.806 E F0(and)2.806 E F2(%+)2.806 E F0 .306(refer to the shell') -2.806 F(s)-.55 E .132(notion of the)108 285.6 R F3(curr)2.832 E .133 -(ent job)-.37 F F0 2.633(,w).23 G .133 +F2(%%)2.806 E F1(and)2.806 E F2(%+)2.806 E F1 .307(refer to the shell') +2.806 F(s)-.55 E .133(notion of the)108 410.4 R F0(curr)2.833 E .133 +(ent job)-.37 F F1 2.633(,w).23 G .133 (hich is the last job stopped while it w)-2.633 F .133(as in the fore) --.1 F .133(ground or started in the back-)-.15 F 2.576(ground. The)108 -297.6 R F3(pr)3.826 E -.15(ev)-.37 G .076(ious job).15 F F0 .076 -(may be referenced using)2.806 F F2<25ad>2.576 E F0 5.076(.I)C 2.576(ft) --5.076 G .075(here is only a single job,)-2.576 F F2(%+)2.575 E F0(and) -2.575 E F2<25ad>2.575 E F0 .075(can both)2.575 F .317 -(be used to refer to that job)108 309.6 R 5.317(.I)-.4 G 2.817(no)-5.317 +-.1 F .132(ground or started in the back-)-.15 F 2.575(ground. The)108 +422.4 R F0(pr)3.825 E -.15(ev)-.37 G .075(ious job).15 F F1 .075 +(may be referenced using)2.805 F F2<25ad>2.575 E F1 5.075(.I)C 2.575(ft) +-5.075 G .076(here is only a single job,)-2.575 F F2(%+)2.576 E F1(and) +2.576 E F2<25ad>2.576 E F1 .076(can both)2.576 F .317 +(be used to refer to that job)108 434.4 R 5.317(.I)-.4 G 2.817(no)-5.317 G .317(utput pertaining to jobs \(e.g., the output of the)-2.817 F F2 -(jobs)2.817 E F0 .317(command\), the current)2.817 F .033(job is al)108 -321.6 R -.1(wa)-.1 G .033(ys \215agged with a).1 F F2(+)2.533 E F0 2.533 +(jobs)2.817 E F1 .317(command\), the current)2.817 F .032(job is al)108 +446.4 R -.1(wa)-.1 G .033(ys \215agged with a).1 F F2(+)2.533 E F1 2.533 (,a)C .033(nd the pre)-2.533 F .033(vious job with a)-.25 F F2<ad>2.533 -E F0 5.033(.A)C .033(single % \(with no accompan)-2.5 F .032 +E F1 5.033(.A)C .033(single % \(with no accompan)-2.5 F .033 (ying job speci-)-.15 F(\214cation\) also refers to the current job)108 -333.6 Q(.)-.4 E .443 -(Simply naming a job can be used to bring it into the fore)108 350.4 R -(ground:)-.15 E F2(%1)2.944 E F0 .444(is a synon)2.944 F .444(ym for) --.15 F F2 -.63(``)2.944 G .444(fg %1').63 F(')-.63 E F0 2.944(,b)C -(ringing)-2.944 E 1.473(job 1 from the background into the fore)108 -362.4 R 3.973(ground. Similarly)-.15 F(,)-.65 E F2 -.63(``)3.972 G 1.472 -(%1 &').63 F(')-.63 E F0 1.472(resumes job 1 in the background,)3.972 F -(equi)108 374.4 Q -.25(va)-.25 G(lent to).25 E F2 -.63(``)2.5 G(bg %1') -.63 E(')-.63 E F0(.)A .13(The shell learns immediately whene)108 391.2 R --.15(ve)-.25 G 2.63(raj).15 G .13(ob changes state.)-2.63 F(Normally) -5.131 E(,)-.65 E F2(bash)2.631 E F0 -.1(wa)2.631 G .131 -(its until it is about to print a).1 F .158 -(prompt before reporting changes in a job')108 403.2 R 2.658(ss)-.55 G -.158(tatus so as to not interrupt an)-2.658 F 2.657(yo)-.15 G .157 -(ther output.)-2.657 F .157(If the)5.157 F F2<ad62>2.657 E F0 .157 -(option to)2.657 F(the)108 415.2 Q F2(set)2.647 E F0 -.2(bu)2.647 G .147 -(iltin command is enabled,).2 F F2(bash)2.647 E F0 .148 -(reports such changes immediately)2.648 F 5.148(.A)-.65 G .448 -.15 -(ny t)-5.148 H .148(rap on).15 F F1(SIGCHLD)2.648 E F0 .148(is e)2.398 F --.15(xe)-.15 G(-).15 E(cuted for each child that e)108 427.2 Q(xits.) --.15 E .033(If an attempt to e)108 444 R(xit)-.15 E F2(bash)2.533 E F0 -.033(is made while jobs are stopped \(or)2.533 F 2.532(,i)-.4 G 2.532 -(ft)-2.532 G(he)-2.532 E F2(checkjobs)2.532 E F0 .032 -(shell option has been enabled)2.532 F 1.002(using the)108 456 R F2 -(shopt)3.502 E F0 -.2(bu)3.502 G 1.002 +458.4 Q(.)-.4 E .686 +(Simply naming a job can be used to bring it into the fore)108 475.2 R +(ground:)-.15 E F2(%1)3.186 E F1 .686(is a synon)3.186 F .686 +(ym for \231fg %1\232, bringing)-.15 F .068 +(job 1 from the background into the fore)108 487.2 R 2.568 +(ground. Similarly)-.15 F 2.568<2c99>-.65 G .068 +(%1 &\232 resumes job 1 in the background, equi)-2.568 F(v-)-.25 E +(alent to \231bg %1\232.)108 499.2 Q .131 +(The shell learns immediately whene)108 516 R -.15(ve)-.25 G 2.631(raj) +.15 G .131(ob changes state.)-2.631 F(Normally)5.131 E(,)-.65 E F2(bash) +2.631 E F1 -.1(wa)2.63 G .13(its until it is about to print a).1 F .157 +(prompt before reporting changes in a job')108 528 R 2.657(ss)-.55 G +.157(tatus so as to not interrupt an)-2.657 F 2.658(yo)-.15 G .158 +(ther output.)-2.658 F .158(If the)5.158 F F2<ad62>2.658 E F1 .158 +(option to)2.658 F(the)108 540 Q F2(set)2.648 E F1 -.2(bu)2.648 G .148 +(iltin command is enabled,).2 F F2(bash)2.648 E F1 .148 +(reports such changes immediately)2.648 F 5.147(.A)-.65 G .447 -.15 +(ny t)-5.147 H .147(rap on).15 F F3(SIGCHLD)2.647 E F1 .147(is e)2.397 F +-.15(xe)-.15 G(-).15 E(cuted for each child that e)108 552 Q(xits.)-.15 +E .032(If an attempt to e)108 568.8 R(xit)-.15 E F2(bash)2.532 E F1 .032 +(is made while jobs are stopped \(or)2.532 F 2.533(,i)-.4 G 2.533(ft) +-2.533 G(he)-2.533 E F2(checkjobs)2.533 E F1 .033 +(shell option has been enabled)2.533 F 1.003(using the)108 580.8 R F2 +(shopt)3.503 E F1 -.2(bu)3.503 G 1.003 (iltin, running\), the shell prints a w).2 F 1.002 -(arning message, and, if the)-.1 F F2(checkjobs)3.503 E F0 1.003 -(option is en-)3.503 F .956(abled, lists the jobs and their statuses.) -108 468 R(The)5.955 E F2(jobs)3.455 E F0 .955 -(command may then be used to inspect their status.)3.455 F .955(If a) -5.955 F .603(second attempt to e)108 480 R .604 +(arning message, and, if the)-.1 F F2(checkjobs)3.502 E F1 1.002 +(option is en-)3.502 F .955(abled, lists the jobs and their statuses.) +108 592.8 R(The)5.955 E F2(jobs)3.455 E F1 .955 +(command may then be used to inspect their status.)3.455 F .956(If a) +5.956 F .604(second attempt to e)108 604.8 R .604 (xit is made without an interv)-.15 F .604 (ening command, the shell does not print another w)-.15 F(arning,)-.1 E -(and an)108 492 Q 2.5(ys)-.15 G(topped jobs are terminated.)-2.5 E .645 -(When the shell is w)108 508.8 R .645 -(aiting for a job or process using the)-.1 F F2(wait)3.144 E F0 -.2(bu) -3.144 G .644(iltin, and job control is enabled,).2 F F2(wait)3.144 E F0 -(will)3.144 E .282(return when the job changes state. The)108 520.8 R F2 -<ad66>2.782 E F0 .282(option causes)2.782 F F2(wait)2.782 E F0 .282 +(and an)108 616.8 Q 2.5(ys)-.15 G(topped jobs are terminated.)-2.5 E +.644(When the shell is w)108 633.6 R .644 +(aiting for a job or process using the)-.1 F F2(wait)3.145 E F1 -.2(bu) +3.145 G .645(iltin, and job control is enabled,).2 F F2(wait)3.145 E F1 +(will)3.145 E .282(return when the job changes state. The)108 645.6 R F2 +<ad66>2.782 E F1 .282(option causes)2.782 F F2(wait)2.782 E F1 .282 (to w)2.782 F .282(ait until the job or process terminates be-)-.1 F -(fore returning.)108 532.8 Q/F4 10.95/Times-Bold@0 SF(PR)72 549.6 Q -(OMPTING)-.329 E F0 .645(When e)108 561.6 R -.15(xe)-.15 G .645 -(cuting interacti).15 F -.15(ve)-.25 G(ly).15 E(,)-.65 E F2(bash)3.145 E -F0 .645(displays the primary prompt)3.145 F F1(PS1)3.145 E F0 .645 -(when it is ready to read a command,)2.895 F .427 -(and the secondary prompt)108 573.6 R F1(PS2)2.927 E F0 .427 -(when it needs more input to complete a command.)2.677 F F2(Bash)5.428 E -F0(displays)2.928 E F1(PS0)2.928 E F0(after)2.678 E .038 -(it reads a command b)108 585.6 R .038(ut before e)-.2 F -.15(xe)-.15 G -.038(cuting it.).15 F F2(Bash)5.038 E F0(displays)2.537 E F1(PS4)2.537 E -F0 .037(as described abo)2.287 F .337 -.15(ve b)-.15 H .037 -(efore tracing each com-).15 F 1.121(mand when the)108 597.6 R F2<ad78> -3.621 E F0 1.122(option is enabled.)3.621 F F2(Bash)6.122 E F0(allo) +(fore returning.)108 657.6 Q/F5 10.95/Times-Bold@0 SF(PR)72 674.4 Q +(OMPTING)-.329 E F1 .644(When e)108 686.4 R -.15(xe)-.15 G .644 +(cuting interacti).15 F -.15(ve)-.25 G(ly).15 E(,)-.65 E F2(bash)3.144 E +F1 .645(displays the primary prompt)3.145 F F3(PS1)3.145 E F1 .645 +(when it is ready to read a command,)2.895 F .428 +(and the secondary prompt)108 698.4 R F3(PS2)2.928 E F1 .427 +(when it needs more input to complete a command.)2.678 F F2(Bash)5.427 E +F1(displays)2.927 E F3(PS0)2.927 E F1(after)2.677 E .037 +(it reads a command b)108 710.4 R .037(ut before e)-.2 F -.15(xe)-.15 G +.037(cuting it.).15 F F2(Bash)5.037 E F1(displays)2.537 E F3(PS4)2.538 E +F1 .038(as described abo)2.288 F .338 -.15(ve b)-.15 H .038 +(efore tracing each com-).15 F 1.122(mand when the)108 722.4 R F2<ad78> +3.622 E F1 1.122(option is enabled.)3.622 F F2(Bash)6.122 E F1(allo) 3.622 E 1.122(ws these prompt strings to be customized by inserting a) --.25 F(number of backslash-escaped special characters that are decoded \ -as follo)108 609.6 Q(ws:)-.25 E F2(\\a)144 621.6 Q F0 -(an ASCII bell character \(07\))180 621.6 Q F2(\\d)144 633.6 Q F0 -(the date in "W)180 633.6 Q(eekday Month Date" format \(e.g., "T)-.8 E -(ue May 26"\))-.45 E F2(\\D{)144 645.6 Q F3(format)A F2(})A F0(the)180 -657.6 Q F3(format)3.927 E F0 1.427(is passed to)3.927 F F3(strftime) -3.927 E F0 1.427 -(\(3\) and the result is inserted into the prompt string; an)B(empty)180 -669.6 Q F3(format)2.5 E F0 -(results in a locale-speci\214c time representation.)2.5 E -(The braces are required)5 E F2(\\e)144 681.6 Q F0 -(an ASCII escape character \(033\))180 681.6 Q F2(\\h)144 693.6 Q F0 -(the hostname up to the \214rst `.)180 693.6 Q(')-.7 E F2(\\H)144 705.6 -Q F0(the hostname)180 705.6 Q F2(\\j)144 717.6 Q F0 -(the number of jobs currently managed by the shell)180 717.6 Q -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(40)185.115 E 0 Cg EP -%%Page: 41 41 +-.25 F(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(41)193.45 E 0 Cg EP +%%Page: 42 42 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(\\l)144 84 Q F0(the basename of the shell')180 84 Q 2.5(st)-.55 G -(erminal de)-2.5 E(vice name)-.25 E F1(\\n)144 96 Q F0(ne)180 96 Q -(wline)-.25 E F1(\\r)144 108 Q F0(carriage return)180 108 Q F1(\\s)144 -120 Q F0(the name of the shell, the basename of)180 120 Q F1($0)2.5 E F0 -(\(the portion follo)2.5 E(wing the \214nal slash\))-.25 E F1(\\t)144 -132 Q F0(the current time in 24-hour HH:MM:SS format)180 132 Q F1(\\T) -144 144 Q F0(the current time in 12-hour HH:MM:SS format)180 144 Q F1 -(\\@)144 156 Q F0(the current time in 12-hour am/pm format)180 156 Q F1 -(\\A)144 168 Q F0(the current time in 24-hour HH:MM format)180 168 Q F1 -(\\u)144 180 Q F0(the username of the current user)180 180 Q F1(\\v)144 -192 Q F0(the v)180 192 Q(ersion of)-.15 E F1(bash)2.5 E F0 -(\(e.g., 2.00\))2.5 E F1(\\V)144 204 Q F0(the release of)180 204 Q F1 -(bash)2.5 E F0 2.5(,v)C(ersion + patch le)-2.65 E -.15(ve)-.25 G 2.5 -(l\().15 G(e.g., 2.00.0\))-2.5 E F1(\\w)144 216 Q F0 .119(the v)180 216 -R .119(alue of the)-.25 F F1(PWD)2.619 E F0 .119(shell v)2.619 F .119 -(ariable \()-.25 F F1($PWD)A F0 .119(\), with)B/F2 9/Times-Bold@0 SF -($HOME)2.619 E F0(abbre)2.369 E .119(viated with a tilde \(uses)-.25 F -(the v)180 228 Q(alue of the)-.25 E F2(PR)2.5 E(OMPT_DIR)-.27 E(TRIM) --.36 E F0 -.25(va)2.25 G(riable\)).25 E F1(\\W)144 240 Q F0 -(the basename of)180 240 Q F1($PWD)2.5 E F0 2.5(,w)C(ith)-2.5 E F2 -($HOME)2.5 E F0(abbre)2.25 E(viated with a tilde)-.25 E F1(\\!)144 252 Q -F0(the history number of this command)180 252 Q F1(\\#)144 264 Q F0 -(the command number of this command)180 264 Q F1(\\$)144 276 Q F0 -(if the ef)180 276 Q(fecti)-.25 E .3 -.15(ve U)-.25 H(ID is 0, a).15 E -F1(#)2.5 E F0 2.5(,o)C(therwise a)-2.5 E F1($)2.5 E(\\)144 288 Q/F3 10 -/Times-Italic@0 SF(nnn)A F0 -(the character corresponding to the octal number)180 288 Q F3(nnn)2.5 E -F1(\\\\)144 300 Q F0 2.5(ab)180 300 S(ackslash)-2.5 E F1(\\[)144 312 Q -F0(be)180 312 Q 1.257(gin a sequence of non-printing characters, which \ -could be used to embed a terminal)-.15 F -(control sequence into the prompt)180 324 Q F1(\\])144 336 Q F0 -(end a sequence of non-printing characters)180 336 Q .119 -(The command number and the history number are usually dif)108 352.8 R -.12(ferent: the history number of a command is its)-.25 F .547(position\ - in the history list, which may include commands restored from the hist\ -ory \214le \(see)108 364.8 R F2(HIST)3.046 E(OR)-.162 E(Y)-.315 E F0 -(be-)2.796 E(lo)108 376.8 Q .354(w\), while the command number is the p\ -osition in the sequence of commands e)-.25 F -.15(xe)-.15 G .355 -(cuted during the current).15 F .823(shell session.)108 388.8 R .822 -(After the string is decoded, it is e)5.823 F .822 -(xpanded via parameter e)-.15 F .822(xpansion, command substitution,) --.15 F .682(arithmetic e)108 400.8 R .682(xpansion, and quote remo)-.15 -F -.25(va)-.15 G .682(l, subject to the v).25 F .683(alue of the)-.25 F -F1(pr)3.183 E(omptv)-.18 E(ars)-.1 E F0 .683(shell option \(see the de-) -3.183 F 1.198(scription of the)108 412.8 R F1(shopt)3.698 E F0 1.198 -(command under)3.698 F F2 1.197(SHELL B)3.697 F(UIL)-.09 E 1.197 -(TIN COMMANDS)-.828 F F0(belo)3.447 E 3.697(w\). This)-.25 F 1.197 -(can ha)3.697 F 1.497 -.15(ve u)-.2 H(nw).15 E(anted)-.1 E .322(side ef) -108 424.8 R .322(fects if escaped portions of the string appear within \ +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(number of backslash-escaped special characters tha\ +t are decoded as follo)108 84 Q(ws:)-.25 E/F2 10/Times-Bold@0 SF(\\a)144 +96 Q F1(an ASCII bell character \(07\))180 96 Q F2(\\d)144 108 Q F1 +(the date in \231W)180 108 Q(eekday Month Date\232 format \(e.g., \231T) +-.8 E(ue May 26\232\))-.45 E F2(\\D{)144 120 Q F0(format)A F2(})A F1 +(the)180 132 Q F0(format)3.892 E F1 1.392(is passed to)3.892 F F0 +(strftime)4.232 E F1 1.392 +(\(3\) and the result is inserted into the prompt string; an).18 F +(empty)180 144 Q F0(format)2.5 E F1 +(results in a locale-speci\214c time representation.)2.5 E +(The braces are required)5 E F2(\\e)144 156 Q F1 +(an ASCII escape character \(033\))180 156 Q F2(\\h)144 168 Q F1 +(the hostname up to the \214rst \231.)180 168 Q<9a>-.7 E F2(\\H)144 180 +Q F1(the hostname)180 180 Q F2(\\j)144 192 Q F1 +(the number of jobs currently managed by the shell)180 192 Q F2(\\l)144 +204 Q F1(the basename of the shell')180 204 Q 2.5(st)-.55 G(erminal de) +-2.5 E(vice name)-.25 E F2(\\n)144 216 Q F1(ne)180 216 Q(wline)-.25 E F2 +(\\r)144 228 Q F1(carriage return)180 228 Q F2(\\s)144 240 Q F1 +(the name of the shell, the basename of)180 240 Q F2($0)2.5 E F1 +(\(the portion follo)2.5 E(wing the \214nal slash\))-.25 E F2(\\t)144 +252 Q F1(the current time in 24-hour HH:MM:SS format)180 252 Q F2(\\T) +144 264 Q F1(the current time in 12-hour HH:MM:SS format)180 264 Q F2 +(\\@)144 276 Q F1(the current time in 12-hour am/pm format)180 276 Q F2 +(\\A)144 288 Q F1(the current time in 24-hour HH:MM format)180 288 Q F2 +(\\u)144 300 Q F1(the username of the current user)180 300 Q F2(\\v)144 +312 Q F1(the v)180 312 Q(ersion of)-.15 E F2(bash)2.5 E F1 +(\(e.g., 2.00\))2.5 E F2(\\V)144 324 Q F1(the release of)180 324 Q F2 +(bash)2.5 E F1 2.5(,v)C(ersion + patch le)-2.65 E -.15(ve)-.25 G 2.5 +(l\().15 G(e.g., 2.00.0\))-2.5 E F2(\\w)144 336 Q F1 .12(the v)180 336 R +.119(alue of the)-.25 F F2(PWD)2.619 E F1 .119(shell v)2.619 F .119 +(ariable \()-.25 F F2($PWD)A F1 .119(\), with)B/F3 9/Times-Bold@0 SF +($HOME)2.619 E F1(abbre)2.369 E .119(viated with a tilde \(uses)-.25 F +(the v)180 348 Q(alue of the)-.25 E F3(PR)2.5 E(OMPT_DIR)-.27 E(TRIM) +-.36 E F1 -.25(va)2.25 G(riable\)).25 E F2(\\W)144 360 Q F1 +(the basename of)180 360 Q F2($PWD)2.5 E F1 2.5(,w)C(ith)-2.5 E F3 +($HOME)2.5 E F1(abbre)2.25 E(viated with a tilde)-.25 E F2(\\!)144 372 Q +F1(the history number of this command)180 372 Q F2(\\#)144 384 Q F1 +(the command number of this command)180 384 Q F2(\\$)144 396 Q F1 +(if the ef)180 396 Q(fecti)-.25 E .3 -.15(ve U)-.25 H(ID is 0, a).15 E +F2(#)2.5 E F1 2.5(,o)C(therwise a)-2.5 E F2($)2.5 E(\\)144 408 Q F0(nnn) +A F1(the character corresponding to the octal number)180 408 Q F0(nnn) +2.5 E F2(\\\\)144 420 Q F1 2.5(ab)180 420 S(ackslash)-2.5 E F2(\\[)144 +432 Q F1(be)180 432 Q 1.257(gin a sequence of non-printing characters, \ +which could be used to embed a terminal)-.15 F +(control sequence into the prompt)180 444 Q F2(\\])144 456 Q F1 +(end a sequence of non-printing characters)180 456 Q .12 +(The command number and the history number are usually dif)108 472.8 R +.119(ferent: the history number of a command is its)-.25 F .547(positio\ +n in the history list, which may include commands restored from the his\ +tory \214le \(see)108 484.8 R F3(HIST)3.047 E(OR)-.162 E(Y)-.315 E F1 +(be-)2.797 E(lo)108 496.8 Q .354(w\), while the command number is the p\ +osition in the sequence of commands e)-.25 F -.15(xe)-.15 G .354 +(cuted during the current).15 F .822(shell session.)108 508.8 R .822 +(After the string is decoded, it is e)5.822 F .822 +(xpanded via parameter e)-.15 F .823(xpansion, command substitution,) +-.15 F .683(arithmetic e)108 520.8 R .683(xpansion, and quote remo)-.15 +F -.25(va)-.15 G .683(l, subject to the v).25 F .682(alue of the)-.25 F +F2(pr)3.182 E(omptv)-.18 E(ars)-.1 E F1 .682(shell option \(see the de-) +3.182 F 1.197(scription of the)108 532.8 R F2(shopt)3.697 E F1 1.197 +(command under)3.697 F F3 1.197(SHELL B)3.697 F(UIL)-.09 E 1.197 +(TIN COMMANDS)-.828 F F1(belo)3.448 E 3.698(w\). This)-.25 F 1.198 +(can ha)3.698 F 1.498 -.15(ve u)-.2 H(nw).15 E(anted)-.1 E .322(side ef) +108 544.8 R .322(fects if escaped portions of the string appear within \ command substitution or contain characters spe-)-.25 F(cial to w)108 -436.8 Q(ord e)-.1 E(xpansion.)-.15 E/F4 10.95/Times-Bold@0 SF(READLINE) -72 453.6 Q F0 .151 +556.8 Q(ord e)-.1 E(xpansion.)-.15 E/F4 10.95/Times-Bold@0 SF(READLINE) +72 573.6 Q F1 .15 (This is the library that handles reading input when using an interacti) -108 465.6 R .45 -.15(ve s)-.25 H .15(hell, unless the).15 F F1 -(\255\255noediting)2.65 E F0(option)2.65 E .384(is gi)108 477.6 R -.15 -(ve)-.25 G 2.884(na).15 G 2.884(ts)-2.884 G .384(hell in)-2.884 F -.2 -(vo)-.4 G 2.884(cation. Line).2 F .384 -(editing is also used when using the)2.884 F F1<ad65>2.885 E F0 .385 -(option to the)2.885 F F1 -.18(re)2.885 G(ad).18 E F0 -.2(bu)2.885 G -2.885(iltin. By).2 F(de-)2.885 E -.1(fa)108 489.6 S 1.407 +108 585.6 R .451 -.15(ve s)-.25 H .151(hell, unless the).15 F F2 +(\255\255noediting)2.651 E F1(option)2.651 E .385(is gi)108 597.6 R -.15 +(ve)-.25 G 2.885(na).15 G 2.885(ts)-2.885 G .385(hell in)-2.885 F -.2 +(vo)-.4 G 2.885(cation. Line).2 F .385 +(editing is also used when using the)2.885 F F2<ad65>2.884 E F1 .384 +(option to the)2.884 F F2 -.18(re)2.884 G(ad).18 E F1 -.2(bu)2.884 G +2.884(iltin. By).2 F(de-)2.884 E -.1(fa)108 609.6 S 1.406 (ult, the line editing commands are similar to those of Emacs.).1 F -3.906(Av)6.406 G 1.406(i-style line editing interf)-3.906 F 1.406 -(ace is also)-.1 F -.2(av)108 501.6 S 3.35(ailable. Line)-.05 F .85 +3.907(Av)6.407 G 1.407(i-style line editing interf)-3.907 F 1.407 +(ace is also)-.1 F -.2(av)108 621.6 S 3.35(ailable. Line)-.05 F .85 (editing can be enabled at an)3.35 F 3.35(yt)-.15 G .85(ime using the) --3.35 F F1 .85(\255o emacs)3.35 F F0(or)3.35 E F1 .85(\255o vi)3.35 F F0 -.85(options to the)3.35 F F1(set)3.35 E F0 -.2(bu)3.35 G(iltin).2 E -(\(see)108 513.6 Q F2 .763(SHELL B)3.263 F(UIL)-.09 E .763(TIN COMMANDS) --.828 F F0(belo)3.013 E 3.263(w\). T)-.25 F 3.263(ot)-.8 G .763(urn of) +-3.35 F F2 .85(\255o emacs)3.35 F F1(or)3.35 E F2 .85(\255o vi)3.35 F F1 +.85(options to the)3.35 F F2(set)3.35 E F1 -.2(bu)3.35 G(iltin).2 E +(\(see)108 633.6 Q F3 .762(SHELL B)3.262 F(UIL)-.09 E .762(TIN COMMANDS) +-.828 F F1(belo)3.012 E 3.262(w\). T)-.25 F 3.263(ot)-.8 G .763(urn of) -3.263 F 3.263(fl)-.25 G .763 -(ine editing after the shell is running, use the)-3.263 F F1(+o)3.262 E -(emacs)108 525.6 Q F0(or)2.5 E F1(+o vi)2.5 E F0(options to the)2.5 E F1 -(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(Readline Notation)87 542.4 Q -F0 .463(In this section, the Emacs-style notation is used to denote k) -108 554.4 R -.15(ey)-.1 G(strok).15 E 2.963(es. Control)-.1 F -.1(ke) -2.963 G .463(ys are denoted by C\255)-.05 F F3 -.1(ke)C(y)-.2 E F0(,)A -1.153(e.g., C\255n means Control\255N.)108 566.4 R(Similarly)6.153 E(,) --.65 E F3(meta)4.033 E F0 -.1(ke)3.913 G 1.153(ys are denoted by M\255) --.05 F F3 -.1(ke)C(y)-.2 E F0 3.652(,s)C 3.652(oM)-3.652 G 1.152 -(\255x means Meta\255X.)-3.652 F(\(On)6.152 E -.1(ke)108 578.4 S .83 -(yboards without a)-.05 F F3(meta)3.71 E F0 -.1(ke)3.59 G 2.13 -.65 -(y, M)-.05 H<ad>.65 E F3(x)A F0 .83(means ESC)3.33 F F3(x)3.33 E F0 3.33 -(,i)C .831(.e., press the Escape k)-3.33 F 1.131 -.15(ey t)-.1 H .831 -(hen the).15 F F3(x)4.101 E F0 -.1(ke)3.861 G 4.631 -.65(y. T)-.05 H -.831(his mak).65 F(es)-.1 E .6(ESC the)108 590.4 R F3 .6(meta pr)3.1 F -(e\214x)-.37 E F0 5.6(.T)C .6(he combination M\255C\255)-5.6 F F3(x)A F0 -.599(means ESC\255Control\255)3.099 F F3(x)A F0 3.099(,o)C 3.099(rp) --3.099 G .599(ress the Escape k)-3.099 F .899 -.15(ey t)-.1 H .599 -(hen hold).15 F(the Control k)108 602.4 Q .3 -.15(ey w)-.1 H -(hile pressing the).15 E F3(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G(\)) -.65 E .595(Readline commands may be gi)108 619.2 R -.15(ve)-.25 G 3.096 -(nn).15 G(umeric)-3.096 E F3(ar)3.426 E(guments)-.37 E F0 3.096(,w).27 G -.596(hich normally act as a repeat count.)-3.096 F(Sometimes,)5.596 E -(ho)108 631.2 Q(we)-.25 E -.15(ve)-.25 G 1.419 -.4(r, i).15 H 3.119(ti) -.4 G 3.119(st)-3.119 G .619(he sign of the ar)-3.119 F .619 -(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) -.15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 -(ument to a command that).18 F 1.018(acts in the forw)108 643.2 R 1.018 -(ard direction \(e.g.,)-.1 F F1(kill\255line)3.518 E F0 3.518(\)c)C -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 655.2 Q -(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted belo) --.25 E -.65(w.)-.25 G .812(When a command is described as)108 672 R F3 -(killing)3.311 E F0(te)3.311 E .811(xt, the te)-.15 F .811 -(xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .811 -(or possible future retrie)-3.311 F -.25(va)-.25 G 3.311(l\().25 G F3 -(yank-)-3.311 E(ing)108 684 Q F0 2.529(\). The)B .029(killed te)2.529 F -.029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G 2.529(na)-2.529 G F3 -.029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E .329 -.15(ve k)-.25 H -.029(ills cause the te).15 F .029(xt to be accumulated into one unit,) --.15 F .567(which can be yank)108 696 R .567(ed all at once.)-.1 F .567 -(Commands which do not kill te)5.567 F .567 -(xt separate the chunks of te)-.15 F .567(xt on the kill)-.15 F(ring.) -108 708 Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(41)185.115 E -0 Cg EP -%%Page: 42 42 +(ine editing after the shell is running, use the)-3.263 F F2(+o)3.263 E +(emacs)108 645.6 Q F1(or)2.5 E F2(+o vi)2.5 E F1(options to the)2.5 E F2 +(set)2.5 E F1 -.2(bu)2.5 G(iltin.).2 E F2(Readline Notation)87 662.4 Q +F1 .463(In this section, the Emacs-style notation is used to denote k) +108 674.4 R -.15(ey)-.1 G(strok).15 E 2.963(es. Control)-.1 F -.1(ke) +2.963 G .463(ys are denoted by C\255)-.05 F F0 -.1(ke)C(y)-.2 E F1(,)A +1.152(e.g., C\255n means Control\255N.)108 686.4 R(Similarly)6.152 E(,) +-.65 E F0(meta)4.032 E F1 -.1(ke)3.913 G 1.153(ys are denoted by M\255) +-.05 F F0 -.1(ke)C(y)-.2 E F1 3.653(,s)C 3.653(oM)-3.653 G 1.153 +(\255x means Meta\255X.)-3.653 F(\(On)6.153 E -.1(ke)108 698.4 S .831 +(yboards without a)-.05 F F0(meta)3.711 E F1 -.1(ke)3.591 G 2.131 -.65 +(y, M)-.05 H<ad>.65 E F0(x)A F1 .831(means ESC)3.331 F F0(x)3.331 E F1 +3.331(,i)C .83(.e., press the Escape k)-3.331 F 1.13 -.15(ey t)-.1 H .83 +(hen the).15 F F0(x)4.1 E F1 -.1(ke)3.86 G 4.63 -.65(y. T)-.05 H .83 +(his mak).65 F(es)-.1 E .599(ESC the)108 710.4 R F0 .599(meta pr)3.099 F +(e\214x)-.37 E F1 5.599(.T)C .599(he combination M\255C\255)-5.599 F F0 +(x)A F1 .599(means ESC\255Control\255)3.099 F F0(x)A F1 3.099(,o)C 3.099 +(rp)-3.099 G .6(ress the Escape k)-3.099 F .9 -.15(ey t)-.1 H .6 +(hen hold).15 F(the Control k)108 722.4 Q .3 -.15(ey w)-.1 H +(hile pressing the).15 E F0(x)3.27 E F1 -.1(ke)3.03 G -.65(y.)-.05 G(\)) +.65 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(42)193.45 E 0 Cg EP +%%Page: 43 43 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(Readline Initialization)87 84 Q F0 .091(Readline is customized by pu\ -tting commands in an initialization \214le \(the)108 96 R/F2 10 -/Times-Italic@0 SF(inputr)2.591 E(c)-.37 E F0 2.591(\214le\). The)2.591 -F .092(name of this \214le)2.591 F .573(is tak)108 108 R .573 -(en from the v)-.1 F .573(alue of the)-.25 F/F3 9/Times-Bold@0 SF -(INPUTRC)3.073 E F0 -.25(va)2.823 G 3.073(riable. If).25 F .573(that v) -3.073 F .573(ariable is unset, the def)-.25 F .573(ault is)-.1 F F2 -(~/.inputr)2.573 E(c)-.37 E F0 5.572(.I).31 G 3.072(ft)-5.572 G(hat) --3.072 E 3.061(\214le does)108 120 R .561(not e)3.061 F .562 -(xist or cannot be read, the ultimate def)-.15 F .562(ault is)-.1 F F2 -(/etc/inputr)4.212 E(c)-.37 E F0 5.562(.W).31 G .562 -(hen a program which uses the)-5.562 F .175(readline library starts up,\ - the initialization \214le is read, and the k)108 132 R .474 -.15(ey b) --.1 H .174(indings and v).15 F .174(ariables are set.)-.25 F .174 -(There are)5.174 F .238(only a fe)108 144 R 2.738(wb)-.25 G .238 -(asic constructs allo)-2.738 F .239 -(wed in the readline initialization \214le.)-.25 F .239 -(Blank lines are ignored.)5.239 F .239(Lines be)5.239 F(gin-)-.15 E .554 -(ning with a)108 156 R F1(#)3.054 E F0 .554(are comments.)3.054 F .554 -(Lines be)5.554 F .554(ginning with a)-.15 F F1($)3.054 E F0 .554 -(indicate conditional constructs.)3.054 F .553(Other lines denote)5.553 -F -.1(ke)108 168 S 2.5(yb)-.05 G(indings and v)-2.5 E(ariable settings.) --.25 E .986(The def)108 184.8 R .986(ault k)-.1 F -.15(ey)-.1 G .987 -(-bindings may be changed with an).15 F F2(inputr)3.497 E(c)-.37 E F0 -3.487(\214le. Other)3.797 F .987(programs that use this library may) -3.487 F(add their o)108 196.8 Q(wn commands and bindings.)-.25 E -.15 -(Fo)108 213.6 S 2.5(re).15 G(xample, placing)-2.65 E -(M\255Control\255u: uni)144 230.4 Q -.15(ve)-.25 G(rsal\255ar).15 E -(gument)-.18 E(or)108 242.4 Q(C\255Meta\255u: uni)144 254.4 Q -.15(ve) --.25 G(rsal\255ar).15 E(gument)-.18 E(into the)108 266.4 Q F2(inputr) -2.51 E(c)-.37 E F0 -.1(wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G(\255C\255u e) --2.5 E -.15(xe)-.15 G(cute the readline command).15 E F2(univer)2.58 E -(sal\255ar)-.1 E(gument)-.37 E F0(.).68 E 1.011(The follo)108 283.2 R -1.011(wing symbolic character names are recognized:)-.25 F F2 -.4(RU) -3.511 G(BOUT).4 E F0(,)1.27 E F2(DEL)4.091 E F0(,).53 E F2(ESC)4.021 E -F0(,).72 E F2(LFD)4.091 E F0(,).28 E F2(NEWLINE)4.21 E F0(,).73 E F2 -(RET)4.14 E F0(,)1.27 E F2(RETURN)108.63 295.2 Q F0(,)1.1 E F2(SPC)2.83 -E F0(,).72 E F2(SP)2.83 E -.3(AC)-.9 G(E).3 E F0 2.5(,a).73 G(nd)-2.5 E -F2 -.5(TA)2.5 G(B).5 E F0(.).27 E .209 -(In addition to command names, readline allo)108 312 R .209(ws k)-.25 F --.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .596(Readline commands may be gi)108 84 R -.15(ve) +-.25 G 3.096(nn).15 G(umeric)-3.096 E F0(ar)3.426 E(guments)-.37 E F1 +3.096(,w).27 G .596(hich normally act as a repeat count.)-3.096 F +(Sometimes,)5.595 E(ho)108 96 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i) +.15 H 3.118(ti).4 G 3.119(st)-3.118 G .619(he sign of the ar)-3.119 F +.619(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619 +(ssing a ne).15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg) +.15 G .619(ument to a command that).18 F 1.019(acts in the forw)108 108 +R 1.018(ard direction \(e.g.,)-.1 F/F2 10/Times-Bold@0 SF(kill\255line) +3.518 E F1 3.518(\)c)C 1.018(auses that command to act in a backw)-3.518 +F 1.018(ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 120 Q +(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted belo) +-.25 E -.65(w.)-.25 G .811(When a command is described as)108 136.8 R F0 +(killing)3.311 E F1(te)3.311 E .811(xt, the te)-.15 F .811 +(xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .812 +(or possible future retrie)-3.311 F -.25(va)-.25 G 3.312(l\().25 G F0 +(yank-)-3.312 E(ing)108 148.8 Q F1 2.529(\). The)B .029(killed te)2.529 +F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G 2.529(na)-2.529 G F0 +.029(kill ring)B F1 5.029(.C)C(onsecuti)-5.029 E .329 -.15(ve k)-.25 H +.029(ills cause the te).15 F .029(xt to be accumulated into one unit,) +-.15 F .567(which can be yank)108 160.8 R .567(ed all at once.)-.1 F +.567(Commands which do not kill te)5.567 F .567 +(xt separate the chunks of te)-.15 F .567(xt on the kill)-.15 F(ring.) +108 172.8 Q F2(Readline Initialization)87 189.6 Q F1 .091(Readline is c\ +ustomized by putting commands in an initialization \214le \(the)108 +201.6 R F0(inputr)2.591 E(c)-.37 E F1 2.591(\214le\). The)2.591 F .091 +(name of this \214le)2.591 F .431(is tak)108 213.6 R .431(en from the v) +-.1 F .432(alue of the)-.25 F/F3 9/Times-Bold@0 SF(INPUTRC)2.932 E F1 +-.25(va)2.682 G 2.932(riable. If).25 F .432(that v)2.932 F .432 +(ariable is unset, the def)-.25 F .432(ault is)-.1 F F0(\001/.inputr) +3.032 E(c)-.37 E F1 5.432(.I).31 G 2.932(ft)-5.432 G(hat)-2.932 E 3.062 +(\214le does)108 225.6 R .562(not e)3.062 F .562 +(xist or cannot be read, the ultimate def)-.15 F .562(ault is)-.1 F F0 +(/etc/inputr)4.212 E(c)-.37 E F1 5.561(.W).31 G .561 +(hen a program which uses the)-5.561 F .174(readline library starts up,\ + the initialization \214le is read, and the k)108 237.6 R .475 -.15 +(ey b)-.1 H .175(indings and v).15 F .175(ariables are set.)-.25 F .175 +(There are)5.175 F .239(only a fe)108 249.6 R 2.739(wb)-.25 G .239 +(asic constructs allo)-2.739 F .239 +(wed in the readline initialization \214le.)-.25 F .238 +(Blank lines are ignored.)5.239 F .238(Lines be)5.238 F(gin-)-.15 E .553 +(ning with a)108 261.6 R F2(#)3.053 E F1 .554(are comments.)3.053 F .554 +(Lines be)5.554 F .554(ginning with a)-.15 F F2($)3.054 E F1 .554 +(indicate conditional constructs.)3.054 F .554(Other lines denote)5.554 +F -.1(ke)108 273.6 S 2.5(yb)-.05 G(indings and v)-2.5 E +(ariable settings.)-.25 E .987(The def)108 290.4 R .987(ault k)-.1 F +-.15(ey)-.1 G .987(-bindings may be changed with an).15 F F0(inputr) +3.497 E(c)-.37 E F1 3.487(\214le. Other)3.797 F .987 +(programs that use this library may)3.487 F(add their o)108 302.4 Q +(wn commands and bindings.)-.25 E -.15(Fo)108 319.2 S 2.5(re).15 G +(xample, placing)-2.65 E(M\255Control\255u: uni)144 336 Q -.15(ve)-.25 G +(rsal\255ar).15 E(gument)-.18 E(or)108 348 Q(C\255Meta\255u: uni)144 360 +Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(into the)108 376.8 Q F0 +(inputr)2.51 E(c)-.37 E F1 -.1(wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G +(\255C\255u e)-2.5 E -.15(xe)-.15 G(cute the readline command).15 E F0 +(univer)2.58 E(sal\255ar)-.1 E(gument)-.37 E F1(.).68 E 1.01(The follo) +108 393.6 R 1.011(wing symbolic character names are recognized:)-.25 F +F0 -.4(RU)3.511 G(BOUT).4 E F1(,)1.27 E F0(DEL)4.091 E F1(,).53 E F0 +(ESC)4.021 E F1(,).72 E F0(LFD)4.091 E F1(,).28 E F0(NEWLINE)4.211 E F1 +(,).73 E F0(RET)4.141 E F1(,)1.27 E F0(RETURN)108.63 405.6 Q F1(,)1.1 E +F0(SPC)2.83 E F1(,).72 E F0(SP)2.83 E -.3(AC)-.9 G(E).3 E F1 2.5(,a).73 +G(nd)-2.5 E F0 -.5(TA)2.5 G(B).5 E F1(.).27 E .209 +(In addition to command names, readline allo)108 422.4 R .209(ws k)-.25 +F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 (ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i) --.1 H(s).15 E(pressed \(a)108 324 Q F2(macr)2.5 E(o)-.45 E F0(\).)A F1 -(Readline K)87 340.8 Q(ey Bindings)-.25 E F0 .366 -(The syntax for controlling k)108 352.8 R .666 -.15(ey b)-.1 H .366 -(indings in the).15 F F2(inputr)2.876 E(c)-.37 E F0 .366 +-.1 H(s).15 E(pressed \(a)108 434.4 Q F0(macr)2.5 E(o)-.45 E F1(\).)A F2 +(Readline K)87 451.2 Q(ey Bindings)-.25 E F1 .366 +(The syntax for controlling k)108 463.2 R .666 -.15(ey b)-.1 H .366 +(indings in the).15 F F0(inputr)2.876 E(c)-.37 E F1 .366 (\214le is simple.)3.176 F .366(All that is required is the name of the) -5.366 F .263(command or the te)108 364.8 R .264(xt of a macro and a k) +5.366 F .264(command or the te)108 475.2 R .264(xt of a macro and a k) -.15 F .564 -.15(ey s)-.1 H .264(equence to which it should be bound.) -.15 F .264(The name may be speci-)5.264 F .139(\214ed in one of tw)108 -376.8 R 2.638(ow)-.1 G .138(ays: as a symbolic k)-2.738 F .438 -.15 -(ey n)-.1 H .138(ame, possibly with).15 F F2(Meta\255)2.638 E F0(or) -2.638 E F2(Contr)2.638 E(ol\255)-.45 E F0(pre\214x)2.638 E .138 -(es, or as a k)-.15 F .438 -.15(ey s)-.1 H(e-).15 E(quence.)108 388.8 Q -.16(When using the form)108 405.6 R F1 -.1(ke)2.66 G(yname).1 E F0(:)A -F2(function\255name).833 E F0(or)2.66 E F2(macr)2.66 E(o)-.45 E F0(,)A -F2 -.1(ke)2.66 G(yname)-.2 E F0 .161(is the name of a k)2.84 F .461 -.15 -(ey s)-.1 H .161(pelled out in Eng-).15 F 2.5(lish. F)108 417.6 R(or e) --.15 E(xample:)-.15 E(Control-u: uni)144 441.6 Q -.15(ve)-.25 G -(rsal\255ar).15 E(gument)-.18 E(Meta-Rubout: backw)144 453.6 Q -(ard-kill-w)-.1 E(ord)-.1 E(Control-o: "> output")144 465.6 Q .699 -(In the abo)108 482.4 R .998 -.15(ve ex)-.15 H(ample,).15 E F2(C\255u) -3.038 E F0 .698(is bound to the function)3.448 F F1(uni)3.198 E -.1(ve) --.1 G(rsal\255ar).1 E(gument)-.1 E F0(,)A F2(M\255DEL)3.878 E F0 .698 -(is bound to the func-)3.728 F(tion)108 494.4 Q F1 -(backward\255kill\255w)2.758 E(ord)-.1 E F0 2.758(,a)C(nd)-2.758 E F2 -(C\255o)2.598 E F0 .258(is bound to run the macro e)2.938 F .259 +.15 F .263(The name may be speci-)5.264 F .138(\214ed in one of tw)108 +487.2 R 2.638(ow)-.1 G .138(ays: as a symbolic k)-2.738 F .438 -.15 +(ey n)-.1 H .138(ame, possibly with).15 F F0(Meta\255)2.638 E F1(or) +2.638 E F0(Contr)2.638 E(ol\255)-.45 E F1(pre\214x)2.638 E .138 +(es, or as a k)-.15 F .439 -.15(ey s)-.1 H(e-).15 E(quence.)108 499.2 Q +.161(When using the form)108 516 R F2 -.1(ke)2.661 G(yname).1 E F1(:)A +F0(function\255name).833 E F1(or)2.661 E F0(macr)2.661 E(o)-.45 E F1(,)A +F0 -.1(ke)2.661 G(yname)-.2 E F1 .16(is the name of a k)2.84 F .46 -.15 +(ey s)-.1 H .16(pelled out in Eng-).15 F 2.5(lish. F)108 528 R(or e)-.15 +E(xample:)-.15 E/F4 10/Courier@0 SF(Control-u: universal\255argument)144 +544.8 Q(Meta-Rubout: backward-kill-word)144 556.8 Q +(Control-o: "> output")144 568.8 Q F1 .698(In the abo)108 585.6 R .998 +-.15(ve ex)-.15 H(ample,).15 E F0(C\255u)3.038 E F1 .698 +(is bound to the function)3.448 F F2(uni)3.198 E -.1(ve)-.1 G +(rsal\255ar).1 E(gument)-.1 E F1(,)A F0(M\255DEL)3.878 E F1 .698 +(is bound to the func-)3.728 F(tion)108 597.6 Q F2 +(backward\255kill\255w)2.759 E(ord)-.1 E F1 2.759(,a)C(nd)-2.759 E F0 +(C\255o)2.599 E F1 .258(is bound to run the macro e)2.939 F .258 (xpressed on the right hand side \(that is, to)-.15 F(insert the te)108 -506.4 Q(xt)-.15 E/F4 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 -(into the line\).)2.5 E .056(In the second form,)108 523.2 R F1("k)2.556 -E(eyseq")-.1 E F0(:)A F2(function\255name).833 E F0(or)2.556 E F2(macr) -2.556 E(o)-.45 E F0(,)A F1 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055 -(fers from)-.25 F F1 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15 -(ve i)-.15 H 2.555(nt).15 G .055(hat strings)-2.555 F 1.284 -(denoting an entire k)108 535.2 R 1.584 -.15(ey s)-.1 H 1.284(equence m\ -ay be speci\214ed by placing the sequence within double quotes.).15 F -(Some)6.284 E .386(GNU Emacs style k)108 547.2 R .686 -.15(ey e)-.1 H -.385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .385 -(xample, b)-.15 F .385(ut the symbolic character names)-.2 F -(are not recognized.)108 559.2 Q("\\C\255u": uni)144 583.2 Q -.15(ve) --.25 G(rsal\255ar).15 E(gument)-.18 E -("\\C\255x\\C\255r": re\255read\255init\255\214le)144 595.2 Q -("\\e[11~": "Function K)144 607.2 Q .3 -.15(ey 1)-.25 H(").15 E .314 -(In this e)108 624 R(xample,)-.15 E F2(C\255u)2.654 E F0 .314(is ag) -3.064 F .315(ain bound to the function)-.05 F F1(uni)2.815 E -.1(ve)-.1 -G(rsal\255ar).1 E(gument)-.1 E F0(.)A F2 .315(C\255x C\255r)5.155 F F0 -.315(is bound to the func-)3.545 F(tion)108 636 Q F1 -.18(re)2.5 G<ad72> -.18 E(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F2(ESC [ 1 1 ~) -3.01 E F0(is bound to insert the te)3.94 E(xt)-.15 E F4(Function Key 1) -2.5 E F0(.)A(The full set of GNU Emacs style escape sequences is)108 -652.8 Q F1<5c43ad>144 664.8 Q F0(control pre\214x)180 664.8 Q F1<5c4dad> -144 676.8 Q F0(meta pre\214x)180 676.8 Q F1(\\e)144 688.8 Q F0 -(an escape character)180 688.8 Q F1(\\\\)144 700.8 Q F0(backslash)180 -700.8 Q F1(\\")144 712.8 Q F0(literal ")180 712.8 Q(GNU Bash 5.2)72 768 -Q(2022 September 19)135.955 E(42)185.115 E 0 Cg EP -%%Page: 43 43 +609.6 Q(xt \231> output\232 into the line\).)-.15 E .055 +(In the second form,)108 626.4 R F2("k)2.555 E(eyseq")-.1 E F1(:)A F0 +(function\255name).833 E F1(or)2.555 E F0(macr)2.555 E(o)-.45 E F1(,)A +F2 -.1(ke)2.555 G(yseq).1 E F1(dif)2.556 E .056(fers from)-.25 F F2 -.1 +(ke)2.556 G(yname).1 E F1(abo)2.556 E .356 -.15(ve i)-.15 H 2.556(nt).15 +G .056(hat strings)-2.556 F 1.284(denoting an entire k)108 638.4 R 1.584 +-.15(ey s)-.1 H 1.284(equence may be speci\214ed by placing the sequenc\ +e within double quotes.).15 F(Some)6.284 E .385(GNU Emacs style k)108 +650.4 R .685 -.15(ey e)-.1 H .385(scapes can be used, as in the follo) +.15 F .385(wing e)-.25 F .386(xample, b)-.15 F .386 +(ut the symbolic character names)-.2 F(are not recognized.)108 662.4 Q +F4("\\C\255u": universal\255argument)144 679.2 Q +("\\C\255x\\C\255r": re\255read\255init\255file)144 691.2 Q +("\\e[11\001": "Function Key 1")144 703.2 Q F1 1.81(In this e)108 720 R +(xample,)-.15 E F0(C\255u)4.15 E F1 1.81(is ag)4.56 F 1.809 +(ain bound to the function)-.05 F F2(uni)4.309 E -.1(ve)-.1 G +(rsal\255ar).1 E(gument)-.1 E F1(.)A F0 1.809(C\255x C\255r)6.649 F F1 +1.809(is bound to the)5.039 F(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 +E(43)193.45 E 0 Cg EP +%%Page: 44 44 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF<5c08>144 84 Q F0(literal \010)180 84 Q(In addition to the GNU Emacs \ -style escape sequences, a second set of backslash escapes is a)108 100.8 -Q -.25(va)-.2 G(ilable:).25 E F1(\\a)144 112.8 Q F0(alert \(bell\))180 -112.8 Q F1(\\b)144 124.8 Q F0(backspace)180 124.8 Q F1(\\d)144 136.8 Q -F0(delete)180 136.8 Q F1(\\f)144 148.8 Q F0(form feed)180 148.8 Q F1 -(\\n)144 160.8 Q F0(ne)180 160.8 Q(wline)-.25 E F1(\\r)144 172.8 Q F0 -(carriage return)180 172.8 Q F1(\\t)144 184.8 Q F0(horizontal tab)180 -184.8 Q F1(\\v)144 196.8 Q F0 -.15(ve)180 196.8 S(rtical tab).15 E F1 -(\\)144 208.8 Q/F2 10/Times-Italic@0 SF(nnn)A F0 -(the eight-bit character whose v)180 208.8 Q(alue is the octal v)-.25 E -(alue)-.25 E F2(nnn)2.5 E F0(\(one to three digits\))2.5 E F1(\\x)144 -220.8 Q F2(HH)A F0(the eight-bit character whose v)180 220.8 Q -(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 1.142 -(When entering the te)108 237.6 R 1.141(xt of a macro, single or double\ - quotes must be used to indicate a macro de\214nition.)-.15 F .089 -(Unquoted te)108 249.6 R .089(xt is assumed to be a function name.)-.15 -F .09(In the macro body)5.089 F 2.59(,t)-.65 G .09 -(he backslash escapes described abo)-2.59 F -.15(ve)-.15 G(are e)108 -261.6 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G -(ther character in the macro te)-2.5 E(xt, including " and \010.)-.15 E -F1(Bash)108 278.4 Q F0(allo)2.93 E .43(ws the current readline k)-.25 F -.73 -.15(ey b)-.1 H .429(indings to be displayed or modi\214ed with the) -.15 F F1(bind)2.929 E F0 -.2(bu)2.929 G .429(iltin command.).2 F .045 -(The editing mode may be switched during interacti)108 290.4 R .345 -.15 -(ve u)-.25 H .046(se by using the).15 F F1<ad6f>2.546 E F0 .046 -(option to the)2.546 F F1(set)2.546 E F0 -.2(bu)2.546 G .046 -(iltin command).2 F(\(see)108 302.4 Q/F3 9/Times-Bold@0 SF(SHELL B)2.5 E -(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1 -(Readline V)87 319.2 Q(ariables)-.92 E F0 .044(Readline has v)108 331.2 -R .043(ariables that can be used to further customize its beha)-.25 F +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(function)108 84 Q/F2 10/Times-Bold@0 SF -.18(re)2.5 +G<ad72>.18 E(ead\255init\255\214le)-.18 E F1 2.5(,a)C(nd)-2.5 E F0 +(ESC [ 1 1 \001)3.01 E F1(is bound to insert the te)2.61 E +(xt \231Function K)-.15 E .3 -.15(ey 1)-.25 H<9a2e>.15 E +(The full set of GNU Emacs style escape sequences is)108 100.8 Q F2 +<5c43ad>144 112.8 Q F1(control pre\214x)180 112.8 Q F2<5c4dad>144 124.8 +Q F1(meta pre\214x)180 124.8 Q F2(\\e)144 136.8 Q F1 +(an escape character)180 136.8 Q F2(\\\\)144 148.8 Q F1(backslash)180 +148.8 Q F2(\\")144 160.8 Q F1(literal ")180 160.8 Q F2<5c08>144 172.8 Q +F1(literal \010)180 172.8 Q(In addition to the GNU Emacs style escape s\ +equences, a second set of backslash escapes is a)108 189.6 Q -.25(va)-.2 +G(ilable:).25 E F2(\\a)144 201.6 Q F1(alert \(bell\))180 201.6 Q F2(\\b) +144 213.6 Q F1(backspace)180 213.6 Q F2(\\d)144 225.6 Q F1(delete)180 +225.6 Q F2(\\f)144 237.6 Q F1(form feed)180 237.6 Q F2(\\n)144 249.6 Q +F1(ne)180 249.6 Q(wline)-.25 E F2(\\r)144 261.6 Q F1(carriage return)180 +261.6 Q F2(\\t)144 273.6 Q F1(horizontal tab)180 273.6 Q F2(\\v)144 +285.6 Q F1 -.15(ve)180 285.6 S(rtical tab).15 E F2(\\)144 297.6 Q F0 +(nnn)A F1(the eight-bit character whose v)180 297.6 Q +(alue is the octal v)-.25 E(alue)-.25 E F0(nnn)2.5 E F1 +(\(one to three digits\))2.5 E F2(\\x)144 309.6 Q F0(HH)A F1 +(the eight-bit character whose v)180 309.6 Q(alue is the he)-.25 E +(xadecimal v)-.15 E(alue)-.25 E F0(HH)2.5 E F1(\(one or tw)2.5 E 2.5(oh) +-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E 1.141(When entering the te)108 +326.4 R 1.141(xt of a macro, single or double quotes must be used to in\ +dicate a macro de\214nition.)-.15 F .09(Unquoted te)108 338.4 R .09 +(xt is assumed to be a function name.)-.15 F .089(In the macro body) +5.089 F 2.589(,t)-.65 G .089(he backslash escapes described abo)-2.589 F +-.15(ve)-.15 G(are e)108 350.4 Q 2.5(xpanded. Backslash)-.15 F +(will quote an)2.5 E 2.5(yo)-.15 G(ther character in the macro te)-2.5 E +(xt, including " and \010.)-.15 E F2(Bash)108 367.2 Q F1(allo)2.929 E +.429(ws the current readline k)-.25 F .729 -.15(ey b)-.1 H .429 +(indings to be displayed or modi\214ed with the).15 F F2(bind)2.93 E F1 +-.2(bu)2.93 G .43(iltin command.).2 F .046 +(The editing mode may be switched during interacti)108 379.2 R .346 -.15 +(ve u)-.25 H .046(se by using the).15 F F2<ad6f>2.545 E F1 .045 +(option to the)2.545 F F2(set)2.545 E F1 -.2(bu)2.545 G .045 +(iltin command).2 F(\(see)108 391.2 Q/F3 9/Times-Bold@0 SF(SHELL B)2.5 E +(UIL)-.09 E(TIN COMMANDS)-.828 E F1(belo)2.25 E(w\).)-.25 E F2 +(Readline V)87 408 Q(ariables)-.92 E F1 .043(Readline has v)108 420 R +.043(ariables that can be used to further customize its beha)-.25 F (vior)-.2 E 5.043(.A)-.55 G -.25(va)-2.5 G .043 -(riable may be set in the).25 F F2(inpu-)2.553 E(tr)108 343.2 Q(c)-.37 E -F0(\214le with a statement of the form)2.81 E F1(set)144 360 Q F2 -(variable\255name value)2.5 E F0(or using the)108 372 Q F1(bind)2.5 E F0 --.2(bu)2.5 G(iltin command \(see).2 E F3(SHELL B)2.5 E(UIL)-.09 E -(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E .79 -(Except where noted, readline v)108 388.8 R .79(ariables can tak)-.25 F -3.29(et)-.1 G .79(he v)-3.29 F(alues)-.25 E F1(On)3.29 E F0(or)3.29 E F1 -(Off)3.29 E F0 .79(\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).) -.05 F(Unrecog-)5.79 E .449(nized v)108 400.8 R .448 -(ariable names are ignored.)-.25 F .448(When a v)5.448 F .448(ariable v) --.25 F .448(alue is read, empty or null v)-.25 F .448 -(alues, "on" \(case-insensi-)-.25 F(ti)108 412.8 Q -.15(ve)-.25 G .467 -(\), and "1" are equi).15 F -.25(va)-.25 G .468(lent to).25 F F1(On) -2.968 E F0 5.468(.A)C .468(ll other v)-5.468 F .468(alues are equi)-.25 -F -.25(va)-.25 G .468(lent to).25 F F1(Off)2.968 E F0 5.468(.T)C .468 -(he v)-5.468 F .468(ariables and their def)-.25 F(ault)-.1 E -.25(va)108 -424.8 S(lues are:).25 E F1(acti)108 441.6 Q -.1(ve)-.1 G<ad72>.1 E -(egion\255start\255color)-.18 E F0 2.73(As)144 453.6 S .23(tring v)-2.73 -F .23(ariable that controls the te)-.25 F .229 -(xt color and background when displaying the te)-.15 F .229 -(xt in the acti)-.15 F -.15(ve)-.25 G(re)144 465.6 Q 1.526 -(gion \(see the description of)-.15 F F1(enable\255acti)4.026 E -.1(ve) --.1 G<ad72>.1 E(egion)-.18 E F0(belo)4.026 E 4.026(w\). This)-.25 F -1.526(string must not tak)4.026 F 4.027(eu)-.1 G 4.027(pa)-4.027 G -.15 -(ny)-4.027 G(ph)144 477.6 Q .284 -(ysical character positions on the display)-.05 F 2.784(,s)-.65 G 2.784 -(oi)-2.784 G 2.784(ts)-2.784 G .283 +(riable may be set in the).25 F F0(inpu-)2.554 E(tr)108 432 Q(c)-.37 E +F1(\214le with a statement of the form)2.81 E F2(set)144 448.8 Q F0 +(variable\255name value)2.5 E F1(or using the)108 460.8 Q F2(bind)2.5 E +F1 -.2(bu)2.5 G(iltin command \(see).2 E F3(SHELL B)2.5 E(UIL)-.09 E +(TIN COMMANDS)-.828 E F1(belo)2.25 E(w\).)-.25 E .79 +(Except where noted, readline v)108 477.6 R .79(ariables can tak)-.25 F +3.29(et)-.1 G .79(he v)-3.29 F(alues)-.25 E F2(On)3.29 E F1(or)3.29 E F2 +(Off)3.29 E F1 .79(\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).) +.05 F(Unrecog-)5.79 E .508(nized v)108 489.6 R .508 +(ariable names are ignored.)-.25 F .508(When readline reads a v)5.508 F +.508(ariable v)-.25 F .508(alue, empty or null v)-.25 F .509 +(alues, \231on\232 \(case-)-.25 F(insensiti)108 501.6 Q -.15(ve)-.25 G +.594(\), and \2311\232 are equi).15 F -.25(va)-.25 G .594(lent to).25 F +F2(On)3.094 E F1 5.594(.A)C .594(ll other v)-5.594 F .593 +(alues are equi)-.25 F -.25(va)-.25 G .593(lent to).25 F F2(Off)3.093 E +F1 5.593(.T)C .593(he v)-5.593 F .593(ariables and their)-.25 F(def)108 +513.6 Q(ault v)-.1 E(alues are:)-.25 E F2(acti)108 530.4 Q -.1(ve)-.1 G +<ad72>.1 E(egion\255start\255color)-.18 E F1 2.729(As)144 542.4 S .229 +(tring v)-2.729 F .229(ariable that controls the te)-.25 F .229 +(xt color and background when displaying the te)-.15 F .23 +(xt in the acti)-.15 F -.15(ve)-.25 G(re)144 554.4 Q 1.527 +(gion \(see the description of)-.15 F F2(enable\255acti)4.026 E -.1(ve) +-.1 G<ad72>.1 E(egion)-.18 E F1(belo)4.026 E 4.026(w\). This)-.25 F +1.526(string must not tak)4.026 F 4.026(eu)-.1 G 4.026(pa)-4.026 G -.15 +(ny)-4.026 G(ph)144 566.4 Q .283 +(ysical character positions on the display)-.05 F 2.783(,s)-.65 G 2.784 +(oi)-2.783 G 2.784(ts)-2.784 G .284 (hould consist only of terminal escape sequences.)-2.784 F .45 -(It is output to the terminal before displaying the te)144 489.6 R .45 +(It is output to the terminal before displaying the te)144 578.4 R .45 (xt in the acti)-.15 F .75 -.15(ve r)-.25 H -.15(eg).15 G 2.95 -(ion. This).15 F -.25(va)2.95 G .45(riable is reset to).25 F .379 -(the def)144 501.6 R .379(ault v)-.1 F .379(alue whene)-.25 F -.15(ve) --.25 G 2.879(rt).15 G .379(he terminal type changes.)-2.879 F .379 -(The def)5.379 F .379(ault v)-.1 F .378 -(alue is the string that puts the)-.25 F .654 -(terminal in standout mode, as obtained from the terminal')144 513.6 R -3.155(st)-.55 G .655(erminfo description.)-3.155 F 3.155(As)5.655 G .655 -(ample v)-3.155 F(alue)-.25 E(might be)144 525.6 Q/F4 10/Courier@0 SF -("\\e[01;33m")2.5 E F0(.)A F1(acti)108 537.6 Q -.1(ve)-.1 G<ad72>.1 E -(egion\255end\255color)-.18 E F0 3.909(As)144 549.6 S 1.409(tring v) --3.909 F 1.408(ariable that "undoes" the ef)-.25 F 1.408(fects of)-.25 F -F1(acti)3.908 E -.1(ve)-.1 G<ad72>.1 E(egion\255start\255color)-.18 E F0 -1.408(and restores "normal")3.908 F .216 -(terminal display appearance after displaying te)144 561.6 R .216 +(ion. This).15 F -.25(va)2.95 G .45(riable is reset to).25 F .378 +(the def)144 590.4 R .378(ault v)-.1 F .378(alue whene)-.25 F -.15(ve) +-.25 G 2.878(rt).15 G .379(he terminal type changes.)-2.878 F .379 +(The def)5.379 F .379(ault v)-.1 F .379 +(alue is the string that puts the)-.25 F .655 +(terminal in standout mode, as obtained from the terminal')144 602.4 R +3.154(st)-.55 G .654(erminfo description.)-3.154 F 3.154(As)5.654 G .654 +(ample v)-3.154 F(alue)-.25 E(might be \231\\e[01;33m\232.)144 614.4 Q +F2(acti)108 626.4 Q -.1(ve)-.1 G<ad72>.1 E(egion\255end\255color)-.18 E +F1 3.777(As)144 638.4 S 1.277(tring v)-3.777 F 1.277 +(ariable that \231undoes\232 the ef)-.25 F 1.277(fects of)-.25 F F2 +(acti)3.777 E -.1(ve)-.1 G<ad72>.1 E(egion\255start\255color)-.18 E F1 +1.278(and restores \231normal\232)3.778 F .216 +(terminal display appearance after displaying te)144 650.4 R .216 (xt in the acti)-.15 F .516 -.15(ve r)-.25 H -.15(eg).15 G 2.716 (ion. This).15 F .216(string must not tak)2.716 F 2.716(eu)-.1 G(p) --2.716 E(an)144 573.6 Q 3.738(yp)-.15 G -.05(hy)-3.738 G 1.238 +-2.716 E(an)144 662.4 Q 3.737(yp)-.15 G -.05(hy)-3.737 G 1.237 (sical character positions on the display).05 F 3.737(,s)-.65 G 3.737 -(oi)-3.737 G 3.737(ts)-3.737 G 1.237 -(hould consist only of terminal escape se-)-3.737 F 2.927(quences. It) -144 585.6 R .427(is output to the terminal after displaying the te)2.927 -F .428(xt in the acti)-.15 F .728 -.15(ve r)-.25 H -.15(eg).15 G 2.928 -(ion. This).15 F -.25(va)2.928 G .428(riable is).25 F .519 -(reset to the def)144 597.6 R .518(ault v)-.1 F .518(alue whene)-.25 F +(oi)-3.737 G 3.737(ts)-3.737 G 1.238 +(hould consist only of terminal escape se-)-3.737 F 2.928(quences. It) +144 674.4 R .428(is output to the terminal after displaying the te)2.928 +F .427(xt in the acti)-.15 F .727 -.15(ve r)-.25 H -.15(eg).15 G 2.927 +(ion. This).15 F -.25(va)2.927 G .427(riable is).25 F .518 +(reset to the def)144 686.4 R .518(ault v)-.1 F .518(alue whene)-.25 F -.15(ve)-.25 G 3.018(rt).15 G .518(he terminal type changes.)-3.018 F .518(The def)5.518 F .518(ault v)-.1 F .518(alue is the string that)-.25 -F .251(restores the terminal from standout mode, as obtained from the t\ -erminal')144 609.6 R 2.752(st)-.55 G .252(erminfo description.)-2.752 F -(A)5.252 E(sample v)144 621.6 Q(alue might be)-.25 E F4("\\e[0m")2.5 E -F0(.)A F1(bell\255style \(audible\))108 633.6 Q F0 .011 -(Controls what happens when readline w)144 645.6 R .011 -(ants to ring the terminal bell.)-.1 F .01(If set to)5.01 F F1(none)2.51 -E F0 2.51(,r)C .01(eadline ne)-2.51 F -.15(ve)-.25 G(r).15 E .94 -(rings the bell.)144 657.6 R .94(If set to)5.94 F F1(visible)3.44 E F0 -3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25(va) --.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F1(audible)3.44 E F0(,)A -(readline attempts to ring the terminal')144 669.6 Q 2.5(sb)-.55 G(ell.) --2.5 E F1(bind\255tty\255special\255chars \(On\))108 681.6 Q F0 .056 -(If set to)144 693.6 R F1(On)2.556 E F0 2.556(,r)C .056(eadline attempt\ -s to bind the control characters treated specially by the k)-2.556 F -(ernel')-.1 E 2.555(st)-.55 G(ermi-)-2.555 E(nal dri)144 705.6 Q -.15 -(ve)-.25 G 2.5(rt).15 G 2.5(ot)-2.5 G(heir readline equi)-2.5 E -.25(va) --.25 G(lents.).25 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E -(43)185.115 E 0 Cg EP -%%Page: 44 44 +F .252(restores the terminal from standout mode, as obtained from the t\ +erminal')144 698.4 R 2.751(st)-.55 G .251(erminfo description.)-2.751 F +(A)5.251 E(sample v)144 710.4 Q(alue might be \231\\e[0m\232.)-.25 E +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(44)193.45 E 0 Cg EP +%%Page: 45 45 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(blink\255matching\255par)108 84 Q(en \(Off\))-.18 E F0 .21(If set to) -144 96 R F1(On)2.71 E F0 2.71(,r)C .21(eadline attempts to brie\215y mo) --2.71 F .51 -.15(ve t)-.15 H .21 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(bell\255style \(audible\))108 +84 Q F1 .01(Controls what happens when readline w)144 96 R .011 +(ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F2(none) +2.511 E F1 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E +.94(rings the bell.)144 108 R .94(If set to)5.94 F F2(visible)3.44 E F1 +3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25(va) +-.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F2(audible)3.44 E F1(,)A +(readline attempts to ring the terminal')144 120 Q 2.5(sb)-.55 G(ell.) +-2.5 E F2(bind\255tty\255special\255chars \(On\))108 132 Q F1 .178 +(If set to)144 144 R F2(On)2.678 E F1 .178(\(the def)2.678 F .178 +(ault\), readline attempts to bind the control)-.1 F .178 +(characters that are treated specially)5.178 F 1.196(by the k)144 156 R +(ernel')-.1 E 3.696(st)-.55 G 1.196(erminal dri)-3.696 F -.15(ve)-.25 G +3.696(rt).15 G 3.695(ot)-3.696 G 1.195(heir readline equi)-3.695 F -.25 +(va)-.25 G 3.695(lents. These).25 F -.15(ove)3.695 G 1.195 +(rride the def).15 F 1.195(ault readline)-.1 F .162 +(bindings described here.)144 168 R -.8(Ty)5.162 G .162 +(pe \231stty \255a\232 at a).8 F F2(bash)2.662 E F1 .163 +(prompt to see your current terminal settings, in-)2.663 F +(cluding the special control characters \(usually)144 180 Q F2(cchars) +2.5 E F1(\).)A F2(blink\255matching\255par)108 192 Q(en \(Off\))-.18 E +F1 .21(If set to)144 204 R F2(On)2.71 E F1 2.71(,r)C .21 +(eadline attempts to brie\215y mo)-2.71 F .51 -.15(ve t)-.15 H .21 (he cursor to an opening parenthesis when a closing).15 F -(parenthesis is inserted.)144 108 Q F1(color)108 120 Q -(ed\255completion\255pr)-.18 E(e\214x \(Off\))-.18 E F0 .515(If set to) -144 132 R F1(On)3.015 E F0 3.015(,w)C .515(hen listing completions, rea\ -dline displays the common pre\214x of the set of possible)-3.015 F 2.935 -(completions using a dif)144 144 R 2.935(ferent color)-.25 F 7.936(.T) --.55 G 2.936(he color de\214nitions are tak)-7.936 F 2.936 -(en from the v)-.1 F 2.936(alue of the)-.25 F F1(LS_COLORS)144 156 Q F0 -(en)3.077 E .577(vironment v)-.4 F 3.077(ariable. If)-.25 F .577 -(there is a color de\214nition in)3.077 F F1($LS_COLORS)3.077 E F0 .577 -(for the cus-)3.077 F .134(tom suf)144 168 R .135(\214x "readline-color\ -ed-completion-pre\214x", readline uses this color for the common pre\ -\214x in-)-.25 F(stead of its def)144 180 Q(ault.)-.1 E F1(color)108 192 -Q(ed\255stats \(Off\))-.18 E F0 1.58(If set to)144 204 R F1(On)4.08 E F0 -4.08(,r)C 1.579(eadline displays possible completions using dif)-4.08 F -1.579(ferent colors to indicate their \214le)-.25 F 2.5(type. The)144 -216 R(color de\214nitions are tak)2.5 E(en from the v)-.1 E(alue of the) --.25 E F1(LS_COLORS)2.5 E F0(en)2.5 E(vironment v)-.4 E(ariable.)-.25 E -F1(comment\255begin \(`)108 228 Q(`#')-.63 E('\))-.63 E F0 .884 -(The string that is inserted when the readline)144 240 R F1 -(insert\255comment)3.385 E F0 .885(command is e)3.385 F -.15(xe)-.15 G -3.385(cuted. This).15 F(com-)3.385 E(mand is bound to)144 252 Q F1 -(M\255#)2.5 E F0(in emacs mode and to)2.5 E F1(#)2.5 E F0 -(in vi command mode.)2.5 E F1(completion\255display\255width \(\2551\)) -108 264 Q F0 1.453(The number of screen columns used to display possibl\ -e matches when performing completion.)144 276 R .193(The v)144 288 R +(parenthesis is inserted.)144 216 Q F2(color)108 228 Q +(ed\255completion\255pr)-.18 E(e\214x \(Off\))-.18 E F1 .515(If set to) +144 240 R F2(On)3.015 E F1 3.015(,w)C .515(hen listing completions, rea\ +dline displays the common pre\214x of the set of possible)-3.015 F 2.936 +(completions using a dif)144 252 R 2.936(ferent color)-.25 F 7.936(.T) +-.55 G 2.936(he color de\214nitions are tak)-7.936 F 2.935 +(en from the v)-.1 F 2.935(alue of the)-.25 F F2(LS_COLORS)144 264 Q F1 +(en)3.076 E .577(vironment v)-.4 F 3.077(ariable. If)-.25 F .577 +(there is a color de\214nition in)3.077 F F2($LS_COLORS)3.077 E F1 .577 +(for the cus-)3.077 F .07(tom suf)144 276 R .069(\214x \231readline-col\ +ored-completion-pre\214x\232, readline uses this color for the common p\ +re\214x in-)-.25 F(stead of its def)144 288 Q(ault.)-.1 E F2(color)108 +300 Q(ed\255stats \(Off\))-.18 E F1 1.579(If set to)144 312 R F2(On) +4.079 E F1 4.079(,r)C 1.579 +(eadline displays possible completions using dif)-4.079 F 1.58 +(ferent colors to indicate their \214le)-.25 F 2.5(type. The)144 324 R +(color de\214nitions are tak)2.5 E(en from the v)-.1 E(alue of the)-.25 +E F2(LS_COLORS)2.5 E F1(en)2.5 E(vironment v)-.4 E(ariable.)-.25 E F2 +(comment\255begin \()108 336 Q F1<99>A F2(#)A F1<9a>A F2(\))A F1 .885 +(The string that is inserted when the readline)144 348 R F2 +(insert\255comment)3.385 E F1 .884(command is e)3.384 F -.15(xe)-.15 G +3.384(cuted. This).15 F(com-)3.384 E(mand is bound to)144 360 Q F2 +(M\255#)2.5 E F1(in emacs mode and to)2.5 E F2(#)2.5 E F1 +(in vi command mode.)2.5 E F2(completion\255display\255width \(\2551\)) +108 372 Q F1 1.453(The number of screen columns used to display possibl\ +e matches when performing completion.)144 384 R .194(The v)144 396 R .193(alue is ignored if it is less than 0 or greater than the terminal \ -screen width.)-.25 F 2.694(Av)5.194 G .194(alue of 0 will)-2.944 F -(cause matches to be displayed one per line.)144 300 Q(The def)5 E -(ault v)-.1 E(alue is \2551.)-.25 E F1(completion\255ignor)108 312 Q -(e\255case \(Off\))-.18 E F0(If set to)144 324 Q F1(On)2.5 E F0 2.5(,r)C +screen width.)-.25 F 2.693(Av)5.193 G .193(alue of 0 will)-2.943 F +(cause matches to be displayed one per line.)144 408 Q(The def)5 E +(ault v)-.1 E(alue is \2551.)-.25 E F2(completion\255ignor)108 420 Q +(e\255case \(Off\))-.18 E F1(If set to)144 432 Q F2(On)2.5 E F1 2.5(,r)C (eadline performs \214lename matching and completion in a case\255insen\ -siti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1 -(completion\255map\255case \(Off\))108 336 Q F0 .094(If set to)144 348 R -F1(On)2.593 E F0 2.593(,a)C(nd)-2.593 E F1(completion\255ignor)2.593 E -(e\255case)-.18 E F0 .093(is enabled, readline treats h)2.593 F .093 -(yphens \()-.05 F/F2 10/Times-Italic@0 SF<ad>A F0 2.593(\)a)C .093 -(nd underscores)-2.593 F(\()144 360 Q F2(_)A F0 2.5(\)a)C 2.5(se)-2.5 G -(qui)-2.5 E -.25(va)-.25 G(lent when performing case\255insensiti).25 E -.3 -.15(ve \214)-.25 H(lename matching and completion.).15 E F1 -(completion\255pr)108 372 Q(e\214x\255display\255length \(0\))-.18 E F0 -.829(The length in characters of the common pre\214x of a list of possi\ -ble completions that is displayed)144 384 R 1.275 -(without modi\214cation.)144 396 R 1.275(When set to a v)6.275 F 1.274 -(alue greater than zero, common pre\214x)-.25 F 1.274 -(es longer than this)-.15 F -.25(va)144 408 S(lue are replaced with an \ -ellipsis when displaying possible completions.).25 E F1 -(completion\255query\255items \(100\))108 420 Q F0 .529 -(This determines when the user is queried about vie)144 432 R .53 -(wing the number of possible completions gen-)-.25 F .561(erated by the) -144 444 R F1(possible\255completions)3.061 E F0 3.061(command. It)3.061 -F .561(may be set to an)3.061 F 3.06(yi)-.15 G(nte)-3.06 E .56(ger v) --.15 F .56(alue greater than or)-.25 F .782(equal to zero.)144 456 R +siti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F2 +(completion\255map\255case \(Off\))108 444 Q F1 .093(If set to)144 456 R +F2(On)2.593 E F1 2.593(,a)C(nd)-2.593 E F2(completion\255ignor)2.593 E +(e\255case)-.18 E F1 .093(is enabled, readline treats h)2.593 F .093 +(yphens \()-.05 F F0<ad>A F1 2.593(\)a)C .094(nd underscores)-2.593 F +(\()144 468 Q F0(_)A F1 2.5(\)a)C 2.5(se)-2.5 G(qui)-2.5 E -.25(va)-.25 +G(lent when performing case\255insensiti).25 E .3 -.15(ve \214)-.25 H +(lename matching and completion.).15 E F2(completion\255pr)108 480 Q +(e\214x\255display\255length \(0\))-.18 E F1 .829(The length in charact\ +ers of the common pre\214x of a list of possible completions that is di\ +splayed)144 492 R 1.274(without modi\214cation.)144 504 R 1.274 +(When set to a v)6.274 F 1.274(alue greater than zero, common pre\214x) +-.25 F 1.275(es longer than this)-.15 F -.25(va)144 516 S(lue are repla\ +ced with an ellipsis when displaying possible completions.).25 E F2 +(completion\255query\255items \(100\))108 528 Q F1 .53 +(This determines when the user is queried about vie)144 540 R .529 +(wing the number of possible completions gen-)-.25 F .56(erated by the) +144 552 R F2(possible\255completions)3.06 E F1 3.06(command. It)3.06 F +.561(may be set to an)3.061 F 3.061(yi)-.15 G(nte)-3.061 E .561(ger v) +-.15 F .561(alue greater than or)-.25 F .783(equal to zero.)144 564 R .783(If the number of possible completions is greater than or equal to \ -the v)5.782 F .783(alue of this)-.25 F -.25(va)144 468 S .368 +the v)5.783 F .782(alue of this)-.25 F -.25(va)144 576 S .367 (riable, readline will ask whether or not the user wishes to vie).25 F -2.867(wt)-.25 G .367(hem; otherwise the)-2.867 F 2.867(ya)-.15 G .367 -(re simply)-2.867 F .672(listed on the terminal.)144 480 R 3.172(Az) -5.672 G .673(ero v)-3.172 F .673(alue means readline should ne)-.25 F --.15(ve)-.25 G 3.173(ra).15 G .673(sk; ne)-3.173 F -.05(ga)-.15 G(ti).05 -E .973 -.15(ve v)-.25 H .673(alues are treated)-.1 F(as zero.)144 492 Q -F1(con)108 504 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .613(If set to) -144 516 R F1(On)3.113 E F0 3.113(,r)C .613(eadline will con)-3.113 F +2.868(wt)-.25 G .368(hem; otherwise the)-2.868 F 2.868(ya)-.15 G .368 +(re simply)-2.868 F .673(listed on the terminal.)144 588 R 3.173(Az) +5.673 G .673(ero v)-3.173 F .673(alue means readline should ne)-.25 F +-.15(ve)-.25 G 3.172(ra).15 G .672(sk; ne)-3.172 F -.05(ga)-.15 G(ti).05 +E .972 -.15(ve v)-.25 H .672(alues are treated)-.1 F(as zero.)144 600 Q +F2(con)108 612 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F1 .612(If set to) +144 624 R F2(On)3.112 E F1 3.112(,r)C .613(eadline will con)-3.112 F -.15(ve)-.4 G .613(rt characters with the eighth bit set to an ASCII k) -.15 F .912 -.15(ey s)-.1 H .612(equence by).15 F .541 +.15 F .913 -.15(ey s)-.1 H .613(equence by).15 F .541 (stripping the eighth bit and pre\214xing an escape character \(in ef) -144 528 R .541(fect, using escape as the)-.25 F F2 .542(meta pr)3.042 F -(e-)-.37 E<8c78>144 540 Q F0 3.751(\). The)B(def)3.751 E 1.251(ault is) --.1 F F2(On)3.751 E F0 3.751(,b)C 1.251(ut readline will set it to) --3.951 F F2(Of)3.75 E(f)-.18 E F0 1.25 -(if the locale contains eight-bit characters.)3.75 F 1.141(This v)144 -552 R 1.141(ariable is dependent on the)-.25 F F1(LC_CTYPE)3.641 E F0 -1.141(locale cate)3.641 F(gory)-.15 E 3.641(,a)-.65 G 1.142 -(nd may change if the locale is)-3.641 F(changed.)144 564 Q F1 -(disable\255completion \(Off\))108 576 Q F0 .038(If set to)144 588 R F1 -(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w)-2.538 F .038 +144 636 R .541(fect, using escape as the)-.25 F F0 .541(meta pr)3.041 F +(e-)-.37 E<8c78>144 648 Q F1 3.75(\). The)B(def)3.75 E 1.25(ault is)-.1 +F F0(On)3.75 E F1 3.75(,b)C 1.251(ut readline will set it to)-3.95 F F0 +(Of)3.751 E(f)-.18 E F1 1.251 +(if the locale contains eight-bit characters.)3.751 F 1.142(This v)144 +660 R 1.142(ariable is dependent on the)-.25 F F2(LC_CTYPE)3.641 E F1 +1.141(locale cate)3.641 F(gory)-.15 E 3.641(,a)-.65 G 1.141 +(nd may change if the locale is)-3.641 F(changed.)144 672 Q F2 +(disable\255completion \(Off\))108 684 Q F1 .038(If set to)144 696 R F2 +(On)2.538 E F1 2.538(,r)C .038(eadline will inhibit w)-2.538 F .038 (ord completion.)-.1 F .038 (Completion characters will be inserted into the)5.038 F(line as if the) -144 600 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E F0 -(.)A F1(echo\255contr)108 612 Q(ol\255characters \(On\))-.18 E F0 1.21 -(When set to)144 624 R F1(On)3.71 E F0 3.71(,o)C 3.71(no)-3.71 G 1.211 -(perating systems that indicate the)-3.71 F 3.711(ys)-.15 G 1.211 -(upport it, readline echoes a character)-3.711 F -(corresponding to a signal generated from the k)144 636 Q -.15(ey)-.1 G -(board.).15 E F1(editing\255mode \(emacs\))108 648 Q F0 .142 -(Controls whether readline be)144 660 R .141(gins with a set of k)-.15 F -.441 -.15(ey b)-.1 H .141(indings similar to).15 F F2(Emacs)2.641 E F0 -(or)2.641 E F2(vi)2.641 E F0(.)A F1(editing\255mode)5.141 E F0 -(can be set to either)144 672 Q F1(emacs)2.5 E F0(or)2.5 E F1(vi)2.5 E -F0(.)A F1(emacs\255mode\255string \(@\))108 684 Q F0 .517(If the)144 696 -R F2(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F0 -.25(va)3.017 G -.518(riable is enabled, this string is displayed immediately before the) -.25 F .622 -(last line of the primary prompt when emacs editing mode is acti)144 708 -R -.15(ve)-.25 G 5.622(.T).15 G .622(he v)-5.622 F .621(alue is e)-.25 F -.621(xpanded lik)-.15 F 3.121(ea)-.1 G -.1(ke)144 720 S 3.339(yb)-.05 G -.839(inding, so the standard set of meta- and control pre\214x)-3.339 F -.84(es and backslash escape sequences is)-.15 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(44)185.115 E 0 Cg EP -%%Page: 45 45 +144 708 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F2(self-insert)2.5 E F1 +(.)A(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(45)193.45 E 0 Cg EP +%%Page: 46 46 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.2(av)144 84 S -2.798(ailable. Use)-.05 F .298(the \\1 and \\2 escapes to be)2.798 F -.298(gin and end sequences of non-printing characters, which)-.15 F +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(echo\255contr)108 84 Q +(ol\255characters \(On\))-.18 E F1 1.211(When set to)144 96 R F2(On) +3.711 E F1 3.711(,o)C 3.711(no)-3.711 G 1.211 +(perating systems that indicate the)-3.711 F 3.711(ys)-.15 G 1.21 +(upport it, readline echoes a character)-3.711 F +(corresponding to a signal generated from the k)144 108 Q -.15(ey)-.1 G +(board.).15 E F2(editing\255mode \(emacs\))108 120 Q F1 .141 +(Controls whether readline be)144 132 R .141(gins with a set of k)-.15 F +.441 -.15(ey b)-.1 H .141(indings similar to).15 F F0(Emacs)2.642 E F1 +(or)2.642 E F0(vi)2.642 E F1(.)A F2(editing\255mode)5.142 E F1 +(can be set to either)144 144 Q F2(emacs)2.5 E F1(or)2.5 E F2(vi)2.5 E +F1(.)A F2(emacs\255mode\255string \(@\))108 156 Q F1 .518(If the)144 168 +R F0(show\255mode\255in\255pr)3.018 E(ompt)-.45 E F1 -.25(va)3.018 G +.517(riable is enabled, this string is displayed immediately before the) +.25 F .622 +(last line of the primary prompt when emacs editing mode is acti)144 180 +R -.15(ve)-.25 G 5.622(.T).15 G .622(he v)-5.622 F .622(alue is e)-.25 F +.622(xpanded lik)-.15 F 3.122(ea)-.1 G -.1(ke)144 192 S 3.34(yb)-.05 G +.839(inding, so the standard set of meta- and control pre\214x)-3.34 F +.839(es and backslash escape sequences is)-.15 F -.2(av)144 204 S 2.798 +(ailable. Use)-.05 F .298(the \\1 and \\2 escapes to be)2.798 F .298 +(gin and end sequences of non-printing characters, which)-.15 F (can be used to embed a terminal control sequence into the mode string.) -144 96 Q/F1 10/Times-Bold@0 SF(enable\255acti)108 108 Q -.1(ve)-.1 G -<ad72>.1 E(egion \(On\))-.18 E F0(The)144 120 Q/F2 10/Times-Italic@0 SF -(point)3.245 E F0 .746(is the current cursor position, and)3.245 F F2 -(mark)3.246 E F0 .746(refers to a sa)3.246 F -.15(ve)-.2 G 3.246(dc).15 -G .746(ursor position.)-3.246 F .746(The te)5.746 F .746(xt be-)-.15 F -.344(tween the point and mark is referred to as the)144 132 R F2 -.37 -(re)2.844 G(gion)-.03 E F0 5.344(.W)C .344(hen this v)-5.344 F .344 -(ariable is set to)-.25 F F2(On)2.844 E F0 2.844(,r)C .344(eadline al-) --2.844 F(lo)144 144 Q .098(ws certain commands to designate the re)-.25 -F .098(gion as)-.15 F F2(active)2.598 E F0 5.098(.W)C .098(hen the re) +144 216 Q F2(enable\255acti)108 228 Q -.1(ve)-.1 G<ad72>.1 E +(egion \(On\))-.18 E F1(The)144 240 Q F0(point)3.246 E F1 .746 +(is the current cursor position, and)3.246 F F0(mark)3.246 E F1 .746 +(refers to a sa)3.246 F -.15(ve)-.2 G 3.246(dc).15 G .746 +(ursor position.)-3.246 F .745(The te)5.746 F .745(xt be-)-.15 F .344 +(tween the point and mark is referred to as the)144 252 R F0 -.37(re) +2.844 G(gion)-.03 E F1 5.344(.W)C .344(hen this v)-5.344 F .344 +(ariable is set to)-.25 F F0(On)2.845 E F1 2.845(,r)C .345(eadline al-) +-2.845 F(lo)144 264 Q .098(ws certain commands to designate the re)-.25 +F .098(gion as)-.15 F F0(active)2.598 E F1 5.098(.W)C .098(hen the re) -5.098 F .098(gion is acti)-.15 F -.15(ve)-.25 G 2.598(,r).15 G .098 -(eadline high-)-2.598 F .971(lights the te)144 156 R .971(xt in the re) --.15 F .971(gion using the v)-.15 F .971(alue of the)-.25 F F1(acti)3.47 -E -.1(ve)-.1 G<ad72>.1 E(egion\255start\255color)-.18 E F0 3.47(,w)C .97 -(hich def)-3.47 F .97(aults to)-.1 F .484 -(the string that enables the terminal')144 168 R 2.985(ss)-.55 G .485 +(eadline high-)-2.598 F .97(lights the te)144 276 R .97(xt in the re) +-.15 F .971(gion using the v)-.15 F .971(alue of the)-.25 F F2(acti) +3.471 E -.1(ve)-.1 G<ad72>.1 E(egion\255start\255color)-.18 E F1 3.471 +(,w)C .971(hich def)-3.471 F .971(aults to)-.1 F .485 +(the string that enables the terminal')144 288 R 2.985(ss)-.55 G .485 (tandout mode.)-2.985 F .485(The acti)5.485 F .785 -.15(ve r)-.25 H -.15 -(eg).15 G .485(ion sho).15 F .485(ws the te)-.25 F .485(xt inserted by) --.15 F(brack)144 180 Q(eted-paste and an)-.1 E 2.5(ym)-.15 G(atching te) +(eg).15 G .484(ion sho).15 F .484(ws the te)-.25 F .484(xt inserted by) +-.15 F(brack)144 300 Q(eted-paste and an)-.1 E 2.5(ym)-.15 G(atching te) -2.5 E(xt found by incremental and non-incremental history searches.) --.15 E F1(enable\255brack)108 192 Q(eted\255paste \(On\))-.1 E F0 .841 -(When set to)144 204 R F1(On)3.341 E F0 3.341(,r)C .841(eadline con\214\ -gures the terminal to insert each paste into the editing b)-3.341 F(uf) --.2 E .84(fer as a)-.25 F .799(single string of characters, instead of \ -treating each character as if it had been read from the k)144 216 R -.15 -(ey)-.1 G(-).15 E 3.159(board. This)144 228 R(pre)3.159 E -.15(ve)-.25 G -.659(nts readline from e).15 F -.15(xe)-.15 G .659(cuting an).15 F 3.158 -(ye)-.15 G .658(diting commands bound to k)-3.158 F .958 -.15(ey s)-.1 H -.658(equences ap-).15 F(pearing in the pasted te)144 240 Q(xt.)-.15 E F1 -(enable\255k)108 252 Q(eypad \(Off\))-.1 E F0 .892(When set to)144 264 R -F1(On)3.393 E F0 3.393(,r)C .893 +-.15 E F2(enable\255brack)108 312 Q(eted\255paste \(On\))-.1 E F1 .84 +(When set to)144 324 R F2(On)3.34 E F1 3.34(,r)C .841(eadline con\214gu\ +res the terminal to insert each paste into the editing b)-3.34 F(uf)-.2 +E .841(fer as a)-.25 F .799(single string of characters, instead of tre\ +ating each character as if it had been read from the k)144 336 R -.15 +(ey)-.1 G(-).15 E 3.158(board. This)144 348 R(pre)3.158 E -.15(ve)-.25 G +.658(nts readline from e).15 F -.15(xe)-.15 G .658(cuting an).15 F 3.158 +(ye)-.15 G .659(diting commands bound to k)-3.158 F .959 -.15(ey s)-.1 H +.659(equences ap-).15 F(pearing in the pasted te)144 360 Q(xt.)-.15 E F2 +(enable\255k)108 372 Q(eypad \(Off\))-.1 E F1 .893(When set to)144 384 R +F2(On)3.393 E F1 3.393(,r)C .893 (eadline will try to enable the application k)-3.393 F -.15(ey)-.1 G -.893(pad when it is called.).15 F .893(Some sys-)5.893 F -(tems need this to enable the arro)144 276 Q 2.5(wk)-.25 G -.15(ey)-2.6 -G(s.).15 E F1(enable\255meta\255k)108 288 Q(ey \(On\))-.1 E F0 .64 -(When set to)144 300 R F1(On)3.14 E F0 3.14(,r)C .64 +.893(pad when it is called.).15 F .892(Some sys-)5.893 F +(tems need this to enable the arro)144 396 Q 2.5(wk)-.25 G -.15(ey)-2.6 +G(s.).15 E F2(enable\255meta\255k)108 408 Q(ey \(On\))-.1 E F1 .64 +(When set to)144 420 R F2(On)3.14 E F1 3.14(,r)C .64 (eadline will try to enable an)-3.14 F 3.14(ym)-.15 G .64 (eta modi\214er k)-3.14 F .94 -.15(ey t)-.1 H .64 -(he terminal claims to support).15 F(when it is called.)144 312 Q +(he terminal claims to support).15 F(when it is called.)144 432 Q (On man)5 E 2.5(yt)-.15 G(erminals, the meta k)-2.5 E .3 -.15(ey i)-.1 H -2.5(su).15 G(sed to send eight-bit characters.)-2.5 E F1 -(expand\255tilde \(Off\))108 324 Q F0(If set to)144 336 Q F1(On)2.5 E F0 +2.5(su).15 G(sed to send eight-bit characters.)-2.5 E F2 +(expand\255tilde \(Off\))108 444 Q F1(If set to)144 456 Q F2(On)2.5 E F1 2.5(,t)C(ilde e)-2.5 E(xpansion is performed when readline attempts w) --.15 E(ord completion.)-.1 E F1(history\255pr)108 348 Q(eser)-.18 E -.1 -(ve)-.1 G(\255point \(Off\)).1 E F0 .552(If set to)144 360 R F1(On)3.052 -E F0 3.052(,t)C .552(he history code attempts to place point at the sam\ -e location on each history line re-)-3.052 F(trie)144 372 Q -.15(ve)-.25 -G 2.5(dw).15 G(ith)-2.5 E F1(pr)2.5 E -.15(ev)-.18 G(ious-history).15 E -F0(or)2.5 E F1(next-history)2.5 E F0(.)A F1(history\255size \(unset\)) -108 384 Q F0 .949(Set the maximum number of history entries sa)144 396 R +-.15 E(ord completion.)-.1 E F2(history\255pr)108 468 Q(eser)-.18 E -.1 +(ve)-.1 G(\255point \(Off\)).1 E F1 .553(If set to)144 480 R F2(On)3.052 +E F1 3.052(,t)C .552(he history code attempts to place point at the sam\ +e location on each history line re-)-3.052 F(trie)144 492 Q -.15(ve)-.25 +G 2.5(dw).15 G(ith)-2.5 E F2(pr)2.5 E -.15(ev)-.18 G(ious-history).15 E +F1(or)2.5 E F2(next-history)2.5 E F1(.)A F2(history\255size \(unset\)) +108 504 Q F1 .948(Set the maximum number of history entries sa)144 516 R -.15(ve)-.2 G 3.448(di).15 G 3.448(nt)-3.448 G .948(he history list.) --3.448 F .948(If set to zero, an)5.948 F 3.448(ye)-.15 G(xisting)-3.598 -E .482(history entries are deleted and no ne)144 408 R 2.982(we)-.25 G -.483(ntries are sa)-2.982 F -.15(ve)-.2 G 2.983(d. If).15 F .483 -(set to a v)2.983 F .483(alue less than zero, the num-)-.25 F .278 -(ber of history entries is not limited.)144 420 R .277(By def)5.278 F -.277(ault, the number of history entries is set to the v)-.1 F .277 -(alue of)-.25 F(the)144 432 Q F1(HISTSIZE)3.41 E F0 .91(shell v)3.41 F -3.41(ariable. If)-.25 F .911(an attempt is made to set)3.41 F F2 -(history\255size)3.411 E F0 .911(to a non-numeric v)3.411 F(alue,)-.25 E -(the maximum number of history entries will be set to 500.)144 444 Q F1 -(horizontal\255scr)108 456 Q(oll\255mode \(Off\))-.18 E F0 .449 -(When set to)144 468 R F1(On)2.949 E F0 2.949(,m)C(ak)-2.949 E .448 -(es readline use a single line for display)-.1 F 2.948(,s)-.65 G .448 +-3.448 F .949(If set to zero, an)5.948 F 3.449(ye)-.15 G(xisting)-3.599 +E .483(history entries are deleted and no ne)144 528 R 2.983(we)-.25 G +.483(ntries are sa)-2.983 F -.15(ve)-.2 G 2.983(d. If).15 F .482 +(set to a v)2.983 F .482(alue less than zero, the num-)-.25 F .277 +(ber of history entries is not limited.)144 540 R .277(By def)5.277 F +.278(ault, the number of history entries is set to the v)-.1 F .278 +(alue of)-.25 F(the)144 552 Q F2(HISTSIZE)3.411 E F1 .911(shell v)3.411 +F 3.411(ariable. If)-.25 F .911(an attempt is made to set)3.411 F F0 +(history\255size)3.41 E F1 .91(to a non-numeric v)3.41 F(alue,)-.25 E +(the maximum number of history entries will be set to 500.)144 564 Q F2 +(horizontal\255scr)108 576 Q(oll\255mode \(Off\))-.18 E F1 .448 +(When set to)144 588 R F2(On)2.948 E F1 2.948(,m)C(ak)-2.948 E .448 +(es readline use a single line for display)-.1 F 2.948(,s)-.65 G .449 (crolling the input horizontally on a)-2.948 F 1.194(single screen line\ when it becomes longer than the screen width rather than wrapping to a\ - ne)144 480 R(w)-.25 E 2.5(line. This)144 492 R -(setting is automatically enabled for terminals of height 1.)2.5 E F1 -(input\255meta \(Off\))108 504 Q F0 1.062(If set to)144 516 R F1(On) -3.562 E F0 3.562(,r)C 1.061(eadline will enable eight-bit input \(that \ -is, it will not strip the eighth bit from the)-3.562 F .335 -(characters it reads\), re)144 528 R -.05(ga)-.15 G .335 -(rdless of what the terminal claims it can support.).05 F .336(The name) -5.336 F F1(meta\255\215ag)2.836 E F0(is)2.836 E 2.865(as)144 540 S(ynon) --2.865 E .365(ym for this v)-.15 F 2.864(ariable. The)-.25 F(def)2.864 E -.364(ault is)-.1 F F2(Of)2.864 E(f)-.18 E F0 2.864(,b)C .364 -(ut readline will set it to)-3.064 F F2(On)2.864 E F0 .364 -(if the locale contains)2.864 F 1.866(eight-bit characters.)144 552 R -1.866(This v)6.866 F 1.867(ariable is dependent on the)-.25 F F1 -(LC_CTYPE)4.367 E F0 1.867(locale cate)4.367 F(gory)-.15 E 4.367(,a)-.65 -G 1.867(nd may)-4.367 F(change if the locale is changed.)144 564 Q F1 -(isear)108 576 Q(ch\255terminators \(`)-.18 E(`C\255[C\255J')-.63 E('\)) --.63 E F0 .439(The string of characters that should terminate an increm\ -ental search without subsequently e)144 588 R -.15(xe)-.15 G(cut-).15 E -.934(ing the character as a command.)144 600 R .935(If this v)5.935 F -.935(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.435(nav).15 G .935 -(alue, the characters)-3.685 F F2(ESC)3.435 E F0(and)144 612 Q F2 -(C\255J)2.5 E F0(will terminate an incremental search.)2.5 E F1 -.1(ke) -108 624 S(ymap \(emacs\)).1 E F0 2.021(Set the current readline k)144 -636 R -.15(ey)-.1 G 4.521(map. The).15 F 2.021(set of v)4.521 F 2.021 -(alid k)-.25 F -.15(ey)-.1 G 2.021(map names is).15 F F2 2.02 -(emacs, emacs\255standar)4.52 F(d,)-.37 E .041 -(emacs\255meta, emacs\255ctlx, vi, vi\255command)144 648 R F0 2.542(,a)C -(nd)-2.542 E F2(vi\255insert)2.832 E F0(.).68 E F2(vi)5.042 E F0 .042 -(is equi)2.542 F -.25(va)-.25 G .042(lent to).25 F F2(vi\255command) -2.542 E F0(;)A F2(emacs)2.542 E F0 .449(is equi)144 660 R -.25(va)-.25 G -.449(lent to).25 F F2(emacs\255standar)2.949 E(d)-.37 E F0 5.449(.T)C -.449(he def)-5.449 F .449(ault v)-.1 F .449(alue is)-.25 F F2(emacs) -3.139 E F0 2.948(;t).27 G .448(he v)-2.948 F .448(alue of)-.25 F F1 -(editing\255mode)2.948 E F0 .448(also af-)2.948 F(fects the def)144 672 -Q(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1 -.1(ke)108 684 S -(yseq\255timeout \(500\)).1 E F0 .367(Speci\214es the duration)144 696 R -F2 -.37(re)2.867 G(adline).37 E F0 .367(will w)2.867 F .367 -(ait for a character when reading an ambiguous k)-.1 F .668 -.15(ey s) --.1 H(equence).15 E .525(\(one that can form a complete k)144 708 R .825 --.15(ey s)-.1 H .524(equence using the input read so f).15 F(ar)-.1 E -3.024(,o)-.4 G 3.024(rc)-3.024 G .524(an tak)-3.024 F 3.024(ea)-.1 G -.524(dditional in-)-3.024 F .806(put to complete a longer k)144 720 R -1.106 -.15(ey s)-.1 H 3.306(equence\). If).15 F .806(no input is recei) -3.306 F -.15(ve)-.25 G 3.306(dw).15 G .807(ithin the timeout,)-3.306 F -F2 -.37(re)3.307 G(adline).37 E F0(will)3.307 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(45)185.115 E 0 Cg EP -%%Page: 46 46 + ne)144 600 R(w)-.25 E 2.5(line. This)144 612 R +(setting is automatically enabled for terminals of height 1.)2.5 E F2 +(input\255meta \(Off\))108 624 Q F1 1.061(If set to)144 636 R F2(On) +3.561 E F1 3.561(,r)C 1.062(eadline will enable eight-bit input \(that \ +is, it will not strip the eighth bit from the)-3.561 F .336 +(characters it reads\), re)144 648 R -.05(ga)-.15 G .335 +(rdless of what the terminal claims it can support.).05 F .335(The name) +5.335 F F2(meta\255\215ag)2.835 E F1(is)2.835 E 2.864(as)144 660 S(ynon) +-2.864 E .364(ym for this v)-.15 F 2.864(ariable. The)-.25 F(def)2.864 E +.364(ault is)-.1 F F0(Of)2.864 E(f)-.18 E F1 2.864(,b)C .364 +(ut readline will set it to)-3.064 F F0(On)2.864 E F1 .365 +(if the locale contains)2.865 F 1.867(eight-bit characters.)144 672 R +1.867(This v)6.867 F 1.867(ariable is dependent on the)-.25 F F2 +(LC_CTYPE)4.367 E F1 1.866(locale cate)4.366 F(gory)-.15 E 4.366(,a)-.65 +G 1.866(nd may)-4.366 F(change if the locale is changed.)144 684 Q F2 +(isear)108 696 Q(ch\255terminators \()-.18 E F1<99>A F2(C\255[C\255J)A +F1<9a>A F2(\))A F1 .439(The string of characters that should terminate \ +an incremental search without subsequently e)144 708 R -.15(xe)-.15 G +(cut-).15 E .935(ing the character as a command.)144 720 R .935 +(If this v)5.935 F .935(ariable has not been gi)-.25 F -.15(ve)-.25 G +3.434(nav).15 G .934(alue, the characters)-3.684 F F0(ESC)3.434 E F1 +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(46)193.45 E 0 Cg EP +%%Page: 47 47 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .907 -(use the shorter b)144 84 R .907(ut complete k)-.2 F 1.207 -.15(ey s)-.1 -H 3.407(equence. The).15 F -.25(va)3.407 G .907 -(lue is speci\214ed in milliseconds, so a v).25 F .906(alue of)-.25 F -.05(1000 means that)144 96 R/F1 10/Times-Italic@0 SF -.37(re)2.55 G -(adline).37 E F0 .05(will w)2.55 F .05 -(ait one second for additional input.)-.1 F .05(If this v)5.05 F .05 -(ariable is set to a v)-.25 F(alue)-.25 E .051 -(less than or equal to zero, or to a non-numeric v)144 108 R(alue,)-.25 -E F1 -.37(re)2.551 G(adline).37 E F0 .051(will w)2.551 F .051 -(ait until another k)-.1 F .351 -.15(ey i)-.1 H 2.551(sp).15 G(ressed) --2.551 E(to decide which k)144 120 Q .3 -.15(ey s)-.1 H -(equence to complete.).15 E/F2 10/Times-Bold@0 SF(mark\255dir)108 132 Q -(ectories \(On\))-.18 E F0(If set to)144 144 Q F2(On)2.5 E F0 2.5(,c)C +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(and)144 84 Q F0(C\255J)2.5 E F1 +(will terminate an incremental search.)2.5 E/F2 10/Times-Bold@0 SF -.1 +(ke)108 96 S(ymap \(emacs\)).1 E F1 2.02(Set the current readline k)144 +108 R -.15(ey)-.1 G 4.521(map. The).15 F 2.021(set of v)4.521 F 2.021 +(alid k)-.25 F -.15(ey)-.1 G 2.021(map names is).15 F F0 2.021 +(emacs, emacs\255standar)4.521 F(d,)-.37 E .042 +(emacs\255meta, emacs\255ctlx, vi, vi\255command)144 120 R F1 2.542(,a)C +(nd)-2.542 E F0(vi\255insert)2.832 E F1(.).68 E F0(vi)5.042 E F1 .042 +(is equi)2.542 F -.25(va)-.25 G .042(lent to).25 F F0(vi\255command) +2.541 E F1(;)A F0(emacs)2.541 E F1 .448(is equi)144 132 R -.25(va)-.25 G +.448(lent to).25 F F0(emacs\255standar)2.948 E(d)-.37 E F1 5.448(.T)C +.448(he def)-5.448 F .448(ault v)-.1 F .449(alue is)-.25 F F0(emacs) +3.139 E F1 2.949(;t).27 G .449(he v)-2.949 F .449(alue of)-.25 F F2 +(editing\255mode)2.949 E F1 .449(also af-)2.949 F(fects the def)144 144 +Q(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F2 -.1(ke)108 156 S +(yseq\255timeout \(500\)).1 E F1 .368(Speci\214es the duration)144 168 R +F0 -.37(re)2.867 G(adline).37 E F1 .367(will w)2.867 F .367 +(ait for a character when reading an ambiguous k)-.1 F .667 -.15(ey s) +-.1 H(equence).15 E .524(\(one that can form a complete k)144 180 R .824 +-.15(ey s)-.1 H .524(equence using the input read so f).15 F(ar)-.1 E +3.025(,o)-.4 G 3.025(rc)-3.025 G .525(an tak)-3.025 F 3.025(ea)-.1 G +.525(dditional in-)-3.025 F .807(put to complete a longer k)144 192 R +1.106 -.15(ey s)-.1 H 3.306(equence\). If).15 F .806(no input is recei) +3.306 F -.15(ve)-.25 G 3.306(dw).15 G .806(ithin the timeout,)-3.306 F +F0 -.37(re)3.306 G(adline).37 E F1(will)3.306 E .906(use the shorter b) +144 204 R .907(ut complete k)-.2 F 1.207 -.15(ey s)-.1 H 3.407 +(equence. The).15 F -.25(va)3.407 G .907 +(lue is speci\214ed in milliseconds, so a v).25 F .907(alue of)-.25 F +.05(1000 means that)144 216 R F0 -.37(re)2.55 G(adline).37 E F1 .05 +(will w)2.55 F .05(ait one second for additional input.)-.1 F .05 +(If this v)5.05 F .05(ariable is set to a v)-.25 F(alue)-.25 E .051 +(less than or equal to zero, or to a non-numeric v)144 228 R(alue,)-.25 +E F0 -.37(re)2.551 G(adline).37 E F1 .051(will w)2.551 F .051 +(ait until another k)-.1 F .352 -.15(ey i)-.1 H 2.552(sp).15 G(ressed) +-2.552 E(to decide which k)144 240 Q .3 -.15(ey s)-.1 H +(equence to complete.).15 E F2(mark\255dir)108 252 Q(ectories \(On\)) +-.18 E F1(If set to)144 264 Q F2(On)2.5 E F1 2.5(,c)C (ompleted directory names ha)-2.5 E .3 -.15(ve a s)-.2 H(lash appended.) -.15 E F2(mark\255modi\214ed\255lines \(Off\))108 156 Q F0(If set to)144 -168 Q F2(On)2.5 E F0 2.5(,h)C(istory lines that ha)-2.5 E .3 -.15(ve b) +.15 E F2(mark\255modi\214ed\255lines \(Off\))108 276 Q F1(If set to)144 +288 Q F2(On)2.5 E F1 2.5(,h)C(istory lines that ha)-2.5 E .3 -.15(ve b) -.2 H(een modi\214ed are displayed with a preceding asterisk \().15 E F2 -(*)A F0(\).)A F2(mark\255symlink)108 180 Q(ed\255dir)-.1 E -(ectories \(Off\))-.18 E F0 .175(If set to)144 192 R F2(On)2.675 E F0 +(*)A F1(\).)A F2(mark\255symlink)108 300 Q(ed\255dir)-.1 E +(ectories \(Off\))-.18 E F1 .175(If set to)144 312 R F2(On)2.675 E F1 2.675(,c)C .175 (ompleted names which are symbolic links to directories ha)-2.675 F .475 --.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 204 -Q(alue of)-.25 E F2(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F2 -(match\255hidden\255\214les \(On\))108 216 Q F0 .193(This v)144 228 R -.193(ariable, when set to)-.25 F F2(On)2.693 E F0 2.693(,c)C .192 -(auses readline to match \214les whose names be)-2.693 F .192 -(gin with a `.)-.15 F 2.692('\()-.7 G(hidden)-2.692 E .456 -(\214les\) when performing \214lename completion.)144 240 R .456 -(If set to)5.456 F F2(Off)2.956 E F0 2.956(,t)C .456(he leading `.) --2.956 F 2.956('m)-.7 G .457(ust be supplied by the)-2.956 F -(user in the \214lename to be completed.)144 252 Q F2 -(menu\255complete\255display\255pr)108 264 Q(e\214x \(Off\))-.18 E F0 -1.586(If set to)144 276 R F2(On)4.086 E F0 4.086(,m)C 1.585(enu complet\ +-.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 324 +Q(alue of)-.25 E F2(mark\255dir)2.5 E(ectories)-.18 E F1(\).)A F2 +(match\255hidden\255\214les \(On\))108 336 Q F1 .012(This v)144 348 R +.013(ariable, when set to)-.25 F F2(On)2.513 E F1 2.513(,f)C .013 +(orces readline to match \214les whose names be)-2.513 F .013 +(gin with a \231.)-.15 F 5.013<9a28>-.7 G(hidden)-5.013 E .127 +(\214les\) when performing \214lename completion.)144 360 R .127 +(If set to)5.127 F F2(Off)2.627 E F1 2.627(,t)C .127 +(he user must include the leading \231.)-2.627 F 5.126<9a69>-.7 G(n) +-5.126 E(the \214lename to be completed.)144 372 Q F2 +(menu\255complete\255display\255pr)108 384 Q(e\214x \(Off\))-.18 E F1 +1.585(If set to)144 396 R F2(On)4.085 E F1 4.085(,m)C 1.585(enu complet\ ion displays the common pre\214x of the list of possible completions) --4.086 F(\(which may be empty\) before c)144 288 Q -(ycling through the list.)-.15 E F2(output\255meta \(Off\))108 300 Q F0 -.506(If set to)144 312 R F2(On)3.006 E F0 3.006(,r)C .507(eadline will \ +-4.085 F(\(which may be empty\) before c)144 408 Q +(ycling through the list.)-.15 E F2(output\255meta \(Off\))108 420 Q F1 +.507(If set to)144 432 R F2(On)3.007 E F1 3.007(,r)C .507(eadline will \ display characters with the eighth bit set directly rather than as a me\ -ta-)-3.006 F(pre\214x)144 324 Q .885(ed escape sequence.)-.15 F .884 -(The def)5.884 F .884(ault is)-.1 F F1(Of)3.384 E(f)-.18 E F0 3.384(,b)C -.884(ut readline will set it to)-3.584 F F1(On)3.384 E F0 .884 -(if the locale contains)3.384 F 1.866(eight-bit characters.)144 336 R -1.866(This v)6.866 F 1.867(ariable is dependent on the)-.25 F F2 -(LC_CTYPE)4.367 E F0 1.867(locale cate)4.367 F(gory)-.15 E 4.367(,a)-.65 -G 1.867(nd may)-4.367 F(change if the locale is changed.)144 348 Q F2 -(page\255completions \(On\))108 360 Q F0 .809(If set to)144 372 R F2(On) -3.308 E F0 3.308(,r)C .808(eadline uses an internal)-3.308 F F1(mor) -3.308 E(e)-.37 E F0(-lik)A 3.308(ep)-.1 G .808 +ta-)-3.007 F(pre\214x)144 444 Q .884(ed escape sequence.)-.15 F .884 +(The def)5.884 F .884(ault is)-.1 F F0(Of)3.384 E(f)-.18 E F1 3.384(,b)C +.884(ut readline will set it to)-3.584 F F0(On)3.384 E F1 .885 +(if the locale contains)3.384 F 1.867(eight-bit characters.)144 456 R +1.867(This v)6.867 F 1.867(ariable is dependent on the)-.25 F F2 +(LC_CTYPE)4.367 E F1 1.866(locale cate)4.366 F(gory)-.15 E 4.366(,a)-.65 +G 1.866(nd may)-4.366 F(change if the locale is changed.)144 468 Q F2 +(page\255completions \(On\))108 480 Q F1 .808(If set to)144 492 R F2(On) +3.308 E F1 3.308(,r)C .808(eadline uses an internal)-3.308 F F0(mor) +3.308 E(e)-.37 E F1(-lik)A 3.308(ep)-.1 G .808 (ager to display a screenful of possible comple-)-3.308 F -(tions at a time.)144 384 Q F2 -(print\255completions\255horizontally \(Off\))108 396 Q F0 .227 -(If set to)144 408 R F2(On)2.727 E F0 2.727(,r)C .227(eadline will disp\ +(tions at a time.)144 504 Q F2 +(print\255completions\255horizontally \(Off\))108 516 Q F1 .228 +(If set to)144 528 R F2(On)2.727 E F1 2.727(,r)C .227(eadline will disp\ lay completions with matches sorted horizontally in alphabetical or) --2.727 F(-)-.2 E(der)144 420 Q 2.5(,r)-.4 G(ather than do)-2.5 E -(wn the screen.)-.25 E F2 -2.29 -.18(re v)108 432 T -(ert\255all\255at\255newline \(Off\)).08 E F0 .699(If set to)144 444 R -F2(On)3.199 E F0 3.199(,r)C .699 +-2.727 F(-)-.2 E(der)144 540 Q 2.5(,r)-.4 G(ather than do)-2.5 E +(wn the screen.)-.25 E F2 -2.29 -.18(re v)108 552 T +(ert\255all\255at\255newline \(Off\)).08 E F1 .698(If set to)144 564 R +F2(On)3.198 E F1 3.198(,r)C .699 (eadline will undo all changes to history lines before returning when) --3.199 F F2(accept\255line)3.198 E F0(is)3.198 E -.15(exe)144 456 S +-3.198 F F2(accept\255line)3.199 E F1(is)3.199 E -.15(exe)144 576 S 2.686(cuted. By).15 F(def)2.686 E .186 (ault, history lines may be modi\214ed and retain indi)-.1 F .186 -(vidual undo lists across calls to)-.25 F F2 -.18(re)144 468 S(adline) -.18 E F0(.)A F2(sho)108 480 Q(w\255all\255if\255ambiguous \(Off\))-.1 E -F0 .304(This alters the def)144 492 R .304(ault beha)-.1 F .304 +(vidual undo lists across calls to)-.25 F F2 -.18(re)144 588 S(adline) +.18 E F1(.)A F2(sear)108 600 Q(ch\255ignor)-.18 E(e\255case \(Off\))-.18 +E F1 .289(If set to)144 612 R F2(On)2.789 E F1 2.789(,r)C .289(eadline \ +performs incremental and non-incremental history list searches in a cas\ +e\255in-)-2.789 F(sensiti)144 624 Q .3 -.15(ve f)-.25 H(ashion.).05 E F2 +(sho)108 636 Q(w\255all\255if\255ambiguous \(Off\))-.1 E F1 .304 +(This alters the def)144 648 R .304(ault beha)-.1 F .304 (vior of the completion functions.)-.2 F .304(If set to)5.304 F F2(On) -2.804 E F0 2.803(,w)C .303(ords which ha)-2.903 F .603 -.15(ve m)-.2 H +2.804 E F1 2.803(,w)C .303(ords which ha)-2.903 F .603 -.15(ve m)-.2 H (ore).15 E 1.264(than one possible completion cause the matches to be l\ -isted immediately instead of ringing the)144 504 R(bell.)144 516 Q F2 -(sho)108 528 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.346 -(This alters the def)144 540 R 5.346(ault beha)-.1 F 5.345 +isted immediately instead of ringing the)144 660 R(bell.)144 672 Q F2 +(sho)108 684 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F1 5.346 +(This alters the def)144 696 R 5.346(ault beha)-.1 F 5.345 (vior of the completion functions in a f)-.2 F 5.345(ashion similar to) --.1 F F2(sho)144 552 Q(w\255all\255if\255ambiguous)-.1 E F0 6.69(.I)C -4.19(fs)-6.69 G 1.691(et to)-4.19 F F2(On)4.191 E F0 4.191(,w)C 1.691 +-.1 F F2(sho)144 708 Q(w\255all\255if\255ambiguous)-.1 E F1 6.69(.I)C +4.19(fs)-6.69 G 1.691(et to)-4.19 F F2(On)4.191 E F1 4.191(,w)C 1.691 (ords which ha)-4.291 F 1.991 -.15(ve m)-.2 H 1.691 -(ore than one possible completion).15 F 1.04(without an)144 564 R 3.54 +(ore than one possible completion).15 F 1.04(without an)144 720 R 3.54 (yp)-.15 G 1.039 (ossible partial completion \(the possible completions don')-3.54 F -3.539(ts)-.18 G 1.039(hare a common pre\214x\))-3.539 F(cause the match\ -es to be listed immediately instead of ringing the bell.)144 576 Q F2 -(sho)108 588 Q(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F0 1.021 -(If set to)144 600 R F2(On)3.521 E F0 3.521(,a)C 1.022 -(dd a string to the be)-3.521 F 1.022 -(ginning of the prompt indicating the editing mode: emacs, vi)-.15 F -(command, or vi insertion.)144 612 Q(The mode strings are user)5 E -(-settable \(e.g.,)-.2 E F1(emacs\255mode\255string)2.5 E F0(\).)A F2 -(skip\255completed\255text \(Off\))108 624 Q F0 .095(If set to)144 636 R -F2(On)2.595 E F0 2.595(,t)C .095(his alters the def)-2.595 F .095 +3.539(ts)-.18 G 1.039(hare a common pre\214x\))-3.539 F(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(47)193.45 E 0 Cg EP +%%Page: 48 48 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(cause the matches to be listed immediately instead\ + of ringing the bell.)144 84 Q/F2 10/Times-Bold@0 SF(sho)108 96 Q +(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F1 1.021(If set to)144 +108 R F2(On)3.521 E F1 3.521(,a)C 1.022(dd a string to the be)-3.521 F +1.022(ginning of the prompt indicating the editing mode: emacs, vi)-.15 +F(command, or vi insertion.)144 120 Q(The mode strings are user)5 E +(-settable \(e.g.,)-.2 E F0(emacs\255mode\255string)2.5 E F1(\).)A F2 +(skip\255completed\255text \(Off\))108 132 Q F1 .095(If set to)144 144 R +F2(On)2.595 E F1 2.595(,t)C .095(his alters the def)-2.595 F .095 (ault completion beha)-.1 F .094 -(vior when inserting a single match into the line.)-.2 F(It')144 648 Q +(vior when inserting a single match into the line.)-.2 F(It')144 156 Q 2.545(so)-.55 G .045(nly acti)-2.545 F .345 -.15(ve w)-.25 H .046 (hen performing completion in the middle of a w).15 F 2.546(ord. If)-.1 F .046(enabled, readline does not)2.546 F 1.394(insert characters from \ -the completion that match characters after point in the w)144 660 R -1.394(ord being com-)-.1 F(pleted, so portions of the w)144 672 Q +the completion that match characters after point in the w)144 168 R +1.394(ord being com-)-.1 F(pleted, so portions of the w)144 180 Q (ord follo)-.1 E(wing the cursor are not duplicated.)-.25 E F2 -(vi\255cmd\255mode\255string \(\(cmd\)\))108 684 Q F0 .517(If the)144 -696 R F1(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F0 -.25(va)3.017 G +(vi\255cmd\255mode\255string \(\(cmd\)\))108 192 Q F1 .517(If the)144 +204 R F0(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F1 -.25(va)3.017 G .518(riable is enabled, this string is displayed immediately before the) .25 F .475(last line of the primary prompt when vi editing mode is acti) -144 708 R .775 -.15(ve a)-.25 H .475(nd in command mode.).15 F .475 -(The v)5.475 F(alue)-.25 E 1.235(is e)144 720 R 1.235(xpanded lik)-.15 F -3.735(eak)-.1 G 1.535 -.15(ey b)-3.835 H 1.236 -(inding, so the standard set of meta- and control pre\214x).15 F 1.236 -(es and backslash)-.15 F(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 -E(46)185.115 E 0 Cg EP -%%Page: 47 47 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .315 -(escape sequences is a)144 84 R -.25(va)-.2 G 2.815(ilable. Use).25 F -.314(the \\1 and \\2 escapes to be)2.815 F .314 -(gin and end sequences of non-print-)-.15 F(ing characters, which can b\ -e used to embed a terminal control sequence into the mode string.)144 96 -Q/F1 10/Times-Bold@0 SF(vi\255ins\255mode\255string \(\(ins\)\))108 108 -Q F0 .517(If the)144 120 R/F2 10/Times-Italic@0 SF -(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F0 -.25(va)3.017 G .518 +144 216 R .775 -.15(ve a)-.25 H .475(nd in command mode.).15 F .475 +(The v)5.475 F(alue)-.25 E .33(is e)144 228 R .33(xpanded lik)-.15 F +2.83(eak)-.1 G .63 -.15(ey b)-2.93 H .33 +(inding, so the standard set of meta- and control pre\214x).15 F .33 +(es and backslash es-)-.15 F .245(cape sequences is a)144 240 R -.25(va) +-.2 G 2.745(ilable. Use).25 F .244(the \\1 and \\2 escapes to be)2.745 F +.244(gin and end sequences of non-printing)-.15 F(characters, which can\ + be used to embed a terminal control sequence into the mode string.)144 +252 Q F2(vi\255ins\255mode\255string \(\(ins\)\))108 264 Q F1 .517 +(If the)144 276 R F0(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F1 +-.25(va)3.017 G .518 (riable is enabled, this string is displayed immediately before the).25 F .186(last line of the primary prompt when vi editing mode is acti)144 -132 R .486 -.15(ve a)-.25 H .186(nd in insertion mode.).15 F .186(The v) -5.186 F .186(alue is)-.25 F -.15(ex)144 144 S .923(panded lik).15 F +288 R .486 -.15(ve a)-.25 H .186(nd in insertion mode.).15 F .186(The v) +5.186 F .186(alue is)-.25 F -.15(ex)144 300 S .923(panded lik).15 F 3.423(eak)-.1 G 1.223 -.15(ey b)-3.523 H .924 (inding, so the standard set of meta- and control pre\214x).15 F .924 -(es and backslash es-)-.15 F .245(cape sequences is a)144 156 R -.25(va) +(es and backslash es-)-.15 F .245(cape sequences is a)144 312 R -.25(va) -.2 G 2.745(ilable. Use).25 F .244(the \\1 and \\2 escapes to be)2.745 F .244(gin and end sequences of non-printing)-.15 F(characters, which can\ be used to embed a terminal control sequence into the mode string.)144 -168 Q F1(visible\255stats \(Off\))108 180 Q F0 .846(If set to)144 192 R -F1(On)3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F -3.346(st)-.55 G .846(ype as reported by)-3.346 F F2(stat)3.346 E F0 .846 +324 Q F2(visible\255stats \(Off\))108 336 Q F1 .846(If set to)144 348 R +F2(On)3.346 E F1 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F +3.346(st)-.55 G .846(ype as reported by)-3.346 F F0(stat)3.346 E F1 .846 (\(2\) is appended to the \214lename)B -(when listing possible completions.)144 204 Q F1 -(Readline Conditional Constructs)87 220.8 Q F0 .05 -(Readline implements a f)108 232.8 R .05(acility similar in spirit to t\ +(when listing possible completions.)144 360 Q F2 +(Readline Conditional Constructs)87 376.8 Q F1 .05 +(Readline implements a f)108 388.8 R .05(acility similar in spirit to t\ he conditional compilation features of the C preprocessor)-.1 F .096 -(which allo)108 244.8 R .096(ws k)-.25 F .396 -.15(ey b)-.1 H .096 +(which allo)108 400.8 R .096(ws k)-.25 F .396 -.15(ey b)-.1 H .096 (indings and v).15 F .096 (ariable settings to be performed as the result of tests.)-.25 F .097 -(There are four parser)5.096 F(directi)108 256.8 Q -.15(ve)-.25 G 2.5 -(su).15 G(sed.)-2.5 E F1($if)108 273.6 Q F0(The)144 273.6 Q F1($if)2.963 -E F0 .463(construct allo)2.963 F .462(ws bindings to be made based on t\ -he editing mode, the terminal being used,)-.25 F -(or the application using readline.)144 285.6 Q(The te)5 E -(xt of the test, after an)-.15 E 2.5(yc)-.15 G(omparison operator)-2.5 E -(,)-.4 E -.15(ex)146.5 297.6 S(tends to the end of the line; unless oth\ -erwise noted, no characters are required to isolate it.).15 E F1(mode) -144 314.4 Q F0(The)180 314.4 Q F1(mode=)3.711 E F0 1.211(form of the) -3.711 F F1($if)3.711 E F0(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711 -(su).15 G 1.211(sed to test whether readline is in emacs or vi)-3.711 F -3.065(mode. This)180 326.4 R .565(may be used in conjunction with the) -3.065 F F1 .565(set k)3.065 F(eymap)-.1 E F0 .565 -(command, for instance, to)3.065 F .735(set bindings in the)180 338.4 R -F2(emacs\255standar)3.235 E(d)-.37 E F0(and)3.235 E F2(emacs\255ctlx) -3.235 E F0 -.1(ke)3.235 G .735(ymaps only if readline is starting)-.05 F -(out in emacs mode.)180 350.4 Q F1(term)144 367.2 Q F0(The)180 367.2 Q -F1(term=)3.197 E F0 .696 -(form may be used to include terminal-speci\214c k)3.197 F .996 -.15 -(ey b)-.1 H .696(indings, perhaps to bind).15 F .654(the k)180 379.2 R +(There are four parser)5.096 F(directi)108 412.8 Q -.15(ve)-.25 G 2.5 +(su).15 G(sed.)-2.5 E F2($if)108 429.6 Q F1(The)144 429.6 Q F2($if)2.963 +E F1 .463(construct allo)2.963 F .462(ws bindings to be made based on t\ +he editing mode, the terminal being used,)-.25 F .961 +(or the application using readline.)144 441.6 R .961(The te)5.961 F .961 +(xt of the test, after an)-.15 F 3.462(yc)-.15 G .962 +(omparison operator)-3.462 F 3.462(,e)-.4 G .962(xtends to)-3.612 F(the\ + end of the line; unless otherwise noted, no characters are required to\ + isolate it.)144 453.6 Q F2(mode)144 470.4 Q F1(The)180 470.4 Q F2 +(mode=)3.712 E F1 1.212(form of the)3.712 F F2($if)3.711 E F1(directi) +3.711 E 1.511 -.15(ve i)-.25 H 3.711(su).15 G 1.211 +(sed to test whether readline is in emacs or vi)-3.711 F 3.065 +(mode. This)180 482.4 R .565(may be used in conjunction with the)3.065 F +F2 .565(set k)3.065 F(eymap)-.1 E F1 .565(command, for instance, to) +3.065 F .735(set bindings in the)180 494.4 R F0(emacs\255standar)3.235 E +(d)-.37 E F1(and)3.235 E F0(emacs\255ctlx)3.235 E F1 -.1(ke)3.235 G .735 +(ymaps only if readline is starting)-.05 F(out in emacs mode.)180 506.4 +Q F2(term)144 523.2 Q F1(The)180 523.2 Q F2(term=)3.196 E F1 .696 +(form may be used to include terminal-speci\214c k)3.196 F .996 -.15 +(ey b)-.1 H .697(indings, perhaps to bind).15 F .654(the k)180 535.2 R .954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154 (sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1 -(wo)3.154 G .654(rd on the right side of).1 F(the)180 391.2 Q F1(=)3.232 -E F0 .732(is tested ag)3.232 F .732(ainst both the full name of the ter\ +(wo)3.154 G .654(rd on the right side of).1 F(the)180 547.2 Q F2(=)3.231 +E F1 .731(is tested ag)3.231 F .732(ainst both the full name of the ter\ minal and the portion of the terminal)-.05 F(name before the \214rst)180 -403.2 Q F1<ad>2.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F2(sun)2.84 E F0 -(to match both)2.74 E F2(sun)2.84 E F0(and)2.74 E F2(sun\255cmd)2.84 E -F0 2.5(,f).77 G(or instance.)-2.5 E F1 -.1(ve)144 420 S(rsion).1 E F0 -(The)180 432 Q F1 -.1(ve)3.108 G(rsion).1 E F0 .608 -(test may be used to perform comparisons ag)3.108 F .609 -(ainst speci\214c readline v)-.05 F(ersions.)-.15 E(The)180 444 Q F1 -.1 -(ve)2.772 G(rsion).1 E F0 -.15(ex)2.772 G .272 -(pands to the current readline v).15 F 2.771(ersion. The)-.15 F .271 -(set of comparison operators in-)2.771 F(cludes)180 456 Q F1(=)3.063 E -F0 3.063(,\()C(and)-3.063 E F1(==)3.063 E F0(\),)A F1(!=)3.063 E F0(,)A -F1(<=)3.063 E F0(,)A F1(>=)3.063 E F0(,)A F1(<)3.063 E F0 3.063(,a)C(nd) --3.063 E F1(>)3.064 E F0 5.564(.T)C .564(he v)-5.564 F .564 +559.2 Q F2<ad>2.5 E F1 5(.T)C(his allo)-5 E(ws)-.25 E F0(sun)2.84 E F1 +(to match both)2.74 E F0(sun)2.84 E F1(and)2.74 E F0(sun\255cmd)2.84 E +F1 2.5(,f).77 G(or instance.)-2.5 E F2 -.1(ve)144 576 S(rsion).1 E F1 +(The)180 588 Q F2 -.1(ve)3.109 G(rsion).1 E F1 .608 +(test may be used to perform comparisons ag)3.109 F .608 +(ainst speci\214c readline v)-.05 F(ersions.)-.15 E(The)180 600 Q F2 -.1 +(ve)2.771 G(rsion).1 E F1 -.15(ex)2.771 G .271 +(pands to the current readline v).15 F 2.772(ersion. The)-.15 F .272 +(set of comparison operators in-)2.772 F(cludes)180 612 Q F2(=)3.064 E +F1 3.064(,\()C(and)-3.064 E F2(==)3.064 E F1(\),)A F2(!=)3.064 E F1(,)A +F2(<=)3.064 E F1(,)A F2(>=)3.064 E F1(,)A F2(<)3.064 E F1 3.064(,a)C(nd) +-3.064 E F2(>)3.064 E F1 5.563(.T)C .563(he v)-5.563 F .563 (ersion number supplied on the right side)-.15 F .318 -(of the operator consists of a major v)180 468 R .318(ersion number)-.15 +(of the operator consists of a major v)180 624 R .318(ersion number)-.15 F 2.818(,a)-.4 G 2.818(no)-2.818 G .318 -(ptional decimal point, and an op-)-2.818 F .1(tional minor v)180 480 R -.1(ersion \(e.g.,)-.15 F F1(7.1)2.6 E F0 .1(\). If the minor v)B .101 -(ersion is omitted, it is assumed to be)-.15 F F1(0)2.601 E F0 5.101(.T) -C(he)-5.101 E .06(operator may be separated from the string)180 492 R F1 --.1(ve)2.56 G(rsion).1 E F0 .06(and from the v)2.56 F .06 -(ersion number ar)-.15 F(gument)-.18 E(by whitespace.)180 504 Q F1 -(application)144 520.8 Q F0(The)180 532.8 Q F1(application)3.003 E F0 -.503(construct is used to include application-speci\214c settings.)3.003 -F .503(Each program)5.503 F .114(using the readline library sets the)180 -544.8 R F2 .114(application name)2.614 F F0 2.614(,a)C .114 -(nd an initialization \214le can test for a)-2.614 F .5(particular v)180 -556.8 R 3(alue. This)-.25 F .501(could be used to bind k)3 F .801 -.15 -(ey s)-.1 H .501(equences to functions useful for a spe-).15 F .397 -(ci\214c program.)180 568.8 R -.15(Fo)5.397 G 2.896(ri).15 G .396 +(ptional decimal point, and an op-)-2.818 F .101(tional minor v)180 636 +R .101(ersion \(e.g.,)-.15 F F2(7.1)2.601 E F1 .101(\). If the minor v)B +.1(ersion is omitted, it is assumed to be)-.15 F F2(0)2.6 E F1 5.1(.T)C +(he)-5.1 E .06(operator may be separated from the string)180 648 R F2 +-.1(ve)2.56 G(rsion).1 E F1 .06(and from the v)2.56 F .06 +(ersion number ar)-.15 F(gument)-.18 E(by whitespace.)180 660 Q F0 +(application)144.33 676.8 Q F1(The)180 688.8 Q F0(application)3.226 E F1 +.726(construct is used to include application-speci\214c settings.)3.226 +F .726(Each program)5.726 F .114(using the readline library sets the)180 +700.8 R F0 .114(application name)2.614 F F1 2.614(,a)C .114 +(nd an initialization \214le can test for a)-2.614 F .501(particular v) +180 712.8 R 3.001(alue. This)-.25 F .501(could be used to bind k)3.001 F +.801 -.15(ey s)-.1 H .5(equences to functions useful for a spe-).15 F +.396(ci\214c program.)180 724.8 R -.15(Fo)5.396 G 2.896(ri).15 G .396 (nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15 -(ey s)-.1 H .396(equence that quotes the).15 F(current or pre)180 580.8 -Q(vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 604.8 Q F0 -(Bash)2.5 E 2.5(#Q)180 616.8 S(uote the current or pre)-2.5 E(vious w) --.25 E(ord)-.1 E("\\C\255xq": "\\eb\\"\\ef\\"")180 628.8 Q F1($endif)180 -640.8 Q F2(variable)144 657.6 Q F0(The)180 669.6 Q F2(variable)3.776 E -F0 1.276(construct pro)3.776 F 1.276 -(vides simple equality tests for readline v)-.15 F 1.277(ariables and v) --.25 F(alues.)-.25 E .08(The permitted comparison operators are)180 -681.6 R F2(=)2.579 E F0(,)A F2(==)2.579 E F0 2.579(,a)C(nd)-2.579 E F2 -(!=)2.579 E F0 5.079(.T)C .079(he v)-5.079 F .079 -(ariable name must be sepa-)-.25 F .98(rated from the comparison operat\ -or by whitespace; the operator may be separated from)180 693.6 R .13 -(the v)180 705.6 R .13(alue on the right hand side by whitespace.)-.25 F -.129(Both string and boolean v)5.129 F .129(ariables may be)-.25 F -(tested. Boolean v)180 717.6 Q(ariables must be tested ag)-.25 E -(ainst the v)-.05 E(alues)-.25 E F2(on)2.5 E F0(and)2.5 E F2(of)2.5 E(f) --.18 E F0(.)A(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(47) -185.115 E 0 Cg EP -%%Page: 48 48 +(ey s)-.1 H .397(equence that quotes the).15 F(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(48)193.45 E 0 Cg EP +%%Page: 49 49 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF($endif)108 84 Q F0(This command, as seen in the pre)144 84 Q(vious e) --.25 E(xample, terminates an)-.15 E F1($if)2.5 E F0(command.)2.5 E F1 -($else)108 100.8 Q F0(Commands in this branch of the)144 100.8 Q F1($if) -2.5 E F0(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe)-.15 G -(cuted if the test f).15 E(ails.)-.1 E F1($include)108 117.6 Q F0 .356 -(This directi)144 129.6 R .656 -.15(ve t)-.25 H(ak).15 E .356 -(es a single \214lename as an ar)-.1 F .357 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(current or pre)180 84 Q(vious w)-.25 E(ord in)-.1 E +/F2 10/Times-Bold@0 SF(bash)2.5 E F1(:)A/F3 10/Courier-Bold@0 SF($if)180 +100.8 Q/F4 10/Courier@0 SF(Bash)6 E 6(#Q)180 112.8 S +(uote the current or previous word)-6 E("\\C-xq": "\\eb\\"\\ef\\"")180 +124.8 Q F3($endif)180 136.8 Q F0(variable)144.29 153.6 Q F1(The)180 +165.6 Q F0(variable)3.777 E F1 1.277(construct pro)3.777 F 1.276 +(vides simple equality tests for readline v)-.15 F 1.276(ariables and v) +-.25 F(alues.)-.25 E .079(The permitted comparison operators are)180 +177.6 R F0(=)2.579 E F1(,)A F0(==)2.579 E F1 2.579(,a)C(nd)-2.579 E F0 +(!=)2.579 E F1 5.079(.T)C .079(he v)-5.079 F .08 +(ariable name must be sepa-)-.25 F .98(rated from the comparison operat\ +or by whitespace; the operator may be separated from)180 189.6 R .129 +(the v)180 201.6 R .129(alue on the right hand side by whitespace.)-.25 +F .13(Both string and boolean v)5.129 F .13(ariables may be)-.25 F +(tested. Boolean v)180 213.6 Q(ariables must be tested ag)-.25 E +(ainst the v)-.05 E(alues)-.25 E F0(on)2.5 E F1(and)2.5 E F0(of)2.5 E(f) +-.18 E F1(.)A F2($endif)108 230.4 Q F1(This command, as seen in the pre) +144 230.4 Q(vious e)-.25 E(xample, terminates an)-.15 E F2($if)2.5 E F1 +(command.)2.5 E F2($else)108 247.2 Q F1(Commands in this branch of the) +144 247.2 Q F2($if)2.5 E F1(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E +-.15(xe)-.15 G(cuted if the test f).15 E(ails.)-.1 E F2($include)108 264 +Q F1 .357(This directi)144 276 R .657 -.15(ve t)-.25 H(ak).15 E .357 +(es a single \214lename as an ar)-.1 F .356 (gument and reads commands and bindings from that)-.18 F 2.5(\214le. F) -144 141.6 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 --.15(ve w)-.25 H(ould read).05 E/F2 10/Times-Italic@0 SF(/etc/inputr)2.5 -E(c)-.37 E F0(:)A F1($include)144 165.6 Q F2(/etc/inputr)5.833 E(c)-.37 -E F1(Sear)87 182.4 Q(ching)-.18 E F0 .835(Readline pro)108 194.4 R .835 +144 288 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 +-.15(ve w)-.25 H(ould read).05 E F0(/etc/inputr)2.5 E(c)-.37 E F1(:)A F2 +($include)144 304.8 Q F0(/etc/inputr)5.833 E(c)-.37 E F2(Sear)87 321.6 Q +(ching)-.18 E F1 .834(Readline pro)108 333.6 R .834 (vides commands for searching through the command history \(see)-.15 F -/F3 9/Times-Bold@0 SF(HIST)3.334 E(OR)-.162 E(Y)-.315 E F0(belo)3.084 E -.834(w\) for lines)-.25 F(containing a speci\214ed string.)108 206.4 Q -(There are tw)5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.51 E -(emental)-.37 E F0(and)3.01 E F2(non-incr)2.86 E(emental)-.37 E F0(.).51 -E .697(Incremental searches be)108 223.2 R .697 +/F5 9/Times-Bold@0 SF(HIST)3.335 E(OR)-.162 E(Y)-.315 E F1(belo)3.085 E +.835(w\) for lines)-.25 F(containing a speci\214ed string.)108 345.6 Q +(There are tw)5 E 2.5(os)-.1 G(earch modes:)-2.5 E F0(incr)2.51 E +(emental)-.37 E F1(and)3.01 E F0(non-incr)2.86 E(emental)-.37 E F1(.).51 +E .698(Incremental searches be)108 362.4 R .698 (gin before the user has \214nished typing the search string.)-.15 F -.698(As each character of the)5.698 F .113 -(search string is typed, readline displays the ne)108 235.2 R .112 +.697(As each character of the)5.697 F .112 +(search string is typed, readline displays the ne)108 374.4 R .112 (xt entry from the history matching the string typed so f)-.15 F(ar)-.1 -E 5.112(.A)-.55 G(n)-5.112 E .542 -(incremental search requires only as man)108 247.2 R 3.042(yc)-.15 G +E 5.113(.A)-.55 G(n)-5.113 E .542 +(incremental search requires only as man)108 386.4 R 3.042(yc)-.15 G .542(haracters as needed to \214nd the desired history entry)-3.042 F -5.542(.T)-.65 G .542(he char)-5.542 F(-)-.2 E .224 -(acters present in the v)108 259.2 R .224(alue of the)-.25 F F1(isear) -2.724 E(ch-terminators)-.18 E F0 -.25(va)2.724 G .224 +5.541(.T)-.65 G .541(he char)-5.541 F(-)-.2 E .224 +(acters present in the v)108 398.4 R .224(alue of the)-.25 F F2(isear) +2.724 E(ch-terminators)-.18 E F1 -.25(va)2.724 G .224 (riable are used to terminate an incremental search.).25 F .66 -(If that v)108 271.2 R .66(ariable has not been assigned a v)-.25 F .66 +(If that v)108 410.4 R .66(ariable has not been assigned a v)-.25 F .66 (alue the Escape and Control-J characters will terminate an incre-)-.25 -F .097(mental search.)108 283.2 R .096(Control-G will abort an incremen\ -tal search and restore the original line.)5.097 F .096 -(When the search is)5.096 F(terminated, the history entry containing th\ -e search string becomes the current line.)108 295.2 Q 2.938 -.8(To \214) -108 312 T 1.339(nd other matching entries in the history list, type Con\ -trol-S or Control-R as appropriate.).8 F 1.339(This will)6.339 F .675 -(search backw)108 324 R .675(ard or forw)-.1 F .675 -(ard in the history for the ne)-.1 F .674 -(xt entry matching the search string typed so f)-.15 F(ar)-.1 E 5.674 -(.A)-.55 G -.15(ny)-5.674 G .174(other k)108 336 R .474 -.15(ey s)-.1 H -.174 +F .096(mental search.)108 422.4 R .096(Control-G will abort an incremen\ +tal search and restore the original line.)5.096 F .097 +(When the search is)5.097 F(terminated, the history entry containing th\ +e search string becomes the current line.)108 434.4 Q 2.939 -.8(To \214) +108 451.2 T 1.339(nd other matching entries in the history list, type C\ +ontrol-S or Control-R as appropriate.).8 F 1.338(This will)6.338 F .674 +(search backw)108 463.2 R .674(ard or forw)-.1 F .674 +(ard in the history for the ne)-.1 F .675 +(xt entry matching the search string typed so f)-.15 F(ar)-.1 E 5.675 +(.A)-.55 G -.15(ny)-5.675 G .175(other k)108 475.2 R .475 -.15(ey s)-.1 +H .174 (equence bound to a readline command will terminate the search and e).15 -F -.15(xe)-.15 G .175(cute that command.).15 F -.15(Fo)5.175 G(r).15 E -.541(instance, a)108 348 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(history list.)108 360 Q -.653(Readline remembers the last incremental search string.)108 376.8 R -.653(If tw)5.653 F 3.153(oC)-.1 G .653(ontrol-Rs are typed without an) --3.153 F 3.153(yi)-.15 G(nterv)-3.153 E(en-)-.15 E -(ing characters de\214ning a ne)108 388.8 Q 2.5(ws)-.25 G -(earch string, an)-2.5 E 2.5(yr)-.15 G(emembered search string is used.) --2.5 E .567(Non-incremental searches read the entire search string befo\ -re starting to search for matching history lines.)108 405.6 R(The searc\ -h string may be typed by the user or be part of the contents of the cur\ -rent line.)108 417.6 Q F1(Readline Command Names)87 434.4 Q F0 1.391 -(The follo)108 446.4 R 1.391 +F -.15(xe)-.15 G .174(cute that command.).15 F -.15(Fo)5.174 G(r).15 E +.54(instance, a)108 487.2 R F0(ne)3.04 E(wline)-.15 E F1 .541 +(will terminate the search and accept the line, thereby e)3.04 F -.15 +(xe)-.15 G .541(cuting the command from the).15 F(history list.)108 +499.2 Q .653(Readline remembers the last incremental search string.)108 +516 R .653(If tw)5.653 F 3.153(oC)-.1 G .653 +(ontrol-Rs are typed without an)-3.153 F 3.152(yi)-.15 G(nterv)-3.152 E +(en-)-.15 E(ing characters de\214ning a ne)108 528 Q 2.5(ws)-.25 G +(earch string, readline uses an)-2.5 E 2.5(yr)-.15 G +(emembered search string.)-2.5 E .567(Non-incremental searches read the\ + entire search string before starting to search for matching history li\ +nes.)108 544.8 R(The search string may be typed by the user or be part \ +of the contents of the current line.)108 556.8 Q F2 +(Readline Command Names)87 573.6 Q F1 1.392(The follo)108 585.6 R 1.391 (wing is a list of the names of the commands and the def)-.25 F 1.391 (ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F -3.892(ya)-.15 G(re)-3.892 E 2.622(bound. Command)108 458.4 R .122 -(names without an accompan)2.622 F .122(ying k)-.15 F .421 -.15(ey s)-.1 -H .121(equence are unbound by def).15 F 2.621(ault. In)-.1 F .121 -(the follo)2.621 F(wing)-.25 E(descriptions,)108 470.4 Q F2(point)3.41 E -F0 .91(refers to the current cursor position, and)3.41 F F2(mark)3.411 E -F0 .911(refers to a cursor position sa)3.411 F -.15(ve)-.2 G 3.411(db) -.15 G 3.411(yt)-3.411 G(he)-3.411 E F1(set\255mark)108 482.4 Q F0 2.5 +3.891(ya)-.15 G(re)-3.891 E 2.621(bound. Command)108 597.6 R .121 +(names without an accompan)2.621 F .121(ying k)-.15 F .421 -.15(ey s)-.1 +H .122(equence are unbound by def).15 F 2.622(ault. In)-.1 F .122 +(the follo)2.622 F(wing)-.25 E(descriptions,)108 609.6 Q F0(point)3.411 +E F1 .911(refers to the current cursor position, and)3.411 F F0(mark) +3.411 E F1 .91(refers to a cursor position sa)3.411 F -.15(ve)-.2 G 3.41 +(db).15 G 3.41(yt)-3.41 G(he)-3.41 E F2(set\255mark)108 621.6 Q F1 2.5 (command. The)2.5 F(te)2.5 E -(xt between the point and mark is referred to as the)-.15 E F2 -.37(re) -2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 499.2 Q(or Mo)-.25 E(ving)-.1 -E(beginning\255of\255line \(C\255a\))108 511.2 Q F0(Mo)144 523.2 Q .3 --.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1 -(end\255of\255line \(C\255e\))108 535.2 Q F0(Mo)144 547.2 Q .3 -.15 -(ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108 -559.2 S(rward\255char \(C\255f\)).25 E F0(Mo)144 571.2 Q .3 -.15(ve f) --.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E F1 -(backward\255char \(C\255b\))108 583.2 Q F0(Mo)144 595.2 Q .3 -.15(ve b) --.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 607.2 S(rward\255w) -.25 E(ord \(M\255f\))-.1 E F0(Mo)144 619.2 Q .823 -.15(ve f)-.15 H(orw) -.15 E .523(ard to the end of the ne)-.1 F .523(xt w)-.15 F 3.023(ord. W) --.1 F .522(ords are composed of alphanumeric characters \(let-)-.8 F -(ters and digits\).)144 631.2 Q F1(backward\255w)108 643.2 Q -(ord \(M\255b\))-.1 E F0(Mo)144 655.2 Q 1.71 -.15(ve b)-.15 H 1.41 -(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91 -(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F -(characters \(letters and digits\).)144 667.2 Q F1(shell\255f)108 679.2 -Q(orward\255w)-.25 E(ord)-.1 E F0(Mo)144 691.2 Q .784 -.15(ve f)-.15 H -(orw).15 E .484(ard to the end of the ne)-.1 F .484(xt w)-.15 F 2.984 -(ord. W)-.1 F .484(ords are delimited by non-quoted shell metacharac-) --.8 F(ters.)144 703.2 Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 -E(48)185.115 E 0 Cg EP -%%Page: 49 49 +(xt between the point and mark is referred to as the)-.15 E F0 -.37(re) +2.5 G(gion)-.03 E F1(.)A F2(Commands f)87 638.4 Q(or Mo)-.25 E(ving)-.1 +E(beginning\255of\255line \(C\255a\))108 650.4 Q F1(Mo)144 662.4 Q .3 +-.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F2 +(end\255of\255line \(C\255e\))108 674.4 Q F1(Mo)144 686.4 Q .3 -.15 +(ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F2 -.25(fo)108 +698.4 S(rward\255char \(C\255f\)).25 E F1(Mo)144 710.4 Q .3 -.15(ve f) +-.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(49)193.45 E 0 Cg EP +%%Page: 50 50 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(shell\255backward\255w)108 84 Q(ord)-.1 E F0(Mo)144 96 Q .908 -.15 -(ve b)-.15 H .609(ack to the start of the current or pre).15 F .609 -(vious w)-.25 F 3.109(ord. W)-.1 F .609 -(ords are delimited by non-quoted shell)-.8 F(metacharacters.)144 108 Q -F1(pr)108 120 Q -.15(ev)-.18 G(ious\255scr).15 E(een\255line)-.18 E F0 -.891(Attempt to mo)144 132 R 1.191 -.15(ve p)-.15 H .891 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(backward\255char \(C\255b\)) +108 84 Q F1(Mo)144 96 Q .3 -.15(ve b)-.15 H(ack a character).15 E(.)-.55 +E F2 -.25(fo)108 108 S(rward\255w).25 E(ord \(M\255f\))-.1 E F1(Mo)144 +120 Q .822 -.15(ve f)-.15 H(orw).15 E .522(ard to the end of the ne)-.1 +F .523(xt w)-.15 F 3.023(ord. W)-.1 F .523 +(ords are composed of alphanumeric characters \(let-)-.8 F +(ters and digits\).)144 132 Q F2(backward\255w)108 144 Q(ord \(M\255b\)) +-.1 E F1(Mo)144 156 Q 1.71 -.15(ve b)-.15 H 1.41 +(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91 +(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F +(characters \(letters and digits\).)144 168 Q F2(shell\255f)108 180 Q +(orward\255w)-.25 E(ord)-.1 E F1(Mo)144 192 Q .784 -.15(ve f)-.15 H(orw) +.15 E .484(ard to the end of the ne)-.1 F .484(xt w)-.15 F 2.984(ord. W) +-.1 F .484(ords are delimited by non-quoted shell metacharac-)-.8 F +(ters.)144 204 Q F2(shell\255backward\255w)108 216 Q(ord)-.1 E F1(Mo)144 +228 Q .909 -.15(ve b)-.15 H .609(ack to the start of the current or pre) +.15 F .609(vious w)-.25 F 3.109(ord. W)-.1 F .608 +(ords are delimited by non-quoted shell)-.8 F(metacharacters.)144 240 Q +F2(pr)108 252 Q -.15(ev)-.18 G(ious\255scr).15 E(een\255line)-.18 E F1 +.89(Attempt to mo)144 264 R 1.19 -.15(ve p)-.15 H .89 (oint to the same ph).15 F .891(ysical screen column on the pre)-.05 F -.89(vious ph)-.25 F .89(ysical screen line.)-.05 F 1.055 -(This will not ha)144 144 R 1.355 -.15(ve t)-.2 H 1.055(he desired ef) -.15 F 1.056(fect if the current readline line does not tak)-.25 F 3.556 -(eu)-.1 G 3.556(pm)-3.556 G 1.056(ore than one)-3.556 F(ph)144 156 Q(ys\ +.891(vious ph)-.25 F .891(ysical screen line.)-.05 F 1.056 +(This will not ha)144 276 R 1.356 -.15(ve t)-.2 H 1.056(he desired ef) +.15 F 1.056(fect if the current readline line does not tak)-.25 F 3.555 +(eu)-.1 G 3.555(pm)-3.555 G 1.055(ore than one)-3.555 F(ph)144 288 Q(ys\ ical line or if point is not greater than the length of the prompt plus\ - the screen width.)-.05 E F1(next\255scr)108 168 Q(een\255line)-.18 E F0 -.638(Attempt to mo)144 180 R .938 -.15(ve p)-.15 H .638 -(oint to the same ph).15 F .637(ysical screen column on the ne)-.05 F -.637(xt ph)-.15 F .637(ysical screen line. This)-.05 F .194(will not ha) -144 192 R .494 -.15(ve t)-.2 H .194(he desired ef).15 F .194 -(fect if the current readline line does not tak)-.25 F 2.695(eu)-.1 G -2.695(pm)-2.695 G .195(ore than one ph)-2.695 F(ysical)-.05 E .164(line\ + the screen width.)-.05 E F2(next\255scr)108 300 Q(een\255line)-.18 E F1 +.637(Attempt to mo)144 312 R .937 -.15(ve p)-.15 H .637 +(oint to the same ph).15 F .638(ysical screen column on the ne)-.05 F +.638(xt ph)-.15 F .638(ysical screen line. This)-.05 F .195(will not ha) +144 324 R .495 -.15(ve t)-.2 H .195(he desired ef).15 F .194 +(fect if the current readline line does not tak)-.25 F 2.694(eu)-.1 G +2.694(pm)-2.694 G .194(ore than one ph)-2.694 F(ysical)-.05 E .164(line\ or if the length of the current readline line is not greater than the \ -length of the prompt plus the)144 204 R(screen width.)144 216 Q F1 -(clear\255display \(M\255C\255l\))108 228 Q F0 1.498 -(Clear the screen and, if possible, the terminal')144 240 R 3.999(ss) --.55 G 1.499(crollback b)-3.999 F(uf)-.2 E(fer)-.25 E 3.999(,t)-.4 G -1.499(hen redra)-3.999 F 3.999(wt)-.15 G 1.499(he current line,)-3.999 F -(lea)144 252 Q(ving the current line at the top of the screen.)-.2 E F1 -(clear\255scr)108 264 Q(een \(C\255l\))-.18 E F0 1.36 -(Clear the screen, then redra)144 276 R 3.86(wt)-.15 G 1.36 +length of the prompt plus the)144 336 R(screen width.)144 348 Q F2 +(clear\255display \(M\255C\255l\))108 360 Q F1 1.499 +(Clear the screen and, if possible, the terminal')144 372 R 3.999(ss) +-.55 G 1.498(crollback b)-3.999 F(uf)-.2 E(fer)-.25 E 3.998(,t)-.4 G +1.498(hen redra)-3.998 F 3.998(wt)-.15 G 1.498(he current line,)-3.998 F +(lea)144 384 Q(ving the current line at the top of the screen.)-.2 E F2 +(clear\255scr)108 396 Q(een \(C\255l\))-.18 E F1 1.36 +(Clear the screen, then redra)144 408 R 3.86(wt)-.15 G 1.36 (he current line, lea)-3.86 F 1.36 -(ving the current line at the top of the screen.)-.2 F -.4(Wi)144 288 S +(ving the current line at the top of the screen.)-.2 F -.4(Wi)144 420 S (th an ar).4 E -(gument, refresh the current line without clearing the screen.)-.18 E F1 --.18(re)108 300 S(draw\255curr).18 E(ent\255line)-.18 E F0 -(Refresh the current line.)144 312 Q F1(Commands f)87 328.8 Q +(gument, refresh the current line without clearing the screen.)-.18 E F2 +-.18(re)108 432 S(draw\255curr).18 E(ent\255line)-.18 E F1 +(Refresh the current line.)144 444 Q F2(Commands f)87 460.8 Q (or Manipulating the History)-.25 E(accept\255line \(Newline, Retur)108 -340.8 Q(n\))-.15 E F0 .158(Accept the line re)144 352.8 R -.05(ga)-.15 G -.158(rdless of where the cursor is.).05 F .158 -(If this line is non-empty)5.158 F 2.659(,a)-.65 G .159 -(dd it to the history list)-2.659 F .699(according to the state of the) -144 364.8 R/F2 9/Times-Bold@0 SF(HISTCONTR)3.199 E(OL)-.27 E F0 -.25(va) +472.8 Q(n\))-.15 E F1 .159(Accept the line re)144 484.8 R -.05(ga)-.15 G +.159(rdless of where the cursor is.).05 F .158 +(If this line is non-empty)5.158 F 2.658(,a)-.65 G .158 +(dd it to the history list)-2.658 F .699(according to the state of the) +144 496.8 R/F3 9/Times-Bold@0 SF(HISTCONTR)3.199 E(OL)-.27 E F1 -.25(va) 2.949 G 3.199(riable. If).25 F .699 (the line is a modi\214ed history line, then)3.199 F -(restore the history line to its original state.)144 376.8 Q F1(pr)108 -388.8 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0 -(Fetch the pre)144 400.8 Q(vious command from the history list, mo)-.25 -E(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 412.8 -Q F0(Fetch the ne)144 424.8 Q(xt command from the history list, mo)-.15 -E(ving forw)-.15 E(ard in the list.)-.1 E F1 -(beginning\255of\255history \(M\255<\))108 436.8 Q F0(Mo)144 448.8 Q .3 +(restore the history line to its original state.)144 508.8 Q F2(pr)108 +520.8 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F1 +(Fetch the pre)144 532.8 Q(vious command from the history list, mo)-.25 +E(ving back in the list.)-.15 E F2(next\255history \(C\255n\))108 544.8 +Q F1(Fetch the ne)144 556.8 Q(xt command from the history list, mo)-.15 +E(ving forw)-.15 E(ard in the list.)-.1 E F2 +(beginning\255of\255history \(M\255<\))108 568.8 Q F1(Mo)144 580.8 Q .3 -.15(ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.) --.65 E F1(end\255of\255history \(M\255>\))108 460.8 Q F0(Mo)144 472.8 Q +-.65 E F2(end\255of\255history \(M\255>\))108 592.8 Q F1(Mo)144 604.8 Q .3 -.15(ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5 -(,i)-.65 G(.e., the line currently being entered.)-2.5 E F1 -(operate\255and\255get\255next \(C\255o\))108 484.8 Q F0 .947 -(Accept the current line for e)144 496.8 R -.15(xe)-.15 G .948 -(cution and fetch the ne).15 F .948(xt line relati)-.15 F 1.248 -.15 -(ve t)-.25 H 3.448(ot).15 G .948(he current line from the)-3.448 F .73 -(history for editing.)144 508.8 R 3.23(An)5.73 G .73(umeric ar)-3.23 F -.729 +(,i)-.65 G(.e., the line currently being entered.)-2.5 E F2 +(operate\255and\255get\255next \(C\255o\))108 616.8 Q F1 .948 +(Accept the current line for e)144 628.8 R -.15(xe)-.15 G .948 +(cution and fetch the ne).15 F .948(xt line relati)-.15 F 1.247 -.15 +(ve t)-.25 H 3.447(ot).15 G .947(he current line from the)-3.447 F .729 +(history for editing.)144 640.8 R 3.229(An)5.729 G .729(umeric ar)-3.229 +F .729 (gument, if supplied, speci\214es the history entry to use instead of) --.18 F(the current line.)144 520.8 Q F1(fetch\255history)108 532.8 Q F0 --.4(Wi)144 544.8 S .256(th a numeric ar).4 F .256 -(gument, fetch that entry from the history list and mak)-.18 F 2.757(ei) --.1 G 2.757(tt)-2.757 G .257(he current line.)-2.757 F -.4(Wi)5.257 G -(th-).4 E(out an ar)144 556.8 Q(gument, mo)-.18 E .3 -.15(ve b)-.15 H -(ack to the \214rst entry in the history list.).15 E F1 -2.29 -.18(re v) -108 568.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.471 -(Search backw)144 580.8 R 1.471(ard starting at the current line and mo) --.1 F 1.47(ving `up' through the history as necessary)-.15 F(.)-.65 E -(This is an incremental search.)144 592.8 Q F1 -.25(fo)108 604.8 S -(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.131 -(Search forw)144 616.8 R 1.131(ard starting at the current line and mo) --.1 F 1.132(ving `do)-.15 F 1.132(wn' through the history as necessary) --.25 F(.)-.65 E(This is an incremental search.)144 628.8 Q F1 -(non\255incr)108 640.8 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H -(rse\255sear).15 E(ch\255history \(M\255p\))-.18 E F0 .165(Search backw) -144 652.8 R .164(ard through the history starting at the current line u\ -sing a non-incremental search for)-.1 F 2.5(as)144 664.8 S -(tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 676.8 Q -(emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18 -E F0 1.353(Search forw)144 688.8 R 1.354(ard through the history using \ -a non-incremental search for a string supplied by the)-.1 F(user)144 -700.8 Q(.)-.55 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(49) -185.115 E 0 Cg EP -%%Page: 50 50 +-.18 F(the current line.)144 652.8 Q F2(fetch\255history)108 664.8 Q F1 +-.4(Wi)144 676.8 S .257(th a numeric ar).4 F .257 +(gument, fetch that entry from the history list and mak)-.18 F 2.756(ei) +-.1 G 2.756(tt)-2.756 G .256(he current line.)-2.756 F -.4(Wi)5.256 G +(th-).4 E(out an ar)144 688.8 Q(gument, mo)-.18 E .3 -.15(ve b)-.15 H +(ack to the \214rst entry in the history list.).15 E F2 -2.29 -.18(re v) +108 700.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F1 1.312 +(Search backw)144 712.8 R 1.312(ard starting at the current line and mo) +-.1 F 1.312(ving \231up\232 through the history as necessary)-.15 F(.) +-.65 E(This is an incremental search.)144 724.8 Q(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(50)193.45 E 0 Cg EP +%%Page: 51 51 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(history\255sear)108 84 Q(ch\255f)-.18 E(orward)-.25 E F0 .249 -(Search forw)144 96 R .249(ard through the history for the string of ch\ -aracters between the start of the current line)-.1 F(and the point.)144 -108 Q(This is a non-incremental search.)5 E F1(history\255sear)108 120 Q -(ch\255backward)-.18 E F0 .95(Search backw)144 132 R .951(ard through t\ -he history for the string of characters between the start of the curren\ -t)-.1 F(line and the point.)144 144 Q(This is a non-incremental search.) -5 E F1(history\255substring\255sear)108 156 Q(ch\255backward)-.18 E F0 -.951(Search backw)144 168 R .951(ard through the history for the string\ - of characters between the start of the current)-.1 F .007 -(line and the current cursor position \(the)144 180 R/F2 10 -/Times-Italic@0 SF(point)2.507 E F0 2.507(\). The)B .007 -(search string may match an)2.507 F .007(ywhere in a history)-.15 F 2.5 -(line. This)144 192 R(is a non-incremental search.)2.5 E F1 -(history\255substring\255sear)108 204 Q(ch\255f)-.18 E(orward)-.25 E F0 -.249(Search forw)144 216 R .249(ard through the history for the string \ -of characters between the start of the current line)-.1 F .318 -(and the point.)144 228 R .319(The search string may match an)5.318 F -.319(ywhere in a history line.)-.15 F .319(This is a non-incremental) -5.319 F(search.)144 240 Q F1(yank\255nth\255ar)108 252 Q 2.5(g\()-.1 G -<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 264 R .622 -(gument to the pre)-.18 F .622(vious command \(usually the second w)-.25 -F .622(ord on the pre)-.1 F .622(vious line\))-.25 F .772(at point.)144 -276 R -.4(Wi)5.773 G .773(th an ar).4 F(gument)-.18 E F2(n)3.633 E F0 -3.273(,i).24 G .773(nsert the)-3.273 F F2(n)3.273 E F0 .773(th w)B .773 -(ord from the pre)-.1 F .773(vious command \(the w)-.25 F .773 -(ords in the)-.1 F(pre)144 288 Q .292(vious command be)-.25 F .292 -(gin with w)-.15 F .291(ord 0\).)-.1 F 2.791(An)5.291 G -2.25 -.15(eg a) --2.791 H(ti).15 E .591 -.15(ve a)-.25 H -.18(rg).15 G .291 -(ument inserts the).18 F F2(n)2.791 E F0 .291(th w)B .291 -(ord from the end of)-.1 F .281(the pre)144 300 R .281(vious command.) --.25 F .281(Once the ar)5.281 F(gument)-.18 E F2(n)2.781 E F0 .281 -(is computed, the ar)2.781 F .281(gument is e)-.18 F .282 -(xtracted as if the "!)-.15 F F2(n)A F0(")A(history e)144 312 Q -(xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 324 Q -2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.308 -(Insert the last ar)144 336 R 1.308(gument to the pre)-.18 F 1.307 -(vious command \(the last w)-.25 F 1.307(ord of the pre)-.1 F 1.307 -(vious history entry\).)-.25 F -.4(Wi)144 348 S .203(th a numeric ar).4 -F .203(gument, beha)-.18 F .504 -.15(ve ex)-.2 H .204(actly lik).15 F(e) --.1 E F1(yank\255nth\255ar)2.704 E(g)-.1 E F0 5.204(.S)C(uccessi)-5.204 -E .504 -.15(ve c)-.25 H .204(alls to).15 F F1(yank\255last\255ar)2.704 E -(g)-.1 E F0(mo)144 360 Q .807 -.15(ve b)-.15 H .507 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF -.25(fo)108 84 S +(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F1 .973 +(Search forw)144 96 R .973(ard starting at the current line and mo)-.1 F +.973(ving \231do)-.15 F .973(wn\232 through the history as necessary) +-.25 F(.)-.65 E(This is an incremental search.)144 108 Q F2(non\255incr) +108 120 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H(rse\255sear).15 E +(ch\255history \(M\255p\))-.18 E F1 .164(Search backw)144 132 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 144 S(tring supplied by the user)-2.5 E +(.)-.55 E F2(non\255incr)108 156 Q(emental\255f)-.18 E(orward\255sear) +-.25 E(ch\255history \(M\255n\))-.18 E F1 1.354(Search forw)144 168 R +1.354(ard through the history using a non-incremental search for a stri\ +ng supplied by the)-.1 F(user)144 180 Q(.)-.55 E F2(history\255sear)108 +192 Q(ch\255f)-.18 E(orward)-.25 E F1 .248(Search forw)144 204 R .249(a\ +rd through the history for the string of characters between the start o\ +f the current line)-.1 F(and the point.)144 216 Q +(This is a non-incremental search.)5 E F2(history\255sear)108 228 Q +(ch\255backward)-.18 E F1 .951(Search backw)144 240 R .951(ard through \ +the history for the string of characters between the start of the curre\ +nt)-.1 F(line and the point.)144 252 Q +(This is a non-incremental search.)5 E F2(history\255substring\255sear) +108 264 Q(ch\255backward)-.18 E F1 .95(Search backw)144 276 R .951(ard \ +through the history for the string of characters between the start of t\ +he current)-.1 F .007(line and the current cursor position \(the)144 288 +R F0(point)2.507 E F1 2.507(\). The)B .007(search string may match an) +2.507 F .006(ywhere in a history)-.15 F 2.5(line. This)144 300 R +(is a non-incremental search.)2.5 E F2(history\255substring\255sear)108 +312 Q(ch\255f)-.18 E(orward)-.25 E F1 .248(Search forw)144 324 R .249(a\ +rd through the history for the string of characters between the start o\ +f the current line)-.1 F .319(and the point.)144 336 R .319 +(The search string may match an)5.319 F .319(ywhere in a history line.) +-.15 F .318(This is a non-incremental)5.318 F(search.)144 348 Q F2 +(yank\255nth\255ar)108 360 Q 2.5(g\()-.1 G<4dad43ad7929>-2.5 E F1 .622 +(Insert the \214rst ar)144 372 R .622(gument to the pre)-.18 F .622 +(vious command \(usually the second w)-.25 F .622(ord on the pre)-.1 F +.622(vious line\))-.25 F .773(at point.)144 384 R -.4(Wi)5.773 G .773 +(th an ar).4 F(gument)-.18 E F0(n)3.633 E F1 3.273(,i).24 G .773 +(nsert the)-3.273 F F0(n)3.273 E F1 .773(th w)B .773(ord from the pre) +-.1 F .773(vious command \(the w)-.25 F .773(ords in the)-.1 F(pre)144 +396 Q .291(vious command be)-.25 F .291(gin with w)-.15 F .291(ord 0\).) +-.1 F 2.791(An)5.291 G -2.25 -.15(eg a)-2.791 H(ti).15 E .591 -.15(ve a) +-.25 H -.18(rg).15 G .291(ument inserts the).18 F F0(n)2.791 E F1 .291 +(th w)B .292(ord from the end of)-.1 F .237(the pre)144 408 R .237 +(vious command.)-.25 F .237(Once the ar)5.237 F(gument)-.18 E F0(n)2.736 +E F1 .236(is computed, the ar)2.736 F .236(gument is e)-.18 F .236 +(xtracted as if the \231!)-.15 F F0(n)A F1<9a>A(history e)144 420 Q +(xpansion had been speci\214ed.)-.15 E F2(yank\255last\255ar)108 432 Q +2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F1 1.307 +(Insert the last ar)144 444 R 1.307(gument to the pre)-.18 F 1.307 +(vious command \(the last w)-.25 F 1.308(ord of the pre)-.1 F 1.308 +(vious history entry\).)-.25 F -.4(Wi)144 456 S .204(th a numeric ar).4 +F .204(gument, beha)-.18 F .504 -.15(ve ex)-.2 H .204(actly lik).15 F(e) +-.1 E F2(yank\255nth\255ar)2.704 E(g)-.1 E F1 5.203(.S)C(uccessi)-5.203 +E .503 -.15(ve c)-.25 H .203(alls to).15 F F2(yank\255last\255ar)2.703 E +(g)-.1 E F1(mo)144 468 Q .806 -.15(ve b)-.15 H .507 (ack through the history list, inserting the last w).15 F .507 (ord \(or the w)-.1 F .507(ord speci\214ed by the ar)-.1 F(gument)-.18 E -.416(to the \214rst call\) of each line in turn.)144 372 R(An)5.416 E +.416(to the \214rst call\) of each line in turn.)144 480 R(An)5.416 E 2.916(yn)-.15 G .416(umeric ar)-2.916 F .416 -(gument supplied to these successi)-.18 F .716 -.15(ve c)-.25 H .416 -(alls de-).15 F 1.218(termines the direction to mo)144 384 R 1.518 -.15 +(gument supplied to these successi)-.18 F .715 -.15(ve c)-.25 H .415 +(alls de-).15 F 1.217(termines the direction to mo)144 492 R 1.518 -.15 (ve t)-.15 H 1.218(hrough the history).15 F 6.218(.A)-.65 G(ne)-2.5 E --.05(ga)-.15 G(ti).05 E 1.517 -.15(ve a)-.25 H -.18(rg).15 G 1.217 +-.05(ga)-.15 G(ti).05 E 1.518 -.15(ve a)-.25 H -.18(rg).15 G 1.218 (ument switches the direction).18 F .494 -(through the history \(back or forw)144 396 R 2.994(ard\). The)-.1 F +(through the history \(back or forw)144 504 R 2.994(ard\). The)-.1 F .494(history e)2.994 F .494(xpansion f)-.15 F .494 (acilities are used to e)-.1 F .494(xtract the last)-.15 F -.1(wo)144 -408 S(rd, as if the "!$" history e).1 E(xpansion had been speci\214ed.) --.15 E F1(shell\255expand\255line \(M\255C\255e\))108 420 Q F0 .623 -(Expand the line as the shell does.)144 432 R .622 -(This performs alias and history e)5.622 F .622 -(xpansion as well as all of the)-.15 F(shell w)144 444 Q(ord e)-.1 E 2.5 -(xpansions. See)-.15 F/F3 9/Times-Bold@0 SF(HIST)2.5 E(OR)-.162 E 2.25 -(YE)-.315 G(XP)-2.25 E(ANSION)-.666 E F0(belo)2.25 E 2.5(wf)-.25 G -(or a description of history e)-2.5 E(xpansion.)-.15 E F1 -(history\255expand\255line \(M\255^\))108 456 Q F0 .938 -(Perform history e)144 468 R .939(xpansion on the current line.)-.15 F +516 S(rd, as if the \231!$\232 history e).1 E +(xpansion had been speci\214ed.)-.15 E F2 +(shell\255expand\255line \(M\255C\255e\))108 528 Q F1 .367 +(Expand the line by performing shell w)144 540 R .368(ord e)-.1 F 2.868 +(xpansions. This)-.15 F .368(performs alias and history e)2.868 F +(xpansion,)-.15 E F2($)144 552 Q F1<08>A F0(string)A F1 3.358<0861>C(nd) +-3.358 E F2($)3.358 E F1(")A F0(string)A F1 3.358("q)C .857 +(uoting, tilde e)-3.358 F .857(xpansion, parameter and v)-.15 F .857 +(ariable e)-.25 F .857(xpansion, arithmetic e)-.15 F(x-)-.15 E .548 +(pansion, command and process substitution, w)144 564 R .548 +(ord splitting, and quote remo)-.1 F -.25(va)-.15 G 3.049(l. An).25 F +-.15(ex)3.049 G .549(plicit ar).15 F(gu-)-.18 E .61 +(ment suppresses command and process substitution.)144 576 R(See)5.61 E +/F3 9/Times-Bold@0 SF(HIST)3.109 E(OR)-.162 E 2.859(YE)-.315 G(XP)-2.859 +E(ANSION)-.666 E F1(belo)2.859 E 3.109(wf)-.25 G .609(or a de-)-3.109 F +(scription of history e)144 588 Q(xpansion.)-.15 E F2 +(history\255expand\255line \(M\255\000\))108 600 Q F1 .938 +(Perform history e)144 612 R .939(xpansion on the current line.)-.15 F (See)5.939 E F3(HIST)3.439 E(OR)-.162 E 3.189(YE)-.315 G(XP)-3.189 E -(ANSION)-.666 E F0(belo)3.189 E 3.439(wf)-.25 G .939(or a descrip-) --3.439 F(tion of history e)144 480 Q(xpansion.)-.15 E F1(magic\255space) -108 492 Q F0 .438(Perform history e)144 504 R .438 +(ANSION)-.666 E F1(belo)3.189 E 3.439(wf)-.25 G .939(or a descrip-) +-3.439 F(tion of history e)144 624 Q(xpansion.)-.15 E F2(magic\255space) +108 636 Q F1 .438(Perform history e)144 648 R .438 (xpansion on the current line and insert a space.)-.15 F(See)5.437 E F3 -(HIST)2.937 E(OR)-.162 E 2.687(YE)-.315 G(XP)-2.687 E(ANSION)-.666 E F0 -(be-)2.687 E(lo)144 516 Q 2.5(wf)-.25 G(or a description of history e) --2.5 E(xpansion.)-.15 E F1(alias\255expand\255line)108 528 Q F0 .394 -(Perform alias e)144 540 R .394(xpansion on the current line.)-.15 F -(See)5.395 E F3(ALIASES)2.895 E F0(abo)2.645 E .695 -.15(ve f)-.15 H -.395(or a description of alias e).15 F(xpan-)-.15 E(sion.)144 552 Q F1 -(history\255and\255alias\255expand\255line)108 564 Q F0 -(Perform history and alias e)144 576 Q(xpansion on the current line.) --.15 E F1(insert\255last\255ar)108 588 Q(gument \(M\255.)-.1 E 2.5(,M) -.833 G -1.667(\255_ \))-2.5 F F0 2.5(As)144 600 S(ynon)-2.5 E(ym for) --.15 E F1(yank\255last\255ar)2.5 E(g)-.1 E F0(.)A F1 -(edit\255and\255execute\255command \(C\255x C\255e\))108 612 Q F0(In)144 -624 Q -.2(vo)-.4 G .347 -.1(ke a).2 H 2.647(ne).1 G .146 -(ditor on the current command line, and e)-2.647 F -.15(xe)-.15 G .146 -(cute the result as shell commands.).15 F F1(Bash)5.146 E F0(at-)2.646 E -(tempts to in)144 636 Q -.2(vo)-.4 G -.1(ke).2 G F3($VISU)2.6 E(AL)-.54 -E/F4 9/Times-Roman@0 SF(,)A F3($EDIT)2.25 E(OR)-.162 E F4(,)A F0(and) -2.25 E F2(emacs)2.5 E F0(as the editor)2.5 E 2.5(,i)-.4 G 2.5(nt)-2.5 G -(hat order)-2.5 E(.)-.55 E F1(Commands f)87 652.8 Q(or Changing T)-.25 E -(ext)-.92 E F2(end\255of\255\214le)108 664.8 Q F1(\(usually C\255d\))2.5 -E F0 .798(The character indicating end-of-\214le as set, for e)144 676.8 -R .799(xample, by)-.15 F/F5 10/Courier@0 SF(stty)3.299 E F0 5.799(.I)C -3.299(ft)-5.799 G .799(his character is read when)-3.299 F .167 -(there are no characters on the line, and point is at the be)144 688.8 R -.167(ginning of the line, readline interprets it as)-.15 F -(the end of input and returns)144 700.8 Q F3(EOF)2.5 E F4(.)A F0 -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(50)185.115 E 0 Cg EP -%%Page: 51 51 +(HIST)2.937 E(OR)-.162 E 2.687(YE)-.315 G(XP)-2.687 E(ANSION)-.666 E F1 +(be-)2.687 E(lo)144 660 Q 2.5(wf)-.25 G(or a description of history e) +-2.5 E(xpansion.)-.15 E F2(alias\255expand\255line)108 672 Q F1 .394 +(Perform alias e)144 684 R .394(xpansion on the current line.)-.15 F +(See)5.395 E F3(ALIASES)2.895 E F1(abo)2.645 E .695 -.15(ve f)-.15 H +.395(or a description of alias e).15 F(xpan-)-.15 E(sion.)144 696 Q +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(51)193.45 E 0 Cg EP +%%Page: 52 52 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(delete\255char \(C\255d\))108 84 Q F0 .441 -(Delete the character at point.)144 96 R .442 -(If this function is bound to the same character as the tty)5.441 F F1 -(EOF)2.942 E F0(char)2.942 E(-)-.2 E(acter)144 108 Q 2.5(,a)-.4 G(s)-2.5 -E F1(C\255d)2.5 E F0(commonly is, see abo)2.5 E .3 -.15(ve f)-.15 H -(or the ef).15 E(fects.)-.25 E F1(backward\255delete\255char \(Rubout\)) -108 120 Q F0 .553(Delete the character behind the cursor)144 132 R 5.553 -(.W)-.55 G .553(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF +(history\255and\255alias\255expand\255line)108 84 Q F1 +(Perform history and alias e)144 96 Q(xpansion on the current line.)-.15 +E F2(insert\255last\255ar)108 108 Q(gument \(M\255.)-.1 E 2.5(,M).833 G +-1.667(\255_ \))-2.5 F F1 2.5(As)144 120 S(ynon)-2.5 E(ym for)-.15 E F2 +(yank\255last\255ar)2.5 E(g)-.1 E F1(.)A F2 +(edit\255and\255execute\255command \(C\255x C\255e\))108 132 Q F1(In)144 +144 Q -.2(vo)-.4 G .347 -.1(ke a).2 H 2.647(ne).1 G .146 +(ditor on the current command line, and e)-2.647 F -.15(xe)-.15 G .146 +(cute the result as shell commands.).15 F F2(Bash)5.146 E F1(at-)2.646 E +(tempts to in)144 156 Q -.2(vo)-.4 G -.1(ke).2 G/F3 9/Times-Bold@0 SF +($VISU)2.6 E(AL)-.54 E/F4 9/Times-Roman@0 SF(,)A F3($EDIT)2.25 E(OR) +-.162 E F4(,)A F1(and)2.25 E F0(emacs)2.5 E F1(as the editor)2.5 E 2.5 +(,i)-.4 G 2.5(nt)-2.5 G(hat order)-2.5 E(.)-.55 E F2(Commands f)87 172.8 +Q(or Changing T)-.25 E(ext)-.92 E F0(end\255of\255\214le)108 184.8 Q F2 +(\(usually C\255d\))2.5 E F1 .651 +(The character indicating end-of-\214le as set, for e)144 196.8 R .651 +(xample, by)-.15 F F0(stty)3.491 E F1 3.151(\(1\). If).32 F .652 +(this character is read when)3.152 F .167 +(there are no characters on the line, and point is at the be)144 208.8 R +.167(ginning of the line, readline interprets it as)-.15 F +(the end of input and returns)144 220.8 Q F3(EOF)2.5 E F4(.)A F2 +(delete\255char \(C\255d\))108 232.8 Q F1 .441 +(Delete the character at point.)144 244.8 R .442 +(If this function is bound to the same character as the tty)5.441 F F2 +(EOF)2.942 E F1(char)2.942 E(-)-.2 E(acter)144 256.8 Q 2.5(,a)-.4 G(s) +-2.5 E F2(C\255d)2.5 E F1(commonly is, see abo)2.5 E .3 -.15(ve f)-.15 H +(or the ef).15 E(fects.)-.25 E F2(backward\255delete\255char \(Rubout\)) +108 268.8 Q F1 .553(Delete the character behind the cursor)144 280.8 R +5.553(.W)-.55 G .553(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553 (umeric ar)-3.053 F .552(gument, sa)-.18 F .852 -.15(ve t)-.2 H .552 -(he deleted te).15 F .552(xt on)-.15 F(the kill ring.)144 144 Q F1 -.25 -(fo)108 156 S(rward\255backward\255delete\255char).25 E F0 .473 -(Delete the character under the cursor)144 168 R 2.973(,u)-.4 G .474 +(he deleted te).15 F .552(xt on)-.15 F(the kill ring.)144 292.8 Q F2 +-.25(fo)108 304.8 S(rward\255backward\255delete\255char).25 E F1 .473 +(Delete the character under the cursor)144 316.8 R 2.973(,u)-.4 G .474 (nless the cursor is at the end of the line, in which case the)-2.973 F -(character behind the cursor is deleted.)144 180 Q F1 -(quoted\255insert \(C\255q, C\255v\))108 192 Q F0 .779(Add the ne)144 -204 R .779(xt character typed to the line v)-.15 F 3.279(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.278 E F0 3.278(,f)C -(or)-3.278 E -.15(ex)144 216 S(ample.).15 E F1(tab\255insert \(C\255v T) -108 228 Q(AB\))-.9 E F0(Insert a tab character)144 240 Q(.)-.55 E F1 -(self\255insert \(a, b, A, 1, !, ...\))108 252 Q F0 -(Insert the character typed.)144 264 Q F1(transpose\255chars \(C\255t\)) -108 276 Q F0 .321(Drag the character before point forw)144 288 R .321 -(ard o)-.1 F -.15(ve)-.15 G 2.821(rt).15 G .321 -(he character at point, mo)-2.821 F .322(ving point forw)-.15 F .322 -(ard as well.)-.1 F .372 -(If point is at the end of the line, then this transposes the tw)144 300 -R 2.872(oc)-.1 G .372(haracters before point.)-2.872 F(Ne)5.372 E -.05 -(ga)-.15 G(ti).05 E .672 -.15(ve a)-.25 H -.2(r-).15 G(guments ha)144 -312 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1 -(transpose\255w)108 324 Q(ords \(M\255t\))-.1 E F0 .023(Drag the w)144 -336 R .023(ord before point past the w)-.1 F .023(ord after point, mo) +(character behind the cursor is deleted.)144 328.8 Q F2 +(quoted\255insert \(C\255q, C\255v\))108 340.8 Q F1 .779(Add the ne)144 +352.8 R .779(xt character typed to the line v)-.15 F 3.279 +(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 F2(C\255q)3.278 E F1 3.278 +(,f)C(or)-3.278 E -.15(ex)144 364.8 S(ample.).15 E F2 +(tab\255insert \(C\255v T)108 376.8 Q(AB\))-.9 E F1 +(Insert a tab character)144 388.8 Q(.)-.55 E F2 +(self\255insert \(a, b, A, 1, !,)108 400.8 Q F1 1.666(...)2.5 G F2(\)) +-1.666 E F1(Insert the character typed.)144 412.8 Q F2 +(transpose\255chars \(C\255t\))108 424.8 Q F1 .321 +(Drag the character before point forw)144 436.8 R .321(ard o)-.1 F -.15 +(ve)-.15 G 2.821(rt).15 G .321(he character at point, mo)-2.821 F .322 +(ving point forw)-.15 F .322(ard as well.)-.1 F .372 +(If point is at the end of the line, then this transposes the tw)144 +448.8 R 2.872(oc)-.1 G .372(haracters before point.)-2.872 F(Ne)5.372 E +-.05(ga)-.15 G(ti).05 E .672 -.15(ve a)-.25 H -.2(r-).15 G(guments ha) +144 460.8 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F2 +(transpose\255w)108 472.8 Q(ords \(M\255t\))-.1 E F1 .023(Drag the w)144 +484.8 R .023(ord before point past the w)-.1 F .023(ord after point, mo) -.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.524(rt).15 G .024(hat w) -2.524 F .024(ord as well.)-.1 F .024(If point)5.024 F -(is at the end of the line, this transposes the last tw)144 348 Q 2.5 -(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 360 Q -(ord \(M\255u\))-.1 E F0 1.699(Uppercase the current \(or follo)144 372 -R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga) --.15 G(ti).05 E 1.998 -.15(ve a)-.25 H -.18(rg).15 G 1.698 -(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 384 S(rd, b).1 E -(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 396 Q -(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 408 Q 1.647 +(is at the end of the line, this transposes the last tw)144 496.8 Q 2.5 +(ow)-.1 G(ords on the line.)-2.6 E F2(upcase\255w)108 508.8 Q +(ord \(M\255u\))-.1 E F1 1.699(Uppercase the current \(or follo)144 +520.8 R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F +-.05(ga)-.15 G(ti).05 E 1.998 -.15(ve a)-.25 H -.18(rg).15 G 1.698 +(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 532.8 S(rd, b).1 +E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F2(do)108 544.8 Q +(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F1(Lo)144 556.8 Q 1.647 (wercase the current \(or follo)-.25 F 1.647(wing\) w)-.25 F 4.147 (ord. W)-.1 F 1.648(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.948 -.15 (ve a)-.25 H -.18(rg).15 G 1.648(ument, lo).18 F 1.648(wercase the pre) --.25 F(vious)-.25 E -.1(wo)144 420 S(rd, b).1 E(ut do not mo)-.2 E .3 --.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 432 Q -(ord \(M\255c\))-.1 E F0 1.975(Capitalize the current \(or follo)144 444 -R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga) --.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.974 -(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 456 S(rd, b).1 -E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 468 -S(rwrite\255mode).1 E F0 -.8(To)144 480 S .437(ggle o).8 F -.15(ve)-.15 -G .437(rwrite mode.).15 F -.4(Wi)5.437 G .437(th an e).4 F .437 +-.25 F(vious)-.25 E -.1(wo)144 568.8 S(rd, b).1 E(ut do not mo)-.2 E .3 +-.15(ve p)-.15 H(oint.).15 E F2(capitalize\255w)108 580.8 Q +(ord \(M\255c\))-.1 E F1 1.975(Capitalize the current \(or follo)144 +592.8 R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F +-.05(ga)-.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.974 +(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 604.8 S(rd, b) +.1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F2 -.1(ove)108 +616.8 S(rwrite\255mode).1 E F1 -.8(To)144 628.8 S .437(ggle o).8 F -.15 +(ve)-.15 G .437(rwrite mode.).15 F -.4(Wi)5.437 G .437(th an e).4 F .437 (xplicit positi)-.15 F .738 -.15(ve n)-.25 H .438(umeric ar).15 F .438 (gument, switches to o)-.18 F -.15(ve)-.15 G .438(rwrite mode.).15 F -.4 -(Wi)144 492 S .781(th an e).4 F .781(xplicit non-positi)-.15 F 1.081 +(Wi)144 640.8 S .781(th an e).4 F .781(xplicit non-positi)-.15 F 1.081 -.15(ve n)-.25 H .781(umeric ar).15 F .781 (gument, switches to insert mode.)-.18 F .78(This command af)5.781 F -(fects)-.25 E(only)144 504 Q F1(emacs)4.394 E F0(mode;)4.394 E F1(vi) -4.394 E F0 1.894(mode does o)4.394 F -.15(ve)-.15 G 1.894(rwrite dif).15 -F(ferently)-.25 E 6.894(.E)-.65 G 1.894(ach call to)-6.894 F/F2 10 -/Times-Italic@0 SF -.37(re)4.395 G(adline\(\)).37 E F0 1.895 -(starts in insert)4.395 F 3.969(mode. In)144 516 R -.15(ove)3.969 G -1.469(rwrite mode, characters bound to).15 F F1(self\255insert)3.969 E -F0 1.468(replace the te)3.969 F 1.468(xt at point rather than)-.15 F -.957(pushing the te)144 528 R .957(xt to the right.)-.15 F .958 -(Characters bound to)5.957 F F1(backward\255delete\255char)3.458 E F0 -.958(replace the character)3.458 F(before point with a space.)144 540 Q -(By def)5 E(ault, this command is unbound.)-.1 E F1(Killing and Y)87 -556.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 568.8 Q F0 -(Kill the te)144 580.8 Q(xt from point to the end of the line.)-.15 E F1 -(backward\255kill\255line \(C\255x Rubout\))108 592.8 Q F0(Kill backw) -144 604.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1 -(unix\255line\255discard \(C\255u\))108 616.8 Q F0(Kill backw)144 628.8 -Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E -(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) --2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 640.8 Q F0 -(Kill all characters on the current line, no matter where point is.)144 -652.8 Q F1(kill\255w)108 664.8 Q(ord \(M\255d\))-.1 E F0 .729 -(Kill from point to the end of the current w)144 676.8 R .728 -(ord, or if between w)-.1 F .728(ords, to the end of the ne)-.1 F .728 -(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 688.8 S -(rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G -(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 700.8 Q -(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 712.8 Q(ord behind point.) --.1 E -.8(Wo)5 G(rd boundaries are the same as those used by).8 E F1 -(backward\255w)2.5 E(ord)-.1 E F0(.)A(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(51)185.115 E 0 Cg EP -%%Page: 52 52 +(fects)-.25 E(only)144 652.8 Q F2(emacs)4.394 E F1(mode;)4.394 E F2(vi) +4.394 E F1 1.894(mode does o)4.394 F -.15(ve)-.15 G 1.894(rwrite dif).15 +F(ferently)-.25 E 6.894(.E)-.65 G 1.894(ach call to)-6.894 F F0 -.37(re) +4.395 G(adline\(\)).37 E F1 1.895(starts in insert)4.395 F 3.969 +(mode. In)144 664.8 R -.15(ove)3.969 G 1.469 +(rwrite mode, characters bound to).15 F F2(self\255insert)3.969 E F1 +1.468(replace the te)3.969 F 1.468(xt at point rather than)-.15 F .957 +(pushing the te)144 676.8 R .957(xt to the right.)-.15 F .958 +(Characters bound to)5.957 F F2(backward\255delete\255char)3.458 E F1 +.958(replace the character)3.458 F(before point with a space.)144 688.8 +Q(By def)5 E(ault, this command is unbound.)-.1 E F2(Killing and Y)87 +705.6 Q(anking)-.85 E F1(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E +(52)193.45 E 0 Cg EP +%%Page: 53 53 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(shell\255kill\255w)108 84 Q(ord)-.1 E F0 .728 -(Kill from point to the end of the current w)144 96 R .729 -(ord, or if between w)-.1 F .729(ords, to the end of the ne)-.1 F .729 -(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 108 S -(rd boundaries are the same as those used by).8 E F1(shell\255f)2.5 E -(orward\255w)-.25 E(ord)-.1 E F0(.)A F1(shell\255backward\255kill\255w) -108 120 Q(ord)-.1 E F0 3.025(Kill the w)144 132 R 3.025 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(kill\255line \(C\255k\))108 +84 Q F1(Kill the te)144 96 Q(xt from point to the end of the line.)-.15 +E F2(backward\255kill\255line \(C\255x Rubout\))108 108 Q F1(Kill backw) +144 120 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F2 +(unix\255line\255discard \(C\255u\))108 132 Q F1(Kill backw)144 144 Q +(ard from point to the be)-.1 E(ginning of the line.)-.15 E +(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) +-2.5 G(he kill-ring.)-2.5 E F2(kill\255whole\255line)108 156 Q F1 +(Kill all characters on the current line, no matter where point is.)144 +168 Q F2(kill\255w)108 180 Q(ord \(M\255d\))-.1 E F1 .729 +(Kill from point to the end of the current w)144 192 R .728 +(ord, or if between w)-.1 F .728(ords, to the end of the ne)-.1 F .728 +(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 204 S +(rd boundaries are the same as those used by).8 E F2 -.25(fo)2.5 G +(rward\255w).25 E(ord)-.1 E F1(.)A F2(backward\255kill\255w)108 216 Q +(ord \(M\255Rubout\))-.1 E F1(Kill the w)144 228 Q(ord behind point.)-.1 +E -.8(Wo)5 G(rd boundaries are the same as those used by).8 E F2 +(backward\255w)2.5 E(ord)-.1 E F1(.)A F2(shell\255kill\255w)108 240 Q +(ord)-.1 E F1 .728(Kill from point to the end of the current w)144 252 R +.729(ord, or if between w)-.1 F .729(ords, to the end of the ne)-.1 F +.729(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 264 S +(rd boundaries are the same as those used by).8 E F2(shell\255f)2.5 E +(orward\255w)-.25 E(ord)-.1 E F1(.)A F2(shell\255backward\255kill\255w) +108 276 Q(ord)-.1 E F1 3.025(Kill the w)144 288 R 3.025 (ord behind point.)-.1 F -.8(Wo)8.025 G 3.025 -(rd boundaries are the same as those used by).8 F F1(shell\255back-) -5.525 E(ward\255w)144 144 Q(ord)-.1 E F0(.)A F1(unix\255w)108 156 Q -(ord\255rubout \(C\255w\))-.1 E F0 .364(Kill the w)144 168 R .364 +(rd boundaries are the same as those used by).8 F F2(shell\255back-) +5.525 E(ward\255w)144 300 Q(ord)-.1 E F1(.)A F2(unix\255w)108 312 Q +(ord\255rubout \(C\255w\))-.1 E F1 .364(Kill the w)144 324 R .364 (ord behind point, using white space as a w)-.1 F .365(ord boundary)-.1 F 5.365(.T)-.65 G .365(he killed te)-5.365 F .365(xt is sa)-.15 F -.15 (ve)-.2 G 2.865(do).15 G 2.865(nt)-2.865 G(he)-2.865 E(kill-ring.)144 -180 Q F1(unix\255\214lename\255rubout)108 192 Q F0 .167(Kill the w)144 -204 R .166 +336 Q F2(unix\255\214lename\255rubout)108 348 Q F1 .167(Kill the w)144 +360 R .166 (ord behind point, using white space and the slash character as the w) --.1 F .166(ord boundaries.)-.1 F(The)5.166 E(killed te)144 216 Q +-.1 F .166(ord boundaries.)-.1 F(The)5.166 E(killed te)144 372 Q (xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)-2.5 G(he kill-ring.) --2.5 E F1(delete\255horizontal\255space \(M\255\\\))108 228 Q F0 -(Delete all spaces and tabs around point.)144 240 Q F1(kill\255r)108 252 -Q(egion)-.18 E F0(Kill the te)144 264 Q(xt in the current re)-.15 E -(gion.)-.15 E F1(copy\255r)108 276 Q(egion\255as\255kill)-.18 E F0(Cop) -144 288 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 F1 -(copy\255backward\255w)108 300 Q(ord)-.1 E F0(Cop)144 312 Q 4.8(yt)-.1 G +-2.5 E F2(delete\255horizontal\255space \(M\255\\\))108 384 Q F1 +(Delete all spaces and tabs around point.)144 396 Q F2(kill\255r)108 408 +Q(egion)-.18 E F1(Kill the te)144 420 Q(xt in the current re)-.15 E +(gion.)-.15 E F2(copy\255r)108 432 Q(egion\255as\255kill)-.18 E F1(Cop) +144 444 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 F2 +(copy\255backward\255w)108 456 Q(ord)-.1 E F1(Cop)144 468 Q 4.8(yt)-.1 G 2.3(he w)-4.8 F 2.3(ord before point to the kill b)-.1 F(uf)-.2 E(fer) -.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.301 -(ord boundaries are the same as)-.1 F F1(back-)4.801 E(ward\255w)144 324 -Q(ord)-.1 E F0(.)A F1(copy\255f)108 336 Q(orward\255w)-.25 E(ord)-.1 E -F0(Cop)144 348 Q 4.508(yt)-.1 G 2.008(he w)-4.508 F 2.008(ord follo)-.1 +(ord boundaries are the same as)-.1 F F2(back-)4.801 E(ward\255w)144 480 +Q(ord)-.1 E F1(.)A F2(copy\255f)108 492 Q(orward\255w)-.25 E(ord)-.1 E +F1(Cop)144 504 Q 4.508(yt)-.1 G 2.008(he w)-4.508 F 2.008(ord follo)-.1 F 2.008(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.007(.T) --.55 G 2.007(he w)-7.007 F 2.007(ord boundaries are the same as)-.1 F F1 --.25(fo)4.507 G -.37(r-).25 G(ward\255w)144 360 Q(ord)-.1 E F0(.)A F1 -(yank \(C\255y\))108 372 Q F0 -1(Ya)144 384 S +-.55 G 2.007(he w)-7.007 F 2.007(ord boundaries are the same as)-.1 F F2 +-.25(fo)4.507 G -.37(r-).25 G(ward\255w)144 516 Q(ord)-.1 E F1(.)A F2 +(yank \(C\255y\))108 528 Q F1 -1(Ya)144 540 S (nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25 -E F1(yank\255pop \(M\255y\))108 396 Q F0 -(Rotate the kill ring, and yank the ne)144 408 Q 2.5(wt)-.25 G 2.5 -(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E -F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 424.8 Q -(guments)-.1 E(digit\255ar)108 436.8 Q -(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .367 -(Add this digit to the ar)144 448.8 R .367 +E F2(yank\255pop \(M\255y\))108 552 Q F1 +(Rotate the kill ring, and yank the ne)144 564 Q 2.5(wt)-.25 G 2.5 +(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F2(yank)2.5 E +F1(or)2.5 E F2(yank\255pop)2.5 E F1(.)A F2(Numeric Ar)87 580.8 Q +(guments)-.1 E(digit\255ar)108 592.8 Q(gument \(M\2550, M\2551,)-.1 E F1 +1.666(...)2.5 G F2 2.5(,M)-1.666 G<adad29>-2.5 E F1 .367 +(Add this digit to the ar)144 604.8 R .367 (gument already accumulating, or start a ne)-.18 F 2.867(wa)-.25 G -.18 (rg)-2.867 G 2.867(ument. M\255\255).18 F .367(starts a ne)2.867 F -.05 -(ga)-.15 G(-).05 E(ti)144 460.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G -(ument.).18 E F1(uni)108 472.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 -E F0 .779(This is another w)144 484.8 R .779(ay to specify an ar)-.1 F +(ga)-.15 G(-).05 E(ti)144 616.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G +(ument.).18 E F2(uni)108 628.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 +E F1 .779(This is another w)144 640.8 R .779(ay to specify an ar)-.1 F 3.279(gument. If)-.18 F .779(this command is follo)3.279 F .778 (wed by one or more digits,)-.25 F 1.376 (optionally with a leading minus sign, those digits de\214ne the ar)144 -496.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 -508.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni) -3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17 +652.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 +664.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F2(uni) +3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F1(ag)3.67 E 1.17 (ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other) --.2 F(-)-.2 E .898(wise ignored.)144 520.8 R .898 +-.2 F(-)-.2 E .898(wise ignored.)144 676.8 R .898 (As a special case, if this command is immediately follo)5.898 F .898 (wed by a character that is)-.25 F 1.23 -(neither a digit nor minus sign, the ar)144 532.8 R 1.23 +(neither a digit nor minus sign, the ar)144 688.8 R 1.23 (gument count for the ne)-.18 F 1.23(xt command is multiplied by four) --.15 F(.)-.55 E .822(The ar)144 544.8 R .822 +-.15 F(.)-.55 E .822(The ar)144 700.8 R .822 (gument count is initially one, so e)-.18 F -.15(xe)-.15 G .823 (cuting this function the \214rst time mak).15 F .823(es the ar)-.1 F -(gument)-.18 E(count four)144 556.8 Q 2.5(,as)-.4 G(econd time mak)-2.5 -E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1(Completing) -87 573.6 Q(complete \(T)108 585.6 Q(AB\))-.9 E F0 1.137 -(Attempt to perform completion on the te)144 597.6 R 1.137 -(xt before point.)-.15 F F1(Bash)6.137 E F0 1.137 -(attempts completion treating the)3.637 F(te)144 609.6 Q .532(xt as a v) --.15 F .532(ariable \(if the te)-.25 F .532(xt be)-.15 F .533(gins with) --.15 F F1($)3.033 E F0 .533(\), username \(if the te)B .533(xt be)-.15 F -.533(gins with)-.15 F F1(~)3.033 E F0 .533(\), hostname \(if the)B(te) -144 621.6 Q .702(xt be)-.15 F .702(gins with)-.15 F F1(@)3.202 E F0 .701 -(\), or command \(including aliases and functions\) in turn.)B .701 -(If none of these pro-)5.701 F -(duces a match, \214lename completion is attempted.)144 633.6 Q F1 -(possible\255completions \(M\255?\))108 645.6 Q F0 -(List the possible completions of the te)144 657.6 Q(xt before point.) --.15 E F1(insert\255completions \(M\255*\))108 669.6 Q F0 .783 -(Insert all completions of the te)144 681.6 R .783 -(xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H -.783(een generated by).15 F F1(possible\255com-)3.283 E(pletions)144 -693.6 Q F0(.)A F1(menu\255complete)108 705.6 Q F0 .929(Similar to)144 -717.6 R F1(complete)3.429 E F0 3.429(,b)C .929(ut replaces the w)-3.629 -F .929(ord to be completed with a single match from the list of)-.1 F -1.193(possible completions.)144 729.6 R 1.193(Repeated e)6.193 F -.15 -(xe)-.15 G 1.193(cution of).15 F F1(menu\255complete)3.694 E F0 1.194 -(steps through the list of possible)3.694 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(52)185.115 E 0 Cg EP -%%Page: 53 53 +(gument)-.18 E(count four)144 712.8 Q 2.5(,as)-.4 G(econd time mak)-2.5 +E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E(GNU Bash 5.3) +72 768 Q(2024 March 29)144.29 E(53)193.45 E 0 Cg EP +%%Page: 54 54 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .829 -(completions, inserting each match in turn.)144 84 R .828 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(Completing)87 84 Q +(complete \(T)108 96 Q(AB\))-.9 E F1 1.137 +(Attempt to perform completion on the te)144 108 R 1.137 +(xt before point.)-.15 F F2(Bash)6.137 E F1 1.137 +(attempts completion treating the)3.637 F(te)144 120 Q .434(xt as a v) +-.15 F .434(ariable \(if the te)-.25 F .434(xt be)-.15 F .434(gins with) +-.15 F F2($)2.934 E F1 .434(\), username \(if the te)B .434(xt be)-.15 F +.434(gins with)-.15 F F2<01>2.935 E F1 .435(\), hostname \(if the)B(te) +144 132 Q .702(xt be)-.15 F .702(gins with)-.15 F F2(@)3.202 E F1 .701 +(\), or command \(including aliases and functions\) in turn.)B .701 +(If none of these pro-)5.701 F +(duces a match, \214lename completion is attempted.)144 144 Q F2 +(possible\255completions \(M\255?\))108 156 Q F1 +(List the possible completions of the te)144 168 Q(xt before point.)-.15 +E F2(insert\255completions \(M\255*\))108 180 Q F1 .783 +(Insert all completions of the te)144 192 R .783(xt before point that w) +-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H .783(een generated by) +.15 F F2(possible\255com-)3.283 E(pletions)144 204 Q F1(.)A F2 +(menu\255complete)108 216 Q F1 .929(Similar to)144 228 R F2(complete) +3.429 E F1 3.429(,b)C .929(ut replaces the w)-3.629 F .929 +(ord to be completed with a single match from the list of)-.1 F 1.193 +(possible completions.)144 240 R 1.193(Repeated e)6.193 F -.15(xe)-.15 G +1.193(cution of).15 F F2(menu\255complete)3.694 E F1 1.194 +(steps through the list of possible)3.694 F .829 +(completions, inserting each match in turn.)144 252 R .828 (At the end of the list of completions, the bell is rung)5.828 F .727 -(\(subject to the setting of)144 96 R/F1 10/Times-Bold@0 SF -(bell\255style)3.227 E F0 3.227(\)a)C .727(nd the original te)-3.227 F -.727(xt is restored.)-.15 F .727(An ar)5.727 F .727(gument of)-.18 F/F2 -10/Times-Italic@0 SF(n)3.227 E F0(mo)3.227 E -.15(ve)-.15 G(s).15 E F2 -(n)3.228 E F0 1.73(positions forw)144 108 R 1.73 +(\(subject to the setting of)144 264 R F2(bell\255style)3.227 E F1 3.227 +(\)a)C .727(nd the original te)-3.227 F .727(xt is restored.)-.15 F .727 +(An ar)5.727 F .727(gument of)-.18 F F0(n)3.227 E F1(mo)3.227 E -.15(ve) +-.15 G(s).15 E F0(n)3.228 E F1 1.73(positions forw)144 276 R 1.73 (ard in the list of matches; a ne)-.1 F -.05(ga)-.15 G(ti).05 E 2.03 -.15(ve a)-.25 H -.18(rg).15 G 1.73(ument may be used to mo).18 F 2.03 --.15(ve b)-.15 H(ackw).15 E(ard)-.1 E(through the list.)144 120 Q -(This command is intended to be bound to)5 E F1 -.9(TA)2.5 G(B).9 E F0 -2.5(,b)C(ut is unbound by def)-2.7 E(ault.)-.1 E F1 -(menu\255complete\255backward)108 132 Q F0 .82(Identical to)144 144 R F1 -(menu\255complete)3.32 E F0 3.32(,b)C .82(ut mo)-3.52 F -.15(ve)-.15 G +-.15(ve b)-.15 H(ackw).15 E(ard)-.1 E(through the list.)144 288 Q +(This command is intended to be bound to)5 E F2 -.9(TA)2.5 G(B).9 E F1 +2.5(,b)C(ut is unbound by def)-2.7 E(ault.)-.1 E F2 +(menu\255complete\255backward)108 300 Q F1 .82(Identical to)144 312 R F2 +(menu\255complete)3.32 E F1 3.32(,b)C .82(ut mo)-3.52 F -.15(ve)-.15 G 3.32(sb).15 G(ackw)-3.32 E .82 -(ard through the list of possible completions, as if)-.1 F F1 -(menu\255complete)144 156 Q F0(had been gi)2.5 E -.15(ve)-.25 G 2.5(nan) +(ard through the list of possible completions, as if)-.1 F F2 +(menu\255complete)144 324 Q F1(had been gi)2.5 E -.15(ve)-.25 G 2.5(nan) .15 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve a)-.25 H -.18(rg).15 G -2.5(ument. This).18 F(command is unbound by def)2.5 E(ault.)-.1 E F1 -(delete\255char\255or\255list)108 168 Q F0 .234 -(Deletes the character under the cursor if not at the be)144 180 R .234 -(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete\255char)2.734 -E F0(\).)A .425(If at the end of the line, beha)144 192 R -.15(ve)-.2 G -2.925(si).15 G .425(dentically to)-2.925 F F1(possible\255completions) -2.925 E F0 5.425(.T)C .425(his command is unbound)-5.425 F(by def)144 -204 Q(ault.)-.1 E F1(complete\255\214lename \(M\255/\))108 216 Q F0 -(Attempt \214lename completion on the te)144 228 Q(xt before point.)-.15 -E F1(possible\255\214lename\255completions \(C\255x /\))108 240 Q F0 -(List the possible completions of the te)144 252 Q -(xt before point, treating it as a \214lename.)-.15 E F1 -(complete\255user)108 264 Q(name \(M\255~\))-.15 E F0 -(Attempt completion on the te)144 276 Q -(xt before point, treating it as a username.)-.15 E F1(possible\255user) -108 288 Q(name\255completions \(C\255x ~\))-.15 E F0 -(List the possible completions of the te)144 300 Q -(xt before point, treating it as a username.)-.15 E F1(complete\255v)108 -312 Q(ariable \(M\255$\))-.1 E F0(Attempt completion on the te)144 324 Q -(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1 -(possible\255v)108 336 Q(ariable\255completions \(C\255x $\))-.1 E F0 -(List the possible completions of the te)144 348 Q -(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1 -(complete\255hostname \(M\255@\))108 360 Q F0 -(Attempt completion on the te)144 372 Q -(xt before point, treating it as a hostname.)-.15 E F1 -(possible\255hostname\255completions \(C\255x @\))108 384 Q F0 -(List the possible completions of the te)144 396 Q -(xt before point, treating it as a hostname.)-.15 E F1 -(complete\255command \(M\255!\))108 408 Q F0 .581 -(Attempt completion on the te)144 420 R .581 +2.5(ument. This).18 F(command is unbound by def)2.5 E(ault.)-.1 E F2 +(delete\255char\255or\255list)108 336 Q F1 .234 +(Deletes the character under the cursor if not at the be)144 348 R .234 +(ginning or end of the line \(lik)-.15 F(e)-.1 E F2(delete\255char)2.734 +E F1(\).)A .425(If at the end of the line, beha)144 360 R -.15(ve)-.2 G +2.925(si).15 G .425(dentically to)-2.925 F F2(possible\255completions) +2.925 E F1 5.425(.T)C .425(his command is unbound)-5.425 F(by def)144 +372 Q(ault.)-.1 E F2(complete\255\214lename \(M\255/\))108 384 Q F1 +(Attempt \214lename completion on the te)144 396 Q(xt before point.)-.15 +E F2(possible\255\214lename\255completions \(C\255x /\))108 408 Q F1 +(List the possible completions of the te)144 420 Q +(xt before point, treating it as a \214lename.)-.15 E F2 +(complete\255user)108 432 Q(name \(M\255\001\))-.15 E F1 +(Attempt completion on the te)144 444 Q +(xt before point, treating it as a username.)-.15 E F2(possible\255user) +108 456 Q(name\255completions \(C\255x \001\))-.15 E F1 +(List the possible completions of the te)144 468 Q +(xt before point, treating it as a username.)-.15 E F2(complete\255v)108 +480 Q(ariable \(M\255$\))-.1 E F1(Attempt completion on the te)144 492 Q +(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F2 +(possible\255v)108 504 Q(ariable\255completions \(C\255x $\))-.1 E F1 +(List the possible completions of the te)144 516 Q +(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F2 +(complete\255hostname \(M\255@\))108 528 Q F1 +(Attempt completion on the te)144 540 Q +(xt before point, treating it as a hostname.)-.15 E F2 +(possible\255hostname\255completions \(C\255x @\))108 552 Q F1 +(List the possible completions of the te)144 564 Q +(xt before point, treating it as a hostname.)-.15 E F2 +(complete\255command \(M\255!\))108 576 Q F1 .581 +(Attempt completion on the te)144 588 R .581 (xt before point, treating it as a command name.)-.15 F .58 -(Command comple-)5.58 F .715(tion attempts to match the te)144 432 R +(Command comple-)5.58 F .715(tion attempts to match the te)144 600 R .715(xt ag)-.15 F .715(ainst aliases, reserv)-.05 F .715(ed w)-.15 F .715(ords, shell functions, shell b)-.1 F .715(uiltins, and)-.2 F -(\214nally e)144 444 Q -.15(xe)-.15 G -(cutable \214lenames, in that order).15 E(.)-.55 E F1 -(possible\255command\255completions \(C\255x !\))108 456 Q F0 -(List the possible completions of the te)144 468 Q -(xt before point, treating it as a command name.)-.15 E F1 -(dynamic\255complete\255history \(M\255T)108 480 Q(AB\))-.9 E F0 .425 -(Attempt completion on the te)144 492 R .425 +(\214nally e)144 612 Q -.15(xe)-.15 G +(cutable \214lenames, in that order).15 E(.)-.55 E F2 +(possible\255command\255completions \(C\255x !\))108 624 Q F1 +(List the possible completions of the te)144 636 Q +(xt before point, treating it as a command name.)-.15 E F2 +(dynamic\255complete\255history \(M\255T)108 648 Q(AB\))-.9 E F1 .425 +(Attempt completion on the te)144 660 R .425 (xt before point, comparing the te)-.15 F .425(xt ag)-.15 F .424 (ainst lines from the history list)-.05 F -(for possible completion matches.)144 504 Q F1(dab)108 516 Q(br)-.1 E --.15(ev)-.18 G(\255expand).15 E F0 .61 -(Attempt menu completion on the te)144 528 R .611 +(for possible completion matches.)144 672 Q F2(dab)108 684 Q(br)-.1 E +-.15(ev)-.18 G(\255expand).15 E F1 .61 +(Attempt menu completion on the te)144 696 R .611 (xt before point, comparing the te)-.15 F .611(xt ag)-.15 F .611 (ainst lines from the his-)-.05 F -(tory list for possible completion matches.)144 540 Q F1 -(complete\255into\255braces \(M\255{\))108 552 Q F0 .4(Perform \214lena\ -me completion and insert the list of possible completions enclosed with\ -in braces so)144 564 R(the list is a)144 576 Q -.25(va)-.2 G -(ilable to the shell \(see).25 E F1(Brace Expansion)2.5 E F0(abo)2.5 E --.15(ve)-.15 G(\).).15 E F1 -.25(Ke)87 592.8 S(yboard Macr).25 E(os)-.18 -E(start\255kbd\255macr)108 604.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)) -.833 E F0(Be)144 616.8 Q(gin sa)-.15 E -(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G -(board macro.).15 E F1(end\255kbd\255macr)108 628.8 Q 2.5(o\()-.18 G -(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 640.8 Q -(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G -(board macro and store the de\214nition.).15 E F1 -(call\255last\255kbd\255macr)108 652.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5 -E F0(Re-e)144 664.8 Q -.15(xe)-.15 G .999(cute the last k).15 F -.15(ey) --.1 G .999(board macro de\214ned, by making the characters in the macro\ - appear as if).15 F(typed at the k)144 676.8 Q -.15(ey)-.1 G(board.).15 -E F1(print\255last\255kbd\255macr)108 688.8 Q 2.5(o\()-.18 G(\))-2.5 E -F0(Print the last k)144 700.8 Q -.15(ey)-.1 G -(board macro de\214ned in a format suitable for the).15 E F2(inputr)2.5 -E(c)-.37 E F0(\214le.)2.5 E(GNU Bash 5.2)72 768 Q(2022 September 19) -135.955 E(53)185.115 E 0 Cg EP -%%Page: 54 54 +(tory list for possible completion matches.)144 708 Q(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(54)193.45 E 0 Cg EP +%%Page: 55 55 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(Miscellaneous)87 84 Q -.18(re)108 96 S<ad72>.18 E -(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.777 -(Read in the contents of the)144 108 R/F2 10/Times-Italic@0 SF(inputr) -4.277 E(c)-.37 E F0 1.776(\214le, and incorporate an)4.276 F 4.276(yb) --.15 G 1.776(indings or v)-4.276 F 1.776(ariable assignments)-.25 F -(found there.)144 120 Q F1(abort \(C\255g\))108 132 Q F0 3.248 -(Abort the current editing command and ring the terminal')144 144 R -5.749(sb)-.55 G 3.249(ell \(subject to the setting of)-5.749 F F1 -(bell\255style)144 156 Q F0(\).)A F1(do\255lo)108 168 Q(wer)-.1 E -(case\255v)-.18 E(ersion \(M\255A, M\255B, M\255)-.1 E F2(x)A F1 2.5(,.) -C(..\))-2.5 E F0 1.739(If the meta\214ed character)144 180 R F2(x)4.239 -E F0 1.739 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF +(complete\255into\255braces \(M\255{\))108 84 Q F1 .4(Perform \214lenam\ +e completion and insert the list of possible completions enclosed withi\ +n braces so)144 96 R(the list is a)144 108 Q -.25(va)-.2 G +(ilable to the shell \(see).25 E F2(Brace Expansion)2.5 E F1(abo)2.5 E +-.15(ve)-.15 G(\).).15 E F2 -.25(Ke)87 124.8 S(yboard Macr).25 E(os)-.18 +E(start\255kbd\255macr)108 136.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)) +.833 E F1(Be)144 148.8 Q(gin sa)-.15 E +(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G +(board macro.).15 E F2(end\255kbd\255macr)108 160.8 Q 2.5(o\()-.18 G +(C\255x \))-2.5 E(\)).833 E F1(Stop sa)144 172.8 Q +(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G +(board macro and store the de\214nition.).15 E F2 +(call\255last\255kbd\255macr)108 184.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5 +E F1(Re-e)144 196.8 Q -.15(xe)-.15 G .999(cute the last k).15 F -.15(ey) +-.1 G .999(board macro de\214ned, by making the characters in the macro\ + appear as if).15 F(typed at the k)144 208.8 Q -.15(ey)-.1 G(board.).15 +E F2(print\255last\255kbd\255macr)108 220.8 Q 2.5(o\()-.18 G(\))-2.5 E +F1(Print the last k)144 232.8 Q -.15(ey)-.1 G +(board macro de\214ned in a format suitable for the).15 E F0(inputr)2.5 +E(c)-.37 E F1(\214le.)2.5 E F2(Miscellaneous)87 249.6 Q -.18(re)108 +261.6 S<ad72>.18 E(ead\255init\255\214le \(C\255x C\255r\))-.18 E F1 +1.777(Read in the contents of the)144 273.6 R F0(inputr)4.277 E(c)-.37 E +F1 1.776(\214le, and incorporate an)4.276 F 4.276(yb)-.15 G 1.776 +(indings or v)-4.276 F 1.776(ariable assignments)-.25 F(found there.)144 +285.6 Q F2(abort \(C\255g\))108 297.6 Q F1 3.248 +(Abort the current editing command and ring the terminal')144 309.6 R +5.749(sb)-.55 G 3.249(ell \(subject to the setting of)-5.749 F F2 +(bell\255style)144 321.6 Q F1(\).)A F2(do\255lo)108 333.6 Q(wer)-.1 E +(case\255v)-.18 E(ersion \(M\255A, M\255B, M\255)-.1 E F0(x)A F2(,)A F1 +1.666(...)2.5 G F2(\))-1.666 E F1 1.739(If the meta\214ed character)144 +345.6 R F0(x)4.239 E F1 1.739 (is uppercase, run the command that is bound to the corresponding)4.239 -F(meta\214ed lo)144 192 Q(wercase character)-.25 E 5(.T)-.55 G(he beha) --5 E(vior is unde\214ned if)-.2 E F2(x)2.5 E F0(is already lo)2.5 E -(wercase.)-.25 E F1(pr)108 204 Q(e\214x\255meta \(ESC\))-.18 E F0 -(Metafy the ne)144 216 Q(xt character typed.)-.15 E/F3 9/Times-Bold@0 SF -(ESC)5 E F1(f)2.25 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1 -(Meta\255f)2.5 E F0(.)A F1(undo \(C\255_, C\255x C\255u\))108 228 Q F0 -(Incremental undo, separately remembered for each line.)144 240 Q F1 --2.29 -.18(re v)108 252 T(ert\255line \(M\255r\)).08 E F0 .23 -(Undo all changes made to this line.)144 264 R .231(This is lik)5.23 F -2.731(ee)-.1 G -.15(xe)-2.881 G .231(cuting the).15 F F1(undo)2.731 E F0 +F(meta\214ed lo)144 357.6 Q(wercase character)-.25 E 5(.T)-.55 G +(he beha)-5 E(vior is unde\214ned if)-.2 E F0(x)2.5 E F1(is already lo) +2.5 E(wercase.)-.25 E F2(pr)108 369.6 Q(e\214x\255meta \(ESC\))-.18 E F1 +(Metafy the ne)144 381.6 Q(xt character typed.)-.15 E/F3 9/Times-Bold@0 +SF(ESC)5 E F2(f)2.25 E F1(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F2 +(Meta\255f)2.5 E F1(.)A F2(undo \(C\255_, C\255x C\255u\))108 393.6 Q F1 +(Incremental undo, separately remembered for each line.)144 405.6 Q F2 +-2.29 -.18(re v)108 417.6 T(ert\255line \(M\255r\)).08 E F1 .23 +(Undo all changes made to this line.)144 429.6 R .231(This is lik)5.23 F +2.731(ee)-.1 G -.15(xe)-2.881 G .231(cuting the).15 F F2(undo)2.731 E F1 .231(command enough times to re-)2.731 F -(turn the line to its initial state.)144 276 Q F1 -(tilde\255expand \(M\255&\))108 288 Q F0(Perform tilde e)144 300 Q -(xpansion on the current w)-.15 E(ord.)-.1 E F1 -(set\255mark \(C\255@, M\255<space>\))108 312 Q F0 -(Set the mark to the point.)144 324 Q(If a numeric ar)5 E -(gument is supplied, the mark is set to that position.)-.18 E F1 -(exchange\255point\255and\255mark \(C\255x C\255x\))108 336 Q F0(Sw)144 -348 Q .283(ap the point with the mark.)-.1 F .283 +(turn the line to its initial state.)144 441.6 Q F2 +(tilde\255expand \(M\255&\))108 453.6 Q F1(Perform tilde e)144 465.6 Q +(xpansion on the current w)-.15 E(ord.)-.1 E F2 +(set\255mark \(C\255@, M\255<space>\))108 477.6 Q F1 +(Set the mark to the point.)144 489.6 Q(If a numeric ar)5 E +(gument is supplied, the mark is set to that position.)-.18 E F2 +(exchange\255point\255and\255mark \(C\255x C\255x\))108 501.6 Q F1(Sw) +144 513.6 Q .283(ap the point with the mark.)-.1 F .283 (The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G 2.782(dp).15 G .282(osition, and the old)-2.782 F(cursor position is sa) -144 360 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1 -(character\255sear)108 372 Q(ch \(C\255]\))-.18 E F0 3.111(Ac)144 384 S -.611(haracter is read and point is mo)-3.111 F -.15(ve)-.15 G 3.112(dt) -.15 G 3.112(ot)-3.112 G .612(he ne)-3.112 F .612 +144 525.6 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F2 +(character\255sear)108 537.6 Q(ch \(C\255]\))-.18 E F1 3.111(Ac)144 +549.6 S .611(haracter is read and point is mo)-3.111 F -.15(ve)-.15 G +3.112(dt).15 G 3.112(ot)-3.112 G .612(he ne)-3.112 F .612 (xt occurrence of that character)-.15 F 5.612(.A)-.55 G(ne)-2.5 E -.05 (ga)-.15 G(ti).05 E .912 -.15(ve a)-.25 H -.18(rg).15 G(u-).18 E -(ment searches for pre)144 396 Q(vious occurrences.)-.25 E F1 -(character\255sear)108 408 Q(ch\255backward \(M\255C\255]\))-.18 E F0 -2.695(Ac)144 420 S .194(haracter is read and point is mo)-2.695 F -.15 +(ment searches for pre)144 561.6 Q(vious occurrences.)-.25 E F2 +(character\255sear)108 573.6 Q(ch\255backward \(M\255C\255]\))-.18 E F1 +2.695(Ac)144 585.6 S .194(haracter is read and point is mo)-2.695 F -.15 (ve)-.15 G 2.694(dt).15 G 2.694(ot)-2.694 G .194(he pre)-2.694 F .194 (vious occurrence of that character)-.25 F 5.194(.A)-.55 G(ne)-2.5 E -.05(ga)-.15 G(ti).05 E .494 -.15(ve a)-.25 H -.2(r-).15 G -(gument searches for subsequent occurrences.)144 432 Q F1 -(skip\255csi\255sequence)108 444 Q F0 1.826 -(Read enough characters to consume a multi-k)144 456 R 2.126 -.15(ey s) --.1 H 1.827(equence such as those de\214ned for k).15 F -.15(ey)-.1 G -4.327(sl).15 G(ik)-4.327 E(e)-.1 E .791(Home and End.)144 468 R .791 -(Such sequences be)5.791 F .791 +(gument searches for subsequent occurrences.)144 597.6 Q F2 +(skip\255csi\255sequence)108 609.6 Q F1 1.826 +(Read enough characters to consume a multi-k)144 621.6 R 2.126 -.15 +(ey s)-.1 H 1.827(equence such as those de\214ned for k).15 F -.15(ey) +-.1 G 4.327(sl).15 G(ik)-4.327 E(e)-.1 E .791(Home and End.)144 633.6 R +.791(Such sequences be)5.791 F .791 (gin with a Control Sequence Indicator \(CSI\), usually ESC\255[.)-.15 F -.331(If this sequence is bound to "\\[", k)144 480 R -.15(ey)-.1 G 2.831 -(sp).15 G .331(roducing such sequences will ha)-2.831 F .632 -.15(ve n) --.2 H 2.832(oe).15 G -.25(ff)-2.832 G .332(ect unless e).25 F(xplic-) --.15 E .026(itly bound to a readline command, instead of inserting stra\ -y characters into the editing b)144 492 R(uf)-.2 E(fer)-.25 E 5.026(.T) --.55 G(his)-5.026 E(is unbound by def)144 504 Q(ault, b)-.1 E -(ut usually bound to ESC\255[.)-.2 E F1(insert\255comment \(M\255#\))108 -516 Q F0 -.4(Wi)144 528 S .48(thout a numeric ar).4 F .48(gument, the v) --.18 F .481(alue of the readline)-.25 F F1(comment\255begin)2.981 E F0 --.25(va)2.981 G .481(riable is inserted at the).25 F(be)144 540 Q .245 +.286(If this sequence is bound to \231\\[\232, k)144 645.6 R -.15(ey)-.1 +G 2.786(sp).15 G .286(roducing such sequences will ha)-2.786 F .587 -.15 +(ve n)-.2 H 2.787(oe).15 G -.25(ff)-2.787 G .287(ect unless e).25 F +(xplic-)-.15 E .026(itly bound to a readline command, instead of insert\ +ing stray characters into the editing b)144 657.6 R(uf)-.2 E(fer)-.25 E +5.026(.T)-.55 G(his)-5.026 E(is unbound by def)144 669.6 Q(ault, b)-.1 E +(ut usually bound to ESC\255[.)-.2 E F2(insert\255comment \(M\255#\))108 +681.6 Q F1 -.4(Wi)144 693.6 S .48(thout a numeric ar).4 F .48 +(gument, the v)-.18 F .481(alue of the readline)-.25 F F2 +(comment\255begin)2.981 E F1 -.25(va)2.981 G .481 +(riable is inserted at the).25 F(be)144 705.6 Q .245 (ginning of the current line.)-.15 F .245(If a numeric ar)5.245 F .244 (gument is supplied, this command acts as a toggle: if)-.18 F .321 -(the characters at the be)144 552 R .321 -(ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1 -(comment\255begin)2.821 E F0 2.822(,t)C .322(he v)-2.822 F .322(alue is) --.25 F .832(inserted, otherwise the characters in)144 564 R F1 -(comment\255begin)3.332 E F0 .831(are deleted from the be)3.332 F .831 -(ginning of the line.)-.15 F 1.468 -(In either case, the line is accepted as if a ne)144 576 R 1.468 +(the characters at the be)144 717.6 R .321 +(ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F2 +(comment\255begin)2.821 E F1 2.822(,t)C .322(he v)-2.822 F .322(alue is) +-.25 F .832(inserted, otherwise the characters in)144 729.6 R F2 +(comment\255begin)3.332 E F1 .831(are deleted from the be)3.332 F .831 +(ginning of the line.)-.15 F(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 +E(55)193.45 E 0 Cg EP +%%Page: 56 56 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E 1.468 +(In either case, the line is accepted as if a ne)144 84 R 1.468 (wline had been typed.)-.25 F 1.469(The def)6.469 F 1.469(ault v)-.1 F -1.469(alue of)-.25 F F1(com-)3.969 E(ment\255begin)144 588 Q F0 .84 -(causes this command to mak)3.34 F 3.339(et)-.1 G .839 +1.469(alue of)-.25 F/F2 10/Times-Bold@0 SF(com-)3.969 E(ment\255begin) +144 96 Q F1 .84(causes this command to mak)3.34 F 3.339(et)-.1 G .839 (he current line a shell comment.)-3.339 F .839(If a numeric ar)5.839 F -(gu-)-.18 E(ment causes the comment character to be remo)144 600 Q -.15 +(gu-)-.18 E(ment causes the comment character to be remo)144 108 Q -.15 (ve)-.15 G(d, the line will be e).15 E -.15(xe)-.15 G -(cuted by the shell.).15 E F1(spell\255corr)108 612 Q(ect\255w)-.18 E -(ord \(C\255x s\))-.1 E F0 .42 -(Perform spelling correction on the current w)144 624 R .421 +(cuted by the shell.).15 E F2(spell\255corr)108 120 Q(ect\255w)-.18 E +(ord \(C\255x s\))-.1 E F1 .42 +(Perform spelling correction on the current w)144 132 R .421 (ord, treating it as a directory or \214lename, in the same)-.1 F -.1 -(wa)144 636 S 4.718(ya).1 G 4.718(st)-4.718 G(he)-4.718 E F1(cdspell) -4.718 E F0 2.218(shell option.)4.718 F -.8(Wo)7.217 G 2.217 -(rd boundaries are the same as those used by).8 F F1(shell\255f)4.717 E -(or)-.25 E(-)-.37 E(ward\255w)144 648 Q(ord)-.1 E F0(.)A F1 -(glob\255complete\255w)108 660 Q(ord \(M\255g\))-.1 E F0 .791(The w)144 -672 R .791(ord before point is treated as a pattern for pathname e)-.1 F +(wa)144 144 S 4.718(ya).1 G 4.718(st)-4.718 G(he)-4.718 E F2(cdspell) +4.718 E F1 2.218(shell option.)4.718 F -.8(Wo)7.217 G 2.217 +(rd boundaries are the same as those used by).8 F F2(shell\255f)4.717 E +(or)-.25 E(-)-.37 E(ward\255w)144 156 Q(ord)-.1 E F1(.)A F2 +(glob\255complete\255w)108 168 Q(ord \(M\255g\))-.1 E F1 .791(The w)144 +180 R .791(ord before point is treated as a pattern for pathname e)-.1 F .792(xpansion, with an asterisk implicitly)-.15 F 2.5(appended. This)144 -684 R(pattern is used to generate a list of matching \214lenames for po\ -ssible completions.)2.5 E F1(glob\255expand\255w)108 696 Q -(ord \(C\255x *\))-.1 E F0 .176(The w)144 708 R .176 +192 R(pattern is used to generate a list of matching \214lenames for po\ +ssible completions.)2.5 E F2(glob\255expand\255w)108 204 Q +(ord \(C\255x *\))-.1 E F1 .176(The w)144 216 R .176 (ord before point is treated as a pattern for pathname e)-.1 F .176 (xpansion, and the list of matching \214le-)-.15 F .516 -(names is inserted, replacing the w)144 720 R 3.016(ord. If)-.1 F 3.016 +(names is inserted, replacing the w)144 228 R 3.016(ord. If)-.1 F 3.016 (an)3.016 G .516(umeric ar)-3.016 F .516 -(gument is supplied, an asterisk is appended)-.18 F(GNU Bash 5.2)72 768 -Q(2022 September 19)135.955 E(54)185.115 E 0 Cg EP -%%Page: 55 55 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(before pathname e) -144 84 Q(xpansion.)-.15 E/F1 10/Times-Bold@0 SF -(glob\255list\255expansions \(C\255x g\))108 96 Q F0 .923(The list of e) -144 108 R .923(xpansions that w)-.15 F .923(ould ha)-.1 F 1.223 -.15 -(ve b)-.2 H .923(een generated by).15 F F1(glob\255expand\255w)3.423 E -(ord)-.1 E F0 .923(is displayed, and)3.423 F .872(the line is redra)144 -120 R 3.372(wn. If)-.15 F 3.372(an)3.372 G .872(umeric ar)-3.372 F .872 +(gument is supplied, an asterisk is appended)-.18 F(before pathname e) +144 240 Q(xpansion.)-.15 E F2(glob\255list\255expansions \(C\255x g\)) +108 252 Q F1 .923(The list of e)144 264 R .923(xpansions that w)-.15 F +.923(ould ha)-.1 F 1.223 -.15(ve b)-.2 H .923(een generated by).15 F F2 +(glob\255expand\255w)3.423 E(ord)-.1 E F1 .923(is displayed, and)3.423 F +.872(the line is redra)144 276 R 3.372(wn. If)-.15 F 3.372(an)3.372 G +.872(umeric ar)-3.372 F .872 (gument is supplied, an asterisk is appended before pathname)-.18 F -.15 -(ex)144 132 S(pansion.).15 E F1(dump\255functions)108 144 Q F0 .627 -(Print all of the functions and their k)144 156 R .927 -.15(ey b)-.1 H +(ex)144 288 S(pansion.).15 E F2(dump\255functions)108 300 Q F1 .627 +(Print all of the functions and their k)144 312 R .927 -.15(ey b)-.1 H .626(indings to the readline output stream.).15 F .626(If a numeric ar) 5.626 F(gu-)-.18 E -(ment is supplied, the output is formatted in such a w)144 168 Q -(ay that it can be made part of an)-.1 E/F2 10/Times-Italic@0 SF(inputr) -2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 180 Q(ariables)-.1 E F0 -.762(Print all of the settable readline v)144 192 R .762 +(ment is supplied, the output is formatted in such a w)144 324 Q +(ay that it can be made part of an)-.1 E F0(inputr)2.5 E(c)-.37 E F1 +(\214le.)2.5 E F2(dump\255v)108 336 Q(ariables)-.1 E F1 .762 +(Print all of the settable readline v)144 348 R .762 (ariables and their v)-.25 F .763(alues to the readline output stream.) --.25 F .763(If a nu-)5.763 F .109(meric ar)144 204 R .109 +-.25 F .763(If a nu-)5.763 F .109(meric ar)144 360 R .109 (gument is supplied, the output is formatted in such a w)-.18 F .108 -(ay that it can be made part of an)-.1 F F2(in-)2.608 E(putr)144 216 Q -(c)-.37 E F0(\214le.)2.5 E F1(dump\255macr)108 228 Q(os)-.18 E F0 .592 -(Print all of the readline k)144 240 R .892 -.15(ey s)-.1 H .592 +(ay that it can be made part of an)-.1 F F0(in-)2.608 E(putr)144 372 Q +(c)-.37 E F1(\214le.)2.5 E F2(dump\255macr)108 384 Q(os)-.18 E F1 .592 +(Print all of the readline k)144 396 R .892 -.15(ey s)-.1 H .592 (equences bound to macros and the strings the).15 F 3.093(yo)-.15 G -3.093(utput. If)-3.093 F 3.093(an)3.093 G(umeric)-3.093 E(ar)144 252 Q +3.093(utput. If)-3.093 F 3.093(an)3.093 G(umeric)-3.093 E(ar)144 408 Q .528(gument is supplied, the output is formatted in such a w)-.18 F .528 -(ay that it can be made part of an)-.1 F F2(inputr)3.027 E(c)-.37 E F0 -(\214le.)144 264 Q F1(display\255shell\255v)108 276 Q -(ersion \(C\255x C\255v\))-.1 E F0(Display v)144 288 Q -(ersion information about the current instance of)-.15 E F1(bash)2.5 E -F0(.)A F1(Pr)87 304.8 Q(ogrammable Completion)-.18 E F0 .146(When w)108 -316.8 R .147(ord completion is attempted for an ar)-.1 F .147 +(ay that it can be made part of an)-.1 F F0(inputr)3.027 E(c)-.37 E F1 +(\214le.)144 420 Q F2(display\255shell\255v)108 432 Q +(ersion \(C\255x C\255v\))-.1 E F1(Display v)144 444 Q +(ersion information about the current instance of)-.15 E F2(bash)2.5 E +F1(.)A F2(Pr)87 460.8 Q(ogrammable Completion)-.18 E F1 .146(When w)108 +472.8 R .147(ord completion is attempted for an ar)-.1 F .147 (gument to a command for which a completion speci\214cation \(a)-.18 F -F2(compspec)108 328.8 Q F0 3.829(\)h)C 1.329 -(as been de\214ned using the)-3.829 F F1(complete)3.829 E F0 -.2(bu) +F0(compspec)108 484.8 Q F1 3.829(\)h)C 1.329 +(as been de\214ned using the)-3.829 F F2(complete)3.829 E F1 -.2(bu) 3.829 G 1.329(iltin \(see).2 F/F3 9/Times-Bold@0 SF 1.329(SHELL B)3.829 -F(UIL)-.09 E 1.329(TIN COMMANDS)-.828 F F0(belo)3.579 E 1.328(w\), the) --.25 F(programmable completion f)108 340.8 Q(acilities are in)-.1 E -.2 +F(UIL)-.09 E 1.329(TIN COMMANDS)-.828 F F1(belo)3.579 E 1.328(w\), the) +-.25 F(programmable completion f)108 496.8 Q(acilities are in)-.1 E -.2 (vo)-.4 G -.1(ke).2 G(d.).1 E .497 -(First, the command name is identi\214ed.)108 357.6 R .497 +(First, the command name is identi\214ed.)108 513.6 R .497 (If the command w)5.497 F .498 (ord is the empty string \(completion attempted at)-.1 F .234(the be)108 -369.6 R .233(ginning of an empty line\), an)-.15 F 2.733(yc)-.15 G .233 -(ompspec de\214ned with the)-2.733 F F1<ad45>2.733 E F0 .233(option to) -2.733 F F1(complete)2.733 E F0 .233(is used.)2.733 F .233(If a comp-) +525.6 R .233(ginning of an empty line\), an)-.15 F 2.733(yc)-.15 G .233 +(ompspec de\214ned with the)-2.733 F F2<ad45>2.733 E F1 .233(option to) +2.733 F F2(complete)2.733 E F1 .233(is used.)2.733 F .233(If a comp-) 5.233 F .481(spec has been de\214ned for that command, the compspec is \ -used to generate the list of possible completions)108 381.6 R .823 -(for the w)108 393.6 R 3.323(ord. If)-.1 F .823(the command w)3.323 F +used to generate the list of possible completions)108 537.6 R .823 +(for the w)108 549.6 R 3.323(ord. If)-.1 F .823(the command w)3.323 F .822(ord is a full pathname, a compspec for the full pathname is search\ -ed for)-.1 F 2.866(\214rst. If)108 405.6 R .367(no compspec is found fo\ +ed for)-.1 F 2.866(\214rst. If)108 561.6 R .367(no compspec is found fo\ r the full pathname, an attempt is made to \214nd a compspec for the po\ -rtion)2.866 F(follo)108 417.6 Q .299(wing the \214nal slash.)-.25 F .298 +rtion)2.866 F(follo)108 573.6 Q .299(wing the \214nal slash.)-.25 F .298 (If those searches do not result in a compspec, an)5.299 F 2.798(yc)-.15 -G .298(ompspec de\214ned with the)-2.798 F F1<ad44>2.798 E F0 .056 -(option to)108 429.6 R F1(complete)2.556 E F0 .056(is used as the def) +G .298(ompspec de\214ned with the)-2.798 F F2<ad44>2.798 E F1 .056 +(option to)108 585.6 R F2(complete)2.556 E F1 .056(is used as the def) 2.556 F 2.556(ault. If)-.1 F .056(there is no def)2.556 F .056 -(ault compspec,)-.1 F F1(bash)2.556 E F0 .056(attempts alias e)2.556 F -.057(xpansion on)-.15 F .333(the command w)108 441.6 R .332(ord as a \ +(ault compspec,)-.1 F F2(bash)2.556 E F1 .056(attempts alias e)2.556 F +.057(xpansion on)-.15 F .333(the command w)108 597.6 R .332(ord as a \ \214nal resort, and attempts to \214nd a compspec for the command w)-.1 F .332(ord from an)-.1 F 2.832(ys)-.15 G(uc-)-2.832 E(cessful e)108 -453.6 Q(xpansion.)-.15 E .817(Once a compspec has been found, it is use\ -d to generate the list of matching w)108 470.4 R 3.317(ords. If)-.1 F -3.317(ac)3.317 G .817(ompspec is not)-3.317 F(found, the def)108 482.4 Q -(ault)-.1 E F1(bash)2.5 E F0(completion as described abo)2.5 E .3 -.15 -(ve u)-.15 H(nder).15 E F1(Completing)2.5 E F0(is performed.)2.5 E .464 -(First, the actions speci\214ed by the compspec are used.)108 499.2 R +609.6 Q(xpansion.)-.15 E .817(Once a compspec has been found, it is use\ +d to generate the list of matching w)108 626.4 R 3.317(ords. If)-.1 F +3.317(ac)3.317 G .817(ompspec is not)-3.317 F(found, the def)108 638.4 Q +(ault)-.1 E F2(bash)2.5 E F1(completion as described abo)2.5 E .3 -.15 +(ve u)-.15 H(nder).15 E F2(Completing)2.5 E F1(is performed.)2.5 E .464 +(First, the actions speci\214ed by the compspec are used.)108 655.2 R .463(Only matches which are pre\214x)5.464 F .463(ed by the w)-.15 F -.463(ord being)-.1 F .595(completed are returned.)108 511.2 R .595 -(When the)5.595 F F1<ad66>3.095 E F0(or)3.095 E F1<ad64>3.095 E F0 .596 +.463(ord being)-.1 F .595(completed are returned.)108 667.2 R .595 +(When the)5.595 F F2<ad66>3.095 E F1(or)3.095 E F2<ad64>3.095 E F1 .596 (option is used for \214lename or directory name completion, the)3.095 F -(shell v)108 523.2 Q(ariable)-.25 E F3(FIGNORE)2.5 E F0 -(is used to \214lter the matches.)2.25 E(An)108 540 Q 4.084(yc)-.15 G +(shell v)108 679.2 Q(ariable)-.25 E F3(FIGNORE)2.5 E F1 +(is used to \214lter the matches.)2.25 E(An)108 696 Q 4.084(yc)-.15 G 1.584(ompletions speci\214ed by a pathname e)-4.084 F 1.584 -(xpansion pattern to the)-.15 F F1<ad47>4.084 E F0 1.584 -(option are generated ne)4.084 F 4.084(xt. The)-.15 F -.1(wo)108 552 S +(xpansion pattern to the)-.15 F F2<ad47>4.084 E F1 1.584 +(option are generated ne)4.084 F 4.084(xt. The)-.15 F -.1(wo)108 708 S .554(rds generated by the pattern need not match the w).1 F .555 -(ord being completed.)-.1 F(The)5.555 E F3(GLOBIGNORE)3.055 E F0 .555 +(ord being completed.)-.1 F(The)5.555 E F3(GLOBIGNORE)3.055 E F1 .555 (shell v)2.805 F(ari-)-.25 E -(able is not used to \214lter the matches, b)108 564 Q(ut the)-.2 E F3 -(FIGNORE)2.5 E F0 -.25(va)2.25 G(riable is used.).25 E(Ne)108 580.8 Q -.321(xt, the string speci\214ed as the ar)-.15 F .321(gument to the)-.18 -F F1<ad57>2.821 E F0 .32(option is considered.)2.821 F .32 -(The string is \214rst split using the)5.32 F .412(characters in the)108 -592.8 R F3(IFS)2.912 E F0 .412(special v)2.662 F .412 +(able is not used to \214lter the matches, b)108 720 Q(ut the)-.2 E F3 +(FIGNORE)2.5 E F1 -.25(va)2.25 G(riable is used.).25 E(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(56)193.45 E 0 Cg EP +%%Page: 57 57 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(Ne)108 84 Q .321 +(xt, the string speci\214ed as the ar)-.15 F .321(gument to the)-.18 F +/F2 10/Times-Bold@0 SF<ad57>2.821 E F1 .32(option is considered.)2.821 F +.32(The string is \214rst split using the)5.32 F .412(characters in the) +108 96 R/F3 9/Times-Bold@0 SF(IFS)2.912 E F1 .412(special v)2.662 F .412 (ariable as delimiters.)-.25 F .412(Shell quoting is honored.)5.412 F .413(Each w)5.412 F .413(ord is then e)-.1 F(xpanded)-.15 E .092 -(using brace e)108 604.8 R .092(xpansion, tilde e)-.15 F .092 +(using brace e)108 108 R .092(xpansion, tilde e)-.15 F .092 (xpansion, parameter and v)-.15 F .092(ariable e)-.25 F .091 -(xpansion, command substitution, and arith-)-.15 F 1.396(metic e)108 -616.8 R 1.396(xpansion, as described abo)-.15 F 1.696 -.15(ve u)-.15 H -(nder).15 E F3(EXP)3.896 E(ANSION)-.666 E/F4 9/Times-Roman@0 SF(.)A F0 -1.396(The results are split using the rules described)5.896 F(abo)108 -628.8 Q .51 -.15(ve u)-.15 H(nder).15 E F1 -.75(Wo)2.71 G .21 -(rd Splitting).75 F F0 5.21(.T)C .209(he results of the e)-5.21 F .209 +(xpansion, command substitution, and arith-)-.15 F 1.396(metic e)108 120 +R 1.396(xpansion, as described abo)-.15 F 1.696 -.15(ve u)-.15 H(nder) +.15 E F3(EXP)3.896 E(ANSION)-.666 E/F4 9/Times-Roman@0 SF(.)A F1 1.396 +(The results are split using the rules described)5.896 F(abo)108 132 Q +.51 -.15(ve u)-.15 H(nder).15 E F2 -.75(Wo)2.71 G .21(rd Splitting).75 F +F1 5.21(.T)C .209(he results of the e)-5.21 F .209 (xpansion are pre\214x-matched ag)-.15 F .209(ainst the w)-.05 F .209 -(ord being com-)-.1 F(pleted, and the matching w)108 640.8 Q +(ord being com-)-.1 F(pleted, and the matching w)108 144 Q (ords become the possible completions.)-.1 E .233 -(After these matches ha)108 657.6 R .533 -.15(ve b)-.2 H .233 +(After these matches ha)108 160.8 R .533 -.15(ve b)-.2 H .233 (een generated, an).15 F 2.733(ys)-.15 G .234 -(hell function or command speci\214ed with the)-2.733 F F1<ad46>2.734 E -F0(and)2.734 E F1<ad43>2.734 E F0(op-)2.734 E 4.209(tions is in)108 -669.6 R -.2(vo)-.4 G -.1(ke).2 G 6.709(d. When).1 F 4.208 +(hell function or command speci\214ed with the)-2.733 F F2<ad46>2.734 E +F1(and)2.734 E F2<ad43>2.734 E F1(op-)2.734 E 4.209(tions is in)108 +172.8 R -.2(vo)-.4 G -.1(ke).2 G 6.709(d. When).1 F 4.208 (the command or function is in)6.709 F -.2(vo)-.4 G -.1(ke).2 G 4.208 (d, the).1 F F3(COMP_LINE)6.708 E F4(,)A F3(COMP_POINT)6.458 E F4(,)A F3 -(COMP_KEY)108 681.6 Q F4(,)A F0(and)2.407 E F3(COMP_TYPE)2.657 E F0 -.25 +(COMP_KEY)108 184.8 Q F4(,)A F1(and)2.407 E F3(COMP_TYPE)2.657 E F1 -.25 (va)2.407 G .157(riables are assigned v).25 F .157 -(alues as described abo)-.25 F .457 -.15(ve u)-.15 H(nder).15 E F1 .158 -(Shell V)2.658 F(ariables)-.92 E F0 5.158(.I)C(f)-5.158 E 3.486(as)108 -693.6 S .986(hell function is being in)-3.486 F -.2(vo)-.4 G -.1(ke).2 G -.986(d, the).1 F F3(COMP_W)3.486 E(ORDS)-.09 E F0(and)3.236 E F3 -(COMP_CW)3.486 E(ORD)-.09 E F0 -.25(va)3.236 G .986 +(alues as described abo)-.25 F .457 -.15(ve u)-.15 H(nder).15 E F2 .158 +(Shell V)2.658 F(ariables)-.92 E F1 5.158(.I)C(f)-5.158 E 3.486(as)108 +196.8 S .986(hell function is being in)-3.486 F -.2(vo)-.4 G -.1(ke).2 G +.986(d, the).1 F F3(COMP_W)3.486 E(ORDS)-.09 E F1(and)3.236 E F3 +(COMP_CW)3.486 E(ORD)-.09 E F1 -.25(va)3.236 G .986 (riables are also set.).25 F(When)5.985 E .346 -(the function or command is in)108 705.6 R -.2(vo)-.4 G -.1(ke).2 G .346 -(d, the \214rst ar).1 F .346(gument \()-.18 F F1($1)A F0 2.847(\)i)C +(the function or command is in)108 208.8 R -.2(vo)-.4 G -.1(ke).2 G .346 +(d, the \214rst ar).1 F .346(gument \()-.18 F F2($1)A F1 2.847(\)i)C 2.847(st)-2.847 G .347(he name of the command whose ar)-2.847 F(guments) --.18 E .264(are being completed, the second ar)108 717.6 R .264 -(gument \()-.18 F F1($2)A F0 2.764(\)i)C 2.764(st)-2.764 G .264(he w) +-.18 E .264(are being completed, the second ar)108 220.8 R .264 +(gument \()-.18 F F2($2)A F1 2.764(\)i)C 2.764(st)-2.764 G .264(he w) -2.764 F .263(ord being completed, and the third ar)-.1 F .263 -(gument \()-.18 F F1($3)A F0 2.763(\)i)C(s)-2.763 E .628(the w)108 729.6 +(gument \()-.18 F F2($3)A F1 2.763(\)i)C(s)-2.763 E .628(the w)108 232.8 R .628(ord preceding the w)-.1 F .629 (ord being completed on the current command line.)-.1 F .629 -(No \214ltering of the generated)5.629 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(55)185.115 E 0 Cg EP -%%Page: 56 56 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .715 -(completions ag)108 84 R .715(ainst the w)-.05 F .714(ord being complet\ -ed is performed; the function or command has complete free-)-.1 F -(dom in generating the matches.)108 96 Q(An)108 112.8 Q 2.937(yf)-.15 G -.437(unction speci\214ed with)-2.937 F/F1 10/Times-Bold@0 SF<ad46>2.937 -E F0 .437(is in)2.937 F -.2(vo)-.4 G -.1(ke).2 G 2.937<648c>.1 G 2.937 -(rst. The)-2.937 F .437(function may use an)2.937 F 2.937(yo)-.15 G -2.937(ft)-2.937 G .437(he shell f)-2.937 F .438(acilities, including)-.1 -F(the)108 124.8 Q F1(compgen)2.957 E F0 -.2(bu)2.957 G .457 -(iltin described belo).2 F 1.756 -.65(w, t)-.25 H 2.956(og).65 G .456 -(enerate the matches.)-2.956 F .456 -(It must put the possible completions in the)5.456 F/F2 9/Times-Bold@0 -SF(COMPREPL)108 136.8 Q(Y)-.828 E F0(array v)2.25 E -(ariable, one per array element.)-.25 E(Ne)108 153.6 Q .08(xt, an)-.15 F -2.58(yc)-.15 G .08(ommand speci\214ed with the)-2.58 F F1<ad43>2.58 E F0 -.081(option is in)2.581 F -.2(vo)-.4 G -.1(ke).2 G 2.581(di).1 G 2.581 -(na)-2.581 G 2.581(ne)-2.581 G -.4(nv)-2.581 G .081(ironment equi).4 F --.25(va)-.25 G .081(lent to command sub-).25 F 2.859(stitution. It)108 -165.6 R .359(should print a list of completions, one per line, to the s\ -tandard output.)2.859 F .358(Backslash may be used)5.359 F -(to escape a ne)108 177.6 Q(wline, if necessary)-.25 E(.)-.65 E .376 -(After all of the possible completions are generated, an)108 194.4 R -2.877<798c>-.15 G .377(lter speci\214ed with the)-2.877 F F1<ad58>2.877 -E F0 .377(option is applied to the)2.877 F 3.182(list. The)108 206.4 R +(No \214ltering of the generated)5.629 F .715(completions ag)108 244.8 R +.715(ainst the w)-.05 F .714(ord being completed is performed; the func\ +tion or command has complete free-)-.1 F(dom in generating the matches.) +108 256.8 Q(An)108 273.6 Q 2.937(yf)-.15 G .437 +(unction speci\214ed with)-2.937 F F2<ad46>2.937 E F1 .437(is in)2.937 F +-.2(vo)-.4 G -.1(ke).2 G 2.937<648c>.1 G 2.937(rst. The)-2.937 F .437 +(function may use an)2.937 F 2.937(yo)-.15 G 2.937(ft)-2.937 G .437 +(he shell f)-2.937 F .438(acilities, including)-.1 F(the)108 285.6 Q F2 +(compgen)2.957 E F1 -.2(bu)2.957 G .457(iltin described belo).2 F 1.756 +-.65(w, t)-.25 H 2.956(og).65 G .456(enerate the matches.)-2.956 F .456 +(It must put the possible completions in the)5.456 F F3(COMPREPL)108 +297.6 Q(Y)-.828 E F1(array v)2.25 E(ariable, one per array element.)-.25 +E(Ne)108 314.4 Q .08(xt, an)-.15 F 2.58(yc)-.15 G .08 +(ommand speci\214ed with the)-2.58 F F2<ad43>2.58 E F1 .081 +(option is in)2.581 F -.2(vo)-.4 G -.1(ke).2 G 2.581(di).1 G 2.581(na) +-2.581 G 2.581(ne)-2.581 G -.4(nv)-2.581 G .081(ironment equi).4 F -.25 +(va)-.25 G .081(lent to command sub-).25 F 2.859(stitution. It)108 326.4 +R .359(should print a list of completions, one per line, to the standar\ +d output.)2.859 F .358(Backslash may be used)5.359 F(to escape a ne)108 +338.4 Q(wline, if necessary)-.25 E(.)-.65 E .376 +(After all of the possible completions are generated, an)108 355.2 R +2.877<798c>-.15 G .377(lter speci\214ed with the)-2.877 F F2<ad58>2.877 +E F1 .377(option is applied to the)2.877 F 3.182(list. The)108 367.2 R .682(\214lter is a pattern as used for pathname e)3.182 F .681 -(xpansion; a)-.15 F F1(&)3.181 E F0 .681 +(xpansion; a)-.15 F F2(&)3.181 E F1 .681 (in the pattern is replaced with the te)3.181 F .681(xt of)-.15 F .522 -(the w)108 218.4 R .522(ord being completed.)-.1 F 3.022(Al)5.522 G -(iteral)-3.022 E F1(&)3.022 E F0 .523 +(the w)108 379.2 R .522(ord being completed.)-.1 F 3.022(Al)5.522 G +(iteral)-3.022 E F2(&)3.022 E F1 .523 (may be escaped with a backslash; the backslash is remo)3.022 F -.15(ve) --.15 G 3.023(db).15 G(efore)-3.023 E .85(attempting a match.)108 230.4 R +-.15 G 3.023(db).15 G(efore)-3.023 E .85(attempting a match.)108 391.2 R (An)5.85 E 3.35(yc)-.15 G .849 (ompletion that matches the pattern will be remo)-3.35 F -.15(ve)-.15 G 3.349(df).15 G .849(rom the list.)-3.349 F 3.349(Al)5.849 G(eading) --3.349 E F1(!)3.349 E F0(ne)108 242.4 Q -.05(ga)-.15 G .764 +-3.349 E F2(!)3.349 E F1(ne)108 403.2 Q -.05(ga)-.15 G .764 (tes the pattern; in this case an).05 F 3.264(yc)-.15 G .764 (ompletion not matching the pattern will be remo)-3.264 F -.15(ve)-.15 G -3.264(d. If).15 F(the)3.265 E F1(nocase-)3.265 E(match)108 254.4 Q F0 +3.264(d. If).15 F(the)3.265 E F2(nocase-)3.265 E(match)108 415.2 Q F1 (shell option is enabled, the match is performed without re)2.5 E -.05 (ga)-.15 G(rd to the case of alphabetic characters.).05 E(Finally)108 -271.2 Q 3.087(,a)-.65 G .887 -.15(ny p)-3.087 H .587(re\214x and suf).15 -F .587(\214x speci\214ed with the)-.25 F F1<ad50>3.087 E F0(and)3.087 E -F1<ad53>3.087 E F0 .587(options are added to each member of the com-) -3.087 F(pletion list, and the result is returned to the readline comple\ -tion code as the list of possible completions.)108 283.2 Q .246 -(If the pre)108 300 R .247(viously-applied actions do not generate an) --.25 F 2.747(ym)-.15 G .247(atches, and the)-2.747 F F1 .247(\255o dir) -2.747 F(names)-.15 E F0 .247(option w)2.747 F .247(as supplied to)-.1 F -F1(complete)108 312 Q F0(when the compspec w)2.5 E +432 Q 3.087(,a)-.65 G .887 -.15(ny p)-3.087 H .587(re\214x and suf).15 F +.587(\214x speci\214ed with the)-.25 F F2<ad50>3.087 E F1(and)3.087 E F2 +<ad53>3.087 E F1 .587(options are added to each member of the com-)3.087 +F(pletion list, and the result is returned to the readline completion c\ +ode as the list of possible completions.)108 444 Q .246(If the pre)108 +460.8 R .247(viously-applied actions do not generate an)-.25 F 2.747(ym) +-.15 G .247(atches, and the)-2.747 F F2 .247(\255o dir)2.747 F(names) +-.15 E F1 .247(option w)2.747 F .247(as supplied to)-.1 F F2(complete) +108 472.8 Q F1(when the compspec w)2.5 E (as de\214ned, directory name completion is attempted.)-.1 E .462 -(If the)108 328.8 R F1 .462(\255o plusdirs)2.962 F F0 .462(option w) -2.962 F .462(as supplied to)-.1 F F1(complete)2.962 E F0 .462 +(If the)108 489.6 R F2 .462(\255o plusdirs)2.962 F F1 .462(option w) +2.962 F .462(as supplied to)-.1 F F2(complete)2.962 E F1 .462 (when the compspec w)2.962 F .462(as de\214ned, directory name com-)-.1 -F(pletion is attempted and an)108 340.8 Q 2.5(ym)-.15 G +F(pletion is attempted and an)108 501.6 Q 2.5(ym)-.15 G (atches are added to the results of the other actions.)-2.5 E .559 -(By def)108 357.6 R .559(ault, if a compspec is found, whate)-.1 F -.15 +(By def)108 518.4 R .559(ault, if a compspec is found, whate)-.1 F -.15 (ve)-.25 G 3.059(ri).15 G 3.059(tg)-3.059 G .56 (enerates is returned to the completion code as the full set)-3.059 F -.632(of possible completions.)108 369.6 R .632(The def)5.632 F(ault)-.1 -E F1(bash)3.132 E F0 .631 +.632(of possible completions.)108 530.4 R .632(The def)5.632 F(ault)-.1 +E F2(bash)3.132 E F1 .631 (completions are not attempted, and the readline def)3.131 F .631 -(ault of \214le-)-.1 F .558(name completion is disabled.)108 381.6 R -.558(If the)5.558 F F1 .559(\255o bashdefault)3.059 F F0 .559(option w) -3.059 F .559(as supplied to)-.1 F F1(complete)3.059 E F0 .559 -(when the compspec)3.059 F -.1(wa)108 393.6 S 3.172(sd).1 G .672 -(e\214ned, the)-3.172 F F1(bash)3.172 E F0(def)3.172 E .671 +(ault of \214le-)-.1 F .558(name completion is disabled.)108 542.4 R +.558(If the)5.558 F F2 .559(\255o bashdefault)3.059 F F1 .559(option w) +3.059 F .559(as supplied to)-.1 F F2(complete)3.059 E F1 .559 +(when the compspec)3.059 F -.1(wa)108 554.4 S 3.172(sd).1 G .672 +(e\214ned, the)-3.172 F F2(bash)3.172 E F1(def)3.172 E .671 (ault completions are attempted if the compspec generates no matches.) --.1 F .671(If the)5.671 F F1<ad6f>3.171 E(default)108 405.6 Q F0 1.207 -(option w)3.706 F 1.207(as supplied to)-.1 F F1(complete)3.707 E F0 +-.1 F .671(If the)5.671 F F2<ad6f>3.171 E(default)108 566.4 Q F1 1.207 +(option w)3.706 F 1.207(as supplied to)-.1 F F2(complete)3.707 E F1 1.207(when the compspec w)3.707 F 1.207(as de\214ned, readline')-.1 F 3.707(sd)-.55 G(ef)-3.707 E 1.207(ault completion)-.1 F (will be performed if the compspec \(and, if attempted, the def)108 -417.6 Q(ault)-.1 E F1(bash)2.5 E F0(completions\) generate no matches.) +578.4 Q(ault)-.1 E F2(bash)2.5 E F1(completions\) generate no matches.) 2.5 E .245(When a compspec indicates that directory name completion is \ -desired, the programmable completion func-)108 434.4 R .632(tions force\ +desired, the programmable completion func-)108 595.2 R .632(tions force\ readline to append a slash to completed names which are symbolic links\ - to directories, subject)108 446.4 R 2.762(to the v)108 458.4 R 2.762 -(alue of the)-.25 F F1(mark\255dir)5.262 E(ectories)-.18 E F0 2.761 + to directories, subject)108 607.2 R 2.762(to the v)108 619.2 R 2.762 +(alue of the)-.25 F F2(mark\255dir)5.262 E(ectories)-.18 E F1 2.761 (readline v)5.262 F 2.761(ariable, re)-.25 F -.05(ga)-.15 G 2.761 -(rdless of the setting of the).05 F F1(mark-sym-)5.261 E(link)108 470.4 -Q(ed\255dir)-.1 E(ectories)-.18 E F0(readline v)2.5 E(ariable.)-.25 E -.19(There is some support for dynamically modifying completions.)108 -487.2 R .191(This is most useful when used in combina-)5.191 F 1.172 -(tion with a def)108 499.2 R 1.172(ault completion speci\214ed with)-.1 -F F1 1.172(complete \255D)3.672 F F0 6.172(.I)C(t')-6.172 E 3.672(sp) --.55 G 1.172(ossible for shell functions e)-3.672 F -.15(xe)-.15 G 1.172 +(rdless of the setting of the).05 F F2(mark-sym-)5.261 E(link)108 631.2 +Q(ed\255dir)-.1 E(ectories)-.18 E F1(readline v)2.5 E(ariable.)-.25 E +.19(There is some support for dynamically modifying completions.)108 648 +R .191(This is most useful when used in combina-)5.191 F 1.172 +(tion with a def)108 660 R 1.172(ault completion speci\214ed with)-.1 F +F2 1.172(complete \255D)3.672 F F1 6.172(.I)C(t')-6.172 E 3.672(sp)-.55 +G 1.172(ossible for shell functions e)-3.672 F -.15(xe)-.15 G 1.172 (cuted as).15 F .93(completion handlers to indicate that completion sho\ -uld be retried by returning an e)108 511.2 R .93(xit status of 124.)-.15 -F .93(If a)5.93 F .1(shell function returns 124, and changes the compsp\ -ec associated with the command on which completion is)108 523.2 R .665 -(being attempted \(supplied as the \214rst ar)108 535.2 R .666 +uld be retried by returning an e)108 672 R .93(xit status of 124.)-.15 F +.93(If a)5.93 F .1(shell function returns 124, and changes the compspec\ + associated with the command on which completion is)108 684 R .665 +(being attempted \(supplied as the \214rst ar)108 696 R .666 (gument when the function is e)-.18 F -.15(xe)-.15 G .666 (cuted\), programmable completion).15 F .084(restarts from the be)108 -547.2 R .084(ginning, with an attempt to \214nd a ne)-.15 F 2.584(wc) --.25 G .084(ompspec for that command.)-2.584 F .083(This allo)5.083 F -.083(ws a set of)-.25 F(completions to be b)108 559.2 Q(uilt dynamicall\ -y as completion is attempted, rather than being loaded all at once.)-.2 -E -.15(Fo)108 576 S 2.636(ri).15 G .137 +708 R .084(ginning, with an attempt to \214nd a ne)-.15 F 2.584(wc)-.25 +G .084(ompspec for that command.)-2.584 F .083(This allo)5.083 F .083 +(ws a set of)-.25 F(completions to be b)108 720 Q(uilt dynamically as c\ +ompletion is attempted, rather than being loaded all at once.)-.2 E +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(57)193.45 E 0 Cg EP +%%Page: 58 58 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E -.15(Fo)108 84 S 2.636(ri).15 G .137 (nstance, assuming that there is a library of compspecs, each k)-2.636 F .137(ept in a \214le corresponding to the name of)-.1 F -(the command, the follo)108 588 Q(wing def)-.25 E +(the command, the follo)108 96 Q(wing def)-.25 E (ault completion function w)-.1 E(ould load completions dynamically:)-.1 -E/F3 10/Courier@0 SF(_completion_loader\(\))108 604.8 Q({)108 616.8 Q 6 -(.")144 628.8 S -(/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124)-6 E(})108 -640.8 Q(complete -D -F _completion_loader -o bashdefault -o default)108 -652.8 Q/F4 10.95/Times-Bold@0 SF(HIST)72 681.6 Q(OR)-.197 E(Y)-.383 E F0 -.372(When the)108 693.6 R F1 .372(\255o history)2.872 F F0 .372 -(option to the)2.872 F F1(set)2.872 E F0 -.2(bu)2.872 G .372 -(iltin is enabled, the shell pro).2 F .371(vides access to the)-.15 F/F5 -10/Times-Italic@0 SF .371(command history)2.871 F F0(,)A .304 -(the list of commands pre)108 705.6 R .304(viously typed.)-.25 F .304 -(The v)5.304 F .304(alue of the)-.25 F F2(HISTSIZE)2.804 E F0 -.25(va) -2.554 G .305(riable is used as the number of com-).25 F .43(mands to sa) -108 717.6 R .73 -.15(ve i)-.2 H 2.93(nah).15 G .43(istory list.)-2.93 F -.43(The te)5.43 F .429(xt of the last)-.15 F F2(HISTSIZE)2.929 E F0 .429 -(commands \(def)2.679 F .429(ault 500\) is sa)-.1 F -.15(ve)-.2 G 2.929 -(d. The).15 F(shell)2.929 E .287 +E/F2 10/Courier@0 SF(_completion_loader\(\))144 108 Q({)144 120 Q 6(.") +156 132 S(/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124)-6 +E(})144 144 Q(complete \255D \255F _completion_loader \255o bashdefault\ + \255o default)144 156 Q/F3 10.95/Times-Bold@0 SF(HIST)72 172.8 Q(OR) +-.197 E(Y)-.383 E F1 .372(When the)108 184.8 R/F4 10/Times-Bold@0 SF +.372(\255o history)2.872 F F1 .372(option to the)2.872 F F4(set)2.872 E +F1 -.2(bu)2.872 G .372(iltin is enabled, the shell pro).2 F .371 +(vides access to the)-.15 F F0 .371(command history)2.871 F F1(,)A .304 +(the list of commands pre)108 196.8 R .304(viously typed.)-.25 F .304 +(The v)5.304 F .304(alue of the)-.25 F/F5 9/Times-Bold@0 SF(HISTSIZE) +2.804 E F1 -.25(va)2.554 G .305(riable is used as the number of com-).25 +F .43(mands to sa)108 208.8 R .73 -.15(ve i)-.2 H 2.93(nah).15 G .43 +(istory list.)-2.93 F .43(The te)5.43 F .429(xt of the last)-.15 F F5 +(HISTSIZE)2.929 E F1 .429(commands \(def)2.679 F .429(ault 500\) is sa) +-.1 F -.15(ve)-.2 G 2.929(d. The).15 F(shell)2.929 E .287 (stores each command in the history list prior to parameter and v)108 -729.6 R .287(ariable e)-.25 F .287(xpansion \(see)-.15 F F2(EXP)2.787 E -(ANSION)-.666 E F0(abo)2.537 E -.15(ve)-.15 G(\)).15 E(GNU Bash 5.2)72 -768 Q(2022 September 19)135.955 E(56)185.115 E 0 Cg EP -%%Page: 57 57 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.2(bu)108 84 S -4.066(ta).2 G 1.565(fter history e)-4.066 F 1.565 +220.8 R .287(ariable e)-.25 F .287(xpansion \(see)-.15 F F5(EXP)2.787 E +(ANSION)-.666 E F1(abo)2.537 E -.15(ve)-.15 G(\)).15 E -.2(bu)108 232.8 +S 4.066(ta).2 G 1.565(fter history e)-4.066 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 9/Times-Bold@0 SF -(HISTIGNORE)4.065 E F0(and)3.815 E F1(HISTCONTR)108 96 Q(OL)-.27 E/F2 9 -/Times-Roman@0 SF(.)A F0 .082 +(alues of the shell v)-.25 F(ariables)-.25 E F5(HISTIGNORE)4.065 E F1 +(and)3.815 E F5(HISTCONTR)108 244.8 Q(OL)-.27 E/F6 9/Times-Roman@0 SF(.) +A F1 1.184 (On startup, the history is initialized from the \214le named by the v) -108 112.8 R(ariable)-.25 E F1(HISTFILE)2.583 E F0(\(def)2.333 E(ault)-.1 -E/F3 10/Times-Italic@0 SF(~/.bash_history)2.583 E F0(\).)A .315 -(The \214le named by the v)108 124.8 R .315(alue of)-.25 F F1(HISTFILE) -2.815 E F0 .315(is truncated, if necessary)2.565 F 2.815(,t)-.65 G 2.815 -(oc)-2.815 G .315(ontain no more than the number of)-2.815 F .658 -(lines speci\214ed by the v)108 136.8 R .658(alue of)-.25 F F1 -(HISTFILESIZE)3.158 E F2(.)A F0(If)5.158 E/F4 10/Times-Bold@0 SF -(HISTFILESIZE)3.158 E F0 .659(is unset, or set to null, a non-numeric) -3.158 F -.25(va)108 148.8 S .142(lue, or a numeric v).25 F .142 -(alue less than zero, the history \214le is not truncated.)-.25 F .142 -(When the history \214le is read, lines)5.142 F(be)108 160.8 Q 1.604 -(ginning with the history comment character follo)-.15 F 1.604 -(wed immediately by a digit are interpreted as time-)-.25 F .151 -(stamps for the follo)108 172.8 R .151(wing history line.)-.25 F .151 -(These timestamps are optionally displayed depending on the v)5.151 F -.15(alue of)-.25 F(the)108 184.8 Q F1(HISTTIMEFORMA)3.558 E(T)-.855 E F0 --.25(va)3.309 G 3.559(riable. When).25 F 3.559(as)3.559 G 1.059 -(hell with history enabled e)-3.559 F 1.059(xits, the last)-.15 F F1 -($HISTSIZE)3.559 E F0 1.059(lines are)3.309 F .159 -(copied from the history list to)108 196.8 R F1($HISTFILE)2.659 E F2(.)A -F0 .159(If the)4.659 F F4(histappend)2.658 E F0 .158 -(shell option is enabled \(see the description of)2.658 F F4(shopt)108 -208.8 Q F0(under)2.581 E F1 .081(SHELL B)2.581 F(UIL)-.09 E .081 -(TIN COMMANDS)-.828 F F0(belo)2.332 E .082 -(w\), the lines are appended to the history \214le, otherwise the)-.25 F -.197(history \214le is o)108 220.8 R -.15(ve)-.15 G 2.697(rwritten. If) -.15 F F1(HISTFILE)2.697 E F0 .196(is unset, or if the history \214le is\ - unwritable, the history is not sa)2.447 F -.15(ve)-.2 G(d.).15 E .583 -(If the)108 232.8 R F1(HISTTIMEFORMA)3.083 E(T)-.855 E F0 -.25(va)2.834 -G .584 -(riable is set, time stamps are written to the history \214le, mark).25 -F .584(ed with the his-)-.1 F 1.148(tory comment character)108 244.8 R -3.648(,s)-.4 G 3.648(ot)-3.648 G(he)-3.648 E 3.648(ym)-.15 G 1.147 -(ay be preserv)-3.648 F 1.147(ed across shell sessions.)-.15 F 1.147 -(This uses the history comment)6.147 F 1.376 -(character to distinguish timestamps from other history lines.)108 256.8 -R 1.377(After sa)6.377 F 1.377(ving the history)-.2 F 3.877(,t)-.65 G -1.377(he history \214le is)-3.877 F .757 -(truncated to contain no more than)108 268.8 R F1(HISTFILESIZE)3.257 E -F0 3.257(lines. If)3.007 F F1(HISTFILESIZE)3.257 E F0 .757 -(is unset, or set to null, a non-)3.007 F(numeric v)108 280.8 Q +108 261.6 R(ariable)-.25 E F5(HISTFILE)3.685 E F1(\(def)3.435 E(ault)-.1 +E F0(\001/.bash_his-)3.685 E(tory)108 273.6 Q F1 3.774(\). The)B 1.274 +(\214le named by the v)3.774 F 1.274(alue of)-.25 F F5(HISTFILE)3.774 E +F1 1.273(is truncated, if necessary)3.524 F 3.773(,t)-.65 G 3.773(oc) +-3.773 G 1.273(ontain no more than the)-3.773 F 1.191 +(number of lines speci\214ed by the v)108 285.6 R 1.191(alue of)-.25 F +F5(HISTFILESIZE)3.691 E F6(.)A F1(If)5.691 E F4(HISTFILESIZE)3.691 E F1 +1.192(is unset, or set to null, a)3.691 F .112(non-numeric v)108 297.6 R +.112(alue, or a numeric v)-.25 F .112 +(alue less than zero, the history \214le is not truncated.)-.25 F .111 +(When the history \214le)5.111 F .275(is read, lines be)108 309.6 R .275 +(ginning with the history comment character follo)-.15 F .276 +(wed immediately by a digit are interpreted)-.25 F .6 +(as timestamps for the follo)108 321.6 R .599(wing history line.)-.25 F +.599(These timestamps are optionally displayed depending on the)5.599 F +-.25(va)108 333.6 S 1.138(lue of the).25 F F5(HISTTIMEFORMA)3.638 E(T) +-.855 E F1 -.25(va)3.388 G 3.638(riable. When).25 F 3.638(as)3.638 G +1.138(hell with history enabled e)-3.638 F 1.139(xits, the last)-.15 F +F5($HISTSIZE)3.639 E F1 .506(lines are copied from the history list to) +108 345.6 R F5($HISTFILE)3.005 E F6(.)A F1 .505(If the)5.005 F F4 +(histappend)3.005 E F1 .505(shell option is enabled \(see the de-)3.005 +F .599(scription of)108 357.6 R F4(shopt)3.099 E F1(under)3.099 E F5 .6 +(SHELL B)3.099 F(UIL)-.09 E .6(TIN COMMANDS)-.828 F F1(belo)2.85 E .6 +(w\), the lines are appended to the history \214le,)-.25 F .047 +(otherwise the history \214le is o)108 369.6 R -.15(ve)-.15 G 2.547 +(rwritten. If).15 F F5(HISTFILE)2.547 E F1 .047 +(is unset or null, or if the history \214le is unwritable, the)2.297 F +.598(history is not sa)108 381.6 R -.15(ve)-.2 G 3.098(d. If).15 F(the) +3.098 E F5(HISTTIMEFORMA)3.098 E(T)-.855 E F1 -.25(va)2.848 G .598 +(riable is set, time stamps are written to the history \214le,).25 F +(mark)108 393.6 Q .51(ed with the history comment character)-.1 F 3.01 +(,s)-.4 G 3.009(ot)-3.01 G(he)-3.009 E 3.009(ym)-.15 G .509 +(ay be preserv)-3.009 F .509(ed across shell sessions.)-.15 F .509 +(This uses the)5.509 F .384(history comment character to distinguish ti\ +mestamps from other history lines.)108 405.6 R .385(After sa)5.384 F +.385(ving the history)-.2 F 2.885(,t)-.65 G(he)-2.885 E .381 +(history \214le is truncated to contain no more than)108 417.6 R F5 +(HISTFILESIZE)2.88 E F1 2.88(lines. If)2.63 F F5(HISTFILESIZE)2.88 E F1 +.38(is unset, or set to)2.63 F(null, a non-numeric v)108 429.6 Q (alue, or a numeric v)-.25 E (alue less than zero, the history \214le is not truncated.)-.25 E .298 -(The b)108 297.6 R .298(uiltin command)-.2 F F4(fc)2.798 E F0(\(see) -2.798 E F1 .298(SHELL B)2.798 F(UIL)-.09 E .298(TIN COMMANDS)-.828 F F0 +(The b)108 446.4 R .298(uiltin command)-.2 F F4(fc)2.798 E F1(\(see) +2.798 E F5 .298(SHELL B)2.798 F(UIL)-.09 E .298(TIN COMMANDS)-.828 F F1 (belo)2.549 E .299(w\) may be used to list or edit and re-e)-.25 F -.15 -(xe)-.15 G(-).15 E .472(cute a portion of the history list.)108 309.6 R -(The)5.472 E F4(history)2.972 E F0 -.2(bu)2.972 G .471 +(xe)-.15 G(-).15 E .472(cute a portion of the history list.)108 458.4 R +(The)5.472 E F4(history)2.972 E F1 -.2(bu)2.972 G .471 (iltin may be used to display or modify the history list and).2 F .001 -(manipulate the history \214le.)108 321.6 R .001 +(manipulate the history \214le.)108 470.4 R .001 (When using command-line editing, search commands are a)5.001 F -.25(va) --.2 G .002(ilable in each edit-).25 F(ing mode that pro)108 333.6 Q -(vide access to the history list.)-.15 E 1.486(The shell allo)108 350.4 +-.2 G .002(ilable in each edit-).25 F(ing mode that pro)108 482.4 Q +(vide access to the history list.)-.15 E 1.486(The shell allo)108 499.2 R 1.486(ws control o)-.25 F -.15(ve)-.15 G 3.986(rw).15 G 1.486 (hich commands are sa)-3.986 F -.15(ve)-.2 G 3.986(do).15 G 3.986(nt) --3.986 G 1.486(he history list.)-3.986 F(The)6.485 E F1(HISTCONTR)3.985 -E(OL)-.27 E F0(and)3.735 E F1(HISTIGNORE)108 362.4 Q F0 -.25(va)2.707 G -.457(riables may be set to cause the shell to sa).25 F .758 -.15(ve o) --.2 H .458(nly a subset of the commands entered.).15 F(The)5.458 E F4 -(cmdhist)108 374.4 Q F0 .75 +-3.986 G 1.486(he history list.)-3.986 F(The)6.485 E F5(HISTCONTR)3.985 +E(OL)-.27 E F1(and)3.735 E F5(HISTIGNORE)108 511.2 Q F1 -.25(va)3.306 G +1.057(riables are used to cause the shell to sa).25 F 1.357 -.15(ve o) +-.2 H 1.057(nly a subset of the commands entered.).15 F(The)6.057 E F4 +(cmdhist)108 523.2 Q F1 .75 (shell option, if enabled, causes the shell to attempt to sa)3.25 F 1.05 -.15(ve e)-.2 H .75(ach line of a multi-line command in).15 F 1.077 -(the same history entry)108 386.4 R 3.577(,a)-.65 G 1.077 +(the same history entry)108 535.2 R 3.577(,a)-.65 G 1.077 (dding semicolons where necessary to preserv)-3.577 F 3.577(es)-.15 G -1.077(yntactic correctness.)-3.577 F(The)6.077 E F4(lithist)3.577 E F0 -.374(shell option causes the shell to sa)108 398.4 R .674 -.15(ve t)-.2 +1.077(yntactic correctness.)-3.577 F(The)6.077 E F4(lithist)3.577 E F1 +.374(shell option causes the shell to sa)108 547.2 R .674 -.15(ve t)-.2 H .374(he command with embedded ne).15 F .373 (wlines instead of semicolons.)-.25 F .373(See the)5.373 F .318 -(description of the)108 410.4 R F4(shopt)2.818 E F0 -.2(bu)2.818 G .318 -(iltin belo).2 F 2.818(wu)-.25 G(nder)-2.818 E F1 .318(SHELL B)2.818 F -(UIL)-.09 E .318(TIN COMMANDS)-.828 F F0 .319 +(description of the)108 559.2 R F4(shopt)2.818 E F1 -.2(bu)2.818 G .318 +(iltin belo).2 F 2.818(wu)-.25 G(nder)-2.818 E F5 .318(SHELL B)2.818 F +(UIL)-.09 E .318(TIN COMMANDS)-.828 F F1 .319 (for information on setting and)2.568 F(unsetting shell options.)108 -422.4 Q/F5 10.95/Times-Bold@0 SF(HIST)72 439.2 Q(OR)-.197 E 2.738(YE) --.383 G(XP)-2.738 E(ANSION)-.81 E F0 .611 -(The shell supports a history e)108 451.2 R .611 +571.2 Q F3(HIST)72 588 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E(ANSION) +-.81 E F1 .611(The shell supports a history e)108 600 R .611 (xpansion feature that is similar to the history e)-.15 F .61 -(xpansion in)-.15 F F4(csh)3.11 E F0 5.61(.T)C .61(his section)-5.61 F -.87(describes what syntax features are a)108 463.2 R -.25(va)-.2 G 3.371 +(xpansion in)-.15 F F4(csh)3.11 E F1 5.61(.T)C .61(his section)-5.61 F +.87(describes what syntax features are a)108 612 R -.25(va)-.2 G 3.371 (ilable. This).25 F .871(feature is enabled by def)3.371 F .871 (ault for interacti)-.1 F 1.171 -.15(ve s)-.25 H .871(hells, and).15 F -.95(can be disabled using the)108 475.2 R F4(+H)3.449 E F0 .949 -(option to the)3.449 F F4(set)3.449 E F0 -.2(bu)3.449 G .949 -(iltin command \(see).2 F F1 .949(SHELL B)3.449 F(UIL)-.09 E .949 -(TIN COMMANDS)-.828 F F0(be-)3.199 E(lo)108 487.2 Q 2.5 +.95(can be disabled using the)108 624 R F4(+H)3.449 E F1 .949 +(option to the)3.449 F F4(set)3.449 E F1 -.2(bu)3.449 G .949 +(iltin command \(see).2 F F5 .949(SHELL B)3.449 F(UIL)-.09 E .949 +(TIN COMMANDS)-.828 F F1(be-)3.199 E(lo)108 636 Q 2.5 (w\). Non-interacti)-.25 F .3 -.15(ve s)-.25 H (hells do not perform history e).15 E(xpansion by def)-.15 E(ault.)-.1 E -1.305(History e)108 504 R 1.305(xpansions introduce w)-.15 F 1.306(ords\ - from the history list into the input stream, making it easy to repeat) --.1 F .21(commands, insert the ar)108 516 R .21(guments to a pre)-.18 F -.209(vious command into the current input line, or \214x errors in pre) --.25 F(vious)-.25 E(commands quickly)108 528 Q(.)-.65 E 1.163(History e) -108 544.8 R 1.163(xpansion is performed immediately after a complete li\ -ne is read, before the shell breaks it into)-.15 F -.1(wo)108 556.8 S -.252(rds, and is performed on each line indi).1 F .251 +1.305(History e)108 652.8 R 1.305(xpansions introduce w)-.15 F 1.306(or\ +ds from the history list into the input stream, making it easy to repea\ +t)-.1 F .21(commands, insert the ar)108 664.8 R .21(guments to a pre) +-.18 F .209 +(vious command into the current input line, or \214x errors in pre)-.25 +F(vious)-.25 E(commands quickly)108 676.8 Q(.)-.65 E 1.163(History e)108 +693.6 R 1.163(xpansion is performed immediately after a complete line i\ +s read, before the shell breaks it into)-.15 F -.1(wo)108 705.6 S .252 +(rds, and is performed on each line indi).1 F .251 (vidually without taking quoting on pre)-.25 F .251 -(vious lines into account.)-.25 F(It)5.251 E(tak)108 568.8 Q .145 +(vious lines into account.)-.25 F(It)5.251 E(tak)108 717.6 Q .145 (es place in tw)-.1 F 2.645(op)-.1 G 2.646(arts. The)-2.645 F .146(\214\ rst is to determine which line from the history list to use during subs\ titution.)2.646 F .766(The second is to select portions of that line fo\ -r inclusion into the current one.)108 580.8 R .766 -(The line selected from the)5.766 F .253(history is the)108 592.8 R F3 --.15(ev)2.753 G(ent).15 E F0 2.753(,a)C .253 -(nd the portions of that line that are acted upon are)-2.753 F F3(wor) -2.753 E(ds)-.37 E F0 5.253(.V)C(arious)-6.363 E F3(modi\214er)2.754 E(s) --.1 E F0 .254(are a)2.754 F -.25(va)-.2 G(il-).25 E .539 -(able to manipulate the selected w)108 604.8 R 3.039(ords. The)-.1 F -.538(line is brok)3.038 F .538(en into w)-.1 F .538(ords in the same f) --.1 F .538(ashion as when reading)-.1 F .572(input, so that se)108 616.8 -R -.15(ve)-.25 G(ral).15 E F3(metac)3.072 E(har)-.15 E(acter)-.15 E F0 -.572(-separated w)B .572(ords surrounded by quotes are considered one w) --.1 F 3.073(ord. His-)-.1 F .356(tory e)108 628.8 R .355 -(xpansions are introduced by the appearance of the history e)-.15 F .355 -(xpansion character)-.15 F 2.855(,w)-.4 G .355(hich is)-2.855 F F4(!) -3.688 E F0 .355(by def)3.688 F(ault.)-.1 E .79(Only backslash \()108 -640.8 R F4(\\).833 E F0 3.29(\)a).833 G .79 -(nd single quotes can quote the history e)-3.29 F .79 -(xpansion character)-.15 F 3.291(,b)-.4 G .791(ut the history e)-3.491 F -(xpansion)-.15 E .789(character is also treated as quoted if it immedia\ -tely precedes the closing double quote in a double-quoted)108 652.8 R -(string.)108 664.8 Q(Se)108 681.6 Q -.15(ve)-.25 G .03 -(ral characters inhibit history e).15 F .03 -(xpansion if found immediately follo)-.15 F .03(wing the history e)-.25 -F .03(xpansion character)-.15 F(,)-.4 E -2.15 -.25(ev e)108 693.6 T -3.163(ni).25 G 3.163(fi)-3.163 G 3.162(ti)-3.163 G 3.162(su)-3.162 G -.662(nquoted: space, tab, ne)-3.162 F .662(wline, carriage return, and) --.25 F F4(=)3.162 E F0 5.662(.I)C 3.162(ft)-5.662 G(he)-3.162 E F4 -(extglob)3.162 E F0 .662(shell option is enabled,)3.162 F F4(\()3.162 E -F0(will also inhibit e)108 705.6 Q(xpansion.)-.15 E(Se)108 722.4 Q -.15 -(ve)-.25 G .109(ral shell options settable with the).15 F F4(shopt)2.609 -E F0 -.2(bu)2.609 G .11(iltin may be used to tailor the beha).2 F .11 -(vior of history e)-.2 F(xpansion.)-.15 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(57)185.115 E 0 Cg EP -%%Page: 58 58 +r inclusion into the current one.)108 729.6 R .766 +(The line selected from the)5.766 F(GNU Bash 5.3)72 768 Q(2024 March 29) +144.29 E(58)193.45 E 0 Cg EP +%%Page: 59 59 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .232(If the)108 84 -R/F1 10/Times-Bold@0 SF(histv)2.732 E(erify)-.1 E F0 .231 -(shell option is enabled \(see the description of the)2.731 F F1(shopt) -2.731 E F0 -.2(bu)2.731 G .231(iltin belo).2 F .231(w\), and)-.25 F F1 --.18(re)2.731 G(adline).18 E F0 .231(is be-)2.731 F .449(ing used, hist\ -ory substitutions are not immediately passed to the shell parser)108 96 -R 5.449(.I)-.55 G .449(nstead, the e)-5.449 F .449(xpanded line is)-.15 -F 2.228(reloaded into the)108 108 R F1 -.18(re)4.728 G(adline).18 E F0 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E 1.203(history is the)108 84 R F0 -.15(ev)3.703 G +(ent).15 E F1 3.703(,a)C 1.203 +(nd the portions of that line that are acted upon are)-3.703 F F0(wor) +3.703 E(ds)-.37 E F1 6.203(.T)C 1.203(he line is brok)-6.203 F 1.203 +(en into)-.1 F -.1(wo)108 96 S 2.08(rds in the same f).1 F 2.08 +(ashion as when reading input, so that se)-.1 F -.15(ve)-.25 G(ral).15 E +F0(metac)4.58 E(har)-.15 E(acter)-.15 E F1 2.08(-separated w)B 2.08 +(ords sur)-.1 F(-)-.2 E .245(rounded by quotes are considered one w)108 +108 R 2.746(ord. The)-.1 F F0 -.15(ev)2.746 G .246(ent designator).15 F +F1 .246(selects the e)2.746 F -.15(ve)-.25 G .246(nt, the optional).15 F +F0(wor)2.746 E 2.746(dd)-.37 G(es-)-2.746 E(ignator)108 120 Q F1 .04 +(selects w)2.54 F .04(ords from the e)-.1 F -.15(ve)-.25 G .039 +(nt, and v).15 F .039(arious optional)-.25 F F0(modi\214er)2.539 E(s)-.1 +E F1 .039(are a)2.539 F -.25(va)-.2 G .039 +(ilable to manipulate the selected).25 F -.1(wo)108 132 S(rds.).1 E .574 +(History e)108 148.8 R .574 +(xpansions are introduced by the appearance of the history e)-.15 F .575 +(xpansion character)-.15 F 3.075(,w)-.4 G .575(hich is)-3.075 F/F2 10 +/Times-Bold@0 SF(!)3.908 E F1 .575(by de-)3.908 F -.1(fa)108 160.8 S 2.5 +(ult. History).1 F -.15(ex)2.5 G(pansions may appear an).15 E +(ywhere in the input, b)-.15 E(ut do not nest.)-.2 E .791 +(Only backslash \()108 177.6 R F2(\\).833 E F1 3.291(\)a).833 G .79 +(nd single quotes can quote the history e)-3.291 F .79 +(xpansion character)-.15 F 3.29(,b)-.4 G .79(ut the history e)-3.49 F +(xpansion)-.15 E .789(character is also treated as quoted if it immedia\ +tely precedes the closing double quote in a double-quoted)108 189.6 R +(string.)108 201.6 Q(Se)108 218.4 Q -.15(ve)-.25 G .03 +(ral characters inhibit history e).15 F .03 +(xpansion if found immediately follo)-.15 F .03(wing the history e)-.25 +F .03(xpansion character)-.15 F(,)-.4 E -2.15 -.25(ev e)108 230.4 T +3.721(ni).25 G 3.721(fi)-3.721 G 3.722(ti)-3.721 G 3.722(su)-3.722 G +1.222(nquoted: space, tab, ne)-3.722 F 1.222(wline, carriage return,) +-.25 F F2(=)3.722 E F1 3.722(,a)C 1.222 +(nd the other shell metacharacters de\214ned)-3.722 F(abo)108 242.4 Q +-.15(ve)-.15 G(.).15 E 1.764(There is a special abbre)108 259.2 R 1.764 +(viation for substitution, acti)-.25 F 2.064 -.15(ve w)-.25 H 1.764 +(hen the).15 F F0(quic)4.264 E 4.264(ks)-.2 G(ubstitution)-4.264 E F1 +1.763(character \(described)4.263 F(abo)108 271.2 Q .488 -.15(ve u)-.15 +H(nder).15 E F2(histchars)2.688 E F1 2.688(\)i)C 2.688(st)-2.688 G .188 +(he \214rst character on the line.)-2.688 F .188(It selects the pre) +5.188 F .189(vious history entry)-.25 F 2.689(,u)-.65 G .189(sing an e) +-2.689 F -.15(ve)-.25 G(nt).15 E .786(designator equi)108 283.2 R -.25 +(va)-.25 G .786(lent to).25 F F2(!!)3.286 E F1 3.286(,a)C .786 +(nd substitutes one string for another in that line.)-3.286 F .786 +(It is described belo)5.786 F 3.285(wu)-.25 G(nder)-3.285 E F2(Ev)108 +295.2 Q .138(ent Designators)-.1 F F1 5.138(.T)C .139 +(his is the only history e)-5.138 F .139(xpansion that does not be)-.15 +F .139(gin with the history e)-.15 F .139(xpansion char)-.15 F(-)-.2 E +(acter)108 307.2 Q(.)-.55 E(Se)108 324 Q -.15(ve)-.25 G .11 +(ral shell options settable with the).15 F F2(shopt)2.61 E F1 -.2(bu) +2.61 G .109(iltin may be used to tailor the beha).2 F .109 +(vior of history e)-.2 F(xpansion.)-.15 E .231(If the)108 336 R F2 +(histv)2.731 E(erify)-.1 E F1 .231 +(shell option is enabled \(see the description of the)2.731 F F2(shopt) +2.731 E F1 -.2(bu)2.731 G .231(iltin belo).2 F .231(w\), and)-.25 F F2 +-.18(re)2.731 G(adline).18 E F1 .232(is be-)2.732 F .449(ing used, hist\ +ory substitutions are not immediately passed to the shell parser)108 348 +R 5.449(.I)-.55 G .448(nstead, the e)-5.449 F .448(xpanded line is)-.15 +F 2.228(reloaded into the)108 360 R F2 -.18(re)4.728 G(adline).18 E F1 2.228(editing b)4.728 F(uf)-.2 E 2.228(fer for further modi\214cation.) --.25 F(If)7.228 E F1 -.18(re)4.728 G(adline).18 E F0 2.228 -(is being used, and the)4.728 F F1(histr)108 120 Q(eedit)-.18 E F0 1.202 +-.25 F(If)7.228 E F2 -.18(re)4.728 G(adline).18 E F1 2.228 +(is being used, and the)4.728 F F2(histr)108 372 Q(eedit)-.18 E F1 1.202 (shell option is enabled, a f)3.702 F 1.202 -(ailed history substitution will be reloaded into the)-.1 F F1 -.18(re) -3.702 G(adline).18 E F0(editing)3.702 E -.2(bu)108 132 S -.25(ff).2 G -.304(er for correction.).25 F(The)5.304 E F1<ad70>2.804 E F0 .304 -(option to the)2.804 F F1(history)2.804 E F0 -.2(bu)2.804 G .303 +(ailed history substitution will be reloaded into the)-.1 F F2 -.18(re) +3.702 G(adline).18 E F1(editing)3.702 E -.2(bu)108 384 S -.25(ff).2 G +.303(er for correction.).25 F(The)5.303 E F2<ad70>2.803 E F1 .303 +(option to the)2.803 F F2(history)2.804 E F1 -.2(bu)2.804 G .304 (iltin command may be used to see what a history e).2 F(x-)-.15 E .52 -(pansion will do before using it.)108 144 R(The)5.52 E F1<ad73>3.02 E F0 -.52(option to the)3.02 F F1(history)3.02 E F0 -.2(bu)3.02 G .52 +(pansion will do before using it.)108 396 R(The)5.52 E F2<ad73>3.02 E F1 +.52(option to the)3.02 F F2(history)3.02 E F1 -.2(bu)3.02 G .52 (iltin may be used to add commands to the).2 F -(end of the history list without actually e)108 156 Q -.15(xe)-.15 G +(end of the history list without actually e)108 408 Q -.15(xe)-.15 G (cuting them, so that the).15 E 2.5(ya)-.15 G(re a)-2.5 E -.25(va)-.2 G -(ilable for subsequent recall.).25 E 1.109(The shell allo)108 172.8 R +(ilable for subsequent recall.).25 E 1.108(The shell allo)108 424.8 R 1.108(ws control of the v)-.25 F 1.108 (arious characters used by the history e)-.25 F 1.108 -(xpansion mechanism \(see the de-)-.15 F .162(scription of)108 184.8 R -F1(histchars)2.662 E F0(abo)2.662 E .462 -.15(ve u)-.15 H(nder).15 E F1 -.163(Shell V)2.662 F(ariables)-.92 E F0 2.663(\). The)B .163 +(xpansion mechanism \(see the de-)-.15 F .163(scription of)108 436.8 R +F2(histchars)2.663 E F1(abo)2.663 E .463 -.15(ve u)-.15 H(nder).15 E F2 +.163(Shell V)2.663 F(ariables)-.92 E F1 2.663(\). The)B .162 (shell uses the history comment character to mark)2.663 F -(history timestamps when writing the history \214le.)108 196.8 Q F1(Ev) -87 213.6 Q(ent Designators)-.1 E F0 .205(An e)108 225.6 R -.15(ve)-.25 G -.204(nt designator is a reference to a command line entry in the histor\ -y list.).15 F .204(Unless the reference is abso-)5.204 F(lute, e)108 -237.6 Q -.15(ve)-.25 G(nts are relati).15 E .3 -.15(ve t)-.25 H 2.5(ot) -.15 G(he current position in the history list.)-2.5 E F1(!)108 254.4 Q -F0 1.607(Start a history substitution, e)144 254.4 R 1.607 -(xcept when follo)-.15 F 1.607(wed by a)-.25 F F1(blank)4.107 E F0 4.107 -(,n)C -.25(ew)-4.107 G 1.608(line, carriage return, = or \().25 F -(\(when the)144 266.4 Q F1(extglob)2.5 E F0 -(shell option is enabled using the)2.5 E F1(shopt)2.5 E F0 -.2(bu)2.5 G -(iltin\).).2 E F1(!)108 278.4 Q/F2 10/Times-Italic@0 SF(n)A F0 -(Refer to command line)144 278.4 Q F2(n)2.86 E F0(.).24 E F1<21ad>108 -290.4 Q F2(n)A F0(Refer to the current command minus)144 290.4 Q F2(n) -2.86 E F0(.).24 E F1(!!)108 302.4 Q F0(Refer to the pre)144 302.4 Q -(vious command.)-.25 E(This is a synon)5 E(ym for `!\2551'.)-.15 E F1(!) -108 314.4 Q F2(string)A F0 .865(Refer to the most recent command preced\ -ing the current position in the history list starting with)144 314.4 R -F2(string)144.34 326.4 Q F0(.).22 E F1(!?)108 338.4 Q F2(string)A F1 -([?])A F0 1.503(Refer to the most recent command preceding the current \ -position in the history list containing)144 350.4 R F2(string)144.34 -362.4 Q F0 5.497(.T).22 G .497(he trailing)-5.497 F F1(?)2.997 E F0 .497 -(may be omitted if)2.997 F F2(string)3.337 E F0 .496(is follo)3.216 F -.496(wed immediately by a ne)-.25 F 2.996(wline. If)-.25 F F2(string) -2.996 E F0(is)2.996 E .39(missing, the string from the most recent sear\ -ch is used; it is an error if there is no pre)144 374.4 R .391 -(vious search)-.25 F(string.)144 386.4 Q/F3 12/Times-Bold@0 SF(^)108 -403.4 Q F2(string1)-5 I F3(^)5 I F2(string2)-5 I F3(^)5 I F0 .753 -(Quick substitution.)144 410.4 R .753(Repeat the pre)5.753 F .753 -(vious command, replacing)-.25 F F2(string1)3.593 E F0(with)3.253 E F2 -(string2)3.592 E F0 5.752(.E).02 G(qui)-5.752 E -.25(va)-.25 G .752 -(lent to).25 F -.74(``)144 422.4 S(!!:s).74 E/F4 12/Times-Roman@0 SF(^)5 -I F2(string1)-5 I F4(^)5 I F2(string2)-5 I F4(^)5 I F0 1.48 -.74('' \() --5 L(see).74 E F1(Modi\214ers)2.5 E F0(belo)2.5 E(w\).)-.25 E F1(!#)108 -434.4 Q F0(The entire command line typed so f)144 434.4 Q(ar)-.1 E(.) --.55 E F1 -.75(Wo)87 451.2 S(rd Designators).75 E F0 -.8(Wo)108 463.2 S -1.313(rd designators are used to select desired w).8 F 1.314 -(ords from the e)-.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F1(:)3.814 E F0 -1.314(separates the e)3.814 F -.15(ve)-.25 G 1.314(nt speci\214cation) -.15 F .53(from the w)108 475.2 R .529(ord designator)-.1 F 5.529(.I)-.55 -G 3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529 -(ord designator be)-.1 F .529(gins with a)-.15 F F1(^)3.029 E F0(,)A F1 -($)3.029 E F0(,)A F1(*)3.029 E F0(,)A F1<ad>3.029 E F0 3.029(,o)C(r) --3.029 E F1(%)3.029 E F0 5.529(.W)C(ords)-6.329 E .515 -(are numbered from the be)108 487.2 R .516 -(ginning of the line, with the \214rst w)-.15 F .516 -(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)5.516 G .516(rds are in-) -.8 F(serted into the current line separated by single spaces.)108 499.2 -Q F1 2.5(0\()108 516 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 528 Q -2.5(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E -F2(n)108.36 540 Q F0(The)144 540 Q F2(n)2.5 E F0(th w)A(ord.)-.1 E F1(^) -108 552 Q F0(The \214rst ar)144 552 Q 2.5(gument. That)-.18 F(is, w)2.5 -E(ord 1.)-.1 E F1($)108 564 Q F0 .064(The last w)144 564 R 2.564 -(ord. This)-.1 F .064(is usually the last ar)2.564 F .064(gument, b)-.18 -F .064(ut will e)-.2 F .064(xpand to the zeroth w)-.15 F .063 -(ord if there is only)-.1 F(one w)144 576 Q(ord in the line.)-.1 E F1(%) -108 588 Q F0 1.419(The \214rst w)144 588 R 1.419 -(ord matched by the most recent `?)-.1 F F2(string)A F0 1.42 -(?' search, if the search string be)B 1.42(gins with a)-.15 F -(character that is part of a w)144 600 Q(ord.)-.1 E F2(x)108.77 612 Q F1 -<ad>A F2(y)A F0 2.5(Ar)144 612 S(ange of w)-2.5 E(ords; `\255)-.1 E F2 -(y)A F0 2.5('a)C(bbre)-2.5 E(viates `0\255)-.25 E F2(y)A F0('.)A F1(*) -108 624 Q F0 .316(All of the w)144 624 R .316(ords b)-.1 F .316 -(ut the zeroth.)-.2 F .315(This is a synon)5.315 F .315(ym for `)-.15 F -F2(1\255$)A F0 2.815('. It)B .315(is not an error to use)2.815 F F1(*) -2.815 E F0 .315(if there is)2.815 F(just one w)144 636 Q(ord in the e) --.1 E -.15(ve)-.25 G(nt; the empty string is returned in that case.).15 -E F1(x*)108 648 Q F0(Abbre)144 648 Q(viates)-.25 E F2(x\255$)2.5 E F0(.) -A F1<78ad>108 660 Q F0(Abbre)144 660 Q(viates)-.25 E F2(x\255$)2.5 E F0 -(lik)2.5 E(e)-.1 E F1(x*)2.5 E F0 2.5(,b)C(ut omits the last w)-2.7 E -2.5(ord. If)-.1 F F1(x)2.5 E F0(is missing, it def)2.5 E(aults to 0.)-.1 -E(If a w)108 676.8 Q(ord designator is supplied without an e)-.1 E -.15 -(ve)-.25 G(nt speci\214cation, the pre).15 E -(vious command is used as the e)-.25 E -.15(ve)-.25 G(nt.).15 E F1 -(Modi\214ers)87 693.6 Q F0 .183(After the optional w)108 705.6 R .183 -(ord designator)-.1 F 2.683(,t)-.4 G .184 -(here may appear a sequence of one or more of the follo)-2.683 F .184 -(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 717.6 Q -(These modify)5 E 2.5(,o)-.65 G 2.5(re)-2.5 G(dit, the w)-2.5 E -(ord or w)-.1 E(ords selected from the history e)-.1 E -.15(ve)-.25 G -(nt.).15 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(58)185.115 -E 0 Cg EP -%%Page: 59 59 +(history timestamps when writing the history \214le.)108 448.8 Q F2(Ev) +87 465.6 Q(ent Designators)-.1 E F1 .066(An e)108 477.6 R -.15(ve)-.25 G +.067(nt designator is a reference to a command line entry in the histor\ +y list.).15 F .067(The e)5.067 F -.15(ve)-.25 G .067 +(nt designator consists).15 F .462(of the portion of the w)108 489.6 R +.461(ord be)-.1 F .461(ginning with the history e)-.15 F .461 +(xpansion character and ending with the w)-.15 F .461(ord desig-)-.1 F +.582(nator if present, or the end of the w)108 501.6 R 3.083 +(ord. Unless)-.1 F .583(the reference is absolute, e)3.083 F -.15(ve) +-.25 G .583(nts are relati).15 F .883 -.15(ve t)-.25 H 3.083(ot).15 G +.583(he current)-3.083 F(position in the history list.)108 513.6 Q F2(!) +108 530.4 Q F1 1.608(Start a history substitution, e)144 530.4 R 1.608 +(xcept when follo)-.15 F 1.607(wed by a)-.25 F F2(blank)4.107 E F1 4.107 +(,n)C -.25(ew)-4.107 G 1.607(line, carriage return, = or \().25 F +(\(when the)144 542.4 Q F2(extglob)2.5 E F1 +(shell option is enabled using the)2.5 E F2(shopt)2.5 E F1 -.2(bu)2.5 G +(iltin\).).2 E F2(!)108 554.4 Q F0(n)A F1(Refer to command line)144 +554.4 Q F0(n)2.86 E F1(.).24 E F2<21ad>108 566.4 Q F0(n)A F1 +(Refer to the current command minus)144 566.4 Q F0(n)2.86 E F1(.).24 E +F2(!!)108 578.4 Q F1(Refer to the pre)144 578.4 Q(vious command.)-.25 E +(This is a synon)5 E(ym for \231!\2551\232.)-.15 E F2(!)108 590.4 Q F0 +(string)A F1 .865(Refer to the most recent command preceding the curren\ +t position in the history list starting with)144 590.4 R F0(string) +144.34 602.4 Q F1(.).22 E F2(!?)108 614.4 Q F0(string)A F2([?])A F1 +1.503(Refer to the most recent command preceding the current position i\ +n the history list containing)144 626.4 R F0(string)144.34 638.4 Q F1 +5.496(.T).22 G .496(he trailing)-5.496 F F2(?)2.996 E F1 .496 +(may be omitted if)2.996 F F0(string)3.336 E F1 .497(is follo)3.216 F +.497(wed immediately by a ne)-.25 F 2.997(wline. If)-.25 F F0(string) +2.997 E F1(is)2.997 E .391(missing, the string from the most recent sea\ +rch is used; it is an error if there is no pre)144 650.4 R .39 +(vious search)-.25 F(string.)144 662.4 Q/F3 12/Times-Bold@0 SF<00>108 +679.4 Q F0(string1)-5 I F3<00>5 I F0(string2)-5 I F3<00>5 I F1 .752 +(Quick substitution.)144 686.4 R .752(Repeat the pre)5.752 F .753 +(vious command, replacing)-.25 F F0(string1)3.593 E F1(with)3.253 E F0 +(string2)3.593 E F1 5.753(.E).02 G(qui)-5.753 E -.25(va)-.25 G .753 +(lent to).25 F(\231!!:s)144 698.4 Q/F4 12/Times-Roman@0 SF<00>5 I F0 +(string1)-5 I F4<00>5 I F0(string2)-5 I F4<00>5 I F1 2.5<9a28>-5 K(see) +-2.5 E F2(Modi\214ers)2.5 E F1(belo)2.5 E(w\).)-.25 E(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(59)193.45 E 0 Cg EP +%%Page: 60 60 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(h)108 84 Q F0(Remo)144 84 Q .3 -.15(ve a t)-.15 H -(railing \214lename component, lea).15 E(ving only the head.)-.2 E F1(t) -108 96 Q F0(Remo)144 96 Q .3 -.15(ve a)-.15 H -(ll leading \214lename components, lea).15 E(ving the tail.)-.2 E F1(r) -108 108 Q F0(Remo)144 108 Q .3 -.15(ve a t)-.15 H(railing suf).15 E -(\214x of the form)-.25 E/F2 10/Times-Italic@0 SF(.xxx)2.5 E F0 2.5(,l)C -(ea)-2.5 E(ving the basename.)-.2 E F1(e)108 120 Q F0(Remo)144 120 Q .3 --.15(ve a)-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1 -(p)108 132 Q F0(Print the ne)144 132 Q 2.5(wc)-.25 G(ommand b)-2.5 E -(ut do not e)-.2 E -.15(xe)-.15 G(cute it.).15 E F1(q)108 144 Q F0 -(Quote the substituted w)144 144 Q -(ords, escaping further substitutions.)-.1 E F1(x)108 156 Q F0 .386 -(Quote the substituted w)144 156 R .386(ords as with)-.1 F F1(q)2.886 E -F0 2.886(,b)C .386(ut break into w)-3.086 F .385(ords at)-.1 F F1 -(blanks)2.885 E F0 .385(and ne)2.885 F 2.885(wlines. The)-.25 F F1(q) -2.885 E F0(and)2.885 E F1(x)2.885 E F0(modi\214ers are mutually e)144 -168 Q(xclusi)-.15 E -.15(ve)-.25 G 2.5(;t).15 G -(he last one supplied is used.)-2.5 E F1(s/)108 180 Q F2(old)A F1(/)A F2 -(ne)A(w)-.15 E F1(/)A F0(Substitute)144 192 Q F2(ne)3.328 E(w)-.15 E F0 -.469(for the \214rst occurrence of)3.278 F F2(old)3.199 E F0 .469 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(!#)108 84 Q F1 +(The entire command line typed so f)144 84 Q(ar)-.1 E(.)-.55 E F2 -.75 +(Wo)87 100.8 S(rd Designators).75 E F1 -.8(Wo)108 112.8 S 1.314 +(rd designators are used to select desired w).8 F 1.314(ords from the e) +-.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F2(:)3.814 E F1 1.313 +(separates the e)3.813 F -.15(ve)-.25 G 1.313(nt speci\214cation).15 F +.41(from the w)108 124.8 R .411(ord designator)-.1 F 5.411(.I)-.55 G +2.911(tm)-5.411 G .411(ay be omitted if the w)-2.911 F .411 +(ord designator be)-.1 F .411(gins with a)-.15 F F2<00>2.911 E F1(,)A F2 +($)2.911 E F1(,)A F2(*)2.911 E F1(,)A F2<ad>2.911 E F1 2.911(,o)C(r) +-2.911 E F2(%)2.911 E F1 5.411(.W)C(ords)-6.211 E .516 +(are numbered from the be)108 136.8 R .516 +(ginning of the line, with the \214rst w)-.15 F .516 +(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)5.515 G .515(rds are in-) +.8 F(serted into the current line separated by single spaces.)108 148.8 +Q F2 2.5(0\()108 165.6 S(zer)-2.5 E(o\))-.18 E F1(The zeroth w)144 177.6 +Q 2.5(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E +F0(n)108.36 189.6 Q F1(The)144 189.6 Q F0(n)2.5 E F1(th w)A(ord.)-.1 E +F2<00>108 201.6 Q F1(The \214rst ar)144 201.6 Q 2.5(gument. That)-.18 F +(is, w)2.5 E(ord 1.)-.1 E F2($)108 213.6 Q F1 .063(The last w)144 213.6 +R 2.563(ord. This)-.1 F .063(is usually the last ar)2.563 F .064 +(gument, b)-.18 F .064(ut will e)-.2 F .064(xpand to the zeroth w)-.15 F +.064(ord if there is only)-.1 F(one w)144 225.6 Q(ord in the line.)-.1 E +F2(%)108 237.6 Q F1 .917(The \214rst w)144 237.6 R .916 +(ord matched by the most recent \231?)-.1 F F0(string)A F1 3.416 +(?'\232 search,)B .916(if the search string be)3.416 F .916(gins with a) +-.15 F(character that is part of a w)144 249.6 Q(ord.)-.1 E F0(x)108.77 +261.6 Q F2<ad>A F0(y)A F1 2.5(Ar)144 261.6 S(ange of w)-2.5 E +(ords; \231\255)-.1 E F0(y)A F1 2.5<9a61>C(bbre)-2.5 E(viates \2310\255) +-.25 E F0(y)A F1<9a2e>A F2(*)108 273.6 Q F1 .218(All of the w)144 273.6 +R .218(ords b)-.1 F .218(ut the zeroth.)-.2 F .219(This is a synon)5.218 +F .219(ym for \231)-.15 F F0(1\255$)A F1 2.719(\232. It)B .219 +(is not an error to use)2.719 F F2(*)2.719 E F1 .219(if there is)2.719 F +(just one w)144 285.6 Q(ord in the e)-.1 E -.15(ve)-.25 G +(nt; the empty string is returned in that case.).15 E F2(x*)108 297.6 Q +F1(Abbre)144 297.6 Q(viates)-.25 E F0(x\255$)2.5 E F1(.)A F2<78ad>108 +309.6 Q F1(Abbre)144 309.6 Q(viates)-.25 E F0(x\255$)2.5 E F1(lik)2.5 E +(e)-.1 E F2(x*)2.5 E F1 2.5(,b)C(ut omits the last w)-2.7 E 2.5(ord. If) +-.1 F F2(x)2.5 E F1(is missing, it def)2.5 E(aults to 0.)-.1 E(If a w) +108 326.4 Q(ord designator is supplied without an e)-.1 E -.15(ve)-.25 G +(nt speci\214cation, the pre).15 E(vious command is used as the e)-.25 E +-.15(ve)-.25 G(nt.).15 E F2(Modi\214ers)87 343.2 Q F1 .184 +(After the optional w)108 355.2 R .184(ord designator)-.1 F 2.684(,t)-.4 +G .183(here may appear a sequence of one or more of the follo)-2.684 F +.183(wing modi\214ers,)-.25 F(each preceded by a \231:\232.)108 367.2 Q +(These modify)5 E 2.5(,o)-.65 G 2.5(re)-2.5 G(dit, the w)-2.5 E +(ord or w)-.1 E(ords selected from the history e)-.1 E -.15(ve)-.25 G +(nt.).15 E F2(h)108 384 Q F1(Remo)144 384 Q .3 -.15(ve a t)-.15 H +(railing \214lename component, lea).15 E(ving only the head.)-.2 E F2(t) +108 396 Q F1(Remo)144 396 Q .3 -.15(ve a)-.15 H +(ll leading \214lename components, lea).15 E(ving the tail.)-.2 E F2(r) +108 408 Q F1(Remo)144 408 Q .3 -.15(ve a t)-.15 H(railing suf).15 E +(\214x of the form)-.25 E F0(.xxx)2.5 E F1 2.5(,l)C(ea)-2.5 E +(ving the basename.)-.2 E F2(e)108 420 Q F1(Remo)144 420 Q .3 -.15(ve a) +-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F2(p)108 432 Q +F1(Print the ne)144 432 Q 2.5(wc)-.25 G(ommand b)-2.5 E(ut do not e)-.2 +E -.15(xe)-.15 G(cute it.).15 E F2(q)108 444 Q F1 +(Quote the substituted w)144 444 Q +(ords, escaping further substitutions.)-.1 E F2(x)108 456 Q F1 .385 +(Quote the substituted w)144 456 R .385(ords as with)-.1 F F2(q)2.885 E +F1 2.885(,b)C .386(ut break into w)-3.085 F .386(ords at)-.1 F F2 +(blanks)2.886 E F1 .386(and ne)2.886 F 2.886(wlines. The)-.25 F F2(q) +2.886 E F1(and)2.886 E F2(x)2.886 E F1(modi\214ers are mutually e)144 +468 Q(xclusi)-.15 E -.15(ve)-.25 G 2.5(;t).15 G +(he last one supplied is used.)-2.5 E F2(s/)108 480 Q F0(old)A F2(/)A F0 +(ne)A(w)-.15 E F2(/)A F1(Substitute)144 492 Q F0(ne)3.329 E(w)-.15 E F1 +.469(for the \214rst occurrence of)3.279 F F0(old)3.199 E F1 .469 (in the e)3.739 F -.15(ve)-.25 G .469(nt line.).15 F(An)5.469 E 2.969 -(yc)-.15 G .469(haracter may be used as the)-2.969 F .954 -(delimiter in place of /.)144 204 R .953 +(yc)-.15 G .469(haracter may be used as the)-2.969 F .953 +(delimiter in place of /.)144 504 R .953 (The \214nal delimiter is optional if it is the last character of the e) -5.953 F -.15(ve)-.25 G .953(nt line.).15 F .131 -(The delimiter may be quoted in)144 216 R F2(old)2.861 E F0(and)3.401 E -F2(ne)2.991 E(w)-.15 E F0 .131(with a single backslash.)2.941 F .131 -(If & appears in)5.131 F F2(ne)2.991 E(w)-.15 E F0 2.631(,i).31 G 2.631 -(ti)-2.631 G 2.631(sr)-2.631 G(e-)-2.631 E .62(placed by)144 228 R F2 -(old)3.349 E F0 5.619(.A).77 G .619(single backslash will quote the &.) --2.5 F(If)5.619 E F2(old)3.349 E F0 .619(is null, it is set to the last) -3.889 F F2(old)3.349 E F0(substi-)3.889 E .486(tuted, or)144 240 R 2.986 -(,i)-.4 G 2.986(fn)-2.986 G 2.986(op)-2.986 G(re)-2.986 E .486 -(vious history substitutions took place, the last)-.25 F F2(string)3.326 -E F0 .487(in a)3.206 F F1(!?)2.987 E F2(string)A F1([?])A F0 2.987 -(search. If)5.487 F F2(ne)144.36 252 Q(w)-.15 E F0 -(is null, each matching)2.81 E F2(old)2.73 E F0(is deleted.)3.27 E F1(&) -108 264 Q F0(Repeat the pre)144 264 Q(vious substitution.)-.25 E F1(g) -108 276 Q F0 .398(Cause changes to be applied o)144 276 R -.15(ve)-.15 G -2.898(rt).15 G .398(he entire e)-2.898 F -.15(ve)-.25 G .398(nt line.) -.15 F .397(This is used in conjunction with `)5.398 F F1(:s)A F0 2.897 -('\()C(e.g.,)-2.897 E(`)144 288 Q F1(:gs/)A F2(old)A F1(/)A F2(ne)A(w) --.15 E F1(/)A F0 .35('\) or `)B F1(:&)A F0 2.85('. If)B .35(used with `) -2.85 F F1(:s)A F0 .35(', an)B 2.85(yd)-.15 G .351 -(elimiter can be used in place of /, and the \214nal de-)-2.85 F -(limiter is optional if it is the last character of the e)144 300 Q -.15 -(ve)-.25 G(nt line.).15 E(An)5 E F1(a)2.5 E F0(may be used as a synon) -2.5 E(ym for)-.15 E F1(g)2.5 E F0(.)A F1(G)108 312 Q F0(Apply the follo) -144 312 Q(wing `)-.25 E F1(s)A F0 2.5('o)C 2.5(r`)-2.5 G F1(&)-2.5 E F0 -2.5('m)C(odi\214er once to each w)-2.5 E(ord in the e)-.1 E -.15(ve)-.25 -G(nt line.).15 E/F3 10.95/Times-Bold@0 SF(SHELL B)72 328.8 Q(UIL)-.11 E -(TIN COMMANDS)-1.007 E F0 .063(Unless otherwise noted, each b)108 340.8 -R .062(uiltin command documented in this section as accepting options p\ -receded by)-.2 F F1<ad>108 352.8 Q F0(accepts)3.077 E F1<adad>3.077 E F0 -.577(to signify the end of the options.)3.077 F(The)5.577 E F1(:)3.077 E -F0(,)A F1(true)3.077 E F0(,)A F1(false)3.077 E F0 3.077(,a)C(nd)-3.077 E -F1(test)3.077 E F0(/)A F1([)A F0 -.2(bu)3.077 G .577 -(iltins do not accept options).2 F .462(and do not treat)108 364.8 R F1 -<adad>2.961 E F0(specially)2.961 E 5.461(.T)-.65 G(he)-5.461 E F1(exit) -2.961 E F0(,)A F1(logout)2.961 E F0(,)A F1 -.18(re)2.961 G(tur).18 E(n) --.15 E F0(,)A F1(br)2.961 E(eak)-.18 E F0(,)A F1(continue)2.961 E F0(,)A -F1(let)2.961 E F0 2.961(,a)C(nd)-2.961 E F1(shift)2.961 E F0 -.2(bu) -2.961 G .461(iltins accept and).2 F .26(process ar)108 376.8 R .26 -(guments be)-.18 F .26(ginning with)-.15 F F1<ad>2.76 E F0 .261 -(without requiring)2.76 F F1<adad>2.761 E F0 5.261(.O)C .261(ther b) +5.953 F -.15(ve)-.25 G .954(nt line.).15 F .131 +(The delimiter may be quoted in)144 516 R F0(old)2.861 E F1(and)3.401 E +F0(ne)2.991 E(w)-.15 E F1 .131(with a single backslash.)2.941 F .131 +(If & appears in)5.131 F F0(ne)2.991 E(w)-.15 E F1 2.631(,i).31 G 2.631 +(ti)-2.631 G 2.631(sr)-2.631 G(e-)-2.631 E .619(placed by)144 528 R F0 +(old)3.349 E F1 5.619(.A).77 G .619(single backslash will quote the &.) +-2.5 F(If)5.619 E F0(old)3.349 E F1 .619(is null, it is set to the last) +3.889 F F0(old)3.349 E F1(substi-)3.89 E .487(tuted, or)144 540 R 2.987 +(,i)-.4 G 2.987(fn)-2.987 G 2.987(op)-2.987 G(re)-2.987 E .486 +(vious history substitutions took place, the last)-.25 F F0(string)3.326 +E F1 .486(in a)3.206 F F2(!?)2.986 E F0(string)A F2([?])A F1 2.986 +(search. If)5.486 F F0(ne)144.36 552 Q(w)-.15 E F1 +(is null, each matching)2.81 E F0(old)2.73 E F1(is deleted.)3.27 E F2(&) +108 564 Q F1(Repeat the pre)144 564 Q(vious substitution.)-.25 E F2(g) +108 576 Q F1 .267(Cause changes to be applied o)144 576 R -.15(ve)-.15 G +2.767(rt).15 G .267(he entire e)-2.767 F -.15(ve)-.25 G .267(nt line.) +.15 F .267(This is used in conjunction with \231)5.267 F F2(:s)A F1 +2.768<9a28>C(e.g.,)-2.768 E<99>144 588 Q F2(:gs/)A F0(old)A F2(/)A F0 +(ne)A(w)-.15 E F2(/)A F1(\232\) or \231)A F2(:&)A F1 2.5(\232. If)B +(used with \231)2.5 E F2(:s)A F1(\232, an)A 2.5(yd)-.15 G +(elimiter can be used in place of /, and the \214nal de-)-2.5 E +(limiter is optional if it is the last character of the e)144 600 Q -.15 +(ve)-.25 G(nt line.).15 E(An)5 E F2(a)2.5 E F1(may be used as a synon) +2.5 E(ym for)-.15 E F2(g)2.5 E F1(.)A F2(G)108 612 Q F1(Apply the follo) +144 612 Q(wing \231)-.25 E F2(s)A F1 2.5<9a6f>C 2.5<7299>-2.5 G F2(&) +-2.5 E F1 2.5<9a6d>C(odi\214er once to each w)-2.5 E(ord in the e)-.1 E +-.15(ve)-.25 G(nt line.).15 E/F3 10.95/Times-Bold@0 SF(SHELL B)72 628.8 +Q(UIL)-.11 E(TIN COMMANDS)-1.007 E F1 .063 +(Unless otherwise noted, each b)108 640.8 R .062(uiltin command documen\ +ted in this section as accepting options preceded by)-.2 F F2<ad>108 +652.8 Q F1(accepts)3.077 E F2<adad>3.077 E F1 .577 +(to signify the end of the options.)3.077 F(The)5.577 E F2(:)3.077 E F1 +(,)A F2(true)3.077 E F1(,)A F2(false)3.077 E F1 3.077(,a)C(nd)-3.077 E +F2(test)3.077 E F1(/)A F2([)A F1 -.2(bu)3.077 G .577 +(iltins do not accept options).2 F .462(and do not treat)108 664.8 R F2 +<adad>2.961 E F1(specially)2.961 E 5.461(.T)-.65 G(he)-5.461 E F2(exit) +2.961 E F1(,)A F2(logout)2.961 E F1(,)A F2 -.18(re)2.961 G(tur).18 E(n) +-.15 E F1(,)A F2(br)2.961 E(eak)-.18 E F1(,)A F2(continue)2.961 E F1(,)A +F2(let)2.961 E F1 2.961(,a)C(nd)-2.961 E F2(shift)2.961 E F1 -.2(bu) +2.961 G .461(iltins accept and).2 F .26(process ar)108 676.8 R .26 +(guments be)-.18 F .26(ginning with)-.15 F F2<ad>2.76 E F1 .261 +(without requiring)2.76 F F2<adad>2.761 E F1 5.261(.O)C .261(ther b) -5.261 F .261(uiltins that accept ar)-.2 F .261(guments b)-.18 F .261 (ut are not)-.2 F 1.154(speci\214ed as accepting options interpret ar) -108 388.8 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F1<ad> -3.654 E F0 1.154(as in)3.654 F -.25(va)-.4 G 1.154 -(lid options and require).25 F F1<adad>3.654 E F0(to)3.654 E(pre)108 -400.8 Q -.15(ve)-.25 G(nt this interpretation.).15 E F1(:)108 418.8 Q F0 -([)2.5 E F2(ar)A(guments)-.37 E F0(])A .451(No ef)144 430.8 R .451 +108 688.8 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F2<ad> +3.654 E F1 1.154(as in)3.654 F -.25(va)-.4 G 1.154 +(lid options and require).25 F F2<adad>3.654 E F1(to)3.654 E(pre)108 +700.8 Q -.15(ve)-.25 G(nt this interpretation.).15 E(GNU Bash 5.3)72 768 +Q(2024 March 29)144.29 E(60)193.45 E 0 Cg EP +%%Page: 61 61 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(:)108 84 Q F1([)2.5 E F0(ar)A +(guments)-.37 E F1(])A .451(No ef)144 96 R .451 (fect; the command does nothing be)-.25 F .452(yond e)-.15 F(xpanding) --.15 E F2(ar)3.282 E(guments)-.37 E F0 .452(and performing an)3.222 F -2.952(ys)-.15 G(peci\214ed)-2.952 E 2.5(redirections. The)144 442.8 R -(return status is zero.)2.5 E F1(.)110.5 459.6 Q F2(\214lename)6.666 E -F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A F1(sour)108 471.6 Q(ce)-.18 E -F2(\214lename)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A 1.02 -(Read and e)144 483.6 R -.15(xe)-.15 G 1.02(cute commands from).15 F F2 -(\214lename)5.43 E F0 1.02(in the current shell en)3.7 F 1.02 +-.15 E F0(ar)3.282 E(guments)-.37 E F1 .452(and performing an)3.222 F +2.952(ys)-.15 G(peci\214ed)-2.952 E 2.5(redirections. The)144 108 R +(return status is zero.)2.5 E F2(.)108 124.8 Q F0(\214lename)6.666 E F1 +([)2.5 E F0(ar)A(guments)-.37 E F1(])A F2(sour)108 136.8 Q(ce)-.18 E F0 +(\214lename)2.5 E F1([)2.5 E F0(ar)A(guments)-.37 E F1(])A 1.02 +(Read and e)144 148.8 R -.15(xe)-.15 G 1.02(cute commands from).15 F F0 +(\214lename)5.43 E F1 1.02(in the current shell en)3.7 F 1.02 (vironment and return the e)-.4 F(xit)-.15 E 1.33 -(status of the last command e)144 495.6 R -.15(xe)-.15 G 1.331 -(cuted from).15 F F2(\214lename)5.741 E F0 6.331(.I).18 G(f)-6.331 E F2 -(\214lename)5.741 E F0 1.331(does not contain a slash, \214le-)4.011 F -.023(names in)144 507.6 R/F4 9/Times-Bold@0 SF -.666(PA)2.523 G(TH)-.189 -E F0 .022(are used to \214nd the directory containing)2.273 F F2 -(\214lename)4.432 E F0 2.522(,b).18 G(ut)-2.722 E F2(\214lename)2.522 E -F0 .022(does not need to be)2.522 F -.15(exe)144 519.6 S 3.86 -(cutable. The).15 F 1.36(\214le searched for in)3.86 F F4 -.666(PA)3.86 -G(TH)-.189 E F0 1.361(need not be e)3.61 F -.15(xe)-.15 G 3.861 -(cutable. When).15 F F1(bash)3.861 E F0 1.361(is not in)3.861 F F2 -(posix)3.861 E(mode)144 531.6 Q F0 2.772(,i)C 2.772(ts)-2.772 G .272 -(earches the current directory if no \214le is found in)-2.772 F F4 --.666(PA)2.771 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .271(If the) -4.771 F F1(sour)2.771 E(cepath)-.18 E F0 .271(option to the)2.771 F F1 -(shopt)144 543.6 Q F0 -.2(bu)3.659 G 1.159(iltin command is turned of).2 -F 1.159(f, the)-.25 F F4 -.666(PA)3.659 G(TH)-.189 E F0 1.159 -(is not searched.)3.409 F 1.16(If an)6.159 F(y)-.15 E F2(ar)3.66 E -(guments)-.37 E F0 1.16(are supplied,)3.66 F(the)144 555.6 Q 3.692(yb) --.15 G 1.192(ecome the positional parameters when)-3.692 F F2 -(\214lename)3.692 E F0 1.192(is e)3.692 F -.15(xe)-.15 G 3.691 -(cuted. Otherwise).15 F 1.191(the positional pa-)3.691 F .82 -(rameters are unchanged.)144 567.6 R .82(If the)5.82 F F1<ad54>3.32 E F0 -.82(option is enabled,)3.32 F F1(.)3.32 E F0 .82(inherits an)3.32 F 3.32 -(yt)-.15 G .82(rap on)-3.32 F F1(DEB)3.32 E(UG)-.1 E F0 3.32(;i)C 3.32 -(fi)-3.32 G 3.32(ti)-3.32 G 3.32(sn)-3.32 G(ot,)-3.32 E(an)144 579.6 Q -(y)-.15 E F1(DEB)3.323 E(UG)-.1 E F0 .823(trap string is sa)3.323 F -.15 -(ve)-.2 G 3.322(da).15 G .822(nd restored around the call to)-3.322 F F1 -(.)3.322 E F0 3.322(,a)C(nd)-3.322 E F1(.)3.322 E F0 .822(unsets the) -3.322 F F1(DEB)3.322 E(UG)-.1 E F0(trap)3.322 E .226(while it e)144 -591.6 R -.15(xe)-.15 G 2.726(cutes. If).15 F F1<ad54>2.727 E F0 .227 -(is not set, and the sourced \214le changes the)2.727 F F1(DEB)2.727 E -(UG)-.1 E F0 .227(trap, the ne)2.727 F 2.727(wv)-.25 G .227(alue is) --2.977 F .891(retained when)144 603.6 R F1(.)3.391 E F0 3.391 -(completes. The)3.391 F .891 -(return status is the status of the last command e)3.391 F .89 -(xited within the)-.15 F(script \(0 if no commands are e)144 615.6 Q --.15(xe)-.15 G(cuted\), and f).15 E(alse if)-.1 E F2(\214lename)4.41 E -F0(is not found or cannot be read.)2.68 E F1(alias)108 632.4 Q F0([)2.5 -E F1<ad70>A F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C -(..])-2.5 E F1(Alias)144 644.4 Q F0 2.724(with no ar)5.224 F 2.724 -(guments or with the)-.18 F F1<ad70>5.224 E F0 2.724 -(option prints the list of aliases in the form)5.224 F F1(alias)5.225 E -F2(name)144 656.4 Q F0(=)A F2(value)A F0 .58(on standard output.)3.08 F +(status of the last command e)144 160.8 R -.15(xe)-.15 G 1.331 +(cuted from).15 F F0(\214lename)5.741 E F1 6.331(.I).18 G(f)-6.331 E F0 +(\214lename)5.741 E F1 1.331(does not contain a slash, \214le-)4.011 F +.023(names in)144 172.8 R/F3 9/Times-Bold@0 SF -.666(PA)2.523 G(TH)-.189 +E F1 .022(are used to \214nd the directory containing)2.273 F F0 +(\214lename)4.432 E F1 2.522(,b).18 G(ut)-2.722 E F0(\214lename)2.522 E +F1 .022(does not need to be)2.522 F -.15(exe)144 184.8 S 3.86 +(cutable. The).15 F 1.36(\214le searched for in)3.86 F F3 -.666(PA)3.86 +G(TH)-.189 E F1 1.361(need not be e)3.61 F -.15(xe)-.15 G 3.861 +(cutable. When).15 F F2(bash)3.861 E F1 1.361(is not in)3.861 F F0 +(posix)3.861 E(mode)144 196.8 Q F1 2.772(,i)C 2.772(ts)-2.772 G .272 +(earches the current directory if no \214le is found in)-2.772 F F3 +-.666(PA)2.771 G(TH)-.189 E/F4 9/Times-Roman@0 SF(.)A F1 .271(If the) +4.771 F F2(sour)2.771 E(cepath)-.18 E F1 .271(option to the)2.771 F F2 +(shopt)144 208.8 Q F1 -.2(bu)3.659 G 1.159(iltin command is turned of).2 +F 1.159(f, the)-.25 F F3 -.666(PA)3.659 G(TH)-.189 E F1 1.159 +(is not searched.)3.409 F 1.16(If an)6.159 F(y)-.15 E F0(ar)3.66 E +(guments)-.37 E F1 1.16(are supplied,)3.66 F(the)144 220.8 Q 3.045(yb) +-.15 G .544(ecome the positional parameters when)-3.045 F F0(\214lename) +3.044 E F1 .544(is e)3.044 F -.15(xe)-.15 G 3.044(cuted. Otherwise).15 F +.544(the positional para-)3.044 F .302(meters are unchanged.)144 232.8 R +.302(If the)5.302 F F2<ad54>2.802 E F1 .302(option is enabled,)2.802 F +F2(.)2.802 E F1 .302(inherits an)2.802 F 2.802(yt)-.15 G .302(rap on) +-2.802 F F2(DEB)2.802 E(UG)-.1 E F1 2.802(;i)C 2.802(fi)-2.802 G 2.802 +(ti)-2.802 G 2.803(sn)-2.802 G .303(ot, an)-2.803 F(y)-.15 E F2(DEB)144 +244.8 Q(UG)-.1 E F1 .382(trap string is sa)2.882 F -.15(ve)-.2 G 2.882 +(da).15 G .382(nd restored around the call to)-2.882 F F2(.)2.882 E F1 +2.882(,a)C(nd)-2.882 E F2(.)2.881 E F1 .381(unsets the)2.881 F F2(DEB) +2.881 E(UG)-.1 E F1 .381(trap while)2.881 F .812(it e)144 256.8 R -.15 +(xe)-.15 G 3.312(cutes. If).15 F F2<ad54>3.312 E F1 .812 +(is not set, and the sourced \214le changes the)3.312 F F2(DEB)3.312 E +(UG)-.1 E F1 .812(trap, the ne)3.312 F 3.312(wv)-.25 G .813(alue is re-) +-3.562 F 1.377(tained when)144 268.8 R F2(.)3.877 E F1 3.877 +(completes. The)3.877 F 1.376 +(return status is the status of the last command e)3.876 F 1.376 +(xited within the)-.15 F(script \(0 if no commands are e)144 280.8 Q +-.15(xe)-.15 G(cuted\), and f).15 E(alse if)-.1 E F0(\214lename)4.41 E +F1(is not found or cannot be read.)2.68 E F2(alias)108 297.6 Q F1([)2.5 +E F2<ad70>A F1 2.5(][)C F0(name)-2.5 E F1([=)A F0(value)A F1 2.5(].)C +1.666(..)-.834 G(])-1.666 E F2(Alias)144 309.6 Q F1 2.724(with no ar) +5.224 F 2.724(guments or with the)-.18 F F2<ad70>5.224 E F1 2.724 +(option prints the list of aliases in the form)5.224 F F2(alias)5.225 E +F0(name)144 321.6 Q F1(=)A F0(value)A F1 .58(on standard output.)3.08 F .58(When ar)5.58 F .58 -(guments are supplied, an alias is de\214ned for each)-.18 F F2(name) -3.08 E F0(whose)144 668.4 Q F2(value)2.508 E F0 .009(is gi)2.508 F -.15 -(ve)-.25 G 2.509(n. A).15 F .009(trailing space in)2.509 F F2(value) -2.509 E F0 .009(causes the ne)2.509 F .009(xt w)-.15 F .009 +(guments are supplied, an alias is de\214ned for each)-.18 F F0(name) +3.08 E F1(whose)144 333.6 Q F0(value)2.508 E F1 .009(is gi)2.508 F -.15 +(ve)-.25 G 2.509(n. A).15 F .009(trailing space in)2.509 F F0(value) +2.509 E F1 .009(causes the ne)2.509 F .009(xt w)-.15 F .009 (ord to be check)-.1 F .009(ed for alias substi-)-.1 F .579 -(tution when the alias is e)144 680.4 R 3.079(xpanded. F)-.15 F .579 -(or each)-.15 F F2(name)3.079 E F0 .579(in the ar)3.079 F .579 -(gument list for which no)-.18 F F2(value)3.079 E F0 .578(is sup-)3.078 -F 1.313(plied, the name and v)144 692.4 R 1.314 -(alue of the alias is printed.)-.25 F F1(Alias)6.314 E F0 1.314 -(returns true unless a)3.814 F F2(name)3.814 E F0 1.314(is gi)3.814 F +(tution when the alias is e)144 345.6 R 3.079(xpanded. F)-.15 F .579 +(or each)-.15 F F0(name)3.079 E F1 .579(in the ar)3.079 F .579 +(gument list for which no)-.18 F F0(value)3.079 E F1 .578(is sup-)3.078 +F 1.313(plied, the name and v)144 357.6 R 1.314 +(alue of the alias is printed.)-.25 F F2(Alias)6.314 E F1 1.314 +(returns true unless a)3.814 F F0(name)3.814 E F1 1.314(is gi)3.814 F -.15(ve)-.25 G 3.814(nf).15 G(or)-3.814 E -(which no alias has been de\214ned.)144 704.4 Q(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(59)185.115 E 0 Cg EP -%%Page: 60 60 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(bg)108 84 Q F0([)2.5 E/F2 10/Times-Italic@0 SF(jobspec)A F0(...])2.5 -E .745(Resume each suspended job)144 96 R F2(jobspec)3.245 E F0 .745 -(in the background, as if it had been started with)3.245 F F1(&)3.244 E -F0 5.744(.I)C(f)-5.744 E F2(job-)4.984 E(spec)144 108 Q F0 .671 +(which no alias has been de\214ned.)144 369.6 Q F2(bg)108 386.4 Q F1([) +2.5 E F0(jobspec)A F1 1.666(...)2.5 G(])-1.666 E .745 +(Resume each suspended job)144 398.4 R F0(jobspec)3.245 E F1 .745 +(in the background, as if it had been started with)3.245 F F2(&)3.244 E +F1 5.744(.I)C(f)-5.744 E F0(job-)4.984 E(spec)144 410.4 Q F1 .671 (is not present, the shell')3.481 F 3.171(sn)-.55 G .672(otion of the) --3.171 F F2(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F1 -(bg)5.672 E F2(jobspec)4.912 E F0 .672(returns 0 unless run)3.482 F .419 -(when job control is disabled or)144 120 R 2.919(,w)-.4 G .419 +-3.171 F F0(curr)3.172 E .672(ent job)-.37 F F1 .672(is used.)3.172 F F2 +(bg)5.672 E F0(jobspec)4.912 E F1 .672(returns 0 unless run)3.482 F .419 +(when job control is disabled or)144 422.4 R 2.919(,w)-.4 G .419 (hen run with job control enabled, an)-2.919 F 2.918(ys)-.15 G -(peci\214ed)-2.918 E F2(jobspec)2.918 E F0 -.1(wa)2.918 G 2.918(sn).1 G -(ot)-2.918 E(found or w)144 132 Q(as started without job control.)-.1 E -F1(bind)108 148.8 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke)2.5 G(ymap)-.2 E F0 -2.5(][)C F1(\255lpsvPSVX)-2.5 E F0(])A F1(bind)108 160.8 Q F0([)2.5 E F1 -<ad6d>A F2 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F1<ad71>-2.5 E F2 -(function)2.5 E F0 2.5(][)C F1<ad75>-2.5 E F2(function)2.5 E F0 2.5(][)C -F1<ad72>-2.5 E F2 -.1(ke)2.5 G(yseq)-.2 E F0(])A F1(bind)108 172.8 Q F0 -([)2.5 E F1<ad6d>A F2 -.1(ke)2.5 G(ymap)-.2 E F0(])A F1<ad66>2.5 E F2 -(\214lename)2.5 E F1(bind)108 184.8 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke)2.5 -G(ymap)-.2 E F0(])A F1<ad78>2.5 E F2 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F2 -(shell\255command)A F1(bind)108 196.8 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke) -2.5 G(ymap)-.2 E F0(])A F2 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F2 -(function\255name)A F1(bind)108 208.8 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke) -2.5 G(ymap)-.2 E F0(])A F2 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F2 -.37(re)C -(adline\255command).37 E F1(bind)108 220.8 Q F2 -.37(re)2.5 G -(adline-command-line).37 E F0 .238(Display current)144 232.8 R F1 -.18 -(re)2.738 G(adline).18 E F0 -.1(ke)2.738 G 2.738(ya)-.05 G .239 +(peci\214ed)-2.918 E F0(jobspec)2.918 E F1 -.1(wa)2.918 G 2.918(sn).1 G +(ot)-2.918 E(found or w)144 434.4 Q(as started without job control.)-.1 +E F2(bind)108 451.2 Q F1([)2.5 E F2<ad6d>A F0 -.1(ke)2.5 G(ymap)-.2 E F1 +2.5(][)C F2(\255lpsvPSVX)-2.5 E F1(])A F2(bind)108 463.2 Q F1([)2.5 E F2 +<ad6d>A F0 -.1(ke)2.5 G(ymap)-.2 E F1 2.5(][)C F2<ad71>-2.5 E F0 +(function)2.5 E F1 2.5(][)C F2<ad75>-2.5 E F0(function)2.5 E F1 2.5(][)C +F2<ad72>-2.5 E F0 -.1(ke)2.5 G(yseq)-.2 E F1(])A F2(bind)108 475.2 Q F1 +([)2.5 E F2<ad6d>A F0 -.1(ke)2.5 G(ymap)-.2 E F1(])A F2<ad66>2.5 E F0 +(\214lename)2.5 E F2(bind)108 487.2 Q F1([)2.5 E F2<ad6d>A F0 -.1(ke)2.5 +G(ymap)-.2 E F1(])A F2<ad78>2.5 E F0 -.1(ke)2.5 G(yseq)-.2 E F1([:])A F0 +(shell\255command)2.5 E F2(bind)108 499.2 Q F1([)2.5 E F2<ad6d>A F0 -.1 +(ke)2.5 G(ymap)-.2 E F1(])A F0 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F0 +(function\255name)A F2(bind)108 511.2 Q F1([)2.5 E F2<ad6d>A F0 -.1(ke) +2.5 G(ymap)-.2 E F1(])A F0 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F0 -.37(re)C +(adline\255command).37 E F2(bind)108 523.2 Q F0 -.37(re)2.5 G +(adline-command-line).37 E F1 .238(Display current)144 535.2 R F2 -.18 +(re)2.738 G(adline).18 E F1 -.1(ke)2.738 G 2.738(ya)-.05 G .239 (nd function bindings, bind a k)-2.738 F .539 -.15(ey s)-.1 H .239 -(equence to a).15 F F1 -.18(re)2.739 G(adline).18 E F0 .239(function or) -2.739 F .04(macro, or set a)144 244.8 R F1 -.18(re)2.54 G(adline).18 E -F0 -.25(va)2.54 G 2.54(riable. Each).25 F .039(non-option ar)2.54 F .039 -(gument is a command as it w)-.18 F .039(ould appear in a)-.1 F F1 -.18 -(re)144 256.8 S(adline).18 E F0 .182(initialization \214le such as)2.681 -F F2(.inputr)2.912 E(c)-.37 E F0 2.682(,b).31 G .182 -(ut each binding or command must be passed as a sep-)-2.882 F 1.907 -(arate ar)144 268.8 R 1.907 -(gument; e.g., '"\\C\255x\\C\255r": re\255read\255init\255\214le'.)-.18 -F 1.907(Options, if supplied, ha)6.907 F 2.207 -.15(ve t)-.2 H 1.907 -(he follo).15 F(wing)-.25 E(meanings:)144 280.8 Q F1<ad6d>144 292.8 Q F2 --.1(ke)2.5 G(ymap)-.2 E F0(Use)180 304.8 Q F2 -.1(ke)5.158 G(ymap)-.2 E -F0 2.658(as the k)5.348 F -.15(ey)-.1 G 2.658(map to be af).15 F 2.659 -(fected by the subsequent bindings.)-.25 F(Acceptable)7.659 E F2 -.1(ke) -180 316.8 S(ymap)-.2 E F0 3.193(names are)5.883 F F2 3.193 +(equence to a).15 F F2 -.18(re)2.739 G(adline).18 E F1 .239(function or) +2.739 F .04(macro, or set a)144 547.2 R F2 -.18(re)2.54 G(adline).18 E +F1 -.25(va)2.54 G 2.54(riable. Each).25 F .039(non-option ar)2.54 F .039 +(gument is a command as it w)-.18 F .039(ould appear in a)-.1 F F2 -.18 +(re)144 559.2 S(adline).18 E F1 .182(initialization \214le such as)2.681 +F F0(.inputr)2.912 E(c)-.37 E F1 2.682(,b).31 G .182 +(ut each binding or command must be passed as a sep-)-2.882 F 1.029 +(arate ar)144 571.2 R 1.029(gument; e.g., \010"\\C\255x\\C\255r": re\ +\255read\255init\255\214le\010.)-.18 F 1.029(In the follo)6.029 F 1.029 +(wing descriptions, output a)-.25 F -.25(va)-.2 G(il-).25 E .709 +(able to be re-read is formatted as commands that w)144 583.2 R .709 +(ould appear in a)-.1 F F2 -.18(re)3.209 G(adline).18 E F1 .709 +(initialization \214le or)3.209 F .108(that w)144 595.2 R .108 +(ould be supplied as indi)-.1 F .107(vidual ar)-.25 F .107(guments to a) +-.18 F F2(bind)2.607 E F1 2.607(command. Options,)2.607 F .107 +(if supplied, ha)2.607 F .407 -.15(ve t)-.2 H(he).15 E(follo)144 607.2 Q +(wing meanings:)-.25 E F2<ad6d>144 619.2 Q F0 -.1(ke)2.5 G(ymap)-.2 E F1 +(Use)180 631.2 Q F0 -.1(ke)5.158 G(ymap)-.2 E F1 2.658(as the k)5.348 F +-.15(ey)-.1 G 2.658(map to be af).15 F 2.659 +(fected by the subsequent bindings.)-.25 F(Acceptable)7.659 E F0 -.1(ke) +180 643.2 S(ymap)-.2 E F1 3.193(names are)5.883 F F0 3.193 (emacs, emacs\255standar)5.693 F 3.192 (d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E -(vi\255command)180 328.8 Q F0 4.089(,a)C(nd)-4.089 E F2(vi\255insert) -4.379 E F0(.).68 E F2(vi)6.589 E F0 1.589(is equi)4.089 F -.25(va)-.25 G -1.589(lent to).25 F F2(vi\255command)4.089 E F0(\()4.089 E F2(vi\255mo)A -(ve)-.1 E F0 1.59(is also a syn-)4.089 F(on)180 340.8 Q(ym\);)-.15 E F2 -(emacs)2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F2 -(emacs\255standar)2.5 E(d)-.37 E F0(.)A F1<ad6c>144 352.8 Q F0 -(List the names of all)180 352.8 Q F1 -.18(re)2.5 G(adline).18 E F0 -(functions.)2.5 E F1<ad70>144 364.8 Q F0(Display)180 364.8 Q F1 -.18(re) -2.5 G(adline).18 E F0(function names and bindings in such a w)2.5 E -(ay that the)-.1 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1<ad50>144 376.8 -Q F0(List current)180 376.8 Q F1 -.18(re)2.5 G(adline).18 E F0 -(function names and bindings.)2.5 E F1<ad73>144 388.8 Q F0(Display)180 -388.8 Q F1 -.18(re)3.655 G(adline).18 E F0 -.1(ke)3.655 G 3.655(ys)-.05 -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 400.8 S 2.5(yt).1 G -(hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1<ad53>144 412.8 Q -F0(Display)180 412.8 Q F1 -.18(re)2.5 G(adline).18 E F0 -.1(ke)2.5 G 2.5 -(ys)-.05 G(equences bound to macros and the strings the)-2.5 E 2.5(yo) --.15 G(utput.)-2.5 E F1<ad76>144 424.8 Q F0(Display)180 424.8 Q F1 -.18 -(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E +(vi\255command)180 655.2 Q F1 4.089(,a)C(nd)-4.089 E F0(vi\255insert) +4.379 E F1(.).68 E F0(vi)6.589 E F1 1.589(is equi)4.089 F -.25(va)-.25 G +1.589(lent to).25 F F0(vi\255command)4.089 E F1(\()4.089 E F0(vi\255mo)A +(ve)-.1 E F1 1.59(is also a syn-)4.089 F(on)180 667.2 Q(ym\);)-.15 E F0 +(emacs)2.5 E F1(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F0 +(emacs\255standar)2.5 E(d)-.37 E F1(.)A F2<ad6c>144 679.2 Q F1 +(List the names of all)180 679.2 Q F2 -.18(re)2.5 G(adline).18 E F1 +(functions.)2.5 E F2<ad70>144 691.2 Q F1(Display)180 691.2 Q F2 -.18(re) +2.5 G(adline).18 E F1(function names and bindings in such a w)2.5 E +(ay that the)-.1 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F2<ad50>144 703.2 +Q F1(List current)180 703.2 Q F2 -.18(re)2.5 G(adline).18 E F1 +(function names and bindings.)2.5 E(GNU Bash 5.3)72 768 Q(2024 March 29) +144.29 E(61)193.45 E 0 Cg EP +%%Page: 62 62 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF<ad73>144 84 Q F1(Display)180 +84 Q F2 -.18(re)3.655 G(adline).18 E F1 -.1(ke)3.655 G 3.655(ys)-.05 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 96 S 2.5(yt).1 G +(hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F2<ad53>144 108 Q F1 +(Display)180 108 Q F2 -.18(re)2.5 G(adline).18 E F1 -.1(ke)2.5 G 2.5(ys) +-.05 G(equences bound to macros and the strings the)-2.5 E 2.5(yo)-.15 G +(utput.)-2.5 E F2<ad76>144 120 Q F1(Display)180 120 Q F2 -.18(re)2.5 G +(adline).18 E F1 -.25(va)2.5 G(riable names and v).25 E (alues in such a w)-.25 E(ay that the)-.1 E 2.5(yc)-.15 G -(an be re-read.)-2.5 E F1<ad56>144 436.8 Q F0(List current)180 436.8 Q -F1 -.18(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E -(alues.)-.25 E F1<ad66>144 448.8 Q F2(\214lename)2.5 E F0(Read k)180 -460.8 Q .3 -.15(ey b)-.1 H(indings from).15 E F2(\214lename)2.5 E F0(.)A -F1<ad71>144 472.8 Q F2(function)2.5 E F0(Query about which k)180 484.8 Q --.15(ey)-.1 G 2.5(si).15 G -1.9 -.4(nv o)-2.5 H .2 -.1(ke t).4 H -(he named).1 E F2(function)2.5 E F0(.)A F1<ad75>144 496.8 Q F2(function) -2.5 E F0(Unbind all k)180 508.8 Q -.15(ey)-.1 G 2.5(sb).15 G -(ound to the named)-2.5 E F2(function)2.5 E F0(.)A F1<ad72>144 520.8 Q -F2 -.1(ke)2.5 G(yseq)-.2 E F0(Remo)180 532.8 Q .3 -.15(ve a)-.15 H .3 --.15(ny c).15 H(urrent binding for).15 E F2 -.1(ke)2.5 G(yseq)-.2 E F0 -(.)A F1<ad78>144 544.8 Q F2 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F2 -(shell\255command)A F0(Cause)180 556.8 Q F2(shell\255command)4.325 E F0 -1.825(to be e)4.325 F -.15(xe)-.15 G 1.825(cuted whene).15 F -.15(ve) --.25 G(r).15 E F2 -.1(ke)4.325 G(yseq)-.2 E F0 1.825(is entered.)4.325 F -(When)6.825 E F2(shell\255com-)4.325 E(mand)180 568.8 Q F0 1.765(is e) -4.265 F -.15(xe)-.15 G 1.765(cuted, the shell sets the).15 F/F3 9 -/Times-Bold@0 SF(READLINE_LINE)4.265 E F0 -.25(va)4.015 G 1.765 -(riable to the contents of the).25 F F1 -.18(re)180 580.8 S(adline).18 E -F0 .375(line b)2.874 F(uf)-.2 E .375(fer and the)-.25 F F3 -(READLINE_POINT)2.875 E F0(and)2.625 E F3(READLINE_MARK)2.875 E F0 -.25 -(va)2.625 G .375(riables to the).25 F 1.186 -(current location of the insertion point and the sa)180 592.8 R -.15(ve) --.2 G 3.685(di).15 G 1.185(nsertion point \(the mark\), respec-)-3.685 F -(ti)180 604.8 Q -.15(ve)-.25 G(ly).15 E 5.377(.T)-.65 G .377 -(he shell assigns an)-5.377 F 2.877(yn)-.15 G .377(umeric ar)-2.877 F -.377(gument the user supplied to the)-.18 F F3(READLINE_AR-)2.878 E -(GUMENT)180 616.8 Q F0 -.25(va)3.605 G 3.855(riable. If).25 F 1.355 -(there w)3.855 F 1.354(as no ar)-.1 F 1.354(gument, that v)-.18 F 1.354 -(ariable is not set.)-.25 F 1.354(If the e)6.354 F -.15(xe)-.15 G(cuted) -.15 E .343(command changes the v)180 628.8 R .343(alue of an)-.25 F -2.843(yo)-.15 G(f)-2.843 E F3(READLINE_LINE)2.844 E/F4 9/Times-Roman@0 -SF(,)A F3(READLINE_POINT)2.594 E F4(,)A F0(or)2.594 E F3(READ-)2.844 E -(LINE_MARK)180 640.8 Q F4(,)A F0(those ne)2.25 E 2.5(wv)-.25 G -(alues will be re\215ected in the editing state.)-2.75 E F1<ad58>144 -652.8 Q F0 .83(List all k)180 652.8 R 1.13 -.15(ey s)-.1 H .829 +(an be re-read.)-2.5 E F2<ad56>144 132 Q F1(List current)180 132 Q F2 +-.18(re)2.5 G(adline).18 E F1 -.25(va)2.5 G(riable names and v).25 E +(alues.)-.25 E F2<ad66>144 144 Q F0(\214lename)2.5 E F1(Read k)180 156 Q +.3 -.15(ey b)-.1 H(indings from).15 E F0(\214lename)2.5 E F1(.)A F2 +<ad71>144 168 Q F0(function)2.5 E F1(Query about which k)180 180 Q -.15 +(ey)-.1 G 2.5(si).15 G -1.9 -.4(nv o)-2.5 H .2 -.1(ke t).4 H(he named).1 +E F0(function)2.5 E F1(.)A F2<ad75>144 192 Q F0(function)2.5 E F1 +(Unbind all k)180 204 Q -.15(ey)-.1 G 2.5(sb).15 G(ound to the named) +-2.5 E F0(function)2.5 E F1(.)A F2<ad72>144 216 Q F0 -.1(ke)2.5 G(yseq) +-.2 E F1(Remo)180 228 Q .3 -.15(ve a)-.15 H .3 -.15(ny c).15 H +(urrent binding for).15 E F0 -.1(ke)2.5 G(yseq)-.2 E F1(.)A F2<ad78>144 +240 Q F0 -.1(ke)2.5 G(yseq)-.2 E F2([: ])A F0(shell\255command)A F1 +(Cause)180 252 Q F0(shell\255command)4.344 E F1 1.844(to be e)4.344 F +-.15(xe)-.15 G 1.844(cuted whene).15 F -.15(ve)-.25 G(r).15 E F0 -.1(ke) +4.345 G(yseq)-.2 E F1 1.845(is entered.)4.345 F 1.845(The separator be-) +6.845 F(tween)180 264 Q F0 -.1(ke)3.016 G(yseq)-.2 E F1(and)3.016 E F0 +(shell\255command)3.016 E F1 .516 +(is either whitespace or a colon optionally follo)3.016 F .515(wed by) +-.25 F 3.458(whitespace. If)180 276 R .958(the separator is whitespace,) +3.458 F F0(shell\255command)3.458 E F1 .958(must be enclosed in double) +3.458 F .623(quotes and)180 288 R F2 -.18(re)3.123 G(adline).18 E F1 +-.15(ex)3.123 G .623(pands an).15 F 3.123(yo)-.15 G 3.123(fi)-3.123 G +.623(ts special backslash-escapes in)-3.123 F F0(shell\255command)3.122 +E F1(be-)3.122 E .712(fore sa)180 300 R .712(ving it.)-.2 F .713 +(If the separator is a colon, an)5.712 F 3.213(ye)-.15 G .713 +(nclosing double quotes are optional, and)-3.213 F F2 -.18(re)180 312 S +(adline).18 E F1 .099(does not e)2.599 F .099 +(xpand the command string before sa)-.15 F .098(ving it.)-.2 F .098 +(Since the entire k)5.098 F .398 -.15(ey b)-.1 H(ind-).15 E 2.72(ing e) +180 324 R 2.72(xpression must be a single ar)-.15 F 2.72 +(gument, it should be enclosed in quotes.)-.18 F(When)7.72 E F0 +(shell\255command)180 336 Q F1 .563(is e)3.063 F -.15(xe)-.15 G .563 +(cuted, the shell sets the).15 F/F3 9/Times-Bold@0 SF(READLINE_LINE) +3.063 E F1 -.25(va)2.813 G .563(riable to the contents).25 F .319 +(of the)180 348 R F2 -.18(re)2.82 G(adline).18 E F1 .32(line b)2.82 F +(uf)-.2 E .32(fer and the)-.25 F F3(READLINE_POINT)2.82 E F1(and)2.57 E +F3(READLINE_MARK)2.82 E F1 -.25(va)2.57 G(riables).25 E .546 +(to the current location of the insertion point and the sa)180 360 R +-.15(ve)-.2 G 3.045(di).15 G .545(nsertion point \(the mark\), re-) +-3.045 F(specti)180 372 Q -.15(ve)-.25 G(ly).15 E 7.188(.T)-.65 G 2.188 +(he shell assigns an)-7.188 F 4.688(yn)-.15 G 2.188(umeric ar)-4.688 F +2.188(gument the user supplied to the)-.18 F F3(READ-)4.688 E +(LINE_ARGUMENT)180 384 Q F1 -.25(va)2.399 G 2.649(riable. If).25 F .149 +(there w)2.649 F .149(as no ar)-.1 F .149(gument, that v)-.18 F .148 +(ariable is not set.)-.25 F .148(If the e)5.148 F(x-)-.15 E .582 +(ecuted command changes the v)180 396 R .583(alue of an)-.25 F 3.083(yo) +-.15 G(f)-3.083 E F3(READLINE_LINE)3.083 E/F4 9/Times-Roman@0 SF(,)A F3 +(READLINE_POINT)2.833 E F4(,)A F1(or)2.833 E F3(READLINE_MARK)180 408 Q +F4(,)A F1(those ne)2.25 E 2.5(wv)-.25 G +(alues will be re\215ected in the editing state.)-2.75 E F2<ad58>144 420 +Q F1 .83(List all k)180 420 R 1.13 -.15(ey s)-.1 H .829 (equences bound to shell commands and the associated commands in a for) -.15 F(-)-.2 E(mat that can be reused as input.)180 664.8 Q(The return v) -144 681.6 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15 +.15 F(-)-.2 E(mat that can be reused as input.)180 432 Q(The return v) +144 448.8 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15 (ve)-.25 G 2.5(no).15 G 2.5(ra)-2.5 G 2.5(ne)-2.5 G(rror occurred.)-2.5 -E F1(br)108 698.4 Q(eak)-.18 E F0([)2.5 E F2(n)A F0(])A .054 -(Exit from within a)144 710.4 R F1 -.25(fo)2.554 G(r).25 E F0(,)A F1 -(while)2.554 E F0(,)A F1(until)2.555 E F0 2.555(,o)C(r)-2.555 E F1 -(select)2.555 E F0 2.555(loop. If)2.555 F F2(n)2.555 E F0 .055 -(is speci\214ed, break)2.555 F F2(n)2.555 E F0(le)2.555 E -.15(ve)-.25 G -(ls.).15 E F2(n)5.415 E F0 .055(must be)2.795 F/F5 10/Symbol SF<b3>2.555 -E F0(1.)2.555 E(If)144 722.4 Q F2(n)3.075 E F0 .215(is greater than the\ +E F2(br)108 465.6 Q(eak)-.18 E F1([)2.5 E F0(n)A F1(])A .054 +(Exit from within a)144 477.6 R F2 -.25(fo)2.554 G(r).25 E F1(,)A F2 +(while)2.554 E F1(,)A F2(until)2.555 E F1 2.555(,o)C(r)-2.555 E F2 +(select)2.555 E F1 2.555(loop. If)2.555 F F0(n)2.555 E F1 .055 +(is speci\214ed, break)2.555 F F0(n)2.555 E F1(le)2.555 E -.15(ve)-.25 G +(ls.).15 E F0(n)5.415 E F1 .055(must be)2.795 F/F5 10/Symbol SF<b3>2.555 +E F1(1.)2.555 E(If)144 489.6 Q F0(n)3.075 E F1 .215(is greater than the\ number of enclosing loops, all enclosing loops are e)2.955 F 2.714 -(xited. The)-.15 F .214(return v)2.714 F(alue)-.25 E(GNU Bash 5.2)72 768 -Q(2022 September 19)135.955 E(60)185.115 E 0 Cg EP -%%Page: 61 61 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(is 0 unless)144 84 -Q/F1 10/Times-Italic@0 SF(n)2.5 E F0(is not greater than or equal to 1.) -2.5 E/F2 10/Times-Bold@0 SF -.2(bu)108 100.8 S(iltin).2 E F1(shell\255b) -2.5 E(uiltin)-.2 E F0([)2.5 E F1(ar)A(guments)-.37 E F0(])A(Ex)144 112.8 -Q .77(ecute the speci\214ed shell b)-.15 F .77(uiltin, passing it)-.2 F -F1(ar)3.601 E(guments)-.37 E F0 3.271(,a).27 G .771(nd return its e) --3.271 F .771(xit status.)-.15 F .771(This is useful)5.771 F .616 +(xited. The)-.15 F .214(return v)2.714 F(alue)-.25 E(is 0 unless)144 +501.6 Q F0(n)2.5 E F1(is not greater than or equal to 1.)2.5 E F2 -.2 +(bu)108 518.4 S(iltin).2 E F0(shell\255b)2.5 E(uiltin)-.2 E F1([)2.5 E +F0(ar)A(guments)-.37 E F1(])A(Ex)144 530.4 Q .77 +(ecute the speci\214ed shell b)-.15 F .77(uiltin, passing it)-.2 F F0 +(ar)3.601 E(guments)-.37 E F1 3.271(,a).27 G .771(nd return its e)-3.271 +F .771(xit status.)-.15 F .771(This is useful)5.771 F .616 (when de\214ning a function whose name is the same as a shell b)144 -124.8 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144 -136.8 R .57(uiltin within the function.)-.2 F(The)5.57 E F2(cd)3.07 E F0 +542.4 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144 +554.4 R .57(uiltin within the function.)-.2 F(The)5.57 E F2(cd)3.07 E F1 -.2(bu)3.07 G .57(iltin is commonly rede\214ned this w).2 F(ay)-.1 E -5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 148.8 Q(alse if)-.1 -E F1(shell\255b)2.84 E(uiltin)-.2 E F0(is not a shell b)2.74 E -(uiltin command.)-.2 E F2(caller)108 165.6 Q F0([)2.5 E F1 -.2(ex)C(pr) -.2 E F0(])A .254(Returns the conte)144 177.6 R .254(xt of an)-.15 F +5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 566.4 Q(alse if)-.1 +E F0(shell\255b)2.84 E(uiltin)-.2 E F1(is not a shell b)2.74 E +(uiltin command.)-.2 E F2(caller)108 583.2 Q F1([)2.5 E F0 -.2(ex)C(pr) +.2 E F1(])A .254(Returns the conte)144 595.2 R .254(xt of an)-.15 F 2.754(ya)-.15 G(cti)-2.754 E .554 -.15(ve s)-.25 H .254 (ubroutine call \(a shell function or a script e).15 F -.15(xe)-.15 G -.254(cuted with the).15 F F2(.)2.753 E F0(or)2.753 E F2(sour)144 189.6 Q -(ce)-.18 E F0 -.2(bu)2.824 G 2.824(iltins\). W).2 F(ithout)-.4 E F1 -.2 -(ex)2.824 G(pr).2 E F0(,)A F2(caller)2.824 E F0 .324 +.254(cuted with the).15 F F2(.)2.753 E F1(or)2.753 E F2(sour)144 607.2 Q +(ce)-.18 E F1 -.2(bu)2.824 G 2.824(iltins\). W).2 F(ithout)-.4 E F0 -.2 +(ex)2.824 G(pr).2 E F1(,)A F2(caller)2.824 E F1 .324 (displays the line number and source \214lename of the current)2.824 F -.254(subroutine call.)144 201.6 R .254(If a non-ne)5.254 F -.05(ga)-.15 +.254(subroutine call.)144 619.2 R .254(If a non-ne)5.254 F -.05(ga)-.15 G(ti).05 E .554 -.15(ve i)-.25 H(nte).15 E .253(ger is supplied as)-.15 -F F1 -.2(ex)2.753 G(pr).2 E F0(,)A F2(caller)2.753 E F0 .253 +F F0 -.2(ex)2.753 G(pr).2 E F1(,)A F2(caller)2.753 E F1 .253 (displays the line number)2.753 F 2.753(,s)-.4 G(ub-)-2.753 E 1.327(rou\ tine name, and source \214le corresponding to that position in the curr\ -ent e)144 213.6 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001 -(This e)144 225.6 R .001(xtra information may be used, for e)-.15 F .001 +ent e)144 631.2 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001 +(This e)144 643.2 R .001(xtra information may be used, for e)-.15 F .001 (xample, to print a stack trace.)-.15 F(The current frame is frame)5 E -3.019(0. The)144 237.6 R .519(return v)3.019 F .519 +3.019(0. The)144 655.2 R .519(return v)3.019 F .519 (alue is 0 unless the shell is not e)-.25 F -.15(xe)-.15 G .52 -(cuting a subroutine call or).15 F F1 -.2(ex)3.02 G(pr).2 E F0 .52 -(does not corre-)3.02 F(spond to a v)144 249.6 Q -(alid position in the call stack.)-.25 E F2(cd)108 266.4 Q F0([)2.5 E F2 -<ad4c>A F0(|[)A F2<ad50>A F0([)2.5 E F2<ad65>A F0(]] [\255@]] [)A F1 -(dir)A F0(])A .322(Change the current directory to)144 278.4 R F1(dir) -2.822 E F0 5.322(.i)C(f)-5.322 E F1(dir)2.822 E F0 .321 -(is not supplied, the v)2.822 F .321(alue of the)-.25 F/F3 9 -/Times-Bold@0 SF(HOME)2.821 E F0 .321(shell v)2.571 F .321(ariable is) --.25 F .929(the def)144 290.4 R 3.429(ault. The)-.1 F -.25(va)3.429 G -(riable).25 E F3(CDP)3.429 E -.855(AT)-.666 G(H).855 E F0 .93 -(de\214nes the search path for the directory containing)3.179 F F1(dir) -3.78 E F0 3.43(:e).73 G(ach)-3.43 E .407(directory name in)144 302.4 R -F3(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0 .407(is searched for)2.657 F -F1(dir)2.907 E F0 5.407(.A)C(lternati)-5.407 E .707 -.15(ve d)-.25 H -.407(irectory names in).15 F F3(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0 -.406(are sepa-)2.656 F .799(rated by a colon \(:\).)144 314.4 R 3.299 -(An)5.799 G .799(ull directory name in)-3.299 F F3(CDP)3.299 E -.855(AT) --.666 G(H).855 E F0 .799(is the same as the current directory)3.049 F -3.3(,i)-.65 G(.e.,)-3.3 E -.74(``)144 326.4 S F2(.).74 E F0 -.74('')C -5.428(.I).74 G(f)-5.428 E F1(dir)3.278 E F0(be)3.658 E .428 -(gins with a slash \(/\), then)-.15 F F3(CDP)2.928 E -.855(AT)-.666 G(H) -.855 E F0 .428(is not used.)2.678 F(The)5.428 E F2<ad50>2.927 E F0 .427 -(option causes)2.927 F F2(cd)2.927 E F0 .427(to use the)2.927 F(ph)144 -338.4 Q .167 +(cuting a subroutine call or).15 F F0 -.2(ex)3.02 G(pr).2 E F1 .52 +(does not corre-)3.02 F(spond to a v)144 667.2 Q +(alid position in the call stack.)-.25 E F2(cd)108 684 Q F1([)2.5 E F2 +<ad4c>A F1(|[)A F2<ad50>A F1([)2.5 E F2<ad65>A F1(]]] [\255@] [)A F0 +(dir)A F1(])A .322(Change the current directory to)144 696 R F0(dir) +2.822 E F1 5.322(.i)C(f)-5.322 E F0(dir)2.822 E F1 .321 +(is not supplied, the v)2.822 F .321(alue of the)-.25 F F3(HOME)2.821 E +F1 .321(shell v)2.571 F .321(ariable is)-.25 F 1.365(the def)144 708 R +3.865(ault. The)-.1 F -.25(va)3.865 G(riable).25 E F3(CDP)3.865 E -.855 +(AT)-.666 G(H).855 E F1 1.365 +(de\214nes the search path for the directory containing)3.615 F F0(dir) +4.216 E F1 3.866(:t).73 G(he)-3.866 E .91 +(shell searches each directory name in)144 720 R F3(CDP)3.41 E -.855(AT) +-.666 G(H).855 E F1(for)3.16 E F0(dir)3.41 E F1 5.91(.A)C(lternati)-5.91 +E 1.209 -.15(ve d)-.25 H .909(irectory names in).15 F F3(CDP)3.409 E +-.855(AT)-.666 G(H).855 E F1(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 +E(62)193.45 E 0 Cg EP +%%Page: 63 63 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .764(are separated by a colon \(:\).)144 84 R 3.264 +(An)5.764 G .764(ull directory name in)-3.264 F/F2 9/Times-Bold@0 SF +(CDP)3.264 E -.855(AT)-.666 G(H).855 E F1 .764 +(is the same as the current direc-)3.014 F(tory)144 96 Q 2.72(,i)-.65 G +.22(.e., \231.\232.)-2.72 F(If)5.22 E F0(dir)3.069 E F1(be)3.449 E .219 +(gins with a slash \(/\), then)-.15 F F2(CDP)2.719 E -.855(AT)-.666 G(H) +.855 E F1 .219(is not used.)2.469 F(The)5.219 E/F3 10/Times-Bold@0 SF +<ad50>2.719 E F1 .219(option causes)2.719 F F3(cd)2.719 E F1(to)2.719 E +1.286(use the ph)144 108 R 1.287 (ysical directory structure by resolving symbolic links while tra)-.05 F --.15(ve)-.2 G(rsing).15 E F1(dir)2.668 E F0 .168(and before processing) -2.668 F 1.225(instances of)144 350.4 R F1(..)3.725 E F0(in)3.725 E F1 -(dir)3.725 E F0 1.225(\(see also the)3.725 F F2<ad50>3.725 E F0 1.225 -(option to the)3.725 F F2(set)3.725 E F0 -.2(bu)3.725 G 1.225 -(iltin command\); the).2 F F2<ad4c>3.725 E F0 1.225(option forces)3.725 -F .411(symbolic links to be follo)144 362.4 R .411 -(wed by resolving the link after processing instances of)-.25 F F1(..) -2.911 E F0(in)2.911 E F1(dir)2.911 E F0 5.411(.I)C(f)-5.411 E F1(..) -2.912 E F0(ap-)2.912 E .341(pears in)144 374.4 R F1(dir)2.841 E F0 2.841 -(,i)C 2.841(ti)-2.841 G 2.841(sp)-2.841 G .341(rocessed by remo)-2.841 F -.341(ving the immediately pre)-.15 F .34(vious pathname component from) --.25 F F1(dir)2.84 E F0(,)A .175(back to a slash or the be)144 386.4 R -.175(ginning of)-.15 F F1(dir)2.675 E F0 5.175(.I)C 2.675(ft)-5.175 G -(he)-2.675 E F2<ad65>2.676 E F0 .176(option is supplied with)2.676 F F2 -<ad50>2.676 E F0 2.676(,a)C .176(nd the current w)-2.676 F(ork-)-.1 E -.341(ing directory cannot be successfully determined after a successful\ - directory change,)144 398.4 R F2(cd)2.84 E F0 .34(will return)2.84 F -.356(an unsuccessful status.)144 410.4 R .356 -(On systems that support it, the)5.356 F F2<ad40>2.857 E F0 .357 -(option presents the e)2.857 F .357(xtended attrib)-.15 F(utes)-.2 E .07 -(associated with a \214le as a directory)144 422.4 R 5.07(.A)-.65 G -2.569(na)-5.07 G -.18(rg)-2.569 G .069(ument of).18 F F2<ad>2.569 E F0 -.069(is con)2.569 F -.15(ve)-.4 G .069(rted to).15 F F3($OLDPWD)2.569 E -F0 .069(before the direc-)2.319 F .306(tory change is attempted.)144 -434.4 R .306(If a non-empty directory name from)5.306 F F3(CDP)2.806 E --.855(AT)-.666 G(H).855 E F0 .306(is used, or if)2.556 F F2<ad>2.807 E -F0 .307(is the \214rst)2.807 F(ar)144 446.4 Q .116(gument, and the dire\ -ctory change is successful, the absolute pathname of the ne)-.18 F 2.615 -(ww)-.25 G .115(orking direc-)-2.715 F .15 -(tory is written to the standard output.)144 458.4 R .15 -(If the directory change is successful,)5.15 F F2(cd)2.65 E F0 .15 -(sets the v)2.65 F .15(alue of the)-.25 F F2(PWD)144 470.4 Q F0(en)2.958 -E .458(vironment v)-.4 F .458(ariable to the ne)-.25 F 2.958(wd)-.25 G -.458(irectory name, and sets the)-2.958 F F2(OLDPWD)2.957 E F0(en)2.957 -E .457(vironment v)-.4 F(ari-)-.25 E .125(able to the v)144 482.4 R .125 -(alue of the current w)-.25 F .126(orking directory before the change.) --.1 F .126(The return v)5.126 F .126(alue is true if the)-.25 F -(directory w)144 494.4 Q(as successfully changed; f)-.1 E -(alse otherwise.)-.1 E F2(command)108 511.2 Q F0([)2.5 E F2(\255pVv)A F0 -(])A F1(command)2.5 E F0([)2.5 E F1(ar)A(g)-.37 E F0(...])2.5 E(Run)144 -523.2 Q F1(command)2.765 E F0(with)3.335 E F1(ar)2.895 E(gs)-.37 E F0 -.065(suppressing the normal shell function lookup.)2.835 F .064(Only b) -5.064 F .064(uiltin commands or)-.2 F .501(commands found in the)144 -535.2 R F3 -.666(PA)3.001 G(TH)-.189 E F0 .502(are e)2.751 F -.15(xe) --.15 G 3.002(cuted. If).15 F(the)3.002 E F2<ad70>3.002 E F0 .502 -(option is gi)3.002 F -.15(ve)-.25 G .502(n, the search for).15 F F1 -(command)3.202 E F0(is)3.772 E .4(performed using a def)144 547.2 R .4 -(ault v)-.1 F .4(alue for)-.25 F F3 -.666(PA)2.9 G(TH)-.189 E F0 .399 +-.15(ve)-.2 G(rsing).15 E F0(dir)3.787 E F1 1.287(and before)3.787 F +.207(processing instances of)144 120 R F0(..)2.706 E F1(in)2.706 E F0 +(dir)2.706 E F1 .206(\(see also the)2.706 F F3<ad50>2.706 E F1 .206 +(option to the)2.706 F F3(set)2.706 E F1 -.2(bu)2.706 G .206 +(iltin command\); the).2 F F3<ad4c>2.706 E F1(option)2.706 E .19 +(forces symbolic links to be follo)144 132 R .191 +(wed by resolving the link after processing instances of)-.25 F F0(..) +2.691 E F1(in)2.691 E F0(dir)2.691 E F1 5.191(.I)C(f)-5.191 E F0(..)144 +144 Q F1 .322(appears in)2.822 F F0(dir)2.822 E F1 2.822(,i)C 2.822(ti) +-2.822 G 2.822(sp)-2.822 G .321(rocessed by remo)-2.822 F .321 +(ving the immediately pre)-.15 F .321(vious pathname component from)-.25 +F F0(dir)144 156 Q F1 3.156(,b)C .656(ack to a slash or the be)-3.156 F +.656(ginning of)-.15 F F0(dir)3.156 E F1 5.656(.I)C 3.156(ft)-5.656 G +(he)-3.156 E F3<ad65>3.156 E F1 .656(option is supplied with)3.156 F F3 +<ad50>3.156 E F1 3.156(,a)C .656(nd the current)-3.156 F -.1(wo)144 168 +S .863(rking directory cannot be successfully determined after a succes\ +sful directory change,).1 F F3(cd)3.363 E F1(will)3.363 E .338 +(return an unsuccessful status.)144 180 R .339 +(On systems that support it, the)5.338 F F3<ad40>2.839 E F1 .339 +(option presents the e)2.839 F .339(xtended at-)-.15 F(trib)144 192 Q +.589(utes associated with a \214le as a directory)-.2 F 5.589(.A)-.65 G +3.089(na)-5.589 G -.18(rg)-3.089 G .589(ument of).18 F F3<ad>3.089 E F1 +.588(is con)3.089 F -.15(ve)-.4 G .588(rted to).15 F F2($OLDPWD)3.088 E +F1(before)2.838 E .21(the directory change is attempted.)144 204 R .211 +(If a non-empty directory name from)5.211 F F2(CDP)2.711 E -.855(AT) +-.666 G(H).855 E F1 .211(is used, or if)2.461 F F3<ad>2.711 E F1(is) +2.711 E .274(the \214rst ar)144 216 R .274(gument, and the directory ch\ +ange is successful, the absolute pathname of the ne)-.18 F 2.774(ww)-.25 +G(ork-)-2.874 E 1.055(ing directory is written to the standard output.) +144 228 R 1.056(If the directory change is successful,)6.056 F F3(cd) +3.556 E F1 1.056(sets the)3.556 F -.25(va)144 240 S .508(lue of the).25 +F F3(PWD)3.008 E F1(en)3.008 E .508(vironment v)-.4 F .508 +(ariable to the ne)-.25 F 3.008(wd)-.25 G .508 +(irectory name, and sets the)-3.008 F F3(OLDPWD)3.008 E F1(en)3.008 E +(vi-)-.4 E .112(ronment v)144 252 R .112(ariable to the v)-.25 F .112 +(alue of the current w)-.25 F .112(orking directory before the change.) +-.1 F .112(The return v)5.112 F(alue)-.25 E(is true if the directory w) +144 264 Q(as successfully changed; f)-.1 E(alse otherwise.)-.1 E F3 +(command)108 280.8 Q F1([)2.5 E F3(\255pVv)A F1(])A F0(command)2.5 E F1 +([)2.5 E F0(ar)A(g)-.37 E F1 1.666(...)2.5 G(])-1.666 E(Run)144 292.8 Q +F0(command)2.765 E F1(with)3.335 E F0(ar)2.895 E(gs)-.37 E F1 .065 +(suppressing the normal shell function lookup.)2.835 F .064(Only b)5.064 +F .064(uiltin commands or)-.2 F .501(commands found in the)144 304.8 R +F2 -.666(PA)3.001 G(TH)-.189 E F1 .502(are e)2.751 F -.15(xe)-.15 G +3.002(cuted. If).15 F(the)3.002 E F3<ad70>3.002 E F1 .502(option is gi) +3.002 F -.15(ve)-.25 G .502(n, the search for).15 F F0(command)3.202 E +F1(is)3.772 E .4(performed using a def)144 316.8 R .4(ault v)-.1 F .4 +(alue for)-.25 F F2 -.666(PA)2.9 G(TH)-.189 E F1 .399 (that is guaranteed to \214nd all of the standard utilities.)2.649 F(If) -5.399 E .174(either the)144 559.2 R F2<ad56>2.674 E F0(or)2.674 E F2 -<ad76>2.674 E F0 .175(option is supplied, a description of)2.674 F F1 -(command)2.875 E F0 .175(is printed.)3.445 F(The)5.175 E F2<ad76>2.675 E -F0 .175(option causes)2.675 F 3.318(as)144 571.2 S .818(ingle w)-3.318 F +5.399 E .174(either the)144 328.8 R F3<ad56>2.674 E F1(or)2.674 E F3 +<ad76>2.674 E F1 .175(option is supplied, a description of)2.674 F F0 +(command)2.875 E F1 .175(is printed.)3.445 F(The)5.175 E F3<ad76>2.675 E +F1 .175(option causes)2.675 F 3.318(as)144 340.8 S .818(ingle w)-3.318 F .817(ord indicating the command or \214lename used to in)-.1 F -.2(vo) --.4 G -.1(ke).2 G F1(command)3.617 E F0 .817(to be displayed; the)4.087 -F F2<ad56>144 583.2 Q F0 .249(option produces a more v)2.749 F .249 -(erbose description.)-.15 F .249(If the)5.249 F F2<ad56>2.749 E F0(or) -2.749 E F2<ad76>2.75 E F0 .25(option is supplied, the e)2.75 F .25 -(xit status)-.15 F 1.005(is 0 if)144 595.2 R F1(command)3.705 E F0 -.1 +-.4 G -.1(ke).2 G F0(command)3.617 E F1 .817(to be displayed; the)4.087 +F F3<ad56>144 352.8 Q F1 .249(option produces a more v)2.749 F .249 +(erbose description.)-.15 F .249(If the)5.249 F F3<ad56>2.749 E F1(or) +2.749 E F3<ad76>2.75 E F1 .25(option is supplied, the e)2.75 F .25 +(xit status)-.15 F 1.005(is 0 if)144 364.8 R F0(command)3.705 E F1 -.1 (wa)4.275 G 3.505(sf).1 G 1.005(ound, and 1 if not.)-3.505 F 1.004 -(If neither option is supplied and an error occurred or)6.005 F F1 -(command)144.2 607.2 Q F0 1.598(cannot be found, the e)4.868 F 1.599 +(If neither option is supplied and an error occurred or)6.005 F F0 +(command)144.2 376.8 Q F1 1.598(cannot be found, the e)4.868 F 1.599 (xit status is 127.)-.15 F 1.599(Otherwise, the e)6.599 F 1.599 -(xit status of the)-.15 F F2(command)4.099 E F0 -.2(bu)144 619.2 S -(iltin is the e).2 E(xit status of)-.15 E F1(command)2.7 E F0(.).77 E F2 -(compgen)108 636 Q F0([)2.5 E F1(option)A F0 2.5(][)C F1(wor)-2.5 E(d) --.37 E F0(])A .013(Generate possible completion matches for)144 648 R F1 -(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F1(option)2.513 E -F0 .013(s, which may be an)B 2.512(yo)-.15 G(ption)-2.512 E .981 -(accepted by the)144 660 R F2(complete)3.481 E F0 -.2(bu)3.481 G .981 -(iltin with the e).2 F .981(xception of)-.15 F F2<ad70>3.481 E F0(and) -3.481 E F2<ad72>3.481 E F0 3.481(,a)C .982(nd write the matches to the) --3.481 F .131(standard output.)144 672 R .131(When using the)5.131 F F2 -<ad46>2.631 E F0(or)2.631 E F2<ad43>2.631 E F0 .131(options, the v)2.631 -F .13(arious shell v)-.25 F .13(ariables set by the program-)-.25 F -(mable completion f)144 684 Q(acilities, while a)-.1 E -.25(va)-.2 G -(ilable, will not ha).25 E .3 -.15(ve u)-.2 H(seful v).15 E(alues.)-.25 -E .352(The matches will be generated in the same w)144 708 R .352 +(xit status of the)-.15 F F3(command)4.099 E F1 -.2(bu)144 388.8 S +(iltin is the e).2 E(xit status of)-.15 E F0(command)2.7 E F1(.).77 E F3 +(compgen)108 405.6 Q F1([)2.5 E F3<ad56>A F0(varname)2.5 E F1 2.5(][)C +F0(option)-2.5 E F1 2.5(][)C F0(wor)-2.5 E(d)-.37 E F1(])A .013 +(Generate possible completion matches for)144 417.6 R F0(wor)2.513 E(d) +-.37 E F1 .013(according to the)2.513 F F0(option)2.513 E F1 .013 +(s, which may be an)B 2.512(yo)-.15 G(ption)-2.512 E 1.216 +(accepted by the)144 429.6 R F3(complete)3.716 E F1 -.2(bu)3.716 G 1.216 +(iltin with the e).2 F 1.216(xceptions of)-.15 F F3<ad70>3.716 E F1(,)A +F3<ad72>3.717 E F1(,)A F3<ad44>3.717 E F1(,)A F3<ad45>3.717 E F1 3.717 +(,a)C(nd)-3.717 E F3<ad49>3.717 E F1 3.717(,a)C 1.217(nd write the) +-3.717 F .505(matches to the standard output.)144 441.6 R .505(If the) +5.505 F F3<ad56>3.005 E F1 .505(option is supplied,)3.005 F F3(compgen) +3.004 E F1 .504(stores the generated com-)3.004 F 1.086 +(pletions into the inde)144 453.6 R -.15(xe)-.15 G 3.586(da).15 G 1.086 +(rray v)-3.586 F(ariable)-.25 E F0(varname)3.586 E F1 1.087 +(instead of writing them to the standard output.)3.586 F .195 +(When using the)144 465.6 R F3<ad46>2.695 E F1(or)2.695 E F3<ad43>2.695 +E F1 .195(options, the v)2.695 F .195(arious shell v)-.25 F .194 +(ariables set by the programmable completion)-.25 F -.1(fa)144 477.6 S +(cilities, while a).1 E -.25(va)-.2 G(ilable, will not ha).25 E .3 -.15 +(ve u)-.2 H(seful v).15 E(alues.)-.25 E .352 +(The matches will be generated in the same w)144 494.4 R .352 (ay as if the programmable completion code had gen-)-.1 F .02(erated th\ em directly from a completion speci\214cation with the same \215ags.)144 -720 R(If)5.02 E F1(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only)2.52 -F(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(61)185.115 E 0 Cg EP -%%Page: 62 62 +506.4 R(If)5.02 E F0(wor)2.52 E(d)-.37 E F1 .02(is speci\214ed, only) +2.52 F(those completions matching)144 518.4 Q F0(wor)2.5 E(d)-.37 E F1 +(will be displayed.)2.5 E(The return v)144 535.2 Q +(alue is true unless an in)-.25 E -.25(va)-.4 G +(lid option is supplied, or no matches were generated.).25 E F3 +(complete)108 552 Q F1([)2.5 E F3(\255abcdefgjksuv)A F1 2.5(][)C F3 +<ad6f>-2.5 E F0(comp-option)2.5 E F1 2.5(][)C F3(\255DEI)-2.5 E F1 2.5 +(][)C F3<ad41>-2.5 E F0(action)2.5 E F1(])A([)144 564 Q F3<ad47>A F0 +(globpat)2.5 E F1 2.5(][)C F3<ad57>-2.5 E F0(wor)2.5 E(dlist)-.37 E F1 +2.5(][)C F3<ad46>-2.5 E F0(function)2.5 E F1 2.5(][)C F3<ad43>-2.5 E F0 +(command)2.5 E F1(])A([)144 576 Q F3<ad58>A F0(\214lterpat)2.5 E F1 2.5 +(][)C F3<ad50>-2.5 E F0(pr)2.5 E(e\214x)-.37 E F1 2.5(][)C F3<ad53>-2.5 +E F0(suf)2.5 E<8c78>-.18 E F1(])A F0(name)2.5 E F1([)2.5 E F0(name)A F1 +1.666(...)2.5 G(])-1.666 E F3(complete \255pr)108 588 Q F1([)2.5 E F3 +(\255DEI)A F1 2.5(][)C F0(name)-2.5 E F1 1.666(...)2.5 G(])-1.666 E .633 +(Specify ho)144 600 R 3.133(wa)-.25 G -.18(rg)-3.133 G .633 +(uments to each).18 F F0(name)3.133 E F1 .633(should be completed.)3.133 +F .634(If the)5.634 F F3<ad70>3.134 E F1 .634 +(option is supplied, or if no)3.134 F .567(options or)144 612 R F0(name) +3.067 E F1 3.067(sa)C .567(re supplied, e)-3.067 F .566 +(xisting completion speci\214cations are printed in a w)-.15 F .566 +(ay that allo)-.1 F(ws)-.25 E .046(them to be reused as input.)144 624 R +(The)5.046 E F3<ad72>2.546 E F1 .046(option remo)2.546 F -.15(ve)-.15 G +2.547(sac).15 G .047(ompletion speci\214cation for each)-2.547 F F0 +(name)2.547 E F1 2.547(,o)C .847 -.4(r, i)-2.547 H(f).4 E(no)144 636 Q +F0(name)2.954 E F1 2.953(sa)C .453 +(re supplied, all completion speci\214cations.)-2.953 F(The)5.453 E F3 +<ad44>2.953 E F1 .453(option indicates that other supplied)2.953 F 1.454 +(options and actions should apply to the \231def)144 648 R 1.454 +(ault\232 command completion; that is, completion at-)-.1 F .021 +(tempted on a command for which no completion has pre)144 660 R .021 +(viously been de\214ned.)-.25 F(The)5.02 E F3<ad45>2.52 E F1 .02 +(option indi-)2.52 F .698(cates that other supplied options and actions\ + should apply to \231empty\232 command completion; that)144 672 R .577 +(is, completion attempted on a blank line.)144 684 R(The)5.577 E F3 +<ad49>3.077 E F1 .576(option indicates that other supplied options and) +3.077 F .331 +(actions should apply to completion on the initial non-assignment w)144 +696 R .332(ord on the line, or after a com-)-.1 F .119 +(mand delimiter such as)144 708 R F3(;)2.618 E F1(or)2.618 E F3(|)2.618 +E F1 2.618(,w)C .118(hich is usually command name completion.)-2.618 F +.118(If multiple options are)5.118 F 1.003(supplied, the)144 720 R F3 +<ad44>3.503 E F1 1.003(option tak)3.503 F 1.004(es precedence o)-.1 F +-.15(ve)-.15 G(r).15 E F3<ad45>3.504 E F1 3.504(,a)C 1.004(nd both tak) +-3.504 F 3.504(ep)-.1 G 1.004(recedence o)-3.504 F -.15(ve)-.15 G(r).15 +E F3<ad49>3.504 E F1 6.004(.I)C 3.504(fa)-6.004 G 1.304 -.15(ny o)-3.504 +H(f).15 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(63)193.45 E 0 Cg +EP +%%Page: 64 64 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -(those completions matching)144 84 Q/F1 10/Times-Italic@0 SF(wor)2.5 E -(d)-.37 E F0(will be displayed.)2.5 E(The return v)144 108 Q -(alue is true unless an in)-.25 E -.25(va)-.4 G -(lid option is supplied, or no matches were generated.).25 E/F2 10 -/Times-Bold@0 SF(complete)108 124.8 Q F0([)2.5 E F2(\255abcdefgjksuv)A -F0 2.5(][)C F2<ad6f>-2.5 E F1(comp-option)2.5 E F0 2.5(][)C F2(\255DEI) --2.5 E F0 2.5(][)C F2<ad41>-2.5 E F1(action)2.5 E F0 2.5(][)C F2<ad47> --2.5 E F1(globpat)2.5 E F0 2.5(][)C F2<ad57>-2.5 E F1(wor)2.5 E(dlist) --.37 E F0(])A([)144 136.8 Q F2<ad46>A F1(function)2.5 E F0 2.5(][)C F2 -<ad43>-2.5 E F1(command)2.5 E F0 2.5(][)C F2<ad58>-2.5 E F1(\214lterpat) -2.5 E F0 2.5(][)C F2<ad50>-2.5 E F1(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C -F2<ad53>-2.5 E F1(suf)2.5 E<8c78>-.18 E F0(])A F1(name)2.5 E F0([)2.5 E -F1(name ...)A F0(])A F2(complete \255pr)108 148.8 Q F0([)2.5 E F2 -(\255DEI)A F0 2.5(][)C F1(name)-2.5 E F0(...])2.5 E .633(Specify ho)144 -160.8 R 3.133(wa)-.25 G -.18(rg)-3.133 G .633(uments to each).18 F F1 -(name)3.133 E F0 .633(should be completed.)3.133 F .634(If the)5.634 F -F2<ad70>3.134 E F0 .634(option is supplied, or if no)3.134 F .14 -(options are supplied, e)144 172.8 R .139 -(xisting completion speci\214cations are printed in a w)-.15 F .139 -(ay that allo)-.1 F .139(ws them to be)-.25 F .31(reused as input.)144 -184.8 R(The)5.31 E F2<ad72>2.81 E F0 .31(option remo)2.81 F -.15(ve)-.15 -G 2.81(sac).15 G .31(ompletion speci\214cation for each)-2.81 F F1(name) -2.81 E F0 2.81(,o)C 1.11 -.4(r, i)-2.81 H 2.81(fn).4 G(o)-2.81 E F1 -(name)2.81 E F0(s)A 1.208 -(are supplied, all completion speci\214cations.)144 196.8 R(The)6.208 E -F2<ad44>3.708 E F0 1.207(option indicates that other supplied options) -3.707 F .5(and actions should apply to the `)144 208.8 R(`def)-.74 E -(ault')-.1 E 3('c)-.74 G .5 -(ommand completion; that is, completion attempted on)-3 F 3.455(ac)144 -220.8 S .955(ommand for which no completion has pre)-3.455 F .955 -(viously been de\214ned.)-.25 F(The)5.955 E F2<ad45>3.455 E F0 .955 -(option indicates that)3.455 F .876 -(other supplied options and actions should apply to `)144 232.8 R -(`empty')-.74 E 3.376('c)-.74 G .876(ommand completion; that is, com-) --3.376 F .448(pletion attempted on a blank line.)144 244.8 R(The)5.447 E -F2<ad49>2.947 E F0 .447 -(option indicates that other supplied options and actions)2.947 F .123 -(should apply to completion on the initial non-assignment w)144 256.8 R -.123(ord on the line, or after a command de-)-.1 F 1.021 -(limiter such as)144 268.8 R F2(;)3.521 E F0(or)3.521 E F2(|)3.521 E F0 -3.521(,w)C 1.021(hich is usually command name completion.)-3.521 F 1.02 -(If multiple options are sup-)6.02 F .707(plied, the)144 280.8 R F2 -<ad44>3.207 E F0 .707(option tak)3.207 F .707(es precedence o)-.1 F -.15 -(ve)-.15 G(r).15 E F2<ad45>3.208 E F0 3.208(,a)C .708(nd both tak)-3.208 -F 3.208(ep)-.1 G .708(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F2 -<ad49>3.208 E F0 5.708(.I)C 3.208(fa)-5.708 G 1.008 -.15(ny o)-3.208 H -(f).15 E F2<ad44>3.208 E F0(,)A F2<ad45>144 292.8 Q F0 2.604(,o)C(r) --2.604 E F2<ad49>2.604 E F0 .103(are supplied, an)2.603 F 2.603(yo)-.15 -G(ther)-2.603 E F1(name)2.603 E F0(ar)2.603 E .103 -(guments are ignored; these completions only apply to the)-.18 F -(case speci\214ed by the option.)144 304.8 Q .152 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF<ad44>144 84 Q F1(,)A F2<ad45> +3.082 E F1 3.082(,o)C(r)-3.082 E F2<ad49>3.082 E F1 .582 +(are supplied, an)3.082 F 3.082(yo)-.15 G(ther)-3.082 E F0(name)3.082 E +F1(ar)3.082 E .582(guments are ignored; these completions only apply) +-.18 F(to the case speci\214ed by the option.)144 96 Q .152 (The process of applying these completion speci\214cations when w)144 -328.8 R .153(ord completion is attempted is de-)-.1 F(scribed abo)144 -340.8 Q .3 -.15(ve u)-.15 H(nder).15 E F2(Pr)2.5 E -(ogrammable Completion)-.18 E F0(.)A .556 -(Other options, if speci\214ed, ha)144 364.8 R .856 -.15(ve t)-.2 H .555 +112.8 R .153(ord completion is attempted is de-)-.1 F(scribed abo)144 +124.8 Q .3 -.15(ve u)-.15 H(nder).15 E F2(Pr)2.5 E +(ogrammable Completion)-.18 E F1(.)A .556 +(Other options, if speci\214ed, ha)144 141.6 R .856 -.15(ve t)-.2 H .555 (he follo).15 F .555(wing meanings.)-.25 F .555(The ar)5.555 F .555 -(guments to the)-.18 F F2<ad47>3.055 E F0(,)A F2<ad57>3.055 E F0 3.055 -(,a)C(nd)-3.055 E F2<ad58>3.055 E F0 .722(options \(and, if necessary) -144 376.8 R 3.222(,t)-.65 G(he)-3.222 E F2<ad50>3.222 E F0(and)3.222 E -F2<ad53>3.222 E F0 .723 +(guments to the)-.18 F F2<ad47>3.055 E F1(,)A F2<ad57>3.055 E F1 3.055 +(,a)C(nd)-3.055 E F2<ad58>3.055 E F1 .722(options \(and, if necessary) +144 153.6 R 3.222(,t)-.65 G(he)-3.222 E F2<ad50>3.222 E F1(and)3.222 E +F2<ad53>3.222 E F1 .723 (options\) should be quoted to protect them from e)3.222 F(xpan-)-.15 E -(sion before the)144 388.8 Q F2(complete)2.5 E F0 -.2(bu)2.5 G -(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F2<ad6f>144 400.8 Q -F1(comp-option)2.5 E F0(The)184 412.8 Q F1(comp-option)2.791 E F0 .291 +(sion before the)144 165.6 Q F2(complete)2.5 E F1 -.2(bu)2.5 G +(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F2<ad6f>144 182.4 Q +F0(comp-option)2.5 E F1(The)184 194.4 Q F0(comp-option)2.791 E F1 .291 (controls se)2.791 F -.15(ve)-.25 G .291(ral aspects of the compspec') .15 F 2.791(sb)-.55 G(eha)-2.791 E .291(vior be)-.2 F .291 -(yond the simple)-.15 F(generation of completions.)184 424.8 Q F1 -(comp-option)5 E F0(may be one of:)2.5 E F2(bashdefault)184 436.8 Q F0 -.281(Perform the rest of the def)224 448.8 R(ault)-.1 E F2(bash)2.781 E -F0 .281(completions if the compspec generates no)2.781 F(matches.)224 -460.8 Q F2(default)184 472.8 Q F0 2.876(Use readline')224 472.8 R 5.376 +(yond the simple)-.15 F(generation of completions.)184 206.4 Q F0 +(comp-option)5 E F1(may be one of:)2.5 E F2(bashdefault)184 218.4 Q F1 +.281(Perform the rest of the def)224 230.4 R(ault)-.1 E F2(bash)2.781 E +F1 .281(completions if the compspec generates no)2.781 F(matches.)224 +242.4 Q F2(default)184 254.4 Q F1 2.876(Use readline')224 254.4 R 5.376 (sd)-.55 G(ef)-5.376 E 2.875 (ault \214lename completion if the compspec generates no)-.1 F(matches.) -224 484.8 Q F2(dir)184 496.8 Q(names)-.15 E F0(Perform directory name c\ -ompletion if the compspec generates no matches.)224 508.8 Q F2 -(\214lenames)184 520.8 Q F0 -.7(Te)224 532.8 S .137(ll readline that th\ +224 266.4 Q F2(dir)184 278.4 Q(names)-.15 E F1(Perform directory name c\ +ompletion if the compspec generates no matches.)224 290.4 Q F2 +(\214lenames)184 302.4 Q F1 -.7(Te)224 314.4 S .137(ll readline that th\ e compspec generates \214lenames, so it can perform an).7 F 2.637<798c> --.15 G(le-)-2.637 E .134(name\255speci\214c processing \(lik)224 544.8 R +-.15 G(le-)-2.637 E .134(name\255speci\214c processing \(lik)224 326.4 R 2.634(ea)-.1 G .134(dding a slash to directory names, quoting spe-) -2.634 F .45(cial characters, or suppressing trailing spaces\).)224 -556.8 R .45(Intended to be used with shell)5.45 F(functions.)224 568.8 Q -F2(noquote)184 580.8 Q F0 -.7(Te)224 580.8 S .814 -(ll readline not to quote the completed w).7 F .814(ords if the)-.1 F -3.314(ya)-.15 G .814(re \214lenames \(quoting)-3.314 F -(\214lenames is the def)224 592.8 Q(ault\).)-.1 E F2(nosort)184 604.8 Q -F0 -.7(Te)224 604.8 S(ll readline not to sort the list of possible comp\ -letions alphabetically).7 E(.)-.65 E F2(nospace)184 616.8 Q F0 -.7(Te) -224 616.8 S .22(ll readline not to append a space \(the def).7 F .22 +338.4 R .45(Intended to be used with shell)5.45 F(functions.)224 350.4 Q +F2(fullquote)184 362.4 Q F1 -.7(Te)224 374.4 S +(ll readline to quote all the completed w).7 E(ords e)-.1 E -.15(ve)-.25 +G 2.5(ni).15 G 2.5(ft)-2.5 G(he)-2.5 E 2.5(ya)-.15 G +(re not \214lenames.)-2.5 E F2(noquote)184 386.4 Q F1 -.7(Te)224 386.4 S +.814(ll readline not to quote the completed w).7 F .814(ords if the)-.1 +F 3.314(ya)-.15 G .814(re \214lenames \(quoting)-3.314 F +(\214lenames is the def)224 398.4 Q(ault\).)-.1 E F2(nosort)184 410.4 Q +F1 -.7(Te)224 410.4 S(ll readline not to sort the list of possible comp\ +letions alphabetically).7 E(.)-.65 E F2(nospace)184 422.4 Q F1 -.7(Te) +224 422.4 S .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 -628.8 Q F2(plusdirs)184 640.8 Q F0 1.985(After an)224 640.8 R 4.485(ym) +434.4 Q F2(plusdirs)184 446.4 Q F1 1.985(After an)224 446.4 R 4.485(ym) -.15 G 1.985 (atches de\214ned by the compspec are generated, directory name)-4.485 F -.583(completion is attempted and an)224 652.8 R 3.084(ym)-.15 G .584 +.583(completion is attempted and an)224 458.4 R 3.084(ym)-.15 G .584 (atches are added to the results of the other)-3.084 F(actions.)224 -664.8 Q F2<ad41>144 676.8 Q F1(action)2.5 E F0(The)184 688.8 Q F1 -(action)2.5 E F0(may be one of the follo)2.5 E +470.4 Q F2<ad41>144 482.4 Q F0(action)2.5 E F1(The)184 494.4 Q F0 +(action)2.5 E F1(may be one of the follo)2.5 E (wing to generate a list of possible completions:)-.25 E F2(alias)184 -700.8 Q F0(Alias names.)224 700.8 Q(May also be speci\214ed as)5 E F2 -<ad61>2.5 E F0(.)A(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(62) -185.115 E 0 Cg EP -%%Page: 63 63 +506.4 Q F1(Alias names.)224 506.4 Q(May also be speci\214ed as)5 E F2 +<ad61>2.5 E F1(.)A F2(arrayv)184 518.4 Q(ar)-.1 E F1(Array v)224 530.4 Q +(ariable names.)-.25 E F2(binding)184 542.4 Q(Readline)224 542.4 Q F1 +-.1(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F2 -.2(bu)184 554.4 S +(iltin).2 E F1(Names of shell b)224 554.4 Q(uiltin commands.)-.2 E +(May also be speci\214ed as)5 E F2<ad62>2.5 E F1(.)A F2(command)184 +566.4 Q F1(Command names.)224 578.4 Q(May also be speci\214ed as)5 E F2 +<ad63>2.5 E F1(.)A F2(dir)184 590.4 Q(ectory)-.18 E F1(Directory names.) +224 602.4 Q(May also be speci\214ed as)5 E F2<ad64>2.5 E F1(.)A F2 +(disabled)184 614.4 Q F1(Names of disabled shell b)224 626.4 Q(uiltins.) +-.2 E F2(enabled)184 638.4 Q F1(Names of enabled shell b)224 638.4 Q +(uiltins.)-.2 E F2(export)184 650.4 Q F1(Names of e)224 650.4 Q +(xported shell v)-.15 E 2.5(ariables. May)-.25 F(also be speci\214ed as) +2.5 E F2<ad65>2.5 E F1(.)A F2(\214le)184 662.4 Q F1(File names.)224 +662.4 Q(May also be speci\214ed as)5 E F2<ad66>2.5 E F1(.)A F2(function) +184 674.4 Q F1(Names of shell functions.)224 686.4 Q F2(gr)184 698.4 Q +(oup)-.18 E F1(Group names.)224 698.4 Q(May also be speci\214ed as)5 E +F2<ad67>2.5 E F1(.)A(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(64) +193.45 E 0 Cg EP +%%Page: 65 65 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(arrayv)184 84 Q(ar)-.1 E F0(Array v)224 96 Q(ariable names.)-.25 E F1 -(binding)184 108 Q(Readline)224 108 Q F0 -.1(ke)2.5 G 2.5(yb)-.05 G -(inding names.)-2.5 E F1 -.2(bu)184 120 S(iltin).2 E F0 -(Names of shell b)224 120 Q(uiltin commands.)-.2 E -(May also be speci\214ed as)5 E F1<ad62>2.5 E F0(.)A F1(command)184 132 -Q F0(Command names.)224 144 Q(May also be speci\214ed as)5 E F1<ad63>2.5 -E F0(.)A F1(dir)184 156 Q(ectory)-.18 E F0(Directory names.)224 168 Q -(May also be speci\214ed as)5 E F1<ad64>2.5 E F0(.)A F1(disabled)184 180 -Q F0(Names of disabled shell b)224 192 Q(uiltins.)-.2 E F1(enabled)184 -204 Q F0(Names of enabled shell b)224 204 Q(uiltins.)-.2 E F1(export)184 -216 Q F0(Names of e)224 216 Q(xported shell v)-.15 E 2.5(ariables. May) --.25 F(also be speci\214ed as)2.5 E F1<ad65>2.5 E F0(.)A F1(\214le)184 -228 Q F0(File names.)224 228 Q(May also be speci\214ed as)5 E F1<ad66> -2.5 E F0(.)A F1(function)184 240 Q F0(Names of shell functions.)224 252 -Q F1(gr)184 264 Q(oup)-.18 E F0(Group names.)224 264 Q -(May also be speci\214ed as)5 E F1<ad67>2.5 E F0(.)A F1(helptopic)184 -276 Q F0(Help topics as accepted by the)224 288 Q F1(help)2.5 E F0 -.2 -(bu)2.5 G(iltin.).2 E F1(hostname)184 300 Q F0(Hostnames, as tak)224 312 -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 324 Q F0 -(Job names, if job control is acti)224 324 Q -.15(ve)-.25 G 5(.M).15 G -(ay also be speci\214ed as)-5 E F1<ad6a>2.5 E F0(.)A F1 -.1(ke)184 336 S -(yw).1 E(ord)-.1 E F0(Shell reserv)224 348 Q(ed w)-.15 E 2.5(ords. May) --.1 F(also be speci\214ed as)2.5 E F1<ad6b>2.5 E F0(.)A F1(running)184 -360 Q F0(Names of running jobs, if job control is acti)224 360 Q -.15 -(ve)-.25 G(.).15 E F1(ser)184 372 Q(vice)-.1 E F0(Service names.)224 372 -Q(May also be speci\214ed as)5 E F1<ad73>2.5 E F0(.)A F1(setopt)184 384 -Q F0 -1.11(Va)224 384 S(lid ar)1.11 E(guments for the)-.18 E F1<ad6f>2.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 396 Q F0(Shell option names as accepted by the)224 396 Q F1 -(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 408 Q F0 -(Signal names.)224 408 Q F1(stopped)184 420 Q F0 -(Names of stopped jobs, if job control is acti)224 420 Q -.15(ve)-.25 G -(.).15 E F1(user)184 432 Q F0(User names.)224 432 Q -(May also be speci\214ed as)5 E F1<ad75>2.5 E F0(.)A F1 -.1(va)184 444 S -(riable).1 E F0(Names of all shell v)224 444 Q 2.5(ariables. May)-.25 F -(also be speci\214ed as)2.5 E F1<ad76>2.5 E F0(.)A F1<ad43>144 456 Q/F3 -10/Times-Italic@0 SF(command)2.5 E(command)184 468 Q F0 1.056(is e)3.556 -F -.15(xe)-.15 G 1.056(cuted in a subshell en).15 F 1.056 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(helptopic)184 84 Q F1 +(Help topics as accepted by the)224 96 Q F2(help)2.5 E F1 -.2(bu)2.5 G +(iltin.).2 E F2(hostname)184 108 Q F1(Hostnames, as tak)224 120 Q +(en from the \214le speci\214ed by the)-.1 E/F3 9/Times-Bold@0 SF +(HOSTFILE)2.5 E F1(shell v)2.25 E(ariable.)-.25 E F2(job)184 132 Q F1 +(Job names, if job control is acti)224 132 Q -.15(ve)-.25 G 5(.M).15 G +(ay also be speci\214ed as)-5 E F2<ad6a>2.5 E F1(.)A F2 -.1(ke)184 144 S +(yw).1 E(ord)-.1 E F1(Shell reserv)224 156 Q(ed w)-.15 E 2.5(ords. May) +-.1 F(also be speci\214ed as)2.5 E F2<ad6b>2.5 E F1(.)A F2(running)184 +168 Q F1(Names of running jobs, if job control is acti)224 168 Q -.15 +(ve)-.25 G(.).15 E F2(ser)184 180 Q(vice)-.1 E F1(Service names.)224 180 +Q(May also be speci\214ed as)5 E F2<ad73>2.5 E F1(.)A F2(setopt)184 192 +Q F1 -1.11(Va)224 192 S(lid ar)1.11 E(guments for the)-.18 E F2<ad6f>2.5 +E F1(option to the)2.5 E F2(set)2.5 E F1 -.2(bu)2.5 G(iltin.).2 E F2 +(shopt)184 204 Q F1(Shell option names as accepted by the)224 204 Q F2 +(shopt)2.5 E F1 -.2(bu)2.5 G(iltin.).2 E F2(signal)184 216 Q F1 +(Signal names.)224 216 Q F2(stopped)184 228 Q F1 +(Names of stopped jobs, if job control is acti)224 228 Q -.15(ve)-.25 G +(.).15 E F2(user)184 240 Q F1(User names.)224 240 Q +(May also be speci\214ed as)5 E F2<ad75>2.5 E F1(.)A F2 -.1(va)184 252 S +(riable).1 E F1(Names of all shell v)224 252 Q 2.5(ariables. May)-.25 F +(also be speci\214ed as)2.5 E F2<ad76>2.5 E F1(.)A F2<ad43>144 264 Q F0 +(command)2.5 E(command)184 276 Q F1 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 2.5 -(completions. Ar)184 480 R(guments are passed as with the)-.18 E F1 -<ad46>2.5 E F0(option.)2.5 E F1<ad46>144 492 Q F3(function)2.5 E F0 .113 -(The shell function)184 504 R F3(function)2.614 E F0 .114(is e)2.614 F +(completions. Ar)184 288 R(guments are passed as with the)-.18 E F2 +<ad46>2.5 E F1(option.)2.5 E F2<ad46>144 300 Q F0(function)2.5 E F1 .113 +(The shell function)184 312 R F0(function)2.614 E F1 .114(is e)2.614 F -.15(xe)-.15 G .114(cuted in the current shell en).15 F 2.614 -(vironment. When)-.4 F .114(the func-)2.614 F .817(tion is e)184 516 R --.15(xe)-.15 G .817(cuted, the \214rst ar).15 F .817(gument \()-.18 F F1 -($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .816 +(vironment. When)-.4 F .114(the func-)2.614 F .817(tion is e)184 324 R +-.15(xe)-.15 G .817(cuted, the \214rst ar).15 F .817(gument \()-.18 F F2 +($1)A F1 3.316(\)i)C 3.316(st)-3.316 G .816 (he name of the command whose ar)-3.316 F(guments)-.18 E 1.407 -(are being completed, the second ar)184 528 R 1.407(gument \()-.18 F F1 -($2)A F0 3.907(\)i)C 3.907(st)-3.907 G 1.407(he w)-3.907 F 1.407 -(ord being completed, and the)-.1 F .104(third ar)184 540 R .104 -(gument \()-.18 F F1($3)A F0 2.604(\)i)C 2.604(st)-2.604 G .104(he w) +(are being completed, the second ar)184 336 R 1.407(gument \()-.18 F F2 +($2)A F1 3.907(\)i)C 3.907(st)-3.907 G 1.407(he w)-3.907 F 1.407 +(ord being completed, and the)-.1 F .104(third ar)184 348 R .104 +(gument \()-.18 F F2($3)A F1 2.604(\)i)C 2.604(st)-2.604 G .104(he w) -2.604 F .104(ord preceding the w)-.1 F .103 -(ord being completed on the current com-)-.1 F .101(mand line.)184 552 R +(ord being completed on the current com-)-.1 F .101(mand line.)184 360 R .101(When it \214nishes, the possible completions are retrie)5.101 F -.15(ve)-.25 G 2.602(df).15 G .102(rom the v)-2.602 F .102(alue of the) --.25 F F2(COMPREPL)184 564 Q(Y)-.828 E F0(array v)2.25 E(ariable.)-.25 E -F1<ad47>144 576 Q F3(globpat)2.5 E F0 1.008(The pathname e)184 588 R -1.008(xpansion pattern)-.15 F F3(globpat)3.507 E F0 1.007(is e)3.507 F -1.007(xpanded to generate the possible comple-)-.15 F(tions.)184 600 Q -F1<ad50>144 612 Q F3(pr)2.5 E(e\214x)-.37 E(pr)184 624 Q(e\214x)-.37 E -F0 .534(is added at the be)3.034 F .534 +-.25 F F3(COMPREPL)184 372 Q(Y)-.828 E F1(array v)2.25 E(ariable.)-.25 E +F2<ad47>144 384 Q F0(globpat)2.5 E F1 1.008(The pathname e)184 396 R +1.008(xpansion pattern)-.15 F F0(globpat)3.507 E F1 1.007(is e)3.507 F +1.007(xpanded to generate the possible comple-)-.15 F(tions.)184 408 Q +F2<ad50>144 420 Q F0(pr)2.5 E(e\214x)-.37 E(pr)184 432 Q(e\214x)-.37 E +F1 .534(is added at the be)3.034 F .534 (ginning of each possible completion after all other options ha)-.15 F --.15(ve)-.2 G(been applied.)184 636 Q F1<ad53>144 648 Q F3(suf)2.5 E -<8c78>-.18 E(suf)184 648 Q<8c78>-.18 E F0 +-.15(ve)-.2 G(been applied.)184 444 Q F2<ad53>144 456 Q F0(suf)2.5 E +<8c78>-.18 E(suf)184 456 Q<8c78>-.18 E F1 (is appended to each possible completion after all other options ha)2.5 -E .3 -.15(ve b)-.2 H(een applied.).15 E F1<ad57>144 660 Q F3(wor)2.5 E -(dlist)-.37 E F0(The)184 672 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 +E .3 -.15(ve b)-.2 H(een applied.).15 E F2<ad57>144 468 Q F0(wor)2.5 E +(dlist)-.37 E F1(The)184 480 Q F0(wor)3.64 E(dlist)-.37 E F1 1.14 +(is split using the characters in the)3.64 F F3(IFS)3.64 E F1 1.139 (special v)3.39 F 1.139(ariable as delimiters, and)-.25 F .98 -(each resultant w)184 684 R .98(ord is e)-.1 F 3.481(xpanded. Shell)-.15 -F .981(quoting is honored within)3.481 F F3(wor)3.481 E(dlist)-.37 E F0 -3.481(,i)C 3.481(no)-3.481 G .981(rder to)-3.481 F(pro)184 696 Q .766 +(each resultant w)184 492 R .98(ord is e)-.1 F 3.481(xpanded. Shell)-.15 +F .981(quoting is honored within)3.481 F F0(wor)3.481 E(dlist)-.37 E F1 +3.481(,i)C 3.481(no)-3.481 G .981(rder to)-3.481 F(pro)184 504 Q .766 (vide a mechanism for the w)-.15 F .765 (ords to contain shell metacharacters or characters in the)-.1 F -.25 -(va)184 708 S 1.964(lue of).25 F F2(IFS)4.464 E/F4 9/Times-Roman@0 SF(.) -A F0 1.964 +(va)184 516 S 1.964(lue of).25 F F3(IFS)4.464 E/F4 9/Times-Roman@0 SF(.) +A F1 1.964 (The possible completions are the members of the resultant list which) -6.464 F(match the w)184 720 Q(ord being completed.)-.1 E(GNU Bash 5.2)72 -768 Q(2022 September 19)135.955 E(63)185.115 E 0 Cg EP -%%Page: 64 64 +6.464 F(match the w)184 528 Q(ord being completed.)-.1 E F2<ad58>144 540 +Q F0(\214lterpat)2.5 E(\214lterpat)184 552 Q F1 .456 +(is a pattern as used for pathname e)2.956 F 2.956(xpansion. It)-.15 F +.455(is applied to the list of possible)2.956 F 1.596 +(completions generated by the preceding options and ar)184 564 R 1.596 +(guments, and each completion)-.18 F(matching)184 576 Q F0(\214lterpat) +3.205 E F1 .705(is remo)3.205 F -.15(ve)-.15 G 3.205(df).15 G .704 +(rom the list.)-3.205 F 3.204(Al)5.704 G(eading)-3.204 E F2(!)3.204 E F1 +(in)3.204 E F0(\214lterpat)3.204 E F1(ne)3.204 E -.05(ga)-.15 G .704 +(tes the pattern;).05 F(in this case, an)184 588 Q 2.5(yc)-.15 G +(ompletion not matching)-2.5 E F0(\214lterpat)2.5 E F1(is remo)2.5 E +-.15(ve)-.15 G(d.).15 E .46(The return v)144 604.8 R .46 +(alue is true unless an in)-.25 F -.25(va)-.4 G .461 +(lid option is supplied, an option other than).25 F F2<ad70>2.961 E F1 +(,)A F2<ad72>2.961 E F1(,)A F2<ad44>2.961 E F1(,)A F2<ad45>2.961 E F1(,) +A(or)144 616.8 Q F2<ad49>2.986 E F1 .486(is supplied without a)2.986 F +F0(name)2.986 E F1(ar)2.986 E .486(gument, an attempt is made to remo) +-.18 F .785 -.15(ve a c)-.15 H .485(ompletion speci\214ca-).15 F .163 +(tion for a)144 628.8 R F0(name)2.663 E F1 .164 +(for which no speci\214cation e)2.663 F .164 +(xists, or an error occurs adding a completion speci\214ca-)-.15 F +(tion.)144 640.8 Q F2(compopt)108 657.6 Q F1([)2.5 E F2<ad6f>A F0 +(option)2.5 E F1 2.5(][)C F2(\255DEI)-2.5 E F1 2.5(][)C F2(+o)-2.5 E F0 +(option)2.5 E F1 2.5(][)C F0(name)-2.5 E F1(])A .447 +(Modify completion options for each)144 669.6 R F0(name)2.947 E F1 .447 +(according to the)2.947 F F0(option)2.947 E F1 .447 +(s, or for the currently-e)B -.15(xe)-.15 G(cuting).15 E .725 +(completion if no)144 681.6 R F0(name)3.225 E F1 3.225(sa)C .725 +(re supplied.)-3.225 F .725(If no)5.725 F F0(option)3.225 E F1 3.225(sa) +C .725(re gi)-3.225 F -.15(ve)-.25 G .726 +(n, display the completion options for).15 F(each)144 693.6 Q F0(name) +3.224 E F1 .724(or the current completion.)3.224 F .724(The possible v) +5.724 F .724(alues of)-.25 F F0(option)3.224 E F1 .724(are those v)3.224 +F .723(alid for the)-.25 F F2(com-)3.223 E(plete)144 705.6 Q F1 -.2(bu) +2.677 G .177(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he) +-5.178 E F2<ad44>2.678 E F1 .178 +(option indicates that other supplied options should apply to)2.678 F +1.456(the \231def)144 717.6 R 1.455(ault\232 command completion; that i\ +s, completion attempted on a command for which no)-.1 F 2.038 +(completion has pre)144 729.6 R 2.038(viously been de\214ned.)-.25 F +(The)7.038 E F2<ad45>4.538 E F1 2.039 +(option indicates that other supplied options)4.538 F(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(65)193.45 E 0 Cg EP +%%Page: 66 66 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF<ad58>144 84 Q/F2 10/Times-Italic@0 SF(\214lterpat)2.5 E(\214lterpat) -184 96 Q F0 .456(is a pattern as used for pathname e)2.956 F 2.956 -(xpansion. It)-.15 F .455(is applied to the list of possible)2.956 F -1.596(completions generated by the preceding options and ar)184 108 R -1.596(guments, and each completion)-.18 F(matching)184 120 Q F2 -(\214lterpat)3.205 E F0 .705(is remo)3.205 F -.15(ve)-.15 G 3.205(df).15 -G .704(rom the list.)-3.205 F 3.204(Al)5.704 G(eading)-3.204 E F1(!) -3.204 E F0(in)3.204 E F2(\214lterpat)3.204 E F0(ne)3.204 E -.05(ga)-.15 -G .704(tes the pattern;).05 F(in this case, an)184 132 Q 2.5(yc)-.15 G -(ompletion not matching)-2.5 E F2(\214lterpat)2.5 E F0(is remo)2.5 E --.15(ve)-.15 G(d.).15 E .466(The return v)144 148.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 F1<ad70>2.967 E F0 -(or)2.967 E F1<ad72>2.967 E F0 .467(is sup-)2.967 F 1.362 -(plied without a)144 160.8 R F2(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 F2(name)144 172.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(compopt)108 189.6 Q F0([)2.5 E F1<ad6f>A F2(option)2.5 E F0 2.5(][)C -F1(\255DEI)-2.5 E F0 2.5(][)C F1(+o)-2.5 E F2(option)2.5 E F0 2.5(][)C -F2(name)-2.5 E F0(])A .447(Modify completion options for each)144 201.6 -R F2(name)2.947 E F0 .447(according to the)2.947 F F2(option)2.947 E F0 -.447(s, or for the currently-e)B -.15(xe)-.15 G(cuting).15 E .726 -(completion if no)144 213.6 R F2(name)3.226 E F0 3.226(sa)C .726 -(re supplied.)-3.226 F .725(If no)5.725 F F2(option)3.225 E F0 3.225(sa) -C .725(re gi)-3.225 F -.15(ve)-.25 G .725 -(n, display the completion options for).15 F(each)144 225.6 Q F2(name) -3.223 E F0 .723(or the current completion.)3.223 F .724(The possible v) -5.724 F .724(alues of)-.25 F F2(option)3.224 E F0 .724(are those v)3.224 -F .724(alid for the)-.25 F F1(com-)3.224 E(plete)144 237.6 Q F0 -.2(bu) -2.678 G .178(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he) --5.178 E F1<ad44>2.678 E F0 .178 -(option indicates that other supplied options should apply to)2.678 F -1.227(the `)144 249.6 R(`def)-.74 E(ault')-.1 E 3.727('c)-.74 G 1.228(o\ -mmand completion; that is, completion attempted on a command for which \ -no)-3.727 F 2.039(completion has pre)144 261.6 R 2.039 -(viously been de\214ned.)-.25 F(The)7.038 E F1<ad45>4.538 E F0 2.038 -(option indicates that other supplied options)4.538 F 1.538 -(should apply to `)144 273.6 R(`empty')-.74 E 4.038('c)-.74 G 1.539 -(ommand completion; that is, completion attempted on a blank line.) --4.038 F(The)144 285.6 Q F1<ad49>3.02 E F0 .52(option indicates that ot\ -her supplied options should apply to completion on the initial non-)3.02 -F .867(assignment w)144 297.6 R .868 -(ord on the line, or after a command delimiter such as)-.1 F F1(;)3.368 -E F0(or)3.368 E F1(|)3.368 E F0 3.368(,w)C .868(hich is usually com-) --3.368 F(mand name completion.)144 309.6 Q .432(The return v)144 333.6 R -.431(alue is true unless an in)-.25 F -.25(va)-.4 G .431 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .172(should apply to \231empty\232 command complet\ +ion; that is, completion attempted on a blank line.)144 84 R(The)5.172 E +/F2 10/Times-Bold@0 SF<ad49>144 96 Q F1 1.014(option indicates that oth\ +er supplied options should apply to completion on the initial non-as-) +3.513 F .282(signment w)144 108 R .281 +(ord on the line, or after a command delimiter such as)-.1 F F2(;)2.781 +E F1(or)2.781 E F2(|)2.781 E F1 2.781(,w)C .281(hich is usually command) +-2.781 F(name completion.)144 120 Q .431(The return v)144 136.8 R .431 +(alue is true unless an in)-.25 F -.25(va)-.4 G .431 (lid option is supplied, an attempt is made to modify the op-).25 F -(tions for a)144 345.6 Q F2(name)2.5 E F0 +(tions for a)144 148.8 Q F0(name)2.5 E F1 (for which no completion speci\214cation e)2.5 E -(xists, or an output error occurs.)-.15 E F1(continue)108 362.4 Q F0([) -2.5 E F2(n)A F0(])A .85(Resume the ne)144 374.4 R .85 -(xt iteration of the enclosing)-.15 F F1 -.25(fo)3.35 G(r).25 E F0(,)A -F1(while)3.351 E F0(,)A F1(until)3.351 E F0 3.351(,o)C(r)-3.351 E F1 -(select)3.351 E F0 3.351(loop. If)3.351 F F2(n)3.711 E F0 .851 -(is speci\214ed, re-)3.591 F .204(sume at the)144 386.4 R F2(n)2.704 E -F0 .204(th enclosing loop.)B F2(n)5.564 E F0 .204(must be)2.944 F/F3 10 -/Symbol SF<b3>2.704 E F0 2.703(1. If)2.704 F F2(n)3.063 E F0 .203 -(is greater than the number of enclosing loops,)2.943 F 1.183 -(the last enclosing loop \(the `)144 398.4 R(`top-le)-.74 E -.15(ve)-.25 -G(l').15 E 3.683('l)-.74 G 1.183(oop\) is resumed.)-3.683 F 1.184 -(The return v)6.184 F 1.184(alue is 0 unless)-.25 F F2(n)3.684 E F0 -1.184(is not)3.684 F(greater than or equal to 1.)144 410.4 Q F1(declar) -108 427.2 Q(e)-.18 E F0([)2.5 E F1(\255aAfFgiIlnrtux)A F0 2.5(][)C F1 -<ad70>-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 439.2 Q F0([)2.5 E F1(\255aAfFgiIlnrtux)A F0 -2.5(][)C F1<ad70>-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 451.2 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 463.2 S 3.46(riables. The).25 -F F1<ad70>3.46 E F0 .96(option will display the attrib)3.46 F .96 -(utes and v)-.2 F .96(alues of each)-.25 F F2(name)3.82 E F0 5.96(.W).18 -G(hen)-5.96 E F1<ad70>3.46 E F0 .96(is used)3.46 F(with)144 475.2 Q F2 -(name)2.775 E F0(ar)2.775 E .275 -(guments, additional options, other than)-.18 F F1<ad66>2.775 E F0(and) -2.775 E F1<ad46>2.775 E F0 2.775(,a)C .274(re ignored.)-2.775 F(When) -5.274 E F1<ad70>2.774 E F0 .274(is supplied)2.774 F(without)144 487.2 Q -F2(name)3.789 E F0(ar)3.789 E 1.289(guments, it will display the attrib) --.18 F 1.289(utes and v)-.2 F 1.29(alues of all v)-.25 F 1.29 -(ariables ha)-.25 F 1.29(ving the at-)-.2 F(trib)144 499.2 Q .38 -(utes speci\214ed by the additional options.)-.2 F .38 -(If no other options are supplied with)5.38 F F1<ad70>2.88 E F0(,)A F1 -(declar)2.88 E(e)-.18 E F0(will)2.88 E 1.106(display the attrib)144 -511.2 R 1.106(utes and v)-.2 F 1.106(alues of all shell v)-.25 F 3.606 -(ariables. The)-.25 F F1<ad66>3.606 E F0 1.107 -(option will restrict the display to)3.606 F .3(shell functions.)144 -523.2 R(The)5.3 E F1<ad46>2.8 E F0 .299(option inhibits the display of \ -function de\214nitions; only the function name)2.8 F 1.54(and attrib)144 -535.2 R 1.54(utes are printed.)-.2 F 1.54(If the)6.54 F F1(extdeb)4.04 E -(ug)-.2 E F0 1.54(shell option is enabled using)4.04 F F1(shopt)4.04 E -F0 4.04(,t)C 1.54(he source \214le)-4.04 F .648 -(name and line number where each)144 547.2 R F2(name)3.148 E F0 .648 -(is de\214ned are displayed as well.)3.148 F(The)5.648 E F1<ad46>3.148 E -F0 .648(option implies)3.148 F F1<ad66>144 559.2 Q F0 5.836(.T)C(he) --5.836 E F1<ad67>3.336 E F0 .836(option forces v)3.336 F .837 +(xists, or an output error occurs.)-.15 E F2(continue)108 165.6 Q F1([) +2.5 E F0(n)A F1(])A .851(Resume the ne)144 177.6 R .851 +(xt iteration of the enclosing)-.15 F F2 -.25(fo)3.351 G(r).25 E F1(,)A +F2(while)3.351 E F1(,)A F2(until)3.351 E F1 3.351(,o)C(r)-3.351 E F2 +(select)3.35 E F1 3.35(loop. If)3.35 F F0(n)3.71 E F1 .85 +(is speci\214ed, re-)3.59 F .203(sume at the)144 189.6 R F0(n)2.703 E F1 +.203(th enclosing loop.)B F0(n)5.563 E F1 .203(must be)2.943 F/F3 10 +/Symbol SF<b3>2.703 E F1 2.704(1. If)2.703 F F0(n)3.064 E F1 .204 +(is greater than the number of enclosing loops,)2.944 F .737 +(the shell resumes the last enclosing loop \(the \231top-le)144 201.6 R +-.15(ve)-.25 G .737(l\232 loop\).).15 F .737(The return v)5.737 F .737 +(alue is 0 unless)-.25 F F0(n)3.237 E F1(is)3.237 E +(not greater than or equal to 1.)144 213.6 Q F2(declar)108 230.4 Q(e) +-.18 E F1([)2.5 E F2(\255aAfFgiIlnrtux)A F1 2.5(][)C F2<ad70>-2.5 E F1 +2.5(][)C F0(name)-2.5 E F1([=)A F0(value)A F1 2.5(].)C 1.666(..)-.834 G +(])-1.666 E F2(typeset)108 242.4 Q F1([)2.5 E F2(\255aAfFgiIlnrtux)A F1 +2.5(][)C F2<ad70>-2.5 E F1 2.5(][)C F0(name)-2.5 E F1([=)A F0(value)A F1 +2.5(].)C 1.666(..)-.834 G(])-1.666 E 1.264(Declare v)144 254.4 R 1.264 +(ariables and/or gi)-.25 F 1.564 -.15(ve t)-.25 H 1.264(hem attrib).15 F +3.765(utes. If)-.2 F(no)3.765 E F0(name)3.765 E F1 3.765(sa)C 1.265 +(re gi)-3.765 F -.15(ve)-.25 G 3.765(nt).15 G 1.265(hen display the v) +-3.765 F 1.265(alues of)-.25 F -.25(va)144 266.4 S 3.46(riables. The).25 +F F2<ad70>3.46 E F1 .96(option will display the attrib)3.46 F .96 +(utes and v)-.2 F .96(alues of each)-.25 F F0(name)3.82 E F1 5.96(.W).18 +G(hen)-5.96 E F2<ad70>3.46 E F1 .96(is used)3.46 F(with)144 278.4 Q F0 +(name)2.774 E F1(ar)2.774 E .274 +(guments, additional options, other than)-.18 F F2<ad66>2.775 E F1(and) +2.775 E F2<ad46>2.775 E F1 2.775(,a)C .275(re ignored.)-2.775 F(When) +5.275 E F2<ad70>2.775 E F1 .275(is supplied)2.775 F(without)144 290.4 Q +F0(name)2.864 E F1(ar)2.864 E .364(guments, it will display the attrib) +-.18 F .363(utes and v)-.2 F .363(alues of all v)-.25 F .363 +(ariables ha)-.25 F .363(ving the attrib-)-.2 F .118 +(utes speci\214ed by the additional options.)144 302.4 R .118 +(If no other options are supplied with)5.118 F F2<ad70>2.618 E F1(,)A F2 +(declar)2.618 E(e)-.18 E F1 .119(will dis-)2.619 F .47(play the attrib) +144 314.4 R .47(utes and v)-.2 F .47(alues of all shell v)-.25 F 2.969 +(ariables. The)-.25 F F2<ad66>2.969 E F1 .469 +(option will restrict the display to shell)2.969 F 3.117(functions. The) +144 326.4 R F2<ad46>3.117 E F1 .617(option inhibits the display of func\ +tion de\214nitions; only the function name and)3.117 F(attrib)144 338.4 +Q 1.059(utes are printed.)-.2 F 1.059(If the)6.059 F F2(extdeb)3.559 E +(ug)-.2 E F1 1.059(shell option is enabled using)3.559 F F2(shopt)3.558 +E F1 3.558(,t)C 1.058(he source \214le name)-3.558 F 1.281 +(and line number where each)144 350.4 R F0(name)3.781 E F1 1.281 +(is de\214ned are displayed as well.)3.781 F(The)6.281 E F2<ad46>3.782 E +F1 1.282(option implies)3.782 F F2<ad66>3.782 E F1(.)A(The)144 362.4 Q +F2<ad67>2.735 E F1 .235(option forces v)2.735 F .235 (ariables to be created or modi\214ed at the global scope, e)-.25 F -.15 -(ve)-.25 G 3.337(nw).15 G(hen)-3.337 E F1(de-)3.337 E(clar)144 571.2 Q -(e)-.18 E F0 .819(is e)3.319 F -.15(xe)-.15 G .819 -(cuted in a shell function.).15 F .818 -(It is ignored in all other cases.)5.818 F(The)5.818 E F1<ad49>3.318 E -F0 .818(option causes local)3.318 F -.25(va)144 583.2 S .693 -(riables to inherit the attrib).25 F .693(utes \(e)-.2 F .693(xcept the) --.15 F F2(namer)3.194 E(ef)-.37 E F0(attrib)3.194 E .694(ute\) and v)-.2 -F .694(alue of an)-.25 F 3.194(ye)-.15 G .694(xisting v)-3.344 F -(ariable)-.25 E .82(with the same)144 595.2 R F2(name)3.32 E F0 .82 -(at a surrounding scope.)3.32 F .82(If there is no e)5.82 F .82 -(xisting v)-.15 F .82(ariable, the local v)-.25 F .82(ariable is)-.25 F -.379(initially unset.)144 607.2 R .379(The follo)5.379 F .379 -(wing options can be used to restrict output to v)-.25 F .38 -(ariables with the speci\214ed)-.25 F(attrib)144 619.2 Q(ute or to gi) --.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F1<ad61>144 -631.2 Q F0(Each)180 631.2 Q F2(name)2.5 E F0(is an inde)2.5 E -.15(xe) --.15 G 2.5(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F1(Arrays)2.5 E -F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1<ad41>144 643.2 Q F0(Each)180 -643.2 Q F2(name)2.5 E F0(is an associati)2.5 E .3 -.15(ve a)-.25 H -(rray v).15 E(ariable \(see)-.25 E F1(Arrays)2.5 E F0(abo)2.5 E -.15(ve) --.15 G(\).).15 E F1<ad66>144 655.2 Q F0(Use function names only)180 -655.2 Q(.)-.65 E F1<ad69>144 667.2 Q F0 .558(The v)180 667.2 R .558 +(ve)-.25 G 2.734(nw).15 G(hen)-2.734 E F2(declar)2.734 E(e)-.18 E F1(is) +2.734 E -.15(exe)144 374.4 S .527(cuted in a shell function.).15 F .528 +(It is ignored in all other cases.)5.527 F(The)5.528 E F2<ad49>3.028 E +F1 .528(option causes local v)3.028 F(ariables)-.25 E .871 +(to inherit the attrib)144 386.4 R .871(utes \(e)-.2 F .871(xcept the) +-.15 F F0(namer)3.371 E(ef)-.37 E F1(attrib)3.371 E .871(ute\) and v)-.2 +F .871(alue of an)-.25 F 3.37(ye)-.15 G .87(xisting v)-3.52 F .87 +(ariable with the)-.25 F(same)144 398.4 Q F0(name)3.457 E F1 .957 +(at a surrounding scope.)3.457 F .957(If there is no e)5.957 F .958 +(xisting v)-.15 F .958(ariable, the local v)-.25 F .958 +(ariable is initially)-.25 F 2.746(unset. The)144 410.4 R(follo)2.746 E +.245(wing options can be used to restrict output to v)-.25 F .245 +(ariables with the speci\214ed attrib)-.25 F(ute)-.2 E(or to gi)144 +422.4 Q .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F2<ad61> +144 434.4 Q F1(Each)180 434.4 Q F0(name)2.5 E F1(is an inde)2.5 E -.15 +(xe)-.15 G 2.5(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F2(Arrays)2.5 +E F1(abo)2.5 E -.15(ve)-.15 G(\).).15 E F2<ad41>144 446.4 Q F1(Each)180 +446.4 Q F0(name)2.5 E F1(is an associati)2.5 E .3 -.15(ve a)-.25 H +(rray v).15 E(ariable \(see)-.25 E F2(Arrays)2.5 E F1(abo)2.5 E -.15(ve) +-.15 G(\).).15 E F2<ad66>144 458.4 Q F1(Use function names only)180 +458.4 Q(.)-.65 E F2<ad69>144 470.4 Q F1 .557(The v)180 470.4 R .558 (ariable is treated as an inte)-.25 F .558(ger; arithmetic e)-.15 F -.25 -(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 679.2 Q F0(abo) +(va)-.25 G .558(luation \(see).25 F/F4 9/Times-Bold@0 SF .558 +(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION)180 482.4 Q F1(abo) 2.25 E -.15(ve)-.15 G 2.5(\)i).15 G 2.5(sp)-2.5 G(erformed when the v) --2.5 E(ariable is assigned a v)-.25 E(alue.)-.25 E F1<ad6c>144 691.2 Q -F0 .909(When the v)180 691.2 R .909(ariable is assigned a v)-.25 F .909 +-2.5 E(ariable is assigned a v)-.25 E(alue.)-.25 E F2<ad6c>144 494.4 Q +F1 .91(When the v)180 494.4 R .909(ariable is assigned a v)-.25 F .909 (alue, all upper)-.25 F .909(-case characters are con)-.2 F -.15(ve)-.4 -G .91(rted to lo).15 F(wer)-.25 E(-)-.2 E 2.5(case. The)180 703.2 R -(upper)2.5 E(-case attrib)-.2 E(ute is disabled.)-.2 E F1<ad6e>144 715.2 -Q F0(Gi)180 715.2 Q 1.62 -.15(ve e)-.25 H(ach).15 E F2(name)3.82 E F0 -(the)3.82 E F2(namer)3.819 E(ef)-.37 E F0(attrib)3.819 E 1.319 -(ute, making it a name reference to another v)-.2 F(ariable.)-.25 E -1.518(That other v)180 727.2 R 1.518(ariable is de\214ned by the v)-.25 -F 1.519(alue of)-.25 F F2(name)4.019 E F0 6.519(.A)C 1.519 -(ll references, assignments, and)-6.519 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(64)185.115 E 0 Cg EP -%%Page: 65 65 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(attrib)180 84 Q -.227(ute modi\214cations to)-.2 F/F1 10/Times-Italic@0 SF(name)2.726 E -F0 2.726(,e)C .226(xcept those using or changing the)-2.876 F/F2 10 -/Times-Bold@0 SF<ad6e>2.726 E F0(attrib)2.726 E .226(ute itself, are)-.2 -F .808(performed on the v)180 96 R .808(ariable referenced by)-.25 F F1 -(name)3.308 E F0 1.908 -.55('s v)D 3.308(alue. The).3 F .809 -(nameref attrib)3.309 F .809(ute cannot be)-.2 F(applied to array v)180 -108 Q(ariables.)-.25 E F2<ad72>144 120 Q F0(Mak)180 120 Q(e)-.1 E F1 -(name)3.655 E F0 3.655(sr)C(eadonly)-3.655 E 6.154(.T)-.65 G 1.154 -(hese names cannot then be assigned v)-6.154 F 1.154 -(alues by subsequent as-)-.25 F(signment statements or unset.)180 132 Q -F2<ad74>144 144 Q F0(Gi)180 144 Q .729 -.15(ve e)-.25 H(ach).15 E F1 -(name)2.929 E F0(the)2.929 E F1(tr)2.929 E(ace)-.15 E F0(attrib)2.929 E -2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F2(DEB)2.929 -E(UG)-.1 E F0(and)2.93 E F2(RETURN)2.93 E F0 -(traps from the calling shell.)180 156 Q(The trace attrib)5 E -(ute has no special meaning for v)-.2 E(ariables.)-.25 E F2<ad75>144 168 -Q F0 .91(When the v)180 168 R .909(ariable is assigned a v)-.25 F .909 -(alue, all lo)-.25 F(wer)-.25 E .909(-case characters are con)-.2 F -.15 -(ve)-.4 G .909(rted to upper).15 F(-)-.2 E 2.5(case. The)180 180 R(lo) -2.5 E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad78>144 -192 Q F0(Mark)180 192 Q F1(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 .143 -(Using `+' instead of `\255' turns of)144 208.8 R 2.643(ft)-.25 G .143 -(he attrib)-2.643 F .143(ute instead, with the e)-.2 F .144 -(xceptions that)-.15 F F2(+a)2.644 E F0(and)2.644 E F2(+A)2.644 E F0 -.144(may not)2.644 F .579(be used to destro)144 220.8 R 3.079(ya)-.1 G -.579(rray v)-3.079 F .579(ariables and)-.25 F F2(+r)3.079 E F0 .579 -(will not remo)3.079 F .879 -.15(ve t)-.15 H .579(he readonly attrib).15 -F 3.079(ute. When)-.2 F .578(used in a)3.078 F(function,)144 232.8 Q F2 -(declar)3.543 E(e)-.18 E F0(and)3.543 E F2(typeset)3.543 E F0(mak)3.543 -E 3.543(ee)-.1 G(ach)-3.543 E F1(name)3.543 E F0 1.043 -(local, as with the)3.543 F F2(local)3.544 E F0 1.044 -(command, unless the)3.544 F F2<ad67>3.544 E F0 1.205 -(option is supplied.)144 244.8 R 1.205(If a v)6.205 F 1.205 -(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F1(value)A F0 3.705 +G .909(rted to lo).15 F(wer)-.25 E(-)-.2 E 2.5(case. The)180 506.4 R +(upper)2.5 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad6e>144 518.4 +Q F1(Gi)180 518.4 Q 1.619 -.15(ve e)-.25 H(ach).15 E F0(name)3.819 E F1 +(the)3.819 E F0(namer)3.819 E(ef)-.37 E F1(attrib)3.819 E 1.319 +(ute, making it a name reference to another v)-.2 F(ariable.)-.25 E .478 +(That other v)180 530.4 R .478(ariable is de\214ned by the v)-.25 F .478 +(alue of)-.25 F F0(name)2.978 E F1 5.478(.A)C .478 +(ll references, assignments, and at-)-5.478 F(trib)180 542.4 Q .781 +(ute modi\214cations to)-.2 F F0(name)3.281 E F1 3.281(,e)C .782 +(xcept those using or changing the)-3.431 F F2<ad6e>3.282 E F1(attrib) +3.282 E .782(ute itself, are)-.2 F .809(performed on the v)180 554.4 R +.809(ariable referenced by)-.25 F F0(name)3.308 E F1 1.908 -.55('s v)D +3.308(alue. The).3 F .808(nameref attrib)3.308 F .808(ute cannot be)-.2 +F(applied to array v)180 566.4 Q(ariables.)-.25 E F2<ad72>144 578.4 Q F1 +(Mak)180 578.4 Q(e)-.1 E F0(name)3.654 E F1 3.654(sr)C(eadonly)-3.654 E +6.154(.T)-.65 G 1.154(hese names cannot then be assigned v)-6.154 F +1.155(alues by subsequent as-)-.25 F(signment statements or unset.)180 +590.4 Q F2<ad74>144 602.4 Q F1(Gi)180 602.4 Q .73 -.15(ve e)-.25 H(ach) +.15 E F0(name)2.93 E F1(the)2.929 E F0(tr)2.929 E(ace)-.15 E F1(attrib) +2.929 E 2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F2 +(DEB)2.929 E(UG)-.1 E F1(and)2.929 E F2(RETURN)2.929 E F1 +(traps from the calling shell.)180 614.4 Q(The trace attrib)5 E +(ute has no special meaning for v)-.2 E(ariables.)-.25 E F2<ad75>144 +626.4 Q F1 .909(When the v)180 626.4 R .909(ariable is assigned a v)-.25 +F .909(alue, all lo)-.25 F(wer)-.25 E .909(-case characters are con)-.2 +F -.15(ve)-.4 G .91(rted to upper).15 F(-)-.2 E 2.5(case. The)180 638.4 +R(lo)2.5 E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad78> +144 650.4 Q F1(Mark)180 650.4 Q F0(name)2.5 E F1 2.5(sf)C(or e)-2.5 E +(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .79 +(Using \231+\232 instead of \231\255\232 turns of)144 667.2 R 3.29(ft) +-.25 G .789(he attrib)-3.29 F .789(ute instead, with the e)-.2 F .789 +(xceptions that)-.15 F F2(+a)3.289 E F1(and)3.289 E F2(+A)3.289 E F1 +(may)3.289 E .088(not be used to destro)144 679.2 R 2.588(ya)-.1 G .088 +(rray v)-2.588 F .088(ariables and)-.25 F F2(+r)2.588 E F1 .088 +(will not remo)2.588 F .388 -.15(ve t)-.15 H .088(he readonly attrib).15 +F 2.589(ute. When)-.2 F .089(used in)2.589 F 3.045(af)144 691.2 S +(unction,)-3.045 E F2(declar)3.045 E(e)-.18 E F1(and)3.045 E F2(typeset) +3.045 E F1(mak)3.045 E 3.045(ee)-.1 G(ach)-3.045 E F0(name)3.044 E F1 +.544(local, as with the)3.044 F F2(local)3.044 E F1 .544 +(command, unless the)3.044 F F2<ad67>3.044 E F1 1.205 +(option is supplied.)144 703.2 R 1.205(If a v)6.205 F 1.205 +(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F0(value)A F1 3.705 (,t)C 1.205(he v)-3.705 F 1.205(alue of the v)-.25 F 1.205 -(ariable is set to)-.25 F F1(value)144 256.8 Q F0 5.217(.W)C .217 -(hen using)-5.217 F F2<ad61>2.717 E F0(or)2.717 E F2<ad41>2.717 E F0 -.217(and the compound assignment syntax to create array v)2.717 F .218 -(ariables, addi-)-.25 F .882(tional attrib)144 268.8 R .882 +(ariable is set to)-.25 F F0(value)144 715.2 Q F1 5.218(.W)C .218 +(hen using)-5.218 F F2<ad61>2.718 E F1(or)2.718 E F2<ad41>2.718 E F1 +.217(and the compound assignment syntax to create array v)2.717 F .217 +(ariables, addi-)-.25 F .882(tional attrib)144 727.2 R .882 (utes do not tak)-.2 F 3.382(ee)-.1 G -.25(ff)-3.382 G .882 (ect until subsequent assignments.).25 F .882(The return v)5.882 F .882 -(alue is 0 unless an)-.25 F(in)144 280.8 Q -.25(va)-.4 G .365(lid optio\ -n is encountered, an attempt is made to de\214ne a function using).25 F -/F3 10/Courier@0 SF .366(\255f foo=bar)2.866 F F0 2.866(,a)C 2.866(na) --2.866 G(t-)-2.866 E .549(tempt is made to assign a v)144 292.8 R .549 -(alue to a readonly v)-.25 F .548 -(ariable, an attempt is made to assign a v)-.25 F .548(alue to an)-.25 F -1.748(array v)144 304.8 R 1.748 -(ariable without using the compound assignment syntax \(see)-.25 F F2 -(Arrays)4.249 E F0(abo)4.249 E -.15(ve)-.15 G 1.749(\), one of the).15 F -F1(names)144 316.8 Q F0 .359(is not a v)2.859 F .359(alid shell v)-.25 F -.359(ariable name, an attempt is made to turn of)-.25 F 2.859(fr)-.25 G -.359(eadonly status for a read-)-2.859 F 1.212(only v)144 328.8 R 1.213 -(ariable, an attempt is made to turn of)-.25 F 3.713(fa)-.25 G 1.213 -(rray status for an array v)-3.713 F 1.213(ariable, or an attempt is) --.25 F(made to display a non-e)144 340.8 Q(xistent function with)-.15 E -F2<ad66>2.5 E F0(.)A F2(dirs [\255clpv] [+)108 357.6 Q F1(n)A F2 2.5(][) -C<ad>-2.5 E F1(n)A F2(])A F0 -.4(Wi)144 369.6 S .329 +(alue is 0 unless an)-.25 F(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E +(66)193.45 E 0 Cg EP +%%Page: 67 67 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(in)144 84 Q -.25(va)-.4 G .704(lid option is encou\ +ntered, an attempt is made to de\214ne a function using \231\255f foo=b\ +ar\232.).25 F .703(an at-)5.703 F .548(tempt is made to assign a v)144 +96 R .548(alue to a readonly v)-.25 F .549 +(ariable, an attempt is made to assign a v)-.25 F .549(alue to an)-.25 F +1.749(array v)144 108 R 1.749 +(ariable without using the compound assignment syntax \(see)-.25 F/F2 10 +/Times-Bold@0 SF(Arrays)4.248 E F1(abo)4.248 E -.15(ve)-.15 G 1.748 +(\), one of the).15 F F0(names)144 120 Q F1 .359(is not a v)2.858 F .359 +(alid shell v)-.25 F .359(ariable name, an attempt is made to turn of) +-.25 F 2.859(fr)-.25 G .359(eadonly status for a read-)-2.859 F 1.213 +(only v)144 132 R 1.213(ariable, an attempt is made to turn of)-.25 F +3.713(fa)-.25 G 1.213(rray status for an array v)-3.713 F 1.212 +(ariable, or an attempt is)-.25 F(made to display a non-e)144 144 Q +(xistent function with)-.15 E F2<ad66>2.5 E F1(.)A F2 +(dirs [\255clpv] [+)108 160.8 Q F0(n)A F2 2.5(][)C<ad>-2.5 E F0(n)A F2 +(])A F1 -.4(Wi)144 172.8 S .328 (thout options, displays the list of currently remembered directories.) -.4 F .328(The def)5.328 F .328(ault display is on a)-.1 F 1.238 -(single line with directory names separated by spaces.)144 381.6 R 1.238 -(Directories are added to the list with the)6.238 F F2(pushd)144 393.6 Q -F0 .928(command; the)3.428 F F2(popd)3.428 E F0 .928(command remo)3.428 +.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 184.8 R 1.238 +(Directories are added to the list with the)6.238 F F2(pushd)144 196.8 Q +F1 .927(command; the)3.427 F F2(popd)3.428 E F1 .928(command remo)3.428 F -.15(ve)-.15 G 3.428(se).15 G .928(ntries from the list.)-3.428 F .928 -(The current directory is al-)5.928 F -.1(wa)144 405.6 S -(ys the \214rst directory in the stack.).1 E F2<ad63>144 417.6 Q F0 -(Clears the directory stack by deleting all of the entries.)180 417.6 Q -F2<ad6c>144 429.6 Q F0 .881 -(Produces a listing using full pathnames; the def)180 429.6 R .882 +(The current directory is al-)5.928 F -.1(wa)144 208.8 S +(ys the \214rst directory in the stack.).1 E F2<ad63>144 220.8 Q F1 +(Clears the directory stack by deleting all of the entries.)180 220.8 Q +F2<ad6c>144 232.8 Q F1 .882 +(Produces a listing using full pathnames; the def)180 232.8 R .881 (ault listing format uses a tilde to denote)-.1 F(the home directory)180 -441.6 Q(.)-.65 E F2<ad70>144 453.6 Q F0 -(Print the directory stack with one entry per line.)180 453.6 Q F2<ad76> -144 465.6 Q F0 .273(Print the directory stack with one entry per line, \ -pre\214xing each entry with its inde)180 465.6 R 2.772(xi)-.15 G 2.772 -(nt)-2.772 G(he)-2.772 E(stack.)180 477.6 Q F2(+)144 489.6 Q F1(n)A F0 -1.564(Displays the)180 489.6 R F1(n)4.064 E F0 1.565 -(th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F2 -(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 501.6 Q F2<ad>144 513.6 Q F1 -(n)A F0 1.194(Displays the)180 513.6 R F1(n)3.694 E F0 1.194 +244.8 Q(.)-.65 E F2<ad70>144 256.8 Q F1 +(Print the directory stack with one entry per line.)180 256.8 Q F2<ad76> +144 268.8 Q F1 .272(Print the directory stack with one entry per line, \ +pre\214xing each entry with its inde)180 268.8 R 2.773(xi)-.15 G 2.773 +(nt)-2.773 G(he)-2.773 E(stack.)180 280.8 Q F2(+)144 292.8 Q F0(n)A F1 +1.565(Displays the)180 292.8 R F0(n)4.065 E F1 1.565 +(th entry counting from the left of the list sho)B 1.564(wn by)-.25 F F2 +(dirs)4.064 E F1 1.564(when in)4.064 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 304.8 Q F2<ad>144 316.8 Q F0 +(n)A F1 1.194(Displays the)180 316.8 R F0(n)3.694 E F1 1.194 (th entry counting from the right of the list sho)B 1.194(wn by)-.25 F -F2(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 525.6 Q .257(The return v)144 -542.4 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 -(lid option is supplied or).25 F F1(n)2.758 E F0(inde)2.758 E -.15(xe) +F2(dirs)3.694 E F1 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 328.8 Q .258(The return v)144 +345.6 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 +(lid option is supplied or).25 F F0(n)2.758 E F1(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 554.4 Q F2(diso)108 571.2 Q(wn)-.1 E F0([)2.5 E F2 -(\255ar)A F0 2.5(][)C F2<ad68>-2.5 E F0 2.5(][)C F1(jobspec)-2.5 E F0 -(... |)2.5 E F1(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 583.2 S .122 -(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach).15 E F1(jobspec) -4.362 E F0 .122(from the table of acti)2.932 F .422 -.15(ve j)-.25 H -2.622(obs. If).15 F F1(jobspec)4.362 E F0 .121(is not present, and)2.932 -F .096(neither the)144 595.2 R F2<ad61>2.596 E F0 .096(nor the)2.596 F -F2<ad72>2.596 E F0 .096(option is supplied, the)2.596 F F1(curr)2.596 E -.096(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F2 -<ad68>2.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each) -.15 F F1(jobspec)145.74 607.2 Q F0 .586(is not remo)3.396 F -.15(ve)-.15 -G 3.086(df).15 G .585(rom the table, b)-3.086 F .585(ut is mark)-.2 F -.585(ed so that)-.1 F/F4 9/Times-Bold@0 SF(SIGHUP)3.085 E F0 .585 -(is not sent to the job if the)2.835 F .962(shell recei)144 619.2 R -.15 -(ve)-.25 G 3.462(sa).15 G F4(SIGHUP)A/F5 9/Times-Roman@0 SF(.)A F0 .962 -(If no)5.462 F F1(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F2 -<ad61>3.462 E F0 .962(option means to remo)3.462 F 1.262 -.15(ve o)-.15 -H 3.462(rm).15 G .962(ark all)-3.462 F 1.359(jobs; the)144 631.2 R F2 -<ad72>3.859 E F0 1.359(option without a)3.859 F F1(jobspec)5.599 E F0 -(ar)4.169 E 1.358(gument restricts operation to running jobs.)-.18 F -1.358(The return)6.358 F -.25(va)144 643.2 S(lue 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 660 Q F0([)2.5 E F2(\255neE)A F0 2.5(][)C F1(ar)-2.5 E(g) --.37 E F0(...])2.5 E .424(Output the)144 672 R F1(ar)2.924 E(g)-.37 E F0 -.424(s, separated by spaces, follo)B .424(wed by a ne)-.25 F 2.924 -(wline. The)-.25 F .424(return status is 0 unless a write)2.924 F .308 -(error occurs.)144 684 R(If)5.308 E F2<ad6e>2.808 E F0 .308 -(is speci\214ed, the trailing ne)2.808 F .308(wline is suppressed.)-.25 -F .307(If the)5.308 F F2<ad65>2.807 E F0 .307(option is gi)2.807 F -.15 -(ve)-.25 G .307(n, inter).15 F(-)-.2 E .197(pretation of the follo)144 -696 R .198(wing backslash-escaped characters is enabled.)-.25 F(The) -5.198 E F2<ad45>2.698 E F0 .198(option disables the in-)2.698 F .067 -(terpretation of these escape characters, e)144 708 R -.15(ve)-.25 G +.15 F(tory stack.)144 357.6 Q F2(diso)108 374.4 Q(wn)-.1 E F1([)2.5 E F2 +(\255ar)A F1 2.5(][)C F2<ad68>-2.5 E F1 2.5(][)C F0(jobspec)-2.5 E F1 +-3.332 1.666(... |)2.5 H F0(pid).834 E F1 -3.332 1.666(... ])2.5 H -.4 +(Wi)144 386.4 S .121(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach) +.15 E F0(jobspec)4.362 E F1 .122(from the table of acti)2.932 F .422 +-.15(ve j)-.25 H 2.622(obs. If).15 F F0(jobspec)4.362 E F1 .122 +(is not present, and)2.932 F .096(neither the)144 398.4 R F2<ad61>2.596 +E F1 .096(nor the)2.596 F F2<ad72>2.596 E F1 .096 +(option is supplied, the)2.596 F F0(curr)2.596 E .096(ent job)-.37 F F1 +.096(is used.)2.596 F .096(If the)5.096 F F2<ad68>2.596 E F1 .096 +(option is gi)2.596 F -.15(ve)-.25 G .096(n, each).15 F F0(jobspec) +145.74 410.4 Q F1 .585(is not remo)3.395 F -.15(ve)-.15 G 3.085(df).15 G +.585(rom the table, b)-3.085 F .585(ut is mark)-.2 F .585(ed so that)-.1 +F/F3 9/Times-Bold@0 SF(SIGHUP)3.085 E F1 .586 +(is not sent to the job if the)2.835 F .962(shell recei)144 422.4 R -.15 +(ve)-.25 G 3.462(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0 SF(.)A F1 .962 +(If no)5.462 F F0(jobspec)5.202 E F1 .962(is supplied, the)3.772 F F2 +<ad61>3.462 E F1 .962(option means to remo)3.462 F 1.262 -.15(ve o)-.15 +H 3.462(rm).15 G .962(ark all)-3.462 F 1.358(jobs; the)144 434.4 R F2 +<ad72>3.858 E F1 1.358(option without a)3.858 F F0(jobspec)5.598 E F1 +(ar)4.169 E 1.359(gument restricts operation to running jobs.)-.18 F +1.359(The return)6.359 F -.25(va)144 446.4 S(lue is 0 unless a).25 E F0 +(jobspec)4.24 E F1(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E +F2(echo)108 463.2 Q F1([)2.5 E F2(\255neE)A F1 2.5(][)C F0(ar)-2.5 E(g) +-.37 E F1 1.666(...)2.5 G(])-1.666 E .425(Output the)144 475.2 R F0(ar) +2.925 E(g)-.37 E F1 .424(s, separated by spaces, follo)B .424 +(wed by a ne)-.25 F 2.924(wline. The)-.25 F .424 +(return status is 0 unless a write)2.924 F .307(error occurs.)144 487.2 +R(If)5.307 E F2<ad6e>2.807 E F1 .307(is speci\214ed, the trailing ne) +2.807 F .308(wline is suppressed.)-.25 F .308(If the)5.308 F F2<ad65> +2.808 E F1 .308(option is gi)2.808 F -.15(ve)-.25 G .308(n, inter).15 F +(-)-.2 E .198(pretation of the follo)144 499.2 R .198 +(wing backslash-escaped characters is enabled.)-.25 F(The)5.198 E F2 +<ad45>2.698 E F1 .197(option disables the in-)2.697 F .067 +(terpretation of these escape characters, e)144 511.2 R -.15(ve)-.25 G 2.567(no).15 G 2.567(ns)-2.567 G .067(ystems where the)-2.567 F 2.567 -(ya)-.15 G .067(re interpreted by def)-2.567 F 2.567(ault. The)-.1 F F2 -(xpg_echo)144 720 Q F0 .601 -(shell option may be used to dynamically determine whether or not)3.101 -F F2(echo)3.102 E F0 -.15(ex)3.102 G .602(pands these).15 F -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(65)185.115 E 0 Cg EP -%%Page: 66 66 +(ya)-.15 G .067(re interpreted by def)-2.567 F 2.568(ault. The)-.1 F F2 +(xpg_echo)144 523.2 Q F1 .681 +(shell option may be used to dynamically determine whether or not)3.181 +F F2(echo)3.18 E F1 .68(interprets an)3.18 F(y)-.15 E .94(options and e) +144 535.2 R .94(xpands these escape characters by def)-.15 F(ault.)-.1 E +F2(echo)5.94 E F1 .94(does not interpret)3.44 F F2<adad>3.44 E F1 .94 +(to mean the)3.44 F(end of options.)144 547.2 Q F2(echo)5 E F1 +(interprets the follo)2.5 E(wing escape sequences:)-.25 E F2(\\a)144 +559.2 Q F1(alert \(bell\))180 559.2 Q F2(\\b)144 571.2 Q F1(backspace) +180 571.2 Q F2(\\c)144 583.2 Q F1(suppress further output)180 583.2 Q F2 +(\\e)144 595.2 Q(\\E)144 607.2 Q F1(an escape character)180 607.2 Q F2 +(\\f)144 619.2 Q F1(form feed)180 619.2 Q F2(\\n)144 631.2 Q F1(ne)180 +631.2 Q 2.5(wl)-.25 G(ine)-2.5 E F2(\\r)144 643.2 Q F1(carriage return) +180 643.2 Q F2(\\t)144 655.2 Q F1(horizontal tab)180 655.2 Q F2(\\v)144 +667.2 Q F1 -.15(ve)180 667.2 S(rtical tab).15 E F2(\\\\)144 679.2 Q F1 +(backslash)180 679.2 Q F2(\\0)144 691.2 Q F0(nnn)A F1 +(the eight-bit character whose v)180 691.2 Q(alue is the octal v)-.25 E +(alue)-.25 E F0(nnn)2.5 E F1(\(zero to three octal digits\))2.5 E F2 +(\\x)144 703.2 Q F0(HH)A F1(the eight-bit character whose v)180 703.2 Q +(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F0(HH)2.5 E F1 +(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(67)193.45 E 0 Cg EP +%%Page: 68 68 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .659 -(escape characters by def)144 84 R(ault.)-.1 E/F1 10/Times-Bold@0 SF -(echo)5.659 E F0 .659(does not interpret)3.159 F F1<adad>3.159 E F0 .659 -(to mean the end of options.)3.159 F F1(echo)5.658 E F0(inter)3.158 E(-) --.2 E(prets the follo)144 96 Q(wing escape sequences:)-.25 E F1(\\a)144 -108 Q F0(alert \(bell\))180 108 Q F1(\\b)144 120 Q F0(backspace)180 120 -Q F1(\\c)144 132 Q F0(suppress further output)180 132 Q F1(\\e)144 144 Q -(\\E)144 156 Q F0(an escape character)180 156 Q F1(\\f)144 168 Q F0 -(form feed)180 168 Q F1(\\n)144 180 Q F0(ne)180 180 Q 2.5(wl)-.25 G(ine) --2.5 E F1(\\r)144 192 Q F0(carriage return)180 192 Q F1(\\t)144 204 Q F0 -(horizontal tab)180 204 Q F1(\\v)144 216 Q F0 -.15(ve)180 216 S -(rtical tab).15 E F1(\\\\)144 228 Q F0(backslash)180 228 Q F1(\\0)144 -240 Q/F2 10/Times-Italic@0 SF(nnn)A F0(the eight-bit character whose v) -180 240 Q(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(\\x)144 252 Q F2(HH)A F0 -(the eight-bit character whose v)180 252 Q(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(\\u)144 264 Q F2(HHHH)A F0 -1.506(the Unicode \(ISO/IEC 10646\) character whose v)180 276 R 1.507 -(alue is the he)-.25 F 1.507(xadecimal v)-.15 F(alue)-.25 E F2(HHHH) -4.007 E F0(\(one to four he)180 288 Q 2.5(xd)-.15 G(igits\))-2.5 E F1 -(\\U)144 300 Q F2(HHHHHHHH)A F0 .548 -(the Unicode \(ISO/IEC 10646\) character whose v)180 312 R .547 -(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-) -3.047 E(HHH)180 324 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\)) --2.5 E F1(enable)108 340.8 Q F0([)2.5 E F1<ad61>A F0 2.5(][)C F1 -(\255dnps)-2.5 E F0 2.5(][)C F1<ad66>-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 F1<ad6e>3.489 E F0 .99 -(is used, each)3.49 F F2(name)3.49 E F0 .99(is dis-)3.49 F .649 -(abled; otherwise,)144 388.8 R F2(names)3.148 E F0 .648(are enabled.) +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(\\u)144 84 Q F0(HHHH)A F1 +1.507(the Unicode \(ISO/IEC 10646\) character whose v)180 96 R 1.506 +(alue is the he)-.25 F 1.506(xadecimal v)-.15 F(alue)-.25 E F0(HHHH) +4.006 E F1(\(one to four he)180 108 Q 2.5(xd)-.15 G(igits\))-2.5 E F2 +(\\U)144 120 Q F0(HHHHHHHH)A F1 .547 +(the Unicode \(ISO/IEC 10646\) character whose v)180 132 R .547 +(alue is the he)-.25 F .548(xadecimal v)-.15 F(alue)-.25 E F0(HHHHH-) +3.048 E(HHH)180 144 Q F1(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\)) +-2.5 E F2(enable)108 160.8 Q F1([)2.5 E F2<ad61>A F1 2.5(][)C F2 +(\255dnps)-2.5 E F1 2.5(][)C F2<ad66>-2.5 E F0(\214lename)2.5 E F1 2.5 +(][)C F0(name)-2.5 E F1 1.666(...)2.5 G(])-1.666 E .278 +(Enable and disable b)144 172.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 .833(the same name as a shell b)144 +184.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.334 +(nt).15 G(hough)-3.334 E .99(the shell normally searches for b)144 196.8 +R .989(uiltins before disk commands.)-.2 F(If)5.989 E F2<ad6e>3.489 E F1 +.989(is used, each)3.489 F F0(name)3.489 E F1 .989(is dis-)3.489 F .648 +(abled; otherwise,)144 208.8 R F0(names)3.148 E F1 .648(are enabled.) 3.148 F -.15(Fo)5.648 G 3.148(re).15 G .648(xample, to use the)-3.298 F -F1(test)3.148 E F0 .648(binary found via the)3.148 F/F3 9/Times-Bold@0 -SF -.666(PA)3.148 G(TH)-.189 E F0(in-)2.898 E .538(stead of the shell b) -144 400.8 R .538(uiltin v)-.2 F .538(ersion, run)-.15 F/F4 10/Courier@0 -SF .538(enable -n test)3.038 F F0 5.538(.T)C(he)-5.538 E F1<ad66>3.038 E -F0 .539(option means to load the ne)3.038 F(w)-.25 E -.2(bu)144 412.8 S -1.365(iltin command).2 F F2(name)4.225 E F0 1.365(from shared object) -4.045 F F2(\214lename)5.775 E F0 3.865(,o).18 G 3.865(ns)-3.865 G 1.365 -(ystems that support dynamic loading.)-3.865 F .606(Bash will use the v) -144 424.8 R .606(alue of the)-.25 F F1 -.3(BA)3.106 G(SH_LO).3 E(AD)-.4 -E(ABLES_P)-.35 E -.95(AT)-.74 G(H).95 E F0 -.25(va)3.106 G .606 -(riable as a colon-separated list of).25 F .549 -(directories in which to search for)144 436.8 R F2(\214lename)3.049 E F0 -5.549(.T)C .549(he def)-5.549 F .548(ault is system-dependent.)-.1 F -(The)5.548 E F1<ad64>3.048 E F0 .548(option will)3.048 F .546 -(delete a b)144 448.8 R .546(uiltin pre)-.2 F .546(viously loaded with) --.25 F F1<ad66>3.046 E F0 5.547(.I)C 3.047(fn)-5.547 G(o)-3.047 E F2 -(name)3.047 E F0(ar)3.047 E .547(guments are gi)-.18 F -.15(ve)-.25 G -.547(n, or if the).15 F F1<ad70>3.047 E F0 .547(option is)3.047 F .546 -(supplied, a list of shell b)144 460.8 R .545(uiltins is printed.)-.2 F --.4(Wi)5.545 G .545(th no other option ar).4 F .545 -(guments, the list consists of all)-.18 F .695(enabled shell b)144 472.8 -R 3.195(uiltins. If)-.2 F F1<ad6e>3.195 E F0 .695 -(is supplied, only disabled b)3.195 F .695(uiltins are printed.)-.2 F -(If)5.695 E F1<ad61>3.195 E F0 .695(is supplied, the)3.195 F .262 -(list printed includes all b)144 484.8 R .261 +F2(test)3.148 E F1 .648(binary found via the)3.148 F/F3 9/Times-Bold@0 +SF -.666(PA)3.148 G(TH)-.189 E F1(in-)2.899 E .013(stead of the shell b) +144 220.8 R .012(uiltin v)-.2 F .012 +(ersion, run \231enable \255n test\232.)-.15 F(The)5.012 E F2<ad66>2.512 +E F1 .012(option means to load the ne)2.512 F 2.512(wb)-.25 G(uiltin) +-2.712 E(command)144 232.8 Q F0(name)2.907 E F1 .047(from shared object) +2.727 F F0(\214lename)4.458 E F1 2.548(,o).18 G 2.548(ns)-2.548 G .048 +(ystems that support dynamic loading.)-2.548 F F2(Bash)5.048 E F1(will) +2.548 E .311(use the v)144 244.8 R .311(alue of the)-.25 F F2 -.3(BA) +2.811 G(SH_LO).3 E(AD)-.4 E(ABLES_P)-.35 E -.95(AT)-.74 G(H).95 E F1 +-.25(va)2.811 G .311(riable as a colon-separated list of directories).25 +F .264(in which to search for)144 256.8 R F0(\214lename)2.764 E F1 2.764 +(,i)C(f)-2.764 E F0(\214lename)2.764 E F1 .264 +(does not contain a slash.)2.764 F .265(The def)5.265 F .265 +(ault is system-depen-)-.1 F .83(dent, and may include \231.\232 to for\ +ce a search of the current directory)144 268.8 R 5.829(.T)-.65 G(he) +-5.829 E F2<ad64>3.329 E F1 .829(option will delete a)3.329 F -.2(bu)144 +280.8 S .251(iltin pre).2 F .251(viously loaded with)-.25 F F2<ad66> +2.751 E F1 5.251(.I)C 2.751(fn)-5.251 G(o)-2.751 E F0(name)2.751 E F1 +(ar)2.751 E .251(guments are gi)-.18 F -.15(ve)-.25 G .251(n, or if the) +.15 F F2<ad70>2.751 E F1 .252(option is supplied,)2.752 F 3.357(al)144 +292.8 S .857(ist of shell b)-3.357 F .857(uiltins is printed.)-.2 F -.4 +(Wi)5.857 G .856(th no other option ar).4 F .856 +(guments, the list consists of all enabled)-.18 F 1.874(shell b)144 +304.8 R 4.374(uiltins. If)-.2 F F2<ad6e>4.374 E F1 1.874 +(is supplied, only disabled b)4.374 F 1.874(uiltins are printed.)-.2 F +(If)6.875 E F2<ad61>4.375 E F1 1.875(is supplied, the list)4.375 F .016 +(printed includes all b)144 316.8 R .015 (uiltins, with an indication of whether or not each is enabled.)-.2 F -(If)5.261 E F1<ad73>2.761 E F0 .261(is sup-)2.761 F .268 -(plied, the output is restricted to the POSIX)144 496.8 R F2(special) -2.768 E F0 -.2(bu)2.768 G 2.768(iltins. If).2 F .269 -(no options are supplied and a)2.768 F F2(name)2.769 E F0 .285 -(is not a shell b)144 508.8 R(uiltin,)-.2 E F1(enable)2.784 E F0 .284 -(will attempt to load)2.784 F F2(name)2.784 E F0 .284 -(from a shared object named)2.784 F F2(name)2.784 E F0 2.784(,a)C 2.784 -(si)-2.784 G 2.784(ft)-2.784 G(he)-2.784 E 1.41(command were)144 520.8 R -F4 1.41(enable \255f)3.91 F F2 1.41(name name)3.91 F F0 6.41(.T)3.91 G -1.41(he return v)-6.41 F 1.41(alue is 0 unless a)-.25 F F2(name)4.27 E -F0 1.41(is not a shell)4.09 F -.2(bu)144 532.8 S -(iltin or there is an error loading a ne).2 E 2.5(wb)-.25 G -(uiltin from a shared object.)-2.7 E F1 -2.3 -.15(ev a)108 549.6 T(l).15 -E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 561.6 Q F2(ar)3.171 -E(g)-.37 E F0 3.171(sa)C .671 +(If)5.015 E F2<ad73>2.515 E F1 .015(is supplied,)2.515 F .284 +(the output is restricted to the POSIX)144 328.8 R F0(special)2.784 E F1 +-.2(bu)2.784 G 2.784(iltins. If).2 F .284(no options are supplied and a) +2.784 F F0(name)2.784 E F1 .284(is not)2.784 F 2.878(as)144 340.8 S .378 +(hell b)-2.878 F(uiltin,)-.2 E F2(enable)2.878 E F1 .378 +(will attempt to load)2.878 F F0(name)2.878 E F1 .378 +(from a shared object named)2.878 F F0(name)2.878 E F1 2.877(,a)C 2.877 +(si)-2.877 G 2.877(ft)-2.877 G .377(he com-)-2.877 F .705 +(mand were \231enable \255f)144 352.8 R F0 .705(name name)3.205 F F1 +3.205(\232. The)B .705(return v)3.205 F .705(alue is 0 unless a)-.25 F +F0(name)3.565 E F1 .706(is not a shell b)3.385 F .706(uiltin or)-.2 F +(there is an error loading a ne)144 364.8 Q 2.5(wb)-.25 G +(uiltin from a shared object.)-2.7 E F2 -2.3 -.15(ev a)108 381.6 T(l).15 +E F1([)2.5 E F0(ar)A(g)-.37 E F1 1.666(...)2.5 G(])-1.666 E(The)144 +393.6 Q F0(ar)3.171 E(g)-.37 E F1 3.171(sa)C .671 (re read and concatenated together into a single command.)-3.171 F .67 -(This command is then read)5.67 F .478(and e)144 573.6 R -.15(xe)-.15 G +(This command is then read)5.67 F .478(and e)144 405.6 R -.15(xe)-.15 G .478(cuted by the shell, and its e).15 F .478 -(xit status is returned as the v)-.15 F .479(alue of)-.25 F F1 -2.3 -.15 -(ev a)2.979 H(l).15 E F0 5.479(.I)C 2.979(ft)-5.479 G .479(here are no) --2.979 F F2(ar)3.309 E(gs)-.37 E F0(,).27 E(or only null ar)144 585.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 602.4 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-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 614.4 Q F2(command)3.006 E F0 .306 +(xit status is returned as the v)-.15 F .479(alue of)-.25 F F2 -2.3 -.15 +(ev a)2.979 H(l).15 E F1 5.479(.I)C 2.979(ft)-5.479 G .479(here are no) +-2.979 F F0(ar)3.309 E(gs)-.37 E F1(,).27 E(or only null ar)144 417.6 Q +(guments,)-.18 E F2 -2.3 -.15(ev a)2.5 H(l).15 E F1(returns 0.)2.5 E F2 +(exec)108 434.4 Q F1([)2.5 E F2(\255cl)A F1 2.5(][)C F2<ad61>-2.5 E F0 +(name)2.5 E F1 2.5(][)C F0(command)-2.5 E F1([)2.5 E F0(ar)A(guments) +-.37 E F1(]])A(If)144 446.4 Q F0(command)3.006 E F1 .306 (is speci\214ed, it replaces the shell.)3.576 F .305(No ne)5.305 F 2.805 -(wp)-.25 G .305(rocess is created.)-2.805 F(The)5.305 E F2(ar)3.135 E -(guments)-.37 E F0(become)3.075 E .176(the ar)144 626.4 R .176 -(guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G -(he)-2.676 E F1<ad6c>2.676 E F0 .176 +(wp)-.25 G .305(rocess is created.)-2.805 F(The)5.305 E F0(ar)3.135 E +(guments)-.37 E F1(become)3.075 E .176(the ar)144 458.4 R .176 +(guments to)-.18 F F0(command)2.676 E F1 5.176(.I)C 2.676(ft)-5.176 G +(he)-2.676 E F2<ad6c>2.676 E F1 .176 (option is supplied, the shell places a dash at the be)2.676 F .177 -(ginning of)-.15 F .48(the zeroth ar)144 638.4 R .48(gument passed to) --.18 F F2(command)3.18 E F0 5.48(.T).77 G .48(his is what)-5.48 F F2(lo) -3.07 E(gin)-.1 E F0 .48(\(1\) does.).24 F(The)5.48 E F1<ad63>2.98 E F0 -.48(option causes)2.98 F F2(com-)3.18 E(mand)144 650.4 Q F0 .638 +(ginning of)-.15 F .48(the zeroth ar)144 470.4 R .48(gument passed to) +-.18 F F0(command)3.18 E F1 5.48(.T).77 G .48(his is what)-5.48 F F0(lo) +3.07 E(gin)-.1 E F1 .48(\(1\) does.).24 F(The)5.48 E F2<ad63>2.98 E F1 +.48(option causes)2.98 F F0(com-)3.18 E(mand)144 482.4 Q F1 .638 (to be e)3.908 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138 -(vironment. If)-.4 F F1<ad61>3.138 E F0 .638 -(is supplied, the shell passes)3.138 F F2(name)3.499 E F0 .639(as the) -3.319 F 1.078(zeroth ar)144 662.4 R 1.077(gument to the e)-.18 F -.15 -(xe)-.15 G 1.077(cuted command.).15 F(If)6.077 E F2(command)3.777 E F0 +(vironment. If)-.4 F F2<ad61>3.138 E F1 .638 +(is supplied, the shell passes)3.138 F F0(name)3.499 E F1 .639(as the) +3.319 F 1.078(zeroth ar)144 494.4 R 1.077(gument to the e)-.18 F -.15 +(xe)-.15 G 1.077(cuted command.).15 F(If)6.077 E F0(command)3.777 E F1 1.077(cannot be e)4.347 F -.15(xe)-.15 G 1.077(cuted for some reason, a) -.15 F(non-interacti)144 674.4 Q .876 -.15(ve s)-.25 H .576(hell e).15 F -.576(xits, unless the)-.15 F F1(execfail)3.076 E F0 .577 +.15 F(non-interacti)144 506.4 Q .876 -.15(ve s)-.25 H .576(hell e).15 F +.576(xits, unless the)-.15 F F2(execfail)3.076 E F1 .577 (shell option is enabled.)3.077 F .577(In that case, it returns f)5.577 -F(ail-)-.1 E 3.32(ure. An)144 686.4 R(interacti)3.32 E 1.12 -.15(ve s) +F(ail-)-.1 E 3.32(ure. An)144 518.4 R(interacti)3.32 E 1.12 -.15(ve s) -.25 H .82(hell returns f).15 F .82(ailure if the \214le cannot be e)-.1 F -.15(xe)-.15 G 3.32(cuted. A).15 F .82(subshell e)3.32 F .82 -(xits uncondi-)-.15 F .287(tionally if)144 698.4 R F1(exec)2.787 E F0 --.1(fa)2.787 G 2.787(ils. If).1 F F2(command)2.987 E F0 .287 +(xits uncondi-)-.15 F .287(tionally if)144 530.4 R F2(exec)2.787 E F1 +-.1(fa)2.787 G 2.787(ils. If).1 F F0(command)2.987 E F1 .287 (is not speci\214ed, an)3.557 F 2.788(yr)-.15 G .288(edirections tak) -2.788 F 2.788(ee)-.1 G -.25(ff)-2.788 G .288(ect in the current shell,) -.25 F(and the return status is 0.)144 710.4 Q +.25 F(and the return status is 0.)144 542.4 Q (If there is a redirection error)5 E 2.5(,t)-.4 G -(he return status is 1.)-2.5 E(GNU Bash 5.2)72 768 Q(2022 September 19) -135.955 E(66)185.115 E 0 Cg EP -%%Page: 67 67 +(he return status is 1.)-2.5 E F2(exit)108 559.2 Q F1([)2.5 E F0(n)A F1 +(])A .096(Cause the shell to e)144 559.2 R .096(xit with a status of) +-.15 F F0(n)2.596 E F1 5.096(.I)C(f)-5.096 E F0(n)2.955 E F1 .095 +(is omitted, the e)2.835 F .095(xit status is that of the last command) +-.15 F -.15(exe)144 571.2 S 2.5(cuted. A).15 F(trap on)2.5 E F3(EXIT)2.5 +E F1(is e)2.25 E -.15(xe)-.15 G(cuted before the shell terminates.).15 E +F2(export)108 588 Q F1([)2.5 E F2(\255fn)A F1 2.5(][).833 G F0(name)-2.5 +E F1([=)A F0(wor)A(d)-.37 E F1(]] .)A 1.666(..)1.666 G F2(export \255p) +108 600 Q F1 .256(The supplied)144 612 R F0(names)3.117 E F1 .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.627(commands. If)144 624 R(the)2.627 E F2<ad66>2.627 E F1 .127 +(option is gi)2.627 F -.15(ve)-.25 G .127(n, the).15 F F0(names)2.987 E +F1 .127(refer to functions.)2.897 F .127(If no)5.127 F F0(names)2.987 E +F1 .127(are gi)2.897 F -.15(ve)-.25 G .126(n, or if the).15 F F2<ad70> +144 636 Q F1 .048(option is supplied, a list of names of all e)2.547 F +.048(xported v)-.15 F .048(ariables is printed.)-.25 F(The)5.048 E F2 +<ad6e>2.548 E F1 .048(option causes the)2.548 F -.15(ex)144 648 S 1.447 +(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447 +(rom each)-3.947 F F0(name)3.947 E F1 6.447(.I)C 3.947(fav)-6.447 G +1.447(ariable name is follo)-4.197 F 1.447(wed by =)-.25 F F0(wor)A(d) +-.37 E F1 3.946(,t)C(he)-3.946 E -.25(va)144 660 S .741(lue of the v).25 +F .741(ariable is set to)-.25 F F0(wor)3.241 E(d)-.37 E F1(.)A F2 +(export)5.741 E F1 .742(returns an e)3.242 F .742 +(xit status of 0 unless an in)-.15 F -.25(va)-.4 G .742(lid option is) +.25 F .032(encountered, one of the)144 672 R F0(names)2.532 E F1 .032 +(is not a v)2.532 F .032(alid shell v)-.25 F .032(ariable name, or)-.25 +F F2<ad66>2.531 E F1 .031(is supplied with a)2.531 F F0(name)2.891 E F1 +(that)2.711 E(is not a function.)144 684 Q F2(false)108 700.8 Q F1 +(Does nothing, returns a non-zero status.)144 700.8 Q(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(68)193.45 E 0 Cg EP +%%Page: 69 69 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).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(])A .096 -(Cause the shell to e)144 84 R .096(xit with a status of)-.15 F F2(n) -2.596 E F0 5.096(.I)C(f)-5.096 E F2(n)2.955 E F0 .095(is omitted, the e) -2.835 F .095(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 -.256(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.627 -(commands. If)144 148.8 R(the)2.627 E F1<ad66>2.627 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 .126(n, or if the).15 F F1<ad70> -144 160.8 Q F0 .048(option is supplied, a list of names of all e)2.547 F -.048(xported v)-.15 F .048(ariables is printed.)-.25 F(The)5.048 E F1 -<ad6e>2.548 E F0 .048(option causes the)2.548 F -.15(ex)144 172.8 S -1.447(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447 -(rom each)-3.947 F F2(name)3.947 E F0 6.447(.I)C 3.947(fav)-6.447 G -1.447(ariable name is follo)-4.197 F 1.447(wed by =)-.25 F F2(wor)A(d) --.37 E F0 3.946(,t)C(he)-3.946 E -.25(va)144 184.8 S .741(lue of the v) -.25 F .741(ariable is set to)-.25 F F2(wor)3.241 E(d)-.37 E F0(.)A F1 -(export)5.741 E F0 .742(returns an e)3.242 F .742 -(xit status of 0 unless an in)-.15 F -.25(va)-.4 G .742(lid option is) -.25 F .032(encountered, one of the)144 196.8 R F2(names)2.532 E F0 .032 -(is not a v)2.532 F .032(alid shell v)-.25 F .032(ariable name, or)-.25 -F F1<ad66>2.531 E F0 .031(is supplied with a)2.531 F F2(name)2.891 E F0 -(that)2.711 E(is not a function.)144 208.8 Q F1(fc)108 225.6 Q F0([)2.5 -E F1<ad65>A F2(ename)2.5 E F0 2.5(][)C F1(\255lnr)-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 -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 .431 -(The \214rst form selects a range of commands from)144 249.6 R F2<8c72> -4.842 E(st)-.1 E F0(to)3.612 E F2(last)3.022 E F0 .432 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(fc)108 84 Q F1([)2.5 E F2 +<ad65>A F0(ename)2.5 E F1 2.5(][)C F2(\255lnr)-2.5 E F1 2.5(][)C F0 +<8c72>-2.5 E(st)-.1 E F1 2.5(][)C F0(last)-2.5 E F1(])A F2(fc \255s)108 +96 Q F1([)2.5 E F0(pat)A F1(=)A F0 -.37(re)C(p).37 E F1 2.5(][)C F0(cmd) +-2.5 E F1(])A .431(The \214rst form selects a range of commands from)144 +108 R F0<8c72>4.842 E(st)-.1 E F1(to)3.612 E F0(last)3.022 E F1 .432 (from the history list and displays or)3.612 F .142(edits and re-e)144 -261.6 R -.15(xe)-.15 G .142(cutes them.).15 F F2 -.45(Fi)5.141 G -.1(rs) -.45 G(t).1 E F0(and)3.321 E F2(last)2.731 E F0 .141 +120 R -.15(xe)-.15 G .142(cutes them.).15 F F0 -.45(Fi)5.141 G -.1(rs) +.45 G(t).1 E F1(and)3.321 E F0(last)2.731 E F1 .141 (may be speci\214ed as a string \(to locate the last command)3.321 F(be) -144 273.6 Q .31(ginning with that string\) or as a number \(an inde)-.15 -F 2.811(xi)-.15 G .311(nto the history list, where a ne)-2.811 F -.05 -(ga)-.15 G(ti).05 E .611 -.15(ve n)-.25 H(umber).15 E .071 -(is used as an of)144 285.6 R .071 -(fset from the current command number\).)-.25 F .071(When listing, a) -5.071 F F2<8c72>2.571 E(st)-.1 E F0(or)2.571 E F2(last)2.571 E F0 .071 -(of 0 is equi)2.571 F -.25(va)-.25 G(-).25 E .653 -(lent to \2551 and \2550 is equi)144 297.6 R -.25(va)-.25 G .653 -(lent to the current command \(usually the).25 F F1(fc)3.153 E F0 .653 -(command\); otherwise 0 is)3.153 F(equi)144 309.6 Q -.25(va)-.25 G .242 +144 132 Q .31(ginning with that string\) or as a number \(an inde)-.15 F +2.811(xi)-.15 G .311(nto the history list, where a ne)-2.811 F -.05(ga) +-.15 G(ti).05 E .611 -.15(ve n)-.25 H(umber).15 E .071(is used as an of) +144 144 R .071(fset from the current command number\).)-.25 F .071 +(When listing, a)5.071 F F0<8c72>2.571 E(st)-.1 E F1(or)2.571 E F0(last) +2.571 E F1 .071(of 0 is equi)2.571 F -.25(va)-.25 G(-).25 E .653 +(lent to \2551 and \2550 is equi)144 156 R -.25(va)-.25 G .653 +(lent to the current command \(usually the).25 F F2(fc)3.153 E F1 .653 +(command\); otherwise 0 is)3.153 F(equi)144 168 Q -.25(va)-.25 G .242 (lent to \2551 and \2550 is in).25 F -.25(va)-.4 G 2.742(lid. If).25 F -F2(last)2.832 E F0 .242 +F0(last)2.832 E F1 .242 (is not speci\214ed, it is set to the current command for list-)3.422 F -.092(ing \(so that)144 321.6 R/F4 10/Courier@0 SF .092(fc \255l \25510) -2.592 F F0 .093(prints the last 10 commands\) and to)2.592 F F2<8c72> -4.503 E(st)-.1 E F0 2.593(otherwise. If)3.273 F F2<8c72>4.503 E(st)-.1 E -F0 .093(is not speci-)3.273 F(\214ed, it is set to the pre)144 333.6 Q -(vious command for editing and \25516 for listing.)-.25 E(The)144 357.6 -Q F1<ad6e>2.522 E F0 .022 +.529(ing \(so that \231fc \255l \25510\232 prints the last 10 commands\ +\) and to)144 180 R F0<8c72>4.939 E(st)-.1 E F1 3.029(otherwise. If) +3.709 F F0<8c72>4.939 E(st)-.1 E F1 .529(is not speci-)3.709 F +(\214ed, it is set to the pre)144 192 Q +(vious command for editing and \25516 for listing.)-.25 E(The)144 208.8 +Q F2<ad6e>2.522 E F1 .022 (option suppresses the command numbers when listing.)2.522 F(The)5.022 E -F1<ad72>2.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022 -(rses the order of).15 F .438(the commands.)144 369.6 R .438(If the) -5.438 F F1<ad6c>2.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438 +F2<ad72>2.522 E F1 .022(option re)2.522 F -.15(ve)-.25 G .022 +(rses the order of).15 F .438(the commands.)144 220.8 R .438(If the) +5.438 F F2<ad6c>2.938 E F1 .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 -.335(the editor gi)144 381.6 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E -F2(ename)3.025 E F0 .335(is in)3.015 F -.2(vo)-.4 G -.1(ke).2 G 2.835 +.335(the editor gi)144 232.8 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E +F0(ename)3.025 E F1 .335(is in)3.015 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.334 E F2(ename)3.024 E F0 .334(is not gi)3.014 F -.15(ve)-.25 G -(n,).15 E .63(the v)144 393.6 R .63(alue of the)-.25 F F3(FCEDIT)3.13 E -F0 -.25(va)2.88 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.131 E F0 .631 -(is not set.)2.881 F .631(If nei-)5.631 F .006(ther v)144 405.6 R .006 -(ariable is set,)-.25 F F2(vi)4.171 E F0 .005(is used.)4.171 F .005 -(When editing is complete, the edited commands are echoed and e)5.005 F -(x-)-.15 E(ecuted.)144 417.6 Q .788(In the second form,)144 441.6 R F2 -(command)3.288 E F0 .788(is re-e)3.288 F -.15(xe)-.15 G .788 -(cuted after each instance of).15 F F2(pat)3.288 E F0 .788 -(is replaced by)3.288 F F2 -.37(re)3.289 G(p).37 E F0(.)A F2(Com-)5.789 -E(mand)144 453.6 Q F0 .172(is interpreted the same as)2.672 F F2<8c72> -2.672 E(st)-.1 E F0(abo)2.672 E -.15(ve)-.15 G 5.172(.A).15 G .171 -(useful alias to use with this is)-2.5 F F4 .171(r='fc \255s')2.671 F F0 -2.671(,s)C 2.671(ot)-2.671 G(hat)-2.671 E(typing)144 465.6 Q F4 7.165 -(rc)3.665 G(c)-7.165 E F0 1.165(runs the last command be)3.665 F 1.166 -(ginning with)-.15 F F4(cc)3.666 E F0 1.166(and typing)3.666 F F4(r) -3.666 E F0(re-e)3.666 E -.15(xe)-.15 G 1.166(cutes the last com-).15 F -(mand.)144 477.6 Q .142(If the \214rst form is used, the return v)144 -501.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 513.6 -R .454(If the)5.454 F F1<ad65>2.954 E F0 .454 +F(If)5.334 E F0(ename)3.024 E F1 .334(is not gi)3.014 F -.15(ve)-.25 G +(n,).15 E .63(the v)144 244.8 R .63(alue of the)-.25 F/F3 9/Times-Bold@0 +SF(FCEDIT)3.13 E F1 -.25(va)2.88 G .631(riable is used, and the v).25 F +.631(alue of)-.25 F F3(EDIT)3.131 E(OR)-.162 E F1(if)2.881 E F3(FCEDIT) +3.131 E F1 .631(is not set.)2.881 F .631(If nei-)5.631 F .006(ther v)144 +256.8 R .006(ariable is set,)-.25 F F0(vi)4.171 E F1 .005(is used.)4.171 +F .005(When editing is complete, the edited commands are echoed and e) +5.005 F(x-)-.15 E(ecuted.)144 268.8 Q .788(In the second form,)144 285.6 +R F0(command)3.288 E F1 .788(is re-e)3.288 F -.15(xe)-.15 G .788 +(cuted after each instance of).15 F F0(pat)3.288 E F1 .788 +(is replaced by)3.288 F F0 -.37(re)3.289 G(p).37 E F1(.)A F0(Com-)5.789 +E(mand)144 297.6 Q F1 .603(is interpreted the same as)3.103 F F0<8c72> +3.103 E(st)-.1 E F1(abo)3.103 E -.15(ve)-.15 G 5.603(.A).15 G .602 +(useful alias to use with this is \231r="fc \255s"\232, so that)-2.5 F +.443(typing \231r cc\232 runs the last command be)144 309.6 R .443 +(ginning with \231cc\232 and typing \231r\232 re-e)-.15 F -.15(xe)-.15 G +.444(cutes the last com-).15 F(mand.)144 321.6 Q .142 +(If the \214rst form is used, the return v)144 338.4 R .142 +(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142 +(lid option is encountered or).25 F F0<8c72>4.552 E(st)-.1 E F1(or)3.322 +E F0(last)2.732 E F1 .454(specify history lines out of range.)144 350.4 +R .454(If the)5.454 F F2<ad65>2.954 E F1 .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 525.6 R -.15(xe)-.15 G .788 +(alue of the)-.25 F .788(last command e)144 362.4 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 -537.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 549.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 566.4 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume) -144 578.4 Q F2(jobspec)5.654 E F0 1.413(in the fore)4.224 F 1.413 +374.4 R -.15(xe)-.15 G 1.136(cuted, unless).15 F F0(cmd)3.836 E F1 1.136 +(does not)4.406 F(specify a v)144 386.4 Q +(alid history line, in which case)-.25 E F2(fc)2.5 E F1(returns f)2.5 E +(ailure.)-.1 E F2(fg)108 403.2 Q F1([)2.5 E F0(jobspec)A F1(])A(Resume) +144 415.2 Q F0(jobspec)5.654 E F1 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 590.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 +(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F0(jobspec)5.653 E F1 +1.413(is not present, the)4.223 F(shell')144 427.2 Q 3.116(sn)-.55 G +.616(otion of the)-3.116 F F0(curr)3.116 E .616(ent job)-.37 F F1 .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 602.4 Q +(alue is that of the command placed into the)-.25 F(fore)144 439.2 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 614.4 Q -F0(does not specify a v)2.81 E(alid job or)-.25 E F2(jobspec)4.24 E F0 +(hen run with job control enabled, if)-2.862 F F0(jobspec)145.74 451.2 Q +F1(does not specify a v)2.81 E(alid job or)-.25 E F0(jobspec)4.24 E F1 (speci\214es a job that w)2.81 E(as started without job control.)-.1 E -F1(getopts)108 631.2 Q F2(optstring name)2.5 E F0([)2.5 E F2(ar)A 2.5 -(g.)-.37 G(..)-2.5 E F0(])A F1(getopts)144 643.2 Q F0 .793 -(is used by shell procedures to parse positional parameters.)3.293 F F2 -(optstring)6.023 E F0 .793(contains the option)3.513 F .15 -(characters to be recognized; if a character is follo)144 655.2 R .149 +F2(getopts)108 468 Q F0(optstring name)2.5 E F1([)2.5 E F0(ar)A(g)-.37 E +F1 1.666(...)2.5 G(])-1.666 E F2(getopts)144 480 Q F1 .793 +(is used by shell procedures to parse positional parameters.)3.293 F F0 +(optstring)6.023 E F1 .793(contains the option)3.513 F .15 +(characters to be recognized; if a character is follo)144 492 R .149 (wed by a colon, the option is e)-.25 F .149(xpected to ha)-.15 F .449 --.15(ve a)-.2 H(n).15 E(ar)144 667.2 Q .578 +-.15(ve a)-.2 H(n).15 E(ar)144 504 Q .578 (gument, which should be separated from it by white space.)-.18 F .579 (The colon and question mark char)5.579 F(-)-.2 E .636 -(acters may not be used as option characters.)144 679.2 R .636 -(Each time it is in)5.636 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F1(getopts) -3.136 E F0 .636(places the ne)3.136 F .635(xt op-)-.15 F .029 -(tion in the shell v)144 691.2 R(ariable)-.25 E F2(name)2.889 E F0 2.529 -(,i).18 G(nitializing)-2.529 E F2(name)2.889 E F0 .029(if it does not e) +(acters may not be used as option characters.)144 516 R .636 +(Each time it is in)5.636 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F2(getopts) +3.136 E F1 .636(places the ne)3.136 F .635(xt op-)-.15 F .029 +(tion in the shell v)144 528 R(ariable)-.25 E F0(name)2.889 E F1 2.529 +(,i).18 G(nitializing)-2.529 E F0(name)2.889 E F1 .029(if it does not e) 2.709 F .03(xist, and the inde)-.15 F 2.53(xo)-.15 G 2.53(ft)-2.53 G .03 (he ne)-2.53 F .03(xt ar)-.15 F(gu-)-.18 E .066 -(ment to be processed into the v)144 703.2 R(ariable)-.25 E F3(OPTIND) -2.566 E/F5 9/Times-Roman@0 SF(.)A F3(OPTIND)4.566 E F0 .065 +(ment to be processed into the v)144 540 R(ariable)-.25 E F3(OPTIND) +2.566 E/F4 9/Times-Roman@0 SF(.)A F3(OPTIND)4.566 E F1 .065 (is initialized to 1 each time the shell or a)2.315 F .885 -(shell script is in)144 715.2 R -.2(vo)-.4 G -.1(ke).2 G 3.385(d. When) -.1 F .885(an option requires an ar)3.385 F(gument,)-.18 E F1(getopts) -3.385 E F0 .885(places that ar)3.385 F .885(gument into)-.18 F .567 -(the v)144 727.2 R(ariable)-.25 E F3(OPT)3.067 E(ARG)-.81 E F5(.)A F0 -.566(The shell does not reset)5.067 F F3(OPTIND)3.066 E F0 .566 -(automatically; it must be manually reset)2.816 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(67)185.115 E 0 Cg EP -%%Page: 68 68 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .389 -(between multiple calls to)144 84 R/F1 10/Times-Bold@0 SF(getopts)2.889 -E F0 .389(within the same shell in)2.889 F -.2(vo)-.4 G .39 -(cation if a ne).2 F 2.89(ws)-.25 G .39(et of parameters is to)-2.89 F -(be used.)144 96 Q 2.044(When the end of options is encountered,)144 120 -R F1(getopts)4.543 E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F -2.043(alue greater than zero.)-.25 F/F2 9/Times-Bold@0 SF(OPTIND)144 132 -Q F0(is set to the inde)2.25 E 2.5(xo)-.15 G 2.5(ft)-2.5 G -(he \214rst non-option ar)-2.5 E(gument, and)-.18 E/F3 10/Times-Italic@0 -SF(name)2.5 E F0(is set to ?.)2.5 E F1(getopts)144 156 Q F0 .485 +(shell script is in)144 552 R -.2(vo)-.4 G -.1(ke).2 G 3.385(d. When).1 +F .885(an option requires an ar)3.385 F(gument,)-.18 E F2(getopts)3.385 +E F1 .885(places that ar)3.385 F .885(gument into)-.18 F .567(the v)144 +564 R(ariable)-.25 E F3(OPT)3.067 E(ARG)-.81 E F4(.)A F1 .566 +(The shell does not reset)5.067 F F3(OPTIND)3.066 E F1 .566 +(automatically; it must be manually reset)2.816 F .389 +(between multiple calls to)144 576 R F2(getopts)2.889 E F1 .389 +(within the same shell in)2.889 F -.2(vo)-.4 G .39(cation if a ne).2 F +2.89(ws)-.25 G .39(et of parameters is to)-2.89 F(be used.)144 588 Q +2.044(When the end of options is encountered,)144 604.8 R F2(getopts) +4.543 E F1 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.043 +(alue greater than zero.)-.25 F F3(OPTIND)144 616.8 Q F1 +(is set to the inde)2.25 E 2.5(xo)-.15 G 2.5(ft)-2.5 G +(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F0(name)2.5 E F1 +(is set to ?.)2.5 E F2(getopts)144 633.6 Q F1 .485 (normally parses the positional parameters, b)2.985 F .485 -(ut if more ar)-.2 F .485(guments are supplied as)-.18 F F3(ar)3.315 E -(g)-.37 E F0 -.25(va)3.205 G(l-).25 E(ues,)144 168 Q F1(getopts)2.5 E F0 -(parses those instead.)2.5 E F1(getopts)144 192 Q F0 .345 +(ut if more ar)-.2 F .485(guments are supplied as)-.18 F F0(ar)3.315 E +(g)-.37 E F1 -.25(va)3.205 G(l-).25 E(ues,)144 645.6 Q F2(getopts)2.5 E +F1(parses those instead.)2.5 E F2(getopts)144 662.4 Q F1 .345 (can report errors in tw)2.845 F 2.845(ow)-.1 G 2.845(ays. If)-2.945 F -.345(the \214rst character of)2.845 F F3(optstring)3.075 E F0 .345 -(is a colon,)3.065 F F3(silent)3.185 E F0 .345(error re-)3.525 F 1.668 -(porting is used.)144 204 R 1.668 +.345(the \214rst character of)2.845 F F0(optstring)3.075 E F1 .345 +(is a colon,)3.065 F F0(silent)3.185 E F1 .345(error re-)3.525 F 1.668 +(porting is used.)144 674.4 R 1.668 (In normal operation, diagnostic messages are printed when in)6.668 F --.25(va)-.4 G 1.669(lid options or).25 F .394(missing option ar)144 216 -R .394(guments are encountered.)-.18 F .394(If the v)5.394 F(ariable) --.25 E F2(OPTERR)2.894 E F0 .394(is set to 0, no error messages)2.644 F -(will be displayed, e)144 228 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 -G(he \214rst character of)-2.5 E F3(optstring)2.73 E F0(is not a colon.) -2.72 E .666(If an in)144 252 R -.25(va)-.4 G .666(lid option is seen,) -.25 F F1(getopts)3.166 E F0 .667(places ? into)3.167 F F3(name)3.527 E -F0 .667(and, if not silent, prints an error message)3.347 F .4 -(and unsets)144 264 R F2(OPT)2.9 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 F2(OPT)2.899 -E(ARG)-.81 E F0 .399(and no)2.649 F(diagnostic message is printed.)144 -276 Q 1.241(If a required ar)144 300 R 1.241(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.742(\)i).833 G 3.742(sp)-3.742 G 1.242 -(laced in)-3.742 F F3(name)144.36 312 Q F0(,).18 E F2(OPT)2.714 E(ARG) --.81 E F0 .213(is unset, and a diagnostic message is printed.)2.463 F -(If)5.213 E F1(getopts)2.713 E F0 .213(is silent, then a colon \()2.713 -F F1(:).833 E F0(\)).833 E(is placed in)144 324 Q F3(name)2.86 E F0(and) -2.68 E F2(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.) -2.25 E F1(getopts)144 348 Q F0 .902 +-.25(va)-.4 G 1.669(lid options or).25 F .394(missing option ar)144 +686.4 R .394(guments are encountered.)-.18 F .394(If the v)5.394 F +(ariable)-.25 E F3(OPTERR)2.894 E F1 .394 +(is set to 0, no error messages)2.644 F(will be displayed, e)144 698.4 Q +-.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214rst character of)-2.5 E +F0(optstring)2.73 E F1(is not a colon.)2.72 E(If)144 715.2 Q F2(getopts) +2.672 E F1 .172(detects an in)2.672 F -.25(va)-.4 G .173 +(lid option, it places ? into).25 F F0(name)3.033 E F1 .173 +(and, if not silent, prints an error message)2.853 F 1.148(and unsets) +144 727.2 R F3(OPT)3.647 E(ARG)-.81 E F4(.)A F1(If)5.647 E F2(getopts) +3.647 E F1 1.147(is silent, it assigns the option character found to) +3.647 F F3(OPT)3.647 E(ARG)-.81 E F1(and)3.397 E(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(69)193.45 E 0 Cg EP +%%Page: 70 70 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(does not print a diagnostic message.)144 84 Q .602 +(If a required ar)144 100.8 R .602(gument is not found, and)-.18 F/F2 10 +/Times-Bold@0 SF(getopts)3.102 E F1 .602(is not silent, it sets the v) +3.102 F .602(alue of)-.25 F F0(name)3.102 E F1 .602(to a ques-)3.102 F +1.056(tion mark \()144 112.8 R F2(?).833 E F1 1.056(\), unsets).833 F/F3 +9/Times-Bold@0 SF(OPT)3.556 E(ARG)-.81 E/F4 9/Times-Roman@0 SF(,)A F1 +1.056(and prints a diagnostic message.)3.306 F(If)6.056 E F2(getopts) +3.556 E F1 1.055(is silent, it sets the)3.556 F -.25(va)144 124.8 S +(lue of).25 E F0(name)2.5 E F1(to a colon \()2.5 E F2(:).833 E F1 2.5 +(\)a).833 G(nd sets)-2.5 E F3(OPT)2.5 E(ARG)-.81 E F1 +(to the option character found.)2.25 E F2(getopts)144 141.6 Q F1 .902 (returns true if an option, speci\214ed or unspeci\214ed, is found.) 3.401 F .902(It returns f)5.902 F .902(alse if the end of)-.1 F -(options is encountered or an error occurs.)144 360 Q F1(hash)108 376.8 -Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1<ad70>-2.5 E F3(\214lename)2.5 E -F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F3(name)-2.5 E F0(])A .858 -(Each time)144 388.8 R F1(hash)3.358 E F0 .858(is in)3.358 F -.2(vo)-.4 -G -.1(ke).2 G .858(d, the full pathname of the command).1 F F3(name) -3.718 E F0 .858(is determined by searching)3.538 F .956 -(the directories in)144 400.8 R F1($P)3.456 E -.95(AT)-.74 G(H).95 E F0 +(options is encountered or an error occurs.)144 153.6 Q F2(hash)108 +170.4 Q F1([)2.5 E F2(\255lr)A F1 2.5(][)C F2<ad70>-2.5 E F0(\214lename) +2.5 E F1 2.5(][)C F2(\255dt)-2.5 E F1 2.5(][)C F0(name)-2.5 E F1(])A +.858(Each time)144 182.4 R F2(hash)3.358 E F1 .858(is in)3.358 F -.2(vo) +-.4 G -.1(ke).2 G .858(d, the full pathname of the command).1 F F0(name) +3.718 E F1 .858(is determined by searching)3.538 F .956 +(the directories in)144 194.4 R F2($P)3.456 E -.95(AT)-.74 G(H).95 E F1 .956(and remembered.)3.456 F(An)5.956 E 3.456(yp)-.15 G(re)-3.456 E .956 -(viously-remembered pathname is discarded.)-.25 F .243(If the)144 412.8 -R F1<ad70>2.743 E F0 .243 -(option is supplied, no path search is performed, and)2.743 F F3 -(\214lename)4.653 E F0 .242(is used as the full \214lename)2.923 F .615 -(of the command.)144 424.8 R(The)5.615 E F1<ad72>3.115 E F0 .615 -(option causes the shell to for)3.115 F .615 -(get all remembered locations.)-.18 F(The)5.615 E F1<ad64>3.115 E F0 -(op-)3.115 E .294(tion causes the shell to for)144 436.8 R .294 -(get the remembered location of each)-.18 F F3(name)2.793 E F0 5.293(.I) -C 2.793(ft)-5.293 G(he)-2.793 E F1<ad74>2.793 E F0 .293 -(option is supplied,)2.793 F .028(the full pathname to which each)144 -448.8 R F3(name)2.528 E F0 .028(corresponds is printed.)2.528 F .028 -(If multiple)5.028 F F3(name)2.528 E F0(ar)2.528 E .028 -(guments are sup-)-.18 F .176(plied with)144 460.8 R F1<ad74>2.676 E F0 -2.676(,t)C(he)-2.676 E F3(name)2.676 E F0 .175 -(is printed before the hashed full pathname.)2.676 F(The)5.175 E F1 -<ad6c>2.675 E F0 .175(option causes output to)2.675 F .783 -(be displayed in a format that may be reused as input.)144 472.8 R .783 -(If no ar)5.783 F .783(guments are gi)-.18 F -.15(ve)-.25 G .783 -(n, or if only).15 F F1<ad6c>3.283 E F0(is)3.283 E .807 -(supplied, information about remembered commands is printed.)144 484.8 R -.807(The return status is true unless a)5.807 F F3(name)144.36 496.8 Q -F0(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.) -.25 E F1(help)108 513.6 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C F3 -(pattern)-2.5 E F0(])A .866(Display helpful information about b)144 -525.6 R .867(uiltin commands.)-.2 F(If)5.867 E F3(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 .224(help on all commands matching)144 -537.6 R F3(pattern)3.974 E F0 2.723(;o).24 G .223 -(therwise help for all the b)-2.723 F .223 -(uiltins and shell control struc-)-.2 F(tures is printed.)144 549.6 Q F1 -<ad64>144 561.6 Q F0(Display a short description of each)180 561.6 Q F3 -(pattern)2.5 E F1<ad6d>144 573.6 Q F0(Display the description of each) -180 573.6 Q F3(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G -(ormat)-2.5 E F1<ad73>144 585.6 Q F0 -(Display only a short usage synopsis for each)180 585.6 Q F3(pattern)2.5 -E F0(The return status is 0 unless no command matches)144 602.4 Q F3 -(pattern)3.75 E F0(.).24 E F1(history [)108 619.2 Q F3(n)A F1(])A -(history \255c)108 631.2 Q(history \255d)108 643.2 Q F3(of)2.5 E(fset) --.18 E F1(history \255d)108 655.2 Q F3(start)2.5 E F0<ad>A F3(end)A F1 -(history \255anrw)108 667.2 Q F0([)2.5 E F3(\214lename)A F0(])A F1 -(history \255p)108 679.2 Q F3(ar)2.5 E(g)-.37 E F0([)2.5 E F3(ar)A 2.5 -(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 691.2 Q F3(ar)2.5 E(g) --.37 E F0([)2.5 E F3(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)144 -703.2 S .752 +(viously-remembered pathname is discarded.)-.25 F .342(If the)144 206.4 +R F2<ad70>2.842 E F1 .342(option is supplied,)2.842 F F2(hash)2.842 E F1 +(uses)2.842 E F0(\214lename)4.752 E F1 .342 +(as the full \214lename of the command.)3.022 F(The)5.341 E F2<ad72> +2.841 E F1(op-)2.841 E 1.495(tion causes the shell to for)144 218.4 R +1.496(get all remembered locations.)-.18 F 1.496(Assigning to the)6.496 +F F2 -.74(PA)3.996 G(TH)-.21 E F1 -.25(va)3.996 G 1.496(riable also).25 +F .685(clears all hashed \214lenames.)144 230.4 R(The)5.685 E F2<ad64> +3.185 E F1 .685(option causes the shell to for)3.185 F .684 +(get the remembered location of)-.18 F(each)144 242.4 Q F0(name)3.894 E +F1 6.394(.I)C 3.894(ft)-6.394 G(he)-3.894 E F2<ad74>3.894 E F1 1.394 +(option is supplied, the full pathname to which each)3.894 F F0(name) +3.895 E F1 1.395(corresponds is)3.895 F 3.314(printed. If)144 254.4 R +(multiple)3.314 E F0(name)3.314 E F1(ar)3.314 E .814 +(guments are supplied with)-.18 F F2<ad74>3.314 E F1 3.314(,t)C(he) +-3.314 E F0(name)3.314 E F1 .814(is printed before the hashed)3.314 F +.575(full pathname.)144 266.4 R(The)5.575 E F2<ad6c>3.075 E F1 .575(opt\ +ion causes output to be displayed in a format that may be reused as in-) +3.075 F 3.988(put. If)144 278.4 R 1.488(no ar)3.988 F 1.488 +(guments are gi)-.18 F -.15(ve)-.25 G 1.488(n, or if only).15 F F2<ad6c> +3.988 E F1 1.488(is supplied, information about remembered com-)3.988 F +.012(mands is printed.)144 290.4 R(The)5.012 E F2<ad74>2.512 E F1(,)A F2 +<ad64>2.513 E F1 2.513(,a)C(nd)-2.513 E F2<ad70>2.513 E F1 .013 +(options \(the options that act on the)2.513 F F0(name)2.513 E F1(ar) +2.513 E .013(guments\) are mu-)-.18 F .208(tually e)144 302.4 R(xclusi) +-.15 E -.15(ve)-.25 G 5.207(.O).15 G .207(nly one will be acti)-5.207 F +-.15(ve)-.25 G 5.207(.I).15 G 2.707(fm)-5.207 G .207 +(ore than one is supplied,)-2.707 F F2<ad74>2.707 E F1 .207 +(has higher priority than)2.707 F F2<ad70>144 314.4 Q F1 2.608(,a)C .108 +(nd both are higher priority than)-2.608 F F2<ad64>2.608 E F1 5.108(.T)C +.108(he return status is true unless a)-5.108 F F0(name)2.968 E F1 .108 +(is not found or an)2.788 F(in)144 326.4 Q -.25(va)-.4 G +(lid option is supplied.).25 E F2(help)108 343.2 Q F1([)2.5 E F2 +(\255dms)A F1 2.5(][)C F0(pattern)-2.5 E F1(])A .867 +(Display helpful information about b)144 355.2 R .867(uiltin commands.) +-.2 F(If)5.867 E F0(pattern)4.617 E F1 .866(is speci\214ed,)3.607 F F2 +(help)3.366 E F1(gi)3.366 E -.15(ve)-.25 G 3.366(sd).15 G(etailed)-3.366 +E .223(help on all commands matching)144 367.2 R F0(pattern)3.973 E F1 +2.723(;o).24 G .223(therwise help for all the b)-2.723 F .224 +(uiltins and shell control struc-)-.2 F(tures is printed.)144 379.2 Q F2 +<ad64>144 391.2 Q F1(Display a short description of each)180 391.2 Q F0 +(pattern)2.5 E F2<ad6d>144 403.2 Q F1(Display the description of each) +180 403.2 Q F0(pattern)2.5 E F1(in a manpage-lik)2.5 E 2.5(ef)-.1 G +(ormat)-2.5 E F2<ad73>144 415.2 Q F1 +(Display only a short usage synopsis for each)180 415.2 Q F0(pattern)2.5 +E F1(The return status is 0 unless no command matches)144 432 Q F0 +(pattern)3.75 E F1(.).24 E F2(history [)108 448.8 Q F0(n)A F2(])A +(history \255c)108 460.8 Q(history \255d)108 472.8 Q F0(of)2.5 E(fset) +-.18 E F2(history \255d)108 484.8 Q F0(start)2.5 E F1(-)A F0(end)A F2 +(history \255anrw)108 496.8 Q F1([)2.5 E F0(\214lename)A F1(])A F2 +(history \255p)108 508.8 Q F0(ar)2.5 E(g)-.37 E F1([)2.5 E F0(ar)A(g) +-.37 E F1 1.666(...)2.5 G(])-1.666 E F2(history \255s)108 520.8 Q F0(ar) +2.5 E(g)-.37 E F1([)2.5 E F0(ar)A(g)-.37 E F1 1.666(...)2.5 G(])-1.666 E +-.4(Wi)144 532.8 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.252 E F0(ha)3.252 E -.15(ve)-.2 -G .381(been modi\214ed.)144 715.2 R .38(An ar)5.38 F .38(gument of)-.18 -F F3(n)3.24 E F0 .38(lists only the last)3.12 F F3(n)3.24 E F0 2.88 -(lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E F2(HISTTIMEFOR-) -2.88 E(MA)144 727.2 Q(T)-.855 E F0 1.491 -(is set and not null, it is used as a format string for)3.741 F F3 -(strftime)3.992 E F0 1.492(\(3\) to display the time stamp)B -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(68)185.115 E 0 Cg EP -%%Page: 69 69 +.752(Lines listed with a)5.752 F F2(*)3.251 E F1(ha)3.251 E -.15(ve)-.2 +G .38(been modi\214ed.)144 544.8 R .38(An ar)5.38 F .38(gument of)-.18 F +F0(n)3.24 E F1 .38(lists only the last)3.12 F F0(n)3.24 E F1 2.88 +(lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E F3(HISTTIMEFOR-) +2.881 E(MA)144 556.8 Q(T)-.855 E F1 .239 +(is set and not null, it is used as a format string for)2.489 F F0 +(strftime)3.078 E F1 .238(\(3\) to display the time stamp asso-).18 F +1.019(ciated with each displayed history entry)144 568.8 R 6.019(.N)-.65 +G 3.519(oi)-6.019 G(nterv)-3.519 E 1.019 +(ening blank is printed between the formatted)-.15 F .176 +(time stamp and the history line.)144 580.8 R(If)5.176 E F0(\214lename) +2.676 E F1 .176 +(is supplied, it is used as the name of the history \214le; if)2.676 F +.251(not, the v)144 592.8 R .251(alue of)-.25 F F3(HISTFILE)2.751 E F1 +.251(is used.)2.501 F(If)5.251 E F0(\214lename)2.751 E F1 .251 +(is not supplied and)2.751 F F3(HISTFILE)2.751 E F1 .251 +(is unset or null, the)2.501 F F2(\255a, \255n, \255r)144 604.8 Q(,)-.92 +E F1(and)2.5 E F2<ad77>2.5 E F1(options ha)2.5 E .3 -.15(ve n)-.2 H 2.5 +(oe).15 G -.25(ff)-2.5 G 2.5(ect. Options,).25 F(if supplied, ha)2.5 E +.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F2<ad63>144 +616.8 Q F1(Clear the history list by deleting all the entries.)180 616.8 +Q F2<ad64>144 628.8 Q F0(of)2.5 E(fset)-.18 E F1 .39 +(Delete the history entry at position)180 640.8 R F0(of)2.889 E(fset) +-.18 E F1 5.389(.I)C(f)-5.389 E F0(of)2.889 E(fset)-.18 E F1 .389(is ne) +2.889 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G 2.889(,i).15 G 2.889(ti) +-2.889 G 2.889(si)-2.889 G .389(nterpreted as relati)-2.889 F -.15(ve) +-.25 G .598(to one greater than the last history position, so ne)180 +652.8 R -.05(ga)-.15 G(ti).05 E .899 -.15(ve i)-.25 H .599 +(ndices count back from the end).15 F(of the history)180 664.8 Q 2.5(,a) +-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G +(efers to the current)-2.5 E F2(history \255d)2.5 E F1(command.)2.5 E F2 +<ad64>144 676.8 Q F0(start)2.5 E F1<ad>A F0(end)A F1 1.25 +(Delete the range of history entries between positions)180 688.8 R F0 +(start)3.75 E F1(and)3.75 E F0(end)3.75 E F1 3.75(,i)C(nclusi)-3.75 E +-.15(ve)-.25 G 6.25(.P).15 G(ositi)-6.25 E -.15(ve)-.25 G(and ne)180 +700.8 Q -.05(ga)-.15 G(ti).05 E .3 -.15(ve v)-.25 H(alues for)-.1 E F0 +(start)2.5 E F1(and)2.5 E F0(end)2.5 E F1 +(are interpreted as described abo)2.5 E -.15(ve)-.15 G(.).15 E +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(70)193.45 E 0 Cg EP +%%Page: 71 71 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .379 -(associated with each displayed history entry)144 84 R 5.379(.N)-.65 G -2.878(oi)-5.379 G(nterv)-2.878 E .378 -(ening blank is printed between the format-)-.15 F .814 -(ted time stamp and the history line.)144 96 R(If)5.814 E/F1 10 -/Times-Italic@0 SF(\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 108 Q(alue of)-.25 E/F2 9/Times-Bold@0 SF -(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/F3 10/Times-Bold@0 SF -<ad63>144 120 Q F0(Clear the history list by deleting all the entries.) -180 120 Q F3<ad64>144 132 Q F1(of)2.5 E(fset)-.18 E F0 .39 -(Delete the history entry at position)180 144 R F1(of)2.889 E(fset)-.18 -E F0 5.389(.I)C(f)-5.389 E F1(of)2.889 E(fset)-.18 E F0 .389(is ne)2.889 -F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G 2.889(,i).15 G 2.889(ti)-2.889 -G 2.889(si)-2.889 G .389(nterpreted as relati)-2.889 F -.15(ve)-.25 G -.598(to one greater than the last history position, so ne)180 156 R -.05 -(ga)-.15 G(ti).05 E .899 -.15(ve i)-.25 H .599 -(ndices count back from the end).15 F(of the history)180 168 Q 2.5(,a) --.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G -(efers to the current)-2.5 E F3(history -d)2.5 E F0(command.)2.5 E F3 -<ad64>144 180 Q F1(start)2.5 E F0<ad>A F1(end)A F0 1.25 -(Delete the range of history entries between positions)180 192 R F1 -(start)3.75 E F0(and)3.75 E F1(end)3.75 E F0 3.75(,i)C(nclusi)-3.75 E --.15(ve)-.25 G 6.25(.P).15 G(ositi)-6.25 E -.15(ve)-.25 G(and ne)180 204 -Q -.05(ga)-.15 G(ti).05 E .3 -.15(ve v)-.25 H(alues for)-.1 E F1(start) -2.5 E F0(and)2.5 E F1(end)2.5 E F0(are interpreted as described abo)2.5 -E -.15(ve)-.15 G(.).15 E F3<ad61>144 216 Q F0 .564(Append the `)180 216 -R(`ne)-.74 E(w')-.25 E 3.064('h)-.74 G .564 -(istory lines to the history \214le.)-3.064 F .565 -(These are history lines entered since)5.564 F(the be)180 228 Q -(ginning of the current)-.15 E F3(bash)2.5 E F0(session, b)2.5 E -(ut not already appended to the history \214le.)-.2 E F3<ad6e>144 240 Q -F0 .854(Read the history lines not already read from the history \214le\ - into the current history list.)180 240 R .772 -(These are lines appended to the history \214le since the be)180 252 R -.773(ginning of the current)-.15 F F3(bash)3.273 E F0(ses-)3.273 E -(sion.)180 264 Q F3<ad72>144 276 Q F0(Read the contents of the history \ -\214le and append them to the current history list.)180 276 Q F3<ad77> -144 288 Q F0(Write the current history list to the history \214le, o)180 -288 Q -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G -(ontents.)-2.5 E F3<ad70>144 300 Q F0 .626 -(Perform history substitution on the follo)180 300 R(wing)-.25 E F1(ar) -3.125 E(gs)-.37 E F0 .625(and display the result on the standard)3.125 F -2.975(output. Does)180 312 R .475 -(not store the results in the history list.)2.975 F(Each)5.475 E F1(ar) -2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F -(normal history e)180 324 Q(xpansion.)-.15 E F3<ad73>144 336 Q F0 .363 -(Store the)180 336 R F1(ar)3.193 E(gs)-.37 E F0 .363 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF<ad61>144 84 Q F1 .775 +(Append the \231ne)180 84 R .776 +(w\232 history lines to the history \214le.)-.25 F .776 +(These are history lines entered since)5.776 F(the be)180 96 Q +(ginning of the current)-.15 E F2(bash)2.5 E F1(session, b)2.5 E +(ut not already appended to the history \214le.)-.2 E F2<ad6e>144 108 Q +F1 .854(Read the history lines not already read from the history \214le\ + into the current history list.)180 108 R .772 +(These are lines appended to the history \214le since the be)180 120 R +.773(ginning of the current)-.15 F F2(bash)3.273 E F1(ses-)3.273 E +(sion.)180 132 Q F2<ad72>144 144 Q F1(Read the contents of the history \ +\214le and append them to the current history list.)180 144 Q F2<ad77> +144 156 Q F1(Write the current history list to the history \214le, o)180 +156 Q -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G +(ontents.)-2.5 E F2<ad70>144 168 Q F1 .626 +(Perform history substitution on the follo)180 168 R(wing)-.25 E F0(ar) +3.125 E(gs)-.37 E F1 .625(and display the result on the standard)3.125 F +2.975(output. Does)180 180 R .475 +(not store the results in the history list.)2.975 F(Each)5.475 E F0(ar) +2.975 E(g)-.37 E F1 .475(must be quoted to disable)2.975 F +(normal history e)180 192 Q(xpansion.)-.15 E F2<ad73>144 204 Q F1 .363 +(Store the)180 204 R F0(ar)3.193 E(gs)-.37 E F1 .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 348 Q -.15(ve) --.15 G 2.5(db).15 G(efore the)-2.5 E F1(ar)2.83 E(gs)-.37 E F0 -(are added.)2.77 E .145(If the)144 364.8 R F2(HISTTIMEFORMA)2.645 E(T) --.855 E F0 -.25(va)2.395 G .145 +(he last command in the history list is)-5.363 F(remo)180 216 Q -.15(ve) +-.15 G 2.5(db).15 G(efore the)-2.5 E F0(ar)2.83 E(gs)-.37 E F1 +(are added.)2.77 E .145(If the)144 232.8 R/F3 9/Times-Bold@0 SF +(HISTTIMEFORMA)2.645 E(T)-.855 E F1 -.25(va)2.395 G .145 (riable is set, the time stamp information associated with each history) -.25 F .669(entry is written to the history \214le, mark)144 376.8 R .669 +.25 F .669(entry is written to the history \214le, mark)144 244.8 R .669 (ed with the history comment character)-.1 F 5.668(.W)-.55 G .668 -(hen the history)-5.668 F .955(\214le is read, lines be)144 388.8 R .956 +(hen the history)-5.668 F .955(\214le is read, lines be)144 256.8 R .956 (ginning with the history comment character follo)-.15 F .956 (wed immediately by a digit)-.25 F .833 -(are interpreted as timestamps for the follo)144 400.8 R .833 +(are interpreted as timestamps for the follo)144 268.8 R .833 (wing history entry)-.25 F 5.832(.T)-.65 G .832(he return v)-5.832 F -.832(alue is 0 unless an in-)-.25 F -.25(va)144 412.8 S .168(lid option\ +.832(alue is 0 unless an in-)-.25 F -.25(va)144 280.8 S .168(lid option\ is encountered, an error occurs while reading or writing the history \ -\214le, an in).25 F -.25(va)-.4 G(lid).25 E F1(of)2.669 E(f-)-.18 E(set) -144 424.8 Q F0 .341(or range is supplied as an ar)2.841 F .341 -(gument to)-.18 F F3<ad64>2.841 E F0 2.841(,o)C 2.84(rt)-2.841 G .34 +\214le, an in).25 F -.25(va)-.4 G(lid).25 E F0(of)2.669 E(f-)-.18 E(set) +144 292.8 Q F1 .341(or range is supplied as an ar)2.841 F .341 +(gument to)-.18 F F2<ad64>2.841 E F1 2.841(,o)C 2.84(rt)-2.841 G .34 (he history e)-2.84 F .34(xpansion supplied as an ar)-.15 F .34 -(gument to)-.18 F F3<ad70>144 436.8 Q F0 -.1(fa)2.5 G(ils.).1 E F3(jobs) -108 453.6 Q F0([)2.5 E F3(\255lnprs)A F0 2.5(][)C F1(jobspec)A F0(... ]) -2.5 E F3(jobs \255x)108 465.6 Q F1(command)2.5 E F0([)2.5 E F1(ar)2.5 E -(gs)-.37 E F0(... ])2.5 E(The \214rst form lists the acti)144 477.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 F3<ad6c>144 489.6 Q F0 -(List process IDs in addition to the normal information.)180 489.6 Q F3 -<ad6e>144 501.6 Q F0 .193(Display information only about jobs that ha) -180 501.6 R .494 -.15(ve c)-.2 H .194(hanged status since the user w).15 -F .194(as last noti-)-.1 F(\214ed of their status.)180 513.6 Q F3<ad70> -144 525.6 Q F0(List only the process ID of the job')180 525.6 Q 2.5(sp) --.55 G(rocess group leader)-2.5 E(.)-.55 E F3<ad72>144 537.6 Q F0 -(Display only running jobs.)180 537.6 Q F3<ad73>144 549.6 Q F0 -(Display only stopped jobs.)180 549.6 Q(If)144 566.4 Q F1(jobspec)4.554 -E F0 .314(is gi)3.124 F -.15(ve)-.25 G .314 +(gument to)-.18 F F2<ad70>144 304.8 Q F1 -.1(fa)2.5 G(ils.).1 E F2(jobs) +108 321.6 Q F1([)2.5 E F2(\255lnprs)A F1 2.5(][)C F0(jobspec)A F1 -3.332 +1.666(... ])2.5 H F2(jobs \255x)108 333.6 Q F0(command)2.5 E F1([)2.5 E +F0(ar)2.5 E(gs)-.37 E F1 -3.332 1.666(... ])2.5 H +(The \214rst form lists the acti)144 345.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 F2<ad6c>144 357.6 Q F1 +(List process IDs in addition to the normal information.)180 357.6 Q F2 +<ad6e>144 369.6 Q F1 .193(Display information only about jobs that ha) +180 369.6 R .494 -.15(ve c)-.2 H .194(hanged status since the user w).15 +F .194(as last noti-)-.1 F(\214ed of their status.)180 381.6 Q F2<ad70> +144 393.6 Q F1(List only the process ID of the job')180 393.6 Q 2.5(sp) +-.55 G(rocess group leader)-2.5 E(.)-.55 E F2<ad72>144 405.6 Q F1 +(Display only running jobs.)180 405.6 Q F2<ad73>144 417.6 Q F1 +(Display only stopped jobs.)180 417.6 Q(If)144 434.4 Q F0(jobspec)4.554 +E F1 .314(is gi)3.124 F -.15(ve)-.25 G .314 (n, output is restricted to information about that job).15 F 5.313(.T) --.4 G .313(he return status is 0 unless)-5.313 F(an in)144 578.4 Q -.25 +-.4 G .313(he return status is 0 unless)-5.313 F(an in)144 446.4 Q -.25 (va)-.4 G(lid option is encountered or an in).25 E -.25(va)-.4 G(lid).25 -E F1(jobspec)4.24 E F0(is supplied.)2.81 E .394(If the)144 595.2 R F3 -<ad78>2.894 E F0 .394(option is supplied,)2.894 F F3(jobs)2.894 E F0 -.394(replaces an)2.894 F(y)-.15 E F1(jobspec)4.634 E F0 .394(found in) -3.204 F F1(command)3.094 E F0(or)3.664 E F1(ar)3.224 E(gs)-.37 E F0 .395 -(with the corre-)3.164 F(sponding process group ID, and e)144 607.2 Q --.15(xe)-.15 G(cutes).15 E F1(command)2.7 E F0(passing it)3.27 E F1(ar) -2.83 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 -E F3(kill)108 624 Q F0([)2.5 E F3<ad73>A F1(sigspec)2.5 E F0(|)2.5 E F3 -<ad6e>2.5 E F1(signum)2.5 E F0(|)2.5 E F3<ad>2.5 E F1(sigspec)A F0 2.5 -(][)C F1(pid)-2.5 E F0(|)2.5 E F1(jobspec)2.5 E F0 2.5(].)C(..)-2.5 E F3 -(kill \255l)108 636 Q F0(|)A F3<ad4c>A F0([)2.5 E F1(sigspec)A F0(|)2.5 -E F1 -.2(ex)2.5 G(it_status).2 E F0(])A .017(Send the signal named by) -144 648 R F1(sigspec)2.857 E F0(or)2.827 E F1(signum)2.857 E F0 .017 -(to the processes named by)2.837 F F1(pid)3.767 E F0(or)3.287 E F1 -(jobspec)4.257 E F0(.).31 E F1(sigspec)5.357 E F0(is)2.827 E .318 -(either a case-insensiti)144 660 R .618 -.15(ve s)-.25 H .318 -(ignal name such as).15 F F2(SIGKILL)2.818 E F0 .319 -(\(with or without the)2.569 F F2(SIG)2.819 E F0 .319 -(pre\214x\) or a signal)2.569 F(number;)144 672 Q F1(signum)3.268 E F0 -.427(is a signal number)3.247 F 5.427(.I)-.55 G(f)-5.427 E F1(sigspec) -3.267 E F0 .427(is not present, then)3.237 F F2(SIGTERM)2.927 E F0 .427 -(is assumed.)2.677 F .427(An ar)5.427 F(-)-.2 E .313(gument of)144 684 R -F3<ad6c>2.813 E F0 .314(lists the signal names.)2.814 F .314(If an)5.314 +E F0(jobspec)4.24 E F1(is supplied.)2.81 E .394(If the)144 463.2 R F2 +<ad78>2.894 E F1 .394(option is supplied,)2.894 F F2(jobs)2.894 E F1 +.394(replaces an)2.894 F(y)-.15 E F0(jobspec)4.634 E F1 .394(found in) +3.204 F F0(command)3.094 E F1(or)3.664 E F0(ar)3.224 E(gs)-.37 E F1 .395 +(with the corre-)3.164 F(sponding process group ID, and e)144 475.2 Q +-.15(xe)-.15 G(cutes).15 E F0(command)2.7 E F1(passing it)3.27 E F0(ar) +2.83 E(gs)-.37 E F1 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 +E F2(kill)108 492 Q F1([)2.5 E F2<ad73>A F0(sigspec)2.5 E F1(|)2.5 E F2 +<ad6e>2.5 E F0(signum)2.5 E F1(|)2.5 E F2<ad>2.5 E F0(sigspec)A F1 2.5 +(][)C F0(pid)-2.5 E F1(|)2.5 E F0(jobspec)2.5 E F1 2.5(].)C 1.666(..) +-.834 G F2(kill \255l)108 504 Q F1(|)A F2<ad4c>A F1([)2.5 E F0(sigspec)A +F1(|)2.5 E F0 -.2(ex)2.5 G(it_status).2 E F1(])A .017 +(Send the signal named by)144 516 R F0(sigspec)2.857 E F1(or)2.827 E F0 +(signum)2.857 E F1 .017(to the processes named by)2.837 F F0(pid)3.767 E +F1(or)3.287 E F0(jobspec)4.257 E F1(.).31 E F0(sigspec)5.357 E F1(is) +2.827 E .318(either a case-insensiti)144 528 R .618 -.15(ve s)-.25 H +.318(ignal name such as).15 F F3(SIGKILL)2.818 E F1 .319 +(\(with or without the)2.569 F F3(SIG)2.819 E F1 .319 +(pre\214x\) or a signal)2.569 F(number;)144 540 Q F0(signum)3.268 E F1 +.427(is a signal number)3.247 F 5.427(.I)-.55 G(f)-5.427 E F0(sigspec) +3.267 E F1 .427(is not present, then)3.237 F F3(SIGTERM)2.927 E F1 .427 +(is assumed.)2.677 F .427(An ar)5.427 F(-)-.2 E .313(gument of)144 552 R +F2<ad6c>2.813 E F1 .314(lists the signal names.)2.814 F .314(If an)5.314 F 2.814(ya)-.15 G -.18(rg)-2.814 G .314(uments are supplied when).18 F -F3<ad6c>2.814 E F0 .314(is gi)2.814 F -.15(ve)-.25 G .314 -(n, the names of).15 F .12(the signals corresponding to the ar)144 696 R +F2<ad6c>2.814 E F1 .314(is gi)2.814 F -.15(ve)-.25 G .314 +(n, the names of).15 F .12(the signals corresponding to the ar)144 564 R .119(guments are listed, and the return status is 0.)-.18 F(The)5.119 E -F1 -.2(ex)2.619 G(it_status).2 E F0(ar)2.619 E(-)-.2 E .799(gument to) -144 708 R F3<ad6c>3.299 E F0 .799 +F0 -.2(ex)2.619 G(it_status).2 E F1(ar)2.619 E(-)-.2 E .799(gument to) +144 576 R F2<ad6c>3.299 E F1 .799 (is a number specifying either a signal number or the e)3.299 F .8 -(xit status of a process termi-)-.15 F .963(nated by a signal.)144 720 R -(The)5.962 E F3<ad4c>3.462 E F0 .962(option is equi)3.462 F -.25(va)-.25 -G .962(lent to).25 F F3<ad6c>3.462 E F0(.)A F3(kill)5.962 E F0 .962 -(returns true if at least one signal w)3.462 F(as)-.1 E(GNU Bash 5.2)72 -768 Q(2022 September 19)135.955 E(69)185.115 E 0 Cg EP -%%Page: 70 70 +(xit status of a process termi-)-.15 F .963(nated by a signal.)144 588 R +(The)5.962 E F2<ad4c>3.462 E F1 .962(option is equi)3.462 F -.25(va)-.25 +G .962(lent to).25 F F2<ad6c>3.462 E F1(.)A F2(kill)5.962 E F1 .962 +(returns true if at least one signal w)3.462 F(as)-.1 E +(successfully sent, or f)144 600 Q(alse if an error occurs or an in)-.1 +E -.25(va)-.4 G(lid option is encountered.).25 E F2(let)108 616.8 Q F0 +(ar)2.5 E(g)-.37 E F1([)2.5 E F0(ar)A(g)-.37 E F1 1.666(...)2.5 G(]) +-1.666 E(Each)144 628.8 Q F0(ar)3.026 E(g)-.37 E F1 .196 +(is an arithmetic e)2.916 F .197(xpression to be e)-.15 F -.25(va)-.25 G +.197(luated \(see).25 F F3 .197(ARITHMETIC EV)2.697 F(ALU)-1.215 E -.855 +(AT)-.54 G(ION).855 E F1(abo)2.447 E -.15(ve)-.15 G 2.697(\). If).15 F +(the last)144 640.8 Q F0(ar)2.83 E(g)-.37 E F1 -.25(eva)2.72 G +(luates to 0,).25 E F2(let)2.5 E F1(returns 1; 0 is returned otherwise.) +2.5 E F2(local)108 657.6 Q F1([)2.5 E F0(option)A F1 2.5(][)C F0(name) +-2.5 E F1([=)A F0(value)A F1 2.5(].)C -3.332 1.666(.. | \255 ])-.834 H +-.15(Fo)144 669.6 S 2.542(re).15 G .042(ach ar)-2.542 F .042 +(gument, a local v)-.18 F .042(ariable named)-.25 F F0(name)2.902 E F1 +.042(is created, and assigned)2.722 F F0(value)2.832 E F1 5.042(.T).18 G +(he)-5.042 E F0(option)2.542 E F1 .041(can be)2.541 F(an)144 681.6 Q +3.152(yo)-.15 G 3.152(ft)-3.152 G .652(he options accepted by)-3.152 F +F2(declar)3.152 E(e)-.18 E F1 5.652(.W)C(hen)-5.652 E F2(local)3.152 E +F1 .653(is used within a function, it causes the v)3.152 F(ari-)-.25 E +(able)144 693.6 Q F0(name)3.282 E F1 .422(to ha)3.102 F .722 -.15 +(ve a v)-.2 H .422 +(isible scope restricted to that function and its children.).15 F(If) +5.421 E F0(name)2.921 E F1 .421(is \255, the set)2.921 F .509 +(of shell options is made local to the function in which)144 705.6 R F2 +(local)3.01 E F1 .51(is in)3.01 F -.2(vo)-.4 G -.1(ke).2 G .51 +(d: shell options changed us-).1 F 1.282(ing the)144 717.6 R F2(set) +3.782 E F1 -.2(bu)3.782 G 1.281 +(iltin inside the function after the call to).2 F F2(local)3.781 E F1 +1.281(are restored to their original v)3.781 F(alues)-.25 E .277 +(when the function returns.)144 729.6 R .277(The restore is ef)5.277 F +.278(fected as if a series of)-.25 F F2(set)2.778 E F1 .278 +(commands were e)2.778 F -.15(xe)-.15 G .278(cuted to).15 F +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(71)193.45 E 0 Cg EP +%%Page: 72 72 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -(successfully sent, or f)144 84 Q(alse if an error occurs or an in)-.1 E --.25(va)-.4 G(lid option is encountered.).25 E/F1 10/Times-Bold@0 SF -(let)108 100.8 Q/F2 10/Times-Italic@0 SF(ar)2.5 E(g)-.37 E F0([)2.5 E F2 -(ar)A(g)-.37 E F0(...])2.5 E(Each)144 112.8 Q F2(ar)3.026 E(g)-.37 E F0 -.196(is an arithmetic e)2.916 F .197(xpression to be e)-.15 F -.25(va) --.25 G .197(luated \(see).25 F/F3 9/Times-Bold@0 SF .197(ARITHMETIC EV) -2.697 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(abo)2.447 E -.15(ve) --.15 G 2.697(\). If).15 F(the last)144 124.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 141.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 -(.. | \255 ])-2.5 E -.15(Fo)144 153.6 S 2.542(re).15 G .042(ach ar) --2.542 F .042(gument, a local v)-.18 F .042(ariable named)-.25 F F2 -(name)2.902 E F0 .042(is created, and assigned)2.722 F F2(value)2.832 E -F0 5.042(.T).18 G(he)-5.042 E F2(option)2.542 E F0 .041(can be)2.541 F -(an)144 165.6 Q 3.152(yo)-.15 G 3.152(ft)-3.152 G .652 -(he options accepted by)-3.152 F F1(declar)3.152 E(e)-.18 E F0 5.652(.W) -C(hen)-5.652 E F1(local)3.152 E F0 .653 -(is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144 -177.6 Q F2(name)3.282 E F0 .422(to ha)3.102 F .722 -.15(ve a v)-.2 H -.422(isible scope restricted to that function and its children.).15 F -(If)5.421 E F2(name)2.921 E F0 .421(is \255, the set)2.921 F .509 -(of shell options is made local to the function in which)144 189.6 R F1 -(local)3.01 E F0 .51(is in)3.01 F -.2(vo)-.4 G -.1(ke).2 G .51 -(d: shell options changed us-).1 F 1.171(ing the)144 201.6 R F1(set) -3.671 E F0 -.2(bu)3.671 G 1.171 -(iltin inside the function are restored to their original v).2 F 1.17 -(alues when the function re-)-.25 F 3.38(turns. The)144 213.6 R .88 -(restore is ef)3.38 F .88(fected as if a series of)-.25 F F1(set)3.381 E -F0 .881(commands were e)3.381 F -.15(xe)-.15 G .881 -(cuted to restore the v).15 F(alues)-.25 E .788 -(that were in place before the function.)144 225.6 R -.4(Wi)5.788 G .788 -(th no operands,).4 F F1(local)3.288 E F0 .787(writes a list of local v) -3.288 F .787(ariables to)-.25 F .654(the standard output.)144 237.6 R -.654(It is an error to use)5.654 F F1(local)3.154 E F0 .654 -(when not within a function.)3.154 F .655(The return status is 0)5.654 F -(unless)144 249.6 Q F1(local)2.5 E F0(is used outside a function, an in) -2.5 E -.25(va)-.4 G(lid).25 E F2(name)2.86 E F0(is supplied, or)2.68 E -F2(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F1(logout)108 -266.4 Q F0(Exit a login shell.)144 266.4 Q F1(map\214le)108 283.2 Q F0 -([)2.5 E F1<ad64>A F2(delim)2.5 E F0 2.5(][)C F1<ad6e>-2.5 E F2(count) -2.5 E F0 2.5(][)C F1<ad4f>-2.5 E F2(origin)2.5 E F0 2.5(][)C F1<ad73> --2.5 E F2(count)2.5 E F0 2.5(][)C F1<ad74>-2.5 E F0 2.5(][)C F1<ad75> --2.5 E F2(fd)2.5 E F0 2.5(][)C F1<ad43>-2.5 E F2(callbac)2.5 E(k)-.2 E -F0 2.5(][)C F1<ad63>-2.5 E F2(quantum)2.5 E F0 2.5(][)C F2(arr)-2.5 E -(ay)-.15 E F0(])A F1 -.18(re)108 295.2 S(adarray).18 E F0([)2.5 E F1 -<ad64>A F2(delim)2.5 E F0 2.5(][)C F1<ad6e>-2.5 E F2(count)2.5 E F0 2.5 -(][)C F1<ad4f>-2.5 E F2(origin)2.5 E F0 2.5(][)C F1<ad73>-2.5 E F2 -(count)2.5 E F0 2.5(][)C F1<ad74>-2.5 E F0 2.5(][)C F1<ad75>-2.5 E F2 -(fd)2.5 E F0 2.5(][)C F1<ad43>-2.5 E F2(callbac)2.5 E(k)-.2 E F0 2.5(][) -C F1<ad63>-2.5 E F2(quantum)2.5 E F0 2.5(][)C F2(arr)-2.5 E(ay)-.15 E F0 -(])A .159(Read lines from the standard input into the inde)144 307.2 R --.15(xe)-.15 G 2.659(da).15 G .159(rray v)-2.659 F(ariable)-.25 E F2 -(arr)2.989 E(ay)-.15 E F0 2.659(,o).32 G 2.658(rf)-2.659 G .158 -(rom \214le descriptor)-2.658 F F2(fd)4.628 E F0 1.248(if the)144 319.2 -R F1<ad75>3.748 E F0 1.248(option is supplied.)3.748 F 1.249(The v)6.249 -F(ariable)-.25 E F3(MAPFILE)3.749 E F0 1.249(is the def)3.499 F(ault)-.1 -E F2(arr)3.749 E(ay)-.15 E F0 6.249(.O)C 1.249(ptions, if supplied,) --6.249 F(ha)144 331.2 Q .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F1<ad64>144 343.2 Q F0 .911 -(The \214rst character of)180 343.2 R F2(delim)3.411 E F0 .911 -(is used to terminate each input line, rather than ne)3.411 F 3.41 -(wline. If)-.25 F F2(delim)180 355.2 Q F0(is the empty string,)2.5 E F1 -(map\214le)2.5 E F0(will terminate a line when it reads a NUL character) -2.5 E(.)-.55 E F1<ad6e>144 367.2 Q F0(Cop)180 367.2 Q 2.5(ya)-.1 G 2.5 -(tm)-2.5 G(ost)-2.5 E F2(count)2.7 E F0 2.5(lines. If)3.18 F F2(count) -2.5 E F0(is 0, all lines are copied.)2.5 E F1<ad4f>144 379.2 Q F0(Be)180 -379.2 Q(gin assigning to)-.15 E F2(arr)2.83 E(ay)-.15 E F0(at inde)2.82 -E(x)-.15 E F2(origin)2.73 E F0 5(.T).24 G(he def)-5 E(ault inde)-.1 E -2.5(xi)-.15 G 2.5(s0)-2.5 G(.)-2.5 E F1<ad73>144 391.2 Q F0 -(Discard the \214rst)180 391.2 Q F2(count)2.5 E F0(lines read.)2.5 E F1 -<ad74>144 403.2 Q F0(Remo)180 403.2 Q .3 -.15(ve a t)-.15 H(railing).15 -E F2(delim)2.5 E F0(\(def)2.5 E(ault ne)-.1 E -(wline\) from each line read.)-.25 E F1<ad75>144 415.2 Q F0 -(Read lines from \214le descriptor)180 415.2 Q F2(fd)2.5 E F0 -(instead of the standard input.)2.5 E F1<ad43>144 427.2 Q F0(Ev)180 -427.2 Q(aluate)-.25 E F2(callbac)2.7 E(k)-.2 E F0(each time)3.17 E F2 -(quantum)2.5 E F0(lines are read.)2.5 E(The)5 E F1<ad63>2.5 E F0 -(option speci\214es)2.5 E F2(quantum)2.75 E F0(.).32 E F1<ad63>144 439.2 -Q F0(Specify the number of lines read between each call to)180 439.2 Q -F2(callbac)2.7 E(k)-.2 E F0(.).67 E(If)144 456 Q F1<ad43>2.967 E F0 .467 -(is speci\214ed without)2.967 F F1<ad63>2.967 E F0 2.967(,t)C .467 -(he def)-2.967 F .467(ault quantum is 5000.)-.1 F(When)5.467 E F2 -(callbac)2.967 E(k)-.2 E F0 .467(is e)2.967 F -.25(va)-.25 G .467 -(luated, it is sup-).25 F .262(plied the inde)144 468 R 2.762(xo)-.15 G -2.762(ft)-2.762 G .262(he ne)-2.762 F .261(xt array element to be assig\ -ned and the line to be assigned to that element)-.15 F .274 -(as additional ar)144 480 R(guments.)-.18 E F2(callbac)5.274 E(k)-.2 E -F0 .274(is e)2.774 F -.25(va)-.25 G .274 -(luated after the line is read b).25 F .275 -(ut before the array element is)-.2 F(assigned.)144 492 Q -(If not supplied with an e)144 508.8 Q(xplicit origin,)-.15 E F1 -(map\214le)2.5 E F0(will clear)2.5 E F2(arr)2.5 E(ay)-.15 E F0 -(before assigning to it.)2.5 E F1(map\214le)144 525.6 Q F0 .797 -(returns successfully unless an in)3.298 F -.25(va)-.4 G .797 -(lid option or option ar).25 F .797(gument is supplied,)-.18 F F2(arr) -3.297 E(ay)-.15 E F0 .797(is in-)3.297 F -.25(va)144 537.6 S -(lid or unassignable, or if).25 E F2(arr)2.5 E(ay)-.15 E F0 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .69(restore the v)144 84 R .69 +(alues that were in place before the function.)-.25 F -.4(Wi)5.69 G .69 +(th no operands,).4 F/F2 10/Times-Bold@0 SF(local)3.19 E F1 .69 +(writes a list of)3.19 F .566(local v)144 96 R .566 +(ariables to the standard output.)-.25 F .566(It is an error to use) +5.566 F F2(local)3.066 E F1 .566(when not within a function.)3.066 F +(The)5.567 E .426(return status is 0 unless)144 108 R F2(local)2.926 E +F1 .425(is used outside a function, an in)2.925 F -.25(va)-.4 G(lid).25 +E F0(name)3.285 E F1 .425(is supplied, or)3.105 F F0(name)2.925 E F1 +.425(is a)2.925 F(readonly v)144 120 Q(ariable.)-.25 E F2(logout)108 +136.8 Q F1(Exit a login shell.)144 136.8 Q F2(map\214le)108 153.6 Q F1 +([)2.5 E F2<ad64>A F0(delim)2.5 E F1 2.5(][)C F2<ad6e>-2.5 E F0(count) +2.5 E F1 2.5(][)C F2<ad4f>-2.5 E F0(origin)2.5 E F1 2.5(][)C F2<ad73> +-2.5 E F0(count)2.5 E F1 2.5(][)C F2<ad74>-2.5 E F1 2.5(][)C F2<ad75> +-2.5 E F0(fd)2.5 E F1 2.5(][)C F2<ad43>-2.5 E F0(callbac)2.5 E(k)-.2 E +F1 2.5(][)C F2<ad63>-2.5 E F0(quantum)2.5 E F1 2.5(][)C F0(arr)-2.5 E +(ay)-.15 E F1(])A F2 -.18(re)108 165.6 S(adarray).18 E F1([)2.5 E F2 +<ad64>A F0(delim)2.5 E F1 2.5(][)C F2<ad6e>-2.5 E F0(count)2.5 E F1 2.5 +(][)C F2<ad4f>-2.5 E F0(origin)2.5 E F1 2.5(][)C F2<ad73>-2.5 E F0 +(count)2.5 E F1 2.5(][)C F2<ad74>-2.5 E F1 2.5(][)C F2<ad75>-2.5 E F0 +(fd)2.5 E F1 2.5(][)C F2<ad43>-2.5 E F0(callbac)2.5 E(k)-.2 E F1 2.5(][) +C F2<ad63>-2.5 E F0(quantum)2.5 E F1 2.5(][)C F0(arr)-2.5 E(ay)-.15 E F1 +(])A .158(Read lines from the standard input into the inde)144 177.6 R +-.15(xe)-.15 G 2.659(da).15 G .159(rray v)-2.659 F(ariable)-.25 E F0 +(arr)2.989 E(ay)-.15 E F1 2.659(,o).32 G 2.659(rf)-2.659 G .159 +(rom \214le descriptor)-2.659 F F0(fd)4.629 E F1 1.249(if the)144 189.6 +R F2<ad75>3.749 E F1 1.249(option is supplied.)3.749 F 1.249(The v)6.249 +F(ariable)-.25 E/F3 9/Times-Bold@0 SF(MAPFILE)3.749 E F1 1.249 +(is the def)3.499 F(ault)-.1 E F0(arr)3.748 E(ay)-.15 E F1 6.248(.O)C +1.248(ptions, if supplied,)-6.248 F(ha)144 201.6 Q .3 -.15(ve t)-.2 H +(he follo).15 E(wing meanings:)-.25 E F2<ad64>144 213.6 Q F1 .91 +(The \214rst character of)180 213.6 R F0(delim)3.41 E F1 .911 +(is used to terminate each input line, rather than ne)3.41 F 3.411 +(wline. If)-.25 F F0(delim)180 225.6 Q F1(is the empty string,)2.5 E F2 +(map\214le)2.5 E F1(will terminate a line when it reads a NUL character) +2.5 E(.)-.55 E F2<ad6e>144 237.6 Q F1(Cop)180 237.6 Q 2.5(ya)-.1 G 2.5 +(tm)-2.5 G(ost)-2.5 E F0(count)2.7 E F1 2.5(lines. If)3.18 F F0(count) +2.5 E F1(is 0, all lines are copied.)2.5 E F2<ad4f>144 249.6 Q F1(Be)180 +249.6 Q(gin assigning to)-.15 E F0(arr)2.83 E(ay)-.15 E F1(at inde)2.82 +E(x)-.15 E F0(origin)2.73 E F1 5(.T).24 G(he def)-5 E(ault inde)-.1 E +2.5(xi)-.15 G 2.5(s0)-2.5 G(.)-2.5 E F2<ad73>144 261.6 Q F1 +(Discard the \214rst)180 261.6 Q F0(count)2.5 E F1(lines read.)2.5 E F2 +<ad74>144 273.6 Q F1(Remo)180 273.6 Q .3 -.15(ve a t)-.15 H(railing).15 +E F0(delim)2.5 E F1(\(def)2.5 E(ault ne)-.1 E +(wline\) from each line read.)-.25 E F2<ad75>144 285.6 Q F1 +(Read lines from \214le descriptor)180 285.6 Q F0(fd)2.5 E F1 +(instead of the standard input.)2.5 E F2<ad43>144 297.6 Q F1(Ev)180 +297.6 Q(aluate)-.25 E F0(callbac)2.7 E(k)-.2 E F1(each time)3.17 E F0 +(quantum)2.5 E F1(lines are read.)2.5 E(The)5 E F2<ad63>2.5 E F1 +(option speci\214es)2.5 E F0(quantum)2.75 E F1(.).32 E F2<ad63>144 309.6 +Q F1(Specify the number of lines read between each call to)180 309.6 Q +F0(callbac)2.7 E(k)-.2 E F1(.).67 E(If)144 326.4 Q F2<ad43>2.968 E F1 +.467(is speci\214ed without)2.967 F F2<ad63>2.967 E F1 2.967(,t)C .467 +(he def)-2.967 F .467(ault quantum is 5000.)-.1 F(When)5.467 E F0 +(callbac)2.967 E(k)-.2 E F1 .467(is e)2.967 F -.25(va)-.25 G .467 +(luated, it is sup-).25 F .261(plied the inde)144 338.4 R 2.761(xo)-.15 +G 2.761(ft)-2.761 G .261(he ne)-2.761 F .262(xt array element to be ass\ +igned and the line to be assigned to that element)-.15 F .275 +(as additional ar)144 350.4 R(guments.)-.18 E F0(callbac)5.275 E(k)-.2 E +F1 .275(is e)2.775 F -.25(va)-.25 G .274 +(luated after the line is read b).25 F .274 +(ut before the array element is)-.2 F(assigned.)144 362.4 Q +(If not supplied with an e)144 379.2 Q(xplicit origin,)-.15 E F2 +(map\214le)2.5 E F1(will clear)2.5 E F0(arr)2.5 E(ay)-.15 E F1 +(before assigning to it.)2.5 E F2(map\214le)144 396 Q F1 .797 +(returns successfully unless an in)3.297 F -.25(va)-.4 G .797 +(lid option or option ar).25 F .797(gument is supplied,)-.18 F F0(arr) +3.297 E(ay)-.15 E F1 .798(is in-)3.298 F -.25(va)144 408 S +(lid or unassignable, or if).25 E F0(arr)2.5 E(ay)-.15 E F1 (is not an inde)2.5 E -.15(xe)-.15 G 2.5(da).15 G(rray)-2.5 E(.)-.65 E -F1(popd)108 554.4 Q F0<5bad>2.5 E F1(n)A F0 2.5(][)C(+)-2.5 E F2(n)A F0 -2.5(][)C<ad>-2.5 E F2(n)A F0(])A(Remo)144 566.4 Q -.15(ve)-.15 G 3.091 -(se).15 G .591(ntries from the directory stack.)-3.091 F .592 -(The elements are numbered from 0 starting at the \214rst)5.591 F .665 -(directory listed by)144 578.4 R F1(dirs)3.165 E F0 5.665(.W)C .665 -(ith no ar)-6.065 F(guments,)-.18 E F1(popd)3.165 E F0(remo)3.165 E -.15 -(ve)-.15 G 3.165(st).15 G .664(he top directory from the stack, and) --3.165 F(changes to the ne)144 590.4 Q 2.5(wt)-.25 G(op directory)-2.5 E +F2(popd)108 424.8 Q F1<5bad>2.5 E F2(n)A F1 2.5(][)C(+)-2.5 E F0(n)A F1 +2.5(][)C<ad>-2.5 E F0(n)A F1(])A(Remo)144 436.8 Q -.15(ve)-.15 G 3.092 +(se).15 G .592(ntries from the directory stack.)-3.092 F .591 +(The elements are numbered from 0 starting at the \214rst)5.591 F .664 +(directory listed by)144 448.8 R F2(dirs)3.164 E F1 5.664(.W)C .664 +(ith no ar)-6.064 F(guments,)-.18 E F2(popd)3.165 E F1(remo)3.165 E -.15 +(ve)-.15 G 3.165(st).15 G .665(he top directory from the stack, and) +-3.165 F(changes to the ne)144 460.8 Q 2.5(wt)-.25 G(op directory)-2.5 E 5(.A)-.65 G -.18(rg)-5 G(uments, if supplied, ha).18 E .3 -.15(ve t)-.2 -H(he follo).15 E(wing meanings:)-.25 E F1<ad6e>144 602.4 Q F0 .551 -(Suppresses the normal change of directory when remo)180 602.4 R .551 +H(he follo).15 E(wing meanings:)-.25 E F2<ad6e>144 472.8 Q F1 .551 +(Suppresses the normal change of directory when remo)180 472.8 R .551 (ving directories from the stack, so)-.15 F -(that only the stack is manipulated.)180 614.4 Q F1(+)144 626.4 Q F2(n)A -F0(Remo)180 626.4 Q -.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 .779 -(from the stack.)180 638.4 R -.15(Fo)5.779 G 3.279(re).15 G(xample:) --3.429 E/F4 10/Courier@0 SF .779(popd +0)3.279 F F0(remo)3.279 E -.15 -(ve)-.15 G 3.279(st).15 G .779(he \214rst directory)-3.279 F(,)-.65 E F4 -.78(popd +1)3.28 F F0 .78(the sec-)3.28 F(ond.)180 650.4 Q F1<ad>144 -662.4 Q F2(n)A F0(Remo)180 662.4 Q -.15(ve)-.15 G 3.76(st).15 G(he)-3.76 -E F2(n)3.76 E F0 1.259(th entry counting from the right of the list sho) -B 1.259(wn by)-.25 F F1(dirs)3.759 E F0 3.759(,s)C 1.259(tarting with) --3.759 F 2.5(zero. F)180 674.4 R(or e)-.15 E(xample:)-.15 E F4(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 F4(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E .093 +(that only the stack is manipulated.)180 484.8 Q F2(+)144 496.8 Q F0(n)A +F1(Remo)180 496.8 Q -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F0(n)2.64 E +F1 .14(th entry counting from the left of the list sho)B .14(wn by)-.25 +F F2(dirs)2.64 E F1 2.64(,s)C .14(tarting with zero,)-2.64 F .777 +(from the stack.)180 508.8 R -.15(Fo)5.777 G 3.277(re).15 G .777 +(xample: \231popd +0\232 remo)-3.427 F -.15(ve)-.15 G 3.276(st).15 G +.776(he \214rst directory)-3.276 F 3.276<2c99>-.65 G .776 +(popd +1\232 the sec-)-3.276 F(ond.)180 520.8 Q F2<ad>144 532.8 Q F0(n)A +F1(Remo)180 532.8 Q -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F0(n)3.759 +E F1 1.259(th entry counting from the right of the list sho)B 1.26 +(wn by)-.25 F F2(dirs)3.76 E F1 3.76(,s)C 1.26(tarting with)-3.76 F 2.5 +(zero. F)180 544.8 R(or e)-.15 E(xample: \231popd \2550\232 remo)-.15 E +-.15(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E 2.5<2c99>-.65 G +(popd \2551\232 the ne)-2.5 E(xt to last.)-.15 E 1.058 (If the top element of the directory stack is modi\214ed, and the)144 -691.2 R F2(-n)2.593 E F0 .094(option w)2.594 F .094(as not supplied,)-.1 -F F1(popd)2.594 E F0(uses)2.594 E(the)144 703.2 Q F1(cd)2.697 E F0 -.2 -(bu)2.697 G .196 -(iltin to change to the directory at the top of the stack.).2 F .196 -(If the)5.196 F F1(cd)2.696 E F0 -.1(fa)2.696 G(ils,).1 E F1(popd)2.696 -E F0 .196(returns a non-)2.696 F(zero v)144 715.2 Q(alue.)-.25 E -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(70)185.115 E 0 Cg EP -%%Page: 71 71 +561.6 R F0<ad6e>3.557 E F1 1.057(option w)3.557 F 1.057 +(as not supplied,)-.1 F F2(popd)3.557 E F1 .249(uses the)144 573.6 R F2 +(cd)2.749 E F1 -.2(bu)2.749 G .249 +(iltin to change to the directory at the top of the stack.).2 F .249 +(If the)5.249 F F2(cd)2.749 E F1 -.1(fa)2.749 G(ils,).1 E F2(popd)2.749 +E F1 .25(returns a)2.749 F(non-zero v)144 585.6 Q(alue.)-.25 E +(Otherwise,)144 602.4 Q F2(popd)2.671 E F1 .171(returns f)2.671 F .171 +(alse if an in)-.1 F -.25(va)-.4 G .171 +(lid option is encountered, the directory stack is empty).25 F 2.67(,o) +-.65 G 2.67(ra)-2.67 G(non-e)144 614.4 Q +(xistent directory stack entry is speci\214ed.)-.15 E 1.555(If the)144 +631.2 R F2(popd)4.055 E F1 1.555(command is successful, bash runs)4.055 +F F2(dirs)4.056 E F1 1.556(to sho)4.056 F 4.056(wt)-.25 G 1.556 +(he \214nal contents of the directory)-4.056 F +(stack, and the return status is 0.)144 643.2 Q F2(printf)108 660 Q F1 +([)2.5 E F2<ad76>A F0(var)2.5 E F1(])A F0(format)2.5 E F1([)2.5 E F0(ar) +A(guments)-.37 E F1(])A .358(Write the formatted)144 672 R F0(ar)2.858 E +(guments)-.37 E F1 .358(to the standard output under the control of the) +2.858 F F0(format)2.857 E F1 5.357(.T)C(he)-5.357 E F2<ad76>2.857 E F1 +(op-)2.857 E .714(tion causes the output to be assigned to the v)144 684 +R(ariable)-.25 E F0(var)3.214 E F1 .714 +(rather than being printed to the standard)3.214 F(output.)144 696 Q +(The)144 712.8 Q F0(format)3.018 E F1 .517(is a character string which \ +contains three types of objects: plain characters, which are)3.018 F +.704(simply copied to standard output, character escape sequences, whic\ +h are con)144 724.8 R -.15(ve)-.4 G .704(rted and copied to).15 F +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(72)193.45 E 0 Cg EP +%%Page: 73 73 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(Otherwise,)144 84 -Q/F1 10/Times-Bold@0 SF(popd)2.67 E F0 .17(returns f)2.67 F .17 -(alse if an in)-.1 F -.25(va)-.4 G .171 -(lid option is encountered, the directory stack is empty).25 F 2.671(,o) --.65 G 2.671(ra)-2.671 G(non-e)144 96 Q -(xistent directory stack entry is speci\214ed.)-.15 E 1.556(If the)144 -112.8 R F1(popd)4.056 E F0 1.556(command is successful, bash runs)4.056 -F F1(dirs)4.056 E F0 1.556(to sho)4.056 F 4.055(wt)-.25 G 1.555 -(he \214nal contents of the directory)-4.055 F -(stack, and the return status is 0.)144 124.8 Q F1(printf)108 141.6 Q F0 -([)2.5 E F1<ad76>A/F2 10/Times-Italic@0 SF(var)2.5 E F0(])A F2(format) -2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A .357(Write the formatted) -144 153.6 R F2(ar)2.857 E(guments)-.37 E F0 .357 -(to the standard output under the control of the)2.857 F F2(format)2.858 -E F0 5.358(.T)C(he)-5.358 E F1<ad76>2.858 E F0(op-)2.858 E .714 -(tion causes the output to be assigned to the v)144 165.6 R(ariable)-.25 -E F2(var)3.214 E F0 .714(rather than being printed to the standard)3.214 -F(output.)144 177.6 Q(The)144 201.6 Q F2(format)3.017 E F0 .517(is a ch\ -aracter string which contains three types of objects: plain characters,\ - which are)3.017 F .704(simply copied to standard output, character esc\ -ape sequences, which are con)144 213.6 R -.15(ve)-.4 G .703 -(rted and copied to).15 F .036(the standard output, and format speci\ -\214cations, each of which causes printing of the ne)144 225.6 R .037 -(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 237.6 Q(gument)-.37 E F0 -5.532(.I)C 3.032(na)-5.532 G .532(ddition to the standard)-3.032 F F2 -(printf)3.032 E F0 .532(\(1\) format speci\214cations,)B F1(printf)3.031 -E F0 .531(interprets the follo)3.031 F(w-)-.25 E(ing e)144 249.6 Q -(xtensions:)-.15 E F1(%b)144 261.6 Q F0(causes)180 261.6 Q F1(printf) -2.595 E F0 .096(to e)2.595 F .096 -(xpand backslash escape sequences in the corresponding)-.15 F F2(ar) -2.596 E(gument)-.37 E F0 .096(in the)2.596 F(same w)180 273.6 Q(ay as) --.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 285.6 Q F0(causes)180 285.6 Q -F1(printf)2.51 E F0 .01(to output the corresponding)2.51 F F2(ar)2.51 E -(gument)-.37 E F0 .01(in a format that can be reused as shell)2.51 F -(input.)180 297.6 Q F1(%Q)144 309.6 Q F0(lik)180 309.6 Q(e)-.1 E F1(%q) -2.5 E F0 2.5(,b)C(ut applies an)-2.7 E 2.5(ys)-.15 G -(upplied precision to the)-2.5 E F2(ar)2.5 E(gument)-.37 E F0 -(before quoting it.)2.5 E F1(%\()144 321.6 Q F2(datefmt)A F1(\)T)A F0 -(causes)180 333.6 Q F1(printf)4.403 E F0 1.904 -(to output the date-time string resulting from using)4.403 F F2(datefmt) -4.404 E F0 1.904(as a format)4.404 F .381(string for)180 345.6 R F2 -(strftime)2.881 E F0 2.881(\(3\). The)B(corresponding)2.881 E F2(ar) -2.881 E(gument)-.37 E F0 .381(is an inte)2.881 F .381 -(ger representing the number)-.15 F .292(of seconds since the epoch.)180 -357.6 R -1 -.8(Tw o)5.293 H .293(special ar)3.593 F .293(gument v)-.18 F -.293(alues may be used: \2551 represents the)-.25 F .694 -(current time, and \2552 represents the time the shell w)180 369.6 R -.693(as in)-.1 F -.2(vo)-.4 G -.1(ke).2 G 3.193(d. If).1 F .693(no ar) -3.193 F .693(gument is speci-)-.18 F .21(\214ed, con)180 381.6 R -.15 -(ve)-.4 G .21(rsion beha).15 F -.15(ve)-.2 G 2.71(sa).15 G 2.71(si)-2.71 -G 2.71<66ad>-2.71 G 2.71(1h)-2.71 G .21(ad been gi)-2.71 F -.15(ve)-.25 -G 2.71(n. This).15 F .21(is an e)2.71 F .21(xception to the usual)-.15 F -F1(printf)2.71 E F0(beha)180 393.6 Q(vior)-.2 E(.)-.55 E .902 -(The %b, %q, and %T directi)144 410.4 R -.15(ve)-.25 G 3.401(sa).15 G -.901(ll use the \214eld width and precision ar)-3.401 F .901 -(guments from the format)-.18 F .357(speci\214cation and write that man) -144 422.4 R 2.857(yb)-.15 G .358 -(ytes from \(or use that wide a \214eld for\) the e)-2.857 F .358 -(xpanded ar)-.15 F(gument,)-.18 E -(which usually contains more characters than the original.)144 434.4 Q -(Ar)144 451.2 Q .464(guments to non-string format speci\214ers are trea\ -ted as C constants, e)-.18 F .463(xcept that a leading plus or)-.15 F -1.258(minus sign is allo)144 463.2 R 1.259 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .036(the standard output, and format speci\214cati\ +ons, each of which causes printing of the ne)144 84 R .036(xt successi) +-.15 F -.15(ve)-.25 G F0(ar)144 96 Q(gument)-.37 E F1 6.07(.I)C 3.57(na) +-6.07 G 1.07(ddition to the standard)-3.57 F F0(printf)4.82 E F1 1.07 +(\(3\) format characters)1.96 F/F2 10/Times-Bold@0 SF(csndiouxXeEfFgGaA) +3.57 E F1(,)A F2(printf)3.57 E F1(interprets the follo)144 108 Q +(wing additional format speci\214ers:)-.25 E F2(%b)144 120 Q F1(causes) +180 120 Q F2(printf)2.596 E F1 .096(to e)2.596 F .096 +(xpand backslash escape sequences in the corresponding)-.15 F F0(ar) +2.596 E(gument)-.37 E F1 .095(in the)2.595 F(same w)180 132 Q(ay as)-.1 +E F2(echo \255e)2.5 E F1(.)A F2(%q)144 144 Q F1(causes)180 144 Q F2 +(printf)2.51 E F1 .01(to output the corresponding)2.51 F F0(ar)2.51 E +(gument)-.37 E F1 .01(in a format that can be reused as shell)2.51 F +(input.)180 156 Q F2(%q)5.544 E F1(and)3.044 E F2(%Q)3.044 E F1 .544 +(use the)3.044 F F2<240808>3.044 E F1 .544(quoting style if an)3.044 F +3.044(yc)-.15 G .543(haracters in the ar)-3.044 F .543 +(gument string re-)-.18 F 1.285 +(quire it, and backslash quoting otherwise.)180 168 R 1.286 +(If the format string uses the)6.285 F F0(printf)3.786 E F1(alternate) +3.786 E(form, these tw)180 180 Q 2.5(of)-.1 G(ormats quote the ar)-2.5 E +(gument string using single quotes.)-.18 E F2(%Q)144 192 Q F1(lik)180 +192 Q(e)-.1 E F2(%q)2.5 E F1 2.5(,b)C(ut applies an)-2.7 E 2.5(ys)-.15 G +(upplied precision to the)-2.5 E F0(ar)2.5 E(gument)-.37 E F1 +(before quoting it.)2.5 E F2(%\()144 204 Q F0(datefmt)A F2(\)T)A F1 +(causes)180 216 Q F2(printf)4.404 E F1 1.904 +(to output the date-time string resulting from using)4.404 F F0(datefmt) +4.404 E F1 1.903(as a format)4.404 F .333(string for)180 228 R F0 +(strftime)3.173 E F1 2.833(\(3\). The).18 F(corresponding)2.833 E F0(ar) +2.834 E(gument)-.37 E F1 .334(is an inte)2.834 F .334 +(ger representing the number)-.15 F .293(of seconds since the epoch.)180 +240 R -1 -.8(Tw o)5.293 H .293(special ar)3.593 F .293(gument v)-.18 F +.293(alues may be used: \2551 represents the)-.25 F .693 +(current time, and \2552 represents the time the shell w)180 252 R .693 +(as in)-.1 F -.2(vo)-.4 G -.1(ke).2 G 3.194(d. If).1 F .694(no ar)3.194 +F .694(gument is speci-)-.18 F .21(\214ed, con)180 264 R -.15(ve)-.4 G +.21(rsion beha).15 F -.15(ve)-.2 G 2.71(sa).15 G 2.71(si)-2.71 G 2.71 +<66ad>-2.71 G 2.71(1h)-2.71 G .21(ad been gi)-2.71 F -.15(ve)-.25 G 2.71 +(n. This).15 F .21(is an e)2.71 F .21(xception to the usual)-.15 F F2 +(printf)2.71 E F1(beha)180 276 Q(vior)-.2 E(.)-.55 E .946(The %b, %q, a\ +nd %T format speci\214ers all use the \214eld width and precision ar)144 +292.8 R .946(guments from the)-.18 F .339 +(format speci\214cation and write that man)144 304.8 R 2.838(yb)-.15 G +.338(ytes from \(or use that wide a \214eld for\) the e)-2.838 F .338 +(xpanded ar)-.15 F(-)-.2 E +(gument, which usually contains more characters than the original.)144 +316.8 Q(The %n format speci\214er accepts a corresponding ar)144 333.6 Q +(gument that is treated as a shell v)-.18 E(ariable name.)-.25 E .393 +(The %s and %c format speci\214ers accept an l \(long\) modi\214er)144 +350.4 R 2.894(,w)-.4 G .394(hich forces them to con)-2.894 F -.15(ve)-.4 +G .394(rt the ar).15 F(-)-.2 E .321 +(gument string to a wide-character string and apply an)144 362.4 R 2.821 +(ys)-.15 G .32(upplied \214eld width and precision in terms)-2.821 F +(of characters, not bytes.)144 374.4 Q(Ar)144 391.2 Q .463(guments to n\ +on-string format speci\214ers are treated as C constants, e)-.18 F .464 +(xcept that a leading plus or)-.15 F 1.259(minus sign is allo)144 403.2 +R 1.259 (wed, and if the leading character is a single or double quote, the v) --.25 F 1.259(alue is the)-.25 F(ASCII v)144 475.2 Q(alue of the follo) --.25 E(wing character)-.25 E(.)-.55 E(The)144 492 Q F2(format)2.515 E F0 -.015(is reused as necessary to consume all of the)2.515 F F2(ar)2.515 E -(guments)-.37 E F0 5.015(.I)C 2.514(ft)-5.015 G(he)-2.514 E F2(format) -2.514 E F0 .014(requires more)2.514 F F2(ar)2.514 E(-)-.2 E(guments)144 -504 Q F0 .565(than are supplied, the e)3.065 F .566 +-.25 F 1.258(alue is the)-.25 F(ASCII v)144 415.2 Q(alue of the follo) +-.25 E(wing character)-.25 E(.)-.55 E(The)144 432 Q F0(format)2.514 E F1 +.015(is reused as necessary to consume all of the)2.514 F F0(ar)2.515 E +(guments)-.37 E F1 5.015(.I)C 2.515(ft)-5.015 G(he)-2.515 E F0(format) +2.515 E F1 .015(requires more)2.515 F F0(ar)2.515 E(-)-.2 E(guments)144 +444 Q F1 .566(than are supplied, the e)3.066 F .566 (xtra format speci\214cations beha)-.15 F .866 -.15(ve a)-.2 H 3.066(si) -.15 G 3.066(faz)-3.066 G .566(ero v)-3.066 F .566(alue or null string,) --.25 F(as appropriate, had been supplied.)144 516 Q(The return v)5 E -(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd) -108 532.8 Q F0([)2.5 E F1<ad6e>A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C -<ad>-2.5 E F2(n)A F0(])A F1(pushd)108 544.8 Q F0([)2.5 E F1<ad6e>A F0 -2.5(][)C F2(dir)-2.5 E F0(])A .64(Adds a directory to the top of the di\ -rectory stack, or rotates the stack, making the ne)144 556.8 R 3.139(wt) --.25 G .639(op of the)-3.139 F .088(stack the current w)144 568.8 R .088 -(orking directory)-.1 F 5.088(.W)-.65 G .088(ith no ar)-5.488 F -(guments,)-.18 E F1(pushd)2.589 E F0 -.15(ex)2.589 G .089 +.15 G 3.065(faz)-3.066 G .565(ero v)-3.065 F .565(alue or null string,) +-.25 F .541(as appropriate, had been supplied.)144 456 R .541 +(The return v)5.541 F .541(alue is zero on success, non-zero if an in) +-.25 F -.25(va)-.4 G .542(lid op-).25 F +(tion is supplied or a write or assignment error occurs.)144 468 Q F2 +(pushd)108 484.8 Q F1([)2.5 E F2<ad6e>A F1 2.5(][)C(+)-2.5 E F0(n)A F1 +2.5(][)C<ad>-2.5 E F0(n)A F1(])A F2(pushd)108 496.8 Q F1([)2.5 E F2 +<ad6e>A F1 2.5(][)C F0(dir)-2.5 E F1(])A .64(Adds a directory to the to\ +p of the directory stack, or rotates the stack, making the ne)144 508.8 +R 3.139(wt)-.25 G .639(op of the)-3.139 F .088(stack the current w)144 +520.8 R .088(orking directory)-.1 F 5.088(.W)-.65 G .088(ith no ar) +-5.488 F(guments,)-.18 E F2(pushd)2.589 E F1 -.15(ex)2.589 G .089 (changes the top tw).15 F 2.589(oe)-.1 G .089(lements of)-2.589 F -(the directory stack.)144 580.8 Q(Ar)5 E(guments, if supplied, ha)-.18 E -.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad6e>144 -592.8 Q F0 1.811(Suppresses the normal change of directory when rotatin\ -g or adding directories to the)180 592.8 R -(stack, so that only the stack is manipulated.)180 604.8 Q F1(+)144 -616.8 Q F2(n)A F0 1.267(Rotates the stack so that the)180 616.8 R F2(n) -3.767 E F0 1.268(th directory \(counting from the left of the list sho)B -1.268(wn by)-.25 F F1(dirs)180 628.8 Q F0 2.5(,s)C -(tarting with zero\) is at the top.)-2.5 E F1<ad>144 640.8 Q F2(n)A F0 -.92(Rotates the stack so that the)180 640.8 R F2(n)3.42 E F0 .92 +(the directory stack.)144 532.8 Q(Ar)5 E(guments, if supplied, ha)-.18 E +.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F2<ad6e>144 +544.8 Q F1 1.811(Suppresses the normal change of directory when rotatin\ +g or adding directories to the)180 544.8 R +(stack, so that only the stack is manipulated.)180 556.8 Q F2(+)144 +568.8 Q F0(n)A F1 1.267(Rotates the stack so that the)180 568.8 R F0(n) +3.767 E F1 1.268(th directory \(counting from the left of the list sho)B +1.268(wn by)-.25 F F2(dirs)180 580.8 Q F1 2.5(,s)C +(tarting with zero\) is at the top.)-2.5 E F2<ad>144 592.8 Q F0(n)A F1 +.92(Rotates the stack so that the)180 592.8 R F0(n)3.42 E F1 .92 (th directory \(counting from the right of the list sho)B .92(wn by)-.25 -F F1(dirs)180 652.8 Q F0 2.5(,s)C(tarting with zero\) is at the top.) --2.5 E F2(dir)144.35 664.8 Q F0(Adds)180 664.8 Q F2(dir)2.85 E F0 +F F2(dirs)180 604.8 Q F1 2.5(,s)C(tarting with zero\) is at the top.) +-2.5 E F0(dir)144.35 616.8 Q F1(Adds)180 616.8 Q F0(dir)2.85 E F1 (to the directory stack at the top)3.23 E .434 -(After the stack has been modi\214ed, if the)144 681.6 R F1<ad6e>2.934 E -F0 .434(option w)2.934 F .435(as not supplied,)-.1 F F1(pushd)2.935 E F0 -.435(uses the)2.935 F F1(cd)2.935 E F0 -.2(bu)2.935 G .435(iltin to).2 F -(change to the directory at the top of the stack.)144 693.6 Q(If the)5 E -F1(cd)2.5 E F0 -.1(fa)2.5 G(ils,).1 E F1(pushd)2.5 E F0 +(After the stack has been modi\214ed, if the)144 633.6 R F2<ad6e>2.934 E +F1 .434(option w)2.934 F .435(as not supplied,)-.1 F F2(pushd)2.935 E F1 +.435(uses the)2.935 F F2(cd)2.935 E F1 -.2(bu)2.935 G .435(iltin to).2 F +(change to the directory at the top of the stack.)144 645.6 Q(If the)5 E +F2(cd)2.5 E F1 -.1(fa)2.5 G(ils,).1 E F2(pushd)2.5 E F1 (returns a non-zero v)2.5 E(alue.)-.25 E 1.78(Otherwise, if no ar)144 -710.4 R 1.78(guments are supplied,)-.18 F F1(pushd)4.28 E F0 1.78 -(returns 0 unless the directory stack is empty)4.28 F(.)-.65 E .881 -(When rotating the directory stack,)144 722.4 R F1(pushd)3.381 E F0 .881 -(returns 0 unless the directory stack is empty or a non-)3.381 F -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(71)185.115 E 0 Cg EP -%%Page: 72 72 +662.4 R 1.78(guments are supplied,)-.18 F F2(pushd)4.28 E F1 1.78 +(returns 0 unless the directory stack is empty)4.28 F(.)-.65 E .092 +(When rotating the directory stack,)144 674.4 R F2(pushd)2.592 E F1 .093 +(returns 0 unless the directory stack is empty or a non-e)2.592 F(x-) +-.15 E(istent directory stack element is speci\214ed.)144 686.4 Q 1.278 +(If the)144 703.2 R F2(pushd)3.778 E F1 1.278 +(command is successful, bash runs)3.778 F F2(dirs)3.778 E F1 1.277 +(to sho)3.777 F 3.777(wt)-.25 G 1.277 +(he \214nal contents of the directory)-3.777 F(stack.)144 715.2 Q +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(73)193.45 E 0 Cg EP +%%Page: 74 74 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.15(ex)144 84 S -(istent directory stack element is speci\214ed.).15 E 1.278(If the)144 -100.8 R/F1 10/Times-Bold@0 SF(pushd)3.778 E F0 1.278 -(command is successful, bash runs)3.778 F F1(dirs)3.778 E F0 1.277 -(to sho)3.777 F 3.777(wt)-.25 G 1.277 -(he \214nal contents of the directory)-3.777 F(stack.)144 112.8 Q F1 -(pwd)108 129.6 Q F0([)2.5 E F1(\255LP)A F0(])A .844 -(Print the absolute pathname of the current w)144 141.6 R .845 -(orking directory)-.1 F 5.845(.T)-.65 G .845 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(pwd)108 84 Q F1([)2.5 E F2 +(\255LP)A F1(])A .844(Print the absolute pathname of the current w)144 +96 R .845(orking directory)-.1 F 5.845(.T)-.65 G .845 (he pathname printed contains no)-5.845 F .182(symbolic links if the)144 -153.6 R F1<ad50>2.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 .181(iltin command is).2 F 3.263 -(enabled. If)144 165.6 R(the)3.263 E F1<ad4c>3.263 E F0 .763 +108 R F2<ad50>2.681 E F1 .181(option is supplied or the)2.681 F F2 .181 +(\255o ph)2.681 F(ysical)-.15 E F1 .181(option to the)2.681 F F2(set) +2.681 E F1 -.2(bu)2.681 G .181(iltin command is).2 F 3.263(enabled. If) +144 120 R(the)3.263 E F2<ad4c>3.263 E F1 .763 (option is used, the pathname printed may contain symbolic links.)3.263 F .764(The return)5.764 F .405(status is 0 unless an error occurs while\ - reading the name of the current directory or an in)144 177.6 R -.25(va) --.4 G .405(lid op-).25 F(tion is supplied.)144 189.6 Q F1 -.18(re)108 -206.4 S(ad).18 E F0([)3.816 E F1(\255ers)A F0 3.816(][)C F1<ad61>-3.816 -E/F2 10/Times-Italic@0 SF(aname)3.816 E F0 3.816(][)C F1<ad64>-3.816 E -F2(delim)3.816 E F0 3.816(][)C F1<ad69>-3.816 E F2(te)3.816 E(xt)-.2 E -F0 3.816(][)C F1<ad6e>-3.816 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.817 -(][)C F1<ad4e>-3.817 E F2(nc)3.817 E(har)-.15 E(s)-.1 E F0 3.817(][)C F1 -<ad70>-3.817 E F2(pr)3.817 E(ompt)-.45 E F0 3.817(][)C F1<ad74>-3.817 E -F2(timeout)3.817 E F0 3.817(][)C F1<ad75>-3.817 E F2(fd)3.817 E F0(])A -([)108 218.4 Q F2(name)A F0(...])2.5 E .516(One line is read from the s\ -tandard input, or from the \214le descriptor)144 230.4 R F2(fd)3.016 E -F0 .516(supplied as an ar)3.016 F .516(gument to)-.18 F(the)144 242.4 Q -F1<ad75>2.935 E F0 .435(option, split into w)2.935 F .435 -(ords as described abo)-.1 F .735 -.15(ve u)-.15 H(nder).15 E F1 -.75 -(Wo)2.935 G .435(rd Splitting).75 F F0 2.935(,a)C .436(nd the \214rst w) --2.935 F .436(ord is as-)-.1 F .376(signed to the \214rst)144 254.4 R F2 -(name)3.236 E F0 2.876(,t).18 G .376(he second w)-2.876 F .376 -(ord to the second)-.1 F F2(name)3.236 E F0 2.876(,a).18 G .376 -(nd so on.)-2.876 F .375(If there are more w)5.376 F(ords)-.1 E .236 -(than names, the remaining w)144 266.4 R .237(ords and their interv)-.1 -F .237(ening delimiters are assigned to the last)-.15 F F2(name)3.097 E -F0 5.237(.I).18 G(f)-5.237 E .875(there are fe)144 278.4 R .875(wer w) --.25 F .875(ords read from the input stream than names, the remaining n\ -ames are assigned)-.1 F .517(empty v)144 290.4 R 3.017(alues. The)-.25 F -.517(characters in)3.017 F/F3 9/Times-Bold@0 SF(IFS)3.017 E F0 .518 -(are used to split the line into w)2.767 F .518 -(ords using the same rules the)-.1 F .027(shell uses for e)144 302.4 R -.026(xpansion \(described abo)-.15 F .326 -.15(ve u)-.15 H(nder).15 E F1 --.75(Wo)2.526 G .026(rd Splitting).75 F F0 2.526(\). The)B .026 -(backslash character \()2.526 F F1(\\)A F0 2.526(\)m)C(ay)-2.526 E .488 -(be used to remo)144 314.4 R .788 -.15(ve a)-.15 H .788 -.15(ny s).15 H + reading the name of the current directory or an in)144 132 R -.25(va) +-.4 G .405(lid op-).25 F(tion is supplied.)144 144 Q F2 -.18(re)108 +160.8 S(ad).18 E F1([)2.5 E F2(\255Eers)A F1 2.5(][)C F2<ad61>-2.5 E F0 +(aname)2.5 E F1 2.5(][)C F2<ad64>-2.5 E F0(delim)2.5 E F1 2.5(][)C F2 +<ad69>-2.5 E F0(te)2.5 E(xt)-.2 E F1 2.5(][)C F2<ad6e>-2.5 E F0(nc)2.5 E +(har)-.15 E(s)-.1 E F1 2.5(][)C F2<ad4e>-2.5 E F0(nc)2.5 E(har)-.15 E(s) +-.1 E F1 2.5(][)C F2<ad70>-2.5 E F0(pr)2.5 E(ompt)-.45 E F1 2.5(][)C F2 +<ad74>-2.5 E F0(timeout)2.5 E F1 2.5(][)C F2<ad75>-2.5 E F0(fd)2.5 E F1 +(])A([)108 172.8 Q F0(name)A F1 1.666(...)2.5 G(])-1.666 E .516(One lin\ +e is read from the standard input, or from the \214le descriptor)144 +184.8 R F0(fd)3.016 E F1 .516(supplied as an ar)3.016 F .517(gument to) +-.18 F(the)144 196.8 Q F2<ad75>2.936 E F1 .436(option, split into w) +2.936 F .435(ords as described abo)-.1 F .735 -.15(ve u)-.15 H(nder).15 +E F2 -.75(Wo)2.935 G .435(rd Splitting).75 F F1 2.935(,a)C .435 +(nd the \214rst w)-2.935 F .435(ord is as-)-.1 F .375 +(signed to the \214rst)144 208.8 R F0(name)3.235 E F1 2.876(,t).18 G +.376(he second w)-2.876 F .376(ord to the second)-.1 F F0(name)3.236 E +F1 2.876(,a).18 G .376(nd so on.)-2.876 F .376(If there are more w)5.376 +F(ords)-.1 E .237(than names, the remaining w)144 220.8 R .237 +(ords and their interv)-.1 F .237 +(ening delimiters are assigned to the last)-.15 F F0(name)3.096 E F1 +5.236(.I).18 G(f)-5.236 E .874(there are fe)144 232.8 R .874(wer w)-.25 +F .875(ords read from the input stream than names, the remaining names \ +are assigned)-.1 F .518(empty v)144 244.8 R 3.018(alues. The)-.25 F .518 +(characters in)3.018 F/F3 9/Times-Bold@0 SF(IFS)3.018 E F1 .518 +(are used to split the line into w)2.768 F .517 +(ords using the same rules the)-.1 F .026(shell uses for e)144 256.8 R +.026(xpansion \(described abo)-.15 F .326 -.15(ve u)-.15 H(nder).15 E F2 +-.75(Wo)2.526 G .026(rd Splitting).75 F F1 2.526(\). The)B .026 +(backslash character \()2.526 F F2(\\)A F1 2.527(\)m)C(ay)-2.527 E .489 +(be used to remo)144 268.8 R .788 -.15(ve a)-.15 H .788 -.15(ny s).15 H .488(pecial meaning for the ne).15 F .488 -(xt character read and for line continuation.)-.15 F(Op-)5.489 E -(tions, if supplied, ha)144 326.4 Q .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F1<ad61>144 338.4 Q F2(aname)2.5 E F0 1.026 -(The w)180 350.4 R 1.026 +(xt character read and for line continuation.)-.15 F(Op-)5.488 E +(tions, if supplied, ha)144 280.8 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F2<ad61>144 292.8 Q F0(aname)2.5 E F1 1.025 +(The w)180 304.8 R 1.026 (ords are assigned to sequential indices of the array v)-.1 F(ariable) --.25 E F2(aname)3.855 E F0 3.525(,s).18 G 1.025(tarting at 0.)-3.525 F -F2(aname)180.33 362.4 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 F1<ad64>144 374.4 Q F2(delim)2.5 E -F0 .28(The \214rst character of)180 386.4 R F2(delim)2.78 E F0 .281 -(is used to terminate the input line, rather than ne)2.78 F 2.781 -(wline. If)-.25 F F2(de-)2.781 E(lim)180 398.4 Q F0 -(is the empty string,)2.5 E F1 -.18(re)2.5 G(ad).18 E F0 -(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F1 -<ad65>144 410.4 Q F0 .373 -(If the standard input is coming from a terminal,)180 410.4 R F1 -.18 -(re)2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.872 E F0(abo) -2.622 E -.15(ve)-.15 G 2.872(\)i).15 G 2.872(su)-2.872 G(sed)-2.872 E -.218(to obtain the line.)180 422.4 R .218 -(Readline uses the current \(or def)5.218 F .218 -(ault, if line editing w)-.1 F .218(as not pre)-.1 F(viously)-.25 E -(acti)180 434.4 Q -.15(ve)-.25 G 2.5(\)e).15 G(diting settings, b)-2.5 E -(ut uses readline')-.2 E 2.5(sd)-.55 G(ef)-2.5 E -(ault \214lename completion.)-.1 E F1<ad69>144 446.4 Q F2(te)2.5 E(xt) --.2 E F0(If)180 446.4 Q F1 -.18(re)2.716 G(adline).18 E F0 .216 -(is being used to read the line,)2.716 F F2(te)2.716 E(xt)-.2 E F0 .216 +-.25 E F0(aname)3.856 E F1 3.526(,s).18 G 1.026(tarting at 0.)-3.526 F +F0(aname)180.33 316.8 Q F1(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 F0(name)2.5 E F1 +(ar)2.5 E(guments are ignored.)-.18 E F2<ad64>144 328.8 Q F0(delim)2.5 E +F1 .281(The \214rst character of)180 340.8 R F0(delim)2.781 E F1 .281 +(is used to terminate the input line, rather than ne)2.781 F 2.78 +(wline. If)-.25 F F0(de-)2.78 E(lim)180 352.8 Q F1(is the empty string,) +2.5 E F2 -.18(re)2.5 G(ad).18 E F1 +(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F2 +<ad65>144 364.8 Q F1 1.761 +(If the standard input is coming from a terminal,)180 364.8 R F2 -.18 +(re)4.262 G(ad).18 E F1(uses)4.262 E F2 -.18(re)4.262 G(adline).18 E F1 +(\(see)4.262 E F3(READLINE)4.262 E F1(abo)180 376.8 Q -.15(ve)-.15 G +3.722(\)t).15 G 3.722(oo)-3.722 G 1.222(btain the line.)-3.722 F 1.222 +(Readline uses the current \(or def)6.222 F 1.222 +(ault, if line editing w)-.1 F 1.222(as not)-.1 F(pre)180 388.8 Q +(viously acti)-.25 E -.15(ve)-.25 G 2.5(\)e).15 G(diting settings, b) +-2.5 E(ut uses readline')-.2 E 2.5(sd)-.55 G(ef)-2.5 E +(ault \214lename completion.)-.1 E F2<ad45>144 400.8 Q F1 1.761 +(If the standard input is coming from a terminal,)180 400.8 R F2 -.18 +(re)4.262 G(ad).18 E F1(uses)4.262 E F2 -.18(re)4.262 G(adline).18 E F1 +(\(see)4.262 E F3(READLINE)4.262 E F1(abo)180 412.8 Q -.15(ve)-.15 G +3.722(\)t).15 G 3.722(oo)-3.722 G 1.222(btain the line.)-3.722 F 1.222 +(Readline uses the current \(or def)6.222 F 1.222 +(ault, if line editing w)-.1 F 1.222(as not)-.1 F(pre)180 424.8 Q .042 +(viously acti)-.25 F -.15(ve)-.25 G 2.542(\)e).15 G .042 +(diting settings, b)-2.542 F .042(ut uses bash')-.2 F 2.542(sd)-.55 G +(ef)-2.542 E .042(ault completion, including program-)-.1 F +(mable completion.)180 436.8 Q F2<ad69>144 448.8 Q F0(te)2.5 E(xt)-.2 E +F1(If)180 448.8 Q F2 -.18(re)2.716 G(adline).18 E F1 .216 +(is being used to read the line,)2.716 F F0(te)2.716 E(xt)-.2 E F1 .216 (is placed into the editing b)2.716 F(uf)-.2 E .215(fer before edit-) --.25 F(ing be)180 458.4 Q(gins.)-.15 E F1<ad6e>144 470.4 Q F2(nc)2.5 E -(har)-.15 E(s)-.1 E F1 -.18(re)180 482.4 S(ad).18 E F0 .322 -(returns after reading)2.822 F F2(nc)2.823 E(har)-.15 E(s)-.1 E F0 .323 +-.25 F(ing be)180 460.8 Q(gins.)-.15 E F2<ad6e>144 472.8 Q F0(nc)2.5 E +(har)-.15 E(s)-.1 E F2 -.18(re)180 484.8 S(ad).18 E F1 .322 +(returns after reading)2.822 F F0(nc)2.823 E(har)-.15 E(s)-.1 E F1 .323 (characters rather than w)2.823 F .323 -(aiting for a complete line of in-)-.1 F(put, b)180 494.4 Q -(ut honors a delimiter if fe)-.2 E(wer than)-.25 E F2(nc)2.5 E(har)-.15 -E(s)-.1 E F0(characters are read before the delimiter)2.5 E(.)-.55 E F1 -<ad4e>144 506.4 Q F2(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 518.4 S -(ad).18 E F0 1.269(returns after reading e)3.77 F(xactly)-.15 E F2(nc) -3.769 E(har)-.15 E(s)-.1 E F0 1.269(characters rather than w)3.769 F +(aiting for a complete line of in-)-.1 F(put, b)180 496.8 Q +(ut honors a delimiter if fe)-.2 E(wer than)-.25 E F0(nc)2.5 E(har)-.15 +E(s)-.1 E F1(characters are read before the delimiter)2.5 E(.)-.55 E F2 +<ad4e>144 508.8 Q F0(nc)2.5 E(har)-.15 E(s)-.1 E F2 -.18(re)180 520.8 S +(ad).18 E F1 1.269(returns after reading e)3.77 F(xactly)-.15 E F0(nc) +3.769 E(har)-.15 E(s)-.1 E F1 1.269(characters rather than w)3.769 F 1.269(aiting for a complete)-.1 F .274 -(line of input, unless EOF is encountered or)180 530.4 R F1 -.18(re) -2.775 G(ad).18 E F0 .275(times out.)2.775 F .275 +(line of input, unless EOF is encountered or)180 532.8 R F2 -.18(re) +2.775 G(ad).18 E F1 .275(times out.)2.775 F .275 (Delimiter characters encoun-)5.275 F 1.003 -(tered in the input are not treated specially and do not cause)180 542.4 -R F1 -.18(re)3.502 G(ad).18 E F0 1.002(to return until)3.502 F F2(nc) -3.502 E(har)-.15 E(s)-.1 E F0 .608(characters are read.)180 554.4 R .608 -(The result is not split on the characters in)5.608 F F1(IFS)3.108 E F0 -3.108(;t)C .609(he intent is that the)-3.108 F -.25(va)180 566.4 S .67 +(tered in the input are not treated specially and do not cause)180 544.8 +R F2 -.18(re)3.502 G(ad).18 E F1 1.002(to return until)3.502 F F0(nc) +3.502 E(har)-.15 E(s)-.1 E F1 .608(characters are read.)180 556.8 R .608 +(The result is not split on the characters in)5.608 F F2(IFS)3.108 E F1 +3.108(;t)C .609(he intent is that the)-3.108 F -.25(va)180 568.8 S .67 (riable is assigned e).25 F .669 (xactly the characters read \(with the e)-.15 F .669 -(xception of backslash; see the)-.15 F F1<ad72>180 578.4 Q F0 -(option belo)2.5 E(w\).)-.25 E F1<ad70>144 590.4 Q F2(pr)2.5 E(ompt)-.45 -E F0(Display)180 602.4 Q F2(pr)3.66 E(ompt)-.45 E F0 1.161 +(xception of backslash; see the)-.15 F F2<ad72>180 580.8 Q F1 +(option belo)2.5 E(w\).)-.25 E F2<ad70>144 592.8 Q F0(pr)2.5 E(ompt)-.45 +E F1(Display)180 604.8 Q F0(pr)3.66 E(ompt)-.45 E F1 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 614.4 Q +-3.661 F 1.161(wline, before attempting to read)-.25 F(an)180 616.8 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 -<ad72>144 626.4 Q F0 .544(Backslash does not act as an escape character) -180 626.4 R 5.543(.T)-.55 G .543 +(prompt is displayed only if input is coming from a terminal.)2.5 E F2 +<ad72>144 628.8 Q F1 .544(Backslash does not act as an escape character) +180 628.8 R 5.543(.T)-.55 G .543 (he backslash is considered to be part of)-5.543 F .492(the line.)180 -638.4 R .492(In particular)5.492 F 2.992(,ab)-.4 G(ackslash-ne)-2.992 E +640.8 R .492(In particular)5.492 F 2.992(,ab)-.4 G(ackslash-ne)-2.992 E .493(wline pair may not then be used as a line continua-)-.25 F(tion.) -180 650.4 Q F1<ad73>144 662.4 Q F0(Silent mode.)180 662.4 Q -(If input is coming from a terminal, characters are not echoed.)5 E F1 -<ad74>144 674.4 Q F2(timeout)2.5 E F0(Cause)180 686.4 Q F1 -.18(re)2.929 -G(ad).18 E F0 .428(to time out and return f)2.929 F .428 +180 652.8 Q F2<ad73>144 664.8 Q F1(Silent mode.)180 664.8 Q +(If input is coming from a terminal, characters are not echoed.)5 E F2 +<ad74>144 676.8 Q F0(timeout)2.5 E F1(Cause)180 688.8 Q F2 -.18(re)2.929 +G(ad).18 E F1 .428(to time out and return f)2.929 F .428 (ailure if a complete line of input \(or a speci\214ed num-)-.1 F .56 -(ber of characters\) is not read within)180 698.4 R F2(timeout)3.061 E -F0(seconds.)3.061 E F2(timeout)5.561 E F0 .561(may be a decimal number) -3.061 F(with a fractional portion follo)180 710.4 Q +(ber of characters\) is not read within)180 700.8 R F0(timeout)3.061 E +F1(seconds.)3.061 E F0(timeout)5.561 E F1 .561(may be a decimal number) +3.061 F(with a fractional portion follo)180 712.8 Q (wing the decimal point.)-.25 E(This option is only ef)5 E(fecti)-.25 E -.3 -.15(ve i)-.25 H(f).15 E F1 -.18(re)2.5 G(ad).18 E F0 .506(is readin\ +.3 -.15(ve i)-.25 H(f).15 E F2 -.18(re)2.5 G(ad).18 E F1 .506(is readin\ g input from a terminal, pipe, or other special \214le; it has no ef)180 -722.4 R .506(fect when reading)-.25 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(72)185.115 E 0 Cg EP -%%Page: 73 73 +724.8 R .505(fect when reading)-.25 F(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(74)193.45 E 0 Cg EP +%%Page: 75 75 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .59(from re)180 84 -R .59(gular \214les.)-.15 F(If)5.59 E/F1 10/Times-Bold@0 SF -.18(re)3.09 -G(ad).18 E F0 .589(times out,)3.09 F F1 -.18(re)3.089 G(ad).18 E F0(sa) -3.089 E -.15(ve)-.2 G 3.089(sa).15 G .889 -.15(ny p)-3.089 H .589 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .589(from re)180 84 R .589(gular \214les.)-.15 F +(If)5.589 E/F2 10/Times-Bold@0 SF -.18(re)3.089 G(ad).18 E F1 .589 +(times out,)3.089 F F2 -.18(re)3.089 G(ad).18 E F1(sa)3.089 E -.15(ve) +-.2 G 3.089(sa).15 G .889 -.15(ny p)-3.089 H .59 (artial input read into the speci\214ed).15 F -.25(va)180 96 S(riable) -.25 E/F2 10/Times-Italic@0 SF(name)2.77 E F0 5.27(.I)C(f)-5.27 E F2 -(timeout)2.77 E F0 .27(is 0,)2.77 F F1 -.18(re)2.77 G(ad).18 E F0 .27 -(returns immediately)2.77 F 2.77(,w)-.65 G .27(ithout trying to read an) --2.77 F 2.77(yd)-.15 G(ata.)-2.77 E .228(The e)180 108 R .228 -(xit status is 0 if input is a)-.15 F -.25(va)-.2 G .228 -(ilable on the speci\214ed \214le descriptor).25 F 2.728(,o)-.4 G 2.727 -(rt)-2.728 G .227(he read will re-)-2.727 F 1.224(turn EOF)180 120 R -3.724(,n)-.8 G 1.224(on-zero otherwise.)-3.724 F 1.224(The e)6.224 F -1.225(xit status is greater than 128 if the timeout is e)-.15 F(x-)-.15 -E(ceeded.)180 132 Q F1<ad75>144 144 Q F2(fd)2.5 E F0 -(Read input from \214le descriptor)180 144 Q F2(fd)2.5 E F0(.)A .522 -(If no)144 160.8 R F2(names)3.382 E F0 .522 +.25 E F0(name)2.77 E F1 5.27(.I)C(f)-5.27 E F0(timeout)2.77 E F1 .27 +(is 0,)2.77 F F2 -.18(re)2.77 G(ad).18 E F1 .27(returns immediately)2.77 +F 2.77(,w)-.65 G .27(ithout trying to read an)-2.77 F 2.77(yd)-.15 G +(ata.)-2.77 E .227(The e)180 108 R .228(xit status is 0 if input is a) +-.15 F -.25(va)-.2 G .228(ilable on the speci\214ed \214le descriptor) +.25 F 2.728(,o)-.4 G 2.728(rt)-2.728 G .228(he read will re-)-2.728 F +1.225(turn EOF)180 120 R 3.725(,n)-.8 G 1.225(on-zero otherwise.)-3.725 +F 1.225(The e)6.225 F 1.225 +(xit status is greater than 128 if the timeout is e)-.15 F(x-)-.15 E +(ceeded.)180 132 Q F2<ad75>144 144 Q F0(fd)2.5 E F1 +(Read input from \214le descriptor)180 144 Q F0(fd)2.5 E F1(.)A +(Other than the case where)144 160.8 Q F0(delim)2.5 E F1 +(is the empty string,)2.5 E F2 -.18(re)2.5 G(ad).18 E F1(ignores an)2.5 +E 2.5(yN)-.15 G(UL characters in the input.)-2.5 E .522(If no)144 177.6 +R F0(names)3.382 E F1 .522 (are supplied, the line read, without the ending delimiter b)3.292 F -.522(ut otherwise unmodi\214ed, is)-.2 F 1.186(assigned to the v)144 -172.8 R(ariable)-.25 E/F3 9/Times-Bold@0 SF(REPL)3.686 E(Y)-.828 E/F4 9 -/Times-Roman@0 SF(.)A F0 1.186(The e)5.686 F 1.186 -(xit status is zero, unless end-of-\214le is encountered,)-.15 F F1 -.18 -(re)3.687 G(ad).18 E F0 .961 +.522(ut otherwise unmodi\214ed, is)-.2 F 1.187(assigned to the v)144 +189.6 R(ariable)-.25 E/F3 9/Times-Bold@0 SF(REPL)3.686 E(Y)-.828 E/F4 9 +/Times-Roman@0 SF(.)A F1 1.186(The e)5.686 F 1.186 +(xit status is zero, unless end-of-\214le is encountered,)-.15 F F2 -.18 +(re)3.686 G(ad).18 E F1 .96 (times out \(in which case the status is greater than 128\), a v)144 -184.8 R .96(ariable assignment error \(such as as-)-.25 F .706 -(signing to a readonly v)144 196.8 R .706(ariable\) occurs, or an in) +201.6 R .961(ariable assignment error \(such as as-)-.25 F .707 +(signing to a readonly v)144 213.6 R .706(ariable\) occurs, or an in) -.25 F -.25(va)-.4 G .706(lid \214le descriptor is supplied as the ar) -.25 F .707(gument to)-.18 F F1<ad75>144 208.8 Q F0(.)A F1 -.18(re)108 -225.6 S(adonly).18 E F0([)2.5 E F1(\255aAf)A F0 2.5(][)C F1<ad70>-2.5 E -F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(wor)A(d)-.37 E F0 2.5(].)C(..]) --2.5 E .77(The gi)144 237.6 R -.15(ve)-.25 G(n).15 E F2(names)3.27 E F0 -.77(are mark)3.27 F .77(ed readonly; the v)-.1 F .77(alues of these)-.25 -F F2(names)3.63 E F0 .77(may not be changed by subse-)3.54 F 1.096 -(quent assignment.)144 249.6 R 1.096(If the)6.096 F F1<ad66>3.596 E F0 -1.097(option is supplied, the functions corresponding to the)3.596 F F2 -(names)3.597 E F0 1.097(are so)3.597 F(mark)144 261.6 Q 3.334(ed. The) --.1 F F1<ad61>3.334 E F0 .834(option restricts the v)3.334 F .834 +.25 F .706(gument to)-.18 F F2<ad75>144 225.6 Q F1(.)A F2 -.18(re)108 +242.4 S(adonly).18 E F1([)2.5 E F2(\255aAf)A F1 2.5(][)C F2<ad70>-2.5 E +F1 2.5(][)C F0(name)-2.5 E F1([=)A F0(wor)A(d)-.37 E F1 2.5(].)C 1.666 +(..)-.834 G(])-1.666 E .77(The gi)144 254.4 R -.15(ve)-.25 G(n).15 E F0 +(names)3.27 E F1 .77(are mark)3.27 F .77(ed readonly; the v)-.1 F .77 +(alues of these)-.25 F F0(names)3.63 E F1 .77 +(may not be changed by subse-)3.54 F 1.097(quent assignment.)144 266.4 R +1.097(If the)6.097 F F2<ad66>3.597 E F1 1.097 +(option is supplied, the functions corresponding to the)3.597 F F0 +(names)3.596 E F1 1.096(are so)3.596 F(mark)144 278.4 Q 3.334(ed. The) +-.1 F F2<ad61>3.334 E F1 .834(option restricts the v)3.334 F .834 (ariables to inde)-.25 F -.15(xe)-.15 G 3.334(da).15 G .834(rrays; the) --3.334 F F1<ad41>3.334 E F0 .834(option restricts the v)3.334 F(ari-) --.25 E .776(ables to associati)144 273.6 R 1.076 -.15(ve a)-.25 H 3.276 -(rrays. If).15 F .777(both options are supplied,)3.276 F F1<ad41>3.277 E -F0(tak)3.277 E .777(es precedence.)-.1 F .777(If no)5.777 F F2(name) -3.637 E F0(ar)3.457 E(gu-)-.18 E .522(ments are gi)144 285.6 R -.15(ve) --.25 G .521(n, or if the).15 F F1<ad70>3.021 E F0 .521 +-3.334 F F2<ad41>3.334 E F1 .834(option restricts the v)3.334 F(ari-) +-.25 E .777(ables to associati)144 290.4 R 1.077 -.15(ve a)-.25 H 3.277 +(rrays. If).15 F .777(both options are supplied,)3.277 F F2<ad41>3.277 E +F1(tak)3.277 E .776(es precedence.)-.1 F .776(If no)5.776 F F0(name) +3.636 E F1(ar)3.456 E(gu-)-.18 E .521(ments are gi)144 302.4 R -.15(ve) +-.25 G .521(n, or if the).15 F F2<ad70>3.021 E F1 .521 (option is supplied, a list of all readonly names is printed.)3.021 F -.521(The other)5.521 F .295(options may be used to restrict the output \ -to a subset of the set of readonly names.)144 297.6 R(The)5.296 E F1 -<ad70>2.796 E F0(option)2.796 E .786 +.522(The other)5.521 F .295(options may be used to restrict the output \ +to a subset of the set of readonly names.)144 314.4 R(The)5.295 E F2 +<ad70>2.795 E F1(option)2.795 E .786 (causes output to be displayed in a format that may be reused as input.) -144 309.6 R .786(If a v)5.786 F .785(ariable name is fol-)-.25 F(lo)144 -321.6 Q .717(wed by =)-.25 F F2(wor)A(d)-.37 E F0 3.218(,t)C .718(he v) --3.218 F .718(alue of the v)-.25 F .718(ariable is set to)-.25 F F2(wor) -3.218 E(d)-.37 E F0 5.718(.T)C .718(he return status is 0 unless an in) +144 326.4 R .786(If a v)5.786 F .786(ariable name is fol-)-.25 F(lo)144 +338.4 Q .718(wed by =)-.25 F F0(wor)A(d)-.37 E F1 3.218(,t)C .718(he v) +-3.218 F .718(alue of the v)-.25 F .718(ariable is set to)-.25 F F0(wor) +3.218 E(d)-.37 E F1 5.718(.T)C .718(he return status is 0 unless an in) -5.718 F -.25(va)-.4 G(lid).25 E .26(option is encountered, one of the) -144 333.6 R F2(names)3.12 E F0 .26(is not a v)3.03 F .26(alid shell v) --.25 F .26(ariable name, or)-.25 F F1<ad66>2.76 E F0 .26 -(is supplied with a)2.76 F F2(name)144.36 345.6 Q F0 -(that is not a function.)2.68 E F1 -.18(re)108 362.4 S(tur).18 E(n)-.15 -E F0([)2.5 E F2(n)A F0(])A .02(Causes a function to stop e)144 374.4 R --.15(xe)-.15 G .02(cuting and return the v).15 F .021 -(alue speci\214ed by)-.25 F F2(n)2.881 E F0 .021(to its caller)2.761 F -5.021(.I)-.55 G(f)-5.021 E F2(n)2.881 E F0 .021(is omitted,)2.761 F .597 -(the return status is that of the last command e)144 386.4 R -.15(xe) --.15 G .596(cuted in the function body).15 F 5.596(.I)-.65 G(f)-5.596 E -F1 -.18(re)3.096 G(tur).18 E(n)-.15 E F0 .596(is e)3.096 F -.15(xe)-.15 -G(cuted).15 E .267(by a trap handler)144 398.4 R 2.767(,t)-.4 G .267 +144 350.4 R F0(names)3.12 E F1 .26(is not a v)3.03 F .26(alid shell v) +-.25 F .26(ariable name, or)-.25 F F2<ad66>2.76 E F1 .26 +(is supplied with a)2.76 F F0(name)144.36 362.4 Q F1 +(that is not a function.)2.68 E F2 -.18(re)108 379.2 S(tur).18 E(n)-.15 +E F1([)2.5 E F0(n)A F1(])A .021(Causes a function to stop e)144 391.2 R +-.15(xe)-.15 G .021(cuting and return the v).15 F .021 +(alue speci\214ed by)-.25 F F0(n)2.88 E F1 .02(to its caller)2.76 F 5.02 +(.I)-.55 G(f)-5.02 E F0(n)2.88 E F1 .02(is omitted,)2.76 F .596 +(the return status is that of the last command e)144 403.2 R -.15(xe) +-.15 G .597(cuted in the function body).15 F 5.597(.I)-.65 G(f)-5.597 E +F2 -.18(re)3.097 G(tur).18 E(n)-.15 E F1 .597(is e)3.097 F -.15(xe)-.15 +G(cuted).15 E .267(by a trap handler)144 415.2 R 2.767(,t)-.4 G .267 (he last command used to determine the status is the last command e) --2.767 F -.15(xe)-.15 G .268(cuted be-).15 F .02(fore the trap handler) -144 410.4 R 5.02(.I)-.55 G(f)-5.02 E F1 -.18(re)2.52 G(tur).18 E(n)-.15 -E F0 .02(is e)2.52 F -.15(xe)-.15 G .02(cuted during a).15 F F1(DEB)2.52 -E(UG)-.1 E F0 .02(trap, the last command used to deter)2.52 F(-)-.2 E -.885(mine the status is the last command e)144 422.4 R -.15(xe)-.15 G -.886(cuted by the trap handler before).15 F F1 -.18(re)3.386 G(tur).18 E -(n)-.15 E F0 -.1(wa)3.386 G 3.386(si).1 G -1.9 -.4(nv o)-3.386 H -.1(ke) -.4 G 3.386(d. If).1 F F1 -.18(re)144 434.4 S(tur).18 E(n)-.15 E F0 .628 -(is used outside a function, b)3.128 F .628(ut during e)-.2 F -.15(xe) --.15 G .628(cution of a script by the).15 F F1(.)3.127 E F0(\()5.627 E -F1(sour)A(ce)-.18 E F0 3.127(\)c)C .627(ommand, it)-3.127 F .588 -(causes the shell to stop e)144 446.4 R -.15(xe)-.15 G .588 -(cuting that script and return either).15 F F2(n)3.448 E F0 .589 -(or the e)3.329 F .589(xit status of the last com-)-.15 F .326(mand e) -144 458.4 R -.15(xe)-.15 G .326(cuted within the script as the e).15 F -.326(xit status of the script.)-.15 F(If)5.326 E F2(n)2.826 E F0 .325 -(is supplied, the return v)2.826 F .325(alue is)-.25 F .444 -(its least signi\214cant 8 bits.)144 470.4 R .444 -(The return status is non-zero if)5.444 F F1 -.18(re)2.945 G(tur).18 E -(n)-.15 E F0 .445(is supplied a non-numeric ar)2.945 F(gu-)-.18 E .381 -(ment, or is used outside a function and not during e)144 482.4 R -.15 -(xe)-.15 G .381(cution of a script by).15 F F1(.)2.881 E F0(or)3.714 E -F1(sour)2.881 E(ce)-.18 E F0 5.38(.A)C .68 -.15(ny c)-5.38 H(om-).15 E -.749(mand associated with the)144 494.4 R F1(RETURN)3.249 E F0 .749 +-2.767 F -.15(xe)-.15 G .267(cuted be-).15 F .02(fore the trap handler) +144 427.2 R 5.02(.I)-.55 G(f)-5.02 E F2 -.18(re)2.52 G(tur).18 E(n)-.15 +E F1 .02(is e)2.52 F -.15(xe)-.15 G .02(cuted during a).15 F F2(DEB)2.52 +E(UG)-.1 E F1 .02(trap, the last command used to deter)2.52 F(-)-.2 E +.886(mine the status is the last command e)144 439.2 R -.15(xe)-.15 G +.886(cuted by the trap handler before).15 F F2 -.18(re)3.385 G(tur).18 E +(n)-.15 E F1 -.1(wa)3.385 G 3.385(si).1 G -1.9 -.4(nv o)-3.385 H -.1(ke) +.4 G 3.385(d. If).1 F F2 -.18(re)144 451.2 S(tur).18 E(n)-.15 E F1 .627 +(is used outside a function, b)3.127 F .628(ut during e)-.2 F -.15(xe) +-.15 G .628(cution of a script by the).15 F F2(.)3.128 E F1(\()5.628 E +F2(sour)A(ce)-.18 E F1 3.128(\)c)C .628(ommand, it)-3.128 F .589 +(causes the shell to stop e)144 463.2 R -.15(xe)-.15 G .589 +(cuting that script and return either).15 F F0(n)3.448 E F1 .588 +(or the e)3.328 F .588(xit status of the last com-)-.15 F .325(mand e) +144 475.2 R -.15(xe)-.15 G .325(cuted within the script as the e).15 F +.326(xit status of the script.)-.15 F(If)5.326 E F0(n)2.826 E F1 .326 +(is supplied, the return v)2.826 F .326(alue is)-.25 F .445 +(its least signi\214cant 8 bits.)144 487.2 R .444 +(The return status is non-zero if)5.445 F F2 -.18(re)2.944 G(tur).18 E +(n)-.15 E F1 .444(is supplied a non-numeric ar)2.944 F(gu-)-.18 E .381 +(ment, or is used outside a function and not during e)144 499.2 R -.15 +(xe)-.15 G .381(cution of a script by).15 F F2(.)2.881 E F1(or)3.714 E +F2(sour)2.881 E(ce)-.18 E F1 5.381(.A)C .681 -.15(ny c)-5.381 H(om-).15 +E .75(mand associated with the)144 511.2 R F2(RETURN)3.249 E F1 .749 (trap is e)3.249 F -.15(xe)-.15 G .749(cuted before e).15 F -.15(xe)-.15 -G .75(cution resumes after the function).15 F(or script.)144 506.4 Q F1 -(set)108 523.2 Q F0([)2.5 E F1(\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1 -<ad6f>-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1<adad>-2.5 E F0 2.5 -(][)C F1<ad>-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E F1 -(set)108 535.2 Q F0([)2.5 E F1(+abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1(+o) --2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1<adad>-2.5 E F0 2.5(][)C F1 -<ad>-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E -.4(Wi)144 -547.2 S .574(thout options, display the name and v).4 F .574 -(alue of each shell v)-.25 F .573 +G .749(cution resumes after the function).15 F(or script.)144 523.2 Q F2 +(set)108 540 Q F1([)2.5 E F2(\255abefhkmnptuvxBCEHPT)A F1 2.5(][)C F2 +<ad6f>-2.5 E F0(option\255name)2.5 E F1 2.5(][)C F2<adad>-2.5 E F1 2.5 +(][)C F2<ad>-2.5 E F1 2.5(][)C F0(ar)-2.5 E(g)-.37 E F1 1.666(...)2.5 G +(])-1.666 E F2(set)108 552 Q F1([)2.5 E F2(+abefhkmnptuvxBCEHPT)A F1 2.5 +(][)C F2(+o)-2.5 E F0(option\255name)2.5 E F1 2.5(][)C F2<adad>-2.5 E F1 +2.5(][)C F2<ad>-2.5 E F1 2.5(][)C F0(ar)-2.5 E(g)-.37 E F1 1.666(...)2.5 +G(])-1.666 E F2(set \255o)108 564 Q(set +o)108 576 Q F1 -.4(Wi)144 576 S +.573(thout options, display the name and v).4 F .573 +(alue of each shell v)-.25 F .574 (ariable in a format that can be reused)-.25 F .113 -(as input for setting or resetting the currently-set v)144 559.2 R 2.613 +(as input for setting or resetting the currently-set v)144 588 R 2.613 (ariables. Read-only)-.25 F -.25(va)2.613 G .113 -(riables cannot be reset.).25 F(In)5.113 E F2 1.032(posix mode)144 571.2 -R F0 3.532(,o)C 1.032(nly shell v)-3.532 F 1.032(ariables are listed.) --.25 F 1.032(The output is sorted according to the current locale.)6.032 -F .58(When options are speci\214ed, the)144 583.2 R 3.081(ys)-.15 G .581 -(et or unset shell attrib)-3.081 F 3.081(utes. An)-.2 F 3.081(ya)-.15 G --.18(rg)-3.081 G .581(uments remaining after op-).18 F .161 -(tion processing are treated as v)144 595.2 R .161 +(riables cannot be reset.).25 F(In)5.112 E F0 1.032(posix mode)144 600 R +F1 3.532(,o)C 1.032(nly shell v)-3.532 F 1.032(ariables are listed.)-.25 +F 1.032(The output is sorted according to the current locale.)6.032 F +.581(When options are speci\214ed, the)144 612 R 3.081(ys)-.15 G .581 +(et or unset shell attrib)-3.081 F 3.081(utes. An)-.2 F 3.08(ya)-.15 G +-.18(rg)-3.08 G .58(uments remaining after op-).18 F .16 +(tion processing are treated as v)144 624 R .161 (alues for the positional parameters and are assigned, in order)-.25 F -2.66(,t)-.4 G(o)-2.66 E F1($1)2.66 E F0(,)A F1($2)144 607.2 Q F0(,)A F1 -2.5(... $)2.5 F F2(n)A F0 5(.O)C(ptions, if speci\214ed, ha)-5 E .3 -.15 -(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad61>144 619.2 Q F0 -1.377(Each v)184 619.2 R 1.377 +2.661(,t)-.4 G(o)-2.661 E F2($1)2.661 E F1(,)A F2($2)144 636 Q F1 2.5 +(,.)C 1.666(..)-.834 G(,)-1.666 E F2($)2.5 E F0(n)A F1 5(.O)C +(ptions, if speci\214ed, ha)-5 E .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F2<ad61>144 648 Q F1 1.378(Each v)184 648 R 1.377 (ariable or function that is created or modi\214ed is gi)-.25 F -.15(ve) --.25 G 3.877(nt).15 G 1.377(he e)-3.877 F 1.378(xport attrib)-.15 F -1.378(ute and)-.2 F(mark)184 631.2 Q(ed for e)-.1 E(xport to the en)-.15 -E(vironment of subsequent commands.)-.4 E F1<ad62>144 643.2 Q F0 .132 -(Report the status of terminated background jobs immediately)184 643.2 R -2.632(,r)-.65 G .131(ather than before the ne)-2.632 F(xt)-.15 E -(primary prompt.)184 655.2 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o) --.25 H(nly when job control is enabled.).15 E F1<ad65>144 667.2 Q F0 -.087(Exit immediately if a)184 667.2 R F2(pipeline)2.587 E F0 .087 -(\(which may consist of a single)2.587 F F2 .088(simple command)2.588 F -F0 .088(\), a)B F2(list)2.588 E F0 2.588(,o)C(r)-2.588 E(a)184 679.2 Q -F2 1.521(compound command)4.021 F F0(\(see)4.021 E F3 1.521 -(SHELL GRAMMAR)4.021 F F0(abo)3.771 E -.15(ve)-.15 G 1.521(\), e).15 F -1.521(xits with a non-zero status.)-.15 F .079(The shell does not e)184 -691.2 R .079(xit if the command that f)-.15 F .08 -(ails is part of the command list immediately)-.1 F(follo)184 703.2 Q -1.655(wing a)-.25 F F1(while)4.155 E F0(or)4.155 E F1(until)4.155 E F0 --.1(ke)4.155 G(yw)-.05 E 1.655(ord, part of the test follo)-.1 F 1.654 -(wing the)-.25 F F1(if)4.154 E F0(or)4.154 E F1(elif)4.154 E F0(reserv) -4.154 E(ed)-.15 E -.1(wo)184 715.2 S .581(rds, part of an).1 F 3.081(yc) --.15 G .581(ommand e)-3.081 F -.15(xe)-.15 G .581(cuted in a).15 F F1 -(&&)3.081 E F0(or)3.081 E F1(||)3.081 E F0 .582(list e)3.082 F .582 -(xcept the command follo)-.15 F(wing)-.25 E .918(the \214nal)184 727.2 R -F1(&&)3.418 E F0(or)3.418 E F1(||)3.418 E F0 3.418(,a)C 1.218 -.15(ny c) --3.418 H .918(ommand in a pipeline b).15 F .917 -(ut the last, or if the command')-.2 F 3.417(sr)-.55 G(eturn)-3.417 E -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(73)185.115 E 0 Cg EP -%%Page: 74 74 +-.25 G 3.877(nt).15 G 1.377(he e)-3.877 F 1.377(xport attrib)-.15 F +1.377(ute and)-.2 F(mark)184 660 Q(ed for e)-.1 E(xport to the en)-.15 E +(vironment of subsequent commands.)-.4 E F2<ad62>144 672 Q F1 .131 +(Report the status of terminated background jobs immediately)184 672 R +2.632(,r)-.65 G .132(ather than before the ne)-2.632 F(xt)-.15 E +(primary prompt.)184 684 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o)-.25 +H(nly when job control is enabled.).15 E F2<ad65>144 696 Q F1 .088 +(Exit immediately if a)184 696 R F0(pipeline)2.588 E F1 .087 +(\(which may consist of a single)2.588 F F0 .087(simple command)2.587 F +F1 .087(\), a)B F0(list)2.587 E F1 2.587(,o)C(r)-2.587 E(a)184 708 Q F0 +1.52(compound command)4.02 F F1(\(see)4.021 E F3 1.521(SHELL GRAMMAR) +4.021 F F1(abo)3.771 E -.15(ve)-.15 G 1.521(\), e).15 F 1.521 +(xits with a non-zero status.)-.15 F .08(The shell does not e)184 720 R +.079(xit if the command that f)-.15 F .079 +(ails is part of the command list immediately)-.1 F(GNU Bash 5.3)72 768 +Q(2024 March 29)144.29 E(75)193.45 E 0 Cg EP +%%Page: 76 76 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.25(va)184 84 S -.66(lue is being in).25 F -.15(ve)-.4 G .66(rted with).15 F/F1 10 -/Times-Bold@0 SF(!)3.16 E F0 5.661(.I)C 3.161(fac)-5.661 G .661 -(ompound command other than a subshell returns a)-3.161 F 1.113 -(non-zero status because a command f)184 96 R 1.112(ailed while)-.1 F F1 -<ad65>3.612 E F0 -.1(wa)3.612 G 3.612(sb).1 G 1.112 -(eing ignored, the shell does)-3.612 F .177(not e)184 108 R 2.677 -(xit. A)-.15 F .177(trap on)2.677 F F1(ERR)2.677 E F0 2.677(,i)C 2.678 -(fs)-2.677 G .178(et, is e)-2.678 F -.15(xe)-.15 G .178 -(cuted before the shell e).15 F 2.678(xits. This)-.15 F .178 -(option applies to)2.678 F .618(the shell en)184 120 R .617 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(follo)184 84 Q 1.654(wing a)-.25 F/F2 10 +/Times-Bold@0 SF(while)4.154 E F1(or)4.154 E F2(until)4.154 E F1 -.1(ke) +4.154 G(yw)-.05 E 1.655(ord, part of the test follo)-.1 F 1.655 +(wing the)-.25 F F2(if)4.155 E F1(or)4.155 E F2(elif)4.155 E F1(reserv) +4.155 E(ed)-.15 E -.1(wo)184 96 S .582(rds, part of an).1 F 3.082(yc) +-.15 G .582(ommand e)-3.082 F -.15(xe)-.15 G .581(cuted in a).15 F F2 +(&&)3.081 E F1(or)3.081 E F2(||)3.081 E F1 .581(list e)3.081 F .581 +(xcept the command follo)-.15 F(wing)-.25 E .917(the \214nal)184 108 R +F2(&&)3.417 E F1(or)3.417 E F2(||)3.417 E F1 3.417(,a)C 1.217 -.15(ny c) +-3.417 H .918(ommand in a pipeline b).15 F .918 +(ut the last, or if the command')-.2 F 3.418(sr)-.55 G(eturn)-3.418 E +-.25(va)184 120 S .661(lue is being in).25 F -.15(ve)-.4 G .661 +(rted with).15 F F2(!)3.161 E F1 5.661(.I)C 3.161(fac)-5.661 G .66 +(ompound command other than a subshell returns a)-3.161 F 1.112 +(non-zero status because a command f)184 132 R 1.112(ailed while)-.1 F +F2<ad65>3.612 E F1 -.1(wa)3.612 G 3.612(sb).1 G 1.113 +(eing ignored, the shell does)-3.612 F .178(not e)184 144 R 2.678 +(xit. A)-.15 F .178(trap on)2.678 F F2(ERR)2.678 E F1 2.678(,i)C 2.678 +(fs)-2.678 G .178(et, is e)-2.678 F -.15(xe)-.15 G .178 +(cuted before the shell e).15 F 2.677(xits. This)-.15 F .177 +(option applies to)2.677 F .617(the shell en)184 156 R .617 (vironment and each subshell en)-.4 F .617(vironment separately \(see) --.4 F/F2 9/Times-Bold@0 SF .617(COMMAND EXE-)3.117 F .642(CUTION ENVIR) -184 132 R(ONMENT)-.27 E F0(abo)2.893 E -.15(ve)-.15 G .643 +-.4 F/F3 9/Times-Bold@0 SF .618(COMMAND EXE-)3.118 F .643(CUTION ENVIR) +184 168 R(ONMENT)-.27 E F1(abo)2.893 E -.15(ve)-.15 G .643 (\), and may cause subshells to e).15 F .643(xit before e)-.15 F -.15 -(xe)-.15 G .643(cuting all).15 F(the commands in the subshell.)184 144 Q -.999(If a compound command or shell function e)184 162 R -.15(xe)-.15 G -.999(cutes in a conte).15 F .998(xt where)-.15 F F1<ad65>3.498 E F0 .998 -(is being ig-)3.498 F .089(nored, none of the commands e)184 174 R -.15 -(xe)-.15 G .089(cuted within the compound command or function body).15 F -.503(will be af)184 186 R .503(fected by the)-.25 F F1<ad65>3.002 E F0 -.502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f)-3.002 E F1 -<ad65>3.002 E F0 .502(is set and a command returns a f)3.002 F .502 -(ailure sta-)-.1 F 4.183(tus. If)184 198 R 4.183(ac)4.183 G 1.683 -(ompound command or shell function sets)-4.183 F F1<ad65>4.184 E F0 -1.684(while e)4.184 F -.15(xe)-.15 G 1.684(cuting in a conte).15 F(xt) --.15 E(where)184 210 Q F1<ad65>3.154 E F0 .654 -(is ignored, that setting will not ha)3.154 F .953 -.15(ve a)-.2 H .953 --.15(ny e).15 H -.25(ff).15 G .653(ect until the compound command).25 F -(or the command containing the function call completes.)184 222 Q F1 -<ad66>144 234 Q F0(Disable pathname e)184 234 Q(xpansion.)-.15 E F1 -<ad68>144 246 Q F0 .988(Remember the location of commands as the)184 246 -R 3.488(ya)-.15 G .988(re look)-3.488 F .988(ed up for e)-.1 F -.15(xe) --.15 G 3.488(cution. This).15 F .988(is en-)3.488 F(abled by def)184 258 -Q(ault.)-.1 E F1<ad6b>144 270 Q F0 .514(All ar)184 270 R .514 +(xe)-.15 G .642(cuting all).15 F(the commands in the subshell.)184 180 Q +.998(If a compound command or shell function e)184 196.8 R -.15(xe)-.15 +G .999(cutes in a conte).15 F .999(xt where)-.15 F F2<ad65>3.499 E F1 +.999(is being ig-)3.499 F .089(nored, none of the commands e)184 208.8 R +-.15(xe)-.15 G .089(cuted within the compound command or function body) +.15 F .502(will be af)184 220.8 R .502(fected by the)-.25 F F2<ad65> +3.002 E F1 .502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f) +-3.002 E F2<ad65>3.002 E F1 .502(is set and a command returns a f)3.002 +F .503(ailure sta-)-.1 F 4.184(tus. If)184 232.8 R 4.184(ac)4.184 G +1.684(ompound command or shell function sets)-4.184 F F2<ad65>4.183 E F1 +1.683(while e)4.183 F -.15(xe)-.15 G 1.683(cuting in a conte).15 F(xt) +-.15 E(where)184 244.8 Q F2<ad65>3.153 E F1 .653 +(is ignored, that setting will not ha)3.153 F .954 -.15(ve a)-.2 H .954 +-.15(ny e).15 H -.25(ff).15 G .654(ect until the compound command).25 F +(or the command containing the function call completes.)184 256.8 Q F2 +<ad66>144 268.8 Q F1(Disable pathname e)184 268.8 Q(xpansion.)-.15 E F2 +<ad68>144 280.8 Q F1 .988(Remember the location of commands as the)184 +280.8 R 3.488(ya)-.15 G .988(re look)-3.488 F .988(ed up for e)-.1 F +-.15(xe)-.15 G 3.488(cution. This).15 F .987(is en-)3.487 F +(abled by def)184 292.8 Q(ault.)-.1 E F2<ad6b>144 304.8 Q F1 .513 +(All ar)184 304.8 R .514 (guments in the form of assignment statements are placed in the en)-.18 -F .513(vironment for a)-.4 F -(command, not just those that precede the command name.)184 282 Q F1 -<ad6d>144 294 Q F0 .148(Monitor mode.)184 294 R .148 -(Job control is enabled.)5.148 F .149(This option is on by def)5.148 F -.149(ault for interacti)-.1 F .449 -.15(ve s)-.25 H(hells).15 E .651 -(on systems that support it \(see)184 306 R F2 .651(JOB CONTR)3.151 F -(OL)-.27 E F0(abo)2.901 E -.15(ve)-.15 G 3.151(\). All).15 F .65 -(processes run in a separate)3.151 F .678(process group.)184 318 R .679 -(When a background job completes, the shell prints a line containing it\ -s)5.678 F -.15(ex)184 330 S(it status.).15 E F1<ad6e>144 342 Q F0 .653 -(Read commands b)184 342 R .653(ut do not e)-.2 F -.15(xe)-.15 G .653 -(cute them.).15 F .652(This may be used to check a shell script for) -5.653 F(syntax errors.)184 354 Q(This is ignored by interacti)5 E .3 --.15(ve s)-.25 H(hells.).15 E F1<ad6f>144 366 Q/F3 10/Times-Italic@0 SF -(option\255name)2.5 E F0(The)184 378 Q F3(option\255name)2.5 E F0 -(can be one of the follo)2.5 E(wing:)-.25 E F1(allexport)184 390 Q F0 -(Same as)224 402 Q F1<ad61>2.5 E F0(.)A F1(braceexpand)184 414 Q F0 -(Same as)224 426 Q F1<ad42>2.5 E F0(.)A F1(emacs)184 438 Q F0 .089 -(Use an emacs-style command line editing interf)224 438 R 2.589 +F .514(vironment for a)-.4 F +(command, not just those that precede the command name.)184 316.8 Q F2 +<ad6d>144 328.8 Q F1 .149(Monitor mode.)184 328.8 R .149 +(Job control is enabled.)5.149 F .148(This option is on by def)5.149 F +.148(ault for interacti)-.1 F .448 -.15(ve s)-.25 H(hells).15 E .65 +(on systems that support it \(see)184 340.8 R F3 .651(JOB CONTR)3.151 F +(OL)-.27 E F1(abo)2.901 E -.15(ve)-.15 G 3.151(\). All).15 F .651 +(processes run in a separate)3.151 F .679(process group.)184 352.8 R +.678(When a background job completes, the shell prints a line containin\ +g its)5.679 F -.15(ex)184 364.8 S(it status.).15 E F2<ad6e>144 376.8 Q +F1 .652(Read commands b)184 376.8 R .652(ut do not e)-.2 F -.15(xe)-.15 +G .652(cute them.).15 F .653 +(This may be used to check a shell script for)5.652 F(syntax errors.)184 +388.8 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15 +E F2<ad6f>144 400.8 Q F0(option\255name)2.5 E F1(The)184 412.8 Q F0 +(option\255name)2.5 E F1(can be one of the follo)2.5 E(wing:)-.25 E F2 +(allexport)184 424.8 Q F1(Same as)224 436.8 Q F2<ad61>2.5 E F1(.)A F2 +(braceexpand)184 448.8 Q F1(Same as)224 460.8 Q F2<ad42>2.5 E F1(.)A F2 +(emacs)184 472.8 Q F1 .089 +(Use an emacs-style command line editing interf)224 472.8 R 2.589 (ace. This)-.1 F .089(is enabled by def)2.589 F(ault)-.1 E .95 -(when the shell is interacti)224 450 R -.15(ve)-.25 G 3.45(,u).15 G .95 -(nless the shell is started with the)-3.45 F F1(\255\255noediting)3.45 E -F0 2.5(option. This)224 462 R(also af)2.5 E(fects the editing interf) --.25 E(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(err) -184 474 Q(exit)-.18 E F0(Same as)224 474 Q F1<ad65>2.5 E F0(.)A F1 -(errtrace)184 486 Q F0(Same as)224 486 Q F1<ad45>2.5 E F0(.)A F1 -(functrace)184 498 Q F0(Same as)224 510 Q F1<ad54>2.5 E F0(.)A F1 -(hashall)184 522 Q F0(Same as)224 522 Q F1<ad68>2.5 E F0(.)A F1 -(histexpand)184 534 Q F0(Same as)224 546 Q F1<ad48>2.5 E F0(.)A F1 -(history)184 558 Q F0 .586(Enable command history)224 558 R 3.087(,a) --.65 G 3.087(sd)-3.087 G .587(escribed abo)-3.087 F .887 -.15(ve u)-.15 -H(nder).15 E F2(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0 SF -(.)A F0 .587(This option is)5.087 F(on by def)224 570 Q -(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184 -582 Q(eeof)-.18 E F0 1.657(The ef)224 594 R 1.657 -(fect is as if the shell command)-.25 F/F5 10/Courier@0 SF(IGNOREEOF=10) -4.156 E F0 1.656(had been e)4.156 F -.15(xe)-.15 G(cuted).15 E(\(see)224 -606 Q F1(Shell V)2.5 E(ariables)-.92 E F0(abo)2.5 E -.15(ve)-.15 G(\).) -.15 E F1 -.1(ke)184 618 S(yw).1 E(ord)-.1 E F0(Same as)224 630 Q F1 -<ad6b>2.5 E F0(.)A F1(monitor)184 642 Q F0(Same as)224 642 Q F1<ad6d>2.5 -E F0(.)A F1(noclob)184 654 Q(ber)-.1 E F0(Same as)224 666 Q F1<ad43>2.5 -E F0(.)A F1(noexec)184 678 Q F0(Same as)224 678 Q F1<ad6e>2.5 E F0(.)A -F1(noglob)184 690 Q F0(Same as)224 690 Q F1<ad66>2.5 E F0(.)A F1(nolog) -184 702 Q F0(Currently ignored.)224 702 Q F1(notify)184 714 Q F0 -(Same as)224 714 Q F1<ad62>2.5 E F0(.)A(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(74)185.115 E 0 Cg EP -%%Page: 75 75 +(when the shell is interacti)224 484.8 R -.15(ve)-.25 G 3.45(,u).15 G +.95(nless the shell is started with the)-3.45 F F2(\255\255noediting) +3.45 E F1 2.5(option. This)224 496.8 R(also af)2.5 E +(fects the editing interf)-.25 E(ace used for)-.1 E F2 -.18(re)2.5 G +(ad \255e).18 E F1(.)A F2(err)184 508.8 Q(exit)-.18 E F1(Same as)224 +508.8 Q F2<ad65>2.5 E F1(.)A F2(errtrace)184 520.8 Q F1(Same as)224 +520.8 Q F2<ad45>2.5 E F1(.)A F2(functrace)184 532.8 Q F1(Same as)224 +544.8 Q F2<ad54>2.5 E F1(.)A F2(hashall)184 556.8 Q F1(Same as)224 556.8 +Q F2<ad68>2.5 E F1(.)A F2(histexpand)184 568.8 Q F1(Same as)224 580.8 Q +F2<ad48>2.5 E F1(.)A F2(history)184 592.8 Q F1 .587 +(Enable command history)224 592.8 R 3.087(,a)-.65 G 3.087(sd)-3.087 G +.587(escribed abo)-3.087 F .887 -.15(ve u)-.15 H(nder).15 E F3(HIST) +3.087 E(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0 SF(.)A F1 .587 +(This option is)5.087 F(on by def)224 604.8 Q(ault in interacti)-.1 E .3 +-.15(ve s)-.25 H(hells.).15 E F2(ignor)184 616.8 Q(eeof)-.18 E F1 .821 +(The ef)224 628.8 R .822 +(fect is as if the shell command \231IGNOREEOF=10\232 had been e)-.25 F +-.15(xe)-.15 G(cuted).15 E(\(see)224 640.8 Q F2(Shell V)2.5 E(ariables) +-.92 E F1(abo)2.5 E -.15(ve)-.15 G(\).).15 E F2 -.1(ke)184 652.8 S(yw).1 +E(ord)-.1 E F1(Same as)224 664.8 Q F2<ad6b>2.5 E F1(.)A F2(monitor)184 +676.8 Q F1(Same as)224 676.8 Q F2<ad6d>2.5 E F1(.)A F2(noclob)184 688.8 +Q(ber)-.1 E F1(Same as)224 700.8 Q F2<ad43>2.5 E F1(.)A(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(76)193.45 E 0 Cg EP +%%Page: 77 77 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(nounset)184 84 Q F0(Same as)224 84 Q F1<ad75>2.5 E F0(.)A F1(onecmd) -184 96 Q F0(Same as)224 96 Q F1<ad74>2.5 E F0(.)A F1(ph)184 108 Q -(ysical)-.15 E F0(Same as)224 108 Q F1<ad50>2.5 E F0(.)A F1(pipefail)184 -120 Q F0 1.029(If set, the return v)224 120 R 1.029 -(alue of a pipeline is the v)-.25 F 1.03 -(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 132 R -1.136 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(noexec)184 84 Q F1(Same as) +224 84 Q F2<ad6e>2.5 E F1(.)A F2(noglob)184 96 Q F1(Same as)224 96 Q F2 +<ad66>2.5 E F1(.)A F2(nolog)184 108 Q F1(Currently ignored.)224 108 Q F2 +(notify)184 120 Q F1(Same as)224 120 Q F2<ad62>2.5 E F1(.)A F2(nounset) +184 132 Q F1(Same as)224 132 Q F2<ad75>2.5 E F1(.)A F2(onecmd)184 144 Q +F1(Same as)224 144 Q F2<ad74>2.5 E F1(.)A F2(ph)184 156 Q(ysical)-.15 E +F1(Same as)224 156 Q F2<ad50>2.5 E F1(.)A F2(pipefail)184 168 Q F1 1.03 +(If set, the return v)224 168 R 1.029(alue of a pipeline is the v)-.25 F +1.029(alue of the last \(rightmost\) com-)-.25 F 1.136(mand to e)224 180 +R 1.136 (xit with a non-zero status, or zero if all commands in the pipeline) --.15 F -.15(ex)224 144 S(it successfully).15 E 5(.T)-.65 G -(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 156 Q F0 -2.09(Change the beha)224 156 R 2.091(vior of)-.2 F F1(bash)4.591 E F0 +-.15 F -.15(ex)224 192 S(it successfully).15 E 5(.T)-.65 G +(his option is disabled by def)-5 E(ault.)-.1 E F2(posix)184 204 Q F1 +2.091(Change the beha)224 204 R 2.091(vior of)-.2 F F2(bash)4.591 E F1 2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091 (fers from the)-.25 F 1.212(POSIX standard to match the standard \()224 -168 R/F2 10/Times-Italic@0 SF 1.212(posix mode)B F0 3.712(\). See)B/F3 9 -/Times-Bold@0 SF 1.212(SEE ALSO)3.712 F F0(belo)3.462 E(w)-.25 E .954 -(for a reference to a document that details ho)224 180 R 3.455(wp)-.25 G -.955(osix mode af)-3.455 F .955(fects bash')-.25 F 3.455(sb)-.55 G(e-) --3.455 E(ha)224 192 Q(vior)-.2 E(.)-.55 E F1(pri)184 204 Q(vileged)-.1 E -F0(Same as)224 216 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 228 S(rbose).1 E -F0(Same as)224 228 Q F1<ad76>2.5 E F0(.)A F1(vi)184 240 Q F0 .209 -(Use a vi-style command line editing interf)224 240 R 2.709(ace. This) --.1 F .209(also af)2.709 F .209(fects the editing in-)-.25 F(terf)224 -252 Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1 -(xtrace)184 264 Q F0(Same as)224 264 Q F1<ad78>2.5 E F0(.)A(If)184 282 Q -F1<ad6f>3.052 E F0 .552(is supplied with no)3.052 F F2(option\255name) -3.053 E F0 3.053(,t)C .553(he v)-3.053 F .553 -(alues of the current options are printed.)-.25 F(If)5.553 E F1(+o)184 -294 Q F0 1.072(is supplied with no)3.572 F F2(option\255name)3.572 E F0 -3.572(,a)C 1.071(series of)-.001 F F1(set)3.571 E F0 1.071 -(commands to recreate the current)3.571 F -(option settings is displayed on the standard output.)184 306 Q F1<ad70> -144 318 Q F0 -.45(Tu)184 318 S 1.071(rn on).45 F F2(privile)4.821 E -.1 -(ge)-.4 G(d).1 E F0 3.572(mode. In)4.341 F 1.072(this mode, the)3.572 F -F3($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)-.27 E F0 1.072 -(\214les are not pro-)3.322 F 1.501 -(cessed, shell functions are not inherited from the en)184 330 R 1.5 -(vironment, and the)-.4 F F3(SHELLOPTS)4 E/F4 9/Times-Roman@0 SF(,)A F3 --.27(BA)184 342 S(SHOPTS).27 E F4(,)A F3(CDP)2.774 E -.855(AT)-.666 G(H) -.855 E F4(,)A F0(and)2.774 E F3(GLOBIGNORE)3.024 E F0 -.25(va)2.774 G -.524(riables, if the).25 F 3.025(ya)-.15 G .525(ppear in the en)-3.025 F -(vironment,)-.4 E .38(are ignored.)184 354 R .38 -(If the shell is started with the ef)5.38 F(fecti)-.25 E .679 -.15(ve u) --.25 H .379(ser \(group\) id not equal to the real).15 F .461 -(user \(group\) id, and the)184 366 R F1<ad70>2.961 E F0 .461 -(option is not supplied, these actions are tak)2.961 F .462 -(en and the ef)-.1 F(fec-)-.25 E(ti)184 378 Q .695 -.15(ve u)-.25 H .395 -(ser id is set to the real user id.).15 F .395(If the)5.395 F F1<ad70> -2.895 E F0 .394(option is supplied at startup, the ef)2.895 F(fecti)-.25 -E -.15(ve)-.25 G .386(user id is not reset.)184 390 R -.45(Tu)5.386 G -.386(rning this option of).45 F 2.886(fc)-.25 G .387(auses the ef)-2.886 -F(fecti)-.25 E .687 -.15(ve u)-.25 H .387(ser and group ids to be).15 F -(set to the real user and group ids.)184 402 Q F1<ad72>144 414 Q F0 -(Enable restricted shell mode.)184 414 Q -(This option cannot be unset once it has been set.)5 E F1<ad74>144 426 Q -F0(Exit after reading and e)184 426 Q -.15(xe)-.15 G -(cuting one command.).15 E F1<ad75>144 438 Q F0 -.35(Tr)184 438 S .774 -(eat unset v).35 F .773(ariables and parameters other than the special \ -parameters "@" and "*", or)-.25 F .459(array v)184 450 R .459(ariables \ -subscripted with "@" or "*", as an error when performing parameter e) --.25 F(x-)-.15 E 2.891(pansion. If)184 462 R -.15(ex)2.891 G .391 -(pansion is attempted on an unset v).15 F .391(ariable or parameter)-.25 -F 2.89(,t)-.4 G .39(he shell prints an)-2.89 F -(error message, and, if not interacti)184 474 Q -.15(ve)-.25 G 2.5(,e) -.15 G(xits with a non-zero status.)-2.65 E F1<ad76>144 486 Q F0 -(Print shell input lines as the)184 486 Q 2.5(ya)-.15 G(re read.)-2.5 E -F1<ad78>144 498 Q F0 .315(After e)184 498 R .315(xpanding each)-.15 F F2 -.315(simple command)2.815 F F0(,)A F1 -.25(fo)2.815 G(r).25 E F0 -(command,)2.815 E F1(case)2.815 E F0(command,)2.815 E F1(select)2.815 E -F0(command,)2.815 E 1.236(or arithmetic)184 510 R F1 -.25(fo)3.736 G(r) -.25 E F0 1.236(command, display the e)3.736 F 1.236(xpanded v)-.15 F -1.236(alue of)-.25 F F3(PS4)3.736 E F4(,)A F0(follo)3.486 E 1.236 -(wed by the com-)-.25 F(mand and its e)184 522 Q(xpanded ar)-.15 E -(guments or associated w)-.18 E(ord list.)-.1 E F1<ad42>144 534 Q F0 -1.205(The shell performs brace e)184 534 R 1.205(xpansion \(see)-.15 F -F1 1.205(Brace Expansion)3.705 F F0(abo)3.705 E -.15(ve)-.15 G 3.706 -(\). This).15 F 1.206(is on by de-)3.706 F -.1(fa)184 546 S(ult.).1 E F1 -<ad43>144 558 Q F0 .214(If set,)184 558 R F1(bash)2.714 E F0 .214 -(does not o)2.714 F -.15(ve)-.15 G .214(rwrite an e).15 F .214 -(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0 -2.713(,a)C(nd)-2.713 E F1(<>)2.713 E F0 .213(redirection opera-)2.713 F -3.053(tors. This)184 570 R .553(may be o)3.053 F -.15(ve)-.15 G .553 +216 R F0 1.212(posix mode)B F1 3.712(\). See)B/F3 9/Times-Bold@0 SF +1.212(SEE ALSO)3.712 F F1(belo)3.463 E(w)-.25 E .955 +(for a reference to a document that details ho)224 228 R 3.454(wp)-.25 G +.954(osix mode af)-3.454 F .954(fects bash')-.25 F 3.454(sb)-.55 G(e-) +-3.454 E(ha)224 240 Q(vior)-.2 E(.)-.55 E F2(pri)184 252 Q(vileged)-.1 E +F1(Same as)224 264 Q F2<ad70>2.5 E F1(.)A F2 -.1(ve)184 276 S(rbose).1 E +F1(Same as)224 276 Q F2<ad76>2.5 E F1(.)A F2(vi)184 288 Q F1 .209 +(Use a vi-style command line editing interf)224 288 R 2.709(ace. This) +-.1 F .209(also af)2.709 F .21(fects the editing in-)-.25 F(terf)224 300 +Q(ace used for)-.1 E F2 -.18(re)2.5 G(ad \255e).18 E F1(.)A F2(xtrace) +184 312 Q F1(Same as)224 312 Q F2<ad78>2.5 E F1(.)A(If)184 324 Q F2 +<ad6f>2.766 E F1 .266(is supplied with no)2.766 F F0(option\255name) +2.765 E F1(,)A F2(set)2.765 E F1 .265 +(prints the current shell option settings.)2.765 F(If)5.265 E F2(+o) +2.765 E F1 .078(is supplied with no)184 336 R F0(option\255name)2.578 E +F1(,)A F2(set)2.578 E F1 .079(prints a series of)2.579 F F2(set)2.579 E +F1 .079(commands to recreate the cur)2.579 F(-)-.2 E +(rent option settings on the standard output.)184 348 Q F2<ad70>144 360 +Q F1 -.45(Tu)184 360 S 2.629(rn on).45 F F0(privile)6.378 E -.1(ge)-.4 G +(d).1 E F1 5.128(mode. In)5.898 F 2.628(this mode, the)5.128 F F3($ENV) +5.128 E F1(and)4.878 E F3($B)5.128 E(ASH_ENV)-.27 E F1 2.628 +(\214les are not)4.878 F .289 +(processed, shell functions are not inherited from the en)184 372 R .289 +(vironment, and the)-.4 F F3(SHELLOPTS)2.789 E/F4 9/Times-Roman@0 SF(,)A +F3 -.27(BA)184 384 S(SHOPTS).27 E F4(,)A F3(CDP)2.775 E -.855(AT)-.666 G +(H).855 E F4(,)A F1(and)2.775 E F3(GLOBIGNORE)3.025 E F1 -.25(va)2.775 G +.524(riables, if the).25 F 3.024(ya)-.15 G .524(ppear in the en)-3.024 F +(vironment,)-.4 E .379(are ignored.)184 396 R .379 +(If the shell is started with the ef)5.379 F(fecti)-.25 E .679 -.15 +(ve u)-.25 H .38(ser \(group\) id not equal to the real).15 F .462 +(user \(group\) id, and the)184 408 R F2<ad70>2.961 E F1 .461 +(option is not supplied, these actions are tak)2.961 F .461 +(en and the ef)-.1 F(fec-)-.25 E(ti)184 420 Q .694 -.15(ve u)-.25 H .394 +(ser id is set to the real user id.).15 F .395(If the)5.395 F F2<ad70> +2.895 E F1 .395(option is supplied at startup, the ef)2.895 F(fecti)-.25 +E -.15(ve)-.25 G .387(user id is not reset.)184 432 R -.45(Tu)5.387 G +.387(rning this option of).45 F 2.886(fc)-.25 G .386(auses the ef)-2.886 +F(fecti)-.25 E .686 -.15(ve u)-.25 H .386(ser and group ids to be).15 F +(set to the real user and group ids.)184 444 Q F2<ad72>144 456 Q F1 +(Enable restricted shell mode.)184 456 Q +(This option cannot be unset once it has been set.)5 E F2<ad74>144 468 Q +F1(Exit after reading and e)184 468 Q -.15(xe)-.15 G +(cuting one command.).15 E F2<ad75>144 480 Q F1 -.35(Tr)184 480 S .662 +(eat unset v).35 F .662(ariables and parameters other than the special \ +parameters \231@\232 and \231*\232, or)-.25 F .349(array v)184 492 R +.348(ariables subscripted with \231@\232 or \231*\232, as an error when\ + performing parameter e)-.25 F(x-)-.15 E 2.89(pansion. If)184 504 R -.15 +(ex)2.89 G .391(pansion is attempted on an unset v).15 F .391 +(ariable or parameter)-.25 F 2.891(,t)-.4 G .391(he shell prints an) +-2.891 F(error message, and, if not interacti)184 516 Q -.15(ve)-.25 G +2.5(,e).15 G(xits with a non-zero status.)-2.65 E F2<ad76>144 528 Q F1 +(Print shell input lines as the)184 528 Q 2.5(ya)-.15 G(re read.)-2.5 E +F2<ad78>144 540 Q F1 .315(After e)184 540 R .315(xpanding each)-.15 F F0 +.315(simple command)2.815 F F1(,)A F2 -.25(fo)2.815 G(r).25 E F1 +(command,)2.815 E F2(case)2.815 E F1(command,)2.815 E F2(select)2.815 E +F1(command,)2.815 E 1.235(or arithmetic)184 552 R F2 -.25(fo)3.736 G(r) +.25 E F1 1.236(command, display the e)3.736 F 1.236(xpanded v)-.15 F +1.236(alue of)-.25 F F3(PS4)3.736 E F4(,)A F1(follo)3.486 E 1.236 +(wed by the com-)-.25 F(mand and its e)184 564 Q(xpanded ar)-.15 E +(guments or associated w)-.18 E(ord list, to standard error)-.1 E(.)-.55 +E F2<ad42>144 576 Q F1 1.206(The shell performs brace e)184 576 R 1.206 +(xpansion \(see)-.15 F F2 1.205(Brace Expansion)3.705 F F1(abo)3.705 E +-.15(ve)-.15 G 3.705(\). This).15 F 1.205(is on by de-)3.705 F -.1(fa) +184 588 S(ult.).1 E F2<ad43>144 600 Q F1 .213(If set,)184 600 R F2(bash) +2.713 E F1 .213(does not o)2.713 F -.15(ve)-.15 G .214(rwrite an e).15 F +.214(xisting \214le with the)-.15 F F2(>)2.714 E F1(,)A F2(>&)2.714 E F1 +2.714(,a)C(nd)-2.714 E F2(<>)2.714 E F1 .214(redirection opera-)2.714 F +3.054(tors. This)184 612 R .553(may be o)3.053 F -.15(ve)-.15 G .553 (rridden when creating output \214les by using the redirection opera-) -.15 F(tor)184 582 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1 -<ad45>144 594 Q F0 .104(If set, an)184 594 R 2.604(yt)-.15 G .104 -(rap on)-2.604 F F1(ERR)2.604 E F0 .103 -(is inherited by shell functions, command substitutions, and com-)2.604 -F .838(mands e)184 606 R -.15(xe)-.15 G .838(cuted in a subshell en).15 -F 3.338(vironment. The)-.4 F F1(ERR)3.338 E F0 .839 -(trap is normally not inherited in)3.339 F(such cases.)184 618 Q F1 -<ad48>144 630 Q F0(Enable)184 630 Q F1(!)3.032 E F0 .532 -(style history substitution.)5.532 F .531(This option is on by def)5.532 -F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 642 Q -.15 -(ve)-.25 G(.).15 E F1<ad50>144 654 Q F0 .959 -(If set, the shell does not resolv)184 654 R 3.459(es)-.15 G .959 -(ymbolic links when e)-3.459 F -.15(xe)-.15 G .96 -(cuting commands such as).15 F F1(cd)3.46 E F0 1.453 -(that change the current w)184 666 R 1.453(orking directory)-.1 F 6.453 -(.I)-.65 G 3.952(tu)-6.453 G 1.452(ses the ph)-3.952 F 1.452 -(ysical directory structure in-)-.05 F 3.334(stead. By)184 678 R(def) -3.334 E(ault,)-.1 E F1(bash)3.334 E F0(follo)3.334 E .834 -(ws the logical chain of directories when performing com-)-.25 F -(mands which change the current directory)184 690 Q(.)-.65 E F1<ad54>144 -702 Q F0 .89(If set, an)184 702 R 3.39(yt)-.15 G .89(raps on)-3.39 F F1 -(DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89 -(are inherited by shell functions, command)3.39 F 1.932 -(substitutions, and commands e)184 714 R -.15(xe)-.15 G 1.932 -(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E -(UG)-.1 E F0(and)4.432 E F1(RETURN)184 726 Q F0 -(traps are normally not inherited in such cases.)2.5 E(GNU Bash 5.2)72 -768 Q(2022 September 19)135.955 E(75)185.115 E 0 Cg EP -%%Page: 76 76 +.15 F(tor)184 624 Q F2(>|)2.5 E F1(instead of)2.5 E F2(>)2.5 E F1(.)A F2 +<ad45>144 636 Q F1 .103(If set, an)184 636 R 2.603(yt)-.15 G .103 +(rap on)-2.603 F F2(ERR)2.603 E F1 .104 +(is inherited by shell functions, command substitutions, and com-)2.603 +F .839(mands e)184 648 R -.15(xe)-.15 G .839(cuted in a subshell en).15 +F 3.339(vironment. The)-.4 F F2(ERR)3.338 E F1 .838 +(trap is normally not inherited in)3.338 F(such cases.)184 660 Q F2 +<ad48>144 672 Q F1(Enable)184 672 Q F2(!)3.031 E F1 .531 +(style history substitution.)5.531 F .531(This option is on by def)5.531 +F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 684 Q -.15 +(ve)-.25 G(.).15 E F2<ad50>144 696 Q F1 .96 +(If set, the shell does not resolv)184 696 R 3.459(es)-.15 G .959 +(ymbolic links when e)-3.459 F -.15(xe)-.15 G .959 +(cuting commands such as).15 F F2(cd)3.459 E F1 1.452 +(that change the current w)184 708 R 1.452(orking directory)-.1 F 6.452 +(.I)-.65 G 3.953(tu)-6.452 G 1.453(ses the ph)-3.953 F 1.453 +(ysical directory structure in-)-.05 F 5.506(stead. By)184 720 R(def) +5.506 E(ault,)-.1 E F2(bash)5.506 E F1(follo)5.506 E 3.005 +(ws the logical chain of directories when performing)-.25 F +(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(77)193.45 E 0 Cg EP +%%Page: 78 78 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF<adad>144 84 Q F0 .401(If no ar)184 84 R .401(guments follo)-.18 F -2.901(wt)-.25 G .401 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(commands which change the current directory)184 84 +Q(.)-.65 E/F2 10/Times-Bold@0 SF<ad54>144 96 Q F1 .89(If set, an)184 96 +R 3.39(yt)-.15 G .89(raps on)-3.39 F F2(DEB)3.39 E(UG)-.1 E F1(and)3.39 +E F2(RETURN)3.39 E F1 .89(are inherited by shell functions, command)3.39 +F 1.932(substitutions, and commands e)184 108 R -.15(xe)-.15 G 1.932 +(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F2(DEB)4.432 E +(UG)-.1 E F1(and)4.432 E F2(RETURN)184 120 Q F1 +(traps are normally not inherited in such cases.)2.5 E F2<adad>144 132 Q +F1 .4(If no ar)184 132 R .401(guments follo)-.18 F 2.901(wt)-.25 G .401 (his option, then the positional parameters are unset.)-2.901 F -(Otherwise,)5.4 E(the positional parameters are set to the)184 96 Q/F2 -10/Times-Italic@0 SF(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni) -.15 G 2.5(fs)-2.5 G(ome of them be)-2.5 E(gin with a)-.15 E F1<ad>2.5 E -F0(.)A F1<ad>144 108 Q F0 .796 -(Signal the end of options, cause all remaining)184 108 R F2(ar)3.297 E -(g)-.37 E F0 3.297(st)C 3.297(ob)-3.297 G 3.297(ea)-3.297 G .797 -(ssigned to the positional pa-)-3.297 F 3.022(rameters. The)184 120 R F1 -<ad78>3.022 E F0(and)3.022 E F1<ad76>3.022 E F0 .522 +(Otherwise,)5.401 E(the positional parameters are set to the)184 144 Q +F0(ar)2.5 E(g)-.37 E F1(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G +(ome of them be)-2.5 E(gin with a)-.15 E F2<ad>2.5 E F1(.)A F2<ad>144 +156 Q F1 .279(Signal the end of options, cause all remaining)184 156 R +F0(ar)2.779 E(g)-.37 E F1 2.779(st)C 2.779(ob)-2.779 G 2.778(ea)-2.779 G +.278(ssigned to the positional para-)-2.778 F 3.021(meters. The)184 168 +R F2<ad78>3.021 E F1(and)3.022 E F2<ad76>3.022 E F1 .522 (options are turned of)3.022 F 3.022(f. If)-.25 F .522(there are no) -3.022 F F2(ar)3.022 E(g)-.37 E F0 .521(s, the positional pa-)B -(rameters remain unchanged.)184 132 Q .425(The options are of)144 148.8 -R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425 +3.022 F F0(ar)3.022 E(g)-.37 E F1 .522(s, the positional para-)B +(meters remain unchanged.)184 180 Q .425(The options are of)144 196.8 R +2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425 (ault unless otherwise noted.)-.1 F .425 -(Using + rather than \255 causes these options)5.425 F .178 -(to be turned of)144 160.8 R 2.678(f. The)-.25 F .178 +(Using + rather than \255 causes these options)5.425 F .177 +(to be turned of)144 208.8 R 2.677(f. The)-.25 F .178 (options can also be speci\214ed as ar)2.678 F .178(guments to an in) --.18 F -.2(vo)-.4 G .177(cation of the shell.).2 F(The)5.177 E .066 -(current set of options may be found in)144 172.8 R F1<24ad>2.566 E F0 +-.18 F -.2(vo)-.4 G .178(cation of the shell.).2 F(The)5.178 E .066 +(current set of options may be found in)144 220.8 R F2<24ad>2.566 E F1 5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066 -(ys true unless an in).1 F -.25(va)-.4 G .067(lid option).25 F -(is encountered.)144 184.8 Q F1(shift)108 201.6 Q F0([)2.5 E F2(n)A F0 -(])A .429(The positional parameters from)144 213.6 R F2(n)2.929 E F0 -.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.428 G -.428(rameters represented by the num-).15 F(bers)144 225.6 Q F1($#)2.582 -E F0(do)2.582 E .082(wn to)-.25 F F1($#)2.582 E F0<ad>A F2(n)A F0 .082 -(+1 are unset.)B F2(n)5.442 E F0 .082(must be a non-ne)2.822 F -.05(ga) --.15 G(ti).05 E .383 -.15(ve n)-.25 H .083(umber less than or equal to) -.15 F F1($#)2.583 E F0 5.083(.I)C(f)-5.083 E F2(n)2.943 E F0 .06 -(is 0, no parameters are changed.)144 237.6 R(If)5.06 E F2(n)2.92 E F0 -.06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F -(If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56 -(,t)C(he)-2.56 E .143(positional parameters are not changed.)144 249.6 R -.144(The return status is greater than zero if)5.143 F F2(n)3.004 E F0 -.144(is greater than)2.884 F F1($#)2.644 E F0 -(or less than zero; otherwise 0.)144 261.6 Q F1(shopt)108 278.4 Q F0([) -2.5 E F1(\255pqsu)A F0 2.5(][)C F1<ad6f>-2.5 E F0 2.5(][)C F2(optname) --2.5 E F0(...])2.5 E -.8(To)144 290.4 S .64(ggle the v).8 F .639 -(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E -5.639(.T)-.55 G .639(he settings can be either those)-5.639 F .374 -(listed belo)144 302.4 R 1.674 -.65(w, o)-.25 H 1.174 -.4(r, i).65 H -2.874(ft).4 G(he)-2.874 E F1<ad6f>2.874 E F0 .375 +(ys true unless an in).1 F -.25(va)-.4 G .066(lid option).25 F +(is encountered.)144 232.8 Q F2(shift)108 249.6 Q F1([)2.5 E F0(n)A F1 +(])A 1.669(The positional parameters from)144 261.6 R F0(n)4.169 E F1 +1.67(+1 .)B -1.662 1.666(.. a)1.666 H 1.67(re renamed to)-1.666 F F2 +1.67($1 .)4.17 F 1.666(..)1.666 G(.)-1.666 E F1 -.15(Pa)6.67 G 1.67 +(rameters represented by the).15 F(numbers)144 273.6 Q F2($#)2.702 E F1 +(do)2.702 E .202(wn to)-.25 F F2($#)2.702 E F1<ad>A F0(n)A F1 .202 +(+1 are unset.)B F0(n)5.562 E F1 .202(must be a non-ne)2.942 F -.05(ga) +-.15 G(ti).05 E .502 -.15(ve n)-.25 H .201(umber less than or equal to) +.15 F F2($#)2.701 E F1(.)A(If)144 285.6 Q F0(n)3.461 E F1 .601 +(is 0, no parameters are changed.)3.341 F(If)5.602 E F0(n)3.462 E F1 +.602(is not gi)3.342 F -.15(ve)-.25 G .602(n, it is assumed to be 1.).15 +F(If)5.602 E F0(n)3.462 E F1 .602(is greater than)3.342 F F2($#)144 +297.6 Q F1 2.791(,t)C .291(he positional parameters are not changed.) +-2.791 F .29(The return status is greater than zero if)5.291 F F0(n)3.15 +E F1 .29(is greater)3.03 F(than)144 309.6 Q F2($#)2.5 E F1 +(or less than zero; otherwise 0.)2.5 E F2(shopt)108 326.4 Q F1([)2.5 E +F2(\255pqsu)A F1 2.5(][)C F2<ad6f>-2.5 E F1 2.5(][)C F0(optname)-2.5 E +F1 1.666(...)2.5 G(])-1.666 E -.8(To)144 338.4 S .639(ggle the v).8 F +.639(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E +5.639(.T)-.55 G .64(he settings can be either those)-5.639 F .375 +(listed belo)144 350.4 R 1.675 -.65(w, o)-.25 H 1.175 -.4(r, i).65 H +2.875(ft).4 G(he)-2.875 E F2<ad6f>2.875 E F1 .375 (option is used, those a)2.875 F -.25(va)-.2 G .375(ilable with the).25 -F F1<ad6f>2.875 E F0 .375(option to the)2.875 F F1(set)2.875 E F0 -.2 -(bu)2.875 G .375(iltin com-).2 F 2.566(mand. W)144 314.4 R .066 -(ith no options, or with the)-.4 F F1<ad70>2.566 E F0 .066 +F F2<ad6f>2.875 E F1 .374(option to the)2.875 F F2(set)2.874 E F1 -.2 +(bu)2.874 G .374(iltin com-).2 F 2.565(mand. W)144 362.4 R .065 +(ith no options, or with the)-.4 F F2<ad70>2.566 E F1 .066 (option, a list of all settable options is displayed, with an in-)2.566 -F .074(dication of whether or not each is set; if)144 326.4 R F2 -(optnames)2.574 E F0 .074 +F .074(dication of whether or not each is set; if)144 374.4 R F0 +(optnames)2.574 E F1 .074 (are supplied, the output is restricted to those op-)2.574 F 3.105 -(tions. The)144 338.4 R F1<ad70>3.105 E F0 .605(option causes output to\ +(tions. The)144 386.4 R F2<ad70>3.105 E F1 .605(option causes output to\ be displayed in a form that may be reused as input.)3.105 F(Other)5.605 -E(options ha)144 350.4 Q .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F1<ad73>144 362.4 Q F0(Enable \(set\) each)180 -362.4 Q F2(optname)2.5 E F0(.)A F1<ad75>144 374.4 Q F0 -(Disable \(unset\) each)180 374.4 Q F2(optname)2.5 E F0(.)A F1<ad71>144 -386.4 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\ -tus indicates whether the)180 386.4 R F2(optname)2.504 E F0(is)2.504 E -.256(set or unset.)180 398.4 R .256(If multiple)5.256 F F2(optname)2.756 -E F0(ar)2.756 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G -(ith)-2.756 E F1<ad71>2.756 E F0 2.755(,t)C .255 -(he return status is zero if)-2.755 F(all)180 410.4 Q F2(optnames)2.5 E -F0(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 422.4 Q F0 -(Restricts the v)180 422.4 Q(alues of)-.25 E F2(optname)2.5 E F0 -(to be those de\214ned for the)2.5 E F1<ad6f>2.5 E F0(option to the)2.5 -E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .624(If either)144 439.2 R F1 -<ad73>3.124 E F0(or)3.124 E F1<ad75>3.124 E F0 .624(is used with no) -3.124 F F2(optname)3.124 E F0(ar)3.124 E(guments,)-.18 E F1(shopt)3.124 -E F0(sho)3.124 E .624(ws only those options which are)-.25 F .984 -(set or unset, respecti)144 451.2 R -.15(ve)-.25 G(ly).15 E 5.984(.U) --.65 G .984(nless otherwise noted, the)-5.984 F F1(shopt)3.484 E F0 .983 -(options are disabled \(unset\) by de-)3.483 F -.1(fa)144 463.2 S(ult.) -.1 E 1.544(The return status when listing options is zero if all)144 480 -R F2(optnames)4.044 E F0 1.545(are enabled, non-zero otherwise.)4.045 F +E(options ha)144 398.4 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F2<ad73>144 410.4 Q F1(Enable \(set\) each)180 +410.4 Q F0(optname)2.5 E F1(.)A F2<ad75>144 422.4 Q F1 +(Disable \(unset\) each)180 422.4 Q F0(optname)2.5 E F1(.)A F2<ad71>144 +434.4 Q F1 .003(Suppresses normal output \(quiet mode\); the return sta\ +tus indicates whether the)180 434.4 R F0(optname)2.503 E F1(is)2.503 E +.255(set or unset.)180 446.4 R .255(If multiple)5.255 F F0(optname)2.755 +E F1(ar)2.755 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G +(ith)-2.756 E F2<ad71>2.756 E F1 2.756(,t)C .256 +(he return status is zero if)-2.756 F(all)180 458.4 Q F0(optnames)2.5 E +F1(are enabled; non-zero otherwise.)2.5 E F2<ad6f>144 470.4 Q F1 +(Restricts the v)180 470.4 Q(alues of)-.25 E F0(optname)2.5 E F1 +(to be those de\214ned for the)2.5 E F2<ad6f>2.5 E F1(option to the)2.5 +E F2(set)2.5 E F1 -.2(bu)2.5 G(iltin.).2 E .625(If either)144 487.2 R F2 +<ad73>3.125 E F1(or)3.124 E F2<ad75>3.124 E F1 .624(is used with no) +3.124 F F0(optname)3.124 E F1(ar)3.124 E(guments,)-.18 E F2(shopt)3.124 +E F1(sho)3.124 E .624(ws only those options which are)-.25 F .983 +(set or unset, respecti)144 499.2 R -.15(ve)-.25 G(ly).15 E 5.983(.U) +-.65 G .983(nless otherwise noted, the)-5.983 F F2(shopt)3.484 E F1 .984 +(options are disabled \(unset\) by de-)3.484 F -.1(fa)144 511.2 S(ult.) +.1 E 1.544(The return status when listing options is zero if all)144 528 +R F0(optnames)4.044 E F1 1.544(are enabled, non-zero otherwise.)4.044 F .696 (When setting or unsetting options, the return status is zero unless an) -144 492 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .695(alid shell) --.25 F(option.)144 504 Q(The list of)144 520.8 Q F1(shopt)2.5 E F0 -(options is:)2.5 E F1(assoc_expand_once)144 538.8 Q F0 1.944 -(If set, the shell suppresses multiple e)184 550.8 R -.25(va)-.25 G -1.945(luation of associati).25 F 2.245 -.15(ve a)-.25 H 1.945 -(rray subscripts during).15 F .885(arithmetic e)184 562.8 R .885 -(xpression e)-.15 F -.25(va)-.25 G .885(luation, while e).25 F -.15(xe) --.15 G .885(cuting b).15 F .885(uiltins that can perform v)-.2 F .885 -(ariable as-)-.25 F(signments, and while e)184 574.8 Q -.15(xe)-.15 G -(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E F1 -(autocd)144 586.8 Q F0 .199 -(If set, a command name that is the name of a directory is e)184 586.8 R --.15(xe)-.15 G .2(cuted as if it were the ar).15 F(gu-)-.18 E -(ment to the)184 598.8 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F +144 540 R F0(optname)3.196 E F1 .696(is not a v)3.196 F .696(alid shell) +-.25 F(option.)144 552 Q(The list of)144 568.8 Q F2(shopt)2.5 E F1 +(options is:)2.5 E F2(array_expand_once)144 585.6 Q F1 1.832 +(If set, the shell suppresses multiple e)184 597.6 R -.25(va)-.25 G +1.832(luation of associati).25 F 2.131 -.15(ve a)-.25 H 1.831(nd inde) +.15 F -.15(xe)-.15 G 4.331(da).15 G 1.831(rray sub-)-4.331 F .025 +(scripts during arithmetic e)184 609.6 R .025(xpression e)-.15 F -.25 +(va)-.25 G .025(luation, while e).25 F -.15(xe)-.15 G .025(cuting b).15 +F .025(uiltins that can perform)-.2 F -.25(va)184 621.6 S +(riable assignments, and while e).25 E -.15(xe)-.15 G(cuting b).15 E +(uiltins that perform array dereferencing.)-.2 E F2(assoc_expand_once) +144 633.6 Q F1(Deprecated; a synon)184 645.6 Q(ym for)-.15 E F2 +(array_expand_once)2.5 E F1(.)A F2(autocd)144 657.6 Q F1 .2 +(If set, a command name that is the name of a directory is e)184 657.6 R +-.15(xe)-.15 G .199(cuted as if it were the ar).15 F(gu-)-.18 E +(ment to the)184 669.6 Q F2(cd)2.5 E F1 2.5(command. This)2.5 F (option is only used by interacti)2.5 E .3 -.15(ve s)-.25 H(hells.).15 E -F1(cdable_v)144 610.8 Q(ars)-.1 E F0 .156(If set, an ar)184 622.8 R .156 -(gument to the)-.18 F F1(cd)2.656 E F0 -.2(bu)2.656 G .155 +F2(cdable_v)144 681.6 Q(ars)-.1 E F1 .155(If set, an ar)184 693.6 R .155 +(gument to the)-.18 F F2(cd)2.655 E F1 -.2(bu)2.655 G .156 (iltin command that is not a directory is assumed to be the).2 F -(name of a v)184 634.8 Q(ariable whose v)-.25 E -(alue is the directory to change to.)-.25 E F1(cdspell)144 646.8 Q F0 -1.055 -(If set, minor errors in the spelling of a directory component in a)184 -646.8 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.988 -(corrected. The)184 658.8 R 1.488(errors check)3.988 F 1.487 -(ed for are transposed characters, a missing character)-.1 F 3.987(,a) --.4 G(nd)-3.987 E .77(one character too man)184 670.8 R 4.57 -.65(y. I) --.15 H 3.27(fac).65 G .77 -(orrection is found, the corrected \214lename is printed, and)-3.27 F -(the command proceeds.)184 682.8 Q -(This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.) -.15 E F1(checkhash)144 694.8 Q F0 .737(If set,)184 706.8 R F1(bash)3.237 -E F0 .736(checks that a command found in the hash table e)3.237 F .736 -(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184 -718.8 Q(If a hashed command no longer e)5 E -(xists, a normal path search is performed.)-.15 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(76)185.115 E 0 Cg EP -%%Page: 77 77 +(name of a v)184 705.6 Q(ariable whose v)-.25 E +(alue is the directory to change to.)-.25 E(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(78)193.45 E 0 Cg EP +%%Page: 79 79 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(checkjobs)144 84 Q F0 .448(If set,)184 96 R F1(bash)2.948 E F0 .448 -(lists the status of an)2.948 F 2.949(ys)-.15 G .449 -(topped and running jobs before e)-2.949 F .449(xiting an interacti)-.15 -F -.15(ve)-.25 G 2.662(shell. If)184 108 R(an)2.662 E 2.661(yj)-.15 G +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(cdspell)144 84 Q F1 1.055 +(If set, minor errors in the spelling of a directory component in a)184 +84 R F2(cd)3.555 E F1 1.055(command will be)3.555 F 3.987 +(corrected. The)184 96 R 1.487(errors check)3.987 F 1.487 +(ed for are transposed characters, a missing character)-.1 F 3.988(,a) +-.4 G(nd)-3.988 E .77(one character too man)184 108 R 4.57 -.65(y. I) +-.15 H 3.27(fac).65 G .77 +(orrection is found, the corrected \214lename is printed, and)-3.27 F +(the command proceeds.)184 120 Q(This option is only used by interacti)5 +E .3 -.15(ve s)-.25 H(hells.).15 E F2(checkhash)144 132 Q F1 .736 +(If set,)184 144 R F2(bash)3.236 E F1 .736 +(checks that a command found in the hash table e)3.236 F .737 +(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184 156 +Q(If a hashed command no longer e)5 E +(xists, a normal path search is performed.)-.15 E F2(checkjobs)144 168 Q +F1 .449(If set,)184 180 R F2(bash)2.949 E F1 .449 +(lists the status of an)2.949 F 2.949(ys)-.15 G .448 +(topped and running jobs before e)-2.949 F .448(xiting an interacti)-.15 +F -.15(ve)-.25 G 2.661(shell. If)184 192 R(an)2.661 E 2.661(yj)-.15 G .161(obs are running, this causes the e)-2.661 F .161 -(xit to be deferred until a second e)-.15 F .161(xit is at-)-.15 F 1.472 -(tempted without an interv)184 120 R 1.473(ening command \(see)-.15 F/F2 -9/Times-Bold@0 SF 1.473(JOB CONTR)3.973 F(OL)-.27 E F0(abo)3.723 E -.15 -(ve)-.15 G 3.973(\). The).15 F 1.473(shell al-)3.973 F -.1(wa)184 132 S +(xit to be deferred until a second e)-.15 F .162(xit is at-)-.15 F 1.473 +(tempted without an interv)184 204 R 1.473(ening command \(see)-.15 F/F3 +9/Times-Bold@0 SF 1.473(JOB CONTR)3.973 F(OL)-.27 E F1(abo)3.723 E -.15 +(ve)-.15 G 3.973(\). The).15 F 1.472(shell al-)3.972 F -.1(wa)184 216 S (ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G(obs are stopped.) --2.5 E F1(checkwinsize)144 144 Q F0 1.09(If set,)184 156 R F1(bash)3.59 -E F0 1.09(checks the windo)3.59 F 3.59(ws)-.25 G 1.09(ize after each e) +-2.5 E F2(checkwinsize)144 228 Q F1 1.09(If set,)184 240 R F2(bash)3.59 +E F1 1.09(checks the windo)3.59 F 3.59(ws)-.25 G 1.09(ize after each e) -3.59 F 1.09(xternal \(non-b)-.15 F 1.09(uiltin\) command and, if)-.2 F -(necessary)184 168 Q 3.35(,u)-.65 G .85(pdates the v)-3.35 F .85 -(alues of)-.25 F F2(LINES)3.35 E F0(and)3.1 E F2(COLUMNS)3.35 E/F3 9 -/Times-Roman@0 SF(.)A F0 .85(This option is enabled by de-)5.35 F -.1 -(fa)184 180 S(ult.).1 E F1(cmdhist)144 192 Q F0 .173(If set,)184 192 R -F1(bash)2.673 E F0 .173(attempts to sa)2.673 F .473 -.15(ve a)-.2 H .172 +(necessary)184 252 Q 3.351(,u)-.65 G .851(pdates the v)-3.351 F .85 +(alues of)-.25 F F3(LINES)3.35 E F1(and)3.1 E F3(COLUMNS)3.35 E/F4 9 +/Times-Roman@0 SF(.)A F1 .85(This option is enabled by de-)5.35 F -.1 +(fa)184 264 S(ult.).1 E F2(cmdhist)144 276 Q F1 .172(If set,)184 276 R +F2(bash)2.672 E F1 .172(attempts to sa)2.672 F .472 -.15(ve a)-.2 H .173 (ll lines of a multiple-line command in the same history en-).15 F(try) -184 204 Q 5.596(.T)-.65 G .597(his allo)-5.596 F .597 +184 288 Q 5.597(.T)-.65 G .597(his allo)-5.597 F .597 (ws easy re-editing of multi-line commands.)-.25 F .597 -(This option is enabled by de-)5.597 F -.1(fa)184 216 S 1.288(ult, b).1 +(This option is enabled by de-)5.597 F -.1(fa)184 300 S 1.287(ult, b).1 F 1.288(ut only has an ef)-.2 F 1.288 -(fect if command history is enabled, as described abo)-.25 F 1.587 -.15 -(ve u)-.15 H(nder).15 E F2(HIST)184 228 Q(OR)-.162 E(Y)-.315 E F3(.)A F1 -(compat31)144 240 Q(compat32)144 252 Q(compat40)144 264 Q(compat41)144 -276 Q(compat42)144 288 Q(compat43)144 300 Q(compat44)144 312 Q(compat50) -144 324 Q F0 .889(These control aspects of the shell')184 336 R 3.389 -(sc)-.55 G .889(ompatibility mode \(see)-3.389 F F2 .889(SHELL COMP) -3.389 F -.855(AT)-.666 G(IBILITY).855 E(MODE)184 348 Q F0(belo)2.25 E -(w\).)-.25 E F1(complete_fullquote)144 364.8 Q F0 .654(If set,)184 376.8 -R F1(bash)3.153 E F0 .653(quotes all shell metacharacters in \214lename\ -s and directory names when per)3.153 F(-)-.2 E 1.524 -(forming completion.)184 388.8 R 1.524(If not set,)6.524 F F1(bash)4.024 -E F0(remo)4.024 E -.15(ve)-.15 G 4.024(sm).15 G 1.524 +(fect if command history is enabled, as described abo)-.25 F 1.588 -.15 +(ve u)-.15 H(nder).15 E F3(HIST)184 312 Q(OR)-.162 E(Y)-.315 E F4(.)A F2 +(compat31)144 324 Q(compat32)144 336 Q(compat40)144 348 Q(compat41)144 +360 Q(compat42)144 372 Q(compat43)144 384 Q(compat44)144 396 Q(compat50) +144 408 Q F1 .889(These control aspects of the shell')184 420 R 3.389 +(sc)-.55 G .889(ompatibility mode \(see)-3.389 F F3 .889(SHELL COMP) +3.389 F -.855(AT)-.666 G(IBILITY).855 E(MODE)184 432 Q F1(belo)2.25 E +(w\).)-.25 E F2(complete_fullquote)144 448.8 Q F1 .653(If set,)184 460.8 +R F2(bash)3.153 E F1 .653(quotes all shell metacharacters in \214lename\ +s and directory names when per)3.153 F(-)-.2 E 1.525 +(forming completion.)184 472.8 R 1.524(If not set,)6.525 F F2(bash)4.024 +E F1(remo)4.024 E -.15(ve)-.15 G 4.024(sm).15 G 1.524 (etacharacters such as the dollar sign)-4.024 F 2.667(from the set of c\ haracters that will be quoted in completed \214lenames when these)184 -400.8 R .028(metacharacters appear in shell v)184 412.8 R .028 -(ariable references in w)-.25 F .029(ords to be completed.)-.1 F .029 -(This means)5.029 F 1.073(that dollar signs in v)184 424.8 R 1.073 +484.8 R .029(metacharacters appear in shell v)184 496.8 R .028 +(ariable references in w)-.25 F .028(ords to be completed.)-.1 F .028 +(This means)5.028 F 1.072(that dollar signs in v)184 508.8 R 1.073 (ariable names that e)-.25 F 1.073 (xpand to directories will not be quoted; ho)-.15 F(w-)-.25 E -2.15 -.25 -(ev e)184 436.8 T 1.922 -.4(r, a).25 H 1.422 -.15(ny d).4 H 1.123 +(ev e)184 520.8 T 1.923 -.4(r, a).25 H 1.423 -.15(ny d).4 H 1.123 (ollar signs appearing in \214lenames will not be quoted, either).15 F -6.123(.T)-.55 G 1.123(his is acti)-6.123 F -.15(ve)-.25 G .59 +6.123(.T)-.55 G 1.122(his is acti)-6.123 F -.15(ve)-.25 G .59 (only when bash is using backslashes to quote completed \214lenames.)184 -448.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 460.8 Q +532.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 544.8 Q (ault, which is the def)-.1 E(ault bash beha)-.1 E(vior in v)-.2 E -(ersions through 4.2.)-.15 E F1(dir)144 477.6 Q(expand)-.18 E F0 .486 -(If set,)184 489.6 R F1(bash)2.986 E F0 .486 +(ersions through 4.2.)-.15 E F2(dir)144 561.6 Q(expand)-.18 E F1 .487 +(If set,)184 573.6 R F2(bash)2.987 E F1 .486 (replaces directory names with the results of w)2.986 F .486(ord e)-.1 F -.487(xpansion when perform-)-.15 F .18(ing \214lename completion.)184 -501.6 R .179(This changes the contents of the readline editing b)5.18 F -(uf)-.2 E(fer)-.25 E 5.179(.I)-.55 G 2.679(fn)-5.179 G(ot)-2.679 E(set,) -184 513.6 Q F1(bash)2.5 E F0(attempts to preserv)2.5 E 2.5(ew)-.15 G -(hat the user typed.)-2.5 E F1(dirspell)144 530.4 Q F0 .858(If set,)184 -530.4 R F1(bash)3.358 E F0 .858 -(attempts spelling correction on directory names during w)3.358 F .859 +.486(xpansion when perform-)-.15 F .179(ing \214lename completion.)184 +585.6 R .179(This changes the contents of the readline editing b)5.179 F +(uf)-.2 E(fer)-.25 E 5.18(.I)-.55 G 2.68(fn)-5.18 G(ot)-2.68 E(set,)184 +597.6 Q F2(bash)2.5 E F1(attempts to preserv)2.5 E 2.5(ew)-.15 G +(hat the user typed.)-2.5 E F2(dirspell)144 614.4 Q F1 .859(If set,)184 +614.4 R F2(bash)3.359 E F1 .858 +(attempts spelling correction on directory names during w)3.359 F .858 (ord completion if)-.1 F -(the directory name initially supplied does not e)184 542.4 Q(xist.)-.15 -E F1(dotglob)144 559.2 Q F0 .165(If set,)184 559.2 R F1(bash)2.665 E F0 -.165(includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665 -('i)-.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F -(xpansion.)-.15 E(The \214lenames)184 571.2 Q F1 -.63(``)2.5 G -.55(.') -.63 G(')-.08 E F0(and)5 E F1 -.63(``)2.5 G(..).63 E -.63('')-.55 G F0 -(must al)5.63 E -.1(wa)-.1 G(ys be matched e).1 E(xplicitly)-.15 E 2.5 -(,e)-.65 G -.15(ve)-2.75 G 2.5(ni).15 G(f)-2.5 E F1(dotglob)2.5 E F0 -(is set.)2.5 E F1(execfail)144 588 Q F0 .516(If set, a non-interacti)184 -588 R .816 -.15(ve s)-.25 H .516(hell will not e).15 F .516 +(the directory name initially supplied does not e)184 626.4 Q(xist.)-.15 +E F2(dotglob)144 643.2 Q F1 1.087(If set,)184 643.2 R F2(bash)3.587 E F1 +1.088(includes \214lenames be)3.588 F 1.088 +(ginning with a \231.\232 in the results of pathname e)-.15 F(xpan-)-.15 +E 3.389(sion. The)184 655.2 R .889 +(\214lenames \231.\232 and \231..\232 must al)3.389 F -.1(wa)-.1 G .888 +(ys be matched e).1 F(xplicitly)-.15 E 3.388(,e)-.65 G -.15(ve)-3.638 G +3.388(ni).15 G(f)-3.388 E F2(dotglob)3.388 E F1(is)3.388 E(set.)184 +667.2 Q F2(execfail)144 684 Q F1 .516(If set, a non-interacti)184 684 R +.816 -.15(ve s)-.25 H .516(hell will not e).15 F .516 (xit if it cannot e)-.15 F -.15(xe)-.15 G .517 (cute the \214le speci\214ed as an ar).15 F(-)-.2 E(gument to the)184 -600 Q F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E(An interacti)5 E -.3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 E F1(exec)2.5 E F0 --.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 616.8 Q F0 .717 -(If set, aliases are e)184 628.8 R .717(xpanded as described abo)-.15 F -1.017 -.15(ve u)-.15 H(nder).15 E F2(ALIASES)3.217 E F3(.)A F0 .716 -(This option is enabled)5.217 F(by def)184 640.8 Q(ault for interacti) --.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(extdeb)144 657.6 Q(ug)-.2 E F0 -.17(If set at shell in)184 669.6 R -.2(vo)-.4 G .17 -(cation, or in a shell startup \214le, arrange to e).2 F -.15(xe)-.15 G -.17(cute the deb).15 F .17(ugger pro\214le)-.2 F 1.082 -(before the shell starts, identical to the)184 681.6 R F1<adad646562> -3.582 E(ugger)-.2 E F0 3.581(option. If)3.581 F 1.081(set after in)3.581 -F -.2(vo)-.4 G 1.081(cation, be-).2 F(ha)184 693.6 Q -(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184 -710.4 Q F0(The)220 710.4 Q F1<ad46>4.25 E F0 1.75(option to the)4.25 F -F1(declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751 -(iltin displays the source \214le name and line).2 F -(number corresponding to each function name supplied as an ar)220 722.4 -Q(gument.)-.18 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(77) -185.115 E 0 Cg EP -%%Page: 78 78 +696 Q F2(exec)2.5 E F1 -.2(bu)2.5 G(iltin command.).2 E(An interacti)5 E +.3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 E F2(exec)2.5 E F1 +-.1(fa)2.5 G(ils.).1 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(79) +193.45 E 0 Cg EP +%%Page: 80 80 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(2.)184 84 Q F0 1.667(If the command run by the)220 84 R F1(DEB)4.167 -E(UG)-.1 E F0 1.667(trap returns a non-zero v)4.167 F 1.667 -(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220 96 Q --.15(xe)-.15 G(cuted.).15 E F1(3.)184 112.8 Q F0 .84 -(If the command run by the)220 112.8 R F1(DEB)3.34 E(UG)-.1 E F0 .841 -(trap returns a v)3.341 F .841(alue of 2, and the shell is)-.25 F -.15 -(exe)220 124.8 S .488 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(expand_aliases)144 84 Q F1 +.717(If set, aliases are e)184 96 R .717(xpanded as described abo)-.15 F +1.017 -.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0 SF(ALIASES)3.217 E +/F4 9/Times-Roman@0 SF(.)A F1 .716(This option is enabled)5.217 F +(by def)184 108 Q(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.) +.15 E F2(extdeb)144 124.8 Q(ug)-.2 E F1 .17(If set at shell in)184 136.8 +R -.2(vo)-.4 G .17(cation, or in a shell startup \214le, arrange to e).2 +F -.15(xe)-.15 G .17(cute the deb).15 F .17(ugger pro\214le)-.2 F 1.082 +(before the shell starts, identical to the)184 148.8 R F2<adad646562> +3.582 E(ugger)-.2 E F1 3.581(option. If)3.581 F 1.081(set after in)3.581 +F -.2(vo)-.4 G 1.081(cation, be-).2 F(ha)184 160.8 Q +(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F2(1.)184 +177.6 Q F1(The)220 177.6 Q F2<ad46>4.25 E F1 1.75(option to the)4.25 F +F2(declar)4.251 E(e)-.18 E F1 -.2(bu)4.251 G 1.751 +(iltin displays the source \214le name and line).2 F +(number corresponding to each function name supplied as an ar)220 189.6 +Q(gument.)-.18 E F2(2.)184 206.4 Q F1 1.667(If the command run by the) +220 206.4 R F2(DEB)4.167 E(UG)-.1 E F1 1.667(trap returns a non-zero v) +4.167 F 1.667(alue, the ne)-.25 F(xt)-.15 E +(command is skipped and not e)220 218.4 Q -.15(xe)-.15 G(cuted.).15 E F2 +(3.)184 235.2 Q F1 .84(If the command run by the)220 235.2 R F2(DEB)3.34 +E(UG)-.1 E F1 .841(trap returns a v)3.341 F .841 +(alue of 2, and the shell is)-.25 F -.15(exe)220 247.2 S .488 (cuting in a subroutine \(a shell function or a shell script e).15 F --.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1 -(sour)220 136.8 Q(ce)-.18 E F0 -.2(bu)2.5 G -(iltins\), the shell simulates a call to).2 E F1 -.18(re)2.5 G(tur).18 E -(n)-.15 E F0(.)A F1(4.)184 153.6 Q/F2 9/Times-Bold@0 SF -.27(BA)220 -153.6 S(SH_ARGC).27 E F0(and)3.153 E F2 -.27(BA)3.403 G(SH_ARGV).27 E F0 -.904(are updated as described in their descriptions)3.154 F(abo)220 -165.6 Q -.15(ve)-.15 G(\).).15 E F1(5.)184 182.4 Q F0 1.637(Function tr\ -acing is enabled: command substitution, shell functions, and sub-)220 -182.4 R(shells in)220 194.4 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith) --2.5 E F1(\()2.5 E/F3 10/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0 -(inherit the)2.5 E F1(DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0 -(traps.)2.5 E F1(6.)184 211.2 Q F0 1.082(Error tracing is enabled: comm\ -and substitution, shell functions, and subshells)220 211.2 R(in)220 -223.2 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F3 -(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E F0(trap.) -2.5 E F1(extglob)144 240 Q F0 .4(If set, the e)184 240 R .4 +-.15(xe)-.15 G .488(cuted by the).15 F F2(.)2.988 E F1(or)2.988 E F2 +(sour)220 259.2 Q(ce)-.18 E F1 -.2(bu)2.5 G +(iltins\), the shell simulates a call to).2 E F2 -.18(re)2.5 G(tur).18 E +(n)-.15 E F1(.)A F2(4.)184 276 Q F3 -.27(BA)220 276 S(SH_ARGC).27 E F1 +(and)3.153 E F3 -.27(BA)3.403 G(SH_ARGV).27 E F1 .904 +(are updated as described in their descriptions)3.154 F(abo)220 288 Q +-.15(ve)-.15 G(\).).15 E F2(5.)184 304.8 Q F1 1.637(Function tracing is\ + enabled: command substitution, shell functions, and sub-)220 304.8 R +(shells in)220 316.8 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E +F2(\()2.5 E F0(command)2.5 E F2(\))2.5 E F1(inherit the)2.5 E F2(DEB)2.5 +E(UG)-.1 E F1(and)2.5 E F2(RETURN)2.5 E F1(traps.)2.5 E F2(6.)184 333.6 +Q F1 1.082(Error tracing is enabled: command substitution, shell functi\ +ons, and subshells)220 333.6 R(in)220 345.6 Q -.2(vo)-.4 G -.1(ke).2 G +2.5(dw).1 G(ith)-2.5 E F2(\()2.5 E F0(command)2.5 E F2(\))2.5 E F1 +(inherit the)2.5 E F2(ERR)2.5 E F1(trap.)2.5 E F2(extglob)144 362.4 Q F1 +.4(If set, the e)184 362.4 R .4 (xtended pattern matching features described abo)-.15 F .7 -.15(ve u) --.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 252 Q -F0(are enabled.)2.5 E F1(extquote)144 268.8 Q F0 .86(If set,)184 280.8 R -F1($)3.36 E F0<08>A F3(string)A F0 3.36<0861>C(nd)-3.36 E F1($)3.36 E F0 -(")A F3(string)A F0 3.36("q)C .86(uoting is performed within)-3.36 F F1 -(${)3.36 E F3(par)A(ameter)-.15 E F1(})A F0 -.15(ex)3.36 G .86 -(pansions en-).15 F(closed in double quotes.)184 292.8 Q -(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 309.6 Q -F0 .243(If set, patterns which f)184 309.6 R .243 +-.15 H(nder).15 E F2 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 374.4 Q +F1(are enabled.)2.5 E F2(extquote)144 391.2 Q F1 .86(If set,)184 403.2 R +F2($)3.36 E F1<08>A F0(string)A F1 3.36<0861>C(nd)-3.36 E F2($)3.36 E F1 +(")A F0(string)A F1 3.36("q)C .86(uoting is performed within)-3.36 F F2 +(${)3.36 E F0(par)A(ameter)-.15 E F2(})A F1 -.15(ex)3.36 G .86 +(pansions en-).15 F(closed in double quotes.)184 415.2 Q +(This option is enabled by def)5 E(ault.)-.1 E F2(failglob)144 432 Q F1 +.243(If set, patterns which f)184 432 R .243 (ail to match \214lenames during pathname e)-.1 F .243 -(xpansion result in an e)-.15 F(x-)-.15 E(pansion error)184 321.6 Q(.) --.55 E F1 -.25(fo)144 338.4 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0 -.936(If set, the suf)184 350.4 R<8c78>-.25 E .936(es speci\214ed by the) --.15 F F2(FIGNORE)3.436 E F0 .936(shell v)3.186 F .936(ariable cause w) --.25 F .937(ords to be ignored)-.1 F .32(when performing w)184 362.4 R -.32(ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G -.32(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 2.947 -(pletions. See)184 374.4 R F2 .447(SHELL V)2.947 F(ARIABLES)-1.215 E F0 -(abo)2.697 E .747 -.15(ve f)-.15 H .448(or a description of).15 F F2 -(FIGNORE)2.948 E/F4 9/Times-Roman@0 SF(.)A F0 .448(This option is)4.948 -F(enabled by def)184 386.4 Q(ault.)-.1 E F1(globasciiranges)144 403.2 Q -F0 2.519(If set, range e)184 415.2 R 2.519 +(xpansion result in an e)-.15 F(x-)-.15 E(pansion error)184 444 Q(.)-.55 +E F2 -.25(fo)144 460.8 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F1 .936 +(If set, the suf)184 472.8 R<8c78>-.25 E .936(es speci\214ed by the)-.15 +F F3(FIGNORE)3.436 E F1 .936(shell v)3.186 F .936(ariable cause w)-.25 F +.937(ords to be ignored)-.1 F .32(when performing w)184 484.8 R .32 +(ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G .32 +(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 2.947 +(pletions. See)184 496.8 R F3 .447(SHELL V)2.947 F(ARIABLES)-1.215 E F1 +(abo)2.697 E .747 -.15(ve f)-.15 H .448(or a description of).15 F F3 +(FIGNORE)2.948 E F4(.)A F1 .448(This option is)4.948 F(enabled by def) +184 508.8 Q(ault.)-.1 E F2(globasciiranges)144 525.6 Q F1 2.519 +(If set, range e)184 537.6 R 2.519 (xpressions used in pattern matching brack)-.15 F 2.518(et e)-.1 F 2.518 -(xpressions \(see)-.15 F F2 -.09(Pa)5.018 G(tter).09 E(n)-.135 E -(Matching)184 427.2 Q F0(abo)2.964 E -.15(ve)-.15 G 3.214(\)b).15 G(eha) +(xpressions \(see)-.15 F F3 -.09(Pa)5.018 G(tter).09 E(n)-.135 E +(Matching)184 549.6 Q F1(abo)2.964 E -.15(ve)-.15 G 3.214(\)b).15 G(eha) -3.214 E 1.014 -.15(ve a)-.2 H 3.214(si).15 G 3.214(fi)-3.214 G 3.214 (nt)-3.214 G .714(he traditional C locale when performing comparisons.) --3.214 F 1.02(That is, the current locale')184 439.2 R 3.52(sc)-.55 G +-3.214 F 1.02(That is, the current locale')184 561.6 R 3.52(sc)-.55 G 1.02(ollating sequence is not tak)-3.52 F 1.02(en into account, so)-.1 F -F1(b)3.52 E F0 1.02(will not)3.52 F .956(collate between)184 451.2 R F1 -(A)3.456 E F0(and)3.456 E F1(B)3.456 E F0 3.457(,a)C .957(nd upper) +F2(b)3.52 E F1 1.02(will not)3.52 F .956(collate between)184 573.6 R F2 +(A)3.456 E F1(and)3.456 E F2(B)3.456 E F1 3.457(,a)C .957(nd upper) -3.457 F .957(-case and lo)-.2 F(wer)-.25 E .957 -(-case ASCII characters will collate)-.2 F(together)184 463.2 Q(.)-.55 E -F1(globskipdots)144 480 Q F0 .285(If set, pathname e)184 492 R .285 -(xpansion will ne)-.15 F -.15(ve)-.25 G 2.785(rm).15 G .285 -(atch the \214lenames)-2.785 F F1 -.63(``)2.785 G -.55(.').63 G(')-.08 E -F0(and)5.285 E F1 -.63(``)2.784 G(..).63 E -.63('')-.55 G F0 2.784(,e) -.63 G -.15(ve)-3.034 G 2.784(ni).15 G 2.784(ft)-2.784 G .284(he pat-) --2.784 F(tern be)184 504 Q(gins with a)-.15 E F1 -.63(``)2.5 G -.55(.') -.63 G(')-.08 E F0 5(.T)C(his option is enabled by def)-5 E(ault.)-.1 E -F1(globstar)144 520.8 Q F0 .518(If set, the pattern)184 520.8 R F1(**) -3.018 E F0 .519(used in a pathname e)3.019 F .519(xpansion conte)-.15 F -.519(xt will match all \214les and zero)-.15 F .432 -(or more directories and subdirectories.)184 532.8 R .431 -(If the pattern is follo)5.432 F .431(wed by a)-.25 F F1(/)2.931 E F0 +(-case ASCII characters will collate)-.2 F(together)184 585.6 Q(.)-.55 E +F2(globskipdots)144 602.4 Q F1 .802(If set, pathname e)184 614.4 R .802 +(xpansion will ne)-.15 F -.15(ve)-.25 G 3.302(rm).15 G .802 +(atch the \214lenames \231.\232 and \231..\232, e)-3.302 F -.15(ve)-.25 +G 3.302(ni).15 G 3.302(ft)-3.302 G .802(he pat-)-3.302 F(tern be)184 +626.4 Q(gins with a \231.\232.)-.15 E(This option is enabled by def)5 E +(ault.)-.1 E F2(globstar)144 643.2 Q F1 .518(If set, the pattern)184 +643.2 R F2(**)3.018 E F1 .519(used in a pathname e)3.019 F .519 +(xpansion conte)-.15 F .519(xt will match all \214les and zero)-.15 F +.432(or more directories and subdirectories.)184 655.2 R .431 +(If the pattern is follo)5.432 F .431(wed by a)-.25 F F2(/)2.931 E F1 2.931(,o)C .431(nly directories)-2.931 F(and subdirectories match.)184 -544.8 Q F1(gnu_errfmt)144 561.6 Q F0(If set, shell error messages are w\ -ritten in the standard GNU error message format.)184 573.6 Q F1 -(histappend)144 590.4 Q F0 .676 -(If set, the history list is appended to the \214le named by the v)184 -602.4 R .676(alue of the)-.25 F F2(HISTFILE)3.177 E F0 -.25(va)2.927 G -(ri-).25 E(able when the shell e)184 614.4 Q(xits, rather than o)-.15 E --.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 631.2 Q(eedit) --.18 E F0 .576(If set, and)184 643.2 R F1 -.18(re)3.076 G(adline).18 E -F0 .575(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15 -G .575(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F -(tory substitution.)184 655.2 Q F1(histv)144 672 Q(erify)-.1 E F0 .402 -(If set, and)184 684 R F1 -.18(re)2.903 G(adline).18 E F0 .403 -(is being used, the results of history substitution are not immediately) -2.903 F .662(passed to the shell parser)184 696 R 5.662(.I)-.55 G .661 -(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161 -G(adline).18 E F0(editing)3.161 E -.2(bu)184 708 S -.25(ff).2 G(er).25 E -2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(78)185.115 E 0 Cg EP -%%Page: 79 79 +667.2 Q F2(gnu_errfmt)144 684 Q F1(If set, shell error messages are wri\ +tten in the standard GNU error message format.)184 696 Q(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(80)193.45 E 0 Cg EP +%%Page: 81 81 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(hostcomplete)144 84 Q F0 1.181(If set, and)184 96 R F1 -.18(re)3.681 -G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 1.182 -(will attempt to perform hostname completion)3.682 F 1.381(when a w)184 -108 R 1.381(ord containing a)-.1 F F1(@)3.881 E F0 1.381 -(is being completed \(see)3.881 F F1(Completing)3.88 E F0(under)3.88 E -/F2 9/Times-Bold@0 SF(READLINE)3.88 E F0(abo)184 120 Q -.15(ve)-.15 G -2.5(\). This).15 F(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 -136.8 Q F0(If set,)184 148.8 Q F1(bash)2.5 E F0(will send)2.5 E F2 -(SIGHUP)2.5 E F0(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 -H(ogin shell e).15 E(xits.)-.15 E F1(inherit_err)144 165.6 Q(exit)-.18 E -F0 .219(If set, command substitution inherits the v)184 177.6 R .219 -(alue of the)-.25 F F1(err)2.719 E(exit)-.18 E F0 .22 -(option, instead of unsetting)2.719 F(it in the subshell en)184 189.6 Q -2.5(vironment. This)-.4 F(option is enabled when)2.5 E/F3 10 -/Times-Italic@0 SF(posix mode)2.5 E F0(is enabled.)2.5 E F1(interacti) -144 206.4 Q -.1(ve)-.1 G(_comments).1 E F0 .33(If set, allo)184 218.4 R -2.83(waw)-.25 G .33(ord be)-2.93 F .33(ginning with)-.15 F F1(#)2.83 E -F0 .33(to cause that w)2.83 F .33(ord and all remaining characters on) --.1 F .967(that line to be ignored in an interacti)184 230.4 R 1.267 --.15(ve s)-.25 H .967(hell \(see).15 F F2(COMMENTS)3.467 E F0(abo)3.217 -E -.15(ve)-.15 G 3.467(\). This).15 F .968(option is)3.468 F -(enabled by def)184 242.4 Q(ault.)-.1 E F1(lastpipe)144 259.2 Q F0 .066 -(If set, and job control is not acti)184 259.2 R -.15(ve)-.25 G 2.566 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(histappend)144 84 Q F1 .676 +(If set, the history list is appended to the \214le named by the v)184 +96 R .676(alue of the)-.25 F/F3 9/Times-Bold@0 SF(HISTFILE)3.177 E F1 +-.25(va)2.927 G(ri-).25 E(able when the shell e)184 108 Q +(xits, rather than o)-.15 E -.15(ve)-.15 G(rwriting the \214le.).15 E F2 +(histr)144 124.8 Q(eedit)-.18 E F1 .576(If set, and)184 136.8 R F2 -.18 +(re)3.076 G(adline).18 E F1 .575(is being used, a user is gi)3.076 F +-.15(ve)-.25 G 3.075(nt).15 G .575(he opportunity to re-edit a f)-3.075 +F .575(ailed his-)-.1 F(tory substitution.)184 148.8 Q F2(histv)144 +165.6 Q(erify)-.1 E F1 .402(If set, and)184 177.6 R F2 -.18(re)2.903 G +(adline).18 E F1 .403 +(is being used, the results of history substitution are not immediately) +2.903 F .662(passed to the shell parser)184 189.6 R 5.662(.I)-.55 G .661 +(nstead, the resulting line is loaded into the)-5.662 F F2 -.18(re)3.161 +G(adline).18 E F1(editing)3.161 E -.2(bu)184 201.6 S -.25(ff).2 G(er).25 +E 2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F2 +(hostcomplete)144 218.4 Q F1 1.181(If set, and)184 230.4 R F2 -.18(re) +3.681 G(adline).18 E F1 1.181(is being used,)3.681 F F2(bash)3.682 E F1 +1.182(will attempt to perform hostname completion)3.682 F 1.381 +(when a w)184 242.4 R 1.381(ord containing a)-.1 F F2(@)3.881 E F1 1.381 +(is being completed \(see)3.881 F F2(Completing)3.88 E F1(under)3.88 E +F3(READLINE)3.88 E F1(abo)184 254.4 Q -.15(ve)-.15 G 2.5(\). This).15 F +(is enabled by def)2.5 E(ault.)-.1 E F2(huponexit)144 271.2 Q F1 +(If set,)184 283.2 Q F2(bash)2.5 E F1(will send)2.5 E F3(SIGHUP)2.5 E F1 +(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H(ogin shell e) +.15 E(xits.)-.15 E F2(inherit_err)144 300 Q(exit)-.18 E F1 .219 +(If set, command substitution inherits the v)184 312 R .219(alue of the) +-.25 F F2(err)2.719 E(exit)-.18 E F1 .22(option, instead of unsetting) +2.719 F(it in the subshell en)184 324 Q 2.5(vironment. This)-.4 F +(option is enabled when)2.5 E F0(posix mode)2.5 E F1(is enabled.)2.5 E +F2(interacti)144 340.8 Q -.1(ve)-.1 G(_comments).1 E F1 .33 +(If set, allo)184 352.8 R 2.83(waw)-.25 G .33(ord be)-2.93 F .33 +(ginning with)-.15 F F2(#)2.83 E F1 .33(to cause that w)2.83 F .33 +(ord and all remaining characters on)-.1 F .967 +(that line to be ignored in an interacti)184 364.8 R 1.267 -.15(ve s) +-.25 H .967(hell \(see).15 F F3(COMMENTS)3.467 E F1(abo)3.217 E -.15(ve) +-.15 G 3.467(\). This).15 F .968(option is)3.468 F(enabled by def)184 +376.8 Q(ault.)-.1 E F2(lastpipe)144 393.6 Q F1 .066 +(If set, and job control is not acti)184 393.6 R -.15(ve)-.25 G 2.566 (,t).15 G .066(he shell runs the last command of a pipeline not e)-2.566 F -.15(xe)-.15 G(-).15 E -(cuted in the background in the current shell en)184 271.2 Q(vironment.) --.4 E F1(lithist)144 288 Q F0 .654(If set, and the)184 288 R F1(cmdhist) -3.154 E F0 .654(option is enabled, multi-line commands are sa)3.154 F --.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history)-3.155 F -(with embedded ne)184 300 Q -(wlines rather than using semicolon separators where possible.)-.25 E F1 -(localv)144 316.8 Q(ar_inherit)-.1 E F0 .422(If set, local v)184 328.8 R +(cuted in the background in the current shell en)184 405.6 Q(vironment.) +-.4 E F2(lithist)144 422.4 Q F1 .654(If set, and the)184 422.4 R F2 +(cmdhist)3.154 E F1 .654(option is enabled, multi-line commands are sa) +3.154 F -.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history) +-3.155 F(with embedded ne)184 434.4 Q +(wlines rather than using semicolon separators where possible.)-.25 E F2 +(localv)144 451.2 Q(ar_inherit)-.1 E F1 .422(If set, local v)184 463.2 R .422(ariables inherit the v)-.25 F .422(alue and attrib)-.25 F .422 (utes of a v)-.2 F .422(ariable of the same name that)-.25 F -.15(ex)184 -340.8 S .173(ists at a pre).15 F .173(vious scope before an)-.25 F 2.673 +475.2 S .173(ists at a pre).15 F .173(vious scope before an)-.25 F 2.673 (yn)-.15 G .673 -.25(ew va)-2.673 H .173(lue is assigned.).25 F .174 -(The nameref attrib)5.174 F .174(ute is not)-.2 F(inherited.)184 352.8 Q -F1(localv)144 369.6 Q(ar_unset)-.1 E F0 .329(If set, calling)184 381.6 R -F1(unset)2.829 E F0 .329(on local v)2.829 F .329(ariables in pre)-.25 F +(The nameref attrib)5.174 F .174(ute is not)-.2 F(inherited.)184 487.2 Q +F2(localv)144 504 Q(ar_unset)-.1 E F1 .329(If set, calling)184 516 R F2 +(unset)2.829 E F1 .329(on local v)2.829 F .329(ariables in pre)-.25 F .328(vious function scopes marks them so subse-)-.25 F .543(quent looku\ ps \214nd them unset until that function returns. This is identical to \ -the beha)184 393.6 R(v-)-.2 E(ior of unsetting local v)184 405.6 Q -(ariables at the current function scope.)-.25 E F1(login_shell)144 422.4 -Q F0 .486 +the beha)184 528 R(v-)-.2 E(ior of unsetting local v)184 540 Q +(ariables at the current function scope.)-.25 E F2(login_shell)144 556.8 +Q F1 .486 (The shell sets this option if it is started as a login shell \(see)184 -434.4 R F2(INV)2.986 E(OCA)-.405 E(TION)-.855 E F0(abo)2.736 E -.15(ve) --.15 G 2.986(\). The).15 F -.25(va)184 446.4 S(lue may not be changed.) -.25 E F1(mailwar)144 463.2 Q(n)-.15 E F0 .814(If set, and a \214le that) -184 475.2 R F1(bash)3.314 E F0 .815 +568.8 R F3(INV)2.986 E(OCA)-.405 E(TION)-.855 E F1(abo)2.736 E -.15(ve) +-.15 G 2.986(\). The).15 F -.25(va)184 580.8 S(lue may not be changed.) +.25 E F2(mailwar)144 597.6 Q(n)-.15 E F1 .814(If set, and a \214le that) +184 609.6 R F2(bash)3.314 E F1 .815 (is checking for mail has been accessed since the last time it)3.314 F --.1(wa)184 487.2 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E -(`The mail in)-.74 E F3(mail\214le)2.5 E F0(has been read')2.5 E 2.5('i) --.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1(no_empty_cmd_completion)144 504 -Q F0 .325(If set, and)184 516 R F1 -.18(re)2.825 G(adline).18 E F0 .325 -(is being used,)2.825 F F1(bash)2.824 E F0 .324 -(will not attempt to search the)2.824 F F2 -.666(PA)2.824 G(TH)-.189 E -F0 .324(for possible)2.574 F -(completions when completion is attempted on an empty line.)184 528 Q F1 -(nocaseglob)144 544.8 Q F0 .436(If set,)184 556.8 R F1(bash)2.936 E F0 +-.1(wa)184 621.6 S 2.5(sc).1 G(heck)-2.5 E(ed,)-.1 E F2(bash)2.5 E F1 +(displays the message \231The mail in)2.5 E F0(mail\214le)2.5 E F1 +(has been read\232.)2.5 E F2(no_empty_cmd_completion)144 638.4 Q F1 .325 +(If set, and)184 650.4 R F2 -.18(re)2.825 G(adline).18 E F1 .325 +(is being used,)2.825 F F2(bash)2.824 E F1 .324 +(will not attempt to search the)2.824 F F3 -.666(PA)2.824 G(TH)-.189 E +F1 .324(for possible)2.574 F +(completions when completion is attempted on an empty line.)184 662.4 Q +F2(nocaseglob)144 679.2 Q F1 .436(If set,)184 691.2 R F2(bash)2.936 E F1 .436(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f) --.25 H .437(ashion when performing pathname).05 F -.15(ex)184 568.8 S -(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E --.15(ve)-.15 G(\).).15 E F1(nocasematch)144 585.6 Q F0 1.194(If set,)184 -597.6 R F1(bash)3.694 E F0 1.194 -(matches patterns in a case\255insensiti)3.694 F 1.493 -.15(ve f)-.25 H -1.193(ashion when performing matching).05 F .551(while e)184 609.6 R --.15(xe)-.15 G(cuting).15 E F1(case)3.051 E F0(or)3.051 E F1([[)3.051 E -F0 .551(conditional commands, when performing pattern substitution)3.051 -F -.1(wo)184 621.6 S .623(rd e).1 F .623(xpansions, or when \214ltering\ - possible completions as part of programmable com-)-.15 F(pletion.)184 -633.6 Q F1(noexpand_translation)144 650.4 Q F0 1.117(If set,)184 662.4 R -F1(bash)3.617 E F0 1.117(encloses the translated results of $"..." quot\ -ing in single quotes instead of)3.617 F(double quotes.)184 674.4 Q -(If the string is not translated, this has no ef)5 E(fect.)-.25 E F1 -(nullglob)144 691.2 Q F0 .855(If set,)184 703.2 R F1(bash)3.355 E F0 -(allo)3.355 E .855(ws patterns which match no \214les \(see)-.25 F F1 --.1(Pa)3.354 G .854(thname Expansion).1 F F0(abo)3.354 E -.15(ve)-.15 G -3.354(\)t).15 G(o)-3.354 E -.15(ex)184 715.2 S -(pand to a null string, rather than themselv).15 E(es.)-.15 E -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(79)185.115 E 0 Cg EP -%%Page: 80 80 +-.25 H .437(ashion when performing pathname).05 F -.15(ex)184 703.2 S +(pansion \(see).15 E F2 -.1(Pa)2.5 G(thname Expansion).1 E F1(abo)2.5 E +-.15(ve)-.15 G(\).).15 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E +(81)193.45 E 0 Cg EP +%%Page: 82 82 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(patsub_r)144 84 Q(eplacement)-.18 E F0 .105(If set,)184 96 R F1(bash) -2.605 E F0 -.15(ex)2.605 G .105(pands occurrences of).15 F F1(&)2.606 E -F0 .106(in the replacement string of pattern substitution to)2.606 F -.528(the te)184 108 R .528 -(xt matched by the pattern, as described under)-.15 F F1 -.1(Pa)3.027 G -.527(rameter Expansion).1 F F0(abo)3.027 E -.15(ve)-.15 G 5.527(.T).15 G -(his)-5.527 E(option is enabled by def)184 120 Q(ault.)-.1 E F1(pr)144 -136.8 Q(ogcomp)-.18 E F0 .676(If set, the programmable completion f)184 -148.8 R .677(acilities \(see)-.1 F F1(Pr)3.177 E .677 -(ogrammable Completion)-.18 F F0(abo)3.177 E -.15(ve)-.15 G(\)).15 E -(are enabled.)184 160.8 Q(This option is enabled by def)5 E(ault.)-.1 E -F1(pr)144 177.6 Q(ogcomp_alias)-.18 E F0 2.124 -(If set, and programmable completion is enabled,)184 189.6 R F1(bash) -4.624 E F0 2.124(treats a command name that)4.624 F(doesn')184 201.6 Q -3.288(th)-.18 G -2.25 -.2(av e)-3.288 H(an)3.488 E 3.288(yc)-.15 G .789 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(nocasematch)144 84 Q F1 1.194 +(If set,)184 96 R F2(bash)3.694 E F1 1.194 +(matches patterns in a case\255insensiti)3.694 F 1.493 -.15(ve f)-.25 H +1.193(ashion when performing matching).05 F .551(while e)184 108 R -.15 +(xe)-.15 G(cuting).15 E F2(case)3.051 E F1(or)3.051 E F2([[)3.051 E F1 +.551(conditional commands, when performing pattern substitution)3.051 F +-.1(wo)184 120 S .623(rd e).1 F .623(xpansions, or when \214ltering pos\ +sible completions as part of programmable com-)-.15 F(pletion.)184 132 Q +F2(noexpand_translation)144 148.8 Q F1 .669(If set,)184 160.8 R F2(bash) +3.169 E F1 .669(encloses the translated results of)3.169 F F2($")3.169 E +F1 1.666(...)C F2(")-1.666 E F1 .669 +(quoting in single quotes instead of)3.169 F(double quotes.)184 172.8 Q +(If the string is not translated, this has no ef)5 E(fect.)-.25 E F2 +(nullglob)144 189.6 Q F1 1.581(If set, pathname e)184 201.6 R 1.581 +(xpansion patterns which match no \214les \(see)-.15 F F2 -.1(Pa)4.081 G +1.58(thname Expansion).1 F F1(abo)184 213.6 Q -.15(ve)-.15 G 2.5(\)e).15 +G(xpand to nothing and are remo)-2.65 E -.15(ve)-.15 G(d, rather than e) +.15 E(xpanding to themselv)-.15 E(es.)-.15 E F2(patsub_r)144 230.4 Q +(eplacement)-.18 E F1 .105(If set,)184 242.4 R F2(bash)2.605 E F1 -.15 +(ex)2.605 G .105(pands occurrences of).15 F F2(&)2.606 E F1 .106 +(in the replacement string of pattern substitution to)2.606 F .528 +(the te)184 254.4 R .528(xt matched by the pattern, as described under) +-.15 F F2 -.1(Pa)3.027 G .527(rameter Expansion).1 F F1(abo)3.027 E -.15 +(ve)-.15 G 5.527(.T).15 G(his)-5.527 E(option is enabled by def)184 +266.4 Q(ault.)-.1 E F2(pr)144 283.2 Q(ogcomp)-.18 E F1 .676 +(If set, the programmable completion f)184 295.2 R .677(acilities \(see) +-.1 F F2(Pr)3.177 E .677(ogrammable Completion)-.18 F F1(abo)3.177 E +-.15(ve)-.15 G(\)).15 E(are enabled.)184 307.2 Q +(This option is enabled by def)5 E(ault.)-.1 E F2(pr)144 324 Q +(ogcomp_alias)-.18 E F1 2.124 +(If set, and programmable completion is enabled,)184 336 R F2(bash)4.624 +E F1 2.124(treats a command name that)4.624 F(doesn')184 348 Q 3.288(th) +-.18 G -2.25 -.2(av e)-3.288 H(an)3.488 E 3.288(yc)-.15 G .789 (ompletions as a possible alias and attempts alias e)-3.288 F .789 -(xpansion. If it has)-.15 F 1.473(an alias,)184 213.6 R F1(bash)3.973 E -F0 1.473(attempts programmable completion using the command w)3.973 F -1.473(ord resulting)-.1 F(from the e)184 225.6 Q(xpanded alias.)-.15 E -F1(pr)144 242.4 Q(omptv)-.18 E(ars)-.1 E F0 1.447 -(If set, prompt strings under)184 254.4 R 1.448(go parameter e)-.18 F +(xpansion. If it has)-.15 F 1.473(an alias,)184 360 R F2(bash)3.973 E F1 +1.473(attempts programmable completion using the command w)3.973 F 1.473 +(ord resulting)-.1 F(from the e)184 372 Q(xpanded alias.)-.15 E F2(pr) +144 388.8 Q(omptv)-.18 E(ars)-.1 E F1 1.447 +(If set, prompt strings under)184 400.8 R 1.448(go parameter e)-.18 F 1.448(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184 -266.4 S .171(pansion, and quote remo).15 F -.25(va)-.15 G 2.67(la).25 G -.17(fter being e)-2.67 F .17(xpanded as described in)-.15 F/F2 9 -/Times-Bold@0 SF(PR)2.67 E(OMPTING)-.27 E F0(abo)2.42 E -.15(ve)-.15 G -(.).15 E(This option is enabled by def)184 278.4 Q(ault.)-.1 E F1 -.18 -(re)144 295.2 S(stricted_shell).18 E F0 1.069 +412.8 S .171(pansion, and quote remo).15 F -.25(va)-.15 G 2.67(la).25 G +.17(fter being e)-2.67 F .17(xpanded as described in)-.15 F/F3 9 +/Times-Bold@0 SF(PR)2.67 E(OMPTING)-.27 E F1(abo)2.42 E -.15(ve)-.15 G +(.).15 E(This option is enabled by def)184 424.8 Q(ault.)-.1 E F2 -.18 +(re)144 441.6 S(stricted_shell).18 E F1 1.069 (The shell sets this option if it is started in restricted mode \(see) -184 307.2 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 319.2 Q 2.86 +184 453.6 R F3 1.069(RESTRICTED SHELL)3.569 F F1(belo)184 465.6 Q 2.86 (w\). The)-.25 F -.25(va)2.86 G .36(lue may not be changed.).25 F .36 (This is not reset when the startup \214les are e)5.36 F -.15(xe)-.15 G -(-).15 E(cuted, allo)184 331.2 Q(wing the startup \214les to disco)-.25 +(-).15 E(cuted, allo)184 477.6 Q(wing the startup \214les to disco)-.25 E -.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 -E F1(shift_v)144 348 Q(erbose)-.1 E F0 .501(If set, the)184 360 R F1 -(shift)3.001 E F0 -.2(bu)3.001 G .501 +E F2(shift_v)144 494.4 Q(erbose)-.1 E F1 .501(If set, the)184 506.4 R F2 +(shift)3.001 E F1 -.2(bu)3.001 G .501 (iltin prints an error message when the shift count e).2 F .502 -(xceeds the number)-.15 F(of positional parameters.)184 372 Q F1(sour) -144 388.8 Q(cepath)-.18 E F0 .771(If set, the)184 400.8 R F1(.)3.271 E -F0(\()3.271 E F1(sour)A(ce)-.18 E F0 3.271(\)b)C .771(uiltin uses the v) --3.471 F .771(alue of)-.25 F F2 -.666(PA)3.27 G(TH)-.189 E F0 .77 +(xceeds the number)-.15 F(of positional parameters.)184 518.4 Q F2(sour) +144 535.2 Q(cepath)-.18 E F1 .771(If set, the)184 547.2 R F2(.)3.271 E +F1(\()3.271 E F2(sour)A(ce)-.18 E F1 3.271(\)b)C .771(uiltin uses the v) +-3.471 F .771(alue of)-.25 F F3 -.666(PA)3.27 G(TH)-.189 E F1 .77 (to \214nd the directory containing the)3.02 F(\214le supplied as an ar) -184 412.8 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E -(ault.)-.1 E F1 -.1(va)144 429.6 S(rr).1 E(edir_close)-.18 E F0 .74(If \ -set, the shell automatically closes \214le descriptors assigned using t\ -he)184 441.6 R/F3 10/Times-Italic@0 SF({varname})3.24 E F0(redi-)3.24 E -.424(rection syntax \(see)184 453.6 R F2(REDIRECTION)2.924 E F0(abo) -2.674 E -.15(ve)-.15 G 2.924(\)i).15 G .424(nstead of lea)-2.924 F .424 -(ving them open when the com-)-.2 F(mand completes.)184 465.6 Q F1 -(xpg_echo)144 482.4 Q F0(If set, the)184 494.4 Q F1(echo)2.5 E F0 -.2 -(bu)2.5 G(iltin e).2 E(xpands backslash-escape sequences by def)-.15 E -(ault.)-.1 E F1(suspend)108 511.2 Q F0([)2.5 E F1<ad66>A F0(])A .909 -(Suspend the e)144 523.2 R -.15(xe)-.15 G .909 +184 559.2 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E +(ault.)-.1 E F2 -.1(va)144 576 S(rr).1 E(edir_close)-.18 E F1 .74(If se\ +t, the shell automatically closes \214le descriptors assigned using the) +184 588 R F0({varname})3.24 E F1(redi-)3.24 E .424(rection syntax \(see) +184 600 R F3(REDIRECTION)2.924 E F1(abo)2.674 E -.15(ve)-.15 G 2.924 +(\)i).15 G .424(nstead of lea)-2.924 F .424 +(ving them open when the com-)-.2 F(mand completes.)184 612 Q F2 +(xpg_echo)144 628.8 Q F1 .073(If set, the)184 640.8 R F2(echo)2.574 E F1 +-.2(bu)2.574 G .074(iltin e).2 F .074 +(xpands backslash-escape sequences by def)-.15 F 2.574(ault. If)-.1 F +(the)2.574 E F2(posix)2.574 E F1(shell)2.574 E(option is also enabled,) +184 652.8 Q F2(echo)2.5 E F1(does not interpret an)2.5 E 2.5(yo)-.15 G +(ptions.)-2.5 E F2(suspend)108 669.6 Q F1([)2.5 E F2<ad66>A F1(])A .91 +(Suspend the e)144 681.6 R -.15(xe)-.15 G .91 (cution of this shell until it recei).15 F -.15(ve)-.25 G 3.41(sa).15 G -F2(SIGCONT)A F0 3.41(signal. A)3.16 F .91(login shell, or a shell)3.41 F -.753(without job control enabled, cannot be suspended; the)144 535.2 R -F1<ad66>3.253 E F0 .752(option can be used to o)3.252 F -.15(ve)-.15 G -.752(rride this and).15 F .107(force the suspension.)144 547.2 R .107(T\ +F3(SIGCONT)-.001 E F1 3.409(signal. A)3.159 F .909 +(login shell, or a shell)3.409 F .752 +(without job control enabled, cannot be suspended; the)144 693.6 R F2 +<ad66>3.252 E F1 .753(option can be used to o)3.253 F -.15(ve)-.15 G +.753(rride this and).15 F .107(force the suspension.)144 705.6 R .107(T\ he return status is 0 unless the shell is a login shell or job control \ -is not en-)5.107 F(abled and)144 559.2 Q F1<ad66>2.5 E F0 -(is not supplied.)2.5 E F1(test)108 576 Q F3 -.2(ex)2.5 G(pr).2 E F1([) -108 588 Q F3 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 .878 -(Return a status of 0 \(true\) or 1 \(f)144 588 R .877 -(alse\) depending on the e)-.1 F -.25(va)-.25 G .877 -(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)144 600 S -(pr).2 E F0 5.53(.E).73 G .53 -(ach operator and operand must be a separate ar)-5.53 F 3.03 -(gument. Expressions)-.18 F .53(are composed of the)3.03 F 1.361 -(primaries described abo)144 612 R 1.661 -.15(ve u)-.15 H(nder).15 E F2 -(CONDITION)3.861 E 1.36(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A -F1(test)5.86 E F0 1.36(does not accept an)3.86 F 3.86(yo)-.15 G(p-)-3.86 -E(tions, nor does it accept and ignore an ar)144 624 Q(gument of)-.18 E -F1<adad>2.5 E F0(as signifying the end of options.)2.5 E .785 -(Expressions may be combined using the follo)144 642 R .786 -(wing operators, listed in decreasing order of prece-)-.25 F 3.412 -(dence. The)144 654 R -.25(eva)3.412 G .912 -(luation depends on the number of ar).25 F .911(guments; see belo)-.18 F -4.711 -.65(w. O)-.25 H .911(perator precedence is).65 F -(used when there are \214v)144 666 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G(ore ar) --2.5 E(guments.)-.18 E F1(!)144 678 Q F3 -.2(ex)2.5 G(pr).2 E F0 -.35 -(Tr)180 678 S(ue if).35 E F3 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 E(alse.) --.1 E F1(\()144 690 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 .26 -(Returns the v)180 690 R .26(alue of)-.25 F F3 -.2(ex)2.76 G(pr).2 E F0 -5.26(.T)C .26(his may be used to o)-5.26 F -.15(ve)-.15 G .26 -(rride the normal precedence of opera-).15 F(tors.)180 702 Q -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(80)185.115 E 0 Cg EP -%%Page: 81 81 +is not en-)5.107 F(abled and)144 717.6 Q F2<ad66>2.5 E F1 +(is not supplied.)2.5 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(82) +193.45 E 0 Cg EP +%%Page: 83 83 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 -/Times-Italic@0 SF -.2(ex)144 84 S(pr1).2 E F0<ad>2.5 E/F2 10 -/Times-Bold@0 SF(a)A F1 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 96 S -(ue if both).35 E F1 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F1 -.2(ex)2.5 G -(pr2).2 E F0(are true.)2.52 E F1 -.2(ex)144 108 S(pr1).2 E F0<ad>2.5 E -F2(o)A F1 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 120 S(ue if either).35 E -F1 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F1 -.2(ex)2.5 G(pr2).2 E F0 -(is true.)2.52 E F2(test)144 136.8 Q F0(and)2.5 E F2([)2.5 E F0 -.25 -(eva)2.5 G(luate conditional e).25 E +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(test)108 84 Q F0 -.2(ex)2.5 G +(pr).2 E F2([)108 96 Q F0 -.2(ex)2.5 G(pr).2 E F2(])2.5 E F1 .877 +(Return a status of 0 \(true\) or 1 \(f)144 96 R .878 +(alse\) depending on the e)-.1 F -.25(va)-.25 G .878 +(luation of the conditional e).25 F(xpression)-.15 E F0 -.2(ex)144 108 S +(pr).2 E F1 5.53(.E).73 G .53 +(ach operator and operand must be a separate ar)-5.53 F 3.03 +(gument. Expressions)-.18 F .53(are composed of the)3.03 F 1.36 +(primaries described abo)144 120 R 1.66 -.15(ve u)-.15 H(nder).15 E/F3 9 +/Times-Bold@0 SF(CONDITION)3.86 E 1.36(AL EXPRESSIONS)-.18 F/F4 9 +/Times-Roman@0 SF(.)A F2(test)5.86 E F1 1.361(does not accept an)3.86 F +3.861(yo)-.15 G(p-)-3.861 E(tions, nor does it accept and ignore an ar) +144 132 Q(gument of)-.18 E F2<adad>2.5 E F1 +(as signifying the end of options.)2.5 E .786 +(Expressions may be combined using the follo)144 148.8 R .785 +(wing operators, listed in decreasing order of prece-)-.25 F 3.411 +(dence. The)144 160.8 R -.25(eva)3.411 G .911 +(luation depends on the number of ar).25 F .912(guments; see belo)-.18 F +4.712 -.65(w. O)-.25 H .912(perator precedence is).65 F +(used when there are \214v)144 172.8 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G +(ore ar)-2.5 E(guments.)-.18 E F2(!)144 184.8 Q F0 -.2(ex)2.5 G(pr).2 E +F1 -.35(Tr)180 184.8 S(ue if).35 E F0 -.2(ex)2.5 G(pr).2 E F1(is f)3.23 +E(alse.)-.1 E F2(\()144 196.8 Q F0 -.2(ex)2.5 G(pr).2 E F2(\))2.5 E F1 +.26(Returns the v)180 196.8 R .26(alue of)-.25 F F0 -.2(ex)2.76 G(pr).2 +E F1 5.26(.T)C .26(his may be used to o)-5.26 F -.15(ve)-.15 G .26 +(rride the normal precedence of opera-).15 F(tors.)180 208.8 Q F0 -.2 +(ex)144 220.8 S(pr1).2 E F1<ad>2.5 E F2(a)A F0 -.2(ex)2.5 G(pr2).2 E F1 +-.35(Tr)180 232.8 S(ue if both).35 E F0 -.2(ex)2.5 G(pr1).2 E F1(and)2.5 +E F0 -.2(ex)2.5 G(pr2).2 E F1(are true.)2.52 E F0 -.2(ex)144 244.8 S +(pr1).2 E F1<ad>2.5 E F2(o)A F0 -.2(ex)2.5 G(pr2).2 E F1 -.35(Tr)180 +256.8 S(ue if either).35 E F0 -.2(ex)2.5 G(pr1).2 E F1(or)2.5 E F0 -.2 +(ex)2.5 G(pr2).2 E F1(is true.)2.52 E F2(test)144 273.6 Q F1(and)2.5 E +F2([)2.5 E F1 -.25(eva)2.5 G(luate conditional e).25 E (xpressions using a set of rules based on the number of ar)-.15 E -(guments.)-.18 E 2.5(0a)144 154.8 S -.18(rg)-2.5 G(uments).18 E(The e) -180 166.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 178.8 S -.18 -(rg)-2.5 G(ument).18 E(The e)180 190.8 Q +(guments.)-.18 E 2.5(0a)144 290.4 S -.18(rg)-2.5 G(uments).18 E(The e) +180 302.4 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 314.4 S -.18 +(rg)-2.5 G(ument).18 E(The e)180 326.4 Q (xpression is true if and only if the ar)-.15 E(gument is not null.)-.18 -E 2.5(2a)144 202.8 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar) -180 214.8 R .37(gument is)-.18 F F2(!)2.87 E F0 2.87(,t)C .37(he e)-2.87 +E 2.5(2a)144 338.4 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar) +180 350.4 R .37(gument is)-.18 F F2(!)2.87 E F1 2.87(,t)C .37(he e)-2.87 F .37(xpression is true if and only if the second ar)-.15 F .37 -(gument is null.)-.18 F .379(If the \214rst ar)180 226.8 R .38 -(gument is one of the unary conditional operators listed abo)-.18 F .68 --.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0 SF(CONDI-)2.88 E(TION)180 -238.8 Q .553(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(,)A F0 .552 -(the e)2.802 F .552(xpression is true if the unary test is true.)-.15 F -.552(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 250.8 Q +(gument is null.)-.18 F .38(If the \214rst ar)180 362.4 R .38 +(gument is one of the unary conditional operators listed abo)-.18 F .679 +-.15(ve u)-.15 H(nder).15 E F3(CONDI-)2.879 E(TION)180 374.4 Q .552 +(AL EXPRESSIONS)-.18 F F4(,)A F1 .552(the e)2.802 F .552 +(xpression is true if the unary test is true.)-.15 F .552 +(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 386.4 Q (alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E -(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 262.8 S -.18(rg)-2.5 G -(uments).18 E .236(The follo)180 274.8 R .236 +(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 398.4 S -.18(rg)-2.5 G +(uments).18 E .236(The follo)180 410.4 R .236 (wing conditions are applied in the order listed.)-.25 F .236 (If the second ar)5.236 F .236(gument is one of)-.18 F .855 -(the binary conditional operators listed abo)180 286.8 R 1.155 -.15 +(the binary conditional operators listed abo)180 422.4 R 1.155 -.15 (ve u)-.15 H(nder).15 E F3(CONDITION)3.355 E .855(AL EXPRESSIONS)-.18 F -F4(,)A F0(the)3.104 E .578(result of the e)180 298.8 R .578(xpression i\ +F4(,)A F1(the)3.105 E .579(result of the e)180 434.4 R .578(xpression i\ s the result of the binary test using the \214rst and third ar)-.15 F -(guments)-.18 E 1.333(as operands.)180 310.8 R(The)6.333 E F2<ad61>3.833 -E F0(and)3.833 E F2<ad6f>3.832 E F0 1.332 +(guments)-.18 E 1.332(as operands.)180 446.4 R(The)6.332 E F2<ad61>3.832 +E F1(and)3.832 E F2<ad6f>3.832 E F1 1.333 (operators are considered binary operators when there are)3.832 F .558 -(three ar)180 322.8 R 3.058(guments. If)-.18 F .558(the \214rst ar)3.058 -F .558(gument is)-.18 F F2(!)3.058 E F0 3.058(,t)C .558(he v)-3.058 F +(three ar)180 458.4 R 3.058(guments. If)-.18 F .558(the \214rst ar)3.058 +F .558(gument is)-.18 F F2(!)3.058 E F1 3.058(,t)C .558(he v)-3.058 F .558(alue is the ne)-.25 F -.05(ga)-.15 G .558(tion of the tw).05 F -(o-ar)-.1 E(gument)-.18 E .521(test using the second and third ar)180 -334.8 R 3.021(guments. If)-.18 F .521(the \214rst ar)3.021 F .52 -(gument is e)-.18 F(xactly)-.15 E F2(\()3.02 E F0 .52(and the third)3.02 -F(ar)180 346.8 Q .485(gument is e)-.18 F(xactly)-.15 E F2(\))2.985 E F0 -2.985(,t)C .485(he result is the one-ar)-2.985 F .485 +(o-ar)-.1 E(gument)-.18 E .52(test using the second and third ar)180 +470.4 R 3.021(guments. If)-.18 F .521(the \214rst ar)3.021 F .521 +(gument is e)-.18 F(xactly)-.15 E F2(\()3.021 E F1 .521(and the third) +3.021 F(ar)180 482.4 Q .485(gument is e)-.18 F(xactly)-.15 E F2(\))2.985 +E F1 2.985(,t)C .485(he result is the one-ar)-2.985 F .485 (gument test of the second ar)-.18 F 2.985(gument. Other)-.18 F(-)-.2 E -(wise, the e)180 358.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144 -370.8 S -.18(rg)-2.5 G(uments).18 E .43(The follo)180 382.8 R .43 -(wing conditions are applied in the order listed.)-.25 F .429 -(If the \214rst ar)5.429 F .429(gument is)-.18 F F2(!)2.929 E F0 2.929 -(,t)C .429(he re-)-2.929 F 1.314(sult is the ne)180 394.8 R -.05(ga)-.15 -G 1.314(tion of the three-ar).05 F 1.314(gument e)-.18 F 1.314 -(xpression composed of the remaining ar)-.15 F(gu-)-.18 E 2.745 -(ments. the)180 406.8 R(tw)2.745 E(o-ar)-.1 E .245 -(gument test using the second and third ar)-.18 F 2.744(guments. If)-.18 -F .244(the \214rst ar)2.744 F(gument)-.18 E .309(is e)180 418.8 R -(xactly)-.15 E F2(\()2.809 E F0 .309(and the fourth ar)2.809 F .309 -(gument is e)-.18 F(xactly)-.15 E F2(\))2.809 E F0 2.809(,t)C .31 -(he result is the tw)-2.809 F(o-ar)-.1 E .31(gument test of the)-.18 F -.184(second and third ar)180 430.8 R 2.684(guments. Otherwise,)-.18 F -.184(the e)2.684 F .183(xpression is parsed and e)-.15 F -.25(va)-.25 G -.183(luated according).25 F(to precedence using the rules listed abo)180 -442.8 Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 454.8 S 2.5(rm)-2.5 G(ore ar) --2.5 E(guments)-.18 E 1.635(The e)180 466.8 R 1.635 +(wise, the e)180 494.4 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144 +506.4 S -.18(rg)-2.5 G(uments).18 E .429(The follo)180 518.4 R .429 +(wing conditions are applied in the order listed.)-.25 F .43 +(If the \214rst ar)5.429 F .43(gument is)-.18 F F2(!)2.93 E F1 2.93(,t)C +.43(he re-)-2.93 F 1.315(sult is the ne)180 530.4 R -.05(ga)-.15 G 1.314 +(tion of the three-ar).05 F 1.314(gument e)-.18 F 1.314 +(xpression composed of the remaining ar)-.15 F(gu-)-.18 E 2.744 +(ments. the)180 542.4 R(tw)2.744 E(o-ar)-.1 E .245 +(gument test using the second and third ar)-.18 F 2.745(guments. If)-.18 +F .245(the \214rst ar)2.745 F(gument)-.18 E .31(is e)180 554.4 R(xactly) +-.15 E F2(\()2.81 E F1 .31(and the fourth ar)2.81 F .31(gument is e)-.18 +F(xactly)-.15 E F2(\))2.809 E F1 2.809(,t)C .309(he result is the tw) +-2.809 F(o-ar)-.1 E .309(gument test of the)-.18 F .183 +(second and third ar)180 566.4 R 2.683(guments. Otherwise,)-.18 F .184 +(the e)2.684 F .184(xpression is parsed and e)-.15 F -.25(va)-.25 G .184 +(luated according).25 F(to precedence using the rules listed abo)180 +578.4 Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 590.4 S 2.5(rm)-2.5 G(ore ar) +-2.5 E(guments)-.18 E 1.635(The e)180 602.4 R 1.635 (xpression is parsed and e)-.15 F -.25(va)-.25 G 1.635 (luated according to precedence using the rules listed).25 F(abo)180 -478.8 Q -.15(ve)-.15 G(.).15 E(When used with)144 496.8 Q F2(test)2.5 E -F0(or)2.5 E F2([)2.5 E F0 2.5(,t)C(he)-2.5 E F2(<)2.5 E F0(and)2.5 E F2 -(>)2.5 E F0(operators sort le)2.5 E -(xicographically using ASCII ordering.)-.15 E F2(times)108 513.6 Q F0 +614.4 Q -.15(ve)-.15 G(.).15 E .216(When the shell is in)144 631.2 R F0 +.216(posix mode)2.716 F F1 2.716(,o)C 2.716(ri)-2.716 G 2.716(ft)-2.716 +G .216(he e)-2.716 F .216(xpression is part of the)-.15 F F2([[)2.716 E +F1 .216(command, the)2.716 F F2(<)2.717 E F1(and)2.717 E F2(>)2.717 E F1 +(opera-)2.717 E .728(tors sort using the current locale.)144 643.2 R +.728(If the shell is not in)5.728 F F0 .728(posix mode)3.228 F F1 3.228 +(,t)C(he)-3.228 E F2(test)3.228 E F1(and)3.228 E F2([)3.228 E F1 .727 +(commands sort)3.227 F(le)144 655.2 Q +(xicographically using ASCII ordering.)-.15 E F2(times)108 672 Q F1 1.229(Print the accumulated user and system times for the shell and for\ - processes run from the shell.)144 513.6 R(The return status is 0.)144 -525.6 Q F2(trap)108 542.4 Q F0([)2.5 E F2(\255lp)A F0 2.5(][)C([)-2.5 E -F1(ar)A(g)-.37 E F0(])A F1(sigspec)2.5 E F0(...])2.5 E .682(The command) -144 554.4 R F1(ar)3.512 E(g)-.37 E F0 .682(is to be read and e)3.402 F --.15(xe)-.15 G .682(cuted when the shell recei).15 F -.15(ve)-.25 G -3.183(ss).15 G(ignal\(s\))-3.183 E F1(sigspec)3.523 E F0 5.683(.I).31 G -(f)-5.683 E F1(ar)3.513 E(g)-.37 E F0(is)3.403 E .609 -(absent \(and there is a single)144 566.4 R F1(sigspec)3.108 E F0 3.108 -(\)o)C(r)-3.108 E F2<ad>3.108 E F0 3.108(,e)C .608 -(ach speci\214ed signal is reset to its original disposition)-3.108 F -.658(\(the v)144 578.4 R .658(alue it had upon entrance to the shell\).) --.25 F(If)5.658 E F1(ar)3.488 E(g)-.37 E F0 .659 -(is the null string the signal speci\214ed by each)3.378 F F1(sigspec) -144.34 590.4 Q F0 .581 -(is ignored by the shell and by the commands it in)3.391 F -.2(vo)-.4 G --.1(ke).2 G 3.08(s. If).1 F F1(ar)3.41 E(g)-.37 E F0 .58 -(is not present and)3.3 F F2<ad70>3.08 E F0(has)3.08 E 1.214 -(been supplied, then the trap commands associated with each)144 602.4 R -F1(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215 -F(gu-)-.18 E .86(ments are supplied or if only)144 614.4 R F2<ad70>3.36 -E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F2(trap)3.36 E F0 .86 -(prints the list of commands associated with each)3.36 F 2.83 -(signal. The)144 626.4 R F2<ad6c>2.83 E F0 .33(option causes the shell \ -to print a list of signal names and their corresponding num-)2.83 F -4.311(bers. Each)144 638.4 R F1(sigspec)4.651 E F0 1.811 -(is either a signal name de\214ned in <)4.621 F F1(signal.h)A F0 1.81 -(>, or a signal number)B 6.81(.S)-.55 G(ignal)-6.81 E -(names are case insensiti)144 650.4 Q .3 -.15(ve a)-.25 H(nd the).15 E -F3(SIG)2.5 E F0(pre\214x is optional.)2.25 E .666(If a)144 668.4 R F1 -(sigspec)3.506 E F0(is)3.476 E F3(EXIT)3.166 E F0 .666 -(\(0\) the command)2.916 F F1(ar)3.496 E(g)-.37 E F0 .666(is e)3.386 F --.15(xe)-.15 G .666(cuted on e).15 F .667(xit from the shell.)-.15 F -.667(If a)5.667 F F1(sigspec)3.507 E F0(is)3.477 E F3(DE-)3.167 E -.09 -(BU)144 680.4 S(G).09 E F4(,)A F0 .484(the command)2.734 F F1(ar)3.314 E -(g)-.37 E F0 .484(is e)3.204 F -.15(xe)-.15 G .484(cuted before e).15 F --.15(ve)-.25 G(ry).15 E F1 .483(simple command)2.984 F F0(,)A F1(for) -2.983 E F0(command,)2.983 E F1(case)2.983 E F0(command,)2.983 E F1 -(select)144 692.4 Q F0 .562(command, e)3.062 F -.15(ve)-.25 G .563 -(ry arithmetic).15 F F1(for)3.063 E F0 .563 -(command, and before the \214rst command e)3.063 F -.15(xe)-.15 G .563 -(cutes in a shell).15 F .623(function \(see)144 704.4 R F3 .622 -(SHELL GRAMMAR)3.122 F F0(abo)2.872 E -.15(ve)-.15 G 3.122(\). Refer).15 -F .622(to the description of the)3.122 F F2(extdeb)3.122 E(ug)-.2 E F0 -.622(option to the)3.122 F F2(shopt)144 716.4 Q F0 -.2(bu)2.996 G .496 -(iltin for details of its ef).2 F .496(fect on the)-.25 F F2(DEB)2.996 E -(UG)-.1 E F0 2.996(trap. If)2.996 F(a)2.996 E F1(sigspec)3.336 E F0(is) -3.306 E F3(RETURN)2.996 E F4(,)A F0 .496(the command)2.746 F F1(ar) -144.33 728.4 Q(g)-.37 E F0 .18(is e)2.9 F -.15(xe)-.15 G .18 -(cuted each time a shell function or a script e).15 F -.15(xe)-.15 G .18 -(cuted with the).15 F F2(.)2.68 E F0(or)2.68 E F2(sour)2.68 E(ce)-.18 E -F0 -.2(bu)2.68 G .18(iltins \214nishes).2 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(81)185.115 E 0 Cg EP -%%Page: 82 82 + processes run from the shell.)144 672 R(The return status is 0.)144 684 +Q F2(trap)108 700.8 Q F1([)2.5 E F2(\255lp)A F1 2.5(][)C([)-2.5 E F0 +(action)A F1(])A F0(sigspec)2.5 E F1 1.666(...)2.5 G(])-1.666 E(The)144 +712.8 Q F0(action)3.734 E F1 .903(is a command that is read and e)3.644 +F -.15(xe)-.15 G .903(cuted when the shell recei).15 F -.15(ve)-.25 G +3.403(ss).15 G(ignal\(s\))-3.403 E F0(sigspec)3.743 E F1 5.903(.I).31 G +(f)-5.903 E F0(action)144.33 724.8 Q F1 1.083 +(is absent \(and there is a single)3.823 F F0(sigspec)3.583 E F1 3.583 +(\)o)C(r)-3.583 E F2<ad>3.583 E F1 3.583(,e)C 1.084 +(ach speci\214ed signal is reset to its original)-3.583 F(GNU Bash 5.3) +72 768 Q(2024 March 29)144.29 E(83)193.45 E 0 Cg EP +%%Page: 84 84 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.15(exe)144 84 S -(cuting.).15 E .96(If a)144 102 R/F1 10/Times-Italic@0 SF(sigspec)3.8 E -F0(is)3.77 E/F2 9/Times-Bold@0 SF(ERR)3.46 E/F3 9/Times-Roman@0 SF(,)A -F0 .96(the command)3.21 F F1(ar)3.791 E(g)-.37 E F0 .961(is e)3.681 F --.15(xe)-.15 G .961(cuted whene).15 F -.15(ve)-.25 G 3.461(rap).15 G -.961(ipeline \(which may consist of a)-3.461 F .185(single simple comma\ -nd\), a list, or a compound command returns a non\255zero e)144 114 R -.184(xit status, subject to)-.15 F .451(the follo)144 126 R .451 -(wing conditions.)-.25 F(The)5.451 E F2(ERR)2.951 E F0 .451 -(trap is not e)2.701 F -.15(xe)-.15 G .451(cuted if the f).15 F .452 -(ailed command is part of the com-)-.1 F .388 -(mand list immediately follo)144 138 R .388(wing a)-.25 F/F4 10 -/Times-Bold@0 SF(while)2.888 E F0(or)2.888 E F4(until)2.888 E F0 -.1(ke) -2.888 G(yw)-.05 E .388(ord, part of the test in an)-.1 F F1(if)2.897 E -F0 .387(statement, part)4.847 F .777(of a command e)144 150 R -.15(xe) --.15 G .778(cuted in a).15 F F4(&&)3.278 E F0(or)3.278 E F4(||)3.278 E -F0 .778(list e)3.278 F .778(xcept the command follo)-.15 F .778 -(wing the \214nal)-.25 F F4(&&)3.278 E F0(or)3.278 E F4(||)3.278 E F0 -3.278(,a)C -.15(ny)-3.278 G 1.28(command in a pipeline b)144 162 R 1.28 -(ut the last, or if the command')-.2 F 3.78(sr)-.55 G 1.28(eturn v)-3.78 -F 1.28(alue is being in)-.25 F -.15(ve)-.4 G 1.28(rted using).15 F F4(!) -3.78 E F0(.)A(These are the same conditions obe)144 174 Q(yed by the) --.15 E F4(err)2.5 E(exit)-.18 E F0(\()2.5 E F4<ad65>A F0 2.5(\)o)C -(ption.)-2.5 E .132 -(Signals ignored upon entry to the shell cannot be trapped or reset.)144 -192 R -.35(Tr)5.133 G .133(apped signals that are not be-).35 F .117 -(ing ignored are reset to their original v)144 204 R .117 -(alues in a subshell or subshell en)-.25 F .117 -(vironment when one is cre-)-.4 F 2.5(ated. The)144 216 R -(return status is f)2.5 E(alse if an)-.1 E(y)-.15 E F1(sigspec)2.84 E F0 -(is in)2.81 E -.25(va)-.4 G(lid; otherwise).25 E F4(trap)2.5 E F0 -(returns true.)2.5 E F4(type)108 232.8 Q F0([)2.5 E F4(\255aftpP)A F0(]) -A F1(name)2.5 E F0([)2.5 E F1(name)A F0(...])2.5 E -.4(Wi)144 244.8 S -.173(th no options, indicate ho).4 F 2.673(we)-.25 G(ach)-2.673 E F1 -(name)3.033 E F0 -.1(wo)2.853 G .174 -(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F -F4<ad74>144 256.8 Q F0 .715(option is used,)3.215 F F4(type)3.215 E F0 -.715(prints a string which is one of)3.215 F F1(alias)3.545 E F0(,).27 E -F1 -.1(ke)3.215 G(ywor)-.2 E(d)-.37 E F0(,).77 E F1(function)5.185 E F0 -(,).24 E F1 -.2(bu)3.215 G(iltin).2 E F0 3.215(,o).24 G(r)-3.215 E F1 -(\214le)5.125 E F0(if)3.395 E F1(name)144.36 268.8 Q F0 .086 -(is an alias, shell reserv)2.766 F .086(ed w)-.15 F .086 -(ord, function, b)-.1 F .087(uiltin, or disk \214le, respecti)-.2 F -.15 -(ve)-.25 G(ly).15 E 5.087(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F1 -(name)2.947 E F0 .087(is not)2.767 F .119 -(found, then nothing is printed, and an e)144 280.8 R .118 -(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F -F4<ad70>2.618 E F0 .118(option is used,)2.618 F F4(type)2.618 E F0 .855 -(either returns the name of the disk \214le that w)144 292.8 R .855 -(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F1(name)3.715 E F0 -.855(were speci\214ed as a com-)3.535 F .529(mand name, or nothing if) -144 304.8 R/F5 10/Courier@0 SF .528(type -t name)3.028 F F0 -.1(wo)3.028 -G .528(uld not return).1 F F1(\214le)4.938 E F0 5.528(.T).18 G(he)-5.528 -E F4<ad50>3.028 E F0 .528(option forces a)3.028 F F2 -.666(PA)3.028 G -(TH)-.189 E F0 .006(search for each)144 316.8 R F1(name)2.506 E F0 2.506 -(,e)C -.15(ve)-2.756 G 2.506(ni).15 G(f)-2.506 E F5 .007(type -t name) -2.506 F F0 -.1(wo)2.507 G .007(uld not return).1 F F1(\214le)4.417 E F0 -5.007(.I).18 G 2.507(fac)-5.007 G .007(ommand is hashed,)-2.507 F F4 -<ad70>2.507 E F0(and)144 328.8 Q F4<ad50>3.231 E F0 .731 -(print the hashed v)3.231 F .73 -(alue, which is not necessarily the \214le that appears \214rst in)-.25 -F F2 -.666(PA)3.23 G(TH)-.189 E F3(.)A F0 .73(If the)5.23 F F4<ad61>144 -340.8 Q F0 .823(option is used,)3.323 F F4(type)3.323 E F0 .824 -(prints all of the places that contain an e)3.323 F -.15(xe)-.15 G .824 -(cutable named).15 F F1(name)3.684 E F0 5.824(.T).18 G .824(his in-) --5.824 F 1.176(cludes aliases and functions, if and only if the)144 -352.8 R F4<ad70>3.676 E F0 1.176(option is not also used.)3.676 F 1.176 -(The table of hashed)6.176 F 1.223(commands is not consulted when using) -144 364.8 R F4<ad61>3.723 E F0 6.223(.T)C(he)-6.223 E F4<ad66>3.723 E F0 -1.223(option suppresses shell function lookup, as)3.723 F .326(with the) -144 376.8 R F4(command)2.826 E F0 -.2(bu)2.826 G(iltin.).2 E F4(type) -5.326 E F0 .326(returns true if all of the ar)2.826 F .325 -(guments are found, f)-.18 F .325(alse if an)-.1 F 2.825(ya)-.15 G .325 -(re not)-2.825 F(found.)144 388.8 Q F4(ulimit)108 405.6 Q F0([)2.5 E F4 -(\255HS)A F0(])A F4<ad61>2.5 E(ulimit)108 417.6 Q F0([)2.5 E F4(\255HS)A -F0 2.5(][)C F4(\255bcde\214klmnpqrstuvxPR)-2.5 E(T)-.4 E F0([)2.5 E F1 -(limit)A F0(]])A(Pro)144 429.6 Q .243(vides control o)-.15 F -.15(ve) --.15 G 2.743(rt).15 G .243(he resources a)-2.743 F -.25(va)-.2 G .244 -(ilable to the shell and to processes started by it, on systems).25 F -.944(that allo)144 441.6 R 3.444(ws)-.25 G .944(uch control.)-3.444 F -(The)5.944 E F4<ad48>3.444 E F0(and)3.444 E F4<ad53>3.444 E F0 .943 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E .133(disposition \(the v)144 84 R .132 +(alue it had upon entrance to the shell\).)-.25 F(If)5.132 E F0(action) +2.962 E F1 .132(is the null string the signal spec-)2.872 F +(i\214ed by each)144 96 Q F0(sigspec)2.84 E F1 +(is ignored by the shell and by the commands it in)2.81 E -.2(vo)-.4 G +-.1(ke).2 G(s.).1 E .165(If no ar)144 112.8 R .165 +(guments are supplied,)-.18 F/F2 10/Times-Bold@0 SF(trap)2.665 E F1 .165 +(displays the actions associated with each trapped signal as a set)2.665 +F(of)144 124.8 Q F2(trap)2.57 E F1 .069(commands that can be reused as \ +shell input to restore the current signal dispositions.)2.57 F(If)5.069 +E F2<ad70>2.569 E F1 .473(is gi)144 136.8 R -.15(ve)-.25 G .473(n, and) +.15 F F0(action)3.303 E F1 .473(is not present, then)3.213 F F2(trap) +2.973 E F1 .473(displays the actions associated with each)2.973 F F0 +(sigspec)3.314 E F1(or)3.284 E(,)-.4 E .364 +(if none are supplied, for all trapped signals, as a set of)144 148.8 R +F2(trap)2.864 E F1 .363(commands that can be reused as shell)2.864 F +.207(input to restore the current signal dispositions.)144 160.8 R(The) +5.207 E F2<ad50>2.707 E F1 .207(option beha)2.707 F -.15(ve)-.2 G 2.707 +(ss).15 G(imilarly)-2.707 E 2.707(,b)-.65 G .208(ut displays only)-2.907 +F 1.553(the actions associated with each)144 172.8 R F0(sigspec)4.052 E +F1(ar)4.052 E(gument.)-.18 E F2<ad50>6.552 E F1 1.552 +(requires at least one)4.052 F F0(sigspec)4.052 E F1(ar)4.052 E(gument.) +-.18 E(The)144 184.8 Q F2<ad50>2.726 E F1(or)2.726 E F2<ad70>2.727 E F1 +.227(options to)2.727 F F2(trap)2.727 E F1 .227 +(may be used in a subshell en)2.727 F .227 +(vironment \(e.g., command substitution\))-.4 F .993 +(and, as long as the)144 196.8 R 3.493(ya)-.15 G .993(re used before) +-3.493 F F2(trap)3.493 E F1 .993(is used to change a signal')3.493 F +3.492(sh)-.55 G .992(andling, will display the)-3.492 F +(state of its parent')144 208.8 Q 2.5(st)-.55 G(raps.)-2.5 E(The)144 +225.6 Q F2<ad6c>3.216 E F1 .716(option causes)3.216 F F2(trap)3.216 E F1 +.716(to print a list of signal names and their corresponding numbers.) +3.216 F(Each)5.717 E F0(sigspec)144.34 237.6 Q F1 .709 +(is either a signal name de\214ned in <)3.519 F F0(signal.h)A F1 .709 +(>, or a signal number)B 5.708(.S)-.55 G .708(ignal names are case) +-5.708 F(insensiti)144 249.6 Q .3 -.15(ve a)-.25 H(nd the).15 E/F3 9 +/Times-Bold@0 SF(SIG)2.5 E F1(pre\214x is optional.)2.25 E .091(If a)144 +266.4 R F0(sigspec)2.931 E F1(is)2.901 E F3(EXIT)2.591 E F1 .091 +(\(0\) the command)2.341 F F0(action)2.921 E F1 .091(is e)2.831 F -.15 +(xe)-.15 G .091(cuted on e).15 F .092(xit from the shell.)-.15 F .092 +(If a)5.092 F F0(sigspec)2.932 E F1(is)2.902 E F3(DE-)2.592 E -.09(BU) +144 278.4 S(G).09 E/F4 9/Times-Roman@0 SF(,)A F1 1.245(the command)3.495 +F F0(action)4.075 E F1 1.245(is e)3.985 F -.15(xe)-.15 G 1.244 +(cuted before e).15 F -.15(ve)-.25 G(ry).15 E F0 1.244(simple command) +3.744 F F1(,)A F0(for)3.744 E F1(command,)3.744 E F0(case)3.744 E F1 +(com-)3.744 E(mand,)144 290.4 Q F0(select)2.696 E F1 .196 +(command, \(\( arithmetic command, [[ conditional command, arithmetic) +2.696 F F0(for)2.697 E F1(command,)2.697 E .394 +(and before the \214rst command e)144 302.4 R -.15(xe)-.15 G .393 +(cutes in a shell function \(see).15 F F3 .393(SHELL GRAMMAR)2.893 F F1 +(abo)2.643 E -.15(ve)-.15 G 2.893(\). Refer).15 F .833 +(to the description of the)144 314.4 R F2(extdeb)3.333 E(ug)-.2 E F1 +.833(option to the)3.333 F F2(shopt)3.333 E F1 -.2(bu)3.333 G .834 +(iltin for details of its ef).2 F .834(fect on the)-.25 F F2(DE-)3.334 E +-.1(BU)144 326.4 S(G).1 E F1 2.694(trap. If)2.694 F(a)2.694 E F0 +(sigspec)3.034 E F1(is)3.004 E F3(RETURN)2.694 E F4(,)A F1 .194 +(the command)2.444 F F0(action)3.024 E F1 .194(is e)2.934 F -.15(xe)-.15 +G .193(cuted each time a shell function or).15 F 2.5(as)144 338.4 S +(cript e)-2.5 E -.15(xe)-.15 G(cuted with the).15 E F2(.)2.5 E F1(or)2.5 +E F2(sour)2.5 E(ce)-.18 E F1 -.2(bu)2.5 G(iltins \214nishes e).2 E -.15 +(xe)-.15 G(cuting.).15 E .284(If a)144 355.2 R F0(sigspec)3.124 E F1(is) +3.094 E F3(ERR)2.784 E F4(,)A F1 .284(the command)2.534 F F0(action) +3.114 E F1 .284(is e)3.024 F -.15(xe)-.15 G .284(cuted whene).15 F -.15 +(ve)-.25 G 2.784(rap).15 G .285(ipeline \(which may consist of a)-2.784 +F .185(single simple command\), a list, or a compound command returns a\ + non\255zero e)144 367.2 R .184(xit status, subject to)-.15 F .451 +(the follo)144 379.2 R .451(wing conditions.)-.25 F(The)5.451 E F3(ERR) +2.951 E F1 .451(trap is not e)2.701 F -.15(xe)-.15 G .451 +(cuted if the f).15 F .452(ailed command is part of the com-)-.1 F .388 +(mand list immediately follo)144 391.2 R .388(wing a)-.25 F F2(while) +2.888 E F1(or)2.888 E F2(until)2.888 E F1 -.1(ke)2.888 G(yw)-.05 E .388 +(ord, part of the test in an)-.1 F F0(if)2.897 E F1 .387 +(statement, part)4.847 F .777(of a command e)144 403.2 R -.15(xe)-.15 G +.778(cuted in a).15 F F2(&&)3.278 E F1(or)3.278 E F2(||)3.278 E F1 .778 +(list e)3.278 F .778(xcept the command follo)-.15 F .778 +(wing the \214nal)-.25 F F2(&&)3.278 E F1(or)3.278 E F2(||)3.278 E F1 +3.278(,a)C -.15(ny)-3.278 G 1.28(command in a pipeline b)144 415.2 R +1.28(ut the last, or if the command')-.2 F 3.78(sr)-.55 G 1.28(eturn v) +-3.78 F 1.28(alue is being in)-.25 F -.15(ve)-.4 G 1.28(rted using).15 F +F2(!)3.78 E F1(.)A(These are the same conditions obe)144 427.2 Q +(yed by the)-.15 E F2(err)2.5 E(exit)-.18 E F1(\()2.5 E F2<ad65>A F1 2.5 +(\)o)C(ption.)-2.5 E .069(When the shell is not interacti)144 444 R -.15 +(ve)-.25 G 2.569(,s).15 G .07 +(ignals ignored upon entry to the shell cannot be trapped or reset.) +-2.569 F(Interacti)144 456 Q .952 -.15(ve s)-.25 H .652 +(hells permit trapping signals ignored on entry).15 F 5.651(.T)-.65 G +.651(rapped signals that are not being ig-)-6.001 F .576 +(nored are reset to their original v)144 468 R .576 +(alues in a subshell or subshell en)-.25 F .577 +(vironment when one is created.)-.4 F(The return status is f)144 480 Q +(alse if an)-.1 E(y)-.15 E F0(sigspec)2.84 E F1(is in)2.81 E -.25(va)-.4 +G(lid; otherwise).25 E F2(trap)2.5 E F1(returns true.)2.5 E F2(true)108 +496.8 Q F1(Does nothing, returns a 0 status.)144 496.8 Q F2(type)108 +513.6 Q F1([)2.5 E F2(\255aftpP)A F1(])A F0(name)2.5 E F1([)2.5 E F0 +(name)A F1 1.666(...)2.5 G(])-1.666 E -.4(Wi)144 525.6 S .174 +(th no options, indicate ho).4 F 2.674(we)-.25 G(ach)-2.674 E F0(name) +3.034 E F1 -.1(wo)2.854 G .173 +(uld be interpreted if used as a command name.).1 F .173(If the)5.173 F +F2<ad74>144 537.6 Q F1 .715(option is used,)3.215 F F2(type)3.215 E F1 +.715(prints a string which is one of)3.215 F F0(alias)3.545 E F1(,).27 E +F0 -.1(ke)3.215 G(ywor)-.2 E(d)-.37 E F1(,).77 E F0(function)5.185 E F1 +(,).24 E F0 -.2(bu)3.215 G(iltin).2 E F1 3.215(,o).24 G(r)-3.215 E F0 +(\214le)5.125 E F1(if)3.395 E F0(name)144.36 549.6 Q F1 .378 +(is an alias, shell reserv)3.058 F .377(ed w)-.15 F .377 +(ord, function, b)-.1 F .377(uiltin, or e)-.2 F -.15(xe)-.15 G .377 +(cutable disk \214le, respecti).15 F -.15(ve)-.25 G(ly).15 E 5.377(.I) +-.65 G 2.877(ft)-5.377 G(he)-2.877 E F0(name)144.36 561.6 Q F1 .645 +(is not found, then nothing is printed, and)3.325 F F2(type)3.146 E F1 +.646(returns a non-zero e)3.146 F .646(xit status.)-.15 F .646(If the) +5.646 F F2<ad70>3.146 E F1(op-)3.146 E .642(tion is used,)144 573.6 R F2 +(type)3.142 E F1 .642(either returns the name of the e)3.142 F -.15(xe) +-.15 G .642(cutable \214le that w).15 F .641(ould be found by searching) +-.1 F F2($P)144 585.6 Q -.95(AT)-.74 G(H).95 E F1(if)2.5 E F0(name)2.86 +E F1(were speci\214ed as a command name, or nothing if \231type \255t n\ +ame\232 w)2.68 E .001(ould not return)-.1 F F0(\214le)145.91 597.6 Q F1 +5.259(.T).18 G(he)-5.259 E F2<ad50>2.759 E F1 .259(option forces a)2.759 +F F3 -.666(PA)2.759 G(TH)-.189 E F1 .259(search for each)2.509 F F0 +(name)2.759 E F1 2.759(,e)C -.15(ve)-3.009 G 2.759(ni).15 G 2.759<6699> +-2.759 G .259(type \255t name\232 w)-2.759 F .258(ould not return)-.1 F +F0(\214le)145.91 609.6 Q F1 5.588(.I).18 G 3.088(fac)-5.588 G .588 +(ommand is hashed,)-3.088 F F2<ad70>3.088 E F1(and)3.088 E F2<ad50>3.088 +E F1 .588(print the hashed v)3.088 F .589 +(alue, which is not necessarily the \214le)-.25 F .034 +(that appears \214rst in)144 621.6 R F3 -.666(PA)2.534 G(TH)-.189 E F4 +(.)A F1 .034(If the)4.534 F F2<ad61>2.534 E F1 .034(option is used,) +2.534 F F2(type)2.533 E F1 .033 +(prints all of the places that contain a com-)2.533 F 1.392(mand named) +144 633.6 R F0(name)4.252 E F1 6.392(.T).18 G 1.392 +(his includes aliases, reserv)-6.392 F 1.392(ed w)-.15 F 1.392 +(ords, functions, and b)-.1 F 1.393(uiltins, b)-.2 F 1.393(ut the path) +-.2 F .145(search options \()144 645.6 R F2<ad70>A F1(and)2.644 E F2 +<ad50>2.644 E F1 2.644(\)c)C .144 +(an be supplied to restrict the output to e)-2.644 F -.15(xe)-.15 G .144 +(cutable \214les.).15 F F2(type)5.144 E F1 .144(does not)2.644 F .557 +(consult the table of hashed commands when using)144 657.6 R F2<ad61> +3.057 E F1(with)3.057 E F2<ad70>3.058 E F1 3.058(,a)C .558 +(nd only performs a)-3.058 F F3 -.666(PA)3.058 G(TH)-.189 E F1(search) +2.808 E(for)144 669.6 Q F0(name)2.758 E F1 5.258(.T)C(he)-5.258 E F2 +<ad66>2.758 E F1 .258 +(option suppresses shell function lookup, as with the)2.758 F F2 +(command)2.758 E F1 -.2(bu)2.758 G(iltin.).2 E F2(type)5.258 E F1(re-) +2.758 E(turns true if all of the ar)144 681.6 Q(guments are found, f) +-.18 E(alse if an)-.1 E 2.5(ya)-.15 G(re not found.)-2.5 E F2(ulimit)108 +698.4 Q F1([)2.5 E F2(\255HS)A F1(])A F2<ad61>2.5 E F1(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(84)193.45 E 0 Cg EP +%%Page: 85 85 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(ulimit)108 84 Q F1([)2.5 E F2 +(\255HS)A F1 2.5(][)C F2(\255bcde\214klmnpqrstuvxPR)-2.5 E(T)-.4 E F1([) +2.5 E F0(limit)A F1(]])A(Pro)144 96 Q .243(vides control o)-.15 F -.15 +(ve)-.15 G 2.743(rt).15 G .243(he resources a)-2.743 F -.25(va)-.2 G +.244(ilable to the shell and to processes started by it, on systems).25 +F .944(that allo)144 108 R 3.444(ws)-.25 G .944(uch control.)-3.444 F +(The)5.944 E F2<ad48>3.444 E F1(and)3.444 E F2<ad53>3.444 E F1 .943 (options specify that the hard or soft limit is set for the)3.444 F(gi) -144 453.6 Q -.15(ve)-.25 G 2.708(nr).15 G 2.708(esource. A)-2.708 F .208 -(hard limit cannot be increased by a non-root user once it is set; a so\ -ft limit may)2.708 F .426(be increased up to the v)144 465.6 R .426 -(alue of the hard limit.)-.25 F .425(If neither)5.426 F F4<ad48>2.925 E -F0(nor)2.925 E F4<ad53>2.925 E F0 .425 +144 120 Q -.15(ve)-.25 G 2.708(nr).15 G 2.708(esource. A)-2.708 F .208(\ +hard limit cannot be increased by a non-root user once it is set; a sof\ +t limit may)2.708 F .426(be increased up to the v)144 132 R .426 +(alue of the hard limit.)-.25 F .425(If neither)5.426 F F2<ad48>2.925 E +F1(nor)2.925 E F2<ad53>2.925 E F1 .425 (is speci\214ed, both the soft and)2.925 F .139(hard limits are set.)144 -477.6 R .139(The v)5.139 F .139(alue of)-.25 F F1(limit)2.729 E F0 .139 +144 R .139(The v)5.139 F .139(alue of)-.25 F F0(limit)2.729 E F1 .139 (can be a number in the unit speci\214ed for the resource or one)3.319 F -.742(of the special v)144 489.6 R(alues)-.25 E F4(hard)3.242 E F0(,)A F4 -(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F4(unlimited)3.241 E F0 3.241(,w) +.742(of the special v)144 156 R(alues)-.25 E F2(hard)3.242 E F1(,)A F2 +(soft)3.241 E F1 3.241(,o)C(r)-3.241 E F2(unlimited)3.241 E F1 3.241(,w) C .741(hich stand for the current hard limit, the current)-3.241 F .023 -(soft limit, and no limit, respecti)144 501.6 R -.15(ve)-.25 G(ly).15 E -5.023(.I)-.65 G(f)-5.023 E F1(limit)2.613 E F0 .023 +(soft limit, and no limit, respecti)144 168 R -.15(ve)-.25 G(ly).15 E +5.023(.I)-.65 G(f)-5.023 E F0(limit)2.613 E F1 .023 (is omitted, the current v)3.203 F .023 (alue of the soft limit of the re-)-.25 F .985 -(source is printed, unless the)144 513.6 R F4<ad48>3.485 E F0 .984 +(source is printed, unless the)144 180 R F2<ad48>3.485 E F1 .984 (option is gi)3.485 F -.15(ve)-.25 G 3.484(n. When).15 F .984 (more than one resource is speci\214ed, the)3.484 F .7 -(limit name and unit, if appropriate, are printed before the v)144 525.6 -R 3.2(alue. Other)-.25 F .7(options are interpreted as)3.2 F(follo)144 -537.6 Q(ws:)-.25 E F4<ad61>144 549.6 Q F0 -(All current limits are reported; no limits are set)180 549.6 Q F4<ad62> -144 561.6 Q F0(The maximum sock)180 561.6 Q(et b)-.1 E(uf)-.2 E -(fer size)-.25 E F4<ad63>144 573.6 Q F0 -(The maximum size of core \214les created)180 573.6 Q F4<ad64>144 585.6 -Q F0(The maximum size of a process')180 585.6 Q 2.5(sd)-.55 G(ata se) --2.5 E(gment)-.15 E F4<ad65>144 597.6 Q F0 -(The maximum scheduling priority \("nice"\))180 597.6 Q F4<ad66>144 -609.6 Q F0 +(limit name and unit, if appropriate, are printed before the v)144 192 R +3.2(alue. Other)-.25 F .7(options are interpreted as)3.2 F(follo)144 204 +Q(ws:)-.25 E F2<ad61>144 216 Q F1 +(All current limits are reported; no limits are set)180 216 Q F2<ad62> +144 228 Q F1(The maximum sock)180 228 Q(et b)-.1 E(uf)-.2 E(fer size) +-.25 E F2<ad63>144 240 Q F1(The maximum size of core \214les created)180 +240 Q F2<ad64>144 252 Q F1(The maximum size of a process')180 252 Q 2.5 +(sd)-.55 G(ata se)-2.5 E(gment)-.15 E F2<ad65>144 264 Q F1 +(The maximum scheduling priority \(\231nice\232\).)180 264 Q F2<ad66>144 +276 Q F1 (The maximum size of \214les written by the shell and its children)180 -609.6 Q F4<ad69>144 621.6 Q F0(The maximum number of pending signals)180 -621.6 Q F4<ad6b>144 633.6 Q F0 -(The maximum number of kqueues that may be allocated)180 633.6 Q F4 -<ad6c>144 645.6 Q F0(The maximum size that may be lock)180 645.6 Q -(ed into memory)-.1 E F4<ad6d>144 657.6 Q F0 -(The maximum resident set size \(man)180 657.6 Q 2.5(ys)-.15 G -(ystems do not honor this limit\))-2.5 E F4<ad6e>144 669.6 Q F0 .791(Th\ -e maximum number of open \214le descriptors \(most systems do not allo) -180 669.6 R 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F -(be set\))180 681.6 Q F4<ad70>144 693.6 Q F0 -(The pipe size in 512-byte blocks \(this may not be set\))180 693.6 Q F4 -<ad71>144 705.6 Q F0 -(The maximum number of bytes in POSIX message queues)180 705.6 Q F4 -<ad72>144 717.6 Q F0(The maximum real-time scheduling priority)180 717.6 -Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(82)185.115 E 0 Cg EP -%%Page: 83 83 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF<ad73>144 84 Q F0(The maximum stack size)180 84 Q F1<ad74>144 96 Q F0 -(The maximum amount of cpu time in seconds)180 96 Q F1<ad75>144 108 Q F0 -(The maximum number of processes a)180 108 Q -.25(va)-.2 G -(ilable to a single user).25 E F1<ad76>144 120 Q F0 .47 -(The maximum amount of virtual memory a)180 120 R -.25(va)-.2 G .47 -(ilable to the shell and, on some systems, to).25 F(its children)180 132 -Q F1<ad78>144 144 Q F0(The maximum number of \214le locks)180 144 Q F1 -<ad50>144 156 Q F0(The maximum number of pseudoterminals)180 156 Q F1 -<ad52>144 168 Q F0(The maximum time a real-time process can run before \ -blocking, in microseconds)180 168 Q F1<ad54>144 180 Q F0 -(The maximum number of threads)180 180 Q(If)144 196.8 Q/F2 10 -/Times-Italic@0 SF(limit)3.058 E F0 .468(is gi)3.648 F -.15(ve)-.25 G -.468(n, and the).15 F F1<ad61>2.968 E F0 .468(option is not used,)2.968 -F F2(limit)2.968 E F0 .468(is the ne)2.968 F 2.968(wv)-.25 G .468 +276 Q F2<ad69>144 288 Q F1(The maximum number of pending signals)180 288 +Q F2<ad6b>144 300 Q F1 +(The maximum number of kqueues that may be allocated)180 300 Q F2<ad6c> +144 312 Q F1(The maximum size that may be lock)180 312 Q(ed into memory) +-.1 E F2<ad6d>144 324 Q F1(The maximum resident set size \(man)180 324 Q +2.5(ys)-.15 G(ystems do not honor this limit\))-2.5 E F2<ad6e>144 336 Q +F1 .791(The maximum number of open \214le descriptors \(most systems do\ + not allo)180 336 R 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F +(be set\))180 348 Q F2<ad70>144 360 Q F1 +(The pipe size in 512-byte blocks \(this may not be set\))180 360 Q F2 +<ad71>144 372 Q F1(The maximum number of bytes in POSIX message queues) +180 372 Q F2<ad72>144 384 Q F1 +(The maximum real-time scheduling priority)180 384 Q F2<ad73>144 396 Q +F1(The maximum stack size)180 396 Q F2<ad74>144 408 Q F1 +(The maximum amount of cpu time in seconds)180 408 Q F2<ad75>144 420 Q +F1(The maximum number of processes a)180 420 Q -.25(va)-.2 G +(ilable to a single user).25 E F2<ad76>144 432 Q F1 .47 +(The maximum amount of virtual memory a)180 432 R -.25(va)-.2 G .47 +(ilable to the shell and, on some systems, to).25 F(its children)180 444 +Q F2<ad78>144 456 Q F1(The maximum number of \214le locks)180 456 Q F2 +<ad50>144 468 Q F1(The maximum number of pseudoterminals)180 468 Q F2 +<ad52>144 480 Q F1(The maximum time a real-time process can run before \ +blocking, in microseconds)180 480 Q F2<ad54>144 492 Q F1 +(The maximum number of threads)180 492 Q(If)144 508.8 Q F0(limit)3.058 E +F1 .468(is gi)3.648 F -.15(ve)-.25 G .468(n, and the).15 F F2<ad61>2.968 +E F1 .468(option is not used,)2.968 F F0(limit)2.968 E F1 .468 +(is the ne)2.968 F 2.968(wv)-.25 G .468 (alue of the speci\214ed resource.)-3.218 F(If)5.468 E .044 -(no option is gi)144 208.8 R -.15(ve)-.25 G .044(n, then).15 F F1<ad66> -2.544 E F0 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045 -(lues are in 1024-byte increments, e)1.11 F .045(xcept for)-.15 F F1 -<ad74>2.545 E F0 2.545(,w)C .045(hich is)-2.545 F .67(in seconds;)144 -220.8 R F1<ad52>3.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F -F1<ad70>3.17 E F0 3.17(,w)C .67(hich is in units of 512-byte blocks;) --3.17 F F1<ad50>3.17 E F0(,)A F1<ad54>3.17 E F0(,)A F1<ad62>3.17 E F0(,) -A F1<ad6b>144 232.8 Q F0(,)A F1<ad6e>3.736 E F0 3.736(,a)C(nd)-3.736 E -F1<ad75>3.736 E F0 3.736(,w)C 1.236(hich are unscaled v)-3.736 F 1.236 -(alues; and, when in posix mode,)-.25 F F1<ad63>3.736 E F0(and)3.736 E -F1<ad66>3.736 E F0 3.736(,w)C 1.237(hich are in)-3.736 F .239 -(512-byte increments.)144 244.8 R .238 +(no option is gi)144 520.8 R -.15(ve)-.25 G .044(n, then).15 F F2<ad66> +2.544 E F1 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045 +(lues are in 1024-byte increments, e)1.11 F .045(xcept for)-.15 F F2 +<ad74>2.545 E F1 2.545(,w)C .045(hich is)-2.545 F .67(in seconds;)144 +532.8 R F2<ad52>3.17 E F1 3.17(,w)C .67(hich is in microseconds;)-3.17 F +F2<ad70>3.17 E F1 3.17(,w)C .67(hich is in units of 512-byte blocks;) +-3.17 F F2<ad50>3.17 E F1(,)A F2<ad54>3.17 E F1(,)A F2<ad62>3.17 E F1(,) +A F2<ad6b>144 544.8 Q F1(,)A F2<ad6e>3.736 E F1 3.736(,a)C(nd)-3.736 E +F2<ad75>3.736 E F1 3.736(,w)C 1.236(hich are unscaled v)-3.736 F 1.236 +(alues; and, when in posix mode,)-.25 F F2<ad63>3.736 E F1(and)3.736 E +F2<ad66>3.736 E F1 3.736(,w)C 1.237(hich are in)-3.736 F .239 +(512-byte increments.)144 556.8 R .238 (The return status is 0 unless an in)5.239 F -.25(va)-.4 G .238 (lid option or ar).25 F .238(gument is supplied, or an)-.18 F -(error occurs while setting a ne)144 256.8 Q 2.5(wl)-.25 G(imit.)-2.5 E -F1(umask)108 273.6 Q F0([)2.5 E F1<ad70>A F0 2.5(][)C F1<ad53>-2.5 E F0 -2.5(][)C F2(mode)-2.5 E F0(])A .18 -(The user \214le-creation mask is set to)144 285.6 R F2(mode)3.06 E F0 -5.18(.I).18 G(f)-5.18 E F2(mode)3.06 E F0(be)2.86 E .18 +(error occurs while setting a ne)144 568.8 Q 2.5(wl)-.25 G(imit.)-2.5 E +F2(umask)108 585.6 Q F1([)2.5 E F2<ad70>A F1 2.5(][)C F2<ad53>-2.5 E F1 +2.5(][)C F0(mode)-2.5 E F1(])A .18 +(The user \214le-creation mask is set to)144 597.6 R F0(mode)3.06 E F1 +5.18(.I).18 G(f)-5.18 E F0(mode)3.06 E F1(be)2.86 E .18 (gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\ therwise it is interpreted as a symbolic mode mask similar to that acce\ -pted by)144 297.6 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144 -309.6 Q F2(mode)3.262 E F0 .382(is omitted, the current v)3.062 F .382 -(alue of the mask is printed.)-.25 F(The)5.382 E F1<ad53>2.882 E F0 .382 +pted by)144 609.6 R F0 -.15(ch)2.566 G(mod).15 E F1(\(1\).).77 E(If)144 +621.6 Q F0(mode)3.262 E F1 .382(is omitted, the current v)3.062 F .382 +(alue of the mask is printed.)-.25 F(The)5.382 E F2<ad53>2.882 E F1 .382 (option causes the mask to be)2.882 F .547 -(printed in symbolic form; the def)144 321.6 R .547 +(printed in symbolic form; the def)144 633.6 R .547 (ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G -(he)-3.047 E F1<ad70>3.047 E F0 .547(option is supplied, and)3.047 F F2 -(mode)144.38 333.6 Q F0 .551 +(he)-3.047 E F2<ad70>3.047 E F1 .547(option is supplied, and)3.047 F F0 +(mode)144.38 645.6 Q F1 .551 (is omitted, the output is in a form that may be reused as input.)3.231 -F .552(The return status is 0 if the)5.552 F(mode w)144 345.6 Q -(as successfully changed or if no)-.1 E F2(mode)2.5 E F0(ar)2.5 E -(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F1 -(unalias)108 362.4 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C F2(name)-2.5 E F0 -(...])2.5 E(Remo)144 374.4 Q 1.058 -.15(ve e)-.15 H(ach).15 E F2(name) -3.258 E F0 .758(from the list of de\214ned aliases.)3.258 F(If)5.758 E -F1<ad61>3.258 E F0 .757(is supplied, all alias de\214nitions are re-) -3.258 F(mo)144 386.4 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E -(alue is true unless a supplied)-.25 E F2(name)2.86 E F0 -(is not a de\214ned alias.)2.68 E F1(unset)108 403.2 Q F0<5bad>2.5 E F1 -(fv)A F0 2.5(][)C<ad>-2.5 E F1(n)A F0 2.5(][)C F2(name)-2.5 E F0(...]) -2.5 E -.15(Fo)144 415.2 S 3.803(re).15 G(ach)-3.803 E F2(name)4.163 E F0 -3.803(,r).18 G(emo)-3.803 E 1.603 -.15(ve t)-.15 H 1.303 -(he corresponding v).15 F 1.303(ariable or function.)-.25 F 1.303 -(If the)6.303 F F1<ad76>3.804 E F0 1.304(option is gi)3.804 F -.15(ve) --.25 G 1.304(n, each).15 F F2(name)144.36 427.2 Q F0 .465 +F .552(The return status is 0 if the)5.552 F(mode w)144 657.6 Q +(as successfully changed or if no)-.1 E F0(mode)2.5 E F1(ar)2.5 E +(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F2 +(unalias)108 674.4 Q F1<5bad>2.5 E F2(a)A F1 2.5(][)C F0(name)-2.5 E F1 +1.666(...)2.5 G(])-1.666 E(Remo)144 686.4 Q 1.058 -.15(ve e)-.15 H(ach) +.15 E F0(name)3.258 E F1 .758(from the list of de\214ned aliases.)3.258 +F(If)5.758 E F2<ad61>3.258 E F1 .757 +(is supplied, all alias de\214nitions are re-)3.258 F(mo)144 698.4 Q +-.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E +(alue is true unless a supplied)-.25 E F0(name)2.86 E F1 +(is not a de\214ned alias.)2.68 E(GNU Bash 5.3)72 768 Q(2024 March 29) +144.29 E(85)193.45 E 0 Cg EP +%%Page: 86 86 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10/Times-Bold@0 SF(unset)108 84 Q F1<5bad>2.5 E +F2(fv)A F1 2.5(][)C<ad>-2.5 E F2(n)A F1 2.5(][)C F0(name)-2.5 E F1 1.666 +(...)2.5 G(])-1.666 E -.15(Fo)144 96 S 3.803(re).15 G(ach)-3.803 E F0 +(name)4.163 E F1 3.803(,r).18 G(emo)-3.803 E 1.603 -.15(ve t)-.15 H +1.303(he corresponding v).15 F 1.303(ariable or function.)-.25 F 1.303 +(If the)6.303 F F2<ad76>3.804 E F1 1.304(option is gi)3.804 F -.15(ve) +-.25 G 1.304(n, each).15 F F0(name)144.36 108 Q F1 .465 (refers to a shell v)3.145 F .464(ariable, and that v)-.25 F .464 (ariable is remo)-.25 F -.15(ve)-.15 G 2.964(d. Read-only).15 F -.25(va) -2.964 G .464(riables may not be un-).25 F 2.768(set. If)144 439.2 R F1 -<ad66>2.768 E F0 .269(is speci\214ed, each)2.768 F F2(name)3.129 E F0 +2.964 G .464(riables may not be un-).25 F 2.768(set. If)144 120 R F2 +<ad66>2.768 E F1 .269(is speci\214ed, each)2.768 F F0(name)3.129 E F1 .269(refers to a shell function, and the function de\214nition is remo) -2.949 F -.15(ve)-.15 G(d.).15 E .404(If the)144 451.2 R F1<ad6e>2.904 E -F0 .404(option is supplied, and)2.904 F F2(name)2.904 E F0 .404(is a v) -2.904 F .404(ariable with the)-.25 F F2(namer)2.904 E(ef)-.37 E F0 -(attrib)2.904 E(ute,)-.2 E F2(name)2.904 E F0 .403(will be unset)2.904 F -.719(rather than the v)144 463.2 R .719(ariable it references.)-.25 F F1 -<ad6e>5.719 E F0 .719(has no ef)3.219 F .719(fect if the)-.25 F F1<ad66> -3.22 E F0 .72(option is supplied.)3.22 F .72(If no options)5.72 F .737 -(are supplied, each)144 475.2 R F2(name)3.237 E F0 .737(refers to a v) +2.949 F -.15(ve)-.15 G(d.).15 E .404(If the)144 132 R F2<ad6e>2.904 E F1 +.404(option is supplied, and)2.904 F F0(name)2.904 E F1 .404(is a v) +2.904 F .404(ariable with the)-.25 F F0(namer)2.904 E(ef)-.37 E F1 +(attrib)2.904 E(ute,)-.2 E F0(name)2.904 E F1 .403(will be unset)2.904 F +.719(rather than the v)144 144 R .719(ariable it references.)-.25 F F2 +<ad6e>5.719 E F1 .719(has no ef)3.219 F .719(fect if the)-.25 F F2<ad66> +3.22 E F1 .72(option is supplied.)3.22 F .72(If no options)5.72 F .737 +(are supplied, each)144 156 R F0(name)3.237 E F1 .737(refers to a v) 3.237 F .737(ariable; if there is no v)-.25 F .736 (ariable by that name, a function with)-.25 F 1.761(that name, if an)144 -487.2 R 3.061 -.65(y, i)-.15 H 4.261(su).65 G 4.261(nset. Each)-4.261 F +168 R 3.061 -.65(y, i)-.15 H 4.261(su).65 G 4.261(nset. Each)-4.261 F 1.761(unset v)4.261 F 1.761(ariable or function is remo)-.25 F -.15(ve) -.15 G 4.262(df).15 G 1.762(rom the en)-4.262 F(vironment)-.4 E 3.172 -(passed to subsequent commands.)144 499.2 R 3.172(If an)8.172 F 5.672 -(yo)-.15 G(f)-5.672 E/F3 9/Times-Bold@0 SF -.27(BA)5.672 G(SH_ALIASES) -.27 E/F4 9/Times-Roman@0 SF(,)A F3 -.27(BA)5.421 G(SH_ARGV0).27 E F4(,)A -F3 -.27(BA)5.421 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 511.2 S -(SH_COMMAND).27 E F4(,)A F3 -.27(BA)11.481 G(SH_SUBSHELL).27 E F4(,)A F3 --.27(BA)11.482 G(SHPID).27 E F4(,)A F3(COMP_W)11.482 E(ORDBREAKS)-.09 E -F4(,)A F3(DIRST)11.482 E -.495(AC)-.81 G(K).495 E F4(,)A F3(EPOCHREAL) -144 523.2 Q(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN) -2.67 E(AME)-.18 E F4(,)A F3(GR)2.67 E(OUPS)-.27 E F4(,)A F3(HISTCMD)2.67 -E F4(,)A F3(LINENO)2.67 E F4(,)A F3(RANDOM)2.67 E F4(,)A F3(SECONDS)144 -535.2 Q F4(,)A F0(or)4.029 E F3(SRANDOM)4.279 E F0 1.779(are unset, the) -4.029 F 4.279(yl)-.15 G 1.779(ose their special properties, e)-4.279 F --.15(ve)-.25 G 4.279(ni).15 G 4.28(ft)-4.279 G(he)-4.28 E 4.28(ya)-.15 G -1.78(re subse-)-4.28 F(quently reset.)144 547.2 Q(The e)5 E -(xit status is true unless a)-.15 E F2(name)2.86 E F0 -(is readonly or may not be unset.)2.68 E F1(wait)108 564 Q F0([)2.5 E F1 -(\255fn)A F0 2.5(][)C F1<ad70>-2.5 E F2(varname)2.5 E F0 2.5(][)C F2 -(id ...)-2.5 E F0(])A -.8(Wa)144 576 S .659(it for each speci\214ed chi\ -ld process and return its termination status.).8 F(Each)5.659 E F2(id) -3.169 E F0 .658(may be a process)3.928 F .008 -(ID or a job speci\214cation; if a job spec is gi)144 588 R -.15(ve)-.25 -G .009(n, all processes in that job').15 F 2.509(sp)-.55 G .009 +(passed to subsequent commands.)144 180 R 3.172(If an)8.172 F 5.672(yo) +-.15 G(f)-5.672 E/F3 9/Times-Bold@0 SF -.27(BA)5.672 G(SH_ALIASES).27 E +/F4 9/Times-Roman@0 SF(,)A F3 -.27(BA)5.421 G(SH_ARGV0).27 E F4(,)A F3 +-.27(BA)5.421 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 192 S(SH_COMMAND).27 +E F4(,)A F3 -.27(BA)11.481 G(SH_SUBSHELL).27 E F4(,)A F3 -.27(BA)11.482 +G(SHPID).27 E F4(,)A F3(COMP_W)11.482 E(ORDBREAKS)-.09 E F4(,)A F3 +(DIRST)11.482 E -.495(AC)-.81 G(K).495 E F4(,)A F3(EPOCHREAL)144 204 Q +(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN)2.67 E(AME) +-.18 E F4(,)A F3(GR)2.67 E(OUPS)-.27 E F4(,)A F3(HISTCMD)2.67 E F4(,)A +F3(LINENO)2.67 E F4(,)A F3(RANDOM)2.67 E F4(,)A F3(SECONDS)144 216 Q F4 +(,)A F1(or)4.029 E F3(SRANDOM)4.279 E F1 1.779(are unset, the)4.029 F +4.279(yl)-.15 G 1.779(ose their special properties, e)-4.279 F -.15(ve) +-.25 G 4.279(ni).15 G 4.28(ft)-4.279 G(he)-4.28 E 4.28(ya)-.15 G 1.78 +(re subse-)-4.28 F(quently reset.)144 228 Q(The e)5 E +(xit status is true unless a)-.15 E F0(name)2.86 E F1 +(is readonly or may not be unset.)2.68 E F2(wait)108 244.8 Q F1([)2.5 E +F2(\255fn)A F1 2.5(][)C F2<ad70>-2.5 E F0(varname)2.5 E F1 2.5(][)C F0 +(id)-2.5 E F1 1.666(...)2.5 G(])-1.666 E -.8(Wa)144 256.8 S .659(it for\ + each speci\214ed child process and return its termination status.).8 F +(Each)5.659 E F0(id)3.169 E F1 .658(may be a process)3.928 F .008 +(ID or a job speci\214cation; if a job spec is gi)144 268.8 R -.15(ve) +-.25 G .009(n, all processes in that job').15 F 2.509(sp)-.55 G .009 (ipeline are w)-2.509 F .009(aited for)-.1 F 5.009(.I)-.55 G(f)-5.009 E -F2(id)144.01 600 Q F0 .442(is not gi)3.712 F -.15(ve)-.25 G(n,).15 E F1 -(wait)2.942 E F0 -.1(wa)2.942 G .441 +F0(id)144.01 280.8 Q F1 .442(is not gi)3.712 F -.15(ve)-.25 G(n,).15 E +F2(wait)2.942 E F1 -.1(wa)2.942 G .441 (its for all running background jobs and the last-e).1 F -.15(xe)-.15 G .441(cuted process substitu-).15 F .597 -(tion, if its process id is the same as)144 612 R F1($!)3.098 E F0 3.098 -(,a)C .598(nd the return status is zero.)-3.098 F .598(If the)5.598 F F1 -<ad6e>3.098 E F0 .598(option is supplied,)3.098 F F1(wait)144 624 Q F0 --.1(wa)3.083 G .583(its for a single job from the list of).1 F F2(id) -3.083 E F0 3.083(so)C 1.383 -.4(r, i)-3.083 H 3.083(fn).4 G(o)-3.083 E -F2(id)3.083 E F0 3.083(sa)C .583(re supplied, an)-3.083 F 3.083(yj)-.15 -G .582(ob, to complete and)-3.083 F .403(returns its e)144 636 R .403 -(xit status.)-.15 F .403(If none of the supplied ar)5.403 F .403 +(tion, if its process id is the same as)144 292.8 R F2($!)3.098 E F1 +3.098(,a)C .598(nd the return status is zero.)-3.098 F .598(If the)5.598 +F F2<ad6e>3.098 E F1 .598(option is supplied,)3.098 F F2(wait)144 304.8 +Q F1 -.1(wa)3.083 G .583(its for a single job from the list of).1 F F0 +(id)3.083 E F1 3.083(so)C 1.383 -.4(r, i)-3.083 H 3.083(fn).4 G(o)-3.083 +E F0(id)3.083 E F1 3.083(sa)C .583(re supplied, an)-3.083 F 3.083(yj) +-.15 G .582(ob, to complete and)-3.083 F .403(returns its e)144 316.8 R +.403(xit status.)-.15 F .403(If none of the supplied ar)5.403 F .403 (guments is a child of the shell, or if no ar)-.18 F(guments)-.18 E .573 -(are supplied and the shell has no unw)144 648 R .573 +(are supplied and the shell has no unw)144 328.8 R .573 (aited-for children, the e)-.1 F .573(xit status is 127.)-.15 F .572 -(If the)5.573 F F1<ad70>3.072 E F0 .572(option is)3.072 F .39 +(If the)5.573 F F2<ad70>3.072 E F1 .572(option is)3.072 F .39 (supplied, the process or job identi\214er of the job for which the e) -144 660 R .39(xit status is returned is assigned to)-.15 F .905(the v) -144 672 R(ariable)-.25 E F2(varname)3.405 E F0 .905 +144 340.8 R .39(xit status is returned is assigned to)-.15 F .905(the v) +144 352.8 R(ariable)-.25 E F0(varname)3.405 E F1 .905 (named by the option ar)3.405 F 3.405(gument. The)-.18 F -.25(va)3.405 G .905(riable will be unset initially).25 F 3.405(,b)-.65 G(efore)-3.405 E -(an)144 684 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39 -(is useful only when the)3.89 F F1<ad6e>3.89 E F0 1.39 -(option is supplied.)3.89 F 1.39(Supplying the)6.39 F F1<ad66>3.89 E F0 -(option,)3.89 E .575(when job control is enabled, forces)144 696 R F1 -(wait)3.075 E F0 .575(to w)3.075 F .575(ait for)-.1 F F2(id)3.075 E F0 +(an)144 364.8 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39 +(is useful only when the)3.89 F F2<ad6e>3.89 E F1 1.39 +(option is supplied.)3.89 F 1.39(Supplying the)6.39 F F2<ad66>3.89 E F1 +(option,)3.89 E .575(when job control is enabled, forces)144 376.8 R F2 +(wait)3.075 E F1 .575(to w)3.075 F .575(ait for)-.1 F F0(id)3.075 E F1 .574(to terminate before returning its status, in-)3.075 F .635 -(stead of returning when it changes status.)144 708 R(If)5.635 E F2(id) -3.145 E F0 .635(speci\214es a non-e)3.905 F .635 -(xistent process or job, the return)-.15 F 1.694(status is 127.)144 720 -R(If)6.694 E F1(wait)4.194 E F0 1.694(is interrupted by a signal, the r\ -eturn status will be greater than 128, as)4.194 F(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(83)185.115 E 0 Cg EP -%%Page: 84 84 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .113 -(described under)144 84 R/F1 10/Times-Bold@0 SF(SIGN)2.613 E(ALS)-.2 E -F0(abo)2.613 E -.15(ve)-.15 G 5.113(.O).15 G .113 -(therwise, the return status is the e)-5.113 F .114 -(xit status of the last process)-.15 F(or job w)144 96 Q(aited for)-.1 E -(.)-.55 E/F2 10.95/Times-Bold@0 SF(SHELL COMP)72 112.8 Q -1.04(AT)-.81 G -(IBILITY MODE)1.04 E F0 1.355(Bash-4.0 introduced the concept of a)108 -124.8 R/F3 10/Times-Italic@0 SF 1.355(shell compatibility le)3.855 F -(vel)-.15 E F0 3.855(,s)C 1.354 -(peci\214ed as a set of options to the shopt)-3.855 F -.2(bu)108 136.8 S -.398(iltin \().2 F F1(compat31)2.898 E F0(,)A F1(compat32)2.898 E F0(,)A -F1(compat40)2.898 E F0(,)A F1(compat41)2.898 E F0 2.898(,a)C .399 -(nd so on\).)-2.898 F .399(There is only one current compatibility)5.399 -F(le)108 148.8 Q -.15(ve)-.25 G 3.254(l-).15 G 3.254(-e)-3.254 G .754 -(ach option is mutually e)-3.254 F(xclusi)-.15 E -.15(ve)-.25 G 5.754 -(.T).15 G .754(he compatibility le)-5.754 F -.15(ve)-.25 G 3.253(li).15 -G 3.253(si)-3.253 G .753(ntended to allo)-3.253 F 3.253(wu)-.25 G .753 -(sers to select be-)-3.253 F(ha)108 160.8 Q 1.083(vior from pre)-.2 F +(stead of returning when it changes status.)144 388.8 R(If)5.635 E F0 +(id)3.145 E F1 .635(speci\214es a non-e)3.905 F .635 +(xistent process or job, the return)-.15 F .802(status is 127.)144 400.8 +R(If)5.801 E F2(wait)3.301 E F1 .801(is interrupted by a signal, the re\ +turn status will be greater than 128, as de-)3.301 F .019(scribed under) +144 412.8 R F2(SIGN)2.519 E(ALS)-.2 E F1(abo)2.519 E -.15(ve)-.15 G +5.019(.O).15 G .019(therwise, the return status is the e)-5.019 F .02 +(xit status of the last process or)-.15 F(job w)144 424.8 Q(aited for) +-.1 E(.)-.55 E/F5 10.95/Times-Bold@0 SF(SHELL COMP)72 441.6 Q -1.04(AT) +-.81 G(IBILITY MODE)1.04 E F1 1.355 +(Bash-4.0 introduced the concept of a)108 453.6 R F0 1.355 +(shell compatibility le)3.855 F(vel)-.15 E F1 3.855(,s)C 1.354 +(peci\214ed as a set of options to the shopt)-3.855 F -.2(bu)108 465.6 S +.621(iltin \().2 F F2(compat31)A F1(,)A F2(compat32)3.121 E F1(,)A F2 +(compat40)3.121 E F1(,)A F2(compat41)3.121 E F1 3.121(,a)C .621 +(nd so on\).)-3.121 F .622(There is only one current compatibility)5.622 +F(le)108 477.6 Q -.15(ve)-.25 G 3.058<6c8a>.15 G .557 +(each option is mutually e)-.001 F(xclusi)-.15 E -.15(ve)-.25 G 5.557 +(.T).15 G .557(he compatibility le)-5.557 F -.15(ve)-.25 G 3.057(li).15 +G 3.057(si)-3.057 G .557(ntended to allo)-3.057 F 3.057(wu)-.25 G .557 +(sers to select be-)-3.057 F(ha)108 489.6 Q 1.083(vior from pre)-.2 F 1.083(vious v)-.25 F 1.083(ersions that is incompatible with ne)-.15 F 1.083(wer v)-.25 F 1.083(ersions while the)-.15 F 3.584(ym)-.15 G 1.084 -(igrate scripts to use)-3.584 F(current features and beha)108 172.8 Q +(igrate scripts to use)-3.584 F(current features and beha)108 501.6 Q (vior)-.2 E 2.5(.I)-.55 G(t')-2.5 E 2.5(si)-.55 G (ntended to be a temporary solution.)-2.5 E 1.457 -(This section does not mention beha)108 189.6 R 1.457 +(This section does not mention beha)108 518.4 R 1.457 (vior that is standard for a particular v)-.2 F 1.456 -(ersion \(e.g., setting)-.15 F F1(compat32)3.956 E F0 .886 -(means that quoting the rhs of the re)108 201.6 R(ge)-.15 E .886 +(ersion \(e.g., setting)-.15 F F2(compat32)3.956 E F1 .886 +(means that quoting the rhs of the re)108 530.4 R(ge)-.15 E .886 (xp matching operator quotes special re)-.15 F(ge)-.15 E .887 -(xp characters in the w)-.15 F(ord,)-.1 E(which is def)108 213.6 Q +(xp characters in the w)-.15 F(ord,)-.1 E(which is def)108 542.4 Q (ault beha)-.1 E(vior in bash-3.2 and subsequent v)-.2 E(ersions\).)-.15 -E .523(If a user enables, say)108 230.4 R(,)-.65 E F1(compat32)3.023 E -F0 3.023(,i)C 3.023(tm)-3.023 G .523(ay af)-3.023 F .523(fect the beha) +E .523(If a user enables, say)108 559.2 R(,)-.65 E F2(compat32)3.023 E +F1 3.023(,i)C 3.023(tm)-3.023 G .523(ay af)-3.023 F .523(fect the beha) -.25 F .523(vior of other compatibility le)-.2 F -.15(ve)-.25 G .522 (ls up to and includ-).15 F .259(ing the current compatibility le)108 -242.4 R -.15(ve)-.25 G 2.759(l. The).15 F .259 +571.2 R -.15(ve)-.25 G 2.759(l. The).15 F .259 (idea is that each compatibility le)2.759 F -.15(ve)-.25 G 2.76(lc).15 G .26(ontrols beha)-2.76 F .26(vior that changed)-.2 F 1.646(in that v)108 -254.4 R 1.646(ersion of)-.15 F F1(bash)4.146 E F0 4.146(,b)C 1.646 +583.2 R 1.646(ersion of)-.15 F F2(bash)4.146 E F1 4.146(,b)C 1.646 (ut that beha)-4.346 F 1.646(vior may ha)-.2 F 1.946 -.15(ve b)-.2 H 1.646(een present in earlier v).15 F 4.146(ersions. F)-.15 F 1.645 (or instance, the)-.15 F .76 -(change to use locale-based comparisons with the)108 266.4 R F1([[)3.261 -E F0 .761(command came in bash-4.1, and earlier v)3.261 F .761 +(change to use locale-based comparisons with the)108 595.2 R F2([[)3.261 +E F1 .761(command came in bash-4.1, and earlier v)3.261 F .761 (ersions used)-.15 F 1.905(ASCII-based comparisons, so enabling)108 -278.4 R F1(compat32)4.405 E F0 1.904 +607.2 R F2(compat32)4.405 E F1 1.904 (will enable ASCII-based comparisons as well.)4.405 F(That)6.904 E .295 -(granularity may not be suf)108 290.4 R .296 +(granularity may not be suf)108 619.2 R .296 (\214cient for all uses, and as a result users should emplo)-.25 F 2.796 (yc)-.1 G .296(ompatibility le)-2.796 F -.15(ve)-.25 G .296(ls care-).15 -F(fully)108 302.4 Q 5(.R)-.65 G(ead the documentation for a particular \ +F(fully)108 631.2 Q 5(.R)-.65 G(ead the documentation for a particular \ feature to \214nd out the current beha)-5 E(vior)-.2 E(.)-.55 E .532 -(Bash-4.3 introduced a ne)108 319.2 R 3.032(ws)-.25 G .531(hell v)-3.032 -F(ariable:)-.25 E/F4 9/Times-Bold@0 SF -.27(BA)3.031 G(SH_COMP).27 E --.855(AT)-.666 G/F5 9/Times-Roman@0 SF(.).855 E F0 .531(The v)5.031 F -.531(alue assigned to this v)-.25 F .531(ariable \(a decimal)-.25 F -.15 -(ve)108 331.2 S .107(rsion number lik).15 F 2.607(e4)-.1 G .107 -(.2, or an inte)-2.607 F .107(ger corresponding to the)-.15 F F1(compat) -2.608 E F3(NN)A F0 .108(option, lik)2.608 F 2.608(e4)-.1 G .108 -(2\) determines the com-)-2.608 F(patibility le)108 343.2 Q -.15(ve)-.25 -G(l.).15 E .388(Starting with bash-4.4, Bash has be)108 360 R .388 -(gun deprecating older compatibility le)-.15 F -.15(ve)-.25 G 2.887 -(ls. Ev).15 F(entually)-.15 E 2.887(,t)-.65 G .387(he options will) --2.887 F(be remo)108 372 Q -.15(ve)-.15 G 2.5(di).15 G 2.5(nf)-2.5 G -.2 -(avo)-2.6 G 2.5(ro).2 G(f)-2.5 E F4 -.27(BA)2.5 G(SH_COMP).27 E -.855 -(AT)-.666 G F5(.).855 E F0 1.163(Bash-5.0 is the \214nal v)108 388.8 R -1.163(ersion for which there will be an indi)-.15 F 1.164 -(vidual shopt option for the pre)-.25 F 1.164(vious v)-.25 F(ersion.) --.15 E(Users should use)108 400.8 Q F4 -.27(BA)2.5 G(SH_COMP).27 E -.855 -(AT)-.666 G F0(on bash-5.0 and later v)3.105 E(ersions.)-.15 E 1.614 -(The follo)108 417.6 R 1.613(wing table describes the beha)-.25 F 1.613 -(vior changes controlled by each compatibility le)-.2 F -.15(ve)-.25 G -4.113(ls).15 G 4.113(etting. The)-4.113 F F1(compat)108 429.6 Q F3(NN)A -F0 1.186(tag is used as shorthand for setting the compatibility le)3.685 -F -.15(ve)-.25 G 3.686(lt).15 G(o)-3.686 E F3(NN)3.686 E F0 1.186 -(using one of the follo)3.686 F(wing)-.25 E 3.807(mechanisms. F)108 -441.6 R 1.307(or v)-.15 F 1.307 -(ersions prior to bash-5.0, the compatibility le)-.15 F -.15(ve)-.25 G -3.806(lm).15 G 1.306(ay be set using the corresponding)-3.806 F F1 -(compat)108 453.6 Q F3(NN)A F0 .502(shopt option.)3.002 F -.15(Fo)5.502 -G 3.002(rb).15 G .502(ash-4.3 and later v)-3.002 F .502(ersions, the) --.15 F F4 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va) -3.607 G .502(riable is preferred, and it).25 F -(is required for bash-5.1 and later v)108 465.6 Q(ersions.)-.15 E F1 -(compat31)108 482.4 Q F0<83>144 494.4 Q(quoting the rhs of the)180 494.4 -Q F1([[)2.5 E F0(command')2.5 E 2.5(sr)-.55 G -.15(eg)-2.5 G -.15(ex).15 -G 2.5(pm).15 G(atching operator \(=~\) has no special ef)-2.5 E(fect) --.25 E F1(compat32)108 511.2 Q F0<83>144 523.2 Q .35 -(interrupting a command list such as "a ; b ; c" causes the e)180 523.2 -R -.15(xe)-.15 G .35(cution of the ne).15 F .35(xt command)-.15 F .017 -(in the list \(in bash-4.0 and later v)180 535.2 R .018 -(ersions, the shell acts as if it recei)-.15 F -.15(ve)-.25 G 2.518(dt) -.15 G .018(he interrupt, so in-)-2.518 F -(terrupting one command in a list aborts the e)180 547.2 Q -.15(xe)-.15 -G(cution of the entire list\)).15 E F1(compat40)108 564 Q F0<83>144 576 -Q(the)180 576 Q F1(<)2.674 E F0(and)2.674 E F1(>)2.673 E F0 .173 -(operators to the)2.673 F F1([[)2.673 E F0 .173 -(command do not consider the current locale when compar)2.673 F(-)-.2 E -.067(ing strings; the)180 588 R 2.567(yu)-.15 G .067(se ASCII ordering.) --2.567 F .068(Bash v)5.068 F .068 -(ersions prior to bash-4.1 use ASCII collation)-.15 F(and)180 600 Q F3 -(str)4.743 E(cmp)-.37 E F0 1.903 -(\(3\); bash-4.1 and later use the current locale').19 F 4.402(sc)-.55 G -1.902(ollation sequence and)-4.402 F F3(str)4.742 E(-)-.2 E(coll)180 612 -Q F0(\(3\).).51 E F1(compat41)108 628.8 Q F0<83>144 640.8 Q(in)180 640.8 -Q F3(posix)3.79 E F0(mode,)3.79 E F1(time)3.79 E F0 1.29(may be follo) -3.79 F 1.29(wed by options and still be recognized as a reserv)-.25 F -(ed)-.15 E -.1(wo)180 652.8 S(rd \(this is POSIX interpretation 267\)).1 -E<83>144 664.8 Q(in)180 664.8 Q F3(posix)2.709 E F0 .208 -(mode, the parser requires that an e)2.709 F -.15(ve)-.25 G 2.708(nn).15 -G .208(umber of single quotes occur in the)-2.708 F F3(wor)2.708 E(d) --.37 E F0 .281(portion of a double-quoted parameter e)180 676.8 R .282 -(xpansion and treats them specially)-.15 F 2.782(,s)-.65 G 2.782(ot) --2.782 G .282(hat charac-)-2.782 F(ters within the single quotes are co\ -nsidered quoted \(this is POSIX interpretation 221\))180 688.8 Q F1 -(compat42)108 705.6 Q F0<83>144 717.6 Q 1.056(the replacement string in\ - double-quoted pattern substitution does not under)180 717.6 R 1.055 -(go quote re-)-.18 F(mo)180 729.6 Q -.25(va)-.15 G(l, as it does in v) -.25 E(ersions after bash-4.2)-.15 E(GNU Bash 5.2)72 768 Q -(2022 September 19)135.955 E(84)185.115 E 0 Cg EP -%%Page: 85 85 +(Bash-4.3 introduced a ne)108 648 R 3.032(ws)-.25 G .531(hell v)-3.032 F +(ariable:)-.25 E F3 -.27(BA)3.031 G(SH_COMP).27 E -.855(AT)-.666 G F4(.) +.855 E F1 .531(The v)5.031 F .531(alue assigned to this v)-.25 F .531 +(ariable \(a decimal)-.25 F -.15(ve)108 660 S .107(rsion number lik).15 +F 2.607(e4)-.1 G .107(.2, or an inte)-2.607 F .107 +(ger corresponding to the)-.15 F F2(compat)2.608 E F0(NN)A F1 .108 +(option, lik)2.608 F 2.608(e4)-.1 G .108(2\) determines the com-)-2.608 +F(patibility le)108 672 Q -.15(ve)-.25 G(l.).15 E .387 +(Starting with bash-4.4,)108 688.8 R F2(bash)2.887 E F1 .387(has be) +2.887 F .387(gun deprecating older compatibility le)-.15 F -.15(ve)-.25 +G 2.887(ls. Ev).15 F(entually)-.15 E 2.887(,t)-.65 G .387 +(he options will)-2.887 F(be remo)108 700.8 Q -.15(ve)-.15 G 2.5(di).15 +G 2.5(nf)-2.5 G -.2(avo)-2.6 G 2.5(ro).2 G(f)-2.5 E F3 -.27(BA)2.5 G +(SH_COMP).27 E -.855(AT)-.666 G F4(.).855 E F1 .647(Bash-5.0 w)108 717.6 +R .647(as the \214nal v)-.1 F .647 +(ersion for which there will be an indi)-.15 F .647 +(vidual shopt option for the pre)-.25 F .648(vious v)-.25 F(ersion.)-.15 +E(Users should control the compatibility le)108 729.6 Q -.15(ve)-.25 G +2.5(lw).15 G(ith)-2.5 E F3 -.27(BA)2.5 G(SH_COMP).27 E -.855(AT)-.666 G +F4(.).855 E F1(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E(86)193.45 E +0 Cg EP +%%Page: 87 87 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E<83>144 84 Q .021 -(in posix mode, single quotes are considered special when e)180 84 R -.021(xpanding the)-.15 F/F1 10/Times-Italic@0 SF(wor)2.521 E(d)-.37 E F0 -.021(portion of a)2.521 F .018(double-quoted parameter e)180 96 R .017 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E 1.614(The follo)108 84 R 1.613 +(wing table describes the beha)-.25 F 1.613 +(vior changes controlled by each compatibility le)-.2 F -.15(ve)-.25 G +4.113(ls).15 G 4.113(etting. The)-4.113 F/F2 10/Times-Bold@0 SF(compat) +108 96 Q F0(NN)A F1 1.186 +(tag is used as shorthand for setting the compatibility le)3.685 F -.15 +(ve)-.25 G 3.686(lt).15 G(o)-3.686 E F0(NN)3.686 E F1 1.186 +(using one of the follo)3.686 F(wing)-.25 E 3.807(mechanisms. F)108 108 +R 1.307(or v)-.15 F 1.307 +(ersions prior to bash-5.0, the compatibility le)-.15 F -.15(ve)-.25 G +3.806(lm).15 G 1.306(ay be set using the corresponding)-3.806 F F2 +(compat)108 120 Q F0(NN)A F1 .502(shopt option.)3.002 F -.15(Fo)5.502 G +3.002(rb).15 G .502(ash-4.3 and later v)-3.002 F .502(ersions, the)-.15 +F/F3 9/Times-Bold@0 SF -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F1 +-.25(va)3.607 G .502(riable is preferred, and it).25 F +(is required for bash-5.1 and later v)108 132 Q(ersions.)-.15 E F2 +(compat31)108 148.8 Q F1<83>144 160.8 Q(quoting the rhs of the)180 160.8 +Q F2([[)2.5 E F1(command')2.5 E 2.5(sr)-.55 G -.15(eg)-2.5 G -.15(ex).15 +G 2.5(pm).15 G(atching operator \(=\001\) has no special ef)-2.5 E(fect) +-.25 E F2(compat32)108 177.6 Q F1<83>144 189.6 Q(the)180 189.6 Q F2(<) +2.674 E F1(and)2.674 E F2(>)2.673 E F1 .173(operators to the)2.673 F F2 +([[)2.673 E F1 .173 +(command do not consider the current locale when compar)2.673 F(-)-.2 E +(ing strings; the)180 201.6 Q 2.5(yu)-.15 G(se ASCII ordering.)-2.5 E F2 +(compat40)108 218.4 Q F1<83>144 230.4 Q(the)180 230.4 Q F2(<)2.673 E F1 +(and)2.673 E F2(>)2.673 E F1 .173(operators to the)2.673 F F2([[)2.673 E +F1 .173(command do not consider the current locale when compar)2.673 F +(-)-.2 E .923(ing strings; the)180 242.4 R 3.423(yu)-.15 G .923 +(se ASCII ordering.)-3.423 F F2(Bash)5.922 E F1 -.15(ve)3.422 G .922 +(rsions prior to bash-4.1 use ASCII colla-).15 F .366(tion and)180 254.4 +R F0(str)3.207 E(cmp)-.37 E F1 .367 +(\(3\); bash-4.1 and later use the current locale').19 F 2.867(sc)-.55 G +.367(ollation sequence and)-2.867 F F0(str)3.207 E(-)-.2 E(coll)180 +266.4 Q F1(\(3\).).51 E F2(compat41)108 283.2 Q F1<83>144 295.2 Q(in)180 +295.2 Q F0(posix)3.79 E F1(mode,)3.79 E F2(time)3.79 E F1 1.29 +(may be follo)3.79 F 1.29 +(wed by options and still be recognized as a reserv)-.25 F(ed)-.15 E -.1 +(wo)180 307.2 S(rd \(this is POSIX interpretation 267\)).1 E<83>144 +319.2 Q(in)180 319.2 Q F0(posix)2.708 E F1 .208 +(mode, the parser requires that an e)2.708 F -.15(ve)-.25 G 2.708(nn).15 +G .208(umber of single quotes occur in the)-2.708 F F0(wor)2.709 E(d) +-.37 E F1 .282(portion of a double-quoted parameter e)180 331.2 R .282 +(xpansion and treats them specially)-.15 F 2.781(,s)-.65 G 2.781(ot) +-2.781 G .281(hat charac-)-2.781 F(ters within the single quotes are co\ +nsidered quoted \(this is POSIX interpretation 221\))180 343.2 Q F2 +(compat42)108 360 Q F1<83>144 372 Q 1.055(the replacement string in dou\ +ble-quoted pattern substitution does not under)180 372 R 1.056 +(go quote re-)-.18 F(mo)180 384 Q -.25(va)-.15 G(l, as it does in v).25 +E(ersions after bash-4.2)-.15 E<83>144 396 Q .021 +(in posix mode, single quotes are considered special when e)180 396 R +.021(xpanding the)-.15 F F0(wor)2.52 E(d)-.37 E F1 .02(portion of a)2.52 +F .017(double-quoted parameter e)180 408 R .017 (xpansion and can be used to quote a closing brace or other spe-)-.15 F -.998(cial character \(this is part of POSIX interpretation 221\); in la\ -ter v)180 108 R .999(ersions, single quotes)-.15 F -(are not special within double-quoted w)180 120 Q(ord e)-.1 E(xpansions) --.15 E/F2 10/Times-Bold@0 SF(compat43)108 136.8 Q F0<83>144 148.8 Q -1.071(the shell does not print a w)180 148.8 R 1.07 -(arning message if an attempt is made to use a quoted com-)-.1 F .71 -(pound assignment as an ar)180 160.8 R .711 -(gument to declare \(e.g., declare -a foo=\010\(1 2\)\010\). Later v) --.18 F(ersions)-.15 E -.1(wa)180 172.8 S -(rn that this usage is deprecated).1 E<83>144 184.8 Q -.1(wo)180 184.8 S -.501(rd e).1 F .501(xpansion errors are considered non-f)-.15 F .501 -(atal errors that cause the current command to)-.1 F -.1(fa)180 196.8 S +.999(cial character \(this is part of POSIX interpretation 221\); in la\ +ter v)180 420 R .998(ersions, single quotes)-.15 F +(are not special within double-quoted w)180 432 Q(ord e)-.1 E(xpansions) +-.15 E F2(compat43)108 448.8 Q F1<83>144 460.8 Q 1.07 +(the shell does not print a w)180 460.8 R 1.071 +(arning message if an attempt is made to use a quoted com-)-.1 F .533 +(pound assignment as an ar)180 472.8 R .533 +(gument to declare \(e.g., declare \255a foo=\010\(1 2\)\010\). Later v) +-.18 F(ersions)-.15 E -.1(wa)180 484.8 S +(rn that this usage is deprecated).1 E<83>144 496.8 Q -.1(wo)180 496.8 S +.5(rd e).1 F .501(xpansion errors are considered non-f)-.15 F .501 +(atal errors that cause the current command to)-.1 F -.1(fa)180 508.8 S .605(il, e).1 F -.15(ve)-.25 G 3.105(ni).15 G 3.105(np)-3.105 G .605 (osix mode \(the def)-3.105 F .605(ault beha)-.1 F .605(vior is to mak) -.2 F 3.105(et)-.1 G .605(hem f)-3.105 F .605 -(atal errors that cause the)-.1 F(shell to e)180 208.8 Q(xit\))-.15 E -<83>144 220.8 Q .355(when e)180 220.8 R -.15(xe)-.15 G .354 -(cuting a shell function, the loop state \(while/until/etc.\)).15 F .354 -(is not reset, so)5.354 F F2(br)2.854 E(eak)-.18 E F0(or)2.854 E F2 -(continue)180 232.8 Q F0 .052 +(atal errors that cause the)-.1 F(shell to e)180 520.8 Q(xit\))-.15 E +<83>144 532.8 Q .354(when e)180 532.8 R -.15(xe)-.15 G .354 +(cuting a shell function, the loop state \(while/until/etc.\)).15 F .355 +(is not reset, so)5.354 F F2(br)2.855 E(eak)-.18 E F1(or)2.855 E F2 +(continue)180 544.8 Q F1 .052 (in that function will break or continue loops in the calling conte) -2.552 F .053(xt. Bash-4.4 and)-.15 F(later reset the loop state to pre) -180 244.8 Q -.15(ve)-.25 G(nt this).15 E F2(compat44)108 261.6 Q F0<83> -144 273.6 Q .719(the shell sets up the v)180 273.6 R .719(alues used by) --.25 F/F3 9/Times-Bold@0 SF -.27(BA)3.219 G(SH_ARGV).27 E F0(and)2.969 E -F3 -.27(BA)3.219 G(SH_ARGC).27 E F0 .719(so the)2.969 F 3.218(yc)-.15 G -.718(an e)-3.218 F(xpand)-.15 E(to the shell')180 285.6 Q 2.5(sp)-.55 G +2.553 F .052(xt. Bash-4.4 and)-.15 F(later reset the loop state to pre) +180 556.8 Q -.15(ve)-.25 G(nt this).15 E F2(compat44)108 573.6 Q F1<83> +144 585.6 Q .719(the shell sets up the v)180 585.6 R .719(alues used by) +-.25 F F3 -.27(BA)3.219 G(SH_ARGV).27 E F1(and)2.969 E F3 -.27(BA)3.219 +G(SH_ARGC).27 E F1 .719(so the)2.969 F 3.219(yc)-.15 G .719(an e)-3.219 +F(xpand)-.15 E(to the shell')180 597.6 Q 2.5(sp)-.55 G (ositional parameters e)-2.5 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(fe)-2.5 G -(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83>144 297.6 Q -2.634(as)180 297.6 S .134(ubshell inherits loops from its parent conte) --2.634 F .135(xt, so)-.15 F F2(br)2.635 E(eak)-.18 E F0(or)2.635 E F2 -(continue)2.635 E F0 .135(will cause the sub-)2.635 F(shell to e)180 -309.6 Q 2.5(xit. Bash-5.0)-.15 F(and later reset the loop state to pre) -2.5 E -.15(ve)-.25 G(nt the e).15 E(xit)-.15 E<83>144 321.6 Q -.25(va) -180 321.6 S .619(riable assignments preceding b).25 F .618(uiltins lik) --.2 F(e)-.1 E F2(export)3.118 E F0(and)3.118 E F2 -.18(re)3.118 G -(adonly).18 E F0 .618(that set attrib)3.118 F .618(utes con-)-.2 F .119 -(tinue to af)180 333.6 R .119(fect v)-.25 F .119 -(ariables with the same name in the calling en)-.25 F .12(vironment e) --.4 F -.15(ve)-.25 G 2.62(ni).15 G 2.62(ft)-2.62 G .12(he shell is)-2.62 -F(not in posix mode)180 345.6 Q F2(compat50)108 362.4 Q F0<83>144 374.4 -Q 1.209(Bash-5.1 changed the w)180 374.4 R(ay)-.1 E F3($RANDOM)3.709 E -F0 1.209(is generated to introduce slightly more random-)3.459 F 1.018 -(ness. If the shell compatibility le)180 386.4 R -.15(ve)-.25 G 3.518 -(li).15 G 3.518(ss)-3.518 G 1.018(et to 50 or lo)-3.518 F(wer)-.25 E -3.518(,i)-.4 G 3.518(tr)-3.518 G -2.15 -.25(ev e)-3.518 H 1.019 -(rts to the method from).25 F .733(bash-5.0 and pre)180 398.4 R .733 -(vious v)-.25 F .732 +(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83>144 609.6 Q +2.635(as)180 609.6 S .135(ubshell inherits loops from its parent conte) +-2.635 F .135(xt, so)-.15 F F2(br)2.635 E(eak)-.18 E F1(or)2.635 E F2 +(continue)2.634 E F1 .134(will cause the sub-)2.634 F(shell to e)180 +621.6 Q 2.5(xit. Bash-5.0)-.15 F(and later reset the loop state to pre) +2.5 E -.15(ve)-.25 G(nt the e).15 E(xit)-.15 E<83>144 633.6 Q -.25(va) +180 633.6 S .618(riable assignments preceding b).25 F .618(uiltins lik) +-.2 F(e)-.1 E F2(export)3.118 E F1(and)3.118 E F2 -.18(re)3.118 G +(adonly).18 E F1 .618(that set attrib)3.118 F .619(utes con-)-.2 F .12 +(tinue to af)180 645.6 R .12(fect v)-.25 F .119 +(ariables with the same name in the calling en)-.25 F .119(vironment e) +-.4 F -.15(ve)-.25 G 2.619(ni).15 G 2.619(ft)-2.619 G .119(he shell is) +-2.619 F(not in posix mode)180 657.6 Q F2(compat50)108 674.4 Q F1<83>144 +686.4 Q 1.209(Bash-5.1 changed the w)180 686.4 R(ay)-.1 E F3($RANDOM) +3.709 E F1 1.209(is generated to introduce slightly more random-)3.459 F +1.019(ness. If the shell compatibility le)180 698.4 R -.15(ve)-.25 G +3.518(li).15 G 3.518(ss)-3.518 G 1.018(et to 50 or lo)-3.518 F(wer)-.25 +E 3.518(,i)-.4 G 3.518(tr)-3.518 G -2.15 -.25(ev e)-3.518 H 1.018 +(rts to the method from).25 F .732(bash-5.0 and pre)180 710.4 R .732 +(vious v)-.25 F .733 (ersions, so seeding the random number generator by assigning a)-.15 F --.25(va)180 410.4 S(lue to).25 E F3(RANDOM)2.5 E F0 -(will produce the same sequence as in bash-5.0)2.25 E<83>144 422.4 Q -.695(If the command hash table is empty)180 422.4 R 3.196(,b)-.65 G .696 -(ash v)-3.196 F .696(ersions prior to bash-5.1 printed an informa-)-.15 -F 1.321(tional message to that ef)180 434.4 R 1.321(fect, e)-.25 F -.15 -(ve)-.25 G 3.821(nw).15 G 1.321 -(hen producing output that can be reused as input.)-3.821 F -(Bash-5.1 suppresses that message when the)180 446.4 Q F2<ad6c>2.5 E F0 -(option is supplied.)2.5 E F2(compat51)108 463.2 Q F0<83>144 475.2 Q -(The)180 475.2 Q F2(unset)2.954 E F0 -.2(bu)2.954 G .454 -(iltin treats attempts to unset array subscripts).2 F F2(@)2.955 E F0 -(and)2.955 E F2(*)2.955 E F0(dif)2.955 E .455(ferently depending)-.25 F -(on whether the array is inde)180 487.2 Q -.15(xe)-.15 G 2.5(do).15 G -2.5(ra)-2.5 G(ssociati)-2.5 E -.15(ve)-.25 G 2.5(,a).15 G(nd dif)-2.5 E -(ferently than in pre)-.25 E(vious v)-.25 E(ersions.)-.15 E/F4 10.95 -/Times-Bold@0 SF(RESTRICTED SHELL)72 504 Q F0(If)108 516 Q F2(bash)3.582 -E F0 1.081(is started with the name)3.581 F F2(rbash)3.581 E F0 3.581 -(,o)C 3.581(rt)-3.581 G(he)-3.581 E F2<ad72>3.581 E F0 1.081 -(option is supplied at in)3.581 F -.2(vo)-.4 G 1.081 -(cation, the shell becomes re-).2 F 2.976(stricted. A)108 528 R .476 -(restricted shell is used to set up an en)2.976 F .476 -(vironment more controlled than the standard shell.)-.4 F .477(It be-) -5.477 F(ha)108 540 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E F2 -(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E -(wing are disallo)-.25 E(wed or not performed:)-.25 E<83>108 556.8 Q -(changing directories with)144 556.8 Q F2(cd)2.5 E F0<83>108 573.6 Q -(setting or unsetting the v)144 573.6 Q(alues of)-.25 E F3(SHELL)2.5 E -/F5 9/Times-Roman@0 SF(,)A F3 -.666(PA)2.25 G(TH)-.189 E F5(,)A F3 -(HISTFILE)2.25 E F5(,)A F3(ENV)2.25 E F5(,)A F0(or)2.25 E F3 -.27(BA)2.5 -G(SH_ENV).27 E F0<83>108 590.4 Q(specifying command names containing)144 -590.4 Q F2(/)2.5 E F0<83>108 607.2 Q -(specifying a \214lename containing a)144 607.2 Q F2(/)2.5 E F0 -(as an ar)2.5 E(gument to the)-.18 E F2(.)2.5 E F0 -.2(bu)5 G -(iltin command).2 E<83>108 624 Q -(specifying a \214lename containing a slash as an ar)144 624 Q -(gument to the)-.18 E F2(history)2.5 E F0 -.2(bu)2.5 G(iltin command).2 -E<83>108 640.8 Q .45 -(specifying a \214lename containing a slash as an ar)144 640.8 R .449 -(gument to the)-.18 F F2<ad70>2.949 E F0 .449(option to the)2.949 F F2 -(hash)2.949 E F0 -.2(bu)2.949 G .449(iltin com-).2 F(mand)144 652.8 Q -<83>108 669.6 Q(importing function de\214nitions from the shell en)144 -669.6 Q(vironment at startup)-.4 E<83>108 686.4 Q(parsing the v)144 -686.4 Q(alue of)-.25 E F3(SHELLOPTS)2.5 E F0(from the shell en)2.25 E -(vironment at startup)-.4 E<83>108 703.2 Q(redirecting output using the\ - >, >|, <>, >&, &>, and >> redirection operators)144 703.2 Q -(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(85)185.115 E 0 Cg EP -%%Page: 86 86 +-.25(va)180 722.4 S(lue to).25 E F3(RANDOM)2.5 E F1 +(will produce the same sequence as in bash-5.0)2.25 E(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(87)193.45 E 0 Cg EP +%%Page: 88 88 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E<83>108 84 Q -(using the)144 84 Q/F1 10/Times-Bold@0 SF(exec)2.5 E F0 -.2(bu)2.5 G +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E<83>144 84 Q .696 +(If the command hash table is empty)180 84 R 3.196(,b)-.65 G .696(ash v) +-3.196 F .695(ersions prior to bash-5.1 printed an informa-)-.15 F 1.32 +(tional message to that ef)180 96 R 1.321(fect, e)-.25 F -.15(ve)-.25 G +3.821(nw).15 G 1.321(hen producing output that can be reused as input.) +-3.821 F(Bash-5.1 suppresses that message when the)180 108 Q/F2 10 +/Times-Bold@0 SF<ad6c>2.5 E F1(option is supplied.)2.5 E F2(compat51)108 +124.8 Q F1<83>144 136.8 Q(The)180 136.8 Q F2(unset)2.955 E F1 -.2(bu) +2.955 G .455(iltin treats attempts to unset array subscripts).2 F F2(@) +2.954 E F1(and)2.954 E F2(*)2.954 E F1(dif)2.954 E .454 +(ferently depending)-.25 F(on whether the array is inde)180 148.8 Q -.15 +(xe)-.15 G 2.5(do).15 G 2.5(ra)-2.5 G(ssociati)-2.5 E -.15(ve)-.25 G 2.5 +(,a).15 G(nd dif)-2.5 E(ferently than in pre)-.25 E(vious v)-.25 E +(ersions.)-.15 E<83>144 160.8 Q .432(arithmetic commands \()180 160.8 R +F2(\(\()2.932 E F1 1.666(...)C F2(\)\))-1.666 E F1 2.933(\)a)2.932 G +.433(nd the e)-2.933 F .433 +(xpressions in an arithmetic for statement can be)-.15 F -.15(ex)180 +172.8 S(panded more than once).15 E<83>144 184.8 Q -.15(ex)180 184.8 S +.403(pressions used as ar).15 F .403 +(guments to arithmetic operators in the)-.18 F F2([[)2.902 E F1 .402 +(conditional command can)2.902 F(be e)180 196.8 Q +(xpanded more than once)-.15 E<83>144 208.8 Q(the e)180 208.8 Q +(xpressions in substring parameter brace e)-.15 E(xpansion can be e)-.15 +E(xpanded more than once)-.15 E<83>144 220.8 Q(the e)180 220.8 Q +(xpressions in the)-.15 E F2($\(\()2.5 E F1 1.666(...)C F2(\)\))-1.666 E +F1 -.1(wo)2.5 G(rd e).1 E(xpansion can be e)-.15 E +(xpanded more than once)-.15 E<83>144 232.8 Q(arithmetic e)180 232.8 Q +(xpressions used as inde)-.15 E -.15(xe)-.15 G 2.5(da).15 G +(rray subscripts can be e)-2.5 E(xpanded more than once)-.15 E<83>144 +244.8 Q F2 .605(test \255v)180 244.8 R F1 3.105(,w)C .605(hen gi)-3.105 +F -.15(ve)-.25 G 3.105(na).15 G 3.105(na)-3.105 G -.18(rg)-3.105 G .605 +(ument of).18 F F2(A[@])3.105 E F1 3.105(,w)C(here)-3.105 E F2(A)3.105 E +F1 .606(is an e)3.105 F .606(xisting associati)-.15 F .906 -.15(ve a) +-.25 H(rray).15 E 3.106(,w)-.65 G(ill)-3.106 E .714 +(return true if the array has an)180 256.8 R 3.214(ys)-.15 G .714 +(et elements.)-3.214 F .714(Bash-5.2 will look for and report on a k) +5.714 F -.15(ey)-.1 G(named)180 268.8 Q F2(@)2.5 E F1(.)A<83>144 280.8 Q +.188(the ${)180 280.8 R F0(par)A(ameter)-.15 E F2([:]=)A F0(value)A F1 +2.689(}w)C .189(ord e)-2.789 F .189(xpansion will return)-.15 F F0 +(value)2.689 E F1 2.689(,b)C .189(efore an)-2.689 F 2.689(yv)-.15 G +(ariable-speci\214c)-2.939 E 1.235(transformations ha)180 292.8 R 1.535 +-.15(ve b)-.2 H 1.235(een performed \(e.g., con).15 F -.15(ve)-.4 G +1.235(rting to lo).15 F 3.735(wercase\). Bash-5.2)-.25 F 1.235(will re-) +3.735 F(turn the \214nal v)180 304.8 Q(alue assigned to the v)-.25 E +(ariable.)-.25 E<83>144 316.8 Q -.15(Pa)180 316.8 S .945 +(rsing command substitutions will beha).15 F 1.245 -.15(ve a)-.2 H 3.445 +(si).15 G 3.446(fe)-3.445 G .946(xtended globbing \(see the description) +-3.596 F .339(of the)180 328.8 R F2(shopt)2.839 E F1 -.2(bu)2.839 G .339 +(iltin abo).2 F -.15(ve)-.15 G 2.839(\)i).15 G 2.839(se)-2.839 G .338 +(nabled, so that parsing a command substitution containing)-2.839 F .022 +(an e)180 340.8 R .022(xtglob pattern \(say)-.15 F 2.522(,a)-.65 G 2.522 +(sp)-2.522 G .022(art of a shell function\) will not f)-2.522 F 2.523 +(ail. This)-.1 F .023(assumes the intent is)2.523 F .04(to enable e)180 +352.8 R .039(xtglob before the command is e)-.15 F -.15(xe)-.15 G .039 +(cuted and w).15 F .039(ord e)-.1 F .039(xpansions are performed.)-.15 F +(It)5.039 E .4(will f)180 364.8 R .4(ail at w)-.1 F .4(ord e)-.1 F .4 +(xpansion time if e)-.15 F .4(xtglob hasn')-.15 F 2.9(tb)-.18 G .4 +(een enabled by the time the command)-2.9 F(is e)180 376.8 Q -.15(xe) +-.15 G(cuted.).15 E/F3 10.95/Times-Bold@0 SF(RESTRICTED SHELL)72 393.6 Q +F1(If)108 405.6 Q F2(bash)3.582 E F1 1.081(is started with the name) +3.581 F F2(rbash)3.581 E F1 3.581(,o)C 3.581(rt)-3.581 G(he)-3.581 E F2 +<ad72>3.581 E F1 1.081(option is supplied at in)3.581 F -.2(vo)-.4 G +1.081(cation, the shell becomes re-).2 F 2.976(stricted. A)108 417.6 R +.476(restricted shell is used to set up an en)2.976 F .476 +(vironment more controlled than the standard shell.)-.4 F .477(It be-) +5.477 F(ha)108 429.6 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E +F2(bash)2.5 E F1(with the e)2.5 E(xception that the follo)-.15 E +(wing are disallo)-.25 E(wed or not performed:)-.25 E<83>108 446.4 Q +(changing directories with)144 446.4 Q F2(cd)2.5 E F1<83>108 463.2 Q +(setting or unsetting the v)144 463.2 Q(alues of)-.25 E/F4 9 +/Times-Bold@0 SF(SHELL)2.5 E/F5 9/Times-Roman@0 SF(,)A F4 -.666(PA)2.25 +G(TH)-.189 E F5(,)A F4(HISTFILE)2.25 E F5(,)A F4(ENV)2.25 E F5(,)A F1 +(or)2.25 E F4 -.27(BA)2.5 G(SH_ENV).27 E F1<83>108 480 Q +(specifying command names containing)144 480 Q F2(/)2.5 E F1<83>108 +496.8 Q(specifying a \214lename containing a)144 496.8 Q F2(/)2.5 E F1 +(as an ar)2.5 E(gument to the)-.18 E F2(.)2.5 E F1 -.2(bu)5 G +(iltin command).2 E<83>108 513.6 Q +(specifying a \214lename containing a slash as an ar)144 513.6 Q +(gument to the)-.18 E F2(history)2.5 E F1 -.2(bu)2.5 G(iltin command).2 +E<83>108 530.4 Q .45 +(specifying a \214lename containing a slash as an ar)144 530.4 R .449 +(gument to the)-.18 F F2<ad70>2.949 E F1 .449(option to the)2.949 F F2 +(hash)2.949 E F1 -.2(bu)2.949 G .449(iltin com-).2 F(mand)144 542.4 Q +<83>108 559.2 Q(importing function de\214nitions from the shell en)144 +559.2 Q(vironment at startup)-.4 E<83>108 576 Q(parsing the v)144 576 Q +(alue of)-.25 E F4(SHELLOPTS)2.5 E F1(from the shell en)2.25 E +(vironment at startup)-.4 E<83>108 592.8 Q(redirecting output using the\ + >, >|, <>, >&, &>, and >> redirection operators)144 592.8 Q<83>108 +609.6 Q(using the)144 609.6 Q F2(exec)2.5 E F1 -.2(bu)2.5 G (iltin command to replace the shell with another command).2 E<83>108 -100.8 Q(adding or deleting b)144 100.8 Q(uiltin commands with the)-.2 E -F1<ad66>2.5 E F0(and)2.5 E F1<ad64>2.5 E F0(options to the)2.5 E F1 -(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 117.6 Q -(using the)144 117.6 Q F1(enable)2.5 E F0 -.2(bu)2.5 G -(iltin command to enable disabled shell b).2 E(uiltins)-.2 E<83>108 -134.4 Q(specifying the)144 134.4 Q F1<ad70>2.5 E F0(option to the)2.5 E -F1(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 151.2 Q -(turning of)144 151.2 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F1 -(set +r)2.5 E F0(or)2.5 E F1(shopt -u r)2.5 E(estricted_shell)-.18 E F0 -(.)A(These restrictions are enforced after an)108 168 Q 2.5(ys)-.15 G -(tartup \214les are read.)-2.5 E 1.566 -(When a command that is found to be a shell script is e)108 184.8 R -.15 -(xe)-.15 G 1.567(cuted \(see).15 F/F2 9/Times-Bold@0 SF 1.567 -(COMMAND EXECUTION)4.067 F F0(abo)3.817 E -.15(ve)-.15 G(\),).15 E F1 -(rbash)108 196.8 Q F0(turns of)2.5 E 2.5(fa)-.25 G .3 -.15(ny r)-2.5 H -(estrictions in the shell spa).15 E(wned to e)-.15 E -.15(xe)-.15 G -(cute the script.).15 E/F3 10.95/Times-Bold@0 SF(SEE ALSO)72 213.6 Q/F4 -10/Times-Italic@0 SF(Bash Refer)108 225.6 Q(ence Manual)-.37 E F0 2.5 -(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F4 -(The Gnu Readline Libr)108 237.6 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E -(ox and Chet Rame)-.15 E(y)-.15 E F4(The Gnu History Libr)108 249.6 Q -(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E -F4 -.8(Po)108 261.6 S(rtable Oper).8 E +626.4 Q(adding or deleting b)144 626.4 Q(uiltin commands with the)-.2 E +F2<ad66>2.5 E F1(and)2.5 E F2<ad64>2.5 E F1(options to the)2.5 E F2 +(enable)2.5 E F1 -.2(bu)2.5 G(iltin command).2 E<83>108 643.2 Q +(using the)144 643.2 Q F2(enable)2.5 E F1 -.2(bu)2.5 G +(iltin command to enable disabled shell b).2 E(uiltins)-.2 E<83>108 660 +Q(specifying the)144 660 Q F2<ad70>2.5 E F1(option to the)2.5 E F2 +(command)2.5 E F1 -.2(bu)2.5 G(iltin command).2 E<83>108 676.8 Q +(turning of)144 676.8 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F2 +(set +r)2.5 E F1(or)2.5 E F2(shopt \255u r)2.5 E(estricted_shell)-.18 E +F1(.)A(These restrictions are enforced after an)108 693.6 Q 2.5(ys)-.15 +G(tartup \214les are read.)-2.5 E 1.566 +(When a command that is found to be a shell script is e)108 710.4 R -.15 +(xe)-.15 G 1.567(cuted \(see).15 F F4 1.567(COMMAND EXECUTION)4.067 F F1 +(abo)3.817 E -.15(ve)-.15 G(\),).15 E F2(rbash)108 722.4 Q F1(turns of) +2.5 E 2.5(fa)-.25 G .3 -.15(ny r)-2.5 H(estrictions in the shell spa).15 +E(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E(GNU Bash 5.3)72 +768 Q(2024 March 29)144.29 E(88)193.45 E 0 Cg EP +%%Page: 89 89 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E/F2 10.95/Times-Bold@0 SF(SEE ALSO)72 84 Q F0 +(Bash Refer)108 96 Q(ence Manual)-.37 E F1 2.5(,B)C(rian F)-2.5 E +(ox and Chet Rame)-.15 E(y)-.15 E F0(The Gnu Readline Libr)108 108 Q +(ary)-.15 E F1 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E +F0(The Gnu History Libr)108 120 Q(ary)-.15 E F1 2.5(,B)C(rian F)-2.5 E +(ox and Chet Rame)-.15 E(y)-.15 E F0 -.8(Po)108 132 S(rtable Oper).8 E (ating System Interface \(POSIX\) P)-.15 E(art 2: Shell and Utilities) --.8 E F0 2.5(,I)C(EEE --)-2.5 E(http://pubs.opengroup.or)144 273.6 Q -(g/onlinepubs/9699919799/)-.18 E(http://tiswww)108 285.6 Q -(.case.edu/~chet/bash/POSIX -- a description of posix mode)-.65 E F4(sh) -108 297.6 Q F0(\(1\),)A F4(ksh)2.5 E F0(\(1\),)A F4(csh)2.5 E F0(\(1\))A -F4(emacs)108 309.6 Q F0(\(1\),)A F4(vi)2.5 E F0(\(1\))A F4 -.37(re)108 -321.6 S(adline).37 E F0(\(3\))A F3(FILES)72 338.4 Q F4(/bin/bash)109.666 -350.4 Q F0(The)144 362.4 Q F1(bash)2.5 E F0 -.15(exe)2.5 G(cutable).15 E -F4(/etc/pr)109.666 374.4 Q(o\214le)-.45 E F0 -(The systemwide initialization \214le, e)144 386.4 Q -.15(xe)-.15 G -(cuted for login shells).15 E F4(~/.bash_pr)109.666 398.4 Q(o\214le)-.45 -E F0(The personal initialization \214le, e)144 410.4 Q -.15(xe)-.15 G -(cuted for login shells).15 E F4(~/.bashr)109.666 422.4 Q(c)-.37 E F0 -(The indi)144 434.4 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G -(-shell startup \214le).15 E F4(~/.bash_lo)109.666 446.4 Q(gout)-.1 E F0 -(The indi)144 458.4 Q(vidual login shell cleanup \214le, e)-.25 E -.15 -(xe)-.15 G(cuted when a login shell e).15 E(xits)-.15 E F4 -(~/.bash_history)109.666 470.4 Q F0(The def)144 482.4 Q(ault v)-.1 E -(alue of)-.25 E F1(HISTFILE)2.5 E F0 2.5(,t)C +-.8 E F1 2.5(,I)C(EEE \212)-2.5 E(http://pubs.opengroup.or)144 144 Q +(g/onlinepubs/9699919799/)-.18 E(http://tiswww)108 156 Q +(.case.edu/\001chet/bash/POSIX \212 a description of posix mode)-.65 E +F0(sh)108 168 Q F1(\(1\),)A F0(ksh)2.5 E F1(\(1\),)A F0(csh)2.5 E F1 +(\(1\))A F0(emacs)108 180 Q F1(\(1\),)A F0(vi)2.5 E F1(\(1\))A F0 -.37 +(re)108 192 S(adline).37 E F1(\(3\))A F2(FILES)72 208.8 Q F0(/bin/bash) +109.666 220.8 Q F1(The)144 232.8 Q/F3 10/Times-Bold@0 SF(bash)2.5 E F1 +-.15(exe)2.5 G(cutable).15 E F0(/etc/pr)109.666 244.8 Q(o\214le)-.45 E +F1(The systemwide initialization \214le, e)144 256.8 Q -.15(xe)-.15 G +(cuted for login shells).15 E F0(\001/.bash_pr)109.666 268.8 Q(o\214le) +-.45 E F1(The personal initialization \214le, e)144 280.8 Q -.15(xe)-.15 +G(cuted for login shells).15 E F0(\001/.bashr)109.666 292.8 Q(c)-.37 E +F1(The indi)144 304.8 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 +G(-shell startup \214le).15 E F0(\001/.bash_lo)109.666 316.8 Q(gout)-.1 +E F1(The indi)144 328.8 Q(vidual login shell cleanup \214le, e)-.25 E +-.15(xe)-.15 G(cuted when a login shell e).15 E(xits)-.15 E F0 +(\001/.bash_history)109.666 340.8 Q F1(The def)144 352.8 Q(ault v)-.1 E +(alue of)-.25 E F3(HISTFILE)2.5 E F1 2.5(,t)C (he \214le in which bash sa)-2.5 E -.15(ve)-.2 G 2.5(st).15 G -(he command history)-2.5 E F4(~/.inputr)109.666 494.4 Q(c)-.37 E F0 -(Indi)144 506.4 Q(vidual)-.25 E F4 -.37(re)2.5 G(adline).37 E F0 -(initialization \214le)2.5 E F3 -.548(AU)72 523.2 S(THORS).548 E F0 -(Brian F)108 535.2 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E -(bfox@gnu.or)108 547.2 Q(g)-.18 E(Chet Rame)108 564 Q 1.3 -.65(y, C)-.15 -H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G -(rsity).15 E(chet.rame)108 576 Q(y@case.edu)-.15 E F3 -.11(BU)72 592.8 S -2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .568(If you \214nd a b)108 -604.8 R .568(ug in)-.2 F F1(bash,)3.068 E F0 .568(you should report it.) -3.068 F .568(But \214rst, you should mak)5.568 F 3.068(es)-.1 G .568 +(he command history)-2.5 E F0(\001/.inputr)109.666 364.8 Q(c)-.37 E F1 +(Indi)144 376.8 Q(vidual)-.25 E F0 -.37(re)2.5 G(adline).37 E F1 +(initialization \214le)2.5 E F2 -.548(AU)72 393.6 S(THORS).548 E F1 +(Brian F)108 405.6 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E +(bfox@gnu.or)108 417.6 Q(g)-.18 E(Chet Rame)108 434.4 Q 1.3 -.65(y, C) +-.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve) +-.25 G(rsity).15 E(chet.rame)108 446.4 Q(y@case.edu)-.15 E F2 -.11(BU)72 +463.2 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F1 .568 +(If you \214nd a b)108 475.2 R .568(ug in)-.2 F F3(bash)3.068 E F1 3.068 +(,y)C .568(ou should report it.)-3.068 F .568 +(But \214rst, you should mak)5.568 F 3.068(es)-.1 G .568 (ure that it really is a b)-3.068 F .567(ug, and)-.2 F 5.625 -(that it appears in the latest v)108 616.8 R 5.625(ersion of)-.15 F F1 -(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.626 +(that it appears in the latest v)108 487.2 R 5.625(ersion of)-.15 F F3 +(bash)8.125 E F1 10.625(.T)C 5.625(he latest v)-10.625 F 5.626 (ersion is al)-.15 F -.1(wa)-.1 G 5.626(ys a).1 F -.25(va)-.2 G 5.626 -(ilable from).25 F F4(ftp://ftp.gnu.or)108 628.8 Q(g/pub/gnu/bash/)-.37 -E F0(and)2.5 E F4(http://git.savannah.gnu.or)2.5 E -(g/cgit/bash.git/snapshot/bash-master)-.37 E(.tar)-1.11 E(.gz)-1.11 E F0 -(.)A .411(Once you ha)108 645.6 R .711 -.15(ve d)-.2 H .411 +(ilable from).25 F F0(ftp://ftp.gnu.or)108 499.2 Q(g/pub/gnu/bash/)-.37 +E F1(and)2.5 E F0(http://git.savannah.gnu.or)2.5 E +(g/cgit/bash.git/snapshot/bash-master)-.37 E(.tar)-1.11 E(.gz)-1.11 E F1 +(.)A .411(Once you ha)108 516 R .711 -.15(ve d)-.2 H .411 (etermined that a b).15 F .411(ug actually e)-.2 F .411(xists, use the) --.15 F F4(bashb)3.18 E(ug)-.2 E F0 .41(command to submit a b)3.13 F .41 -(ug report.)-.2 F(If)5.41 E .594(you ha)108 657.6 R .894 -.15(ve a \214) --.2 H .595(x, you are encouraged to mail that as well!).15 F .595 -(Suggestions and `philosophical' b)5.595 F .595(ug reports may)-.2 F -(be mailed to)108 669.6 Q F4 -.2(bu)2.5 G(g-bash@gnu.or).2 E(g)-.37 E F0 -(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F1(gnu.bash.b)2.5 E(ug) --.2 E F0(.)A(ALL b)108 686.4 Q(ug reports should include:)-.2 E(The v) -108 703.2 Q(ersion number of)-.15 E F1(bash)2.5 E F0(GNU Bash 5.2)72 768 -Q(2022 September 19)135.955 E(86)185.115 E 0 Cg EP -%%Page: 87 87 +-.15 F F0(bashb)3.18 E(ug)-.2 E F1 .41(command to submit a b)3.13 F .41 +(ug report.)-.2 F(If)5.41 E .021(you ha)108 528 R .321 -.15(ve a \214) +-.2 H .021(x, you are encouraged to mail that as well!).15 F -1.1(Yo) +5.021 G 2.521(um)1.1 G .021 +(ay send suggestions and \231philosophical\232 b)-2.521 F(ug)-.2 E +(reports to)108 540 Q F0 -.2(bu)2.5 G(g-bash@gnu.or).2 E(g)-.37 E F1 +(or post them to the Usenet ne)2.5 E(wsgroup)-.25 E F3(gnu.bash.b)2.5 E +(ug)-.2 E F1(.)A(ALL b)108 556.8 Q(ug reports should include:)-.2 E +(The v)108 573.6 Q(ersion number of)-.15 E F3(bash)2.5 E F1(The hardw) +108 585.6 Q(are and operating system)-.1 E(The compiler used to compile) +108 597.6 Q 2.5(Ad)108 609.6 S(escription of the b)-2.5 E(ug beha)-.2 E +(viour)-.2 E 2.5(As)108 621.6 S(hort script or \231recipe\232 which e) +-2.5 E -.15(xe)-.15 G(rcises the b).15 E(ug)-.2 E F0(bashb)108.27 638.4 +Q(ug)-.2 E F1 +(inserts the \214rst three items automatically into the template it pro) +2.72 E(vides for \214ling a b)-.15 E(ug report.)-.2 E(Comments and b)108 +655.2 Q(ug reports concerning this manual page should be directed to)-.2 +E F0 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F1(.) +.25 E F2 -.11(BU)72 672 S(GS).11 E F1(It')108 684 Q 2.5(st)-.55 G +(oo big and too slo)-2.5 E -.65(w.)-.25 G 1.869 +(There are some subtle dif)108 700.8 R 1.869(ferences between)-.25 F F3 +(bash)4.369 E F1 1.869(and traditional v)4.369 F 1.869(ersions of)-.15 F +F3(sh)4.368 E F1 4.368(,m)C 1.868(ostly because of the)-4.368 F/F4 9 +/Times-Bold@0 SF(POSIX)108 712.8 Q F1(speci\214cation.)2.25 E +(Aliases are confusing in some uses.)108 729.6 Q(GNU Bash 5.3)72 768 Q +(2024 March 29)144.29 E(89)193.45 E 0 Cg EP +%%Page: 90 90 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(The hardw)108 84 Q -(are and operating system)-.1 E(The compiler used to compile)108 96 Q -2.5(Ad)108 108 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)-.2 E -2.5(As)108 120 S(hort script or `recipe' which e)-2.5 E -.15(xe)-.15 G -(rcises the b).15 E(ug)-.2 E/F1 10/Times-Italic@0 SF(bashb)108.27 136.8 -Q(ug)-.2 E F0 -(inserts the \214rst three items automatically into the template it pro) -2.72 E(vides for \214ling a b)-.15 E(ug report.)-.2 E(Comments and b)108 -153.6 Q(ug reports concerning this manual page should be directed to)-.2 -E F1 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.) -.25 E/F2 10.95/Times-Bold@0 SF -.11(BU)72 170.4 S(GS).11 E F0(It')108 -182.4 Q 2.5(st)-.55 G(oo big and too slo)-2.5 E -.65(w.)-.25 G 1.869 -(There are some subtle dif)108 199.2 R 1.869(ferences between)-.25 F/F3 -10/Times-Bold@0 SF(bash)4.369 E F0 1.869(and traditional v)4.369 F 1.869 -(ersions of)-.15 F F3(sh)4.368 E F0 4.368(,m)C 1.868 -(ostly because of the)-4.368 F/F4 9/Times-Bold@0 SF(POSIX)108 211.2 Q F0 -(speci\214cation.)2.25 E(Aliases are confusing in some uses.)108 228 Q -(Shell b)108 244.8 Q +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH).25 E/F1 10/Times-Roman@0 SF +138.32(\(1\) General).95 F(Commands Manual)2.5 E F0 -.25(BA)140.82 G(SH) +.25 E F1(\(1\)).95 E(Shell b)108 84 Q (uiltin commands and functions are not stoppable/restartable.)-.2 E -1.315(Compound commands and command sequences of the form `a ; b ; c' a\ -re not handled gracefully when)108 261.6 R .39 -(process suspension is attempted.)108 273.6 R .389 +1.185(Compound commands and command sequences of the form \231a ; b ; c\ +\232 are not handled gracefully when)108 100.8 R .39 +(process suspension is attempted.)108 112.8 R .389 (When a process is stopped, the shell immediately e)5.39 F -.15(xe)-.15 G .389(cutes the ne).15 F .389(xt com-)-.15 F .192 -(mand in the sequence.)108 285.6 R .192(It suf)5.192 F .192(\214ces to \ +(mand in the sequence.)108 124.8 R .192(It suf)5.192 F .192(\214ces to \ place the sequence of commands between parentheses to force it into a) --.25 F(subshell, which may be stopped as a unit.)108 297.6 Q(Array v)108 -314.4 Q(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E -(There may be only one acti)108 331.2 Q .3 -.15(ve c)-.25 H -(oprocess at a time.).15 E(GNU Bash 5.2)72 768 Q(2022 September 19) -135.955 E(87)185.115 E 0 Cg EP +-.25 F .052(subshell, which may be stopped as a unit, or to start the c\ +ommand in the background and immediately bring)108 136.8 R +(it into the fore)108 148.8 Q(ground.)-.15 E(Array v)108 165.6 Q +(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E +(There may be only one acti)108 182.4 Q .3 -.15(ve c)-.25 H +(oprocess at a time.).15 E(GNU Bash 5.3)72 768 Q(2024 March 29)144.29 E +(90)193.45 E 0 Cg EP %%Trailer end %%EOF diff --git a/doc/bashref.dvi b/doc/bashref.dvi index a7a571b8985aded87b1444af733d9d7d33d49198..b9205365e912f6191c670258f5cd036bba178f7f 100644 GIT binary patch delta 78750 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 delta 54177 zc-n-$d0bOR_c-jGnH#_j5pdsk6c7Z#T~Se~yJFod0RluJ!6c|yHMX_2wu;7EGtsCN zYpL4R()L=rw?5tNzC3EJ2CKD;t$kX%+1B@*nR^2~&-e3t|C;39S<aj}bM~2gzAAm= z14DLnYdIu2Wq5Mx@DZs)Qif<%?<V->zNQS(+AFC&ha^|kY}={WwvL@^EBDySc0AcL zf5-GMZ7v_JErQxZ>Xs>s6z`BkKm1P}uKian4XY$1R~>GXmbT5;HfC~eiQVm|E@F2F zsY}T&w0rDMhc+~MNTQFfTUTmzdjb{Zd!~O`X!Y0%wI&?~Y%XkrJ&MZCBJJl9<&UM@ z)U0{;pVOK(Z`Q1trJ&4RnwoMkx5TDRo-xlySN<~I>MjXr<7j+em<U2p<a8md_4p!` zsNL+l(avUbxeYM1wKP{5QujXf5T#|^M9YYDCB4o&!mdE^&B(2aGPG{h=t3;cj9H*4 z8FlI7s+8u#s;a8C-h1Q5jeoS+XZsP$u)1He&M3;Tx(_C-Q%KtIx*6FkMETsL?pSJH zOb#e1TE&#zN=jXH&Rq%={+sqIN^0HEX~|d=PM-#ac67#0_%m_lS_Oc5X;uOj-^`A| z;`$t_C~0*!=K2vf|GWpW7&ZSzgzfr*69Aj`@}mC$40VgQASk1kmf@?1Z*eF}W?iSe zEm$11x^c7)1xFQ<nOXNv;RGm$)wL<wBuanrQBmgDCt$U0%U{4^YUxfK`OC6e9P&<Q zGWPpa`7A6{*G*W=a!*A7_Ii3VU$Y0&>ry-2szmrA`mPHN2S`?(#R+#_a}JB^m78%o zcicJ&i?`RU6!X}y9=g$vdsCFl+IQacm{~LD<}A>rJAtYSZN6r&XF`{AmDaw9DH}qm zDH&B&2V143)fH`;hh08@=QIQ`YO{cI@7<fR%RcwOQlw^R2kyN>QZws(TjwcQUf#A@ zlq<JqLpiMO*p3)czT@i+<?y<zJC|Xp&A#t6{!QAo2S<3*KNgF~K$1d+46n=FeJlR0 z+cOde{4qEk3T^bh*GO7=9ogRjmOP`bOLZQUnROfPkArep-F-Ek1W7z`z=Li39&C-c zO@Ht{?BcE3nF>iytLt<K8m9x59af-{mT}}Gz){r0UPRTFM^-`c<YPM&GBmwz=i^Q& zht|=f4k$C~+)p0CQtSRyit=^ctfwZzKUmPG{i00P?NAP{+kLEsC~KeHgg^{>ZYmb5 zpWlf^^B1=uNcX+89Z9jzE9Xc?W}W(KzCtpFY4+D1BAG+9wkK9bWu{kERrmDX*rv64 zHD0SZ@izch{jZ(~<14R^RmiZkI`Za7DAVi4zI6b~jJgYNKM3V8?VfiBlcTHao_qKC zHsq~(ezZ!7t=oDQAU}P7-LP~2L;~GrUM?Wyi)HfN<KO;D$k(scJ#=MbB+%D@Uwr`J z@n7=<J^g+g(#*a;HYvljUVlCh9PHemyhS>&AK0A89mMAR_C4$>v+n%$j|m`7d-|Uf z0O;Bq4pqs}zhTNBY!>^VrQ5c$!saNjxr6M37Qksdz)^s6lxcnXUvzt1c1N+V+0_oA z{sF7Yrg>a8!LF?CfK_vsBj+oyTT8VSc1NM+EDGpTnkyv=`TYYivi?mA<sOCq6Qy+2 zJ*||7Rd0}1_H`EdY1yZCIg%Vfv%7t?>=TF610z@+?ou2iF@O~cou#E#m*%z?JD`>Z zh0|p#O!l#N$Xq*s4ZX<5@X{&)cNQ58u+UkNUuyHyPMud)I6W{9-yf^|s-)_>;uN5v z$k!y4quVJz$B@{;@}GTxvXVlbGlP@^3QbQ8@ScxE#`7n>jbQrjB<1r6C7rJvs$3?0 z7h{8wx<5nt6fs&lN|}s2M1Oj;QmJ?|5)uRT9($Rss#X9KDzol+vS+2A#&;7E17IyJ zbp}=kY=u4=-!(r_3Gh2?t4r+;8%*!f@*Ibl8#L%zV0GI-5)4TaC@Zm*mSQ)Bc6WKH zHBjjmnDjV3un-k)6j<?Ht?95J?n*aE6s-{u1x|;%qRdw4XC0>GgQ%$tvJN@nP6K?_ zzi509OWGzBEA_cK)3YbdoHIQuHxOFoyHPmN>atq_q5Q+H&D-@dSHGyz=o`90af3@> z^}r%%dg?gkGuY!ia=fw$FuH9#2vETA<q66#O42q-^evsNWK)`!kjQIXO00hDCS{kZ z4AW=KQY<Q&SRyO=<|)yZY&CjEzGf?R0^qCtYV`I2ZksJI*H$1TYew?Wz~Z@L8d)y8 zr=-m0u@@{&^r`k!<<??bVEC|vWM5Rrh5CiXijTku6}KoJM&|65BlIg!P5~qL+my`! z>fJWwYIBm8Cf_|>t}L;%ChH1~v4Uh>0UtNX(jkuMe`DvG=$x(HjCkXZKR`P67sTtf z0_K4hr`C_Kttkh>hQ@9`8#mtylw1^K;}-Bs50GA@=wtrGYNcCG&F(O&UxfNDn;RSW z=^eL*VDkm(9qah@$x$7<!JmN3R_5IGWY1Na*bE<y$SJ~lFla#Uw?@%nD*Bg|%4w=( z@MqU6zbL8vu?@;#QueBxQYWu+y9yKCw@GQ+oUH4o!&7@}a_{f*_56Lxt<9A*{o{v} z8HDU9kWX(pqO5JMr0A!fQl=pW`{_y<ArCE=Z$Efe(OST8h5u5Hfr#bZURPd)N}<;k z3rJ=C@*B!1LZ0~oE056g-d1{9;OQM7DDf@4<l=BxN_UW498qW!bmb^?YfeYN?s039 z^hzsifz`0Ac3=bWu)tbcYIA`u*5V6$QNZdzT1NdQQCnSN11z}w(5I)w>Iul2z&pf> z)b|P%mpb#UrS-iGCJ}NM@R%=@iZ<}dU1BX1)a8ahe8(3`IeDW@0zB%h^0h@7s`vRy zAvpK`mlOwu|Nd_j5TmE($yyh_Ro*8`x?XohS%ph5@JHnq;Mn?>tI8n)<&dA1`v|mp z<C<~<rqAE_OSwe8{!2Fg=5OU9bp7=E<nNZ`I*|_}Tazvz)Op`%as`kZ+lJf+%XX*@ z>7#gQ-fZA{0$(oNcEFf{IBDJ-oN0lxtjr2b0Qre#E%G1^JX#5GZoz(R4&dLV@WhU| z^EkD7k8_315pn}Hy?z_eF>rgJGXqI(+bXDKbKnL?Uhl^J-7ZYiO<>Sxv?U!CUKLBe zkAp@|S0T0%gCP$d$;UC$o>bN9FUFB>O8e?IEqiYB^^BREg)sVQ%_9K4+s12RBf5Bj z=^faQ%p2wd)LvqBSqq>RF#MW_aeu%pJlMqU5IoT7vKQMOzy?>#fg8=B(SAX2DjcP- zyRcCu;6%Q_=O%8%n1zF|LYdoEx(Zmg&8-c%C}F|Q0tQ{~aLfsT;H}liwI_9oHwAwG z*Ob&|Gk^xQ1`d!IRBwKxUUY@V1@^WIfDR!)(+nQtQ=839OCFj$Tw6R_j5!Bt!K{o? zmnH@T<4GHq0Hkfq5mq6pVHvJ<Ad#RZ=>K#iGYM(YQ_vIN(uKTAqc?~6jIJb2snzf7 zO5zmnU*iRIu&zJ}HfsS)w?uOUD#`-+dxUiZHi-wYv|6(v5&Sj&;u;@&;Xnup>|$jo z(Z^z*1!-Jb;kFA@CHvHKE9X{}!=eLG+8qIptr(U~D+6(*2^^asyKF7j*or|QEq(;I zx0Y9*66zmhiys9*U?L#k0h}EO4xkcbnKKYxE@)yhS#7nw&{LA^v;6(U{1R9`n;m(8 z22iS9TZWwQtJ0@VJ)yVmPHr%mbxa@fr^2eEH=pM%`;kngmQU_SrqFhWm*_kDkx3M) ze33xT5M>BImPno<9aqWScqEBjkAi(%n@K)kWZ(^n(<eufC&*LVc;RUBVsqBw4CpaI z*5Wiz97B4?u)f0pD~{rTsaWwJRw?aU`=G)ATXJzS;I1$5!7=1Pg~nbR&IgSnZ?nT~ z+~@hP<46Xpj(uvI{$&=~qR5{sCJ+#!wfwD#qyV36<w@D(5qNMmn-q#F{EJDXGxx0^ z@%j&w$S}gQCXpmEB0|D?WD;r16LLryLpy@=9FjwZ57RH?5MAZfvq>y>&LS3`J%e<R zzoyS3Hoj*jbdmj%?1IiBy?NK!q<O@8X^rr2XORAU<7^V8)7ik7Xmn8tA2^4sO{Tpw zE;?JdZJrRYl_z^;`DpKWhppJ^kz}IDmp+=85du!eKb=Fm+hNaH<#sL>+NRqh*o!mC z5RGnONn1e$D)_P-7y<}-kOW`>C%K)P75HDlIngV!sH9ZQX37ujDgac4Jqz=j&)!Sg zw@x;?&GF#==OY)8!HULXZURiGxg-weQml8$1w2O9)QXBB{@Kl>SgFyo=9BqIL`B7X z_X4sQ*5LOAWMqU?!MlM9-j|Z;ITB|t+)Uc=*jdo&m4zfKGSkG|nOriIk6Q$o+qsa8 zSJ=Vm&s*?M7m*UBhL2fH^5iO2FD8$XwHNf6ONd7yYwPuYEhV!URH@1*%c1xypLFC| zD@YtqEFj;4m}p-}J~aU8E&-W$mjq-(K8fe5o%H0fHZoRpuNT?L8HF8=doh_0DJK7b z+)6DW->Z=s!k_W`QN6E&%%H5g&F@d}?^lvrV8j_NatJobpDwb27z6c?16e1?fxcJ? z18t}Pq7+lOP(i+h*#WNJTSYpx1Duz<y}f>w)iv6hUr=Z(lIZwn71<(d-MyNO{eRR- z;B*biXNPfhiq??l#X1z}z1IRh050FH1dUAn{&l32!dn-U7JT#uVgtZyH;`&p9kV;A z=Xl8!#elu1gni}v687F30Cv8S6ie7|Y$SWg&uMz_HZqWqpVRd>?jWzjh;8fA^r|~a zJHTDrx^({FUF2aPg51sI5&2HJn?w=ulef5soB}C+@g8y!s!Z651jHZPN?vS@5+F52 zhz+dx#Wu1LYUEXs*A3WuN!Zr?B4JD03a}+^Cna+2c5Np;71Ht~KemHxA^^o09~nj2 zwX=M^kF<v$Uvlmv8Ep-IJ3(p%g4BQWk$KsMapH8L7N7jb-uk@DhUQS8XId`kK=PCF zR~w|fkeohJ{+bkO{P0fFm6CJu{H>j&%RqdAlEGyI`=kJPpD{RE2<)vpjQ)e{txY^y zBi&{PoE4t(3bA2Pfi>QP>fZJylnI7<ho+&uw4pb{RswxmySLC*3S0m*;fM#PWtZ*Y zw`nA92}*wrZA#-UaN74i$%k=-)Nc?)hBya9Oe?H#H4LzNkD<LhJS42W02}*03$!Di zy44cTo8L#0y&4$Mc7w^-K++klVIW}+0jB{;RNrU7DD85Qz0_8p5K2bGf_i|W%FjAp z7phBXVUim~Y-On}$U6R&Z!OSP2o(Wq7<R4ZuE=+L?4AnbfC1o`VD5QwUK!`}g_K+Y zrn9>Qj02C=?r;lD834DrtfdB2Wj3n=rr~GzHM6ZLu$6m!>^@~RicDdSN)ZoBb6>N3 ztul~T-zU@`x_`eouRc%yLZ>1$$*W%y>JR9yeVC{2A|1T}5ab26LO`J~D+5*&3yr|? zv+vHJ5C;v-gYJg!PB+q11C6Ja?2CMCq!8pnbPB2f42CH)K?@;9fI>!Rf@)P&ql&?J zThhGOM34zKAwS%}@5`(!G+UseJkW@+Mg|;ChYkH10mGjWXmDke3NwPwsv(a|l&gf6 z)or&6O`{QrnzdZCv4U13?Ghio?GEX2klLdgWYXOi_+Uo*ry1CQA(1AKCjU!o7g7ln z+KN(-8#qDxx^(@41EhjZ57I-EP}B3%hb~Dgvwmrg^qn-Ah(7wzMRblh8Wco(VPXLH ztyb=m8a}#5`0`q^h(hQ5jau@V!C!hy{&H`U<S*~<A#M8rtiTZtM^8H`nZlR>mrLz# zPklmFb@a6NBv;Tg4v|FEl!_iEPoYZE?NPGP8zje@+a0^mr0|jBEmnh0Ug!>lH6XVQ zpB89gO+EkyNlRO4p&uTb#Nl+I6|y}przlXLGih!Bb%P2Ai1b7s`DUgQ4H<VJY!({0 zwF4u_+s9)bBR#x9wtbLr9@&blfKlN|0(-~wbiq#YMMlv2QSNeUfo%+`uiFRKkMdaa z;Wu!bLZi$2Q3j70<EQ$AA*&}y^@G^2U>jg*;8xO*cx}S{CFm5EWCX4vy2G$8tkEjF zv%=j-{}-+_!;_V0k_IqkR`xu<^cWe$e5~vRzHMb>doKX(0?s7#a$sZjGO*ZI2N0*p zMnfP^HLWw^Neh8>2df;$jOIiw*r%p-39D2lMtrJ&%Ksom)L2~t3_~DBE7&omk<Dcy zMZ5!?(L=#{K$-ZpN63^z1M3Zh0o5ji8qG4mW3EQV_CwrifUAHxmNe6355TINKqOW- z-~Tvi7fT1dD)fG1_#hqh8ejYb>Ff=J2Eb(Ggc}3f$Uekv^3-2h4q#yoq~?PjrGEuy z0nPp7TJsS42+*;Jd(wE=qEWX1T8G=M2$<OA@YdVh>Oe=HW-VL}6@cOYAFu?%Si=tP zFjme)p%pf>4~ZVY3@ynDuR)MLv;#2n-`xco<H7AkSBA9|bloP-SYrsA3;P5PA!zTv z_XxUPYl~$6IA@qgMQLdwOkNU|7M61w#vcj_DqP5o#Fht6n7syG>vud!-la;WKI<8> z0eu|r>!2JfeIyqN2%qW*l9s`<+9|QR_c-XIUV1enuRb}{ANPunUL6X5#6OhJHem_4 zKpuMlZ9+<u!#1FKhi3SQ%dH-mmjfG`8&C3FpmotLSewsH6XF6^(G+yh9a^y{>^j1v zTY_u`Q^B1mx|Glq1o+?2lR>l%aN9vIfHDu7^BpgerJy*5UL^AvtM0H-(I=lEF$C(Q z@x`x`>0o00JXC+=b@C}F>#@K|Z-0{v0bTCtH_2^MBg=e?%tmF|oyL`uqypZpJxP{u z<v5s7M`|RKU49&_uu~^VscbUoJ*Y=!y})01pPUAc8vKCt2mP|mtQYmyK1BadEx+&) zSqo#|`=M_AnDikn;O9q@lE?C^pOR$$+^1w9I~?nn%)j}RSove0kqDmq8Ce9498>t? zpOGB-jC@XRCeY2I&&i_-aZJ&pP7x1iscoR;uV;uI;4S!qlp4aJpIp}GuN%ucjQ2dC z#_~_UAj_q0Jnk&%M%#O$b?aGTQD_%WYkm2bq$408`pQUsbBL^^k*R1$L|+-9M_nYt z<QqQzGP#8>_=dFNPh2L4<g<m}z+7wf%5TUCrKEQ+STfu`qYLv<j;*$r3io!9_U?^d znUOv^<14}7R@>dcXgmQ?Lqt$3Fn}O@HvuX9fP7H23#ti(Ie3W`-tqn4k$&x~+ded2 zqH}PeZPnnS!oin|Kn(D?-;+6f{TW!gcMSde(ivE~tN&P7w5aL!6arHbsCe#sT!FX+ z<@%-XNd=%Z?z`4}$&WxYhhr9$^GAOqPqFHbeMjrItE7hzn7@(k{MMgI%bs=z>c4jP z2vZAReA!XIbkyb5uqmss4gcsTvKN-d^&fHx%$EhuaO3vv8#fuVc->Ojs+J%A8LY(` zz2`6Fc0~?+@ETcV44m1yNwYDskzDiva?#IxB4?cRJ&EB@L`O#G-~L8AE41ym5A(=B zh#M@MZ;$Bf{vewb+DTudTdtE8ig?Ife-Vz)c+0=Za4#M7vIn(7q4NMEe+8Hv2nD;# zaNWax_P8nvJkmugLlGeFfW4vb2rv^UayiSy#s!W9+8r)w!0oI+_fUoSXD<aFh?1uv z&;h$2wP3r$TkNO(+BzMu{uc$C^U?bXLj#Z&g0x?Z!x^?LwER-5V}%=CYQU6jpog-$ zc3D7GhP)E?hJXuHN=^6@tcG_&(wQ;3q33y|1{)=KG<Lx6Rq5ym^a7zW7W{_{m+1QR zA5!P-;tgvELE2@*|9W-<7gz5R@)DgXk6+3`zqeNDr(L|D@}l(w6{JA*(R)5b1~0vs zu!n}lBKQ}>Lc&KcK7<wEsR6QUf>1vF^rtsqvJGy|Jz<SfLp}4S*Ch&3XJXYT&KvLo zYTr59ZW^+6tcVg-dKJ+yQ(tbDQ)G;F(Xgz1w97jHg`YfDS>Z5YCFi5jTPnNUb(VIB z7jgo0Z(p<EbIXBb02zS#*?-3+iQ1smCm9_Jvl5-njTCjv*C<9ndGhYab`ymi&`6$! zg>RsKiJ`opYz&0ev)ZtF1|18tN7D~0)S)N|a+`eJMsAajej{CUKc#;(=j|!&PyTb8 ze7=^__Igw_Jx-Nj`iZu*XGB*c^e41Ou?5^>jvng@5PN#7PIM2}J=B#BRg^(E3L$@U z<*YK2q^IfQyVEWV<nFTGbd;*3^1TD-5+z0dV*q`DlJo?A{~#L2-%X^4ltcj_Z9Pf? zGOjyq%g^<Tu<##~pvgf#Etz&?hoe7vjN6mx7~sL5JjxFxQ}igs4yJ3M*gBZHptv!Z zu7_fM3N44?hZH(=khG2F0-|xdy8X1K6DTVfJ8_8h3DTO*wl%hb3XimvqmVv;S=&9l zJTa=hHwn<}EXTQ<*($Kb{p8D6VS$3=%U6UIhg(YW1EBceY*WMoQ`f#Oce?Fs0--XQ zC;>EXc|v5s6qE{^Oayz9Yyo2s^g+8Tq$3%rgD?Hq62&9aD9YyzX<}YKrqOw1{53u) zoz}qL%jt9+@XExYv=aSBLt)8lczgz3g?P!JE1>v2gKmVPGLvq=f0=YG6z*a4b|`)w zMkhn_F~cdkoemBc&0|MUhs5*kBWP~t%mje@rFi5M0VMjcI};?&Pa|k4w76v?Z3o>{ zjHD~!-`6AQGz4+zD7woc@y2~VC6-?pC6;Z*XaUK|(c<5*F?0g7{bdYw!oT9N^g4GW z(InF4V@VL7Cjmj&#?h5hlz%>sj-qWsFY$I+^fgcjLNDv5;TK_t;V0iekshHP9^0x< z&8BULlBO@2Ok0R|FX<&Yv?EbK7n(|61B#q9jn0+r_e`Vb35@;oOaXq$Eb8R9jsXyo z=SUE~8bjMsoW+;3s5L$<F#z1o$2vZ1)yiP|Nx3?EHcg{#T70N)o=uyh_}Vpx{t9}+ z_PO+BLc1Itt<SlcPC<8Ha6Y}Cz?-p)U?l*879a8Bi)k--a(*%0ic!e2rF1UT;KTDM zYC5%f^jkyI87w!;7y~yKX3}`>x6(CILyOL*Qz(CZ866OP`?l);G;6kP+fL=!^Y4Vx z`E9$S+UW;v^kWJbSYwBsHH3d^r}LpmT23oSdWL>*IbG76&$j_rnEN8H`I!zQ>BCWz ziqltD03bZHivF|6?(wU`rb@34N(`SmY?>ALlhq~TF`x&RjPOM&5814sDQi-GI$f0- zDz-r2SigS4#93LnQ-pdiTB1s=>7&=s!%@l*ImLov1Yx+6!eb^y#Oh0Kr`?p;>R9`7 zsQ}@wt*UM_V<z8r2OSOzJYxob;|`h+szlNz`ZetjRacl*?Ly?0yuBTN`qY<>2z5d> zA9**uPVCG1uq|{nnK4sey@ftO<IG`-Z64T~Zmc?kZ`(%ihyGKmV9Vjw+m5?MU$leX zr10~%0lkz@5is*9w*zxK;-faXENynu2!+PLj_9P(??Evd{|k?}k3I@3e(XMaL-FDh z>E18$vv=BCkrC`^<RtO2ciNd8LdtwFjpN3f&}kv`V1gjZs~-!D9|KuVY;qA%?o&&; zg`}f0Zamm3DDd2N;R8%Gf(l;rzMvxF_On+H!{|1b3xq$|A#RM`p;!`*4Y!ZIdZ>Qp ztlX?QlR>&i4ynxnJ1`6cf@XB=Q=^_0{=zWtgkc1I7y?b^U{pZQ(8?>oM=eS-de=nE z4s@PEyA?znh{=L5IH+>CM6j+<xF{vs=va>xRDqQhKyMgPEv_iDi8+~OvltB+S#ERe zx(U?Y#yEi*Ev%qg*xUl&WmeY;1O5R5y$ODLQ!&C2hFPFFlo+H-PKLn``+|fs!TSH0 z2QYiDa0;`R(sGK7p-k|CblXj+d(dq;0zMQq0O8JALTR%G3Y=i{2LP}U09YUl6^NdI zTzocg7NRm>0ESMg07jiWPSj$J(R#^c!Zm54bO@AzWgS1~8NOjR9i3~0ma=8&)lXkt zk6AlfeF>UAA>rE#tO__mKR`^sb%))9+8Nk4GW%4@yP^sqLp&wI($#pUJ@lJ)K31A+ zclcRpQhgs}4M1KIgVTA(AnnmB2=C1L=vFASy9=x?p|3>@PRj*Vi7yJ$%C2gs=JiRg zpxUX0DNYNlz@)^e0e&?|Q?sImy$$t!qGq8n`;a;N!+T}@AUzyxqT&O$FSdDPH%Ir< zPV;<F1N2Wb<|_#RR`Bcf(&=fgVv@(tUYQgY?y$XHnd~;=&9Fxz{x<P})p)0Uw3F8d zRg8Um%k)rz6ATIA_H|;|TgK3#XCxf-UJAN-_k*0GAa#!}(?B)0mzUbiwQrLhGB$$d z5$-%cb&oN}7kMh6e0b0`w!RW42hF@jJ3zDPlC_zL5<zyr1$4tPa*b&k$hVs;D8TdY zFGXTjQmK#f<^Q!5Mhpdznjf%fGB*sv37RoV$NCXK2IPYw)*$&H)yUEk_6rZ4qV0I% z$B|L0e>GSYeC2-HEs<Q0LQiW^Kp0Lirn#ty?19fVAe&8nkAIM%#`6#M)7IT#UmQ35 z?CwSzQQ*_E{Bypv1MAqlwg}#=wYi)cUwS{isSj)eDHO_AgSjhMHi#7XBP2@Fv{_5R zoE=|7i$EwmQUkJ`uiOqo!8=9@g;U#Uj4;Vtp=pNjRvl~;F`JKmfDQv`vg!dt!_hB4 zK&#oH!)?zv<Zv#Vr^4kBmBonie}fpS;g27pR@pY@F#VVfXnV$KctK0-MV^M1;&0=I zEgz#rvZ4Dinn)6*8BvenY(wE)+|U}IV&lu`(uc;Aj~b)$!$+y<rynY%_jW2L-K7R5 zefyKNtCGR*f09mRhq3<mPts}ZU`)%Ce0UvQggW2>r4;lX<td7V<0*Ozjk{FL-+u~) zB;WWn?bj{tQju6$F?y=-5GGkQ@oxy={lwFBY?qq<so`v>G5?^_i%)!pc7pMiJwvU~ z@hi{J%#N~A3Pw1M-68@J&|-#8JM+Ohjp!ijr2bbOS!E{lw_m62p}%KziUIbv$LP&a z*pJa!P#ix7LuT+#kI^ykFYZ~oWMJ*Koz3p7ODeLKx^2K;&8emRA295BmQIqW`s!KG z)@u2v<8-Q;kpLzi-+EjOaP~Nz2SwU*bY?s3IcW7Y?j#wOD)<~-234*<M{@w$=bjf} zc6x!%jsM>USpUu!Xa=u-0;qR?zFf$Nqp*;#yg=jSiVLs~qyE(GMS7f}dZeFvk(Md! zFsNw!rkCk{J|j8Gk|3jp?^L0-7-a8kmt05WON5-RKwkY~jM%Ah|K?fil*|dn_7#yB zT*0il6LNt2<zRruhEdPtDw9S*@(8_brX)`BSEzxJ|Dt#H4{LuOm$lr`{_v+??A6lp zrP|`lFlqkWzi8*#vKM3<z`6Wt^34sr0mM60^I5t%MWg^3ml2J%77ESCFdu;lB+nNi zO5}{Z$Lq9v3Y+}pMYp}!2-|^xu)I1EST&n`R`jW6{)#fwn(sDzMcny1y~)c?eCWm_ z7q$X>OW>}UQ*15m54zWhkC0ymoHDfp*%s!OAu|oayC$A=nM4OX-ULX<G6T8j*RX<4 zaVgL3vAP7$Q}>+&$t9rjvd`9pFj@JM6&pGNz}<uJN9I6-toU`AC)}%mEgY9baPyIy z2S74vCD27)qxm=D%=Dj@hUY@d$0&u5{?o#Ql0WkX?dtWZU%h8S#D3@#l1d!blL>VJ zk3fEXQn}eJ2%{jq(alJW^V1vM8!`X*X$=Bh3LW(HNzDMM!i?`?pwA7qIzN~i)y9j$ z-OO}tvX1K3DX4Ou-{Nov>G^va?>2Oi1R6%BKeh!bH-uBUh!GasSM9<qMe$OQXCQ>~ z2V}Glx<rsLidj|DUW|;<kh!N!_=0rqX}&)-s&ik7dn5f#s8{$7x{>+ifw0hw9bn7> z*SuGSKthoAS|xmzAg+(r8{#^^&jx81{`<SMx7TO_z}Q_r`ujJABC<y)BA9JYf4__x zNJSY6a*TwkpB81~s{7%M#8$vo;A01_gz#+9@81~7Zq|T7G^i{DoDC0*5oM?RpT}rK zM*!~Z*}3Aa2uKTk5qBYf_9PwZ4eS0aW3p9~V~Ty_W9O$Lrt4FX$7uE03vzPN6}V`u z+;{z!;ahX#YE3tZhBhM1$FglB5TMy_Al$2|+fD47J$~L~RQrFZ6-nji)68U6Nwpsc z82A@`n-B5^>d~7T5>7zbUgVDW>H018m^KgU+w72;QKHqmZKYr|2O6Hp#8y`&C~;=e zxR1K$V6Tm888Km0)pnSw8aec|r^IUul0(n5bOF;f6B&%z3l0ZMAZA`v;V6)a4Q$Kw zIkqC3%g96v6x!ScF1ys^oJ9@9;U}Np1NOD2(3W3O93-D_G1Wbz9Vj61K;v(Iq_*N; z^laXOcj>A|@-my!#$0fjHgI}xW@<u^p5BLeD#XN)Qa8q5F@|ny0mwklvhbEoM6?G& zxNm^y)^0=xv({*P`q-u#vG{YcbLY*Of!giYN4T|*8oT7X^>Ss->}s<9;nYpEWvp6L zTxh}zE@$6}WMCB<VFB}$Zux_D;QxF;<Gf*M0;EYcbplOxQ|HD2(&TOe!0b7506OyG zz{UwC0z&E;(ilR)#tjkxV9M>HBXj}>2COczOTP<d3JH+BU}-xYZeSsP*1Mw<X&9wx zDYEM_unx?j5)%Dv{3NT7_3nWDCQ-wjncf|(_+D5XXq}rREp<+l_^o~x8tZU6l7x1Q z8z#s?<3O5tD%^?8rw+cxZ|fKpJ5+d((c6l76$QvSgc~{87g<$;b{nEV6HAGvjZ`2r zr2=_)r_?(hd7if6JtjpkG}8TSRf36>AX_!S2)z~owE&h(SW%w`xn_p%P0ZpXHG5f^ z4Qz3b4Ylu9cnA`v(-=%YT`>vMGgnNmuW)$mr9w-o2Q2f~KB8^Ct2-H8V?7}~P?Kpg zPeG+%kqFiUt7LAM5DG4r;QfU`HBXgEC!qVhS7!F9=2@(P|JtD<G1(fZ@7E7Ni3M2J ztqX+2Tx4ogK+v{#<?6;j1nJ5(2uDj45wfXhiMwH4D<f0Q97xEFMnt9MS9k(u{;BCB z!c&?Z0`?{-?e8||LUVh?+9T=(>k+4=95MqMH4JPklcef<qM`iQ?p(~Wk@1A4M^GBb z1h<t_bXSSNchD6AmC|Ew17QS2r-cU8C)q*?nzNj5_=H-#hokeXq7x}Jzyw_OjHzf; zNa3YPIqj-6Sd_8d3#<;*FW9oD(Jn=bEXPbcSVEy=CHo?xPUd3HmGLH=<txXb<8+X> zgFHbx?wFa+*MJBky98gD8e4$h_bKh)su6O5g^c|^vI9T+DecG(M(5@6yeC*!{^L2? ziue4Cj*h90*|uG(v=wDm_ll|-{n%%8Df+Fqo)S*@zfRG^pw=HgO}~we*;ZxLMK4rU zHT0)HaEAIBS+tmsJWs!m4fkd(wOie?MrMdIh3|b6^nU$_+<)vX8ppHhsYmMl&(zah z?NY#IiH(Vo&GYRbb*kI+>dim60OnHV1zKwvA&|;_UqRbZU(roqDfH^aU-^nIB&nHt zmy2|SqNMQom*^&d_t9A_8?1(ywmkSXMj>=|nNG&Eg_szAE<GZiTfd=wVS1atp?L|_ zxMzj&gz1sOV`X(1D!Jj1mcdy5*7r1-yT7Glp=sT>)ZV9|DKrV6qWHgBJ@6eJ&qoeo z9eLyxn&my%bWGOr3&V>68^>KCxUY}3JY&^X2dsiZtw!?Z|A2<oWDp&l7O?H`FgJEQ z2doL)dI*-?0pt&hveqi(PfPyY_q2i`!nySdt(Ctbf1vXXi+i|an6LjX7i|40K)US* zI)NQ-ySAPm{(<(AOZV;%)aDiDn7TRQqFA9MV<Y?2Yl|8S9AHW}1~+UD;rdlKM~b~S zCp&B6w452)%S_nukDuMWuF2^;b9cdR7Je$!ZlRKQowLZt?p}|t%sFcY&uM|eO@?aC zt{VoMH8W>MuAgm<5{}`9=hL(1Ox2o<><$kd4#I1tA}t@fY>SI8ynX7j70#ldx@<ZB zaAssYpZGIv2S&%T6?WJ!E|Iuu1k5!LJ|55rs*C6o_BA`gLJ6Q$1}_^PI!qG~Swb>7 z6IjNe_GnJB<?jhJ`q=XK!MXr$07|SQP>KIhdk3?&Ksc<sl%ZXNj~fk!M<xC0#6Nh+ zFLVfrdRE{23mt^vrFX7TN2DMZjMB$#AxZr3uhfOP`OSIv-=I<rpYa>bm+qaTztL!= zd-Ufmgdr?Xn@L9yx<@b;0?qVuztejO!=HS`b^26WARxKP4LYf+<>`OXk)noP{ulj- z@H3ZyS$yP^v^U{vpuH(K%(%y6H|QLtU3F|)y6mOUR#1v(oes7Ea@?Y@OTZV>(z%<k zdR7h3^o5kYOO#aJ&%!q2yEOiog?*;f>UT%5Tnv>#?X!{WLD&QE?ye}dIucXT55ovt zZO+yKQ@Oo4O9kxc&6(RvbI+J(A!+Ux8OcMn|Lf=_wGA{+M+W{Yogr*Lo2#)Z*g$Av zufkG_CB^NntqP#+jm%Lf7W`lfb{t^IZ^=$@*Ux~b^SOwp89b>KTOd(%S1T5UiTPJo z@ExsjVr{RM@<*as0fu4QuzUFS)+~}AYQv5}M};wLm8hYgiDA(g)r@(c{}9VQXeCV{ zL2VP?=BdxJc>O{g!&Bq>s&;Iq5(}-&Xjnms6Zmz^2mI6aYyclu#3J;F4s5zIPVMng zlN`RF+T&wn3J#oYVX`l3dT(hdW}88Aw55$bhraRM?~%@4kv{9EsRT?0t3YPcLveuc zDeG;Z7dWsIFgSVs*NtYF)CMYrS|B4*HW%3Y9z*sUX`$v>7@RKsNvmH|Uc3xvrG;Rh zbw}g&r=5lwQYP&D#!Q$`>%@9^f&ZHJCTNxP=eO!*2jTN&A_tiM{C1;BG>Trin}Fj} zUym@_7h;^>CIe0)L?yrvhXaz3W<nk(kM7KtQe1RrXVyb5y6^XhUi|6KtfyaLN#uud zA^^*a71oxYf~V|Y%*!kJE5Ao{Vuxd1cJX#y*a+VCkBHtt7gxHlxA+%-MC_zcN1xG+ z%~#^9p^~xSV*RQPMpu5M>)qKlLh;w+UhFNUBR%*LMm`RfnTvqJD@YHP@`OIDOFTO} zbiA3>2Kt-S)p$>r8arN`l6dOw`tezFr!1Q`Gizej_-Wa5mtpKC$e!BVR2X2wuZ&eC zxowy}fGf%$@5A~z>4|n8r;nb97ja;%1VihAi$)$Kx>_>6&lLu!z;yt92~bx+n-o5U zi<=ayUJ*t`QX%x$F4QFUh%*p6)`xvrA3(sz`tN<&5WHkVPwdaC%o8@Fr7ZpHq{RN- zXeP7hqJV9bR~>GXe~!OBfc0oz-6sD_<Cs-Z0{hO?Vh+acyoc`}$g*JfUKq$8K&@pE zyP08i9vZ~b#dhN#lrhG8C$g`5eCrkFuexgO@L|cm<}*6U_)$<@bt@|08XuIzy0#3Y zfI$9sLw%_YwEf&9meO|TJ#uYJoxsYgME6<}d(O+&U%hCMekiPc_}KcNjBH@TB$8EN zQ3}w4Fm{*8o-y=RxK4I0dl9jUMveu)8ogHdbJgfujnmH702<6*>~^G2J;6XZFSD*d zi`CsI$JZbSBfj;>?V<1~N$AlUSY>zH@x8miS#F-bgfT(BdO${^8KL%1@i>EO|5Tx5 zg>7_U^?BR@zTjW9l{YGHWKNM015;0AqGFR*pCsJOoAZTMV-v<<W1pyj5kI}*wc`QM zLQqRYa<LWI$&HPMN)a9qW{ifna2uGI!gMTDcBZY;oGUb2;Rv6)BU(y+=+zj&G;#!= zbrhpz^x|e=83pN!cMAmz4TMmBg}u}R9E5jIVewvRICz8|BO|wVSNIsQ(Ph~83wl=8 z3#Q--vaILBP#Z>kvd{83I=an1F{UbfEQTU1JO-eZ*n|fL;PILq%yc!u5RW{(T4Y4q z8k`~`8B+Gx#2F20?;}UVf~^kN1ZS6FYAx)gY7{eV@Ik4q9uyq@nYqm+;6eIKE?<z! zx{Q+Xb)Y~zljXJ-qT9x72=e9lOsl!?n;te19N^JZHaZ@6s=0-Vp%b}>{z_%Vu}12B znYA1bLdh4ELvVMa7QM2Njni)oVT19cE9~|m>FgIis|&E~sQ!{^=v`Plo-&jzmMnYg zP_|66?EDNi5;#Il23r8d-x=&?&}?!u**;XcDnI7ehO-U$>m%+N!9Hkfz=5t|Pmy5X z{N|CM+|=mzj$~~V(MI1p3N(XJ<hK*nLgVfx)2#KtI$2$yE6WZBq#DPOtR57>osJsM zHGX^y>)PH(q_C|4Rb8C^7*Qpl|7#38s|@9*$1*2H<n`D>;`p{VX$uReIWQ^xrz}P= zRcZM|h7qQd6G3&U<*C_hromFj3YH2)EU_~?0e-@|2I=ru`sM>9GjHv?5{q>rd2#s5 zeRF+uc&(9kD|}wSr=<81$D{B>LO>j(7H3-UM3)^Q4m1gzHTZTgVUPChiF<+e?IAGW z^@MMQX(`PCk)^R3v_hNon*))HI7Yr!>46Oe?XjQ005IDm97xPScVT~++PWG63#zT} zhanQolTRY8)P!u8NZwFO9_@*|Lo2~X748a=@(p&<4w(t;4wN}v{H4`OyH0o>#>mhO z?{>^l|8t-2n8I#C68Lkk{%j7Lr_6(DjiNtB+}bG&)B>B^ji)CJcO5)LhgpRSHPyDS zTFfA`wa^HY;ZGSR<1bBRTjeOzrZEei)1Nz?9VI{!>MV9JY`jA+`meKCdpy({GlxyW z8=QFadF**!mCFY5h@05~c=PDZ>;r{=Hx%|t??W=bEF+!w$YpVS(*ibID#V{HV1<T4 zJaQ2`E7jeOi&;PHd%_ZS7nADJ+j(p(zt76vfUWdVKD4RfBMR7Q0I5SE+s#nH^{27b zJkiF6vxBH87ui^!Xd`$iv$Csd_+A@W`R_dt)rEg(V`*{2!~xf<rAFwmvK;Hg7qLMG zF=t6)PFpOAdC^1`Bb<|bauF*BeLR!%=Ze7cFqshu9X}&i^6CwKE>0(s@AK-BwS@Zn z=+#oED@d=d$g5vrtHk7XsDbGWMh3?=H;NT2o+>F7ewsuhh!y5`rXxyRx5Ea0Ee7)1 zfeo^0k)WQh&_I{MKM|O+IPkKx=%p)Cdeuaxw5Z<LkPU>*Sj!5lag@&h>Wv?baGc4q zMP^kvl^kC1v=TNvy}C`NKb)Qw`L@h;EjMk4AdP&-;Nr0T2h0@M4)A>?tiw$6l$r^@ z^r?un@ru$WF%BFx?6p9z3XEPNoNh&!+oFZA5$|GW4|@0f%NnG6PBeIl12TUFM&H*# z045Tpl4fZkGaV$*kmb^Fl26nROMmDFm3@Z|c3JrBKPWn-mFCVh;OB+QSvPNEoRF8K zz)!Mj4JkqfLdcb;1wyotA+(VPn(CX8?I)1Zz&JEa+!Lq}`o3Y_Sn(budTkr3)S+b1 zN#2=@cm4(GwJLEHMxkJ@Kv`JA{7u3FA;F^Nqb`7l20;PjKixyywQp=S)fR~ZUI?&W zUdpIKM*hhw%Ggg>mN-~Hi#!?6TR7QJlIiE;oy-IK^th94Zh1I%<aNU;n#-%pSx@dL zX9GZkhPJ$%?TxB6-sbZUT&z8xyOPZfKP!~aX1TyNes3i^7JgyJ7hU-yF6J<H?0C6j z$L*Fowp*^bV|%#SEOt0<<PUtM8-!cj$SeGUo81EpWTl4<fMSmaDjdY;-+9<Xc#u-T z5}{aH!S+J&X9ZiLRP*_(SO)y7TE*5w(Q-8_WYt1XSk2<XVC5oM{rFR>LBI<wB5e(G z1126?!!S>~TP0he)cDsjI|%o(wQM%thxF2VHks%?9tk=@TY$oJ=Sp{NEq{Ik8whMp z-@(7$z+NIL$$U{hOD5A2#6+QkR~~8}%a3|l3VBrL7rZPehxTq{``c6<F!&%Cr-!4@ zf5!*j#*PA`KmV<M<2H6PUIze-Z{a3(23T>`0e$G5>`6>{y=60-4KUViW>YA|cK_VN z-ci!{+xN0EimgX%WsfMl$^krnfy^Q1*BpTI!MRN3SGKYF5{T?7wpuyJU#Mckq1QjF z*ex<KXyJA?ntP8i3*Wn)<pM%~+Ro;5G}2{EXQdGe#ypi}JJ^DjX?T$G^*&jk%-8bQ zcCdxet}E~}=y|!1Vb08}KDMm0(Tkx}U@!7e0QNI>C+iq%R0z$rdCa}b9Xnb7PQGUQ zB0?j=PDym0ttof9F#jjZ&*C~-L&@Qn`7YR-Qt}(G)$#b6KYt&neYHG(7fWiDnh7AQ zSMI`{7~qHYvZ;K}F4h$QKDLYXjWzocdlCCHd&(6(Mfq8uII|A);AuQu2k2yxU(EVR zKO5R{2v~ELqd1UZ^`Vao%;H)<XDL0*USx>E=ESovJDa_<sYfWwfk#w$>Nqu?+c@h3 z-QFXM$DuGbSGL?-MPJI5zFKLlbacJLSy1ZC&$qd%#BM<7BPRg#2QfQ{1Xyp(6SDJu z@C&-UDZmCoQ4wHMpm<R}tPij|CAF07W*;(4{pKU~fI6DNI|Nx}jIms($F2ftT5RKE z{H%RsxjD*+y=<-Ai%WK~G5qJftP48T_A%+5<dyqa9{;2|B9?!@k7dKFA^RDIQL6W| zIZ*s(Kj`N*Jf|AAc@3|v7XSXPX1QE>C89kqxu13Q%5-$G#a+JS+0~(Jhx81dy4+y2 z2I;A<rPMV}fxyzQ$rno>&W*(2Q^4?2IfQwNmj>EBCRvqO-Hq>k!iW^C6dzy1MoYwO ztYLWJ$+;S4H`Zp7TpJL^S@*HweCB2r&u1QB)8*v%9bgM%jLtEX25M#7W(sEyV25p+ zHRIzS0DZoOA9#Sx@*4Gwgld4~tD&Gw(67>EvdotScHz*GhjTGB>6TY{1))mVpVy!b zI|>^tKXZaInsar!wUI%I2WEHTEfzyAsd4k>rfZ>90n>$GcZWMP(jLri{N#L3c}0Qn zd3b!}e6J>&v6(y`gctn7gREm8ae<rJo!M2>6uMg8?m=KkHGIW`Y=Xql;}5dsof=T+ z_K36?afVkkNUH_<`t2Hv<+ZiKBXqfzO_WWO9uh=#&qJ&m8Jf<IJj6z}F?uq2QY~L` zh%E(P`|crzcNOj4!+$=^N`Oc2-p!XB5t?zcX8P!dK_=l(MPL31Qxx9zK486-$8phf zq@eRW$`;8*fB#YTKC6y-eg&_7j9sJAtKZl8<E+0z+ie-fUwMLUqVP_iaunp7lF2VV z$xZ-}J)RQE_1#Y~AHL>Yo@S}=W4S)-X|`Muk6w6&9fbx?ojoNw?RN}}K>WqGKFbF1 z!OyXt15gLNcv{?!K(9U1D7I8lF7AiGwCjtf%69mVv(8F@*W_C|c+I82qfjCN14u7+ zn7sWYNMnaLB*QeiWg^h%DkbR-NI3-BTB%7_^5zuLuc4H?{p3V~RHi`FCMO0MApnZk zV5NR*>6`@05c#P@*ogl>Jt5DGcn&7*3&J{Vx+*u{A3-LQ82G)<8J>Us)pP82V1n<y z$BUn5SIN64^@T66f0MR`&QMTdD_F7IneVQu(Vu^r<>L*N-Cu>q)v-|Z)>qjs5{WlC z<6qw4U+fPhMQ{5$>uY*4bL95lc}POA<PboxU5|+1<KAF7($u==4VIux-qb~$NDfD= zgLG5p@QKWOewS%mczL5!2oW?#Ov7C0g))6Apa1zLJIM~myVLbI-(oG%B{20}K{<8r zvVG|2ILRV0Zk6{Qt5#B;d7nKD#4|UYKlTBrLPL4451AkSr|Hjq$X)@8hM#=>$82BA z%wgdRV{ejk+P_rHDLTEXs_K4n2N?SI|9wATp~ojCZYw_l+*ZfjGMoSP2|GdKw>bH0 zpRxyIG7=;!G9nsPwfefxm=mG;@pJY%z?yhUu=%@AvHm1;7=Qc}B0PReIrqI!;(3qL z>;WZ1KXDq=SeVhMFW7xJ&riN&7kKK+u-*@6OKk6cnZ-w=WCod92wYqM_4YZ&aludO z`R76Hp|JG&{t#=Y(6r$R{K`c(gtz{MMewWj>_GRSa%ta_#9*9BTxR4wfDX|AEB2#B zk_z9EsKoR1i|jkuKH(Dk45{Qj|JUp%0Q1_{AWr#DU$a<!z&GrgqNMU}-?21<PNqqm zKJ$r$eAK%jCKi9k3M3+5`i|{nhueW<nDafmLfZky8GnUMz*+zGBW%<f-uWu>6nMdZ zxXRjj$tQi}4JiK%5s?GXmGE%xYPV*%^v!z`+&=P2U$mkECB~%+c-#khC%(Y@{iIT3 zGIpo1H_Xc*j2n3qHJ4Rn6`D7Pv=G-I1_T4vLqD-^@YZJj?$2zzfKiYBh24cqxBD8f zO(mVj{LB&!L`;{6cy*;jMAuWsmTgzxAj+3Xm$5)ii{ID|pxeE_u`gj&;lZuHvuB~} zVSljWiZYD<{3p8!(Dc-Gw!CGHnePo!iNF09OM-gW|6&_J&)>CHow4hEbxK=If|AJ^ z2DQ&XfMVFmmztd9%akYiZdKGJQA)c0@8;@LgrsKhs#fYXWu~0N=Tq=>V0(U}o7xTd z@=uj4PXD#FdH@(b$cbPZbrBvz{53|Msvug3o*k?1QF#BJYBc{YPW@dOrhgT$o>fxS zh#n1*ba9wUTykKrKcTsZwXhZhRwVnPnl<OYwO6|;8ozCU5~~mDpsq%0d!VEGWg859 z87HxjKs25Kz_n=PB<7tvtKH^aa#>w2aRsrDTw2*AYEXa~fa0ipF_Kjf-kbKYc_0-% z@c(@PKVRS0Sv{^;Qh}Y-D)O4-`(IXDac5WcH$Lh**i2vT3*)Ohx4x~!=|j4!zbdpt zTDm@{ry7ArGShmg3jkXk(uV3=d#iUS{9K&cl6UJ1SWVGi>8tKmTCm5*V)ml28<q`F z;}=H!UV;bYM2Kv{%;~eTa((RaG4jx(I0Mu87Mw;`yqGZw%m+EL-&qu-N2(in)a`{l z^;b(ryms_qyj#)-uca`Rs*PLRFL<Q7$tgaec3~n%<Fv&u+?eYJax&juYWIi;Q7K+( zQfhjUjj)?$%*#i=a7ok#JX-XsfV`(4^t6pEw}d+q)J_FWPAmoK*FWRV{rW#f)>wEf z;ax4oFmS2c$S%#_1=0tb{3m>Uascldh2}puT%VjeB*5?Ot9J9!%_+w9^BBY5<`gmf z)YKF-20vak34K?XR<$|Rw#JHSk66i(o;*Yor|&nXqz@6P+A^XKI5nd8ZXdkEwFsx9 zHJXo~jw5(zd>r-g2NTp@>4E>pynLc^Abm)acy(=&emy~*u0*5(gGXwbHb`wwI-AyL zIE;}XlAq_fftEZ;YP!LsX3Gu!OOFPEg$;&Bba`d6`Z8@>m#&{lQNK2>{d;YQI!O_J z`<CfyrwHTdgnn<jnyc{cnQA^JOk}D@<n4dwhe0=4!_?1d_}}2+Y7tEhCGgq9)%MMY zE;ZRPzY(Fvx2d0=HDOBb!dclN<66MEBY?Hk>PJVYHx$0UwVFi8KaI9leQW6QnNjM} z=&*Z!h@U;y8nmTa63d5-R`c26nB9ByU8B`|6><OJLp{f;$V2|^Qy1zR#;LQBq3a)J zscn_0^fVNbcuC^-<JCxlFMge<4#$kR2PUg|P((~o6D*=yEgwEb-72qCe0_?lnAbth z6$n*ZHw%NA!cgM!lQ*d=qzoKBRox=T!X!2Q&8cc9AyvMbrsC<FVbj%@L{66e`*gK8 z12wJ79Q7_x6CRkOT8PZnI+CkiiZDWGJnCk^dkuHqtZqOD$IYrU*6>PaFUX#dGkM0$ zIoTlLSIt*F(93u8)pH8Jkp#Hx(y0+H3zO9tesZBIk8knxMd}77%-&}fsi<{zTddmU ztGgGgIvR;9^l?kn!Au;`(cO7!Es;;F?P@ZrKp!qwPoOozSE&EYV!10Yt;OCFqj$Nb zc`GYG$zIXq`n&!jJH`)h@jx=(kS4sHF1M%2)fEAZ&j$2wO4TT8Abp-h`k?M|KIew3 zDI&_=W=hW7+zB&h<j$EnO$b@tQm#J5Mx$veF@zN+<xI==wfOh}aaM;eT!C6ekS<(q z_>5c1<TKMj8{jL6C3XgSJ>1rYtH@8JH_9sTK`%`%p~AqS8*RDz4TF<W<Sj#G&grTY zgx-wstW|0(*k%h>sjs3g)U8t8;Jr98JOG$F*+#y)(NJU`1EbutCR=8k2Mj$(DAW$| zNQ8H-!s#4na(A1&qs;(JqzS6A-yuIQLv6_I5ek$SG$@lB;YE@nt<I;$em?;8Dop&g z7uY>oUj0BkA?`LW21JV&Z=CN}nvKWx!#Vi^HowY7+ucExjlwKv1g;nZRPrQj!;RgN z2~Ni(9~%&f+Xu}W9SOo98a}FTyt>9_z%!|==uxXYE|ctw==Nle!^esq;TvvMyLe4y zQEPNhR?}<CnE%DR`hKDQ;Zqf|9tOeZ%twjE<}3)`ZD*{7CO=+a2^|$pjXO4XiA;$( z3q-~bt|6N<WWLN<wu0IN8jiRga-@$Pn$@rx`Qj+Fd2?jzzxhq;)Ik|OOZx-4BGCY| znS~1-caFHjCE#hakYF&Le;iZvgY^6p{Kz`B=R_fu#5X1c&heB`mN-KWkFAA;GS1!r zfH5aOTV3h06<b|}cw;z!LM8Fp0^yRMU{1&E_}qqT$^=Gt7#J;aI-D+d)AJ0VDu^4_ z_`X-8x?-?58u;?|_3B*VZ6NxE4Qd+c<)>xegis=uT{dGT@-q+iGFt%j!m@JS<4xMR zYj_(-H4@gq{47MkR>+el0|y$(f9ew1K{B`dCaZCM#TA`?)?D0WSZ}VKnHd4=*F2C@ z#A~*IOgZ<EMFn+;^{&H#eXRL|Vr+R>2*bJ}0ac<cEP71L(Jmq68E&VKb~$fcy1J(! zYph(x$}k(;THtcJ-R7q)x}0}Qj{{x<`9y?Qn8$d?8GCHB^}~upnGpj<$7;ice*w@D z3Z?g`!tO2!h=Ys*dU2mrKwKUcXka4_G;R*Z6%`vCai+l$^&_{db7@;cl*nbzo;j(i zM!)kebtQ7CKkru8v+B5_B7Myk^>H+V2HmT6#Ebs3x2aSCV<x9c{h05V2eM}Bp+>Ui z+B{XBT#lYLVcCp%)3fK~OsEq6`oY^(D~KI1zJ1$OyuO9)0G+><uiK%bJMzp9)dv5v zeDJT9-|tg1r6^B<e^EQtp2AG!gLbOx;K8AtYKEEgFg+`0+Jq_D6Q+XTzPeK_f!7N) zwHS)@`&2w4eDFRPu9nB`Qb)r$^LDA_k+nu-ijSKN*0;DQ!#IYAPV=930qNH8Y`^L< z?PdpTQ~rrxool9i%*vUSJvTQicivnWb_7?ac1=lWY<Bq6e=V^J2PYnas^tebh}v2n z5l|;~md3j11wV~6Z6Rp<bLM1E$c1_Z0o4KZK7x83G7|8>oJe}XIJ<FgEL2L~Eh_EX ztuE+%u+7G1@=|Hoh8T)Za%$oxA(%+)9x?Mf_JFb>Fn<Id@VxnIM4MT2z{to&Q)7D8 zjET@^N>IHG0|7w+XZyYC3PS=fkP>*|&5c&MWs$MUu|_`=bLQmE$(b%C@$S9qK(v@o z>{BPmi=-p>t0$zId2+w{E`Bm)&;4posd@6j2UHC8J#;|*0Y={afcgxO*Q|qJ9M<xc z2i5(NL(QwC;~rE`!@D0Jga);|xK@1@{`GuFog({Q{*bzgps^Lfzdfve$4^!ObrwC} z2<{=P)cDqOr({o?Hgi_)TxpzteMG$i0DbzfdXpl2F1+`nLQQ-3J^jL?s+E{3SHst1 zV56LTLOrUah%al56l_ccbKGDBIq;$}>8-bx%B$2|@+cEv`RONN+O_=iC)J^npj*|c zbI{XOr(y`}={j`^6#vwzc#G5Or_|fLZ@iL)Y|u}CSz6{4^3-KB!@55D%M$q^3~7KB z*vrfz(YV9cQefdxM@^heL@5h$sq=ycYuYp+#Z{UY%Y*cKaY$ZN5B+vTZ%LY9jtz-u z$RE@Awx`vRWMeb__S5RWS#_I@3V+}kb(42(iO3~eTinEx?${x3<^-#@81JXEm*M#* zyF;cK8S(5UcRYX?T3DauV{22*%j^Qib!PCaBz(A1$T@`ENMqx5y4r`pDxT6+9mvCX zOns04eJ4nbwhf*RGF)C2#BI;2@=A35<g@B2g}<(;{bTO%HF2X1Pvteyk@5P^&#Ctk zCG#Qgiz-o4^^Gs9vnifY`S>+81*5R=pbsDLhT4U{Qls`KcTM3(V=O6b;6Im!bKg8A zo<H-3+Ma*^o@x^mEi%y;zo{0`SQ!45H-X^+oBiu8^-jXl(I<8HyJ`dh8)3(L>I|91 ze(pWhr4AL}=2-Z?`VGOBJo_W{bpWU3$LeG<*$BGS7B!GXeNvJZYWk@w)4?Xf_~r#T z0gPS9Ex%N5dEX^50~KeGCT>6FyFOF*)0l_tddBC#h-rGF#(!EH6-N=I_y4VS!|PLj zIHm4aX!rEl`t~#GJ4yshrn=*r3~oIOT)A3*>#VvAMNHy(^$Infr}F6`H3m#B*u~32 z=nAUkr|Z=mDEeGb)1X*<L7imQj^oEJs2xRZ{?P>$FD$$HEA>uZ`y8PC{<sF9)5YDM z`m~E`d^Df<2E2XjRq>YZdjonAH$Z;+i+a=oSl)ac48}D5)O9r%zju@Tk2)T|eZ^fj z)akg&uiOCpm}DmKA3jwFlNaUU@|mAOKN}RwLS+d5w_;fwIW%4PjRX9r*P`0<ImGfl z*v-ADWjB!G^VCuW#Z+dw3dJbZ@_>@b&#RWpIL_M^%Q;{}M<Oh(2oTe;D9hc-Fg>fe zWdl0kUTy(H;HS7cx3UaFA5(5?OFC7oa-rV-T|$$7QSG4r8DnYHf?I!q*`9IA=f{5m zC{qroDqq{xay2p&sjuzB7r3jNr7wTHi^amX_OK+f0VP&9Kff`e6BAajwTI;xP-NGh zmfIBa<GuX;UY6Og64!cJW&*!`_$!{>+p-cW9Pe#;mqZO0`A}WfJfZLCXX%6u^hf$z zvT&vI23n><@%TVX0&k&Ml9Wrl=S0?lKhZLxBVVpq4A{;Mv<zYg+mS20^&rbqcDNn+ zftSKBFrMBXWFblf25z(w8viQMf_K%;O|tZ*?U%o!-<o7uPiZW<qF+z3R5N~ejHMq{ z|MMYEJ{wor!dqupdVAT2J406E;A4>85@YqVTiO`kYcnrvXfRvxwi<Du*SLaG9`LYx z%*303ya7{KvEe$XpBri;eq=}-qV>~H|3r<>3!4qhy3#!&rSa42MxfVf52y2i@oQ)d zW}c0iV%TsrL0riczGh3_%wwqd;S+k|=zuu<WaNMdRoIKVaQOBD{165^B<?&E#&K0K zP9#XHip)<9fhlPoca{?gf5#w5wKRK?7QW(Aq}o>%6_{q7Fl(!dL0iS||JaKH;))3` zTCZ|qjjsA8*E+hLc&BugOx%(eY2x?u$h8jgdkYQ6IfL-bV_Oscu!8K&#}1r8d!@;V zlt5nnU`(l_9kv^n{^!FO^45PaZAXXt<ItGKWE^n~e`HSthM#{&UVcEHf4j`)u{P;i zbGib?_xJv5OrH8OjrIDVb(vMGMAHm=3SX=*j?X$I)S8i(VtiT^Pv75WOxFmW`^cf& z#bkvHH+4&Vibuj4JiPcs(vmnYnAplk&g961E&M`Y-e;C}UOc8hDmP3fxYT|&?N{^K zQa0_H;U8}RA%JG(8cz`3;k~NTsuw##k|v1qRlD)y6V`yaXr^D<UWm=@1=dpR8Mc<! zYF>(I(C5>?n@3)Q^y%Ni;d#UB-w^*d&0@54VDGftDJ&=a=7X^{oDQ40Jw(@m`cj~F zkJH=_y-LwJ<1I>>)GGwUuy{fdCQ(kQMBjwfQD74{A&Bn^`013jjnCwO<tgv%#XG}g z5VN$>04>lIRnnFPWC5CAtjcLjNHnk;?EQ|OCWNA)pFXfhc>iaPvUDF4ToS$~#R1)f zkEff6ZFIeA!(I<>b$(=&<p?m?1*0t+yNhdqup9h#MIv&lCifKZ9e+i|@wnLLefi`u zmVbe0X*JgJC<FbC9p=wXuq>us4t%S3oM?$BZTC!Q{Qa&V+cO@&5!f-~^AYADxP*Y= zZV)-dN%=q*pk1nQsg1HdB<jE#A(Jhu@y^xBmhNcbO}4n8Xg9^u1B%Qk7QB=6=oFAv zN>@uFQU4Chh_1Y_tEFuhyxQ3~b|TCit9BW;P}RXU$L9EREbZChHpk}j4mlP)54SGI z@``epkGaWG3;!<OWI2jidQ(we@s`spXg=IF%`$ItHMEg8!OJb~r~QjBh80&IJ>d)) zVIpMALE68h0tnMpY|sgYw8U|?cGE2hW1%e~%m=m1AVga7P{Wfhj}zi@WrshTuryH< zm>hy1I<4WZ8J4wpL~Dk?Ox{cjI(^U0v{Xakon^TdZ)KWg!E?|XXIn7u=;PTIH-71B zjs^2?j?A%OUg3bbmQ_$x&$ZmzP7ZA=wT16%!U^-FTnpNddviglsNsL)THMLToyo?f zh(UU1Bp$W8GfKKCop!u3!O_ZIfZFAqQGCxlORATB^rCSs|HW|Hg^#`(i8r6f{_^U_ z0iUI}oyARe+ZV#42)usFphn+HFt(KVk`>~!tkE~9-2s!)yIgXUhwsn(@bQWAUVw&- zk3gXv4+e`PNOFAXbuMJWA}LhEAJJ?0(g{DRDsjLbBiiZ4T+B*nkBE<-B$+7=Oe?ML zbE}}b`o#m6t~b9XWK6(M<3b`(XI!CSZeCMFH~x%8k&njJ%Ue%jYSGBx8}2^T_&@V4 z-Mr=<(BcZrr702<LAo?me(s=gz!Pw~;u9h8!|;t;x;_v-qiB8rPf|ia$WNJ}P5;ac z;Yu$}MP4h<+sW)KuX%lzI0sJ8pYxcXPz3hqqvy|?(bq<h<8hH6*Ea#8(LqV4nQ;xA zd|Qr@DBc9e#)zUtfAOhM_F8=S!ws5wfUMy&8*1}$eEdR7Z~mVs66-aZH+G2o=@yT1 znfU+tK}7&~`xxUWIS^(=!xtdU8`AM?T{votRIwb4Yx7>0Mjwh@^Tc?w?*EJyq-!2G z1_aW5uf|A^0oh{}XNug$Q7w&+SY+wB*j#xLr}opkMvHwUqmg%w61xZ^mwf@zy$wuX z4sV0{MmP_D9nR(`1|kHFjvrlQ>74O#--fHp8*Saqr^N+KH=Qx|?M<ga+?$(r=|Fye zA&HMMuW}L#j&=Be#g@KpUt0Lzynug~U>QuJ(@_l{iWYEO0_x3v*88fEt3^Ogn7W9$ z=%uF8BXnPf#`$7P&s%(~_fL&3t<sDyT*7-4H?Scm%rP=%%n#<!(|<KR4D6$)uUql% zky5KTsen}I#Lu~$zRtgyPkLr*jX2C6^P8(adby_?$W?yWFA)ABkE76DV3RU;e?Dm+ zqcwac2lufxz_%>145Mu?4(2D8ST=fR#DSz|Gh$PceU?uyWl2S|Vdk*t)~3fD<!6Pg z4a!{ud&96)DFF2URrcKhQ5^5z*}Y>sNXOo56r~r9g;=7AV!<vJq=_IP2X;ljYBUz~ zJY`NXB2h7@X&T)WO-wYgB}QY5Ee7np_o(ml%<LUUet*6E!S2n>J~Q)7duHZ&J`bLu zOngJ_52%JkIqGB?1x%z{e7gUKVUk034i{>`M1Oj?@G)%JF1OYvj)3(8_H1uP3bRC0 z1LcK2J5^}U(?}9JR>-c-2)Pyt7LA%;{Y!orD};FaYr%$nep-&DpxA3sFyYgMM#fQL zDjBbdP5JuitjV8+3x+CNt8~G*e6*zt39#loP8UY-&sUKF8L+2>r7HtBd>Ai{6A1r& zrCu^lh(|4QE=xEF!ij$>`6ElHZ(i@|pF-|s3D+U&d^Xk!qo$4*x+1kDlY|=N?08`z zs&nTErBJQsD~Xo{q@xo3M~i?bj+p*Zu5bn4Qplk^VS|^$dM?j02H{B{!NUncOCF-@ zPZZLCe~Tx=hO?ABpD4tVCEbKTJ}8>i@L@N>i%cIc#F)#x_vT~%hF00NNkS~-zIP^x zoGct67pA}-+jENW2MyEznIiP$%w^SHp3#G*31MiQ_3|_sGhJA~TYKt{rVDL(9>@jF z6yD|`dHhVs9$_42;RYEqdOAy30|C-(;a!Aom@U*ov%1*=>Oxy*3)x0{q_OsBKa`cW z)gZywR1u#`V&({bq~08%hIzeDtQ(1*BaD>|Cd9`$W8KN&IUpgHkmYkhU@Ft)4~1^n zBz@)yXvN%dzA(w;Gb~g8Za#*G5N?5Bg9eIq)9nj{CU_J7!$RSRxwuaAc7$6jtU{q= zF_mfR76^EXUsOP)nEM4nd-$%?YSLy2m2UJULSM2w4fx!{mzBKnSm;S_>MHIeU@7(# z&yF7xd8tsFSeFU|eb@xh?8nV0Goy&paW%%)AzoHt5E_<16xmhi7C`1&1++Z8Y!ybs zqx&*p3S<na7uX>6Kg)zD2(4igvf%+is2C4)>Je_aU^V#+&L%6C3q2wCo+7DOE+o}= z&OC8U02$t@kbmTkB3%)`Z$elENn9Zeg^t!!AU~`S(C<KSp@4|`TM7jP&#y%UH0@YI zsPHS>g*dbsu?vVS|A$>@W2)1nJ>gag)f>}`0$Z=FrIyg7<N^aV0%ealgk_}u?^cn| zHV6Ua$SpTn4rIrqt8S2!8-(V(c~xPl@HbQy3UZ-T7=<nIH&=tiZxr5vtX6ImdLbV^ zCRaBK86Y<I|5U&$nQfm6c#Tr4OhDY#$z@b}zF7vHkg_;nlaPmlW0Qc&&X+d{BT4oI zXtV*<S)(1F0F5?-6ExCqv%s7?lJ7SQ4XBSx^3P`B7<|_BGn&=>&xDE0;ic(wp)Sr) zO}-F3xc4z=G1PRPEjXlg0XC$e8RO74a@_T4Owk)J;VZA;ZRO2#jg>Z+B&-+xywOOx zu|qR}c{%>^OQD+KZ1az=gkd<)T5l63_%nYD^eDxFu?b=WY4h6LS#v2?6p7g`*!kdS za(27$Hy5OTw?hcUBfC2~Ogk_vR(>nYBld5B4XwTt%D6E7<aa_onn%9;5k{{uQZv{{ zO)_TA=l>HtMM^&;f<U?n?2LN%PcVuC5Fm+V9umoT5@U61CX(@Y-F(QbJ;KP2?82bb zp<%`#0#T-^ver;Z%D@k_l_MgXAsmv!!R9)uXTwHDE>UFcFG4F)yjKX3L!w!hvBYbz z$%owDE97d$&ZMD1m=t?)`d*<Sx%i8)891=ySD{dGCJ7~N_6a|7VdU;Up-3(@Lc{gK z{V?uaX+@A~2ZahgG?F|#C=^u^h$8kw!Vo?*nmjxt{LeulEQsv=UFhRNAS{?HIgDdT zH~#^{zO^Hv(UB;eCMs?OW*3@!KPh*?`YbZ{eoWRM5gMol0J<%%$9rV_pKd;JUApzO zntLB)5@VLrzL(<dQ85818z5dTml945b^}DUz@?O-q|Z@dgR>f8I`=1RVM)Ov7)p6* ztUo+hB>0ephXsXLjtPcM%IRamLaodzF3k8af{Z&ZY|&5~+6ajx4NnLw`LHN`*9n2+ zT%)4(eJ6!h97#GZ_!8wW;h+|9vz!(dw_s$}JlQwDiYW$&L}6nq5<#8{xIrZjY8Xr% z9U;0cN^QB&f3kCp!&E$Xa9}|IOB|X44hPy*T|J;`mZNCl!Nxcz!Ka1ap!d8!Ev$Db zdUz<=d`4&w{pZ+O;el&JI5~Vy*v^MXkh$lDm##69<mKN&qJzcZ(4Q{|Xufmig7Beh zx@bM^AHkb*B#a2s=amcHT^Sb<O#Z46ij7g5$wuwm``Aih<Xn;9O|svW1(JVFFg)#E zy(YX3D@H{l;&)v*t`>VP*aVcSbAcgb(+y~x=pxefrf{En6f3SPr0N}R3H4De?dTl= z{nhlk3-Up!KKHIL7KN9JhWfpG!Vl=Aa_b`@oCT3<kA<@X%|R(3yqklP9bkTTh5|`9 zGl-Ppv_qvEIp$o99Vt^M5=m(j(vtEJqL<=u8Wv!r##1387+cd-H`P`SG*S8t3~wDo zPop#Fb)iGe)1uFLD&+Dte4|%6L7}n}azlfS3#Kf_xE1M)asHoy81=U%x|7;3gn<l1 z&6==uO(xaku5@K;qtFxd=Bx_YkOG8+0>1V?cj!j70{pbx;U+C7kM_wzQ-W7QktxC3 zakPf#IZg*Ucy8FRJi*ouwsEcVN88)k5-S?wC*=%_-p*|F4OM32Py)L)7BYDfOt$;x zIgN!gi%k3GJC2NO&C?7{g)vUq4Nf`R2KUT=AdHuRteTLYh-$eOgM3;_p}Fg#v|OvX z>tggsn`W3|V+IU12x|y?f^h?3$5I(WmBC=61D{ov%yGexFq&OUJ2EkbC#zu_m)$Qr zHiE%QE7QUOsLl8u7DV~3uX_RVp>NfwU>ZeQ|10dI$X)u)e}$!-w^ML&qzfS>FJKDt zc|%3Pv^O9&Bbb-|{Ttyp$HRA4PHe*9ymXxx-B2{xZ4%$bIAV4a?;ArgoAs#DuB=Br z-31foKboi!Nf3v#p_n3w(-`rKf~W$4Q2m}LhMGuMU$L4VqKZ+t_Mg{8JV5N?E=H1t z9uTqEU7Tp<<FAleD|la0(_8covYO+sGV~J)f`KR3sTo<LZI0v8KnGi?uZYFh2`89q z=P&z%9`;2Bx3HQPU#mpRYGt=L{H`VB7)oRg^j{!Cy<3}0e{$8QEHanwuC(T6K3nZj z7Fr5JZOh)=LRT}kp*3I8PC+ks_*K)*K4M3Q@G+k9&U@Pi=e75?&cWru!J+KlJIzm= zBIS2TcFrHhOkZT`km7J^N8Q;qr>GdXtEDSRg(Ww4GA^*WSs;yNJDh&dG0ade4EMMh zuFixHT{R%ii%f^EfP4ZgZ~y*1Vu#zyo3r=c1Ik+%XyS%zW+X-NgK{#HGn!fK4zjkS z9EP8r14Hb@dkjefU%TaH;!%PXGK2A*I>x4dRag93Bp?1QG~<3EU-g%(lgC}fntX5= zbNX4)R6K9yBK6%Z#af&>xJ4^F3AUR3^~bHm_7X|DBQ)cW4Pfd8?7ML0iKrx8^z|gO zUPF9^uWNh+#@7ZRuyr@Fy~2f(j6UKKlC6o&ydIGMGy}8FzW2SGSzp*!%tj@wf8)eB z)S~G#Kx`p`%sC}qoNDGKU^_PB>XHVT(0Tj$i2)=lQ*_hECy4VjVreQi<K0iuNZ6YN z`^o+~M33-*HTLi{(MCeTAwkVEm>`M^Vii9*UED0@n-i|#DR^=YLa|YN-b#1JR&&Dj zq-2c-C!mIg-9YEU2nP_ndFg)i>}RJQUW}uo<RqHHfbwD~?P(5=vUpPD@G7orABrQ* zQ0<Hb;x{}W60J8~EcWNf_O4Liw>z@}2kYkw#11A%Rco0zUnb8xnLYBSPBfGrtfr|G zTwP*2E)+35-EMRoTa}JuN2h{QC$JN=w48#{s_>iGv8(t=H>^L|kec!q{@DheuWu6D z^<gCpp?#ue#c23EJrI>D@hmiu`h{bvNJl>wk5M~6{nIt#dpxt>ySG++jT6(^bg8cH zxlSC%vG5t|MPJ^8Z!1bgitRe4OdJM}ePv=CxjRaP?ekkSXEHEBq!xV=X}n1s!e+x6 zo5Ttes<<a^7AKid+kKUO?sKuFz=i74cF_|F7U<$2cwE=TO!8nH5FC((1iQ0Col)P2 z)!Dve@;72V-dyH=HjAwMPP}d|_CA}b&;DLq<;Gs?{v>))H7aJHmYtUyh?lAbCHi-J z#7vG1n+~)S%NU!&8O%$YU&Q{bq;q}|=bMmrwO_@@xX}{!i5nQ<E&IeobdTn9P&{em zb>k0F;mF}rqBw%GIB-l_Qc`keAfl*P95xB%cmP|-Z?;r9L@(mcubaqRNK>JIR0Tz4 zu^awqoFJs=2z+x6Iet{k9U>imji~ZZer4al+dlX#C51wWy?>q^zEa&iOvJqOI#jU@ z#I+~;oMJKbN}~hKpqd?G_Dt4-XA4*h%45wndm_$fk-26s<7UcXEeG>1Q$uyAb)$ot z=%w_mx$4FbFUPTJZ2l~$1g&+VCQ{?f`+thJk-HTq#NH+{<E*Iat<Q)fO_aNSASO-> z9G8`p9GI3Fm<{uPb}lq%gTKXKXwcQrpwl0)292cszD9*5JuN%XS++pDFJ=0I<1dI^ zOb9`HQUA6={23c^N(GsAP22~Wzjs}njb~-2RQ>P`u{j<<W!w_cB>J~oB3_Aoa9jM0 zJopqc{OAa2Q0C~J+#ScdKk|+^Qw&EH!m=6U${q1zpmt|4nR8dn0s1fQipfa-&Jcan zeNp82vgvx-1F<8|-x;iLdL(v%kQwCOWAQ_XA(NhnS0T?6PsQbEmr=`%mzUOOVohTy zoyD5Xp3RyqUl-X4s82<F61DnIO2*n3toIqR3K1HENSoT`1_;jhMeQ;d?BJYaI>98R zrKaUtS`?I!^UuW;$f`kIa|;;$LspXUFT~*x@W%@gL9{|&QeJ%V5~hbzQs-ZBLfvku zOf9rweCNPP@$n7YB8F>2cqu5Z-ZYhb^{-e0N#kCLsP=i{mDrun_?^^yEuzZoqSqoG zkllSP;sMa0HzFPrEq^1TYVN}~;!v)1MXWRk{+CL9;r}xUAsHHR5~_~Q=OjecsNf_# zXX?yLcpN}@37zOX=cR^tL}`-n819jY#&tJK=wfEQS;DNn+@u83W)C#yy83J(Td_wp zKtU$EN&VQ2^P8KL#hFmT>>x^gsRrFLQJO(D;&dNHde=mC;|9A+V_^Tk*Imj(gFLjv zuO^j23F1AaCfsb+SYKRa`3yZOy6bm5rCx5tb{<xi@9weihv!9a{WE{5w!qD0U+mt* zV&ZQ>OuIT#O<a=)){_Q_B>5?Pxi5;v|MFC1n2>s-X41b3X<(9?@keX3B^acueQtjG ziV!K>gPYF?pDSP=7FUxP^o-syMrxsvS)Ni;lXx?l#^Q+x^|bhRFDZyK`Hu4?-}aGy zGZ*`g^V2`<D-~gwpWZl5+5;>)(pbOIU#fv`jfgN%3g@FMNc(|O8@^9tJ#(N`!BWQ! zmg;gfkOULY(_wcQIFY)vElp|Oi!2%@?eT|Q<iv!WBpP1s^sYn3$4dd^!BA<kF$fm0 z$~<MV1}XBF7#B$1FsWAIQ0ZsVJ6`fLm-${DN0Q^EPxXM_(i)Bk!=>G1?FdQKj|`U% zas1T`{o|3+G@jgzfUriRB^aDvw<WC-rMCRyK4eUybevmAvyx1ESXM3S7+L9Clccvj zxJ4}5V*|1FlA?%5GZ1I{S)_Ujx0uD$>B?eehCs~K>C#?>D_}9r&ajx4F_N!d|0C&< zI~mgpnlIEB!+VhhM4D{!ezlYcb}6{MxqVxQ+hD^pvT@>*l!Zr!h@<$)U^)|L+Zkf8 z0i}dnLb9a0?B9}kT`^0IDOe(I1gii!F>(wygTzQeEs}2Ie5<>7#=w@Mngqq(udMo; zm6F7vjh0*_&7;uAG}vAwUFJ-+4~`&GvDAz!(}RkoTF^PFCy>~+(gm2TTbD@D@O!jA zwnW+tqo(%3;bh@DsU^CnS|_E#;Ayg6+Q^4Rki+Yx4`62oN$YHodU9m^5Gjz4na=q3 z*AU5<WR*(UY{33gDt*XA1U<D(s?Oo@-K<TL4_mZXY?9_vZOeLFBy?`tb&IqX1->g^ zN~3sGd+feV`i7@z$%Gve9-%+lA#K7!tkori42bzgavr8ySqt_$!AkOR5)7t~zLj!V zN&fv-+KRx@U+k2|!FF&ar`Opf-NSXxYqwMl{oK!dOK-48igbe-AKot^>QeUuk_~k+ z4oKe^c`RdjjC#QGXm61`nWo_<2c^|)-RXEp`l5Y}hvAj`-Bb|t%DgRM3|N~5Q1rZO z?6jo<Jx$@@LXd55ODJjkn=~mO^`VPQ`zA7R!L)Az6{Xo1^rwN$ipEoRx|82Gp~A7w z+MV#A4mAWj^98{+`F0ntNOYh1<H?G^oN|y|gb)MgP{>U#GXHprbo^ba8)Ij1_N}eb z+kvPTV0da^ddA(HUJ`Q(O}Fb;1a@|SmEjr3>%;VdJL|AiyBd|SsPMr|pkp4H1N<Ej zaS4fN9h;VHp*V5+Z-*t3HwA19BPWkYgPYlg(Ty=M@IC5a4!69p<3$&BG;~<tAY>`| z;HdO=JxDy*b`3;7ybrFDs1HrF{HT<YkDO-Zjx%-$DU*xLAHFpv3phW~YM%SX#WNxZ zS=3=wAp{$+v5mxXkcILxlK!vwB~II9+=^3=PE}xr@wR%2V9E0}{67_$Y}=@RLIgJ; z9bZa*irs+~V<QR2q?-BENXf;mBfaQOD&(I`L%qN!)2p}@NT4cXmLdp;0*tHFaLq}s z;>V!1)x54P1MALlI+sRA>C8Z}(vORY@7I}@qlt|w(e>+6)u|=4abiFg?zI#B(^Blj zi#Pj_&3{U2m&5>^$Xq-cA%E!E$g+9=LDxiW&Ql#&ak><lmd$sRh)jPb)ycOz;fS67 ziwu9`g{B&pSTmq{PlnTHN4z1^Hncf0!D?JKnusD0o4S8z=q*CY!(UfMIq0*~4m{6q z>X(8Rszs)zsg5%>ykjAoj!QLz><-((3`0{FIt*@%sZEj7sGGm@PDNnXBK}T0QvHQg zn|K_T<b0b;t?Ul}=|-P&RK}nYk7dDu)3C_&%V$O@3QfOksZymAeJZQ;`;5vcyR$Or zBPqc)IwK)7-CmO#IsUhhJ*pP+ga400R%TdeN{m4K#>8-TUP;|m*vZEyrGT~=n&nWg z%S5G%><y@1O6^1w9L;5r1i3kFTpFrEnadB6`zIwI539NS;HZjebf*=xo>V&})d<2c zx*4i00?buQHK(^+y7ywPPYX@nr*WM52bhB5*%<BOL{~)5^(6D9R4X4M9WYc`m7bgu z((z!a$aLd0qRJ*Gp+1MzbmL5x4c*wlwAup!$u~##NWoAxW7Aj21Qk(VK7npfjxdy% z79+~5c!RSstz@eyA81muK03%MjbSShrwYx<AeF%+4c(93Jhii$_r9UH^e%j`FxPUl zsT_Ji=ufPwOFp_GbXs?UNTH-Kj-W-rmw!noO<|!eNZNFiJn7PBZ12eO(~<!M^X#<r z7p(NK$2fjQx(SPR(-eKrS!o7m!nZExrH!1PenB#`-#PzC<M4Q6K!ub;p5K?eO>H5k ziVCR*{gSl0D1||E!bJ%Wh`+ulHFjf0`sXi7Ljp<|1YH8Nzz!TujjrLV_b*Ak93Xua z&dVm)M}2ll>TE3G%h?j1|ClY|+DEX2({0AnOH!zLz4y-oX?a<SM95k<l6YAf$`Imy zxGdo|sLmB>s=p%#gnZA<%1%pU=Qx|MNC-~%=!(>Wnff5DhF2w2b;-Rdy(=2UCY-xa zU7)B%rR3~YX-F+2LSwgwFhy4cjzy3<EJDv~61oaqcTM_${B}c<$n$GbHwfr-T{5&z zR$iCF-6AQqW7nlVvO%r6h1|D_tSFSy&>Ir^0+?|_Dnw0(n^J<8vH6756@e2dbl{tt zk{^N)-jd?sk#kGxA5mI~oJQH*%`sdY=)e@-t{b++H3v8al;z)BwBT{KakEG^+?HVf zSa=8bk7V#2X`r`3mU(xZl@S~kN_O9o5D`bcD|IFw1jNb(r&ufH5fJA3-UY#t);RgD zG|^n<e_|5(=dM(0F7`h$S)X@LdWzQs|9c>H;qwd4BoP+hA~Q*%Ubb+NbFufNVo?@q zu{)sV!_r+xS1YUe*e40ji4)IGDB`<wuB%)r3r(N2fVJV1w=2h-%|gZ<lYD9=I6!(k z29;O2ip$I*Q~#Bklg}SZVSZ5fN?8#Y3;o7CfINLHy#qtRJdlJvk<v)`V98Ve@(IY} z(3$!^lhA|k_wYbNn<g)%A`_<E^HO?d^zuU1%U8Td8k_|FO<O0`AP4@HN*MprUrEcM zgZKPn$7^Y#iHjnWIC&};tUuyp0mf&~!}=>;mU*s>h;H&q4XWJrS(ju>LLxM46G46- zGPelwk6hsnXroWousl+CNM4QNpWLb#nV5vWp4&H`YP_{+)3$A!wyoPvX9qw1B{`Qf zm(@&3AqQmnvY9%2*{a9`plYfrGni*GT$Mj$_coVQ`C}7-?Vm<?PdO1XPxF*(ah~BV zS~0_U)a^r^4&o(`HgR^Wx{vg^SJeac@DO&d@t&U?#&ePSv;g@MY&J+jZMki}x!Yhm z-A+uiz>L~-DD_>@bXZk26T8vkIflJB?Cyr|1VPV<If0*4`gOOOyA5KJoh!-%Bjq^m zMp+K1#pW_~Ub9C89c9lgj+`BUNC|edFNd||lsSgl_+f}c1~(ELS3VvQ<kkeY+WM+G z@)q9D*atY>^i`xJ+RF7|_2oVEF0Fn;c}Bh|b11VLs)Pe5GGz|?kJF?oo>B}SW%P{H zWupoUj056=t~-T5I)Nb@INU{}!D)Dei;p-<J_JN28yB|}d*hpiR1{1cmxNWr^yQ2` zn|EL#{or(3N)i2xU8Wh{!wu4QXK9Q9>@dy9D&jY1I!j1JdV7Y9ZW3Wrlwc>tjpVR= z{`^|R%Fj%-Taw46QKuvpJM}$dkfBh{mITC97}OOq$*%O<S7aX4#WEQM377^GF`mK$ zCFW+r7tmquO`#4*GEk)%9UQw>%cujnS!8l=Ze-;sYoYneBQ89nYRFdemq(LHzK!=M z8yd^i-xXigrfg$3`Hmf+t;*#}p=tL9Y$WEa-r{uh0X?hL$~f{*2cb!8*j<Jjca|WX z?F(b}a4rr$oh^w|KIzv)-aww6kecz|on)6?e~*$|^5LQExN1^U`K-hR>HXWt(HzXn zfy)@eh{Lgm)f{N0&>G2^MG!eI%a(*P3Gm7?Dy9l%Keo~3OrT(;-VK>#L$Oe(2KMDl z^m>>{PhBjddblE@7<de;hv&O?=_1qWc-rMFO}uRm=q;3XDQdUFfZ4QWWExe*b?l-N z?1t}oc8BFeItNiTw&F4brZA+5n-u=S9D5NpjYOtuWYd=f%Zqt(xg5B5Xs0XJ7~H-7 zahMzqGx3wJ^b_H7J$&1$KaG&DqRdngCC9_k03jWtWr@Zi^0co$qAh$>r!=MfKj;27 zcCA+C>H9zz-jRE8rrLXE=mXosBx)}9^nIx3b&wn4+F8_5-p185Kiyb~gJQ`oGCwUf zwpe6Lj9kBqbaX9tV#7u&jjH$?{%Bq7-d!#05?~B(G1FtR6vTzy;zka{$c^%?<~!f? zcO0NG63ND`G8IF&xVg-O)FoMxizU?MWacK>mW!LvLHFpEs7oBhd#fx*k*P~RdYA@H z#qM$7je1&4h^5)(G3YL8ziZ@i+0fdzpvlRuRs(Tn1$Lsw{$&Qy3tcqFF|H^^jp=b9 z@zN9@q8ySuyF2SbPwsGZ9Sn6=6kTBEWTo5Dt~3*6a+b(uT<lO!muwX;VypP+OO-tY zR;-eJZoc^-C62+J7Qgcl^~l8UJV@ab4O_NWR{rK}OBT~pvoJ>Gz#fdb6h%`-OI}V6 z!t%2dB&0))F)Wld)IDqx&c=2$wR0FTR4UzvcXy!5q+fIzPgtzx^omN)Tsf3ed4?fp z5yTO<u5yps)G6AiiUxQS<?6Gm%rh%i-`7>n;GtJ$_143>Lv_jK52$F;tfyRVqTxjD zBfr2?L$|*24E~*3WNu&ii+qQ#wb7QWjJ(`rbck$p4rUln(KM(v0G_i}^#EwkWgW)h zHa*jIRi$G9p*9!CGcm1!HO#9A)4(k>o9-vjgk)`;JiJArx!y6hsWo>9q}HZ3YD&=@ zUYg?_W0AQYb;C}$L^ppD=F54JRmXUh%&+6-<yNrXCo7hi2gt3=Wj;{PumSQC818!q z$m2m0ix?<3_czqF8+5$JW}S**9fyNVHgTYgcQEG$%4h=?H%P`SmED8ne&p;^kkGEJ zaGhZy7#iG<gJnNAws8p^EUyP~@Z+DzUxVe2{Mf~$#t^v!A2W;$86r2$x0+&x8dgmf z=isy<3LtO}2FT7fF_0u?6l_qNIjxB-u8ACrS=B?ILi4x?Cpm}N6f85S<N=&-Z52a$ z^~kmPF)#}%c4Uo1$qOc(6w)D1_9xZq@qYQH74IZiO)J`usu)2{f9;!@>91kKVz_p~ zJ@=@JCe()Juf~HI`X3Ah_>kf$8TKtJn34iT*1<RmwPkbI71<fk7DgC{7xv99aV@sz zR<*J<&5d!?$YJtoHO=ir#t)PIea(L!b;*BjC+e`gXqa595B@SHLx&Tz(adQxwJS#h zGYU(ejW{3(xpZv`)s-;745@a40cHq$vyXQZK3-k~ePLO=j7|a|z-zd?33j>gwsW}r zAxPYvN63-5D;y!C3)S@_<S}f+>poIm3;{(W<%vun_ZcP6MMe1pxhW&nIYFN3X&f44 zVb(#o1wEM{XTx{zjg}jk0-!668!Z>0>)Fxr0+Qbe+H7^AtN@*jiSi(_)=duNpKWvP zp6r&3xFyN4>UyW%SPuC-QLd{`PLjuR20C)GJO(u-Q{<X8%be*fZLVcyBvrJzmYF=U zq7Ce4XQapoGxIP-PJ_qrR2dKUkEhCbnb3QToD7fcW8^vL941Xhw7!LDa+qS=alxui z4y4HlI}koreg`+iW96}AUNyOym%09b_7@Cx_3d=|G3w^jx5&5L0(MPs2)Q<<cnLBY zG%1OhB>M=|rqo6{PL=~W8yPfN9>*2a313!cF^;_YO0La^N0WwA<U{b(?@p1Y$$WT} zK5mX&(~UfBA~)k}rnsby2x6O@7az&RJU3cjwMc%<4=Hks{c7?Gbd6$li`_aAEv<54 z-6@10mSn?c5=!`}ut*g|?bJ>hFQYP(nB;3q%dHxNhs$>T@)EhD%$2ZGzum&MBnEs6 zSt*ZH$-@{ZY4ictc%~Plr*4pYYFrSR*<TLgyB4{oU;-p*vsDiEFb5o<yt5RU0}hTR znOo&lVDibW&|~1^2H(p*#BV!@R3Ja$4_)6b_ZNTx+D>^S$E{}t>^It#e3+BGOs?#b zr>Vg$oTugFXocBdpZ$Z}m?QPSmwn0iKgt)maJ_i9{5i)(kl3H)pJ7q*+9UgOr1@S5 z4AxKWl?Nh37A;K7uW}Ll^4_n|uAyYaKKUBAft6!~XJt8nSP25eT-YUx<fr}e4cLuu zIUuhR!dl?gk&N3XS0_ma<!uOFS>upAjN`)eyx(MwdQhTyE&N@+3HjFBA_eFLhvfqZ zBtn^xepKFvo|q^^&7k9Q2-!Os+F{I%%Irz~DKgbwmh?BrVSJN$A3@*F3#{6=BV3fx zj-8Z~_<U2X@i6Ds${wAUiWc!q+=7|)i-kQ>Z0L+TD-R@m+_c&f3L%{~3FgYkcP85* zoQg}e#wTYcX65B17{Ef~64Ek|AiKn{pd+}9j0Q+BE-y7T+2Zt#hZ=*K`ALOt?Pre4 z9+Q@lWyyjE2yP%vu)?fjO0Lcgt38=gXZch>BD7c^(<wDGuaN7N(Ha(pRHTOIMA`N% zOKueaJ;-i=B{`Eh{D4Wtk_u8&w!5tYKBvHstw-nSOU}q+dD3{L+{}Ao^Z&3eN)I_N zdzqz(7EJ%2^sRt48&NK&aKWV9M+qS3%H`hJn1L1Yw+I`0twKJ?h3MNZ%Dp)`Jgmxh zbuY_9pyN-vEbkJ@ll9P=)BBK^-?Um}@@<&MBgoylN<(t&w*1`W8QYtELz>9d$o)I= z`w$dMgY>?4<)$3F9(IJ0CHLeD0>yJF)hFGT_v79mHdc>$D0_26ehl4Y%p<vk29n^j z@Ijr&@^g&v(OW%{RZcL7VVu7BDM)Q(q)Cy<v}bY+Qu18x;qvLa7xHUz2`fMOUpZC^ zt5T4xSMmt1L_hipMqjnas8;m0B`G-<+R#G0+A4l4b}M%1)<Zbu9pkub6B}5I7dd$m zMPh=K2INytNn-1TJFg68Hb_t-UoxFnZZU|lYAGo!=zk_<javk*e{-|)5my=gt(&65 zup2KZJrTGYTCKW%T2$WVq$o!cTJl=5GM9LTDgpW>S!ws**tV*&5x$P`f@(ikl~1`y z@`<L5BtC5wUsBy&832))?n;`u@{_3^3L?Rldnkw`1Yi0ScTZ(Cyl?VU3M&gpc|O=n zX~em)W98Z2%GU;OHZ$IQysnZr(DUxqRcez!KZO}+>dXC<K^(gmzvZvg;`pc*<X&r~ zCaGUtnd->8Zw+NC9}W?XmFnbT4W%nYw5X}P&Nua{=eR*(hZE>xw^w~U8*)*fvt^B@ zUZ|WZ6DSeeQyEf3rg58`>^xkyns?Wt=NZ)T95X0!9BLGrvd>f3QezTegXf-o&f(k; zZMD9wrPRqc@2SoRTAY_Vbp1kCS+*?ImdpTEjh#D?#&fCZ?djcUk!kunRiR&)atC!& zV#ngZWHxtlE_EfFTZO*OKpM)QXs6{yP!bAbV#~_QwZnu?Gcd9=v_uL``)}h}LqblD z;Wfcw@oqKkzvaYlvpGamI~ri`zm5J$=@uNX`;IQ5V(I={6@i&ppw|DVL=zoof{yy) z@tk>Xodm0SZe3DbTM39Sf;aTOKDUmGrmvj==wni}!M39xP2i)k&DnX#fs0ZRm}Gb5 zgpmz(6^O?~Idzn$Mz5+tyy__<SDX?&$gFxWih{|Oddd>VbU3iSvJ4Tou$Q@;4n%|a zKB>G}k?BBN;@&_hCY`*X_w8+<ya&TYYpDD}Mpnpf<V7Rp8IB|$A~jLEb5VNVCW@7( zY8~WaGbI)hhcs7~kWTwS;{1HI%RI4ezwAZ!Hdl;$tmZA0$*6d^oNQ>J^aVmsTPQEl zQt;FYHg^fF6dM~60p#me%5`IuLo}U5b_6Q>xe$`yTCtF5Ul`eP8)Yk-;V?~~ASKO< zv4-7zl%@m+g_GZdlqgpGTER*o7e=-QE9YD?{Uk*BiT$MW!o*Oe421BhPe|i1Wt13< z7+l@=kcDB&`wTPgWSD~Hq#uMU7b`#0-;Gcj@nrUKV8QM=F4I9Mn+|fLl<|xSSE7_X z>|7pl_ai?>D`@QL+g6!Vv&><3Ybd6arqJVVygPEFbtgyLD(KI~r=2nrgy!Y#6tt~% zdq-)@m9YB6y`$ic^_zE;90VlAq3!TTT9wj>_DUR?aS}>=B$#}5Qf{H2=%BRp<i23D z+DU(M-=e(FM~3Tpy_I`jB>Xn4iC1h!XoP+yLAm2aj{Xaw&z>2fk$U@F<#si0E3vLn zn)2!}BRonko}=9NB$m2LGrra?8VZwiCMVR^>lZ44UgVcH5EIx4V?Kao_~(tvQH{** z0D&F;VS$F&TW7nnTi|xk47__bttt~lv8xEua;K7R@~HN<zH+DXIVVOH6qMC|(O8fD z0R{v9Dz4M*o_^^^{1t+~YK_&W{G{Y?Uf~6(h3B>E!p-6D78HBbEZwn3naGJ@1qJJs zh12vIdx76vgnsuIWh}>sMeD=%DML7~$jYxe)35Yj_A3c!P|)lkw38GT4Vfqlr|Vk| zDRG<`l9%Yh?@%W`EJBYv3<C~dR{sHm35ni10>i@_KXOp*Qc#9ed;h8Q<8YU<?wFF! zfh1Gygff`(4vqlwwO=$b5_g4VcJfIji^Gl0jZ@GafT6ulL-mmOo->MtGY4T2+Mk2k z;Olz*tMiboF1!}k9hPp;=~h7P_PpLZkdkP9>-ieJ{EnK;$=^-g5*!|i-+NX7Z(#MF ze-TR)q(8c(%tcGxDOVtz6u+za>*6(~J(MF<?{=M~{o#f(83gQbJ^Gfi2owK$8%he# zh`Y)dd=}q>g&Cgw17$kLh3YdOVt9yt{SiJx^?pwjir{zjsq#Pk-T%4L0|~Er0jz~| z4_>nL!(M@)0WEO(wUPn9xA#+NHa~Mv2T0!Br1s+k<Xk}k8Ihp0=Hs$)+_nse3a#{Q z^SV)*eevSOYu`-Ut3NQSGm!9jLCr)8|A?vupZgW|d`DApm!jL;)$#artEQ%N<btTG z`czM~Cw80tUJz6r`d9%aIc@Q>w;ra?zd3vm$Y{TB)Iac1$8c&e#zR94?e;tQ!B=f- zD*B^Hf9b29t4H=*U_7kaK+DNTg|PwgZn)~@g+pvWH+6!HFTeLzvrr?ieLr;%RGEuY z!?+r>s*BgYy8F4WBU|j@vx4>5{%STSMMh&E-?CKyb%5H2bHkq{`m2FzSB{U2*1HT= zyE_7{L)4C(2z{kY*|J1GK2+^y^ryP<Y7p&f!_{_1P{9bb7X*=WBh||+<d;!u6o$M` zP+vgdlq5BjGY4Z#Oftqm_eoKk(4bQN)EKp)5&J3)i3jVg(~Z~?eNYCl6-&2a9I&31 zZbud+LZY+PQ}FN_uU_-RA>P1Sc2v7FtF}jungAa~A*EakRDvuXqH5&VTy=*z1OsR0 zskN}dS5Htuf}=rCC$b=)$?CgC(2yxu!w`MrRJDf@^k^C|2!g_9KoF&>f0VCk7*sgZ z@gX@kOZ^3wvrqn~o?-#hXRFsCAa#y9iv`@8qaKHEewvGv>4@`~2mF9eA3Ps=ihC&S zC`=apmd&^aW*MC$oV@%<t!rNIK_=^U766}+Kp7dgP<`$div0NWg>$+nAyXEqzlovP z0k-Yddo5NQu>43~f%*!vvn+vr3v1bhrRpUWBaC^0Bzz<KlS@{02hNbi%C;Z%HOthR zI2yjSsZ+3|VJp<eM&aWNp<|KQ;i{lp367!A9V^us8d<7$Uj>=^hE*w9H)tp*{`4Yf zC?I)ZH4d;aJz|a88=oH*!;^ke|GlloC+`)|8ed<lcEBW))~QLH7fZ6uNYWjOa&JBK zYc{Jxg`-Q=I842GquLfn?*31KusNJ|=}k~(2#VbdB^AS2C5df|dJNL1eui}m!*okN z#}OW`pZh|sgU=UVsyS2vH*>3ck|pWBjZFe8zDDX1Sm~SFSx}U&7Em<O{okmtC`3i* ze&4AuZ-#{F{lAAwW5|}BY6!lNe|D*N_>ge@$Pa2NhcD5)VQRx9n|^}Y;)~}VwF`Y2 zxEJ!mmyN%u&FRb0U!fwT(<;@h`|nr#Ls+Dqae#gossDKpngw6p{Y@Q3U)KK)lN*+- z#vd>NU`XN-Bncs3AEhOWB-%0cCX|CbKc;TQ=V!;&=WZd$KH||+^Cv%@P#5wc5qj)N zEEUvg`6)Gz(o#=j#z1TQ8KVTJ&Ke=@&l@4@{#L^|kB|tLzWyDRP}JIrF=0nkPS|hW zdiD?}?AOKNdY^w(Zw@m~D#!eQ=-CRjlTrD4msB50KkPEJ6nSljLAvz{egI*=UR7&z z)uN&*dwQR^Al=$b&4B1AedG;wGNpIsrtvc1HoidAkvqoA2ltGZU+=^03NIw)k?KP} zc&I+YQ25cv8LCfyta?`dTJuDe>8E8+)v+|#@40%;JA|(C(j%iA$3g#j^#T?#vT!4m zeb~RW#iI0GuT&5xqM~)-4gETr^x-uB74x-Uffe|ELPbhO#YiNtmD2!N8(tUHFD3O& z+BH5TQdi8{5Y9geC6{J>M>^)t{vd0Y<mi*#G?<dstMWp9kD!HeT#5cd)H-maV2dj1 z9c3+r7Ga~JC3Aj3RY?p05&>8B2AVd>5jVmSH;|GipSx>Mq!193idA_LDf7^tV2Mhq zX?37IBgt-0EyTC}Mrh~a4~Mp;{D^^ZAJ9}6yr3{*FfL6ChLKL*S|O@p{N=6P$Jwp8 zZs%>}h>r$S8aeE%6}yGvC?t7)T7ecyWjJG68y_$El1Bd88aEnDe)ZQLN;umtF8<#) z<fj1bdnuGo9{V!Loa)*Upf{j~cGw^36*ubU<+{=w&m++_wXf-lMIP1EE}^-}nOfQz zSe@WeiyWz~jm07tEBn$(hdP)bj5MyRz4E|3oSpuA*6FkF8xwq_KBt}*%t@hi-Cq5Y z?5eMwBxeU{Dk*88?L&Kju?@99VWn-~NZUo%Uh=w;hVaRU8`JQTCfXIZQ0(MnQB&;( zeJvwXn`wXf;cIcdgGZd=XR$}0i~5-6u!h0<KDLEs;wbY<NY2~Z3CycUOKm3~8b!ob z+A@RanpWBp%64DvDG3YIT5zR$LZIf0%kzZR+GEPx5<R;OQVr2_g0%Yhv;}Ksj%2>A zX{0nno9P==r6^r#QApcRZ3=LGd#HAeRjnjU`<V}oAj#p{Z8UT59|2S##gIsCj&Cp} zanxm5=~JO^iqb?!Ep|j}1^9KhwzP9}X{VLCA@@tkgLc{rU)pyT9C5BOScJm%8tz69 zwAT*7V?_t;3wU(xsI7(XuXKdCQ1V45Z5JOJPBLS#J;F)kyILwf*S@Qb$EQzc$Ss6; zb<qwX3;*t-ErAs?vn%icI*Gotn+9_P@O1lo+A9qBy1V8_V-EGu+Th~)@_kLEmLF12 z+T!}ro-`ng{M}1?j?dGv+H1_}bZ>mZ?>?AUxL(>9*dt&AfcU%UYbDU6e({dcv!aN5 zoK^rGWObbOBS{|(4UyVk8?FYqEc{0&NcG5_{xIZ&NZ<f1wMyjLJc#^Z07mMs24Fh` z6Mm5P7Z%{$An1F*n!(x$2%S4bJBEB8I#k<(z7dD9M9+q4rPzpT<DrQl{L|sumyk>! zIs!NXzh{ipzDCBtvj*ukN?Q#SZ;aCRBH;vW7d*y|){bI|PKjDEKFbre$ME5)B<&}J z5K7k0L)j*#Xw{J1yj1NfmLhu$J|p!ZY1ku!$*{574dm{7>Dr%2q*ew#Bgx$i?KJ$> z4~~Pn;Ri=DwOHCx^|Q6T$nGoI+8t!`$?>!;qsX%yt%IprO+P)_qSd3qbFp&1f{e`7 z8uO3K3HPgV%-t&P_+d+Q6b|R}<rw8hvh%dt4Z@tPt#rED%4+iKPnB<$a?kZypQ+HA zZa<%Z&-MICS|S$^L}#my7o2ew_D?U+pHJ4>aZJ=Z;HkHps!5y_jsssgP)+|}nifF! zmukM&9o1I)&(uEQxm|4Psd&riAkn1fY^^@Ow5^^wTl3(gU|Qy{#_DtCKzreix=i^h zjVzn1y@Bz(>_g29$MyPoT0=whJvbj)qg3Dh5%7W>U99<%hYPfeL|h7QHx|Mh4J%)y z-GfwrF4mgSRDQb05^bu$#{1$G+8cZ;)t44RYvKO6yIp&mmOgi-wuJX=5P8vM`WkUm z_gM{7kQWxfWiDCTmh}2qyTu1b>Fw5N?G2&utFa`%SZidqzP05wZ5+`mj5~|mowQc- zhfKoB(h}_jlWPk;0hWR|cyOK83!(0-mui7L7rwFEr%<qxjqjCdRG2K)KiC8XKwsON zwTAqu+er8j5Vju#!X#;n_6S75A)jd?T52VHrN!V7U$+(J4B(!+U5nt{!l_i{wO#We zLw3NV5FVxv)-^<n(~G~+JaK>Y<+oa29y&L_6H0~L=(tPM@JdVX^#gQwx6oGh=rBFu zN9~*$$amPQr9ou0UiORDmA>5jRr`vEm`@I9txz`o;~*^cWS&`VYSOB0#vag$oHMIx zjW>}U+^MKF=ALLUG`3*9`%{~4{Y}f^%w@{VR=Rjt>&W{B(<7I_Q%17h1;y@9Q}tm- zpoAU}e$oi<1I#Qrs!>dmO@C^gP$lc$am}yrxONMI;ME_3Hi{=53{_8QH4IU@`Cr;7 z{O+UEkhd<J(`s{kPz14F&;s;!=b<XZc0u#fC;hFp;LUVq-|&xi9IyVSmTR5qHlnPu zBz>`j%k@7iv?AWaaR}2718ro+W$m?uyXo~<!8uou{V-)-*Xroku4)SqF~M>Z=7S*Q zi!u1(3d%ga+AYSP<@dJGaf<`Eay(nP_s`)lcH>m_8#)OTtAQ)^7q_)2l(Pa?>7jSE z_i0^A^f~vmH0)@19%vI$^h$Z81>&Y-`D3jqhlg-GpFm@>&gu3Hr_5r##dEDO=Zy<l z%hWTK(p;%N`i1r>Z-%<OMbuZ?Y45U@sb^ipF;B0y`uW!|m2)NAYrFe%-ncJ!J-6^` zr+4Apr(-#O=G`MXzwoMg3;~fY5q7R-h-(@gZAdiF-qHp)<7O}0UAr9uJD9HVb04bQ eo-f|KCBC(n?5d$w*Jr!A|H;YPl5GA0{{25e_(6>T diff --git a/doc/bashref.html b/doc/bashref.html index 928b3ff19..acf15503c 100644 --- a/doc/bashref.html +++ b/doc/bashref.html @@ -1,16 +1,16 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!DOCTYPE html> <html> -<!-- Created by GNU Texinfo 6.8, https://www.gnu.org/software/texinfo/ --> +<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!-- This text is a brief description of the features that are present in -the Bash shell (version 5.2, 19 September 2022). +the Bash shell (version 5.3, 5 April 2024). -This is Edition 5.2, last updated 19 September 2022, +This is Edition 5.3, last updated 5 April 2024, of The GNU Bash Reference Manual, -for Bash, Version 5.2. +for Bash, Version 5.3. -Copyright (C) 1988-2022 Free Software Foundation, Inc. +Copyright © 1988-2023 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -35,21 +35,22 @@ A copy of the license is included in the section entitled <link href="dir.html#Top" rel="prev" title="(dir)"> <style type="text/css"> <!-- -a.copiable-anchor {visibility: hidden; text-decoration: none; line-height: 0em} -a.summary-letter {text-decoration: none} -blockquote.indentedblock {margin-right: 0em} +a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em} +a.summary-letter-printindex {text-decoration: none} +div.center {text-align:center} div.display {margin-left: 3.2em} div.example {margin-left: 3.2em} -kbd {font-style: oblique} -pre.display {font-family: inherit} -pre.format {font-family: inherit} -pre.menu-comment {font-family: serif} -pre.menu-preformatted {font-family: serif} -span.nolinebreak {white-space: nowrap} -span.roman {font-family: initial; font-weight: normal} -span.sansserif {font-family: sans-serif; font-weight: normal} -span:hover a.copiable-anchor {visibility: visible} -ul.no-bullet {list-style: none} +kbd.kbd {font-style: oblique} +kbd.key {font-style: normal} +pre.display-preformatted {font-family: inherit} +span.r {font-family: initial; font-weight: normal; font-style: normal} +span:hover a.copiable-link {visibility: visible} +td.printindex-index-entry {vertical-align: top} +td.printindex-index-section {vertical-align: top; padding-left: 1em} +th.entries-header-printindex {text-align:left} +th.sections-header-printindex {text-align:left; padding-left: 1em} +ul.mark-bullet {list-style-type: disc} +ul.toc-numbered-mark {list-style: none} --> </style> @@ -57,7 +58,6 @@ ul.no-bullet {list-style: none} </head> <body lang="en"> -<h1 class="settitle" align="center">Bash Reference Manual</h1> @@ -69,26 +69,26 @@ ul.no-bullet {list-style: none} -<div class="top" id="Top"> -<div class="header"> +<div class="top-level-extent" id="Top"> +<div class="nav-panel"> <p> Next: <a href="#Introduction" accesskey="n" rel="next">Introduction</a>, Previous: <a href="dir.html#Top" accesskey="p" rel="prev">(dir)</a>, Up: <a href="dir.html#Top" accesskey="u" rel="up">(dir)</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bash-Features-1"></span><h1 class="top">Bash Features</h1> +<h1 class="top" id="Bash-Features-1"><span>Bash Features<a class="copiable-link" href="#Bash-Features-1"> &para;</a></span></h1> <p>This text is a brief description of the features that are present in -the Bash shell (version 5.2, 19 September 2022). -The Bash home page is <a href="http://www.gnu.org/software/bash/">http://www.gnu.org/software/bash/</a>. +the Bash shell (version 5.3, 5 April 2024). +The Bash home page is <a class="url" href="http://www.gnu.org/software/bash/">http://www.gnu.org/software/bash/</a>. </p> -<p>This is Edition 5.2, last updated 19 September 2022, -of <cite>The GNU Bash Reference Manual</cite>, -for <code>Bash</code>, Version 5.2. +<p>This is Edition 5.3, last updated 5 April 2024, +of <cite class="cite">The GNU Bash Reference Manual</cite>, +for <code class="code">Bash</code>, Version 5.3. </p> <p>Bash contains features that appear in other popular shells, and some features that only appear in Bash. Some of the shells that Bash has -borrowed concepts from are the Bourne Shell (<samp>sh</samp>), the Korn Shell -(<samp>ksh</samp>), and the C-shell (<samp>csh</samp> and its successor, -<samp>tcsh</samp>). The following menu breaks the features up into +borrowed concepts from are the Bourne Shell (<samp class="file">sh</samp>), the Korn Shell +(<samp class="file">ksh</samp>), and the C-shell (<samp class="file">csh</samp> and its successor, +<samp class="file">tcsh</samp>). The following menu breaks the features up into categories, noting which features were inspired by other shells and which are specific to Bash. </p> @@ -97,25 +97,25 @@ Bash. The Bash manual page should be used as the definitive reference on shell behavior. </p> -<div class="Contents_element" id="SEC_Contents"> +<div class="element-contents" id="SEC_Contents"> <h2 class="contents-heading">Table of Contents</h2> <div class="contents"> -<ul class="no-bullet"> +<ul class="toc-numbered-mark"> <li><a id="toc-Introduction-1" href="#Introduction">1 Introduction</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-What-is-Bash_003f-1" href="#What-is-Bash_003f">1.1 What is Bash?</a></li> <li><a id="toc-What-is-a-shell_003f-1" href="#What-is-a-shell_003f">1.2 What is a shell?</a></li> </ul></li> <li><a id="toc-Definitions-1" href="#Definitions">2 Definitions</a></li> <li><a id="toc-Basic-Shell-Features-1" href="#Basic-Shell-Features">3 Basic Shell Features</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Shell-Syntax-1" href="#Shell-Syntax">3.1 Shell Syntax</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Shell-Operation-1" href="#Shell-Operation">3.1.1 Shell Operation</a></li> <li><a id="toc-Quoting-1" href="#Quoting">3.1.2 Quoting</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Escape-Character-1" href="#Escape-Character">3.1.2.1 Escape Character</a></li> <li><a id="toc-Single-Quotes-1" href="#Single-Quotes">3.1.2.2 Single Quotes</a></li> <li><a id="toc-Double-Quotes-1" href="#Double-Quotes">3.1.2.3 Double Quotes</a></li> @@ -125,13 +125,13 @@ reference on shell behavior. <li><a id="toc-Comments-1" href="#Comments">3.1.3 Comments</a></li> </ul></li> <li><a id="toc-Shell-Commands-1" href="#Shell-Commands">3.2 Shell Commands</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Reserved-Words-1" href="#Reserved-Words">3.2.1 Reserved Words</a></li> <li><a id="toc-Simple-Commands-1" href="#Simple-Commands">3.2.2 Simple Commands</a></li> <li><a id="toc-Pipelines-1" href="#Pipelines">3.2.3 Pipelines</a></li> <li><a id="toc-Lists-of-Commands" href="#Lists">3.2.4 Lists of Commands</a></li> <li><a id="toc-Compound-Commands-1" href="#Compound-Commands">3.2.5 Compound Commands</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Looping-Constructs-1" href="#Looping-Constructs">3.2.5.1 Looping Constructs</a></li> <li><a id="toc-Conditional-Constructs-1" href="#Conditional-Constructs">3.2.5.2 Conditional Constructs</a></li> <li><a id="toc-Grouping-Commands" href="#Command-Grouping">3.2.5.3 Grouping Commands</a></li> @@ -141,12 +141,12 @@ reference on shell behavior. </ul></li> <li><a id="toc-Shell-Functions-1" href="#Shell-Functions">3.3 Shell Functions</a></li> <li><a id="toc-Shell-Parameters-1" href="#Shell-Parameters">3.4 Shell Parameters</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Positional-Parameters-1" href="#Positional-Parameters">3.4.1 Positional Parameters</a></li> <li><a id="toc-Special-Parameters-1" href="#Special-Parameters">3.4.2 Special Parameters</a></li> </ul></li> <li><a id="toc-Shell-Expansions-1" href="#Shell-Expansions">3.5 Shell Expansions</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Brace-Expansion-1" href="#Brace-Expansion">3.5.1 Brace Expansion</a></li> <li><a id="toc-Tilde-Expansion-1" href="#Tilde-Expansion">3.5.2 Tilde Expansion</a></li> <li><a id="toc-Shell-Parameter-Expansion-1" href="#Shell-Parameter-Expansion">3.5.3 Shell Parameter Expansion</a></li> @@ -155,13 +155,13 @@ reference on shell behavior. <li><a id="toc-Process-Substitution-1" href="#Process-Substitution">3.5.6 Process Substitution</a></li> <li><a id="toc-Word-Splitting-1" href="#Word-Splitting">3.5.7 Word Splitting</a></li> <li><a id="toc-Filename-Expansion-1" href="#Filename-Expansion">3.5.8 Filename Expansion</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Pattern-Matching-1" href="#Pattern-Matching">3.5.8.1 Pattern Matching</a></li> </ul></li> <li><a id="toc-Quote-Removal-1" href="#Quote-Removal">3.5.9 Quote Removal</a></li> </ul></li> <li><a id="toc-Redirections-1" href="#Redirections">3.6 Redirections</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Redirecting-Input" href="#Redirecting-Input">3.6.1 Redirecting Input</a></li> <li><a id="toc-Redirecting-Output" href="#Redirecting-Output">3.6.2 Redirecting Output</a></li> <li><a id="toc-Appending-Redirected-Output" href="#Appending-Redirected-Output">3.6.3 Appending Redirected Output</a></li> @@ -174,7 +174,7 @@ reference on shell behavior. <li><a id="toc-Opening-File-Descriptors-for-Reading-and-Writing" href="#Opening-File-Descriptors-for-Reading-and-Writing">3.6.10 Opening File Descriptors for Reading and Writing</a></li> </ul></li> <li><a id="toc-Executing-Commands-1" href="#Executing-Commands">3.7 Executing Commands</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Simple-Command-Expansion-1" href="#Simple-Command-Expansion">3.7.1 Simple Command Expansion</a></li> <li><a id="toc-Command-Search-and-Execution-1" href="#Command-Search-and-Execution">3.7.2 Command Search and Execution</a></li> <li><a id="toc-Command-Execution-Environment-1" href="#Command-Execution-Environment">3.7.3 Command Execution Environment</a></li> @@ -185,27 +185,27 @@ reference on shell behavior. <li><a id="toc-Shell-Scripts-1" href="#Shell-Scripts">3.8 Shell Scripts</a></li> </ul></li> <li><a id="toc-Shell-Builtin-Commands-1" href="#Shell-Builtin-Commands">4 Shell Builtin Commands</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Bourne-Shell-Builtins-1" href="#Bourne-Shell-Builtins">4.1 Bourne Shell Builtins</a></li> <li><a id="toc-Bash-Builtin-Commands" href="#Bash-Builtins">4.2 Bash Builtin Commands</a></li> <li><a id="toc-Modifying-Shell-Behavior-1" href="#Modifying-Shell-Behavior">4.3 Modifying Shell Behavior</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-The-Set-Builtin-1" href="#The-Set-Builtin">4.3.1 The Set Builtin</a></li> <li><a id="toc-The-Shopt-Builtin-1" href="#The-Shopt-Builtin">4.3.2 The Shopt Builtin</a></li> </ul></li> <li><a id="toc-Special-Builtins-1" href="#Special-Builtins">4.4 Special Builtins</a></li> </ul></li> <li><a id="toc-Shell-Variables-1" href="#Shell-Variables">5 Shell Variables</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Bourne-Shell-Variables-1" href="#Bourne-Shell-Variables">5.1 Bourne Shell Variables</a></li> <li><a id="toc-Bash-Variables-1" href="#Bash-Variables">5.2 Bash Variables</a></li> </ul></li> <li><a id="toc-Bash-Features-2" href="#Bash-Features">6 Bash Features</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Invoking-Bash-1" href="#Invoking-Bash">6.1 Invoking Bash</a></li> <li><a id="toc-Bash-Startup-Files-1" href="#Bash-Startup-Files">6.2 Bash Startup Files</a></li> <li><a id="toc-Interactive-Shells-1" href="#Interactive-Shells">6.3 Interactive Shells</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-What-is-an-Interactive-Shell_003f-1" href="#What-is-an-Interactive-Shell_003f">6.3.1 What is an Interactive Shell?</a></li> <li><a id="toc-Is-this-Shell-Interactive_003f-1" href="#Is-this-Shell-Interactive_003f">6.3.2 Is this Shell Interactive?</a></li> <li><a id="toc-Interactive-Shell-Behavior-1" href="#Interactive-Shell-Behavior">6.3.3 Interactive Shell Behavior</a></li> @@ -215,25 +215,29 @@ reference on shell behavior. <li><a id="toc-Aliases-1" href="#Aliases">6.6 Aliases</a></li> <li><a id="toc-Arrays-1" href="#Arrays">6.7 Arrays</a></li> <li><a id="toc-The-Directory-Stack-1" href="#The-Directory-Stack">6.8 The Directory Stack</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Directory-Stack-Builtins-1" href="#Directory-Stack-Builtins">6.8.1 Directory Stack Builtins</a></li> </ul></li> <li><a id="toc-Controlling-the-Prompt-1" href="#Controlling-the-Prompt">6.9 Controlling the Prompt</a></li> <li><a id="toc-The-Restricted-Shell-1" href="#The-Restricted-Shell">6.10 The Restricted Shell</a></li> - <li><a id="toc-Bash-POSIX-Mode-1" href="#Bash-POSIX-Mode">6.11 Bash POSIX Mode</a></li> + <li><a id="toc-Bash-and-POSIX" href="#Bash-POSIX-Mode">6.11 Bash and POSIX</a> + <ul class="toc-numbered-mark"> + <li><a id="toc-What-is-POSIX_003f" href="#What-is-POSIX_003f">6.11.1 What is POSIX?</a></li> + <li><a id="toc-Bash-POSIX-Mode-1" href="#Bash-POSIX-Mode-1">6.11.2 Bash POSIX Mode</a></li> + </ul></li> <li><a id="toc-Shell-Compatibility-Mode-1" href="#Shell-Compatibility-Mode">6.12 Shell Compatibility Mode</a></li> </ul></li> <li><a id="toc-Job-Control-1" href="#Job-Control">7 Job Control</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Job-Control-Basics-1" href="#Job-Control-Basics">7.1 Job Control Basics</a></li> <li><a id="toc-Job-Control-Builtins-1" href="#Job-Control-Builtins">7.2 Job Control Builtins</a></li> <li><a id="toc-Job-Control-Variables-1" href="#Job-Control-Variables">7.3 Job Control Variables</a></li> </ul></li> <li><a id="toc-Command-Line-Editing-1" href="#Command-Line-Editing">8 Command Line Editing</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Introduction-to-Line-Editing" href="#Introduction-and-Notation">8.1 Introduction to Line Editing</a></li> <li><a id="toc-Readline-Interaction-1" href="#Readline-Interaction">8.2 Readline Interaction</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Readline-Bare-Essentials-1" href="#Readline-Bare-Essentials">8.2.1 Readline Bare Essentials</a></li> <li><a id="toc-Readline-Movement-Commands-1" href="#Readline-Movement-Commands">8.2.2 Readline Movement Commands</a></li> <li><a id="toc-Readline-Killing-Commands-1" href="#Readline-Killing-Commands">8.2.3 Readline Killing Commands</a></li> @@ -241,13 +245,13 @@ reference on shell behavior. <li><a id="toc-Searching-for-Commands-in-the-History" href="#Searching">8.2.5 Searching for Commands in the History</a></li> </ul></li> <li><a id="toc-Readline-Init-File-1" href="#Readline-Init-File">8.3 Readline Init File</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Readline-Init-File-Syntax-1" href="#Readline-Init-File-Syntax">8.3.1 Readline Init File Syntax</a></li> <li><a id="toc-Conditional-Init-Constructs-1" href="#Conditional-Init-Constructs">8.3.2 Conditional Init Constructs</a></li> <li><a id="toc-Sample-Init-File-1" href="#Sample-Init-File">8.3.3 Sample Init File</a></li> </ul></li> <li><a id="toc-Bindable-Readline-Commands-1" href="#Bindable-Readline-Commands">8.4 Bindable Readline Commands</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Commands-For-Moving-1" href="#Commands-For-Moving">8.4.1 Commands For Moving</a></li> <li><a id="toc-Commands-For-Manipulating-The-History" href="#Commands-For-History">8.4.2 Commands For Manipulating The History</a></li> <li><a id="toc-Commands-For-Changing-Text" href="#Commands-For-Text">8.4.3 Commands For Changing Text</a></li> @@ -263,18 +267,18 @@ reference on shell behavior. <li><a id="toc-A-Programmable-Completion-Example-1" href="#A-Programmable-Completion-Example">8.8 A Programmable Completion Example</a></li> </ul></li> <li><a id="toc-Using-History-Interactively-1" href="#Using-History-Interactively">9 Using History Interactively</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Bash-History-Facilities-1" href="#Bash-History-Facilities">9.1 Bash History Facilities</a></li> <li><a id="toc-Bash-History-Builtins-1" href="#Bash-History-Builtins">9.2 Bash History Builtins</a></li> <li><a id="toc-History-Expansion" href="#History-Interaction">9.3 History Expansion</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Event-Designators-1" href="#Event-Designators">9.3.1 Event Designators</a></li> <li><a id="toc-Word-Designators-1" href="#Word-Designators">9.3.2 Word Designators</a></li> <li><a id="toc-Modifiers-1" href="#Modifiers">9.3.3 Modifiers</a></li> </ul></li> </ul></li> <li><a id="toc-Installing-Bash-1" href="#Installing-Bash">10 Installing Bash</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Basic-Installation-1" href="#Basic-Installation">10.1 Basic Installation</a></li> <li><a id="toc-Compilers-and-Options-1" href="#Compilers-and-Options">10.2 Compilers and Options</a></li> <li><a id="toc-Compiling-For-Multiple-Architectures-1" href="#Compiling-For-Multiple-Architectures">10.3 Compiling For Multiple Architectures</a></li> @@ -286,12 +290,12 @@ reference on shell behavior. </ul></li> <li><a id="toc-Reporting-Bugs-1" href="#Reporting-Bugs">Appendix A Reporting Bugs</a></li> <li><a id="toc-Major-Differences-From-The-Bourne-Shell-1" href="#Major-Differences-From-The-Bourne-Shell">Appendix B Major Differences From The Bourne Shell</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Implementation-Differences-From-The-SVR4_002e2-Shell" href="#Implementation-Differences-From-The-SVR4_002e2-Shell">B.1 Implementation Differences From The SVR4.2 Shell</a></li> </ul></li> <li><a id="toc-GNU-Free-Documentation-License-1" href="#GNU-Free-Documentation-License">Appendix C GNU Free Documentation License</a></li> <li><a id="toc-Indexes-1" href="#Indexes">Appendix D Indexes</a> - <ul class="no-bullet"> + <ul class="toc-numbered-mark"> <li><a id="toc-Index-of-Shell-Builtin-Commands" href="#Builtin-Index" rel="index">D.1 Index of Shell Builtin Commands</a></li> <li><a id="toc-Index-of-Shell-Reserved-Words" href="#Reserved-Word-Index" rel="index">D.2 Index of Shell Reserved Words</a></li> <li><a id="toc-Parameter-and-Variable-Index" href="#Variable-Index" rel="index">D.3 Parameter and Variable Index</a></li> @@ -302,56 +306,56 @@ reference on shell behavior. </div> </div> <hr> -<div class="chapter" id="Introduction"> -<div class="header"> +<div class="chapter-level-extent" id="Introduction"> +<div class="nav-panel"> <p> Next: <a href="#Definitions" accesskey="n" rel="next">Definitions</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Introduction-1"></span><h2 class="chapter">1 Introduction</h2> +<h2 class="chapter" id="Introduction-1"><span>1 Introduction<a class="copiable-link" href="#Introduction-1"> &para;</a></span></h2> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#What-is-Bash_003f" accesskey="1">What is Bash?</a></li> <li><a href="#What-is-a-shell_003f" accesskey="2">What is a shell?</a></li> </ul> <hr> -<div class="section" id="What-is-Bash_003f"> -<div class="header"> +<div class="section-level-extent" id="What-is-Bash_003f"> +<div class="nav-panel"> <p> Next: <a href="#What-is-a-shell_003f" accesskey="n" rel="next">What is a shell?</a>, Up: <a href="#Introduction" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="What-is-Bash_003f-1"></span><h3 class="section">1.1 What is Bash?</h3> +<h3 class="section" id="What-is-Bash_003f-1"><span>1.1 What is Bash?<a class="copiable-link" href="#What-is-Bash_003f-1"> &para;</a></span></h3> <p>Bash is the shell, or command language interpreter, -for the <small>GNU</small> operating system. -The name is an acronym for the &lsquo;<samp>Bourne-Again SHell</samp>&rsquo;, +for the <small class="sc">GNU</small> operating system. +The name is an acronym for the &lsquo;<samp class="samp">Bourne-Again SHell</samp>&rsquo;, a pun on Stephen Bourne, the author of the direct ancestor of -the current Unix shell <code>sh</code>, +the current Unix shell <code class="code">sh</code>, which appeared in the Seventh Edition Bell Labs Research version of Unix. </p> -<p>Bash is largely compatible with <code>sh</code> and incorporates useful -features from the Korn shell <code>ksh</code> and the C shell <code>csh</code>. -It is intended to be a conformant implementation of the <small>IEEE</small> -<small>POSIX</small> Shell and Tools portion of the <small>IEEE</small> <small>POSIX</small> -specification (<small>IEEE</small> Standard 1003.1). -It offers functional improvements over <code>sh</code> for both interactive and +<p>Bash is largely compatible with <code class="code">sh</code> and incorporates useful +features from the Korn shell <code class="code">ksh</code> and the C shell <code class="code">csh</code>. +It is intended to be a conformant implementation of the <small class="sc">IEEE</small> +<small class="sc">POSIX</small> Shell and Tools portion of the <small class="sc">IEEE</small> <small class="sc">POSIX</small> +specification (<small class="sc">IEEE</small> Standard 1003.1). +It offers functional improvements over <code class="code">sh</code> for both interactive and programming use. </p> -<p>While the <small>GNU</small> operating system provides other shells, including -a version of <code>csh</code>, Bash is the default shell. -Like other <small>GNU</small> software, Bash is quite portable. It currently runs -on nearly every version of Unix and a few other operating systems - -independently-supported ports exist for <small>MS-DOS</small>, <small>OS/2</small>, +<p>While the <small class="sc">GNU</small> operating system provides other shells, including +a version of <code class="code">csh</code>, Bash is the default shell. +Like other <small class="sc">GNU</small> software, Bash is quite portable. It currently runs +on nearly every version of Unix and a few other operating systems &minus; +independently-supported ports exist for <small class="sc">MS-DOS</small>, <small class="sc">OS/2</small>, and Windows platforms. </p> <hr> </div> -<div class="section" id="What-is-a-shell_003f"> -<div class="header"> +<div class="section-level-extent" id="What-is-a-shell_003f"> +<div class="nav-panel"> <p> Previous: <a href="#What-is-Bash_003f" accesskey="p" rel="prev">What is Bash?</a>, Up: <a href="#Introduction" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="What-is-a-shell_003f-1"></span><h3 class="section">1.2 What is a shell?</h3> +<h3 class="section" id="What-is-a-shell_003f-1"><span>1.2 What is a shell?<a class="copiable-link" href="#What-is-a-shell_003f-1"> &para;</a></span></h3> <p>At its base, a shell is simply a macro processor that executes commands. The term macro processor means functionality where text @@ -359,11 +363,11 @@ and symbols are expanded to create larger expressions. </p> <p>A Unix shell is both a command interpreter and a programming language. As a command interpreter, the shell provides the user -interface to the rich set of <small>GNU</small> utilities. The programming +interface to the rich set of <small class="sc">GNU</small> utilities. The programming language features allow these utilities to be combined. Files containing commands can be created, and become commands themselves. These new commands have the same status as -system commands in directories such as <samp>/bin</samp>, allowing users +system commands in directories such as <samp class="file">/bin</samp>, allowing users or groups to establish custom environments to automate their common tasks. </p> @@ -372,23 +376,23 @@ interactive mode, they accept input typed from the keyboard. When executing non-interactively, shells execute commands read from a file. </p> -<p>A shell allows execution of <small>GNU</small> commands, both synchronously and +<p>A shell allows execution of <small class="sc">GNU</small> commands, both synchronously and asynchronously. The shell waits for synchronous commands to complete before accepting more input; asynchronous commands continue to execute in parallel with the shell while it reads and executes additional commands. -The <em>redirection</em> constructs permit +The <em class="dfn">redirection</em> constructs permit fine-grained control of the input and output of those commands. Moreover, the shell allows control over the contents of commands&rsquo; environments. </p> <p>Shells also provide a small set of built-in -commands (<em>builtins</em>) implementing functionality impossible +commands (<em class="dfn">builtins</em>) implementing functionality impossible or inconvenient to obtain via separate utilities. -For example, <code>cd</code>, <code>break</code>, <code>continue</code>, and -<code>exec</code> cannot be implemented outside of the shell because +For example, <code class="code">cd</code>, <code class="code">break</code>, <code class="code">continue</code>, and +<code class="code">exec</code> cannot be implemented outside of the shell because they directly manipulate the shell itself. -The <code>history</code>, <code>getopts</code>, <code>kill</code>, or <code>pwd</code> +The <code class="code">history</code>, <code class="code">getopts</code>, <code class="code">kill</code>, or <code class="code">pwd</code> builtins, among others, could be implemented in separate utilities, but they are more convenient to use as builtin commands. All of the shell builtins are described in @@ -408,149 +412,149 @@ described in this manual. <hr> </div> </div> -<div class="chapter" id="Definitions"> -<div class="header"> +<div class="chapter-level-extent" id="Definitions"> +<div class="nav-panel"> <p> Next: <a href="#Basic-Shell-Features" accesskey="n" rel="next">Basic Shell Features</a>, Previous: <a href="#Introduction" accesskey="p" rel="prev">Introduction</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Definitions-1"></span><h2 class="chapter">2 Definitions</h2> +<h2 class="chapter" id="Definitions-1"><span>2 Definitions<a class="copiable-link" href="#Definitions-1"> &para;</a></span></h2> <p>These definitions are used throughout the remainder of this manual. </p> -<dl compact="compact"> -<dt id='index-POSIX'><span><code>POSIX</code><a href='#index-POSIX' class='copiable-anchor'> &para;</a></span></dt> +<dl class="table"> +<dt><a id="index-POSIX"></a><span><code class="code">POSIX</code><a class="copiable-link" href="#index-POSIX"> &para;</a></span></dt> <dd><p>A family of open system standards based on Unix. Bash is primarily concerned with the Shell and Utilities portion of the -<small>POSIX</small> 1003.1 standard. +<small class="sc">POSIX</small> 1003.1 standard. </p> </dd> -<dt><span><code>blank</code></span></dt> +<dt><code class="code">blank</code></dt> <dd><p>A space or tab character. </p> </dd> -<dt id='index-builtin-1'><span><code>builtin</code><a href='#index-builtin-1' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-builtin-1"></a><span><code class="code">builtin</code><a class="copiable-link" href="#index-builtin-1"> &para;</a></span></dt> <dd><p>A command that is implemented internally by the shell itself, rather than by an executable program somewhere in the file system. </p> </dd> -<dt id='index-control-operator'><span><code>control operator</code><a href='#index-control-operator' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>A <code>token</code> that performs a control function. It is a <code>newline</code> +<dt><a id="index-control-operator"></a><span><code class="code">control operator</code><a class="copiable-link" href="#index-control-operator"> &para;</a></span></dt> +<dd><p>A <code class="code">token</code> that performs a control function. It is a <code class="code">newline</code> or one of the following: -&lsquo;<samp>||</samp>&rsquo;, &lsquo;<samp>&amp;&amp;</samp>&rsquo;, &lsquo;<samp>&amp;</samp>&rsquo;, &lsquo;<samp>;</samp>&rsquo;, &lsquo;<samp>;;</samp>&rsquo;, &lsquo;<samp>;&amp;</samp>&rsquo;, &lsquo;<samp>;;&amp;</samp>&rsquo;, -&lsquo;<samp>|</samp>&rsquo;, &lsquo;<samp>|&amp;</samp>&rsquo;, &lsquo;<samp>(</samp>&rsquo;, or &lsquo;<samp>)</samp>&rsquo;. +&lsquo;<samp class="samp">||</samp>&rsquo;, &lsquo;<samp class="samp">&amp;&amp;</samp>&rsquo;, &lsquo;<samp class="samp">&amp;</samp>&rsquo;, &lsquo;<samp class="samp">;</samp>&rsquo;, &lsquo;<samp class="samp">;;</samp>&rsquo;, &lsquo;<samp class="samp">;&amp;</samp>&rsquo;, &lsquo;<samp class="samp">;;&amp;</samp>&rsquo;, +&lsquo;<samp class="samp">|</samp>&rsquo;, &lsquo;<samp class="samp">|&amp;</samp>&rsquo;, &lsquo;<samp class="samp">(</samp>&rsquo;, or &lsquo;<samp class="samp">)</samp>&rsquo;. </p> </dd> -<dt id='index-exit-status'><span><code>exit status</code><a href='#index-exit-status' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-exit-status"></a><span><code class="code">exit status</code><a class="copiable-link" href="#index-exit-status"> &para;</a></span></dt> <dd><p>The value returned by a command to its caller. The value is restricted to eight bits, so the maximum value is 255. </p> </dd> -<dt id='index-field'><span><code>field</code><a href='#index-field' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-field"></a><span><code class="code">field</code><a class="copiable-link" href="#index-field"> &para;</a></span></dt> <dd><p>A unit of text that is the result of one of the shell expansions. After expansion, when executing a command, the resulting fields are used as the command name and arguments. </p> </dd> -<dt id='index-filename'><span><code>filename</code><a href='#index-filename' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-filename"></a><span><code class="code">filename</code><a class="copiable-link" href="#index-filename"> &para;</a></span></dt> <dd><p>A string of characters used to identify a file. </p> </dd> -<dt id='index-job'><span><code>job</code><a href='#index-job' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-job"></a><span><code class="code">job</code><a class="copiable-link" href="#index-job"> &para;</a></span></dt> <dd><p>A set of processes comprising a pipeline, and any processes descended from it, that are all in the same process group. </p> </dd> -<dt id='index-job-control'><span><code>job control</code><a href='#index-job-control' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-job-control"></a><span><code class="code">job control</code><a class="copiable-link" href="#index-job-control"> &para;</a></span></dt> <dd><p>A mechanism by which users can selectively stop (suspend) and restart (resume) execution of processes. </p> </dd> -<dt id='index-metacharacter'><span><code>metacharacter</code><a href='#index-metacharacter' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-metacharacter"></a><span><code class="code">metacharacter</code><a class="copiable-link" href="#index-metacharacter"> &para;</a></span></dt> <dd><p>A character that, when unquoted, separates words. A metacharacter is -a <code>space</code>, <code>tab</code>, <code>newline</code>, or one of the following characters: -&lsquo;<samp>|</samp>&rsquo;, &lsquo;<samp>&amp;</samp>&rsquo;, &lsquo;<samp>;</samp>&rsquo;, &lsquo;<samp>(</samp>&rsquo;, &lsquo;<samp>)</samp>&rsquo;, &lsquo;<samp>&lt;</samp>&rsquo;, or -&lsquo;<samp>&gt;</samp>&rsquo;. +a <code class="code">space</code>, <code class="code">tab</code>, <code class="code">newline</code>, or one of the following characters: +&lsquo;<samp class="samp">|</samp>&rsquo;, &lsquo;<samp class="samp">&amp;</samp>&rsquo;, &lsquo;<samp class="samp">;</samp>&rsquo;, &lsquo;<samp class="samp">(</samp>&rsquo;, &lsquo;<samp class="samp">)</samp>&rsquo;, &lsquo;<samp class="samp">&lt;</samp>&rsquo;, or +&lsquo;<samp class="samp">&gt;</samp>&rsquo;. </p> </dd> -<dt id='index-name'><span><code>name</code><a href='#index-name' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-identifier"></span> -<p>A <code>word</code> consisting solely of letters, numbers, and underscores, -and beginning with a letter or underscore. <code>Name</code>s are used as +<dt><a class="index-entry-id" id="index-identifier"></a> +<a id="index-name"></a><span><code class="code">name</code><a class="copiable-link" href="#index-name"> &para;</a></span></dt> +<dd><p>A <code class="code">word</code> consisting solely of letters, numbers, and underscores, +and beginning with a letter or underscore. <code class="code">Name</code>s are used as shell variable and function names. -Also referred to as an <code>identifier</code>. +Also referred to as an <code class="code">identifier</code>. </p> </dd> -<dt id='index-operator_002c-shell'><span><code>operator</code><a href='#index-operator_002c-shell' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>A <code>control operator</code> or a <code>redirection operator</code>. -See <a href="#Redirections">Redirections</a>, for a list of redirection operators. -Operators contain at least one unquoted <code>metacharacter</code>. +<dt><a id="index-operator_002c-shell"></a><span><code class="code">operator</code><a class="copiable-link" href="#index-operator_002c-shell"> &para;</a></span></dt> +<dd><p>A <code class="code">control operator</code> or a <code class="code">redirection operator</code>. +See <a class="xref" href="#Redirections">Redirections</a>, for a list of redirection operators. +Operators contain at least one unquoted <code class="code">metacharacter</code>. </p> </dd> -<dt id='index-process-group'><span><code>process group</code><a href='#index-process-group' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-process-group"></a><span><code class="code">process group</code><a class="copiable-link" href="#index-process-group"> &para;</a></span></dt> <dd><p>A collection of related processes each having the same process -group <small>ID</small>. +group <small class="sc">ID</small>. </p> </dd> -<dt id='index-process-group-ID'><span><code>process group ID</code><a href='#index-process-group-ID' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>A unique identifier that represents a <code>process group</code> +<dt><a id="index-process-group-ID"></a><span><code class="code">process group ID</code><a class="copiable-link" href="#index-process-group-ID"> &para;</a></span></dt> +<dd><p>A unique identifier that represents a <code class="code">process group</code> during its lifetime. </p> </dd> -<dt id='index-reserved-word'><span><code>reserved word</code><a href='#index-reserved-word' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>A <code>word</code> that has a special meaning to the shell. Most reserved -words introduce shell flow control constructs, such as <code>for</code> and -<code>while</code>. +<dt><a id="index-reserved-word"></a><span><code class="code">reserved word</code><a class="copiable-link" href="#index-reserved-word"> &para;</a></span></dt> +<dd><p>A <code class="code">word</code> that has a special meaning to the shell. Most reserved +words introduce shell flow control constructs, such as <code class="code">for</code> and +<code class="code">while</code>. </p> </dd> -<dt id='index-return-status'><span><code>return status</code><a href='#index-return-status' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>A synonym for <code>exit status</code>. +<dt><a id="index-return-status"></a><span><code class="code">return status</code><a class="copiable-link" href="#index-return-status"> &para;</a></span></dt> +<dd><p>A synonym for <code class="code">exit status</code>. </p> </dd> -<dt id='index-signal'><span><code>signal</code><a href='#index-signal' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-signal"></a><span><code class="code">signal</code><a class="copiable-link" href="#index-signal"> &para;</a></span></dt> <dd><p>A mechanism by which a process may be notified by the kernel of an event occurring in the system. </p> </dd> -<dt id='index-special-builtin'><span><code>special builtin</code><a href='#index-special-builtin' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-special-builtin"></a><span><code class="code">special builtin</code><a class="copiable-link" href="#index-special-builtin"> &para;</a></span></dt> <dd><p>A shell builtin command that has been classified as special by the -<small>POSIX</small> standard. +<small class="sc">POSIX</small> standard. </p> </dd> -<dt id='index-token'><span><code>token</code><a href='#index-token' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-token"></a><span><code class="code">token</code><a class="copiable-link" href="#index-token"> &para;</a></span></dt> <dd><p>A sequence of characters considered a single unit by the shell. -It is either a <code>word</code> or an <code>operator</code>. +It is either a <code class="code">word</code> or an <code class="code">operator</code>. </p> </dd> -<dt id='index-word'><span><code>word</code><a href='#index-word' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-word"></a><span><code class="code">word</code><a class="copiable-link" href="#index-word"> &para;</a></span></dt> <dd><p>A sequence of characters treated as a unit by the shell. -Words may not include unquoted <code>metacharacters</code>. +Words may not include unquoted <code class="code">metacharacters</code>. </p></dd> </dl> <hr> </div> -<div class="chapter" id="Basic-Shell-Features"> -<div class="header"> +<div class="chapter-level-extent" id="Basic-Shell-Features"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Builtin-Commands" accesskey="n" rel="next">Shell Builtin Commands</a>, Previous: <a href="#Definitions" accesskey="p" rel="prev">Definitions</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Basic-Shell-Features-1"></span><h2 class="chapter">3 Basic Shell Features</h2> -<span id="index-Bourne-shell"></span> +<h2 class="chapter" id="Basic-Shell-Features-1"><span>3 Basic Shell Features<a class="copiable-link" href="#Basic-Shell-Features-1"> &para;</a></span></h2> +<a class="index-entry-id" id="index-Bourne-shell"></a> -<p>Bash is an acronym for &lsquo;<samp>Bourne-Again SHell</samp>&rsquo;. +<p>Bash is an acronym for &lsquo;<samp class="samp">Bourne-Again SHell</samp>&rsquo;. The Bourne shell is the traditional Unix shell originally written by Stephen Bourne. All of the Bourne shell builtin commands are available in Bash, -The rules for evaluation and quoting are taken from the <small>POSIX</small> +The rules for evaluation and quoting are taken from the <small class="sc">POSIX</small> specification for the &lsquo;standard&rsquo; Unix shell. </p> <p>This chapter briefly summarizes the shell&rsquo;s &lsquo;building blocks&rsquo;: -commands, control structures, shell functions, shell <i>parameters</i>, +commands, control structures, shell functions, shell <i class="i">parameters</i>, shell expansions, -<i>redirections</i>, which are a way to direct input and output from +<i class="i">redirections</i>, which are a way to direct input and output from and to named files, and how the shell executes commands. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Shell-Syntax" accesskey="1">Shell Syntax</a></li> <li><a href="#Shell-Commands" accesskey="2">Shell Commands</a></li> <li><a href="#Shell-Functions" accesskey="3">Shell Functions</a></li> @@ -561,16 +565,16 @@ and to named files, and how the shell executes commands. <li><a href="#Shell-Scripts" accesskey="8">Shell Scripts</a></li> </ul> <hr> -<div class="section" id="Shell-Syntax"> -<div class="header"> +<div class="section-level-extent" id="Shell-Syntax"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Commands" accesskey="n" rel="next">Shell Commands</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Syntax-1"></span><h3 class="section">3.1 Shell Syntax</h3> +<h3 class="section" id="Shell-Syntax-1"><span>3.1 Shell Syntax<a class="copiable-link" href="#Shell-Syntax-1"> &para;</a></span></h3> <p>When the shell reads input, it proceeds through a sequence of operations. If the input indicates the beginning of a -comment, the shell ignores the comment symbol (&lsquo;<samp>#</samp>&rsquo;), and the rest +comment, the shell ignores the comment symbol (&lsquo;<samp class="samp">#</samp>&rsquo;), and the rest of that line. </p> <p>Otherwise, roughly speaking, the shell reads its input and @@ -583,59 +587,59 @@ others, redirects input and output as needed, executes the specified command, waits for the command&rsquo;s exit status, and makes that exit status available for further inspection or processing. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Shell-Operation" accesskey="1">Shell Operation</a></li> <li><a href="#Quoting" accesskey="2">Quoting</a></li> <li><a href="#Comments" accesskey="3">Comments</a></li> </ul> <hr> -<div class="subsection" id="Shell-Operation"> -<div class="header"> +<div class="subsection-level-extent" id="Shell-Operation"> +<div class="nav-panel"> <p> Next: <a href="#Quoting" accesskey="n" rel="next">Quoting</a>, Up: <a href="#Shell-Syntax" accesskey="u" rel="up">Shell Syntax</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Operation-1"></span><h4 class="subsection">3.1.1 Shell Operation</h4> +<h4 class="subsection" id="Shell-Operation-1"><span>3.1.1 Shell Operation<a class="copiable-link" href="#Shell-Operation-1"> &para;</a></span></h4> <p>The following is a brief description of the shell&rsquo;s operation when it reads and executes a command. Basically, the shell does the following: </p> -<ol> -<li> Reads its input from a file (see <a href="#Shell-Scripts">Shell Scripts</a>), from a string -supplied as an argument to the <samp>-c</samp> invocation option -(see <a href="#Invoking-Bash">Invoking Bash</a>), or from the user&rsquo;s terminal. +<ol class="enumerate"> +<li> Reads its input from a file (see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>), from a string +supplied as an argument to the <samp class="option">-c</samp> invocation option +(see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>), or from the user&rsquo;s terminal. </li><li> Breaks the input into words and operators, obeying the quoting rules -described in <a href="#Quoting">Quoting</a>. These tokens are separated by -<code>metacharacters</code>. Alias expansion is performed by this step -(see <a href="#Aliases">Aliases</a>). +described in <a class="ref" href="#Quoting">Quoting</a>. These tokens are separated by +<code class="code">metacharacters</code>. Alias expansion is performed by this step +(see <a class="pxref" href="#Aliases">Aliases</a>). </li><li> Parses the tokens into simple and compound commands -(see <a href="#Shell-Commands">Shell Commands</a>). +(see <a class="pxref" href="#Shell-Commands">Shell Commands</a>). -</li><li> Performs the various shell expansions (see <a href="#Shell-Expansions">Shell Expansions</a>), breaking -the expanded tokens into lists of filenames (see <a href="#Filename-Expansion">Filename Expansion</a>) +</li><li> Performs the various shell expansions (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>), breaking +the expanded tokens into lists of filenames (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>) and commands and arguments. -</li><li> Performs any necessary redirections (see <a href="#Redirections">Redirections</a>) and removes +</li><li> Performs any necessary redirections (see <a class="pxref" href="#Redirections">Redirections</a>) and removes the redirection operators and their operands from the argument list. -</li><li> Executes the command (see <a href="#Executing-Commands">Executing Commands</a>). +</li><li> Executes the command (see <a class="pxref" href="#Executing-Commands">Executing Commands</a>). </li><li> Optionally waits for the command to complete and collects its exit -status (see <a href="#Exit-Status">Exit Status</a>). +status (see <a class="pxref" href="#Exit-Status">Exit Status</a>). </li></ol> <hr> </div> -<div class="subsection" id="Quoting"> -<div class="header"> +<div class="subsection-level-extent" id="Quoting"> +<div class="nav-panel"> <p> Next: <a href="#Comments" accesskey="n" rel="next">Comments</a>, Previous: <a href="#Shell-Operation" accesskey="p" rel="prev">Shell Operation</a>, Up: <a href="#Shell-Syntax" accesskey="u" rel="up">Shell Syntax</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Quoting-1"></span><h4 class="subsection">3.1.2 Quoting</h4> -<span id="index-quoting"></span> +<h4 class="subsection" id="Quoting-1"><span>3.1.2 Quoting<a class="copiable-link" href="#Quoting-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-quoting"></a> <p>Quoting is used to remove the special meaning of certain characters or words to the shell. Quoting can be used to @@ -643,19 +647,19 @@ disable special treatment for special characters, to prevent reserved words from being recognized as such, and to prevent parameter expansion. </p> -<p>Each of the shell metacharacters (see <a href="#Definitions">Definitions</a>) +<p>Each of the shell metacharacters (see <a class="pxref" href="#Definitions">Definitions</a>) has special meaning to the shell and must be quoted if it is to represent itself. When the command history expansion facilities are being used -(see <a href="#History-Interaction">History Expansion</a>), the -<em>history expansion</em> character, usually &lsquo;<samp>!</samp>&rsquo;, must be quoted -to prevent history expansion. See <a href="#Bash-History-Facilities">Bash History Facilities</a>, for +(see <a class="pxref" href="#History-Interaction">History Expansion</a>), the +<em class="dfn">history expansion</em> character, usually &lsquo;<samp class="samp">!</samp>&rsquo;, must be quoted +to prevent history expansion. See <a class="xref" href="#Bash-History-Facilities">Bash History Facilities</a>, for more details concerning history expansion. </p> <p>There are three quoting mechanisms: the -<em>escape character</em>, single quotes, and double quotes. +<em class="dfn">escape character</em>, single quotes, and double quotes. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Escape-Character" accesskey="1">Escape Character</a></li> <li><a href="#Single-Quotes" accesskey="2">Single Quotes</a></li> <li><a href="#Double-Quotes" accesskey="3">Double Quotes</a></li> @@ -663,138 +667,138 @@ more details concerning history expansion. <li><a href="#Locale-Translation" accesskey="5">Locale-Specific Translation</a></li> </ul> <hr> -<div class="subsubsection" id="Escape-Character"> -<div class="header"> +<div class="subsubsection-level-extent" id="Escape-Character"> +<div class="nav-panel"> <p> Next: <a href="#Single-Quotes" accesskey="n" rel="next">Single Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Escape-Character-1"></span><h4 class="subsubsection">3.1.2.1 Escape Character</h4> -<p>A non-quoted backslash &lsquo;<samp>\</samp>&rsquo; is the Bash escape character. +<h4 class="subsubsection" id="Escape-Character-1"><span>3.1.2.1 Escape Character<a class="copiable-link" href="#Escape-Character-1"> &para;</a></span></h4> +<p>A non-quoted backslash &lsquo;<samp class="samp">\</samp>&rsquo; is the Bash escape character. It preserves the literal value of the next character that follows, -with the exception of <code>newline</code>. If a <code>\newline</code> pair -appears, and the backslash itself is not quoted, the <code>\newline</code> +with the exception of <code class="code">newline</code>. If a <code class="code">\newline</code> pair +appears, and the backslash itself is not quoted, the <code class="code">\newline</code> is treated as a line continuation (that is, it is removed from the input stream and effectively ignored). </p> <hr> </div> -<div class="subsubsection" id="Single-Quotes"> -<div class="header"> +<div class="subsubsection-level-extent" id="Single-Quotes"> +<div class="nav-panel"> <p> Next: <a href="#Double-Quotes" accesskey="n" rel="next">Double Quotes</a>, Previous: <a href="#Escape-Character" accesskey="p" rel="prev">Escape Character</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Single-Quotes-1"></span><h4 class="subsubsection">3.1.2.2 Single Quotes</h4> +<h4 class="subsubsection" id="Single-Quotes-1"><span>3.1.2.2 Single Quotes<a class="copiable-link" href="#Single-Quotes-1"> &para;</a></span></h4> -<p>Enclosing characters in single quotes (&lsquo;<samp>'</samp>&rsquo;) preserves the literal value +<p>Enclosing characters in single quotes (&lsquo;<samp class="samp">'</samp>&rsquo;) preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash. </p> <hr> </div> -<div class="subsubsection" id="Double-Quotes"> -<div class="header"> +<div class="subsubsection-level-extent" id="Double-Quotes"> +<div class="nav-panel"> <p> Next: <a href="#ANSI_002dC-Quoting" accesskey="n" rel="next">ANSI-C Quoting</a>, Previous: <a href="#Single-Quotes" accesskey="p" rel="prev">Single Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Double-Quotes-1"></span><h4 class="subsubsection">3.1.2.3 Double Quotes</h4> +<h4 class="subsubsection" id="Double-Quotes-1"><span>3.1.2.3 Double Quotes<a class="copiable-link" href="#Double-Quotes-1"> &para;</a></span></h4> -<p>Enclosing characters in double quotes (&lsquo;<samp>&quot;</samp>&rsquo;) preserves the literal value +<p>Enclosing characters in double quotes (&lsquo;<samp class="samp">&quot;</samp>&rsquo;) preserves the literal value of all characters within the quotes, with the exception of -&lsquo;<samp>$</samp>&rsquo;, &lsquo;<samp>`</samp>&rsquo;, &lsquo;<samp>\</samp>&rsquo;, -and, when history expansion is enabled, &lsquo;<samp>!</samp>&rsquo;. +&lsquo;<samp class="samp">$</samp>&rsquo;, &lsquo;<samp class="samp">`</samp>&rsquo;, &lsquo;<samp class="samp">\</samp>&rsquo;, +and, when history expansion is enabled, &lsquo;<samp class="samp">!</samp>&rsquo;. When the shell is in -<small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>), -the &lsquo;<samp>!</samp>&rsquo; has no special meaning +<small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>), +the &lsquo;<samp class="samp">!</samp>&rsquo; has no special meaning within double quotes, even when history expansion is enabled. -The characters &lsquo;<samp>$</samp>&rsquo; and &lsquo;<samp>`</samp>&rsquo; -retain their special meaning within double quotes (see <a href="#Shell-Expansions">Shell Expansions</a>). +The characters &lsquo;<samp class="samp">$</samp>&rsquo; and &lsquo;<samp class="samp">`</samp>&rsquo; +retain their special meaning within double quotes (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>). The backslash retains its special meaning only when followed by one of the following characters: -&lsquo;<samp>$</samp>&rsquo;, &lsquo;<samp>`</samp>&rsquo;, &lsquo;<samp>&quot;</samp>&rsquo;, &lsquo;<samp>\</samp>&rsquo;, or <code>newline</code>. +&lsquo;<samp class="samp">$</samp>&rsquo;, &lsquo;<samp class="samp">`</samp>&rsquo;, &lsquo;<samp class="samp">&quot;</samp>&rsquo;, &lsquo;<samp class="samp">\</samp>&rsquo;, or <code class="code">newline</code>. Within double quotes, backslashes that are followed by one of these characters are removed. Backslashes preceding characters without a special meaning are left unmodified. A double quote may be quoted within double quotes by preceding it with a backslash. -If enabled, history expansion will be performed unless an &lsquo;<samp>!</samp>&rsquo; +If enabled, history expansion will be performed unless an &lsquo;<samp class="samp">!</samp>&rsquo; appearing in double quotes is escaped using a backslash. -The backslash preceding the &lsquo;<samp>!</samp>&rsquo; is not removed. +The backslash preceding the &lsquo;<samp class="samp">!</samp>&rsquo; is not removed. </p> -<p>The special parameters &lsquo;<samp>*</samp>&rsquo; and &lsquo;<samp>@</samp>&rsquo; have special meaning -when in double quotes (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +<p>The special parameters &lsquo;<samp class="samp">*</samp>&rsquo; and &lsquo;<samp class="samp">@</samp>&rsquo; have special meaning +when in double quotes (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). </p> <hr> </div> -<div class="subsubsection" id="ANSI_002dC-Quoting"> -<div class="header"> +<div class="subsubsection-level-extent" id="ANSI_002dC-Quoting"> +<div class="nav-panel"> <p> Next: <a href="#Locale-Translation" accesskey="n" rel="next">Locale-Specific Translation</a>, Previous: <a href="#Double-Quotes" accesskey="p" rel="prev">Double Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="ANSI_002dC-Quoting-1"></span><h4 class="subsubsection">3.1.2.4 ANSI-C Quoting</h4> -<span id="index-quoting_002c-ANSI"></span> +<h4 class="subsubsection" id="ANSI_002dC-Quoting-1"><span>3.1.2.4 ANSI-C Quoting<a class="copiable-link" href="#ANSI_002dC-Quoting-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-quoting_002c-ANSI"></a> -<p>Character sequences of the form $&rsquo;<var>string</var>&rsquo; are treated as a special -kind of single quotes. -The sequence expands to <var>string</var>, with backslash-escaped characters -in <var>string</var> replaced as specified by the ANSI C standard. +<p>Character sequences of the form <code class="code">$'<var class="var">string</var>'</code> are treated as +a special kind of single quotes. +The sequence expands to <var class="var">string</var>, with backslash-escaped characters +in <var class="var">string</var> replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: </p> -<dl compact="compact"> -<dt><span><code>\a</code></span></dt> +<dl class="table"> +<dt><code class="code">\a</code></dt> <dd><p>alert (bell) </p></dd> -<dt><span><code>\b</code></span></dt> +<dt><code class="code">\b</code></dt> <dd><p>backspace </p></dd> -<dt><span><code>\e</code></span></dt> -<dt><span><code>\E</code></span></dt> +<dt><code class="code">\e</code></dt> +<dt><code class="code">\E</code></dt> <dd><p>an escape character (not ANSI C) </p></dd> -<dt><span><code>\f</code></span></dt> +<dt><code class="code">\f</code></dt> <dd><p>form feed </p></dd> -<dt><span><code>\n</code></span></dt> +<dt><code class="code">\n</code></dt> <dd><p>newline </p></dd> -<dt><span><code>\r</code></span></dt> +<dt><code class="code">\r</code></dt> <dd><p>carriage return </p></dd> -<dt><span><code>\t</code></span></dt> +<dt><code class="code">\t</code></dt> <dd><p>horizontal tab </p></dd> -<dt><span><code>\v</code></span></dt> +<dt><code class="code">\v</code></dt> <dd><p>vertical tab </p></dd> -<dt><span><code>\\</code></span></dt> +<dt><code class="code">\\</code></dt> <dd><p>backslash </p></dd> -<dt><span><code>\'</code></span></dt> +<dt><code class="code">\'</code></dt> <dd><p>single quote </p></dd> -<dt><span><code>\&quot;</code></span></dt> +<dt><code class="code">\&quot;</code></dt> <dd><p>double quote </p></dd> -<dt><span><code>\?</code></span></dt> +<dt><code class="code">\?</code></dt> <dd><p>question mark </p></dd> -<dt><span><code>\<var>nnn</var></code></span></dt> -<dd><p>the eight-bit character whose value is the octal value <var>nnn</var> +<dt><code class="code">\<var class="var">nnn</var></code></dt> +<dd><p>the eight-bit character whose value is the octal value <var class="var">nnn</var> (one to three octal digits) </p></dd> -<dt><span><code>\x<var>HH</var></code></span></dt> -<dd><p>the eight-bit character whose value is the hexadecimal value <var>HH</var> +<dt><code class="code">\x<var class="var">HH</var></code></dt> +<dd><p>the eight-bit character whose value is the hexadecimal value <var class="var">HH</var> (one or two hex digits) </p></dd> -<dt><span><code>\u<var>HHHH</var></code></span></dt> +<dt><code class="code">\u<var class="var">HHHH</var></code></dt> <dd><p>the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value -<var>HHHH</var> (one to four hex digits) +<var class="var">HHHH</var> (one to four hex digits) </p></dd> -<dt><span><code>\U<var>HHHHHHHH</var></code></span></dt> +<dt><code class="code">\U<var class="var">HHHHHHHH</var></code></dt> <dd><p>the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value -<var>HHHHHHHH</var> (one to eight hex digits) +<var class="var">HHHHHHHH</var> (one to eight hex digits) </p></dd> -<dt><span><code>\c<var>x</var></code></span></dt> -<dd><p>a control-<var>x</var> character +<dt><code class="code">\c<var class="var">x</var></code></dt> +<dd><p>a control-<var class="var">x</var> character </p></dd> </dl> @@ -803,78 +807,78 @@ been present. </p> <hr> </div> -<div class="subsubsection" id="Locale-Translation"> -<div class="header"> +<div class="subsubsection-level-extent" id="Locale-Translation"> +<div class="nav-panel"> <p> Previous: <a href="#ANSI_002dC-Quoting" accesskey="p" rel="prev">ANSI-C Quoting</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Locale_002dSpecific-Translation"></span><h4 class="subsubsection">3.1.2.5 Locale-Specific Translation</h4> -<span id="index-localization"></span> -<span id="index-internationalization"></span> -<span id="index-native-languages"></span> -<span id="index-translation_002c-native-languages"></span> +<h4 class="subsubsection" id="Locale_002dSpecific-Translation"><span>3.1.2.5 Locale-Specific Translation<a class="copiable-link" href="#Locale_002dSpecific-Translation"> &para;</a></span></h4> +<a class="index-entry-id" id="index-localization"></a> +<a class="index-entry-id" id="index-internationalization"></a> +<a class="index-entry-id" id="index-native-languages"></a> +<a class="index-entry-id" id="index-translation_002c-native-languages"></a> -<p>Prefixing a double-quoted string with a dollar sign (&lsquo;<samp>$</samp>&rsquo;), such -as <tt>$&quot;hello, world&quot;</tt>, +<p>Prefixing a double-quoted string with a dollar sign (&lsquo;<samp class="samp">$</samp>&rsquo;), such +as <code class="verb">$&quot;hello,&nbsp;world&quot;</code>, will cause the string to be translated according to the current locale. -The <code>gettext</code> infrastructure performs the lookup and -translation, using the <code>LC_MESSAGES</code>, <code>TEXTDOMAINDIR</code>, -and <code>TEXTDOMAIN</code> shell variables, as explained below. +The <code class="code">gettext</code> infrastructure performs the lookup and +translation, using the <code class="code">LC_MESSAGES</code>, <code class="code">TEXTDOMAINDIR</code>, +and <code class="code">TEXTDOMAIN</code> shell variables, as explained below. See the gettext documentation for additional details not covered here. -If the current locale is <code>C</code> or <code>POSIX</code>, +If the current locale is <code class="code">C</code> or <code class="code">POSIX</code>, if there are no translations available, -of if the string is not translated, +or if the string is not translated, the dollar sign is ignored. Since this is a form of double quoting, the string remains double-quoted by default, whether or not it is translated and replaced. -If the <code>noexpand_translation</code> option is enabled -using the <code>shopt</code> builtin (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), +If the <code class="code">noexpand_translation</code> option is enabled +using the <code class="code">shopt</code> builtin (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), translated strings are single-quoted instead of double-quoted. </p> <p>The rest of this section is a brief overview of how you use gettext to -create translations for strings in a shell script named <var>scriptname</var>. +create translations for strings in a shell script named <var class="var">scriptname</var>. There are more details in the gettext documentation. </p> <hr> -<span id="Creating-Internationalized-Scripts"></span><div class="header"> +<a class="node-id" id="Creating-Internationalized-Scripts"></a><div class="nav-panel"> <p> - &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> +[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<h4 class="node-heading">Creating Internationalized Scripts</h4> -<span id="index-internationalized-scripts"></span> -<span id="index-string-translations"></span> +<h4 class="node"><span>Creating Internationalized Scripts<a class="copiable-link" href="#Creating-Internationalized-Scripts"> &para;</a></span></h4> +<a class="index-entry-id" id="index-internationalized-scripts"></a> +<a class="index-entry-id" id="index-string-translations"></a> <p>Once you&rsquo;ve marked the strings in your script that you want to translate using $&quot;...&quot;, you create a gettext &quot;template&quot; file using the command </p> <div class="example"> -<pre class="example">bash --dump-po-strings <var>scriptname</var> &gt; <var>domain</var>.pot +<pre class="example-preformatted">bash --dump-po-strings <var class="var">scriptname</var> &gt; <var class="var">domain</var>.pot </pre></div> -<p>The <var>domain</var> is your <em>message domain</em>. +<p>The <var class="var">domain</var> is your <em class="dfn">message domain</em>. It&rsquo;s just an arbitrary string that&rsquo;s used to identify the files gettext needs, like a package or script name. It needs to be unique among all the message domains on systems where you install the translations, so gettext knows which translations correspond to your script. You&rsquo;ll use the template file to create translations for each target language. -The template file conventionally has the suffix &lsquo;<samp>.pot</samp>&rsquo;. +The template file conventionally has the suffix &lsquo;<samp class="samp">.pot</samp>&rsquo;. </p> <p>You copy this template file to a separate file for each target language -you want to support (called &quot;PO&quot; files, which use the suffix &lsquo;<samp>.po</samp>&rsquo;). +you want to support (called &quot;PO&quot; files, which use the suffix &lsquo;<samp class="samp">.po</samp>&rsquo;). PO files use various naming conventions, but when you are working to translate a template file into a particular language, you first copy the template file to a file whose name is the -language you want to target, with the &lsquo;<samp>.po</samp>&rsquo; suffix. +language you want to target, with the &lsquo;<samp class="samp">.po</samp>&rsquo; suffix. For instance, the Spanish translations of your strings would be -in a file named &lsquo;<samp>es.po</samp>&rsquo;, and to get started using a message +in a file named &lsquo;<samp class="samp">es.po</samp>&rsquo;, and to get started using a message domain named &quot;example,&quot; you would run </p> <div class="example"> -<pre class="example">cp example.pot es.po +<pre class="example-preformatted">cp example.pot es.po </pre></div> -<p>Ultimately, PO files are often named <var>domain</var>.po and installed in +<p>Ultimately, PO files are often named <var class="var">domain</var>.po and installed in directories that contain multiple translation files for a particular language. </p> <p>Whichever naming convention you choose, you will need to translate the @@ -886,53 +890,53 @@ gettext tools to produce what are called &quot;MO&quot; files, which are compile versions of the PO files the gettext tools use to look up translations efficiently. MO files are also called &quot;message catalog&quot; files. -You use the <code>msgfmt</code> program to do this. +You use the <code class="command">msgfmt</code> program to do this. For instance, if you had a file with Spanish translations, you could run </p> <div class="example"> -<pre class="example">msgfmt -o es.mo es.po +<pre class="example-preformatted">msgfmt -o es.mo es.po </pre></div> <p>to produce the corresponding MO file. </p> <p>Once you have the MO files, you decide where to install them and use the -<code>TEXTDOMAINDIR</code> shell variable to tell the gettext tools where they are. +<code class="code">TEXTDOMAINDIR</code> shell variable to tell the gettext tools where they are. Make sure to use the same message domain to name the MO files as you did for the PO files when you install them. </p> -<span id="index-LANG"></span> -<span id="index-LC_005fMESSAGES"></span> -<span id="index-TEXTDOMAIN"></span> -<span id="index-TEXTDOMAINDIR"></span> -<p>Your users will use the <code>LANG</code> or <code>LC_MESSAGES</code> shell variables to +<a class="index-entry-id" id="index-LANG"></a> +<a class="index-entry-id" id="index-LC_005fMESSAGES"></a> +<a class="index-entry-id" id="index-TEXTDOMAIN"></a> +<a class="index-entry-id" id="index-TEXTDOMAINDIR"></a> +<p>Your users will use the <code class="env">LANG</code> or <code class="env">LC_MESSAGES</code> shell variables to select the desired language. </p> -<p>You set the <code>TEXTDOMAIN</code> variable to the script&rsquo;s message domain. +<p>You set the <code class="env">TEXTDOMAIN</code> variable to the script&rsquo;s message domain. As above, you use the message domain to name your translation files. </p> -<p>You, or possibly your users, set the <code>TEXTDOMAINDIR</code> variable to the +<p>You, or possibly your users, set the <code class="env">TEXTDOMAINDIR</code> variable to the name of a directory where the message catalog files are stored. If you install the message files into the system&rsquo;s standard message catalog directory, you don&rsquo;t need to worry about this variable. </p> <p>The directory where the message catalog files are stored varies between systems. -Some use the message catalog selected by the <code>LC_MESSAGES</code> +Some use the message catalog selected by the <code class="env">LC_MESSAGES</code> shell variable. Others create the name of the message catalog from the value of the -<code>TEXTDOMAIN</code> shell variable, possibly adding the &lsquo;<samp>.mo</samp>&rsquo; suffix. -If you use the <code>TEXTDOMAIN</code> variable, you may need to set the -<code>TEXTDOMAINDIR</code> variable to the location of the message catalog files, +<code class="env">TEXTDOMAIN</code> shell variable, possibly adding the &lsquo;<samp class="samp">.mo</samp>&rsquo; suffix. +If you use the <code class="env">TEXTDOMAIN</code> variable, you may need to set the +<code class="env">TEXTDOMAINDIR</code> variable to the location of the message catalog files, as above. It&rsquo;s common to use both variables in this fashion: -<code>$TEXTDOMAINDIR</code>/<code>$LC_MESSAGES</code>/LC_MESSAGES/<code>$TEXTDOMAIN</code>.mo. +<code class="env">$TEXTDOMAINDIR</code>/<code class="env">$LC_MESSAGES</code>/LC_MESSAGES/<code class="env">$TEXTDOMAIN</code>.mo. </p> <p>If you used that last convention, and you wanted to store the message catalog files with Spanish (es) and Esperanto (eo) translations into a local directory you use for custom translation files, you could run </p> <div class="example"> -<pre class="example">TEXTDOMAIN=example +<pre class="example-preformatted">TEXTDOMAIN=example TEXTDOMAINDIR=/usr/local/share/locale cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo @@ -942,43 +946,43 @@ cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo <p>When all of this is done, and the message catalog files containing the compiled translations are installed in the correct location, your users will be able to see translated strings -in any of the supported languages by setting the <code>LANG</code> or -<code>LC_MESSAGES</code> environment variables before running your script. +in any of the supported languages by setting the <code class="env">LANG</code> or +<code class="env">LC_MESSAGES</code> environment variables before running your script. </p> <hr> </div> </div> -<div class="subsection" id="Comments"> -<div class="header"> +<div class="subsection-level-extent" id="Comments"> +<div class="nav-panel"> <p> Previous: <a href="#Quoting" accesskey="p" rel="prev">Quoting</a>, Up: <a href="#Shell-Syntax" accesskey="u" rel="up">Shell Syntax</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Comments-1"></span><h4 class="subsection">3.1.3 Comments</h4> -<span id="index-comments_002c-shell"></span> +<h4 class="subsection" id="Comments-1"><span>3.1.3 Comments<a class="copiable-link" href="#Comments-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-comments_002c-shell"></a> <p>In a non-interactive shell, or an interactive shell in which the -<code>interactive_comments</code> option to the <code>shopt</code> -builtin is enabled (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), -a word beginning with &lsquo;<samp>#</samp>&rsquo; +<code class="code">interactive_comments</code> option to the <code class="code">shopt</code> +builtin is enabled (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), +a word beginning with &lsquo;<samp class="samp">#</samp>&rsquo; causes that word and all remaining characters on that line to -be ignored. An interactive shell without the <code>interactive_comments</code> -option enabled does not allow comments. The <code>interactive_comments</code> +be ignored. An interactive shell without the <code class="code">interactive_comments</code> +option enabled does not allow comments. The <code class="code">interactive_comments</code> option is on by default in interactive shells. -See <a href="#Interactive-Shells">Interactive Shells</a>, for a description of what makes +See <a class="xref" href="#Interactive-Shells">Interactive Shells</a>, for a description of what makes a shell interactive. </p> <hr> </div> </div> -<div class="section" id="Shell-Commands"> -<div class="header"> +<div class="section-level-extent" id="Shell-Commands"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Functions" accesskey="n" rel="next">Shell Functions</a>, Previous: <a href="#Shell-Syntax" accesskey="p" rel="prev">Shell Syntax</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Commands-1"></span><h3 class="section">3.2 Shell Commands</h3> -<span id="index-commands_002c-shell"></span> +<h3 class="section" id="Shell-Commands-1"><span>3.2 Shell Commands<a class="copiable-link" href="#Shell-Commands-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-commands_002c-shell"></a> -<p>A simple shell command such as <code>echo a b c</code> consists of the command +<p>A simple shell command such as <code class="code">echo a b c</code> consists of the command itself followed by arguments, separated by spaces. </p> <p>More complex shell commands are composed of simple commands arranged together @@ -987,7 +991,7 @@ becomes the input of a second, in a loop or conditional construct, or in some other grouping. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Reserved-Words" accesskey="1">Reserved Words</a></li> <li><a href="#Simple-Commands" accesskey="2">Simple Commands</a></li> <li><a href="#Pipelines" accesskey="3">Pipelines</a></li> @@ -997,13 +1001,13 @@ some other grouping. <li><a href="#GNU-Parallel" accesskey="7">GNU Parallel</a></li> </ul> <hr> -<div class="subsection" id="Reserved-Words"> -<div class="header"> +<div class="subsection-level-extent" id="Reserved-Words"> +<div class="nav-panel"> <p> Next: <a href="#Simple-Commands" accesskey="n" rel="next">Simple Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Reserved-Words-1"></span><h4 class="subsection">3.2.1 Reserved Words</h4> -<span id="index-reserved-words"></span> +<h4 class="subsection" id="Reserved-Words-1"><span>3.2.1 Reserved Words<a class="copiable-link" href="#Reserved-Words-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-reserved-words"></a> <p>Reserved words are words that have special meaning to the shell. They are used to begin and end the shell&rsquo;s compound commands. @@ -1011,116 +1015,116 @@ They are used to begin and end the shell&rsquo;s compound commands. <p>The following words are recognized as reserved when unquoted and the first word of a command (see below for exceptions): </p> -<table> -<tr><td width="10%"><code>if</code></td><td width="10%"><code>then</code></td><td width="10%"><code>elif</code></td><td width="10%"><code>else</code></td><td width="12%"><code>fi</code></td><td width="10%"><code>time</code></td></tr> -<tr><td width="10%"><code>for</code></td><td width="10%"><code>in</code></td><td width="10%"><code>until</code></td><td width="10%"><code>while</code></td><td width="12%"><code>do</code></td><td width="10%"><code>done</code></td></tr> -<tr><td width="10%"><code>case</code></td><td width="10%"><code>esac</code></td><td width="10%"><code>coproc</code></td><td width="10%"><code>select</code></td><td width="12%"><code>function</code></td></tr> -<tr><td width="10%"><code>{</code></td><td width="10%"><code>}</code></td><td width="10%"><code>[[</code></td><td width="10%"><code>]]</code></td><td width="12%"><code>!</code></td></tr> +<table class="multitable"> +<tbody><tr><td width="10%"><code class="code">if</code></td><td width="10%"><code class="code">then</code></td><td width="10%"><code class="code">elif</code></td><td width="10%"><code class="code">else</code></td><td width="12%"><code class="code">fi</code></td><td width="10%"><code class="code">time</code></td></tr> +<tr><td width="10%"><code class="code">for</code></td><td width="10%"><code class="code">in</code></td><td width="10%"><code class="code">until</code></td><td width="10%"><code class="code">while</code></td><td width="12%"><code class="code">do</code></td><td width="10%"><code class="code">done</code></td></tr> +<tr><td width="10%"><code class="code">case</code></td><td width="10%"><code class="code">esac</code></td><td width="10%"><code class="code">coproc</code></td><td width="10%"><code class="code">select</code></td><td width="12%"><code class="code">function</code></td></tr> +<tr><td width="10%"><code class="code">{</code></td><td width="10%"><code class="code">}</code></td><td width="10%"><code class="code">[[</code></td><td width="10%"><code class="code">]]</code></td><td width="12%"><code class="code">!</code></td></tr> +</tbody> </table> -<p><code>in</code> is recognized as a reserved word if it is the third word of a -<code>case</code> or <code>select</code> command. -<code>in</code> and <code>do</code> are recognized as reserved -words if they are the third word in a <code>for</code> command. +<p><code class="code">in</code> is recognized as a reserved word if it is the third word of a +<code class="code">case</code> or <code class="code">select</code> command. +<code class="code">in</code> and <code class="code">do</code> are recognized as reserved +words if they are the third word in a <code class="code">for</code> command. </p> <hr> </div> -<div class="subsection" id="Simple-Commands"> -<div class="header"> +<div class="subsection-level-extent" id="Simple-Commands"> +<div class="nav-panel"> <p> Next: <a href="#Pipelines" accesskey="n" rel="next">Pipelines</a>, Previous: <a href="#Reserved-Words" accesskey="p" rel="prev">Reserved Words</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Simple-Commands-1"></span><h4 class="subsection">3.2.2 Simple Commands</h4> -<span id="index-commands_002c-simple"></span> +<h4 class="subsection" id="Simple-Commands-1"><span>3.2.2 Simple Commands<a class="copiable-link" href="#Simple-Commands-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-commands_002c-simple"></a> <p>A simple command is the kind of command encountered most often. -It&rsquo;s just a sequence of words separated by <code>blank</code>s, terminated -by one of the shell&rsquo;s control operators (see <a href="#Definitions">Definitions</a>). The +It&rsquo;s just a sequence of words separated by <code class="code">blank</code>s, terminated +by one of the shell&rsquo;s control operators (see <a class="pxref" href="#Definitions">Definitions</a>). The first word generally specifies a command to be executed, with the rest of the words being that command&rsquo;s arguments. </p> -<p>The return status (see <a href="#Exit-Status">Exit Status</a>) of a simple command is +<p>The return status (see <a class="pxref" href="#Exit-Status">Exit Status</a>) of a simple command is its exit status as provided -by the <small>POSIX</small> 1003.1 <code>waitpid</code> function, or 128+<var>n</var> if -the command was terminated by signal <var>n</var>. +by the <small class="sc">POSIX</small> 1003.1 <code class="code">waitpid</code> function, or 128+<var class="var">n</var> if +the command was terminated by signal <var class="var">n</var>. </p> <hr> </div> -<div class="subsection" id="Pipelines"> -<div class="header"> +<div class="subsection-level-extent" id="Pipelines"> +<div class="nav-panel"> <p> Next: <a href="#Lists" accesskey="n" rel="next">Lists of Commands</a>, Previous: <a href="#Simple-Commands" accesskey="p" rel="prev">Simple Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Pipelines-1"></span><h4 class="subsection">3.2.3 Pipelines</h4> -<span id="index-pipeline"></span> -<span id="index-commands_002c-pipelines"></span> +<h4 class="subsection" id="Pipelines-1"><span>3.2.3 Pipelines<a class="copiable-link" href="#Pipelines-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-pipeline"></a> +<a class="index-entry-id" id="index-commands_002c-pipelines"></a> -<p>A <code>pipeline</code> is a sequence of one or more commands separated by -one of the control operators &lsquo;<samp>|</samp>&rsquo; or &lsquo;<samp>|&amp;</samp>&rsquo;. +<p>A <code class="code">pipeline</code> is a sequence of one or more commands separated by +one of the control operators &lsquo;<samp class="samp">|</samp>&rsquo; or &lsquo;<samp class="samp">|&amp;</samp>&rsquo;. </p> -<span id="index-time"></span> -<span id="index-_0021"></span> -<span id="index-command-timing"></span> +<a class="index-entry-id" id="index-time"></a> +<a class="index-entry-id" id="index-_0021"></a> +<a class="index-entry-id" id="index-command-timing"></a> <p>The format for a pipeline is </p><div class="example"> -<pre class="example">[time [-p]] [!] <var>command1</var> [ | or |&amp; <var>command2</var> ] &hellip; +<pre class="example-preformatted">[time [-p]] [!] <var class="var">command1</var> [ | or |&amp; <var class="var">command2</var> ] ... </pre></div> <p>The output of each command in the pipeline is connected via a pipe to the input of the next command. That is, each command reads the previous command&rsquo;s output. This connection is performed before any redirections specified by -<var>command1</var>. +<var class="var">command1</var>. </p> -<p>If &lsquo;<samp>|&amp;</samp>&rsquo; is used, <var>command1</var>&rsquo;s standard error, in addition to +<p>If &lsquo;<samp class="samp">|&amp;</samp>&rsquo; is used, <var class="var">command1</var>&rsquo;s standard error, in addition to its standard output, is connected to -<var>command2</var>&rsquo;s standard input through the pipe; -it is shorthand for <code>2&gt;&amp;1 |</code>. +<var class="var">command2</var>&rsquo;s standard input through the pipe; +it is shorthand for <code class="code">2&gt;&amp;1 |</code>. This implicit redirection of the standard error to the standard output is -performed after any redirections specified by <var>command1</var>. +performed after any redirections specified by <var class="var">command1</var>. </p> -<p>The reserved word <code>time</code> causes timing statistics +<p>The reserved word <code class="code">time</code> causes timing statistics to be printed for the pipeline once it finishes. The statistics currently consist of elapsed (wall-clock) time and user and system time consumed by the command&rsquo;s execution. -The <samp>-p</samp> option changes the output format to that specified -by <small>POSIX</small>. -When the shell is in <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>), -it does not recognize <code>time</code> as a reserved word if the next -token begins with a &lsquo;<samp>-</samp>&rsquo;. -The <code>TIMEFORMAT</code> variable may be set to a format string that +The <samp class="option">-p</samp> option changes the output format to that specified +by <small class="sc">POSIX</small>. +When the shell is in <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>), +it does not recognize <code class="code">time</code> as a reserved word if the next +token begins with a &lsquo;<samp class="samp">-</samp>&rsquo;. +The <code class="env">TIMEFORMAT</code> variable may be set to a format string that specifies how the timing information should be displayed. -See <a href="#Bash-Variables">Bash Variables</a>, for a description of the available formats. -The use of <code>time</code> as a reserved word permits the timing of +See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for a description of the available formats. +The use of <code class="code">time</code> as a reserved word permits the timing of shell builtins, shell functions, and pipelines. An external -<code>time</code> command cannot time these easily. +<code class="code">time</code> command cannot time these easily. </p> -<p>When the shell is in <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>), <code>time</code> +<p>When the shell is in <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>), <code class="code">time</code> may be followed by a newline. In this case, the shell displays the total user and system time consumed by the shell and its children. -The <code>TIMEFORMAT</code> variable may be used to specify the format of -the time information. +The <code class="env">TIMEFORMAT</code> variable specifies the format of the time information. </p> -<p>If the pipeline is not executed asynchronously (see <a href="#Lists">Lists of Commands</a>), the +<p>If the pipeline is not executed asynchronously (see <a class="pxref" href="#Lists">Lists of Commands</a>), the shell waits for all commands in the pipeline to complete. </p> <p>Each command in a multi-command pipeline, where pipes are created, -is executed in its own <em>subshell</em>, which is a -separate process (see <a href="#Command-Execution-Environment">Command Execution Environment</a>). -If the <code>lastpipe</code> option is enabled using the <code>shopt</code> builtin -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), +is executed in its own <em class="dfn">subshell</em>, which is a +separate process (see <a class="pxref" href="#Command-Execution-Environment">Command Execution Environment</a>). +If the <code class="code">lastpipe</code> option is enabled using the <code class="code">shopt</code> builtin +(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), the last element of a pipeline may be run by the shell process when job control is not active. </p> <p>The exit status of a pipeline is the exit status of the last command in the -pipeline, unless the <code>pipefail</code> option is enabled -(see <a href="#The-Set-Builtin">The Set Builtin</a>). -If <code>pipefail</code> is enabled, the pipeline&rsquo;s return status is the +pipeline, unless the <code class="code">pipefail</code> option is enabled +(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). +If <code class="code">pipefail</code> is enabled, the pipeline&rsquo;s return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully. -If the reserved word &lsquo;<samp>!</samp>&rsquo; precedes the pipeline, the +If the reserved word &lsquo;<samp class="samp">!</samp>&rsquo; precedes the pipeline, the exit status is the logical negation of the exit status as described above. The shell waits for all commands in the pipeline to terminate before @@ -1128,80 +1132,80 @@ returning a value. </p> <hr> </div> -<div class="subsection" id="Lists"> -<div class="header"> +<div class="subsection-level-extent" id="Lists"> +<div class="nav-panel"> <p> Next: <a href="#Compound-Commands" accesskey="n" rel="next">Compound Commands</a>, Previous: <a href="#Pipelines" accesskey="p" rel="prev">Pipelines</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Lists-of-Commands"></span><h4 class="subsection">3.2.4 Lists of Commands</h4> -<span id="index-commands_002c-lists"></span> +<h4 class="subsection" id="Lists-of-Commands"><span>3.2.4 Lists of Commands<a class="copiable-link" href="#Lists-of-Commands"> &para;</a></span></h4> +<a class="index-entry-id" id="index-commands_002c-lists"></a> -<p>A <code>list</code> is a sequence of one or more pipelines separated by one -of the operators &lsquo;<samp>;</samp>&rsquo;, &lsquo;<samp>&amp;</samp>&rsquo;, &lsquo;<samp>&amp;&amp;</samp>&rsquo;, or &lsquo;<samp>||</samp>&rsquo;, -and optionally terminated by one of &lsquo;<samp>;</samp>&rsquo;, &lsquo;<samp>&amp;</samp>&rsquo;, or a -<code>newline</code>. +<p>A <code class="code">list</code> is a sequence of one or more pipelines separated by one +of the operators &lsquo;<samp class="samp">;</samp>&rsquo;, &lsquo;<samp class="samp">&amp;</samp>&rsquo;, &lsquo;<samp class="samp">&amp;&amp;</samp>&rsquo;, or &lsquo;<samp class="samp">||</samp>&rsquo;, +and optionally terminated by one of &lsquo;<samp class="samp">;</samp>&rsquo;, &lsquo;<samp class="samp">&amp;</samp>&rsquo;, or a +<code class="code">newline</code>. </p> -<p>Of these list operators, &lsquo;<samp>&amp;&amp;</samp>&rsquo; and &lsquo;<samp>||</samp>&rsquo; -have equal precedence, followed by &lsquo;<samp>;</samp>&rsquo; and &lsquo;<samp>&amp;</samp>&rsquo;, +<p>Of these list operators, &lsquo;<samp class="samp">&amp;&amp;</samp>&rsquo; and &lsquo;<samp class="samp">||</samp>&rsquo; +have equal precedence, followed by &lsquo;<samp class="samp">;</samp>&rsquo; and &lsquo;<samp class="samp">&amp;</samp>&rsquo;, which have equal precedence. </p> -<p>A sequence of one or more newlines may appear in a <code>list</code> +<p>A sequence of one or more newlines may appear in a <code class="code">list</code> to delimit commands, equivalent to a semicolon. </p> -<p>If a command is terminated by the control operator &lsquo;<samp>&amp;</samp>&rsquo;, +<p>If a command is terminated by the control operator &lsquo;<samp class="samp">&amp;</samp>&rsquo;, the shell executes the command asynchronously in a subshell. -This is known as executing the command in the <em>background</em>, -and these are referred to as <em>asynchronous</em> commands. +This is known as executing the command in the <em class="dfn">background</em>, +and these are referred to as <em class="dfn">asynchronous</em> commands. The shell does not wait for the command to finish, and the return status is 0 (true). -When job control is not active (see <a href="#Job-Control">Job Control</a>), +When job control is not active (see <a class="pxref" href="#Job-Control">Job Control</a>), the standard input for asynchronous commands, in the absence of any -explicit redirections, is redirected from <code>/dev/null</code>. +explicit redirections, is redirected from <code class="code">/dev/null</code>. </p> -<p>Commands separated by a &lsquo;<samp>;</samp>&rsquo; are executed sequentially; the shell +<p>Commands separated by a &lsquo;<samp class="samp">;</samp>&rsquo; are executed sequentially; the shell waits for each command to terminate in turn. The return status is the exit status of the last command executed. </p> -<p><small>AND</small> and <small>OR</small> lists are sequences of one or more pipelines -separated by the control operators &lsquo;<samp>&amp;&amp;</samp>&rsquo; and &lsquo;<samp>||</samp>&rsquo;, -respectively. <small>AND</small> and <small>OR</small> lists are executed with left +<p><small class="sc">AND</small> and <small class="sc">OR</small> lists are sequences of one or more pipelines +separated by the control operators &lsquo;<samp class="samp">&amp;&amp;</samp>&rsquo; and &lsquo;<samp class="samp">||</samp>&rsquo;, +respectively. <small class="sc">AND</small> and <small class="sc">OR</small> lists are executed with left associativity. </p> -<p>An <small>AND</small> list has the form +<p>An <small class="sc">AND</small> list has the form </p><div class="example"> -<pre class="example"><var>command1</var> &amp;&amp; <var>command2</var> +<pre class="example-preformatted"><var class="var">command1</var> &amp;&amp; <var class="var">command2</var> </pre></div> -<p><var>command2</var> is executed if, and only if, <var>command1</var> +<p><var class="var">command2</var> is executed if, and only if, <var class="var">command1</var> returns an exit status of zero (success). </p> -<p>An <small>OR</small> list has the form +<p>An <small class="sc">OR</small> list has the form </p><div class="example"> -<pre class="example"><var>command1</var> || <var>command2</var> +<pre class="example-preformatted"><var class="var">command1</var> || <var class="var">command2</var> </pre></div> -<p><var>command2</var> is executed if, and only if, <var>command1</var> +<p><var class="var">command2</var> is executed if, and only if, <var class="var">command1</var> returns a non-zero exit status. </p> <p>The return status of -<small>AND</small> and <small>OR</small> lists is the exit status of the last command +<small class="sc">AND</small> and <small class="sc">OR</small> lists is the exit status of the last command executed in the list. </p> <hr> </div> -<div class="subsection" id="Compound-Commands"> -<div class="header"> +<div class="subsection-level-extent" id="Compound-Commands"> +<div class="nav-panel"> <p> Next: <a href="#Coprocesses" accesskey="n" rel="next">Coprocesses</a>, Previous: <a href="#Lists" accesskey="p" rel="prev">Lists of Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Compound-Commands-1"></span><h4 class="subsection">3.2.5 Compound Commands</h4> -<span id="index-commands_002c-compound"></span> +<h4 class="subsection" id="Compound-Commands-1"><span>3.2.5 Compound Commands<a class="copiable-link" href="#Compound-Commands-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-commands_002c-compound"></a> <p>Compound commands are the shell programming language constructs. Each construct begins with a reserved word or control operator and is terminated by a corresponding reserved word or operator. -Any redirections (see <a href="#Redirections">Redirections</a>) associated with a compound command +Any redirections (see <a class="pxref" href="#Redirections">Redirections</a>) associated with a compound command apply to all commands within that compound command unless explicitly overridden. </p> <p>In most cases a list of commands in a compound command&rsquo;s description may be @@ -1211,179 +1215,179 @@ followed by a newline in place of a semicolon. <p>Bash provides looping constructs, conditional commands, and mechanisms to group commands and execute them as a unit. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Looping-Constructs" accesskey="1">Looping Constructs</a></li> <li><a href="#Conditional-Constructs" accesskey="2">Conditional Constructs</a></li> <li><a href="#Command-Grouping" accesskey="3">Grouping Commands</a></li> </ul> <hr> -<div class="subsubsection" id="Looping-Constructs"> -<div class="header"> +<div class="subsubsection-level-extent" id="Looping-Constructs"> +<div class="nav-panel"> <p> Next: <a href="#Conditional-Constructs" accesskey="n" rel="next">Conditional Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Looping-Constructs-1"></span><h4 class="subsubsection">3.2.5.1 Looping Constructs</h4> -<span id="index-commands_002c-looping"></span> +<h4 class="subsubsection" id="Looping-Constructs-1"><span>3.2.5.1 Looping Constructs<a class="copiable-link" href="#Looping-Constructs-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-commands_002c-looping"></a> <p>Bash supports the following looping constructs. </p> -<p>Note that wherever a &lsquo;<samp>;</samp>&rsquo; appears in the description of a +<p>Note that wherever a &lsquo;<samp class="samp">;</samp>&rsquo; appears in the description of a command&rsquo;s syntax, it may be replaced with one or more newlines. </p> -<dl compact="compact"> -<dt id='index-until'><span><code>until</code><a href='#index-until' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-do"></span> -<span id="index-done"></span> -<p>The syntax of the <code>until</code> command is: +<dl class="table"> +<dt><a class="index-entry-id" id="index-do"></a> +<a class="index-entry-id" id="index-done"></a> +<a id="index-until"></a><span><code class="code">until</code><a class="copiable-link" href="#index-until"> &para;</a></span></dt> +<dd><p>The syntax of the <code class="code">until</code> command is: </p> <div class="example"> -<pre class="example">until <var>test-commands</var>; do <var>consequent-commands</var>; done +<pre class="example-preformatted">until <var class="var">test-commands</var>; do <var class="var">consequent-commands</var>; done </pre></div> -<p>Execute <var>consequent-commands</var> as long as -<var>test-commands</var> has an exit status which is not zero. +<p>Execute <var class="var">consequent-commands</var> as long as +<var class="var">test-commands</var> has an exit status which is not zero. The return status is the exit status of the last command executed -in <var>consequent-commands</var>, or zero if none was executed. +in <var class="var">consequent-commands</var>, or zero if none was executed. </p> </dd> -<dt id='index-while'><span><code>while</code><a href='#index-while' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The syntax of the <code>while</code> command is: +<dt><a id="index-while"></a><span><code class="code">while</code><a class="copiable-link" href="#index-while"> &para;</a></span></dt> +<dd><p>The syntax of the <code class="code">while</code> command is: </p> <div class="example"> -<pre class="example">while <var>test-commands</var>; do <var>consequent-commands</var>; done +<pre class="example-preformatted">while <var class="var">test-commands</var>; do <var class="var">consequent-commands</var>; done </pre></div> -<p>Execute <var>consequent-commands</var> as long as -<var>test-commands</var> has an exit status of zero. +<p>Execute <var class="var">consequent-commands</var> as long as +<var class="var">test-commands</var> has an exit status of zero. The return status is the exit status of the last command executed -in <var>consequent-commands</var>, or zero if none was executed. +in <var class="var">consequent-commands</var>, or zero if none was executed. </p> </dd> -<dt id='index-for'><span><code>for</code><a href='#index-for' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The syntax of the <code>for</code> command is: +<dt><a id="index-for"></a><span><code class="code">for</code><a class="copiable-link" href="#index-for"> &para;</a></span></dt> +<dd><p>The syntax of the <code class="code">for</code> command is: </p> <div class="example"> -<pre class="example">for <var>name</var> [ [in [<var>words</var> &hellip;] ] ; ] do <var>commands</var>; done +<pre class="example-preformatted">for <var class="var">name</var> [ [in [<var class="var">words</var> ...] ] ; ] do <var class="var">commands</var>; done </pre></div> -<p>Expand <var>words</var> (see <a href="#Shell-Expansions">Shell Expansions</a>), and execute <var>commands</var> +<p>Expand <var class="var">words</var> (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>), and execute <var class="var">commands</var> once for each member -in the resultant list, with <var>name</var> bound to the current member. -If &lsquo;<samp>in <var>words</var></samp>&rsquo; is not present, the <code>for</code> command -executes the <var>commands</var> once for each positional parameter that is -set, as if &lsquo;<samp>in &quot;$@&quot;</samp>&rsquo; had been specified -(see <a href="#Special-Parameters">Special Parameters</a>). +in the resultant list, with <var class="var">name</var> bound to the current member. +If &lsquo;<samp class="samp">in <var class="var">words</var></samp>&rsquo; is not present, the <code class="code">for</code> command +executes the <var class="var">commands</var> once for each positional parameter that is +set, as if &lsquo;<samp class="samp">in &quot;$@&quot;</samp>&rsquo; had been specified +(see <a class="pxref" href="#Special-Parameters">Special Parameters</a>). </p> <p>The return status is the exit status of the last command that executes. -If there are no items in the expansion of <var>words</var>, no commands are +If there are no items in the expansion of <var class="var">words</var>, no commands are executed, and the return status is zero. </p> -<p>An alternate form of the <code>for</code> command is also supported: +<p>An alternate form of the <code class="code">for</code> command is also supported: </p> <div class="example"> -<pre class="example">for (( <var>expr1</var> ; <var>expr2</var> ; <var>expr3</var> )) ; do <var>commands</var> ; done +<pre class="example-preformatted">for (( <var class="var">expr1</var> ; <var class="var">expr2</var> ; <var class="var">expr3</var> )) ; do <var class="var">commands</var> ; done </pre></div> -<p>First, the arithmetic expression <var>expr1</var> is evaluated according -to the rules described below (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>). -The arithmetic expression <var>expr2</var> is then evaluated repeatedly +<p>First, the arithmetic expression <var class="var">expr1</var> is evaluated according +to the rules described below (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>). +The arithmetic expression <var class="var">expr2</var> is then evaluated repeatedly until it evaluates to zero. -Each time <var>expr2</var> evaluates to a non-zero value, <var>commands</var> are -executed and the arithmetic expression <var>expr3</var> is evaluated. +Each time <var class="var">expr2</var> evaluates to a non-zero value, <var class="var">commands</var> are +executed and the arithmetic expression <var class="var">expr3</var> is evaluated. If any expression is omitted, it behaves as if it evaluates to 1. -The return value is the exit status of the last command in <var>commands</var> +The return value is the exit status of the last command in <var class="var">commands</var> that is executed, or false if any of the expressions is invalid. </p></dd> </dl> -<p>The <code>break</code> and <code>continue</code> builtins (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) +<p>The <code class="code">break</code> and <code class="code">continue</code> builtins (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) may be used to control loop execution. </p> <hr> </div> -<div class="subsubsection" id="Conditional-Constructs"> -<div class="header"> +<div class="subsubsection-level-extent" id="Conditional-Constructs"> +<div class="nav-panel"> <p> Next: <a href="#Command-Grouping" accesskey="n" rel="next">Grouping Commands</a>, Previous: <a href="#Looping-Constructs" accesskey="p" rel="prev">Looping Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Conditional-Constructs-1"></span><h4 class="subsubsection">3.2.5.2 Conditional Constructs</h4> -<span id="index-commands_002c-conditional"></span> +<h4 class="subsubsection" id="Conditional-Constructs-1"><span>3.2.5.2 Conditional Constructs<a class="copiable-link" href="#Conditional-Constructs-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-commands_002c-conditional"></a> -<dl compact="compact"> -<dt id='index-if'><span><code>if</code><a href='#index-if' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-then"></span> -<span id="index-else"></span> -<span id="index-elif"></span> -<span id="index-fi"></span> -<p>The syntax of the <code>if</code> command is: +<dl class="table"> +<dt><a class="index-entry-id" id="index-then"></a> +<a class="index-entry-id" id="index-else"></a> +<a class="index-entry-id" id="index-elif"></a> +<a class="index-entry-id" id="index-fi"></a> +<a id="index-if"></a><span><code class="code">if</code><a class="copiable-link" href="#index-if"> &para;</a></span></dt> +<dd><p>The syntax of the <code class="code">if</code> command is: </p> <div class="example"> -<pre class="example">if <var>test-commands</var>; then - <var>consequent-commands</var>; -[elif <var>more-test-commands</var>; then - <var>more-consequents</var>;] -[else <var>alternate-consequents</var>;] +<pre class="example-preformatted">if <var class="var">test-commands</var>; then + <var class="var">consequent-commands</var>; +[elif <var class="var">more-test-commands</var>; then + <var class="var">more-consequents</var>;] +[else <var class="var">alternate-consequents</var>;] fi </pre></div> -<p>The <var>test-commands</var> list is executed, and if its return status is zero, -the <var>consequent-commands</var> list is executed. -If <var>test-commands</var> returns a non-zero status, each <code>elif</code> list +<p>The <var class="var">test-commands</var> list is executed, and if its return status is zero, +the <var class="var">consequent-commands</var> list is executed. +If <var class="var">test-commands</var> returns a non-zero status, each <code class="code">elif</code> list is executed in turn, and if its exit status is zero, -the corresponding <var>more-consequents</var> is executed and the +the corresponding <var class="var">more-consequents</var> is executed and the command completes. -If &lsquo;<samp>else <var>alternate-consequents</var></samp>&rsquo; is present, and -the final command in the final <code>if</code> or <code>elif</code> clause -has a non-zero exit status, then <var>alternate-consequents</var> is executed. +If &lsquo;<samp class="samp">else <var class="var">alternate-consequents</var></samp>&rsquo; is present, and +the final command in the final <code class="code">if</code> or <code class="code">elif</code> clause +has a non-zero exit status, then <var class="var">alternate-consequents</var> is executed. The return status is the exit status of the last command executed, or zero if no condition tested true. </p> </dd> -<dt id='index-case'><span><code>case</code><a href='#index-case' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-in"></span> -<span id="index-esac"></span> -<p>The syntax of the <code>case</code> command is: +<dt><a class="index-entry-id" id="index-in"></a> +<a class="index-entry-id" id="index-esac"></a> +<a id="index-case"></a><span><code class="code">case</code><a class="copiable-link" href="#index-case"> &para;</a></span></dt> +<dd><p>The syntax of the <code class="code">case</code> command is: </p> <div class="example"> -<pre class="example">case <var>word</var> in - [ [(] <var>pattern</var> [| <var>pattern</var>]&hellip;) <var>command-list</var> ;;]&hellip; +<pre class="example-preformatted">case <var class="var">word</var> in + [ [(] <var class="var">pattern</var> [| <var class="var">pattern</var>]...) <var class="var">command-list</var> ;;]... esac </pre></div> -<p><code>case</code> will selectively execute the <var>command-list</var> corresponding to -the first <var>pattern</var> that matches <var>word</var>. +<p><code class="code">case</code> will selectively execute the <var class="var">command-list</var> corresponding to +the first <var class="var">pattern</var> that matches <var class="var">word</var>. The match is performed according -to the rules described below in <a href="#Pattern-Matching">Pattern Matching</a>. -If the <code>nocasematch</code> shell option -(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) +to the rules described below in <a class="ref" href="#Pattern-Matching">Pattern Matching</a>. +If the <code class="code">nocasematch</code> shell option +(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) is enabled, the match is performed without regard to the case of alphabetic characters. -The &lsquo;<samp>|</samp>&rsquo; is used to separate multiple patterns, and the &lsquo;<samp>)</samp>&rsquo; +The &lsquo;<samp class="samp">|</samp>&rsquo; is used to separate multiple patterns, and the &lsquo;<samp class="samp">)</samp>&rsquo; operator terminates a pattern list. A list of patterns and an associated command-list is known -as a <var>clause</var>. +as a <var class="var">clause</var>. </p> -<p>Each clause must be terminated with &lsquo;<samp>;;</samp>&rsquo;, &lsquo;<samp>;&amp;</samp>&rsquo;, or &lsquo;<samp>;;&amp;</samp>&rsquo;. -The <var>word</var> undergoes tilde expansion, parameter expansion, command +<p>Each clause must be terminated with &lsquo;<samp class="samp">;;</samp>&rsquo;, &lsquo;<samp class="samp">;&amp;</samp>&rsquo;, or &lsquo;<samp class="samp">;;&amp;</samp>&rsquo;. +The <var class="var">word</var> undergoes tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal -(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>) +(see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>) before matching is attempted. -Each <var>pattern</var> undergoes tilde expansion, parameter expansion, +Each <var class="var">pattern</var> undergoes tilde expansion, parameter expansion, command substitution, arithmetic expansion, process substitution, and quote removal. </p> -<p>There may be an arbitrary number of <code>case</code> clauses, each terminated -by a &lsquo;<samp>;;</samp>&rsquo;, &lsquo;<samp>;&amp;</samp>&rsquo;, or &lsquo;<samp>;;&amp;</samp>&rsquo;. +<p>There may be an arbitrary number of <code class="code">case</code> clauses, each terminated +by a &lsquo;<samp class="samp">;;</samp>&rsquo;, &lsquo;<samp class="samp">;&amp;</samp>&rsquo;, or &lsquo;<samp class="samp">;;&amp;</samp>&rsquo;. The first pattern that matches determines the command-list that is executed. -It&rsquo;s a common idiom to use &lsquo;<samp>*</samp>&rsquo; as the final pattern to define the +It&rsquo;s a common idiom to use &lsquo;<samp class="samp">*</samp>&rsquo; as the final pattern to define the default case, since that pattern will always match. </p> -<p>Here is an example using <code>case</code> in a script that could be used to +<p>Here is an example using <code class="code">case</code> in a script that could be used to describe one interesting feature of an animal: </p> <div class="example"> -<pre class="example">echo -n &quot;Enter the name of an animal: &quot; +<pre class="example-preformatted">echo -n &quot;Enter the name of an animal: &quot; read ANIMAL echo -n &quot;The $ANIMAL has &quot; case $ANIMAL in @@ -1395,52 +1399,52 @@ echo &quot; legs.&quot; </pre></div> -<p>If the &lsquo;<samp>;;</samp>&rsquo; operator is used, no subsequent matches are attempted after +<p>If the &lsquo;<samp class="samp">;;</samp>&rsquo; operator is used, no subsequent matches are attempted after the first pattern match. -Using &lsquo;<samp>;&amp;</samp>&rsquo; in place of &lsquo;<samp>;;</samp>&rsquo; causes execution to continue with -the <var>command-list</var> associated with the next clause, if any. -Using &lsquo;<samp>;;&amp;</samp>&rsquo; in place of &lsquo;<samp>;;</samp>&rsquo; causes the shell to test the patterns -in the next clause, if any, and execute any associated <var>command-list</var> +Using &lsquo;<samp class="samp">;&amp;</samp>&rsquo; in place of &lsquo;<samp class="samp">;;</samp>&rsquo; causes execution to continue with +the <var class="var">command-list</var> associated with the next clause, if any. +Using &lsquo;<samp class="samp">;;&amp;</samp>&rsquo; in place of &lsquo;<samp class="samp">;;</samp>&rsquo; causes the shell to test the patterns +in the next clause, if any, and execute any associated <var class="var">command-list</var> on a successful match, continuing the case statement execution as if the pattern list had not matched. </p> -<p>The return status is zero if no <var>pattern</var> is matched. Otherwise, the -return status is the exit status of the <var>command-list</var> executed. +<p>The return status is zero if no <var class="var">pattern</var> is matched. Otherwise, the +return status is the exit status of the <var class="var">command-list</var> executed. </p> </dd> -<dt id='index-select'><span><code>select</code><a href='#index-select' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-select"></a><span><code class="code">select</code><a class="copiable-link" href="#index-select"> &para;</a></span></dt> <dd> -<p>The <code>select</code> construct allows the easy generation of menus. -It has almost the same syntax as the <code>for</code> command: +<p>The <code class="code">select</code> construct allows the easy generation of menus. +It has almost the same syntax as the <code class="code">for</code> command: </p> <div class="example"> -<pre class="example">select <var>name</var> [in <var>words</var> &hellip;]; do <var>commands</var>; done +<pre class="example-preformatted">select <var class="var">name</var> [in <var class="var">words</var> ...]; do <var class="var">commands</var>; done </pre></div> -<p>The list of words following <code>in</code> is expanded, generating a list +<p>The list of words following <code class="code">in</code> is expanded, generating a list of items, and the set of expanded words is printed on the standard error output stream, each preceded by a number. If the -&lsquo;<samp>in <var>words</var></samp>&rsquo; is omitted, the positional parameters are printed, -as if &lsquo;<samp>in &quot;$@&quot;</samp>&rsquo; had been specified. -<code>select</code> then displays the <code>PS3</code> +&lsquo;<samp class="samp">in <var class="var">words</var></samp>&rsquo; is omitted, the positional parameters are printed, +as if &lsquo;<samp class="samp">in &quot;$@&quot;</samp>&rsquo; had been specified. +<code class="code">select</code> then displays the <code class="env">PS3</code> prompt and reads a line from the standard input. If the line consists of a number corresponding to one of the displayed -words, then the value of <var>name</var> is set to that word. +words, then the value of <var class="var">name</var> is set to that word. If the line is empty, the words and prompt are displayed again. -If <code>EOF</code> is read, the <code>select</code> command completes and returns 1. -Any other value read causes <var>name</var> to be set to null. -The line read is saved in the variable <code>REPLY</code>. +If <code class="code">EOF</code> is read, the <code class="code">select</code> command completes and returns 1. +Any other value read causes <var class="var">name</var> to be set to null. +The line read is saved in the variable <code class="env">REPLY</code>. </p> -<p>The <var>commands</var> are executed after each selection until a -<code>break</code> command is executed, at which -point the <code>select</code> command completes. +<p>The <var class="var">commands</var> are executed after each selection until a +<code class="code">break</code> command is executed, at which +point the <code class="code">select</code> command completes. </p> <p>Here is an example that allows the user to pick a filename from the current directory, and displays the name and index of the file selected. </p> <div class="example"> -<pre class="example">select fname in *; +<pre class="example-preformatted">select fname in *; do echo you picked $fname \($REPLY\) break; @@ -1448,55 +1452,55 @@ done </pre></div> </dd> -<dt><span><code>((&hellip;))</code></span></dt> +<dt><code class="code">((&hellip;))</code></dt> <dd><div class="example"> -<pre class="example">(( <var>expression</var> )) +<pre class="example-preformatted">(( <var class="var">expression</var> )) </pre></div> -<p>The arithmetic <var>expression</var> is evaluated according to the rules -described below (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>). -The <var>expression</var> undergoes the same expansions +<p>The arithmetic <var class="var">expression</var> is evaluated according to the rules +described below (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>). +The <var class="var">expression</var> undergoes the same expansions as if it were within double quotes, -but double quote characters in <var>expression</var> are not treated specially +but double quote characters in <var class="var">expression</var> are not treated specially are removed. If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. </p> </dd> -<dt id='index-_005b_005b'><span><code>[[&hellip;]]</code><a href='#index-_005b_005b' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_005d_005d"></span> -<div class="example"> -<pre class="example">[[ <var>expression</var> ]] +<dt><a class="index-entry-id" id="index-_005d_005d"></a> +<a id="index-_005b_005b"></a><span><code class="code">[[&hellip;]]</code><a class="copiable-link" href="#index-_005b_005b"> &para;</a></span></dt> +<dd><div class="example"> +<pre class="example-preformatted">[[ <var class="var">expression</var> ]] </pre></div> <p>Return a status of 0 or 1 depending on the evaluation of -the conditional expression <var>expression</var>. +the conditional expression <var class="var">expression</var>. Expressions are composed of the primaries described below in -<a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>. -The words between the <code>[[</code> and <code>]]</code> do not undergo word splitting +<a class="ref" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>. +The words between the <code class="code">[[</code> and <code class="code">]]</code> do not undergo word splitting and filename expansion. The shell performs tilde expansion, parameter and variable expansion, arithmetic expansion, command substitution, process substitution, and quote removal on those words (the expansions that would occur if the words were enclosed in double quotes). -Conditional operators such as &lsquo;<samp>-f</samp>&rsquo; must be unquoted to be recognized +Conditional operators such as &lsquo;<samp class="samp">-f</samp>&rsquo; must be unquoted to be recognized as primaries. </p> -<p>When used with <code>[[</code>, the &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; operators sort +<p>When used with <code class="code">[[</code>, the &lsquo;<samp class="samp">&lt;</samp>&rsquo; and &lsquo;<samp class="samp">&gt;</samp>&rsquo; operators sort lexicographically using the current locale. </p> -<p>When the &lsquo;<samp>==</samp>&rsquo; and &lsquo;<samp>!=</samp>&rsquo; operators are used, the string to the +<p>When the &lsquo;<samp class="samp">==</samp>&rsquo; and &lsquo;<samp class="samp">!=</samp>&rsquo; operators are used, the string to the right of the operator is considered a pattern and matched according -to the rules described below in <a href="#Pattern-Matching">Pattern Matching</a>, -as if the <code>extglob</code> shell option were enabled. -The &lsquo;<samp>=</samp>&rsquo; operator is identical to &lsquo;<samp>==</samp>&rsquo;. -If the <code>nocasematch</code> shell option -(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) +to the rules described below in <a class="ref" href="#Pattern-Matching">Pattern Matching</a>, +as if the <code class="code">extglob</code> shell option were enabled. +The &lsquo;<samp class="samp">=</samp>&rsquo; operator is identical to &lsquo;<samp class="samp">==</samp>&rsquo;. +If the <code class="code">nocasematch</code> shell option +(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) is enabled, the match is performed without regard to the case of alphabetic characters. -The return value is 0 if the string matches (&lsquo;<samp>==</samp>&rsquo;) or does not -match (&lsquo;<samp>!=</samp>&rsquo;) the pattern, and 1 otherwise. +The return value is 0 if the string matches (&lsquo;<samp class="samp">==</samp>&rsquo;) or does not +match (&lsquo;<samp class="samp">!=</samp>&rsquo;) the pattern, and 1 otherwise. </p> <p>If you quote any part of the pattern, using any of the shell&rsquo;s quoting mechanisms, @@ -1504,17 +1508,17 @@ the quoted portion is matched literally. This means every character in the quoted portion matches itself, instead of having any special pattern matching meaning. </p> -<p>An additional binary operator, &lsquo;<samp>=~</samp>&rsquo;, is available, with the same -precedence as &lsquo;<samp>==</samp>&rsquo; and &lsquo;<samp>!=</samp>&rsquo;. -When you use &lsquo;<samp>=~</samp>&rsquo;, the string to the right of the operator is considered -a <small>POSIX</small> extended regular expression pattern and matched accordingly -(using the <small>POSIX</small> <code>regcomp</code> and <code>regexec</code> interfaces -usually described in <i>regex</i>(3)). +<p>An additional binary operator, &lsquo;<samp class="samp">=~</samp>&rsquo;, is available, with the same +precedence as &lsquo;<samp class="samp">==</samp>&rsquo; and &lsquo;<samp class="samp">!=</samp>&rsquo;. +When you use &lsquo;<samp class="samp">=~</samp>&rsquo;, the string to the right of the operator is considered +a <small class="sc">POSIX</small> extended regular expression pattern and matched accordingly +(using the <small class="sc">POSIX</small> <code class="code">regcomp</code> and <code class="code">regexec</code> interfaces +usually described in <i class="i">regex</i>(3)). The return value is 0 if the string matches the pattern, and 1 if it does not. If the regular expression is syntactically incorrect, the conditional expression returns 2. -If the <code>nocasematch</code> shell option -(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) +If the <code class="code">nocasematch</code> shell option +(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) is enabled, the match is performed without regard to the case of alphabetic characters. </p> @@ -1526,50 +1530,50 @@ expansion forces the entire pattern to be matched literally. </p> <p>The pattern will match if it matches any part of the string. If you want to force the pattern to match the entire string, -anchor the pattern using the &lsquo;<samp>^</samp>&rsquo; and &lsquo;<samp>$</samp>&rsquo; regular expression +anchor the pattern using the &lsquo;<samp class="samp">^</samp>&rsquo; and &lsquo;<samp class="samp">$</samp>&rsquo; regular expression operators. </p> <p>For example, the following will match a line -(stored in the shell variable <code>line</code>) +(stored in the shell variable <code class="code">line</code>) if there is a sequence of characters anywhere in the value consisting of any number, including zero, of -characters in the <code>space</code> character class, -immediately followed by zero or one instances of &lsquo;<samp>a</samp>&rsquo;, -then a &lsquo;<samp>b</samp>&rsquo;: +characters in the <code class="code">space</code> character class, +immediately followed by zero or one instances of &lsquo;<samp class="samp">a</samp>&rsquo;, +then a &lsquo;<samp class="samp">b</samp>&rsquo;: </p> <div class="example"> -<pre class="example">[[ $line =~ [[:space:]]*(a)?b ]] +<pre class="example-preformatted">[[ $line =~ [[:space:]]*(a)?b ]] </pre></div> -<p>That means values for <code>line</code> like -&lsquo;<samp>aab</samp>&rsquo;, &lsquo;<samp> aaaaaab</samp>&rsquo;, &lsquo;<samp>xaby</samp>&rsquo;, and &lsquo;<samp> ab</samp>&rsquo; +<p>That means values for <code class="code">line</code> like +&lsquo;<samp class="samp">aab</samp>&rsquo;, &lsquo;<samp class="samp"> aaaaaab</samp>&rsquo;, &lsquo;<samp class="samp">xaby</samp>&rsquo;, and &lsquo;<samp class="samp"> ab</samp>&rsquo; will all match, -as will a line containing a &lsquo;<samp>b</samp>&rsquo; anywhere in its value. +as will a line containing a &lsquo;<samp class="samp">b</samp>&rsquo; anywhere in its value. </p> <p>If you want to match a character that&rsquo;s special to the regular expression -grammar (&lsquo;<samp>^$|[]()\.*+?</samp>&rsquo;), it has to be quoted to remove its special +grammar (&lsquo;<samp class="samp">^$|[]()\.*+?</samp>&rsquo;), it has to be quoted to remove its special meaning. -This means that in the pattern &lsquo;<samp>xxx.txt</samp>&rsquo;, the &lsquo;<samp>.</samp>&rsquo; matches any +This means that in the pattern &lsquo;<samp class="samp">xxx.txt</samp>&rsquo;, the &lsquo;<samp class="samp">.</samp>&rsquo; matches any character in the string (its usual regular expression meaning), but in the -pattern &lsquo;<samp>&quot;xxx.txt&quot;</samp>&rsquo;, it can only match a literal &lsquo;<samp>.</samp>&rsquo;. +pattern &lsquo;<samp class="samp">&quot;xxx.txt&quot;</samp>&rsquo;, it can only match a literal &lsquo;<samp class="samp">.</samp>&rsquo;. </p> <p>Likewise, if you want to include a character in your pattern that has a special meaning to the regular expression grammar, you must make sure it&rsquo;s not quoted. If you want to anchor a pattern at the beginning or end of the string, -for instance, you cannot quote the &lsquo;<samp>^</samp>&rsquo; or &lsquo;<samp>$</samp>&rsquo; +for instance, you cannot quote the &lsquo;<samp class="samp">^</samp>&rsquo; or &lsquo;<samp class="samp">$</samp>&rsquo; characters using any form of shell quoting. </p> -<p>If you want to match &lsquo;<samp>initial string</samp>&rsquo; at the start of a line, +<p>If you want to match &lsquo;<samp class="samp">initial string</samp>&rsquo; at the start of a line, the following will work: </p><div class="example"> -<pre class="example">[[ $line =~ ^&quot;initial string&quot; ]] +<pre class="example-preformatted">[[ $line =~ ^&quot;initial string&quot; ]] </pre></div> <p>but this will not: </p><div class="example"> -<pre class="example">[[ $line =~ &quot;^initial string&quot; ]] +<pre class="example-preformatted">[[ $line =~ &quot;^initial string&quot; ]] </pre></div> -<p>because in the second example the &lsquo;<samp>^</samp>&rsquo; is quoted and doesn&rsquo;t have its +<p>because in the second example the &lsquo;<samp class="samp">^</samp>&rsquo; is quoted and doesn&rsquo;t have its usual special meaning. </p> <p>It is sometimes difficult to specify a regular expression properly @@ -1582,7 +1586,7 @@ shell. For example, the following is equivalent to the pattern used above: </p> <div class="example"> -<pre class="example">pattern='[[:space:]]*(a)?b' +<pre class="example-preformatted">pattern='[[:space:]]*(a)?b' [[ $line =~ $pattern ]] </pre></div> @@ -1590,7 +1594,7 @@ For example, the following is equivalent to the pattern used above: backslashes are used by both the shell and regular expressions to remove the special meaning from the following character. This means that after the shell&rsquo;s word expansions complete -(see <a href="#Shell-Expansions">Shell Expansions</a>), +(see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>), any backslashes remaining in parts of the pattern that were originally not quoted can remove the special meaning of pattern characters. @@ -1598,10 +1602,10 @@ If any part of the pattern is quoted, the shell does its best to ensure that the regular expression treats those remaining backslashes as literal, if they appeared in a quoted portion. </p> -<p>The following two sets of commands are <em>not</em> equivalent: +<p>The following two sets of commands are <em class="emph">not</em> equivalent: </p> <div class="example"> -<pre class="example">pattern='\.' +<pre class="example-preformatted">pattern='\.' [[ . =~ $pattern ]] [[ . =~ \. ]] @@ -1613,13 +1617,13 @@ if they appeared in a quoted portion. <p>The first two matches will succeed, but the second two will not, because in the second two the backslash will be part of the pattern to be matched. In the first two examples, the pattern passed to the regular expression -parser is &lsquo;<samp>\.</samp>&rsquo;. The backslash removes the special meaning from -&lsquo;<samp>.</samp>&rsquo;, so the literal &lsquo;<samp>.</samp>&rsquo; matches. +parser is &lsquo;<samp class="samp">\.</samp>&rsquo;. The backslash removes the special meaning from +&lsquo;<samp class="samp">.</samp>&rsquo;, so the literal &lsquo;<samp class="samp">.</samp>&rsquo; matches. In the second two examples, the pattern passed to the regular expression -parser has the backslash quoted (e.g., &lsquo;<samp>\\\.</samp>&rsquo;), which will not match +parser has the backslash quoted (e.g., &lsquo;<samp class="samp">\\\.</samp>&rsquo;), which will not match the string, since it does not contain a backslash. -If the string in the first examples were anything other than &lsquo;<samp>.</samp>&rsquo;, say -&lsquo;<samp>a</samp>&rsquo;, the pattern would not match, because the quoted &lsquo;<samp>.</samp>&rsquo; in the +If the string in the first examples were anything other than &lsquo;<samp class="samp">.</samp>&rsquo;, say +&lsquo;<samp class="samp">a</samp>&rsquo;, the pattern would not match, because the quoted &lsquo;<samp class="samp">.</samp>&rsquo; in the pattern loses its special meaning of matching any single character. </p> <p>Bracket expressions in regular expressions can be sources of errors as well, @@ -1629,10 +1633,10 @@ However, you can use bracket expressions to match special pattern characters without quoting them, so they are sometimes useful for this purpose. </p> <p>Though it might seem like a strange way to write it, the following pattern -will match a &lsquo;<samp>.</samp>&rsquo; in the string: +will match a &lsquo;<samp class="samp">.</samp>&rsquo; in the string: </p> <div class="example"> -<pre class="example">[[ . =~ [.] ]] +<pre class="example-preformatted">[[ . =~ [.] ]] </pre></div> <p>The shell performs any word expansions before passing the pattern @@ -1645,187 +1649,187 @@ The intention is to avoid making shell programmers quote things twice as much as possible, so shell quoting should be sufficient to quote special pattern characters where that&rsquo;s necessary. </p> -<p>The array variable <code>BASH_REMATCH</code> records which parts of the string +<p>The array variable <code class="code">BASH_REMATCH</code> records which parts of the string matched the pattern. -The element of <code>BASH_REMATCH</code> with index 0 contains the portion of +The element of <code class="code">BASH_REMATCH</code> with index 0 contains the portion of the string matching the entire regular expression. Substrings matched by parenthesized subexpressions within the regular -expression are saved in the remaining <code>BASH_REMATCH</code> indices. -The element of <code>BASH_REMATCH</code> with index <var>n</var> is the portion of the -string matching the <var>n</var>th parenthesized subexpression. +expression are saved in the remaining <code class="code">BASH_REMATCH</code> indices. +The element of <code class="code">BASH_REMATCH</code> with index <var class="var">n</var> is the portion of the +string matching the <var class="var">n</var>th parenthesized subexpression. </p> <p>Bash sets -<code>BASH_REMATCH</code> +<code class="code">BASH_REMATCH</code> in the global scope; declaring it as a local variable will lead to unexpected results. </p> <p>Expressions may be combined using the following operators, listed in decreasing order of precedence: </p> -<dl compact="compact"> -<dt><span><code>( <var>expression</var> )</code></span></dt> -<dd><p>Returns the value of <var>expression</var>. +<dl class="table"> +<dt><code class="code">( <var class="var">expression</var> )</code></dt> +<dd><p>Returns the value of <var class="var">expression</var>. This may be used to override the normal precedence of operators. </p> </dd> -<dt><span><code>! <var>expression</var></code></span></dt> -<dd><p>True if <var>expression</var> is false. +<dt><code class="code">! <var class="var">expression</var></code></dt> +<dd><p>True if <var class="var">expression</var> is false. </p> </dd> -<dt><span><code><var>expression1</var> &amp;&amp; <var>expression2</var></code></span></dt> -<dd><p>True if both <var>expression1</var> and <var>expression2</var> are true. +<dt><code class="code"><var class="var">expression1</var> &amp;&amp; <var class="var">expression2</var></code></dt> +<dd><p>True if both <var class="var">expression1</var> and <var class="var">expression2</var> are true. </p> </dd> -<dt><span><code><var>expression1</var> || <var>expression2</var></code></span></dt> -<dd><p>True if either <var>expression1</var> or <var>expression2</var> is true. +<dt><code class="code"><var class="var">expression1</var> || <var class="var">expression2</var></code></dt> +<dd><p>True if either <var class="var">expression1</var> or <var class="var">expression2</var> is true. </p></dd> </dl> -<p>The <code>&amp;&amp;</code> and <code>||</code> operators do not evaluate <var>expression2</var> if the -value of <var>expression1</var> is sufficient to determine the return +<p>The <code class="code">&amp;&amp;</code> and <code class="code">||</code> operators do not evaluate <var class="var">expression2</var> if the +value of <var class="var">expression1</var> is sufficient to determine the return value of the entire conditional expression. </p></dd> </dl> <hr> </div> -<div class="subsubsection" id="Command-Grouping"> -<div class="header"> +<div class="subsubsection-level-extent" id="Command-Grouping"> +<div class="nav-panel"> <p> Previous: <a href="#Conditional-Constructs" accesskey="p" rel="prev">Conditional Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Grouping-Commands"></span><h4 class="subsubsection">3.2.5.3 Grouping Commands</h4> -<span id="index-commands_002c-grouping"></span> +<h4 class="subsubsection" id="Grouping-Commands"><span>3.2.5.3 Grouping Commands<a class="copiable-link" href="#Grouping-Commands"> &para;</a></span></h4> +<a class="index-entry-id" id="index-commands_002c-grouping"></a> <p>Bash provides two ways to group a list of commands to be executed as a unit. When commands are grouped, redirections may be applied to the entire command list. For example, the output of all the commands in the list may be redirected to a single stream. </p> -<dl compact="compact"> -<dt><span><code>()</code></span></dt> +<dl class="table"> +<dt><code class="code">()</code></dt> <dd><div class="example"> -<pre class="example">( <var>list</var> ) +<pre class="example-preformatted">( <var class="var">list</var> ) </pre></div> <p>Placing a list of commands between parentheses forces the shell to create -a subshell (see <a href="#Command-Execution-Environment">Command Execution Environment</a>), and each -of the commands in <var>list</var> is executed in that subshell environment. -Since the <var>list</var> is executed in a subshell, variable assignments do not +a subshell (see <a class="pxref" href="#Command-Execution-Environment">Command Execution Environment</a>), and each +of the commands in <var class="var">list</var> is executed in that subshell environment. +Since the <var class="var">list</var> is executed in a subshell, variable assignments do not remain in effect after the subshell completes. </p> </dd> -<dt id='index-_007b'><span><code>{}</code><a href='#index-_007b' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_007d"></span> -<div class="example"> -<pre class="example">{ <var>list</var>; } +<dt><a class="index-entry-id" id="index-_007d"></a> +<a id="index-_007b"></a><span><code class="code">{}</code><a class="copiable-link" href="#index-_007b"> &para;</a></span></dt> +<dd><div class="example"> +<pre class="example-preformatted">{ <var class="var">list</var>; } </pre></div> <p>Placing a list of commands between curly braces causes the list to be executed in the current shell context. No subshell is created. -The semicolon (or newline) following <var>list</var> is required. +The semicolon (or newline) following <var class="var">list</var> is required. </p></dd> </dl> <p>In addition to the creation of a subshell, there is a subtle difference between these two constructs due to historical reasons. The braces -are reserved words, so they must be separated from the <var>list</var> -by <code>blank</code>s or other shell metacharacters. +are reserved words, so they must be separated from the <var class="var">list</var> +by <code class="code">blank</code>s or other shell metacharacters. The parentheses are operators, and are recognized as separate tokens by the shell even if they are not separated -from the <var>list</var> by whitespace. +from the <var class="var">list</var> by whitespace. </p> <p>The exit status of both of these constructs is the exit status of -<var>list</var>. +<var class="var">list</var>. </p> <hr> </div> </div> -<div class="subsection" id="Coprocesses"> -<div class="header"> +<div class="subsection-level-extent" id="Coprocesses"> +<div class="nav-panel"> <p> Next: <a href="#GNU-Parallel" accesskey="n" rel="next">GNU Parallel</a>, Previous: <a href="#Compound-Commands" accesskey="p" rel="prev">Compound Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Coprocesses-1"></span><h4 class="subsection">3.2.6 Coprocesses</h4> -<span id="index-coprocess"></span> +<h4 class="subsection" id="Coprocesses-1"><span>3.2.6 Coprocesses<a class="copiable-link" href="#Coprocesses-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-coprocess"></a> -<p>A <code>coprocess</code> is a shell command preceded by the <code>coproc</code> +<p>A <code class="code">coprocess</code> is a shell command preceded by the <code class="code">coproc</code> reserved word. A coprocess is executed asynchronously in a subshell, as if the command -had been terminated with the &lsquo;<samp>&amp;</samp>&rsquo; control operator, with a two-way pipe +had been terminated with the &lsquo;<samp class="samp">&amp;</samp>&rsquo; control operator, with a two-way pipe established between the executing shell and the coprocess. </p> <p>The syntax for a coprocess is: </p> <div class="example"> -<pre class="example">coproc [<var>NAME</var>] <var>command</var> [<var>redirections</var>] +<pre class="example-preformatted">coproc [<var class="var">NAME</var>] <var class="var">command</var> [<var class="var">redirections</var>] </pre></div> -<p>This creates a coprocess named <var>NAME</var>. -<var>command</var> may be either a simple command (see <a href="#Simple-Commands">Simple Commands</a>) -or a compound command (see <a href="#Compound-Commands">Compound Commands</a>). -<var>NAME</var> is a shell variable name. -If <var>NAME</var> is not supplied, the default name is <code>COPROC</code>. +<p>This creates a coprocess named <var class="var">NAME</var>. +<var class="var">command</var> may be either a simple command (see <a class="pxref" href="#Simple-Commands">Simple Commands</a>) +or a compound command (see <a class="pxref" href="#Compound-Commands">Compound Commands</a>). +<var class="var">NAME</var> is a shell variable name. +If <var class="var">NAME</var> is not supplied, the default name is <code class="code">COPROC</code>. </p> <p>The recommended form to use for a coprocess is </p> <div class="example"> -<pre class="example">coproc <var>NAME</var> { <var>command</var>; } +<pre class="example-preformatted">coproc <var class="var">NAME</var> { <var class="var">command</var>; } </pre></div> <p>This form is recommended because simple commands result in the coprocess -always being named <code>COPROC</code>, and it is simpler to use and more complete +always being named <code class="code">COPROC</code>, and it is simpler to use and more complete than the other compound commands. </p> <p>There are other forms of coprocesses: </p> <div class="example"> -<pre class="example">coproc <var>NAME</var> <var>compound-command</var> -coproc <var>compound-command</var> -coproc <var>simple-command</var> +<pre class="example-preformatted">coproc <var class="var">NAME</var> <var class="var">compound-command</var> +coproc <var class="var">compound-command</var> +coproc <var class="var">simple-command</var> </pre></div> -<p>If <var>command</var> is a compound command, <var>NAME</var> is optional. The -word following <code>coproc</code> determines whether that word is interpreted -as a variable name: it is interpreted as <var>NAME</var> if it is not a +<p>If <var class="var">command</var> is a compound command, <var class="var">NAME</var> is optional. The +word following <code class="code">coproc</code> determines whether that word is interpreted +as a variable name: it is interpreted as <var class="var">NAME</var> if it is not a reserved word that introduces a compound command. -If <var>command</var> is a simple command, <var>NAME</var> is not allowed; this -is to avoid confusion between <var>NAME</var> and the first word of the simple +If <var class="var">command</var> is a simple command, <var class="var">NAME</var> is not allowed; this +is to avoid confusion between <var class="var">NAME</var> and the first word of the simple command. </p> <p>When the coprocess is executed, the shell creates an array variable -(see <a href="#Arrays">Arrays</a>) -named <var>NAME</var> in the context of the executing shell. -The standard output of <var>command</var> +(see <a class="pxref" href="#Arrays">Arrays</a>) +named <var class="var">NAME</var> in the context of the executing shell. +The standard output of <var class="var">command</var> is connected via a pipe to a file descriptor in the executing shell, -and that file descriptor is assigned to <var>NAME</var>[0]. -The standard input of <var>command</var> +and that file descriptor is assigned to <var class="var">NAME</var>[0]. +The standard input of <var class="var">command</var> is connected via a pipe to a file descriptor in the executing shell, -and that file descriptor is assigned to <var>NAME</var>[1]. +and that file descriptor is assigned to <var class="var">NAME</var>[1]. This pipe is established before any redirections specified by the -command (see <a href="#Redirections">Redirections</a>). +command (see <a class="pxref" href="#Redirections">Redirections</a>). The file descriptors can be utilized as arguments to shell commands and redirections using standard word expansions. Other than those created to execute command and process substitutions, the file descriptors are not available in subshells. </p> <p>The process ID of the shell spawned to execute the coprocess is -available as the value of the variable <code><var>NAME</var>_PID</code>. -The <code>wait</code> +available as the value of the variable <code class="env"><var class="var">NAME</var>_PID</code>. +The <code class="code">wait</code> builtin command may be used to wait for the coprocess to terminate. </p> <p>Since the coprocess is created as an asynchronous command, -the <code>coproc</code> command always returns success. -The return status of a coprocess is the exit status of <var>command</var>. +the <code class="code">coproc</code> command always returns success. +The return status of a coprocess is the exit status of <var class="var">command</var>. </p> <hr> </div> -<div class="subsection" id="GNU-Parallel"> -<div class="header"> +<div class="subsection-level-extent" id="GNU-Parallel"> +<div class="nav-panel"> <p> Previous: <a href="#Coprocesses" accesskey="p" rel="prev">Coprocesses</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="GNU-Parallel-1"></span><h4 class="subsection">3.2.7 GNU Parallel</h4> +<h4 class="subsection" id="GNU-Parallel-1"><span>3.2.7 GNU Parallel<a class="copiable-link" href="#GNU-Parallel-1"> &para;</a></span></h4> <p>There are ways to run commands in parallel that are not built into Bash. GNU Parallel is a tool to do just that. @@ -1835,24 +1839,24 @@ in parallel. You may run the same command with different arguments, whether they are filenames, usernames, hostnames, or lines read from files. GNU Parallel provides shorthand references to many of the most common operations (input lines, various portions of the input line, different ways to specify -the input source, and so on). Parallel can replace <code>xargs</code> or feed +the input source, and so on). Parallel can replace <code class="code">xargs</code> or feed commands from its input sources to several different instances of Bash. </p> <p>For a complete description, refer to the GNU Parallel documentation, which is available at -<a href="https://www.gnu.org/software/parallel/parallel_tutorial.html">https://www.gnu.org/software/parallel/parallel_tutorial.html</a>. +<a class="url" href="https://www.gnu.org/software/parallel/parallel_tutorial.html">https://www.gnu.org/software/parallel/parallel_tutorial.html</a>. </p> <hr> </div> </div> -<div class="section" id="Shell-Functions"> -<div class="header"> +<div class="section-level-extent" id="Shell-Functions"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Parameters" accesskey="n" rel="next">Shell Parameters</a>, Previous: <a href="#Shell-Commands" accesskey="p" rel="prev">Shell Commands</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Functions-1"></span><h3 class="section">3.3 Shell Functions</h3> -<span id="index-shell-function"></span> -<span id="index-functions_002c-shell"></span> +<h3 class="section" id="Shell-Functions-1"><span>3.3 Shell Functions<a class="copiable-link" href="#Shell-Functions-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-shell-function"></a> +<a class="index-entry-id" id="index-functions_002c-shell"></a> <p>Shell functions are a way to group commands for later execution using a single name for the group. They are executed just like @@ -1863,39 +1867,39 @@ Shell functions are executed in the current shell context; no new process is created to interpret them. </p> <p>Functions are declared using this syntax: -<span id="index-function"></span> +<a class="index-entry-id" id="index-function"></a> </p><div class="example"> -<pre class="example"><var>fname</var> () <var>compound-command</var> [ <var>redirections</var> ] +<pre class="example-preformatted"><var class="var">fname</var> () <var class="var">compound-command</var> [ <var class="var">redirections</var> ] </pre></div> <p>or </p> <div class="example"> -<pre class="example">function <var>fname</var> [()] <var>compound-command</var> [ <var>redirections</var> ] +<pre class="example-preformatted">function <var class="var">fname</var> [()] <var class="var">compound-command</var> [ <var class="var">redirections</var> ] </pre></div> -<p>This defines a shell function named <var>fname</var>. The reserved -word <code>function</code> is optional. -If the <code>function</code> reserved +<p>This defines a shell function named <var class="var">fname</var>. The reserved +word <code class="code">function</code> is optional. +If the <code class="code">function</code> reserved word is supplied, the parentheses are optional. -The <em>body</em> of the function is the compound command -<var>compound-command</var> (see <a href="#Compound-Commands">Compound Commands</a>). -That command is usually a <var>list</var> enclosed between { and }, but +The <em class="dfn">body</em> of the function is the compound command +<var class="var">compound-command</var> (see <a class="pxref" href="#Compound-Commands">Compound Commands</a>). +That command is usually a <var class="var">list</var> enclosed between { and }, but may be any compound command listed above. -If the <code>function</code> reserved word is used, but the +If the <code class="code">function</code> reserved word is used, but the parentheses are not supplied, the braces are recommended. -<var>compound-command</var> is executed whenever <var>fname</var> is specified as the +<var class="var">compound-command</var> is executed whenever <var class="var">fname</var> is specified as the name of a simple command. -When the shell is in <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>), -<var>fname</var> must be a valid shell name and +When the shell is in <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>), +<var class="var">fname</var> must be a valid shell name and may not be the same as one of the special builtins -(see <a href="#Special-Builtins">Special Builtins</a>). +(see <a class="pxref" href="#Special-Builtins">Special Builtins</a>). In default mode, a function name can be any unquoted shell word that does -not contain &lsquo;<samp>$</samp>&rsquo;. -Any redirections (see <a href="#Redirections">Redirections</a>) associated with the shell function +not contain &lsquo;<samp class="samp">$</samp>&rsquo;. +Any redirections (see <a class="pxref" href="#Redirections">Redirections</a>) associated with the shell function are performed when the function is executed. -A function definition may be deleted using the <samp>-f</samp> option to the -<code>unset</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +A function definition may be deleted using the <samp class="option">-f</samp> option to the +<code class="code">unset</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). </p> <p>The exit status of a function definition is zero unless a syntax error occurs or a readonly function with the same name already exists. @@ -1904,70 +1908,70 @@ last command executed in the body. </p> <p>Note that for historical reasons, in the most common usage the curly braces that surround the body of the function must be separated from the body by -<code>blank</code>s or newlines. +<code class="code">blank</code>s or newlines. This is because the braces are reserved words and are only recognized as such when they are separated from the command list by whitespace or another shell metacharacter. -Also, when using the braces, the <var>list</var> must be terminated by a semicolon, -a &lsquo;<samp>&amp;</samp>&rsquo;, or a newline. +Also, when using the braces, the <var class="var">list</var> must be terminated by a semicolon, +a &lsquo;<samp class="samp">&amp;</samp>&rsquo;, or a newline. </p> <p>When a function is executed, the arguments to the function become the positional parameters -during its execution (see <a href="#Positional-Parameters">Positional Parameters</a>). -The special parameter &lsquo;<samp>#</samp>&rsquo; that expands to the number of +during its execution (see <a class="pxref" href="#Positional-Parameters">Positional Parameters</a>). +The special parameter &lsquo;<samp class="samp">#</samp>&rsquo; that expands to the number of positional parameters is updated to reflect the change. -Special parameter <code>0</code> is unchanged. -The first element of the <code>FUNCNAME</code> variable is set to the +Special parameter <code class="code">0</code> is unchanged. +The first element of the <code class="env">FUNCNAME</code> variable is set to the name of the function while the function is executing. </p> <p>All other aspects of the shell execution environment are identical between a function and its caller with these exceptions: -the <code>DEBUG</code> and <code>RETURN</code> traps +the <code class="env">DEBUG</code> and <code class="env">RETURN</code> traps are not inherited unless the function has been given the -<code>trace</code> attribute using the <code>declare</code> builtin or -the <code>-o functrace</code> option has been enabled with -the <code>set</code> builtin, -(in which case all functions inherit the <code>DEBUG</code> and <code>RETURN</code> traps), -and the <code>ERR</code> trap is not inherited unless the <code>-o errtrace</code> +<code class="code">trace</code> attribute using the <code class="code">declare</code> builtin or +the <code class="code">-o functrace</code> option has been enabled with +the <code class="code">set</code> builtin, +(in which case all functions inherit the <code class="env">DEBUG</code> and <code class="env">RETURN</code> traps), +and the <code class="env">ERR</code> trap is not inherited unless the <code class="code">-o errtrace</code> shell option has been enabled. -See <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>, for the description of the -<code>trap</code> builtin. +See <a class="xref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>, for the description of the +<code class="code">trap</code> builtin. </p> -<p>The <code>FUNCNEST</code> variable, if set to a numeric value greater +<p>The <code class="env">FUNCNEST</code> variable, if set to a numeric value greater than 0, defines a maximum function nesting level. Function invocations that exceed the limit cause the entire command to abort. </p> -<p>If the builtin command <code>return</code> +<p>If the builtin command <code class="code">return</code> is executed in a function, the function completes and execution resumes with the next command after the function call. -Any command associated with the <code>RETURN</code> trap is executed +Any command associated with the <code class="code">RETURN</code> trap is executed before execution resumes. When a function completes, the values of the -positional parameters and the special parameter &lsquo;<samp>#</samp>&rsquo; +positional parameters and the special parameter &lsquo;<samp class="samp">#</samp>&rsquo; are restored to the values they had prior to the function&rsquo;s -execution. If a numeric argument is given to <code>return</code>, +execution. If a numeric argument is given to <code class="code">return</code>, that is the function&rsquo;s return status; otherwise the function&rsquo;s return status is the exit status of the last command executed -before the <code>return</code>. +before the <code class="code">return</code>. </p> <p>Variables local to the function may be declared with the -<code>local</code> builtin (<em>local variables</em>). +<code class="code">local</code> builtin (<em class="dfn">local variables</em>). Ordinarily, variables and their values are shared between a function and its caller. These variables are visible only to the function and the commands it invokes. This is particularly important when a shell function calls other functions. </p> -<p>In the following description, the <em>current scope</em> is a currently- +<p>In the following description, the <em class="dfn">current scope</em> is a currently- executing function. Previous scopes consist of that function&rsquo;s caller and so on, back to the &quot;global&quot; scope, where the shell is not executing any shell function. Consequently, a local variable at the current local scope is a variable -declared using the <code>local</code> or <code>declare</code> builtins in the +declared using the <code class="code">local</code> or <code class="code">declare</code> builtins in the function that is currently executing. </p> <p>Local variables &quot;shadow&quot; variables with the same name declared at @@ -1976,33 +1980,33 @@ hides a global variable of the same name: references and assignments refer to the local variable, leaving the global variable unmodified. When the function returns, the global variable is once again visible. </p> -<p>The shell uses <em>dynamic scoping</em> to control a variable&rsquo;s visibility +<p>The shell uses <em class="dfn">dynamic scoping</em> to control a variable&rsquo;s visibility within functions. With dynamic scoping, visible variables and their values are a result of the sequence of function calls that caused execution to reach the current function. The value of a variable that a function sees depends on its value within its caller, if any, whether that caller is -the &quot;global&quot; scope or another shell function. +the global scope or another shell function. This is also the value that a local variable -declaration &quot;shadows&quot;, and the value that is restored when the function +declaration shadows, and the value that is restored when the function returns. </p> -<p>For example, if a variable <code>var</code> is declared as local in function -<code>func1</code>, and <code>func1</code> calls another function <code>func2</code>, -references to <code>var</code> made from within <code>func2</code> will resolve to the -local variable <code>var</code> from <code>func1</code>, shadowing any global variable -named <code>var</code>. +<p>For example, if a variable <code class="env">var</code> is declared as local in function +<code class="code">func1</code>, and <code class="code">func1</code> calls another function <code class="code">func2</code>, +references to <code class="env">var</code> made from within <code class="code">func2</code> will resolve to the +local variable <code class="env">var</code> from <code class="code">func1</code>, shadowing any global variable +named <code class="env">var</code>. </p> <p>The following script demonstrates this behavior. When executed, the script displays </p> <div class="example"> -<pre class="example">In func2, var = func1 local +<pre class="example-preformatted">In func2, var = func1 local </pre></div> <div class="example"> -<pre class="example">func1() +<pre class="example-preformatted">func1() { local var='func1 local' func2 @@ -2017,8 +2021,8 @@ var=global func1 </pre></div> -<p>The <code>unset</code> builtin also acts using the same dynamic scope: if a -variable is local to the current scope, <code>unset</code> will unset it; +<p>The <code class="code">unset</code> builtin also acts using the same dynamic scope: if a +variable is local to the current scope, <code class="code">unset</code> will unset it; otherwise the unset will refer to the variable found in any calling scope as described above. If a variable at the current local scope is unset, it will remain so @@ -2028,95 +2032,95 @@ Once the function returns, any instance of the variable at a previous scope will become visible. If the unset acts on a variable at a previous scope, any instance of a variable with that name that had been shadowed will become visible -(see below how <code>localvar_unset</code>shell option changes this behavior). +(see below how <code class="code">localvar_unset</code>shell option changes this behavior). </p> <p>Function names and definitions may be listed with the -<samp>-f</samp> option to the <code>declare</code> (<code>typeset</code>) -builtin command (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). -The <samp>-F</samp> option to <code>declare</code> or <code>typeset</code> +<samp class="option">-f</samp> option to the <code class="code">declare</code> (<code class="code">typeset</code>) +builtin command (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). +The <samp class="option">-F</samp> option to <code class="code">declare</code> or <code class="code">typeset</code> will list the function names only -(and optionally the source file and line number, if the <code>extdebug</code> +(and optionally the source file and line number, if the <code class="code">extdebug</code> shell option is enabled). Functions may be exported so that child shell processes (those created when executing a separate shell invocation) automatically have them defined with the -<samp>-f</samp> option to the <code>export</code> builtin -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +<samp class="option">-f</samp> option to the <code class="code">export</code> builtin +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). </p> <p>Functions may be recursive. -The <code>FUNCNEST</code> variable may be used to limit the depth of the +The <code class="code">FUNCNEST</code> variable may be used to limit the depth of the function call stack and restrict the number of function invocations. By default, no limit is placed on the number of recursive calls. </p> <hr> </div> -<div class="section" id="Shell-Parameters"> -<div class="header"> +<div class="section-level-extent" id="Shell-Parameters"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Expansions" accesskey="n" rel="next">Shell Expansions</a>, Previous: <a href="#Shell-Functions" accesskey="p" rel="prev">Shell Functions</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Parameters-1"></span><h3 class="section">3.4 Shell Parameters</h3> -<span id="index-parameters"></span> -<span id="index-variable_002c-shell"></span> -<span id="index-shell-variable"></span> +<h3 class="section" id="Shell-Parameters-1"><span>3.4 Shell Parameters<a class="copiable-link" href="#Shell-Parameters-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-parameters"></a> +<a class="index-entry-id" id="index-variable_002c-shell"></a> +<a class="index-entry-id" id="index-shell-variable"></a> -<p>A <em>parameter</em> is an entity that stores values. -It can be a <code>name</code>, a number, or one of the special characters +<p>A <em class="dfn">parameter</em> is an entity that stores values. +It can be a <code class="code">name</code>, a number, or one of the special characters listed below. -A <em>variable</em> is a parameter denoted by a <code>name</code>. -A variable has a <code>value</code> and zero or more <code>attributes</code>. -Attributes are assigned using the <code>declare</code> builtin command -(see the description of the <code>declare</code> builtin in <a href="#Bash-Builtins">Bash Builtin Commands</a>). +A <em class="dfn">variable</em> is a parameter denoted by a <code class="code">name</code>. +A variable has a <code class="code">value</code> and zero or more <code class="code">attributes</code>. +Attributes are assigned using the <code class="code">declare</code> builtin command +(see the description of the <code class="code">declare</code> builtin in <a class="ref" href="#Bash-Builtins">Bash Builtin Commands</a>). </p> <p>A parameter is set if it has been assigned a value. The null string is a valid value. Once a variable is set, it may be unset only by using -the <code>unset</code> builtin command. +the <code class="code">unset</code> builtin command. </p> <p>A variable may be assigned to by a statement of the form </p><div class="example"> -<pre class="example"><var>name</var>=[<var>value</var>] +<pre class="example-preformatted"><var class="var">name</var>=[<var class="var">value</var>] </pre></div> -<p>If <var>value</var> +<p>If <var class="var">value</var> is not given, the variable is assigned the null string. All -<var>value</var>s undergo tilde expansion, parameter and variable expansion, +<var class="var">value</var>s undergo tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, and quote -removal (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). -If the variable has its <code>integer</code> -attribute set, then <var>value</var> -is evaluated as an arithmetic expression even if the <code>$((&hellip;))</code> -expansion is not used (see <a href="#Arithmetic-Expansion">Arithmetic Expansion</a>). +removal (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +If the variable has its <code class="code">integer</code> +attribute set, then <var class="var">value</var> +is evaluated as an arithmetic expression even if the <code class="code">$((&hellip;))</code> +expansion is not used (see <a class="pxref" href="#Arithmetic-Expansion">Arithmetic Expansion</a>). Word splitting and filename expansion are not performed. Assignment statements may also appear as arguments to the -<code>alias</code>, -<code>declare</code>, <code>typeset</code>, <code>export</code>, <code>readonly</code>, -and <code>local</code> builtin commands (<em>declaration</em> commands). -When in <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>), these builtins may appear -in a command after one or more instances of the <code>command</code> builtin +<code class="code">alias</code>, +<code class="code">declare</code>, <code class="code">typeset</code>, <code class="code">export</code>, <code class="code">readonly</code>, +and <code class="code">local</code> builtin commands (<em class="dfn">declaration</em> commands). +When in <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>), these builtins may appear +in a command after one or more instances of the <code class="code">command</code> builtin and retain these assignment statement properties. </p> <p>In the context where an assignment statement is assigning a value -to a shell variable or array index (see <a href="#Arrays">Arrays</a>), the &lsquo;<samp>+=</samp>&rsquo; +to a shell variable or array index (see <a class="pxref" href="#Arrays">Arrays</a>), the &lsquo;<samp class="samp">+=</samp>&rsquo; operator can be used to append to or add to the variable&rsquo;s previous value. -This includes arguments to builtin commands such as <code>declare</code> that +This includes arguments to builtin commands such as <code class="code">declare</code> that accept assignment statements (declaration commands). -When &lsquo;<samp>+=</samp>&rsquo; is applied to a variable for which the <code>integer</code> attribute -has been set, <var>value</var> is evaluated as an arithmetic expression and +When &lsquo;<samp class="samp">+=</samp>&rsquo; is applied to a variable for which the <code class="code">integer</code> attribute +has been set, <var class="var">value</var> is evaluated as an arithmetic expression and added to the variable&rsquo;s current value, which is also evaluated. -When &lsquo;<samp>+=</samp>&rsquo; is applied to an array variable using compound assignment -(see <a href="#Arrays">Arrays</a>), the -variable&rsquo;s value is not unset (as it is when using &lsquo;<samp>=</samp>&rsquo;), and new +When &lsquo;<samp class="samp">+=</samp>&rsquo; is applied to an array variable using compound assignment +(see <a class="pxref" href="#Arrays">Arrays</a>), the +variable&rsquo;s value is not unset (as it is when using &lsquo;<samp class="samp">=</samp>&rsquo;), and new values are appended to the array beginning at one greater than the array&rsquo;s -maximum index (for indexed arrays), or added as additional key-value pairs +maximum index (for indexed arrays), or added as additional key-value pairs in an associative array. -When applied to a string-valued variable, <var>value</var> is expanded and +When applied to a string-valued variable, <var class="var">value</var> is expanded and appended to the variable&rsquo;s value. </p> -<p>A variable can be assigned the <code>nameref</code> attribute using the -<samp>-n</samp> option to the <code>declare</code> or <code>local</code> builtin commands -(see <a href="#Bash-Builtins">Bash Builtin Commands</a>) -to create a <em>nameref</em>, or a reference to another variable. +<p>A variable can be assigned the <code class="code">nameref</code> attribute using the +<samp class="option">-n</samp> option to the <code class="code">declare</code> or <code class="code">local</code> builtin commands +(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>) +to create a <em class="dfn">nameref</em>, or a reference to another variable. This allows variables to be manipulated indirectly. Whenever the nameref variable is referenced, assigned to, unset, or has its attributes modified (other than using or changing the nameref @@ -2128,71 +2132,71 @@ whose name is passed as an argument to the function. For instance, if a variable name is passed to a shell function as its first argument, running </p><div class="example"> -<pre class="example">declare -n ref=$1 +<pre class="example-preformatted">declare -n ref=$1 </pre></div> -<p>inside the function creates a nameref variable <code>ref</code> whose value is +<p>inside the function creates a nameref variable <code class="env">ref</code> whose value is the variable name passed as the first argument. -References and assignments to <code>ref</code>, and changes to its attributes, +References and assignments to <code class="env">ref</code>, and changes to its attributes, are treated as references, assignments, and attribute modifications -to the variable whose name was passed as <code>$1</code>. +to the variable whose name was passed as <code class="code">$1</code>. </p> -<p>If the control variable in a <code>for</code> loop has the nameref attribute, +<p>If the control variable in a <code class="code">for</code> loop has the nameref attribute, the list of words can be a list of shell variables, and a name reference will be established for each word in the list, in turn, when the loop is executed. Array variables cannot be given the nameref attribute. However, nameref variables can reference array variables and subscripted array variables. -Namerefs can be unset using the <samp>-n</samp> option to the <code>unset</code> builtin -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). -Otherwise, if <code>unset</code> is executed with the name of a nameref variable +Namerefs can be unset using the <samp class="option">-n</samp> option to the <code class="code">unset</code> builtin +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +Otherwise, if <code class="code">unset</code> is executed with the name of a nameref variable as an argument, the variable referenced by the nameref variable will be unset. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Positional-Parameters" accesskey="1">Positional Parameters</a></li> <li><a href="#Special-Parameters" accesskey="2">Special Parameters</a></li> </ul> <hr> -<div class="subsection" id="Positional-Parameters"> -<div class="header"> +<div class="subsection-level-extent" id="Positional-Parameters"> +<div class="nav-panel"> <p> Next: <a href="#Special-Parameters" accesskey="n" rel="next">Special Parameters</a>, Up: <a href="#Shell-Parameters" accesskey="u" rel="up">Shell Parameters</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Positional-Parameters-1"></span><h4 class="subsection">3.4.1 Positional Parameters</h4> -<span id="index-parameters_002c-positional"></span> +<h4 class="subsection" id="Positional-Parameters-1"><span>3.4.1 Positional Parameters<a class="copiable-link" href="#Positional-Parameters-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-parameters_002c-positional"></a> -<p>A <em>positional parameter</em> is a parameter denoted by one or more -digits, other than the single digit <code>0</code>. Positional parameters are +<p>A <em class="dfn">positional parameter</em> is a parameter denoted by one or more +digits, other than the single digit <code class="code">0</code>. Positional parameters are assigned from the shell&rsquo;s arguments when it is invoked, -and may be reassigned using the <code>set</code> builtin command. -Positional parameter <code>N</code> may be referenced as <code>${N}</code>, or -as <code>$N</code> when <code>N</code> consists of a single digit. +and may be reassigned using the <code class="code">set</code> builtin command. +Positional parameter <code class="code">N</code> may be referenced as <code class="code">${N}</code>, or +as <code class="code">$N</code> when <code class="code">N</code> consists of a single digit. Positional parameters may not be assigned to with assignment statements. -The <code>set</code> and <code>shift</code> builtins are used to set and -unset them (see <a href="#Shell-Builtin-Commands">Shell Builtin Commands</a>). +The <code class="code">set</code> and <code class="code">shift</code> builtins are used to set and +unset them (see <a class="pxref" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>). The positional parameters are temporarily replaced when a shell function is executed -(see <a href="#Shell-Functions">Shell Functions</a>). +(see <a class="pxref" href="#Shell-Functions">Shell Functions</a>). </p> <p>When a positional parameter consisting of more than a single digit is expanded, it must be enclosed in braces. </p> <hr> </div> -<div class="subsection" id="Special-Parameters"> -<div class="header"> +<div class="subsection-level-extent" id="Special-Parameters"> +<div class="nav-panel"> <p> Previous: <a href="#Positional-Parameters" accesskey="p" rel="prev">Positional Parameters</a>, Up: <a href="#Shell-Parameters" accesskey="u" rel="up">Shell Parameters</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Special-Parameters-1"></span><h4 class="subsection">3.4.2 Special Parameters</h4> -<span id="index-parameters_002c-special"></span> +<h4 class="subsection" id="Special-Parameters-1"><span>3.4.2 Special Parameters<a class="copiable-link" href="#Special-Parameters-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-parameters_002c-special"></a> <p>The shell treats several parameters specially. These parameters may only be referenced; assignment to them is not allowed. </p> -<dl compact="compact"> -<dt id='index-_002a'><span><code>*</code><a href='#index-_002a' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_0024_002a"></span> +<dl class="vtable"> +<dt><a id="index-_002a"></a><span><code class="code">*</code><a class="copiable-link" href="#index-_002a"> &para;</a></span></dt> +<dd><a class="index-entry-id" id="index-_0024_002a"></a> <p>($*) Expands to the positional parameters, starting from one. When the expansion is not within double quotes, each positional parameter expands to a separate word. @@ -2200,17 +2204,17 @@ In contexts where it is performed, those words are subject to further word splitting and filename expansion. When the expansion occurs within double quotes, it expands to a single word with the value of each parameter separated by the first character of the -<code>IFS</code> special variable. That is, <code>&quot;$*&quot;</code> is equivalent -to <code>&quot;$1<var>c</var>$2<var>c</var>&hellip;&quot;</code>, where <var>c</var> -is the first character of the value of the <code>IFS</code> +<code class="env">IFS</code> special variable. That is, <code class="code">&quot;$*&quot;</code> is equivalent +to <code class="code">&quot;$1<var class="var">c</var>$2<var class="var">c</var>&hellip;&quot;</code>, where <var class="var">c</var> +is the first character of the value of the <code class="code">IFS</code> variable. -If <code>IFS</code> is unset, the parameters are separated by spaces. -If <code>IFS</code> is null, the parameters are joined without intervening +If <code class="env">IFS</code> is unset, the parameters are separated by spaces. +If <code class="env">IFS</code> is null, the parameters are joined without intervening separators. </p> </dd> -<dt id='index-_0040'><span><code>@</code><a href='#index-_0040' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_0024_0040"></span> +<dt><a id="index-_0040"></a><span><code class="code">@</code><a class="copiable-link" href="#index-_0040"> &para;</a></span></dt> +<dd><a class="index-entry-id" id="index-_0024_0040"></a> <p>($@) Expands to the positional parameters, starting from one. In contexts where word splitting is performed, this expands each positional parameter to a separate word; if not within double @@ -2221,56 +2225,56 @@ with each positional parameter separated by a space. When the expansion occurs within double quotes, and word splitting is performed, each parameter expands to a -separate word. That is, <code>&quot;$@&quot;</code> is equivalent to -<code>&quot;$1&quot; &quot;$2&quot; &hellip;</code>. +separate word. That is, <code class="code">&quot;$@&quot;</code> is equivalent to +<code class="code">&quot;$1&quot; &quot;$2&quot; &hellip;</code>. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. -When there are no positional parameters, <code>&quot;$@&quot;</code> and -<code>$@</code> +When there are no positional parameters, <code class="code">&quot;$@&quot;</code> and +<code class="code">$@</code> expand to nothing (i.e., they are removed). </p> </dd> -<dt id='index-_0023'><span><code>#</code><a href='#index-_0023' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_0024_0023"></span> +<dt><a id="index-_0023"></a><span><code class="code">#</code><a class="copiable-link" href="#index-_0023"> &para;</a></span></dt> +<dd><a class="index-entry-id" id="index-_0024_0023"></a> <p>($#) Expands to the number of positional parameters in decimal. </p> </dd> -<dt id='index-_003f'><span><code>?</code><a href='#index-_003f' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_0024_003f"></span> +<dt><a id="index-_003f"></a><span><code class="code">?</code><a class="copiable-link" href="#index-_003f"> &para;</a></span></dt> +<dd><a class="index-entry-id" id="index-_0024_003f"></a> <p>($?) Expands to the exit status of the most recently executed foreground pipeline. </p> </dd> -<dt id='index-_002d'><span><code>-</code><a href='#index-_002d' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_0024_002d"></span> +<dt><a id="index-_002d"></a><span><code class="code">-</code><a class="copiable-link" href="#index-_002d"> &para;</a></span></dt> +<dd><a class="index-entry-id" id="index-_0024_002d"></a> <p>($-, a hyphen.) Expands to the current option flags as specified upon -invocation, by the <code>set</code> +invocation, by the <code class="code">set</code> builtin command, or those set by the shell itself -(such as the <samp>-i</samp> option). +(such as the <samp class="option">-i</samp> option). </p> </dd> -<dt id='index-_0024'><span><code>$</code><a href='#index-_0024' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_0024_0024"></span> -<p>($$) Expands to the process <small>ID</small> of the shell. In a subshell, it -expands to the process <small>ID</small> of the invoking shell, not the subshell. +<dt><a id="index-_0024"></a><span><code class="code">$</code><a class="copiable-link" href="#index-_0024"> &para;</a></span></dt> +<dd><a class="index-entry-id" id="index-_0024_0024"></a> +<p>($$) Expands to the process <small class="sc">ID</small> of the shell. In a subshell, it +expands to the process <small class="sc">ID</small> of the invoking shell, not the subshell. </p> </dd> -<dt id='index-_0021-1'><span><code>!</code><a href='#index-_0021-1' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_0024_0021"></span> -<p>($!) Expands to the process <small>ID</small> of the job most recently placed into the +<dt><a id="index-_0021-1"></a><span><code class="code">!</code><a class="copiable-link" href="#index-_0021-1"> &para;</a></span></dt> +<dd><a class="index-entry-id" id="index-_0024_0021"></a> +<p>($!) Expands to the process <small class="sc">ID</small> of the job most recently placed into the background, whether executed as an asynchronous command or using -the <code>bg</code> builtin (see <a href="#Job-Control-Builtins">Job Control Builtins</a>). +the <code class="code">bg</code> builtin (see <a class="pxref" href="#Job-Control-Builtins">Job Control Builtins</a>). </p> </dd> -<dt id='index-0'><span><code>0</code><a href='#index-0' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_00240"></span> +<dt><a id="index-0"></a><span><code class="code">0</code><a class="copiable-link" href="#index-0"> &para;</a></span></dt> +<dd><a class="index-entry-id" id="index-_00240"></a> <p>($0) Expands to the name of the shell or shell script. This is set at shell initialization. If Bash is invoked with a file of commands -(see <a href="#Shell-Scripts">Shell Scripts</a>), <code>$0</code> is set to the name of that file. -If Bash is started with the <samp>-c</samp> option (see <a href="#Invoking-Bash">Invoking Bash</a>), -then <code>$0</code> is set to the first argument after the string to be +(see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>), <code class="code">$0</code> is set to the name of that file. +If Bash is started with the <samp class="option">-c</samp> option (see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>), +then <code class="code">$0</code> is set to the first argument after the string to be executed, if one is present. Otherwise, it is set to the filename used to invoke Bash, as given by argument zero. </p></dd> @@ -2279,25 +2283,27 @@ to the filename used to invoke Bash, as given by argument zero. <hr> </div> </div> -<div class="section" id="Shell-Expansions"> -<div class="header"> +<div class="section-level-extent" id="Shell-Expansions"> +<div class="nav-panel"> <p> Next: <a href="#Redirections" accesskey="n" rel="next">Redirections</a>, Previous: <a href="#Shell-Parameters" accesskey="p" rel="prev">Shell Parameters</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Expansions-1"></span><h3 class="section">3.5 Shell Expansions</h3> -<span id="index-expansion"></span> +<h3 class="section" id="Shell-Expansions-1"><span>3.5 Shell Expansions<a class="copiable-link" href="#Shell-Expansions-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-expansion"></a> <p>Expansion is performed on the command line after it has been split into -<code>token</code>s. There are seven kinds of expansion performed: -</p> -<ul> -<li> brace expansion -</li><li> tilde expansion -</li><li> parameter and variable expansion -</li><li> command substitution -</li><li> arithmetic expansion -</li><li> word splitting -</li><li> filename expansion +<code class="code">token</code>s. +Bash performs these expansions: +</p> +<ul class="itemize mark-bullet"> +<li>brace expansion +</li><li>tilde expansion +</li><li>parameter and variable expansion +</li><li>command substitution +</li><li>arithmetic expansion +</li><li>word splitting +</li><li>filename expansion +</li><li>quote removal </li></ul> @@ -2306,30 +2312,30 @@ brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; -and filename expansion. +filename expansion; +and quote removal. </p> <p>On systems that can support it, there is an additional expansion -available: <em>process substitution</em>. +available: <em class="dfn">process substitution</em>. This is performed at the same time as tilde, parameter, variable, and arithmetic expansion and command substitution. </p> -<p>After these expansions are performed, quote characters present in the -original word are removed unless they have been quoted themselves -(<em>quote removal</em>). +<p><em class="dfn">Quote removal</em> is always performed last. +It removes quote characters present in the original word, +not ones resulting from one of the other expansions, +unless they have been quoted themselves. +See <a class="xref" href="#Quote-Removal">Quote Removal</a> for more details. </p> <p>Only brace expansion, word splitting, and filename expansion can increase the number of words of the expansion; other expansions expand a single word to a single word. The only exceptions to this are the expansions of -<code>&quot;$@&quot;</code> and <code>$*</code> (see <a href="#Special-Parameters">Special Parameters</a>), and -<code>&quot;${<var>name</var>[@]}&quot;</code> and <code>${<var>name</var>[*]}</code> -(see <a href="#Arrays">Arrays</a>). +<code class="code">&quot;$@&quot;</code> and <code class="code">$*</code> (see <a class="pxref" href="#Special-Parameters">Special Parameters</a>), and +<code class="code">&quot;${<var class="var">name</var>[@]}&quot;</code> and <code class="code">${<var class="var">name</var>[*]}</code> +(see <a class="pxref" href="#Arrays">Arrays</a>). </p> -<p>After all expansions, <code>quote removal</code> (see <a href="#Quote-Removal">Quote Removal</a>) -is performed. -</p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Brace-Expansion" accesskey="1">Brace Expansion</a></li> <li><a href="#Tilde-Expansion" accesskey="2">Tilde Expansion</a></li> <li><a href="#Shell-Parameter-Expansion" accesskey="3">Shell Parameter Expansion</a></li> @@ -2341,23 +2347,23 @@ is performed. <li><a href="#Quote-Removal" accesskey="9">Quote Removal</a></li> </ul> <hr> -<div class="subsection" id="Brace-Expansion"> -<div class="header"> +<div class="subsection-level-extent" id="Brace-Expansion"> +<div class="nav-panel"> <p> Next: <a href="#Tilde-Expansion" accesskey="n" rel="next">Tilde Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Brace-Expansion-1"></span><h4 class="subsection">3.5.1 Brace Expansion</h4> -<span id="index-brace-expansion"></span> -<span id="index-expansion_002c-brace"></span> +<h4 class="subsection" id="Brace-Expansion-1"><span>3.5.1 Brace Expansion<a class="copiable-link" href="#Brace-Expansion-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-brace-expansion"></a> +<a class="index-entry-id" id="index-expansion_002c-brace"></a> <p>Brace expansion is a mechanism by which arbitrary strings may be generated. This mechanism is similar to -<em>filename expansion</em> (see <a href="#Filename-Expansion">Filename Expansion</a>), +<em class="dfn">filename expansion</em> (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>), but the filenames generated need not exist. -Patterns to be brace expanded take the form of an optional <var>preamble</var>, +Patterns to be brace expanded take the form of an optional <var class="var">preamble</var>, followed by either a series of comma-separated strings or a sequence expression between a pair of braces, -followed by an optional <var>postscript</var>. +followed by an optional <var class="var">postscript</var>. The preamble is prefixed to each string contained within the braces, and the postscript is then appended to each resulting string, expanding left to right. @@ -2367,24 +2373,22 @@ The results of each expanded string are not sorted; left to right order is preserved. For example, </p><div class="example"> -<pre class="example">bash$ echo a{d,c,b}e +<pre class="example-preformatted">bash$ echo a{d,c,b}e ade ace abe </pre></div> -<p>A sequence expression takes the form <code>{<var>x</var>..<var>y</var>[..<var>incr</var>]}</code>, -where <var>x</var> and <var>y</var> are either integers or letters, -and <var>incr</var>, an optional increment, is an integer. +<p>A sequence expression takes the form <code class="code">{<var class="var">x</var>..<var class="var">y</var>[..<var class="var">incr</var>]}</code>, +where <var class="var">x</var> and <var class="var">y</var> are either integers or letters, +and <var class="var">incr</var>, an optional increment, is an integer. When integers are supplied, the expression expands to each number between -<var>x</var> and <var>y</var>, inclusive. -Supplied integers may be prefixed with &lsquo;<samp>0</samp>&rsquo; to force each term to have the -same width. -When either <var>x</var> or <var>y</var> begins with a zero, the shell +<var class="var">x</var> and <var class="var">y</var>, inclusive. +When either <var class="var">x</var> or <var class="var">y</var> begins with a zero, the shell attempts to force all generated terms to contain the same number of digits, zero-padding where necessary. When letters are supplied, the expression expands to each character -lexicographically between <var>x</var> and <var>y</var>, inclusive, +lexicographically between <var class="var">x</var> and <var class="var">y</var>, inclusive, using the default C locale. -Note that both <var>x</var> and <var>y</var> must be of the same type +Note that both <var class="var">x</var> and <var class="var">y</var> must be of the same type (integer or letter). When the increment is supplied, it is used as the difference between each term. The default increment is 1 or -1 as appropriate. @@ -2400,254 +2404,262 @@ and closing braces, and at least one unquoted comma or a valid sequence expression. Any incorrectly formed brace expansion is left unchanged. </p> -<p>A { or &lsquo;<samp>,</samp>&rsquo; may be quoted with a backslash to prevent its +<p>A { or &lsquo;<samp class="samp">,</samp>&rsquo; may be quoted with a backslash to prevent its being considered part of a brace expression. -To avoid conflicts with parameter expansion, the string &lsquo;<samp>${</samp>&rsquo; +To avoid conflicts with parameter expansion, the string &lsquo;<samp class="samp">${</samp>&rsquo; is not considered eligible for brace expansion, -and inhibits brace expansion until the closing &lsquo;<samp>}</samp>&rsquo;. +and inhibits brace expansion until the closing &lsquo;<samp class="samp">}</samp>&rsquo;. </p> <p>This construct is typically used as shorthand when the common prefix of the strings to be generated is longer than in the above example: </p><div class="example"> -<pre class="example">mkdir /usr/local/src/bash/{old,new,dist,bugs} +<pre class="example-preformatted">mkdir /usr/local/src/bash/{old,new,dist,bugs} </pre></div> <p>or </p><div class="example"> -<pre class="example">chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} +<pre class="example-preformatted">chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} </pre></div> <hr> </div> -<div class="subsection" id="Tilde-Expansion"> -<div class="header"> +<div class="subsection-level-extent" id="Tilde-Expansion"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Parameter-Expansion" accesskey="n" rel="next">Shell Parameter Expansion</a>, Previous: <a href="#Brace-Expansion" accesskey="p" rel="prev">Brace Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Tilde-Expansion-1"></span><h4 class="subsection">3.5.2 Tilde Expansion</h4> -<span id="index-tilde-expansion"></span> -<span id="index-expansion_002c-tilde"></span> +<h4 class="subsection" id="Tilde-Expansion-1"><span>3.5.2 Tilde Expansion<a class="copiable-link" href="#Tilde-Expansion-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-tilde-expansion"></a> +<a class="index-entry-id" id="index-expansion_002c-tilde"></a> -<p>If a word begins with an unquoted tilde character (&lsquo;<samp>~</samp>&rsquo;), all of the +<p>If a word begins with an unquoted tilde character (&lsquo;<samp class="samp">~</samp>&rsquo;), all of the characters up to the first unquoted slash (or all characters, -if there is no unquoted slash) are considered a <em>tilde-prefix</em>. +if there is no unquoted slash) are considered a <em class="dfn">tilde-prefix</em>. If none of the characters in the tilde-prefix are quoted, the characters in the tilde-prefix following the tilde are treated as a -possible <em>login name</em>. +possible <em class="dfn">login name</em>. If this login name is the null string, the tilde is replaced with the -value of the <code>HOME</code> shell variable. -If <code>HOME</code> is unset, the home directory of the user executing the +value of the <code class="env">HOME</code> shell variable. +If <code class="env">HOME</code> is unset, the home directory of the user executing the shell is substituted instead. Otherwise, the tilde-prefix is replaced with the home directory associated with the specified login name. </p> -<p>If the tilde-prefix is &lsquo;<samp>~+</samp>&rsquo;, the value of -the shell variable <code>PWD</code> replaces the tilde-prefix. -If the tilde-prefix is &lsquo;<samp>~-</samp>&rsquo;, the value of the shell variable -<code>OLDPWD</code>, if it is set, is substituted. +<p>If the tilde-prefix is &lsquo;<samp class="samp">~+</samp>&rsquo;, the value of +the shell variable <code class="env">PWD</code> replaces the tilde-prefix. +If the tilde-prefix is &lsquo;<samp class="samp">~-</samp>&rsquo;, the value of the shell variable +<code class="env">OLDPWD</code>, if it is set, is substituted. </p> <p>If the characters following the tilde in the tilde-prefix consist of a -number <var>N</var>, optionally prefixed by a &lsquo;<samp>+</samp>&rsquo; or a &lsquo;<samp>-</samp>&rsquo;, +number <var class="var">N</var>, optionally prefixed by a &lsquo;<samp class="samp">+</samp>&rsquo; or a &lsquo;<samp class="samp">-</samp>&rsquo;, the tilde-prefix is replaced with the corresponding element from the directory stack, as it would be displayed -by the <code>dirs</code> builtin invoked with the characters following tilde -in the tilde-prefix as an argument (see <a href="#The-Directory-Stack">The Directory Stack</a>). +by the <code class="code">dirs</code> builtin invoked with the characters following tilde +in the tilde-prefix as an argument (see <a class="pxref" href="#The-Directory-Stack">The Directory Stack</a>). If the tilde-prefix, sans the tilde, consists of a number without a -leading &lsquo;<samp>+</samp>&rsquo; or &lsquo;<samp>-</samp>&rsquo;, &lsquo;<samp>+</samp>&rsquo; is assumed. +leading &lsquo;<samp class="samp">+</samp>&rsquo; or &lsquo;<samp class="samp">-</samp>&rsquo;, &lsquo;<samp class="samp">+</samp>&rsquo; is assumed. </p> <p>If the login name is invalid, or the tilde expansion fails, the word is left unchanged. </p> <p>Each variable assignment is checked for unquoted tilde-prefixes immediately -following a &lsquo;<samp>:</samp>&rsquo; or the first &lsquo;<samp>=</samp>&rsquo;. +following a &lsquo;<samp class="samp">:</samp>&rsquo; or the first &lsquo;<samp class="samp">=</samp>&rsquo;. In these cases, tilde expansion is also performed. Consequently, one may use filenames with tildes in assignments to -<code>PATH</code>, <code>MAILPATH</code>, and <code>CDPATH</code>, +<code class="env">PATH</code>, <code class="env">MAILPATH</code>, and <code class="env">CDPATH</code>, and the shell assigns the expanded value. </p> <p>The following table shows how Bash treats unquoted tilde-prefixes: </p> -<dl compact="compact"> -<dt><span><code>~</code></span></dt> -<dd><p>The value of <code>$HOME</code> +<dl class="table"> +<dt><code class="code">~</code></dt> +<dd><p>The value of <code class="code">$HOME</code> </p></dd> -<dt><span><code>~/foo</code></span></dt> -<dd><p><samp>$HOME/foo</samp> +<dt><code class="code">~/foo</code></dt> +<dd><p><samp class="file">$HOME/foo</samp> </p> </dd> -<dt><span><code>~fred/foo</code></span></dt> -<dd><p>The subdirectory <code>foo</code> of the home directory of the user -<code>fred</code> +<dt><code class="code">~fred/foo</code></dt> +<dd><p>The subdirectory <code class="code">foo</code> of the home directory of the user +<code class="code">fred</code> </p> </dd> -<dt><span><code>~+/foo</code></span></dt> -<dd><p><samp>$PWD/foo</samp> +<dt><code class="code">~+/foo</code></dt> +<dd><p><samp class="file">$PWD/foo</samp> </p> </dd> -<dt><span><code>~-/foo</code></span></dt> -<dd><p><samp>${OLDPWD-'~-'}/foo</samp> +<dt><code class="code">~-/foo</code></dt> +<dd><p><samp class="file">${OLDPWD-'~-'}/foo</samp> </p> </dd> -<dt><span><code>~<var>N</var></code></span></dt> -<dd><p>The string that would be displayed by &lsquo;<samp>dirs +<var>N</var></samp>&rsquo; +<dt><code class="code">~<var class="var">N</var></code></dt> +<dd><p>The string that would be displayed by &lsquo;<samp class="samp">dirs +<var class="var">N</var></samp>&rsquo; </p> </dd> -<dt><span><code>~+<var>N</var></code></span></dt> -<dd><p>The string that would be displayed by &lsquo;<samp>dirs +<var>N</var></samp>&rsquo; +<dt><code class="code">~+<var class="var">N</var></code></dt> +<dd><p>The string that would be displayed by &lsquo;<samp class="samp">dirs +<var class="var">N</var></samp>&rsquo; </p> </dd> -<dt><span><code>~-<var>N</var></code></span></dt> -<dd><p>The string that would be displayed by &lsquo;<samp>dirs -<var>N</var></samp>&rsquo; +<dt><code class="code">~-<var class="var">N</var></code></dt> +<dd><p>The string that would be displayed by &lsquo;<samp class="samp">dirs -<var class="var">N</var></samp>&rsquo; </p></dd> </dl> <p>Bash also performs tilde expansion on words satisfying the conditions of -variable assignments (see <a href="#Shell-Parameters">Shell Parameters</a>) +variable assignments (see <a class="pxref" href="#Shell-Parameters">Shell Parameters</a>) when they appear as arguments to simple commands. Bash does not do this, except for the declaration commands listed -above, when in <small>POSIX</small> mode. +above, when in <small class="sc">POSIX</small> mode. </p> <hr> </div> -<div class="subsection" id="Shell-Parameter-Expansion"> -<div class="header"> +<div class="subsection-level-extent" id="Shell-Parameter-Expansion"> +<div class="nav-panel"> <p> Next: <a href="#Command-Substitution" accesskey="n" rel="next">Command Substitution</a>, Previous: <a href="#Tilde-Expansion" accesskey="p" rel="prev">Tilde Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Parameter-Expansion-1"></span><h4 class="subsection">3.5.3 Shell Parameter Expansion</h4> -<span id="index-parameter-expansion"></span> -<span id="index-expansion_002c-parameter"></span> +<h4 class="subsection" id="Shell-Parameter-Expansion-1"><span>3.5.3 Shell Parameter Expansion<a class="copiable-link" href="#Shell-Parameter-Expansion-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-parameter-expansion"></a> +<a class="index-entry-id" id="index-expansion_002c-parameter"></a> -<p>The &lsquo;<samp>$</samp>&rsquo; character introduces parameter expansion, +<p>The &lsquo;<samp class="samp">$</samp>&rsquo; character introduces parameter expansion, command substitution, or arithmetic expansion. The parameter name or symbol to be expanded may be enclosed in braces, which are optional but serve to protect the variable to be expanded from characters immediately following it which could be interpreted as part of the name. </p> -<p>When braces are used, the matching ending brace is the first &lsquo;<samp>}</samp>&rsquo; +<p>When braces are used, the matching ending brace is the first &lsquo;<samp class="samp">}</samp>&rsquo; not escaped by a backslash or within a quoted string, and not within an embedded arithmetic expansion, command substitution, or parameter expansion. </p> -<p>The basic form of parameter expansion is ${<var>parameter</var>}. -The value of <var>parameter</var> is substituted. -The <var>parameter</var> is a shell parameter as described above -(see <a href="#Shell-Parameters">Shell Parameters</a>) or an array reference (see <a href="#Arrays">Arrays</a>). -The braces are required when <var>parameter</var> +<p>The basic form of parameter expansion is ${<var class="var">parameter</var>}. +The value of <var class="var">parameter</var> is substituted. +The <var class="var">parameter</var> is a shell parameter as described above +(see <a class="pxref" href="#Shell-Parameters">Shell Parameters</a>) or an array reference (see <a class="pxref" href="#Arrays">Arrays</a>). +The braces are required when <var class="var">parameter</var> is a positional parameter with more than one digit, -or when <var>parameter</var> is followed by a character that is not to be +or when <var class="var">parameter</var> is followed by a character that is not to be interpreted as part of its name. </p> -<p>If the first character of <var>parameter</var> is an exclamation point (!), -and <var>parameter</var> is not a nameref, +<p>If the first character of <var class="var">parameter</var> is an exclamation point (!), +and <var class="var">parameter</var> is not a nameref, it introduces a level of indirection. Bash uses the value formed by expanding the rest of -<var>parameter</var> as the new <var>parameter</var>; this is then +<var class="var">parameter</var> as the new <var class="var">parameter</var>; this is then expanded and that value is used in the rest of the expansion, rather -than the expansion of the original <var>parameter</var>. -This is known as <code>indirect expansion</code>. +than the expansion of the original <var class="var">parameter</var>. +This is known as <code class="code">indirect expansion</code>. The value is subject to tilde expansion, parameter expansion, command substitution, and arithmetic expansion. -If <var>parameter</var> is a nameref, this expands to the name of the -variable referenced by <var>parameter</var> instead of performing the +If <var class="var">parameter</var> is a nameref, this expands to the name of the +variable referenced by <var class="var">parameter</var> instead of performing the complete indirect expansion. -The exceptions to this are the expansions of ${!<var>prefix</var>*} -and ${!<var>name</var>[@]} +The exceptions to this are the expansions of ${!<var class="var">prefix</var>*} +and ${!<var class="var">name</var>[@]} described below. The exclamation point must immediately follow the left brace in order to introduce indirection. </p> -<p>In each of the cases below, <var>word</var> is subject to tilde expansion, +<p>In each of the cases below, <var class="var">word</var> is subject to tilde expansion, parameter expansion, command substitution, and arithmetic expansion. </p> -<p>When not performing substring expansion, using the form described -below (e.g., &lsquo;<samp>:-</samp>&rsquo;), Bash tests for a parameter that is unset or null. +<p>When not performing substring expansion, using the forms described +below (e.g., &lsquo;<samp class="samp">:-</samp>&rsquo;), Bash tests for a parameter that is unset or null. Omitting the colon results in a test only for a parameter that is unset. Put another way, if the colon is included, -the operator tests for both <var>parameter</var>&rsquo;s existence and that its value +the operator tests for both <var class="var">parameter</var>&rsquo;s existence and that its value is not null; if the colon is omitted, the operator tests only for existence. </p> -<dl compact="compact"> -<dt><span><code>${<var>parameter</var>:-<var>word</var>}</code></span></dt> -<dd><p>If <var>parameter</var> is unset or null, the expansion of -<var>word</var> is substituted. Otherwise, the value of -<var>parameter</var> is substituted. +<dl class="table"> +<dt><code class="code">${<var class="var">parameter</var>:&minus;<var class="var">word</var>}</code></dt> +<dd><p>If <var class="var">parameter</var> is unset or null, the expansion of +<var class="var">word</var> is substituted. Otherwise, the value of +<var class="var">parameter</var> is substituted. </p> <div class="example"> -<pre class="example">$ v=123 +<pre class="example-preformatted">$ v=123 $ echo ${v-unset} 123 +$ echo ${v:-unset-or-null} +123 +$ unset v +$ echo ${v-unset} +unset +$ v= +$ echo ${v:-unset-or-null} +unset-or-null </pre></div> </dd> -<dt><span><code>${<var>parameter</var>:=<var>word</var>}</code></span></dt> -<dd><p>If <var>parameter</var> -is unset or null, the expansion of <var>word</var> -is assigned to <var>parameter</var>. -The value of <var>parameter</var> is then substituted. +<dt><code class="code">${<var class="var">parameter</var>:=<var class="var">word</var>}</code></dt> +<dd><p>If <var class="var">parameter</var> +is unset or null, the expansion of <var class="var">word</var> +is assigned to <var class="var">parameter</var>. +The value of <var class="var">parameter</var> is then substituted. Positional parameters and special parameters may not be assigned to in this way. </p> <div class="example"> -<pre class="example">$ var= +<pre class="example-preformatted">$ var= $ : ${var:=DEFAULT} $ echo $var DEFAULT </pre></div> </dd> -<dt><span><code>${<var>parameter</var>:?<var>word</var>}</code></span></dt> -<dd><p>If <var>parameter</var> -is null or unset, the expansion of <var>word</var> (or a message -to that effect if <var>word</var> +<dt><code class="code">${<var class="var">parameter</var>:?<var class="var">word</var>}</code></dt> +<dd><p>If <var class="var">parameter</var> +is null or unset, the expansion of <var class="var">word</var> (or a message +to that effect if <var class="var">word</var> is not present) is written to the standard error and the shell, if it -is not interactive, exits. Otherwise, the value of <var>parameter</var> is +is not interactive, exits. Otherwise, the value of <var class="var">parameter</var> is substituted. </p> <div class="example"> -<pre class="example">$ var= +<pre class="example-preformatted">$ var= $ : ${var:?var is unset or null} bash: var: var is unset or null </pre></div> </dd> -<dt><span><code>${<var>parameter</var>:+<var>word</var>}</code></span></dt> -<dd><p>If <var>parameter</var> +<dt><code class="code">${<var class="var">parameter</var>:+<var class="var">word</var>}</code></dt> +<dd><p>If <var class="var">parameter</var> is null or unset, nothing is substituted, otherwise the expansion of -<var>word</var> is substituted. +<var class="var">word</var> is substituted. </p> <div class="example"> -<pre class="example">$ var=123 +<pre class="example-preformatted">$ var=123 $ echo ${var:+var is set and not null} var is set and not null </pre></div> </dd> -<dt><span><code>${<var>parameter</var>:<var>offset</var>}</code></span></dt> -<dt><span><code>${<var>parameter</var>:<var>offset</var>:<var>length</var>}</code></span></dt> +<dt><code class="code">${<var class="var">parameter</var>:<var class="var">offset</var>}</code></dt> +<dt><code class="code">${<var class="var">parameter</var>:<var class="var">offset</var>:<var class="var">length</var>}</code></dt> <dd><p>This is referred to as Substring Expansion. -It expands to up to <var>length</var> characters of the value of <var>parameter</var> -starting at the character specified by <var>offset</var>. -If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, an indexed array subscripted by -&lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, or an associative array name, the results differ as +It expands to up to <var class="var">length</var> characters of the value of <var class="var">parameter</var> +starting at the character specified by <var class="var">offset</var>. +If <var class="var">parameter</var> is &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, an indexed array subscripted by +&lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, or an associative array name, the results differ as described below. -If <var>length</var> is omitted, it expands to the substring of the value of -<var>parameter</var> starting at the character specified by <var>offset</var> +If <var class="var">length</var> is omitted, it expands to the substring of the value of +<var class="var">parameter</var> starting at the character specified by <var class="var">offset</var> and extending to the end of the value. -<var>length</var> and <var>offset</var> are arithmetic expressions -(see <a href="#Shell-Arithmetic">Shell Arithmetic</a>). +<var class="var">length</var> and <var class="var">offset</var> are arithmetic expressions +(see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>). </p> -<p>If <var>offset</var> evaluates to a number less than zero, the value +<p>If <var class="var">offset</var> evaluates to a number less than zero, the value is used as an offset in characters -from the end of the value of <var>parameter</var>. -If <var>length</var> evaluates to a number less than zero, +from the end of the value of <var class="var">parameter</var>. +If <var class="var">length</var> evaluates to a number less than zero, it is interpreted as an offset in characters -from the end of the value of <var>parameter</var> rather than +from the end of the value of <var class="var">parameter</var> rather than a number of characters, and the expansion is the characters between -<var>offset</var> and that result. +<var class="var">offset</var> and that result. Note that a negative offset must be separated from the colon by at least -one space to avoid being confused with the &lsquo;<samp>:-</samp>&rsquo; expansion. +one space to avoid being confused with the &lsquo;<samp class="samp">:-</samp>&rsquo; expansion. </p> <p>Here are some examples illustrating substring expansion on parameters and subscripted arrays: @@ -2704,12 +2716,12 @@ bc $ echo ${array[0]: -7:-2} bcdef </pre> -<p>If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, the result is <var>length</var> -positional parameters beginning at <var>offset</var>. -A negative <var>offset</var> is taken relative to one greater than the greatest +<p>If <var class="var">parameter</var> is &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the result is <var class="var">length</var> +positional parameters beginning at <var class="var">offset</var>. +A negative <var class="var">offset</var> is taken relative to one greater than the greatest positional parameter, so an offset of -1 evaluates to the last positional -parameter. -It is an expansion error if <var>length</var> evaluates to a number less than zero. +parameter (or 0 if there are no positional parameters). +It is an expansion error if <var class="var">length</var> evaluates to a number less than zero. </p> <p>The following examples illustrate substring expansion using positional parameters: @@ -2732,12 +2744,12 @@ $ echo ${@:0:2} $ echo ${@: -7:0} </pre> -<p>If <var>parameter</var> is an indexed array name subscripted -by &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, the result is the <var>length</var> -members of the array beginning with <code>${<var>parameter</var>[<var>offset</var>]}</code>. -A negative <var>offset</var> is taken relative to one greater than the maximum +<p>If <var class="var">parameter</var> is an indexed array name subscripted +by &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the result is the <var class="var">length</var> +members of the array beginning with <code class="code">${<var class="var">parameter</var>[<var class="var">offset</var>]}</code>. +A negative <var class="var">offset</var> is taken relative to one greater than the maximum index of the specified array. -It is an expansion error if <var>length</var> evaluates to a number less than zero. +It is an expansion error if <var class="var">length</var> evaluates to a number less than zero. </p> <p>These examples show how you can use substring expansion with indexed arrays: @@ -2763,128 +2775,128 @@ results. </p> <p>Substring indexing is zero-based unless the positional parameters are used, in which case the indexing starts at 1 by default. -If <var>offset</var> is 0, and the positional parameters are used, <code>$0</code> is +If <var class="var">offset</var> is 0, and the positional parameters are used, <code class="code">$0</code> is prefixed to the list. </p> </dd> -<dt><span><code>${!<var>prefix</var>*}</code></span></dt> -<dt><span><code>${!<var>prefix</var>@}</code></span></dt> -<dd><p>Expands to the names of variables whose names begin with <var>prefix</var>, -separated by the first character of the <code>IFS</code> special variable. -When &lsquo;<samp>@</samp>&rsquo; is used and the expansion appears within double quotes, each +<dt><code class="code">${!<var class="var">prefix</var>*}</code></dt> +<dt><code class="code">${!<var class="var">prefix</var>@}</code></dt> +<dd><p>Expands to the names of variables whose names begin with <var class="var">prefix</var>, +separated by the first character of the <code class="env">IFS</code> special variable. +When &lsquo;<samp class="samp">@</samp>&rsquo; is used and the expansion appears within double quotes, each variable name expands to a separate word. </p> </dd> -<dt><span><code>${!<var>name</var>[@]}</code></span></dt> -<dt><span><code>${!<var>name</var>[*]}</code></span></dt> -<dd><p>If <var>name</var> is an array variable, expands to the list of array indices -(keys) assigned in <var>name</var>. -If <var>name</var> is not an array, expands to 0 if <var>name</var> is set and null +<dt><code class="code">${!<var class="var">name</var>[@]}</code></dt> +<dt><code class="code">${!<var class="var">name</var>[*]}</code></dt> +<dd><p>If <var class="var">name</var> is an array variable, expands to the list of array indices +(keys) assigned in <var class="var">name</var>. +If <var class="var">name</var> is not an array, expands to 0 if <var class="var">name</var> is set and null otherwise. -When &lsquo;<samp>@</samp>&rsquo; is used and the expansion appears within double quotes, each +When &lsquo;<samp class="samp">@</samp>&rsquo; is used and the expansion appears within double quotes, each key expands to a separate word. </p> </dd> -<dt><span><code>${#<var>parameter</var>}</code></span></dt> -<dd><p>The length in characters of the expanded value of <var>parameter</var> is +<dt><code class="code">${#<var class="var">parameter</var>}</code></dt> +<dd><p>The length in characters of the expanded value of <var class="var">parameter</var> is substituted. -If <var>parameter</var> is &lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo;, the value substituted +If <var class="var">parameter</var> is &lsquo;<samp class="samp">*</samp>&rsquo; or &lsquo;<samp class="samp">@</samp>&rsquo;, the value substituted is the number of positional parameters. -If <var>parameter</var> is an array name subscripted by &lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo;, +If <var class="var">parameter</var> is an array name subscripted by &lsquo;<samp class="samp">*</samp>&rsquo; or &lsquo;<samp class="samp">@</samp>&rsquo;, the value substituted is the number of elements in the array. -If <var>parameter</var> +If <var class="var">parameter</var> is an indexed array name subscripted by a negative number, that number is interpreted as relative to one greater than the maximum index of -<var>parameter</var>, so negative indices count back from the end of the +<var class="var">parameter</var>, so negative indices count back from the end of the array, and an index of -1 references the last element. </p> </dd> -<dt><span><code>${<var>parameter</var>#<var>word</var>}</code></span></dt> -<dt><span><code>${<var>parameter</var>##<var>word</var>}</code></span></dt> -<dd><p>The <var>word</var> +<dt><code class="code">${<var class="var">parameter</var>#<var class="var">word</var>}</code></dt> +<dt><code class="code">${<var class="var">parameter</var>##<var class="var">word</var>}</code></dt> +<dd><p>The <var class="var">word</var> is expanded to produce a pattern and matched according to the rules -described below (see <a href="#Pattern-Matching">Pattern Matching</a>). If the pattern matches -the beginning of the expanded value of <var>parameter</var>, -then the result of the expansion is the expanded value of <var>parameter</var> -with the shortest matching pattern (the &lsquo;<samp>#</samp>&rsquo; case) or the -longest matching pattern (the &lsquo;<samp>##</samp>&rsquo; case) deleted. -If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +described below (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>). If the pattern matches +the beginning of the expanded value of <var class="var">parameter</var>, +then the result of the expansion is the expanded value of <var class="var">parameter</var> +with the shortest matching pattern (the &lsquo;<samp class="samp">#</samp>&rsquo; case) or the +longest matching pattern (the &lsquo;<samp class="samp">##</samp>&rsquo; case) deleted. +If <var class="var">parameter</var> is &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. -If <var>parameter</var> is an array variable subscripted with -&lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +If <var class="var">parameter</var> is an array variable subscripted with +&lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. </p> </dd> -<dt><span><code>${<var>parameter</var>%<var>word</var>}</code></span></dt> -<dt><span><code>${<var>parameter</var>%%<var>word</var>}</code></span></dt> -<dd><p>The <var>word</var> +<dt><code class="code">${<var class="var">parameter</var>%<var class="var">word</var>}</code></dt> +<dt><code class="code">${<var class="var">parameter</var>%%<var class="var">word</var>}</code></dt> +<dd><p>The <var class="var">word</var> is expanded to produce a pattern and matched according to the rules -described below (see <a href="#Pattern-Matching">Pattern Matching</a>). +described below (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>). If the pattern matches a trailing portion of the expanded value of -<var>parameter</var>, then the result of the expansion is the value of -<var>parameter</var> with the shortest matching pattern (the &lsquo;<samp>%</samp>&rsquo; case) -or the longest matching pattern (the &lsquo;<samp>%%</samp>&rsquo; case) deleted. -If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +<var class="var">parameter</var>, then the result of the expansion is the value of +<var class="var">parameter</var> with the shortest matching pattern (the &lsquo;<samp class="samp">%</samp>&rsquo; case) +or the longest matching pattern (the &lsquo;<samp class="samp">%%</samp>&rsquo; case) deleted. +If <var class="var">parameter</var> is &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. -If <var>parameter</var> -is an array variable subscripted with &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +If <var class="var">parameter</var> +is an array variable subscripted with &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. </p> </dd> -<dt><span><code>${<var>parameter</var>/<var>pattern</var>/<var>string</var>}</code></span></dt> -<dt><span><code>${<var>parameter</var>//<var>pattern</var>/<var>string</var>}</code></span></dt> -<dt><span><code>${<var>parameter</var>/#<var>pattern</var>/<var>string</var>}</code></span></dt> -<dt><span><code>${<var>parameter</var>/%<var>pattern</var>/<var>string</var>}</code></span></dt> -<dd><p>The <var>pattern</var> is expanded to produce a pattern just as in +<dt><code class="code">${<var class="var">parameter</var>/<var class="var">pattern</var>/<var class="var">string</var>}</code></dt> +<dt><code class="code">${<var class="var">parameter</var>//<var class="var">pattern</var>/<var class="var">string</var>}</code></dt> +<dt><code class="code">${<var class="var">parameter</var>/#<var class="var">pattern</var>/<var class="var">string</var>}</code></dt> +<dt><code class="code">${<var class="var">parameter</var>/%<var class="var">pattern</var>/<var class="var">string</var>}</code></dt> +<dd><p>The <var class="var">pattern</var> is expanded to produce a pattern just as in filename expansion. -<var>Parameter</var> is expanded and the longest match of <var>pattern</var> -against its value is replaced with <var>string</var>. -<var>string</var> undergoes tilde expansion, parameter and variable expansion, +<var class="var">Parameter</var> is expanded and the longest match of <var class="var">pattern</var> +against its value is replaced with <var class="var">string</var>. +<var class="var">string</var> undergoes tilde expansion, parameter and variable expansion, arithmetic expansion, command and process substitution, and quote removal. The match is performed according to the rules described below -(see <a href="#Pattern-Matching">Pattern Matching</a>). +(see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>). </p> <p>In the first form above, only the first match is replaced. -If there are two slashes separating <var>parameter</var> and <var>pattern</var> -(the second form above), all matches of <var>pattern</var> are -replaced with <var>string</var>. -If <var>pattern</var> is preceded by &lsquo;<samp>#</samp>&rsquo; (the third form above), -it must match at the beginning of the expanded value of <var>parameter</var>. -If <var>pattern</var> is preceded by &lsquo;<samp>%</samp>&rsquo; (the fourth form above), -it must match at the end of the expanded value of <var>parameter</var>. -If the expansion of <var>string</var> is null, -matches of <var>pattern</var> are deleted. -If <var>string</var> is null, -matches of <var>pattern</var> are deleted -and the &lsquo;<samp>/</samp>&rsquo; following <var>pattern</var> may be omitted. -</p> -<p>If the <code>patsub_replacement</code> shell option is enabled using <code>shopt</code>, -any unquoted instances of &lsquo;<samp>&amp;</samp>&rsquo; in <var>string</var> are replaced with the -matching portion of <var>pattern</var>. -This is intended to duplicate a common <code>sed</code> idiom. -</p> -<p>Quoting any part of <var>string</var> inhibits replacement in the +If there are two slashes separating <var class="var">parameter</var> and <var class="var">pattern</var> +(the second form above), all matches of <var class="var">pattern</var> are +replaced with <var class="var">string</var>. +If <var class="var">pattern</var> is preceded by &lsquo;<samp class="samp">#</samp>&rsquo; (the third form above), +it must match at the beginning of the expanded value of <var class="var">parameter</var>. +If <var class="var">pattern</var> is preceded by &lsquo;<samp class="samp">%</samp>&rsquo; (the fourth form above), +it must match at the end of the expanded value of <var class="var">parameter</var>. +If the expansion of <var class="var">string</var> is null, +matches of <var class="var">pattern</var> are deleted. +If <var class="var">string</var> is null, +matches of <var class="var">pattern</var> are deleted +and the &lsquo;<samp class="samp">/</samp>&rsquo; following <var class="var">pattern</var> may be omitted. +</p> +<p>If the <code class="code">patsub_replacement</code> shell option is enabled using <code class="code">shopt</code>, +any unquoted instances of &lsquo;<samp class="samp">&amp;</samp>&rsquo; in <var class="var">string</var> are replaced with the +matching portion of <var class="var">pattern</var>. +This is intended to duplicate a common <code class="code">sed</code> idiom. +</p> +<p>Quoting any part of <var class="var">string</var> inhibits replacement in the expansion of the quoted portion, including replacement strings stored in shell variables. -Backslash will escape &lsquo;<samp>&amp;</samp>&rsquo; in <var>string</var>; the backslash is removed -in order to permit a literal &lsquo;<samp>&amp;</samp>&rsquo; in the replacement string. -Users should take care if <var>string</var> is double-quoted to avoid +Backslash will escape &lsquo;<samp class="samp">&amp;</samp>&rsquo; in <var class="var">string</var>; the backslash is removed +in order to permit a literal &lsquo;<samp class="samp">&amp;</samp>&rsquo; in the replacement string. +Users should take care if <var class="var">string</var> is double-quoted to avoid unwanted interactions between the backslash and double-quoting, since backslash has special meaning within double quotes. -Pattern substitution performs the check for unquoted &lsquo;<samp>&amp;</samp>&rsquo; after -expanding <var>string</var>, -so users should ensure to properly quote any occurrences of &lsquo;<samp>&amp;</samp>&rsquo; +Pattern substitution performs the check for unquoted &lsquo;<samp class="samp">&amp;</samp>&rsquo; after +expanding <var class="var">string</var>, +so users should ensure to properly quote any occurrences of &lsquo;<samp class="samp">&amp;</samp>&rsquo; they want to be taken literally in the replacement -and ensure any instances of &lsquo;<samp>&amp;</samp>&rsquo; they want to be replaced are unquoted. +and ensure any instances of &lsquo;<samp class="samp">&amp;</samp>&rsquo; they want to be replaced are unquoted. </p> <p>For instance, </p> <div class="example"> -<pre class="example">var=abcdef +<pre class="example-preformatted">var=abcdef rep='&amp; ' echo ${var/abc/&amp; } echo &quot;${var/abc/&amp; }&quot; @@ -2895,7 +2907,7 @@ echo &quot;${var/abc/$rep}&quot; <p>will display four lines of &quot;abc def&quot;, while </p> <div class="example"> -<pre class="example">var=abcdef +<pre class="example-preformatted">var=abcdef rep='&amp; ' echo ${var/abc/\&amp; } echo &quot;${var/abc/\&amp; }&quot; @@ -2910,121 +2922,122 @@ enclosing the entire parameter substitution do not, since the expansion is performed in a context that doesn&rsquo;t take any enclosing double quotes into account. </p> -<p>Since backslash can escape &lsquo;<samp>&amp;</samp>&rsquo;, it can also escape a backslash in +<p>Since backslash can escape &lsquo;<samp class="samp">&amp;</samp>&rsquo;, it can also escape a backslash in the replacement string. -This means that &lsquo;<samp>\\</samp>&rsquo; will insert a literal -backslash into the replacement, so these two <code>echo</code> commands +This means that &lsquo;<samp class="samp">\\</samp>&rsquo; will insert a literal +backslash into the replacement, so these two <code class="code">echo</code> commands </p> <div class="example"> -<pre class="example">var=abcdef +<pre class="example-preformatted">var=abcdef rep='\\&amp;xyz' echo ${var/abc/\\&amp;xyz} echo ${var/abc/$rep} </pre></div> -<p>will both output &lsquo;<samp>\abcxyzdef</samp>&rsquo;. +<p>will both output &lsquo;<samp class="samp">\abcxyzdef</samp>&rsquo;. </p> -<p>It should rarely be necessary to enclose only <var>string</var> in double +<p>It should rarely be necessary to enclose only <var class="var">string</var> in double quotes. </p> -<p>If the <code>nocasematch</code> shell option -(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) +<p>If the <code class="code">nocasematch</code> shell option +(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) is enabled, the match is performed without regard to the case of alphabetic characters. -If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +If <var class="var">parameter</var> is &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the substitution operation is applied to each positional parameter in turn, and the expansion is the resultant list. -If <var>parameter</var> -is an array variable subscripted with &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +If <var class="var">parameter</var> +is an array variable subscripted with &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the substitution operation is applied to each member of the array in turn, and the expansion is the resultant list. </p> </dd> -<dt><span><code>${<var>parameter</var>^<var>pattern</var>}</code></span></dt> -<dt><span><code>${<var>parameter</var>^^<var>pattern</var>}</code></span></dt> -<dt><span><code>${<var>parameter</var>,<var>pattern</var>}</code></span></dt> -<dt><span><code>${<var>parameter</var>,,<var>pattern</var>}</code></span></dt> -<dd><p>This expansion modifies the case of alphabetic characters in <var>parameter</var>. -The <var>pattern</var> is expanded to produce a pattern just as in +<dt><code class="code">${<var class="var">parameter</var>^<var class="var">pattern</var>}</code></dt> +<dt><code class="code">${<var class="var">parameter</var>^^<var class="var">pattern</var>}</code></dt> +<dt><code class="code">${<var class="var">parameter</var>,<var class="var">pattern</var>}</code></dt> +<dt><code class="code">${<var class="var">parameter</var>,,<var class="var">pattern</var>}</code></dt> +<dd><p>This expansion modifies the case of alphabetic characters in <var class="var">parameter</var>. +The <var class="var">pattern</var> is expanded to produce a pattern just as in filename expansion. -Each character in the expanded value of <var>parameter</var> is tested against -<var>pattern</var>, and, if it matches the pattern, its case is converted. +Each character in the expanded value of <var class="var">parameter</var> is tested against +<var class="var">pattern</var>, and, if it matches the pattern, its case is converted. The pattern should not attempt to match more than one character. </p> -<p>The &lsquo;<samp>^</samp>&rsquo; operator converts lowercase letters matching <var>pattern</var> -to uppercase; the &lsquo;<samp>,</samp>&rsquo; operator converts matching uppercase letters +<p>The &lsquo;<samp class="samp">^</samp>&rsquo; operator converts lowercase letters matching <var class="var">pattern</var> +to uppercase; the &lsquo;<samp class="samp">,</samp>&rsquo; operator converts matching uppercase letters to lowercase. -The &lsquo;<samp>^^</samp>&rsquo; and &lsquo;<samp>,,</samp>&rsquo; expansions convert each matched character in the -expanded value; the &lsquo;<samp>^</samp>&rsquo; and &lsquo;<samp>,</samp>&rsquo; expansions match and convert only +The &lsquo;<samp class="samp">^^</samp>&rsquo; and &lsquo;<samp class="samp">,,</samp>&rsquo; expansions convert each matched character in the +expanded value; the &lsquo;<samp class="samp">^</samp>&rsquo; and &lsquo;<samp class="samp">,</samp>&rsquo; expansions match and convert only the first character in the expanded value. -If <var>pattern</var> is omitted, it is treated like a &lsquo;<samp>?</samp>&rsquo;, which matches +If <var class="var">pattern</var> is omitted, it is treated like a &lsquo;<samp class="samp">?</samp>&rsquo;, which matches every character. </p> -<p>If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +<p>If <var class="var">parameter</var> is &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the case modification operation is applied to each positional parameter in turn, and the expansion is the resultant list. -If <var>parameter</var> -is an array variable subscripted with &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +If <var class="var">parameter</var> +is an array variable subscripted with &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the case modification operation is applied to each member of the array in turn, and the expansion is the resultant list. </p> </dd> -<dt><span><code>${<var>parameter</var>@<var>operator</var>}</code></span></dt> -<dd><p>The expansion is either a transformation of the value of <var>parameter</var> -or information about <var>parameter</var> itself, depending on the value of -<var>operator</var>. Each <var>operator</var> is a single letter: +<dt><code class="code">${<var class="var">parameter</var>@<var class="var">operator</var>}</code></dt> +<dd><p>The expansion is either a transformation of the value of <var class="var">parameter</var> +or information about <var class="var">parameter</var> itself, depending on the value of +<var class="var">operator</var>. Each <var class="var">operator</var> is a single letter: </p> -<dl compact="compact"> -<dt><span><code>U</code></span></dt> -<dd><p>The expansion is a string that is the value of <var>parameter</var> with lowercase +<dl class="table"> +<dt><code class="code">U</code></dt> +<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> with lowercase alphabetic characters converted to uppercase. </p></dd> -<dt><span><code>u</code></span></dt> -<dd><p>The expansion is a string that is the value of <var>parameter</var> with the first +<dt><code class="code">u</code></dt> +<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> with the first character converted to uppercase, if it is alphabetic. </p></dd> -<dt><span><code>L</code></span></dt> -<dd><p>The expansion is a string that is the value of <var>parameter</var> with uppercase +<dt><code class="code">L</code></dt> +<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> with uppercase alphabetic characters converted to lowercase. </p></dd> -<dt><span><code>Q</code></span></dt> -<dd><p>The expansion is a string that is the value of <var>parameter</var> quoted in a +<dt><code class="code">Q</code></dt> +<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> quoted in a format that can be reused as input. </p></dd> -<dt><span><code>E</code></span></dt> -<dd><p>The expansion is a string that is the value of <var>parameter</var> with backslash -escape sequences expanded as with the <code>$'&hellip;'</code> quoting mechanism. +<dt><code class="code">E</code></dt> +<dd><p>The expansion is a string that is the value of <var class="var">parameter</var> with backslash +escape sequences expanded as with the <code class="code">$'&hellip;'</code> quoting mechanism. </p></dd> -<dt><span><code>P</code></span></dt> +<dt><code class="code">P</code></dt> <dd><p>The expansion is a string that is the result of expanding the value of -<var>parameter</var> as if it were a prompt string (see <a href="#Controlling-the-Prompt">Controlling the Prompt</a>). +<var class="var">parameter</var> as if it were a prompt string (see <a class="pxref" href="#Controlling-the-Prompt">Controlling the Prompt</a>). </p></dd> -<dt><span><code>A</code></span></dt> +<dt><code class="code">A</code></dt> <dd><p>The expansion is a string in the form of -an assignment statement or <code>declare</code> command that, if -evaluated, will recreate <var>parameter</var> with its attributes and value. +an assignment statement or <code class="code">declare</code> command that, if +evaluated, will recreate <var class="var">parameter</var> with its attributes and value. </p></dd> -<dt><span><code>K</code></span></dt> -<dd><p>Produces a possibly-quoted version of the value of <var>parameter</var>, +<dt><code class="code">K</code></dt> +<dd><p>Produces a possibly-quoted version of the value of <var class="var">parameter</var>, except that it prints the values of indexed and associative arrays as a sequence of quoted key-value pairs -(see <a href="#Arrays">Arrays</a>). +(see <a class="pxref" href="#Arrays">Arrays</a>). +The keys and values are quoted in a format that can be reused as input. </p></dd> -<dt><span><code>a</code></span></dt> +<dt><code class="code">a</code></dt> <dd><p>The expansion is a string consisting of flag values representing -<var>parameter</var>&rsquo;s attributes. +<var class="var">parameter</var>&rsquo;s attributes. </p></dd> -<dt><span><code>k</code></span></dt> -<dd><p>Like the &lsquo;<samp>K</samp>&rsquo; transformation, but expands the keys and values of +<dt><code class="code">k</code></dt> +<dd><p>Like the &lsquo;<samp class="samp">K</samp>&rsquo; transformation, but expands the keys and values of indexed and associative arrays to separate words after word splitting. </p></dd> </dl> -<p>If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +<p>If <var class="var">parameter</var> is &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the operation is applied to each positional parameter in turn, and the expansion is the resultant list. -If <var>parameter</var> -is an array variable subscripted with &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +If <var class="var">parameter</var> +is an array variable subscripted with &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the operation is applied to each member of the array in turn, and the expansion is the resultant list. </p> @@ -3035,68 +3048,129 @@ expansion as described below. <hr> </div> -<div class="subsection" id="Command-Substitution"> -<div class="header"> +<div class="subsection-level-extent" id="Command-Substitution"> +<div class="nav-panel"> <p> Next: <a href="#Arithmetic-Expansion" accesskey="n" rel="next">Arithmetic Expansion</a>, Previous: <a href="#Shell-Parameter-Expansion" accesskey="p" rel="prev">Shell Parameter Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Command-Substitution-1"></span><h4 class="subsection">3.5.4 Command Substitution</h4> -<span id="index-command-substitution"></span> +<h4 class="subsection" id="Command-Substitution-1"><span>3.5.4 Command Substitution<a class="copiable-link" href="#Command-Substitution-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-command-substitution"></a> <p>Command substitution allows the output of a command to replace the command itself. -Command substitution occurs when a command is enclosed as follows: +The standard form of command substitution occurs when a command is +enclosed as follows: </p><div class="example"> -<pre class="example">$(<var>command</var>) +<pre class="example-preformatted">$(<var class="var">command</var>) </pre></div> -<p>or +<p>or (deprecated) </p><div class="example"> -<pre class="example">`<var>command</var>` +<pre class="example-preformatted">`<var class="var">command</var>`. </pre></div> -<p>Bash performs the expansion by executing <var>command</var> in a subshell environment -and replacing the command substitution with the standard output of the -command, with any trailing newlines deleted. +<p>Bash performs command substitution by executing <var class="var">command</var> in a subshell +environment and replacing the command substitution with the standard +output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting. -The command substitution <code>$(cat <var>file</var>)</code> can be -replaced by the equivalent but faster <code>$(&lt; <var>file</var>)</code>. +The command substitution <code class="code">$(cat <var class="var">file</var>)</code> can be +replaced by the equivalent but faster <code class="code">$(&lt; <var class="var">file</var>)</code>. </p> -<p>When the old-style backquote form of substitution is used, +<p>With the old-style backquote form of substitution, backslash retains its literal meaning except when followed by -&lsquo;<samp>$</samp>&rsquo;, &lsquo;<samp>`</samp>&rsquo;, or &lsquo;<samp>\</samp>&rsquo;. +&lsquo;<samp class="samp">$</samp>&rsquo;, &lsquo;<samp class="samp">`</samp>&rsquo;, or &lsquo;<samp class="samp">\</samp>&rsquo;. The first backquote not preceded by a backslash terminates the command substitution. -When using the <code>$(<var>command</var>)</code> form, all characters between +When using the <code class="code">$(<var class="var">command</var>)</code> form, all characters between the parentheses make up the command; none are treated specially. </p> +<p>There is an alternate form of command substitution: +</p> +<div class="example"> +<pre class="example-preformatted">${<var class="var">c</var> <var class="var">command</var>; } +</pre></div> + +<p>which executes <var class="var">command</var> in the current execution environment +and captures its output, again with trailing newlines removed. +</p> +<p>The character <var class="var">c</var> following the open brace must be a space, tab, +newline, or &lsquo;<samp class="samp">|</samp>&rsquo;, and the close brace must be in a position +where a reserved word may appear (i.e., preceded by a command terminator +such as semicolon). +Bash allows the close brace to be joined to the remaining characters in +the word without being followed by a shell metacharacter as a reserved +word would usually require. +</p> +<p>Any side effects of <var class="var">command</var> take effect immediately +in the current execution environment and persist in the current +environment after the command completes (e.g., the <code class="code">exit</code> builtin +will exit the shell). +</p> +<p>This type of command substitution superficially resembles executing an +unnamed shell function: local variables are created as when a shell +function is executing, and the <code class="code">return</code> builtin forces +<var class="var">command</var> to complete; +however, the rest of the execution environment, +including the positional parameters, is shared with the caller. +</p> +<p>If the first character following the open brace +is a &lsquo;<samp class="samp">|</samp>&rsquo;, the construct expands to the +value of the <code class="code">REPLY</code> shell variable after <var class="var">command</var> executes, +without removing any trailing newlines, +and the standard output of <var class="var">command</var> remains the same as in the +calling shell. +Bash creates <code class="code">REPLY</code> as an initially-unset local variable when +<var class="var">command</var> executes, and restores <code class="code">REPLY</code> to the value it had +before the command substitution after <var class="var">command</var> completes, +as with any local variable. +</p> +<p>For example, this construct expands to &lsquo;<samp class="samp">12345</samp>&rsquo;, and leaves the +shell variable <code class="code">X</code> unchanged in the current execution environment: +</p> +<div class="example"> +<pre class="example-preformatted"> + +${ local X=12345 ; echo $X; } +</pre></div> + +<p>(not declaring <code class="code">X</code> as local would modify its value in the current +environment, as with normal shell function execution), +while this construct does not require any output to expand to +&lsquo;<samp class="samp">12345</samp>&rsquo;: +</p> +<div class="example"> +<pre class="example-preformatted">${| REPLY=12345; } +</pre></div> + +<p>and restores <code class="code">REPLY</code> to the value it had before the command substitution. +</p> <p>Command substitutions may be nested. To nest when using the backquoted form, escape the inner backquotes with backslashes. </p> -<p>If the substitution appears within double quotes, word splitting and -filename expansion are not performed on the results. +<p>If the substitution appears within double quotes, Bash does not perform +word splitting and filename expansion on the results. </p> <hr> </div> -<div class="subsection" id="Arithmetic-Expansion"> -<div class="header"> +<div class="subsection-level-extent" id="Arithmetic-Expansion"> +<div class="nav-panel"> <p> Next: <a href="#Process-Substitution" accesskey="n" rel="next">Process Substitution</a>, Previous: <a href="#Command-Substitution" accesskey="p" rel="prev">Command Substitution</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Arithmetic-Expansion-1"></span><h4 class="subsection">3.5.5 Arithmetic Expansion</h4> -<span id="index-expansion_002c-arithmetic"></span> -<span id="index-arithmetic-expansion"></span> +<h4 class="subsection" id="Arithmetic-Expansion-1"><span>3.5.5 Arithmetic Expansion<a class="copiable-link" href="#Arithmetic-Expansion-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-expansion_002c-arithmetic"></a> +<a class="index-entry-id" id="index-arithmetic-expansion"></a> <p>Arithmetic expansion allows the evaluation of an arithmetic expression and the substitution of the result. The format for arithmetic expansion is: </p> <div class="example"> -<pre class="example">$(( <var>expression</var> )) +<pre class="example-preformatted">$(( <var class="var">expression</var> )) </pre></div> -<p>The <var>expression</var> undergoes the same expansions +<p>The <var class="var">expression</var> undergoes the same expansions as if it were within double quotes, -but double quote characters in <var>expression</var> are not treated specially +but double quote characters in <var class="var">expression</var> are not treated specially and are removed. All tokens in the expression undergo parameter and variable expansion, command substitution, and quote removal. @@ -3104,44 +3178,44 @@ The result is treated as the arithmetic expression to be evaluated. Arithmetic expansions may be nested. </p> <p>The evaluation is performed according to the rules listed below -(see <a href="#Shell-Arithmetic">Shell Arithmetic</a>). +(see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>). If the expression is invalid, Bash prints a message indicating failure to the standard error and no substitution occurs. </p> <hr> </div> -<div class="subsection" id="Process-Substitution"> -<div class="header"> +<div class="subsection-level-extent" id="Process-Substitution"> +<div class="nav-panel"> <p> Next: <a href="#Word-Splitting" accesskey="n" rel="next">Word Splitting</a>, Previous: <a href="#Arithmetic-Expansion" accesskey="p" rel="prev">Arithmetic Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Process-Substitution-1"></span><h4 class="subsection">3.5.6 Process Substitution</h4> -<span id="index-process-substitution"></span> +<h4 class="subsection" id="Process-Substitution-1"><span>3.5.6 Process Substitution<a class="copiable-link" href="#Process-Substitution-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-process-substitution"></a> <p>Process substitution allows a process&rsquo;s input or output to be referred to using a filename. It takes the form of </p><div class="example"> -<pre class="example">&lt;(<var>list</var>) +<pre class="example-preformatted">&lt;(<var class="var">list</var>) </pre></div> <p>or </p><div class="example"> -<pre class="example">&gt;(<var>list</var>) +<pre class="example-preformatted">&gt;(<var class="var">list</var>) </pre></div> -<p>The process <var>list</var> is run asynchronously, and its input or output +<p>The process <var class="var">list</var> is run asynchronously, and its input or output appears as a filename. This filename is passed as an argument to the current command as the result of the expansion. -If the <code>&gt;(<var>list</var>)</code> form is used, writing to -the file will provide input for <var>list</var>. If the -<code>&lt;(<var>list</var>)</code> form is used, the file passed as an -argument should be read to obtain the output of <var>list</var>. -Note that no space may appear between the <code>&lt;</code> or <code>&gt;</code> +If the <code class="code">&gt;(<var class="var">list</var>)</code> form is used, writing to +the file will provide input for <var class="var">list</var>. If the +<code class="code">&lt;(<var class="var">list</var>)</code> form is used, the file passed as an +argument should be read to obtain the output of <var class="var">list</var>. +Note that no space may appear between the <code class="code">&lt;</code> or <code class="code">&gt;</code> and the left parenthesis, otherwise the construct would be interpreted as a redirection. Process substitution is supported on systems that support named -pipes (<small>FIFO</small>s) or the <samp>/dev/fd</samp> method of naming open files. +pipes (<small class="sc">FIFO</small>s) or the <samp class="file">/dev/fd</samp> method of naming open files. </p> <p>When available, process substitution is performed simultaneously with parameter and variable expansion, command substitution, and arithmetic @@ -3149,39 +3223,43 @@ expansion. </p> <hr> </div> -<div class="subsection" id="Word-Splitting"> -<div class="header"> +<div class="subsection-level-extent" id="Word-Splitting"> +<div class="nav-panel"> <p> Next: <a href="#Filename-Expansion" accesskey="n" rel="next">Filename Expansion</a>, Previous: <a href="#Process-Substitution" accesskey="p" rel="prev">Process Substitution</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Word-Splitting-1"></span><h4 class="subsection">3.5.7 Word Splitting</h4> -<span id="index-word-splitting"></span> +<h4 class="subsection" id="Word-Splitting-1"><span>3.5.7 Word Splitting<a class="copiable-link" href="#Word-Splitting-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-word-splitting"></a> <p>The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting. </p> -<p>The shell treats each character of <code>$IFS</code> as a delimiter, and splits +<p>The shell treats each character of <code class="env">$IFS</code> as a delimiter, and splits the results of the other expansions into words using these characters as field terminators. -If <code>IFS</code> is unset, or its value is exactly <code>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</code>, +</p> +<p>If <code class="env">IFS</code> is unset, or its value is exactly <code class="code">&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</code>, the default, then sequences of -<code> &lt;space&gt;</code>, <code>&lt;tab&gt;</code>, and <code>&lt;newline&gt;</code> +<code class="code">space</code>, <code class="code">tab</code>, and <code class="code">newline</code> at the beginning and end of the results of the previous -expansions are ignored, and any sequence of <code>IFS</code> +expansions are ignored, and any sequence of <code class="env">IFS</code> characters not at the beginning or end serves to delimit words. -If <code>IFS</code> has a value other than the default, then sequences of -the whitespace characters <code>space</code>, <code>tab</code>, and <code>newline</code> +If <code class="env">IFS</code> has a value other than the default, then sequences of +the whitespace characters <code class="code">space</code>, <code class="code">tab</code>, and <code class="code">newline</code> are ignored at the beginning and end of the word, as long as the whitespace character is in the -value of <code>IFS</code> (an <code>IFS</code> whitespace character). -Any character in <code>IFS</code> that is not <code>IFS</code> -whitespace, along with any adjacent <code>IFS</code> -whitespace characters, delimits a field. A sequence of <code>IFS</code> +value of <code class="env">IFS</code> (an <code class="env">IFS</code> whitespace character). +Any character in <code class="env">IFS</code> that is not <code class="env">IFS</code> +whitespace, along with any adjacent <code class="env">IFS</code> +whitespace characters, delimits a field. A sequence of <code class="env">IFS</code> whitespace characters is also treated as a delimiter. -If the value of <code>IFS</code> is null, no word splitting occurs. </p> -<p>Explicit null arguments (<code>&quot;&quot;</code> or <code>''</code>) are retained +<p>If the value of <code class="env">IFS</code> is null, no word splitting occurs. +If <code class="env">IFS</code> is unset, word splitting behaves as if it contained +the default value <code class="code">&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</code>. +</p> +<p>Explicit null arguments (<code class="code">&quot;&quot;</code> or <code class="code">''</code>) are retained and passed to commands as empty strings. Unquoted implicit null arguments, resulting from the expansion of parameters that have no values, are removed. @@ -3191,7 +3269,7 @@ and passed to a command as an empty string. When a quoted null argument appears as part of a word whose expansion is non-null, the null argument is removed. That is, the word -<code>-d''</code> becomes <code>-d</code> after word splitting and +<code class="code">-d''</code> becomes <code class="code">-d</code> after word splitting and null argument removal. </p> <p>Note that if no expansion occurs, no splitting @@ -3199,205 +3277,209 @@ is performed. </p> <hr> </div> -<div class="subsection" id="Filename-Expansion"> -<div class="header"> +<div class="subsection-level-extent" id="Filename-Expansion"> +<div class="nav-panel"> <p> Next: <a href="#Quote-Removal" accesskey="n" rel="next">Quote Removal</a>, Previous: <a href="#Word-Splitting" accesskey="p" rel="prev">Word Splitting</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Filename-Expansion-1"></span><h4 class="subsection">3.5.8 Filename Expansion</h4> -<span id="index-expansion_002c-filename"></span> -<span id="index-expansion_002c-pathname"></span> -<span id="index-filename-expansion"></span> -<span id="index-pathname-expansion"></span> +<h4 class="subsection" id="Filename-Expansion-1"><span>3.5.8 Filename Expansion<a class="copiable-link" href="#Filename-Expansion-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-expansion_002c-filename"></a> +<a class="index-entry-id" id="index-expansion_002c-pathname"></a> +<a class="index-entry-id" id="index-filename-expansion"></a> +<a class="index-entry-id" id="index-pathname-expansion"></a> -<p>After word splitting, unless the <samp>-f</samp> option has been set -(see <a href="#The-Set-Builtin">The Set Builtin</a>), Bash scans each word for the characters -&lsquo;<samp>*</samp>&rsquo;, &lsquo;<samp>?</samp>&rsquo;, and &lsquo;<samp>[</samp>&rsquo;. +<p>After word splitting, unless the <samp class="option">-f</samp> option has been set +(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>), Bash scans each word for the characters +&lsquo;<samp class="samp">*</samp>&rsquo;, &lsquo;<samp class="samp">?</samp>&rsquo;, and &lsquo;<samp class="samp">[</samp>&rsquo;. If one of these characters appears, and is not quoted, then the word is -regarded as a <var>pattern</var>, +regarded as a <var class="var">pattern</var>, and replaced with an alphabetically sorted list of -filenames matching the pattern (see <a href="#Pattern-Matching">Pattern Matching</a>). +filenames matching the pattern (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>). If no matching filenames are found, -and the shell option <code>nullglob</code> is disabled, the word is left +and the shell option <code class="code">nullglob</code> is disabled, the word is left unchanged. -If the <code>nullglob</code> option is set, and no matches are found, the word +If the <code class="code">nullglob</code> option is set, and no matches are found, the word is removed. -If the <code>failglob</code> shell option is set, and no matches are found, +If the <code class="code">failglob</code> shell option is set, and no matches are found, an error message is printed and the command is not executed. -If the shell option <code>nocaseglob</code> is enabled, the match is performed +If the shell option <code class="code">nocaseglob</code> is enabled, the match is performed without regard to the case of alphabetic characters. </p> -<p>When a pattern is used for filename expansion, the character &lsquo;<samp>.</samp>&rsquo; +<p>When a pattern is used for filename expansion, the character &lsquo;<samp class="samp">.</samp>&rsquo; at the start of a filename or immediately following a slash -must be matched explicitly, unless the shell option <code>dotglob</code> is set. -In order to match the filenames &lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo;, -the pattern must begin with &lsquo;<samp>.</samp>&rsquo; (for example, &lsquo;<samp>.?</samp>&rsquo;), -even if <code>dotglob</code> is set. -If the <code>globskipdots</code> shell option is enabled, the filenames -&lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo; are never matched, even if the pattern begins -with a &lsquo;<samp>.</samp>&rsquo;. -When not matching filenames, the &lsquo;<samp>.</samp>&rsquo; character is not treated specially. +must be matched explicitly, unless the shell option <code class="code">dotglob</code> is set. +In order to match the filenames &lsquo;<samp class="samp">.</samp>&rsquo; and &lsquo;<samp class="samp">..</samp>&rsquo;, +the pattern must begin with &lsquo;<samp class="samp">.</samp>&rsquo; (for example, &lsquo;<samp class="samp">.?</samp>&rsquo;), +even if <code class="code">dotglob</code> is set. +If the <code class="code">globskipdots</code> shell option is enabled, the filenames +&lsquo;<samp class="samp">.</samp>&rsquo; and &lsquo;<samp class="samp">..</samp>&rsquo; never match, even if the pattern begins +with a &lsquo;<samp class="samp">.</samp>&rsquo;. +When not matching filenames, the &lsquo;<samp class="samp">.</samp>&rsquo; character is not treated specially. </p> <p>When matching a filename, the slash character must always be matched explicitly by a slash in the pattern, but in other matching contexts it can be matched by a special pattern character as described -below (see <a href="#Pattern-Matching">Pattern Matching</a>). +below (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>). </p> -<p>See the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>, -for a description of the <code>nocaseglob</code>, <code>nullglob</code>, -<code>globskipdots</code>, -<code>failglob</code>, and <code>dotglob</code> options. +<p>See the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>, +for a description of the <code class="code">nocaseglob</code>, <code class="code">nullglob</code>, +<code class="code">globskipdots</code>, +<code class="code">failglob</code>, and <code class="code">dotglob</code> options. </p> -<p>The <code>GLOBIGNORE</code> +<p>The <code class="env">GLOBIGNORE</code> shell variable may be used to restrict the set of file names matching a -pattern. If <code>GLOBIGNORE</code> +pattern. If <code class="env">GLOBIGNORE</code> is set, each matching file name that also matches one of the patterns in -<code>GLOBIGNORE</code> is removed from the list of matches. -If the <code>nocaseglob</code> option is set, the matching against the patterns in -<code>GLOBIGNORE</code> is performed without regard to case. +<code class="env">GLOBIGNORE</code> is removed from the list of matches. +If the <code class="code">nocaseglob</code> option is set, the matching against the patterns in +<code class="env">GLOBIGNORE</code> is performed without regard to case. The filenames -<samp>.</samp> and <samp>..</samp> -are always ignored when <code>GLOBIGNORE</code> +<samp class="file">.</samp> and <samp class="file">..</samp> +are always ignored when <code class="env">GLOBIGNORE</code> is set and not null. -However, setting <code>GLOBIGNORE</code> to a non-null value has the effect of -enabling the <code>dotglob</code> +However, setting <code class="env">GLOBIGNORE</code> to a non-null value has the effect of +enabling the <code class="code">dotglob</code> shell option, so all other filenames beginning with a -&lsquo;<samp>.</samp>&rsquo; will match. +&lsquo;<samp class="samp">.</samp>&rsquo; will match. To get the old behavior of ignoring filenames beginning with a -&lsquo;<samp>.</samp>&rsquo;, make &lsquo;<samp>.*</samp>&rsquo; one of the patterns in <code>GLOBIGNORE</code>. -The <code>dotglob</code> option is disabled when <code>GLOBIGNORE</code> +&lsquo;<samp class="samp">.</samp>&rsquo;, make &lsquo;<samp class="samp">.*</samp>&rsquo; one of the patterns in <code class="env">GLOBIGNORE</code>. +The <code class="code">dotglob</code> option is disabled when <code class="env">GLOBIGNORE</code> is unset. </p> -<ul class="section-toc"> +<p>After the pattern is expanded and matched against filenames, the value of the +<code class="env">GLOBSORT</code> variable controls how the results are sorted, as described +below (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>). +</p> +<ul class="mini-toc"> <li><a href="#Pattern-Matching" accesskey="1">Pattern Matching</a></li> </ul> <hr> -<div class="subsubsection" id="Pattern-Matching"> -<div class="header"> +<div class="subsubsection-level-extent" id="Pattern-Matching"> +<div class="nav-panel"> <p> Up: <a href="#Filename-Expansion" accesskey="u" rel="up">Filename Expansion</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Pattern-Matching-1"></span><h4 class="subsubsection">3.5.8.1 Pattern Matching</h4> -<span id="index-pattern-matching"></span> -<span id="index-matching_002c-pattern"></span> +<h4 class="subsubsection" id="Pattern-Matching-1"><span>3.5.8.1 Pattern Matching<a class="copiable-link" href="#Pattern-Matching-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-pattern-matching"></a> +<a class="index-entry-id" id="index-matching_002c-pattern"></a> <p>Any character that appears in a pattern, other than the special pattern characters described below, matches itself. -The <small>NUL</small> character may not occur in a pattern. +The <small class="sc">NUL</small> character may not occur in a pattern. A backslash escapes the following character; the escaping backslash is discarded when matching. The special pattern characters must be quoted if they are to be matched literally. </p> <p>The special pattern characters have the following meanings: -</p><dl compact="compact"> -<dt><span><code>*</code></span></dt> +</p><dl class="table"> +<dt><code class="code">*</code></dt> <dd><p>Matches any string, including the null string. -When the <code>globstar</code> shell option is enabled, and &lsquo;<samp>*</samp>&rsquo; is used in -a filename expansion context, two adjacent &lsquo;<samp>*</samp>&rsquo;s used as a single +When the <code class="code">globstar</code> shell option is enabled, and &lsquo;<samp class="samp">*</samp>&rsquo; is used in +a filename expansion context, two adjacent &lsquo;<samp class="samp">*</samp>&rsquo;s used as a single pattern will match all files and zero or more directories and subdirectories. -If followed by a &lsquo;<samp>/</samp>&rsquo;, two adjacent &lsquo;<samp>*</samp>&rsquo;s will match only +If followed by a &lsquo;<samp class="samp">/</samp>&rsquo;, two adjacent &lsquo;<samp class="samp">*</samp>&rsquo;s will match only directories and subdirectories. </p></dd> -<dt><span><code>?</code></span></dt> +<dt><code class="code">?</code></dt> <dd><p>Matches any single character. </p></dd> -<dt><span><code>[&hellip;]</code></span></dt> -<dd><p>Matches any one of the enclosed characters. A pair of characters -separated by a hyphen denotes a <var>range expression</var>; +<dt><code class="code">[&hellip;]</code></dt> +<dd><p>Matches any one of the enclosed characters. +A pair of characters separated by a hyphen denotes a <var class="var">range expression</var>; any character that falls between those two characters, inclusive, using the current locale&rsquo;s collating sequence and character set, is matched. If the first character following the -&lsquo;<samp>[</samp>&rsquo; is a &lsquo;<samp>!</samp>&rsquo; or a &lsquo;<samp>^</samp>&rsquo; -then any character not enclosed is matched. A &lsquo;<samp>-</samp>&rsquo; +&lsquo;<samp class="samp">[</samp>&rsquo; is a &lsquo;<samp class="samp">!</samp>&rsquo; or a &lsquo;<samp class="samp">^</samp>&rsquo; +then any character not enclosed is matched. A &lsquo;<samp class="samp">&minus;</samp>&rsquo; may be matched by including it as the first or last character -in the set. A &lsquo;<samp>]</samp>&rsquo; may be matched by including it as the first +in the set. A &lsquo;<samp class="samp">]</samp>&rsquo; may be matched by including it as the first character in the set. The sorting order of characters in range expressions, and the characters included in the range, are determined by the current locale and the values of the -<code>LC_COLLATE</code> and <code>LC_ALL</code> shell variables, if set. +<code class="env">LC_COLLATE</code> and <code class="env">LC_ALL</code> shell variables, if set. </p> -<p>For example, in the default C locale, &lsquo;<samp>[a-dx-z]</samp>&rsquo; is equivalent to -&lsquo;<samp>[abcdxyz]</samp>&rsquo;. Many locales sort characters in dictionary order, and in -these locales &lsquo;<samp>[a-dx-z]</samp>&rsquo; is typically not equivalent to &lsquo;<samp>[abcdxyz]</samp>&rsquo;; -it might be equivalent to &lsquo;<samp>[aBbCcDdxYyZz]</samp>&rsquo;, for example. To obtain +<p>For example, in the default C locale, &lsquo;<samp class="samp">[a-dx-z]</samp>&rsquo; is equivalent to +&lsquo;<samp class="samp">[abcdxyz]</samp>&rsquo;. Many locales sort characters in dictionary order, and in +these locales &lsquo;<samp class="samp">[a-dx-z]</samp>&rsquo; is typically not equivalent to &lsquo;<samp class="samp">[abcdxyz]</samp>&rsquo;; +it might be equivalent to &lsquo;<samp class="samp">[aBbCcDdxYyZz]</samp>&rsquo;, for example. To obtain the traditional interpretation of ranges in bracket expressions, you can -force the use of the C locale by setting the <code>LC_COLLATE</code> or -<code>LC_ALL</code> environment variable to the value &lsquo;<samp>C</samp>&rsquo;, or enable the -<code>globasciiranges</code> shell option. +force the use of the C locale by setting the <code class="env">LC_COLLATE</code> or +<code class="env">LC_ALL</code> environment variable to the value &lsquo;<samp class="samp">C</samp>&rsquo;, or enable the +<code class="code">globasciiranges</code> shell option. </p> -<p>Within &lsquo;<samp>[</samp>&rsquo; and &lsquo;<samp>]</samp>&rsquo;, <em>character classes</em> can be specified +<p>Within &lsquo;<samp class="samp">[</samp>&rsquo; and &lsquo;<samp class="samp">]</samp>&rsquo;, <em class="dfn">character classes</em> can be specified using the syntax -<code>[:</code><var>class</var><code>:]</code>, where <var>class</var> is one of the -following classes defined in the <small>POSIX</small> standard: +<code class="code">[:</code><var class="var">class</var><code class="code">:]</code>, where <var class="var">class</var> is one of the +following classes defined in the <small class="sc">POSIX</small> standard: </p><div class="example"> -<pre class="example">alnum alpha ascii blank cntrl digit graph lower +<pre class="example-preformatted">alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit </pre></div> <p>A character class matches any character belonging to that class. -The <code>word</code> character class matches letters, digits, and the character -&lsquo;<samp>_</samp>&rsquo;. +The <code class="code">word</code> character class matches letters, digits, and the character +&lsquo;<samp class="samp">_</samp>&rsquo;. </p> -<p>Within &lsquo;<samp>[</samp>&rsquo; and &lsquo;<samp>]</samp>&rsquo;, an <em>equivalence class</em> can be -specified using the syntax <code>[=</code><var>c</var><code>=]</code>, which +<p>Within &lsquo;<samp class="samp">[</samp>&rsquo; and &lsquo;<samp class="samp">]</samp>&rsquo;, an <em class="dfn">equivalence class</em> can be +specified using the syntax <code class="code">[=</code><var class="var">c</var><code class="code">=]</code>, which matches all characters with the same collation weight (as defined -by the current locale) as the character <var>c</var>. +by the current locale) as the character <var class="var">c</var>. </p> -<p>Within &lsquo;<samp>[</samp>&rsquo; and &lsquo;<samp>]</samp>&rsquo;, the syntax <code>[.</code><var>symbol</var><code>.]</code> -matches the collating symbol <var>symbol</var>. +<p>Within &lsquo;<samp class="samp">[</samp>&rsquo; and &lsquo;<samp class="samp">]</samp>&rsquo;, the syntax <code class="code">[.</code><var class="var">symbol</var><code class="code">.]</code> +matches the collating symbol <var class="var">symbol</var>. </p></dd> </dl> -<p>If the <code>extglob</code> shell option is enabled using the <code>shopt</code> +<p>If the <code class="code">extglob</code> shell option is enabled using the <code class="code">shopt</code> builtin, the shell recognizes several extended pattern matching operators. -In the following description, a <var>pattern-list</var> is a list of one -or more patterns separated by a &lsquo;<samp>|</samp>&rsquo;. -When matching filenames, the <code>dotglob</code> shell option determines +In the following description, a <var class="var">pattern-list</var> is a list of one +or more patterns separated by a &lsquo;<samp class="samp">|</samp>&rsquo;. +When matching filenames, the <code class="code">dotglob</code> shell option determines the set of filenames that are tested, as described above. Composite patterns may be formed using one or more of the following sub-patterns: </p> -<dl compact="compact"> -<dt><span><code>?(<var>pattern-list</var>)</code></span></dt> +<dl class="table"> +<dt><code class="code">?(<var class="var">pattern-list</var>)</code></dt> <dd><p>Matches zero or one occurrence of the given patterns. </p> </dd> -<dt><span><code>*(<var>pattern-list</var>)</code></span></dt> +<dt><code class="code">*(<var class="var">pattern-list</var>)</code></dt> <dd><p>Matches zero or more occurrences of the given patterns. </p> </dd> -<dt><span><code>+(<var>pattern-list</var>)</code></span></dt> +<dt><code class="code">+(<var class="var">pattern-list</var>)</code></dt> <dd><p>Matches one or more occurrences of the given patterns. </p> </dd> -<dt><span><code>@(<var>pattern-list</var>)</code></span></dt> +<dt><code class="code">@(<var class="var">pattern-list</var>)</code></dt> <dd><p>Matches one of the given patterns. </p> </dd> -<dt><span><code>!(<var>pattern-list</var>)</code></span></dt> +<dt><code class="code">!(<var class="var">pattern-list</var>)</code></dt> <dd><p>Matches anything except one of the given patterns. </p></dd> </dl> -<p>The <code>extglob</code> option changes the behavior of the parser, since the +<p>The <code class="code">extglob</code> option changes the behavior of the parser, since the parentheses are normally treated as operators with syntactic meaning. To ensure that extended matching patterns are parsed correctly, make sure -that <code>extglob</code> is enabled before parsing constructs containing the +that <code class="code">extglob</code> is enabled before parsing constructs containing the patterns, including shell functions and command substitutions. </p> -<p>When matching filenames, the <code>dotglob</code> shell option determines +<p>When matching filenames, the <code class="code">dotglob</code> shell option determines the set of filenames that are tested: -when <code>dotglob</code> is enabled, the set of filenames includes all files -beginning with &lsquo;<samp>.</samp>&rsquo;, but the filenames -&lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo; must be matched by a +when <code class="code">dotglob</code> is enabled, the set of filenames includes all files +beginning with &lsquo;<samp class="samp">.</samp>&rsquo;, but the filenames +&lsquo;<samp class="samp">.</samp>&rsquo; and &lsquo;<samp class="samp">..</samp>&rsquo; must be matched by a pattern or sub-pattern that begins with a dot; when it is disabled, the set does not include any filenames beginning with &ldquo;.&rdquo; unless the pattern -or sub-pattern begins with a &lsquo;<samp>.</samp>&rsquo;. -As above, &lsquo;<samp>.</samp>&rsquo; only has a special meaning when matching filenames. +or sub-pattern begins with a &lsquo;<samp class="samp">.</samp>&rsquo;. +As above, &lsquo;<samp class="samp">.</samp>&rsquo; only has a special meaning when matching filenames. </p> <p>Complicated extended pattern matching against long strings is slow, especially when the patterns contain alternations and the strings @@ -3408,32 +3490,32 @@ strings instead of a single long string, may be faster. <hr> </div> </div> -<div class="subsection" id="Quote-Removal"> -<div class="header"> +<div class="subsection-level-extent" id="Quote-Removal"> +<div class="nav-panel"> <p> Previous: <a href="#Filename-Expansion" accesskey="p" rel="prev">Filename Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Quote-Removal-1"></span><h4 class="subsection">3.5.9 Quote Removal</h4> +<h4 class="subsection" id="Quote-Removal-1"><span>3.5.9 Quote Removal<a class="copiable-link" href="#Quote-Removal-1"> &para;</a></span></h4> <p>After the preceding expansions, all unquoted occurrences of the -characters &lsquo;<samp>\</samp>&rsquo;, &lsquo;<samp>'</samp>&rsquo;, and &lsquo;<samp>&quot;</samp>&rsquo; that did not +characters &lsquo;<samp class="samp">\</samp>&rsquo;, &lsquo;<samp class="samp">'</samp>&rsquo;, and &lsquo;<samp class="samp">&quot;</samp>&rsquo; that did not result from one of the above expansions are removed. </p> <hr> </div> </div> -<div class="section" id="Redirections"> -<div class="header"> +<div class="section-level-extent" id="Redirections"> +<div class="nav-panel"> <p> Next: <a href="#Executing-Commands" accesskey="n" rel="next">Executing Commands</a>, Previous: <a href="#Shell-Expansions" accesskey="p" rel="prev">Shell Expansions</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Redirections-1"></span><h3 class="section">3.6 Redirections</h3> -<span id="index-redirection"></span> +<h3 class="section" id="Redirections-1"><span>3.6 Redirections<a class="copiable-link" href="#Redirections-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-redirection"></a> <p>Before a command is executed, its input and output -may be <em>redirected</em> +may be <em class="dfn">redirected</em> using a special notation interpreted by the shell. -<em>Redirection</em> allows commands&rsquo; file handles to be +<em class="dfn">Redirection</em> allows commands&rsquo; file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. @@ -3445,23 +3527,23 @@ Redirections are processed in the order they appear, from left to right. </p> <p>Each redirection that may be preceded by a file descriptor number -may instead be preceded by a word of the form {<var>varname</var>}. +may instead be preceded by a word of the form {<var class="var">varname</var>}. In this case, for each redirection operator except &gt;&amp;- and &lt;&amp;-, the shell will allocate a file descriptor greater -than 10 and assign it to {<var>varname</var>}. If &gt;&amp;- or &lt;&amp;- is preceded -by {<var>varname</var>}, the value of <var>varname</var> defines the file +than 10 and assign it to {<var class="var">varname</var>}. If &gt;&amp;- or &lt;&amp;- is preceded +by {<var class="var">varname</var>}, the value of <var class="var">varname</var> defines the file descriptor to close. -If {<var>varname</var>} is supplied, the redirection persists beyond +If {<var class="var">varname</var>} is supplied, the redirection persists beyond the scope of the command, allowing the shell programmer to manage the file descriptor&rsquo;s lifetime manually. -The <code>varredir_close</code> shell option manages this behavior -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>). +The <code class="code">varredir_close</code> shell option manages this behavior +(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>). </p> <p>In the following descriptions, if the file descriptor number is omitted, and the first character of the redirection operator is -&lsquo;<samp>&lt;</samp>&rsquo;, the redirection refers to the standard input (file +&lsquo;<samp class="samp">&lt;</samp>&rsquo;, the redirection refers to the standard input (file descriptor 0). If the first character of the redirection operator -is &lsquo;<samp>&gt;</samp>&rsquo;, the redirection refers to the standard output (file +is &lsquo;<samp class="samp">&gt;</samp>&rsquo;, the redirection refers to the standard output (file descriptor 1). </p> <p>The word following the redirection operator in the following @@ -3473,48 +3555,48 @@ If it expands to more than one word, Bash reports an error. <p>Note that the order of redirections is significant. For example, the command </p><div class="example"> -<pre class="example">ls &gt; <var>dirlist</var> 2&gt;&amp;1 +<pre class="example-preformatted">ls &gt; <var class="var">dirlist</var> 2&gt;&amp;1 </pre></div> <p>directs both standard output (file descriptor 1) and standard error -(file descriptor 2) to the file <var>dirlist</var>, while the command +(file descriptor 2) to the file <var class="var">dirlist</var>, while the command </p><div class="example"> -<pre class="example">ls 2&gt;&amp;1 &gt; <var>dirlist</var> +<pre class="example-preformatted">ls 2&gt;&amp;1 &gt; <var class="var">dirlist</var> </pre></div> -<p>directs only the standard output to file <var>dirlist</var>, +<p>directs only the standard output to file <var class="var">dirlist</var>, because the standard error was made a copy of the standard output -before the standard output was redirected to <var>dirlist</var>. +before the standard output was redirected to <var class="var">dirlist</var>. </p> <p>Bash handles several filenames specially when they are used in redirections, as described in the following table. If the operating system on which Bash is running provides these -special files, bash will use them; otherwise it will emulate them +special files, Bash will use them; otherwise it will emulate them internally with the behavior described below. </p> -<dl compact="compact"> -<dt><span><code>/dev/fd/<var>fd</var></code></span></dt> -<dd><p>If <var>fd</var> is a valid integer, file descriptor <var>fd</var> is duplicated. +<dl class="table"> +<dt><code class="code">/dev/fd/<var class="var">fd</var></code></dt> +<dd><p>If <var class="var">fd</var> is a valid integer, file descriptor <var class="var">fd</var> is duplicated. </p> </dd> -<dt><span><code>/dev/stdin</code></span></dt> +<dt><code class="code">/dev/stdin</code></dt> <dd><p>File descriptor 0 is duplicated. </p> </dd> -<dt><span><code>/dev/stdout</code></span></dt> +<dt><code class="code">/dev/stdout</code></dt> <dd><p>File descriptor 1 is duplicated. </p> </dd> -<dt><span><code>/dev/stderr</code></span></dt> +<dt><code class="code">/dev/stderr</code></dt> <dd><p>File descriptor 2 is duplicated. </p> </dd> -<dt><span><code>/dev/tcp/<var>host</var>/<var>port</var></code></span></dt> -<dd><p>If <var>host</var> is a valid hostname or Internet address, and <var>port</var> +<dt><code class="code">/dev/tcp/<var class="var">host</var>/<var class="var">port</var></code></dt> +<dd><p>If <var class="var">host</var> is a valid hostname or Internet address, and <var class="var">port</var> is an integer port number or service name, Bash attempts to open the corresponding TCP socket. </p> </dd> -<dt><span><code>/dev/udp/<var>host</var>/<var>port</var></code></span></dt> -<dd><p>If <var>host</var> is a valid hostname or Internet address, and <var>port</var> +<dt><code class="code">/dev/udp/<var class="var">host</var>/<var class="var">port</var></code></dt> +<dd><p>If <var class="var">host</var> is a valid hostname or Internet address, and <var class="var">port</var> is an integer port number or service name, Bash attempts to open the corresponding UDP socket. </p></dd> @@ -3526,7 +3608,7 @@ the corresponding UDP socket. care, as they may conflict with file descriptors the shell uses internally. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Redirecting-Input" accesskey="1">Redirecting Input</a></li> <li><a href="#Redirecting-Output" accesskey="2">Redirecting Output</a></li> <li><a href="#Appending-Redirected-Output" accesskey="3">Appending Redirected Output</a></li> @@ -3538,227 +3620,230 @@ internally. <li><a href="#Moving-File-Descriptors" accesskey="9">Moving File Descriptors</a></li> <li><a href="#Opening-File-Descriptors-for-Reading-and-Writing">Opening File Descriptors for Reading and Writing</a></li> </ul> -<div class="subsection" id="Redirecting-Input"> -<h4 class="subsection">3.6.1 Redirecting Input</h4> +<div class="subsection-level-extent" id="Redirecting-Input"> +<h4 class="subsection"><span>3.6.1 Redirecting Input<a class="copiable-link" href="#Redirecting-Input"> &para;</a></span></h4> <p>Redirection of input causes the file whose name results from -the expansion of <var>word</var> -to be opened for reading on file descriptor <code>n</code>, -or the standard input (file descriptor 0) if <code>n</code> +the expansion of <var class="var">word</var> +to be opened for reading on file descriptor <code class="code">n</code>, +or the standard input (file descriptor 0) if <code class="code">n</code> is not specified. </p> <p>The general format for redirecting input is: </p><div class="example"> -<pre class="example">[<var>n</var>]&lt;<var>word</var> +<pre class="example-preformatted">[<var class="var">n</var>]&lt;<var class="var">word</var> </pre></div> </div> -<div class="subsection" id="Redirecting-Output"> -<h4 class="subsection">3.6.2 Redirecting Output</h4> +<div class="subsection-level-extent" id="Redirecting-Output"> +<h4 class="subsection"><span>3.6.2 Redirecting Output<a class="copiable-link" href="#Redirecting-Output"> &para;</a></span></h4> <p>Redirection of output causes the file whose name results from -the expansion of <var>word</var> -to be opened for writing on file descriptor <var>n</var>, -or the standard output (file descriptor 1) if <var>n</var> +the expansion of <var class="var">word</var> +to be opened for writing on file descriptor <var class="var">n</var>, +or the standard output (file descriptor 1) if <var class="var">n</var> is not specified. If the file does not exist it is created; if it does exist it is truncated to zero size. </p> <p>The general format for redirecting output is: </p><div class="example"> -<pre class="example">[<var>n</var>]&gt;[|]<var>word</var> +<pre class="example-preformatted">[<var class="var">n</var>]&gt;[|]<var class="var">word</var> </pre></div> -<p>If the redirection operator is &lsquo;<samp>&gt;</samp>&rsquo;, and the <code>noclobber</code> -option to the <code>set</code> builtin has been enabled, the redirection +<p>If the redirection operator is &lsquo;<samp class="samp">&gt;</samp>&rsquo;, and the <code class="code">noclobber</code> +option to the <code class="code">set</code> builtin has been enabled, the redirection will fail if the file whose name results from the expansion of -<var>word</var> exists and is a regular file. -If the redirection operator is &lsquo;<samp>&gt;|</samp>&rsquo;, or the redirection operator is -&lsquo;<samp>&gt;</samp>&rsquo; and the <code>noclobber</code> option is not enabled, the redirection -is attempted even if the file named by <var>word</var> exists. +<var class="var">word</var> exists and is a regular file. +If the redirection operator is &lsquo;<samp class="samp">&gt;|</samp>&rsquo;, or the redirection operator is +&lsquo;<samp class="samp">&gt;</samp>&rsquo; and the <code class="code">noclobber</code> option is not enabled, the redirection +is attempted even if the file named by <var class="var">word</var> exists. </p> </div> -<div class="subsection" id="Appending-Redirected-Output"> -<h4 class="subsection">3.6.3 Appending Redirected Output</h4> +<div class="subsection-level-extent" id="Appending-Redirected-Output"> +<h4 class="subsection"><span>3.6.3 Appending Redirected Output<a class="copiable-link" href="#Appending-Redirected-Output"> &para;</a></span></h4> <p>Redirection of output in this fashion causes the file whose name results from -the expansion of <var>word</var> -to be opened for appending on file descriptor <var>n</var>, -or the standard output (file descriptor 1) if <var>n</var> +the expansion of <var class="var">word</var> +to be opened for appending on file descriptor <var class="var">n</var>, +or the standard output (file descriptor 1) if <var class="var">n</var> is not specified. If the file does not exist it is created. </p> <p>The general format for appending output is: </p><div class="example"> -<pre class="example">[<var>n</var>]&gt;&gt;<var>word</var> +<pre class="example-preformatted">[<var class="var">n</var>]&gt;&gt;<var class="var">word</var> </pre></div> </div> -<div class="subsection" id="Redirecting-Standard-Output-and-Standard-Error"> -<h4 class="subsection">3.6.4 Redirecting Standard Output and Standard Error</h4> +<div class="subsection-level-extent" id="Redirecting-Standard-Output-and-Standard-Error"> +<h4 class="subsection"><span>3.6.4 Redirecting Standard Output and Standard Error<a class="copiable-link" href="#Redirecting-Standard-Output-and-Standard-Error"> &para;</a></span></h4> <p>This construct allows both the standard output (file descriptor 1) and the standard error output (file descriptor 2) to be redirected to the file whose name is the -expansion of <var>word</var>. +expansion of <var class="var">word</var>. </p> <p>There are two formats for redirecting standard output and standard error: </p><div class="example"> -<pre class="example">&amp;&gt;<var>word</var> +<pre class="example-preformatted">&amp;&gt;<var class="var">word</var> </pre></div> <p>and </p><div class="example"> -<pre class="example">&gt;&amp;<var>word</var> +<pre class="example-preformatted">&gt;&amp;<var class="var">word</var> </pre></div> <p>Of the two forms, the first is preferred. This is semantically equivalent to </p><div class="example"> -<pre class="example">&gt;<var>word</var> 2&gt;&amp;1 +<pre class="example-preformatted">&gt;<var class="var">word</var> 2&gt;&amp;1 </pre></div> -<p>When using the second form, <var>word</var> may not expand to a number or -&lsquo;<samp>-</samp>&rsquo;. If it does, other redirection operators apply +<p>When using the second form, <var class="var">word</var> may not expand to a number or +&lsquo;<samp class="samp">-</samp>&rsquo;. If it does, other redirection operators apply (see Duplicating File Descriptors below) for compatibility reasons. </p> </div> -<div class="subsection" id="Appending-Standard-Output-and-Standard-Error"> -<h4 class="subsection">3.6.5 Appending Standard Output and Standard Error</h4> +<div class="subsection-level-extent" id="Appending-Standard-Output-and-Standard-Error"> +<h4 class="subsection"><span>3.6.5 Appending Standard Output and Standard Error<a class="copiable-link" href="#Appending-Standard-Output-and-Standard-Error"> &para;</a></span></h4> <p>This construct allows both the standard output (file descriptor 1) and the standard error output (file descriptor 2) to be appended to the file whose name is the -expansion of <var>word</var>. +expansion of <var class="var">word</var>. </p> <p>The format for appending standard output and standard error is: </p><div class="example"> -<pre class="example">&amp;&gt;&gt;<var>word</var> +<pre class="example-preformatted">&amp;&gt;&gt;<var class="var">word</var> </pre></div> <p>This is semantically equivalent to </p><div class="example"> -<pre class="example">&gt;&gt;<var>word</var> 2&gt;&amp;1 +<pre class="example-preformatted">&gt;&gt;<var class="var">word</var> 2&gt;&amp;1 </pre></div> <p>(see Duplicating File Descriptors below). </p> </div> -<div class="subsection" id="Here-Documents"> -<h4 class="subsection">3.6.6 Here Documents</h4> +<div class="subsection-level-extent" id="Here-Documents"> +<h4 class="subsection"><span>3.6.6 Here Documents<a class="copiable-link" href="#Here-Documents"> &para;</a></span></h4> <p>This type of redirection instructs the shell to read input from the -current source until a line containing only <var>word</var> -(with no trailing blanks) is seen. All of -the lines read up to that point are then used as the standard -input (or file descriptor <var>n</var> if <var>n</var> is specified) for a command. +current source until it reads a line containing only <var class="var">delimiter</var> +(with no trailing blanks). +All of the lines read up to that point are then used as the standard +input (or file descriptor <var class="var">n</var> if <var class="var">n</var> is specified) for a command. </p> <p>The format of here-documents is: </p><div class="example"> -<pre class="example">[<var>n</var>]&lt;&lt;[-]<var>word</var> - <var>here-document</var> -<var>delimiter</var> +<pre class="example-preformatted">[<var class="var">n</var>]&lt;&lt;[&minus;]<var class="var">word</var> + <var class="var">here-document</var> +<var class="var">delimiter</var> </pre></div> <p>No parameter and variable expansion, command substitution, arithmetic expansion, or filename expansion is performed on -<var>word</var>. If any part of <var>word</var> is quoted, the -<var>delimiter</var> is the result of quote removal on <var>word</var>, +<var class="var">word</var>. +</p> +<p>If any part of <var class="var">word</var> is quoted, the +<var class="var">delimiter</var> is the result of quote removal on <var class="var">word</var>, and the lines in the here-document are not expanded. -If <var>word</var> is unquoted, +If <var class="var">word</var> is unquoted, +<var class="var">delimiter</var> is <var class="var">word</var> itself, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion, -the character sequence <code>\newline</code> is ignored, and &lsquo;<samp>\</samp>&rsquo; +the character sequence <code class="code">\newline</code> is ignored, and &lsquo;<samp class="samp">\</samp>&rsquo; must be used to quote the characters -&lsquo;<samp>\</samp>&rsquo;, &lsquo;<samp>$</samp>&rsquo;, and &lsquo;<samp>`</samp>&rsquo;. +&lsquo;<samp class="samp">\</samp>&rsquo;, &lsquo;<samp class="samp">$</samp>&rsquo;, and &lsquo;<samp class="samp">`</samp>&rsquo;. </p> -<p>If the redirection operator is &lsquo;<samp>&lt;&lt;-</samp>&rsquo;, +<p>If the redirection operator is &lsquo;<samp class="samp">&lt;&lt;-</samp>&rsquo;, then all leading tab characters are stripped from input lines and the -line containing <var>delimiter</var>. +line containing <var class="var">delimiter</var>. This allows here-documents within shell scripts to be indented in a natural fashion. </p> </div> -<div class="subsection" id="Here-Strings"> -<h4 class="subsection">3.6.7 Here Strings</h4> +<div class="subsection-level-extent" id="Here-Strings"> +<h4 class="subsection"><span>3.6.7 Here Strings<a class="copiable-link" href="#Here-Strings"> &para;</a></span></h4> <p>A variant of here documents, the format is: </p><div class="example"> -<pre class="example">[<var>n</var>]&lt;&lt;&lt; <var>word</var> +<pre class="example-preformatted">[<var class="var">n</var>]&lt;&lt;&lt; <var class="var">word</var> </pre></div> -<p>The <var>word</var> undergoes +<p>The <var class="var">word</var> undergoes tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, and quote removal. Filename expansion and word splitting are not performed. The result is supplied as a single string, with a newline appended, to the command on its -standard input (or file descriptor <var>n</var> if <var>n</var> is specified). +standard input (or file descriptor <var class="var">n</var> if <var class="var">n</var> is specified). </p> </div> -<div class="subsection" id="Duplicating-File-Descriptors"> -<h4 class="subsection">3.6.8 Duplicating File Descriptors</h4> +<div class="subsection-level-extent" id="Duplicating-File-Descriptors"> +<h4 class="subsection"><span>3.6.8 Duplicating File Descriptors<a class="copiable-link" href="#Duplicating-File-Descriptors"> &para;</a></span></h4> <p>The redirection operator </p><div class="example"> -<pre class="example">[<var>n</var>]&lt;&amp;<var>word</var> +<pre class="example-preformatted">[<var class="var">n</var>]&lt;&amp;<var class="var">word</var> </pre></div> <p>is used to duplicate input file descriptors. -If <var>word</var> -expands to one or more digits, the file descriptor denoted by <var>n</var> +If <var class="var">word</var> +expands to one or more digits, the file descriptor denoted by <var class="var">n</var> is made to be a copy of that file descriptor. -If the digits in <var>word</var> do not specify a file descriptor open for +If the digits in <var class="var">word</var> do not specify a file descriptor open for input, a redirection error occurs. -If <var>word</var> -evaluates to &lsquo;<samp>-</samp>&rsquo;, file descriptor <var>n</var> is closed. -If <var>n</var> is not specified, the standard input (file descriptor 0) is used. +If <var class="var">word</var> +evaluates to &lsquo;<samp class="samp">-</samp>&rsquo;, file descriptor <var class="var">n</var> is closed. +If <var class="var">n</var> is not specified, the standard input (file descriptor 0) is used. </p> <p>The operator </p><div class="example"> -<pre class="example">[<var>n</var>]&gt;&amp;<var>word</var> +<pre class="example-preformatted">[<var class="var">n</var>]&gt;&amp;<var class="var">word</var> </pre></div> <p>is used similarly to duplicate output file descriptors. If -<var>n</var> is not specified, the standard output (file descriptor 1) is used. -If the digits in <var>word</var> do not specify a file descriptor open for +<var class="var">n</var> is not specified, the standard output (file descriptor 1) is used. +If the digits in <var class="var">word</var> do not specify a file descriptor open for output, a redirection error occurs. -If <var>word</var> -evaluates to &lsquo;<samp>-</samp>&rsquo;, file descriptor <var>n</var> is closed. -As a special case, if <var>n</var> is omitted, and <var>word</var> does not -expand to one or more digits or &lsquo;<samp>-</samp>&rsquo;, the standard output and standard +If <var class="var">word</var> +evaluates to &lsquo;<samp class="samp">-</samp>&rsquo;, file descriptor <var class="var">n</var> is closed. +As a special case, if <var class="var">n</var> is omitted, and <var class="var">word</var> does not +expand to one or more digits or &lsquo;<samp class="samp">-</samp>&rsquo;, the standard output and standard error are redirected as described previously. </p> </div> -<div class="subsection" id="Moving-File-Descriptors"> -<h4 class="subsection">3.6.9 Moving File Descriptors</h4> +<div class="subsection-level-extent" id="Moving-File-Descriptors"> +<h4 class="subsection"><span>3.6.9 Moving File Descriptors<a class="copiable-link" href="#Moving-File-Descriptors"> &para;</a></span></h4> <p>The redirection operator </p><div class="example"> -<pre class="example">[<var>n</var>]&lt;&amp;<var>digit</var>- +<pre class="example-preformatted">[<var class="var">n</var>]&lt;&amp;<var class="var">digit</var>- </pre></div> -<p>moves the file descriptor <var>digit</var> to file descriptor <var>n</var>, -or the standard input (file descriptor 0) if <var>n</var> is not specified. -<var>digit</var> is closed after being duplicated to <var>n</var>. +<p>moves the file descriptor <var class="var">digit</var> to file descriptor <var class="var">n</var>, +or the standard input (file descriptor 0) if <var class="var">n</var> is not specified. +<var class="var">digit</var> is closed after being duplicated to <var class="var">n</var>. </p> <p>Similarly, the redirection operator </p><div class="example"> -<pre class="example">[<var>n</var>]&gt;&amp;<var>digit</var>- +<pre class="example-preformatted">[<var class="var">n</var>]&gt;&amp;<var class="var">digit</var>- </pre></div> -<p>moves the file descriptor <var>digit</var> to file descriptor <var>n</var>, -or the standard output (file descriptor 1) if <var>n</var> is not specified. +<p>moves the file descriptor <var class="var">digit</var> to file descriptor <var class="var">n</var>, +or the standard output (file descriptor 1) if <var class="var">n</var> is not specified. </p> </div> -<div class="subsection" id="Opening-File-Descriptors-for-Reading-and-Writing"> -<h4 class="subsection">3.6.10 Opening File Descriptors for Reading and Writing</h4> +<div class="subsection-level-extent" id="Opening-File-Descriptors-for-Reading-and-Writing"> +<h4 class="subsection"><span>3.6.10 Opening File Descriptors for Reading and Writing<a class="copiable-link" href="#Opening-File-Descriptors-for-Reading-and-Writing"> &para;</a></span></h4> <p>The redirection operator </p><div class="example"> -<pre class="example">[<var>n</var>]&lt;&gt;<var>word</var> +<pre class="example-preformatted">[<var class="var">n</var>]&lt;&gt;<var class="var">word</var> </pre></div> -<p>causes the file whose name is the expansion of <var>word</var> +<p>causes the file whose name is the expansion of <var class="var">word</var> to be opened for both reading and writing on file descriptor -<var>n</var>, or on file descriptor 0 if <var>n</var> +<var class="var">n</var>, or on file descriptor 0 if <var class="var">n</var> is not specified. If the file does not exist, it is created. </p> <hr> </div> </div> -<div class="section" id="Executing-Commands"> -<div class="header"> +<div class="section-level-extent" id="Executing-Commands"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Scripts" accesskey="n" rel="next">Shell Scripts</a>, Previous: <a href="#Redirections" accesskey="p" rel="prev">Redirections</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Executing-Commands-1"></span><h3 class="section">3.7 Executing Commands</h3> +<h3 class="section" id="Executing-Commands-1"><span>3.7 Executing Commands<a class="copiable-link" href="#Executing-Commands-1"> &para;</a></span></h3> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Simple-Command-Expansion" accesskey="1">Simple Command Expansion</a></li> <li><a href="#Command-Search-and-Execution" accesskey="2">Command Search and Execution</a></li> <li><a href="#Command-Execution-Environment" accesskey="3">Command Execution Environment</a></li> @@ -3767,32 +3852,32 @@ Next: <a href="#Shell-Scripts" accesskey="n" rel="next">Shell Scripts</a>, Previ <li><a href="#Signals" accesskey="6">Signals</a></li> </ul> <hr> -<div class="subsection" id="Simple-Command-Expansion"> -<div class="header"> +<div class="subsection-level-extent" id="Simple-Command-Expansion"> +<div class="nav-panel"> <p> Next: <a href="#Command-Search-and-Execution" accesskey="n" rel="next">Command Search and Execution</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Simple-Command-Expansion-1"></span><h4 class="subsection">3.7.1 Simple Command Expansion</h4> -<span id="index-command-expansion"></span> +<h4 class="subsection" id="Simple-Command-Expansion-1"><span>3.7.1 Simple Command Expansion<a class="copiable-link" href="#Simple-Command-Expansion-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-command-expansion"></a> <p>When a simple command is executed, the shell performs the following expansions, assignments, and redirections, from left to right, in the following order. </p> -<ol> +<ol class="enumerate"> <li> The words that the parser has marked as variable assignments (those preceding the command name) and redirections are saved for later processing. </li><li> The words that are not variable assignments or redirections are -expanded (see <a href="#Shell-Expansions">Shell Expansions</a>). +expanded (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>). If any words remain after expansion, the first word is taken to be the name of the command and the remaining words are the arguments. -</li><li> Redirections are performed as described above (see <a href="#Redirections">Redirections</a>). +</li><li> Redirections are performed as described above (see <a class="pxref" href="#Redirections">Redirections</a>). -</li><li> The text after the &lsquo;<samp>=</samp>&rsquo; in each variable assignment undergoes tilde +</li><li> The text after the &lsquo;<samp class="samp">=</samp>&rsquo; in each variable assignment undergoes tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal before being assigned to the variable. </li></ol> @@ -3819,23 +3904,23 @@ were no command substitutions, the command exits with a status of zero. </p> <hr> </div> -<div class="subsection" id="Command-Search-and-Execution"> -<div class="header"> +<div class="subsection-level-extent" id="Command-Search-and-Execution"> +<div class="nav-panel"> <p> Next: <a href="#Command-Execution-Environment" accesskey="n" rel="next">Command Execution Environment</a>, Previous: <a href="#Simple-Command-Expansion" accesskey="p" rel="prev">Simple Command Expansion</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Command-Search-and-Execution-1"></span><h4 class="subsection">3.7.2 Command Search and Execution</h4> -<span id="index-command-execution"></span> -<span id="index-command-search"></span> +<h4 class="subsection" id="Command-Search-and-Execution-1"><span>3.7.2 Command Search and Execution<a class="copiable-link" href="#Command-Search-and-Execution-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-command-execution"></a> +<a class="index-entry-id" id="index-command-search"></a> <p>After a command has been split into words, if it results in a -simple command and an optional list of arguments, the following -actions are taken. +simple command and an optional list of arguments, the shell performs +the following actions. </p> -<ol> +<ol class="enumerate"> <li> If the command name contains no slashes, the shell attempts to locate it. If there exists a shell function by that name, that -function is invoked as described in <a href="#Shell-Functions">Shell Functions</a>. +function is invoked as described in <a class="ref" href="#Shell-Functions">Shell Functions</a>. </li><li> If the name does not match a function, the shell searches for it in the list of shell builtins. If a match is found, that @@ -3843,14 +3928,14 @@ builtin is invoked. </li><li> If the name is neither a shell function nor a builtin, and contains no slashes, Bash searches each element of -<code>$PATH</code> for a directory containing an executable file +<code class="env">$PATH</code> for a directory containing an executable file by that name. Bash uses a hash table to remember the full -pathnames of executable files to avoid multiple <code>PATH</code> searches -(see the description of <code>hash</code> in <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). -A full search of the directories in <code>$PATH</code> +pathnames of executable files to avoid multiple <code class="env">PATH</code> searches +(see the description of <code class="code">hash</code> in <a class="ref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +A full search of the directories in <code class="env">$PATH</code> is performed only if the command is not found in the hash table. If the search is unsuccessful, the shell searches for a defined shell -function named <code>command_not_found_handle</code>. +function named <code class="code">command_not_found_handle</code>. If that function exists, it is invoked in a separate execution environment with the original command and the original command&rsquo;s arguments as its arguments, and the function&rsquo;s @@ -3866,8 +3951,8 @@ to the command are set to the arguments supplied, if any. </li><li> If this execution fails because the file is not in executable format, and the file is not a directory, it is assumed to be a -<em>shell script</em> and the shell executes it as described in -<a href="#Shell-Scripts">Shell Scripts</a>. +<em class="dfn">shell script</em> and the shell executes it as described in +<a class="ref" href="#Shell-Scripts">Shell Scripts</a>. </li><li> If the command was not begun asynchronously, the shell waits for the command to complete and collects its exit status. @@ -3876,45 +3961,45 @@ the command to complete and collects its exit status. <hr> </div> -<div class="subsection" id="Command-Execution-Environment"> -<div class="header"> +<div class="subsection-level-extent" id="Command-Execution-Environment"> +<div class="nav-panel"> <p> Next: <a href="#Environment" accesskey="n" rel="next">Environment</a>, Previous: <a href="#Command-Search-and-Execution" accesskey="p" rel="prev">Command Search and Execution</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Command-Execution-Environment-1"></span><h4 class="subsection">3.7.3 Command Execution Environment</h4> -<span id="index-execution-environment"></span> +<h4 class="subsection" id="Command-Execution-Environment-1"><span>3.7.3 Command Execution Environment<a class="copiable-link" href="#Command-Execution-Environment-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-execution-environment"></a> -<p>The shell has an <em>execution environment</em>, which consists of the +<p>The shell has an <em class="dfn">execution environment</em>, which consists of the following: </p> -<ul> -<li> open files inherited by the shell at invocation, as modified by -redirections supplied to the <code>exec</code> builtin +<ul class="itemize mark-bullet"> +<li>open files inherited by the shell at invocation, as modified by +redirections supplied to the <code class="code">exec</code> builtin -</li><li> the current working directory as set by <code>cd</code>, <code>pushd</code>, or -<code>popd</code>, or inherited by the shell at invocation +</li><li>the current working directory as set by <code class="code">cd</code>, <code class="code">pushd</code>, or +<code class="code">popd</code>, or inherited by the shell at invocation -</li><li> the file creation mode mask as set by <code>umask</code> or inherited from +</li><li>the file creation mode mask as set by <code class="code">umask</code> or inherited from the shell&rsquo;s parent -</li><li> current traps set by <code>trap</code> +</li><li>current traps set by <code class="code">trap</code> -</li><li> shell parameters that are set by variable assignment or with <code>set</code> +</li><li>shell parameters that are set by variable assignment or with <code class="code">set</code> or inherited from the shell&rsquo;s parent in the environment -</li><li> shell functions defined during execution or inherited from the shell&rsquo;s +</li><li>shell functions defined during execution or inherited from the shell&rsquo;s parent in the environment -</li><li> options enabled at invocation (either by default or with command-line -arguments) or by <code>set</code> +</li><li>options enabled at invocation (either by default or with command-line +arguments) or by <code class="code">set</code> -</li><li> options enabled by <code>shopt</code> (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) +</li><li>options enabled by <code class="code">shopt</code> (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) -</li><li> shell aliases defined with <code>alias</code> (see <a href="#Aliases">Aliases</a>) +</li><li>shell aliases defined with <code class="code">alias</code> (see <a class="pxref" href="#Aliases">Aliases</a>) -</li><li> various process <small>ID</small>s, including those of background jobs -(see <a href="#Lists">Lists of Commands</a>), the value of <code>$$</code>, and the value of -<code>$PPID</code> +</li><li>various process <small class="sc">ID</small>s, including those of background jobs +(see <a class="pxref" href="#Lists">Lists of Commands</a>), the value of <code class="code">$$</code>, and the value of +<code class="env">$PPID</code> </li></ul> @@ -3924,18 +4009,18 @@ is invoked in a separate execution environment that consists of the following. Unless otherwise noted, the values are inherited from the shell. </p> -<ul> -<li> the shell&rsquo;s open files, plus any modifications and additions specified +<ul class="itemize mark-bullet"> +<li>the shell&rsquo;s open files, plus any modifications and additions specified by redirections to the command -</li><li> the current working directory +</li><li>the current working directory -</li><li> the file creation mode mask +</li><li>the file creation mode mask -</li><li> shell variables and functions marked for export, along with variables -exported for the command, passed in the environment (see <a href="#Environment">Environment</a>) +</li><li>shell variables and functions marked for export, along with variables +exported for the command, passed in the environment (see <a class="pxref" href="#Environment">Environment</a>) -</li><li> traps caught by the shell are reset to the values inherited from the +</li><li>traps caught by the shell are reset to the values inherited from the shell&rsquo;s parent, and traps ignored by the shell are ignored </li></ul> @@ -3943,7 +4028,7 @@ shell&rsquo;s parent, and traps ignored by the shell are ignored <p>A command invoked in this separate environment cannot affect the shell&rsquo;s execution environment. </p> -<p>A <em>subshell</em> is a copy of the shell process. +<p>A <em class="dfn">subshell</em> is a copy of the shell process. </p> <p>Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a @@ -3954,71 +4039,76 @@ commands that are invoked as part of a pipeline are also executed in a subshell environment. Changes made to the subshell environment cannot affect the shell&rsquo;s execution environment. </p> -<p>Subshells spawned to execute command substitutions inherit the value of -the <samp>-e</samp> option from the parent shell. When not in <small>POSIX</small> mode, -Bash clears the <samp>-e</samp> option in such subshells. -</p> -<p>If a command is followed by a &lsquo;<samp>&amp;</samp>&rsquo; and job control is not active, the -default standard input for the command is the empty file <samp>/dev/null</samp>. +<p>When the shell is in <small class="sc">POSIX</small> mode, +subshells spawned to execute command substitutions inherit the value of +the <samp class="option">-e</samp> option from the parent shell. +When not in <small class="sc">POSIX</small> mode, +Bash clears the <samp class="option">-e</samp> option in such subshells +See the description of the <code class="code">inherit_errexit</code> shell option +(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>) for how to control this behavior when not +in <small class="sc">POSIX</small> mode. +</p> +<p>If a command is followed by a &lsquo;<samp class="samp">&amp;</samp>&rsquo; and job control is not active, the +default standard input for the command is the empty file <samp class="file">/dev/null</samp>. Otherwise, the invoked command inherits the file descriptors of the calling shell as modified by redirections. </p> <hr> </div> -<div class="subsection" id="Environment"> -<div class="header"> +<div class="subsection-level-extent" id="Environment"> +<div class="nav-panel"> <p> Next: <a href="#Exit-Status" accesskey="n" rel="next">Exit Status</a>, Previous: <a href="#Command-Execution-Environment" accesskey="p" rel="prev">Command Execution Environment</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Environment-1"></span><h4 class="subsection">3.7.4 Environment</h4> -<span id="index-environment"></span> +<h4 class="subsection" id="Environment-1"><span>3.7.4 Environment<a class="copiable-link" href="#Environment-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-environment"></a> <p>When a program is invoked it is given an array of strings -called the <em>environment</em>. -This is a list of name-value pairs, of the form <code>name=value</code>. +called the <em class="dfn">environment</em>. +This is a list of name-value pairs, of the form <code class="code">name=value</code>. </p> <p>Bash provides several ways to manipulate the environment. On invocation, the shell scans its own environment and creates a parameter for each name found, automatically marking -it for <code>export</code> +it for <code class="code">export</code> to child processes. Executed commands inherit the environment. -The <code>export</code> and &lsquo;<samp>declare -x</samp>&rsquo; +The <code class="code">export</code> and &lsquo;<samp class="samp">declare -x</samp>&rsquo; commands allow parameters and functions to be added to and deleted from the environment. If the value of a parameter in the environment is modified, the new value becomes part of the environment, replacing the old. The environment inherited by any executed command consists of the shell&rsquo;s initial environment, whose values may be modified in the shell, -less any pairs removed by the <code>unset</code> and &lsquo;<samp>export -n</samp>&rsquo; -commands, plus any additions via the <code>export</code> and -&lsquo;<samp>declare -x</samp>&rsquo; commands. +less any pairs removed by the <code class="code">unset</code> and &lsquo;<samp class="samp">export -n</samp>&rsquo; +commands, plus any additions via the <code class="code">export</code> and +&lsquo;<samp class="samp">declare -x</samp>&rsquo; commands. </p> <p>The environment for any simple command or function may be augmented temporarily by prefixing it with -parameter assignments, as described in <a href="#Shell-Parameters">Shell Parameters</a>. +parameter assignments, as described in <a class="ref" href="#Shell-Parameters">Shell Parameters</a>. These assignment statements affect only the environment seen by that command. </p> -<p>If the <samp>-k</samp> option is set (see <a href="#The-Set-Builtin">The Set Builtin</a>), then all +<p>If the <samp class="option">-k</samp> option is set (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>), then all parameter assignments are placed in the environment for a command, not just those that precede the command name. </p> -<p>When Bash invokes an external command, the variable &lsquo;<samp>$_</samp>&rsquo; +<p>When Bash invokes an external command, the variable &lsquo;<samp class="samp">$_</samp>&rsquo; is set to the full pathname of the command and passed to that command in its environment. </p> <hr> </div> -<div class="subsection" id="Exit-Status"> -<div class="header"> +<div class="subsection-level-extent" id="Exit-Status"> +<div class="nav-panel"> <p> Next: <a href="#Signals" accesskey="n" rel="next">Signals</a>, Previous: <a href="#Environment" accesskey="p" rel="prev">Environment</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Exit-Status-1"></span><h4 class="subsection">3.7.5 Exit Status</h4> -<span id="index-exit-status-1"></span> +<h4 class="subsection" id="Exit-Status-1"><span>3.7.5 Exit Status<a class="copiable-link" href="#Exit-Status-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-exit-status-1"></a> <p>The exit status of an executed command is the value returned by the -<code>waitpid</code> system call or equivalent function. Exit statuses +<code class="code">waitpid</code> system call or equivalent function. Exit statuses fall between 0 and 255, though, as explained below, the shell may use values above 125 specially. Exit statuses from shell builtins and compound commands are also limited to this range. Under certain @@ -4031,8 +4121,8 @@ A non-zero exit status indicates failure. This seemingly counter-intuitive scheme is used so there is one well-defined way to indicate success and a variety of ways to indicate various failure modes. -When a command terminates on a fatal signal whose number is <var>N</var>, -Bash uses the value 128+<var>N</var> as the exit status. +When a command terminates on a fatal signal whose number is <var class="var">N</var>, +Bash uses the value 128+<var class="var">N</var> as the exit status. </p> <p>If a command is not found, the child process created to execute it returns a status of 127. If a command is found @@ -4042,8 +4132,8 @@ but is not executable, the return status is 126. the exit status is greater than zero. </p> <p>The exit status is used by the Bash conditional commands -(see <a href="#Conditional-Constructs">Conditional Constructs</a>) and some of the list -constructs (see <a href="#Lists">Lists of Commands</a>). +(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>) and some of the list +constructs (see <a class="pxref" href="#Lists">Lists of Commands</a>). </p> <p>All of the Bash builtins return an exit status of zero if they succeed and a non-zero status on failure, so they may be used by the @@ -4052,85 +4142,85 @@ All builtins return an exit status of 2 to indicate incorrect usage, generally invalid options or missing arguments. </p> <p>The exit status of the last command is available in the special -parameter $? (see <a href="#Special-Parameters">Special Parameters</a>). +parameter $? (see <a class="pxref" href="#Special-Parameters">Special Parameters</a>). </p> <hr> </div> -<div class="subsection" id="Signals"> -<div class="header"> +<div class="subsection-level-extent" id="Signals"> +<div class="nav-panel"> <p> Previous: <a href="#Exit-Status" accesskey="p" rel="prev">Exit Status</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Signals-1"></span><h4 class="subsection">3.7.6 Signals</h4> -<span id="index-signal-handling"></span> +<h4 class="subsection" id="Signals-1"><span>3.7.6 Signals<a class="copiable-link" href="#Signals-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-signal-handling"></a> <p>When Bash is interactive, in the absence of any traps, it ignores -<code>SIGTERM</code> (so that &lsquo;<samp>kill 0</samp>&rsquo; does not kill an interactive shell), -and <code>SIGINT</code> -is caught and handled (so that the <code>wait</code> builtin is interruptible). -When Bash receives a <code>SIGINT</code>, it breaks out of any executing loops. -In all cases, Bash ignores <code>SIGQUIT</code>. -If job control is in effect (see <a href="#Job-Control">Job Control</a>), Bash -ignores <code>SIGTTIN</code>, <code>SIGTTOU</code>, and <code>SIGTSTP</code>. +<code class="code">SIGTERM</code> (so that &lsquo;<samp class="samp">kill 0</samp>&rsquo; does not kill an interactive shell), +and <code class="code">SIGINT</code> +is caught and handled (so that the <code class="code">wait</code> builtin is interruptible). +When Bash receives a <code class="code">SIGINT</code>, it breaks out of any executing loops. +In all cases, Bash ignores <code class="code">SIGQUIT</code>. +If job control is in effect (see <a class="pxref" href="#Job-Control">Job Control</a>), Bash +ignores <code class="code">SIGTTIN</code>, <code class="code">SIGTTOU</code>, and <code class="code">SIGTSTP</code>. </p> <p>Non-builtin commands started by Bash have signal handlers set to the values inherited by the shell from its parent. When job control is not in effect, asynchronous commands -ignore <code>SIGINT</code> and <code>SIGQUIT</code> in addition to these inherited +ignore <code class="code">SIGINT</code> and <code class="code">SIGQUIT</code> in addition to these inherited handlers. Commands run as a result of command substitution ignore the keyboard-generated job control signals -<code>SIGTTIN</code>, <code>SIGTTOU</code>, and <code>SIGTSTP</code>. +<code class="code">SIGTTIN</code>, <code class="code">SIGTTOU</code>, and <code class="code">SIGTSTP</code>. </p> -<p>The shell exits by default upon receipt of a <code>SIGHUP</code>. -Before exiting, an interactive shell resends the <code>SIGHUP</code> to +<p>The shell exits by default upon receipt of a <code class="code">SIGHUP</code>. +Before exiting, an interactive shell resends the <code class="code">SIGHUP</code> to all jobs, running or stopped. -Stopped jobs are sent <code>SIGCONT</code> to ensure that they receive -the <code>SIGHUP</code>. -To prevent the shell from sending the <code>SIGHUP</code> signal to a +Stopped jobs are sent <code class="code">SIGCONT</code> to ensure that they receive +the <code class="code">SIGHUP</code>. +To prevent the shell from sending the <code class="code">SIGHUP</code> signal to a particular job, it should be removed -from the jobs table with the <code>disown</code> -builtin (see <a href="#Job-Control-Builtins">Job Control Builtins</a>) or marked -to not receive <code>SIGHUP</code> using <code>disown -h</code>. +from the jobs table with the <code class="code">disown</code> +builtin (see <a class="pxref" href="#Job-Control-Builtins">Job Control Builtins</a>) or marked +to not receive <code class="code">SIGHUP</code> using <code class="code">disown -h</code>. </p> -<p>If the <code>huponexit</code> shell option has been set with <code>shopt</code> -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), Bash sends a <code>SIGHUP</code> to all jobs when +<p>If the <code class="code">huponexit</code> shell option has been set with <code class="code">shopt</code> +(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), Bash sends a <code class="code">SIGHUP</code> to all jobs when an interactive login shell exits. </p> <p>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 <code>wait</code> builtin, the reception of a signal for -which a trap has been set will cause the <code>wait</code> builtin to return +command via the <code class="code">wait</code> builtin, the reception of a signal for +which a trap has been set will cause the <code class="code">wait</code> builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed. </p> <p>When job control is not enabled, and Bash is waiting for a foreground command to complete, the shell receives keyboard-generated signals -such as <code>SIGINT</code> (usually generated by &lsquo;<samp>^C</samp>&rsquo;) that users +such as <code class="code">SIGINT</code> (usually generated by &lsquo;<samp class="samp">^C</samp>&rsquo;) that users commonly intend to send to that command. This happens because the shell and the command are in the same process -group as the terminal, and &lsquo;<samp>^C</samp>&rsquo; sends <code>SIGINT</code> to all processes +group as the terminal, and &lsquo;<samp class="samp">^C</samp>&rsquo; sends <code class="code">SIGINT</code> to all processes in that process group. -See <a href="#Job-Control">Job Control</a>, for a more in-depth discussion of process groups. +See <a class="ref" href="#Job-Control">Job Control</a>, for a more in-depth discussion of process groups. </p> -<p>When Bash is running without job control enabled and receives <code>SIGINT</code> +<p>When Bash is running without job control enabled and receives <code class="code">SIGINT</code> while waiting for a foreground command, it waits until that foreground -command terminates and then decides what to do about the <code>SIGINT</code>: +command terminates and then decides what to do about the <code class="code">SIGINT</code>: </p> -<ol> -<li> If the command terminates due to the <code>SIGINT</code>, Bash concludes +<ol class="enumerate"> +<li> If the command terminates due to the <code class="code">SIGINT</code>, Bash concludes that the user meant to end the entire script, and acts on the -<code>SIGINT</code> (e.g., by running a <code>SIGINT</code> trap or exiting itself); +<code class="code">SIGINT</code> (e.g., by running a <code class="code">SIGINT</code> trap or exiting itself); -</li><li> If the pipeline does not terminate due to <code>SIGINT</code>, the program -handled the <code>SIGINT</code> itself and did not treat it as a fatal signal. -In that case, Bash does not treat <code>SIGINT</code> as a fatal signal, -either, instead assuming that the <code>SIGINT</code> was used as part of the -program&rsquo;s normal operation (e.g., <code>emacs</code> uses it to abort editing +</li><li> If the pipeline does not terminate due to <code class="code">SIGINT</code>, the program +handled the <code class="code">SIGINT</code> itself and did not treat it as a fatal signal. +In that case, Bash does not treat <code class="code">SIGINT</code> as a fatal signal, +either, instead assuming that the <code class="code">SIGINT</code> was used as part of the +program&rsquo;s normal operation (e.g., <code class="command">emacs</code> uses it to abort editing commands) or deliberately discarded. However, Bash will run any -trap set on <code>SIGINT</code>, as it does with any other trapped signal it +trap set on <code class="code">SIGINT</code>, as it does with any other trapped signal it receives while it is waiting for the foreground command to complete, for compatibility. </li></ol> @@ -4138,57 +4228,57 @@ complete, for compatibility. <hr> </div> </div> -<div class="section" id="Shell-Scripts"> -<div class="header"> +<div class="section-level-extent" id="Shell-Scripts"> +<div class="nav-panel"> <p> Previous: <a href="#Executing-Commands" accesskey="p" rel="prev">Executing Commands</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Scripts-1"></span><h3 class="section">3.8 Shell Scripts</h3> -<span id="index-shell-script"></span> +<h3 class="section" id="Shell-Scripts-1"><span>3.8 Shell Scripts<a class="copiable-link" href="#Shell-Scripts-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-shell-script"></a> <p>A shell script is a text file containing shell commands. When such a file is used as the first non-option argument when invoking Bash, -and neither the <samp>-c</samp> nor <samp>-s</samp> option is supplied -(see <a href="#Invoking-Bash">Invoking Bash</a>), +and neither the <samp class="option">-c</samp> nor <samp class="option">-s</samp> option is supplied +(see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>), Bash reads and executes commands from the file, then exits. This mode of operation creates a non-interactive shell. The shell first searches for the file in the current directory, and looks in the -directories in <code>$PATH</code> if not found there. +directories in <code class="env">$PATH</code> if not found there. </p> <p>When Bash runs -a shell script, it sets the special parameter <code>0</code> to the name +a shell script, it sets the special parameter <code class="code">0</code> to the name of the file, rather than the name of the shell, and the positional parameters are set to the remaining arguments, if any are given. If no additional arguments are supplied, the positional parameters are unset. </p> -<p>A shell script may be made executable by using the <code>chmod</code> command +<p>A shell script may be made executable by using the <code class="code">chmod</code> command to turn on the execute bit. When Bash finds such a file while -searching the <code>$PATH</code> for a command, it creates a +searching the <code class="env">$PATH</code> for a command, it creates a new instance of itself to execute it. In other words, executing </p><div class="example"> -<pre class="example">filename <var>arguments</var> +<pre class="example-preformatted">filename <var class="var">arguments</var> </pre></div> <p>is equivalent to executing </p><div class="example"> -<pre class="example">bash filename <var>arguments</var> +<pre class="example-preformatted">bash filename <var class="var">arguments</var> </pre></div> -<p>if <code>filename</code> is an executable shell script. +<p>if <code class="code">filename</code> is an executable shell script. This subshell reinitializes itself, so that the effect is as if a new shell had been invoked to interpret the script, with the exception that the locations of commands remembered by the parent -(see the description of <code>hash</code> in <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) +(see the description of <code class="code">hash</code> in <a class="ref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) are retained by the child. </p> <p>Most versions of Unix make this a part of the operating system&rsquo;s command execution mechanism. If the first line of a script begins with -the two characters &lsquo;<samp>#!</samp>&rsquo;, the remainder of the line specifies +the two characters &lsquo;<samp class="samp">#!</samp>&rsquo;, the remainder of the line specifies an interpreter for the program and, depending on the operating system, one or more optional arguments for that interpreter. -Thus, you can specify Bash, <code>awk</code>, Perl, or some other +Thus, you can specify Bash, <code class="code">awk</code>, Perl, or some other interpreter and write the rest of the script file in that language. </p> <p>The arguments to the interpreter @@ -4204,28 +4294,28 @@ Note that some older versions of Unix limit the interpreter name and a single argument to a maximum of 32 characters, so it&rsquo;s not portable to assume that using more than one argument will work. </p> -<p>Bash scripts often begin with <code>#! /bin/bash</code> (assuming that -Bash has been installed in <samp>/bin</samp>), since this ensures that +<p>Bash scripts often begin with <code class="code">#! /bin/bash</code> (assuming that +Bash has been installed in <samp class="file">/bin</samp>), since this ensures that Bash will be used to interpret the script, even if it is executed -under another shell. It&rsquo;s a common idiom to use <code>env</code> to find -<code>bash</code> even if it&rsquo;s been installed in another directory: -<code>#!/usr/bin/env bash</code> will find the first occurrence of <code>bash</code> -in <code>$PATH</code>. +under another shell. It&rsquo;s a common idiom to use <code class="code">env</code> to find +<code class="code">bash</code> even if it&rsquo;s been installed in another directory: +<code class="code">#!/usr/bin/env bash</code> will find the first occurrence of <code class="code">bash</code> +in <code class="env">$PATH</code>. </p> <hr> </div> </div> -<div class="chapter" id="Shell-Builtin-Commands"> -<div class="header"> +<div class="chapter-level-extent" id="Shell-Builtin-Commands"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Variables" accesskey="n" rel="next">Shell Variables</a>, Previous: <a href="#Basic-Shell-Features" accesskey="p" rel="prev">Basic Shell Features</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Builtin-Commands-1"></span><h2 class="chapter">4 Shell Builtin Commands</h2> +<h2 class="chapter" id="Shell-Builtin-Commands-1"><span>4 Shell Builtin Commands<a class="copiable-link" href="#Shell-Builtin-Commands-1"> &para;</a></span></h2> <p>Builtin commands are contained within the shell itself. When the name of a builtin command is used as the first word of -a simple command (see <a href="#Simple-Commands">Simple Commands</a>), the shell executes +a simple command (see <a class="pxref" href="#Simple-Commands">Simple Commands</a>), the shell executes the command directly, without invoking another program. Builtin commands are necessary to implement functionality impossible or inconvenient to obtain with separate utilities. @@ -4236,749 +4326,826 @@ to or have been extended in Bash. </p> <p>Several builtin commands are described in other chapters: builtin commands which provide the Bash interface to the job control -facilities (see <a href="#Job-Control-Builtins">Job Control Builtins</a>), the directory stack -(see <a href="#Directory-Stack-Builtins">Directory Stack Builtins</a>), the command history -(see <a href="#Bash-History-Builtins">Bash History Builtins</a>), and the programmable completion -facilities (see <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>). +facilities (see <a class="pxref" href="#Job-Control-Builtins">Job Control Builtins</a>), the directory stack +(see <a class="pxref" href="#Directory-Stack-Builtins">Directory Stack Builtins</a>), the command history +(see <a class="pxref" href="#Bash-History-Builtins">Bash History Builtins</a>), and the programmable completion +facilities (see <a class="pxref" href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>). </p> -<p>Many of the builtins have been extended by <small>POSIX</small> or Bash. +<p>Many of the builtins have been extended by <small class="sc">POSIX</small> or Bash. </p> <p>Unless otherwise noted, each builtin command documented as accepting -options preceded by &lsquo;<samp>-</samp>&rsquo; accepts &lsquo;<samp>--</samp>&rsquo; +options preceded by &lsquo;<samp class="samp">-</samp>&rsquo; accepts &lsquo;<samp class="samp">--</samp>&rsquo; to signify the end of the options. -The <code>:</code>, <code>true</code>, <code>false</code>, and <code>test</code>/<code>[</code> -builtins do not accept options and do not treat &lsquo;<samp>--</samp>&rsquo; specially. -The <code>exit</code>, <code>logout</code>, <code>return</code>, -<code>break</code>, <code>continue</code>, <code>let</code>, -and <code>shift</code> builtins accept and process arguments beginning -with &lsquo;<samp>-</samp>&rsquo; without requiring &lsquo;<samp>--</samp>&rsquo;. +The <code class="code">:</code>, <code class="code">true</code>, <code class="code">false</code>, and <code class="code">test</code>/<code class="code">[</code> +builtins do not accept options and do not treat &lsquo;<samp class="samp">--</samp>&rsquo; specially. +The <code class="code">exit</code>, <code class="code">logout</code>, <code class="code">return</code>, +<code class="code">break</code>, <code class="code">continue</code>, <code class="code">let</code>, +and <code class="code">shift</code> builtins accept and process arguments beginning +with &lsquo;<samp class="samp">-</samp>&rsquo; without requiring &lsquo;<samp class="samp">--</samp>&rsquo;. Other builtins that accept arguments but are not specified as accepting -options interpret arguments beginning with &lsquo;<samp>-</samp>&rsquo; as invalid options and -require &lsquo;<samp>--</samp>&rsquo; to prevent this interpretation. +options interpret arguments beginning with &lsquo;<samp class="samp">-</samp>&rsquo; as invalid options and +require &lsquo;<samp class="samp">--</samp>&rsquo; to prevent this interpretation. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Bourne-Shell-Builtins" accesskey="1">Bourne Shell Builtins</a></li> <li><a href="#Bash-Builtins" accesskey="2">Bash Builtin Commands</a></li> <li><a href="#Modifying-Shell-Behavior" accesskey="3">Modifying Shell Behavior</a></li> <li><a href="#Special-Builtins" accesskey="4">Special Builtins</a></li> </ul> <hr> -<div class="section" id="Bourne-Shell-Builtins"> -<div class="header"> +<div class="section-level-extent" id="Bourne-Shell-Builtins"> +<div class="nav-panel"> <p> Next: <a href="#Bash-Builtins" accesskey="n" rel="next">Bash Builtin Commands</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bourne-Shell-Builtins-1"></span><h3 class="section">4.1 Bourne Shell Builtins</h3> +<h3 class="section" id="Bourne-Shell-Builtins-1"><span>4.1 Bourne Shell Builtins<a class="copiable-link" href="#Bourne-Shell-Builtins-1"> &para;</a></span></h3> <p>The following shell builtin commands are inherited from the Bourne Shell. -These commands are implemented as specified by the <small>POSIX</small> standard. +These commands are implemented as specified by the <small class="sc">POSIX</small> standard. </p> -<dl compact="compact"> -<dt id='index-_003a'><span><code>: <span class="roman">(a colon)</span></code><a href='#index-_003a' class='copiable-anchor'> &para;</a></span></dt> +<dl class="table"> +<dt><a id="index-_003a"></a><span><code class="code">: <span class="r">(a colon)</span></code><a class="copiable-link" href="#index-_003a"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">: [<var>arguments</var>] +<pre class="example-preformatted">: [<var class="var">arguments</var>] </pre></div> -<p>Do nothing beyond expanding <var>arguments</var> and performing redirections. +<p>Do nothing beyond expanding <var class="var">arguments</var> and performing redirections. The return status is zero. </p> </dd> -<dt id='index-_002e'><span><code>. <span class="roman">(a period)</span></code><a href='#index-_002e' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-_002e"></a><span><code class="code">. <span class="r">(a period)</span></code><a class="copiable-link" href="#index-_002e"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">. <var>filename</var> [<var>arguments</var>] +<pre class="example-preformatted">. <var class="var">filename</var> [<var class="var">arguments</var>] </pre></div> -<p>Read and execute commands from the <var>filename</var> argument in the -current shell context. If <var>filename</var> does not contain a slash, -the <code>PATH</code> variable is used to find <var>filename</var>, -but <var>filename</var> does not need to be executable. -When Bash is not in <small>POSIX</small> mode, it searches the current directory -if <var>filename</var> is not found in <code>$PATH</code>. -If any <var>arguments</var> are supplied, they become the positional -parameters when <var>filename</var> is executed. Otherwise the positional +<p>Read and execute commands from the <var class="var">filename</var> argument in the +current shell context. If <var class="var">filename</var> does not contain a slash, +the <code class="env">PATH</code> variable is used to find <var class="var">filename</var>, +but <var class="var">filename</var> does not need to be executable. +When Bash is not in <small class="sc">POSIX</small> mode, it searches the current directory +if <var class="var">filename</var> is not found in <code class="env">$PATH</code>. +If any <var class="var">arguments</var> are supplied, they become the positional +parameters when <var class="var">filename</var> is executed. Otherwise the positional parameters are unchanged. -If the <samp>-T</samp> option is enabled, <code>.</code> inherits any trap on -<code>DEBUG</code>; if it is not, any <code>DEBUG</code> trap string is saved and -restored around the call to <code>.</code>, and <code>.</code> unsets the -<code>DEBUG</code> trap while it executes. -If <samp>-T</samp> is not set, and the sourced file changes -the <code>DEBUG</code> trap, the new value is retained when <code>.</code> completes. +If the <samp class="option">-T</samp> option is enabled, <code class="code">.</code> inherits any trap on +<code class="code">DEBUG</code>; if it is not, any <code class="code">DEBUG</code> trap string is saved and +restored around the call to <code class="code">.</code>, and <code class="code">.</code> unsets the +<code class="code">DEBUG</code> trap while it executes. +If <samp class="option">-T</samp> is not set, and the sourced file changes +the <code class="code">DEBUG</code> trap, the new value is retained when <code class="code">.</code> completes. The return status is the exit status of the last command executed, or -zero if no commands are executed. If <var>filename</var> is not found, or +zero if no commands are executed. If <var class="var">filename</var> is not found, or cannot be read, the return status is non-zero. -This builtin is equivalent to <code>source</code>. +This builtin is equivalent to <code class="code">source</code>. </p> </dd> -<dt id='index-break'><span><code>break</code><a href='#index-break' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-break"></a><span><code class="code">break</code><a class="copiable-link" href="#index-break"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">break [<var>n</var>] +<pre class="example-preformatted">break [<var class="var">n</var>] </pre></div> -<p>Exit from a <code>for</code>, <code>while</code>, <code>until</code>, or <code>select</code> loop. -If <var>n</var> is supplied, the <var>n</var>th enclosing loop is exited. -<var>n</var> must be greater than or equal to 1. -The return status is zero unless <var>n</var> is not greater than or equal to 1. +<p>Exit from a <code class="code">for</code>, <code class="code">while</code>, <code class="code">until</code>, or <code class="code">select</code> loop. +If <var class="var">n</var> is supplied, the <var class="var">n</var>th enclosing loop is exited. +<var class="var">n</var> must be greater than or equal to 1. +The return status is zero unless <var class="var">n</var> is not greater than or equal to 1. </p> </dd> -<dt id='index-cd'><span><code>cd</code><a href='#index-cd' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-cd"></a><span><code class="code">cd</code><a class="copiable-link" href="#index-cd"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">cd [-L|[-P [-e]] [-@] [<var>directory</var>] +<pre class="example-preformatted">cd [-L|[-P [-e]]] [-@] [<var class="var">directory</var>] </pre></div> -<p>Change the current working directory to <var>directory</var>. -If <var>directory</var> is not supplied, the value of the <code>HOME</code> +<p>Change the current working directory to <var class="var">directory</var>. +If <var class="var">directory</var> is not supplied, the value of the <code class="env">HOME</code> shell variable is used. If the shell variable -<code>CDPATH</code> exists, it is used as a search path: -each directory name in <code>CDPATH</code> is searched for -<var>directory</var>, with alternative directory names in <code>CDPATH</code> -separated by a colon (&lsquo;<samp>:</samp>&rsquo;). -If <var>directory</var> begins with a slash, <code>CDPATH</code> is not used. +<code class="env">CDPATH</code> exists, <code class="code">cd</code> uses it as a search path: +<code class="code">cd</code> searches each directory name in <code class="env">CDPATH</code> for +<var class="var">directory</var>, with alternative directory names in <code class="env">CDPATH</code> +separated by a colon (&lsquo;<samp class="samp">:</samp>&rsquo;). +If <var class="var">directory</var> begins with a slash, <code class="env">CDPATH</code> is not used. </p> -<p>The <samp>-P</samp> option means to not follow symbolic links: symbolic links -are resolved while <code>cd</code> is traversing <var>directory</var> and before -processing an instance of &lsquo;<samp>..</samp>&rsquo; in <var>directory</var>. +<p>The <samp class="option">-P</samp> option means to not follow symbolic links: symbolic links +are resolved while <code class="code">cd</code> is traversing <var class="var">directory</var> and before +processing an instance of &lsquo;<samp class="samp">..</samp>&rsquo; in <var class="var">directory</var>. </p> -<p>By default, or when the <samp>-L</samp> option is supplied, symbolic links -in <var>directory</var> are resolved after <code>cd</code> processes an instance -of &lsquo;<samp>..</samp>&rsquo; in <var>directory</var>. +<p>By default, or when the <samp class="option">-L</samp> option is supplied, symbolic links +in <var class="var">directory</var> are resolved after <code class="code">cd</code> processes an instance +of &lsquo;<samp class="samp">..</samp>&rsquo; in <var class="var">directory</var>. </p> -<p>If &lsquo;<samp>..</samp>&rsquo; appears in <var>directory</var>, it is processed by removing the +<p>If &lsquo;<samp class="samp">..</samp>&rsquo; appears in <var class="var">directory</var>, it is processed by removing the immediately preceding pathname component, back to a slash or the beginning -of <var>directory</var>. +of <var class="var">directory</var>. </p> -<p>If the <samp>-e</samp> option is supplied with <samp>-P</samp> +<p>If the <samp class="option">-e</samp> option is supplied with <samp class="option">-P</samp> and the current working directory cannot be successfully determined -after a successful directory change, <code>cd</code> will return an unsuccessful +after a successful directory change, <code class="code">cd</code> will return an unsuccessful status. </p> -<p>On systems that support it, the <samp>-@</samp> option presents the extended +<p>On systems that support it, the <samp class="option">-@</samp> option presents the extended attributes associated with a file as a directory. </p> -<p>If <var>directory</var> is &lsquo;<samp>-</samp>&rsquo;, it is converted to <code>$OLDPWD</code> +<p>If <var class="var">directory</var> is &lsquo;<samp class="samp">-</samp>&rsquo;, it is converted to <code class="env">$OLDPWD</code> before the directory change is attempted. </p> -<p>If a non-empty directory name from <code>CDPATH</code> is used, or if -&lsquo;<samp>-</samp>&rsquo; is the first argument, and the directory change is +<p>If a non-empty directory name from <code class="env">CDPATH</code> is used, or if +&lsquo;<samp class="samp">-</samp>&rsquo; is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output. </p> -<p>If the directory change is successful, <code>cd</code> sets the value of the -<code>PWD</code> environment variable to the new directory name, and sets the -<code>OLDPWD</code> environment variable to the value of the current working +<p>If the directory change is successful, <code class="code">cd</code> sets the value of the +<code class="env">PWD</code> environment variable to the new directory name, and sets the +<code class="env">OLDPWD</code> environment variable to the value of the current working directory before the change. </p> <p>The return status is zero if the directory is successfully changed, non-zero otherwise. </p> </dd> -<dt id='index-continue'><span><code>continue</code><a href='#index-continue' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-continue"></a><span><code class="code">continue</code><a class="copiable-link" href="#index-continue"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">continue [<var>n</var>] +<pre class="example-preformatted">continue [<var class="var">n</var>] </pre></div> -<p>Resume the next iteration of an enclosing <code>for</code>, <code>while</code>, -<code>until</code>, or <code>select</code> loop. -If <var>n</var> is supplied, the execution of the <var>n</var>th enclosing loop +<p>Resume the next iteration of an enclosing <code class="code">for</code>, <code class="code">while</code>, +<code class="code">until</code>, or <code class="code">select</code> loop. +If <var class="var">n</var> is supplied, the execution of the <var class="var">n</var>th enclosing loop is resumed. -<var>n</var> must be greater than or equal to 1. -The return status is zero unless <var>n</var> is not greater than or equal to 1. +<var class="var">n</var> must be greater than or equal to 1. +The return status is zero unless <var class="var">n</var> is not greater than or equal to 1. </p> </dd> -<dt id='index-eval'><span><code>eval</code><a href='#index-eval' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-eval"></a><span><code class="code">eval</code><a class="copiable-link" href="#index-eval"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">eval [<var>arguments</var>] +<pre class="example-preformatted">eval [<var class="var">arguments</var>] </pre></div> <p>The arguments are concatenated together into a single command, which is then read and executed, and its exit status returned as the exit status -of <code>eval</code>. +of <code class="code">eval</code>. If there are no arguments or only empty arguments, the return status is zero. </p> </dd> -<dt id='index-exec'><span><code>exec</code><a href='#index-exec' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-exec"></a><span><code class="code">exec</code><a class="copiable-link" href="#index-exec"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">exec [-cl] [-a <var>name</var>] [<var>command</var> [<var>arguments</var>]] +<pre class="example-preformatted">exec [-cl] [-a <var class="var">name</var>] [<var class="var">command</var> [<var class="var">arguments</var>]] </pre></div> -<p>If <var>command</var> +<p>If <var class="var">command</var> is supplied, it replaces the shell without creating a new process. -If the <samp>-l</samp> option is supplied, the shell places a dash at the -beginning of the zeroth argument passed to <var>command</var>. -This is what the <code>login</code> program does. -The <samp>-c</samp> option causes <var>command</var> to be executed with an empty +If the <samp class="option">-l</samp> option is supplied, the shell places a dash at the +beginning of the zeroth argument passed to <var class="var">command</var>. +This is what the <code class="code">login</code> program does. +The <samp class="option">-c</samp> option causes <var class="var">command</var> to be executed with an empty environment. -If <samp>-a</samp> is supplied, the shell passes <var>name</var> as the zeroth -argument to <var>command</var>. -If <var>command</var> +If <samp class="option">-a</samp> is supplied, the shell passes <var class="var">name</var> as the zeroth +argument to <var class="var">command</var>. +If <var class="var">command</var> cannot be executed for some reason, a non-interactive shell exits, -unless the <code>execfail</code> shell option +unless the <code class="code">execfail</code> shell option is enabled. In that case, it returns failure. An interactive shell returns failure if the file cannot be executed. -A subshell exits unconditionally if <code>exec</code> fails. -If no <var>command</var> is specified, redirections may be used to affect +A subshell exits unconditionally if <code class="code">exec</code> fails. +If no <var class="var">command</var> is specified, redirections may be used to affect the current shell environment. If there are no redirection errors, the return status is zero; otherwise the return status is non-zero. </p> </dd> -<dt id='index-exit'><span><code>exit</code><a href='#index-exit' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-exit"></a><span><code class="code">exit</code><a class="copiable-link" href="#index-exit"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">exit [<var>n</var>] +<pre class="example-preformatted">exit [<var class="var">n</var>] </pre></div> -<p>Exit the shell, returning a status of <var>n</var> to the shell&rsquo;s parent. -If <var>n</var> is omitted, the exit status is that of the last command executed. -Any trap on <code>EXIT</code> is executed before the shell terminates. +<p>Exit the shell, returning a status of <var class="var">n</var> to the shell&rsquo;s parent. +If <var class="var">n</var> is omitted, the exit status is that of the last command executed. +Any trap on <code class="code">EXIT</code> is executed before the shell terminates. </p> </dd> -<dt id='index-export'><span><code>export</code><a href='#index-export' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-export"></a><span><code class="code">export</code><a class="copiable-link" href="#index-export"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">export [-fn] [-p] [<var>name</var>[=<var>value</var>]] +<pre class="example-preformatted">export [-fn] [-p] [<var class="var">name</var>[=<var class="var">value</var>]] </pre></div> -<p>Mark each <var>name</var> to be passed to child processes -in the environment. If the <samp>-f</samp> option is supplied, the <var>name</var>s +<p>Mark each <var class="var">name</var> to be passed to child processes +in the environment. If the <samp class="option">-f</samp> option is supplied, the <var class="var">name</var>s refer to shell functions; otherwise the names refer to shell variables. -The <samp>-n</samp> option means to no longer mark each <var>name</var> for export. -If no <var>name</var>s are supplied, or if the <samp>-p</samp> option is given, a +The <samp class="option">-n</samp> option means to no longer mark each <var class="var">name</var> for export. +If no <var class="var">name</var>s are supplied, or if the <samp class="option">-p</samp> option is given, a list of names of all exported variables is displayed. -The <samp>-p</samp> option displays output in a form that may be reused as input. -If a variable name is followed by =<var>value</var>, the value of -the variable is set to <var>value</var>. +The <samp class="option">-p</samp> option displays output in a form that may be reused as input. +If a variable name is followed by =<var class="var">value</var>, the value of +the variable is set to <var class="var">value</var>. </p> <p>The return status is zero unless an invalid option is supplied, one of -the names is not a valid shell variable name, or <samp>-f</samp> is supplied +the names is not a valid shell variable name, or <samp class="option">-f</samp> is supplied with a name that is not a shell function. </p> </dd> -<dt id='index-getopts'><span><code>getopts</code><a href='#index-getopts' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-false"></a><span><code class="code">false</code><a class="copiable-link" href="#index-false"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">getopts <var>optstring</var> <var>name</var> [<var>arg</var> &hellip;] +<pre class="example-preformatted">false </pre></div> -<p><code>getopts</code> is used by shell scripts to parse positional parameters. -<var>optstring</var> contains the option characters to be recognized; if a +<p>Does nothing, returns a non-zero status. +</p> +</dd> +<dt><a id="index-getopts"></a><span><code class="code">getopts</code><a class="copiable-link" href="#index-getopts"> &para;</a></span></dt> +<dd><div class="example"> +<pre class="example-preformatted">getopts <var class="var">optstring</var> <var class="var">name</var> [<var class="var">arg</var> ...] +</pre></div> + +<p><code class="code">getopts</code> is used by shell scripts to parse positional parameters. +<var class="var">optstring</var> contains the option characters to be recognized; if a character is followed by a colon, the option is expected to have an argument, which should be separated from it by whitespace. -The colon (&lsquo;<samp>:</samp>&rsquo;) and question mark (&lsquo;<samp>?</samp>&rsquo;) may not be +The colon (&lsquo;<samp class="samp">:</samp>&rsquo;) and question mark (&lsquo;<samp class="samp">?</samp>&rsquo;) may not be used as option characters. -Each time it is invoked, <code>getopts</code> -places the next option in the shell variable <var>name</var>, initializing -<var>name</var> if it does not exist, +Each time it is invoked, <code class="code">getopts</code> +places the next option in the shell variable <var class="var">name</var>, initializing +<var class="var">name</var> if it does not exist, and the index of the next argument to be processed into the -variable <code>OPTIND</code>. -<code>OPTIND</code> is initialized to 1 each time the shell or a shell script +variable <code class="env">OPTIND</code>. +<code class="env">OPTIND</code> is initialized to 1 each time the shell or a shell script is invoked. When an option requires an argument, -<code>getopts</code> places that argument into the variable <code>OPTARG</code>. -The shell does not reset <code>OPTIND</code> automatically; it must be manually -reset between multiple calls to <code>getopts</code> within the same shell +<code class="code">getopts</code> places that argument into the variable <code class="env">OPTARG</code>. +The shell does not reset <code class="env">OPTIND</code> automatically; it must be manually +reset between multiple calls to <code class="code">getopts</code> within the same shell invocation if a new set of parameters is to be used. </p> -<p>When the end of options is encountered, <code>getopts</code> exits with a +<p>When the end of options is encountered, <code class="code">getopts</code> exits with a return value greater than zero. -<code>OPTIND</code> is set to the index of the first non-option argument, -and <var>name</var> is set to &lsquo;<samp>?</samp>&rsquo;. +<code class="env">OPTIND</code> is set to the index of the first non-option argument, +and <var class="var">name</var> is set to &lsquo;<samp class="samp">?</samp>&rsquo;. </p> -<p><code>getopts</code> +<p><code class="code">getopts</code> normally parses the positional parameters, but if more arguments are -supplied as <var>arg</var> values, <code>getopts</code> parses those instead. +supplied as <var class="var">arg</var> values, <code class="code">getopts</code> parses those instead. </p> -<p><code>getopts</code> can report errors in two ways. If the first character of -<var>optstring</var> is a colon, <var>silent</var> +<p><code class="code">getopts</code> can report errors in two ways. If the first character of +<var class="var">optstring</var> is a colon, <var class="var">silent</var> error reporting is used. In normal operation, diagnostic messages are printed when invalid options or missing option arguments are encountered. -If the variable <code>OPTERR</code> +If the variable <code class="env">OPTERR</code> is set to 0, no error messages will be displayed, even if the first -character of <code>optstring</code> is not a colon. +character of <code class="code">optstring</code> is not a colon. </p> -<p>If an invalid option is seen, -<code>getopts</code> places &lsquo;<samp>?</samp>&rsquo; into <var>name</var> and, if not silent, -prints an error message and unsets <code>OPTARG</code>. -If <code>getopts</code> is silent, the option character found is placed in -<code>OPTARG</code> and no diagnostic message is printed. +<p>If <code class="code">getopts</code> detects an invalid option, it +places &lsquo;<samp class="samp">?</samp>&rsquo; into <var class="var">name</var> and, if not silent, +prints an error message and unsets <code class="env">OPTARG</code>. +If <code class="code">getopts</code> is silent, it assigns the option character found +to <code class="env">OPTARG</code> and does not print a diagnostic message. </p> -<p>If a required argument is not found, and <code>getopts</code> -is not silent, a question mark (&lsquo;<samp>?</samp>&rsquo;) is placed in <var>name</var>, -<code>OPTARG</code> is unset, and a diagnostic message is printed. -If <code>getopts</code> is silent, then a colon (&lsquo;<samp>:</samp>&rsquo;) is placed in -<var>name</var> and <code>OPTARG</code> is set to the option character found. +<p>If a required argument is not found, +and <code class="code">getopts</code> is not silent, +it sets the value of <var class="var">name</var> to a question mark (&lsquo;<samp class="samp">?</samp>&rsquo;), +unsets <code class="code">OPTARG</code>, and prints a diagnostic message. +If <code class="code">getopts</code> is silent, +it sets the value of <var class="var">name</var> to a colon (&lsquo;<samp class="samp">:</samp>&rsquo;), +and sets <code class="env">OPTARG</code> to the option character found. </p> </dd> -<dt id='index-hash'><span><code>hash</code><a href='#index-hash' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-hash"></a><span><code class="code">hash</code><a class="copiable-link" href="#index-hash"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">hash [-r] [-p <var>filename</var>] [-dt] [<var>name</var>] +<pre class="example-preformatted">hash [-r] [-p <var class="var">filename</var>] [-dt] [<var class="var">name</var>] </pre></div> -<p>Each time <code>hash</code> is invoked, it remembers the full pathnames of the -commands specified as <var>name</var> arguments, +<p>Each time <code class="code">hash</code> is invoked, it remembers the full filenames of the +commands specified as <var class="var">name</var> arguments, so they need not be searched for on subsequent invocations. The commands are found by searching through the directories listed in -<code>$PATH</code>. -Any previously-remembered pathname is discarded. -The <samp>-p</samp> option inhibits the path search, and <var>filename</var> is -used as the location of <var>name</var>. -The <samp>-r</samp> option causes the shell to forget all remembered locations. -The <samp>-d</samp> option causes the shell to forget the remembered location -of each <var>name</var>. -If the <samp>-t</samp> option is supplied, the full pathname to which each -<var>name</var> corresponds is printed. If multiple <var>name</var> arguments are -supplied with <samp>-t</samp>, the <var>name</var> is printed before the hashed +<code class="env">$PATH</code>. +Any previously-remembered filename is discarded. +The <samp class="option">-p</samp> option inhibits the path search, and <var class="var">filename</var> is +used as the location of <var class="var">name</var>. +The <samp class="option">-r</samp> option causes the shell to forget all remembered locations. +Assigning to the <code class="env">PATH</code> variable also clears all hashed filenames. +The <samp class="option">-d</samp> option causes the shell to forget the remembered location +of each <var class="var">name</var>. +If the <samp class="option">-t</samp> option is supplied, the full pathname to which each +<var class="var">name</var> corresponds is printed. If multiple <var class="var">name</var> arguments are +supplied with <samp class="option">-t</samp>, the <var class="var">name</var> is printed before the hashed full pathname. -The <samp>-l</samp> option causes output to be displayed in a format +The <samp class="option">-l</samp> option causes output to be displayed in a format that may be reused as input. -If no arguments are given, or if only <samp>-l</samp> is supplied, +If no arguments are given, or if only <samp class="option">-l</samp> is supplied, information about remembered commands is printed. -The return status is zero unless a <var>name</var> is not found or an invalid +The <samp class="option">-t</samp>, <samp class="option">-d</samp>, and <samp class="option">-p</samp> options (the options that +act on the <var class="var">name</var> arguments) are mutually exclusive. +Only one will be active. +If more than one is supplied, <samp class="option">-t</samp> has higher priority than +<samp class="option">-p</samp>, and both are higher priority than <samp class="option">-d</samp>. +The return status is zero unless a <var class="var">name</var> is not found or an invalid option is supplied. </p> </dd> -<dt id='index-pwd'><span><code>pwd</code><a href='#index-pwd' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-pwd"></a><span><code class="code">pwd</code><a class="copiable-link" href="#index-pwd"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">pwd [-LP] +<pre class="example-preformatted">pwd [-LP] </pre></div> <p>Print the absolute pathname of the current working directory. -If the <samp>-P</samp> option is supplied, the pathname printed will not +If the <samp class="option">-P</samp> option is supplied, the pathname printed will not contain symbolic links. -If the <samp>-L</samp> option is supplied, the pathname printed may contain +If the <samp class="option">-L</samp> option is supplied, the pathname printed may contain symbolic links. The return status is zero unless an error is encountered while determining the name of the current directory or an invalid option is supplied. </p> </dd> -<dt id='index-readonly'><span><code>readonly</code><a href='#index-readonly' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-readonly"></a><span><code class="code">readonly</code><a class="copiable-link" href="#index-readonly"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">readonly [-aAf] [-p] [<var>name</var>[=<var>value</var>]] &hellip; +<pre class="example-preformatted">readonly [-aAf] [-p] [<var class="var">name</var>[=<var class="var">value</var>]] ... </pre></div> -<p>Mark each <var>name</var> as readonly. +<p>Mark each <var class="var">name</var> as readonly. The values of these names may not be changed by subsequent assignment. -If the <samp>-f</samp> option is supplied, each <var>name</var> refers to a shell +If the <samp class="option">-f</samp> option is supplied, each <var class="var">name</var> refers to a shell function. -The <samp>-a</samp> option means each <var>name</var> refers to an indexed -array variable; the <samp>-A</samp> option means each <var>name</var> refers +The <samp class="option">-a</samp> option means each <var class="var">name</var> refers to an indexed +array variable; the <samp class="option">-A</samp> option means each <var class="var">name</var> refers to an associative array variable. -If both options are supplied, <samp>-A</samp> takes precedence. -If no <var>name</var> arguments are given, or if the <samp>-p</samp> +If both options are supplied, <samp class="option">-A</samp> takes precedence. +If no <var class="var">name</var> arguments are given, or if the <samp class="option">-p</samp> option is supplied, a list of all readonly names is printed. The other options may be used to restrict the output to a subset of the set of readonly names. -The <samp>-p</samp> option causes output to be displayed in a format that +The <samp class="option">-p</samp> option causes output to be displayed in a format that may be reused as input. -If a variable name is followed by =<var>value</var>, the value of -the variable is set to <var>value</var>. +If a variable name is followed by =<var class="var">value</var>, the value of +the variable is set to <var class="var">value</var>. The return status is zero unless an invalid option is supplied, one of -the <var>name</var> arguments is not a valid shell variable or function name, -or the <samp>-f</samp> option is supplied with a name that is not a shell function. +the <var class="var">name</var> arguments is not a valid shell variable or function name, +or the <samp class="option">-f</samp> option is supplied with a name that is not a shell function. </p> </dd> -<dt id='index-return'><span><code>return</code><a href='#index-return' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-return"></a><span><code class="code">return</code><a class="copiable-link" href="#index-return"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">return [<var>n</var>] +<pre class="example-preformatted">return [<var class="var">n</var>] </pre></div> -<p>Cause a shell function to stop executing and return the value <var>n</var> +<p>Cause a shell function to stop executing and return the value <var class="var">n</var> to its caller. -If <var>n</var> is not supplied, the return value is the exit status of the +If <var class="var">n</var> is not supplied, the return value is the exit status of the last command executed in the function. -If <code>return</code> is executed by a trap handler, the last command used to +If <code class="code">return</code> is executed by a trap handler, the last command used to determine the status is the last command executed before the trap handler. -If <code>return</code> is executed during a <code>DEBUG</code> trap, the last command +If <code class="code">return</code> is executed during a <code class="code">DEBUG</code> trap, the last command used to determine the status is the last command executed by the trap -handler before <code>return</code> was invoked. -<code>return</code> may also be used to terminate execution of a script -being executed with the <code>.</code> (<code>source</code>) builtin, -returning either <var>n</var> or +handler before <code class="code">return</code> was invoked. +<code class="code">return</code> may also be used to terminate execution of a script +being executed with the <code class="code">.</code> (<code class="code">source</code>) builtin, +returning either <var class="var">n</var> or the exit status of the last command executed within the script as the exit status of the script. -If <var>n</var> is supplied, the return value is its least significant +If <var class="var">n</var> is supplied, the return value is its least significant 8 bits. -Any command associated with the <code>RETURN</code> trap is executed +Any command associated with the <code class="code">RETURN</code> trap is executed before execution resumes after the function or script. -The return status is non-zero if <code>return</code> is supplied a non-numeric +The return status is non-zero if <code class="code">return</code> is supplied a non-numeric argument or is used outside a function -and not during the execution of a script by <code>.</code> or <code>source</code>. +and not during the execution of a script by <code class="code">.</code> or <code class="code">source</code>. </p> </dd> -<dt id='index-shift'><span><code>shift</code><a href='#index-shift' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-shift"></a><span><code class="code">shift</code><a class="copiable-link" href="#index-shift"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">shift [<var>n</var>] +<pre class="example-preformatted">shift [<var class="var">n</var>] </pre></div> -<p>Shift the positional parameters to the left by <var>n</var>. -The positional parameters from <var>n</var>+1 &hellip; <code>$#</code> are -renamed to <code>$1</code> &hellip; <code>$#</code>-<var>n</var>. -Parameters represented by the numbers <code>$#</code> down to <code>$#</code>-<var>n</var>+1 +<p>Shift the positional parameters to the left by <var class="var">n</var>. +The positional parameters from <var class="var">n</var>+1 &hellip; <code class="code">$#</code> are +renamed to <code class="code">$1</code> &hellip; <code class="code">$#</code>-<var class="var">n</var>. +Parameters represented by the numbers <code class="code">$#</code> down to <code class="code">$#</code>-<var class="var">n</var>+1 are unset. -<var>n</var> must be a non-negative number less than or equal to <code>$#</code>. -If <var>n</var> is zero or greater than <code>$#</code>, the positional parameters +<var class="var">n</var> must be a non-negative number less than or equal to <code class="code">$#</code>. +If <var class="var">n</var> is zero or greater than <code class="code">$#</code>, the positional parameters are not changed. -If <var>n</var> is not supplied, it is assumed to be 1. -The return status is zero unless <var>n</var> is greater than <code>$#</code> or +If <var class="var">n</var> is not supplied, it is assumed to be 1. +The return status is zero unless <var class="var">n</var> is greater than <code class="code">$#</code> or less than zero, non-zero otherwise. </p> </dd> -<dt id='index-test'><span><code>test</code><a href='#index-test' class='copiable-anchor'> &para;</a></span></dt> -<dt><span><code>[</code></span></dt> -<dd><span id="index-_005b"></span> -<div class="example"> -<pre class="example">test <var>expr</var> +<dt><a class="index-entry-id" id="index-_005b"></a> +<a id="index-test"></a><span><code class="code">test</code><a class="copiable-link" href="#index-test"> &para;</a></span></dt> +<dt><code class="code">[</code></dt> +<dd><div class="example"> +<pre class="example-preformatted">test <var class="var">expr</var> </pre></div> -<p>Evaluate a conditional expression <var>expr</var> and return a status of 0 +<p>Evaluate a conditional expression <var class="var">expr</var> and return a status of 0 (true) or 1 (false). Each operator and operand must be a separate argument. Expressions are composed of the primaries described below in -<a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>. -<code>test</code> does not accept any options, nor does it accept and ignore -an argument of <samp>--</samp> as signifying the end of options. +<a class="ref" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>. +<code class="code">test</code> does not accept any options, nor does it accept and ignore +an argument of <samp class="option">--</samp> as signifying the end of options. </p> -<p>When the <code>[</code> form is used, the last argument to the command must -be a <code>]</code>. +<p>When the <code class="code">[</code> form is used, the last argument to the command must +be a <code class="code">]</code>. </p> <p>Expressions may be combined using the following operators, listed in decreasing order of precedence. The evaluation depends on the number of arguments; see below. Operator precedence is used when there are five or more arguments. </p> -<dl compact="compact"> -<dt><span><code>! <var>expr</var></code></span></dt> -<dd><p>True if <var>expr</var> is false. +<dl class="table"> +<dt><code class="code">! <var class="var">expr</var></code></dt> +<dd><p>True if <var class="var">expr</var> is false. </p> </dd> -<dt><span><code>( <var>expr</var> )</code></span></dt> -<dd><p>Returns the value of <var>expr</var>. +<dt><code class="code">( <var class="var">expr</var> )</code></dt> +<dd><p>Returns the value of <var class="var">expr</var>. This may be used to override the normal precedence of operators. </p> </dd> -<dt><span><code><var>expr1</var> -a <var>expr2</var></code></span></dt> -<dd><p>True if both <var>expr1</var> and <var>expr2</var> are true. +<dt><code class="code"><var class="var">expr1</var> -a <var class="var">expr2</var></code></dt> +<dd><p>True if both <var class="var">expr1</var> and <var class="var">expr2</var> are true. </p> </dd> -<dt><span><code><var>expr1</var> -o <var>expr2</var></code></span></dt> -<dd><p>True if either <var>expr1</var> or <var>expr2</var> is true. +<dt><code class="code"><var class="var">expr1</var> -o <var class="var">expr2</var></code></dt> +<dd><p>True if either <var class="var">expr1</var> or <var class="var">expr2</var> is true. </p></dd> </dl> -<p>The <code>test</code> and <code>[</code> builtins evaluate conditional +<p>The <code class="code">test</code> and <code class="code">[</code> builtins evaluate conditional expressions using a set of rules based on the number of arguments. </p> -<dl compact="compact"> -<dt><span>0 arguments</span></dt> +<dl class="table"> +<dt>0 arguments</dt> <dd><p>The expression is false. </p> </dd> -<dt><span>1 argument</span></dt> +<dt>1 argument</dt> <dd><p>The expression is true if, and only if, the argument is not null. </p> </dd> -<dt><span>2 arguments</span></dt> -<dd><p>If the first argument is &lsquo;<samp>!</samp>&rsquo;, the expression is true if and +<dt>2 arguments</dt> +<dd><p>If the first argument is &lsquo;<samp class="samp">!</samp>&rsquo;, the expression is true if and only if the second argument is null. If the first argument is one of the unary conditional operators -(see <a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>), the expression +(see <a class="pxref" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>), the expression is true if the unary test is true. If the first argument is not a valid unary operator, the expression is false. </p> </dd> -<dt><span>3 arguments</span></dt> +<dt>3 arguments</dt> <dd><p>The following conditions are applied in the order listed. </p> -<ol> +<ol class="enumerate"> <li> If the second argument is one of the binary conditional -operators (see <a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>), the +operators (see <a class="pxref" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>), the result of the expression is the result of the binary test using the first and third arguments as operands. -The &lsquo;<samp>-a</samp>&rsquo; and &lsquo;<samp>-o</samp>&rsquo; operators are considered binary operators +The &lsquo;<samp class="samp">-a</samp>&rsquo; and &lsquo;<samp class="samp">-o</samp>&rsquo; operators are considered binary operators when there are three arguments. -</li><li> If the first argument is &lsquo;<samp>!</samp>&rsquo;, the value is the negation of +</li><li> If the first argument is &lsquo;<samp class="samp">!</samp>&rsquo;, the value is the negation of the two-argument test using the second and third arguments. -</li><li> If the first argument is exactly &lsquo;<samp>(</samp>&rsquo; and the third argument is -exactly &lsquo;<samp>)</samp>&rsquo;, the result is the one-argument test of the second +</li><li> If the first argument is exactly &lsquo;<samp class="samp">(</samp>&rsquo; and the third argument is +exactly &lsquo;<samp class="samp">)</samp>&rsquo;, the result is the one-argument test of the second argument. </li><li> Otherwise, the expression is false. </li></ol> </dd> -<dt><span>4 arguments</span></dt> +<dt>4 arguments</dt> <dd><p>The following conditions are applied in the order listed. </p> -<ol> -<li> If the first argument is &lsquo;<samp>!</samp>&rsquo;, the result is the negation of +<ol class="enumerate"> +<li> If the first argument is &lsquo;<samp class="samp">!</samp>&rsquo;, the result is the negation of the three-argument expression composed of the remaining arguments. -</li><li> If the first argument is exactly &lsquo;<samp>(</samp>&rsquo; and the fourth argument is -exactly &lsquo;<samp>)</samp>&rsquo;, the result is the two-argument test of the second +</li><li> If the first argument is exactly &lsquo;<samp class="samp">(</samp>&rsquo; and the fourth argument is +exactly &lsquo;<samp class="samp">)</samp>&rsquo;, the result is the two-argument test of the second and third arguments. </li><li> Otherwise, the expression is parsed and evaluated according to precedence using the rules listed above. </li></ol> </dd> -<dt><span>5 or more arguments</span></dt> +<dt>5 or more arguments</dt> <dd><p>The expression is parsed and evaluated according to precedence using the rules listed above. </p></dd> </dl> -<p>When used with <code>test</code> or &lsquo;<samp>[</samp>&rsquo;, the &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; -operators sort lexicographically using ASCII ordering. +<p>If the shell is in <small class="sc">POSIX</small> mode, or if the expression is part +of the <code class="code">[[</code> command, +the &lsquo;<samp class="samp">&lt;</samp>&rsquo; and &lsquo;<samp class="samp">&gt;</samp>&rsquo; operators sort using the current locale. +If the shell is not in <small class="sc">POSIX</small> mode, +the <code class="code">test</code> and &lsquo;<samp class="samp">[</samp>&rsquo; commands +sort lexicographically using ASCII ordering. +</p> +<p>The historical operator-precedence parsing with 4 or more arguments can +lead to ambiguities when it encounters strings that look like primaries. +The <small class="sc">POSIX</small> standard has deprecated the <samp class="option">-a</samp> and <samp class="option">-o</samp> +primaries and enclosing expressions within parentheses. +Scripts should no longer use them. +It&rsquo;s much more reliable to restrict test invocations to a single primary, +and to replace uses of <samp class="option">-a</samp> and <samp class="option">-o</samp> with the shell&rsquo;s +<code class="code">&amp;&amp;</code> and <code class="code">||</code> list operators. For example, use +</p> +<div class="example"> +<pre class="example-preformatted">test -n string1 &amp;&amp; test -n string2 +</pre></div> + +<p>instead of </p> +<div class="example"> +<pre class="example-preformatted">test -n string1 -a -n string2 +</pre></div> + </dd> -<dt id='index-times'><span><code>times</code><a href='#index-times' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-times"></a><span><code class="code">times</code><a class="copiable-link" href="#index-times"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">times +<pre class="example-preformatted">times </pre></div> <p>Print out the user and system times used by the shell and its children. The return status is zero. </p> </dd> -<dt id='index-trap'><span><code>trap</code><a href='#index-trap' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-trap"></a><span><code class="code">trap</code><a class="copiable-link" href="#index-trap"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">trap [-lp] [<var>arg</var>] [<var>sigspec</var> &hellip;] +<pre class="example-preformatted">trap [-Plp] [<var class="var">action</var>] [<var class="var">sigspec</var> ...] </pre></div> -<p>The commands in <var>arg</var> are to be read and executed when the -shell receives signal <var>sigspec</var>. If <var>arg</var> is absent (and -there is a single <var>sigspec</var>) or -equal to &lsquo;<samp>-</samp>&rsquo;, each specified signal&rsquo;s disposition is reset +<p>The <var class="var">action</var> is a command that is read and executed when the +shell receives signal <var class="var">sigspec</var>. If <var class="var">action</var> is absent (and +there is a single <var class="var">sigspec</var>) or +equal to &lsquo;<samp class="samp">-</samp>&rsquo;, each specified signal&rsquo;s disposition is reset to the value it had when the shell was started. -If <var>arg</var> is the null string, then the signal specified by -each <var>sigspec</var> is ignored by the shell and commands it invokes. -If <var>arg</var> is not present and <samp>-p</samp> has been supplied, -the shell displays the trap commands associated with each <var>sigspec</var>. -If no arguments are supplied, or -only <samp>-p</samp> is given, <code>trap</code> prints the list of commands -associated with each signal number in a form that may be reused as -shell input. -The <samp>-l</samp> option causes the shell to print a list of signal names +If <var class="var">action</var> is the null string, then the signal specified by +each <var class="var">sigspec</var> is ignored by the shell and commands it invokes. +</p> +<p>If no arguments are supplied, <code class="code">trap</code> prints the actions +associated with each trapped signal +as a set of <code class="code">trap</code> commands that can be reused as shell input to +restore the current signal dispositions. +If <var class="var">action</var> is not present and <samp class="option">-p</samp> has been supplied, +<code class="code">trap</code> displays the trap commands associated with each <var class="var">sigspec</var>, +or, if no <var class="var">sigspec</var>s are supplied, for all trapped signals, +as a set of <code class="code">trap</code> commands that can be reused as shell input to +restore the current signal dispositions. +The <samp class="option">-P</samp> option behaves similarly, but displays only the actions +associated with each <var class="var">sigspec</var> argument. +<samp class="option">-P</samp> requires at least one <var class="var">sigspec</var> argument. +The <samp class="option">-P</samp> or <samp class="option">-p</samp> options to <code class="code">trap</code> may be +used in a subshell environment (e.g., command substitution) and, +as long as they are used before <code class="code">trap</code> is used to change a +signal&rsquo;s handling, will display the state of its parent&rsquo;s traps. +</p> +<p>The <samp class="option">-l</samp> option causes <code class="code">trap</code> to print a list of signal names and their corresponding numbers. -Each <var>sigspec</var> is either a signal name or a signal number. -Signal names are case insensitive and the <code>SIG</code> prefix is optional. -</p> -<p>If a <var>sigspec</var> -is <code>0</code> or <code>EXIT</code>, <var>arg</var> is executed when the shell exits. -If a <var>sigspec</var> is <code>DEBUG</code>, the command <var>arg</var> is executed -before every simple command, <code>for</code> command, <code>case</code> command, -<code>select</code> command, every arithmetic <code>for</code> command, and before -the first command executes in a shell function. -Refer to the description of the <code>extdebug</code> option to the -<code>shopt</code> builtin (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) for details of its -effect on the <code>DEBUG</code> trap. -If a <var>sigspec</var> is <code>RETURN</code>, the command <var>arg</var> is executed -each time a shell function or a script executed with the <code>.</code> or -<code>source</code> builtins finishes executing. -</p> -<p>If a <var>sigspec</var> is <code>ERR</code>, the command <var>arg</var> +Each <var class="var">sigspec</var> is either a signal name or a signal number. +Signal names are case insensitive and the <code class="code">SIG</code> prefix is optional. +</p> +<p>If a <var class="var">sigspec</var> +is <code class="code">0</code> or <code class="code">EXIT</code>, <var class="var">action</var> is executed when the shell exits. +If a <var class="var">sigspec</var> is <code class="code">DEBUG</code>, <var class="var">action</var> is executed +before every simple command, <code class="code">for</code> command, <code class="code">case</code> command, +<code class="code">select</code> command, (( arithmetic command, [[ conditional command, +arithmetic <code class="code">for</code> command, +and before the first command executes in a shell function. +Refer to the description of the <code class="code">extdebug</code> option to the +<code class="code">shopt</code> builtin (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) for details of its +effect on the <code class="code">DEBUG</code> trap. +If a <var class="var">sigspec</var> is <code class="code">RETURN</code>, <var class="var">action</var> is executed +each time a shell function or a script executed with the <code class="code">.</code> or +<code class="code">source</code> builtins finishes executing. +</p> +<p>If a <var class="var">sigspec</var> is <code class="code">ERR</code>, <var class="var">action</var> is executed whenever a pipeline (which may consist of a single simple command), a list, or a compound command returns a non-zero exit status, subject to the following conditions. -The <code>ERR</code> trap is not executed if the failed command is part of the -command list immediately following an <code>until</code> or <code>while</code> keyword, -part of the test following the <code>if</code> or <code>elif</code> reserved words, -part of a command executed in a <code>&amp;&amp;</code> or <code>||</code> list -except the command following the final <code>&amp;&amp;</code> or <code>||</code>, +The <code class="code">ERR</code> trap is not executed if the failed command is part of the +command list immediately following an <code class="code">until</code> or <code class="code">while</code> keyword, +part of the test following the <code class="code">if</code> or <code class="code">elif</code> reserved words, +part of a command executed in a <code class="code">&amp;&amp;</code> or <code class="code">||</code> list +except the command following the final <code class="code">&amp;&amp;</code> or <code class="code">||</code>, any command in a pipeline but the last, or if the command&rsquo;s return -status is being inverted using <code>!</code>. -These are the same conditions obeyed by the <code>errexit</code> (<samp>-e</samp>) +status is being inverted using <code class="code">!</code>. +These are the same conditions obeyed by the <code class="code">errexit</code> (<samp class="option">-e</samp>) option. </p> -<p>Signals ignored upon entry to the shell cannot be trapped or reset. +<p>Signals ignored upon entry to a non-interactive shell cannot be trapped or +reset. +Interactive shells permit trapping signals ignored on entry. Trapped signals that are not being ignored are reset to their original values in a subshell or subshell environment when one is created. </p> -<p>The return status is zero unless a <var>sigspec</var> does not specify a +<p>The return status is zero unless a <var class="var">sigspec</var> does not specify a valid signal. </p> </dd> -<dt id='index-umask'><span><code>umask</code><a href='#index-umask' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-true"></a><span><code class="code">true</code><a class="copiable-link" href="#index-true"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">umask [-p] [-S] [<var>mode</var>] +<pre class="example-preformatted">true </pre></div> -<p>Set the shell process&rsquo;s file creation mask to <var>mode</var>. If -<var>mode</var> begins with a digit, it is interpreted as an octal number; +<p>Does nothing, returns a 0 status. +</p> +</dd> +<dt><a id="index-umask"></a><span><code class="code">umask</code><a class="copiable-link" href="#index-umask"> &para;</a></span></dt> +<dd><div class="example"> +<pre class="example-preformatted">umask [-p] [-S] [<var class="var">mode</var>] +</pre></div> + +<p>Set the shell process&rsquo;s file creation mask to <var class="var">mode</var>. If +<var class="var">mode</var> begins with a digit, it is interpreted as an octal number; if not, it is interpreted as a symbolic mode mask similar -to that accepted by the <code>chmod</code> command. If <var>mode</var> is -omitted, the current value of the mask is printed. If the <samp>-S</samp> -option is supplied without a <var>mode</var> argument, the mask is printed +to that accepted by the <code class="code">chmod</code> command. If <var class="var">mode</var> is +omitted, the current value of the mask is printed. If the <samp class="option">-S</samp> +option is supplied without a <var class="var">mode</var> argument, the mask is printed in a symbolic format. -If the <samp>-p</samp> option is supplied, and <var>mode</var> +If the <samp class="option">-p</samp> option is supplied, and <var class="var">mode</var> is omitted, the output is in a form that may be reused as input. The return status is zero if the mode is successfully changed or if -no <var>mode</var> argument is supplied, and non-zero otherwise. +no <var class="var">mode</var> argument is supplied, and non-zero otherwise. </p> <p>Note that when the mode is interpreted as an octal number, each number -of the umask is subtracted from <code>7</code>. Thus, a umask of <code>022</code> -results in permissions of <code>755</code>. +of the umask is subtracted from <code class="code">7</code>. Thus, a umask of <code class="code">022</code> +results in permissions of <code class="code">755</code>. </p> </dd> -<dt id='index-unset'><span><code>unset</code><a href='#index-unset' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-unset"></a><span><code class="code">unset</code><a class="copiable-link" href="#index-unset"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">unset [-fnv] [<var>name</var>] +<pre class="example-preformatted">unset [-fnv] [<var class="var">name</var>] </pre></div> -<p>Remove each variable or function <var>name</var>. -If the <samp>-v</samp> option is given, each -<var>name</var> refers to a shell variable and that variable is removed. -If the <samp>-f</samp> option is given, the <var>name</var>s refer to shell +<p>Remove each variable or function <var class="var">name</var>. +If the <samp class="option">-v</samp> option is given, each +<var class="var">name</var> refers to a shell variable and that variable is removed. +If the <samp class="option">-f</samp> option is given, the <var class="var">name</var>s refer to shell functions, and the function definition is removed. -If the <samp>-n</samp> option is supplied, and <var>name</var> is a variable with -the <code>nameref</code> attribute, <var>name</var> will be unset rather than the +If the <samp class="option">-n</samp> option is supplied, and <var class="var">name</var> is a variable with +the <code class="code">nameref</code> attribute, <var class="var">name</var> will be unset rather than the variable it references. -<samp>-n</samp> has no effect if the <samp>-f</samp> option is supplied. -If no options are supplied, each <var>name</var> refers to a variable; if +<samp class="option">-n</samp> has no effect if the <samp class="option">-f</samp> option is supplied. +If no options are supplied, each <var class="var">name</var> refers to a variable; if there is no variable by that name, a function with that name, if any, is unset. Readonly variables and functions may not be unset. Some shell variables lose their special behavior if they are unset; such behavior is noted in the description of the individual variables. -The return status is zero unless a <var>name</var> is readonly or may not be unset. +The return status is zero unless a <var class="var">name</var> is readonly or may not be unset. </p></dd> </dl> <hr> </div> -<div class="section" id="Bash-Builtins"> -<div class="header"> +<div class="section-level-extent" id="Bash-Builtins"> +<div class="nav-panel"> <p> Next: <a href="#Modifying-Shell-Behavior" accesskey="n" rel="next">Modifying Shell Behavior</a>, Previous: <a href="#Bourne-Shell-Builtins" accesskey="p" rel="prev">Bourne Shell Builtins</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bash-Builtin-Commands"></span><h3 class="section">4.2 Bash Builtin Commands</h3> +<h3 class="section" id="Bash-Builtin-Commands"><span>4.2 Bash Builtin Commands<a class="copiable-link" href="#Bash-Builtin-Commands"> &para;</a></span></h3> <p>This section describes builtin commands which are unique to or have been extended in Bash. -Some of these commands are specified in the <small>POSIX</small> standard. +Some of these commands are specified in the <small class="sc">POSIX</small> standard. </p> -<dl compact="compact"> -<dt id='index-alias'><span><code>alias</code><a href='#index-alias' class='copiable-anchor'> &para;</a></span></dt> +<dl class="table"> +<dt><a id="index-alias"></a><span><code class="code">alias</code><a class="copiable-link" href="#index-alias"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">alias [-p] [<var>name</var>[=<var>value</var>] &hellip;] +<pre class="example-preformatted">alias [-p] [<var class="var">name</var>[=<var class="var">value</var>] ...] </pre></div> -<p>Without arguments or with the <samp>-p</samp> option, <code>alias</code> prints +<p>Without arguments or with the <samp class="option">-p</samp> option, <code class="code">alias</code> prints the list of aliases on the standard output in a form that allows them to be reused as input. -If arguments are supplied, an alias is defined for each <var>name</var> -whose <var>value</var> is given. If no <var>value</var> is given, the name +If arguments are supplied, an alias is defined for each <var class="var">name</var> +whose <var class="var">value</var> is given. If no <var class="var">value</var> is given, the name and value of the alias is printed. -Aliases are described in <a href="#Aliases">Aliases</a>. +Aliases are described in <a class="ref" href="#Aliases">Aliases</a>. </p> </dd> -<dt id='index-bind'><span><code>bind</code><a href='#index-bind' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-bind"></a><span><code class="code">bind</code><a class="copiable-link" href="#index-bind"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">bind [-m <var>keymap</var>] [-lpsvPSVX] -bind [-m <var>keymap</var>] [-q <var>function</var>] [-u <var>function</var>] [-r <var>keyseq</var>] -bind [-m <var>keymap</var>] -f <var>filename</var> -bind [-m <var>keymap</var>] -x <var>keyseq:shell-command</var> -bind [-m <var>keymap</var>] <var>keyseq:function-name</var> -bind [-m <var>keymap</var>] <var>keyseq:readline-command</var> -bind <var>readline-command-line</var> +<pre class="example-preformatted">bind [-m <var class="var">keymap</var>] [-lpsvPSVX] +bind [-m <var class="var">keymap</var>] [-q <var class="var">function</var>] [-u <var class="var">function</var>] [-r <var class="var">keyseq</var>] +bind [-m <var class="var">keymap</var>] -f <var class="var">filename</var> +bind [-m <var class="var">keymap</var>] -x <var class="var">keyseq[: ]shell-command</var> +bind [-m <var class="var">keymap</var>] <var class="var">keyseq:function-name</var> +bind [-m <var class="var">keymap</var>] <var class="var">keyseq:readline-command</var> +bind <var class="var">readline-command-line</var> </pre></div> -<p>Display current Readline (see <a href="#Command-Line-Editing">Command Line Editing</a>) +<p>Display current Readline (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>) key and function bindings, bind a key sequence to a Readline function or macro, or set a Readline variable. Each non-option argument is a command as it would appear in a -Readline initialization file (see <a href="#Readline-Init-File">Readline Init File</a>), +Readline initialization file (see <a class="pxref" href="#Readline-Init-File">Readline Init File</a>), but each binding or command must be passed as a separate argument; e.g., -&lsquo;<samp>&quot;\C-x\C-r&quot;:re-read-init-file</samp>&rsquo;. +&lsquo;<samp class="samp">&quot;\C-x\C-r&quot;:re-read-init-file</samp>&rsquo;. </p> <p>Options, if supplied, have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-m <var>keymap</var></code></span></dt> -<dd><p>Use <var>keymap</var> as the keymap to be affected by -the subsequent bindings. Acceptable <var>keymap</var> +<dl class="table"> +<dt><code class="code">-m <var class="var">keymap</var></code></dt> +<dd><p>Use <var class="var">keymap</var> as the keymap to be affected by +the subsequent bindings. Acceptable <var class="var">keymap</var> names are -<code>emacs</code>, -<code>emacs-standard</code>, -<code>emacs-meta</code>, -<code>emacs-ctlx</code>, -<code>vi</code>, -<code>vi-move</code>, -<code>vi-command</code>, and -<code>vi-insert</code>. -<code>vi</code> is equivalent to <code>vi-command</code> (<code>vi-move</code> is also a -synonym); <code>emacs</code> is equivalent to <code>emacs-standard</code>. -</p> -</dd> -<dt><span><code>-l</code></span></dt> +<code class="code">emacs</code>, +<code class="code">emacs-standard</code>, +<code class="code">emacs-meta</code>, +<code class="code">emacs-ctlx</code>, +<code class="code">vi</code>, +<code class="code">vi-move</code>, +<code class="code">vi-command</code>, and +<code class="code">vi-insert</code>. +<code class="code">vi</code> is equivalent to <code class="code">vi-command</code> (<code class="code">vi-move</code> is also a +synonym); <code class="code">emacs</code> is equivalent to <code class="code">emacs-standard</code>. +</p> +</dd> +<dt><code class="code">-l</code></dt> <dd><p>List the names of all Readline functions. </p> </dd> -<dt><span><code>-p</code></span></dt> -<dd><p>Display Readline function names and bindings in such a way that they -can be used as input or in a Readline initialization file. +<dt><code class="code">-p</code></dt> +<dd><p>Display Readline function names and bindings +in such a way that they can be used as +an argument to a subsequent <code class="code">bind</code> command +or in a Readline initialization file. </p> </dd> -<dt><span><code>-P</code></span></dt> +<dt><code class="code">-P</code></dt> <dd><p>List current Readline function names and bindings. </p> </dd> -<dt><span><code>-v</code></span></dt> -<dd><p>Display Readline variable names and values in such a way that they -can be used as input or in a Readline initialization file. +<dt><code class="code">-v</code></dt> +<dd><p>Display Readline variable names and values +in such a way that they can be used as +an argument to a subsequent <code class="code">bind</code> command +or in a Readline initialization file. </p> </dd> -<dt><span><code>-V</code></span></dt> +<dt><code class="code">-V</code></dt> <dd><p>List current Readline variable names and values. </p> </dd> -<dt><span><code>-s</code></span></dt> +<dt><code class="code">-s</code></dt> <dd><p>Display Readline key sequences bound to macros and the strings they output -in such a way that they can be used as input or in a Readline -initialization file. +in such a way that they can be used as +an argument to a subsequent <code class="code">bind</code> command +or in a Readline initialization file. </p> </dd> -<dt><span><code>-S</code></span></dt> +<dt><code class="code">-S</code></dt> <dd><p>Display Readline key sequences bound to macros and the strings they output. </p> </dd> -<dt><span><code>-f <var>filename</var></code></span></dt> -<dd><p>Read key bindings from <var>filename</var>. +<dt><code class="code">-f <var class="var">filename</var></code></dt> +<dd><p>Read key bindings from <var class="var">filename</var>. </p> </dd> -<dt><span><code>-q <var>function</var></code></span></dt> -<dd><p>Query about which keys invoke the named <var>function</var>. +<dt><code class="code">-q <var class="var">function</var></code></dt> +<dd><p>Query about which keys invoke the named <var class="var">function</var>. </p> </dd> -<dt><span><code>-u <var>function</var></code></span></dt> -<dd><p>Unbind all keys bound to the named <var>function</var>. +<dt><code class="code">-u <var class="var">function</var></code></dt> +<dd><p>Unbind all keys bound to the named <var class="var">function</var>. </p> </dd> -<dt><span><code>-r <var>keyseq</var></code></span></dt> -<dd><p>Remove any current binding for <var>keyseq</var>. +<dt><code class="code">-r <var class="var">keyseq</var></code></dt> +<dd><p>Remove any current binding for <var class="var">keyseq</var>. </p> </dd> -<dt><span><code>-x <var>keyseq:shell-command</var></code></span></dt> -<dd><p>Cause <var>shell-command</var> to be executed whenever <var>keyseq</var> is +<dt><code class="code">-x <var class="var">keyseq:shell-command</var></code></dt> +<dd><p>Cause <var class="var">shell-command</var> to be executed whenever <var class="var">keyseq</var> is entered. -When <var>shell-command</var> is executed, the shell sets the -<code>READLINE_LINE</code> variable to the contents of the Readline line -buffer and the <code>READLINE_POINT</code> and <code>READLINE_MARK</code> variables +The separator between <var class="var">keyseq</var> and <var class="var">shell-command</var> is either +whitespace or a colon optionally followed by whitespace. +If the separator is whitespace, <var class="var">shell-command</var> +must be enclosed in double quotes and Readline expands any of its +special backslash-escapes in <var class="var">shell-command</var> before saving it. +If the separator is a colon, any enclosing double quotes are optional, and +Readline does not expand the command string before saving it. +Since the entire key binding expression must be a single argument, it +should be enclosed in quotes. +When <var class="var">shell-command</var> is executed, the shell sets the +<code class="code">READLINE_LINE</code> variable to the contents of the Readline line +buffer and the <code class="code">READLINE_POINT</code> and <code class="code">READLINE_MARK</code> variables to the current location of the insertion point and the saved insertion -point (the <var>mark</var>), respectively. +point (the <var class="var">mark</var>), respectively. The shell assigns any numeric argument the user supplied to the -<code>READLINE_ARGUMENT</code> variable. +<code class="code">READLINE_ARGUMENT</code> variable. If there was no argument, that variable is not set. -If the executed command changes the value of any of <code>READLINE_LINE</code>, -<code>READLINE_POINT</code>, or <code>READLINE_MARK</code>, those new values will be +If the executed command changes the value of any of <code class="code">READLINE_LINE</code>, +<code class="code">READLINE_POINT</code>, or <code class="code">READLINE_MARK</code>, those new values will be reflected in the editing state. </p> </dd> -<dt><span><code>-X</code></span></dt> +<dt><code class="code">-X</code></dt> <dd><p>List all key sequences bound to shell commands and the associated commands -in a format that can be reused as input. +in a format that can be reused as +an argument to a subsequent <code class="code">bind</code> command. </p></dd> </dl> @@ -4986,591 +5153,621 @@ in a format that can be reused as input. error occurs. </p> </dd> -<dt id='index-builtin'><span><code>builtin</code><a href='#index-builtin' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-builtin"></a><span><code class="code">builtin</code><a class="copiable-link" href="#index-builtin"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">builtin [<var>shell-builtin</var> [<var>args</var>]] +<pre class="example-preformatted">builtin [<var class="var">shell-builtin</var> [<var class="var">args</var>]] </pre></div> -<p>Run a shell builtin, passing it <var>args</var>, and return its exit status. +<p>Run a shell builtin, passing it <var class="var">args</var>, and return its exit status. This is useful when defining a shell function with the same name as a shell builtin, retaining the functionality of the builtin within the function. -The return status is non-zero if <var>shell-builtin</var> is not a shell +The return status is non-zero if <var class="var">shell-builtin</var> is not a shell builtin command. </p> </dd> -<dt id='index-caller'><span><code>caller</code><a href='#index-caller' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-caller"></a><span><code class="code">caller</code><a class="copiable-link" href="#index-caller"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">caller [<var>expr</var>] +<pre class="example-preformatted">caller [<var class="var">expr</var>] </pre></div> <p>Returns the context of any active subroutine call (a shell function or -a script executed with the <code>.</code> or <code>source</code> builtins). +a script executed with the <code class="code">.</code> or <code class="code">source</code> builtins). </p> -<p>Without <var>expr</var>, <code>caller</code> displays the line number and source +<p>Without <var class="var">expr</var>, <code class="code">caller</code> displays the line number and source filename of the current subroutine call. -If a non-negative integer is supplied as <var>expr</var>, <code>caller</code> +If a non-negative integer is supplied as <var class="var">expr</var>, <code class="code">caller</code> displays the line number, subroutine name, and source file corresponding to that position in the current execution call stack. This extra information may be used, for example, to print a stack trace. The current frame is frame 0. </p> <p>The return value is 0 unless the shell is not executing a subroutine -call or <var>expr</var> does not correspond to a valid position in the +call or <var class="var">expr</var> does not correspond to a valid position in the call stack. </p> </dd> -<dt id='index-command'><span><code>command</code><a href='#index-command' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-command"></a><span><code class="code">command</code><a class="copiable-link" href="#index-command"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">command [-pVv] <var>command</var> [<var>arguments</var> &hellip;] +<pre class="example-preformatted">command [-pVv] <var class="var">command</var> [<var class="var">arguments</var> ...] </pre></div> -<p>Runs <var>command</var> with <var>arguments</var> ignoring any shell function -named <var>command</var>. +<p>Runs <var class="var">command</var> with <var class="var">arguments</var> ignoring any shell function +named <var class="var">command</var>. Only shell builtin commands or commands found by searching the -<code>PATH</code> are executed. -If there is a shell function named <code>ls</code>, running &lsquo;<samp>command ls</samp>&rsquo; -within the function will execute the external command <code>ls</code> +<code class="env">PATH</code> are executed. +If there is a shell function named <code class="code">ls</code>, running &lsquo;<samp class="samp">command ls</samp>&rsquo; +within the function will execute the external command <code class="code">ls</code> instead of calling the function recursively. -The <samp>-p</samp> option means to use a default value for <code>PATH</code> +The <samp class="option">-p</samp> option means to use a default value for <code class="env">PATH</code> that is guaranteed to find all of the standard utilities. -The return status in this case is 127 if <var>command</var> cannot be -found or an error occurred, and the exit status of <var>command</var> +The return status in this case is 127 if <var class="var">command</var> cannot be +found or an error occurred, and the exit status of <var class="var">command</var> otherwise. </p> -<p>If either the <samp>-V</samp> or <samp>-v</samp> option is supplied, a -description of <var>command</var> is printed. The <samp>-v</samp> option +<p>If either the <samp class="option">-V</samp> or <samp class="option">-v</samp> option is supplied, a +description of <var class="var">command</var> is printed. The <samp class="option">-v</samp> option causes a single word indicating the command or file name used to -invoke <var>command</var> to be displayed; the <samp>-V</samp> option produces +invoke <var class="var">command</var> to be displayed; the <samp class="option">-V</samp> option produces a more verbose description. In this case, the return status is -zero if <var>command</var> is found, and non-zero if not. +zero if <var class="var">command</var> is found, and non-zero if not. </p> </dd> -<dt id='index-declare'><span><code>declare</code><a href='#index-declare' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-declare"></a><span><code class="code">declare</code><a class="copiable-link" href="#index-declare"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">declare [-aAfFgiIlnrtux] [-p] [<var>name</var>[=<var>value</var>] &hellip;] +<pre class="example-preformatted">declare [-aAfFgiIlnrtux] [-p] [<var class="var">name</var>[=<var class="var">value</var>] ...] </pre></div> -<p>Declare variables and give them attributes. If no <var>name</var>s +<p>Declare variables and give them attributes. If no <var class="var">name</var>s are given, then display the values of variables instead. </p> -<p>The <samp>-p</samp> option will display the attributes and values of each -<var>name</var>. -When <samp>-p</samp> is used with <var>name</var> arguments, additional options, -other than <samp>-f</samp> and <samp>-F</samp>, are ignored. +<p>The <samp class="option">-p</samp> option will display the attributes and values of each +<var class="var">name</var>. +When <samp class="option">-p</samp> is used with <var class="var">name</var> arguments, additional options, +other than <samp class="option">-f</samp> and <samp class="option">-F</samp>, are ignored. </p> -<p>When <samp>-p</samp> is supplied without <var>name</var> arguments, <code>declare</code> +<p>When <samp class="option">-p</samp> is supplied without <var class="var">name</var> arguments, <code class="code">declare</code> will display the attributes and values of all variables having the attributes specified by the additional options. -If no other options are supplied with <samp>-p</samp>, <code>declare</code> will -display the attributes and values of all shell variables. The <samp>-f</samp> +If no other options are supplied with <samp class="option">-p</samp>, <code class="code">declare</code> will +display the attributes and values of all shell variables. The <samp class="option">-f</samp> option will restrict the display to shell functions. </p> -<p>The <samp>-F</samp> option inhibits the display of function definitions; +<p>The <samp class="option">-F</samp> option inhibits the display of function definitions; only the function name and attributes are printed. -If the <code>extdebug</code> shell option is enabled using <code>shopt</code> -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), the source file name and line number where -each <var>name</var> is defined are displayed as well. -<samp>-F</samp> implies <samp>-f</samp>. +If the <code class="code">extdebug</code> shell option is enabled using <code class="code">shopt</code> +(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), the source file name and line number where +each <var class="var">name</var> is defined are displayed as well. +<samp class="option">-F</samp> implies <samp class="option">-f</samp>. </p> -<p>The <samp>-g</samp> option forces variables to be created or modified at -the global scope, even when <code>declare</code> is executed in a shell function. +<p>The <samp class="option">-g</samp> option forces variables to be created or modified at +the global scope, even when <code class="code">declare</code> is executed in a shell function. It is ignored in all other cases. </p> -<p>The <samp>-I</samp> option causes local variables to inherit the attributes -(except the <code>nameref</code> attribute) +<p>The <samp class="option">-I</samp> option causes local variables to inherit the attributes +(except the <code class="code">nameref</code> attribute) and value of any existing variable with the same -<var>name</var> at a surrounding scope. +<var class="var">name</var> at a surrounding scope. If there is no existing variable, the local variable is initially unset. </p> <p>The following options can be used to restrict output to variables with the specified attributes or to give variables attributes: </p> -<dl compact="compact"> -<dt><span><code>-a</code></span></dt> -<dd><p>Each <var>name</var> is an indexed array variable (see <a href="#Arrays">Arrays</a>). +<dl class="table"> +<dt><code class="code">-a</code></dt> +<dd><p>Each <var class="var">name</var> is an indexed array variable (see <a class="pxref" href="#Arrays">Arrays</a>). </p> </dd> -<dt><span><code>-A</code></span></dt> -<dd><p>Each <var>name</var> is an associative array variable (see <a href="#Arrays">Arrays</a>). +<dt><code class="code">-A</code></dt> +<dd><p>Each <var class="var">name</var> is an associative array variable (see <a class="pxref" href="#Arrays">Arrays</a>). </p> </dd> -<dt><span><code>-f</code></span></dt> +<dt><code class="code">-f</code></dt> <dd><p>Use function names only. </p> </dd> -<dt><span><code>-i</code></span></dt> +<dt><code class="code">-i</code></dt> <dd><p>The variable is to be treated as -an integer; arithmetic evaluation (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>) is +an integer; arithmetic evaluation (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>) is performed when the variable is assigned a value. </p> </dd> -<dt><span><code>-l</code></span></dt> +<dt><code class="code">-l</code></dt> <dd><p>When the variable is assigned a value, all upper-case characters are converted to lower-case. The upper-case attribute is disabled. </p> </dd> -<dt><span><code>-n</code></span></dt> -<dd><p>Give each <var>name</var> the <code>nameref</code> attribute, making +<dt><code class="code">-n</code></dt> +<dd><p>Give each <var class="var">name</var> the <code class="code">nameref</code> attribute, making it a name reference to another variable. -That other variable is defined by the value of <var>name</var>. +That other variable is defined by the value of <var class="var">name</var>. All references, assignments, and attribute modifications -to <var>name</var>, except for those using or changing the -<samp>-n</samp> attribute itself, are performed on the variable referenced by -<var>name</var>&rsquo;s value. +to <var class="var">name</var>, except for those using or changing the +<samp class="option">-n</samp> attribute itself, are performed on the variable referenced by +<var class="var">name</var>&rsquo;s value. The nameref attribute cannot be applied to array variables. </p> </dd> -<dt><span><code>-r</code></span></dt> -<dd><p>Make <var>name</var>s readonly. These names cannot then be assigned values +<dt><code class="code">-r</code></dt> +<dd><p>Make <var class="var">name</var>s readonly. These names cannot then be assigned values by subsequent assignment statements or unset. </p> </dd> -<dt><span><code>-t</code></span></dt> -<dd><p>Give each <var>name</var> the <code>trace</code> attribute. -Traced functions inherit the <code>DEBUG</code> and <code>RETURN</code> traps from +<dt><code class="code">-t</code></dt> +<dd><p>Give each <var class="var">name</var> the <code class="code">trace</code> attribute. +Traced functions inherit the <code class="code">DEBUG</code> and <code class="code">RETURN</code> traps from the calling shell. The trace attribute has no special meaning for variables. </p> </dd> -<dt><span><code>-u</code></span></dt> +<dt><code class="code">-u</code></dt> <dd><p>When the variable is assigned a value, all lower-case characters are converted to upper-case. The lower-case attribute is disabled. </p> </dd> -<dt><span><code>-x</code></span></dt> -<dd><p>Mark each <var>name</var> for export to subsequent commands via +<dt><code class="code">-x</code></dt> +<dd><p>Mark each <var class="var">name</var> for export to subsequent commands via the environment. </p></dd> </dl> -<p>Using &lsquo;<samp>+</samp>&rsquo; instead of &lsquo;<samp>-</samp>&rsquo; turns off the attribute instead, -with the exceptions that &lsquo;<samp>+a</samp>&rsquo; and &lsquo;<samp>+A</samp>&rsquo; -may not be used to destroy array variables and &lsquo;<samp>+r</samp>&rsquo; will not +<p>Using &lsquo;<samp class="samp">+</samp>&rsquo; instead of &lsquo;<samp class="samp">-</samp>&rsquo; turns off the attribute instead, +with the exceptions that &lsquo;<samp class="samp">+a</samp>&rsquo; and &lsquo;<samp class="samp">+A</samp>&rsquo; +may not be used to destroy array variables and &lsquo;<samp class="samp">+r</samp>&rsquo; will not remove the readonly attribute. -When used in a function, <code>declare</code> makes each <var>name</var> local, -as with the <code>local</code> command, unless the <samp>-g</samp> option is used. -If a variable name is followed by =<var>value</var>, the value of the variable -is set to <var>value</var>. +When used in a function, <code class="code">declare</code> makes each <var class="var">name</var> local, +as with the <code class="code">local</code> command, unless the <samp class="option">-g</samp> option is used. +If a variable name is followed by =<var class="var">value</var>, the value of the variable +is set to <var class="var">value</var>. </p> -<p>When using <samp>-a</samp> or <samp>-A</samp> and the compound assignment syntax to +<p>When using <samp class="option">-a</samp> or <samp class="option">-A</samp> and the compound assignment syntax to create array variables, additional attributes do not take effect until subsequent assignments. </p> <p>The return status is zero unless an invalid option is encountered, -an attempt is made to define a function using &lsquo;<samp>-f foo=bar</samp>&rsquo;, +an attempt is made to define a function using &lsquo;<samp class="samp">-f foo=bar</samp>&rsquo;, 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 <a href="#Arrays">Arrays</a>), -one of the <var>name</var>s is not a valid shell variable name, +using the compound assignment syntax (see <a class="pxref" href="#Arrays">Arrays</a>), +one of the <var class="var">name</var>s is not a valid shell variable name, an attempt is made to turn off readonly 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 <samp>-f</samp>. +or an attempt is made to display a non-existent function with <samp class="option">-f</samp>. </p> </dd> -<dt id='index-echo'><span><code>echo</code><a href='#index-echo' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-echo"></a><span><code class="code">echo</code><a class="copiable-link" href="#index-echo"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">echo [-neE] [<var>arg</var> &hellip;] +<pre class="example-preformatted">echo [-neE] [<var class="var">arg</var> ...] </pre></div> -<p>Output the <var>arg</var>s, separated by spaces, terminated with a +<p>Output the <var class="var">arg</var>s, separated by spaces, terminated with a newline. The return status is 0 unless a write error occurs. -If <samp>-n</samp> is specified, the trailing newline is suppressed. -If the <samp>-e</samp> option is given, interpretation of the following +If <samp class="option">-n</samp> is specified, the trailing newline is suppressed. +If the <samp class="option">-e</samp> option is given, interpretation of the following backslash-escaped characters is enabled. -The <samp>-E</samp> option disables the interpretation of these escape characters, +The <samp class="option">-E</samp> option disables the interpretation of these escape characters, even on systems where they are interpreted by default. -The <code>xpg_echo</code> shell option may be used to -dynamically determine whether or not <code>echo</code> expands these -escape characters by default. -<code>echo</code> does not interpret <samp>--</samp> to mean the end of options. -</p> -<p><code>echo</code> interprets the following escape sequences: -</p><dl compact="compact"> -<dt><span><code>\a</code></span></dt> +The <code class="code">xpg_echo</code> shell option may be used to +dynamically determine whether or not <code class="code">echo</code> +interprets any options and +expands these escape characters by default. +<code class="code">echo</code> does not interpret <samp class="option">--</samp> to mean the end of options. +</p> +<p><code class="code">echo</code> interprets the following escape sequences: +</p><dl class="table"> +<dt><code class="code">\a</code></dt> <dd><p>alert (bell) </p></dd> -<dt><span><code>\b</code></span></dt> +<dt><code class="code">\b</code></dt> <dd><p>backspace </p></dd> -<dt><span><code>\c</code></span></dt> +<dt><code class="code">\c</code></dt> <dd><p>suppress further output </p></dd> -<dt><span><code>\e</code></span></dt> -<dt><span><code>\E</code></span></dt> +<dt><code class="code">\e</code></dt> +<dt><code class="code">\E</code></dt> <dd><p>escape </p></dd> -<dt><span><code>\f</code></span></dt> +<dt><code class="code">\f</code></dt> <dd><p>form feed </p></dd> -<dt><span><code>\n</code></span></dt> +<dt><code class="code">\n</code></dt> <dd><p>new line </p></dd> -<dt><span><code>\r</code></span></dt> +<dt><code class="code">\r</code></dt> <dd><p>carriage return </p></dd> -<dt><span><code>\t</code></span></dt> +<dt><code class="code">\t</code></dt> <dd><p>horizontal tab </p></dd> -<dt><span><code>\v</code></span></dt> +<dt><code class="code">\v</code></dt> <dd><p>vertical tab </p></dd> -<dt><span><code>\\</code></span></dt> +<dt><code class="code">\\</code></dt> <dd><p>backslash </p></dd> -<dt><span><code>\0<var>nnn</var></code></span></dt> -<dd><p>the eight-bit character whose value is the octal value <var>nnn</var> +<dt><code class="code">\0<var class="var">nnn</var></code></dt> +<dd><p>the eight-bit character whose value is the octal value <var class="var">nnn</var> (zero to three octal digits) </p></dd> -<dt><span><code>\x<var>HH</var></code></span></dt> -<dd><p>the eight-bit character whose value is the hexadecimal value <var>HH</var> +<dt><code class="code">\x<var class="var">HH</var></code></dt> +<dd><p>the eight-bit character whose value is the hexadecimal value <var class="var">HH</var> (one or two hex digits) </p></dd> -<dt><span><code>\u<var>HHHH</var></code></span></dt> +<dt><code class="code">\u<var class="var">HHHH</var></code></dt> <dd><p>the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value -<var>HHHH</var> (one to four hex digits) +<var class="var">HHHH</var> (one to four hex digits) </p></dd> -<dt><span><code>\U<var>HHHHHHHH</var></code></span></dt> +<dt><code class="code">\U<var class="var">HHHHHHHH</var></code></dt> <dd><p>the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value -<var>HHHHHHHH</var> (one to eight hex digits) +<var class="var">HHHHHHHH</var> (one to eight hex digits) </p></dd> </dl> </dd> -<dt id='index-enable'><span><code>enable</code><a href='#index-enable' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-enable"></a><span><code class="code">enable</code><a class="copiable-link" href="#index-enable"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">enable [-a] [-dnps] [-f <var>filename</var>] [<var>name</var> &hellip;] +<pre class="example-preformatted">enable [-a] [-dnps] [-f <var class="var">filename</var>] [<var class="var">name</var> ...] </pre></div> <p>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 <samp>-n</samp> is used, the <var>name</var>s become disabled. Otherwise -<var>name</var>s are enabled. For example, to use the <code>test</code> binary -found via <code>$PATH</code> instead of the shell builtin version, type -&lsquo;<samp>enable -n test</samp>&rsquo;. +If <samp class="option">-n</samp> is used, the <var class="var">name</var>s become disabled. Otherwise +<var class="var">name</var>s are enabled. For example, to use the <code class="code">test</code> binary +found via <code class="env">$PATH</code> instead of the shell builtin version, type +&lsquo;<samp class="samp">enable -n test</samp>&rsquo;. </p> -<p>If the <samp>-p</samp> option is supplied, or no <var>name</var> arguments appear, +<p>If the <samp class="option">-p</samp> option is supplied, or no <var class="var">name</var> arguments appear, a list of shell builtins is printed. With no other arguments, the list consists of all enabled shell builtins. -The <samp>-a</samp> option means to list +The <samp class="option">-a</samp> option means to list each builtin with an indication of whether or not it is enabled. </p> -<p>The <samp>-f</samp> option means to load the new builtin command <var>name</var> -from shared object <var>filename</var>, on systems that support dynamic loading. -Bash will use the value of the <code>BASH_LOADABLES_PATH</code> variable as a -colon-separated list of directories in which to search for <var>filename</var>. -The default is system-dependent. -The <samp>-d</samp> option will delete a builtin loaded with <samp>-f</samp>. +<p>The <samp class="option">-f</samp> option means to load the new builtin command <var class="var">name</var> +from shared object <var class="var">filename</var>, on systems that support dynamic loading. +Bash will use the value of the <code class="env">BASH_LOADABLES_PATH</code> variable as a +colon-separated list of directories in which to search for <var class="var">filename</var>, +if <var class="var">filename</var> does not contain a slash. +The default is system-dependent, +and may include &quot;.&quot; to force a search of the current directory. +The <samp class="option">-d</samp> option will delete a builtin loaded with <samp class="option">-f</samp>. </p> <p>If there are no options, a list of the shell builtins is displayed. -The <samp>-s</samp> option restricts <code>enable</code> to the <small>POSIX</small> special -builtins. If <samp>-s</samp> is used with <samp>-f</samp>, the new builtin becomes -a special builtin (see <a href="#Special-Builtins">Special Builtins</a>). +The <samp class="option">-s</samp> option restricts <code class="code">enable</code> to the <small class="sc">POSIX</small> special +builtins. If <samp class="option">-s</samp> is used with <samp class="option">-f</samp>, the new builtin becomes +a special builtin (see <a class="pxref" href="#Special-Builtins">Special Builtins</a>). </p> -<p>If no options are supplied and a <var>name</var> is not a shell builtin, -<code>enable</code> will attempt to load <var>name</var> from a shared object named -<var>name</var>, as if the command were -&lsquo;<samp>enable -f <var>name</var> <var>name</var></samp>&rsquo;. +<p>If no options are supplied and a <var class="var">name</var> is not a shell builtin, +<code class="code">enable</code> will attempt to load <var class="var">name</var> from a shared object named +<var class="var">name</var>, as if the command were +&lsquo;<samp class="samp">enable -f <var class="var">name</var> <var class="var">name</var></samp>&rsquo;. </p> -<p>The return status is zero unless a <var>name</var> is not a shell builtin +<p>The return status is zero unless a <var class="var">name</var> is not a shell builtin or there is an error loading a new builtin from a shared object. </p> </dd> -<dt id='index-help'><span><code>help</code><a href='#index-help' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-help"></a><span><code class="code">help</code><a class="copiable-link" href="#index-help"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">help [-dms] [<var>pattern</var>] +<pre class="example-preformatted">help [-dms] [<var class="var">pattern</var>] </pre></div> <p>Display helpful information about builtin commands. -If <var>pattern</var> is specified, <code>help</code> gives detailed help -on all commands matching <var>pattern</var>, otherwise a list of +If <var class="var">pattern</var> is specified, <code class="code">help</code> gives detailed help +on all commands matching <var class="var">pattern</var>, otherwise a list of the builtins is printed. </p> <p>Options, if supplied, have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-d</code></span></dt> -<dd><p>Display a short description of each <var>pattern</var> +<dl class="table"> +<dt><code class="code">-d</code></dt> +<dd><p>Display a short description of each <var class="var">pattern</var> </p></dd> -<dt><span><code>-m</code></span></dt> -<dd><p>Display the description of each <var>pattern</var> in a manpage-like format +<dt><code class="code">-m</code></dt> +<dd><p>Display the description of each <var class="var">pattern</var> in a manpage-like format </p></dd> -<dt><span><code>-s</code></span></dt> -<dd><p>Display only a short usage synopsis for each <var>pattern</var> +<dt><code class="code">-s</code></dt> +<dd><p>Display only a short usage synopsis for each <var class="var">pattern</var> </p></dd> </dl> -<p>The return status is zero unless no command matches <var>pattern</var>. +<p>The return status is zero unless no command matches <var class="var">pattern</var>. </p> </dd> -<dt id='index-let'><span><code>let</code><a href='#index-let' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-let"></a><span><code class="code">let</code><a class="copiable-link" href="#index-let"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">let <var>expression</var> [<var>expression</var> &hellip;] +<pre class="example-preformatted">let <var class="var">expression</var> [<var class="var">expression</var> ...] </pre></div> -<p>The <code>let</code> builtin allows arithmetic to be performed on shell -variables. Each <var>expression</var> is evaluated according to the -rules given below in <a href="#Shell-Arithmetic">Shell Arithmetic</a>. If the -last <var>expression</var> evaluates to 0, <code>let</code> returns 1; +<p>The <code class="code">let</code> builtin allows arithmetic to be performed on shell +variables. Each <var class="var">expression</var> is evaluated according to the +rules given below in <a class="ref" href="#Shell-Arithmetic">Shell Arithmetic</a>. If the +last <var class="var">expression</var> evaluates to 0, <code class="code">let</code> returns 1; otherwise 0 is returned. </p> </dd> -<dt id='index-local'><span><code>local</code><a href='#index-local' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-local"></a><span><code class="code">local</code><a class="copiable-link" href="#index-local"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">local [<var>option</var>] <var>name</var>[=<var>value</var>] &hellip; +<pre class="example-preformatted">local [<var class="var">option</var>] <var class="var">name</var>[=<var class="var">value</var>] ... </pre></div> -<p>For each argument, a local variable named <var>name</var> is created, -and assigned <var>value</var>. -The <var>option</var> can be any of the options accepted by <code>declare</code>. -<code>local</code> can only be used within a function; it makes the variable -<var>name</var> have a visible scope restricted to that function and its +<p>For each argument, a local variable named <var class="var">name</var> is created, +and assigned <var class="var">value</var>. +The <var class="var">option</var> can be any of the options accepted by <code class="code">declare</code>. +<code class="code">local</code> can only be used within a function; it makes the variable +<var class="var">name</var> have a visible scope restricted to that function and its children. -If <var>name</var> is &lsquo;<samp>-</samp>&rsquo;, the set of shell options is made local to the -function in which <code>local</code> is invoked: shell options changed using -the <code>set</code> builtin inside the function are restored to their original +If <var class="var">name</var> is &lsquo;<samp class="samp">-</samp>&rsquo;, the set of shell options is made local to the +function in which <code class="code">local</code> is invoked: shell options changed using +the <code class="code">set</code> builtin inside the function +after the call to <code class="code">local</code> +are restored to their original values when the function returns. -The restore is effected as if a series of <code>set</code> commands were executed +The restore is effected as if a series of <code class="code">set</code> commands were executed to restore the values that were in place before the function. -The return status is zero unless <code>local</code> is used outside -a function, an invalid <var>name</var> is supplied, or <var>name</var> is a +The return status is zero unless <code class="code">local</code> is used outside +a function, an invalid <var class="var">name</var> is supplied, or <var class="var">name</var> is a readonly variable. </p> </dd> -<dt id='index-logout'><span><code>logout</code><a href='#index-logout' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-logout"></a><span><code class="code">logout</code><a class="copiable-link" href="#index-logout"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">logout [<var>n</var>] +<pre class="example-preformatted">logout [<var class="var">n</var>] </pre></div> -<p>Exit a login shell, returning a status of <var>n</var> to the shell&rsquo;s +<p>Exit a login shell, returning a status of <var class="var">n</var> to the shell&rsquo;s parent. </p> </dd> -<dt id='index-mapfile'><span><code>mapfile</code><a href='#index-mapfile' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-mapfile"></a><span><code class="code">mapfile</code><a class="copiable-link" href="#index-mapfile"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">mapfile [-d <var>delim</var>] [-n <var>count</var>] [-O <var>origin</var>] [-s <var>count</var>] - [-t] [-u <var>fd</var>] [-C <var>callback</var>] [-c <var>quantum</var>] [<var>array</var>] +<pre class="example-preformatted">mapfile [-d <var class="var">delim</var>] [-n <var class="var">count</var>] [-O <var class="var">origin</var>] [-s <var class="var">count</var>] + [-t] [-u <var class="var">fd</var>] [-C <var class="var">callback</var>] [-c <var class="var">quantum</var>] [<var class="var">array</var>] </pre></div> -<p>Read lines from the standard input into the indexed array variable <var>array</var>, -or from file descriptor <var>fd</var> -if the <samp>-u</samp> option is supplied. -The variable <code>MAPFILE</code> is the default <var>array</var>. +<p>Read lines from the standard input into the indexed array variable <var class="var">array</var>, +or from file descriptor <var class="var">fd</var> +if the <samp class="option">-u</samp> option is supplied. +The variable <code class="code">MAPFILE</code> is the default <var class="var">array</var>. Options, if supplied, have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-d</code></span></dt> -<dd><p>The first character of <var>delim</var> is used to terminate each input line, +<dl class="table"> +<dt><code class="code">-d</code></dt> +<dd><p>The first character of <var class="var">delim</var> is used to terminate each input line, rather than newline. -If <var>delim</var> is the empty string, <code>mapfile</code> will terminate a line +If <var class="var">delim</var> is the empty string, <code class="code">mapfile</code> will terminate a line when it reads a NUL character. </p></dd> -<dt><span><code>-n</code></span></dt> -<dd><p>Copy at most <var>count</var> lines. If <var>count</var> is 0, all lines are copied. +<dt><code class="code">-n</code></dt> +<dd><p>Copy at most <var class="var">count</var> lines. If <var class="var">count</var> is 0, all lines are copied. </p></dd> -<dt><span><code>-O</code></span></dt> -<dd><p>Begin assigning to <var>array</var> at index <var>origin</var>. +<dt><code class="code">-O</code></dt> +<dd><p>Begin assigning to <var class="var">array</var> at index <var class="var">origin</var>. The default index is 0. </p></dd> -<dt><span><code>-s</code></span></dt> -<dd><p>Discard the first <var>count</var> lines read. +<dt><code class="code">-s</code></dt> +<dd><p>Discard the first <var class="var">count</var> lines read. </p></dd> -<dt><span><code>-t</code></span></dt> -<dd><p>Remove a trailing <var>delim</var> (default newline) from each line read. +<dt><code class="code">-t</code></dt> +<dd><p>Remove a trailing <var class="var">delim</var> (default newline) from each line read. </p></dd> -<dt><span><code>-u</code></span></dt> -<dd><p>Read lines from file descriptor <var>fd</var> instead of the standard input. +<dt><code class="code">-u</code></dt> +<dd><p>Read lines from file descriptor <var class="var">fd</var> instead of the standard input. </p></dd> -<dt><span><code>-C</code></span></dt> -<dd><p>Evaluate <var>callback</var> each time <var>quantum</var> lines are read. -The <samp>-c</samp> option specifies <var>quantum</var>. +<dt><code class="code">-C</code></dt> +<dd><p>Evaluate <var class="var">callback</var> each time <var class="var">quantum</var> lines are read. +The <samp class="option">-c</samp> option specifies <var class="var">quantum</var>. </p></dd> -<dt><span><code>-c</code></span></dt> -<dd><p>Specify the number of lines read between each call to <var>callback</var>. +<dt><code class="code">-c</code></dt> +<dd><p>Specify the number of lines read between each call to <var class="var">callback</var>. </p></dd> </dl> -<p>If <samp>-C</samp> is specified without <samp>-c</samp>, +<p>If <samp class="option">-C</samp> is specified without <samp class="option">-c</samp>, the default quantum is 5000. -When <var>callback</var> is evaluated, it is supplied the index of the next +When <var class="var">callback</var> is evaluated, it is supplied the index of the next array element to be assigned and the line to be assigned to that element as additional arguments. -<var>callback</var> is evaluated after the line is read but before the +<var class="var">callback</var> is evaluated after the line is read but before the array element is assigned. </p> -<p>If not supplied with an explicit origin, <code>mapfile</code> will clear <var>array</var> +<p>If not supplied with an explicit origin, <code class="code">mapfile</code> will clear <var class="var">array</var> before assigning to it. </p> -<p><code>mapfile</code> returns successfully unless an invalid option or option -argument is supplied, <var>array</var> is invalid or unassignable, or <var>array</var> +<p><code class="code">mapfile</code> returns successfully unless an invalid option or option +argument is supplied, <var class="var">array</var> is invalid or unassignable, or <var class="var">array</var> is not an indexed array. </p> </dd> -<dt id='index-printf'><span><code>printf</code><a href='#index-printf' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-printf"></a><span><code class="code">printf</code><a class="copiable-link" href="#index-printf"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">printf [-v <var>var</var>] <var>format</var> [<var>arguments</var>] +<pre class="example-preformatted">printf [-v <var class="var">var</var>] <var class="var">format</var> [<var class="var">arguments</var>] </pre></div> -<p>Write the formatted <var>arguments</var> to the standard output under the -control of the <var>format</var>. -The <samp>-v</samp> option causes the output to be assigned to the variable -<var>var</var> rather than being printed to the standard output. +<p>Write the formatted <var class="var">arguments</var> to the standard output under the +control of the <var class="var">format</var>. +The <samp class="option">-v</samp> option causes the output to be assigned to the variable +<var class="var">var</var> rather than being printed to the standard output. </p> -<p>The <var>format</var> is a character string which contains three types of objects: +<p>The <var class="var">format</var> 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 format specifications, each of which causes printing of the next successive -<var>argument</var>. -In addition to the standard <code>printf(1)</code> formats, <code>printf</code> -interprets the following extensions: -</p> -<dl compact="compact"> -<dt><span><code>%b</code></span></dt> -<dd><p>Causes <code>printf</code> to expand backslash escape sequences in the -corresponding <var>argument</var> in the same way as <code>echo -e</code> -(see <a href="#Bash-Builtins">Bash Builtin Commands</a>). -</p></dd> -<dt><span><code>%q</code></span></dt> -<dd><p>Causes <code>printf</code> to output the -corresponding <var>argument</var> in a format that can be reused as shell input. -</p></dd> -<dt><span><code>%Q</code></span></dt> -<dd><p>like <code>%q</code>, but applies any supplied precision to the <var>argument</var> -before quoting it. +<var class="var">argument</var>. +In addition to the standard <code class="code">printf(3)</code> format characters +<code class="code">csndiouxXeEfFgGaA</code>, +<code class="code">printf</code> interprets the following additional format specifiers: +</p> +<dl class="table"> +<dt><code class="code">%b</code></dt> +<dd><p>Causes <code class="code">printf</code> to expand backslash escape sequences in the +corresponding <var class="var">argument</var> in the same way as <code class="code">echo -e</code> +(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). </p></dd> -<dt><span><code>%(<var>datefmt</var>)T</code></span></dt> -<dd><p>Causes <code>printf</code> to output the date-time string resulting from using -<var>datefmt</var> as a format string for <code>strftime</code>(3). -The corresponding <var>argument</var> is an integer representing the number of +<dt><code class="code">%q</code></dt> +<dd><p>Causes <code class="code">printf</code> to output the +corresponding <var class="var">argument</var> in a format that can be reused as shell input. +<code class="code">%q</code> and <code class="code">%Q</code>P use the ANSI-C quoting style (see <a class="pxref" href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>) +if any characters +in the argument string require it, and backslash quoting otherwise. +If the format string uses the <code class="code">printf</code> <var class="var">alternate form</var>, these two +formats quote the argument string using single quotes. +</p> +</dd> +<dt><code class="code">%Q</code></dt> +<dd><p>like <code class="code">%q</code>, but applies any supplied precision to the <var class="var">argument</var> +before quoting it. +</p> +</dd> +<dt><code class="code">%(<var class="var">datefmt</var>)T</code></dt> +<dd><p>Causes <code class="code">printf</code> to output the date-time string resulting from using +<var class="var">datefmt</var> as a format string for <code class="code">strftime</code>(3). +The corresponding <var class="var">argument</var> is an integer representing the number of seconds since the epoch. Two special argument values may be used: -1 represents the current time, and -2 represents the time the shell was invoked. If no argument is specified, conversion behaves as if -1 had been given. -This is an exception to the usual <code>printf</code> behavior. +This is an exception to the usual <code class="code">printf</code> behavior. </p></dd> </dl> -<p>The %b, %q, and %T directives all use the field width and precision +<p>The %b, %q, and %T format specifiers all use the field width and precision arguments from the format specification and write that many bytes from (or use that wide a field for) the expanded argument, which usually contains more characters than the original. </p> +<p>The %n format specifier accepts a corresponding argument that is treated +as a shell variable name. +</p> +<p>The %s and %c format specifiers accept an l (long) modifier, which forces +them to convert the argument string to a wide-character string and apply +any supplied field width and precision in terms of characters, not bytes. +</p> + <p>Arguments to non-string format specifiers are treated as C language constants, except that a leading plus or minus sign is allowed, and if the leading character is a single or double quote, the value is the ASCII value of the following character. </p> -<p>The <var>format</var> is reused as necessary to consume all of the <var>arguments</var>. -If the <var>format</var> requires more <var>arguments</var> than are supplied, the +<p>The <var class="var">format</var> is reused as necessary to consume all of the <var class="var">arguments</var>. +If the <var class="var">format</var> requires more <var class="var">arguments</var> than are supplied, 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. +appropriate, had been supplied. +The return value is zero on success, +non-zero if an invalid option is supplied or a write or assignment error +occurs. </p> </dd> -<dt id='index-read'><span><code>read</code><a href='#index-read' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-read"></a><span><code class="code">read</code><a class="copiable-link" href="#index-read"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">read [-ers] [-a <var>aname</var>] [-d <var>delim</var>] [-i <var>text</var>] [-n <var>nchars</var>] - [-N <var>nchars</var>] [-p <var>prompt</var>] [-t <var>timeout</var>] [-u <var>fd</var>] [<var>name</var> &hellip;] +<pre class="example-preformatted">read [-Eers] [-a <var class="var">aname</var>] [-d <var class="var">delim</var>] [-i <var class="var">text</var>] [-n <var class="var">nchars</var>] + [-N <var class="var">nchars</var>] [-p <var class="var">prompt</var>] [-t <var class="var">timeout</var>] [-u <var class="var">fd</var>] [<var class="var">name</var> ...] </pre></div> <p>One line is read from the standard input, or from the file descriptor -<var>fd</var> supplied as an argument to the <samp>-u</samp> option, -split into words as described above in <a href="#Word-Splitting">Word Splitting</a>, +<var class="var">fd</var> supplied as an argument to the <samp class="option">-u</samp> option, +split into words as described above in <a class="ref" href="#Word-Splitting">Word Splitting</a>, and the first word -is assigned to the first <var>name</var>, the second word to the second <var>name</var>, +is assigned to the first <var class="var">name</var>, the second word to the second <var class="var">name</var>, and so on. If there are more words than names, the remaining words and their intervening delimiters are assigned -to the last <var>name</var>. +to the last <var class="var">name</var>. If there are fewer words read from the input stream than names, the remaining names are assigned empty values. -The characters in the value of the <code>IFS</code> variable +The characters in the value of the <code class="env">IFS</code> variable are used to split the line into words using the same rules the shell -uses for expansion (described above in <a href="#Word-Splitting">Word Splitting</a>). -The backslash character &lsquo;<samp>\</samp>&rsquo; may be used to remove any special +uses for expansion (described above in <a class="ref" href="#Word-Splitting">Word Splitting</a>). +The backslash character &lsquo;<samp class="samp">\</samp>&rsquo; may be used to remove any special meaning for the next character read and for line continuation. </p> <p>Options, if supplied, have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-a <var>aname</var></code></span></dt> +<dl class="table"> +<dt><code class="code">-a <var class="var">aname</var></code></dt> <dd><p>The words are assigned to sequential indices of the array variable -<var>aname</var>, starting at 0. -All elements are removed from <var>aname</var> before the assignment. -Other <var>name</var> arguments are ignored. +<var class="var">aname</var>, starting at 0. +All elements are removed from <var class="var">aname</var> before the assignment. +Other <var class="var">name</var> arguments are ignored. </p> </dd> -<dt><span><code>-d <var>delim</var></code></span></dt> -<dd><p>The first character of <var>delim</var> is used to terminate the input line, +<dt><code class="code">-d <var class="var">delim</var></code></dt> +<dd><p>The first character of <var class="var">delim</var> is used to terminate the input line, rather than newline. -If <var>delim</var> is the empty string, <code>read</code> will terminate a line +If <var class="var">delim</var> is the empty string, <code class="code">read</code> will terminate a line when it reads a NUL character. </p> </dd> -<dt><span><code>-e</code></span></dt> -<dd><p>Readline (see <a href="#Command-Line-Editing">Command Line Editing</a>) is used to obtain the line. +<dt><code class="code">-e</code></dt> +<dd><p>Readline (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>) is used to obtain the line. Readline uses the current (or default, if line editing was not previously active) editing settings, but uses Readline&rsquo;s default filename completion. </p> </dd> -<dt><span><code>-i <var>text</var></code></span></dt> -<dd><p>If Readline is being used to read the line, <var>text</var> is placed into +<dt><code class="code">-E</code></dt> +<dd><p>Readline (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>) is used to obtain the line. +Readline uses the current (or default, if line editing was not previously +active) editing settings, but uses Bash&rsquo;s default completion, including +programmable completion. +</p> +</dd> +<dt><code class="code">-i <var class="var">text</var></code></dt> +<dd><p>If Readline is being used to read the line, <var class="var">text</var> is placed into the editing buffer before editing begins. </p> </dd> -<dt><span><code>-n <var>nchars</var></code></span></dt> -<dd><p><code>read</code> returns after reading <var>nchars</var> characters rather than +<dt><code class="code">-n <var class="var">nchars</var></code></dt> +<dd><p><code class="code">read</code> returns after reading <var class="var">nchars</var> characters rather than waiting for a complete line of input, but honors a delimiter if fewer -than <var>nchars</var> characters are read before the delimiter. +than <var class="var">nchars</var> characters are read before the delimiter. </p> </dd> -<dt><span><code>-N <var>nchars</var></code></span></dt> -<dd><p><code>read</code> returns after reading exactly <var>nchars</var> characters rather +<dt><code class="code">-N <var class="var">nchars</var></code></dt> +<dd><p><code class="code">read</code> returns after reading exactly <var class="var">nchars</var> characters rather than waiting for a complete line of input, unless EOF is encountered or -<code>read</code> times out. +<code class="code">read</code> times out. Delimiter characters encountered in the input are -not treated specially and do not cause <code>read</code> to return until -<var>nchars</var> characters are read. -The result is not split on the characters in <code>IFS</code>; the intent is +not treated specially and do not cause <code class="code">read</code> to return until +<var class="var">nchars</var> characters are read. +The result is not split on the characters in <code class="code">IFS</code>; the intent is that the variable is assigned exactly the characters read -(with the exception of backslash; see the <samp>-r</samp> option below). +(with the exception of backslash; see the <samp class="option">-r</samp> option below). </p> </dd> -<dt><span><code>-p <var>prompt</var></code></span></dt> -<dd><p>Display <var>prompt</var>, without a trailing newline, before attempting +<dt><code class="code">-p <var class="var">prompt</var></code></dt> +<dd><p>Display <var class="var">prompt</var>, without a trailing newline, before attempting to read any input. The prompt is displayed only if input is coming from a terminal. </p> </dd> -<dt><span><code>-r</code></span></dt> +<dt><code class="code">-r</code></dt> <dd><p>If this option is given, backslash does not act as an escape character. The backslash is considered to be part of the line. In particular, a backslash-newline pair may not then be used as a line continuation. </p> </dd> -<dt><span><code>-s</code></span></dt> +<dt><code class="code">-s</code></dt> <dd><p>Silent mode. If input is coming from a terminal, characters are not echoed. </p> </dd> -<dt><span><code>-t <var>timeout</var></code></span></dt> -<dd><p>Cause <code>read</code> to time out and return failure if a complete line of +<dt><code class="code">-t <var class="var">timeout</var></code></dt> +<dd><p>Cause <code class="code">read</code> to time out and return failure if a complete line of input (or a specified number of characters) -is not read within <var>timeout</var> seconds. -<var>timeout</var> may be a decimal number with a fractional portion following +is not read within <var class="var">timeout</var> seconds. +<var class="var">timeout</var> may be a decimal number with a fractional portion following the decimal point. -This option is only effective if <code>read</code> is reading input from a +This option is only effective if <code class="code">read</code> is reading input from a terminal, pipe, or other special file; it has no effect when reading from regular files. -If <code>read</code> times out, <code>read</code> saves any partial input read into -the specified variable <var>name</var>. -If <var>timeout</var> is 0, <code>read</code> returns immediately, without trying to +If <code class="code">read</code> times out, <code class="code">read</code> saves any partial input read into +the specified variable <var class="var">name</var>. +If <var class="var">timeout</var> is 0, <code class="code">read</code> returns immediately, without trying to read any data. The exit status is 0 if input is available on the specified file descriptor, or the read will return EOF, @@ -5578,601 +5775,619 @@ non-zero otherwise. The exit status is greater than 128 if the timeout is exceeded. </p> </dd> -<dt><span><code>-u <var>fd</var></code></span></dt> -<dd><p>Read input from file descriptor <var>fd</var>. +<dt><code class="code">-u <var class="var">fd</var></code></dt> +<dd><p>Read input from file descriptor <var class="var">fd</var>. </p></dd> </dl> -<p>If no <var>name</var>s are supplied, the line read, +<p>Other than the case where <var class="var">delim</var> is the empty string, <code class="code">read</code> +ignores any NUL characters in the input. +</p> +<p>If no <var class="var">name</var>s are supplied, the line read, without the ending delimiter but otherwise unmodified, is assigned to the -variable <code>REPLY</code>. -The exit status is zero, unless end-of-file is encountered, <code>read</code> +variable <code class="env">REPLY</code>. +The exit status is zero, unless end-of-file is encountered, <code class="code">read</code> times out (in which case the status is greater than 128), a variable assignment error (such as assigning to a readonly variable) occurs, -or an invalid file descriptor is supplied as the argument to <samp>-u</samp>. +or an invalid file descriptor is supplied as the argument to <samp class="option">-u</samp>. </p> </dd> -<dt id='index-readarray'><span><code>readarray</code><a href='#index-readarray' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-readarray"></a><span><code class="code">readarray</code><a class="copiable-link" href="#index-readarray"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">readarray [-d <var>delim</var>] [-n <var>count</var>] [-O <var>origin</var>] [-s <var>count</var>] - [-t] [-u <var>fd</var>] [-C <var>callback</var>] [-c <var>quantum</var>] [<var>array</var>] +<pre class="example-preformatted">readarray [-d <var class="var">delim</var>] [-n <var class="var">count</var>] [-O <var class="var">origin</var>] [-s <var class="var">count</var>] + [-t] [-u <var class="var">fd</var>] [-C <var class="var">callback</var>] [-c <var class="var">quantum</var>] [<var class="var">array</var>] </pre></div> -<p>Read lines from the standard input into the indexed array variable <var>array</var>, -or from file descriptor <var>fd</var> -if the <samp>-u</samp> option is supplied. +<p>Read lines from the standard input into the indexed array variable <var class="var">array</var>, +or from file descriptor <var class="var">fd</var> +if the <samp class="option">-u</samp> option is supplied. </p> -<p>A synonym for <code>mapfile</code>. +<p>A synonym for <code class="code">mapfile</code>. </p> </dd> -<dt id='index-source'><span><code>source</code><a href='#index-source' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-source"></a><span><code class="code">source</code><a class="copiable-link" href="#index-source"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">source <var>filename</var> +<pre class="example-preformatted">source <var class="var">filename</var> </pre></div> -<p>A synonym for <code>.</code> (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +<p>A synonym for <code class="code">.</code> (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). </p> </dd> -<dt id='index-type'><span><code>type</code><a href='#index-type' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-type"></a><span><code class="code">type</code><a class="copiable-link" href="#index-type"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">type [-afptP] [<var>name</var> &hellip;] +<pre class="example-preformatted">type [-afptP] [<var class="var">name</var> ...] </pre></div> -<p>For each <var>name</var>, indicate how it would be interpreted if used as a +<p>For each <var class="var">name</var>, indicate how it would be interpreted if used as a command name. </p> -<p>If the <samp>-t</samp> option is used, <code>type</code> prints a single word -which is one of &lsquo;<samp>alias</samp>&rsquo;, &lsquo;<samp>function</samp>&rsquo;, &lsquo;<samp>builtin</samp>&rsquo;, -&lsquo;<samp>file</samp>&rsquo; or &lsquo;<samp>keyword</samp>&rsquo;, -if <var>name</var> is an alias, shell function, shell builtin, -disk file, or shell reserved word, respectively. -If the <var>name</var> is not found, then nothing is printed, and -<code>type</code> returns a failure status. -</p> -<p>If the <samp>-p</samp> option is used, <code>type</code> either returns the name -of the disk file that would be executed, or nothing if <samp>-t</samp> -would not return &lsquo;<samp>file</samp>&rsquo;. -</p> -<p>The <samp>-P</samp> option forces a path search for each <var>name</var>, even if -<samp>-t</samp> would not return &lsquo;<samp>file</samp>&rsquo;. -</p> -<p>If a command is hashed, <samp>-p</samp> and <samp>-P</samp> print the hashed value, -which is not necessarily the file that appears first in <code>$PATH</code>. -</p> -<p>If the <samp>-a</samp> option is used, <code>type</code> returns all of the places -that contain an executable named <var>file</var>. -This includes aliases and functions, if and only if the <samp>-p</samp> option -is not also used. -</p> -<p>If the <samp>-f</samp> option is used, <code>type</code> does not attempt to find -shell functions, as with the <code>command</code> builtin. -</p> -<p>The return status is zero if all of the <var>name</var>s are found, non-zero +<p>If the <samp class="option">-t</samp> option is used, <code class="code">type</code> prints a single word +which is one of &lsquo;<samp class="samp">alias</samp>&rsquo;, &lsquo;<samp class="samp">keyword</samp>&rsquo;, &lsquo;<samp class="samp">function</samp>&rsquo;, +&lsquo;<samp class="samp">builtin</samp>&rsquo;, or &lsquo;<samp class="samp">file</samp>&rsquo;, +if <var class="var">name</var> is an alias, shell reserved word, shell function, +shell builtin, or executable disk file, respectively. +If the <var class="var">name</var> is not found, then nothing is printed, and +<code class="code">type</code> returns a failure status. +</p> +<p>If the <samp class="option">-p</samp> option is used, <code class="code">type</code> either returns the name +of the executable file that would be found by searching <code class="code">$PATH</code>, +or nothing if <samp class="option">-t</samp> would not return &lsquo;<samp class="samp">file</samp>&rsquo;. +</p> +<p>The <samp class="option">-P</samp> option forces a path search for each <var class="var">name</var>, even if +<samp class="option">-t</samp> would not return &lsquo;<samp class="samp">file</samp>&rsquo;. +</p> +<p>If a <var class="var">name</var> is present in the table of hashed commands, +options <samp class="option">-p</samp> and <samp class="option">-P</samp> print the hashed value, which is not +necessarily the file that appears first in <code class="code">$PATH</code>. +</p> +<p>If the <samp class="option">-a</samp> option is used, <code class="code">type</code> returns all of the places +that contain a command named <var class="var">name</var>. +This includes aliases, reserved words, functions, and builtins, +but the path search options (<samp class="option">-p</samp> and <samp class="option">-P</samp>) can be supplied +to restrict the output to executable files. +If <samp class="option">-a</samp> is supplied with <samp class="option">-p</samp>, <code class="code">type</code> does not look +in the table of hashed commands, and only performs a <code class="code">PATH</code> +search for <var class="var">name</var>. +</p> +<p>If the <samp class="option">-f</samp> option is used, <code class="code">type</code> does not attempt to find +shell functions, as with the <code class="code">command</code> builtin. +</p> +<p>The return status is zero if all of the <var class="var">name</var>s are found, non-zero if any are not found. </p> </dd> -<dt id='index-typeset'><span><code>typeset</code><a href='#index-typeset' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-typeset"></a><span><code class="code">typeset</code><a class="copiable-link" href="#index-typeset"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">typeset [-afFgrxilnrtux] [-p] [<var>name</var>[=<var>value</var>] &hellip;] +<pre class="example-preformatted">typeset [-afFgrxilnrtux] [-p] [<var class="var">name</var>[=<var class="var">value</var>] ...] </pre></div> -<p>The <code>typeset</code> command is supplied for compatibility with the Korn +<p>The <code class="code">typeset</code> command is supplied for compatibility with the Korn shell. -It is a synonym for the <code>declare</code> builtin command. +It is a synonym for the <code class="code">declare</code> builtin command. </p> </dd> -<dt id='index-ulimit'><span><code>ulimit</code><a href='#index-ulimit' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-ulimit"></a><span><code class="code">ulimit</code><a class="copiable-link" href="#index-ulimit"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">ulimit [-HS] -a -ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [<var>limit</var>] +<pre class="example-preformatted">ulimit [-HS] -a +ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [<var class="var">limit</var>] </pre></div> -<p><code>ulimit</code> provides control over the resources available to processes +<p><code class="code">ulimit</code> provides control over the resources available to processes started by the shell, on systems that allow such control. If an option is given, it is interpreted as follows: </p> -<dl compact="compact"> -<dt><span><code>-S</code></span></dt> +<dl class="table"> +<dt><code class="code">-S</code></dt> <dd><p>Change and report the soft limit associated with a resource. </p> </dd> -<dt><span><code>-H</code></span></dt> +<dt><code class="code">-H</code></dt> <dd><p>Change and report the hard limit associated with a resource. </p> </dd> -<dt><span><code>-a</code></span></dt> +<dt><code class="code">-a</code></dt> <dd><p>All current limits are reported; no limits are set. </p> </dd> -<dt><span><code>-b</code></span></dt> +<dt><code class="code">-b</code></dt> <dd><p>The maximum socket buffer size. </p> </dd> -<dt><span><code>-c</code></span></dt> +<dt><code class="code">-c</code></dt> <dd><p>The maximum size of core files created. </p> </dd> -<dt><span><code>-d</code></span></dt> +<dt><code class="code">-d</code></dt> <dd><p>The maximum size of a process&rsquo;s data segment. </p> </dd> -<dt><span><code>-e</code></span></dt> +<dt><code class="code">-e</code></dt> <dd><p>The maximum scheduling priority (&quot;nice&quot;). </p> </dd> -<dt><span><code>-f</code></span></dt> +<dt><code class="code">-f</code></dt> <dd><p>The maximum size of files written by the shell and its children. </p> </dd> -<dt><span><code>-i</code></span></dt> +<dt><code class="code">-i</code></dt> <dd><p>The maximum number of pending signals. </p> </dd> -<dt><span><code>-k</code></span></dt> +<dt><code class="code">-k</code></dt> <dd><p>The maximum number of kqueues that may be allocated. </p> </dd> -<dt><span><code>-l</code></span></dt> +<dt><code class="code">-l</code></dt> <dd><p>The maximum size that may be locked into memory. </p> </dd> -<dt><span><code>-m</code></span></dt> +<dt><code class="code">-m</code></dt> <dd><p>The maximum resident set size (many systems do not honor this limit). </p> </dd> -<dt><span><code>-n</code></span></dt> +<dt><code class="code">-n</code></dt> <dd><p>The maximum number of open file descriptors (most systems do not allow this value to be set). </p> </dd> -<dt><span><code>-p</code></span></dt> +<dt><code class="code">-p</code></dt> <dd><p>The pipe buffer size. </p> </dd> -<dt><span><code>-q</code></span></dt> -<dd><p>The maximum number of bytes in <small>POSIX</small> message queues. +<dt><code class="code">-q</code></dt> +<dd><p>The maximum number of bytes in <small class="sc">POSIX</small> message queues. </p> </dd> -<dt><span><code>-r</code></span></dt> +<dt><code class="code">-r</code></dt> <dd><p>The maximum real-time scheduling priority. </p> </dd> -<dt><span><code>-s</code></span></dt> +<dt><code class="code">-s</code></dt> <dd><p>The maximum stack size. </p> </dd> -<dt><span><code>-t</code></span></dt> +<dt><code class="code">-t</code></dt> <dd><p>The maximum amount of cpu time in seconds. </p> </dd> -<dt><span><code>-u</code></span></dt> +<dt><code class="code">-u</code></dt> <dd><p>The maximum number of processes available to a single user. </p> </dd> -<dt><span><code>-v</code></span></dt> +<dt><code class="code">-v</code></dt> <dd><p>The maximum amount of virtual memory available to the shell, and, on some systems, to its children. </p> </dd> -<dt><span><code>-x</code></span></dt> +<dt><code class="code">-x</code></dt> <dd><p>The maximum number of file locks. </p> </dd> -<dt><span><code>-P</code></span></dt> +<dt><code class="code">-P</code></dt> <dd><p>The maximum number of pseudoterminals. </p> </dd> -<dt><span><code>-R</code></span></dt> +<dt><code class="code">-R</code></dt> <dd><p>The maximum time a real-time process can run before blocking, in microseconds. </p> </dd> -<dt><span><code>-T</code></span></dt> +<dt><code class="code">-T</code></dt> <dd><p>The maximum number of threads. </p></dd> </dl> -<p>If <var>limit</var> is given, and the <samp>-a</samp> option is not used, -<var>limit</var> is the new value of the specified resource. -The special <var>limit</var> values <code>hard</code>, <code>soft</code>, and -<code>unlimited</code> stand for the current hard limit, the current soft limit, +<p>If <var class="var">limit</var> is given, and the <samp class="option">-a</samp> option is not used, +<var class="var">limit</var> is the new value of the specified resource. +The special <var class="var">limit</var> values <code class="code">hard</code>, <code class="code">soft</code>, and +<code class="code">unlimited</code> stand for the current hard limit, the current soft limit, and no limit, respectively. A hard limit cannot be increased by a non-root user once it is set; a soft limit may be increased up to the value of the hard limit. Otherwise, the current value of the soft limit for the specified resource -is printed, unless the <samp>-H</samp> option is supplied. +is printed, unless the <samp class="option">-H</samp> option is supplied. When more than one resource is specified, the limit name and unit, if appropriate, are printed before the value. -When setting new limits, if neither <samp>-H</samp> nor <samp>-S</samp> is supplied, +When setting new limits, if neither <samp class="option">-H</samp> nor <samp class="option">-S</samp> is supplied, both the hard and soft limits are set. -If no option is given, then <samp>-f</samp> is assumed. Values are in 1024-byte +If no option is given, then <samp class="option">-f</samp> is assumed. Values are in 1024-byte increments, except for -<samp>-t</samp>, which is in seconds; -<samp>-R</samp>, which is in microseconds; -<samp>-p</samp>, which is in units of 512-byte blocks; -<samp>-P</samp>, -<samp>-T</samp>, -<samp>-b</samp>, -<samp>-k</samp>, -<samp>-n</samp> and <samp>-u</samp>, which are unscaled values; -and, when in <small>POSIX</small> Mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>), -<samp>-c</samp> and <samp>-f</samp>, which are in 512-byte increments. +<samp class="option">-t</samp>, which is in seconds; +<samp class="option">-R</samp>, which is in microseconds; +<samp class="option">-p</samp>, which is in units of 512-byte blocks; +<samp class="option">-P</samp>, +<samp class="option">-T</samp>, +<samp class="option">-b</samp>, +<samp class="option">-k</samp>, +<samp class="option">-n</samp> and <samp class="option">-u</samp>, which are unscaled values; +and, when in <small class="sc">POSIX</small> Mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>), +<samp class="option">-c</samp> and <samp class="option">-f</samp>, which are in 512-byte increments. </p> <p>The return status is zero unless an invalid option or argument is supplied, or an error occurs while setting a new limit. </p> </dd> -<dt id='index-unalias'><span><code>unalias</code><a href='#index-unalias' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-unalias"></a><span><code class="code">unalias</code><a class="copiable-link" href="#index-unalias"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">unalias [-a] [<var>name</var> &hellip; ] +<pre class="example-preformatted">unalias [-a] [<var class="var">name</var> ... ] </pre></div> -<p>Remove each <var>name</var> from the list of aliases. If <samp>-a</samp> is +<p>Remove each <var class="var">name</var> from the list of aliases. If <samp class="option">-a</samp> is supplied, all aliases are removed. -Aliases are described in <a href="#Aliases">Aliases</a>. +Aliases are described in <a class="ref" href="#Aliases">Aliases</a>. </p></dd> </dl> <hr> </div> -<div class="section" id="Modifying-Shell-Behavior"> -<div class="header"> +<div class="section-level-extent" id="Modifying-Shell-Behavior"> +<div class="nav-panel"> <p> Next: <a href="#Special-Builtins" accesskey="n" rel="next">Special Builtins</a>, Previous: <a href="#Bash-Builtins" accesskey="p" rel="prev">Bash Builtin Commands</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Modifying-Shell-Behavior-1"></span><h3 class="section">4.3 Modifying Shell Behavior</h3> +<h3 class="section" id="Modifying-Shell-Behavior-1"><span>4.3 Modifying Shell Behavior<a class="copiable-link" href="#Modifying-Shell-Behavior-1"> &para;</a></span></h3> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#The-Set-Builtin" accesskey="1">The Set Builtin</a></li> <li><a href="#The-Shopt-Builtin" accesskey="2">The Shopt Builtin</a></li> </ul> <hr> -<div class="subsection" id="The-Set-Builtin"> -<div class="header"> +<div class="subsection-level-extent" id="The-Set-Builtin"> +<div class="nav-panel"> <p> Next: <a href="#The-Shopt-Builtin" accesskey="n" rel="next">The Shopt Builtin</a>, Up: <a href="#Modifying-Shell-Behavior" accesskey="u" rel="up">Modifying Shell Behavior</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="The-Set-Builtin-1"></span><h4 class="subsection">4.3.1 The Set Builtin</h4> +<h4 class="subsection" id="The-Set-Builtin-1"><span>4.3.1 The Set Builtin<a class="copiable-link" href="#The-Set-Builtin-1"> &para;</a></span></h4> -<p>This builtin is so complicated that it deserves its own section. <code>set</code> +<p>This builtin is so complicated that it deserves its own section. <code class="code">set</code> allows you to change the values of shell options and set the positional parameters, or to display the names and values of shell variables. </p> -<dl compact="compact"> -<dt id='index-set'><span><code>set</code><a href='#index-set' class='copiable-anchor'> &para;</a></span></dt> +<dl class="table"> +<dt><a id="index-set"></a><span><code class="code">set</code><a class="copiable-link" href="#index-set"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">set [-abefhkmnptuvxBCEHPT] [-o <var>option-name</var>] [--] [-] [<var>argument</var> &hellip;] -set [+abefhkmnptuvxBCEHPT] [+o <var>option-name</var>] [--] [-] [<var>argument</var> &hellip;] +<pre class="example-preformatted">set [-abefhkmnptuvxBCEHPT] [-o <var class="var">option-name</var>] [--] [-] [<var class="var">argument</var> ...] +set [+abefhkmnptuvxBCEHPT] [+o <var class="var">option-name</var>] [--] [-] [<var class="var">argument</var> ...] +set -o +set +o </pre></div> -<p>If no options or arguments are supplied, <code>set</code> displays the names +<p>If no options or arguments are supplied, <code class="code">set</code> displays the names and values of all shell variables and functions, sorted according to the current locale, in a format that may be reused as input for setting or resetting the currently-set variables. Read-only variables cannot be reset. -In <small>POSIX</small> mode, only shell variables are listed. +In <small class="sc">POSIX</small> mode, only shell variables are listed. </p> <p>When options are supplied, they set or unset shell attributes. Options, if specified, have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-a</code></span></dt> +<dl class="table"> +<dt><code class="code">-a</code></dt> <dd><p>Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands. </p> </dd> -<dt><span><code>-b</code></span></dt> +<dt><code class="code">-b</code></dt> <dd><p>Cause the status of terminated background jobs to be reported immediately, rather than before printing the next primary prompt. </p> </dd> -<dt><span><code>-e</code></span></dt> +<dt><code class="code">-e</code></dt> <dd><p>Exit immediately if -a pipeline (see <a href="#Pipelines">Pipelines</a>), which may consist of a single simple command -(see <a href="#Simple-Commands">Simple Commands</a>), -a list (see <a href="#Lists">Lists of Commands</a>), -or a compound command (see <a href="#Compound-Commands">Compound Commands</a>) +a pipeline (see <a class="pxref" href="#Pipelines">Pipelines</a>), which may consist of a single simple command +(see <a class="pxref" href="#Simple-Commands">Simple Commands</a>), +a list (see <a class="pxref" href="#Lists">Lists of Commands</a>), +or a compound command (see <a class="pxref" href="#Compound-Commands">Compound Commands</a>) returns a non-zero status. The shell does not exit if the command that fails is part of the -command list immediately following a <code>while</code> or <code>until</code> keyword, -part of the test in an <code>if</code> statement, -part of any command executed in a <code>&amp;&amp;</code> or <code>||</code> list except -the command following the final <code>&amp;&amp;</code> or <code>||</code>, +command list immediately following a <code class="code">while</code> or <code class="code">until</code> keyword, +part of the test in an <code class="code">if</code> statement, +part of any command executed in a <code class="code">&amp;&amp;</code> or <code class="code">||</code> list except +the command following the final <code class="code">&amp;&amp;</code> or <code class="code">||</code>, any command in a pipeline but the last, -or if the command&rsquo;s return status is being inverted with <code>!</code>. +or if the command&rsquo;s return status is being inverted with <code class="code">!</code>. If a compound command other than a subshell returns a non-zero status because a command failed -while <samp>-e</samp> was being ignored, the shell does not exit. -A trap on <code>ERR</code>, if set, is executed before the shell exits. +while <samp class="option">-e</samp> was being ignored, the shell does not exit. +A trap on <code class="code">ERR</code>, if set, is executed before the shell exits. </p> <p>This option applies to the shell environment and each subshell environment -separately (see <a href="#Command-Execution-Environment">Command Execution Environment</a>), and may cause +separately (see <a class="pxref" href="#Command-Execution-Environment">Command Execution Environment</a>), and may cause subshells to exit before executing all the commands in the subshell. </p> <p>If a compound command or shell function executes in a context where -<samp>-e</samp> is being ignored, +<samp class="option">-e</samp> is being ignored, none of the commands executed within the compound command or function body -will be affected by the <samp>-e</samp> setting, even if <samp>-e</samp> is set +will be affected by the <samp class="option">-e</samp> setting, even if <samp class="option">-e</samp> is set and a command returns a failure status. -If a compound command or shell function sets <samp>-e</samp> while executing in -a context where <samp>-e</samp> is ignored, that setting will not have any +If a compound command or shell function sets <samp class="option">-e</samp> while executing in +a context where <samp class="option">-e</samp> is ignored, that setting will not have any effect until the compound command or the command containing the function call completes. </p> </dd> -<dt><span><code>-f</code></span></dt> +<dt><code class="code">-f</code></dt> <dd><p>Disable filename expansion (globbing). </p> </dd> -<dt><span><code>-h</code></span></dt> +<dt><code class="code">-h</code></dt> <dd><p>Locate and remember (hash) commands as they are looked up for execution. This option is enabled by default. </p> </dd> -<dt><span><code>-k</code></span></dt> +<dt><code class="code">-k</code></dt> <dd><p>All arguments in the form of assignment statements are placed in the environment for a command, not just those that precede the command name. </p> </dd> -<dt><span><code>-m</code></span></dt> -<dd><p>Job control is enabled (see <a href="#Job-Control">Job Control</a>). +<dt><code class="code">-m</code></dt> +<dd><p>Job control is enabled (see <a class="pxref" href="#Job-Control">Job Control</a>). All processes run in a separate process group. When a background job completes, the shell prints a line containing its exit status. </p> </dd> -<dt><span><code>-n</code></span></dt> +<dt><code class="code">-n</code></dt> <dd><p>Read commands but do not execute them. This may be used to check a script for syntax errors. This option is ignored by interactive shells. </p> </dd> -<dt><span><code>-o <var>option-name</var></code></span></dt> +<dt><code class="code">-o <var class="var">option-name</var></code></dt> <dd> -<p>Set the option corresponding to <var>option-name</var>: +<p>Set the option corresponding to <var class="var">option-name</var>. +If <samp class="option">-o</samp> is supplied with no <var class="var">option-name</var>, +<code class="code">set</code> prints the current shell options settings. +If <samp class="option">+o</samp> is supplied with no <var class="var">option-name</var>, +<code class="code">set</code> prints a series of +<code class="code">set</code> +commands to recreate the current option settings +on the standard output. +Valid option names are: </p> -<dl compact="compact"> -<dt><span><code>allexport</code></span></dt> -<dd><p>Same as <code>-a</code>. +<dl class="table"> +<dt><code class="code">allexport</code></dt> +<dd><p>Same as <code class="code">-a</code>. </p> </dd> -<dt><span><code>braceexpand</code></span></dt> -<dd><p>Same as <code>-B</code>. +<dt><code class="code">braceexpand</code></dt> +<dd><p>Same as <code class="code">-B</code>. </p> </dd> -<dt><span><code>emacs</code></span></dt> -<dd><p>Use an <code>emacs</code>-style line editing interface (see <a href="#Command-Line-Editing">Command Line Editing</a>). -This also affects the editing interface used for <code>read -e</code>. +<dt><code class="code">emacs</code></dt> +<dd><p>Use an <code class="code">emacs</code>-style line editing interface (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>). +This also affects the editing interface used for <code class="code">read -e</code>. </p> </dd> -<dt><span><code>errexit</code></span></dt> -<dd><p>Same as <code>-e</code>. +<dt><code class="code">errexit</code></dt> +<dd><p>Same as <code class="code">-e</code>. </p> </dd> -<dt><span><code>errtrace</code></span></dt> -<dd><p>Same as <code>-E</code>. +<dt><code class="code">errtrace</code></dt> +<dd><p>Same as <code class="code">-E</code>. </p> </dd> -<dt><span><code>functrace</code></span></dt> -<dd><p>Same as <code>-T</code>. +<dt><code class="code">functrace</code></dt> +<dd><p>Same as <code class="code">-T</code>. </p> </dd> -<dt><span><code>hashall</code></span></dt> -<dd><p>Same as <code>-h</code>. +<dt><code class="code">hashall</code></dt> +<dd><p>Same as <code class="code">-h</code>. </p> </dd> -<dt><span><code>histexpand</code></span></dt> -<dd><p>Same as <code>-H</code>. +<dt><code class="code">histexpand</code></dt> +<dd><p>Same as <code class="code">-H</code>. </p> </dd> -<dt><span><code>history</code></span></dt> -<dd><p>Enable command history, as described in <a href="#Bash-History-Facilities">Bash History Facilities</a>. +<dt><code class="code">history</code></dt> +<dd><p>Enable command history, as described in <a class="ref" href="#Bash-History-Facilities">Bash History Facilities</a>. This option is on by default in interactive shells. </p> </dd> -<dt><span><code>ignoreeof</code></span></dt> +<dt><code class="code">ignoreeof</code></dt> <dd><p>An interactive shell will not exit upon reading EOF. </p> </dd> -<dt><span><code>keyword</code></span></dt> -<dd><p>Same as <code>-k</code>. +<dt><code class="code">keyword</code></dt> +<dd><p>Same as <code class="code">-k</code>. </p> </dd> -<dt><span><code>monitor</code></span></dt> -<dd><p>Same as <code>-m</code>. +<dt><code class="code">monitor</code></dt> +<dd><p>Same as <code class="code">-m</code>. </p> </dd> -<dt><span><code>noclobber</code></span></dt> -<dd><p>Same as <code>-C</code>. +<dt><code class="code">noclobber</code></dt> +<dd><p>Same as <code class="code">-C</code>. </p> </dd> -<dt><span><code>noexec</code></span></dt> -<dd><p>Same as <code>-n</code>. +<dt><code class="code">noexec</code></dt> +<dd><p>Same as <code class="code">-n</code>. </p> </dd> -<dt><span><code>noglob</code></span></dt> -<dd><p>Same as <code>-f</code>. +<dt><code class="code">noglob</code></dt> +<dd><p>Same as <code class="code">-f</code>. </p> </dd> -<dt><span><code>nolog</code></span></dt> +<dt><code class="code">nolog</code></dt> <dd><p>Currently ignored. </p> </dd> -<dt><span><code>notify</code></span></dt> -<dd><p>Same as <code>-b</code>. +<dt><code class="code">notify</code></dt> +<dd><p>Same as <code class="code">-b</code>. </p> </dd> -<dt><span><code>nounset</code></span></dt> -<dd><p>Same as <code>-u</code>. +<dt><code class="code">nounset</code></dt> +<dd><p>Same as <code class="code">-u</code>. </p> </dd> -<dt><span><code>onecmd</code></span></dt> -<dd><p>Same as <code>-t</code>. +<dt><code class="code">onecmd</code></dt> +<dd><p>Same as <code class="code">-t</code>. </p> </dd> -<dt><span><code>physical</code></span></dt> -<dd><p>Same as <code>-P</code>. +<dt><code class="code">physical</code></dt> +<dd><p>Same as <code class="code">-P</code>. </p> </dd> -<dt><span><code>pipefail</code></span></dt> +<dt><code class="code">pipefail</code></dt> <dd><p>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. </p> </dd> -<dt><span><code>posix</code></span></dt> +<dt><code class="code">posix</code></dt> <dd><p>Change the behavior of Bash where the default operation differs -from the <small>POSIX</small> standard to match the standard -(see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>). +from the <small class="sc">POSIX</small> standard to match the standard +(see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>). This is intended to make Bash behave as a strict superset of that standard. </p> </dd> -<dt><span><code>privileged</code></span></dt> -<dd><p>Same as <code>-p</code>. +<dt><code class="code">privileged</code></dt> +<dd><p>Same as <code class="code">-p</code>. </p> </dd> -<dt><span><code>verbose</code></span></dt> -<dd><p>Same as <code>-v</code>. +<dt><code class="code">verbose</code></dt> +<dd><p>Same as <code class="code">-v</code>. </p> </dd> -<dt><span><code>vi</code></span></dt> -<dd><p>Use a <code>vi</code>-style line editing interface. -This also affects the editing interface used for <code>read -e</code>. +<dt><code class="code">vi</code></dt> +<dd><p>Use a <code class="code">vi</code>-style line editing interface. +This also affects the editing interface used for <code class="code">read -e</code>. </p> </dd> -<dt><span><code>xtrace</code></span></dt> -<dd><p>Same as <code>-x</code>. +<dt><code class="code">xtrace</code></dt> +<dd><p>Same as <code class="code">-x</code>. </p></dd> </dl> </dd> -<dt><span><code>-p</code></span></dt> +<dt><code class="code">-p</code></dt> <dd><p>Turn on privileged mode. -In this mode, the <code>$BASH_ENV</code> and <code>$ENV</code> files are not +In this mode, the <code class="env">$BASH_ENV</code> and <code class="env">$ENV</code> files are not processed, shell functions are not inherited from the environment, -and the <code>SHELLOPTS</code>, <code>BASHOPTS</code>, <code>CDPATH</code> and <code>GLOBIGNORE</code> +and the <code class="env">SHELLOPTS</code>, <code class="env">BASHOPTS</code>, <code class="env">CDPATH</code> and <code class="env">GLOBIGNORE</code> variables, if they appear in the environment, are ignored. If the shell is started with the effective user (group) id not equal to the -real user (group) id, and the <samp>-p</samp> option is not supplied, these actions +real user (group) id, and the <samp class="option">-p</samp> option is not supplied, these actions are taken and the effective user id is set to the real user id. -If the <samp>-p</samp> option is supplied at startup, the effective user id is +If the <samp class="option">-p</samp> 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 ids. </p> </dd> -<dt><span><code>-r</code></span></dt> -<dd><p>Enable restricted shell mode. +<dt><code class="code">-r</code></dt> +<dd><p>Enable restricted shell mode (see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>). This option cannot be unset once it has been set. </p> </dd> -<dt><span><code>-t</code></span></dt> +<dt><code class="code">-t</code></dt> <dd><p>Exit after reading and executing one command. </p> </dd> -<dt><span><code>-u</code></span></dt> +<dt><code class="code">-u</code></dt> <dd><p>Treat unset variables and parameters other than the special parameters -&lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, -or array variables subscripted with &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, +&lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, +or array variables subscripted with &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, as an error when performing parameter expansion. An error message will be written to the standard error, and a non-interactive shell will exit. </p> </dd> -<dt><span><code>-v</code></span></dt> +<dt><code class="code">-v</code></dt> <dd><p>Print shell input lines as they are read. </p> </dd> -<dt><span><code>-x</code></span></dt> -<dd><p>Print a trace of simple commands, <code>for</code> commands, <code>case</code> -commands, <code>select</code> commands, and arithmetic <code>for</code> commands -and their arguments or associated word lists after they are -expanded and before they are executed. The value of the <code>PS4</code> -variable is expanded and the resultant value is printed before +<dt><code class="code">-x</code></dt> +<dd><p>Print a trace of simple commands, <code class="code">for</code> commands, <code class="code">case</code> +commands, <code class="code">select</code> commands, and arithmetic <code class="code">for</code> commands +and their arguments or associated word lists to standard error +after they are expanded and before they are executed. +The shell prints the expanded value of the <code class="env">PS4</code> variable before the command and its expanded arguments. </p> </dd> -<dt><span><code>-B</code></span></dt> -<dd><p>The shell will perform brace expansion (see <a href="#Brace-Expansion">Brace Expansion</a>). +<dt><code class="code">-B</code></dt> +<dd><p>The shell will perform brace expansion (see <a class="pxref" href="#Brace-Expansion">Brace Expansion</a>). This option is on by default. </p> </dd> -<dt><span><code>-C</code></span></dt> -<dd><p>Prevent output redirection using &lsquo;<samp>&gt;</samp>&rsquo;, &lsquo;<samp>&gt;&amp;</samp>&rsquo;, and &lsquo;<samp>&lt;&gt;</samp>&rsquo; +<dt><code class="code">-C</code></dt> +<dd><p>Prevent output redirection using &lsquo;<samp class="samp">&gt;</samp>&rsquo;, &lsquo;<samp class="samp">&gt;&amp;</samp>&rsquo;, and &lsquo;<samp class="samp">&lt;&gt;</samp>&rsquo; from overwriting existing files. </p> </dd> -<dt><span><code>-E</code></span></dt> -<dd><p>If set, any trap on <code>ERR</code> is inherited by shell functions, command +<dt><code class="code">-E</code></dt> +<dd><p>If set, any trap on <code class="code">ERR</code> is inherited by shell functions, command substitutions, and commands executed in a subshell environment. -The <code>ERR</code> trap is normally not inherited in such cases. +The <code class="code">ERR</code> trap is normally not inherited in such cases. </p> </dd> -<dt><span><code>-H</code></span></dt> -<dd><p>Enable &lsquo;<samp>!</samp>&rsquo; style history substitution (see <a href="#History-Interaction">History Expansion</a>). +<dt><code class="code">-H</code></dt> +<dd><p>Enable &lsquo;<samp class="samp">!</samp>&rsquo; style history substitution (see <a class="pxref" href="#History-Interaction">History Expansion</a>). This option is on by default for interactive shells. </p> </dd> -<dt><span><code>-P</code></span></dt> +<dt><code class="code">-P</code></dt> <dd><p>If set, do not resolve symbolic links when performing commands such as -<code>cd</code> which change the current directory. The physical directory +<code class="code">cd</code> which change the current directory. The physical directory is used instead. By default, Bash follows the logical chain of directories when performing commands which change the current directory. </p> -<p>For example, if <samp>/usr/sys</samp> is a symbolic link to <samp>/usr/local/sys</samp> +<p>For example, if <samp class="file">/usr/sys</samp> is a symbolic link to <samp class="file">/usr/local/sys</samp> then: </p><div class="example"> -<pre class="example">$ cd /usr/sys; echo $PWD +<pre class="example-preformatted">$ cd /usr/sys; echo $PWD /usr/sys $ cd ..; pwd /usr </pre></div> -<p>If <code>set -P</code> is on, then: +<p>If <code class="code">set -P</code> is on, then: </p><div class="example"> -<pre class="example">$ cd /usr/sys; echo $PWD +<pre class="example-preformatted">$ cd /usr/sys; echo $PWD /usr/local/sys $ cd ..; pwd /usr/local </pre></div> </dd> -<dt><span><code>-T</code></span></dt> -<dd><p>If set, any trap on <code>DEBUG</code> and <code>RETURN</code> are inherited by +<dt><code class="code">-T</code></dt> +<dd><p>If set, any trap on <code class="code">DEBUG</code> and <code class="code">RETURN</code> are inherited by shell functions, command substitutions, and commands executed in a subshell environment. -The <code>DEBUG</code> and <code>RETURN</code> traps are normally not inherited +The <code class="code">DEBUG</code> and <code class="code">RETURN</code> traps are normally not inherited in such cases. </p> </dd> -<dt><span><code>--</code></span></dt> +<dt><code class="code">--</code></dt> <dd><p>If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters are set to the -<var>arguments</var>, even if some of them begin with a &lsquo;<samp>-</samp>&rsquo;. +<var class="var">arguments</var>, even if some of them begin with a &lsquo;<samp class="samp">-</samp>&rsquo;. </p> </dd> -<dt><span><code>-</code></span></dt> -<dd><p>Signal the end of options, cause all remaining <var>arguments</var> -to be assigned to the positional parameters. The <samp>-x</samp> -and <samp>-v</samp> options are turned off. +<dt><code class="code">-</code></dt> +<dd><p>Signal the end of options, cause all remaining <var class="var">arguments</var> +to be assigned to the positional parameters. The <samp class="option">-x</samp> +and <samp class="option">-v</samp> options are turned off. If there are no arguments, the positional parameters remain unchanged. </p></dd> </dl> -<p>Using &lsquo;<samp>+</samp>&rsquo; rather than &lsquo;<samp>-</samp>&rsquo; causes these options to be +<p>Using &lsquo;<samp class="samp">+</samp>&rsquo; rather than &lsquo;<samp class="samp">-</samp>&rsquo; causes these options to be turned off. The options can also be used upon invocation of the -shell. The current set of options may be found in <code>$-</code>. +shell. The current set of options may be found in <code class="code">$-</code>. </p> -<p>The remaining N <var>arguments</var> are positional parameters and are -assigned, in order, to <code>$1</code>, <code>$2</code>, &hellip; <code>$N</code>. -The special parameter <code>#</code> is set to N. +<p>The remaining N <var class="var">arguments</var> are positional parameters and are +assigned, in order, to <code class="code">$1</code>, <code class="code">$2</code>, &hellip; <code class="code">$N</code>. +The special parameter <code class="code">#</code> is set to N. </p> <p>The return status is always zero unless an invalid option is supplied. </p></dd> @@ -6180,92 +6395,97 @@ The special parameter <code>#</code> is set to N. <hr> </div> -<div class="subsection" id="The-Shopt-Builtin"> -<div class="header"> +<div class="subsection-level-extent" id="The-Shopt-Builtin"> +<div class="nav-panel"> <p> Previous: <a href="#The-Set-Builtin" accesskey="p" rel="prev">The Set Builtin</a>, Up: <a href="#Modifying-Shell-Behavior" accesskey="u" rel="up">Modifying Shell Behavior</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="The-Shopt-Builtin-1"></span><h4 class="subsection">4.3.2 The Shopt Builtin</h4> +<h4 class="subsection" id="The-Shopt-Builtin-1"><span>4.3.2 The Shopt Builtin<a class="copiable-link" href="#The-Shopt-Builtin-1"> &para;</a></span></h4> <p>This builtin allows you to change additional shell optional behavior. </p> -<dl compact="compact"> -<dt id='index-shopt'><span><code>shopt</code><a href='#index-shopt' class='copiable-anchor'> &para;</a></span></dt> +<dl class="table"> +<dt><a id="index-shopt"></a><span><code class="code">shopt</code><a class="copiable-link" href="#index-shopt"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">shopt [-pqsu] [-o] [<var>optname</var> &hellip;] +<pre class="example-preformatted">shopt [-pqsu] [-o] [<var class="var">optname</var> ...] </pre></div> <p>Toggle the values of settings controlling optional shell behavior. The settings can be either those listed below, or, if the -<samp>-o</samp> option is used, those available with the <samp>-o</samp> -option to the <code>set</code> builtin command (see <a href="#The-Set-Builtin">The Set Builtin</a>). -With no options, or with the <samp>-p</samp> option, a list of all settable +<samp class="option">-o</samp> option is used, those available with the <samp class="option">-o</samp> +option to the <code class="code">set</code> builtin command (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). +With no options, or with the <samp class="option">-p</samp> option, a list of all settable options is displayed, with an indication of whether or not each is set; -if <var>optname</var>s are supplied, the output is restricted to those options. -The <samp>-p</samp> option causes output to be displayed in a form that +if <var class="var">optname</var>s are supplied, the output is restricted to those options. +The <samp class="option">-p</samp> option causes output to be displayed in a form that may be reused as input. Other options have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-s</code></span></dt> -<dd><p>Enable (set) each <var>optname</var>. +<dl class="table"> +<dt><code class="code">-s</code></dt> +<dd><p>Enable (set) each <var class="var">optname</var>. </p> </dd> -<dt><span><code>-u</code></span></dt> -<dd><p>Disable (unset) each <var>optname</var>. +<dt><code class="code">-u</code></dt> +<dd><p>Disable (unset) each <var class="var">optname</var>. </p> </dd> -<dt><span><code>-q</code></span></dt> +<dt><code class="code">-q</code></dt> <dd><p>Suppresses normal output; the return status -indicates whether the <var>optname</var> is set or unset. -If multiple <var>optname</var> arguments are given with <samp>-q</samp>, -the return status is zero if all <var>optname</var>s are enabled; +indicates whether the <var class="var">optname</var> is set or unset. +If multiple <var class="var">optname</var> arguments are given with <samp class="option">-q</samp>, +the return status is zero if all <var class="var">optname</var>s are enabled; non-zero otherwise. </p> </dd> -<dt><span><code>-o</code></span></dt> +<dt><code class="code">-o</code></dt> <dd><p>Restricts the values of -<var>optname</var> to be those defined for the <samp>-o</samp> option to the -<code>set</code> builtin (see <a href="#The-Set-Builtin">The Set Builtin</a>). +<var class="var">optname</var> to be those defined for the <samp class="option">-o</samp> option to the +<code class="code">set</code> builtin (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). </p></dd> </dl> -<p>If either <samp>-s</samp> or <samp>-u</samp> -is used with no <var>optname</var> arguments, <code>shopt</code> shows only +<p>If either <samp class="option">-s</samp> or <samp class="option">-u</samp> +is used with no <var class="var">optname</var> arguments, <code class="code">shopt</code> shows only those options which are set or unset, respectively. </p> -<p>Unless otherwise noted, the <code>shopt</code> options are disabled (off) +<p>Unless otherwise noted, the <code class="code">shopt</code> options are disabled (off) by default. </p> -<p>The return status when listing options is zero if all <var>optname</var>s +<p>The return status when listing options is zero if all <var class="var">optname</var>s are enabled, non-zero otherwise. When setting or unsetting options, -the return status is zero unless an <var>optname</var> is not a valid shell +the return status is zero unless an <var class="var">optname</var> is not a valid shell option. </p> -<p>The list of <code>shopt</code> options is: -</p><dl compact="compact"> -<dt><span><code>assoc_expand_once</code></span></dt> -<dd><p>If set, the shell suppresses multiple evaluation of associative array -subscripts during arithmetic expression evaluation, while executing +<p>The list of <code class="code">shopt</code> options is: +</p><dl class="table"> +<dt><code class="code">array_expand_once</code></dt> +<dd><p>If set, the shell suppresses multiple evaluation of +associative and indexed array subscripts +during arithmetic expression evaluation, while executing builtins that can perform variable assignments, and while executing builtins that perform array dereferencing. </p> </dd> -<dt><span><code>autocd</code></span></dt> +<dt><code class="code">assoc_expand_once</code></dt> +<dd><p>Deprecated; a synonym for <code class="code">array_expand_once</code>. +</p> +</dd> +<dt><code class="code">autocd</code></dt> <dd><p>If set, a command name that is the name of a directory is executed as if -it were the argument to the <code>cd</code> command. +it were the argument to the <code class="code">cd</code> command. This option is only used by interactive shells. </p> </dd> -<dt><span><code>cdable_vars</code></span></dt> -<dd><p>If this is set, an argument to the <code>cd</code> builtin command that +<dt><code class="code">cdable_vars</code></dt> +<dd><p>If this is set, an argument to the <code class="code">cd</code> builtin command that is not a directory is assumed to be the name of a variable whose value is the directory to change to. </p> </dd> -<dt><span><code>cdspell</code></span></dt> +<dt><code class="code">cdspell</code></dt> <dd><p>If set, minor errors in the spelling of a directory component in a -<code>cd</code> command will be corrected. +<code class="code">cd</code> command will be corrected. The errors checked for are transposed characters, a missing character, and a character too many. If a correction is found, the corrected path is printed, @@ -6273,48 +6493,48 @@ and the command proceeds. This option is only used by interactive shells. </p> </dd> -<dt><span><code>checkhash</code></span></dt> +<dt><code class="code">checkhash</code></dt> <dd><p>If this is set, Bash checks that a command found in the hash table exists before trying to execute it. If a hashed command no longer exists, a normal path search is performed. </p> </dd> -<dt><span><code>checkjobs</code></span></dt> +<dt><code class="code">checkjobs</code></dt> <dd><p>If set, Bash lists the status of any stopped and running jobs before exiting an interactive shell. If any jobs are running, this causes the exit to be deferred until a second exit is attempted without an -intervening command (see <a href="#Job-Control">Job Control</a>). +intervening command (see <a class="pxref" href="#Job-Control">Job Control</a>). The shell always postpones exiting if any jobs are stopped. </p> </dd> -<dt><span><code>checkwinsize</code></span></dt> +<dt><code class="code">checkwinsize</code></dt> <dd><p>If set, Bash checks the window size after each external (non-builtin) command and, if necessary, updates the values of -<code>LINES</code> and <code>COLUMNS</code>. +<code class="env">LINES</code> and <code class="env">COLUMNS</code>. This option is enabled by default. </p> </dd> -<dt><span><code>cmdhist</code></span></dt> +<dt><code class="code">cmdhist</code></dt> <dd><p>If set, Bash attempts to save all lines of a multiple-line command in the same history entry. This allows easy re-editing of multi-line commands. This option is enabled by default, but only has an effect if command -history is enabled (see <a href="#Bash-History-Facilities">Bash History Facilities</a>). +history is enabled (see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>). </p> </dd> -<dt><span><code>compat31</code></span></dt> -<dt><span><code>compat32</code></span></dt> -<dt><span><code>compat40</code></span></dt> -<dt><span><code>compat41</code></span></dt> -<dt><span><code>compat42</code></span></dt> -<dt><span><code>compat43</code></span></dt> -<dt><span><code>compat44</code></span></dt> +<dt><code class="code">compat31</code></dt> +<dt><code class="code">compat32</code></dt> +<dt><code class="code">compat40</code></dt> +<dt><code class="code">compat41</code></dt> +<dt><code class="code">compat42</code></dt> +<dt><code class="code">compat43</code></dt> +<dt><code class="code">compat44</code></dt> <dd><p>These control aspects of the shell&rsquo;s compatibility mode -(see <a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>). +(see <a class="pxref" href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>). </p> </dd> -<dt><span><code>complete_fullquote</code></span></dt> +<dt><code class="code">complete_fullquote</code></dt> <dd><p>If set, Bash quotes all shell metacharacters in filenames and directory names when performing completion. @@ -6326,13 +6546,13 @@ 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 +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. </p> </dd> -<dt><span><code>direxpand</code></span></dt> +<dt><code class="code">direxpand</code></dt> <dd><p>If set, Bash replaces directory names with the results of word expansion when performing filename completion. This changes the contents of the Readline editing @@ -6340,287 +6560,292 @@ buffer. If not set, Bash attempts to preserve what the user typed. </p> </dd> -<dt><span><code>dirspell</code></span></dt> +<dt><code class="code">dirspell</code></dt> <dd><p>If set, Bash attempts spelling correction on directory names during word completion if the directory name initially supplied does not exist. </p> </dd> -<dt><span><code>dotglob</code></span></dt> +<dt><code class="code">dotglob</code></dt> <dd><p>If set, Bash includes filenames beginning with a &lsquo;.&rsquo; in the results of filename expansion. -The filenames &lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo; must always be matched explicitly, -even if <code>dotglob</code> is set. +The filenames &lsquo;<samp class="samp">.</samp>&rsquo; and &lsquo;<samp class="samp">..</samp>&rsquo; must always be matched explicitly, +even if <code class="code">dotglob</code> is set. </p> </dd> -<dt><span><code>execfail</code></span></dt> +<dt><code class="code">execfail</code></dt> <dd><p>If this is set, a non-interactive shell will not exit if -it cannot execute the file specified as an argument to the <code>exec</code> -builtin command. An interactive shell does not exit if <code>exec</code> +it cannot execute the file specified as an argument to the <code class="code">exec</code> +builtin command. An interactive shell does not exit if <code class="code">exec</code> fails. </p> </dd> -<dt><span><code>expand_aliases</code></span></dt> +<dt><code class="code">expand_aliases</code></dt> <dd><p>If set, aliases are expanded as described below under Aliases, -<a href="#Aliases">Aliases</a>. +<a class="ref" href="#Aliases">Aliases</a>. This option is enabled by default for interactive shells. </p> </dd> -<dt><span><code>extdebug</code></span></dt> +<dt><code class="code">extdebug</code></dt> <dd><p>If set at shell invocation, or in a shell startup file, arrange to execute the debugger profile -before the shell starts, identical to the <samp>--debugger</samp> option. +before the shell starts, identical to the <samp class="option">--debugger</samp> option. If set after invocation, behavior intended for use by debuggers is enabled: </p> -<ol> -<li> The <samp>-F</samp> option to the <code>declare</code> builtin (see <a href="#Bash-Builtins">Bash Builtin Commands</a>) +<ol class="enumerate"> +<li> The <samp class="option">-F</samp> option to the <code class="code">declare</code> builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>) displays the source file name and line number corresponding to each function name supplied as an argument. -</li><li> If the command run by the <code>DEBUG</code> trap returns a non-zero value, the +</li><li> If the command run by the <code class="code">DEBUG</code> trap returns a non-zero value, the next command is skipped and not executed. -</li><li> If the command run by the <code>DEBUG</code> trap returns a value of 2, and the +</li><li> If the command run by the <code class="code">DEBUG</code> trap returns a value of 2, and the shell is executing in a subroutine (a shell function or a shell script -executed by the <code>.</code> or <code>source</code> builtins), the shell simulates -a call to <code>return</code>. +executed by the <code class="code">.</code> or <code class="code">source</code> builtins), the shell simulates +a call to <code class="code">return</code>. -</li><li> <code>BASH_ARGC</code> and <code>BASH_ARGV</code> are updated as described in their -descriptions (see <a href="#Bash-Variables">Bash Variables</a>). +</li><li> <code class="code">BASH_ARGC</code> and <code class="code">BASH_ARGV</code> are updated as described in their +descriptions (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>). </li><li> Function tracing is enabled: command substitution, shell functions, and -subshells invoked with <code>( <var>command</var> )</code> inherit the -<code>DEBUG</code> and <code>RETURN</code> traps. +subshells invoked with <code class="code">( <var class="var">command</var> )</code> inherit the +<code class="code">DEBUG</code> and <code class="code">RETURN</code> traps. </li><li> Error tracing is enabled: command substitution, shell functions, and -subshells invoked with <code>( <var>command</var> )</code> inherit the -<code>ERR</code> trap. +subshells invoked with <code class="code">( <var class="var">command</var> )</code> inherit the +<code class="code">ERR</code> trap. </li></ol> </dd> -<dt><span><code>extglob</code></span></dt> +<dt><code class="code">extglob</code></dt> <dd><p>If set, the extended pattern matching features described above -(see <a href="#Pattern-Matching">Pattern Matching</a>) are enabled. +(see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>) are enabled. </p> </dd> -<dt><span><code>extquote</code></span></dt> -<dd><p>If set, <code>$'<var>string</var>'</code> and <code>$&quot;<var>string</var>&quot;</code> quoting is -performed within <code>${<var>parameter</var>}</code> expansions +<dt><code class="code">extquote</code></dt> +<dd><p>If set, <code class="code">$'<var class="var">string</var>'</code> and <code class="code">$&quot;<var class="var">string</var>&quot;</code> quoting is +performed within <code class="code">${<var class="var">parameter</var>}</code> expansions enclosed in double quotes. This option is enabled by default. </p> </dd> -<dt><span><code>failglob</code></span></dt> +<dt><code class="code">failglob</code></dt> <dd><p>If set, patterns which fail to match filenames during filename expansion result in an expansion error. </p> </dd> -<dt><span><code>force_fignore</code></span></dt> -<dd><p>If set, the suffixes specified by the <code>FIGNORE</code> shell variable +<dt><code class="code">force_fignore</code></dt> +<dd><p>If set, the suffixes specified by the <code class="env">FIGNORE</code> shell variable cause words to be ignored when performing word completion even if the ignored words are the only possible completions. -See <a href="#Bash-Variables">Bash Variables</a>, for a description of <code>FIGNORE</code>. +See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for a description of <code class="env">FIGNORE</code>. This option is enabled by default. </p> </dd> -<dt><span><code>globasciiranges</code></span></dt> +<dt><code class="code">globasciiranges</code></dt> <dd><p>If set, range expressions used in pattern matching bracket expressions -(see <a href="#Pattern-Matching">Pattern Matching</a>) +(see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>) behave as if in the traditional C locale when performing comparisons. That is, the current locale&rsquo;s collating sequence is not taken into account, so -&lsquo;<samp>b</samp>&rsquo; will not collate between &lsquo;<samp>A</samp>&rsquo; and &lsquo;<samp>B</samp>&rsquo;, +&lsquo;<samp class="samp">b</samp>&rsquo; will not collate between &lsquo;<samp class="samp">A</samp>&rsquo; and &lsquo;<samp class="samp">B</samp>&rsquo;, and upper-case and lower-case ASCII characters will collate together. </p> </dd> -<dt><span><code>globskipdots</code></span></dt> +<dt><code class="code">globskipdots</code></dt> <dd><p>If set, filename expansion will never match the filenames -&lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo;, -even if the pattern begins with a &lsquo;<samp>.</samp>&rsquo;. +&lsquo;<samp class="samp">.</samp>&rsquo; and &lsquo;<samp class="samp">..</samp>&rsquo;, +even if the pattern begins with a &lsquo;<samp class="samp">.</samp>&rsquo;. This option is enabled by default. </p> </dd> -<dt><span><code>globstar</code></span></dt> -<dd><p>If set, the pattern &lsquo;<samp>**</samp>&rsquo; used in a filename expansion context will +<dt><code class="code">globstar</code></dt> +<dd><p>If set, the pattern &lsquo;<samp class="samp">**</samp>&rsquo; used in a filename expansion context will match all files and zero or more directories and subdirectories. -If the pattern is followed by a &lsquo;<samp>/</samp>&rsquo;, only directories and +If the pattern is followed by a &lsquo;<samp class="samp">/</samp>&rsquo;, only directories and subdirectories match. </p> </dd> -<dt><span><code>gnu_errfmt</code></span></dt> -<dd><p>If set, shell error messages are written in the standard <small>GNU</small> error +<dt><code class="code">gnu_errfmt</code></dt> +<dd><p>If set, shell error messages are written in the standard <small class="sc">GNU</small> error message format. </p> </dd> -<dt><span><code>histappend</code></span></dt> +<dt><code class="code">histappend</code></dt> <dd><p>If set, the history list is appended to the file named by the value -of the <code>HISTFILE</code> +of the <code class="env">HISTFILE</code> variable when the shell exits, rather than overwriting the file. </p> </dd> -<dt><span><code>histreedit</code></span></dt> +<dt><code class="code">histreedit</code></dt> <dd><p>If set, and Readline is being used, a user is given the opportunity to re-edit a failed history substitution. </p> </dd> -<dt><span><code>histverify</code></span></dt> +<dt><code class="code">histverify</code></dt> <dd><p>If set, and Readline is being used, the results of history substitution are not immediately passed to the shell parser. Instead, the resulting line is loaded into the Readline editing buffer, allowing further modification. </p> </dd> -<dt><span><code>hostcomplete</code></span></dt> +<dt><code class="code">hostcomplete</code></dt> <dd><p>If set, and Readline is being used, Bash will attempt to perform -hostname completion when a word containing a &lsquo;<samp>@</samp>&rsquo; is being -completed (see <a href="#Commands-For-Completion">Letting Readline Type For You</a>). This option is enabled +hostname completion when a word containing a &lsquo;<samp class="samp">@</samp>&rsquo; is being +completed (see <a class="pxref" href="#Commands-For-Completion">Letting Readline Type For You</a>). This option is enabled by default. </p> </dd> -<dt><span><code>huponexit</code></span></dt> -<dd><p>If set, Bash will send <code>SIGHUP</code> to all jobs when an interactive -login shell exits (see <a href="#Signals">Signals</a>). +<dt><code class="code">huponexit</code></dt> +<dd><p>If set, Bash will send <code class="code">SIGHUP</code> to all jobs when an interactive +login shell exits (see <a class="pxref" href="#Signals">Signals</a>). </p> </dd> -<dt><span><code>inherit_errexit</code></span></dt> -<dd><p>If set, command substitution inherits the value of the <code>errexit</code> option, +<dt><code class="code">inherit_errexit</code></dt> +<dd><p>If set, command substitution inherits the value of the <code class="code">errexit</code> option, instead of unsetting it in the subshell environment. -This option is enabled when <small>POSIX</small> mode is enabled. +This option is enabled when <small class="sc">POSIX</small> mode is enabled. </p> </dd> -<dt><span><code>interactive_comments</code></span></dt> -<dd><p>Allow a word beginning with &lsquo;<samp>#</samp>&rsquo; +<dt><code class="code">interactive_comments</code></dt> +<dd><p>Allow a word beginning with &lsquo;<samp class="samp">#</samp>&rsquo; to cause that word and all remaining characters on that line to be ignored in an interactive shell. This option is enabled by default. </p> </dd> -<dt><span><code>lastpipe</code></span></dt> +<dt><code class="code">lastpipe</code></dt> <dd><p>If set, and job control is not active, the shell runs the last command of a pipeline not executed in the background in the current shell environment. </p> </dd> -<dt><span><code>lithist</code></span></dt> -<dd><p>If enabled, and the <code>cmdhist</code> +<dt><code class="code">lithist</code></dt> +<dd><p>If enabled, and the <code class="code">cmdhist</code> option is enabled, multi-line commands are saved to the history with embedded newlines rather than using semicolon separators where possible. </p> </dd> -<dt><span><code>localvar_inherit</code></span></dt> +<dt><code class="code">localvar_inherit</code></dt> <dd><p>If set, local variables inherit the value and attributes of a variable of the same name that exists at a previous scope before any new value is -assigned. The <code>nameref</code> attribute is not inherited. +assigned. The <code class="code">nameref</code> attribute is not inherited. </p> </dd> -<dt><span><code>localvar_unset</code></span></dt> -<dd><p>If set, calling <code>unset</code> on local variables in previous function scopes +<dt><code class="code">localvar_unset</code></dt> +<dd><p>If set, calling <code class="code">unset</code> on local variables in previous function scopes marks them so subsequent lookups find them unset until that function returns. This is identical to the behavior of unsetting local variables at the current function scope. </p> </dd> -<dt><span><code>login_shell</code></span></dt> +<dt><code class="code">login_shell</code></dt> <dd><p>The shell sets this option if it is started as a login shell -(see <a href="#Invoking-Bash">Invoking Bash</a>). +(see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>). The value may not be changed. </p> </dd> -<dt><span><code>mailwarn</code></span></dt> +<dt><code class="code">mailwarn</code></dt> <dd><p>If set, and a file that Bash is checking for mail has been accessed since the last time it was checked, the message -<code>&quot;The mail in <var>mailfile</var> has been read&quot;</code> is displayed. +<code class="code">&quot;The mail in <var class="var">mailfile</var> has been read&quot;</code> is displayed. </p> </dd> -<dt><span><code>no_empty_cmd_completion</code></span></dt> +<dt><code class="code">no_empty_cmd_completion</code></dt> <dd><p>If set, and Readline is being used, Bash will not attempt to search -the <code>PATH</code> for possible completions when completion is attempted +the <code class="env">PATH</code> for possible completions when completion is attempted on an empty line. </p> </dd> -<dt><span><code>nocaseglob</code></span></dt> +<dt><code class="code">nocaseglob</code></dt> <dd><p>If set, Bash matches filenames in a case-insensitive fashion when performing filename expansion. </p> </dd> -<dt><span><code>nocasematch</code></span></dt> +<dt><code class="code">nocasematch</code></dt> <dd><p>If set, Bash matches patterns in a case-insensitive fashion when -performing matching while executing <code>case</code> or <code>[[</code> -conditional commands (see <a href="#Conditional-Constructs">Conditional Constructs</a>, +performing matching while executing <code class="code">case</code> or <code class="code">[[</code> +conditional commands (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>, when performing pattern substitution word expansions, or when filtering possible completions as part of programmable completion. </p> </dd> -<dt><span><code>noexpand_translation</code></span></dt> +<dt><code class="code">noexpand_translation</code></dt> <dd><p>If set, Bash encloses the translated results of $&quot;...&quot; quoting in single quotes instead of double quotes. If the string is not translated, this has no effect. </p> </dd> -<dt><span><code>nullglob</code></span></dt> -<dd><p>If set, Bash allows filename patterns which match no -files to expand to a null string, rather than themselves. +<dt><code class="code">nullglob</code></dt> +<dd><p>If set, filename expansion patterns which match no files +(see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>) +expand to nothing and are removed, +rather than expanding to themselves. </p> </dd> -<dt><span><code>patsub_replacement</code></span></dt> +<dt><code class="code">patsub_replacement</code></dt> <dd><p>If set, Bash -expands occurrences of &lsquo;<samp>&amp;</samp>&rsquo; in the replacement string of pattern +expands occurrences of &lsquo;<samp class="samp">&amp;</samp>&rsquo; in the replacement string of pattern substitution to the text matched by the pattern, as described -above (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +above (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). This option is enabled by default. </p> </dd> -<dt><span><code>progcomp</code></span></dt> +<dt><code class="code">progcomp</code></dt> <dd><p>If set, the programmable completion facilities -(see <a href="#Programmable-Completion">Programmable Completion</a>) are enabled. +(see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>) are enabled. This option is enabled by default. </p> </dd> -<dt><span><code>progcomp_alias</code></span></dt> +<dt><code class="code">progcomp_alias</code></dt> <dd><p>If set, and programmable completion is enabled, Bash treats a command name that doesn&rsquo;t have any completions as a possible alias and attempts alias expansion. If it has an alias, Bash attempts programmable completion using the command word resulting from the expanded alias. </p> </dd> -<dt><span><code>promptvars</code></span></dt> +<dt><code class="code">promptvars</code></dt> <dd><p>If set, prompt strings undergo parameter expansion, command substitution, arithmetic expansion, and quote removal after being expanded -as described below (see <a href="#Controlling-the-Prompt">Controlling the Prompt</a>). +as described below (see <a class="pxref" href="#Controlling-the-Prompt">Controlling the Prompt</a>). This option is enabled by default. </p> </dd> -<dt><span><code>restricted_shell</code></span></dt> +<dt><code class="code">restricted_shell</code></dt> <dd><p>The shell sets this option if it is started in restricted mode -(see <a href="#The-Restricted-Shell">The Restricted Shell</a>). +(see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>). The value may not be changed. This is not reset when the startup files are executed, allowing the startup files to discover whether or not a shell is restricted. </p> </dd> -<dt><span><code>shift_verbose</code></span></dt> -<dd><p>If this is set, the <code>shift</code> +<dt><code class="code">shift_verbose</code></dt> +<dd><p>If this is set, the <code class="code">shift</code> builtin prints an error message when the shift count exceeds the number of positional parameters. </p> </dd> -<dt><span><code>sourcepath</code></span></dt> -<dd><p>If set, the <code>.</code> (<code>source</code>) builtin uses the value of <code>PATH</code> +<dt><code class="code">sourcepath</code></dt> +<dd><p>If set, the <code class="code">.</code> (<code class="code">source</code>) builtin uses the value of <code class="env">PATH</code> to find the directory containing the file supplied as an argument. This option is enabled by default. </p> </dd> -<dt><span><code>varredir_close</code></span></dt> +<dt><code class="code">varredir_close</code></dt> <dd><p>If set, the shell automatically closes file descriptors assigned using the -<code>{varname}</code> redirection syntax (see <a href="#Redirections">Redirections</a>) instead of +<code class="code">{varname}</code> redirection syntax (see <a class="pxref" href="#Redirections">Redirections</a>) instead of leaving them open when the command completes. </p> </dd> -<dt><span><code>xpg_echo</code></span></dt> -<dd><p>If set, the <code>echo</code> builtin expands backslash-escape sequences +<dt><code class="code">xpg_echo</code></dt> +<dd><p>If set, the <code class="code">echo</code> builtin expands backslash-escape sequences by default. +If the <code class="code">posix</code> shell option (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>) is also enabled, +<code class="code">echo</code> does not +interpret any options. </p> </dd> </dl> @@ -6630,20 +6855,20 @@ by default. <hr> </div> </div> -<div class="section" id="Special-Builtins"> -<div class="header"> +<div class="section-level-extent" id="Special-Builtins"> +<div class="nav-panel"> <p> Previous: <a href="#Modifying-Shell-Behavior" accesskey="p" rel="prev">Modifying Shell Behavior</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Special-Builtins-1"></span><h3 class="section">4.4 Special Builtins</h3> -<span id="index-special-builtin-1"></span> +<h3 class="section" id="Special-Builtins-1"><span>4.4 Special Builtins<a class="copiable-link" href="#Special-Builtins-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-special-builtin-1"></a> -<p>For historical reasons, the <small>POSIX</small> standard has classified -several builtin commands as <em>special</em>. -When Bash is executing in <small>POSIX</small> mode, the special builtins +<p>For historical reasons, the <small class="sc">POSIX</small> standard has classified +several builtin commands as <em class="emph">special</em>. +When Bash is executing in <small class="sc">POSIX</small> mode, the special builtins differ from other builtin commands in three respects: </p> -<ol> +<ol class="enumerate"> <li> Special builtins are found before shell functions during command lookup. </li><li> If a special builtin returns an error status, a non-interactive shell exits. @@ -6652,106 +6877,106 @@ differ from other builtin commands in three respects: environment after the command completes. </li></ol> -<p>When Bash is not executing in <small>POSIX</small> mode, these builtins behave no +<p>When Bash is not executing in <small class="sc">POSIX</small> mode, these builtins behave no differently than the rest of the Bash builtin commands. -The Bash <small>POSIX</small> mode is described in <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>. +The Bash <small class="sc">POSIX</small> mode is described in <a class="ref" href="#Bash-POSIX-Mode">Bash and POSIX</a>. </p> -<p>These are the <small>POSIX</small> special builtins: +<p>These are the <small class="sc">POSIX</small> special builtins: </p><div class="example"> -<pre class="example">break : . continue eval exec exit export readonly return set<!-- /@w --> -shift trap unset<!-- /@w --> +<pre class="example-preformatted">break : . source continue eval exec exit export readonly return set<!-- /@w --> +shift times trap unset<!-- /@w --> </pre></div> <hr> </div> </div> -<div class="chapter" id="Shell-Variables"> -<div class="header"> +<div class="chapter-level-extent" id="Shell-Variables"> +<div class="nav-panel"> <p> Next: <a href="#Bash-Features" accesskey="n" rel="next">Bash Features</a>, Previous: <a href="#Shell-Builtin-Commands" accesskey="p" rel="prev">Shell Builtin Commands</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Variables-1"></span><h2 class="chapter">5 Shell Variables</h2> +<h2 class="chapter" id="Shell-Variables-1"><span>5 Shell Variables<a class="copiable-link" href="#Shell-Variables-1"> &para;</a></span></h2> <p>This chapter describes the shell variables that Bash uses. Bash automatically assigns default values to a number of variables. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Bourne-Shell-Variables" accesskey="1">Bourne Shell Variables</a></li> <li><a href="#Bash-Variables" accesskey="2">Bash Variables</a></li> </ul> <hr> -<div class="section" id="Bourne-Shell-Variables"> -<div class="header"> +<div class="section-level-extent" id="Bourne-Shell-Variables"> +<div class="nav-panel"> <p> Next: <a href="#Bash-Variables" accesskey="n" rel="next">Bash Variables</a>, Up: <a href="#Shell-Variables" accesskey="u" rel="up">Shell Variables</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bourne-Shell-Variables-1"></span><h3 class="section">5.1 Bourne Shell Variables</h3> +<h3 class="section" id="Bourne-Shell-Variables-1"><span>5.1 Bourne Shell Variables<a class="copiable-link" href="#Bourne-Shell-Variables-1"> &para;</a></span></h3> <p>Bash uses certain shell variables in the same way as the Bourne shell. In some cases, Bash assigns a default value to the variable. </p> -<dl compact="compact"> -<dt id='index-CDPATH'><span><code>CDPATH</code><a href='#index-CDPATH' class='copiable-anchor'> &para;</a></span></dt> +<dl class="vtable"> +<dt><a id="index-CDPATH"></a><span><code class="code">CDPATH</code><a class="copiable-link" href="#index-CDPATH"> &para;</a></span></dt> <dd><p>A colon-separated list of directories used as a search path for -the <code>cd</code> builtin command. +the <code class="code">cd</code> builtin command. </p> </dd> -<dt id='index-HOME'><span><code>HOME</code><a href='#index-HOME' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The current user&rsquo;s home directory; the default for the <code>cd</code> builtin +<dt><a id="index-HOME"></a><span><code class="code">HOME</code><a class="copiable-link" href="#index-HOME"> &para;</a></span></dt> +<dd><p>The current user&rsquo;s home directory; the default for the <code class="code">cd</code> builtin command. The value of this variable is also used by tilde expansion -(see <a href="#Tilde-Expansion">Tilde Expansion</a>). +(see <a class="pxref" href="#Tilde-Expansion">Tilde Expansion</a>). </p> </dd> -<dt id='index-IFS'><span><code>IFS</code><a href='#index-IFS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-IFS"></a><span><code class="code">IFS</code><a class="copiable-link" href="#index-IFS"> &para;</a></span></dt> <dd><p>A list of characters that separate fields; used when the shell splits words as part of expansion. </p> </dd> -<dt id='index-MAIL'><span><code>MAIL</code><a href='#index-MAIL' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-MAIL"></a><span><code class="code">MAIL</code><a class="copiable-link" href="#index-MAIL"> &para;</a></span></dt> <dd><p>If this parameter is set to a filename or directory name -and the <code>MAILPATH</code> variable +and the <code class="env">MAILPATH</code> variable is not set, Bash informs the user of the arrival of mail in the specified file or Maildir-format directory. </p> </dd> -<dt id='index-MAILPATH'><span><code>MAILPATH</code><a href='#index-MAILPATH' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-MAILPATH"></a><span><code class="code">MAILPATH</code><a class="copiable-link" href="#index-MAILPATH"> &para;</a></span></dt> <dd><p>A colon-separated list of filenames which the shell periodically checks for new mail. Each list entry can specify the message that is printed when new mail arrives in the mail file by separating the filename from the message with -a &lsquo;<samp>?</samp>&rsquo;. -When used in the text of the message, <code>$_</code> expands to the name of +a &lsquo;<samp class="samp">?</samp>&rsquo;. +When used in the text of the message, <code class="code">$_</code> expands to the name of the current mail file. </p> </dd> -<dt id='index-OPTARG'><span><code>OPTARG</code><a href='#index-OPTARG' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The value of the last option argument processed by the <code>getopts</code> builtin. +<dt><a id="index-OPTARG"></a><span><code class="code">OPTARG</code><a class="copiable-link" href="#index-OPTARG"> &para;</a></span></dt> +<dd><p>The value of the last option argument processed by the <code class="code">getopts</code> builtin. </p> </dd> -<dt id='index-OPTIND'><span><code>OPTIND</code><a href='#index-OPTIND' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The index of the last option argument processed by the <code>getopts</code> builtin. +<dt><a id="index-OPTIND"></a><span><code class="code">OPTIND</code><a class="copiable-link" href="#index-OPTIND"> &para;</a></span></dt> +<dd><p>The index of the last option argument processed by the <code class="code">getopts</code> builtin. </p> </dd> -<dt id='index-PATH'><span><code>PATH</code><a href='#index-PATH' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-PATH"></a><span><code class="code">PATH</code><a class="copiable-link" href="#index-PATH"> &para;</a></span></dt> <dd><p>A colon-separated list of directories in which the shell looks for commands. -A zero-length (null) directory name in the value of <code>PATH</code> indicates the +A zero-length (null) directory name in the value of <code class="code">PATH</code> indicates the current directory. A null directory name may appear as two adjacent colons, or as an initial or trailing colon. </p> </dd> -<dt id='index-PS1'><span><code>PS1</code><a href='#index-PS1' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The primary prompt string. The default value is &lsquo;<samp>\s-\v\$ </samp>&rsquo;. -See <a href="#Controlling-the-Prompt">Controlling the Prompt</a>, for the complete list of escape -sequences that are expanded before <code>PS1</code> is displayed. +<dt><a id="index-PS1"></a><span><code class="code">PS1</code><a class="copiable-link" href="#index-PS1"> &para;</a></span></dt> +<dd><p>The primary prompt string. The default value is &lsquo;<samp class="samp">\s-\v\$ </samp>&rsquo;. +See <a class="xref" href="#Controlling-the-Prompt">Controlling the Prompt</a>, for the complete list of escape +sequences that are expanded before <code class="env">PS1</code> is displayed. </p> </dd> -<dt id='index-PS2'><span><code>PS2</code><a href='#index-PS2' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The secondary prompt string. The default value is &lsquo;<samp>&gt; </samp>&rsquo;. -<code>PS2</code> is expanded in the same way as <code>PS1</code> before being +<dt><a id="index-PS2"></a><span><code class="code">PS2</code><a class="copiable-link" href="#index-PS2"> &para;</a></span></dt> +<dd><p>The secondary prompt string. The default value is &lsquo;<samp class="samp">&gt; </samp>&rsquo;. +<code class="env">PS2</code> is expanded in the same way as <code class="env">PS1</code> before being displayed. </p> </dd> @@ -6759,23 +6984,23 @@ displayed. <hr> </div> -<div class="section" id="Bash-Variables"> -<div class="header"> +<div class="section-level-extent" id="Bash-Variables"> +<div class="nav-panel"> <p> Previous: <a href="#Bourne-Shell-Variables" accesskey="p" rel="prev">Bourne Shell Variables</a>, Up: <a href="#Shell-Variables" accesskey="u" rel="up">Shell Variables</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bash-Variables-1"></span><h3 class="section">5.2 Bash Variables</h3> +<h3 class="section" id="Bash-Variables-1"><span>5.2 Bash Variables<a class="copiable-link" href="#Bash-Variables-1"> &para;</a></span></h3> <p>These variables are set or used by Bash, but other shells do not normally treat them specially. </p> <p>A few variables used by Bash are described in different chapters: variables for controlling the job control facilities -(see <a href="#Job-Control-Variables">Job Control Variables</a>). +(see <a class="pxref" href="#Job-Control-Variables">Job Control Variables</a>). </p> -<dl compact="compact"> -<dt id='index-_005f'><span><code>_</code><a href='#index-_005f' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-_0024_005f"></span> +<dl class="vtable"> +<dt><a id="index-_005f"></a><span><code class="code">_</code><a class="copiable-link" href="#index-_005f"> &para;</a></span></dt> +<dd><a class="index-entry-id" id="index-_0024_005f"></a> <p>($_, an underscore.) At shell startup, set to the pathname used to invoke the shell or shell script being executed as passed in the environment @@ -6787,497 +7012,557 @@ and placed in the environment exported to that command. When checking mail, this parameter holds the name of the mail file. </p> </dd> -<dt id='index-BASH'><span><code>BASH</code><a href='#index-BASH' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH"></a><span><code class="code">BASH</code><a class="copiable-link" href="#index-BASH"> &para;</a></span></dt> <dd><p>The full pathname used to execute the current instance of Bash. </p> </dd> -<dt id='index-BASHOPTS'><span><code>BASHOPTS</code><a href='#index-BASHOPTS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASHOPTS"></a><span><code class="code">BASHOPTS</code><a class="copiable-link" href="#index-BASHOPTS"> &para;</a></span></dt> <dd><p>A colon-separated list of enabled shell options. Each word in -the list is a valid argument for the <samp>-s</samp> option to the -<code>shopt</code> builtin command (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>). -The options appearing in <code>BASHOPTS</code> are those reported -as &lsquo;<samp>on</samp>&rsquo; by &lsquo;<samp>shopt</samp>&rsquo;. +the list is a valid argument for the <samp class="option">-s</samp> option to the +<code class="code">shopt</code> builtin command (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>). +The options appearing in <code class="env">BASHOPTS</code> are those reported +as &lsquo;<samp class="samp">on</samp>&rsquo; by &lsquo;<samp class="samp">shopt</samp>&rsquo;. If this variable is in the environment when Bash starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly. </p> </dd> -<dt id='index-BASHPID'><span><code>BASHPID</code><a href='#index-BASHPID' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASHPID"></a><span><code class="code">BASHPID</code><a class="copiable-link" href="#index-BASHPID"> &para;</a></span></dt> <dd><p>Expands to the process ID of the current Bash process. -This differs from <code>$$</code> under certain circumstances, such as subshells +This differs from <code class="code">$$</code> under certain circumstances, such as subshells that do not require Bash to be re-initialized. -Assignments to <code>BASHPID</code> have no effect. -If <code>BASHPID</code> +Assignments to <code class="env">BASHPID</code> have no effect. +If <code class="env">BASHPID</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-BASH_005fALIASES'><span><code>BASH_ALIASES</code><a href='#index-BASH_005fALIASES' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fALIASES"></a><span><code class="code">BASH_ALIASES</code><a class="copiable-link" href="#index-BASH_005fALIASES"> &para;</a></span></dt> <dd><p>An associative array variable whose members correspond to the internal -list of aliases as maintained by the <code>alias</code> builtin. -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +list of aliases as maintained by the <code class="code">alias</code> builtin. +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). Elements added to this array appear in the alias list; however, unsetting array elements currently does not cause aliases to be removed from the alias list. -If <code>BASH_ALIASES</code> +If <code class="env">BASH_ALIASES</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-BASH_005fARGC'><span><code>BASH_ARGC</code><a href='#index-BASH_005fARGC' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fARGC"></a><span><code class="code">BASH_ARGC</code><a class="copiable-link" href="#index-BASH_005fARGC"> &para;</a></span></dt> <dd><p>An array variable whose values are the number of parameters in each -frame of the current bash execution call stack. The number of +frame of the current Bash execution call stack. The number of parameters to the current subroutine (shell function or script executed -with <code>.</code> or <code>source</code>) is at the top of the stack. When a +with <code class="code">.</code> or <code class="code">source</code>) is at the top of the stack. When a subroutine is executed, the number of parameters passed is pushed onto -<code>BASH_ARGC</code>. -The shell sets <code>BASH_ARGC</code> only when in extended debugging mode -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a> -for a description of the <code>extdebug</code> option to the <code>shopt</code> +<code class="code">BASH_ARGC</code>. +The shell sets <code class="code">BASH_ARGC</code> only when in extended debugging mode +(see <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a> +for a description of the <code class="code">extdebug</code> option to the <code class="code">shopt</code> builtin). -Setting <code>extdebug</code> after the shell has started to execute a script, -or referencing this variable when <code>extdebug</code> is not set, +Setting <code class="code">extdebug</code> after the shell has started to execute a script, +or referencing this variable when <code class="code">extdebug</code> is not set, may result in inconsistent values. +Assignments to <code class="env">BASH_ARGC</code> have no effect, and it may not be unset. </p> </dd> -<dt id='index-BASH_005fARGV'><span><code>BASH_ARGV</code><a href='#index-BASH_005fARGV' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>An array variable containing all of the parameters in the current bash +<dt><a id="index-BASH_005fARGV"></a><span><code class="code">BASH_ARGV</code><a class="copiable-link" href="#index-BASH_005fARGV"> &para;</a></span></dt> +<dd><p>An array variable containing all of the parameters in the current Bash execution call stack. The final parameter of the last subroutine call is at the top of the stack; the first parameter of the initial call is at the bottom. When a subroutine is executed, the parameters supplied -are pushed onto <code>BASH_ARGV</code>. -The shell sets <code>BASH_ARGV</code> only when in extended debugging mode -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a> -for a description of the <code>extdebug</code> option to the <code>shopt</code> +are pushed onto <code class="code">BASH_ARGV</code>. +The shell sets <code class="code">BASH_ARGV</code> only when in extended debugging mode +(see <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a> +for a description of the <code class="code">extdebug</code> option to the <code class="code">shopt</code> builtin). -Setting <code>extdebug</code> after the shell has started to execute a script, -or referencing this variable when <code>extdebug</code> is not set, +Setting <code class="code">extdebug</code> after the shell has started to execute a script, +or referencing this variable when <code class="code">extdebug</code> is not set, may result in inconsistent values. +Assignments to <code class="env">BASH_ARGV</code> have no effect, and it may not be unset. </p> </dd> -<dt id='index-BASH_005fARGV0'><span><code>BASH_ARGV0</code><a href='#index-BASH_005fARGV0' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fARGV0"></a><span><code class="code">BASH_ARGV0</code><a class="copiable-link" href="#index-BASH_005fARGV0"> &para;</a></span></dt> <dd><p>When referenced, this variable expands to the name of the shell or shell -script (identical to <code>$0</code>; See <a href="#Special-Parameters">Special Parameters</a>, +script (identical to <code class="code">$0</code>; See <a class="xref" href="#Special-Parameters">Special Parameters</a>, for the description of special parameter 0). -Assignment to <code>BASH_ARGV0</code> -causes the value assigned to also be assigned to <code>$0</code>. -If <code>BASH_ARGV0</code> +Assignment to <code class="code">BASH_ARGV0</code> +causes the value assigned to also be assigned to <code class="code">$0</code>. +If <code class="env">BASH_ARGV0</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-BASH_005fCMDS'><span><code>BASH_CMDS</code><a href='#index-BASH_005fCMDS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fCMDS"></a><span><code class="code">BASH_CMDS</code><a class="copiable-link" href="#index-BASH_005fCMDS"> &para;</a></span></dt> <dd><p>An associative array variable whose members correspond to the internal -hash table of commands as maintained by the <code>hash</code> builtin -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +hash table of commands as maintained by the <code class="code">hash</code> builtin +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). Elements added to this array appear in the hash table; however, unsetting array elements currently does not cause command names to be removed from the hash table. -If <code>BASH_CMDS</code> +If <code class="env">BASH_CMDS</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-BASH_005fCOMMAND'><span><code>BASH_COMMAND</code><a href='#index-BASH_005fCOMMAND' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fCOMMAND"></a><span><code class="code">BASH_COMMAND</code><a class="copiable-link" href="#index-BASH_005fCOMMAND"> &para;</a></span></dt> <dd><p>The command currently being executed or about to be executed, unless the shell is executing a command as the result of a trap, in which case it is the command executing at the time of the trap. -If <code>BASH_COMMAND</code> +If <code class="env">BASH_COMMAND</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-BASH_005fCOMPAT'><span><code>BASH_COMPAT</code><a href='#index-BASH_005fCOMPAT' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fCOMPAT"></a><span><code class="code">BASH_COMPAT</code><a class="copiable-link" href="#index-BASH_005fCOMPAT"> &para;</a></span></dt> <dd><p>The value is used to set the shell&rsquo;s compatibility level. -See <a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>, for a description of the various +See <a class="xref" href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>, for a description of the various compatibility levels and their effects. The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42) corresponding to the desired compatibility level. -If <code>BASH_COMPAT</code> is unset or set to the empty string, the compatibility +If <code class="env">BASH_COMPAT</code> is unset or set to the empty string, the compatibility level is set to the default for the current version. -If <code>BASH_COMPAT</code> is set to a value that is not one of the valid +If <code class="env">BASH_COMPAT</code> is set to a value that is not one of the valid compatibility levels, the shell prints an error message and sets the compatibility level to the default for the current version. -The valid values correspond to the compatibility levels -described below (see <a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>). +A subset of the valid values correspond to the compatibility levels +described below (see <a class="pxref" href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>). For example, 4.2 and 42 are valid values that correspond -to the <code>compat42</code> <code>shopt</code> option +to the <code class="code">compat42</code> <code class="code">shopt</code> option and set the compatibility level to 42. The current version is also a valid value. </p> </dd> -<dt id='index-BASH_005fENV'><span><code>BASH_ENV</code><a href='#index-BASH_005fENV' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fENV"></a><span><code class="code">BASH_ENV</code><a class="copiable-link" href="#index-BASH_005fENV"> &para;</a></span></dt> <dd><p>If this variable is set when Bash is invoked to execute a shell script, its value is expanded and used as the name of a startup file -to read before executing the script. See <a href="#Bash-Startup-Files">Bash Startup Files</a>. +to read before executing the script. See <a class="xref" href="#Bash-Startup-Files">Bash Startup Files</a>. </p> </dd> -<dt id='index-BASH_005fEXECUTION_005fSTRING'><span><code>BASH_EXECUTION_STRING</code><a href='#index-BASH_005fEXECUTION_005fSTRING' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The command argument to the <samp>-c</samp> invocation option. +<dt><a id="index-BASH_005fEXECUTION_005fSTRING"></a><span><code class="code">BASH_EXECUTION_STRING</code><a class="copiable-link" href="#index-BASH_005fEXECUTION_005fSTRING"> &para;</a></span></dt> +<dd><p>The command argument to the <samp class="option">-c</samp> invocation option. </p> </dd> -<dt id='index-BASH_005fLINENO'><span><code>BASH_LINENO</code><a href='#index-BASH_005fLINENO' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fLINENO"></a><span><code class="code">BASH_LINENO</code><a class="copiable-link" href="#index-BASH_005fLINENO"> &para;</a></span></dt> <dd><p>An array variable whose members are the line numbers in source files -where each corresponding member of <code>FUNCNAME</code> was invoked. -<code>${BASH_LINENO[$i]}</code> is the line number in the source file -(<code>${BASH_SOURCE[$i+1]}</code>) where -<code>${FUNCNAME[$i]}</code> was called (or <code>${BASH_LINENO[$i-1]}</code> if +where each corresponding member of <code class="env">FUNCNAME</code> was invoked. +<code class="code">${BASH_LINENO[$i]}</code> is the line number in the source file +(<code class="code">${BASH_SOURCE[$i+1]}</code>) where +<code class="code">${FUNCNAME[$i]}</code> was called (or <code class="code">${BASH_LINENO[$i-1]}</code> if referenced within another shell function). -Use <code>LINENO</code> to obtain the current line number. +Use <code class="code">LINENO</code> to obtain the current line number. +Assignments to <code class="env">BASH_LINENO</code> have no effect, and it may not be unset. </p> </dd> -<dt id='index-BASH_005fLOADABLES_005fPATH'><span><code>BASH_LOADABLES_PATH</code><a href='#index-BASH_005fLOADABLES_005fPATH' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fLOADABLES_005fPATH"></a><span><code class="code">BASH_LOADABLES_PATH</code><a class="copiable-link" href="#index-BASH_005fLOADABLES_005fPATH"> &para;</a></span></dt> <dd><p>A colon-separated list of directories in which the shell looks for dynamically loadable builtins specified by the -<code>enable</code> command. +<code class="code">enable</code> command. </p> </dd> -<dt id='index-BASH_005fREMATCH'><span><code>BASH_REMATCH</code><a href='#index-BASH_005fREMATCH' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>An array variable whose members are assigned by the &lsquo;<samp>=~</samp>&rsquo; binary -operator to the <code>[[</code> conditional command -(see <a href="#Conditional-Constructs">Conditional Constructs</a>). +<dt><a id="index-BASH_005fMONOSECONDS"></a><span><code class="code">BASH_MONOSECONDS</code><a class="copiable-link" href="#index-BASH_005fMONOSECONDS"> &para;</a></span></dt> +<dd><p>Each time this variable is referenced, it expands to the value returned +by the system&rsquo;s monotonic clock, if one is available. +If there is no monotonic clock, this is equivalent to <code class="env">EPOCHSECONDS</code>. +If <code class="env">BASH_MONOSECONDS</code> +is unset, it loses its special properties, even if it is +subsequently reset. +</p> +</dd> +<dt><a id="index-BASH_005fREMATCH"></a><span><code class="code">BASH_REMATCH</code><a class="copiable-link" href="#index-BASH_005fREMATCH"> &para;</a></span></dt> +<dd><p>An array variable whose members are assigned by the &lsquo;<samp class="samp">=~</samp>&rsquo; binary +operator to the <code class="code">[[</code> conditional command +(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>). The element with index 0 is the portion of the string matching the entire regular expression. -The element with index <var>n</var> is the portion of the -string matching the <var>n</var>th parenthesized subexpression. +The element with index <var class="var">n</var> is the portion of the +string matching the <var class="var">n</var>th parenthesized subexpression. </p> </dd> -<dt id='index-BASH_005fSOURCE'><span><code>BASH_SOURCE</code><a href='#index-BASH_005fSOURCE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fSOURCE"></a><span><code class="code">BASH_SOURCE</code><a class="copiable-link" href="#index-BASH_005fSOURCE"> &para;</a></span></dt> <dd><p>An array variable whose members are the source filenames where the -corresponding shell function names in the <code>FUNCNAME</code> array +corresponding shell function names in the <code class="code">FUNCNAME</code> array variable are defined. -The shell function <code>${FUNCNAME[$i]}</code> is defined in the file -<code>${BASH_SOURCE[$i]}</code> and called from <code>${BASH_SOURCE[$i+1]}</code> +The shell function <code class="code">${FUNCNAME[$i]}</code> is defined in the file +<code class="code">${BASH_SOURCE[$i]}</code> and called from <code class="code">${BASH_SOURCE[$i+1]}</code> +Assignments to <code class="env">BASH_SOURCE</code> have no effect, and it may not be unset. </p> </dd> -<dt id='index-BASH_005fSUBSHELL'><span><code>BASH_SUBSHELL</code><a href='#index-BASH_005fSUBSHELL' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fSUBSHELL"></a><span><code class="code">BASH_SUBSHELL</code><a class="copiable-link" href="#index-BASH_005fSUBSHELL"> &para;</a></span></dt> <dd><p>Incremented by one within each subshell or subshell environment when the shell begins executing in that environment. The initial value is 0. -If <code>BASH_SUBSHELL</code> +If <code class="env">BASH_SUBSHELL</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-BASH_005fVERSINFO'><span><code>BASH_VERSINFO</code><a href='#index-BASH_005fVERSINFO' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>A readonly array variable (see <a href="#Arrays">Arrays</a>) +<dt><a id="index-BASH_005fTRAPSIG"></a><span><code class="code">BASH_TRAPSIG</code><a class="copiable-link" href="#index-BASH_005fTRAPSIG"> &para;</a></span></dt> +<dd><p>Set to the signal number corresponding to the trap action being executed +during its execution. +See the description of <code class="code">trap</code> +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) +for information about signal numbers and trap execution. +</p> +</dd> +<dt><a id="index-BASH_005fVERSINFO"></a><span><code class="code">BASH_VERSINFO</code><a class="copiable-link" href="#index-BASH_005fVERSINFO"> &para;</a></span></dt> +<dd><p>A readonly array variable (see <a class="pxref" href="#Arrays">Arrays</a>) whose members hold version information for this instance of Bash. The values assigned to the array members are as follows: </p> -<dl compact="compact"> -<dt><span><code>BASH_VERSINFO[0]</code></span></dt> -<dd><p>The major version number (the <em>release</em>). +<dl class="table"> +<dt><code class="code">BASH_VERSINFO[0]</code></dt> +<dd><p>The major version number (the <em class="dfn">release</em>). </p> </dd> -<dt><span><code>BASH_VERSINFO[1]</code></span></dt> -<dd><p>The minor version number (the <em>version</em>). +<dt><code class="code">BASH_VERSINFO[1]</code></dt> +<dd><p>The minor version number (the <em class="dfn">version</em>). </p> </dd> -<dt><span><code>BASH_VERSINFO[2]</code></span></dt> +<dt><code class="code">BASH_VERSINFO[2]</code></dt> <dd><p>The patch level. </p> </dd> -<dt><span><code>BASH_VERSINFO[3]</code></span></dt> +<dt><code class="code">BASH_VERSINFO[3]</code></dt> <dd><p>The build version. </p> </dd> -<dt><span><code>BASH_VERSINFO[4]</code></span></dt> -<dd><p>The release status (e.g., <code>beta1</code>). +<dt><code class="code">BASH_VERSINFO[4]</code></dt> +<dd><p>The release status (e.g., <code class="code">beta</code>). </p> </dd> -<dt><span><code>BASH_VERSINFO[5]</code></span></dt> -<dd><p>The value of <code>MACHTYPE</code>. +<dt><code class="code">BASH_VERSINFO[5]</code></dt> +<dd><p>The value of <code class="env">MACHTYPE</code>. </p></dd> </dl> </dd> -<dt id='index-BASH_005fVERSION'><span><code>BASH_VERSION</code><a href='#index-BASH_005fVERSION' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fVERSION"></a><span><code class="code">BASH_VERSION</code><a class="copiable-link" href="#index-BASH_005fVERSION"> &para;</a></span></dt> <dd><p>The version number of the current instance of Bash. </p> </dd> -<dt id='index-BASH_005fXTRACEFD'><span><code>BASH_XTRACEFD</code><a href='#index-BASH_005fXTRACEFD' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-BASH_005fXTRACEFD"></a><span><code class="code">BASH_XTRACEFD</code><a class="copiable-link" href="#index-BASH_005fXTRACEFD"> &para;</a></span></dt> <dd><p>If set to an integer corresponding to a valid file descriptor, Bash -will write the trace output generated when &lsquo;<samp>set -x</samp>&rsquo; +will write the trace output generated when &lsquo;<samp class="samp">set -x</samp>&rsquo; is enabled to that file descriptor. This allows tracing output to be separated from diagnostic and error messages. -The file descriptor is closed when <code>BASH_XTRACEFD</code> is unset or assigned +The file descriptor is closed when <code class="code">BASH_XTRACEFD</code> is unset or assigned a new value. -Unsetting <code>BASH_XTRACEFD</code> or assigning it the empty string causes the +Unsetting <code class="code">BASH_XTRACEFD</code> or assigning it the empty string causes the trace output to be sent to the standard error. -Note that setting <code>BASH_XTRACEFD</code> to 2 (the standard error file +Note that setting <code class="code">BASH_XTRACEFD</code> to 2 (the standard error file descriptor) and then unsetting it will result in the standard error being closed. </p> </dd> -<dt id='index-CHILD_005fMAX'><span><code>CHILD_MAX</code><a href='#index-CHILD_005fMAX' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-CHILD_005fMAX"></a><span><code class="code">CHILD_MAX</code><a class="copiable-link" href="#index-CHILD_005fMAX"> &para;</a></span></dt> <dd><p>Set the number of exited child status values for the shell to remember. -Bash will not allow this value to be decreased below a <small>POSIX</small>-mandated +Bash will not allow this value to be decreased below a <small class="sc">POSIX</small>-mandated minimum, and there is a maximum value (currently 8192) that this may not exceed. The minimum value is system-dependent. </p> </dd> -<dt id='index-COLUMNS'><span><code>COLUMNS</code><a href='#index-COLUMNS' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Used by the <code>select</code> command to determine the terminal width +<dt><a id="index-COLUMNS"></a><span><code class="code">COLUMNS</code><a class="copiable-link" href="#index-COLUMNS"> &para;</a></span></dt> +<dd><p>Used by the <code class="code">select</code> command to determine the terminal width when printing selection lists. -Automatically set if the <code>checkwinsize</code> option is enabled -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), or in an interactive shell upon receipt of a -<code>SIGWINCH</code>. +Automatically set if the <code class="code">checkwinsize</code> option is enabled +(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), or in an interactive shell upon receipt of a +<code class="code">SIGWINCH</code>. </p> </dd> -<dt id='index-COMP_005fCWORD'><span><code>COMP_CWORD</code><a href='#index-COMP_005fCWORD' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>An index into <code>${COMP_WORDS}</code> of the word containing the current +<dt><a id="index-COMP_005fCWORD"></a><span><code class="code">COMP_CWORD</code><a class="copiable-link" href="#index-COMP_005fCWORD"> &para;</a></span></dt> +<dd><p>An index into <code class="env">${COMP_WORDS}</code> of the word containing the current cursor position. This variable is available only in shell functions invoked by the -programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>). +programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>). </p> </dd> -<dt id='index-COMP_005fLINE'><span><code>COMP_LINE</code><a href='#index-COMP_005fLINE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-COMP_005fLINE"></a><span><code class="code">COMP_LINE</code><a class="copiable-link" href="#index-COMP_005fLINE"> &para;</a></span></dt> <dd><p>The current command line. This variable is available only in shell functions and external commands invoked by the -programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>). +programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>). </p> </dd> -<dt id='index-COMP_005fPOINT'><span><code>COMP_POINT</code><a href='#index-COMP_005fPOINT' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-COMP_005fPOINT"></a><span><code class="code">COMP_POINT</code><a class="copiable-link" href="#index-COMP_005fPOINT"> &para;</a></span></dt> <dd><p>The index of the current cursor position relative to the beginning of the current command. If the current cursor position is at the end of the current command, -the value of this variable is equal to <code>${#COMP_LINE}</code>. +the value of this variable is equal to <code class="code">${#COMP_LINE}</code>. This variable is available only in shell functions and external commands invoked by the -programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>). +programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>). </p> </dd> -<dt id='index-COMP_005fTYPE'><span><code>COMP_TYPE</code><a href='#index-COMP_005fTYPE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-COMP_005fTYPE"></a><span><code class="code">COMP_TYPE</code><a class="copiable-link" href="#index-COMP_005fTYPE"> &para;</a></span></dt> <dd><p>Set to an integer value corresponding to the type of completion attempted that caused a completion function to be called: -<tt class="key">TAB</tt>, for normal completion, -&lsquo;<samp>?</samp>&rsquo;, for listing completions after successive tabs, -&lsquo;<samp>!</samp>&rsquo;, for listing alternatives on partial word completion, -&lsquo;<samp>@</samp>&rsquo;, to list completions if the word is not unmodified, +<kbd class="key">TAB</kbd>, for normal completion, +&lsquo;<samp class="samp">?</samp>&rsquo;, for listing completions after successive tabs, +&lsquo;<samp class="samp">!</samp>&rsquo;, for listing alternatives on partial word completion, +&lsquo;<samp class="samp">@</samp>&rsquo;, to list completions if the word is not unmodified, or -&lsquo;<samp>%</samp>&rsquo;, for menu completion. +&lsquo;<samp class="samp">%</samp>&rsquo;, for menu completion. This variable is available only in shell functions and external commands invoked by the -programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>). +programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>). </p> </dd> -<dt id='index-COMP_005fKEY'><span><code>COMP_KEY</code><a href='#index-COMP_005fKEY' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-COMP_005fKEY"></a><span><code class="code">COMP_KEY</code><a class="copiable-link" href="#index-COMP_005fKEY"> &para;</a></span></dt> <dd><p>The key (or final key of a key sequence) used to invoke the current completion function. </p> </dd> -<dt id='index-COMP_005fWORDBREAKS'><span><code>COMP_WORDBREAKS</code><a href='#index-COMP_005fWORDBREAKS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-COMP_005fWORDBREAKS"></a><span><code class="code">COMP_WORDBREAKS</code><a class="copiable-link" href="#index-COMP_005fWORDBREAKS"> &para;</a></span></dt> <dd><p>The set of characters that the Readline library treats as word separators when performing word completion. -If <code>COMP_WORDBREAKS</code> +If <code class="env">COMP_WORDBREAKS</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-COMP_005fWORDS'><span><code>COMP_WORDS</code><a href='#index-COMP_005fWORDS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-COMP_005fWORDS"></a><span><code class="code">COMP_WORDS</code><a class="copiable-link" href="#index-COMP_005fWORDS"> &para;</a></span></dt> <dd><p>An array variable consisting of the individual words in the current command line. The line is split into words as Readline would split it, using -<code>COMP_WORDBREAKS</code> as described above. +<code class="code">COMP_WORDBREAKS</code> as described above. This variable is available only in shell functions invoked by the -programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>). +programmable completion facilities (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>). </p> </dd> -<dt id='index-COMPREPLY'><span><code>COMPREPLY</code><a href='#index-COMPREPLY' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-COMPREPLY"></a><span><code class="code">COMPREPLY</code><a class="copiable-link" href="#index-COMPREPLY"> &para;</a></span></dt> <dd><p>An array variable from which Bash reads the possible completions generated by a shell function invoked by the programmable completion -facility (see <a href="#Programmable-Completion">Programmable Completion</a>). +facility (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>). Each array element contains one possible completion. </p> </dd> -<dt id='index-COPROC'><span><code>COPROC</code><a href='#index-COPROC' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-COPROC"></a><span><code class="code">COPROC</code><a class="copiable-link" href="#index-COPROC"> &para;</a></span></dt> <dd><p>An array variable created to hold the file descriptors -for output from and input to an unnamed coprocess (see <a href="#Coprocesses">Coprocesses</a>). +for output from and input to an unnamed coprocess (see <a class="pxref" href="#Coprocesses">Coprocesses</a>). </p> </dd> -<dt id='index-DIRSTACK'><span><code>DIRSTACK</code><a href='#index-DIRSTACK' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-DIRSTACK"></a><span><code class="code">DIRSTACK</code><a class="copiable-link" href="#index-DIRSTACK"> &para;</a></span></dt> <dd><p>An array variable containing the current contents of the directory stack. Directories appear in the stack in the order they are displayed by the -<code>dirs</code> builtin. +<code class="code">dirs</code> builtin. Assigning to members of this array variable may be used to modify -directories already in the stack, but the <code>pushd</code> and <code>popd</code> +directories already in the stack, but the <code class="code">pushd</code> and <code class="code">popd</code> builtins must be used to add and remove directories. Assignment to this variable will not change the current directory. -If <code>DIRSTACK</code> +If <code class="env">DIRSTACK</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-EMACS'><span><code>EMACS</code><a href='#index-EMACS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-EMACS"></a><span><code class="code">EMACS</code><a class="copiable-link" href="#index-EMACS"> &para;</a></span></dt> <dd><p>If Bash finds this variable in the environment when the shell -starts with value &lsquo;<samp>t</samp>&rsquo;, it assumes that the shell is running in an +starts with value &lsquo;<samp class="samp">t</samp>&rsquo;, it assumes that the shell is running in an Emacs shell buffer and disables line editing. </p> </dd> -<dt id='index-ENV'><span><code>ENV</code><a href='#index-ENV' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Expanded and executed similarly to <code>BASH_ENV</code> -(see <a href="#Bash-Startup-Files">Bash Startup Files</a>) +<dt><a id="index-ENV"></a><span><code class="code">ENV</code><a class="copiable-link" href="#index-ENV"> &para;</a></span></dt> +<dd><p>Expanded and executed similarly to <code class="code">BASH_ENV</code> +(see <a class="pxref" href="#Bash-Startup-Files">Bash Startup Files</a>) when an interactive shell is invoked in -<small>POSIX</small> Mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>). +<small class="sc">POSIX</small> Mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>). </p> </dd> -<dt id='index-EPOCHREALTIME'><span><code>EPOCHREALTIME</code><a href='#index-EPOCHREALTIME' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-EPOCHREALTIME"></a><span><code class="code">EPOCHREALTIME</code><a class="copiable-link" href="#index-EPOCHREALTIME"> &para;</a></span></dt> <dd><p>Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch as a floating point value with micro-second granularity -(see the documentation for the C library function <code>time</code> for the +(see the documentation for the C library function <code class="code">time</code> for the definition of Epoch). -Assignments to <code>EPOCHREALTIME</code> are ignored. -If <code>EPOCHREALTIME</code> +Assignments to <code class="env">EPOCHREALTIME</code> are ignored. +If <code class="env">EPOCHREALTIME</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-EPOCHSECONDS'><span><code>EPOCHSECONDS</code><a href='#index-EPOCHSECONDS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-EPOCHSECONDS"></a><span><code class="code">EPOCHSECONDS</code><a class="copiable-link" href="#index-EPOCHSECONDS"> &para;</a></span></dt> <dd><p>Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch (see the documentation for the C library function -<code>time</code> for the definition of Epoch). -Assignments to <code>EPOCHSECONDS</code> are ignored. -If <code>EPOCHSECONDS</code> +<code class="code">time</code> for the definition of Epoch). +Assignments to <code class="env">EPOCHSECONDS</code> are ignored. +If <code class="env">EPOCHSECONDS</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-EUID'><span><code>EUID</code><a href='#index-EUID' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-EUID"></a><span><code class="code">EUID</code><a class="copiable-link" href="#index-EUID"> &para;</a></span></dt> <dd><p>The numeric effective user id of the current user. This variable is readonly. </p> </dd> -<dt id='index-EXECIGNORE'><span><code>EXECIGNORE</code><a href='#index-EXECIGNORE' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>A colon-separated list of shell patterns (see <a href="#Pattern-Matching">Pattern Matching</a>) +<dt><a id="index-EXECIGNORE"></a><span><code class="code">EXECIGNORE</code><a class="copiable-link" href="#index-EXECIGNORE"> &para;</a></span></dt> +<dd><p>A colon-separated list of shell patterns (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>) defining the list of filenames to be ignored by command search using -<code>PATH</code>. +<code class="code">PATH</code>. Files whose full pathnames match one of these patterns are not considered executable files for the purposes of completion and command execution -via <code>PATH</code> lookup. -This does not affect the behavior of the <code>[</code>, <code>test</code>, and <code>[[</code> +via <code class="code">PATH</code> lookup. +This does not affect the behavior of the <code class="code">[</code>, <code class="code">test</code>, and <code class="code">[[</code> commands. -Full pathnames in the command hash table are not subject to <code>EXECIGNORE</code>. +Full pathnames in the command hash table are not subject to <code class="code">EXECIGNORE</code>. Use this variable to ignore shared library files that have the executable bit set, but are not executable files. -The pattern matching honors the setting of the <code>extglob</code> shell +The pattern matching honors the setting of the <code class="code">extglob</code> shell option. </p> </dd> -<dt id='index-FCEDIT'><span><code>FCEDIT</code><a href='#index-FCEDIT' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The editor used as a default by the <samp>-e</samp> option to the <code>fc</code> +<dt><a id="index-FCEDIT"></a><span><code class="code">FCEDIT</code><a class="copiable-link" href="#index-FCEDIT"> &para;</a></span></dt> +<dd><p>The editor used as a default by the <samp class="option">-e</samp> option to the <code class="code">fc</code> builtin command. </p> </dd> -<dt id='index-FIGNORE'><span><code>FIGNORE</code><a href='#index-FIGNORE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-FIGNORE"></a><span><code class="code">FIGNORE</code><a class="copiable-link" href="#index-FIGNORE"> &para;</a></span></dt> <dd><p>A colon-separated list of suffixes to ignore when performing filename completion. A filename whose suffix matches one of the entries in -<code>FIGNORE</code> +<code class="env">FIGNORE</code> is excluded from the list of matched filenames. A sample -value is &lsquo;<samp>.o:~</samp>&rsquo; +value is &lsquo;<samp class="samp">.o:~</samp>&rsquo; </p> </dd> -<dt id='index-FUNCNAME'><span><code>FUNCNAME</code><a href='#index-FUNCNAME' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-FUNCNAME"></a><span><code class="code">FUNCNAME</code><a class="copiable-link" href="#index-FUNCNAME"> &para;</a></span></dt> <dd><p>An array variable containing the names of all shell functions currently in the execution call stack. The element with index 0 is the name of any currently-executing shell function. The bottom-most element (the one with the highest index) -is <code>&quot;main&quot;</code>. +is <code class="code">&quot;main&quot;</code>. This variable exists only when a shell function is executing. -Assignments to <code>FUNCNAME</code> have no effect. -If <code>FUNCNAME</code> +Assignments to <code class="env">FUNCNAME</code> have no effect. +If <code class="env">FUNCNAME</code> is unset, it loses its special properties, even if it is subsequently reset. </p> -<p>This variable can be used with <code>BASH_LINENO</code> and <code>BASH_SOURCE</code>. -Each element of <code>FUNCNAME</code> has corresponding elements in -<code>BASH_LINENO</code> and <code>BASH_SOURCE</code> to describe the call stack. -For instance, <code>${FUNCNAME[$i]}</code> was called from the file -<code>${BASH_SOURCE[$i+1]}</code> at line number <code>${BASH_LINENO[$i]}</code>. -The <code>caller</code> builtin displays the current call stack using this +<p>This variable can be used with <code class="code">BASH_LINENO</code> and <code class="code">BASH_SOURCE</code>. +Each element of <code class="code">FUNCNAME</code> has corresponding elements in +<code class="code">BASH_LINENO</code> and <code class="code">BASH_SOURCE</code> to describe the call stack. +For instance, <code class="code">${FUNCNAME[$i]}</code> was called from the file +<code class="code">${BASH_SOURCE[$i+1]}</code> at line number <code class="code">${BASH_LINENO[$i]}</code>. +The <code class="code">caller</code> builtin displays the current call stack using this information. </p> </dd> -<dt id='index-FUNCNEST'><span><code>FUNCNEST</code><a href='#index-FUNCNEST' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-FUNCNEST"></a><span><code class="code">FUNCNEST</code><a class="copiable-link" href="#index-FUNCNEST"> &para;</a></span></dt> <dd><p>If set to a numeric value greater than 0, defines a maximum function nesting level. Function invocations that exceed this nesting level will cause the current command to abort. </p> </dd> -<dt id='index-GLOBIGNORE'><span><code>GLOBIGNORE</code><a href='#index-GLOBIGNORE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-GLOBIGNORE"></a><span><code class="code">GLOBIGNORE</code><a class="copiable-link" href="#index-GLOBIGNORE"> &para;</a></span></dt> <dd><p>A colon-separated list of patterns defining the set of file names to be ignored by filename expansion. If a file name matched by a filename expansion pattern also matches one -of the patterns in <code>GLOBIGNORE</code>, it is removed from the list +of the patterns in <code class="env">GLOBIGNORE</code>, it is removed from the list of matches. -The pattern matching honors the setting of the <code>extglob</code> shell +The pattern matching honors the setting of the <code class="code">extglob</code> shell option. </p> </dd> -<dt id='index-GROUPS'><span><code>GROUPS</code><a href='#index-GROUPS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-GLOBSORT"></a><span><code class="code">GLOBSORT</code><a class="copiable-link" href="#index-GLOBSORT"> &para;</a></span></dt> +<dd><p>Control how the results of filename expansion are sorted. +The value of this variable specifies the sort criteria and sort order for +the results of filename expansion. +If this variable is unset or set to the null string, filename expansion +uses the historical behavior of sorting by name. +If set, a valid value begins with an optional &lsquo;<samp class="samp">+</samp>&rsquo;, which is ignored, +or &lsquo;<samp class="samp">-</samp>&rsquo;, which reverses the sort order from ascending to descending, +followed by a sort specifier. +The valid sort specifiers are +&lsquo;<samp class="samp">name</samp>&rsquo;, +&lsquo;<samp class="samp">size</samp>&rsquo;, +&lsquo;<samp class="samp">mtime</samp>&rsquo;, +&lsquo;<samp class="samp">atime</samp>&rsquo;, +&lsquo;<samp class="samp">ctime</samp>&rsquo;, +and +&lsquo;<samp class="samp">blocks</samp>&rsquo;, +which sort the files on name, file size, modification time, access time, +inode change time, and number of blocks, respectively. +</p> +<p>For example, a value of <code class="code">-mtime</code> sorts the results in descending +order by modification time (newest first). +</p> +<p>A sort specifier of &lsquo;<samp class="samp">nosort</samp>&rsquo; disables sorting completely; the results +are returned in the order they are read from the file system,. +</p> +<p>If the sort specifier is missing, it defaults to <var class="var">name</var>, +so a value of &lsquo;<samp class="samp">+</samp>&rsquo; is equivalent to the null string, +and a value of &lsquo;<samp class="samp">-</samp>&rsquo; sorts by name in descending order. +</p> +<p>Any invalid value restores the historical sorting behavior. +</p> +</dd> +<dt><a id="index-GROUPS"></a><span><code class="code">GROUPS</code><a class="copiable-link" href="#index-GROUPS"> &para;</a></span></dt> <dd><p>An array variable containing the list of groups of which the current user is a member. -Assignments to <code>GROUPS</code> have no effect. -If <code>GROUPS</code> +Assignments to <code class="env">GROUPS</code> have no effect. +If <code class="env">GROUPS</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-histchars'><span><code>histchars</code><a href='#index-histchars' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-histchars"></a><span><code class="code">histchars</code><a class="copiable-link" href="#index-histchars"> &para;</a></span></dt> <dd><p>Up to three characters which control history expansion, quick -substitution, and tokenization (see <a href="#History-Interaction">History Expansion</a>). +substitution, and tokenization (see <a class="pxref" href="#History-Interaction">History Expansion</a>). The first character is the -<em>history expansion</em> character, that is, the character which signifies the -start of a history expansion, normally &lsquo;<samp>!</samp>&rsquo;. The second character is the -character which signifies &lsquo;quick substitution&rsquo; when seen as the first -character on a line, normally &lsquo;<samp>^</samp>&rsquo;. The optional third character is the +<em class="dfn">history expansion</em> character, that is, the character which signifies the +start of a history expansion, normally &lsquo;<samp class="samp">!</samp>&rsquo;. +The second character is the +character which signifies &quot;quick substitution&quot; when seen as the first +character on a line, normally &lsquo;<samp class="samp">^</samp>&rsquo;. +The optional third character is the character which indicates that the remainder of the line is a comment when -found as the first character of a word, usually &lsquo;<samp>#</samp>&rsquo;. The history +found as the first character of a word, usually &lsquo;<samp class="samp">#</samp>&rsquo;. +The history comment character causes history substitution to be skipped for the -remaining words on the line. It does not necessarily cause the shell +remaining words on the line. +It does not necessarily cause the shell parser to treat the rest of the line as a comment. </p> </dd> -<dt id='index-HISTCMD'><span><code>HISTCMD</code><a href='#index-HISTCMD' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-HISTCMD"></a><span><code class="code">HISTCMD</code><a class="copiable-link" href="#index-HISTCMD"> &para;</a></span></dt> <dd><p>The history number, or index in the history list, of the current command. -Assignments to <code>HISTCMD</code> are ignored. -If <code>HISTCMD</code> +Assignments to <code class="env">HISTCMD</code> are ignored. +If <code class="env">HISTCMD</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-HISTCONTROL'><span><code>HISTCONTROL</code><a href='#index-HISTCONTROL' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-HISTCONTROL"></a><span><code class="code">HISTCONTROL</code><a class="copiable-link" href="#index-HISTCONTROL"> &para;</a></span></dt> <dd><p>A colon-separated list of values controlling how commands are saved on the history list. -If the list of values includes &lsquo;<samp>ignorespace</samp>&rsquo;, lines which begin +If the list of values includes &lsquo;<samp class="samp">ignorespace</samp>&rsquo;, lines which begin with a space character are not saved in the history list. -A value of &lsquo;<samp>ignoredups</samp>&rsquo; causes lines which match the previous +A value of &lsquo;<samp class="samp">ignoredups</samp>&rsquo; causes lines which match the previous history entry to not be saved. -A value of &lsquo;<samp>ignoreboth</samp>&rsquo; is shorthand for -&lsquo;<samp>ignorespace</samp>&rsquo; and &lsquo;<samp>ignoredups</samp>&rsquo;. -A value of &lsquo;<samp>erasedups</samp>&rsquo; causes all previous lines matching the +A value of &lsquo;<samp class="samp">ignoreboth</samp>&rsquo; is shorthand for +&lsquo;<samp class="samp">ignorespace</samp>&rsquo; and &lsquo;<samp class="samp">ignoredups</samp>&rsquo;. +A value of &lsquo;<samp class="samp">erasedups</samp>&rsquo; causes all previous lines matching the current line to be removed from the history list before that line is saved. Any value not in the above list is ignored. -If <code>HISTCONTROL</code> is unset, or does not include a valid value, +If <code class="env">HISTCONTROL</code> is unset, or does not include a valid value, all lines read by the shell parser are saved on the history list, -subject to the value of <code>HISTIGNORE</code>. +subject to the value of <code class="env">HISTIGNORE</code>. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of -<code>HISTCONTROL</code>. +<code class="env">HISTCONTROL</code>. </p> </dd> -<dt id='index-HISTFILE'><span><code>HISTFILE</code><a href='#index-HISTFILE' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The name of the file to which the command history is saved. The -default value is <samp>~/.bash_history</samp>. +<dt><a id="index-HISTFILE"></a><span><code class="code">HISTFILE</code><a class="copiable-link" href="#index-HISTFILE"> &para;</a></span></dt> +<dd><p>The name of the file to which the command history is saved. +Bash assigns a default value of <samp class="file">~/.bash_history</samp>. +If <code class="env">HISTFILE</code> is unset or null, +the command history is not saved when a shell exits. </p> </dd> -<dt id='index-HISTFILESIZE'><span><code>HISTFILESIZE</code><a href='#index-HISTFILESIZE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-HISTFILESIZE"></a><span><code class="code">HISTFILESIZE</code><a class="copiable-link" href="#index-HISTFILESIZE"> &para;</a></span></dt> <dd><p>The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, to contain no more than that number of lines @@ -7286,34 +7571,38 @@ The history file is also truncated to this size after writing it when a shell exits. If the value is 0, the history file is truncated to zero size. Non-numeric values and numeric values less than zero inhibit truncation. -The shell sets the default value to the value of <code>HISTSIZE</code> +The shell sets the default value to the value of <code class="env">HISTSIZE</code> after reading any startup files. </p> </dd> -<dt id='index-HISTIGNORE'><span><code>HISTIGNORE</code><a href='#index-HISTIGNORE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-HISTIGNORE"></a><span><code class="code">HISTIGNORE</code><a class="copiable-link" href="#index-HISTIGNORE"> &para;</a></span></dt> <dd><p>A colon-separated list of patterns used to decide which command -lines should be saved on the history list. Each pattern is +lines should be saved on the history list. +If a command line matches one of the patterns in the value of +<code class="code">HISTIGNORE</code>, it is not saved on the history list. +Each pattern is anchored at the beginning of the line and must match the complete -line (no implicit &lsquo;<samp>*</samp>&rsquo; is appended). Each pattern is tested -against the line after the checks specified by <code>HISTCONTROL</code> +line (Bash will not implicitly append a &lsquo;<samp class="samp">*</samp>&rsquo;). +Each pattern is tested +against the line after the checks specified by <code class="env">HISTCONTROL</code> are applied. In addition to the normal shell pattern matching -characters, &lsquo;<samp>&amp;</samp>&rsquo; matches the previous history line. &lsquo;<samp>&amp;</samp>&rsquo; +characters, &lsquo;<samp class="samp">&amp;</samp>&rsquo; matches the previous history line. &lsquo;<samp class="samp">&amp;</samp>&rsquo; may be escaped using a backslash; the backslash is removed before attempting a match. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of -<code>HISTIGNORE</code>. -The pattern matching honors the setting of the <code>extglob</code> shell +<code class="env">HISTIGNORE</code>. +The pattern matching honors the setting of the <code class="code">extglob</code> shell option. </p> -<p><code>HISTIGNORE</code> subsumes the function of <code>HISTCONTROL</code>. A -pattern of &lsquo;<samp>&amp;</samp>&rsquo; is identical to <code>ignoredups</code>, and a -pattern of &lsquo;<samp>[ ]*</samp>&rsquo; is identical to <code>ignorespace</code>. +<p><code class="env">HISTIGNORE</code> subsumes the function of <code class="env">HISTCONTROL</code>. A +pattern of &lsquo;<samp class="samp">&amp;</samp>&rsquo; is identical to <code class="code">ignoredups</code>, and a +pattern of &lsquo;<samp class="samp">[ ]*</samp>&rsquo; is identical to <code class="code">ignorespace</code>. Combining these two patterns, separating them with a colon, -provides the functionality of <code>ignoreboth</code>. +provides the functionality of <code class="code">ignoreboth</code>. </p> </dd> -<dt id='index-HISTSIZE'><span><code>HISTSIZE</code><a href='#index-HISTSIZE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-HISTSIZE"></a><span><code class="code">HISTSIZE</code><a class="copiable-link" href="#index-HISTSIZE"> &para;</a></span></dt> <dd><p>The maximum number of commands to remember on the history list. If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved @@ -7321,350 +7610,350 @@ on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files. </p> </dd> -<dt id='index-HISTTIMEFORMAT'><span><code>HISTTIMEFORMAT</code><a href='#index-HISTTIMEFORMAT' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-HISTTIMEFORMAT"></a><span><code class="code">HISTTIMEFORMAT</code><a class="copiable-link" href="#index-HISTTIMEFORMAT"> &para;</a></span></dt> <dd><p>If this variable is set and not null, its value is used as a format string -for <code>strftime</code> to print the time stamp associated with each history -entry displayed by the <code>history</code> builtin. +for <code class="code">strftime</code>(3) to print the time stamp associated with each history +entry displayed by the <code class="code">history</code> builtin. If this variable is set, time stamps are written to the history file so they may be preserved across shell sessions. This uses the history comment character to distinguish timestamps from other history lines. </p> </dd> -<dt id='index-HOSTFILE'><span><code>HOSTFILE</code><a href='#index-HOSTFILE' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Contains the name of a file in the same format as <samp>/etc/hosts</samp> that +<dt><a id="index-HOSTFILE"></a><span><code class="code">HOSTFILE</code><a class="copiable-link" href="#index-HOSTFILE"> &para;</a></span></dt> +<dd><p>Contains the name of a file in the same format as <samp class="file">/etc/hosts</samp> that should be read when the shell needs to complete a hostname. The list of possible hostname completions may be changed while the shell is running; the next time hostname completion is attempted after the value is changed, Bash adds the contents of the new file to the existing list. -If <code>HOSTFILE</code> is set, but has no value, or does not name a readable file, +If <code class="env">HOSTFILE</code> is set, but has no value, or does not name a readable file, Bash attempts to read -<samp>/etc/hosts</samp> to obtain the list of possible hostname completions. -When <code>HOSTFILE</code> is unset, the hostname list is cleared. +<samp class="file">/etc/hosts</samp> to obtain the list of possible hostname completions. +When <code class="env">HOSTFILE</code> is unset, the hostname list is cleared. </p> </dd> -<dt id='index-HOSTNAME'><span><code>HOSTNAME</code><a href='#index-HOSTNAME' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-HOSTNAME"></a><span><code class="code">HOSTNAME</code><a class="copiable-link" href="#index-HOSTNAME"> &para;</a></span></dt> <dd><p>The name of the current host. </p> </dd> -<dt id='index-HOSTTYPE'><span><code>HOSTTYPE</code><a href='#index-HOSTTYPE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-HOSTTYPE"></a><span><code class="code">HOSTTYPE</code><a class="copiable-link" href="#index-HOSTTYPE"> &para;</a></span></dt> <dd><p>A string describing the machine Bash is running on. </p> </dd> -<dt id='index-IGNOREEOF'><span><code>IGNOREEOF</code><a href='#index-IGNOREEOF' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Controls the action of the shell on receipt of an <code>EOF</code> character +<dt><a id="index-IGNOREEOF"></a><span><code class="code">IGNOREEOF</code><a class="copiable-link" href="#index-IGNOREEOF"> &para;</a></span></dt> +<dd><p>Controls the action of the shell on receipt of an <code class="code">EOF</code> character as the sole input. If set, the value denotes the number -of consecutive <code>EOF</code> characters that can be read as the +of consecutive <code class="code">EOF</code> characters that can be read as the first character on an input line before the shell will exit. If the variable exists but does not have a numeric value, or has no value, then the default is 10. -If the variable does not exist, then <code>EOF</code> signifies the end of +If the variable does not exist, then <code class="code">EOF</code> signifies the end of input to the shell. This is only in effect for interactive shells. </p> </dd> -<dt id='index-INPUTRC'><span><code>INPUTRC</code><a href='#index-INPUTRC' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-INPUTRC"></a><span><code class="code">INPUTRC</code><a class="copiable-link" href="#index-INPUTRC"> &para;</a></span></dt> <dd><p>The name of the Readline initialization file, overriding the default -of <samp>~/.inputrc</samp>. +of <samp class="file">~/.inputrc</samp>. </p> </dd> -<dt id='index-INSIDE_005fEMACS'><span><code>INSIDE_EMACS</code><a href='#index-INSIDE_005fEMACS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-INSIDE_005fEMACS"></a><span><code class="code">INSIDE_EMACS</code><a class="copiable-link" href="#index-INSIDE_005fEMACS"> &para;</a></span></dt> <dd><p>If Bash finds this variable in the environment when the shell starts, it assumes that the shell is running in an Emacs shell buffer -and may disable line editing depending on the value of <code>TERM</code>. +and may disable line editing depending on the value of <code class="env">TERM</code>. </p> </dd> -<dt id='index-LANG-1'><span><code>LANG</code><a href='#index-LANG-1' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-LANG-1"></a><span><code class="code">LANG</code><a class="copiable-link" href="#index-LANG-1"> &para;</a></span></dt> <dd><p>Used to determine the locale category for any category not specifically -selected with a variable starting with <code>LC_</code>. +selected with a variable starting with <code class="code">LC_</code>. </p> </dd> -<dt id='index-LC_005fALL'><span><code>LC_ALL</code><a href='#index-LC_005fALL' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>This variable overrides the value of <code>LANG</code> and any other -<code>LC_</code> variable specifying a locale category. +<dt><a id="index-LC_005fALL"></a><span><code class="code">LC_ALL</code><a class="copiable-link" href="#index-LC_005fALL"> &para;</a></span></dt> +<dd><p>This variable overrides the value of <code class="env">LANG</code> and any other +<code class="code">LC_</code> variable specifying a locale category. </p> </dd> -<dt id='index-LC_005fCOLLATE'><span><code>LC_COLLATE</code><a href='#index-LC_005fCOLLATE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-LC_005fCOLLATE"></a><span><code class="code">LC_COLLATE</code><a class="copiable-link" href="#index-LC_005fCOLLATE"> &para;</a></span></dt> <dd><p>This variable determines the collation order used when sorting the results of filename expansion, and determines the behavior of range expressions, equivalence classes, and collating sequences within filename expansion and pattern matching -(see <a href="#Filename-Expansion">Filename Expansion</a>). +(see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>). </p> </dd> -<dt id='index-LC_005fCTYPE'><span><code>LC_CTYPE</code><a href='#index-LC_005fCTYPE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-LC_005fCTYPE"></a><span><code class="code">LC_CTYPE</code><a class="copiable-link" href="#index-LC_005fCTYPE"> &para;</a></span></dt> <dd><p>This variable determines the interpretation of characters and the behavior of character classes within filename expansion and pattern -matching (see <a href="#Filename-Expansion">Filename Expansion</a>). +matching (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>). </p> </dd> -<dt id='index-LC_005fMESSAGES-1'><span><code>LC_MESSAGES</code><a href='#index-LC_005fMESSAGES-1' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-LC_005fMESSAGES-1"></a><span><code class="code">LC_MESSAGES</code><a class="copiable-link" href="#index-LC_005fMESSAGES-1"> &para;</a></span></dt> <dd><p>This variable determines the locale used to translate double-quoted -strings preceded by a &lsquo;<samp>$</samp>&rsquo; (see <a href="#Locale-Translation">Locale-Specific Translation</a>). +strings preceded by a &lsquo;<samp class="samp">$</samp>&rsquo; (see <a class="pxref" href="#Locale-Translation">Locale-Specific Translation</a>). </p> </dd> -<dt id='index-LC_005fNUMERIC'><span><code>LC_NUMERIC</code><a href='#index-LC_005fNUMERIC' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-LC_005fNUMERIC"></a><span><code class="code">LC_NUMERIC</code><a class="copiable-link" href="#index-LC_005fNUMERIC"> &para;</a></span></dt> <dd><p>This variable determines the locale category used for number formatting. </p> </dd> -<dt id='index-LC_005fTIME'><span><code>LC_TIME</code><a href='#index-LC_005fTIME' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-LC_005fTIME"></a><span><code class="code">LC_TIME</code><a class="copiable-link" href="#index-LC_005fTIME"> &para;</a></span></dt> <dd><p>This variable determines the locale category used for data and time formatting. </p> </dd> -<dt id='index-LINENO'><span><code>LINENO</code><a href='#index-LINENO' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-LINENO"></a><span><code class="code">LINENO</code><a class="copiable-link" href="#index-LINENO"> &para;</a></span></dt> <dd><p>The line number in the script or shell function currently executing. -If <code>LINENO</code> +If <code class="env">LINENO</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-LINES'><span><code>LINES</code><a href='#index-LINES' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Used by the <code>select</code> command to determine the column length +<dt><a id="index-LINES"></a><span><code class="code">LINES</code><a class="copiable-link" href="#index-LINES"> &para;</a></span></dt> +<dd><p>Used by the <code class="code">select</code> command to determine the column length for printing selection lists. -Automatically set if the <code>checkwinsize</code> option is enabled -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), or in an interactive shell upon receipt of a -<code>SIGWINCH</code>. +Automatically set if the <code class="code">checkwinsize</code> option is enabled +(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), or in an interactive shell upon receipt of a +<code class="code">SIGWINCH</code>. </p> </dd> -<dt id='index-MACHTYPE'><span><code>MACHTYPE</code><a href='#index-MACHTYPE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-MACHTYPE"></a><span><code class="code">MACHTYPE</code><a class="copiable-link" href="#index-MACHTYPE"> &para;</a></span></dt> <dd><p>A string that fully describes the system type on which Bash -is executing, in the standard <small>GNU</small> <var>cpu-company-system</var> format. +is executing, in the standard <small class="sc">GNU</small> <var class="var">cpu-company-system</var> format. </p> </dd> -<dt id='index-MAILCHECK'><span><code>MAILCHECK</code><a href='#index-MAILCHECK' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-MAILCHECK"></a><span><code class="code">MAILCHECK</code><a class="copiable-link" href="#index-MAILCHECK"> &para;</a></span></dt> <dd><p>How often (in seconds) that the shell should check for mail in the -files specified in the <code>MAILPATH</code> or <code>MAIL</code> variables. +files specified in the <code class="env">MAILPATH</code> or <code class="env">MAIL</code> variables. The default is 60 seconds. When it is time to check for mail, the shell does so before displaying the primary prompt. If this variable is unset, or set to a value that is not a number greater than or equal to zero, the shell disables mail checking. </p> </dd> -<dt id='index-MAPFILE'><span><code>MAPFILE</code><a href='#index-MAPFILE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-MAPFILE"></a><span><code class="code">MAPFILE</code><a class="copiable-link" href="#index-MAPFILE"> &para;</a></span></dt> <dd><p>An array variable created to hold the text read by the -<code>mapfile</code> builtin when no variable name is supplied. +<code class="code">mapfile</code> builtin when no variable name is supplied. </p> </dd> -<dt id='index-OLDPWD'><span><code>OLDPWD</code><a href='#index-OLDPWD' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The previous working directory as set by the <code>cd</code> builtin. +<dt><a id="index-OLDPWD"></a><span><code class="code">OLDPWD</code><a class="copiable-link" href="#index-OLDPWD"> &para;</a></span></dt> +<dd><p>The previous working directory as set by the <code class="code">cd</code> builtin. </p> </dd> -<dt id='index-OPTERR'><span><code>OPTERR</code><a href='#index-OPTERR' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-OPTERR"></a><span><code class="code">OPTERR</code><a class="copiable-link" href="#index-OPTERR"> &para;</a></span></dt> <dd><p>If set to the value 1, Bash displays error messages -generated by the <code>getopts</code> builtin command. +generated by the <code class="code">getopts</code> builtin command. </p> </dd> -<dt id='index-OSTYPE'><span><code>OSTYPE</code><a href='#index-OSTYPE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-OSTYPE"></a><span><code class="code">OSTYPE</code><a class="copiable-link" href="#index-OSTYPE"> &para;</a></span></dt> <dd><p>A string describing the operating system Bash is running on. </p> </dd> -<dt id='index-PIPESTATUS'><span><code>PIPESTATUS</code><a href='#index-PIPESTATUS' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>An array variable (see <a href="#Arrays">Arrays</a>) +<dt><a id="index-PIPESTATUS"></a><span><code class="code">PIPESTATUS</code><a class="copiable-link" href="#index-PIPESTATUS"> &para;</a></span></dt> +<dd><p>An array variable (see <a class="pxref" href="#Arrays">Arrays</a>) containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command). </p> </dd> -<dt id='index-POSIXLY_005fCORRECT'><span><code>POSIXLY_CORRECT</code><a href='#index-POSIXLY_005fCORRECT' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-POSIXLY_005fCORRECT"></a><span><code class="code">POSIXLY_CORRECT</code><a class="copiable-link" href="#index-POSIXLY_005fCORRECT"> &para;</a></span></dt> <dd><p>If this variable is in the environment when Bash starts, the shell -enters <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>) before reading the -startup files, as if the <samp>--posix</samp> invocation option had been supplied. -If it is set while the shell is running, Bash enables <small>POSIX</small> mode, +enters <small class="sc">POSIX</small> mode (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>) before reading the +startup files, as if the <samp class="option">--posix</samp> invocation option had been supplied. +If it is set while the shell is running, Bash enables <small class="sc">POSIX</small> mode, as if the command </p><div class="example"> -<pre class="example"><code>set -o posix</code> +<pre class="example-preformatted"><code class="code">set -o posix</code> </pre></div> <p>had been executed. -When the shell enters <small>POSIX</small> mode, it sets this variable if it was +When the shell enters <small class="sc">POSIX</small> mode, it sets this variable if it was not already set. </p> </dd> -<dt id='index-PPID'><span><code>PPID</code><a href='#index-PPID' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The process <small>ID</small> of the shell&rsquo;s parent process. This variable +<dt><a id="index-PPID"></a><span><code class="code">PPID</code><a class="copiable-link" href="#index-PPID"> &para;</a></span></dt> +<dd><p>The process <small class="sc">ID</small> of the shell&rsquo;s parent process. This variable is readonly. </p> </dd> -<dt id='index-PROMPT_005fCOMMAND'><span><code>PROMPT_COMMAND</code><a href='#index-PROMPT_005fCOMMAND' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-PROMPT_005fCOMMAND"></a><span><code class="code">PROMPT_COMMAND</code><a class="copiable-link" href="#index-PROMPT_005fCOMMAND"> &para;</a></span></dt> <dd><p>If this variable is set, and is an array, the value of each set element is interpreted as a command to execute -before printing the primary prompt (<code>$PS1</code>). +before printing the primary prompt (<code class="env">$PS1</code>). If this is set but not an array variable, its value is used as a command to execute instead. </p> </dd> -<dt id='index-PROMPT_005fDIRTRIM'><span><code>PROMPT_DIRTRIM</code><a href='#index-PROMPT_005fDIRTRIM' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-PROMPT_005fDIRTRIM"></a><span><code class="code">PROMPT_DIRTRIM</code><a class="copiable-link" href="#index-PROMPT_005fDIRTRIM"> &para;</a></span></dt> <dd><p>If set to a number greater than zero, the value is used as the number of -trailing directory components to retain when expanding the <code>\w</code> and -<code>\W</code> prompt string escapes (see <a href="#Controlling-the-Prompt">Controlling the Prompt</a>). +trailing directory components to retain when expanding the <code class="code">\w</code> and +<code class="code">\W</code> prompt string escapes (see <a class="pxref" href="#Controlling-the-Prompt">Controlling the Prompt</a>). Characters removed are replaced with an ellipsis. </p> </dd> -<dt id='index-PS0'><span><code>PS0</code><a href='#index-PS0' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The value of this parameter is expanded like <code>PS1</code> +<dt><a id="index-PS0"></a><span><code class="code">PS0</code><a class="copiable-link" href="#index-PS0"> &para;</a></span></dt> +<dd><p>The value of this parameter is expanded like <code class="env">PS1</code> and displayed by interactive shells after reading a command and before the command is executed. </p> </dd> -<dt id='index-PS3'><span><code>PS3</code><a href='#index-PS3' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-PS3"></a><span><code class="code">PS3</code><a class="copiable-link" href="#index-PS3"> &para;</a></span></dt> <dd><p>The value of this variable is used as the prompt for the -<code>select</code> command. If this variable is not set, the -<code>select</code> command prompts with &lsquo;<samp>#? </samp>&rsquo; +<code class="code">select</code> command. If this variable is not set, the +<code class="code">select</code> command prompts with &lsquo;<samp class="samp">#? </samp>&rsquo; </p> </dd> -<dt id='index-PS4'><span><code>PS4</code><a href='#index-PS4' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The value of this parameter is expanded like <code>PS1</code> +<dt><a id="index-PS4"></a><span><code class="code">PS4</code><a class="copiable-link" href="#index-PS4"> &para;</a></span></dt> +<dd><p>The value of this parameter is expanded like <code class="env">PS1</code> and the expanded value is the prompt printed before the command line -is echoed when the <samp>-x</samp> option is set (see <a href="#The-Set-Builtin">The Set Builtin</a>). +is echoed when the <samp class="option">-x</samp> option is set (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). The first character of the expanded value is replicated multiple times, as necessary, to indicate multiple levels of indirection. -The default is &lsquo;<samp>+ </samp>&rsquo;. +The default is &lsquo;<samp class="samp">+ </samp>&rsquo;. </p> </dd> -<dt id='index-PWD'><span><code>PWD</code><a href='#index-PWD' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The current working directory as set by the <code>cd</code> builtin. +<dt><a id="index-PWD"></a><span><code class="code">PWD</code><a class="copiable-link" href="#index-PWD"> &para;</a></span></dt> +<dd><p>The current working directory as set by the <code class="code">cd</code> builtin. </p> </dd> -<dt id='index-RANDOM'><span><code>RANDOM</code><a href='#index-RANDOM' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-RANDOM"></a><span><code class="code">RANDOM</code><a class="copiable-link" href="#index-RANDOM"> &para;</a></span></dt> <dd><p>Each time this parameter is referenced, it expands to a random integer between 0 and 32767. Assigning a value to this variable seeds the random number generator. -If <code>RANDOM</code> +If <code class="env">RANDOM</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-READLINE_005fARGUMENT'><span><code>READLINE_ARGUMENT</code><a href='#index-READLINE_005fARGUMENT' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-READLINE_005fARGUMENT"></a><span><code class="code">READLINE_ARGUMENT</code><a class="copiable-link" href="#index-READLINE_005fARGUMENT"> &para;</a></span></dt> <dd><p>Any numeric argument given to a Readline command that was defined using -&lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtin Commands</a> +&lsquo;<samp class="samp">bind -x</samp>&rsquo; (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a> when it was invoked. </p> </dd> -<dt id='index-READLINE_005fLINE'><span><code>READLINE_LINE</code><a href='#index-READLINE_005fLINE' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-READLINE_005fLINE"></a><span><code class="code">READLINE_LINE</code><a class="copiable-link" href="#index-READLINE_005fLINE"> &para;</a></span></dt> <dd><p>The contents of the Readline line buffer, for use -with &lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +with &lsquo;<samp class="samp">bind -x</samp>&rsquo; (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). </p> </dd> -<dt id='index-READLINE_005fMARK'><span><code>READLINE_MARK</code><a href='#index-READLINE_005fMARK' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The position of the <em>mark</em> (saved insertion point) in the +<dt><a id="index-READLINE_005fMARK"></a><span><code class="code">READLINE_MARK</code><a class="copiable-link" href="#index-READLINE_005fMARK"> &para;</a></span></dt> +<dd><p>The position of the <em class="dfn">mark</em> (saved insertion point) in the Readline line buffer, for use -with &lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +with &lsquo;<samp class="samp">bind -x</samp>&rsquo; (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). The characters between the insertion point and the mark are often -called the <em>region</em>. +called the <em class="dfn">region</em>. </p> </dd> -<dt id='index-READLINE_005fPOINT'><span><code>READLINE_POINT</code><a href='#index-READLINE_005fPOINT' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-READLINE_005fPOINT"></a><span><code class="code">READLINE_POINT</code><a class="copiable-link" href="#index-READLINE_005fPOINT"> &para;</a></span></dt> <dd><p>The position of the insertion point in the Readline line buffer, for use -with &lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +with &lsquo;<samp class="samp">bind -x</samp>&rsquo; (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). </p> </dd> -<dt id='index-REPLY'><span><code>REPLY</code><a href='#index-REPLY' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The default variable for the <code>read</code> builtin. +<dt><a id="index-REPLY"></a><span><code class="code">REPLY</code><a class="copiable-link" href="#index-REPLY"> &para;</a></span></dt> +<dd><p>The default variable for the <code class="code">read</code> builtin. </p> </dd> -<dt id='index-SECONDS'><span><code>SECONDS</code><a href='#index-SECONDS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-SECONDS"></a><span><code class="code">SECONDS</code><a class="copiable-link" href="#index-SECONDS"> &para;</a></span></dt> <dd><p>This variable expands to the number of seconds since the shell was started. Assignment to this variable resets the count to the value assigned, and the expanded value becomes the value assigned plus the number of seconds since the assignment. The number of seconds at shell invocation and the current time are always determined by querying the system clock. -If <code>SECONDS</code> +If <code class="env">SECONDS</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-SHELL'><span><code>SHELL</code><a href='#index-SHELL' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-SHELL"></a><span><code class="code">SHELL</code><a class="copiable-link" href="#index-SHELL"> &para;</a></span></dt> <dd><p>This environment variable expands to the full pathname to the shell. If it is not set when the shell starts, Bash assigns to it the full pathname of the current user&rsquo;s login shell. </p> </dd> -<dt id='index-SHELLOPTS'><span><code>SHELLOPTS</code><a href='#index-SHELLOPTS' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-SHELLOPTS"></a><span><code class="code">SHELLOPTS</code><a class="copiable-link" href="#index-SHELLOPTS"> &para;</a></span></dt> <dd><p>A colon-separated list of enabled shell options. Each word in -the list is a valid argument for the <samp>-o</samp> option to the -<code>set</code> builtin command (see <a href="#The-Set-Builtin">The Set Builtin</a>). -The options appearing in <code>SHELLOPTS</code> are those reported -as &lsquo;<samp>on</samp>&rsquo; by &lsquo;<samp>set -o</samp>&rsquo;. +the list is a valid argument for the <samp class="option">-o</samp> option to the +<code class="code">set</code> builtin command (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). +The options appearing in <code class="env">SHELLOPTS</code> are those reported +as &lsquo;<samp class="samp">on</samp>&rsquo; by &lsquo;<samp class="samp">set -o</samp>&rsquo;. If this variable is in the environment when Bash starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly. </p> </dd> -<dt id='index-SHLVL'><span><code>SHLVL</code><a href='#index-SHLVL' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-SHLVL"></a><span><code class="code">SHLVL</code><a class="copiable-link" href="#index-SHLVL"> &para;</a></span></dt> <dd><p>Incremented by one each time a new instance of Bash is started. This is intended to be a count of how deeply your Bash shells are nested. </p> </dd> -<dt id='index-SRANDOM'><span><code>SRANDOM</code><a href='#index-SRANDOM' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-SRANDOM"></a><span><code class="code">SRANDOM</code><a class="copiable-link" href="#index-SRANDOM"> &para;</a></span></dt> <dd><p>This variable expands to a 32-bit pseudo-random number each time it is referenced. The random number generator is not linear on systems that -support <samp>/dev/urandom</samp> or <code>arc4random</code>, so each returned number +support <samp class="file">/dev/urandom</samp> or <code class="code">arc4random</code>, so each returned number has no relationship to the numbers preceding it. The random number generator cannot be seeded, so assignments to this variable have no effect. -If <code>SRANDOM</code> +If <code class="env">SRANDOM</code> is unset, it loses its special properties, even if it is subsequently reset. </p> </dd> -<dt id='index-TIMEFORMAT'><span><code>TIMEFORMAT</code><a href='#index-TIMEFORMAT' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-TIMEFORMAT"></a><span><code class="code">TIMEFORMAT</code><a class="copiable-link" href="#index-TIMEFORMAT"> &para;</a></span></dt> <dd><p>The value of this parameter is used as a format string specifying -how the timing information for pipelines prefixed with the <code>time</code> +how the timing information for pipelines prefixed with the <code class="code">time</code> reserved word should be displayed. -The &lsquo;<samp>%</samp>&rsquo; character introduces an +The &lsquo;<samp class="samp">%</samp>&rsquo; character introduces an escape sequence that is expanded to a time value or other information. The escape sequences and their meanings are as -follows; the braces denote optional portions. +follows; the brackets denote optional portions. </p> -<dl compact="compact"> -<dt><span><code>%%</code></span></dt> -<dd><p>A literal &lsquo;<samp>%</samp>&rsquo;. +<dl class="table"> +<dt><code class="code">%%</code></dt> +<dd><p>A literal &lsquo;<samp class="samp">%</samp>&rsquo;. </p> </dd> -<dt><span><code>%[<var>p</var>][l]R</code></span></dt> +<dt><code class="code">%[<var class="var">p</var>][l]R</code></dt> <dd><p>The elapsed time in seconds. </p> </dd> -<dt><span><code>%[<var>p</var>][l]U</code></span></dt> +<dt><code class="code">%[<var class="var">p</var>][l]U</code></dt> <dd><p>The number of CPU seconds spent in user mode. </p> </dd> -<dt><span><code>%[<var>p</var>][l]S</code></span></dt> +<dt><code class="code">%[<var class="var">p</var>][l]S</code></dt> <dd><p>The number of CPU seconds spent in system mode. </p> </dd> -<dt><span><code>%P</code></span></dt> +<dt><code class="code">%P</code></dt> <dd><p>The CPU percentage, computed as (%U + %S) / %R. </p></dd> </dl> -<p>The optional <var>p</var> is a digit specifying the precision, the number of +<p>The optional <var class="var">p</var> is a digit specifying the precision, the number of fractional digits after a decimal point. A value of 0 causes no decimal point or fraction to be output. -At most three places after the decimal point may be specified; values -of <var>p</var> greater than 3 are changed to 3. -If <var>p</var> is not specified, the value 3 is used. +At most six places after the decimal point may be specified; +values of <var class="var">p</var> greater than 6 are changed to 6. +If <var class="var">p</var> is not specified, the value 3 is used. </p> -<p>The optional <code>l</code> specifies a longer format, including minutes, of -the form <var>MM</var>m<var>SS</var>.<var>FF</var>s. -The value of <var>p</var> determines whether or not the fraction is included. +<p>The optional <code class="code">l</code> specifies a longer format, including minutes, of +the form <var class="var">MM</var>m<var class="var">SS</var>.<var class="var">FF</var>s. +The value of <var class="var">p</var> determines whether or not the fraction is included. </p> <p>If this variable is not set, Bash acts as if it had the value </p><div class="example"> -<pre class="example"><code>$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'</code> +<pre class="example-preformatted"><code class="code">$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'</code> </pre></div> -<p>If the value is null, no timing information is displayed. +<p>If the value is null, Bash does not display any timing information. A trailing newline is added when the format string is displayed. </p> </dd> -<dt id='index-TMOUT'><span><code>TMOUT</code><a href='#index-TMOUT' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to a value greater than zero, <code>TMOUT</code> is treated as the -default timeout for the <code>read</code> builtin (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). -The <code>select</code> command (see <a href="#Conditional-Constructs">Conditional Constructs</a>) terminates -if input does not arrive after <code>TMOUT</code> seconds when input is coming +<dt><a id="index-TMOUT"></a><span><code class="code">TMOUT</code><a class="copiable-link" href="#index-TMOUT"> &para;</a></span></dt> +<dd><p>If set to a value greater than zero, <code class="code">TMOUT</code> is treated as the +default timeout for the <code class="code">read</code> builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). +The <code class="code">select</code> command (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>) terminates +if input does not arrive after <code class="code">TMOUT</code> seconds when input is coming from a terminal. </p> <p>In an interactive shell, the value is interpreted as @@ -7675,12 +7964,12 @@ terminates after waiting for that number of seconds if a complete line of input does not arrive. </p> </dd> -<dt id='index-TMPDIR'><span><code>TMPDIR</code><a href='#index-TMPDIR' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-TMPDIR"></a><span><code class="code">TMPDIR</code><a class="copiable-link" href="#index-TMPDIR"> &para;</a></span></dt> <dd><p>If set, Bash uses its value as the name of a directory in which Bash creates temporary files for the shell&rsquo;s use. </p> </dd> -<dt id='index-UID'><span><code>UID</code><a href='#index-UID' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-UID"></a><span><code class="code">UID</code><a class="copiable-link" href="#index-UID"> &para;</a></span></dt> <dd><p>The numeric real user id of the current user. This variable is readonly. </p> </dd> @@ -7689,17 +7978,17 @@ Bash creates temporary files for the shell&rsquo;s use. <hr> </div> </div> -<div class="chapter" id="Bash-Features"> -<div class="header"> +<div class="chapter-level-extent" id="Bash-Features"> +<div class="nav-panel"> <p> Next: <a href="#Job-Control" accesskey="n" rel="next">Job Control</a>, Previous: <a href="#Shell-Variables" accesskey="p" rel="prev">Shell Variables</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bash-Features-2"></span><h2 class="chapter">6 Bash Features</h2> +<h2 class="chapter" id="Bash-Features-2"><span>6 Bash Features<a class="copiable-link" href="#Bash-Features-2"> &para;</a></span></h2> <p>This chapter describes features unique to Bash. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Invoking-Bash" accesskey="1">Invoking Bash</a></li> <li><a href="#Bash-Startup-Files" accesskey="2">Bash Startup Files</a></li> <li><a href="#Interactive-Shells" accesskey="3">Interactive Shells</a></li> @@ -7710,141 +7999,142 @@ Next: <a href="#Job-Control" accesskey="n" rel="next">Job Control</a>, Previous: <li><a href="#The-Directory-Stack" accesskey="8">The Directory Stack</a></li> <li><a href="#Controlling-the-Prompt" accesskey="9">Controlling the Prompt</a></li> <li><a href="#The-Restricted-Shell">The Restricted Shell</a></li> -<li><a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></li> +<li><a href="#Bash-POSIX-Mode">Bash and POSIX</a></li> <li><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></li> </ul> <hr> -<div class="section" id="Invoking-Bash"> -<div class="header"> +<div class="section-level-extent" id="Invoking-Bash"> +<div class="nav-panel"> <p> Next: <a href="#Bash-Startup-Files" accesskey="n" rel="next">Bash Startup Files</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Invoking-Bash-1"></span><h3 class="section">6.1 Invoking Bash</h3> +<h3 class="section" id="Invoking-Bash-1"><span>6.1 Invoking Bash<a class="copiable-link" href="#Invoking-Bash-1"> &para;</a></span></h3> <div class="example"> -<pre class="example">bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o <var>option</var>] - [-O <var>shopt_option</var>] [<var>argument</var> &hellip;] -bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o <var>option</var>] - [-O <var>shopt_option</var>] -c <var>string</var> [<var>argument</var> &hellip;] -bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o <var>option</var>] - [-O <var>shopt_option</var>] [<var>argument</var> &hellip;] +<pre class="example-preformatted">bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o <var class="var">option</var>] + [-O <var class="var">shopt_option</var>] [<var class="var">argument</var> ...] +bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o <var class="var">option</var>] + [-O <var class="var">shopt_option</var>] -c <var class="var">string</var> [<var class="var">argument</var> ...] +bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o <var class="var">option</var>] + [-O <var class="var">shopt_option</var>] [<var class="var">argument</var> ...] </pre></div> -<p>All of the single-character options used with the <code>set</code> builtin -(see <a href="#The-Set-Builtin">The Set Builtin</a>) can be used as options when the shell is invoked. +<p>All of the single-character options used with the <code class="code">set</code> builtin +(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>) can be used as options when the shell is invoked. In addition, there are several multi-character options that you can use. These options must appear on the command line before the single-character options to be recognized. </p> -<dl compact="compact"> -<dt><span><code>--debugger</code></span></dt> +<dl class="table"> +<dt><code class="code">--debugger</code></dt> <dd><p>Arrange for the debugger profile to be executed before the shell -starts. Turns on extended debugging mode (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a> -for a description of the <code>extdebug</code> option to the <code>shopt</code> +starts. Turns on extended debugging mode (see <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a> +for a description of the <code class="code">extdebug</code> option to the <code class="code">shopt</code> builtin). </p> </dd> -<dt><span><code>--dump-po-strings</code></span></dt> -<dd><p>A list of all double-quoted strings preceded by &lsquo;<samp>$</samp>&rsquo; +<dt><code class="code">--dump-po-strings</code></dt> +<dd><p>A list of all double-quoted strings preceded by &lsquo;<samp class="samp">$</samp>&rsquo; is printed on the standard output -in the <small>GNU</small> <code>gettext</code> PO (portable object) file format. -Equivalent to <samp>-D</samp> except for the output format. +in the <small class="sc">GNU</small> <code class="code">gettext</code> PO (portable object) file format. +Equivalent to <samp class="option">-D</samp> except for the output format. </p> </dd> -<dt><span><code>--dump-strings</code></span></dt> -<dd><p>Equivalent to <samp>-D</samp>. +<dt><code class="code">--dump-strings</code></dt> +<dd><p>Equivalent to <samp class="option">-D</samp>. </p> </dd> -<dt><span><code>--help</code></span></dt> +<dt><code class="code">--help</code></dt> <dd><p>Display a usage message on standard output and exit successfully. </p> </dd> -<dt><span><code>--init-file <var>filename</var></code></span></dt> -<dt><span><code>--rcfile <var>filename</var></code></span></dt> -<dd><p>Execute commands from <var>filename</var> (instead of <samp>~/.bashrc</samp>) +<dt><code class="code">--init-file <var class="var">filename</var></code></dt> +<dt><code class="code">--rcfile <var class="var">filename</var></code></dt> +<dd><p>Execute commands from <var class="var">filename</var> (instead of <samp class="file">~/.bashrc</samp>) in an interactive shell. </p> </dd> -<dt><span><code>--login</code></span></dt> -<dd><p>Equivalent to <samp>-l</samp>. +<dt><code class="code">--login</code></dt> +<dd><p>Equivalent to <samp class="option">-l</samp>. </p> </dd> -<dt><span><code>--noediting</code></span></dt> -<dd><p>Do not use the <small>GNU</small> Readline library (see <a href="#Command-Line-Editing">Command Line Editing</a>) +<dt><code class="code">--noediting</code></dt> +<dd><p>Do not use the <small class="sc">GNU</small> Readline library (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>) to read command lines when the shell is interactive. </p> </dd> -<dt><span><code>--noprofile</code></span></dt> -<dd><p>Don&rsquo;t load the system-wide startup file <samp>/etc/profile</samp> +<dt><code class="code">--noprofile</code></dt> +<dd><p>Don&rsquo;t load the system-wide startup file <samp class="file">/etc/profile</samp> or any of the personal initialization files -<samp>~/.bash_profile</samp>, <samp>~/.bash_login</samp>, or <samp>~/.profile</samp> +<samp class="file">~/.bash_profile</samp>, <samp class="file">~/.bash_login</samp>, or <samp class="file">~/.profile</samp> when Bash is invoked as a login shell. </p> </dd> -<dt><span><code>--norc</code></span></dt> -<dd><p>Don&rsquo;t read the <samp>~/.bashrc</samp> initialization file in an +<dt><code class="code">--norc</code></dt> +<dd><p>Don&rsquo;t read the <samp class="file">~/.bashrc</samp> initialization file in an interactive shell. This is on by default if the shell is -invoked as <code>sh</code>. +invoked as <code class="code">sh</code>. </p> </dd> -<dt><span><code>--posix</code></span></dt> +<dt><code class="code">--posix</code></dt> <dd><p>Change the behavior of Bash where the default operation differs -from the <small>POSIX</small> standard to match the standard. This +from the <small class="sc">POSIX</small> standard to match the standard. This is intended to make Bash behave as a strict superset of that -standard. See <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>, for a description of the Bash -<small>POSIX</small> mode. +standard. See <a class="xref" href="#Bash-POSIX-Mode">Bash and POSIX</a>, for a description of the Bash +<small class="sc">POSIX</small> mode. </p> </dd> -<dt><span><code>--restricted</code></span></dt> -<dd><p>Make the shell a restricted shell (see <a href="#The-Restricted-Shell">The Restricted Shell</a>). +<dt><code class="code">--restricted</code></dt> +<dd><p>Equivalent to <samp class="option">-r</samp>. +Make the shell a restricted shell (see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>). </p> </dd> -<dt><span><code>--verbose</code></span></dt> -<dd><p>Equivalent to <samp>-v</samp>. Print shell input lines as they&rsquo;re read. +<dt><code class="code">--verbose</code></dt> +<dd><p>Equivalent to <samp class="option">-v</samp>. Print shell input lines as they&rsquo;re read. </p> </dd> -<dt><span><code>--version</code></span></dt> +<dt><code class="code">--version</code></dt> <dd><p>Show version information for this instance of Bash on the standard output and exit successfully. </p></dd> </dl> <p>There are several single-character options that may be supplied at -invocation which are not available with the <code>set</code> builtin. +invocation which are not available with the <code class="code">set</code> builtin. </p> -<dl compact="compact"> -<dt><span><code>-c</code></span></dt> +<dl class="table"> +<dt><code class="code">-c</code></dt> <dd><p>Read and execute commands from the first non-option argument -<var>command_string</var>, then exit. -If there are arguments after the <var>command_string</var>, -the first argument is assigned to <code>$0</code> +<var class="var">command_string</var>, then exit. +If there are arguments after the <var class="var">command_string</var>, +the first argument is assigned to <code class="code">$0</code> and any remaining arguments are assigned to the positional parameters. -The assignment to <code>$0</code> sets the name of the shell, which is used +The assignment to <code class="code">$0</code> sets the name of the shell, which is used in warning and error messages. </p> </dd> -<dt><span><code>-i</code></span></dt> +<dt><code class="code">-i</code></dt> <dd><p>Force the shell to run interactively. Interactive shells are -described in <a href="#Interactive-Shells">Interactive Shells</a>. +described in <a class="ref" href="#Interactive-Shells">Interactive Shells</a>. </p> </dd> -<dt><span><code>-l</code></span></dt> +<dt><code class="code">-l</code></dt> <dd><p>Make this shell act as if it had been directly invoked by login. When the shell is interactive, this is equivalent to starting a -login shell with &lsquo;<samp>exec -l bash</samp>&rsquo;. +login shell with &lsquo;<samp class="samp">exec -l bash</samp>&rsquo;. When the shell is not interactive, the login shell startup files will be executed. -&lsquo;<samp>exec bash -l</samp>&rsquo; or &lsquo;<samp>exec bash --login</samp>&rsquo; +&lsquo;<samp class="samp">exec bash -l</samp>&rsquo; or &lsquo;<samp class="samp">exec bash --login</samp>&rsquo; will replace the current shell with a Bash login shell. -See <a href="#Bash-Startup-Files">Bash Startup Files</a>, for a description of the special behavior +See <a class="xref" href="#Bash-Startup-Files">Bash Startup Files</a>, for a description of the special behavior of a login shell. </p> </dd> -<dt><span><code>-r</code></span></dt> -<dd><p>Make the shell a restricted shell (see <a href="#The-Restricted-Shell">The Restricted Shell</a>). +<dt><code class="code">-r</code></dt> +<dd><p>Make the shell a restricted shell (see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>). </p> </dd> -<dt><span><code>-s</code></span></dt> +<dt><code class="code">-s</code></dt> <dd><p>If this option is present, or if no arguments remain after option processing, then commands are read from the standard input. This option allows the positional parameters to be set @@ -7852,50 +8142,57 @@ when invoking an interactive shell or when reading input through a pipe. </p> </dd> -<dt><span><code>-D</code></span></dt> -<dd><p>A list of all double-quoted strings preceded by &lsquo;<samp>$</samp>&rsquo; +<dt><code class="code">-D</code></dt> +<dd><p>A list of all double-quoted strings preceded by &lsquo;<samp class="samp">$</samp>&rsquo; is printed on the standard output. These are the strings that are subject to language translation when the current locale -is not <code>C</code> or <code>POSIX</code> (see <a href="#Locale-Translation">Locale-Specific Translation</a>). -This implies the <samp>-n</samp> option; no commands will be executed. -</p> -</dd> -<dt><span><code>[-+]O [<var>shopt_option</var>]</code></span></dt> -<dd><p><var>shopt_option</var> is one of the shell options accepted by the -<code>shopt</code> builtin (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>). -If <var>shopt_option</var> is present, <samp>-O</samp> sets the value of that option; -<samp>+O</samp> unsets it. -If <var>shopt_option</var> is not supplied, the names and values of the shell -options accepted by <code>shopt</code> are printed on the standard output. -If the invocation option is <samp>+O</samp>, the output is displayed in a format +is not <code class="code">C</code> or <code class="code">POSIX</code> (see <a class="pxref" href="#Locale-Translation">Locale-Specific Translation</a>). +This implies the <samp class="option">-n</samp> option; no commands will be executed. +</p> +</dd> +<dt><code class="code">[-+]O [<var class="var">shopt_option</var>]</code></dt> +<dd><p><var class="var">shopt_option</var> is one of the shell options accepted by the +<code class="code">shopt</code> builtin (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>). +If <var class="var">shopt_option</var> is present, <samp class="option">-O</samp> sets the value of that option; +<samp class="option">+O</samp> unsets it. +If <var class="var">shopt_option</var> is not supplied, the names and values of the shell +options accepted by <code class="code">shopt</code> are printed on the standard output. +If the invocation option is <samp class="option">+O</samp>, the output is displayed in a format that may be reused as input. </p> </dd> -<dt><span><code>--</code></span></dt> -<dd><p>A <code>--</code> signals the end of options and disables further option +<dt><code class="code">--</code></dt> +<dd><p>A <code class="code">--</code> signals the end of options and disables further option processing. -Any arguments after the <code>--</code> are treated as filenames and arguments. -</p></dd> +Any arguments after the <code class="code">--</code> +are treated as a shell script filename (see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>) +and arguments passed to that script. +</p> +</dd> +<dt><code class="code">-</code></dt> +<dd><p>Equivalent to <code class="code">--</code>. +</p> +</dd> </dl> -<span id="index-login-shell"></span> -<p>A <em>login</em> shell is one whose first character of argument zero is -&lsquo;<samp>-</samp>&rsquo;, or one invoked with the <samp>--login</samp> option. +<a class="index-entry-id" id="index-login-shell"></a> +<p>A <em class="emph">login</em> shell is one whose first character of argument zero is +&lsquo;<samp class="samp">-</samp>&rsquo;, or one invoked with the <samp class="option">--login</samp> option. </p> -<span id="index-interactive-shell"></span> -<p>An <em>interactive</em> shell is one started without non-option arguments, -unless <samp>-s</samp> is specified, -without specifying the <samp>-c</samp> option, and whose input and output are both -connected to terminals (as determined by <code>isatty(3)</code>), or one -started with the <samp>-i</samp> option. See <a href="#Interactive-Shells">Interactive Shells</a>, for more +<a class="index-entry-id" id="index-interactive-shell"></a> +<p>An <em class="emph">interactive</em> shell is one started without non-option arguments, +unless <samp class="option">-s</samp> is specified, +without specifying the <samp class="option">-c</samp> option, and whose input and output are both +connected to terminals (as determined by <code class="code">isatty(3)</code>), or one +started with the <samp class="option">-i</samp> option. See <a class="xref" href="#Interactive-Shells">Interactive Shells</a>, for more information. </p> <p>If arguments remain after option processing, and neither the -<samp>-c</samp> nor the <samp>-s</samp> +<samp class="option">-c</samp> nor the <samp class="option">-s</samp> option has been supplied, the first argument is assumed to -be the name of a file containing shell commands (see <a href="#Shell-Scripts">Shell Scripts</a>). -When Bash is invoked in this fashion, <code>$0</code> +be the name of a file containing shell commands (see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>). +When Bash is invoked in this fashion, <code class="code">$0</code> is set to the name of the file, and the positional parameters are set to the remaining arguments. Bash reads and executes commands from this file, then exits. @@ -7904,194 +8201,194 @@ in the script. If no commands are executed, the exit status is 0. </p> <hr> </div> -<div class="section" id="Bash-Startup-Files"> -<div class="header"> +<div class="section-level-extent" id="Bash-Startup-Files"> +<div class="nav-panel"> <p> Next: <a href="#Interactive-Shells" accesskey="n" rel="next">Interactive Shells</a>, Previous: <a href="#Invoking-Bash" accesskey="p" rel="prev">Invoking Bash</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bash-Startup-Files-1"></span><h3 class="section">6.2 Bash Startup Files</h3> -<span id="index-startup-files"></span> +<h3 class="section" id="Bash-Startup-Files-1"><span>6.2 Bash Startup Files<a class="copiable-link" href="#Bash-Startup-Files-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-startup-files"></a> <p>This section describes how Bash executes its startup files. If any of the files exist but cannot be read, Bash reports an error. Tildes are expanded in filenames as described above under -Tilde Expansion (see <a href="#Tilde-Expansion">Tilde Expansion</a>). +Tilde Expansion (see <a class="pxref" href="#Tilde-Expansion">Tilde Expansion</a>). </p> -<p>Interactive shells are described in <a href="#Interactive-Shells">Interactive Shells</a>. +<p>Interactive shells are described in <a class="ref" href="#Interactive-Shells">Interactive Shells</a>. </p> -<span id="Invoked-as-an-interactive-login-shell_002c-or-with-_002d_002dlogin"></span><h4 class="subsubheading">Invoked as an interactive login shell, or with <samp>--login</samp></h4> +<h4 class="subsubheading" id="Invoked-as-an-interactive-login-shell_002c-or-with-_002d_002dlogin"><span>Invoked as an interactive login shell, or with <samp class="option">--login</samp><a class="copiable-link" href="#Invoked-as-an-interactive-login-shell_002c-or-with-_002d_002dlogin"> &para;</a></span></h4> <p>When Bash is invoked as an interactive login shell, or as a -non-interactive shell with the <samp>--login</samp> option, it first reads and -executes commands from the file <samp>/etc/profile</samp>, if that file exists. -After reading that file, it looks for <samp>~/.bash_profile</samp>, -<samp>~/.bash_login</samp>, and <samp>~/.profile</samp>, in that order, and reads +non-interactive shell with the <samp class="option">--login</samp> option, it first reads and +executes commands from the file <samp class="file">/etc/profile</samp>, if that file exists. +After reading that file, it looks for <samp class="file">~/.bash_profile</samp>, +<samp class="file">~/.bash_login</samp>, and <samp class="file">~/.profile</samp>, in that order, and reads and executes commands from the first one that exists and is readable. -The <samp>--noprofile</samp> option may be used when the shell is started to +The <samp class="option">--noprofile</samp> option may be used when the shell is started to inhibit this behavior. </p> <p>When an interactive login shell exits, -or a non-interactive login shell executes the <code>exit</code> builtin command, +or a non-interactive login shell executes the <code class="code">exit</code> builtin command, Bash reads and executes commands from -the file <samp>~/.bash_logout</samp>, if it exists. +the file <samp class="file">~/.bash_logout</samp>, if it exists. </p> -<span id="Invoked-as-an-interactive-non_002dlogin-shell"></span><h4 class="subsubheading">Invoked as an interactive non-login shell</h4> +<h4 class="subsubheading" id="Invoked-as-an-interactive-non_002dlogin-shell"><span>Invoked as an interactive non-login shell<a class="copiable-link" href="#Invoked-as-an-interactive-non_002dlogin-shell"> &para;</a></span></h4> <p>When an interactive shell that is not a login shell is started, Bash -reads and executes commands from <samp>~/.bashrc</samp>, if that file exists. -This may be inhibited by using the <samp>--norc</samp> option. -The <samp>--rcfile <var>file</var></samp> option will force Bash to read and -execute commands from <var>file</var> instead of <samp>~/.bashrc</samp>. +reads and executes commands from <samp class="file">~/.bashrc</samp>, if that file exists. +This may be inhibited by using the <samp class="option">--norc</samp> option. +The <samp class="option">--rcfile <var class="var">file</var></samp> option will force Bash to read and +execute commands from <var class="var">file</var> instead of <samp class="file">~/.bashrc</samp>. </p> -<p>So, typically, your <samp>~/.bash_profile</samp> contains the line +<p>So, typically, your <samp class="file">~/.bash_profile</samp> contains the line </p><div class="example"> -<pre class="example"><code>if [ -f ~/.bashrc ]; then . ~/.bashrc; fi</code> +<pre class="example-preformatted"><code class="code">if [ -f ~/.bashrc ]; then . ~/.bashrc; fi</code> </pre></div> <p>after (or before) any login-specific initializations. </p> -<span id="Invoked-non_002dinteractively"></span><h4 class="subsubheading">Invoked non-interactively</h4> +<h4 class="subsubheading" id="Invoked-non_002dinteractively"><span>Invoked non-interactively<a class="copiable-link" href="#Invoked-non_002dinteractively"> &para;</a></span></h4> <p>When Bash is started non-interactively, to run a shell script, -for example, it looks for the variable <code>BASH_ENV</code> in the environment, +for example, it looks for the variable <code class="env">BASH_ENV</code> in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed: </p><div class="example"> -<pre class="example"><code>if [ -n &quot;$BASH_ENV&quot; ]; then . &quot;$BASH_ENV&quot;; fi</code> +<pre class="example-preformatted"><code class="code">if [ -n &quot;$BASH_ENV&quot; ]; then . &quot;$BASH_ENV&quot;; fi</code> </pre></div> -<p>but the value of the <code>PATH</code> variable is not used to search for the +<p>but the value of the <code class="env">PATH</code> variable is not used to search for the filename. </p> <p>As noted above, if a non-interactive shell is invoked with the -<samp>--login</samp> option, Bash attempts to read and execute commands from the +<samp class="option">--login</samp> option, Bash attempts to read and execute commands from the login shell startup files. </p> -<span id="Invoked-with-name-sh"></span><h4 class="subsubheading">Invoked with name <code>sh</code></h4> +<h4 class="subsubheading" id="Invoked-with-name-sh"><span>Invoked with name <code class="code">sh</code><a class="copiable-link" href="#Invoked-with-name-sh"> &para;</a></span></h4> -<p>If Bash is invoked with the name <code>sh</code>, it tries to mimic the -startup behavior of historical versions of <code>sh</code> as closely as -possible, while conforming to the <small>POSIX</small> standard as well. +<p>If Bash is invoked with the name <code class="code">sh</code>, it tries to mimic the +startup behavior of historical versions of <code class="code">sh</code> as closely as +possible, while conforming to the <small class="sc">POSIX</small> standard as well. </p> <p>When invoked as an interactive login shell, or as a non-interactive -shell with the <samp>--login</samp> option, it first attempts to read -and execute commands from <samp>/etc/profile</samp> and <samp>~/.profile</samp>, in +shell with the <samp class="option">--login</samp> option, it first attempts to read +and execute commands from <samp class="file">/etc/profile</samp> and <samp class="file">~/.profile</samp>, in that order. -The <samp>--noprofile</samp> option may be used to inhibit this behavior. -When invoked as an interactive shell with the name <code>sh</code>, Bash -looks for the variable <code>ENV</code>, expands its value if it is defined, +The <samp class="option">--noprofile</samp> option may be used to inhibit this behavior. +When invoked as an interactive shell with the name <code class="code">sh</code>, Bash +looks for the variable <code class="env">ENV</code>, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. -Since a shell invoked as <code>sh</code> does not attempt to read and execute -commands from any other startup files, the <samp>--rcfile</samp> option has +Since a shell invoked as <code class="code">sh</code> does not attempt to read and execute +commands from any other startup files, the <samp class="option">--rcfile</samp> option has no effect. -A non-interactive shell invoked with the name <code>sh</code> does not attempt +A non-interactive shell invoked with the name <code class="code">sh</code> does not attempt to read any other startup files. </p> -<p>When invoked as <code>sh</code>, Bash enters <small>POSIX</small> mode after +<p>When invoked as <code class="code">sh</code>, Bash enters <small class="sc">POSIX</small> mode after the startup files are read. </p> -<span id="Invoked-in-POSIX-mode"></span><h4 class="subsubheading">Invoked in <small>POSIX</small> mode</h4> +<h4 class="subsubheading" id="Invoked-in-posix-mode"><span>Invoked in <small class="sc">POSIX</small> mode<a class="copiable-link" href="#Invoked-in-posix-mode"> &para;</a></span></h4> -<p>When Bash is started in <small>POSIX</small> mode, as with the -<samp>--posix</samp> command line option, it follows the <small>POSIX</small> standard +<p>When Bash is started in <small class="sc">POSIX</small> mode, as with the +<samp class="option">--posix</samp> command line option, it follows the <small class="sc">POSIX</small> standard for startup files. -In this mode, interactive shells expand the <code>ENV</code> variable +In this mode, interactive shells expand the <code class="env">ENV</code> variable and commands are read and executed from the file whose name is the expanded value. No other startup files are read. </p> -<span id="Invoked-by-remote-shell-daemon"></span><h4 class="subsubheading">Invoked by remote shell daemon</h4> +<h4 class="subsubheading" id="Invoked-by-remote-shell-daemon"><span>Invoked by remote shell daemon<a class="copiable-link" href="#Invoked-by-remote-shell-daemon"> &para;</a></span></h4> <p>Bash attempts to determine when it is being run with its standard input connected to a network connection, as when executed by -the historical remote shell daemon, usually <code>rshd</code>, -or the secure shell daemon <code>sshd</code>. +the historical remote shell daemon, usually <code class="code">rshd</code>, +or the secure shell daemon <code class="code">sshd</code>. If Bash determines it is being run non-interactively in this fashion, -it reads and executes commands from <samp>~/.bashrc</samp>, if that +it reads and executes commands from <samp class="file">~/.bashrc</samp>, if that file exists and is readable. -It will not do this if invoked as <code>sh</code>. -The <samp>--norc</samp> option may be used to inhibit this behavior, and the -<samp>--rcfile</samp> option may be used to force another file to be read, but -neither <code>rshd</code> nor <code>sshd</code> generally invoke the shell with those +It will not do this if invoked as <code class="code">sh</code>. +The <samp class="option">--norc</samp> option may be used to inhibit this behavior, and the +<samp class="option">--rcfile</samp> option may be used to force another file to be read, but +neither <code class="code">rshd</code> nor <code class="code">sshd</code> generally invoke the shell with those options or allow them to be specified. </p> -<span id="Invoked-with-unequal-effective-and-real-UID_002fGIDs"></span><h4 class="subsubheading">Invoked with unequal effective and real <small>UID/GID</small>s</h4> +<h4 class="subsubheading" id="Invoked-with-unequal-effective-and-real-uid_002fgids"><span>Invoked with unequal effective and real <small class="sc">UID/GID</small>s<a class="copiable-link" href="#Invoked-with-unequal-effective-and-real-uid_002fgids"> &para;</a></span></h4> <p>If Bash is started with the effective user (group) id not equal to the -real user (group) id, and the <samp>-p</samp> option is not supplied, no startup +real user (group) id, and the <samp class="option">-p</samp> option is not supplied, no startup files are read, shell functions are not inherited from the environment, -the <code>SHELLOPTS</code>, <code>BASHOPTS</code>, <code>CDPATH</code>, and <code>GLOBIGNORE</code> +the <code class="env">SHELLOPTS</code>, <code class="env">BASHOPTS</code>, <code class="env">CDPATH</code>, and <code class="env">GLOBIGNORE</code> variables, if they appear in the environment, are ignored, and the effective user id is set to the real user id. -If the <samp>-p</samp> option is supplied at invocation, the startup behavior is +If the <samp class="option">-p</samp> option is supplied at invocation, the startup behavior is the same, but the effective user id is not reset. </p> <hr> </div> -<div class="section" id="Interactive-Shells"> -<div class="header"> +<div class="section-level-extent" id="Interactive-Shells"> +<div class="nav-panel"> <p> Next: <a href="#Bash-Conditional-Expressions" accesskey="n" rel="next">Bash Conditional Expressions</a>, Previous: <a href="#Bash-Startup-Files" accesskey="p" rel="prev">Bash Startup Files</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Interactive-Shells-1"></span><h3 class="section">6.3 Interactive Shells</h3> -<span id="index-interactive-shell-1"></span> -<span id="index-shell_002c-interactive"></span> +<h3 class="section" id="Interactive-Shells-1"><span>6.3 Interactive Shells<a class="copiable-link" href="#Interactive-Shells-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-interactive-shell-1"></a> +<a class="index-entry-id" id="index-shell_002c-interactive"></a> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#What-is-an-Interactive-Shell_003f" accesskey="1">What is an Interactive Shell?</a></li> <li><a href="#Is-this-Shell-Interactive_003f" accesskey="2">Is this Shell Interactive?</a></li> <li><a href="#Interactive-Shell-Behavior" accesskey="3">Interactive Shell Behavior</a></li> </ul> <hr> -<div class="subsection" id="What-is-an-Interactive-Shell_003f"> -<div class="header"> +<div class="subsection-level-extent" id="What-is-an-Interactive-Shell_003f"> +<div class="nav-panel"> <p> Next: <a href="#Is-this-Shell-Interactive_003f" accesskey="n" rel="next">Is this Shell Interactive?</a>, Up: <a href="#Interactive-Shells" accesskey="u" rel="up">Interactive Shells</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="What-is-an-Interactive-Shell_003f-1"></span><h4 class="subsection">6.3.1 What is an Interactive Shell?</h4> +<h4 class="subsection" id="What-is-an-Interactive-Shell_003f-1"><span>6.3.1 What is an Interactive Shell?<a class="copiable-link" href="#What-is-an-Interactive-Shell_003f-1"> &para;</a></span></h4> <p>An interactive shell is one started without non-option arguments -(unless <samp>-s</samp> is specified) -and without specifying the <samp>-c</samp> option, +(unless <samp class="option">-s</samp> is specified) +and without specifying the <samp class="option">-c</samp> option, whose input and error output are both -connected to terminals (as determined by <code>isatty(3)</code>), -or one started with the <samp>-i</samp> option. +connected to terminals (as determined by <code class="code">isatty(3)</code>), +or one started with the <samp class="option">-i</samp> option. </p> <p>An interactive shell generally reads from and writes to a user&rsquo;s terminal. </p> -<p>The <samp>-s</samp> invocation option may be used to set the positional parameters +<p>The <samp class="option">-s</samp> invocation option may be used to set the positional parameters when an interactive shell is started. </p> <hr> </div> -<div class="subsection" id="Is-this-Shell-Interactive_003f"> -<div class="header"> +<div class="subsection-level-extent" id="Is-this-Shell-Interactive_003f"> +<div class="nav-panel"> <p> Next: <a href="#Interactive-Shell-Behavior" accesskey="n" rel="next">Interactive Shell Behavior</a>, Previous: <a href="#What-is-an-Interactive-Shell_003f" accesskey="p" rel="prev">What is an Interactive Shell?</a>, Up: <a href="#Interactive-Shells" accesskey="u" rel="up">Interactive Shells</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Is-this-Shell-Interactive_003f-1"></span><h4 class="subsection">6.3.2 Is this Shell Interactive?</h4> +<h4 class="subsection" id="Is-this-Shell-Interactive_003f-1"><span>6.3.2 Is this Shell Interactive?<a class="copiable-link" href="#Is-this-Shell-Interactive_003f-1"> &para;</a></span></h4> <p>To determine within a startup script whether or not Bash is running interactively, -test the value of the &lsquo;<samp>-</samp>&rsquo; special parameter. -It contains <code>i</code> when the shell is interactive. For example: +test the value of the &lsquo;<samp class="samp">-</samp>&rsquo; special parameter. +It contains <code class="code">i</code> when the shell is interactive. For example: </p> <div class="example"> -<pre class="example">case &quot;$-&quot; in +<pre class="example-preformatted">case &quot;$-&quot; in *i*) echo This shell is interactive ;; *) echo This shell is not interactive ;; esac </pre></div> <p>Alternatively, startup scripts may examine the variable -<code>PS1</code>; it is unset in non-interactive shells, and set in +<code class="env">PS1</code>; it is unset in non-interactive shells, and set in interactive shells. Thus: </p> <div class="example"> -<pre class="example">if [ -z &quot;$PS1&quot; ]; then +<pre class="example-preformatted">if [ -z &quot;$PS1&quot; ]; then echo This shell is not interactive else echo This shell is interactive @@ -8100,115 +8397,115 @@ fi <hr> </div> -<div class="subsection" id="Interactive-Shell-Behavior"> -<div class="header"> +<div class="subsection-level-extent" id="Interactive-Shell-Behavior"> +<div class="nav-panel"> <p> Previous: <a href="#Is-this-Shell-Interactive_003f" accesskey="p" rel="prev">Is this Shell Interactive?</a>, Up: <a href="#Interactive-Shells" accesskey="u" rel="up">Interactive Shells</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Interactive-Shell-Behavior-1"></span><h4 class="subsection">6.3.3 Interactive Shell Behavior</h4> +<h4 class="subsection" id="Interactive-Shell-Behavior-1"><span>6.3.3 Interactive Shell Behavior<a class="copiable-link" href="#Interactive-Shell-Behavior-1"> &para;</a></span></h4> <p>When the shell is running interactively, it changes its behavior in several ways. </p> -<ol> -<li> Startup files are read and executed as described in <a href="#Bash-Startup-Files">Bash Startup Files</a>. +<ol class="enumerate"> +<li> Startup files are read and executed as described in <a class="ref" href="#Bash-Startup-Files">Bash Startup Files</a>. -</li><li> Job Control (see <a href="#Job-Control">Job Control</a>) is enabled by default. When job +</li><li> Job Control (see <a class="pxref" href="#Job-Control">Job Control</a>) is enabled by default. When job control is in effect, Bash ignores the keyboard-generated job control -signals <code>SIGTTIN</code>, <code>SIGTTOU</code>, and <code>SIGTSTP</code>. +signals <code class="code">SIGTTIN</code>, <code class="code">SIGTTOU</code>, and <code class="code">SIGTSTP</code>. -</li><li> Bash expands and displays <code>PS1</code> before reading the first line -of a command, and expands and displays <code>PS2</code> before reading the +</li><li> Bash expands and displays <code class="env">PS1</code> before reading the first line +of a command, and expands and displays <code class="env">PS2</code> before reading the second and subsequent lines of a multi-line command. -Bash expands and displays <code>PS0</code> after it reads a command but before +Bash expands and displays <code class="env">PS0</code> after it reads a command but before executing it. -See <a href="#Controlling-the-Prompt">Controlling the Prompt</a>, for a complete list of prompt +See <a class="ref" href="#Controlling-the-Prompt">Controlling the Prompt</a>, for a complete list of prompt string escape sequences. -</li><li> Bash executes the values of the set elements of the <code>PROMPT_COMMAND</code> -array variable as commands before printing the primary prompt, <code>$PS1</code> -(see <a href="#Bash-Variables">Bash Variables</a>). +</li><li> Bash executes the values of the set elements of the <code class="env">PROMPT_COMMAND</code> +array variable as commands before printing the primary prompt, <code class="env">$PS1</code> +(see <a class="pxref" href="#Bash-Variables">Bash Variables</a>). -</li><li> Readline (see <a href="#Command-Line-Editing">Command Line Editing</a>) is used to read commands from +</li><li> Readline (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>) is used to read commands from the user&rsquo;s terminal. -</li><li> Bash inspects the value of the <code>ignoreeof</code> option to <code>set -o</code> -instead of exiting immediately when it receives an <code>EOF</code> on its -standard input when reading a command (see <a href="#The-Set-Builtin">The Set Builtin</a>). +</li><li> Bash inspects the value of the <code class="code">ignoreeof</code> option to <code class="code">set -o</code> +instead of exiting immediately when it receives an <code class="code">EOF</code> on its +standard input when reading a command (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). -</li><li> Command history (see <a href="#Bash-History-Facilities">Bash History Facilities</a>) -and history expansion (see <a href="#History-Interaction">History Expansion</a>) +</li><li> Command history (see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>) +and history expansion (see <a class="pxref" href="#History-Interaction">History Expansion</a>) are enabled by default. -Bash will save the command history to the file named by <code>$HISTFILE</code> +Bash will save the command history to the file named by <code class="env">$HISTFILE</code> when a shell with history enabled exits. -</li><li> Alias expansion (see <a href="#Aliases">Aliases</a>) is performed by default. +</li><li> Alias expansion (see <a class="pxref" href="#Aliases">Aliases</a>) is performed by default. -</li><li> In the absence of any traps, Bash ignores <code>SIGTERM</code> -(see <a href="#Signals">Signals</a>). +</li><li> In the absence of any traps, Bash ignores <code class="code">SIGTERM</code> +(see <a class="pxref" href="#Signals">Signals</a>). -</li><li> In the absence of any traps, <code>SIGINT</code> is caught and handled -(see <a href="#Signals">Signals</a>). -<code>SIGINT</code> will interrupt some shell builtins. +</li><li> In the absence of any traps, <code class="code">SIGINT</code> is caught and handled +(see <a class="pxref" href="#Signals">Signals</a>). +<code class="code">SIGINT</code> will interrupt some shell builtins. -</li><li> An interactive login shell sends a <code>SIGHUP</code> to all jobs on exit -if the <code>huponexit</code> shell option has been enabled (see <a href="#Signals">Signals</a>). +</li><li> An interactive login shell sends a <code class="code">SIGHUP</code> to all jobs on exit +if the <code class="code">huponexit</code> shell option has been enabled (see <a class="pxref" href="#Signals">Signals</a>). -</li><li> The <samp>-n</samp> invocation option is ignored, and &lsquo;<samp>set -n</samp>&rsquo; has -no effect (see <a href="#The-Set-Builtin">The Set Builtin</a>). +</li><li> The <samp class="option">-n</samp> invocation option is ignored, and &lsquo;<samp class="samp">set -n</samp>&rsquo; has +no effect (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). </li><li> Bash will check for mail periodically, depending on the values of the -<code>MAIL</code>, <code>MAILPATH</code>, and <code>MAILCHECK</code> shell variables -(see <a href="#Bash-Variables">Bash Variables</a>). +<code class="env">MAIL</code>, <code class="env">MAILPATH</code>, and <code class="env">MAILCHECK</code> shell variables +(see <a class="pxref" href="#Bash-Variables">Bash Variables</a>). </li><li> Expansion errors due to references to unbound shell variables after -&lsquo;<samp>set -u</samp>&rsquo; has been enabled will not cause the shell to exit -(see <a href="#The-Set-Builtin">The Set Builtin</a>). +&lsquo;<samp class="samp">set -u</samp>&rsquo; has been enabled will not cause the shell to exit +(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). -</li><li> The shell will not exit on expansion errors caused by <var>var</var> being unset -or null in <code>${<var>var</var>:?<var>word</var>}</code> expansions -(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +</li><li> The shell will not exit on expansion errors caused by <var class="var">var</var> being unset +or null in <code class="code">${<var class="var">var</var>:?<var class="var">word</var>}</code> expansions +(see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). </li><li> Redirection errors encountered by shell builtins will not cause the shell to exit. -</li><li> When running in <small>POSIX</small> mode, a special builtin returning an error -status will not cause the shell to exit (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>). +</li><li> When running in <small class="sc">POSIX</small> mode, a special builtin returning an error +status will not cause the shell to exit (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>). -</li><li> A failed <code>exec</code> will not cause the shell to exit -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +</li><li> A failed <code class="code">exec</code> will not cause the shell to exit +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). </li><li> Parser syntax errors will not cause the shell to exit. -</li><li> If the <code>cdspell</code> shell option is enabled, the shell will attempt -simple spelling correction for directory arguments to the <code>cd</code> -builtin (see the description of the <code>cdspell</code> -option to the <code>shopt</code> builtin in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>). -The <code>cdspell</code> option is only effective in interactive shells. +</li><li> If the <code class="code">cdspell</code> shell option is enabled, the shell will attempt +simple spelling correction for directory arguments to the <code class="code">cd</code> +builtin (see the description of the <code class="code">cdspell</code> +option to the <code class="code">shopt</code> builtin in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>). +The <code class="code">cdspell</code> option is only effective in interactive shells. -</li><li> The shell will check the value of the <code>TMOUT</code> variable and exit +</li><li> The shell will check the value of the <code class="env">TMOUT</code> variable and exit if a command is not read within the specified number of seconds after -printing <code>$PS1</code> (see <a href="#Bash-Variables">Bash Variables</a>). +printing <code class="env">$PS1</code> (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>). </li></ol> <hr> </div> </div> -<div class="section" id="Bash-Conditional-Expressions"> -<div class="header"> +<div class="section-level-extent" id="Bash-Conditional-Expressions"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Arithmetic" accesskey="n" rel="next">Shell Arithmetic</a>, Previous: <a href="#Interactive-Shells" accesskey="p" rel="prev">Interactive Shells</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bash-Conditional-Expressions-1"></span><h3 class="section">6.4 Bash Conditional Expressions</h3> -<span id="index-expressions_002c-conditional"></span> +<h3 class="section" id="Bash-Conditional-Expressions-1"><span>6.4 Bash Conditional Expressions<a class="copiable-link" href="#Bash-Conditional-Expressions-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-expressions_002c-conditional"></a> -<p>Conditional expressions are used by the <code>[[</code> compound command -(see <a href="#Conditional-Constructs">Conditional Constructs</a>) -and the <code>test</code> and <code>[</code> builtin commands -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). -The <code>test</code> -and <code>[</code> commands determine their behavior based on the number +<p>Conditional expressions are used by the <code class="code">[[</code> compound command +(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>) +and the <code class="code">test</code> and <code class="code">[</code> builtin commands +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +The <code class="code">test</code> +and <code class="code">[</code> commands determine their behavior based on the number of arguments; see the descriptions of those commands for any other command-specific actions. </p> @@ -8221,193 +8518,199 @@ expressions. If the operating system on which Bash is running provides these special files, Bash will use them; otherwise it will emulate them internally with this behavior: -If the <var>file</var> argument to one of the primaries is of the form -<samp>/dev/fd/<var>N</var></samp>, then file descriptor <var>N</var> is checked. -If the <var>file</var> argument to one of the primaries is one of -<samp>/dev/stdin</samp>, <samp>/dev/stdout</samp>, or <samp>/dev/stderr</samp>, file +If the <var class="var">file</var> argument to one of the primaries is of the form +<samp class="file">/dev/fd/<var class="var">N</var></samp>, then file descriptor <var class="var">N</var> is checked. +If the <var class="var">file</var> argument to one of the primaries is one of +<samp class="file">/dev/stdin</samp>, <samp class="file">/dev/stdout</samp>, or <samp class="file">/dev/stderr</samp>, file descriptor 0, 1, or 2, respectively, is checked. </p> -<p>When used with <code>[[</code>, the &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; operators sort +<p>When used with <code class="code">[[</code>, the &lsquo;<samp class="samp">&lt;</samp>&rsquo; and &lsquo;<samp class="samp">&gt;</samp>&rsquo; operators sort lexicographically using the current locale. -The <code>test</code> command uses ASCII ordering. +The <code class="code">test</code> command uses ASCII ordering. </p> <p>Unless otherwise specified, primaries that operate on files follow symbolic links and operate on the target of the link, rather than the link itself. </p> -<dl compact="compact"> -<dt><span><code>-a <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists. +<dl class="table"> +<dt><code class="code">-a <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists. </p> </dd> -<dt><span><code>-b <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is a block special file. +<dt><code class="code">-b <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is a block special file. </p> </dd> -<dt><span><code>-c <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is a character special file. +<dt><code class="code">-c <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is a character special file. </p> </dd> -<dt><span><code>-d <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is a directory. +<dt><code class="code">-d <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is a directory. </p> </dd> -<dt><span><code>-e <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists. +<dt><code class="code">-e <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists. </p> </dd> -<dt><span><code>-f <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is a regular file. +<dt><code class="code">-f <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is a regular file. </p> </dd> -<dt><span><code>-g <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and its set-group-id bit is set. +<dt><code class="code">-g <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and its set-group-id bit is set. </p> </dd> -<dt><span><code>-h <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is a symbolic link. +<dt><code class="code">-h <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is a symbolic link. </p> </dd> -<dt><span><code>-k <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and its &quot;sticky&quot; bit is set. +<dt><code class="code">-k <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and its &quot;sticky&quot; bit is set. </p> </dd> -<dt><span><code>-p <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is a named pipe (FIFO). +<dt><code class="code">-p <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is a named pipe (FIFO). </p> </dd> -<dt><span><code>-r <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is readable. +<dt><code class="code">-r <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is readable. </p> </dd> -<dt><span><code>-s <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and has a size greater than zero. +<dt><code class="code">-s <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and has a size greater than zero. </p> </dd> -<dt><span><code>-t <var>fd</var></code></span></dt> -<dd><p>True if file descriptor <var>fd</var> is open and refers to a terminal. +<dt><code class="code">-t <var class="var">fd</var></code></dt> +<dd><p>True if file descriptor <var class="var">fd</var> is open and refers to a terminal. </p> </dd> -<dt><span><code>-u <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and its set-user-id bit is set. +<dt><code class="code">-u <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and its set-user-id bit is set. </p> </dd> -<dt><span><code>-w <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is writable. +<dt><code class="code">-w <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is writable. </p> </dd> -<dt><span><code>-x <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is executable. +<dt><code class="code">-x <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is executable. </p> </dd> -<dt><span><code>-G <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is owned by the effective group id. +<dt><code class="code">-G <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is owned by the effective group id. </p> </dd> -<dt><span><code>-L <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is a symbolic link. +<dt><code class="code">-L <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is a symbolic link. </p> </dd> -<dt><span><code>-N <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and has been modified since it was last read. +<dt><code class="code">-N <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and has been modified since it was last read. </p> </dd> -<dt><span><code>-O <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is owned by the effective user id. +<dt><code class="code">-O <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is owned by the effective user id. </p> </dd> -<dt><span><code>-S <var>file</var></code></span></dt> -<dd><p>True if <var>file</var> exists and is a socket. +<dt><code class="code">-S <var class="var">file</var></code></dt> +<dd><p>True if <var class="var">file</var> exists and is a socket. </p> </dd> -<dt><span><code><var>file1</var> -ef <var>file2</var></code></span></dt> -<dd><p>True if <var>file1</var> and <var>file2</var> refer to the same device and +<dt><code class="code"><var class="var">file1</var> -ef <var class="var">file2</var></code></dt> +<dd><p>True if <var class="var">file1</var> and <var class="var">file2</var> refer to the same device and inode numbers. </p> </dd> -<dt><span><code><var>file1</var> -nt <var>file2</var></code></span></dt> -<dd><p>True if <var>file1</var> is newer (according to modification date) -than <var>file2</var>, or if <var>file1</var> exists and <var>file2</var> does not. +<dt><code class="code"><var class="var">file1</var> -nt <var class="var">file2</var></code></dt> +<dd><p>True if <var class="var">file1</var> is newer (according to modification date) +than <var class="var">file2</var>, or if <var class="var">file1</var> exists and <var class="var">file2</var> does not. </p> </dd> -<dt><span><code><var>file1</var> -ot <var>file2</var></code></span></dt> -<dd><p>True if <var>file1</var> is older than <var>file2</var>, -or if <var>file2</var> exists and <var>file1</var> does not. +<dt><code class="code"><var class="var">file1</var> -ot <var class="var">file2</var></code></dt> +<dd><p>True if <var class="var">file1</var> is older than <var class="var">file2</var>, +or if <var class="var">file2</var> exists and <var class="var">file1</var> does not. </p> </dd> -<dt><span><code>-o <var>optname</var></code></span></dt> -<dd><p>True if the shell option <var>optname</var> is enabled. -The list of options appears in the description of the <samp>-o</samp> -option to the <code>set</code> builtin (see <a href="#The-Set-Builtin">The Set Builtin</a>). +<dt><code class="code">-o <var class="var">optname</var></code></dt> +<dd><p>True if the shell option <var class="var">optname</var> is enabled. +The list of options appears in the description of the <samp class="option">-o</samp> +option to the <code class="code">set</code> builtin (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). </p> </dd> -<dt><span><code>-v <var>varname</var></code></span></dt> -<dd><p>True if the shell variable <var>varname</var> is set (has been assigned a value). +<dt><code class="code">-v <var class="var">varname</var></code></dt> +<dd><p>True if the shell variable <var class="var">varname</var> is set (has been assigned a value). +If <var class="var">varname</var> is an indexed +array variable name subscripted by &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, +this returns true if the array has any set elements. +If <var class="var">varname</var> is an associative +array variable name subscripted by &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, +this returns true if an element with that key is set. </p> </dd> -<dt><span><code>-R <var>varname</var></code></span></dt> -<dd><p>True if the shell variable <var>varname</var> is set and is a name reference. +<dt><code class="code">-R <var class="var">varname</var></code></dt> +<dd><p>True if the shell variable <var class="var">varname</var> is set and is a name reference. </p> </dd> -<dt><span><code>-z <var>string</var></code></span></dt> -<dd><p>True if the length of <var>string</var> is zero. +<dt><code class="code">-z <var class="var">string</var></code></dt> +<dd><p>True if the length of <var class="var">string</var> is zero. </p> </dd> -<dt><span><code>-n <var>string</var></code></span></dt> -<dt><span><code><var>string</var></code></span></dt> -<dd><p>True if the length of <var>string</var> is non-zero. +<dt><code class="code">-n <var class="var">string</var></code></dt> +<dt><code class="code"><var class="var">string</var></code></dt> +<dd><p>True if the length of <var class="var">string</var> is non-zero. </p> </dd> -<dt><span><code><var>string1</var> == <var>string2</var></code></span></dt> -<dt><span><code><var>string1</var> = <var>string2</var></code></span></dt> +<dt><code class="code"><var class="var">string1</var> == <var class="var">string2</var></code></dt> +<dt><code class="code"><var class="var">string1</var> = <var class="var">string2</var></code></dt> <dd><p>True if the strings are equal. -When used with the <code>[[</code> command, this performs pattern matching as -described above (see <a href="#Conditional-Constructs">Conditional Constructs</a>). +When used with the <code class="code">[[</code> command, this performs pattern matching as +described above (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>). </p> -<p>&lsquo;<samp>=</samp>&rsquo; should be used with the <code>test</code> command for <small>POSIX</small> conformance. +<p>&lsquo;<samp class="samp">=</samp>&rsquo; should be used with the <code class="code">test</code> command for <small class="sc">POSIX</small> conformance. </p> </dd> -<dt><span><code><var>string1</var> != <var>string2</var></code></span></dt> +<dt><code class="code"><var class="var">string1</var> != <var class="var">string2</var></code></dt> <dd><p>True if the strings are not equal. </p> </dd> -<dt><span><code><var>string1</var> &lt; <var>string2</var></code></span></dt> -<dd><p>True if <var>string1</var> sorts before <var>string2</var> lexicographically. +<dt><code class="code"><var class="var">string1</var> &lt; <var class="var">string2</var></code></dt> +<dd><p>True if <var class="var">string1</var> sorts before <var class="var">string2</var> lexicographically. </p> </dd> -<dt><span><code><var>string1</var> &gt; <var>string2</var></code></span></dt> -<dd><p>True if <var>string1</var> sorts after <var>string2</var> lexicographically. +<dt><code class="code"><var class="var">string1</var> &gt; <var class="var">string2</var></code></dt> +<dd><p>True if <var class="var">string1</var> sorts after <var class="var">string2</var> lexicographically. </p> </dd> -<dt><span><code><var>arg1</var> OP <var>arg2</var></code></span></dt> -<dd><p><code>OP</code> is one of -&lsquo;<samp>-eq</samp>&rsquo;, &lsquo;<samp>-ne</samp>&rsquo;, &lsquo;<samp>-lt</samp>&rsquo;, &lsquo;<samp>-le</samp>&rsquo;, &lsquo;<samp>-gt</samp>&rsquo;, or &lsquo;<samp>-ge</samp>&rsquo;. -These arithmetic binary operators return true if <var>arg1</var> +<dt><code class="code"><var class="var">arg1</var> OP <var class="var">arg2</var></code></dt> +<dd><p><code class="code">OP</code> is one of +&lsquo;<samp class="samp">-eq</samp>&rsquo;, &lsquo;<samp class="samp">-ne</samp>&rsquo;, &lsquo;<samp class="samp">-lt</samp>&rsquo;, &lsquo;<samp class="samp">-le</samp>&rsquo;, &lsquo;<samp class="samp">-gt</samp>&rsquo;, or &lsquo;<samp class="samp">-ge</samp>&rsquo;. +These arithmetic binary operators return true if <var class="var">arg1</var> is equal to, not equal to, less than, less than or equal to, -greater than, or greater than or equal to <var>arg2</var>, -respectively. <var>Arg1</var> and <var>arg2</var> +greater than, or greater than or equal to <var class="var">arg2</var>, +respectively. <var class="var">Arg1</var> and <var class="var">arg2</var> may be positive or negative integers. -When used with the <code>[[</code> command, <var>Arg1</var> and <var>Arg2</var> -are evaluated as arithmetic expressions (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>). +When used with the <code class="code">[[</code> command, <var class="var">Arg1</var> and <var class="var">Arg2</var> +are evaluated as arithmetic expressions (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>). </p></dd> </dl> <hr> </div> -<div class="section" id="Shell-Arithmetic"> -<div class="header"> +<div class="section-level-extent" id="Shell-Arithmetic"> +<div class="nav-panel"> <p> Next: <a href="#Aliases" accesskey="n" rel="next">Aliases</a>, Previous: <a href="#Bash-Conditional-Expressions" accesskey="p" rel="prev">Bash Conditional Expressions</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Arithmetic-1"></span><h3 class="section">6.5 Shell Arithmetic</h3> -<span id="index-arithmetic_002c-shell"></span> -<span id="index-shell-arithmetic"></span> -<span id="index-expressions_002c-arithmetic"></span> -<span id="index-evaluation_002c-arithmetic"></span> -<span id="index-arithmetic-evaluation"></span> +<h3 class="section" id="Shell-Arithmetic-1"><span>6.5 Shell Arithmetic<a class="copiable-link" href="#Shell-Arithmetic-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-arithmetic_002c-shell"></a> +<a class="index-entry-id" id="index-shell-arithmetic"></a> +<a class="index-entry-id" id="index-expressions_002c-arithmetic"></a> +<a class="index-entry-id" id="index-evaluation_002c-arithmetic"></a> +<a class="index-entry-id" id="index-arithmetic-evaluation"></a> <p>The shell allows arithmetic expressions to be evaluated, as one of -the shell expansions or by using the <code>((</code> compound command, the -<code>let</code> builtin, or the <samp>-i</samp> option to the <code>declare</code> builtin. +the shell expansions or by using the <code class="code">((</code> compound command, the +<code class="code">let</code> builtin, or the <samp class="option">-i</samp> option to the <code class="code">declare</code> builtin. </p> <p>Evaluation is done in fixed-width integers with no check for overflow, though division by 0 is trapped and flagged as an error. @@ -8417,76 +8720,83 @@ The following list of operators is grouped into levels of equal-precedence operators. The levels are listed in order of decreasing precedence. </p> -<dl compact="compact"> -<dt><span><code><var>id</var>++ <var>id</var>--</code></span></dt> +<dl class="table"> +<dd><a class="index-entry-id" id="index-arithmetic-operators"></a> +<a class="index-entry-id" id="index-unary-arithmetic-operators"></a> +<a class="index-entry-id" id="index-binary-arithmetic-operators"></a> +<a class="index-entry-id" id="index-conditional-arithmetic-operator"></a> +<a class="index-entry-id" id="index-bitwise-arithmetic-operators"></a> + +</dd> +<dt><code class="code"><var class="var">id</var>++ <var class="var">id</var>--</code></dt> <dd><p>variable post-increment and post-decrement </p> </dd> -<dt><span><code>++<var>id</var> --<var>id</var></code></span></dt> +<dt><code class="code">++<var class="var">id</var> --<var class="var">id</var></code></dt> <dd><p>variable pre-increment and pre-decrement </p> </dd> -<dt><span><code>- +</code></span></dt> +<dt><code class="code">- +</code></dt> <dd><p>unary minus and plus </p> </dd> -<dt><span><code>! ~</code></span></dt> +<dt><code class="code">! ~</code></dt> <dd><p>logical and bitwise negation </p> </dd> -<dt><span><code>**</code></span></dt> +<dt><code class="code">**</code></dt> <dd><p>exponentiation </p> </dd> -<dt><span><code>* / %</code></span></dt> +<dt><code class="code">* / %</code></dt> <dd><p>multiplication, division, remainder </p> </dd> -<dt><span><code>+ -</code></span></dt> +<dt><code class="code">+ -</code></dt> <dd><p>addition, subtraction </p> </dd> -<dt><span><code>&lt;&lt; &gt;&gt;</code></span></dt> +<dt><code class="code">&lt;&lt; &gt;&gt;</code></dt> <dd><p>left and right bitwise shifts </p> </dd> -<dt><span><code>&lt;= &gt;= &lt; &gt;</code></span></dt> +<dt><code class="code">&lt;= &gt;= &lt; &gt;</code></dt> <dd><p>comparison </p> </dd> -<dt><span><code>== !=</code></span></dt> +<dt><code class="code">== !=</code></dt> <dd><p>equality and inequality </p> </dd> -<dt><span><code>&amp;</code></span></dt> +<dt><code class="code">&amp;</code></dt> <dd><p>bitwise AND </p> </dd> -<dt><span><code>^</code></span></dt> +<dt><code class="code">^</code></dt> <dd><p>bitwise exclusive OR </p> </dd> -<dt><span><code>|</code></span></dt> +<dt><code class="code">|</code></dt> <dd><p>bitwise OR </p> </dd> -<dt><span><code>&amp;&amp;</code></span></dt> +<dt><code class="code">&amp;&amp;</code></dt> <dd><p>logical AND </p> </dd> -<dt><span><code>||</code></span></dt> +<dt><code class="code">||</code></dt> <dd><p>logical OR </p> </dd> -<dt><span><code>expr ? expr : expr</code></span></dt> +<dt><code class="code">expr ? if-true-expr : if-false-expr</code></dt> <dd><p>conditional operator </p> </dd> -<dt><span><code>= *= /= %= += -= &lt;&lt;= &gt;&gt;= &amp;= ^= |=</code></span></dt> +<dt><code class="code">= *= /= %= += -= &lt;&lt;= &gt;&gt;= &amp;= ^= |=</code></dt> <dd><p>assignment </p> </dd> -<dt><span><code>expr1 , expr2</code></span></dt> +<dt><code class="code">expr1 , expr2</code></dt> <dd><p>comma </p></dd> </dl> @@ -8499,24 +8809,24 @@ A shell variable that is null or unset evaluates to 0 when referenced by name without using the parameter expansion syntax. The value of a variable is evaluated as an arithmetic expression when it is referenced, or when a variable which has been given the -<code>integer</code> attribute using &lsquo;<samp>declare -i</samp>&rsquo; is assigned a value. +<code class="code">integer</code> attribute using &lsquo;<samp class="samp">declare -i</samp>&rsquo; is assigned a value. A null value evaluates to 0. -A shell variable need not have its <code>integer</code> attribute turned on +A shell variable need not have its <code class="code">integer</code> attribute turned on to be used in an expression. </p> <p>Integer constants follow the C language definition, without suffixes or character constants. Constants with a leading 0 are interpreted as octal numbers. -A leading &lsquo;<samp>0x</samp>&rsquo; or &lsquo;<samp>0X</samp>&rsquo; denotes hexadecimal. Otherwise, -numbers take the form [<var>base</var><code>#</code>]<var>n</var>, where the optional <var>base</var> +A leading &lsquo;<samp class="samp">0x</samp>&rsquo; or &lsquo;<samp class="samp">0X</samp>&rsquo; denotes hexadecimal. Otherwise, +numbers take the form [<var class="var">base</var><code class="code">#</code>]<var class="var">n</var>, where the optional <var class="var">base</var> is a decimal number between 2 and 64 representing the arithmetic -base, and <var>n</var> is a number in that base. -If <var>base</var><code>#</code> is omitted, then base 10 is used. -When specifying <var>n</var>, +base, and <var class="var">n</var> is a number in that base. +If <var class="var">base</var><code class="code">#</code> is omitted, then base 10 is used. +When specifying <var class="var">n</var>, if a non-digit is required, the digits greater than 9 are represented by the lowercase letters, -the uppercase letters, &lsquo;<samp>@</samp>&rsquo;, and &lsquo;<samp>_</samp>&rsquo;, in that order. -If <var>base</var> is less than or equal to 36, lowercase and uppercase +the uppercase letters, &lsquo;<samp class="samp">@</samp>&rsquo;, and &lsquo;<samp class="samp">_</samp>&rsquo;, in that order. +If <var class="var">base</var> is less than or equal to 36, lowercase and uppercase letters may be used interchangeably to represent numbers between 10 and 35. </p> @@ -8526,23 +8836,29 @@ rules above. </p> <hr> </div> -<div class="section" id="Aliases"> -<div class="header"> +<div class="section-level-extent" id="Aliases"> +<div class="nav-panel"> <p> Next: <a href="#Arrays" accesskey="n" rel="next">Arrays</a>, Previous: <a href="#Shell-Arithmetic" accesskey="p" rel="prev">Shell Arithmetic</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Aliases-1"></span><h3 class="section">6.6 Aliases</h3> -<span id="index-alias-expansion"></span> +<h3 class="section" id="Aliases-1"><span>6.6 Aliases<a class="copiable-link" href="#Aliases-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-alias-expansion"></a> -<p><em>Aliases</em> allow a string to be substituted for a word when it is used -as the first word of a simple command. -The shell maintains a list of aliases that may be set and unset with -the <code>alias</code> and <code>unalias</code> builtin commands. -</p> -<p>The first word of each simple command, if unquoted, is checked to see -if it has an alias. -If so, that word is replaced by the text of the alias. -The characters &lsquo;<samp>/</samp>&rsquo;, &lsquo;<samp>$</samp>&rsquo;, &lsquo;<samp>`</samp>&rsquo;, &lsquo;<samp>=</samp>&rsquo; and any of the +<p><em class="dfn">Aliases</em> allow a string to be substituted for a word that is in +a position in the input where it can be the first word of a simple +command. +Aliases have names and corresponding values that are set +and unset using the <code class="code">alias</code> and <code class="code">unalias</code> builtin commands +(see <a class="pxref" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>). +</p> +<p>If the shell reads an unquoted word in the right position, it checks +the word to see if it matches an alias name. If it matches, the shell +replaces the word with the alias value, and reads that value as if it +had been read instead of the word. +The shell doesn&rsquo;t look at any characters following the word before +attempting alias substitution. +</p> +<p>The characters &lsquo;<samp class="samp">/</samp>&rsquo;, &lsquo;<samp class="samp">$</samp>&rsquo;, &lsquo;<samp class="samp">`</samp>&rsquo;, &lsquo;<samp class="samp">=</samp>&rsquo; and any of the shell metacharacters or quoting characters listed above may not appear in an alias name. The replacement text may contain any valid @@ -8550,24 +8866,25 @@ shell input, including shell metacharacters. The first word of the replacement text is tested for aliases, but a word that is identical to an alias being expanded is not expanded a second time. -This means that one may alias <code>ls</code> to <code>&quot;ls -F&quot;</code>, +This means that one may alias <code class="code">ls</code> to <code class="code">&quot;ls -F&quot;</code>, for instance, and Bash does not try to recursively expand the replacement text. -If the last character of the alias value is a -<code>blank</code>, then the next command word following the +</p> +<p>If the last character of the alias value is a +<code class="code">blank</code>, then the next command word following the alias is also checked for alias expansion. </p> -<p>Aliases are created and listed with the <code>alias</code> -command, and removed with the <code>unalias</code> command. +<p>Aliases are created and listed with the <code class="code">alias</code> +command, and removed with the <code class="code">unalias</code> command. </p> <p>There is no mechanism for using arguments in the replacement text, -as in <code>csh</code>. +as in <code class="code">csh</code>. If arguments are needed, use a shell function -(see <a href="#Shell-Functions">Shell Functions</a>). +(see <a class="pxref" href="#Shell-Functions">Shell Functions</a>) instead. </p> <p>Aliases are not expanded when the shell is not interactive, -unless the <code>expand_aliases</code> shell option is set using -<code>shopt</code> (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>). +unless the <code class="code">expand_aliases</code> shell option is set using +<code class="code">shopt</code> (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>). </p> <p>The rules concerning the definition and use of aliases are somewhat confusing. Bash @@ -8586,124 +8903,130 @@ not when the function is executed, because a function definition is itself a command. As a consequence, aliases defined in a function are not available until after that function is executed. To be safe, always put -alias definitions on a separate line, and do not use <code>alias</code> +alias definitions on a separate line, and do not use <code class="code">alias</code> in compound commands. </p> <p>For almost every purpose, shell functions are preferred over aliases. </p> <hr> </div> -<div class="section" id="Arrays"> -<div class="header"> +<div class="section-level-extent" id="Arrays"> +<div class="nav-panel"> <p> Next: <a href="#The-Directory-Stack" accesskey="n" rel="next">The Directory Stack</a>, Previous: <a href="#Aliases" accesskey="p" rel="prev">Aliases</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Arrays-1"></span><h3 class="section">6.7 Arrays</h3> -<span id="index-arrays"></span> +<h3 class="section" id="Arrays-1"><span>6.7 Arrays<a class="copiable-link" href="#Arrays-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-arrays"></a> <p>Bash provides one-dimensional indexed and associative array variables. Any variable may be used as an indexed array; -the <code>declare</code> builtin will explicitly declare an array. +the <code class="code">declare</code> builtin will explicitly declare an array. There is no maximum limit on the size of an array, nor any requirement that members be indexed or assigned contiguously. Indexed arrays are referenced using integers (including arithmetic -expressions (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>)) and are zero-based; +expressions (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>)) and are zero-based; associative arrays use arbitrary strings. Unless otherwise noted, indexed array indices must be non-negative integers. </p> <p>An indexed array is created automatically if any variable is assigned to using the syntax </p><div class="example"> -<pre class="example"><var>name</var>[<var>subscript</var>]=<var>value</var> +<pre class="example-preformatted"><var class="var">name</var>[<var class="var">subscript</var>]=<var class="var">value</var> </pre></div> -<p>The <var>subscript</var> +<p>The <var class="var">subscript</var> is treated as an arithmetic expression that must evaluate to a number. To explicitly declare an array, use </p><div class="example"> -<pre class="example">declare -a <var>name</var> +<pre class="example-preformatted">declare -a <var class="var">name</var> </pre></div> <p>The syntax </p><div class="example"> -<pre class="example">declare -a <var>name</var>[<var>subscript</var>] +<pre class="example-preformatted">declare -a <var class="var">name</var>[<var class="var">subscript</var>] </pre></div> -<p>is also accepted; the <var>subscript</var> is ignored. +<p>is also accepted; the <var class="var">subscript</var> is ignored. </p> <p>Associative arrays are created using </p><div class="example"> -<pre class="example">declare -A <var>name</var> +<pre class="example-preformatted">declare -A <var class="var">name</var> </pre></div> <p>Attributes may be -specified for an array variable using the <code>declare</code> and -<code>readonly</code> builtins. Each attribute applies to all members of +specified for an array variable using the <code class="code">declare</code> and +<code class="code">readonly</code> builtins. Each attribute applies to all members of an array. </p> <p>Arrays are assigned to using compound assignments of the form </p><div class="example"> -<pre class="example"><var>name</var>=(<var>value1</var> <var>value2</var> &hellip; ) +<pre class="example-preformatted"><var class="var">name</var>=(<var class="var">value1</var> <var class="var">value2</var> ... ) </pre></div> <p>where each -<var>value</var> may be of the form <code>[<var>subscript</var>]=</code><var>string</var>. -Indexed array assignments do not require anything but <var>string</var>. +<var class="var">value</var> may be of the form <code class="code">[<var class="var">subscript</var>]=</code><var class="var">string</var>. +Indexed array assignments do not require anything but <var class="var">string</var>. When assigning to indexed arrays, if the optional subscript is supplied, that index is assigned to; otherwise the index of the element assigned is the last index assigned to by the statement plus one. Indexing starts at zero. </p> -<p>Each <var>value</var> in the list undergoes all the shell expansions -described above (see <a href="#Shell-Expansions">Shell Expansions</a>). +<p>Each <var class="var">value</var> in the list undergoes the shell expansions +described above (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>), +but <var class="var">value</var>s that are valid variable assignments +including the brackets and subscript do not undergo +brace expansion and word splitting, as with individual +variable assignments. </p> <p>When assigning to an associative array, the words in a compound assignment may be either assignment statements, for which the subscript is required, or a list of words that is interpreted as a sequence of alternating keys and values: -<var>name</var>=(<var>key1</var> <var>value1</var> <var>key2</var> <var>value2</var> &hellip; ). +<var class="var">name</var>=(<var class="var">key1</var> <var class="var">value1</var> <var class="var">key2</var> <var class="var">value2</var> &hellip; ). These are treated identically to -<var>name</var>=( [<var>key1</var>]=<var>value1</var> [<var>key2</var>]=<var>value2</var> &hellip; ). +<var class="var">name</var>=( [<var class="var">key1</var>]=<var class="var">value1</var> [<var class="var">key2</var>]=<var class="var">value2</var> &hellip; ). The first word in the list determines how the remaining words are interpreted; all assignments in a list must be of the same type. When using key/value pairs, the keys may not be missing or empty; a final missing value is treated like the empty string. </p> -<p>This syntax is also accepted by the <code>declare</code> +<p>This syntax is also accepted by the <code class="code">declare</code> builtin. Individual array elements may be assigned to using the -<code><var>name</var>[<var>subscript</var>]=<var>value</var></code> syntax introduced above. +<code class="code"><var class="var">name</var>[<var class="var">subscript</var>]=<var class="var">value</var></code> syntax introduced above. </p> -<p>When assigning to an indexed array, if <var>name</var> +<p>When assigning to an indexed array, if <var class="var">name</var> is subscripted by a negative number, that number is interpreted as relative to one greater than the maximum index of -<var>name</var>, so negative indices count back from the end of the +<var class="var">name</var>, so negative indices count back from the end of the array, and an index of -1 references the last element. </p> -<p>The &lsquo;<samp>+=</samp>&rsquo; operator will append to an array variable when assigning -using the compound assignment syntax; see <a href="#Shell-Parameters">Shell Parameters</a> above. +<p>The &lsquo;<samp class="samp">+=</samp>&rsquo; operator will append to an array variable when assigning +using the compound assignment syntax; see <a class="ref" href="#Shell-Parameters">Shell Parameters</a> above. </p> <p>Any element of an array may be referenced using -<code>${<var>name</var>[<var>subscript</var>]}</code>. +<code class="code">${<var class="var">name</var>[<var class="var">subscript</var>]}</code>. The braces are required to avoid conflicts with the shell&rsquo;s filename expansion operators. If the -<var>subscript</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, the word expands to all members -of the array <var>name</var>. These subscripts differ only when the word +<var class="var">subscript</var> is &lsquo;<samp class="samp">@</samp>&rsquo; or &lsquo;<samp class="samp">*</samp>&rsquo;, the word expands to all members +of the array <var class="var">name</var>, unless otherwise noted in the description of a +builtin or word expansion. +These subscripts differ only when the word appears within double quotes. If the word is double-quoted, -<code>${<var>name</var>[*]}</code> expands to a single word with +<code class="code">${<var class="var">name</var>[*]}</code> expands to a single word with the value of each array member separated by the first character of the -<code>IFS</code> variable, and <code>${<var>name</var>[@]}</code> expands each element of -<var>name</var> to a separate word. When there are no array members, -<code>${<var>name</var>[@]}</code> expands to nothing. +<code class="env">IFS</code> variable, and <code class="code">${<var class="var">name</var>[@]}</code> expands each element of +<var class="var">name</var> to a separate word. When there are no array members, +<code class="code">${<var class="var">name</var>[@]}</code> expands to nothing. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. This is analogous to the -expansion of the special parameters &lsquo;<samp>@</samp>&rsquo; and &lsquo;<samp>*</samp>&rsquo;. -<code>${#<var>name</var>[<var>subscript</var>]}</code> expands to the length of -<code>${<var>name</var>[<var>subscript</var>]}</code>. -If <var>subscript</var> is &lsquo;<samp>@</samp>&rsquo; or -&lsquo;<samp>*</samp>&rsquo;, the expansion is the number of elements in the array. -If the <var>subscript</var> +expansion of the special parameters &lsquo;<samp class="samp">@</samp>&rsquo; and &lsquo;<samp class="samp">*</samp>&rsquo;. +<code class="code">${#<var class="var">name</var>[<var class="var">subscript</var>]}</code> expands to the length of +<code class="code">${<var class="var">name</var>[<var class="var">subscript</var>]}</code>. +If <var class="var">subscript</var> is &lsquo;<samp class="samp">@</samp>&rsquo; or +&lsquo;<samp class="samp">*</samp>&rsquo;, the expansion is the number of elements in the array. +If the <var class="var">subscript</var> used to reference an element of an indexed array evaluates to a number less than zero, it is interpreted as relative to one greater than the maximum index of the array, @@ -8712,214 +9035,213 @@ and an index of -1 refers to the last element. </p> <p>Referencing an array variable without a subscript is equivalent to referencing with a subscript of 0. -Any reference to a variable using a valid subscript is legal, and -<code>bash</code> will create an array if necessary. +Any reference to a variable using a valid subscript is valid, and +Bash will create an array if necessary. </p> <p>An array variable is considered set if a subscript has been assigned a value. The null string is a valid value. </p> <p>It is possible to obtain the keys (indices) of an array as well as the values. -${!<var>name</var>[@]} and ${!<var>name</var>[*]} expand to the indices -assigned in array variable <var>name</var>. +${!<var class="var">name</var>[@]} and ${!<var class="var">name</var>[*]} expand to the indices +assigned in array variable <var class="var">name</var>. The treatment when in double quotes is similar to the expansion of the -special parameters &lsquo;<samp>@</samp>&rsquo; and &lsquo;<samp>*</samp>&rsquo; within double quotes. +special parameters &lsquo;<samp class="samp">@</samp>&rsquo; and &lsquo;<samp class="samp">*</samp>&rsquo; within double quotes. </p> -<p>The <code>unset</code> builtin is used to destroy arrays. -<code>unset <var>name</var>[<var>subscript</var>]</code> -destroys the array element at index <var>subscript</var>. +<p>The <code class="code">unset</code> builtin is used to destroy arrays. +<code class="code">unset <var class="var">name</var>[<var class="var">subscript</var>]</code> +destroys the array element at index <var class="var">subscript</var>. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable does not unset the variable. -<code>unset <var>name</var></code>, where <var>name</var> is an array, removes the +<code class="code">unset <var class="var">name</var></code>, where <var class="var">name</var> is an array, removes the entire array. -<code>unset <var>name</var>[<var>subscript</var>]</code> behaves differently +<code class="code">unset <var class="var">name</var>[<var class="var">subscript</var>]</code> behaves differently depending on the array type when given a -subscript of &lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo;. -When <var>name</var> is an associative array, it removes the element with key -&lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo;. -If <var>name</var> is an indexed array, <code>unset</code> removes all of the elements, +subscript of &lsquo;<samp class="samp">*</samp>&rsquo; or &lsquo;<samp class="samp">@</samp>&rsquo;. +When <var class="var">name</var> is an associative array, it removes the element with key +&lsquo;<samp class="samp">*</samp>&rsquo; or &lsquo;<samp class="samp">@</samp>&rsquo;. +If <var class="var">name</var> is an indexed array, <code class="code">unset</code> removes all of the elements, but does not remove the array itself. </p> <p>When using a variable name with a subscript as an argument to a command, -such as with <code>unset</code>, without using the word expansion syntax +such as with <code class="code">unset</code>, without using the word expansion syntax described above, the argument is subject to the shell&rsquo;s filename expansion. If filename expansion is not desired, the argument should be quoted. </p> -<p>The <code>declare</code>, <code>local</code>, and <code>readonly</code> -builtins each accept a <samp>-a</samp> option to specify an indexed -array and a <samp>-A</samp> option to specify an associative array. -If both options are supplied, <samp>-A</samp> takes precedence. -The <code>read</code> builtin accepts a <samp>-a</samp> +<p>The <code class="code">declare</code>, <code class="code">local</code>, and <code class="code">readonly</code> +builtins each accept a <samp class="option">-a</samp> option to specify an indexed +array and a <samp class="option">-A</samp> option to specify an associative array. +If both options are supplied, <samp class="option">-A</samp> takes precedence. +The <code class="code">read</code> builtin accepts a <samp class="option">-a</samp> option to assign a list of words read from the standard input to an array, and can read values from the standard input into -individual array elements. The <code>set</code> and <code>declare</code> +individual array elements. The <code class="code">set</code> and <code class="code">declare</code> builtins display array values in a way that allows them to be reused as input. </p> <hr> </div> -<div class="section" id="The-Directory-Stack"> -<div class="header"> +<div class="section-level-extent" id="The-Directory-Stack"> +<div class="nav-panel"> <p> Next: <a href="#Controlling-the-Prompt" accesskey="n" rel="next">Controlling the Prompt</a>, Previous: <a href="#Arrays" accesskey="p" rel="prev">Arrays</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="The-Directory-Stack-1"></span><h3 class="section">6.8 The Directory Stack</h3> -<span id="index-directory-stack"></span> +<h3 class="section" id="The-Directory-Stack-1"><span>6.8 The Directory Stack<a class="copiable-link" href="#The-Directory-Stack-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-directory-stack"></a> <p>The directory stack is a list of recently-visited directories. The -<code>pushd</code> builtin adds directories to the stack as it changes -the current directory, and the <code>popd</code> builtin removes specified +<code class="code">pushd</code> builtin adds directories to the stack as it changes +the current directory, and the <code class="code">popd</code> builtin removes specified directories from the stack and changes the current directory to -the directory removed. The <code>dirs</code> builtin displays the contents +the directory removed. The <code class="code">dirs</code> builtin displays the contents of the directory stack. The current directory is always the &quot;top&quot; of the directory stack. </p> <p>The contents of the directory stack are also visible -as the value of the <code>DIRSTACK</code> shell variable. +as the value of the <code class="env">DIRSTACK</code> shell variable. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Directory-Stack-Builtins" accesskey="1">Directory Stack Builtins</a></li> </ul> <hr> -<div class="subsection" id="Directory-Stack-Builtins"> -<div class="header"> +<div class="subsection-level-extent" id="Directory-Stack-Builtins"> +<div class="nav-panel"> <p> Up: <a href="#The-Directory-Stack" accesskey="u" rel="up">The Directory Stack</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Directory-Stack-Builtins-1"></span><h4 class="subsection">6.8.1 Directory Stack Builtins</h4> +<h4 class="subsection" id="Directory-Stack-Builtins-1"><span>6.8.1 Directory Stack Builtins<a class="copiable-link" href="#Directory-Stack-Builtins-1"> &para;</a></span></h4> -<dl compact="compact"> -<dt id='index-dirs'><span><code>dirs</code><a href='#index-dirs' class='copiable-anchor'> &para;</a></span></dt> +<dl class="table"> +<dt><a id="index-dirs"></a><span><code class="code">dirs</code><a class="copiable-link" href="#index-dirs"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">dirs [-clpv] [+<var>N</var> | -<var>N</var>] +<pre class="example-preformatted">dirs [-clpv] [+<var class="var">N</var> | -<var class="var">N</var>] </pre></div> <p>Display the list of currently remembered directories. Directories -are added to the list with the <code>pushd</code> command; the -<code>popd</code> command removes directories from the list. +are added to the list with the <code class="code">pushd</code> command; the +<code class="code">popd</code> command removes directories from the list. The current directory is always the first directory in the stack. </p> -<dl compact="compact"> -<dt><span><code>-c</code></span></dt> +<dl class="table"> +<dt><code class="code">-c</code></dt> <dd><p>Clears the directory stack by deleting all of the elements. </p></dd> -<dt><span><code>-l</code></span></dt> +<dt><code class="code">-l</code></dt> <dd><p>Produces a listing using full pathnames; the default listing format uses a tilde to denote the home directory. </p></dd> -<dt><span><code>-p</code></span></dt> -<dd><p>Causes <code>dirs</code> to print the directory stack with one entry per +<dt><code class="code">-p</code></dt> +<dd><p>Causes <code class="code">dirs</code> to print the directory stack with one entry per line. </p></dd> -<dt><span><code>-v</code></span></dt> -<dd><p>Causes <code>dirs</code> to print the directory stack with one entry per +<dt><code class="code">-v</code></dt> +<dd><p>Causes <code class="code">dirs</code> to print the directory stack with one entry per line, prefixing each entry with its index in the stack. </p></dd> -<dt><span><code>+<var>N</var></code></span></dt> -<dd><p>Displays the <var>N</var>th directory (counting from the left of the -list printed by <code>dirs</code> when invoked without options), starting +<dt><code class="code">+<var class="var">N</var></code></dt> +<dd><p>Displays the <var class="var">N</var>th directory (counting from the left of the +list printed by <code class="code">dirs</code> when invoked without options), starting with zero. </p></dd> -<dt><span><code>-<var>N</var></code></span></dt> -<dd><p>Displays the <var>N</var>th directory (counting from the right of the -list printed by <code>dirs</code> when invoked without options), starting +<dt><code class="code">-<var class="var">N</var></code></dt> +<dd><p>Displays the <var class="var">N</var>th directory (counting from the right of the +list printed by <code class="code">dirs</code> when invoked without options), starting with zero. </p></dd> </dl> </dd> -<dt id='index-popd'><span><code>popd</code><a href='#index-popd' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-popd"></a><span><code class="code">popd</code><a class="copiable-link" href="#index-popd"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">popd [-n] [+<var>N</var> | -<var>N</var>] +<pre class="example-preformatted">popd [-n] [+<var class="var">N</var> | -<var class="var">N</var>] </pre></div> <p>Removes elements from the directory stack. The elements are numbered from 0 starting at the first directory -listed by <code>dirs</code>; -that is, <code>popd</code> is equivalent to <code>popd +0</code>. +listed by <code class="code">dirs</code>; +that is, <code class="code">popd</code> is equivalent to <code class="code">popd +0</code>. </p> -<p>When no arguments are given, <code>popd</code> +<p>When no arguments are given, <code class="code">popd</code> removes the top directory from the stack and changes to the new top directory. </p> <p>Arguments, if supplied, have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-n</code></span></dt> +<dl class="table"> +<dt><code class="code">-n</code></dt> <dd><p>Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated. </p></dd> -<dt><span><code>+<var>N</var></code></span></dt> -<dd><p>Removes the <var>N</var>th directory (counting from the left of the -list printed by <code>dirs</code>), starting with zero, from the stack. +<dt><code class="code">+<var class="var">N</var></code></dt> +<dd><p>Removes the <var class="var">N</var>th directory (counting from the left of the +list printed by <code class="code">dirs</code>), starting with zero, from the stack. </p></dd> -<dt><span><code>-<var>N</var></code></span></dt> -<dd><p>Removes the <var>N</var>th directory (counting from the right of the -list printed by <code>dirs</code>), starting with zero, from the stack. +<dt><code class="code">-<var class="var">N</var></code></dt> +<dd><p>Removes the <var class="var">N</var>th directory (counting from the right of the +list printed by <code class="code">dirs</code>), starting with zero, from the stack. </p></dd> </dl> <p>If the top element of the directory stack is modified, and -the <samp>-n</samp> option was not supplied, <code>popd</code> uses the <code>cd</code> +the <samp class="option">-n</samp> option was not supplied, <code class="code">popd</code> uses the <code class="code">cd</code> builtin to change to the directory at the top of the stack. -If the <code>cd</code> fails, <code>popd</code> returns a non-zero value. +If the <code class="code">cd</code> fails, <code class="code">popd</code> returns a non-zero value. </p> -<p>Otherwise, <code>popd</code> returns an unsuccessful status if +<p>Otherwise, <code class="code">popd</code> returns an unsuccessful status if an invalid option is encountered, the directory stack is empty, or a non-existent directory stack entry is specified. </p> -<p>If the <code>popd</code> command is successful, -Bash runs <code>dirs</code> to show the final contents of the directory stack, +<p>If the <code class="code">popd</code> command is successful, +Bash runs <code class="code">dirs</code> to show the final contents of the directory stack, and the return status is 0. </p> -<span id="index-pushd"></span> </dd> -<dt><span><code>pushd</code></span></dt> +<dt><a id="index-pushd"></a><span><code class="code">pushd</code><a class="copiable-link" href="#index-pushd"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">pushd [-n] [<var>+N</var> | <var>-N</var> | <var>dir</var>] +<pre class="example-preformatted">pushd [-n] [<var class="var">+N</var> | <var class="var">-N</var> | <var class="var">dir</var>] </pre></div> <p>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, <code>pushd</code> exchanges the top two elements +With no arguments, <code class="code">pushd</code> exchanges the top two elements of the directory stack. </p> <p>Arguments, if supplied, have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-n</code></span></dt> +<dl class="table"> +<dt><code class="code">-n</code></dt> <dd><p>Suppresses the normal change of directory when rotating or adding directories to the stack, so that only the stack is manipulated. </p></dd> -<dt><span><code>+<var>N</var></code></span></dt> -<dd><p>Brings the <var>N</var>th directory (counting from the left of the -list printed by <code>dirs</code>, starting with zero) to the top of +<dt><code class="code">+<var class="var">N</var></code></dt> +<dd><p>Brings the <var class="var">N</var>th directory (counting from the left of the +list printed by <code class="code">dirs</code>, starting with zero) to the top of the list by rotating the stack. </p></dd> -<dt><span><code>-<var>N</var></code></span></dt> -<dd><p>Brings the <var>N</var>th directory (counting from the right of the -list printed by <code>dirs</code>, starting with zero) to the top of +<dt><code class="code">-<var class="var">N</var></code></dt> +<dd><p>Brings the <var class="var">N</var>th directory (counting from the right of the +list printed by <code class="code">dirs</code>, starting with zero) to the top of the list by rotating the stack. </p></dd> -<dt><span><code><var>dir</var></code></span></dt> -<dd><p>Makes <var>dir</var> be the top of the stack. +<dt><code class="code"><var class="var">dir</var></code></dt> +<dd><p>Makes <var class="var">dir</var> be the top of the stack. </p></dd> </dl> -<p>After the stack has been modified, if the <samp>-n</samp> option was not -supplied, <code>pushd</code> uses the <code>cd</code> builtin to change to the +<p>After the stack has been modified, if the <samp class="option">-n</samp> option was not +supplied, <code class="code">pushd</code> uses the <code class="code">cd</code> builtin to change to the directory at the top of the stack. -If the <code>cd</code> fails, <code>pushd</code> returns a non-zero value. +If the <code class="code">cd</code> fails, <code class="code">pushd</code> returns a non-zero value. </p> -<p>Otherwise, if no arguments are supplied, <code>pushd</code> returns 0 unless the +<p>Otherwise, if no arguments are supplied, <code class="code">pushd</code> returns 0 unless the directory stack is empty. -When rotating the directory stack, <code>pushd</code> returns 0 unless +When rotating the directory stack, <code class="code">pushd</code> returns 0 unless the directory stack is empty or a non-existent directory stack element is specified. </p> -<p>If the <code>pushd</code> command is successful, -Bash runs <code>dirs</code> to show the final contents of the directory stack. +<p>If the <code class="code">pushd</code> command is successful, +Bash runs <code class="code">dirs</code> to show the final contents of the directory stack. </p> </dd> </dl> @@ -8927,110 +9249,110 @@ Bash runs <code>dirs</code> to show the final contents of the directory stack. <hr> </div> </div> -<div class="section" id="Controlling-the-Prompt"> -<div class="header"> +<div class="section-level-extent" id="Controlling-the-Prompt"> +<div class="nav-panel"> <p> Next: <a href="#The-Restricted-Shell" accesskey="n" rel="next">The Restricted Shell</a>, Previous: <a href="#The-Directory-Stack" accesskey="p" rel="prev">The Directory Stack</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Controlling-the-Prompt-1"></span><h3 class="section">6.9 Controlling the Prompt</h3> -<span id="index-prompting"></span> +<h3 class="section" id="Controlling-the-Prompt-1"><span>6.9 Controlling the Prompt<a class="copiable-link" href="#Controlling-the-Prompt-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-prompting"></a> -<p>Bash examines the value of the array variable <code>PROMPT_COMMAND</code> just before +<p>Bash examines the value of the array variable <code class="env">PROMPT_COMMAND</code> just before printing each primary prompt. -If any elements in <code>PROMPT_COMMAND</code> are set and non-null, Bash +If any elements in <code class="env">PROMPT_COMMAND</code> are set and non-null, Bash executes each value, in numeric order, just as if it had been typed on the command line. </p> <p>In addition, the following table describes the special characters which -can appear in the prompt variables <code>PS0</code>, <code>PS1</code>, <code>PS2</code>, and -<code>PS4</code>: +can appear in the prompt variables <code class="env">PS0</code>, <code class="env">PS1</code>, <code class="env">PS2</code>, and +<code class="env">PS4</code>: </p> -<dl compact="compact"> -<dt><span><code>\a</code></span></dt> +<dl class="table"> +<dt><code class="code">\a</code></dt> <dd><p>A bell character. </p></dd> -<dt><span><code>\d</code></span></dt> +<dt><code class="code">\d</code></dt> <dd><p>The date, in &quot;Weekday Month Date&quot; format (e.g., &quot;Tue May 26&quot;). </p></dd> -<dt><span><code>\D{<var>format</var>}</code></span></dt> -<dd><p>The <var>format</var> is passed to <code>strftime</code>(3) and the result is inserted -into the prompt string; an empty <var>format</var> results in a locale-specific +<dt><code class="code">\D{<var class="var">format</var>}</code></dt> +<dd><p>The <var class="var">format</var> is passed to <code class="code">strftime</code>(3) and the result is inserted +into the prompt string; an empty <var class="var">format</var> results in a locale-specific time representation. The braces are required. </p></dd> -<dt><span><code>\e</code></span></dt> +<dt><code class="code">\e</code></dt> <dd><p>An escape character. </p></dd> -<dt><span><code>\h</code></span></dt> +<dt><code class="code">\h</code></dt> <dd><p>The hostname, up to the first &lsquo;.&rsquo;. </p></dd> -<dt><span><code>\H</code></span></dt> +<dt><code class="code">\H</code></dt> <dd><p>The hostname. </p></dd> -<dt><span><code>\j</code></span></dt> +<dt><code class="code">\j</code></dt> <dd><p>The number of jobs currently managed by the shell. </p></dd> -<dt><span><code>\l</code></span></dt> +<dt><code class="code">\l</code></dt> <dd><p>The basename of the shell&rsquo;s terminal device name. </p></dd> -<dt><span><code>\n</code></span></dt> +<dt><code class="code">\n</code></dt> <dd><p>A newline. </p></dd> -<dt><span><code>\r</code></span></dt> +<dt><code class="code">\r</code></dt> <dd><p>A carriage return. </p></dd> -<dt><span><code>\s</code></span></dt> -<dd><p>The name of the shell, the basename of <code>$0</code> (the portion +<dt><code class="code">\s</code></dt> +<dd><p>The name of the shell, the basename of <code class="code">$0</code> (the portion following the final slash). </p></dd> -<dt><span><code>\t</code></span></dt> +<dt><code class="code">\t</code></dt> <dd><p>The time, in 24-hour HH:MM:SS format. </p></dd> -<dt><span><code>\T</code></span></dt> +<dt><code class="code">\T</code></dt> <dd><p>The time, in 12-hour HH:MM:SS format. </p></dd> -<dt><span><code>\@</code></span></dt> +<dt><code class="code">\@</code></dt> <dd><p>The time, in 12-hour am/pm format. </p></dd> -<dt><span><code>\A</code></span></dt> +<dt><code class="code">\A</code></dt> <dd><p>The time, in 24-hour HH:MM format. </p></dd> -<dt><span><code>\u</code></span></dt> +<dt><code class="code">\u</code></dt> <dd><p>The username of the current user. </p></dd> -<dt><span><code>\v</code></span></dt> +<dt><code class="code">\v</code></dt> <dd><p>The version of Bash (e.g., 2.00) </p></dd> -<dt><span><code>\V</code></span></dt> +<dt><code class="code">\V</code></dt> <dd><p>The release of Bash, version + patchlevel (e.g., 2.00.0) </p></dd> -<dt><span><code>\w</code></span></dt> -<dd><p>The value of the <code>PWD</code> shell variable (<code>$PWD</code>), -with <code>$HOME</code> abbreviated with a tilde -(uses the <code>$PROMPT_DIRTRIM</code> variable). +<dt><code class="code">\w</code></dt> +<dd><p>The value of the <code class="code">PWD</code> shell variable (<code class="env">$PWD</code>), +with <code class="env">$HOME</code> abbreviated with a tilde +(uses the <code class="env">$PROMPT_DIRTRIM</code> variable). </p></dd> -<dt><span><code>\W</code></span></dt> -<dd><p>The basename of <code>$PWD</code>, with <code>$HOME</code> abbreviated with a tilde. +<dt><code class="code">\W</code></dt> +<dd><p>The basename of <code class="env">$PWD</code>, with <code class="env">$HOME</code> abbreviated with a tilde. </p></dd> -<dt><span><code>\!</code></span></dt> +<dt><code class="code">\!</code></dt> <dd><p>The history number of this command. </p></dd> -<dt><span><code>\#</code></span></dt> +<dt><code class="code">\#</code></dt> <dd><p>The command number of this command. </p></dd> -<dt><span><code>\$</code></span></dt> -<dd><p>If the effective uid is 0, <code>#</code>, otherwise <code>$</code>. +<dt><code class="code">\$</code></dt> +<dd><p>If the effective uid is 0, <code class="code">#</code>, otherwise <code class="code">$</code>. </p></dd> -<dt><span><code>\<var>nnn</var></code></span></dt> -<dd><p>The character whose ASCII code is the octal value <var>nnn</var>. +<dt><code class="code">\<var class="var">nnn</var></code></dt> +<dd><p>The character whose ASCII code is the octal value <var class="var">nnn</var>. </p></dd> -<dt><span><code>\\</code></span></dt> +<dt><code class="code">\\</code></dt> <dd><p>A backslash. </p></dd> -<dt><span><code>\[</code></span></dt> +<dt><code class="code">\[</code></dt> <dd><p>Begin a sequence of non-printing characters. This could be used to embed a terminal control sequence into the prompt. </p></dd> -<dt><span><code>\]</code></span></dt> +<dt><code class="code">\]</code></dt> <dd><p>End a sequence of non-printing characters. </p></dd> </dl> @@ -9038,118 +9360,178 @@ embed a terminal control sequence into the prompt. <p>The command number and the history number are usually different: the history number of a command is its position in the history list, which may include commands restored from the history file -(see <a href="#Bash-History-Facilities">Bash History Facilities</a>), while the command number is +(see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>), while the command number is the position in the sequence of commands executed during the current shell session. </p> <p>After the string is decoded, it is expanded via parameter expansion, command substitution, arithmetic expansion, and quote removal, subject to the value of the -<code>promptvars</code> shell option (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>). +<code class="code">promptvars</code> shell option (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>). This can have unwanted side effects if escaped portions of the string appear within command substitution or contain characters special to word expansion. </p> <hr> </div> -<div class="section" id="The-Restricted-Shell"> -<div class="header"> +<div class="section-level-extent" id="The-Restricted-Shell"> +<div class="nav-panel"> <p> -Next: <a href="#Bash-POSIX-Mode" accesskey="n" rel="next">Bash POSIX Mode</a>, Previous: <a href="#Controlling-the-Prompt" accesskey="p" rel="prev">Controlling the Prompt</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> +Next: <a href="#Bash-POSIX-Mode" accesskey="n" rel="next">Bash and POSIX</a>, Previous: <a href="#Controlling-the-Prompt" accesskey="p" rel="prev">Controlling the Prompt</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="The-Restricted-Shell-1"></span><h3 class="section">6.10 The Restricted Shell</h3> -<span id="index-restricted-shell"></span> +<h3 class="section" id="The-Restricted-Shell-1"><span>6.10 The Restricted Shell<a class="copiable-link" href="#The-Restricted-Shell-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-restricted-shell"></a> -<p>If Bash is started with the name <code>rbash</code>, or the -<samp>--restricted</samp> +<p>If Bash is started with the name <code class="code">rbash</code>, or the +<samp class="option">--restricted</samp> or -<samp>-r</samp> +<samp class="option">-r</samp> 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. -A restricted shell behaves identically to <code>bash</code> +A restricted shell behaves identically to <code class="code">bash</code> with the exception that the following are disallowed or not performed: </p> -<ul> -<li> Changing directories with the <code>cd</code> builtin. -</li><li> Setting or unsetting the values of the <code>SHELL</code>, <code>PATH</code>, -<code>HISTFILE</code>, -<code>ENV</code>, or <code>BASH_ENV</code> variables. -</li><li> Specifying command names containing slashes. -</li><li> Specifying a filename containing a slash as an argument to the <code>.</code> +<ul class="itemize mark-bullet"> +<li>Changing directories with the <code class="code">cd</code> builtin. +</li><li>Setting or unsetting the values of the <code class="env">SHELL</code>, <code class="env">PATH</code>, +<code class="env">HISTFILE</code>, +<code class="env">ENV</code>, or <code class="env">BASH_ENV</code> variables. +</li><li>Specifying command names containing slashes. +</li><li>Specifying a filename containing a slash as an argument to the <code class="code">.</code> builtin command. -</li><li> Specifying a filename containing a slash as an argument to the <code>history</code> +</li><li>Specifying a filename containing a slash as an argument to the <code class="code">history</code> builtin command. -</li><li> Specifying a filename containing a slash as an argument to the <samp>-p</samp> -option to the <code>hash</code> builtin command. -</li><li> Importing function definitions from the shell environment at startup. -</li><li> Parsing the value of <code>SHELLOPTS</code> from the shell environment at startup. -</li><li> Redirecting output using the &lsquo;<samp>&gt;</samp>&rsquo;, &lsquo;<samp>&gt;|</samp>&rsquo;, &lsquo;<samp>&lt;&gt;</samp>&rsquo;, &lsquo;<samp>&gt;&amp;</samp>&rsquo;, -&lsquo;<samp>&amp;&gt;</samp>&rsquo;, and &lsquo;<samp>&gt;&gt;</samp>&rsquo; redirection operators. -</li><li> Using the <code>exec</code> builtin to replace the shell with another command. -</li><li> Adding or deleting builtin commands with the -<samp>-f</samp> and <samp>-d</samp> options to the <code>enable</code> builtin. -</li><li> Using the <code>enable</code> builtin command to enable disabled shell builtins. -</li><li> Specifying the <samp>-p</samp> option to the <code>command</code> builtin. -</li><li> Turning off restricted mode with &lsquo;<samp>set +r</samp>&rsquo; or &lsquo;<samp>shopt -u restricted_shell</samp>&rsquo;. +</li><li>Specifying a filename containing a slash as an argument to the <samp class="option">-p</samp> +option to the <code class="code">hash</code> builtin command. +</li><li>Importing function definitions from the shell environment at startup. +</li><li>Parsing the value of <code class="env">SHELLOPTS</code> from the shell environment at startup. +</li><li>Redirecting output using the &lsquo;<samp class="samp">&gt;</samp>&rsquo;, &lsquo;<samp class="samp">&gt;|</samp>&rsquo;, &lsquo;<samp class="samp">&lt;&gt;</samp>&rsquo;, &lsquo;<samp class="samp">&gt;&amp;</samp>&rsquo;, +&lsquo;<samp class="samp">&amp;&gt;</samp>&rsquo;, and &lsquo;<samp class="samp">&gt;&gt;</samp>&rsquo; redirection operators. +</li><li>Using the <code class="code">exec</code> builtin to replace the shell with another command. +</li><li>Adding or deleting builtin commands with the +<samp class="option">-f</samp> and <samp class="option">-d</samp> options to the <code class="code">enable</code> builtin. +</li><li>Using the <code class="code">enable</code> builtin command to enable disabled shell builtins. +</li><li>Specifying the <samp class="option">-p</samp> option to the <code class="code">command</code> builtin. +</li><li>Turning off restricted mode with &lsquo;<samp class="samp">set +r</samp>&rsquo; or &lsquo;<samp class="samp">shopt -u restricted_shell</samp>&rsquo;. </li></ul> <p>These restrictions are enforced after any startup files are read. </p> <p>When a command that is found to be a shell script is executed -(see <a href="#Shell-Scripts">Shell Scripts</a>), <code>rbash</code> turns off any restrictions in +(see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>), <code class="code">rbash</code> turns off any restrictions in the shell spawned to execute the script. </p> <p>The restricted shell mode is only one component of a useful restricted -environment. It should be accompanied by setting <code>PATH</code> to a value +environment. It should be accompanied by setting <code class="env">PATH</code> to a value that allows execution of only a few verified commands (commands that allow shell escapes are particularly vulnerable), changing the current -directory to a non-writable directory other than <code>$HOME</code> after login, +directory to a non-writable directory other than <code class="env">$HOME</code> after login, not allowing the restricted shell to execute shell scripts, and cleaning the environment of variables that cause some commands to modify their -behavior (e.g., <code>VISUAL</code> or <code>PAGER</code>). +behavior (e.g., <code class="env">VISUAL</code> or <code class="env">PAGER</code>). </p> <p>Modern systems provide more secure ways to implement a restricted environment, -such as <code>jails</code>, <code>zones</code>, or <code>containers</code>. +such as <code class="code">jails</code>, <code class="code">zones</code>, or <code class="code">containers</code>. </p> <hr> </div> -<div class="section" id="Bash-POSIX-Mode"> -<div class="header"> +<div class="section-level-extent" id="Bash-POSIX-Mode"> +<div class="nav-panel"> <p> Next: <a href="#Shell-Compatibility-Mode" accesskey="n" rel="next">Shell Compatibility Mode</a>, Previous: <a href="#The-Restricted-Shell" accesskey="p" rel="prev">The Restricted Shell</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bash-POSIX-Mode-1"></span><h3 class="section">6.11 Bash POSIX Mode</h3> -<span id="index-POSIX-Mode"></span> +<h3 class="section" id="Bash-and-POSIX"><span>6.11 Bash and POSIX<a class="copiable-link" href="#Bash-and-POSIX"> &para;</a></span></h3> -<p>Starting Bash with the <samp>--posix</samp> command-line option or executing -&lsquo;<samp>set -o posix</samp>&rsquo; while Bash is running will cause Bash to conform more -closely to the <small>POSIX</small> standard by changing the behavior to -match that specified by <small>POSIX</small> in areas where the Bash default differs. -</p> -<p>When invoked as <code>sh</code>, Bash enters <small>POSIX</small> mode after reading the +<ul class="mini-toc"> +<li><a href="#What-is-POSIX_003f" accesskey="1">What is POSIX?</a></li> +<li><a href="#Bash-POSIX-Mode-1" accesskey="2">Bash POSIX Mode</a></li> +</ul> +<div class="subsection-level-extent" id="What-is-POSIX_003f"> +<h4 class="subsection"><span>6.11.1 What is POSIX?<a class="copiable-link" href="#What-is-POSIX_003f"> &para;</a></span></h4> +<a class="index-entry-id" id="index-POSIX-description"></a> + +<p><small class="sc">POSIX</small> is the name for a family of standards based on Unix. +A number of Unix services, tools, and functions are part of the standard, +ranging from the basic system calls and C library functions to common +applications and tools to system administration and management. +</p> +<p>The <small class="sc">POSIX</small> Shell and Utilities standard was originally developed by +IEEE Working Group 1003.2 (POSIX.2). +The first edition of the 1003.2 standard was published in 1992. +It was merged with the original IEEE 1003.1 Working Group and is +currently maintained by the Austin Group (a joint working group of the +IEEE, The Open Group and ISO/IEC SC22/WG15). +Today the Shell and Utilities are a volume within the set of documents that +make up IEEE Std 1003.1-2017, and thus the former POSIX.2 (from 1992) +is now part of the current unified <small class="sc">POSIX</small> standard. +</p> +<p>The Shell and Utilities volume concentrates on the command +interpreter interface and utility programs commonly executed from +the command line or by other programs. +The standard is freely available on the web at +<a class="url" href="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html">https://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html</a>. +</p> +<p>Bash is concerned with the aspects of the shell&rsquo;s behavior defined +by the <small class="sc">POSIX</small> Shell and Utilities volume. The shell command +language has of course been standardized, including the basic flow +control and program execution constructs, I/O redirection and +pipelines, argument handling, variable expansion, and quoting. +</p> +<p>The <i class="i">special</i> builtins, which must be implemented as part of the +shell to provide the desired functionality, are specified as +being part of the shell; examples of these are <code class="code">eval</code> and +<code class="code">export</code>. +Other utilities appear in the sections of POSIX not +devoted to the shell which are commonly (and in some cases must +be) implemented as builtin commands, such as +<code class="code">read</code> and <code class="code">test</code>. +POSIX also specifies aspects of the shell&rsquo;s interactive +behavior, including job control and command +line editing. +Only vi-style line editing commands have been +standardized; emacs editing commands were left out due to +objections. +</p> +</div> +<div class="subsection-level-extent" id="Bash-POSIX-Mode-1"> +<h4 class="subsection"><span>6.11.2 Bash POSIX Mode<a class="copiable-link" href="#Bash-POSIX-Mode-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-POSIX-Mode"></a> + +<p>Although Bash is an implementation of the <small class="sc">POSIX</small> shell +specification, there are areas where the Bash default behavior +differs from the specification. +The Bash <em class="dfn">posix mode</em> changes the Bash +behavior in these areas so that it conforms to the standard more closely. +</p> +<p>Starting Bash with the <samp class="option">--posix</samp> command-line option or executing +&lsquo;<samp class="samp">set -o posix</samp>&rsquo; while Bash is running will cause Bash to conform more +closely to the <small class="sc">POSIX</small> standard by changing the behavior to +match that specified by <small class="sc">POSIX</small> in areas where the Bash default differs. +</p> +<p>When invoked as <code class="code">sh</code>, Bash enters <small class="sc">POSIX</small> mode after reading the startup files. </p> -<p>The following list is what&rsquo;s changed when &lsquo;<small>POSIX</small> mode&rsquo; is in effect: +<p>The following list is what&rsquo;s changed when &lsquo;<small class="sc">POSIX</small> mode&rsquo; is in effect: </p> -<ol> -<li> Bash ensures that the <code>POSIXLY_CORRECT</code> variable is set. +<ol class="enumerate"> +<li> Bash ensures that the <code class="env">POSIXLY_CORRECT</code> variable is set. </li><li> When a command in the hash table no longer exists, Bash will re-search -<code>$PATH</code> to find the new location. This is also available with -&lsquo;<samp>shopt -s checkhash</samp>&rsquo;. +<code class="env">$PATH</code> to find the new location. This is also available with +&lsquo;<samp class="samp">shopt -s checkhash</samp>&rsquo;. </li><li> Bash will not insert a command without the execute bit set into the command hash table, even if it returns it as a (last-ditch) result -from a <code>$PATH</code> search. +from a <code class="env">$PATH</code> search. </li><li> The message printed by the job control code and builtins when a job exits with a non-zero status is &lsquo;Done(status)&rsquo;. </li><li> The message printed by the job control code and builtins when a job -is stopped is &lsquo;Stopped(<var>signame</var>)&rsquo;, where <var>signame</var> is, for -example, <code>SIGTSTP</code>. +is stopped is &lsquo;Stopped(<var class="var">signame</var>)&rsquo;, where <var class="var">signame</var> is, for +example, <code class="code">SIGTSTP</code>. </li><li> Alias expansion is always enabled, even in non-interactive shells. @@ -9162,19 +9544,19 @@ substitution is executed. This means that command substitution will not expand aliases that are defined after the command substitution is initially parsed (e.g., as part of a function definition). -</li><li> The <small>POSIX</small> <code>PS1</code> and <code>PS2</code> expansions of &lsquo;<samp>!</samp>&rsquo; to -the history number and &lsquo;<samp>!!</samp>&rsquo; to &lsquo;<samp>!</samp>&rsquo; are enabled, -and parameter expansion is performed on the values of <code>PS1</code> and -<code>PS2</code> regardless of the setting of the <code>promptvars</code> option. +</li><li> The <small class="sc">POSIX</small> <code class="env">PS1</code> and <code class="env">PS2</code> expansions of &lsquo;<samp class="samp">!</samp>&rsquo; to +the history number and &lsquo;<samp class="samp">!!</samp>&rsquo; to &lsquo;<samp class="samp">!</samp>&rsquo; are enabled, +and parameter expansion is performed on the values of <code class="env">PS1</code> and +<code class="env">PS2</code> regardless of the setting of the <code class="code">promptvars</code> option. -</li><li> The <small>POSIX</small> startup files are executed (<code>$ENV</code>) rather than +</li><li> The <small class="sc">POSIX</small> startup files are executed (<code class="env">$ENV</code>) rather than the normal Bash files. </li><li> Tilde expansion is only performed on assignments preceding a command name, rather than on all assignment statements on the line. -</li><li> The default history file is <samp>~/.sh_history</samp> (this is the -default value of <code>$HISTFILE</code>). +</li><li> The default history file is <samp class="file">~/.sh_history</samp> (this is the +default value the shell assigns to <code class="env">$HISTFILE</code>). </li><li> Redirection operators do not perform filename expansion on the word in the redirection unless the shell is interactive. @@ -9182,27 +9564,32 @@ in the redirection unless the shell is interactive. </li><li> Redirection operators do not perform word splitting on the word in the redirection. -</li><li> Function names must be valid shell <code>name</code>s. That is, they may not +</li><li> Function names must be valid shell <code class="code">name</code>s. That is, they may not contain characters other than letters, digits, and underscores, and may not start with a digit. Declaring a function with an invalid name causes a fatal syntax error in non-interactive shells. -</li><li> Function names may not be the same as one of the <small>POSIX</small> special +</li><li> Function names may not be the same as one of the <small class="sc">POSIX</small> special builtins. -</li><li> <small>POSIX</small> special builtins are found before shell functions -during command lookup. +</li><li> Even if a shell function whose name contains a slash was defined before +entering <small class="sc">POSIX</small> mode, the shell will not execute a function whose name +contains one or more slashes. + +</li><li> <small class="sc">POSIX</small> special builtins are found before shell functions +during command lookup, including output printed by the <code class="code">type</code> +and <code class="code">command</code> builtins. -</li><li> When printing shell function definitions (e.g., by <code>type</code>), Bash does -not print the <code>function</code> keyword. +</li><li> When printing shell function definitions (e.g., by <code class="code">type</code>), Bash does +not print the <code class="code">function</code> keyword. </li><li> Literal tildes that appear as the first character in elements of -the <code>PATH</code> variable are not expanded as described above -under <a href="#Tilde-Expansion">Tilde Expansion</a>. +the <code class="env">PATH</code> variable are not expanded as described above +under <a class="ref" href="#Tilde-Expansion">Tilde Expansion</a>. -</li><li> The <code>time</code> reserved word may be used by itself as a command. When +</li><li> The <code class="code">time</code> reserved word may be used by itself as a command. When used in this way, it displays timing statistics for the shell and its -completed children. The <code>TIMEFORMAT</code> variable controls the format +completed children. The <code class="env">TIMEFORMAT</code> variable controls the format of the timing information. </li><li> When parsing and expanding a ${&hellip;} expansion that appears within @@ -9211,19 +9598,30 @@ quote a closing brace or other special character, unless the operator is one of those defined to perform pattern removal. In this case, they do not have to appear as matched pairs. -</li><li> The parser does not recognize <code>time</code> as a reserved word if the next -token begins with a &lsquo;<samp>-</samp>&rsquo;. +</li><li> The parser does not recognize <code class="code">time</code> as a reserved word if the next +token begins with a &lsquo;<samp class="samp">-</samp>&rsquo;. -</li><li> The &lsquo;<samp>!</samp>&rsquo; character does not introduce history expansion within a -double-quoted string, even if the <code>histexpand</code> option is enabled. +</li><li> The &lsquo;<samp class="samp">!</samp>&rsquo; character does not introduce history expansion within a +double-quoted string, even if the <code class="code">histexpand</code> option is enabled. -</li><li> If a <small>POSIX</small> special builtin returns an error status, a +</li><li> If a <small class="sc">POSIX</small> special builtin returns an error status, a non-interactive shell exits. The fatal errors are those listed in -the <small>POSIX</small> standard, and include things like passing incorrect options, +the <small class="sc">POSIX</small> standard, and include things like passing incorrect options, redirection errors, variable assignment errors for assignments preceding the command name, and so on. +</li><li> The <code class="code">unset</code> builtin with the <samp class="option">-v</samp> option specified returns a +fatal error if it attempts to unset a <code class="code">readonly</code> or <code class="code">non-unsettable</code> +variable, or encounters a variable name argument that is an invalid identifier, +which causes a non-interactive shell to exit. + +</li><li> When asked to unset a variable that appears in an assignment statement +preceding the command, the <code class="code">unset</code> builtin attempts to unset a variable +of the same name in the current or previous scope as well. +This implements the required &quot;if an assigned variable is further modified +by the utility, the modifications made by the utility shall persist&quot; behavior. + </li><li> A non-interactive shell exits with an error status if a variable assignment error occurs when no command name follows the assignment statements. @@ -9238,10 +9636,10 @@ at the top level (&quot;the shell shall not perform any further processing of th command in which the error occurred&quot;). </li><li> A non-interactive shell exits with an error status if the iteration -variable in a <code>for</code> statement or the selection variable in a -<code>select</code> statement is a readonly variable. +variable in a <code class="code">for</code> statement or the selection variable in a +<code class="code">select</code> statement is a readonly variable or has an invalid name. -</li><li> Non-interactive shells exit if <var>filename</var> in <code>.</code> <var>filename</var> +</li><li> Non-interactive shells exit if <var class="var">filename</var> in <code class="code">.</code> <var class="var">filename</var> is not found. </li><li> Non-interactive shells exit if a syntax error in an arithmetic expansion @@ -9250,165 +9648,200 @@ results in an invalid expression. </li><li> Non-interactive shells exit if a parameter expansion error occurs. </li><li> Non-interactive shells exit if there is a syntax error in a script read -with the <code>.</code> or <code>source</code> builtins, or in a string processed by -the <code>eval</code> builtin. +with the <code class="code">.</code> or <code class="code">source</code> builtins, or in a string processed by +the <code class="code">eval</code> builtin. </li><li> While variable indirection is available, it may not be applied to the -&lsquo;<samp>#</samp>&rsquo; and &lsquo;<samp>?</samp>&rsquo; special parameters. +&lsquo;<samp class="samp">#</samp>&rsquo; and &lsquo;<samp class="samp">?</samp>&rsquo; special parameters. -</li><li> Expanding the &lsquo;<samp>*</samp>&rsquo; special parameter in a pattern context where the -expansion is double-quoted does not treat the <code>$*</code> as if it were +</li><li> Expanding the &lsquo;<samp class="samp">*</samp>&rsquo; special parameter in a pattern context where the +expansion is double-quoted does not treat the <code class="code">$*</code> as if it were double-quoted. -</li><li> Assignment statements preceding <small>POSIX</small> special builtins +</li><li> Assignment statements preceding <small class="sc">POSIX</small> special builtins persist in the shell environment after the builtin completes. -</li><li> The <code>command</code> builtin does not prevent builtins that take assignment +</li><li> The <code class="code">command</code> builtin does not prevent builtins that take assignment statements as arguments from expanding them as assignment statements; -when not in <small>POSIX</small> mode, assignment builtins lose their assignment -statement expansion properties when preceded by <code>command</code>. +when not in <small class="sc">POSIX</small> mode, assignment builtins lose their assignment +statement expansion properties when preceded by <code class="code">command</code>. -</li><li> The <code>bg</code> builtin uses the required format to describe each job placed +</li><li> The <code class="code">bg</code> builtin uses the required format to describe each job placed in the background, which does not include an indication of whether the job is the current or previous job. -</li><li> The output of &lsquo;<samp>kill -l</samp>&rsquo; prints all the signal names on a single line, -separated by spaces, without the &lsquo;<samp>SIG</samp>&rsquo; prefix. +</li><li> The output of &lsquo;<samp class="samp">kill -l</samp>&rsquo; prints all the signal names on a single line, +separated by spaces, without the &lsquo;<samp class="samp">SIG</samp>&rsquo; prefix. -</li><li> The <code>kill</code> builtin does not accept signal names with a &lsquo;<samp>SIG</samp>&rsquo; +</li><li> The <code class="code">kill</code> builtin does not accept signal names with a &lsquo;<samp class="samp">SIG</samp>&rsquo; prefix. -</li><li> The <code>export</code> and <code>readonly</code> builtin commands display their -output in the format required by <small>POSIX</small>. +</li><li> The <code class="code">export</code> and <code class="code">readonly</code> builtin commands display their +output in the format required by <small class="sc">POSIX</small>. -</li><li> The <code>trap</code> builtin displays signal names without the leading -<code>SIG</code>. +</li><li> If the <code class="code">export</code> and <code class="code">readonly</code> builtin commands get an argument +that is not a valid identifier, and they are not operating on shell +functions, they return an error. +This will cause a non-interactive shell to exit because these are +special builtins. -</li><li> The <code>trap</code> builtin doesn&rsquo;t check the first argument for a possible +</li><li> The <code class="code">trap</code> builtin displays signal names without the leading +<code class="code">SIG</code>. + +</li><li> The <code class="code">trap</code> builtin doesn&rsquo;t check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given -signal to the original disposition, they should use &lsquo;<samp>-</samp>&rsquo; as the +signal to the original disposition, they should use &lsquo;<samp class="samp">-</samp>&rsquo; as the first argument. -</li><li> <code>trap -p</code> displays signals whose dispositions are set to SIG_DFL and -those that were ignored when the shell started. +</li><li> <code class="code">trap -p</code> without arguments displays signals whose dispositions are +set to SIG_DFL and those that were ignored when the shell started, not +just trapped signals. -</li><li> The <code>.</code> and <code>source</code> builtins do not search the current directory -for the filename argument if it is not found by searching <code>PATH</code>. +</li><li> The <code class="code">.</code> and <code class="code">source</code> builtins do not search the current directory +for the filename argument if it is not found by searching <code class="env">PATH</code>. -</li><li> Enabling <small>POSIX</small> mode has the effect of setting the -<code>inherit_errexit</code> option, so +</li><li> Enabling <small class="sc">POSIX</small> mode has the effect of setting the +<code class="code">inherit_errexit</code> option, so subshells spawned to execute command substitutions inherit the value of -the <samp>-e</samp> option from the parent shell. -When the <code>inherit_errexit</code> option is not enabled, -Bash clears the <samp>-e</samp> option in such subshells. +the <samp class="option">-e</samp> option from the parent shell. +When the <code class="code">inherit_errexit</code> option is not enabled, +Bash clears the <samp class="option">-e</samp> option in such subshells. -</li><li> Enabling <small>POSIX</small> mode has the effect of setting the -<code>shift_verbose</code> option, so numeric arguments to <code>shift</code> +</li><li> Enabling <small class="sc">POSIX</small> mode has the effect of setting the +<code class="code">shift_verbose</code> option, so numeric arguments to <code class="code">shift</code> that exceed the number of positional parameters will result in an error message. -</li><li> When the <code>alias</code> builtin displays alias definitions, it does not -display them with a leading &lsquo;<samp>alias </samp>&rsquo; unless the <samp>-p</samp> option +</li><li> When the <code class="code">alias</code> builtin displays alias definitions, it does not +display them with a leading &lsquo;<samp class="samp">alias </samp>&rsquo; unless the <samp class="option">-p</samp> option is supplied. -</li><li> When the <code>set</code> builtin is invoked without options, it does not display +</li><li> When the <code class="code">set</code> builtin is invoked without options, it does not display shell function names and definitions. -</li><li> When the <code>set</code> builtin is invoked without options, it displays +</li><li> When the <code class="code">set</code> builtin is invoked without options, it displays variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. -</li><li> When the <code>cd</code> builtin is invoked in logical mode, and the pathname -constructed from <code>$PWD</code> and the directory name supplied as an argument -does not refer to an existing directory, <code>cd</code> will fail instead of +</li><li> When the <code class="code">cd</code> builtin is invoked in logical mode, and the pathname +constructed from <code class="code">$PWD</code> and the directory name supplied as an argument +does not refer to an existing directory, <code class="code">cd</code> will fail instead of falling back to physical mode. -</li><li> When the <code>cd</code> builtin cannot change a directory because the +</li><li> When the <code class="code">cd</code> builtin cannot change a directory because the length of the pathname -constructed from <code>$PWD</code> and the directory name supplied as an argument -exceeds <code>PATH_MAX</code> when all symbolic links are expanded, <code>cd</code> will -fail instead of attempting to use only the supplied directory name. +constructed from <code class="code">$PWD</code> and the directory name supplied as an argument +exceeds <code class="code">PATH_MAX</code> when canonicalized, <code class="code">cd</code> will +attempt to use the supplied directory name. -</li><li> The <code>pwd</code> builtin verifies that the value it prints is the same as the +</li><li> The <code class="code">pwd</code> builtin verifies that the value it prints is the same as the current directory, even if it is not asked to check the file system with the -<samp>-P</samp> option. +<samp class="option">-P</samp> option. -</li><li> When listing the history, the <code>fc</code> builtin does not include an +</li><li> When listing the history, the <code class="code">fc</code> builtin does not include an indication of whether or not a history entry has been modified. -</li><li> The default editor used by <code>fc</code> is <code>ed</code>. +</li><li> The default editor used by <code class="code">fc</code> is <code class="code">ed</code>. + +</li><li> <code class="code">fc</code> treats extra arguments as an error instead of ignoring them. + +</li><li> If there are too many arguments supplied to <code class="code">fc -s</code>, <code class="code">fc</code> prints +an error message and returns failure. -</li><li> The <code>type</code> and <code>command</code> builtins will not report a non-executable +</li><li> The <code class="code">type</code> and <code class="code">command</code> builtins will not report a non-executable file as having been found, though the shell will attempt to execute such a -file if it is the only so-named file found in <code>$PATH</code>. +file if it is the only so-named file found in <code class="code">$PATH</code>. -</li><li> The <code>vi</code> editing mode will invoke the <code>vi</code> editor directly when -the &lsquo;<samp>v</samp>&rsquo; command is run, instead of checking <code>$VISUAL</code> and -<code>$EDITOR</code>. +</li><li> The <code class="code">vi</code> editing mode will invoke the <code class="code">vi</code> editor directly when +the &lsquo;<samp class="samp">v</samp>&rsquo; command is run, instead of checking <code class="code">$VISUAL</code> and +<code class="code">$EDITOR</code>. -</li><li> When the <code>xpg_echo</code> option is enabled, Bash does not attempt to interpret -any arguments to <code>echo</code> as options. Each argument is displayed, after +</li><li> When the <code class="code">xpg_echo</code> option is enabled, Bash does not attempt to interpret +any arguments to <code class="code">echo</code> as options. Each argument is displayed, after escape characters are converted. -</li><li> The <code>ulimit</code> builtin uses a block size of 512 bytes for the <samp>-c</samp> -and <samp>-f</samp> options. +</li><li> The <code class="code">ulimit</code> builtin uses a block size of 512 bytes for the <samp class="option">-c</samp> +and <samp class="option">-f</samp> options. -</li><li> The arrival of <code>SIGCHLD</code> when a trap is set on <code>SIGCHLD</code> does -not interrupt the <code>wait</code> builtin and cause it to return immediately. +</li><li> The arrival of <code class="code">SIGCHLD</code> when a trap is set on <code class="code">SIGCHLD</code> does +not interrupt the <code class="code">wait</code> builtin and cause it to return immediately. The trap command is run once for each child that exits. -</li><li> The <code>read</code> builtin may be interrupted by a signal for which a trap +</li><li> The <code class="code">read</code> builtin may be interrupted by a signal for which a trap has been set. -If Bash receives a trapped signal while executing <code>read</code>, the trap -handler executes and <code>read</code> returns an exit status greater than 128. +If Bash receives a trapped signal while executing <code class="code">read</code>, the trap +handler executes and <code class="code">read</code> returns an exit status greater than 128. -</li><li> The <code>printf</code> builtin uses <code>double</code> (via <code>strtod</code>) to convert +</li><li> The <code class="code">printf</code> builtin uses <code class="code">double</code> (via <code class="code">strtod</code>) to convert arguments corresponding to floating point conversion specifiers, instead of -<code>long double</code> if it&rsquo;s available. The &lsquo;<samp>L</samp>&rsquo; length modifier forces -<code>printf</code> to use <code>long double</code> if it&rsquo;s available. +<code class="code">long double</code> if it&rsquo;s available. The &lsquo;<samp class="samp">L</samp>&rsquo; length modifier forces +<code class="code">printf</code> to use <code class="code">long double</code> if it&rsquo;s available. </li><li> Bash removes an exited background process&rsquo;s status from the list of such -statuses after the <code>wait</code> builtin is used to obtain it. +statuses after the <code class="code">wait</code> builtin is used to obtain it. + +</li><li> A double quote character (&lsquo;<samp class="samp">&quot;</samp>&rsquo;) is treated specially when it appears +in a backquoted command substitution in the body of a here-document that +undergoes expansion. +That means, for example, that a backslash preceding a double quote +character will escape it and the backslash will be removed. + +</li><li> The <code class="code">test</code> builtin compares strings using the current locale when +processing the &lsquo;<samp class="samp">&lt;</samp>&rsquo; and &lsquo;<samp class="samp">&gt;</samp>&rsquo; binary operators. + +</li><li> The <code class="code">test</code> builtin&rsquo;s <samp class="option">-t</samp> unary primary requires an argument. +Historical versions of <code class="code">test</code> made the argument optional in certain +cases, and Bash attempts to accommodate those for backwards compatibility. + +</li><li> Command substitutions don&rsquo;t set the &lsquo;<samp class="samp">?</samp>&rsquo; special parameter. The exit +status of a simple command without a command word is still the exit status +of the last command substitution that occurred while evaluating the variable +assignments and redirections in that command, but that does not happen until +after all of the assignments and redirections. </li></ol> -<p>There is other <small>POSIX</small> behavior that Bash does not implement by -default even when in <small>POSIX</small> mode. +<p>There is other <small class="sc">POSIX</small> behavior that Bash does not implement by +default even when in <small class="sc">POSIX</small> mode. Specifically: </p> -<ol> -<li> The <code>fc</code> builtin checks <code>$EDITOR</code> as a program to edit history -entries if <code>FCEDIT</code> is unset, rather than defaulting directly to -<code>ed</code>. <code>fc</code> uses <code>ed</code> if <code>EDITOR</code> is unset. +<ol class="enumerate"> +<li> The <code class="code">fc</code> builtin checks <code class="code">$EDITOR</code> as a program to edit history +entries if <code class="code">FCEDIT</code> is unset, rather than defaulting directly to +<code class="code">ed</code>. <code class="code">fc</code> uses <code class="code">ed</code> if <code class="code">EDITOR</code> is unset. + +</li><li> A non-interactive shell does not exit if a variable assignment preceding +the <code class="code">command</code> builtin or another non-special builtin fails. -</li><li> As noted above, Bash requires the <code>xpg_echo</code> option to be enabled for -the <code>echo</code> builtin to be fully conformant. +</li><li> As noted above, Bash requires the <code class="code">xpg_echo</code> option to be enabled for +the <code class="code">echo</code> builtin to be fully conformant. </li></ol> -<p>Bash can be configured to be <small>POSIX</small>-conformant by default, by specifying -the <samp>--enable-strict-posix-default</samp> to <code>configure</code> when building -(see <a href="#Optional-Features">Optional Features</a>). +<p>Bash can be configured to be <small class="sc">POSIX</small>-conformant by default, by specifying +the <samp class="option">--enable-strict-posix-default</samp> to <code class="code">configure</code> when building +(see <a class="pxref" href="#Optional-Features">Optional Features</a>). </p> <hr> </div> -<div class="section" id="Shell-Compatibility-Mode"> -<div class="header"> +</div> +<div class="section-level-extent" id="Shell-Compatibility-Mode"> +<div class="nav-panel"> <p> -Previous: <a href="#Bash-POSIX-Mode" accesskey="p" rel="prev">Bash POSIX Mode</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> +Previous: <a href="#Bash-POSIX-Mode" accesskey="p" rel="prev">Bash and POSIX</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Shell-Compatibility-Mode-1"></span><h3 class="section">6.12 Shell Compatibility Mode</h3> -<span id="index-Compatibility-Level"></span> -<span id="index-Compatibility-Mode"></span> +<h3 class="section" id="Shell-Compatibility-Mode-1"><span>6.12 Shell Compatibility Mode<a class="copiable-link" href="#Shell-Compatibility-Mode-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-Compatibility-Level"></a> +<a class="index-entry-id" id="index-Compatibility-Mode"></a> -<p>Bash-4.0 introduced the concept of a <em>shell compatibility level</em>, +<p>Bash-4.0 introduced the concept of a <em class="dfn">shell compatibility level</em>, specified as a set of options to the shopt builtin -(<code>compat31</code>, -<code>compat32</code>, -<code>compat40</code>, -<code>compat41</code>, +(<code class="code">compat31</code>, +<code class="code">compat32</code>, +<code class="code">compat40</code>, +<code class="code">compat41</code>, and so on). There is only one current compatibility level &ndash; each option is mutually exclusive. @@ -9418,68 +9851,58 @@ while they migrate scripts to use current features and behavior. It&rsquo;s intended to be a temporary solution. </p> <p>This section does not mention behavior that is standard for a particular -version (e.g., setting <code>compat32</code> means that quoting the rhs of the regexp +version (e.g., setting <code class="code">compat32</code> means that quoting the rhs of the regexp matching operator quotes special regexp characters in the word, which is default behavior in bash-3.2 and subsequent versions). </p> -<p>If a user enables, say, <code>compat32</code>, it may affect the behavior of other +<p>If a user enables, say, <code class="code">compat32</code>, it may affect the behavior of other compatibility levels up to and including the current compatibility level. The idea is that each compatibility level controls behavior that changed in that version of Bash, but that behavior may have been present in earlier versions. -For instance, the change to use locale-based comparisons with the <code>[[</code> +For instance, the change to use locale-based comparisons with the <code class="code">[[</code> command came in bash-4.1, and earlier versions used ASCII-based comparisons, -so enabling <code>compat32</code> will enable ASCII-based comparisons as well. +so enabling <code class="code">compat32</code> will enable ASCII-based comparisons as well. That granularity may not be sufficient for all uses, and as a result users should employ compatibility levels carefully. Read the documentation for a particular feature to find out the current behavior. </p> -<p>Bash-4.3 introduced a new shell variable: <code>BASH_COMPAT</code>. +<p>Bash-4.3 introduced a new shell variable: <code class="env">BASH_COMPAT</code>. The value assigned to this variable (a decimal version number like 4.2, or an integer -corresponding to the <code>compat</code><var>NN</var> option, like 42) determines the +corresponding to the <code class="code">compat</code><var class="var">NN</var> option, like 42) determines the compatibility level. </p> <p>Starting with bash-4.4, Bash has begun deprecating older compatibility levels. -Eventually, the options will be removed in favor of <code>BASH_COMPAT</code>. +Eventually, the options will be removed in favor of <code class="env">BASH_COMPAT</code>. </p> -<p>Bash-5.0 is the final version for which there will be an individual shopt -option for the previous version. Users should use <code>BASH_COMPAT</code> -on bash-5.0 and later versions. +<p>Bash-5.0 was the final version for which there will be an individual shopt +option for the previous version. +Users should control the compatibility level with <code class="env">BASH_COMPAT</code>. </p> <p>The following table describes the behavior changes controlled by each compatibility level setting. -The <code>compat</code><var>NN</var> tag is used as shorthand for setting the +The <code class="code">compat</code><var class="var">NN</var> tag is used as shorthand for setting the compatibility level -to <var>NN</var> using one of the following mechanisms. +to <var class="var">NN</var> using one of the following mechanisms. For versions prior to bash-5.0, the compatibility level may be set using -the corresponding <code>compat</code><var>NN</var> shopt option. -For bash-4.3 and later versions, the <code>BASH_COMPAT</code> variable is preferred, +the corresponding <code class="code">compat</code><var class="var">NN</var> shopt option. +For bash-4.3 and later versions, the <code class="env">BASH_COMPAT</code> variable is preferred, and it is required for bash-5.1 and later versions. </p> -<dl compact="compact"> -<dt><span><code>compat31</code></span></dt> -<dd><ul> -<li> quoting the rhs of the <code>[[</code> command&rsquo;s regexp matching operator (=~) +<dl class="table"> +<dt><code class="code">compat31</code></dt> +<dd><ul class="itemize mark-bullet"> +<li>quoting the rhs of the <code class="code">[[</code> command&rsquo;s regexp matching operator (=~) has no special effect </li></ul> </dd> -<dt><span><code>compat32</code></span></dt> -<dd><ul> -<li> interrupting a command list such as &quot;a ; b ; c&quot; causes the execution -of the next command in the list (in bash-4.0 and later versions, -the shell acts as if it received the interrupt, so -interrupting one command in a list aborts the execution of the -entire list) -</li></ul> - -</dd> -<dt><span><code>compat40</code></span></dt> -<dd><ul> -<li> the &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; operators to the <code>[[</code> command do not +<dt><code class="code">compat40</code></dt> +<dd><ul class="itemize mark-bullet"> +<li>the &lsquo;<samp class="samp">&lt;</samp>&rsquo; and &lsquo;<samp class="samp">&gt;</samp>&rsquo; operators to the <code class="code">[[</code> command do not consider the current locale when comparing strings; they use ASCII ordering. Bash versions prior to bash-4.1 use ASCII collation and strcmp(3); @@ -9488,103 +9911,103 @@ strcoll(3). </li></ul> </dd> -<dt><span><code>compat41</code></span></dt> -<dd><ul> -<li> in posix mode, <code>time</code> may be followed by options and still be -recognized as a reserved word (this is <small>POSIX</small> interpretation 267) -</li><li> in posix mode, the parser requires that an even number of single -quotes occur in the <var>word</var> portion of a double-quoted ${&hellip;} +<dt><code class="code">compat41</code></dt> +<dd><ul class="itemize mark-bullet"> +<li>in posix mode, <code class="code">time</code> may be followed by options and still be +recognized as a reserved word (this is <small class="sc">POSIX</small> interpretation 267) +</li><li>in posix mode, the parser requires that an even number of single +quotes occur in the <var class="var">word</var> portion of a double-quoted ${&hellip;} parameter expansion and treats them specially, so that characters within the single quotes are considered quoted -(this is <small>POSIX</small> interpretation 221) +(this is <small class="sc">POSIX</small> interpretation 221) </li></ul> </dd> -<dt><span><code>compat42</code></span></dt> -<dd><ul> -<li> the replacement string in double-quoted pattern substitution does not +<dt><code class="code">compat42</code></dt> +<dd><ul class="itemize mark-bullet"> +<li>the replacement string in double-quoted pattern substitution does not undergo quote removal, as it does in versions after bash-4.2 -</li><li> in posix mode, single quotes are considered special when expanding -the <var>word</var> portion of a double-quoted ${&hellip;} parameter expansion +</li><li>in posix mode, single quotes are considered special when expanding +the <var class="var">word</var> portion of a double-quoted ${&hellip;} parameter expansion and can be used to quote a closing brace or other special character -(this is part of <small>POSIX</small> interpretation 221); +(this is part of <small class="sc">POSIX</small> interpretation 221); in later versions, single quotes are not special within double-quoted word expansions </li></ul> </dd> -<dt><span><code>compat43</code></span></dt> -<dd><ul> -<li> the shell does not print a warning message if an attempt is made to +<dt><code class="code">compat43</code></dt> +<dd><ul class="itemize mark-bullet"> +<li>the shell does not print a warning message if an attempt is made to use a quoted compound assignment as an argument to declare (e.g., declare -a foo=&rsquo;(1 2)&rsquo;). Later versions warn that this usage is deprecated -</li><li> word expansion errors are considered non-fatal errors that cause the +</li><li>word expansion errors are considered non-fatal errors that cause the current command to fail, even in posix mode (the default behavior is to make them fatal errors that cause the shell to exit) -</li><li> when executing a shell function, the loop state (while/until/etc.) -is not reset, so <code>break</code> or <code>continue</code> in that function will break +</li><li>when executing a shell function, the loop state (while/until/etc.) +is not reset, so <code class="code">break</code> or <code class="code">continue</code> in that function will break or continue loops in the calling context. Bash-4.4 and later reset the loop state to prevent this </li></ul> </dd> -<dt><span><code>compat44</code></span></dt> -<dd><ul> -<li> the shell sets up the values used by <code>BASH_ARGV</code> and <code>BASH_ARGC</code> +<dt><code class="code">compat44</code></dt> +<dd><ul class="itemize mark-bullet"> +<li>the shell sets up the values used by <code class="env">BASH_ARGV</code> and <code class="env">BASH_ARGC</code> so they can expand to the shell&rsquo;s positional parameters even if extended debugging mode is not enabled -</li><li> a subshell inherits loops from its parent context, so <code>break</code> -or <code>continue</code> will cause the subshell to exit. +</li><li>a subshell inherits loops from its parent context, so <code class="code">break</code> +or <code class="code">continue</code> will cause the subshell to exit. Bash-5.0 and later reset the loop state to prevent the exit -</li><li> variable assignments preceding builtins like <code>export</code> and <code>readonly</code> +</li><li>variable assignments preceding builtins like <code class="code">export</code> and <code class="code">readonly</code> that set attributes continue to affect variables with the same name in the calling environment even if the shell is not in posix mode </li></ul> </dd> -<dt><span><code>compat50 (set using BASH_COMPAT)</code></span></dt> -<dd><ul> -<li> Bash-5.1 changed the way <code>$RANDOM</code> is generated to introduce slightly +<dt><code class="code">compat50 (set using BASH_COMPAT)</code></dt> +<dd><ul class="itemize mark-bullet"> +<li>Bash-5.1 changed the way <code class="code">$RANDOM</code> is generated to introduce slightly more randomness. If the shell compatibility level is set to 50 or lower, it reverts to the method from bash-5.0 and previous versions, so seeding the random number generator by assigning a value to -<code>RANDOM</code> will produce the same sequence as in bash-5.0 -</li><li> If the command hash table is empty, Bash versions prior to bash-5.1 +<code class="env">RANDOM</code> will produce the same sequence as in bash-5.0 +</li><li>If the command hash table is empty, Bash versions prior to bash-5.1 printed an informational message to that effect, even when producing output that can be reused as input. Bash-5.1 suppresses that message -when the <samp>-l</samp> option is supplied. +when the <samp class="option">-l</samp> option is supplied. </li></ul> </dd> -<dt><span><code>compat51 (set using BASH_COMPAT)</code></span></dt> -<dd><ul> -<li> The <code>unset</code> builtin will unset the array <code>a</code> given an argument like -&lsquo;<samp>a[@]</samp>&rsquo;. -Bash-5.2 will unset an element with key &lsquo;<samp>@</samp>&rsquo; (associative arrays) +<dt><code class="code">compat51 (set using BASH_COMPAT)</code></dt> +<dd><ul class="itemize mark-bullet"> +<li>The <code class="code">unset</code> builtin will unset the array <code class="code">a</code> given an argument like +&lsquo;<samp class="samp">a[@]</samp>&rsquo;. +Bash-5.2 will unset an element with key &lsquo;<samp class="samp">@</samp>&rsquo; (associative arrays) or remove all the elements without unsetting the array (indexed arrays) -</li><li> arithmetic commands ( ((...)) ) and the expressions in an arithmetic for +</li><li>arithmetic commands ( ((...)) ) and the expressions in an arithmetic for statement can be expanded more than once -</li><li> expressions used as arguments to arithmetic operators in the <code>[[</code> +</li><li>expressions used as arguments to arithmetic operators in the <code class="code">[[</code> conditional command can be expanded more than once -</li><li> the expressions in substring parameter brace expansion can be +</li><li>the expressions in substring parameter brace expansion can be expanded more than once -</li><li> the expressions in the $(( ... )) word expansion can be expanded +</li><li>the expressions in the $(( ... )) word expansion can be expanded more than once -</li><li> arithmetic expressions used as indexed array subscripts can be +</li><li>arithmetic expressions used as indexed array subscripts can be expanded more than once -</li><li> <code>test -v</code>, when given an argument of &lsquo;<samp>A[@]</samp>&rsquo;, where <var>A</var> is +</li><li><code class="code">test -v</code>, when given an argument of &lsquo;<samp class="samp">A[@]</samp>&rsquo;, where <var class="var">A</var> is an existing associative array, will return true if the array has any set elements. -Bash-5.2 will look for and report on a key named &lsquo;<samp>@</samp>&rsquo; -</li><li> the ${<var>parameter</var>[:]=<var>value</var>} word expansion will return -<var>value</var>, before any variable-specific transformations have been +Bash-5.2 will look for and report on a key named &lsquo;<samp class="samp">@</samp>&rsquo; +</li><li>the ${<var class="var">parameter</var>[:]=<var class="var">value</var>} word expansion will return +<var class="var">value</var>, before any variable-specific transformations have been performed (e.g., converting to lowercase). Bash-5.2 will return the final value assigned to the variable. -</li><li> Parsing command substitutions will behave as if extended glob -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) +</li><li>Parsing command substitutions will behave as if extended globbing +(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) is enabled, so that parsing a command substitution containing an extglob pattern (say, as part of a shell function) will not fail. This assumes the intent is to enable extglob before the command is executed @@ -9592,39 +10015,47 @@ and word expansions are performed. It will fail at word expansion time if extglob hasn&rsquo;t been enabled by the time the command is executed. </li></ul> + +</dd> +<dt><code class="code">compat52 (set using BASH_COMPAT)</code></dt> +<dd><ul class="itemize mark-bullet"> +<li>The <code class="code">test</code> builtin uses its historical algorithm to parse parenthesized +subexpressions when given five or more arguments. +</li></ul> + </dd> </dl> <hr> </div> </div> -<div class="chapter" id="Job-Control"> -<div class="header"> +<div class="chapter-level-extent" id="Job-Control"> +<div class="nav-panel"> <p> Next: <a href="#Command-Line-Editing" accesskey="n" rel="next">Command Line Editing</a>, Previous: <a href="#Bash-Features" accesskey="p" rel="prev">Bash Features</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Job-Control-1"></span><h2 class="chapter">7 Job Control</h2> +<h2 class="chapter" id="Job-Control-1"><span>7 Job Control<a class="copiable-link" href="#Job-Control-1"> &para;</a></span></h2> <p>This chapter discusses what job control is, how it works, and how Bash allows you to access its facilities. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Job-Control-Basics" accesskey="1">Job Control Basics</a></li> <li><a href="#Job-Control-Builtins" accesskey="2">Job Control Builtins</a></li> <li><a href="#Job-Control-Variables" accesskey="3">Job Control Variables</a></li> </ul> <hr> -<div class="section" id="Job-Control-Basics"> -<div class="header"> +<div class="section-level-extent" id="Job-Control-Basics"> +<div class="nav-panel"> <p> Next: <a href="#Job-Control-Builtins" accesskey="n" rel="next">Job Control Builtins</a>, Up: <a href="#Job-Control" accesskey="u" rel="up">Job Control</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Job-Control-Basics-1"></span><h3 class="section">7.1 Job Control Basics</h3> -<span id="index-job-control-1"></span> -<span id="index-foreground"></span> -<span id="index-background"></span> -<span id="index-suspending-jobs"></span> +<h3 class="section" id="Job-Control-Basics-1"><span>7.1 Job Control Basics<a class="copiable-link" href="#Job-Control-Basics-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-job-control-1"></a> +<a class="index-entry-id" id="index-foreground"></a> +<a class="index-entry-id" id="index-background"></a> +<a class="index-entry-id" id="index-suspending-jobs"></a> <p>Job control refers to the ability to selectively stop (suspend) @@ -9633,295 +10064,295 @@ their execution at a later point. A user typically employs this facility via an interactive interface supplied jointly by the operating system kernel&rsquo;s terminal driver and Bash. </p> -<p>The shell associates a <var>job</var> with each pipeline. It keeps a +<p>The shell associates a <var class="var">job</var> with each pipeline. It keeps a table of currently executing jobs, which may be listed with the -<code>jobs</code> command. When Bash starts a job +<code class="code">jobs</code> command. When Bash starts a job asynchronously, it prints a line that looks like: </p><div class="example"> -<pre class="example">[1] 25647 +<pre class="example-preformatted">[1] 25647 </pre></div> -<p>indicating that this job is job number 1 and that the process <small>ID</small> +<p>indicating that this job is job number 1 and that the process <small class="sc">ID</small> of the last process in the pipeline associated with this job is 25647. All of the processes in a single pipeline are members of -the same job. Bash uses the <var>job</var> abstraction as the +the same job. Bash uses the <var class="var">job</var> abstraction as the basis for job control. </p> <p>To facilitate the implementation of the user interface to job control, the operating system maintains the notion of a current terminal -process group <small>ID</small>. Members of this process group (processes whose -process group <small>ID</small> is equal to the current terminal process group -<small>ID</small>) receive keyboard-generated signals such as <code>SIGINT</code>. +process group <small class="sc">ID</small>. Members of this process group (processes whose +process group <small class="sc">ID</small> is equal to the current terminal process group +<small class="sc">ID</small>) receive keyboard-generated signals such as <code class="code">SIGINT</code>. These processes are said to be in the foreground. Background -processes are those whose process group <small>ID</small> differs from the +processes are those whose process group <small class="sc">ID</small> differs from the terminal&rsquo;s; such processes are immune to keyboard-generated signals. Only foreground processes are allowed to read from or, if -the user so specifies with <code>stty tostop</code>, write to the terminal. +the user so specifies with <code class="code">stty tostop</code>, write to the terminal. Background processes which attempt to -read from (write to when <code>stty tostop</code> is in effect) the -terminal are sent a <code>SIGTTIN</code> (<code>SIGTTOU</code>) +read from (write to when <code class="code">tostop</code> is in effect) the +terminal are sent a <code class="code">SIGTTIN</code> (<code class="code">SIGTTOU</code>) signal by the kernel&rsquo;s terminal driver, which, unless caught, suspends the process. </p> <p>If the operating system on which Bash is running supports job control, Bash contains facilities to use it. Typing the -<em>suspend</em> character (typically &lsquo;<samp>^Z</samp>&rsquo;, Control-Z) while a +<em class="dfn">suspend</em> character (typically &lsquo;<samp class="samp">^Z</samp>&rsquo;, Control-Z) while a process is running causes that process to be stopped and returns -control to Bash. Typing the <em>delayed suspend</em> character -(typically &lsquo;<samp>^Y</samp>&rsquo;, Control-Y) causes the process to be stopped +control to Bash. Typing the <em class="dfn">delayed suspend</em> character +(typically &lsquo;<samp class="samp">^Y</samp>&rsquo;, Control-Y) causes the process to be stopped when it attempts to read input from the terminal, and control to be returned to Bash. The user then manipulates the state of -this job, using the <code>bg</code> command to continue it in the -background, the <code>fg</code> command to continue it in the -foreground, or the <code>kill</code> command to kill it. A &lsquo;<samp>^Z</samp>&rsquo; +this job, using the <code class="code">bg</code> command to continue it in the +background, the <code class="code">fg</code> command to continue it in the +foreground, or the <code class="code">kill</code> command to kill it. A &lsquo;<samp class="samp">^Z</samp>&rsquo; takes effect immediately, and has the additional side effect of causing pending output and typeahead to be discarded. </p> <p>There are a number of ways to refer to a job in the shell. The -character &lsquo;<samp>%</samp>&rsquo; introduces a job specification (<em>jobspec</em>). +character &lsquo;<samp class="samp">%</samp>&rsquo; introduces a job specification (<em class="dfn">jobspec</em>). </p> -<p>Job number <code>n</code> may be referred to as &lsquo;<samp>%n</samp>&rsquo;. -The symbols &lsquo;<samp>%%</samp>&rsquo; and &lsquo;<samp>%+</samp>&rsquo; refer to the shell&rsquo;s notion of the +<p>Job number <code class="code">n</code> may be referred to as &lsquo;<samp class="samp">%n</samp>&rsquo;. +The symbols &lsquo;<samp class="samp">%%</samp>&rsquo; and &lsquo;<samp class="samp">%+</samp>&rsquo; refer to the shell&rsquo;s notion of the current job, which is the last job stopped while it was in the foreground or started in the background. -A single &lsquo;<samp>%</samp>&rsquo; (with no accompanying job specification) also refers +A single &lsquo;<samp class="samp">%</samp>&rsquo; (with no accompanying job specification) also refers to the current job. -The previous job may be referenced using &lsquo;<samp>%-</samp>&rsquo;. -If there is only a single job, &lsquo;<samp>%+</samp>&rsquo; and &lsquo;<samp>%-</samp>&rsquo; can both be used +The previous job may be referenced using &lsquo;<samp class="samp">%-</samp>&rsquo;. +If there is only a single job, &lsquo;<samp class="samp">%+</samp>&rsquo; and &lsquo;<samp class="samp">%-</samp>&rsquo; can both be used to refer to that job. -In output pertaining to jobs (e.g., the output of the <code>jobs</code> -command), the current job is always flagged with a &lsquo;<samp>+</samp>&rsquo;, and the -previous job with a &lsquo;<samp>-</samp>&rsquo;. +In output pertaining to jobs (e.g., the output of the <code class="code">jobs</code> +command), the current job is always flagged with a &lsquo;<samp class="samp">+</samp>&rsquo;, and the +previous job with a &lsquo;<samp class="samp">-</samp>&rsquo;. </p> <p>A job may also be referred to using a prefix of the name used to start it, or using a substring -that appears in its command line. For example, &lsquo;<samp>%ce</samp>&rsquo; refers -to a stopped job whose command name begins with &lsquo;<samp>ce</samp>&rsquo;. -Using &lsquo;<samp>%?ce</samp>&rsquo;, on the -other hand, refers to any job containing the string &lsquo;<samp>ce</samp>&rsquo; in +that appears in its command line. For example, &lsquo;<samp class="samp">%ce</samp>&rsquo; refers +to a stopped job whose command name begins with &lsquo;<samp class="samp">ce</samp>&rsquo;. +Using &lsquo;<samp class="samp">%?ce</samp>&rsquo;, on the +other hand, refers to any job containing the string &lsquo;<samp class="samp">ce</samp>&rsquo; in its command line. If the prefix or substring matches more than one job, Bash reports an error. </p> <p>Simply naming a job can be used to bring it into the foreground: -&lsquo;<samp>%1</samp>&rsquo; is a synonym for &lsquo;<samp>fg %1</samp>&rsquo;, bringing job 1 from the -background into the foreground. Similarly, &lsquo;<samp>%1 &amp;</samp>&rsquo; resumes -job 1 in the background, equivalent to &lsquo;<samp>bg %1</samp>&rsquo; +&lsquo;<samp class="samp">%1</samp>&rsquo; is a synonym for &lsquo;<samp class="samp">fg %1</samp>&rsquo;, bringing job 1 from the +background into the foreground. Similarly, &lsquo;<samp class="samp">%1 &amp;</samp>&rsquo; resumes +job 1 in the background, equivalent to &lsquo;<samp class="samp">bg %1</samp>&rsquo; </p> <p>The shell learns immediately whenever a job changes state. Normally, Bash waits until it is about to print a prompt before reporting changes in a job&rsquo;s status so as to not interrupt any other output. -If the <samp>-b</samp> option to the <code>set</code> builtin is enabled, -Bash reports such changes immediately (see <a href="#The-Set-Builtin">The Set Builtin</a>). -Any trap on <code>SIGCHLD</code> is executed for each child process +If the <samp class="option">-b</samp> option to the <code class="code">set</code> builtin is enabled, +Bash reports such changes immediately (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). +Any trap on <code class="code">SIGCHLD</code> is executed for each child process that exits. </p> <p>If an attempt to exit Bash is made while jobs are stopped, (or running, if -the <code>checkjobs</code> option is enabled &ndash; see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), the -shell prints a warning message, and if the <code>checkjobs</code> option is +the <code class="code">checkjobs</code> option is enabled &ndash; see <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), the +shell prints a warning message, and if the <code class="code">checkjobs</code> option is enabled, lists the jobs and their statuses. -The <code>jobs</code> command may then be used to inspect their status. +The <code class="code">jobs</code> command may then be used to inspect their status. If a second attempt to exit is made without an intervening command, Bash does not print another warning, and any stopped jobs are terminated. </p> -<p>When the shell is waiting for a job or process using the <code>wait</code> -builtin, and job control is enabled, <code>wait</code> will return when the -job changes state. The <samp>-f</samp> option causes <code>wait</code> to wait +<p>When the shell is waiting for a job or process using the <code class="code">wait</code> +builtin, and job control is enabled, <code class="code">wait</code> will return when the +job changes state. The <samp class="option">-f</samp> option causes <code class="code">wait</code> to wait until the job or process terminates before returning. </p> <hr> </div> -<div class="section" id="Job-Control-Builtins"> -<div class="header"> +<div class="section-level-extent" id="Job-Control-Builtins"> +<div class="nav-panel"> <p> Next: <a href="#Job-Control-Variables" accesskey="n" rel="next">Job Control Variables</a>, Previous: <a href="#Job-Control-Basics" accesskey="p" rel="prev">Job Control Basics</a>, Up: <a href="#Job-Control" accesskey="u" rel="up">Job Control</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Job-Control-Builtins-1"></span><h3 class="section">7.2 Job Control Builtins</h3> +<h3 class="section" id="Job-Control-Builtins-1"><span>7.2 Job Control Builtins<a class="copiable-link" href="#Job-Control-Builtins-1"> &para;</a></span></h3> -<dl compact="compact"> -<dt id='index-bg'><span><code>bg</code><a href='#index-bg' class='copiable-anchor'> &para;</a></span></dt> +<dl class="table"> +<dt><a id="index-bg"></a><span><code class="code">bg</code><a class="copiable-link" href="#index-bg"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">bg [<var>jobspec</var> &hellip;] +<pre class="example-preformatted">bg [<var class="var">jobspec</var> ...] </pre></div> -<p>Resume each suspended job <var>jobspec</var> in the background, as if it -had been started with &lsquo;<samp>&amp;</samp>&rsquo;. -If <var>jobspec</var> is not supplied, the current job is used. +<p>Resume each suspended job <var class="var">jobspec</var> in the background, as if it +had been started with &lsquo;<samp class="samp">&amp;</samp>&rsquo;. +If <var class="var">jobspec</var> is not supplied, the current job is used. The return status is zero unless it is run when job control is not enabled, or, when run with job control enabled, any -<var>jobspec</var> was not found or specifies a job +<var class="var">jobspec</var> was not found or specifies a job that was started without job control. </p> </dd> -<dt id='index-fg'><span><code>fg</code><a href='#index-fg' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-fg"></a><span><code class="code">fg</code><a class="copiable-link" href="#index-fg"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">fg [<var>jobspec</var>] +<pre class="example-preformatted">fg [<var class="var">jobspec</var>] </pre></div> -<p>Resume the job <var>jobspec</var> in the foreground and make it the current job. -If <var>jobspec</var> is not supplied, the current job is used. +<p>Resume the job <var class="var">jobspec</var> in the foreground and make it the current job. +If <var class="var">jobspec</var> is not supplied, the current job is used. The return status is that of the command placed into the foreground, or non-zero if run when job control is disabled or, when run with -job control enabled, <var>jobspec</var> does not specify a valid job or -<var>jobspec</var> specifies a job that was started without job control. +job control enabled, <var class="var">jobspec</var> does not specify a valid job or +<var class="var">jobspec</var> specifies a job that was started without job control. </p> </dd> -<dt id='index-jobs'><span><code>jobs</code><a href='#index-jobs' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-jobs"></a><span><code class="code">jobs</code><a class="copiable-link" href="#index-jobs"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">jobs [-lnprs] [<var>jobspec</var>] -jobs -x <var>command</var> [<var>arguments</var>] +<pre class="example-preformatted">jobs [-lnprs] [<var class="var">jobspec</var>] +jobs -x <var class="var">command</var> [<var class="var">arguments</var>] </pre></div> <p>The first form lists the active jobs. The options have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-l</code></span></dt> -<dd><p>List process <small>ID</small>s in addition to the normal information. +<dl class="table"> +<dt><code class="code">-l</code></dt> +<dd><p>List process <small class="sc">ID</small>s in addition to the normal information. </p> </dd> -<dt><span><code>-n</code></span></dt> +<dt><code class="code">-n</code></dt> <dd><p>Display information only about jobs that have changed status since the user was last notified of their status. </p> </dd> -<dt><span><code>-p</code></span></dt> -<dd><p>List only the process <small>ID</small> of the job&rsquo;s process group leader. +<dt><code class="code">-p</code></dt> +<dd><p>List only the process <small class="sc">ID</small> of the job&rsquo;s process group leader. </p> </dd> -<dt><span><code>-r</code></span></dt> +<dt><code class="code">-r</code></dt> <dd><p>Display only running jobs. </p> </dd> -<dt><span><code>-s</code></span></dt> +<dt><code class="code">-s</code></dt> <dd><p>Display only stopped jobs. </p></dd> </dl> -<p>If <var>jobspec</var> is given, +<p>If <var class="var">jobspec</var> is given, output is restricted to information about that job. -If <var>jobspec</var> is not supplied, the status of all jobs is +If <var class="var">jobspec</var> is not supplied, the status of all jobs is listed. </p> -<p>If the <samp>-x</samp> option is supplied, <code>jobs</code> replaces any -<var>jobspec</var> found in <var>command</var> or <var>arguments</var> with the -corresponding process group <small>ID</small>, and executes <var>command</var>, -passing it <var>argument</var>s, returning its exit status. +<p>If the <samp class="option">-x</samp> option is supplied, <code class="code">jobs</code> replaces any +<var class="var">jobspec</var> found in <var class="var">command</var> or <var class="var">arguments</var> with the +corresponding process group <small class="sc">ID</small>, and executes <var class="var">command</var>, +passing it <var class="var">argument</var>s, returning its exit status. </p> </dd> -<dt id='index-kill'><span><code>kill</code><a href='#index-kill' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-kill"></a><span><code class="code">kill</code><a class="copiable-link" href="#index-kill"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">kill [-s <var>sigspec</var>] [-n <var>signum</var>] [-<var>sigspec</var>] <var>jobspec</var> or <var>pid</var> -kill -l|-L [<var>exit_status</var>] -</pre></div> - -<p>Send a signal specified by <var>sigspec</var> or <var>signum</var> to the process -named by job specification <var>jobspec</var> or process <small>ID</small> <var>pid</var>. -<var>sigspec</var> is either a case-insensitive signal name such as -<code>SIGINT</code> (with or without the <code>SIG</code> prefix) -or a signal number; <var>signum</var> is a signal number. -If <var>sigspec</var> and <var>signum</var> are not present, <code>SIGTERM</code> is used. -The <samp>-l</samp> option lists the signal names. -If any arguments are supplied when <samp>-l</samp> is given, the names of the +<pre class="example-preformatted">kill [-s <var class="var">sigspec</var>] [-n <var class="var">signum</var>] [-<var class="var">sigspec</var>] <var class="var">jobspec</var> or <var class="var">pid</var> +kill -l|-L [<var class="var">exit_status</var>] +</pre></div> + +<p>Send a signal specified by <var class="var">sigspec</var> or <var class="var">signum</var> to the process +named by job specification <var class="var">jobspec</var> or process <small class="sc">ID</small> <var class="var">pid</var>. +<var class="var">sigspec</var> is either a case-insensitive signal name such as +<code class="code">SIGINT</code> (with or without the <code class="code">SIG</code> prefix) +or a signal number; <var class="var">signum</var> is a signal number. +If <var class="var">sigspec</var> and <var class="var">signum</var> are not present, <code class="code">SIGTERM</code> is used. +The <samp class="option">-l</samp> option lists the signal names. +If any arguments are supplied when <samp class="option">-l</samp> is given, the names of the signals corresponding to the arguments are listed, and the return status is zero. -<var>exit_status</var> is a number specifying a signal number or the exit +<var class="var">exit_status</var> is a number specifying a signal number or the exit status of a process terminated by a signal. -The <samp>-L</samp> option is equivalent to <samp>-l</samp>. +The <samp class="option">-L</samp> option is equivalent to <samp class="option">-l</samp>. The return status is zero if at least one signal was successfully sent, or non-zero if an error occurs or an invalid option is encountered. </p> </dd> -<dt id='index-wait'><span><code>wait</code><a href='#index-wait' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-wait"></a><span><code class="code">wait</code><a class="copiable-link" href="#index-wait"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">wait [-fn] [-p <var>varname</var>] [<var>jobspec</var> or <var>pid</var> &hellip;] +<pre class="example-preformatted">wait [-fn] [-p <var class="var">varname</var>] [<var class="var">jobspec</var> or <var class="var">pid</var> ...] </pre></div> -<p>Wait until the child process specified by each process <small>ID</small> <var>pid</var> -or job specification <var>jobspec</var> exits and return the exit status of the +<p>Wait until the child process specified by each process <small class="sc">ID</small> <var class="var">pid</var> +or job specification <var class="var">jobspec</var> exits and return the exit status of the last command waited for. If a job spec is given, all processes in the job are waited for. If no arguments are given, -<code>wait</code> waits for all running background jobs and +<code class="code">wait</code> waits for all running background jobs and the last-executed process substitution, if its process id is the same as -<var>$!</var>, +<var class="var">$!</var>, and the return status is zero. -If the <samp>-n</samp> option is supplied, <code>wait</code> waits for a single job -from the list of <var>pid</var>s or <var>jobspec</var>s or, if no arguments are +If the <samp class="option">-n</samp> option is supplied, <code class="code">wait</code> waits for a single job +from the list of <var class="var">pid</var>s or <var class="var">jobspec</var>s or, if no arguments are supplied, any job, to complete and returns its exit status. If none of the supplied arguments is a child of the shell, or if no arguments are supplied and the shell has no unwaited-for children, the exit status is 127. -If the <samp>-p</samp> option is supplied, the process or job identifier of the job +If the <samp class="option">-p</samp> option is supplied, the process or job identifier of the job for which the exit status is returned is assigned to the variable -<var>varname</var> named by the option argument. +<var class="var">varname</var> named by the option argument. The variable will be unset initially, before any assignment. -This is useful only when the <samp>-n</samp> option is supplied. -Supplying the <samp>-f</samp> option, when job control is enabled, -forces <code>wait</code> to wait for each <var>pid</var> or <var>jobspec</var> to +This is useful only when the <samp class="option">-n</samp> option is supplied. +Supplying the <samp class="option">-f</samp> option, when job control is enabled, +forces <code class="code">wait</code> to wait for each <var class="var">pid</var> or <var class="var">jobspec</var> to terminate before returning its status, instead of returning when it changes status. -If neither <var>jobspec</var> nor <var>pid</var> specifies an active child process +If neither <var class="var">jobspec</var> nor <var class="var">pid</var> specifies an active child process of the shell, the return status is 127. -If <code>wait</code> is interrupted by a signal, the return status will be greater -than 128, as described above (see <a href="#Signals">Signals</a>). +If <code class="code">wait</code> is interrupted by a signal, the return status will be greater +than 128, as described above (see <a class="pxref" href="#Signals">Signals</a>). Otherwise, the return status is the exit status of the last process or job waited for. </p> </dd> -<dt id='index-disown'><span><code>disown</code><a href='#index-disown' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-disown"></a><span><code class="code">disown</code><a class="copiable-link" href="#index-disown"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">disown [-ar] [-h] [<var>jobspec</var> &hellip; | <var>pid</var> &hellip; ] +<pre class="example-preformatted">disown [-ar] [-h] [<var class="var">jobspec</var> ... | <var class="var">pid</var> ... ] </pre></div> -<p>Without options, remove each <var>jobspec</var> from the table of +<p>Without options, remove each <var class="var">jobspec</var> from the table of active jobs. -If the <samp>-h</samp> option is given, the job is not removed from the table, -but is marked so that <code>SIGHUP</code> is not sent to the job if the shell -receives a <code>SIGHUP</code>. -If <var>jobspec</var> is not present, and neither the <samp>-a</samp> nor the -<samp>-r</samp> option is supplied, the current job is used. -If no <var>jobspec</var> is supplied, the <samp>-a</samp> option means to remove or -mark all jobs; the <samp>-r</samp> option without a <var>jobspec</var> +If the <samp class="option">-h</samp> option is given, the job is not removed from the table, +but is marked so that <code class="code">SIGHUP</code> is not sent to the job if the shell +receives a <code class="code">SIGHUP</code>. +If <var class="var">jobspec</var> is not present, and neither the <samp class="option">-a</samp> nor the +<samp class="option">-r</samp> option is supplied, the current job is used. +If no <var class="var">jobspec</var> is supplied, the <samp class="option">-a</samp> option means to remove or +mark all jobs; the <samp class="option">-r</samp> option without a <var class="var">jobspec</var> argument restricts operation to running jobs. </p> </dd> -<dt id='index-suspend'><span><code>suspend</code><a href='#index-suspend' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-suspend"></a><span><code class="code">suspend</code><a class="copiable-link" href="#index-suspend"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">suspend [-f] +<pre class="example-preformatted">suspend [-f] </pre></div> <p>Suspend the execution of this shell until it receives a -<code>SIGCONT</code> signal. +<code class="code">SIGCONT</code> signal. A login shell, or a shell without job control enabled, -cannot be suspended; the <samp>-f</samp> +cannot be suspended; the <samp class="option">-f</samp> option can be used to override this and force the suspension. The return status is 0 unless the shell is a login shell or job control is not enabled and -<samp>-f</samp> +<samp class="option">-f</samp> is not supplied. </p> </dd> </dl> -<p>When job control is not active, the <code>kill</code> and <code>wait</code> -builtins do not accept <var>jobspec</var> arguments. They must be -supplied process <small>ID</small>s. +<p>When job control is not active, the <code class="code">kill</code> and <code class="code">wait</code> +builtins do not accept <var class="var">jobspec</var> arguments. They must be +supplied process <small class="sc">ID</small>s. </p> <hr> </div> -<div class="section" id="Job-Control-Variables"> -<div class="header"> +<div class="section-level-extent" id="Job-Control-Variables"> +<div class="nav-panel"> <p> Previous: <a href="#Job-Control-Builtins" accesskey="p" rel="prev">Job Control Builtins</a>, Up: <a href="#Job-Control" accesskey="u" rel="up">Job Control</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Job-Control-Variables-1"></span><h3 class="section">7.3 Job Control Variables</h3> +<h3 class="section" id="Job-Control-Variables-1"><span>7.3 Job Control Variables<a class="copiable-link" href="#Job-Control-Variables-1"> &para;</a></span></h3> -<dl compact="compact"> -<dt id='index-auto_005fresume'><span><code>auto_resume</code><a href='#index-auto_005fresume' class='copiable-anchor'> &para;</a></span></dt> +<dl class="vtable"> +<dt><a id="index-auto_005fresume"></a><span><code class="code">auto_resume</code><a class="copiable-link" href="#index-auto_005fresume"> &para;</a></span></dt> <dd><p>This variable controls how the shell interacts with the user and job control. If this variable exists then single word simple commands without redirections are treated as candidates for resumption @@ -9929,20 +10360,20 @@ of an existing job. There is no ambiguity allowed; if there is more than one job beginning with the string typed, then the most recently accessed job will be selected. The name of a stopped job, in this context, is the command line -used to start it. If this variable is set to the value &lsquo;<samp>exact</samp>&rsquo;, +used to start it. If this variable is set to the value &lsquo;<samp class="samp">exact</samp>&rsquo;, the string supplied must match the name of a stopped job exactly; -if set to &lsquo;<samp>substring</samp>&rsquo;, +if set to &lsquo;<samp class="samp">substring</samp>&rsquo;, the string supplied needs to match a substring of the name of a -stopped job. The &lsquo;<samp>substring</samp>&rsquo; value provides functionality -analogous to the &lsquo;<samp>%?</samp>&rsquo; job <small>ID</small> (see <a href="#Job-Control-Basics">Job Control Basics</a>). +stopped job. The &lsquo;<samp class="samp">substring</samp>&rsquo; value provides functionality +analogous to the &lsquo;<samp class="samp">%?</samp>&rsquo; job <small class="sc">ID</small> (see <a class="pxref" href="#Job-Control-Basics">Job Control Basics</a>). If set to any other value, the supplied string must be a prefix of a stopped job&rsquo;s name; this provides functionality -analogous to the &lsquo;<samp>%</samp>&rsquo; job <small>ID</small>. +analogous to the &lsquo;<samp class="samp">%</samp>&rsquo; job <small class="sc">ID</small>. </p> </dd> </dl> -<span id="index-Readline_002c-how-to-use"></span> +<a class="index-entry-id" id="index-Readline_002c-how-to-use"></a> @@ -9950,30 +10381,30 @@ analogous to the &lsquo;<samp>%</samp>&rsquo; job <small>ID</small>. <hr> </div> </div> -<div class="chapter" id="Command-Line-Editing"> -<div class="header"> +<div class="chapter-level-extent" id="Command-Line-Editing"> +<div class="nav-panel"> <p> Next: <a href="#Using-History-Interactively" accesskey="n" rel="next">Using History Interactively</a>, Previous: <a href="#Job-Control" accesskey="p" rel="prev">Job Control</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Command-Line-Editing-1"></span><h2 class="chapter">8 Command Line Editing</h2> +<h2 class="chapter" id="Command-Line-Editing-1"><span>8 Command Line Editing<a class="copiable-link" href="#Command-Line-Editing-1"> &para;</a></span></h2> -<p>This chapter describes the basic features of the <small>GNU</small> +<p>This chapter describes the basic features of the <small class="sc">GNU</small> command line editing interface. Command line editing is provided by the Readline library, which is used by several different programs, including Bash. Command line editing is enabled by default when using an interactive shell, -unless the <samp>--noediting</samp> option is supplied at shell invocation. -Line editing is also used when using the <samp>-e</samp> option to the -<code>read</code> builtin command (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +unless the <samp class="option">--noediting</samp> option is supplied at shell invocation. +Line editing is also used when using the <samp class="option">-e</samp> option to the +<code class="code">read</code> builtin command (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). By default, the line editing commands are similar to those of Emacs. A vi-style line editing interface is also available. -Line editing can be enabled at any time using the <samp>-o emacs</samp> or -<samp>-o vi</samp> options to the <code>set</code> builtin command -(see <a href="#The-Set-Builtin">The Set Builtin</a>), or disabled using the <samp>+o emacs</samp> or -<samp>+o vi</samp> options to <code>set</code>. +Line editing can be enabled at any time using the <samp class="option">-o emacs</samp> or +<samp class="option">-o vi</samp> options to the <code class="code">set</code> builtin command +(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>), or disabled using the <samp class="option">+o emacs</samp> or +<samp class="option">+o vi</samp> options to <code class="code">set</code>. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Introduction-and-Notation" accesskey="1">Introduction to Line Editing</a></li> <li><a href="#Readline-Interaction" accesskey="2">Readline Interaction</a></li> <li><a href="#Readline-Init-File" accesskey="3">Readline Init File</a></li> @@ -9984,57 +10415,57 @@ Line editing can be enabled at any time using the <samp>-o emacs</samp> or <li><a href="#A-Programmable-Completion-Example" accesskey="8">A Programmable Completion Example</a></li> </ul> <hr> -<div class="section" id="Introduction-and-Notation"> -<div class="header"> +<div class="section-level-extent" id="Introduction-and-Notation"> +<div class="nav-panel"> <p> Next: <a href="#Readline-Interaction" accesskey="n" rel="next">Readline Interaction</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Introduction-to-Line-Editing"></span><h3 class="section">8.1 Introduction to Line Editing</h3> +<h3 class="section" id="Introduction-to-Line-Editing"><span>8.1 Introduction to Line Editing<a class="copiable-link" href="#Introduction-to-Line-Editing"> &para;</a></span></h3> <p>The following paragraphs describe the notation used to represent keystrokes. </p> -<p>The text <kbd>C-k</kbd> is read as &lsquo;Control-K&rsquo; and describes the character -produced when the <tt class="key">k</tt> key is pressed while the Control key +<p>The text <kbd class="kbd">C-k</kbd> is read as &lsquo;Control-K&rsquo; and describes the character +produced when the <kbd class="key">k</kbd> key is pressed while the Control key is depressed. </p> -<p>The text <kbd>M-k</kbd> is read as &lsquo;Meta-K&rsquo; and describes the character -produced when the Meta key (if you have one) is depressed, and the <tt class="key">k</tt> +<p>The text <kbd class="kbd">M-k</kbd> is read as &lsquo;Meta-K&rsquo; and describes the character +produced when the Meta key (if you have one) is depressed, and the <kbd class="key">k</kbd> key is pressed. -The Meta key is labeled <tt class="key">ALT</tt> on many keyboards. -On keyboards with two keys labeled <tt class="key">ALT</tt> (usually to either side of -the space bar), the <tt class="key">ALT</tt> on the left side is generally set to +The Meta key is labeled <kbd class="key">ALT</kbd> on many keyboards. +On keyboards with two keys labeled <kbd class="key">ALT</kbd> (usually to either side of +the space bar), the <kbd class="key">ALT</kbd> on the left side is generally set to work as a Meta key. -The <tt class="key">ALT</tt> key on the right may also be configured to work as a +The <kbd class="key">ALT</kbd> key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters. </p> -<p>If you do not have a Meta or <tt class="key">ALT</tt> key, or another key working as -a Meta key, the identical keystroke can be generated by typing <tt class="key">ESC</tt> -<em>first</em>, and then typing <tt class="key">k</tt>. -Either process is known as <em>metafying</em> the <tt class="key">k</tt> key. +<p>If you do not have a Meta or <kbd class="key">ALT</kbd> key, or another key working as +a Meta key, the identical keystroke can be generated by typing <kbd class="key">ESC</kbd> +<em class="emph">first</em>, and then typing <kbd class="key">k</kbd>. +Either process is known as <em class="dfn">metafying</em> the <kbd class="key">k</kbd> key. </p> -<p>The text <kbd>M-C-k</kbd> is read as &lsquo;Meta-Control-k&rsquo; and describes the -character produced by <em>metafying</em> <kbd>C-k</kbd>. +<p>The text <kbd class="kbd">M-C-k</kbd> is read as &lsquo;Meta-Control-k&rsquo; and describes the +character produced by <em class="dfn">metafying</em> <kbd class="kbd">C-k</kbd>. </p> <p>In addition, several keys have their own names. Specifically, -<tt class="key">DEL</tt>, <tt class="key">ESC</tt>, <tt class="key">LFD</tt>, <tt class="key">SPC</tt>, <tt class="key">RET</tt>, and <tt class="key">TAB</tt> all +<kbd class="key">DEL</kbd>, <kbd class="key">ESC</kbd>, <kbd class="key">LFD</kbd>, <kbd class="key">SPC</kbd>, <kbd class="key">RET</kbd>, and <kbd class="key">TAB</kbd> all stand for themselves when seen in this text, or in an init file -(see <a href="#Readline-Init-File">Readline Init File</a>). -If your keyboard lacks a <tt class="key">LFD</tt> key, typing <tt class="key">C-j</tt> will +(see <a class="pxref" href="#Readline-Init-File">Readline Init File</a>). +If your keyboard lacks a <kbd class="key">LFD</kbd> key, typing <kbd class="key">C-j</kbd> will produce the desired character. -The <tt class="key">RET</tt> key may be labeled <tt class="key">Return</tt> or <tt class="key">Enter</tt> on +The <kbd class="key">RET</kbd> key may be labeled <kbd class="key">Return</kbd> or <kbd class="key">Enter</kbd> on some keyboards. </p> <hr> </div> -<div class="section" id="Readline-Interaction"> -<div class="header"> +<div class="section-level-extent" id="Readline-Interaction"> +<div class="nav-panel"> <p> Next: <a href="#Readline-Init-File" accesskey="n" rel="next">Readline Init File</a>, Previous: <a href="#Introduction-and-Notation" accesskey="p" rel="prev">Introduction to Line Editing</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Readline-Interaction-1"></span><h3 class="section">8.2 Readline Interaction</h3> -<span id="index-interaction_002c-readline"></span> +<h3 class="section" id="Readline-Interaction-1"><span>8.2 Readline Interaction<a class="copiable-link" href="#Readline-Interaction-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-interaction_002c-readline"></a> <p>Often during an interactive session you type in a long line of text, only to notice that the first word on the line is misspelled. The @@ -10043,12 +10474,12 @@ as you type it in, allowing you to just fix your typo, and not forcing you to retype the majority of the line. Using these editing commands, you move the cursor to the place that needs correction, and delete or insert the text of the corrections. Then, when you are satisfied with -the line, you simply press <tt class="key">RET</tt>. You do not have to be at the -end of the line to press <tt class="key">RET</tt>; the entire line is accepted +the line, you simply press <kbd class="key">RET</kbd>. You do not have to be at the +end of the line to press <kbd class="key">RET</kbd>; the entire line is accepted regardless of the location of the cursor within the line. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Readline-Bare-Essentials" accesskey="1">Readline Bare Essentials</a></li> <li><a href="#Readline-Movement-Commands" accesskey="2">Readline Movement Commands</a></li> <li><a href="#Readline-Killing-Commands" accesskey="3">Readline Killing Commands</a></li> @@ -10056,15 +10487,15 @@ regardless of the location of the cursor within the line. <li><a href="#Searching" accesskey="5">Searching for Commands in the History</a></li> </ul> <hr> -<div class="subsection" id="Readline-Bare-Essentials"> -<div class="header"> +<div class="subsection-level-extent" id="Readline-Bare-Essentials"> +<div class="nav-panel"> <p> Next: <a href="#Readline-Movement-Commands" accesskey="n" rel="next">Readline Movement Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Readline-Bare-Essentials-1"></span><h4 class="subsection">8.2.1 Readline Bare Essentials</h4> -<span id="index-notation_002c-readline"></span> -<span id="index-command-editing"></span> -<span id="index-editing-command-lines"></span> +<h4 class="subsection" id="Readline-Bare-Essentials-1"><span>8.2.1 Readline Bare Essentials<a class="copiable-link" href="#Readline-Bare-Essentials-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-notation_002c-readline"></a> +<a class="index-entry-id" id="index-command-editing"></a> +<a class="index-entry-id" id="index-editing-command-lines"></a> <p>In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one @@ -10073,9 +10504,9 @@ erase character to back up and delete the mistyped character. </p> <p>Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In -that case, you can type <kbd>C-b</kbd> to move the cursor to the left, and then +that case, you can type <kbd class="kbd">C-b</kbd> to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right -with <kbd>C-f</kbd>. +with <kbd class="kbd">C-f</kbd>. </p> <p>When you add text in the middle of a line, you will notice that characters to the right of the cursor are &lsquo;pushed over&rsquo; to make room for the text @@ -10084,85 +10515,85 @@ characters to the right of the cursor are &lsquo;pulled back&rsquo; to fill in t blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows. </p> -<dl compact="compact"> -<dt><span><kbd>C-b</kbd></span></dt> +<dl class="table"> +<dt><kbd class="kbd">C-b</kbd></dt> <dd><p>Move back one character. </p></dd> -<dt><span><kbd>C-f</kbd></span></dt> +<dt><kbd class="kbd">C-f</kbd></dt> <dd><p>Move forward one character. </p></dd> -<dt><span><tt class="key">DEL</tt> or <tt class="key">Backspace</tt></span></dt> +<dt><kbd class="key">DEL</kbd> or <kbd class="key">Backspace</kbd></dt> <dd><p>Delete the character to the left of the cursor. </p></dd> -<dt><span><kbd>C-d</kbd></span></dt> +<dt><kbd class="kbd">C-d</kbd></dt> <dd><p>Delete the character underneath the cursor. </p></dd> -<dt><span>Printing&nbsp;characters<!-- /@w --></span></dt> +<dt>Printing&nbsp;characters<!-- /@w --></dt> <dd><p>Insert the character into the line at the cursor. </p></dd> -<dt><span><kbd>C-_</kbd> or <kbd>C-x C-u</kbd></span></dt> +<dt><kbd class="kbd">C-_</kbd> or <kbd class="kbd">C-x C-u</kbd></dt> <dd><p>Undo the last editing command. You can undo all the way back to an empty line. </p></dd> </dl> -<p>(Depending on your configuration, the <tt class="key">Backspace</tt> key might be set to -delete the character to the left of the cursor and the <tt class="key">DEL</tt> key set -to delete the character underneath the cursor, like <kbd>C-d</kbd>, rather +<p>(Depending on your configuration, the <kbd class="key">Backspace</kbd> key might be set to +delete the character to the left of the cursor and the <kbd class="key">DEL</kbd> key set +to delete the character underneath the cursor, like <kbd class="kbd">C-d</kbd>, rather than the character to the left of the cursor.) </p> <hr> </div> -<div class="subsection" id="Readline-Movement-Commands"> -<div class="header"> +<div class="subsection-level-extent" id="Readline-Movement-Commands"> +<div class="nav-panel"> <p> Next: <a href="#Readline-Killing-Commands" accesskey="n" rel="next">Readline Killing Commands</a>, Previous: <a href="#Readline-Bare-Essentials" accesskey="p" rel="prev">Readline Bare Essentials</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Readline-Movement-Commands-1"></span><h4 class="subsection">8.2.2 Readline Movement Commands</h4> +<h4 class="subsection" id="Readline-Movement-Commands-1"><span>8.2.2 Readline Movement Commands<a class="copiable-link" href="#Readline-Movement-Commands-1"> &para;</a></span></h4> <p>The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many -other commands have been added in addition to <kbd>C-b</kbd>, <kbd>C-f</kbd>, -<kbd>C-d</kbd>, and <tt class="key">DEL</tt>. Here are some commands for moving more rapidly +other commands have been added in addition to <kbd class="kbd">C-b</kbd>, <kbd class="kbd">C-f</kbd>, +<kbd class="kbd">C-d</kbd>, and <kbd class="key">DEL</kbd>. Here are some commands for moving more rapidly about the line. </p> -<dl compact="compact"> -<dt><span><kbd>C-a</kbd></span></dt> +<dl class="table"> +<dt><kbd class="kbd">C-a</kbd></dt> <dd><p>Move to the start of the line. </p></dd> -<dt><span><kbd>C-e</kbd></span></dt> +<dt><kbd class="kbd">C-e</kbd></dt> <dd><p>Move to the end of the line. </p></dd> -<dt><span><kbd>M-f</kbd></span></dt> +<dt><kbd class="kbd">M-f</kbd></dt> <dd><p>Move forward a word, where a word is composed of letters and digits. </p></dd> -<dt><span><kbd>M-b</kbd></span></dt> +<dt><kbd class="kbd">M-b</kbd></dt> <dd><p>Move backward a word. </p></dd> -<dt><span><kbd>C-l</kbd></span></dt> +<dt><kbd class="kbd">C-l</kbd></dt> <dd><p>Clear the screen, reprinting the current line at the top. </p></dd> </dl> -<p>Notice how <kbd>C-f</kbd> moves forward a character, while <kbd>M-f</kbd> moves +<p>Notice how <kbd class="kbd">C-f</kbd> moves forward a character, while <kbd class="kbd">M-f</kbd> moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words. </p> <hr> </div> -<div class="subsection" id="Readline-Killing-Commands"> -<div class="header"> +<div class="subsection-level-extent" id="Readline-Killing-Commands"> +<div class="nav-panel"> <p> Next: <a href="#Readline-Arguments" accesskey="n" rel="next">Readline Arguments</a>, Previous: <a href="#Readline-Movement-Commands" accesskey="p" rel="prev">Readline Movement Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Readline-Killing-Commands-1"></span><h4 class="subsection">8.2.3 Readline Killing Commands</h4> +<h4 class="subsection" id="Readline-Killing-Commands-1"><span>8.2.3 Readline Killing Commands<a class="copiable-link" href="#Readline-Killing-Commands-1"> &para;</a></span></h4> -<span id="index-killing-text"></span> -<span id="index-yanking-text"></span> +<a class="index-entry-id" id="index-killing-text"></a> +<a class="index-entry-id" id="index-yanking-text"></a> -<p><em>Killing</em> text means to delete the text from the line, but to save -it away for later use, usually by <em>yanking</em> (re-inserting) +<p><em class="dfn">Killing</em> text means to delete the text from the line, but to save +it away for later use, usually by <em class="dfn">yanking</em> (re-inserting) it back into the line. (&lsquo;Cut&rsquo; and &lsquo;paste&rsquo; are more recent jargon for &lsquo;kill&rsquo; and &lsquo;yank&rsquo;.) </p> @@ -10170,91 +10601,91 @@ it back into the line. be sure that you can get the text back in a different (or the same) place later. </p> -<p>When you use a kill command, the text is saved in a <em>kill-ring</em>. +<p>When you use a kill command, the text is saved in a <em class="dfn">kill-ring</em>. Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line. -<span id="index-kill-ring"></span> +<a class="index-entry-id" id="index-kill-ring"></a> </p> <p>Here is the list of commands for killing text. </p> -<dl compact="compact"> -<dt><span><kbd>C-k</kbd></span></dt> +<dl class="table"> +<dt><kbd class="kbd">C-k</kbd></dt> <dd><p>Kill the text from the current cursor position to the end of the line. </p> </dd> -<dt><span><kbd>M-d</kbd></span></dt> +<dt><kbd class="kbd">M-d</kbd></dt> <dd><p>Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. -Word boundaries are the same as those used by <kbd>M-f</kbd>. +Word boundaries are the same as those used by <kbd class="kbd">M-f</kbd>. </p> </dd> -<dt><span><kbd>M-<span class="key">DEL</span></kbd></span></dt> +<dt><kbd class="kbd">M-<kbd class="key">DEL</kbd></kbd></dt> <dd><p>Kill from the cursor to the start of the current word, or, if between words, to the start of the previous word. -Word boundaries are the same as those used by <kbd>M-b</kbd>. +Word boundaries are the same as those used by <kbd class="kbd">M-b</kbd>. </p> </dd> -<dt><span><kbd>C-w</kbd></span></dt> +<dt><kbd class="kbd">C-w</kbd></dt> <dd><p>Kill from the cursor to the previous whitespace. This is different than -<kbd>M-<span class="key">DEL</span></kbd> because the word boundaries differ. +<kbd class="kbd">M-<kbd class="key">DEL</kbd></kbd> because the word boundaries differ. </p> </dd> </dl> -<p>Here is how to <em>yank</em> the text back into the line. Yanking +<p>Here is how to <em class="dfn">yank</em> the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer. </p> -<dl compact="compact"> -<dt><span><kbd>C-y</kbd></span></dt> +<dl class="table"> +<dt><kbd class="kbd">C-y</kbd></dt> <dd><p>Yank the most recently killed text back into the buffer at the cursor. </p> </dd> -<dt><span><kbd>M-y</kbd></span></dt> +<dt><kbd class="kbd">M-y</kbd></dt> <dd><p>Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is <kbd>C-y</kbd> or <kbd>M-y</kbd>. +the prior command is <kbd class="kbd">C-y</kbd> or <kbd class="kbd">M-y</kbd>. </p></dd> </dl> <hr> </div> -<div class="subsection" id="Readline-Arguments"> -<div class="header"> +<div class="subsection-level-extent" id="Readline-Arguments"> +<div class="nav-panel"> <p> Next: <a href="#Searching" accesskey="n" rel="next">Searching for Commands in the History</a>, Previous: <a href="#Readline-Killing-Commands" accesskey="p" rel="prev">Readline Killing Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Readline-Arguments-1"></span><h4 class="subsection">8.2.4 Readline Arguments</h4> +<h4 class="subsection" id="Readline-Arguments-1"><span>8.2.4 Readline Arguments<a class="copiable-link" href="#Readline-Arguments-1"> &para;</a></span></h4> <p>You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the <i>sign</i> of the +argument acts as a repeat count, other times it is the <i class="i">sign</i> of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the -start of the line, you might type &lsquo;<samp>M-- C-k</samp>&rsquo;. +start of the line, you might type &lsquo;<samp class="samp">M-- C-k</samp>&rsquo;. </p> <p>The general way to pass numeric arguments to a command is to type meta digits before the command. If the first &lsquo;digit&rsquo; typed is a minus -sign (&lsquo;<samp>-</samp>&rsquo;), then the sign of the argument will be negative. Once +sign (&lsquo;<samp class="samp">-</samp>&rsquo;), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give -the <kbd>C-d</kbd> command an argument of 10, you could type &lsquo;<samp>M-1 0 C-d</samp>&rsquo;, +the <kbd class="kbd">C-d</kbd> command an argument of 10, you could type &lsquo;<samp class="samp">M-1 0 C-d</samp>&rsquo;, which will delete the next ten characters on the input line. </p> <hr> </div> -<div class="subsection" id="Searching"> -<div class="header"> +<div class="subsection-level-extent" id="Searching"> +<div class="nav-panel"> <p> Previous: <a href="#Readline-Arguments" accesskey="p" rel="prev">Readline Arguments</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Searching-for-Commands-in-the-History"></span><h4 class="subsection">8.2.5 Searching for Commands in the History</h4> +<h4 class="subsection" id="Searching-for-Commands-in-the-History"><span>8.2.5 Searching for Commands in the History<a class="copiable-link" href="#Searching-for-Commands-in-the-History"> &para;</a></span></h4> <p>Readline provides commands for searching through the command history -(see <a href="#Bash-History-Facilities">Bash History Facilities</a>) +(see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>) for lines containing a specified string. -There are two search modes: <em>incremental</em> and <em>non-incremental</em>. +There are two search modes: <em class="dfn">incremental</em> and <em class="dfn">non-incremental</em>. </p> <p>Incremental searches begin before the user has finished typing the search string. @@ -10263,136 +10694,138 @@ the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type -<kbd>C-r</kbd>. Typing <kbd>C-s</kbd> searches forward through the history. -The characters present in the value of the <code>isearch-terminators</code> variable +<kbd class="kbd">C-r</kbd>. Typing <kbd class="kbd">C-s</kbd> searches forward through the history. +The characters present in the value of the <code class="code">isearch-terminators</code> variable are used to terminate an incremental search. -If that variable has not been assigned a value, the <tt class="key">ESC</tt> and -<kbd>C-J</kbd> characters will terminate an incremental search. -<kbd>C-g</kbd> will abort an incremental search and restore the original line. +If that variable has not been assigned a value, the <kbd class="key">ESC</kbd> and +<kbd class="kbd">C-J</kbd> characters will terminate an incremental search. +<kbd class="kbd">C-g</kbd> will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. </p> -<p>To find other matching entries in the history list, type <kbd>C-r</kbd> or -<kbd>C-s</kbd> as appropriate. +<p>To find other matching entries in the history list, type <kbd class="kbd">C-r</kbd> or +<kbd class="kbd">C-s</kbd> as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. -For instance, a <tt class="key">RET</tt> will terminate the search and accept +For instance, a <kbd class="key">RET</kbd> will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. </p> -<p>Readline remembers the last incremental search string. If two -<kbd>C-r</kbd>s are typed without any intervening characters defining a new -search string, any remembered search string is used. +<p>Readline remembers the last incremental search string. +If two <kbd class="kbd">C-r</kbd>s are typed without any intervening characters defining +a new search string, Readline uses any remembered search string. </p> <p>Non-incremental searches read the entire search string before starting -to search for matching history lines. The search string may be -typed by the user or be part of the contents of the current line. +to search for matching history lines. +The search string may be typed by the user or be part of the contents of +the current line. </p> <hr> </div> </div> -<div class="section" id="Readline-Init-File"> -<div class="header"> +<div class="section-level-extent" id="Readline-Init-File"> +<div class="nav-panel"> <p> Next: <a href="#Bindable-Readline-Commands" accesskey="n" rel="next">Bindable Readline Commands</a>, Previous: <a href="#Readline-Interaction" accesskey="p" rel="prev">Readline Interaction</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Readline-Init-File-1"></span><h3 class="section">8.3 Readline Init File</h3> -<span id="index-initialization-file_002c-readline"></span> +<h3 class="section" id="Readline-Init-File-1"><span>8.3 Readline Init File<a class="copiable-link" href="#Readline-Init-File-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-initialization-file_002c-readline"></a> <p>Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting -commands in an <em>inputrc</em> file, +commands in an <em class="dfn">inputrc</em> file, conventionally in their home directory. The name of this -file is taken from the value of the shell variable <code>INPUTRC</code>. If -that variable is unset, the default is <samp>~/.inputrc</samp>. If that +file is taken from the value of the shell variable <code class="env">INPUTRC</code>. If +that variable is unset, the default is <samp class="file">~/.inputrc</samp>. If that file does not exist or cannot be read, the ultimate default is -<samp>/etc/inputrc</samp>. -The <code>bind</code><!-- /@w --> builtin command can also be used to set Readline +<samp class="file">/etc/inputrc</samp>. +The <code class="code">bind</code><!-- /@w --> builtin command can also be used to set Readline keybindings and variables. -See <a href="#Bash-Builtins">Bash Builtin Commands</a>. +See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>. </p> <p>When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. </p> -<p>In addition, the <code>C-x C-r</code> command re-reads this init file, thus +<p>In addition, the <code class="code">C-x C-r</code> command re-reads this init file, thus incorporating any changes that you might have made to it. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Readline-Init-File-Syntax" accesskey="1">Readline Init File Syntax</a></li> <li><a href="#Conditional-Init-Constructs" accesskey="2">Conditional Init Constructs</a></li> <li><a href="#Sample-Init-File" accesskey="3">Sample Init File</a></li> </ul> <hr> -<div class="subsection" id="Readline-Init-File-Syntax"> -<div class="header"> +<div class="subsection-level-extent" id="Readline-Init-File-Syntax"> +<div class="nav-panel"> <p> Next: <a href="#Conditional-Init-Constructs" accesskey="n" rel="next">Conditional Init Constructs</a>, Up: <a href="#Readline-Init-File" accesskey="u" rel="up">Readline Init File</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Readline-Init-File-Syntax-1"></span><h4 class="subsection">8.3.1 Readline Init File Syntax</h4> +<h4 class="subsection" id="Readline-Init-File-Syntax-1"><span>8.3.1 Readline Init File Syntax<a class="copiable-link" href="#Readline-Init-File-Syntax-1"> &para;</a></span></h4> <p>There are only a few basic constructs allowed in the Readline init file. Blank lines are ignored. -Lines beginning with a &lsquo;<samp>#</samp>&rsquo; are comments. -Lines beginning with a &lsquo;<samp>$</samp>&rsquo; indicate conditional -constructs (see <a href="#Conditional-Init-Constructs">Conditional Init Constructs</a>). Other lines +Lines beginning with a &lsquo;<samp class="samp">#</samp>&rsquo; are comments. +Lines beginning with a &lsquo;<samp class="samp">$</samp>&rsquo; indicate conditional +constructs (see <a class="pxref" href="#Conditional-Init-Constructs">Conditional Init Constructs</a>). Other lines denote variable settings and key bindings. </p> -<dl compact="compact"> -<dt><span>Variable Settings</span></dt> +<dl class="table"> +<dt>Variable Settings</dt> <dd><p>You can modify the run-time behavior of Readline by altering the values of variables in Readline -using the <code>set</code> command within the init file. +using the <code class="code">set</code> command within the init file. The syntax is simple: </p> <div class="example"> -<pre class="example">set <var>variable</var> <var>value</var> +<pre class="example-preformatted">set <var class="var">variable</var> <var class="var">value</var> </pre></div> <p>Here, for example, is how to change from the default Emacs-like key binding to use -<code>vi</code> line editing commands: +<code class="code">vi</code> line editing commands: </p> <div class="example"> -<pre class="example">set editing-mode vi +<pre class="example-preformatted">set editing-mode vi </pre></div> <p>Variable names and values, where appropriate, are recognized without regard -to case. Unrecognized variable names are ignored. +to case. +Unrecognized variable names are ignored. </p> <p>Boolean variables (those that can be set to on or off) are set to on if -the value is null or empty, <var>on</var> (case-insensitive), or 1. Any other -value results in the variable being set to off. +the value is null or empty, <var class="var">on</var> (case-insensitive), or 1. +Any other value results in the variable being set to off. </p> -<p>The <code>bind&nbsp;<span class="nolinebreak">-V</span></code><!-- /@w --> command lists the current Readline variable names -and values. See <a href="#Bash-Builtins">Bash Builtin Commands</a>. +<p>The <code class="code">bind&nbsp;-V</code><!-- /@w --> command lists the current Readline variable names +and values. See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>. </p> <p>A great deal of run-time behavior is changeable with the following variables. </p> -<span id="index-variables_002c-readline"></span> -<dl compact="compact"> -<dt id='index-active_002dregion_002dstart_002dcolor'><span><code>active-region-start-color</code><a href='#index-active_002dregion_002dstart_002dcolor' class='copiable-anchor'> &para;</a></span></dt> +<a class="index-entry-id" id="index-variables_002c-readline"></a> +<dl class="table"> +<dt><a id="index-active_002dregion_002dstart_002dcolor"></a><span><code class="code">active-region-start-color</code><a class="copiable-link" href="#index-active_002dregion_002dstart_002dcolor"> &para;</a></span></dt> <dd><p>A string variable that controls the text color and background when displaying the text in the active region (see the description of -<code>enable-active-region</code> below). +<code class="code">enable-active-region</code> below). This string must not take up any physical character positions on the display, so it should consist only of terminal escape sequences. It is output to the terminal before displaying the text in the active region. This variable is reset to the default value whenever the terminal type changes. The default value is the string that puts the terminal in standout mode, as obtained from the terminal&rsquo;s terminfo description. -A sample value might be &lsquo;<samp>\e[01;33m</samp>&rsquo;. +A sample value might be &lsquo;<samp class="samp">\e[01;33m</samp>&rsquo;. </p> </dd> -<dt id='index-active_002dregion_002dend_002dcolor'><span><code>active-region-end-color</code><a href='#index-active_002dregion_002dend_002dcolor' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>A string variable that &quot;undoes&quot; the effects of <code>active-region-start-color</code> +<dt><a id="index-active_002dregion_002dend_002dcolor"></a><span><code class="code">active-region-end-color</code><a class="copiable-link" href="#index-active_002dregion_002dend_002dcolor"> &para;</a></span></dt> +<dd><p>A string variable that &quot;undoes&quot; the effects of <code class="code">active-region-start-color</code> and restores &quot;normal&quot; terminal display appearance after displaying text in the active region. This string must not take up any physical character positions on the display, @@ -10401,55 +10834,59 @@ It is output to the terminal after displaying the text in the active region. This variable is reset to the default value whenever the terminal type changes. The default value is the string that restores the terminal from standout mode, as obtained from the terminal&rsquo;s terminfo description. -A sample value might be &lsquo;<samp>\e[0m</samp>&rsquo;. +A sample value might be &lsquo;<samp class="samp">\e[0m</samp>&rsquo;. </p> </dd> -<dt id='index-bell_002dstyle'><span><code>bell-style</code><a href='#index-bell_002dstyle' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-bell_002dstyle"></a><span><code class="code">bell-style</code><a class="copiable-link" href="#index-bell_002dstyle"> &para;</a></span></dt> <dd><p>Controls what happens when Readline wants to ring the terminal bell. -If set to &lsquo;<samp>none</samp>&rsquo;, Readline never rings the bell. If set to -&lsquo;<samp>visible</samp>&rsquo;, Readline uses a visible bell if one is available. -If set to &lsquo;<samp>audible</samp>&rsquo; (the default), Readline attempts to ring +If set to &lsquo;<samp class="samp">none</samp>&rsquo;, Readline never rings the bell. If set to +&lsquo;<samp class="samp">visible</samp>&rsquo;, Readline uses a visible bell if one is available. +If set to &lsquo;<samp class="samp">audible</samp>&rsquo; (the default), Readline attempts to ring the terminal&rsquo;s bell. </p> </dd> -<dt id='index-bind_002dtty_002dspecial_002dchars'><span><code>bind-tty-special-chars</code><a href='#index-bind_002dtty_002dspecial_002dchars' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo; (the default), Readline attempts to bind the control -characters treated specially by the kernel&rsquo;s terminal driver to their +<dt><a id="index-bind_002dtty_002dspecial_002dchars"></a><span><code class="code">bind-tty-special-chars</code><a class="copiable-link" href="#index-bind_002dtty_002dspecial_002dchars"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo; (the default), Readline attempts to bind the control +characters that are +treated specially by the kernel&rsquo;s terminal driver to their Readline equivalents. +These override the default Readline bindings described here. +Type &lsquo;<samp class="samp">stty -a</samp>&rsquo; at a Bash prompt to see your current terminal settings, +including the special control characters (usually <code class="code">cchars</code>). </p> </dd> -<dt id='index-blink_002dmatching_002dparen'><span><code>blink-matching-paren</code><a href='#index-blink_002dmatching_002dparen' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline attempts to briefly move the cursor to an +<dt><a id="index-blink_002dmatching_002dparen"></a><span><code class="code">blink-matching-paren</code><a class="copiable-link" href="#index-blink_002dmatching_002dparen"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. The default -is &lsquo;<samp>off</samp>&rsquo;. +is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-colored_002dcompletion_002dprefix'><span><code>colored-completion-prefix</code><a href='#index-colored_002dcompletion_002dprefix' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, when listing completions, Readline displays the +<dt><a id="index-colored_002dcompletion_002dprefix"></a><span><code class="code">colored-completion-prefix</code><a class="copiable-link" href="#index-colored_002dcompletion_002dprefix"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, when listing completions, Readline displays the common prefix of the set of possible completions using a different color. -The color definitions are taken from the value of the <code>LS_COLORS</code> +The color definitions are taken from the value of the <code class="env">LS_COLORS</code> environment variable. -If there is a color definition in <code>LS_COLORS</code> for the custom suffix -&lsquo;<samp>readline-colored-completion-prefix</samp>&rsquo;, Readline uses this color for +If there is a color definition in <code class="env">LS_COLORS</code> for the custom suffix +&lsquo;<samp class="samp">readline-colored-completion-prefix</samp>&rsquo;, Readline uses this color for the common prefix instead of its default. -The default is &lsquo;<samp>off</samp>&rsquo;. +The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-colored_002dstats'><span><code>colored-stats</code><a href='#index-colored_002dstats' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline displays possible completions using different +<dt><a id="index-colored_002dstats"></a><span><code class="code">colored-stats</code><a class="copiable-link" href="#index-colored_002dstats"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline displays possible completions using different colors to indicate their file type. -The color definitions are taken from the value of the <code>LS_COLORS</code> +The color definitions are taken from the value of the <code class="env">LS_COLORS</code> environment variable. -The default is &lsquo;<samp>off</samp>&rsquo;. +The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-comment_002dbegin'><span><code>comment-begin</code><a href='#index-comment_002dbegin' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-comment_002dbegin"></a><span><code class="code">comment-begin</code><a class="copiable-link" href="#index-comment_002dbegin"> &para;</a></span></dt> <dd><p>The string to insert at the beginning of the line when the -<code>insert-comment</code> command is executed. The default value -is <code>&quot;#&quot;</code>. +<code class="code">insert-comment</code> command is executed. The default value +is <code class="code">&quot;#&quot;</code>. </p> </dd> -<dt id='index-completion_002ddisplay_002dwidth'><span><code>completion-display-width</code><a href='#index-completion_002ddisplay_002dwidth' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-completion_002ddisplay_002dwidth"></a><span><code class="code">completion-display-width</code><a class="copiable-link" href="#index-completion_002ddisplay_002dwidth"> &para;</a></span></dt> <dd><p>The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal @@ -10458,27 +10895,27 @@ A value of 0 will cause matches to be displayed one per line. The default value is -1. </p> </dd> -<dt id='index-completion_002dignore_002dcase'><span><code>completion-ignore-case</code><a href='#index-completion_002dignore_002dcase' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline performs filename matching and completion +<dt><a id="index-completion_002dignore_002dcase"></a><span><code class="code">completion-ignore-case</code><a class="copiable-link" href="#index-completion_002dignore_002dcase"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline performs filename matching and completion in a case-insensitive fashion. -The default value is &lsquo;<samp>off</samp>&rsquo;. +The default value is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-completion_002dmap_002dcase'><span><code>completion-map-case</code><a href='#index-completion_002dmap_002dcase' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, and <var>completion-ignore-case</var> is enabled, Readline -treats hyphens (&lsquo;<samp>-</samp>&rsquo;) and underscores (&lsquo;<samp>_</samp>&rsquo;) as equivalent when +<dt><a id="index-completion_002dmap_002dcase"></a><span><code class="code">completion-map-case</code><a class="copiable-link" href="#index-completion_002dmap_002dcase"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, and <var class="var">completion-ignore-case</var> is enabled, Readline +treats hyphens (&lsquo;<samp class="samp">-</samp>&rsquo;) and underscores (&lsquo;<samp class="samp">_</samp>&rsquo;) as equivalent when performing case-insensitive filename matching and completion. -The default value is &lsquo;<samp>off</samp>&rsquo;. +The default value is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-completion_002dprefix_002ddisplay_002dlength'><span><code>completion-prefix-display-length</code><a href='#index-completion_002dprefix_002ddisplay_002dlength' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-completion_002dprefix_002ddisplay_002dlength"></a><span><code class="code">completion-prefix-display-length</code><a class="copiable-link" href="#index-completion_002dprefix_002ddisplay_002dlength"> &para;</a></span></dt> <dd><p>The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. </p> </dd> -<dt id='index-completion_002dquery_002ditems'><span><code>completion-query-items</code><a href='#index-completion_002dquery_002ditems' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-completion_002dquery_002ditems"></a><span><code class="code">completion-query-items</code><a class="copiable-link" href="#index-completion_002dquery_002ditems"> &para;</a></span></dt> <dd><p>The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater than or equal to this value, @@ -10487,161 +10924,161 @@ otherwise, they are simply listed. This variable must be set to an integer value greater than or equal to zero. A zero value means Readline should never ask; negative values are treated as zero. -The default limit is <code>100</code>. +The default limit is <code class="code">100</code>. </p> </dd> -<dt id='index-convert_002dmeta'><span><code>convert-meta</code><a href='#index-convert_002dmeta' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will convert characters with the -eighth bit set to an <small>ASCII</small> key sequence by stripping the eighth -bit and prefixing an <tt class="key">ESC</tt> character, converting them to a +<dt><a id="index-convert_002dmeta"></a><span><code class="code">convert-meta</code><a class="copiable-link" href="#index-convert_002dmeta"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline will convert characters with the +eighth bit set to an <small class="sc">ASCII</small> key sequence by stripping the eighth +bit and prefixing an <kbd class="key">ESC</kbd> character, converting them to a meta-prefixed key sequence. -The default value is &lsquo;<samp>on</samp>&rsquo;, but -will be set to &lsquo;<samp>off</samp>&rsquo; if the locale is one that contains +The default value is &lsquo;<samp class="samp">on</samp>&rsquo;, but +will be set to &lsquo;<samp class="samp">off</samp>&rsquo; if the locale is one that contains eight-bit characters. -This variable is dependent on the <code>LC_CTYPE</code> locale category, and +This variable is dependent on the <code class="code">LC_CTYPE</code> locale category, and may change if the locale is changed. </p> </dd> -<dt id='index-disable_002dcompletion'><span><code>disable-completion</code><a href='#index-disable_002dcompletion' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>On</samp>&rsquo;, Readline will inhibit word completion. +<dt><a id="index-disable_002dcompletion"></a><span><code class="code">disable-completion</code><a class="copiable-link" href="#index-disable_002dcompletion"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">On</samp>&rsquo;, Readline will inhibit word completion. Completion characters will be inserted into the line as if they had -been mapped to <code>self-insert</code>. The default is &lsquo;<samp>off</samp>&rsquo;. +been mapped to <code class="code">self-insert</code>. The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-echo_002dcontrol_002dcharacters'><span><code>echo-control-characters</code><a href='#index-echo_002dcontrol_002dcharacters' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>When set to &lsquo;<samp>on</samp>&rsquo;, on operating systems that indicate they support it, +<dt><a id="index-echo_002dcontrol_002dcharacters"></a><span><code class="code">echo-control-characters</code><a class="copiable-link" href="#index-echo_002dcontrol_002dcharacters"> &para;</a></span></dt> +<dd><p>When set to &lsquo;<samp class="samp">on</samp>&rsquo;, on operating systems that indicate they support it, Readline echoes a character corresponding to a signal generated from the -keyboard. The default is &lsquo;<samp>on</samp>&rsquo;. +keyboard. The default is &lsquo;<samp class="samp">on</samp>&rsquo;. </p> </dd> -<dt id='index-editing_002dmode'><span><code>editing-mode</code><a href='#index-editing_002dmode' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The <code>editing-mode</code> variable controls which default set of +<dt><a id="index-editing_002dmode"></a><span><code class="code">editing-mode</code><a class="copiable-link" href="#index-editing_002dmode"> &para;</a></span></dt> +<dd><p>The <code class="code">editing-mode</code> variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. This variable can be -set to either &lsquo;<samp>emacs</samp>&rsquo; or &lsquo;<samp>vi</samp>&rsquo;. +set to either &lsquo;<samp class="samp">emacs</samp>&rsquo; or &lsquo;<samp class="samp">vi</samp>&rsquo;. </p> </dd> -<dt id='index-emacs_002dmode_002dstring'><span><code>emacs-mode-string</code><a href='#index-emacs_002dmode_002dstring' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If the <var>show-mode-in-prompt</var> variable is enabled, +<dt><a id="index-emacs_002dmode_002dstring"></a><span><code class="code">emacs-mode-string</code><a class="copiable-link" href="#index-emacs_002dmode_002dstring"> &para;</a></span></dt> +<dd><p>If the <var class="var">show-mode-in-prompt</var> variable is enabled, this string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. -Use the &lsquo;<samp>\1</samp>&rsquo; and &lsquo;<samp>\2</samp>&rsquo; escapes to begin and end sequences of +Use the &lsquo;<samp class="samp">\1</samp>&rsquo; and &lsquo;<samp class="samp">\2</samp>&rsquo; escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. -The default is &lsquo;<samp>@</samp>&rsquo;. +The default is &lsquo;<samp class="samp">@</samp>&rsquo;. </p> </dd> -<dt id='index-enable_002dactive_002dregion'><span><code>enable-active-region</code><a href='#index-enable_002dactive_002dregion' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>The <em>point</em> is the current cursor position, and <em>mark</em> refers -to a saved cursor position (see <a href="#Commands-For-Moving">Commands For Moving</a>). -The text between the point and mark is referred to as the <em>region</em>. -When this variable is set to &lsquo;<samp>On</samp>&rsquo;, Readline allows certain commands -to designate the region as <em>active</em>. +<dt><a id="index-enable_002dactive_002dregion"></a><span><code class="code">enable-active-region</code><a class="copiable-link" href="#index-enable_002dactive_002dregion"> &para;</a></span></dt> +<dd><p>The <em class="dfn">point</em> is the current cursor position, and <em class="dfn">mark</em> refers +to a saved cursor position (see <a class="pxref" href="#Commands-For-Moving">Commands For Moving</a>). +The text between the point and mark is referred to as the <em class="dfn">region</em>. +When this variable is set to &lsquo;<samp class="samp">On</samp>&rsquo;, Readline allows certain commands +to designate the region as <em class="dfn">active</em>. When the region is active, Readline highlights the text in the region using -the value of the <code>active-region-start-color</code>, which defaults to the +the value of the <code class="code">active-region-start-color</code>, which defaults to the string that enables the terminal&rsquo;s standout mode. The active region shows the text inserted by bracketed-paste and any matching text found by incremental and non-incremental history searches. -The default is &lsquo;<samp>On</samp>&rsquo;. +The default is &lsquo;<samp class="samp">On</samp>&rsquo;. </p> </dd> -<dt id='index-enable_002dbracketed_002dpaste'><span><code>enable-bracketed-paste</code><a href='#index-enable_002dbracketed_002dpaste' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>When set to &lsquo;<samp>On</samp>&rsquo;, Readline configures the terminal to insert each +<dt><a id="index-enable_002dbracketed_002dpaste"></a><span><code class="code">enable-bracketed-paste</code><a class="copiable-link" href="#index-enable_002dbracketed_002dpaste"> &para;</a></span></dt> +<dd><p>When set to &lsquo;<samp class="samp">On</samp>&rsquo;, Readline configures the terminal to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. -This is called putting the terminal into <em>bracketed paste mode</em>; +This is called putting the terminal into <em class="dfn">bracketed paste mode</em>; it prevents Readline from executing any editing commands bound to key sequences appearing in the pasted text. -The default is &lsquo;<samp>On</samp>&rsquo;. +The default is &lsquo;<samp class="samp">On</samp>&rsquo;. </p> </dd> -<dt id='index-enable_002dkeypad'><span><code>enable-keypad</code><a href='#index-enable_002dkeypad' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>When set to &lsquo;<samp>on</samp>&rsquo;, Readline will try to enable the application +<dt><a id="index-enable_002dkeypad"></a><span><code class="code">enable-keypad</code><a class="copiable-link" href="#index-enable_002dkeypad"> &para;</a></span></dt> +<dd><p>When set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline will try to enable the application keypad when it is called. Some systems need this to enable the -arrow keys. The default is &lsquo;<samp>off</samp>&rsquo;. +arrow keys. The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt><span><code>enable-meta-key</code></span></dt> -<dd><p>When set to &lsquo;<samp>on</samp>&rsquo;, Readline will try to enable any meta modifier +<dt><code class="code">enable-meta-key</code></dt> +<dd><p>When set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. -The default is &lsquo;<samp>on</samp>&rsquo;. +The default is &lsquo;<samp class="samp">on</samp>&rsquo;. </p> </dd> -<dt id='index-expand_002dtilde'><span><code>expand-tilde</code><a href='#index-expand_002dtilde' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, tilde expansion is performed when Readline -attempts word completion. The default is &lsquo;<samp>off</samp>&rsquo;. +<dt><a id="index-expand_002dtilde"></a><span><code class="code">expand-tilde</code><a class="copiable-link" href="#index-expand_002dtilde"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, tilde expansion is performed when Readline +attempts word completion. The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-history_002dpreserve_002dpoint'><span><code>history-preserve-point</code><a href='#index-history_002dpreserve_002dpoint' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, the history code attempts to place the point (the +<dt><a id="index-history_002dpreserve_002dpoint"></a><span><code class="code">history-preserve-point</code><a class="copiable-link" href="#index-history_002dpreserve_002dpoint"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, the history code attempts to place the point (the current cursor position) at the -same location on each history line retrieved with <code>previous-history</code> -or <code>next-history</code>. The default is &lsquo;<samp>off</samp>&rsquo;. +same location on each history line retrieved with <code class="code">previous-history</code> +or <code class="code">next-history</code>. The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-history_002dsize'><span><code>history-size</code><a href='#index-history_002dsize' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-history_002dsize"></a><span><code class="code">history-size</code><a class="copiable-link" href="#index-history_002dsize"> &para;</a></span></dt> <dd><p>Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. -If an attempt is made to set <var>history-size</var> to a non-numeric value, +If an attempt is made to set <var class="var">history-size</var> to a non-numeric value, the maximum number of history entries will be set to 500. </p> </dd> -<dt id='index-horizontal_002dscroll_002dmode'><span><code>horizontal-scroll-mode</code><a href='#index-horizontal_002dscroll_002dmode' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>This variable can be set to either &lsquo;<samp>on</samp>&rsquo; or &lsquo;<samp>off</samp>&rsquo;. Setting it -to &lsquo;<samp>on</samp>&rsquo; means that the text of the lines being edited will scroll +<dt><a id="index-horizontal_002dscroll_002dmode"></a><span><code class="code">horizontal-scroll-mode</code><a class="copiable-link" href="#index-horizontal_002dscroll_002dmode"> &para;</a></span></dt> +<dd><p>This variable can be set to either &lsquo;<samp class="samp">on</samp>&rsquo; or &lsquo;<samp class="samp">off</samp>&rsquo;. Setting it +to &lsquo;<samp class="samp">on</samp>&rsquo; means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto a new screen line. -This variable is automatically set to &lsquo;<samp>on</samp>&rsquo; for terminals of height 1. -By default, this variable is set to &lsquo;<samp>off</samp>&rsquo;. +This variable is automatically set to &lsquo;<samp class="samp">on</samp>&rsquo; for terminals of height 1. +By default, this variable is set to &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-input_002dmeta'><span><code>input-meta</code><a href='#index-input_002dmeta' class='copiable-anchor'> &para;</a></span></dt> -<dd><span id="index-meta_002dflag"></span> -<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will enable eight-bit input (it +<dt><a class="index-entry-id" id="index-meta_002dflag"></a> +<a id="index-input_002dmeta"></a><span><code class="code">input-meta</code><a class="copiable-link" href="#index-input_002dmeta"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The -default value is &lsquo;<samp>off</samp>&rsquo;, but Readline will set it to &lsquo;<samp>on</samp>&rsquo; if the +default value is &lsquo;<samp class="samp">off</samp>&rsquo;, but Readline will set it to &lsquo;<samp class="samp">on</samp>&rsquo; if the locale contains eight-bit characters. -The name <code>meta-flag</code> is a synonym for this variable. -This variable is dependent on the <code>LC_CTYPE</code> locale category, and +The name <code class="code">meta-flag</code> is a synonym for this variable. +This variable is dependent on the <code class="code">LC_CTYPE</code> locale category, and may change if the locale is changed. </p> </dd> -<dt id='index-isearch_002dterminators'><span><code>isearch-terminators</code><a href='#index-isearch_002dterminators' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-isearch_002dterminators"></a><span><code class="code">isearch-terminators</code><a class="copiable-link" href="#index-isearch_002dterminators"> &para;</a></span></dt> <dd><p>The string of characters that should terminate an incremental search without -subsequently executing the character as a command (see <a href="#Searching">Searching for Commands in the History</a>). -If this variable has not been given a value, the characters <tt class="key">ESC</tt> and -<kbd>C-J</kbd> will terminate an incremental search. +subsequently executing the character as a command (see <a class="pxref" href="#Searching">Searching for Commands in the History</a>). +If this variable has not been given a value, the characters <kbd class="key">ESC</kbd> and +<kbd class="kbd">C-J</kbd> will terminate an incremental search. </p> </dd> -<dt id='index-keymap'><span><code>keymap</code><a href='#index-keymap' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-keymap"></a><span><code class="code">keymap</code><a class="copiable-link" href="#index-keymap"> &para;</a></span></dt> <dd><p>Sets Readline&rsquo;s idea of the current keymap for key binding commands. -Built-in <code>keymap</code> names are -<code>emacs</code>, -<code>emacs-standard</code>, -<code>emacs-meta</code>, -<code>emacs-ctlx</code>, -<code>vi</code>, -<code>vi-move</code>, -<code>vi-command</code>, and -<code>vi-insert</code>. -<code>vi</code> is equivalent to <code>vi-command</code> (<code>vi-move</code> is also a -synonym); <code>emacs</code> is equivalent to <code>emacs-standard</code>. +Built-in <code class="code">keymap</code> names are +<code class="code">emacs</code>, +<code class="code">emacs-standard</code>, +<code class="code">emacs-meta</code>, +<code class="code">emacs-ctlx</code>, +<code class="code">vi</code>, +<code class="code">vi-move</code>, +<code class="code">vi-command</code>, and +<code class="code">vi-insert</code>. +<code class="code">vi</code> is equivalent to <code class="code">vi-command</code> (<code class="code">vi-move</code> is also a +synonym); <code class="code">emacs</code> is equivalent to <code class="code">emacs-standard</code>. Applications may add additional names. -The default value is <code>emacs</code>. -The value of the <code>editing-mode</code> variable also affects the +The default value is <code class="code">emacs</code>. +The value of the <code class="code">editing-mode</code> variable also affects the default keymap. </p> </dd> -<dt><span><code>keyseq-timeout</code></span></dt> +<dt><code class="code">keyseq-timeout</code></dt> <dd><p>Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer @@ -10649,153 +11086,159 @@ key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is -available on the current input source (<code>rl_instream</code> by default). +available on the current input source (<code class="code">rl_instream</code> by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. -The default value is <code>500</code>. +The default value is <code class="code">500</code>. </p> </dd> -<dt><span><code>mark-directories</code></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, completed directory names have a slash -appended. The default is &lsquo;<samp>on</samp>&rsquo;. +<dt><code class="code">mark-directories</code></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, completed directory names have a slash +appended. The default is &lsquo;<samp class="samp">on</samp>&rsquo;. </p> </dd> -<dt id='index-mark_002dmodified_002dlines'><span><code>mark-modified-lines</code><a href='#index-mark_002dmodified_002dlines' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>This variable, when set to &lsquo;<samp>on</samp>&rsquo;, causes Readline to display an -asterisk (&lsquo;<samp>*</samp>&rsquo;) at the start of history lines which have been modified. -This variable is &lsquo;<samp>off</samp>&rsquo; by default. +<dt><a id="index-mark_002dmodified_002dlines"></a><span><code class="code">mark-modified-lines</code><a class="copiable-link" href="#index-mark_002dmodified_002dlines"> &para;</a></span></dt> +<dd><p>This variable, when set to &lsquo;<samp class="samp">on</samp>&rsquo;, causes Readline to display an +asterisk (&lsquo;<samp class="samp">*</samp>&rsquo;) at the start of history lines which have been modified. +This variable is &lsquo;<samp class="samp">off</samp>&rsquo; by default. </p> </dd> -<dt id='index-mark_002dsymlinked_002ddirectories'><span><code>mark-symlinked-directories</code><a href='#index-mark_002dsymlinked_002ddirectories' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, completed names which are symbolic links +<dt><a id="index-mark_002dsymlinked_002ddirectories"></a><span><code class="code">mark-symlinked-directories</code><a class="copiable-link" href="#index-mark_002dsymlinked_002ddirectories"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, completed names which are symbolic links to directories have a slash appended (subject to the value of -<code>mark-directories</code>). -The default is &lsquo;<samp>off</samp>&rsquo;. +<code class="code">mark-directories</code>). +The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-match_002dhidden_002dfiles'><span><code>match-hidden-files</code><a href='#index-match_002dhidden_002dfiles' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>This variable, when set to &lsquo;<samp>on</samp>&rsquo;, causes Readline to match files whose -names begin with a &lsquo;<samp>.</samp>&rsquo; (hidden files) when performing filename +<dt><a id="index-match_002dhidden_002dfiles"></a><span><code class="code">match-hidden-files</code><a class="copiable-link" href="#index-match_002dhidden_002dfiles"> &para;</a></span></dt> +<dd><p>This variable, when set to &lsquo;<samp class="samp">on</samp>&rsquo;, forces Readline to match files whose +names begin with a &lsquo;<samp class="samp">.</samp>&rsquo; (hidden files) when performing filename completion. -If set to &lsquo;<samp>off</samp>&rsquo;, the leading &lsquo;<samp>.</samp>&rsquo; must be -supplied by the user in the filename to be completed. -This variable is &lsquo;<samp>on</samp>&rsquo; by default. +If set to &lsquo;<samp class="samp">off</samp>&rsquo;, the user must include the leading &lsquo;<samp class="samp">.</samp>&rsquo; +in the filename to be completed. +This variable is &lsquo;<samp class="samp">on</samp>&rsquo; by default. </p> </dd> -<dt id='index-menu_002dcomplete_002ddisplay_002dprefix'><span><code>menu-complete-display-prefix</code><a href='#index-menu_002dcomplete_002ddisplay_002dprefix' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, menu completion displays the common prefix of the +<dt><a id="index-menu_002dcomplete_002ddisplay_002dprefix"></a><span><code class="code">menu-complete-display-prefix</code><a class="copiable-link" href="#index-menu_002dcomplete_002ddisplay_002dprefix"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through -the list. The default is &lsquo;<samp>off</samp>&rsquo;. +the list. The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-output_002dmeta'><span><code>output-meta</code><a href='#index-output_002dmeta' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will display characters with the +<dt><a id="index-output_002dmeta"></a><span><code class="code">output-meta</code><a class="copiable-link" href="#index-output_002dmeta"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. -The default is &lsquo;<samp>off</samp>&rsquo;, but Readline will set it to &lsquo;<samp>on</samp>&rsquo; if the +The default is &lsquo;<samp class="samp">off</samp>&rsquo;, but Readline will set it to &lsquo;<samp class="samp">on</samp>&rsquo; if the locale contains eight-bit characters. -This variable is dependent on the <code>LC_CTYPE</code> locale category, and +This variable is dependent on the <code class="code">LC_CTYPE</code> locale category, and may change if the locale is changed. </p> </dd> -<dt id='index-page_002dcompletions'><span><code>page-completions</code><a href='#index-page_002dcompletions' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline uses an internal <code>more</code>-like pager +<dt><a id="index-page_002dcompletions"></a><span><code class="code">page-completions</code><a class="copiable-link" href="#index-page_002dcompletions"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline uses an internal <code class="code">more</code>-like pager to display a screenful of possible completions at a time. -This variable is &lsquo;<samp>on</samp>&rsquo; by default. +This variable is &lsquo;<samp class="samp">on</samp>&rsquo; by default. </p> </dd> -<dt><span><code>print-completions-horizontally</code></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will display completions with matches +<dt><code class="code">print-completions-horizontally</code></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. -The default is &lsquo;<samp>off</samp>&rsquo;. +The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-revert_002dall_002dat_002dnewline'><span><code>revert-all-at-newline</code><a href='#index-revert_002dall_002dat_002dnewline' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will undo all changes to history lines -before returning when <code>accept-line</code> is executed. By default, +<dt><a id="index-revert_002dall_002dat_002dnewline"></a><span><code class="code">revert-all-at-newline</code><a class="copiable-link" href="#index-revert_002dall_002dat_002dnewline"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline will undo all changes to history lines +before returning when <code class="code">accept-line</code> is executed. By default, history lines may be modified and retain individual undo lists across -calls to <code>readline()</code>. The default is &lsquo;<samp>off</samp>&rsquo;. +calls to <code class="code">readline()</code>. The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-show_002dall_002dif_002dambiguous'><span><code>show-all-if-ambiguous</code><a href='#index-show_002dall_002dif_002dambiguous' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-search_002dignore_002dcase"></a><span><code class="code">search-ignore-case</code><a class="copiable-link" href="#index-search_002dignore_002dcase"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, Readline performs incremental and non-incremental +history list searches in a case-insensitive fashion. +The default value is &lsquo;<samp class="samp">off</samp>&rsquo;. +</p> +</dd> +<dt><a id="index-show_002dall_002dif_002dambiguous"></a><span><code class="code">show-all-if-ambiguous</code><a class="copiable-link" href="#index-show_002dall_002dif_002dambiguous"> &para;</a></span></dt> <dd><p>This alters the default behavior of the completion functions. If -set to &lsquo;<samp>on</samp>&rsquo;, +set to &lsquo;<samp class="samp">on</samp>&rsquo;, words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. -The default value is &lsquo;<samp>off</samp>&rsquo;. +The default value is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-show_002dall_002dif_002dunmodified'><span><code>show-all-if-unmodified</code><a href='#index-show_002dall_002dif_002dunmodified' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-show_002dall_002dif_002dunmodified"></a><span><code class="code">show-all-if-unmodified</code><a class="copiable-link" href="#index-show_002dall_002dif_002dunmodified"> &para;</a></span></dt> <dd><p>This alters the default behavior of the completion functions in -a fashion similar to <var>show-all-if-ambiguous</var>. -If set to &lsquo;<samp>on</samp>&rsquo;, +a fashion similar to <var class="var">show-all-if-ambiguous</var>. +If set to &lsquo;<samp class="samp">on</samp>&rsquo;, words which have more than one possible completion without any possible partial completion (the possible completions don&rsquo;t share a common prefix) cause the matches to be listed immediately instead of ringing the bell. -The default value is &lsquo;<samp>off</samp>&rsquo;. +The default value is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-show_002dmode_002din_002dprompt'><span><code>show-mode-in-prompt</code><a href='#index-show_002dmode_002din_002dprompt' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, add a string to the beginning of the prompt +<dt><a id="index-show_002dmode_002din_002dprompt"></a><span><code class="code">show-mode-in-prompt</code><a class="copiable-link" href="#index-show_002dmode_002din_002dprompt"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, add a string to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. -The mode strings are user-settable (e.g., <var>emacs-mode-string</var>). -The default value is &lsquo;<samp>off</samp>&rsquo;. +The mode strings are user-settable (e.g., <var class="var">emacs-mode-string</var>). +The default value is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-skip_002dcompleted_002dtext'><span><code>skip-completed-text</code><a href='#index-skip_002dcompleted_002dtext' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, this alters the default completion behavior when +<dt><a id="index-skip_002dcompleted_002dtext"></a><span><code class="code">skip-completed-text</code><a class="copiable-link" href="#index-skip_002dcompleted_002dtext"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, this alters the default completion behavior when inserting a single match into the line. It&rsquo;s only active when performing completion in the middle of a word. If enabled, Readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor -is after the &lsquo;<samp>e</samp>&rsquo; in &lsquo;<samp>Makefile</samp>&rsquo; will result in &lsquo;<samp>Makefile</samp>&rsquo; -rather than &lsquo;<samp>Makefilefile</samp>&rsquo;, assuming there is a single possible +is after the &lsquo;<samp class="samp">e</samp>&rsquo; in &lsquo;<samp class="samp">Makefile</samp>&rsquo; will result in &lsquo;<samp class="samp">Makefile</samp>&rsquo; +rather than &lsquo;<samp class="samp">Makefilefile</samp>&rsquo;, assuming there is a single possible completion. -The default value is &lsquo;<samp>off</samp>&rsquo;. +The default value is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> -<dt id='index-vi_002dcmd_002dmode_002dstring'><span><code>vi-cmd-mode-string</code><a href='#index-vi_002dcmd_002dmode_002dstring' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If the <var>show-mode-in-prompt</var> variable is enabled, +<dt><a id="index-vi_002dcmd_002dmode_002dstring"></a><span><code class="code">vi-cmd-mode-string</code><a class="copiable-link" href="#index-vi_002dcmd_002dmode_002dstring"> &para;</a></span></dt> +<dd><p>If the <var class="var">show-mode-in-prompt</var> variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. -Use the &lsquo;<samp>\1</samp>&rsquo; and &lsquo;<samp>\2</samp>&rsquo; escapes to begin and end sequences of +Use the &lsquo;<samp class="samp">\1</samp>&rsquo; and &lsquo;<samp class="samp">\2</samp>&rsquo; escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. -The default is &lsquo;<samp>(cmd)</samp>&rsquo;. +The default is &lsquo;<samp class="samp">(cmd)</samp>&rsquo;. </p> </dd> -<dt id='index-vi_002dins_002dmode_002dstring'><span><code>vi-ins-mode-string</code><a href='#index-vi_002dins_002dmode_002dstring' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If the <var>show-mode-in-prompt</var> variable is enabled, +<dt><a id="index-vi_002dins_002dmode_002dstring"></a><span><code class="code">vi-ins-mode-string</code><a class="copiable-link" href="#index-vi_002dins_002dmode_002dstring"> &para;</a></span></dt> +<dd><p>If the <var class="var">show-mode-in-prompt</var> variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. -Use the &lsquo;<samp>\1</samp>&rsquo; and &lsquo;<samp>\2</samp>&rsquo; escapes to begin and end sequences of +Use the &lsquo;<samp class="samp">\1</samp>&rsquo; and &lsquo;<samp class="samp">\2</samp>&rsquo; escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. -The default is &lsquo;<samp>(ins)</samp>&rsquo;. +The default is &lsquo;<samp class="samp">(ins)</samp>&rsquo;. </p> </dd> -<dt id='index-visible_002dstats'><span><code>visible-stats</code><a href='#index-visible_002dstats' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, a character denoting a file&rsquo;s type +<dt><a id="index-visible_002dstats"></a><span><code class="code">visible-stats</code><a class="copiable-link" href="#index-visible_002dstats"> &para;</a></span></dt> +<dd><p>If set to &lsquo;<samp class="samp">on</samp>&rsquo;, a character denoting a file&rsquo;s type is appended to the filename when listing possible -completions. The default is &lsquo;<samp>off</samp>&rsquo;. +completions. The default is &lsquo;<samp class="samp">off</samp>&rsquo;. </p> </dd> </dl> </dd> -<dt><span>Key Bindings</span></dt> +<dt>Key Bindings</dt> <dd><p>The syntax for controlling key bindings in the init file is simple. First you need to find the name of the command that you want to change. The following sections contain tables of the command @@ -10812,124 +11255,124 @@ The name of the key can be expressed in different ways, depending on what you find most comfortable. </p> <p>In addition to command names, Readline allows keys to be bound -to a string that is inserted when the key is pressed (a <var>macro</var>). +to a string that is inserted when the key is pressed (a <var class="var">macro</var>). </p> -<p>The <code>bind&nbsp;<span class="nolinebreak">-p</span></code><!-- /@w --> command displays Readline function names and +<p>The <code class="code">bind&nbsp;-p</code><!-- /@w --> command displays Readline function names and bindings in a format that can be put directly into an initialization file. -See <a href="#Bash-Builtins">Bash Builtin Commands</a>. +See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>. </p> -<dl compact="compact"> -<dt><span><var>keyname</var>:&nbsp;<var><span class="nolinebreak">function-name</span></var>&nbsp;or&nbsp;<var>macro</var><!-- /@w --></span></dt> -<dd><p><var>keyname</var> is the name of a key spelled out in English. For example: +<dl class="table"> +<dt><var class="var">keyname</var>:&nbsp;<var class="var">function-name</var>&nbsp;or&nbsp;<var class="var">macro</var><!-- /@w --></dt> +<dd><p><var class="var">keyname</var> is the name of a key spelled out in English. For example: </p><div class="example"> -<pre class="example">Control-u: universal-argument +<pre class="example-preformatted">Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: &quot;&gt; output&quot; </pre></div> -<p>In the example above, <kbd>C-u</kbd> is bound to the function -<code>universal-argument</code>, -<kbd>M-DEL</kbd> is bound to the function <code>backward-kill-word</code>, and -<kbd>C-o</kbd> is bound to run the macro +<p>In the example above, <kbd class="kbd">C-u</kbd> is bound to the function +<code class="code">universal-argument</code>, +<kbd class="kbd">M-DEL</kbd> is bound to the function <code class="code">backward-kill-word</code>, and +<kbd class="kbd">C-o</kbd> is bound to run the macro expressed on the right hand side (that is, to insert the text -&lsquo;<samp>&gt; output</samp>&rsquo; into the line). +&lsquo;<samp class="samp">&gt; output</samp>&rsquo; into the line). </p> <p>A number of symbolic character names are recognized while processing this key binding syntax: -<var>DEL</var>, -<var>ESC</var>, -<var>ESCAPE</var>, -<var>LFD</var>, -<var>NEWLINE</var>, -<var>RET</var>, -<var>RETURN</var>, -<var>RUBOUT</var>, -<var>SPACE</var>, -<var>SPC</var>, +<var class="var">DEL</var>, +<var class="var">ESC</var>, +<var class="var">ESCAPE</var>, +<var class="var">LFD</var>, +<var class="var">NEWLINE</var>, +<var class="var">RET</var>, +<var class="var">RETURN</var>, +<var class="var">RUBOUT</var>, +<var class="var">SPACE</var>, +<var class="var">SPC</var>, and -<var>TAB</var>. +<var class="var">TAB</var>. </p> </dd> -<dt><span>&quot;<var>keyseq</var>&quot;:&nbsp;<var><span class="nolinebreak">function-name</span></var>&nbsp;or&nbsp;<var>macro</var><!-- /@w --></span></dt> -<dd><p><var>keyseq</var> differs from <var>keyname</var> above in that strings +<dt>&quot;<var class="var">keyseq</var>&quot;:&nbsp;<var class="var">function-name</var>&nbsp;or&nbsp;<var class="var">macro</var><!-- /@w --></dt> +<dd><p><var class="var">keyseq</var> differs from <var class="var">keyname</var> above in that strings denoting an entire key sequence can be specified, by placing -the key sequence in double quotes. Some <small>GNU</small> Emacs style key +the key sequence in double quotes. Some <small class="sc">GNU</small> Emacs style key escapes can be used, as in the following example, but the special character names are not recognized. </p> <div class="example"> -<pre class="example">&quot;\C-u&quot;: universal-argument +<pre class="example-preformatted">&quot;\C-u&quot;: universal-argument &quot;\C-x\C-r&quot;: re-read-init-file &quot;\e[11~&quot;: &quot;Function Key 1&quot; </pre></div> -<p>In the above example, <kbd>C-u</kbd> is again bound to the function -<code>universal-argument</code> (just as it was in the first example), -&lsquo;<samp><kbd>C-x</kbd> <kbd>C-r</kbd></samp>&rsquo; is bound to the function <code>re-read-init-file</code>, -and &lsquo;<samp><span class="key">ESC</span> <span class="key">[</span> <span class="key">1</span> <span class="key">1</span> <span class="key">~</span></samp>&rsquo; is bound to insert -the text &lsquo;<samp>Function Key 1</samp>&rsquo;. +<p>In the above example, <kbd class="kbd">C-u</kbd> is again bound to the function +<code class="code">universal-argument</code> (just as it was in the first example), +&lsquo;<samp class="samp"><kbd class="kbd">C-x</kbd> <kbd class="kbd">C-r</kbd></samp>&rsquo; is bound to the function <code class="code">re-read-init-file</code>, +and &lsquo;<samp class="samp"><kbd class="key">ESC</kbd> <kbd class="key">[</kbd> <kbd class="key">1</kbd> <kbd class="key">1</kbd> <kbd class="key">~</kbd></samp>&rsquo; is bound to insert +the text &lsquo;<samp class="samp">Function Key 1</samp>&rsquo;. </p> </dd> </dl> -<p>The following <small>GNU</small> Emacs style escape sequences are available when +<p>The following <small class="sc">GNU</small> Emacs style escape sequences are available when specifying key sequences: </p> -<dl compact="compact"> -<dt><span><code><kbd>\C-</kbd></code></span></dt> +<dl class="table"> +<dt><code class="code"><kbd class="kbd">\C-</kbd></code></dt> <dd><p>control prefix </p></dd> -<dt><span><code><kbd>\M-</kbd></code></span></dt> +<dt><code class="code"><kbd class="kbd">\M-</kbd></code></dt> <dd><p>meta prefix </p></dd> -<dt><span><code><kbd>\e</kbd></code></span></dt> +<dt><code class="code"><kbd class="kbd">\e</kbd></code></dt> <dd><p>an escape character </p></dd> -<dt><span><code><kbd>\\</kbd></code></span></dt> +<dt><code class="code"><kbd class="kbd">\\</kbd></code></dt> <dd><p>backslash </p></dd> -<dt><span><code><kbd>\&quot;</kbd></code></span></dt> -<dd><p><tt class="key">&quot;</tt>, a double quotation mark +<dt><code class="code"><kbd class="kbd">\&quot;</kbd></code></dt> +<dd><p><kbd class="key">&quot;</kbd>, a double quotation mark </p></dd> -<dt><span><code><kbd>\'</kbd></code></span></dt> -<dd><p><tt class="key">'</tt>, a single quote or apostrophe +<dt><code class="code"><kbd class="kbd">\'</kbd></code></dt> +<dd><p><kbd class="key">'</kbd>, a single quote or apostrophe </p></dd> </dl> -<p>In addition to the <small>GNU</small> Emacs style escape sequences, a second +<p>In addition to the <small class="sc">GNU</small> Emacs style escape sequences, a second set of backslash escapes is available: </p> -<dl compact="compact"> -<dt><span><code>\a</code></span></dt> +<dl class="table"> +<dt><code class="code">\a</code></dt> <dd><p>alert (bell) </p></dd> -<dt><span><code>\b</code></span></dt> +<dt><code class="code">\b</code></dt> <dd><p>backspace </p></dd> -<dt><span><code>\d</code></span></dt> +<dt><code class="code">\d</code></dt> <dd><p>delete </p></dd> -<dt><span><code>\f</code></span></dt> +<dt><code class="code">\f</code></dt> <dd><p>form feed </p></dd> -<dt><span><code>\n</code></span></dt> +<dt><code class="code">\n</code></dt> <dd><p>newline </p></dd> -<dt><span><code>\r</code></span></dt> +<dt><code class="code">\r</code></dt> <dd><p>carriage return </p></dd> -<dt><span><code>\t</code></span></dt> +<dt><code class="code">\t</code></dt> <dd><p>horizontal tab </p></dd> -<dt><span><code>\v</code></span></dt> +<dt><code class="code">\v</code></dt> <dd><p>vertical tab </p></dd> -<dt><span><code>\<var>nnn</var></code></span></dt> -<dd><p>the eight-bit character whose value is the octal value <var>nnn</var> +<dt><code class="code">\<var class="var">nnn</var></code></dt> +<dd><p>the eight-bit character whose value is the octal value <var class="var">nnn</var> (one to three digits) </p></dd> -<dt><span><code>\x<var>HH</var></code></span></dt> -<dd><p>the eight-bit character whose value is the hexadecimal value <var>HH</var> +<dt><code class="code">\x<var class="var">HH</var></code></dt> +<dd><p>the eight-bit character whose value is the hexadecimal value <var class="var">HH</var> (one or two hex digits) </p></dd> </dl> @@ -10939,11 +11382,11 @@ be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, -including &lsquo;<samp>&quot;</samp>&rsquo; and &lsquo;<samp>'</samp>&rsquo;. -For example, the following binding will make &lsquo;<samp><kbd>C-x</kbd> \</samp>&rsquo; -insert a single &lsquo;<samp>\</samp>&rsquo; into the line: +including &lsquo;<samp class="samp">&quot;</samp>&rsquo; and &lsquo;<samp class="samp">'</samp>&rsquo;. +For example, the following binding will make &lsquo;<samp class="samp"><kbd class="kbd">C-x</kbd> \</samp>&rsquo; +insert a single &lsquo;<samp class="samp">\</samp>&rsquo; into the line: </p><div class="example"> -<pre class="example">&quot;\C-x\\&quot;: &quot;\\&quot; +<pre class="example-preformatted">&quot;\C-x\\&quot;: &quot;\\&quot; </pre></div> </dd> @@ -10951,97 +11394,97 @@ insert a single &lsquo;<samp>\</samp>&rsquo; into the line: <hr> </div> -<div class="subsection" id="Conditional-Init-Constructs"> -<div class="header"> +<div class="subsection-level-extent" id="Conditional-Init-Constructs"> +<div class="nav-panel"> <p> Next: <a href="#Sample-Init-File" accesskey="n" rel="next">Sample Init File</a>, Previous: <a href="#Readline-Init-File-Syntax" accesskey="p" rel="prev">Readline Init File Syntax</a>, Up: <a href="#Readline-Init-File" accesskey="u" rel="up">Readline Init File</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Conditional-Init-Constructs-1"></span><h4 class="subsection">8.3.2 Conditional Init Constructs</h4> +<h4 class="subsection" id="Conditional-Init-Constructs-1"><span>8.3.2 Conditional Init Constructs<a class="copiable-link" href="#Conditional-Init-Constructs-1"> &para;</a></span></h4> <p>Readline implements a facility similar in spirit to the conditional compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used. </p> -<dl compact="compact"> -<dt><span><code>$if</code></span></dt> -<dd><p>The <code>$if</code> construct allows bindings to be made based on the +<dl class="table"> +<dt><code class="code">$if</code></dt> +<dd><p>The <code class="code">$if</code> construct allows bindings to be made based on the editing mode, the terminal being used, or the application using Readline. The text of the test, after any comparison operator, extends to the end of the line; unless otherwise noted, no characters are required to isolate it. </p> -<dl compact="compact"> -<dt><span><code>mode</code></span></dt> -<dd><p>The <code>mode=</code> form of the <code>$if</code> directive is used to test -whether Readline is in <code>emacs</code> or <code>vi</code> mode. +<dl class="table"> +<dt><code class="code">mode</code></dt> +<dd><p>The <code class="code">mode=</code> form of the <code class="code">$if</code> directive is used to test +whether Readline is in <code class="code">emacs</code> or <code class="code">vi</code> mode. This may be used in conjunction -with the &lsquo;<samp>set keymap</samp>&rsquo; command, for instance, to set bindings in -the <code>emacs-standard</code> and <code>emacs-ctlx</code> keymaps only if -Readline is starting out in <code>emacs</code> mode. +with the &lsquo;<samp class="samp">set keymap</samp>&rsquo; command, for instance, to set bindings in +the <code class="code">emacs-standard</code> and <code class="code">emacs-ctlx</code> keymaps only if +Readline is starting out in <code class="code">emacs</code> mode. </p> </dd> -<dt><span><code>term</code></span></dt> -<dd><p>The <code>term=</code> form may be used to include terminal-specific +<dt><code class="code">term</code></dt> +<dd><p>The <code class="code">term=</code> form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal&rsquo;s function keys. The word on the right side of the -&lsquo;<samp>=</samp>&rsquo; is tested against both the full name of the terminal and -the portion of the terminal name before the first &lsquo;<samp>-</samp>&rsquo;. This -allows <code>sun</code> to match both <code>sun</code> and <code>sun-cmd</code>, +&lsquo;<samp class="samp">=</samp>&rsquo; is tested against both the full name of the terminal and +the portion of the terminal name before the first &lsquo;<samp class="samp">-</samp>&rsquo;. This +allows <code class="code">sun</code> to match both <code class="code">sun</code> and <code class="code">sun-cmd</code>, for instance. </p> </dd> -<dt><span><code>version</code></span></dt> -<dd><p>The <code>version</code> test may be used to perform comparisons against +<dt><code class="code">version</code></dt> +<dd><p>The <code class="code">version</code> test may be used to perform comparisons against specific Readline versions. -The <code>version</code> expands to the current Readline version. +The <code class="code">version</code> expands to the current Readline version. The set of comparison operators includes -&lsquo;<samp>=</samp>&rsquo; (and &lsquo;<samp>==</samp>&rsquo;), &lsquo;<samp>!=</samp>&rsquo;, &lsquo;<samp>&lt;=</samp>&rsquo;, &lsquo;<samp>&gt;=</samp>&rsquo;, &lsquo;<samp>&lt;</samp>&rsquo;, -and &lsquo;<samp>&gt;</samp>&rsquo;. +&lsquo;<samp class="samp">=</samp>&rsquo; (and &lsquo;<samp class="samp">==</samp>&rsquo;), &lsquo;<samp class="samp">!=</samp>&rsquo;, &lsquo;<samp class="samp">&lt;=</samp>&rsquo;, &lsquo;<samp class="samp">&gt;=</samp>&rsquo;, &lsquo;<samp class="samp">&lt;</samp>&rsquo;, +and &lsquo;<samp class="samp">&gt;</samp>&rsquo;. The version number supplied on the right side of the operator consists of a major version number, an optional decimal point, and an optional -minor version (e.g., &lsquo;<samp>7.1</samp>&rsquo;). If the minor version is omitted, it -is assumed to be &lsquo;<samp>0</samp>&rsquo;. -The operator may be separated from the string <code>version</code> and +minor version (e.g., &lsquo;<samp class="samp">7.1</samp>&rsquo;). If the minor version is omitted, it +is assumed to be &lsquo;<samp class="samp">0</samp>&rsquo;. +The operator may be separated from the string <code class="code">version</code> and from the version number argument by whitespace. The following example sets a variable if the Readline version being used is 7.0 or newer: </p><div class="example"> -<pre class="example">$if version &gt;= 7.0 +<pre class="example-preformatted">$if version &gt;= 7.0 set show-mode-in-prompt on $endif </pre></div> </dd> -<dt><span><code>application</code></span></dt> -<dd><p>The <var>application</var> construct is used to include +<dt><code class="code">application</code></dt> +<dd><p>The <var class="var">application</var> construct is used to include application-specific settings. Each program using the Readline -library sets the <var>application name</var>, and you can test for +library sets the <var class="var">application name</var>, and you can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in Bash: </p><div class="example"> -<pre class="example">$if Bash +<pre class="example-preformatted">$if Bash # Quote the current or previous word &quot;\C-xq&quot;: &quot;\eb\&quot;\ef\&quot;&quot; $endif </pre></div> </dd> -<dt><span><code>variable</code></span></dt> -<dd><p>The <var>variable</var> construct provides simple equality tests for Readline +<dt><code class="code">variable</code></dt> +<dd><p>The <var class="var">variable</var> construct provides simple equality tests for Readline variables and values. -The permitted comparison operators are &lsquo;<samp>=</samp>&rsquo;, &lsquo;<samp>==</samp>&rsquo;, and &lsquo;<samp>!=</samp>&rsquo;. +The permitted comparison operators are &lsquo;<samp class="samp">=</samp>&rsquo;, &lsquo;<samp class="samp">==</samp>&rsquo;, and &lsquo;<samp class="samp">!=</samp>&rsquo;. The variable name must be separated from the comparison operator by whitespace; the operator may be separated from the value on the right hand side by whitespace. Both string and boolean variables may be tested. Boolean variables must be -tested against the values <var>on</var> and <var>off</var>. -The following example is equivalent to the <code>mode=emacs</code> test described +tested against the values <var class="var">on</var> and <var class="var">off</var>. +The following example is equivalent to the <code class="code">mode=emacs</code> test described above: </p><div class="example"> -<pre class="example">$if editing-mode == emacs +<pre class="example-preformatted">$if editing-mode == emacs set show-mode-in-prompt on $endif </pre></div> @@ -11049,40 +11492,40 @@ $endif </dl> </dd> -<dt><span><code>$endif</code></span></dt> +<dt><code class="code">$endif</code></dt> <dd><p>This command, as seen in the previous example, terminates an -<code>$if</code> command. +<code class="code">$if</code> command. </p> </dd> -<dt><span><code>$else</code></span></dt> -<dd><p>Commands in this branch of the <code>$if</code> directive are executed if +<dt><code class="code">$else</code></dt> +<dd><p>Commands in this branch of the <code class="code">$if</code> directive are executed if the test fails. </p> </dd> -<dt><span><code>$include</code></span></dt> +<dt><code class="code">$include</code></dt> <dd><p>This directive takes a single filename as an argument and reads commands and bindings from that file. -For example, the following directive reads from <samp>/etc/inputrc</samp>: +For example, the following directive reads from <samp class="file">/etc/inputrc</samp>: </p><div class="example"> -<pre class="example">$include /etc/inputrc +<pre class="example-preformatted">$include /etc/inputrc </pre></div> </dd> </dl> <hr> </div> -<div class="subsection" id="Sample-Init-File"> -<div class="header"> +<div class="subsection-level-extent" id="Sample-Init-File"> +<div class="nav-panel"> <p> Previous: <a href="#Conditional-Init-Constructs" accesskey="p" rel="prev">Conditional Init Constructs</a>, Up: <a href="#Readline-Init-File" accesskey="u" rel="up">Readline Init File</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Sample-Init-File-1"></span><h4 class="subsection">8.3.3 Sample Init File</h4> +<h4 class="subsection" id="Sample-Init-File-1"><span>8.3.3 Sample Init File<a class="copiable-link" href="#Sample-Init-File-1"> &para;</a></span></h4> -<p>Here is an example of an <var>inputrc</var> file. This illustrates key +<p>Here is an example of an <var class="var">inputrc</var> file. This illustrates key binding, variable assignment, and conditional syntax. </p> <div class="example"> -<pre class="example"># This file controls the behaviour of line input editing for +<pre class="example-preformatted"># This file controls the behaviour of line input editing for # programs that use the GNU Readline library. Existing # programs include FTP, Bash, and GDB. # @@ -11186,27 +11629,27 @@ $endif <hr> </div> </div> -<div class="section" id="Bindable-Readline-Commands"> -<div class="header"> +<div class="section-level-extent" id="Bindable-Readline-Commands"> +<div class="nav-panel"> <p> Next: <a href="#Readline-vi-Mode" accesskey="n" rel="next">Readline vi Mode</a>, Previous: <a href="#Readline-Init-File" accesskey="p" rel="prev">Readline Init File</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bindable-Readline-Commands-1"></span><h3 class="section">8.4 Bindable Readline Commands</h3> +<h3 class="section" id="Bindable-Readline-Commands-1"><span>8.4 Bindable Readline Commands<a class="copiable-link" href="#Bindable-Readline-Commands-1"> &para;</a></span></h3> <p>This section describes Readline commands that may be bound to key sequences. You can list your key bindings by executing -<code>bind&nbsp;<span class="nolinebreak">-P</span></code><!-- /@w --> or, for a more terse format, suitable for an -<var>inputrc</var> file, <code>bind&nbsp;<span class="nolinebreak">-p</span></code><!-- /@w -->. (See <a href="#Bash-Builtins">Bash Builtin Commands</a>.) +<code class="code">bind&nbsp;-P</code><!-- /@w --> or, for a more terse format, suitable for an +<var class="var">inputrc</var> file, <code class="code">bind&nbsp;-p</code><!-- /@w -->. (See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>.) Command names without an accompanying key sequence are unbound by default. </p> -<p>In the following descriptions, <em>point</em> refers to the current cursor -position, and <em>mark</em> refers to a cursor position saved by the -<code>set-mark</code> command. -The text between the point and mark is referred to as the <em>region</em>. +<p>In the following descriptions, <em class="dfn">point</em> refers to the current cursor +position, and <em class="dfn">mark</em> refers to a cursor position saved by the +<code class="code">set-mark</code> command. +The text between the point and mark is referred to as the <em class="dfn">region</em>. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Commands-For-Moving" accesskey="1">Commands For Moving</a></li> <li><a href="#Commands-For-History" accesskey="2">Commands For Manipulating The History</a></li> <li><a href="#Commands-For-Text" accesskey="3">Commands For Changing Text</a></li> @@ -11217,57 +11660,57 @@ The text between the point and mark is referred to as the <em>region</em>. <li><a href="#Miscellaneous-Commands" accesskey="8">Some Miscellaneous Commands</a></li> </ul> <hr> -<div class="subsection" id="Commands-For-Moving"> -<div class="header"> +<div class="subsection-level-extent" id="Commands-For-Moving"> +<div class="nav-panel"> <p> Next: <a href="#Commands-For-History" accesskey="n" rel="next">Commands For Manipulating The History</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Commands-For-Moving-1"></span><h4 class="subsection">8.4.1 Commands For Moving</h4> -<dl compact="compact"> -<dt id='index-beginning_002dof_002dline-_0028C_002da_0029'><span><code>beginning-of-line (C-a)</code><a href='#index-beginning_002dof_002dline-_0028C_002da_0029' class='copiable-anchor'> &para;</a></span></dt> +<h4 class="subsection" id="Commands-For-Moving-1"><span>8.4.1 Commands For Moving<a class="copiable-link" href="#Commands-For-Moving-1"> &para;</a></span></h4> +<dl class="ftable"> +<dt><a id="index-beginning_002dof_002dline-_0028C_002da_0029"></a><span><code class="code">beginning-of-line (C-a)</code><a class="copiable-link" href="#index-beginning_002dof_002dline-_0028C_002da_0029"> &para;</a></span></dt> <dd><p>Move to the start of the current line. </p> </dd> -<dt id='index-end_002dof_002dline-_0028C_002de_0029'><span><code>end-of-line (C-e)</code><a href='#index-end_002dof_002dline-_0028C_002de_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-end_002dof_002dline-_0028C_002de_0029"></a><span><code class="code">end-of-line (C-e)</code><a class="copiable-link" href="#index-end_002dof_002dline-_0028C_002de_0029"> &para;</a></span></dt> <dd><p>Move to the end of the line. </p> </dd> -<dt id='index-forward_002dchar-_0028C_002df_0029'><span><code>forward-char (C-f)</code><a href='#index-forward_002dchar-_0028C_002df_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-forward_002dchar-_0028C_002df_0029"></a><span><code class="code">forward-char (C-f)</code><a class="copiable-link" href="#index-forward_002dchar-_0028C_002df_0029"> &para;</a></span></dt> <dd><p>Move forward a character. </p> </dd> -<dt id='index-backward_002dchar-_0028C_002db_0029'><span><code>backward-char (C-b)</code><a href='#index-backward_002dchar-_0028C_002db_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-backward_002dchar-_0028C_002db_0029"></a><span><code class="code">backward-char (C-b)</code><a class="copiable-link" href="#index-backward_002dchar-_0028C_002db_0029"> &para;</a></span></dt> <dd><p>Move back a character. </p> </dd> -<dt id='index-forward_002dword-_0028M_002df_0029'><span><code>forward-word (M-f)</code><a href='#index-forward_002dword-_0028M_002df_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-forward_002dword-_0028M_002df_0029"></a><span><code class="code">forward-word (M-f)</code><a class="copiable-link" href="#index-forward_002dword-_0028M_002df_0029"> &para;</a></span></dt> <dd><p>Move forward to the end of the next word. Words are composed of letters and digits. </p> </dd> -<dt id='index-backward_002dword-_0028M_002db_0029'><span><code>backward-word (M-b)</code><a href='#index-backward_002dword-_0028M_002db_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-backward_002dword-_0028M_002db_0029"></a><span><code class="code">backward-word (M-b)</code><a class="copiable-link" href="#index-backward_002dword-_0028M_002db_0029"> &para;</a></span></dt> <dd><p>Move back to the start of the current or previous word. Words are composed of letters and digits. </p> </dd> -<dt id='index-shell_002dforward_002dword-_0028M_002dC_002df_0029'><span><code>shell-forward-word (M-C-f)</code><a href='#index-shell_002dforward_002dword-_0028M_002dC_002df_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-shell_002dforward_002dword-_0028M_002dC_002df_0029"></a><span><code class="code">shell-forward-word (M-C-f)</code><a class="copiable-link" href="#index-shell_002dforward_002dword-_0028M_002dC_002df_0029"> &para;</a></span></dt> <dd><p>Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters. </p> </dd> -<dt id='index-shell_002dbackward_002dword-_0028M_002dC_002db_0029'><span><code>shell-backward-word (M-C-b)</code><a href='#index-shell_002dbackward_002dword-_0028M_002dC_002db_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-shell_002dbackward_002dword-_0028M_002dC_002db_0029"></a><span><code class="code">shell-backward-word (M-C-b)</code><a class="copiable-link" href="#index-shell_002dbackward_002dword-_0028M_002dC_002db_0029"> &para;</a></span></dt> <dd><p>Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters. </p> </dd> -<dt id='index-previous_002dscreen_002dline-_0028_0029'><span><code>previous-screen-line ()</code><a href='#index-previous_002dscreen_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-previous_002dscreen_002dline-_0028_0029"></a><span><code class="code">previous-screen-line ()</code><a class="copiable-link" href="#index-previous_002dscreen_002dline-_0028_0029"> &para;</a></span></dt> <dd><p>Attempt to move point to the same physical screen column on the previous physical screen line. This will not have the desired effect if the current Readline line does not take up more than one physical line or if point is not greater than the length of the prompt plus the screen width. </p> </dd> -<dt id='index-next_002dscreen_002dline-_0028_0029'><span><code>next-screen-line ()</code><a href='#index-next_002dscreen_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-next_002dscreen_002dline-_0028_0029"></a><span><code class="code">next-screen-line ()</code><a class="copiable-link" href="#index-next_002dscreen_002dline-_0028_0029"> &para;</a></span></dt> <dd><p>Attempt to move point to the same physical screen column on the next physical screen line. This will not have the desired effect if the current Readline line does not take up more than one physical line or if the length @@ -11275,19 +11718,19 @@ of the current Readline line is not greater than the length of the prompt plus the screen width. </p> </dd> -<dt id='index-clear_002ddisplay-_0028M_002dC_002dl_0029'><span><code>clear-display (M-C-l)</code><a href='#index-clear_002ddisplay-_0028M_002dC_002dl_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-clear_002ddisplay-_0028M_002dC_002dl_0029"></a><span><code class="code">clear-display (M-C-l)</code><a class="copiable-link" href="#index-clear_002ddisplay-_0028M_002dC_002dl_0029"> &para;</a></span></dt> <dd><p>Clear the screen and, if possible, the terminal&rsquo;s scrollback buffer, then redraw the current line, leaving the current line at the top of the screen. </p> </dd> -<dt id='index-clear_002dscreen-_0028C_002dl_0029'><span><code>clear-screen (C-l)</code><a href='#index-clear_002dscreen-_0028C_002dl_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-clear_002dscreen-_0028C_002dl_0029"></a><span><code class="code">clear-screen (C-l)</code><a class="copiable-link" href="#index-clear_002dscreen-_0028C_002dl_0029"> &para;</a></span></dt> <dd><p>Clear the screen, then redraw the current line, leaving the current line at the top of the screen. </p> </dd> -<dt id='index-redraw_002dcurrent_002dline-_0028_0029'><span><code>redraw-current-line ()</code><a href='#index-redraw_002dcurrent_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-redraw_002dcurrent_002dline-_0028_0029"></a><span><code class="code">redraw-current-line ()</code><a class="copiable-link" href="#index-redraw_002dcurrent_002dline-_0028_0029"> &para;</a></span></dt> <dd><p>Refresh the current line. By default, this is unbound. </p> </dd> @@ -11295,67 +11738,67 @@ leaving the current line at the top of the screen. <hr> </div> -<div class="subsection" id="Commands-For-History"> -<div class="header"> +<div class="subsection-level-extent" id="Commands-For-History"> +<div class="nav-panel"> <p> Next: <a href="#Commands-For-Text" accesskey="n" rel="next">Commands For Changing Text</a>, Previous: <a href="#Commands-For-Moving" accesskey="p" rel="prev">Commands For Moving</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Commands-For-Manipulating-The-History"></span><h4 class="subsection">8.4.2 Commands For Manipulating The History</h4> +<h4 class="subsection" id="Commands-For-Manipulating-The-History"><span>8.4.2 Commands For Manipulating The History<a class="copiable-link" href="#Commands-For-Manipulating-The-History"> &para;</a></span></h4> -<dl compact="compact"> -<dt id='index-accept_002dline-_0028Newline-or-Return_0029'><span><code>accept-line (Newline or Return)</code><a href='#index-accept_002dline-_0028Newline-or-Return_0029' class='copiable-anchor'> &para;</a></span></dt> +<dl class="ftable"> +<dt><a id="index-accept_002dline-_0028Newline-or-Return_0029"></a><span><code class="code">accept-line (Newline or Return)</code><a class="copiable-link" href="#index-accept_002dline-_0028Newline-or-Return_0029"> &para;</a></span></dt> <dd><p>Accept the line regardless of where the cursor is. If this line is non-empty, add it to the history list according to the setting of -the <code>HISTCONTROL</code> and <code>HISTIGNORE</code> variables. +the <code class="env">HISTCONTROL</code> and <code class="env">HISTIGNORE</code> variables. If this line is a modified history line, then restore the history line to its original state. </p> </dd> -<dt id='index-previous_002dhistory-_0028C_002dp_0029'><span><code>previous-history (C-p)</code><a href='#index-previous_002dhistory-_0028C_002dp_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-previous_002dhistory-_0028C_002dp_0029"></a><span><code class="code">previous-history (C-p)</code><a class="copiable-link" href="#index-previous_002dhistory-_0028C_002dp_0029"> &para;</a></span></dt> <dd><p>Move &lsquo;back&rsquo; through the history list, fetching the previous command. </p> </dd> -<dt id='index-next_002dhistory-_0028C_002dn_0029'><span><code>next-history (C-n)</code><a href='#index-next_002dhistory-_0028C_002dn_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-next_002dhistory-_0028C_002dn_0029"></a><span><code class="code">next-history (C-n)</code><a class="copiable-link" href="#index-next_002dhistory-_0028C_002dn_0029"> &para;</a></span></dt> <dd><p>Move &lsquo;forward&rsquo; through the history list, fetching the next command. </p> </dd> -<dt id='index-beginning_002dof_002dhistory-_0028M_002d_003c_0029'><span><code>beginning-of-history (M-&lt;)</code><a href='#index-beginning_002dof_002dhistory-_0028M_002d_003c_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"></a><span><code class="code">beginning-of-history (M-&lt;)</code><a class="copiable-link" href="#index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"> &para;</a></span></dt> <dd><p>Move to the first line in the history. </p> </dd> -<dt id='index-end_002dof_002dhistory-_0028M_002d_003e_0029'><span><code>end-of-history (M-&gt;)</code><a href='#index-end_002dof_002dhistory-_0028M_002d_003e_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-end_002dof_002dhistory-_0028M_002d_003e_0029"></a><span><code class="code">end-of-history (M-&gt;)</code><a class="copiable-link" href="#index-end_002dof_002dhistory-_0028M_002d_003e_0029"> &para;</a></span></dt> <dd><p>Move to the end of the input history, i.e., the line currently being entered. </p> </dd> -<dt id='index-reverse_002dsearch_002dhistory-_0028C_002dr_0029'><span><code>reverse-search-history (C-r)</code><a href='#index-reverse_002dsearch_002dhistory-_0028C_002dr_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"></a><span><code class="code">reverse-search-history (C-r)</code><a class="copiable-link" href="#index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"> &para;</a></span></dt> <dd><p>Search backward starting at the current line and moving &lsquo;up&rsquo; through the history as necessary. This is an incremental search. This command sets the region to the matched text and activates the mark. </p> </dd> -<dt id='index-forward_002dsearch_002dhistory-_0028C_002ds_0029'><span><code>forward-search-history (C-s)</code><a href='#index-forward_002dsearch_002dhistory-_0028C_002ds_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-forward_002dsearch_002dhistory-_0028C_002ds_0029"></a><span><code class="code">forward-search-history (C-s)</code><a class="copiable-link" href="#index-forward_002dsearch_002dhistory-_0028C_002ds_0029"> &para;</a></span></dt> <dd><p>Search forward starting at the current line and moving &lsquo;down&rsquo; through the history as necessary. This is an incremental search. This command sets the region to the matched text and activates the mark. </p> </dd> -<dt id='index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029'><span><code>non-incremental-reverse-search-history (M-p)</code><a href='#index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"></a><span><code class="code">non-incremental-reverse-search-history (M-p)</code><a class="copiable-link" href="#index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"> &para;</a></span></dt> <dd><p>Search backward starting at the current line and moving &lsquo;up&rsquo; through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. </p> </dd> -<dt id='index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029'><span><code>non-incremental-forward-search-history (M-n)</code><a href='#index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"></a><span><code class="code">non-incremental-forward-search-history (M-n)</code><a class="copiable-link" href="#index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"> &para;</a></span></dt> <dd><p>Search forward starting at the current line and moving &lsquo;down&rsquo; through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. </p> </dd> -<dt id='index-history_002dsearch_002dforward-_0028_0029'><span><code>history-search-forward ()</code><a href='#index-history_002dsearch_002dforward-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-history_002dsearch_002dforward-_0028_0029"></a><span><code class="code">history-search-forward ()</code><a class="copiable-link" href="#index-history_002dsearch_002dforward-_0028_0029"> &para;</a></span></dt> <dd><p>Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. @@ -11363,7 +11806,7 @@ This is a non-incremental search. By default, this command is unbound. </p> </dd> -<dt id='index-history_002dsearch_002dbackward-_0028_0029'><span><code>history-search-backward ()</code><a href='#index-history_002dsearch_002dbackward-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-history_002dsearch_002dbackward-_0028_0029"></a><span><code class="code">history-search-backward ()</code><a class="copiable-link" href="#index-history_002dsearch_002dbackward-_0028_0029"> &para;</a></span></dt> <dd><p>Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. @@ -11371,7 +11814,7 @@ This is a non-incremental search. By default, this command is unbound. </p> </dd> -<dt id='index-history_002dsubstring_002dsearch_002dforward-_0028_0029'><span><code>history-substring-search-forward ()</code><a href='#index-history_002dsubstring_002dsearch_002dforward-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-history_002dsubstring_002dsearch_002dforward-_0028_0029"></a><span><code class="code">history-substring-search-forward ()</code><a class="copiable-link" href="#index-history_002dsubstring_002dsearch_002dforward-_0028_0029"> &para;</a></span></dt> <dd><p>Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. @@ -11379,7 +11822,7 @@ This is a non-incremental search. By default, this command is unbound. </p> </dd> -<dt id='index-history_002dsubstring_002dsearch_002dbackward-_0028_0029'><span><code>history-substring-search-backward ()</code><a href='#index-history_002dsubstring_002dsearch_002dbackward-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"></a><span><code class="code">history-substring-search-backward ()</code><a class="copiable-link" href="#index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"> &para;</a></span></dt> <dd><p>Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. @@ -11387,32 +11830,32 @@ This is a non-incremental search. By default, this command is unbound. </p> </dd> -<dt id='index-yank_002dnth_002darg-_0028M_002dC_002dy_0029'><span><code>yank-nth-arg (M-C-y)</code><a href='#index-yank_002dnth_002darg-_0028M_002dC_002dy_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"></a><span><code class="code">yank-nth-arg (M-C-y)</code><a class="copiable-link" href="#index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"> &para;</a></span></dt> <dd><p>Insert the first argument to the previous command (usually the second word on the previous line) at point. -With an argument <var>n</var>, -insert the <var>n</var>th word from the previous command (the words +With an argument <var class="var">n</var>, +insert the <var class="var">n</var>th word from the previous command (the words in the previous command begin with word 0). A negative argument -inserts the <var>n</var>th word from the end of the previous command. -Once the argument <var>n</var> is computed, the argument is extracted -as if the &lsquo;<samp>!<var>n</var></samp>&rsquo; history expansion had been specified. +inserts the <var class="var">n</var>th word from the end of the previous command. +Once the argument <var class="var">n</var> is computed, the argument is extracted +as if the &lsquo;<samp class="samp">!<var class="var">n</var></samp>&rsquo; history expansion had been specified. </p> </dd> -<dt id='index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029'><span><code>yank-last-arg (M-. or M-_)</code><a href='#index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"></a><span><code class="code">yank-last-arg (M-. or M-_)</code><a class="copiable-link" href="#index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"> &para;</a></span></dt> <dd><p>Insert last argument to the previous command (the last word of the previous history entry). -With a numeric argument, behave exactly like <code>yank-nth-arg</code>. -Successive calls to <code>yank-last-arg</code> move back through the history +With a numeric argument, behave exactly like <code class="code">yank-nth-arg</code>. +Successive calls to <code class="code">yank-last-arg</code> move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, -as if the &lsquo;<samp>!$</samp>&rsquo; history expansion had been specified. +as if the &lsquo;<samp class="samp">!$</samp>&rsquo; history expansion had been specified. </p> </dd> -<dt id='index-operate_002dand_002dget_002dnext-_0028C_002do_0029'><span><code>operate-and-get-next (C-o)</code><a href='#index-operate_002dand_002dget_002dnext-_0028C_002do_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-operate_002dand_002dget_002dnext-_0028C_002do_0029"></a><span><code class="code">operate-and-get-next (C-o)</code><a class="copiable-link" href="#index-operate_002dand_002dget_002dnext-_0028C_002do_0029"> &para;</a></span></dt> <dd><p>Accept the current line for return to the calling application as if a newline had been entered, and fetch the next line relative to the current line from the history @@ -11421,7 +11864,7 @@ A numeric argument, if supplied, specifies the history entry to use instead of the current line. </p> </dd> -<dt id='index-fetch_002dhistory-_0028_0029'><span><code>fetch-history ()</code><a href='#index-fetch_002dhistory-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-fetch_002dhistory-_0028_0029"></a><span><code class="code">fetch-history ()</code><a class="copiable-link" href="#index-fetch_002dhistory-_0028_0029"> &para;</a></span></dt> <dd><p>With a numeric argument, fetch that entry from the history list and make it the current line. Without an argument, move back to the first entry in the history list. @@ -11431,63 +11874,63 @@ Without an argument, move back to the first entry in the history list. <hr> </div> -<div class="subsection" id="Commands-For-Text"> -<div class="header"> +<div class="subsection-level-extent" id="Commands-For-Text"> +<div class="nav-panel"> <p> Next: <a href="#Commands-For-Killing" accesskey="n" rel="next">Killing And Yanking</a>, Previous: <a href="#Commands-For-History" accesskey="p" rel="prev">Commands For Manipulating The History</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Commands-For-Changing-Text"></span><h4 class="subsection">8.4.3 Commands For Changing Text</h4> +<h4 class="subsection" id="Commands-For-Changing-Text"><span>8.4.3 Commands For Changing Text<a class="copiable-link" href="#Commands-For-Changing-Text"> &para;</a></span></h4> -<dl compact="compact"> -<dt id='index-end_002dof_002dfile-_0028usually-C_002dd_0029'><span><code><i>end-of-file</i> (usually C-d)</code><a href='#index-end_002dof_002dfile-_0028usually-C_002dd_0029' class='copiable-anchor'> &para;</a></span></dt> +<dl class="ftable"> +<dt><a id="index-end_002dof_002dfile-_0028usually-C_002dd_0029"></a><span><code class="code"><i class="i">end-of-file</i> (usually C-d)</code><a class="copiable-link" href="#index-end_002dof_002dfile-_0028usually-C_002dd_0029"> &para;</a></span></dt> <dd><p>The character indicating end-of-file as set, for example, by -<code>stty</code>. If this character is read when there are no characters +<code class="code">stty</code>. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline -interprets it as the end of input and returns <small>EOF</small>. +interprets it as the end of input and returns <small class="sc">EOF</small>. </p> </dd> -<dt id='index-delete_002dchar-_0028C_002dd_0029'><span><code>delete-char (C-d)</code><a href='#index-delete_002dchar-_0028C_002dd_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-delete_002dchar-_0028C_002dd_0029"></a><span><code class="code">delete-char (C-d)</code><a class="copiable-link" href="#index-delete_002dchar-_0028C_002dd_0029"> &para;</a></span></dt> <dd><p>Delete the character at point. If this function is bound to the -same character as the tty <small>EOF</small> character, as <kbd>C-d</kbd> +same character as the tty <small class="sc">EOF</small> character, as <kbd class="kbd">C-d</kbd> commonly is, see above for the effects. </p> </dd> -<dt id='index-backward_002ddelete_002dchar-_0028Rubout_0029'><span><code>backward-delete-char (Rubout)</code><a href='#index-backward_002ddelete_002dchar-_0028Rubout_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-backward_002ddelete_002dchar-_0028Rubout_0029"></a><span><code class="code">backward-delete-char (Rubout)</code><a class="copiable-link" href="#index-backward_002ddelete_002dchar-_0028Rubout_0029"> &para;</a></span></dt> <dd><p>Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them. </p> </dd> -<dt id='index-forward_002dbackward_002ddelete_002dchar-_0028_0029'><span><code>forward-backward-delete-char ()</code><a href='#index-forward_002dbackward_002ddelete_002dchar-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-forward_002dbackward_002ddelete_002dchar-_0028_0029"></a><span><code class="code">forward-backward-delete-char ()</code><a class="copiable-link" href="#index-forward_002dbackward_002ddelete_002dchar-_0028_0029"> &para;</a></span></dt> <dd><p>Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key. </p> </dd> -<dt id='index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029'><span><code>quoted-insert (C-q or C-v)</code><a href='#index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"></a><span><code class="code">quoted-insert (C-q or C-v)</code><a class="copiable-link" href="#index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"> &para;</a></span></dt> <dd><p>Add the next character typed to the line verbatim. This is -how to insert key sequences like <kbd>C-q</kbd>, for example. +how to insert key sequences like <kbd class="kbd">C-q</kbd>, for example. </p> </dd> -<dt id='index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029'><span><code>self-insert (a, b, A, 1, !, &hellip;)</code><a href='#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"></a><span><code class="code">self-insert (a, b, A, 1, !, &hellip;)</code><a class="copiable-link" href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"> &para;</a></span></dt> <dd><p>Insert yourself. </p> </dd> -<dt id='index-bracketed_002dpaste_002dbegin-_0028_0029'><span><code>bracketed-paste-begin ()</code><a href='#index-bracketed_002dpaste_002dbegin-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-bracketed_002dpaste_002dbegin-_0028_0029"></a><span><code class="code">bracketed-paste-begin ()</code><a class="copiable-link" href="#index-bracketed_002dpaste_002dbegin-_0028_0029"> &para;</a></span></dt> <dd><p>This function is intended to be bound to the &quot;bracketed paste&quot; escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating each character as if it had been read from the keyboard. The characters -are inserted as if each one was bound to <code>self-insert</code> instead of +are inserted as if each one was bound to <code class="code">self-insert</code> instead of executing any editing commands. </p> <p>Bracketed paste sets the region (the characters between point and the mark) -to the inserted text. It uses the concept of an <em>active mark</em>: when the +to the inserted text. It uses the concept of an <em class="emph">active mark</em>: when the mark is active, Readline redisplay uses the terminal&rsquo;s standout mode to denote the region. </p> </dd> -<dt id='index-transpose_002dchars-_0028C_002dt_0029'><span><code>transpose-chars (C-t)</code><a href='#index-transpose_002dchars-_0028C_002dt_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-transpose_002dchars-_0028C_002dt_0029"></a><span><code class="code">transpose-chars (C-t)</code><a class="copiable-link" href="#index-transpose_002dchars-_0028C_002dt_0029"> &para;</a></span></dt> <dd><p>Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point @@ -11496,38 +11939,47 @@ transposes the last two characters of the line. Negative arguments have no effect. </p> </dd> -<dt id='index-transpose_002dwords-_0028M_002dt_0029'><span><code>transpose-words (M-t)</code><a href='#index-transpose_002dwords-_0028M_002dt_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-transpose_002dwords-_0028M_002dt_0029"></a><span><code class="code">transpose-words (M-t)</code><a class="copiable-link" href="#index-transpose_002dwords-_0028M_002dt_0029"> &para;</a></span></dt> +<dd><p>Drag the word before point past the word after point, +moving point past that word as well. +If the insertion point is at the end of the line, this transposes +the last two words on the line. +</p> +</dd> +<dt><a id="index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"></a><span><code class="code">shell-transpose-words (M-C-t)</code><a class="copiable-link" href="#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"> &para;</a></span></dt> <dd><p>Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. +Word boundaries are the same as <code class="code">shell-forward-word</code> and +<code class="code">shell-backward-word</code>. </p> </dd> -<dt id='index-upcase_002dword-_0028M_002du_0029'><span><code>upcase-word (M-u)</code><a href='#index-upcase_002dword-_0028M_002du_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-upcase_002dword-_0028M_002du_0029"></a><span><code class="code">upcase-word (M-u)</code><a class="copiable-link" href="#index-upcase_002dword-_0028M_002du_0029"> &para;</a></span></dt> <dd><p>Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. </p> </dd> -<dt id='index-downcase_002dword-_0028M_002dl_0029'><span><code>downcase-word (M-l)</code><a href='#index-downcase_002dword-_0028M_002dl_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-downcase_002dword-_0028M_002dl_0029"></a><span><code class="code">downcase-word (M-l)</code><a class="copiable-link" href="#index-downcase_002dword-_0028M_002dl_0029"> &para;</a></span></dt> <dd><p>Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor. </p> </dd> -<dt id='index-capitalize_002dword-_0028M_002dc_0029'><span><code>capitalize-word (M-c)</code><a href='#index-capitalize_002dword-_0028M_002dc_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-capitalize_002dword-_0028M_002dc_0029"></a><span><code class="code">capitalize-word (M-c)</code><a class="copiable-link" href="#index-capitalize_002dword-_0028M_002dc_0029"> &para;</a></span></dt> <dd><p>Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor. </p> </dd> -<dt id='index-overwrite_002dmode-_0028_0029'><span><code>overwrite-mode ()</code><a href='#index-overwrite_002dmode-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-overwrite_002dmode-_0028_0029"></a><span><code class="code">overwrite-mode ()</code><a class="copiable-link" href="#index-overwrite_002dmode-_0028_0029"> &para;</a></span></dt> <dd><p>Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only -<code>emacs</code> mode; <code>vi</code> mode does overwrite differently. -Each call to <code>readline()</code> starts in insert mode. +<code class="code">emacs</code> mode; <code class="code">vi</code> mode does overwrite differently. +Each call to <code class="code">readline()</code> starts in insert mode. </p> -<p>In overwrite mode, characters bound to <code>self-insert</code> replace +<p>In overwrite mode, characters bound to <code class="code">self-insert</code> replace the text at point rather than pushing the text to the right. -Characters bound to <code>backward-delete-char</code> replace the character +Characters bound to <code class="code">backward-delete-char</code> replace the character before point with a space. </p> <p>By default, this command is unbound. @@ -11537,132 +11989,123 @@ before point with a space. <hr> </div> -<div class="subsection" id="Commands-For-Killing"> -<div class="header"> +<div class="subsection-level-extent" id="Commands-For-Killing"> +<div class="nav-panel"> <p> Next: <a href="#Numeric-Arguments" accesskey="n" rel="next">Specifying Numeric Arguments</a>, Previous: <a href="#Commands-For-Text" accesskey="p" rel="prev">Commands For Changing Text</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Killing-And-Yanking"></span><h4 class="subsection">8.4.4 Killing And Yanking</h4> +<h4 class="subsection" id="Killing-And-Yanking"><span>8.4.4 Killing And Yanking<a class="copiable-link" href="#Killing-And-Yanking"> &para;</a></span></h4> -<dl compact="compact"> -<dt id='index-kill_002dline-_0028C_002dk_0029'><span><code>kill-line (C-k)</code><a href='#index-kill_002dline-_0028C_002dk_0029' class='copiable-anchor'> &para;</a></span></dt> +<dl class="ftable"> +<dt><a id="index-kill_002dline-_0028C_002dk_0029"></a><span><code class="code">kill-line (C-k)</code><a class="copiable-link" href="#index-kill_002dline-_0028C_002dk_0029"> &para;</a></span></dt> <dd><p>Kill the text from point to the end of the line. With a negative numeric argument, kill backward from the cursor to the beginning of the current line. </p> </dd> -<dt id='index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029'><span><code>backward-kill-line (C-x Rubout)</code><a href='#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"></a><span><code class="code">backward-kill-line (C-x Rubout)</code><a class="copiable-link" href="#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"> &para;</a></span></dt> <dd><p>Kill backward from the cursor to the beginning of the current line. With a negative numeric argument, kill forward from the cursor to the end of the current line. </p> </dd> -<dt id='index-unix_002dline_002ddiscard-_0028C_002du_0029'><span><code>unix-line-discard (C-u)</code><a href='#index-unix_002dline_002ddiscard-_0028C_002du_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-unix_002dline_002ddiscard-_0028C_002du_0029"></a><span><code class="code">unix-line-discard (C-u)</code><a class="copiable-link" href="#index-unix_002dline_002ddiscard-_0028C_002du_0029"> &para;</a></span></dt> <dd><p>Kill backward from the cursor to the beginning of the current line. </p> </dd> -<dt id='index-kill_002dwhole_002dline-_0028_0029'><span><code>kill-whole-line ()</code><a href='#index-kill_002dwhole_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-kill_002dwhole_002dline-_0028_0029"></a><span><code class="code">kill-whole-line ()</code><a class="copiable-link" href="#index-kill_002dwhole_002dline-_0028_0029"> &para;</a></span></dt> <dd><p>Kill all characters on the current line, no matter where point is. By default, this is unbound. </p> </dd> -<dt id='index-kill_002dword-_0028M_002dd_0029'><span><code>kill-word (M-d)</code><a href='#index-kill_002dword-_0028M_002dd_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-kill_002dword-_0028M_002dd_0029"></a><span><code class="code">kill-word (M-d)</code><a class="copiable-link" href="#index-kill_002dword-_0028M_002dd_0029"> &para;</a></span></dt> <dd><p>Kill from point to the end of the current word, or if between words, to the end of the next word. -Word boundaries are the same as <code>forward-word</code>. +Word boundaries are the same as <code class="code">forward-word</code>. </p> </dd> -<dt id='index-backward_002dkill_002dword-_0028M_002dDEL_0029'><span><code>backward-kill-word (M-<span class="key">DEL</span>)</code><a href='#index-backward_002dkill_002dword-_0028M_002dDEL_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-backward_002dkill_002dword-_0028M_002dDEL_0029"></a><span><code class="code">backward-kill-word (M-<kbd class="key">DEL</kbd>)</code><a class="copiable-link" href="#index-backward_002dkill_002dword-_0028M_002dDEL_0029"> &para;</a></span></dt> <dd><p>Kill the word behind point. -Word boundaries are the same as <code>backward-word</code>. +Word boundaries are the same as <code class="code">backward-word</code>. </p> </dd> -<dt id='index-shell_002dkill_002dword-_0028M_002dC_002dd_0029'><span><code>shell-kill-word (M-C-d)</code><a href='#index-shell_002dkill_002dword-_0028M_002dC_002dd_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"></a><span><code class="code">shell-kill-word (M-C-d)</code><a class="copiable-link" href="#index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"> &para;</a></span></dt> <dd><p>Kill from point to the end of the current word, or if between words, to the end of the next word. -Word boundaries are the same as <code>shell-forward-word</code>. +Word boundaries are the same as <code class="code">shell-forward-word</code>. </p> </dd> -<dt id='index-shell_002dbackward_002dkill_002dword-_0028_0029'><span><code>shell-backward-kill-word ()</code><a href='#index-shell_002dbackward_002dkill_002dword-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-shell_002dbackward_002dkill_002dword-_0028_0029"></a><span><code class="code">shell-backward-kill-word ()</code><a class="copiable-link" href="#index-shell_002dbackward_002dkill_002dword-_0028_0029"> &para;</a></span></dt> <dd><p>Kill the word behind point. -Word boundaries are the same as <code>shell-backward-word</code>. +Word boundaries are the same as <code class="code">shell-backward-word</code>. </p> </dd> -<dt id='index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029'><span><code>shell-transpose-words (M-C-t)</code><a href='#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Drag the word before point past the word after point, -moving point past that word as well. -If the insertion point is at the end of the line, this transposes -the last two words on the line. -Word boundaries are the same as <code>shell-forward-word</code> and -<code>shell-backward-word</code>. -</p> -</dd> -<dt id='index-unix_002dword_002drubout-_0028C_002dw_0029'><span><code>unix-word-rubout (C-w)</code><a href='#index-unix_002dword_002drubout-_0028C_002dw_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-unix_002dword_002drubout-_0028C_002dw_0029"></a><span><code class="code">unix-word-rubout (C-w)</code><a class="copiable-link" href="#index-unix_002dword_002drubout-_0028C_002dw_0029"> &para;</a></span></dt> <dd><p>Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. </p> </dd> -<dt id='index-unix_002dfilename_002drubout-_0028_0029'><span><code>unix-filename-rubout ()</code><a href='#index-unix_002dfilename_002drubout-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-unix_002dfilename_002drubout-_0028_0029"></a><span><code class="code">unix-filename-rubout ()</code><a class="copiable-link" href="#index-unix_002dfilename_002drubout-_0028_0029"> &para;</a></span></dt> <dd><p>Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. </p> </dd> -<dt id='index-delete_002dhorizontal_002dspace-_0028_0029'><span><code>delete-horizontal-space ()</code><a href='#index-delete_002dhorizontal_002dspace-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-delete_002dhorizontal_002dspace-_0028_0029"></a><span><code class="code">delete-horizontal-space ()</code><a class="copiable-link" href="#index-delete_002dhorizontal_002dspace-_0028_0029"> &para;</a></span></dt> <dd><p>Delete all spaces and tabs around point. By default, this is unbound. </p> </dd> -<dt id='index-kill_002dregion-_0028_0029'><span><code>kill-region ()</code><a href='#index-kill_002dregion-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-kill_002dregion-_0028_0029"></a><span><code class="code">kill-region ()</code><a class="copiable-link" href="#index-kill_002dregion-_0028_0029"> &para;</a></span></dt> <dd><p>Kill the text in the current region. By default, this command is unbound. </p> </dd> -<dt id='index-copy_002dregion_002das_002dkill-_0028_0029'><span><code>copy-region-as-kill ()</code><a href='#index-copy_002dregion_002das_002dkill-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-copy_002dregion_002das_002dkill-_0028_0029"></a><span><code class="code">copy-region-as-kill ()</code><a class="copiable-link" href="#index-copy_002dregion_002das_002dkill-_0028_0029"> &para;</a></span></dt> <dd><p>Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound. </p> </dd> -<dt id='index-copy_002dbackward_002dword-_0028_0029'><span><code>copy-backward-word ()</code><a href='#index-copy_002dbackward_002dword-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-copy_002dbackward_002dword-_0028_0029"></a><span><code class="code">copy-backward-word ()</code><a class="copiable-link" href="#index-copy_002dbackward_002dword-_0028_0029"> &para;</a></span></dt> <dd><p>Copy the word before point to the kill buffer. -The word boundaries are the same as <code>backward-word</code>. +The word boundaries are the same as <code class="code">backward-word</code>. By default, this command is unbound. </p> </dd> -<dt id='index-copy_002dforward_002dword-_0028_0029'><span><code>copy-forward-word ()</code><a href='#index-copy_002dforward_002dword-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-copy_002dforward_002dword-_0028_0029"></a><span><code class="code">copy-forward-word ()</code><a class="copiable-link" href="#index-copy_002dforward_002dword-_0028_0029"> &para;</a></span></dt> <dd><p>Copy the word following point to the kill buffer. -The word boundaries are the same as <code>forward-word</code>. +The word boundaries are the same as <code class="code">forward-word</code>. By default, this command is unbound. </p> </dd> -<dt id='index-yank-_0028C_002dy_0029'><span><code>yank (C-y)</code><a href='#index-yank-_0028C_002dy_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-yank-_0028C_002dy_0029"></a><span><code class="code">yank (C-y)</code><a class="copiable-link" href="#index-yank-_0028C_002dy_0029"> &para;</a></span></dt> <dd><p>Yank the top of the kill ring into the buffer at point. </p> </dd> -<dt id='index-yank_002dpop-_0028M_002dy_0029'><span><code>yank-pop (M-y)</code><a href='#index-yank_002dpop-_0028M_002dy_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-yank_002dpop-_0028M_002dy_0029"></a><span><code class="code">yank-pop (M-y)</code><a class="copiable-link" href="#index-yank_002dpop-_0028M_002dy_0029"> &para;</a></span></dt> <dd><p>Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is <code>yank</code> or <code>yank-pop</code>. +the prior command is <code class="code">yank</code> or <code class="code">yank-pop</code>. </p></dd> </dl> <hr> </div> -<div class="subsection" id="Numeric-Arguments"> -<div class="header"> +<div class="subsection-level-extent" id="Numeric-Arguments"> +<div class="nav-panel"> <p> Next: <a href="#Commands-For-Completion" accesskey="n" rel="next">Letting Readline Type For You</a>, Previous: <a href="#Commands-For-Killing" accesskey="p" rel="prev">Killing And Yanking</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Specifying-Numeric-Arguments"></span><h4 class="subsection">8.4.5 Specifying Numeric Arguments</h4> -<dl compact="compact"> -<dt id='index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029'><span><code>digit-argument (<kbd>M-0</kbd>, <kbd>M-1</kbd>, &hellip; <kbd>M--</kbd>)</code><a href='#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029' class='copiable-anchor'> &para;</a></span></dt> +<h4 class="subsection" id="Specifying-Numeric-Arguments"><span>8.4.5 Specifying Numeric Arguments<a class="copiable-link" href="#Specifying-Numeric-Arguments"> &para;</a></span></h4> +<dl class="ftable"> +<dt><a id="index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"></a><span><code class="code">digit-argument (<kbd class="kbd">M-0</kbd>, <kbd class="kbd">M-1</kbd>, &hellip; <kbd class="kbd">M--</kbd>)</code><a class="copiable-link" href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"> &para;</a></span></dt> <dd><p>Add this digit to the argument already accumulating, or start a new -argument. <kbd>M--</kbd> starts a negative argument. +argument. <kbd class="kbd">M--</kbd> starts a negative argument. </p> </dd> -<dt id='index-universal_002dargument-_0028_0029'><span><code>universal-argument ()</code><a href='#index-universal_002dargument-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-universal_002dargument-_0028_0029"></a><span><code class="code">universal-argument ()</code><a class="copiable-link" href="#index-universal_002dargument-_0028_0029"> &para;</a></span></dt> <dd><p>This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. -If the command is followed by digits, executing <code>universal-argument</code> +If the command is followed by digits, executing <code class="code">universal-argument</code> again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit nor minus sign, the argument count @@ -11676,105 +12119,105 @@ By default, this is not bound to a key. <hr> </div> -<div class="subsection" id="Commands-For-Completion"> -<div class="header"> +<div class="subsection-level-extent" id="Commands-For-Completion"> +<div class="nav-panel"> <p> Next: <a href="#Keyboard-Macros" accesskey="n" rel="next">Keyboard Macros</a>, Previous: <a href="#Numeric-Arguments" accesskey="p" rel="prev">Specifying Numeric Arguments</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Letting-Readline-Type-For-You"></span><h4 class="subsection">8.4.6 Letting Readline Type For You</h4> +<h4 class="subsection" id="Letting-Readline-Type-For-You"><span>8.4.6 Letting Readline Type For You<a class="copiable-link" href="#Letting-Readline-Type-For-You"> &para;</a></span></h4> -<dl compact="compact"> -<dt id='index-complete-_0028TAB_0029'><span><code>complete (<span class="key">TAB</span>)</code><a href='#index-complete-_0028TAB_0029' class='copiable-anchor'> &para;</a></span></dt> +<dl class="ftable"> +<dt><a id="index-complete-_0028TAB_0029"></a><span><code class="code">complete (<kbd class="key">TAB</kbd>)</code><a class="copiable-link" href="#index-complete-_0028TAB_0029"> &para;</a></span></dt> <dd><p>Attempt to perform completion on the text before point. The actual completion performed is application-specific. Bash attempts completion treating the text as a variable (if the -text begins with &lsquo;<samp>$</samp>&rsquo;), username (if the text begins with -&lsquo;<samp>~</samp>&rsquo;), hostname (if the text begins with &lsquo;<samp>@</samp>&rsquo;), or +text begins with &lsquo;<samp class="samp">$</samp>&rsquo;), username (if the text begins with +&lsquo;<samp class="samp">~</samp>&rsquo;), hostname (if the text begins with &lsquo;<samp class="samp">@</samp>&rsquo;), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. </p> </dd> -<dt id='index-possible_002dcompletions-_0028M_002d_003f_0029'><span><code>possible-completions (M-?)</code><a href='#index-possible_002dcompletions-_0028M_002d_003f_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-possible_002dcompletions-_0028M_002d_003f_0029"></a><span><code class="code">possible-completions (M-?)</code><a class="copiable-link" href="#index-possible_002dcompletions-_0028M_002d_003f_0029"> &para;</a></span></dt> <dd><p>List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used -for display to the value of <code>completion-display-width</code>, the value of -the environment variable <code>COLUMNS</code>, or the screen width, in that order. +for display to the value of <code class="code">completion-display-width</code>, the value of +the environment variable <code class="env">COLUMNS</code>, or the screen width, in that order. </p> </dd> -<dt id='index-insert_002dcompletions-_0028M_002d_002a_0029'><span><code>insert-completions (M-*)</code><a href='#index-insert_002dcompletions-_0028M_002d_002a_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-insert_002dcompletions-_0028M_002d_002a_0029"></a><span><code class="code">insert-completions (M-*)</code><a class="copiable-link" href="#index-insert_002dcompletions-_0028M_002d_002a_0029"> &para;</a></span></dt> <dd><p>Insert all completions of the text before point that would have -been generated by <code>possible-completions</code>. +been generated by <code class="code">possible-completions</code>. </p> </dd> -<dt id='index-menu_002dcomplete-_0028_0029'><span><code>menu-complete ()</code><a href='#index-menu_002dcomplete-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Similar to <code>complete</code>, but replaces the word to be completed +<dt><a id="index-menu_002dcomplete-_0028_0029"></a><span><code class="code">menu-complete ()</code><a class="copiable-link" href="#index-menu_002dcomplete-_0028_0029"> &para;</a></span></dt> +<dd><p>Similar to <code class="code">complete</code>, but replaces the word to be completed with a single match from the list of possible completions. -Repeated execution of <code>menu-complete</code> steps through the list +Repeated execution of <code class="code">menu-complete</code> steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung -(subject to the setting of <code>bell-style</code>) +(subject to the setting of <code class="code">bell-style</code>) and the original text is restored. -An argument of <var>n</var> moves <var>n</var> positions forward in the list +An argument of <var class="var">n</var> moves <var class="var">n</var> positions forward in the list of matches; a negative argument may be used to move backward through the list. -This command is intended to be bound to <tt class="key">TAB</tt>, but is unbound +This command is intended to be bound to <kbd class="key">TAB</kbd>, but is unbound by default. </p> </dd> -<dt id='index-menu_002dcomplete_002dbackward-_0028_0029'><span><code>menu-complete-backward ()</code><a href='#index-menu_002dcomplete_002dbackward-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Identical to <code>menu-complete</code>, but moves backward through the list -of possible completions, as if <code>menu-complete</code> had been given a +<dt><a id="index-menu_002dcomplete_002dbackward-_0028_0029"></a><span><code class="code">menu-complete-backward ()</code><a class="copiable-link" href="#index-menu_002dcomplete_002dbackward-_0028_0029"> &para;</a></span></dt> +<dd><p>Identical to <code class="code">menu-complete</code>, but moves backward through the list +of possible completions, as if <code class="code">menu-complete</code> had been given a negative argument. </p> </dd> -<dt id='index-delete_002dchar_002dor_002dlist-_0028_0029'><span><code>delete-char-or-list ()</code><a href='#index-delete_002dchar_002dor_002dlist-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-delete_002dchar_002dor_002dlist-_0028_0029"></a><span><code class="code">delete-char-or-list ()</code><a class="copiable-link" href="#index-delete_002dchar_002dor_002dlist-_0028_0029"> &para;</a></span></dt> <dd><p>Deletes the character under the cursor if not at the beginning or -end of the line (like <code>delete-char</code>). +end of the line (like <code class="code">delete-char</code>). If at the end of the line, behaves identically to -<code>possible-completions</code>. +<code class="code">possible-completions</code>. This command is unbound by default. </p> </dd> -<dt id='index-complete_002dfilename-_0028M_002d_002f_0029'><span><code>complete-filename (M-/)</code><a href='#index-complete_002dfilename-_0028M_002d_002f_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-complete_002dfilename-_0028M_002d_002f_0029"></a><span><code class="code">complete-filename (M-/)</code><a class="copiable-link" href="#index-complete_002dfilename-_0028M_002d_002f_0029"> &para;</a></span></dt> <dd><p>Attempt filename completion on the text before point. </p> </dd> -<dt id='index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029'><span><code>possible-filename-completions (C-x /)</code><a href='#index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"></a><span><code class="code">possible-filename-completions (C-x /)</code><a class="copiable-link" href="#index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"> &para;</a></span></dt> <dd><p>List the possible completions of the text before point, treating it as a filename. </p> </dd> -<dt id='index-complete_002dusername-_0028M_002d_007e_0029'><span><code>complete-username (M-~)</code><a href='#index-complete_002dusername-_0028M_002d_007e_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-complete_002dusername-_0028M_002d_007e_0029"></a><span><code class="code">complete-username (M-~)</code><a class="copiable-link" href="#index-complete_002dusername-_0028M_002d_007e_0029"> &para;</a></span></dt> <dd><p>Attempt completion on the text before point, treating it as a username. </p> </dd> -<dt id='index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029'><span><code>possible-username-completions (C-x ~)</code><a href='#index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"></a><span><code class="code">possible-username-completions (C-x ~)</code><a class="copiable-link" href="#index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"> &para;</a></span></dt> <dd><p>List the possible completions of the text before point, treating it as a username. </p> </dd> -<dt id='index-complete_002dvariable-_0028M_002d_0024_0029'><span><code>complete-variable (M-$)</code><a href='#index-complete_002dvariable-_0028M_002d_0024_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-complete_002dvariable-_0028M_002d_0024_0029"></a><span><code class="code">complete-variable (M-$)</code><a class="copiable-link" href="#index-complete_002dvariable-_0028M_002d_0024_0029"> &para;</a></span></dt> <dd><p>Attempt completion on the text before point, treating it as a shell variable. </p> </dd> -<dt id='index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029'><span><code>possible-variable-completions (C-x $)</code><a href='#index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"></a><span><code class="code">possible-variable-completions (C-x $)</code><a class="copiable-link" href="#index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"> &para;</a></span></dt> <dd><p>List the possible completions of the text before point, treating it as a shell variable. </p> </dd> -<dt id='index-complete_002dhostname-_0028M_002d_0040_0029'><span><code>complete-hostname (M-@)</code><a href='#index-complete_002dhostname-_0028M_002d_0040_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-complete_002dhostname-_0028M_002d_0040_0029"></a><span><code class="code">complete-hostname (M-@)</code><a class="copiable-link" href="#index-complete_002dhostname-_0028M_002d_0040_0029"> &para;</a></span></dt> <dd><p>Attempt completion on the text before point, treating it as a hostname. </p> </dd> -<dt id='index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029'><span><code>possible-hostname-completions (C-x @)</code><a href='#index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"></a><span><code class="code">possible-hostname-completions (C-x @)</code><a class="copiable-link" href="#index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"> &para;</a></span></dt> <dd><p>List the possible completions of the text before point, treating it as a hostname. </p> </dd> -<dt id='index-complete_002dcommand-_0028M_002d_0021_0029'><span><code>complete-command (M-!)</code><a href='#index-complete_002dcommand-_0028M_002d_0021_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-complete_002dcommand-_0028M_002d_0021_0029"></a><span><code class="code">complete-command (M-!)</code><a class="copiable-link" href="#index-complete_002dcommand-_0028M_002d_0021_0029"> &para;</a></span></dt> <dd><p>Attempt completion on the text before point, treating it as a command name. Command completion attempts to match the text against aliases, reserved words, shell @@ -11782,128 +12225,128 @@ functions, shell builtins, and finally executable filenames, in that order. </p> </dd> -<dt id='index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029'><span><code>possible-command-completions (C-x !)</code><a href='#index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"></a><span><code class="code">possible-command-completions (C-x !)</code><a class="copiable-link" href="#index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"> &para;</a></span></dt> <dd><p>List the possible completions of the text before point, treating it as a command name. </p> </dd> -<dt id='index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029'><span><code>dynamic-complete-history (M-<span class="key">TAB</span>)</code><a href='#index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"></a><span><code class="code">dynamic-complete-history (M-<kbd class="key">TAB</kbd>)</code><a class="copiable-link" href="#index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"> &para;</a></span></dt> <dd><p>Attempt completion on the text before point, comparing the text against lines from the history list for possible completion matches. </p> </dd> -<dt id='index-dabbrev_002dexpand-_0028_0029'><span><code>dabbrev-expand ()</code><a href='#index-dabbrev_002dexpand-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-dabbrev_002dexpand-_0028_0029"></a><span><code class="code">dabbrev-expand ()</code><a class="copiable-link" href="#index-dabbrev_002dexpand-_0028_0029"> &para;</a></span></dt> <dd><p>Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches. </p> </dd> -<dt id='index-complete_002dinto_002dbraces-_0028M_002d_007b_0029'><span><code>complete-into-braces (M-{)</code><a href='#index-complete_002dinto_002dbraces-_0028M_002d_007b_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"></a><span><code class="code">complete-into-braces (M-{)</code><a class="copiable-link" href="#index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"> &para;</a></span></dt> <dd><p>Perform filename completion and insert the list of possible completions enclosed within braces so the list is available to the shell -(see <a href="#Brace-Expansion">Brace Expansion</a>). +(see <a class="pxref" href="#Brace-Expansion">Brace Expansion</a>). </p> </dd> </dl> <hr> </div> -<div class="subsection" id="Keyboard-Macros"> -<div class="header"> +<div class="subsection-level-extent" id="Keyboard-Macros"> +<div class="nav-panel"> <p> Next: <a href="#Miscellaneous-Commands" accesskey="n" rel="next">Some Miscellaneous Commands</a>, Previous: <a href="#Commands-For-Completion" accesskey="p" rel="prev">Letting Readline Type For You</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Keyboard-Macros-1"></span><h4 class="subsection">8.4.7 Keyboard Macros</h4> -<dl compact="compact"> -<dt id='index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029'><span><code>start-kbd-macro (C-x ()</code><a href='#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<h4 class="subsection" id="Keyboard-Macros-1"><span>8.4.7 Keyboard Macros<a class="copiable-link" href="#Keyboard-Macros-1"> &para;</a></span></h4> +<dl class="ftable"> +<dt><a id="index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"></a><span><code class="code">start-kbd-macro (C-x ()</code><a class="copiable-link" href="#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"> &para;</a></span></dt> <dd><p>Begin saving the characters typed into the current keyboard macro. </p> </dd> -<dt id='index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029'><span><code>end-kbd-macro (C-x ))</code><a href='#index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"></a><span><code class="code">end-kbd-macro (C-x ))</code><a class="copiable-link" href="#index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"> &para;</a></span></dt> <dd><p>Stop saving the characters typed into the current keyboard macro and save the definition. </p> </dd> -<dt id='index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029'><span><code>call-last-kbd-macro (C-x e)</code><a href='#index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"></a><span><code class="code">call-last-kbd-macro (C-x e)</code><a class="copiable-link" href="#index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"> &para;</a></span></dt> <dd><p>Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard. </p> </dd> -<dt id='index-print_002dlast_002dkbd_002dmacro-_0028_0029'><span><code>print-last-kbd-macro ()</code><a href='#index-print_002dlast_002dkbd_002dmacro-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-print_002dlast_002dkbd_002dmacro-_0028_0029"></a><span><code class="code">print-last-kbd-macro ()</code><a class="copiable-link" href="#index-print_002dlast_002dkbd_002dmacro-_0028_0029"> &para;</a></span></dt> <dd><p>Print the last keyboard macro defined in a format suitable for the -<var>inputrc</var> file. +<var class="var">inputrc</var> file. </p> </dd> </dl> <hr> </div> -<div class="subsection" id="Miscellaneous-Commands"> -<div class="header"> +<div class="subsection-level-extent" id="Miscellaneous-Commands"> +<div class="nav-panel"> <p> Previous: <a href="#Keyboard-Macros" accesskey="p" rel="prev">Keyboard Macros</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Some-Miscellaneous-Commands"></span><h4 class="subsection">8.4.8 Some Miscellaneous Commands</h4> -<dl compact="compact"> -<dt id='index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029'><span><code>re-read-init-file (C-x C-r)</code><a href='#index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Read in the contents of the <var>inputrc</var> file, and incorporate +<h4 class="subsection" id="Some-Miscellaneous-Commands"><span>8.4.8 Some Miscellaneous Commands<a class="copiable-link" href="#Some-Miscellaneous-Commands"> &para;</a></span></h4> +<dl class="ftable"> +<dt><a id="index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"></a><span><code class="code">re-read-init-file (C-x C-r)</code><a class="copiable-link" href="#index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"> &para;</a></span></dt> +<dd><p>Read in the contents of the <var class="var">inputrc</var> file, and incorporate any bindings or variable assignments found there. </p> </dd> -<dt id='index-abort-_0028C_002dg_0029'><span><code>abort (C-g)</code><a href='#index-abort-_0028C_002dg_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-abort-_0028C_002dg_0029"></a><span><code class="code">abort (C-g)</code><a class="copiable-link" href="#index-abort-_0028C_002dg_0029"> &para;</a></span></dt> <dd><p>Abort the current editing command and ring the terminal&rsquo;s bell (subject to the setting of -<code>bell-style</code>). +<code class="code">bell-style</code>). </p> </dd> -<dt id='index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029'><span><code>do-lowercase-version (M-A, M-B, M-<var>x</var>, &hellip;)</code><a href='#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>If the metafied character <var>x</var> is upper case, run the command +<dt><a id="index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"></a><span><code class="code">do-lowercase-version (M-A, M-B, M-<var class="var">x</var>, &hellip;)</code><a class="copiable-link" href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"> &para;</a></span></dt> +<dd><p>If the metafied character <var class="var">x</var> is upper case, run the command that is bound to the corresponding metafied lower case character. -The behavior is undefined if <var>x</var> is already lower case. +The behavior is undefined if <var class="var">x</var> is already lower case. </p> </dd> -<dt id='index-prefix_002dmeta-_0028ESC_0029'><span><code>prefix-meta (<span class="key">ESC</span>)</code><a href='#index-prefix_002dmeta-_0028ESC_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-prefix_002dmeta-_0028ESC_0029"></a><span><code class="code">prefix-meta (<kbd class="key">ESC</kbd>)</code><a class="copiable-link" href="#index-prefix_002dmeta-_0028ESC_0029"> &para;</a></span></dt> <dd><p>Metafy the next character typed. This is for keyboards -without a meta key. Typing &lsquo;<samp><span class="key">ESC</span> f</samp>&rsquo; is equivalent to typing -<kbd>M-f</kbd>. +without a meta key. Typing &lsquo;<samp class="samp"><kbd class="key">ESC</kbd> f</samp>&rsquo; is equivalent to typing +<kbd class="kbd">M-f</kbd>. </p> </dd> -<dt id='index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029'><span><code>undo (C-_ or C-x C-u)</code><a href='#index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"></a><span><code class="code">undo (C-_ or C-x C-u)</code><a class="copiable-link" href="#index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"> &para;</a></span></dt> <dd><p>Incremental undo, separately remembered for each line. </p> </dd> -<dt id='index-revert_002dline-_0028M_002dr_0029'><span><code>revert-line (M-r)</code><a href='#index-revert_002dline-_0028M_002dr_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Undo all changes made to this line. This is like executing the <code>undo</code> +<dt><a id="index-revert_002dline-_0028M_002dr_0029"></a><span><code class="code">revert-line (M-r)</code><a class="copiable-link" href="#index-revert_002dline-_0028M_002dr_0029"> &para;</a></span></dt> +<dd><p>Undo all changes made to this line. This is like executing the <code class="code">undo</code> command enough times to get back to the beginning. </p> </dd> -<dt id='index-tilde_002dexpand-_0028M_002d_0026_0029'><span><code>tilde-expand (M-&amp;)</code><a href='#index-tilde_002dexpand-_0028M_002d_0026_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-tilde_002dexpand-_0028M_002d_0026_0029"></a><span><code class="code">tilde-expand (M-&amp;)</code><a class="copiable-link" href="#index-tilde_002dexpand-_0028M_002d_0026_0029"> &para;</a></span></dt> <dd><p>Perform tilde expansion on the current word. </p> </dd> -<dt id='index-set_002dmark-_0028C_002d_0040_0029'><span><code>set-mark (C-@)</code><a href='#index-set_002dmark-_0028C_002d_0040_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-set_002dmark-_0028C_002d_0040_0029"></a><span><code class="code">set-mark (C-@)</code><a class="copiable-link" href="#index-set_002dmark-_0028C_002d_0040_0029"> &para;</a></span></dt> <dd><p>Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. </p> </dd> -<dt id='index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029'><span><code>exchange-point-and-mark (C-x C-x)</code><a href='#index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"></a><span><code class="code">exchange-point-and-mark (C-x C-x)</code><a class="copiable-link" href="#index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"> &para;</a></span></dt> <dd><p>Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark. </p> </dd> -<dt id='index-character_002dsearch-_0028C_002d_005d_0029'><span><code>character-search (C-])</code><a href='#index-character_002dsearch-_0028C_002d_005d_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-character_002dsearch-_0028C_002d_005d_0029"></a><span><code class="code">character-search (C-])</code><a class="copiable-link" href="#index-character_002dsearch-_0028C_002d_005d_0029"> &para;</a></span></dt> <dd><p>A character is read and point is moved to the next occurrence of that character. A negative argument searches for previous occurrences. </p> </dd> -<dt id='index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029'><span><code>character-search-backward (M-C-])</code><a href='#index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"></a><span><code class="code">character-search-backward (M-C-])</code><a class="copiable-link" href="#index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"> &para;</a></span></dt> <dd><p>A character is read and point is moved to the previous occurrence of that character. A negative argument searches for subsequent occurrences. </p> </dd> -<dt id='index-skip_002dcsi_002dsequence-_0028_0029'><span><code>skip-csi-sequence ()</code><a href='#index-skip_002dcsi_002dsequence-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-skip_002dcsi_002dsequence-_0028_0029"></a><span><code class="code">skip-csi-sequence ()</code><a class="copiable-link" href="#index-skip_002dcsi_002dsequence-_0028_0029"> &para;</a></span></dt> <dd><p>Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is @@ -11913,151 +12356,163 @@ stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. </p> </dd> -<dt id='index-insert_002dcomment-_0028M_002d_0023_0029'><span><code>insert-comment (M-#)</code><a href='#index-insert_002dcomment-_0028M_002d_0023_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Without a numeric argument, the value of the <code>comment-begin</code> +<dt><a id="index-insert_002dcomment-_0028M_002d_0023_0029"></a><span><code class="code">insert-comment (M-#)</code><a class="copiable-link" href="#index-insert_002dcomment-_0028M_002d_0023_0029"> &para;</a></span></dt> +<dd><p>Without a numeric argument, the value of the <code class="code">comment-begin</code> variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value -of <code>comment-begin</code>, the value is inserted, otherwise -the characters in <code>comment-begin</code> are deleted from the beginning of +of <code class="code">comment-begin</code>, the value is inserted, otherwise +the characters in <code class="code">comment-begin</code> are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. -The default value of <code>comment-begin</code> causes this command +The default value of <code class="code">comment-begin</code> causes this command to make the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. </p> </dd> -<dt id='index-dump_002dfunctions-_0028_0029'><span><code>dump-functions ()</code><a href='#index-dump_002dfunctions-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-dump_002dfunctions-_0028_0029"></a><span><code class="code">dump-functions ()</code><a class="copiable-link" href="#index-dump_002dfunctions-_0028_0029"> &para;</a></span></dt> <dd><p>Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part -of an <var>inputrc</var> file. This command is unbound by default. +of an <var class="var">inputrc</var> file. This command is unbound by default. </p> </dd> -<dt id='index-dump_002dvariables-_0028_0029'><span><code>dump-variables ()</code><a href='#index-dump_002dvariables-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-dump_002dvariables-_0028_0029"></a><span><code class="code">dump-variables ()</code><a class="copiable-link" href="#index-dump_002dvariables-_0028_0029"> &para;</a></span></dt> <dd><p>Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part -of an <var>inputrc</var> file. This command is unbound by default. +of an <var class="var">inputrc</var> file. This command is unbound by default. </p> </dd> -<dt id='index-dump_002dmacros-_0028_0029'><span><code>dump-macros ()</code><a href='#index-dump_002dmacros-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-dump_002dmacros-_0028_0029"></a><span><code class="code">dump-macros ()</code><a class="copiable-link" href="#index-dump_002dmacros-_0028_0029"> &para;</a></span></dt> <dd><p>Print all of the Readline key sequences bound to macros and the 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 <var>inputrc</var> file. This command is unbound by default. +of an <var class="var">inputrc</var> file. This command is unbound by default. </p> </dd> -<dt id='index-spell_002dcorrect_002dword-_0028C_002dx-s_0029'><span><code>spell-correct-word (C-x s)</code><a href='#index-spell_002dcorrect_002dword-_0028C_002dx-s_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-spell_002dcorrect_002dword-_0028C_002dx-s_0029"></a><span><code class="code">spell-correct-word (C-x s)</code><a class="copiable-link" href="#index-spell_002dcorrect_002dword-_0028C_002dx-s_0029"> &para;</a></span></dt> <dd><p>Perform spelling correction on the current word, treating it as a directory -or filename, in the same way as the <code>cdspell</code> shell option. -Word boundaries are the same as those used by <code>shell-forward-word</code>. +or filename, in the same way as the <code class="code">cdspell</code> shell option. +Word boundaries are the same as those used by <code class="code">shell-forward-word</code>. </p> </dd> -<dt id='index-glob_002dcomplete_002dword-_0028M_002dg_0029'><span><code>glob-complete-word (M-g)</code><a href='#index-glob_002dcomplete_002dword-_0028M_002dg_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-glob_002dcomplete_002dword-_0028M_002dg_0029"></a><span><code class="code">glob-complete-word (M-g)</code><a class="copiable-link" href="#index-glob_002dcomplete_002dword-_0028M_002dg_0029"> &para;</a></span></dt> <dd><p>The word before point is treated as a pattern for pathname expansion, with an asterisk implicitly appended. This pattern is used to generate a list of matching file names for possible completions. </p> </dd> -<dt id='index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029'><span><code>glob-expand-word (C-x *)</code><a href='#index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"></a><span><code class="code">glob-expand-word (C-x *)</code><a class="copiable-link" href="#index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"> &para;</a></span></dt> <dd><p>The word before point is treated as a pattern for pathname expansion, and the list of matching file names is inserted, replacing the word. -If a numeric argument is supplied, a &lsquo;<samp>*</samp>&rsquo; is appended before +If a numeric argument is supplied, a &lsquo;<samp class="samp">*</samp>&rsquo; is appended before pathname expansion. </p> </dd> -<dt id='index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029'><span><code>glob-list-expansions (C-x g)</code><a href='#index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"></a><span><code class="code">glob-list-expansions (C-x g)</code><a class="copiable-link" href="#index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"> &para;</a></span></dt> <dd><p>The list of expansions that would have been generated by -<code>glob-expand-word</code> is displayed, and the line is redrawn. -If a numeric argument is supplied, a &lsquo;<samp>*</samp>&rsquo; is appended before +<code class="code">glob-expand-word</code> is displayed, and the line is redrawn. +If a numeric argument is supplied, a &lsquo;<samp class="samp">*</samp>&rsquo; is appended before pathname expansion. </p> </dd> -<dt id='index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029'><span><code>display-shell-version (C-x C-v)</code><a href='#index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"></a><span><code class="code">display-shell-version (C-x C-v)</code><a class="copiable-link" href="#index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"> &para;</a></span></dt> <dd><p>Display version information about the current instance of Bash. </p> </dd> -<dt id='index-shell_002dexpand_002dline-_0028M_002dC_002de_0029'><span><code>shell-expand-line (M-C-e)</code><a href='#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Expand the line as the shell does. -This performs alias and history expansion as well as all of the shell -word expansions (see <a href="#Shell-Expansions">Shell Expansions</a>). +<dt><a id="index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"></a><span><code class="code">shell-expand-line (M-C-e)</code><a class="copiable-link" href="#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"> &para;</a></span></dt> +<dd><p>Expand the line by performing shell word expansions. +This performs alias and history expansion, +$&rsquo;<var class="var">string</var>&rsquo; and $&quot;<var class="var">string</var>&quot; quoting, +tilde expansion, parameter and variable expansion, arithmetic expansion, +command and proces substitution, +word splitting, and quote removal. +An explicit argument suppresses command and process substitution. </p> </dd> -<dt id='index-history_002dexpand_002dline-_0028M_002d_005e_0029'><span><code>history-expand-line (M-^)</code><a href='#index-history_002dexpand_002dline-_0028M_002d_005e_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-history_002dexpand_002dline-_0028M_002d_005e_0029"></a><span><code class="code">history-expand-line (M-^)</code><a class="copiable-link" href="#index-history_002dexpand_002dline-_0028M_002d_005e_0029"> &para;</a></span></dt> <dd><p>Perform history expansion on the current line. </p> </dd> -<dt id='index-magic_002dspace-_0028_0029'><span><code>magic-space ()</code><a href='#index-magic_002dspace-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-magic_002dspace-_0028_0029"></a><span><code class="code">magic-space ()</code><a class="copiable-link" href="#index-magic_002dspace-_0028_0029"> &para;</a></span></dt> <dd><p>Perform history expansion on the current line and insert a space -(see <a href="#History-Interaction">History Expansion</a>). +(see <a class="pxref" href="#History-Interaction">History Expansion</a>). </p> </dd> -<dt id='index-alias_002dexpand_002dline-_0028_0029'><span><code>alias-expand-line ()</code><a href='#index-alias_002dexpand_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>Perform alias expansion on the current line (see <a href="#Aliases">Aliases</a>). +<dt><a id="index-alias_002dexpand_002dline-_0028_0029"></a><span><code class="code">alias-expand-line ()</code><a class="copiable-link" href="#index-alias_002dexpand_002dline-_0028_0029"> &para;</a></span></dt> +<dd><p>Perform alias expansion on the current line (see <a class="pxref" href="#Aliases">Aliases</a>). </p> </dd> -<dt id='index-history_002dand_002dalias_002dexpand_002dline-_0028_0029'><span><code>history-and-alias-expand-line ()</code><a href='#index-history_002dand_002dalias_002dexpand_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"></a><span><code class="code">history-and-alias-expand-line ()</code><a class="copiable-link" href="#index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"> &para;</a></span></dt> <dd><p>Perform history and alias expansion on the current line. </p> </dd> -<dt id='index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029'><span><code>insert-last-argument (M-. or M-_)</code><a href='#index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029' class='copiable-anchor'> &para;</a></span></dt> -<dd><p>A synonym for <code>yank-last-arg</code>. +<dt><a id="index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"></a><span><code class="code">insert-last-argument (M-. or M-_)</code><a class="copiable-link" href="#index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"> &para;</a></span></dt> +<dd><p>A synonym for <code class="code">yank-last-arg</code>. </p> </dd> -<dt id='index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029'><span><code>edit-and-execute-command (C-x C-e)</code><a href='#index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"></a><span><code class="code">edit-and-execute-command (C-x C-e)</code><a class="copiable-link" href="#index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"> &para;</a></span></dt> <dd><p>Invoke an editor on the current command line, and execute the result as shell commands. Bash attempts to invoke -<code>$VISUAL</code>, <code>$EDITOR</code>, and <code>emacs</code> +<code class="code">$VISUAL</code>, <code class="code">$EDITOR</code>, and <code class="code">emacs</code> as the editor, in that order. </p> +</dd> +<dt><a id="index-execute_002dnamed_002dcommand-_0028M_002dx_0029"></a><span><code class="code">execute-named-command (M-x)</code><a class="copiable-link" href="#index-execute_002dnamed_002dcommand-_0028M_002dx_0029"> &para;</a></span></dt> +<dd><p>Read a bindable readline command name from the input and execute the +function to which it&rsquo;s bound, as if the key sequence to which it was +bound appeared in the input. +If this function is supplied with a numeric argument, it passes that +argument to the function it executes. +</p> </dd> </dl> <hr> </div> </div> -<div class="section" id="Readline-vi-Mode"> -<div class="header"> +<div class="section-level-extent" id="Readline-vi-Mode"> +<div class="nav-panel"> <p> Next: <a href="#Programmable-Completion" accesskey="n" rel="next">Programmable Completion</a>, Previous: <a href="#Bindable-Readline-Commands" accesskey="p" rel="prev">Bindable Readline Commands</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Readline-vi-Mode-1"></span><h3 class="section">8.5 Readline vi Mode</h3> +<h3 class="section" id="Readline-vi-Mode-1"><span>8.5 Readline vi Mode<a class="copiable-link" href="#Readline-vi-Mode-1"> &para;</a></span></h3> -<p>While the Readline library does not have a full set of <code>vi</code> +<p>While the Readline library does not have a full set of <code class="code">vi</code> editing functions, it does contain enough to allow simple editing -of the line. The Readline <code>vi</code> mode behaves as specified in -the <small>POSIX</small> standard. +of the line. The Readline <code class="code">vi</code> mode behaves as specified in +the <small class="sc">POSIX</small> standard. </p> -<p>In order to switch interactively between <code>emacs</code> and <code>vi</code> -editing modes, use the &lsquo;<samp>set -o emacs</samp>&rsquo; and &lsquo;<samp>set -o vi</samp>&rsquo; -commands (see <a href="#The-Set-Builtin">The Set Builtin</a>). -The Readline default is <code>emacs</code> mode. +<p>In order to switch interactively between <code class="code">emacs</code> and <code class="code">vi</code> +editing modes, use the &lsquo;<samp class="samp">set -o emacs</samp>&rsquo; and &lsquo;<samp class="samp">set -o vi</samp>&rsquo; +commands (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). +The Readline default is <code class="code">emacs</code> mode. </p> -<p>When you enter a line in <code>vi</code> mode, you are already placed in -&lsquo;insertion&rsquo; mode, as if you had typed an &lsquo;<samp>i</samp>&rsquo;. Pressing <tt class="key">ESC</tt> +<p>When you enter a line in <code class="code">vi</code> mode, you are already placed in +&lsquo;insertion&rsquo; mode, as if you had typed an &lsquo;<samp class="samp">i</samp>&rsquo;. Pressing <kbd class="key">ESC</kbd> switches you into &lsquo;command&rsquo; mode, where you can edit the text of the -line with the standard <code>vi</code> movement keys, move to previous -history lines with &lsquo;<samp>k</samp>&rsquo; and subsequent lines with &lsquo;<samp>j</samp>&rsquo;, and +line with the standard <code class="code">vi</code> movement keys, move to previous +history lines with &lsquo;<samp class="samp">k</samp>&rsquo; and subsequent lines with &lsquo;<samp class="samp">j</samp>&rsquo;, and so forth. </p> <hr> </div> -<div class="section" id="Programmable-Completion"> -<div class="header"> +<div class="section-level-extent" id="Programmable-Completion"> +<div class="nav-panel"> <p> Next: <a href="#Programmable-Completion-Builtins" accesskey="n" rel="next">Programmable Completion Builtins</a>, Previous: <a href="#Readline-vi-Mode" accesskey="p" rel="prev">Readline vi Mode</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Programmable-Completion-1"></span><h3 class="section">8.6 Programmable Completion</h3> -<span id="index-programmable-completion"></span> +<h3 class="section" id="Programmable-Completion-1"><span>8.6 Programmable Completion<a class="copiable-link" href="#Programmable-Completion-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-programmable-completion"></a> <p>When word completion is attempted for an argument to a command for -which a completion specification (a <var>compspec</var>) has been defined -using the <code>complete</code> builtin (see <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>), +which a completion specification (a <var class="var">compspec</var>) has been defined +using the <code class="code">complete</code> builtin (see <a class="pxref" href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>), the programmable completion facilities are invoked. </p> <p>First, the command name is identified. @@ -12065,13 +12520,13 @@ If a compspec has been defined for that command, the compspec is used to generate the list of possible completions for the word. If the command word is the empty string (completion attempted at the beginning of an empty line), any compspec defined with -the <samp>-E</samp> option to <code>complete</code> is used. +the <samp class="option">-E</samp> option to <code class="code">complete</code> is used. If the command word is a full pathname, a compspec for the full pathname is searched for first. If no compspec is found for the full pathname, an attempt is made to find a compspec for the portion following the final slash. If those searches do not result in a compspec, any compspec defined with -the <samp>-D</samp> option to <code>complete</code> is used as the default. +the <samp class="option">-D</samp> option to <code class="code">complete</code> is used as the default. If there is no default compspec, Bash attempts alias expansion on the command word as a final resort, and attempts to find a compspec for the command word from any successful expansion @@ -12079,45 +12534,45 @@ for the command word from any successful expansion <p>Once a compspec has been found, it is used to generate the list of matching words. If a compspec is not found, the default Bash completion -described above (see <a href="#Commands-For-Completion">Letting Readline Type For You</a>) is performed. +described above (see <a class="pxref" href="#Commands-For-Completion">Letting Readline Type For You</a>) is performed. </p> <p>First, the actions specified by the compspec are used. Only matches which are prefixed by the word being completed are returned. -When the <samp>-f</samp> or <samp>-d</samp> option is used for filename or -directory name completion, the shell variable <code>FIGNORE</code> is +When the <samp class="option">-f</samp> or <samp class="option">-d</samp> option is used for filename or +directory name completion, the shell variable <code class="env">FIGNORE</code> is used to filter the matches. -See <a href="#Bash-Variables">Bash Variables</a>, for a description of <code>FIGNORE</code>. +See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for a description of <code class="env">FIGNORE</code>. </p> <p>Any completions specified by a filename expansion pattern to the -<samp>-G</samp> option are generated next. +<samp class="option">-G</samp> option are generated next. The words generated by the pattern need not match the word being completed. -The <code>GLOBIGNORE</code> shell variable is not used to filter the matches, -but the <code>FIGNORE</code> shell variable is used. +The <code class="env">GLOBIGNORE</code> shell variable is not used to filter the matches, +but the <code class="env">FIGNORE</code> shell variable is used. </p> -<p>Next, the string specified as the argument to the <samp>-W</samp> option +<p>Next, the string specified as the argument to the <samp class="option">-W</samp> option is considered. -The string is first split using the characters in the <code>IFS</code> +The string is first split using the characters in the <code class="env">IFS</code> special variable as delimiters. Shell quoting is honored within the string, in order to provide a mechanism for the words to contain shell metacharacters or characters -in the value of <code>IFS</code>. +in the value of <code class="env">IFS</code>. Each word is then expanded using brace expansion, tilde expansion, parameter and variable expansion, command substitution, and arithmetic expansion, -as described above (see <a href="#Shell-Expansions">Shell Expansions</a>). +as described above (see <a class="pxref" href="#Shell-Expansions">Shell Expansions</a>). The results are split using the rules described above -(see <a href="#Word-Splitting">Word Splitting</a>). +(see <a class="pxref" href="#Word-Splitting">Word Splitting</a>). The results of the expansion are prefix-matched against the word being completed, and the matching words become the possible completions. </p> <p>After these matches have been generated, any shell function or command -specified with the <samp>-F</samp> and <samp>-C</samp> options is invoked. -When the command or function is invoked, the <code>COMP_LINE</code>, -<code>COMP_POINT</code>, <code>COMP_KEY</code>, and <code>COMP_TYPE</code> variables are -assigned values as described above (see <a href="#Bash-Variables">Bash Variables</a>). -If a shell function is being invoked, the <code>COMP_WORDS</code> and -<code>COMP_CWORD</code> variables are also set. +specified with the <samp class="option">-F</samp> and <samp class="option">-C</samp> options is invoked. +When the command or function is invoked, the <code class="env">COMP_LINE</code>, +<code class="env">COMP_POINT</code>, <code class="env">COMP_KEY</code>, and <code class="env">COMP_TYPE</code> variables are +assigned values as described above (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>). +If a shell function is being invoked, the <code class="env">COMP_WORDS</code> and +<code class="env">COMP_CWORD</code> variables are also set. When the function or command is invoked, the first argument ($1) is the name of the command whose arguments are being completed, the second argument ($2) is the word being completed, and the third argument @@ -12127,43 +12582,43 @@ No filtering of the generated completions against the word being completed is performed; the function or command has complete freedom in generating the matches. </p> -<p>Any function specified with <samp>-F</samp> is invoked first. +<p>Any function specified with <samp class="option">-F</samp> is invoked first. The function may use any of the shell facilities, including the -<code>compgen</code> and <code>compopt</code> builtins described below -(see <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>), to generate the matches. -It must put the possible completions in the <code>COMPREPLY</code> array +<code class="code">compgen</code> and <code class="code">compopt</code> builtins described below +(see <a class="pxref" href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>), to generate the matches. +It must put the possible completions in the <code class="env">COMPREPLY</code> array variable, one per array element. </p> -<p>Next, any command specified with the <samp>-C</samp> option is invoked +<p>Next, any command specified with the <samp class="option">-C</samp> option is invoked in an environment equivalent to command substitution. It should print a list of completions, one per line, to the standard output. Backslash may be used to escape a newline, if necessary. </p> <p>After all of the possible completions are generated, any filter -specified with the <samp>-X</samp> option is applied to the list. -The filter is a pattern as used for pathname expansion; a &lsquo;<samp>&amp;</samp>&rsquo; +specified with the <samp class="option">-X</samp> option is applied to the list. +The filter is a pattern as used for pathname expansion; a &lsquo;<samp class="samp">&amp;</samp>&rsquo; in the pattern is replaced with the text of the word being completed. -A literal &lsquo;<samp>&amp;</samp>&rsquo; may be escaped with a backslash; the backslash +A literal &lsquo;<samp class="samp">&amp;</samp>&rsquo; may be escaped with a backslash; the backslash is removed before attempting a match. Any completion that matches the pattern will be removed from the list. -A leading &lsquo;<samp>!</samp>&rsquo; negates the pattern; in this case any completion +A leading &lsquo;<samp class="samp">!</samp>&rsquo; negates the pattern; in this case any completion not matching the pattern will be removed. -If the <code>nocasematch</code> shell option -(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) +If the <code class="code">nocasematch</code> shell option +(see the description of <code class="code">shopt</code> in <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) is enabled, the match is performed without regard to the case of alphabetic characters. </p> -<p>Finally, any prefix and suffix specified with the <samp>-P</samp> and <samp>-S</samp> +<p>Finally, any prefix and suffix specified with the <samp class="option">-P</samp> and <samp class="option">-S</samp> options are added to each member of the completion list, and the result is returned to the Readline completion code as the list of possible completions. </p> <p>If the previously-applied actions do not generate any matches, and the -<samp>-o dirnames</samp> option was supplied to <code>complete</code> when the +<samp class="option">-o dirnames</samp> option was supplied to <code class="code">complete</code> when the compspec was defined, directory name completion is attempted. </p> -<p>If the <samp>-o plusdirs</samp> option was supplied to <code>complete</code> when +<p>If the <samp class="option">-o plusdirs</samp> option was supplied to <code class="code">complete</code> when the compspec was defined, directory name completion is attempted and any matches are added to the results of the other actions. </p> @@ -12171,10 +12626,10 @@ matches are added to the results of the other actions. the completion code as the full set of possible completions. The default Bash completions are not attempted, and the Readline default of filename completion is disabled. -If the <samp>-o bashdefault</samp> option was supplied to <code>complete</code> when +If the <samp class="option">-o bashdefault</samp> option was supplied to <code class="code">complete</code> when the compspec was defined, the default Bash completions are attempted if the compspec generates no matches. -If the <samp>-o default</samp> option was supplied to <code>complete</code> when the +If the <samp class="option">-o default</samp> option was supplied to <code class="code">complete</code> when the compspec was defined, Readline&rsquo;s default completion will be performed if the compspec (and, if attempted, the default Bash completions) generate no matches. @@ -12182,12 +12637,12 @@ generate no matches. <p>When a compspec indicates that directory name completion is desired, the programmable completion functions force Readline to append a slash to completed names which are symbolic links to directories, subject to -the value of the <var>mark-directories</var> Readline variable, regardless -of the setting of the <var>mark-symlinked-directories</var> Readline variable. +the value of the <var class="var">mark-directories</var> Readline variable, regardless +of the setting of the <var class="var">mark-symlinked-directories</var> Readline variable. </p> <p>There is some support for dynamically modifying completions. This is most useful when used in combination with a default completion specified -with <samp>-D</samp>. It&rsquo;s possible for shell functions executed as completion +with <samp class="option">-D</samp>. It&rsquo;s possible for shell functions executed as completion handlers to indicate that completion should be retried by returning an exit status of 124. If a shell function returns 124, and changes the compspec associated with the command on which completion is being @@ -12202,7 +12657,7 @@ file corresponding to the name of the command, the following default completion function would load completions dynamically: </p> <div class="example"> -<pre class="example">_completion_loader() +<pre class="example-preformatted">_completion_loader() { . &quot;/etc/bash_completion.d/$1.sh&quot; &gt;/dev/null 2&gt;&amp;1 &amp;&amp; return 124 } @@ -12211,128 +12666,145 @@ complete -D -F _completion_loader -o bashdefault -o default <hr> </div> -<div class="section" id="Programmable-Completion-Builtins"> -<div class="header"> +<div class="section-level-extent" id="Programmable-Completion-Builtins"> +<div class="nav-panel"> <p> Next: <a href="#A-Programmable-Completion-Example" accesskey="n" rel="next">A Programmable Completion Example</a>, Previous: <a href="#Programmable-Completion" accesskey="p" rel="prev">Programmable Completion</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Programmable-Completion-Builtins-1"></span><h3 class="section">8.7 Programmable Completion Builtins</h3> -<span id="index-completion-builtins"></span> +<h3 class="section" id="Programmable-Completion-Builtins-1"><span>8.7 Programmable Completion Builtins<a class="copiable-link" href="#Programmable-Completion-Builtins-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-completion-builtins"></a> <p>Three builtin commands are available to manipulate the programmable completion facilities: one to specify how the arguments to a particular command are to be completed, and two to modify the completion as it is happening. </p> -<dl compact="compact"> -<dt id='index-compgen'><span><code>compgen</code><a href='#index-compgen' class='copiable-anchor'> &para;</a></span></dt> +<dl class="table"> +<dt><a id="index-compgen"></a><span><code class="code">compgen</code><a class="copiable-link" href="#index-compgen"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example"><code>compgen [<var>option</var>] [<var>word</var>]</code> +<pre class="example-preformatted"><code class="code">compgen [-V <var class="var">varname</var>] [<var class="var">option</var>] [<var class="var">word</var>]</code> </pre></div> -<p>Generate possible completion matches for <var>word</var> according to -the <var>option</var>s, which may be any option accepted by the -<code>complete</code> -builtin with the exception of <samp>-p</samp> and <samp>-r</samp>, and write -the matches to the standard output. -When using the <samp>-F</samp> or <samp>-C</samp> options, the various shell variables +<p>Generate possible completion matches for <var class="var">word</var> according to +the <var class="var">option</var>s, which may be any option accepted by the +<code class="code">complete</code> +builtin with the exceptions of +<samp class="option">-p</samp>, +<samp class="option">-r</samp>, +<samp class="option">-D</samp>, +<samp class="option">-E</samp>, +and +<samp class="option">-I</samp>, +and write the matches to the standard output. +</p> +<p>If the <samp class="option">-V</samp> option is supplied, <code class="code">compgen</code> stores the generated +completions into the indexed array variable <var class="var">varname</var> instead of writing +them to the standard output. +</p> +<p>When using the <samp class="option">-F</samp> or <samp class="option">-C</samp> options, the various shell variables set by the programmable completion facilities, while available, will not have useful values. </p> <p>The matches will be generated in the same way as if the programmable completion code had generated them directly from a completion specification with the same flags. -If <var>word</var> is specified, only those completions matching <var>word</var> +If <var class="var">word</var> is specified, only those completions matching <var class="var">word</var> will be displayed. </p> <p>The return value is true unless an invalid option is supplied, or no matches were generated. </p> </dd> -<dt id='index-complete'><span><code>complete</code><a href='#index-complete' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-complete"></a><span><code class="code">complete</code><a class="copiable-link" href="#index-complete"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example"><code>complete [-abcdefgjksuv] [-o <var>comp-option</var>] [-DEI] [-A <var>action</var>] [-G <var>globpat</var>] -[-W <var>wordlist</var>] [-F <var>function</var>] [-C <var>command</var>] [-X <var>filterpat</var>] -[-P <var>prefix</var>] [-S <var>suffix</var>] <var>name</var> [<var>name</var> &hellip;]</code> -<code>complete -pr [-DEI] [<var>name</var> &hellip;]</code> +<pre class="example-preformatted"><code class="code">complete [-abcdefgjksuv] [-o <var class="var">comp-option</var>] [-DEI] [-A <var class="var">action</var>] +[-G <var class="var">globpat</var>] [-W <var class="var">wordlist</var>] [-F <var class="var">function</var>] [-C <var class="var">command</var>] +[-X <var class="var">filterpat</var>] [-P <var class="var">prefix</var>] [-S <var class="var">suffix</var>] <var class="var">name</var> [<var class="var">name</var> ...]</code> +<code class="code">complete -pr [-DEI] [<var class="var">name</var> ...]</code> </pre></div> -<p>Specify how arguments to each <var>name</var> should be completed. -If the <samp>-p</samp> option is supplied, or if no options are supplied, existing +<p>Specify how arguments to each <var class="var">name</var> should be completed. +If the <samp class="option">-p</samp> option is supplied, or if no options or <var class="var">name</var>s +are supplied, existing completion specifications are printed in a way that allows them to be reused as input. -The <samp>-r</samp> option removes a completion specification for -each <var>name</var>, or, if no <var>name</var>s are supplied, all +The <samp class="option">-r</samp> option removes a completion specification for +each <var class="var">name</var>, or, if no <var class="var">name</var>s are supplied, all completion specifications. -The <samp>-D</samp> option indicates that other supplied options and actions should +The <samp class="option">-D</samp> option indicates that other supplied options and actions should apply to the &ldquo;default&rdquo; command completion; that is, completion attempted on a command for which no completion has previously been defined. -The <samp>-E</samp> option indicates that other supplied options and actions should +The <samp class="option">-E</samp> option indicates that other supplied options and actions should apply to &ldquo;empty&rdquo; command completion; that is, completion attempted on a blank line. -The <samp>-I</samp> option indicates that other supplied options and actions should +The <samp class="option">-I</samp> option indicates that other supplied options and actions should apply to completion on the initial non-assignment word on the line, or after a -command delimiter such as &lsquo;<samp>;</samp>&rsquo; or &lsquo;<samp>|</samp>&rsquo;, which is usually command +command delimiter such as &lsquo;<samp class="samp">;</samp>&rsquo; or &lsquo;<samp class="samp">|</samp>&rsquo;, which is usually command name completion. -If multiple options are supplied, the <samp>-D</samp> option takes precedence -over <samp>-E</samp>, and both take precedence over <samp>-I</samp>. -If any of <samp>-D</samp>, <samp>-E</samp>, or <samp>-I</samp> are supplied, any other -<var>name</var> arguments are ignored; these completions only apply to the case +If multiple options are supplied, the <samp class="option">-D</samp> option takes precedence +over <samp class="option">-E</samp>, and both take precedence over <samp class="option">-I</samp>. +If any of <samp class="option">-D</samp>, <samp class="option">-E</samp>, or <samp class="option">-I</samp> are supplied, any other +<var class="var">name</var> arguments are ignored; these completions only apply to the case specified by the option. </p> <p>The process of applying these completion specifications when word completion -is attempted is described above (see <a href="#Programmable-Completion">Programmable Completion</a>). +is attempted is described above (see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>). </p> <p>Other options, if specified, have the following meanings. -The arguments to the <samp>-G</samp>, <samp>-W</samp>, and <samp>-X</samp> options -(and, if necessary, the <samp>-P</samp> and <samp>-S</samp> options) +The arguments to the <samp class="option">-G</samp>, <samp class="option">-W</samp>, and <samp class="option">-X</samp> options +(and, if necessary, the <samp class="option">-P</samp> and <samp class="option">-S</samp> options) should be quoted to protect them from expansion before the -<code>complete</code> builtin is invoked. +<code class="code">complete</code> builtin is invoked. </p> -<dl compact="compact"> -<dt><span><code>-o <var>comp-option</var></code></span></dt> -<dd><p>The <var>comp-option</var> controls several aspects of the compspec&rsquo;s behavior +<dl class="table"> +<dt><code class="code">-o <var class="var">comp-option</var></code></dt> +<dd><p>The <var class="var">comp-option</var> controls several aspects of the compspec&rsquo;s behavior beyond the simple generation of completions. -<var>comp-option</var> may be one of: +<var class="var">comp-option</var> may be one of: </p> -<dl compact="compact"> -<dt><span><code>bashdefault</code></span></dt> +<dl class="table"> +<dt><code class="code">bashdefault</code></dt> <dd><p>Perform the rest of the default Bash completions if the compspec generates no matches. </p> </dd> -<dt><span><code>default</code></span></dt> +<dt><code class="code">default</code></dt> <dd><p>Use Readline&rsquo;s default filename completion if the compspec generates no matches. </p> </dd> -<dt><span><code>dirnames</code></span></dt> +<dt><code class="code">dirnames</code></dt> <dd><p>Perform directory name completion if the compspec generates no matches. </p> </dd> -<dt><span><code>filenames</code></span></dt> +<dt><code class="code">filenames</code></dt> <dd><p>Tell Readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names, quoting special characters, or suppressing trailing spaces). This option is intended to be used with shell functions specified -with <samp>-F</samp>. +with <samp class="option">-F</samp>. </p> </dd> -<dt><span><code>noquote</code></span></dt> +<dt><code class="code">fullquote</code></dt> +<dd><p>Tell Readline to quote all the completed words even if they are not +filenames. +</p> +</dd> +<dt><code class="code">noquote</code></dt> <dd><p>Tell Readline not to quote the completed words if they are filenames (quoting filenames is the default). </p> </dd> -<dt><span><code>nosort</code></span></dt> +<dt><code class="code">nosort</code></dt> <dd><p>Tell Readline not to sort the list of possible completions alphabetically. </p> </dd> -<dt><span><code>nospace</code></span></dt> +<dt><code class="code">nospace</code></dt> <dd><p>Tell Readline not to append a space (the default) to words completed at the end of the line. </p> </dd> -<dt><span><code>plusdirs</code></span></dt> +<dt><code class="code">plusdirs</code></dt> <dd><p>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. @@ -12341,196 +12813,203 @@ matches are added to the results of the other actions. </dl> </dd> -<dt><span><code>-A <var>action</var></code></span></dt> -<dd><p>The <var>action</var> may be one of the following to generate a list of possible +<dt><code class="code">-A <var class="var">action</var></code></dt> +<dd><p>The <var class="var">action</var> may be one of the following to generate a list of possible completions: </p> -<dl compact="compact"> -<dt><span><code>alias</code></span></dt> -<dd><p>Alias names. May also be specified as <samp>-a</samp>. +<dl class="table"> +<dt><code class="code">alias</code></dt> +<dd><p>Alias names. May also be specified as <samp class="option">-a</samp>. </p> </dd> -<dt><span><code>arrayvar</code></span></dt> +<dt><code class="code">arrayvar</code></dt> <dd><p>Array variable names. </p> </dd> -<dt><span><code>binding</code></span></dt> -<dd><p>Readline key binding names (see <a href="#Bindable-Readline-Commands">Bindable Readline Commands</a>). +<dt><code class="code">binding</code></dt> +<dd><p>Readline key binding names (see <a class="pxref" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>). </p> </dd> -<dt><span><code>builtin</code></span></dt> -<dd><p>Names of shell builtin commands. May also be specified as <samp>-b</samp>. +<dt><code class="code">builtin</code></dt> +<dd><p>Names of shell builtin commands. May also be specified as <samp class="option">-b</samp>. </p> </dd> -<dt><span><code>command</code></span></dt> -<dd><p>Command names. May also be specified as <samp>-c</samp>. +<dt><code class="code">command</code></dt> +<dd><p>Command names. May also be specified as <samp class="option">-c</samp>. </p> </dd> -<dt><span><code>directory</code></span></dt> -<dd><p>Directory names. May also be specified as <samp>-d</samp>. +<dt><code class="code">directory</code></dt> +<dd><p>Directory names. May also be specified as <samp class="option">-d</samp>. </p> </dd> -<dt><span><code>disabled</code></span></dt> +<dt><code class="code">disabled</code></dt> <dd><p>Names of disabled shell builtins. </p> </dd> -<dt><span><code>enabled</code></span></dt> +<dt><code class="code">enabled</code></dt> <dd><p>Names of enabled shell builtins. </p> </dd> -<dt><span><code>export</code></span></dt> -<dd><p>Names of exported shell variables. May also be specified as <samp>-e</samp>. +<dt><code class="code">export</code></dt> +<dd><p>Names of exported shell variables. May also be specified as <samp class="option">-e</samp>. </p> </dd> -<dt><span><code>file</code></span></dt> -<dd><p>File names. May also be specified as <samp>-f</samp>. +<dt><code class="code">file</code></dt> +<dd><p>File names. May also be specified as <samp class="option">-f</samp>. </p> </dd> -<dt><span><code>function</code></span></dt> +<dt><code class="code">function</code></dt> <dd><p>Names of shell functions. </p> </dd> -<dt><span><code>group</code></span></dt> -<dd><p>Group names. May also be specified as <samp>-g</samp>. +<dt><code class="code">group</code></dt> +<dd><p>Group names. May also be specified as <samp class="option">-g</samp>. </p> </dd> -<dt><span><code>helptopic</code></span></dt> -<dd><p>Help topics as accepted by the <code>help</code> builtin (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +<dt><code class="code">helptopic</code></dt> +<dd><p>Help topics as accepted by the <code class="code">help</code> builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). </p> </dd> -<dt><span><code>hostname</code></span></dt> +<dt><code class="code">hostname</code></dt> <dd><p>Hostnames, as taken from the file specified by the -<code>HOSTFILE</code> shell variable (see <a href="#Bash-Variables">Bash Variables</a>). +<code class="env">HOSTFILE</code> shell variable (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>). </p> </dd> -<dt><span><code>job</code></span></dt> -<dd><p>Job names, if job control is active. May also be specified as <samp>-j</samp>. +<dt><code class="code">job</code></dt> +<dd><p>Job names, if job control is active. May also be specified as <samp class="option">-j</samp>. </p> </dd> -<dt><span><code>keyword</code></span></dt> -<dd><p>Shell reserved words. May also be specified as <samp>-k</samp>. +<dt><code class="code">keyword</code></dt> +<dd><p>Shell reserved words. May also be specified as <samp class="option">-k</samp>. </p> </dd> -<dt><span><code>running</code></span></dt> +<dt><code class="code">running</code></dt> <dd><p>Names of running jobs, if job control is active. </p> </dd> -<dt><span><code>service</code></span></dt> -<dd><p>Service names. May also be specified as <samp>-s</samp>. +<dt><code class="code">service</code></dt> +<dd><p>Service names. May also be specified as <samp class="option">-s</samp>. </p> </dd> -<dt><span><code>setopt</code></span></dt> -<dd><p>Valid arguments for the <samp>-o</samp> option to the <code>set</code> builtin -(see <a href="#The-Set-Builtin">The Set Builtin</a>). +<dt><code class="code">setopt</code></dt> +<dd><p>Valid arguments for the <samp class="option">-o</samp> option to the <code class="code">set</code> builtin +(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). </p> </dd> -<dt><span><code>shopt</code></span></dt> -<dd><p>Shell option names as accepted by the <code>shopt</code> builtin -(see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +<dt><code class="code">shopt</code></dt> +<dd><p>Shell option names as accepted by the <code class="code">shopt</code> builtin +(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). </p> </dd> -<dt><span><code>signal</code></span></dt> +<dt><code class="code">signal</code></dt> <dd><p>Signal names. </p> </dd> -<dt><span><code>stopped</code></span></dt> +<dt><code class="code">stopped</code></dt> <dd><p>Names of stopped jobs, if job control is active. </p> </dd> -<dt><span><code>user</code></span></dt> -<dd><p>User names. May also be specified as <samp>-u</samp>. +<dt><code class="code">user</code></dt> +<dd><p>User names. May also be specified as <samp class="option">-u</samp>. </p> </dd> -<dt><span><code>variable</code></span></dt> -<dd><p>Names of all shell variables. May also be specified as <samp>-v</samp>. +<dt><code class="code">variable</code></dt> +<dd><p>Names of all shell variables. May also be specified as <samp class="option">-v</samp>. </p></dd> </dl> </dd> -<dt><span><code>-C <var>command</var></code></span></dt> -<dd><p><var>command</var> is executed in a subshell environment, and its output is +<dt><code class="code">-C <var class="var">command</var></code></dt> +<dd><p><var class="var">command</var> is executed in a subshell environment, and its output is used as the possible completions. -Arguments are passed as with the <samp>-F</samp> option. +Arguments are passed as with the <samp class="option">-F</samp> option. </p> </dd> -<dt><span><code>-F <var>function</var></code></span></dt> -<dd><p>The shell function <var>function</var> is executed in the current shell +<dt><code class="code">-F <var class="var">function</var></code></dt> +<dd><p>The shell function <var class="var">function</var> is executed in the current shell environment. When it is executed, $1 is the name of the command whose arguments are being completed, $2 is the word being completed, and $3 is the word preceding the word being completed, as described above -(see <a href="#Programmable-Completion">Programmable Completion</a>). +(see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>). When it finishes, the possible completions are retrieved from the value -of the <code>COMPREPLY</code> array variable. +of the <code class="env">COMPREPLY</code> array variable. </p> </dd> -<dt><span><code>-G <var>globpat</var></code></span></dt> -<dd><p>The filename expansion pattern <var>globpat</var> is expanded to generate +<dt><code class="code">-G <var class="var">globpat</var></code></dt> +<dd><p>The filename expansion pattern <var class="var">globpat</var> is expanded to generate the possible completions. </p> </dd> -<dt><span><code>-P <var>prefix</var></code></span></dt> -<dd><p><var>prefix</var> is added at the beginning of each possible completion +<dt><code class="code">-P <var class="var">prefix</var></code></dt> +<dd><p><var class="var">prefix</var> is added at the beginning of each possible completion after all other options have been applied. </p> </dd> -<dt><span><code>-S <var>suffix</var></code></span></dt> -<dd><p><var>suffix</var> is appended to each possible completion +<dt><code class="code">-S <var class="var">suffix</var></code></dt> +<dd><p><var class="var">suffix</var> is appended to each possible completion after all other options have been applied. </p> </dd> -<dt><span><code>-W <var>wordlist</var></code></span></dt> -<dd><p>The <var>wordlist</var> is split using the characters in the -<code>IFS</code> special variable as delimiters, and each resultant word +<dt><code class="code">-W <var class="var">wordlist</var></code></dt> +<dd><p>The <var class="var">wordlist</var> is split using the characters in the +<code class="env">IFS</code> special variable as delimiters, and each resultant word is expanded. The possible completions are the members of the resultant list which match the word being completed. </p> </dd> -<dt><span><code>-X <var>filterpat</var></code></span></dt> -<dd><p><var>filterpat</var> is a pattern as used for filename expansion. +<dt><code class="code">-X <var class="var">filterpat</var></code></dt> +<dd><p><var class="var">filterpat</var> is a pattern as used for filename expansion. It is applied to the list of possible completions generated by the preceding options and arguments, and each completion matching -<var>filterpat</var> is removed from the list. -A leading &lsquo;<samp>!</samp>&rsquo; in <var>filterpat</var> negates the pattern; in this -case, any completion not matching <var>filterpat</var> is removed. +<var class="var">filterpat</var> is removed from the list. +A leading &lsquo;<samp class="samp">!</samp>&rsquo; in <var class="var">filterpat</var> negates the pattern; in this +case, any completion not matching <var class="var">filterpat</var> is removed. </p></dd> </dl> <p>The return value is true unless an invalid option is supplied, an option -other than <samp>-p</samp> or <samp>-r</samp> is supplied without a <var>name</var> +other than +<samp class="option">-p</samp>, +<samp class="option">-r</samp>, +<samp class="option">-D</samp>, +<samp class="option">-E</samp>, +or +<samp class="option">-I</samp> +is supplied without a <var class="var">name</var> argument, an attempt is made to remove a completion specification for -a <var>name</var> for which no specification exists, or +a <var class="var">name</var> for which no specification exists, or an error occurs adding a completion specification. </p> </dd> -<dt id='index-compopt'><span><code>compopt</code><a href='#index-compopt' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-compopt"></a><span><code class="code">compopt</code><a class="copiable-link" href="#index-compopt"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example"><code>compopt</code> [-o <var>option</var>] [-DEI] [+o <var>option</var>] [<var>name</var>] +<pre class="example-preformatted"><code class="code">compopt</code> [-o <var class="var">option</var>] [-DEI] [+o <var class="var">option</var>] [<var class="var">name</var>] </pre></div> -<p>Modify completion options for each <var>name</var> according to the -<var>option</var>s, or for the currently-executing completion if no <var>name</var>s +<p>Modify completion options for each <var class="var">name</var> according to the +<var class="var">option</var>s, or for the currently-executing completion if no <var class="var">name</var>s are supplied. -If no <var>option</var>s are given, display the completion options for each -<var>name</var> or the current completion. -The possible values of <var>option</var> are those valid for the <code>complete</code> +If no <var class="var">option</var>s are given, display the completion options for each +<var class="var">name</var> or the current completion. +The possible values of <var class="var">option</var> are those valid for the <code class="code">complete</code> builtin described above. -The <samp>-D</samp> option indicates that other supplied options should +The <samp class="option">-D</samp> option indicates that other supplied options should apply to the &ldquo;default&rdquo; command completion; that is, completion attempted on a command for which no completion has previously been defined. -The <samp>-E</samp> option indicates that other supplied options should +The <samp class="option">-E</samp> option indicates that other supplied options should apply to &ldquo;empty&rdquo; command completion; that is, completion attempted on a blank line. -The <samp>-I</samp> option indicates that other supplied options should +The <samp class="option">-I</samp> option indicates that other supplied options should apply to completion on the initial non-assignment word on the line, or after a -command delimiter such as &lsquo;<samp>;</samp>&rsquo; or &lsquo;<samp>|</samp>&rsquo;, which is usually command +command delimiter such as &lsquo;<samp class="samp">;</samp>&rsquo; or &lsquo;<samp class="samp">|</samp>&rsquo;, which is usually command name completion. </p> -<p>If multiple options are supplied, the <samp>-D</samp> option takes precedence -over <samp>-E</samp>, and both take precedence over <samp>-I</samp> +<p>If multiple options are supplied, the <samp class="option">-D</samp> option takes precedence +over <samp class="option">-E</samp>, and both take precedence over <samp class="option">-I</samp> </p> <p>The return value is true unless an invalid option is supplied, an attempt -is made to modify the options for a <var>name</var> for which no completion +is made to modify the options for a <var class="var">name</var> for which no completion specification exists, or an output error occurs. </p> </dd> @@ -12538,42 +13017,42 @@ specification exists, or an output error occurs. <hr> </div> -<div class="section" id="A-Programmable-Completion-Example"> -<div class="header"> +<div class="section-level-extent" id="A-Programmable-Completion-Example"> +<div class="nav-panel"> <p> Previous: <a href="#Programmable-Completion-Builtins" accesskey="p" rel="prev">Programmable Completion Builtins</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="A-Programmable-Completion-Example-1"></span><h3 class="section">8.8 A Programmable Completion Example</h3> +<h3 class="section" id="A-Programmable-Completion-Example-1"><span>8.8 A Programmable Completion Example<a class="copiable-link" href="#A-Programmable-Completion-Example-1"> &para;</a></span></h3> <p>The most common way to obtain additional completion functionality beyond -the default actions <code>complete</code> and <code>compgen</code> provide is to use -a shell function and bind it to a particular command using <code>complete -F</code>. +the default actions <code class="code">complete</code> and <code class="code">compgen</code> provide is to use +a shell function and bind it to a particular command using <code class="code">complete -F</code>. </p> -<p>The following function provides completions for the <code>cd</code> builtin. +<p>The following function provides completions for the <code class="code">cd</code> builtin. It is a reasonably good example of what shell functions must do when -used for completion. This function uses the word passed as <code>$2</code> +used for completion. This function uses the word passed as <code class="code">$2</code> to determine the directory name to complete. You can also use the -<code>COMP_WORDS</code> array variable; the current word is indexed by the -<code>COMP_CWORD</code> variable. +<code class="code">COMP_WORDS</code> array variable; the current word is indexed by the +<code class="code">COMP_CWORD</code> variable. </p> -<p>The function relies on the <code>complete</code> and <code>compgen</code> builtins -to do much of the work, adding only the things that the Bash <code>cd</code> +<p>The function relies on the <code class="code">complete</code> and <code class="code">compgen</code> builtins +to do much of the work, adding only the things that the Bash <code class="code">cd</code> does beyond accepting basic directory names: -tilde expansion (see <a href="#Tilde-Expansion">Tilde Expansion</a>), -searching directories in <var>$CDPATH</var>, which is described above -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>), -and basic support for the <code>cdable_vars</code> shell option -(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>). -<code>_comp_cd</code> modifies the value of <var>IFS</var> so that it contains only +tilde expansion (see <a class="pxref" href="#Tilde-Expansion">Tilde Expansion</a>), +searching directories in <var class="var">$CDPATH</var>, which is described above +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>), +and basic support for the <code class="code">cdable_vars</code> shell option +(see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>). +<code class="code">_comp_cd</code> modifies the value of <var class="var">IFS</var> so that it contains only a newline to accommodate file names containing spaces and tabs &ndash; -<code>compgen</code> prints the possible completions it generates one per line. +<code class="code">compgen</code> prints the possible completions it generates one per line. </p> -<p>Possible completions go into the <var>COMPREPLY</var> array variable, one +<p>Possible completions go into the <var class="var">COMPREPLY</var> array variable, one completion per array element. The programmable completion system retrieves the completions from there when the function returns. </p> <div class="example"> -<pre class="example"># A completion function for the cd builtin +<pre class="example-preformatted"># A completion function for the cd builtin # based on the cd completion function from the bash_completion package _comp_cd() { @@ -12621,298 +13100,303 @@ _comp_cd() } </pre></div> -<p>We install the completion function using the <samp>-F</samp> option to -<code>complete</code>: +<p>We install the completion function using the <samp class="option">-F</samp> option to +<code class="code">complete</code>: </p> <div class="example"> -<pre class="example"># Tell readline to quote appropriate and append slashes to directories; +<pre class="example-preformatted"># Tell readline to quote appropriate and append slashes to directories; # use the bash default completion for other arguments complete -o filenames -o nospace -o bashdefault -F _comp_cd cd </pre></div> <p>Since we&rsquo;d like Bash and Readline to take care of some of the other details for us, we use several other options to tell Bash -and Readline what to do. The <samp>-o filenames</samp> option tells Readline +and Readline what to do. +The <samp class="option">-o filenames</samp> option tells Readline that the possible completions should be treated as filenames, and quoted -appropriately. That option will also cause Readline to append a slash to +appropriately. +That option will also cause Readline to append a slash to filenames it can determine are directories (which is why we might want to -extend <code>_comp_cd</code> to append a slash if we&rsquo;re using directories found -via <var>CDPATH</var>: Readline can&rsquo;t tell those completions are directories). -The <samp>-o nospace</samp> option tells Readline to not append a space +extend <code class="code">_comp_cd</code> to append a slash if we&rsquo;re using directories found +via <var class="var">CDPATH</var>: Readline can&rsquo;t tell those completions are directories). +The <samp class="option">-o nospace</samp> option tells Readline to not append a space character to the directory name, in case we want to append to it. -The <samp>-o bashdefault</samp> option brings in the rest of the &quot;Bash default&quot; +The <samp class="option">-o bashdefault</samp> option brings in the rest of the &quot;Bash default&quot; completions &ndash; possible completions that Bash adds to the default Readline -set. These include things like command name completion, variable completion -for words beginning with &lsquo;<samp>$</samp>&rsquo; or &lsquo;<samp>${</samp>&rsquo;, completions containing pathname -expansion patterns (see <a href="#Filename-Expansion">Filename Expansion</a>), and so on. +set. +These include things like command name completion, variable completion +for words beginning with &lsquo;<samp class="samp">$</samp>&rsquo; or &lsquo;<samp class="samp">${</samp>&rsquo;, completions containing +pathname expansion patterns (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>), and so on. </p> -<p>Once installed using <code>complete</code>, <code>_comp_cd</code> will be called every -time we attempt word completion for a <code>cd</code> command. +<p>Once installed using <code class="code">complete</code>, <code class="code">_comp_cd</code> will be called every +time we attempt word completion for a <code class="code">cd</code> command. </p> <p>Many more examples &ndash; an extensive collection of completions for most of the common GNU, Unix, and Linux commands &ndash; are available as part of the bash_completion project. This is installed by default on many GNU/Linux distributions. Originally written by Ian Macdonald, the project now lives -at <a href="https://github.com/scop/bash-completion/">https://github.com/scop/bash-completion/</a>. There are ports for -other systems such as Solaris and Mac OS X. +at <a class="url" href="https://github.com/scop/bash-completion/">https://github.com/scop/bash-completion/</a>. +There are ports for other systems such as Solaris and Mac OS X. </p> <p>An older version of the bash_completion package is distributed with bash -in the <samp>examples/complete</samp> subdirectory. +in the <samp class="file">examples/complete</samp> subdirectory. </p> -<span id="index-History_002c-how-to-use"></span> +<a class="index-entry-id" id="index-History_002c-how-to-use"></a> <hr> </div> </div> -<div class="chapter" id="Using-History-Interactively"> -<div class="header"> +<div class="chapter-level-extent" id="Using-History-Interactively"> +<div class="nav-panel"> <p> Next: <a href="#Installing-Bash" accesskey="n" rel="next">Installing Bash</a>, Previous: <a href="#Command-Line-Editing" accesskey="p" rel="prev">Command Line Editing</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Using-History-Interactively-1"></span><h2 class="chapter">9 Using History Interactively</h2> +<h2 class="chapter" id="Using-History-Interactively-1"><span>9 Using History Interactively<a class="copiable-link" href="#Using-History-Interactively-1"> &para;</a></span></h2> -<p>This chapter describes how to use the <small>GNU</small> History Library +<p>This chapter describes how to use the <small class="sc">GNU</small> History Library interactively, from a user&rsquo;s standpoint. It should be considered a user&rsquo;s guide. -For information on using the <small>GNU</small> History Library in other programs, -see the <small>GNU</small> Readline Library Manual. +For information on using the <small class="sc">GNU</small> History Library in other programs, +see the <small class="sc">GNU</small> Readline Library Manual. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Bash-History-Facilities" accesskey="1">Bash History Facilities</a></li> <li><a href="#Bash-History-Builtins" accesskey="2">Bash History Builtins</a></li> <li><a href="#History-Interaction" accesskey="3">History Expansion</a></li> </ul> <hr> -<div class="section" id="Bash-History-Facilities"> -<div class="header"> +<div class="section-level-extent" id="Bash-History-Facilities"> +<div class="nav-panel"> <p> Next: <a href="#Bash-History-Builtins" accesskey="n" rel="next">Bash History Builtins</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bash-History-Facilities-1"></span><h3 class="section">9.1 Bash History Facilities</h3> -<span id="index-command-history"></span> -<span id="index-history-list"></span> +<h3 class="section" id="Bash-History-Facilities-1"><span>9.1 Bash History Facilities<a class="copiable-link" href="#Bash-History-Facilities-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-command-history"></a> +<a class="index-entry-id" id="index-history-list"></a> -<p>When the <samp>-o history</samp> option to the <code>set</code> builtin -is enabled (see <a href="#The-Set-Builtin">The Set Builtin</a>), -the shell provides access to the <em>command history</em>, +<p>When the <samp class="option">-o history</samp> option to the <code class="code">set</code> builtin +is enabled (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>), +the shell provides access to the <em class="dfn">command history</em>, the list of commands previously typed. -The value of the <code>HISTSIZE</code> shell variable is used as the +The value of the <code class="env">HISTSIZE</code> shell variable is used as the number of commands to save in a history list. -The text of the last <code>$HISTSIZE</code> +The text of the last <code class="env">$HISTSIZE</code> commands (default 500) is saved. The shell stores each command in the history list prior to parameter and variable expansion but after history expansion is performed, subject to the values of the shell variables -<code>HISTIGNORE</code> and <code>HISTCONTROL</code>. +<code class="env">HISTIGNORE</code> and <code class="env">HISTCONTROL</code>. </p> <p>When the shell starts up, the history is initialized from the -file named by the <code>HISTFILE</code> variable (default <samp>~/.bash_history</samp>). -The file named by the value of <code>HISTFILE</code> is truncated, if +file named by the <code class="env">HISTFILE</code> variable (default <samp class="file">~/.bash_history</samp>). +The file named by the value of <code class="env">HISTFILE</code> is truncated, if necessary, to contain no more than the number of lines specified by -the value of the <code>HISTFILESIZE</code> variable. +the value of the <code class="env">HISTFILESIZE</code> variable. When a shell with history enabled exits, the last -<code>$HISTSIZE</code> lines are copied from the history list to the file -named by <code>$HISTFILE</code>. -If the <code>histappend</code> shell option is set (see <a href="#Bash-Builtins">Bash Builtin Commands</a>), +<code class="env">$HISTSIZE</code> lines are copied from the history list to the file +named by <code class="env">$HISTFILE</code>. +If the <code class="code">histappend</code> shell option is set (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>), the lines are appended to the history file, otherwise the history file is overwritten. -If <code>HISTFILE</code> -is unset, or if the history file is unwritable, the history is not saved. +If <code class="env">HISTFILE</code> is unset or null, +or if the history file is unwritable, the history is not saved. After saving the history, the history file is truncated -to contain no more than <code>$HISTFILESIZE</code> lines. -If <code>HISTFILESIZE</code> is unset, or set to null, a non-numeric value, or +to contain no more than <code class="env">$HISTFILESIZE</code> lines. +If <code class="env">HISTFILESIZE</code> is unset, or set to null, a non-numeric value, or a numeric value less than zero, the history file is not truncated. </p> -<p>If the <code>HISTTIMEFORMAT</code> is set, the time stamp information +<p>If the <code class="env">HISTTIMEFORMAT</code> is set, the time stamp information associated with each history entry is written to the history file, marked with the history comment character. When the history file is read, lines beginning with the history comment character followed immediately by a digit are interpreted as timestamps for the following history entry. </p> -<p>The builtin command <code>fc</code> may be used to list or edit and re-execute +<p>The <code class="code">fc</code> builtin command may be used to list or edit and re-execute a portion of the history list. -The <code>history</code> builtin may be used to display or modify the history +The <code class="code">history</code> builtin may be used to display or modify the history list and manipulate the history file. When using command-line editing, search commands are available in each editing mode that provide access to the -history list (see <a href="#Commands-For-History">Commands For Manipulating The History</a>). +history list (see <a class="pxref" href="#Commands-For-History">Commands For Manipulating The History</a>). </p> <p>The shell allows control over which commands are saved on the history -list. The <code>HISTCONTROL</code> and <code>HISTIGNORE</code> -variables may be set to cause the shell to save only a subset of the +list. +The <code class="env">HISTCONTROL</code> and <code class="env">HISTIGNORE</code> +variables are used to cause the shell to save only a subset of the commands entered. -The <code>cmdhist</code> +The <code class="code">cmdhist</code> shell option, if enabled, causes the shell to attempt to save each line of a multi-line command in the same history entry, adding semicolons where necessary to preserve syntactic correctness. -The <code>lithist</code> +The <code class="code">lithist</code> shell option causes the shell to save the command with embedded newlines instead of semicolons. -The <code>shopt</code> builtin is used to set these options. -See <a href="#The-Shopt-Builtin">The Shopt Builtin</a>, for a description of <code>shopt</code>. +The <code class="code">shopt</code> builtin is used to set these options. +See <a class="xref" href="#The-Shopt-Builtin">The Shopt Builtin</a>, for a description of <code class="code">shopt</code>. </p> <hr> </div> -<div class="section" id="Bash-History-Builtins"> -<div class="header"> +<div class="section-level-extent" id="Bash-History-Builtins"> +<div class="nav-panel"> <p> Next: <a href="#History-Interaction" accesskey="n" rel="next">History Expansion</a>, Previous: <a href="#Bash-History-Facilities" accesskey="p" rel="prev">Bash History Facilities</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Bash-History-Builtins-1"></span><h3 class="section">9.2 Bash History Builtins</h3> -<span id="index-history-builtins"></span> +<h3 class="section" id="Bash-History-Builtins-1"><span>9.2 Bash History Builtins<a class="copiable-link" href="#Bash-History-Builtins-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-history-builtins"></a> <p>Bash provides two builtin commands which manipulate the history list and history file. </p> -<dl compact="compact"> -<dt id='index-fc'><span><code>fc</code><a href='#index-fc' class='copiable-anchor'> &para;</a></span></dt> +<dl class="table"> +<dt><a id="index-fc"></a><span><code class="code">fc</code><a class="copiable-link" href="#index-fc"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example"><code>fc [-e <var>ename</var>] [-lnr] [<var>first</var>] [<var>last</var>]</code> -<code>fc -s [<var>pat</var>=<var>rep</var>] [<var>command</var>]</code> +<pre class="example-preformatted"><code class="code">fc [-e <var class="var">ename</var>] [-lnr] [<var class="var">first</var>] [<var class="var">last</var>]</code> +<code class="code">fc -s [<var class="var">pat</var>=<var class="var">rep</var>] [<var class="var">command</var>]</code> </pre></div> -<p>The first form selects a range of commands from <var>first</var> to -<var>last</var> from the history list and displays or edits and re-executes +<p>The first form selects a range of commands from <var class="var">first</var> to +<var class="var">last</var> from the history list and displays or edits and re-executes them. -Both <var>first</var> and -<var>last</var> may be specified as a string (to locate the most recent +Both <var class="var">first</var> and +<var class="var">last</var> may be specified as a string (to locate the most recent 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 current command number). </p> -<p>When listing, a <var>first</var> or <var>last</var> of 0 is equivalent to -1 -and -0 is equivalent to the current command (usually the <code>fc</code> +<p>When listing, a <var class="var">first</var> or <var class="var">last</var> of 0 is equivalent to -1 +and -0 is equivalent to the current command (usually the <code class="code">fc</code> command); otherwise 0 is equivalent to -1 and -0 is invalid. </p> -<p>If <var>last</var> is not specified, it is set to -<var>first</var>. If <var>first</var> is not specified, it is set to the previous -command for editing and -16 for listing. If the <samp>-l</samp> flag is -given, the commands are listed on standard output. The <samp>-n</samp> flag -suppresses the command numbers when listing. The <samp>-r</samp> flag +<p>If <var class="var">last</var> is not specified, it is set to +<var class="var">first</var>. If <var class="var">first</var> is not specified, it is set to the previous +command for editing and &minus;16 for listing. If the <samp class="option">-l</samp> flag is +given, the commands are listed on standard output. The <samp class="option">-n</samp> flag +suppresses the command numbers when listing. The <samp class="option">-r</samp> flag reverses the order of the listing. Otherwise, the editor given by -<var>ename</var> is invoked on a file containing those commands. If -<var>ename</var> is not given, the value of the following variable expansion -is used: <code>${FCEDIT:-${EDITOR:-vi}}</code>. This says to use the -value of the <code>FCEDIT</code> variable if set, or the value of the -<code>EDITOR</code> variable if that is set, or <code>vi</code> if neither is set. +<var class="var">ename</var> is invoked on a file containing those commands. If +<var class="var">ename</var> is not given, the value of the following variable expansion +is used: <code class="code">${FCEDIT:-${EDITOR:-vi}}</code>. This says to use the +value of the <code class="env">FCEDIT</code> variable if set, or the value of the +<code class="env">EDITOR</code> variable if that is set, or <code class="code">vi</code> if neither is set. When editing is complete, the edited commands are echoed and executed. </p> -<p>In the second form, <var>command</var> is re-executed after each instance -of <var>pat</var> in the selected command is replaced by <var>rep</var>. -<var>command</var> is interpreted the same as <var>first</var> above. +<p>In the second form, <var class="var">command</var> is re-executed after each instance +of <var class="var">pat</var> in the selected command is replaced by <var class="var">rep</var>. +<var class="var">command</var> is interpreted the same as <var class="var">first</var> above. </p> -<p>A useful alias to use with the <code>fc</code> command is <code>r='fc -s'</code>, so -that typing &lsquo;<samp>r cc</samp>&rsquo; runs the last command beginning with <code>cc</code> -and typing &lsquo;<samp>r</samp>&rsquo; re-executes the last command (see <a href="#Aliases">Aliases</a>). +<p>A useful alias to use with the <code class="code">fc</code> command is <code class="code">r='fc -s'</code>, so +that typing &lsquo;<samp class="samp">r cc</samp>&rsquo; runs the last command beginning with <code class="code">cc</code> +and typing &lsquo;<samp class="samp">r</samp>&rsquo; re-executes the last command (see <a class="pxref" href="#Aliases">Aliases</a>). </p> </dd> -<dt id='index-history'><span><code>history</code><a href='#index-history' class='copiable-anchor'> &para;</a></span></dt> +<dt><a id="index-history"></a><span><code class="code">history</code><a class="copiable-link" href="#index-history"> &para;</a></span></dt> <dd><div class="example"> -<pre class="example">history [<var>n</var>] +<pre class="example-preformatted">history [<var class="var">n</var>] history -c -history -d <var>offset</var> -history -d <var>start</var>-<var>end</var> -history [-anrw] [<var>filename</var>] -history -ps <var>arg</var> +history -d <var class="var">offset</var> +history -d <var class="var">start</var>-<var class="var">end</var> +history [-anrw] [<var class="var">filename</var>] +history -ps <var class="var">arg</var> </pre></div> <p>With no options, display the history list with line numbers. -Lines prefixed with a &lsquo;<samp>*</samp>&rsquo; have been modified. -An argument of <var>n</var> lists only the last <var>n</var> lines. -If the shell variable <code>HISTTIMEFORMAT</code> is set and not null, -it is used as a format string for <var>strftime</var> to display +Lines prefixed with a &lsquo;<samp class="samp">*</samp>&rsquo; have been modified. +An argument of <var class="var">n</var> lists only the last <var class="var">n</var> lines. +If the shell variable <code class="env">HISTTIMEFORMAT</code> is set and not null, +it is used as a format string for <code class="code">strftime</code>(3) to display the time stamp associated with each displayed history entry. No intervening blank is printed between the formatted time stamp and the history line. </p> <p>Options, if supplied, have the following meanings: </p> -<dl compact="compact"> -<dt><span><code>-c</code></span></dt> +<dl class="table"> +<dt><code class="code">-c</code></dt> <dd><p>Clear the history list. This may be combined with the other options to replace the history list completely. </p> </dd> -<dt><span><code>-d <var>offset</var></code></span></dt> -<dd><p>Delete the history entry at position <var>offset</var>. -If <var>offset</var> is positive, it should be specified as it appears when +<dt><code class="code">-d <var class="var">offset</var></code></dt> +<dd><p>Delete the history entry at position <var class="var">offset</var>. +If <var class="var">offset</var> is positive, it should be specified as it appears when the history is displayed. -If <var>offset</var> is negative, it is interpreted as relative to one greater +If <var class="var">offset</var> is negative, it is interpreted as relative to one greater than the last history position, so negative indices count back from the -end of the history, and an index of &lsquo;<samp>-1</samp>&rsquo; refers to the current -<code>history -d</code> command. +end of the history, and an index of &lsquo;<samp class="samp">-1</samp>&rsquo; refers to the current +<code class="code">history -d</code> command. </p> </dd> -<dt><span><code>-d <var>start</var>-<var>end</var></code></span></dt> -<dd><p>Delete the range of history entries between positions <var>start</var> and -<var>end</var>, inclusive. -Positive and negative values for <var>start</var> and <var>end</var> +<dt><code class="code">-d <var class="var">start</var>-<var class="var">end</var></code></dt> +<dd><p>Delete the range of history entries between positions <var class="var">start</var> and +<var class="var">end</var>, inclusive. +Positive and negative values for <var class="var">start</var> and <var class="var">end</var> are interpreted as described above. </p> </dd> -<dt><span><code>-a</code></span></dt> +<dt><code class="code">-a</code></dt> <dd><p>Append the new history lines to the history file. These are history lines entered since the beginning of the current Bash session, but not already appended to the history file. </p> </dd> -<dt><span><code>-n</code></span></dt> +<dt><code class="code">-n</code></dt> <dd><p>Append the history lines not already read from the history file to the current history list. These are lines appended to the history file since the beginning of the current Bash session. </p> </dd> -<dt><span><code>-r</code></span></dt> +<dt><code class="code">-r</code></dt> <dd><p>Read the history file and append its contents to the history list. </p> </dd> -<dt><span><code>-w</code></span></dt> +<dt><code class="code">-w</code></dt> <dd><p>Write out the current history list to the history file. </p> </dd> -<dt><span><code>-p</code></span></dt> -<dd><p>Perform history substitution on the <var>arg</var>s and display the result +<dt><code class="code">-p</code></dt> +<dd><p>Perform history substitution on the <var class="var">arg</var>s and display the result on the standard output, without storing the results in the history list. </p> </dd> -<dt><span><code>-s</code></span></dt> -<dd><p>The <var>arg</var>s are added to the end of +<dt><code class="code">-s</code></dt> +<dd><p>The <var class="var">arg</var>s are added to the end of the history list as a single entry. </p> </dd> </dl> -<p>If a <var>filename</var> argument is supplied -when any of the <samp>-w</samp>, <samp>-r</samp>, <samp>-a</samp>, or <samp>-n</samp> options -is used, Bash uses <var>filename</var> as the history file. -If not, then the value of the <code>HISTFILE</code> variable is used. +<p>If a <var class="var">filename</var> argument is supplied +when any of the <samp class="option">-w</samp>, <samp class="option">-r</samp>, <samp class="option">-a</samp>, or <samp class="option">-n</samp> options +is used, Bash uses <var class="var">filename</var> as the history file. +If not, then the value of the <code class="env">HISTFILE</code> variable is used. +If <code class="env">HISTFILE</code> is unset or null, these options have no effect. </p> <p>The return value is 0 unless an invalid option is encountered, an error occurs while reading or writing the history file, an invalid -<var>offset</var> or range is supplied as an argument to <samp>-d</samp>, or the -history expansion supplied as an argument to <samp>-p</samp> fails. +<var class="var">offset</var> or range is supplied as an argument to <samp class="option">-d</samp>, or the +history expansion supplied as an argument to <samp class="option">-p</samp> fails. </p> </dd> </dl> <hr> </div> -<div class="section" id="History-Interaction"> -<div class="header"> +<div class="section-level-extent" id="History-Interaction"> +<div class="nav-panel"> <p> Previous: <a href="#Bash-History-Builtins" accesskey="p" rel="prev">Bash History Builtins</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="History-Expansion"></span><h3 class="section">9.3 History Expansion</h3> -<span id="index-history-expansion"></span> +<h3 class="section" id="History-Expansion"><span>9.3 History Expansion<a class="copiable-link" href="#History-Expansion"> &para;</a></span></h3> +<a class="index-entry-id" id="index-history-expansion"></a> <p>The History library provides a history expansion feature that is similar -to the history expansion provided by <code>csh</code>. This section +to the history expansion provided by <code class="code">csh</code>. This section describes the syntax used to manipulate the history information. </p> <p>History expansions introduce words from the history list into @@ -12928,14 +13412,21 @@ expansion functions about quoting still in effect from previous lines. <p>History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for inclusion into the -current one. The line selected from the history is called the -<em>event</em>, and the portions of that line that are acted upon are -called <em>words</em>. Various <em>modifiers</em> are available to manipulate -the selected words. The line is broken into words in the same fashion +current one. +</p> +<p>The line selected from the history is called the <em class="dfn">event</em>, +and the portions of that line that are acted upon are called <em class="dfn">words</em>. +The line is broken into words in the same fashion that Bash does, so that several words surrounded by quotes are considered one word. -History expansions are introduced by the appearance of the -history expansion character, which is &lsquo;<samp>!</samp>&rsquo; by default. +The <em class="dfn">event designator</em> selects the event, the optional +<em class="dfn">word designator</em> selects words from the event, and +various optional <em class="dfn">modifiers</em> are available to manipulate the +selected words. +</p> +<p>History expansions are introduced by the appearance of the +history expansion character, which is &lsquo;<samp class="samp">!</samp>&rsquo; by default. +History expansions may appear anywhere in the input, but do not nest. </p> <p>History expansion implements shell-like quoting conventions: a backslash can be used to remove the special handling for the next character; @@ -12946,99 +13437,113 @@ expansion, since backslash can escape the history expansion character, but single quotes may not, since they are not treated specially within double quotes. </p> -<p>When using the shell, only &lsquo;<samp>\</samp>&rsquo; and &lsquo;<samp>'</samp>&rsquo; may be used to escape the +<p>When using the shell, only &lsquo;<samp class="samp">\</samp>&rsquo; and &lsquo;<samp class="samp">'</samp>&rsquo; may be used to escape the history expansion character, but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string. </p> -<p>Several shell options settable with the <code>shopt</code> -builtin (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) may be used to tailor +<p>There is a special abbreviation for substitution, active when the +<var class="var">quick substitution</var> character (default &lsquo;<samp class="samp">^</samp>&rsquo;) +is the first character on the line. +It selects the previous history list entry, using an event designator +equivalent to <code class="code">!!</code>, +and substitutes one string for another in that line. +It is described below (see <a class="pxref" href="#Event-Designators">Event Designators</a>). +This is the only history expansion that does not begin with the history +expansion character. +</p> +<p>Several shell options settable with the <code class="code">shopt</code> +builtin (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) may be used to tailor the behavior of history expansion. If the -<code>histverify</code> shell option is enabled, and Readline +<code class="code">histverify</code> shell option is enabled, and Readline is being used, history substitutions are not immediately passed to the shell parser. Instead, the expanded line is reloaded into the Readline editing buffer for further modification. -If Readline is being used, and the <code>histreedit</code> +If Readline is being used, and the <code class="code">histreedit</code> shell option is enabled, a failed history expansion will be reloaded into the Readline editing buffer for correction. -The <samp>-p</samp> option to the <code>history</code> builtin command +The <samp class="option">-p</samp> option to the <code class="code">history</code> builtin command may be used to see what a history expansion will do before using it. -The <samp>-s</samp> option to the <code>history</code> builtin may be used to +The <samp class="option">-s</samp> option to the <code class="code">history</code> builtin may be used to add commands to the end of the history list without actually executing them, so that they are available for subsequent recall. This is most useful in conjunction with Readline. </p> <p>The shell allows control of the various characters used by the -history expansion mechanism with the <code>histchars</code> variable, -as explained above (see <a href="#Bash-Variables">Bash Variables</a>). The shell uses +history expansion mechanism with the <code class="code">histchars</code> variable, +as explained above (see <a class="pxref" href="#Bash-Variables">Bash Variables</a>). The shell uses the history comment character to mark history timestamps when writing the history file. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Event-Designators" accesskey="1">Event Designators</a></li> <li><a href="#Word-Designators" accesskey="2">Word Designators</a></li> <li><a href="#Modifiers" accesskey="3">Modifiers</a></li> </ul> <hr> -<div class="subsection" id="Event-Designators"> -<div class="header"> +<div class="subsection-level-extent" id="Event-Designators"> +<div class="nav-panel"> <p> Next: <a href="#Word-Designators" accesskey="n" rel="next">Word Designators</a>, Up: <a href="#History-Interaction" accesskey="u" rel="up">History Expansion</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Event-Designators-1"></span><h4 class="subsection">9.3.1 Event Designators</h4> -<span id="index-event-designators"></span> +<h4 class="subsection" id="Event-Designators-1"><span>9.3.1 Event Designators<a class="copiable-link" href="#Event-Designators-1"> &para;</a></span></h4> +<a class="index-entry-id" id="index-event-designators"></a> <p>An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list. -<span id="index-history-events"></span> +The event designator consists of the portion of the word beginning +with the history expansion character, and ending with the word designator +if one is present, or the end of the word. +<a class="index-entry-id" id="index-history-events"></a> </p> -<dl compact="compact"> -<dt><span><code>!</code></span></dt> +<dl class="table"> +<dt><code class="code">!</code></dt> <dd><p>Start a history substitution, except when followed by a space, tab, -the end of the line, &lsquo;<samp>=</samp>&rsquo; or &lsquo;<samp>(</samp>&rsquo; (when the -<code>extglob</code> shell option is enabled using the <code>shopt</code> builtin). +the end of the line, &lsquo;<samp class="samp">=</samp>&rsquo;, +or the rest of the shell metacharacters defined above +(see <a class="pxref" href="#Definitions">Definitions</a>). </p> </dd> -<dt><span><code>!<var>n</var></code></span></dt> -<dd><p>Refer to command line <var>n</var>. +<dt><code class="code">!<var class="var">n</var></code></dt> +<dd><p>Refer to command line <var class="var">n</var>. </p> </dd> -<dt><span><code>!-<var>n</var></code></span></dt> -<dd><p>Refer to the command <var>n</var> lines back. +<dt><code class="code">!-<var class="var">n</var></code></dt> +<dd><p>Refer to the command <var class="var">n</var> lines back. </p> </dd> -<dt><span><code>!!</code></span></dt> -<dd><p>Refer to the previous command. This is a synonym for &lsquo;<samp>!-1</samp>&rsquo;. +<dt><code class="code">!!</code></dt> +<dd><p>Refer to the previous command. This is a synonym for &lsquo;<samp class="samp">!-1</samp>&rsquo;. </p> </dd> -<dt><span><code>!<var>string</var></code></span></dt> +<dt><code class="code">!<var class="var">string</var></code></dt> <dd><p>Refer to the most recent command preceding the current position in the history list -starting with <var>string</var>. +starting with <var class="var">string</var>. </p> </dd> -<dt><span><code>!?<var>string</var>[?]</code></span></dt> +<dt><code class="code">!?<var class="var">string</var>[?]</code></dt> <dd><p>Refer to the most recent command preceding the current position in the history list -containing <var>string</var>. +containing <var class="var">string</var>. The trailing -&lsquo;<samp>?</samp>&rsquo; may be omitted if the <var>string</var> is followed immediately by +&lsquo;<samp class="samp">?</samp>&rsquo; may be omitted if the <var class="var">string</var> is followed immediately by a newline. -If <var>string</var> is missing, the string from the most recent search is used; +If <var class="var">string</var> is missing, the string from the most recent search is used; it is an error if there is no previous search string. </p> </dd> -<dt><span><code>^<var>string1</var>^<var>string2</var>^</code></span></dt> -<dd><p>Quick Substitution. Repeat the last command, replacing <var>string1</var> -with <var>string2</var>. Equivalent to -<code>!!:s^<var>string1</var>^<var>string2</var>^</code>. +<dt><code class="code">^<var class="var">string1</var>^<var class="var">string2</var>^</code></dt> +<dd><p>Quick Substitution. Repeat the last command, replacing <var class="var">string1</var> +with <var class="var">string2</var>. Equivalent to +<code class="code">!!:s^<var class="var">string1</var>^<var class="var">string2</var>^</code>. </p> </dd> -<dt><span><code>!#</code></span></dt> +<dt><code class="code">!#</code></dt> <dd><p>The entire command line typed so far. </p> </dd> @@ -13046,80 +13551,82 @@ with <var>string2</var>. Equivalent to <hr> </div> -<div class="subsection" id="Word-Designators"> -<div class="header"> +<div class="subsection-level-extent" id="Word-Designators"> +<div class="nav-panel"> <p> Next: <a href="#Modifiers" accesskey="n" rel="next">Modifiers</a>, Previous: <a href="#Event-Designators" accesskey="p" rel="prev">Event Designators</a>, Up: <a href="#History-Interaction" accesskey="u" rel="up">History Expansion</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Word-Designators-1"></span><h4 class="subsection">9.3.2 Word Designators</h4> +<h4 class="subsection" id="Word-Designators-1"><span>9.3.2 Word Designators<a class="copiable-link" href="#Word-Designators-1"> &para;</a></span></h4> <p>Word designators are used to select desired words from the event. -A &lsquo;<samp>:</samp>&rsquo; separates the event specification from the word designator. It -may be omitted if the word designator begins with a &lsquo;<samp>^</samp>&rsquo;, &lsquo;<samp>$</samp>&rsquo;, -&lsquo;<samp>*</samp>&rsquo;, &lsquo;<samp>-</samp>&rsquo;, or &lsquo;<samp>%</samp>&rsquo;. Words are numbered from the beginning +They are optional; if the word designator isn&rsquo;t supplied, the history +expansion uses the entire event. +A &lsquo;<samp class="samp">:</samp>&rsquo; separates the event specification from the word designator. It +may be omitted if the word designator begins with a &lsquo;<samp class="samp">^</samp>&rsquo;, &lsquo;<samp class="samp">$</samp>&rsquo;, +&lsquo;<samp class="samp">*</samp>&rsquo;, &lsquo;<samp class="samp">-</samp>&rsquo;, or &lsquo;<samp class="samp">%</samp>&rsquo;. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces. </p> <p>For example, </p> -<dl compact="compact"> -<dt><span><code>!!</code></span></dt> +<dl class="table"> +<dt><code class="code">!!</code></dt> <dd><p>designates the preceding command. When you type this, the preceding command is repeated in toto. </p> </dd> -<dt><span><code>!!:$</code></span></dt> +<dt><code class="code">!!:$</code></dt> <dd><p>designates the last argument of the preceding command. This may be -shortened to <code>!$</code>. +shortened to <code class="code">!$</code>. </p> </dd> -<dt><span><code>!fi:2</code></span></dt> +<dt><code class="code">!fi:2</code></dt> <dd><p>designates the second argument of the most recent command starting with -the letters <code>fi</code>. +the letters <code class="code">fi</code>. </p></dd> </dl> <p>Here are the word designators: </p> -<dl compact="compact"> -<dt><span><code>0 (zero)</code></span></dt> -<dd><p>The <code>0</code>th word. For many applications, this is the command word. +<dl class="table"> +<dt><code class="code">0 (zero)</code></dt> +<dd><p>The <code class="code">0</code>th word. For many applications, this is the command word. </p> </dd> -<dt><span><code><var>n</var></code></span></dt> -<dd><p>The <var>n</var>th word. +<dt><code class="code"><var class="var">n</var></code></dt> +<dd><p>The <var class="var">n</var>th word. </p> </dd> -<dt><span><code>^</code></span></dt> +<dt><code class="code">^</code></dt> <dd><p>The first argument; that is, word 1. </p> </dd> -<dt><span><code>$</code></span></dt> +<dt><code class="code">$</code></dt> <dd><p>The last argument. </p> </dd> -<dt><span><code>%</code></span></dt> -<dd><p>The first word matched by the most recent &lsquo;<samp>?<var>string</var>?</samp>&rsquo; search, +<dt><code class="code">%</code></dt> +<dd><p>The first word matched by the most recent &lsquo;<samp class="samp">?<var class="var">string</var>?</samp>&rsquo; search, if the search string begins with a character that is part of a word. </p> </dd> -<dt><span><code><var>x</var>-<var>y</var></code></span></dt> -<dd><p>A range of words; &lsquo;<samp>-<var>y</var></samp>&rsquo; abbreviates &lsquo;<samp>0-<var>y</var></samp>&rsquo;. +<dt><code class="code"><var class="var">x</var>-<var class="var">y</var></code></dt> +<dd><p>A range of words; &lsquo;<samp class="samp">-<var class="var">y</var></samp>&rsquo; abbreviates &lsquo;<samp class="samp">0-<var class="var">y</var></samp>&rsquo;. </p> </dd> -<dt><span><code>*</code></span></dt> -<dd><p>All of the words, except the <code>0</code>th. This is a synonym for &lsquo;<samp>1-$</samp>&rsquo;. -It is not an error to use &lsquo;<samp>*</samp>&rsquo; if there is just one word in the event; +<dt><code class="code">*</code></dt> +<dd><p>All of the words, except the <code class="code">0</code>th. This is a synonym for &lsquo;<samp class="samp">1-$</samp>&rsquo;. +It is not an error to use &lsquo;<samp class="samp">*</samp>&rsquo; if there is just one word in the event; the empty string is returned in that case. </p> </dd> -<dt><span><code><var>x</var>*</code></span></dt> -<dd><p>Abbreviates &lsquo;<samp><var>x</var>-$</samp>&rsquo; +<dt><code class="code"><var class="var">x</var>*</code></dt> +<dd><p>Abbreviates &lsquo;<samp class="samp"><var class="var">x</var>-$</samp>&rsquo; </p> </dd> -<dt><span><code><var>x</var>-</code></span></dt> -<dd><p>Abbreviates &lsquo;<samp><var>x</var>-$</samp>&rsquo; like &lsquo;<samp><var>x</var>*</samp>&rsquo;, but omits the last word. -If &lsquo;<samp>x</samp>&rsquo; is missing, it defaults to 0. +<dt><code class="code"><var class="var">x</var>-</code></dt> +<dd><p>Abbreviates &lsquo;<samp class="samp"><var class="var">x</var>-$</samp>&rsquo; like &lsquo;<samp class="samp"><var class="var">x</var>*</samp>&rsquo;, but omits the last word. +If &lsquo;<samp class="samp">x</samp>&rsquo; is missing, it defaults to 0. </p> </dd> </dl> @@ -13129,81 +13636,81 @@ previous command is used as the event. </p> <hr> </div> -<div class="subsection" id="Modifiers"> -<div class="header"> +<div class="subsection-level-extent" id="Modifiers"> +<div class="nav-panel"> <p> Previous: <a href="#Word-Designators" accesskey="p" rel="prev">Word Designators</a>, Up: <a href="#History-Interaction" accesskey="u" rel="up">History Expansion</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Modifiers-1"></span><h4 class="subsection">9.3.3 Modifiers</h4> +<h4 class="subsection" id="Modifiers-1"><span>9.3.3 Modifiers<a class="copiable-link" href="#Modifiers-1"> &para;</a></span></h4> <p>After the optional word designator, you can add a sequence of one or more -of the following modifiers, each preceded by a &lsquo;<samp>:</samp>&rsquo;. +of the following modifiers, each preceded by a &lsquo;<samp class="samp">:</samp>&rsquo;. These modify, or edit, the word or words selected from the history event. </p> -<dl compact="compact"> -<dt><span><code>h</code></span></dt> +<dl class="table"> +<dt><code class="code">h</code></dt> <dd><p>Remove a trailing pathname component, leaving only the head. </p> </dd> -<dt><span><code>t</code></span></dt> +<dt><code class="code">t</code></dt> <dd><p>Remove all leading pathname components, leaving the tail. </p> </dd> -<dt><span><code>r</code></span></dt> -<dd><p>Remove a trailing suffix of the form &lsquo;<samp>.<var>suffix</var></samp>&rsquo;, leaving +<dt><code class="code">r</code></dt> +<dd><p>Remove a trailing suffix of the form &lsquo;<samp class="samp">.<var class="var">suffix</var></samp>&rsquo;, leaving the basename. </p> </dd> -<dt><span><code>e</code></span></dt> +<dt><code class="code">e</code></dt> <dd><p>Remove all but the trailing suffix. </p> </dd> -<dt><span><code>p</code></span></dt> +<dt><code class="code">p</code></dt> <dd><p>Print the new command but do not execute it. </p> </dd> -<dt><span><code>q</code></span></dt> +<dt><code class="code">q</code></dt> <dd><p>Quote the substituted words, escaping further substitutions. </p> </dd> -<dt><span><code>x</code></span></dt> -<dd><p>Quote the substituted words as with &lsquo;<samp>q</samp>&rsquo;, +<dt><code class="code">x</code></dt> +<dd><p>Quote the substituted words as with &lsquo;<samp class="samp">q</samp>&rsquo;, but break into words at spaces, tabs, and newlines. -The &lsquo;<samp>q</samp>&rsquo; and &lsquo;<samp>x</samp>&rsquo; modifiers are mutually exclusive; the last one +The &lsquo;<samp class="samp">q</samp>&rsquo; and &lsquo;<samp class="samp">x</samp>&rsquo; modifiers are mutually exclusive; the last one supplied is used. </p> </dd> -<dt><span><code>s/<var>old</var>/<var>new</var>/</code></span></dt> -<dd><p>Substitute <var>new</var> for the first occurrence of <var>old</var> in the +<dt><code class="code">s/<var class="var">old</var>/<var class="var">new</var>/</code></dt> +<dd><p>Substitute <var class="var">new</var> for the first occurrence of <var class="var">old</var> in the event line. -Any character may be used as the delimiter in place of &lsquo;<samp>/</samp>&rsquo;. -The delimiter may be quoted in <var>old</var> and <var>new</var> -with a single backslash. If &lsquo;<samp>&amp;</samp>&rsquo; appears in <var>new</var>, -it is replaced by <var>old</var>. A single backslash will quote -the &lsquo;<samp>&amp;</samp>&rsquo;. -If <var>old</var> is null, it is set to the last <var>old</var> +Any character may be used as the delimiter in place of &lsquo;<samp class="samp">/</samp>&rsquo;. +The delimiter may be quoted in <var class="var">old</var> and <var class="var">new</var> +with a single backslash. If &lsquo;<samp class="samp">&amp;</samp>&rsquo; appears in <var class="var">new</var>, +it is replaced by <var class="var">old</var>. A single backslash will quote +the &lsquo;<samp class="samp">&amp;</samp>&rsquo;. +If <var class="var">old</var> is null, it is set to the last <var class="var">old</var> substituted, or, if no previous history substitutions took place, -the last <var>string</var> -in a !?<var>string</var><code>[?]</code> +the last <var class="var">string</var> +in a !?<var class="var">string</var><code class="code">[?]</code> search. -If <var>new</var> is null, each matching <var>old</var> is deleted. +If <var class="var">new</var> is null, each matching <var class="var">old</var> is deleted. The final delimiter is optional if it is the last character on the input line. </p> </dd> -<dt><span><code>&amp;</code></span></dt> +<dt><code class="code">&amp;</code></dt> <dd><p>Repeat the previous substitution. </p> </dd> -<dt><span><code>g</code></span></dt> -<dt><span><code>a</code></span></dt> +<dt><code class="code">g</code></dt> +<dt><code class="code">a</code></dt> <dd><p>Cause changes to be applied over the entire event line. Used in -conjunction with &lsquo;<samp>s</samp>&rsquo;, as in <code>gs/<var>old</var>/<var>new</var>/</code>, -or with &lsquo;<samp>&amp;</samp>&rsquo;. +conjunction with &lsquo;<samp class="samp">s</samp>&rsquo;, as in <code class="code">gs/<var class="var">old</var>/<var class="var">new</var>/</code>, +or with &lsquo;<samp class="samp">&amp;</samp>&rsquo;. </p> </dd> -<dt><span><code>G</code></span></dt> -<dd><p>Apply the following &lsquo;<samp>s</samp>&rsquo; or &lsquo;<samp>&amp;</samp>&rsquo; modifier once to each word +<dt><code class="code">G</code></dt> +<dd><p>Apply the following &lsquo;<samp class="samp">s</samp>&rsquo; or &lsquo;<samp class="samp">&amp;</samp>&rsquo; modifier once to each word in the event. </p> </dd> @@ -13213,22 +13720,22 @@ in the event. </div> </div> </div> -<div class="chapter" id="Installing-Bash"> -<div class="header"> +<div class="chapter-level-extent" id="Installing-Bash"> +<div class="nav-panel"> <p> Next: <a href="#Reporting-Bugs" accesskey="n" rel="next">Reporting Bugs</a>, Previous: <a href="#Using-History-Interactively" accesskey="p" rel="prev">Using History Interactively</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Installing-Bash-1"></span><h2 class="chapter">10 Installing Bash</h2> +<h2 class="chapter" id="Installing-Bash-1"><span>10 Installing Bash<a class="copiable-link" href="#Installing-Bash-1"> &para;</a></span></h2> <p>This chapter provides basic instructions for installing Bash on the various supported platforms. The distribution supports the -<small>GNU</small> operating systems, nearly every version of Unix, and several +<small class="sc">GNU</small> operating systems, nearly every version of Unix, and several non-Unix systems such as BeOS and Interix. Other independent ports exist for -<small>MS-DOS</small>, <small>OS/2</small>, and Windows platforms. +<small class="sc">MS-DOS</small>, <small class="sc">OS/2</small>, and Windows platforms. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Basic-Installation" accesskey="1">Basic Installation</a></li> <li><a href="#Compilers-and-Options" accesskey="2">Compilers and Options</a></li> <li><a href="#Compiling-For-Multiple-Architectures" accesskey="3">Compiling For Multiple Architectures</a></li> @@ -13239,70 +13746,70 @@ Other independent ports exist for <li><a href="#Optional-Features" accesskey="8">Optional Features</a></li> </ul> <hr> -<div class="section" id="Basic-Installation"> -<div class="header"> +<div class="section-level-extent" id="Basic-Installation"> +<div class="nav-panel"> <p> Next: <a href="#Compilers-and-Options" accesskey="n" rel="next">Compilers and Options</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Basic-Installation-1"></span><h3 class="section">10.1 Basic Installation</h3> -<span id="index-installation"></span> -<span id="index-configuration"></span> -<span id="index-Bash-installation"></span> -<span id="index-Bash-configuration"></span> +<h3 class="section" id="Basic-Installation-1"><span>10.1 Basic Installation<a class="copiable-link" href="#Basic-Installation-1"> &para;</a></span></h3> +<a class="index-entry-id" id="index-installation"></a> +<a class="index-entry-id" id="index-configuration"></a> +<a class="index-entry-id" id="index-Bash-installation"></a> +<a class="index-entry-id" id="index-Bash-configuration"></a> <p>These are installation instructions for Bash. </p> <p>The simplest way to compile Bash is: </p> -<ol> -<li> <code>cd</code> to the directory containing the source code and type -&lsquo;<samp>./configure</samp>&rsquo; to configure Bash for your system. If you&rsquo;re -using <code>csh</code> on an old version of System V, you might need to -type &lsquo;<samp>sh ./configure</samp>&rsquo; instead to prevent <code>csh</code> from trying -to execute <code>configure</code> itself. +<ol class="enumerate"> +<li> <code class="code">cd</code> to the directory containing the source code and type +&lsquo;<samp class="samp">./configure</samp>&rsquo; to configure Bash for your system. If you&rsquo;re +using <code class="code">csh</code> on an old version of System V, you might need to +type &lsquo;<samp class="samp">sh ./configure</samp>&rsquo; instead to prevent <code class="code">csh</code> from trying +to execute <code class="code">configure</code> itself. -<p>Running <code>configure</code> takes some time. +<p>Running <code class="code">configure</code> takes some time. While running, it prints messages telling which features it is checking for. </p> -</li><li> Type &lsquo;<samp>make</samp>&rsquo; to compile Bash and build the <code>bashbug</code> bug +</li><li> Type &lsquo;<samp class="samp">make</samp>&rsquo; to compile Bash and build the <code class="code">bashbug</code> bug reporting script. -</li><li> Optionally, type &lsquo;<samp>make tests</samp>&rsquo; to run the Bash test suite. +</li><li> Optionally, type &lsquo;<samp class="samp">make tests</samp>&rsquo; to run the Bash test suite. -</li><li> Type &lsquo;<samp>make install</samp>&rsquo; to install <code>bash</code> and <code>bashbug</code>. +</li><li> Type &lsquo;<samp class="samp">make install</samp>&rsquo; to install <code class="code">bash</code> and <code class="code">bashbug</code>. This will also install the manual pages and Info file, message translation files, some supplemental documentation, a number of example loadable builtin commands, and a set of header files for developing loadable builtins. -You may need additional privileges to install <code>bash</code> to your -desired destination, so &lsquo;<samp>sudo make install</samp>&rsquo; might be required. -More information about controlling the locations where <code>bash</code> and -other files are installed is below (see <a href="#Installation-Names">Installation Names</a>). +You may need additional privileges to install <code class="code">bash</code> to your +desired destination, so &lsquo;<samp class="samp">sudo make install</samp>&rsquo; might be required. +More information about controlling the locations where <code class="code">bash</code> and +other files are installed is below (see <a class="pxref" href="#Installation-Names">Installation Names</a>). </li></ol> -<p>The <code>configure</code> shell script attempts to guess correct +<p>The <code class="code">configure</code> shell script attempts to guess correct values for various system-dependent variables used during -compilation. It uses those values to create a <samp>Makefile</samp> in +compilation. It uses those values to create a <samp class="file">Makefile</samp> in each directory of the package (the top directory, the -<samp>builtins</samp>, <samp>doc</samp>, <samp>po</samp>, and <samp>support</samp> directories, -each directory under <samp>lib</samp>, and several others). It also creates a -<samp>config.h</samp> file containing system-dependent definitions. -Finally, it creates a shell script named <code>config.status</code> that you +<samp class="file">builtins</samp>, <samp class="file">doc</samp>, <samp class="file">po</samp>, and <samp class="file">support</samp> directories, +each directory under <samp class="file">lib</samp>, and several others). It also creates a +<samp class="file">config.h</samp> file containing system-dependent definitions. +Finally, it creates a shell script named <code class="code">config.status</code> that you can run in the future to recreate the current configuration, a -file <samp>config.cache</samp> that saves the results of its tests to -speed up reconfiguring, and a file <samp>config.log</samp> containing -compiler output (useful mainly for debugging <code>configure</code>). +file <samp class="file">config.cache</samp> that saves the results of its tests to +speed up reconfiguring, and a file <samp class="file">config.log</samp> containing +compiler output (useful mainly for debugging <code class="code">configure</code>). If at some point -<samp>config.cache</samp> contains results you don&rsquo;t want to keep, you +<samp class="file">config.cache</samp> contains results you don&rsquo;t want to keep, you may remove or edit it. </p> <p>To find out more about the options and arguments that the -<code>configure</code> script understands, type +<code class="code">configure</code> script understands, type </p> <div class="example"> -<pre class="example">bash-4.2$ ./configure --help +<pre class="example-preformatted">bash-4.2$ ./configure --help </pre></div> <p>at the Bash prompt in your Bash source directory. @@ -13310,60 +13817,60 @@ may remove or edit it. <p>If you want to build Bash in a directory separate from the source directory &ndash; to build for multiple architectures, for example &ndash; just use the full path to the configure script. The following commands -will build bash in a directory under <samp>/usr/local/build</samp> from -the source code in <samp>/usr/local/src/bash-4.4</samp>: +will build Bash in a directory under <samp class="file">/usr/local/build</samp> from +the source code in <samp class="file">/usr/local/src/bash-4.4</samp>: </p> <div class="example"> -<pre class="example">mkdir /usr/local/build/bash-4.4 +<pre class="example-preformatted">mkdir /usr/local/build/bash-4.4 cd /usr/local/build/bash-4.4 bash /usr/local/src/bash-4.4/configure make </pre></div> -<p>See <a href="#Compiling-For-Multiple-Architectures">Compiling For Multiple Architectures</a> for more information +<p>See <a class="ref" href="#Compiling-For-Multiple-Architectures">Compiling For Multiple Architectures</a> for more information about building in a directory separate from the source. </p> <p>If you need to do unusual things to compile Bash, please -try to figure out how <code>configure</code> could check whether or not +try to figure out how <code class="code">configure</code> could check whether or not to do them, and mail diffs or instructions to -<a href="mailto:bash-maintainers@gnu.org">bash-maintainers@gnu.org</a> so they can be +<a class="email" href="mailto:bash-maintainers@gnu.org">bash-maintainers@gnu.org</a> so they can be considered for the next release. </p> -<p>The file <samp>configure.ac</samp> is used to create <code>configure</code> +<p>The file <samp class="file">configure.ac</samp> is used to create <code class="code">configure</code> by a program called Autoconf. -You only need <samp>configure.ac</samp> if you want to change it or regenerate -<code>configure</code> using a newer version of Autoconf. +You only need <samp class="file">configure.ac</samp> if you want to change it or regenerate +<code class="code">configure</code> using a newer version of Autoconf. If you do this, make sure you are using Autoconf version 2.69 or newer. </p> <p>You can remove the program binaries and object files from the -source code directory by typing &lsquo;<samp>make clean</samp>&rsquo;. To also remove the -files that <code>configure</code> created (so you can compile Bash for -a different kind of computer), type &lsquo;<samp>make distclean</samp>&rsquo;. +source code directory by typing &lsquo;<samp class="samp">make clean</samp>&rsquo;. To also remove the +files that <code class="code">configure</code> created (so you can compile Bash for +a different kind of computer), type &lsquo;<samp class="samp">make distclean</samp>&rsquo;. </p> <hr> </div> -<div class="section" id="Compilers-and-Options"> -<div class="header"> +<div class="section-level-extent" id="Compilers-and-Options"> +<div class="nav-panel"> <p> Next: <a href="#Compiling-For-Multiple-Architectures" accesskey="n" rel="next">Compiling For Multiple Architectures</a>, Previous: <a href="#Basic-Installation" accesskey="p" rel="prev">Basic Installation</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Compilers-and-Options-1"></span><h3 class="section">10.2 Compilers and Options</h3> +<h3 class="section" id="Compilers-and-Options-1"><span>10.2 Compilers and Options<a class="copiable-link" href="#Compilers-and-Options-1"> &para;</a></span></h3> <p>Some systems require unusual options for compilation or linking -that the <code>configure</code> script does not know about. You can -give <code>configure</code> initial values for variables by setting +that the <code class="code">configure</code> script does not know about. You can +give <code class="code">configure</code> initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: </p> <div class="example"> -<pre class="example">CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure +<pre class="example-preformatted">CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure </pre></div> -<p>On systems that have the <code>env</code> program, you can do it like this: +<p>On systems that have the <code class="code">env</code> program, you can do it like this: </p> <div class="example"> -<pre class="example">env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure +<pre class="example-preformatted">env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure </pre></div> <p>The configuration process uses GCC to build Bash if it @@ -13371,524 +13878,524 @@ is available. </p> <hr> </div> -<div class="section" id="Compiling-For-Multiple-Architectures"> -<div class="header"> +<div class="section-level-extent" id="Compiling-For-Multiple-Architectures"> +<div class="nav-panel"> <p> Next: <a href="#Installation-Names" accesskey="n" rel="next">Installation Names</a>, Previous: <a href="#Compilers-and-Options" accesskey="p" rel="prev">Compilers and Options</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Compiling-For-Multiple-Architectures-1"></span><h3 class="section">10.3 Compiling For Multiple Architectures</h3> +<h3 class="section" id="Compiling-For-Multiple-Architectures-1"><span>10.3 Compiling For Multiple Architectures<a class="copiable-link" href="#Compiling-For-Multiple-Architectures-1"> &para;</a></span></h3> <p>You can compile Bash for more than one kind of computer at the same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of <code>make</code> that -supports the <code>VPATH</code> variable, such as GNU <code>make</code>. -<code>cd</code> to the +own directory. To do this, you must use a version of <code class="code">make</code> that +supports the <code class="code">VPATH</code> variable, such as GNU <code class="code">make</code>. +<code class="code">cd</code> to the directory where you want the object files and executables to go and run -the <code>configure</code> script from the source directory -(see <a href="#Basic-Installation">Basic Installation</a>). +the <code class="code">configure</code> script from the source directory +(see <a class="pxref" href="#Basic-Installation">Basic Installation</a>). You may need to -supply the <samp>--srcdir=PATH</samp> argument to tell <code>configure</code> where the -source files are. <code>configure</code> automatically checks for the -source code in the directory that <code>configure</code> is in and in &lsquo;..&rsquo;. +supply the <samp class="option">--srcdir=PATH</samp> argument to tell <code class="code">configure</code> where the +source files are. <code class="code">configure</code> automatically checks for the +source code in the directory that <code class="code">configure</code> is in and in &lsquo;..&rsquo;. </p> -<p>If you have to use a <code>make</code> that does not support the <code>VPATH</code> +<p>If you have to use a <code class="code">make</code> that does not support the <code class="code">VPATH</code> variable, you can compile Bash for one architecture at a time in the source code directory. After you have installed -Bash for one architecture, use &lsquo;<samp>make distclean</samp>&rsquo; before +Bash for one architecture, use &lsquo;<samp class="samp">make distclean</samp>&rsquo; before reconfiguring for another architecture. </p> <p>Alternatively, if your system supports symbolic links, you can use the -<samp>support/mkclone</samp> script to create a build tree which has +<samp class="file">support/mkclone</samp> script to create a build tree which has symbolic links back to each file in the source directory. Here&rsquo;s an example that creates a build directory in the current directory from a -source directory <samp>/usr/gnu/src/bash-2.0</samp>: +source directory <samp class="file">/usr/gnu/src/bash-2.0</samp>: </p> <div class="example"> -<pre class="example">bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 . +<pre class="example-preformatted">bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 . </pre></div> -<p>The <code>mkclone</code> script requires Bash, so you must have already built +<p>The <code class="code">mkclone</code> script requires Bash, so you must have already built Bash for at least one architecture before you can create build directories for other architectures. </p> <hr> </div> -<div class="section" id="Installation-Names"> -<div class="header"> +<div class="section-level-extent" id="Installation-Names"> +<div class="nav-panel"> <p> Next: <a href="#Specifying-the-System-Type" accesskey="n" rel="next">Specifying the System Type</a>, Previous: <a href="#Compiling-For-Multiple-Architectures" accesskey="p" rel="prev">Compiling For Multiple Architectures</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Installation-Names-1"></span><h3 class="section">10.4 Installation Names</h3> +<h3 class="section" id="Installation-Names-1"><span>10.4 Installation Names<a class="copiable-link" href="#Installation-Names-1"> &para;</a></span></h3> -<p>By default, &lsquo;<samp>make install</samp>&rsquo; will install into -<samp>/usr/local/bin</samp>, <samp>/usr/local/man</samp>, etc.; -that is, the <em>installation prefix</em> defaults to <samp>/usr/local</samp>. -You can specify an installation prefix other than <samp>/usr/local</samp> by -giving <code>configure</code> the option <samp>--prefix=<var>PATH</var></samp>, -or by specifying a value for the <code>prefix</code> &lsquo;<samp>make</samp>&rsquo; -variable when running &lsquo;<samp>make install</samp>&rsquo; -(e.g., &lsquo;<samp>make install prefix=<var>PATH</var></samp>&rsquo;). -The <code>prefix</code> variable provides a default for <code>exec_prefix</code> and -other variables used when installing bash. +<p>By default, &lsquo;<samp class="samp">make install</samp>&rsquo; will install into +<samp class="file">/usr/local/bin</samp>, <samp class="file">/usr/local/man</samp>, etc.; +that is, the <em class="dfn">installation prefix</em> defaults to <samp class="file">/usr/local</samp>. +You can specify an installation prefix other than <samp class="file">/usr/local</samp> by +giving <code class="code">configure</code> the option <samp class="option">--prefix=<var class="var">PATH</var></samp>, +or by specifying a value for the <code class="env">prefix</code> &lsquo;<samp class="samp">make</samp>&rsquo; +variable when running &lsquo;<samp class="samp">make install</samp>&rsquo; +(e.g., &lsquo;<samp class="samp">make install prefix=<var class="var">PATH</var></samp>&rsquo;). +The <code class="env">prefix</code> variable provides a default for <code class="env">exec_prefix</code> and +other variables used when installing Bash. </p> <p>You can specify separate installation prefixes for architecture-specific files and architecture-independent files. -If you give <code>configure</code> the option -<samp>--exec-prefix=<var>PATH</var></samp>, &lsquo;<samp>make install</samp>&rsquo; will use -<var>PATH</var> as the prefix for installing programs and libraries. +If you give <code class="code">configure</code> the option +<samp class="option">--exec-prefix=<var class="var">PATH</var></samp>, &lsquo;<samp class="samp">make install</samp>&rsquo; will use +<var class="var">PATH</var> as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. </p> <p>If you would like to change the installation locations for a single run, -you can specify these variables as arguments to <code>make</code>: -&lsquo;<samp>make install exec_prefix=/</samp>&rsquo; will install <code>bash</code> and -<code>bashbug</code> into <samp>/bin</samp> instead of the default <samp>/usr/local/bin</samp>. +you can specify these variables as arguments to <code class="code">make</code>: +&lsquo;<samp class="samp">make install exec_prefix=/</samp>&rsquo; will install <code class="code">bash</code> and +<code class="code">bashbug</code> into <samp class="file">/bin</samp> instead of the default <samp class="file">/usr/local/bin</samp>. </p> -<p>If you want to see the files bash will install and where it will install +<p>If you want to see the files Bash will install and where it will install them without changing anything on your system, specify the variable -<code>DESTDIR</code> as an argument to <code>make</code>. Its value should be the +<code class="env">DESTDIR</code> as an argument to <code class="code">make</code>. Its value should be the absolute directory path you&rsquo;d like to use as the root of your sample installation tree. For example, </p> <div class="example"> -<pre class="example">mkdir /fs1/bash-install +<pre class="example-preformatted">mkdir /fs1/bash-install make install DESTDIR=/fs1/bash-install </pre></div> -<p>will install <code>bash</code> into <samp>/fs1/bash-install/usr/local/bin/bash</samp>, +<p>will install <code class="code">bash</code> into <samp class="file">/fs1/bash-install/usr/local/bin/bash</samp>, the documentation into directories within -<samp>/fs1/bash-install/usr/local/share</samp>, the example loadable builtins into -<samp>/fs1/bash-install/usr/local/lib/bash</samp>, and so on. -You can use the usual <code>exec_prefix</code> and <code>prefix</code> variables to alter -the directory paths beneath the value of <code>DESTDIR</code>. +<samp class="file">/fs1/bash-install/usr/local/share</samp>, the example loadable builtins into +<samp class="file">/fs1/bash-install/usr/local/lib/bash</samp>, and so on. +You can use the usual <code class="env">exec_prefix</code> and <code class="env">prefix</code> variables to alter +the directory paths beneath the value of <code class="env">DESTDIR</code>. </p> <p>The GNU Makefile standards provide a more complete description of these variables and their effects. </p> <hr> </div> -<div class="section" id="Specifying-the-System-Type"> -<div class="header"> +<div class="section-level-extent" id="Specifying-the-System-Type"> +<div class="nav-panel"> <p> Next: <a href="#Sharing-Defaults" accesskey="n" rel="next">Sharing Defaults</a>, Previous: <a href="#Installation-Names" accesskey="p" rel="prev">Installation Names</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Specifying-the-System-Type-1"></span><h3 class="section">10.5 Specifying the System Type</h3> +<h3 class="section" id="Specifying-the-System-Type-1"><span>10.5 Specifying the System Type<a class="copiable-link" href="#Specifying-the-System-Type-1"> &para;</a></span></h3> -<p>There may be some features <code>configure</code> can not figure out +<p>There may be some features <code class="code">configure</code> can not figure out automatically, but needs to determine by the type of host Bash -will run on. Usually <code>configure</code> can figure that +will run on. Usually <code class="code">configure</code> can figure that out, but if it prints a message saying it can not guess the host -type, give it the <samp>--host=TYPE</samp> option. &lsquo;<samp>TYPE</samp>&rsquo; can -either be a short name for the system type, such as &lsquo;<samp>sun4</samp>&rsquo;, -or a canonical name with three fields: &lsquo;<samp>CPU-COMPANY-SYSTEM</samp>&rsquo; -(e.g., &lsquo;<samp>i386-unknown-freebsd4.2</samp>&rsquo;). +type, give it the <samp class="option">--host=TYPE</samp> option. &lsquo;<samp class="samp">TYPE</samp>&rsquo; can +either be a short name for the system type, such as &lsquo;<samp class="samp">sun4</samp>&rsquo;, +or a canonical name with three fields: &lsquo;<samp class="samp">CPU-COMPANY-SYSTEM</samp>&rsquo; +(e.g., &lsquo;<samp class="samp">i386-unknown-freebsd4.2</samp>&rsquo;). </p> -<p>See the file <samp>support/config.sub</samp> for the possible +<p>See the file <samp class="file">support/config.sub</samp> for the possible values of each field. </p> <hr> </div> -<div class="section" id="Sharing-Defaults"> -<div class="header"> +<div class="section-level-extent" id="Sharing-Defaults"> +<div class="nav-panel"> <p> Next: <a href="#Operation-Controls" accesskey="n" rel="next">Operation Controls</a>, Previous: <a href="#Specifying-the-System-Type" accesskey="p" rel="prev">Specifying the System Type</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Sharing-Defaults-1"></span><h3 class="section">10.6 Sharing Defaults</h3> +<h3 class="section" id="Sharing-Defaults-1"><span>10.6 Sharing Defaults<a class="copiable-link" href="#Sharing-Defaults-1"> &para;</a></span></h3> -<p>If you want to set default values for <code>configure</code> scripts to +<p>If you want to set default values for <code class="code">configure</code> scripts to share, you can create a site shell script called -<code>config.site</code> that gives default values for variables like -<code>CC</code>, <code>cache_file</code>, and <code>prefix</code>. <code>configure</code> -looks for <samp>PREFIX/share/config.site</samp> if it exists, then -<samp>PREFIX/etc/config.site</samp> if it exists. Or, you can set the -<code>CONFIG_SITE</code> environment variable to the location of the site -script. A warning: the Bash <code>configure</code> looks for a site script, -but not all <code>configure</code> scripts do. +<code class="code">config.site</code> that gives default values for variables like +<code class="code">CC</code>, <code class="code">cache_file</code>, and <code class="code">prefix</code>. <code class="code">configure</code> +looks for <samp class="file">PREFIX/share/config.site</samp> if it exists, then +<samp class="file">PREFIX/etc/config.site</samp> if it exists. Or, you can set the +<code class="code">CONFIG_SITE</code> environment variable to the location of the site +script. A warning: the Bash <code class="code">configure</code> looks for a site script, +but not all <code class="code">configure</code> scripts do. </p> <hr> </div> -<div class="section" id="Operation-Controls"> -<div class="header"> +<div class="section-level-extent" id="Operation-Controls"> +<div class="nav-panel"> <p> Next: <a href="#Optional-Features" accesskey="n" rel="next">Optional Features</a>, Previous: <a href="#Sharing-Defaults" accesskey="p" rel="prev">Sharing Defaults</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Operation-Controls-1"></span><h3 class="section">10.7 Operation Controls</h3> +<h3 class="section" id="Operation-Controls-1"><span>10.7 Operation Controls<a class="copiable-link" href="#Operation-Controls-1"> &para;</a></span></h3> -<p><code>configure</code> recognizes the following options to control how it +<p><code class="code">configure</code> recognizes the following options to control how it operates. </p> -<dl compact="compact"> -<dt><span><code>--cache-file=<var>file</var></code></span></dt> +<dl class="table"> +<dt><code class="code">--cache-file=<var class="var">file</var></code></dt> <dd><p>Use and save the results of the tests in -<var>file</var> instead of <samp>./config.cache</samp>. Set <var>file</var> to -<samp>/dev/null</samp> to disable caching, for debugging -<code>configure</code>. +<var class="var">file</var> instead of <samp class="file">./config.cache</samp>. Set <var class="var">file</var> to +<samp class="file">/dev/null</samp> to disable caching, for debugging +<code class="code">configure</code>. </p> </dd> -<dt><span><code>--help</code></span></dt> -<dd><p>Print a summary of the options to <code>configure</code>, and exit. +<dt><code class="code">--help</code></dt> +<dd><p>Print a summary of the options to <code class="code">configure</code>, and exit. </p> </dd> -<dt><span><code>--quiet</code></span></dt> -<dt><span><code>--silent</code></span></dt> -<dt><span><code>-q</code></span></dt> +<dt><code class="code">--quiet</code></dt> +<dt><code class="code">--silent</code></dt> +<dt><code class="code">-q</code></dt> <dd><p>Do not print messages saying which checks are being made. </p> </dd> -<dt><span><code>--srcdir=<var>dir</var></code></span></dt> -<dd><p>Look for the Bash source code in directory <var>dir</var>. Usually -<code>configure</code> can determine that directory automatically. +<dt><code class="code">--srcdir=<var class="var">dir</var></code></dt> +<dd><p>Look for the Bash source code in directory <var class="var">dir</var>. Usually +<code class="code">configure</code> can determine that directory automatically. </p> </dd> -<dt><span><code>--version</code></span></dt> -<dd><p>Print the version of Autoconf used to generate the <code>configure</code> +<dt><code class="code">--version</code></dt> +<dd><p>Print the version of Autoconf used to generate the <code class="code">configure</code> script, and exit. </p></dd> </dl> -<p><code>configure</code> also accepts some other, not widely used, boilerplate -options. &lsquo;<samp>configure --help</samp>&rsquo; prints the complete list. +<p><code class="code">configure</code> also accepts some other, not widely used, boilerplate +options. &lsquo;<samp class="samp">configure --help</samp>&rsquo; prints the complete list. </p> <hr> </div> -<div class="section" id="Optional-Features"> -<div class="header"> +<div class="section-level-extent" id="Optional-Features"> +<div class="nav-panel"> <p> Previous: <a href="#Operation-Controls" accesskey="p" rel="prev">Operation Controls</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Optional-Features-1"></span><h3 class="section">10.8 Optional Features</h3> +<h3 class="section" id="Optional-Features-1"><span>10.8 Optional Features<a class="copiable-link" href="#Optional-Features-1"> &para;</a></span></h3> -<p>The Bash <code>configure</code> has a number of <samp>--enable-<var>feature</var></samp> -options, where <var>feature</var> indicates an optional part of Bash. -There are also several <samp>--with-<var>package</var></samp> options, -where <var>package</var> is something like &lsquo;<samp>bash-malloc</samp>&rsquo; or &lsquo;<samp>purify</samp>&rsquo;. +<p>The Bash <code class="code">configure</code> has a number of <samp class="option">--enable-<var class="var">feature</var></samp> +options, where <var class="var">feature</var> indicates an optional part of Bash. +There are also several <samp class="option">--with-<var class="var">package</var></samp> options, +where <var class="var">package</var> is something like &lsquo;<samp class="samp">bash-malloc</samp>&rsquo; or &lsquo;<samp class="samp">purify</samp>&rsquo;. To turn off the default use of a package, use -<samp>--without-<var>package</var></samp>. To configure Bash without a feature -that is enabled by default, use <samp>--disable-<var>feature</var></samp>. +<samp class="option">--without-<var class="var">package</var></samp>. To configure Bash without a feature +that is enabled by default, use <samp class="option">--disable-<var class="var">feature</var></samp>. </p> -<p>Here is a complete list of the <samp>--enable-</samp> and -<samp>--with-</samp> options that the Bash <code>configure</code> recognizes. +<p>Here is a complete list of the <samp class="option">--enable-</samp> and +<samp class="option">--with-</samp> options that the Bash <code class="code">configure</code> recognizes. </p> -<dl compact="compact"> -<dt><span><code>--with-afs</code></span></dt> +<dl class="table"> +<dt><code class="code">--with-afs</code></dt> <dd><p>Define if you are using the Andrew File System from Transarc. </p> </dd> -<dt><span><code>--with-bash-malloc</code></span></dt> +<dt><code class="code">--with-bash-malloc</code></dt> <dd><p>Use the Bash version of -<code>malloc</code> in the directory <samp>lib/malloc</samp>. This is not the same -<code>malloc</code> that appears in <small>GNU</small> libc, but an older version -originally derived from the 4.2 <small>BSD</small> <code>malloc</code>. This <code>malloc</code> +<code class="code">malloc</code> in the directory <samp class="file">lib/malloc</samp>. This is not the same +<code class="code">malloc</code> that appears in <small class="sc">GNU</small> libc, but an older version +originally derived from the 4.2 <small class="sc">BSD</small> <code class="code">malloc</code>. This <code class="code">malloc</code> is very fast, but wastes some space on each allocation. This option is enabled by default. -The <samp>NOTES</samp> file contains a list of systems for -which this should be turned off, and <code>configure</code> disables this +The <samp class="file">NOTES</samp> file contains a list of systems for +which this should be turned off, and <code class="code">configure</code> disables this option automatically for a number of systems. </p> </dd> -<dt><span><code>--with-curses</code></span></dt> +<dt><code class="code">--with-curses</code></dt> <dd><p>Use the curses library instead of the termcap library. This should be supplied if your system has an inadequate or incomplete termcap database. </p> </dd> -<dt><span><code>--with-gnu-malloc</code></span></dt> -<dd><p>A synonym for <code>--with-bash-malloc</code>. +<dt><code class="code">--with-gnu-malloc</code></dt> +<dd><p>A synonym for <code class="code">--with-bash-malloc</code>. </p> </dd> -<dt><span><code>--with-installed-readline[=<var>PREFIX</var>]</code></span></dt> +<dt><code class="code">--with-installed-readline[=<var class="var">PREFIX</var>]</code></dt> <dd><p>Define this to make Bash link with a locally-installed version of Readline -rather than the version in <samp>lib/readline</samp>. This works only with -Readline 5.0 and later versions. If <var>PREFIX</var> is <code>yes</code> or not -supplied, <code>configure</code> uses the values of the make variables -<code>includedir</code> and <code>libdir</code>, which are subdirectories of <code>prefix</code> +rather than the version in <samp class="file">lib/readline</samp>. This works only with +Readline 5.0 and later versions. If <var class="var">PREFIX</var> is <code class="code">yes</code> or not +supplied, <code class="code">configure</code> uses the values of the make variables +<code class="code">includedir</code> and <code class="code">libdir</code>, which are subdirectories of <code class="code">prefix</code> by default, to find the installed version of Readline if it is not in the standard system include and library directories. -If <var>PREFIX</var> is <code>no</code>, Bash links with the version in -<samp>lib/readline</samp>. -If <var>PREFIX</var> is set to any other value, <code>configure</code> treats it as +If <var class="var">PREFIX</var> is <code class="code">no</code>, Bash links with the version in +<samp class="file">lib/readline</samp>. +If <var class="var">PREFIX</var> is set to any other value, <code class="code">configure</code> treats it as a directory pathname and looks for the installed version of Readline in subdirectories of that directory -(include files in <var>PREFIX</var>/<code>include</code> and the library in -<var>PREFIX</var>/<code>lib</code>). +(include files in <var class="var">PREFIX</var>/<code class="code">include</code> and the library in +<var class="var">PREFIX</var>/<code class="code">lib</code>). </p> </dd> -<dt><span><code>--with-libintl-prefix[=<var>PREFIX</var>]</code></span></dt> +<dt><code class="code">--with-libintl-prefix[=<var class="var">PREFIX</var>]</code></dt> <dd><p>Define this to make Bash link with a locally-installed version of the -libintl library instead of the version in <samp>lib/intl</samp>. +libintl library instead of the version in <samp class="file">lib/intl</samp>. </p> </dd> -<dt><span><code>--with-libiconv-prefix[=<var>PREFIX</var>]</code></span></dt> -<dd><p>Define this to make Bash look for libiconv in <var>PREFIX</var> instead of the +<dt><code class="code">--with-libiconv-prefix[=<var class="var">PREFIX</var>]</code></dt> +<dd><p>Define this to make Bash look for libiconv in <var class="var">PREFIX</var> instead of the standard system locations. There is no version included with Bash. </p> </dd> -<dt><span><code>--enable-minimal-config</code></span></dt> +<dt><code class="code">--enable-minimal-config</code></dt> <dd><p>This produces a shell with minimal features, close to the historical Bourne shell. </p></dd> </dl> -<p>There are several <samp>--enable-</samp> options that alter how Bash is +<p>There are several <samp class="option">--enable-</samp> options that alter how Bash is compiled, linked, and installed, rather than changing run-time features. </p> -<dl compact="compact"> -<dt><span><code>--enable-largefile</code></span></dt> -<dd><p>Enable support for <a href="http://www.unix.org/version2/whatsnew/lfs20mar.html">large files</a> if the operating system requires special compiler options +<dl class="table"> +<dt><code class="code">--enable-largefile</code></dt> +<dd><p>Enable support for <a class="url" href="http://www.unix.org/version2/whatsnew/lfs20mar.html">large files</a> if the operating system requires special compiler options to build programs which can access large files. This is enabled by default, if the operating system provides large file support. </p> </dd> -<dt><span><code>--enable-profiling</code></span></dt> +<dt><code class="code">--enable-profiling</code></dt> <dd><p>This builds a Bash binary that produces profiling information to be -processed by <code>gprof</code> each time it is executed. +processed by <code class="code">gprof</code> each time it is executed. </p> </dd> -<dt><span><code>--enable-separate-helpfiles</code></span></dt> -<dd><p>Use external files for the documentation displayed by the <code>help</code> builtin +<dt><code class="code">--enable-separate-helpfiles</code></dt> +<dd><p>Use external files for the documentation displayed by the <code class="code">help</code> builtin instead of storing the text internally. </p> </dd> -<dt><span><code>--enable-static-link</code></span></dt> -<dd><p>This causes Bash to be linked statically, if <code>gcc</code> is being used. +<dt><code class="code">--enable-static-link</code></dt> +<dd><p>This causes Bash to be linked statically, if <code class="code">gcc</code> is being used. This could be used to build a version to use as root&rsquo;s shell. </p> </dd> </dl> -<p>The &lsquo;<samp>minimal-config</samp>&rsquo; option can be used to disable all of +<p>The &lsquo;<samp class="samp">minimal-config</samp>&rsquo; option can be used to disable all of the following options, but it is processed first, so individual -options may be enabled using &lsquo;<samp>enable-<var>feature</var></samp>&rsquo;. +options may be enabled using &lsquo;<samp class="samp">enable-<var class="var">feature</var></samp>&rsquo;. </p> <p>All of the following options except for -&lsquo;<samp>alt-array-implementation</samp>&rsquo;, -&lsquo;<samp>disabled-builtins</samp>&rsquo;, -&lsquo;<samp>direxpand-default</samp>&rsquo;, -&lsquo;<samp>strict-posix-default</samp>&rsquo;, +&lsquo;<samp class="samp">alt-array-implementation</samp>&rsquo;, +&lsquo;<samp class="samp">disabled-builtins</samp>&rsquo;, +&lsquo;<samp class="samp">direxpand-default</samp>&rsquo;, +&lsquo;<samp class="samp">strict-posix-default</samp>&rsquo;, and -&lsquo;<samp>xpg-echo-default</samp>&rsquo; are +&lsquo;<samp class="samp">xpg-echo-default</samp>&rsquo; are enabled by default, unless the operating system does not provide the necessary support. </p> -<dl compact="compact"> -<dt><span><code>--enable-alias</code></span></dt> -<dd><p>Allow alias expansion and include the <code>alias</code> and <code>unalias</code> -builtins (see <a href="#Aliases">Aliases</a>). +<dl class="table"> +<dt><code class="code">--enable-alias</code></dt> +<dd><p>Allow alias expansion and include the <code class="code">alias</code> and <code class="code">unalias</code> +builtins (see <a class="pxref" href="#Aliases">Aliases</a>). </p> </dd> -<dt><span><code>--enable-alt-array-implementation</code></span></dt> -<dd><p>This builds bash using an alternate implementation of arrays -(see <a href="#Arrays">Arrays</a>) that provides faster access at the expense of using +<dt><code class="code">--enable-alt-array-implementation</code></dt> +<dd><p>This builds Bash using an alternate implementation of arrays +(see <a class="pxref" href="#Arrays">Arrays</a>) that provides faster access at the expense of using more memory (sometimes many times more, depending on how sparse an array is). </p> </dd> -<dt><span><code>--enable-arith-for-command</code></span></dt> -<dd><p>Include support for the alternate form of the <code>for</code> command -that behaves like the C language <code>for</code> statement -(see <a href="#Looping-Constructs">Looping Constructs</a>). +<dt><code class="code">--enable-arith-for-command</code></dt> +<dd><p>Include support for the alternate form of the <code class="code">for</code> command +that behaves like the C language <code class="code">for</code> statement +(see <a class="pxref" href="#Looping-Constructs">Looping Constructs</a>). </p> </dd> -<dt><span><code>--enable-array-variables</code></span></dt> +<dt><code class="code">--enable-array-variables</code></dt> <dd><p>Include support for one-dimensional array shell variables -(see <a href="#Arrays">Arrays</a>). +(see <a class="pxref" href="#Arrays">Arrays</a>). </p> </dd> -<dt><span><code>--enable-bang-history</code></span></dt> -<dd><p>Include support for <code>csh</code>-like history substitution -(see <a href="#History-Interaction">History Expansion</a>). +<dt><code class="code">--enable-bang-history</code></dt> +<dd><p>Include support for <code class="code">csh</code>-like history substitution +(see <a class="pxref" href="#History-Interaction">History Expansion</a>). </p> </dd> -<dt><span><code>--enable-brace-expansion</code></span></dt> -<dd><p>Include <code>csh</code>-like brace expansion -( <code>b{a,b}c</code> &rarr; <code>bac bbc</code> ). -See <a href="#Brace-Expansion">Brace Expansion</a>, for a complete description. +<dt><code class="code">--enable-brace-expansion</code></dt> +<dd><p>Include <code class="code">csh</code>-like brace expansion +( <code class="code">b{a,b}c</code> &rarr; <code class="code">bac bbc</code> ). +See <a class="ref" href="#Brace-Expansion">Brace Expansion</a>, for a complete description. </p> </dd> -<dt><span><code>--enable-casemod-attributes</code></span></dt> -<dd><p>Include support for case-modifying attributes in the <code>declare</code> builtin -and assignment statements. Variables with the <code>uppercase</code> attribute, +<dt><code class="code">--enable-casemod-attributes</code></dt> +<dd><p>Include support for case-modifying attributes in the <code class="code">declare</code> builtin +and assignment statements. Variables with the <code class="code">uppercase</code> attribute, for example, will have their values converted to uppercase upon assignment. </p> </dd> -<dt><span><code>--enable-casemod-expansion</code></span></dt> +<dt><code class="code">--enable-casemod-expansion</code></dt> <dd><p>Include support for case-modifying word expansions. </p> </dd> -<dt><span><code>--enable-command-timing</code></span></dt> -<dd><p>Include support for recognizing <code>time</code> as a reserved word and for -displaying timing statistics for the pipeline following <code>time</code> -(see <a href="#Pipelines">Pipelines</a>). +<dt><code class="code">--enable-command-timing</code></dt> +<dd><p>Include support for recognizing <code class="code">time</code> as a reserved word and for +displaying timing statistics for the pipeline following <code class="code">time</code> +(see <a class="pxref" href="#Pipelines">Pipelines</a>). This allows pipelines as well as shell builtins and functions to be timed. </p> </dd> -<dt><span><code>--enable-cond-command</code></span></dt> -<dd><p>Include support for the <code>[[</code> conditional command. -(see <a href="#Conditional-Constructs">Conditional Constructs</a>). +<dt><code class="code">--enable-cond-command</code></dt> +<dd><p>Include support for the <code class="code">[[</code> conditional command. +(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>). </p> </dd> -<dt><span><code>--enable-cond-regexp</code></span></dt> -<dd><p>Include support for matching <small>POSIX</small> regular expressions using the -&lsquo;<samp>=~</samp>&rsquo; binary operator in the <code>[[</code> conditional command. -(see <a href="#Conditional-Constructs">Conditional Constructs</a>). +<dt><code class="code">--enable-cond-regexp</code></dt> +<dd><p>Include support for matching <small class="sc">POSIX</small> regular expressions using the +&lsquo;<samp class="samp">=~</samp>&rsquo; binary operator in the <code class="code">[[</code> conditional command. +(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>). </p> </dd> -<dt><span><code>--enable-coprocesses</code></span></dt> -<dd><p>Include support for coprocesses and the <code>coproc</code> reserved word -(see <a href="#Pipelines">Pipelines</a>). +<dt><code class="code">--enable-coprocesses</code></dt> +<dd><p>Include support for coprocesses and the <code class="code">coproc</code> reserved word +(see <a class="pxref" href="#Pipelines">Pipelines</a>). </p> </dd> -<dt><span><code>--enable-debugger</code></span></dt> -<dd><p>Include support for the bash debugger (distributed separately). +<dt><code class="code">--enable-debugger</code></dt> +<dd><p>Include support for the Bash debugger (distributed separately). </p> </dd> -<dt><span><code>--enable-dev-fd-stat-broken</code></span></dt> -<dd><p>If calling <code>stat</code> on /dev/fd/<var>N</var> returns different results than -calling <code>fstat</code> on file descriptor <var>N</var>, supply this option to +<dt><code class="code">--enable-dev-fd-stat-broken</code></dt> +<dd><p>If calling <code class="code">stat</code> on /dev/fd/<var class="var">N</var> returns different results than +calling <code class="code">fstat</code> on file descriptor <var class="var">N</var>, supply this option to enable a workaround. This has implications for conditional commands that test file attributes. </p> </dd> -<dt><span><code>--enable-direxpand-default</code></span></dt> -<dd><p>Cause the <code>direxpand</code> shell option (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) +<dt><code class="code">--enable-direxpand-default</code></dt> +<dd><p>Cause the <code class="code">direxpand</code> shell option (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>) to be enabled by default when the shell starts. It is normally disabled by default. </p> </dd> -<dt><span><code>--enable-directory-stack</code></span></dt> -<dd><p>Include support for a <code>csh</code>-like directory stack and the -<code>pushd</code>, <code>popd</code>, and <code>dirs</code> builtins -(see <a href="#The-Directory-Stack">The Directory Stack</a>). +<dt><code class="code">--enable-directory-stack</code></dt> +<dd><p>Include support for a <code class="code">csh</code>-like directory stack and the +<code class="code">pushd</code>, <code class="code">popd</code>, and <code class="code">dirs</code> builtins +(see <a class="pxref" href="#The-Directory-Stack">The Directory Stack</a>). </p> </dd> -<dt><span><code>--enable-disabled-builtins</code></span></dt> -<dd><p>Allow builtin commands to be invoked via &lsquo;<samp>builtin xxx</samp>&rsquo; -even after <code>xxx</code> has been disabled using &lsquo;<samp>enable -n xxx</samp>&rsquo;. -See <a href="#Bash-Builtins">Bash Builtin Commands</a>, for details of the <code>builtin</code> and -<code>enable</code> builtin commands. +<dt><code class="code">--enable-disabled-builtins</code></dt> +<dd><p>Allow builtin commands to be invoked via &lsquo;<samp class="samp">builtin xxx</samp>&rsquo; +even after <code class="code">xxx</code> has been disabled using &lsquo;<samp class="samp">enable -n xxx</samp>&rsquo;. +See <a class="ref" href="#Bash-Builtins">Bash Builtin Commands</a>, for details of the <code class="code">builtin</code> and +<code class="code">enable</code> builtin commands. </p> </dd> -<dt><span><code>--enable-dparen-arithmetic</code></span></dt> -<dd><p>Include support for the <code>((&hellip;))</code> command -(see <a href="#Conditional-Constructs">Conditional Constructs</a>). +<dt><code class="code">--enable-dparen-arithmetic</code></dt> +<dd><p>Include support for the <code class="code">((&hellip;))</code> command +(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>). </p> </dd> -<dt><span><code>--enable-extended-glob</code></span></dt> +<dt><code class="code">--enable-extended-glob</code></dt> <dd><p>Include support for the extended pattern matching features described -above under <a href="#Pattern-Matching">Pattern Matching</a>. +above under <a class="ref" href="#Pattern-Matching">Pattern Matching</a>. </p> </dd> -<dt><span><code>--enable-extended-glob-default</code></span></dt> -<dd><p>Set the default value of the <code>extglob</code> shell option described -above under <a href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled. +<dt><code class="code">--enable-extended-glob-default</code></dt> +<dd><p>Set the default value of the <code class="code">extglob</code> shell option described +above under <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled. </p> </dd> -<dt><span><code>--enable-function-import</code></span></dt> +<dt><code class="code">--enable-function-import</code></dt> <dd><p>Include support for importing function definitions exported by another instance of the shell from the environment. This option is enabled by default. </p> </dd> -<dt><span><code>--enable-glob-asciirange-default</code></span></dt> -<dd><p>Set the default value of the <code>globasciiranges</code> shell option described -above under <a href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled. +<dt><code class="code">--enable-glob-asciiranges-default</code></dt> +<dd><p>Set the default value of the <code class="code">globasciiranges</code> shell option described +above under <a class="ref" href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled. This controls the behavior of character ranges when used in pattern matching bracket expressions. </p> </dd> -<dt><span><code>--enable-help-builtin</code></span></dt> -<dd><p>Include the <code>help</code> builtin, which displays help on shell builtins and -variables (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +<dt><code class="code">--enable-help-builtin</code></dt> +<dd><p>Include the <code class="code">help</code> builtin, which displays help on shell builtins and +variables (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). </p> </dd> -<dt><span><code>--enable-history</code></span></dt> -<dd><p>Include command history and the <code>fc</code> and <code>history</code> -builtin commands (see <a href="#Bash-History-Facilities">Bash History Facilities</a>). +<dt><code class="code">--enable-history</code></dt> +<dd><p>Include command history and the <code class="code">fc</code> and <code class="code">history</code> +builtin commands (see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>). </p> </dd> -<dt><span><code>--enable-job-control</code></span></dt> -<dd><p>This enables the job control features (see <a href="#Job-Control">Job Control</a>), +<dt><code class="code">--enable-job-control</code></dt> +<dd><p>This enables the job control features (see <a class="pxref" href="#Job-Control">Job Control</a>), if the operating system supports them. </p> </dd> -<dt><span><code>--enable-multibyte</code></span></dt> +<dt><code class="code">--enable-multibyte</code></dt> <dd><p>This enables support for multibyte characters if the operating system provides the necessary support. </p> </dd> -<dt><span><code>--enable-net-redirections</code></span></dt> +<dt><code class="code">--enable-net-redirections</code></dt> <dd><p>This enables the special handling of filenames of the form -<code>/dev/tcp/<var>host</var>/<var>port</var></code> and -<code>/dev/udp/<var>host</var>/<var>port</var></code> -when used in redirections (see <a href="#Redirections">Redirections</a>). +<code class="code">/dev/tcp/<var class="var">host</var>/<var class="var">port</var></code> and +<code class="code">/dev/udp/<var class="var">host</var>/<var class="var">port</var></code> +when used in redirections (see <a class="pxref" href="#Redirections">Redirections</a>). </p> </dd> -<dt><span><code>--enable-process-substitution</code></span></dt> -<dd><p>This enables process substitution (see <a href="#Process-Substitution">Process Substitution</a>) if +<dt><code class="code">--enable-process-substitution</code></dt> +<dd><p>This enables process substitution (see <a class="pxref" href="#Process-Substitution">Process Substitution</a>) if the operating system provides the necessary support. </p> </dd> -<dt><span><code>--enable-progcomp</code></span></dt> +<dt><code class="code">--enable-progcomp</code></dt> <dd><p>Enable the programmable completion facilities -(see <a href="#Programmable-Completion">Programmable Completion</a>). +(see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>). If Readline is not enabled, this option has no effect. </p> </dd> -<dt><span><code>--enable-prompt-string-decoding</code></span></dt> +<dt><code class="code">--enable-prompt-string-decoding</code></dt> <dd><p>Turn on the interpretation of a number of backslash-escaped characters -in the <code>$PS0</code>, <code>$PS1</code>, <code>$PS2</code>, and <code>$PS4</code> prompt -strings. See <a href="#Controlling-the-Prompt">Controlling the Prompt</a>, for a complete list of prompt +in the <code class="env">$PS0</code>, <code class="env">$PS1</code>, <code class="env">$PS2</code>, and <code class="env">$PS4</code> prompt +strings. See <a class="ref" href="#Controlling-the-Prompt">Controlling the Prompt</a>, for a complete list of prompt string escape sequences. </p> </dd> -<dt><span><code>--enable-readline</code></span></dt> +<dt><code class="code">--enable-readline</code></dt> <dd><p>Include support for command-line editing and history with the Bash -version of the Readline library (see <a href="#Command-Line-Editing">Command Line Editing</a>). +version of the Readline library (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>). </p> </dd> -<dt><span><code>--enable-restricted</code></span></dt> -<dd><p>Include support for a <em>restricted shell</em>. If this is enabled, Bash, -when called as <code>rbash</code>, enters a restricted mode. See -<a href="#The-Restricted-Shell">The Restricted Shell</a>, for a description of restricted mode. +<dt><code class="code">--enable-restricted</code></dt> +<dd><p>Include support for a <em class="dfn">restricted shell</em>. If this is enabled, Bash, +when called as <code class="code">rbash</code>, enters a restricted mode. See +<a class="ref" href="#The-Restricted-Shell">The Restricted Shell</a>, for a description of restricted mode. </p> </dd> -<dt><span><code>--enable-select</code></span></dt> -<dd><p>Include the <code>select</code> compound command, which allows the generation of -simple menus (see <a href="#Conditional-Constructs">Conditional Constructs</a>). +<dt><code class="code">--enable-select</code></dt> +<dd><p>Include the <code class="code">select</code> compound command, which allows the generation of +simple menus (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>). </p> </dd> -<dt><span><code>--enable-single-help-strings</code></span></dt> -<dd><p>Store the text displayed by the <code>help</code> builtin as a single string for +<dt><code class="code">--enable-single-help-strings</code></dt> +<dd><p>Store the text displayed by the <code class="code">help</code> builtin as a single string for each help topic. This aids in translating the text to different languages. You may need to disable this if your compiler cannot handle very long string literals. </p> </dd> -<dt><span><code>--enable-strict-posix-default</code></span></dt> -<dd><p>Make Bash <small>POSIX</small>-conformant by default (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>). +<dt><code class="code">--enable-strict-posix-default</code></dt> +<dd><p>Make Bash <small class="sc">POSIX</small>-conformant by default (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>). </p> </dd> -<dt><span><code>--enable-translatable-strings</code></span></dt> -<dd><p>Enable support for <code>$&quot;<var>string</var>&quot;</code> translatable strings -(see <a href="#Locale-Translation">Locale-Specific Translation</a>). +<dt><code class="code">--enable-translatable-strings</code></dt> +<dd><p>Enable support for <code class="code">$&quot;<var class="var">string</var>&quot;</code> translatable strings +(see <a class="pxref" href="#Locale-Translation">Locale-Specific Translation</a>). </p> </dd> -<dt><span><code>--enable-usg-echo-default</code></span></dt> -<dd><p>A synonym for <code>--enable-xpg-echo-default</code>. +<dt><code class="code">--enable-usg-echo-default</code></dt> +<dd><p>A synonym for <code class="code">--enable-xpg-echo-default</code>. </p> </dd> -<dt><span><code>--enable-xpg-echo-default</code></span></dt> -<dd><p>Make the <code>echo</code> builtin expand backslash-escaped characters by default, -without requiring the <samp>-e</samp> option. -This sets the default value of the <code>xpg_echo</code> shell option to <code>on</code>, -which makes the Bash <code>echo</code> behave more like the version specified in +<dt><code class="code">--enable-xpg-echo-default</code></dt> +<dd><p>Make the <code class="code">echo</code> builtin expand backslash-escaped characters by default, +without requiring the <samp class="option">-e</samp> option. +This sets the default value of the <code class="code">xpg_echo</code> shell option to <code class="code">on</code>, +which makes the Bash <code class="code">echo</code> behave more like the version specified in the Single Unix Specification, version 3. -See <a href="#Bash-Builtins">Bash Builtin Commands</a>, for a description of the escape sequences that -<code>echo</code> recognizes. +See <a class="xref" href="#Bash-Builtins">Bash Builtin Commands</a>, for a description of the escape sequences that +<code class="code">echo</code> recognizes. </p></dd> </dl> -<p>The file <samp>config-top.h</samp> contains C Preprocessor -&lsquo;<samp>#define</samp>&rsquo; statements for options which are not settable from -<code>configure</code>. +<p>The file <samp class="file">config-top.h</samp> contains C Preprocessor +&lsquo;<samp class="samp">#define</samp>&rsquo; statements for options which are not settable from +<code class="code">configure</code>. Some of these are not meant to be changed; beware of the consequences if you do. Read the comments associated with each definition for more @@ -13897,462 +14404,504 @@ information about its effect. <hr> </div> </div> -<div class="appendix" id="Reporting-Bugs"> -<div class="header"> +<div class="appendix-level-extent" id="Reporting-Bugs"> +<div class="nav-panel"> <p> Next: <a href="#Major-Differences-From-The-Bourne-Shell" accesskey="n" rel="next">Major Differences From The Bourne Shell</a>, Previous: <a href="#Installing-Bash" accesskey="p" rel="prev">Installing Bash</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Reporting-Bugs-1"></span><h2 class="appendix">Appendix A Reporting Bugs</h2> +<h2 class="appendix" id="Reporting-Bugs-1"><span>Appendix A Reporting Bugs<a class="copiable-link" href="#Reporting-Bugs-1"> &para;</a></span></h2> <p>Please report all bugs you find in Bash. But first, you should make sure that it really is a bug, and that it appears in the latest version of Bash. The latest version of Bash is always available for FTP from -<a href="ftp://ftp.gnu.org/pub/gnu/bash/">ftp://ftp.gnu.org/pub/gnu/bash/</a> and from -<a href="http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz">http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz</a>. +<a class="uref" href="ftp://ftp.gnu.org/pub/gnu/bash/">ftp://ftp.gnu.org/pub/gnu/bash/</a> and from +<a class="uref" href="http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz">http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz</a>. </p> <p>Once you have determined that a bug actually exists, use the -<code>bashbug</code> command to submit a bug report. -If you have a fix, you are encouraged to mail that as well! +<code class="code">bashbug</code> command to submit a bug report or use the form at the +<a class="uref" href="https://savannah.gnu.org/projects/bash/">Bash project page</a>. +If you have a fix, you are encouraged to submit that as well! Suggestions and &lsquo;philosophical&rsquo; bug reports may be mailed -to <a href="mailto:bug-bash@gnu.org">bug-bash@gnu.org</a> or posted to the Usenet -newsgroup <code>gnu.bash.bug</code>. +to <a class="email" href="mailto:bug-bash@gnu.org">bug-bash@gnu.org</a> or <a class="email" href="mailto:help-bash@gnu.org">help-bash@gnu.org</a>. </p> <p>All bug reports should include: -</p><ul> -<li> The version number of Bash. -</li><li> The hardware and operating system. -</li><li> The compiler used to compile Bash. -</li><li> A description of the bug behaviour. -</li><li> A short script or &lsquo;recipe&rsquo; which exercises the bug and may be used +</p><ul class="itemize mark-bullet"> +<li>The version number of Bash. +</li><li>The hardware and operating system. +</li><li>The compiler used to compile Bash. +</li><li>A description of the bug behaviour. +</li><li>A short script or &lsquo;recipe&rsquo; which exercises the bug and may be used to reproduce it. </li></ul> -<p><code>bashbug</code> inserts the first three items automatically into +<p><code class="code">bashbug</code> inserts the first three items automatically into the template it provides for filing a bug report. </p> <p>Please send all reports concerning this manual to -<a href="mailto:bug-bash@gnu.org">bug-bash@gnu.org</a>. +<a class="email" href="mailto:bug-bash@gnu.org">bug-bash@gnu.org</a>. </p> <hr> </div> -<div class="appendix" id="Major-Differences-From-The-Bourne-Shell"> -<div class="header"> +<div class="appendix-level-extent" id="Major-Differences-From-The-Bourne-Shell"> +<div class="nav-panel"> <p> Next: <a href="#GNU-Free-Documentation-License" accesskey="n" rel="next">GNU Free Documentation License</a>, Previous: <a href="#Reporting-Bugs" accesskey="p" rel="prev">Reporting Bugs</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Major-Differences-From-The-Bourne-Shell-1"></span><h2 class="appendix">Appendix B Major Differences From The Bourne Shell</h2> +<h2 class="appendix" id="Major-Differences-From-The-Bourne-Shell-1"><span>Appendix B Major Differences From The Bourne Shell<a class="copiable-link" href="#Major-Differences-From-The-Bourne-Shell-1"> &para;</a></span></h2> <p>Bash implements essentially the same grammar, parameter and variable expansion, redirection, and quoting as the Bourne Shell. -Bash uses the <small>POSIX</small> standard as the specification of +Bash uses the <small class="sc">POSIX</small> standard as the specification of how these features are to be implemented. There are some differences between the traditional Bourne shell and Bash; this section quickly details the differences of significance. A number of these differences are explained in greater depth in previous sections. -This section uses the version of <code>sh</code> included in SVR4.2 (the +This section uses the version of <code class="code">sh</code> included in SVR4.2 (the last version of the historical Bourne shell) as the baseline reference. </p> -<ul> -<li> Bash is <small>POSIX</small>-conformant, even where the <small>POSIX</small> specification -differs from traditional <code>sh</code> behavior (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>). +<ul class="itemize mark-bullet"> +<li>Bash is <small class="sc">POSIX</small>-conformant, even where the <small class="sc">POSIX</small> specification +differs from traditional <code class="code">sh</code> behavior (see <a class="pxref" href="#Bash-POSIX-Mode">Bash and POSIX</a>). -</li><li> Bash has multi-character invocation options (see <a href="#Invoking-Bash">Invoking Bash</a>). +</li><li>Bash has multi-character invocation options (see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>). -</li><li> Bash has command-line editing (see <a href="#Command-Line-Editing">Command Line Editing</a>) and -the <code>bind</code> builtin. +</li><li>Bash has command-line editing (see <a class="pxref" href="#Command-Line-Editing">Command Line Editing</a>) and +the <code class="code">bind</code> builtin. -</li><li> Bash provides a programmable word completion mechanism -(see <a href="#Programmable-Completion">Programmable Completion</a>), and builtin commands -<code>complete</code>, <code>compgen</code>, and <code>compopt</code>, to +</li><li>Bash provides a programmable word completion mechanism +(see <a class="pxref" href="#Programmable-Completion">Programmable Completion</a>), and builtin commands +<code class="code">complete</code>, <code class="code">compgen</code>, and <code class="code">compopt</code>, to manipulate it. -</li><li> Bash has command history (see <a href="#Bash-History-Facilities">Bash History Facilities</a>) and the -<code>history</code> and <code>fc</code> builtins to manipulate it. +</li><li>Bash has command history (see <a class="pxref" href="#Bash-History-Facilities">Bash History Facilities</a>) and the +<code class="code">history</code> and <code class="code">fc</code> builtins to manipulate it. The Bash history list maintains timestamp information and uses the -value of the <code>HISTTIMEFORMAT</code> variable to display it. +value of the <code class="code">HISTTIMEFORMAT</code> variable to display it. -</li><li> Bash implements <code>csh</code>-like history expansion -(see <a href="#History-Interaction">History Expansion</a>). +</li><li>Bash implements <code class="code">csh</code>-like history expansion +(see <a class="pxref" href="#History-Interaction">History Expansion</a>). -</li><li> Bash has one-dimensional array variables (see <a href="#Arrays">Arrays</a>), and the +</li><li>Bash has one-dimensional array variables (see <a class="pxref" href="#Arrays">Arrays</a>), and the appropriate variable expansions and assignment syntax to use them. Several of the Bash builtins take options to act on arrays. Bash provides a number of built-in array variables. -</li><li> The <code>$'&hellip;'</code> quoting syntax, which expands ANSI-C +</li><li>The <code class="code">$'&hellip;'</code> quoting syntax, which expands ANSI-C backslash-escaped characters in the text between the single quotes, -is supported (see <a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>). +is supported (see <a class="pxref" href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>). -</li><li> Bash supports the <code>$&quot;&hellip;&quot;</code> quoting syntax to do +</li><li>Bash supports the <code class="code">$&quot;&hellip;&quot;</code> quoting syntax to do locale-specific translation of the characters between the double -quotes. The <samp>-D</samp>, <samp>--dump-strings</samp>, and <samp>--dump-po-strings</samp> +quotes. The <samp class="option">-D</samp>, <samp class="option">--dump-strings</samp>, and <samp class="option">--dump-po-strings</samp> invocation options list the translatable strings found in a script -(see <a href="#Locale-Translation">Locale-Specific Translation</a>). +(see <a class="pxref" href="#Locale-Translation">Locale-Specific Translation</a>). -</li><li> Bash implements the <code>!</code> keyword to negate the return value of -a pipeline (see <a href="#Pipelines">Pipelines</a>). -Very useful when an <code>if</code> statement needs to act only if a test fails. -The Bash &lsquo;<samp>-o pipefail</samp>&rsquo; option to <code>set</code> will cause a pipeline to +</li><li>Bash implements the <code class="code">!</code> keyword to negate the return value of +a pipeline (see <a class="pxref" href="#Pipelines">Pipelines</a>). +Very useful when an <code class="code">if</code> statement needs to act only if a test fails. +The Bash &lsquo;<samp class="samp">-o pipefail</samp>&rsquo; option to <code class="code">set</code> will cause a pipeline to return a failure status if any command fails. -</li><li> Bash has the <code>time</code> reserved word and command timing (see <a href="#Pipelines">Pipelines</a>). +</li><li>Bash has the <code class="code">time</code> reserved word and command timing (see <a class="pxref" href="#Pipelines">Pipelines</a>). The display of the timing statistics may be controlled with the -<code>TIMEFORMAT</code> variable. +<code class="env">TIMEFORMAT</code> variable. -</li><li> Bash implements the <code>for (( <var>expr1</var> ; <var>expr2</var> ; <var>expr3</var> ))</code> -arithmetic for command, similar to the C language (see <a href="#Looping-Constructs">Looping Constructs</a>). +</li><li>Bash implements the <code class="code">for (( <var class="var">expr1</var> ; <var class="var">expr2</var> ; <var class="var">expr3</var> ))</code> +arithmetic for command, similar to the C language (see <a class="pxref" href="#Looping-Constructs">Looping Constructs</a>). -</li><li> Bash includes the <code>select</code> compound command, which allows the -generation of simple menus (see <a href="#Conditional-Constructs">Conditional Constructs</a>). +</li><li>Bash includes the <code class="code">select</code> compound command, which allows the +generation of simple menus (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>). -</li><li> Bash includes the <code>[[</code> compound command, which makes conditional -testing part of the shell grammar (see <a href="#Conditional-Constructs">Conditional Constructs</a>), including +</li><li>Bash includes the <code class="code">[[</code> compound command, which makes conditional +testing part of the shell grammar (see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>), including optional regular expression matching. -</li><li> Bash provides optional case-insensitive matching for the <code>case</code> and -<code>[[</code> constructs. +</li><li>Bash provides optional case-insensitive matching for the <code class="code">case</code> and +<code class="code">[[</code> constructs. -</li><li> Bash includes brace expansion (see <a href="#Brace-Expansion">Brace Expansion</a>) and tilde -expansion (see <a href="#Tilde-Expansion">Tilde Expansion</a>). +</li><li>Bash includes brace expansion (see <a class="pxref" href="#Brace-Expansion">Brace Expansion</a>) and tilde +expansion (see <a class="pxref" href="#Tilde-Expansion">Tilde Expansion</a>). -</li><li> Bash implements command aliases and the <code>alias</code> and <code>unalias</code> -builtins (see <a href="#Aliases">Aliases</a>). +</li><li>Bash implements command aliases and the <code class="code">alias</code> and <code class="code">unalias</code> +builtins (see <a class="pxref" href="#Aliases">Aliases</a>). -</li><li> Bash provides shell arithmetic, the <code>((</code> compound command -(see <a href="#Conditional-Constructs">Conditional Constructs</a>), -and arithmetic expansion (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>). +</li><li>Bash provides shell arithmetic, the <code class="code">((</code> compound command +(see <a class="pxref" href="#Conditional-Constructs">Conditional Constructs</a>), +and arithmetic expansion (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>). -</li><li> Variables present in the shell&rsquo;s initial environment are automatically +</li><li>Variables present in the shell&rsquo;s initial environment are automatically exported to child processes. The Bourne shell does not normally do -this unless the variables are explicitly marked using the <code>export</code> +this unless the variables are explicitly marked using the <code class="code">export</code> command. -</li><li> Bash supports the &lsquo;<samp>+=</samp>&rsquo; assignment operator, which appends to the value +</li><li>Bash supports the &lsquo;<samp class="samp">+=</samp>&rsquo; assignment operator, which appends to the value of the variable named on the left hand side. -</li><li> Bash includes the <small>POSIX</small> pattern removal &lsquo;<samp>%</samp>&rsquo;, &lsquo;<samp>#</samp>&rsquo;, &lsquo;<samp>%%</samp>&rsquo; -and &lsquo;<samp>##</samp>&rsquo; expansions to remove leading or trailing substrings from -variable values (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +</li><li>Bash includes the <small class="sc">POSIX</small> pattern removal &lsquo;<samp class="samp">%</samp>&rsquo;, &lsquo;<samp class="samp">#</samp>&rsquo;, &lsquo;<samp class="samp">%%</samp>&rsquo; +and &lsquo;<samp class="samp">##</samp>&rsquo; expansions to remove leading or trailing substrings from +variable values (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). + +</li><li>The expansion <code class="code">${#xx}</code>, which returns the length of <code class="code">${xx}</code>, +is supported (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). -</li><li> The expansion <code>${#xx}</code>, which returns the length of <code>${xx}</code>, -is supported (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +</li><li>The expansion <code class="code">${var:</code><var class="var">offset</var><code class="code">[:</code><var class="var">length</var><code class="code">]}</code>, +which expands to the substring of <code class="code">var</code>&rsquo;s value of length +<var class="var">length</var>, beginning at <var class="var">offset</var>, is present +(see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). -</li><li> The expansion <code>${var:</code><var>offset</var><code>[:</code><var>length</var><code>]}</code>, -which expands to the substring of <code>var</code>&rsquo;s value of length -<var>length</var>, beginning at <var>offset</var>, is present -(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +</li><li>The expansion +<code class="code">${<var class="var">var</var>/[/]</code><var class="var">pattern</var><code class="code">[/</code><var class="var">replacement</var><code class="code">]}</code>, +which matches <var class="var">pattern</var> and replaces it with <var class="var">replacement</var> in +the value of <var class="var">var</var>, is available (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>), +with a mechanism to use the matched text in <var class="var">replacement</var>. -</li><li> The expansion -<code>${<var>var</var>/[/]</code><var>pattern</var><code>[/</code><var>replacement</var><code>]}</code>, -which matches <var>pattern</var> and replaces it with <var>replacement</var> in -the value of <var>var</var>, is available (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +</li><li>The expansion <code class="code">${!<var class="var">prefix</var>*}</code> expansion, which expands to +the names of all shell variables whose names begin with <var class="var">prefix</var>, +is available (see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). -</li><li> The expansion <code>${!<var>prefix</var>*}</code> expansion, which expands to -the names of all shell variables whose names begin with <var>prefix</var>, -is available (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +</li><li>Bash has indirect variable expansion using <code class="code">${!word}</code> +(see <a class="pxref" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>) and implements the <code class="code">nameref</code> +variable attribute for automatic indirect variable expansion. -</li><li> Bash has indirect variable expansion using <code>${!word}</code> -(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>). +</li><li>Bash can expand positional parameters beyond <code class="code">$9</code> using +<code class="code">${<var class="var">num</var>}</code>. -</li><li> Bash can expand positional parameters beyond <code>$9</code> using -<code>${<var>num</var>}</code>. +</li><li>Bash includes a set of parameter transformation word expansions of the +form <code class="code">${var@X}</code>, where &lsquo;<samp class="samp">X</samp>&rsquo; specifies the transformation. -</li><li> The <small>POSIX</small> <code>$()</code> form of command substitution -is implemented (see <a href="#Command-Substitution">Command Substitution</a>), -and preferred to the Bourne shell&rsquo;s <code>``</code> (which +</li><li>The <small class="sc">POSIX</small> <code class="code">$()</code> form of command substitution +is implemented (see <a class="pxref" href="#Command-Substitution">Command Substitution</a>), +and preferred to the Bourne shell&rsquo;s <code class="code">``</code> (which is also implemented for backwards compatibility). -</li><li> Bash has process substitution (see <a href="#Process-Substitution">Process Substitution</a>). +</li><li>Bash implements a variant of command substitution that runs the enclosed +command in the current shell execution environment +(<code class="code">${ <var class="var">command</var>;}</code>). + +</li><li>Bash has process substitution (see <a class="pxref" href="#Process-Substitution">Process Substitution</a>). + +</li><li>Bash automatically assigns variables that provide information about the +current user (<code class="env">UID</code>, <code class="env">EUID</code>, and <code class="env">GROUPS</code>), the current host +(<code class="env">HOSTTYPE</code>, <code class="env">OSTYPE</code>, <code class="env">MACHTYPE</code>, and <code class="env">HOSTNAME</code>), +and the instance of Bash that is running (<code class="env">BASH</code>, +<code class="env">BASH_VERSION</code>, and <code class="env">BASH_VERSINFO</code>). +See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for details. -</li><li> Bash automatically assigns variables that provide information about the -current user (<code>UID</code>, <code>EUID</code>, and <code>GROUPS</code>), the current host -(<code>HOSTTYPE</code>, <code>OSTYPE</code>, <code>MACHTYPE</code>, and <code>HOSTNAME</code>), -and the instance of Bash that is running (<code>BASH</code>, -<code>BASH_VERSION</code>, and <code>BASH_VERSINFO</code>). See <a href="#Bash-Variables">Bash Variables</a>, -for details. +</li><li>Bash uses many variables to provide functionality and customize shell +behavior that the Bourne shell does not. +Examples include <code class="env">RANDOM</code>, <code class="env">SRANDOM</code>, <code class="env">EPOCHSECONDS</code>, +<code class="env">GLOBSORT</code>, <code class="env">TIMEFORMAT</code>, <code class="env">BASHPID</code>, <code class="env">BASH_XTRACEFD</code>, +<code class="env">GLOBIGNORE</code>, <code class="env">HISTIGNORE</code>, and <code class="env">BASH_VERSION</code>. +See <a class="xref" href="#Bash-Variables">Bash Variables</a>, for a complete list. -</li><li> The <code>IFS</code> variable is used to split only the results of expansion, -not all words (see <a href="#Word-Splitting">Word Splitting</a>). +</li><li>The <code class="env">IFS</code> variable is used to split only the results of expansion, +not all words (see <a class="pxref" href="#Word-Splitting">Word Splitting</a>). This closes a longstanding shell security hole. -</li><li> The filename expansion bracket expression code uses &lsquo;<samp>!</samp>&rsquo; and &lsquo;<samp>^</samp>&rsquo; +</li><li>The filename expansion bracket expression code uses &lsquo;<samp class="samp">!</samp>&rsquo; and &lsquo;<samp class="samp">^</samp>&rsquo; to negate the set of characters between the brackets. -The Bourne shell uses only &lsquo;<samp>!</samp>&rsquo;. +The Bourne shell uses only &lsquo;<samp class="samp">!</samp>&rsquo;. -</li><li> Bash implements the full set of <small>POSIX</small> filename expansion operators, +</li><li>Bash implements the full set of <small class="sc">POSIX</small> filename expansion operators, including character classes, equivalence classes, and -collating symbols (see <a href="#Filename-Expansion">Filename Expansion</a>). +collating symbols (see <a class="pxref" href="#Filename-Expansion">Filename Expansion</a>). -</li><li> Bash implements extended pattern matching features when the <code>extglob</code> -shell option is enabled (see <a href="#Pattern-Matching">Pattern Matching</a>). +</li><li>Bash implements extended pattern matching features when the <code class="code">extglob</code> +shell option is enabled (see <a class="pxref" href="#Pattern-Matching">Pattern Matching</a>). -</li><li> It is possible to have a variable and a function with the same name; -<code>sh</code> does not separate the two name spaces. +</li><li>It is possible to have a variable and a function with the same name; +<code class="code">sh</code> does not separate the two name spaces. -</li><li> Bash functions are permitted to have local variables using the -<code>local</code> builtin, and thus useful recursive functions may be written -(see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +</li><li>Bash functions are permitted to have local variables using the +<code class="code">local</code> builtin, and thus useful recursive functions may be written +(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). -</li><li> Variable assignments preceding commands affect only that command, even -builtins and functions (see <a href="#Environment">Environment</a>). -In <code>sh</code>, all variable assignments +</li><li>Variable assignments preceding commands affect only that command, even +builtins and functions (see <a class="pxref" href="#Environment">Environment</a>). +In <code class="code">sh</code>, all variable assignments preceding commands are global unless the command is executed from the file system. -</li><li> Bash performs filename expansion on filenames specified as operands -to input and output redirection operators (see <a href="#Redirections">Redirections</a>). +</li><li>Bash performs filename expansion on filenames specified as operands +to input and output redirection operators (see <a class="pxref" href="#Redirections">Redirections</a>). -</li><li> Bash contains the &lsquo;<samp>&lt;&gt;</samp>&rsquo; redirection operator, allowing a file to be -opened for both reading and writing, and the &lsquo;<samp>&amp;&gt;</samp>&rsquo; redirection +</li><li>Bash contains the &lsquo;<samp class="samp">&lt;&gt;</samp>&rsquo; redirection operator, allowing a file to be +opened for both reading and writing, and the &lsquo;<samp class="samp">&amp;&gt;</samp>&rsquo; redirection operator, for directing standard output and standard error to the same -file (see <a href="#Redirections">Redirections</a>). +file (see <a class="pxref" href="#Redirections">Redirections</a>). -</li><li> Bash includes the &lsquo;<samp>&lt;&lt;&lt;</samp>&rsquo; redirection operator, allowing a string to -be used as the standard input to a command. +</li><li>Bash includes the &lsquo;<samp class="samp">&lt;&lt;&lt;</samp>&rsquo; redirection operator, allowing a string to +be used as the standard input to a command (see <a class="pxref" href="#Redirections">Redirections</a>). -</li><li> Bash implements the &lsquo;<samp>[n]&lt;&amp;<var>word</var></samp>&rsquo; and &lsquo;<samp>[n]&gt;&amp;<var>word</var></samp>&rsquo; +</li><li>Bash implements the &lsquo;<samp class="samp">[n]&lt;&amp;<var class="var">word</var></samp>&rsquo; and &lsquo;<samp class="samp">[n]&gt;&amp;<var class="var">word</var></samp>&rsquo; redirection operators, which move one file descriptor to another. -</li><li> Bash treats a number of filenames specially when they are -used in redirection operators (see <a href="#Redirections">Redirections</a>). +</li><li>Bash treats a number of filenames specially when they are +used in redirection operators (see <a class="pxref" href="#Redirections">Redirections</a>). -</li><li> Bash can open network connections to arbitrary machines and services -with the redirection operators (see <a href="#Redirections">Redirections</a>). +</li><li>Bash can open network connections to arbitrary machines and services +with the redirection operators (see <a class="pxref" href="#Redirections">Redirections</a>). -</li><li> The <code>noclobber</code> option is available to avoid overwriting existing -files with output redirection (see <a href="#The-Set-Builtin">The Set Builtin</a>). -The &lsquo;<samp>&gt;|</samp>&rsquo; redirection operator may be used to override <code>noclobber</code>. +</li><li>The <code class="code">noclobber</code> option is available to avoid overwriting existing +files with output redirection (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). +The &lsquo;<samp class="samp">&gt;|</samp>&rsquo; redirection operator may be used to override <code class="code">noclobber</code>. -</li><li> The Bash <code>cd</code> and <code>pwd</code> builtins (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) -each take <samp>-L</samp> and <samp>-P</samp> options to switch between logical and +</li><li>The Bash <code class="code">cd</code> and <code class="code">pwd</code> builtins (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) +each take <samp class="option">-L</samp> and <samp class="option">-P</samp> options to switch between logical and physical modes. -</li><li> Bash allows a function to override a builtin with the same name, and provides +</li><li>Bash allows a function to override a builtin with the same name, and provides access to that builtin&rsquo;s functionality within the function via the -<code>builtin</code> and <code>command</code> builtins (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +<code class="code">builtin</code> and <code class="code">command</code> builtins (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). -</li><li> The <code>command</code> builtin allows selective disabling of functions -when command lookup is performed (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +</li><li>Bash implements support for dynamically loading builtin commands from +shared objects. -</li><li> Individual builtins may be enabled or disabled using the <code>enable</code> -builtin (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +</li><li>The <code class="code">command</code> builtin allows selective disabling of functions +when command lookup is performed (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). -</li><li> The Bash <code>exec</code> builtin takes additional options that allow users +</li><li>Individual builtins may be enabled or disabled using the <code class="code">enable</code> +builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). + +</li><li>The Bash <code class="code">exec</code> builtin takes additional options that allow users to control the contents of the environment passed to the executed command, and what the zeroth argument to the command is to be -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). + +</li><li>Shell functions may be exported to children via the environment +using <code class="code">export -f</code> (see <a class="pxref" href="#Shell-Functions">Shell Functions</a>). + +</li><li>Bash decodes a number of backslash-escape sequences in the prompt string +variables (<code class="code">PS0</code>, <code class="code">PS1</code>, <code class="code">PS2</code>, and <code class="code">PS4</code>). -</li><li> Shell functions may be exported to children via the environment -using <code>export -f</code> (see <a href="#Shell-Functions">Shell Functions</a>). +</li><li>Bash expands and displays the <code class="code">PS0</code> prompt string variable. -</li><li> The Bash <code>export</code>, <code>readonly</code>, and <code>declare</code> builtins can -take a <samp>-f</samp> option to act on shell functions, a <samp>-p</samp> option to +</li><li>Bash runs commands from the <code class="code">PROMPT_COMMAND</code> array variable before +issuing each primary prompt. + +</li><li>Bash decodes a number of backslash-escaped characters +</li><li>The Bash <code class="code">export</code>, <code class="code">readonly</code>, and <code class="code">declare</code> builtins can +take a <samp class="option">-f</samp> option to act on shell functions, a <samp class="option">-p</samp> option to display variables with various attributes set in a format that can be -used as shell input, a <samp>-n</samp> option to remove various variable -attributes, and &lsquo;<samp>name=value</samp>&rsquo; arguments to set variable attributes +used as shell input, a <samp class="option">-n</samp> option to remove various variable +attributes, and &lsquo;<samp class="samp">name=value</samp>&rsquo; arguments to set variable attributes and values simultaneously. -</li><li> The Bash <code>hash</code> builtin allows a name to be associated with +</li><li>The Bash <code class="code">hash</code> builtin allows a name to be associated with an arbitrary filename, even when that filename cannot be found by -searching the <code>$PATH</code>, using &lsquo;<samp>hash -p</samp>&rsquo; -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +searching the <code class="env">$PATH</code>, using &lsquo;<samp class="samp">hash -p</samp>&rsquo; +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). + +</li><li>Bash includes a <code class="code">help</code> builtin for quick reference to shell +facilities (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). -</li><li> Bash includes a <code>help</code> builtin for quick reference to shell -facilities (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +</li><li>Bash includes the <code class="code">mapfile</code> builtin to quickly read the contents +of a file into an indexed array variable. -</li><li> The <code>printf</code> builtin is available to display formatted output -(see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +</li><li>The <code class="code">printf</code> builtin is available to display formatted output +(see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). -</li><li> The Bash <code>read</code> builtin (see <a href="#Bash-Builtins">Bash Builtin Commands</a>) -will read a line ending in &lsquo;<samp>\</samp>&rsquo; with -the <samp>-r</samp> option, and will use the <code>REPLY</code> variable as a +</li><li>The Bash <code class="code">read</code> builtin (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>) +will read a line ending in &lsquo;<samp class="samp">\</samp>&rsquo; with +the <samp class="option">-r</samp> option, and will use the <code class="env">REPLY</code> variable as a default if no non-option arguments are supplied. -The Bash <code>read</code> builtin -also accepts a prompt string with the <samp>-p</samp> option and will use -Readline to obtain the line when given the <samp>-e</samp> option. -The <code>read</code> builtin also has additional options to control input: -the <samp>-s</samp> option will turn off echoing of input characters as -they are read, the <samp>-t</samp> option will allow <code>read</code> to time out +The Bash <code class="code">read</code> builtin +also accepts a prompt string with the <samp class="option">-p</samp> option and will use +Readline to obtain the line when given the <samp class="option">-e</samp> or <samp class="option">-E</samp> +options. +The <code class="code">read</code> builtin also has additional options to control input: +the <samp class="option">-s</samp> option will turn off echoing of input characters as +they are read, the <samp class="option">-t</samp> option will allow <code class="code">read</code> to time out if input does not arrive within a specified number of seconds, the -<samp>-n</samp> option will allow reading only a specified number of -characters rather than a full line, and the <samp>-d</samp> option will read +<samp class="option">-n</samp> option will allow reading only a specified number of +characters rather than a full line, and the <samp class="option">-d</samp> option will read until a particular character rather than newline. -</li><li> The <code>return</code> builtin may be used to abort execution of scripts -executed with the <code>.</code> or <code>source</code> builtins -(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +</li><li>The <code class="code">return</code> builtin may be used to abort execution of scripts +executed with the <code class="code">.</code> or <code class="code">source</code> builtins +(see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). -</li><li> Bash includes the <code>shopt</code> builtin, for finer control of shell -optional capabilities (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), and allows these options -to be set and unset at shell invocation (see <a href="#Invoking-Bash">Invoking Bash</a>). +</li><li>Bash includes the <code class="code">shopt</code> builtin, for finer control of shell +optional capabilities (see <a class="pxref" href="#The-Shopt-Builtin">The Shopt Builtin</a>), and allows these options +to be set and unset at shell invocation (see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>). -</li><li> Bash has much more optional behavior controllable with the <code>set</code> -builtin (see <a href="#The-Set-Builtin">The Set Builtin</a>). +</li><li>Bash has much more optional behavior controllable with the <code class="code">set</code> +builtin (see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). -</li><li> The &lsquo;<samp>-x</samp>&rsquo; (<samp>xtrace</samp>) option displays commands other than +</li><li>The <samp class="option">-x</samp> (<samp class="option">xtrace</samp>) option displays commands other than simple commands when performing an execution trace -(see <a href="#The-Set-Builtin">The Set Builtin</a>). +(see <a class="pxref" href="#The-Set-Builtin">The Set Builtin</a>). -</li><li> The <code>test</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) -is slightly different, as it implements the <small>POSIX</small> algorithm, +</li><li>The <code class="code">test</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) +is slightly different, as it implements the <small class="sc">POSIX</small> algorithm, which specifies the behavior based on the number of arguments. -</li><li> Bash includes the <code>caller</code> builtin, which displays the context of +</li><li>The Bash <code class="code">wait</code> builtin has a <samp class="option">-n</samp> option to wait for the +next child to exit, possibly selecting from a list of supplied jobs, +and the <samp class="option">-p</samp> option to store information about a terminated +child process in a shell variable. + +</li><li>Bash includes the <code class="code">caller</code> builtin, which displays the context of any active subroutine call (a shell function or a script executed with -the <code>.</code> or <code>source</code> builtins). This supports the Bash +the <code class="code">.</code> or <code class="code">source</code> builtins). This supports the Bash debugger. -</li><li> The <code>trap</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows a -<code>DEBUG</code> pseudo-signal specification, similar to <code>EXIT</code>. -Commands specified with a <code>DEBUG</code> trap are executed before every -simple command, <code>for</code> command, <code>case</code> command, -<code>select</code> command, every arithmetic <code>for</code> command, and before +</li><li>The <code class="code">trap</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows a +<code class="code">DEBUG</code> pseudo-signal specification, similar to <code class="code">EXIT</code>. +Commands specified with a <code class="code">DEBUG</code> trap are executed before every +simple command, <code class="code">for</code> command, <code class="code">case</code> command, +<code class="code">select</code> command, every arithmetic <code class="code">for</code> command, and before the first command executes in a shell function. -The <code>DEBUG</code> trap is not inherited by shell functions unless the -function has been given the <code>trace</code> attribute or the -<code>functrace</code> option has been enabled using the <code>shopt</code> builtin. -The <code>extdebug</code> shell option has additional effects on the -<code>DEBUG</code> trap. - -<p>The <code>trap</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows an -<code>ERR</code> pseudo-signal specification, similar to <code>EXIT</code> and <code>DEBUG</code>. -Commands specified with an <code>ERR</code> trap are executed after a simple +The <code class="code">DEBUG</code> trap is not inherited by shell functions unless the +function has been given the <code class="code">trace</code> attribute or the +<code class="code">functrace</code> option has been enabled using the <code class="code">shopt</code> builtin. +The <code class="code">extdebug</code> shell option has additional effects on the +<code class="code">DEBUG</code> trap. + +<p>The <code class="code">trap</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows an +<code class="code">ERR</code> pseudo-signal specification, similar to <code class="code">EXIT</code> and <code class="code">DEBUG</code>. +Commands specified with an <code class="code">ERR</code> trap are executed after a simple command fails, with a few exceptions. -The <code>ERR</code> trap is not inherited by shell functions unless the -<code>-o errtrace</code> option to the <code>set</code> builtin is enabled. +The <code class="code">ERR</code> trap is not inherited by shell functions unless the +<code class="code">-o errtrace</code> option to the <code class="code">set</code> builtin is enabled. </p> -<p>The <code>trap</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows a -<code>RETURN</code> pseudo-signal specification, similar to -<code>EXIT</code> and <code>DEBUG</code>. -Commands specified with a <code>RETURN</code> trap are executed before +<p>The <code class="code">trap</code> builtin (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows a +<code class="code">RETURN</code> pseudo-signal specification, similar to +<code class="code">EXIT</code> and <code class="code">DEBUG</code>. +Commands specified with a <code class="code">RETURN</code> trap are executed before execution resumes after a shell function or a shell script executed with -<code>.</code> or <code>source</code> returns. -The <code>RETURN</code> trap is not inherited by shell functions unless the -function has been given the <code>trace</code> attribute or the -<code>functrace</code> option has been enabled using the <code>shopt</code> builtin. +<code class="code">.</code> or <code class="code">source</code> returns. +The <code class="code">RETURN</code> trap is not inherited by shell functions unless the +function has been given the <code class="code">trace</code> attribute or the +<code class="code">functrace</code> option has been enabled using the <code class="code">shopt</code> builtin. </p> -</li><li> The Bash <code>type</code> builtin is more extensive and gives more information -about the names it finds (see <a href="#Bash-Builtins">Bash Builtin Commands</a>). +</li><li>The Bash <code class="code">type</code> builtin is more extensive and gives more information +about the names it finds (see <a class="pxref" href="#Bash-Builtins">Bash Builtin Commands</a>). -</li><li> The Bash <code>umask</code> builtin permits a <samp>-p</samp> option to cause -the output to be displayed in the form of a <code>umask</code> command -that may be reused as input (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). +</li><li>The Bash <code class="code">umask</code> builtin permits a <samp class="option">-p</samp> option to cause +the output to be displayed in the form of a <code class="code">umask</code> command +that may be reused as input (see <a class="pxref" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>). -</li><li> Bash implements a <code>csh</code>-like directory stack, and provides the -<code>pushd</code>, <code>popd</code>, and <code>dirs</code> builtins to manipulate it -(see <a href="#The-Directory-Stack">The Directory Stack</a>). +</li><li>Bash implements a <code class="code">csh</code>-like directory stack, and provides the +<code class="code">pushd</code>, <code class="code">popd</code>, and <code class="code">dirs</code> builtins to manipulate it +(see <a class="pxref" href="#The-Directory-Stack">The Directory Stack</a>). Bash also makes the directory stack visible as the value of the -<code>DIRSTACK</code> shell variable. +<code class="env">DIRSTACK</code> shell variable. -</li><li> Bash interprets special backslash-escaped characters in the prompt -strings when interactive (see <a href="#Controlling-the-Prompt">Controlling the Prompt</a>). +</li><li>Bash interprets special backslash-escaped characters in the prompt +strings when interactive (see <a class="pxref" href="#Controlling-the-Prompt">Controlling the Prompt</a>). -</li><li> The Bash restricted mode is more useful (see <a href="#The-Restricted-Shell">The Restricted Shell</a>); +</li><li>The Bash restricted mode is more useful (see <a class="pxref" href="#The-Restricted-Shell">The Restricted Shell</a>); the SVR4.2 shell restricted mode is too limited. -</li><li> The <code>disown</code> builtin can remove a job from the internal shell -job table (see <a href="#Job-Control-Builtins">Job Control Builtins</a>) or suppress the sending -of <code>SIGHUP</code> to a job when the shell exits as the result of a -<code>SIGHUP</code>. +</li><li>The <code class="code">disown</code> builtin can remove a job from the internal shell +job table (see <a class="pxref" href="#Job-Control-Builtins">Job Control Builtins</a>) or suppress the sending +of <code class="code">SIGHUP</code> to a job when the shell exits as the result of a +<code class="code">SIGHUP</code>. -</li><li> Bash includes a number of features to support a separate debugger for +</li><li>Bash includes a number of features to support a separate debugger for shell scripts. -</li><li> The SVR4.2 shell has two privilege-related builtins -(<code>mldmode</code> and <code>priv</code>) not present in Bash. +</li><li>The SVR4.2 shell has two privilege-related builtins +(<code class="code">mldmode</code> and <code class="code">priv</code>) not present in Bash. -</li><li> Bash does not have the <code>stop</code> or <code>newgrp</code> builtins. +</li><li>Bash does not have the <code class="code">stop</code> or <code class="code">newgrp</code> builtins. -</li><li> Bash does not use the <code>SHACCT</code> variable or perform shell accounting. +</li><li>Bash does not use the <code class="env">SHACCT</code> variable or perform shell accounting. -</li><li> The SVR4.2 <code>sh</code> uses a <code>TIMEOUT</code> variable like Bash uses -<code>TMOUT</code>. +</li><li>The SVR4.2 <code class="code">sh</code> uses a <code class="env">TIMEOUT</code> variable like Bash uses +<code class="env">TMOUT</code>. </li></ul> -<p>More features unique to Bash may be found in <a href="#Bash-Features">Bash Features</a>. +<p>More features unique to Bash may be found in <a class="ref" href="#Bash-Features">Bash Features</a>. </p> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Implementation-Differences-From-The-SVR4_002e2-Shell" accesskey="1">Implementation Differences From The SVR4.2 Shell</a></li> </ul> -<div class="appendixsec" id="Implementation-Differences-From-The-SVR4_002e2-Shell"> -<h3 class="appendixsec">B.1 Implementation Differences From The SVR4.2 Shell</h3> +<div class="appendixsec-level-extent" id="Implementation-Differences-From-The-SVR4_002e2-Shell"> +<h3 class="appendixsec"><span>B.1 Implementation Differences From The SVR4.2 Shell<a class="copiable-link" href="#Implementation-Differences-From-The-SVR4_002e2-Shell"> &para;</a></span></h3> <p>Since Bash is a completely new implementation, it does not suffer from many of the limitations of the SVR4.2 shell. For instance: </p> -<ul> -<li> Bash does not fork a subshell when redirecting into or out of -a shell control structure such as an <code>if</code> or <code>while</code> +<ul class="itemize mark-bullet"> +<li>Bash does not fork a subshell when redirecting into or out of +a shell control structure such as an <code class="code">if</code> or <code class="code">while</code> statement. -</li><li> Bash does not allow unbalanced quotes. The SVR4.2 shell will silently -insert a needed closing quote at <code>EOF</code> under certain circumstances. +</li><li>Bash does not allow unbalanced quotes. The SVR4.2 shell will silently +insert a needed closing quote at <code class="code">EOF</code> under certain circumstances. This can be the cause of some hard-to-find errors. -</li><li> The SVR4.2 shell uses a baroque memory management scheme based on -trapping <code>SIGSEGV</code>. If the shell is started from a process with -<code>SIGSEGV</code> blocked (e.g., by using the <code>system()</code> C library +</li><li>The SVR4.2 shell uses a baroque memory management scheme based on +trapping <code class="code">SIGSEGV</code>. If the shell is started from a process with +<code class="code">SIGSEGV</code> blocked (e.g., by using the <code class="code">system()</code> C library function call), it misbehaves badly. -</li><li> In a questionable attempt at security, the SVR4.2 shell, -when invoked without the <samp>-p</samp> option, will alter its real -and effective <small>UID</small> and <small>GID</small> if they are less than some +</li><li>In a questionable attempt at security, the SVR4.2 shell, +when invoked without the <samp class="option">-p</samp> option, will alter its real +and effective <small class="sc">UID</small> and <small class="sc">GID</small> if they are less than some magic threshold value, commonly 100. This can lead to unexpected results. -</li><li> The SVR4.2 shell does not allow users to trap <code>SIGSEGV</code>, -<code>SIGALRM</code>, or <code>SIGCHLD</code>. +</li><li>The SVR4.2 shell does not allow users to trap <code class="code">SIGSEGV</code>, +<code class="code">SIGALRM</code>, or <code class="code">SIGCHLD</code>. -</li><li> The SVR4.2 shell does not allow the <code>IFS</code>, <code>MAILCHECK</code>, -<code>PATH</code>, <code>PS1</code>, or <code>PS2</code> variables to be unset. +</li><li>The SVR4.2 shell does not allow the <code class="env">IFS</code>, <code class="env">MAILCHECK</code>, +<code class="env">PATH</code>, <code class="env">PS1</code>, or <code class="env">PS2</code> variables to be unset. -</li><li> The SVR4.2 shell treats &lsquo;<samp>^</samp>&rsquo; as the undocumented equivalent of -&lsquo;<samp>|</samp>&rsquo;. +</li><li>The SVR4.2 shell treats &lsquo;<samp class="samp">^</samp>&rsquo; as the undocumented equivalent of +&lsquo;<samp class="samp">|</samp>&rsquo;. -</li><li> Bash allows multiple option arguments when it is invoked (<code>-x -v</code>); -the SVR4.2 shell allows only one option argument (<code>-xv</code>). In +</li><li>Bash allows multiple option arguments when it is invoked (<code class="code">-x -v</code>); +the SVR4.2 shell allows only one option argument (<code class="code">-xv</code>). In fact, some versions of the shell dump core if the second argument begins -with a &lsquo;<samp>-</samp>&rsquo;. +with a &lsquo;<samp class="samp">-</samp>&rsquo;. -</li><li> The SVR4.2 shell exits a script if any builtin fails; Bash exits -a script only if one of the <small>POSIX</small> special builtins fails, and -only for certain failures, as enumerated in the <small>POSIX</small> standard. +</li><li>The SVR4.2 shell exits a script if any builtin fails; Bash exits +a script only if one of the <small class="sc">POSIX</small> special builtins fails, and +only for certain failures, as enumerated in the <small class="sc">POSIX</small> standard. -</li><li> The SVR4.2 shell behaves differently when invoked as <code>jsh</code> +</li><li>The SVR4.2 shell behaves differently when invoked as <code class="code">jsh</code> (it turns on job control). + +</li><li>If the <code class="code">lastpipe</code> option is enabled, and job control is not active, +Bash runs the last element of a pipeline in the current shell execution +environment. + </li></ul> <hr> </div> </div> -<div class="appendix" id="GNU-Free-Documentation-License"> -<div class="header"> +<div class="appendix-level-extent" id="GNU-Free-Documentation-License"> +<div class="nav-panel"> <p> Next: <a href="#Indexes" accesskey="n" rel="next">Indexes</a>, Previous: <a href="#Major-Differences-From-The-Bourne-Shell" accesskey="p" rel="prev">Major Differences From The Bourne Shell</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="GNU-Free-Documentation-License-1"></span><h2 class="appendix">Appendix C GNU Free Documentation License</h2> +<h2 class="appendix" id="GNU-Free-Documentation-License-1"><span>Appendix C GNU Free Documentation License<a class="copiable-link" href="#GNU-Free-Documentation-License-1"> &para;</a></span></h2> -<div align="center">Version 1.3, 3 November 2008 +<div class="center">Version 1.3, 3 November 2008 </div> <div class="display"> -<pre class="display">Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. -<a href="http://fsf.org/">http://fsf.org/</a> +<pre class="display-preformatted">Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +<a class="uref" href="http://fsf.org/">http://fsf.org/</a> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. </pre></div> -<ol start="0"> +<ol class="enumerate" start="0"> <li> PREAMBLE <p>The purpose of this License is to make a manual, textbook, or other -functional and useful document <em>free</em> in the sense of freedom: to +functional and useful document <em class="dfn">free</em> in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way @@ -14426,16 +14975,16 @@ An image format is not Transparent if used for any substantial amount of text. A copy that is not &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;. </p> <p>Examples of suitable formats for Transparent copies include plain -<small>ASCII</small> without markup, Texinfo input format, LaTeX input -format, <acronym>SGML</acronym> or <acronym>XML</acronym> using a publicly available -<acronym>DTD</acronym>, and standard-conforming simple <acronym>HTML</acronym>, -PostScript or <acronym>PDF</acronym> designed for human modification. Examples -of transparent image formats include <acronym>PNG</acronym>, <acronym>XCF</acronym> and -<acronym>JPG</acronym>. Opaque formats include proprietary formats that can be -read and edited only by proprietary word processors, <acronym>SGML</acronym> or -<acronym>XML</acronym> for which the <acronym>DTD</acronym> and/or processing tools are -not generally available, and the machine-generated <acronym>HTML</acronym>, -PostScript or <acronym>PDF</acronym> produced by some word processors for +<small class="sc">ASCII</small> without markup, Texinfo input format, LaTeX input +format, <abbr class="acronym">SGML</abbr> or <abbr class="acronym">XML</abbr> using a publicly available +<abbr class="acronym">DTD</abbr>, and standard-conforming simple <abbr class="acronym">HTML</abbr>, +PostScript or <abbr class="acronym">PDF</abbr> designed for human modification. Examples +of transparent image formats include <abbr class="acronym">PNG</abbr>, <abbr class="acronym">XCF</abbr> and +<abbr class="acronym">JPG</abbr>. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, <abbr class="acronym">SGML</abbr> or +<abbr class="acronym">XML</abbr> for which the <abbr class="acronym">DTD</abbr> and/or processing tools are +not generally available, and the machine-generated <abbr class="acronym">HTML</abbr>, +PostScript or <abbr class="acronym">PDF</abbr> produced by some word processors for output purposes only. </p> <p>The &ldquo;Title Page&rdquo; means, for a printed book, the title page itself, @@ -14524,7 +15073,7 @@ Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: </p> -<ol type="A" start="1"> +<ol class="enumerate" type="A" start="1"> <li> Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section @@ -14724,7 +15273,7 @@ not give you any rights to use it. of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See -<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>. +<a class="uref" href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>. </p> <p>Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this @@ -14770,30 +15319,30 @@ provided the MMC is eligible for relicensing. </p> </li></ol> -<span id="ADDENDUM_003a-How-to-use-this-License-for-your-documents"></span><h3 class="heading">ADDENDUM: How to use this License for your documents</h3> +<h3 class="heading" id="ADDENDUM_003a-How-to-use-this-License-for-your-documents"><span>ADDENDUM: How to use this License for your documents<a class="copiable-link" href="#ADDENDUM_003a-How-to-use-this-License-for-your-documents"> &para;</a></span></h3> <p>To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: </p> -<div class="example"> -<pre class="example"> Copyright (C) <var>year</var> <var>your name</var>. +<div class="example smallexample"> +<div class="group"><pre class="example-preformatted"> Copyright (C) <var class="var">year</var> <var class="var">your name</var>. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. -</pre></div> +</pre></div></div> <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the &ldquo;with&hellip;Texts.&rdquo; line with this: </p> -<div class="example"> -<pre class="example"> with the Invariant Sections being <var>list their titles</var>, with - the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts - being <var>list</var>. -</pre></div> +<div class="example smallexample"> +<div class="group"><pre class="example-preformatted"> with the Invariant Sections being <var class="var">list their titles</var>, with + the Front-Cover Texts being <var class="var">list</var>, and with the Back-Cover Texts + being <var class="var">list</var>. +</pre></div></div> <p>If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the @@ -14808,15 +15357,15 @@ to permit their use in free software. <hr> </div> -<div class="appendix" id="Indexes"> -<div class="header"> +<div class="appendix-level-extent" id="Indexes"> +<div class="nav-panel"> <p> Previous: <a href="#GNU-Free-Documentation-License" accesskey="p" rel="prev">GNU Free Documentation License</a>, Up: <a href="#Top" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Indexes-1"></span><h2 class="appendix">Appendix D Indexes</h2> +<h2 class="appendix" id="Indexes-1"><span>Appendix D Indexes<a class="copiable-link" href="#Indexes-1"> &para;</a></span></h2> -<ul class="section-toc"> +<ul class="mini-toc"> <li><a href="#Builtin-Index" accesskey="1">Index of Shell Builtin Commands</a></li> <li><a href="#Reserved-Word-Index" accesskey="2">Index of Shell Reserved Words</a></li> <li><a href="#Variable-Index" accesskey="3">Parameter and Variable Index</a></li> @@ -14824,1204 +15373,1233 @@ Previous: <a href="#GNU-Free-Documentation-License" accesskey="p" rel="prev">GNU <li><a href="#Concept-Index" accesskey="5">Concept Index</a></li> </ul> <hr> -<div class="appendixsec" id="Builtin-Index"> -<div class="header"> +<div class="appendixsec-level-extent" id="Builtin-Index"> +<div class="nav-panel"> <p> Next: <a href="#Reserved-Word-Index" accesskey="n" rel="next">Index of Shell Reserved Words</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Index-of-Shell-Builtin-Commands"></span><h3 class="appendixsec">D.1 Index of Shell Builtin Commands</h3> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Builtin-Index_bt_symbol-1"><b>.</b></a> +<h3 class="appendixsec" id="Index-of-Shell-Builtin-Commands"><span>D.1 Index of Shell Builtin Commands<a class="copiable-link" href="#Index-of-Shell-Builtin-Commands"> &para;</a></span></h3> +<div class="printindex bt-printindex"> +<table class="bt-letters-header-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-1"><b>:</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_symbol-2"><b>:</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-2"><b>.</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_symbol-3"><b>[</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-3"><b>[</b></a> &nbsp; <br> -<a class="summary-letter" href="#Builtin-Index_bt_letter-A"><b>A</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-A"><b>A</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-B"><b>B</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-B"><b>B</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-G"><b>G</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-G"><b>G</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-H"><b>H</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-H"><b>H</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-J"><b>J</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-J"><b>J</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-K"><b>K</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-K"><b>K</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-L"><b>L</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-L"><b>L</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-M"><b>M</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-M"><b>M</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-P"><b>P</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-P"><b>P</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-R"><b>R</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-R"><b>R</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-U"><b>U</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-W"><b>W</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-W"><b>W</b></a> &nbsp; </td></tr></table> -<table class="index-bt" border="0"> -<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_symbol-1">.</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_002e"><code>.</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_symbol-2">:</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_003a"><code>:</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_symbol-3">[</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_005b"><code>[</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-A">A</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-alias"><code>alias</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-B">B</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-bg"><code>bg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-bind"><code>bind</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-break"><code>break</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-builtin"><code>builtin</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-C">C</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-caller"><code>caller</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-cd"><code>cd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-command"><code>command</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-compgen"><code>compgen</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-complete"><code>complete</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-compopt"><code>compopt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-continue"><code>continue</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-D">D</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-declare"><code>declare</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-dirs"><code>dirs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-disown"><code>disown</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-E">E</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-echo"><code>echo</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-enable"><code>enable</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-eval"><code>eval</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-exec"><code>exec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-exit"><code>exit</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-export"><code>export</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-F">F</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-fc"><code>fc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-fg"><code>fg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-G">G</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-getopts"><code>getopts</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-H">H</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-hash"><code>hash</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-help"><code>help</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history"><code>history</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-J">J</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-jobs"><code>jobs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-K">K</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-kill"><code>kill</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-L">L</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-let"><code>let</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-local"><code>local</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-logout"><code>logout</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-M">M</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-mapfile"><code>mapfile</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-P">P</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-popd"><code>popd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-printf"><code>printf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-pushd"><code>pushd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-pwd"><code>pwd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-R">R</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-read"><code>read</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-readarray"><code>readarray</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-readonly"><code>readonly</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-return"><code>return</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-S">S</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-set"><code>set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#The-Set-Builtin">The Set Builtin</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shift"><code>shift</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shopt"><code>shopt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#The-Shopt-Builtin">The Shopt Builtin</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-source"><code>source</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-suspend"><code>suspend</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-T">T</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-test"><code>test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-times"><code>times</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-trap"><code>trap</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-type"><code>type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-typeset"><code>typeset</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-U">U</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-ulimit"><code>ulimit</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-umask"><code>umask</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-unalias"><code>unalias</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-unset"><code>unset</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Builtin-Index_bt_letter-W">W</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-wait"><code>wait</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> +<table class="bt-entries-printindex" border="0"> +<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_symbol-1">:</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_003a"><code>:</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_symbol-2">.</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_002e"><code>.</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_symbol-3">[</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_005b"><code>[</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-A">A</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-alias"><code>alias</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-B">B</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-bg"><code>bg</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-bind"><code>bind</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-break"><code>break</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-builtin"><code>builtin</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-C">C</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-caller"><code>caller</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-cd"><code>cd</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-command"><code>command</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-compgen"><code>compgen</code></a></td><td class="printindex-index-section"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-complete"><code>complete</code></a></td><td class="printindex-index-section"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-compopt"><code>compopt</code></a></td><td class="printindex-index-section"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-continue"><code>continue</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-D">D</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-declare"><code>declare</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-dirs"><code>dirs</code></a></td><td class="printindex-index-section"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-disown"><code>disown</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-E">E</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-echo"><code>echo</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-enable"><code>enable</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-eval"><code>eval</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-exec"><code>exec</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-exit"><code>exit</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-export"><code>export</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-F">F</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-false"><code>false</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-fc"><code>fc</code></a></td><td class="printindex-index-section"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-fg"><code>fg</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-G">G</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-getopts"><code>getopts</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-H">H</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-hash"><code>hash</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-help"><code>help</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history"><code>history</code></a></td><td class="printindex-index-section"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-J">J</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-jobs"><code>jobs</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-K">K</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-kill"><code>kill</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-L">L</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-let"><code>let</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-local"><code>local</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-logout"><code>logout</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-M">M</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-mapfile"><code>mapfile</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-P">P</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-popd"><code>popd</code></a></td><td class="printindex-index-section"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-printf"><code>printf</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-pushd"><code>pushd</code></a></td><td class="printindex-index-section"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-pwd"><code>pwd</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-R">R</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-read"><code>read</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-readarray"><code>readarray</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-readonly"><code>readonly</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-return"><code>return</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-S">S</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-set"><code>set</code></a></td><td class="printindex-index-section"><a href="#The-Set-Builtin">The Set Builtin</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shift"><code>shift</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shopt"><code>shopt</code></a></td><td class="printindex-index-section"><a href="#The-Shopt-Builtin">The Shopt Builtin</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-source"><code>source</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-suspend"><code>suspend</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-T">T</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-test"><code>test</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-times"><code>times</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-trap"><code>trap</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-true"><code>true</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-type"><code>type</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-typeset"><code>typeset</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-U">U</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-ulimit"><code>ulimit</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-umask"><code>umask</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-unalias"><code>unalias</code></a></td><td class="printindex-index-section"><a href="#Bash-Builtins">Bash Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-unset"><code>unset</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Builtin-Index_bt_letter-W">W</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-wait"><code>wait</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr> +<tr><td colspan="3"><hr></td></tr> </table> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Builtin-Index_bt_symbol-1"><b>.</b></a> +<table class="bt-letters-footer-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-1"><b>:</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_symbol-2"><b>:</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-2"><b>.</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_symbol-3"><b>[</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_symbol-3"><b>[</b></a> &nbsp; <br> -<a class="summary-letter" href="#Builtin-Index_bt_letter-A"><b>A</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-A"><b>A</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-B"><b>B</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-B"><b>B</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-G"><b>G</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-G"><b>G</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-H"><b>H</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-H"><b>H</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-J"><b>J</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-J"><b>J</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-K"><b>K</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-K"><b>K</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-L"><b>L</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-L"><b>L</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-M"><b>M</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-M"><b>M</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-P"><b>P</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-P"><b>P</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-R"><b>R</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-R"><b>R</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-U"><b>U</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Builtin-Index_bt_letter-W"><b>W</b></a> +<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-W"><b>W</b></a> &nbsp; </td></tr></table> +</div> <hr> </div> -<div class="appendixsec" id="Reserved-Word-Index"> -<div class="header"> +<div class="appendixsec-level-extent" id="Reserved-Word-Index"> +<div class="nav-panel"> <p> Next: <a href="#Variable-Index" accesskey="n" rel="next">Parameter and Variable Index</a>, Previous: <a href="#Builtin-Index" accesskey="p" rel="prev">Index of Shell Builtin Commands</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Index-of-Shell-Reserved-Words"></span><h3 class="appendixsec">D.2 Index of Shell Reserved Words</h3> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-1"><b>!</b></a> +<h3 class="appendixsec" id="Index-of-Shell-Reserved-Words"><span>D.2 Index of Shell Reserved Words<a class="copiable-link" href="#Index-of-Shell-Reserved-Words"> &para;</a></span></h3> +<div class="printindex rw-printindex"> +<table class="rw-letters-header-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-1"><b>!</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-2"><b>[</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-2"><b>[</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-3"><b>]</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-3"><b>]</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-4"><b>{</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-4"><b>{</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-5"><b>}</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-5"><b>}</b></a> &nbsp; <br> -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-I"><b>I</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-I"><b>I</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-U"><b>U</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-W"><b>W</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-W"><b>W</b></a> &nbsp; </td></tr></table> -<table class="index-rw" border="0"> -<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_symbol-1">!</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0021"><code>!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_symbol-2">[</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_005b_005b"><code>[[</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_symbol-3">]</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_005d_005d"><code>]]</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_symbol-4">{</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_007b"><code>{</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Grouping">Command Grouping</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_symbol-5">}</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_007d"><code>}</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Grouping">Command Grouping</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_letter-C">C</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-case"><code>case</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_letter-D">D</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-do"><code>do</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-done"><code>done</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_letter-E">E</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-elif"><code>elif</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-else"><code>else</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-esac"><code>esac</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_letter-F">F</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-fi"><code>fi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-for"><code>for</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-function"><code>function</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Functions">Shell Functions</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_letter-I">I</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-if"><code>if</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-in"><code>in</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_letter-S">S</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-select"><code>select</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_letter-T">T</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-then"><code>then</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-time"><code>time</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_letter-U">U</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-until"><code>until</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Reserved-Word-Index_rw_letter-W">W</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-while"><code>while</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> +<table class="rw-entries-printindex" border="0"> +<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_symbol-1">!</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0021"><code>!</code></a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_symbol-2">[</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_005b_005b"><code>[[</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_symbol-3">]</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_005d_005d"><code>]]</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_symbol-4">{</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_007b"><code>{</code></a></td><td class="printindex-index-section"><a href="#Command-Grouping">Command Grouping</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_symbol-5">}</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_007d"><code>}</code></a></td><td class="printindex-index-section"><a href="#Command-Grouping">Command Grouping</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_letter-C">C</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-case"><code>case</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_letter-D">D</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-do"><code>do</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-done"><code>done</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_letter-E">E</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-elif"><code>elif</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-else"><code>else</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-esac"><code>esac</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_letter-F">F</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-fi"><code>fi</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-for"><code>for</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-function"><code>function</code></a></td><td class="printindex-index-section"><a href="#Shell-Functions">Shell Functions</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_letter-I">I</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-if"><code>if</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-in"><code>in</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_letter-S">S</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-select"><code>select</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_letter-T">T</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-then"><code>then</code></a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-time"><code>time</code></a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_letter-U">U</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-until"><code>until</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Reserved-Word-Index_rw_letter-W">W</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-while"><code>while</code></a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> +<tr><td colspan="3"><hr></td></tr> </table> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-1"><b>!</b></a> +<table class="rw-letters-footer-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-1"><b>!</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-2"><b>[</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-2"><b>[</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-3"><b>]</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-3"><b>]</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-4"><b>{</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-4"><b>{</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-5"><b>}</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_symbol-5"><b>}</b></a> &nbsp; <br> -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-I"><b>I</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-I"><b>I</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-U"><b>U</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-W"><b>W</b></a> +<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-W"><b>W</b></a> &nbsp; </td></tr></table> +</div> <hr> </div> -<div class="appendixsec" id="Variable-Index"> -<div class="header"> +<div class="appendixsec-level-extent" id="Variable-Index"> +<div class="nav-panel"> <p> Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Previous: <a href="#Reserved-Word-Index" accesskey="p" rel="prev">Index of Shell Reserved Words</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Parameter-and-Variable-Index"></span><h3 class="appendixsec">D.3 Parameter and Variable Index</h3> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Variable-Index_vr_symbol-1"><b>!</b></a> +<h3 class="appendixsec" id="Parameter-and-Variable-Index"><span>D.3 Parameter and Variable Index<a class="copiable-link" href="#Parameter-and-Variable-Index"> &para;</a></span></h3> +<div class="printindex vr-printindex"> +<table class="vr-letters-header-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-1"><b>_</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-2"><b>#</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-2"><b>-</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-3"><b>$</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-3"><b>!</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-4"><b>*</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-4"><b>?</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-5"><b>-</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-5"><b>@</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-6"><b>0</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-6"><b>*</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-7"><b>?</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-7"><b>#</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-8"><b>@</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-8"><b>$</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-9"><b>_</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-9"><b>0</b></a> &nbsp; <br> -<a class="summary-letter" href="#Variable-Index_vr_letter-A"><b>A</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-A"><b>A</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-B"><b>B</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-B"><b>B</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-G"><b>G</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-G"><b>G</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-H"><b>H</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-H"><b>H</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-I"><b>I</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-I"><b>I</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-K"><b>K</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-K"><b>K</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-L"><b>L</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-L"><b>L</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-M"><b>M</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-M"><b>M</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-O"><b>O</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-O"><b>O</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-P"><b>P</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-P"><b>P</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-R"><b>R</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-R"><b>R</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-U"><b>U</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-V"><b>V</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-V"><b>V</b></a> &nbsp; </td></tr></table> -<table class="index-vr" border="0"> -<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_symbol-1">!</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0021-1"><code>!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_symbol-2">#</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0023"><code>#</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_symbol-3">$</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0024"><code>$</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0024_0021"><code>$!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0024_0023"><code>$#</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0024_0024"><code>$$</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0024_002a"><code>$*</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0024_002d"><code>$-</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_00240"><code>$0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0024_003f"><code>$?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0024_0040"><code>$@</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0024_005f"><code>$_</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_symbol-4">*</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_002a"><code>*</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_symbol-5">-</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_002d"><code>-</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_symbol-6">0</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-0"><code>0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_symbol-7">?</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_003f"><code>?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_symbol-8">@</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_0040"><code>@</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_symbol-9">_</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_005f"><code>_</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-A">A</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-active_002dregion_002dend_002dcolor"><code>active-region-end-color</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-active_002dregion_002dstart_002dcolor"><code>active-region-start-color</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-auto_005fresume"><code>auto_resume</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Variables">Job Control Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-B">B</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH"><code>BASH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASHOPTS"><code>BASHOPTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASHPID"><code>BASHPID</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fALIASES"><code>BASH_ALIASES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fARGC"><code>BASH_ARGC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fARGV"><code>BASH_ARGV</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fARGV0"><code>BASH_ARGV0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fCMDS"><code>BASH_CMDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fCOMMAND"><code>BASH_COMMAND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fCOMPAT"><code>BASH_COMPAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fENV"><code>BASH_ENV</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fEXECUTION_005fSTRING"><code>BASH_EXECUTION_STRING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fLINENO"><code>BASH_LINENO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fLOADABLES_005fPATH"><code>BASH_LOADABLES_PATH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fREMATCH"><code>BASH_REMATCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fSOURCE"><code>BASH_SOURCE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fSUBSHELL"><code>BASH_SUBSHELL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fVERSINFO"><code>BASH_VERSINFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fVERSION"><code>BASH_VERSION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-BASH_005fXTRACEFD"><code>BASH_XTRACEFD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-bell_002dstyle"><code>bell-style</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-bind_002dtty_002dspecial_002dchars"><code>bind-tty-special-chars</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-blink_002dmatching_002dparen"><code>blink-matching-paren</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-C">C</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-CDPATH"><code>CDPATH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-CHILD_005fMAX"><code>CHILD_MAX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-colored_002dcompletion_002dprefix"><code>colored-completion-prefix</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-colored_002dstats"><code>colored-stats</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COLUMNS"><code>COLUMNS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-comment_002dbegin"><code>comment-begin</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-completion_002ddisplay_002dwidth"><code>completion-display-width</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-completion_002dignore_002dcase"><code>completion-ignore-case</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-completion_002dmap_002dcase"><code>completion-map-case</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-completion_002dprefix_002ddisplay_002dlength"><code>completion-prefix-display-length</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-completion_002dquery_002ditems"><code>completion-query-items</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COMPREPLY"><code>COMPREPLY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COMP_005fCWORD"><code>COMP_CWORD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COMP_005fKEY"><code>COMP_KEY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COMP_005fLINE"><code>COMP_LINE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COMP_005fPOINT"><code>COMP_POINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COMP_005fTYPE"><code>COMP_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COMP_005fWORDBREAKS"><code>COMP_WORDBREAKS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COMP_005fWORDS"><code>COMP_WORDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-convert_002dmeta"><code>convert-meta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-COPROC"><code>COPROC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-D">D</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-DIRSTACK"><code>DIRSTACK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-disable_002dcompletion"><code>disable-completion</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-E">E</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-echo_002dcontrol_002dcharacters"><code>echo-control-characters</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-editing_002dmode"><code>editing-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-EMACS"><code>EMACS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-emacs_002dmode_002dstring"><code>emacs-mode-string</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-enable_002dactive_002dregion"><code>enable-active-region</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-enable_002dbracketed_002dpaste"><code>enable-bracketed-paste</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-enable_002dkeypad"><code>enable-keypad</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-ENV"><code>ENV</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-EPOCHREALTIME"><code>EPOCHREALTIME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-EPOCHSECONDS"><code>EPOCHSECONDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-EUID"><code>EUID</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-EXECIGNORE"><code>EXECIGNORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expand_002dtilde"><code>expand-tilde</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-F">F</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-FCEDIT"><code>FCEDIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-FIGNORE"><code>FIGNORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-FUNCNAME"><code>FUNCNAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-FUNCNEST"><code>FUNCNEST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-G">G</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-GLOBIGNORE"><code>GLOBIGNORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-GROUPS"><code>GROUPS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-H">H</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-histchars"><code>histchars</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HISTCMD"><code>HISTCMD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HISTCONTROL"><code>HISTCONTROL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HISTFILE"><code>HISTFILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HISTFILESIZE"><code>HISTFILESIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HISTIGNORE"><code>HISTIGNORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history_002dpreserve_002dpoint"><code>history-preserve-point</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history_002dsize"><code>history-size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HISTSIZE"><code>HISTSIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HISTTIMEFORMAT"><code>HISTTIMEFORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HOME"><code>HOME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-horizontal_002dscroll_002dmode"><code>horizontal-scroll-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HOSTFILE"><code>HOSTFILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HOSTNAME"><code>HOSTNAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-HOSTTYPE"><code>HOSTTYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-I">I</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-IFS"><code>IFS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-IGNOREEOF"><code>IGNOREEOF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-input_002dmeta"><code>input-meta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-INPUTRC"><code>INPUTRC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-INSIDE_005fEMACS"><code>INSIDE_EMACS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-isearch_002dterminators"><code>isearch-terminators</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-K">K</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-keymap"><code>keymap</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-L">L</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-LANG"><code>LANG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LANG-1"><code>LANG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LC_005fALL"><code>LC_ALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LC_005fCOLLATE"><code>LC_COLLATE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LC_005fCTYPE"><code>LC_CTYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LC_005fMESSAGES"><code>LC_MESSAGES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LC_005fMESSAGES-1"><code>LC_MESSAGES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LC_005fNUMERIC"><code>LC_NUMERIC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LC_005fTIME"><code>LC_TIME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LINENO"><code>LINENO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-LINES"><code>LINES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-M">M</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-MACHTYPE"><code>MACHTYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-MAIL"><code>MAIL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-MAILCHECK"><code>MAILCHECK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-MAILPATH"><code>MAILPATH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-MAPFILE"><code>MAPFILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-mark_002dmodified_002dlines"><code>mark-modified-lines</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-mark_002dsymlinked_002ddirectories"><code>mark-symlinked-directories</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-match_002dhidden_002dfiles"><code>match-hidden-files</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-menu_002dcomplete_002ddisplay_002dprefix"><code>menu-complete-display-prefix</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-meta_002dflag"><code>meta-flag</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-O">O</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-OLDPWD"><code>OLDPWD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-OPTARG"><code>OPTARG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-OPTERR"><code>OPTERR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-OPTIND"><code>OPTIND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-OSTYPE"><code>OSTYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-output_002dmeta"><code>output-meta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-P">P</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-page_002dcompletions"><code>page-completions</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PATH"><code>PATH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PIPESTATUS"><code>PIPESTATUS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-POSIXLY_005fCORRECT"><code>POSIXLY_CORRECT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PPID"><code>PPID</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PROMPT_005fCOMMAND"><code>PROMPT_COMMAND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PROMPT_005fDIRTRIM"><code>PROMPT_DIRTRIM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PS0"><code>PS0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PS1"><code>PS1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PS2"><code>PS2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PS3"><code>PS3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PS4"><code>PS4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-PWD"><code>PWD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-R">R</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-RANDOM"><code>RANDOM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-READLINE_005fARGUMENT"><code>READLINE_ARGUMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-READLINE_005fLINE"><code>READLINE_LINE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-READLINE_005fMARK"><code>READLINE_MARK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-READLINE_005fPOINT"><code>READLINE_POINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-REPLY"><code>REPLY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-revert_002dall_002dat_002dnewline"><code>revert-all-at-newline</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-S">S</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-SECONDS"><code>SECONDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-SHELL"><code>SHELL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-SHELLOPTS"><code>SHELLOPTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-SHLVL"><code>SHLVL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-show_002dall_002dif_002dambiguous"><code>show-all-if-ambiguous</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-show_002dall_002dif_002dunmodified"><code>show-all-if-unmodified</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-show_002dmode_002din_002dprompt"><code>show-mode-in-prompt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-skip_002dcompleted_002dtext"><code>skip-completed-text</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-SRANDOM"><code>SRANDOM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-T">T</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-TEXTDOMAIN"><code>TEXTDOMAIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-TEXTDOMAINDIR"><code>TEXTDOMAINDIR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-TIMEFORMAT"><code>TIMEFORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-TMOUT"><code>TMOUT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-TMPDIR"><code>TMPDIR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-U">U</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-UID"><code>UID</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Variable-Index_vr_letter-V">V</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-vi_002dcmd_002dmode_002dstring"><code>vi-cmd-mode-string</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-vi_002dins_002dmode_002dstring"><code>vi-ins-mode-string</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-visible_002dstats"><code>visible-stats</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> +<table class="vr-entries-printindex" border="0"> +<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_symbol-1">_</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_005f"><code>_</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_symbol-2">-</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_002d"><code>-</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_symbol-3">!</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0021-1"><code>!</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_symbol-4">?</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_003f"><code>?</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_symbol-5">@</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0040"><code>@</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_symbol-6">*</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_002a"><code>*</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_symbol-7">#</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0023"><code>#</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_symbol-8">$</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024"><code>$</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_005f"><code>$_</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_002d"><code>$-</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_0021"><code>$!</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_003f"><code>$?</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_0040"><code>$@</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_002a"><code>$*</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_0023"><code>$#</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_0024_0024"><code>$$</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-_00240"><code>$0</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_symbol-9">0</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-0"><code>0</code></a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-A">A</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-active_002dregion_002dend_002dcolor"><code>active-region-end-color</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-active_002dregion_002dstart_002dcolor"><code>active-region-start-color</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-auto_005fresume"><code>auto_resume</code></a></td><td class="printindex-index-section"><a href="#Job-Control-Variables">Job Control Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-B">B</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH"><code>BASH</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fALIASES"><code>BASH_ALIASES</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fARGC"><code>BASH_ARGC</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fARGV"><code>BASH_ARGV</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fARGV0"><code>BASH_ARGV0</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fCMDS"><code>BASH_CMDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fCOMMAND"><code>BASH_COMMAND</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fCOMPAT"><code>BASH_COMPAT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fENV"><code>BASH_ENV</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fEXECUTION_005fSTRING"><code>BASH_EXECUTION_STRING</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fLINENO"><code>BASH_LINENO</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fLOADABLES_005fPATH"><code>BASH_LOADABLES_PATH</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fMONOSECONDS"><code>BASH_MONOSECONDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fREMATCH"><code>BASH_REMATCH</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fSOURCE"><code>BASH_SOURCE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fSUBSHELL"><code>BASH_SUBSHELL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fTRAPSIG"><code>BASH_TRAPSIG</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fVERSINFO"><code>BASH_VERSINFO</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fVERSION"><code>BASH_VERSION</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASH_005fXTRACEFD"><code>BASH_XTRACEFD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASHOPTS"><code>BASHOPTS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-BASHPID"><code>BASHPID</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-bell_002dstyle"><code>bell-style</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-bind_002dtty_002dspecial_002dchars"><code>bind-tty-special-chars</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-blink_002dmatching_002dparen"><code>blink-matching-paren</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-C">C</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-CDPATH"><code>CDPATH</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-CHILD_005fMAX"><code>CHILD_MAX</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-colored_002dcompletion_002dprefix"><code>colored-completion-prefix</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-colored_002dstats"><code>colored-stats</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COLUMNS"><code>COLUMNS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-comment_002dbegin"><code>comment-begin</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fCWORD"><code>COMP_CWORD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fKEY"><code>COMP_KEY</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fLINE"><code>COMP_LINE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fPOINT"><code>COMP_POINT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fTYPE"><code>COMP_TYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fWORDBREAKS"><code>COMP_WORDBREAKS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COMP_005fWORDS"><code>COMP_WORDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002ddisplay_002dwidth"><code>completion-display-width</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002dignore_002dcase"><code>completion-ignore-case</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002dmap_002dcase"><code>completion-map-case</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002dprefix_002ddisplay_002dlength"><code>completion-prefix-display-length</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-completion_002dquery_002ditems"><code>completion-query-items</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COMPREPLY"><code>COMPREPLY</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-convert_002dmeta"><code>convert-meta</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-COPROC"><code>COPROC</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-D">D</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-DIRSTACK"><code>DIRSTACK</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-disable_002dcompletion"><code>disable-completion</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-E">E</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-echo_002dcontrol_002dcharacters"><code>echo-control-characters</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-editing_002dmode"><code>editing-mode</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-EMACS"><code>EMACS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-emacs_002dmode_002dstring"><code>emacs-mode-string</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-enable_002dactive_002dregion"><code>enable-active-region</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-enable_002dbracketed_002dpaste"><code>enable-bracketed-paste</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-enable_002dkeypad"><code>enable-keypad</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-ENV"><code>ENV</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-EPOCHREALTIME"><code>EPOCHREALTIME</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-EPOCHSECONDS"><code>EPOCHSECONDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-EUID"><code>EUID</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-EXECIGNORE"><code>EXECIGNORE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expand_002dtilde"><code>expand-tilde</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-F">F</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-FCEDIT"><code>FCEDIT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-FIGNORE"><code>FIGNORE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-FUNCNAME"><code>FUNCNAME</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-FUNCNEST"><code>FUNCNEST</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-G">G</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-GLOBIGNORE"><code>GLOBIGNORE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-GLOBSORT"><code>GLOBSORT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-GROUPS"><code>GROUPS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-H">H</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-histchars"><code>histchars</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTCMD"><code>HISTCMD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTCONTROL"><code>HISTCONTROL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTFILE"><code>HISTFILE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTFILESIZE"><code>HISTFILESIZE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTIGNORE"><code>HISTIGNORE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dpreserve_002dpoint"><code>history-preserve-point</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsize"><code>history-size</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTSIZE"><code>HISTSIZE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HISTTIMEFORMAT"><code>HISTTIMEFORMAT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HOME"><code>HOME</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-horizontal_002dscroll_002dmode"><code>horizontal-scroll-mode</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HOSTFILE"><code>HOSTFILE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HOSTNAME"><code>HOSTNAME</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-HOSTTYPE"><code>HOSTTYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-I">I</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-IFS"><code>IFS</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-IGNOREEOF"><code>IGNOREEOF</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-input_002dmeta"><code>input-meta</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-INPUTRC"><code>INPUTRC</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-INSIDE_005fEMACS"><code>INSIDE_EMACS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-isearch_002dterminators"><code>isearch-terminators</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-K">K</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-keymap"><code>keymap</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-L">L</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LANG"><code>LANG</code></a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LANG-1"><code>LANG</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fALL"><code>LC_ALL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fCOLLATE"><code>LC_COLLATE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fCTYPE"><code>LC_CTYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fMESSAGES"><code>LC_MESSAGES</code></a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fMESSAGES-1"><code>LC_MESSAGES</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fNUMERIC"><code>LC_NUMERIC</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LC_005fTIME"><code>LC_TIME</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LINENO"><code>LINENO</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-LINES"><code>LINES</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-M">M</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-MACHTYPE"><code>MACHTYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-MAIL"><code>MAIL</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-MAILCHECK"><code>MAILCHECK</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-MAILPATH"><code>MAILPATH</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-MAPFILE"><code>MAPFILE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-mark_002dmodified_002dlines"><code>mark-modified-lines</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-mark_002dsymlinked_002ddirectories"><code>mark-symlinked-directories</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-match_002dhidden_002dfiles"><code>match-hidden-files</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-menu_002dcomplete_002ddisplay_002dprefix"><code>menu-complete-display-prefix</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-meta_002dflag"><code>meta-flag</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-O">O</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-OLDPWD"><code>OLDPWD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-OPTARG"><code>OPTARG</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-OPTERR"><code>OPTERR</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-OPTIND"><code>OPTIND</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-OSTYPE"><code>OSTYPE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-output_002dmeta"><code>output-meta</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-P">P</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-page_002dcompletions"><code>page-completions</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PATH"><code>PATH</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PIPESTATUS"><code>PIPESTATUS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-POSIXLY_005fCORRECT"><code>POSIXLY_CORRECT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PPID"><code>PPID</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PROMPT_005fCOMMAND"><code>PROMPT_COMMAND</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PROMPT_005fDIRTRIM"><code>PROMPT_DIRTRIM</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PS0"><code>PS0</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PS1"><code>PS1</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PS2"><code>PS2</code></a></td><td class="printindex-index-section"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PS3"><code>PS3</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PS4"><code>PS4</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-PWD"><code>PWD</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-R">R</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-RANDOM"><code>RANDOM</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-READLINE_005fARGUMENT"><code>READLINE_ARGUMENT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-READLINE_005fLINE"><code>READLINE_LINE</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-READLINE_005fMARK"><code>READLINE_MARK</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-READLINE_005fPOINT"><code>READLINE_POINT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-REPLY"><code>REPLY</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-revert_002dall_002dat_002dnewline"><code>revert-all-at-newline</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-S">S</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-search_002dignore_002dcase"><code>search-ignore-case</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-SECONDS"><code>SECONDS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-SHELL"><code>SHELL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-SHELLOPTS"><code>SHELLOPTS</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-SHLVL"><code>SHLVL</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-show_002dall_002dif_002dambiguous"><code>show-all-if-ambiguous</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-show_002dall_002dif_002dunmodified"><code>show-all-if-unmodified</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-show_002dmode_002din_002dprompt"><code>show-mode-in-prompt</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-skip_002dcompleted_002dtext"><code>skip-completed-text</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-SRANDOM"><code>SRANDOM</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-T">T</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-TEXTDOMAIN"><code>TEXTDOMAIN</code></a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-TEXTDOMAINDIR"><code>TEXTDOMAINDIR</code></a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-TIMEFORMAT"><code>TIMEFORMAT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-TMOUT"><code>TMOUT</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-TMPDIR"><code>TMPDIR</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-U">U</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-UID"><code>UID</code></a></td><td class="printindex-index-section"><a href="#Bash-Variables">Bash Variables</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Variable-Index_vr_letter-V">V</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-vi_002dcmd_002dmode_002dstring"><code>vi-cmd-mode-string</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-vi_002dins_002dmode_002dstring"><code>vi-ins-mode-string</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-visible_002dstats"><code>visible-stats</code></a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> </table> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Variable-Index_vr_symbol-1"><b>!</b></a> +<table class="vr-letters-footer-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-1"><b>_</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-2"><b>#</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-2"><b>-</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-3"><b>$</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-3"><b>!</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-4"><b>*</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-4"><b>?</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-5"><b>-</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-5"><b>@</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-6"><b>0</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-6"><b>*</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-7"><b>?</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-7"><b>#</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-8"><b>@</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-8"><b>$</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_symbol-9"><b>_</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_symbol-9"><b>0</b></a> &nbsp; <br> -<a class="summary-letter" href="#Variable-Index_vr_letter-A"><b>A</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-A"><b>A</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-B"><b>B</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-B"><b>B</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-G"><b>G</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-G"><b>G</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-H"><b>H</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-H"><b>H</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-I"><b>I</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-I"><b>I</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-K"><b>K</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-K"><b>K</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-L"><b>L</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-L"><b>L</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-M"><b>M</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-M"><b>M</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-O"><b>O</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-O"><b>O</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-P"><b>P</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-P"><b>P</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-R"><b>R</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-R"><b>R</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-U"><b>U</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Variable-Index_vr_letter-V"><b>V</b></a> +<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-V"><b>V</b></a> &nbsp; </td></tr></table> +</div> <hr> </div> -<div class="appendixsec" id="Function-Index"> -<div class="header"> +<div class="appendixsec-level-extent" id="Function-Index"> +<div class="nav-panel"> <p> Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previous: <a href="#Variable-Index" accesskey="p" rel="prev">Parameter and Variable Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Function-Index-1"></span><h3 class="appendixsec">D.4 Function Index</h3> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Function-Index_fn_letter-A"><b>A</b></a> +<h3 class="appendixsec" id="Function-Index-1"><span>D.4 Function Index<a class="copiable-link" href="#Function-Index-1"> &para;</a></span></h3> +<div class="printindex fn-printindex"> +<table class="fn-letters-header-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Function-Index_fn_letter-A"><b>A</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-B"><b>B</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-B"><b>B</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-G"><b>G</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-G"><b>G</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-H"><b>H</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-H"><b>H</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-I"><b>I</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-I"><b>I</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-K"><b>K</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-K"><b>K</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-M"><b>M</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-M"><b>M</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-N"><b>N</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-N"><b>N</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-O"><b>O</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-O"><b>O</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-P"><b>P</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-P"><b>P</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-Q"><b>Q</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-Q"><b>Q</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-R"><b>R</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-R"><b>R</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-U"><b>U</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-Y"><b>Y</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-Y"><b>Y</b></a> &nbsp; </td></tr></table> -<table class="index-fn" border="0"> -<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-A">A</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-abort-_0028C_002dg_0029"><code>abort (C-g)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-accept_002dline-_0028Newline-or-Return_0029"><code>accept-line (Newline or Return)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-alias_002dexpand_002dline-_0028_0029"><code>alias-expand-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-B">B</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-backward_002dchar-_0028C_002db_0029"><code>backward-char (C-b)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-backward_002ddelete_002dchar-_0028Rubout_0029"><code>backward-delete-char (Rubout)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"><code>backward-kill-line (C-x Rubout)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-backward_002dkill_002dword-_0028M_002dDEL_0029"><code>backward-kill-word (M-<span class="key">DEL</span>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-backward_002dword-_0028M_002db_0029"><code>backward-word (M-b)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"><code>beginning-of-history (M-&lt;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-beginning_002dof_002dline-_0028C_002da_0029"><code>beginning-of-line (C-a)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-bracketed_002dpaste_002dbegin-_0028_0029"><code>bracketed-paste-begin ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-C">C</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"><code>call-last-kbd-macro (C-x e)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-capitalize_002dword-_0028M_002dc_0029"><code>capitalize-word (M-c)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-character_002dsearch-_0028C_002d_005d_0029"><code>character-search (C-])</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"><code>character-search-backward (M-C-])</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-clear_002ddisplay-_0028M_002dC_002dl_0029"><code>clear-display (M-C-l)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-clear_002dscreen-_0028C_002dl_0029"><code>clear-screen (C-l)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-complete-_0028TAB_0029"><code>complete (<span class="key">TAB</span>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-complete_002dcommand-_0028M_002d_0021_0029"><code>complete-command (M-!)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-complete_002dfilename-_0028M_002d_002f_0029"><code>complete-filename (M-/)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-complete_002dhostname-_0028M_002d_0040_0029"><code>complete-hostname (M-@)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"><code>complete-into-braces (M-{)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-complete_002dusername-_0028M_002d_007e_0029"><code>complete-username (M-~)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-complete_002dvariable-_0028M_002d_0024_0029"><code>complete-variable (M-$)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-copy_002dbackward_002dword-_0028_0029"><code>copy-backward-word ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-copy_002dforward_002dword-_0028_0029"><code>copy-forward-word ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-copy_002dregion_002das_002dkill-_0028_0029"><code>copy-region-as-kill ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-D">D</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-dabbrev_002dexpand-_0028_0029"><code>dabbrev-expand ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-delete_002dchar-_0028C_002dd_0029"><code>delete-char (C-d)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-delete_002dchar_002dor_002dlist-_0028_0029"><code>delete-char-or-list ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-delete_002dhorizontal_002dspace-_0028_0029"><code>delete-horizontal-space ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"><code>digit-argument (<kbd>M-0</kbd>, <kbd>M-1</kbd>, &hellip; <kbd>M--</kbd>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"><code>display-shell-version (C-x C-v)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"><code>do-lowercase-version (M-A, M-B, M-<var>x</var>, &hellip;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-downcase_002dword-_0028M_002dl_0029"><code>downcase-word (M-l)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-dump_002dfunctions-_0028_0029"><code>dump-functions ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-dump_002dmacros-_0028_0029"><code>dump-macros ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-dump_002dvariables-_0028_0029"><code>dump-variables ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"><code>dynamic-complete-history (M-<span class="key">TAB</span>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-E">E</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"><code>edit-and-execute-command (C-x C-e)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"><code>end-kbd-macro (C-x ))</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-end_002dof_002dfile-_0028usually-C_002dd_0029"><code><i>end-of-file</i> (usually C-d)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-end_002dof_002dhistory-_0028M_002d_003e_0029"><code>end-of-history (M-&gt;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-end_002dof_002dline-_0028C_002de_0029"><code>end-of-line (C-e)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"><code>exchange-point-and-mark (C-x C-x)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-F">F</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-fetch_002dhistory-_0028_0029"><code>fetch-history ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-forward_002dbackward_002ddelete_002dchar-_0028_0029"><code>forward-backward-delete-char ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-forward_002dchar-_0028C_002df_0029"><code>forward-char (C-f)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-forward_002dsearch_002dhistory-_0028C_002ds_0029"><code>forward-search-history (C-s)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-forward_002dword-_0028M_002df_0029"><code>forward-word (M-f)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-G">G</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-glob_002dcomplete_002dword-_0028M_002dg_0029"><code>glob-complete-word (M-g)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"><code>glob-expand-word (C-x *)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"><code>glob-list-expansions (C-x g)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-H">H</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"><code>history-and-alias-expand-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history_002dexpand_002dline-_0028M_002d_005e_0029"><code>history-expand-line (M-^)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history_002dsearch_002dbackward-_0028_0029"><code>history-search-backward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history_002dsearch_002dforward-_0028_0029"><code>history-search-forward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"><code>history-substring-search-backward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history_002dsubstring_002dsearch_002dforward-_0028_0029"><code>history-substring-search-forward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-I">I</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-insert_002dcomment-_0028M_002d_0023_0029"><code>insert-comment (M-#)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-insert_002dcompletions-_0028M_002d_002a_0029"><code>insert-completions (M-*)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"><code>insert-last-argument (M-. or M-_)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-K">K</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-kill_002dline-_0028C_002dk_0029"><code>kill-line (C-k)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-kill_002dregion-_0028_0029"><code>kill-region ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-kill_002dwhole_002dline-_0028_0029"><code>kill-whole-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-kill_002dword-_0028M_002dd_0029"><code>kill-word (M-d)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-M">M</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-magic_002dspace-_0028_0029"><code>magic-space ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-menu_002dcomplete-_0028_0029"><code>menu-complete ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-menu_002dcomplete_002dbackward-_0028_0029"><code>menu-complete-backward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-N">N</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-next_002dhistory-_0028C_002dn_0029"><code>next-history (C-n)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-next_002dscreen_002dline-_0028_0029"><code>next-screen-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"><code>non-incremental-forward-search-history (M-n)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"><code>non-incremental-reverse-search-history (M-p)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-O">O</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-operate_002dand_002dget_002dnext-_0028C_002do_0029"><code>operate-and-get-next (C-o)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-overwrite_002dmode-_0028_0029"><code>overwrite-mode ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-P">P</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"><code>possible-command-completions (C-x !)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-possible_002dcompletions-_0028M_002d_003f_0029"><code>possible-completions (M-?)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"><code>possible-filename-completions (C-x /)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"><code>possible-hostname-completions (C-x @)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"><code>possible-username-completions (C-x ~)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"><code>possible-variable-completions (C-x $)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-prefix_002dmeta-_0028ESC_0029"><code>prefix-meta (<span class="key">ESC</span>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-previous_002dhistory-_0028C_002dp_0029"><code>previous-history (C-p)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-previous_002dscreen_002dline-_0028_0029"><code>previous-screen-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-print_002dlast_002dkbd_002dmacro-_0028_0029"><code>print-last-kbd-macro ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-Q">Q</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"><code>quoted-insert (C-q or C-v)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-R">R</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"><code>re-read-init-file (C-x C-r)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-redraw_002dcurrent_002dline-_0028_0029"><code>redraw-current-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"><code>reverse-search-history (C-r)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-revert_002dline-_0028M_002dr_0029"><code>revert-line (M-r)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-S">S</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"><code>self-insert (a, b, A, 1, !, &hellip;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-set_002dmark-_0028C_002d_0040_0029"><code>set-mark (C-@)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell_002dbackward_002dkill_002dword-_0028_0029"><code>shell-backward-kill-word ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell_002dbackward_002dword-_0028M_002dC_002db_0029"><code>shell-backward-word (M-C-b)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"><code>shell-expand-line (M-C-e)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell_002dforward_002dword-_0028M_002dC_002df_0029"><code>shell-forward-word (M-C-f)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"><code>shell-kill-word (M-C-d)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"><code>shell-transpose-words (M-C-t)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-skip_002dcsi_002dsequence-_0028_0029"><code>skip-csi-sequence ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-spell_002dcorrect_002dword-_0028C_002dx-s_0029"><code>spell-correct-word (C-x s)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"><code>start-kbd-macro (C-x ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-T">T</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-tilde_002dexpand-_0028M_002d_0026_0029"><code>tilde-expand (M-&amp;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-transpose_002dchars-_0028C_002dt_0029"><code>transpose-chars (C-t)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-transpose_002dwords-_0028M_002dt_0029"><code>transpose-words (M-t)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-U">U</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"><code>undo (C-_ or C-x C-u)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-universal_002dargument-_0028_0029"><code>universal-argument ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-unix_002dfilename_002drubout-_0028_0029"><code>unix-filename-rubout ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-unix_002dline_002ddiscard-_0028C_002du_0029"><code>unix-line-discard (C-u)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-unix_002dword_002drubout-_0028C_002dw_0029"><code>unix-word-rubout (C-w)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-upcase_002dword-_0028M_002du_0029"><code>upcase-word (M-u)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Function-Index_fn_letter-Y">Y</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-yank-_0028C_002dy_0029"><code>yank (C-y)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"><code>yank-last-arg (M-. or M-_)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"><code>yank-nth-arg (M-C-y)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-yank_002dpop-_0028M_002dy_0029"><code>yank-pop (M-y)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> +<table class="fn-entries-printindex" border="0"> +<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-A">A</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-abort-_0028C_002dg_0029"><code>abort (C-g)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-accept_002dline-_0028Newline-or-Return_0029"><code>accept-line (Newline or Return)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-alias_002dexpand_002dline-_0028_0029"><code>alias-expand-line ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-B">B</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002dchar-_0028C_002db_0029"><code>backward-char (C-b)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002ddelete_002dchar-_0028Rubout_0029"><code>backward-delete-char (Rubout)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"><code>backward-kill-line (C-x Rubout)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002dkill_002dword-_0028M_002dDEL_0029"><code>backward-kill-word (M-<kbd class="key">DEL</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-backward_002dword-_0028M_002db_0029"><code>backward-word (M-b)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"><code>beginning-of-history (M-&lt;)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-beginning_002dof_002dline-_0028C_002da_0029"><code>beginning-of-line (C-a)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-bracketed_002dpaste_002dbegin-_0028_0029"><code>bracketed-paste-begin ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-C">C</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"><code>call-last-kbd-macro (C-x e)</code></a></td><td class="printindex-index-section"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-capitalize_002dword-_0028M_002dc_0029"><code>capitalize-word (M-c)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-character_002dsearch-_0028C_002d_005d_0029"><code>character-search (C-])</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"><code>character-search-backward (M-C-])</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-clear_002ddisplay-_0028M_002dC_002dl_0029"><code>clear-display (M-C-l)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-clear_002dscreen-_0028C_002dl_0029"><code>clear-screen (C-l)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-complete-_0028TAB_0029"><code>complete (<kbd class="key">TAB</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dcommand-_0028M_002d_0021_0029"><code>complete-command (M-!)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dfilename-_0028M_002d_002f_0029"><code>complete-filename (M-/)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dhostname-_0028M_002d_0040_0029"><code>complete-hostname (M-@)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"><code>complete-into-braces (M-{)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dusername-_0028M_002d_007e_0029"><code>complete-username (M-~)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-complete_002dvariable-_0028M_002d_0024_0029"><code>complete-variable (M-$)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-copy_002dbackward_002dword-_0028_0029"><code>copy-backward-word ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-copy_002dforward_002dword-_0028_0029"><code>copy-forward-word ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-copy_002dregion_002das_002dkill-_0028_0029"><code>copy-region-as-kill ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-D">D</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-dabbrev_002dexpand-_0028_0029"><code>dabbrev-expand ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-delete_002dchar-_0028C_002dd_0029"><code>delete-char (C-d)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-delete_002dchar_002dor_002dlist-_0028_0029"><code>delete-char-or-list ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-delete_002dhorizontal_002dspace-_0028_0029"><code>delete-horizontal-space ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"><code>digit-argument (<kbd class="kbd">M-0</kbd>, <kbd class="kbd">M-1</kbd>, &hellip; <kbd class="kbd">M--</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"><code>display-shell-version (C-x C-v)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"><code>do-lowercase-version (M-A, M-B, M-<var class="var">x</var>, &hellip;)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-downcase_002dword-_0028M_002dl_0029"><code>downcase-word (M-l)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-dump_002dfunctions-_0028_0029"><code>dump-functions ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-dump_002dmacros-_0028_0029"><code>dump-macros ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-dump_002dvariables-_0028_0029"><code>dump-variables ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"><code>dynamic-complete-history (M-<kbd class="key">TAB</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-E">E</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"><code>edit-and-execute-command (C-x C-e)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"><code>end-kbd-macro (C-x ))</code></a></td><td class="printindex-index-section"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-end_002dof_002dfile-_0028usually-C_002dd_0029"><code><i class="i">end-of-file</i> (usually C-d)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-end_002dof_002dhistory-_0028M_002d_003e_0029"><code>end-of-history (M-&gt;)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-end_002dof_002dline-_0028C_002de_0029"><code>end-of-line (C-e)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"><code>exchange-point-and-mark (C-x C-x)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-execute_002dnamed_002dcommand-_0028M_002dx_0029"><code>execute-named-command (M-x)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-F">F</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-fetch_002dhistory-_0028_0029"><code>fetch-history ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-forward_002dbackward_002ddelete_002dchar-_0028_0029"><code>forward-backward-delete-char ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-forward_002dchar-_0028C_002df_0029"><code>forward-char (C-f)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-forward_002dsearch_002dhistory-_0028C_002ds_0029"><code>forward-search-history (C-s)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-forward_002dword-_0028M_002df_0029"><code>forward-word (M-f)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-G">G</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-glob_002dcomplete_002dword-_0028M_002dg_0029"><code>glob-complete-word (M-g)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"><code>glob-expand-word (C-x *)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"><code>glob-list-expansions (C-x g)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-H">H</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"><code>history-and-alias-expand-line ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dexpand_002dline-_0028M_002d_005e_0029"><code>history-expand-line (M-^)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsearch_002dbackward-_0028_0029"><code>history-search-backward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsearch_002dforward-_0028_0029"><code>history-search-forward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"><code>history-substring-search-backward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history_002dsubstring_002dsearch_002dforward-_0028_0029"><code>history-substring-search-forward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-I">I</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-insert_002dcomment-_0028M_002d_0023_0029"><code>insert-comment (M-#)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-insert_002dcompletions-_0028M_002d_002a_0029"><code>insert-completions (M-*)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"><code>insert-last-argument (M-. or M-_)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-K">K</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-kill_002dline-_0028C_002dk_0029"><code>kill-line (C-k)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-kill_002dregion-_0028_0029"><code>kill-region ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-kill_002dwhole_002dline-_0028_0029"><code>kill-whole-line ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-kill_002dword-_0028M_002dd_0029"><code>kill-word (M-d)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-M">M</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-magic_002dspace-_0028_0029"><code>magic-space ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-menu_002dcomplete-_0028_0029"><code>menu-complete ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-menu_002dcomplete_002dbackward-_0028_0029"><code>menu-complete-backward ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-N">N</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-next_002dhistory-_0028C_002dn_0029"><code>next-history (C-n)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-next_002dscreen_002dline-_0028_0029"><code>next-screen-line ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"><code>non-incremental-forward-search-history (M-n)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"><code>non-incremental-reverse-search-history (M-p)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-O">O</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-operate_002dand_002dget_002dnext-_0028C_002do_0029"><code>operate-and-get-next (C-o)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-overwrite_002dmode-_0028_0029"><code>overwrite-mode ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-P">P</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"><code>possible-command-completions (C-x !)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dcompletions-_0028M_002d_003f_0029"><code>possible-completions (M-?)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"><code>possible-filename-completions (C-x /)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"><code>possible-hostname-completions (C-x @)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"><code>possible-username-completions (C-x ~)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"><code>possible-variable-completions (C-x $)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-prefix_002dmeta-_0028ESC_0029"><code>prefix-meta (<kbd class="key">ESC</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-previous_002dhistory-_0028C_002dp_0029"><code>previous-history (C-p)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-previous_002dscreen_002dline-_0028_0029"><code>previous-screen-line ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-print_002dlast_002dkbd_002dmacro-_0028_0029"><code>print-last-kbd-macro ()</code></a></td><td class="printindex-index-section"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-Q">Q</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"><code>quoted-insert (C-q or C-v)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-R">R</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"><code>re-read-init-file (C-x C-r)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-redraw_002dcurrent_002dline-_0028_0029"><code>redraw-current-line ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"><code>reverse-search-history (C-r)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-revert_002dline-_0028M_002dr_0029"><code>revert-line (M-r)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-S">S</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"><code>self-insert (a, b, A, 1, !, &hellip;)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-set_002dmark-_0028C_002d_0040_0029"><code>set-mark (C-@)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dbackward_002dkill_002dword-_0028_0029"><code>shell-backward-kill-word ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dbackward_002dword-_0028M_002dC_002db_0029"><code>shell-backward-word (M-C-b)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"><code>shell-expand-line (M-C-e)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dforward_002dword-_0028M_002dC_002df_0029"><code>shell-forward-word (M-C-f)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"><code>shell-kill-word (M-C-d)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"><code>shell-transpose-words (M-C-t)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-skip_002dcsi_002dsequence-_0028_0029"><code>skip-csi-sequence ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-spell_002dcorrect_002dword-_0028C_002dx-s_0029"><code>spell-correct-word (C-x s)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"><code>start-kbd-macro (C-x ()</code></a></td><td class="printindex-index-section"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-T">T</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-tilde_002dexpand-_0028M_002d_0026_0029"><code>tilde-expand (M-&amp;)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-transpose_002dchars-_0028C_002dt_0029"><code>transpose-chars (C-t)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-transpose_002dwords-_0028M_002dt_0029"><code>transpose-words (M-t)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-U">U</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"><code>undo (C-_ or C-x C-u)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-universal_002dargument-_0028_0029"><code>universal-argument ()</code></a></td><td class="printindex-index-section"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-unix_002dfilename_002drubout-_0028_0029"><code>unix-filename-rubout ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-unix_002dline_002ddiscard-_0028C_002du_0029"><code>unix-line-discard (C-u)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-unix_002dword_002drubout-_0028C_002dw_0029"><code>unix-word-rubout (C-w)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-upcase_002dword-_0028M_002du_0029"><code>upcase-word (M-u)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Function-Index_fn_letter-Y">Y</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-yank-_0028C_002dy_0029"><code>yank (C-y)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"><code>yank-last-arg (M-. or M-_)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"><code>yank-nth-arg (M-C-y)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-History">Commands For History</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-yank_002dpop-_0028M_002dy_0029"><code>yank-pop (M-y)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td colspan="3"><hr></td></tr> </table> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Function-Index_fn_letter-A"><b>A</b></a> +<table class="fn-letters-footer-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Function-Index_fn_letter-A"><b>A</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-B"><b>B</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-B"><b>B</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-G"><b>G</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-G"><b>G</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-H"><b>H</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-H"><b>H</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-I"><b>I</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-I"><b>I</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-K"><b>K</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-K"><b>K</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-M"><b>M</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-M"><b>M</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-N"><b>N</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-N"><b>N</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-O"><b>O</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-O"><b>O</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-P"><b>P</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-P"><b>P</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-Q"><b>Q</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-Q"><b>Q</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-R"><b>R</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-R"><b>R</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-U"><b>U</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Function-Index_fn_letter-Y"><b>Y</b></a> +<a class="summary-letter-printindex" href="#Function-Index_fn_letter-Y"><b>Y</b></a> &nbsp; </td></tr></table> +</div> <hr> </div> -<div class="appendixsec" id="Concept-Index"> -<div class="header"> +<div class="appendixsec-level-extent" id="Concept-Index"> +<div class="nav-panel"> <p> Previous: <a href="#Function-Index" accesskey="p" rel="prev">Function Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p> </div> -<span id="Concept-Index-1"></span><h3 class="appendixsec">D.5 Concept Index</h3> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Concept-Index_cp_letter-A"><b>A</b></a> +<h3 class="appendixsec" id="Concept-Index-1"><span>D.5 Concept Index<a class="copiable-link" href="#Concept-Index-1"> &para;</a></span></h3> +<div class="printindex cp-printindex"> +<table class="cp-letters-header-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Concept-Index_cp_letter-A"><b>A</b></a> + &nbsp; +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-B"><b>B</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-B"><b>B</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-H"><b>H</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-H"><b>H</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-I"><b>I</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-I"><b>I</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-J"><b>J</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-J"><b>J</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-K"><b>K</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-K"><b>K</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-L"><b>L</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-L"><b>L</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-M"><b>M</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-M"><b>M</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-N"><b>N</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-N"><b>N</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-O"><b>O</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-O"><b>O</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-P"><b>P</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-Q"><b>Q</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-Q"><b>Q</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-R"><b>R</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-R"><b>R</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-V"><b>V</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-V"><b>V</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-W"><b>W</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-W"><b>W</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-Y"><b>Y</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-Y"><b>Y</b></a> &nbsp; </td></tr></table> -<table class="index-cp" border="0"> -<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-A">A</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-alias-expansion">alias expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aliases">Aliases</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-arithmetic-evaluation">arithmetic evaluation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-arithmetic-expansion">arithmetic expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic-Expansion">Arithmetic Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-arithmetic_002c-shell">arithmetic, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-arrays">arrays</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arrays">Arrays</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-B">B</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-background">background</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-Bash-configuration">Bash configuration</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Installation">Basic Installation</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-Bash-installation">Bash installation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Installation">Basic Installation</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-Bourne-shell">Bourne shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Shell-Features">Basic Shell Features</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-brace-expansion">brace expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Brace-Expansion">Brace Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-builtin-1">builtin</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-C">C</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-command-editing">command editing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-command-execution">command execution</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Search-and-Execution">Command Search and Execution</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-command-expansion">command expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Command-Expansion">Simple Command Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-command-history">command history</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Facilities">Bash History Facilities</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-command-search">command search</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Search-and-Execution">Command Search and Execution</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-command-substitution">command substitution</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Substitution">Command Substitution</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-command-timing">command timing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-commands_002c-compound">commands, compound</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Compound-Commands">Compound Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-commands_002c-conditional">commands, conditional</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-commands_002c-grouping">commands, grouping</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Grouping">Command Grouping</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-commands_002c-lists">commands, lists</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Lists">Lists</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-commands_002c-looping">commands, looping</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-commands_002c-pipelines">commands, pipelines</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-commands_002c-shell">commands, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Commands">Shell Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-commands_002c-simple">commands, simple</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Commands">Simple Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-comments_002c-shell">comments, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comments">Comments</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-Compatibility-Level">Compatibility Level</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-Compatibility-Mode">Compatibility Mode</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-completion-builtins">completion builtins</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-configuration">configuration</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Installation">Basic Installation</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-control-operator">control operator</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-coprocess">coprocess</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Coprocesses">Coprocesses</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-D">D</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-directory-stack">directory stack</a>:</td><td>&nbsp;</td><td valign="top"><a href="#The-Directory-Stack">The Directory Stack</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-E">E</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-editing-command-lines">editing command lines</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-environment">environment</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Environment">Environment</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-evaluation_002c-arithmetic">evaluation, arithmetic</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-event-designators">event designators</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Event-Designators">Event Designators</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-execution-environment">execution environment</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Execution-Environment">Command Execution Environment</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-exit-status">exit status</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-exit-status-1">exit status</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exit-Status">Exit Status</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expansion">expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Expansions">Shell Expansions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expansion_002c-arithmetic">expansion, arithmetic</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic-Expansion">Arithmetic Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expansion_002c-brace">expansion, brace</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Brace-Expansion">Brace Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expansion_002c-filename">expansion, filename</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filename-Expansion">Filename Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expansion_002c-parameter">expansion, parameter</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expansion_002c-pathname">expansion, pathname</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filename-Expansion">Filename Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expansion_002c-tilde">expansion, tilde</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tilde-Expansion">Tilde Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expressions_002c-arithmetic">expressions, arithmetic</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-expressions_002c-conditional">expressions, conditional</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-F">F</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-field">field</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-filename">filename</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-filename-expansion">filename expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filename-Expansion">Filename Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-foreground">foreground</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-functions_002c-shell">functions, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Functions">Shell Functions</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-H">H</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-history-builtins">history builtins</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history-events">history events</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Event-Designators">Event Designators</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history-expansion">history expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#History-Interaction">History Interaction</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-history-list">history list</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Facilities">Bash History Facilities</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-History_002c-how-to-use">History, how to use</a>:</td><td>&nbsp;</td><td valign="top"><a href="#A-Programmable-Completion-Example">A Programmable Completion Example</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-I">I</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-identifier">identifier</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-initialization-file_002c-readline">initialization file, readline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File">Readline Init File</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-installation">installation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Installation">Basic Installation</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-interaction_002c-readline">interaction, readline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Interaction">Readline Interaction</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-interactive-shell">interactive shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Invoking-Bash">Invoking Bash</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-interactive-shell-1">interactive shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interactive-Shells">Interactive Shells</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-internationalization">internationalization</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-internationalized-scripts">internationalized scripts</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-J">J</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-job">job</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-job-control">job control</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-job-control-1">job control</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-K">K</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-kill-ring">kill ring</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-killing-text">killing text</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-L">L</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-localization">localization</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-login-shell">login shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Invoking-Bash">Invoking Bash</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-M">M</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-matching_002c-pattern">matching, pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pattern-Matching">Pattern Matching</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-metacharacter">metacharacter</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-N">N</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-name">name</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-native-languages">native languages</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-notation_002c-readline">notation, readline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-O">O</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-operator_002c-shell">operator, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-P">P</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-parameter-expansion">parameter expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-parameters">parameters</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameters">Shell Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-parameters_002c-positional">parameters, positional</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Positional-Parameters">Positional Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-parameters_002c-special">parameters, special</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-pathname-expansion">pathname expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filename-Expansion">Filename Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-pattern-matching">pattern matching</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pattern-Matching">Pattern Matching</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-pipeline">pipeline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-POSIX">POSIX</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-POSIX-Mode">POSIX Mode</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-process-group">process group</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-process-group-ID">process group ID</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-process-substitution">process substitution</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Process-Substitution">Process Substitution</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-programmable-completion">programmable completion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion">Programmable Completion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-prompting">prompting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Controlling-the-Prompt">Controlling the Prompt</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-Q">Q</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-quoting">quoting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Quoting">Quoting</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-quoting_002c-ANSI">quoting, ANSI</a>:</td><td>&nbsp;</td><td valign="top"><a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-R">R</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-Readline_002c-how-to-use">Readline, how to use</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Variables">Job Control Variables</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-redirection">redirection</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Redirections">Redirections</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-reserved-word">reserved word</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-reserved-words">reserved words</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Reserved-Words">Reserved Words</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-restricted-shell">restricted shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#The-Restricted-Shell">The Restricted Shell</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-return-status">return status</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-S">S</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell-arithmetic">shell arithmetic</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell-function">shell function</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Functions">Shell Functions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell-script">shell script</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Scripts">Shell Scripts</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell-variable">shell variable</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameters">Shell Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell_002c-interactive">shell, interactive</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interactive-Shells">Interactive Shells</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-signal">signal</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-signal-handling">signal handling</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Signals">Signals</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-special-builtin">special builtin</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-special-builtin-1">special builtin</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Builtins">Special Builtins</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-startup-files">startup files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Startup-Files">Bash Startup Files</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-string-translations">string translations</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-suspending-jobs">suspending jobs</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-T">T</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-tilde-expansion">tilde expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tilde-Expansion">Tilde Expansion</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-token">token</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-translation_002c-native-languages">translation, native languages</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-V">V</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-variable_002c-shell">variable, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameters">Shell Parameters</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-variables_002c-readline">variables, readline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-W">W</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-word">word</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-word-splitting">word splitting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Word-Splitting">Word Splitting</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> -<tr><th id="Concept-Index_cp_letter-Y">Y</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-yanking-text">yanking text</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr> -<tr><td colspan="4"> <hr></td></tr> +<table class="cp-entries-printindex" border="0"> +<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-A">A</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-alias-expansion">alias expansion</a></td><td class="printindex-index-section"><a href="#Aliases">Aliases</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-arithmetic-evaluation">arithmetic evaluation</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-arithmetic-expansion">arithmetic expansion</a></td><td class="printindex-index-section"><a href="#Arithmetic-Expansion">Arithmetic Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-arithmetic-operators">arithmetic operators</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-arithmetic_002c-shell">arithmetic, shell</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-arrays">arrays</a></td><td class="printindex-index-section"><a href="#Arrays">Arrays</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-B">B</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-background">background</a></td><td class="printindex-index-section"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-Bash-configuration">Bash configuration</a></td><td class="printindex-index-section"><a href="#Basic-Installation">Basic Installation</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-Bash-installation">Bash installation</a></td><td class="printindex-index-section"><a href="#Basic-Installation">Basic Installation</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-binary-arithmetic-operators">binary arithmetic operators</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-bitwise-arithmetic-operators">bitwise arithmetic operators</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-Bourne-shell">Bourne shell</a></td><td class="printindex-index-section"><a href="#Basic-Shell-Features">Basic Shell Features</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-brace-expansion">brace expansion</a></td><td class="printindex-index-section"><a href="#Brace-Expansion">Brace Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-builtin-1">builtin</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-C">C</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-command-editing">command editing</a></td><td class="printindex-index-section"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-command-execution">command execution</a></td><td class="printindex-index-section"><a href="#Command-Search-and-Execution">Command Search and Execution</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-command-expansion">command expansion</a></td><td class="printindex-index-section"><a href="#Simple-Command-Expansion">Simple Command Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-command-history">command history</a></td><td class="printindex-index-section"><a href="#Bash-History-Facilities">Bash History Facilities</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-command-search">command search</a></td><td class="printindex-index-section"><a href="#Command-Search-and-Execution">Command Search and Execution</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-command-substitution">command substitution</a></td><td class="printindex-index-section"><a href="#Command-Substitution">Command Substitution</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-command-timing">command timing</a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-compound">commands, compound</a></td><td class="printindex-index-section"><a href="#Compound-Commands">Compound Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-conditional">commands, conditional</a></td><td class="printindex-index-section"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-grouping">commands, grouping</a></td><td class="printindex-index-section"><a href="#Command-Grouping">Command Grouping</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-lists">commands, lists</a></td><td class="printindex-index-section"><a href="#Lists">Lists</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-looping">commands, looping</a></td><td class="printindex-index-section"><a href="#Looping-Constructs">Looping Constructs</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-pipelines">commands, pipelines</a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-shell">commands, shell</a></td><td class="printindex-index-section"><a href="#Shell-Commands">Shell Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-commands_002c-simple">commands, simple</a></td><td class="printindex-index-section"><a href="#Simple-Commands">Simple Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-comments_002c-shell">comments, shell</a></td><td class="printindex-index-section"><a href="#Comments">Comments</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-Compatibility-Level">Compatibility Level</a></td><td class="printindex-index-section"><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-Compatibility-Mode">Compatibility Mode</a></td><td class="printindex-index-section"><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-completion-builtins">completion builtins</a></td><td class="printindex-index-section"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-conditional-arithmetic-operator">conditional arithmetic operator</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-configuration">configuration</a></td><td class="printindex-index-section"><a href="#Basic-Installation">Basic Installation</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-control-operator">control operator</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-coprocess">coprocess</a></td><td class="printindex-index-section"><a href="#Coprocesses">Coprocesses</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-D">D</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-directory-stack">directory stack</a></td><td class="printindex-index-section"><a href="#The-Directory-Stack">The Directory Stack</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-E">E</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-editing-command-lines">editing command lines</a></td><td class="printindex-index-section"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-environment">environment</a></td><td class="printindex-index-section"><a href="#Environment">Environment</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-evaluation_002c-arithmetic">evaluation, arithmetic</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-event-designators">event designators</a></td><td class="printindex-index-section"><a href="#Event-Designators">Event Designators</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-execution-environment">execution environment</a></td><td class="printindex-index-section"><a href="#Command-Execution-Environment">Command Execution Environment</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-exit-status">exit status</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-exit-status-1">exit status</a></td><td class="printindex-index-section"><a href="#Exit-Status">Exit Status</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion">expansion</a></td><td class="printindex-index-section"><a href="#Shell-Expansions">Shell Expansions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-arithmetic">expansion, arithmetic</a></td><td class="printindex-index-section"><a href="#Arithmetic-Expansion">Arithmetic Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-brace">expansion, brace</a></td><td class="printindex-index-section"><a href="#Brace-Expansion">Brace Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-filename">expansion, filename</a></td><td class="printindex-index-section"><a href="#Filename-Expansion">Filename Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-parameter">expansion, parameter</a></td><td class="printindex-index-section"><a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-pathname">expansion, pathname</a></td><td class="printindex-index-section"><a href="#Filename-Expansion">Filename Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expansion_002c-tilde">expansion, tilde</a></td><td class="printindex-index-section"><a href="#Tilde-Expansion">Tilde Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expressions_002c-arithmetic">expressions, arithmetic</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-expressions_002c-conditional">expressions, conditional</a></td><td class="printindex-index-section"><a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-F">F</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-field">field</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-filename">filename</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-filename-expansion">filename expansion</a></td><td class="printindex-index-section"><a href="#Filename-Expansion">Filename Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-foreground">foreground</a></td><td class="printindex-index-section"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-functions_002c-shell">functions, shell</a></td><td class="printindex-index-section"><a href="#Shell-Functions">Shell Functions</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-H">H</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history-builtins">history builtins</a></td><td class="printindex-index-section"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history-events">history events</a></td><td class="printindex-index-section"><a href="#Event-Designators">Event Designators</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history-expansion">history expansion</a></td><td class="printindex-index-section"><a href="#History-Interaction">History Interaction</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-history-list">history list</a></td><td class="printindex-index-section"><a href="#Bash-History-Facilities">Bash History Facilities</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-History_002c-how-to-use">History, how to use</a></td><td class="printindex-index-section"><a href="#A-Programmable-Completion-Example">A Programmable Completion Example</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-I">I</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-identifier">identifier</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-initialization-file_002c-readline">initialization file, readline</a></td><td class="printindex-index-section"><a href="#Readline-Init-File">Readline Init File</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-installation">installation</a></td><td class="printindex-index-section"><a href="#Basic-Installation">Basic Installation</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-interaction_002c-readline">interaction, readline</a></td><td class="printindex-index-section"><a href="#Readline-Interaction">Readline Interaction</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-interactive-shell">interactive shell</a></td><td class="printindex-index-section"><a href="#Invoking-Bash">Invoking Bash</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-interactive-shell-1">interactive shell</a></td><td class="printindex-index-section"><a href="#Interactive-Shells">Interactive Shells</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-internationalization">internationalization</a></td><td class="printindex-index-section"><a href="#Locale-Translation">Locale Translation</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-internationalized-scripts">internationalized scripts</a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-J">J</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-job">job</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-job-control">job control</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-job-control-1">job control</a></td><td class="printindex-index-section"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-K">K</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-kill-ring">kill ring</a></td><td class="printindex-index-section"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-killing-text">killing text</a></td><td class="printindex-index-section"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-L">L</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-localization">localization</a></td><td class="printindex-index-section"><a href="#Locale-Translation">Locale Translation</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-login-shell">login shell</a></td><td class="printindex-index-section"><a href="#Invoking-Bash">Invoking Bash</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-M">M</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-matching_002c-pattern">matching, pattern</a></td><td class="printindex-index-section"><a href="#Pattern-Matching">Pattern Matching</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-metacharacter">metacharacter</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-N">N</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-name">name</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-native-languages">native languages</a></td><td class="printindex-index-section"><a href="#Locale-Translation">Locale Translation</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-notation_002c-readline">notation, readline</a></td><td class="printindex-index-section"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-O">O</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-operator_002c-shell">operator, shell</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-P">P</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-parameter-expansion">parameter expansion</a></td><td class="printindex-index-section"><a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-parameters">parameters</a></td><td class="printindex-index-section"><a href="#Shell-Parameters">Shell Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-parameters_002c-positional">parameters, positional</a></td><td class="printindex-index-section"><a href="#Positional-Parameters">Positional Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-parameters_002c-special">parameters, special</a></td><td class="printindex-index-section"><a href="#Special-Parameters">Special Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-pathname-expansion">pathname expansion</a></td><td class="printindex-index-section"><a href="#Filename-Expansion">Filename Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-pattern-matching">pattern matching</a></td><td class="printindex-index-section"><a href="#Pattern-Matching">Pattern Matching</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-pipeline">pipeline</a></td><td class="printindex-index-section"><a href="#Pipelines">Pipelines</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-POSIX">POSIX</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-POSIX-description">POSIX description</a></td><td class="printindex-index-section"><a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-POSIX-Mode">POSIX Mode</a></td><td class="printindex-index-section"><a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-process-group">process group</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-process-group-ID">process group ID</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-process-substitution">process substitution</a></td><td class="printindex-index-section"><a href="#Process-Substitution">Process Substitution</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-programmable-completion">programmable completion</a></td><td class="printindex-index-section"><a href="#Programmable-Completion">Programmable Completion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-prompting">prompting</a></td><td class="printindex-index-section"><a href="#Controlling-the-Prompt">Controlling the Prompt</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-Q">Q</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-quoting">quoting</a></td><td class="printindex-index-section"><a href="#Quoting">Quoting</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-quoting_002c-ANSI">quoting, ANSI</a></td><td class="printindex-index-section"><a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-R">R</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-Readline_002c-how-to-use">Readline, how to use</a></td><td class="printindex-index-section"><a href="#Job-Control-Variables">Job Control Variables</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-redirection">redirection</a></td><td class="printindex-index-section"><a href="#Redirections">Redirections</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-reserved-word">reserved word</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-reserved-words">reserved words</a></td><td class="printindex-index-section"><a href="#Reserved-Words">Reserved Words</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-restricted-shell">restricted shell</a></td><td class="printindex-index-section"><a href="#The-Restricted-Shell">The Restricted Shell</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-return-status">return status</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-S">S</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell-arithmetic">shell arithmetic</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell-function">shell function</a></td><td class="printindex-index-section"><a href="#Shell-Functions">Shell Functions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell-script">shell script</a></td><td class="printindex-index-section"><a href="#Shell-Scripts">Shell Scripts</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell-variable">shell variable</a></td><td class="printindex-index-section"><a href="#Shell-Parameters">Shell Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002c-interactive">shell, interactive</a></td><td class="printindex-index-section"><a href="#Interactive-Shells">Interactive Shells</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-signal">signal</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-signal-handling">signal handling</a></td><td class="printindex-index-section"><a href="#Signals">Signals</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-special-builtin">special builtin</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-special-builtin-1">special builtin</a></td><td class="printindex-index-section"><a href="#Special-Builtins">Special Builtins</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-startup-files">startup files</a></td><td class="printindex-index-section"><a href="#Bash-Startup-Files">Bash Startup Files</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-string-translations">string translations</a></td><td class="printindex-index-section"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-suspending-jobs">suspending jobs</a></td><td class="printindex-index-section"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-T">T</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-tilde-expansion">tilde expansion</a></td><td class="printindex-index-section"><a href="#Tilde-Expansion">Tilde Expansion</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-token">token</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-translation_002c-native-languages">translation, native languages</a></td><td class="printindex-index-section"><a href="#Locale-Translation">Locale Translation</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-U">U</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-unary-arithmetic-operators">unary arithmetic operators</a></td><td class="printindex-index-section"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-V">V</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-variable_002c-shell">variable, shell</a></td><td class="printindex-index-section"><a href="#Shell-Parameters">Shell Parameters</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-variables_002c-readline">variables, readline</a></td><td class="printindex-index-section"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-W">W</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-word">word</a></td><td class="printindex-index-section"><a href="#Definitions">Definitions</a></td></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-word-splitting">word splitting</a></td><td class="printindex-index-section"><a href="#Word-Splitting">Word Splitting</a></td></tr> +<tr><td colspan="3"><hr></td></tr> +<tr><th id="Concept-Index_cp_letter-Y">Y</th></tr> +<tr><td></td><td class="printindex-index-entry"><a href="#index-yanking-text">yanking text</a></td><td class="printindex-index-section"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr> +<tr><td colspan="3"><hr></td></tr> </table> -<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Concept-Index_cp_letter-A"><b>A</b></a> +<table class="cp-letters-footer-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Concept-Index_cp_letter-A"><b>A</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-B"><b>B</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-B"><b>B</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-C"><b>C</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-C"><b>C</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-D"><b>D</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-D"><b>D</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-E"><b>E</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-E"><b>E</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-F"><b>F</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-F"><b>F</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-H"><b>H</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-H"><b>H</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-I"><b>I</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-I"><b>I</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-J"><b>J</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-J"><b>J</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-K"><b>K</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-K"><b>K</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-L"><b>L</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-L"><b>L</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-M"><b>M</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-M"><b>M</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-N"><b>N</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-N"><b>N</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-O"><b>O</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-O"><b>O</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-P"><b>P</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-Q"><b>Q</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-Q"><b>Q</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-R"><b>R</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-R"><b>R</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-S"><b>S</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-T"><b>T</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-T"><b>T</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-V"><b>V</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-U"><b>U</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-W"><b>W</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-V"><b>V</b></a> &nbsp; -<a class="summary-letter" href="#Concept-Index_cp_letter-Y"><b>Y</b></a> +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-W"><b>W</b></a> + &nbsp; +<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-Y"><b>Y</b></a> &nbsp; </td></tr></table> +</div> </div> </div> diff --git a/doc/bashref.info b/doc/bashref.info index 25372f9b5..4811dcaf2 100644 --- a/doc/bashref.info +++ b/doc/bashref.info @@ -1,13 +1,13 @@ -This is bashref.info, produced by makeinfo version 6.8 from +This is bashref.info, produced by makeinfo version 7.1 from bashref.texi. This text is a brief description of the features that are present in the -Bash shell (version 5.2, 19 September 2022). +Bash shell (version 5.3, 5 April 2024). - This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash -Reference Manual', for 'Bash', Version 5.2. + This is Edition 5.3, last updated 5 April 2024, of ‘The GNU Bash +Reference Manual’, for ‘Bash’, Version 5.3. - Copyright (C) 1988-2022 Free Software Foundation, Inc. + Copyright © 1988-2023 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, @@ -27,16 +27,16 @@ Bash Features ************* This text is a brief description of the features that are present in the -Bash shell (version 5.2, 19 September 2022). The Bash home page is +Bash shell (version 5.3, 5 April 2024). The Bash home page is <http://www.gnu.org/software/bash/>. - This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash -Reference Manual', for 'Bash', Version 5.2. + This is Edition 5.3, last updated 5 April 2024, of ‘The GNU Bash +Reference Manual’, for ‘Bash’, Version 5.3. Bash contains features that appear in other popular shells, and some features that only appear in Bash. Some of the shells that Bash has -borrowed concepts from are the Bourne Shell ('sh'), the Korn Shell -('ksh'), and the C-shell ('csh' and its successor, 'tcsh'). The +borrowed concepts from are the Bourne Shell (‘sh’), the Korn Shell +(‘ksh’), and the C-shell (‘csh’ and its successor, ‘tcsh’). The following menu breaks the features up into categories, noting which features were inspired by other shells and which are specific to Bash. @@ -84,22 +84,22 @@ File: bashref.info, Node: What is Bash?, Next: What is a shell?, Up: Introduc ================= Bash is the shell, or command language interpreter, for the GNU -operating system. The name is an acronym for the 'Bourne-Again SHell', +operating system. The name is an acronym for the ‘Bourne-Again SHell’, a pun on Stephen Bourne, the author of the direct ancestor of the -current Unix shell 'sh', which appeared in the Seventh Edition Bell Labs +current Unix shell ‘sh’, which appeared in the Seventh Edition Bell Labs Research version of Unix. - Bash is largely compatible with 'sh' and incorporates useful features -from the Korn shell 'ksh' and the C shell 'csh'. It is intended to be a + Bash is largely compatible with ‘sh’ and incorporates useful features +from the Korn shell ‘ksh’ and the C shell ‘csh’. It is intended to be a conformant implementation of the IEEE POSIX Shell and Tools portion of the IEEE POSIX specification (IEEE Standard 1003.1). It offers -functional improvements over 'sh' for both interactive and programming +functional improvements over ‘sh’ for both interactive and programming use. While the GNU operating system provides other shells, including a -version of 'csh', Bash is the default shell. Like other GNU software, +version of ‘csh’, Bash is the default shell. Like other GNU software, Bash is quite portable. It currently runs on nearly every version of -Unix and a few other operating systems - independently-supported ports +Unix and a few other operating systems − independently-supported ports exist for MS-DOS, OS/2, and Windows platforms.  @@ -118,7 +118,7 @@ interface to the rich set of GNU utilities. The programming language features allow these utilities to be combined. Files containing commands can be created, and become commands themselves. These new commands have the same status as system commands in directories such as -'/bin', allowing users or groups to establish custom environments to +‘/bin’, allowing users or groups to establish custom environments to automate their common tasks. Shells may be used interactively or non-interactively. In @@ -129,15 +129,15 @@ executing non-interactively, shells execute commands read from a file. asynchronously. The shell waits for synchronous commands to complete before accepting more input; asynchronous commands continue to execute in parallel with the shell while it reads and executes additional -commands. The "redirection" constructs permit fine-grained control of +commands. The “redirection” constructs permit fine-grained control of the input and output of those commands. Moreover, the shell allows control over the contents of commands' environments. - Shells also provide a small set of built-in commands ("builtins") + Shells also provide a small set of built-in commands (“builtins”) implementing functionality impossible or inconvenient to obtain via -separate utilities. For example, 'cd', 'break', 'continue', and 'exec' +separate utilities. For example, ‘cd’, ‘break’, ‘continue’, and ‘exec’ cannot be implemented outside of the shell because they directly -manipulate the shell itself. The 'history', 'getopts', 'kill', or 'pwd' +manipulate the shell itself. The ‘history’, ‘getopts’, ‘kill’, or ‘pwd’ builtins, among others, could be implemented in separate utilities, but they are more convenient to use as builtin commands. All of the shell builtins are described in subsequent sections. @@ -160,90 +160,90 @@ File: bashref.info, Node: Definitions, Next: Basic Shell Features, Prev: Intr These definitions are used throughout the remainder of this manual. -'POSIX' +‘POSIX’ A family of open system standards based on Unix. Bash is primarily concerned with the Shell and Utilities portion of the POSIX 1003.1 standard. -'blank' +‘blank’ A space or tab character. -'builtin' +‘builtin’ A command that is implemented internally by the shell itself, rather than by an executable program somewhere in the file system. -'control operator' - A 'token' that performs a control function. It is a 'newline' or - one of the following: '||', '&&', '&', ';', ';;', ';&', ';;&', '|', - '|&', '(', or ')'. +‘control operator’ + A ‘token’ that performs a control function. It is a ‘newline’ or + one of the following: ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘;&’, ‘;;&’, ‘|’, + ‘|&’, ‘(’, or ‘)’. -'exit status' +‘exit status’ The value returned by a command to its caller. The value is restricted to eight bits, so the maximum value is 255. -'field' +‘field’ A unit of text that is the result of one of the shell expansions. After expansion, when executing a command, the resulting fields are used as the command name and arguments. -'filename' +‘filename’ A string of characters used to identify a file. -'job' +‘job’ A set of processes comprising a pipeline, and any processes descended from it, that are all in the same process group. -'job control' +‘job control’ A mechanism by which users can selectively stop (suspend) and restart (resume) execution of processes. -'metacharacter' +‘metacharacter’ A character that, when unquoted, separates words. A metacharacter - is a 'space', 'tab', 'newline', or one of the following characters: - '|', '&', ';', '(', ')', '<', or '>'. + is a ‘space’, ‘tab’, ‘newline’, or one of the following characters: + ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, or ‘>’. -'name' - A 'word' consisting solely of letters, numbers, and underscores, - and beginning with a letter or underscore. 'Name's are used as +‘name’ + A ‘word’ consisting solely of letters, numbers, and underscores, + and beginning with a letter or underscore. ‘Name’s are used as shell variable and function names. Also referred to as an - 'identifier'. + ‘identifier’. -'operator' - A 'control operator' or a 'redirection operator'. *Note +‘operator’ + A ‘control operator’ or a ‘redirection operator’. *Note Redirections::, for a list of redirection operators. Operators - contain at least one unquoted 'metacharacter'. + contain at least one unquoted ‘metacharacter’. -'process group' +‘process group’ A collection of related processes each having the same process group ID. -'process group ID' - A unique identifier that represents a 'process group' during its +‘process group ID’ + A unique identifier that represents a ‘process group’ during its lifetime. -'reserved word' - A 'word' that has a special meaning to the shell. Most reserved - words introduce shell flow control constructs, such as 'for' and - 'while'. +‘reserved word’ + A ‘word’ that has a special meaning to the shell. Most reserved + words introduce shell flow control constructs, such as ‘for’ and + ‘while’. -'return status' - A synonym for 'exit status'. +‘return status’ + A synonym for ‘exit status’. -'signal' +‘signal’ A mechanism by which a process may be notified by the kernel of an event occurring in the system. -'special builtin' +‘special builtin’ A shell builtin command that has been classified as special by the POSIX standard. -'token' +‘token’ A sequence of characters considered a single unit by the shell. It - is either a 'word' or an 'operator'. + is either a ‘word’ or an ‘operator’. -'word' +‘word’ A sequence of characters treated as a unit by the shell. Words may - not include unquoted 'metacharacters'. + not include unquoted ‘metacharacters’.  File: bashref.info, Node: Basic Shell Features, Next: Shell Builtin Commands, Prev: Definitions, Up: Top @@ -251,7 +251,7 @@ File: bashref.info, Node: Basic Shell Features, Next: Shell Builtin Commands, 3 Basic Shell Features ********************** -Bash is an acronym for 'Bourne-Again SHell'. The Bourne shell is the +Bash is an acronym for ‘Bourne-Again SHell’. The Bourne shell is the traditional Unix shell originally written by Stephen Bourne. All of the Bourne shell builtin commands are available in Bash, The rules for evaluation and quoting are taken from the POSIX specification for the @@ -288,7 +288,7 @@ File: bashref.info, Node: Shell Syntax, Next: Shell Commands, Up: Basic Shell When the shell reads input, it proceeds through a sequence of operations. If the input indicates the beginning of a comment, the -shell ignores the comment symbol ('#'), and the rest of that line. +shell ignores the comment symbol (‘#’), and the rest of that line. Otherwise, roughly speaking, the shell reads its input and divides the input into words and operators, employing the quoting rules to @@ -310,12 +310,12 @@ The following is a brief description of the shell's operation when it reads and executes a command. Basically, the shell does the following: 1. Reads its input from a file (*note Shell Scripts::), from a string - supplied as an argument to the '-c' invocation option (*note + supplied as an argument to the ‘-c’ invocation option (*note Invoking Bash::), or from the user's terminal. 2. Breaks the input into words and operators, obeying the quoting rules described in *note Quoting::. These tokens are separated by - 'metacharacters'. Alias expansion is performed by this step (*note + ‘metacharacters’. Alias expansion is performed by this step (*note Aliases::). 3. Parses the tokens into simple and compound commands (*note Shell @@ -359,11 +359,11 @@ as such, and to prevent parameter expansion. Each of the shell metacharacters (*note Definitions::) has special meaning to the shell and must be quoted if it is to represent itself. When the command history expansion facilities are being used (*note -History Interaction::), the "history expansion" character, usually '!', +History Interaction::), the “history expansion” character, usually ‘!’, must be quoted to prevent history expansion. *Note Bash History Facilities::, for more details concerning history expansion. - There are three quoting mechanisms: the "escape character", single + There are three quoting mechanisms: the “escape character”, single quotes, and double quotes.  @@ -372,10 +372,10 @@ File: bashref.info, Node: Escape Character, Next: Single Quotes, Up: Quoting 3.1.2.1 Escape Character ........................ -A non-quoted backslash '\' is the Bash escape character. It preserves +A non-quoted backslash ‘\’ is the Bash escape character. It preserves the literal value of the next character that follows, with the exception -of 'newline'. If a '\newline' pair appears, and the backslash itself is -not quoted, the '\newline' is treated as a line continuation (that is, +of ‘newline’. If a ‘\newline’ pair appears, and the backslash itself is +not quoted, the ‘\newline’ is treated as a line continuation (that is, it is removed from the input stream and effectively ignored).  @@ -384,7 +384,7 @@ File: bashref.info, Node: Single Quotes, Next: Double Quotes, Prev: Escape Ch 3.1.2.2 Single Quotes ..................... -Enclosing characters in single quotes (''') preserves the literal value +Enclosing characters in single quotes (‘'’) preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash. @@ -394,23 +394,23 @@ File: bashref.info, Node: Double Quotes, Next: ANSI-C Quoting, Prev: Single Q 3.1.2.3 Double Quotes ..................... -Enclosing characters in double quotes ('"') preserves the literal value -of all characters within the quotes, with the exception of '$', '`', -'\', and, when history expansion is enabled, '!'. When the shell is in -POSIX mode (*note Bash POSIX Mode::), the '!' has no special meaning +Enclosing characters in double quotes (‘"’) preserves the literal value +of all characters within the quotes, with the exception of ‘$’, ‘`’, +‘\’, and, when history expansion is enabled, ‘!’. When the shell is in +POSIX mode (*note Bash POSIX Mode::), the ‘!’ has no special meaning within double quotes, even when history expansion is enabled. The -characters '$' and '`' retain their special meaning within double quotes +characters ‘$’ and ‘`’ retain their special meaning within double quotes (*note Shell Expansions::). The backslash retains its special meaning -only when followed by one of the following characters: '$', '`', '"', -'\', or 'newline'. Within double quotes, backslashes that are followed +only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, +‘\’, or ‘newline’. Within double quotes, backslashes that are followed by one of these characters are removed. Backslashes preceding characters without a special meaning are left unmodified. A double quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless an -'!' appearing in double quotes is escaped using a backslash. The -backslash preceding the '!' is not removed. +‘!’ appearing in double quotes is escaped using a backslash. The +backslash preceding the ‘!’ is not removed. - The special parameters '*' and '@' have special meaning when in + The special parameters ‘*’ and ‘@’ have special meaning when in double quotes (*note Shell Parameter Expansion::).  @@ -419,50 +419,50 @@ File: bashref.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Dou 3.1.2.4 ANSI-C Quoting ...................... -Character sequences of the form $'STRING' are treated as a special kind -of single quotes. The sequence expands to STRING, with +Character sequences of the form ‘$'STRING'’ are treated as a special +kind of single quotes. The sequence expands to STRING, with backslash-escaped characters in STRING replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: -'\a' +‘\a’ alert (bell) -'\b' +‘\b’ backspace -'\e' -'\E' +‘\e’ +‘\E’ an escape character (not ANSI C) -'\f' +‘\f’ form feed -'\n' +‘\n’ newline -'\r' +‘\r’ carriage return -'\t' +‘\t’ horizontal tab -'\v' +‘\v’ vertical tab -'\\' +‘\\’ backslash -'\'' +‘\'’ single quote -'\"' +‘\"’ double quote -'\?' +‘\?’ question mark -'\NNN' +‘\NNN’ the eight-bit character whose value is the octal value NNN (one to three octal digits) -'\xHH' +‘\xHH’ the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) -'\uHHHH' +‘\uHHHH’ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) -'\UHHHHHHHH' +‘\UHHHHHHHH’ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits) -'\cX' +‘\cX’ a control-X character The expanded result is single-quoted, as if the dollar sign had not been @@ -479,17 +479,17 @@ File: bashref.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoti * Creating Internationalized Scripts:: How to use translations and different languages in your scripts. -Prefixing a double-quoted string with a dollar sign ('$'), such as +Prefixing a double-quoted string with a dollar sign (‘$’), such as $"hello, world", will cause the string to be translated according to the -current locale. The 'gettext' infrastructure performs the lookup and -translation, using the 'LC_MESSAGES', 'TEXTDOMAINDIR', and 'TEXTDOMAIN' +current locale. The ‘gettext’ infrastructure performs the lookup and +translation, using the ‘LC_MESSAGES’, ‘TEXTDOMAINDIR’, and ‘TEXTDOMAIN’ shell variables, as explained below. See the gettext documentation for -additional details not covered here. If the current locale is 'C' or -'POSIX', if there are no translations available, of if the string is not +additional details not covered here. If the current locale is ‘C’ or +‘POSIX’, if there are no translations available, or if the string is not translated, the dollar sign is ignored. Since this is a form of double quoting, the string remains double-quoted by default, whether or not it -is translated and replaced. If the 'noexpand_translation' option is -enabled using the 'shopt' builtin (*note The Shopt Builtin::), +is translated and replaced. If the ‘noexpand_translation’ option is +enabled using the ‘shopt’ builtin (*note The Shopt Builtin::), translated strings are single-quoted instead of double-quoted. The rest of this section is a brief overview of how you use gettext @@ -504,21 +504,21 @@ using $"...", you create a gettext "template" file using the command bash --dump-po-strings SCRIPTNAME > DOMAIN.pot -The DOMAIN is your "message domain". It's just an arbitrary string +The DOMAIN is your “message domain”. It's just an arbitrary string that's used to identify the files gettext needs, like a package or script name. It needs to be unique among all the message domains on systems where you install the translations, so gettext knows which translations correspond to your script. You'll use the template file to create translations for each target language. The template file -conventionally has the suffix '.pot'. +conventionally has the suffix ‘.pot’. You copy this template file to a separate file for each target language you want to support (called "PO" files, which use the suffix -'.po'). PO files use various naming conventions, but when you are +‘.po’). PO files use various naming conventions, but when you are working to translate a template file into a particular language, you first copy the template file to a file whose name is the language you -want to target, with the '.po' suffix. For instance, the Spanish -translations of your strings would be in a file named 'es.po', and to +want to target, with the ‘.po’ suffix. For instance, the Spanish +translations of your strings would be in a file named ‘es.po’, and to get started using a message domain named "example," you would run cp example.pot es.po @@ -535,7 +535,7 @@ be done manually. gettext tools to produce what are called "MO" files, which are compiled versions of the PO files the gettext tools use to look up translations efficiently. MO files are also called "message catalog" files. You use -the 'msgfmt' program to do this. For instance, if you had a file with +the ‘msgfmt’ program to do this. For instance, if you had a file with Spanish translations, you could run msgfmt -o es.mo es.po @@ -543,29 +543,29 @@ Spanish translations, you could run to produce the corresponding MO file. Once you have the MO files, you decide where to install them and use -the 'TEXTDOMAINDIR' shell variable to tell the gettext tools where they +the ‘TEXTDOMAINDIR’ shell variable to tell the gettext tools where they are. Make sure to use the same message domain to name the MO files as you did for the PO files when you install them. - Your users will use the 'LANG' or 'LC_MESSAGES' shell variables to + Your users will use the ‘LANG’ or ‘LC_MESSAGES’ shell variables to select the desired language. - You set the 'TEXTDOMAIN' variable to the script's message domain. As + You set the ‘TEXTDOMAIN’ variable to the script's message domain. As above, you use the message domain to name your translation files. - You, or possibly your users, set the 'TEXTDOMAINDIR' variable to the + You, or possibly your users, set the ‘TEXTDOMAINDIR’ variable to the name of a directory where the message catalog files are stored. If you install the message files into the system's standard message catalog directory, you don't need to worry about this variable. The directory where the message catalog files are stored varies between systems. Some use the message catalog selected by the -'LC_MESSAGES' shell variable. Others create the name of the message -catalog from the value of the 'TEXTDOMAIN' shell variable, possibly -adding the '.mo' suffix. If you use the 'TEXTDOMAIN' variable, you may -need to set the 'TEXTDOMAINDIR' variable to the location of the message +‘LC_MESSAGES’ shell variable. Others create the name of the message +catalog from the value of the ‘TEXTDOMAIN’ shell variable, possibly +adding the ‘.mo’ suffix. If you use the ‘TEXTDOMAIN’ variable, you may +need to set the ‘TEXTDOMAINDIR’ variable to the location of the message catalog files, as above. It's common to use both variables in this -fashion: '$TEXTDOMAINDIR'/'$LC_MESSAGES'/LC_MESSAGES/'$TEXTDOMAIN'.mo. +fashion: ‘$TEXTDOMAINDIR’/‘$LC_MESSAGES’/LC_MESSAGES/‘$TEXTDOMAIN’.mo. If you used that last convention, and you wanted to store the message catalog files with Spanish (es) and Esperanto (eo) translations into a @@ -580,7 +580,7 @@ local directory you use for custom translation files, you could run When all of this is done, and the message catalog files containing the compiled translations are installed in the correct location, your users will be able to see translated strings in any of the supported -languages by setting the 'LANG' or 'LC_MESSAGES' environment variables +languages by setting the ‘LANG’ or ‘LC_MESSAGES’ environment variables before running your script.  @@ -590,11 +590,11 @@ File: bashref.info, Node: Comments, Prev: Quoting, Up: Shell Syntax -------------- In a non-interactive shell, or an interactive shell in which the -'interactive_comments' option to the 'shopt' builtin is enabled (*note -The Shopt Builtin::), a word beginning with '#' causes that word and all +‘interactive_comments’ option to the ‘shopt’ builtin is enabled (*note +The Shopt Builtin::), a word beginning with ‘#’ causes that word and all remaining characters on that line to be ignored. An interactive shell -without the 'interactive_comments' option enabled does not allow -comments. The 'interactive_comments' option is on by default in +without the ‘interactive_comments’ option enabled does not allow +comments. The ‘interactive_comments’ option is on by default in interactive shells. *Note Interactive Shells::, for a description of what makes a shell interactive. @@ -604,7 +604,7 @@ File: bashref.info, Node: Shell Commands, Next: Shell Functions, Prev: Shell 3.2 Shell Commands ================== -A simple shell command such as 'echo a b c' consists of the command +A simple shell command such as ‘echo a b c’ consists of the command itself followed by arguments, separated by spaces. More complex shell commands are composed of simple commands arranged @@ -635,14 +635,14 @@ are used to begin and end the shell's compound commands. The following words are recognized as reserved when unquoted and the first word of a command (see below for exceptions): -'if' 'then' 'elif' 'else' 'fi' 'time' -'for' 'in' 'until' 'while' 'do' 'done' -'case' 'esac' 'coproc''select''function' -'{' '}' '[[' ']]' '!' +‘if’ ‘then’ ‘elif’ ‘else’ ‘fi’ ‘time’ +‘for’ ‘in’ ‘until’ ‘while’ ‘do’ ‘done’ +‘case’ ‘esac’ ‘coproc’‘select’‘function’ +‘{’ ‘}’ ‘[[’ ‘]]’ ‘!’ -'in' is recognized as a reserved word if it is the third word of a -'case' or 'select' command. 'in' and 'do' are recognized as reserved -words if they are the third word in a 'for' command. +‘in’ is recognized as a reserved word if it is the third word of a +‘case’ or ‘select’ command. ‘in’ and ‘do’ are recognized as reserved +words if they are the third word in a ‘for’ command.  File: bashref.info, Node: Simple Commands, Next: Pipelines, Prev: Reserved Words, Up: Shell Commands @@ -651,13 +651,13 @@ File: bashref.info, Node: Simple Commands, Next: Pipelines, Prev: Reserved Wo --------------------- A simple command is the kind of command encountered most often. It's -just a sequence of words separated by 'blank's, terminated by one of the +just a sequence of words separated by ‘blank’s, terminated by one of the shell's control operators (*note Definitions::). The first word generally specifies a command to be executed, with the rest of the words being that command's arguments. The return status (*note Exit Status::) of a simple command is its -exit status as provided by the POSIX 1003.1 'waitpid' function, or 128+N +exit status as provided by the POSIX 1003.1 ‘waitpid’ function, or 128+N if the command was terminated by signal N.  @@ -666,8 +666,8 @@ File: bashref.info, Node: Pipelines, Next: Lists, Prev: Simple Commands, Up: 3.2.3 Pipelines --------------- -A 'pipeline' is a sequence of one or more commands separated by one of -the control operators '|' or '|&'. +A ‘pipeline’ is a sequence of one or more commands separated by one of +the control operators ‘|’ or ‘|&’. The format for a pipeline is [time [-p]] [!] COMMAND1 [ | or |& COMMAND2 ] ... @@ -677,47 +677,46 @@ the input of the next command. That is, each command reads the previous command's output. This connection is performed before any redirections specified by COMMAND1. - If '|&' is used, COMMAND1's standard error, in addition to its + If ‘|&’ is used, COMMAND1's standard error, in addition to its standard output, is connected to COMMAND2's standard input through the -pipe; it is shorthand for '2>&1 |'. This implicit redirection of the +pipe; it is shorthand for ‘2>&1 |’. This implicit redirection of the standard error to the standard output is performed after any redirections specified by COMMAND1. - The reserved word 'time' causes timing statistics to be printed for + The reserved word ‘time’ causes timing statistics to be printed for the pipeline once it finishes. The statistics currently consist of elapsed (wall-clock) time and user and system time consumed by the -command's execution. The '-p' option changes the output format to that +command's execution. The ‘-p’ option changes the output format to that specified by POSIX. When the shell is in POSIX mode (*note Bash POSIX -Mode::), it does not recognize 'time' as a reserved word if the next -token begins with a '-'. The 'TIMEFORMAT' variable may be set to a +Mode::), it does not recognize ‘time’ as a reserved word if the next +token begins with a ‘-’. The ‘TIMEFORMAT’ variable may be set to a format string that specifies how the timing information should be displayed. *Note Bash Variables::, for a description of the available -formats. The use of 'time' as a reserved word permits the timing of -shell builtins, shell functions, and pipelines. An external 'time' +formats. The use of ‘time’ as a reserved word permits the timing of +shell builtins, shell functions, and pipelines. An external ‘time’ command cannot time these easily. - When the shell is in POSIX mode (*note Bash POSIX Mode::), 'time' may + When the shell is in POSIX mode (*note Bash POSIX Mode::), ‘time’ may be followed by a newline. In this case, the shell displays the total user and system time consumed by the shell and its children. The -'TIMEFORMAT' variable may be used to specify the format of the time -information. +‘TIMEFORMAT’ variable specifies the format of the time information. If the pipeline is not executed asynchronously (*note Lists::), the shell waits for all commands in the pipeline to complete. Each command in a multi-command pipeline, where pipes are created, is -executed in its own "subshell", which is a separate process (*note -Command Execution Environment::). If the 'lastpipe' option is enabled -using the 'shopt' builtin (*note The Shopt Builtin::), the last element +executed in its own “subshell”, which is a separate process (*note +Command Execution Environment::). If the ‘lastpipe’ option is enabled +using the ‘shopt’ builtin (*note The Shopt Builtin::), the last element of a pipeline may be run by the shell process when job control is not active. The exit status of a pipeline is the exit status of the last command -in the pipeline, unless the 'pipefail' option is enabled (*note The Set -Builtin::). If 'pipefail' is enabled, the pipeline's return status is +in the pipeline, unless the ‘pipefail’ option is enabled (*note The Set +Builtin::). If ‘pipefail’ is enabled, the pipeline's return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully. If the reserved word -'!' precedes the pipeline, the exit status is the logical negation of +‘!’ precedes the pipeline, the exit status is the logical negation of the exit status as described above. The shell waits for all commands in the pipeline to terminate before returning a value. @@ -727,31 +726,31 @@ File: bashref.info, Node: Lists, Next: Compound Commands, Prev: Pipelines, U 3.2.4 Lists of Commands ----------------------- -A 'list' is a sequence of one or more pipelines separated by one of the -operators ';', '&', '&&', or '||', and optionally terminated by one of -';', '&', or a 'newline'. +A ‘list’ is a sequence of one or more pipelines separated by one of the +operators ‘;’, ‘&’, ‘&&’, or ‘||’, and optionally terminated by one of +‘;’, ‘&’, or a ‘newline’. - Of these list operators, '&&' and '||' have equal precedence, -followed by ';' and '&', which have equal precedence. + Of these list operators, ‘&&’ and ‘||’ have equal precedence, +followed by ‘;’ and ‘&’, which have equal precedence. - A sequence of one or more newlines may appear in a 'list' to delimit + A sequence of one or more newlines may appear in a ‘list’ to delimit commands, equivalent to a semicolon. - If a command is terminated by the control operator '&', the shell + If a command is terminated by the control operator ‘&’, the shell executes the command asynchronously in a subshell. This is known as -executing the command in the "background", and these are referred to as -"asynchronous" commands. The shell does not wait for the command to +executing the command in the “background”, and these are referred to as +“asynchronous” commands. The shell does not wait for the command to finish, and the return status is 0 (true). When job control is not active (*note Job Control::), the standard input for asynchronous commands, in the absence of any explicit redirections, is redirected -from '/dev/null'. +from ‘/dev/null’. - Commands separated by a ';' are executed sequentially; the shell + Commands separated by a ‘;’ are executed sequentially; the shell waits for each command to terminate in turn. The return status is the exit status of the last command executed. AND and OR lists are sequences of one or more pipelines separated by -the control operators '&&' and '||', respectively. AND and OR lists are +the control operators ‘&&’ and ‘||’, respectively. AND and OR lists are executed with left associativity. An AND list has the form @@ -803,11 +802,11 @@ File: bashref.info, Node: Looping Constructs, Next: Conditional Constructs, U Bash supports the following looping constructs. - Note that wherever a ';' appears in the description of a command's + Note that wherever a ‘;’ appears in the description of a command's syntax, it may be replaced with one or more newlines. -'until' - The syntax of the 'until' command is: +‘until’ + The syntax of the ‘until’ command is: until TEST-COMMANDS; do CONSEQUENT-COMMANDS; done @@ -816,8 +815,8 @@ syntax, it may be replaced with one or more newlines. the last command executed in CONSEQUENT-COMMANDS, or zero if none was executed. -'while' - The syntax of the 'while' command is: +‘while’ + The syntax of the ‘while’ command is: while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done @@ -826,23 +825,23 @@ syntax, it may be replaced with one or more newlines. command executed in CONSEQUENT-COMMANDS, or zero if none was executed. -'for' - The syntax of the 'for' command is: +‘for’ + The syntax of the ‘for’ command is: for NAME [ [in [WORDS ...] ] ; ] do COMMANDS; done Expand WORDS (*note Shell Expansions::), and execute COMMANDS once for each member in the resultant list, with NAME bound to the - current member. If 'in WORDS' is not present, the 'for' command + current member. If ‘in WORDS’ is not present, the ‘for’ command executes the COMMANDS once for each positional parameter that is - set, as if 'in "$@"' had been specified (*note Special + set, as if ‘in "$@"’ had been specified (*note Special Parameters::). The return status is the exit status of the last command that executes. If there are no items in the expansion of WORDS, no commands are executed, and the return status is zero. - An alternate form of the 'for' command is also supported: + An alternate form of the ‘for’ command is also supported: for (( EXPR1 ; EXPR2 ; EXPR3 )) ; do COMMANDS ; done @@ -856,7 +855,7 @@ syntax, it may be replaced with one or more newlines. command in COMMANDS that is executed, or false if any of the expressions is invalid. - The 'break' and 'continue' builtins (*note Bourne Shell Builtins::) + The ‘break’ and ‘continue’ builtins (*note Bourne Shell Builtins::) may be used to control loop execution.  @@ -865,8 +864,8 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre 3.2.5.2 Conditional Constructs .............................. -'if' - The syntax of the 'if' command is: +‘if’ + The syntax of the ‘if’ command is: if TEST-COMMANDS; then CONSEQUENT-COMMANDS; @@ -877,33 +876,33 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre The TEST-COMMANDS list is executed, and if its return status is zero, the CONSEQUENT-COMMANDS list is executed. If TEST-COMMANDS - returns a non-zero status, each 'elif' list is executed in turn, + returns a non-zero status, each ‘elif’ list is executed in turn, and if its exit status is zero, the corresponding MORE-CONSEQUENTS - is executed and the command completes. If 'else - ALTERNATE-CONSEQUENTS' is present, and the final command in the - final 'if' or 'elif' clause has a non-zero exit status, then + is executed and the command completes. If ‘else + ALTERNATE-CONSEQUENTS’ is present, and the final command in the + final ‘if’ or ‘elif’ clause has a non-zero exit status, then ALTERNATE-CONSEQUENTS is executed. The return status is the exit status of the last command executed, or zero if no condition tested true. -'case' - The syntax of the 'case' command is: +‘case’ + The syntax of the ‘case’ command is: case WORD in [ [(] PATTERN [| PATTERN]...) COMMAND-LIST ;;]... esac - 'case' will selectively execute the COMMAND-LIST corresponding to + ‘case’ will selectively execute the COMMAND-LIST corresponding to the first PATTERN that matches WORD. The match is performed according to the rules described below in *note Pattern Matching::. - If the 'nocasematch' shell option (see the description of 'shopt' + If the ‘nocasematch’ shell option (see the description of ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed - without regard to the case of alphabetic characters. The '|' is - used to separate multiple patterns, and the ')' operator terminates + without regard to the case of alphabetic characters. The ‘|’ is + used to separate multiple patterns, and the ‘)’ operator terminates a pattern list. A list of patterns and an associated command-list is known as a CLAUSE. - Each clause must be terminated with ';;', ';&', or ';;&'. The WORD + Each clause must be terminated with ‘;;’, ‘;&’, or ‘;;&’. The WORD undergoes tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal (*note Shell Parameter Expansion::) before matching is attempted. Each PATTERN @@ -911,13 +910,13 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre substitution, arithmetic expansion, process substitution, and quote removal. - There may be an arbitrary number of 'case' clauses, each terminated - by a ';;', ';&', or ';;&'. The first pattern that matches + There may be an arbitrary number of ‘case’ clauses, each terminated + by a ‘;;’, ‘;&’, or ‘;;&’. The first pattern that matches determines the command-list that is executed. It's a common idiom - to use '*' as the final pattern to define the default case, since + to use ‘*’ as the final pattern to define the default case, since that pattern will always match. - Here is an example using 'case' in a script that could be used to + Here is an example using ‘case’ in a script that could be used to describe one interesting feature of an animal: echo -n "Enter the name of an animal: " @@ -930,11 +929,10 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre esac echo " legs." - - If the ';;' operator is used, no subsequent matches are attempted - after the first pattern match. Using ';&' in place of ';;' causes + If the ‘;;’ operator is used, no subsequent matches are attempted + after the first pattern match. Using ‘;&’ in place of ‘;;’ causes execution to continue with the COMMAND-LIST associated with the - next clause, if any. Using ';;&' in place of ';;' causes the shell + next clause, if any. Using ‘;;&’ in place of ‘;;’ causes the shell to test the patterns in the next clause, if any, and execute any associated COMMAND-LIST on a successful match, continuing the case statement execution as if the pattern list had not matched. @@ -942,27 +940,27 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre The return status is zero if no PATTERN is matched. Otherwise, the return status is the exit status of the COMMAND-LIST executed. -'select' +‘select’ - The 'select' construct allows the easy generation of menus. It has - almost the same syntax as the 'for' command: + The ‘select’ construct allows the easy generation of menus. It has + almost the same syntax as the ‘for’ command: select NAME [in WORDS ...]; do COMMANDS; done - The list of words following 'in' is expanded, generating a list of + The list of words following ‘in’ is expanded, generating a list of items, and the set of expanded words is printed on the standard - error output stream, each preceded by a number. If the 'in WORDS' - is omitted, the positional parameters are printed, as if 'in "$@"' - had been specified. 'select' then displays the 'PS3' prompt and + error output stream, each preceded by a number. If the ‘in WORDS’ + is omitted, the positional parameters are printed, as if ‘in "$@"’ + had been specified. ‘select’ then displays the ‘PS3’ prompt and reads a line from the standard input. If the line consists of a number corresponding to one of the displayed words, then the value of NAME is set to that word. If the line is empty, the words and - prompt are displayed again. If 'EOF' is read, the 'select' command + prompt are displayed again. If ‘EOF’ is read, the ‘select’ command completes and returns 1. Any other value read causes NAME to be - set to null. The line read is saved in the variable 'REPLY'. + set to null. The line read is saved in the variable ‘REPLY’. - The COMMANDS are executed after each selection until a 'break' - command is executed, at which point the 'select' command completes. + The COMMANDS are executed after each selection until a ‘break’ + command is executed, at which point the ‘select’ command completes. Here is an example that allows the user to pick a filename from the current directory, and displays the name and index of the file @@ -974,7 +972,7 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre break; done -'((...))' +‘((...))’ (( EXPRESSION )) The arithmetic EXPRESSION is evaluated according to the rules @@ -984,47 +982,47 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre are removed. If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. -'[[...]]' +‘[[...]]’ [[ EXPRESSION ]] Return a status of 0 or 1 depending on the evaluation of the conditional expression EXPRESSION. Expressions are composed of the primaries described below in *note Bash Conditional Expressions::. - The words between the '[[' and ']]' do not undergo word splitting + The words between the ‘[[’ and ‘]]’ do not undergo word splitting and filename expansion. The shell performs tilde expansion, parameter and variable expansion, arithmetic expansion, command substitution, process substitution, and quote removal on those words (the expansions that would occur if the words were enclosed - in double quotes). Conditional operators such as '-f' must be + in double quotes). Conditional operators such as ‘-f’ must be unquoted to be recognized as primaries. - When used with '[[', the '<' and '>' operators sort + When used with ‘[[’, the ‘<’ and ‘>’ operators sort lexicographically using the current locale. - When the '==' and '!=' operators are used, the string to the right + When the ‘==’ and ‘!=’ operators are used, the string to the right of the operator is considered a pattern and matched according to the rules described below in *note Pattern Matching::, as if the - 'extglob' shell option were enabled. The '=' operator is identical - to '=='. If the 'nocasematch' shell option (see the description of - 'shopt' in *note The Shopt Builtin::) is enabled, the match is + ‘extglob’ shell option were enabled. The ‘=’ operator is identical + to ‘==’. If the ‘nocasematch’ shell option (see the description of + ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. The - return value is 0 if the string matches ('==') or does not match - ('!=') the pattern, and 1 otherwise. + return value is 0 if the string matches (‘==’) or does not match + (‘!=’) the pattern, and 1 otherwise. If you quote any part of the pattern, using any of the shell's quoting mechanisms, the quoted portion is matched literally. This means every character in the quoted portion matches itself, instead of having any special pattern matching meaning. - An additional binary operator, '=~', is available, with the same - precedence as '==' and '!='. When you use '=~', the string to the + An additional binary operator, ‘=~’, is available, with the same + precedence as ‘==’ and ‘!=’. When you use ‘=~’, the string to the right of the operator is considered a POSIX extended regular expression pattern and matched accordingly (using the POSIX - 'regcomp' and 'regexec' interfaces usually described in regex(3)). + ‘regcomp’ and ‘regexec’ interfaces usually described in regex(3)). The return value is 0 if the string matches the pattern, and 1 if it does not. If the regular expression is syntactically incorrect, - the conditional expression returns 2. If the 'nocasematch' shell - option (see the description of 'shopt' in *note The Shopt + the conditional expression returns 2. If the ‘nocasematch’ shell + option (see the description of ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. @@ -1036,39 +1034,39 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre The pattern will match if it matches any part of the string. If you want to force the pattern to match the entire string, anchor - the pattern using the '^' and '$' regular expression operators. + the pattern using the ‘^’ and ‘$’ regular expression operators. For example, the following will match a line (stored in the shell - variable 'line') if there is a sequence of characters anywhere in + variable ‘line’) if there is a sequence of characters anywhere in the value consisting of any number, including zero, of characters - in the 'space' character class, immediately followed by zero or one - instances of 'a', then a 'b': + in the ‘space’ character class, immediately followed by zero or one + instances of ‘a’, then a ‘b’: [[ $line =~ [[:space:]]*(a)?b ]] - That means values for 'line' like 'aab', ' aaaaaab', 'xaby', and ' - ab' will all match, as will a line containing a 'b' anywhere in its + That means values for ‘line’ like ‘aab’, ‘ aaaaaab’, ‘xaby’, and ‘ + ab’ will all match, as will a line containing a ‘b’ anywhere in its value. If you want to match a character that's special to the regular - expression grammar ('^$|[]()\.*+?'), it has to be quoted to remove - its special meaning. This means that in the pattern 'xxx.txt', the - '.' matches any character in the string (its usual regular - expression meaning), but in the pattern '"xxx.txt"', it can only - match a literal '.'. + expression grammar (‘^$|[]()\.*+?’), it has to be quoted to remove + its special meaning. This means that in the pattern ‘xxx.txt’, the + ‘.’ matches any character in the string (its usual regular + expression meaning), but in the pattern ‘"xxx.txt"’, it can only + match a literal ‘.’. Likewise, if you want to include a character in your pattern that has a special meaning to the regular expression grammar, you must make sure it's not quoted. If you want to anchor a pattern at the beginning or end of the string, for instance, you cannot quote the - '^' or '$' characters using any form of shell quoting. + ‘^’ or ‘$’ characters using any form of shell quoting. - If you want to match 'initial string' at the start of a line, the + If you want to match ‘initial string’ at the start of a line, the following will work: [[ $line =~ ^"initial string" ]] but this will not: [[ $line =~ "^initial string" ]] - because in the second example the '^' is quoted and doesn't have + because in the second example the ‘^’ is quoted and doesn't have its usual special meaning. It is sometimes difficult to specify a regular expression properly @@ -1106,13 +1104,13 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre The first two matches will succeed, but the second two will not, because in the second two the backslash will be part of the pattern to be matched. In the first two examples, the pattern passed to - the regular expression parser is '\.'. The backslash removes the - special meaning from '.', so the literal '.' matches. In the + the regular expression parser is ‘\.’. The backslash removes the + special meaning from ‘.’, so the literal ‘.’ matches. In the second two examples, the pattern passed to the regular expression - parser has the backslash quoted (e.g., '\\\.'), which will not + parser has the backslash quoted (e.g., ‘\\\.’), which will not match the string, since it does not contain a backslash. If the - string in the first examples were anything other than '.', say 'a', - the pattern would not match, because the quoted '.' in the pattern + string in the first examples were anything other than ‘.’, say ‘a’, + the pattern would not match, because the quoted ‘.’ in the pattern loses its special meaning of matching any single character. Bracket expressions in regular expressions can be sources of errors @@ -1123,7 +1121,7 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre purpose. Though it might seem like a strange way to write it, the following - pattern will match a '.' in the string: + pattern will match a ‘.’ in the string: [[ . =~ [.] ]] @@ -1136,35 +1134,35 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre twice as much as possible, so shell quoting should be sufficient to quote special pattern characters where that's necessary. - The array variable 'BASH_REMATCH' records which parts of the string - matched the pattern. The element of 'BASH_REMATCH' with index 0 + The array variable ‘BASH_REMATCH’ records which parts of the string + matched the pattern. The element of ‘BASH_REMATCH’ with index 0 contains the portion of the string matching the entire regular expression. Substrings matched by parenthesized subexpressions within the regular expression are saved in the remaining - 'BASH_REMATCH' indices. The element of 'BASH_REMATCH' with index N + ‘BASH_REMATCH’ indices. The element of ‘BASH_REMATCH’ with index N is the portion of the string matching the Nth parenthesized subexpression. - Bash sets 'BASH_REMATCH' in the global scope; declaring it as a + Bash sets ‘BASH_REMATCH’ in the global scope; declaring it as a local variable will lead to unexpected results. Expressions may be combined using the following operators, listed in decreasing order of precedence: - '( EXPRESSION )' + ‘( EXPRESSION )’ Returns the value of EXPRESSION. This may be used to override the normal precedence of operators. - '! EXPRESSION' + ‘! EXPRESSION’ True if EXPRESSION is false. - 'EXPRESSION1 && EXPRESSION2' + ‘EXPRESSION1 && EXPRESSION2’ True if both EXPRESSION1 and EXPRESSION2 are true. - 'EXPRESSION1 || EXPRESSION2' + ‘EXPRESSION1 || EXPRESSION2’ True if either EXPRESSION1 or EXPRESSION2 is true. - The '&&' and '||' operators do not evaluate EXPRESSION2 if the + The ‘&&’ and ‘||’ operators do not evaluate EXPRESSION2 if the value of EXPRESSION1 is sufficient to determine the return value of the entire conditional expression. @@ -1179,7 +1177,7 @@ unit. When commands are grouped, redirections may be applied to the entire command list. For example, the output of all the commands in the list may be redirected to a single stream. -'()' +‘()’ ( LIST ) Placing a list of commands between parentheses forces the shell to @@ -1188,7 +1186,7 @@ list may be redirected to a single stream. Since the LIST is executed in a subshell, variable assignments do not remain in effect after the subshell completes. -'{}' +‘{}’ { LIST; } Placing a list of commands between curly braces causes the list to @@ -1198,7 +1196,7 @@ list may be redirected to a single stream. In addition to the creation of a subshell, there is a subtle difference between these two constructs due to historical reasons. The braces are reserved words, so they must be separated from the LIST by -'blank's or other shell metacharacters. The parentheses are operators, +‘blank’s or other shell metacharacters. The parentheses are operators, and are recognized as separate tokens by the shell even if they are not separated from the LIST by whitespace. @@ -1211,9 +1209,9 @@ File: bashref.info, Node: Coprocesses, Next: GNU Parallel, Prev: Compound Com 3.2.6 Coprocesses ----------------- -A 'coprocess' is a shell command preceded by the 'coproc' reserved word. +A ‘coprocess’ is a shell command preceded by the ‘coproc’ reserved word. A coprocess is executed asynchronously in a subshell, as if the command -had been terminated with the '&' control operator, with a two-way pipe +had been terminated with the ‘&’ control operator, with a two-way pipe established between the executing shell and the coprocess. The syntax for a coprocess is: @@ -1223,14 +1221,14 @@ established between the executing shell and the coprocess. This creates a coprocess named NAME. COMMAND may be either a simple command (*note Simple Commands::) or a compound command (*note Compound Commands::). NAME is a shell variable name. If NAME is not supplied, -the default name is 'COPROC'. +the default name is ‘COPROC’. The recommended form to use for a coprocess is coproc NAME { COMMAND; } This form is recommended because simple commands result in the coprocess -always being named 'COPROC', and it is simpler to use and more complete +always being named ‘COPROC’, and it is simpler to use and more complete than the other compound commands. There are other forms of coprocesses: @@ -1240,7 +1238,7 @@ than the other compound commands. coproc SIMPLE-COMMAND If COMMAND is a compound command, NAME is optional. The word following -'coproc' determines whether that word is interpreted as a variable name: +‘coproc’ determines whether that word is interpreted as a variable name: it is interpreted as NAME if it is not a reserved word that introduces a compound command. If COMMAND is a simple command, NAME is not allowed; this is to avoid confusion between NAME and the first word of the simple @@ -1260,11 +1258,11 @@ process substitutions, the file descriptors are not available in subshells. The process ID of the shell spawned to execute the coprocess is -available as the value of the variable 'NAME_PID'. The 'wait' builtin +available as the value of the variable ‘NAME_PID’. The ‘wait’ builtin command may be used to wait for the coprocess to terminate. Since the coprocess is created as an asynchronous command, the -'coproc' command always returns success. The return status of a +‘coproc’ command always returns success. The return status of a coprocess is the exit status of COMMAND.  @@ -1282,7 +1280,7 @@ arguments, whether they are filenames, usernames, hostnames, or lines read from files. GNU Parallel provides shorthand references to many of the most common operations (input lines, various portions of the input line, different ways to specify the input source, and so on). Parallel -can replace 'xargs' or feed commands from its input sources to several +can replace ‘xargs’ or feed commands from its input sources to several different instances of Bash. For a complete description, refer to the GNU Parallel documentation, @@ -1310,20 +1308,20 @@ new process is created to interpret them. function FNAME [()] COMPOUND-COMMAND [ REDIRECTIONS ] This defines a shell function named FNAME. The reserved word -'function' is optional. If the 'function' reserved word is supplied, -the parentheses are optional. The "body" of the function is the +‘function’ is optional. If the ‘function’ reserved word is supplied, +the parentheses are optional. The “body” of the function is the compound command COMPOUND-COMMAND (*note Compound Commands::). That command is usually a LIST enclosed between { and }, but may be any -compound command listed above. If the 'function' reserved word is used, +compound command listed above. If the ‘function’ reserved word is used, but the parentheses are not supplied, the braces are recommended. COMPOUND-COMMAND is executed whenever FNAME is specified as the name of a simple command. When the shell is in POSIX mode (*note Bash POSIX Mode::), FNAME must be a valid shell name and may not be the same as one of the special builtins (*note Special Builtins::). In default mode, a -function name can be any unquoted shell word that does not contain '$'. +function name can be any unquoted shell word that does not contain ‘$’. Any redirections (*note Redirections::) associated with the shell function are performed when the function is executed. A function -definition may be deleted using the '-f' option to the 'unset' builtin +definition may be deleted using the ‘-f’ option to the ‘unset’ builtin (*note Bourne Shell Builtins::). The exit status of a function definition is zero unless a syntax @@ -1333,55 +1331,55 @@ last command executed in the body. Note that for historical reasons, in the most common usage the curly braces that surround the body of the function must be separated from the -body by 'blank's or newlines. This is because the braces are reserved +body by ‘blank’s or newlines. This is because the braces are reserved words and are only recognized as such when they are separated from the command list by whitespace or another shell metacharacter. Also, when -using the braces, the LIST must be terminated by a semicolon, a '&', or +using the braces, the LIST must be terminated by a semicolon, a ‘&’, or a newline. When a function is executed, the arguments to the function become the positional parameters during its execution (*note Positional -Parameters::). The special parameter '#' that expands to the number of +Parameters::). The special parameter ‘#’ that expands to the number of positional parameters is updated to reflect the change. Special -parameter '0' is unchanged. The first element of the 'FUNCNAME' +parameter ‘0’ is unchanged. The first element of the ‘FUNCNAME’ variable is set to the name of the function while the function is executing. All other aspects of the shell execution environment are identical -between a function and its caller with these exceptions: the 'DEBUG' and -'RETURN' traps are not inherited unless the function has been given the -'trace' attribute using the 'declare' builtin or the '-o functrace' -option has been enabled with the 'set' builtin, (in which case all -functions inherit the 'DEBUG' and 'RETURN' traps), and the 'ERR' trap is -not inherited unless the '-o errtrace' shell option has been enabled. -*Note Bourne Shell Builtins::, for the description of the 'trap' +between a function and its caller with these exceptions: the ‘DEBUG’ and +‘RETURN’ traps are not inherited unless the function has been given the +‘trace’ attribute using the ‘declare’ builtin or the ‘-o functrace’ +option has been enabled with the ‘set’ builtin, (in which case all +functions inherit the ‘DEBUG’ and ‘RETURN’ traps), and the ‘ERR’ trap is +not inherited unless the ‘-o errtrace’ shell option has been enabled. +*Note Bourne Shell Builtins::, for the description of the ‘trap’ builtin. - The 'FUNCNEST' variable, if set to a numeric value greater than 0, + The ‘FUNCNEST’ variable, if set to a numeric value greater than 0, defines a maximum function nesting level. Function invocations that exceed the limit cause the entire command to abort. - If the builtin command 'return' is executed in a function, the + If the builtin command ‘return’ is executed in a function, the function completes and execution resumes with the next command after the -function call. Any command associated with the 'RETURN' trap is +function call. Any command associated with the ‘RETURN’ trap is executed before execution resumes. When a function completes, the -values of the positional parameters and the special parameter '#' are +values of the positional parameters and the special parameter ‘#’ are restored to the values they had prior to the function's execution. If a -numeric argument is given to 'return', that is the function's return +numeric argument is given to ‘return’, that is the function's return status; otherwise the function's return status is the exit status of the -last command executed before the 'return'. +last command executed before the ‘return’. - Variables local to the function may be declared with the 'local' -builtin ("local variables"). Ordinarily, variables and their values are + Variables local to the function may be declared with the ‘local’ +builtin (“local variables”). Ordinarily, variables and their values are shared between a function and its caller. These variables are visible only to the function and the commands it invokes. This is particularly important when a shell function calls other functions. - In the following description, the "current scope" is a currently- + In the following description, the “current scope” is a currently- executing function. Previous scopes consist of that function's caller and so on, back to the "global" scope, where the shell is not executing any shell function. Consequently, a local variable at the current local -scope is a variable declared using the 'local' or 'declare' builtins in +scope is a variable declared using the ‘local’ or ‘declare’ builtins in the function that is currently executing. Local variables "shadow" variables with the same name declared at @@ -1390,19 +1388,19 @@ hides a global variable of the same name: references and assignments refer to the local variable, leaving the global variable unmodified. When the function returns, the global variable is once again visible. - The shell uses "dynamic scoping" to control a variable's visibility + The shell uses “dynamic scoping” to control a variable's visibility within functions. With dynamic scoping, visible variables and their values are a result of the sequence of function calls that caused execution to reach the current function. The value of a variable that a function sees depends on its value within its caller, if any, whether -that caller is the "global" scope or another shell function. This is -also the value that a local variable declaration "shadows", and the -value that is restored when the function returns. +that caller is the global scope or another shell function. This is also +the value that a local variable declaration shadows, and the value that +is restored when the function returns. - For example, if a variable 'var' is declared as local in function -'func1', and 'func1' calls another function 'func2', references to 'var' -made from within 'func2' will resolve to the local variable 'var' from -'func1', shadowing any global variable named 'var'. + For example, if a variable ‘var’ is declared as local in function +‘func1’, and ‘func1’ calls another function ‘func2’, references to ‘var’ +made from within ‘func2’ will resolve to the local variable ‘var’ from +‘func1’, shadowing any global variable named ‘var’. The following script demonstrates this behavior. When executed, the script displays @@ -1423,8 +1421,8 @@ script displays var=global func1 - The 'unset' builtin also acts using the same dynamic scope: if a -variable is local to the current scope, 'unset' will unset it; otherwise + The ‘unset’ builtin also acts using the same dynamic scope: if a +variable is local to the current scope, ‘unset’ will unset it; otherwise the unset will refer to the variable found in any calling scope as described above. If a variable at the current local scope is unset, it will remain so (appearing as unset) until it is reset in that scope or @@ -1432,18 +1430,18 @@ until the function returns. Once the function returns, any instance of the variable at a previous scope will become visible. If the unset acts on a variable at a previous scope, any instance of a variable with that name that had been shadowed will become visible (see below how -'localvar_unset'shell option changes this behavior). +‘localvar_unset’shell option changes this behavior). - Function names and definitions may be listed with the '-f' option to -the 'declare' ('typeset') builtin command (*note Bash Builtins::). The -'-F' option to 'declare' or 'typeset' will list the function names only -(and optionally the source file and line number, if the 'extdebug' shell + Function names and definitions may be listed with the ‘-f’ option to +the ‘declare’ (‘typeset’) builtin command (*note Bash Builtins::). The +‘-F’ option to ‘declare’ or ‘typeset’ will list the function names only +(and optionally the source file and line number, if the ‘extdebug’ shell option is enabled). Functions may be exported so that child shell processes (those created when executing a separate shell invocation) -automatically have them defined with the '-f' option to the 'export' +automatically have them defined with the ‘-f’ option to the ‘export’ builtin (*note Bourne Shell Builtins::). - Functions may be recursive. The 'FUNCNEST' variable may be used to + Functions may be recursive. The ‘FUNCNEST’ variable may be used to limit the depth of the function call stack and restrict the number of function invocations. By default, no limit is placed on the number of recursive calls. @@ -1459,50 +1457,50 @@ File: bashref.info, Node: Shell Parameters, Next: Shell Expansions, Prev: She * Positional Parameters:: The shell's command-line arguments. * Special Parameters:: Parameters denoted by special characters. -A "parameter" is an entity that stores values. It can be a 'name', a -number, or one of the special characters listed below. A "variable" is -a parameter denoted by a 'name'. A variable has a 'value' and zero or -more 'attributes'. Attributes are assigned using the 'declare' builtin -command (see the description of the 'declare' builtin in *note Bash +A “parameter” is an entity that stores values. It can be a ‘name’, a +number, or one of the special characters listed below. A “variable” is +a parameter denoted by a ‘name’. A variable has a ‘value’ and zero or +more ‘attributes’. Attributes are assigned using the ‘declare’ builtin +command (see the description of the ‘declare’ builtin in *note Bash Builtins::). A parameter is set if it has been assigned a value. The null string is a valid value. Once a variable is set, it may be unset only by using -the 'unset' builtin command. +the ‘unset’ builtin command. A variable may be assigned to by a statement of the form NAME=[VALUE] If VALUE is not given, the variable is assigned the null string. All VALUEs undergo tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, and quote removal (*note -Shell Parameter Expansion::). If the variable has its 'integer' +Shell Parameter Expansion::). If the variable has its ‘integer’ attribute set, then VALUE is evaluated as an arithmetic expression even -if the '$((...))' expansion is not used (*note Arithmetic Expansion::). +if the ‘$((...))’ expansion is not used (*note Arithmetic Expansion::). Word splitting and filename expansion are not performed. Assignment -statements may also appear as arguments to the 'alias', 'declare', -'typeset', 'export', 'readonly', and 'local' builtin commands -("declaration" commands). When in POSIX mode (*note Bash POSIX Mode::), +statements may also appear as arguments to the ‘alias’, ‘declare’, +‘typeset’, ‘export’, ‘readonly’, and ‘local’ builtin commands +(“declaration” commands). When in POSIX mode (*note Bash POSIX Mode::), these builtins may appear in a command after one or more instances of -the 'command' builtin and retain these assignment statement properties. +the ‘command’ builtin and retain these assignment statement properties. In the context where an assignment statement is assigning a value to -a shell variable or array index (*note Arrays::), the '+=' operator can +a shell variable or array index (*note Arrays::), the ‘+=’ operator can be used to append to or add to the variable's previous value. This -includes arguments to builtin commands such as 'declare' that accept -assignment statements (declaration commands). When '+=' is applied to a -variable for which the 'integer' attribute has been set, VALUE is +includes arguments to builtin commands such as ‘declare’ that accept +assignment statements (declaration commands). When ‘+=’ is applied to a +variable for which the ‘integer’ attribute has been set, VALUE is evaluated as an arithmetic expression and added to the variable's -current value, which is also evaluated. When '+=' is applied to an +current value, which is also evaluated. When ‘+=’ is applied to an array variable using compound assignment (*note Arrays::), the -variable's value is not unset (as it is when using '='), and new values +variable's value is not unset (as it is when using ‘=’), and new values are appended to the array beginning at one greater than the array's maximum index (for indexed arrays), or added as additional key-value pairs in an associative array. When applied to a string-valued variable, VALUE is expanded and appended to the variable's value. - A variable can be assigned the 'nameref' attribute using the '-n' -option to the 'declare' or 'local' builtin commands (*note Bash -Builtins::) to create a "nameref", or a reference to another variable. + A variable can be assigned the ‘nameref’ attribute using the ‘-n’ +option to the ‘declare’ or ‘local’ builtin commands (*note Bash +Builtins::) to create a “nameref”, or a reference to another variable. This allows variables to be manipulated indirectly. Whenever the nameref variable is referenced, assigned to, unset, or has its attributes modified (other than using or changing the nameref attribute @@ -1512,19 +1510,19 @@ shell functions to refer to a variable whose name is passed as an argument to the function. For instance, if a variable name is passed to a shell function as its first argument, running declare -n ref=$1 -inside the function creates a nameref variable 'ref' whose value is the +inside the function creates a nameref variable ‘ref’ whose value is the variable name passed as the first argument. References and assignments -to 'ref', and changes to its attributes, are treated as references, +to ‘ref’, and changes to its attributes, are treated as references, assignments, and attribute modifications to the variable whose name was -passed as '$1'. +passed as ‘$1’. - If the control variable in a 'for' loop has the nameref attribute, + If the control variable in a ‘for’ loop has the nameref attribute, the list of words can be a list of shell variables, and a name reference will be established for each word in the list, in turn, when the loop is executed. Array variables cannot be given the nameref attribute. However, nameref variables can reference array variables and subscripted -array variables. Namerefs can be unset using the '-n' option to the -'unset' builtin (*note Bourne Shell Builtins::). Otherwise, if 'unset' +array variables. Namerefs can be unset using the ‘-n’ option to the +‘unset’ builtin (*note Bourne Shell Builtins::). Otherwise, if ‘unset’ is executed with the name of a nameref variable as an argument, the variable referenced by the nameref variable will be unset. @@ -1534,13 +1532,13 @@ File: bashref.info, Node: Positional Parameters, Next: Special Parameters, Up 3.4.1 Positional Parameters --------------------------- -A "positional parameter" is a parameter denoted by one or more digits, -other than the single digit '0'. Positional parameters are assigned +A “positional parameter” is a parameter denoted by one or more digits, +other than the single digit ‘0’. Positional parameters are assigned from the shell's arguments when it is invoked, and may be reassigned -using the 'set' builtin command. Positional parameter 'N' may be -referenced as '${N}', or as '$N' when 'N' consists of a single digit. +using the ‘set’ builtin command. Positional parameter ‘N’ may be +referenced as ‘${N}’, or as ‘$N’ when ‘N’ consists of a single digit. Positional parameters may not be assigned to with assignment statements. -The 'set' and 'shift' builtins are used to set and unset them (*note +The ‘set’ and ‘shift’ builtins are used to set and unset them (*note Shell Builtin Commands::). The positional parameters are temporarily replaced when a shell function is executed (*note Shell Functions::). @@ -1556,20 +1554,20 @@ File: bashref.info, Node: Special Parameters, Prev: Positional Parameters, Up The shell treats several parameters specially. These parameters may only be referenced; assignment to them is not allowed. -'*' +‘*’ ($*) Expands to the positional parameters, starting from one. When the expansion is not within double quotes, each positional parameter expands to a separate word. In contexts where it is performed, those words are subject to further word splitting and filename expansion. When the expansion occurs within double quotes, it expands to a single word with the value of each - parameter separated by the first character of the 'IFS' special - variable. That is, '"$*"' is equivalent to '"$1C$2C..."', where C - is the first character of the value of the 'IFS' variable. If - 'IFS' is unset, the parameters are separated by spaces. If 'IFS' + parameter separated by the first character of the ‘IFS’ special + variable. That is, ‘"$*"’ is equivalent to ‘"$1C$2C..."’, where C + is the first character of the value of the ‘IFS’ variable. If + ‘IFS’ is unset, the parameters are separated by spaces. If ‘IFS’ is null, the parameters are joined without intervening separators. -'@' +‘@’ ($@) Expands to the positional parameters, starting from one. In contexts where word splitting is performed, this expands each positional parameter to a separate word; if not within double @@ -1578,41 +1576,41 @@ only be referenced; assignment to them is not allowed. word with each positional parameter separated by a space. When the expansion occurs within double quotes, and word splitting is performed, each parameter expands to a separate word. That is, - '"$@"' is equivalent to '"$1" "$2" ...'. If the double-quoted + ‘"$@"’ is equivalent to ‘"$1" "$2" ...’. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. When there are no positional - parameters, '"$@"' and '$@' expand to nothing (i.e., they are + parameters, ‘"$@"’ and ‘$@’ expand to nothing (i.e., they are removed). -'#' +‘#’ ($#) Expands to the number of positional parameters in decimal. -'?' +‘?’ ($?) Expands to the exit status of the most recently executed foreground pipeline. -'-' +‘-’ ($-, a hyphen.) Expands to the current option flags as specified - upon invocation, by the 'set' builtin command, or those set by the - shell itself (such as the '-i' option). + upon invocation, by the ‘set’ builtin command, or those set by the + shell itself (such as the ‘-i’ option). -'$' +‘$’ ($$) Expands to the process ID of the shell. In a subshell, it expands to the process ID of the invoking shell, not the subshell. -'!' +‘!’ ($!) Expands to the process ID of the job most recently placed into the background, whether executed as an asynchronous command or - using the 'bg' builtin (*note Job Control Builtins::). + using the ‘bg’ builtin (*note Job Control Builtins::). -'0' +‘0’ ($0) Expands to the name of the shell or shell script. This is set at shell initialization. If Bash is invoked with a file of - commands (*note Shell Scripts::), '$0' is set to the name of that - file. If Bash is started with the '-c' option (*note Invoking - Bash::), then '$0' is set to the first argument after the string to + commands (*note Shell Scripts::), ‘$0’ is set to the name of that + file. If Bash is started with the ‘-c’ option (*note Invoking + Bash::), then ‘$0’ is set to the first argument after the string to be executed, if one is present. Otherwise, it is set to the filename used to invoke Bash, as given by argument zero. @@ -1623,15 +1621,16 @@ File: bashref.info, Node: Shell Expansions, Next: Redirections, Prev: Shell P ==================== Expansion is performed on the command line after it has been split into -'token's. There are seven kinds of expansion performed: +‘token’s. Bash performs these expansions: - * brace expansion - * tilde expansion - * parameter and variable expansion - * command substitution - * arithmetic expansion - * word splitting - * filename expansion + • brace expansion + • tilde expansion + • parameter and variable expansion + • command substitution + • arithmetic expansion + • word splitting + • filename expansion + • quote removal * Menu: @@ -1650,26 +1649,24 @@ Expansion is performed on the command line after it has been split into The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command -substitution (done in a left-to-right fashion); word splitting; and -filename expansion. +substitution (done in a left-to-right fashion); word splitting; filename +expansion; and quote removal. On systems that can support it, there is an additional expansion -available: "process substitution". This is performed at the same time +available: “process substitution”. This is performed at the same time as tilde, parameter, variable, and arithmetic expansion and command substitution. - After these expansions are performed, quote characters present in the -original word are removed unless they have been quoted themselves -("quote removal"). + “Quote removal” is always performed last. It removes quote +characters present in the original word, not ones resulting from one of +the other expansions, unless they have been quoted themselves. *Note +Quote Removal:: for more details. Only brace expansion, word splitting, and filename expansion can increase the number of words of the expansion; other expansions expand a single word to a single word. The only exceptions to this are the -expansions of '"$@"' and '$*' (*note Special Parameters::), and -'"${NAME[@]}"' and '${NAME[*]}' (*note Arrays::). - - After all expansions, 'quote removal' (*note Quote Removal::) is -performed. +expansions of ‘"$@"’ and ‘$*’ (*note Special Parameters::), and +‘"${NAME[@]}"’ and ‘${NAME[*]}’ (*note Arrays::).  File: bashref.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell Expansions @@ -1678,7 +1675,7 @@ File: bashref.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell E --------------------- Brace expansion is a mechanism by which arbitrary strings may be -generated. This mechanism is similar to "filename expansion" (*note +generated. This mechanism is similar to “filename expansion” (*note Filename Expansion::), but the filenames generated need not exist. Patterns to be brace expanded take the form of an optional PREAMBLE, followed by either a series of comma-separated strings or a sequence @@ -1692,18 +1689,17 @@ are not sorted; left to right order is preserved. For example, bash$ echo a{d,c,b}e ade ace abe - A sequence expression takes the form '{X..Y[..INCR]}', where X and Y + A sequence expression takes the form ‘{X..Y[..INCR]}’, where X and Y are either integers or letters, and INCR, an optional increment, is an integer. When integers are supplied, the expression expands to each -number between X and Y, inclusive. Supplied integers may be prefixed -with '0' to force each term to have the same width. When either X or Y -begins with a zero, the shell attempts to force all generated terms to -contain the same number of digits, zero-padding where necessary. When -letters are supplied, the expression expands to each character -lexicographically between X and Y, inclusive, using the default C -locale. Note that both X and Y must be of the same type (integer or -letter). When the increment is supplied, it is used as the difference -between each term. The default increment is 1 or -1 as appropriate. +number between X and Y, inclusive. When either X or Y begins with a +zero, the shell attempts to force all generated terms to contain the +same number of digits, zero-padding where necessary. When letters are +supplied, the expression expands to each character lexicographically +between X and Y, inclusive, using the default C locale. Note that both +X and Y must be of the same type (integer or letter). When the +increment is supplied, it is used as the difference between each term. +The default increment is 1 or -1 as appropriate. Brace expansion is performed before any other expansions, and any characters special to other expansions are preserved in the result. It @@ -1714,10 +1710,10 @@ to the context of the expansion or the text between the braces. closing braces, and at least one unquoted comma or a valid sequence expression. Any incorrectly formed brace expansion is left unchanged. - A { or ',' may be quoted with a backslash to prevent its being + A { or ‘,’ may be quoted with a backslash to prevent its being considered part of a brace expression. To avoid conflicts with -parameter expansion, the string '${' is not considered eligible for -brace expansion, and inhibits brace expansion until the closing '}'. +parameter expansion, the string ‘${’ is not considered eligible for +brace expansion, and inhibits brace expansion until the closing ‘}’. This construct is typically used as shorthand when the common prefix of the strings to be generated is longer than in the above example: @@ -1731,62 +1727,62 @@ File: bashref.info, Node: Tilde Expansion, Next: Shell Parameter Expansion, P 3.5.2 Tilde Expansion --------------------- -If a word begins with an unquoted tilde character ('~'), all of the +If a word begins with an unquoted tilde character (‘~’), all of the characters up to the first unquoted slash (or all characters, if there -is no unquoted slash) are considered a "tilde-prefix". If none of the +is no unquoted slash) are considered a “tilde-prefix”. If none of the characters in the tilde-prefix are quoted, the characters in the -tilde-prefix following the tilde are treated as a possible "login name". +tilde-prefix following the tilde are treated as a possible “login name”. If this login name is the null string, the tilde is replaced with the -value of the 'HOME' shell variable. If 'HOME' is unset, the home +value of the ‘HOME’ shell variable. If ‘HOME’ is unset, the home directory of the user executing the shell is substituted instead. Otherwise, the tilde-prefix is replaced with the home directory associated with the specified login name. - If the tilde-prefix is '~+', the value of the shell variable 'PWD' -replaces the tilde-prefix. If the tilde-prefix is '~-', the value of -the shell variable 'OLDPWD', if it is set, is substituted. + If the tilde-prefix is ‘~+’, the value of the shell variable ‘PWD’ +replaces the tilde-prefix. If the tilde-prefix is ‘~-’, the value of +the shell variable ‘OLDPWD’, if it is set, is substituted. If the characters following the tilde in the tilde-prefix consist of -a number N, optionally prefixed by a '+' or a '-', the tilde-prefix is +a number N, optionally prefixed by a ‘+’ or a ‘-’, the tilde-prefix is replaced with the corresponding element from the directory stack, as it -would be displayed by the 'dirs' builtin invoked with the characters +would be displayed by the ‘dirs’ builtin invoked with the characters following tilde in the tilde-prefix as an argument (*note The Directory Stack::). If the tilde-prefix, sans the tilde, consists of a number -without a leading '+' or '-', '+' is assumed. +without a leading ‘+’ or ‘-’, ‘+’ is assumed. If the login name is invalid, or the tilde expansion fails, the word is left unchanged. Each variable assignment is checked for unquoted tilde-prefixes -immediately following a ':' or the first '='. In these cases, tilde +immediately following a ‘:’ or the first ‘=’. In these cases, tilde expansion is also performed. Consequently, one may use filenames with -tildes in assignments to 'PATH', 'MAILPATH', and 'CDPATH', and the shell +tildes in assignments to ‘PATH’, ‘MAILPATH’, and ‘CDPATH’, and the shell assigns the expanded value. The following table shows how Bash treats unquoted tilde-prefixes: -'~' - The value of '$HOME' -'~/foo' - '$HOME/foo' +‘~’ + The value of ‘$HOME’ +‘~/foo’ + ‘$HOME/foo’ -'~fred/foo' - The subdirectory 'foo' of the home directory of the user 'fred' +‘~fred/foo’ + The subdirectory ‘foo’ of the home directory of the user ‘fred’ -'~+/foo' - '$PWD/foo' +‘~+/foo’ + ‘$PWD/foo’ -'~-/foo' - '${OLDPWD-'~-'}/foo' +‘~-/foo’ + ‘${OLDPWD-'~-'}/foo’ -'~N' - The string that would be displayed by 'dirs +N' +‘~N’ + The string that would be displayed by ‘dirs +N’ -'~+N' - The string that would be displayed by 'dirs +N' +‘~+N’ + The string that would be displayed by ‘dirs +N’ -'~-N' - The string that would be displayed by 'dirs -N' +‘~-N’ + The string that would be displayed by ‘dirs -N’ Bash also performs tilde expansion on words satisfying the conditions of variable assignments (*note Shell Parameters::) when they appear as @@ -1799,13 +1795,13 @@ File: bashref.info, Node: Shell Parameter Expansion, Next: Command Substitutio 3.5.3 Shell Parameter Expansion ------------------------------- -The '$' character introduces parameter expansion, command substitution, +The ‘$’ character introduces parameter expansion, command substitution, or arithmetic expansion. The parameter name or symbol to be expanded may be enclosed in braces, which are optional but serve to protect the variable to be expanded from characters immediately following it which could be interpreted as part of the name. - When braces are used, the matching ending brace is the first '}' not + When braces are used, the matching ending brace is the first ‘}’ not escaped by a backslash or within a quoted string, and not within an embedded arithmetic expansion, command substitution, or parameter expansion. @@ -1822,7 +1818,7 @@ PARAMETER is not a nameref, it introduces a level of indirection. Bash uses the value formed by expanding the rest of PARAMETER as the new PARAMETER; this is then expanded and that value is used in the rest of the expansion, rather than the expansion of the original PARAMETER. -This is known as 'indirect expansion'. The value is subject to tilde +This is known as ‘indirect expansion’. The value is subject to tilde expansion, parameter expansion, command substitution, and arithmetic expansion. If PARAMETER is a nameref, this expands to the name of the variable referenced by PARAMETER instead of performing the complete @@ -1833,22 +1829,30 @@ immediately follow the left brace in order to introduce indirection. In each of the cases below, WORD is subject to tilde expansion, parameter expansion, command substitution, and arithmetic expansion. - When not performing substring expansion, using the form described -below (e.g., ':-'), Bash tests for a parameter that is unset or null. + When not performing substring expansion, using the forms described +below (e.g., ‘:-’), Bash tests for a parameter that is unset or null. Omitting the colon results in a test only for a parameter that is unset. Put another way, if the colon is included, the operator tests for both PARAMETER's existence and that its value is not null; if the colon is omitted, the operator tests only for existence. -'${PARAMETER:-WORD}' +‘${PARAMETER:−WORD}’ If PARAMETER is unset or null, the expansion of WORD is substituted. Otherwise, the value of PARAMETER is substituted. $ v=123 $ echo ${v-unset} 123 + $ echo ${v:-unset-or-null} + 123 + $ unset v + $ echo ${v-unset} + unset + $ v= + $ echo ${v:-unset-or-null} + unset-or-null -'${PARAMETER:=WORD}' +‘${PARAMETER:=WORD}’ If PARAMETER is unset or null, the expansion of WORD is assigned to PARAMETER. The value of PARAMETER is then substituted. Positional parameters and special parameters may not be assigned to in this @@ -1859,7 +1863,7 @@ omitted, the operator tests only for existence. $ echo $var DEFAULT -'${PARAMETER:?WORD}' +‘${PARAMETER:?WORD}’ If PARAMETER is null or unset, the expansion of WORD (or a message to that effect if WORD is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, @@ -1869,7 +1873,7 @@ omitted, the operator tests only for existence. $ : ${var:?var is unset or null} bash: var: var is unset or null -'${PARAMETER:+WORD}' +‘${PARAMETER:+WORD}’ If PARAMETER is null or unset, nothing is substituted, otherwise the expansion of WORD is substituted. @@ -1877,12 +1881,12 @@ omitted, the operator tests only for existence. $ echo ${var:+var is set and not null} var is set and not null -'${PARAMETER:OFFSET}' -'${PARAMETER:OFFSET:LENGTH}' +‘${PARAMETER:OFFSET}’ +‘${PARAMETER:OFFSET:LENGTH}’ This is referred to as Substring Expansion. It expands to up to LENGTH characters of the value of PARAMETER starting at the - character specified by OFFSET. If PARAMETER is '@' or '*', an - indexed array subscripted by '@' or '*', or an associative array + character specified by OFFSET. If PARAMETER is ‘@’ or ‘*’, an + indexed array subscripted by ‘@’ or ‘*’, or an associative array name, the results differ as described below. If LENGTH is omitted, it expands to the substring of the value of PARAMETER starting at the character specified by OFFSET and extending to the end of the @@ -1896,7 +1900,7 @@ omitted, the operator tests only for existence. rather than a number of characters, and the expansion is the characters between OFFSET and that result. Note that a negative offset must be separated from the colon by at least one space to - avoid being confused with the ':-' expansion. + avoid being confused with the ‘:-’ expansion. Here are some examples illustrating substring expansion on parameters and subscripted arrays: @@ -1953,11 +1957,12 @@ omitted, the operator tests only for existence. $ echo ${array[0]: -7:-2} bcdef - If PARAMETER is '@' or '*', the result is LENGTH positional + If PARAMETER is ‘@’ or ‘*’, the result is LENGTH positional parameters beginning at OFFSET. A negative OFFSET is taken relative to one greater than the greatest positional parameter, so - an offset of -1 evaluates to the last positional parameter. It is - an expansion error if LENGTH evaluates to a number less than zero. + an offset of -1 evaluates to the last positional parameter (or 0 if + there are no positional parameters). It is an expansion error if + LENGTH evaluates to a number less than zero. The following examples illustrate substring expansion using positional parameters: @@ -1980,9 +1985,9 @@ omitted, the operator tests only for existence. $ echo ${@: -7:0} - If PARAMETER is an indexed array name subscripted by '@' or '*', + If PARAMETER is an indexed array name subscripted by ‘@’ or ‘*’, the result is the LENGTH members of the array beginning with - '${PARAMETER[OFFSET]}'. A negative OFFSET is taken relative to one + ‘${PARAMETER[OFFSET]}’. A negative OFFSET is taken relative to one greater than the maximum index of the specified array. It is an expansion error if LENGTH evaluates to a number less than zero. @@ -2010,66 +2015,66 @@ omitted, the operator tests only for existence. Substring indexing is zero-based unless the positional parameters are used, in which case the indexing starts at 1 by default. If - OFFSET is 0, and the positional parameters are used, '$0' is + OFFSET is 0, and the positional parameters are used, ‘$0’ is prefixed to the list. -'${!PREFIX*}' -'${!PREFIX@}' +‘${!PREFIX*}’ +‘${!PREFIX@}’ Expands to the names of variables whose names begin with PREFIX, - separated by the first character of the 'IFS' special variable. - When '@' is used and the expansion appears within double quotes, + separated by the first character of the ‘IFS’ special variable. + When ‘@’ is used and the expansion appears within double quotes, each variable name expands to a separate word. -'${!NAME[@]}' -'${!NAME[*]}' +‘${!NAME[@]}’ +‘${!NAME[*]}’ If NAME is an array variable, expands to the list of array indices (keys) assigned in NAME. If NAME is not an array, expands to 0 if - NAME is set and null otherwise. When '@' is used and the expansion + NAME is set and null otherwise. When ‘@’ is used and the expansion appears within double quotes, each key expands to a separate word. -'${#PARAMETER}' +‘${#PARAMETER}’ The length in characters of the expanded value of PARAMETER is - substituted. If PARAMETER is '*' or '@', the value substituted is + substituted. If PARAMETER is ‘*’ or ‘@’, the value substituted is the number of positional parameters. If PARAMETER is an array name - subscripted by '*' or '@', the value substituted is the number of + subscripted by ‘*’ or ‘@’, the value substituted is the number of elements in the array. If PARAMETER is an indexed array name subscripted by a negative number, that number is interpreted as relative to one greater than the maximum index of PARAMETER, so negative indices count back from the end of the array, and an index of -1 references the last element. -'${PARAMETER#WORD}' -'${PARAMETER##WORD}' +‘${PARAMETER#WORD}’ +‘${PARAMETER##WORD}’ The WORD is expanded to produce a pattern and matched according to the rules described below (*note Pattern Matching::). If the pattern matches the beginning of the expanded value of PARAMETER, then the result of the expansion is the expanded value of PARAMETER - with the shortest matching pattern (the '#' case) or the longest - matching pattern (the '##' case) deleted. If PARAMETER is '@' or - '*', the pattern removal operation is applied to each positional + with the shortest matching pattern (the ‘#’ case) or the longest + matching pattern (the ‘##’ case) deleted. If PARAMETER is ‘@’ or + ‘*’, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. If - PARAMETER is an array variable subscripted with '@' or '*', the + PARAMETER is an array variable subscripted with ‘@’ or ‘*’, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. -'${PARAMETER%WORD}' -'${PARAMETER%%WORD}' +‘${PARAMETER%WORD}’ +‘${PARAMETER%%WORD}’ The WORD is expanded to produce a pattern and matched according to the rules described below (*note Pattern Matching::). If the pattern matches a trailing portion of the expanded value of PARAMETER, then the result of the expansion is the value of - PARAMETER with the shortest matching pattern (the '%' case) or the - longest matching pattern (the '%%' case) deleted. If PARAMETER is - '@' or '*', the pattern removal operation is applied to each + PARAMETER with the shortest matching pattern (the ‘%’ case) or the + longest matching pattern (the ‘%%’ case) deleted. If PARAMETER is + ‘@’ or ‘*’, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant - list. If PARAMETER is an array variable subscripted with '@' or - '*', the pattern removal operation is applied to each member of the + list. If PARAMETER is an array variable subscripted with ‘@’ or + ‘*’, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. -'${PARAMETER/PATTERN/STRING}' -'${PARAMETER//PATTERN/STRING}' -'${PARAMETER/#PATTERN/STRING}' -'${PARAMETER/%PATTERN/STRING}' +‘${PARAMETER/PATTERN/STRING}’ +‘${PARAMETER//PATTERN/STRING}’ +‘${PARAMETER/#PATTERN/STRING}’ +‘${PARAMETER/%PATTERN/STRING}’ The PATTERN is expanded to produce a pattern just as in filename expansion. PARAMETER is expanded and the longest match of PATTERN against its value is replaced with STRING. STRING undergoes tilde @@ -2081,30 +2086,30 @@ omitted, the operator tests only for existence. In the first form above, only the first match is replaced. If there are two slashes separating PARAMETER and PATTERN (the second form above), all matches of PATTERN are replaced with STRING. If - PATTERN is preceded by '#' (the third form above), it must match at + PATTERN is preceded by ‘#’ (the third form above), it must match at the beginning of the expanded value of PARAMETER. If PATTERN is - preceded by '%' (the fourth form above), it must match at the end + preceded by ‘%’ (the fourth form above), it must match at the end of the expanded value of PARAMETER. If the expansion of STRING is null, matches of PATTERN are deleted. If STRING is null, matches - of PATTERN are deleted and the '/' following PATTERN may be + of PATTERN are deleted and the ‘/’ following PATTERN may be omitted. - If the 'patsub_replacement' shell option is enabled using 'shopt', - any unquoted instances of '&' in STRING are replaced with the + If the ‘patsub_replacement’ shell option is enabled using ‘shopt’, + any unquoted instances of ‘&’ in STRING are replaced with the matching portion of PATTERN. This is intended to duplicate a - common 'sed' idiom. + common ‘sed’ idiom. Quoting any part of STRING inhibits replacement in the expansion of the quoted portion, including replacement strings stored in shell - variables. Backslash will escape '&' in STRING; the backslash is - removed in order to permit a literal '&' in the replacement string. + variables. Backslash will escape ‘&’ in STRING; the backslash is + removed in order to permit a literal ‘&’ in the replacement string. Users should take care if STRING is double-quoted to avoid unwanted interactions between the backslash and double-quoting, since backslash has special meaning within double quotes. Pattern - substitution performs the check for unquoted '&' after expanding + substitution performs the check for unquoted ‘&’ after expanding STRING, so users should ensure to properly quote any occurrences of - '&' they want to be taken literally in the replacement and ensure - any instances of '&' they want to be replaced are unquoted. + ‘&’ they want to be taken literally in the replacement and ensure + any instances of ‘&’ they want to be replaced are unquoted. For instance, @@ -2131,33 +2136,33 @@ omitted, the operator tests only for existence. a context that doesn't take any enclosing double quotes into account. - Since backslash can escape '&', it can also escape a backslash in - the replacement string. This means that '\\' will insert a literal - backslash into the replacement, so these two 'echo' commands + Since backslash can escape ‘&’, it can also escape a backslash in + the replacement string. This means that ‘\\’ will insert a literal + backslash into the replacement, so these two ‘echo’ commands var=abcdef rep='\\&xyz' echo ${var/abc/\\&xyz} echo ${var/abc/$rep} - will both output '\abcxyzdef'. + will both output ‘\abcxyzdef’. It should rarely be necessary to enclose only STRING in double quotes. - If the 'nocasematch' shell option (see the description of 'shopt' + If the ‘nocasematch’ shell option (see the description of ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. If PARAMETER - is '@' or '*', the substitution operation is applied to each + is ‘@’ or ‘*’, the substitution operation is applied to each positional parameter in turn, and the expansion is the resultant - list. If PARAMETER is an array variable subscripted with '@' or - '*', the substitution operation is applied to each member of the + list. If PARAMETER is an array variable subscripted with ‘@’ or + ‘*’, the substitution operation is applied to each member of the array in turn, and the expansion is the resultant list. -'${PARAMETER^PATTERN}' -'${PARAMETER^^PATTERN}' -'${PARAMETER,PATTERN}' -'${PARAMETER,,PATTERN}' +‘${PARAMETER^PATTERN}’ +‘${PARAMETER^^PATTERN}’ +‘${PARAMETER,PATTERN}’ +‘${PARAMETER,,PATTERN}’ This expansion modifies the case of alphabetic characters in PARAMETER. The PATTERN is expanded to produce a pattern just as in filename expansion. Each character in the expanded value of @@ -2165,68 +2170,69 @@ omitted, the operator tests only for existence. pattern, its case is converted. The pattern should not attempt to match more than one character. - The '^' operator converts lowercase letters matching PATTERN to - uppercase; the ',' operator converts matching uppercase letters to - lowercase. The '^^' and ',,' expansions convert each matched - character in the expanded value; the '^' and ',' expansions match + The ‘^’ operator converts lowercase letters matching PATTERN to + uppercase; the ‘,’ operator converts matching uppercase letters to + lowercase. The ‘^^’ and ‘,,’ expansions convert each matched + character in the expanded value; the ‘^’ and ‘,’ expansions match and convert only the first character in the expanded value. If - PATTERN is omitted, it is treated like a '?', which matches every + PATTERN is omitted, it is treated like a ‘?’, which matches every character. - If PARAMETER is '@' or '*', the case modification operation is + If PARAMETER is ‘@’ or ‘*’, the case modification operation is applied to each positional parameter in turn, and the expansion is the resultant list. If PARAMETER is an array variable subscripted - with '@' or '*', the case modification operation is applied to each + with ‘@’ or ‘*’, the case modification operation is applied to each member of the array in turn, and the expansion is the resultant list. -'${PARAMETER@OPERATOR}' +‘${PARAMETER@OPERATOR}’ The expansion is either a transformation of the value of PARAMETER or information about PARAMETER itself, depending on the value of OPERATOR. Each OPERATOR is a single letter: - 'U' + ‘U’ The expansion is a string that is the value of PARAMETER with lowercase alphabetic characters converted to uppercase. - 'u' + ‘u’ The expansion is a string that is the value of PARAMETER with the first character converted to uppercase, if it is alphabetic. - 'L' + ‘L’ The expansion is a string that is the value of PARAMETER with uppercase alphabetic characters converted to lowercase. - 'Q' + ‘Q’ The expansion is a string that is the value of PARAMETER quoted in a format that can be reused as input. - 'E' + ‘E’ The expansion is a string that is the value of PARAMETER with - backslash escape sequences expanded as with the '$'...'' + backslash escape sequences expanded as with the ‘$'...'’ quoting mechanism. - 'P' + ‘P’ The expansion is a string that is the result of expanding the value of PARAMETER as if it were a prompt string (*note Controlling the Prompt::). - 'A' + ‘A’ The expansion is a string in the form of an assignment - statement or 'declare' command that, if evaluated, will + statement or ‘declare’ command that, if evaluated, will recreate PARAMETER with its attributes and value. - 'K' + ‘K’ Produces a possibly-quoted version of the value of PARAMETER, except that it prints the values of indexed and associative arrays as a sequence of quoted key-value pairs (*note - Arrays::). - 'a' + Arrays::). The keys and values are quoted in a format that + can be reused as input. + ‘a’ The expansion is a string consisting of flag values representing PARAMETER's attributes. - 'k' - Like the 'K' transformation, but expands the keys and values + ‘k’ + Like the ‘K’ transformation, but expands the keys and values of indexed and associative arrays to separate words after word splitting. - If PARAMETER is '@' or '*', the operation is applied to each + If PARAMETER is ‘@’ or ‘*’, the operation is applied to each positional parameter in turn, and the expansion is the resultant - list. If PARAMETER is an array variable subscripted with '@' or - '*', the operation is applied to each member of the array in turn, + list. If PARAMETER is an array variable subscripted with ‘@’ or + ‘*’, the operation is applied to each member of the array in turn, and the expansion is the resultant list. The result of the expansion is subject to word splitting and @@ -2239,30 +2245,77 @@ File: bashref.info, Node: Command Substitution, Next: Arithmetic Expansion, P -------------------------- Command substitution allows the output of a command to replace the -command itself. Command substitution occurs when a command is enclosed -as follows: +command itself. The standard form of command substitution occurs when a +command is enclosed as follows: $(COMMAND) -or - `COMMAND` +or (deprecated) + `COMMAND`. -Bash performs the expansion by executing COMMAND in a subshell +Bash performs command substitution by executing COMMAND in a subshell environment and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting. -The command substitution '$(cat FILE)' can be replaced by the equivalent -but faster '$(< FILE)'. +The command substitution ‘$(cat FILE)’ can be replaced by the equivalent +but faster ‘$(< FILE)’. - When the old-style backquote form of substitution is used, backslash -retains its literal meaning except when followed by '$', '`', or '\'. -The first backquote not preceded by a backslash terminates the command -substitution. When using the '$(COMMAND)' form, all characters between + With the old-style backquote form of substitution, backslash retains +its literal meaning except when followed by ‘$’, ‘`’, or ‘\’. The first +backquote not preceded by a backslash terminates the command +substitution. When using the ‘$(COMMAND)’ form, all characters between the parentheses make up the command; none are treated specially. + There is an alternate form of command substitution: + + ${C COMMAND; } + +which executes COMMAND in the current execution environment and captures +its output, again with trailing newlines removed. + + The character C following the open brace must be a space, tab, +newline, or ‘|’, and the close brace must be in a position where a +reserved word may appear (i.e., preceded by a command terminator such as +semicolon). Bash allows the close brace to be joined to the remaining +characters in the word without being followed by a shell metacharacter +as a reserved word would usually require. + + Any side effects of COMMAND take effect immediately in the current +execution environment and persist in the current environment after the +command completes (e.g., the ‘exit’ builtin will exit the shell). + + This type of command substitution superficially resembles executing +an unnamed shell function: local variables are created as when a shell +function is executing, and the ‘return’ builtin forces COMMAND to +complete; however, the rest of the execution environment, including the +positional parameters, is shared with the caller. + + If the first character following the open brace is a ‘|’, the +construct expands to the value of the ‘REPLY’ shell variable after +COMMAND executes, without removing any trailing newlines, and the +standard output of COMMAND remains the same as in the calling shell. +Bash creates ‘REPLY’ as an initially-unset local variable when COMMAND +executes, and restores ‘REPLY’ to the value it had before the command +substitution after COMMAND completes, as with any local variable. + + For example, this construct expands to ‘12345’, and leaves the shell +variable ‘X’ unchanged in the current execution environment: + + + ${ local X=12345 ; echo $X; } + +(not declaring ‘X’ as local would modify its value in the current +environment, as with normal shell function execution), while this +construct does not require any output to expand to ‘12345’: + + ${| REPLY=12345; } + +and restores ‘REPLY’ to the value it had before the command +substitution. + Command substitutions may be nested. To nest when using the backquoted form, escape the inner backquotes with backslashes. - If the substitution appears within double quotes, word splitting and -filename expansion are not performed on the results. + If the substitution appears within double quotes, Bash does not +perform word splitting and filename expansion on the results.  File: bashref.info, Node: Arithmetic Expansion, Next: Process Substitution, Prev: Command Substitution, Up: Shell Expansions @@ -2301,13 +2354,13 @@ or >(LIST) The process LIST is run asynchronously, and its input or output appears as a filename. This filename is passed as an argument to the current -command as the result of the expansion. If the '>(LIST)' form is used, -writing to the file will provide input for LIST. If the '<(LIST)' form +command as the result of the expansion. If the ‘>(LIST)’ form is used, +writing to the file will provide input for LIST. If the ‘<(LIST)’ form is used, the file passed as an argument should be read to obtain the -output of LIST. Note that no space may appear between the '<' or '>' +output of LIST. Note that no space may appear between the ‘<’ or ‘>’ and the left parenthesis, otherwise the construct would be interpreted as a redirection. Process substitution is supported on systems that -support named pipes (FIFOs) or the '/dev/fd' method of naming open +support named pipes (FIFOs) or the ‘/dev/fd’ method of naming open files. When available, process substitution is performed simultaneously with @@ -2324,30 +2377,34 @@ The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting. - The shell treats each character of '$IFS' as a delimiter, and splits + The shell treats each character of ‘$IFS’ as a delimiter, and splits the results of the other expansions into words using these characters as -field terminators. If 'IFS' is unset, or its value is exactly -'<space><tab><newline>', the default, then sequences of ' <space>', -'<tab>', and '<newline>' at the beginning and end of the results of the -previous expansions are ignored, and any sequence of 'IFS' characters -not at the beginning or end serves to delimit words. If 'IFS' has a -value other than the default, then sequences of the whitespace -characters 'space', 'tab', and 'newline' are ignored at the beginning -and end of the word, as long as the whitespace character is in the value -of 'IFS' (an 'IFS' whitespace character). Any character in 'IFS' that -is not 'IFS' whitespace, along with any adjacent 'IFS' whitespace -characters, delimits a field. A sequence of 'IFS' whitespace characters -is also treated as a delimiter. If the value of 'IFS' is null, no word -splitting occurs. - - Explicit null arguments ('""' or '''') are retained and passed to +field terminators. + + If ‘IFS’ is unset, or its value is exactly ‘<space><tab><newline>’, +the default, then sequences of ‘space’, ‘tab’, and ‘newline’ at the +beginning and end of the results of the previous expansions are ignored, +and any sequence of ‘IFS’ characters not at the beginning or end serves +to delimit words. If ‘IFS’ has a value other than the default, then +sequences of the whitespace characters ‘space’, ‘tab’, and ‘newline’ are +ignored at the beginning and end of the word, as long as the whitespace +character is in the value of ‘IFS’ (an ‘IFS’ whitespace character). Any +character in ‘IFS’ that is not ‘IFS’ whitespace, along with any adjacent +‘IFS’ whitespace characters, delimits a field. A sequence of ‘IFS’ +whitespace characters is also treated as a delimiter. + + If the value of ‘IFS’ is null, no word splitting occurs. If ‘IFS’ is +unset, word splitting behaves as if it contained the default value +‘<space><tab><newline>’. + + Explicit null arguments (‘""’ or ‘''’) are retained and passed to commands as empty strings. Unquoted implicit null arguments, resulting from the expansion of parameters that have no values, are removed. If a parameter with no value is expanded within double quotes, a null argument results and is retained and passed to a command as an empty string. When a quoted null argument appears as part of a word whose expansion is non-null, the null argument is removed. That is, the word -'-d''' becomes '-d' after word splitting and null argument removal. +‘-d''’ becomes ‘-d’ after word splitting and null argument removal. Note that if no expansion occurs, no splitting is performed. @@ -2361,26 +2418,26 @@ File: bashref.info, Node: Filename Expansion, Next: Quote Removal, Prev: Word * Pattern Matching:: How the shell matches patterns. -After word splitting, unless the '-f' option has been set (*note The Set -Builtin::), Bash scans each word for the characters '*', '?', and '['. +After word splitting, unless the ‘-f’ option has been set (*note The Set +Builtin::), Bash scans each word for the characters ‘*’, ‘?’, and ‘[’. If one of these characters appears, and is not quoted, then the word is regarded as a PATTERN, and replaced with an alphabetically sorted list of filenames matching the pattern (*note Pattern Matching::). If no -matching filenames are found, and the shell option 'nullglob' is -disabled, the word is left unchanged. If the 'nullglob' option is set, -and no matches are found, the word is removed. If the 'failglob' shell +matching filenames are found, and the shell option ‘nullglob’ is +disabled, the word is left unchanged. If the ‘nullglob’ option is set, +and no matches are found, the word is removed. If the ‘failglob’ shell option is set, and no matches are found, an error message is printed and -the command is not executed. If the shell option 'nocaseglob' is +the command is not executed. If the shell option ‘nocaseglob’ is enabled, the match is performed without regard to the case of alphabetic characters. - When a pattern is used for filename expansion, the character '.' at + When a pattern is used for filename expansion, the character ‘.’ at the start of a filename or immediately following a slash must be matched -explicitly, unless the shell option 'dotglob' is set. In order to match -the filenames '.' and '..', the pattern must begin with '.' (for -example, '.?'), even if 'dotglob' is set. If the 'globskipdots' shell -option is enabled, the filenames '.' and '..' are never matched, even if -the pattern begins with a '.'. When not matching filenames, the '.' +explicitly, unless the shell option ‘dotglob’ is set. In order to match +the filenames ‘.’ and ‘..’, the pattern must begin with ‘.’ (for +example, ‘.?’), even if ‘dotglob’ is set. If the ‘globskipdots’ shell +option is enabled, the filenames ‘.’ and ‘..’ never match, even if the +pattern begins with a ‘.’. When not matching filenames, the ‘.’ character is not treated specially. When matching a filename, the slash character must always be matched @@ -2388,22 +2445,26 @@ explicitly by a slash in the pattern, but in other matching contexts it can be matched by a special pattern character as described below (*note Pattern Matching::). - See the description of 'shopt' in *note The Shopt Builtin::, for a -description of the 'nocaseglob', 'nullglob', 'globskipdots', 'failglob', -and 'dotglob' options. + See the description of ‘shopt’ in *note The Shopt Builtin::, for a +description of the ‘nocaseglob’, ‘nullglob’, ‘globskipdots’, ‘failglob’, +and ‘dotglob’ options. - The 'GLOBIGNORE' shell variable may be used to restrict the set of -file names matching a pattern. If 'GLOBIGNORE' is set, each matching -file name that also matches one of the patterns in 'GLOBIGNORE' is -removed from the list of matches. If the 'nocaseglob' option is set, -the matching against the patterns in 'GLOBIGNORE' is performed without -regard to case. The filenames '.' and '..' are always ignored when -'GLOBIGNORE' is set and not null. However, setting 'GLOBIGNORE' to a -non-null value has the effect of enabling the 'dotglob' shell option, so -all other filenames beginning with a '.' will match. To get the old -behavior of ignoring filenames beginning with a '.', make '.*' one of -the patterns in 'GLOBIGNORE'. The 'dotglob' option is disabled when -'GLOBIGNORE' is unset. + The ‘GLOBIGNORE’ shell variable may be used to restrict the set of +file names matching a pattern. If ‘GLOBIGNORE’ is set, each matching +file name that also matches one of the patterns in ‘GLOBIGNORE’ is +removed from the list of matches. If the ‘nocaseglob’ option is set, +the matching against the patterns in ‘GLOBIGNORE’ is performed without +regard to case. The filenames ‘.’ and ‘..’ are always ignored when +‘GLOBIGNORE’ is set and not null. However, setting ‘GLOBIGNORE’ to a +non-null value has the effect of enabling the ‘dotglob’ shell option, so +all other filenames beginning with a ‘.’ will match. To get the old +behavior of ignoring filenames beginning with a ‘.’, make ‘.*’ one of +the patterns in ‘GLOBIGNORE’. The ‘dotglob’ option is disabled when +‘GLOBIGNORE’ is unset. + + After the pattern is expanded and matched against filenames, the +value of the ‘GLOBSORT’ variable controls how the results are sorted, as +described below (*note Bash Variables::).  File: bashref.info, Node: Pattern Matching, Up: Filename Expansion @@ -2418,91 +2479,91 @@ escaping backslash is discarded when matching. The special pattern characters must be quoted if they are to be matched literally. The special pattern characters have the following meanings: -'*' - Matches any string, including the null string. When the 'globstar' - shell option is enabled, and '*' is used in a filename expansion - context, two adjacent '*'s used as a single pattern will match all +‘*’ + Matches any string, including the null string. When the ‘globstar’ + shell option is enabled, and ‘*’ is used in a filename expansion + context, two adjacent ‘*’s used as a single pattern will match all files and zero or more directories and subdirectories. If followed - by a '/', two adjacent '*'s will match only directories and + by a ‘/’, two adjacent ‘*’s will match only directories and subdirectories. -'?' +‘?’ Matches any single character. -'[...]' +‘[...]’ Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a RANGE EXPRESSION; any character that falls between those two characters, inclusive, using the current locale's collating sequence and character set, is matched. - If the first character following the '[' is a '!' or a '^' then any - character not enclosed is matched. A '-' may be matched by - including it as the first or last character in the set. A ']' may + If the first character following the ‘[’ is a ‘!’ or a ‘^’ then any + character not enclosed is matched. A ‘−’ may be matched by + including it as the first or last character in the set. A ‘]’ may be matched by including it as the first character in the set. The sorting order of characters in range expressions, and the characters included in the range, are determined by the current - locale and the values of the 'LC_COLLATE' and 'LC_ALL' shell + locale and the values of the ‘LC_COLLATE’ and ‘LC_ALL’ shell variables, if set. - For example, in the default C locale, '[a-dx-z]' is equivalent to - '[abcdxyz]'. Many locales sort characters in dictionary order, and - in these locales '[a-dx-z]' is typically not equivalent to - '[abcdxyz]'; it might be equivalent to '[aBbCcDdxYyZz]', for + For example, in the default C locale, ‘[a-dx-z]’ is equivalent to + ‘[abcdxyz]’. Many locales sort characters in dictionary order, and + in these locales ‘[a-dx-z]’ is typically not equivalent to + ‘[abcdxyz]’; it might be equivalent to ‘[aBbCcDdxYyZz]’, for example. To obtain the traditional interpretation of ranges in bracket expressions, you can force the use of the C locale by - setting the 'LC_COLLATE' or 'LC_ALL' environment variable to the - value 'C', or enable the 'globasciiranges' shell option. + setting the ‘LC_COLLATE’ or ‘LC_ALL’ environment variable to the + value ‘C’, or enable the ‘globasciiranges’ shell option. - Within '[' and ']', "character classes" can be specified using the - syntax '[:'CLASS':]', where CLASS is one of the following classes + Within ‘[’ and ‘]’, “character classes” can be specified using the + syntax ‘[:’CLASS‘:]’, where CLASS is one of the following classes defined in the POSIX standard: alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit A character class matches any character belonging to that class. - The 'word' character class matches letters, digits, and the - character '_'. + The ‘word’ character class matches letters, digits, and the + character ‘_’. - Within '[' and ']', an "equivalence class" can be specified using - the syntax '[='C'=]', which matches all characters with the same + Within ‘[’ and ‘]’, an “equivalence class” can be specified using + the syntax ‘[=’C‘=]’, which matches all characters with the same collation weight (as defined by the current locale) as the character C. - Within '[' and ']', the syntax '[.'SYMBOL'.]' matches the collating + Within ‘[’ and ‘]’, the syntax ‘[.’SYMBOL‘.]’ matches the collating symbol SYMBOL. - If the 'extglob' shell option is enabled using the 'shopt' builtin, + If the ‘extglob’ shell option is enabled using the ‘shopt’ builtin, the shell recognizes several extended pattern matching operators. In the following description, a PATTERN-LIST is a list of one or more -patterns separated by a '|'. When matching filenames, the 'dotglob' +patterns separated by a ‘|’. When matching filenames, the ‘dotglob’ shell option determines the set of filenames that are tested, as described above. Composite patterns may be formed using one or more of the following sub-patterns: -'?(PATTERN-LIST)' +‘?(PATTERN-LIST)’ Matches zero or one occurrence of the given patterns. -'*(PATTERN-LIST)' +‘*(PATTERN-LIST)’ Matches zero or more occurrences of the given patterns. -'+(PATTERN-LIST)' +‘+(PATTERN-LIST)’ Matches one or more occurrences of the given patterns. -'@(PATTERN-LIST)' +‘@(PATTERN-LIST)’ Matches one of the given patterns. -'!(PATTERN-LIST)' +‘!(PATTERN-LIST)’ Matches anything except one of the given patterns. - The 'extglob' option changes the behavior of the parser, since the + The ‘extglob’ option changes the behavior of the parser, since the parentheses are normally treated as operators with syntactic meaning. To ensure that extended matching patterns are parsed correctly, make -sure that 'extglob' is enabled before parsing constructs containing the +sure that ‘extglob’ is enabled before parsing constructs containing the patterns, including shell functions and command substitutions. - When matching filenames, the 'dotglob' shell option determines the -set of filenames that are tested: when 'dotglob' is enabled, the set of -filenames includes all files beginning with '.', but the filenames '.' -and '..' must be matched by a pattern or sub-pattern that begins with a + When matching filenames, the ‘dotglob’ shell option determines the +set of filenames that are tested: when ‘dotglob’ is enabled, the set of +filenames includes all files beginning with ‘.’, but the filenames ‘.’ +and ‘..’ must be matched by a pattern or sub-pattern that begins with a dot; when it is disabled, the set does not include any filenames -beginning with "." unless the pattern or sub-pattern begins with a '.'. -As above, '.' only has a special meaning when matching filenames. +beginning with "." unless the pattern or sub-pattern begins with a ‘.’. +As above, ‘.’ only has a special meaning when matching filenames. Complicated extended pattern matching against long strings is slow, especially when the patterns contain alternations and the strings @@ -2517,7 +2578,7 @@ File: bashref.info, Node: Quote Removal, Prev: Filename Expansion, Up: Shell ------------------- After the preceding expansions, all unquoted occurrences of the -characters '\', ''', and '"' that did not result from one of the above +characters ‘\’, ‘'’, and ‘"’ that did not result from one of the above expansions are removed.  @@ -2526,8 +2587,8 @@ File: bashref.info, Node: Redirections, Next: Executing Commands, Prev: Shell 3.6 Redirections ================ -Before a command is executed, its input and output may be "redirected" -using a special notation interpreted by the shell. "Redirection" allows +Before a command is executed, its input and output may be “redirected” +using a special notation interpreted by the shell. “Redirection” allows commands' file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. Redirection may also be used to modify file handles in the @@ -2543,13 +2604,13 @@ file descriptor greater than 10 and assign it to {VARNAME}. If >&- or <&- is preceded by {VARNAME}, the value of VARNAME defines the file descriptor to close. If {VARNAME} is supplied, the redirection persists beyond the scope of the command, allowing the shell programmer to manage -the file descriptor's lifetime manually. The 'varredir_close' shell +the file descriptor's lifetime manually. The ‘varredir_close’ shell option manages this behavior (*note The Shopt Builtin::). In the following descriptions, if the file descriptor number is -omitted, and the first character of the redirection operator is '<', the +omitted, and the first character of the redirection operator is ‘<’, the redirection refers to the standard input (file descriptor 0). If the -first character of the redirection operator is '>', the redirection +first character of the redirection operator is ‘>’, the redirection refers to the standard output (file descriptor 1). The word following the redirection operator in the following @@ -2570,28 +2631,28 @@ was redirected to DIRLIST. Bash handles several filenames specially when they are used in redirections, as described in the following table. If the operating -system on which Bash is running provides these special files, bash will +system on which Bash is running provides these special files, Bash will use them; otherwise it will emulate them internally with the behavior described below. -'/dev/fd/FD' +‘/dev/fd/FD’ If FD is a valid integer, file descriptor FD is duplicated. -'/dev/stdin' +‘/dev/stdin’ File descriptor 0 is duplicated. -'/dev/stdout' +‘/dev/stdout’ File descriptor 1 is duplicated. -'/dev/stderr' +‘/dev/stderr’ File descriptor 2 is duplicated. -'/dev/tcp/HOST/PORT' +‘/dev/tcp/HOST/PORT’ If HOST is a valid hostname or Internet address, and PORT is an integer port number or service name, Bash attempts to open the corresponding TCP socket. -'/dev/udp/HOST/PORT' +‘/dev/udp/HOST/PORT’ If HOST is a valid hostname or Internet address, and PORT is an integer port number or service name, Bash attempts to open the corresponding UDP socket. @@ -2606,8 +2667,8 @@ internally. ----------------------- Redirection of input causes the file whose name results from the -expansion of WORD to be opened for reading on file descriptor 'n', or -the standard input (file descriptor 0) if 'n' is not specified. +expansion of WORD to be opened for reading on file descriptor ‘n’, or +the standard input (file descriptor 0) if ‘n’ is not specified. The general format for redirecting input is: [N]<WORD @@ -2624,11 +2685,11 @@ size. The general format for redirecting output is: [N]>[|]WORD - If the redirection operator is '>', and the 'noclobber' option to the -'set' builtin has been enabled, the redirection will fail if the file + If the redirection operator is ‘>’, and the ‘noclobber’ option to the +‘set’ builtin has been enabled, the redirection will fail if the file whose name results from the expansion of WORD exists and is a regular -file. If the redirection operator is '>|', or the redirection operator -is '>' and the 'noclobber' option is not enabled, the redirection is +file. If the redirection operator is ‘>|’, or the redirection operator +is ‘>’ and the ‘noclobber’ option is not enabled, the redirection is attempted even if the file named by WORD exists. 3.6.3 Appending Redirected Output @@ -2657,7 +2718,7 @@ and Of the two forms, the first is preferred. This is semantically equivalent to >WORD 2>&1 - When using the second form, WORD may not expand to a number or '-'. + When using the second form, WORD may not expand to a number or ‘-’. If it does, other redirection operators apply (see Duplicating File Descriptors below) for compatibility reasons. @@ -2678,26 +2739,28 @@ This is semantically equivalent to -------------------- This type of redirection instructs the shell to read input from the -current source until a line containing only WORD (with no trailing -blanks) is seen. All of the lines read up to that point are then used +current source until it reads a line containing only DELIMITER (with no +trailing blanks). All of the lines read up to that point are then used as the standard input (or file descriptor N if N is specified) for a command. The format of here-documents is: - [N]<<[-]WORD + [N]<<[−]WORD HERE-DOCUMENT DELIMITER No parameter and variable expansion, command substitution, arithmetic -expansion, or filename expansion is performed on WORD. If any part of -WORD is quoted, the DELIMITER is the result of quote removal on WORD, -and the lines in the here-document are not expanded. If WORD is -unquoted, all lines of the here-document are subjected to parameter -expansion, command substitution, and arithmetic expansion, the character -sequence '\newline' is ignored, and '\' must be used to quote the -characters '\', '$', and '`'. - - If the redirection operator is '<<-', then all leading tab characters +expansion, or filename expansion is performed on WORD. + + If any part of WORD is quoted, the DELIMITER is the result of quote +removal on WORD, and the lines in the here-document are not expanded. +If WORD is unquoted, DELIMITER is WORD itself, all lines of the +here-document are subjected to parameter expansion, command +substitution, and arithmetic expansion, the character sequence +‘\newline’ is ignored, and ‘\’ must be used to quote the characters ‘\’, +‘$’, and ‘`’. + + If the redirection operator is ‘<<-’, then all leading tab characters are stripped from input lines and the line containing DELIMITER. This allows here-documents within shell scripts to be indented in a natural fashion. @@ -2723,7 +2786,7 @@ is used to duplicate input file descriptors. If WORD expands to one or more digits, the file descriptor denoted by N is made to be a copy of that file descriptor. If the digits in WORD do not specify a file descriptor open for input, a redirection error occurs. If WORD -evaluates to '-', file descriptor N is closed. If N is not specified, +evaluates to ‘-’, file descriptor N is closed. If N is not specified, the standard input (file descriptor 0) is used. The operator @@ -2731,9 +2794,9 @@ the standard input (file descriptor 0) is used. is used similarly to duplicate output file descriptors. If N is not specified, the standard output (file descriptor 1) is used. If the digits in WORD do not specify a file descriptor open for output, a -redirection error occurs. If WORD evaluates to '-', file descriptor N +redirection error occurs. If WORD evaluates to ‘-’, file descriptor N is closed. As a special case, if N is omitted, and WORD does not expand -to one or more digits or '-', the standard output and standard error are +to one or more digits or ‘-’, the standard output and standard error are redirected as described previously. 3.6.9 Moving File Descriptors @@ -2801,7 +2864,7 @@ following order. 3. Redirections are performed as described above (*note Redirections::). - 4. The text after the '=' in each variable assignment undergoes tilde + 4. The text after the ‘=’ in each variable assignment undergoes tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal before being assigned to the variable. @@ -2832,8 +2895,8 @@ File: bashref.info, Node: Command Search and Execution, Next: Command Executio ---------------------------------- After a command has been split into words, if it results in a simple -command and an optional list of arguments, the following actions are -taken. +command and an optional list of arguments, the shell performs the +following actions. 1. If the command name contains no slashes, the shell attempts to locate it. If there exists a shell function by that name, that @@ -2844,14 +2907,14 @@ taken. invoked. 3. If the name is neither a shell function nor a builtin, and contains - no slashes, Bash searches each element of '$PATH' for a directory + no slashes, Bash searches each element of ‘$PATH’ for a directory containing an executable file by that name. Bash uses a hash table to remember the full pathnames of executable files to avoid - multiple 'PATH' searches (see the description of 'hash' in *note + multiple ‘PATH’ searches (see the description of ‘hash’ in *note Bourne Shell Builtins::). A full search of the directories in - '$PATH' is performed only if the command is not found in the hash + ‘$PATH’ is performed only if the command is not found in the hash table. If the search is unsuccessful, the shell searches for a - defined shell function named 'command_not_found_handle'. If that + defined shell function named ‘command_not_found_handle’. If that function exists, it is invoked in a separate execution environment with the original command and the original command's arguments as its arguments, and the function's exit status becomes the exit @@ -2866,7 +2929,7 @@ taken. 5. If this execution fails because the file is not in executable format, and the file is not a directory, it is assumed to be a - "shell script" and the shell executes it as described in *note + “shell script” and the shell executes it as described in *note Shell Scripts::. 6. If the command was not begun asynchronously, the shell waits for @@ -2878,59 +2941,59 @@ File: bashref.info, Node: Command Execution Environment, Next: Environment, P 3.7.3 Command Execution Environment ----------------------------------- -The shell has an "execution environment", which consists of the +The shell has an “execution environment”, which consists of the following: - * open files inherited by the shell at invocation, as modified by - redirections supplied to the 'exec' builtin + • open files inherited by the shell at invocation, as modified by + redirections supplied to the ‘exec’ builtin - * the current working directory as set by 'cd', 'pushd', or 'popd', + • the current working directory as set by ‘cd’, ‘pushd’, or ‘popd’, or inherited by the shell at invocation - * the file creation mode mask as set by 'umask' or inherited from the + • the file creation mode mask as set by ‘umask’ or inherited from the shell's parent - * current traps set by 'trap' + • current traps set by ‘trap’ - * shell parameters that are set by variable assignment or with 'set' + • shell parameters that are set by variable assignment or with ‘set’ or inherited from the shell's parent in the environment - * shell functions defined during execution or inherited from the + • shell functions defined during execution or inherited from the shell's parent in the environment - * options enabled at invocation (either by default or with - command-line arguments) or by 'set' + • options enabled at invocation (either by default or with + command-line arguments) or by ‘set’ - * options enabled by 'shopt' (*note The Shopt Builtin::) + • options enabled by ‘shopt’ (*note The Shopt Builtin::) - * shell aliases defined with 'alias' (*note Aliases::) + • shell aliases defined with ‘alias’ (*note Aliases::) - * various process IDs, including those of background jobs (*note - Lists::), the value of '$$', and the value of '$PPID' + • various process IDs, including those of background jobs (*note + Lists::), the value of ‘$$’, and the value of ‘$PPID’ When a simple command other than a builtin or shell function is to be executed, it is invoked in a separate execution environment that consists of the following. Unless otherwise noted, the values are inherited from the shell. - * the shell's open files, plus any modifications and additions + • the shell's open files, plus any modifications and additions specified by redirections to the command - * the current working directory + • the current working directory - * the file creation mode mask + • the file creation mode mask - * shell variables and functions marked for export, along with + • shell variables and functions marked for export, along with variables exported for the command, passed in the environment (*note Environment::) - * traps caught by the shell are reset to the values inherited from + • traps caught by the shell are reset to the values inherited from the shell's parent, and traps ignored by the shell are ignored A command invoked in this separate environment cannot affect the shell's execution environment. - A "subshell" is a copy of the shell process. + A “subshell” is a copy of the shell process. Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a subshell environment that is a @@ -2940,12 +3003,15 @@ at invocation. Builtin commands that are invoked as part of a pipeline are also executed in a subshell environment. Changes made to the subshell environment cannot affect the shell's execution environment. - Subshells spawned to execute command substitutions inherit the value -of the '-e' option from the parent shell. When not in POSIX mode, Bash -clears the '-e' option in such subshells. + When the shell is in POSIX mode, subshells spawned to execute command +substitutions inherit the value of the ‘-e’ option from the parent +shell. When not in POSIX mode, Bash clears the ‘-e’ option in such +subshells See the description of the ‘inherit_errexit’ shell option +(*note Bash Builtins::) for how to control this behavior when not in +POSIX mode. - If a command is followed by a '&' and job control is not active, the -default standard input for the command is the empty file '/dev/null'. + If a command is followed by a ‘&’ and job control is not active, the +default standard input for the command is the empty file ‘/dev/null’. Otherwise, the invoked command inherits the file descriptors of the calling shell as modified by redirections. @@ -2956,20 +3022,20 @@ File: bashref.info, Node: Environment, Next: Exit Status, Prev: Command Execu ----------------- When a program is invoked it is given an array of strings called the -"environment". This is a list of name-value pairs, of the form -'name=value'. +“environment”. This is a list of name-value pairs, of the form +‘name=value’. Bash provides several ways to manipulate the environment. On invocation, the shell scans its own environment and creates a parameter -for each name found, automatically marking it for 'export' to child -processes. Executed commands inherit the environment. The 'export' and -'declare -x' commands allow parameters and functions to be added to and +for each name found, automatically marking it for ‘export’ to child +processes. Executed commands inherit the environment. The ‘export’ and +‘declare -x’ commands allow parameters and functions to be added to and deleted from the environment. If the value of a parameter in the environment is modified, the new value becomes part of the environment, replacing the old. The environment inherited by any executed command consists of the shell's initial environment, whose values may be -modified in the shell, less any pairs removed by the 'unset' and 'export --n' commands, plus any additions via the 'export' and 'declare -x' +modified in the shell, less any pairs removed by the ‘unset’ and ‘export +-n’ commands, plus any additions via the ‘export’ and ‘declare -x’ commands. The environment for any simple command or function may be augmented @@ -2977,11 +3043,11 @@ temporarily by prefixing it with parameter assignments, as described in *note Shell Parameters::. These assignment statements affect only the environment seen by that command. - If the '-k' option is set (*note The Set Builtin::), then all + If the ‘-k’ option is set (*note The Set Builtin::), then all parameter assignments are placed in the environment for a command, not just those that precede the command name. - When Bash invokes an external command, the variable '$_' is set to + When Bash invokes an external command, the variable ‘$_’ is set to the full pathname of the command and passed to that command in its environment. @@ -2992,7 +3058,7 @@ File: bashref.info, Node: Exit Status, Next: Signals, Prev: Environment, Up: ----------------- The exit status of an executed command is the value returned by the -'waitpid' system call or equivalent function. Exit statuses fall +‘waitpid’ system call or equivalent function. Exit statuses fall between 0 and 255, though, as explained below, the shell may use values above 125 specially. Exit statuses from shell builtins and compound commands are also limited to this range. Under certain circumstances, @@ -3032,63 +3098,63 @@ File: bashref.info, Node: Signals, Prev: Exit Status, Up: Executing Commands ------------- When Bash is interactive, in the absence of any traps, it ignores -'SIGTERM' (so that 'kill 0' does not kill an interactive shell), and -'SIGINT' is caught and handled (so that the 'wait' builtin is -interruptible). When Bash receives a 'SIGINT', it breaks out of any -executing loops. In all cases, Bash ignores 'SIGQUIT'. If job control -is in effect (*note Job Control::), Bash ignores 'SIGTTIN', 'SIGTTOU', -and 'SIGTSTP'. +‘SIGTERM’ (so that ‘kill 0’ does not kill an interactive shell), and +‘SIGINT’ is caught and handled (so that the ‘wait’ builtin is +interruptible). When Bash receives a ‘SIGINT’, it breaks out of any +executing loops. In all cases, Bash ignores ‘SIGQUIT’. If job control +is in effect (*note Job Control::), Bash ignores ‘SIGTTIN’, ‘SIGTTOU’, +and ‘SIGTSTP’. Non-builtin commands started by Bash have signal handlers set to the values inherited by the shell from its parent. When job control is not -in effect, asynchronous commands ignore 'SIGINT' and 'SIGQUIT' in +in effect, asynchronous commands ignore ‘SIGINT’ and ‘SIGQUIT’ in addition to these inherited handlers. Commands run as a result of command substitution ignore the keyboard-generated job control signals -'SIGTTIN', 'SIGTTOU', and 'SIGTSTP'. +‘SIGTTIN’, ‘SIGTTOU’, and ‘SIGTSTP’. - The shell exits by default upon receipt of a 'SIGHUP'. Before -exiting, an interactive shell resends the 'SIGHUP' to all jobs, running -or stopped. Stopped jobs are sent 'SIGCONT' to ensure that they receive -the 'SIGHUP'. To prevent the shell from sending the 'SIGHUP' signal to + The shell exits by default upon receipt of a ‘SIGHUP’. Before +exiting, an interactive shell resends the ‘SIGHUP’ to all jobs, running +or stopped. Stopped jobs are sent ‘SIGCONT’ to ensure that they receive +the ‘SIGHUP’. To prevent the shell from sending the ‘SIGHUP’ signal to a particular job, it should be removed from the jobs table with the -'disown' builtin (*note Job Control Builtins::) or marked to not receive -'SIGHUP' using 'disown -h'. +‘disown’ builtin (*note Job Control Builtins::) or marked to not receive +‘SIGHUP’ using ‘disown -h’. - If the 'huponexit' shell option has been set with 'shopt' (*note The -Shopt Builtin::), Bash sends a 'SIGHUP' to all jobs when an interactive + If the ‘huponexit’ shell option has been set with ‘shopt’ (*note The +Shopt Builtin::), Bash sends a ‘SIGHUP’ to all jobs when an interactive login shell exits. 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' builtin, the reception of a signal for which a trap has been -set will cause the 'wait' builtin to return immediately with an exit +the ‘wait’ builtin, the reception of a signal for which a trap has been +set will cause the ‘wait’ builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed. When job control is not enabled, and Bash is waiting for a foreground command to complete, the shell receives keyboard-generated signals such -as 'SIGINT' (usually generated by '^C') that users commonly intend to +as ‘SIGINT’ (usually generated by ‘^C’) that users commonly intend to send to that command. This happens because the shell and the command -are in the same process group as the terminal, and '^C' sends 'SIGINT' +are in the same process group as the terminal, and ‘^C’ sends ‘SIGINT’ to all processes in that process group. See *note Job Control::, for a more in-depth discussion of process groups. When Bash is running without job control enabled and receives -'SIGINT' while waiting for a foreground command, it waits until that +‘SIGINT’ while waiting for a foreground command, it waits until that foreground command terminates and then decides what to do about the -'SIGINT': +‘SIGINT’: - 1. If the command terminates due to the 'SIGINT', Bash concludes that - the user meant to end the entire script, and acts on the 'SIGINT' - (e.g., by running a 'SIGINT' trap or exiting itself); + 1. If the command terminates due to the ‘SIGINT’, Bash concludes that + the user meant to end the entire script, and acts on the ‘SIGINT’ + (e.g., by running a ‘SIGINT’ trap or exiting itself); - 2. If the pipeline does not terminate due to 'SIGINT', the program - handled the 'SIGINT' itself and did not treat it as a fatal signal. - In that case, Bash does not treat 'SIGINT' as a fatal signal, - either, instead assuming that the 'SIGINT' was used as part of the - program's normal operation (e.g., 'emacs' uses it to abort editing + 2. If the pipeline does not terminate due to ‘SIGINT’, the program + handled the ‘SIGINT’ itself and did not treat it as a fatal signal. + In that case, Bash does not treat ‘SIGINT’ as a fatal signal, + either, instead assuming that the ‘SIGINT’ was used as part of the + program's normal operation (e.g., ‘emacs’ uses it to abort editing commands) or deliberately discarded. However, Bash will run any - trap set on 'SIGINT', as it does with any other trapped signal it + trap set on ‘SIGINT’, as it does with any other trapped signal it receives while it is waiting for the foreground command to complete, for compatibility. @@ -3100,38 +3166,38 @@ File: bashref.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic A shell script is a text file containing shell commands. When such a file is used as the first non-option argument when invoking Bash, and -neither the '-c' nor '-s' option is supplied (*note Invoking Bash::), +neither the ‘-c’ nor ‘-s’ option is supplied (*note Invoking Bash::), Bash reads and executes commands from the file, then exits. This mode of operation creates a non-interactive shell. The shell first searches for the file in the current directory, and looks in the directories in -'$PATH' if not found there. +‘$PATH’ if not found there. - When Bash runs a shell script, it sets the special parameter '0' to + When Bash runs a shell script, it sets the special parameter ‘0’ to the name of the file, rather than the name of the shell, and the positional parameters are set to the remaining arguments, if any are given. If no additional arguments are supplied, the positional parameters are unset. - A shell script may be made executable by using the 'chmod' command to + A shell script may be made executable by using the ‘chmod’ command to turn on the execute bit. When Bash finds such a file while searching -the '$PATH' for a command, it creates a new instance of itself to +the ‘$PATH’ for a command, it creates a new instance of itself to execute it. In other words, executing filename ARGUMENTS is equivalent to executing bash filename ARGUMENTS -if 'filename' is an executable shell script. This subshell +if ‘filename’ is an executable shell script. This subshell reinitializes itself, so that the effect is as if a new shell had been invoked to interpret the script, with the exception that the locations -of commands remembered by the parent (see the description of 'hash' in +of commands remembered by the parent (see the description of ‘hash’ in *note Bourne Shell Builtins::) are retained by the child. Most versions of Unix make this a part of the operating system's command execution mechanism. If the first line of a script begins with -the two characters '#!', the remainder of the line specifies an +the two characters ‘#!’, the remainder of the line specifies an interpreter for the program and, depending on the operating system, one or more optional arguments for that interpreter. Thus, you can specify -Bash, 'awk', Perl, or some other interpreter and write the rest of the +Bash, ‘awk’, Perl, or some other interpreter and write the rest of the script file in that language. The arguments to the interpreter consist of one or more optional @@ -3145,12 +3211,12 @@ older versions of Unix limit the interpreter name and a single argument to a maximum of 32 characters, so it's not portable to assume that using more than one argument will work. - Bash scripts often begin with '#! /bin/bash' (assuming that Bash has -been installed in '/bin'), since this ensures that Bash will be used to + Bash scripts often begin with ‘#! /bin/bash’ (assuming that Bash has +been installed in ‘/bin’), since this ensures that Bash will be used to interpret the script, even if it is executed under another shell. It's -a common idiom to use 'env' to find 'bash' even if it's been installed -in another directory: '#!/usr/bin/env bash' will find the first -occurrence of 'bash' in '$PATH'. +a common idiom to use ‘env’ to find ‘bash’ even if it's been installed +in another directory: ‘#!/usr/bin/env bash’ will find the first +occurrence of ‘bash’ in ‘$PATH’.  File: bashref.info, Node: Shell Builtin Commands, Next: Shell Variables, Prev: Basic Shell Features, Up: Top @@ -3189,14 +3255,14 @@ Completion Builtins::). Many of the builtins have been extended by POSIX or Bash. Unless otherwise noted, each builtin command documented as accepting -options preceded by '-' accepts '--' to signify the end of the options. -The ':', 'true', 'false', and 'test'/'[' builtins do not accept options -and do not treat '--' specially. The 'exit', 'logout', 'return', -'break', 'continue', 'let', and 'shift' builtins accept and process -arguments beginning with '-' without requiring '--'. Other builtins +options preceded by ‘-’ accepts ‘--’ to signify the end of the options. +The ‘:’, ‘true’, ‘false’, and ‘test’/‘[’ builtins do not accept options +and do not treat ‘--’ specially. The ‘exit’, ‘logout’, ‘return’, +‘break’, ‘continue’, ‘let’, and ‘shift’ builtins accept and process +arguments beginning with ‘-’ without requiring ‘--’. Other builtins that accept arguments but are not specified as accepting options -interpret arguments beginning with '-' as invalid options and require -'--' to prevent this interpretation. +interpret arguments beginning with ‘-’ as invalid options and require +‘--’ to prevent this interpretation.  File: bashref.info, Node: Bourne Shell Builtins, Next: Bash Builtins, Up: Shell Builtin Commands @@ -3208,302 +3274,312 @@ The following shell builtin commands are inherited from the Bourne Shell. These commands are implemented as specified by the POSIX standard. -': (a colon)' +‘: (a colon)’ : [ARGUMENTS] Do nothing beyond expanding ARGUMENTS and performing redirections. The return status is zero. -'. (a period)' +‘. (a period)’ . FILENAME [ARGUMENTS] Read and execute commands from the FILENAME argument in the current - shell context. If FILENAME does not contain a slash, the 'PATH' + shell context. If FILENAME does not contain a slash, the ‘PATH’ variable is used to find FILENAME, but FILENAME does not need to be executable. When Bash is not in POSIX mode, it searches the - current directory if FILENAME is not found in '$PATH'. If any + current directory if FILENAME is not found in ‘$PATH’. If any ARGUMENTS are supplied, they become the positional parameters when FILENAME is executed. Otherwise the positional parameters are - unchanged. If the '-T' option is enabled, '.' inherits any trap on - 'DEBUG'; if it is not, any 'DEBUG' trap string is saved and - restored around the call to '.', and '.' unsets the 'DEBUG' trap - while it executes. If '-T' is not set, and the sourced file - changes the 'DEBUG' trap, the new value is retained when '.' + unchanged. If the ‘-T’ option is enabled, ‘.’ inherits any trap on + ‘DEBUG’; if it is not, any ‘DEBUG’ trap string is saved and + restored around the call to ‘.’, and ‘.’ unsets the ‘DEBUG’ trap + while it executes. If ‘-T’ is not set, and the sourced file + changes the ‘DEBUG’ trap, the new value is retained when ‘.’ completes. The return status is the exit status of the last command executed, or zero if no commands are executed. If FILENAME is not found, or cannot be read, the return status is non-zero. - This builtin is equivalent to 'source'. + This builtin is equivalent to ‘source’. -'break' +‘break’ break [N] - Exit from a 'for', 'while', 'until', or 'select' loop. If N is + Exit from a ‘for’, ‘while’, ‘until’, or ‘select’ loop. If N is supplied, the Nth enclosing loop is exited. N must be greater than or equal to 1. The return status is zero unless N is not greater than or equal to 1. -'cd' - cd [-L|[-P [-e]] [-@] [DIRECTORY] +‘cd’ + cd [-L|[-P [-e]]] [-@] [DIRECTORY] Change the current working directory to DIRECTORY. If DIRECTORY is - not supplied, the value of the 'HOME' shell variable is used. If - the shell variable 'CDPATH' exists, it is used as a search path: - each directory name in 'CDPATH' is searched for DIRECTORY, with - alternative directory names in 'CDPATH' separated by a colon (':'). - If DIRECTORY begins with a slash, 'CDPATH' is not used. - - The '-P' option means to not follow symbolic links: symbolic links - are resolved while 'cd' is traversing DIRECTORY and before - processing an instance of '..' in DIRECTORY. - - By default, or when the '-L' option is supplied, symbolic links in - DIRECTORY are resolved after 'cd' processes an instance of '..' in + not supplied, the value of the ‘HOME’ shell variable is used. If + the shell variable ‘CDPATH’ exists, ‘cd’ uses it as a search path: + ‘cd’ searches each directory name in ‘CDPATH’ for DIRECTORY, with + alternative directory names in ‘CDPATH’ separated by a colon (‘:’). + If DIRECTORY begins with a slash, ‘CDPATH’ is not used. + + The ‘-P’ option means to not follow symbolic links: symbolic links + are resolved while ‘cd’ is traversing DIRECTORY and before + processing an instance of ‘..’ in DIRECTORY. + + By default, or when the ‘-L’ option is supplied, symbolic links in + DIRECTORY are resolved after ‘cd’ processes an instance of ‘..’ in DIRECTORY. - If '..' appears in DIRECTORY, it is processed by removing the + If ‘..’ appears in DIRECTORY, it is processed by removing the immediately preceding pathname component, back to a slash or the beginning of DIRECTORY. - If the '-e' option is supplied with '-P' and the current working + If the ‘-e’ option is supplied with ‘-P’ and the current working directory cannot be successfully determined after a successful - directory change, 'cd' will return an unsuccessful status. + directory change, ‘cd’ will return an unsuccessful status. - On systems that support it, the '-@' option presents the extended + On systems that support it, the ‘-@’ option presents the extended attributes associated with a file as a directory. - If DIRECTORY is '-', it is converted to '$OLDPWD' before the + If DIRECTORY is ‘-’, it is converted to ‘$OLDPWD’ before the directory change is attempted. - If a non-empty directory name from 'CDPATH' is used, or if '-' is + If a non-empty directory name from ‘CDPATH’ is used, or if ‘-’ is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output. - If the directory change is successful, 'cd' sets the value of the - 'PWD' environment variable to the new directory name, and sets the - 'OLDPWD' environment variable to the value of the current working + If the directory change is successful, ‘cd’ sets the value of the + ‘PWD’ environment variable to the new directory name, and sets the + ‘OLDPWD’ environment variable to the value of the current working directory before the change. The return status is zero if the directory is successfully changed, non-zero otherwise. -'continue' +‘continue’ continue [N] - Resume the next iteration of an enclosing 'for', 'while', 'until', - or 'select' loop. If N is supplied, the execution of the Nth + Resume the next iteration of an enclosing ‘for’, ‘while’, ‘until’, + or ‘select’ loop. If N is supplied, the execution of the Nth enclosing loop is resumed. N must be greater than or equal to 1. The return status is zero unless N is not greater than or equal to 1. -'eval' +‘eval’ eval [ARGUMENTS] The arguments are concatenated together into a single command, which is then read and executed, and its exit status returned as - the exit status of 'eval'. If there are no arguments or only empty + the exit status of ‘eval’. If there are no arguments or only empty arguments, the return status is zero. -'exec' +‘exec’ exec [-cl] [-a NAME] [COMMAND [ARGUMENTS]] If COMMAND is supplied, it replaces the shell without creating a - new process. If the '-l' option is supplied, the shell places a + new process. If the ‘-l’ option is supplied, the shell places a dash at the beginning of the zeroth argument passed to COMMAND. - This is what the 'login' program does. The '-c' option causes - COMMAND to be executed with an empty environment. If '-a' is + This is what the ‘login’ program does. The ‘-c’ option causes + COMMAND to be executed with an empty environment. If ‘-a’ is supplied, the shell passes NAME as the zeroth argument to COMMAND. If COMMAND cannot be executed for some reason, a non-interactive - shell exits, unless the 'execfail' shell option is enabled. In + shell exits, unless the ‘execfail’ shell option is enabled. In that case, it returns failure. An interactive shell returns failure if the file cannot be executed. A subshell exits - unconditionally if 'exec' fails. If no COMMAND is specified, + unconditionally if ‘exec’ fails. If no COMMAND is specified, redirections may be used to affect the current shell environment. If there are no redirection errors, the return status is zero; otherwise the return status is non-zero. -'exit' +‘exit’ exit [N] Exit the shell, returning a status of N to the shell's parent. If N is omitted, the exit status is that of the last command executed. - Any trap on 'EXIT' is executed before the shell terminates. + Any trap on ‘EXIT’ is executed before the shell terminates. -'export' +‘export’ export [-fn] [-p] [NAME[=VALUE]] Mark each NAME to be passed to child processes in the environment. - If the '-f' option is supplied, the NAMEs refer to shell functions; - otherwise the names refer to shell variables. The '-n' option + If the ‘-f’ option is supplied, the NAMEs refer to shell functions; + otherwise the names refer to shell variables. The ‘-n’ option means to no longer mark each NAME for export. If no NAMEs are - supplied, or if the '-p' option is given, a list of names of all - exported variables is displayed. The '-p' option displays output + supplied, or if the ‘-p’ option is given, a list of names of all + exported variables is displayed. The ‘-p’ option displays output in a form that may be reused as input. If a variable name is followed by =VALUE, the value of the variable is set to VALUE. The return status is zero unless an invalid option is supplied, one - of the names is not a valid shell variable name, or '-f' is + of the names is not a valid shell variable name, or ‘-f’ is supplied with a name that is not a shell function. -'getopts' +‘false’ + false + + Does nothing, returns a non-zero status. + +‘getopts’ getopts OPTSTRING NAME [ARG ...] - 'getopts' is used by shell scripts to parse positional parameters. + ‘getopts’ is used by shell scripts to parse positional parameters. OPTSTRING contains the option characters to be recognized; if a character is followed by a colon, the option is expected to have an argument, which should be separated from it by whitespace. The - colon (':') and question mark ('?') may not be used as option - characters. Each time it is invoked, 'getopts' places the next + colon (‘:’) and question mark (‘?’) may not be used as option + characters. Each time it is invoked, ‘getopts’ places the next option in the shell variable NAME, initializing NAME if it does not exist, and the index of the next argument to be processed into the - variable 'OPTIND'. 'OPTIND' is initialized to 1 each time the + variable ‘OPTIND’. ‘OPTIND’ is initialized to 1 each time the shell or a shell script is invoked. When an option requires an - argument, 'getopts' places that argument into the variable - 'OPTARG'. The shell does not reset 'OPTIND' automatically; it must - be manually reset between multiple calls to 'getopts' within the + argument, ‘getopts’ places that argument into the variable + ‘OPTARG’. The shell does not reset ‘OPTIND’ automatically; it must + be manually reset between multiple calls to ‘getopts’ within the same shell invocation if a new set of parameters is to be used. - When the end of options is encountered, 'getopts' exits with a - return value greater than zero. 'OPTIND' is set to the index of - the first non-option argument, and NAME is set to '?'. + When the end of options is encountered, ‘getopts’ exits with a + return value greater than zero. ‘OPTIND’ is set to the index of + the first non-option argument, and NAME is set to ‘?’. - 'getopts' normally parses the positional parameters, but if more - arguments are supplied as ARG values, 'getopts' parses those + ‘getopts’ normally parses the positional parameters, but if more + arguments are supplied as ARG values, ‘getopts’ parses those instead. - 'getopts' can report errors in two ways. If the first character of + ‘getopts’ can report errors in two ways. If the first character of OPTSTRING is a colon, SILENT error reporting is used. In normal operation, diagnostic messages are printed when invalid options or - missing option arguments are encountered. If the variable 'OPTERR' + missing option arguments are encountered. If the variable ‘OPTERR’ is set to 0, no error messages will be displayed, even if the first - character of 'optstring' is not a colon. + character of ‘optstring’ is not a colon. - If an invalid option is seen, 'getopts' places '?' into NAME and, - if not silent, prints an error message and unsets 'OPTARG'. If - 'getopts' is silent, the option character found is placed in - 'OPTARG' and no diagnostic message is printed. + If ‘getopts’ detects an invalid option, it places ‘?’ into NAME + and, if not silent, prints an error message and unsets ‘OPTARG’. + If ‘getopts’ is silent, it assigns the option character found to + ‘OPTARG’ and does not print a diagnostic message. - If a required argument is not found, and 'getopts' is not silent, a - question mark ('?') is placed in NAME, 'OPTARG' is unset, and a - diagnostic message is printed. If 'getopts' is silent, then a - colon (':') is placed in NAME and 'OPTARG' is set to the option - character found. + If a required argument is not found, and ‘getopts’ is not silent, + it sets the value of NAME to a question mark (‘?’), unsets + ‘OPTARG’, and prints a diagnostic message. If ‘getopts’ is silent, + it sets the value of NAME to a colon (‘:’), and sets ‘OPTARG’ to + the option character found. -'hash' +‘hash’ hash [-r] [-p FILENAME] [-dt] [NAME] - Each time 'hash' is invoked, it remembers the full pathnames of the + Each time ‘hash’ is invoked, it remembers the full filenames of the commands specified as NAME arguments, so they need not be searched for on subsequent invocations. The commands are found by searching - through the directories listed in '$PATH'. Any - previously-remembered pathname is discarded. The '-p' option + through the directories listed in ‘$PATH’. Any + previously-remembered filename is discarded. The ‘-p’ option inhibits the path search, and FILENAME is used as the location of - NAME. The '-r' option causes the shell to forget all remembered - locations. The '-d' option causes the shell to forget the - remembered location of each NAME. If the '-t' option is supplied, + NAME. The ‘-r’ option causes the shell to forget all remembered + locations. Assigning to the ‘PATH’ variable also clears all hashed + filenames. The ‘-d’ option causes the shell to forget the + remembered location of each NAME. If the ‘-t’ option is supplied, the full pathname to which each NAME corresponds is printed. If - multiple NAME arguments are supplied with '-t', the NAME is printed - before the hashed full pathname. The '-l' option causes output to + multiple NAME arguments are supplied with ‘-t’, the NAME is printed + before the hashed full pathname. The ‘-l’ option causes output to be displayed in a format that may be reused as input. If no - arguments are given, or if only '-l' is supplied, information about - remembered commands is printed. The return status is zero unless a - NAME is not found or an invalid option is supplied. - -'pwd' + arguments are given, or if only ‘-l’ is supplied, information about + remembered commands is printed. The ‘-t’, ‘-d’, and ‘-p’ options + (the options that act on the NAME arguments) are mutually + exclusive. Only one will be active. If more than one is supplied, + ‘-t’ has higher priority than ‘-p’, and both are higher priority + than ‘-d’. The return status is zero unless a NAME is not found or + an invalid option is supplied. + +‘pwd’ pwd [-LP] Print the absolute pathname of the current working directory. If - the '-P' option is supplied, the pathname printed will not contain - symbolic links. If the '-L' option is supplied, the pathname + the ‘-P’ option is supplied, the pathname printed will not contain + symbolic links. If the ‘-L’ option is supplied, the pathname printed may contain symbolic links. The return status is zero unless an error is encountered while determining the name of the current directory or an invalid option is supplied. -'readonly' +‘readonly’ readonly [-aAf] [-p] [NAME[=VALUE]] ... Mark each NAME as readonly. The values of these names may not be - changed by subsequent assignment. If the '-f' option is supplied, - each NAME refers to a shell function. The '-a' option means each - NAME refers to an indexed array variable; the '-A' option means + changed by subsequent assignment. If the ‘-f’ option is supplied, + each NAME refers to a shell function. The ‘-a’ option means each + NAME refers to an indexed array variable; the ‘-A’ option means each NAME refers to an associative array variable. If both options - are supplied, '-A' takes precedence. If no NAME arguments are - given, or if the '-p' option is supplied, a list of all readonly + are supplied, ‘-A’ takes precedence. If no NAME arguments are + given, or if the ‘-p’ option is supplied, a list of all readonly names is printed. The other options may be used to restrict the - output to a subset of the set of readonly names. The '-p' option + output to a subset of the set of readonly names. The ‘-p’ option causes output to be displayed in a format that may be reused as input. If a variable name is followed by =VALUE, the value of the variable is set to VALUE. The return status is zero unless an invalid option is supplied, one of the NAME arguments is not a - valid shell variable or function name, or the '-f' option is + valid shell variable or function name, or the ‘-f’ option is supplied with a name that is not a shell function. -'return' +‘return’ return [N] Cause a shell function to stop executing and return the value N to its caller. If N is not supplied, the return value is the exit - status of the last command executed in the function. If 'return' + status of the last command executed in the function. If ‘return’ is executed by a trap handler, the last command used to determine the status is the last command executed before the trap handler. - If 'return' is executed during a 'DEBUG' trap, the last command + If ‘return’ is executed during a ‘DEBUG’ trap, the last command used to determine the status is the last command executed by the - trap handler before 'return' was invoked. 'return' may also be - used to terminate execution of a script being executed with the '.' - ('source') builtin, returning either N or the exit status of the + trap handler before ‘return’ was invoked. ‘return’ may also be + used to terminate execution of a script being executed with the ‘.’ + (‘source’) builtin, returning either N or the exit status of the last command executed within the script as the exit status of the script. If N is supplied, the return value is its least - significant 8 bits. Any command associated with the 'RETURN' trap + significant 8 bits. Any command associated with the ‘RETURN’ trap is executed before execution resumes after the function or script. - The return status is non-zero if 'return' is supplied a non-numeric + The return status is non-zero if ‘return’ is supplied a non-numeric argument or is used outside a function and not during the execution - of a script by '.' or 'source'. + of a script by ‘.’ or ‘source’. -'shift' +‘shift’ shift [N] Shift the positional parameters to the left by N. The positional - parameters from N+1 ... '$#' are renamed to '$1' ... '$#'-N. - 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 zero or greater than '$#', the positional parameters are + parameters from N+1 ... ‘$#’ are renamed to ‘$1’ ... ‘$#’-N. + 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 zero or greater than ‘$#’, the positional parameters are not changed. If N is not supplied, it is assumed to be 1. The - return status is zero unless N is greater than '$#' or less than + return status is zero unless N is greater than ‘$#’ or less than zero, non-zero otherwise. -'test' -'[' +‘test’ +‘[’ test EXPR Evaluate a conditional expression EXPR and return a status of 0 (true) or 1 (false). Each operator and operand must be a separate argument. Expressions are composed of the primaries described - below in *note Bash Conditional Expressions::. 'test' does not + below in *note Bash Conditional Expressions::. ‘test’ does not accept any options, nor does it accept and ignore an argument of - '--' as signifying the end of options. + ‘--’ as signifying the end of options. - When the '[' form is used, the last argument to the command must be - a ']'. + When the ‘[’ form is used, the last argument to the command must be + a ‘]’. Expressions may be combined using the following operators, listed in decreasing order of precedence. The evaluation depends on the number of arguments; see below. Operator precedence is used when there are five or more arguments. - '! EXPR' + ‘! EXPR’ True if EXPR is false. - '( EXPR )' + ‘( EXPR )’ Returns the value of EXPR. This may be used to override the normal precedence of operators. - 'EXPR1 -a EXPR2' + ‘EXPR1 -a EXPR2’ True if both EXPR1 and EXPR2 are true. - 'EXPR1 -o EXPR2' + ‘EXPR1 -o EXPR2’ True if either EXPR1 or EXPR2 is true. - The 'test' and '[' builtins evaluate conditional expressions using + The ‘test’ and ‘[’ builtins evaluate conditional expressions using a set of rules based on the number of arguments. 0 arguments @@ -3514,7 +3590,7 @@ standard. null. 2 arguments - If the first argument is '!', the expression is true if and + If the first argument is ‘!’, the expression is true if and only if the second argument is null. If the first argument is one of the unary conditional operators (*note Bash Conditional Expressions::), the expression is true if the unary test is @@ -3528,24 +3604,24 @@ standard. operators (*note Bash Conditional Expressions::), the result of the expression is the result of the binary test using the first and third arguments as operands. The - '-a' and '-o' operators are considered binary operators + ‘-a’ and ‘-o’ operators are considered binary operators when there are three arguments. - 2. If the first argument is '!', the value is the negation + 2. If the first argument is ‘!’, the value is the negation of the two-argument test using the second and third arguments. - 3. If the first argument is exactly '(' and the third - argument is exactly ')', the result is the one-argument + 3. If the first argument is exactly ‘(’ and the third + argument is exactly ‘)’, the result is the one-argument test of the second argument. 4. Otherwise, the expression is false. 4 arguments The following conditions are applied in the order listed. - 1. If the first argument is '!', the result is the negation + 1. If the first argument is ‘!’, the result is the negation of the three-argument expression composed of the remaining arguments. - 2. If the first argument is exactly '(' and the fourth - argument is exactly ')', the result is the two-argument + 2. If the first argument is exactly ‘(’ and the fourth + argument is exactly ‘)’, the result is the two-argument test of the second and third arguments. 3. Otherwise, the expression is parsed and evaluated according to precedence using the rules listed above. @@ -3554,92 +3630,127 @@ standard. The expression is parsed and evaluated according to precedence using the rules listed above. - When used with 'test' or '[', the '<' and '>' operators sort - lexicographically using ASCII ordering. + If the shell is in POSIX mode, or if the expression is part of the + ‘[[’ command, the ‘<’ and ‘>’ operators sort using the current + locale. If the shell is not in POSIX mode, the ‘test’ and ‘[’ + commands sort lexicographically using ASCII ordering. + + The historical operator-precedence parsing with 4 or more arguments + can lead to ambiguities when it encounters strings that look like + primaries. The POSIX standard has deprecated the ‘-a’ and ‘-o’ + primaries and enclosing expressions within parentheses. Scripts + should no longer use them. It's much more reliable to restrict + test invocations to a single primary, and to replace uses of ‘-a’ + and ‘-o’ with the shell's ‘&&’ and ‘||’ list operators. For + example, use -'times' + test -n string1 && test -n string2 + + instead of + + test -n string1 -a -n string2 + +‘times’ times Print out the user and system times used by the shell and its children. The return status is zero. -'trap' - trap [-lp] [ARG] [SIGSPEC ...] - - The commands in ARG are to be read and executed when the shell - receives signal SIGSPEC. If ARG is absent (and there is a single - SIGSPEC) or equal to '-', each specified signal's disposition is - reset to the value it had when the shell was started. If ARG is - the null string, then the signal specified by each SIGSPEC is - ignored by the shell and commands it invokes. If ARG is not - present and '-p' has been supplied, the shell displays the trap - commands associated with each SIGSPEC. If no arguments are - supplied, or only '-p' is given, 'trap' prints the list of commands - associated with each signal number in a form that may be reused as - shell input. The '-l' option causes the shell to print a list of - signal names and their corresponding numbers. Each SIGSPEC is - either a signal name or a signal number. Signal names are case - insensitive and the 'SIG' prefix is optional. - - If a SIGSPEC is '0' or 'EXIT', ARG is executed when the shell - exits. If a SIGSPEC is 'DEBUG', the command ARG is executed before - every simple command, 'for' command, 'case' command, 'select' - command, every arithmetic 'for' command, and before the first - command executes in a shell function. Refer to the description of - the 'extdebug' option to the 'shopt' builtin (*note The Shopt - Builtin::) for details of its effect on the 'DEBUG' trap. If a - SIGSPEC is 'RETURN', the command ARG is executed each time a shell - function or a script executed with the '.' or 'source' builtins - finishes executing. - - If a SIGSPEC is 'ERR', the command ARG is executed whenever a - pipeline (which may consist of a single simple command), a list, or - a compound command returns a non-zero exit status, subject to the - following conditions. The 'ERR' trap is not executed if the failed +‘trap’ + trap [-Plp] [ACTION] [SIGSPEC ...] + + The ACTION is a command that is read and executed when the shell + receives signal SIGSPEC. If ACTION is absent (and there is a + single SIGSPEC) or equal to ‘-’, each specified signal's + disposition is reset to the value it had when the shell was + started. If ACTION is the null string, then the signal specified + by each SIGSPEC is ignored by the shell and commands it invokes. + + If no arguments are supplied, ‘trap’ prints the actions associated + with each trapped signal as a set of ‘trap’ commands that can be + reused as shell input to restore the current signal dispositions. + If ACTION is not present and ‘-p’ has been supplied, ‘trap’ + displays the trap commands associated with each SIGSPEC, or, if no + SIGSPECs are supplied, for all trapped signals, as a set of ‘trap’ + commands that can be reused as shell input to restore the current + signal dispositions. The ‘-P’ option behaves similarly, but + displays only the actions associated with each SIGSPEC argument. + ‘-P’ requires at least one SIGSPEC argument. The ‘-P’ or ‘-p’ + options to ‘trap’ may be used in a subshell environment (e.g., + command substitution) and, as long as they are used before ‘trap’ + is used to change a signal's handling, will display the state of + its parent's traps. + + The ‘-l’ option causes ‘trap’ to print a list of signal names and + their corresponding numbers. Each SIGSPEC is either a signal name + or a signal number. Signal names are case insensitive and the + ‘SIG’ prefix is optional. + + If a SIGSPEC is ‘0’ or ‘EXIT’, ACTION is executed when the shell + exits. If a SIGSPEC is ‘DEBUG’, ACTION is executed before every + simple command, ‘for’ command, ‘case’ command, ‘select’ command, (( + arithmetic command, [[ conditional command, arithmetic ‘for’ + command, and before the first command executes in a shell function. + Refer to the description of the ‘extdebug’ option to the ‘shopt’ + builtin (*note The Shopt Builtin::) for details of its effect on + the ‘DEBUG’ trap. If a SIGSPEC is ‘RETURN’, ACTION is executed + each time a shell function or a script executed with the ‘.’ or + ‘source’ builtins finishes executing. + + If a SIGSPEC is ‘ERR’, ACTION is executed whenever a pipeline + (which may consist of a single simple command), a list, or a + compound command returns a non-zero exit status, subject to the + following conditions. The ‘ERR’ trap is not executed if the failed command is part of the command list immediately following an - 'until' or 'while' keyword, part of the test following the 'if' or - 'elif' reserved words, part of a command executed in a '&&' or '||' - list except the command following the final '&&' or '||', any + ‘until’ or ‘while’ keyword, part of the test following the ‘if’ or + ‘elif’ reserved words, part of a command executed in a ‘&&’ or ‘||’ + list except the command following the final ‘&&’ or ‘||’, any command in a pipeline but the last, or if the command's return - status is being inverted using '!'. These are the same conditions - obeyed by the 'errexit' ('-e') option. + status is being inverted using ‘!’. These are the same conditions + obeyed by the ‘errexit’ (‘-e’) option. - Signals ignored upon entry to the shell cannot be trapped or reset. - Trapped signals that are not being ignored are reset to their - original values in a subshell or subshell environment when one is - created. + Signals ignored upon entry to a non-interactive shell cannot be + trapped or reset. Interactive shells permit trapping signals + ignored on entry. Trapped signals that are not being ignored are + reset to their original values in a subshell or subshell + environment when one is created. The return status is zero unless a SIGSPEC does not specify a valid signal. -'umask' +‘true’ + true + + Does nothing, returns a 0 status. + +‘umask’ umask [-p] [-S] [MODE] Set the shell process's file creation mask to MODE. If MODE begins with a digit, it is interpreted as an octal number; if not, it is interpreted as a symbolic mode mask similar to that accepted by the - 'chmod' command. If MODE is omitted, the current value of the mask - is printed. If the '-S' option is supplied without a MODE - argument, the mask is printed in a symbolic format. If the '-p' + ‘chmod’ command. If MODE is omitted, the current value of the mask + is printed. If the ‘-S’ option is supplied without a MODE + argument, the mask is printed in a symbolic format. If the ‘-p’ option is supplied, and MODE is omitted, the output is in a form that may be reused as input. The return status is zero if the mode is successfully changed or if no MODE argument is supplied, and non-zero otherwise. Note that when the mode is interpreted as an octal number, each - number of the umask is subtracted from '7'. Thus, a umask of '022' - results in permissions of '755'. + number of the umask is subtracted from ‘7’. Thus, a umask of ‘022’ + results in permissions of ‘755’. -'unset' +‘unset’ unset [-fnv] [NAME] - Remove each variable or function NAME. If the '-v' option is + Remove each variable or function NAME. If the ‘-v’ option is given, each NAME refers to a shell variable and that variable is - removed. If the '-f' option is given, the NAMEs refer to shell - functions, and the function definition is removed. If the '-n' - option is supplied, and NAME is a variable with the 'nameref' + removed. If the ‘-f’ option is given, the NAMEs refer to shell + functions, and the function definition is removed. If the ‘-n’ + option is supplied, and NAME is a variable with the ‘nameref’ attribute, NAME will be unset rather than the variable it - references. '-n' has no effect if the '-f' option is supplied. If + references. ‘-n’ has no effect if the ‘-f’ option is supplied. If no options are supplied, each NAME refers to a variable; if there is no variable by that name, a function with that name, if any, is unset. Readonly variables and functions may not be unset. Some @@ -3658,21 +3769,21 @@ This section describes builtin commands which are unique to or have been extended in Bash. Some of these commands are specified in the POSIX standard. -'alias' +‘alias’ alias [-p] [NAME[=VALUE] ...] - Without arguments or with the '-p' option, 'alias' prints the list + Without arguments or with the ‘-p’ option, ‘alias’ prints the list of aliases on the standard output in a form that allows them to be reused as input. If arguments are supplied, an alias is defined for each NAME whose VALUE is given. If no VALUE is given, the name and value of the alias is printed. Aliases are described in *note Aliases::. -'bind' +‘bind’ bind [-m KEYMAP] [-lpsvPSVX] bind [-m KEYMAP] [-q FUNCTION] [-u FUNCTION] [-r KEYSEQ] bind [-m KEYMAP] -f FILENAME - bind [-m KEYMAP] -x KEYSEQ:SHELL-COMMAND + bind [-m KEYMAP] -x KEYSEQ[: ]SHELL-COMMAND bind [-m KEYMAP] KEYSEQ:FUNCTION-NAME bind [-m KEYMAP] KEYSEQ:READLINE-COMMAND bind READLINE-COMMAND-LINE @@ -3682,80 +3793,91 @@ standard. macro, or set a Readline variable. Each non-option argument is a command as it would appear in a Readline initialization file (*note Readline Init File::), but each binding or command must be passed - as a separate argument; e.g., '"\C-x\C-r":re-read-init-file'. + as a separate argument; e.g., ‘"\C-x\C-r":re-read-init-file’. Options, if supplied, have the following meanings: - '-m KEYMAP' + ‘-m KEYMAP’ Use KEYMAP as the keymap to be affected by the subsequent - bindings. Acceptable KEYMAP names are 'emacs', - 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move', - 'vi-command', and 'vi-insert'. 'vi' is equivalent to - 'vi-command' ('vi-move' is also a synonym); 'emacs' is - equivalent to 'emacs-standard'. + bindings. Acceptable KEYMAP names are ‘emacs’, + ‘emacs-standard’, ‘emacs-meta’, ‘emacs-ctlx’, ‘vi’, ‘vi-move’, + ‘vi-command’, and ‘vi-insert’. ‘vi’ is equivalent to + ‘vi-command’ (‘vi-move’ is also a synonym); ‘emacs’ is + equivalent to ‘emacs-standard’. - '-l' + ‘-l’ List the names of all Readline functions. - '-p' + ‘-p’ Display Readline function names and bindings in such a way - that they can be used as input or in a Readline initialization - file. + that they can be used as an argument to a subsequent ‘bind’ + command or in a Readline initialization file. - '-P' + ‘-P’ List current Readline function names and bindings. - '-v' + ‘-v’ Display Readline variable names and values in such a way that - they can be used as input or in a Readline initialization - file. + they can be used as an argument to a subsequent ‘bind’ command + or in a Readline initialization file. - '-V' + ‘-V’ List current Readline variable names and values. - '-s' + ‘-s’ Display Readline key sequences bound to macros and the strings - they output in such a way that they can be used as input or in - a Readline initialization file. + they output in such a way that they can be used as an argument + to a subsequent ‘bind’ command or in a Readline initialization + file. - '-S' + ‘-S’ Display Readline key sequences bound to macros and the strings they output. - '-f FILENAME' + ‘-f FILENAME’ Read key bindings from FILENAME. - '-q FUNCTION' + ‘-q FUNCTION’ Query about which keys invoke the named FUNCTION. - '-u FUNCTION' + ‘-u FUNCTION’ Unbind all keys bound to the named FUNCTION. - '-r KEYSEQ' + ‘-r KEYSEQ’ Remove any current binding for KEYSEQ. - '-x KEYSEQ:SHELL-COMMAND' + ‘-x KEYSEQ:SHELL-COMMAND’ Cause SHELL-COMMAND to be executed whenever KEYSEQ is entered. + The separator between KEYSEQ and SHELL-COMMAND is either + whitespace or a colon optionally followed by whitespace. If + the separator is whitespace, SHELL-COMMAND must be enclosed in + double quotes and Readline expands any of its special + backslash-escapes in SHELL-COMMAND before saving it. If the + separator is a colon, any enclosing double quotes are + optional, and Readline does not expand the command string + before saving it. Since the entire key binding expression + must be a single argument, it should be enclosed in quotes. When SHELL-COMMAND is executed, the shell sets the - 'READLINE_LINE' variable to the contents of the Readline line - buffer and the 'READLINE_POINT' and 'READLINE_MARK' variables + ‘READLINE_LINE’ variable to the contents of the Readline line + buffer and the ‘READLINE_POINT’ and ‘READLINE_MARK’ variables to the current location of the insertion point and the saved insertion point (the MARK), respectively. The shell assigns any numeric argument the user supplied to the - 'READLINE_ARGUMENT' variable. If there was no argument, that + ‘READLINE_ARGUMENT’ variable. If there was no argument, that variable is not set. If the executed command changes the - value of any of 'READLINE_LINE', 'READLINE_POINT', or - 'READLINE_MARK', those new values will be reflected in the + value of any of ‘READLINE_LINE’, ‘READLINE_POINT’, or + ‘READLINE_MARK’, those new values will be reflected in the editing state. - '-X' + ‘-X’ List all key sequences bound to shell commands and the - associated commands in a format that can be reused as input. + associated commands in a format that can be reused as an + argument to a subsequent ‘bind’ command. The return status is zero unless an invalid option is supplied or an error occurs. -'builtin' +‘builtin’ builtin [SHELL-BUILTIN [ARGS]] Run a shell builtin, passing it ARGS, and return its exit status. @@ -3764,15 +3886,15 @@ standard. the function. The return status is non-zero if SHELL-BUILTIN is not a shell builtin command. -'caller' +‘caller’ caller [EXPR] Returns the context of any active subroutine call (a shell function - or a script executed with the '.' or 'source' builtins). + or a script executed with the ‘.’ or ‘source’ builtins). - Without EXPR, 'caller' displays the line number and source filename + Without EXPR, ‘caller’ displays the line number and source filename of the current subroutine call. If a non-negative integer is - supplied as EXPR, 'caller' displays the line number, subroutine + supplied as EXPR, ‘caller’ displays the line number, subroutine name, and source file corresponding to that position in the current execution call stack. This extra information may be used, for example, to print a stack trace. The current frame is frame 0. @@ -3781,313 +3903,316 @@ standard. subroutine call or EXPR does not correspond to a valid position in the call stack. -'command' +‘command’ command [-pVv] COMMAND [ARGUMENTS ...] Runs COMMAND with ARGUMENTS ignoring any shell function named COMMAND. Only shell builtin commands or commands found by - searching the 'PATH' are executed. If there is a shell function - named 'ls', running 'command ls' within the function will execute - the external command 'ls' instead of calling the function - recursively. The '-p' option means to use a default value for - 'PATH' that is guaranteed to find all of the standard utilities. + searching the ‘PATH’ are executed. If there is a shell function + named ‘ls’, running ‘command ls’ within the function will execute + the external command ‘ls’ instead of calling the function + recursively. The ‘-p’ option means to use a default value for + ‘PATH’ that is guaranteed to find all of the standard utilities. The return status in this case is 127 if COMMAND cannot be found or an error occurred, and the exit status of COMMAND otherwise. - If either the '-V' or '-v' option is supplied, a description of - COMMAND is printed. The '-v' option causes a single word + If either the ‘-V’ or ‘-v’ option is supplied, a description of + COMMAND is printed. The ‘-v’ option causes a single word indicating the command or file name used to invoke COMMAND to be - displayed; the '-V' option produces a more verbose description. In + displayed; the ‘-V’ option produces a more verbose description. In this case, the return status is zero if COMMAND is found, and non-zero if not. -'declare' +‘declare’ declare [-aAfFgiIlnrtux] [-p] [NAME[=VALUE] ...] Declare variables and give them attributes. If no NAMEs are given, then display the values of variables instead. - The '-p' option will display the attributes and values of each - NAME. When '-p' is used with NAME arguments, additional options, - other than '-f' and '-F', are ignored. + The ‘-p’ option will display the attributes and values of each + NAME. When ‘-p’ is used with NAME arguments, additional options, + other than ‘-f’ and ‘-F’, are ignored. - When '-p' is supplied without NAME arguments, 'declare' will + When ‘-p’ is supplied without NAME arguments, ‘declare’ will display the attributes and values of all variables having the attributes specified by the additional options. If no other - options are supplied with '-p', 'declare' will display the - attributes and values of all shell variables. The '-f' option will + options are supplied with ‘-p’, ‘declare’ will display the + attributes and values of all shell variables. The ‘-f’ option will restrict the display to shell functions. - The '-F' option inhibits the display of function definitions; only - the function name and attributes are printed. If the 'extdebug' - shell option is enabled using 'shopt' (*note The Shopt Builtin::), + The ‘-F’ option inhibits the display of function definitions; only + the function name and attributes are printed. If the ‘extdebug’ + shell option is enabled using ‘shopt’ (*note The Shopt Builtin::), the source file name and line number where each NAME is defined are - displayed as well. '-F' implies '-f'. + displayed as well. ‘-F’ implies ‘-f’. - The '-g' option forces variables to be created or modified at the - global scope, even when 'declare' is executed in a shell function. + The ‘-g’ option forces variables to be created or modified at the + global scope, even when ‘declare’ is executed in a shell function. It is ignored in all other cases. - The '-I' option causes local variables to inherit the attributes - (except the 'nameref' attribute) and value of any existing variable + The ‘-I’ option causes local variables to inherit the attributes + (except the ‘nameref’ attribute) and value of any existing variable with the same NAME at a surrounding scope. If there is no existing variable, the local variable is initially unset. The following options can be used to restrict output to variables with the specified attributes or to give variables attributes: - '-a' + ‘-a’ Each NAME is an indexed array variable (*note Arrays::). - '-A' + ‘-A’ Each NAME is an associative array variable (*note Arrays::). - '-f' + ‘-f’ Use function names only. - '-i' + ‘-i’ The variable is to be treated as an integer; arithmetic evaluation (*note Shell Arithmetic::) is performed when the variable is assigned a value. - '-l' + ‘-l’ When the variable is assigned a value, all upper-case characters are converted to lower-case. The upper-case attribute is disabled. - '-n' - Give each NAME the 'nameref' attribute, making it a name + ‘-n’ + Give each NAME the ‘nameref’ attribute, making it a name reference to another variable. That other variable is defined by the value of NAME. All references, assignments, and attribute modifications to NAME, except for those using or - changing the '-n' attribute itself, are performed on the + changing the ‘-n’ attribute itself, are performed on the variable referenced by NAME's value. The nameref attribute cannot be applied to array variables. - '-r' + ‘-r’ Make NAMEs readonly. These names cannot then be assigned values by subsequent assignment statements or unset. - '-t' - Give each NAME the 'trace' attribute. Traced functions - inherit the 'DEBUG' and 'RETURN' traps from the calling shell. + ‘-t’ + Give each NAME the ‘trace’ attribute. Traced functions + inherit the ‘DEBUG’ and ‘RETURN’ traps from the calling shell. The trace attribute has no special meaning for variables. - '-u' + ‘-u’ When the variable is assigned a value, all lower-case characters are converted to upper-case. The lower-case attribute is disabled. - '-x' + ‘-x’ Mark each NAME for export to subsequent commands via the environment. - Using '+' instead of '-' turns off the attribute instead, with the - exceptions that '+a' and '+A' may not be used to destroy array - variables and '+r' will not remove the readonly attribute. When - used in a function, 'declare' makes each NAME local, as with the - 'local' command, unless the '-g' option is used. If a variable + Using ‘+’ instead of ‘-’ turns off the attribute instead, with the + exceptions that ‘+a’ and ‘+A’ may not be used to destroy array + variables and ‘+r’ will not remove the readonly attribute. When + used in a function, ‘declare’ makes each NAME local, as with the + ‘local’ command, unless the ‘-g’ option is used. If a variable name is followed by =VALUE, the value of the variable is set to VALUE. - When using '-a' or '-A' and the compound assignment syntax to + When using ‘-a’ or ‘-A’ and the compound assignment syntax to create array variables, additional attributes do not take effect until subsequent assignments. The return status is zero unless an invalid option is encountered, - an attempt is made to define a function using '-f foo=bar', an + 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 (*note Arrays::), one of the NAMEs is not a valid shell variable name, an attempt is made to turn off readonly 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 '-f'. + is made to display a non-existent function with ‘-f’. -'echo' +‘echo’ echo [-neE] [ARG ...] Output the ARGs, separated by spaces, terminated with a newline. - The return status is 0 unless a write error occurs. If '-n' is - specified, the trailing newline is suppressed. If the '-e' option + The return status is 0 unless a write error occurs. If ‘-n’ is + specified, the trailing newline is suppressed. If the ‘-e’ option is given, interpretation of the following backslash-escaped - characters is enabled. The '-E' option disables the interpretation + characters is enabled. The ‘-E’ option disables the interpretation of these escape characters, even on systems where they are - interpreted by default. The 'xpg_echo' shell option may be used to - dynamically determine whether or not 'echo' expands these escape - characters by default. 'echo' does not interpret '--' to mean the - end of options. + interpreted by default. The ‘xpg_echo’ shell option may be used to + dynamically determine whether or not ‘echo’ interprets any options + and expands these escape characters by default. ‘echo’ does not + interpret ‘--’ to mean the end of options. - 'echo' interprets the following escape sequences: - '\a' + ‘echo’ interprets the following escape sequences: + ‘\a’ alert (bell) - '\b' + ‘\b’ backspace - '\c' + ‘\c’ suppress further output - '\e' - '\E' + ‘\e’ + ‘\E’ escape - '\f' + ‘\f’ form feed - '\n' + ‘\n’ new line - '\r' + ‘\r’ carriage return - '\t' + ‘\t’ horizontal tab - '\v' + ‘\v’ vertical tab - '\\' + ‘\\’ backslash - '\0NNN' + ‘\0NNN’ the eight-bit character whose value is the octal value NNN (zero to three octal digits) - '\xHH' + ‘\xHH’ the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) - '\uHHHH' + ‘\uHHHH’ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) - '\UHHHHHHHH' + ‘\UHHHHHHHH’ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits) -'enable' +‘enable’ enable [-a] [-dnps] [-f FILENAME] [NAME ...] 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 '-n' + shell normally searches for builtins before disk commands. If ‘-n’ is used, the NAMEs become disabled. Otherwise NAMEs are enabled. - For example, to use the 'test' binary found via '$PATH' instead of - the shell builtin version, type 'enable -n test'. + For example, to use the ‘test’ binary found via ‘$PATH’ instead of + the shell builtin version, type ‘enable -n test’. - If the '-p' option is supplied, or no NAME arguments appear, a list + If the ‘-p’ option is supplied, or no NAME arguments appear, a list of shell builtins is printed. With no other arguments, the list - consists of all enabled shell builtins. The '-a' option means to + consists of all enabled shell builtins. The ‘-a’ option means to list each builtin with an indication of whether or not it is enabled. - The '-f' option means to load the new builtin command NAME from + The ‘-f’ option means to load the new builtin command NAME from shared object FILENAME, on systems that support dynamic loading. - Bash will use the value of the 'BASH_LOADABLES_PATH' variable as a + Bash will use the value of the ‘BASH_LOADABLES_PATH’ variable as a colon-separated list of directories in which to search for - FILENAME. The default is system-dependent. The '-d' option will - delete a builtin loaded with '-f'. + FILENAME, if FILENAME does not contain a slash. The default is + system-dependent, and may include "." to force a search of the + current directory. The ‘-d’ option will delete a builtin loaded + with ‘-f’. If there are no options, a list of the shell builtins is displayed. - The '-s' option restricts 'enable' to the POSIX special builtins. - If '-s' is used with '-f', the new builtin becomes a special + The ‘-s’ option restricts ‘enable’ to the POSIX special builtins. + If ‘-s’ is used with ‘-f’, the new builtin becomes a special builtin (*note Special Builtins::). If no options are supplied and a NAME is not a shell builtin, - 'enable' will attempt to load NAME from a shared object named NAME, - as if the command were 'enable -f NAME NAME'. + ‘enable’ will attempt to load NAME from a shared object named NAME, + as if the command were ‘enable -f NAME NAME’. The return status is zero unless a NAME is not a shell builtin or there is an error loading a new builtin from a shared object. -'help' +‘help’ help [-dms] [PATTERN] Display helpful information about builtin commands. If PATTERN is - specified, 'help' gives detailed help on all commands matching + specified, ‘help’ gives detailed help on all commands matching PATTERN, otherwise a list of the builtins is printed. Options, if supplied, have the following meanings: - '-d' + ‘-d’ Display a short description of each PATTERN - '-m' + ‘-m’ Display the description of each PATTERN in a manpage-like format - '-s' + ‘-s’ Display only a short usage synopsis for each PATTERN The return status is zero unless no command matches PATTERN. -'let' +‘let’ let EXPRESSION [EXPRESSION ...] - The 'let' builtin allows arithmetic to be performed on shell + The ‘let’ builtin allows arithmetic to be performed on shell variables. Each EXPRESSION is evaluated according to the rules given below in *note Shell Arithmetic::. If the last EXPRESSION - evaluates to 0, 'let' returns 1; otherwise 0 is returned. + evaluates to 0, ‘let’ returns 1; otherwise 0 is returned. -'local' +‘local’ local [OPTION] NAME[=VALUE] ... For each argument, a local variable named NAME is created, and assigned VALUE. The OPTION can be any of the options accepted by - 'declare'. 'local' can only be used within a function; it makes + ‘declare’. ‘local’ can only be used within a function; it makes the variable NAME have a visible scope restricted to that function - and its children. If NAME is '-', the set of shell options is made - local to the function in which 'local' is invoked: shell options - changed using the 'set' builtin inside the function are restored to - their original values when the function returns. The restore is - effected as if a series of 'set' commands were executed to restore - the values that were in place before the function. The return - status is zero unless 'local' is used outside a function, an - invalid NAME is supplied, or NAME is a readonly variable. - -'logout' + and its children. If NAME is ‘-’, the set of shell options is made + local to the function in which ‘local’ is invoked: shell options + changed using the ‘set’ builtin inside the function after the call + to ‘local’ are restored to their original values when the function + returns. The restore is effected as if a series of ‘set’ commands + were executed to restore the values that were in place before the + function. The return status is zero unless ‘local’ is used outside + a function, an invalid NAME is supplied, or NAME is a readonly + variable. + +‘logout’ logout [N] Exit a login shell, returning a status of N to the shell's parent. -'mapfile' +‘mapfile’ mapfile [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] [-u FD] [-C CALLBACK] [-c QUANTUM] [ARRAY] Read lines from the standard input into the indexed array variable - ARRAY, or from file descriptor FD if the '-u' option is supplied. - The variable 'MAPFILE' is the default ARRAY. Options, if supplied, + ARRAY, or from file descriptor FD if the ‘-u’ option is supplied. + The variable ‘MAPFILE’ is the default ARRAY. Options, if supplied, have the following meanings: - '-d' + ‘-d’ The first character of DELIM is used to terminate each input line, rather than newline. If DELIM is the empty string, - 'mapfile' will terminate a line when it reads a NUL character. - '-n' + ‘mapfile’ will terminate a line when it reads a NUL character. + ‘-n’ Copy at most COUNT lines. If COUNT is 0, all lines are copied. - '-O' + ‘-O’ Begin assigning to ARRAY at index ORIGIN. The default index is 0. - '-s' + ‘-s’ Discard the first COUNT lines read. - '-t' + ‘-t’ Remove a trailing DELIM (default newline) from each line read. - '-u' + ‘-u’ Read lines from file descriptor FD instead of the standard input. - '-C' - Evaluate CALLBACK each time QUANTUM lines are read. The '-c' + ‘-C’ + Evaluate CALLBACK each time QUANTUM lines are read. The ‘-c’ option specifies QUANTUM. - '-c' + ‘-c’ Specify the number of lines read between each call to CALLBACK. - If '-C' is specified without '-c', the default quantum is 5000. + If ‘-C’ is specified without ‘-c’, the default quantum is 5000. When CALLBACK is evaluated, it is supplied the index of the next array element to be assigned and the line to be assigned to that element as additional arguments. CALLBACK is evaluated after the line is read but before the array element is assigned. - If not supplied with an explicit origin, 'mapfile' will clear ARRAY + If not supplied with an explicit origin, ‘mapfile’ will clear ARRAY before assigning to it. - 'mapfile' returns successfully unless an invalid option or option + ‘mapfile’ returns successfully unless an invalid option or option argument is supplied, ARRAY is invalid or unassignable, or ARRAY is not an indexed array. -'printf' +‘printf’ printf [-v VAR] FORMAT [ARGUMENTS] Write the formatted ARGUMENTS to the standard output under the - control of the FORMAT. The '-v' option causes the output to be + control of the FORMAT. The ‘-v’ option causes the output to be assigned to the variable VAR rather than being printed to the standard output. @@ -4096,33 +4221,48 @@ standard. output, character escape sequences, which are converted and copied to the standard output, and format specifications, each of which causes printing of the next successive ARGUMENT. In addition to - the standard 'printf(1)' formats, 'printf' interprets the following - extensions: + the standard ‘printf(3)’ format characters ‘csndiouxXeEfFgGaA’, + ‘printf’ interprets the following additional format specifiers: - '%b' - Causes 'printf' to expand backslash escape sequences in the - corresponding ARGUMENT in the same way as 'echo -e' (*note + ‘%b’ + Causes ‘printf’ to expand backslash escape sequences in the + corresponding ARGUMENT in the same way as ‘echo -e’ (*note Bash Builtins::). - '%q' - Causes 'printf' to output the corresponding ARGUMENT in a - format that can be reused as shell input. - '%Q' - like '%q', but applies any supplied precision to the ARGUMENT + ‘%q’ + Causes ‘printf’ to output the corresponding ARGUMENT in a + format that can be reused as shell input. ‘%q’ and ‘%Q’P use + the ANSI-C quoting style (*note ANSI-C Quoting::) if any + characters in the argument string require it, and backslash + quoting otherwise. If the format string uses the ‘printf’ + ALTERNATE FORM, these two formats quote the argument string + using single quotes. + + ‘%Q’ + like ‘%q’, but applies any supplied precision to the ARGUMENT before quoting it. - '%(DATEFMT)T' - Causes 'printf' to output the date-time string resulting from - using DATEFMT as a format string for 'strftime'(3). The + + ‘%(DATEFMT)T’ + Causes ‘printf’ to output the date-time string resulting from + using DATEFMT as a format string for ‘strftime’(3). The corresponding ARGUMENT is an integer representing the number of seconds since the epoch. Two special argument values may be used: -1 represents the current time, and -2 represents the time the shell was invoked. If no argument is specified, conversion behaves as if -1 had been given. This is an - exception to the usual 'printf' behavior. + exception to the usual ‘printf’ behavior. + + The %b, %q, and %T format specifiers all use the field width and + precision arguments from the format specification and write that + many bytes from (or use that wide a field for) the expanded + argument, which usually contains more characters than the original. - The %b, %q, and %T directives all use the field width and precision - arguments from the format specification and write that many bytes - from (or use that wide a field for) the expanded argument, which - usually contains more characters than the original. + The %n format specifier accepts a corresponding argument that is + treated as a shell variable name. + + The %s and %c format specifiers accept an l (long) modifier, which + forces them to convert the argument string to a wide-character + string and apply any supplied field width and precision in terms of + characters, not bytes. Arguments to non-string format specifiers are treated as C language constants, except that a leading plus or minus sign is allowed, and @@ -4133,267 +4273,283 @@ standard. If the FORMAT requires more ARGUMENTS than are supplied, 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. + success, non-zero if an invalid option is supplied or a write or + assignment error occurs. -'read' - read [-ers] [-a ANAME] [-d DELIM] [-i TEXT] [-n NCHARS] +‘read’ + read [-Eers] [-a ANAME] [-d DELIM] [-i TEXT] [-n NCHARS] [-N NCHARS] [-p PROMPT] [-t TIMEOUT] [-u FD] [NAME ...] One line is read from the standard input, or from the file - descriptor FD supplied as an argument to the '-u' option, split + descriptor FD supplied as an argument to the ‘-u’ option, split into words as described above in *note Word Splitting::, and the first word is assigned to the first NAME, the second word to the second NAME, and so on. If there are more words than names, the remaining words and their intervening delimiters are assigned to the last NAME. If there are fewer words read from the input stream than names, the remaining names are assigned empty values. The - characters in the value of the 'IFS' variable are used to split the + characters in the value of the ‘IFS’ variable are used to split the line into words using the same rules the shell uses for expansion (described above in *note Word Splitting::). The backslash - character '\' may be used to remove any special meaning for the + character ‘\’ may be used to remove any special meaning for the next character read and for line continuation. Options, if supplied, have the following meanings: - '-a ANAME' + ‘-a ANAME’ The words are assigned to sequential indices of the array variable ANAME, starting at 0. All elements are removed from ANAME before the assignment. Other NAME arguments are ignored. - '-d DELIM' + ‘-d DELIM’ The first character of DELIM is used to terminate the input line, rather than newline. If DELIM is the empty string, - 'read' will terminate a line when it reads a NUL character. + ‘read’ will terminate a line when it reads a NUL character. - '-e' + ‘-e’ Readline (*note Command Line Editing::) is used to obtain the line. Readline uses the current (or default, if line editing was not previously active) editing settings, but uses Readline's default filename completion. - '-i TEXT' + ‘-E’ + Readline (*note Command Line Editing::) is used to obtain the + line. Readline uses the current (or default, if line editing + was not previously active) editing settings, but uses Bash's + default completion, including programmable completion. + + ‘-i TEXT’ If Readline is being used to read the line, TEXT is placed into the editing buffer before editing begins. - '-n NCHARS' - 'read' returns after reading NCHARS characters rather than + ‘-n NCHARS’ + ‘read’ returns after reading NCHARS characters rather than waiting for a complete line of input, but honors a delimiter if fewer than NCHARS characters are read before the delimiter. - '-N NCHARS' - 'read' returns after reading exactly NCHARS characters rather + ‘-N NCHARS’ + ‘read’ returns after reading exactly NCHARS characters rather than waiting for a complete line of input, unless EOF is - encountered or 'read' times out. Delimiter characters + encountered or ‘read’ times out. Delimiter characters encountered in the input are not treated specially and do not - cause 'read' to return until NCHARS characters are read. The - result is not split on the characters in 'IFS'; the intent is + cause ‘read’ to return until NCHARS characters are read. The + result is not split on the characters in ‘IFS’; the intent is that the variable is assigned exactly the characters read - (with the exception of backslash; see the '-r' option below). + (with the exception of backslash; see the ‘-r’ option below). - '-p PROMPT' + ‘-p PROMPT’ Display PROMPT, without a trailing newline, before attempting to read any input. The prompt is displayed only if input is coming from a terminal. - '-r' + ‘-r’ If this option is given, backslash does not act as an escape character. The backslash is considered to be part of the line. In particular, a backslash-newline pair may not then be used as a line continuation. - '-s' + ‘-s’ Silent mode. If input is coming from a terminal, characters are not echoed. - '-t TIMEOUT' - Cause 'read' to time out and return failure if a complete line + ‘-t TIMEOUT’ + Cause ‘read’ to time out and return failure if a complete line of input (or a specified number of characters) is not read within TIMEOUT seconds. TIMEOUT may be a decimal number with a fractional portion following the decimal point. This option - is only effective if 'read' is reading input from a terminal, + is only effective if ‘read’ is reading input from a terminal, pipe, or other special file; it has no effect when reading - from regular files. If 'read' times out, 'read' saves any + from regular files. If ‘read’ times out, ‘read’ saves any partial input read into the specified variable NAME. If - TIMEOUT is 0, 'read' returns immediately, without trying to + TIMEOUT is 0, ‘read’ returns immediately, without trying to read any data. The exit status is 0 if input is available on the specified file descriptor, or the read will return EOF, non-zero otherwise. The exit status is greater than 128 if the timeout is exceeded. - '-u FD' + ‘-u FD’ Read input from file descriptor FD. + Other than the case where DELIM is the empty string, ‘read’ ignores + any NUL characters in the input. + If no NAMEs are supplied, the line read, without the ending delimiter but otherwise unmodified, is assigned to the variable - 'REPLY'. The exit status is zero, unless end-of-file is - encountered, 'read' times out (in which case the status is greater + ‘REPLY’. The exit status is zero, unless end-of-file is + encountered, ‘read’ times out (in which case the status is greater than 128), a variable assignment error (such as assigning to a readonly variable) occurs, or an invalid file descriptor is - supplied as the argument to '-u'. + supplied as the argument to ‘-u’. -'readarray' +‘readarray’ readarray [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] [-u FD] [-C CALLBACK] [-c QUANTUM] [ARRAY] Read lines from the standard input into the indexed array variable - ARRAY, or from file descriptor FD if the '-u' option is supplied. + ARRAY, or from file descriptor FD if the ‘-u’ option is supplied. - A synonym for 'mapfile'. + A synonym for ‘mapfile’. -'source' +‘source’ source FILENAME - A synonym for '.' (*note Bourne Shell Builtins::). + A synonym for ‘.’ (*note Bourne Shell Builtins::). -'type' +‘type’ type [-afptP] [NAME ...] For each NAME, indicate how it would be interpreted if used as a command name. - If the '-t' option is used, 'type' prints a single word which is - one of 'alias', 'function', 'builtin', 'file' or 'keyword', if NAME - is an alias, shell function, shell builtin, disk file, or shell - reserved word, respectively. If the NAME is not found, then - nothing is printed, and 'type' returns a failure status. + If the ‘-t’ option is used, ‘type’ prints a single word which is + one of ‘alias’, ‘keyword’, ‘function’, ‘builtin’, or ‘file’, if + NAME is an alias, shell reserved word, shell function, shell + builtin, or executable disk file, respectively. If the NAME is not + found, then nothing is printed, and ‘type’ returns a failure + status. - If the '-p' option is used, 'type' either returns the name of the - disk file that would be executed, or nothing if '-t' would not - return 'file'. + If the ‘-p’ option is used, ‘type’ either returns the name of the + executable file that would be found by searching ‘$PATH’, or + nothing if ‘-t’ would not return ‘file’. - The '-P' option forces a path search for each NAME, even if '-t' - would not return 'file'. + The ‘-P’ option forces a path search for each NAME, even if ‘-t’ + would not return ‘file’. - If a command is hashed, '-p' and '-P' print the hashed value, which - is not necessarily the file that appears first in '$PATH'. + If a NAME is present in the table of hashed commands, options ‘-p’ + and ‘-P’ print the hashed value, which is not necessarily the file + that appears first in ‘$PATH’. - If the '-a' option is used, 'type' returns all of the places that - contain an executable named FILE. This includes aliases and - functions, if and only if the '-p' option is not also used. + If the ‘-a’ option is used, ‘type’ returns all of the places that + contain a command named NAME. This includes aliases, reserved + words, functions, and builtins, but the path search options (‘-p’ + and ‘-P’) can be supplied to restrict the output to executable + files. If ‘-a’ is supplied with ‘-p’, ‘type’ does not look in the + table of hashed commands, and only performs a ‘PATH’ search for + NAME. - If the '-f' option is used, 'type' does not attempt to find shell - functions, as with the 'command' builtin. + If the ‘-f’ option is used, ‘type’ does not attempt to find shell + functions, as with the ‘command’ builtin. The return status is zero if all of the NAMEs are found, non-zero if any are not found. -'typeset' +‘typeset’ typeset [-afFgrxilnrtux] [-p] [NAME[=VALUE] ...] - The 'typeset' command is supplied for compatibility with the Korn - shell. It is a synonym for the 'declare' builtin command. + The ‘typeset’ command is supplied for compatibility with the Korn + shell. It is a synonym for the ‘declare’ builtin command. -'ulimit' +‘ulimit’ ulimit [-HS] -a ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [LIMIT] - 'ulimit' provides control over the resources available to processes + ‘ulimit’ provides control over the resources available to processes started by the shell, on systems that allow such control. If an option is given, it is interpreted as follows: - '-S' + ‘-S’ Change and report the soft limit associated with a resource. - '-H' + ‘-H’ Change and report the hard limit associated with a resource. - '-a' + ‘-a’ All current limits are reported; no limits are set. - '-b' + ‘-b’ The maximum socket buffer size. - '-c' + ‘-c’ The maximum size of core files created. - '-d' + ‘-d’ The maximum size of a process's data segment. - '-e' + ‘-e’ The maximum scheduling priority ("nice"). - '-f' + ‘-f’ The maximum size of files written by the shell and its children. - '-i' + ‘-i’ The maximum number of pending signals. - '-k' + ‘-k’ The maximum number of kqueues that may be allocated. - '-l' + ‘-l’ The maximum size that may be locked into memory. - '-m' + ‘-m’ The maximum resident set size (many systems do not honor this limit). - '-n' + ‘-n’ The maximum number of open file descriptors (most systems do not allow this value to be set). - '-p' + ‘-p’ The pipe buffer size. - '-q' + ‘-q’ The maximum number of bytes in POSIX message queues. - '-r' + ‘-r’ The maximum real-time scheduling priority. - '-s' + ‘-s’ The maximum stack size. - '-t' + ‘-t’ The maximum amount of cpu time in seconds. - '-u' + ‘-u’ The maximum number of processes available to a single user. - '-v' + ‘-v’ The maximum amount of virtual memory available to the shell, and, on some systems, to its children. - '-x' + ‘-x’ The maximum number of file locks. - '-P' + ‘-P’ The maximum number of pseudoterminals. - '-R' + ‘-R’ The maximum time a real-time process can run before blocking, in microseconds. - '-T' + ‘-T’ The maximum number of threads. - If LIMIT is given, and the '-a' option is not used, LIMIT is the + If LIMIT is given, and the ‘-a’ option is not used, LIMIT is the new value of the specified resource. The special LIMIT values - 'hard', 'soft', and 'unlimited' stand for the current hard limit, + ‘hard’, ‘soft’, and ‘unlimited’ stand for the current hard limit, the current soft limit, and no limit, respectively. A hard limit cannot be increased by a non-root user once it is set; a soft limit may be increased up to the value of the hard limit. Otherwise, the current value of the soft limit for the specified resource is - printed, unless the '-H' option is supplied. When more than one + printed, unless the ‘-H’ option is supplied. When more than one resource is specified, the limit name and unit, if appropriate, are - printed before the value. When setting new limits, if neither '-H' - nor '-S' is supplied, both the hard and soft limits are set. If no - option is given, then '-f' is assumed. Values are in 1024-byte - increments, except for '-t', which is in seconds; '-R', which is in - microseconds; '-p', which is in units of 512-byte blocks; '-P', - '-T', '-b', '-k', '-n' and '-u', which are unscaled values; and, - when in POSIX Mode (*note Bash POSIX Mode::), '-c' and '-f', which + printed before the value. When setting new limits, if neither ‘-H’ + nor ‘-S’ is supplied, both the hard and soft limits are set. If no + option is given, then ‘-f’ is assumed. Values are in 1024-byte + increments, except for ‘-t’, which is in seconds; ‘-R’, which is in + microseconds; ‘-p’, which is in units of 512-byte blocks; ‘-P’, + ‘-T’, ‘-b’, ‘-k’, ‘-n’ and ‘-u’, which are unscaled values; and, + when in POSIX Mode (*note Bash POSIX Mode::), ‘-c’ and ‘-f’, which are in 512-byte increments. The return status is zero unless an invalid option or argument is supplied, or an error occurs while setting a new limit. -'unalias' +‘unalias’ unalias [-a] [NAME ... ] - Remove each NAME from the list of aliases. If '-a' is supplied, + Remove each NAME from the list of aliases. If ‘-a’ is supplied, all aliases are removed. Aliases are described in *note Aliases::.  @@ -4414,15 +4570,17 @@ File: bashref.info, Node: The Set Builtin, Next: The Shopt Builtin, Up: Modif 4.3.1 The Set Builtin --------------------- -This builtin is so complicated that it deserves its own section. 'set' +This builtin is so complicated that it deserves its own section. ‘set’ allows you to change the values of shell options and set the positional parameters, or to display the names and values of shell variables. -'set' +‘set’ set [-abefhkmnptuvxBCEHPT] [-o OPTION-NAME] [--] [-] [ARGUMENT ...] set [+abefhkmnptuvxBCEHPT] [+o OPTION-NAME] [--] [-] [ARGUMENT ...] + set -o + set +o - If no options or arguments are supplied, 'set' displays the names + If no options or arguments are supplied, ‘set’ displays the names and values of all shell variables and functions, sorted according to the current locale, in a format that may be reused as input for setting or resetting the currently-set variables. Read-only @@ -4432,30 +4590,30 @@ parameters, or to display the names and values of shell variables. When options are supplied, they set or unset shell attributes. Options, if specified, have the following meanings: - '-a' + ‘-a’ Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands. - '-b' + ‘-b’ Cause the status of terminated background jobs to be reported immediately, rather than before printing the next primary prompt. - '-e' + ‘-e’ Exit immediately if a pipeline (*note Pipelines::), which may consist of a single simple command (*note Simple Commands::), a list (*note Lists::), or a compound command (*note Compound Commands::) returns a non-zero status. The shell does not exit if the command that fails is part of the command list - immediately following a 'while' or 'until' keyword, part of - the test in an 'if' statement, part of any command executed in - a '&&' or '||' list except the command following the final - '&&' or '||', any command in a pipeline but the last, or if - the command's return status is being inverted with '!'. If a + immediately following a ‘while’ or ‘until’ keyword, part of + the test in an ‘if’ statement, part of any command executed in + a ‘&&’ or ‘||’ list except the command following the final + ‘&&’ or ‘||’, any command in a pipeline but the last, or if + the command's return status is being inverted with ‘!’. If a compound command other than a subshell returns a non-zero - status because a command failed while '-e' was being ignored, - the shell does not exit. A trap on 'ERR', if set, is executed + status because a command failed while ‘-e’ was being ignored, + the shell does not exit. A trap on ‘ERR’, if set, is executed before the shell exits. This option applies to the shell environment and each subshell @@ -4464,232 +4622,237 @@ parameters, or to display the names and values of shell variables. executing all the commands in the subshell. If a compound command or shell function executes in a context - where '-e' is being ignored, none of the commands executed + where ‘-e’ is being ignored, none of the commands executed within the compound command or function body will be affected - by the '-e' setting, even if '-e' is set and a command returns + by the ‘-e’ setting, even if ‘-e’ is set and a command returns a failure status. If a compound command or shell function - sets '-e' while executing in a context where '-e' is ignored, + sets ‘-e’ while executing in a context where ‘-e’ is ignored, that setting will not have any effect until the compound command or the command containing the function call completes. - '-f' + ‘-f’ Disable filename expansion (globbing). - '-h' + ‘-h’ Locate and remember (hash) commands as they are looked up for execution. This option is enabled by default. - '-k' + ‘-k’ All arguments in the form of assignment statements are placed in the environment for a command, not just those that precede the command name. - '-m' + ‘-m’ Job control is enabled (*note Job Control::). All processes run in a separate process group. When a background job completes, the shell prints a line containing its exit status. - '-n' + ‘-n’ Read commands but do not execute them. This may be used to check a script for syntax errors. This option is ignored by interactive shells. - '-o OPTION-NAME' + ‘-o OPTION-NAME’ - Set the option corresponding to OPTION-NAME: + Set the option corresponding to OPTION-NAME. If ‘-o’ is + supplied with no OPTION-NAME, ‘set’ prints the current shell + options settings. If ‘+o’ is supplied with no OPTION-NAME, + ‘set’ prints a series of ‘set’ commands to recreate the + current option settings on the standard output. Valid option + names are: - 'allexport' - Same as '-a'. + ‘allexport’ + Same as ‘-a’. - 'braceexpand' - Same as '-B'. + ‘braceexpand’ + Same as ‘-B’. - 'emacs' - Use an 'emacs'-style line editing interface (*note + ‘emacs’ + Use an ‘emacs’-style line editing interface (*note Command Line Editing::). This also affects the editing - interface used for 'read -e'. + interface used for ‘read -e’. - 'errexit' - Same as '-e'. + ‘errexit’ + Same as ‘-e’. - 'errtrace' - Same as '-E'. + ‘errtrace’ + Same as ‘-E’. - 'functrace' - Same as '-T'. + ‘functrace’ + Same as ‘-T’. - 'hashall' - Same as '-h'. + ‘hashall’ + Same as ‘-h’. - 'histexpand' - Same as '-H'. + ‘histexpand’ + Same as ‘-H’. - 'history' + ‘history’ Enable command history, as described in *note Bash History Facilities::. This option is on by default in interactive shells. - 'ignoreeof' + ‘ignoreeof’ An interactive shell will not exit upon reading EOF. - 'keyword' - Same as '-k'. + ‘keyword’ + Same as ‘-k’. - 'monitor' - Same as '-m'. + ‘monitor’ + Same as ‘-m’. - 'noclobber' - Same as '-C'. + ‘noclobber’ + Same as ‘-C’. - 'noexec' - Same as '-n'. + ‘noexec’ + Same as ‘-n’. - 'noglob' - Same as '-f'. + ‘noglob’ + Same as ‘-f’. - 'nolog' + ‘nolog’ Currently ignored. - 'notify' - Same as '-b'. + ‘notify’ + Same as ‘-b’. - 'nounset' - Same as '-u'. + ‘nounset’ + Same as ‘-u’. - 'onecmd' - Same as '-t'. + ‘onecmd’ + Same as ‘-t’. - 'physical' - Same as '-P'. + ‘physical’ + Same as ‘-P’. - 'pipefail' + ‘pipefail’ 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. - 'posix' + ‘posix’ Change the behavior of Bash where the default operation differs from the POSIX standard to match the standard (*note Bash POSIX Mode::). This is intended to make Bash behave as a strict superset of that standard. - 'privileged' - Same as '-p'. + ‘privileged’ + Same as ‘-p’. - 'verbose' - Same as '-v'. + ‘verbose’ + Same as ‘-v’. - 'vi' - Use a 'vi'-style line editing interface. This also - affects the editing interface used for 'read -e'. + ‘vi’ + Use a ‘vi’-style line editing interface. This also + affects the editing interface used for ‘read -e’. - 'xtrace' - Same as '-x'. + ‘xtrace’ + Same as ‘-x’. - '-p' - Turn on privileged mode. In this mode, the '$BASH_ENV' and - '$ENV' files are not processed, shell functions are not - inherited from the environment, and the 'SHELLOPTS', - 'BASHOPTS', 'CDPATH' and 'GLOBIGNORE' variables, if they + ‘-p’ + Turn on privileged mode. In this mode, the ‘$BASH_ENV’ and + ‘$ENV’ files are not processed, shell functions are not + inherited from the environment, and the ‘SHELLOPTS’, + ‘BASHOPTS’, ‘CDPATH’ and ‘GLOBIGNORE’ variables, if they appear in the environment, are ignored. If the shell is started with the effective user (group) id not equal to the - real user (group) id, and the '-p' option is not supplied, + real user (group) id, and the ‘-p’ option is not supplied, these actions are taken and the effective user id is set to - the real user id. If the '-p' option is supplied at startup, + the real user id. If the ‘-p’ 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 ids. - '-r' - Enable restricted shell mode. This option cannot be unset - once it has been set. + ‘-r’ + Enable restricted shell mode (*note The Restricted Shell::). + This option cannot be unset once it has been set. - '-t' + ‘-t’ Exit after reading and executing one command. - '-u' + ‘-u’ Treat unset variables and parameters other than the special - parameters '@' or '*', or array variables subscripted with '@' - or '*', as an error when performing parameter expansion. An + parameters ‘@’ or ‘*’, or array variables subscripted with ‘@’ + or ‘*’, as an error when performing parameter expansion. An error message will be written to the standard error, and a non-interactive shell will exit. - '-v' + ‘-v’ Print shell input lines as they are read. - '-x' - Print a trace of simple commands, 'for' commands, 'case' - commands, 'select' commands, and arithmetic 'for' commands and - their arguments or associated word lists after they are - expanded and before they are executed. The value of the 'PS4' - variable is expanded and the resultant value is printed before + ‘-x’ + Print a trace of simple commands, ‘for’ commands, ‘case’ + commands, ‘select’ commands, and arithmetic ‘for’ commands and + their arguments or associated word lists to standard error + after they are expanded and before they are executed. The + shell prints the expanded value of the ‘PS4’ variable before the command and its expanded arguments. - '-B' + ‘-B’ The shell will perform brace expansion (*note Brace Expansion::). This option is on by default. - '-C' - Prevent output redirection using '>', '>&', and '<>' from + ‘-C’ + Prevent output redirection using ‘>’, ‘>&’, and ‘<>’ from overwriting existing files. - '-E' - If set, any trap on 'ERR' is inherited by shell functions, + ‘-E’ + If set, any trap on ‘ERR’ is inherited by shell functions, command substitutions, and commands executed in a subshell - environment. The 'ERR' trap is normally not inherited in such + environment. The ‘ERR’ trap is normally not inherited in such cases. - '-H' - Enable '!' style history substitution (*note History + ‘-H’ + Enable ‘!’ style history substitution (*note History Interaction::). This option is on by default for interactive shells. - '-P' + ‘-P’ If set, do not resolve symbolic links when performing commands - such as 'cd' which change the current directory. The physical + such as ‘cd’ which change the current directory. The physical directory is used instead. By default, Bash follows the logical chain of directories when performing commands which change the current directory. - For example, if '/usr/sys' is a symbolic link to - '/usr/local/sys' then: + For example, if ‘/usr/sys’ is a symbolic link to + ‘/usr/local/sys’ then: $ cd /usr/sys; echo $PWD /usr/sys $ cd ..; pwd /usr - If 'set -P' is on, then: + If ‘set -P’ is on, then: $ cd /usr/sys; echo $PWD /usr/local/sys $ cd ..; pwd /usr/local - '-T' - If set, any trap on 'DEBUG' and 'RETURN' are inherited by + ‘-T’ + If set, any trap on ‘DEBUG’ and ‘RETURN’ are inherited by shell functions, command substitutions, and commands executed - in a subshell environment. The 'DEBUG' and 'RETURN' traps are + in a subshell environment. The ‘DEBUG’ and ‘RETURN’ traps are normally not inherited in such cases. - '--' + ‘--’ If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters are set to the ARGUMENTS, even if some of them begin with a - '-'. + ‘-’. - '-' + ‘-’ Signal the end of options, cause all remaining ARGUMENTS to be - assigned to the positional parameters. The '-x' and '-v' + assigned to the positional parameters. The ‘-x’ and ‘-v’ options are turned off. If there are no arguments, the positional parameters remain unchanged. - Using '+' rather than '-' causes these options to be turned off. + Using ‘+’ rather than ‘-’ causes these options to be turned off. The options can also be used upon invocation of the shell. The - current set of options may be found in '$-'. + current set of options may be found in ‘$-’. The remaining N ARGUMENTS are positional parameters and are - assigned, in order, to '$1', '$2', ... '$N'. The special parameter - '#' is set to N. + assigned, in order, to ‘$1’, ‘$2’, ... ‘$N’. The special parameter + ‘#’ is set to N. The return status is always zero unless an invalid option is supplied. @@ -4702,39 +4865,39 @@ File: bashref.info, Node: The Shopt Builtin, Prev: The Set Builtin, Up: Modif This builtin allows you to change additional shell optional behavior. -'shopt' +‘shopt’ shopt [-pqsu] [-o] [OPTNAME ...] Toggle the values of settings controlling optional shell behavior. - The settings can be either those listed below, or, if the '-o' - option is used, those available with the '-o' option to the 'set' + The settings can be either those listed below, or, if the ‘-o’ + option is used, those available with the ‘-o’ option to the ‘set’ builtin command (*note The Set Builtin::). With no options, or - with the '-p' option, a list of all settable options is displayed, + with the ‘-p’ option, a list of all settable options is displayed, with an indication of whether or not each is set; if OPTNAMEs are - supplied, the output is restricted to those options. The '-p' + supplied, the output is restricted to those options. The ‘-p’ option causes output to be displayed in a form that may be reused as input. Other options have the following meanings: - '-s' + ‘-s’ Enable (set) each OPTNAME. - '-u' + ‘-u’ Disable (unset) each OPTNAME. - '-q' + ‘-q’ Suppresses normal output; the return status indicates whether the OPTNAME is set or unset. If multiple OPTNAME arguments - are given with '-q', the return status is zero if all OPTNAMEs + are given with ‘-q’, the return status is zero if all OPTNAMEs are enabled; non-zero otherwise. - '-o' + ‘-o’ Restricts the values of OPTNAME to be those defined for the - '-o' option to the 'set' builtin (*note The Set Builtin::). + ‘-o’ option to the ‘set’ builtin (*note The Set Builtin::). - If either '-s' or '-u' is used with no OPTNAME arguments, 'shopt' + If either ‘-s’ or ‘-u’ is used with no OPTNAME arguments, ‘shopt’ shows only those options which are set or unset, respectively. - Unless otherwise noted, the 'shopt' options are disabled (off) by + Unless otherwise noted, the ‘shopt’ options are disabled (off) by default. The return status when listing options is zero if all OPTNAMEs are @@ -4742,39 +4905,42 @@ This builtin allows you to change additional shell optional behavior. the return status is zero unless an OPTNAME is not a valid shell option. - The list of 'shopt' options is: + The list of ‘shopt’ options is: - 'assoc_expand_once' + ‘array_expand_once’ If set, the shell suppresses multiple evaluation of - associative array subscripts during arithmetic expression - evaluation, while executing builtins that can perform variable - assignments, and while executing builtins that perform array - dereferencing. + associative and indexed array subscripts during arithmetic + expression evaluation, while executing builtins that can + perform variable assignments, and while executing builtins + that perform array dereferencing. + + ‘assoc_expand_once’ + Deprecated; a synonym for ‘array_expand_once’. - 'autocd' + ‘autocd’ If set, a command name that is the name of a directory is - executed as if it were the argument to the 'cd' command. This + executed as if it were the argument to the ‘cd’ command. This option is only used by interactive shells. - 'cdable_vars' - If this is set, an argument to the 'cd' builtin command that + ‘cdable_vars’ + If this is set, an argument to the ‘cd’ builtin command that is not a directory is assumed to be the name of a variable whose value is the directory to change to. - 'cdspell' + ‘cdspell’ If set, minor errors in the spelling of a directory component - in a 'cd' command will be corrected. The errors checked for + in a ‘cd’ command will be corrected. The errors checked for are transposed characters, a missing character, and a character too many. If a correction is found, the corrected path is printed, and the command proceeds. This option is only used by interactive shells. - 'checkhash' + ‘checkhash’ If this is set, Bash checks that a command found in the hash table exists before trying to execute it. If a hashed command no longer exists, a normal path search is performed. - 'checkjobs' + ‘checkjobs’ If set, Bash lists the status of any stopped and running jobs before exiting an interactive shell. If any jobs are running, this causes the exit to be deferred until a second exit is @@ -4782,29 +4948,29 @@ This builtin allows you to change additional shell optional behavior. Control::). The shell always postpones exiting if any jobs are stopped. - 'checkwinsize' + ‘checkwinsize’ If set, Bash checks the window size after each external (non-builtin) command and, if necessary, updates the values of - 'LINES' and 'COLUMNS'. This option is enabled by default. + ‘LINES’ and ‘COLUMNS’. This option is enabled by default. - 'cmdhist' + ‘cmdhist’ If set, Bash attempts to save all lines of a multiple-line command in the same history entry. This allows easy re-editing of multi-line commands. This option is enabled by default, but only has an effect if command history is enabled (*note Bash History Facilities::). - 'compat31' - 'compat32' - 'compat40' - 'compat41' - 'compat42' - 'compat43' - 'compat44' + ‘compat31’ + ‘compat32’ + ‘compat40’ + ‘compat41’ + ‘compat42’ + ‘compat43’ + ‘compat44’ These control aspects of the shell's compatibility mode (*note Shell Compatibility Mode::). - 'complete_fullquote' + ‘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 @@ -4813,257 +4979,260 @@ This builtin allows you to change additional shell optional behavior. 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 + 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. - 'direxpand' + ‘direxpand’ If set, Bash replaces directory names with the results of word expansion when performing filename completion. This changes the contents of the Readline editing buffer. If not set, Bash attempts to preserve what the user typed. - 'dirspell' + ‘dirspell’ If set, Bash attempts spelling correction on directory names during word completion if the directory name initially supplied does not exist. - 'dotglob' + ‘dotglob’ If set, Bash includes filenames beginning with a '.' in the - results of filename expansion. The filenames '.' and '..' - must always be matched explicitly, even if 'dotglob' is set. + results of filename expansion. The filenames ‘.’ and ‘..’ + must always be matched explicitly, even if ‘dotglob’ is set. - 'execfail' + ‘execfail’ If this is set, a non-interactive shell will not exit if it - cannot execute the file specified as an argument to the 'exec' - builtin command. An interactive shell does not exit if 'exec' + cannot execute the file specified as an argument to the ‘exec’ + builtin command. An interactive shell does not exit if ‘exec’ fails. - 'expand_aliases' + ‘expand_aliases’ If set, aliases are expanded as described below under Aliases, *note Aliases::. This option is enabled by default for interactive shells. - 'extdebug' + ‘extdebug’ If set at shell invocation, or in a shell startup file, arrange to execute the debugger profile before the shell - starts, identical to the '--debugger' option. If set after + starts, identical to the ‘--debugger’ option. If set after invocation, behavior intended for use by debuggers is enabled: - 1. The '-F' option to the 'declare' builtin (*note Bash + 1. The ‘-F’ option to the ‘declare’ builtin (*note Bash Builtins::) displays the source file name and line number corresponding to each function name supplied as an argument. - 2. If the command run by the 'DEBUG' trap returns a non-zero + 2. If the command run by the ‘DEBUG’ trap returns a non-zero value, the next command is skipped and not executed. - 3. If the command run by the 'DEBUG' trap returns a value of + 3. If the command run by the ‘DEBUG’ trap returns a value of 2, and the shell is executing in a subroutine (a shell - function or a shell script executed by the '.' or - 'source' builtins), the shell simulates a call to - 'return'. + function or a shell script executed by the ‘.’ or + ‘source’ builtins), the shell simulates a call to + ‘return’. - 4. 'BASH_ARGC' and 'BASH_ARGV' are updated as described in + 4. ‘BASH_ARGC’ and ‘BASH_ARGV’ are updated as described in their descriptions (*note Bash Variables::). 5. Function tracing is enabled: command substitution, shell - functions, and subshells invoked with '( COMMAND )' - inherit the 'DEBUG' and 'RETURN' traps. + functions, and subshells invoked with ‘( COMMAND )’ + inherit the ‘DEBUG’ and ‘RETURN’ traps. 6. Error tracing is enabled: command substitution, shell - functions, and subshells invoked with '( COMMAND )' - inherit the 'ERR' trap. + functions, and subshells invoked with ‘( COMMAND )’ + inherit the ‘ERR’ trap. - 'extglob' + ‘extglob’ If set, the extended pattern matching features described above (*note Pattern Matching::) are enabled. - 'extquote' - If set, '$'STRING'' and '$"STRING"' quoting is performed - within '${PARAMETER}' expansions enclosed in double quotes. + ‘extquote’ + If set, ‘$'STRING'’ and ‘$"STRING"’ quoting is performed + within ‘${PARAMETER}’ expansions enclosed in double quotes. This option is enabled by default. - 'failglob' + ‘failglob’ If set, patterns which fail to match filenames during filename expansion result in an expansion error. - 'force_fignore' - If set, the suffixes specified by the 'FIGNORE' shell variable + ‘force_fignore’ + If set, the suffixes specified by the ‘FIGNORE’ shell variable cause words to be ignored when performing word completion even if the ignored words are the only possible completions. *Note - Bash Variables::, for a description of 'FIGNORE'. This option + Bash Variables::, for a description of ‘FIGNORE’. This option is enabled by default. - 'globasciiranges' + ‘globasciiranges’ If set, range expressions used in pattern matching bracket expressions (*note Pattern Matching::) behave as if in the traditional C locale when performing comparisons. That is, the current locale's collating sequence is not taken into - account, so 'b' will not collate between 'A' and 'B', and + account, so ‘b’ will not collate between ‘A’ and ‘B’, and upper-case and lower-case ASCII characters will collate together. - 'globskipdots' - If set, filename expansion will never match the filenames '.' - and '..', even if the pattern begins with a '.'. This option + ‘globskipdots’ + If set, filename expansion will never match the filenames ‘.’ + and ‘..’, even if the pattern begins with a ‘.’. This option is enabled by default. - 'globstar' - If set, the pattern '**' used in a filename expansion context + ‘globstar’ + If set, the pattern ‘**’ used in a filename expansion context will match all files and zero or more directories and - subdirectories. If the pattern is followed by a '/', only + subdirectories. If the pattern is followed by a ‘/’, only directories and subdirectories match. - 'gnu_errfmt' + ‘gnu_errfmt’ If set, shell error messages are written in the standard GNU error message format. - 'histappend' + ‘histappend’ If set, the history list is appended to the file named by the - value of the 'HISTFILE' variable when the shell exits, rather + value of the ‘HISTFILE’ variable when the shell exits, rather than overwriting the file. - 'histreedit' + ‘histreedit’ If set, and Readline is being used, a user is given the opportunity to re-edit a failed history substitution. - 'histverify' + ‘histverify’ If set, and Readline is being used, the results of history substitution are not immediately passed to the shell parser. Instead, the resulting line is loaded into the Readline editing buffer, allowing further modification. - 'hostcomplete' + ‘hostcomplete’ If set, and Readline is being used, Bash will attempt to - perform hostname completion when a word containing a '@' is + perform hostname completion when a word containing a ‘@’ is being completed (*note Commands For Completion::). This option is enabled by default. - 'huponexit' - If set, Bash will send 'SIGHUP' to all jobs when an + ‘huponexit’ + If set, Bash will send ‘SIGHUP’ to all jobs when an interactive login shell exits (*note Signals::). - 'inherit_errexit' + ‘inherit_errexit’ If set, command substitution inherits the value of the - 'errexit' option, instead of unsetting it in the subshell + ‘errexit’ option, instead of unsetting it in the subshell environment. This option is enabled when POSIX mode is enabled. - 'interactive_comments' - Allow a word beginning with '#' to cause that word and all + ‘interactive_comments’ + Allow a word beginning with ‘#’ to cause that word and all remaining characters on that line to be ignored in an interactive shell. This option is enabled by default. - 'lastpipe' + ‘lastpipe’ If set, and job control is not active, the shell runs the last command of a pipeline not executed in the background in the current shell environment. - 'lithist' - If enabled, and the 'cmdhist' option is enabled, multi-line + ‘lithist’ + If enabled, and the ‘cmdhist’ option is enabled, multi-line commands are saved to the history with embedded newlines rather than using semicolon separators where possible. - 'localvar_inherit' + ‘localvar_inherit’ If set, local variables inherit the value and attributes of a variable of the same name that exists at a previous scope - before any new value is assigned. The 'nameref' attribute is + before any new value is assigned. The ‘nameref’ attribute is not inherited. - 'localvar_unset' - If set, calling 'unset' on local variables in previous + ‘localvar_unset’ + If set, calling ‘unset’ on local variables in previous function scopes marks them so subsequent lookups find them unset until that function returns. This is identical to the behavior of unsetting local variables at the current function scope. - 'login_shell' + ‘login_shell’ The shell sets this option if it is started as a login shell (*note Invoking Bash::). The value may not be changed. - 'mailwarn' + ‘mailwarn’ If set, and a file that Bash is checking for mail has been - accessed since the last time it was checked, the message '"The - mail in MAILFILE has been read"' is displayed. + accessed since the last time it was checked, the message ‘"The + mail in MAILFILE has been read"’ is displayed. - 'no_empty_cmd_completion' + ‘no_empty_cmd_completion’ If set, and Readline is being used, Bash will not attempt to - search the 'PATH' for possible completions when completion is + search the ‘PATH’ for possible completions when completion is attempted on an empty line. - 'nocaseglob' + ‘nocaseglob’ If set, Bash matches filenames in a case-insensitive fashion when performing filename expansion. - 'nocasematch' + ‘nocasematch’ If set, Bash matches patterns in a case-insensitive fashion - when performing matching while executing 'case' or '[[' + when performing matching while executing ‘case’ or ‘[[’ conditional commands (*note Conditional Constructs::, when performing pattern substitution word expansions, or when filtering possible completions as part of programmable completion. - 'noexpand_translation' + ‘noexpand_translation’ If set, Bash encloses the translated results of $"..." quoting in single quotes instead of double quotes. If the string is not translated, this has no effect. - 'nullglob' - If set, Bash allows filename patterns which match no files to - expand to a null string, rather than themselves. + ‘nullglob’ + If set, filename expansion patterns which match no files + (*note Filename Expansion::) expand to nothing and are + removed, rather than expanding to themselves. - 'patsub_replacement' - If set, Bash expands occurrences of '&' in the replacement + ‘patsub_replacement’ + If set, Bash expands occurrences of ‘&’ in the replacement string of pattern substitution to the text matched by the pattern, as described above (*note Shell Parameter Expansion::). This option is enabled by default. - 'progcomp' + ‘progcomp’ If set, the programmable completion facilities (*note Programmable Completion::) are enabled. This option is enabled by default. - 'progcomp_alias' + ‘progcomp_alias’ If set, and programmable completion is enabled, Bash treats a command name that doesn't have any completions as a possible alias and attempts alias expansion. If it has an alias, Bash attempts programmable completion using the command word resulting from the expanded alias. - 'promptvars' + ‘promptvars’ If set, prompt strings undergo parameter expansion, command substitution, arithmetic expansion, and quote removal after being expanded as described below (*note Controlling the Prompt::). This option is enabled by default. - 'restricted_shell' + ‘restricted_shell’ The shell sets this option if it is started in restricted mode (*note The Restricted Shell::). The value may not be changed. This is not reset when the startup files are executed, allowing the startup files to discover whether or not a shell is restricted. - 'shift_verbose' - If this is set, the 'shift' builtin prints an error message + ‘shift_verbose’ + If this is set, the ‘shift’ builtin prints an error message when the shift count exceeds the number of positional parameters. - 'sourcepath' - If set, the '.' ('source') builtin uses the value of 'PATH' to + ‘sourcepath’ + If set, the ‘.’ (‘source’) builtin uses the value of ‘PATH’ to find the directory containing the file supplied as an argument. This option is enabled by default. - 'varredir_close' + ‘varredir_close’ If set, the shell automatically closes file descriptors - assigned using the '{varname}' redirection syntax (*note + assigned using the ‘{varname}’ redirection syntax (*note Redirections::) instead of leaving them open when the command completes. - 'xpg_echo' - If set, the 'echo' builtin expands backslash-escape sequences - by default. + ‘xpg_echo’ + If set, the ‘echo’ builtin expands backslash-escape sequences + by default. If the ‘posix’ shell option (*note The Set + Builtin::) is also enabled, ‘echo’ does not interpret any + options.  File: bashref.info, Node: Special Builtins, Prev: Modifying Shell Behavior, Up: Shell Builtin Commands @@ -5090,8 +5259,8 @@ differently than the rest of the Bash builtin commands. The Bash POSIX mode is described in *note Bash POSIX Mode::. These are the POSIX special builtins: - break : . continue eval exec exit export readonly return set - shift trap unset + break : . source continue eval exec exit export readonly return set + shift times trap unset  File: bashref.info, Node: Shell Variables, Next: Bash Features, Prev: Shell Builtin Commands, Up: Top @@ -5117,53 +5286,53 @@ File: bashref.info, Node: Bourne Shell Variables, Next: Bash Variables, Up: S Bash uses certain shell variables in the same way as the Bourne shell. In some cases, Bash assigns a default value to the variable. -'CDPATH' +‘CDPATH’ A colon-separated list of directories used as a search path for the - 'cd' builtin command. + ‘cd’ builtin command. -'HOME' - The current user's home directory; the default for the 'cd' builtin +‘HOME’ + The current user's home directory; the default for the ‘cd’ builtin command. The value of this variable is also used by tilde expansion (*note Tilde Expansion::). -'IFS' +‘IFS’ A list of characters that separate fields; used when the shell splits words as part of expansion. -'MAIL' +‘MAIL’ If this parameter is set to a filename or directory name and the - 'MAILPATH' variable is not set, Bash informs the user of the + ‘MAILPATH’ variable is not set, Bash informs the user of the arrival of mail in the specified file or Maildir-format directory. -'MAILPATH' +‘MAILPATH’ A colon-separated list of filenames which the shell periodically checks for new mail. Each list entry can specify the message that is printed when new mail arrives in the mail file by separating the - filename from the message with a '?'. When used in the text of the - message, '$_' expands to the name of the current mail file. + filename from the message with a ‘?’. When used in the text of the + message, ‘$_’ expands to the name of the current mail file. -'OPTARG' - The value of the last option argument processed by the 'getopts' +‘OPTARG’ + The value of the last option argument processed by the ‘getopts’ builtin. -'OPTIND' - The index of the last option argument processed by the 'getopts' +‘OPTIND’ + The index of the last option argument processed by the ‘getopts’ builtin. -'PATH' +‘PATH’ A colon-separated list of directories in which the shell looks for commands. A zero-length (null) directory name in the value of - 'PATH' indicates the current directory. A null directory name may + ‘PATH’ indicates the current directory. A null directory name may appear as two adjacent colons, or as an initial or trailing colon. -'PS1' - The primary prompt string. The default value is '\s-\v\$ '. *Note +‘PS1’ + The primary prompt string. The default value is ‘\s-\v\$ ’. *Note Controlling the Prompt::, for the complete list of escape sequences - that are expanded before 'PS1' is displayed. + that are expanded before ‘PS1’ is displayed. -'PS2' - The secondary prompt string. The default value is '> '. 'PS2' is - expanded in the same way as 'PS1' before being displayed. +‘PS2’ + The secondary prompt string. The default value is ‘> ’. ‘PS2’ is + expanded in the same way as ‘PS1’ before being displayed.  File: bashref.info, Node: Bash Variables, Prev: Bourne Shell Variables, Up: Shell Variables @@ -5178,7 +5347,7 @@ normally treat them specially. variables for controlling the job control facilities (*note Job Control Variables::). -'_' +‘_’ ($_, an underscore.) At shell startup, set to the pathname used to invoke the shell or shell script being executed as passed in the environment or argument list. Subsequently, expands to the last @@ -5188,386 +5357,431 @@ Variables::). command. When checking mail, this parameter holds the name of the mail file. -'BASH' +‘BASH’ The full pathname used to execute the current instance of Bash. -'BASHOPTS' +‘BASHOPTS’ A colon-separated list of enabled shell options. Each word in the - list is a valid argument for the '-s' option to the 'shopt' builtin + list is a valid argument for the ‘-s’ option to the ‘shopt’ builtin command (*note The Shopt Builtin::). The options appearing in - 'BASHOPTS' are those reported as 'on' by 'shopt'. If this variable + ‘BASHOPTS’ are those reported as ‘on’ by ‘shopt’. If this variable is in the environment when Bash starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly. -'BASHPID' +‘BASHPID’ Expands to the process ID of the current Bash process. This - differs from '$$' under certain circumstances, such as subshells + differs from ‘$$’ under certain circumstances, such as subshells that do not require Bash to be re-initialized. Assignments to - 'BASHPID' have no effect. If 'BASHPID' is unset, it loses its + ‘BASHPID’ have no effect. If ‘BASHPID’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_ALIASES' +‘BASH_ALIASES’ An associative array variable whose members correspond to the - internal list of aliases as maintained by the 'alias' builtin. + internal list of aliases as maintained by the ‘alias’ builtin. (*note Bourne Shell Builtins::). Elements added to this array appear in the alias list; however, unsetting array elements currently does not cause aliases to be removed from the alias list. - If 'BASH_ALIASES' is unset, it loses its special properties, even + If ‘BASH_ALIASES’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_ARGC' +‘BASH_ARGC’ An array variable whose values are the number of parameters in each - frame of the current bash execution call stack. The number of + frame of the current Bash execution call stack. The number of parameters to the current subroutine (shell function or script - executed with '.' or 'source') is at the top of the stack. When a + executed with ‘.’ or ‘source’) is at the top of the stack. When a subroutine is executed, the number of parameters passed is pushed - onto 'BASH_ARGC'. The shell sets 'BASH_ARGC' only when in extended + onto ‘BASH_ARGC’. The shell sets ‘BASH_ARGC’ only when in extended debugging mode (see *note The Shopt Builtin:: for a description of - the 'extdebug' option to the 'shopt' builtin). Setting 'extdebug' + the ‘extdebug’ option to the ‘shopt’ builtin). Setting ‘extdebug’ after the shell has started to execute a script, or referencing - this variable when 'extdebug' is not set, may result in - inconsistent values. + this variable when ‘extdebug’ is not set, may result in + inconsistent values. Assignments to ‘BASH_ARGC’ have no effect, + and it may not be unset. -'BASH_ARGV' +‘BASH_ARGV’ An array variable containing all of the parameters in the current - bash execution call stack. The final parameter of the last + Bash execution call stack. The final parameter of the last subroutine call is at the top of the stack; the first parameter of the initial call is at the bottom. When a subroutine is executed, - the parameters supplied are pushed onto 'BASH_ARGV'. The shell - sets 'BASH_ARGV' only when in extended debugging mode (see *note - The Shopt Builtin:: for a description of the 'extdebug' option to - the 'shopt' builtin). Setting 'extdebug' after the shell has + the parameters supplied are pushed onto ‘BASH_ARGV’. The shell + sets ‘BASH_ARGV’ only when in extended debugging mode (see *note + The Shopt Builtin:: for a description of the ‘extdebug’ option to + the ‘shopt’ builtin). Setting ‘extdebug’ after the shell has started to execute a script, or referencing this variable when - 'extdebug' is not set, may result in inconsistent values. + ‘extdebug’ is not set, may result in inconsistent values. + Assignments to ‘BASH_ARGV’ have no effect, and it may not be unset. -'BASH_ARGV0' +‘BASH_ARGV0’ When referenced, this variable expands to the name of the shell or - shell script (identical to '$0'; *Note Special Parameters::, for + shell script (identical to ‘$0’; *Note Special Parameters::, for the description of special parameter 0). Assignment to - 'BASH_ARGV0' causes the value assigned to also be assigned to '$0'. - If 'BASH_ARGV0' is unset, it loses its special properties, even if + ‘BASH_ARGV0’ causes the value assigned to also be assigned to ‘$0’. + If ‘BASH_ARGV0’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_CMDS' +‘BASH_CMDS’ An associative array variable whose members correspond to the - internal hash table of commands as maintained by the 'hash' builtin + internal hash table of commands as maintained by the ‘hash’ builtin (*note Bourne Shell Builtins::). Elements added to this array appear in the hash table; however, unsetting array elements currently does not cause command names to be removed from the hash - table. If 'BASH_CMDS' is unset, it loses its special properties, + table. If ‘BASH_CMDS’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_COMMAND' +‘BASH_COMMAND’ The command currently being executed or about to be executed, unless the shell is executing a command as the result of a trap, in which case it is the command executing at the time of the trap. If - 'BASH_COMMAND' is unset, it loses its special properties, even if + ‘BASH_COMMAND’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_COMPAT' +‘BASH_COMPAT’ The value is used to set the shell's compatibility level. *Note Shell Compatibility Mode::, for a description of the various compatibility levels and their effects. The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42) corresponding to the - desired compatibility level. If 'BASH_COMPAT' is unset or set to + desired compatibility level. If ‘BASH_COMPAT’ is unset or set to the empty string, the compatibility level is set to the default for - the current version. If 'BASH_COMPAT' is set to a value that is + the current version. If ‘BASH_COMPAT’ is set to a value that is not one of the valid compatibility levels, the shell prints an error message and sets the compatibility level to the default for - the current version. The valid values correspond to the - compatibility levels described below (*note Shell Compatibility + the current version. A subset of the valid values correspond to + the compatibility levels described below (*note Shell Compatibility Mode::). For example, 4.2 and 42 are valid values that correspond - to the 'compat42' 'shopt' option and set the compatibility level to + to the ‘compat42’ ‘shopt’ option and set the compatibility level to 42. The current version is also a valid value. -'BASH_ENV' +‘BASH_ENV’ If this variable is set when Bash is invoked to execute a shell script, its value is expanded and used as the name of a startup file to read before executing the script. *Note Bash Startup Files::. -'BASH_EXECUTION_STRING' - The command argument to the '-c' invocation option. +‘BASH_EXECUTION_STRING’ + The command argument to the ‘-c’ invocation option. -'BASH_LINENO' +‘BASH_LINENO’ An array variable whose members are the line numbers in source - files where each corresponding member of 'FUNCNAME' was invoked. - '${BASH_LINENO[$i]}' is the line number in the source file - ('${BASH_SOURCE[$i+1]}') where '${FUNCNAME[$i]}' was called (or - '${BASH_LINENO[$i-1]}' if referenced within another shell - function). Use 'LINENO' to obtain the current line number. + files where each corresponding member of ‘FUNCNAME’ was invoked. + ‘${BASH_LINENO[$i]}’ is the line number in the source file + (‘${BASH_SOURCE[$i+1]}’) where ‘${FUNCNAME[$i]}’ was called (or + ‘${BASH_LINENO[$i-1]}’ if referenced within another shell + function). Use ‘LINENO’ to obtain the current line number. + Assignments to ‘BASH_LINENO’ have no effect, and it may not be + unset. -'BASH_LOADABLES_PATH' +‘BASH_LOADABLES_PATH’ A colon-separated list of directories in which the shell looks for - dynamically loadable builtins specified by the 'enable' command. + dynamically loadable builtins specified by the ‘enable’ command. -'BASH_REMATCH' - An array variable whose members are assigned by the '=~' binary - operator to the '[[' conditional command (*note Conditional +‘BASH_MONOSECONDS’ + Each time this variable is referenced, it expands to the value + returned by the system's monotonic clock, if one is available. If + there is no monotonic clock, this is equivalent to ‘EPOCHSECONDS’. + If ‘BASH_MONOSECONDS’ is unset, it loses its special properties, + even if it is subsequently reset. + +‘BASH_REMATCH’ + An array variable whose members are assigned by the ‘=~’ binary + operator to the ‘[[’ conditional command (*note Conditional Constructs::). The element with index 0 is the portion of the string matching the entire regular expression. The element with index N is the portion of the string matching the Nth parenthesized subexpression. -'BASH_SOURCE' +‘BASH_SOURCE’ An array variable whose members are the source filenames where the - corresponding shell function names in the 'FUNCNAME' array variable - are defined. The shell function '${FUNCNAME[$i]}' is defined in - the file '${BASH_SOURCE[$i]}' and called from - '${BASH_SOURCE[$i+1]}' + corresponding shell function names in the ‘FUNCNAME’ array variable + are defined. The shell function ‘${FUNCNAME[$i]}’ is defined in + the file ‘${BASH_SOURCE[$i]}’ and called from + ‘${BASH_SOURCE[$i+1]}’ Assignments to ‘BASH_SOURCE’ have no effect, + and it may not be unset. -'BASH_SUBSHELL' +‘BASH_SUBSHELL’ Incremented by one within each subshell or subshell environment when the shell begins executing in that environment. The initial - value is 0. If 'BASH_SUBSHELL' is unset, it loses its special + value is 0. If ‘BASH_SUBSHELL’ is unset, it loses its special properties, even if it is subsequently reset. -'BASH_VERSINFO' +‘BASH_TRAPSIG’ + Set to the signal number corresponding to the trap action being + executed during its execution. See the description of ‘trap’ + (*note Bourne Shell Builtins::) for information about signal + numbers and trap execution. + +‘BASH_VERSINFO’ A readonly array variable (*note Arrays::) whose members hold version information for this instance of Bash. The values assigned to the array members are as follows: - 'BASH_VERSINFO[0]' - The major version number (the "release"). + ‘BASH_VERSINFO[0]’ + The major version number (the “release”). - 'BASH_VERSINFO[1]' - The minor version number (the "version"). + ‘BASH_VERSINFO[1]’ + The minor version number (the “version”). - 'BASH_VERSINFO[2]' + ‘BASH_VERSINFO[2]’ The patch level. - 'BASH_VERSINFO[3]' + ‘BASH_VERSINFO[3]’ The build version. - 'BASH_VERSINFO[4]' - The release status (e.g., 'beta1'). + ‘BASH_VERSINFO[4]’ + The release status (e.g., ‘beta’). - 'BASH_VERSINFO[5]' - The value of 'MACHTYPE'. + ‘BASH_VERSINFO[5]’ + The value of ‘MACHTYPE’. -'BASH_VERSION' +‘BASH_VERSION’ The version number of the current instance of Bash. -'BASH_XTRACEFD' +‘BASH_XTRACEFD’ If set to an integer corresponding to a valid file descriptor, Bash - will write the trace output generated when 'set -x' is enabled to + will write the trace output generated when ‘set -x’ is enabled to that file descriptor. This allows tracing output to be separated from diagnostic and error messages. The file descriptor is closed - when 'BASH_XTRACEFD' is unset or assigned a new value. Unsetting - 'BASH_XTRACEFD' or assigning it the empty string causes the trace + when ‘BASH_XTRACEFD’ is unset or assigned a new value. Unsetting + ‘BASH_XTRACEFD’ or assigning it the empty string causes the trace output to be sent to the standard error. Note that setting - 'BASH_XTRACEFD' to 2 (the standard error file descriptor) and then + ‘BASH_XTRACEFD’ to 2 (the standard error file descriptor) and then unsetting it will result in the standard error being closed. -'CHILD_MAX' +‘CHILD_MAX’ Set the number of exited child status values for the shell to remember. Bash will not allow this value to be decreased below a POSIX-mandated minimum, and there is a maximum value (currently 8192) that this may not exceed. The minimum value is system-dependent. -'COLUMNS' - Used by the 'select' command to determine the terminal width when - printing selection lists. Automatically set if the 'checkwinsize' +‘COLUMNS’ + Used by the ‘select’ command to determine the terminal width when + printing selection lists. Automatically set if the ‘checkwinsize’ option is enabled (*note The Shopt Builtin::), or in an interactive - shell upon receipt of a 'SIGWINCH'. + shell upon receipt of a ‘SIGWINCH’. -'COMP_CWORD' - An index into '${COMP_WORDS}' of the word containing the current +‘COMP_CWORD’ + An index into ‘${COMP_WORDS}’ of the word containing the current cursor position. This variable is available only in shell functions invoked by the programmable completion facilities (*note Programmable Completion::). -'COMP_LINE' +‘COMP_LINE’ The current command line. This variable is available only in shell functions and external commands invoked by the programmable completion facilities (*note Programmable Completion::). -'COMP_POINT' +‘COMP_POINT’ The index of the current cursor position relative to the beginning of the current command. If the current cursor position is at the end of the current command, the value of this variable is equal to - '${#COMP_LINE}'. This variable is available only in shell + ‘${#COMP_LINE}’. This variable is available only in shell functions and external commands invoked by the programmable completion facilities (*note Programmable Completion::). -'COMP_TYPE' +‘COMP_TYPE’ Set to an integer value corresponding to the type of completion attempted that caused a completion function to be called: <TAB>, - for normal completion, '?', for listing completions after - successive tabs, '!', for listing alternatives on partial word - completion, '@', to list completions if the word is not unmodified, - or '%', for menu completion. This variable is available only in + for normal completion, ‘?’, for listing completions after + successive tabs, ‘!’, for listing alternatives on partial word + completion, ‘@’, to list completions if the word is not unmodified, + or ‘%’, for menu completion. This variable is available only in shell functions and external commands invoked by the programmable completion facilities (*note Programmable Completion::). -'COMP_KEY' +‘COMP_KEY’ The key (or final key of a key sequence) used to invoke the current completion function. -'COMP_WORDBREAKS' +‘COMP_WORDBREAKS’ The set of characters that the Readline library treats as word - separators when performing word completion. If 'COMP_WORDBREAKS' + separators when performing word completion. If ‘COMP_WORDBREAKS’ is unset, it loses its special properties, even if it is subsequently reset. -'COMP_WORDS' +‘COMP_WORDS’ An array variable consisting of the individual words in the current command line. The line is split into words as Readline would split - it, using 'COMP_WORDBREAKS' as described above. This variable is + it, using ‘COMP_WORDBREAKS’ as described above. This variable is available only in shell functions invoked by the programmable completion facilities (*note Programmable Completion::). -'COMPREPLY' +‘COMPREPLY’ An array variable from which Bash reads the possible completions generated by a shell function invoked by the programmable completion facility (*note Programmable Completion::). Each array element contains one possible completion. -'COPROC' +‘COPROC’ An array variable created to hold the file descriptors for output from and input to an unnamed coprocess (*note Coprocesses::). -'DIRSTACK' +‘DIRSTACK’ An array variable containing the current contents of the directory stack. Directories appear in the stack in the order they are - displayed by the 'dirs' builtin. Assigning to members of this + displayed by the ‘dirs’ builtin. Assigning to members of this array variable may be used to modify directories already in the - stack, but the 'pushd' and 'popd' builtins must be used to add and + stack, but the ‘pushd’ and ‘popd’ builtins must be used to add and remove directories. Assignment to this variable will not change - the current directory. If 'DIRSTACK' is unset, it loses its + the current directory. If ‘DIRSTACK’ is unset, it loses its special properties, even if it is subsequently reset. -'EMACS' +‘EMACS’ If Bash finds this variable in the environment when the shell - starts with value 't', it assumes that the shell is running in an + starts with value ‘t’, it assumes that the shell is running in an Emacs shell buffer and disables line editing. -'ENV' - Expanded and executed similarly to 'BASH_ENV' (*note Bash Startup +‘ENV’ + Expanded and executed similarly to ‘BASH_ENV’ (*note Bash Startup Files::) when an interactive shell is invoked in POSIX Mode (*note Bash POSIX Mode::). -'EPOCHREALTIME' +‘EPOCHREALTIME’ Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch as a floating point value with micro-second granularity (see the documentation for the C library - function 'time' for the definition of Epoch). Assignments to - 'EPOCHREALTIME' are ignored. If 'EPOCHREALTIME' is unset, it loses + function ‘time’ for the definition of Epoch). Assignments to + ‘EPOCHREALTIME’ are ignored. If ‘EPOCHREALTIME’ is unset, it loses its special properties, even if it is subsequently reset. -'EPOCHSECONDS' +‘EPOCHSECONDS’ Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch (see the documentation for the C - library function 'time' for the definition of Epoch). Assignments - to 'EPOCHSECONDS' are ignored. If 'EPOCHSECONDS' is unset, it + library function ‘time’ for the definition of Epoch). Assignments + to ‘EPOCHSECONDS’ are ignored. If ‘EPOCHSECONDS’ is unset, it loses its special properties, even if it is subsequently reset. -'EUID' +‘EUID’ The numeric effective user id of the current user. This variable is readonly. -'EXECIGNORE' +‘EXECIGNORE’ A colon-separated list of shell patterns (*note Pattern Matching::) defining the list of filenames to be ignored by command search - using 'PATH'. Files whose full pathnames match one of these + using ‘PATH’. Files whose full pathnames match one of these patterns are not considered executable files for the purposes of - completion and command execution via 'PATH' lookup. This does not - affect the behavior of the '[', 'test', and '[[' commands. Full + completion and command execution via ‘PATH’ lookup. This does not + affect the behavior of the ‘[’, ‘test’, and ‘[[’ commands. Full pathnames in the command hash table are not subject to - 'EXECIGNORE'. Use this variable to ignore shared library files + ‘EXECIGNORE’. Use this variable to ignore shared library files that have the executable bit set, but are not executable files. - The pattern matching honors the setting of the 'extglob' shell + The pattern matching honors the setting of the ‘extglob’ shell option. -'FCEDIT' - The editor used as a default by the '-e' option to the 'fc' builtin +‘FCEDIT’ + The editor used as a default by the ‘-e’ option to the ‘fc’ builtin command. -'FIGNORE' +‘FIGNORE’ A colon-separated list of suffixes to ignore when performing filename completion. A filename whose suffix matches one of the - entries in 'FIGNORE' is excluded from the list of matched - filenames. A sample value is '.o:~' + entries in ‘FIGNORE’ is excluded from the list of matched + filenames. A sample value is ‘.o:~’ -'FUNCNAME' +‘FUNCNAME’ An array variable containing the names of all shell functions currently in the execution call stack. The element with index 0 is the name of any currently-executing shell function. The - bottom-most element (the one with the highest index) is '"main"'. + bottom-most element (the one with the highest index) is ‘"main"’. This variable exists only when a shell function is executing. - Assignments to 'FUNCNAME' have no effect. If 'FUNCNAME' is unset, + Assignments to ‘FUNCNAME’ have no effect. If ‘FUNCNAME’ is unset, it loses its special properties, even if it is subsequently reset. - This variable can be used with 'BASH_LINENO' and 'BASH_SOURCE'. - Each element of 'FUNCNAME' has corresponding elements in - 'BASH_LINENO' and 'BASH_SOURCE' to describe the call stack. For - instance, '${FUNCNAME[$i]}' was called from the file - '${BASH_SOURCE[$i+1]}' at line number '${BASH_LINENO[$i]}'. The - 'caller' builtin displays the current call stack using this + This variable can be used with ‘BASH_LINENO’ and ‘BASH_SOURCE’. + Each element of ‘FUNCNAME’ has corresponding elements in + ‘BASH_LINENO’ and ‘BASH_SOURCE’ to describe the call stack. For + instance, ‘${FUNCNAME[$i]}’ was called from the file + ‘${BASH_SOURCE[$i+1]}’ at line number ‘${BASH_LINENO[$i]}’. The + ‘caller’ builtin displays the current call stack using this information. -'FUNCNEST' +‘FUNCNEST’ If set to a numeric value greater than 0, defines a maximum function nesting level. Function invocations that exceed this nesting level will cause the current command to abort. -'GLOBIGNORE' +‘GLOBIGNORE’ A colon-separated list of patterns defining the set of file names to be ignored by filename expansion. If a file name matched by a filename expansion pattern also matches one of the patterns in - 'GLOBIGNORE', it is removed from the list of matches. The pattern - matching honors the setting of the 'extglob' shell option. - -'GROUPS' + ‘GLOBIGNORE’, it is removed from the list of matches. The pattern + matching honors the setting of the ‘extglob’ shell option. + +‘GLOBSORT’ + Control how the results of filename expansion are sorted. The + value of this variable specifies the sort criteria and sort order + for the results of filename expansion. If this variable is unset + or set to the null string, filename expansion uses the historical + behavior of sorting by name. If set, a valid value begins with an + optional ‘+’, which is ignored, or ‘-’, which reverses the sort + order from ascending to descending, followed by a sort specifier. + The valid sort specifiers are ‘name’, ‘size’, ‘mtime’, ‘atime’, + ‘ctime’, and ‘blocks’, which sort the files on name, file size, + modification time, access time, inode change time, and number of + blocks, respectively. + + For example, a value of ‘-mtime’ sorts the results in descending + order by modification time (newest first). + + A sort specifier of ‘nosort’ disables sorting completely; the + results are returned in the order they are read from the file + system,. + + If the sort specifier is missing, it defaults to NAME, so a value + of ‘+’ is equivalent to the null string, and a value of ‘-’ sorts + by name in descending order. + + Any invalid value restores the historical sorting behavior. + +‘GROUPS’ An array variable containing the list of groups of which the - current user is a member. Assignments to 'GROUPS' have no effect. - If 'GROUPS' is unset, it loses its special properties, even if it + current user is a member. Assignments to ‘GROUPS’ have no effect. + If ‘GROUPS’ is unset, it loses its special properties, even if it is subsequently reset. -'histchars' +‘histchars’ Up to three characters which control history expansion, quick substitution, and tokenization (*note History Interaction::). The - first character is the "history expansion" character, that is, the + first character is the “history expansion” character, that is, the character which signifies the start of a history expansion, - normally '!'. The second character is the character which - signifies 'quick substitution' when seen as the first character on - a line, normally '^'. The optional third character is the + normally ‘!’. The second character is the character which + signifies "quick substitution" when seen as the first character on + a line, normally ‘^’. The optional third character is the character which indicates that the remainder of the line is a - comment when found as the first character of a word, usually '#'. + comment when found as the first character of a word, usually ‘#’. The history comment character causes history substitution to be skipped for the remaining words on the line. It does not necessarily cause the shell parser to treat the rest of the line as a comment. -'HISTCMD' +‘HISTCMD’ The history number, or index in the history list, of the current - command. Assignments to 'HISTCMD' are ignored. If 'HISTCMD' is + command. Assignments to ‘HISTCMD’ are ignored. If ‘HISTCMD’ is unset, it loses its special properties, even if it is subsequently reset. -'HISTCONTROL' +‘HISTCONTROL’ A colon-separated list of values controlling how commands are saved - on the history list. If the list of values includes 'ignorespace', + on the history list. If the list of values includes ‘ignorespace’, lines which begin with a space character are not saved in the - history list. A value of 'ignoredups' causes lines which match the - previous history entry to not be saved. A value of 'ignoreboth' is - shorthand for 'ignorespace' and 'ignoredups'. A value of - 'erasedups' causes all previous lines matching the current line to + history list. A value of ‘ignoredups’ causes lines which match the + previous history entry to not be saved. A value of ‘ignoreboth’ is + shorthand for ‘ignorespace’ and ‘ignoredups’. A value of + ‘erasedups’ causes all previous lines matching the current line to be removed from the history list before that line is saved. Any - value not in the above list is ignored. If 'HISTCONTROL' is unset, + value not in the above list is ignored. If ‘HISTCONTROL’ is unset, or does not include a valid value, all lines read by the shell parser are saved on the history list, subject to the value of - 'HISTIGNORE'. The second and subsequent lines of a multi-line + ‘HISTIGNORE’. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history - regardless of the value of 'HISTCONTROL'. + regardless of the value of ‘HISTCONTROL’. -'HISTFILE' - The name of the file to which the command history is saved. The - default value is '~/.bash_history'. +‘HISTFILE’ + The name of the file to which the command history is saved. Bash + assigns a default value of ‘~/.bash_history’. If ‘HISTFILE’ is + unset or null, the command history is not saved when a shell exits. -'HISTFILESIZE' +‘HISTFILESIZE’ The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, to contain no more than that number of lines by @@ -5575,309 +5789,312 @@ Variables::). this size after writing it when a shell exits. If the value is 0, the history file is truncated to zero size. Non-numeric values and numeric values less than zero inhibit truncation. The shell sets - the default value to the value of 'HISTSIZE' after reading any + the default value to the value of ‘HISTSIZE’ after reading any startup files. -'HISTIGNORE' +‘HISTIGNORE’ A colon-separated list of patterns used to decide which command - lines should be saved on the history list. Each pattern is - anchored at the beginning of the line and must match the complete - line (no implicit '*' is appended). Each pattern is tested against - the line after the checks specified by 'HISTCONTROL' are applied. - In addition to the normal shell pattern matching characters, '&' - matches the previous history line. '&' may be escaped using a + lines should be saved on the history list. If a command line + matches one of the patterns in the value of ‘HISTIGNORE’, it is not + saved on the history list. Each pattern is anchored at the + beginning of the line and must match the complete line (Bash will + not implicitly append a ‘*’). Each pattern is tested against the + line after the checks specified by ‘HISTCONTROL’ are applied. In + addition to the normal shell pattern matching characters, ‘&’ + matches the previous history line. ‘&’ may be escaped using a backslash; the backslash is removed before attempting a match. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of - 'HISTIGNORE'. The pattern matching honors the setting of the - 'extglob' shell option. + ‘HISTIGNORE’. The pattern matching honors the setting of the + ‘extglob’ shell option. - 'HISTIGNORE' subsumes the function of 'HISTCONTROL'. A pattern of - '&' is identical to 'ignoredups', and a pattern of '[ ]*' is - identical to 'ignorespace'. Combining these two patterns, + ‘HISTIGNORE’ subsumes the function of ‘HISTCONTROL’. A pattern of + ‘&’ is identical to ‘ignoredups’, and a pattern of ‘[ ]*’ is + identical to ‘ignorespace’. Combining these two patterns, separating them with a colon, provides the functionality of - 'ignoreboth'. + ‘ignoreboth’. -'HISTSIZE' +‘HISTSIZE’ The maximum number of commands to remember on the history list. If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files. -'HISTTIMEFORMAT' +‘HISTTIMEFORMAT’ If this variable is set and not null, its value is used as a format - string for 'strftime' to print the time stamp associated with each - history entry displayed by the 'history' builtin. If this variable - is set, time stamps are written to the history file so they may be - preserved across shell sessions. This uses the history comment - character to distinguish timestamps from other history lines. - -'HOSTFILE' - Contains the name of a file in the same format as '/etc/hosts' that + string for ‘strftime’(3) to print the time stamp associated with + each history entry displayed by the ‘history’ builtin. If this + variable is set, time stamps are written to the history file so + they may be preserved across shell sessions. This uses the history + comment character to distinguish timestamps from other history + lines. + +‘HOSTFILE’ + Contains the name of a file in the same format as ‘/etc/hosts’ that should be read when the shell needs to complete a hostname. The list of possible hostname completions may be changed while the shell is running; the next time hostname completion is attempted after the value is changed, Bash adds the contents of the new file - to the existing list. If 'HOSTFILE' is set, but has no value, or - does not name a readable file, Bash attempts to read '/etc/hosts' + to the existing list. If ‘HOSTFILE’ is set, but has no value, or + does not name a readable file, Bash attempts to read ‘/etc/hosts’ to obtain the list of possible hostname completions. When - 'HOSTFILE' is unset, the hostname list is cleared. + ‘HOSTFILE’ is unset, the hostname list is cleared. -'HOSTNAME' +‘HOSTNAME’ The name of the current host. -'HOSTTYPE' +‘HOSTTYPE’ A string describing the machine Bash is running on. -'IGNOREEOF' - Controls the action of the shell on receipt of an 'EOF' character +‘IGNOREEOF’ + Controls the action of the shell on receipt of an ‘EOF’ character as the sole input. If set, the value denotes the number of - consecutive 'EOF' characters that can be read as the first + consecutive ‘EOF’ characters that can be read as the first character on an input line before the shell will exit. If the variable exists but does not have a numeric value, or has no value, - then the default is 10. If the variable does not exist, then 'EOF' + then the default is 10. If the variable does not exist, then ‘EOF’ signifies the end of input to the shell. This is only in effect for interactive shells. -'INPUTRC' +‘INPUTRC’ The name of the Readline initialization file, overriding the - default of '~/.inputrc'. + default of ‘~/.inputrc’. -'INSIDE_EMACS' +‘INSIDE_EMACS’ If Bash finds this variable in the environment when the shell starts, it assumes that the shell is running in an Emacs shell buffer and may disable line editing depending on the value of - 'TERM'. + ‘TERM’. -'LANG' +‘LANG’ Used to determine the locale category for any category not - specifically selected with a variable starting with 'LC_'. + specifically selected with a variable starting with ‘LC_’. -'LC_ALL' - This variable overrides the value of 'LANG' and any other 'LC_' +‘LC_ALL’ + This variable overrides the value of ‘LANG’ and any other ‘LC_’ variable specifying a locale category. -'LC_COLLATE' +‘LC_COLLATE’ This variable determines the collation order used when sorting the results of filename expansion, and determines the behavior of range expressions, equivalence classes, and collating sequences within filename expansion and pattern matching (*note Filename Expansion::). -'LC_CTYPE' +‘LC_CTYPE’ This variable determines the interpretation of characters and the behavior of character classes within filename expansion and pattern matching (*note Filename Expansion::). -'LC_MESSAGES' +‘LC_MESSAGES’ This variable determines the locale used to translate double-quoted - strings preceded by a '$' (*note Locale Translation::). + strings preceded by a ‘$’ (*note Locale Translation::). -'LC_NUMERIC' +‘LC_NUMERIC’ This variable determines the locale category used for number formatting. -'LC_TIME' +‘LC_TIME’ This variable determines the locale category used for data and time formatting. -'LINENO' +‘LINENO’ The line number in the script or shell function currently - executing. If 'LINENO' is unset, it loses its special properties, + executing. If ‘LINENO’ is unset, it loses its special properties, even if it is subsequently reset. -'LINES' - Used by the 'select' command to determine the column length for - printing selection lists. Automatically set if the 'checkwinsize' +‘LINES’ + Used by the ‘select’ command to determine the column length for + printing selection lists. Automatically set if the ‘checkwinsize’ option is enabled (*note The Shopt Builtin::), or in an interactive - shell upon receipt of a 'SIGWINCH'. + shell upon receipt of a ‘SIGWINCH’. -'MACHTYPE' +‘MACHTYPE’ A string that fully describes the system type on which Bash is executing, in the standard GNU CPU-COMPANY-SYSTEM format. -'MAILCHECK' +‘MAILCHECK’ How often (in seconds) that the shell should check for mail in the - files specified in the 'MAILPATH' or 'MAIL' variables. The default + files specified in the ‘MAILPATH’ or ‘MAIL’ variables. The default is 60 seconds. When it is time to check for mail, the shell does so before displaying the primary prompt. If this variable is unset, or set to a value that is not a number greater than or equal to zero, the shell disables mail checking. -'MAPFILE' - An array variable created to hold the text read by the 'mapfile' +‘MAPFILE’ + An array variable created to hold the text read by the ‘mapfile’ builtin when no variable name is supplied. -'OLDPWD' - The previous working directory as set by the 'cd' builtin. +‘OLDPWD’ + The previous working directory as set by the ‘cd’ builtin. -'OPTERR' +‘OPTERR’ If set to the value 1, Bash displays error messages generated by - the 'getopts' builtin command. + the ‘getopts’ builtin command. -'OSTYPE' +‘OSTYPE’ A string describing the operating system Bash is running on. -'PIPESTATUS' +‘PIPESTATUS’ An array variable (*note Arrays::) containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command). -'POSIXLY_CORRECT' +‘POSIXLY_CORRECT’ If this variable is in the environment when Bash starts, the shell enters POSIX mode (*note Bash POSIX Mode::) before reading the - startup files, as if the '--posix' invocation option had been + startup files, as if the ‘--posix’ invocation option had been supplied. If it is set while the shell is running, Bash enables POSIX mode, as if the command set -o posix had been executed. When the shell enters POSIX mode, it sets this variable if it was not already set. -'PPID' +‘PPID’ The process ID of the shell's parent process. This variable is readonly. -'PROMPT_COMMAND' +‘PROMPT_COMMAND’ If this variable is set, and is an array, the value of each set element is interpreted as a command to execute before printing the - primary prompt ('$PS1'). If this is set but not an array variable, + primary prompt (‘$PS1’). If this is set but not an array variable, its value is used as a command to execute instead. -'PROMPT_DIRTRIM' +‘PROMPT_DIRTRIM’ If set to a number greater than zero, the value is used as the number of trailing directory components to retain when expanding - the '\w' and '\W' prompt string escapes (*note Controlling the + the ‘\w’ and ‘\W’ prompt string escapes (*note Controlling the Prompt::). Characters removed are replaced with an ellipsis. -'PS0' - The value of this parameter is expanded like 'PS1' and displayed by +‘PS0’ + The value of this parameter is expanded like ‘PS1’ and displayed by interactive shells after reading a command and before the command is executed. -'PS3' - The value of this variable is used as the prompt for the 'select' - command. If this variable is not set, the 'select' command prompts - with '#? ' +‘PS3’ + The value of this variable is used as the prompt for the ‘select’ + command. If this variable is not set, the ‘select’ command prompts + with ‘#? ’ -'PS4' - The value of this parameter is expanded like 'PS1' and the expanded +‘PS4’ + The value of this parameter is expanded like ‘PS1’ and the expanded value is the prompt printed before the command line is echoed when - the '-x' option is set (*note The Set Builtin::). The first + the ‘-x’ option is set (*note The Set Builtin::). The first character of the expanded value is replicated multiple times, as necessary, to indicate multiple levels of indirection. The default - is '+ '. + is ‘+ ’. -'PWD' - The current working directory as set by the 'cd' builtin. +‘PWD’ + The current working directory as set by the ‘cd’ builtin. -'RANDOM' +‘RANDOM’ Each time this parameter is referenced, it expands to a random integer between 0 and 32767. Assigning a value to this variable - seeds the random number generator. If 'RANDOM' is unset, it loses + seeds the random number generator. If ‘RANDOM’ is unset, it loses its special properties, even if it is subsequently reset. -'READLINE_ARGUMENT' +‘READLINE_ARGUMENT’ Any numeric argument given to a Readline command that was defined - using 'bind -x' (*note Bash Builtins:: when it was invoked. + using ‘bind -x’ (*note Bash Builtins:: when it was invoked. -'READLINE_LINE' - The contents of the Readline line buffer, for use with 'bind -x' +‘READLINE_LINE’ + The contents of the Readline line buffer, for use with ‘bind -x’ (*note Bash Builtins::). -'READLINE_MARK' - The position of the "mark" (saved insertion point) in the Readline - line buffer, for use with 'bind -x' (*note Bash Builtins::). The +‘READLINE_MARK’ + The position of the “mark” (saved insertion point) in the Readline + line buffer, for use with ‘bind -x’ (*note Bash Builtins::). The characters between the insertion point and the mark are often - called the "region". + called the “region”. -'READLINE_POINT' +‘READLINE_POINT’ The position of the insertion point in the Readline line buffer, - for use with 'bind -x' (*note Bash Builtins::). + for use with ‘bind -x’ (*note Bash Builtins::). -'REPLY' - The default variable for the 'read' builtin. +‘REPLY’ + The default variable for the ‘read’ builtin. -'SECONDS' +‘SECONDS’ This variable expands to the number of seconds since the shell was started. Assignment to this variable resets the count to the value assigned, and the expanded value becomes the value assigned plus the number of seconds since the assignment. The number of seconds at shell invocation and the current time are always determined by - querying the system clock. If 'SECONDS' is unset, it loses its + querying the system clock. If ‘SECONDS’ is unset, it loses its special properties, even if it is subsequently reset. -'SHELL' +‘SHELL’ This environment variable expands to the full pathname to the shell. If it is not set when the shell starts, Bash assigns to it the full pathname of the current user's login shell. -'SHELLOPTS' +‘SHELLOPTS’ A colon-separated list of enabled shell options. Each word in the - list is a valid argument for the '-o' option to the 'set' builtin + list is a valid argument for the ‘-o’ option to the ‘set’ builtin command (*note The Set Builtin::). The options appearing in - 'SHELLOPTS' are those reported as 'on' by 'set -o'. If this + ‘SHELLOPTS’ are those reported as ‘on’ by ‘set -o’. If this variable is in the environment when Bash starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly. -'SHLVL' +‘SHLVL’ Incremented by one each time a new instance of Bash is started. This is intended to be a count of how deeply your Bash shells are nested. -'SRANDOM' +‘SRANDOM’ This variable expands to a 32-bit pseudo-random number each time it is referenced. The random number generator is not linear on - systems that support '/dev/urandom' or 'arc4random', so each + systems that support ‘/dev/urandom’ or ‘arc4random’, so each returned number has no relationship to the numbers preceding it. The random number generator cannot be seeded, so assignments to - this variable have no effect. If 'SRANDOM' is unset, it loses its + this variable have no effect. If ‘SRANDOM’ is unset, it loses its special properties, even if it is subsequently reset. -'TIMEFORMAT' +‘TIMEFORMAT’ The value of this parameter is used as a format string specifying - how the timing information for pipelines prefixed with the 'time' - reserved word should be displayed. The '%' character introduces an + how the timing information for pipelines prefixed with the ‘time’ + reserved word should be displayed. The ‘%’ character introduces an escape sequence that is expanded to a time value or other information. The escape sequences and their meanings are as - follows; the braces denote optional portions. + follows; the brackets denote optional portions. - '%%' - A literal '%'. + ‘%%’ + A literal ‘%’. - '%[P][l]R' + ‘%[P][l]R’ The elapsed time in seconds. - '%[P][l]U' + ‘%[P][l]U’ The number of CPU seconds spent in user mode. - '%[P][l]S' + ‘%[P][l]S’ The number of CPU seconds spent in system mode. - '%P' + ‘%P’ The CPU percentage, computed as (%U + %S) / %R. The optional P is a digit specifying the precision, the number of fractional digits after a decimal point. A value of 0 causes no - decimal point or fraction to be output. At most three places after - the decimal point may be specified; values of P greater than 3 are - changed to 3. If P is not specified, the value 3 is used. + decimal point or fraction to be output. At most six places after + the decimal point may be specified; values of P greater than 6 are + changed to 6. If P is not specified, the value 3 is used. - The optional 'l' specifies a longer format, including minutes, of + The optional ‘l’ specifies a longer format, including minutes, of the form MMmSS.FFs. The value of P determines whether or not the fraction is included. If this variable is not set, Bash acts as if it had the value $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS' - If the value is null, no timing information is displayed. A - trailing newline is added when the format string is displayed. - -'TMOUT' - If set to a value greater than zero, 'TMOUT' is treated as the - default timeout for the 'read' builtin (*note Bash Builtins::). - The 'select' command (*note Conditional Constructs::) terminates if - input does not arrive after 'TMOUT' seconds when input is coming + If the value is null, Bash does not display any timing information. + A trailing newline is added when the format string is displayed. + +‘TMOUT’ + If set to a value greater than zero, ‘TMOUT’ is treated as the + default timeout for the ‘read’ builtin (*note Bash Builtins::). + The ‘select’ command (*note Conditional Constructs::) terminates if + input does not arrive after ‘TMOUT’ seconds when input is coming from a terminal. In an interactive shell, the value is interpreted as the number of @@ -5885,11 +6102,11 @@ Variables::). prompt. Bash terminates after waiting for that number of seconds if a complete line of input does not arrive. -'TMPDIR' +‘TMPDIR’ If set, Bash uses its value as the name of a directory in which Bash creates temporary files for the shell's use. -'UID' +‘UID’ The numeric real user id of the current user. This variable is readonly. @@ -5908,7 +6125,7 @@ This chapter describes features unique to Bash. * Bash Startup Files:: When and how Bash executes scripts. * Interactive Shells:: What an interactive shell is. * Bash Conditional Expressions:: Primitives used in composing expressions for - the 'test' builtin. + the ‘test’ builtin. * Shell Arithmetic:: Arithmetic on shell variables. * Aliases:: Substituting one command for another. * Arrays:: Array Variables. @@ -5933,134 +6150,139 @@ File: bashref.info, Node: Invoking Bash, Next: Bash Startup Files, Up: Bash F bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o OPTION] [-O SHOPT_OPTION] [ARGUMENT ...] - All of the single-character options used with the 'set' builtin + All of the single-character options used with the ‘set’ builtin (*note The Set Builtin::) can be used as options when the shell is invoked. In addition, there are several multi-character options that you can use. These options must appear on the command line before the single-character options to be recognized. -'--debugger' +‘--debugger’ Arrange for the debugger profile to be executed before the shell starts. Turns on extended debugging mode (see *note The Shopt - Builtin:: for a description of the 'extdebug' option to the 'shopt' + Builtin:: for a description of the ‘extdebug’ option to the ‘shopt’ builtin). -'--dump-po-strings' - A list of all double-quoted strings preceded by '$' is printed on - the standard output in the GNU 'gettext' PO (portable object) file - format. Equivalent to '-D' except for the output format. +‘--dump-po-strings’ + A list of all double-quoted strings preceded by ‘$’ is printed on + the standard output in the GNU ‘gettext’ PO (portable object) file + format. Equivalent to ‘-D’ except for the output format. -'--dump-strings' - Equivalent to '-D'. +‘--dump-strings’ + Equivalent to ‘-D’. -'--help' +‘--help’ Display a usage message on standard output and exit successfully. -'--init-file FILENAME' -'--rcfile FILENAME' - Execute commands from FILENAME (instead of '~/.bashrc') in an +‘--init-file FILENAME’ +‘--rcfile FILENAME’ + Execute commands from FILENAME (instead of ‘~/.bashrc’) in an interactive shell. -'--login' - Equivalent to '-l'. +‘--login’ + Equivalent to ‘-l’. -'--noediting' +‘--noediting’ Do not use the GNU Readline library (*note Command Line Editing::) to read command lines when the shell is interactive. -'--noprofile' - Don't load the system-wide startup file '/etc/profile' or any of - the personal initialization files '~/.bash_profile', - '~/.bash_login', or '~/.profile' when Bash is invoked as a login +‘--noprofile’ + Don't load the system-wide startup file ‘/etc/profile’ or any of + the personal initialization files ‘~/.bash_profile’, + ‘~/.bash_login’, or ‘~/.profile’ when Bash is invoked as a login shell. -'--norc' - Don't read the '~/.bashrc' initialization file in an interactive - shell. This is on by default if the shell is invoked as 'sh'. +‘--norc’ + Don't read the ‘~/.bashrc’ initialization file in an interactive + shell. This is on by default if the shell is invoked as ‘sh’. -'--posix' +‘--posix’ Change the behavior of Bash where the default operation differs from the POSIX standard to match the standard. This is intended to make Bash behave as a strict superset of that standard. *Note Bash POSIX Mode::, for a description of the Bash POSIX mode. -'--restricted' - Make the shell a restricted shell (*note The Restricted Shell::). +‘--restricted’ + Equivalent to ‘-r’. Make the shell a restricted shell (*note The + Restricted Shell::). -'--verbose' - Equivalent to '-v'. Print shell input lines as they're read. +‘--verbose’ + Equivalent to ‘-v’. Print shell input lines as they're read. -'--version' +‘--version’ Show version information for this instance of Bash on the standard output and exit successfully. There are several single-character options that may be supplied at -invocation which are not available with the 'set' builtin. +invocation which are not available with the ‘set’ builtin. -'-c' +‘-c’ Read and execute commands from the first non-option argument COMMAND_STRING, then exit. If there are arguments after the - COMMAND_STRING, the first argument is assigned to '$0' and any + COMMAND_STRING, the first argument is assigned to ‘$0’ and any remaining arguments are assigned to the positional parameters. The - assignment to '$0' sets the name of the shell, which is used in + assignment to ‘$0’ sets the name of the shell, which is used in warning and error messages. -'-i' +‘-i’ Force the shell to run interactively. Interactive shells are described in *note Interactive Shells::. -'-l' +‘-l’ Make this shell act as if it had been directly invoked by login. When the shell is interactive, this is equivalent to starting a - login shell with 'exec -l bash'. When the shell is not - interactive, the login shell startup files will be executed. 'exec - bash -l' or 'exec bash --login' will replace the current shell with + login shell with ‘exec -l bash’. When the shell is not + interactive, the login shell startup files will be executed. ‘exec + bash -l’ or ‘exec bash --login’ will replace the current shell with a Bash login shell. *Note Bash Startup Files::, for a description of the special behavior of a login shell. -'-r' +‘-r’ Make the shell a restricted shell (*note The Restricted Shell::). -'-s' +‘-s’ If this option is present, or if no arguments remain after option processing, then commands are read from the standard input. This option allows the positional parameters to be set when invoking an interactive shell or when reading input through a pipe. -'-D' - A list of all double-quoted strings preceded by '$' is printed on +‘-D’ + A list of all double-quoted strings preceded by ‘$’ is printed on the standard output. These are the strings that are subject to - language translation when the current locale is not 'C' or 'POSIX' - (*note Locale Translation::). This implies the '-n' option; no + language translation when the current locale is not ‘C’ or ‘POSIX’ + (*note Locale Translation::). This implies the ‘-n’ option; no commands will be executed. -'[-+]O [SHOPT_OPTION]' - SHOPT_OPTION is one of the shell options accepted by the 'shopt' +‘[-+]O [SHOPT_OPTION]’ + SHOPT_OPTION is one of the shell options accepted by the ‘shopt’ builtin (*note The Shopt Builtin::). If SHOPT_OPTION is present, - '-O' sets the value of that option; '+O' unsets it. If + ‘-O’ sets the value of that option; ‘+O’ unsets it. If SHOPT_OPTION is not supplied, the names and values of the shell - options accepted by 'shopt' are printed on the standard output. If - the invocation option is '+O', the output is displayed in a format + options accepted by ‘shopt’ are printed on the standard output. If + the invocation option is ‘+O’, the output is displayed in a format that may be reused as input. -'--' - A '--' signals the end of options and disables further option - processing. Any arguments after the '--' are treated as filenames - and arguments. +‘--’ + A ‘--’ signals the end of options and disables further option + processing. Any arguments after the ‘--’ are treated as a shell + script filename (*note Shell Scripts::) and arguments passed to + that script. - A _login_ shell is one whose first character of argument zero is '-', -or one invoked with the '--login' option. +‘-’ + Equivalent to ‘--’. + + A _login_ shell is one whose first character of argument zero is ‘-’, +or one invoked with the ‘--login’ option. An _interactive_ shell is one started without non-option arguments, -unless '-s' is specified, without specifying the '-c' option, and whose +unless ‘-s’ is specified, without specifying the ‘-c’ option, and whose input and output are both connected to terminals (as determined by -'isatty(3)'), or one started with the '-i' option. *Note Interactive +‘isatty(3)’), or one started with the ‘-i’ option. *Note Interactive Shells::, for more information. - If arguments remain after option processing, and neither the '-c' nor -the '-s' option has been supplied, the first argument is assumed to be + If arguments remain after option processing, and neither the ‘-c’ nor +the ‘-s’ option has been supplied, the first argument is assumed to be the name of a file containing shell commands (*note Shell Scripts::). -When Bash is invoked in this fashion, '$0' is set to the name of the +When Bash is invoked in this fashion, ‘$0’ is set to the name of the file, and the positional parameters are set to the remaining arguments. Bash reads and executes commands from this file, then exits. Bash's exit status is the exit status of the last command executed in the @@ -6079,32 +6301,32 @@ Tilde Expansion::). Interactive shells are described in *note Interactive Shells::. -Invoked as an interactive login shell, or with '--login' +Invoked as an interactive login shell, or with ‘--login’ ........................................................ When Bash is invoked as an interactive login shell, or as a -non-interactive shell with the '--login' option, it first reads and -executes commands from the file '/etc/profile', if that file exists. -After reading that file, it looks for '~/.bash_profile', -'~/.bash_login', and '~/.profile', in that order, and reads and executes +non-interactive shell with the ‘--login’ option, it first reads and +executes commands from the file ‘/etc/profile’, if that file exists. +After reading that file, it looks for ‘~/.bash_profile’, +‘~/.bash_login’, and ‘~/.profile’, in that order, and reads and executes commands from the first one that exists and is readable. The -'--noprofile' option may be used when the shell is started to inhibit +‘--noprofile’ option may be used when the shell is started to inhibit this behavior. When an interactive login shell exits, or a non-interactive login -shell executes the 'exit' builtin command, Bash reads and executes -commands from the file '~/.bash_logout', if it exists. +shell executes the ‘exit’ builtin command, Bash reads and executes +commands from the file ‘~/.bash_logout’, if it exists. Invoked as an interactive non-login shell ......................................... When an interactive shell that is not a login shell is started, Bash -reads and executes commands from '~/.bashrc', if that file exists. This -may be inhibited by using the '--norc' option. The '--rcfile FILE' +reads and executes commands from ‘~/.bashrc’, if that file exists. This +may be inhibited by using the ‘--norc’ option. The ‘--rcfile FILE’ option will force Bash to read and execute commands from FILE instead of -'~/.bashrc'. +‘~/.bashrc’. - So, typically, your '~/.bash_profile' contains the line + So, typically, your ‘~/.bash_profile’ contains the line if [ -f ~/.bashrc ]; then . ~/.bashrc; fi after (or before) any login-specific initializations. @@ -6112,46 +6334,46 @@ Invoked non-interactively ......................... When Bash is started non-interactively, to run a shell script, for -example, it looks for the variable 'BASH_ENV' in the environment, +example, it looks for the variable ‘BASH_ENV’ in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed: if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi -but the value of the 'PATH' variable is not used to search for the +but the value of the ‘PATH’ variable is not used to search for the filename. As noted above, if a non-interactive shell is invoked with the -'--login' option, Bash attempts to read and execute commands from the +‘--login’ option, Bash attempts to read and execute commands from the login shell startup files. -Invoked with name 'sh' +Invoked with name ‘sh’ ...................... -If Bash is invoked with the name 'sh', it tries to mimic the startup -behavior of historical versions of 'sh' as closely as possible, while +If Bash is invoked with the name ‘sh’, it tries to mimic the startup +behavior of historical versions of ‘sh’ as closely as possible, while conforming to the POSIX standard as well. When invoked as an interactive login shell, or as a non-interactive -shell with the '--login' option, it first attempts to read and execute -commands from '/etc/profile' and '~/.profile', in that order. The -'--noprofile' option may be used to inhibit this behavior. When invoked -as an interactive shell with the name 'sh', Bash looks for the variable -'ENV', expands its value if it is defined, and uses the expanded value +shell with the ‘--login’ option, it first attempts to read and execute +commands from ‘/etc/profile’ and ‘~/.profile’, in that order. The +‘--noprofile’ option may be used to inhibit this behavior. When invoked +as an interactive shell with the name ‘sh’, Bash looks for the variable +‘ENV’, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as -'sh' does not attempt to read and execute commands from any other -startup files, the '--rcfile' option has no effect. A non-interactive -shell invoked with the name 'sh' does not attempt to read any other +‘sh’ does not attempt to read and execute commands from any other +startup files, the ‘--rcfile’ option has no effect. A non-interactive +shell invoked with the name ‘sh’ does not attempt to read any other startup files. - When invoked as 'sh', Bash enters POSIX mode after the startup files + When invoked as ‘sh’, Bash enters POSIX mode after the startup files are read. Invoked in POSIX mode ..................... -When Bash is started in POSIX mode, as with the '--posix' command line +When Bash is started in POSIX mode, as with the ‘--posix’ command line option, it follows the POSIX standard for startup files. In this mode, -interactive shells expand the 'ENV' variable and commands are read and +interactive shells expand the ‘ENV’ variable and commands are read and executed from the file whose name is the expanded value. No other startup files are read. @@ -6160,12 +6382,12 @@ Invoked by remote shell daemon Bash attempts to determine when it is being run with its standard input connected to a network connection, as when executed by the historical -remote shell daemon, usually 'rshd', or the secure shell daemon 'sshd'. +remote shell daemon, usually ‘rshd’, or the secure shell daemon ‘sshd’. If Bash determines it is being run non-interactively in this fashion, it -reads and executes commands from '~/.bashrc', if that file exists and is -readable. It will not do this if invoked as 'sh'. The '--norc' option -may be used to inhibit this behavior, and the '--rcfile' option may be -used to force another file to be read, but neither 'rshd' nor 'sshd' +reads and executes commands from ‘~/.bashrc’, if that file exists and is +readable. It will not do this if invoked as ‘sh’. The ‘--norc’ option +may be used to inhibit this behavior, and the ‘--rcfile’ option may be +used to force another file to be read, but neither ‘rshd’ nor ‘sshd’ generally invoke the shell with those options or allow them to be specified. @@ -6173,11 +6395,11 @@ Invoked with unequal effective and real UID/GIDs ................................................ If Bash is started with the effective user (group) id not equal to the -real user (group) id, and the '-p' option is not supplied, no startup +real user (group) id, and the ‘-p’ option is not supplied, no startup files are read, shell functions are not inherited from the environment, -the 'SHELLOPTS', 'BASHOPTS', 'CDPATH', and 'GLOBIGNORE' variables, if +the ‘SHELLOPTS’, ‘BASHOPTS’, ‘CDPATH’, and ‘GLOBIGNORE’ variables, if they appear in the environment, are ignored, and the effective user id -is set to the real user id. If the '-p' option is supplied at +is set to the real user id. If the ‘-p’ option is supplied at invocation, the startup behavior is the same, but the effective user id is not reset. @@ -6200,14 +6422,14 @@ File: bashref.info, Node: What is an Interactive Shell?, Next: Is this Shell I ----------------------------------- An interactive shell is one started without non-option arguments (unless -'-s' is specified) and without specifying the '-c' option, whose input +‘-s’ is specified) and without specifying the ‘-c’ option, whose input and error output are both connected to terminals (as determined by -'isatty(3)'), or one started with the '-i' option. +‘isatty(3)’), or one started with the ‘-i’ option. An interactive shell generally reads from and writes to a user's terminal. - The '-s' invocation option may be used to set the positional + The ‘-s’ invocation option may be used to set the positional parameters when an interactive shell is started.  @@ -6217,15 +6439,15 @@ File: bashref.info, Node: Is this Shell Interactive?, Next: Interactive Shell -------------------------------- To determine within a startup script whether or not Bash is running -interactively, test the value of the '-' special parameter. It contains -'i' when the shell is interactive. For example: +interactively, test the value of the ‘-’ special parameter. It contains +‘i’ when the shell is interactive. For example: case "$-" in *i*) echo This shell is interactive ;; *) echo This shell is not interactive ;; esac - Alternatively, startup scripts may examine the variable 'PS1'; it is + Alternatively, startup scripts may examine the variable ‘PS1’; it is unset in non-interactive shells, and set in interactive shells. Thus: if [ -z "$PS1" ]; then @@ -6248,55 +6470,55 @@ several ways. 2. Job Control (*note Job Control::) is enabled by default. When job control is in effect, Bash ignores the keyboard-generated job - control signals 'SIGTTIN', 'SIGTTOU', and 'SIGTSTP'. + control signals ‘SIGTTIN’, ‘SIGTTOU’, and ‘SIGTSTP’. - 3. Bash expands and displays 'PS1' before reading the first line of a - command, and expands and displays 'PS2' before reading the second + 3. Bash expands and displays ‘PS1’ before reading the first line of a + command, and expands and displays ‘PS2’ before reading the second and subsequent lines of a multi-line command. Bash expands and - displays 'PS0' after it reads a command but before executing it. + displays ‘PS0’ after it reads a command but before executing it. See *note Controlling the Prompt::, for a complete list of prompt string escape sequences. 4. Bash executes the values of the set elements of the - 'PROMPT_COMMAND' array variable as commands before printing the - primary prompt, '$PS1' (*note Bash Variables::). + ‘PROMPT_COMMAND’ array variable as commands before printing the + primary prompt, ‘$PS1’ (*note Bash Variables::). 5. Readline (*note Command Line Editing::) is used to read commands from the user's terminal. - 6. Bash inspects the value of the 'ignoreeof' option to 'set -o' - instead of exiting immediately when it receives an 'EOF' on its + 6. Bash inspects the value of the ‘ignoreeof’ option to ‘set -o’ + instead of exiting immediately when it receives an ‘EOF’ on its standard input when reading a command (*note The Set Builtin::). 7. Command history (*note Bash History Facilities::) and history expansion (*note History Interaction::) are enabled by default. - Bash will save the command history to the file named by '$HISTFILE' + Bash will save the command history to the file named by ‘$HISTFILE’ when a shell with history enabled exits. 8. Alias expansion (*note Aliases::) is performed by default. - 9. In the absence of any traps, Bash ignores 'SIGTERM' (*note + 9. In the absence of any traps, Bash ignores ‘SIGTERM’ (*note Signals::). - 10. In the absence of any traps, 'SIGINT' is caught and handled (*note - Signals::). 'SIGINT' will interrupt some shell builtins. + 10. In the absence of any traps, ‘SIGINT’ is caught and handled (*note + Signals::). ‘SIGINT’ will interrupt some shell builtins. - 11. An interactive login shell sends a 'SIGHUP' to all jobs on exit if - the 'huponexit' shell option has been enabled (*note Signals::). + 11. An interactive login shell sends a ‘SIGHUP’ to all jobs on exit if + the ‘huponexit’ shell option has been enabled (*note Signals::). - 12. The '-n' invocation option is ignored, and 'set -n' has no effect + 12. The ‘-n’ invocation option is ignored, and ‘set -n’ has no effect (*note The Set Builtin::). 13. Bash will check for mail periodically, depending on the values of - the 'MAIL', 'MAILPATH', and 'MAILCHECK' shell variables (*note Bash + the ‘MAIL’, ‘MAILPATH’, and ‘MAILCHECK’ shell variables (*note Bash Variables::). 14. Expansion errors due to references to unbound shell variables - after 'set -u' has been enabled will not cause the shell to exit + after ‘set -u’ has been enabled will not cause the shell to exit (*note The Set Builtin::). 15. The shell will not exit on expansion errors caused by VAR being - unset or null in '${VAR:?WORD}' expansions (*note Shell Parameter + unset or null in ‘${VAR:?WORD}’ expansions (*note Shell Parameter Expansion::). 16. Redirection errors encountered by shell builtins will not cause @@ -6305,20 +6527,20 @@ several ways. 17. When running in POSIX mode, a special builtin returning an error status will not cause the shell to exit (*note Bash POSIX Mode::). - 18. A failed 'exec' will not cause the shell to exit (*note Bourne + 18. A failed ‘exec’ will not cause the shell to exit (*note Bourne Shell Builtins::). 19. Parser syntax errors will not cause the shell to exit. - 20. If the 'cdspell' shell option is enabled, the shell will attempt - simple spelling correction for directory arguments to the 'cd' - builtin (see the description of the 'cdspell' option to the 'shopt' - builtin in *note The Shopt Builtin::). The 'cdspell' option is + 20. If the ‘cdspell’ shell option is enabled, the shell will attempt + simple spelling correction for directory arguments to the ‘cd’ + builtin (see the description of the ‘cdspell’ option to the ‘shopt’ + builtin in *note The Shopt Builtin::). The ‘cdspell’ option is only effective in interactive shells. - 21. The shell will check the value of the 'TMOUT' variable and exit if + 21. The shell will check the value of the ‘TMOUT’ variable and exit if a command is not read within the specified number of seconds after - printing '$PS1' (*note Bash Variables::). + printing ‘$PS1’ (*note Bash Variables::).  File: bashref.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic, Prev: Interactive Shells, Up: Bash Features @@ -6326,9 +6548,9 @@ File: bashref.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic 6.4 Bash Conditional Expressions ================================ -Conditional expressions are used by the '[[' compound command (*note -Conditional Constructs::) and the 'test' and '[' builtin commands (*note -Bourne Shell Builtins::). The 'test' and '[' commands determine their +Conditional expressions are used by the ‘[[’ compound command (*note +Conditional Constructs::) and the ‘test’ and ‘[’ builtin commands (*note +Bourne Shell Builtins::). The ‘test’ and ‘[’ commands determine their behavior based on the number of arguments; see the descriptions of those commands for any other command-specific actions. @@ -6339,134 +6561,137 @@ well. Bash handles several filenames specially when they are used in expressions. If the operating system on which Bash is running provides these special files, Bash will use them; otherwise it will emulate them internally with this behavior: If the FILE argument to one of the -primaries is of the form '/dev/fd/N', then file descriptor N is checked. -If the FILE argument to one of the primaries is one of '/dev/stdin', -'/dev/stdout', or '/dev/stderr', file descriptor 0, 1, or 2, +primaries is of the form ‘/dev/fd/N’, then file descriptor N is checked. +If the FILE argument to one of the primaries is one of ‘/dev/stdin’, +‘/dev/stdout’, or ‘/dev/stderr’, file descriptor 0, 1, or 2, respectively, is checked. - When used with '[[', the '<' and '>' operators sort lexicographically -using the current locale. The 'test' command uses ASCII ordering. + When used with ‘[[’, the ‘<’ and ‘>’ operators sort lexicographically +using the current locale. The ‘test’ command uses ASCII ordering. Unless otherwise specified, primaries that operate on files follow symbolic links and operate on the target of the link, rather than the link itself. -'-a FILE' +‘-a FILE’ True if FILE exists. -'-b FILE' +‘-b FILE’ True if FILE exists and is a block special file. -'-c FILE' +‘-c FILE’ True if FILE exists and is a character special file. -'-d FILE' +‘-d FILE’ True if FILE exists and is a directory. -'-e FILE' +‘-e FILE’ True if FILE exists. -'-f FILE' +‘-f FILE’ True if FILE exists and is a regular file. -'-g FILE' +‘-g FILE’ True if FILE exists and its set-group-id bit is set. -'-h FILE' +‘-h FILE’ True if FILE exists and is a symbolic link. -'-k FILE' +‘-k FILE’ True if FILE exists and its "sticky" bit is set. -'-p FILE' +‘-p FILE’ True if FILE exists and is a named pipe (FIFO). -'-r FILE' +‘-r FILE’ True if FILE exists and is readable. -'-s FILE' +‘-s FILE’ True if FILE exists and has a size greater than zero. -'-t FD' +‘-t FD’ True if file descriptor FD is open and refers to a terminal. -'-u FILE' +‘-u FILE’ True if FILE exists and its set-user-id bit is set. -'-w FILE' +‘-w FILE’ True if FILE exists and is writable. -'-x FILE' +‘-x FILE’ True if FILE exists and is executable. -'-G FILE' +‘-G FILE’ True if FILE exists and is owned by the effective group id. -'-L FILE' +‘-L FILE’ True if FILE exists and is a symbolic link. -'-N FILE' +‘-N FILE’ True if FILE exists and has been modified since it was last read. -'-O FILE' +‘-O FILE’ True if FILE exists and is owned by the effective user id. -'-S FILE' +‘-S FILE’ True if FILE exists and is a socket. -'FILE1 -ef FILE2' +‘FILE1 -ef FILE2’ True if FILE1 and FILE2 refer to the same device and inode numbers. -'FILE1 -nt FILE2' +‘FILE1 -nt FILE2’ True if FILE1 is newer (according to modification date) than FILE2, or if FILE1 exists and FILE2 does not. -'FILE1 -ot FILE2' +‘FILE1 -ot FILE2’ True if FILE1 is older than FILE2, or if FILE2 exists and FILE1 does not. -'-o OPTNAME' +‘-o OPTNAME’ True if the shell option OPTNAME is enabled. The list of options - appears in the description of the '-o' option to the 'set' builtin + appears in the description of the ‘-o’ option to the ‘set’ builtin (*note The Set Builtin::). -'-v VARNAME' +‘-v VARNAME’ True if the shell variable VARNAME is set (has been assigned a - value). + value). If VARNAME is an indexed array variable name subscripted + by ‘@’ or ‘*’, this returns true if the array has any set elements. + If VARNAME is an associative array variable name subscripted by ‘@’ + or ‘*’, this returns true if an element with that key is set. -'-R VARNAME' +‘-R VARNAME’ True if the shell variable VARNAME is set and is a name reference. -'-z STRING' +‘-z STRING’ True if the length of STRING is zero. -'-n STRING' -'STRING' +‘-n STRING’ +‘STRING’ True if the length of STRING is non-zero. -'STRING1 == STRING2' -'STRING1 = STRING2' - True if the strings are equal. When used with the '[[' command, +‘STRING1 == STRING2’ +‘STRING1 = STRING2’ + True if the strings are equal. When used with the ‘[[’ command, this performs pattern matching as described above (*note Conditional Constructs::). - '=' should be used with the 'test' command for POSIX conformance. + ‘=’ should be used with the ‘test’ command for POSIX conformance. -'STRING1 != STRING2' +‘STRING1 != STRING2’ True if the strings are not equal. -'STRING1 < STRING2' +‘STRING1 < STRING2’ True if STRING1 sorts before STRING2 lexicographically. -'STRING1 > STRING2' +‘STRING1 > STRING2’ True if STRING1 sorts after STRING2 lexicographically. -'ARG1 OP ARG2' - 'OP' is one of '-eq', '-ne', '-lt', '-le', '-gt', or '-ge'. These +‘ARG1 OP ARG2’ + ‘OP’ is one of ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, or ‘-ge’. These arithmetic binary operators return true if ARG1 is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to ARG2, respectively. ARG1 and ARG2 may be - positive or negative integers. When used with the '[[' command, + positive or negative integers. When used with the ‘[[’ command, ARG1 and ARG2 are evaluated as arithmetic expressions (*note Shell Arithmetic::). @@ -6477,8 +6702,8 @@ File: bashref.info, Node: Shell Arithmetic, Next: Aliases, Prev: Bash Conditi ==================== The shell allows arithmetic expressions to be evaluated, as one of the -shell expansions or by using the '((' compound command, the 'let' -builtin, or the '-i' option to the 'declare' builtin. +shell expansions or by using the ‘((’ compound command, the ‘let’ +builtin, or the ‘-i’ option to the ‘declare’ builtin. Evaluation is done in fixed-width integers with no check for overflow, though division by 0 is trapped and flagged as an error. The @@ -6487,58 +6712,58 @@ as in the C language. The following list of operators is grouped into levels of equal-precedence operators. The levels are listed in order of decreasing precedence. -'ID++ ID--' +‘ID++ ID--’ variable post-increment and post-decrement -'++ID --ID' +‘++ID --ID’ variable pre-increment and pre-decrement -'- +' +‘- +’ unary minus and plus -'! ~' +‘! ~’ logical and bitwise negation -'**' +‘**’ exponentiation -'* / %' +‘* / %’ multiplication, division, remainder -'+ -' +‘+ -’ addition, subtraction -'<< >>' +‘<< >>’ left and right bitwise shifts -'<= >= < >' +‘<= >= < >’ comparison -'== !=' +‘== !=’ equality and inequality -'&' +‘&’ bitwise AND -'^' +‘^’ bitwise exclusive OR -'|' +‘|’ bitwise OR -'&&' +‘&&’ logical AND -'||' +‘||’ logical OR -'expr ? expr : expr' +‘expr ? if-true-expr : if-false-expr’ conditional operator -'= *= /= %= += -= <<= >>= &= ^= |=' +‘= *= /= %= += -= <<= >>= &= ^= |=’ assignment -'expr1 , expr2' +‘expr1 , expr2’ comma Shell variables are allowed as operands; parameter expansion is @@ -6548,19 +6773,19 @@ parameter expansion syntax. A shell variable that is null or unset evaluates to 0 when referenced by name without using the parameter expansion syntax. The value of a variable is evaluated as an arithmetic expression when it is referenced, or when a variable which has been -given the 'integer' attribute using 'declare -i' is assigned a value. A -null value evaluates to 0. A shell variable need not have its 'integer' +given the ‘integer’ attribute using ‘declare -i’ is assigned a value. A +null value evaluates to 0. A shell variable need not have its ‘integer’ attribute turned on to be used in an expression. Integer constants follow the C language definition, without suffixes or character constants. Constants with a leading 0 are interpreted as -octal numbers. A leading '0x' or '0X' denotes hexadecimal. Otherwise, -numbers take the form [BASE'#']N, where the optional BASE is a decimal +octal numbers. A leading ‘0x’ or ‘0X’ denotes hexadecimal. Otherwise, +numbers take the form [BASE‘#’]N, where the optional BASE is a decimal number between 2 and 64 representing the arithmetic base, and N is a -number in that base. If BASE'#' is omitted, then base 10 is used. When +number in that base. If BASE‘#’ is omitted, then base 10 is used. When specifying N, if a non-digit is required, the digits greater than 9 are -represented by the lowercase letters, the uppercase letters, '@', and -'_', in that order. If BASE is less than or equal to 36, lowercase and +represented by the lowercase letters, the uppercase letters, ‘@’, and +‘_’, in that order. If BASE is less than or equal to 36, lowercase and uppercase letters may be used interchangeably to represent numbers between 10 and 35. @@ -6574,33 +6799,39 @@ File: bashref.info, Node: Aliases, Next: Arrays, Prev: Shell Arithmetic, Up: 6.6 Aliases =========== -"Aliases" allow a string to be substituted for a word when it is used as -the first word of a simple command. The shell maintains a list of -aliases that may be set and unset with the 'alias' and 'unalias' builtin -commands. - - The first word of each simple command, if unquoted, is checked to see -if it has an alias. If so, that word is replaced by the text of the -alias. The characters '/', '$', '`', '=' and any of the shell -metacharacters or quoting characters listed above may not appear in an -alias name. The replacement text may contain any valid shell input, -including shell metacharacters. The first word of the replacement text -is tested for aliases, but a word that is identical to an alias being -expanded is not expanded a second time. This means that one may alias -'ls' to '"ls -F"', for instance, and Bash does not try to recursively -expand the replacement text. If the last character of the alias value -is a 'blank', then the next command word following the alias is also -checked for alias expansion. - - Aliases are created and listed with the 'alias' command, and removed -with the 'unalias' command. +“Aliases” allow a string to be substituted for a word that is in a +position in the input where it can be the first word of a simple +command. Aliases have names and corresponding values that are set and +unset using the ‘alias’ and ‘unalias’ builtin commands (*note Shell +Builtin Commands::). + + If the shell reads an unquoted word in the right position, it checks +the word to see if it matches an alias name. If it matches, the shell +replaces the word with the alias value, and reads that value as if it +had been read instead of the word. The shell doesn't look at any +characters following the word before attempting alias substitution. + + The characters ‘/’, ‘$’, ‘`’, ‘=’ and any of the shell metacharacters +or quoting characters listed above may not appear in an alias name. The +replacement text may contain any valid shell input, including shell +metacharacters. The first word of the replacement text is tested for +aliases, but a word that is identical to an alias being expanded is not +expanded a second time. This means that one may alias ‘ls’ to ‘"ls +-F"’, for instance, and Bash does not try to recursively expand the +replacement text. + + If the last character of the alias value is a ‘blank’, then the next +command word following the alias is also checked for alias expansion. + + Aliases are created and listed with the ‘alias’ command, and removed +with the ‘unalias’ command. There is no mechanism for using arguments in the replacement text, as -in 'csh'. If arguments are needed, use a shell function (*note Shell -Functions::). +in ‘csh’. If arguments are needed, use a shell function (*note Shell +Functions::) instead. Aliases are not expanded when the shell is not interactive, unless -the 'expand_aliases' shell option is set using 'shopt' (*note The Shopt +the ‘expand_aliases’ shell option is set using ‘shopt’ (*note The Shopt Builtin::). The rules concerning the definition and use of aliases are somewhat @@ -6616,7 +6847,7 @@ expanded when a function definition is read, not when the function is executed, because a function definition is itself a command. As a consequence, aliases defined in a function are not available until after that function is executed. To be safe, always put alias definitions on -a separate line, and do not use 'alias' in compound commands. +a separate line, and do not use ‘alias’ in compound commands. For almost every purpose, shell functions are preferred over aliases. @@ -6627,7 +6858,7 @@ File: bashref.info, Node: Arrays, Next: The Directory Stack, Prev: Aliases, ========== Bash provides one-dimensional indexed and associative array variables. -Any variable may be used as an indexed array; the 'declare' builtin will +Any variable may be used as an indexed array; the ‘declare’ builtin will explicitly declare an array. There is no maximum limit on the size of an array, nor any requirement that members be indexed or assigned contiguously. Indexed arrays are referenced using integers (including @@ -6649,20 +6880,22 @@ is also accepted; the SUBSCRIPT is ignored. Associative arrays are created using declare -A NAME - Attributes may be specified for an array variable using the 'declare' -and 'readonly' builtins. Each attribute applies to all members of an + Attributes may be specified for an array variable using the ‘declare’ +and ‘readonly’ builtins. Each attribute applies to all members of an array. Arrays are assigned to using compound assignments of the form NAME=(VALUE1 VALUE2 ... ) -where each VALUE may be of the form '[SUBSCRIPT]='STRING. Indexed array +where each VALUE may be of the form ‘[SUBSCRIPT]=’STRING. Indexed array assignments do not require anything but STRING. When assigning to indexed arrays, if the optional subscript is supplied, that index is assigned to; otherwise the index of the element assigned is the last index assigned to by the statement plus one. Indexing starts at zero. - Each VALUE in the list undergoes all the shell expansions described -above (*note Shell Expansions::). + Each VALUE in the list undergoes the shell expansions described above +(*note Shell Expansions::), but VALUEs that are valid variable +assignments including the brackets and subscript do not undergo brace +expansion and word splitting, as with individual variable assignments. When assigning to an associative array, the words in a compound assignment may be either assignment statements, for which the subscript @@ -6674,8 +6907,8 @@ interpreted; all assignments in a list must be of the same type. When using key/value pairs, the keys may not be missing or empty; a final missing value is treated like the empty string. - This syntax is also accepted by the 'declare' builtin. Individual -array elements may be assigned to using the 'NAME[SUBSCRIPT]=VALUE' + This syntax is also accepted by the ‘declare’ builtin. Individual +array elements may be assigned to using the ‘NAME[SUBSCRIPT]=VALUE’ syntax introduced above. When assigning to an indexed array, if NAME is subscripted by a @@ -6683,34 +6916,35 @@ negative number, that number is interpreted as relative to one greater than the maximum index of NAME, so negative indices count back from the end of the array, and an index of -1 references the last element. - The '+=' operator will append to an array variable when assigning + The ‘+=’ operator will append to an array variable when assigning using the compound assignment syntax; see *note Shell Parameters:: above. - Any element of an array may be referenced using '${NAME[SUBSCRIPT]}'. + Any element of an array may be referenced using ‘${NAME[SUBSCRIPT]}’. The braces are required to avoid conflicts with the shell's filename -expansion operators. If the SUBSCRIPT is '@' or '*', the word expands -to all members of the array NAME. These subscripts differ only when the -word appears within double quotes. If the word is double-quoted, -'${NAME[*]}' expands to a single word with the value of each array -member separated by the first character of the 'IFS' variable, and -'${NAME[@]}' expands each element of NAME to a separate word. When -there are no array members, '${NAME[@]}' expands to nothing. If the -double-quoted expansion occurs within a word, the expansion of the first -parameter is joined with the beginning part of the original word, and -the expansion of the last parameter is joined with the last part of the -original word. This is analogous to the expansion of the special -parameters '@' and '*'. '${#NAME[SUBSCRIPT]}' expands to the length of -'${NAME[SUBSCRIPT]}'. If SUBSCRIPT is '@' or '*', the expansion is the -number of elements in the array. If the SUBSCRIPT used to reference an -element of an indexed array evaluates to a number less than zero, it is -interpreted as relative to one greater than the maximum index of the -array, so negative indices count back from the end of the array, and an -index of -1 refers to the last element. +expansion operators. If the SUBSCRIPT is ‘@’ or ‘*’, the word expands +to all members of the array NAME, unless otherwise noted in the +description of a builtin or word expansion. These subscripts differ +only when the word appears within double quotes. If the word is +double-quoted, ‘${NAME[*]}’ expands to a single word with the value of +each array member separated by the first character of the ‘IFS’ +variable, and ‘${NAME[@]}’ expands each element of NAME to a separate +word. When there are no array members, ‘${NAME[@]}’ expands to nothing. +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. This is analogous to the expansion of the +special parameters ‘@’ and ‘*’. ‘${#NAME[SUBSCRIPT]}’ expands to the +length of ‘${NAME[SUBSCRIPT]}’. If SUBSCRIPT is ‘@’ or ‘*’, the +expansion is the number of elements in the array. If the SUBSCRIPT used +to reference an element of an indexed array evaluates to a number less +than zero, it is interpreted as relative to one greater than the maximum +index of the array, so negative indices count back from the end of the +array, and an index of -1 refers to the last element. Referencing an array variable without a subscript is equivalent to referencing with a subscript of 0. Any reference to a variable using a -valid subscript is legal, and 'bash' will create an array if necessary. +valid subscript is valid, and Bash will create an array if necessary. An array variable is considered set if a subscript has been assigned a value. The null string is a valid value. @@ -6718,32 +6952,32 @@ a value. The null string is a valid value. It is possible to obtain the keys (indices) of an array as well as the values. ${!NAME[@]} and ${!NAME[*]} expand to the indices assigned in array variable NAME. The treatment when in double quotes is similar -to the expansion of the special parameters '@' and '*' within double +to the expansion of the special parameters ‘@’ and ‘*’ within double quotes. - The 'unset' builtin is used to destroy arrays. 'unset -NAME[SUBSCRIPT]' destroys the array element at index SUBSCRIPT. + The ‘unset’ builtin is used to destroy arrays. ‘unset +NAME[SUBSCRIPT]’ destroys the array element at index SUBSCRIPT. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable does not unset -the variable. 'unset NAME', where NAME is an array, removes the entire -array. 'unset NAME[SUBSCRIPT]' behaves differently depending on the -array type when given a subscript of '*' or '@'. When NAME is an -associative array, it removes the element with key '*' or '@'. If NAME -is an indexed array, 'unset' removes all of the elements, but does not +the variable. ‘unset NAME’, where NAME is an array, removes the entire +array. ‘unset NAME[SUBSCRIPT]’ behaves differently depending on the +array type when given a subscript of ‘*’ or ‘@’. When NAME is an +associative array, it removes the element with key ‘*’ or ‘@’. If NAME +is an indexed array, ‘unset’ removes all of the elements, but does not remove the array itself. When using a variable name with a subscript as an argument to a -command, such as with 'unset', without using the word expansion syntax +command, such as with ‘unset’, without using the word expansion syntax described above, the argument is subject to the shell's filename expansion. If filename expansion is not desired, the argument should be quoted. - The 'declare', 'local', and 'readonly' builtins each accept a '-a' -option to specify an indexed array and a '-A' option to specify an -associative array. If both options are supplied, '-A' takes precedence. -The 'read' builtin accepts a '-a' option to assign a list of words read + The ‘declare’, ‘local’, and ‘readonly’ builtins each accept a ‘-a’ +option to specify an indexed array and a ‘-A’ option to specify an +associative array. If both options are supplied, ‘-A’ takes precedence. +The ‘read’ builtin accepts a ‘-a’ option to assign a list of words read from the standard input to an array, and can read values from the -standard input into individual array elements. The 'set' and 'declare' +standard input into individual array elements. The ‘set’ and ‘declare’ builtins display array values in a way that allows them to be reused as input. @@ -6759,14 +6993,14 @@ File: bashref.info, Node: The Directory Stack, Next: Controlling the Prompt, the directory stack. The directory stack is a list of recently-visited directories. The -'pushd' builtin adds directories to the stack as it changes the current -directory, and the 'popd' builtin removes specified directories from the +‘pushd’ builtin adds directories to the stack as it changes the current +directory, and the ‘popd’ builtin removes specified directories from the stack and changes the current directory to the directory removed. The -'dirs' builtin displays the contents of the directory stack. The +‘dirs’ builtin displays the contents of the directory stack. The current directory is always the "top" of the directory stack. The contents of the directory stack are also visible as the value of -the 'DIRSTACK' shell variable. +the ‘DIRSTACK’ shell variable.  File: bashref.info, Node: Directory Stack Builtins, Up: The Directory Stack @@ -6774,105 +7008,105 @@ File: bashref.info, Node: Directory Stack Builtins, Up: The Directory Stack 6.8.1 Directory Stack Builtins ------------------------------ -'dirs' +‘dirs’ dirs [-clpv] [+N | -N] Display the list of currently remembered directories. Directories - are added to the list with the 'pushd' command; the 'popd' command + are added to the list with the ‘pushd’ command; the ‘popd’ command removes directories from the list. The current directory is always the first directory in the stack. - '-c' + ‘-c’ Clears the directory stack by deleting all of the elements. - '-l' + ‘-l’ Produces a listing using full pathnames; the default listing format uses a tilde to denote the home directory. - '-p' - Causes 'dirs' to print the directory stack with one entry per + ‘-p’ + Causes ‘dirs’ to print the directory stack with one entry per line. - '-v' - Causes 'dirs' to print the directory stack with one entry per + ‘-v’ + Causes ‘dirs’ to print the directory stack with one entry per line, prefixing each entry with its index in the stack. - '+N' + ‘+N’ Displays the Nth directory (counting from the left of the list - printed by 'dirs' when invoked without options), starting with + printed by ‘dirs’ when invoked without options), starting with zero. - '-N' + ‘-N’ Displays the Nth directory (counting from the right of the - list printed by 'dirs' when invoked without options), starting + list printed by ‘dirs’ when invoked without options), starting with zero. -'popd' +‘popd’ popd [-n] [+N | -N] Removes elements from the directory stack. The elements are - numbered from 0 starting at the first directory listed by 'dirs'; - that is, 'popd' is equivalent to 'popd +0'. + numbered from 0 starting at the first directory listed by ‘dirs’; + that is, ‘popd’ is equivalent to ‘popd +0’. - When no arguments are given, 'popd' removes the top directory from + When no arguments are given, ‘popd’ removes the top directory from the stack and changes to the new top directory. Arguments, if supplied, have the following meanings: - '-n' + ‘-n’ Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated. - '+N' + ‘+N’ Removes the Nth directory (counting from the left of the list - printed by 'dirs'), starting with zero, from the stack. - '-N' + printed by ‘dirs’), starting with zero, from the stack. + ‘-N’ Removes the Nth directory (counting from the right of the list - printed by 'dirs'), starting with zero, from the stack. + printed by ‘dirs’), starting with zero, from the stack. - If the top element of the directory stack is modified, and the '-n' - option was not supplied, 'popd' uses the 'cd' builtin to change to - the directory at the top of the stack. If the 'cd' fails, 'popd' + If the top element of the directory stack is modified, and the ‘-n’ + option was not supplied, ‘popd’ uses the ‘cd’ builtin to change to + the directory at the top of the stack. If the ‘cd’ fails, ‘popd’ returns a non-zero value. - Otherwise, 'popd' returns an unsuccessful status if an invalid + Otherwise, ‘popd’ returns an unsuccessful status if an invalid option is encountered, the directory stack is empty, or a non-existent directory stack entry is specified. - If the 'popd' command is successful, Bash runs 'dirs' to show the + If the ‘popd’ command is successful, Bash runs ‘dirs’ to show the final contents of the directory stack, and the return status is 0. -'pushd' +‘pushd’ pushd [-n] [+N | -N | DIR] 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, 'pushd' exchanges the top two + directory. With no arguments, ‘pushd’ exchanges the top two elements of the directory stack. Arguments, if supplied, have the following meanings: - '-n' + ‘-n’ Suppresses the normal change of directory when rotating or adding directories to the stack, so that only the stack is manipulated. - '+N' + ‘+N’ Brings the Nth directory (counting from the left of the list - printed by 'dirs', starting with zero) to the top of the list + printed by ‘dirs’, starting with zero) to the top of the list by rotating the stack. - '-N' + ‘-N’ Brings the Nth directory (counting from the right of the list - printed by 'dirs', starting with zero) to the top of the list + printed by ‘dirs’, starting with zero) to the top of the list by rotating the stack. - 'DIR' + ‘DIR’ Makes DIR be the top of the stack. - After the stack has been modified, if the '-n' option was not - supplied, 'pushd' uses the 'cd' builtin to change to the directory - at the top of the stack. If the 'cd' fails, 'pushd' returns a + After the stack has been modified, if the ‘-n’ option was not + supplied, ‘pushd’ uses the ‘cd’ builtin to change to the directory + at the top of the stack. If the ‘cd’ fails, ‘pushd’ returns a non-zero value. - Otherwise, if no arguments are supplied, 'pushd' returns 0 unless + Otherwise, if no arguments are supplied, ‘pushd’ returns 0 unless the directory stack is empty. When rotating the directory stack, - 'pushd' returns 0 unless the directory stack is empty or a + ‘pushd’ returns 0 unless the directory stack is empty or a non-existent directory stack element is specified. - If the 'pushd' command is successful, Bash runs 'dirs' to show the + If the ‘pushd’ command is successful, Bash runs ‘dirs’ to show the final contents of the directory stack.  @@ -6881,72 +7115,72 @@ File: bashref.info, Node: Controlling the Prompt, Next: The Restricted Shell, 6.9 Controlling the Prompt ========================== -Bash examines the value of the array variable 'PROMPT_COMMAND' just +Bash examines the value of the array variable ‘PROMPT_COMMAND’ just before printing each primary prompt. If any elements in -'PROMPT_COMMAND' are set and non-null, Bash executes each value, in +‘PROMPT_COMMAND’ are set and non-null, Bash executes each value, in numeric order, just as if it had been typed on the command line. In addition, the following table describes the special characters -which can appear in the prompt variables 'PS0', 'PS1', 'PS2', and 'PS4': +which can appear in the prompt variables ‘PS0’, ‘PS1’, ‘PS2’, and ‘PS4’: -'\a' +‘\a’ A bell character. -'\d' +‘\d’ The date, in "Weekday Month Date" format (e.g., "Tue May 26"). -'\D{FORMAT}' - The FORMAT is passed to 'strftime'(3) and the result is inserted +‘\D{FORMAT}’ + The FORMAT is passed to ‘strftime’(3) and the result is inserted into the prompt string; an empty FORMAT results in a locale-specific time representation. The braces are required. -'\e' +‘\e’ An escape character. -'\h' +‘\h’ The hostname, up to the first '.'. -'\H' +‘\H’ The hostname. -'\j' +‘\j’ The number of jobs currently managed by the shell. -'\l' +‘\l’ The basename of the shell's terminal device name. -'\n' +‘\n’ A newline. -'\r' +‘\r’ A carriage return. -'\s' - The name of the shell, the basename of '$0' (the portion following +‘\s’ + The name of the shell, the basename of ‘$0’ (the portion following the final slash). -'\t' +‘\t’ The time, in 24-hour HH:MM:SS format. -'\T' +‘\T’ The time, in 12-hour HH:MM:SS format. -'\@' +‘\@’ The time, in 12-hour am/pm format. -'\A' +‘\A’ The time, in 24-hour HH:MM format. -'\u' +‘\u’ The username of the current user. -'\v' +‘\v’ The version of Bash (e.g., 2.00) -'\V' +‘\V’ The release of Bash, version + patchlevel (e.g., 2.00.0) -'\w' - The value of the 'PWD' shell variable ('$PWD'), with '$HOME' - abbreviated with a tilde (uses the '$PROMPT_DIRTRIM' variable). -'\W' - The basename of '$PWD', with '$HOME' abbreviated with a tilde. -'\!' +‘\w’ + The value of the ‘PWD’ shell variable (‘$PWD’), with ‘$HOME’ + abbreviated with a tilde (uses the ‘$PROMPT_DIRTRIM’ variable). +‘\W’ + The basename of ‘$PWD’, with ‘$HOME’ abbreviated with a tilde. +‘\!’ The history number of this command. -'\#' +‘\#’ The command number of this command. -'\$' - If the effective uid is 0, '#', otherwise '$'. -'\NNN' +‘\$’ + If the effective uid is 0, ‘#’, otherwise ‘$’. +‘\NNN’ The character whose ASCII code is the octal value NNN. -'\\' +‘\\’ A backslash. -'\[' +‘\[’ Begin a sequence of non-printing characters. This could be used to embed a terminal control sequence into the prompt. -'\]' +‘\]’ End a sequence of non-printing characters. The command number and the history number are usually different: the @@ -6957,7 +7191,7 @@ of commands executed during the current shell session. After the string is decoded, it is expanded via parameter expansion, command substitution, arithmetic expansion, and quote removal, subject -to the value of the 'promptvars' shell option (*note The Shopt +to the value of the ‘promptvars’ shell option (*note The Shopt Builtin::). This can have unwanted side effects if escaped portions of the string appear within command substitution or contain characters special to word expansion. @@ -6968,87 +7202,134 @@ File: bashref.info, Node: The Restricted Shell, Next: Bash POSIX Mode, Prev: 6.10 The Restricted Shell ========================= -If Bash is started with the name 'rbash', or the '--restricted' or '-r' +If Bash is started with the name ‘rbash’, or the ‘--restricted’ or ‘-r’ 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. A restricted shell behaves identically to 'bash' +the standard shell. A restricted shell behaves identically to ‘bash’ with the exception that the following are disallowed or not performed: - * Changing directories with the 'cd' builtin. - * Setting or unsetting the values of the 'SHELL', 'PATH', 'HISTFILE', - 'ENV', or 'BASH_ENV' variables. - * Specifying command names containing slashes. - * Specifying a filename containing a slash as an argument to the '.' + • Changing directories with the ‘cd’ builtin. + • Setting or unsetting the values of the ‘SHELL’, ‘PATH’, ‘HISTFILE’, + ‘ENV’, or ‘BASH_ENV’ variables. + • Specifying command names containing slashes. + • Specifying a filename containing a slash as an argument to the ‘.’ builtin command. - * Specifying a filename containing a slash as an argument to the - 'history' builtin command. - * Specifying a filename containing a slash as an argument to the '-p' - option to the 'hash' builtin command. - * Importing function definitions from the shell environment at + • Specifying a filename containing a slash as an argument to the + ‘history’ builtin command. + • Specifying a filename containing a slash as an argument to the ‘-p’ + option to the ‘hash’ builtin command. + • Importing function definitions from the shell environment at startup. - * Parsing the value of 'SHELLOPTS' from the shell environment at + • Parsing the value of ‘SHELLOPTS’ from the shell environment at startup. - * Redirecting output using the '>', '>|', '<>', '>&', '&>', and '>>' + • Redirecting output using the ‘>’, ‘>|’, ‘<>’, ‘>&’, ‘&>’, and ‘>>’ redirection operators. - * Using the 'exec' builtin to replace the shell with another command. - * Adding or deleting builtin commands with the '-f' and '-d' options - to the 'enable' builtin. - * Using the 'enable' builtin command to enable disabled shell + • Using the ‘exec’ builtin to replace the shell with another command. + • Adding or deleting builtin commands with the ‘-f’ and ‘-d’ options + to the ‘enable’ builtin. + • Using the ‘enable’ builtin command to enable disabled shell builtins. - * Specifying the '-p' option to the 'command' builtin. - * Turning off restricted mode with 'set +r' or 'shopt -u - restricted_shell'. + • Specifying the ‘-p’ option to the ‘command’ builtin. + • Turning off restricted mode with ‘set +r’ or ‘shopt -u + restricted_shell’. These restrictions are enforced after any startup files are read. When a command that is found to be a shell script is executed (*note -Shell Scripts::), 'rbash' turns off any restrictions in the shell +Shell Scripts::), ‘rbash’ turns off any restrictions in the shell spawned to execute the script. The restricted shell mode is only one component of a useful -restricted environment. It should be accompanied by setting 'PATH' to a +restricted environment. It should be accompanied by setting ‘PATH’ to a value that allows execution of only a few verified commands (commands that allow shell escapes are particularly vulnerable), changing the -current directory to a non-writable directory other than '$HOME' after +current directory to a non-writable directory other than ‘$HOME’ after login, not allowing the restricted shell to execute shell scripts, and cleaning the environment of variables that cause some commands to modify -their behavior (e.g., 'VISUAL' or 'PAGER'). +their behavior (e.g., ‘VISUAL’ or ‘PAGER’). Modern systems provide more secure ways to implement a restricted -environment, such as 'jails', 'zones', or 'containers'. +environment, such as ‘jails’, ‘zones’, or ‘containers’.  File: bashref.info, Node: Bash POSIX Mode, Next: Shell Compatibility Mode, Prev: The Restricted Shell, Up: Bash Features -6.11 Bash POSIX Mode -==================== +6.11 Bash and POSIX +=================== + +6.11.1 What is POSIX? +--------------------- + +POSIX is the name for a family of standards based on Unix. A number of +Unix services, tools, and functions are part of the standard, ranging +from the basic system calls and C library functions to common +applications and tools to system administration and management. + + The POSIX Shell and Utilities standard was originally developed by +IEEE Working Group 1003.2 (POSIX.2). The first edition of the 1003.2 +standard was published in 1992. It was merged with the original IEEE +1003.1 Working Group and is currently maintained by the Austin Group (a +joint working group of the IEEE, The Open Group and ISO/IEC SC22/WG15). +Today the Shell and Utilities are a volume within the set of documents +that make up IEEE Std 1003.1-2017, and thus the former POSIX.2 (from +1992) is now part of the current unified POSIX standard. + + The Shell and Utilities volume concentrates on the command +interpreter interface and utility programs commonly executed from the +command line or by other programs. The standard is freely available on +the web at +<https://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html>. + + Bash is concerned with the aspects of the shell's behavior defined by +the POSIX Shell and Utilities volume. The shell command language has of +course been standardized, including the basic flow control and program +execution constructs, I/O redirection and pipelines, argument handling, +variable expansion, and quoting. + + The special builtins, which must be implemented as part of the shell +to provide the desired functionality, are specified as being part of the +shell; examples of these are ‘eval’ and ‘export’. Other utilities +appear in the sections of POSIX not devoted to the shell which are +commonly (and in some cases must be) implemented as builtin commands, +such as ‘read’ and ‘test’. POSIX also specifies aspects of the shell's +interactive behavior, including job control and command line editing. +Only vi-style line editing commands have been standardized; emacs +editing commands were left out due to objections. + +6.11.2 Bash POSIX Mode +---------------------- + +Although Bash is an implementation of the POSIX shell specification, +there are areas where the Bash default behavior differs from the +specification. The Bash “posix mode” changes the Bash behavior in these +areas so that it conforms to the standard more closely. -Starting Bash with the '--posix' command-line option or executing 'set --o posix' while Bash is running will cause Bash to conform more closely -to the POSIX standard by changing the behavior to match that specified -by POSIX in areas where the Bash default differs. + Starting Bash with the ‘--posix’ command-line option or executing +‘set -o posix’ while Bash is running will cause Bash to conform more +closely to the POSIX standard by changing the behavior to match that +specified by POSIX in areas where the Bash default differs. - When invoked as 'sh', Bash enters POSIX mode after reading the + When invoked as ‘sh’, Bash enters POSIX mode after reading the startup files. The following list is what's changed when 'POSIX mode' is in effect: - 1. Bash ensures that the 'POSIXLY_CORRECT' variable is set. + 1. Bash ensures that the ‘POSIXLY_CORRECT’ variable is set. 2. When a command in the hash table no longer exists, Bash will - re-search '$PATH' to find the new location. This is also available - with 'shopt -s checkhash'. + re-search ‘$PATH’ to find the new location. This is also available + with ‘shopt -s checkhash’. 3. Bash will not insert a command without the execute bit set into the command hash table, even if it returns it as a (last-ditch) result - from a '$PATH' search. + from a ‘$PATH’ search. 4. The message printed by the job control code and builtins when a job exits with a non-zero status is 'Done(status)'. 5. The message printed by the job control code and builtins when a job is stopped is 'Stopped(SIGNAME)', where SIGNAME is, for example, - 'SIGTSTP'. + ‘SIGTSTP’. 6. Alias expansion is always enabled, even in non-interactive shells. @@ -7062,19 +7343,19 @@ startup files. the command substitution is initially parsed (e.g., as part of a function definition). - 9. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number - and '!!' to '!' are enabled, and parameter expansion is performed - on the values of 'PS1' and 'PS2' regardless of the setting of the - 'promptvars' option. + 9. The POSIX ‘PS1’ and ‘PS2’ expansions of ‘!’ to the history number + and ‘!!’ to ‘!’ are enabled, and parameter expansion is performed + on the values of ‘PS1’ and ‘PS2’ regardless of the setting of the + ‘promptvars’ option. - 10. The POSIX startup files are executed ('$ENV') rather than the + 10. The POSIX startup files are executed (‘$ENV’) rather than the normal Bash files. 11. Tilde expansion is only performed on assignments preceding a command name, rather than on all assignment statements on the line. - 12. The default history file is '~/.sh_history' (this is the default - value of '$HISTFILE'). + 12. The default history file is ‘~/.sh_history’ (this is the default + value the shell assigns to ‘$HISTFILE’). 13. Redirection operators do not perform filename expansion on the word in the redirection unless the shell is interactive. @@ -7082,7 +7363,7 @@ startup files. 14. Redirection operators do not perform word splitting on the word in the redirection. - 15. Function names must be valid shell 'name's. That is, they may not + 15. Function names must be valid shell ‘name’s. That is, they may not contain characters other than letters, digits, and underscores, and may not start with a digit. Declaring a function with an invalid name causes a fatal syntax error in non-interactive shells. @@ -7090,45 +7371,62 @@ startup files. 16. Function names may not be the same as one of the POSIX special builtins. - 17. POSIX special builtins are found before shell functions during - command lookup. + 17. Even if a shell function whose name contains a slash was defined + before entering POSIX mode, the shell will not execute a function + whose name contains one or more slashes. - 18. When printing shell function definitions (e.g., by 'type'), Bash - does not print the 'function' keyword. + 18. POSIX special builtins are found before shell functions during + command lookup, including output printed by the ‘type’ and + ‘command’ builtins. - 19. Literal tildes that appear as the first character in elements of - the 'PATH' variable are not expanded as described above under *note + 19. When printing shell function definitions (e.g., by ‘type’), Bash + does not print the ‘function’ keyword. + + 20. Literal tildes that appear as the first character in elements of + the ‘PATH’ variable are not expanded as described above under *note Tilde Expansion::. - 20. The 'time' reserved word may be used by itself as a command. When + 21. The ‘time’ reserved word may be used by itself as a command. When used in this way, it displays timing statistics for the shell and - its completed children. The 'TIMEFORMAT' variable controls the + its completed children. The ‘TIMEFORMAT’ variable controls the format of the timing information. - 21. When parsing and expanding a ${...} expansion that appears within + 22. When parsing and expanding a ${...} expansion that appears within double quotes, single quotes are no longer special and cannot be used to quote a closing brace or other special character, unless the operator is one of those defined to perform pattern removal. In this case, they do not have to appear as matched pairs. - 22. The parser does not recognize 'time' as a reserved word if the - next token begins with a '-'. + 23. The parser does not recognize ‘time’ as a reserved word if the + next token begins with a ‘-’. - 23. The '!' character does not introduce history expansion within a - double-quoted string, even if the 'histexpand' option is enabled. + 24. The ‘!’ character does not introduce history expansion within a + double-quoted string, even if the ‘histexpand’ option is enabled. - 24. If a POSIX special builtin returns an error status, a + 25. If a POSIX special builtin returns an error status, a non-interactive shell exits. The fatal errors are those listed in the POSIX standard, and include things like passing incorrect options, redirection errors, variable assignment errors for assignments preceding the command name, and so on. - 25. A non-interactive shell exits with an error status if a variable + 26. The ‘unset’ builtin with the ‘-v’ option specified returns a fatal + error if it attempts to unset a ‘readonly’ or ‘non-unsettable’ + variable, or encounters a variable name argument that is an invalid + identifier, which causes a non-interactive shell to exit. + + 27. When asked to unset a variable that appears in an assignment + statement preceding the command, the ‘unset’ builtin attempts to + unset a variable of the same name in the current or previous scope + as well. This implements the required "if an assigned variable is + further modified by the utility, the modifications made by the + utility shall persist" behavior. + + 28. A non-interactive shell exits with an error status if a variable assignment error occurs when no command name follows the assignment statements. A variable assignment error occurs, for example, when trying to assign a value to a readonly variable. - 26. A non-interactive shell exits with an error status if a variable + 29. A non-interactive shell exits with an error status if a variable assignment error occurs in an assignment statement preceding a special builtin, but not with any other simple command. For any other simple command, the shell aborts execution of that command, @@ -7136,152 +7434,188 @@ startup files. perform any further processing of the command in which the error occurred"). - 27. A non-interactive shell exits with an error status if the - iteration variable in a 'for' statement or the selection variable - in a 'select' statement is a readonly variable. + 30. A non-interactive shell exits with an error status if the + iteration variable in a ‘for’ statement or the selection variable + in a ‘select’ statement is a readonly variable or has an invalid + name. - 28. Non-interactive shells exit if FILENAME in '.' FILENAME is not + 31. Non-interactive shells exit if FILENAME in ‘.’ FILENAME is not found. - 29. Non-interactive shells exit if a syntax error in an arithmetic + 32. Non-interactive shells exit if a syntax error in an arithmetic expansion results in an invalid expression. - 30. Non-interactive shells exit if a parameter expansion error occurs. + 33. Non-interactive shells exit if a parameter expansion error occurs. - 31. Non-interactive shells exit if there is a syntax error in a script - read with the '.' or 'source' builtins, or in a string processed by - the 'eval' builtin. + 34. Non-interactive shells exit if there is a syntax error in a script + read with the ‘.’ or ‘source’ builtins, or in a string processed by + the ‘eval’ builtin. - 32. While variable indirection is available, it may not be applied to - the '#' and '?' special parameters. + 35. While variable indirection is available, it may not be applied to + the ‘#’ and ‘?’ special parameters. - 33. Expanding the '*' special parameter in a pattern context where the - expansion is double-quoted does not treat the '$*' as if it were + 36. Expanding the ‘*’ special parameter in a pattern context where the + expansion is double-quoted does not treat the ‘$*’ as if it were double-quoted. - 34. Assignment statements preceding POSIX special builtins persist in + 37. Assignment statements preceding POSIX special builtins persist in the shell environment after the builtin completes. - 35. The 'command' builtin does not prevent builtins that take + 38. The ‘command’ builtin does not prevent builtins that take assignment statements as arguments from expanding them as assignment statements; when not in POSIX mode, assignment builtins lose their assignment statement expansion properties when preceded - by 'command'. + by ‘command’. - 36. The 'bg' builtin uses the required format to describe each job + 39. The ‘bg’ builtin uses the required format to describe each job placed in the background, which does not include an indication of whether the job is the current or previous job. - 37. The output of 'kill -l' prints all the signal names on a single - line, separated by spaces, without the 'SIG' prefix. + 40. The output of ‘kill -l’ prints all the signal names on a single + line, separated by spaces, without the ‘SIG’ prefix. - 38. The 'kill' builtin does not accept signal names with a 'SIG' + 41. The ‘kill’ builtin does not accept signal names with a ‘SIG’ prefix. - 39. The 'export' and 'readonly' builtin commands display their output + 42. The ‘export’ and ‘readonly’ builtin commands display their output in the format required by POSIX. - 40. The 'trap' builtin displays signal names without the leading - 'SIG'. + 43. If the ‘export’ and ‘readonly’ builtin commands get an argument + that is not a valid identifier, and they are not operating on shell + functions, they return an error. This will cause a non-interactive + shell to exit because these are special builtins. - 41. The 'trap' builtin doesn't check the first argument for a possible + 44. The ‘trap’ builtin displays signal names without the leading + ‘SIG’. + + 45. The ‘trap’ builtin doesn't check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given signal to the original disposition, they should - use '-' as the first argument. + use ‘-’ as the first argument. - 42. 'trap -p' displays signals whose dispositions are set to SIG_DFL - and those that were ignored when the shell started. + 46. ‘trap -p’ without arguments displays signals whose dispositions + are set to SIG_DFL and those that were ignored when the shell + started, not just trapped signals. - 43. The '.' and 'source' builtins do not search the current directory - for the filename argument if it is not found by searching 'PATH'. + 47. The ‘.’ and ‘source’ builtins do not search the current directory + for the filename argument if it is not found by searching ‘PATH’. - 44. Enabling POSIX mode has the effect of setting the - 'inherit_errexit' option, so subshells spawned to execute command - substitutions inherit the value of the '-e' option from the parent - shell. When the 'inherit_errexit' option is not enabled, Bash - clears the '-e' option in such subshells. + 48. Enabling POSIX mode has the effect of setting the + ‘inherit_errexit’ option, so subshells spawned to execute command + substitutions inherit the value of the ‘-e’ option from the parent + shell. When the ‘inherit_errexit’ option is not enabled, Bash + clears the ‘-e’ option in such subshells. - 45. Enabling POSIX mode has the effect of setting the 'shift_verbose' - option, so numeric arguments to 'shift' that exceed the number of + 49. Enabling POSIX mode has the effect of setting the ‘shift_verbose’ + option, so numeric arguments to ‘shift’ that exceed the number of positional parameters will result in an error message. - 46. When the 'alias' builtin displays alias definitions, it does not - display them with a leading 'alias ' unless the '-p' option is + 50. When the ‘alias’ builtin displays alias definitions, it does not + display them with a leading ‘alias ’ unless the ‘-p’ option is supplied. - 47. When the 'set' builtin is invoked without options, it does not + 51. When the ‘set’ builtin is invoked without options, it does not display shell function names and definitions. - 48. When the 'set' builtin is invoked without options, it displays + 52. When the ‘set’ builtin is invoked without options, it displays variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. - 49. When the 'cd' builtin is invoked in logical mode, and the pathname - constructed from '$PWD' and the directory name supplied as an - argument does not refer to an existing directory, 'cd' will fail + 53. When the ‘cd’ builtin is invoked in logical mode, and the pathname + constructed from ‘$PWD’ and the directory name supplied as an + argument does not refer to an existing directory, ‘cd’ will fail instead of falling back to physical mode. - 50. When the 'cd' builtin cannot change a directory because the length - of the pathname constructed from '$PWD' and the directory name - supplied as an argument exceeds 'PATH_MAX' when all symbolic links - are expanded, 'cd' will fail instead of attempting to use only the - supplied directory name. + 54. When the ‘cd’ builtin cannot change a directory because the length + of the pathname constructed from ‘$PWD’ and the directory name + supplied as an argument exceeds ‘PATH_MAX’ when canonicalized, ‘cd’ + will attempt to use the supplied directory name. - 51. The 'pwd' builtin verifies that the value it prints is the same as + 55. The ‘pwd’ builtin verifies that the value it prints is the same as the current directory, even if it is not asked to check the file - system with the '-P' option. + system with the ‘-P’ option. - 52. When listing the history, the 'fc' builtin does not include an + 56. When listing the history, the ‘fc’ builtin does not include an indication of whether or not a history entry has been modified. - 53. The default editor used by 'fc' is 'ed'. + 57. The default editor used by ‘fc’ is ‘ed’. + + 58. ‘fc’ treats extra arguments as an error instead of ignoring them. - 54. The 'type' and 'command' builtins will not report a non-executable + 59. If there are too many arguments supplied to ‘fc -s’, ‘fc’ prints + an error message and returns failure. + + 60. The ‘type’ and ‘command’ builtins will not report a non-executable file as having been found, though the shell will attempt to execute - such a file if it is the only so-named file found in '$PATH'. + such a file if it is the only so-named file found in ‘$PATH’. - 55. The 'vi' editing mode will invoke the 'vi' editor directly when - the 'v' command is run, instead of checking '$VISUAL' and - '$EDITOR'. + 61. The ‘vi’ editing mode will invoke the ‘vi’ editor directly when + the ‘v’ command is run, instead of checking ‘$VISUAL’ and + ‘$EDITOR’. - 56. When the 'xpg_echo' option is enabled, Bash does not attempt to - interpret any arguments to 'echo' as options. Each argument is + 62. When the ‘xpg_echo’ option is enabled, Bash does not attempt to + interpret any arguments to ‘echo’ as options. Each argument is displayed, after escape characters are converted. - 57. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' - and '-f' options. + 63. The ‘ulimit’ builtin uses a block size of 512 bytes for the ‘-c’ + and ‘-f’ options. - 58. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not - interrupt the 'wait' builtin and cause it to return immediately. + 64. The arrival of ‘SIGCHLD’ when a trap is set on ‘SIGCHLD’ does not + interrupt the ‘wait’ builtin and cause it to return immediately. The trap command is run once for each child that exits. - 59. The 'read' builtin may be interrupted by a signal for which a trap + 65. The ‘read’ builtin may be interrupted by a signal for which a trap has been set. If Bash receives a trapped signal while executing - 'read', the trap handler executes and 'read' returns an exit status + ‘read’, the trap handler executes and ‘read’ returns an exit status greater than 128. - 60. The 'printf' builtin uses 'double' (via 'strtod') to convert + 66. The ‘printf’ builtin uses ‘double’ (via ‘strtod’) to convert arguments corresponding to floating point conversion specifiers, - instead of 'long double' if it's available. The 'L' length - modifier forces 'printf' to use 'long double' if it's available. + instead of ‘long double’ if it's available. The ‘L’ length + modifier forces ‘printf’ to use ‘long double’ if it's available. + + 67. Bash removes an exited background process's status from the list + of such statuses after the ‘wait’ builtin is used to obtain it. + + 68. A double quote character (‘"’) is treated specially when it + appears in a backquoted command substitution in the body of a + here-document that undergoes expansion. That means, for example, + that a backslash preceding a double quote character will escape it + and the backslash will be removed. + + 69. The ‘test’ builtin compares strings using the current locale when + processing the ‘<’ and ‘>’ binary operators. + + 70. The ‘test’ builtin's ‘-t’ unary primary requires an argument. + Historical versions of ‘test’ made the argument optional in certain + cases, and Bash attempts to accommodate those for backwards + compatibility. - 61. Bash removes an exited background process's status from the list - of such statuses after the 'wait' builtin is used to obtain it. + 71. Command substitutions don't set the ‘?’ special parameter. The + exit status of a simple command without a command word is still the + exit status of the last command substitution that occurred while + evaluating the variable assignments and redirections in that + command, but that does not happen until after all of the + assignments and redirections. There is other POSIX behavior that Bash does not implement by default even when in POSIX mode. Specifically: - 1. The 'fc' builtin checks '$EDITOR' as a program to edit history - entries if 'FCEDIT' is unset, rather than defaulting directly to - 'ed'. 'fc' uses 'ed' if 'EDITOR' is unset. + 1. The ‘fc’ builtin checks ‘$EDITOR’ as a program to edit history + entries if ‘FCEDIT’ is unset, rather than defaulting directly to + ‘ed’. ‘fc’ uses ‘ed’ if ‘EDITOR’ is unset. - 2. As noted above, Bash requires the 'xpg_echo' option to be enabled - for the 'echo' builtin to be fully conformant. + 2. A non-interactive shell does not exit if a variable assignment + preceding the ‘command’ builtin or another non-special builtin + fails. + + 3. As noted above, Bash requires the ‘xpg_echo’ option to be enabled + for the ‘echo’ builtin to be fully conformant. Bash can be configured to be POSIX-conformant by default, by -specifying the '--enable-strict-posix-default' to 'configure' when +specifying the ‘--enable-strict-posix-default’ to ‘configure’ when building (*note Optional Features::).  @@ -7290,9 +7624,9 @@ File: bashref.info, Node: Shell Compatibility Mode, Prev: Bash POSIX Mode, Up 6.12 Shell Compatibility Mode ============================= -Bash-4.0 introduced the concept of a "shell compatibility level", -specified as a set of options to the shopt builtin ('compat31', -'compat32', 'compat40', 'compat41', and so on). There is only one +Bash-4.0 introduced the concept of a “shell compatibility level”, +specified as a set of options to the shopt builtin (‘compat31’, +‘compat32’, ‘compat40’, ‘compat41’, and so on). There is only one current compatibility level - each option is mutually exclusive. The compatibility level is intended to allow users to select behavior from previous versions that is incompatible with newer versions while they @@ -7300,152 +7634,150 @@ migrate scripts to use current features and behavior. It's intended to be a temporary solution. This section does not mention behavior that is standard for a -particular version (e.g., setting 'compat32' means that quoting the rhs +particular version (e.g., setting ‘compat32’ means that quoting the rhs of the regexp matching operator quotes special regexp characters in the word, which is default behavior in bash-3.2 and subsequent versions). - If a user enables, say, 'compat32', it may affect the behavior of + If a user enables, say, ‘compat32’, it may affect the behavior of other compatibility levels up to and including the current compatibility level. The idea is that each compatibility level controls behavior that changed in that version of Bash, but that behavior may have been present in earlier versions. For instance, the change to use locale-based -comparisons with the '[[' command came in bash-4.1, and earlier versions -used ASCII-based comparisons, so enabling 'compat32' will enable +comparisons with the ‘[[’ command came in bash-4.1, and earlier versions +used ASCII-based comparisons, so enabling ‘compat32’ will enable ASCII-based comparisons as well. That granularity may not be sufficient for all uses, and as a result users should employ compatibility levels carefully. Read the documentation for a particular feature to find out the current behavior. - Bash-4.3 introduced a new shell variable: 'BASH_COMPAT'. The value + Bash-4.3 introduced a new shell variable: ‘BASH_COMPAT’. The value assigned to this variable (a decimal version number like 4.2, or an -integer corresponding to the 'compat'NN option, like 42) determines the +integer corresponding to the ‘compat’NN option, like 42) determines the compatibility level. Starting with bash-4.4, Bash has begun deprecating older compatibility levels. Eventually, the options will be removed in favor -of 'BASH_COMPAT'. +of ‘BASH_COMPAT’. - Bash-5.0 is the final version for which there will be an individual -shopt option for the previous version. Users should use 'BASH_COMPAT' -on bash-5.0 and later versions. + Bash-5.0 was the final version for which there will be an individual +shopt option for the previous version. Users should control the +compatibility level with ‘BASH_COMPAT’. The following table describes the behavior changes controlled by each -compatibility level setting. The 'compat'NN tag is used as shorthand +compatibility level setting. The ‘compat’NN tag is used as shorthand for setting the compatibility level to NN using one of the following mechanisms. For versions prior to bash-5.0, the compatibility level may -be set using the corresponding 'compat'NN shopt option. For bash-4.3 -and later versions, the 'BASH_COMPAT' variable is preferred, and it is +be set using the corresponding ‘compat’NN shopt option. For bash-4.3 +and later versions, the ‘BASH_COMPAT’ variable is preferred, and it is required for bash-5.1 and later versions. -'compat31' - * quoting the rhs of the '[[' command's regexp matching operator +‘compat31’ + • quoting the rhs of the ‘[[’ command's regexp matching operator (=~) has no special effect -'compat32' - * interrupting a command list such as "a ; b ; c" causes the - execution of the next command in the list (in bash-4.0 and - later versions, the shell acts as if it received the - interrupt, so interrupting one command in a list aborts the - execution of the entire list) - -'compat40' - * the '<' and '>' operators to the '[[' command do not consider +‘compat40’ + • the ‘<’ and ‘>’ operators to the ‘[[’ command do not consider the current locale when comparing strings; they use ASCII ordering. Bash versions prior to bash-4.1 use ASCII collation and strcmp(3); bash-4.1 and later use the current locale's collation sequence and strcoll(3). -'compat41' - * in posix mode, 'time' may be followed by options and still be +‘compat41’ + • in posix mode, ‘time’ may be followed by options and still be recognized as a reserved word (this is POSIX interpretation 267) - * in posix mode, the parser requires that an even number of + • in posix mode, the parser requires that an even number of single quotes occur in the WORD portion of a double-quoted ${...} parameter expansion and treats them specially, so that characters within the single quotes are considered quoted (this is POSIX interpretation 221) -'compat42' - * the replacement string in double-quoted pattern substitution +‘compat42’ + • the replacement string in double-quoted pattern substitution does not undergo quote removal, as it does in versions after bash-4.2 - * in posix mode, single quotes are considered special when + • in posix mode, single quotes are considered special when expanding the WORD portion of a double-quoted ${...} parameter expansion and can be used to quote a closing brace or other special character (this is part of POSIX interpretation 221); in later versions, single quotes are not special within double-quoted word expansions -'compat43' - * the shell does not print a warning message if an attempt is +‘compat43’ + • the shell does not print a warning message if an attempt is made to use a quoted compound assignment as an argument to declare (e.g., declare -a foo='(1 2)'). Later versions warn that this usage is deprecated - * word expansion errors are considered non-fatal errors that + • word expansion errors are considered non-fatal errors that cause the current command to fail, even in posix mode (the default behavior is to make them fatal errors that cause the shell to exit) - * when executing a shell function, the loop state - (while/until/etc.) is not reset, so 'break' or 'continue' in + • when executing a shell function, the loop state + (while/until/etc.) is not reset, so ‘break’ or ‘continue’ in that function will break or continue loops in the calling context. Bash-4.4 and later reset the loop state to prevent this -'compat44' - * the shell sets up the values used by 'BASH_ARGV' and - 'BASH_ARGC' so they can expand to the shell's positional +‘compat44’ + • the shell sets up the values used by ‘BASH_ARGV’ and + ‘BASH_ARGC’ so they can expand to the shell's positional parameters even if extended debugging mode is not enabled - * a subshell inherits loops from its parent context, so 'break' - or 'continue' will cause the subshell to exit. Bash-5.0 and + • a subshell inherits loops from its parent context, so ‘break’ + or ‘continue’ will cause the subshell to exit. Bash-5.0 and later reset the loop state to prevent the exit - * variable assignments preceding builtins like 'export' and - 'readonly' that set attributes continue to affect variables + • variable assignments preceding builtins like ‘export’ and + ‘readonly’ that set attributes continue to affect variables with the same name in the calling environment even if the shell is not in posix mode -'compat50 (set using BASH_COMPAT)' - * Bash-5.1 changed the way '$RANDOM' is generated to introduce +‘compat50 (set using BASH_COMPAT)’ + • Bash-5.1 changed the way ‘$RANDOM’ is generated to introduce slightly more randomness. If the shell compatibility level is set to 50 or lower, it reverts to the method from bash-5.0 and previous versions, so seeding the random number generator by - assigning a value to 'RANDOM' will produce the same sequence + assigning a value to ‘RANDOM’ will produce the same sequence as in bash-5.0 - * If the command hash table is empty, Bash versions prior to + • If the command hash table is empty, Bash versions prior to bash-5.1 printed an informational message to that effect, even when producing output that can be reused as input. Bash-5.1 - suppresses that message when the '-l' option is supplied. + suppresses that message when the ‘-l’ option is supplied. -'compat51 (set using BASH_COMPAT)' - * The 'unset' builtin will unset the array 'a' given an argument - like 'a[@]'. Bash-5.2 will unset an element with key '@' +‘compat51 (set using BASH_COMPAT)’ + • The ‘unset’ builtin will unset the array ‘a’ given an argument + like ‘a[@]’. Bash-5.2 will unset an element with key ‘@’ (associative arrays) or remove all the elements without unsetting the array (indexed arrays) - * arithmetic commands ( ((...)) ) and the expressions in an + • arithmetic commands ( ((...)) ) and the expressions in an arithmetic for statement can be expanded more than once - * expressions used as arguments to arithmetic operators in the - '[[' conditional command can be expanded more than once - * the expressions in substring parameter brace expansion can be + • expressions used as arguments to arithmetic operators in the + ‘[[’ conditional command can be expanded more than once + • the expressions in substring parameter brace expansion can be expanded more than once - * the expressions in the $(( ... )) word expansion can be + • the expressions in the $(( ... )) word expansion can be expanded more than once - * arithmetic expressions used as indexed array subscripts can be + • arithmetic expressions used as indexed array subscripts can be expanded more than once - * 'test -v', when given an argument of 'A[@]', where A is an + • ‘test -v’, when given an argument of ‘A[@]’, where A is an existing associative array, will return true if the array has any set elements. Bash-5.2 will look for and report on a key - named '@' - * the ${PARAMETER[:]=VALUE} word expansion will return VALUE, + named ‘@’ + • the ${PARAMETER[:]=VALUE} word expansion will return VALUE, before any variable-specific transformations have been performed (e.g., converting to lowercase). Bash-5.2 will return the final value assigned to the variable. - * Parsing command substitutions will behave as if extended glob - (*note The Shopt Builtin::) is enabled, so that parsing a - command substitution containing an extglob pattern (say, as - part of a shell function) will not fail. This assumes the - intent is to enable extglob before the command is executed and - word expansions are performed. It will fail at word expansion - time if extglob hasn't been enabled by the time the command is - executed. + • Parsing command substitutions will behave as if extended + globbing (*note The Shopt Builtin::) is enabled, so that + parsing a command substitution containing an extglob pattern + (say, as part of a shell function) will not fail. This + assumes the intent is to enable extglob before the command is + executed and word expansions are performed. It will fail at + word expansion time if extglob hasn't been enabled by the time + the command is executed. + +‘compat52 (set using BASH_COMPAT)’ + • The ‘test’ builtin uses its historical algorithm to parse + parenthesized subexpressions when given five or more + arguments.  File: bashref.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top @@ -7477,7 +7809,7 @@ interface supplied jointly by the operating system kernel's terminal driver and Bash. The shell associates a JOB with each pipeline. It keeps a table of -currently executing jobs, which may be listed with the 'jobs' command. +currently executing jobs, which may be listed with the ‘jobs’ command. When Bash starts a job asynchronously, it prints a line that looks like: [1] 25647 indicating that this job is job number 1 and that the process ID of the @@ -7489,71 +7821,71 @@ uses the JOB abstraction as the basis for job control. control, the operating system maintains the notion of a current terminal process group ID. Members of this process group (processes whose process group ID is equal to the current terminal process group ID) -receive keyboard-generated signals such as 'SIGINT'. These processes +receive keyboard-generated signals such as ‘SIGINT’. These processes are said to be in the foreground. Background processes are those whose process group ID differs from the terminal's; such processes are immune to keyboard-generated signals. Only foreground processes are allowed to -read from or, if the user so specifies with 'stty tostop', write to the +read from or, if the user so specifies with ‘stty tostop’, write to the terminal. Background processes which attempt to read from (write to -when 'stty tostop' is in effect) the terminal are sent a 'SIGTTIN' -('SIGTTOU') signal by the kernel's terminal driver, which, unless +when ‘tostop’ is in effect) the terminal are sent a ‘SIGTTIN’ +(‘SIGTTOU’) signal by the kernel's terminal driver, which, unless caught, suspends the process. If the operating system on which Bash is running supports job -control, Bash contains facilities to use it. Typing the "suspend" -character (typically '^Z', Control-Z) while a process is running causes +control, Bash contains facilities to use it. Typing the “suspend” +character (typically ‘^Z’, Control-Z) while a process is running causes that process to be stopped and returns control to Bash. Typing the -"delayed suspend" character (typically '^Y', Control-Y) causes the +“delayed suspend” character (typically ‘^Y’, Control-Y) causes the process to be stopped when it attempts to read input from the terminal, and control to be returned to Bash. The user then manipulates the state -of this job, using the 'bg' command to continue it in the background, -the 'fg' command to continue it in the foreground, or the 'kill' command -to kill it. A '^Z' takes effect immediately, and has the additional +of this job, using the ‘bg’ command to continue it in the background, +the ‘fg’ command to continue it in the foreground, or the ‘kill’ command +to kill it. A ‘^Z’ takes effect immediately, and has the additional side effect of causing pending output and typeahead to be discarded. There are a number of ways to refer to a job in the shell. The -character '%' introduces a job specification ("jobspec"). +character ‘%’ introduces a job specification (“jobspec”). - Job number 'n' may be referred to as '%n'. The symbols '%%' and '%+' + Job number ‘n’ may be referred to as ‘%n’. The symbols ‘%%’ and ‘%+’ refer to the shell's notion of the current job, which is the last job stopped while it was in the foreground or started in the background. A -single '%' (with no accompanying job specification) also refers to the -current job. The previous job may be referenced using '%-'. If there -is only a single job, '%+' and '%-' can both be used to refer to that -job. In output pertaining to jobs (e.g., the output of the 'jobs' -command), the current job is always flagged with a '+', and the previous -job with a '-'. +single ‘%’ (with no accompanying job specification) also refers to the +current job. The previous job may be referenced using ‘%-’. If there +is only a single job, ‘%+’ and ‘%-’ can both be used to refer to that +job. In output pertaining to jobs (e.g., the output of the ‘jobs’ +command), the current job is always flagged with a ‘+’, and the previous +job with a ‘-’. A job may also be referred to using a prefix of the name used to start it, or using a substring that appears in its command line. For -example, '%ce' refers to a stopped job whose command name begins with -'ce'. Using '%?ce', on the other hand, refers to any job containing the -string 'ce' in its command line. If the prefix or substring matches +example, ‘%ce’ refers to a stopped job whose command name begins with +‘ce’. Using ‘%?ce’, on the other hand, refers to any job containing the +string ‘ce’ in its command line. If the prefix or substring matches more than one job, Bash reports an error. - Simply naming a job can be used to bring it into the foreground: '%1' -is a synonym for 'fg %1', bringing job 1 from the background into the -foreground. Similarly, '%1 &' resumes job 1 in the background, -equivalent to 'bg %1' + Simply naming a job can be used to bring it into the foreground: ‘%1’ +is a synonym for ‘fg %1’, bringing job 1 from the background into the +foreground. Similarly, ‘%1 &’ resumes job 1 in the background, +equivalent to ‘bg %1’ The shell learns immediately whenever a job changes state. Normally, Bash waits until it is about to print a prompt before reporting changes -in a job's status so as to not interrupt any other output. If the '-b' -option to the 'set' builtin is enabled, Bash reports such changes -immediately (*note The Set Builtin::). Any trap on 'SIGCHLD' is +in a job's status so as to not interrupt any other output. If the ‘-b’ +option to the ‘set’ builtin is enabled, Bash reports such changes +immediately (*note The Set Builtin::). Any trap on ‘SIGCHLD’ is executed for each child process that exits. If an attempt to exit Bash is made while jobs are stopped, (or -running, if the 'checkjobs' option is enabled - see *note The Shopt -Builtin::), the shell prints a warning message, and if the 'checkjobs' -option is enabled, lists the jobs and their statuses. The 'jobs' +running, if the ‘checkjobs’ option is enabled - see *note The Shopt +Builtin::), the shell prints a warning message, and if the ‘checkjobs’ +option is enabled, lists the jobs and their statuses. The ‘jobs’ command may then be used to inspect their status. If a second attempt to exit is made without an intervening command, Bash does not print another warning, and any stopped jobs are terminated. - When the shell is waiting for a job or process using the 'wait' -builtin, and job control is enabled, 'wait' will return when the job -changes state. The '-f' option causes 'wait' to wait until the job or + When the shell is waiting for a job or process using the ‘wait’ +builtin, and job control is enabled, ‘wait’ will return when the job +changes state. The ‘-f’ option causes ‘wait’ to wait until the job or process terminates before returning.  @@ -7562,17 +7894,17 @@ File: bashref.info, Node: Job Control Builtins, Next: Job Control Variables, 7.2 Job Control Builtins ======================== -'bg' +‘bg’ bg [JOBSPEC ...] Resume each suspended job JOBSPEC in the background, as if it had - been started with '&'. If JOBSPEC is not supplied, the current job + been started with ‘&’. If JOBSPEC is not supplied, the current job is used. The return status is zero unless it is run when job control is not enabled, or, when run with job control enabled, any JOBSPEC was not found or specifies a job that was started without job control. -'fg' +‘fg’ fg [JOBSPEC] Resume the job JOBSPEC in the foreground and make it the current @@ -7582,106 +7914,106 @@ File: bashref.info, Node: Job Control Builtins, Next: Job Control Variables, control enabled, JOBSPEC does not specify a valid job or JOBSPEC specifies a job that was started without job control. -'jobs' +‘jobs’ jobs [-lnprs] [JOBSPEC] jobs -x COMMAND [ARGUMENTS] The first form lists the active jobs. The options have the following meanings: - '-l' + ‘-l’ List process IDs in addition to the normal information. - '-n' + ‘-n’ Display information only about jobs that have changed status since the user was last notified of their status. - '-p' + ‘-p’ List only the process ID of the job's process group leader. - '-r' + ‘-r’ Display only running jobs. - '-s' + ‘-s’ Display only stopped jobs. If JOBSPEC is given, output is restricted to information about that job. If JOBSPEC is not supplied, the status of all jobs is listed. - If the '-x' option is supplied, 'jobs' replaces any JOBSPEC found + If the ‘-x’ option is supplied, ‘jobs’ replaces any JOBSPEC found in COMMAND or ARGUMENTS with the corresponding process group ID, and executes COMMAND, passing it ARGUMENTs, returning its exit status. -'kill' +‘kill’ kill [-s SIGSPEC] [-n SIGNUM] [-SIGSPEC] JOBSPEC or PID kill -l|-L [EXIT_STATUS] Send a signal specified by SIGSPEC or SIGNUM to the process named by job specification JOBSPEC or process ID PID. SIGSPEC is either - a case-insensitive signal name such as 'SIGINT' (with or without - the 'SIG' prefix) or a signal number; SIGNUM is a signal number. - If SIGSPEC and SIGNUM are not present, 'SIGTERM' is used. The '-l' + a case-insensitive signal name such as ‘SIGINT’ (with or without + the ‘SIG’ prefix) or a signal number; SIGNUM is a signal number. + If SIGSPEC and SIGNUM are not present, ‘SIGTERM’ is used. The ‘-l’ option lists the signal names. If any arguments are supplied when - '-l' is given, the names of the signals corresponding to the + ‘-l’ is given, the names of the signals corresponding to the arguments are listed, and the return status is zero. EXIT_STATUS is a number specifying a signal number or the exit status of a - process terminated by a signal. The '-L' option is equivalent to - '-l'. The return status is zero if at least one signal was + process terminated by a signal. The ‘-L’ option is equivalent to + ‘-l’. The return status is zero if at least one signal was successfully sent, or non-zero if an error occurs or an invalid option is encountered. -'wait' +‘wait’ wait [-fn] [-p VARNAME] [JOBSPEC or PID ...] Wait until the child process specified by each process ID PID or job specification JOBSPEC exits and return the exit status of the last command waited for. If a job spec is given, all processes in - the job are waited for. If no arguments are given, 'wait' waits + the job are waited for. If no arguments are given, ‘wait’ waits for all running background jobs and the last-executed process substitution, if its process id is the same as $!, and the return - status is zero. If the '-n' option is supplied, 'wait' waits for a + status is zero. If the ‘-n’ option is supplied, ‘wait’ waits for a single job from the list of PIDs or JOBSPECs or, if no arguments are supplied, any job, to complete and returns its exit status. If none of the supplied arguments is a child of the shell, or if no arguments are supplied and the shell has no unwaited-for children, - the exit status is 127. If the '-p' option is supplied, the + the exit status is 127. If the ‘-p’ option is supplied, the process or job identifier of the job for which the exit status is returned is assigned to the variable VARNAME named by the option argument. The variable will be unset initially, before any - assignment. This is useful only when the '-n' option is supplied. - Supplying the '-f' option, when job control is enabled, forces - 'wait' to wait for each PID or JOBSPEC to terminate before + assignment. This is useful only when the ‘-n’ option is supplied. + Supplying the ‘-f’ option, when job control is enabled, forces + ‘wait’ to wait for each PID or JOBSPEC to terminate before returning its status, instead of returning when it changes status. If neither JOBSPEC nor PID specifies an active child process of the - shell, the return status is 127. If 'wait' is interrupted by a + shell, the return status is 127. If ‘wait’ is interrupted by a signal, the return status will be greater than 128, as described above (*note Signals::). Otherwise, the return status is the exit status of the last process or job waited for. -'disown' +‘disown’ disown [-ar] [-h] [JOBSPEC ... | PID ... ] Without options, remove each JOBSPEC from the table of active jobs. - If the '-h' option is given, the job is not removed from the table, - but is marked so that 'SIGHUP' is not sent to the job if the shell - receives a 'SIGHUP'. If JOBSPEC is not present, and neither the - '-a' nor the '-r' option is supplied, the current job is used. If - no JOBSPEC is supplied, the '-a' option means to remove or mark all - jobs; the '-r' option without a JOBSPEC argument restricts + If the ‘-h’ option is given, the job is not removed from the table, + but is marked so that ‘SIGHUP’ is not sent to the job if the shell + receives a ‘SIGHUP’. If JOBSPEC is not present, and neither the + ‘-a’ nor the ‘-r’ option is supplied, the current job is used. If + no JOBSPEC is supplied, the ‘-a’ option means to remove or mark all + jobs; the ‘-r’ option without a JOBSPEC argument restricts operation to running jobs. -'suspend' +‘suspend’ suspend [-f] - Suspend the execution of this shell until it receives a 'SIGCONT' + Suspend the execution of this shell until it receives a ‘SIGCONT’ signal. A login shell, or a shell without job control enabled, - cannot be suspended; the '-f' option can be used to override this + cannot be suspended; the ‘-f’ option can be used to override this and force the suspension. The return status is 0 unless the shell - is a login shell or job control is not enabled and '-f' is not + is a login shell or job control is not enabled and ‘-f’ is not supplied. - When job control is not active, the 'kill' and 'wait' builtins do not + When job control is not active, the ‘kill’ and ‘wait’ builtins do not accept JOBSPEC arguments. They must be supplied process IDs.  @@ -7690,7 +8022,7 @@ File: bashref.info, Node: Job Control Variables, Prev: Job Control Builtins, 7.3 Job Control Variables ========================= -'auto_resume' +‘auto_resume’ This variable controls how the shell interacts with the user and job control. If this variable exists then single word simple commands without redirections are treated as candidates for @@ -7698,14 +8030,14 @@ File: bashref.info, Node: Job Control Variables, Prev: Job Control Builtins, there is more than one job beginning with the string typed, then the most recently accessed job will be selected. The name of a stopped job, in this context, is the command line used to start it. - If this variable is set to the value 'exact', the string supplied + If this variable is set to the value ‘exact’, the string supplied must match the name of a stopped job exactly; if set to - 'substring', the string supplied needs to match a substring of the - name of a stopped job. The 'substring' value provides - functionality analogous to the '%?' job ID (*note Job Control + ‘substring’, the string supplied needs to match a substring of the + name of a stopped job. The ‘substring’ value provides + functionality analogous to the ‘%?’ job ID (*note Job Control Basics::). 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 '%' job ID. + analogous to the ‘%’ job ID.  File: bashref.info, Node: Command Line Editing, Next: Using History Interactively, Prev: Job Control, Up: Top @@ -7717,14 +8049,14 @@ This chapter describes the basic features of the GNU command line editing interface. Command line editing is provided by the Readline library, which is used by several different programs, including Bash. Command line editing is enabled by default when using an interactive -shell, unless the '--noediting' option is supplied at shell invocation. -Line editing is also used when using the '-e' option to the 'read' +shell, unless the ‘--noediting’ option is supplied at shell invocation. +Line editing is also used when using the ‘-e’ option to the ‘read’ builtin command (*note Bash Builtins::). By default, the line editing commands are similar to those of Emacs. A vi-style line editing interface is also available. Line editing can be enabled at any time -using the '-o emacs' or '-o vi' options to the 'set' builtin command -(*note The Set Builtin::), or disabled using the '+o emacs' or '+o vi' -options to 'set'. +using the ‘-o emacs’ or ‘-o vi’ options to the ‘set’ builtin command +(*note The Set Builtin::), or disabled using the ‘+o emacs’ or ‘+o vi’ +options to ‘set’. * Menu: @@ -7751,10 +8083,10 @@ File: bashref.info, Node: Introduction and Notation, Next: Readline Interactio The following paragraphs describe the notation used to represent keystrokes. - The text 'C-k' is read as 'Control-K' and describes the character + The text ‘C-k’ is read as 'Control-K' and describes the character produced when the <k> key is pressed while the Control key is depressed. - The text 'M-k' is read as 'Meta-K' and describes the character + The text ‘M-k’ is read as 'Meta-K' and describes the character produced when the Meta key (if you have one) is depressed, and the <k> key is pressed. The Meta key is labeled <ALT> on many keyboards. On keyboards with two keys labeled <ALT> (usually to either side of the @@ -7765,11 +8097,11 @@ Compose key for typing accented characters. If you do not have a Meta or <ALT> key, or another key working as a Meta key, the identical keystroke can be generated by typing <ESC> -_first_, and then typing <k>. Either process is known as "metafying" +_first_, and then typing <k>. Either process is known as “metafying” the <k> key. - The text 'M-C-k' is read as 'Meta-Control-k' and describes the -character produced by "metafying" 'C-k'. + The text ‘M-C-k’ is read as 'Meta-Control-k' and describes the +character produced by “metafying” ‘C-k’. In addition, several keys have their own names. Specifically, <DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves when seen @@ -7816,8 +8148,8 @@ character to back up and delete the mistyped character. Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type -'C-b' to move the cursor to the left, and then correct your mistake. -Afterwards, you can move the cursor to the right with 'C-f'. +‘C-b’ to move the cursor to the left, and then correct your mistake. +Afterwards, you can move the cursor to the right with ‘C-f’. When you add text in the middle of a line, you will notice that characters to the right of the cursor are 'pushed over' to make room for @@ -7826,23 +8158,23 @@ the cursor, characters to the right of the cursor are 'pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows. -'C-b' +‘C-b’ Move back one character. -'C-f' +‘C-f’ Move forward one character. <DEL> or <Backspace> Delete the character to the left of the cursor. -'C-d' +‘C-d’ Delete the character underneath the cursor. Printing characters Insert the character into the line at the cursor. -'C-_' or 'C-x C-u' +‘C-_’ or ‘C-x C-u’ Undo the last editing command. You can undo all the way back to an empty line. (Depending on your configuration, the <Backspace> key might be set to delete the character to the left of the cursor and the <DEL> key set to -delete the character underneath the cursor, like 'C-d', rather than the +delete the character underneath the cursor, like ‘C-d’, rather than the character to the left of the cursor.)  @@ -7853,22 +8185,22 @@ File: bashref.info, Node: Readline Movement Commands, Next: Readline Killing C The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other -commands have been added in addition to 'C-b', 'C-f', 'C-d', and <DEL>. +commands have been added in addition to ‘C-b’, ‘C-f’, ‘C-d’, and <DEL>. Here are some commands for moving more rapidly about the line. -'C-a' +‘C-a’ Move to the start of the line. -'C-e' +‘C-e’ Move to the end of the line. -'M-f' +‘M-f’ Move forward a word, where a word is composed of letters and digits. -'M-b' +‘M-b’ Move backward a word. -'C-l' +‘C-l’ Clear the screen, reprinting the current line at the top. - Notice how 'C-f' moves forward a character, while 'M-f' moves forward + Notice how ‘C-f’ moves forward a character, while ‘M-f’ moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words. @@ -7878,15 +8210,15 @@ File: bashref.info, Node: Readline Killing Commands, Next: Readline Arguments, 8.2.3 Readline Killing Commands ------------------------------- -"Killing" text means to delete the text from the line, but to save it -away for later use, usually by "yanking" (re-inserting) it back into the +“Killing” text means to delete the text from the line, but to save it +away for later use, usually by “yanking” (re-inserting) it back into the line. ('Cut' and 'paste' are more recent jargon for 'kill' and 'yank'.) If the description for a command says that it 'kills' text, then you can be sure that you can get the text back in a different (or the same) place later. - When you use a kill command, the text is saved in a "kill-ring". Any + When you use a kill command, the text is saved in a “kill-ring”. Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is @@ -7894,34 +8226,34 @@ available to be yanked back later, when you are typing another line. Here is the list of commands for killing text. -'C-k' +‘C-k’ Kill the text from the current cursor position to the end of the line. -'M-d' +‘M-d’ Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. Word boundaries are the same - as those used by 'M-f'. + as those used by ‘M-f’. -'M-<DEL>' +‘M-<DEL>’ Kill from the cursor to the start of the current word, or, if between words, to the start of the previous word. Word boundaries - are the same as those used by 'M-b'. + are the same as those used by ‘M-b’. -'C-w' +‘C-w’ Kill from the cursor to the previous whitespace. This is different - than 'M-<DEL>' because the word boundaries differ. + than ‘M-<DEL>’ because the word boundaries differ. - Here is how to "yank" the text back into the line. Yanking means to + Here is how to “yank” the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer. -'C-y' +‘C-y’ Yank the most recently killed text back into the buffer at the cursor. -'M-y' +‘M-y’ Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is 'C-y' or 'M-y'. + if the prior command is ‘C-y’ or ‘M-y’.  File: bashref.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction @@ -7934,14 +8266,14 @@ argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the -start of the line, you might type 'M-- C-k'. +start of the line, you might type ‘M-- C-k’. The general way to pass numeric arguments to a command is to type meta digits before the command. If the first 'digit' typed is a minus -sign ('-'), then the sign of the argument will be negative. Once you +sign (‘-’), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the -'C-d' command an argument of 10, you could type 'M-1 0 C-d', which will +‘C-d’ command an argument of 10, you could type ‘M-1 0 C-d’, which will delete the next ten characters on the input line.  @@ -7952,25 +8284,25 @@ File: bashref.info, Node: Searching, Prev: Readline Arguments, Up: Readline I Readline provides commands for searching through the command history (*note Bash History Facilities::) for lines containing a specified -string. There are two search modes: "incremental" and -"non-incremental". +string. There are two search modes: “incremental” and +“non-incremental”. Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the -history for a particular string, type 'C-r'. Typing 'C-s' searches +history for a particular string, type ‘C-r’. Typing ‘C-s’ searches forward through the history. The characters present in the value of the -'isearch-terminators' variable are used to terminate an incremental +‘isearch-terminators’ variable are used to terminate an incremental search. If that variable has not been assigned a value, the <ESC> and -'C-J' characters will terminate an incremental search. 'C-g' will abort +‘C-J’ characters will terminate an incremental search. ‘C-g’ will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. - To find other matching entries in the history list, type 'C-r' or -'C-s' as appropriate. This will search backward or forward in the + To find other matching entries in the history list, type ‘C-r’ or +‘C-s’ as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a <RET> will terminate the @@ -7978,9 +8310,9 @@ search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. - Readline remembers the last incremental search string. If two 'C-r's + Readline remembers the last incremental search string. If two ‘C-r’s are typed without any intervening characters defining a new search -string, any remembered search string is used. +string, Readline uses any remembered search string. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be @@ -7995,18 +8327,18 @@ File: bashref.info, Node: Readline Init File, Next: Bindable Readline Commands Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by -putting commands in an "inputrc" file, conventionally in their home +putting commands in an “inputrc” file, conventionally in their home directory. The name of this file is taken from the value of the shell -variable 'INPUTRC'. If that variable is unset, the default is -'~/.inputrc'. If that file does not exist or cannot be read, the -ultimate default is '/etc/inputrc'. The 'bind' builtin command can also +variable ‘INPUTRC’. If that variable is unset, the default is +‘~/.inputrc’. If that file does not exist or cannot be read, the +ultimate default is ‘/etc/inputrc’. The ‘bind’ builtin command can also be used to set Readline keybindings and variables. *Note Bash Builtins::. When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. - In addition, the 'C-x C-r' command re-reads this init file, thus + In addition, the ‘C-x C-r’ command re-reads this init file, thus incorporating any changes that you might have made to it. * Menu: @@ -8024,20 +8356,20 @@ File: bashref.info, Node: Readline Init File Syntax, Next: Conditional Init Co ------------------------------- There are only a few basic constructs allowed in the Readline init file. -Blank lines are ignored. Lines beginning with a '#' are comments. -Lines beginning with a '$' indicate conditional constructs (*note +Blank lines are ignored. Lines beginning with a ‘#’ are comments. +Lines beginning with a ‘$’ indicate conditional constructs (*note Conditional Init Constructs::). Other lines denote variable settings and key bindings. Variable Settings You can modify the run-time behavior of Readline by altering the - values of variables in Readline using the 'set' command within the + values of variables in Readline using the ‘set’ command within the init file. The syntax is simple: set VARIABLE VALUE Here, for example, is how to change from the default Emacs-like key - binding to use 'vi' line editing commands: + binding to use ‘vi’ line editing commands: set editing-mode vi @@ -8048,16 +8380,16 @@ Variable Settings on if the value is null or empty, ON (case-insensitive), or 1. Any other value results in the variable being set to off. - The 'bind -V' command lists the current Readline variable names and + The ‘bind -V’ command lists the current Readline variable names and values. *Note Bash Builtins::. A great deal of run-time behavior is changeable with the following variables. - 'active-region-start-color' + ‘active-region-start-color’ A string variable that controls the text color and background when displaying the text in the active region (see the - description of 'enable-active-region' below). This string + description of ‘enable-active-region’ below). This string must not take up any physical character positions on the display, so it should consist only of terminal escape sequences. It is output to the terminal before displaying the @@ -8065,11 +8397,11 @@ Variable Settings default value whenever the terminal type changes. The default value is the string that puts the terminal in standout mode, as obtained from the terminal's terminfo description. A - sample value might be '\e[01;33m'. + sample value might be ‘\e[01;33m’. - 'active-region-end-color' + ‘active-region-end-color’ A string variable that "undoes" the effects of - 'active-region-start-color' and restores "normal" terminal + ‘active-region-start-color’ and restores "normal" terminal display appearance after displaying text in the active region. This string must not take up any physical character positions on the display, so it should consist only of terminal escape @@ -8078,72 +8410,75 @@ Variable Settings default value whenever the terminal type changes. The default value is the string that restores the terminal from standout mode, as obtained from the terminal's terminfo description. A - sample value might be '\e[0m'. + sample value might be ‘\e[0m’. - 'bell-style' + ‘bell-style’ Controls what happens when Readline wants to ring the terminal - bell. If set to 'none', Readline never rings the bell. If - set to 'visible', Readline uses a visible bell if one is - available. If set to 'audible' (the default), Readline + bell. If set to ‘none’, Readline never rings the bell. If + set to ‘visible’, Readline uses a visible bell if one is + available. If set to ‘audible’ (the default), Readline attempts to ring the terminal's bell. - 'bind-tty-special-chars' - If set to 'on' (the default), Readline attempts to bind the - control characters treated specially by the kernel's terminal - driver to their Readline equivalents. + ‘bind-tty-special-chars’ + If set to ‘on’ (the default), Readline attempts to bind the + control characters that are treated specially by the kernel's + terminal driver to their Readline equivalents. These override + the default Readline bindings described here. Type ‘stty -a’ + at a Bash prompt to see your current terminal settings, + including the special control characters (usually ‘cchars’). - 'blink-matching-paren' - If set to 'on', Readline attempts to briefly move the cursor + ‘blink-matching-paren’ + If set to ‘on’, Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is - inserted. The default is 'off'. + inserted. The default is ‘off’. - 'colored-completion-prefix' - If set to 'on', when listing completions, Readline displays + ‘colored-completion-prefix’ + If set to ‘on’, when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the - value of the 'LS_COLORS' environment variable. If there is a - color definition in 'LS_COLORS' for the custom suffix - 'readline-colored-completion-prefix', Readline uses this color + value of the ‘LS_COLORS’ environment variable. If there is a + color definition in ‘LS_COLORS’ for the custom suffix + ‘readline-colored-completion-prefix’, Readline uses this color for the common prefix instead of its default. The default is - 'off'. + ‘off’. - 'colored-stats' - If set to 'on', Readline displays possible completions using + ‘colored-stats’ + If set to ‘on’, Readline displays possible completions using different colors to indicate their file type. The color - definitions are taken from the value of the 'LS_COLORS' - environment variable. The default is 'off'. + definitions are taken from the value of the ‘LS_COLORS’ + environment variable. The default is ‘off’. - 'comment-begin' + ‘comment-begin’ The string to insert at the beginning of the line when the - 'insert-comment' command is executed. The default value is - '"#"'. + ‘insert-comment’ command is executed. The default value is + ‘"#"’. - 'completion-display-width' + ‘completion-display-width’ The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. - 'completion-ignore-case' - If set to 'on', Readline performs filename matching and + ‘completion-ignore-case’ + If set to ‘on’, Readline performs filename matching and completion in a case-insensitive fashion. The default value - is 'off'. + is ‘off’. - 'completion-map-case' - If set to 'on', and COMPLETION-IGNORE-CASE is enabled, - Readline treats hyphens ('-') and underscores ('_') as + ‘completion-map-case’ + If set to ‘on’, and COMPLETION-IGNORE-CASE is enabled, + Readline treats hyphens (‘-’) and underscores (‘_’) as equivalent when performing case-insensitive filename matching - and completion. The default value is 'off'. + and completion. The default value is ‘off’. - 'completion-prefix-display-length' + ‘completion-prefix-display-length’ The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. - 'completion-query-items' + ‘completion-query-items’ The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater @@ -8152,88 +8487,88 @@ Variable Settings listed. This variable must be set to an integer value greater than or equal to zero. A zero value means Readline should never ask; negative values are treated as zero. The default - limit is '100'. + limit is ‘100’. - 'convert-meta' - If set to 'on', Readline will convert characters with the + ‘convert-meta’ + If set to ‘on’, Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing an <ESC> character, converting them - to a meta-prefixed key sequence. The default value is 'on', - but will be set to 'off' if the locale is one that contains + to a meta-prefixed key sequence. The default value is ‘on’, + but will be set to ‘off’ if the locale is one that contains eight-bit characters. This variable is dependent on the - 'LC_CTYPE' locale category, and may change if the locale is + ‘LC_CTYPE’ locale category, and may change if the locale is changed. - 'disable-completion' - If set to 'On', Readline will inhibit word completion. + ‘disable-completion’ + If set to ‘On’, Readline will inhibit word completion. Completion characters will be inserted into the line as if - they had been mapped to 'self-insert'. The default is 'off'. + they had been mapped to ‘self-insert’. The default is ‘off’. - 'echo-control-characters' - When set to 'on', on operating systems that indicate they + ‘echo-control-characters’ + When set to ‘on’, on operating systems that indicate they support it, Readline echoes a character corresponding to a - signal generated from the keyboard. The default is 'on'. + signal generated from the keyboard. The default is ‘on’. - 'editing-mode' - The 'editing-mode' variable controls which default set of key + ‘editing-mode’ + The ‘editing-mode’ variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. - This variable can be set to either 'emacs' or 'vi'. + This variable can be set to either ‘emacs’ or ‘vi’. - 'emacs-mode-string' + ‘emacs-mode-string’ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. - Use the '\1' and '\2' escapes to begin and end sequences of + Use the ‘\1’ and ‘\2’ escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal - control sequence into the mode string. The default is '@'. + control sequence into the mode string. The default is ‘@’. - 'enable-active-region' - The "point" is the current cursor position, and "mark" refers + ‘enable-active-region’ + The “point” is the current cursor position, and “mark” refers to a saved cursor position (*note Commands For Moving::). The text between the point and mark is referred to as the - "region". When this variable is set to 'On', Readline allows - certain commands to designate the region as "active". When + “region”. When this variable is set to ‘On’, Readline allows + certain commands to designate the region as “active”. When the region is active, Readline highlights the text in the - region using the value of the 'active-region-start-color', + region using the value of the ‘active-region-start-color’, which defaults to the string that enables the terminal's standout mode. The active region shows the text inserted by bracketed-paste and any matching text found by incremental and - non-incremental history searches. The default is 'On'. + non-incremental history searches. The default is ‘On’. - 'enable-bracketed-paste' - When set to 'On', Readline configures the terminal to insert + ‘enable-bracketed-paste’ + When set to ‘On’, Readline configures the terminal to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. This is called putting the - terminal into "bracketed paste mode"; it prevents Readline + terminal into “bracketed paste mode”; it prevents Readline from executing any editing commands bound to key sequences - appearing in the pasted text. The default is 'On'. + appearing in the pasted text. The default is ‘On’. - 'enable-keypad' - When set to 'on', Readline will try to enable the application + ‘enable-keypad’ + When set to ‘on’, Readline will try to enable the application keypad when it is called. Some systems need this to enable - the arrow keys. The default is 'off'. + the arrow keys. The default is ‘off’. - 'enable-meta-key' - When set to 'on', Readline will try to enable any meta + ‘enable-meta-key’ + When set to ‘on’, Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit - characters. The default is 'on'. + characters. The default is ‘on’. - 'expand-tilde' - If set to 'on', tilde expansion is performed when Readline - attempts word completion. The default is 'off'. + ‘expand-tilde’ + If set to ‘on’, tilde expansion is performed when Readline + attempts word completion. The default is ‘off’. - 'history-preserve-point' - If set to 'on', the history code attempts to place the point + ‘history-preserve-point’ + If set to ‘on’, the history code attempts to place the point (the current cursor position) at the same location on each - history line retrieved with 'previous-history' or - 'next-history'. The default is 'off'. + history line retrieved with ‘previous-history’ or + ‘next-history’. The default is ‘off’. - 'history-size' + ‘history-size’ Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less @@ -8242,43 +8577,43 @@ Variable Settings attempt is made to set HISTORY-SIZE to a non-numeric value, the maximum number of history entries will be set to 500. - 'horizontal-scroll-mode' - This variable can be set to either 'on' or 'off'. Setting it - to 'on' means that the text of the lines being edited will + ‘horizontal-scroll-mode’ + This variable can be set to either ‘on’ or ‘off’. Setting it + to ‘on’ means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto - a new screen line. This variable is automatically set to 'on' + a new screen line. This variable is automatically set to ‘on’ for terminals of height 1. By default, this variable is set - to 'off'. + to ‘off’. - 'input-meta' - If set to 'on', Readline will enable eight-bit input (it will + ‘input-meta’ + If set to ‘on’, Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The - default value is 'off', but Readline will set it to 'on' if + default value is ‘off’, but Readline will set it to ‘on’ if the locale contains eight-bit characters. The name - 'meta-flag' is a synonym for this variable. This variable is - dependent on the 'LC_CTYPE' locale category, and may change if + ‘meta-flag’ is a synonym for this variable. This variable is + dependent on the ‘LC_CTYPE’ locale category, and may change if the locale is changed. - 'isearch-terminators' + ‘isearch-terminators’ The string of characters that should terminate an incremental search without subsequently executing the character as a command (*note Searching::). If this variable has not been - given a value, the characters <ESC> and 'C-J' will terminate + given a value, the characters <ESC> and ‘C-J’ will terminate an incremental search. - 'keymap' + ‘keymap’ Sets Readline's idea of the current keymap for key binding - commands. Built-in 'keymap' names are 'emacs', - 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move', - 'vi-command', and 'vi-insert'. 'vi' is equivalent to - 'vi-command' ('vi-move' is also a synonym); 'emacs' is - equivalent to 'emacs-standard'. Applications may add - additional names. The default value is 'emacs'. The value of - the 'editing-mode' variable also affects the default keymap. - - 'keyseq-timeout' + commands. Built-in ‘keymap’ names are ‘emacs’, + ‘emacs-standard’, ‘emacs-meta’, ‘emacs-ctlx’, ‘vi’, ‘vi-move’, + ‘vi-command’, and ‘vi-insert’. ‘vi’ is equivalent to + ‘vi-command’ (‘vi-move’ is also a synonym); ‘emacs’ is + equivalent to ‘emacs-standard’. Applications may add + additional names. The default value is ‘emacs’. The value of + the ‘editing-mode’ variable also affects the default keymap. + + ‘keyseq-timeout’ Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take @@ -8286,125 +8621,130 @@ Variable Settings input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current - input source ('rl_instream' by default). The value is + input source (‘rl_instream’ by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default - value is '500'. + value is ‘500’. - 'mark-directories' - If set to 'on', completed directory names have a slash - appended. The default is 'on'. + ‘mark-directories’ + If set to ‘on’, completed directory names have a slash + appended. The default is ‘on’. - 'mark-modified-lines' - This variable, when set to 'on', causes Readline to display an - asterisk ('*') at the start of history lines which have been - modified. This variable is 'off' by default. + ‘mark-modified-lines’ + This variable, when set to ‘on’, causes Readline to display an + asterisk (‘*’) at the start of history lines which have been + modified. This variable is ‘off’ by default. - 'mark-symlinked-directories' - If set to 'on', completed names which are symbolic links to + ‘mark-symlinked-directories’ + If set to ‘on’, completed names which are symbolic links to directories have a slash appended (subject to the value of - 'mark-directories'). The default is 'off'. + ‘mark-directories’). The default is ‘off’. - 'match-hidden-files' - This variable, when set to 'on', causes Readline to match - files whose names begin with a '.' (hidden files) when - performing filename completion. If set to 'off', the leading - '.' must be supplied by the user in the filename to be - completed. This variable is 'on' by default. + ‘match-hidden-files’ + This variable, when set to ‘on’, forces Readline to match + files whose names begin with a ‘.’ (hidden files) when + performing filename completion. If set to ‘off’, the user + must include the leading ‘.’ in the filename to be completed. + This variable is ‘on’ by default. - 'menu-complete-display-prefix' - If set to 'on', menu completion displays the common prefix of + ‘menu-complete-display-prefix’ + If set to ‘on’, menu completion displays the common prefix of the list of possible completions (which may be empty) before - cycling through the list. The default is 'off'. + cycling through the list. The default is ‘off’. - 'output-meta' - If set to 'on', Readline will display characters with the + ‘output-meta’ + If set to ‘on’, Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape - sequence. The default is 'off', but Readline will set it to - 'on' if the locale contains eight-bit characters. This - variable is dependent on the 'LC_CTYPE' locale category, and + sequence. The default is ‘off’, but Readline will set it to + ‘on’ if the locale contains eight-bit characters. This + variable is dependent on the ‘LC_CTYPE’ locale category, and may change if the locale is changed. - 'page-completions' - If set to 'on', Readline uses an internal 'more'-like pager to + ‘page-completions’ + If set to ‘on’, Readline uses an internal ‘more’-like pager to display a screenful of possible completions at a time. This - variable is 'on' by default. + variable is ‘on’ by default. - 'print-completions-horizontally' - If set to 'on', Readline will display completions with matches + ‘print-completions-horizontally’ + If set to ‘on’, Readline will display completions with matches sorted horizontally in alphabetical order, rather than down - the screen. The default is 'off'. + the screen. The default is ‘off’. - 'revert-all-at-newline' - If set to 'on', Readline will undo all changes to history - lines before returning when 'accept-line' is executed. By + ‘revert-all-at-newline’ + If set to ‘on’, Readline will undo all changes to history + lines before returning when ‘accept-line’ is executed. By default, history lines may be modified and retain individual - undo lists across calls to 'readline()'. The default is - 'off'. + undo lists across calls to ‘readline()’. The default is + ‘off’. - 'show-all-if-ambiguous' + ‘search-ignore-case’ + If set to ‘on’, Readline performs incremental and + non-incremental history list searches in a case-insensitive + fashion. The default value is ‘off’. + + ‘show-all-if-ambiguous’ This alters the default behavior of the completion functions. - If set to 'on', words which have more than one possible + If set to ‘on’, words which have more than one possible completion cause the matches to be listed immediately instead - of ringing the bell. The default value is 'off'. + of ringing the bell. The default value is ‘off’. - 'show-all-if-unmodified' + ‘show-all-if-unmodified’ This alters the default behavior of the completion functions in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to - 'on', words which have more than one possible completion + ‘on’, words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The - default value is 'off'. + default value is ‘off’. - 'show-mode-in-prompt' - If set to 'on', add a string to the beginning of the prompt + ‘show-mode-in-prompt’ + If set to ‘on’, add a string to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable (e.g., - EMACS-MODE-STRING). The default value is 'off'. + EMACS-MODE-STRING). The default value is ‘off’. - 'skip-completed-text' - If set to 'on', this alters the default completion behavior + ‘skip-completed-text’ + If set to ‘on’, this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, Readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting - completion when the cursor is after the 'e' in 'Makefile' will - result in 'Makefile' rather than 'Makefilefile', assuming + completion when the cursor is after the ‘e’ in ‘Makefile’ will + result in ‘Makefile’ rather than ‘Makefilefile’, assuming there is a single possible completion. The default value is - 'off'. + ‘off’. - 'vi-cmd-mode-string' + ‘vi-cmd-mode-string’ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences - is available. Use the '\1' and '\2' escapes to begin and end + is available. Use the ‘\1’ and ‘\2’ escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The - default is '(cmd)'. + default is ‘(cmd)’. - 'vi-ins-mode-string' + ‘vi-ins-mode-string’ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences - is available. Use the '\1' and '\2' escapes to begin and end + is available. Use the ‘\1’ and ‘\2’ escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The - default is '(ins)'. + default is ‘(ins)’. - 'visible-stats' - If set to 'on', a character denoting a file's type is appended + ‘visible-stats’ + If set to ‘on’, a character denoting a file's type is appended to the filename when listing possible completions. The - default is 'off'. + default is ‘off’. Key Bindings The syntax for controlling key bindings in the init file is simple. @@ -8423,7 +8763,7 @@ Key Bindings In addition to command names, Readline allows keys to be bound to a string that is inserted when the key is pressed (a MACRO). - The 'bind -p' command displays Readline function names and bindings + The ‘bind -p’ command displays Readline function names and bindings in a format that can be put directly into an initialization file. *Note Bash Builtins::. @@ -8434,11 +8774,11 @@ Key Bindings Meta-Rubout: backward-kill-word Control-o: "> output" - In the example above, 'C-u' is bound to the function - 'universal-argument', 'M-DEL' is bound to the function - 'backward-kill-word', and 'C-o' is bound to run the macro + In the example above, ‘C-u’ is bound to the function + ‘universal-argument’, ‘M-DEL’ is bound to the function + ‘backward-kill-word’, and ‘C-o’ is bound to run the macro expressed on the right hand side (that is, to insert the text - '> output' into the line). + ‘> output’ into the line). A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, @@ -8455,51 +8795,51 @@ Key Bindings "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1" - In the above example, 'C-u' is again bound to the function - 'universal-argument' (just as it was in the first example), - ''C-x' 'C-r'' is bound to the function 're-read-init-file', - and '<ESC> <[> <1> <1> <~>' is bound to insert the text - 'Function Key 1'. + In the above example, ‘C-u’ is again bound to the function + ‘universal-argument’ (just as it was in the first example), + ‘‘C-x’ ‘C-r’’ is bound to the function ‘re-read-init-file’, + and ‘<ESC> <[> <1> <1> <~>’ is bound to insert the text + ‘Function Key 1’. The following GNU Emacs style escape sequences are available when specifying key sequences: - '\C-' + ‘\C-’ control prefix - '\M-' + ‘\M-’ meta prefix - '\e' + ‘\e’ an escape character - '\\' + ‘\\’ backslash - '\"' + ‘\"’ <">, a double quotation mark - '\'' + ‘\'’ <'>, a single quote or apostrophe In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: - '\a' + ‘\a’ alert (bell) - '\b' + ‘\b’ backspace - '\d' + ‘\d’ delete - '\f' + ‘\f’ form feed - '\n' + ‘\n’ newline - '\r' + ‘\r’ carriage return - '\t' + ‘\t’ horizontal tab - '\v' + ‘\v’ vertical tab - '\NNN' + ‘\NNN’ the eight-bit character whose value is the octal value NNN (one to three digits) - '\xHH' + ‘\xHH’ the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) @@ -8507,8 +8847,8 @@ Key Bindings used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other - character in the macro text, including '"' and '''. For example, - the following binding will make ''C-x' \' insert a single '\' into + character in the macro text, including ‘"’ and ‘'’. For example, + the following binding will make ‘‘C-x’ \’ insert a single ‘\’ into the line: "\C-x\\": "\\" @@ -8523,45 +8863,45 @@ compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used. -'$if' - The '$if' construct allows bindings to be made based on the editing +‘$if’ + The ‘$if’ construct allows bindings to be made based on the editing mode, the terminal being used, or the application using Readline. The text of the test, after any comparison operator, extends to the end of the line; unless otherwise noted, no characters are required to isolate it. - 'mode' - The 'mode=' form of the '$if' directive is used to test - whether Readline is in 'emacs' or 'vi' mode. This may be used - in conjunction with the 'set keymap' command, for instance, to - set bindings in the 'emacs-standard' and 'emacs-ctlx' keymaps - only if Readline is starting out in 'emacs' mode. + ‘mode’ + The ‘mode=’ form of the ‘$if’ directive is used to test + whether Readline is in ‘emacs’ or ‘vi’ mode. This may be used + in conjunction with the ‘set keymap’ command, for instance, to + set bindings in the ‘emacs-standard’ and ‘emacs-ctlx’ keymaps + only if Readline is starting out in ‘emacs’ mode. - 'term' - The 'term=' form may be used to include terminal-specific key + ‘term’ + The ‘term=’ form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the - '=' is tested against both the full name of the terminal and - the portion of the terminal name before the first '-'. This - allows 'sun' to match both 'sun' and 'sun-cmd', for instance. + ‘=’ is tested against both the full name of the terminal and + the portion of the terminal name before the first ‘-’. This + allows ‘sun’ to match both ‘sun’ and ‘sun-cmd’, for instance. - 'version' - The 'version' test may be used to perform comparisons against - specific Readline versions. The 'version' expands to the + ‘version’ + The ‘version’ test may be used to perform comparisons against + specific Readline versions. The ‘version’ expands to the current Readline version. The set of comparison operators - includes '=' (and '=='), '!=', '<=', '>=', '<', and '>'. The + includes ‘=’ (and ‘==’), ‘!=’, ‘<=’, ‘>=’, ‘<’, and ‘>’. The version number supplied on the right side of the operator consists of a major version number, an optional decimal point, - and an optional minor version (e.g., '7.1'). If the minor - version is omitted, it is assumed to be '0'. The operator may - be separated from the string 'version' and from the version + and an optional minor version (e.g., ‘7.1’). If the minor + version is omitted, it is assumed to be ‘0’. The operator may + be separated from the string ‘version’ and from the version number argument by whitespace. The following example sets a variable if the Readline version being used is 7.0 or newer: $if version >= 7.0 set show-mode-in-prompt on $endif - 'application' + ‘application’ The APPLICATION construct is used to include application-specific settings. Each program using the Readline library sets the APPLICATION NAME, and you can test @@ -8574,32 +8914,32 @@ four parser directives used. "\C-xq": "\eb\"\ef\"" $endif - 'variable' + ‘variable’ The VARIABLE construct provides simple equality tests for Readline variables and values. The permitted comparison - operators are '=', '==', and '!='. The variable name must be + operators are ‘=’, ‘==’, and ‘!=’. The variable name must be separated from the comparison operator by whitespace; the operator may be separated from the value on the right hand side by whitespace. Both string and boolean variables may be tested. Boolean variables must be tested against the values ON and OFF. The following example is equivalent to the - 'mode=emacs' test described above: + ‘mode=emacs’ test described above: $if editing-mode == emacs set show-mode-in-prompt on $endif -'$endif' - This command, as seen in the previous example, terminates an '$if' +‘$endif’ + This command, as seen in the previous example, terminates an ‘$if’ command. -'$else' - Commands in this branch of the '$if' directive are executed if the +‘$else’ + Commands in this branch of the ‘$if’ directive are executed if the test fails. -'$include' +‘$include’ This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following - directive reads from '/etc/inputrc': + directive reads from ‘/etc/inputrc’: $include /etc/inputrc  @@ -8729,15 +9069,15 @@ File: bashref.info, Node: Bindable Readline Commands, Next: Readline vi Mode, * Miscellaneous Commands:: Other miscellaneous commands. This section describes Readline commands that may be bound to key -sequences. You can list your key bindings by executing 'bind -P' or, -for a more terse format, suitable for an INPUTRC file, 'bind -p'. +sequences. You can list your key bindings by executing ‘bind -P’ or, +for a more terse format, suitable for an INPUTRC file, ‘bind -p’. (*Note Bash Builtins::.) Command names without an accompanying key sequence are unbound by default. - In the following descriptions, "point" refers to the current cursor -position, and "mark" refers to a cursor position saved by the 'set-mark' + In the following descriptions, “point” refers to the current cursor +position, and “mark” refers to a cursor position saved by the ‘set-mark’ command. The text between the point and mark is referred to as the -"region". +“region”.  File: bashref.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands @@ -8745,58 +9085,58 @@ File: bashref.info, Node: Commands For Moving, Next: Commands For History, Up 8.4.1 Commands For Moving ------------------------- -'beginning-of-line (C-a)' +‘beginning-of-line (C-a)’ Move to the start of the current line. -'end-of-line (C-e)' +‘end-of-line (C-e)’ Move to the end of the line. -'forward-char (C-f)' +‘forward-char (C-f)’ Move forward a character. -'backward-char (C-b)' +‘backward-char (C-b)’ Move back a character. -'forward-word (M-f)' +‘forward-word (M-f)’ Move forward to the end of the next word. Words are composed of letters and digits. -'backward-word (M-b)' +‘backward-word (M-b)’ Move back to the start of the current or previous word. Words are composed of letters and digits. -'shell-forward-word (M-C-f)' +‘shell-forward-word (M-C-f)’ Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters. -'shell-backward-word (M-C-b)' +‘shell-backward-word (M-C-b)’ Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters. -'previous-screen-line ()' +‘previous-screen-line ()’ Attempt to move point to the same physical screen column on the previous physical screen line. This will not have the desired effect if the current Readline line does not take up more than one physical line or if point is not greater than the length of the prompt plus the screen width. -'next-screen-line ()' +‘next-screen-line ()’ Attempt to move point to the same physical screen column on the next physical screen line. This will not have the desired effect if the current Readline line does not take up more than one physical line or if the length of the current Readline line is not greater than the length of the prompt plus the screen width. -'clear-display (M-C-l)' +‘clear-display (M-C-l)’ Clear the screen and, if possible, the terminal's scrollback buffer, then redraw the current line, leaving the current line at the top of the screen. -'clear-screen (C-l)' +‘clear-screen (C-l)’ Clear the screen, then redraw the current line, leaving the current line at the top of the screen. -'redraw-current-line ()' +‘redraw-current-line ()’ Refresh the current line. By default, this is unbound.  @@ -8805,104 +9145,104 @@ File: bashref.info, Node: Commands For History, Next: Commands For Text, Prev 8.4.2 Commands For Manipulating The History ------------------------------------------- -'accept-line (Newline or Return)' +‘accept-line (Newline or Return)’ Accept the line regardless of where the cursor is. If this line is non-empty, add it to the history list according to the setting of - the 'HISTCONTROL' and 'HISTIGNORE' variables. If this line is a + the ‘HISTCONTROL’ and ‘HISTIGNORE’ variables. If this line is a modified history line, then restore the history line to its original state. -'previous-history (C-p)' +‘previous-history (C-p)’ Move 'back' through the history list, fetching the previous command. -'next-history (C-n)' +‘next-history (C-n)’ Move 'forward' through the history list, fetching the next command. -'beginning-of-history (M-<)' +‘beginning-of-history (M-<)’ Move to the first line in the history. -'end-of-history (M->)' +‘end-of-history (M->)’ Move to the end of the input history, i.e., the line currently being entered. -'reverse-search-history (C-r)' +‘reverse-search-history (C-r)’ Search backward starting at the current line and moving 'up' through the history as necessary. This is an incremental search. This command sets the region to the matched text and activates the mark. -'forward-search-history (C-s)' +‘forward-search-history (C-s)’ Search forward starting at the current line and moving 'down' through the history as necessary. This is an incremental search. This command sets the region to the matched text and activates the mark. -'non-incremental-reverse-search-history (M-p)' +‘non-incremental-reverse-search-history (M-p)’ Search backward starting at the current line and moving 'up' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. -'non-incremental-forward-search-history (M-n)' +‘non-incremental-forward-search-history (M-n)’ Search forward starting at the current line and moving 'down' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. -'history-search-forward ()' +‘history-search-forward ()’ Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. -'history-search-backward ()' +‘history-search-backward ()’ Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. -'history-substring-search-forward ()' +‘history-substring-search-forward ()’ Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. -'history-substring-search-backward ()' +‘history-substring-search-backward ()’ Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. -'yank-nth-arg (M-C-y)' +‘yank-nth-arg (M-C-y)’ Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument N, insert the Nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the Nth word from the end of the previous command. Once the - argument N is computed, the argument is extracted as if the '!N' + argument N is computed, the argument is extracted as if the ‘!N’ history expansion had been specified. -'yank-last-arg (M-. or M-_)' +‘yank-last-arg (M-. or M-_)’ Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly - like 'yank-nth-arg'. Successive calls to 'yank-last-arg' move back + like ‘yank-nth-arg’. Successive calls to ‘yank-last-arg’ move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, - as if the '!$' history expansion had been specified. + as if the ‘!$’ history expansion had been specified. -'operate-and-get-next (C-o)' +‘operate-and-get-next (C-o)’ Accept the current line for return to the calling application as if a newline had been entered, and fetch the next line relative to the current line from the history for editing. A numeric argument, if supplied, specifies the history entry to use instead of the current line. -'fetch-history ()' +‘fetch-history ()’ With a numeric argument, fetch that entry from the history list and make it the current line. Without an argument, move back to the first entry in the history list. @@ -8913,40 +9253,40 @@ File: bashref.info, Node: Commands For Text, Next: Commands For Killing, Prev 8.4.3 Commands For Changing Text -------------------------------- -'end-of-file (usually C-d)' +‘end-of-file (usually C-d)’ The character indicating end-of-file as set, for example, by - 'stty'. If this character is read when there are no characters on + ‘stty’. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF. -'delete-char (C-d)' +‘delete-char (C-d)’ Delete the character at point. If this function is bound to the - same character as the tty EOF character, as 'C-d' commonly is, see + same character as the tty EOF character, as ‘C-d’ commonly is, see above for the effects. -'backward-delete-char (Rubout)' +‘backward-delete-char (Rubout)’ Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them. -'forward-backward-delete-char ()' +‘forward-backward-delete-char ()’ Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key. -'quoted-insert (C-q or C-v)' +‘quoted-insert (C-q or C-v)’ Add the next character typed to the line verbatim. This is how to - insert key sequences like 'C-q', for example. + insert key sequences like ‘C-q’, for example. -'self-insert (a, b, A, 1, !, ...)' +‘self-insert (a, b, A, 1, !, ...)’ Insert yourself. -'bracketed-paste-begin ()' +‘bracketed-paste-begin ()’ This function is intended to be bound to the "bracketed paste" escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating each character as if it had been read from the keyboard. The characters are inserted as if each one - was bound to 'self-insert' instead of executing any editing + was bound to ‘self-insert’ instead of executing any editing commands. Bracketed paste sets the region (the characters between point and @@ -8954,39 +9294,46 @@ File: bashref.info, Node: Commands For Text, Next: Commands For Killing, Prev mark_: when the mark is active, Readline redisplay uses the terminal's standout mode to denote the region. -'transpose-chars (C-t)' +‘transpose-chars (C-t)’ Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point is at the end of the line, then this transposes the last two characters of the line. Negative arguments have no effect. -'transpose-words (M-t)' +‘transpose-words (M-t)’ Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. -'upcase-word (M-u)' +‘shell-transpose-words (M-C-t)’ + Drag the word before point past the word after point, moving point + past that word as well. If the insertion point is at the end of + the line, this transposes the last two words on the line. Word + boundaries are the same as ‘shell-forward-word’ and + ‘shell-backward-word’. + +‘upcase-word (M-u)’ Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. -'downcase-word (M-l)' +‘downcase-word (M-l)’ Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor. -'capitalize-word (M-c)' +‘capitalize-word (M-c)’ Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor. -'overwrite-mode ()' +‘overwrite-mode ()’ Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only - 'emacs' mode; 'vi' mode does overwrite differently. Each call to - 'readline()' starts in insert mode. + ‘emacs’ mode; ‘vi’ mode does overwrite differently. Each call to + ‘readline()’ starts in insert mode. - In overwrite mode, characters bound to 'self-insert' replace the + In overwrite mode, characters bound to ‘self-insert’ replace the text at point rather than pushing the text to the right. - Characters bound to 'backward-delete-char' replace the character + Characters bound to ‘backward-delete-char’ replace the character before point with a space. By default, this command is unbound. @@ -8997,85 +9344,78 @@ File: bashref.info, Node: Commands For Killing, Next: Numeric Arguments, Prev 8.4.4 Killing And Yanking ------------------------- -'kill-line (C-k)' +‘kill-line (C-k)’ Kill the text from point to the end of the line. With a negative numeric argument, kill backward from the cursor to the beginning of the current line. -'backward-kill-line (C-x Rubout)' +‘backward-kill-line (C-x Rubout)’ Kill backward from the cursor to the beginning of the current line. With a negative numeric argument, kill forward from the cursor to the end of the current line. -'unix-line-discard (C-u)' +‘unix-line-discard (C-u)’ Kill backward from the cursor to the beginning of the current line. -'kill-whole-line ()' +‘kill-whole-line ()’ Kill all characters on the current line, no matter where point is. By default, this is unbound. -'kill-word (M-d)' +‘kill-word (M-d)’ Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same - as 'forward-word'. + as ‘forward-word’. -'backward-kill-word (M-<DEL>)' +‘backward-kill-word (M-<DEL>)’ Kill the word behind point. Word boundaries are the same as - 'backward-word'. + ‘backward-word’. -'shell-kill-word (M-C-d)' +‘shell-kill-word (M-C-d)’ Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same - as 'shell-forward-word'. + as ‘shell-forward-word’. -'shell-backward-kill-word ()' +‘shell-backward-kill-word ()’ Kill the word behind point. Word boundaries are the same as - 'shell-backward-word'. - -'shell-transpose-words (M-C-t)' - Drag the word before point past the word after point, moving point - past that word as well. If the insertion point is at the end of - the line, this transposes the last two words on the line. Word - boundaries are the same as 'shell-forward-word' and - 'shell-backward-word'. + ‘shell-backward-word’. -'unix-word-rubout (C-w)' +‘unix-word-rubout (C-w)’ Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. -'unix-filename-rubout ()' +‘unix-filename-rubout ()’ Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. -'delete-horizontal-space ()' +‘delete-horizontal-space ()’ Delete all spaces and tabs around point. By default, this is unbound. -'kill-region ()' +‘kill-region ()’ Kill the text in the current region. By default, this command is unbound. -'copy-region-as-kill ()' +‘copy-region-as-kill ()’ Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound. -'copy-backward-word ()' +‘copy-backward-word ()’ Copy the word before point to the kill buffer. The word boundaries - are the same as 'backward-word'. By default, this command is + are the same as ‘backward-word’. By default, this command is unbound. -'copy-forward-word ()' +‘copy-forward-word ()’ Copy the word following point to the kill buffer. The word - boundaries are the same as 'forward-word'. By default, this + boundaries are the same as ‘forward-word’. By default, this command is unbound. -'yank (C-y)' +‘yank (C-y)’ Yank the top of the kill ring into the buffer at point. -'yank-pop (M-y)' +‘yank-pop (M-y)’ Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is 'yank' or 'yank-pop'. + if the prior command is ‘yank’ or ‘yank-pop’.  File: bashref.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands @@ -9083,15 +9423,15 @@ File: bashref.info, Node: Numeric Arguments, Next: Commands For Completion, P 8.4.5 Specifying Numeric Arguments ---------------------------------- -'digit-argument (M-0, M-1, ... M--)' +‘digit-argument (M-0, M-1, ... M--)’ Add this digit to the argument already accumulating, or start a new - argument. 'M--' starts a negative argument. + argument. ‘M--’ starts a negative argument. -'universal-argument ()' +‘universal-argument ()’ This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is followed - by digits, executing 'universal-argument' again ends the numeric + by digits, executing ‘universal-argument’ again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit nor minus sign, the argument count for the next command is @@ -9106,101 +9446,101 @@ File: bashref.info, Node: Commands For Completion, Next: Keyboard Macros, Pre 8.4.6 Letting Readline Type For You ----------------------------------- -'complete (<TAB>)' +‘complete (<TAB>)’ Attempt to perform completion on the text before point. The actual completion performed is application-specific. Bash attempts completion treating the text as a variable (if the text begins with - '$'), username (if the text begins with '~'), hostname (if the text - begins with '@'), or command (including aliases and functions) in + ‘$’), username (if the text begins with ‘~’), hostname (if the text + begins with ‘@’), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. -'possible-completions (M-?)' +‘possible-completions (M-?)’ List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used - for display to the value of 'completion-display-width', the value - of the environment variable 'COLUMNS', or the screen width, in that + for display to the value of ‘completion-display-width’, the value + of the environment variable ‘COLUMNS’, or the screen width, in that order. -'insert-completions (M-*)' +‘insert-completions (M-*)’ Insert all completions of the text before point that would have - been generated by 'possible-completions'. + been generated by ‘possible-completions’. -'menu-complete ()' - Similar to 'complete', but replaces the word to be completed with a +‘menu-complete ()’ + Similar to ‘complete’, but replaces the word to be completed with a single match from the list of possible completions. Repeated - execution of 'menu-complete' steps through the list of possible + execution of ‘menu-complete’ steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of - 'bell-style') and the original text is restored. An argument of N + ‘bell-style’) and the original text is restored. An argument of N moves N positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to <TAB>, but is unbound by default. -'menu-complete-backward ()' - Identical to 'menu-complete', but moves backward through the list - of possible completions, as if 'menu-complete' had been given a +‘menu-complete-backward ()’ + Identical to ‘menu-complete’, but moves backward through the list + of possible completions, as if ‘menu-complete’ had been given a negative argument. -'delete-char-or-list ()' +‘delete-char-or-list ()’ Deletes the character under the cursor if not at the beginning or - end of the line (like 'delete-char'). If at the end of the line, - behaves identically to 'possible-completions'. This command is + end of the line (like ‘delete-char’). If at the end of the line, + behaves identically to ‘possible-completions’. This command is unbound by default. -'complete-filename (M-/)' +‘complete-filename (M-/)’ Attempt filename completion on the text before point. -'possible-filename-completions (C-x /)' +‘possible-filename-completions (C-x /)’ List the possible completions of the text before point, treating it as a filename. -'complete-username (M-~)' +‘complete-username (M-~)’ Attempt completion on the text before point, treating it as a username. -'possible-username-completions (C-x ~)' +‘possible-username-completions (C-x ~)’ List the possible completions of the text before point, treating it as a username. -'complete-variable (M-$)' +‘complete-variable (M-$)’ Attempt completion on the text before point, treating it as a shell variable. -'possible-variable-completions (C-x $)' +‘possible-variable-completions (C-x $)’ List the possible completions of the text before point, treating it as a shell variable. -'complete-hostname (M-@)' +‘complete-hostname (M-@)’ Attempt completion on the text before point, treating it as a hostname. -'possible-hostname-completions (C-x @)' +‘possible-hostname-completions (C-x @)’ List the possible completions of the text before point, treating it as a hostname. -'complete-command (M-!)' +‘complete-command (M-!)’ Attempt completion on the text before point, treating it as a command name. Command completion attempts to match the text against aliases, reserved words, shell functions, shell builtins, and finally executable filenames, in that order. -'possible-command-completions (C-x !)' +‘possible-command-completions (C-x !)’ List the possible completions of the text before point, treating it as a command name. -'dynamic-complete-history (M-<TAB>)' +‘dynamic-complete-history (M-<TAB>)’ Attempt completion on the text before point, comparing the text against lines from the history list for possible completion matches. -'dabbrev-expand ()' +‘dabbrev-expand ()’ Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches. -'complete-into-braces (M-{)' +‘complete-into-braces (M-{)’ Perform filename completion and insert the list of possible completions enclosed within braces so the list is available to the shell (*note Brace Expansion::). @@ -9211,18 +9551,18 @@ File: bashref.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev 8.4.7 Keyboard Macros --------------------- -'start-kbd-macro (C-x ()' +‘start-kbd-macro (C-x ()’ Begin saving the characters typed into the current keyboard macro. -'end-kbd-macro (C-x ))' +‘end-kbd-macro (C-x ))’ Stop saving the characters typed into the current keyboard macro and save the definition. -'call-last-kbd-macro (C-x e)' +‘call-last-kbd-macro (C-x e)’ Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard. -'print-last-kbd-macro ()' +‘print-last-kbd-macro ()’ Print the last keyboard macro defined in a format suitable for the INPUTRC file. @@ -9232,53 +9572,53 @@ File: bashref.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: 8.4.8 Some Miscellaneous Commands --------------------------------- -'re-read-init-file (C-x C-r)' +‘re-read-init-file (C-x C-r)’ Read in the contents of the INPUTRC file, and incorporate any bindings or variable assignments found there. -'abort (C-g)' +‘abort (C-g)’ Abort the current editing command and ring the terminal's bell - (subject to the setting of 'bell-style'). + (subject to the setting of ‘bell-style’). -'do-lowercase-version (M-A, M-B, M-X, ...)' +‘do-lowercase-version (M-A, M-B, M-X, ...)’ If the metafied character X is upper case, run the command that is bound to the corresponding metafied lower case character. The behavior is undefined if X is already lower case. -'prefix-meta (<ESC>)' +‘prefix-meta (<ESC>)’ Metafy the next character typed. This is for keyboards without a - meta key. Typing '<ESC> f' is equivalent to typing 'M-f'. + meta key. Typing ‘<ESC> f’ is equivalent to typing ‘M-f’. -'undo (C-_ or C-x C-u)' +‘undo (C-_ or C-x C-u)’ Incremental undo, separately remembered for each line. -'revert-line (M-r)' +‘revert-line (M-r)’ Undo all changes made to this line. This is like executing the - 'undo' command enough times to get back to the beginning. + ‘undo’ command enough times to get back to the beginning. -'tilde-expand (M-&)' +‘tilde-expand (M-&)’ Perform tilde expansion on the current word. -'set-mark (C-@)' +‘set-mark (C-@)’ Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. -'exchange-point-and-mark (C-x C-x)' +‘exchange-point-and-mark (C-x C-x)’ Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark. -'character-search (C-])' +‘character-search (C-])’ A character is read and point is moved to the next occurrence of that character. A negative argument searches for previous occurrences. -'character-search-backward (M-C-])' +‘character-search-backward (M-C-])’ A character is read and point is moved to the previous occurrence of that character. A negative argument searches for subsequent occurrences. -'skip-csi-sequence ()' +‘skip-csi-sequence ()’ Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this @@ -9287,89 +9627,98 @@ File: bashref.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. -'insert-comment (M-#)' - Without a numeric argument, the value of the 'comment-begin' +‘insert-comment (M-#)’ + Without a numeric argument, the value of the ‘comment-begin’ variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of - 'comment-begin', the value is inserted, otherwise the characters in - 'comment-begin' are deleted from the beginning of the line. In + ‘comment-begin’, the value is inserted, otherwise the characters in + ‘comment-begin’ are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. - The default value of 'comment-begin' causes this command to make + The default value of ‘comment-begin’ causes this command to make the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. -'dump-functions ()' +‘dump-functions ()’ Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. -'dump-variables ()' +‘dump-variables ()’ Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. -'dump-macros ()' +‘dump-macros ()’ Print all of the Readline key sequences bound to macros and the 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 INPUTRC file. This command is unbound by default. -'spell-correct-word (C-x s)' +‘spell-correct-word (C-x s)’ Perform spelling correction on the current word, treating it as a - directory or filename, in the same way as the 'cdspell' shell + directory or filename, in the same way as the ‘cdspell’ shell option. Word boundaries are the same as those used by - 'shell-forward-word'. + ‘shell-forward-word’. -'glob-complete-word (M-g)' +‘glob-complete-word (M-g)’ The word before point is treated as a pattern for pathname expansion, with an asterisk implicitly appended. This pattern is used to generate a list of matching file names for possible completions. -'glob-expand-word (C-x *)' +‘glob-expand-word (C-x *)’ The word before point is treated as a pattern for pathname expansion, and the list of matching file names is inserted, - replacing the word. If a numeric argument is supplied, a '*' is + replacing the word. If a numeric argument is supplied, a ‘*’ is appended before pathname expansion. -'glob-list-expansions (C-x g)' +‘glob-list-expansions (C-x g)’ The list of expansions that would have been generated by - 'glob-expand-word' is displayed, and the line is redrawn. If a - numeric argument is supplied, a '*' is appended before pathname + ‘glob-expand-word’ is displayed, and the line is redrawn. If a + numeric argument is supplied, a ‘*’ is appended before pathname expansion. -'display-shell-version (C-x C-v)' +‘display-shell-version (C-x C-v)’ Display version information about the current instance of Bash. -'shell-expand-line (M-C-e)' - Expand the line as the shell does. This performs alias and history - expansion as well as all of the shell word expansions (*note Shell - Expansions::). +‘shell-expand-line (M-C-e)’ + Expand the line by performing shell word expansions. This performs + alias and history expansion, $'STRING' and $"STRING" quoting, tilde + expansion, parameter and variable expansion, arithmetic expansion, + command and proces substitution, word splitting, and quote removal. + An explicit argument suppresses command and process substitution. -'history-expand-line (M-^)' +‘history-expand-line (M-^)’ Perform history expansion on the current line. -'magic-space ()' +‘magic-space ()’ Perform history expansion on the current line and insert a space (*note History Interaction::). -'alias-expand-line ()' +‘alias-expand-line ()’ Perform alias expansion on the current line (*note Aliases::). -'history-and-alias-expand-line ()' +‘history-and-alias-expand-line ()’ Perform history and alias expansion on the current line. -'insert-last-argument (M-. or M-_)' - A synonym for 'yank-last-arg'. +‘insert-last-argument (M-. or M-_)’ + A synonym for ‘yank-last-arg’. -'edit-and-execute-command (C-x C-e)' +‘edit-and-execute-command (C-x C-e)’ Invoke an editor on the current command line, and execute the - result as shell commands. Bash attempts to invoke '$VISUAL', - '$EDITOR', and 'emacs' as the editor, in that order. + result as shell commands. Bash attempts to invoke ‘$VISUAL’, + ‘$EDITOR’, and ‘emacs’ as the editor, in that order. + +‘execute-named-command (M-x)’ + Read a bindable readline command name from the input and execute + the function to which it's bound, as if the key sequence to which + it was bound appeared in the input. If this function is supplied + with a numeric argument, it passes that argument to the function it + executes.  File: bashref.info, Node: Readline vi Mode, Next: Programmable Completion, Prev: Bindable Readline Commands, Up: Command Line Editing @@ -9377,19 +9726,19 @@ File: bashref.info, Node: Readline vi Mode, Next: Programmable Completion, Pr 8.5 Readline vi Mode ==================== -While the Readline library does not have a full set of 'vi' editing +While the Readline library does not have a full set of ‘vi’ editing functions, it does contain enough to allow simple editing of the line. -The Readline 'vi' mode behaves as specified in the POSIX standard. +The Readline ‘vi’ mode behaves as specified in the POSIX standard. - In order to switch interactively between 'emacs' and 'vi' editing -modes, use the 'set -o emacs' and 'set -o vi' commands (*note The Set -Builtin::). The Readline default is 'emacs' mode. + In order to switch interactively between ‘emacs’ and ‘vi’ editing +modes, use the ‘set -o emacs’ and ‘set -o vi’ commands (*note The Set +Builtin::). The Readline default is ‘emacs’ mode. - When you enter a line in 'vi' mode, you are already placed in -'insertion' mode, as if you had typed an 'i'. Pressing <ESC> switches + When you enter a line in ‘vi’ mode, you are already placed in +'insertion' mode, as if you had typed an ‘i’. Pressing <ESC> switches you into 'command' mode, where you can edit the text of the line with -the standard 'vi' movement keys, move to previous history lines with 'k' -and subsequent lines with 'j', and so forth. +the standard ‘vi’ movement keys, move to previous history lines with ‘k’ +and subsequent lines with ‘j’, and so forth.  File: bashref.info, Node: Programmable Completion, Next: Programmable Completion Builtins, Prev: Readline vi Mode, Up: Command Line Editing @@ -9399,19 +9748,19 @@ File: bashref.info, Node: Programmable Completion, Next: Programmable Completi When word completion is attempted for an argument to a command for which a completion specification (a COMPSPEC) has been defined using the -'complete' builtin (*note Programmable Completion Builtins::), the +‘complete’ builtin (*note Programmable Completion Builtins::), the programmable completion facilities are invoked. First, the command name is identified. If a compspec has been defined for that command, the compspec is used to generate the list of possible completions for the word. If the command word is the empty string (completion attempted at the beginning of an empty line), any -compspec defined with the '-E' option to 'complete' is used. If the +compspec defined with the ‘-E’ option to ‘complete’ is used. If the command word is a full pathname, a compspec for the full pathname is searched for first. If no compspec is found for the full pathname, an attempt is made to find a compspec for the portion following the final slash. If those searches do not result in a compspec, any compspec -defined with the '-D' option to 'complete' is used as the default. If +defined with the ‘-D’ option to ‘complete’ is used as the default. If there is no default compspec, Bash attempts alias expansion on the command word as a final resort, and attempts to find a compspec for the command word from any successful expansion @@ -9422,20 +9771,20 @@ described above (*note Commands For Completion::) is performed. First, the actions specified by the compspec are used. Only matches which are prefixed by the word being completed are returned. When the -'-f' or '-d' option is used for filename or directory name completion, -the shell variable 'FIGNORE' is used to filter the matches. *Note Bash -Variables::, for a description of 'FIGNORE'. +‘-f’ or ‘-d’ option is used for filename or directory name completion, +the shell variable ‘FIGNORE’ is used to filter the matches. *Note Bash +Variables::, for a description of ‘FIGNORE’. - Any completions specified by a filename expansion pattern to the '-G' + Any completions specified by a filename expansion pattern to the ‘-G’ option are generated next. The words generated by the pattern need not -match the word being completed. The 'GLOBIGNORE' shell variable is not -used to filter the matches, but the 'FIGNORE' shell variable is used. +match the word being completed. The ‘GLOBIGNORE’ shell variable is not +used to filter the matches, but the ‘FIGNORE’ shell variable is used. - Next, the string specified as the argument to the '-W' option is -considered. The string is first split using the characters in the 'IFS' + Next, the string specified as the argument to the ‘-W’ option is +considered. The string is first split using the characters in the ‘IFS’ special variable as delimiters. Shell quoting is honored within the string, in order to provide a mechanism for the words to contain shell -metacharacters or characters in the value of 'IFS'. Each word is then +metacharacters or characters in the value of ‘IFS’. Each word is then expanded using brace expansion, tilde expansion, parameter and variable expansion, command substitution, and arithmetic expansion, as described above (*note Shell Expansions::). The results are split using the rules @@ -9444,11 +9793,11 @@ are prefix-matched against the word being completed, and the matching words become the possible completions. After these matches have been generated, any shell function or -command specified with the '-F' and '-C' options is invoked. When the -command or function is invoked, the 'COMP_LINE', 'COMP_POINT', -'COMP_KEY', and 'COMP_TYPE' variables are assigned values as described +command specified with the ‘-F’ and ‘-C’ options is invoked. When the +command or function is invoked, the ‘COMP_LINE’, ‘COMP_POINT’, +‘COMP_KEY’, and ‘COMP_TYPE’ variables are assigned values as described above (*note Bash Variables::). If a shell function is being invoked, -the 'COMP_WORDS' and 'COMP_CWORD' variables are also set. When the +the ‘COMP_WORDS’ and ‘COMP_CWORD’ variables are also set. When the function or command is invoked, the first argument ($1) is the name of the command whose arguments are being completed, the second argument ($2) is the word being completed, and the third argument ($3) is the @@ -9457,49 +9806,49 @@ filtering of the generated completions against the word being completed is performed; the function or command has complete freedom in generating the matches. - Any function specified with '-F' is invoked first. The function may -use any of the shell facilities, including the 'compgen' and 'compopt' + Any function specified with ‘-F’ is invoked first. The function may +use any of the shell facilities, including the ‘compgen’ and ‘compopt’ builtins described below (*note Programmable Completion Builtins::), to generate the matches. It must put the possible completions in the -'COMPREPLY' array variable, one per array element. +‘COMPREPLY’ array variable, one per array element. - Next, any command specified with the '-C' option is invoked in an + Next, any command specified with the ‘-C’ option is invoked in an environment equivalent to command substitution. It should print a list of completions, one per line, to the standard output. Backslash may be used to escape a newline, if necessary. After all of the possible completions are generated, any filter -specified with the '-X' option is applied to the list. The filter is a -pattern as used for pathname expansion; a '&' in the pattern is replaced -with the text of the word being completed. A literal '&' may be escaped +specified with the ‘-X’ option is applied to the list. The filter is a +pattern as used for pathname expansion; a ‘&’ in the pattern is replaced +with the text of the word being completed. A literal ‘&’ may be escaped with a backslash; the backslash is removed before attempting a match. Any completion that matches the pattern will be removed from the list. -A leading '!' negates the pattern; in this case any completion not -matching the pattern will be removed. If the 'nocasematch' shell option -(see the description of 'shopt' in *note The Shopt Builtin::) is +A leading ‘!’ negates the pattern; in this case any completion not +matching the pattern will be removed. If the ‘nocasematch’ shell option +(see the description of ‘shopt’ in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. - Finally, any prefix and suffix specified with the '-P' and '-S' + Finally, any prefix and suffix specified with the ‘-P’ and ‘-S’ options are added to each member of the completion list, and the result is returned to the Readline completion code as the list of possible completions. If the previously-applied actions do not generate any matches, and -the '-o dirnames' option was supplied to 'complete' when the compspec +the ‘-o dirnames’ option was supplied to ‘complete’ when the compspec was defined, directory name completion is attempted. - If the '-o plusdirs' option was supplied to 'complete' when the + If the ‘-o plusdirs’ option was supplied to ‘complete’ when the compspec was defined, directory name completion is attempted and any matches are added to the results of the other actions. By default, if a compspec is found, whatever it generates is returned to the completion code as the full set of possible completions. The default Bash completions are not attempted, and the Readline default of -filename completion is disabled. If the '-o bashdefault' option was -supplied to 'complete' when the compspec was defined, the default Bash +filename completion is disabled. If the ‘-o bashdefault’ option was +supplied to ‘complete’ when the compspec was defined, the default Bash completions are attempted if the compspec generates no matches. If the -'-o default' option was supplied to 'complete' when the compspec was +‘-o default’ option was supplied to ‘complete’ when the compspec was defined, Readline's default completion will be performed if the compspec (and, if attempted, the default Bash completions) generate no matches. @@ -9511,7 +9860,7 @@ setting of the MARK-SYMLINKED-DIRECTORIES Readline variable. There is some support for dynamically modifying completions. This is most useful when used in combination with a default completion specified -with '-D'. It's possible for shell functions executed as completion +with ‘-D’. It's possible for shell functions executed as completion handlers to indicate that completion should be retried by returning an exit status of 124. If a shell function returns 124, and changes the compspec associated with the command on which completion is being @@ -9542,15 +9891,21 @@ completion facilities: one to specify how the arguments to a particular command are to be completed, and two to modify the completion as it is happening. -'compgen' - compgen [OPTION] [WORD] +‘compgen’ + compgen [-V VARNAME] [OPTION] [WORD] Generate possible completion matches for WORD according to the - OPTIONs, which may be any option accepted by the 'complete' builtin - with the exception of '-p' and '-r', and write the matches to the - standard output. When using the '-F' or '-C' options, the various - shell variables set by the programmable completion facilities, - while available, will not have useful values. + OPTIONs, which may be any option accepted by the ‘complete’ builtin + with the exceptions of ‘-p’, ‘-r’, ‘-D’, ‘-E’, and ‘-I’, and write + the matches to the standard output. + + If the ‘-V’ option is supplied, ‘compgen’ stores the generated + completions into the indexed array variable VARNAME instead of + writing them to the standard output. + + When using the ‘-F’ or ‘-C’ options, the various shell variables + set by the programmable completion facilities, while available, + will not have useful values. The matches will be generated in the same way as if the programmable completion code had generated them directly from a @@ -9560,29 +9915,29 @@ happening. The return value is true unless an invalid option is supplied, or no matches were generated. -'complete' - complete [-abcdefgjksuv] [-o COMP-OPTION] [-DEI] [-A ACTION] [-G GLOBPAT] - [-W WORDLIST] [-F FUNCTION] [-C COMMAND] [-X FILTERPAT] - [-P PREFIX] [-S SUFFIX] NAME [NAME ...] +‘complete’ + complete [-abcdefgjksuv] [-o COMP-OPTION] [-DEI] [-A ACTION] + [-G GLOBPAT] [-W WORDLIST] [-F FUNCTION] [-C COMMAND] + [-X FILTERPAT] [-P PREFIX] [-S SUFFIX] NAME [NAME ...] complete -pr [-DEI] [NAME ...] Specify how arguments to each NAME should be completed. If the - '-p' option is supplied, or if no options are supplied, existing - completion specifications are printed in a way that allows them to - be reused as input. The '-r' option removes a completion + ‘-p’ option is supplied, or if no options or NAMEs are supplied, + existing completion specifications are printed in a way that allows + them to be reused as input. The ‘-r’ option removes a completion specification for each NAME, or, if no NAMEs are supplied, all - completion specifications. The '-D' option indicates that other + completion specifications. The ‘-D’ option indicates that other supplied options and actions should apply to the "default" command completion; that is, completion attempted on a command for which no - completion has previously been defined. The '-E' option indicates + completion has previously been defined. The ‘-E’ option indicates that other supplied options and actions should apply to "empty" command completion; that is, completion attempted on a blank line. - The '-I' option indicates that other supplied options and actions + The ‘-I’ option indicates that other supplied options and actions should apply to completion on the initial non-assignment word on - the line, or after a command delimiter such as ';' or '|', which is + the line, or after a command delimiter such as ‘;’ or ‘|’, which is usually command name completion. If multiple options are supplied, - the '-D' option takes precedence over '-E', and both take - precedence over '-I'. If any of '-D', '-E', or '-I' are supplied, + the ‘-D’ option takes precedence over ‘-E’, and both take + precedence over ‘-I’. If any of ‘-D’, ‘-E’, or ‘-I’ are supplied, any other NAME arguments are ignored; these completions only apply to the case specified by the option. @@ -9591,202 +9946,206 @@ happening. Completion::). Other options, if specified, have the following meanings. The - arguments to the '-G', '-W', and '-X' options (and, if necessary, - the '-P' and '-S' options) should be quoted to protect them from - expansion before the 'complete' builtin is invoked. + arguments to the ‘-G’, ‘-W’, and ‘-X’ options (and, if necessary, + the ‘-P’ and ‘-S’ options) should be quoted to protect them from + expansion before the ‘complete’ builtin is invoked. - '-o COMP-OPTION' + ‘-o COMP-OPTION’ The COMP-OPTION controls several aspects of the compspec's behavior beyond the simple generation of completions. COMP-OPTION may be one of: - 'bashdefault' + ‘bashdefault’ Perform the rest of the default Bash completions if the compspec generates no matches. - 'default' + ‘default’ Use Readline's default filename completion if the compspec generates no matches. - 'dirnames' + ‘dirnames’ Perform directory name completion if the compspec generates no matches. - 'filenames' + ‘filenames’ Tell Readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names, quoting special characters, or suppressing trailing spaces). This option is intended to be used with shell functions specified - with '-F'. + with ‘-F’. - 'noquote' + ‘fullquote’ + Tell Readline to quote all the completed words even if + they are not filenames. + + ‘noquote’ Tell Readline not to quote the completed words if they are filenames (quoting filenames is the default). - 'nosort' + ‘nosort’ Tell Readline not to sort the list of possible completions alphabetically. - 'nospace' + ‘nospace’ Tell Readline not to append a space (the default) to words completed at the end of the line. - 'plusdirs' + ‘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' + ‘-A ACTION’ The ACTION may be one of the following to generate a list of possible completions: - 'alias' - Alias names. May also be specified as '-a'. + ‘alias’ + Alias names. May also be specified as ‘-a’. - 'arrayvar' + ‘arrayvar’ Array variable names. - 'binding' + ‘binding’ Readline key binding names (*note Bindable Readline Commands::). - 'builtin' + ‘builtin’ Names of shell builtin commands. May also be specified - as '-b'. + as ‘-b’. - 'command' - Command names. May also be specified as '-c'. + ‘command’ + Command names. May also be specified as ‘-c’. - 'directory' - Directory names. May also be specified as '-d'. + ‘directory’ + Directory names. May also be specified as ‘-d’. - 'disabled' + ‘disabled’ Names of disabled shell builtins. - 'enabled' + ‘enabled’ Names of enabled shell builtins. - 'export' + ‘export’ Names of exported shell variables. May also be specified - as '-e'. + as ‘-e’. - 'file' - File names. May also be specified as '-f'. + ‘file’ + File names. May also be specified as ‘-f’. - 'function' + ‘function’ Names of shell functions. - 'group' - Group names. May also be specified as '-g'. + ‘group’ + Group names. May also be specified as ‘-g’. - 'helptopic' - Help topics as accepted by the 'help' builtin (*note Bash + ‘helptopic’ + Help topics as accepted by the ‘help’ builtin (*note Bash Builtins::). - 'hostname' + ‘hostname’ Hostnames, as taken from the file specified by the - 'HOSTFILE' shell variable (*note Bash Variables::). + ‘HOSTFILE’ shell variable (*note Bash Variables::). - 'job' + ‘job’ Job names, if job control is active. May also be - specified as '-j'. + specified as ‘-j’. - 'keyword' - Shell reserved words. May also be specified as '-k'. + ‘keyword’ + Shell reserved words. May also be specified as ‘-k’. - 'running' + ‘running’ Names of running jobs, if job control is active. - 'service' - Service names. May also be specified as '-s'. + ‘service’ + Service names. May also be specified as ‘-s’. - 'setopt' - Valid arguments for the '-o' option to the 'set' builtin + ‘setopt’ + Valid arguments for the ‘-o’ option to the ‘set’ builtin (*note The Set Builtin::). - 'shopt' - Shell option names as accepted by the 'shopt' builtin + ‘shopt’ + Shell option names as accepted by the ‘shopt’ builtin (*note Bash Builtins::). - 'signal' + ‘signal’ Signal names. - 'stopped' + ‘stopped’ Names of stopped jobs, if job control is active. - 'user' - User names. May also be specified as '-u'. + ‘user’ + User names. May also be specified as ‘-u’. - 'variable' + ‘variable’ Names of all shell variables. May also be specified as - '-v'. + ‘-v’. - '-C COMMAND' + ‘-C COMMAND’ COMMAND is executed in a subshell environment, and its output is used as the possible completions. Arguments are passed as - with the '-F' option. + with the ‘-F’ option. - '-F FUNCTION' + ‘-F FUNCTION’ The shell function FUNCTION is executed in the current shell environment. When it is executed, $1 is the name of the command whose arguments are being completed, $2 is the word being completed, and $3 is the word preceding the word being completed, as described above (*note Programmable Completion::). When it finishes, the possible completions are - retrieved from the value of the 'COMPREPLY' array variable. + retrieved from the value of the ‘COMPREPLY’ array variable. - '-G GLOBPAT' + ‘-G GLOBPAT’ The filename expansion pattern GLOBPAT is expanded to generate the possible completions. - '-P PREFIX' + ‘-P PREFIX’ PREFIX is added at the beginning of each possible completion after all other options have been applied. - '-S SUFFIX' + ‘-S SUFFIX’ SUFFIX is appended to each possible completion after all other options have been applied. - '-W WORDLIST' - The WORDLIST is split using the characters in the 'IFS' + ‘-W WORDLIST’ + The WORDLIST is split using the characters in the ‘IFS’ special variable as delimiters, and each resultant word is expanded. The possible completions are the members of the resultant list which match the word being completed. - '-X FILTERPAT' + ‘-X FILTERPAT’ FILTERPAT is a pattern as used for filename expansion. It is applied to the list of possible completions generated by the preceding options and arguments, and each completion matching - FILTERPAT is removed from the list. A leading '!' in + FILTERPAT is removed from the list. A leading ‘!’ in FILTERPAT negates the pattern; in this case, any completion not matching FILTERPAT is removed. The return value is true unless an invalid option is supplied, an - option other than '-p' or '-r' is supplied without a NAME argument, - an attempt is made to remove a completion specification for a NAME - for which no specification exists, or an error occurs adding a - completion specification. + option other than ‘-p’, ‘-r’, ‘-D’, ‘-E’, or ‘-I’ is supplied + without a NAME argument, an attempt is made to remove a completion + specification for a NAME for which no specification exists, or an + error occurs adding a completion specification. -'compopt' +‘compopt’ compopt [-o OPTION] [-DEI] [+o OPTION] [NAME] Modify completion options for each NAME according to the OPTIONs, or for the currently-executing completion if no NAMEs are supplied. If no OPTIONs are given, display the completion options for each NAME or the current completion. The possible values of OPTION are - those valid for the 'complete' builtin described above. The '-D' + those valid for the ‘complete’ builtin described above. The ‘-D’ option indicates that other supplied options should apply to the "default" command completion; that is, completion attempted on a command for which no completion has previously been defined. The - '-E' option indicates that other supplied options should apply to + ‘-E’ option indicates that other supplied options should apply to "empty" command completion; that is, completion attempted on a - blank line. The '-I' option indicates that other supplied options + blank line. The ‘-I’ option indicates that other supplied options should apply to completion on the initial non-assignment word on - the line, or after a command delimiter such as ';' or '|', which is + the line, or after a command delimiter such as ‘;’ or ‘|’, which is usually command name completion. - If multiple options are supplied, the '-D' option takes precedence - over '-E', and both take precedence over '-I' + If multiple options are supplied, the ‘-D’ option takes precedence + over ‘-E’, and both take precedence over ‘-I’ The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a NAME for which no @@ -9799,23 +10158,23 @@ File: bashref.info, Node: A Programmable Completion Example, Prev: Programmabl ===================================== The most common way to obtain additional completion functionality beyond -the default actions 'complete' and 'compgen' provide is to use a shell -function and bind it to a particular command using 'complete -F'. +the default actions ‘complete’ and ‘compgen’ provide is to use a shell +function and bind it to a particular command using ‘complete -F’. - The following function provides completions for the 'cd' builtin. It + The following function provides completions for the ‘cd’ builtin. It is a reasonably good example of what shell functions must do when used -for completion. This function uses the word passed as '$2' to determine -the directory name to complete. You can also use the 'COMP_WORDS' array -variable; the current word is indexed by the 'COMP_CWORD' variable. +for completion. This function uses the word passed as ‘$2’ to determine +the directory name to complete. You can also use the ‘COMP_WORDS’ array +variable; the current word is indexed by the ‘COMP_CWORD’ variable. - The function relies on the 'complete' and 'compgen' builtins to do -much of the work, adding only the things that the Bash 'cd' does beyond + The function relies on the ‘complete’ and ‘compgen’ builtins to do +much of the work, adding only the things that the Bash ‘cd’ does beyond accepting basic directory names: tilde expansion (*note Tilde Expansion::), searching directories in $CDPATH, which is described above -(*note Bourne Shell Builtins::), and basic support for the 'cdable_vars' -shell option (*note The Shopt Builtin::). '_comp_cd' modifies the value +(*note Bourne Shell Builtins::), and basic support for the ‘cdable_vars’ +shell option (*note The Shopt Builtin::). ‘_comp_cd’ modifies the value of IFS so that it contains only a newline to accommodate file names -containing spaces and tabs - 'compgen' prints the possible completions +containing spaces and tabs - ‘compgen’ prints the possible completions it generates one per line. Possible completions go into the COMPREPLY array variable, one @@ -9869,8 +10228,8 @@ retrieves the completions from there when the function returns. return 0 } - We install the completion function using the '-F' option to -'complete': + We install the completion function using the ‘-F’ option to +‘complete’: # Tell readline to quote appropriate and append slashes to directories; # use the bash default completion for other arguments @@ -9878,22 +10237,22 @@ retrieves the completions from there when the function returns. Since we'd like Bash and Readline to take care of some of the other details for us, we use several other options to tell Bash and Readline -what to do. The '-o filenames' option tells Readline that the possible +what to do. The ‘-o filenames’ option tells Readline that the possible completions should be treated as filenames, and quoted appropriately. That option will also cause Readline to append a slash to filenames it can determine are directories (which is why we might want to extend -'_comp_cd' to append a slash if we're using directories found via -CDPATH: Readline can't tell those completions are directories). The '-o -nospace' option tells Readline to not append a space character to the -directory name, in case we want to append to it. The '-o bashdefault' +‘_comp_cd’ to append a slash if we're using directories found via +CDPATH: Readline can't tell those completions are directories). The ‘-o +nospace’ option tells Readline to not append a space character to the +directory name, in case we want to append to it. The ‘-o bashdefault’ option brings in the rest of the "Bash default" completions - possible completions that Bash adds to the default Readline set. These include things like command name completion, variable completion for words -beginning with '$' or '${', completions containing pathname expansion +beginning with ‘$’ or ‘${’, completions containing pathname expansion patterns (*note Filename Expansion::), and so on. - Once installed using 'complete', '_comp_cd' will be called every time -we attempt word completion for a 'cd' command. + Once installed using ‘complete’, ‘_comp_cd’ will be called every time +we attempt word completion for a ‘cd’ command. Many more examples - an extensive collection of completions for most of the common GNU, Unix, and Linux commands - are available as part of @@ -9903,7 +10262,7 @@ project now lives at <https://github.com/scop/bash-completion/>. There are ports for other systems such as Solaris and Mac OS X. An older version of the bash_completion package is distributed with -bash in the 'examples/complete' subdirectory. +bash in the ‘examples/complete’ subdirectory.  File: bashref.info, Node: Using History Interactively, Next: Installing Bash, Prev: Command Line Editing, Up: Top @@ -9930,52 +10289,52 @@ File: bashref.info, Node: Bash History Facilities, Next: Bash History Builtins 9.1 Bash History Facilities =========================== -When the '-o history' option to the 'set' builtin is enabled (*note The -Set Builtin::), the shell provides access to the "command history", the -list of commands previously typed. The value of the 'HISTSIZE' shell +When the ‘-o history’ option to the ‘set’ builtin is enabled (*note The +Set Builtin::), the shell provides access to the “command history”, the +list of commands previously typed. The value of the ‘HISTSIZE’ shell variable is used as the number of commands to save in a history list. -The text of the last '$HISTSIZE' commands (default 500) is saved. The +The text of the last ‘$HISTSIZE’ commands (default 500) is saved. The shell stores each command in the history list prior to parameter and variable expansion but after history expansion is performed, subject to -the values of the shell variables 'HISTIGNORE' and 'HISTCONTROL'. +the values of the shell variables ‘HISTIGNORE’ and ‘HISTCONTROL’. When the shell starts up, the history is initialized from the file -named by the 'HISTFILE' variable (default '~/.bash_history'). The file -named by the value of 'HISTFILE' is truncated, if necessary, to contain +named by the ‘HISTFILE’ variable (default ‘~/.bash_history’). The file +named by the value of ‘HISTFILE’ is truncated, if necessary, to contain no more than the number of lines specified by the value of the -'HISTFILESIZE' variable. When a shell with history enabled exits, the -last '$HISTSIZE' lines are copied from the history list to the file -named by '$HISTFILE'. If the 'histappend' shell option is set (*note +‘HISTFILESIZE’ variable. When a shell with history enabled exits, the +last ‘$HISTSIZE’ lines are copied from the history list to the file +named by ‘$HISTFILE’. If the ‘histappend’ shell option is set (*note Bash Builtins::), the lines are appended to the history file, otherwise -the history file is overwritten. If 'HISTFILE' is unset, or if the -history file is unwritable, the history is not saved. After saving the -history, the history file is truncated to contain no more than -'$HISTFILESIZE' lines. If 'HISTFILESIZE' is unset, or set to null, a +the history file is overwritten. If ‘HISTFILE’ is unset or null, or if +the history file is unwritable, the history is not saved. After saving +the history, the history file is truncated to contain no more than +‘$HISTFILESIZE’ lines. If ‘HISTFILESIZE’ is unset, or set to null, a non-numeric value, or a numeric value less than zero, the history file is not truncated. - If the 'HISTTIMEFORMAT' is set, the time stamp information associated + If the ‘HISTTIMEFORMAT’ is set, the time stamp information associated with each history entry is written to the history file, marked with the history comment character. When the history file is read, lines beginning with the history comment character followed immediately by a digit are interpreted as timestamps for the following history entry. - The builtin command 'fc' may be used to list or edit and re-execute a -portion of the history list. The 'history' builtin may be used to + The ‘fc’ builtin command may be used to list or edit and re-execute a +portion of the history list. The ‘history’ builtin may be used to display or modify the history list and manipulate the history file. When using command-line editing, search commands are available in each editing mode that provide access to the history list (*note Commands For History::). The shell allows control over which commands are saved on the history -list. The 'HISTCONTROL' and 'HISTIGNORE' variables may be set to cause -the shell to save only a subset of the commands entered. The 'cmdhist' +list. The ‘HISTCONTROL’ and ‘HISTIGNORE’ variables are used to cause +the shell to save only a subset of the commands entered. The ‘cmdhist’ shell option, if enabled, causes the shell to attempt to save each line of a multi-line command in the same history entry, adding semicolons -where necessary to preserve syntactic correctness. The 'lithist' shell +where necessary to preserve syntactic correctness. The ‘lithist’ shell option causes the shell to save the command with embedded newlines -instead of semicolons. The 'shopt' builtin is used to set these -options. *Note The Shopt Builtin::, for a description of 'shopt'. +instead of semicolons. The ‘shopt’ builtin is used to set these +options. *Note The Shopt Builtin::, for a description of ‘shopt’.  File: bashref.info, Node: Bash History Builtins, Next: History Interaction, Prev: Bash History Facilities, Up: Using History Interactively @@ -9986,7 +10345,7 @@ File: bashref.info, Node: Bash History Builtins, Next: History Interaction, P Bash provides two builtin commands which manipulate the history list and history file. -'fc' +‘fc’ fc [-e ENAME] [-lnr] [FIRST] [LAST] fc -s [PAT=REP] [COMMAND] @@ -9998,19 +10357,19 @@ history file. from the current command number). When listing, a FIRST or LAST of 0 is equivalent to -1 and -0 is - equivalent to the current command (usually the 'fc' command); + equivalent to the current command (usually the ‘fc’ command); otherwise 0 is equivalent to -1 and -0 is invalid. If LAST is not specified, it is set to FIRST. If FIRST is not - specified, it is set to the previous command for editing and -16 - for listing. If the '-l' flag is given, the commands are listed on - standard output. The '-n' flag suppresses the command numbers when - listing. The '-r' flag reverses the order of the listing. + specified, it is set to the previous command for editing and −16 + for listing. If the ‘-l’ flag is given, the commands are listed on + standard output. The ‘-n’ flag suppresses the command numbers when + listing. The ‘-r’ flag reverses the order of the listing. Otherwise, the editor given by ENAME is invoked on a file containing those commands. If ENAME is not given, the value of the - following variable expansion is used: '${FCEDIT:-${EDITOR:-vi}}'. - This says to use the value of the 'FCEDIT' variable if set, or the - value of the 'EDITOR' variable if that is set, or 'vi' if neither + following variable expansion is used: ‘${FCEDIT:-${EDITOR:-vi}}’. + This says to use the value of the ‘FCEDIT’ variable if set, or the + value of the ‘EDITOR’ variable if that is set, or ‘vi’ if neither is set. When editing is complete, the edited commands are echoed and executed. @@ -10018,11 +10377,11 @@ history file. PAT in the selected command is replaced by REP. COMMAND is interpreted the same as FIRST above. - A useful alias to use with the 'fc' command is 'r='fc -s'', so that - typing 'r cc' runs the last command beginning with 'cc' and typing - 'r' re-executes the last command (*note Aliases::). + A useful alias to use with the ‘fc’ command is ‘r='fc -s'’, so that + typing ‘r cc’ runs the last command beginning with ‘cc’ and typing + ‘r’ re-executes the last command (*note Aliases::). -'history' +‘history’ history [N] history -c history -d OFFSET @@ -10031,68 +10390,69 @@ history file. history -ps ARG With no options, display the history list with line numbers. Lines - prefixed with a '*' have been modified. An argument of N lists - only the last N lines. If the shell variable 'HISTTIMEFORMAT' is - set and not null, it is used as a format string for STRFTIME to - display the time stamp associated with each displayed history + prefixed with a ‘*’ have been modified. An argument of N lists + only the last N lines. If the shell variable ‘HISTTIMEFORMAT’ is + set and not null, it is used as a format string for ‘strftime’(3) + to display the time stamp associated with each displayed history entry. No intervening blank is printed between the formatted time stamp and the history line. Options, if supplied, have the following meanings: - '-c' + ‘-c’ Clear the history list. This may be combined with the other options to replace the history list completely. - '-d OFFSET' + ‘-d OFFSET’ Delete the history entry at position OFFSET. If OFFSET is positive, it should be specified as it appears when the history is displayed. If OFFSET is negative, it is interpreted as relative to one greater than the last history position, so negative indices count back from the end of the - history, and an index of '-1' refers to the current 'history - -d' command. + history, and an index of ‘-1’ refers to the current ‘history + -d’ command. - '-d START-END' + ‘-d START-END’ Delete the range of history entries between positions START and END, inclusive. Positive and negative values for START and END are interpreted as described above. - '-a' + ‘-a’ Append the new history lines to the history file. These are history lines entered since the beginning of the current Bash session, but not already appended to the history file. - '-n' + ‘-n’ Append the history lines not already read from the history file to the current history list. These are lines appended to the history file since the beginning of the current Bash session. - '-r' + ‘-r’ Read the history file and append its contents to the history list. - '-w' + ‘-w’ Write out the current history list to the history file. - '-p' + ‘-p’ Perform history substitution on the ARGs and display the result on the standard output, without storing the results in the history list. - '-s' + ‘-s’ The ARGs are added to the end of the history list as a single entry. - If a FILENAME argument is supplied when any of the '-w', '-r', - '-a', or '-n' options is used, Bash uses FILENAME as the history - file. If not, then the value of the 'HISTFILE' variable is used. + If a FILENAME argument is supplied when any of the ‘-w’, ‘-r’, + ‘-a’, or ‘-n’ options is used, Bash uses FILENAME as the history + file. If not, then the value of the ‘HISTFILE’ variable is used. + If ‘HISTFILE’ is unset or null, these options have no effect. The return value is 0 unless an invalid option is encountered, an error occurs while reading or writing the history file, an invalid - OFFSET or range is supplied as an argument to '-d', or the history - expansion supplied as an argument to '-p' fails. + OFFSET or range is supplied as an argument to ‘-d’, or the history + expansion supplied as an argument to ‘-p’ fails.  File: bashref.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively @@ -10101,7 +10461,7 @@ File: bashref.info, Node: History Interaction, Prev: Bash History Builtins, U ===================== The History library provides a history expansion feature that is similar -to the history expansion provided by 'csh'. This section describes the +to the history expansion provided by ‘csh’. This section describes the syntax used to manipulate the history information. History expansions introduce words from the history list into the @@ -10117,13 +10477,19 @@ functions about quoting still in effect from previous lines. History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for -inclusion into the current one. The line selected from the history is -called the "event", and the portions of that line that are acted upon -are called "words". Various "modifiers" are available to manipulate the -selected words. The line is broken into words in the same fashion that -Bash does, so that several words surrounded by quotes are considered one -word. History expansions are introduced by the appearance of the -history expansion character, which is '!' by default. +inclusion into the current one. + + The line selected from the history is called the “event”, and the +portions of that line that are acted upon are called “words”. The line +is broken into words in the same fashion that Bash does, so that several +words surrounded by quotes are considered one word. The “event +designator” selects the event, the optional “word designator” selects +words from the event, and various optional “modifiers” are available to +manipulate the selected words. + + History expansions are introduced by the appearance of the history +expansion character, which is ‘!’ by default. History expansions may +appear anywhere in the input, but do not nest. History expansion implements shell-like quoting conventions: a backslash can be used to remove the special handling for the next @@ -10133,27 +10499,35 @@ double quotes may be subject to history expansion, since backslash can escape the history expansion character, but single quotes may not, since they are not treated specially within double quotes. - When using the shell, only '\' and ''' may be used to escape the + When using the shell, only ‘\’ and ‘'’ may be used to escape the history expansion character, but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string. - Several shell options settable with the 'shopt' builtin (*note The + There is a special abbreviation for substitution, active when the +QUICK SUBSTITUTION character (default ‘^’) is the first character on the +line. It selects the previous history list entry, using an event +designator equivalent to ‘!!’, and substitutes one string for another in +that line. It is described below (*note Event Designators::). This is +the only history expansion that does not begin with the history +expansion character. + + Several shell options settable with the ‘shopt’ builtin (*note The Shopt Builtin::) may be used to tailor the behavior of history -expansion. If the 'histverify' shell option is enabled, and Readline is +expansion. If the ‘histverify’ shell option is enabled, and Readline is being used, history substitutions are not immediately passed to the shell parser. Instead, the expanded line is reloaded into the Readline editing buffer for further modification. If Readline is being used, and -the 'histreedit' shell option is enabled, a failed history expansion +the ‘histreedit’ shell option is enabled, a failed history expansion will be reloaded into the Readline editing buffer for correction. The -'-p' option to the 'history' builtin command may be used to see what a -history expansion will do before using it. The '-s' option to the -'history' builtin may be used to add commands to the end of the history +‘-p’ option to the ‘history’ builtin command may be used to see what a +history expansion will do before using it. The ‘-s’ option to the +‘history’ builtin may be used to add commands to the end of the history list without actually executing them, so that they are available for subsequent recall. This is most useful in conjunction with Readline. The shell allows control of the various characters used by the -history expansion mechanism with the 'histchars' variable, as explained +history expansion mechanism with the ‘histchars’ variable, as explained above (*note Bash Variables::). The shell uses the history comment character to mark history timestamps when writing the history file. @@ -10171,38 +10545,41 @@ File: bashref.info, Node: Event Designators, Next: Word Designators, Up: Hist An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to -the current position in the history list. +the current position in the history list. The event designator consists +of the portion of the word beginning with the history expansion +character, and ending with the word designator if one is present, or the +end of the word. -'!' +‘!’ Start a history substitution, except when followed by a space, tab, - the end of the line, '=' or '(' (when the 'extglob' shell option is - enabled using the 'shopt' builtin). + the end of the line, ‘=’, or the rest of the shell metacharacters + defined above (*note Definitions::). -'!N' +‘!N’ Refer to command line N. -'!-N' +‘!-N’ Refer to the command N lines back. -'!!' - Refer to the previous command. This is a synonym for '!-1'. +‘!!’ + Refer to the previous command. This is a synonym for ‘!-1’. -'!STRING' +‘!STRING’ Refer to the most recent command preceding the current position in the history list starting with STRING. -'!?STRING[?]' +‘!?STRING[?]’ Refer to the most recent command preceding the current position in - the history list containing STRING. The trailing '?' may be + the history list containing STRING. The trailing ‘?’ may be omitted if the STRING is followed immediately by a newline. If STRING is missing, the string from the most recent search is used; it is an error if there is no previous search string. -'^STRING1^STRING2^' +‘^STRING1^STRING2^’ Quick Substitution. Repeat the last command, replacing STRING1 - with STRING2. Equivalent to '!!:s^STRING1^STRING2^'. + with STRING2. Equivalent to ‘!!:s^STRING1^STRING2^’. -'!#' +‘!#’ The entire command line typed so far.  @@ -10211,58 +10588,60 @@ File: bashref.info, Node: Word Designators, Next: Modifiers, Prev: Event Desi 9.3.2 Word Designators ---------------------- -Word designators are used to select desired words from the event. A ':' -separates the event specification from the word designator. It may be -omitted if the word designator begins with a '^', '$', '*', '-', or '%'. -Words are numbered from the beginning of the line, with the first word -being denoted by 0 (zero). Words are inserted into the current line -separated by single spaces. +Word designators are used to select desired words from the event. They +are optional; if the word designator isn't supplied, the history +expansion uses the entire event. A ‘:’ separates the event +specification from the word designator. It may be omitted if the word +designator begins with a ‘^’, ‘$’, ‘*’, ‘-’, or ‘%’. Words are numbered +from the beginning of the line, with the first word being denoted by 0 +(zero). Words are inserted into the current line separated by single +spaces. For example, -'!!' +‘!!’ designates the preceding command. When you type this, the preceding command is repeated in toto. -'!!:$' +‘!!:$’ designates the last argument of the preceding command. This may be - shortened to '!$'. + shortened to ‘!$’. -'!fi:2' +‘!fi:2’ designates the second argument of the most recent command starting - with the letters 'fi'. + with the letters ‘fi’. Here are the word designators: -'0 (zero)' - The '0'th word. For many applications, this is the command word. +‘0 (zero)’ + The ‘0’th word. For many applications, this is the command word. -'N' +‘N’ The Nth word. -'^' +‘^’ The first argument; that is, word 1. -'$' +‘$’ The last argument. -'%' - The first word matched by the most recent '?STRING?' search, if the +‘%’ + The first word matched by the most recent ‘?STRING?’ search, if the search string begins with a character that is part of a word. -'X-Y' - A range of words; '-Y' abbreviates '0-Y'. +‘X-Y’ + A range of words; ‘-Y’ abbreviates ‘0-Y’. -'*' - All of the words, except the '0'th. This is a synonym for '1-$'. - It is not an error to use '*' if there is just one word in the +‘*’ + All of the words, except the ‘0’th. This is a synonym for ‘1-$’. + It is not an error to use ‘*’ if there is just one word in the event; the empty string is returned in that case. -'X*' - Abbreviates 'X-$' +‘X*’ + Abbreviates ‘X-$’ -'X-' - Abbreviates 'X-$' like 'X*', but omits the last word. If 'x' is +‘X-’ + Abbreviates ‘X-$’ like ‘X*’, but omits the last word. If ‘x’ is missing, it defaults to 0. If a word designator is supplied without an event specification, the @@ -10275,54 +10654,54 @@ File: bashref.info, Node: Modifiers, Prev: Word Designators, Up: History Inte --------------- After the optional word designator, you can add a sequence of one or -more of the following modifiers, each preceded by a ':'. These modify, +more of the following modifiers, each preceded by a ‘:’. These modify, or edit, the word or words selected from the history event. -'h' +‘h’ Remove a trailing pathname component, leaving only the head. -'t' +‘t’ Remove all leading pathname components, leaving the tail. -'r' - Remove a trailing suffix of the form '.SUFFIX', leaving the +‘r’ + Remove a trailing suffix of the form ‘.SUFFIX’, leaving the basename. -'e' +‘e’ Remove all but the trailing suffix. -'p' +‘p’ Print the new command but do not execute it. -'q' +‘q’ Quote the substituted words, escaping further substitutions. -'x' - Quote the substituted words as with 'q', but break into words at - spaces, tabs, and newlines. The 'q' and 'x' modifiers are mutually +‘x’ + Quote the substituted words as with ‘q’, but break into words at + spaces, tabs, and newlines. The ‘q’ and ‘x’ modifiers are mutually exclusive; the last one supplied is used. -'s/OLD/NEW/' +‘s/OLD/NEW/’ Substitute NEW for the first occurrence of OLD in the event line. - Any character may be used as the delimiter in place of '/'. The + Any character may be used as the delimiter in place of ‘/’. The delimiter may be quoted in OLD and NEW with a single backslash. If - '&' appears in NEW, it is replaced by OLD. A single backslash will - quote the '&'. If OLD is null, it is set to the last OLD + ‘&’ appears in NEW, it is replaced by OLD. A single backslash will + quote the ‘&’. If OLD is null, it is set to the last OLD substituted, or, if no previous history substitutions took place, - the last STRING in a !?STRING'[?]' search. If NEW is null, each + the last STRING in a !?STRING‘[?]’ search. If NEW is null, each matching OLD is deleted. The final delimiter is optional if it is the last character on the input line. -'&' +‘&’ Repeat the previous substitution. -'g' -'a' +‘g’ +‘a’ Cause changes to be applied over the entire event line. Used in - conjunction with 's', as in 'gs/OLD/NEW/', or with '&'. + conjunction with ‘s’, as in ‘gs/OLD/NEW/’, or with ‘&’. -'G' - Apply the following 's' or '&' modifier once to each word in the +‘G’ + Apply the following ‘s’ or ‘&’ modifier once to each word in the event.  @@ -10363,45 +10742,45 @@ These are installation instructions for Bash. The simplest way to compile Bash is: - 1. 'cd' to the directory containing the source code and type - './configure' to configure Bash for your system. If you're using - 'csh' on an old version of System V, you might need to type 'sh - ./configure' instead to prevent 'csh' from trying to execute - 'configure' itself. + 1. ‘cd’ to the directory containing the source code and type + ‘./configure’ to configure Bash for your system. If you're using + ‘csh’ on an old version of System V, you might need to type ‘sh + ./configure’ instead to prevent ‘csh’ from trying to execute + ‘configure’ itself. - Running 'configure' takes some time. While running, it prints + Running ‘configure’ takes some time. While running, it prints messages telling which features it is checking for. - 2. Type 'make' to compile Bash and build the 'bashbug' bug reporting + 2. Type ‘make’ to compile Bash and build the ‘bashbug’ bug reporting script. - 3. Optionally, type 'make tests' to run the Bash test suite. + 3. Optionally, type ‘make tests’ to run the Bash test suite. - 4. Type 'make install' to install 'bash' and 'bashbug'. This will + 4. Type ‘make install’ to install ‘bash’ and ‘bashbug’. This will also install the manual pages and Info file, message translation files, some supplemental documentation, a number of example loadable builtin commands, and a set of header files for developing loadable builtins. You may need additional privileges to install - 'bash' to your desired destination, so 'sudo make install' might be + ‘bash’ to your desired destination, so ‘sudo make install’ might be required. More information about controlling the locations where - 'bash' and other files are installed is below (*note Installation + ‘bash’ and other files are installed is below (*note Installation Names::). - The 'configure' shell script attempts to guess correct values for + The ‘configure’ shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses -those values to create a 'Makefile' in each directory of the package -(the top directory, the 'builtins', 'doc', 'po', and 'support' -directories, each directory under 'lib', and several others). It also -creates a 'config.h' file containing system-dependent definitions. -Finally, it creates a shell script named 'config.status' that you can +those values to create a ‘Makefile’ in each directory of the package +(the top directory, the ‘builtins’, ‘doc’, ‘po’, and ‘support’ +directories, each directory under ‘lib’, and several others). It also +creates a ‘config.h’ file containing system-dependent definitions. +Finally, it creates a shell script named ‘config.status’ that you can run in the future to recreate the current configuration, a file -'config.cache' that saves the results of its tests to speed up -reconfiguring, and a file 'config.log' containing compiler output -(useful mainly for debugging 'configure'). If at some point -'config.cache' contains results you don't want to keep, you may remove +‘config.cache’ that saves the results of its tests to speed up +reconfiguring, and a file ‘config.log’ containing compiler output +(useful mainly for debugging ‘configure’). If at some point +‘config.cache’ contains results you don't want to keep, you may remove or edit it. - To find out more about the options and arguments that the 'configure' + To find out more about the options and arguments that the ‘configure’ script understands, type bash-4.2$ ./configure --help @@ -10411,8 +10790,8 @@ at the Bash prompt in your Bash source directory. If you want to build Bash in a directory separate from the source directory - to build for multiple architectures, for example - just use the full path to the configure script. The following commands will -build bash in a directory under '/usr/local/build' from the source code -in '/usr/local/src/bash-4.4': +build Bash in a directory under ‘/usr/local/build’ from the source code +in ‘/usr/local/src/bash-4.4’: mkdir /usr/local/build/bash-4.4 cd /usr/local/build/bash-4.4 @@ -10423,19 +10802,19 @@ in '/usr/local/src/bash-4.4': about building in a directory separate from the source. If you need to do unusual things to compile Bash, please try to -figure out how 'configure' could check whether or not to do them, and +figure out how ‘configure’ could check whether or not to do them, and mail diffs or instructions to <bash-maintainers@gnu.org> so they can be considered for the next release. - The file 'configure.ac' is used to create 'configure' by a program -called Autoconf. You only need 'configure.ac' if you want to change it -or regenerate 'configure' using a newer version of Autoconf. If you do + The file ‘configure.ac’ is used to create ‘configure’ by a program +called Autoconf. You only need ‘configure.ac’ if you want to change it +or regenerate ‘configure’ using a newer version of Autoconf. If you do this, make sure you are using Autoconf version 2.69 or newer. You can remove the program binaries and object files from the source -code directory by typing 'make clean'. To also remove the files that -'configure' created (so you can compile Bash for a different kind of -computer), type 'make distclean'. +code directory by typing ‘make clean’. To also remove the files that +‘configure’ created (so you can compile Bash for a different kind of +computer), type ‘make distclean’.  File: bashref.info, Node: Compilers and Options, Next: Compiling For Multiple Architectures, Prev: Basic Installation, Up: Installing Bash @@ -10444,14 +10823,14 @@ File: bashref.info, Node: Compilers and Options, Next: Compiling For Multiple ========================== Some systems require unusual options for compilation or linking that the -'configure' script does not know about. You can give 'configure' +‘configure’ script does not know about. You can give ‘configure’ initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure - On systems that have the 'env' program, you can do it like this: + On systems that have the ‘env’ program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure @@ -10465,29 +10844,29 @@ File: bashref.info, Node: Compiling For Multiple Architectures, Next: Installa You can compile Bash for more than one kind of computer at the same time, by placing the object files for each architecture in their own -directory. To do this, you must use a version of 'make' that supports -the 'VPATH' variable, such as GNU 'make'. 'cd' to the directory where -you want the object files and executables to go and run the 'configure' +directory. To do this, you must use a version of ‘make’ that supports +the ‘VPATH’ variable, such as GNU ‘make’. ‘cd’ to the directory where +you want the object files and executables to go and run the ‘configure’ script from the source directory (*note Basic Installation::). You may -need to supply the '--srcdir=PATH' argument to tell 'configure' where -the source files are. 'configure' automatically checks for the source -code in the directory that 'configure' is in and in '..'. +need to supply the ‘--srcdir=PATH’ argument to tell ‘configure’ where +the source files are. ‘configure’ automatically checks for the source +code in the directory that ‘configure’ is in and in '..'. - If you have to use a 'make' that does not support the 'VPATH' + If you have to use a ‘make’ that does not support the ‘VPATH’ variable, you can compile Bash for one architecture at a time in the source code directory. After you have installed Bash for one -architecture, use 'make distclean' before reconfiguring for another +architecture, use ‘make distclean’ before reconfiguring for another architecture. Alternatively, if your system supports symbolic links, you can use -the 'support/mkclone' script to create a build tree which has symbolic +the ‘support/mkclone’ script to create a build tree which has symbolic links back to each file in the source directory. Here's an example that creates a build directory in the current directory from a source -directory '/usr/gnu/src/bash-2.0': +directory ‘/usr/gnu/src/bash-2.0’: bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 . -The 'mkclone' script requires Bash, so you must have already built Bash +The ‘mkclone’ script requires Bash, so you must have already built Bash for at least one architecture before you can create build directories for other architectures. @@ -10497,41 +10876,41 @@ File: bashref.info, Node: Installation Names, Next: Specifying the System Type 10.4 Installation Names ======================= -By default, 'make install' will install into '/usr/local/bin', -'/usr/local/man', etc.; that is, the "installation prefix" defaults to -'/usr/local'. You can specify an installation prefix other than -'/usr/local' by giving 'configure' the option '--prefix=PATH', or by -specifying a value for the 'prefix' 'make' variable when running 'make -install' (e.g., 'make install prefix=PATH'). The 'prefix' variable -provides a default for 'exec_prefix' and other variables used when -installing bash. +By default, ‘make install’ will install into ‘/usr/local/bin’, +‘/usr/local/man’, etc.; that is, the “installation prefix” defaults to +‘/usr/local’. You can specify an installation prefix other than +‘/usr/local’ by giving ‘configure’ the option ‘--prefix=PATH’, or by +specifying a value for the ‘prefix’ ‘make’ variable when running ‘make +install’ (e.g., ‘make install prefix=PATH’). The ‘prefix’ variable +provides a default for ‘exec_prefix’ and other variables used when +installing Bash. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -give 'configure' the option '--exec-prefix=PATH', 'make install' will +give ‘configure’ the option ‘--exec-prefix=PATH’, ‘make install’ will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. If you would like to change the installation locations for a single -run, you can specify these variables as arguments to 'make': 'make -install exec_prefix=/' will install 'bash' and 'bashbug' into '/bin' -instead of the default '/usr/local/bin'. +run, you can specify these variables as arguments to ‘make’: ‘make +install exec_prefix=/’ will install ‘bash’ and ‘bashbug’ into ‘/bin’ +instead of the default ‘/usr/local/bin’. - If you want to see the files bash will install and where it will + If you want to see the files Bash will install and where it will install them without changing anything on your system, specify the -variable 'DESTDIR' as an argument to 'make'. Its value should be the +variable ‘DESTDIR’ as an argument to ‘make’. Its value should be the absolute directory path you'd like to use as the root of your sample installation tree. For example, mkdir /fs1/bash-install make install DESTDIR=/fs1/bash-install -will install 'bash' into '/fs1/bash-install/usr/local/bin/bash', the +will install ‘bash’ into ‘/fs1/bash-install/usr/local/bin/bash’, the documentation into directories within -'/fs1/bash-install/usr/local/share', the example loadable builtins into -'/fs1/bash-install/usr/local/lib/bash', and so on. You can use the -usual 'exec_prefix' and 'prefix' variables to alter the directory paths -beneath the value of 'DESTDIR'. +‘/fs1/bash-install/usr/local/share’, the example loadable builtins into +‘/fs1/bash-install/usr/local/lib/bash’, and so on. You can use the +usual ‘exec_prefix’ and ‘prefix’ variables to alter the directory paths +beneath the value of ‘DESTDIR’. The GNU Makefile standards provide a more complete description of these variables and their effects. @@ -10542,15 +10921,15 @@ File: bashref.info, Node: Specifying the System Type, Next: Sharing Defaults, 10.5 Specifying the System Type =============================== -There may be some features 'configure' can not figure out automatically, +There may be some features ‘configure’ can not figure out automatically, but needs to determine by the type of host Bash will run on. Usually -'configure' can figure that out, but if it prints a message saying it -can not guess the host type, give it the '--host=TYPE' option. 'TYPE' -can either be a short name for the system type, such as 'sun4', or a -canonical name with three fields: 'CPU-COMPANY-SYSTEM' (e.g., -'i386-unknown-freebsd4.2'). +‘configure’ can figure that out, but if it prints a message saying it +can not guess the host type, give it the ‘--host=TYPE’ option. ‘TYPE’ +can either be a short name for the system type, such as ‘sun4’, or a +canonical name with three fields: ‘CPU-COMPANY-SYSTEM’ (e.g., +‘i386-unknown-freebsd4.2’). - See the file 'support/config.sub' for the possible values of each + See the file ‘support/config.sub’ for the possible values of each field.  @@ -10559,14 +10938,14 @@ File: bashref.info, Node: Sharing Defaults, Next: Operation Controls, Prev: S 10.6 Sharing Defaults ===================== -If you want to set default values for 'configure' scripts to share, you -can create a site shell script called 'config.site' that gives default -values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' -looks for 'PREFIX/share/config.site' if it exists, then -'PREFIX/etc/config.site' if it exists. Or, you can set the -'CONFIG_SITE' environment variable to the location of the site script. -A warning: the Bash 'configure' looks for a site script, but not all -'configure' scripts do. +If you want to set default values for ‘configure’ scripts to share, you +can create a site shell script called ‘config.site’ that gives default +values for variables like ‘CC’, ‘cache_file’, and ‘prefix’. ‘configure’ +looks for ‘PREFIX/share/config.site’ if it exists, then +‘PREFIX/etc/config.site’ if it exists. Or, you can set the +‘CONFIG_SITE’ environment variable to the location of the site script. +A warning: the Bash ‘configure’ looks for a site script, but not all +‘configure’ scripts do.  File: bashref.info, Node: Operation Controls, Next: Optional Features, Prev: Sharing Defaults, Up: Installing Bash @@ -10574,31 +10953,31 @@ File: bashref.info, Node: Operation Controls, Next: Optional Features, Prev: 10.7 Operation Controls ======================= -'configure' recognizes the following options to control how it operates. +‘configure’ recognizes the following options to control how it operates. -'--cache-file=FILE' +‘--cache-file=FILE’ Use and save the results of the tests in FILE instead of - './config.cache'. Set FILE to '/dev/null' to disable caching, for - debugging 'configure'. + ‘./config.cache’. Set FILE to ‘/dev/null’ to disable caching, for + debugging ‘configure’. -'--help' - Print a summary of the options to 'configure', and exit. +‘--help’ + Print a summary of the options to ‘configure’, and exit. -'--quiet' -'--silent' -'-q' +‘--quiet’ +‘--silent’ +‘-q’ Do not print messages saying which checks are being made. -'--srcdir=DIR' +‘--srcdir=DIR’ Look for the Bash source code in directory DIR. Usually - 'configure' can determine that directory automatically. + ‘configure’ can determine that directory automatically. -'--version' - Print the version of Autoconf used to generate the 'configure' +‘--version’ + Print the version of Autoconf used to generate the ‘configure’ script, and exit. - 'configure' also accepts some other, not widely used, boilerplate -options. 'configure --help' prints the complete list. + ‘configure’ also accepts some other, not widely used, boilerplate +options. ‘configure --help’ prints the complete list.  File: bashref.info, Node: Optional Features, Prev: Operation Controls, Up: Installing Bash @@ -10606,271 +10985,271 @@ File: bashref.info, Node: Optional Features, Prev: Operation Controls, Up: In 10.8 Optional Features ====================== -The Bash 'configure' has a number of '--enable-FEATURE' options, where +The Bash ‘configure’ has a number of ‘--enable-FEATURE’ options, where FEATURE indicates an optional part of Bash. There are also several -'--with-PACKAGE' options, where PACKAGE is something like 'bash-malloc' -or 'purify'. To turn off the default use of a package, use -'--without-PACKAGE'. To configure Bash without a feature that is -enabled by default, use '--disable-FEATURE'. +‘--with-PACKAGE’ options, where PACKAGE is something like ‘bash-malloc’ +or ‘purify’. To turn off the default use of a package, use +‘--without-PACKAGE’. To configure Bash without a feature that is +enabled by default, use ‘--disable-FEATURE’. - Here is a complete list of the '--enable-' and '--with-' options that -the Bash 'configure' recognizes. + Here is a complete list of the ‘--enable-’ and ‘--with-’ options that +the Bash ‘configure’ recognizes. -'--with-afs' +‘--with-afs’ Define if you are using the Andrew File System from Transarc. -'--with-bash-malloc' - Use the Bash version of 'malloc' in the directory 'lib/malloc'. - This is not the same 'malloc' that appears in GNU libc, but an - older version originally derived from the 4.2 BSD 'malloc'. This - 'malloc' is very fast, but wastes some space on each allocation. - This option is enabled by default. The 'NOTES' file contains a +‘--with-bash-malloc’ + Use the Bash version of ‘malloc’ in the directory ‘lib/malloc’. + This is not the same ‘malloc’ that appears in GNU libc, but an + older version originally derived from the 4.2 BSD ‘malloc’. This + ‘malloc’ is very fast, but wastes some space on each allocation. + This option is enabled by default. The ‘NOTES’ file contains a list of systems for which this should be turned off, and - 'configure' disables this option automatically for a number of + ‘configure’ disables this option automatically for a number of systems. -'--with-curses' +‘--with-curses’ Use the curses library instead of the termcap library. This should be supplied if your system has an inadequate or incomplete termcap database. -'--with-gnu-malloc' - A synonym for '--with-bash-malloc'. +‘--with-gnu-malloc’ + A synonym for ‘--with-bash-malloc’. -'--with-installed-readline[=PREFIX]' +‘--with-installed-readline[=PREFIX]’ Define this to make Bash link with a locally-installed version of - Readline rather than the version in 'lib/readline'. This works - only with Readline 5.0 and later versions. If PREFIX is 'yes' or - not supplied, 'configure' uses the values of the make variables - 'includedir' and 'libdir', which are subdirectories of 'prefix' by + Readline rather than the version in ‘lib/readline’. This works + only with Readline 5.0 and later versions. If PREFIX is ‘yes’ or + not supplied, ‘configure’ uses the values of the make variables + ‘includedir’ and ‘libdir’, which are subdirectories of ‘prefix’ by default, to find the installed version of Readline if it is not in the standard system include and library directories. If PREFIX is - 'no', Bash links with the version in 'lib/readline'. If PREFIX is - set to any other value, 'configure' treats it as a directory + ‘no’, Bash links with the version in ‘lib/readline’. If PREFIX is + set to any other value, ‘configure’ treats it as a directory pathname and looks for the installed version of Readline in - subdirectories of that directory (include files in PREFIX/'include' - and the library in PREFIX/'lib'). + subdirectories of that directory (include files in PREFIX/‘include’ + and the library in PREFIX/‘lib’). -'--with-libintl-prefix[=PREFIX]' +‘--with-libintl-prefix[=PREFIX]’ Define this to make Bash link with a locally-installed version of - the libintl library instead of the version in 'lib/intl'. + the libintl library instead of the version in ‘lib/intl’. -'--with-libiconv-prefix[=PREFIX]' +‘--with-libiconv-prefix[=PREFIX]’ Define this to make Bash look for libiconv in PREFIX instead of the standard system locations. There is no version included with Bash. -'--enable-minimal-config' +‘--enable-minimal-config’ This produces a shell with minimal features, close to the historical Bourne shell. - There are several '--enable-' options that alter how Bash is + There are several ‘--enable-’ options that alter how Bash is compiled, linked, and installed, rather than changing run-time features. -'--enable-largefile' +‘--enable-largefile’ Enable support for large files (http://www.unix.org/version2/whatsnew/lfs20mar.html) if the operating system requires special compiler options to build programs which can access large files. This is enabled by default, if the operating system provides large file support. -'--enable-profiling' +‘--enable-profiling’ This builds a Bash binary that produces profiling information to be - processed by 'gprof' each time it is executed. + processed by ‘gprof’ each time it is executed. -'--enable-separate-helpfiles' - Use external files for the documentation displayed by the 'help' +‘--enable-separate-helpfiles’ + Use external files for the documentation displayed by the ‘help’ builtin instead of storing the text internally. -'--enable-static-link' - This causes Bash to be linked statically, if 'gcc' is being used. +‘--enable-static-link’ + This causes Bash to be linked statically, if ‘gcc’ is being used. This could be used to build a version to use as root's shell. - The 'minimal-config' option can be used to disable all of the + The ‘minimal-config’ option can be used to disable all of the following options, but it is processed first, so individual options may -be enabled using 'enable-FEATURE'. +be enabled using ‘enable-FEATURE’. - All of the following options except for 'alt-array-implementation', -'disabled-builtins', 'direxpand-default', 'strict-posix-default', and -'xpg-echo-default' are enabled by default, unless the operating system + All of the following options except for ‘alt-array-implementation’, +‘disabled-builtins’, ‘direxpand-default’, ‘strict-posix-default’, and +‘xpg-echo-default’ are enabled by default, unless the operating system does not provide the necessary support. -'--enable-alias' - Allow alias expansion and include the 'alias' and 'unalias' +‘--enable-alias’ + Allow alias expansion and include the ‘alias’ and ‘unalias’ builtins (*note Aliases::). -'--enable-alt-array-implementation' - This builds bash using an alternate implementation of arrays (*note +‘--enable-alt-array-implementation’ + This builds Bash using an alternate implementation of arrays (*note Arrays::) that provides faster access at the expense of using more memory (sometimes many times more, depending on how sparse an array is). -'--enable-arith-for-command' - Include support for the alternate form of the 'for' command that - behaves like the C language 'for' statement (*note Looping +‘--enable-arith-for-command’ + Include support for the alternate form of the ‘for’ command that + behaves like the C language ‘for’ statement (*note Looping Constructs::). -'--enable-array-variables' +‘--enable-array-variables’ Include support for one-dimensional array shell variables (*note Arrays::). -'--enable-bang-history' - Include support for 'csh'-like history substitution (*note History +‘--enable-bang-history’ + Include support for ‘csh’-like history substitution (*note History Interaction::). -'--enable-brace-expansion' - Include 'csh'-like brace expansion ( 'b{a,b}c' ==> 'bac bbc' ). - See *note Brace Expansion::, for a complete description. +‘--enable-brace-expansion’ + Include ‘csh’-like brace expansion ( ‘b{a,b}c’ ↦ ‘bac bbc’ ). See + *note Brace Expansion::, for a complete description. -'--enable-casemod-attributes' - Include support for case-modifying attributes in the 'declare' - builtin and assignment statements. Variables with the 'uppercase' +‘--enable-casemod-attributes’ + Include support for case-modifying attributes in the ‘declare’ + builtin and assignment statements. Variables with the ‘uppercase’ attribute, for example, will have their values converted to uppercase upon assignment. -'--enable-casemod-expansion' +‘--enable-casemod-expansion’ Include support for case-modifying word expansions. -'--enable-command-timing' - Include support for recognizing 'time' as a reserved word and for - displaying timing statistics for the pipeline following 'time' +‘--enable-command-timing’ + Include support for recognizing ‘time’ as a reserved word and for + displaying timing statistics for the pipeline following ‘time’ (*note Pipelines::). This allows pipelines as well as shell builtins and functions to be timed. -'--enable-cond-command' - Include support for the '[[' conditional command. (*note +‘--enable-cond-command’ + Include support for the ‘[[’ conditional command. (*note Conditional Constructs::). -'--enable-cond-regexp' +‘--enable-cond-regexp’ Include support for matching POSIX regular expressions using the - '=~' binary operator in the '[[' conditional command. (*note + ‘=~’ binary operator in the ‘[[’ conditional command. (*note Conditional Constructs::). -'--enable-coprocesses' - Include support for coprocesses and the 'coproc' reserved word +‘--enable-coprocesses’ + Include support for coprocesses and the ‘coproc’ reserved word (*note Pipelines::). -'--enable-debugger' - Include support for the bash debugger (distributed separately). +‘--enable-debugger’ + Include support for the Bash debugger (distributed separately). -'--enable-dev-fd-stat-broken' - If calling 'stat' on /dev/fd/N returns different results than - calling 'fstat' on file descriptor N, supply this option to enable +‘--enable-dev-fd-stat-broken’ + If calling ‘stat’ on /dev/fd/N returns different results than + calling ‘fstat’ on file descriptor N, supply this option to enable a workaround. This has implications for conditional commands that test file attributes. -'--enable-direxpand-default' - Cause the 'direxpand' shell option (*note The Shopt Builtin::) to +‘--enable-direxpand-default’ + Cause the ‘direxpand’ shell option (*note The Shopt Builtin::) to be enabled by default when the shell starts. It is normally disabled by default. -'--enable-directory-stack' - Include support for a 'csh'-like directory stack and the 'pushd', - 'popd', and 'dirs' builtins (*note The Directory Stack::). +‘--enable-directory-stack’ + Include support for a ‘csh’-like directory stack and the ‘pushd’, + ‘popd’, and ‘dirs’ builtins (*note The Directory Stack::). -'--enable-disabled-builtins' - Allow builtin commands to be invoked via 'builtin xxx' even after - 'xxx' has been disabled using 'enable -n xxx'. See *note Bash - Builtins::, for details of the 'builtin' and 'enable' builtin +‘--enable-disabled-builtins’ + Allow builtin commands to be invoked via ‘builtin xxx’ even after + ‘xxx’ has been disabled using ‘enable -n xxx’. See *note Bash + Builtins::, for details of the ‘builtin’ and ‘enable’ builtin commands. -'--enable-dparen-arithmetic' - Include support for the '((...))' command (*note Conditional +‘--enable-dparen-arithmetic’ + Include support for the ‘((...))’ command (*note Conditional Constructs::). -'--enable-extended-glob' +‘--enable-extended-glob’ Include support for the extended pattern matching features described above under *note Pattern Matching::. -'--enable-extended-glob-default' - Set the default value of the 'extglob' shell option described above +‘--enable-extended-glob-default’ + Set the default value of the ‘extglob’ shell option described above under *note The Shopt Builtin:: to be enabled. -'--enable-function-import' +‘--enable-function-import’ Include support for importing function definitions exported by another instance of the shell from the environment. This option is enabled by default. -'--enable-glob-asciirange-default' - Set the default value of the 'globasciiranges' shell option +‘--enable-glob-asciiranges-default’ + Set the default value of the ‘globasciiranges’ shell option described above under *note The Shopt Builtin:: to be enabled. This controls the behavior of character ranges when used in pattern matching bracket expressions. -'--enable-help-builtin' - Include the 'help' builtin, which displays help on shell builtins +‘--enable-help-builtin’ + Include the ‘help’ builtin, which displays help on shell builtins and variables (*note Bash Builtins::). -'--enable-history' - Include command history and the 'fc' and 'history' builtin commands +‘--enable-history’ + Include command history and the ‘fc’ and ‘history’ builtin commands (*note Bash History Facilities::). -'--enable-job-control' +‘--enable-job-control’ This enables the job control features (*note Job Control::), if the operating system supports them. -'--enable-multibyte' +‘--enable-multibyte’ This enables support for multibyte characters if the operating system provides the necessary support. -'--enable-net-redirections' +‘--enable-net-redirections’ This enables the special handling of filenames of the form - '/dev/tcp/HOST/PORT' and '/dev/udp/HOST/PORT' when used in + ‘/dev/tcp/HOST/PORT’ and ‘/dev/udp/HOST/PORT’ when used in redirections (*note Redirections::). -'--enable-process-substitution' +‘--enable-process-substitution’ This enables process substitution (*note Process Substitution::) if the operating system provides the necessary support. -'--enable-progcomp' +‘--enable-progcomp’ Enable the programmable completion facilities (*note Programmable Completion::). If Readline is not enabled, this option has no effect. -'--enable-prompt-string-decoding' +‘--enable-prompt-string-decoding’ Turn on the interpretation of a number of backslash-escaped - characters in the '$PS0', '$PS1', '$PS2', and '$PS4' prompt + characters in the ‘$PS0’, ‘$PS1’, ‘$PS2’, and ‘$PS4’ prompt strings. See *note Controlling the Prompt::, for a complete list of prompt string escape sequences. -'--enable-readline' +‘--enable-readline’ Include support for command-line editing and history with the Bash version of the Readline library (*note Command Line Editing::). -'--enable-restricted' - Include support for a "restricted shell". If this is enabled, - Bash, when called as 'rbash', enters a restricted mode. See *note +‘--enable-restricted’ + Include support for a “restricted shell”. If this is enabled, + Bash, when called as ‘rbash’, enters a restricted mode. See *note The Restricted Shell::, for a description of restricted mode. -'--enable-select' - Include the 'select' compound command, which allows the generation +‘--enable-select’ + Include the ‘select’ compound command, which allows the generation of simple menus (*note Conditional Constructs::). -'--enable-single-help-strings' - Store the text displayed by the 'help' builtin as a single string +‘--enable-single-help-strings’ + Store the text displayed by the ‘help’ builtin as a single string for each help topic. This aids in translating the text to different languages. You may need to disable this if your compiler cannot handle very long string literals. -'--enable-strict-posix-default' +‘--enable-strict-posix-default’ Make Bash POSIX-conformant by default (*note Bash POSIX Mode::). -'--enable-translatable-strings' - Enable support for '$"STRING"' translatable strings (*note Locale +‘--enable-translatable-strings’ + Enable support for ‘$"STRING"’ translatable strings (*note Locale Translation::). -'--enable-usg-echo-default' - A synonym for '--enable-xpg-echo-default'. +‘--enable-usg-echo-default’ + A synonym for ‘--enable-xpg-echo-default’. -'--enable-xpg-echo-default' - Make the 'echo' builtin expand backslash-escaped characters by - default, without requiring the '-e' option. This sets the default - value of the 'xpg_echo' shell option to 'on', which makes the Bash - 'echo' behave more like the version specified in the Single Unix +‘--enable-xpg-echo-default’ + Make the ‘echo’ builtin expand backslash-escaped characters by + default, without requiring the ‘-e’ option. This sets the default + value of the ‘xpg_echo’ shell option to ‘on’, which makes the Bash + ‘echo’ behave more like the version specified in the Single Unix Specification, version 3. *Note Bash Builtins::, for a description - of the escape sequences that 'echo' recognizes. + of the escape sequences that ‘echo’ recognizes. - The file 'config-top.h' contains C Preprocessor '#define' statements -for options which are not settable from 'configure'. Some of these are + The file ‘config-top.h’ contains C Preprocessor ‘#define’ statements +for options which are not settable from ‘configure’. Some of these are not meant to be changed; beware of the consequences if you do. Read the comments associated with each definition for more information about its effect. @@ -10888,20 +11267,21 @@ of Bash. The latest version of Bash is always available for FTP from <http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz>. Once you have determined that a bug actually exists, use the -'bashbug' 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 <bug-bash@gnu.org> or posted to the Usenet -newsgroup 'gnu.bash.bug'. +‘bashbug’ command to submit a bug report or use the form at the Bash +project page (https://savannah.gnu.org/projects/bash/). If you have a +fix, you are encouraged to submit that as well! Suggestions and +'philosophical' bug reports may be mailed to <bug-bash@gnu.org> or +<help-bash@gnu.org>. All bug reports should include: - * The version number of Bash. - * The hardware and operating system. - * The compiler used to compile Bash. - * A description of the bug behaviour. - * A short script or 'recipe' which exercises the bug and may be used + • The version number of Bash. + • The hardware and operating system. + • The compiler used to compile Bash. + • A description of the bug behaviour. + • A short script or 'recipe' which exercises the bug and may be used to reproduce it. -'bashbug' inserts the first three items automatically into the template +‘bashbug’ inserts the first three items automatically into the template it provides for filing a bug report. Please send all reports concerning this manual to <bug-bash@gnu.org>. @@ -10918,314 +11298,349 @@ POSIX standard as the specification of how these features are to be implemented. There are some differences between the traditional Bourne shell and Bash; this section quickly details the differences of significance. A number of these differences are explained in greater -depth in previous sections. This section uses the version of 'sh' +depth in previous sections. This section uses the version of ‘sh’ included in SVR4.2 (the last version of the historical Bourne shell) as the baseline reference. - * Bash is POSIX-conformant, even where the POSIX specification - differs from traditional 'sh' behavior (*note Bash POSIX Mode::). + • Bash is POSIX-conformant, even where the POSIX specification + differs from traditional ‘sh’ behavior (*note Bash POSIX Mode::). - * Bash has multi-character invocation options (*note Invoking + • Bash has multi-character invocation options (*note Invoking Bash::). - * Bash has command-line editing (*note Command Line Editing::) and - the 'bind' builtin. + • Bash has command-line editing (*note Command Line Editing::) and + the ‘bind’ builtin. - * Bash provides a programmable word completion mechanism (*note - Programmable Completion::), and builtin commands 'complete', - 'compgen', and 'compopt', to manipulate it. + • Bash provides a programmable word completion mechanism (*note + Programmable Completion::), and builtin commands ‘complete’, + ‘compgen’, and ‘compopt’, to manipulate it. - * Bash has command history (*note Bash History Facilities::) and the - 'history' and 'fc' builtins to manipulate it. The Bash history + • Bash has command history (*note Bash History Facilities::) and the + ‘history’ and ‘fc’ builtins to manipulate it. The Bash history list maintains timestamp information and uses the value of the - 'HISTTIMEFORMAT' variable to display it. + ‘HISTTIMEFORMAT’ variable to display it. - * Bash implements 'csh'-like history expansion (*note History + • Bash implements ‘csh’-like history expansion (*note History Interaction::). - * Bash has one-dimensional array variables (*note Arrays::), and the + • Bash has one-dimensional array variables (*note Arrays::), and the appropriate variable expansions and assignment syntax to use them. Several of the Bash builtins take options to act on arrays. Bash provides a number of built-in array variables. - * The '$'...'' quoting syntax, which expands ANSI-C backslash-escaped + • The ‘$'...'’ quoting syntax, which expands ANSI-C backslash-escaped characters in the text between the single quotes, is supported (*note ANSI-C Quoting::). - * Bash supports the '$"..."' quoting syntax to do locale-specific - translation of the characters between the double quotes. The '-D', - '--dump-strings', and '--dump-po-strings' invocation options list + • Bash supports the ‘$"..."’ quoting syntax to do locale-specific + translation of the characters between the double quotes. The ‘-D’, + ‘--dump-strings’, and ‘--dump-po-strings’ invocation options list the translatable strings found in a script (*note Locale Translation::). - * Bash implements the '!' keyword to negate the return value of a - pipeline (*note Pipelines::). Very useful when an 'if' statement - needs to act only if a test fails. The Bash '-o pipefail' option - to 'set' will cause a pipeline to return a failure status if any + • Bash implements the ‘!’ keyword to negate the return value of a + pipeline (*note Pipelines::). Very useful when an ‘if’ statement + needs to act only if a test fails. The Bash ‘-o pipefail’ option + to ‘set’ will cause a pipeline to return a failure status if any command fails. - * Bash has the 'time' reserved word and command timing (*note + • Bash has the ‘time’ reserved word and command timing (*note Pipelines::). The display of the timing statistics may be - controlled with the 'TIMEFORMAT' variable. + controlled with the ‘TIMEFORMAT’ variable. - * Bash implements the 'for (( EXPR1 ; EXPR2 ; EXPR3 ))' arithmetic + • Bash implements the ‘for (( EXPR1 ; EXPR2 ; EXPR3 ))’ arithmetic for command, similar to the C language (*note Looping Constructs::). - * Bash includes the 'select' compound command, which allows the + • Bash includes the ‘select’ compound command, which allows the generation of simple menus (*note Conditional Constructs::). - * Bash includes the '[[' compound command, which makes conditional + • Bash includes the ‘[[’ compound command, which makes conditional testing part of the shell grammar (*note Conditional Constructs::), including optional regular expression matching. - * Bash provides optional case-insensitive matching for the 'case' and - '[[' constructs. + • Bash provides optional case-insensitive matching for the ‘case’ and + ‘[[’ constructs. - * Bash includes brace expansion (*note Brace Expansion::) and tilde + • Bash includes brace expansion (*note Brace Expansion::) and tilde expansion (*note Tilde Expansion::). - * Bash implements command aliases and the 'alias' and 'unalias' + • Bash implements command aliases and the ‘alias’ and ‘unalias’ builtins (*note Aliases::). - * Bash provides shell arithmetic, the '((' compound command (*note + • Bash provides shell arithmetic, the ‘((’ compound command (*note Conditional Constructs::), and arithmetic expansion (*note Shell Arithmetic::). - * Variables present in the shell's initial environment are + • Variables present in the shell's initial environment are automatically exported to child processes. The Bourne shell does not normally do this unless the variables are explicitly marked - using the 'export' command. + using the ‘export’ command. - * Bash supports the '+=' assignment operator, which appends to the + • Bash supports the ‘+=’ assignment operator, which appends to the value of the variable named on the left hand side. - * Bash includes the POSIX pattern removal '%', '#', '%%' and '##' + • Bash includes the POSIX pattern removal ‘%’, ‘#’, ‘%%’ and ‘##’ expansions to remove leading or trailing substrings from variable values (*note Shell Parameter Expansion::). - * The expansion '${#xx}', which returns the length of '${xx}', is + • The expansion ‘${#xx}’, which returns the length of ‘${xx}’, is supported (*note Shell Parameter Expansion::). - * The expansion '${var:'OFFSET'[:'LENGTH']}', which expands to the - substring of 'var''s value of length LENGTH, beginning at OFFSET, + • The expansion ‘${var:’OFFSET‘[:’LENGTH‘]}’, which expands to the + substring of ‘var’'s value of length LENGTH, beginning at OFFSET, is present (*note Shell Parameter Expansion::). - * The expansion '${VAR/[/]'PATTERN'[/'REPLACEMENT']}', which matches + • The expansion ‘${VAR/[/]’PATTERN‘[/’REPLACEMENT‘]}’, which matches PATTERN and replaces it with REPLACEMENT in the value of VAR, is - available (*note Shell Parameter Expansion::). + available (*note Shell Parameter Expansion::), with a mechanism to + use the matched text in REPLACEMENT. - * The expansion '${!PREFIX*}' expansion, which expands to the names + • The expansion ‘${!PREFIX*}’ expansion, which expands to the names of all shell variables whose names begin with PREFIX, is available (*note Shell Parameter Expansion::). - * Bash has indirect variable expansion using '${!word}' (*note Shell - Parameter Expansion::). + • Bash has indirect variable expansion using ‘${!word}’ (*note Shell + Parameter Expansion::) and implements the ‘nameref’ variable + attribute for automatic indirect variable expansion. + + • Bash can expand positional parameters beyond ‘$9’ using ‘${NUM}’. - * Bash can expand positional parameters beyond '$9' using '${NUM}'. + • Bash includes a set of parameter transformation word expansions of + the form ‘${var@X}’, where ‘X’ specifies the transformation. - * The POSIX '$()' form of command substitution is implemented (*note - Command Substitution::), and preferred to the Bourne shell's '``' + • The POSIX ‘$()’ form of command substitution is implemented (*note + Command Substitution::), and preferred to the Bourne shell's ‘``’ (which is also implemented for backwards compatibility). - * Bash has process substitution (*note Process Substitution::). + • Bash implements a variant of command substitution that runs the + enclosed command in the current shell execution environment (‘${ + COMMAND;}’). - * Bash automatically assigns variables that provide information about - the current user ('UID', 'EUID', and 'GROUPS'), the current host - ('HOSTTYPE', 'OSTYPE', 'MACHTYPE', and 'HOSTNAME'), and the - instance of Bash that is running ('BASH', 'BASH_VERSION', and - 'BASH_VERSINFO'). *Note Bash Variables::, for details. + • Bash has process substitution (*note Process Substitution::). - * The 'IFS' variable is used to split only the results of expansion, + • Bash automatically assigns variables that provide information about + the current user (‘UID’, ‘EUID’, and ‘GROUPS’), the current host + (‘HOSTTYPE’, ‘OSTYPE’, ‘MACHTYPE’, and ‘HOSTNAME’), and the + instance of Bash that is running (‘BASH’, ‘BASH_VERSION’, and + ‘BASH_VERSINFO’). *Note Bash Variables::, for details. + + • Bash uses many variables to provide functionality and customize + shell behavior that the Bourne shell does not. Examples include + ‘RANDOM’, ‘SRANDOM’, ‘EPOCHSECONDS’, ‘GLOBSORT’, ‘TIMEFORMAT’, + ‘BASHPID’, ‘BASH_XTRACEFD’, ‘GLOBIGNORE’, ‘HISTIGNORE’, and + ‘BASH_VERSION’. *Note Bash Variables::, for a complete list. + + • The ‘IFS’ variable is used to split only the results of expansion, not all words (*note Word Splitting::). This closes a longstanding shell security hole. - * The filename expansion bracket expression code uses '!' and '^' to + • The filename expansion bracket expression code uses ‘!’ and ‘^’ to negate the set of characters between the brackets. The Bourne - shell uses only '!'. + shell uses only ‘!’. - * Bash implements the full set of POSIX filename expansion operators, + • Bash implements the full set of POSIX filename expansion operators, including character classes, equivalence classes, and collating symbols (*note Filename Expansion::). - * Bash implements extended pattern matching features when the - 'extglob' shell option is enabled (*note Pattern Matching::). + • Bash implements extended pattern matching features when the + ‘extglob’ shell option is enabled (*note Pattern Matching::). - * It is possible to have a variable and a function with the same - name; 'sh' does not separate the two name spaces. + • It is possible to have a variable and a function with the same + name; ‘sh’ does not separate the two name spaces. - * Bash functions are permitted to have local variables using the - 'local' builtin, and thus useful recursive functions may be written + • Bash functions are permitted to have local variables using the + ‘local’ builtin, and thus useful recursive functions may be written (*note Bash Builtins::). - * Variable assignments preceding commands affect only that command, - even builtins and functions (*note Environment::). In 'sh', all + • Variable assignments preceding commands affect only that command, + even builtins and functions (*note Environment::). In ‘sh’, all variable assignments preceding commands are global unless the command is executed from the file system. - * Bash performs filename expansion on filenames specified as operands + • Bash performs filename expansion on filenames specified as operands to input and output redirection operators (*note Redirections::). - * Bash contains the '<>' redirection operator, allowing a file to be - opened for both reading and writing, and the '&>' redirection + • Bash contains the ‘<>’ redirection operator, allowing a file to be + opened for both reading and writing, and the ‘&>’ redirection operator, for directing standard output and standard error to the same file (*note Redirections::). - * Bash includes the '<<<' redirection operator, allowing a string to - be used as the standard input to a command. + • Bash includes the ‘<<<’ redirection operator, allowing a string to + be used as the standard input to a command (*note Redirections::). - * Bash implements the '[n]<&WORD' and '[n]>&WORD' redirection + • Bash implements the ‘[n]<&WORD’ and ‘[n]>&WORD’ redirection operators, which move one file descriptor to another. - * Bash treats a number of filenames specially when they are used in + • Bash treats a number of filenames specially when they are used in redirection operators (*note Redirections::). - * Bash can open network connections to arbitrary machines and + • Bash can open network connections to arbitrary machines and services with the redirection operators (*note Redirections::). - * The 'noclobber' option is available to avoid overwriting existing - files with output redirection (*note The Set Builtin::). The '>|' - redirection operator may be used to override 'noclobber'. + • The ‘noclobber’ option is available to avoid overwriting existing + files with output redirection (*note The Set Builtin::). The ‘>|’ + redirection operator may be used to override ‘noclobber’. - * The Bash 'cd' and 'pwd' builtins (*note Bourne Shell Builtins::) - each take '-L' and '-P' options to switch between logical and + • The Bash ‘cd’ and ‘pwd’ builtins (*note Bourne Shell Builtins::) + each take ‘-L’ and ‘-P’ options to switch between logical and physical modes. - * Bash allows a function to override a builtin with the same name, + • Bash allows a function to override a builtin with the same name, and provides access to that builtin's functionality within the - function via the 'builtin' and 'command' builtins (*note Bash + function via the ‘builtin’ and ‘command’ builtins (*note Bash Builtins::). - * The 'command' builtin allows selective disabling of functions when + • Bash implements support for dynamically loading builtin commands + from shared objects. + + • The ‘command’ builtin allows selective disabling of functions when command lookup is performed (*note Bash Builtins::). - * Individual builtins may be enabled or disabled using the 'enable' + • Individual builtins may be enabled or disabled using the ‘enable’ builtin (*note Bash Builtins::). - * The Bash 'exec' builtin takes additional options that allow users + • The Bash ‘exec’ builtin takes additional options that allow users to control the contents of the environment passed to the executed command, and what the zeroth argument to the command is to be (*note Bourne Shell Builtins::). - * Shell functions may be exported to children via the environment - using 'export -f' (*note Shell Functions::). + • Shell functions may be exported to children via the environment + using ‘export -f’ (*note Shell Functions::). + + • Bash decodes a number of backslash-escape sequences in the prompt + string variables (‘PS0’, ‘PS1’, ‘PS2’, and ‘PS4’). + + • Bash expands and displays the ‘PS0’ prompt string variable. - * The Bash 'export', 'readonly', and 'declare' builtins can take a - '-f' option to act on shell functions, a '-p' option to display + • Bash runs commands from the ‘PROMPT_COMMAND’ array variable before + issuing each primary prompt. + + • Bash decodes a number of backslash-escaped characters + • The Bash ‘export’, ‘readonly’, and ‘declare’ builtins can take a + ‘-f’ option to act on shell functions, a ‘-p’ option to display variables with various attributes set in a format that can be used - as shell input, a '-n' option to remove various variable - attributes, and 'name=value' arguments to set variable attributes + as shell input, a ‘-n’ option to remove various variable + attributes, and ‘name=value’ arguments to set variable attributes and values simultaneously. - * The Bash 'hash' builtin allows a name to be associated with an + • The Bash ‘hash’ builtin allows a name to be associated with an arbitrary filename, even when that filename cannot be found by - searching the '$PATH', using 'hash -p' (*note Bourne Shell + searching the ‘$PATH’, using ‘hash -p’ (*note Bourne Shell Builtins::). - * Bash includes a 'help' builtin for quick reference to shell + • Bash includes a ‘help’ builtin for quick reference to shell facilities (*note Bash Builtins::). - * The 'printf' builtin is available to display formatted output + • Bash includes the ‘mapfile’ builtin to quickly read the contents of + a file into an indexed array variable. + + • The ‘printf’ builtin is available to display formatted output (*note Bash Builtins::). - * The Bash 'read' builtin (*note Bash Builtins::) will read a line - ending in '\' with the '-r' option, and will use the 'REPLY' + • The Bash ‘read’ builtin (*note Bash Builtins::) will read a line + ending in ‘\’ with the ‘-r’ option, and will use the ‘REPLY’ variable as a default if no non-option arguments are supplied. The - Bash 'read' builtin also accepts a prompt string with the '-p' - option and will use Readline to obtain the line when given the '-e' - option. The 'read' builtin also has additional options to control - input: the '-s' option will turn off echoing of input characters as - they are read, the '-t' option will allow 'read' to time out if - input does not arrive within a specified number of seconds, the - '-n' option will allow reading only a specified number of - characters rather than a full line, and the '-d' option will read - until a particular character rather than newline. - - * The 'return' builtin may be used to abort execution of scripts - executed with the '.' or 'source' builtins (*note Bourne Shell + Bash ‘read’ builtin also accepts a prompt string with the ‘-p’ + option and will use Readline to obtain the line when given the ‘-e’ + or ‘-E’ options. The ‘read’ builtin also has additional options to + control input: the ‘-s’ option will turn off echoing of input + characters as they are read, the ‘-t’ option will allow ‘read’ to + time out if input does not arrive within a specified number of + seconds, the ‘-n’ option will allow reading only a specified number + of characters rather than a full line, and the ‘-d’ option will + read until a particular character rather than newline. + + • The ‘return’ builtin may be used to abort execution of scripts + executed with the ‘.’ or ‘source’ builtins (*note Bourne Shell Builtins::). - * Bash includes the 'shopt' builtin, for finer control of shell + • Bash includes the ‘shopt’ builtin, for finer control of shell optional capabilities (*note The Shopt Builtin::), and allows these options to be set and unset at shell invocation (*note Invoking Bash::). - * Bash has much more optional behavior controllable with the 'set' + • Bash has much more optional behavior controllable with the ‘set’ builtin (*note The Set Builtin::). - * The '-x' ('xtrace') option displays commands other than simple + • The ‘-x’ (‘xtrace’) option displays commands other than simple commands when performing an execution trace (*note The Set Builtin::). - * The 'test' builtin (*note Bourne Shell Builtins::) is slightly + • The ‘test’ builtin (*note Bourne Shell Builtins::) is slightly different, as it implements the POSIX algorithm, which specifies the behavior based on the number of arguments. - * Bash includes the 'caller' builtin, which displays the context of + • The Bash ‘wait’ builtin has a ‘-n’ option to wait for the next + child to exit, possibly selecting from a list of supplied jobs, and + the ‘-p’ option to store information about a terminated child + process in a shell variable. + + • Bash includes the ‘caller’ builtin, which displays the context of any active subroutine call (a shell function or a script executed - with the '.' or 'source' builtins). This supports the Bash + with the ‘.’ or ‘source’ builtins). This supports the Bash debugger. - * The 'trap' builtin (*note Bourne Shell Builtins::) allows a 'DEBUG' - pseudo-signal specification, similar to 'EXIT'. Commands specified - with a 'DEBUG' trap are executed before every simple command, 'for' - command, 'case' command, 'select' command, every arithmetic 'for' + • The ‘trap’ builtin (*note Bourne Shell Builtins::) allows a ‘DEBUG’ + pseudo-signal specification, similar to ‘EXIT’. Commands specified + with a ‘DEBUG’ trap are executed before every simple command, ‘for’ + command, ‘case’ command, ‘select’ command, every arithmetic ‘for’ command, and before the first command executes in a shell function. - The 'DEBUG' trap is not inherited by shell functions unless the - function has been given the 'trace' attribute or the 'functrace' - option has been enabled using the 'shopt' builtin. The 'extdebug' - shell option has additional effects on the 'DEBUG' trap. - - The 'trap' builtin (*note Bourne Shell Builtins::) allows an 'ERR' - pseudo-signal specification, similar to 'EXIT' and 'DEBUG'. - Commands specified with an 'ERR' trap are executed after a simple - command fails, with a few exceptions. The 'ERR' trap is not - inherited by shell functions unless the '-o errtrace' option to the - 'set' builtin is enabled. - - The 'trap' builtin (*note Bourne Shell Builtins::) allows a - 'RETURN' pseudo-signal specification, similar to 'EXIT' and - 'DEBUG'. Commands specified with a 'RETURN' trap are executed + The ‘DEBUG’ trap is not inherited by shell functions unless the + function has been given the ‘trace’ attribute or the ‘functrace’ + option has been enabled using the ‘shopt’ builtin. The ‘extdebug’ + shell option has additional effects on the ‘DEBUG’ trap. + + The ‘trap’ builtin (*note Bourne Shell Builtins::) allows an ‘ERR’ + pseudo-signal specification, similar to ‘EXIT’ and ‘DEBUG’. + Commands specified with an ‘ERR’ trap are executed after a simple + command fails, with a few exceptions. The ‘ERR’ trap is not + inherited by shell functions unless the ‘-o errtrace’ option to the + ‘set’ builtin is enabled. + + The ‘trap’ builtin (*note Bourne Shell Builtins::) allows a + ‘RETURN’ pseudo-signal specification, similar to ‘EXIT’ and + ‘DEBUG’. Commands specified with a ‘RETURN’ trap are executed before execution resumes after a shell function or a shell script - executed with '.' or 'source' returns. The 'RETURN' trap is not + executed with ‘.’ or ‘source’ returns. The ‘RETURN’ trap is not inherited by shell functions unless the function has been given the - 'trace' attribute or the 'functrace' option has been enabled using - the 'shopt' builtin. + ‘trace’ attribute or the ‘functrace’ option has been enabled using + the ‘shopt’ builtin. - * The Bash 'type' builtin is more extensive and gives more + • The Bash ‘type’ builtin is more extensive and gives more information about the names it finds (*note Bash Builtins::). - * The Bash 'umask' builtin permits a '-p' option to cause the output - to be displayed in the form of a 'umask' command that may be reused + • The Bash ‘umask’ builtin permits a ‘-p’ option to cause the output + to be displayed in the form of a ‘umask’ command that may be reused as input (*note Bourne Shell Builtins::). - * Bash implements a 'csh'-like directory stack, and provides the - 'pushd', 'popd', and 'dirs' builtins to manipulate it (*note The + • Bash implements a ‘csh’-like directory stack, and provides the + ‘pushd’, ‘popd’, and ‘dirs’ builtins to manipulate it (*note The Directory Stack::). Bash also makes the directory stack visible as - the value of the 'DIRSTACK' shell variable. + the value of the ‘DIRSTACK’ shell variable. - * Bash interprets special backslash-escaped characters in the prompt + • Bash interprets special backslash-escaped characters in the prompt strings when interactive (*note Controlling the Prompt::). - * The Bash restricted mode is more useful (*note The Restricted + • The Bash restricted mode is more useful (*note The Restricted Shell::); the SVR4.2 shell restricted mode is too limited. - * The 'disown' builtin can remove a job from the internal shell job + • The ‘disown’ builtin can remove a job from the internal shell job table (*note Job Control Builtins::) or suppress the sending of - 'SIGHUP' to a job when the shell exits as the result of a 'SIGHUP'. + ‘SIGHUP’ to a job when the shell exits as the result of a ‘SIGHUP’. - * Bash includes a number of features to support a separate debugger + • Bash includes a number of features to support a separate debugger for shell scripts. - * The SVR4.2 shell has two privilege-related builtins ('mldmode' and - 'priv') not present in Bash. + • The SVR4.2 shell has two privilege-related builtins (‘mldmode’ and + ‘priv’) not present in Bash. - * Bash does not have the 'stop' or 'newgrp' builtins. + • Bash does not have the ‘stop’ or ‘newgrp’ builtins. - * Bash does not use the 'SHACCT' variable or perform shell + • Bash does not use the ‘SHACCT’ variable or perform shell accounting. - * The SVR4.2 'sh' uses a 'TIMEOUT' variable like Bash uses 'TMOUT'. + • The SVR4.2 ‘sh’ uses a ‘TIMEOUT’ variable like Bash uses ‘TMOUT’. More features unique to Bash may be found in *note Bash Features::. @@ -11235,43 +11650,47 @@ B.1 Implementation Differences From The SVR4.2 Shell Since Bash is a completely new implementation, it does not suffer from many of the limitations of the SVR4.2 shell. For instance: - * Bash does not fork a subshell when redirecting into or out of a - shell control structure such as an 'if' or 'while' statement. + • Bash does not fork a subshell when redirecting into or out of a + shell control structure such as an ‘if’ or ‘while’ statement. - * Bash does not allow unbalanced quotes. The SVR4.2 shell will - silently insert a needed closing quote at 'EOF' under certain + • Bash does not allow unbalanced quotes. The SVR4.2 shell will + silently insert a needed closing quote at ‘EOF’ under certain circumstances. This can be the cause of some hard-to-find errors. - * The SVR4.2 shell uses a baroque memory management scheme based on - trapping 'SIGSEGV'. If the shell is started from a process with - 'SIGSEGV' blocked (e.g., by using the 'system()' C library function + • The SVR4.2 shell uses a baroque memory management scheme based on + trapping ‘SIGSEGV’. If the shell is started from a process with + ‘SIGSEGV’ blocked (e.g., by using the ‘system()’ C library function call), it misbehaves badly. - * In a questionable attempt at security, the SVR4.2 shell, when - invoked without the '-p' option, will alter its real and effective + • In a questionable attempt at security, the SVR4.2 shell, when + invoked without the ‘-p’ option, will alter its real and effective UID and GID if they are less than some magic threshold value, commonly 100. This can lead to unexpected results. - * The SVR4.2 shell does not allow users to trap 'SIGSEGV', 'SIGALRM', - or 'SIGCHLD'. + • The SVR4.2 shell does not allow users to trap ‘SIGSEGV’, ‘SIGALRM’, + or ‘SIGCHLD’. - * The SVR4.2 shell does not allow the 'IFS', 'MAILCHECK', 'PATH', - 'PS1', or 'PS2' variables to be unset. + • The SVR4.2 shell does not allow the ‘IFS’, ‘MAILCHECK’, ‘PATH’, + ‘PS1’, or ‘PS2’ variables to be unset. - * The SVR4.2 shell treats '^' as the undocumented equivalent of '|'. + • The SVR4.2 shell treats ‘^’ as the undocumented equivalent of ‘|’. - * Bash allows multiple option arguments when it is invoked ('-x -v'); - the SVR4.2 shell allows only one option argument ('-xv'). In fact, + • Bash allows multiple option arguments when it is invoked (‘-x -v’); + the SVR4.2 shell allows only one option argument (‘-xv’). In fact, some versions of the shell dump core if the second argument begins - with a '-'. + with a ‘-’. - * The SVR4.2 shell exits a script if any builtin fails; Bash exits a + • The SVR4.2 shell exits a script if any builtin fails; Bash exits a script only if one of the POSIX special builtins fails, and only for certain failures, as enumerated in the POSIX standard. - * The SVR4.2 shell behaves differently when invoked as 'jsh' (it + • The SVR4.2 shell behaves differently when invoked as ‘jsh’ (it turns on job control). + • If the ‘lastpipe’ option is enabled, and job control is not active, + Bash runs the last element of a pipeline in the current shell + execution environment. +  File: bashref.info, Node: GNU Free Documentation License, Next: Indexes, Prev: Major Differences From The Bourne Shell, Up: Top @@ -11280,7 +11699,7 @@ Appendix C GNU Free Documentation License Version 1.3, 3 November 2008 - Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies @@ -11289,7 +11708,7 @@ Appendix C GNU Free Documentation License 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to + functional and useful document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the @@ -11779,38 +12198,38 @@ D.1 Index of Shell Builtin Commands �[index�] * Menu: -* .: Bourne Shell Builtins. - (line 17) * :: Bourne Shell Builtins. (line 11) +* .: Bourne Shell Builtins. + (line 17) * [: Bourne Shell Builtins. - (line 275) + (line 285) * alias: Bash Builtins. (line 11) * bg: Job Control Builtins. (line 7) * bind: Bash Builtins. (line 21) * break: Bourne Shell Builtins. (line 37) -* builtin: Bash Builtins. (line 108) -* caller: Bash Builtins. (line 117) +* builtin: Bash Builtins. (line 119) +* caller: Bash Builtins. (line 128) * cd: Bourne Shell Builtins. (line 45) -* command: Bash Builtins. (line 134) +* command: Bash Builtins. (line 145) * compgen: Programmable Completion Builtins. (line 12) * complete: Programmable Completion Builtins. - (line 30) + (line 36) * compopt: Programmable Completion Builtins. - (line 238) + (line 248) * continue: Bourne Shell Builtins. (line 90) -* declare: Bash Builtins. (line 154) +* declare: Bash Builtins. (line 165) * dirs: Directory Stack Builtins. (line 7) * disown: Job Control Builtins. (line 104) -* echo: Bash Builtins. (line 257) -* enable: Bash Builtins. (line 306) +* echo: Bash Builtins. (line 268) +* enable: Bash Builtins. (line 317) * eval: Bourne Shell Builtins. (line 99) * exec: Bourne Shell Builtins. @@ -11819,59 +12238,63 @@ D.1 Index of Shell Builtin Commands (line 125) * export: Bourne Shell Builtins. (line 132) +* false: Bourne Shell Builtins. + (line 148) * fc: Bash History Builtins. (line 10) * fg: Job Control Builtins. (line 17) * getopts: Bourne Shell Builtins. - (line 148) + (line 153) * hash: Bourne Shell Builtins. - (line 192) -* help: Bash Builtins. (line 342) + (line 197) +* help: Bash Builtins. (line 355) * history: Bash History Builtins. (line 46) * jobs: Job Control Builtins. (line 27) * kill: Job Control Builtins. (line 58) -* let: Bash Builtins. (line 361) -* local: Bash Builtins. (line 369) -* logout: Bash Builtins. (line 385) -* mapfile: Bash Builtins. (line 390) +* let: Bash Builtins. (line 374) +* local: Bash Builtins. (line 382) +* logout: Bash Builtins. (line 399) +* mapfile: Bash Builtins. (line 404) * popd: Directory Stack Builtins. (line 35) -* printf: Bash Builtins. (line 436) +* printf: Bash Builtins. (line 450) * pushd: Directory Stack Builtins. (line 69) * pwd: Bourne Shell Builtins. - (line 212) -* read: Bash Builtins. (line 488) -* readarray: Bash Builtins. (line 585) -* readonly: Bourne Shell Builtins. (line 222) +* read: Bash Builtins. (line 518) +* readarray: Bash Builtins. (line 624) +* readonly: Bourne Shell Builtins. + (line 232) * return: Bourne Shell Builtins. - (line 241) + (line 251) * set: The Set Builtin. (line 11) * shift: Bourne Shell Builtins. - (line 262) + (line 272) * shopt: The Shopt Builtin. (line 9) -* source: Bash Builtins. (line 594) +* source: Bash Builtins. (line 633) * suspend: Job Control Builtins. (line 116) * test: Bourne Shell Builtins. - (line 275) + (line 285) * times: Bourne Shell Builtins. - (line 360) + (line 387) * trap: Bourne Shell Builtins. - (line 366) -* type: Bash Builtins. (line 599) -* typeset: Bash Builtins. (line 631) -* ulimit: Bash Builtins. (line 637) + (line 393) +* true: Bourne Shell Builtins. + (line 455) +* type: Bash Builtins. (line 638) +* typeset: Bash Builtins. (line 676) +* ulimit: Bash Builtins. (line 682) * umask: Bourne Shell Builtins. - (line 415) -* unalias: Bash Builtins. (line 743) + (line 460) +* unalias: Bash Builtins. (line 788) * unset: Bourne Shell Builtins. - (line 433) + (line 478) * wait: Job Control Builtins. (line 76) @@ -11886,9 +12309,9 @@ D.2 Index of Shell Reserved Words * !: Pipelines. (line 9) * [[: Conditional Constructs. - (line 126) + (line 125) * ]]: Conditional Constructs. - (line 126) + (line 125) * {: Command Grouping. (line 21) * }: Command Grouping. (line 21) * case: Conditional Constructs. @@ -11910,7 +12333,7 @@ D.2 Index of Shell Reserved Words * in: Conditional Constructs. (line 28) * select: Conditional Constructs. - (line 84) + (line 83) * then: Conditional Constructs. (line 7) * time: Pipelines. (line 9) @@ -11926,24 +12349,24 @@ D.3 Parameter and Variable Index �[index�] * Menu: +* _: Bash Variables. (line 13) +* -: Special Parameters. (line 46) * !: Special Parameters. (line 55) +* ?: Special Parameters. (line 42) +* @: Special Parameters. (line 22) +* *: Special Parameters. (line 9) * #: Special Parameters. (line 39) * $: Special Parameters. (line 51) +* $_: Bash Variables. (line 14) +* $-: Special Parameters. (line 47) * $!: Special Parameters. (line 56) +* $?: Special Parameters. (line 43) +* $@: Special Parameters. (line 23) +* $*: Special Parameters. (line 10) * $#: Special Parameters. (line 40) * $$: Special Parameters. (line 52) -* $*: Special Parameters. (line 10) -* $-: Special Parameters. (line 47) * $0: Special Parameters. (line 61) -* $?: Special Parameters. (line 43) -* $@: Special Parameters. (line 23) -* $_: Bash Variables. (line 14) -* *: Special Parameters. (line 9) -* -: Special Parameters. (line 46) * 0: Special Parameters. (line 60) -* ?: Special Parameters. (line 42) -* @: Special Parameters. (line 22) -* _: Bash Variables. (line 13) * active-region-end-color: Readline Init File Syntax. (line 51) * active-region-start-color: Readline Init File Syntax. @@ -11951,212 +12374,217 @@ D.3 Parameter and Variable Index * auto_resume: Job Control Variables. (line 6) * BASH: Bash Variables. (line 23) -* BASHOPTS: Bash Variables. (line 26) -* BASHPID: Bash Variables. (line 35) * BASH_ALIASES: Bash Variables. (line 42) * BASH_ARGC: Bash Variables. (line 51) -* BASH_ARGV: Bash Variables. (line 64) -* BASH_ARGV0: Bash Variables. (line 76) -* BASH_CMDS: Bash Variables. (line 84) -* BASH_COMMAND: Bash Variables. (line 93) -* BASH_COMPAT: Bash Variables. (line 100) -* BASH_ENV: Bash Variables. (line 116) -* BASH_EXECUTION_STRING: Bash Variables. (line 122) -* BASH_LINENO: Bash Variables. (line 125) -* BASH_LOADABLES_PATH: Bash Variables. (line 133) -* BASH_REMATCH: Bash Variables. (line 137) -* BASH_SOURCE: Bash Variables. (line 145) -* BASH_SUBSHELL: Bash Variables. (line 152) -* BASH_VERSINFO: Bash Variables. (line 158) -* BASH_VERSION: Bash Variables. (line 181) -* BASH_XTRACEFD: Bash Variables. (line 184) +* BASH_ARGV: Bash Variables. (line 65) +* BASH_ARGV0: Bash Variables. (line 78) +* BASH_CMDS: Bash Variables. (line 86) +* BASH_COMMAND: Bash Variables. (line 95) +* BASH_COMPAT: Bash Variables. (line 102) +* BASH_ENV: Bash Variables. (line 118) +* BASH_EXECUTION_STRING: Bash Variables. (line 124) +* BASH_LINENO: Bash Variables. (line 127) +* BASH_LOADABLES_PATH: Bash Variables. (line 137) +* BASH_MONOSECONDS: Bash Variables. (line 141) +* BASH_REMATCH: Bash Variables. (line 148) +* BASH_SOURCE: Bash Variables. (line 156) +* BASH_SUBSHELL: Bash Variables. (line 164) +* BASH_TRAPSIG: Bash Variables. (line 170) +* BASH_VERSINFO: Bash Variables. (line 176) +* BASH_VERSION: Bash Variables. (line 199) +* BASH_XTRACEFD: Bash Variables. (line 202) +* BASHOPTS: Bash Variables. (line 26) +* BASHPID: Bash Variables. (line 35) * bell-style: Readline Init File Syntax. (line 64) * bind-tty-special-chars: Readline Init File Syntax. (line 71) * blink-matching-paren: Readline Init File Syntax. - (line 76) + (line 79) * CDPATH: Bourne Shell Variables. (line 9) -* CHILD_MAX: Bash Variables. (line 195) +* CHILD_MAX: Bash Variables. (line 213) * colored-completion-prefix: Readline Init File Syntax. - (line 81) + (line 84) * colored-stats: Readline Init File Syntax. - (line 91) -* COLUMNS: Bash Variables. (line 202) + (line 94) +* COLUMNS: Bash Variables. (line 220) * comment-begin: Readline Init File Syntax. - (line 97) + (line 100) +* COMP_CWORD: Bash Variables. (line 226) +* COMP_KEY: Bash Variables. (line 255) +* COMP_LINE: Bash Variables. (line 232) +* COMP_POINT: Bash Variables. (line 237) +* COMP_TYPE: Bash Variables. (line 245) +* COMP_WORDBREAKS: Bash Variables. (line 259) +* COMP_WORDS: Bash Variables. (line 265) * completion-display-width: Readline Init File Syntax. - (line 102) + (line 105) * completion-ignore-case: Readline Init File Syntax. - (line 109) + (line 112) * completion-map-case: Readline Init File Syntax. - (line 114) + (line 117) * completion-prefix-display-length: Readline Init File Syntax. - (line 120) + (line 123) * completion-query-items: Readline Init File Syntax. - (line 127) -* COMPREPLY: Bash Variables. (line 254) -* COMP_CWORD: Bash Variables. (line 208) -* COMP_KEY: Bash Variables. (line 237) -* COMP_LINE: Bash Variables. (line 214) -* COMP_POINT: Bash Variables. (line 219) -* COMP_TYPE: Bash Variables. (line 227) -* COMP_WORDBREAKS: Bash Variables. (line 241) -* COMP_WORDS: Bash Variables. (line 247) + (line 130) +* COMPREPLY: Bash Variables. (line 272) * convert-meta: Readline Init File Syntax. - (line 138) -* COPROC: Bash Variables. (line 260) -* DIRSTACK: Bash Variables. (line 264) + (line 141) +* COPROC: Bash Variables. (line 278) +* DIRSTACK: Bash Variables. (line 282) * disable-completion: Readline Init File Syntax. - (line 148) + (line 151) * echo-control-characters: Readline Init File Syntax. - (line 153) + (line 156) * editing-mode: Readline Init File Syntax. - (line 158) -* EMACS: Bash Variables. (line 274) + (line 161) +* EMACS: Bash Variables. (line 292) * emacs-mode-string: Readline Init File Syntax. - (line 164) + (line 167) * enable-active-region: Readline Init File Syntax. - (line 174) + (line 177) * enable-bracketed-paste: Readline Init File Syntax. - (line 187) + (line 190) * enable-keypad: Readline Init File Syntax. - (line 196) -* ENV: Bash Variables. (line 279) -* EPOCHREALTIME: Bash Variables. (line 284) -* EPOCHSECONDS: Bash Variables. (line 292) -* EUID: Bash Variables. (line 299) -* EXECIGNORE: Bash Variables. (line 303) + (line 199) +* ENV: Bash Variables. (line 297) +* EPOCHREALTIME: Bash Variables. (line 302) +* EPOCHSECONDS: Bash Variables. (line 310) +* EUID: Bash Variables. (line 317) +* EXECIGNORE: Bash Variables. (line 321) * expand-tilde: Readline Init File Syntax. - (line 207) -* FCEDIT: Bash Variables. (line 316) -* FIGNORE: Bash Variables. (line 320) -* FUNCNAME: Bash Variables. (line 326) -* FUNCNEST: Bash Variables. (line 343) -* GLOBIGNORE: Bash Variables. (line 348) -* GROUPS: Bash Variables. (line 355) -* histchars: Bash Variables. (line 361) -* HISTCMD: Bash Variables. (line 376) -* HISTCONTROL: Bash Variables. (line 382) -* HISTFILE: Bash Variables. (line 398) -* HISTFILESIZE: Bash Variables. (line 402) -* HISTIGNORE: Bash Variables. (line 413) + (line 210) +* FCEDIT: Bash Variables. (line 334) +* FIGNORE: Bash Variables. (line 338) +* FUNCNAME: Bash Variables. (line 344) +* FUNCNEST: Bash Variables. (line 361) +* GLOBIGNORE: Bash Variables. (line 366) +* GLOBSORT: Bash Variables. (line 373) +* GROUPS: Bash Variables. (line 399) +* histchars: Bash Variables. (line 405) +* HISTCMD: Bash Variables. (line 420) +* HISTCONTROL: Bash Variables. (line 426) +* HISTFILE: Bash Variables. (line 442) +* HISTFILESIZE: Bash Variables. (line 447) +* HISTIGNORE: Bash Variables. (line 458) * history-preserve-point: Readline Init File Syntax. - (line 211) + (line 214) * history-size: Readline Init File Syntax. - (line 217) -* HISTSIZE: Bash Variables. (line 433) -* HISTTIMEFORMAT: Bash Variables. (line 440) + (line 220) +* HISTSIZE: Bash Variables. (line 480) +* HISTTIMEFORMAT: Bash Variables. (line 487) * HOME: Bourne Shell Variables. (line 13) * horizontal-scroll-mode: Readline Init File Syntax. - (line 226) -* HOSTFILE: Bash Variables. (line 448) -* HOSTNAME: Bash Variables. (line 459) -* HOSTTYPE: Bash Variables. (line 462) + (line 229) +* HOSTFILE: Bash Variables. (line 496) +* HOSTNAME: Bash Variables. (line 507) +* HOSTTYPE: Bash Variables. (line 510) * IFS: Bourne Shell Variables. (line 18) -* IGNOREEOF: Bash Variables. (line 465) +* IGNOREEOF: Bash Variables. (line 513) * input-meta: Readline Init File Syntax. - (line 235) -* INPUTRC: Bash Variables. (line 475) -* INSIDE_EMACS: Bash Variables. (line 479) + (line 238) +* INPUTRC: Bash Variables. (line 523) +* INSIDE_EMACS: Bash Variables. (line 527) * isearch-terminators: Readline Init File Syntax. - (line 245) + (line 248) * keymap: Readline Init File Syntax. - (line 252) + (line 255) * LANG: Creating Internationalized Scripts. (line 51) -* LANG <1>: Bash Variables. (line 485) -* LC_ALL: Bash Variables. (line 489) -* LC_COLLATE: Bash Variables. (line 493) -* LC_CTYPE: Bash Variables. (line 500) +* LANG <1>: Bash Variables. (line 533) +* LC_ALL: Bash Variables. (line 537) +* LC_COLLATE: Bash Variables. (line 541) +* LC_CTYPE: Bash Variables. (line 548) * LC_MESSAGES: Creating Internationalized Scripts. (line 51) -* LC_MESSAGES <1>: Bash Variables. (line 505) -* LC_NUMERIC: Bash Variables. (line 509) -* LC_TIME: Bash Variables. (line 513) -* LINENO: Bash Variables. (line 517) -* LINES: Bash Variables. (line 522) -* MACHTYPE: Bash Variables. (line 528) +* LC_MESSAGES <1>: Bash Variables. (line 553) +* LC_NUMERIC: Bash Variables. (line 557) +* LC_TIME: Bash Variables. (line 561) +* LINENO: Bash Variables. (line 565) +* LINES: Bash Variables. (line 570) +* MACHTYPE: Bash Variables. (line 576) * MAIL: Bourne Shell Variables. (line 22) -* MAILCHECK: Bash Variables. (line 532) +* MAILCHECK: Bash Variables. (line 580) * MAILPATH: Bourne Shell Variables. (line 27) -* MAPFILE: Bash Variables. (line 540) +* MAPFILE: Bash Variables. (line 588) * mark-modified-lines: Readline Init File Syntax. - (line 282) + (line 285) * mark-symlinked-directories: Readline Init File Syntax. - (line 287) + (line 290) * match-hidden-files: Readline Init File Syntax. - (line 292) + (line 295) * menu-complete-display-prefix: Readline Init File Syntax. - (line 299) + (line 302) * meta-flag: Readline Init File Syntax. - (line 235) -* OLDPWD: Bash Variables. (line 544) + (line 238) +* OLDPWD: Bash Variables. (line 592) * OPTARG: Bourne Shell Variables. (line 34) -* OPTERR: Bash Variables. (line 547) +* OPTERR: Bash Variables. (line 595) * OPTIND: Bourne Shell Variables. (line 38) -* OSTYPE: Bash Variables. (line 551) +* OSTYPE: Bash Variables. (line 599) * output-meta: Readline Init File Syntax. - (line 304) + (line 307) * page-completions: Readline Init File Syntax. - (line 312) + (line 315) * PATH: Bourne Shell Variables. (line 42) -* PIPESTATUS: Bash Variables. (line 554) -* POSIXLY_CORRECT: Bash Variables. (line 559) -* PPID: Bash Variables. (line 569) -* PROMPT_COMMAND: Bash Variables. (line 573) -* PROMPT_DIRTRIM: Bash Variables. (line 579) -* PS0: Bash Variables. (line 585) +* PIPESTATUS: Bash Variables. (line 602) +* POSIXLY_CORRECT: Bash Variables. (line 607) +* PPID: Bash Variables. (line 617) +* PROMPT_COMMAND: Bash Variables. (line 621) +* PROMPT_DIRTRIM: Bash Variables. (line 627) +* PS0: Bash Variables. (line 633) * PS1: Bourne Shell Variables. (line 48) * PS2: Bourne Shell Variables. (line 53) -* PS3: Bash Variables. (line 590) -* PS4: Bash Variables. (line 595) -* PWD: Bash Variables. (line 603) -* RANDOM: Bash Variables. (line 606) -* READLINE_ARGUMENT: Bash Variables. (line 612) -* READLINE_LINE: Bash Variables. (line 616) -* READLINE_MARK: Bash Variables. (line 620) -* READLINE_POINT: Bash Variables. (line 626) -* REPLY: Bash Variables. (line 630) +* PS3: Bash Variables. (line 638) +* PS4: Bash Variables. (line 643) +* PWD: Bash Variables. (line 651) +* RANDOM: Bash Variables. (line 654) +* READLINE_ARGUMENT: Bash Variables. (line 660) +* READLINE_LINE: Bash Variables. (line 664) +* READLINE_MARK: Bash Variables. (line 668) +* READLINE_POINT: Bash Variables. (line 674) +* REPLY: Bash Variables. (line 678) * revert-all-at-newline: Readline Init File Syntax. - (line 322) -* SECONDS: Bash Variables. (line 633) -* SHELL: Bash Variables. (line 642) -* SHELLOPTS: Bash Variables. (line 647) -* SHLVL: Bash Variables. (line 656) + (line 325) +* search-ignore-case: Readline Init File Syntax. + (line 332) +* SECONDS: Bash Variables. (line 681) +* SHELL: Bash Variables. (line 690) +* SHELLOPTS: Bash Variables. (line 695) +* SHLVL: Bash Variables. (line 704) * show-all-if-ambiguous: Readline Init File Syntax. - (line 329) + (line 337) * show-all-if-unmodified: Readline Init File Syntax. - (line 335) + (line 343) * show-mode-in-prompt: Readline Init File Syntax. - (line 344) + (line 352) * skip-completed-text: Readline Init File Syntax. - (line 350) -* SRANDOM: Bash Variables. (line 661) + (line 358) +* SRANDOM: Bash Variables. (line 709) * TEXTDOMAIN: Creating Internationalized Scripts. (line 51) * TEXTDOMAINDIR: Creating Internationalized Scripts. (line 51) -* TIMEFORMAT: Bash Variables. (line 670) -* TMOUT: Bash Variables. (line 708) -* TMPDIR: Bash Variables. (line 720) -* UID: Bash Variables. (line 724) +* TIMEFORMAT: Bash Variables. (line 718) +* TMOUT: Bash Variables. (line 756) +* TMPDIR: Bash Variables. (line 768) +* UID: Bash Variables. (line 772) * vi-cmd-mode-string: Readline Init File Syntax. - (line 363) + (line 371) * vi-ins-mode-string: Readline Init File Syntax. - (line 374) + (line 382) * visible-stats: Readline Init File Syntax. - (line 385) + (line 393)  File: bashref.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Indexes @@ -12172,7 +12600,7 @@ D.4 Function Index * accept-line (Newline or Return): Commands For History. (line 6) * alias-expand-line (): Miscellaneous Commands. - (line 131) + (line 133) * backward-char (C-b): Commands For Moving. (line 15) * backward-delete-char (Rubout): Commands For Text. (line 17) * backward-kill-line (C-x Rubout): Commands For Killing. @@ -12185,7 +12613,7 @@ D.4 Function Index * beginning-of-line (C-a): Commands For Moving. (line 6) * bracketed-paste-begin (): Commands For Text. (line 33) * call-last-kbd-macro (C-x e): Keyboard Macros. (line 13) -* capitalize-word (M-c): Commands For Text. (line 66) +* capitalize-word (M-c): Commands For Text. (line 73) * character-search (C-]): Miscellaneous Commands. (line 42) * character-search-backward (M-C-]): Miscellaneous Commands. @@ -12207,24 +12635,24 @@ D.4 Function Index * complete-variable (M-$): Commands For Completion. (line 64) * copy-backward-word (): Commands For Killing. - (line 69) + (line 62) * copy-forward-word (): Commands For Killing. - (line 74) + (line 67) * copy-region-as-kill (): Commands For Killing. - (line 65) + (line 58) * dabbrev-expand (): Commands For Completion. (line 95) * delete-char (C-d): Commands For Text. (line 12) * delete-char-or-list (): Commands For Completion. (line 43) * delete-horizontal-space (): Commands For Killing. - (line 57) + (line 50) * digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6) * display-shell-version (C-x C-v): Miscellaneous Commands. (line 116) * do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands. (line 14) -* downcase-word (M-l): Commands For Text. (line 62) +* downcase-word (M-l): Commands For Text. (line 69) * dump-functions (): Miscellaneous Commands. (line 74) * dump-macros (): Miscellaneous Commands. @@ -12234,7 +12662,7 @@ D.4 Function Index * dynamic-complete-history (M-<TAB>): Commands For Completion. (line 90) * edit-and-execute-command (C-x C-e): Miscellaneous Commands. - (line 140) + (line 142) * end-kbd-macro (C-x )): Keyboard Macros. (line 9) * end-of-file (usually C-d): Commands For Text. (line 6) * end-of-history (M->): Commands For History. @@ -12242,6 +12670,8 @@ D.4 Function Index * end-of-line (C-e): Commands For Moving. (line 9) * exchange-point-and-mark (C-x C-x): Miscellaneous Commands. (line 37) +* execute-named-command (M-x): Miscellaneous Commands. + (line 147) * fetch-history (): Commands For History. (line 103) * forward-backward-delete-char (): Commands For Text. (line 21) @@ -12256,9 +12686,9 @@ D.4 Function Index * glob-list-expansions (C-x g): Miscellaneous Commands. (line 110) * history-and-alias-expand-line (): Miscellaneous Commands. - (line 134) + (line 136) * history-expand-line (M-^): Miscellaneous Commands. - (line 124) + (line 126) * history-search-backward (): Commands For History. (line 57) * history-search-forward (): Commands For History. @@ -12272,17 +12702,17 @@ D.4 Function Index * insert-completions (M-*): Commands For Completion. (line 22) * insert-last-argument (M-. or M-_): Miscellaneous Commands. - (line 137) + (line 139) * kill-line (C-k): Commands For Killing. (line 6) * kill-region (): Commands For Killing. - (line 61) + (line 54) * kill-whole-line (): Commands For Killing. (line 19) * kill-word (M-d): Commands For Killing. (line 23) * magic-space (): Miscellaneous Commands. - (line 127) + (line 129) * menu-complete (): Commands For Completion. (line 26) * menu-complete-backward (): Commands For Completion. @@ -12296,7 +12726,7 @@ D.4 Function Index (line 39) * operate-and-get-next (C-o): Commands For History. (line 96) -* overwrite-mode (): Commands For Text. (line 70) +* overwrite-mode (): Commands For Text. (line 77) * possible-command-completions (C-x !): Commands For Completion. (line 86) * possible-completions (M-?): Commands For Completion. @@ -12334,8 +12764,7 @@ D.4 Function Index * shell-forward-word (M-C-f): Commands For Moving. (line 26) * shell-kill-word (M-C-d): Commands For Killing. (line 32) -* shell-transpose-words (M-C-t): Commands For Killing. - (line 41) +* shell-transpose-words (M-C-t): Commands For Text. (line 58) * skip-csi-sequence (): Miscellaneous Commands. (line 52) * spell-correct-word (C-x s): Miscellaneous Commands. @@ -12349,20 +12778,20 @@ D.4 Function Index (line 23) * universal-argument (): Numeric Arguments. (line 10) * unix-filename-rubout (): Commands For Killing. - (line 52) + (line 45) * unix-line-discard (C-u): Commands For Killing. (line 16) * unix-word-rubout (C-w): Commands For Killing. - (line 48) -* upcase-word (M-u): Commands For Text. (line 58) + (line 41) +* upcase-word (M-u): Commands For Text. (line 65) * yank (C-y): Commands For Killing. - (line 79) + (line 72) * yank-last-arg (M-. or M-_): Commands For History. (line 84) * yank-nth-arg (M-C-y): Commands For History. (line 75) * yank-pop (M-y): Commands For Killing. - (line 82) + (line 75)  File: bashref.info, Node: Concept Index, Prev: Function Index, Up: Indexes @@ -12377,11 +12806,14 @@ D.5 Concept Index * arithmetic evaluation: Shell Arithmetic. (line 6) * arithmetic expansion: Arithmetic Expansion. (line 6) +* arithmetic operators: Shell Arithmetic. (line 17) * arithmetic, shell: Shell Arithmetic. (line 6) * arrays: Arrays. (line 6) * background: Job Control Basics. (line 6) * Bash configuration: Basic Installation. (line 6) * Bash installation: Basic Installation. (line 6) +* binary arithmetic operators: Shell Arithmetic. (line 17) +* bitwise arithmetic operators: Shell Arithmetic. (line 17) * Bourne shell: Basic Shell Features. (line 6) * brace expansion: Brace Expansion. (line 6) @@ -12415,6 +12847,7 @@ D.5 Concept Index (line 6) * completion builtins: Programmable Completion Builtins. (line 6) +* conditional arithmetic operator: Shell Arithmetic. (line 17) * configuration: Basic Installation. (line 6) * control operator: Definitions. (line 21) * coprocess: Coprocesses. (line 6) @@ -12447,7 +12880,7 @@ D.5 Concept Index * functions, shell: Shell Functions. (line 6) * history builtins: Bash History Builtins. (line 6) -* history events: Event Designators. (line 8) +* history events: Event Designators. (line 11) * history expansion: History Interaction. (line 6) * history list: Bash History Facilities. (line 6) @@ -12458,7 +12891,7 @@ D.5 Concept Index * installation: Basic Installation. (line 6) * interaction, readline: Readline Interaction. (line 6) -* interactive shell: Invoking Bash. (line 131) +* interactive shell: Invoking Bash. (line 136) * interactive shell <1>: Interactive Shells. (line 6) * internationalization: Locale Translation. (line 6) * internationalized scripts: Creating Internationalized Scripts. @@ -12471,7 +12904,7 @@ D.5 Concept Index * killing text: Readline Killing Commands. (line 6) * localization: Locale Translation. (line 6) -* login shell: Invoking Bash. (line 128) +* login shell: Invoking Bash. (line 133) * matching, pattern: Pattern Matching. (line 6) * metacharacter: Definitions. (line 46) * name: Definitions. (line 51) @@ -12489,7 +12922,8 @@ D.5 Concept Index * pattern matching: Pattern Matching. (line 6) * pipeline: Pipelines. (line 6) * POSIX: Definitions. (line 9) -* POSIX Mode: Bash POSIX Mode. (line 6) +* POSIX description: Bash POSIX Mode. (line 9) +* POSIX Mode: Bash POSIX Mode. (line 48) * process group: Definitions. (line 62) * process group ID: Definitions. (line 66) * process substitution: Process Substitution. @@ -12524,6 +12958,7 @@ D.5 Concept Index * tilde expansion: Tilde Expansion. (line 6) * token: Definitions. (line 86) * translation, native languages: Locale Translation. (line 6) +* unary arithmetic operators: Shell Arithmetic. (line 17) * variable, shell: Shell Parameters. (line 6) * variables, readline: Readline Init File Syntax. (line 37) @@ -12535,138 +12970,138 @@ D.5 Concept Index  Tag Table: -Node: Top899 -Node: Introduction2821 -Node: What is Bash?3037 -Node: What is a shell?4151 -Node: Definitions6689 -Node: Basic Shell Features9640 -Node: Shell Syntax10859 -Node: Shell Operation11885 -Node: Quoting13178 -Node: Escape Character14482 -Node: Single Quotes14967 -Node: Double Quotes15315 -Node: ANSI-C Quoting16593 -Node: Locale Translation17903 -Node: Creating Internationalized Scripts19214 -Node: Comments23331 -Node: Shell Commands23949 -Node: Reserved Words24887 -Node: Simple Commands25643 -Node: Pipelines26297 -Node: Lists29296 -Node: Compound Commands31091 -Node: Looping Constructs32103 -Node: Conditional Constructs34598 -Node: Command Grouping49086 -Node: Coprocesses50564 -Node: GNU Parallel53227 -Node: Shell Functions54144 -Node: Shell Parameters62029 -Node: Positional Parameters66417 -Node: Special Parameters67319 -Node: Shell Expansions70533 -Node: Brace Expansion72660 -Node: Tilde Expansion75394 -Node: Shell Parameter Expansion78015 -Node: Command Substitution96366 -Node: Arithmetic Expansion97721 -Node: Process Substitution98689 -Node: Word Splitting99809 -Node: Filename Expansion101753 -Node: Pattern Matching104502 -Node: Quote Removal109504 -Node: Redirections109799 -Node: Executing Commands119459 -Node: Simple Command Expansion120129 -Node: Command Search and Execution122239 -Node: Command Execution Environment124617 -Node: Environment127652 -Node: Exit Status129315 -Node: Signals131099 -Node: Shell Scripts134548 -Node: Shell Builtin Commands137575 -Node: Bourne Shell Builtins139613 -Node: Bash Builtins161079 -Node: Modifying Shell Behavior191935 -Node: The Set Builtin192280 -Node: The Shopt Builtin202881 -Node: Special Builtins218793 -Node: Shell Variables219772 -Node: Bourne Shell Variables220209 -Node: Bash Variables222313 -Node: Bash Features255128 -Node: Invoking Bash256141 -Node: Bash Startup Files262154 -Node: Interactive Shells267285 -Node: What is an Interactive Shell?267696 -Node: Is this Shell Interactive?268345 -Node: Interactive Shell Behavior269160 -Node: Bash Conditional Expressions272789 -Node: Shell Arithmetic277431 -Node: Aliases280375 -Node: Arrays282988 -Node: The Directory Stack289379 -Node: Directory Stack Builtins290163 -Node: Controlling the Prompt294423 -Node: The Restricted Shell297388 -Node: Bash POSIX Mode299998 -Node: Shell Compatibility Mode311916 -Node: Job Control320483 -Node: Job Control Basics320943 -Node: Job Control Builtins325945 -Node: Job Control Variables331740 -Node: Command Line Editing332896 -Node: Introduction and Notation334567 -Node: Readline Interaction336190 -Node: Readline Bare Essentials337381 -Node: Readline Movement Commands339170 -Node: Readline Killing Commands340130 -Node: Readline Arguments342051 -Node: Searching343095 -Node: Readline Init File345281 -Node: Readline Init File Syntax346542 -Node: Conditional Init Constructs370128 -Node: Sample Init File374324 -Node: Bindable Readline Commands377448 -Node: Commands For Moving378652 -Node: Commands For History380703 -Node: Commands For Text385697 -Node: Commands For Killing389346 -Node: Numeric Arguments392379 -Node: Commands For Completion393518 -Node: Keyboard Macros397709 -Node: Miscellaneous Commands398397 -Node: Readline vi Mode404342 -Node: Programmable Completion405249 -Node: Programmable Completion Builtins413029 -Node: A Programmable Completion Example423781 -Node: Using History Interactively429029 -Node: Bash History Facilities429713 -Node: Bash History Builtins432718 -Node: History Interaction437742 -Node: Event Designators441362 -Node: Word Designators442716 -Node: Modifiers444476 -Node: Installing Bash446284 -Node: Basic Installation447421 -Node: Compilers and Options451143 -Node: Compiling For Multiple Architectures451884 -Node: Installation Names453576 -Node: Specifying the System Type455685 -Node: Sharing Defaults456402 -Node: Operation Controls457075 -Node: Optional Features458033 -Node: Reporting Bugs469252 -Node: Major Differences From The Bourne Shell470527 -Node: GNU Free Documentation License487376 -Node: Indexes512553 -Node: Builtin Index513007 -Node: Reserved Word Index519834 -Node: Variable Index522282 -Node: Function Index539056 -Node: Concept Index552840 +Node: Top896 +Node: Introduction2832 +Node: What is Bash?3048 +Node: What is a shell?4192 +Node: Definitions6774 +Node: Basic Shell Features9953 +Node: Shell Syntax11176 +Node: Shell Operation12206 +Node: Quoting13507 +Node: Escape Character14823 +Node: Single Quotes15324 +Node: Double Quotes15676 +Node: ANSI-C Quoting17022 +Node: Locale Translation18410 +Node: Creating Internationalized Scripts19757 +Node: Comments23958 +Node: Shell Commands24596 +Node: Reserved Words25538 +Node: Simple Commands26406 +Node: Pipelines27068 +Node: Lists30134 +Node: Compound Commands32009 +Node: Looping Constructs33021 +Node: Conditional Constructs35568 +Node: Command Grouping50475 +Node: Coprocesses51965 +Node: GNU Parallel54664 +Node: Shell Functions55585 +Node: Shell Parameters63694 +Node: Positional Parameters68230 +Node: Special Parameters69168 +Node: Shell Expansions72478 +Node: Brace Expansion74670 +Node: Tilde Expansion77336 +Node: Shell Parameter Expansion80105 +Node: Command Substitution99215 +Node: Arithmetic Expansion102751 +Node: Process Substitution103719 +Node: Word Splitting104859 +Node: Filename Expansion107003 +Node: Pattern Matching110102 +Node: Quote Removal115338 +Node: Redirections115645 +Node: Executing Commands125457 +Node: Simple Command Expansion126127 +Node: Command Search and Execution128241 +Node: Command Execution Environment130652 +Node: Environment133964 +Node: Exit Status135671 +Node: Signals137459 +Node: Shell Scripts141076 +Node: Shell Builtin Commands144171 +Node: Bourne Shell Builtins146285 +Node: Bash Builtins170692 +Node: Modifying Shell Behavior205300 +Node: The Set Builtin205645 +Node: The Shopt Builtin217163 +Node: Special Builtins233902 +Node: Shell Variables234894 +Node: Bourne Shell Variables235331 +Node: Bash Variables237527 +Node: Bash Features274080 +Node: Invoking Bash275097 +Node: Bash Startup Files281499 +Node: Interactive Shells286814 +Node: What is an Interactive Shell?287225 +Node: Is this Shell Interactive?287894 +Node: Interactive Shell Behavior288721 +Node: Bash Conditional Expressions292478 +Node: Shell Arithmetic297655 +Node: Aliases300740 +Node: Arrays303698 +Node: The Directory Stack310500 +Node: Directory Stack Builtins311300 +Node: Controlling the Prompt315752 +Node: The Restricted Shell318893 +Node: Bash POSIX Mode321683 +Node: Shell Compatibility Mode339197 +Node: Job Control347884 +Node: Job Control Basics348344 +Node: Job Control Builtins353521 +Node: Job Control Variables359484 +Node: Command Line Editing360664 +Node: Introduction and Notation362371 +Node: Readline Interaction364018 +Node: Readline Bare Essentials365209 +Node: Readline Movement Commands367030 +Node: Readline Killing Commands368030 +Node: Readline Arguments370011 +Node: Searching371071 +Node: Readline Init File373303 +Node: Readline Init File Syntax374588 +Node: Conditional Init Constructs399529 +Node: Sample Init File403897 +Node: Bindable Readline Commands407021 +Node: Commands For Moving408249 +Node: Commands For History410352 +Node: Commands For Text415438 +Node: Commands For Killing419516 +Node: Numeric Arguments422320 +Node: Commands For Completion423475 +Node: Keyboard Macros427794 +Node: Miscellaneous Commands428498 +Node: Readline vi Mode435155 +Node: Programmable Completion436110 +Node: Programmable Completion Builtins444070 +Node: A Programmable Completion Example455639 +Node: Using History Interactively460987 +Node: Bash History Facilities461671 +Node: Bash History Builtins464786 +Node: History Interaction470032 +Node: Event Designators474360 +Node: Word Designators475946 +Node: Modifiers477935 +Node: Installing Bash479847 +Node: Basic Installation480984 +Node: Compilers and Options484866 +Node: Compiling For Multiple Architectures485619 +Node: Installation Names487371 +Node: Specifying the System Type489608 +Node: Sharing Defaults490357 +Node: Operation Controls491074 +Node: Optional Features492096 +Node: Reporting Bugs503901 +Node: Major Differences From The Bourne Shell505253 +Node: GNU Free Documentation License524991 +Node: Indexes550171 +Node: Builtin Index550625 +Node: Reserved Word Index557726 +Node: Variable Index560174 +Node: Function Index577308 +Node: Concept Index591167  End Tag Table diff --git a/doc/bashref.pdf b/doc/bashref.pdf index eb8b766ac35b8a820caa6bed7179715409c6d25a..75106a1e8f74a89747a61e298d1567d3edbf3d23 100644 GIT binary patch delta 575403 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%0AoYB`j{>@Wo}iGwKcr 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 delta 552878 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%0DIROh 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%0AI>tWR!ro<&m%;ExKw?PwadZp$N!{ zBUiGjwy*iDp+W_!Xt(PF*!+{%d$mZ?Gv`INm9489%!)W|Vb;<L{(=i4r4$_npZ9=V zLAE_l+q`NkFV9_wHW`K26uL7>k>wO-_7r7mmPh!1*OH751|@{15dHCU`6b79d6H8j zPUjB0_HM<#4<Xgrsg`GstnnwymnX5R*Cj<2J=>Bu=TwYPd8}bP6>D1orW@LBO10YN z4;-utyLMR^mUzz@bp(;Lb@}ECFHteGXF&s&m&w`u7cdC~$jY|%w4k4egGb&ShZw&2 z`@5HaUhP`nY+3AEe(P&H@&K&+3Bv=&&u8pEKu7W+jKk*?-}XuRn3Cte^puw^)^_q2 zfIpZuG6C^SOUN1j2_cZ}#M%;~_Q{gci-!R-pWqub4uCXz3}TO6lPOZ?8=jSV85)rR z&$9%z(P;>&<raIKJ)mN6N>9#8F_JG!w9Hz6O3VO%&pVW^+T@h9bdm*mQJ`nFxVObm zKuE;^RtG0rH`Zm(bK9~ny2=)jEiYSqj8T^YlHf1~XUihFJWe!rUzY2>S0;dgWCq0; zAVHcu(fc~;&5YdF|E`#l0PkHURv>92VjkSvP94YJckT>6BEpCav?{xj*D|w~Tt{$! zlrp(ea!37y<ZGsrXJJtevr9Ei!<nDDohST5ibziNbA+C_+qHbAJ?lzmkAvQ#3#_lO zgO=-B0xdOeL&(u^V+Mef8Z&sV2L2^nT{42iYlUG?7y&4^?f3xhM;Qzr|2wu&3<!Ng zH$2+ck*KyW69o@#orN;m<;6f*5?$GU$<X-hv`i#V#!(b4ia&v*)}bayPlLle)QF_m z7D55~%5&2zU3s9I^fL;K>6zdaq4sl_G~vN^y}pzd?}1Rh^WFh#N!x6GDZBQ?s>XEX zFm|>ThR$smZ4q+sg)eQHLFoFq>dRmGzVw!!O^mlu^E7>b4+;9?#|x?X{{H`emy~&v z>(cQ%tDQ0-!U6noO5zv~1b;*O*zvFApKWPx2Cx?eH{4k&%a23Ka3YR55m#=}ah`|@ z>}cJU3B3jCIw;U@eARMhiY3|wFG=-vnE~3-OlK!#4SpI0Z>Cr1kX<VXg94$E4A}MC zo?=0(HAcZcvN{0#FYWthRYWU)*O*xB#&aCOi&{a~nhKgJ1*zzXN<p-n8S%w?Qb)6_ z5;}{aN<=tFg8SEbzvsCh=4XQwGXr7Sh@`Y-0~fR8tZZbN2$O5oaMVvIvS#WIFww4$ z10|;G4HnJXd|;E~kZ(JZOGqDNfYPzLXLZ54F2Eqpg!vKB`XH%-*fZaMj?^WiEkSq9 zNf-y?2_a*A?CiR`(ZDAK$+@luzGTKl?vs>WVSRlnXJEKgYBn4$^aK$&=|)1URo1nE z-#xb70c{(`*y3$V9!^{_8Iy0=+fQC*unz;y3${!4zL`((WVU`W8Q@ECH0!sbEa=CF zeyE0VIISN$uKfkL@I|73iGeG>aX71Ll+Spb0w=~y2Km4P-4`yX2op|MYYQ}yP4`{X zz1&!Dd7-6*Q$Qca&wLL&UDB!LF7|$l;RkNh6tzuOnc~X|n6((gV@t*)4ua`*0)TU9 zZSn7NX#1=K^rO25(C)?>X8l+6St#TQ+;1MeaR8AQNApW+U`N+~q9c7P3FF!24m^wv z$-U+M3DmDipiOOeP4$bt!rQ1&ibSn0sd8J{ryMRO8_g=`zxblm#MowUd4w>}du6SK zN~Y_V3+ZE_E!|fdcVBtIiYgPQyTU(u@tjCiI=7&4(RYa_pz82+6Z5BQnYJz=IDaq^ zqEg#x4NO#*Un;PFf0rNkRbfFR*^fIh6VE<xC8@~b)%TJ4Ed-rVZR0qv%Ws^KiV_Pm zqSUW6_<4G|J$?1+;`zigwUI4flEUE9`GlvBOuxCF?b@2ORcAFocf(dK(I>6?p_>pG zJfiQ<v`&Jq+U>2~aGk){e0{N@J%Lb*Bu+eFJF;Ihpo!vtuXy&$9Yjn%K$36lTw@mx z`M`-`qAm)^RD9_0NRb*j@B{<be#7t#IKkW*aDur@z==Lfh0%4uX-0ezI60bCd!6Y3 znpa_j<cIsWD4a6~&isR{U;^j^cZivE=r9w#e2$r**9ld2r3Q}r2_4o<r(6TVVA?}b zu(aUs1w@2@A6Mt#df3(NgBMvt(lb-f-P<b%VB8*0Mw{AXPRCg!j9GrP1F!;BiaJP0 zhz#sv=?}Ox1mHgf+^egS7w}qoKTVON<L?#|4n!0tES@5Fy(EDIfS1W%mrAT^)Evk1 zqTQv4&1CncE%Ls^$lCjMND^VRT-lyg9j0blOXz)nGUdOr+C)|q7`Xn$o*S;T-cMXo zMj|w)&ro~V?!rBO9B0c9^b6k)p>IxZQurI{r#zo&Hz#7B-!B+0V;9u{gew%QdVgm> zn&QKI(tt=_k5vtTn%W)XLKhcOdG`OcK;NFm<~sQu@wXLNv7D~R+}8gC>9GD~3T19& zb98c($nOjSGB%f?0|6A1#^XB#NKup&lLh22f9fKEKkA}PF7h;uOH*8IkFOFM?d~qP z@%NuzDWSUr!png2hmWuR@MD%;s3b0vQeAw!4OxBMU0g+f+PnLq>Nb~YnnvmS&80C} z^n>f`Ef4*?uMP)p{<ta9sB*)ptNP8QHnz+nm2Iv+{`J+LKaMhFTE9?Oq<ltNW%Afw zf7rsrDm5%{4SSn3kE+Jq9ID+r=vf^N`wE9`bacaZqw{FbT~B=v0vA!$-ELIWc1Ivq z(T+*J)Wg0#4czIfJJ;=a&Cv3g@Xn*H>!sD+@{~K=@7)da9zbQF3pm@QN@JC=xFAds z?Oo@#pyfWsWm)tQIi^V#bs!GOGMu2*e>FV%d6OaQlMvw<(!@jw|J1iUJTMaz^+Q)T zcRa|)haD?f^sgjK{*7{hYHg@mZEc(xybO}_!v`Un>tDqtGoI!xFjLI7?RdXk%ZHcU zns(sEbPcGIOP%L&S!SXc#q7?Cmd83z{ieVB2Eo8cSu3fD?%e<yZ{G2+Yj)faf3g<n zx-WH4%8yw{Rm8c@;Wvv_F4p!JP`1`-^oUArPuMZhucvmXc-%EO@yMNf*9}b3$}*CM zr@S;8{Oi=yg?R?KXYgcMkKXsT_uHcJ4zd(<T#0ctb${&Ntr#C$Zl1ElJ8rWpwB1m* z4UdqM!0%){LVBn{Xm>a~qUVF{e-_q&?T+M?You9y-jI7ea+j}Oj9&JTy-=i3P_YFs zV45cj0dZt*)i6*GeRa6SyUj~r-4B(M#i&C3-8)?HnH>ZA<3(YomvFGH-9h%``&n#< zt5<}@gTquj&IJbZN8#aiyBZI`8>r}}Zd@nZw>}!Vq3!SxMG~z#g32;5fAi5re>>|5 zBh6c3SBs)p3!5y9Tz$ZRDf1Zgn1US!B<$U>5@mGNw%S$AR%To;4gw*gOtP7Yt;(Io zN&14oGD(eTN3oL{qt7r+V{P*ngoTMMm~3v#=pXy4;T=Xd#$8Sn&0%zPyHdxxu-~eC zV+-***uV#7+=G&d!9>L&e;?ajeYZz}1}34TVtg*cfzVEPs2;CEQ`(%_<+g45dRKMi zNTr6$Cz-7ZWwvRY7p0f^zU}LWwWFnQ{Co_s)x%IVJI@!A<muor1C(%<2QZhuXJ3WM z$&*k53cElx=7UNG+;-b`yGuSzY2(DE^TUAV4j4|1r9>ei6T1>ZBbEm%Kw`amFuOQd zVaGdzqioyb{h9`hiOVU);7Qi9sE&;ZlhNlUf4B%4Lng>UgmmVV-6lgLgTFwaHE}eE zqei(=zbU3r{2zQKgZp8KQs89+;A^-Y0u$&`kb%sQNcWb12fuU#CeWUT@QG?njo=m- zn*dX?(Ey2>^Q{K~6D<79S^^wmv_%|(z7I(f6F82rQ)xRHFLo&XKinhs!le)dIVoyE ze~$3mKk{WkE~~e4Ltw~t1NIAXazLjyrRSfc6ONI8C3l4GViGIr?YW~tXlqjz8u|kW z=8b)k8PXyyChKfk#HOg@{n~X~Fp<eMdWQ74L3=-plAsmzRV6#`rNNdMkU^AMk>^q; z7UJdH4EsIsKNDPvtPH$iQA4N_f>f?Ae@vOhWnMm0M|kSXfPAf%STLo%e})_6&{gD- zi6O;s^GfVLhXM!>LCqgd^#S15HC}mwnBk6SiYQmh6QpGx7v)P&;HjTE!IG(WUd7_E zJI*SjM0r2UCl4H{*_*N?*0^_QrDM5-wUQv`u};E{uagjIV`>YacPe!fP7xYIfB3zq zlbCE#8m*wIe<JWC*lh}6+i=6<Z*aQ_f5W)oZx|*ZZ6p=*lw>6uZJ7#Ax2<M`r3cx* zK%})ZJUTHbA~_Lv!W6gS_!E}COrZprK&!E=CKz-*_Z@eqJPVy!o;88H(n6M`WweJf zNhmjkqG*Cdd_S;sO3_BDOBn0{e`72pAKjBtpkQZt5P%U*2VEWDO1zp8bC1w6B;*k| z4HOR}z^9w&c}i9#V8^J=q3)_D7@hFcijv0*LHnAOGiZ%LIb)(#dn2#cMSx<k^QFcU z>oAL9H>J#^IWx_t>4Busfq4?oPUu=$H~8%+_YC+NKy?Kql7dT5n43yZe-s5fTr&zU zvPJl1V_wk->r<;hf12?q{)SOOtBJVctjEfSKId}0Whz>E4ZQ+{t7cmWWMcwGz1Us{ z_qqhUS@@LjX)SAHRGv>I12SW*aF%Nl+jLy=<{Z;vVoD(q>?=<5Iiea}5e#eQiWucE zLga$e*8>^7ow2&WJ|Eoif1X`NmtJ`ojt&R%;4h-LLM#s_XZKW)Gs5VhZYmz2aKJ81 zee&9gdolX$SPzOjuBpxBF~mZz720GCL~3jXAX0htC7`!OZGx_1ECCBNDQptLvJ~y` zr>}lJam|UnR_JF>34Q^4)t7)(Gjit!AMtRKV$0@S9Q7QW!VSEOf3A2A&76+-w*(ff z)^&;6-4gE|KgJYg^q;D0X)+h@E*JTY$7%{G#Z<#A%88@^j4}eXd$(QHe5#;^8!PPD zKC<<}^}UEwA0dU;Zm15A9zQ2>md&BsWP2MaInc0g{F@0FJswcZUEH8;B+z0mgOET0 zJV^TMPZ~L3m#M0Hf8NjEjo?DO&3%Qtv9X=r2yUL|{{9S@&0=lU+=Z{Mpfb`~^oE@d zn;(AT->a+lbXV`MufIb_bm$D<-|*!1^_m!PO>wbIK5pRGZ2z)mgOW@75aw6a3XF_> z)?;&eG#IIV*>JW*#_Ny7CN}A4XwI!_ROPWM^z0R+G-qzVe~6XJCw}<fDo-%cDYSf@ zC5Tvz&)5&{=JEMh<r(sW)49Wg40$@9>&)5b@6gPRqc*kxY)DMRk|(i?cSIl4--%`S z9%=heF3tm&M)D_gAdqoES~r|0Cc1S6SreZ9<^@?$p3K82i|i?<puZ0ysE@Lhe?iYV z;XZjnPgQ_pe^QlBIEG%oaGC&#(%}aj>^lBg#5iO@n8FSCI*#4Nn{L37Q=kgpt)MeY z;;{a%bH~dS_<N)UN%560DP?RXuln@nzgO2tOAjh4HSu@9|9-V7$IlIR_6g%1i&E1^ z6ij<PZ%rpjf_ejI$0zfEpsS8S4Zvf3Td;sYra%?ZI1)^ckJ<D=i(dEnO|GCTeDd&( zi44-|K*0)Il+t|e#eoSsLucJ2wT*K-#+8SMhj@4xUK9s(k&~nCA%7ZDbn*0q7vF}> z_`Q#tlU)M4nO(x9+>bYpJdJLs2)7ygBS|39!G^UR5UiVP0nV9>aqYEe|MjY(RGdxk zn{P#cTK3<fLAl09ILN)m&U~kB4v%3i#$N5?)%bnsYj7c%LHHNkrVmAljZ<spq3Cat z@$kbRo+VTKxM=bqIt4*z5uFT^NbVtjR{RKu+1n?!Pu%tVmna}gr4meiRhb6y4m)U9 z{%f<CmrfOhy(8UY$1kut3%_>4Lc+hNevqE?paFaRsgqVsff!r#4Hz37pyHL7O7ELc zgHNAhifo~DoThIkh2e6ORZQPOfY|ZOs7fO9%cuw_j1QN0b;C-+F=k+(zTL@x!0l{R zHdVSAl$8RvmU{PymvBU2JO;hOHKYP#$1la$l+q+Sm!uU$E%QzFFLI^hob_~o+WOh* zcggZ;#btackInIeHFofQPz1SULAcCh7lag&<;Bwvz30B2ek)QSvz^LfrO(9>8yg*b ze5r@p2c0QqFIAHlF}4CsglJ?Sm_Z6$Pmek{*51w#3u17}=lKLcmKDAdtSJBdz{HuF zlZWp%1kA8sk(0si69F@qv1|ntv+3{d2?8@VlR;Y(v+VgT2m#5r8Ug`s0R(G$lp~YD z?<WH@Ff^CZeg`SH-va@n2!GRbc?@h+8nw!@T%_{WDLn9I0v)>zo1>hTr^e3GtzyxS zu`0hOrd;|A)T%T=+QyA7z3R)rD|De|T!64%PcW#^kkkW1k+dNcS!|LwyRzGbs}ZQ{ z+~Q{BJe<yG;o#-tZFCJ8y1TP;qU_v%08%(e19GR78HS&0^k>GBTYrP`w9g1b@*E}) zt7xnTzqG6RZC9TLs$KvAH5K`lZ4+Q7Ji%dT_o_Tg%8*AEkolWM6!k$s*~^abKHE`Q ze;a|F<G%jXaHU15Z?th$fF~$!YJnE|axwQl{eYnaDEIZ<M1o8~!@^Sbim+q`_GZ<6 z(vrEGNei%Eq~&c>34aSlIkioapjKSO!($>r98x6^R?WyyoSO0z$E5V(b_ZXkDy{S= zK1}Smo*-Zp6~28Fb?>R*44%am>A_zSo)(!=-zhtZvdatW%SgOpn6gH){^0binT`{_ zj(p%!3GXJF;K`+%_iJgUKl#EFFUa);%jFwpsYHQt)jFy_nt!uhIDspXK|)TRW)3pc zRAf*X-teg&dNTo!In@Qyd1O%9CJOJ>@a6rR$;mMeD3kiG7{NXHEktH>Vf3B!df*%6 zE>KQdV!%m%FO9^EenU_FM$Z%5(jV>8L52Zn`oZ5dYfiiA*?l@6D|Y_=7EC%%>Es6u zE&GX(6p*70?SBUJ{A@2Uz0e+*f%J=mMn3T_IJzW0IHFAK%NqNT4JK^#+XtzV*S<<8 zze~vn`t5z&M=!ZJRl!QYv3G|eFQhm;IW}=|#lJvY2sJq6gP0@XGG5^g^>C)sJje3F z{{RI)2_itinFw%^iho?8e3oW7ImKX8A1F(TkWZZ&On>_P-Qmp}C@CYPD+$HHpLvz? zNg1xm<mEyPVEPjg^~kXWfm(i!44ZtJ`s@=Eqj~d4`ixx4@sNfO37`j$rR*1UFe?t{ zYNYe(uW3TKoz;esW&s+F%)jq0?4Q2^r((Y*nL!D>vB-$$v4)ovmpjtOvW{N-Lsn-m zKXy6SheCmb4Xm1E^*n*MK$dQSjG5Rl*;3_ULgvCZskKk3xYtSsQiXgd{8%6e%y)UU zkg0wWow)X(5+CeH1dsPWFYK}hlfmy30X3JA*aH*+Gnaw*2r8EgRssrt#iA%s8Sv`F zhbZa#DHk+B3N#IJF51F5wDPX(Ril+QdYsQK`oDJ`B=uPBty38AQq*uboEiRRIF#5# z@FzA|v`Lf-Go5aB$2Sr6woe;w{P^t~Vd=I&xSdeGzkBocn>gNxD9oZvZ0;VXtnT)k z`{3(Ce(H<%W~-D6)VrI1t=4hyKJUsMcYQb%RmIJ3Zc-H#c|Wv8ce9n+WN{#}n~!&Y zeDjApFGDQlD}_bME7FQc!&|*EsSbtGEb@o4-W4E#R6&2Rja_qU8)&A%uIM`MEA8*D z1)+gX1bgnt?Tfs2&oA}v2F4!Rrfvo|tT`U@dVh;cjcF!WDF|qPrUI%c3U!7{BGE{U zoh6*DM42$jl97&h+v%%koIJmgN$}F);LTRWGL#DRBUC729@G|~`nqFdbi)o;8nVIe zP!HJ6G?oOH+=IPtL_ni-&^+?1oPTym(VXD@OnFFI+If1%x%gc6{HjBq_BAl%#b&d` zDhXy=E_OvL+JupRadaV5B%ojwMnHlTTa{!Rus|3kRt+kYVREyLjSRm1{x2X#5(hur zC=ujsUR6c4HV<qIk%Y#15U8uAWyLVaHk=Jov;p<>4ga=7%?rncpvJ&&z?UplS@ZA7 zP0wQwxz(1Rpl*6@JPc*k`@t}wn+Ueufef13l_^{qiZx|_U9yWr);9z%$y&5$J2ut$ zh(hcee*V|c_0Fz&PYT}%-eOx}LKRsB@$`|JO@E7BDeWG7Rra<~=SN&(B*7`4o{FyT zh%yUyxWSO(0fb6|f**#i*mH}dgJGx;+eMoK`&jAFU>_w9>bR%0T%E>w8C$=OamV}} z5vv(cr7AdovT^x=*lVrXzp<yIRbXpwW+r<s`vbq-mp?^9f&Z}SxHE5`h9mYQ0j*vq z5jYg^H~<TRo*o(p#92G(iyLSs1*W<xP?a!##lE1m*1m<sN5P@#`ss56tYs#Hs;mi} zp$V|J=hkD}9I++rG=vQ3X)0n<BhlQ`um>R(`aYF^d&janG%a`zAs29Ki$_!hpvIcW zXkINeD86=@7Ysr8%Ze9Z7cwyVB|f3@o7$3|$eD{a@5=^(4?BN~;;5`oL(h*D=#`f& z0#rP>_NSW|_jO4~jx;B7KahOnvXBDs&aqUa!c`lbnO>!0i5t*EZk<L!XT{%@k1zI( zbq8#J+X;!V8QNWehRoa!pk5|yYFM%WYsINq!U2%+CQH#6rz+pAM=4`MsXZWn26ydN zgA^cZ>Vp)z6wdHi*x<>LDa*o0iP=8ejr$Yy&)!Bsq_<seu^5$Tu{O%|7MHr>(+yj? zvVe7_YT^Q+r}l$gFk{%f1Z9-9&{Cp=P!fKBK;BbT^aTSNc=xU?Pv{+J10mV3nUpaq zwQ&$SEHoxdQy`;;9E}hQgYJ>^#w*At?4J)MryD$sLM;i0n~j{etn!DdSiv=i_Wd&L z5|Ii)8Jid~CL`pP)XPzCC*+)dnR)s(XG(J)`u^0td;9kJ`8j;5hp=g%-geDn{|s1v z_SRvtZ~UVl`lc=ODm?VZYALmb1Ryi!l~OzEbE)S^#e(TFxzM4~MsjiyTaGe={4#S1 zhT`<%!+{J)`ER1ZlVE!e^^RfWLY4u1q)n||>I^{n=!elG=LCSKIX_P@g!{?s;Kfth z3@2_*_81~Mc{FraIcM+CEIt>z0cYWV$Du3hr`a^vQ5D>_K^tWQR#ULE;7$Gxh(jU( z`WT43cNDj<msbD{o|GawJlXsLT2=Wo?PyEBhDtILVJ4M>o8PRdG!7F`XXFy#r=iN* zRfGehjTz@Et1QgaG6A>i`s<;nSx~=hs~>0)%+MO>rz5M<&Xh55Pvv}TI#WY`ERh-Q zZT#h=M@vqhuqWrAu0$x}wm%i%0}6lvEw(v0j;%@xlkk?}*Eq!S>^hsrmw8`UMmBYU z7A2)CacvY?rp_~DD)|7F3U6b~7y#d_Un2#K1e_zlBL;NPz!&5n)3KJLorBM9(6JlZ z)}=@e>XD!u=h!v;qWIkZ9@CD06f$XkQy0%`%Q-C$Gs+%jv^@##r@66mIe5{Y;P7O_ z(xEtBi71l|t&~ghAv-K~;GsN)_FIthZFi!A!zM?B&+phx0gI-XtHKm~dp6@E*<{V_ z0n3cvL6{n0uCU5B2}L?NryftuQ17?%v)PPymP~oyuQC;(j`g@b_hnmu%;0gxFws-$ zk867r4ti;55;0$Xv%2M173Dm6MOet8;xPyMvPwPKz0>K(HI@>DRpwVKRbE$W{Hv6z zzN}OQEKM@k)ZKxhNrKDbp@33od?Z{_ZUbV^6wxHX!+!11FOoC_f;9!l3#BD#Iv)DB zi4a`CK=y3`2c1uNkYfCQk{leHc2%7sibG?(vgYPrM3M-k^LBNMZz%1{-5FBB8l+Zp zJoyd-fYFyrKwwhw8WD6hO|RWbQ(7rb;8#jdgctDJ4X0C87FdW<iG@z=hYZVR#|PkK zi5ZBDo-Aw|D=rYN*i2?|C?YTX0~ZhI|NiBI@lx&Gt(j{EGBikkxuR@dwwkz4Y*_KJ z4Yb(6UBlB36#BSpvVZ1ImO{=jgE2pL`-M6a))94Pra;*h#WEYkqm2O{L9Jv`T**cq z^>#wOl8r8za%xyiRDuPqn49-s&$Pil8QFQJKKZqc`yX#PsGRaA8-av4I~t@}sC5Rm zgX3Lt?POqyw<Gm`T3vR|(kWGhT;I5})h{)sG-DXX3eW&&gBMqdTr)GI@Y;BgpuA_z ztbjO)-%v%ptD4S*clKq7=<uI5R#DhZDFic#Q>rkgaVW<k<bT#v$0+r{=3Q*TM+)GR zIjaAzXR})SMOn)|xP!5)PqEQKDg_6UnbGZ%7zcb&MI~~7xry-osCjrm1-c424R$-7 zPMpXTaU#wb>nzHwrR)kqh<+{DUBtRXPO%QABhP?dOp|Z9oWXh-ML~}=p%nAV!x;!l zSJRcQ<cf_6hRQg$=_i(A+kAI63c@YuuBi8z@vea;1c^9O{|5+3@S|A>!s&d5Yz-fU zahl8x{|x7U6IUTwlSn7ika{ulVpU$m)A<#Iz_Cn)c>vi5(*Szw>i;(GbBj=)GX<n@ zCm8G+k5yU=cdUYb&&8${*evY~rOVdDTvmX^@xtWPbmiyO<OV{{Tv<mOzi>vaFJZmV zkY;6oU=Y5Axr&OGdOIOsgT)2YIo6{zCIozjmJ05Fv24YiKm7T_cYovNpSXmyF9_Im z;(#3nh{&7;EZAhRdhH?{^_4{|nR;-)T}5gUM)7se1N&%?jYsrkt`xwMM^w{%F$H~G z1*6*To_n0*K+{cvp;3j2N@s|`m}ksb@5cwed@;%7D#EzaKJ;?&AG^r!;kT)62j@7R z)=c()3l%G&hc0x=+K#-GTtMccBt(fMjKoz_G4Xany=JL7%Z0arD3J7U<Nm{$(C@9# zA8#$XW<2HWByF>bI7pJS4J08HKva}qgVdO78^}^`C**4zXu))zSU`BPmu>svF(2F| zn&0rZ_DYX`#=Mhm-`K*?;(|GXzjr(w<ija{JPh?OLt_gCv3EUpNyt%aa>*BS<rjE$ z<5eF!s9p6`sji-p(>)dhy??GnT0oLac}V~5)!NwaFn}8od^JrAW`{@Wx!{}-6hnwb z8<9m}0z2u;#&p!%3HgdKmrNJ_3DT(0aO3{RiKGO5sdV0lbm>{)Si(F)zEWUEeMR7Z zB~$NxEX7%Mjq(_(u3^jPDN4E7MpSY>WYVc$nhdfIdnE*Icir{av`0P@rWE?QWdSG) z9%00c2cHzvX`L>Pqu{Ia`BHb<FUOt<PG%k+*KWTGyfQ(tGBXyJ&81W^#mc(R6t|D7 z84<W};-d#2SuNA%i_A?5anxtzL){gB{iTE__Bn)wX=Z#0rSZE9$nAsy>=gPMOk3*h zgnSLB7fcr$Aw!@R+_-<=3@wEoc<>hpD`;)p%qwuM0-dhHwb7t*IHnl&8n`x?SdHYD z;CjMz0@o}hq(gF9cfu??%k1|g*mB>KU>l<?{^tBMsZ3`}-^KT(9ro{nYQE5a8tRHa z02-N$1y?(B+wyIBW=kEr-O#%E+u2aOLZ`BJ^>X<#ZnD8*;Q%3am6}+(>>~EJF3`#= z<o&_~po^}jZ+T#qHfxT@+BxE(E17UVeToAu|0zyv({kj@Khv|>;%;a0ZIAZf_Ne8z zJ+2zg9aY|)AM5q>3W&?;bLI?xDZZ$bs^D^I{rje;54sW?Td_q~UD!B)lA5;MVFrWG zpui5o1%05E^3?(jv>cA~O#!ytHwD-pI@%;NN-#fGBe3ZYgfkJk0bIrxWY&DZen${Z zN@xkLmiqW(gJ>k0U7OtC6+ibMvF>R<*Anz?NtBIg3Q}|hUaa!n4l<%Pt9GPX5g_#f zJow7OdGQkK?LLcmsPg*f3w6IqrMt81YWcS=p6Rm_yiH3KmzFL3{12%}Jjj#5?-Kzw zmyy^56azFgIg>$%DSui^kL0!yzVELXBtYB^Y%7vTJ?NZvowea0*%-Uy_+T4|M$MTK ztd`o6dUq$kKJ}tR_NZqjm!J<#Qe?4MtorI9C08;0k}DHm6-q@$msj=SRZOG9-4!=J zeD^Amc{`Z6^Jc!ie)Z>Xv+OE~BNLnC>iX6vb-lm(dGpPEb$^`fu-z%8HtOr`PU~#* zwi=t7hd$ohw&mux+fr?8HJt`KZg;89O}0tn?XTB=d-d*m<{?Yd7cz@8pXW9&b(AR0 z+%~YWPR!;8_AfWKu1=%nk?9^AX}q}^s@lr5YLKVEu^m2b(_&-yJo0%91o~m`W_Ejj z3DD`g_Q5T#`+vKx`Hx##$(r$0BgK0mcyGIzm4}5GhzE|lOH`C(e2CE=tD%~ZTv{fZ z+o3;ji_U<Jx<4F<BkZ)zIC1L+d4Ayb=lf=|;}Oov{eIy8s_TJ_bVk0sw2U_gm<Kyl zHPX0;{cE`O2#;E9-n3)?8m5_qPvNtiFwdv4>F!t!h<{6^v`G5(G79V90*!xxNt{Mm zkpnp*LucV>!96Es1Uev-4#?sO4^6uOV{mQU0iF*{$Fjp+okXx*@s!aXn!0cM?sYKy zZ`n2vx6Pw6nK%B^8f#fpq=lRDl@RR*rdn~gv!C0hvk^%S<XA>|R)7G@C@xc8`4g#! z%6Sd^-G83CdTM$aRHWEAYQNYTFY2^~%c3jWLko8;Qjt88817C7pa+MaWZ~4yznkOJ zpQQ+jWzXgv$&~uB!O2xCgVm1Dl4!6_9qPhR9V}b~T0xd=_NReV1KZ6cgLsS+?~dJH z;w&ENH1-@W(majgyu8ZOJj$N|3^#W-PhNqHkbfXC{L$76FDe2&;pWdjY{R4D;16ii zl{@3FAbMS9AdoxD&r@}N1YH(U5@#<uf}8u~5ki7=1dw0?)><a<=9(?-YNw3Q^0DP8 z$k@<TnjAPEK!d6SNuQA(aC_Ap3`njtPS^kVyfyF+(|t8DRr}=#ur<nX?;cxz+M#4m zWPja)-@;6PE37_JMT3%G^bIF9@_*vldjSKO2^*4JKrCgFpXsdqB~CKX1DFce$vi=W z5xnX^M0cd1Amq%L&BsuVrN_rQkYrJs&7zCfL}wzC&QL?A0IFc549MM`-NW8_%oj`# zfn`06!m@2GnS8O40g{@WWsM~RZIihTzkmJl{WtI5{NvpkXFw*85<sdzWS_QK4u;TF zH?5#AF%57x+DSma7g%PO06<tBq($8Mk32kr9=I<@^}-CdS%8RuGz_vcE_o39hI}31 zr1OB#tY(8iXrhO=_>T^2i*Q73=O^K@hg{Spkp0vQedhp|mr$I5Gn&1OH+3a6M1Q*{ z9HuzK+D=ySgyp2fBY66YU`vpyO1%N<Eg1|1VV@h|o<`j%z}H)TX1~<-h{Q(-<}!U* zKZ+uXi&;PZ`tI$I->oT!N+S@k%o0}5X{AZD`1lX+u7CXSew9=iWqL-BX{e4P^Gw3T z<3RAjBTWZa*sy8C_^E5{D3d3Le}8EaM`@e}_~%KsM8h7rAva=W{I2;#*CO3Z5`v>c z^y%?i+tp*?>F48D(=;?Ur^zyH37nqT#w5_3rLwnmD`Dd!x1gdlP29wrQ`3SyFlmnd zE^d(nY?m{KyWX?6ONW9mAd4Ur2(__4ig1k+t_g(;UE3jI?7735imgjR&VS=bC-d<U zT2{D8VN$Bjj*d}LtSPu?WN&~K##8Rr$Rb-g^eVD(XgDPi{zccGWHU`6j!pHm*0R&F zdMvifW|OBcG8-M2f!Sa<fX9cxp7I1$B$qfZatOfP;&&fDtco`Q&C2~9m?U8^{G)p$ z%fvCyGNC(L=4B3&OhtK|o`0*K9fphAmje=J^L-0E;})WT9RI-4RAB=9C#6KM=qV+6 zPgY9j-R<Kz6cUwGLHdgKm#F6=QJKB-rmw}KXGFtj6#1f96dOOk?N37|j^8ES(0t3f zPJyU0r39k1w0snZCMiWeFFS*q{mdE8iP9N_nOn+({CH|_$9iav%YOmE-STCn>Eo#E zlERb#SAoK>DlI6s&dxAFQZN-qsx)DEaDBnDAt5NjFzMaL>($sdj<R^3>4!&{BxDdD zL1>{>%<+*<4aG+|Q1Ktd36QuASX{vYrqP}(ckc#UQG`xwF)F3uSjg`&hSePvH(-Jg zJyc&B&X^B;_OgUP^M4G0JhzyakgkpsdnM?!mVIGM#Q>@D1k)RifhboZtEwx9p74~T ze{5moLAXz&R>(I8g4Wz@q*@a^cCphSeOLKdDM3tv8x@;&KTMZH!SC@V63LjcF?&nw zc$+*@y`+fDq7H+dz$!0*a=G9t*QH$a$c3VG<MylgZ@vUd=zq2H*jw&L_&c_cY6#IK zJ}e;8D9&ui4_NaAD_x*rbT_H<zPT$cL8G%@CT^h=&^uD{v*!iXE$Lsd!q=UI!cfwb zWb>wT^{Cu0SwW{7$?x`5bbu5JCGxlqCQ+<0mvBI5kja}DImjY8cV9r3Q$^$53iiY^ z0CrjbF(Z~SPJe=!jOoPHZ4B8P{&`sn^yaI2Eykw+y0XV82XR5MnES|mOhxctCafgD z_|#8;vCpN-IA7?7Nk6T@lz*tC=tqzO3s#eUl@@;ZdNJ!Sy{w<u7=&q%*95ZM%USy6 zObo>e0M_WW+>#}c7NwL-(*mQ)Jr5m+hN9YnY04}faDR93l`NlckTf&fe2>Sz<+&A4 z39y&Oy&4)%X-0lR*+IeC0q?#hHlrb^$zK2zn&QFOIZhIaP64Egz#62Al1S#8xI(Lk z4qwRw*^JubR86PxFW51h_<n9E6<i3YCkUiMV0C9qCY#CMXAPG*)A#DaZ8b`LU<L)3 z$cq&&Wq)0<LMa2RmNCi*GUpe{d7kG=u>j|}NkixGuPvpV<hkX*t#fRx2%x_pLGCeb zy4rK19HwwbQn)?$1mzNSF|~j+*5q?u*Y?Q8dLkZY>QVZKlraTbtG+7}C5tmVKcpYQ zjH^+25oKmpT`ob2`f92J272(%Vc&E>u6@`-#(z%P2}TWB#(MxFvAB!E<t&5}&A?3` z5@-%71~kTd5oS?bsH`Y9bLAmJuum>kl%kL-3Z?-?h7sXt*Hk)`3<%4y1C3A3*l<NG z$>k*x4ztD-PGj;wV;m=mtA@ge*oKg2Gs`K~DkRqWjSh&8NGk)(Hg4|7bHOo8O??7g z1AitSyVvG$bb(UkV2(>~B(vr1#kjoU3rlb)tdXZmNzI=#J`sMA{9RfA^1tm{&_290 zevMQFnF8rbe(@DjRz}%UTdhySFvB*|9_#)n?}*lP7^7holwD!-ikEt{+J_xK5?{h> z=6=vdT9a&k7_7V;Np%|O^ei6x)bs?Wd4KFU!%O6W8l*;V^ArS0gqtuZzz?kerg6F} z`Q<LnN20wfC$Z)E=BA<|_HRP1cU0{qZx4C2lgA&Pt?}Qr{mqO=A#UM2yX;9yCd#wf zMK01H#<5sq2NxtjWSc6p5;xJ2MM0t2h-l`D1hoAdBS|@64wpLV;x(pv^9|gE{eS&5 zU%vyboUsHJ1bCSl56fC%j4m!S3#YzvuHZ^QQ5T*_u+I?)j#u10tH8sE=UQ|*zm(ON z%T{p#Y08Uyi(VqUe*GPXin7GKtWH^$=Z;EFMjlH`D2I*PZL(yW{G^)PdsJ}VWfFp# zycKYQhLg8I;ek<V)`ZK@^mp$Hbbl7FI>E4h1_q<l%MAwH)t;el)&4X#pQHxOT;*$J zhLKt3hyq)j0YGD<P#;^}+*))6d#I}Te;lkJ6s=njDst~2;F|TBB~ncQqj9Y@Tp`4Q zT}?#~ex-q<zG~wqB%$u&h{q36;Za%cCBQIv-|XqI%X5LD3#2KL(()<^2Y*N&D+Y+t z`5F_u0wT#<fS-=P6+vf6X%#lcvAOHqyEb`Bv$@Gd9dT|r5F8!)K2A{S#z5p#v0umf z>D}4-`D|xvSA6=ZJMd=v25Ui7(8PmFmg-00p)2RO+5cFB8g6UFTL<s^+$%V6{#`92 z)m_yHMTvt}EKM!-Hn8aVD}NNFV?eCg$O0b^A#mYg%LCjKeSoA{MNwuemIBFkSuAzJ zo)>_VrJEai*|cId{PU5Ag-3LVriJJWRy^<+nis=V?8iDg4Zij#G(EPH+<={g;N<b0 zIlf;Dl+RJ)nF5bI#O|Hn)=@;v)3P}t#yNwmulNrO745`r3MRCRxPNea@@=&ZAJ0m$ zVjC{nGv)k7Uut%H9u4XwrM%zAdP(Kpx$s&ktAv3XR*M%0oNM=*+mwD46xZ?B043L3 z%5$$9a96FJ!>?E2=RjNxL;Mk_qo5m~xjB>_;1rJ&>^e>G=D7E;__<VJsN#!*F6IE3 ze9grK2yWypG<|HtHGk4<4(W)b?0P9w!_P7D|5vC6IbBYPcJMWc7oSX>Q<o+{(yhz3 zZQHhO+qThFZ`svl+qP}nwr!)&%&hO?{D8d4h|Ji}+7T=AyNECYW{3UEBm_ccaI<#d zF(qUtgAlg?D<<za?F@YoxgA#Nr;mnT>&9Q$C)Za@<c=S@m}LiNCS0n?|3=c{t~k+3 zq(860Q)C~)g`2m!5+VD#4d>Hhg}7rM`hvA4?cR~UpSbs{-23CUc?<u6;O;)D{twbP z|K~WTUExB}w(+wA-+%+sTTXF0H|eGfD>}}43qEwttqi1s#S`^{opgptaOdp51kP=& zvoBhzoRug*aCYnx{D$zEhchOIX}c9fg%tFixAc)yDe7EWLzy%M-6RgiNo(bmfGkQ7 z#u@gV*EwEb<H{$KG))GGSb^@nwV@_~Q1v=<UL2wHd4-^3xx@f1IufYStmVqVcj<hE zlg``+{}@8uv}~TT@8aY<=<C7V7J2Y}&A!anx5lPa#~C1eZpm~lv{7!JplC!qrG=W{ zS4(@IO7zUqiCPrn`C0R15JC52nO_#J4BOdSclzbow15H{rl%LtB1+tJ+7rWy@GX{1 z)$cwQs-TBl&-wv5H@-ZS`3DzpV;IcLJ=+_JDz&qT=NXv>WUfoHK=6dJl$*J-*M&Q% zsk5ZRtSd@=7ArASE2Og9|1@jz1UIJUa|2Ar7z)ua%An6!z!gyHeAG^>plM=I^+@q# z>m|tIN5y@LB+|9yD*S0uxj8{DD``ut;b7%*-NJ@oJs1Gq*>V}im)Az2wA#3I*k>?} zo|Pur+cJKCy?LF(S@u+pS<H)Qcrb2f$z2~UE-sh&hiy$Y-zIQedAxvb!(Dh1xynfM zX8S57;-w0F13*B4B=%?|{&(1BLFJgPz!izw>Q&wuzf-9!OD-YO?*S`=Ye|^O&F=(X zMT~hBQ2VS?fkfT>l{D4!?`ux*_j_q9+-R5na9ZvyPc{P9=1++#Mn{IMB5^<uU`l6o zB@(Cjf`=&3id*#$P!0dPZvx$_NHsAlyAMtyFUQg>Wqg3~1Zn>%82-P|xG2`f;?@qr zP8&`p?_@NoIlcvgbXOX(MBj6z)pJt^uUo@(fW0H)N$7WMrxG?hz3kBr<YV+$>sjZv z^Xhy;_~4QHZn@oQ%{KQeC~LJIP}zAR|EcPXN_ERTp){X*x6veUF0WI83H)!OObkvQ zm3nDWpM#NUyn>=fy*{A};x-JL=tb}2_r6z@IeRb)`)O@c8fLWx4MXXa6OC@-t>;B8 zU|1g}09`*YadQnTvTSb=lJwY2u!a#skrLJWd4TywD>WCLLyssu4VccFyHmj3roh)m zdfex=0&HGn!UZ(^6zjYR#o!;C0{CTpNv=c9y#_b+qPn?z&qZzFRxO`%3c6iq5h+Qg zqq17>?IROC&?G#eYE;_RfE3~hI5s6JfPfTp_M;I2Eqyk<+;^*4f%sZUznAEhh%Drl zY0f`uXDoIB=jzT`i}BvVAw~7?Gdnz^XAnH&zBT`s1>~;VN!KbI0xud>5kMD=W3!zx zLWsLXp9vdN3AMCp%_TtX#cN;=sNj7Z$bP0*(9TtgNl-~GrtaY{&s0^KpCLao086;B zD}F`7AT(D=%W}1ELybZ9J_NToT}SYHlf!_2AI_4UdRx9wk~NVrlTVU~qCi&q#5NO= zE0rX`ve+rD;3=^VMoKxIxTGE4obSow5Fz<HWgI;jn7;gLn7->4)%vZPVh}A2^jn3s zE~kEK?Weqd4x$1=++{F&Z#VJ`usgdhN;sw|vUU&dQGSBbZG;EYG7dVp69tmNcw;2w z`8}wgHOLB1hN9<DdZ%l0JN!J%hj)yWq87mVHX{G7GC?S1%nSwhuLddYT2!RcPm4mo zm__2LP4;OtAkO&3TBM?(u&c_d#5-IlV?Xh$KJCNg=8h#W^6NkG$ZY>17()w(5m_iG zFr#|NtV3&}V;TCK9J9N|zXG(gL<pp9(*W}${C~T$*qK<<jI}{&{*$-3oG8Dwh68au zjA#=Fa1)|RMAn(22=KEJuHwEO`}tg3T3p&J#qLSJUjm{vNm_LewTHa@OdVAlCr$== z*bWK<TuG?diqNKP!fte7E~DdN`WzFu#LUM<$b3Quj^3ig>BBrx(j##$C`r(DQzOYd zK1V%cUoaHJCW*le0I<dw^o<KL97g5HjrU<0xXeS4+X!feM=DH~0ZKo<453LSCSnPe z5cPWlC)xdM{$MiG!F06wC?iyG!9aew^^hQbqqgJnm<Se%byD%2WC4A*G_TI~@~y?P zhsSf2TP{&JiRhuf<kaxFlaugPvT8hh`Ydr#q^SBpk)9MjfE=SLW~pJa3@P!wG<man zeZGjRuRl!8zT^z)LiObP4~4cq>S8oSha*lv#(`QHT&9Wek||ux11M0QFcj6E_i9o3 z1NyT;c_6to;(#C;eCL&<fFWh*4XODSDxodu$ml=|wX_)MX61+&s8>XXfd&|`)Pze$ zFT*f=v<Q_bfP#_Ygt;J1@#mm}tlGj+rBdLuktI2c0eIFtKSkiZF%C5(6c&$EMhaL} z1p_Q<j2vaW%d516IJ^uuRi%Rzf}pT5NJbTh(KHf+X4L>pb!IR^w7`CfFuFm2l9ARv z)TL^I_#tvdaiLAfi||UsF7kh1VK-jvZlAsKEC}`vkX=hIY^hC+XOY_w0cD|ffnt$h z^?bfy^?ez4H5x-WcNXozCeY`-wR)9T`t<Mbs3OLc=geZa$GzN}1)KkdUh}DYya~3B zsi9p<DOoC!AcdtdTfVOy0YA%;E9>vp;mTl4Ugn*FKF2?gg&aeMTHPGJj*QvOi*Lr$ zuRF<iz}1+PvrVnW8yd<MT<B;reT)kw;@p{iQ?_37(jKot=7t@6OmKQ3J&uY=Gjyk= zmO%Du)Nl?RpS^$9Y}t()vmyL$C#B<v@QF5E5ULkc>JO&@r`LGKN@tKfljbB+z}miy zM&q^K_gLIg<<pbL;_kNgzY6c12NX+#%m>Ckz%Q&r!LRixXVXR&C>!0nGoK6wwpj$h z*m*=!ir2SauU9mdTln>c$?ht=pz54qlAx;NRVj{mC-pWPq^GQk5vBWI%-Ffq=;$Yi zL-wPlvbpJZ^`{1Q$6K2VyT@MaSU|teOt(HU?y_cufkt%JiFi{bblI-YLU)!zE}cLv zASFCK%Bh6GnM3<fd$^>zv?|KbSY1ADGTLH{=X5@HIko|}qp0ggzw=7B^TlHCnUjge zjy+c5fg_=g0A01-7w>Yy%)O%3{Wb3Ctnd7I<WQfLuX5N9If)-ce>r;`%hj6-BK}{E z<Y^3Xzd!TfZ9EWiea+kl5vHJG>e9p(K$~@WinSY?LdK~%3Wx}S%%PuLtSdYT6oeWQ zTw<IxN}&4G9%h`yffH3wUh}5EW^Dv*+4u_ETJ46hIK=48li_3N@Y03_P{#ZFVCw2z z#N28y4aj4_e4^#rHgbiN(@?IpJO_@%IG>Su->XLjmw;~fo>EPj^Y`yn--YA@G($BJ zi(N@Ox3(!y4mBW!(8m+Hh%~Z`3F9G91D!8QJVIhyzcv(bQ>GnV)I-AC5L7vRdOd!U znEEA*?L%vu(R%Mp*z~Y!?@pSDe_AvynpX~rvL=AU9@nG_*%$z~pu>O>ZSN4j-$l1o zYV54KFyrC?a@?unm4HaFN$>*!@Wp1yfvJlQv;b&n`iFapVO3o!L*NDuD=6YQ;D2~U zumXdKPd`En1YaBVjf!FGOSMr)@?DEG6?OVG8Ec!q{GSeRqBnFxUD~$cIvT=Tz{KKP z_)I}kUBvD+`m4gfJ}ibgKx?WE!0s%*#a>2NSjfBDONJu);$0c-4h*G$q)CWljt(0o z19)>$di+x~;6Sh`Nf`DiDm0UaaPtQ*ZhOXok!O?gH{e^~1r?#1qDG)cEl&@yc(*pX z-2TDSys1e>knd7X8^N=5PKU+(L2-BV+cR@t(O09fNB^ycNlot5*X~=MR1T!ozsa4> zJ?J;$@NRT@Y?#ppK?yAY4e;7j6EGyiagQ>BISTsfc9Bxdq}M|i9)KW{B1o+Ykiw)L zw68fLUF2pEY}8V?T`Cd=#c+#`JdirAjj`H8?xJzq=kb>3;mkb_?B)X8QB%;EUUW<% z<Wu49(T*|V)djcT4!K=d^xX{uKI5jJeq7GhJKwrKnJ$QFvXT*?#&?`bw4@WB?$y|& zE^b1Go<Zwtw?qq4-YPIq<lE=~+Pkj`zjngjM318i)oheqGVfC#FJO9dz<=$+6bdAj zzz%A0{tPPdV6MXxNLdj2pQS&Eu0M*2p&<0ok|Z#gOg|A;a4vnp^3o_K9ICZh{I+-g z_MIC_Q!W=A3ZFdyvV5LbD0CpOd=>4b8!;boOLahY^$9{GA@38&B!vgQ`BfFlXKS#c zEff_Vvl+57b#vW9P1feZ=MNgud;1yLK`wkLjh6s|7pIk!`pr^6<707(SuuT&_@1t# z{%9$}`RKa7C%VNo%O5w&bEDzm)s-cSe#HoSi-y@7jhhd^^QF&fwX3!I<NOdag9c)W zqj$MqBj}as%GJosW~;)GFh9|Ai+y#xNF4Js9r2SWGZMP0bskCyX?ppL%06^dR~A=X z+SCN$&>J2Ii$)k{u}MZf7mCJ*2dz(CI@QnzO6rgWu$oq1iO>f6NAC^|f2$x41Bcb{ z$!5!Yl+y!1JZ9Zh?v2~!86Fd_Z4f-X4i;07V@Uiu!2fy>VlOOw>wX~=zW1lcR>^rS z|4{V9D^3JoTg0d0#5fGJ2xWc_ay|SO?DDUE`W(#f+0@w;U{AmG=H;^P=ph`D@cQc` zR-bM!PBVIM6LJ0g9mjmzZgpBf{&#7&Ir_wnr6~<?v(kTBfdLO<3N>!g@3e9u#hg_X z4$IpT46Aq2k_Ltzdibi*R%Y2R>1aAoNo>6?+#YCpnE1Fm|3p7~r^KaFPHz$`!Tt^& zrtsL{aag;mEy&L0$nSC6;+mU+8B+N!bOmXFD<wEDHP63I)eq6_uac@PRqP8sDo|GD zqa+D{8X`F7t`U?Memo)(<w^e$P+xd*GYhMP5Vn~Iec`V-AjnZGJ<2c%mZ*2x<b&K2 z#yn^vmjwWI@)pJ9U9|ayo|u(cink`kJ}Yo6k|RC@+rkExMf#6JZl^$j$Vc?sff<pV z?1Yb4Mz3JvXD8)Q6GemnBo1>=WxUWzWxZ$|iPs6UAh3%R2$-KRU@fkJEP8w}l(d1n zIf?RcC5U+L48*c^UoOw_gxJQOHDvp*C8A7zBh|?MVdBl9AQAsh^^b-sBt%wvi-oKv z4((mNr*wqpMENfygK+(Cknz8;yub!Y)0QX%Yy=AI-u5I4><J7IjAjdIKtc?#rj>EJ zT|*&5?1}7Gm0kp~u1}LgUXKdI{&gDkLLP|?wU)`qXKoU24^HJ)Rb>q+t-VV)q(8qy zi0Qq;wq4^S0L2;|YCSmNd0irRq+<z5qss*UXn+-#zqCHc9u%pdYU6b}T;nvA&!KSw zAH#gb3%7jD?*9w$JKGsp=Lmk2=zmsmvN7js8D#HwSMh=*-1>{eZYXi-<>%l-;EIem zTF>AhDYGAAaPO;w-=7L5oCaHl6kN3D%^M!!LoGPk9%FT3Q3NVE4~%50sO2@cudld; znjA2vr?CfFLH!WnIfMDVoc64p41(98N9}Z8+Kyr5doB+E%T4?QUknuhHKw4Aq>FG) zKOC^Gpzlc?%pZSZ{UUWMb#W!_A^3#pku7GWZwWI8AOH1aX=XIB{VKat!C|Vy>?XHU zFe6ri(A;lE?QCUdwW3K73N}&yc1Z-uhCU5ILlEl*TP)EQTZ6KvUG#ge@#Ou?2cE)h zTB$aA^2i7Dl3Fw|B>lvsR`9|z(?Kz|lY(Asjh&@RZVq_>Hrcmz#H5!x)y=NT@w=@^ z$O#m5#R54Djo?YV!OZbkf0V_*4qlQ8V&`7Qt=hIu&wJ(VT*~Lkrn_I+ln8Cqt|##e zOS%|n?rKNK9}<x6X`lX0#yPoTv$z^Xgr-Ex3?c&#?I!ox9(q`2`_-ajR$usdkb%e7 z&N%A3STN}U)J>H%j<S}@O)3}Ff#QE$q(KlL<+O`RMW8LZDtNH41S&>mq#Zh>TxPrz zZMEwA&9D+8^QC%ef>Q!qa^Fuqa^DZR)E(()GKXOO{=Rf*wsiApvY&6|e)_u*cI3Ps z%a8#^uC<KXPrMnNiB%5q&8hiGnAME<7EP=g3o9MsMbM>*O^Pn_Gr$mdC2MC^y3LN$ z>V36MmyHgy<A#Nmh*@HGF6vF$qN#+y!%v5gtF6G4F}WtuEs9#ZF($pw<-u}kaOvY2 zR6O&ca&RV;Ca_F@8ToQtQl!#)MekGY-3kHKLX*)cAho8?ZZoW?&lDhvKBwG^>r2Gq zYRl@Uaxxup=rioPx21_Nf3gwM`8$9150?3M|GK_wqKIYphu1QsOISZuBMJK^u~Zln z5<~dm+K*5d71epaj1{tKqqD9c_zv>*F6vp7cZZL#q^g=vXe|E-@M59MvcEP#``Q2y z(eAn96Grv${t_z2&#T;Yh<FqQkvXMa)j2|5dR6o_Gqz7&gbGoY%UW@<<iK?>Kuuy3 zTY-s$$NOqU!8F5+!W=;S?%e1k+iKc}y#kzEp4?H#YUcf_xBTy?9_0S<!X^9J>)!v( z+xbq%sP55ffxxVA6>p_hM|k59*GL6y+!dOA7et52a|wk-$;)o~rn6K{+pkeA2EAqK z7wx0eva~$GssO_ZrlPPWOqcPN-QFO5{^1ih?g3|wW^aC%IRD-DuD`mUjVy`7pLeTB zO~dTrI+oN3y)nM1aU@_2k(a4R#)Q1C9yva~UB_cwt0XHnAr9CegC*Qwy>SCPtm2RD zYnf7J3ONYXg|^dwN53w-P@C;Tm{ClbFhl~>m>LJOPg)yMl<lQ79!)Z^kpiNF=|Ifn z4Qb20{uf|Y#`sx3^hF3{w1kltv}<3*VO5gUFBfPKYd-_X#*Cf>tDqi{M?B+uSuyO3 z1U<)`hvHtIl5L14BHv&!fas{wNQ-jYL2aCp=|J6dl!*Zhuv@@my*P;sirlw*nlFBY zrQ(hF?rqdk7%Mqs-(DAQ&l+(*WEa!4a=084E|KERLvvX@I&c5<k-NzqNWo3}n+AHC zXw_!?#f|D}iik=Iq=2v}T@vWI^8!UcXwO}|q0Fd;!~wB$TQul9AZt>AdoPZ<lhBoa zAj)ZLjZn86iYVKSQ`Am=(XffF33^Zw5T^Ug40Mksu?`h&-E~_{X-aYNS-UZ$WGxCz zG*?zpFsY_kDdqsoWIu+QeWhtL<4EcCO6)w<?})ja_@H$@C~98TnDc&Up!9x*Y$L*i ze*}^x%UaH8c8i4#*r7aaf$JJ+83^du?7BLj0sGS<g0oD4-^!?uZt~;B!{y7Wltkbm zg;LlqJO72?{Awj8RJ;!VE&V1Ek#8O%881K*ku)CUNCiy6z(2iaVj+J_?plKAW-8ty zZb<1jCU2pJpW8{NFq5RiR3R=_34^HjU4${mgiiGssyNCFcnsWsc>9G0PUAoFWAXlp zES!6`MdOX5>8{$gs#u`zGUO__>y<XBcbH`ca@FxPS31sZ`>><r#=Qx|VgC^$Nz2o( z&l4P<AhvE;id9-H1pUvgAR&oS#w}skwGIVsmTaFKfVl!()J#-KrlQ3)&T7H@B9%51 z|5{^Ja0=uBVruOG4-(0gk3VG{dZw?mZqmC}e`<<r?<JCJh0yeq)fXn!w1HGN<YYT~ zn*DDkG`>3gSXb~}yQ+CRQ6&S@$e~&2kh&oc^9z0SEMa>f1sS7Q%(*=gw>EV#w8JjB zHJ{TM)1Ag;LE%0%4P{dRJx4r(mz%})BcV}66+#$*K~Qk#9*ePoo`qW%$B#|e>>Pme zA%pAr@t1=lDJ-&jW*xvSBIq=*r@E15eAsl&a6U~&@vY!**ZD3It?yMtF_qZ-(gGKy zBW1Z?bYdLQtvLb3S9?P39<#ut#<JR8X$)k$N%Y7Kz77m2pG*>}%=rVw((x42lr_?# z*&lkq>@fl2RrACV5(1=w?jS{BCNCQf(<fs6yX%k_Rnuq!Px7G?k7Inmb_3R(MLy^R zAnpDW0m-EKVVQ8(oA~9$Lr?<5-lB{Yevck|Tr}&(y0{Dx$!15=Q*e>YEBFu*a{rPY ziup$KFi9v1EzMRDl97}*{y7s+6rbwq_tp<UA|-k=fzE>t0#I~Gywfzm`NG0I{LmJ? zr*9V(S$hI`aH!r#4q^39Z@u0)`}CvD<v`+yx={Yhmw&1OPcXAjHW3Z3(udk-HS%Q^ zMTeMfZcqJpIjuIL{cCIA&e@UtPlUixgg`N*#DySZ<KpMs4c_*q<XCNjWk~}Vg-I8% zZ(fV0g6)GESO!x8TO7S5oG)P>^!jz-2l;tmxPwmcQ!Melu9RVu+G8Sr5%G9>S!Ld< z@%mj-3;|o)z@%*D{!%~&>_~Bb%sYWS`EFdW;_`!f%3MdkQjMPgF8EhBw@iJX?E2-2 zuF>UTd`)eDW`2}et<0b1W)M<a1W!ynI*Q+&4=D5OCLYiM2}@t|<h_0cy82lkAwPwb z6=u14wze5yB*Qp_>eMyv9L41%$IohMdTZgU9~x$Ad@8;Vh-m*R`JWfU{ojT))HGfU zaJn{UMPPAIV7az76<}5<urooC;G_W>w6ysDcC@i@bN+Am4$z__o3zD&()*=JMNL?~ zj3f&LM)*MPOtUM)un~L4@er8EMOsU)OiUF=S@HdLBf&|OD4H^=F5O`R7BnLP`tyRC z8V&Y4A)Z0!QX`&$5&iP3erVAZ4i4}C^F}-2#*8!yI@#7%_xm!N9x5l6k?i8^D`@84 zrM)dKXjf%w2=JWJvc<n}Omoi6JhwN`VwdmPTkXRCPa?tMuc!kqZMtIAGgBy3E*^(& z=IZ>r;aRXs45;W-1kyONq_WT};(5re`vzA^by+&b1ByuB>6s_4>h|mOMk!{B2n7kN zh9HJlv<Y75e=(H%YOD{}2V!Un-R<d}XOH8XmP_XA0UWH39IjKc@roF^r9EdYR<R_X zhFygjezv}umzVB-T7#WGw~^o*>Q_FZj<`N63h&jG?6ZIv<uGx&Sd5B5&}1DcQCmT` zn~VC6K>9!nf;RR)TL-_5<-dA$iu|<!iYX_1puad?{yacWe48FO1^o2p!(dk)ec?w% z;i=v^06SN&d}0_$N|wb;jnH|OFH&uOJuZ%<Dj`=J5B}@z8~HLBw9tc|i6#qseZ>Qc zCY56Ej&UIH&{a*Mvx+0&kC+6x3?AU!wX0rhL^Ie9B`&F=uDl$7<IC_=w6zvHMn`MK z*CF@>f~xS$U8#?0JGb0uyyuTbKd(#LuXL6d03`KD_NGwDv^qwilAX&$v>XF*l5F&& zoy&UwlSdzvDIOk>{)#{L)VMs_tdRs-Djxy@vP%+m*KMXLW2!T?xm%aL7ydunt6T_m z!EZF<l$eKQyv*JTj~POA8+5GFO)<fO7Yb^ge)_*LrZKE$DS7iUn{ixjr!b5JS-H}* zfXsLLgp1nJiqwx9=OHt>Rn?h6Zh2JYaq-d^s%dt}$>E0p9|$niR8+d)c%1+R7@WNx z#4~UMF<5d*g3}&eKau8XzQU5IMY~Sa5|#wB0R9TGT)nNRvcHhWtiBm6@BzIUplooi z=-qEu$3eI>a@c&`B{y7H2mKw!-#d>I0K}EuShkDRp33xew!8df)MTT?0<fa~?mC{c z=!d|AA=zo|5;>KGVpK=0I!jJdA~lF1ySQD$leGQP{zcY(`$-k7Btumc)iKaVZgTl_ zg&s=+bCJXRh+F?h3-G`DMbWfev6d1BO;83+5i%ds)~P6XDgFiTxt~$*s->VY0B&X> z#qf=C%P^_V01h=J0TEohaQEB#GRSbQw&}$WDLm48o^gV8I{0*R?orVd{_NLmHKe@D z+@;Q#0a(y2&p)I7IdnQ5a1qdda-BrkX83<vA^q>j1w6>`%wW2y3U|-XF{il+aCM)I z*?;bbrm<J&v6G(3qF;l22q#-10E`N&8?cGZVheDAP0zeUbAF=5DJ6U1qa8PyqHi!2 zdFjK1x(Z{ZMS_>LC+F#w=lE_gzYsU`BYa%6#xNdyI#}Z@tfA5@xuLSjPiQ1W0>Ws` zPBK6~ypZ60fhtlX-FnN-*GaGlyyk9THv#86ep@%xheB#*I6U-NA#Ct_fLk1`<qKE> zJ}8t`ux|%iiyo3y1mEce0?%AJvjSHs#aOA72d3MtxB-&Uzd+yp8~EC1SgcT+?qflk z`ZL&u2m%aArgB@G6=~0@68i)k$(e^qPrdndK28qzUSw=f-hNZkemu#Q0Y0ET70Bku z)w-umr<GzBg94iPWEV^7085OB4_2MR_eAnfi?)wP@?I;<u}aV;7;?e`2!!XQMIrHd z_7$5qM8`)sO|9WvjaJ7`)qihyXdFw9##Oz^KV=Hf3)}^N=aB87YI^S$mVSF6IbWiR z;Ds;2nm4$-`@}H|T&9aT)nF-RU7TqC*k5!sX#GqL9{mw}f{32n1{|Sov}>Bh%}xx= ztLM5zFdYknlfeNQhapQW1h2mbae#NpjS&Q3N&;%9weoE0{r>G5%TyS*%A=CTcQ`T= zZYpU7mxWo<er~M1`E9p3ukqRWiG^PHLecjFsRnYg3fn<}%8$8(_}xOmI6~nAzhSyx z1kI6Tj{=eP<tHn>0M;qD)_i3V&#qndKi<knLt|TyG_g>8W;c92`h?b*5I>c~(LdMZ zgUi%z&Qo9!^PC9>rbviK4BW705bz;*b)*0i(8|<mD2+MFO`+iWBbNW-bO^uxH5jI= zu}6+K_HUUJLaznuxNbo79eD}4-uCaOHNm55uY$<2`>SaS0zf1B3XaKvzQT6lf%Koy zt~|js+C)=5q0*(#Vdk-hJP%13hmL&n?mJWlJN?EJQjV%7sR<#DrVqm?0D>+2eV#j| z^w(bSb{|Kknp?t&72{6L&yp2DE;FK{=YbcJnhZ(O<F3tw89dN?D_<OBZU}DOZ%f9K zUIowbPp$T$fNa6gZpAOQRZ4FM((8nSrk)y4G5em63^Rl#notl{x7tBxD-0&f<-1d& zj1!WT;94kmZ6@RJY-I~oQ;!}&)a@FMkM$z+i}@0)+1dHD_BH~hQmii&F9HzQ_C!;r z^rf1v&PF+Lp5Q>$bL%+32U=IOkIMilt1ydfod4znK#k~w%E>4#+&4jpHHug2Qg3>Z zd>WUe;v5n;w#%oRsBQ@XYDrtf4SN5R8l*77YoFCG|MRKSBeW4VSnZ+9@Jv>%cEZdm z3i4>a!s*NPCL9FF`Bw1H&u3SiWs_Ms?voPdA@=mWN+grD6qo_PwIGFge3DV^`#gDR z5NN&xAUj)^JS~ThIDRH`3cch!5=U7q9)+)px7%Y`*6lE_xW5cgvYhQ8!SFHE^;owe zL7mk4>+G@rRUsp23tJ@@08Wp#O!R(`(#rJTFR-KaKIEdEHJ|Z9ftKp&7#jlMqEjx> z?MfUykKozL2MG#3<h17WwiDiGK@3g{;#3C^mVqH3ioz^TBw@dZE{1{X{W={oY~q>= zL+S-n%!wkIF)Zg)^b>bfEuGu?$QbX)`RBLRaeW%O_3E?Us+ef`v&n~9|B@CtHLO{j zQ=ct?ngg1>Xs1{1bgekBrCF=$&={E1Igb}Al~xH`aJ%#;0(9Zo9UsI7jt=4+#o8NC z^K|v!GMbG*DL2M59BT^<DWco=#drfz27u21r?BN+w$VARR)5ofxQ1b6CJ8O_-hkkH zNr9Kkfapm?i#_2}W@$?(!!>UReoclb2GS_cDQ+H5q-!p%AB&o)Xv;P{wwO2ToR6Oz z@N>O57hF2}BXX9li&?7^H0CGo84g$}Xz<PCX<LsvcivK>nILqpD!r?`jnvJnC7pnK zTiNfL&m9a8|5Wl+H|#1$C_6#@3DSVPebBReBSGI*8v4q&KqQxyOe*MMp9GfecG74P z_f(eaf=b$QcVaX5o)JI^Xbizh5%D*#4KphJPf>JzWj5w{a3<msDa;pb_XVuMwV@du z#E>fQo&c9{%*B8%#^{|eChw{mCiqXf{iy@hDB#O-rRn5(aa)qN*5<y((e*(!5{(Pz ziP_8*C^&9vs0F~Y!<dusdo6)JIeid)hY4`|pX!p4mo?$ewb%V&^&!fLyd^FH-YS8d z#K<#6?}9U5Hffk4e~06OKL#Y9*}77V)5vUlzSyNy6B|QE2EbZDLpN=8xSTTUnRi|j zTI5>kaV9quNukScblU3ugsAK;ZFjnRc6`yavZs#qoVjz@iNCdTX)hGj00dXUTk0T^ z#Lzb7np~>cH_oyZ`y`#EPc!$3=2%>7QY$ac2c*Ld57@;|E-yAoS^?zOxvjSw?<z|* z1G|tNES{aBS(>3VtmE6F9%2feE&Te*bCsZpd?gU_(Q=e(1^YUr=AGDtXl&;VbWO<L zfjAGp84M__y%k`58Us6%1F><#|7L_sd{^+!Nsk-|_2C(R=o8q$9M<|==t*z)4{#|a za&K08N<35~FwGoFc^F-eNkEO6&!Xy^=Ho*GPZhgz9V^-H4lL#=w?aJEE01XM?&3w3 z6ujnM0PnHfME_IpM9+}uplr-+Nd<CrfGr6W|F^pIaG-)!l<@1*g=qmWkH7ki9!VoU z0eoZw4CKyagLo<j#&g3?{$Hyr-D29PSoNRfx3#skM^%UKoCM!bjwp8&tDEv5u1&sP z2Mbny?FXZP-`7FRPIx2-iR8LFgKdApFwWjH3WLMF?VY%`&aJ)g>p!k?iuM|H01h2n zNkGdcnDBYGLe`%#QO7uKWv8dFlm&&<R{b3Is#uspGB>sM&zD<5#@?<gZ>SU>iY6)V zP~AOPBaZe+x&2Qbqg2DS3kFaL{<#SPMeB`Y^$n+g#QM}ne9o4za-)BhQni;Xd_7wt zgZevoC#klJX?3*qc82(qz-rrd0Rw|Y&-W32t(KXkHBXQIH_ffSn)FK?>hR&;=;AI- z4;e49b^3y4v(eYR=Gv|3zYq#Jgn!2y;WS@%d&PH|Mxec>FW;oZz9IVsd&I~?HcUUA zXd2mbVIHGLA5}-$`-RUT8Z0nctzExOz#9>B>^!U6Q~bB<Jg;ubVz}Ny0G4^0#b0ve z9<2>C$MqAY2Q;8(Pu@|QeL<2?pk)*OSB)r~{RHD^4xx8pKl9d0o^E|%Wm`q_JDM*; zi!I+=E~q&`Wp1OArIE|&6mF*Ix=~{#`V?rjUCohqUBG%OR=Ksek58fYCTpCNC?_Yi z27l;6<z-*4%E+-%MFUH;0YzcHv*D&1TbR<L%RDYc^V6YBFOan?n<@c?jP^x*nvfO@ zp&J~+%TtkX!MohyWz`)yX~kzuN4(+H4(n2GNL{0xs<EUqe^HpyF!WSG+m@YOB0ID? zHs3JKcvG^RQ|csKmKp-_A28wmEeFw*g6Bo)njvC0(OM=kOGx((0t_G+Kq#=oHa{-X zQ#||x*O=HRK+7_3-Dn=|7|)7wlh9D+;8Sv8jO|EyV1^Odw~5~ZgU>7BI%v)p26jMy z<9ZR{Do>#=TDYD9|08nseXImsf{&X%L1u)}87`vl!i2xI{eY{Wk0xBH(Ecp2b9eEe zRsGFwBVq0xlWS&L1n_<@uxpp*yVgdP{bG`RMxQ~(H5-C70{tAX{!4{pdDScOt$AhG zHm(0<^k($Idk4P@ML^6d@)QYz+ujU$mRj@bJM<D~m9%EN5Vh#oX_JgG+SGC%s@WJ# z%^e6(r}4YtmS5LZY-vXXW4U{(gEp90`VoGF3-3lFMdZud2E2&%X}<>6WhVpt=PqH` zi07ji<4oawqK_s$$L)!b3c&X<2o%s-3&L534UsvKnMxoeRV~~%Rh}hOkiP9!YE5!v zgxjp7X~&GS%;U^tOIwg=p+(BaH_pPl$;ZGMKY1S!(zdb}`LBB@fdbX8+agPwJ+}jA z%3hWx!4SZG0p@u)=OctJ;W;pDQWE&pgnyzNKS7sJ1qb~eNlkAvygg_RhATo4ObgJM zFo(pjXd1`<XyRW!yG?r%T~QKXbgvu+&G}-3`(PWovqt)d<w4J=3z|~+ODO)t#0cjZ zfY%Nr29FAKDFWlWoZ)u(h}R*u&FWoQ@@ZaJRYD4?0kF=S{~EU?*Xxt{s0RAei#N=( zD?7=P^?HX%Eu*i&%Jbui)9kR*yV~+oG0RQLX~qLPi*tz?ys;^b%`zIC$9^~2DL;|f zGQ_`^F9$$~Rg85ZI%B?BLc#Y#15b;!qD7|&LYKmrh)xZ8blQ$j(cVL_kWd6-Kq(6a z-yjo-0}{no$Tt(1sXU0xQVGtGnsw_aWaI~il8N)ErO4)Y-lL7WjFs|o72Mq`UGMd) zE&Vu{2UioJF3ggloYQ7Q_E7h#B#35&=b9YhL>oEi?cqWdMk3_1LVgxVc`zm#=6QXA zD|SCbFp}P(xqFe}H%@?RXOl<($DSZdgz)m60EBG0UU)}w`E27h$XIEEVbSx!hcrSQ zob26$VC<vrfj20VRCqZPnl{@B?}N<ihMPqZD`H@Q$M;?n<Vg~Rmv}^_-m($QW)WrS zYc@p`eGhtyWiB)O;xO1|>nU!em?E_Ev_wLy^>MJ62cXR&nZiJm=W{m0IgfhTB5t4< zfOa2cmc4RD=G5dX%nHV!u=*Nyl>O2bT8x7@DsvT{HHn+#Z>UCGAw7cIiKG6?rajF< znu<vA3cH@R+F{|1^UP<X%tIqo0mv_i+qlXha9AbF5kxM0l)AG*qvfFf3s8C@wCzT) z<!&93s(iE_RCo-Abr@B2zdHFW?W3t8Kn~VmAS!l3+ynN~lw3OUhe#S<N?0f^3QC_^ zLX)7L&FR%;vlmYsc<+n}DN~Fo>+yvyG*<!!R0$9RKY+wQWX{FFF@a>sNMz0`GTE*f zx7)BZMsTfF)6YRFZddXSS~&@x=_xO45yfi8&+HBE0lf-(Wb{|b*$wOh`BfMnko5;K z&}a@fZ&4>TzGee8wi~8G7i+*Y6m_4??~m6VZ-^s0DQxt$v7$;&Iuj*WK2o>h5NKk! z5G+>!(UcUeMlg&~JS#|y^WbVhea}0I4(K>e{v0M@ohE8;GMikwiRRd~4z=`b?G9Mt zg>|P6(D4pNVdop(J283Hz~FudfTNdn?XpFThee&vD`o7DtfISlfx5rXLAQ}lAhORf zRelp)CKOWqZQaj>j{&8UBIqArDVCPnE>cLexZ~y3o!XOHe2nU4Qgf_JJ1f$$GE{^w zrUkqz93;|6viv~>>MSRzr*T1b7Ox<C8yAE0m0BjPB`)B$2a;8cDMj}NfB<(8AZgoL zFOIJA(a1J=ywb0GgS8mM)AwdB%!b@0rW<oZbB<O=pnL0#eT~4etF)J%2I<sZ_0FLo z+xx45=Jkr@tA6)PzH8Sb{B-H%vpBb;TNThM)WNGkC}UArJI~?cA>h$<b2E1BoOAQ^ zy3{#d@z(P7Vz^p=+P858pgf@b>tu;o^=BN>P>q^11e!;*tDtH=-0F;h@zv})@ChH7 zdHEN;s33I87z?=G&i2@m3|XFhiR_>1T?ePaJaul=KVhE<lrd*+5!x+T9_~PIzL0Ui z!aNabpoiJadE8Z47<Q1^O!CmtD@WNa>n3Y)<acgJc_wm^`Let%z?B`IBoloztjdJG zC61b4C%PziY`dH)qjV@D0=@m@JGVkd;k+S(^IKQryUPj2K*OW0suUQS0;8(a`TDaG zar&7HS9en<x#2Fepqg@)4(LYqu!2g-79>=TRANwroK!DC`HV@hAFixfOoeB_%ytre z<_Qwjs-B7|2kLtQu=?O;>)70al(XldG16Wa71TWoiSPtEdh>#nMdyN7#p>b0w#kI0 z&@pwPy5fWbk~Rd?rbQ(AZ3?cZ7Opq%9*O<*7(MLI)eWWIv-|v>n+&P*lv8d_`K61z zcr7JdFxKmDk1pU5OqPA3Ylb^|HM1#I&+;yOtp>Eb;i~uz2zm%(4+`SFNOYe3PJ{#+ zpjwhWy%YSs>LPb8Uw;Xkql^9Ha;+#z6<@X$6g5a8CQP4g-tQd-xFz$ws<mUGd7-pv zzi99or`uP4j&&gskB|a7ufh@ap)#Op{tJntFZ#<o9EGd-+KHhakuQyf81mXlEJzRU zzEwK2^%tKBpa9f3uJZkj`MLRl{4*WiU2v#g99C0{6Fx&MF$X8Co0|dB8DibZC;#^@ z(z(aF7%UZWecvwFDEX6=F;xi-C#!ru%@rfc(AcETV)h$ap|L#?mOApRgXW^=n2<3K zIAHAvhR6=?5>wke+=1P)lG{Zer$Md{1U<Fcom&|MpjhA={Qjo6$6!-|NK_D)^{6#- zd>@j}sFBBkp%7_D1^hB1CFITT_v>5%IAd-2i!vkLfOAyYu88|@olmvWbOlQmz0Z4Z zF5i^(dt$)d`O;bE<4CZthe#Q}ooDe#gegdao7-^=2@}i6k_lyGoXCEIQ=>LAt=WUB zHw(NRU~&p<BeDltlaBndvHf0=OjfU_#|)ATXWFYZIJiL>&B}%h;ehsbz8`)f(trNM ze$Z6>&x%I99=;IeC=|1=?ZET5W?8I0=W(tuQ9J=wYl`6gk(+SWi4nxs_<5s7{ZPW7 z4l3(PcZt(u?^j;L>lIGsn`0K<0bR1h0XfVA;5@w2Bw-{zVHo7ZM=K$2s^@H|iO9DC zAbagu2N(0@hRFa6>Pwa=SF7T#8}@OUddh}$8!1PlGsNRxuLQpBATo`v6eDFfNYaaW z<N+&qRYv!+VHh?5yq|a7JQk9ZbG~MA`~9oleJLXydJJuqB%0VRUB@9k8C|F*V`gmz z2!XHmf|P)3Lttn_z(%B;U@Bp&_+N=~@}d1TN}M;__^!(*!s*Htp$>I82iN>XnN)F< zIEMWXGwvljd|>S6MUjllALCejpYi(EI6}e?+-{``T6KS|hzyVC@;7ch$2*@azAb;- z^lHTWZ<9@euQ{KXh;(5`r2UTDHWD-25E({^%tJm_B>ecG&alG5Y`mvryKJ!XWMBwV zlcm^Ehwi`vI1Z8?)%AHvUhCuO2%U_tMZBSz-tx~F^Hkx;Yi*>bi3+V8!#2_sUH(;5 zc44jhv7er66L{*Ofv7=w3^X9SpZpWYvgr6PdjT^iH5~n)zmn_*EDHr#$XRcw0MY}L zj^};?C!ERo>Y6SN#L8+xgB|iFK$c8@F|ahi;N2f+aWDw)r`d9YSZ9fgAW%IOG^a#n z7t=G1Hn(iPGzH9THinC)%5NMmce)WQaMB^ePaaqs`et;|OP~rIQ0+dfCv%#Ir-hN% zd*`vtkJ#M*;j1uuyDA2VVQfVzEL|`a=JbaUTbi+fZ-ux#I($M$ebQ`K{$oWl_dzQ0 zMN<D%b{(-m$AhhiNY36(zCGH$UyzU&+^kk^OSn#79PkxCq_0kLH61ovTKrp5@JMKv zuekjsz<g6w`fRxD1W!AniS?;io`%;eC|42`qs;TgSWMEF?_~!VgzJ>%#?>jxC`c}# zTc_H`l?dmhp}Xe3xr6Bp@o2uxJ~JrdW_uHge3{|82Cg+HIA&n|%oo0TMvrd&)MD#p zBtmk8vVa8AR?R<B$H=*7VY8EVIsJj}*#Tl>(nzqEB&X5U7_moUHvX8m#NS6!z1tK# z#3ad-n3uj~#9Ib*C;)3p*b`RsZcCFGGaM#DDyaqgP~5+*f38j1D1}&<Sd%1bDO5sd zETEIRRmz7uLV0Wo+ny6=;ia>S-P!66BD@~odt42)Pr<Ge?eddr2v7xUX^Q4Xquh^W zq{@e~dxWsnh!snZ@EsH)&`XM+)E!ROGpnV!c`P&!P*(wvrP+#cAiuv&{e@WCt;JJ! zzz5*GDWTRuy?&Fyv>z2cp>B;5M(_pYTP%3iq%3;^GdNjj1Mc!g|5WBNUn&R&11;ah zZjs52O)QfpXeEORs0EA{z1uzW{ZS%+uKsg?oklBLAdN;hJ}L?sfn71ZvtfK(2kW)} zFOakl_|Xht%h4FI9Pq~RoJFfv?qV5v^*Tq#-hjg-x#A%{3+a_{j!+=YgFeuZzuz{5 z(7sgHc<9{Ln4t7vw|ir%Uh=SPKmWr5B<qDD)8tO(W?Ihna6)~e3{H>EY9SX`NGja^ z0~Q=TPWJTr<TmuKUQZJv`0?pDKj2udbR0H%gDA|Eu+L?CcVkpg3pbJj!$jp%*!Oqf z^x-Z)kJ2d+M+JUTW1H~#cJ40tP-p_j5A*Z-;kOT%AwInCf3Jxptzifp4V0OkHErMq zoCa_ex7~{T@3!wy04svyq47|*xRz;=q5%{V9EDBuSrk8?C(^gdM3YBK=PRcFpRWbi zvaKR6tyMM_WcE82Lip3WbJ$d!$@`I}^&j(Mvx-K|j|b^%$*e9~oA0MBO1^pfKquaU z@5|E(LjxPX5!2LB>b}kmdF>rE&3}=-yOw~r99s@uYICwWPTdl>XZ6)oZup;e&u~z7 zLx<`Zz119?HHTIa@`}G98{ckEJ4u+F!EibeDT5>@;U)6bCVDi9txop4$!+yrv3kHJ z4{R_!qCJ6gx?z+NMOi&X+HdiMji#$9?%<##e{Tb~#oV>+_m_|tkkfKE|58mJEuaI; zS38DyGj~_Q`*S{XED@3++hFk=vgi<lPr@XP>pH2sZJgy}qk@7RJIwT!oRy$(-Q{oM zl(P9?=iRi?&5vBrGC$1q0u#}y<+TdQ=>63Xl)1IYBpG}!S9m{tuv1W!b6cz!@Um<# zv0WfS%Tz;Mt+nmY#xLHyqLZDXgm?f=vGsJ3?uy!B{F|uPg-PcCBLDbeguO?lcB022 zKaCcrPRn^kJGVUcjRkK`zO2z9$Bq*^WR~*3OJUxAd=~1$Fv0p;wbu&x56LRx+Tb2k zB3;y7{C4xaFZBcFH^07j^AXZG>g=2A@n->_nfg0;Q<r}&erDm_14muMVub;?+rA(Z zrYcT##_%7AN~DxHG}(s0vpv|?YDfz;o?78cMVNz$YYl(#yG#TB0fJ)_D`L$mGo+Sw zrPj8{MO|i-3FLmU?@xpuWC9LVS)a7~!}wu<Al&WOR8SE_V&Mcq)WGGNsb%EvgJ55^ zC2Lr!dDUxRMfo8KQObsZL9_v)S6`+Z?!vAERSgMikc9K|U~D}2KEjhWB#@C<>zYV2 zOHgnQVu`Xxn*ElCQS0y|qEpduhKwwQa9kgVWlR}?N!MTO0#+>FZwSasUq!K#`g04) zMS_DNp4unjss~Z^W<)i<Yg3&DdMdvqpcPtRj36DUhkC%56u~oNqKts{aG4A=4=2Q! zCoIu&J6=s<lLHF@6z6QTFi~?%sXaR(^^Jq$@~Z@pQ$M`}A;*V45zLhOB5x6<bi}Af zKF}$gp1~_=aK6{yOqqKRX4f^z%B0{uktN^I@CbcDUc4B3a5NfT^VP7g^NTsL<cKL? z_u6f2!I=yV&<F!a2OEII;B@)#nlm1wy>&(-sZCr2|CSt--K*MNS`0k#+_PSAokujL z`1CatUEie;PAmS3a4$pHyd*6f+cNK9lM$s0fO(MJ{mML$ZC$*y%7J01-+mSx=N3ux zolHc0&s46DUKev;DWHYx?8ysO#fNikVCJU)qXdlDyi%izegWW0eWEuBj_X)shVwc+ zC08muS{6~l<MWga+Yy3oynFJMsiO$+Z+e07=@Z*^-PjDFCPa!nCZr_FH8d*&AUdW| zvrcH6I1lV`qs9kSv*6{&H?R(o7xjrI)pmCD4T%#nv~~1RV*c<W$LO{!?!_jaftcIt z?y3t+1rVH+odL4QFtVw%J>|8SwuNLO(ea{LtxrEomhoJkCwc;QPE0BCrxyqXir=s} zvItbYYc!U5VDH7m1-(jI$V+240?Whb2S4LYOOqFsU-lnS#;G|&xlld+rn6!oHI2d9 z#(FLnxS`+>PZiA$V>w|PPs+Iq#f6~#Uh=hRg#bxS-vC^`EoYt#q5oYGzc!tIesD4x z{QemJYxnL$U^JRQF*bUXEEq}4gVPz#|I>wWnvx4%Rxf>AwS=m%yDr+_UpIy%1e-t+ zf-#s$t>d)`+eS)d_^57`P@k-bf`I?FW!ZeN&|>d#W>sBf9sekR=UivX(C}Hrt1A3w zT3v%d1`5!5;zOS4%-)A-iaH2`^QMHzMRVJbSTK-#X&>xuDvnQR?wpq}#$m$?<>6#j ziEBEIgB!Qf0L{dtl2tyEh8*I+K;1Fs*ZJX3g$`^yXxFIrC29iW{)=nZrPLt;vDp%* ziX;*y-O3z58N;ZnKg`U!>Obu!3PqLM^4<4vDhm)p+8e8Rz-5rLTQ#l>iqHZp)}@lE z3zr{TrTGg$<MDfdK4Hl$v%OQZKkev}4<82iv6j1li+Mdiw&f}3t*{A?^xqiH0MXv* z;&cwuNs%nzAI#)bEY!}<&AA0x2F{Oa@m|o@X&yZi_HEF>#Q)_iUf-`U<a1dZ5a&Pi zA_UZQ$=)h<18CzU5f}w**l8IwnqC~j3mN$Js3}mnUA^Mj!{8YCm#)fap2QVI!+e}p zcJ6te3YG+6JgYKVSvlLGwF~iglW^LCX=55?a2sXXCqY)?lFDSyd%f=KJP!2Ts+waB zLeJ<4qs4j6K_B`aE}XD*pv15#l|1PPJpmpV)ERisvT++m4S#TJ70_83W}_nF^>hJG z1DfGk$PlHRq%n-aVwD9Qo!Lt!<Jm-#R)fA|*C&LKKc~R$`TPU{2FQWc@Nr7s&>abn zuRw#kGDm4d(=h)?cDnE^)QXm7nB`apMzlQa-EA29e>H4aKj92L-P}`cu$#UYrvd1y z7VWCPt>gBW-+9Q408gy0X;hVHFRsnAG_AjiN$I58(Tx9cJ+;wq0}U38>#apLj?a)z zo=Us#takI6<pewa2$5=`R0$r1oPLM!&;1rF@vr(d6Fp~qB=M_N`9(<!;>)EZte1lz zdP(37;fCb&R&JG3`6<MKJBgBN3j&Tdv%|dEe)JinzxL?wIbn|gX-hOc`x%3!a+B&p z#_!#Okl2@||4d<zU)SmKv2(AB187Ba0>kGPnHMAuAwwDncHD&8h!<9y2))b#a5six zvxj1rF;SgI+)Okm4@c?tW8u75claew5R6d$qkh0GJkoIgZ{Lr(v3=4M4a|Qu39&Q; zDhM-k+Pps`4WL9*)^SS$srO6s9w{FU$>D7xJb)mx@ZxA*v?$9opRFemN~%~$<?jy3 zKYmtTS)JsHbdQ4}220DchZ)YMMkucDNTMU*LbNG29JDXm+u|9D{F%Kzeds#OKohsZ z4`cV2BS}+`0qs#%<m%P3QVq`m_xC9dLAO?IF_{V_dH`m^D#dqvo4IhIqHfpL!s`)< zdcjPWsp*zDnR|AIQfYM7N}gt4Z5UQeGHbB-3}zuZkFhgSStfJ|_5LeR@6tTRi6ujG z&(OM@S696BdqhJ(<n?mMMEW?({kg-MlXOe#Qzoe;3Y&Ocy5?@9-?^Q;rUveJ%up?b zb6X2pJ)p;==M~4zWbiAL*|?WihXXxL3N;mG<!fuhX34&65F{X3THz?Oo&r3HCO3<m z@O~UOT1L1Ss7&pW2qg-7i7<7?!?7zD_Voa$#Br+AMmc|IZu@?9(-meMEP+ipJ77z# zPbk=cmq$4-f3QOt^MF#<4GAF>lU3AMKQI3E3_u*7^+v{hj4SK&|A_jg7+rvM%eHOX zwrzX2ZQJ_WHh0^$ZQC|>+jh@6_s(RJdZ?#*Sou;}O1=%&hYL-X98*@(+ZKa}ukG?^ zynNJYQARe|g&3*7=T<*s-brjpPShtUT2A@j{W!3?F^SP$;XPISiR|@kWhL4|s`#(# z5^eK_(h;n{i0(jXP+Mueop$;QHwIhF0p)Sv%=)NDIhe8xli<3=*9{{IZa>|ClHE8( zkQ~>L@HDxoWmaV+5b{;7*+Gz@?Gt(Z{&{QZR{IP7E0h}@M6u<RdMA14OGjrElHGDj zqqJ?NL<BCvenKTEqzoYKvgxye$8{1G3H|ci<N1ju9DzWEY=#`!rczz!IYNZwkZ5K@ zQGQj8x#bnrQBB2a@|*Is_Qw`L2nOs_oLGqlO%CxmzINXbP9f84`1iLm{HKjQe;wvz zxjtH8No-Ym({VuXw&cWHVkTd#+DCRRfgDSb`N}NSXgCcgce~X%lW>t*)OBDG4DJz> zufR3ZbQ?B_lTF~5Xzy(gyf?{W8J}U&2|9vGWqv>}$I(Xgn@z@Z&qyACIFf}>GF+i= zzoTX4X<dp~ncKsjir*WYI;NX6?+ygd1OJXsndPhM#@AC{*qlwtQ*%RpH}#c)hKI`y zwj(nI+A>?Y0N)^<K8b27*Kjm`)tEXmNNY2h>M{SYwA|wjZGZI_&+)Un$j#z$)#0*| z(|a5ifSWa0VFLB)*~b95^|q-E+;#wRR;$?&%F4gM^t3<AxgS|Q5F|MD{GzJoA~<<u z$*c@TlFKT<5QK|oQXcCgfGR>e8awjXB05<wXkIYVx$PMjIQ|@(<p*6a=OubZAcC~j z3!<`(ZzH<P`v|GINm2h^*4|C|wQ`Pw!lBK4m|t*U2WMtSI35GIbBDqao<1N@RE8wz z@(BV*r*b$Yne+A0-&}b&<vg4-ZW!w<-RuBN4KsZ4&yzoXnc9wng|S&jEVdI2%6!Sr zZTKZ0K0CT+3H&4`OdVC%r`bK@60-fASo*dO?Y#JdFWFkAA`iMrV3BJaEb=ueFll}< zR39TLPn>VMFi7a%MedqJ^UOER3TGOgao8B{WxJCM4_Vq6lx=L`AP<h%`#RWG?gWz^ z6w+Vk{zp`?rXLuCpn<S5{qGv#70v(mft?xVt0~*RO#H*4-!HX{dRo6Y!J;BpMp2Gp zlcI6QIqvgtw~$U`Ltp9v3q@#(-^ke5@bX2|QF?0#Er6v5V`kB}jni1JQU3%-_<6gI z^6Evx8X`E|T3N~RkfFyS55sBIy#6Ru-x|@on<DnIT(ri9AqD|BHNlmr4Qv(9a<o64 z63@8c_3Dh0NF|@Bl{~W?v#`+Yn|t+rd|#~nu?Rl&Ep149>}XNm)23jL#89S#Mn!?| z)gKf_FU}H;EV`VN{zIO3bM_tkV_XA#PK+8t&6jT?n*3~@b@LKFz>!6K7v@glB?gw` z76!;zEIL}VL3{_SIXr1cwj*6ggO>TS862;xexXZJI&|!Qt!?qU===t`n`EP<DIyd1 z%-rfwuttbWgdq1{dJ-hjaF=qpP#jYW7cbM>Kx~k>;(h(ol0;T8rPEp6lC~0iR9N?* zs%plrdTy3ufacG8`!UN945(iRn;{mjNZ2py7M3^s4q*kb1sk2l@X^1_7|9@-dQ2D2 zS}Ae#zwp>JHcC0Gt$HnXSzZ5K^ixOEYVf$la#n~ubbia0W__2-9`0_c{u0V4UoxNM zsD-lV{zs<t(GKn3x>=Mj^(vk0r>iYn+AJ1Bg*>x}f?D!N5W}-NnBskFf<Z|y^~Az$ zT#1A}8chrEf}WzUQ@(RUd{4QPwL!jJhpYRNi?HAa7h}kR(^>Zl6SJwI*+|6AAd0a* zR!=-&s+8Vtw*qZF%js724?#mT?D6SHMO-*3ubRAl*%KH`r$39bMev&s$FM6Jf<+l+ zmvcQ*R{}axeSpu;TPg~t_|581#}`nXEl=vfxi}fXB9sxz_I-2>^!>&=pG8=Ot^+|q z@-t2##?NAAsdE%rAcy}`Q9E^5Fd<6Xw3$&9WThs1Dh0vaEH_>Kq(~mBEk%HQEPPuF zxQT8~(M>f_i>pr2=I_hjxtqZAiW~P_!N3P-Y=!nc^79$Bkpj^vzeIPZLmB6Y6ygIZ zFqBAu7;$8RB^fhHa0rQXLUp2Tf~}u{P@`z0Bum@%o<0!L-gw&k`q2x^nWbG`og0oz zb@InNhvp4r50gt!E<wJNVfMy*d`;QOMQ;e?=F1L`7lu&Bbw?dzXm^9gd)_c<&wkVa zx%r1l$TEcxQZuyGFf5T2HY+BWxD0|&!h$BCQ69~7gu_p!%^w*lyT&2Uu@0!9-H6my z)$A^`aipe&zCPCu=Tk}gX=BhU0EVq2%t@IlfbE@!j~x4zf9~lnrN=Xt+&~GOP@pK+ zR#DDt2MK@fOg#x|H!#VB=S;L^gmbaQ7TRdvwh5MhZ|fY&ucKwGdWmzm)=BIMTUZYO zkSL9aCy~e<GQ?vB^@0hKbyqsKm&tr~IgNB~;|;F0yoxNp+<HyE7hr?i&ojr_ClrWl z1PVkXJSCT-0xyu684L+y;uwcRekLwJvIc|37mZvN7MWTU7HPY53I%9)xyt3TV1fon zZO6&-Fq(RpyKAgw*Gs`yO2yt0?U(`_F|AaUoHt?rYVx!xp9f^@Oj*yV5?vD`a*7+C za8XXdhC87(X%)=2^a4#+`(DynKqn1$839dSg@KyC#S)V<(-2UaMl;V@#tH;mwT$df zJ}G77tYF9z0{uyEwd6lM1P;Vg5ZG|?8k`ty<kdt>R;6uRGf@^jRpNEaIF}&S<8Mj6 ziR_JA4a+;bVf`pWR8#)2>mvQzzX?eF0bf-rO23}~Ljz@E<w#%H0Qs*cmDu$k-lugL zzcu<_FG@rlE(K=#THu}OV?YWS6Iv<19PtctOo-a*R!mcphAfqrbNqMLi;g-;^4(P! z26Xq|jitLgL0`s(DlPQyGEI8bGFIZ2ZA%Y;+^VHR=l<9L04M>`gA2Kjc<9Q~0C?SQ z%Sb0q>DJiWk5${dSH&;vy^J&f9%pzsM#WC9d0JP+_t5P+{*@s50J!d+zIj*^89P;v zw%n@ilDfvnpUbic4g3JC<NM9MDw@T<G<Ga$>KkfgRb)*f*i#^V`a_6%$8DdP7Igsn z%+j}q`<=43a|bGT$M{s_$$LZ<iYd==uLM3cK3mWAhk97bJIARZe8f+{1n>n+;_k&> znm?=5v)X=L!%^rP%Gv=5V~VpO?j<?8eU$s&(ixMLVpgloBn{Q5Ai)6rW@GK!XI)RO z0ac`Kw+2)Cq41-jXFVSm0SduSyhPt20%kSq_Tj5`cq%KR)qXK+Vpjk8&;}Ea>^zhB zi2DMz?vE#5ivO68-i!%AIkdsfihMIoT;r!PECZ332-e^KV9sR7wW}pcK__2XdFo4X zW%idWwdRAhpH?Bf7JaBBN2;l;FjGy!4E)Od=e~RX;mu%gnVF0DVfYpmh2Tw-O!}dG z%V(E2$<R&5-SPCWziX_J`i6gB*HDu!@B@r*Z=Y>!3G?cq9+C_I7Un~=Xw?i(?3fk; zYNVnbJbt%QsHC?L5TG~JN6oXV!e_f${}Ou23(yI02OF%7^KXYgnHf7-p+KgQ7Ggpv zhq%sM^^ncYcOf?0RZV)?M~cJ@p+#G<C-Ii)l#%Ql{2b$P5-G7iyhi;NrZN1+#(f$q zluOjHPW;=P{;vg~n}q3WM8R+efhP><O=dELd{*2(t1@(~)S9Eo!wS&=z70!}QC}Hf zZSXrh9GRP)1Cx6G<H+^Y>Z@yPUCk7Ee%|}9KQ0Glwo?o0HxaT&2ku!+ij()*C*~Gk z!oZp<Uv;W;FcfAQ<K;qU_tWf}DR;`)<*be1#qH9|<0%*bFP_v#TP5_z{ZkxrCS`sy z&R*(8$8~;yc$Z1HnLw|Kv_4>oGlsd?n3UC+_eJytI91$JWXb)jVI*QxbsAkKN|46V z5b`#L^v8Ze`VYbni`381Ct|dSY-0NW6Fq1QWCS16V}l5FlG)R3Po3wZ;MA!|M90A6 z9(@iBQ$-UX_i%1HMg(jWm9*f(M4R|$;F^C9`r$|*vt%5F_ZeFO62j?w9BUsI#!ge1 zHr>cWBaZ{B34-qVvEs%zS}AD=8vHW5O$fMF1E?+^lNoles|@-bq7C-vDz-18>kQhh zNe96--0WbgD0^6Yzl>cD(oA#`UfG`faA_*|YtjYK``wIn+z+dO+x6{i98e*@JecvA zou7jrTs_Nf@wF}Yz(W_Whb>RPvJud(_!dNZARDLItxkM;k5B+dz+?s|-MEcX-yiRv zq~KqAcqj|&g6<Eza)h4-kN4dnwE}m+B`T;KjG<C8S2+L;OB)C?q?RS?EiZ1Kw?><y z+mQ)4W1lFjyzvx)37b5s4xeT@J5Q7eOi+U<Ixf(~nBXa}b5E7?W<bS&rGpIumySfq zsjnNV!>QijOR2#GX3>S1u!F#kv0Obf6Ju34-sFe1JcpW3z>JC@1;v?_lE_YoJ}_15 zM;TxSVj{+<eToQm5vx|h)uuxCAN@dcg5?LGH9HLS%&nWnMhP5kho_jJ6ZPbV>|*!D zK$k?2e+A6}_nln=a|0U>B(4Roa%!l-`CYdRr(7fucVZrpsmoC1$jx|(Znl(HT-0to zW~V^8QDJsFUZv3rY!9`MCe9f9P*OAvuz-#o97A4|hyWMMyE>m6t2zXx?J4MDzpDV2 zwA?AFu*3|=0}RMFp4>4HwS!M)TFSP_va)k4VLP^=Dd(OK{^TNdU!2hLu`hd_9@Rxq zINDJr7eLil<Z6=TSjJ&~$TkQcK*GViz5&X=f+9@4u}*W)&k1GAbty1A!G||=_39-n zLzQoMe6YNMa6Di*C}T?Qvu*BJ(Fg%dL$VH84^ru)p)(P-8<|QB<QYDR+=<wkk0h#g zA$}Rmv6r9t`(CYNK77kXUL22akzTRTC500owbbH|rHa$hxN4-JC4z50ifYU4g9xdC z76cny8Q7Br3|-63#t0p&%_{QpHe7y-?DZW4)*wPGW#*AqroObFlc*M`M@N7`b1`)= zYXGPBS$=An^<Z}aGqDjVpfpgaYiuG6_AKm`s@l<1{sUsOKscyS&r{m^%ZLtCZSAkQ zEkc31SMD}@Z+<R>pimsm{Poa}-@WE;_+1IU5-w?A6ai?R87nzb@Y=?Nv2sGpCMTqy z0xnt38S^^KM;u=UregujurHvaMiGpAeOUNp*HQat+MrF|PtfX<_&}-3M9y)2VRo2) zF9Z{&bafyZ&Ig6@8P0fwwE4LA{!fD3>&{^}IXBv};~*lHno@^v;N{Y{ajS+>#^z<y zw_)wbrV$7^qGp`#h3JFyN_~`z)U5f()uSZr*NnLP4NYQG9VX8@D;eO!s-WrkO?}+O zXNNN@eRnw~BLyS_PeU-{Fd%g0KnrakP@ja)0nMoIOi1~UX4PQbZFC$hgE=Jc7Cn@x zVwA~EkIpDmMr7u06Ze8moD<8Y*KkjOKCeEkK{yVgcR#zho#y5D7a|u=XjGVMKx(Yt zNjw+78y|_mThmfDwIJa4!)}ZbnW*4DgkPk=lJGau`DJtP8t^0o(&AePcP^CUA@IeO zu{UU*U;MPG^Rzs-Z9JP|ABa!4!VP^Qf?`ph64*N~;3a#V1H>}8@j~ptRI1u~VX#N@ z0;X9cV=KqzEP75sPN>T0<(~;t^|%-QzRu>c4GqC8A`NnFz$1LQ`hJkN7p>`tO~gAl zCXes$yqbNxG;$YB`1i~>aO;rQi)I%7-GzOue7wj*-Wcx*#>>utbDrJ3N8=k&f>VL< zf3zT5a$-3uC<_-$x)JYxwBR+4P5iOM{pWX7;vfWK=lNxNm)%<sLgHCM0*IDCD3mYj zE<Wm<r?C$g$uL0ik4Bq;&F$Mh0<!BS;!?b`n_Ewn_ej`K-g>dGNvd&$0>|eP?2Y>6 z7(D#X+dtTY19zZyT%q1x!2Lxu*DlnoN^aE5_Yl&`x6z~gQ<jOl72wgkOI1evB7G}o z)#-`HCW@cl&u@AvDa^nY75$%<PtBuwSMp}DQ}OW2*5_W&+qIvhDBV99W8?>j77-nD z4vGaiDtWNHM)$r{X;-@0c%k&=1#+7M2#d_GjInP16Sj9+6iBWasImk(OHej0-#o9s z3mwc&ix3fcsEvNB$AAF6`RdB^Hr}f0*?6y|LoxBPYXz}6<VtlUno#q|1pI=g6qo_m z>U614L=N7PM89)$N;FhvV1fr0heyz@AT-;jlYt@yNjad2@__fGl?`f1`3#eE<3(3I zdLiBvWZ3OBIVWTxKu^?rz*K_|beY=p-#Ep-_Si>q64~x6Ab<@c)=&|T$6}R|J78~= zVp2wN2)tP!@`1-D`a;g;pmyV5Bf7HIF=S>N`n~>e7<K{QEqG3zMKPA4Eng&*%?ers z`rP6+!uqvg6f1r3bxxosJj>Lq<9=Z4j<{pO?@>|?t|WdCsaw%EPVdCM`%H^1Feu(O zilr7Cy=5?PD`46NlyL7LP2kS77(ttK;7Ml<o8SvnK61n@v4`G8+p5+f%TF&rhi87U ztC0UtioRTpMDxQRr=$nirl(w)#ZNJGag;WNK$}NSs33@Cq+CvcxmX%Fm;n19DtK~O zJ7izJp?;Sk$mTzPAMwGB3F(&*S_giT&2oY-i(~s~DFB#fnBbI6dQi@l?_Xb5C3;27 zU6Vp|F!%-#kzu8wltuj^^S?dO3lq0wkhCw^ZySQpNY&m8Yx3-lA*>j5t4=^YSwkF2 z`(2d+(=<WDMgbp~6Ab9n<(|Hei1PP4B%Pk<GZPUf6)!hvmW2BRdItm{oF;E7tPH%a zw@QWI0|3%$7Bk(7f}P8d<U>3qH@8E)BAuS))TM<XblpV)bk4Ha>03xxXB&%OH_R_+ z{Hv>1p_u4;(JOjAa5Y%IL}XIhsygx$MxIn8@P!3W6YlxUywq9Ky#t()3yQh2ia4+_ zlRzJ*Y@x3u&cz&{9^8PrVm{U4xRbg^{tmEWB|yVpaycZcJ>O7Q_vxVPJ;aANhk<Mp z^1!V4j^A}ThXU0pwscwt<a~#1<EZ5w5LJ{2<_a`{QA7Kr#*is&#=;srszCV0Hloik zcUEnO%W5iV&^y$q(iRKMtD@JT9E3|DVxujee^q<c=D~R&Su(}?sc`3Da2>K?`X4^p z1Ar7iXL&MZXvNIKUAx7?BAxqsYKZ|o<qPJ`*NI8?+upn;b2H7PbvG+~ZGR8cs6kTa zEK(+%WPKPbYTwO&JcN`weV-MkmmVI3WIC96i_gE|t~+l?F9x$Kf+ZJ(0)H^`oS)+} ztNJ=Ksvsk0@)xrYEZHkdYZmtA3|02uVgQ+BKOn|Flh=|nUj{v$Iq!Ri{g5UBxhy~` zLGgMY-5*z!LjmzFzg@o@pMun+#8aoLZkjZt1By26fIwswD*4#PA{rJkS(!~Q88-rm zquQwL&+?4-*ji_xvp&77)mx4spd1lxO4p3MrX@CtrViRGI5psjw^lWO{yecVYXF*2 zOa0I#)MYX#meO6gaC+Whv239gPu_YonUOg;pytBY^yM%5siV?@_d{4oNIh`?P#N=j z9PfmiKXp@2v^z=3o1kb;VEw>M^<r$50k2x87PV&iaMIRaw3G$uv3OdhE`Kt!fe&OW zyXc2~5Q^J>HzJjICoWLuq;!N9LV#nWez`+2IhIji9xLYfAYBA5QRTjo2?F=SC+Oo| zo}6tfmX|>Mf}qUX$I=3Hx$e!vp4J1^6;S}7X49A9P_YrWnqt4pCmm9A33HvzZ3FHr zOzgCvQc+>Lp2M<>%7%KZffzV2@U~%Jf6t@=+0UL-aEKs!gaFpRao(f=6F>y+1_fDm z=j#w;=mEMvLRkXDdQ;oZSwF8gz-PIwH*js`0lrq=6?CWAMGJF9c)8}r2{q4o!z9jg zR-2IHeB_P9Yotp%f8FQwU7%#x50qnYEk{T}rH5mdlHe^bywF9Vg7fF}A^cPcZU;>+ zrz&`FpQ!#3RCCu*ht#dM7Vx6k$Yd!^xP8w0v6Z5A)F~KMRX(vGwYB>psQ{8qtoX0f zS~F<xN@yYKq!800Qhv>IE#$n|#no@CU%9(3n>3KQLC1;PjPoxz3<^8!QL2v*_?yw= zR5aG1FN+l_ofyPGQtvh(*ZqzVpHhj2B@q-czKI+$&$9Gc8?nwC5pYY;v`ZJlHo8^< zw{D6Trb+gsaw_CX^jT9^Kol~wmZ;wN^i2?oY)5IB-8@$KGRFP>QH!;{e_U`{5ec4Q z(sI(N!i*liMltPuG?=S=lHQe@Qb$4<{n&A7s7xOzv@Fx_l;=q_od13<_}9jNaJ}+v z&(gopwM8?5fvYQJ0$_FKt3TO5@Ji#!gT#s>hs1g_9jzt&VYpY9bA~c9o3NmvZ?kq1 z5NkL-!775D83H3j$!3f~qbPxl$=n>$#7jl#k?1`DRMt;6Y}<vGl_I(^*<hQFvlXOc z9;(H-^;TiKv(Xb*;q)m?pF5p#wiPf(;T(w-ji1nIKhi>H08p4Fb;#vK0|ToSiIxUj zX{BB!%by~nw*|XbtKSEC>mUe7*L3EdcgSelNv@$fJM;Idfs#=l8Jnd<nRU7{W`+Qm z`Wx1ycpX%gz%#irma`S@XwL1d@8ypRXuhYmL=4wP`Oj)P4~6U$^bqCG6Z{v8dC+T; zONyWiu}0sW0EbWWpPL;JrZC-j>L&?VzawMQs{ZyCd%#4(tessFN52y=2o(%V{v>Z# ztgE=a6CQRL7j6Y~YMGs5(B<Z!OskQ>uhjh)Av>>Fb*H!Ye=w>d@GF6&qh%vN%;^~D z@S7fYd&a4c@~Wr1)3BtFKEli9);#rx|72S{GW!M@093(gMooBCT*Wra*tlRBbtt-R zHzvB!?d1tD&Rd&Opefc$qL@)5@m4w?C7b}RnLw!!-`1uu95ybu*G6NhhIc;g`jf_a zE&5%o+9QpPnRb|wYRp@>4#{(USC5H^0%$ALDL6_&!|p29U%)g<lOiEl<!O$gZn9I4 z+p@&HfDF%^wX3C;Ltnbx&J%Fs8#_dkD#6+3nNUENm`s>()HwES7tQ8nFA%OG#jga@ zG9()bRO^VBfxh1#y!i9{SsuE@)J&!dYs&t0RIJBx;Vj;;Ho{X3<C|b^b^;s;^ko}w z<+s^X@sMLZ<usR6)aCt*x}%1orn{6NE7#v3K*y{|sD7&w-;X;#P<UyM^*4;tD9_VC z|DX8VvpAcxwp;U%-(4c@ZHGUE+a`E$dUZ(tjK|NHstb!E5`t#H5EldwX>TM290`7m zuaCcE{oKr#NXji43+kF=?giP&Tpy~*Yw&*H3g6lv^)XV7x2<HV+1J!@L*;*8<(N%% z0X%v}x(^dsM8^;-=&lZ@GeNuamGc;2KjTh1OqXJ+=uo*dP_$2s>^BpWdaJ}TW~Z|k z)9l7LL9gWUTYjlWzq0!X%!tAi6bY3Ac7gW+=Is}<-u$6&9eH-~@`=>g_^hXn11dew zSFo?$aI|H7kEv;eh3nE79A`>6y!PBaSSvi4Pf1`IJQAC|>5^wbl{X@s=aLh{-suGv zAZQ>=Z2v8Hg0e8P{cm#8qGcDq&4KWfYrw1trlr_Wr0LMAo8M0y{xW|kp!cG)l&>An zaWrZ&_g<2vpZM!vOyzT>rRa_!Rj;YZh$fvFFC{ai!Tj}~F|AXf)+(K*+3Sn=wtO@a zkNy3+1V?nmCEAvw+S~5+{7zn_C1|3XeY<$^pS*DI`e6S!oh1P9tW|TWOiKCp?NXH# zakkPs<9K(um`Ts%tx8DDy89h%K1-C7EhVB|?%4yp?vJj^gE0<8%n~1<?K)(%8f9XP zb!k-IdhK6`^dHDB+~aWGwf|b4ew~uS17ov)T=e<vbkINhOS%cmu%s7e0R1pad!k#K zXIiF3x#qW1n7;sW=^*7_&kd{Wl>MM=n$ESA44eh%?7L2+IFpH0C{VfQcZg2utS{^1 zSJ{pB?hY30XNo!*hkA8af^-tjtw~V^P%1QV8L-!et3?^KCBjPu0&eAwGandn9!?5M zYvzNDx?fzqb~$6KoLxHzd&+JbiDL~j78G$7<=~;G`x61eXP`7f)~-ejmj05~;liKD z(z@b1jX;v?&g;s`v9=Q=+gNGN*mQ%^?nekEGdsJni*j&<3;9+YSZr_z=7Eug*1WJU zLWIq1$95pD(HzJPh7JA{?EzZh2rnu@`>0Dq((<g5OZ|rH>g!?nFY_8%0dZVr6$dUl z^T<ZIAR+*$H8~n#)t}`xVj;M!KCSHvBZ}(O<`>1SFT>l1nl3_aLSpEsAIEQNcq5^q z+_Fbu>hxRdO#gRIM{oFSeaMeFgVH|l?tN?FU~*ta;hL!qpNlH;bbE?bs5D=yFsV*@ zZO26*nhGNA=Yc^p<@X|rZ)F`G6TY0ne-{(1=Fk8F;#^3BZ0FP{tCBp^Ood=nN1t`{ z5}iZHQdK(8581o^Jdj~8j~-C&xzS<Qg_V-=E*RQc0fX{Q^q}DKJ}?AsP)QhqAQyu- zBtQVhAXy0#5yanO$-n*k+<#4{$<F@~__?Lr6wQ)oB-XPXrJKYDDx)BOcjY_ElTg_O zpFje(gtu!go1H#!B7byk#;XS~Od1>YcABAhNDJ+D_EJSn*TU|Z8x?~x>XgL5gu5$z zCa3-TVaG<<zRIwa`MLj@?;&_OwMH!RL1<hlZy4eJhr28BCf*$-a)JL*@+l(1L8LLp zO|sGQ0bm;Xq}0MuCbC_V`Y(k103ToHF!BKsYOilMYtKGv%V|m0SD$Jw5Y!g=VmAj* zY5z4%7TWt8&^Jh-APRmVtd3>Ea$cYE#m3ROJ!W2=3b?WDKc>Ow(4!;Q*3^bu@d^R^ zw8ET8#KDH$(MdRr!Ae)*qa?2tmgdg5ICi#e87uh6LLf&*-q^;`3bvNmd9bAftIq=h zaPnuajmB%ZnslF}W?f7368Dj*_d5$onS}|+UQwcZ#3#~5ds@v)?T}N*V+Q-F>(8^L z%IO<+b8!;p5iHauxH@+V)<P!=dqC-gSVi0ODV-d>F1PDLEQUszY7c*tz_~0gG{N;y zm%;}&us)RtmN9FgQRv}AH{(VXddvVUw_Zp5iZHx50u6&RhGBn4&iQnkf!XSt-BRLs zP0ufDysfsNEi&*tu1$Vb*z<&B<RL1%cW;SZo1-UGEa;d&HaeW^U#k=W-?!Y*E}D<; zi`$$S;&YYG<u~QTL`vLC9^t)3FC>{U5cI=nazwbxd}(x#tf?%CamQ<Po|*vY(vZxp zhf|`~olsoVxAwrrbpx#9Cwt(W$pN#n7WuzLe+xxiVc6WjWijo&L5c^-&(5oI#h_xD zhYU39xnQY5w$OG4Yr(dI3+}RXJ}kQ3Lz4T{7DwbtNPjAM+G@78820GTlZ)vviUjQ1 zpFkf!gfhUlZjJHVX7NitMlk?Ee^lkhXVJ*4rr*@S9QB*wboEi08>S~dgMyYY$E?ZG zEKmk-()X|+E@nb}4{{DtsLi0$2|2+vJSoPpQR1RSa+gdVFKgoYcw%=ya^6p}da1e! zKj1+H)L0=uiRX*ITy+MA=@!h%_r;(~a@SXddNL9iZ7)-(@vAjm76$>4zHgnAAXlxz zQ}*jnK_ePms@6x*K`GY55F)QixckeZ3j@%wSq|HfTejitv<E1*Clp1==*AozKn3IM zPhT}Sy{&v#gZQIvPju*cDf)j0Q-(ns94R`aiIL(Xcvcl<nZ^4X@GiFs$&D-)1*Vej zJ-?3%ZTN30-$4|C51RnWOScS_WW~plu(OrIQFss}%^89a@|D(uZ4p*=cP-(fT5ui# z^!&nJk^|XAS6xK}2l@7}riZZZ%vB2fYyCZ!Suk$sEZy~Y!~sNGCimEET2iuNHFvr5 zFJ>OTkjgMJA+4fN#TRg3EL5tCPb^?k21Ihm`Cmg=ep%+-@xp-g8ya~dYU?2=o_<Nu zUm#FWPco?~Rz~w|>>PeX2^zlfa@I&Sp>iIHpJ+p|Kze355u+wUPih5w9Igi_NhS#k z38c7g<a|*|J){6%p@H4q>xDEAG{wyRM*%wQVFmfPuV6eew0^d3QKE8!HNn8}Y+^VS zuZ1{tLUsjaa!7z2J%-I2S<eBInrXu0g9AxOvs>#SKln~e*~!vc`m5}=IRY-jENnFz zTKgF8$0?G(2^2`LFBi_K4ej?29j{--W|_8&Zwk*ulY!QCmV@o3L-F&B2FFWLr#>Ye zuDoK1tFRh#UJu5wQ*)W@Ppc=U%RdnK9s?oJDFy3;1qr~1B=k=53<^&y`igOEPN4ls zqi^l>vTXt>N~%PgNe|x<?7bQ*y#gO6=TW!HOn;1d8jUN57s(*Ow|C;fErY<c-RJf~ z1U%{yE|%-h*%rezguVD*;iWXCvg;i&m`)&rb+CAUJQWuz+F!(XT{N5jUqt)w%^`W7 z1{|0@oj3;)4TOU&890C%P@^Rqe>D2v4V3c({VD^ML;elYrwQw$JdRhvsEP_%?9-`S zq{igR6cv6%<Nr1A*hfy3Xd$2=u-q`CzuzvZE-FiPOYSH&#5<j}qX&<xuJ6S!O0Jip zaDLw|VJEzCm9}Hp`usfa$8Kx%Ce+ZZh&2%7j|vFft2ie-J|6(v8rR-MEecO-m$A$o z@2yuC^pXA>8sVVqeFmpI6_Y=U>O0;=a_Z}1m(N?_eLbGvOw|K4EshQ4UKTBjT!}S} z+fWto^qyVnUX6@f&Qnuq(td+`Z0E1&(3Og(56xBXWIy$-9Mp*EQJpiS4A|y0g&B>y zXL3W6Uvw6K_cZ|raK*SalQhcx&YCSZmW#a?A53QNYO7_nd0AA7;_B^}eEf3GnOWjG z#4hM)1`A~M^!6+MxU`nM#ColpQuM|D$e;6*Cyq5=z%X&(z(bJOJoWKtr-bwJ9HwSz zsW#DNGEw91fPeqc+bUHLIC?!WVMp@p^mgF6FAK1D!>9qca{009aka~eLto&PqcJX$ z_&u^(3)TA=dz|D!E`f$rcn<@xAX-TnEw{t_L-w#XY-6e$2g?V*`erjV+p9)pajLjM zFOfqV9kd&pB*);-m{1YmUj&m9h{c^kr5a`pGe4f#BvDIJl<IT9`6fbXO_j*R%$&K8 ztnuj$dw>CFKf`R`mV8cXz^p*Aq`}jNCE}HJeBFWS0wS`&WjMKnr}k^(AYkx$y43%$ z*is|{0*3D~YOxAe1Bl%n>-4!saJj5gC@}H|ziRVqmiI^dW*>xPjH)wi;j<Iex#ns` zusE@9R;sdwHZSXsClp|=jeXvvR##@Atw0mKg75**RY?g&yZf>NSO>hx5zr)r%m?X* zffHQDN#PSA1|j_!@BNX>4aDC4!Cri^$ULdPSvmuTT#VOyr6k}4v7{Tn(eW%IDrV<g z$A;;4A9VYP_1yRZs#TN<B@=xrR-18oibN8~A~D`ygKtWMy8-l}b?{sbGbUTVOaP_# zlSV*$!W5rCiR&Vsjb|_dvM40D)X-9I=wl87b28q=D*>3dT9V@`(W0ry!~g}L*Wp8h z?QF~sf8_hD8zj(zH0zKx(%kr0qC~|sBRVc1>rDDQE%#yZoY~*9?fu)PU=jGDkItyq z;*Ts^1|lgE$@bkSA%<{ecFzMnm^_ya4k19&gWcI(=Vc#^?fy*6B;z<XNHlvcoTomO zqy|qM=W1a~Uc+G=j%DV+ke))4FGiPu%2EIR<sexX?C@>Gf`lf0ZGJO+o&SyA&C09j zG$BSG!S6h$_4G0S#v1@uj!QSc7~^+D0G~oF!IrO?%AIJQY<R7TZs@YnO3rY~>IR_x zwY_}U!AS-}JCXJn$Q8_Jv-8t8`DrKpj(6)TTjkqm1d;O3vpWKc2!7B0x0;_|hbFUQ zrbEEZL~;`khLyU6XF1b2!)Q3jkpj;5$2ug_v_S&`BMb|wj}$`WRujMBH4c)3nC$H- zstk%v;-$Z~3}2wnQ2)?nUyb>3v<?uP5nkt(e9HW2-l%hU0Jn)7Z8jru0z!jO_p#C^ z&8XVe6i+Q*L|lWmx(-c!xKQZ0kj)*RgFUt0;PGV<2Zx&_yul$&Kz*5p?7aS51{)Q) zE&v+nE-mN>8x=3_1DBm(D)?(Vhb`DV#*SAp{cl=nXhM#`&Bh}9Z1=A6A{k%+JH}cg zWRQ7!4|fh>uh4A6aMtZ|8OY7j(q7E=;;s3r=jJ(_plLc$Yuv|uO~oEoVFiut!t7z< z`}O!fG-qw(>{8O-o|~bSB3(d6u<R#BpR_gre0oS@8eskY=9vo%t{!2%#xTjrv;G*U ziX`*Xms@0u<FzDcK`fCcI|h(rr!lTPsKoS_{W$+v6^*ki7yHz#Kn#ZKz;km*P{lAN zW+(2$SDy?AhMW3>;G)VcrPwIlz=W0sw0F>L5v0zqcOrLTKI)~Stn^S8KFP;0h#}E5 z#qyOCedmEK411X55Al@)`xc+_!8DEq@QD7>R66zQT?UajMMb@fi2?XS$mR75s)1#f z@`T{f?$PHy43Td&;i5Or@a<<)uEl?Cx$N%FXnPfS`D<I|uJhxu?j`!P|K|+wXA}JA zQ7Kb`XYj`}T}Jl!*}M!%VAo)meyvke+uS#ngRpq8p@NO>tdPs-IR3M#(X5X5#0inA zFTadGu2*b47Ay%%0HHM<aP==SJ&qXnYD{Mi{7?9ChmjiH^+AR>-L=i9SJ@$;ceOlv z&{S<6ZWURO_(dRy6b<;7d{`m;B)*I0l@i$f^eedMb6>4YhaP>fR+__)qWurh|G){& z5MZbM_+Knz;!h7b7Ci$C(@tRB4}rPvczLq-AO*)+BD?@JJO*8&8wDH?d-giHpp}yY z_LX~#D^{0vucD5nxUex3bpJMV2?h@yC(+|5Sc`!TdeB6=vwI30O#~%6k<yqZ8gRat zu13%Xt=VhZFK*iBj|CZ7JN{*5D&-{pvy+hsEhBe>oZ4d3+;x7o9jZZuDwiTEV3Zqt z>sr{V=6wK2Ud=X{s+er|4Au|*bOYNRAfo<msg}$gRFYUp3!b(P@cPs_?pOndXUlh0 zX8J!fD^*HSai+`^B+%XXzC&+jC4Nk=<(=pIWA>@(C=3{}D}^W>&3L$??zPPvD4A%z zqQS`0M%jws#s%=aZ`?l6?}g<|QKn5T%XyRsu2cZ1)hG8ioNu?(=XYb4E!?^AQy!tH zPRzOKSxMpIcnY66rz~^K?&W1hIjJ)^xxU~eMkT8k!!?-MRHt09_KZ^-FE7fL8c3do zl*|mglnKNhL(Or-OZ8g#Q|#DvA}x(}kd#|z?$4&&=wWYtepp15(~1|1VdB&t<SF?+ zH9rA!fA2(e?7rzwZ9~=2MCcI*I@FZmPHt&1j318~(tGQTW*0zbZyEeXpuw*}35GET zUxzm0U#}3hOQZirBc5$4FI-<aI;^eSBII!nF<;A#+lY)>RA9WeMd?QK^5U6mOvFA; zn-0>;oy!UI_6lYF!+`4Q5UE@NTeJ(kpC|=n4l%Y`|L~i@goIoLNr=Y+oB0QPHc?~z z42{JrLO}>TmfpwKl2Wy~ZLAT#scZ{EbIR^)e<MQZCYM5WN&j=~OhU4dunHhFbKU## zVwJ&E@@2S83-3htPsKn032sKZ?$5gkF<AW%xTk}+rt@51ht~bQ&5@jYa6;XFBOHLC z?gg~O@OV&Lo}FM8g<_OaR+;vzU4oz&^J0Of@bi2R5W4ohL?>T*%+h~63R8c46Pan! z%E7KKY6(Afr-UGBq;v%24}~#Vc3F>6@YEc9*;e21hhwa_9TP_$B61AwB&4RDy}mEr z>0Eb!=0H3tKyJVJ@BBOcO_Huk*WawKM_Y>V^uL@IPQ~$9JB^0NN%TOv`XMmeyX;x` zKZ&E?%QOCpHExh$5X3ae6Yu2uqOJeQqY6IJtlO>$IQ&x!Jo4%jAp_6e1w(2%7bRe2 zv#B>mDzK=Lx`66`>09n|91ZpJVz6<AY5G6uF~@(?V=xvrF1GZ8HAw1o#$jM+z%+5d z3T&G?33cS;Nxi~8U6N`&fgz$akjt`d{Hk?DktE*lXN@s>#aQ|EgfXUzWfUDo^oY0b zpX6QgyY$`E2|Z#nT^c_PJ$*9!RscXU81Qo>KItk+#K%C@*8{j;yKTB+kUwOhUh4XM zOj`Lqzd1eYl61kh18~VulfFL#4$9Rq{A|KH3oF{<TdgeLzJ;g8Go3E39l2mq)3wM} z4%R*i4Z1rJSxiOvR5gpgf|@I64!;=IXcS6F0s&k{kwTiaP|2E8Aa6XGRp&D!hb<AV zBdn+m455@Y2Q(^Z3%nFF8oI(9$n8IV={mYl*VOtbbqFie4}Q5K!)BR)cYHv{2y6Do z13Jsn!kcBrCwhv3SSzQ=P7B+qgHi2TX)7g<|CQxp<^>QO!8xqQWjU_(wjB<M9`)7D z-%=6<F$7TT;Ob&3E}3JJpi>8f0x&PrP1LypTdsP5t~@VSgIF$4gZiZ*w<>Gq3s6vu z*wXS4R`5pT)94Zm^`RUf`n1=svgzN}VMUlYr=NooYTnu7t0;uWna$(8W@j6aDD6Yg zZ4OGhkvCRlF9hSj)&<#zW_&!`rk~+{LCTk^L~!@KrTqgM^}6l-X^cb)H7!AhLkz@e zw)Z|K7QBD{!hRiVCdpy6{uMa->%Q$+WARQ#+ncEQcOyEwld?I$#;y?Ch{=d`uz;16 z8a<0^nr<3OFvpE?&4P8&Qi4m|JmgdaO0KD$?!4QljZ(QAa%@pL&gCx7YWQ-B6;%MW z^xzp$vOXDrYKHS?ddLeC$ybcH^GB=+wA>l*@`ay%amDZ_o$ODn-GFmjnOCBPA}grg zx#_}<<|$?7QC%ruNL6su6iPfUkp@^+NR-PQi#1+k)QcvfD5gpCfL-iK&!ZzjO&p^K ze2L)F2}diTM!rC|e>!}(Uc+p$Lwx<xTyDr1{^>dw7IKG8zbtXgf}%9fdIIH7R9{aI zM`<H21MQ+Wo~=uqM>D5^l6|Nc?nO4C+RAd1vY&6Wt$7&0zcM4xcnLJxwyG5Oixz9w z=VmaqZ`Vx+9zm)0>b}Y#iH>+vx7t}Ar;09wfpHi?HML*Whi5<Sre|B3vO&$-&2>#s zb=1S>p~iUCWyGhAR;Qq!EqWy}fQxAvYT|w3<+QdBj_uzL+Sn8v={zA<ZWp<Z{Os!s zkVpk_dh|B{wt84q>Tej{ASCvOa4?D3v4Sh|*=y(RX7uyIxN_Gt)p&}qCsZjCPk;ta z&#4;dxP)k?Cb(pyn--ldz5quq1ZzrQ%Cay!7XcATuH0N#(9*%1T%XPlQotVu&@Pg~ z>95ENA63rk*?m(wD;vQ<ltZCZ>j*V?(__@)`|f4HLY7%ASI)duf@ROhQ(9S<(+HSZ zlGzi}J=^$Kqy%PO_kHljlH_gh<A~SMEo9u^xa(zyTOkciF#C*|K->nYG{@b5P;svD zRmFx=Icel6HZs8JRVw!D7qn6=RS<u!%^;DF<^9yI{-`sARH~KqdOpe5{$KA0*<xwD z_@7e1OIrnmT#7K!>!@6*HqZyvLkn>G>wu;w#}M48dZPsv^kOPQ@5WLH&{gimZ!Cp6 zRm9>DGLTkoah2mEBg{wW7+L~s*NH2hL|J-R837a*;LYwrB6qM{3>QC)s?jcrn#-bp zl8wtIO&ht4<b#QgVV3xhgQRMk9L#x)`2Z9ExQHDtA1y_~y5=>Sy(Spba_c32Qh!5{ zD*nK7R>rgRH8?!<@d}goZkmMZt;)hk?rB*kHF@=+$;uEuC<D82KMO^q5`;Jyx>(KE zUtbC{S;pDIG)AbJP}3p{Qa`lF#$iA&*Sao5O~{@&nG02?%`on39!q*(n9<Ef0`nc9 zb`C7x2=&0!#YURYK}C*B&7c6v&wabA46o+Sv`TC7`C9~sb#jonz<!4g8!MIIN+xSq z^pEC7g&F3LE_kL9(X-IXL<Gd;VdHatOi}V+=bWS$j6%G7eatMw$<RPJ54!x?%4)#b zkHnPS+C%r0a9m@Xc{AKQ1Vbv7naKmdK2vf1Bi|7v+c}N`*f|QGfxwc6jNuDP8C#GD zUu9R#3VG*<c&A&4^uY$N0UZi43csxcyb0_JiG-1~oCprIa*LS!tioRB0<41FV3lP6 zOe2(TC<EV~<^(b(k>tK7+7y>AlvY4m;K){3$xH9?q9Tg`XIHkc-9AE>!od^}t?0&Y z$U1;&KqAhREJ2A=cfq*cP}}Fef>J#c3T6?cD_RuP)8cwPx?Vnu=Puh6GS%qHFvUVM zrGEtP-TpojSNjanu@67X&3!;HS2eHCs2QPK_sQ)2r{I9|)hr;+n|S7U3zX?}(r5da zQ}7?WhaOXzz0$t+e3Kl}7Y-Z1uAz9USXP4)y-<VdUm#XS3%1|EiVvp#nQfm-f<&7& z>vuCt7dj{Y2h@R^(=-08i_~ztSCa_sRQvc!viXQUBpgEC{Z8`G+6E#TZ7`6kPviGz z9G@)_orv{nfbKZ%Qz0(%e3a4Rhuq$?)E-)<&n_Vzx_VI2pr^YU6$BE1k_VG^iECo= z55--UT9TvyIHi_YY#F!kzV6Nqh8s}fl!%}XD+^*p`~@P{Ulaj6VQHZ2e`2VhlBJdI z*!{|?y<sEueQgD2LiM4Zq>4prnk0u0>-gNmXLvLZ@&l4qQx*7yEvls+L>*4dUkG!N z%UHL%jA-Je7`?9|c-5VNEPGK;Gv7>OWmA%O7M8xvM-}^?l!KB7Qzs8h{{0&qV^$;j zHaU9E?a<r^7nAYB6ep({xF_C^SlPPK&=LZ?<hYYl5~Rp>_ly|X3SJFQKUz&D7-%o= z1*;>pey<OS+#;+JOqTsE$D}1!uK*E6RH*8V${;=oX;=Y09p!YuuIyBK9?sNO!`OKn zv+<y3T*AbR(H&0p&X1&oG=4gFNI6Ng+j}Tr((~|0uICYu0WVt?($<>kkZoc-G%)vs zNG1|I`Iu|c|3%T)`yh17e;TObP?vNu=;pMjI~@8k_=oS_sdV=fb1Bm-VvFJX7|iHo zw@Lfc^bCo{b$0`RdVy*X_Mv^F&959I=dgYfpwaHQlY24A6g0qQfdt@Coja>}!qhHo zvrpzf<w$6{??vob^bp^QqvqUE7Rk%(ESdvn;s*YkhZi6`YNa-i^HT-!sK^g11ouEm za<Tz4L=;+ZerbFut6!<J20Ua|2Kx6wj~S15=HHZnblf`c5gd(+K7_1TA>WgJHYe!h zj?yEjhonTcT-3PenG>`*mQZe9s6y|%t$3NQ_7Kwj*9~;%DgcN%WE<!IlDdW?G!S;C z|1}hGY~qhv|62$YSK4nL(MG1e7&vqkuN?=co+ml8OGHcuTG)8f4yET#^3D2u&B3e~ zn{10Nyn{?!w&cowg{!egd8@$9+D5a&(NW#CRjfnNz9z8uysIPBrw-f#+BXMzzxi2d z`wyp+Aa9Vb?(Eo8RNlF@7mxt(s+|tF0ot<I<cppd+i*=9&-7N-bo4(Q9mhx!_x94P zjw=rqJAT}Y<n5cNX6ykyzn@jNx1jJDtBhnA#Cc^LjPlhgL(8rB_K-^NXfo+eUQNnc z)v@O7ZGB`~gZUk~K{V)D)BQhS?$w`0=mnz%;UKy)`R2oR4{YjQG`wYSz5vI50R10{ z(^_zf)P>dO9$&jMgH!2h*H)1UTf{%36);L}bM0NSL&255i?$AK$oQSDR*Y>lAW-P| zMt9&PZjgrB;(wY<-n@z6I4ZLq&GuVblTXc{Y*yaohPx^+zZD*iZvoON+?}O79aw4< zEsi&tanLCACME&Y{n>I}2;P?c0BuuO1mE1MUJqUZjYf6$hbsaG%C&6}bkI7u8a~7z zbD#50?BQ1aoU>}x5MaFJ7iY9__dd__A1)1fgEshFNsEPeA0BxYL8zd*GgzsKvwTJa zjovHqNezKAUk-(&0P8(>$^_Y@`Y<w@P9Ov2H)&*k_h%(e#4iG`h}-jRKzo1T!N^#q z9KO1;S71%vWlnb`t`fC6;@|6F{8=?^3#;tXe@#4ghkVq0Xy=MiUkD*JOyo01#=~DH zzx_s^C<s~D;nF?w#z%`Og_uQp7uym8K#}jAXabkraJ~}t`7hjC=(UNPN843?!ZPr* z-vvE*;2)?u<bcHvnY0NOfMLlun;QH4{2iO^jeM5ji%p@d3o0dtPvY4_#hEM4cN4y8 z-hmSQbO~CwP-1z<Gh4ZDM(l@6i+Imu@|jveuHV6P<k|r^_e}s({5Z-fj=#$c(j(uj ze8OgyTgM57<)XI`a3Lj=L*B^X&!6!^7yKRn{Sudde#-;TZt)TsfKz4IrkjSFox?7> zttU~B4H(?i7AN&I7Y+duj@8Iz1y>MCc87nRE~gNZNZ_CLQ@ywZIa@0^TL@QI56v<D znWHp8=ZtwD1q2LG!%`P_62;5zjlgi=rN4`aHz5%7k0MGDrsj;Qc-cCJw(IwIy3rU< ze0l4gnb6eKM`Z920PS0cmbguJEi3d>@qnv|eQ5U3-euh-3X}ev(A(afj=8-X4;$RS zYz(e<mXw@$fAgG4;5eM6+=uJUqQk*L?L8-N3gWe{cov*0uK1eX-UIp}x?Ms`@7_74 ziYf)v^WqRvCd-X;oq>wABNn6r`Z))W5cE2t6t0@Fit7~10b)qBRiiEGKX0LeUe)2C zq5%rQ-BfnNnB_m!wGhr7;#U?tT{!2*O<_ttW46%BxRk0<|9ZMvBh0w^dj&XihHX(~ z5{v#(oNWnH<vZ`6rPBP3W1BrZbWi@r^YOk~c!f+W_Jeq8!mkvfn@D$IhkPpVdwj(J zF8^x94A(Z^4X8BQL%dh4#@2TlU3d&>$^XlOSmt8CPR$urwoO%ZXFnKQhJjJfQZ|kd z8O}@8gyGLoqnTF@f2_(UDZTb^UfTmU@$C<+!D!y$z|YiCq~Q3Hn^iq2OqyFdP8~i8 zigfI|7)AHTFdk`>OLZhD7*#jd&Z!C1(Qyh6Y#(VJ1CR(5BLL6wUPibF&~$_M%Dz~L ze~oE8oN>R=%(GsH(n5S8w`#^yIWsXDI;65Crx5g$MF2G0FE3<dfCVaBne~u5c%69B zF*5SMBjXvXIq{haKs$gnCQ*K1N@{`mAMrSft<1aghdHLowtkYGt6;RF7M`PHfGAl_ zSw)JF0XTYanV<&^*CsL`ye0$=Je`v0iaAy_;S{h3<7j|K`@Q<XYu+tzx0o%wM6E`) zI7Oe&ud_z^2`)!#!t6_uH8Cdv9%FPw(g$I@ZFNEkM~$AdyWjp!Gpo>gYs(0Z=_5g< zD}NJ*O%S}>!m1*gn5`EY)Y;p?_~$Ugk>k6E0Z<{QP8sJJRc|zPEX`XB0`mq~<s|)T z(hWv*=VPKfY$)5+ugYogxco<Pfg6w?zK|Fc1d9(kVsk&J&SkTHwZtIz56fbf=?V$U zi1J%Tlk%HnWOFHzP%M$cobVD4p_KZCTvN5sXff<llNPo>EHTp%S~J;dbL$gpDBz%s zfQa4<O1R;c)}zxDz?<@I=UiJ7E^<=Z!LaJRu_H#3Je6GpDr;P|PWPgcV96Z5`WSVJ z9*C<Drb+$o$(ZF9n^~WvD3nMnVZ+kcy`_DIOm_$R#`JcvA!o1Q*uW7mUy~XNmjRQX z{HH3Y)*p^JG3Wu<X=`x86ddt80mIxXKyPWpp9;!VX|L(d{{uuoyT5hn0vu`Zwqljn z(#<pgvKatcF$39S7*ksseByi)73zU%#3tmTA;EHfz;-(M+Ut}*LC?=)8*ucqR9du7 zFSKqdG;Nb*IM=1+00OTt|G*~~u_XnKOcV>JSIo5pbG7z44Nl^be^_6DVy?G!tSVlD zD+GU&uO1K!4{CQL(RYp1y?B&a;1({d5(L2$GFn?KO!+EdYD{f71Jp$#&9{U+(#jq{ zqSY^8-~{)0XzF@E#?E?yyKvEfqbeL3C%gXuxb*JUSYN;amHHpa;63IZK}Zu%DZNTv zX0g#`<`Sy0B7=-6=8pJxlHG=gAy%>)F>-%!qWSZrmpWY|9WgH>2${D$t7G3vR*z|N zFnIr3@_e7W$^m{{TJ$0ZQ{a7cu}DhWt3l$~tPszqW?3Osz^LgL%JlDi4f2&L0^O9a zmqUpX!de+?Th2?1@Be@gw-^Yuwo$`n>=9@4&RWk)V{2h?LY2pv3L^aGn^o7I#$$i- zd8Ln}A+HTWe*JnC&Fn^kdlN`JxpgG6BcF{aR|WB4CvO`WgkB<ysailTaS7QAs65^2 zJa`L)X+Lxj00J{}8z<$$vHZKCf)8^KC}rxC=Pk}g-r{W9tVc`3jxMKmoYDZuzH3iB z;t-Cd9UknDGoDOpRU@U7fr^RNJGy@}P?023%9pY@I#BPB^P!azn7fU7RCMaSQ8U8v zo6enDK>?AGOx;?x6nI<lV_L4ml>J$nsi*jPN~#V|%2sz|o%|W*%v4mvG!)e^=Azou zwsz|<@;cSU;$kF44e=$k&!x4mRkif(H1;9}(Vy9CuRl1Z%K?1J4^*Sj+Sq^bR#iaH z&xumul$DBHj^>8d%5gAJR5l8_rIVR9*~JNIWp*D$D?NV+;t?3u8%yZn#pqCQ@$u01 zj)#-h2*TBZuxXo(Cj&LuD6gm!NAgt57PO|U0IdH(yGqus0+@2o>Pv9AO;*S@uo6gK zOAZqg15>@9*zDH533%~*yj6dc(gFnO`YR1iQ<xFws(;GkF$b#l-1K8&i-?+sJ3epd z{P24&xnMA39wbFNF4Q6|T&Og-`=HXEhh$^ddrEu<F>iI%zU|sB+J(!eSHFlwlat`o z2d_!X^n~(U={bfD=(6)za_8}V?XN+x^Z0!r==sj$cg*=zn`x-jlZJmA-SuYCr8#mJ zUtjHOs|={igO+UeSFU>O*vM$lauWbp59|a|uU<~pdpGa^!)ou`@}B`|VdC80K>i99 zwSDH#0Rp_4K(G8iV1bfI{lHfnOp1v?&6wJc+;@b<51!C>ml`9~uXjEhlszY^d9EHL zmCuXift1duVpH&)NuGcEyMu?`Ou$!;v_u-x0!&~bJiV*>0~6G5t44~Yu}O-vQ9*D< zjaqH}UF5PT5e&brJDn^}(vXG!d9_0{z4~}9ME-Uq8-jS}LI3(<WSr|<qcKJ63pv)u zYgj`n`dTV54D*PzZG<cImjGr{zs@LbRwiK2ix%26JfRsDKEQwGC3}zDO0yjnIPMWx z89E_!XPf5!?jSF{e_ded+(XrIRw0+ixLU2=#+OB0mch!;)c}WBbv0?WY*LH|z%9>5 zC`@Ea$$$99ni--&0{J3!td8eH<*#q+ZFQteq!dyVxi-YeK)1{^qSy`3@sA=sFPy4@ zg%ILOh?bNe@|l0++f}b)5?}+6rLr<sN%4%4dg#pre8otYNav0RsUfG2t_LR{f5J12 z0=U8J1lec8w0}$v`zv*FOYuJ@0gU+*|AWmA3_uXaEm*}f{zsrU6Yw?vvp^dB58f4< zlI#XA{hF4^T1W`q%!P>egPj~<-(DKLfVz`Rjk~fw(ZYZGO1@UZp+uZDuVmBdzYrS8 zEgp{TYWr=ImO1J6^4}W9*l1VxcqxgdXbR~`o5^JhW@kx&<{N!OR~zCNng>qnEdPDQ zn5+Lw(5Z=w>_sGJ33#hz*hSPtNQU<ibT?7RRUp11S!Bs53ped=kj!V<mT;TIA$k^C zvUt%OT+e^>#+dWjVv^71rU>eAE!6;7nK9MaSM}Epu55@kPc?zYo)}?*zmyvlQq7nU z)Q`DgKyk7KHv$uqlB*h!rt3Po-Gm`2G3-ZXhztBb2*?II|6hw8FR;V3Ca@C6<8AKb zQw{~z7r;IOY%c?|6*3blLao0)gn_?s#+&P_ma$DNfVWleuCY5;aWQSrm?V$DXuUy5 z_DIWtqdfJ{@(%{dhj|UdLwgx`!oiBid{dE+NRc)kk@HWoWz1li5t%cA&4Y66o#KB1 zjhORclfmy30yi|50nPy^4lxQZOl59obZ8(lGB`DtVOawze_d}|xe<N$ui#_*LUD$} zAqfNvB%8X}qCwp_58H0@pml_`5L+^2d6E44p5c`oJNmG4uVMs9d?{Xj42NfC&Wuzu zyWpx8M^RnP(Xq12#l@0c)a-;KURNiIXGtz44A05snDJCs3gMX@1u7@CU>%Z*9yAz# zYOYwhqEXODe`JdUN6LZ*Im(G$t>`IuU$G~L_DaxD>{KBTMq_1m%+;o&M<T}5<T#nI z6*6Pvn8|U*><IBVx7nCf0#*+Jv#RZ0$;DvuRCSSKIl;T+VpNj@N0tIL;C)m|HV>n+ zSXVWbsC5MwZF98931LH=NH}2tL=m=yA*95ZZE;4+f3y(-UM9$aRyK8#=?p7mg%<HF zwbQ!P*cLBnwGAn|6ii0}2S^-SpSTp&q^If<23j9(#}o@yr7X|`&YE&*`>0EW87=%t z6*oktXANQ#nb3mD(Nd>WY<mt)V-Re>#VL+peF?2><09S~63}9&Dt11uXtlYJUvoDu zIxW@Ce~bmPEsvI<rPe3pG9|_yvAE2otyf(ZYHy><No*AfXti@d+^pHg2_TrO?F%t- zZQ8`K%4%g(X}kCYeNd^`BathysWxR-B-=QkuV^rBq~c2E_SQfxZEi%XVOue`s!5M) zuA!P#W)KYPz+L0U=p+IYH5w3sl?og<!EIM*f8rV%6Pb{(sj6K|%#zyjhW*l79j<Jr zHjkiy?q)Kdym)akdiVKe;zloLv-$F5bbj~yvVH#NboTLN^lHBNFj=_Y0!%u*KN-E9 zTrAyhKn_dxrc@U4(M%x~ADJ=arF-$hjn3WZ@AG$aH+t><@@js!m`(l%rJr9;uCA={ zf9h^}wVcjw|LT7F=>-4!$q_62W<gZE*=;gBa`lpFyCCD+%j50d>?c7BwyF9E<rCq_ z-@f^4td?!{w{G<7fBp+R0KCD??yj!h?-@f?yxGU2ai{ayvTc5vk}KW#Qy{Ren$TBX z_nHH3ZOk2=E#?>J6CBKq&R(Co(Ywi~f2Di>SU+duKPD%mpRvVcw!8(z)TWz8ZgI&M zliTKKTi2V(hw1p${8OhkC3CBWkF)UtbAjF3jcY2u#jX|uOcrxd-LsR^LO}O<{j970 z^)sxV)IDqW`F;PZMab|8?ouiG46#I_hrDow(6?;8-g{`{eB<lMa<Z@wfBSSZf1ce= z=d)o@L!j{%Yf^#L!3`!7pBYZP!s<%gD$vWtba@FurWZ#PBv$nS4kStO&GFlRm_EGa zUeKTY>-?8rt?_35VKUh4QWV%d9G=4N5&DuOpUZOzK$$#S5XNQHfS^cl0*LB@%P6$# zG8W^{1O1Jtxme=^?7@4Q?m-EBf6(u?C3Gzo%X0OM&?QuH;`-gT<4Axv$WFw4f(As> zC<v5#mFMv2!r7-THp1+47f;{<wCM8&Ht4-nuOK&!2opN?=2J{V#IOKT(*7W`HF&5| z8r_T}U&05*fX;9j6icdX#FEN=V@csvOo*$PkOs#DLQJ5}=Qawiz-Td=f9osP{V`#6 z9oGDLetkWjeK>+I0OdkJfF}gkYks)GYIeB6dr403W*19@f#Cp6aDy4Cg6Sn#Xkq}i z&+dlH8lNUVJ;tP%5g!jBNLyLaBeXxVg5hw7L2ux_<#s&*U)SWP6S3u>UB`+=)v|uE zqF1%9JHom_Lyd&g*mt#5f6i0ObhEdFTot^5w!5!?%zy6;W42t(kLW~20^%`9Tl5sW zaH${;;R*hBezBO|EQi|%l0XlgGg5;9>?lK;QlDXOMmD5KW)rv?+#hmwUyxL4z*WTU z0{k-jbN+EU`=cozA$1^0OaK9_j$<*p&@|6daTz<@!_DMkI(|%^e~0Uz8SXHZ``nD- zuvPPONf3>rO1>9EU<uI0J}Hhtp(2q_$#_FWFaYW;LlvuZ1<;tS+y47*zHIE_?c{p? z=lE)%009D6F+$ig*y=h}p=4&bU4ql;)no>(?@UzS+FQZxDgVDQC^aa?rw3B85`uhN zD*Ye|Jc=Mz3D9jMf9XpI=^ZsFY>67>ps0b#{8iX!mBY^Y(_rTx6I@*@$Q?$X-(9vF ze?47b`h4-ZdBElP;^VQ%Geu-dyq7y4Btr+7dI<a;58_(Al~cbBRgdWQ1NabHHR;!Q z>kp-}2_@40P@=eolB^qRia}{Ovk(N6jC>T#LXi~$Y!M#`f0)bpz>>^RMiCLxk&Lm` zfq<_T*pRF40@u+6Fi26CBb&pj7GBsG?(=LP!7SLm3R%e@sdx$dh1d*g%}^*GU`<~Q ziaB^=$o;Kpm&1N+S%b@>aDZ{sw3xolv>s}Lxkui9P$F|5s`{TbZ#iq~??!ld`8HQ? zSE?;bwy(yxf6Gd&Uv<B+e5spmfR^=Gx6oVJk+vwi_6JrBeU7xF26O~^6Ls@^QTl@^ z#^GRsgHP$6)qqYS;-tOI=4`x#w{7*FH{<2SB~q&mFvav^X<m3!^AZl!yvU~J*Y$>2 z2VX%U<WNXvlEqr9v}eQ}c1ab<P3m(6JqU<oug>zTe+ZTrlXw#Q!XIhQj=c5|6bSub zDA>XYMf;;b(h3D>uvZr)Z$&dJD<FlwFDs-S^lwG&&oAdU%Li4ZqZAgb5X=QBH8Oik z>4mkg3>^&ej|GF2Herxre;6cM!(g3mCSEtnU|_%|38!YH1op*T1BPZ$fbCxzttyRI ztAf|Ef4d{->H20l936u2fa69hi%W%2(N}$DIfSFn_LCedx|Gso;z*!E&ENC8LJ|;k zBxUyF5X=221z$zKB`-+wU5IXPL(nZzQ3piDw9bfiFfkD;ui7t&GA>zTcgY2poVgFf z?RVpf8@CdReHU)~BSovsy&1OB0cqh^gEXiwe_5U$7#YH5dU~MY*iO?Mc@JxW#{l7$ zpsWLevaahhdXL6+n9hU4bj;$huKhNt#FaA+3GRsYM##xgV>E#=s{OtXvAWoA>ni(H zpGyD<*%!nB0$+`5?~B;9<LjTJQ`H9HuKZ2~2e)$3p7Q%4JXQA)l>Y;;3gJ--Wo~41 zlg26!mti~u6azCgHItxBD}UW{oJJCV_g}I1<W)*LVLo6Wc}O{~B<CyVl8RMz5038+ z?IMW_f(@{VoxlFNr<-A5!CIB7v@i@a{oTLrL2e@WlbbBsSgl27(#`(yMdU`?`wd<E z^1}<s^L8+C7tH+j=Eaxa$MHr+B8xJ)xw#9Mx;bp#Z(l#;$G&K<c7Iyyt^Vq2XH2~P zHt)(k4ZV9Ps){bZze@GC$oo@UbXPlNk}Tfp<m$uCKVE!y<7tSMx{z3$`2@8xGVs)F zlGF&P4Uzn>hoXl4<8+(T&oS?T1vh55Wk-Xjt~k)uUDMLVuaPuWQRj~Z-4`E^dEJ#w zeGT_kZ~F&+u)k92_J1L7^Su)d4*eJT1oD!QJe5Vl$PCzVgbAKAVIdY)*<r>@rn{$K zzhT$sZBO(!cN5+Mnql$HPD?4GY_pSE$e0!-_JH%p$Kp`teNlZH7_X`ZS^2Z9?`aON z+Esb?KqHSh;nXojw<w7%Q}vklBngtFMS)f2zU*NGFa?&{>3>RY>k3UmZabRCeA#VB z)`N>R#~viTBt@M`k;y?sho--;n%gB&?sz6KFKIsNTW4n56}`CHB`V&&scEEX56-YN z&}>6Po+G+-bm9d{8Q2(%!!d&IEoxn6iHOy+l#YAk_2Dy%Y9*A4{i2Jjg6d6d{IVc_ z6J-MvdUONFsee~1-l1B--tWtrrv6#>EP`bYV_@K!c1>c8BlI?BsV1^QTQ${I@iBiq zRt1u7vgOU=NJN2nzgd-pm)1+zSMrj@AILZc2&0m1dAGQO5|K3*7@RS}YA*(~G+dM{ z%__Zpb4Menf`xsOR78=N5pL4`Rvux$ZfP^CL0q0E_J15)ojr#bVj93uZ>!?KO!NMm zoysy{BQ*&RV+28?PNG$*C$W5<#$hco>Uc$!8q}1UXBjmw+ZMEJjrxSZ)6y;ZuLb{= zTj!?-xVXl5Y@m5u0W|O4An$;I(K}#t^aqv+I|Mw+KO-cSfJrO;3@L%3#9%0tvT)tH z={b;FC4Y31Ox?rBCl|1_UW!cDl#Pioy%wV+7($#rPoJ<DNjGm{%Y2X9d2Ha~Ec_w^ zj<O!+w2mZ5IR|>!9Z9hJGOsX67}^<_gneU!p*s<YPQyg5b$Z6POMmz?8ZWYKqJeFn z!tipIuHAyj2ZcXetojqD<oNGXM`LUP;r^B~9e)l4nT}`Us{?7o5<!#D)drd(aMYT9 ziC(y1`$IOQ+TNb}>AVIewsbiY28`^%{b8UlKK32I#;@;let%@guP|{Fp2S?hbxuE_ z#wLV1CZnl&o(USV8k@zT==N>NRIoMh9b*t0!xYgK#T+#%jLBe@v5kc>>IvjH%-#jl z7k|*>d{M{4yJAn_)B#=*i&RKr<^9jjNQN*0kADm_@qzvBnBNyP{~Y_8I0fsr7jiMo zeu9hnq8!v?$*!eiEs{)6UF%&@%<PX8#Hqwt++uE&Q7qILIJyVOK1;y^LVIR?BrNN5 zg&L7WdJ_ZnX=I*MD9zpl(-##wU38{UV1LR8Efih8zZqD6=a_&?sBBJU)tB`Lc0*Ps z%(3!Znc4;W%QzTjKf%F#QOAKJMpB&;xF&0C$7)V^gCO3FhKyB%3(Dm3O9>vVL??s7 z>SmvJ#TxF3tx%(KuNSe6NRn~2Q&p{EDDW_uKDpM#FbP1FRmtV+-R0%yX|v;6PJfgL zX_j)o6{*cG0gXD$s|4P<!B>qHnO0L@y;(+&3iRyx{Ne3S-@f_bpFjQb-J(pSNQ{|7 z$4GAfxQfA?+7iJcjXdU@1MtQt4HHFNFyk;*OZW?Qe&3e+o<|>e3BbSf1{xg>P?Dx= z#+kHLkjEVRh)$u_pX3xUc7XCj)_(!Kl*$N!^^#uUb$Ovgpq$d_1i8Z|Ksh4j6!3FC z)PW|RXIz}=S%PaqUU=0%VC9Z)<W<+u*jOa<CQV(?948+47Nc{CLDTb3q%q%^MQzM+ z^vrb=VUz4)Q_#tzWYIPOO+LCLOc41%gLeqvnn${!JOLL~dF9GqP&m=#LVt@*LPinQ zTItFkoUu~=D7dy4Mw}_xL&f7n(y{AgkpTQXH6Bu^R@`#X3JYI{NJ9jr;%$DPgKPuF z)KLAaIMjh!(}B#On7ddBQ5aWBUYL<q3vvF@=>TZJx}$Me5GJ(6ecm4E+I1}87lp>b zLt)NHXB7h_IcX<l-m>o)`G5KPE)!$PzZL|gh{l3=rJw^`JO+HK<bXbh!EJ!SVXVBb zo7Ra!0zkxSV6BwV@?yzb9Zw_=`*g*ib|l1=tZ+e<4D9T{HKZ^wYooL6-x;r>vbg%Z z9?I)jL~4fli@xUocUJz!B1zTdgj+wCv@abJfS<alcLR|$LV>+H6@PU5;9$6tgH1;S z`@tr3vF~Zb`7um!tpj!px$3)Gi_~10?&7g~$GHbrCMUigs$EzwGc)f+E@P<n-7B&5 zMG%ZlyB07omh3eVACFag<OBr^tn}-Y7_rJ_rLbFkAj?NSG>|Ob-eC8WX}`y0h!-Sz zWTHAuD1LAz|3}#{XMau)@av4<r$&q~I-P~LsSsq?x4>XVa)4o$gQV_-T<OM0&}jgS zE)ax^tqS=6?TU-bwY3dgj;Kt0aapGaR&&`BozRIz4h<W)2%<9Ftwd$1z-{zpF6K~e z(6`+g6Rm+S9l6T!xjpGw`tofPvptj@xLsI}!^8EE7l&Z;$$!X^MH8rlOP^}jrgZZm z2?KQzyx=I77Vrd`nli%R7{2E#;W*LTpRcqU3t>pYt`OGJL%BH(*e9@nXt|(yRWry` zapqe}{xBtD9EDf;k+Wjnb~J(w5tT%AQjrC16J^a1Ab1U)$u*C=p0+cB1w1Wd1EZr? zW}S<$?Lpj3+kY6YN>EeShXZBb71f=yDl=MDA}4xPkYf`alub**RLT{((Mr!njTjzp zxF4r5Ai?N<f8trLvxIu2pFs|C%QU{C@!Q-f=r`X_V-xN6`H>ET7=S@k0ysB=A5;_o zVxOHg;lad2@n7SncAQ_}`ZN{pZV8SLMBtFa?63+r&VL?Ik*iH$*tv|m3PC%b{8&w3 z2%k;NV4;z947)tORYs&D^DRL|bll(|Wo&8Dqu=r9tLa0Jc5P?s&VJ%@vgO$>r%#vA z(<3&VRh2;4w0Y_qjfv|61+Z_{aitZG$cbmqoY_3Sg*nM`H85)@vmz}k(h*tYm~*?Y zmSWY|2Y<~VW+g=47c24CXNVss?t@5Y2pI@f7^Q<AU|W}jK(h6|Ivpms#m$}KA}m;) zIbdw({<4ZzQI3T$FU_R&(C6(U%*lk7<_zXU!MP?L&cZB}o*z(}NQXx@iVsdqq?XfZ z3TSW)0bg7KS#S&5O8HV=yC8tSIXwtZz#UD)34b`<27P8Gvu7x5w+*e3AO4r`3z|kR zEuWNFgV#@T;PckYq0CDx)LC{CfSDaBUAGziJEz+YbX~E_dzZ!sgx$s{VYeJravJBJ z#gLANRcqenucB>e2tgZ;JT@)wb0}MY)PUSvy^l22hounHoygIH`Dm6ff@QNx;~-=X zRew2-4n2Cj#vGWgp3zE?DsPcrUWDcp9(p_H#$6iTWuns64YB>4#?P?Hj+Q4~;Ie@( z@V2Qd<};Kj6<RulT%%{5qIx)GS`zJ2XmSw;15=_nFn#m9z=Q`JJ}}|VY;fUGnTxBJ z?*Cp0@!?rC;3pQI2Eea`nBB!)_}K~!6n_vR8~W_U>RH@(w&#*Q&OGL2J6+@q8Nsuz zIKn_bEO;9bkuRD2gPU;VQ$4`E1%Q)+Q%=rYXOlPwNK|`^Y4dtGTY<pT7F{=fF)}?W zPsLcre0`=Ta}Js`V@`Z{2SK2l<l-^P6-7NvZ@M9Idmn8W2_@hPk^Ris7#`B1iGRDK z)s>WJdF<5D*Ek?WuQ>p1?dX9pP&E#F?enU5$=cXMxX63|Zdd$%0)_Je&Nq~mQ!q26 zQN}dq(3bmW!SQYYNEj!+xtkyaN+Rt5h!!M0gMyQHmy?A_L^?J~-d}oHU3LM&T}wpR zJo29Pw@a69+NYP+N=Toh|9$DoJ%780@)k>ZPsLC{XP-T9Mg7(ea?*9^?*y3fH#p07 zPOr)7{U;5HnWPbb8fN_P<JTyPmN-en4>?{A8{sye=w|$I%*xq^WA5n?I%Ejs9N9hn z=1l(BEl*RC>G-@OLbjK%k`lno`7koK#)J?MPT~(iG=IJmYpQ^fwe$+<E`LhB@;*Eb zU}$wO6ucRselmyp?&&x)M7Ma${J6Fr6VF1y*7B-Q^jW!$Lrw(aw-XtQz$9ET;j^x3 zdv@2%e>rEkTcyt{XM9E#X6EBI42^NSyIzPloWh58JzShuCzgd#9EQ8uD{i}M{uZO< z!9xM>KbH0I*7(6jxLFuxaetuVq8Y;MQbO~HgI6$P-?f{cyB5o*>3BBpt?2FR|GfU` z?b}y3>y4ZXI`B%WV8K^!-!7idTajhiyj}r{frEHB5*)rI8miWzWds0BX?KKyMW;^r zpwfK+Oim|*FZuA}EAq0TEQ5<fahIQ}o^D>#Patjg+R9h8GSwm*8-IoG^WEX&?ynC| zA1=S7ZCqMF3V%P9tglh&2_0|Z?{eh@<%b$mQGUBWeEhV$IRNn3#KEUtT)?CPoMLK7 zKYDaxjSA(^;fQwLN6+T|fKO4l`0P-+FCFrh*KuwNl1xpE$;34w!ug;K#4u-D@`n!p z2Wd}>)e2>9WOH<KWs}J&443G10u7ffmjwp{GB`Dtk%|T>f6ZD^Z``;Me$TIP`%<~R zWhIiLq#O=y&UaT_k)lBB;?O3+mDb9;!fB;FNgLZie|%>+BTCvxwo|ld5FksD6geDz zGxN>J(M1UVqKhoNNR$$pPA~Gqi_rD9y9;Xk<qt0+p0|OCo5{?tuV4K3yEwjxLXm}8 zba8z<UFv#!fAJ=`+S_Aaw3i#DRG?m7ZnTbruWeW6)b-bWQB~CZ?lM(DVf#~Cbe9{c zO%?|#xqNs1#~0sTdl_OWpD8TPd_vktC&FBqREtPy68N9EA<Q$=c}j!|7IhQe*v<BS z^Wh!Oo2{o~kw)n-^H*@%C=SXFe@)O|$~1U5mbtB}e+L?>o1VsspHJoc%h&|ADr%g^ z{e43d7p02g7~~%1y2-cq56gnZk%)Ed1^W_Kh0RLd<xuYSe$zO(0qv(jK@ac~1wWrI zqW}erCj!DY7aIvO#8O>sA|;}jmPetLkt;$QVG=zG{q@aN{>}FO?+^c2mOKqblty0i zFL3EBf4FU0+M~F)hhtTUOStYVxJC%^?#)ea%NpBJ(C-WC>|47n`?9HRMI9v_rf83C z(OVqhw{PiunGq=nM8}Irh}PCSgs6(M!0iyH!A)y(T<ItLujpy8xQA7{4i@d4+;Q-L z!_A4_$x*eI7l0Gx1-;hqLEGFub=&}f+&nr8e{@{YbJe)p0#Fq!$)!wSAJ^`RzAx*Y zJ4!e|1g^7mJ*hCU2g>WKAFuxW`t_^pZ<nsdgd$1IFc)rQX+0&Rnk@I~_3NdjR3cK7 z4D$$K@5{ES58fP<i~>SnTiP3UTIg|Dlfw=BDb<M|S1@P<+{Uoo)uP3SM5Z&?NgX)U zf5ECnJ&|BpksB3CVPrJ3j9t~-*e)+ihR_n;v#F(aqkC+Qh)zMU<XIcACa^%7`$O69 z5sos}D_$%UT4mn!)=r&F{1>ie>+K_p%4}+%@1CPdnv%`Jh6qD{XlF=!3l`-f2X38L zw(FcLT2@*l!gPG!vKG7}!-wujPkH$^e~fg&XF7FgAFk;j<Yqn)=Is5N*Udt&q&F{@ z&J#sK$KK01=@*qJg-ZR6yj;|tTgsp93%Y-mL_#GqY~AgPwpfxyq3<_Kvds38MugJu zgF(xou11(EP5uWu$k3p1+f?9tKu>p0gE)t7iQn87sOK6LjbkPFw3?dUVoWp>e;|?~ zG#*OFrYr9keMKaU^5^M#z^84uFBgqaCQ@jV&JD#@_2~duiWBq{$GsieXqnu;sciid zxAVGhD{gPg9Y#&p-nI6)=XTZH746K=@+sP~9_AlUbw0GaqeXY`+Na|Yaqil8O^e8k z!Z5g}y%sb8I2LDTdPNca%ye{|fAEF7(Sz-2LebHfbwGbudDjdER5kU^T{8ALN&@fp zd)xDixC2DsG*ZF!vNu#fKy>Es)}3<cV8gsws5%qOBaLu2I~0yp5cG=HMO=g-Dsgyl zu55sy>-lJHwc_TISg4T%{`j<?V^1y7H>rqkOP{%FldQVxIQ=wFZ4&m>e`{-kr`AS2 z>8X=x(35G1AX)G#Qh`?)BleWPBCt^k$8Xl$O)BAn&s;XVGrDYeSa8|UJGg9<u*=4o zPq=I&l303ue)SBOy|fNcT@T@}{zGRS4c@vW=pl(X2QhS57xtwCXyO6NgLeQQYW3h% ziTNmqj7TRB{FH-x9{8-3f59CtQ;a+xr@Rg0(DIT~Zw-$(>=)b~WYTAjEkCvG$j!iP zCPWk#j>yhzcNR5f$636F7-&;y&hKHKW{Fh$sL6H)-qWdmnG&gZ)y|~+L`no}k)f?E z3f_67#m}@e&p%*M2j*lA%)q+U$aUU`RV<Gr^5KB@M5fhLi+X?ze^`2%#WJ?F2qQmd zhFFx^i_ge&HtJ5ZwEJ9Kl?tiT$K{=K03}S8oIyaNgm8*Y1fDKYH1_>1YByP<>2Oz} z@}8l%?~$S}Vor)Q(`URK7bad#ZDdXOOZmZ;9z4Zd6#_92_#GFAHCLF=guvgN$_mts z=t<<jUX!V4ZIL&-f4clouvlI3-noI+RverR#so8WO`wFL-a1bZ%HU`*n%4B-FP$hK z^fc_ETiZ7+k^l`>|2<D9tB1xpSA?!@(dBLFbcew?Oar?}Ug3hW#6yFn*;Hk>s3CCl zS!`w`7WT6A<6a`EIlBi#5}DF7$L1KX)QL;>@b}QP+{3$ffArK9NAP34yJnqumx*ml zKg-Ey0@#gx9RAnS{y|Wc=7)VzvqZCNz#eqo5P8A-Bh`^cuR{%jnDIE?Hje>5NzW5e zrxyY|hqeSn&E^2w7NDg=Sr4!qp^1eNXESV+C^kf}%4K%-C5A6-(Tj#DCQh_1FVPnr zXq+)`c>}@{e^UpxI?L|ERT5lL#;Gw2u9^d37V?XpSDjpJjOwMUT&S9OdO{gcd!Y12 z4My%VrJBbZCX@uA=O$6z>1H#?vzXL`a|ic34C9<n$#p`rU^(-!l1?$_BKTtFA%U2l z@$)~OGw=^Z+ssukrjdAaLGGv_78Q|1<ZIg5mE^B#e|j9WA{JA<7)!aR85MKw`PctH z%{*H%6Ks%XP%*%*P&K3(EP2o?bM<IaPx|TV$w<22e0J)2%yJkvCjw0Ozd_9JKR;U< zb@Jc3em?6jKEJbaIihEJ0f#E?^WxY)Rf>A-)`1p6LJ^;_!j&=wNSTbG`7t&KOmpNJ z0|ivZe<wKng}@9_8mdNukb8?W-k0<RgYR`Z4_HN4v`C5)u>F$U<Jknxyg+lbjiv~R z)9R+(aFIB2r<v*ez#pFySg$RJz2F0eQv99sIqIWy6I(vb&U^fThh2xl)^J@|{sAe5 z4=^}V)ZGb%a(hv+2zx!dbZ<|Y%tH0d$7LlAe;*MVPDAJ!xAdGh;1%*74wmY`mFiPi znLfqf6EKg{@UD|&>FOiM1mv?a0pM?A`dPAYp7P^%eATz)z9bS1^yn@_FOlc$s5@`! zu5V9y-wk{`5+*q>e>JT1vi5f2oxq?WE^q-_s?*j_n|waF#o{A=i5g6eiA&xb4*mhS ze@EAs{mD%v^MRZy)7qugD&ee}h-en`^(6xlg`PPPRiRoXq8g}rqMk!Ul~Chn&Vh)+ zUOw~6%$##(LpBNn#5r;H?MD*Qi~$j#{xBA2-!j>(3=_|nmzy{WvDRKM9V*o#9_vhx zoeBI$s%IE79z)LbhZ?0}+Kl7mD$M){f7n6SK0HzF$j{?mrmnlPW*9-AvurA#K%RwF z^%?S>{1z^rRoqZv2FYqa!T}ok>=5Bf-8F-_^-25DT7>AeMO7%|=;no3t>o#mWe*7U zQ^!XclYwwr!P^d_{2dm>p`S@E%^WA>vK>-kPy0zf<T5Awz|D0-txJg{(`OY$e<})M zD4-vJ-<Qxz8LqCc?D?0Y#<uK6$jLFpFyvzJuu(vTJ;G7!(zJ$08F#$x@G$`&&LFB6 z;HM`dzm1d@zg&m_ry2m<&8ofWs7LH|X*zUH@}^lS*{RKS&~`Z2K2|1|i3r2w6Cj6) zrIf*|ju-zZ^K^yum2c5Tx(dvve*oN_y2db$+wCnM&$1ql6ntDFQR3e@;2?)-&e}s* zTz*uM9{AJ5t8=JQvkUz=Fc?lLFt@JCoN0xQrqNzcYDqXWFJj=Z-9d;$<HBM5=0q)L zAU(!UnAy=(_ct{-hS@XRENEC8#Hjybz&r=$49*%v9Yj9+JBW>nvKiM1Jf}gIhHZtT zb_k)^<9rOv^-Dl3ClT?%t&mJsa7E2i)tASL=X*sLR5{Cnzi}A>RvpSq!yiEX8=3`= zWs|`w6qg{K2NeT3I5n5S&I2ib8QE^!$no7@A>?7r0X#JO;FSam#KAgn9s<PH+j@~u zWRHdchn!_|Bnv_QJ#}>R634QG1p)z@W_5M3?y4?|n+X2IO&;B(N`<-3ZpzcEh@k!b z4KF_a<&|)FdqCXJFyGz2diy?(Z$uR4Q7&$74|7tt)y>brpO3|PF#T?SuapYZ?{|Bx z<KSIk>ykmAj;3jN`F@wFz!bx!H+Hv|I?3ZeWxHQ)|N82u+mVM@%5P*AF<<63$#f`` zW^PZ#Q0`<F9FYSZsi3$o>edeUAOm~sdXj}6hQ4m^?HhQKQP4T)#R8C*Mc)@YnFddm zpS#22Ak(kgod{qpg25Dj)e^CA__#}W_l@CGP3K?2#NMEiK<K?tp@_XGD9974RtI;W z&onUna40ND5#pJ*@6+T44n?34)CZ7|DpX0rG*lRe`EDO4GWa`kap?x6k?P>1IdwZF zf`=XK6%Er`>K55a!^ErhPX~5`I0}X%Qi(-y?oDYb(ip<cmvhm7+PZ5|t16CxaKng~ z_SXw20A61)paX%jpe!$aZ`u;Ag#=J@xa(dJ1tl8bSoCnVC|S$B!~Lh@IhpgU5*=!g zK4P9fgJW!o7Kf=!J<@B(>?T1W!#oiq>NR57npn|RUt?2)jr@_{y-bwc1N<}#^K{`P z!?74R_^P_%McWO3>?RO}m&WZL`tHQ5u615Sx&{F28WzPJ*`!0ad%%AVak8qz>)i%g z#h_76voqDqFF{J3Nbi>!JZ0W56ZXoFcpN+k{Ai#zT=By^6w;l2XAT{6kYI%24|zs+ zI<e9LP+R^rUrc!cpF^XlG^hs$uiNuwa3uVh?lO$P69+zjKd@SiV=bSvCUY5zRC+u0 zP7-kPEt85+tI?HQqM1oy&-|jYE*gfk-JUJ4G-xbROVbyqF*uS-%r0;eVgmw_LQLiY z_+}Y!O-4pci|IPtl11nooKk!KK2BEI6eh)`M}{~j7kIS%mXeKOU-RSVNa)5eCr5xc z#^DW}XO&fdOu*`LZtAiivyt>NN<*1?=>@;CbJ}Xzx<UtK)7kOiR8;6AQBLo`-`*T3 zf6YKu4V)<h8Hm)!KxWoDI_w?*E{oPJsJ;~Ky{CUPi-Rj@Ir=5>P*ir2>zy<lpIW&W z;^GmV8bhoeD99{>hc4XhQ=KjhL^~(M@<oG4HMZk_)u>;5xLBfBd3x?NXXL6rxYOQf zxE_tBRgBKYCy#EIlQ^qzLpIADf)<&JN9I^SJ)=Vpb>FooT&KYR!X<ec+!Ad-IdtB& zxGn>cejzvj$Q6KEUkn{q2ZW8)6Cb!tIf_*20a%=!2SIgtUVRH<?dkDoDA&jY7#NNy zx{@(}MJ#}9eL6RWL6e<f1K)wbsfGh^5@kWe9SpIvl5?wChvpeL_Z`VuvO8GLGHY!U zi&I*MJl|KoeFNB&%i)voZ`Ku}F$Y&cC{6&<*Y`&<FC`Al>$%qO+BnRTlwbQ(!Epgn z<Z5N2T)8@ht1-3W!{nFn;H*^nEoVPi7yL7SdL*nXW6Qoi4`fYvChxhN@Q@?gPwyKE zVJpaO+U(_&V@8=~s+=(t>xrS58HzDPv0nBLf!e;<X&wPkryzV!oIZu%{26D|sEGs` zi)idY{=Jov<526d2YA@UP$~MhIGIg?8kRct*#Ft?DQ5J*-?AtUKD5j$__k&C%fcFe zY>G1$fMBNJMvR}9)<wzZ0qAlzC^Ut)&11@ZDb0Df(hp_X$l8xDwroG_!7-s!V8CsW z%R)J}SAYBlYAA1%x|jjia48F4@mTXpagn0{ECz>HFphUjwQ@|{yN8_5jWdTq%U}^X z3Y0QX6l?4ImVq_r(LLO3l1MI{5@K?H)1OqBiu^ZrC;g&3<uiARq1*j%*s_O=LM8L> zG;fjz>`c$7<zbe~?=de^qoy#)W?_v`7uH)k$e`Vh;{TscF*B#$D}hy@k5?+lDHjLn z4qHqmaBIu2bG3Y<hQv2rm@0$5+)@{la2LZ3XcmPDq?d&&j&84`rQ0jlVga0gnlh|y zi5i__?YeMdO{VC-s^|PS)HB>CV&yT&F@RTlfvPBirgr_2APYcIcC|ELW<EUP6Q8Z^ z;HbE=@<g?Pq8oq%5IZ_m+0yr}uJojND3xBMO0FgGR7+f!K#4h?`fYBCCd7E`w%`mj z4EKF;I#DS^oQ{8iP;qa3-goDJ#^MUV%FxUL4GMgNO<!9^YU+a-YF7KY@i=kIbOGL; za1ew>2bJ9(%~lYnGMqfL=t;5vAZOV!R|Xz3S=47|Z063+7S!^gSe7@qo*~%T<5+O7 zNe&7KpQAXk#;m7PS|y>(;v1F6;FRix36;m*&(JrfRBNIn#i!AafE&1fDTk8z{rPqb zI_;>>)%@uQGILw@?ou~H-TvY_xHB0Q`?gf9#gb7Jrf~+9QHHUSFNo!__cQbjvDQRg zQh<9d^AFNyV$~;pX!%~nAthq$iZSLo>@V1zaoeX8KT86=)Q8nc@>m{0;Nv0#0Umqf zsv|^1b`0oRPW9ks19%;OpirIY^988K(IFmkx4wRVy<IFyo-M-NjKWtZF1i4)Y?)xk zrvPr52!|Rl*xH^$r5Wg0zgYDagD9Q)!~kShETnuPw!Eg)FlX2fppb%ETRqN8a0BCJ z(mX2z`V^VSMFLw`BauPGezA{bj&*=wuCQ_c)Q@vigo#n%s8zmy2@|+mpGC3YC`d+! zIie78sbECq20&aH$q5LyJpJ}2g(iK8zv(ApRUC*lQZUD|lwl<GvtDj_SDUm>qq=b- zr6#qzVcoLc>Of3!w{<<c<$-EEyRzWZ>UOPsA;HB`9005}8uKV%acG0!I+Q_EI0|kX zV`-8Lu`nF{B=Kv1@%32a;6kbhN1PP5G8SZ1gxSj-jueA`c~T`0!eEQ0Oz?XL&g3YJ zGfhWjsGEupN+njiQ02i5Pllp<>#)E2Z_Pd~cXp@;nt4z&A)s-oha*s<4=8#`4flU_ zLweZiji0Py!_&BKgx!F;A8JaL1f-v6=4fjgchIbdI*)UI11S$I6K+gAKDc>sJ<P_w z6-VWK7;x(R{MX%PrlGPL-RliwyesU{jSvibPuCBAjO@;uzVG_$p8Ge}hEn6KTTdhF z*=&Qy*|VWEvR;pA0Y5&pPLkSjfEO;D0P2!kmm%b@Tkm(74t!vlF9i;H-mHe@Gn+q4 z)hf&Y!cw?@p><<1^~FA|K(d_I(JV}+&jAp14Rn)Rlr<LAF#*XRe-K+)YA+&aCStYJ zBL_20C;jLH;|?C>JnclYv=dEf2TQbJ&?57|Gi4rLx;f{XAX#`xZ=0A5<V1{zv}(MA zEWOnc*_vagVVqvk=CXZB!ztf8`#v7)#;ly|E2iFmL(xd}6<d>iu3J6Ep|<=6KKEG? zMyb4NPW0^NiC1pyEZ740)r^fGW>ytWwc=|^%+fH8<o}|@DE0kTS<tBYIbS1Fqh~~% ztO_TPpWX|au)r=}nP_b2hD*>#r}Ej2=^JaQW6ys^nnm^ejOH^t?nsoI_7&FWv++}p z&yE{^YE%lY%_{v~HHNdVK8ad-7pGL2rL!+7Sr%BspWk}?c7(fAmGBs|&r9eoi1c_g zEw6YqjCeF}M$pAl0R>R)kY+6bmU5XVqz^>lKz5p~Hj4N(oz~LNNMW&_@8e!^*Wkz? z6*Mwf;?G8n;{p3*2Xk`!?gbFY<3Ji7S!=j|qAnYL`%Bx76mYaow?n%5x)<8bYwq$Z zoy?Ni2P0I--Dn@493lpVfz$Ho51i>B`I_FfG=PFtcX<dT!jX1E!$t()VMZE1_qE=X z{CQ%034@;Bd^hA-8EzgR&M@It=0hrQBk`Bnx0QK#d#K)SB|55F<Gtjt`E68)FwIsy zlg<yD!!2IEKuv`@Sxk2n&uSr1T`%Rome>5*$=n<NA>>Mzy~Rqbfm``9FLAzRX8Oh% z`m6eX0e){RMw7uR6ahGwA(sUc12H){m$BgpDt}pBuiLm0eb2A(+sZ)9h+m?#EduOr zn<D$tMSA;`2B@wjUkmlM3`tHli~aGP;S43p*8RwCTJ)g^5K|*^I2@iiJk*t|6#mIo zk*=K9qA>Ytd;cQ!*6waajdy=}A-UfMI&Pw#-`~7=^~TzjOhu6va&@zdUENfx_sI|Y z@_#hc-Fl<7PV~3yjWIU)zU-SVnf|t~4+m<#S?4;b%i-MB{d%KJR@g)r>kl_SzWDRa z7=u;nnZaVu>u9r!XtUf1sSQQ@s;WP}>W8X1;<T4*vrc5IjnqO~>i(uV)D(MF_uH;H z4Xt0PNm4R5J-<Gm4$Zb4>PoQVSr{AgtbbCW+&qx>Jp9f`<X4KM?z-O@iTWCm4BOKy z>Yk}t98y?gVdH(*ecKO9PL;xD=(X%fIGB)ooZ4<N{~K^*bIA*r)cNg>yB2X*sf5yU zA+VW4Wrc!JxfiC$SeumiW0H?+n<eF;smO{xj^%w#FEP7leS2K1Jb_X>)&spMtA7eA zsecJiIrutOOW`SHMDEPEU?{vid0^ELq*eJ<kVl%X;Q;PxjtG6Z;0scgJCWzb3@m=g z`5ynj^)usG<&<BQax&>*l``qpGWpnSYkG%ke~G;f63L#7<uKIur=h2(p{3z1t*1V+ zd0&%#+jfu|UhEOd{f;`^{O}Xc+kg6ZTa4^q_@9qs_!6X^tN%Tu{vW7c3{?3TQZq|P z%`!l0#}EZ$fT$}1M8OzA6rMapVO&eIdx)ahLlo?Dh(ZA{O5xSt|MU}ezD6k_bhR-` zWR^gg^V#+t(eAEn4sgN}C1Vh1jOxTc@_D`O;5g>4C7J$_N)rfvTb}#6XMaz7Hg<K@ zboF*<T6RWr7(X#Z2O>f`p>j^`yJ-YEQ!+XCey!LX=Tm8Ppm4uCA74ig!yY#nTLt~} z`}TaOXejSla9>x{`qT`2>afN7E<4;ct#nfM!D;=OTK6R;_%o$f8W0s`R#e;e2(j8` zJJ7P(H7q<%*?b9@ojvEbpMQi<$f_Qp8c6V19uA*TCNU8?;0!HNWD0;i<Q0&gT163Q zkqJ2cZKjfU=pdxor`8!L#M836p#8~$D0(;BQ5e|n=(q6>eA7b#C+X>#mgS<wL;DjD zf^R~Bz+%dK9~Hd=te+19kKT3d{e_?U=Tmv?IRuL#EO3N&1!y@P3V;98+EYZeND)xu zZe(GPQJ5vbglZ^tB2DwzE{}!c5d>ti^R)sb0#Kw1MXL`JjN|IThFc%@kyOzF?MvrG zp+{C<mZ354BVMzVD%OU4!OZ;tJX&@fW!Nbnl1(qd!l(e15EqLz=mvePq-L{QJfNf$ zE|-r+S_oUr&I)vQY=4K4UjVDQ5K+u{^|rwvSsSj#dW&e|CNRz&>_%4}m}T1TzT^_z z1s>~W(D!vk`G5gU|Lx*NXptj<`Wb1$_fH<e$0bj*9v}X=<OEU)2h#}K5wi30-hgs& zh{ww!SC16=U(dsDsd797c9fu&JUq<!6TeL*4rV&}(KyvMZhs2ZcI+UoZEYT^?K~AJ z+~}TH+h$TS;f%YgZDaKud-LK3&L;pVm3-<NPANS2IN=x94K+ijlZvl9OX|uQVO{oU zxnv^E;<{EOn$S7r3L0G3s0TQjusuGasJ1brwItyhUBqBnl4~1!G>f@b(h6Cqr)t~D zS#5*6S#9fLE`Ro~OM7FCK{d*7plGj-OcFWaNW>|8pZe#fXIM5ve6=*JTdF^>br<(C z<j^Gn$B+0Ky7STBP-7*dlV9qNHBI0AQvYWdYO1>DQI!0O9QFGBuOF8Ds2u1byQZm& z8;8X&E_3RnJ$BI^yGx<yMkU;p{K>%aM!4jki|YrGYk#H_==GCl<u@<M8{RNDoO;Qz zDMT(O^tanXdwW|ifBt~$kQ^syPhm9~gXO_FGSFt(IIypm?=hg>r*q-<+#CQP<bGdr zYM9pQBNd*;h*C8tw)$A!9_k90Z-eBt>BSD10yL|apzsRCI@x^nfQ3eZVG<ANNcUi7 zy7z7a-G76b={|N4(>>Ui>E5I{tiwHr?l+<De9c(aT*tiOb}a0Y9=rPPd?>q^b37^K z5h;yl*bJ@q8m*J}MYJjhSF&PU(Cc59mNFLtgjbt{4`^Q+4BuvrPfE<hivfbr&`;LV zc&YvdW+_t6Y+gKAO1ZGoJhzlwkzbV(OyctjbAJ%^gJHt6NkdwSOFTyd`R46;9EX2g zhs!Q@+R^Xmh5=3&J=9+p$U>x7K~q51KQH0erb4IBy@?n#e(53DE?)08a5r#TvHp{j z{?nxYzQdFL1W3@pvHVdB?@B@0`JmzXw@E^U486nOd_0`c*6_PwkJ-kzyRzSpLxN(& z7k`2Mu^m_h`!I{3nOH>m<AGVkyYwugm`;5oVi6zGB8#N+oqKc}GT~gT8I_wfBYl&M z<srV^(N{{Hl&A2j!dn!5P1If};_tXtr=L)X3Zl(2^`uIakxW!Me}r;6eBjh`ndoB) zTjt}LWa4#9EBw=oFvW#94x*6+)l%$Q=ve9Q{eWhS7_hk%bUl-pza=-UuDyIk9V_Th zM{jo*-%Vl_9>m?1TGW%uGZ!i^eC6Vs=0@fs&FAXn3v^tJglj3M|NBzz_2PZg37M-) zA%}lu`!}&R7|N5uDioKK<pC4~GB7qWlfeflf9+XWkJ~m7e$TJ)Ly^kBS`{xHMG&BE zk{%BYkSx%LBtW#59ILe@S4X$|?>oa8%957bc#EP>MSv_tj)ucIzHcatRRsUUDvMT$ zQemdk)%N%#va{`{6%F2e|3t9d1_U<~$#1WpeD%thm59PD%Ean=H&u0AtlkCR?ekM# zf41w5QYuhiuQyto;M=^bwlwv2UmgxLe6>zhQ0D#6mfd<Ib)1<%N9zyQKRtPQJ=$QT zywF&byk~6^uY?LCFqf^3QymJW$yyc0p<ZuHEQ2@ejR?x3YRhe3)t|t`L<evCye{&# zz$X*D9{SVJ(-`JyFc*2*woQviSo#SZe<_kMR*E*h-d7#Hv2E(EZ-=eZdpI;}nFP1I zd;^|IgQnlpW4|wH(9O1OCYHUAO!Phy`oNM!*=^hE)Hf|X3lI=EjL(O7KyB$xW6f8g zFoMh<_k%Fb_JijFqbUO1b1eeeR_Q?Uwjj|r^q0<7(s~QRCB9g|0Hc88zAWaie~_Ud zjyr<jfgf-8O~?D!`H?5Bi_b4Xvi*6=>#k~QT5on7scaf49cdiHk?m1$*XV!nh$pC0 zg(}ugGPIuBXmFI088|ErQysf_mn|ESw`^XInn^va?3(tN_Z_Y78ZM%CmXt6ti4h(G z;vfQ!hUSniq!dN+Yd%9fJp)*qf5Obn+NaM+GL|z*5o$A@_VxjvY;+V#5SuAPt2}#4 z5Sa@;fBG-){Cc-Y9Iw~AD_(S&g6Y+EoZ%IR<kXfsaAaA82y5CE@kF94k9m!{`)Ui7 ze8<lJeW?Ce8!YaUR>!2i%qc#fm@tuv$0bW$v5K9PeEwAU9hZhuEHd_&e?8c`(IyE7 z$S+&c6$~&5angDU2VDsWR^T|cuDtTqlrRt)eNjoJVUmoJ#~elPXs5dAX&YO{1>4ck zT+T8mKOFIYMwgZrnwI1~dTSttgU810y73u?{!X35myiLe(7}&8(q6G;MMIl*SA+!$ z6dM4|Ie3Eaz#5rF=h{X{f5M68#8&43oE^>OrxRw9%!I|-t}JQ(#c(=6nh`MI#H;Gy zmPX9)=tXo!5|jW@K(4>cEd<3VXi)|S+va!zRX5e4>dEI**eAo=GVg$`LUPZXSwT|9 zVJwm}u^J>+6?}7oGbsS~x?o;4kKolc62fKFs{f}}Kegs4&52bPB@@SjQhy2a+)g8( z>XA>+DCg%>^&p=DA1Zw@pQ?L&D#FC5dwe?O%mroUr}4B^4QKzv=scsusiVEDsX0h| z_D8U%pFWdNq~h}=X2L8L%hUcxMDsY_|0h&qusvTmY(zD*b%ttqR6;eoG)1*ZmSb6` zglb-F+6d_Aw7!o}F(K3s)PI{nzyAVjLI&I62>ycsG-H?c@(7}YoF`X%GR?3iJV*}< z6=Rcob<Zz!bV0In4NU>=7Bo}UHf3>g*EYxLtBB!4J9g17{8nW%v|E-LIBR%|oFooa zUHZTX5Y&q2RZT3DLhaUvJ71kAkhqDssLbOq8><|He_J64%M>}DHh<~c9GHl<OoE$3 zUjNoHYr(4ZcZ$7-y|mTXkI5|f#ySq>t<zBpIW@88>u8Rh36sN#r5bwf_jyk<6v3uq zCt4U1k%R**s62N~eQ&!ZOxK}vcb2?cw4QVP;aEDHcR+JSVLjy+kHcj=db{?yISb=# z><}w2HjC&H8u&OJ=YRLMLQ~7akq_W6B%kA?oP?pR0H7)u$|dB8HWwgy!(BVxnl{{2 zQBh(*x<^CuyU%vewNKSd;={9NPK}<0K~ArW@1rR4sY*kgjt%CAiyM0I8IWH(&pP&s zbqHrCuto~VHtp7m@=zTs{1)TGVV{?NM)Wf(IOQ#HK7GY8j(;4D4uD#qv1zOP#wMtl zGyr&iGN}tUiFd<|yE*g~UQ&nNNoJ@9r}oE^*0+9z+#`($K6L|C3biLP)zfYS9|<J1 zYkXSFud<-IruJ4toP|mx|D;m^{7LO?0JRe{-|_Z&Yf;5K&>kglqWD78OfxyHMpXa% z(DY?-g=kKVnSW=CI0=;=_xRhq&@uFC$#N6ci#O~z)WXc;(3ahBz`~6qDqQ$$&BCF8 z<)h_i%ANzu`2(P$FiO<pKfPeK#0h6=%#?@&27Vk?HQ6(+`N4(O2-sm@FP%8BdHN@I z(mD3f5OO08hTL<Gjes^st9d<sCbs%~8tZm#fUD2ZjejNHUufR3nKs09nr|66c<4~L zW)Fn}tjrCxiN8WaVoL%wH1u~;{P;L6NHhW}e8a#*HqTPwcy6SJn+~deEctVjt!?c? z;rH&F@T};kgt<lI_h8U={G{ALk6YH;(uc9IK23`ELg~7^b-m5KRL`bu?bu*{s+$&F zPWSgz0)MV9;CDQu_gjM0q119}!{@&ykh&vYPREZe{k@Bvn)DWQdDCN^P497A)U(G# zwT?q&EosF!{2xHFC^Xt!V)Y0PUtax<7lfQ1@QaI;jXCnsA7E%4N2>jJ$!8i)Rfx5m zliiQY%9(fQSX(FhXkx#`(3Go8|Cv<+BtQ0K&wrkIza!aepq!pt#;$*qT2HDR8dd6m z(aQXW2D6grmUZ1jx5#|QWzE+FwB7cb#HQenIGV%Lh?K&?=m?d9?gw_XxDoh3Tmy)k z%h*OvOVC1U;x4;r$ANEl{QPh?2#a`!a1hUTC_A(bG|SLE81q1eCR$+EtkNpLcv9~^ zmmF05kt27%GW0{6^DkMuyxT+CgzmSizW|+H`Ad_*Dii@Zmm!@86qkw|0@DH3w_Y6r zbq54u?w2H&aSH+!mty|`69Y0hGM8aH1}T>-B?1uwL{XPMB?2~o=6PBfx7wcGC>rga zR^0gI&u_HQZGdnSQNDk8^M{{{Vx?7DsY<UN_A#r6-Re{F)1kf$zFTkdJWujJt~bUM z$@{u*wmkIl;EzXc{=9a1;_Kns`F_30jID~qWb5A^{`Tg>!ze?MWj`n^Qr<~h+LbnG zZfqvfT4z$78<sYIPs{bDuvzk9z0t{6zr7C4`3b};i{z*FbgIw09tC1Pd8**p$OqJt z+0+$wWRq%U^szZzj();{J0HGY>T}<;XXZE6BJk5?YJ*t+Joq!L0(Lcibkd`E$a$?3 z&okSRIdqzyzn+fZcW<#<CBs38d(k?ux`3)(;=6s@on+O2NVac}$94_V&#VRF2x6~; z1kh;Dy>PGlzIi%t@H}*YJk^Ef1Drs9U^5VDZW0z0?!5E6rt{mO5jHTi@7fc$j($Hd z{m=?|^K>9aLff2Wo+QS_Gl^lS?RLIPNva~PbODlCxH!2govt_5s^kGV7+odL>#T$| za5A{+jmZ>$Fs}!m8v@a#?s_z8Y#(Z&JJsF4acjTh2^xp*mvvDjb=TC7M;~TTQ=?LN z`LC)_!=dfN7N8bT4xS=xjYrT$YF#na?(OQ~xaa!hftCJ_qIsn5Jk#_wit#0g&T8y< z?pTk`d+Ay-m8}Qq&rht;%_tA*v}Ad*Sf@5GgHBO@q1a`GVvA(3xl7Kij7*h9G;?Jk zJ<5lZ(_`UG-LX$#n~ZgbheBFZaPR#bP_)*mT@|)WtEzehQkZrV5idaClp$&4BZ~-E zSpW*A1vX6bNx%;WM>yzz1KT#vfQ>zQp3BT!=3D`)sUMX(P`@JgoGD3;rUcjNRFV93 z&*Id7bQ9nB4A0o+tHo~TPjw^btoLL)I6Os-7MpU)VAmU6WoeE=#+Lo7(x&SX1j=&U zihBfcC0InwPIu;ELJIgkGOWqqK^o{B+-mo;shbl)XKcu{OT?;lg6Bir<FMdj1<=Ya z+H(O3>+b0~+VXdNC>J04Wn$o&6~DzsjNE8{<1{HmJKt|n+73k(T?7*Dw&L_<BJ5sp zkGz0rR+JETLCV(*O=veG@sgQM7*5>-<;YXZjZg8}(JL}gD|<y|O_IC2)BqxTnf;ik zf%dziP8ml2K-XrpOP$W9@x;W~mqDB#{MUh7;tyFV@e0TOCDGqb07Mn3b0r8$EdR8B zlpz!(m{9zlnW5t$cVBPuUJu-xA}R?oK~x^Qg2ju4cTWiPU>CidpgHbjr4J~Dx8W?t zLGUO%7HOn{0Gm})gO8UKMkQpH!PiVxCH?iWADRI&Ey^Z{OryZV0a#<6h*Wbnw7gI% z`46nRwu9#$;Exz~VUzmEYsLP-PZnK&Ql`g*fz=a2A*UWuiovW|pJE9%wFM$ql`4}n zQv}Q0S_o|Tjo}3c8HOyzul{=Ev?!Pb4##`&5)dk6TzGZZ9s?rH161bVE4*G9*<^d| zy78WIX3YF-!sB0>u9c*11Lj^CBifl}ZeZ4B4lw|+Jy((m<vQ8cl(4`MA}W4=`|B20 z9C*Iw!SVRmL8NKVK5(M!ifG`1drF6Lw1nfgDdV}>(q=<FFf5Px!4l|_;?*<@LQh7$ ztLlz3k`m`A>%cJvcXbcFIQGa+LsoXTS&HJC<nN%j?z!o`Z2Uryh_4@=&{cx^*w|4* zgUz9p??L9G8;!ghCQyY_N_iN6aBsXF+JGA_*$I2f&1hz{u?a7*v1!uJhluRX<fGj| zb3sZ}57<9BjfpZ0?6fk-Hf{3zgpdXYxUEa*k<*T((&mpK!`06y`P2D&N0#@>t&Hy& z#suGWt)$74B!g1IgGO@j2tp<ayZ_pd*g)_Mm?vu_nFrVWukQqc&?K*Ak~EC28s!X( zIZiOg#hBwp%yARUnP<>A&sGkNsg(=;<8|QKT^n|jff#~ZfFL)4pnH@N-S)RK0MeFd z9uy8@s6#6;CV6-FqG9z!m$0p`y_a{6Xx&V;9$u8h{wr+N4FBI9*q2T#0v><8T$SRs zd}5&FCm946I)$ekR4GaVaT=4rt`S_44JFvgBRPHfMq;QknS>OhBCEm<884+gj^76` z#?X!p85oz2$LRwrzF0`9y)dj7HVGNRVrgMu?HFCiO;fT!w~5IGT^F|rNUG{acDo7a zG<}$rn#zy!IoAEK!10#YaFKs!hL2P4LLF*BKn7PbpGxrqW9*S{SFsgUYO)jhwNWNI z$Ba1O4YFoihgL0&!ZA5!ET|hjA$_R?mZvT&ZY8jcOJI|-*GFG>+cm`Z1NWnPSTOC^ z>tXNYWeFhz?WK$m700+D0}U~Kfe<3>FGsvnoNd_nTJDYSI7~1hG&g^HUJ$4SHD&M| z?GB(IMLv>blHZmB|3rLVQfPa@L)QX+$EFt?A}gaZP4r-VJA<@^a#y`r;~8JcuNK14 z0yD@CIlS9qdLSHN%tD&Te|sK5^TcltK5_6pJ=#L5fWr*)*t`X7<T=Q?ql8b&>TsYT z)Xy@Js|cQfb70B6Bz%8MWw9Em+-=V)*<a7&L(_qEaFUTxWfZf}OyVTHZZdWu9-psm zdLCsPqS{$I7XLC^$wS;l7#!vtE}FeujnQdQxm5-?VpaCa+ci*cBJzdT>zwKQsqMf? zbCy;rQ4|dFtV%279_x~7^P&NIi&I6A-s0HO)%-*m7L&kV@oRs8%lA(ds5cS$!inZg zNwg5dluMParbeAbMvZkSjzrL48^#uAx%Akj3Cw1&ajJ*$9aFHU!zWllRK23{K2-9c zNeG8415c`^Vxtk>Tp^2=v)f~<-Ny`HGVRA}a~v9eRv3vIxd|CdBsvwz`v4a3$R81; z9=Ii}rlbpI{R4lsD$;Vu)UhF2Hq4kte1i_moti&EchI~!84<TrLJ<{pUrGf4hY5ws zfI_@bIFBfV3*JNLMUBpGO_y9n;rqwl(MK;&T}pVoE8Rd0)Xs#$%<um3?%^*>0WC+e zEReB*08>1uwh1S;ZTF2wBbb%{14?>%ASq^q2+&u6sv&>;!%$M;G_(WGVVmw<F4CsC zwUd+t?~4+VoRvj6fn?H>BsluRL#AZIT;8HM)Pb5#xS>E^CzJ=F+g~ZqhoMV79B{*1 zx*_Qa<^jUEQgV`h+-2!`e>2twvkBu85&`0MgK>G`o=TlM01MIoOShB(Z~_vlB@@A2 zLdg_5q2_-A4Tk)Sr0M2GQz>*>m7@(D#5xyc7%P1Xp+o7^T3Di8YGLUsp+l%Q5&2T+ zm@%D(4m^{=KRB`R={@BKXn)<=vtFWTl2s~IcIIsF1->YdR5k<>2r=fasH-cmQ&1BY zMGIwK`-4WPHxc>LUo<nO@n0Q9#ZOF^2V-?HsPlgeS*r_~7!U-PZP-+Exv9HLFI}2D z_c}ggV4ovdBRucQPACc0$!Nzti!%PDl3_izbQ2f9m3m5knP#Pu3J(lWh>*E6&q=9T zi`&x>mp&ma<Isb%LZ*VIr2MR84*;lhf8FALhoDr-ukst~kfPCYG$;BKkGc58iXI_m zhV@Gr{_H&B1id1$8yG?}%G(OAyzUk+#_ANCYNDpkpqbC4l+Op~j#x4^ro4n~WW@ZG z|F9*+6gFg*Bnkd)6bZxm>)T-Q{{xxouT7U>90Dl<HaC}HI|eC#%^F>g+qm&PzhWN( zL<ZKZNKvG8Z<lMXxS|h-W{W=L@}RY~wi;V9B>9s2_cy~CQXiJr+if0-0Be#O4u|tS z!^pcB{>i&MzOzXpa-H36j&EYO+V1XX@Xx=!kqoy6!1W07{llBT{G6tDG8TE9%e#lC zF{+2{-KXfMeR1l4%XYO+k|augSgo~AqxVHuZD{G^zC0Xg`12}DqO$1EZP~5XN}D{5 zbh7&V@b@<#9s&)iQZFPHA#YGCr4;7QWLn5X6Twvv)TAb=I{vL!DvN%{Kh2kwvQfDW zAKY(2KV5k$+M+LMR(>lt=e}wfrX(a)+tf!I^C@4eeov!+e$QK*w%S#7aiH0zIUb9e zj|>9@2EM>O*D?_@CDMnT%H$C+SVp{CM(>cNHjavRclIRsCH}440_>c?+`}5k#T|_w z9i0gNbgnme!*{%^{D!Q<FI^8p<kd&q9+hwn5bBs@Ni@^7W69fb)FI)BV&%q3tfJ<L zKK1*;1Dzj#J5(J38kOkimkR(-9?dF7R5$#2TmBYHU6<Q?oLf(aiaJ(EfH}2QU=+>^ zMpm|M(=J^G?${MOL<A&}ut2Zd5>&eGXyS0dFJBknJhyPw-4lMLvces(mZ>mV>VB<c zo6>M;V`93r@v37`2a9%t6z^&7Zf#QHD6-S(#0IE;d^#WS;#Pyw5KJ{kHfSD9>f%@u z9H|xYrKoB?p{aQnp)=93X+2Sg0(jc-ab9!7y+-Wwtj{Fd5BdR|5lt{aGLWJy2H`Zj zwm8zdvqktV=x1b$0T-zPY(&MjXp1Yn2VM*Cy6XU2)67Ocg8IX^@fSiAFW8)8F-oyy zarO;=iI8Z91!f(Lc9nA@Wqm)>kO143N8o8y?-+n7K|%(bbvqh9&F>tf<@S{XHls>k zI1c9g%qzGHolhq?`%saIz)JNLR2bm?KyUqwlBQ!N%@v&NSOuf8JaRD9qB`&w?<|UQ zSNdH%Kx;klm=H-eW?ZPpn2Sdb_|&w=q6hMSb?lwzRh;Z>a`F+^RFs|lwra~w-?WYi z$R49OaM%zyimp48w!)(0KP>VMedK^+ASC6JkYtoFDgg;iYyu;UGd)z>>eTbrNi<81 zh_&`RC&9uIF~T*nFC@A5B-4CbcAK_BT79^)$m3Zgrr?=sD|D`I#A1S7kASa6V-Mqh zF7dJSP8`z*k&z~T8f6V1fzngoeZHsZiT!U9X)`BS*;M2Z=U+y$hrU7d9H}GQ+eH?O zSmsm1FeAgzicMIn1WgzP3}y@>-qOdfXlf`HoH%{Q0c+9jT+_~?`=j2VSKGr*$T6C8 zckrsIwed%2uK@#Q7xQuYgpM0=1=!$!Q5=!YRg(a?)1mB3?;N(?Asr4NJoZ<WA2_GV zu`l7+CrFvCxdXg0Fc$f`R!(CStQh88BCJTjM}x8b6x^LnqYvMlgA7gu!pw(ymB=CC zg7Koopc}Np_}uSd@BOCNFCFcRA#yL6YbHVZxwpBoYs1U>P}9^iH@-xSjIGFjrANj3 z{B>WkWZiVr)Lqr}lXL-92+(sNcmlpRc*a)<BR|kNMvu>NYMIA+s+Qmk?IKm+j$nnU zYEGnjoY#^E^<Jdjmu=Pi{P>Zg1i3#?;M5Bheef+I$9DKP1u~HxtM^LB#yO;Ig{OMA zG@N1}dXis;t-J+;7)CI5gw3^o43zF|Cil*S&9bpzm$;*hNOj=O<GDKYRlUgc6od=- zUcqzn-!hIi=e8ZH2Uu`6+_YaPVSt4pF1e}W9Q;xm00ZXM;&n42Gv&|RY!~U0LJxG^ zFX1sln}FqX?)Hm_R0c+8#;PvUh;r%+!g7(?U=^q4w2V-}FuO$PZjG^jeWaTMAKW;w z*DEG6jxqpHH!GCXQ-!&rt;?oHl6<w)!N^0Ff=;z9i^07d>G&-J9*gb^=YQQK{Y##e zJIGXpQ_l{`0&$5F$_BwUT+okA9(|7sKgUUG%Fgs%=i_rrUa?=~mjZ)IQuP{!O|1iS z<hD3Xv-9T|k!K<vyf5y5T^1-ztTs$w{@)Pj^-DP}KvmF}ZAWu1TQQWo)LnVmDMzw( zx(egpSLij{ic?${`nzg3ZYsc<lMej4=EA~NRhEy<4^LV$DY$5CCK6XuiNo}X#Lanw zvl*}-k!UrklCG%$E77D1nuN{cBwjveT(1#@wt46ibTkcp0iK?JTjyMHOsNY6GN_^< z&btZ{K0;OL(kB2K@yB6z{J|0BRWJy=z-?G!jo3jLh7FhX=29o=`|_qa`2Y&Bx2#ds zToWLnaBb982k3x)i_^FS#dAGBqXt(C-?rsbaXzf1le}R?1sLvvnZzfZ>qA8i1vM>A z0l5rYFPZa<n@a(INL^_B-1}IO#rA(=n$us;v_wDWaT1Z_dQiz`xvHCbUSw}qmKUW> znhObuh{_-UD|xH5Vd(V;e5tgVA-$}~v`B>Fnk*#GAKgvd@I56&^WscLR?csr;V|<; z`U&<1^;3kNd2&(kiHTnur@NsPEe=)Dl^k+Lj>P5hSA4O5gfeHO1rEhkEl6%@L1sx{ z7JYYeOA8o!Jpy0Sf*I0FEil5c4*W<QxGctH9A5}LiBUc;B9&lo5IRM8L*R*gt-yT@ zZm?+!RX=tj$qSYpi_XYNi5QDmhd^2_XV$ThA^E^wsfi(Ptv84B*2SOHRq+kB#qdZh z{BY^9aK+(&mtEUnqYw*X{QRHhu_FMdD6a0jP!^4vCoNdHhRP(pB>{$BkHD8?Fhe?3 z7NiXvhR{UZr+;86`}v;phByaN*lDgk)}V|2lZKKC<f^n38I<rhI#3L~9)U0Qpk_#e z8r{!YwWJ1za~VqU1?vV~OyXd*Z{J=ms`RYv4{elxkQ7bM(^t*|QyqDUx4-`S%U_p{ zTq{uN7_~nW;2;V5-+NcpTYAy5P&`-I*rD;zUWV@tM|X>beKFnSOJD+IDDNX-Y4j{( zxmRipwMTI`wH#@}JxbSp&bUcQd#Jev8m6Bq&B9}yqLjt`7W6Yb5a4XowQ<v>$2$B# zSvrn?hBge&&>HDGBb@YL@P$gr=wI~#{R3@427ax&r39~T_{xjQ=6g{sf0z_tAsruY z<yW!=Czt{MUX>vdZY@V?y;js3veX*VzPaw6eKbUZgL~rAGQ1u*AYZ{^Pa8K-BFP9z z-*C%zTZMHvm3vT|p%DbDk0Z3RMi6|RwSH!QCAQb@@0&;u=%<ybp7m`2V(8oaUo;WE zFA<^PCnxo*Ytf;UsoRZX>>mu}7;ZQg?dZ{6QkxnF<u_8drp5Oi*GxP#j-Bw)zp5`B z=yxLj`wOgBp2t`}LRQmtKD)nOyI#C5dO<8^ZV47B8hv>tVteap!b7h|;0v*Aj&$jN zMa5z;cDdV!OSiZ1sG={@h#XQE`%=n1^bN}ANN*%_xfCjquQCws5rNa#6zAREOKRp& z*y9cVJ3veJ!Oq)IuZG;r7~bh$8XUKl6MqeG?60+)o#1^cL@D2IAc?R$WoLEK%Jv<v zB&v3G)6QzpsiuzJIKq3e-^DWi6MV!114x%)90C=W>?8sc12Zx)mti{wDSwq(S&!tl z5q{raF%Lnk0k&n4qOJgWumdMZUL0g6$b)Sp8Z~EHwp!}w*qP0*PhF&>9(KmT0^2-F z#bUAe)xlAB3H(!cRdQFPX<V7|t~q~5XmotO<Hq0q^g#*T0SFHp%5NV&eEr8PyHiPA zC6&5+c-pdhINtpb{ozz!W`8^0AJR09(%;=5jLD*J>#1#c=+nt|9XJ1YU#5|*=Vi3h z{Xv_&$|7U#e|q@KhwmP|44KxyQdp#XM_QE_m^F8KX=0Tc7Wo?xGRvZ7IG^kO$ep&o z*G2UCUYF7E3;u7{3HqH+?S!p7n(U<>>)G<S?UDL(I}ZJs+cT3jb${OvGZWQ6CMvbf z>{wahgu3}^5=O7KS>|@=Q6YB+#eyGH8mo-u4lETDv8T=AqR?)WFazqScIr@ZsY=iu zkxa`YNg$Lv#TgYBdFm)}>v)1S{ut2Q1y}#VgToV#&i5+9ond=gPyI3uaM)$k*lA*M z4_O*#r4o6S*pWYtM1PTFb321NfalPEgi%$x1DlxUdBnNpLd>mv_|ncNY$Xw#k?81z z)}|sm5t|~CRg$Qt@h?5_Y4G$<px9xVcoG&n1WrPv6*<yeN3aeyRM>=&0!;`BYVLZq zQ!i*gI5D5<Ss1&O_~*D>y0#$$#92~5(Oco~n8TiNgKro3NPink_FJ;AjlJNCMdsGV z)>vOAZZ^oQUO-#VC)}w}JUUY-#ImvBWPm2?r^q9?_11A6uINAC<1OhHJG~Jgz_RU6 zc5G+TFLa;A;k?_C810PAGUH5vC5C=2zuN<26Rqj~sVKfbWJwu)yR_X*r<WPBKGFaZ z(BWrZPGm~k6n`Ws-<SbzZxu(rp`*hYnP|nBySBGiT<dNc!l#C)LFR8#1}j7N6o1IR z@xYwH8DqjIawrOeP~Jb|3E;Qq`e?a@hef{xTfhMf7<dx%)4doOb5C!;AxsDy2DY$* zBf`bJgOINTcvf)aZrH8^XeeuZk~>H2K=w<GNB`2(*?+(Q86^C|I>;JT$^+g>&}XYY z8J&in7;0yc!i=||(W-N@Y942x<eSQnn{OdEEmWMB9&-;igv+q0q;Mp|W%U<;esNwE zd)3m-IB16s*jRCq`=k~y0Ham(j}uJMD0wc;*hNz0Y9~cr#EGh$9G78gUqjNSNnB>0 z?98|9Xnz5SH2?xc2`65q>1;h>Opv1ikWB>?q>?Ny)BGI;nK)JEN<(fdyyK<8{hwS< zEJJ)#nxt`3UOCf0KQVEQKO3VUwi6FN4P7@N;}<k7d*o4vj+?Ll72KOKaaMR${Wi2U z5J>y8|4Mig8gcvQ;nB&*a5oMe53r2>SOLVExql^ya%bV~<7l7ir4zDghHciP+i8DU zX7P!67VB&Ww@(8Gfu%$2auZ--hn!fMue0_H-bP#pbO8iR7e4m9ip#`DEngq)=db%E z9JXXC&P?V=!K`y|<=?}a<4Zf?Uel^vMetBvY@zy%<b1a$-nrH)PP24>&*a9ZZWjb# zM}IptV|$s0aoPq-8;EP_4xs*-M>io8c?y`P3sXeL7TGdXnbqF{;b@QT2+)Z@6tg}G z&>dJXC<OHZP^&@CLe40Si`al~gTwreArw){K`263NU4a|MV!0vnNcEDIr%O4fe7z; ztk2w`bH?AG8^nouPx#!@0Wi-D4Vrn6BY$D^7w(eo;CGrwj0yW^`I>{04u(2H?jv(q zA$Ax4rW(?K)s#ZcDr8huthCw~l}W4U;pBHZIc+e2lxeJWwYwW#JI(uGxv$Umu=5WP zDc9|YK`PE)*-DDn>m0lth1tRa^8Nj1;u+dW5$hsdcfuA8hnoP?9pW)I8;RdZOMgcS z4bW08L&sQmJn({DJ}n~A95bXCMfB}u={Q?*+rh?-C<Fq9?|Y`$UQW6O9GzhhpOq^k zpTUF!^$Fq*iD)Pu#0H~u|4zWdX#z$rBjl_uERx6yGr+T@ycfHKea1jEUvnnGJv<CY zu=Gb1y@0f1nTIp%1#kbCK-_w+$A4c46?De81%Gjc!0Ce@E{!)$`+6D1pb4i1u=m~t zPY0Q@A8b3s_pFdit)NVeF4Giq;`N;mGLdXe!$?3E`Cx~=2sEy>TF~(#uZM8(a{%Xl z9ogR8ObJ=62YE^7%CKM65HDr^!XItZaYzl8a|nhkSr)5OZ@etB-e#U)>3`nQL$``9 z06sP0AH*$S5{}Br^|bVjgo@aus{y}{9P115@o10xdHkNuT2-)zEA1R@XZb{Q=E6KJ zz84$e`-S3CEVCuupb&NknXmb0W9itXAnJM{Orjvj*c`SHPyFiwKSXYJWf*ms!ol>_ z1?VkkHZ?oRuqzsa!=N<LWPdJ|GAwlpxe4Q?$wC&0&<cx=_R`f2`(2Z*Uku$5Ra8`D zqd_K|oSSV18c1lohc*eiv$eA(YuH<Z4C?d~IEjgSjQ*9AE!iYP&}sX2ZV`KlXDGdg z86CZxhRHIYU3v{4o$HNM&JY7T@dxJu5M6PSsVh-64v=uTXrjRjPk$4S`kf;!xi%gj zEpT;tx8wOJt{&Sr(j$!#viDs}kHv%#I4H;w${jc$(=a%s+rUx)hq0j#7R9RAWM&(I zSH@!lDL_S+Zjnea1@b)IS@voT808(0txq8h9AUk>{9yKD;ylTJ1=jC(k1WHxH?cPQ z|Aj`i**=oG?Ym$ifq!74%=W>=gR9{LE~S)kD0wKdjfSw~)1EJ#RFBr%0uzqfK`ZxG zt1hw?UWx1S?ACKdqZ#rKA{oYdY{d}=Lx?rt#!%PdRd|)Cz2ImTCb;lOBr9NIx1Of< z+3%LayFw!TTylg*U&F*PPPw-waoB$hxOAs0@O)|dPFdVhAAdIFfztRjQ?8R(r%w<h z#ascU{oxapb~!yMqQ6qOC%c?}`Y0z~%CZ}Kztqoo0$N8}U2jV1Jl0^Vy3DBT@xM3a zs1F<RP`&?(sgKx=LMxm^n$4jwq{A5Gx?mGBGzr~Wnu6ZYcW4IMRd}?%VbDM^S*cM` z&zq3;bzNwQNq_q=JO(&<TX#T+z6FVp7-#-M9)7t|FjDz-#faSqIRg}R=7ArREJ3-i z4oas6t~BTr^6*NjcMi%?A2#HHgSuvVWqlxxiNTIo!XF--AN=HGmD21_;_JlFfHp6# z<u_V`X7gVuzoULf{%fWrKPXU%Kr<)F7y;0=0m)WiV1M_J%0jzZ=*}?73Ues}Lj&U$ zLJ0}Pa7;`wzY(kGT(FfRI_!(tp`c)|R1(7BpBKteDYoOlfw<Q)4af&;`(an3y9(Vl z<<gYWpW6>qQbx#><eJ!eTQrz>q83v73i|6Q_Q}+CC+=AdhdFE<+xoGSk+A<ORGcQ> zo&V;a!GG(cu3SEeDN^yx$)tRoC94QeOD8g3>iI-@AYbyTh>Jw;5B+UjXsbovxPWoE zA`sWBQ+GbAALi*+>g4<c5=gfTDVE==7n!wQlx^xoudVp&PXLx2=e$!adT@0`OW#t( zmA|DnB^x;fi$diy&0L4-teZ-<4{EtP+Ibm!_kZcO?s}`<4gpYJ`Llhg+xgNSgK?jZ zE1z#pUncMqA|PFE+K9W=kdf!t5rqBs(n>C~IthcBA(pZT^Uz0?6=d42%(0d@U<XP; z5l$Nm$TR8vg02VyO&KNpBPm50=`8yw=6M>H=M!}_haNBu0c2OV`~tG_?I<>X@gD}$ z0)PJ$S8ijjik?RJt(7Nz{x)&H=0Iogm)!DqN@q+k$pcu^Qf;I(^b%Kiy%amWK#wzD z<gt<IQJ(Ec7@U*1k@9#6`WCL6-$XF{vML06tDN88XsBz?^7IJ9vkdZI2jIwvZ)jL} zhHLou{zze9g*BCNuIX9=P1BCea>n9%BY&^b?($c;-w1s4(sC=0V8_9O*yxKd`YzK; zQx6nve{^rg__lW8({3oSYk2UfZo9>00RF9Jx{cuU_Z;M0j4P_6;jXD_6<yFIM$!31 zn<X3M*-ZvqLb}?zcNsEI#vAy27G4r!qlxp+e=HWPaLQg?8*ZO!`EpvC#)9*5p?_B3 zZ!5k*$CiLM><_|LCyp(&JX=+HRZcu5YNH@Cab;or#M(2Y2^=zFg1@j+w&Q`_+`P2z z5k|g{+MztDV(pOD6NU?;KN1F?g7KAuE|fT^B7uli1{f*2?r^01g>O9&&|B4dg%f$1 zS6h35QUCBs<@Sbhd>ogH#edoWeImBLv9<GtCAl{z1Ftpl$hsI_M!(+b!3Xv+7|s0` zpZJ8RmvIXM6qiXb0u%%@G&DJvVK4$Jf7_1Zw)K6#!Vd+aLDz~%k-GGy=q{3UgLJda zc+rP#ifU}lSY2B(bjf7<^*uMzl15(pu^3=Xkw@gY-zc?;;7_gcXqCosn44_1J-&)) zwtZUh;Flj>DS=x9;Ccl4X7lRX@2y>_D9oc=tu~M2tv0*Wr{L|rIQ3<Fw~pgDe~ABd zw>HKGZ;Gzk^3?slJRErV{aqFZWzi39+1;(RNpc$)d-v<+$5-ENJPuat8<9oG>)0ll z2~}(u+sC3h!0~{kii2YVSY*Mj?83Ws0=WHSU)H=-@Xxk69*cU%4?yLys*4_x$LD4W z`&jhFfrnl7RJ-x>zUkz=`VLMTe~$S7flfxY;X>6R69D&ojC-8x&}tx+Fn=!~6Y{c9 zWgg-+YzABg-tQ51wKh={rV;Q+#i6ncG<1kQN~7PGI55F)cQy%%!%*_P(wQ8UOpZ!I zlUaAxAD0leVXD)w;;Uk}T+Fd3f3JF;>UvNS5DC$cN1;wKAR!4emGisre;xraH^}%H zRLBbn=c<l>>!#<`$7ZPSRIo$ts7THOfbE@5gMD?7_f9P;LkiPt6_lOqvTZ?KO9AN{ z-m(0>+z!2LLrBAKTY_5G9YYj6$As{>d1QK&0c|xR62<f=orY*PhAE4gvUsF^_&}7w z8WJQ^4?{m)LrRHoVkn|ne>@z@*ArI9f-6IL9Q`h+0SR;8Ba6(>M$Atb#bk^k%%OF4 zJQM}r76WQOLN@Njnt#i-ZCYO14Q*9F$@K51qVB3jpd3hB?y9!j_OO8Dq)Nz1yyhgH zn2U^d1U`{iTjoH&CyZeFzh&Dj5H4D`!SjrE=i$gP566}K0=+vPe?6d~f8lY@FN1ZW zexZfZ)3&L171BiB0^o$5ve!Q&8+Bzl_mD=bP{+y2<|foSx#A@q^m+uo;3?;u63zF_ zamFSN!5@X1A3nWp>NRsZj^%(ct4CznJOJRXZ-;H){fc&&tKd{TmAt0(oIV}vP~~Q2 zGZjXuy+WUZUXQ>Rf9RWUN>~De6=T6(K8b>^ISOK^u=vZegQY{&^*pup^zidVK>^RS zx{(kEeT9(urZYhSHYg~=D1Z71a7Lz!q~wHAKwv?T*++By(Gh@Mt!$EpxxR+KgI<ro z7x15N>IESlAN0`Zsp<U%GYDfM7Ksrrj)OOBN-%mD!1q;$f4)K|j1$hw;kb}rF<lsW z(;e-K_RpgVXJQil7l9wP+mbAswsQmislgWL<%^!jyV)cQ*tO*@7a@0+g5L2eABpS7 zLL3NAi$CQR_Axx|Kyv30v#D3X331T5Xt2PD21DqvHew#rmV<B+iHRn<;sZyTu^R`x z#rwjHrxC{Ff9&B`GZ2MNc&q@iZ9%b<p0-VkPMsfz4pb4jk>$ZtS(j~bIDFyvs~V%V zBr4TT&Nv~B9Yau@fXQRkbr?&=$cqe$_Gvhll!W!&6+dqyVzvs1I(%}};TWm2k#HO* z4n^1Vl#hovU3EN3f&}a#GpG)rrWllY1qdTZ*(ndYf0G2x3WbMDr=l&6C50;l_`{#? z)_EFTaygLj8gL9rW^c&!N07_8vjdp=7|QfRgP{Ne=%@P=rA~q~PJKXv9p2>g@g3)C zOrYZzJ|Du41wFeBc?W%kg88OXSM%-nDP*{D7y&p!uXQB5YWNjxh{H5Yfb)qC?kTJ9 zmhxKEe>8w|RR-4)ah{5Qit|hoQ&!~+Yl#B5`5TT)N=*&v0zycNnu3~iWxXx=eX=N= ztewdtXj_~*_j)e}Jk<>rSPMCPtg<jqe2RYm?uX5Hzx-{9AY;G@`)r?dt#Q~DJ!ACm zr6Y_DlRS4Xey+f)NG+0w2r{wAXzA!l74Z%Fe<U63xKg9i1s*xMhXL(RBhD)I5_@@} z!#WgYPyUvD_yYba$8s_svFP3V%@Ue%7RKjtrV`8`-+kH>1`e$q4<O0h9ZGrd{DiUa zlSbttMyU!_<g2{r0tCH)&y2$iEWR9=m#_xvBtNsL9l(QvD`Ja){6mZ8A{1*bz6Tz< ze-u{A4#g6lkXV4|lN&f^ApXars#Rx-v=_I2fYkhR#|Jk<FM~%p*Xce^Vts=i8smOX z<pY8oSW}vlD<HK^!U(K+qImC6TMQTzsgFrOZcrDaW>}X~;PO{YNr8{hXZZuQfB*Py zkz5mzSOgIHoJpYvC;X>*5Cj^QO4}Udf9#GIDnS*bq+*Vh@N_BR1P>NvdWDsL1YYe* z!YR<}5%^NVIoovB_5mDIM(Wd#OihaUzN5zHo=OfI%VCs!suv+aL0y4mXPiNFw%3|L z4thNTU&=mboBEI-F-n9FG3qPAPc4w3$8L1<?)^pCpEZ49t0YXO4tewQ#~XGce_SuP zFr9{3I`&|j`^|@2G}GHlX5wkl{~i)t?@MA6kLuLeXv~dTZj->0Pf3mECXDuy1BpX6 z=O!7iqIYaNSt)zom(oV#Iu|hTttx@6>V4T(c=W~0+gIUAOWB|#81V41ZH_#usG5TT zWL%OaQeQCgeL>Ckii3&0(%bSff5j%6kXM}HQhN>}LieTK;;Z|%shgp5+X+7x@>W*F z#dscvkn`RYs}irSm$U}#BG$L~GjQL=t1Kri5Keboa_|$k%BW7G_74>NAS!UwlvB4@ zsr5A6F&xR?FH<{KS@0rW$pEGu+)*-7h|qyLm8P>or5g^YM3LsiDbk}(e^mr3Hav8F z)enL)EDM)u%=!j{&!n$kxcF*{cDLrjgq1xKec;`xL=pcD6Wt_RoQf^W<`()j|DnF> zKp<>GQkPCu=KsNwKq947vQS%*iOa137&#V@-AmW8D<2D%Av_FRVKm}>C?h$^8p#*- zSx!n|oF-!${`&F5^`r!&e{>4&t9)dg5HumnK#m#9=_Wa#rF7F1$R0HT_N24^7-(q8 zeZC|CeIwmp3J(}^%?;@1p)p<pXnweFfi`vEF=#4P3Xr&iCDoKL;XD@3Cb8hdo0HU@ zJ0L$ZD!7*^NIrJwO&GkOOB9&u#8oaU5EMmY=D+=U*+D_opptBae?Hd?T8Ch)6U#2^ zj_z;bB=V`V@=cRyoUHn##rzGthED8_ieW~IVRaI0?jVP2_<&Pe@_Dt-`+ajd@`?^a zjx@N6qL+qubP++YpVY)RAP9uyo)C$uQga!~E+&dcuGwbPzqcvIy1v>Dhoa?aknn5n zxKlj|Gu^%!=#~Vaf6rYgi*>=VIS2I}PYRLNm9e~KCsW+`z{%&T-}C4K{V_U~)W?}! z)iuxcCHl_-I%g@?Wyy4-v(P8eCJQ5VOP^!}x!fml0MkARh$Tp|OM(MVj&byMoI2pd z8|k=FpCod95?oQrylj+MNL=F^v3Jl{NSJRrYK|is=p*p=e^|7iov`s4bxG%mzjng$ z*Z>#nCMd_!ThuxY?fGtVa811zE(U_X&R=TD3Y!&S5>NAj^?vbIQiaBvY50mmlfS%m zH2Si>s_?9>`{C5o)EQlBa3oMUdS~ZSQSBO<IL;v>>UdI2juKE9P;QI^GN2^}TMgun zwufC8`3t$@e>oAjSWl`j2Ic|2VPvk}Gzs*21in~LPB)$3G-Uy}T)t<@gHLkpmIe2Y z609ZVps`~UE1EYO;~-TpD$67fHTYI+_+|OkdkukJkHD8I%h{%vD@%#|lzA<dmq{4s z<|Y%#&%HKs?6~DYny}(`WBdl8tX-xj#VuGYC#<v7e+6I;%~R!WhtD5xP?{#Gol2pg z$o0#MVFR&Iu4Hs7SE5PqOx@s$n>4uaNJ$5*6#R4k%tG^BflQtbWnT)UTb_2K{3hx7 zqYIew2R!d9zUZHvhi%i#6(gBmoM|$>luZvG!Sr6smjD#nGQ}Iw;xl(5GuNDi#dEOC zwEJjaf5%G$M}SIRk^ROs3II6<&<#!Qs!&`JRm!w{IWn&prworW;YXD6MHv3RtU{w~ zBnJTbttxo-g2U4~2alIs>q|lr5!-kco?nX`$hIREs&jsFzd~5@kC&`aB7KT9RPn5# z%;L@h;tqeK06$Jj#);NUMQfzv00SpR6SyxIe=>79Ljwk=TNn_X+oI?EB$F>n;J0<9 zZ;#E)R#vOyvD{TqYtk(kA=f*?1jL0HV24IiG?QpI{<h=7Cl5+z;-03b;WsFc{<E$z zTgTt*2xCW|jyN^He7z>U6l<iHV&iG;j1%NItbD|SgR;iVk-p&}>URt$uErYw##HmI ze-X{Mqzm{87IaT7e?o)PXO*|c7amJq!CB+$$z`iLC-{2in&^IF)<3`xk=9Qn>U!J_ zDbC#x+)`Qxd~Y#$)+hMo$YSmhS<u8AFD;^U9Q227kZV@h{oLH(Fl$U0>12AN;7fG7 zd;z5J2w#r;>+SV~>l;oqaYw1>41Gq!f9*j2zN@JTM`PqFxG%{|8nGdO>R!ya&HNW) zRMls}W?#w9Sauh#>aAsR_T`fC_K(?gn9i>fME)8tcM$^|kaB1{3T(98mOP*f8SBe_ z8h6D}R{2XbaK`i%8qT1;o*1m?CMQ_;QQ`rwQBrkAVNo_Q<c85%{x=DSx8sy$5V1@P zRl0ELgXz})09cfne3x+x0u%u=mm!x06#_Rjlfeflf1O(EkKDEq|L(uyiWZ0t@T#Jy zXZpzwn&bks2<k2R!3j{E#NAb`m9~;L=j&hJd69aY&UX$Bcqwv74u|vj&G6Js0RPlY z9^9l_`+1bzl;<}A_4dabZv5kiH%jPsK)9PxzTdz3^Y?LlqXIt<a&@ym%$M3%Hy^$4 zPQ_(3fBo%FYwhW8Z+B4?d+&>(F1hQ&$utc&zrW42XNvLKo8fjBMoAufQF8n1{--y8 z-8&xQFnlGmNcl3iNf!A^N6hWm0V`?b6~t2-dzT)1!ptkpFd$brShqYjo{Eus=2Sd( z>~EFVT`&IaE>1G<gE8xKgn90(Fmn5U`7D-te>WrFIL~^~)fE7%Df9R7r|zCRzU$iC zF!e@axcT)h^k#7G;%JysDZOSrN+LfBU&*-;zrgrvN#a{rIdsB$!3>?do`iXWowT&l zzKVHH-R>%L8BeTHRXvo~VW>O2F&%l`f%{kY1wF?eE^F{<T@``GfT&gM=UKw*{_A9L ze~p}U7gx_g4+ie(uWehmNA7&6$5VG5dE`GNWaurekh_LEOk3PHred<9t+=;0rKx{I zO3*c61*DYBrKEv15D5sDnEG({!`<KaLbwp8&io|FE#1SZZVYera0|yS>Jj;6878Tp z=a~pm@dOfi6a*;pC{XxqP(sKjc9-4xe+*2+1w|_L>XE7J+5;0^`N(y{pKLAITCS$- zYC>lEbKMrB8F+9Sz#Bl8gC(z(DeKC}H9oLO!c~(cqYB7xaZfkSR|DU$+?Iq@q<y%F zS4bFcBGH!aTNb8Dm7kGD&QwQ%4@i>0yF=v*Bifl7?%dQnJ2!q;SE7pfATn)(f8j7t zU@`h@8AjU*6RXU`Oj|bB%5E>dZO-m>ARhuOolVi=U0aHdPamq>&y-qTkHG_mS<LH% z8LB?bt$V`*L)q7t5f}==0t!oBl&D8YkH%{k*t)Sa0dswg08&3nGE4VM5C_IT`m*mm z^7P0XIeW(4i>*EL0A&8PJC1#Ef8h<#x=0eA=Y|-Ceh}nKZ#E950kugp<X8Pgv@G@$ za00AkDN}|sC5v>((#FQ6#!bPY-0qaufRC?R8L8L@lA*z8+l?~SYNC)`rNP(yME}Cj zj}!Gf^e>82%ceq)eC&%e?{oq!Am?aLvUTmSUYchw?+Z~P@dKT13YNkOf0<y4(W2rW z5(PHK-q;Xdk4#hyvtSf?hhi)mZVvUaEgA~=v3J+X3JxQb#b79+Mb_$4J->sEjkh9z z9Oi3}E!K$KBLG9c9y#u@hq=dVNkh*-5Hme}Xi%78G)2WTZ~^5FSI`j9r6bQ3*B(7< zqhTER@oO$i=YFW1_vL^he=LLhsf77~dASt5Y>RQ7w+E&K9E7<BZxk-iFKYG;$~#7# z@6U97vG%%|o%C=XuoQv~Ff{p!Ek#UXuv>Q{=3JD+=FvhwauT>Qn1r=Sui}v1Jp9@? z)k{C|Qz17aV+@!hfnz|Qz*Gd0V5BlleZLbok%RlmmU?gCWTtsUf6K}V9Tk0LD$v<9 z3B4aX4A>-e^Bet7Dv;PPfpZ>eM8?<xFNs12jL?ej#9nrC*c!~pjjr8Pi5&ca&VG;I z0ES2fVC`D=SopG>K$v*dF!R%36_Xst8vIL#s*X)X%wKq+iU-*$c$97m`YcEjvxOdu zuVzGq4K-n+l<^jue+!N=pe5Hv>S{Y3D8lav93W%e7V-g-OJhdzDu8HYS;7^UVyy4$ z2DqVvg3s|;wrPU!R!2!lP9ju(0{>@zoQZ~j(VzzlF)^c%A>Qo+Md?k=Mz%2Rkc{sg zqk=&ayU<2>?yd!36oPKdXBqe<P*G!%5$@bEPAF;t*Yh<Ue|Q4O4oVnWe2z5N66c+G z{o?83%z<?%#EbNx(Vql%;f#J5x8&Y-?XJ6wH3Jh+#{PIc8;gjr=YhDvP+t=WCT;0H z38-LuBH$5Qz>|0_JKZm0oiGLeI0f5Xxpf_Izj5je23*{x*UF%oxP^vi7YZ%S{KWOZ zzrz*m1$3k~e{u-)l*7|p7t(A<6#O`dUQu6|QEq4KmVh0HDVeWGC0^nyPDwuA(RIw_ zj@>AC%y1)}N`{NGa`hxPhomTdCCg0v0@uq0EdW)*inv!`5W;>nFjt)TK%e<+$}8tX z&~5de#}0jW=6*&}(8a3$)+Qvx++2G{wiFC406)=we_}|p_NQ86;+b7(WhAm3<X0Rc z1Q3af;G+<w7@1etklOBQwgsStyWw<}2g!bE$H3d8javr@q08DfkXhT~Ii~2@qB$pC zTO+%@K(M3^lF8VilWH~d!SdSohBH&{s2~w3$F6_G>Jz$B6$&JT!G?v=eHxxw&d#pQ zM6sE;e`|2D&ffm?^Sk|zo54;2q<1D)A9ziMg|OQ};sbNg8()H)4*VqCu2^J&g`3cV zm_2X{Z!1$y=+NWRFr9}S#<0_jGJ#KwU7`qOUC2zpVa3^Cg=sU+$9_2Fr@_{#A#F?@ z=p!IB->`+nnOoAu`Orewbr|?yQ%mgtbtR|Df0;zluCgOu8(ZBvaU#)3n!>iYNUK;c zh8nGbFf?{rK}bqf^mZ*Xx*Te`P7ipoZg&gCwv{Y&T8JKI;bkC(6ln&HIqZc<nYM%8 zqrj6EfgNP|cS7BELReL`09<07=FT>;`^s|Y<<Z5<-po7nuVt`doO6j#6{a_gQ9u#R zfB1a4?Hx+T`Gg22SPX&P=fWXQ?J-_9cBC>)&t4OYY?jPU!Ab@T_xUmq1X(`~olcgg zb60KJtDb|?sgQ*$cf8qn?OX2Y+Qpurv9MC0*98-H_bBVoyRSh=yA0eVn=|%Fv=BcD z*T~TTT_r-F)I0G#6%$b-%L!187H*Yge-S^MY3m^KA-Q_lcY%vb92u7oIWFMOtYnxG zOrDA!D*;SV1r>(Xr8N)yjmc=ymS$Pcb?Lmw9e+WN7-3kJOyqOkcxS7@7Wr#Vdb++E z-nz+zL9ZZQTcUZQBblEqwe|qgC67YX0I_G(vGU`{DU_JoHlBw2286z{h*|_<fBt&~ z>y809HV$%5$F_R^YL@RwnPLFEUt%5@Qki-k^9s}@&(w<h!)6)H&y`D@m;0|?2XbGh zZhr>wh>#enFD{EM9*14Bkcjh;R6(E)<|TI4{fxFZkZ_C;-0J@s*@)GPN~YiqJMOd< z(qu~Gpl!h1G#~<2?-<~EwyLeye^MSV<d<CeRB9(p$8YQVpm{2!1}?siJONIfgIt1H zwpQNF3BdhcdNaB*x~y;GJ%UC`n3v<`b7=(fBVTmLVzeJ-%i9ZDDhVQDijZhB(J+Z- zxD|UL?3puie9uLfo)U;;R)>YQO~<eefn>_ClE@_*wAyH?D#NGZM1^<XfAVPHb+X*S ztP|S6hSr6#pJvXvGq77cgQWnwBFGj34G`z0XD}h&P1IY@V9O<!84eyO@|AebOxBxU zz{mF;L>seuS&h8+*Ba9_a0>%H@af1t@Bv+vJxPBe<?BG-s2t)`n!l6)3H5G9zLf&4 z7IjI`3K@W=0wUr9%oMimf0GRtI5=)KmEd2c6JN*q(&hZEqYNSsJgH?3tdu$zAPFP? zZ0pb5Iv1aA8AjmO$SxvhoSX+zYQ&bE%FN(eQa8lJh#vvLwjPHO^c%d(Hz0S}bgJm& zfpybd8w18I2Ac5S+3+!owjR!yGlA=(C!|D@J#0*w5_~jN+Q$|#f0=OgBT1(E3$(?B z9BYyVbg=2qR>eAqtpj#EBAj48$50OX{=IEk0Ej|oGk^TUW?ez~QS3tDH*amFT$pD_ zTyZ)9iXKOPny!*q@+!G~RLYa-WdlE^6b0o&e@sA?7XDp0MJl-D3B#4yit+R!08K!$ zzado`WHZ1Dt1RADT+V^fu76!|v(^b5q+mmO@pj91cC9>**~cMz=7yG*$_pZOdXQQo zb?iFWIUJL)wK}BFD1U##-s>QbUXOIeSDsOld|<mtdWT0I;&Rp2b!Q0#xCt0MeA>M4 zbdDZm@1NNy8%f?GaClghoLfLA;B4s5<_ThZa*H@#V3oDv_CsG=<bNlQ1H;ZRE|H@f z8VEw*A3?CG=vmQ_w-b8%z}yt=5wQdLQRQvqGV(OHKgrv>ySbEZ4!a1oS<TU)IZuxT zqa`@5dXT><U<Z`2!cd1$vBJ=hQ<%lJncMczH4PX0-Sgvy2V$nuEm@~Fb;e;T2c=e) z>AZdez2cQpDJ4yGdSUWQY3NdU2yEK&m&s#<ywAB<kcQJ5Gd2#ZAz6OI*xY833b!`P z(NBVS9=YvqNAxF8+%3ouXX&5~<n-slPF(sd6S~!!4x1*RUVFP-g;B5>mYbb~O}Bu= z?f(NK)1X9`aSH+z0W_Df!vzxqIW;$vzy~USR!fiEHVnS+ub83%>H#`l>*2@bmK04N zhoWewrzQulN3#}cO9M&X$G;CL%8mzc&|nW1DU$j~e&j6M74XM)$6{9tksoEV>&Ckx zYTe_G4uAb}$CBLv3=b>I_ouu24`sPyMSd)fY<Ie>L!HjMf3u(Z_8OGiAA}H@c)LG; zNLgm@TdzA({oSi!pyP*qBQn*7$tk}-a9JJ8OxF8Pr{C{>J}nqZ&c6{XTK+%Us*yPp zlF(|i=S>E9uTDkO93TzaC^~7x)yT|W2OW}%JS<7AxzXOnG3}^kvoi&1N%ks5vzKJx z9;Z=J5KpS7eOZG3H5qiy`gG%8eNdx+&#_XF`GJX?m6Q(@x`*O&nLX=RW-hWTdS%L8 ztQ+Yr^q3f)+Ae5o$d0};v$I1Rw0WdEFlQM(ON!99fy~dAzQ!g+zh{{6ph(nVeiWS5 z@Ps)k01w1q*&jBjn=}~ZLE)t+>1B(BM9B_ktgaMQMuD6M{61Y?=;j}zUq~~5=urn! z!t<oVR@LiPp^{pKcCl5cYDxA`gCV&tT>^j7AP=I~RuW_TqDMqILEX9F)NS|*PTvkM z`_@4hAdw$IS@O(Vy42wZPp4Q}E?DZMb)kJgNO%{Lb?f~U*#>4*Jk(A;b`X!Fb+bz! zSqp~NB-NUJ8>~uPf{}g3+^ze64_Zw0V-luKf_0TMdBednv8HqS3g$>_Q3AUzK^eM! zAf7$yBtN6MM%x}^!|Yb;*=17Z^-%)0_{{g;5v2PEZSEiNP4c;!_qxdCk<Bh2i?WD? zB3_pZjRDse)P0+vBEC9Ph-!wcjSuZGsPimt0fmwlIp@cl8Y0Xsgq-7lafOf}4~`WT z536CixJ8;Yw!8sM#;2tj)i`j01WE&KsA+ggbtYl*F`+X_w8!e({k004UiR3;kbtQt zB!M!?^OC+HeG@A6qPi(Sp^znql;zEMOeW5<V7M+U%x4r}0Pq(A_k*aj-{KHN6T0l| zIL1W<Dt*>=q$B2m*O=XZMn{0-YaS@`wAqRxFY9JDqL2()!lXHGMHMoyYBAe?je@+& zMNutJ)7mlw7mF7&S<+0sS_}*{Au<7I2ge~bFBVn6@D=b=cT?3kOhvOQDF|onR2Qs! zeY-hW1<&DU^UGk}Pu|6`!a~I%`&x1g&PB6imlg%Qn5q`farMqYO6LO!HcnR;SH$EX zHy3lmgrhR~z|P#<1r6+i@*8T;t7W*hr<DOU%7q$l{(N`(bu(0xS7J#tpZ`nw40oMf zyO(hb0u%u?laZ(t0x~(5k-G;ef2A7RZsRugeZImE3#<aftauSAb)R-R-Clsj7M&D* z$QD?|rep0mk}Jv0WWRpT;URS!I(AUxAry6Vc<wivuTuEqt0G+)DOsWN)#mA4>UP`5 z6)k@L?j84VYXDqNAm87;`|2NAw&E!((t@w<cB_nYhRXnTw_V*QD!=*df9}V3-`)+F zG9j)!5+T1h)94j9Oz=$MnLw4!72{I*<8IcO7RkrGy;<|*aJX4ZqmuWh>d;p;K4i%^ z&C^p^Z#$%G$pY{w;J88%w(&b{l1=!|J(aBu+x3melfJBKyQQt?s^5pN`n`wi_STUD z%c}3}VaI?}rITN8c(S)k8R)uva;rRPcKBZ>CB1l9khDfNkZvv+&p4M0X#y{QB1=1K zmztJ3WjfU>tu)A#U(j}dUQfUyR<=ay82)HCebv-NjbwreTHb%0kQ@~M+pUw?S{Q$z z6CEKsmX81}gh`4eH=GyDWOAj!Aaiwzn*hC@fJeAlB6UQ7IQcD5p$gIxlH<(>m-e&W zoO;{gQ$9ir8o}Ld)q+S4FE_amN<1pG%I4G)aOI5l52x)<m&s`Yk$=sY<OO|tw|73r z6?__u5*{Af%7Uk5FZh@xTj0rY-EG?H0T=<bcJzuI6F(u5du-49YJ)uN>G6Hp`Bhbe z${?iB*Si)lH%|*x@0(Lw`}Ie(q+49)7z~_32S!FuaFKvQ7BKFj28e?&!eWd=@PN8U zW=hnVi;!|oFu+j2M1L99)$b=_A0JT}_#Rb<&wF@PqMk{0{xqj*YyEllb8qXdi)a!B zK)WcC^LqJc31M3TODfMs4)9@Oz2Grqy|BHtK|k>2miEFY-c=BOgY@ppV{hB;>zlPv z<~8gj82BI}dvAZ>d(L{REjo9my_ds+^e!?-2OxnXcjd;?7Jtfe2L0dWf!;Vr@|mh_ z4zvj$dUGb|vteAYOq*4fLA<;e#0hpi07pak6yZF8BOM0AHxhXNBhjxRcF$<nAs$VF zxj%R&Mi<RxW)jZT7x7#QmKwFnq+v=Gm*TmHUQfVd@qB@F8qcK;{sZ(=fNn4@B7I$7 zI%oMrk7qO?vVVd}IPf}>1M~%wmq-^06{yiHXPn5s|1hWf<DBk^Rvf!Q0XpHSSaPF^ zjA?NtGamQ?FAJ10={svtDPfz$yD@zN9}vTdM{!;m9L~a&oe9N6anXJ}^m+mwv!4ah zrE@@CLe625`w$B9<a<n~oy(OC#{U=Eo@xX9BNR924u9E~+DH}4&9&?V=nL#Dk<Q8+ zpvVgxs~E}%xb}s|Q;BKasSDB;owg`AptSQ=3gLem%`h#T^C2Kl3FW#Kez64!(CZ0! z%!d|87d`~k<;)OS_diY9bML-ca5D2EId~C#%$5Gqi&6%C#FhL6=nMQTkq&xeULiU7 zPb%ga_J5zHi_tGWpYMErUsMdfkl2^LJTq71czo$9Ki9HpJ{P@Yx-h^Vh5V+gKF3-+ z$(fcqfKjzEtr?(32419`^Ylx7fbta!Vo3@Ax#}!ELal7KuC~q+TZU2x-we4QA0}nF zOty_<a&rpBuJtcUe@3}+nc5y*(MxqXoP0#%@P8mj2*4HvbGCYT@M=(+C;#!X(DNt* zxv~hdSjWVbF(U?{{uObhNSqBdJJy?L@k3rWTn_l72Y_WM=;7xlxXK)`cGY8D?OyyQ zS`hA96eI4SZOz_z0YR^l3k@Z>jZq~a=u4A@Bfq}L_H7JH&Y*P&5Pf^HF*HKJGQWf; zyno-7hc1pLpV}<gnkpz}M({~k7K2WqJ?zgCHb8w9RUYVN5Yl}N$yy1`gjqCz6aU8g zrlE=eyo5H;c#eKO*fT=V6k+&8hfkokZEfklh?<$e(U25xv@=B4QSWFsRe8WBStdA* z;WD{H`=(qJInWqZ<byu!=jsX>N0qMu&wpS<hvpIc@>tAL49b@4F}1dbKJP3h^(rRN zYR(EXD~cXK1D~$3%$Tsil?KY79S7TpI}60!oafi$f>aq*v|)S{1v-mN&p8VYFwEfR z-M-qz<qwkJ1DB(LE1pgxH9foF#JTI;u%D+`*#+?SaR~Yy0s4gZSk<+Q^a$n#4}TQc zbuntgyI9l<BunMRP@Yc%ZOX@C5I(f__fypp4e6PXUVv?=>`kr)E~QnT{LA;rfO#T8 z9K-BOPe6zbG&!0J%6--^r%H|65#-1Q9T~@%u0=<<FxG%X$FqeH=`hNz1)t>BA{~2b zNU}X`E$G2dmWsnYni$~+@ld5xpnpKTDdi&Caz@x6HyB6{)iy#p)fh$4rlp5?`p;&y z&@0N!Mslcc`Z7d>`3*=cOl&|ue%eMOqsrHOm9KdaqQxQtgj^yEj0nKdKEx>notdA- z8zzF<6t<ulG;!~7z~#qTCZll{EkoUWX0ngQAo4J!bInGY?3%;D&03yGm4C1mMy;xt zRB~B5nd0D+vqfBB??odxSIi;K76)*+>ccT%0Eb8&#W+^w2I=VR0)1p2>4#@BapP=f zj)sayH(K-Z9kW_+hDqr>jPD{fG&joK+`O%Z?s_1%Y_}|$O|aTRdtO6aR=Ihl<|?MC z3A?s3Ocf7JjZMdyRGdmZmw(dNU?3t3H49kL+3et*y6>U|5QpApu>9Ym6;NSVCiJ{l z_~43H*BI<6m}=^3AU?gI5*n&s1yl}45FNr0?qcqplF58QsSiJ~r~wT?K8TO95Kdmm z6xy8|2)OC2GgMDjYiR%#s%8-PT^NptG<O=A$<~(^WM|;DC*NfU-+%s}ZJW3uWQOUv z6|lEhL13h!)@l0|gJ4lhm}RM5b+GQT?V=$>&1x32|Fl(cRj|~}IVNWHvn}1dV&N-g zSoj+tjC$$pUb6792UmlyFU%`1AgG#A(p=3XFfYv@E{p~C)E4Osx>HSu@r|SB)V4Dq zil<~+P*I7zSPpW0UVr%9V^lOM`C%8M94uWLaV6oBjh&wFy4_$%N#9>6Ila2Y4dw1R zVZS?+-5zHzN>8LXPoXMhc{X_IPk+DrK3XPgrbk<&^xal|@}s=>z={5P7FI5u!hd9M zs9lSBWYrmj;rVUN>(Y?mT!osJ#_oElkD-SQFS4tx1DJ?OxqryLlndwpt>X>09B=U7 z*H837wu~addQs-duXGy@U-~;P0IKFl^Q5X{c?=3Z4$&}Q+ycCk&V(A$*^>`27B!!O zZd?JFC!H-@n(nxJk|JEW0)fHQP14iGWU7yVRn(4op&3uFH)Je<JZ$ADz<ajF)3<9* zRQj1gDvQV{7=M?8O8;`!R%b0;81xwqPB)k54>*0nvcr%2A}mUr$;r3mFs(;uOZdCf z@p!1*j7_-_v3;Qz-hLqPc}SWA4aoxZ-Mb58zge~*T)dm3=jXA<ccp5~$8t!4!wvVf zzF=m0!b@r&sJE^a%BU5h2_iK>mcYIw8#kw9r)g+@(tqSslR1|4<A9kWCKTvI#!O%5 zLKu|8<CtQ77i|JErubl~)NjyLit|V;Wk`n5selJ><CCs@TA`dt{yHBlbaJ7sM=PTX zoVGmDxlPp6c?xaT80kKI`~H{jF5CLwFmW05R${H6vgq=~Ev2@(#m||9grhDW46z+b zhGlW(*?-EQpY5p+2jipjac^=RzNIZcGs8L#FRF&^mSO?E@i&bk*_5t7%3N-VwWd&X zObQ})afEO?&h298z;je_LEG7w$4_-<ovt%^&Qdc0;eo$ZwlmQ}CV$>nly)^~SdG7= z!LlQlW7#pcDIr)^h>MOQ#zKkGdYELw!rjeTXMaX2)N#JJp!d)oZm0w>KG4vM(bKzE z>k*L}R{R<ByPf@Fgk0MB_A@@GVf1kFujw}~)WKH+?3Q4kF@wh>X*84RCEMU!jZ;H+ zF-8iKhPrlt><RmtnjVLSWS}e^ISFH0;5mnICKhAs;aiBJ?#@aDDZl~>!Jby*@7?ga z$A5=)r_Y=&lVBTrAX-%(QQgeG_Qy~+Kf&YdFFjNCrf<wbsh*i(p+eP^B|A4dsa-|| z5jncy{iduvh?>@B3dCFnSQ3fb^Nk>^2iX<Alr50udQHvXS_?xzhZ<5-s-t%XezxIT zNoPv#Cqfli9f<2-XY-_J6vN67uOz~3!VWpq<(WDQ*Qx&p$l<ILmvIXM6qn0Y0u%!> zHaC}HI|eC#ty<fT+_({a_gBnAfYktQu6Pke?bF8gZZ?4f8=C?0;5D$CZuYcbwbaqY zV;lMSRI#WFd!(7R9n6E+6h#(`ho?@F!>?la<5yXHl}gDnWv;fzXR)ho?yjit``?~% z-);j9H?x*6Zl3-4Ym!{?m}POsuWt79u5NZ$@1mD~hy2vp=6WNgjMPup8>N!yUk6*3 zRP~}S%C4yB$IJS7%&T2{y%8c!MWnLp_c#A|_RGy^K_bM3ree#7w(2umwNZ>qMYi5H zHvfPlUK!2Q)rM<$m(AZnuSxU{oBa5z7W2MT%;F42c8x1)5ssFyRHQ?T_r68oyG^Q? z=4m*8@GqZ=4!ma4Xy4RFESV@@>R&4sb2SXGubZVIc*?jDL!;+Q{TP;NGqkur6s2A2 zNEoK2zPzKp>WcD`j=;q_8jTM+6q1=~hOI5_wp;2_W=tDCv@2_XlZomRy9WH~=<j>~ zO%|+Q0)6ZA1q^-1nM}tC6)mj_Jb2V!^XPPcDhs>w6X*_hX%qupDEa6pn#Fpwy*oHK zZX_;lhRBeNC!Ai|YFpNAQQhIDil=$vPfqqhwFUgx9b2-7i-bv@JU;1|89n;tcnu@; zZAU}g!hmUH>Bk*x5Vz5B(C&~|R9*WT`=359sj91~io=4WT1PhrOBIdn`lg~8a|wHY z02VQraogox-x608?x~_LwyCM6uS(mtOB2luOP-h~KqgD)Yl}Trbw`7Ylfzn?9G2>a zUi-<pm);o8mJkd(8*v8A#52Z)=g95ujC9mkPlU61{oi++x5E$n{{2w=`TZl5#3cvH z8P{%CG_YUl=JO&sah53cI6Db0SbWBRPC)O~9W0;7q{BQERJ84z##RWGj^5m3xo$o< ztYVAF7W%SYglDE$60h1H7^ehF&A2xKSW5Dhoz4vtae7&=nq@-FQGwPvRNySye%SN0 zNn^p3kRfE9Q>09zkJpKg^0N0o>peXuq6pR_HFKi)?ae=bS>#U55;Nku9ir-gFj!OM zx1}GCAf3YIMKai^#1Y|Wf-9_butdc%XBi*8`0~};zux?|$i;@mBd&mp+O8ekr4%z@ zJ-N%f7?~v{YgMY9wN#V0{z;G4=FJvSb)es;yaNh8fWAnjh-^N82TKg^Eb_F+9Clsh zN9zY$4A(+Srj@y1h8at=48lTxVBj!=DIy1O1lUL>_!-lE1=wB0iKF|X!}%HsAOotZ z@~-%Z<6ElS72ty=aDoxe2`x2P_5wGC8Nn~|f)?2nn@@QIjJcz}Z_$v?-Z~n2TbH$` zdXaJ_qzN7HN1VieF76B_($U*LEtwJstskHx3^Yoq6+RF_#C_cHDU->6==fU~Z|z-C z`EWr?fTf(`LR;qTVNn}pDN{*u$@W=|Nwky6gMu@Yo+;LwWo8iqH0IbVM3tqWpD;1; zN`2~z8Y5o9qod8;Y!eFO_#}g%u&+zdAmEaF{4JvPvy%(trn)S))T}J34=pAFCVsRD z6?4Qa78={uB_Vp}2_yx7gU{%8u2;ipXMl=v+7xjgOj|Q>Y_O9R&|{Nd3uHtbx^a4I z0YxCtxKWp(2o!HTMit0+XdDkGpb1MAr-l^W7F3N_dBA^8R~gu@Acm@~Z;H_bpMNgz z;na!8Avm%XajTNi{vW8jkrU1sD}jBGW#7zL9<{zQ0PPE438_tgw6puXFFW8i3DoIy z7S!G!Y(=G&u*pGIsS&uF*DK&wDSrTN=+td7cusNMjlKj@Xf=QoKV0+^Pa)aT>QZJ& z<w&0hdV+Y80sX4b)4@(~RFLmcoG#^r>0H*Xpgv((@@?jzvz~HD?y4E)ocP_-a~X3Y zp7ZpDm~*;**_RoAAWnUg6!bAhJ5K~)a{|byl^H0eGV!$&fZp=ciFR_{v{bV^B@G{| zZ<!LpGE1FSlEx=OFiNm;JE|K3FP0m7tR0a#F2NcnnXI?*cy!`m2XzHRZY-Bj{ycPU zH$!3;GoGGB>#f~Uudsk1#SSE{5Hs8QcyeiCU13T9bo!isn%$B{`!G+N6a`L6fiujp zyh@d`uv?8|){Bu{Lc(Iw?AuWzlZ0uV21%I%jpl0%1m2O8;N94j9XA8>#6a9L5FZ(c zemPyS$aV^(i+nPc&jxeRW-#9sf@Do<5hiQcVwSAA5Aq5_K7k=k00g0i_v-@@g!Aci zWb2eCKy%-Jm*r=AxwAl9$D(pFkqb{_RP>+sTl@yU-9smRNpEKs;ZM@pn20`KUJ}rZ zGI^2(Gd1R#_eJT4nx9EXAs?Pe3}*p-<&E9<rB{FMw1S`%hs^T^qqs(i)OPmR(vR+t zWBTKlpQ26E(Ype-jmp$&;B)$8q^r%(EBa<eX#?(muzT3vtp~wqj3ry_CnAID8W(Iw zZ}YBeirc=kt;d0hnNH8*RNl6pkqSx$7B%u8F;}JE+IbtWz_iT3K!G2py|{R+#dyXq zmSUmc1Eskf4p0(L{(U;{cuoq}WwZ$&JKxsM&0bAXhD2g|X;8?rXSvB=-n@SG_TR4- zCjvo#d^&#)r6hKLpbQwx^UZ?>jhkmQ)aMi+uX(VuVb$&NG@K?rTnnd#aP4#oSwXeI z#zO!?O*iKe;{cT(5n7f$ap&7hUPuin6mij6gG__v#BnfBa!O8n9SNb++q$^YS~HV9 zz0zhL_DAtJoTfkp0=sEDs?D3b-Um=&G8P+u9eDQWHy_#=3u5Wnk(vw-%v7*w_?nKU zR5VeL>xoYt<hLLi`_7-xO)(nZp^^&@@G5&huJAm$3L-<WK}jDDd2mwzQmQbrkMSEd z<SuVKAJlz!>brG7i78SA_z{5*@HZ`h2z;=JCe*}F27}o(L)V@e^6@%JhNC>FuOC-` z1ZSIgWdlP7&nNaEID9Ocx*DM2LlE-NsJ^K2*<qg&<a0Fyc_`q5y29Ltiq3x!DN1@} z08RXal~|jQz@z!;PGFss@a)g%$L8dQIX`PewXT>*#Mwz|JsiJ#X&IcT4*AFoXrZ!^ z?ie~<$FB@&GZ<>Z+G03&HyBbRgIaKZ<?*rt%7uS^adhV{EU<P@&u;j9ZqMwi3DKp0 zv&ES>dmOb1?fCY~*mK<-HcLC$Huptqm#-!usn=)s5_Q!TRc}{rCx*A{HxLOP)`{=E z70ozH-D$(j<G<UscPU0P>`Od}0<A)&f;0=B`{u*pmEWj%rsRK57ifzo+@Pp`xcL72 zR1INN{XgzggN`o0PnF5)eQL~9np|+7YCuq>3-_r$NkV?pA<$No85FgC;vOzdWO(M8 zksiilL4v!xV6^ngezM!%FR?V91hTdJSDt7{1;kffz`A}%3A`N=<Jx5<1=iisn6nF5 z{A4h`aZp{kfmM=8nLOzc_3#3J7P}rUU}+tYmgBSRWV)5*dbpM4B!uue+{*HVZe^hg z56g8X{H-ih44j7Lfzz;D_$RRrmewy|MP`_o4m;Lvnv?Jf7W;Ik%UBp@;;-5aGb&W4 z-*YWH<33L?_G4bI{40oiwN83cF*zmWDEuJYb?xe{YZ9;@{<F*f0B;on<Z_pB3j!1Y zHj|O46az3YGn2swD1V(=ZI9fx5&rI9ao?f?ELMDzs1!kwq;BB=eL;Ib3pfTU@9OS^ z>`Gfn>vR0;J1-<9?Mio-!Z4PiD3UXrdFGkn$(s!R$(u5}DYO=)aW}i;n~Zw<hZ}DE z<IiuTAD6<wbT;ybyEni4leIT86J=J)o4fn@RCoKE56O>@)qiQM``c7&otSTLQ)6uM z&&T?3;I1Fe&0%a>e)zFF9;<dg+@?wug-UF8`|<9lH}CG^4y;nI+$xTIVXx8@BEQL< z5mFo8?%iVzi#wTA{locKx3|hA;}E+1yIt4rs<Ce2|DJos?x7wZQA~Vl__NM`#y>;T zJ{;l%B<EXrDt~42^w{k1gGc|hUk>JLQG5_5m0C#4JM8NU7S*myU<Pcsr2bOxZc~|@ zZ{e#NTYG51>?YG;RGBm=2Mxy&UtmNt@|$6-#`D1Kz8=qgTZbk5CnKr_JL)fMA9eS* zQBZF_SFhGaSe3*6Y2)?h>fnbhPC+SbhEd`+&81A<(|?RNskVhM+IkI09)p^$*<vbg zn56AO$Ku@ZRp+g*YY)G2t3IAa9Puj;SbX!Ahp@!(vIj+x#zs_c-*Ru19)>pl_bUy< z@ts)HM{3dBQdtVEORp0=ITY08!oaIsC}U@@z>011A>AE5hGxYx=W0H)v(R)wg>7}L z*VbPuI)BW#HlHknbTW+e*19&OvBJr?@akMv6sia#yr$t~RwlDjSdc#K@8g=WqzaVi zoLlPZeXzfBA%zsVQR`AHCbgMxHcElVX|gOCf=iuFho(knHPVsK;M=}F9jaYTW6@XH zO0YdJxZ$9uW_;|<BlqvXa{=id_*KQ7ZT-a0r+=Q{B7rFf!M2|(abfr%C*Y?c<6Lt% zC1gCcbk*5VYh@I*JB>}(@|+|#{0`?y-a@h;P`?)ono)9SSNyZDhDYBqPJ5)rCy=X1 z>W8LnS$gQ}mV(@*#tD<T1<-x1`wsM)>QYS}S|lU)oT_0Ul!7)O?b`8!Itp97;`~i6 zvVUC85lBgh1mxGH_itF{>9HEQXN1#UKZ4Q-t)dMdI*@v8Mc7&?BQnC-KlIg+SJ|^2 z)WHgL2D<~v7KU)QzPi#vI~^@xw_yR9y)pn0cvqc=dRWtB4u~b?YaB_6%*Dwu0OG`- zSRj5tSUXeP#HT0pvF4T>2s+@P{bpteO@EIB&YzpUYl9hh^+;O^r^+ioS<w#QfmIRz z0+L>62jFTFl}|of_(bMSoBDD4k0C%1rGZ{D&0*anb5UBk0@O?E$iRpqa8-U2an;E& zvMa~PHk~08MVbE}&cH@kNTG{`dv0Q`ob3O3%+)h+uG+Rk0j!?P1s^7J!KZr)<$ur^ zx}zTepgMFd25svQjIgim+SGHfy03^Dp~p6#QBD3k4`;kagJGXBR|=CCOKUo}2LNT{ zYULL4f;4Ihn7HZts#yhKQ;MvJM(B5eGY411cH>tAiuvhK?*Wkv@Qe3t*aPAawszG} zqv%;qaS6Mazk#%V3f#xJul*F?Gk>E@OYrD?DdkLIBWlVYftoZW{p17p^UQ4g_}tv{ zAhuKJ_&Jm2P;=*Wz$yd;eh3GQ8!TP&y<hYEX|^mK(1HrblL0EeZ%}d7fyiA!`&c<4 z=O8wg^AlR-qTru-9EB1B45v0HLQ1o@tL|m3P+9&uv$u8uFEHnDVw2xBsDCno8SNBk zd*Af+4yE%0k5yo;g^GSc2dWfs7-JS5dgcJBOG0A&tzdo)Gx}aSD3c|-bKiUV%Ws12 zb$Nxn4v{xCxnhm*G)%%v&&FX!G{BCVBt?M89oslf-1lAY-7dT0_spohF+an&`|kIi z<l{D;nxS6M_m`(YtiWkr&wtp#)3z8pI^ia%hHOaZF*vuYFf!-L>-;x&!j;Q)-*HZc zA%LWY1|1-p5u6umfT)*NIbkG@2)clFw+`in5}CG_8(wDnBA*gGva+jPeB&26RsGC< zjM@w!S{SEZziJbNI5y+RzN6ekEOll?kzeowJ}Jz-gBlbtFGgJ%@qbkkP34}Nha9TG zzY0E14|5RH5>b}jl)mk&lb>z%%vA|T>Efxs`}h014P?ruQDLhwJhH5i;pt)t0v;tG za$b5ybaI2Je{8UvF}&mkCMfXK_1k_xFMYy#-^Sea^lZ+Vfo03$w<WP3zFVCNg19wd z%;)NGUZ2W|T<0(4n}1m*a+xnB{7cpUf=6u`)hb`USq}`ZEM7tQW}*{s*7+1C@gd|p z*yaH?;bohH@8%S;NQm&%#6f8oR@dk=%E)lj#1}skEF-Mr_~@F2<zR;cH`q=JXI{vq zou&61bQ+S#%WOmEj@=f1XVh93#cah3RFG5#dO?rqBzZhhzkfns-&6fD=aQVxr}ze4 z_rM`2!eSh8b`eMNQ22sRaLFO09AJZmT0%-#MJpd|XAY*4&$kwkw{MWn4T5vujT}yD z3)xl_HElQaI%APhudvdwu38`3cpu7_#sIv!_95)?NES@BuxG4SIw_QWS?vJG6KMjD z&S(T&8pGxV@_#bd0e~Q4r9H9I8^kIvL}uh~KldV(2B9%GF{im42;Gfec*Dpg7Qv=y zoSrt$!76=q4u$6z@cZDobn92IxcksxAi-7_<ev;oDNB`$xqs0x4Ji(rl=GS_P?Jpa z+|tUptMR}4W;h)@d&KQfsDg}XtB?RuGn)z&o5D-IVt<5-)%^P1c|4toT^32>M^*d- z26OasLxhp`s@O}>xX32<iw`kN#D~6Su8VC<mlZf{)53x%r7~n=*jMoo(31^%;vVFy zSb!m#N?#BB;=Vf^I$ZXNa>spGeA>u&Yi6r6$b(}5qGOqY(9(2`uqG-RZv>o<<-}>T z{%ef!R)6H?B6nlsm=&$(mN4hLz=7*AqQfTrvajE|y{HsO?SM5d!zEp+Xj!h+(&g+X zL3(?IKBVN_6S8mYty({dlM>cUv**refU@+{ETfCUVCOeN3X=ie<s9CZw=Eo|5S>PD zRQxkvJD;FFzClTY_H#qiQ-sSBhQ}+kDN5lcGJmoiP34mK<`cZ}6PBD8J0;AdO|U0n z--=XxcqQbq_9C(k(`8)<mak2g9_kTJW!T_}v$vNFj_wtT8MF*zPZ<o-$1Q5Oyan03 zjBvBdh?g0r5aOd(jstYc)iW|&RC+W-MZGvJoyDY_K&0RssBF?PG<SV-8vSSv;aF1a zIe)X2iAVjxS3TnUih0}^T&#~=zFdY%4H31xR_&SuaG=w@$PO~)a4Bbmxj^ZvLE2$# zpqbzVvA7JK%rPn~F4cV)$VCEdP9<XauIJm#?g3G``5G@YfuUJhP~66EDjvN<HHMkF ztMLoW!P^md^IE>HjDEUSe%N&fUr|({Mt?Fx7vn+7lraR?yKw7Duj$YXipwbFOKHaA z7rdEYIQoTVm%un8R+hW-Vb32=WixmfYCQ6g`7JT)zVD96-%Gx%(&Z#Fv|%C0^G?+c zYl20t7@hGA$<585Gn@Tq9j6>n|A;}~uGYBbPWBB<C3#Xxm$C8Rb3J&|fTyERrhlGW z6_78VIPo8T%c_wz-~$03Yh+eD(;0m1E~~zrZsDE8z`xUFiMp_7)TETjyFjIB$k-ff zZqYF)E-)CS>B56kFdW|f!q)kA6^tl>3}QWpHU`ipYAD{&DR08qXzMRy5I7UoT@bA) zej27|(uVjLZ~w4w!7Vnf8dTw4<bUiC%%;@hZ3yfDYY<kyPKdNj2ViPlydoblQ_@X5 zANEbxOx%ojY%CmyLFli)04?`h;lG=Zb}A(S=+7<(Le+d<f58}PnN#FJXV4&hQ|scE z1_yQgJ2`beOW=v{$b@6Mo&7z@V*ZtbxT-7_Qyt`Qf4_VG*FUb79~PC#)llH>M5$h$ z2n)Wz{w_R;;W(QPmywvG8~&oFBAix?<^Cmtf1u>}+Q*d`EV0@3{99eU;V|kK9(ac4 z+Ud}9OOyNy|JH_QYQvu#{SUz#W2lqCDii`YF_!_(0VfVMHVQ9HWo~D5Xdp5&GMCYQ z2PuEOT3K%!ITC)?ui)eE3q{t!0|*94Hsd`o0|ap%b|;eu#Svm5wq!{1AoK6{D@yJ0 z(XwT=Vgt4)Hk);@>Z^m6kX>*RBYs^BDY-)U%<5uQ8<1mS8?Y0_Q*~M~jOr2xn-`a| zy_$>5g-0=z;7VyT+0|GuD1tv^t8McrZ7zSgNLXf{5^cwdfr1w!C)GA67%3Y+1+OGY zqsZ7Qi|to3MvacGZ4}wK&ef)ZqY#sg#1RPLVRA&&rWm7yy<>=u*hZn^sZs{}H9Jb0 zZLT=VrLDsoH8xt+ao}Qe;y9X~I6G!jpxOY!Ns1UiQ<BuN7|j?0MhW}l$FYj(A>e;$ z4((}jTud}5&2dfDM%bvy9ZfqF8XwgOh=L{_3N{fe6)}<V5FAi23dVw|E#j0Ux80z9 zDYfmEoCf2GtJ4Tp1xKq9&jbgi)P##RYTFW4@n#gAYOWx_80Bc}5;-k)o)Pr4Hl^bH zlAS$9unh_}V$4BFHV4BIZR?Ut+5~@OvmtCBCAd_SM}pH#1&0{z=u&NOg0URTo+4$J zVGcH@E>mq!lgrY0!X{bOc8e}2n2F#ha;CN(Z|0<s0m{pz@d0bf)z-HcYU2oBOVDPl z3XcHOm}6IX^9KAtigBj`12#L0l3mH0T?*{KiqWX920K;|gD0pRfvd1WC$N9PN@{9_ z$ycgvlw6f)M720@)Ced>Vk*Q*LBB={TCSO8^y<}U{MLPh^_UO8cjN#5?>7*%^YQ`4 zIKRHQ_%!<Ir=1IliZ?I0v+!gwU%OYY-1r2v%VzzFv9=v1g2<_x2jAK~fX-lMn=cv1 z(T3P{{BF58JDslGM>l@=_QZdUKTN-`-3`GHe_l=TVDfc38vg^tr}Op7(4)~9jo(jK zi|ggtbhQDSHuvlF%WU#y@!fqidI>tql|F&cWQn)2P__$S&*uy5_Hlz`#!o{s8{DJc zR*uG}*Pqwz`!BQkx6$~`V)<pd+>i;MjF~ft0i^JTI-1F6^D!+x!L)z0uumjd_qu8D z)Q$hS_^@zL{@>nB*6ZnV{(F${>tua)KAV62yD4V?6XFw4K{a`EH#n6ysMeHxEvc7@ z59d>3;PiZPwYI^V>)FM6HowhCvy-fM>?Gq@9~#rWMX+3Nj`A#Hx-pY`=5xoc;6Q1h zE!7@d%6r-pu*eqP5xsvruAisG-sv{Coa<m=i#`;#@biSd?Kq`#oRWq*j&Sk>{<xB_ z(1#in2KFWCq4xTGCU9T~Xdd{E93l7&u;q%+D1&^a$R0j(Z&6CY3!=``3!x+qw1<`5 z@~9mKXIX(M|A-dX<6dQedzFFiwKGHwk4lvuidw_rqSknTsJDO5_?C3LG;jm}tv#4h zd4Sk5Q0ylU`%qC)s5}tWviF1Gv!*S4*4zy?0=2SYJ5#$E849t;-93OcsV9_Ws8xJL zb)h-=SbFj8^n7}8VZiqD_p8Z#HCxPA!|)Y3GC<V|2=b-X7UDBfc4f>L>Sf|R6uZRR z!>I#Ky;|iK5mtYYqF9I_0tZDN7ysmXehm7p@<cR2xk09Uw)zuC!u%rSC4g3H<%+MU zolJaGTE1}ZrT+#tKHmnoEhpOmH(U>JC7-PjtjTk>x(4a-j?8pVJ`6mpYJW1)9<(T> z>V@g)g(x|_A_+VUvkr!)*aJ;*PiR6ldLNps0kMUh)D3@fH|Q`bayL_t1Wf{GgoRSp z<{hf)Q+~oZPtTUKtMzJV#Z<l3^JHZjB9P#F!dbRD>gDoJDtW_3%D%!rgoCk>i!Y@= z4Sszwo2;fok%6MO-jNlrw1H=^z&@saWcX#aS|0%m89KKXkU&@@BBa4u4nK+_1NN*v z1Jm{l9SeUF`<PqP1VZ;4+0XMoX3NF=5^nMUYT`a9a&M7_0=U};9C}mJ+xgnvMCY$U z@o)sGJqVHyN08Vd$d<9zUK|J$j9kT9nuM@n$Yh4fA;WC+agYF`lgsIPx;%o}0wNR& zx6o-FQK}64DKA5xSiIFh1`rX2pdgW=x`7B}-H(4F)%39%)jGp_nDgC5f?6Fg{p30d z;+gfCX5Vk$N2t^yhli$4<#1D{xV3QZ21MOVH=r(9l5~%5W^O#Ci?uvB*EdKfhKC>> z5!4XoDG5oJgnmnfcD~Fk$(%HM#n;t(d3|;Sm`5_??dpS=d_-u~QZ2~5Bo{((QM;qq zvZ8<OZelkZ$BA!NXxZI~0R;oNTcH(xBt?OI74h5h7LDyr!J`1~ho-CP*=%xDaFSr) z1Vpac6FxUByaFY}UKakd_`E&k^>T4BymME?n+M|8muQ_k^+8^OG6_m*LuF93iz8B; zbj^E^K3-8})g4kCRFp_>V%-+E2vJmCw10m}0GXKVP8R+p+=}gx^N{|jT{J!&o9-<V z(C0{p$DAXCnVyV_2V_*#Rbbo&4DJGkguxeA71_Am$`%9+WaW~?3u1<a_#H|4k-bQ) z83e6cZUg#++HXhE^Y8f|i*K{}*Jd-5)%ifr$tbcUw%&}|t(kca>QRaG@_i8$fUJL@ zFYso&*RRD>ii7(iyiay_Z;@o2gOtN>?S@|;MB#@nB=LDJbX!EBA=d{7i=jQ;86D7_ zkq!W~%ORyh0`1aE>Ci&DevJ%n({O^TpzcZ{FiY8Fm5MYc?`UDpF0U@88<4oXoXo!r z_mG6>Zk;F8t3E^gB;*6V40%q3(l38ImAq+RTOO%pXY2Y$#rpP-9M(A}Bs&m4<0O!R zKs7JQhBeI?e$w$GNPpn;kFoN$welCsKO1bVCuiS|$4<2D3*ew+9oXnB9WD4&s7U&g zAPXMGz`u}wZ<#uhYGOe2l-BS;Db|`z3LjNi?T&UofaNRl@XN{P8<U0cS}{BHD6;E5 zZKy*QF^Y$npV!B}`;Qtw?jlZe51#6tc&hb5Sm>_2k9@0quzaZ}UZilieCd(%|3Bk$ zN_>}b3j!3EAV~%k1T!%)G?T#xD3?r>0u6ti0W4L#iBkGdIH{Yu2wKBkpbtra$}`#> z!86iE)Oh3k`ko7^+i*7HVu2M!Qsm*ee&=w+T?T*RuFUSNQfaA+yWQzkM!o&x9XCFF z|4R6I2~138Grzrm^{2lXb0@O2%t~>0|1e+bet-Al=DS1nG}QezQA%y}H`_#Ov-yAb zp*|kD>)Ug49GaG2zUxk>s@=P7BBix*W5o97`+vN8dp}ZOq`Z+-ocTMn3T@N;E-!Q{ zlxA|fr=jVPnj+uy^)Kh9--=DWO~l4wr`c3~u<9Srr@GzBVl%u(Dq-<_xwuYMX@MA8 z_^}>fZRck$$bgBmEW*U6W3{UtZ!&)zs=;p?wzC`G)9~J1m|1h<^VT47P4)3u$H+=V zQKWfkprKM>c+Y>mzkl=L`xtEs4w0)sTe?khk#Fv4vl4jX<ydB$JrDx)5alq^b_4hK zwX26He^drbhn0bXcmMorlmZ}E>M*Z558bI6nq74~e)%(KlPEXMz<ZvMA!mQ*H~z@< z_@Ropb;hr7le<J_DplHgHV9swiA{7S!si2i_Ka+=f%`PV+knzO0f(sviE-QndBo0Y zWU5qon=a^lRGQ~zI5d7+k}x)0b)uFG?8i>lhR^tq1+lAGk!kROpA{cnlzCcY`SR#( z{meE<98gMcx(Dufs(RQFY}kMCd*gVVR1e-KM#Ib5)%%pT0Z$=pD!>A0{r?<@e@6R* zK%;K=*f6vccChg|era5owd>BT>vdo6qqZiqJXM9bg})}v^r&_9ug&1MK~{6CVxszb zIQO1pHmc*f_PS$4s-<0+&|_a$qn`u2ZJ9~G)qR)7NG{6MmbYksnA3l_m3#vK+4P~K z0e*UC^(zkr5sp)S%7lhFC`v(&1P0r#O-8o|?-!m8&M7TYyHFVL)1KgRAqtU7Ap_AZ z>T2Xz5>B7V-#yxYW1K_3nvV|QFR|rKYUOA|e@x?kFcWE(nWdJ#q&X@z#VC!o>rdoN z5+wzi$d)36U<W8O&vJhpBlGB7gB-4oJUZFbYwQ3cIuAS@Z53ynaIwxu9~_vA#f2`f zke;@MeBAlz>DbhJFH{#3mdR6Hn9;ZPkFkRbkd+xjz-S6CYKh9EMwnX+QO#up{BX4k z%G$Y6quo$f`zr!82B^PXeh}qH53wWr%nPt`FP|RypO>4u?>m3;bTCM;1o}b{Am54u z6c8%x_~IZY8k23_J@63A9X>)+>nRvP?+)i4K<GR65ikz688e?84wa33!NUxF(?$iO zi!`%lVMMU5ck;^E)Rc1Jqjue~YhTB<RU)-^+|@NluV`0nSC-?p#4p&{$T=^OV(9b1 z0>(HlBnG0^yOw{4*o1hv<1g!;q88eOv73EUJ+_^LV9y_%YUirQ+VKH%FkdTIKB=$0 zef1t5k^V!+Gld_8Xn{bKSL4PHkC6vw(0R}V8|U~S;|y-2DQ*Ru=-eVRPXMeDqL$^T zHHE|(wWKoE2SjBR5@lY(ZdRnFv9qA@_QQuOkV)%>Uci4Y>|Aj>Aid*ehMX=mh=SjP zFzt-lH1OOI&V$wz?P1csaR67z4hSOcX+5>6KhtZ=vziAVMSw&^#0w_)(4=Pe0*1e~ z7mj5yWCdP)77bps7w{Ki0tq4LFj7?%_wk*KB=r=7gEV>-BT#Hw6_g2RWiJ&92ZOrM z1jl_2AY^|$RZwMG=EZIBu*maus(_0}L!|;(WW-m5N?vPBE#jUcn<%&z-vQefdfXVG z0w{*gH6u}A2{D~`GP)WMH6)}bg(w$(YqVxMtMQySL0vTn&#P+~-*e;Kg4Vkz%PoXH zGfzKmO@OQ}Q3YZsQ~~r+H%d{dxgsL5b5;PeJcNJ15wA?l9}E1+&C-Z2%tdb=I&@L( z-Um{z?4&Us5;SdG7fo6$km)tX6f^M#Q{v~sanFS_PakG3I#`=kwDpCx$r7V2JVH*6 zN1)CbCgO2i9Y;vPumOA^Sd5-2(=*h%JawrcDOR`P7Bv~nYP)<XMB0!i`~rZ9Jp#_6 z$U%RY@spRTvT3#oW<O;ni(0i!rBz>H)Uc31Vlw7EB!Z(FU~-6R60`Iiq%f)TRU{91 z#f)em>fSInyFs69n(Jjs0MwBZJIZO8qt>e%oTlO_DBZcjVTwK~93If|^o7Ea(}<gK zB6JDRX_?)<s1Ug<7j#P<^uRLJk_t2}4^@Bs*b%@#Vlbuwb6wy<NWeOyK)<<J<kDL{ zEIx`H`{MF0;JEsR%q`E%-1K9fP=M;_n`B<D(m)xI3eZexpk#o=pjH&A%vOocJa>&d z!uCoAVX*v{V8*I_`R`D<18r46cvw0j8cGb1^<&ci99mDja4r|QeFi`yoazBJVPbz~ zzN$tP)68+v{Scb5)r}xbaw(^!2qZSAr6b%=Btm&3m*;$2F%yA%8d%@Nmp2lQI8q+i zcA+eJnww>YqSXkPFje@3{~0&xoGW=SqpwdjmDxPnq=ZZdqzn@t&V)xbR;Pvo^1!c6 z6_5GMT_`D&0%7pfYGK;Wryjco5h#C|2*BJc`7)@VH8+4CF?q5@-tO_X>qg}Ng)wql zhn*RZdZcX`X`@Y4{SMi7;Ca9TM(Uc~2TnPE9E%XYoI@pO%H!@5fL2<p@b{I%A*Qv3 z&bZX8b2IS~-g3@!u$#jxH9vA5K<$ZKSYK=&`K#g3cjw0gPZ`3>dx+<|q3eGepV_Ul zq+{bKi_@9D0$IQV>&c4#@czyH-=oS{r1?~E#!@yQ_BU;yIzvcOe{Q<7JAO$nG%%15 z^vx6G_z8*7uIl#`S#a6=L)<7!z{TZ=i-Y%AnWf6XcJ;DCKRP)JQM^4gADe-NjU7IL z%!oK{c>#bOqsrOxTDeYGo9chbkkJGd?rM!&GqntLuob5E+^PaSKw2Q_xGYCwSG@8e zBp~fsf$b%{p(iPFT(Fo0t_qabWPl)Z5<wp=c|qEz=0zCJ<v@jZ)tL%atj;wzLLDCa zI(|N2T<;(0HUaG=jC;MZ!Ma(mVBmOZee&876gc-8eaZd?HM$6vdOUxNQf8_UhbtZB z!!JcpKFDHT^dLB6E%5Os0rIsFTB3QSPD_)2t@snI3ofLn5hq;4d8IS(5DR-shAVOx zrM!^4PoVG_s;bKrP5Xd^t(k-Hm27-I9~$<D{Q43nq$$&^l((eV*$B^fUEkL}ly&T; znQFF=EKjpy<@wim*z<o;m<`D_+;BxGEDhv9>IS4}CIZ*xYhgmM%*;#G@J2T=(aaRW z*Mx$vNKnl6<24uKCcRiO8u*-l-7y+Z`@F!&EQWc?tS;4j@Bjm%x@4#h6Gn9$$)WAR z478rWYk2h`)mGO$fGEIO$`Oeq$0#r0d{dcWDqt3q<)gNohbMo&eDJr)Q_$m=eG^~> zl85C!i{(CqZQ(u<k6tY73rpwHaN2G#3-3>Om5pt_)Rrcs!9D=v&<J_(rLQ@%&@zsn zO$)T9eC<n>0b{A^Ky#KF#$A4`$A%CN*56<UNhMxd&#%$7d@p=iKw}^JBA?@)mNcah zq}<3ib{eWg{L6pr@IN$wxXJwPNDM`G#kay*69~gM-eH~Cnj&1#!xVps8G%)9sD|_E zMi(zD{WWfTgcRCe9Yv#c2Dwv~|9|&<W69N{M=J07GH=z6)u~mP9w*IGy+Cwu9#<}j zN(d{MF;bSNyytt~UrF+C#3x}tyuXq(K?<?_=zZWnx(0viZ5$faN7o(C1HBa-7tp@> z+JL7}WSoDqJA)seuSQo*UH^$MB7_~`@|P_n66Cl`@3@O=0T6wYC`K_P@1x!V7&YD8 z%}b67ao@UbPXSSu$o?%BlzdDy{<2xiVjc-$B4{a9n&?Vo&olU10Y|wYjIOEU(^vGn z2i)Mx42OSrM=bH+ykpaTLYQO~-@V~fh#Sb+8|?UpuSZO};QARpS?5BE<;#mE$Ps7E z&R(ppqp;%?ydJ(RkBrMljtt$jBcHke+56Bi8g}>z3;%2Zi;ls@Wm$}s%HN3Op6`Hg zAecJUQ(Nxyg>~#|{P(M$VQ?p)8vG3m&fDW{_Ng;zNl&qZSb>v*Z&-VviytQ}b)V|U zLDgq2LN8oI;V;dIH@?_?=_S<COW+U6{s$Sl-|v@k3j!3Ep|}AQ1T!%+Gn1iADt}9l z+eQ+;`&SIGIdHI6hy5mZk%R4Zf&|#b!kL^LA2<><Lqwt!lCqus^;^}|&2CEMNQMEc z-(BzesyX~FhkyL8%<rs}tW?F_djBeSqutXTH9q|Giu-jdShz}7zI}N0{f}DT@tl=; z$?qPv=}`}xyN}ts=ju4r-Tg{RnSZH&+^>|<*{{#_Zbw6JPt9&<TI#$z?Dti>>F-xU zSSvCu?ms>J^6LG=NP!mOMpAL*C9UR+R#Pa(r6O9py4oDt-Cua=U16BITXD@wQ=Co1 z**g2Us@`lrh4wMDaPRj&8j;?^1)NeAK$knGt@br7o0200Hp8lqKg=G*nSTO-`!%1d z-D&=)f*EPTvQM5k#+Y9`QQ1mx%Pi1G+?KTI-&OYqXvK)EuGaUW$e#V)GTo~c6Q!Kt zY;uFlS<XkQtDeps<ypv#0fjQp9-eEO`+To;hTQqJhb{dM&voyY;AMVxUm<~i`SHU* zjYlw}BJ-<>g{pn3H%`4PP=CD4k!Q)c=0w?}KSl|j^{2<a{_|9~_rhiaja7Z$Jhgiq zE3yG-wt12Lyv0c*?Ve||+Tg~r!i?%zZRcdf4a?Q2{ljr+4lUi<^ns$|ao5zF*XTs* zMYV8VGNW(Ni!nT`>gsLX`MZV#Nl8jjuqeHly#8QG4&;y%t6XH;Q-2G*ukTl|5y|GL zPoqkw&pCnQAP_Z@x2k3ZqFEuug+SoueO<LZ-TaaeN^tG`78!svFJzEA8Mr$te{Iul z>aSovu2XfLH##RLp$d?bn3@w9v4Mq6^|-7531*0A&I`nFFp!bg)tgy)D5j%IgFHl` zf;_PKqC9dYq7^R5Lw}Tvn+tj1*(eYEt^Bp%4Q?b`H`UO5z9(mMGox^zt0!_`Brjfq zc9ovW3q47e(mO7=F$YH62yxp}r|N2IM2DEOF(sH$#TA)qX65K~L-mJa!ryc3>UF)T z+jWiBEaXUEdzkk*%Otlq*qe-@uzNa%aFTFGu9pBlK*7I5M9^yDdQX2|%q_+MNSFsm ztcuI5+0yTVd0C)LM^PLXL{aL?_=AV{^qa;XDO?zU(OuII)H-+~Di;=@5fdi%e7sIi zJa!H7UT?fzl+wv?ViuGXG$a9F50QjU4MJ1+w=VqaH0nd=)T6)R1~gtA>FR#yn)TpE z$D>cf@ib7ImP%w0yDonb`1LLgX%Y5;OlrUB;DS1cZ$f&MfP|pxB)~9w^X140X-TRp zs#1`q`MIj_hIIuTqf|t~5`}X&hQhH<IMCTN{c-306h*e7;l`g;(a-kK?W=*NhG%Gz z|3ZQhrJfjP%)-E5R0DLn+ABhF%Ki$YDNu*PFqRxk(UtI%#tVNMan3~B{Pyi(w>#i{ zUq;&9t&xHs=A2X%7Q)*oJGv=?sA(jGfU8DVeT}CEiy4W;t*-0!zmkB^Y;LAzK$}c) z&Ka=o_<<QRBxnrt!6gT9D2m(Z9^*VBD`f++DnJ**scY%-eyE0%Cx8gC+5hV9KqIGi zSNDFl@;k_1Jvx7DHZ<rhkPJgurmULs@6LvONd&>}p{;#mOTRIEoiSgqJTGp@Tt@Mw z&?<_N3_^(D2o?3cG#xugrLRuJg}#u~j<y2iStnde3wKXp5|a6v>KeC6s>SRN7|Y5l z@K7^so%_6`V2X#Ma3N!&d}-iIGd$ChihjHoIYOLEkGp@RmkCVywS6qn0;_C}cHr1R zG(v?J%oaApJ!fQRbyPW-T&|ZCV1p!)&Rq+6J9@*X*{Y_1MC%Yna`iimj|kujLa{cY z*dnUbO%VD6YZwkk8UgUPK0&Se<PT^!G#>cDLFef>I2JH-1}$^V1efO=P8FUrosV7| zsA-0t&R>5+maRJ$f)2=oPtEV=?L0_<Fru$rY$I({d>FD11%^MVLQ2oDNTdLZBlE5s z&KTF$Uz>r3LIlE5hab{qyQ=rg*7Pvou{HoZc~-fRZX7t*+@&!5rIVnsJ%MKgD_+^s zM)911M#;2@;5S(D1&D*}SBQy>;Fc*7V=<{+Vsn4=bQRi?&ao2Rfc{X3MIPyN98*Lo z1S|5hf+C0kz!QXLV5!HF%U#I5#lr8V9_nu2U~t8CbU2UE9tR15*)UlIS;Nrel7uCg z@<|;aK|Mh`NtP3(@oZwtv&jfC&dVGs0aK_OWNw)*bt-ebArdG+tD6%dN}fGYx0=1L zVBCL>y8GArx4-=~dmWZ!V~9bPFqr2mvPmMt*3>)=V%T!3IgfvGk1nAS+|;gIc5epI zK!s7;EqeBiF+)SU>BD4PNHkz;R2z1pRIoRqqO;AUCv15=%|X~Rou5ln3I^QVroCA4 zJJ41+6^ap4V0NVfY{M4Pr2N*4MofwqRXcxIu$Bor#g0n}pb+W}ehK+dHPp1%2Y**` zml5u9%fWi>`TK~ppt^O}90zLq`&{n8exe`f`9y7{Glzx3z(DmLG0^NoUg;9BU-5gc z^SOfnYeez%hf}wnFH=F-Mka@G&k4QPqAwJ}t0A)0xC(79?+C-Jx|Vl%eD3M!M2~-% zAjJVFPypP|qCVyk_Y@HPr1V8v=^YgZypupHItg?VB|z^B+CX!UNyAk@=>elEu|D^= zjFW)~6^NK|B1&y4q&DqO#9YLSg;Wg*z+O+)rktiBJo|(=Fed4c0^t6bq;*=r;8fU6 z2m>0s5Sn}z2L76-w)s8hYF!boriFh6%|61;Sj8(ob&5Cb__k`26a$^fGg9pb$t40B znDYlKnTapqAKpLw_TfJZsXC9Z>OKP}pd`s~(DMbdi+0KM2=oO9@L|+>mEWJ}EgEZz zEq(3?KxR@bxZzMjj5eT@@by`Oqhx}PaJ=!q?V(-y8V$MF&Ijd^@!L{rDQtgYKjdo0 zvfP|K!UWidC4r$LfoO4h1@^mU?dOuhi<VLOV|=Y)r^p2-4yU1SHudD}L}obH`lY^3 zF_h|`mS70hElJ46!p4P#SPYFm4O5TfOYVi4K^!#FUJ1KNq&#%<$G{r(tx<Qr;1UWh z6n0v0_0P?ASg5yX?uBwIXVHH_7OO4$a<yeaPR`|%i+`nyl~yC{!1j@zcl!o)Q|-ba zzNxzc)#Y9Xsp;8{_WRAdnvRrHrA;4sM8ULqxx6x9;yigHDRNCdxIm%Ij*dJ>8ifKh z4KaP6-FAolEJX&gu6|L*6N3IeNAg4q93izq$^}FZ_ao;G20y;#<K2JX{cYiOK`R@d zPSAs_hRA_W1{>;(4^!t)%e)w^=R3aeX-h;4yMbg5NTxJbNS=HNUCox+=||9;tU%j5 z`>(^MqppE>1A;hqAszO0c(W$CjOZF=6yOSeQZ3~fT=Ah2|M!59Z0Q1`K@^Cu8;cr~ z#kgiePoeISjxT6R0iJ*0w+K~T6{@{z$=_tiNHf`-$+J`2*8`io*$6PTmoa3?%2*;g zL7yD-GwFjgTvE}P%U|_V^7YD%UaE<9x#v()Zw`Vg%JWxV_eu)!<KVwi)PJ5Zdf?E! zP6{Y8#Wxu`8YzUTh1Z>u8GBViyi5@z66f)R_Aiw%^3>H8;TV4xe5+YSb8N?o;}-I< zZqQ}?esU3M@xF^l3)o+BGcB^Z@M*vS0yX)<?>;Lm;p!3!iCD3=ONEr02r0dYpil@0 z8)&$10|23i={E{Mwx@llEpfor{^uV@xTCi82+(~k@dyywNlCHdxdsQ&Gf(RPXS@ml z%=l;fIR`T7JM(`6=ccq1&f)B64072R0FNi3V=-u@kJ$dNg8Wy8aQ4W~>+mu?0$xOM zSYdu?`g#Ez2?!EgPr=bp`&YFoQ2e-nm%{RMoHYHTn)>Upn?*v}GRVx+Bj1N&%e^Nk zia-h+VSQ*f5oN$Q9t-mD1;>Shn}QXxxJCmO+sQ{}S80F2Wn=Xh?;qa;VaOG!FqTsn z9}tG_R8#Gb6Ygs>{POq>UxPiRGQ~~XYS+76uC$Ta`|vjjP_e)vM;}wGfeN8Afcu>0 zEY7(RnA+o)U5eq*i++Q<=%=qSTnu3_6dyJl!u4O1+}*pc#xoVVizmXm=g$z7+^eFc z&r>)>FMm<cICjmx>KZKhu)C?TnDE4HXw3J*H%fO-)1Lo1n}i~tL$<UfAS8L^FWSQ5 zRa`yu2Y6>k5)iL_DTS1Qy%RYf-&XxIjlE0E(3ALo9U2cHmvIXM6ahDrvEvg2GB7tX zm*K|-DSuc?kK;BHzR$04PLY9;R(yyQv$q*!7uidIq=6hJ14Lu9+X8IMkmOAI-)|L* zlth``?g@eh+7wkPR(<s*+m!IfHm2NYAqpew&F=KBbi4i2h8Dm4_Z{<eIS}Rx$`23k z{`H@#+OV=PrD2<g$0e(W{pM5l@z7jG+i!CrM1LlK*yd7J*{=tCJkr*OYkM5qGd+Cl zPN(L)AGSH?TJx+D+s_aGd-vnRBtgab8%0IRJF+sV3$;<TESQia?vH<6dOHklcOE{! z2VsTEF3ppL6;qi}YjJqRimK!jkJm*C)cJxuA=a9y6Rg0afl@^ZltrZ#Fn1)Q9Y#+T z^MBKYlrm85J3zP2>_9r5yAc;v*6eonGSX&q-U7)pJ#?25;qYjjyPmcqK2_F+Pl*kP zvB{Zag+VhgQLu`R2lJAx+b3XUaV_yYx7YMf*OPUJkF?W0CiNC&A=IQ&o~P7iRe>u{ z(+tFLfOFf&=l1+WM~{as%e)vi$Ofm<FMp|C1a+!H!WlVJg{c+s{q11A@Z-UzWUb0V zm6MG=r6e^=Wgff!<PjQ3tm|O+@8>hz;@AwM$L<ERv5Sahwxh73-4jw?!`ENHh&t%s zq~zyyRp_b?;(bmj02EvY3XhfmFP_oTH{k^bS2{a2TR8uj9=?!A(E|vLuf9NTaDN73 z*`8ip2WLE7It_VM18B!%hl+ij-gOt^);D9<qxW)1D93gfm%K3X;P2k<dfPb0D0~^Y zY}fB8fz{qIOm+d8db>kTc5lx+TY&dhCVL>r;n+X76~xr>+Mox~-rjnVT!wS({2Om6 zlQ}b9orydc(ZO|O?cv|BCs{UF8-Gd7NNmr*<AMT8nf<&(g&YDbvh$dDpb>G>ZRv=@ zIU;$=*QM9@Hbk%Yqu)y=|J;%(T^RY3PIJI7)kvl`P==R94cWsf^BvJB{$ku%aIKVY z%DUiUiob_#EwcU^6bsqKEWZ%o&UJl{FRuy#-+8J4(PMKQY*L||vAWPw$A5bLURLF| zs1}E&Dk@n8DqzKug0e!*dGHrIUV9gPD#Q;gz*`l1tAFg0xEKw!^e*0@oe^eE2D#)M z;-d9OV!*r7f)8`REA73DE9DZH69Y+uBSFAn(6xKJk{!y(sX6)-4H(z8hy%enxQo(d zc9)bPwCC;O0b&Usij+n23V)l0$an|=OBqJ+f@?9ArzXYEm8T_`JXyp_@LnCIqZ=1? zzXW9m<t$-21r3E%%fphM0#&s(lT27K61>2jIOBH(U-1e#Vg$j{@bZ#_ihmQ~?jJ&! zy#}#uG1(>YRZsxyZ^XAtvH~%L65j}K$UYOgppG$xtW6B(L%K!bqJQ90yrGR;<fPd< zVphB;1$(vIfhDUa2l_(&KX#F2R5mT`?7H*5#Tp7BP9)0~LY5}<1Ng3?pTUmw3L_mi z`s)$;REJB=0ghFnY<yi4z97rF&w8OC&q?IAl1-({voBY@Eu=1zg%V2Scj4GsNjl}W zyrl9GyFKae9yBhz|9^dG(kGCP&(XU@t9jdvhA!3(8Z)HF<BMwWHvmSIKRF}laD44L zkDhv49pm73THkm5ksK-@U+}rn{qAm~`~7=r+U60WUg25$6ZM2A>;Q3S<_J+eAzJ%f zqr)%(+G0JetJr*l#jpTMRj(0OUQ2j01D#h=6IcqVSmy9jOMko^CwPO*s0X}d*qtqH zbb-~uZ(Pq!|D0+<<M5SgD!SB`(;hZKzKLB9*8&<b$ra>!fL-64_XBmlAWsa}Yo<=h zU+s?Cbd*LFk`|vnG{b=|EIzK)pg|`0HiB%-dF-0g6@pOV3PGqcb%mgzOo1l~#tX&o zX&I>V1$pWUVSmMRY7o6Z-f(5?uQ0%nsmtK6xbx_D4t|4dO?#Gnr*vMu_!M1^3v@XL zkTOMGtx}K|p<4Q2b>q#Im#Fgj14-z|SBiE|kCRkY>|&^}7V~M5!o)t|wy)<|@#X|I z<yk+VY8+58%EDmo-D-#?C|F!B$2JUG?Rho)PXnn~4u7=1Z-pFX*lO%%U=IbRaVdZ^ z&xx0iNbp;qOyGG1Kae{3;g@0`7mq~hc`%&N33}L!!rf6%^Cra#<XBb57*QVJM!%E? zIJl2C0(uK*`k1~KA)Y#4kf$PK#Wc<XD2>YlxbS&^8<l-TxH`1ptR|AIt_?*geaz#_ z+nBGIbbp29Z5jpYI~uK-E@IyKF|T2M<Ebd*;2I$Q^*GWRP0T~c^Hr9>XBy@v0vgSn zE4{)b_z9m92d=I+mo8C$(90U7L&?-wdfMJEqZSOe4Bhs@tJ(d|`+2&9kgk1b0_`8^ zmKeI-+YxTn$>I&y)DeHbk}%0vFqlvEdTvRut$${=WIY4pkuvecRCL9KcydZ1xPVX` zU|8;Hs1^(OdGbTL(!rI#(!q}=ZsVa(-!dio-+T)4#XTusq#)3a%nRtv=EdDO|KMwM zHGGq9+0aV-8(TJ6FHR5hhK)~~-k<H0zrn+8H&0Y@*`47~WLBQ*F5K{6m#=$J5o)Hp zPJdh6Li^M{b#_<;&inAT#Q@vCIB_Hq7t5q?%DGL2^&C^?Ch6C{3osb>&2Dt9Y5hW+ zFwF|1+2RhWyl(`5?AhyNLNTe$6xO$5nKIOB&=RIhwwmH*S<MTwN(Rm%?p>GN`U?yG zP|j%*4<VF{7akT+BlES?CK%k%I2wK6ttIW0k{UX;mt*S{LrZVypD}R1wu4;{W${oV z64N9Wr~d=cNcw7*p`ij50XCD7%oGAQG?SrBDu3N?<G2xj-@hV#It7SXQT&pMqCoeW z9<~o{k<Fn6_7<ojGqGA(awYka?O)#+4kbzsop|8~krc%l&c|<NNb{={e*CIPuZ$3^ zkoi@$|B$-T{^^PucRzjLe%=NqZWc2?-hcS*pOw1eDJ#-~U)?`0m%86xeMx@Ym50&x z*MA!!L?VB8y^&HSpLe!tXz1gyZpON$&X3)GU$)!fdXr_wWQmg3U+@3&;r4#!KxNs5 ztm4dfc;(VCeWi2BxRAuIBu2{q>A1J;b!L)rKpw6XPTg?9xT2Z&J4<sPyQb-I<}+-A zCr>ykld5aC^;mc9Fs<mPmxn`B+bzwSHh(@&i*@~W5>`_WBaHH73#&3>f)zl1!!^sK zXM?lrjn--M=@CRLa#{%+zocCD!$_TZKQMtt>VcmB!i7OFdL<a4namUj($V;hpR*F4 zVkR@wj2~`bH7x`6-VVp+gw*`9wNE9AhI-wCbKK;HXFy#~(&j{A-1XLOPWGYm#DBgV zfYv~(LBHzu2QVL4c0eKHkRzatr>~K@eOb44`$Sz_bmK^;Ynl_KfqBLh)45*DKU>IO z$joa}@*sa4UGt5vQ7HJvzLeG2e4|cW89HaVm?Zs6s?zt>;i<M;BIcROz*dj_HTL6d zWyqG_DiAe%W$}U4LdIE@oMl=rSbyc0Sx#Db77H<34ia%fDr9&$BCF5nY~6`1xM|kO z8|I<P7az)Gu;`GqH>p`s@U^N*RL&FYej5RSH%vfy6ZjiY>!0hv-k<?`;+e@-Hi~`R z7CsMU?~D}NjsZ9M*K4JdvN@LH{I0417o5FfckCQ5Gb@X20G-NiZCiObIe!lBD}<UE zV)|oahXurVC@LRt^~53BuP9XOw`>ZQr6{g~2~iLoHK7%KyYFUnTPWo%;FLzJT^ITe zC*V1W1=~(6ZZe2P1+lnyK`ht>vC!v11`(g0B{GAqj7vn2L~@i!zLtpJ(n22p*jbNe zM`9gX&o#JN#7Q9B6h$%FzkjpYh?8W-Y1hv}L7zu!!<3l4?#nrs%g=&!bX6f)nrG8D zzrO@?T%>8YZ!HR%DERcrA1+<ABS^P>Id;8|CPUY|_+paAMadVywYtJq_k<W%9(HwA zHh@=7XBn4F8+q0k{`mRFPmai^MIeT^EVhk^1&sCHlELQ?z19FRzkfU3E6`*4dhXwW z=oH>~nsi6k@DPq8U|>D9NYv06zJby1{X9o&n&~Gzpi_UN_Po$QN!Vf~5a8&)t&oRZ z-E4c?BD@*p{5IlHy&aFePh*C$9FK!fZM;YQ&-UHLLhQ@KIT_+BNa|GbWz!tK`X;Tb zv*o%FE=@Lj4gk^_pMT-Oy5CyP&74hksGo*|t)jtCv7FCN#u)n=RXI0?nbfRzH)CQo zXTS~-TfaoHO0mV#o5Kdz_yM8Vm@vt%L6V@&5B9cv1-Fw+xkh!ILHC)E&UpC5#$-rt zrOMWXl~W=CVJc14+GaqCZP~>3COA_?zLGX^TE#YraH3`{qJN!ogPB-lVUUMN`Flc3 znFzY3>;sVGVOXRY+@)ZYFBHx%UF<7(m`@MHmd3_-;Yu*6itpHE&evI$BjBPhJnesv zW#hT&=otlHaEv0IO=5FNYUWfZ;6rrLl?rW15P=Y^lbQb-(_V^z%B%T@f#z&$Hw#jX zp`NmT?TZ72X@8#`X~@|q4Egw^lPM$e-Fl?=J7={p;B9jG3EAWlu88etWV%E}!IA)1 zJs39FjpE{r-53d#ka^#3(sXS%usr1#&~Pc_5uC{ty~+S#3@s3bg?1Lyu0Al6e-M+e zM2n*jxQ}nto>dVudq{Tq<)#KTK+05Z*1C2Z(kcP2Ab-(A4j_A&InZA0I5;3$>?YW7 z+l5hb7MK^%4Tn*WZrOIuu)6;ccA!c`an6+$hoU~aKqrM<=>%xC-AKeS^$cDOZ%Qf; zPMxN3&Dm)VajEGHI648jUFm6htaVz3?r@|N08~H1C`gOMr_P8E9j7T>2p?ARRz51? zB+7h(cz<C-!_YZ@t7^)banL2DuH~%8#I0uSGvAHEDm7FOD+vOp=ejWPLzWs#iKv2b z4TigxlDAi}yWlM4`fZ&+*b&^UT~a1bJ~*{E(FhJ&3??%rBd-igGh=3FKTP?Wr{H~9 zx=O<1X9^Y6iE+3BHI++`fSy-b9#jT{US+8WDt~k1Gf2Q2LYO@=;;pTx7w&)wSEk2f z*YBw{?#hu``*QN+REE3&JH2%&WF+ZB)6Vh<W}#_-(g6(jID-CVR!rIAD|gD6kingr zsOltBX3hb+0|g5tSCzofK=dZR!S>7s1rK~4LLQAXN*Z-aaV=DU+kuxNPHM}&^&2av z!+!#vYF1=s<q)9b8s)1oU+V!#{D~7D|4}`PuN-;QiAkumwmspRNN(RiY;FXUbK>IU zz$~qiU=A#$#=L~usCu0Rb3xW%qtxo6lYGU5Dbq>CG;b;x8uMqm@F|vE4W<8HmW!iL zF!plr#{_i?;EQPhxuZXU2xl-++sUMajDLBS%;!%(ox%M@8V)dzVe`e4^|cAw6!6-? zUVTZQX-HEwUuWeG!*W2<GYKWnF4j^G2|}^ZQViB0^_@2tJ>x6D66NAZAbN5ObLLfU z|M}@YDx+)})NZ1A4-@)=v_}LPIN^e{?2GmFg2<)M&2XHM5gOiG@vVKSN9Pnp;eVwq z<I?6iY)p&qkvD%^++gnpRDP1`{OR`N&vCQLnHD;T%tfjh>^+P}1qo$gIKDk2NhpE~ z^D0^`B&lX-e(a{OX~}u|Z$66F`$MzlCmQ9l6gU#IbRK6zI;|hm;A^nn#s@P<zQh_1 z&r-s~z|02gygwdKg)|FFXV+61Q-3-XhqkfRcm@;mp#FKqjo`&fXdGO-2c+EFv999Y z1f_Q1?VPAmrg;%3H^&h`Qb+<$j%!yc1!(g}#xe`H2RJ%em+N?=7^sKw9iJsVra*{C z{l~V#$cgX_8@;oS7!dG{3z31CNVayU`g)49(jA{ig8ms;=7tr)!0pSpwSN!CsFh3b zp%DD%z>bcDEa~(d2`%8m+4+VYd>Yj|XEK1+!*sKV1h8fwtUbL>gv^;44U1^*4!PgH zQk-UQ7Skiwil>WGw6c}oE^JdW!7^g(i#z(k!OxiZ<IY^q--~{|nS!xlT&tDe9m*%? z?pb2^>Bcx-YJw~{$UIf=ZGUW<y;)3;-Ity$x;&3inR5@<*xIqIn}Iqm(}ia}`T-2c z0zH>rxAZ(`TmUyb<Tq#GS!7Hay-eL*9pdlhVEt%RfqfL=n)8BGONR)3Hi$z4H_f@b zz5n^{uhF%@1VT8wp|XFz0R@Jc$nv%Oy%A$1gb%GRD2TIlv{v~l#((6CQyuK#Su(Xs zdQ6cUniITGk2D|VIXH<Cm@Y-GHX3-&^UDw>XC@CPtMSxG==W2jg~*5Q*jF~5JDebh zPh%01+ZsgR`*cK#o1=UGa9yTOFX_<;Gm)N2Z6Je}{9+@7Xqmljg9XcHQQY3$Me~i- zp*G%EDt|M8Y`&GvaDS(@cd{A4`E2PZZq;B2*u%VVip7&~HW?I-huUwysawwvg7@>T zo=g*mrlOT<G~h}XVg-&>2la)!4mR`;0DPi(8bik{q%@Z>!J9dGGWoQ91U7WcyrA!L zS3UX>XYgS~_ypJV=bJ}Y$b^-sLl-4Ow4BBgN+)gCZt%K<3QQ`@jcJ^&Rq)o%;9&`5 z4N4{db`XlM-FYcK{mBuw{hw0M;oSWw426HB05qDMpDWP?00j^E;Ta2p5+arBvl2&z zOcF!U{{gf&8Dp1m3j!1YIg^p76az3YGn1iADSsMEbK|!8zQ4k~r1H!PB>|8Go9QK) zwv!%m$a<!SBnMieEKDR)<-=ZQ^5grxz=sxEJL3Z&;3M$8UvPStz+ZY-CU=D~s<iHI zcm9yjYWH-<lb`<mAr-hS0B#qM-#vWz+rP5xE=^RKl<D2WVR_WU{_f|^_s8lo)ZP8o z7=N>|f4|>an{7TF>(hysz8n2%@D2a?zCE9-X5Zg$wJr+1$+G)jAO7><pAQoTnbz+_ z6(QfiHMNDx?{a5VYAmDMv;&}+6r1{Uy}RG0oAEx~3^mU7yx|W#4#yfNZgZ&osg}(h z6Tln3=fz9a$)W9mcjVhE_>=Di&Y#cq-hWp^eR@R(072W-s5E075AEsH-fOpc@y!!3 zF4dc=K{%i<U(%N+s>n2aO`na;;7<a!VuR5tu@hL^#g4-3fky)Kas-m!KI%6_vVMKR zq3!k`5!b*D#2VRwBe8=fb&s5u?FgL+8N<$HD$_-{7eo}nEw#$!={v|Y0j561Pk-8) zEL9ffER~d@ySlHtXCfH|TBe&ocn_3kCJl;ECaeemQSmUV0sKJC8;5WPng&Bg(AAk$ zxy}N<-+U9LJ6A3#-=I5FiJR#D<Bzw`5oINOclAZ)A|K#TVwBPOnnM$rCbdDj#Ux!D z^uTU@NmAQXr?`X)Rp#~$l0noidw*NhnR|m|5OX%&Mf&T|)<CSU_#<1BL~aZgEB<-$ z7jR?_)u<7|9>;+}CQ?sTKYV1KrA47^o~~>iaEBudc^&P<RB%Bq{%g-ayLuSAhUfiI z4P(#nUiKdu6Jj-;M?|o;cBE{$I`#+<Q?w#cW;UL`#F&+-Vm3hq`T%D?9Dl(m7?Y|K z%qJ51>MYu#iyZXNU299T_k(Yno`XXxG`t2AGX@wMWMRxr=b*JJ+$8C`>*~*bh*4n8 zl7wH9EQy_Gm7ZPPw!W!1+2Wv7NVp(9O2qB7(kTQfFg}x(4ExDHf#M^@Wx0WQ+i_?~ zHX|w%gph`R)+E58du7m}<$q<?D_H0`#NyhnYACGXvhYwo>Z*&V=$=<l-S89iWdq1C zw`TKj@9bs?xr|66t3IHuON@-wz%!OPOz3``tn?6mPb99u>3TV=4Tsjg<7wOZCy(xd zem&o3U~wl1(_>8tII=@JkB5GIWNv&JN?S=xCJ<68=IyiZ+U6{LW`D4kW8E-FOBM}F zUbJ)9)ex`uYPw`0)Q6)02P?%Bf|V{0`MvI1-W{7$-OFll{pH#l8)fz6n?L})2xu1# z%-~ukh1|CcDd)3tAQ!?3{_x6ZRJ;K^&Vk2XjE<$PV#cx6nNzl~=*^UMk_3+Ds{f5R z<8o!!%;7yq*Rsve+keZiVfHD^_?BF+lFS0U(PV??b{{o-u={cjSieRid1_0Q6zP=_ zqVgFnt_mkXIbeF}n0q^r4|-o*!+3QfP|J$o(M)lNiKDaHm>6{e;cN~=XFhu$^(q=X z><o$?)~1^u4pHrJDmUf(PA!!yCp{AT1p5-wUi@(6S;fO1jDIggER8PAmTO<&#d5v4 z0}eG%16)A;CsUWrN=&sS=e8SyRns@)8S{fj+N!&6;r^uLNXRY)19D>j<b~oBUe5@` z<hCcj<K-2nu6%`vGR;B%&;C?(63JU$WUq&_YKI9Cxm5V|xX2c6MX185ESb`;-4QhU zR(3tfUlIUR1AkNAP=nm6tkmyTgLFcH91<Ykp8WunQ07xEvpcKGFXHtGku`WrYm(qK z#+rXp&TAw@;e;8AGpdweymUc!NLK-_=7+^cF%wTqKxE2Gwx4b!uIcRjI0mop?Z?aI z<SEkXl2pDOg@~y0-D(48UZ=NT<*!N9?5(TrX$+ACd4HRSzzv~H)C^`M1Q-`wk&TAO ziie0U<MN^H&J_mnEFt}XMSGKvuAp>1@bMDmW443|d=yMsFF-?GsaIwbc#CvqB^o@I z(lKQ%lr!nOlogpdW5Rs0OJ&VmU??n)!-dlB%uJxnLH22xC06l*STU@ft6;d9U8GGJ zM)9#{QGZx;D@1weRFV}}j<A7yF^MV-rvMf#Dx?574=Di7y^OzO0ZeHCtsZzB!sjzv zR$ukw4&%{bJe^*7WrwcwST#?i)o9Ay`p704kCH#9(n*rVbehuy50dUBV^}BwW;9eW zQR>lb=cK0vGP@Vw*DAOfx?mNXe{2WJUR@9scz<n4%gP{hm@N2YBs3V#4A-Fn7c1GU z8U~j5PO%8rr&tthtnNM{4<S*kcDQ=H3CA1lArej))gliG5Kalrf-=?tnAcU*f?`Br z`_Q%LX#B7_R1%Xt6z{3dvI3QoFvj+TaTFS_@M#aR>md7Dw3QOAqwyqFdM?2sp&w5} zFMm`vJW96NoqgX^nJ2X%9C8&};&`NbnE@BvEd0W06$%QinebT73eHa_xumQ`=$2s# zawBD>JxNp#&GXk%RhPj1lUHk`<c+4P?u}H{q{_K+jml5;xs^)3ApZnnU1((ya`(<x zk0;ruq6fyq*zCxMN6QPV+?<ju@V-t-7k>>BRI8k0HlBYY)|gTiivs%jMySbV(N3YJ z5DyOHljr6|L(01#Iz~(aVJS`DB4%r>Q{acL+j@t(qvVmRY?CCML{2p}POrF(FwI^* zl5#i(<mKRQ79*C}l++n!WRiR>Xy;}Q+PAu%MOt2S67LLm6DJGeq<CGeAgHgoFn^=4 z=4`35xe&XlCAmuS2~X;ZTjncHGihGfxo2S~-9+DHwcbdR+=kXUq&HacivrWazNWUJ z4=Yw0@OH`Fg1MV#g`~`PTbrp|yIbVuSL7}-$!&8(b*(MFP~BX-d!Da?VPT217;6Ea zB7cju7$WDIFx*h_z^xI~H{cbiTz_7Kf-c9T0+!=+CgAh*%3wfT(UzHol4Q<nhoSS2 z<4}K$X3a)BRi@c041R?$I|rE;&x)bvObmaBBgSc0Ve-Ipu(&471X5T51dH|A#884V z@RYQ%ZXk(L@kTqSa9O@7d1oi49jl(NZdx8uJx#q6eEnfzZBxqpruxmizJFovSnKGU zwGLD_LHn)>EW#4D`4g#&s3Es3kkA@4`&DPFGl-^H@eai;=ExD8ER}lgqVhteF{&)h znn6oX`YnJLj`Lcs6bWlxPUT(GE(_A&e{m%g=lmi1Y5Wdx7D_ALJK!_m<ZNJpt?1@w zK9=!?hXaUKQuKuikMtO$XMdVNM6dR3b9&{SCCUVxhYE^oyx=B7?T8*uKIOI^Ocuq< z;wmT#KecCB{jxtAVRSDq7Hv;&7bf&%aXPmSDQixr7l&iTz0_6!{bBm{m1m@6crc;% zEw>u_@b=1e%-4_Xc?5#F=|ayN5n?#yb~%KKe%JZnnqAH>kuIMhe1Eg|&wf7=HE!uj zPv|1Hc_K9(Zcc4oH`jD@h>TL<z-(&kx;)-lNZ#cfHKb69UU_}$E>D_+#gw$R=Q?(7 z_1e%>3(aQI3AzYE4x|jmLR6R37(5ha<zUppMyoU?dV2F+)l-t0Ene~A$MlLH!5ry> zAgW#HjFXLm#q@QsE`O-7Sw4?bml^>c!xadyoBmM%w_c7uWV~dvWd8s)HvWIqeZs~^ z%WG5y!*5ZddkH3UjbAt7<30~{v#07gyQNUb0P4fqU`xpO!}J{0%hHT4Rli+*-EYUt zrIwo5%LBm_1oCtxdq`6AWJ(M!ZSOxv9c;Qx4nZxOebw!6G=J?~LXTRj3aC1H>27>k z0rB2-(>_-J<PHkY{9X0W6kdP+N9?5aW9&0E7Nc45l5RmwDRrZ$$`hzGu6hjr4GlnD zm{nh+=OucSEwlsyeY@02vt-$_ztL8+%9?e={ur&BKnincpQIC$dpdzly~BP+lqURs zk5r((5}|lv9ZyJXR)k^4(};>JpZ!Fu5Vo8eZJ<s31P5ys58PnG4XK83EBtpyA9m_9 z@6el{OJ*m9KSI}yKJCLT7pwvXdTpkRp0`&blm8(4KQUlcf|qd%0u%u`ld<Cy0x~g| zkctK>f7MytkJ~m9f6rfG^rc!L;)x$3rSz#y+d~fpu9s|!0-FHU+Von8EIE?A$=+Xo zGaO2my!6^RBt;89NF+zY`QprPXue3`#}|3BFjBHyWsBwZS>k5fy9K?x`sXw5>0%&^ zCzRh^Kl{gzX}aJE%afchuGdpm*Q>=%^m0?|e|p<q#Zt;hy|{{%N~6~sTU9jm-M*~) zvZleyX1guwRd*E&VT_1Uef9SGU(bHH9wkVHxKLE2JR>VthUtaQ6ys8nxJ7GW^E{8b z{qBlKyQ;LS=OA37qoT%@EGnw9=!mH7XliBOBwW>YMbqo1rFmN{uS6DYPz%^RpKYFV ze<rvAVco`cv9+FTCZoui1Wi2EhfUMj5I4zLmhge>{wf7|t9_Vb#uS$WY3WtDD?#1+ zD`6sAGw_lW(N9+~kJh9~-Gp}4z$(9J(^#sU2_+XXmyD-}y;Wjh?|U?pt-;btq*1@I zwBU^5-XJRI<*<tzHfws0pLp-!>%e~3f1++R>eky8D5rHAeT#I~Q#h~V%L)iBs@*Ny z@)lGFbNG!RMvr3Ahfiu)CgquEB-(gFd^#RIjWf|}yX?!x9}mqmzNqNNOaJycE$oUr zOK&_$j>QxZXbEg|nV<vp8Bvd!I$@djyq<YpB%UMBSe|>=-<IG|pk8E}DOl1he=%~h z1jjdxZsIL*)MCmp<t$a{5O(kE!?xIkc9x1sJqG&QfoHYr?tgjx+wX7P{&AMV2bqsc z{^yABKE!iQyWZF2`2bgyvW#bsxbD9Q*Y-SD(7&_qFVWvwTyh10p#Myh$LkPF$b?$z z(KcmeCs}wN#2jQ!m71lmFD&xMfAb=f;a_xEPU9sN&kMx=(k2hE;+&~e9mzdJV|>!= zxdG1NFD7<ti&a(D_DPG+B%kNJr+s?NJ;p(>q(bUdQv2lT@yqvRx2p=QrVmiPWD+g+ zZEI_s=xO4W=TD<INt$%lKB^g+0dOJ!ZW(4WbFOB1>UcsPsu@R2=lBq%f63@^<8dI3 zejbJWVO0WDyu+#|(!^IiT;SXsYoPL+@hrPggMs>t2FFaD24F%?V!U%G=D}w<48ts& zMSw>!;*f{k2m=H3>Kyz@e1PLZL63ni3}gfmxVQDv(o)|{DCNYtk9R>(iq9?Ln_}5E z&z+#j{B$|0EQM`)e9?|Ge~c%bVFV~F1=Lg)x0MAzl_%gF#JUEst|O@7R5v@nd4{xi z`|TKq$k(AWT%pHsmS|7ER`wwgKOmQ8Um>xUQL)>B`4McR=vp9BqXinia)7QtXy+Ax zwX%j#0<8Go!pjJAh~X<sADuWCGS|!`dZDt6NtvFBs)0J5kO!jbf0*eU_@QJlPh#Cn z+yL`G)!ss}0C>$4J&U#<p`hVeQAs)=#2n6wc#IGMnWbP|Wl{+5b6O45@q|2d+K-ry zXT?i&yYERLI|dGp{8^v@2BXaRAvkcbMfdMJ|Me~To|bk+*Vz><U<~10L66Svini!2 znahBjsKPX?rXl(bf8lJ)?wE(ze}uBUG59)U?yufJ8~HN+NRRd_C=@Yf^B99IMtBiQ z<6I}MQg|j`Gw)EDF=6-|8vom!sLqR2u1U(HRuyJ8t^!a~MYOIz!liXnRShnDAS=V# z))qCUpBEt&lR0h=S6rSld<#|FdHxhEJ=p8la4Rb$Gv-ipe<}B!Vkn^mjttS|DY)J# zn}X9PAJalZ^JCE9WC7=1!fC_6p+%~mGfv(97Hr&MCV~7rbcsHnIfrR1Zt^iyLCZpl zOu2}@UE)VeyXzruIv$~WfdtX9xKRIuWto`XAz;*Fhuj7MRVpA$jP!O}EV~m|1QSH^ zJj6+}+?W}of4J-6j27)G#4$@C3GgR5LSKNMpIeYPZ*5<MxB>zaMm)(CLX#Ug7j)TI zA3qDb`!aZ<XQ1&SHu1K(w<jEYI53y7nxoPu6@<Qk%jgt@6`6v@eU4#)e_407?St%R zz&m&w0IZT!pRu2YM$}9%s8lZS*wGagB9H0-C2|LXe*#-&oQXWU%rII&z>hA&;vejg z-3`_SPD>#G#IXWJ)gf4OC5cizRK`T5^MLOj06Mu0w8diiP4E=UX}UdmilqQ=&o25f z+oK(ijp!;w(1=DeF8Kd@&QDwj0g4t{`@*7qVX008>=-ORmtB8U%!Y&qbIqEb1zjww z31G$Pe*p@2VUgTE^Fp^fC(o?al6u-%;phOqaWqH@uLNW?78)M;0zoUKCw659i_8d& z@H2Wi@H^eL-xNWV3`Tk&-Iqm8Ch-@VG}seTLX&wDmi5kIGFWWdVak)tY)a)1Cyrq> z(h`im*v`LP?)RaWHABpXeN3Y<Hk7wG%pL0Se;MJ1puGR2AP}zG7~5;j{cSb%Nwn_8 z!bR$EVQ#$B?r4lwM}lte|2}ZD1x*eCU}#590pKY5%>YauW)VT6`Y@0a$P5Dr1N`7r zC`ca)Y90!6)4N58<)ctgmxjV%?cY9IC>;7z?D`&O3m*|`V)}~%w)>=*P@GSDXYOtZ ze++f=Fc`Y|jws1B&E7S_oB%7%Z?RwRXpXvM&i#KL@Y40IOCqPUfPr3W-;+<xkZ5uW zFv>8-XP6uV%p5X|@fpUyIc`8i!DOcW7Yuw(F~0k9JB^#VK!Q)pde|-?@7#@_A-%l* z8+r>*o%7bkTCUG`Wk=WBp}y>qCrFmje+1JM>QippY=cb<r>njZP@&IG?JjdBb9DwY zZ~$M)vD)u1P<#H5$62-iv$w5RwHW;CQ_P1=IUW}>3wCB>#>6GpayRcnjW=q)3ii8+ zVTry-V6fCgwXmgR0$r3t?NdwbKfk4Zb?A{UD`&`SZkXvI@i@~_4aMq7+i;Vy5A5(4 z^C#K{@3{U41osx)m!Sg#6qm5W1r-7|IhSEO1}T4~T3K`4#u0wkui#sjRl*o^;qaTR z$c_?UMbmMrY*hm84oQ@Dfi(`1%CArNbYlQ4XDL>t_^@-K(cRO>*A2>x6#nEznO@{t zi_#Pq+rz8WuXcAAG`RZimE>~?984A`zqx+()wkAO$W)YRDKD;Xm!z(D7r$@b-dD%L zb(epM)_P;UzD$g<n_uqTeosr^jP-t~8=Aar4~MGR^_PiKd9F4#zx;6h_gC+(0|!>A z7qW^cpYob5d6gy?*+o_uA+;fPlMdhb)wh{i9kc>RDV_P~KKJfVI=2?yC}GobI(Ov` z?WHO<pDtCtaU@~Y;L2y3Y{#y14ek!Ka8rLbySllf$!*KL*mBK_6<L`FW{}=lhBOSr zQNbrxI!Kf;LS^|yA`4+8YvJ*wTKKxht4y|ZanI-^ky=R0^xsxv?_$DfC2|`W{vz!h zR3QULLko&4vds;cPvI2~6Zh!0<KT8Qd$@Ov`{Y#?SFX~+8uLQsT48iJTlf4zf5U%Z z@^0r94jRsKp-r|{!EeAxR0CRMMfq|KWH8K@JlNC*p<lz)05g|zbMI)YC)e{sH}Lu4 z-o<P~S|hSR{OaACzkdJz$9Mmpq_RQ*Gb^cZKgOoYg;92*^y$)Oo2sj;n>}!4r14kh zfA4u=+mc_fHhWraZ%>Y0xoWqs8=im7qnq)MRB8-6I78jRK%bK{VfILr6KQ|`>HUw_ zF_|E2<g@Y3_p>6cl#uCD75?z%>L1bTEJRtDn4Y`_GFFtGG+;vv!CUqx_H9BJBnvBw zRIV>*TMad+HZi3nZI&t1f`z*2T{rI^!H@DyTL<c}MyiAXKa_6z3NMO$YDa%d5jw>Q zoj+2W4)<V}(J+v%nLbqA$Ea0-1?pnb7Lb%+@J7i^=X!dn+YU9cw*P!tXb6ExX3gf> zGoPBt8%zq3x$o<{rss*bzRxuAe2)j$)mwV1>h53~#7To;fh7@3OG|=Khjv)VO+Oxw z``T*>X8tM*b=LV(u&*M2Vmg0suD<*Ahj($4l&OM%sAKj6k{3m>d4C&T+BxFm0p+NA z=062jSZlvQKJmyxYSgnuD%C)n@G84-X;{HnguhM8M<Cn)6S*ph3HT)&!rKW!8fS}e zcWMb+eEWUX+<AXU6_ZFMGq4|d>TNrf%Zv1jF-7ZKDDza&=VDoIgt33YM_<QC=E9ct z3BmJ`Bo(rdGez)Y@Ru$gs>)KBJdek!vti|gWdLDlvu*FlUmEv7gP_Hp<`1=Z4;Y1{ zO8y1m)q-=;m0{$dU%pXr>s>t{lJQ2xuV39{KU9N@BNB_KjNr(GNB$L)%AaGIzOQ>Q zGf)n2zsEs=$s1tTXPSRN3LjmwMY-@0Nz;xP&2Wys=#No6z@_bsMUg6<EJ#AX()X>W zvaKuBL(EzO3B+>*av^#Icz386_mLmr=C)!eJcAgRbPj^ZjuB)}C+p@o4va9KYV4ZW zOySXC>>3)Q&c~j{HUIwCbuEp?X7A&10)dJ*kr`E#$hwd57*2oo^^P{%BZc@SHH>gT zgo2zu)Ga8%uj{&LiM0m_tbeH;+;FjgLKm42R2G8ddJ~Yp-TWQ{uvP-NvukX%AbHAw zcgyK?oS?{6I05moKLY{ExhVMXA!f=TWho>OCxKYps}YR>j1El(OpdJ+SD5YB1Okqj zynNjNr|Kb!Y)yYDGL=P`U1t!8E`?o%B1^`PZ=H;ZUenW}d#nfM&)XN~Sd)SU)_j0| zOH72f<DS7u2J*@iaDwO@jazMY7+_2jYN3jj`?+qs9h)uLA8tI<04CU#9G|TY>^%*S z6#Gt$+^kRB06D9=nc~-pSJNA^BCr51F-%omR{GR~+kAhnoDCCKky9FD{v(IO@k9)? zXKhOUi|2#NvoiQEu6w1zTGKYkic4aW+}eko+cRZGn#t!}VPzIsD%Mqo*K0ehBHB}R za+!-Eg>$+*Q-w;Kf-lLnyKf<uQ=PW-_Vwm@Z#MvcWk~Dp@z}k<JEP87LOxg7iEsLQ z@iiYKXdHj|vIVQZ$AK2SF%;>d?#D?$r8Muyo30%PU%hxLK8N85VRFTXSi3M>*nUAF z)>Gwk+paziF~ePy!f-2-%b0Tjv?xH@;<S0NZuSVB1y~UWEWm)y0wV3(vD><6F&*B- zw$me?=lq7j%SyYxf!{y?&|1v8;p#J^B3HjIA7Fp@JdOhm%s6hg#wWa&B2R;iyShK_ zD}UYnvcQ5o$^|Nnd_o-$c<RQNSw8P}v`Ix43|L*B2nNKxqgaM}%j%7kg#DRy>9Hyf zb*a{t24xt^gz;LX9+cx!MJF+?H14iiSSqY?4d?EBM-LZzdTK6haJA~AF-J;~Y5V_Q z3zUB-nfmgzB-%jO()rp8POisHwX_NS16bmcZ@M0A7hx{U*BZoU@Iw5S=4*qsaBV<| zu8r2WZ5JxjmOFj84(KzQXFMp(%c+3wYj*m)Brutmi^#LOYS<xf4^e_+O763WFQYzU zs)3sL8naN%kqiP?S52=Vh#KB`sHm2Dnr(kpU=^Y2>$!#LLyUW@4#&OY<$+Vvu?szc zWg40I<LJ~?TdZDDQIr)CCWEvSSe;403%ii@YsSforBnpo7jcA$0?Y}i7RHNm5~rRR z{HFMm0aQki8=$hD8ZtPT;&gZ_<3uT^z8s+%#8v#n(kZc}Lstb4#yh~;LY1EvU-EyW zWIDGte}dg^ox?TTCQ8I@pJunbtZ+N5n3{J_O*7Ov0g35J9-y%>y_W(0Wh)>80eF`% zKyv)&rw=h8P*@lSb*-DJ*?Gk9BE*j!ks%8EK^T>XC?$l5V+(~HXJuEF4B-A~09Bxw z)W!u_SH`KBo7g_l$EaCfaja$GZfk#xrWVCq8Ps=8+mRt>YJqOD8CAn@0aRdyp>h|k zO)`k+v*Mron2;@DE29IQOK}?Ie`@yF^wFVc!eKzAIGKxcoME6c+V`H&2N<jJ<}Eb} zJP8)mQ+8Fi#gKSUkz5z&pcK>;LaHF(&u^~(cBV_d__9-VoY=K3MWIX_%yECUMcKQU z`g+T<tD@<mcwAfy>@Tln4UNGQr43iUj~9$m7<*bUc0NEhp(OoJ)Ip>uRe5^pK4QdQ zWx-&JV6cB7S-74eMd^%-h&eS4Q_5HtjD{OqT8D2XGZf~8HMkBcJ38}B%upJ|&|gpz zaGnOU1#COGYDX{f1%jraU!#B4?r6T^n>+f-<RU#agek>i{=!~LO`jXF-)(%qJC#1g zMO(~P=o#WC$1}Xo-+-o`55Df;s)oOL(U&)ish<`qn(y3gHSPym<MxqHsjzo@rd}wG zc!{G(83G&wrNSp%G6bVU;kzjdMcs{6S22F|Ks8T^@mzY8hRWa3l(Byjmv8x0;N`xB z*6gZ|ABUt3wSVn;U$t9?61gNOfi6JPP`KwQBR3>j^UAiOkD;dkkl=&fK;*!II#bF6 z$W=x0lHdtpq?{eDY8aQO1%8uyigvi};hXfIL;Re(cYZ5$?>d5eGUq;#R1+A|Q*Q{C zf(l@@jmnXf*l$~Rwx1TyadPfwwHWvw>YiH4_#XrR1D%*=PM4tr0~7%<m$7UG6azRk zHIu;yD1W6|OOxBU5x)CZ=*X!u5j;s^Q#p7y>n-OPPqK$uA2<><!&-?{k(BMtuitJo zKoS%+Qj&6&g+~)?pg(kf-5jyu@K0<k-{eX$tBcL{_>Q~L?qx%bfBy1Lc)1h=)0yOt zkMI8S(U^_k%yKI>kNf#jkGsuN^3!X18mjIgRewq)`iF;9Ym<C_tquno`te*JhPt87 zPwnwoHoN{Il`_v|Vv2_^kN<f0^W&(2k@8MeQSyeaLgy^oWQArzX;Syo9yBo~sp{d? zX>GCuTBrs*oz0)l1XHGfm$?Vie|wqu4TdQtf=t`3ts@l6xE|N}ddE7ap>7*ewC+jC z{(pQr9qI>>R1c|0cF=ea6PZX#n%`CZwyS3kwtN2~8@(vAtgu;l)0Pafrjp@IWqA-J zHB55qz?QN|hHA&~sZFY+VMUQ|QrM?3B>lL4qEg;<5;9*o37%}rb6@q;F6pNSWkm9F zsHpqxLFQnD9rUzK>SkAOOTgX>&7zrUA%DMV*J(SF{*4PA)@jP4Z^0XPew#Tfa^rU? zNV}m0xWi%4k$lDf+TZd2YVGK?WnA8M@&aBl9#eS9GhCV+t&g2u-JcF6zUmM6zTID8 zJU7>%EVyJclQ*!OF(K^o<TbqX)PWB8*7Ft(fC`i}b8I`Wk=uRMJv+g+ujtgID1VsA zM0{*BsIrGN%d+GXzK8>=UJ+-S=V0u<dXFp9^>kxhHJm#y*$?G#_Ojub|5T_a&ep5g zm&P(ZLHcd%TczjN$MyH^x!HN8{DXiCcuaE<!M|ynl$1fISEI{O8b$}UW}MWZmr8|Y zLfUXb+e6vW85SASFbl>}i&=1iCVzQK%MbgHFZHKG(+%hEU&81qwCI&!{JE*~oEfdc z1|8nl?<+Ke)YIQqml8}*VEtMi&g)AREK}prd)*jgU)GL4mEffm=ofAK?_t~0BHX~| zm0evv9}to_<gPR}UTOj(^#DFcFE9*U{d^v(9$=@zG8hbSqG?y*0<opAdVl4RB4uU9 zcxHlB&?V>@bZO9Ab9X@-nwei=x+?%r3o67e#yKs}6*g=VJl&r9?S4K!9)ts2(+^eY z{WGUS)Neax#kd&vke;qM=B&7M%tfAjt6i`!;yt-3Qoop=Jx!4Rg+{b5=(~Nv168@j zbzavma>nurO;;^r=Fmh}1AmwJS2V!N5opP{v2Py%#9O!#I*Ts5^A6I73fKAu++t1b zOo1;nx3pHAWqPC?W%qJERupo3^gUW8<!)Ew>6Zt3AK8LtMbZ+n!HMCuT-~eW1-Sb0 z`ltIV;ee|#TuqL0=^@1I)IP2*6nTiS2k+e=$_i$efwg{VAh5&;4u5XongJDJI4qrG zcP0#!Y-8I_$F^<Twr%5yZQC|Fw(WFm+vc5__x^zMeXp~2RrLk#$4KFJxYhDDJC6nv z;MDUW+PpM_gDJU%e_x?r)>_8)0z!tTuNgG{Wvxf@&c}+l72}q-KxCsz47+oc?6jZ- z-6OXRw8&yAd)-#1Jm;}-;#}gxLm?Hn$*e}Z)RQsS*Ne8OB6qJGYz#GjPuvGv>yYeL zxdTX_@pvI5W#d66mym&6dib8y>Oh|M?XzW3JHi*ro}2Ry6@r$XcCc}i&l@?q+L*=% zB!#1K=d}xb&2n?3oboHh$c<Hsy)l7BfXy1TS}_=zu?hK3plACTk+HEpX8Yd)e2^ty z_<cyUV(5XWm^ldk9%u|f-IdYKIlQ6YO#(2L!1RwfU~X@#2vm0wSZ}E4l0fbxy>cvv zfgz1|=TX)#%HdoA_N@eDzjA`pBXoUfOlldhy|$!ad#fKE1l||OfKYK?4ftH%9|-tH z$PT?wk76hKUPyfhFiCdE-)W#$DA>5Uj>m-@=sFW(>ByMBJ0EKqLm;2I=@HC4rvRNT zx1<+qWuw6NtOW|S-Eh5UUw^GoRwM`h1L8G^Gy-6t>kS)KHYm3Gn+}QcrqQg@AX#=5 zrjJhzO{ae}u!1KUK;NVAx7F5Kz6m)jp0YzxlUtMmp6jkC`c#6$u$>x!y6#FdebOu{ z^2+xR$&fTT{w}_DAp_p`2ZA2*3_yi%r6n<@%yufcG{f!E_Ec}JPq!f_`@R~seh)cc z8p#GrLDQ!35@NV3&Sr?PZLC%@n5ZW9=8Ymp-X%9)UObkH@5<&v?GMDy)>QWhBDk&` zodb)<lrw!X3?%JUJ>dxX^=-IvI#pZ#YrLOJaQKjQ6y!PYmCDW?MVJvy1;Ax^e7T-E z7cXNSo+5f-Ty{DA032z4kTz-J5<$^arSjxBYB03(4xlSow53!Cw4ve;g2dH+kecrl z3jdZ1gR4uvSw{^yHev{2!}8|ybR3?@x@XAsW>&!)U{>(5u4HWay1Bv<`|5uS-mE?r zQ0;3S7Oy$HLR}BGwBFs$0I<i!Z<f(){m{3Y^Ow*}E&>sg(z}Ij<oa;lXHL~6&4>7v zy^Y2ZjXH(Zg4y7d(H*<~r`_J})vZxe{#5Pzfdj-!+J`#HUkd`nE7}ScFj1zQ%f!x= zaNlZ)lcO^)fhSB_Ksh{9RShW+;XVQ(PD}cS-*O-6<M!gSm3zi?6<`cT>b5~E4CWnN zr`^N0!N?L?$)sGg87$JO`Wz_E??idgDR^@t;u=11;j^vsj9h-QS>`3dv5hB$74|Wq zvd&qaP?Nxcx}$m?6sQu#8PG+c*;o{%2N)f?YDf|5+{fC+P{b}smmyy4eG-4}nJ(|h zJY0F3w)J4%!8i9T1Z+jQxB$_bS=DwL9KN$D|LJeDa6c`p53@m=Ra1RwXnX;xPxfrD z$P(QIJBi1~ESe1CR;{k75IOIn!D?Y;UQomf&AD?Wuq2nHwPtW;t*Yl)n9q0|UXR&5 zN`b5tYb~i{=S$LNqp{t;5+h(Y*b8s@>_4P7(XLzJZ^Std1iU=zh+!pUOHVqO4k?c@ zwJOenyy<Z8+{M?SgpdW!mL>ueJ^b5A{X$!WN+2D`i9UfA{U4i^667roXs#?eET^{> zvty2zJwNu)!hLoDUIM8-wMmJkk==!<V5gYVDk8GsAtE4=94{*bL9X1W1}6E@ViE{# z`e9)Wg-%M40Az+-|F^zBNlaYe5!I|UKsbprM8vUWGEsegx8D+a2r5RH7K4o{9PTun z&gcx-&DstnU`Z*vA+XTp$xqbUMP!(wgsM)41EV;adxg3T?Gt{M`+GP0ulj#w4;%_d zWWE_J*LQ`d`aY=TC%?;)1H>zAOv+%}E_M{ito$x>0rdQoHkeRKd&Ri|LD;8;c1&Vm z99R{Uvnl$EUi7&9@9_VkP5xpj-^1nzGpKi=Y%P$9i1d)XQ!jTACUk`5@Wp|zHYo#X z#1ZPj1;~!;th_9q%lgi2M2lhm#FCi8v*iu0`r0QU8hO}nHt@*GrS1XO|FLK2JqP78 z!#1UT1=#(O++FK;UO=uZ32mnR`dHf(l6H1&J<7`Pf5SPv{i7lK2(F^LCw9&x0agxX z>kGH}=n0o|NA5c0#<dl6Q~%Ub!I&o}XtI9-^8pL|m7C(+qm;v6Z@6R6b_~nu#2;EL z#l%q{<a}(VVIN)vJM|&`9h7Ugd0zbL2?_B#27pGk5fWCPZ}a+P7C*M?%y4w}q)NMJ z-{PLf{?)4{WO33U>io>f);ax}x{BW4ECq+Z#CTQ3Fb}-d{)YRiiGx~h`76q#rE5xd z6HL4{{NV9bjbz;AC>~cNZQ+0Ru?P#-ztP~|{2YMU5A8|L@S6v$4CUxt=v;TmP;1#< z!~`^Cq#T&sxRq0Hb*s1Uf%#(%-a&tHK_BPt1}O63_NBsGb*fDD8RBnG762xrCdK{# z6#ZWuoRfp=zX2{St@y2WWdGOt3=SK^Xk@AjZ9~GV*yc4LDWF>{uZGx=rI|d8nlx^1 zUY7UgO5;?@N}cOGc!&&gDgw2Us(OUUY^a|jIpl3qCt8@?U0Z~DVvY^|Eycsb`g+ni zSR-T3?DwCWfB8R2q#VpBVyffWUE99ZUDq?Gd+9w~FM!q__(M*FCxy1c6{)+=9d&g0 z9>U2g2AhkoMLdME9rw0EWv#NHlJ;-!*HsO|8(#28Wd>4oi@YW6X)84);$^uk8zK|A zqm>iG`)QR{Rbti{QC69)FsVF<TRc=Rw7>2aIyw$lc9g+4bZ{8djCvaU%aA&|RlH~4 zmOUeE%m7Be-LzK`2diiiP}$Rg)-M#P9wxu_Wqi3STyjexpK-KMW(?+clHtCQ;HZ9n zyQ{`<_cZXXvQqIr2kz(@UaZb0|AK}4O9-y@?2o`cAf3<qepmm3X_mxGPhO^))rutT z{+YX!OxC-Srd!(<6KT0igbtxnB&{@-xg>RhT)>tsEH57IxH_5C{PJ5i#CI*+OWMY+ z!+yS%jElj2L?4^JTl^JYJ+#hA2PF&_ijUH4WrQ-r=_<Y*EF?u>B?PQ?u^GWuEZRQ1 zAm}4GDsmtiX7`L6*tChsMdx{AZJ;KSs$r!`+*p+;yCcR~^e3C0O#}&t#Vmkg#hy-< z84w6|M69sxJ>(v%z!Bf^mHi$TzQ)#AsY_bvow)qvFK>yx6}!&v_UxNI7MQFP=<L!7 zZQw+c$2keMSrE(CawA1mArdCpmeYv0$IXr6TO?K`?|R`+-e%tpNp~^dbPa%LHBY-6 z9Q5*b@V<=AJ7J^q!@Zb&VZiVM$UXI?0d}RHjB+aaahT^?q9ut7n=dbPB8+of78=A7 zec*3(nzgp6)E##+tq%Dx9OK(M5FC%wpmyP(%|p6GA<TN(?ABFIL9iXQl#eckwST_$ zzsn6YCKC6+c)5W3X>_V2k1{QO55v0@2!DG!F?IV(YX1b1EaHz0)Y%~{U%VDD0@5~c zRn!pZ8kY(;MW_PkInf-ObCL91m_5of!MC(~Mc;aiQmb&)+er5NA)cFAuT&9NmR+e` z-Qj%<K#J0d1qZA-bybD{+||)$NA|Ed4`4P<C0CY{rqP_%mh&W}ACi$XQT(d#RZoX> z&TC<~OIkP<5@1Qe^F@a}Ycis+fIvGOi%3&SI|ZytK5>Mx1;6&~d;2F(4#t`M{JB|) zZoLENiS#Bqo+Hms<8^*LiPaa}t6F8|+p8e2G2+B^*l8X$e+(;d`!7*qOYOg0oFKX8 zB69t`_Q2kZt@lhgbwB!9R;j4CJLnVLa8mIu?FhA)tBdRe?BGLpnXde909#J4yIZzE zVaxK=u_BJ@BDD44dz+2wnl6GISof%c_3ym^uzq`t;qIpZe@pzd{THO^5nkyR{e+u< z22DT15Gv<MLdbZsy>Q%9GOloIxI}w~rQ~H(G*E;pGK4xA8PU8{4s$kw<VVVTHg6dO zjmE}Ks*04Do?yV^%|Yu2z;ts6E7LIiyDiJd4jpdik{d=B?~32nZnX^_XNbkGKyb_h zld)}2SbvW=E+ndZrpL;FHg^mq(Rx6{25}~Y6K@l}a@@G30jP7!7~@=!!GLp$bynOl z)Jx>FzgiH!3|T~=_}8~<GFv`my8EroU4=<8kGX;fFW>dO-$+jaAo0W4J|5WdhVv29 zI16rgs;ovc>D@0=^kU)Y;Axl@ubyC@E(|ozc(C<(Srte}FG^hbf-|{xJS$Cv2MT`f z?->>Iml7qvGz77_3iv#AHE$G~+D`l7#M3Q<`GWP$PT~vuqscL)ga)U(mp;wdSva=? z2mVfPCKomQ=hYShu=eA{mKYerk)B6L2wVRFOP3T`-<G2rQ|F{DO>`57f4TEvXhHze zU%ntC40nZ^%7(HeD@pc?h_aqMEDgLOmGFlYLx~Adxj%@jUa#X4?T_;N%%EG0?0{r9 zH`{g9te~)xX9?7<-tO1{>f%XBd7zP^D$G?@U~j3#1jOtuAkU`zeuww|Bg~%zh?>uV ztu*k6DIkheF72ab9G>Y?oOHupM%65aN)LmdSViKymSsC95fS2p3AN+_q?2C*as7$a z>5ukQRA=)VNHHXbIo=+_B>5nuTk~cKP;LJpthbJ}$q8F~mXuH@gvoD<od})7)jWH5 z(b3wxm1ajNK**t=GZ1sldkIby$@D6MkbBV|Hz9@(?^En)BFGK*3}nyMrt+9r;cdGp zz;&h=3X=O(Q9f8VaNwkBH_3|VNi`M9!=!un%hzEA)x!~@!{83bjyp0EQO}cKx198~ zOP=@qKr;o{Z%$qqX-}fu8s@6<av9bC{qpGDvu;%gfaaLUIk@$e$aqyCd7oaPZM(_! zEHp{DHR&lX(J3y`lf*PVMScM{h6ZjqGp}ONO~NKztZdmWIkpvW|EbjiG@1i^YTCc{ zi$bPkac%WaWk?QF%oo+>&fChj^nq&@!D2~+x}`ju`v%Zf3<AQ2)FPXJa~Su?^Ydk& zqWby_po4ybD&jz-Jm!QqMaz9CJU}b*b%YR>atnpc!ks0rziZf<PXs4UiNhN=wk8Mf zLH&`}_uqG3L~{nbhhM6;n@sc}fV<^z#zrqGJtC_*{w)sT0Ay07=)gku>RFN=2`QsF zxvRsIvM7R&U_dRILU0}&n0&cKMC@{YD@IcSP<=>L4@j%Nl{vk*Sp-@pGmI3JD!d_l zSeAoXa|1<`uWqQpLRRK+R7j{WF(@oJ5$q<Foe&s!GI`>kJ3IwximXB<TC}i@OK1=N z9HF%lB@3vlJTC)7k21QcguhgV_}b}1<_xe;1N-*tdZITri;`+_i(FM_j(XDx3H{9j zbYfYkGyToxV@eir6+%#%?G1^P4w^Hv6YxD|x67@1U%@T`j*LH%>%yT1#uHphrW{`V zmtYVyF|JA{`93yJi0?^`IfIN6Wr?yVI%ow(c5E8!`EDqX%a^sHm<fq+=e7mr`eVuN zo&#zBrMR*rD$k*~dS2cducl>!ktRtCfN~O>Q!C3w;b8$cnlR2>^|}VHE|1`VC%*VV zA}up9JZq$@j7WiKwX0N22g^aT3u_&ULOZJMyH@{KIUW+%OfyHj_gJa`Btu@C&6~2_ z&Ow2>G7OirY$-P}BBMEga-VZw9f~4FoIbh)KV|}((^(>6BPE6CGv1;~4@qAJ;EwLO z(^NHm*GekoBnjGutP5Kmhp_bE8nqFWaVUGAvEQ#d)S^Dtd*>_d+U=Zl{dA;mvGf|O zx@HffiHLYgSj$Z#ADD6;5Blrm#W<Zj4&GQz_99tvZbbX#DD;`EnjZx^w}(TT&zn|+ zk4^(JfDYd$I03R%z+0`{&XFz*@KWC{Mn$0Ia+?JvHtPk;I@sBVfg;TZW<tb==f5Ee zD|1@=$%L5U{9CY?>JM{#jYVO5JqxGCuwwWbBne#CRLTG0>if0|m1@DHMAUSC9Mt2U zGusrzniZwNG>o;xgXfFQoqlgyd74A;WuHGVl>UZtHw~J07p@T~D2PM{AY5ktOIf&- zYz+;8UCqd-z{$`Ep_!vlvtCYu>7>H7!_000BL`|x>OS^3{QJc{dxW5#t&sN3JV{w! zGKqSnfS7k4X<Wl2282?Y27?!d$;gz2Qhv__WFRMBh1I%4e~DWIshg$iG28u_394_w zxA1d;LF-OJb>)pAM)=#V(%jA9i{#A3=GmFQVkQbne-OsNymGQ36H;kAwU0nfrCU`? z4cBJywiS4~Wxz8ga_i)+)BU0vh3imf$Ln3nWNNd1a;FR#v&Klf?|TeD>)NCEPpfEr z0Y?XBO`rFNqy}tj$vA9rqV%3>yfyTX3l1YwDVMxpSny`kLW~<;58yEm)NIYT+epx{ zk+u-NKkJMX<*9dV`sji=sgSCv)r@JVq4h=V5%x(I!{U$8rk)tL_+WOdfBXbN{C<q_ z+`NW1FyUQyclx~^&PnUtMU*N{GT3vND7Rfk*AI-@wE`UM{IExz@W%TL!j!A_%x$8B z%IXlj7EZ|cd~4jhYIHf$3z4*=|3uRFZT~!OKie?`q8!L7Ii1RAB{$aSTBqrfiZc_) zpu8etX_>-^3KOu@g}vM4<mYP;MMki%o2On2xua_Kxee00`iLL^<d_q-bBMbtFYwPT zOs+rBjsc1N$5fN0ex!q9`WqZbbqdJ(W^TC_uW1#lt$fSJxT=eJMSZmwUp{L3K~<a6 zKFZnKJ^N6I<(j;IoOIgWqp-$ZuwrHdeiiQ9r_{%f>&wQou5m-+Eggu-ccwE{n>g$` zEd4SW>3x2#G3ZJT`cGbU%BSz>9jqp$T4ye7#Q^)TD)F0D_YAzcRixul!GLMpk85ak zdN_5{oC$vvYJ6C-y%d-uUp-eMO|)qHCBnq0-p$SjUmDEj!g(qc@z43=Z7Q2fJ||)f z-ulPSZo2>sK=4bxyv^@YIZG;o7^_C_5f!yT@dJYw5IxF6|2mLHH~d{sBK#e)T>y`F zCqU;jrS_V7ci+khTwif4Hla*5hg)dvI*Ss^PAN4v%7&26vqa)cWdS5YgyuJS5%HAr z+qY$k^{sYV;|!5o^AnqQ>@=G}z`yq=0+oDEi5QilLMJ~IOy2DzU?$joyO<?h7SiAG z$1zE(`vn5GFipQDF-{BRQsp$3D60eq5+Lo6(@KnLTP4ERI60xX7iqK+kskJb%{!FC zI7@5zn=k8nb;NBf9IY|4Oftk91ca&2k*-K}sKm{dPS@NORE3+&2xmM(%8@Kqk*#{i zHr?x1?AGD%5k6DYIIv$5_32E;5U^t3n3oWRy<<~O(j}?NV()#8S4;tC*@b8~3Rr71 zTLzJ38kI%#y+*_<XAUSrg~S4%Vf0yDExVh4%R&#MF(_-AVnmj@OZK5)xaFfOV)f#p ziJIIuV%Z3mT>EM{a>xU=U4&soy8}dHl-CG0Z^B8P50~p^SSd=_S3Qy3Dfdx5>U?1v zLJWf@=?jypETr)m^mR&onreiv0NjI)u3NeP%7Ae6Ug;fYTa-g3QkzBzWP?7SS)p7p z<+kXc-SQ>G6x?|BldLDX6MH#&3beA`F&}=Cp$!&HSo9e-XAN$%|Lq;v3YO7-oe?Iw zorBc5j~PvX-?Fq_p@ipmNaKwQo`PQL(rwqQ3dklSzkX>yfI1_@=?Zh10!X$m(FH() z*%7}7Eh)ejhKNZq1XA40fm>kBhURs@l)r<}UXFEZ9l>5>IJ%$lGheKKl>#G*_#Ff| zf~}V!Bl`EUs-m=)mfN;5%)dxWo;od3s>0GCN@tFGqOs8Vcv{&tuMrgJ5ie=1cxC>Z z6U9u@gU)L!D-Y+@IWT5r1e_<HJM{Ut>(K`o2QcPN!~Ah<SuwXU0J8H1{`+jX1Gjy% z-M&e-Tc6!cz3a0j;o-mYN(80ytM59<Y9x*5XAy4NAVACaN@BejRcdvcCD2f3k0Gci z2aE#pM>Ub#9MiJaZ0q#Ru@4IhT1IWIcB9Qvos?Qn@z4E9!!BkAEC7zI#RWZwzM4$n zc(3ffLW%RBfGK>)HM{BKr=fY7+B<K3r<${xZ!-o1Ms$7j-zKTqv6>(`shW@-stXHv zDuP47w0bX+#sI;T2P6CcP$MU+)g4a&CA|!9(WbhQ>7pYsjj-5NAQEPDx0Ti3s!0d} zUfh(09$hrnJLL9=C4dOZrK!7=EM(i1xI7u9uVB{|)W-P$Wo}~P*sOW!lxNfftn31n zqiN;)_TmSr9zQpkl5yE?x2^~YzhWJ`DLjI+<7|1k@0RxBc{?E$je*$lw!>jGttzJG zWYKnGlX1_9_<*CR00@j86WG9k9zr^t1j{!R756vPM6SPM6`%r1!ci0(DQ$}me)frb zP-|M9(n)-+b$LN(43FZ$lsj;c|AMAgPVYKG2h{AZ9%?hpA}nk6Z)3GP7eJ7&5-wjq zQ%qN$dcZ11n6$jdmf$zX&BX8<&a=~om(rfafoT|K6<)O^UrPYguOj*k1y(g&OwMcW zEbAV|K@D$U4A3oNm~IzQQ`(}W5)hwj;RS5KN*?VvExT2`^)EbI0r2y1JfuKa=ikx$ z{-{a5FNjrO)^0y&-a89DVTRYSG4pNA5uXc>)g>%ZJ2`KZvb_W@bji1B_ecqR%cUD& zuu8j}R)<U-E_D+cravx2C>3zpnDQt&`S~X`rRm;-63}yo4O<W126V?rjLn_%_zesX z^?X{}jLfLHDd$e9?d=#Ct<1>)y}DBD)$uaV<?XYeokZs64YexqM^4lmqv;3(rC3XW z*YB>bh0fLnTB9j6C7#~eFLzJSUWz}|(^}qevSi>zD~BQrnx5COR0JcwB^XuX;UdGD zEr*6C3s3-RJQ^8WU`}+CpbcAP$r=VXKpOX{4k8cL><2OoZSltwQF`7l(dfs=J-spm zRE;<en;e2vxih}Ffy)?sWTqpnvJj@~QEii!y;$)PjvFuQ5VOu|^ivlOi_1`G&_XTo z%;ulpzaxccQt-oXq41N5ZN>~Kd-Y2G#mJJNOaLo?WvyvDOp&-~r+A3?m@i}CbYkxa z=z^P|GKkur7_R6V5OFz+cP|u_;?WUMfAM=3l_}noyTOu1_n$yYjE!v-r%Yz(7=vHQ z<!c0qO-z34naEC+EkWiIZ?HaFCMjh=Pa)dBXu2*1-5HMj<CpJn<XQvY-6+=Jn`_zo zF2FX$a6alaeNOvWEY^oSUmt<c7E+`WR$w0i$=LuA6hi02wnF;0VWYPOBgR3DH)-zE zEUDP05_#{BI#AdS%?`t;<Yc>|MF=NQ`T2d`-IkLL(a@DnJ^7irF%tu{B41E~-}!ta zm@LofG<B2(TZUudpAbB0rVN~PV|x%QdO*|3Jmh)ch0>1UQ=u;)9-L4QkLc7_M79D8 z-MKw$a9!d<{3Jb1M~ybF2s}lsKTZ=(0r+zqz8FVi{>PgpE}j7T+qb{0ZbGi43lpHU zV)DG<SL}LNHnSlja=7*D@4<$uu5g2!gn(eS%gX9Mhg=T{4rd5hhS{qOhIH4Rkh#XU zN}BHKkrJN);%$#+=oGHJ)^xn)ru1!flT*W?>@T5>GEcv$^LF>h00n#94W}5Fx#1GG zzRjx(k$6=-%d6Wl#qa;dG}l7j{O^g%oKBPujta`m&hno&TdTDjztxKD|7y_aumDUU zj#g=a@R88&o=9vLb@buNq^LdBgIbf?nzUl^T7L@{o+3)O>Omjn!<lrD#4?oW&`b1A zA1KgUouo$uR&Cl*9bb>a!p(bCaldJx@5I9p7I|-dqTo^A3rIKP$!nmle7m`6(7&+n z>x$puty(GpglB6)Ay2GwG^S`heHPp6;C!5K{Z&~~I+X+PR@n>e3|ncVS*1K?zj^@t zo?q<K{>Ut0Mn$nOn9XoBos^pDN+zL~aPNn8F<UreKITNS>i7k*HJ|bC5RSdJ#y0l> z(#tQ^U?)t;1)&~?lCuQA<H$cYr$UUT<b55=Jy&7?9cZ$W6fvofb2FaS|KzmA4f^w} zj7oTNbS_x83kmH#UArT_O3EOz{3P<1AscM5pHCw{2y^buvLssA_`4!u=dVwL(JQoJ zQ!vmE#jsaqQT0@7&>n})OYp~%69rdi2%*!x0l3Vvw4Ng<dBH0|_c5R4&D)gVQ%8$- zPxHP2;UUX4g*)PnODVS69hF;T+rkA}I#zksu-1X!Nl#LPE5RWNwtww=CQE!^@JVGc z>0e|J6NbhY<U4~8Rw&O)#RPd-N;*W6A+6XHG`U=%_-nEa#B{#V{SH+2S6oHo!s4C> ztzI~Lu0kJDx0za$_uC(<OUqB&o-$LckRSg5p8SP=8xV72F}yeqBvXsJU2QQ4ew#0E z`_Oczz4$E`1uVS?`1I0>Oj>HBLfwe#)HIqmw8vgNHx-uY_l<<));G_Zh_MTy5Z=|1 z>aL!J$%kGo{0a47)CEejFc}vz{$J)36qf;Oy~NFbGNWmjE$00bn^S9!WS-XP(Cpv= zH-5^9-1gb=)u`ahKo*FX46t{Zi)Rje6a;-*K8k3>w--ct5(yLBd+Buou``^oFWqL! z^jec6u(GJ-;E;z<zpS^qwD8{Ch`FgI%1i6g`z7!31l}LsH`;s~3w7nc7`!>Tbna(N zl+LrO<Il!thDOuVf08G*R;&IkrG}UT`fQUi3$R(Y<v$*+fY2AjKy^+S+p<m}T#U>G zF9DjdOzvbvAV|`UN)U()4W=*|TwRAXcjP`mzC#hYe@TaF$6^Hg**AXXW#c9I*w|j0 zEibHclB&w$W*mm7Ax&Ne-h1>sNMC|y6gd9YeE`*gMYbJTJ-yImfC~h@&3&-~9E~&t zNLA9JjdR08D~RQI+AP>IkDx@V>OPGegu0nGGJnyq)L3(L>;TtEwi0?aKsIzZHl1{C z$>Samxzj9Z$6wel<`iSq>%dJNT8ox%U3K_n>PoZB)?28@CA!+Bvi9R6@sI1h;VJ18 zq}<r7L6T8b&ehV?z>u(w$%eXs_Z(__=k95QiYBc^2yb1fIN9lOBY6<qTAcC(4?$s> zsLO%Nu256sz?2rA827fk9}1x;^%OXu)AzN>B`*}<YQ5ZFK?|Zk&C+=rLj{pG@?Z&B zn(8cd_v;UtuxPB%mZ@bMz3SI&P^`Oks9r;Jxlep%7yWr4w3*THv9B6{13c*<Y*TJG zxS`bWo>xF;=c4VRf}`<%sWjAwZ{h?cbOuh?a*?5!^4qAFhYAQ8He=I>aIvfcJmP6F zxjytjl6sit9;P6WD2R#rRj`H`ltVyBgd-;<i7D_Tun8p{`5sI(Zhg%$4`xH#2+A3L zy9uAAC@TeqxiJaz@PG&ab0;3uB>}e5IT2|`wMq6wpBRD=f}aRxE;Kzv)ec3uvpwom zd404rs&u>xog5*r1_j<#^%O>M7T#l6C<w}Oexo>7d-cQAF;5*B;hF4+t@{9}!G5!+ zPKOO_W>2GTKr*DP!aO~H=uTLr0s9m)>qYN#1P9Z+MC-ix**F5g3%+B?8oYvP*e<m* zul{uFcq7aG1}p+(eHa-Qe^FeG(kNpd9Oj~VSX&4h@&!9`?$S%ec{t(g?|)C~vLEuf z91{x-dllp6&=EYN3=Xu?dH^bzA68b@Ov@SQ8hBbqj^hNg)D8`VXJ3{m9wEeWO;F@G zkMA5;)2@C63lsvlAloR@&qe(Fra42!2HTJoJ22GNMjgFnM5oB)BhYkPMzu2f!iQAX z>Iq4rK=&tiQu^}{g97y>P}Nhmf>YPvK&fE=Iy7o5+Z^!y`?TiiHV!cySa|&JF)qJO zcqUSOr1L)Ihs3_{wSEDt^e~2Vf=W!=f^2GX@)ZTd<{uvb%bJ2oG-5@{`8i<CY$S@z zC`RLf3nTv=Tw~NM+uk-t>l&jB_ym-p8u{YXh7wOgl?mSU)ZbAV=W*#aJ22~eo|iRu zW{(L{%eiA92)lkE%nZET#M0_KgN9XoOfxMmJmB;+AjiW#DK+$j)t%{EVlcGKbEvoJ z@T3gvlhqHfEOPjAizt)?G)$@o^FRX;xBa&TmEl#%Gw{XK5bSt3@2BRHr4aZD4yXTD z3!UZ764yp#0g^3r#rDdK2<^57zsb|*4#RC#s=C=R%pA&UwpEjRn$4}Hs<OHR$BE7D z*!n`zkW8`V^ouMI+|^0vRxznx9gtU34Z|(a$O#45ahFQgrfUC#_-L(S*MT)6y1*_Z z9(e4X)*H}|7KsS#N#x95%dis=2+mHK#0LA-3V(%<bXU?d(PZwZ7v4mpVF;w@>(VtZ zu&4IG=5ELDAF6LrbHuU&S=o{fKllo4*3?PZrqlPmC7ajuC%OxSMbNv8p6tX%#?9+| z3Gxv@4EZ<3tQCD50BQ7|bW!H-Vr5<OHf!$;!b{5TH}a&l_i|q$A08$t-T!t|?b8Ug zF2FF*`9Aovaq@Pce87JrEb~#SxSij1j+^%Ne38^#t-|jqg>Jrz_Zx4FLcUk))F{>d zde3_6iLevwRDo+A&UF=hHBN(a`n=OE2>K7uN~rqH^fsPS%Mf&`c6qAt{i@}*^zQk5 zY~5wvpi8%cnQo1>oQ|pe!ORBY!>S-m!|@9*7y}d5dj7Z89YF-Jr7D87xUCQGZoiZ} z4Vqz<)qctGm~D@k`A=S=@>H4TzJM9(Cm|pyrrxd0Abe^<Z3GbA(bAL<ulom*yh94m zAkHyh7BXj1Th{6$4Mh<R;~*3byZZ>XuW35NjO#vh%vJ|gPKFV7iRa&3V0!F)*W+`t z_d*ap#kD}BfmC`7!$?3mz%B-cHa0<fx$FNm)|C(N!mUvTpK5;v=}?BbqLC4F%D1_G z7Rue+JH}ZSem5R<;8a&tl)kN$+b9RL%5`F5-r72Q9d>zIBpU!MK;5UB2D{*Verm7d zhy}4;al}!{Dr>R-6<9we#fxa5n1GP$&3osn_{OC*(7tlw+*rYS<!uCn_*RCK%>Pcn zwCIW$IUpP^i~iQuB8!eBEere;+K(mPX~$i$so&@M4(VfQyIIZa;!5E))92T!N3w`~ zLZ8HY4h!SYBZnlKAHnJMX@@t+E~(LF9-*Ex@bnl>GKRP;H}BXU4S$^xxi=nTqXD_L z>R*w4n`EPVa+JdodwK=@2<O|nN$vD+{d)rd@5sgl{2y+Du>4oV%Ea>j#aFHW6<_^d z>*r;vIMpzOb$P!mEs{67OPYApKKGtM>4ZqksgzHQ;(z@*7l1s$aAG-Hj?tkG&bs>S z5q3-O2zOJ@>C=-^tJd)89h7-C1+FdcrUZ5z+w2ixU!zlR33tDqZ?$hdCnx_Nb&V}O zRE!<om^|$3>PajKT$KV+BE4T5G^8o|^5mB0mp?22w}v$war;=gWo+MwK{PL#6csU_ z;P?Hcd`vJ9;~=%<VDh(=O=odZZMI2I{eRb@oL}j7+Rda7JC~W3^$0~1eI=sQlw(ET zOL4{9nsslcVan9je9p=+IN}>+OeaI8zZc8wXZjU&so&qxcmUd^v@>t{oSg&_Cr`D9 z1DAt4QbSc7PY?5YHZG<&%c*aIQrJ^432cz>Xd6;@2Ct-VJG@?@8bgW#EpDHp>9Kk- z3(RI>`XAeByBZ|{<7`Ey1$KRl=VkWsCtTD*1J209i_dI}=sau|%&GplDwBunQfHR( z|CVcRiuMI>mjJkfpocWk&LrLYd3QhRh~ZTNi|EDW`>!e0{Puz17Qzz(Hi51R4pq41 z{mn_Gp(eyGvN5k2ZzH<gB?p(m<EV$S1C7fXZov@9CZ&eVDnALuRu@z7B;%9)qqmjv z8r0S^9H#ImT+p{q{mH#u^TCw}lIvbCP+0&Wunu#rR={)6c`sbm;plY$nnd_t9J?IL zICIXYXSb`53{}Rc0e!&DIaXJuOquIlVJH5mqo0TKtcUw5Jjw8$p^2MM?kFz#v=CA0 zmgVmd-z?zcqktuXTZJvFLWer-m{^lGq<pR<MZlPXW)=pWGy5OK11<KY%vTr)u|HI< zL0OcqF(4`{c~Lgf`4F9W6^-N`rzy4vWkWnPqC$FB8Xv4dKvb<{Er+V}QqzMSD=;HE zhKliwk1~<x6Q|D6EipqRHq1B-ci(RR{k0vfzckB4cX{!Cn0EK<(@|l!4?<gESHlU` z7a0@?39MdVsmR|d#ThqbTzPvDxy^6r7yIxb5}*dS>3KzB*5Pf0((7KCB-NB9Qa@O~ zE={8iUr#*^H|+_-$uT27BfcTgZ6^L#O{<rtBUcP1ZP-OHx6LYUM`yvsaI=OJ?uhgk zo>S22`Y(va>^=%Xn!5>wHB@>Wdv006_Dkl$goDMBc(F<%%RT509Jzi~D4gWH7J?>) z3xJ?Mx0+#a9Jvq<Qz}-p92*+ZKm6R=&YFhRlNe%&*VHPbIgGt;>JJ}pmxy_Z5l7~z zZj4Oc-_l|Oi#YpaG1eb(sFJi`*W>ONdT@8?b8rbyjGwUPJ0pIZ4pUx|hJl4B;*CB3 z_%WPAiGS^<KUPgNMz8(G)=9$5e5WfK6#%L7gRy@{K&MoyU_>a>nXNl-U9$WNhgWa? zFO`pHthNRhFo!^rCq{G0S_Z%g6Mxh(R6&vRFbDkh<9MyQ5+RzQ_fbFa!Ts)Fcuey4 zp9|fqp+$RR!+->h*J%%A-1z>*b{vE8mXtfNi8Jwj&1X=<05gi2y<Z|Z4@6}`Spe)w z6}ycgj#9iQlkQ!Mm26%q=QwHCpq|M1pBLACSmgbpF>=uVJP!@P4Ov-d-LkT@z{}2K znIXaj6QV{fC&XlbNHXYM{DlQ#vO9@d#~!yc9Nnxhwiv0=_}#47Vi^Vhy`LP`F}BlN z<dVF;&v1#YBr{XZ$33KO!39zT*#o4$S5IWvP$`77xnE{p7sW7*)jFU*Krkm%8YZ1y z%6eX3y8m5w42Lqe!?+<!Ip=<F|CKH`H&)|;RZk0CsULV+)lU^MMxcH};~69GO3)Zs zVNhdrG8V$G`^4gr66xVgPdAk~MB<TgsrdXCR?|Wa#4l3T+HOyjzN<Ly#|J19z@YDs z6y|AS3K^v~6{OJWAezSU?9NM}RU`5)<~fAlrw;!mnjy3T2^d8eVT_|_i1BX$_5n-L z{-`U2maXy^3(+;iic+3k&1+Sj#_=T@X25v%pdY3yp+irmehcELf&Tz*lY57-7Aczk zb1N5&ZF$w?im}#~jQ>sl;0kD+TzX7u$p7l9Uq~!wWQDxVc-~KwkQ2WMI&RV|jO-1{ z7Uq5?xPpSKO{Kx;KywhkUE@y(XCLf*An7gEdSI&41VZ+uPt{kXWTajBrtJTV{;deC z@%%4P5kwZ=L?PzS1K(<)@Yp|mY;U!;n~eJ{+`}+-TP~n$eVzXBzCQq>aok@fNHCbg zI|KrkOx^4%ceix<%$4k|He!3hJ=#e!si<;Q%mc#;294}qLs>so939w!S4#W&=u}Sm zgyHQ<T&_JI7Q8B(243EQD~-3LPwlzC3H<j3t|Uym8^M97_-sbrO)$Q@1m8Zy*kdcI z(hk(eRZ@zR;QK%+L%@J$U|XQO&N435vw$@1Uh96r(EXN{f1Qsicm_T}z$T2y8>-&M zu<_?p0W=r&t+p{FMiB^N$gpK?jMF&)U!x2c@@D7SlzckFBjB8+<k;Rfn_w!qAVZT0 z`9aMvRdFsfT-`1AX5&JAx<GC!(}+Qpn(N1z1*P4Y%$!64=uyCvhM>bxShC70YwOIb z-Dq;Ac_msl%)S@vbpZL@4Mv`BK~$e_?`9#zVFX#YFYutgVI$C9VcNSAbSV8;vPDes zN`K?#p-f3(Wf+T`7v>BVmmoXaEbe)u{W)toKC7pe0)O`yYl6d`g+org>-D|3hAJra zM3cs*O^0gp^$@`3b_Iu7(9MZtQxlpkb+n0U!>)gkgq3}I|H^rCXUlqJ#*gvu)<DKJ z2SF-u9yoy*Ih_Rq;Pk%wHTpR5R(VsTlEn<+C~`dCco4U;X=X8%n7_A;THm(`ho4K; zzcx=7z3Mp)b7COPwGoxu3_GMR-Ru8uk@Z`{y^S6KI`GyJ;+<>l3+cZ@vCNdFBh_CK zr|*mLC8MN}^r8_kgcDC_Cp>rc2u2q1vxBJ4#hYPs`(M0t{=*L%iBtLp3&+u_;2)T@ za~vP#b+B&en`#_`074+E_n?VXwX|p!MpF@q$AI685vQ(ld$xv^<-S|1s>)x@vgUt* z#AZkU*YC;pl~r&QZMQPrB{321HgLwK61(GTlEEgnp!z@Hcozd5DmTk|TUEfKFyf>D zQ7`AZzv*_ctHh8_wrVeC7kK3D+cgmrxI>HI+z*<uC$1d^l0^pmqneYNFsL+92CiI{ z!_`fX#Qoa%5v;0=oaBIDVCIH41IfL_IV@a&ejup)3>Lw*1{Idv5WK<GY1Dm_X0r%! zXRV4Lo=fq@3%y$;LS@r3Pf6}W$^P5&$R?03BVF*k(U{f!y+!m|)VsE7Ysp#%gRYhp zbU=5vWUnUNuCZPT)l!E((U#8(Tp}*7p%yTema>5iMr8d`9_?Lt<W7JGd|j|iQ$i?U z2&rLir};Z3hye-u@YWFMig25*K*Vq?Oy`t8E=#Uo1S`E`@7TDJFDIb=dv7FJA{v!j zoBPoFidO`0n|0GM_Hsq;g$9S$fOoY2xUgoF155E9QGAhk-6bpQc+UrSb8#$_qa+#n z33H>5G4REZ#XZWobp}3X2litdPfiE$WwaxQp%VOwi}3*=*5l!O$H$if6M8IG?8T0B z#X@se(MrN)-<fnbiWBN6JadXDs7XP!pG~hi{uFFuRH7epI{D9C^?ic|!lR)JCp7Bu z^rC%3n$Wp5$j_NgW$MhqlVGke`uy{Po+0Zr*oiOIGTjJ=oH0HFH64XG$X5+HMaLCl z6>n8<ju+;WVYPz){~#GXJ#h^b4V00KD_JOl3V@>*zsdf<*Jo@HWgVD75miF@Ob5Rx zf*=OV>eC+1+HYm&t--0|Oj@1&wCd4IDWlJ|(~I{qaAe7vgFV}(zFTrv?lAc@id!tL zvsLq2uN>r#$kF|FonQZVuNKIOZQ$$v=AVGS^No0Um8^`POIvPI=jN8L><+(rxXGEl z24FN}_{XuUX@!iCV90)~fH2(KqXu`U+wS$VYW=CLn)Z=j#@Xfb{KlYuXFC?Joz{n_ zI^usA)vjmK;bD;4j<(t76>INqk!*Ln4<c`o_Wh=rHh{^?HN1~~eOXVF@KV6OnK-b` zb&;i8cpb^<3{)g8@#40!)u_$rOr?j5AHb|@xp@Rcdf97_8|Z;J#LwzE*eIbFU`u0{ z;y!)TYV#VP<;ewtvDvz*A)$*Y1qd+62a@9T)WgqY<lP4a{;sT!Cra9T^#w@}knlg= z{-&FM^M>oeW6XQ^xmavHWSfFX5hBeMg%BKOG|^$%MPC!j%Uuq{HN=Cm-m=7i1QhO1 z0eiv+vHXM7jTWQhU$NN|U>==EEcmVO)@qB<{wFt=;I|2F<X?GF#g<{wH%xjaa+TE1 zG)iu#ArR0Q6u`sQd!Sk=<9|GJ)!T0?SWWlKZr6MfueZ&6$G?MGcb*sJsW6TZNOP2G z=~~ELgaAdYu=_AqXH5`xA;c(j0Qk{_2CYvofiYOw4_Gy6@;v-wG!md!!9Gl6kI+?k zTJAalw7x3J74-R0xDVMPDELfg%$ulSyBEa_skpor#&luF%gq=N4;BKsGk0TF^0W1n zc-Rd_kQI)fGzn{tYMAZb9^Wu0;sZA>fjkGcN7#noYs1lB8E8NRyyqe61$f-Q_UTM{ z{Q}aTxKH(5b`LWk*D3gy^t7i^BP^H=-E7H(<p=~<SeX-6MyoQ*DQM1Np<~po1;rwd zJ}SzaGN_sC8n~61689;+C#UIBa8Z3j6FkmKSB1Yvw<8iyqdG%?DMYE*9R?0#PaFQ1 zthYs-fViIViPk^&(Lu&68lWT(UU#nd;7`*{mv019+H72ujZWommZQPX=Hk*<z%gIX z-?$z+2MXo_<CtbLJlN5pk?F#KF@v3ogTKI)@yF}ITK8#azoB|vMjDl*9UPI*9i2g8 zU@H$C8sX#$i^h({Y{{7Zov&CxecV`9Sv;EUEJha@K=bpST-Rme1>k7(@P*Wa9k}{6 zg=;wU40~7lOtf|5biFRDrg`8gc5w`VSLrx)6=h$8f>r|2@3~*VpAA;Wj1!?4;N*7L zqg&_w`kAOPNx&HP*Q^)W?K8I&8STlEj0}`hY*XvO?JPJVcs%E;!&8T*(W~gbOT<rr zTBmh3ThDKvK&{}@1w1%`JAJ9>YRGcUnYSdVzfVk5mu-ZTK`?W!A0gY3c4!e>)iA$f zA+j53-2OsLd=N|VY%pn_5|6;8&r!0kX4<YG{rM!za_LsEy~IA-I%-zEb9$ayWExh! zA2hjQSwURYf)v>$jAJm;vm~fr;$8WiM~D`+t8#RccWsw<1$1c@K{jsWfoPYsiOTtu zM&BQ$V^=9(EGg>_&)4~8&V8M%LQFC1k#=Qi<Rl>v(udO2@!n&jX9k5o&z4<)mD?kL zriPW36og{k_Xtl)YZ^jrLkG&8t?K!4f_x~qGL=$qyU69ap-iF`A0aJ`rhp;Jay6^N zcp$lVhsb`}0ggP9RIr54*FUAGb9VnQre83{i>Yv$%u=Pt`_B_FIvFaKKp1IEN$GBk zJXQqQbjb-=q^OZ)lEDmYx~G|E>}frYey4?cRt26qv^m6dW&JU*-6KYbd<E8FhPzZR zk5rQP(!Dr31lYsY>~ee^fx;m8oeohnrLuA<Ld!9909<-wC)Ct4Fr5h+>+k&KQ`#}j zjR#_4q9@8soAdxjGpH+>#jID<clz;UUJ(whaOj%@XklDeHG)y5>CuX}Q{eUa>B<O2 z<5>I)4bD8=6;6hxz@16(^~HMo@->^0I>dsCn4Syt;YC_~5!f6iqmIooIe&d+Hw8QP z3(O0p0m;~BA>j6%Kp0bkl3e6!bvZuw!$LKU$~#(=WC<+Ph4=Kuwh@b=d{2eTIDhoJ z2lCp6NmO9m#u#0t6qV1`YUOX0_3JAgN<FIVJEjO`2281Fcu<3d`|GrOUlyqjqx(Fr zHG9`no+m6^onbCf4Ru<f=w^(@;>!ae5;)fm0iXyQEMZiwk0{g%MQYb0f1A;83T+z$ z8F*m>V-fYGaij)=CrS-@Q>KO}ra9uI<+Vff`a|ZLk%w`j7YJAr%60ou4meI=7i)+d z>S9I(Y?z#6a?^MXpuWw@WVy>qUj_U$yGh~EgX1NAfmBbH@k#8MUQot3aJlM^cQbIx z0C>*M;-^SUwi5Mmt<%Grg~s2$LVr4P4HOj8gX9D`u7X?<eKFV}m`Os8k-C({7uPWE zQL_;4+u_<c6TH)k8p!rXgR>r0C{pN3D6><g%Woj?1kKJ{uuX>b<>oPkzquB?iiE{U zmG&P}DoVEgP3|MB%*-@nva09w$ev?10W=^YA*u>-lX+6P0b(T)Jy`_|5w7y8%8^TF z5agH~K>jy0&LO|gNOlC+uI&3vW{F=O9qsp3v||S+9(Gs8`L$nGICp%6jrB$G#IUxo z-N+&gBcA(L^rNNU-62$!^d!tl;LOKcys$am57H;=pNdkP1FcC{%WIs1!_d>|0FwF@ z%NSHTEYx6wX$TgW1MjyYI5sm3373F%ORBVG)ibBhDHo0s&=#t3+*1T7E?gwpvD{7e z*+=n2(cYi%Qe2r+y9ei0SX%kcj0<J|#)4}Vk%^b1?QTXllzvC2sKtguW{i^3=x^R( z8jP6*vw_3T_2tVyC6qe{UH27LfJ<?fple!h`jVN)BOfV7N^<#wrI2AG#3g*Kv8?h_ z2$(k2Fk%Nzq#(F1#$5W#3_UjT*#+O8VZMpN=+IpCa`$8Aa`%m;Xk0r5GbP}EZ47fR zby&y-P>ry?;?IF{{v(5ijora59;?xD%I{Buu8Fj1&w(#L^FYPf$B}XL0NB*g%(&sh zW3S0A&GN?-o6#r(CV4WSygVM>p#CHJv%y?fr+Y=viJrTqb%wkNV1!DQ@AzG1;kNqh z3oP?|bywwJ4M(w19yrGOLr$gYtxm0yOX^N;%blhBAxY@{E9l*!&CsIXZ*V6#Q$7zh zyzb4dIf-?vzvap>3<^7zfJvvPc2#UIGdKUNYxQV4pR{V-cwN4KynFImI*Yv)9UABF zqM2+~Z^aY5tO9%x*p$lWqGEuSbBZ<c_v2lG$Kumnh+a0Y81>FGj1Y>XF9?cBq|(2t z$j?N))zIB4hDKT^=&Eb0(jemcat-O!L0l8>V+N+Bd-?GXiI^VbfOoH>r|q&h^jOeq zNdW}Jzb|vWAmw{$qkRd#5q@F;E=49%L$>1*6>92f^Hy(}E)jE9b$N786xV$It}#Q@ z*sPJ&Z_Ba{QYz2ek3J+f-e;XoC?N_5W9oUDcGX4_CiK-zEexyx;cX-K3a+-jum_4b z7ssW)68d<ZcM{tO06ss?5!SKYmVG@Xp#Gy^lpK$u6-a84%G#j3Q-36H(s>XSrK{T! z3Q;6?sJscM>e0~Ip9WYHuSb;Iiu$p;37}70B0OBJ?2|;JOm>ifLE5j$a<~<+s}V3m zG4g~?&NfjfJ?el_tWR2^a_}7g)Uj#7q#VC%k%w@-mXo1vfN2yaB7x27^m^t(oOxhp zFQMQkxnv{Npi&h@KVCX)V0h=bfiKg{b94u9LB7GvNWe`hk6ibAG_n_Z#$#Hs;>o#P ziYb+n5D;Vez7i^^E8u*{W|-IJ`5kW}-Lo4myy?uZMn=BHtFW8@(^*1HAdZUq2U!BD z8+9y9t?PIf;B-=33=49X*z3_UJQuml$(6(rI>@dFOE@rm_l)uy6;|^Q+EG%h)#z^R zTPAkWjfu@=(8`4uK5yx=0r+|VG<I&C&ebAJzF4}Qn7aLiHV}mFs*fhOtZl0FYJ^VP z&}S89VG=$Z;|VoPFgEa0|0heAeDUX;SEfqG5Wp<VxHXa`F{;XrA3HB7j+3Q#=Hvf! zvziYk1hg1o^_~uTHFJ=Y{DJY~NP_*#5NFpK_n))Nf&hvR!p@$);15X!DAkhr-(+0x zr^b^KXbjeUsl*GK&vn00fZm!5bT_}F_Jx(vKV^yd+}y7Z)keu4Z9YDE#{LLu^a<m} zi|TmW-srvf+a}9&$qDAvo0oEr#MD*=9&6wCPoA46VMRELtXsmJ@8jeZ9)d>N$+w$* zM#2lCT|ZcUyqOM$jV?uiG<HSbPN?+x-eqG2HOhafIPdrQ9Qm@@t}ew0Qe>f;n_hvh z!|k!~1rWMnTsg5B8J)w9TH;07s{>Ugdi2aq4DvCq)hQIFXmmK+)Q<<%fLP_o0&H&x z8)?rw7p2tlq%;`97Y}0ixH2{$B(CG49S)ILLP7N-(!Vz001E(Z_a5)lGOJzS=#_95 z|51{Y9Q!i-#W?BNz|jr@`5_Sb!2tGFI@m}rtJ<@$^q#8q5j<7g_N)0BOxr=Iizg0C zYK)El2orZ|u>}rJ3*ARytrd0KL6h@#v)8LAW9~?=&vnm=og8|UYO|)yDWtsLN*soh z^*2Q9uy*VxfJF4p5zlNzW(Xg#D(`73j$f<Zu$V`q)P|ky{Hgc%I0V}MAPiP4Y*y;~ zf*<hF*+QGgm<Ln;glg9wLPkE}TxuGa#F-sS<Xs>;kFuu&V3lXC`gJNdag?$mpb-$1 zpf0<dEXN6kEFH;jAdSfoyNx~$nuh#;08K!$zXKROkICO69X)@S{gINH0$M5<cVC?Q zvT;e?9O(II?9jh=m9ZOggbn$LdUQoGjj<J*8Td?(J`3ATziNgpr_;<Vc!X7?K~Xh0 z|1((4+14zuvl&Yj##_qLICGPoNjDbPCp)*z>D+G_r6As;%<KJJLZBJ6;$<s2RK%h< zy*;SZ^9Z`fc;|lsZbXAXq9Pd>d?>&Q@UbbYvVI~#T|C1};krB$a2y&;AN*|kzJNKM zy2SLh(U|~l>c!UEhya}opymz+d7&4JWsrbzA}Ik;=oS(x9@$7lSw8aw+TaFj>dKFF za2*I8t*9f>zB!?V^LTU_bAXv>%MAq<gfQruYJ0zR!eW27+39PMW%YbggIxkpu0PtO z0_^jVhEgwkD*wQ>6*YKTKsL@}|46Ec%&6je)UZ<)jS#)}J?R+t(YWD@Zg0-ijXo@r zm2J7?fyzv@HUULwt&|x!wC>8>m#BzP9lKC`(97AhJ+&yIGhe}?07D8<H<rQYdeScU zLuJ}~6hMCzZW*_*DRjY!lR{B5WlOD-3lsZ7hz$*xyr$OU=n!~;;+9j(`VOD;fRVw& zPHT_&)3`ciAA`Y7d~=v|x5DIWS&eWlBN3cvw{z<!2uutkl>6czaoP<Kx$w4a7tqi$ z^zZ?VUX4=R|HJ|*g#a!KQ{Iha%OW<=Ya8w_D13ihAm(pgeSaGfkuo6~U5CVlB_FP_ z63Lm2Zj%z=2@`N)_zEqp4b-x@hz)~5kW<@p7Hl5?B!|{%BlK8heAxXUmIXm%J>0uM z0u>jpnyQ@bY&X=RrjA*bh~+}DWHv2<f}uy}GJ0SB7I9_67o-%GC;aaM-1VY~;#Hl- zqDFsm3qjg3K5P(FV+%{f$Xv3e12e{#g!kI+MP8{Z_Mu~|8TFnQhz4jq+nP#3kxS&8 zX0lY?DUK*0m7G!@Ukp8RaNx;Q^s?za{NU)y)a`%{gw*#viA*=G#dIouoJE4K3Qbcv zHbJ$LJNko-(GYy0y=@$W!^)T{z+@_Aa;$$H*dAq61EEzwK*$2jqhjLJ4%^gIvUEzn zYl#wiy~S!Q^28J=1U>NLkqMd(g<>1B_?V+mqHSuFE{dH9V;nUbaEohp{+xn2R3c`f z%YjT|*jEKo!4v?|&3QE42IH(7`szJHZ_l<C$XG8|;LS!c&iQ1I0LGa^vqFr98t8xT z=WVZY#bP1ea3)H#Y<*h9)erss*0@?Qnfz~i)!97o0b!wDAycSbdMIE8w)i>+<Gbfj z(t`mBZAdmGr|6Z*v`Zrzp>%Pi*uoDu*G-JHHmBkWOe;Nt40t}#YVv%xT71exqE;uO zSJ6U8+K=sPX|(BnA=m^guWYJ_;z@rCi-jAtJe`WXgi|;qYAOR)i$?-(>va3#int^? z1v2uzEzI?J2H1rufakc&G+S<ZgMld{$KPTBrz%Pf5p=!jhmP8%dq(c{;GRBt`KV!# zD$qWb6&(#xY|luszmCAs&z|)GPqINk<<8bk9FP)ci%;ahPuud`H%R&vtkZv@K<duY z*l;dLGw_zZ5wbFOcL42=zkIr<R^8O$e~PxDHwz=rWry@BhNHm4ank_jBjEp|kAQ0t z&6UBEy*X+9Nz>HynTwP}<zaP@_2EWe-6(jvE%F~=OT%rpbjWX?9lwz4q#QRFEIc6F zqce~48)J2*t=P&ga2V4(etm!XjLB@4tW@b?WtuM+XsN7aEMUqeIK)h=_$D~SaQGb) zxT7(N!D=0J!}(m5MSf2)NLvI7M8Hr3L(6@gGEv7~Rl{M-l?D*zv&%d9^yrl#&K#!! zh>rORdnp7deuvsp`UFn01eEu5WVT@f5j$PApmyIZ5+U0H)D=W2aL0d0lfHcX^`HOR z^jgYd8P6a!<{mR(7MBk&@t6;3Hkyd(b?^2Smz%9f`A|cB?C3TPoEJ8S(1(~3j<1M| zTh2|y<uPX&ze!I-G7n2vNO2Cj*nmlqKjRH53ZIW9kzjh=o6cEA#Y{{{iS3g31cYwJ zlvrK0P0)bLAZUQS1!#XjVvS)XGE07J?VVq*p@jDOG#&UX;cOc>9@^Xu-c;&9<5Ne9 zN>_~SXL__Ac)?kmXyGLznp;DM0LfKAN4oufXgf5Xrv%0D#V!q=RQ{p22AWXjBpeY0 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%0D`duHwc}VjXLf7WCBB|(Q<IeNM~{qH)>aQL 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 AssI20 diff --git a/doc/bashref.ps b/doc/bashref.ps index 02ab1d34c..a4d1b8e34 100644 --- a/doc/bashref.ps +++ b/doc/bashref.ps @@ -1,8 +1,8 @@ %!PS-Adobe-2.0 -%%Creator: dvips(k) 2021.1 Copyright 2021 Radical Eye Software +%%Creator: dvips(k) 2024.1 (TeX Live 2024) Copyright 2024 Radical Eye Software %%Title: bashref.dvi -%%CreationDate: Mon Sep 19 16:02:49 2022 -%%Pages: 196 +%%CreationDate: Fri Apr 5 16:10:55 2024 +%%Pages: 203 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR10 CMTT10 CMSL10 CMSY10 CMMI12 CMMI10 CMCSC10 @@ -12,7 +12,7 @@ %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi %DVIPSParameters: dpi=600 -%DVIPSSource: TeX output 2022.09.19:1202 +%DVIPSSource: TeX output 2024.04.05:1210 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -1367,7 +1367,9 @@ dup 80 /P put dup 82 /R put dup 84 /T put dup 88 /X put +dup 91 /bracketleft put dup 92 /backslash put +dup 93 /bracketright put dup 95 /underscore put dup 97 /a put dup 98 /b put @@ -1587,231 +1589,237 @@ A12133B5B601D971345EB6D892B85FB971DB8C4A4188ADA6575DC6DC42D2F0C8 650DDF28FC1AF21FA124C16EE8ABB98904F03E7F49E54348B1AF2211A1768768 D62E35EA2EF7F2756B58168F9FFB5785DAEAB324C90FDF6207E670DF277D6AB5 F0924B26BCF52CDA2980680320314F41244B73DA6367C434B5DCDB96B6F0F454 -89BE7553B58CB230BE71B2C7A7F1D63C3B1E80C159DD941027EA44D54767355C -6EB30D38D407FA1189474C2F9D3FD92F5CC6CECC63CF6CA6B33D77F08D274A1B -0AD7C2DCEE55F1B425BCB98F24D0BD431A5BAF6F42BF897BDE9198E6BB331C81 -6B5B63F3604235FB733A882BA5464A3E5415341C8E9A2E79A5896C8C334CCBB8 -A2047CB4E6BB167BD586FFC4A1409B4C13DA0B84608126D10754D562A9812A79 -F2B3078B7CD1D0A37A192E1D58623331B582E62291B6EF6FE3C92E8EC9A40C37 -B251270944393FCF133426FBCE86A318E16141654DD7BB12AD46B60A05E86D3F -14BDDE12FE3B17F9E2443E057FD0A25677D1F17C2BD87F84BA7D6AE3E7EF3EF9 -3DEB268B580A7823253430FF8D80FEFA0F9E4F66D0733E251E7F680B8B23B7B5 -A614F4FAEFAB880843451E4D9840AF7B8BBB6333E010A169528748AFBAE9A6D9 -499E221149C0AA19D536F3F121DF1AE056D3D0FF5C6D837BD8061153501F0209 -79076B4E0C63738C54BB31156F2273A327D3B6D0DDB5039D27D1C4020E90C94E -4A4B156B32F28DD132D2AB4D9CFE18B7851A65BA965382B23CCC0915EB6847A0 -B14492B0405395BDDAB36C2205F229891D989196608455629CB3CD67E07DEDB6 -A09E68BE431182D6CE52CE41B8531FF111ECECA60A68E7E7BDB6B91C7B694688 -47786E04588AE7D21DC6F2309D492FC9795DD054C150ED94110A7F89CF3E92F7 -4649D3F4C778FBF02ADA9E577C5EBA24A1F0278E9D9DC5556A60EADEC068AC57 -5359E9FD0D2E3E7B0006127F95F333D2BE77C70EBB163EA9679207C76C999903 -50D76BDAB2DF0D6A506EEA9C952A3D28D419FB78CC64078CD91C39A5D4FCD9B9 -D135A4E24E373E24047EF1180D3BF51DE4167F3945825B7124198FCDF7432E20 -C35BE9B0C7C0CC194867C4CE9BCD27860826C14749B811E8FEE29015CD65E7F5 -307300B316054B7914CB7464E6AA37DFF4BD0AFC04C0E8BFD1269E2D4CB5A201 -785C32B6B5656A7F6CA6AD8F7C77DF8F70B8F99C88BD8D548E78986096C917F1 -C0C195F4CE7972F1354B95D1BD84934D80CFD09FA14F3DF37300B5E8C208C66B -C544BFBF9B18AA7E27AC4E8567CB7188C20B1807BE56BB2B348C551767F40A07 -022EBCBE0749DE0D8FF1E2792A0BF2B84C940A127203E2216EA4F8689C84C739 -58D5693082E057B67C9BD80FBCA6463D9EFBA2B9F4D3C8F239C1A70D8A4A824C -B045489E1C6BCD28DA4F1BEA2BD80D424722479D0E8A1A99A8B2FE26822D3198 -722E2D276A123A95128EB6C5C6AF9AAD213D088EE92917E0870179888296F4D1 -0FFB87A340D7F052B07C6274027559A8B3843F2422C3640848CD8BF664645EA7 -20EBCB14E9B15F552E9E793B2F5D7BFE849817CCDD9BAF7DBA26BEED536DF80B -E250F831A12EC703AEE5ED6F5C688849B00C85AF124451A29CB67398FD3D4015 -C5D8824B7EC81F85CE9170560BEACD43ABF5EB5329A4E38431F243099B8F88F6 -58E8F6A7DF8AED9153CA90F9C941320750E5C26262BD14CE3CDBA9AED2270546 -24917E378761B5A96F0689511C12A0E598E7BD54A6ABD40AA4FE651AAB9DE733 -88677F863423C714476E797F4A22B94AF646819D91F9612E6E5CCFD9F7D11AB2 -DBDD3C8ED9D257E5A8BE4B7DF9997EB2ED23EBF4BFCBA1993796E34AD93C8CAD -DDEE75EC199BF642C34BA24E323A7099C4B7D232328ED3C7A3BD476FC0B3D921 -8E773970ED221BFD47FC656BD14FEE47F06834C55C0EF960DF0265E847EA4421 -CF81FDFB40A4C997B1EDA3556FCD8BB4EB141EAF4DF853FD353120BBD37D4B44 -2CA1C1D5D8A5626870AAFD925B461A65FA0E2924A197F27B224E53A7140A83C3 -10A7F3868E4801C216EBFC5F8391A1576C69537686DB1CF7F2AE299FB03CF222 -6A38A57466A9C0DC13E9A8200649DA837A6C40E002C25114F0CFB3D2C0A9AF20 -C7B387856AEEE008AD60FA1B26179D95B3486DD3E5BBD096D4B105117418F60B -26AEFDF53A815F712956AFAE0585B243D5A2B4AF5B517023867F57ECE2D538D3 -89804EFA77C0D9CE905A3303F19A9AB3B228A03B88CB26631814A36C27D09E56 -E965514293048ACF6BBAC80329F0422591F06637A274F2582A6BC59ECE5DBB7B -7CB5056822A2426E4359DE632F89734AEB6F783952B007EA1D2EBB7CFB1C1D78 -7EADDF28CA76CE34F78E568B11AA69FAB64D8B0FC933FAD372B9EF19D5F31A25 -35BAF075193980F69141538B7E7586E8DB534762CBD9E95442AD17C8C2F438D4 -DAC23C5F5D772D1809ECEB13809662C6C8B97DCFA5AFD46C6CF3FC6F07BDD604 -5A4C473C7FF3ED34462A79487EB47D5BD4580E98BD44CFF016DCC942E831F7BC -759A345622F5C65C067C83F7474EBEEF62E63F5B49519E0E1A7BA279784977DB -C646DFE8D0AC7D78CD27B8F9D8E18A3A1C1AD427A85401543B0CE4F4469FE14F -BFD02FEBB2050BD06558FEBA3F61D35AE7A0E49639DF68910174F41A20F5C839 -79545CB64FA870FA9AAB20B80CE7D85DB8A0F64915E1742E5835B5152BCD4B89 -4E7BC34E8D8CC93F5DE675090B7BDAD2728022F29D6A7D0F5508A189B8E0CCBB -87AB29B9680978381252A9A37AD5CEBA8E4F8CA2C06D7A2133FF94B3AF05EA7B -0C1497955A4E04183092871E66A7386E063B58764B62C33B6997F2E0D7F4AB76 -6093F606DF3C4E5F8A06E9D602E36F2DF4CA2E8C59EA6F8537A8269EEE427271 -E1FFFFEC053811328AB1FC60821F4C13D277EC66F56F27E0208726C915CBF178 -D2DFBEB767FE08AF1DEF4219F6C97BA5505DA3CF06BCE02E8E5013872DDB0E9B -01103E8F7213F1A00C473349820BA7F202C9F8632B9D7AC4FCC98287175CB2EC -7800B05D4A7617335D1CCC2094F70BA6556A99F2B9365409971DA4BA1913B7E8 -D6D84BBF1CB40FFCBC9B1C6306E9A148F39874A1E2A8FC677EB621FB46304D59 -B982A381886E99BE387640FAEFCE8182A2CC9AC76C1078D9E03CEAFA0747AACE -16F9A95F5A97265A208ABD10C3BF49C1856461B710A29887CB6D57B61D24DDC1 -5DBBFEE1DD43EA93F9B0B70276253A89546A4E3918B5C93A991AD372606F091F -EC35362E95CAAC00280DB8BA15DFA28F9AF7A6F9EC51FB2ADE3D15599AF01627 -B4D96F3D35FC4995EB18DA916FB6D24B56D60084E0CD8A32AB934845FF24B689 -67883D3EAB40BAB8FEBC3C17F6145CE0B96BA50A9ABEC6F1FF955C9FF80DF500 -BEEC7AEEA8C2FAA50968A57FFA5E9AFBAFF08451A63625918621B8FE9A46255C -86B9E145C2526E4D27F974D74221FC90BC691454D7CC6413AEE3321D64E57F58 -81DF5C5954C794492D4135F130855678C8BB7C4A3E3551D2E89F3DF6B049D857 -9115B3697E07024C34985FDAF5EF24210B2864F9471879835FBFED10D7535002 -E806CE05BEC90ACF31E49AA6C62D9E169196A7C358E1AA5C886C1E1544568C2B -500F208319AFCB37CBE4A568136B1791844DB5B627F66C75DBB7FCAAC4EA4620 -323DD1FC501727D74CEEA2C3D1B4D63779120AE0B0843FC978E1EAA6FE4FC337 -46F12F90D6168313CA077B85990EF9C6EB27F71D3B8C262FDBB297B1B88625E4 -62143BD515F6FEFEBAAF35ADF8B57486A14DC57614488C332E2B81B946397168 -1069CE21C21E8F44B2DB9EFC2F4160F17ADC55DA7218DBE64FBD5BABCA4C5718 -9748B61B8F7F9573847E7BB62DCA710100AD39FA555C2C3B3800BCE7C78BA404 -3DBEE48BA6328F47B1E72A507432BE4A7EA3F0AF034B2E29A4CFFAE8B30AF806 -F71936B5FE86F73F9C4B81123E1AE017B60EB2EB108EAC9579F3EF142CEEC861 -EAECCABA38C637306D8379C02548B4B33FB5D8A6169B3899A2D0499899946371 -BCD7D8D37924B66E4DFDF25ECD17408AA78A9A1D1C8A3615E428EDAE3E56017A -0C2CD79A0D92E6DDC54746E5095B4659D73A251F3B7FD7625CE7EAC3EFB61409 -C1463D4015619BA3746F278188E2F30F997D477491D39625C2B829845D4EA97E -56D7F3883CDD5938BF1BDCA2DF5BBD0E3D495554A01840E7E7A081A736DF6D7E -6BDD580F717261F6A3953157DA05AA3B57FBB1E977C6A43555F7BDFCB35C8B8E -B6356A4F1B01317B029918AB1C0400CD32A41515CA55E59CDC9C4641A570DA65 -96FA304094735B8B070FCDBA01DABC55C493A390F3A0B60D31C6EE3176BD5257 -F6CFCD17682833155B9DE734CE94A232BF9FD8AA45C35DCC0B16FEE6EC241BC1 -E944B183ACFFCBA57219D6BD9132E9610780D4AB07FB2F77428114E800CB5855 -0C26502E4B09AD0EC8A4B342DA732E24CBCBC7BEB15322BC3A4B004CB9652D27 -B85525C0E59DF15D972EE00D5D6DCDDE1A141DEDF0BF9309463C7D5D0D95077C -F41EACAFA40CBA65004AC680983DB2CC892C1089A58514051E2C0FC16D74056B -34151DCA72FADD08765BF73139A2A15A46067064490DAC5AB5039C545DE452F7 -35416482DD79C77BD0256D6BE9005C80902D9BE36F06FA4431F1DFBA7C982C66 -E141DA88A07902D83D1A83C0538DF2F8F8719409259196EC46B9D7815E17F836 -4F06E024C1A05A594BCC8C7489B3DE9E9C3B9D2D15B8149F6D09A35A8444CE1C -704E2B8F273FAD8128A6033E871F1A36B95969EF3EA5EE8DE9B2720FED92D43A -B894DFB54E6F3E4D92E18AFD7B4D72FD675AB7447729F4F618FAC4938ABBE9BF -29045FD578CFEDE3BAFA55419C564CE39F324592304FF7B339DC2D889C157BE3 -A182E42DBCB6BEA7773CE2A058EE2076C77CC98F0C37CE8128E1671D8BD8AEB3 -1E724BE5297AEF6F8F90719D75E2218470034C970C7C3BC4CE46234CF25F3092 -526AD39838F4DD2399A4DE9BE341EA932FC616B02FBFE7EC68AD6E98F5AB3040 -C00C615ED7C7D427387D5AA99594EAFD54D3CE88DEEAB0A408C14B48217D73B7 -AAFF60D219FC71262E05BF9D15DA7739FAB52683D27A3E094B40D84E3C272D26 -F9CC125000AADA491137363EEBDE57EF302943F26E7DE08EC71707B62E717F92 -BE14CB7F5D4FF8A802030B10FA8AB4D93286AC064E0547032E2AAFA3E353F4A2 -4B3EA80EF4221C81BA5698D58A460C0412B1C1BF143E547DCA6CCA584011B55F -526742925DBE8300564D621015796CD280DE573A0A733C5F6B2D4AD811EE4778 -FE60F46ACF6B6943B07B0EB0E4636823430A301B06BE688CC24785A8896BCD42 -39B97D9963BB74BD8BF05217B615983E27994FBEDB0577010E46BCAA04DB1A72 -77F4ED8257D145EC44B2B65B408BC71239F1C2E8434C1C2FEE4642BEA1C60C7A -F02BF44140D0DA3E94D7658312A212FABFC0AA74F3512D513E82248BACD86A15 -B5A2C71F3692C8D702FA11B262ECE33B382C681D54BC275FBAB326D928A6A327 -AB2ABFF6C4A65339D945A671AD839DEACA7412ACA3253B399BA17E363B213FCC -962725E0BD8CCE55985438700204353C507E4DB96C1B57DD7A071124476A5095 -BDA4C678F514AA63CADCF7003C73F0C505590526C0D1BCD7DAC0236243AEE48A -5F351E12194DE6754336416227A63FE6C37D472EA1688AFD88FC94922094E799 -930F9952B2B1B86D1436C843A90AA230139B82449E16EA8B29108AA624933D1F -5BB7E1EC1E7F570BD1DC0D2A9C338F4590D590AFE417D289B103E11156D66DEF -F9E1F1F3A68DF07D69FB9CF4D09F2E2D47C2168E0BCECB8BA1CF856826B51D23 -D440D7EE177DC922BA367BC69871D037A508B80E75F43C331F7BB5FC96493932 -0B3CA39DB05BB29C08348C3F0FAC71ADA5C07BCFD160FE677A8A030BDE2C4A6C -A866D89CAFBFE647B36F7931664F82997CBFDECB6F88C795609D1C94DC80F09A -87221FDA3A699D0748F97E682B5B8C7B1EBA75BD44070DDBECB03824F9EA4E1B -BC66A08A1A0F8AA3DC482D408C83B469315A2ABA685726CEA99BC3D15799D28D -F81E0BB958E34A1670C23FCEE68A0DADD2BE3CFCC1914A9FA1B1A661693ADFC6 -378969C2E400E5D4AB0CB7DC0FA364893D2484DA98264CB50205B7B9A2532492 -81A2697B7FA4FC77E71D3117608ED7C474AA2FFEE8B3F1DD942CB16A1FF06C6F -3741AF6972D09A5EDA91B4EDE291A7B3E3D481005BB578DC5AF13C88EEE51380 -78E57D8E073FA46B89A1DD73D51AB11B44048CE2F031031018697B2DA15BB05E -B69E9E54F85E09EE3EBCFF390A9CF28B6F0932A46C9306911F2F36B8CA3ABC14 -022697A6BC560C0A688BD1E49AA9F9CF4917130ECF08F8C500E0096A8BE65E01 -EE5A2618E3C9DDD1D227EB584EB0763C6294B91DADC65AA8F1DB42BA25E77B9B -AAAABEC083135CC61C18987128961505D602E409C3DB90F301CE2C792AB7ABD8 -1B7442AB1C8D5B1FB5AB30444752254A530B227A1E7CBC615B045031FB07468D -DADBE63C9D1AC6F9742738FCF2896ECE73C131063E6FB3B954A77D1CD1F5764E -3D65A43B627E8E7E10C5966C93E9794A3211D8B349D7F82427A65DA39B4AD1AE -A98733594453F400B9841AD3207DF9A908372B8B7F8EAC363D0DDFB90411A468 -1F3F0E7A8DE83F3CEC745BF43D341A20F53BD0667B70613FDB9B1379FA61BC9E -516118F7B1DC7A7B049E116A7A254F0A363694920EA156DF045038B14C229E6D -19417309B6DFF125580B5279D6CAE9AACA31A1D21AAEA8DE32180F3456AF61E8 -AE8011BFA62D7B5A8123A02131D2F622211D74F104CD729CBE44EBC70672C064 -6D8CE2956C78B8CAF172B77E78F715DDA875A492CDD8357CB3AA3ED817043631 -0D278C6AB079AEC3C765D5E0267BD01C1D3F7AAACD0CF34EF8DD2FC5FF8FE85D -E410CBDCE53C792C0ED5092162DB85E6465C058D95816008077E22EB8A98B8D2 -5A4069933FD3F3DE33926152C7DC712807784C17863EC78F9FD11A335BF8C700 -F4963F7C1A72505DB453012507A3EE51F7F2E814CB77769356C7654B9569B68D -36C1EBCFACDF5C8D91D664820758BA73A83EA9660E33D4589C6950CC5C612710 -E9E97BEB5CB43F4109FC0F9E5EA126C1A9F2C4617CA146013F01E810EED40041 -5D09159A5B53FAF73B151499CF4BA3B79A19034CE461298D1B805E161CE837C1 -AE9A7298DB9DD9E54C347E64772AF100A5C736173D5D9EF4C45B8FF6B0ECA17D -C1ED7FA96FAC530778D72CAB4D9920BC6C137EB3187B1DEE669419753B6472C4 -D29CF8ECD1D43AC03DB1413FE6D4A883857E2574C68AEC9AC7F7D3173E9EA7AD -1A8762EB2841D29BA98B8C59BF52ADB41A1C06A50FA66C169605BF950AFFFED3 -6CF7FEE0126C0AF7DD7A85796BE7D93A124581EF530AA62DF4CB06A15A17D5E3 -F6B6B72CD7481D238B2EF97123EE55872A43599ADCD48443DD9DFBFD469C71D2 -624FE39A15FB5CC331E29B20DD1994FDBADF7E2843ADFEFFB38AF6E727638848 -4BB02352C312A363C3920604853550205484499FE4B1D8A29A4913F440E37CBA -9CFE762651749B33BA532DDFEBA257869BE4585699ED7E918FF72D25F3EC0C71 -FC49EF6C38DD1105AE50D5DC13F6F1AE2FC3264C549FB4D8D1A959F25DFE913C -1ABC41ECBB5B538BA1C4870E73599BA518FF41B6445D40C9B9BDAC2D552E4533 -670DE0C40C155E46AEDF4B74BD44A521815B69981F4F33EBB774391320D8B6DB -AD9C9545557E21A90EA55CFA69B967F3E136CCA7A1E4C9D312D9D08940DECDC9 -1CF646FB7704DFDF783BBB1739DA1D2EF502B7B3A1FBEAD958DC99F086E6B623 -F33ADC3A758138E47EA3DE1FEC42EBC6D675C658B9AAA4C4054B1F81CCC4D216 -9559BDFD542140F2A101095F2B3FFEA124F407A8B650032265A48F065C3C5BD9 -66D843E3A2BA4CD7BF56A6A10D90345B51969A03DF45C91EBC2F3023A3E71B4A -B6A7DADD9E3EC5C70207F743157A9A0ECE23A7A95798C2174281A7900919878D -955EBCA90D02F07876BC3F5EB1252A82D891FB3E0FB9FC032080E6F700981030 -0E81FC3E75AC8623405CCAFA66161D5D471EA952F0FD4021754CB61A7B1445AC -0547EBD4D78F141651A5DEA6262F0A05559DEFD434C5485FFBEEE7DA647AFECD -6468D4D3905576FC4F670BA39F9956149CC371A31ACA929CAF0668B667DC2CF1 -8810C6CF9EA23CD5576C110183155DBF15F24CF0973532800274127C6C5C9C79 -EB121C5F0B74D824DDFA3EC4BD7BBB8799875B8A4776B60F840AE96A8F65724F -AAC3BB862EA6F8697D935C60C2DF962F042521BB1D3EB9C064F2CBFD84208D94 -0E9DD9242157F4D3DB05194E82FAD5EF8C09092055463620D1B4ACE3BF9CFDC4 -989840A2CE7BF62D69BBC387D0184EBD87755E4DCEB8296D1005E79779A19B14 -354345A8A0324F1E61D88A22BC423D3DB4686ACB6CCA3CC515B6A5CCA6C888FD -EC2CCB767778AE3FFD7ECBD8BF1828E5BDDF119247F11B299D5272C475C67113 -8F124D25A87AD26E8B7713A5189FDD920EAFC2D9069664744B6E7DE1AB20E798 -8BF9B8885BED5CBAB904032F6245AC752F392524C2FE09F636B59B17ACCE1E56 -ECDE4533FEE75C6ACA81D3FD7F6032B865D8B6F34DF1A99E01FB6534659921FB -81631346B4530CC2E6B15389D7D494A4851C5F7CB502B394E840ECB67D359B77 -E940F25E96B3AA4DBFB0689C0C8D41EBFB5A9ABF7B817AC487093BA1013E345F -B42647E031C22B77A319062324A7BBFDC9DAB8D5B1E0FA4FBF8036AD46E554F9 -6B925144323B7A79B103E808A43954DB3A03120EE5BF48438C0ED2807DE82FF1 -6800AA8EEEA5C70DE747B76246A437B09F402C8E1B545636E0860F670D10E42D -9A579DEFDAFC447917E0AE0AD49F49EFEEAD72A83149A22A82F909670FDF4A9A -B106147A6CD6D9CA4FD64191B7883E89C30FFC30D3262B9B09CD7D2440D85F28 -983B191CEDBCDBC06375195625EB247DAF10FC3F01259E59184F462B79592181 -DF37D70E698785E55E0810FC9A5094CA115B2067FBEE8ECB004856C68A18AE7C -9BB1186342D173068A4BD0020FC703BC1AE0D6C8EF419288D7D0F09042C5CAC3 -6DDFFAF9A79B811C55F41AC87F93DF99604165A6D6E5938016C155EC65393512 -EF633ED422AD5BF8C66AD82B3B2B0FC59F40ACA8B62B2195D84478F920C39EFC -328C9EEAB999D28CB365ABA1A99475D57D5BE151E107BCA6C65D535D8E83EF91 -35EC4BBDC0C5A124CE24ED6438F2103FA03BC103F899CC0E12428A807763DDC6 -CD11E4E11749145810B387906A7B3065BCF1E29A1815ED266DB7A429C3FB2860 -AF3305E4FE74E02626385FAB8833954B803CFF6231810CA8CE55EDB2DC2B1548 -82CFD8F105CC916B0A55E3955BEF60680B544501937E9A6FBDFF46E12B114967 -2066512D019B1D727D3759A708E5D8D8FCD99AEB82B3F660602F8BAF091A7AE9 -ECBF15E7720F671E85C5FE0F2871CE1EC0A7B8E923EDD845F6C8F8CEACC70DDD -B2F87D25890FF1DB39BFF89A3A35B8B14742B4571F412CDF868177E406C9D07D -B759D6D32A7CE22D9E9FD13802A170F20E9FD757B9DA76B12712FF6DD0E8F4E7 -4A296ED2795FFA5A0C3CE468C7A9CCA440C599C207BB084B1DEE83817A7F23EA -1A4ECF72B3786D72D12FE3123D33559793046B7773C9E93AC1172026014A1917 -4B66A90C5AF50072C231F0B633F00EFED86156FF0FBD451C161DD06EDF438A38 -91FA7FFBA022A4468296A7132A3D88AC243B69C70F21B7AEB32BB5AA21800620 -BE6C8116466BB843FEBE361D1DE93F7C38033C95EBFA922FCC45E812B48B1A23 -C33DE814EE885A2354B37C05E405D27A0D3870E19CC718284FDD45F7926758DC -62D79AC3C0EAF56B6812049148970442ABD34E0C0F49A6711A134C5568004C24 -F92B455E8085D77F48ECE5FE9F27FA91379C939919E78B60A54E235B0936B3F0 -E1300BB4CBFD05A18DBBBD76524B4084D54D990F5EA51E5670906E358B4977C1 -83A7124F6BC09AEC282DB90C2FCCD9D909B57959E6E68D2E50344100EB1B6BD0 -1A1FF2C2F0B250AC9B1FFB4A4EF3F28C022F7F873C7B3AF76E1830C9B039154F -B3C3BD97DB32958B718D53B552A7A0B033E84EE515B42184A22A10D77FFE32EC -0E1CD1708021D7931DC73448FB098A61C93B7D03F98465BA42D4B927AB115C49 -C0CB10C0BD55B16E6BA017306506D3D610ABECFA480D8840DAAF23CA03AFD9CF -1075C8E9B821499DE23D4882C081D51649E5C9BBFF1431057D95D61351287B03 -0C9A6BD89F33C02555E1D3DA7F03CC395C1E3633FC902F060DF903FC96C19719 -A5B6A39E +89BE772F9A8B4DF72D83923C87D8DE5F9A34F4A221A0813168DA2140B74E415E +E0D7776B86AFCA5C6A24927FEE493B0DEA861804ADEFDF7823EDE59940E2810C +6AB44DFD9C2C79C5C4855B514C64A33EFC4411006D6E7F10A3A6869D5FD6DA0F +CA39AF458C583D600D18C9AC9C8325A02139C24C634144862E1A07448BE8BA4F +09030D39AA74BA631AF7370E3FC2F33FB9F19052D5418504BD590495996A3A13 +45AAE77F8A657FF1A41B3E2D9166743E3DAB549E89BBBF14FDBBD6BBAF24089A +1878AF0758A56AB894D1232CBF429242B5A64EFFCA48D249E3FCCDAF57E7D159 +5C1502BDA4F4FB6611AD80E2F770C9937138B5BC0A55FB2211ABFEDB3E8592A8 +301DDA6ED93ECD673CD5A1AA3FBDBB62772313AD1C3A2B73C05D7202905F10A7 +6D295A07FCE97831B68BCAB081F0DF2BA97D425F409EFBAE2831CDEB299E353D +BBDD7CE0041FB2DBF57E6F66EAEB0DA1A6AEBF50E78779440410764AB03A7100 +F491E92782B89A665B288A03846796394367C05A213E072A108BDD9D1D1763DE +15CB12CA7984981AE8C05019D3AF855E37023E14012C2BA0DB768E37C3128EE0 +9C0DFE3D3B3BC42634AFAF4FCECE835689C49690222C5E2136E4843AA9E428EE +990B46FBFF889F75D756D5D82D5D6772857997D4BA8258744C6665573E661A79 +73EAAA2BCDFA1A76AC5925A93CF052C766ED8B37806ABA24F37E50401799E2DD +9DD1738F09EF3F2BC7029AE73B55991D89523B09FAE70671D22D0509CEEA68FE +B5C14A412A3FB6F70A7BA5090CEB3923A17527AA7BE9B49105340C6A561DF3A5 +AAB7B43DD95461D1611D6D8BDA96F5578662BCEA3054CDA86033EECC7347B564 +BB034F230FDF4337703C156865E1EF00CA127816572A1DC5F341895256155CF4 +83848B1CC0C3B4B5DD2007A0FAE66FF9DB4DED11F1FD718CF6D2F186DE00C338 +DA4A895A31539C698ADBED03E308E2309BA867EE59AED836DDF6A19B96345E86 +BA48CC96CEBA702644952EAEABC4E9048961518C5C6DF396E7089AC7493B847D +D4BAB5647316AD31A97D54E9EB5D292704FF8F43ED9F61C0BE5A7EC3E7C2B833 +73FFA3C78139D494B0ADA8B03414A2A5339BE9DC9AFADBF801CDAB652D68BB70 +85FF2F586F8202D534893B9B79F7AF2B27D46672C23E38903454FC2632CB3368 +D87397E13270EC8F7BB76074C39C26323042FBA8922455247EB620A4B42458F4 +D770E3E5A08DEA1FD34A862A4D8F8FFA5E31534CFDB5143E7D547E3A47655E05 +E2AE1C613F4D0195EABE455BE63FE2AFE2D6B514FAD44C86F3938511DC9EB590 +530E055F904A71C4FF15CACE3F59403B19344DB4809B558AA5F5640DB3E682AA +307DDA3A46DFBA6A7AF82110519F8D51FB66C4F8D9F4A18BB9EEA39D6C637F0E +765DC076740D8A210C91797AD069DF95DE0260F446C3A20A1C6434686DD99150 +6FBE2ED314B24B65B28C607AE3EA478BCFD62FF2FF5EDE5BE4BE0000E939B71F +333AA8981A43024A509531E075E74594492A7121798BE5E5C4EA29F2744DC70B +20EDB37953452FCE47CC55C9DF7F65DDAFFDF95D89C21F6879B6D292922D4D32 +241554B5EAF2DB8231E2655E9E3397E4A167B48BD93BC16C91D6B6C4B1696685 +ECCA2B198F1BCA5B38F97DABDF27C3A8323A581BD40FD2DAC5C9C06A229DA326 +ADC343604C50285CC6E45AAEB1054AB0973A5BD73573CC389A6606C3BAC40B9A +E5F4A5685E04F91CC25B5C41A6231FA9EF82B3EE1FED2F1BB6D79096E2A775DA +CCD42E4080EA17947BD80667E6564E47DD90C62CF0C5311C68AB72AD15E5E46C +A2D38A95530827F5C5BF7C24ADA00F28CF981CF0CC80B473A9351EE28CD6841A +84BA8CDFA125371ECECCECD50DFABF6EE5B5371A7E943C51AD3E8EDF018DE8EA +B50D8A530B6C7ED32C07222B4D469155B85FC06401AA264A2160D058359F0718 +0B4AA76823BF3E55332876BAC15FB8A00E023B88222494C1814084719E931BE5 +AD8094E3BB1372543444E13C3B286FC981799FF55CF24842C9CBC772C17CB0A2 +67D927930E29A050F682EE612F51157B33671A195558D8CFD8DBC5480AA59372 +BC9C85BE5270EF8EBA5AC71B1B47386268786BA4A4737D11677BE0E6FEAC378B +94F4A215C3D8E0EF94638F3C8C95CC59FE19665017756C82FFCCEC6F628846A3 +B88BDEE7D41840313891A2A53F9747AC96BDD710260010C3E6C882210860BDFB +FD81FFA8A8D2657ED7C69759ED4415F5CBCDCDA031425E083C215FAE849758D3 +8C55E03A58B2646C16C49E29B612AD5D9610EB02C7415B2211F883CDCD498BEC +F24F473F374A4DCC56050299361A8FA9BAE265F894118D3B702C360EBF6BD9F7 +A1CF799BE7F05284AB25328880B1E34D204D62F5415DBB13C272987BDD6C6D5D +DDAEDB62BB850A78B386B3E7D343620188FA7C6FB8843C91FD4B1DAFCAE89624 +E298853990A9636B92FCDD7DCFEF07F933667B6109968C1C18555DD9D785D55A +D2B809BDFA936E80B10E1B07A013FDF2FC7E262A7C450317936CB2E13EFD216F +8D4BF87DF0B973061F6B735856A6D43724928D14433B258B92AE531CEA5C1B3C +2681CBAD39D30225349BA5D63E8BE4455BDC1342363386E54F52C199DDC97669 +1DA0EFB51A0767DCC5A372C900F2255A048462D0F0889B94EFF8C268EA69C288 +DA43B3D6869990716907CB6FF064891F97BC35870C555DC449FB22884E878A9F +775CBC50E1C7A0DDC1B8502EFD9D311AF1C6A3D41C9EA7AB9B43298381C2DA70 +5BB5A2EEA278EAEAF9145620395014AC2D072FA3C5840B774D6BBA087AF8E06C +53FFCD7AB6457833E36A38D553F3DC2E26D3DB94BF895479E1B78AF5E28A0464 +E29DE61BD7F0159E446578F3DEFEAE202F0D61AF1B9B85834C21BE1AEE1BCEC0 +6B6E1EC00CA76D322AA6ABAA4F85AE991C1AFE4893C1C9CF09FC79FF5B6242BD +5AAC4848860A6CBC20AFE3EF45730391313299D73A29BA4F73C4B9A1472DA8ED +B37F1B834D4FEE2FD05DD8EE128667A0EE09287E0558055B6B07436D899EBCC0 +C26080CA3C3E3051AAC6BB3EC8B942B2E50B6BDD8BBC5104E32E985A67146491 +0ED84C3E46F213F63EBC56FF9D9C430D0C6283D4025AB4486422B6F7E5475A48 +0147B79C294A26A8A3DB778FAEFFFF86D656DA68F73B62755944D3E9C9DC7384 +BC6B6EA4D5FE33DD5F1C4036D6FD0BF96BD1E349C399BB8E5B26813CC04789EE +41F8F69A52562925FA3BDB3DEB77E2533E400443601BC26FBC11633D6D1A0AE4 +F1EC279F562B01D16721CC35CBB026D55DC9284AB6B66E656F312CEEA139E222 +03C18DFD2394DE44C06D4F0CE1192446B0FB716E158977E4E2C4D5E3064D5DE1 +201AA823E48D802779749172B52C7BD0F5BECF500467F67D0EC28A90410377FD +50AD0DE079F5075A277A8AA3D32BF8D6E10D21CA4799D173EC7252F37914BA64 +0134F63128085D5FDA5809546D8ECD3A472A8E6ECEF5716006FD6DA2CC2062E6 +A0D41CF2CA28DF02A15BD5346B6B127CDC043DDB44939B8C44656D7AE89E5379 +0F6CF55384D6F57EC48CE446B3201B818449D259F825132486DA1837058C1597 +D06F41CD17C93A0D84229C222646F3AFE6D1EB17FF0715EFD413E500CFEE5FAF +B223BED993A34D4FA0021665FC990AFEDD7EF971F687F31525B5C4CF594328ED +D41A3167EC7EE5245ADF14208506FDD9819BCF26CFFABF2FDFA439FECFE313CF +4C56A01A57BB74DFDF0B6493B67B48EAAFFB0BBE085813F33B9422679E1FC5C9 +248A10352B308EECC3C858CDD48BA6122B34F4547A5784B8E1C9B7C1AC664C06 +E6BD693494EE6BA7B130A652A11006A5C61FA47A6F41B79A3C14C4C23658EA68 +B8D26062E8F12C96C206C6388183ABF24129418CAF9FB647548352117AAAEADA +75C036583CA3A39276743268F4EF0D425650FAC75AFB7D7A2B55341077D14763 +82A5D676697652B1438BC41D5B5FFD93D32CF6B894F6D12BC4B2BDFE1B680F76 +198C9FF07A909421ABAB0E05752959DD7539AE8D79F1E8D4FBA3DD5364E227E9 +E1BF95734D934FA5C2D021F000BAA3B311F8BC7424BF7C4261626872D7538617 +C72354153521F52C4A989B46DAD27248484A640205680BB1876077A64CFB08F4 +498A69CC9B33816B4D74103B0034EB2DEB43A64E289E60CC6BEF125C9DBABD61 +DEA279ED18F3FD2B32872A2CF271F43B5A12DD65989C534BD1F5215C7B1D170E +EAF5EB0D5071A3A0844BD7B6EB222EDC241DBD99F2A1A11C804681FBC0BEE05D +EB30035AE38F24EC06567B12EE2362A08DD0DFDB03DAB756ECBE1A81D305EA46 +6DC12099132322BB2FB4765FE2380BE8DA45A7012E382F3A59EF5AE330186232 +7EAB71C1E2FDF7FE2FA8531DB7E051AB25698189AA3659BD3E51532537C0BC30 +5669514BDBC8017BA3920C2A8CD5029BF3C0E6AA862AB1EBBF30FA217F52F262 +6B10CF40E210EEBC25BCDEA43E3ACFCB72DCE26360F8C54A5C82D1EDDDA79C28 +E10F8EEB0B7AEF1681DBF55B60E579DFFA8456AC917C22F41A55A64C772465D4 +95972F119ACA2EB81DB5CF344EF39C543D6BCCDD366EF88EAD82B9205DEFD0E0 +76A18CD1D8DD304A792D8D5843674EA5327A63F0BE6F6296CA98854AF7543031 +A89A6840C939717FC6BB65EE10AF56128047CC1518772CFD320CD343167C81FF +DEA338507E032C84BC963B425F9E548085E2B48D7F3EAA3EE388E78B3C312800 +D1C851E085BDB00C8ED6AA4BA9D86B8802721C3E802E0AF93B18F6B6C234C2F5 +A5D629C7635C35492706A7185E2058C0D64267794C96F6806D9816FF7D7E5A3D +6DD863F9E390B4813B3CCF8C635928DF6A19073D699353B03AA949B91128DD18 +A3FBF6F99813E3A6F7848442992EBA3A50765666EB0230419CED3FB71596672D +B32E281BF56A2E706FDFC43BAE9B1B6D29FC517739B2D4ED3213869B3C09DC3F +D827192257DC30E43C035D047FCB8F2B19AAAE4371F10F77211ECE4C44AE734B +44E8A97E9CA64664F67CCCBA2DC4E52F675DB203740442E9E51549007981A659 +1E7226503A65AFD6F87EADA9B8DCB79D8ADD2226D66C2DD96E4ACF400AC11BFE +04DC3C1891FAB032E5F45E605E469A232EAFA81DED58C14B9B6533835EF3BDA6 +19C5454B73CF2661A200D1C56EE44A135C3F020909229A9E85B56D6FE5B58034 +DBF6E85203FE25390C7E1312DBAFAE6C9DDBCAA76D8FB0746F03A829573C8735 +986578F28B255E54E157FC97524A09A8D6F2BCE85B0BF1930B6A7466605D20A6 +98D8214A313BFE8F1165F386E9DF2FB0694D1ED7CC4BED2B93F4FEC32E82ADFF +2F6EF8779C901AC0143226201EF7DAC8D41C468F3E12965FFC05F1711002E3EE +FF96EF2664B70273460380CB944697B8F4110BEBFD4866694F971FA4CC4633FD +F813DB6B2C71A93C78B1963410DA2FE24912529153CE564A5883771C3796D7B6 +5995EEFDE27ED81A490233978508C3D637C8B5A07617A06CF0BEAD995BF0A290 +C56252C65AA9CB6218A966554109773460A75844830627B93B07C2AD8CF7A6EF +4CB1756E38E626AEE65F072CB64FAF64D992BF830E3A1FBC206E44CA3FB9FF50 +667ED7D62EDBA2B9E9EE705A60B9DEA4C19E17DDF5E0293E70BA0001A473BD9C +7D0BC0D8BA2B250AD0DDA501E0CAEEEA9BFDA88023FBD8B8F3F1B14619A6AD76 +9FF76B5B87EFDF9BE1698AF0109C1065FE016E23742FB0F6EC764B73DE017D0F +791C0DF32C47C7A7698494CC95F033939BB747916757ECAB30DE569BD04E127A +6121FBAC36258B92B7CCA7ECCEF74377CABABE2D63497A1A7101208C83CD8A7A +38FC478FC6C60741B5864F1C8081BADE071FA6EF22D9648FEC99DA1A91713A9F +B4C1136FEC0F7D8C8DA93B6EC09D2A64B0C64075CE5FF8E71FAEE9E7ADBBC045 +7EDE9E815946B4DF9AA4543CBD257C23D82C8C36CA68E57B3D08895D15061D2E +FA63C67490C80A7E9D54F4558D78672735CF1FAAF001F2E095885F8C579607EB +22FB10F2E828F6F4B08C8598C5513E179893B25FD883751ADECF745538AC70F3 +442416D7BCC039DFC1A5A18DCFAC74FEB0C5F8E4DD19AB2443F90439610D9F7E +83182C6DD2B8AB61F71E9F161F2CFD0F42934D99478C78EB5222A632EF5EAE5D +6007C530A552A27D6AE331193186EA0CA4709FC021079DF090B9BAFDE32B07C1 +5325A8D10CAA9E2ED3C1B85D1BB9D1E80AA6F2CCA5C3031002831152CC0DC20A +CB3528325CDFB0D14391DE9140B2854E6D204B3C5BE0E2E8214D10AB888D9339 +CFA1845B2A1B883C92CB7133D8E113BD39D5618D3B3F945542F0FF7AFF7ECB92 +F311159A844C2EC00D201E5624EE08A52C691CB3EB91D8D8ACA1B60FD4E3AC53 +9495E08CD4C0E4B660DCEB192F35080FB5B92A2DDA870AEB3A445E7F14D38A05 +8F82886134EDC37AAA82354EB1F28951B0A75D0EE6A2BA792C8A13CDA402FDEE +FA72739015120DE1831EE5982A6D90812FEE47FBDA290EE2861FC3A936B874A6 +45448E6FF0512485F2220B41339F976D5143F34EAAB6F1A745560F67EA472377 +E4719EE4F3E1BC832A49EC4F61DDA52B4AC928B2E009970C530E4E581BECA627 +0F588824D9E73CD3383F19AC67295BBC1A9A20F455F284D7A8F363011D8CDBA0 +370F00677837B84DB119610D4BBE83948A99C4A66D86177AC2F1D4C0E36C980C +BF2F6ACD8542848318D48F0D81B38C9B1BCCB53D987A62554D7819B3C5D7D43C +5F77520EC4AC81F0E15FD159E6F6F1E96AA71C6C2C84638B4E88C43782DFD0BA +909EC99E655AA9F4FF2191E50F5A9820ADD18B7514448295559D957121FE8BA7 +F5CED3EF7A921EC2586856D6AA832A0E4985C9CB52775050AFF46C984972256F +7744DE681222988BC3B956C6302FF495819861605B05AFEAC0E27CBF4527A721 +BA6792305FB8FB4A358ED8B9EC3676C260CB525DCA241869C5F96AC847BD48D1 +9609052FCB15B567E7C7AF944DF27CFCAF8E8CBF87DCC92B43F24344A4FEB93B +320E12CD54A9444420B5615BB82BDF7A82520B66FA9B6A60A101AA4F01E17F9D +F084BE6CCC009AAE4960B31B431B266C956245679DC3B040223A772B9E5A7947 +A6D83B7C6A66B2FD7B33CCAC24CF43C62A059BD271E06E3E45115319ED235702 +202C8ED2CBBE2CDDBF6C01917487AB14CC0D66E3CDCFCB524DAF33A327599F72 +B053A0574AD54BCB4022D4B857BDF80DF4B1346AAA05C993D0E1FB71E36C03DB +4F9975DBD6C6B348BEE9E3F901D02A80413FD64A8F597FB717D3E2F8133E9C03 +531DF16D119A9CE3385BB8D221E0A0A3F26C1B9F47B52DEBC694D110D8EA2865 +34070DAD3E9838C4E6E9A6884BFBAE752BAF2302252031BBD8681F1A5CC432DE +74EC422D7CBA6004786840CAD84CA51E01780A2FA3EB08A3903AE646627FAF62 +A7451DFE75B640AA73BFBEAC5F9E2B990C40E6F964BFEC05B77E483BBFB242CE +08CEC58A710B538105D36384DD4F51CB93580DDBF86987A58E5D19DD4C9452E0 +3BC91A68AE597B2C691B99B0D03635CEDCA10B215E7633ECC188A9B46CAACD65 +A0BA4D4E6CE707C3716CDA0939C574697DEB15D7641B80378DE496A4369E6B24 +64C01DE77D2B3D88EE1DF520B8E998C21C5B77F80BDA8607169471D6C04F7358 +DFC5BA5DEB5F996670C02E72D880261371CC877838534C34A0D336E9EC878197 +2DEC6D4E3A5D9B158C28C7417EBD7205751322C4233E3AF4E38A9E72F3E94949 +79027216C3DD9D7FF25F0727A54977132049343B2B6532DA14AB5E591A703B7E +B7A985A0B761A8D57395174ADBE75FB1F28918850B417E9A693DEF61BE9209BC +224F37EAC6A5475670D56CF7822452D725C25321A5B6E026963A67CA801E145F +DDAEBB7B09BF3B766A63704BD7DC45A1D930DD1AD0616E888FD321282984BAC7 +D947DD040AE7AD9D50A4574F802A0D58ACB2AB0B6D522734A085084BFD5F9038 +FE00BDB4ECA2B75019B5884652358D600CEC18A0BB95FEEB3ABC2A9D6A272162 +4B55A4DA79BC13003F0AB91237C00351FD4BD78E1B9ED3A4BD7E8D7A38F967A5 +A5487967651603CABF755F666C91950D783A24F95BD0EFFDCDF3A7836DF0B4BE +7547C6525123B0E6B9C7A17FC65C1B475AC392F02913A2423586EB9F8EB7C6A6 +2A10E5E893F5144107C6530E26217ED4E9B4D4A2233BEC2027314F9D81B0D718 +3FE48CA222D864B9B443DE6B936E7CAF71BD8BE99A553C98633E9085213506C0 +7DA55260AA119796E2AD6E45A7619ABCA9C172AB771A74EB93E3059DD4D8DF97 +1F0416CEEF4A37D0F02BE9E1E40C49BDAE7800FE82468FA222E277E8D51CCE08 +0F32BE536BA3F095E73B03FACB39319C3A8AC8E85538DBA8E308B1E36830B5AC +E8431EEF33AC58DEF2BFCA90FD0C0274459F52E8EC1B1AC3DD9DA078559A15FE +172B5F766E0EBD83FDC1C74FE599D98F899CDFC73417B43FBBB0B98C8C70214A +B1162B4F7F83617349B6A131890D957CC31688C203C691E1C602C79B774C0618 +C9AC9175AB581A76DACD630C444521CC1A84F4D8229E7C50FC135F154A77ECC0 +75BB336761CEF3D88F363D31A4AAE6846C6281E420FE51A7CF0166631A642B7B +BBFB3C7CFD27316DD73FE8145C1DC72F361CB75A44BCB0796A261BEEBE8C6D08 +55B16FA0DCD515E1B0D189330FBF11177772757A5E24F244AF0C973D99A17855 +EA5119D29ED78C075CD6752EB437C170AFDD16714E634E359FF52916991A14D1 +7F5136DD09FF06F72A316701FDBC6CD8D8028FD3EF5DB08AFDDD3E1B78BBC187 +FB297B951444C8BB4BD0CC7D914A7F5372EF12ADF6A9225E7186FBED2EE59FD6 +B4C7EFFF37D22AB6CC6D784C9904F1654E7A7577199110A84C5205D306A43285 +0685C0A84E3738D058770AAF0CB0E70CAA236A899467D72A1E9DEE26E4C60EC9 +7D124D3416FD92E7430484FD18562403F15B70CD61C8CF7AA8DEBB89E4B18962 +9AD8C10B03705654C7EB81DAAC4D7F615C1AB94056F80EA25BD532BB7D2EB4C6 +4E028BBC4292A87921293EE1AB403F182F1D7066F8AD2D1C130079F356A7715D +EF1371C749261B681FFE1DAA837A5BF5C71A556503B3A0720C43849C44C0087E +76686D319B23396A3C16ECA8FAEB5D5091638888DA3494B64A568D262373A938 +EE557F2EBA817EBCEDB7C4BFFC78BF8F5337ACFADE220CF5898FD3429FA8951A +97655B025A3C5871042AA23803191751FBD4C706629607C77F85FA6139EB28EB +A2771645638494E8B616DD3837310D68AAB5FCFE13EA16DAB4C91E55DCEF892E +8014B2987E74D14B68E6D98625693C4F1AE693BA4F1BA4CCB55EEA74AE792A78 +6C94E95272C813013BCCE1BD59D50FC9127BC04D7A65B0A56B707651C576E1F0 +1C8E12068C4333207F3B2D7E4770510D017B7AEDEA544FAFC0C37261FC788E1C +AF7CFEE16CF006603D02996561746BA4496348F3CC822FBEA3992BF970EFB0C9 +9DCEEB3DAB4478784F3A707285699782E3E6982B61EE62EA72A743F47D6C9A72 +9B005199DF0D7A4A7A8563FBF852CFAE26E6014A992FFDB0581A11B83D6C63AE +8FC9CCA3A6013F78BFF3760F5FA35BCD76A9D7D4C52FA8D632CA507664B9A544 +8A56107B270DDDBE65DEA2BC8A59C817628CFF21BBB97B88D6CD97AA44F13F2C +648734B7734EAFFA7253B5AFABB7A027A5321A63A3C4FBD3C56A8D0E8B6A8B1F +B652EB69A6A9BA7A168AF5BBBBA8C7B7F8B7DADC828A2FCE014A49317FEAB0C9 +FA424EBC3FB814CEA7D41CF656A7BFD7B8C5AA1D45258C273D6C91813B4FA20A +A88D3E42E899E91D353D2D578A2038FA0AF031F97485B2C284887FB9BAB4D076 +A5581C85C7C71FE5D54628F0D1156040EDE09D917B50A9CBDCCC8F61135E235B +CADB00DBE972966C980F56A27335EAB4FA9457F82B0DC22D424202F2C69BF864 +B7AD34B6D9283FE4513DEB326E337F23C2EEBAF1170388C9D4B9B257263B6B07 +0C2B8090519BD36D8AB8769C0D9FCA0F97A0831338EB459AB8C7CDC5B3E0A526 +052CF077A303A0328F650F4E0860DD42FF4C2BB08C6CA5A85B93153DE5B90EFF +C52684DBD8BF9C9B0327BEAADEE8EF556C7506DFF53C9A2AEC612828D2D29F59 +3FDA64C441183204568565E8A614936BC6C55CE716DB232CF42BFD5FC0D8EB7F +2F920BB6C2CCFAC26D91B45872E0C2851523645A80760931F59ABB4DF1C86378 +E9F88053B558FDFC6896EF32B98F07C113764E3B436DC1A23612952E010B9775 +9C346120E7F2A1414089867606F0B8DFFFB3EECAC0FB0B1A8779A010811AC35E +734F91135EC6ABD75BA415BD22BF091F7E7E9F36F3E56E7BE8EC5D9B4E0CA026 +1B579657C0D4912FBE36A2FC25F1515FFC60D0231ABDBC0E9A0E35328C163839 +632BA4AAF97BBA8743F08B9B9CC0DA2401FD039661E52BBC685C1ED685C6BA19 +3DA98A683762BC5583DA32EA4C023200A759CE5ACE4CBC38B23B7502824B4AB2 +3DF208A588CE704A4A97BEF6253B8124 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -6097,6 +6105,7 @@ dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put +dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put @@ -6318,412 +6327,420 @@ B240D1888CB89FBB748FD10B214773D466A44AA2AF44371CA8B9A4450DA76EDC A2A807C55D74265931B553F6D7F132B110DDDD3361BC9563803C888B89881DD5 09E1A623957F074F5B3644BB3F93D7F96770C73499AC0AFC3D7157EA08BF9D15 DA7739FAB528A8BC30C0EA7899A3193CB9E8EB51EF67DF4F97D36005EC228B30 -E54D14471A6ADD6DFC0A9E18243743457F55C92DC10202632F8ED3DA25B4EC18 -A8602DA1E1AB8DEA6778893BA825CD9DE6E52089AACB336885882690FFE504C6 -7C0098265EDD8DCF06F07452CC311A8B516C61EBE50214B11B72132EE0033528 -13181B4280F37E2CDE07919B43D2120C22971BAE4821E799143EE8E2726D21A5 -E8728B8F0768597285E8420B583BF7E84B02BAC1991ABC1A5917039DF9EF3B8C -86C9A3CB4F1666755BBFC2E5623339D0ADDF433A6845728195D58C7AE4C04487 -F42B90E877B053AE9A6DD19B8910851CDBBB0702EAA0294506CBBC0A9A1049AE -CB08948CBFA5E8F07D51336C68A034893B6D146B0897024D482176B14FC63C97 -1F08988DDA2846BAA3E4EA0084642063BD71B165479641E15AB05BE6D9598891 -B18215FFF0BF4BF195D34703919C1DFB595F52568E46ECCC2855F69A375C25D5 -10718CE804ABB8C07763C09D9FF6A363C6210E108AC351864AFB17CB5A4AE336 -B582016781DE6A38EF6BEBA595FF4AE88B8C995D96417152176B66F9180FB6FB -5F6D7C6CFF01901E954BBA64CDDD83A0ADA2FF7CD6DD1EC365080E5159E51E66 -E2B32369F28D845BE68AAE8C67C30D2CD4E6ACB627A8DC9568CCCD414D85A2FD -CAFE36BD8991420E3672E2812D9ADFB4B7FA0C0E027503B6FDFC245B725D7EC6 -8AE43F6C8B168111F7E25DEDFD64AAC0BC8776F2D257A3AA8A74FA883092E4A2 -A887EFBD80EE15DF491C5D43D0CFABA834C11583ABC8D549E1DDEDD1A1A3CD5D -5659FC5808D20FF87DC95BEC80CD71B9E5BE3F304A1A03C2F666597072DE657F -75A1AB1193B5EADB81D92C4E4E41648666F0AC8AEBCD484D30FBDEBDD87E6BB5 -06265B9C04BA54625207A13FE4B6F292D27C3014F20FA77588CEC44C3F67DC59 -7F9A77E3CB226C5CC7167A33C006AF85B806097DA22428AF5F2AC68413EF5F44 -A29A02773A2E0C3116B0A016E5D1F5B212896772ECDA058AAB5FE55C60C89AF1 -0ADFAC6A1EEBB828671CC95C7604D4CCB1CCD89FC758131645522626D280A8D3 -B40E343B18EB52ABCF3511C9DE75D9D10E91FD5D780D5D36E484206EE99BBBD7 -FA03A5526800EAECA69F8B9B62E25017576CFB81783F420DCAED6C94CE71E8E7 -CD158B8F7DCA917ACDC5CBAECC9E0DDBF21BFB63DE462B810031D61B385EDBA3 -5FAC4BE68B0442575E0FB9FAB7113797A7EDE04BB699EAE0A23A47009ED0EE95 -58637EF6A5C077B9A0ABDDC9267290F878E80CF79DC2E65842879F2A7AB9D6E3 -0E296776CBDE5DEB9EDEF38BD020DFBD31379A6FED182FB3A0DCCB340A70DB0D -81280D3A0D373A2E672C68D2B2F08AF6061917779FE33419F77A5CA2ECF6E46F -E11D9803E4BAF5A7D0971F6708931CE92B5F83C998FA4716B73AE9A29E6F732D -A89F2A3E686DF93E5DBB6BC6C45C30736081395456D16E25AF42B0F8064DEB21 -2A9E1E4BC599A18E08955209F5195DAE5217F8189CEC5550C1491EE792B7F6B9 -BA2EF22477B92F0F9F6FE8AB9EAD6D6206377D202660FD7FB4BBB21C9F9E289D -D8F6AABC3862D7CAFE7AE4AA3E02B154749C029337C30E0E6452A8FCCB32B0D3 -E8FB74DC71D0874777F5E78D71E8C3D9FE33939CB3A910651438ABC55BDA1906 -4432BA1EA0366DB8B07247E4D1E5EEAF6AA804350D319AF66CCCDEB1104541BE -4C621C23CF07173F423D277173989655AE4EC72786203E00B223F19A4A1FEBBF -7C48EDEF9252AE6330304B5A92DFD8B3BEEEAC5CA058A9F8562E1D016CFFBC02 -539B46123685E87FDCEFFEC42D0106DAFFA86835667DAF47212A9B715DA7A446 -FDE048EC64661262495A7A9D01EF11109EDDB180C43EB9DB662963265EBCFAF9 -5470DD411214CCAEC8AC7F182DF8BD93FE984E1BFA8A1171F4619D213EA9810C -44C65998F3639A7278966684A56FD3A83060A36416430CB1CAADD42112E4302B -E3331562F5CCF6B5B68B60851AF7EC86B534CE1963A2149D9582820E4360870F -8FB29E163121459FACE85EB665765E6455A2D719C9619D55D60DCA65D46F1EB7 -3A5FCDE0284F82FAA0A49ED106D226D7C0052F647F0904556C4729D50455DBFE -7CFD9F8503FF76A117DFDD2B28BD444DD1B0EFDA48D1F6C2B26D805BF4506D7F -167850D37D16FD07CB5AFCA2C78769292AE449D53AFABBDAB026162AA850F133 -96D2213EEB37C3CBD535554FA70AA75964F357A5E847E63936740D9AB95B13D2 -90F334D8FEDA273BA84C7B370FB27D4701598BD6FD563DBD3A5F7B98FA97A9B3 -3E1F87D9664D7AF53A3B7CBFECE3A57856D03C766F8E1552EB33E441AC3AA6DF -1DCA2B9B577B646BEF8F0B25C3AA843939CD0AD20E0659885C7F8E488D2E8E4C -437ED072CCF065697FAEAF59D6D9E83592121D9B40A202003126983D7E169094 -F7FFF67C8F1F0B9F5F48C616BDA5C100804F8B9E6B4824949DC26B4634AA6C21 -E2B1B891A55E5B954D7987B7E6E3CB5E0FC645D7D0B8F7C627F5C642F4DC0453 -5A8E6494B9F4005D2E5F3432D7418111F730707FA9A0623AE971BAD1AB5FB931 -5EDDAC1DB70CDC151BF085D241202D7F1692A45BFA18EAEE8E8F79D5828C9592 -8D945F5177DDF3AF5062AE044BB523CA31378DAC15E19675497988764781797E -2EF746525D1857B45A0FDA679076ADBB5C4C2644A29225CD1E15744B1635B21A -D64C21EAB13BB8EE8B2759504217D8A06DCB690080DA7CDB2D9BC5BCA23017DF -3C73811C1840B092E3AFF36E3F322E3FD4B6E8A6CFF25BFC2EFA25940FDD4985 -F3D447E20960EA675B7CDC617974772691DEB833CED5F18D98FAC99B1F00CDB6 -EBD9E77A98413284C98E4CFB3726987F80B8A82DEC86085943750ABAF974BFF4 -5348BFF04DA5B9DE8238C13D8937427F03C1CDEE994B0C6ECA9D6ABF474DA97D -F34ABCC065173765858424E545421E38E79CE216F4FD5791FB51DB485D1467DB -0EF3A6DB914F763E3B0FC6BF0AF856A0C2BEC44E875C6D6D5A6AD777DA3B17A9 -91A9825B4C3C0AF1ED5D5F43036FE58CF48106D42825AF00D193BBF3B8465BED -00A2267AED6A07EAD4F5747E1EC018D2645FC78EBFE8D5C49FE792F33DFD8CB8 -CEDE83AE62B5A3112C6F5693A6CA7850D01F2F6582B00E7F9F20672C460A3B80 -09F6C9BBA22780BBA997534DAB7B0FD5DBE4003E3FFE8539900458CB905FB0D1 -8E76029048C7E070D2C24E8840A3269EB340B2394D37B3628EC608366FB2A695 -7FDBE02249D82AB905AD105804B6D8E912F2BB7C9625F4B09A7F99325CD7EBA9 -E7083842781FD5746AAF7AEBD6AB5ECCA4D5928B9913D360AEA835FF9379A782 -7B47DC824CB51E77317540378971D2AACDBBE242BAF561128AF71E639F67ACD0 -B04251C644C9C9B26C6D1AF06AC685B5A0D008EC6FD0105F64976613BFAAD28D -83AB4F5D1CB5C570AD134575EBB95781C701BF4C9FF8C344251773C12E1C0859 -119108448094F41E3EA84BA93A582FFBF33CD086F1FB78AC26E44858863AE3F2 -15DDBE2B9C27D8484C480EC74C1847E4DAF520E507A6B5BDC786145EAD85FACB -66900381C821444834B653F6D511AF6553FB221112A438BCC8193B330881027A -908CFAA18E86A2D326326FFC25457C9041BB23701584BAE3FC9185B4B5AB6956 -D8F2BA841F98B0B93F8144B35234067B12FFFDD274DE40183837AAFFEE380CD7 -28DC181C76DA7A4AF637197F53A931D2666E751A2B899F20FFF9FA312A1A79DF -E04432E4D4591C525B67D008DB6FB611CE089A96D25457291663FA9F264576B0 -74A5AF80BDEA1D411DC027775EB5F1A1B135B5E5ACFACE7EF66A2EDBE90771D7 -5D52FD964D4DDE1C419EF7812B15EFBF7481F90F44C276CB3AB69FD5C16EDD5D -41A3F665C6B86CAA2F7C832AEDE7CE813DE65EB0424D45A721CF7CC7E2E2ACA2 -2F0FB88F1D61B60F5B7557BB94A88B94CC15BB89B9E67B1C93156586703EA237 -398EF6F454C70B7F93AD86E1CA3A722BAE4EB6912D19B56DA223484ABFB4C863 -AE40A43BCA384B6FA642B5FDC1877D993BEB7DC9C572B096F15F33A5C95F66EE -8DD97A03EAA53F319C3BC9D2F12F0AEF079256604C6DF649E264EDE6E30E7828 -7B74BB86578FB903BA583C955B1A4CAD417073145D7B2405F03AA98F989D1C90 -8C3F625B28B2B5A8BB5C3E97DF05017B0DF1C7E32F8203556EC952BB2FA045FD -76A9903FEA605A8F03BC4025B4737BBF8C35DA55D0DC2E2DCFD8B9D6C1310AFD -481FCB0AE96095FF7E54BE72F713E00C5553B95EB23247C8F17CBCF9D76CD146 -86543993C53CD843B2284EDF996A0014140A2BC3D6B7CF1883541F932CF17A68 -09030CB936AE925C6CEDE67B053BDA271A427CAC85EADBEEB559E50FE1983DA5 -69476CEAE07BEF681CF40593806F3766189536EBDF92AC72270EBAA9DEC38C82 -8E27F56DC72BB45C38BDEF1E809B69E8C9A787FA37E636C678B7684A74B718B3 -CEF980C3214631C7E89947CC1577259B3E7ED37BCEC9622538B3E21677C48974 -A1F687EB3BB9662F88E6A3D387C9A30C30EB4E206F586B4A90B61729A84A612B -395975B134FEAE92AA05AF675A9D995F60BFA37FCA4D098F91B9D0854B0D1992 -8A3DBA87301552C291F404FA4F590243B24E3D4C6F23CD9874D4EBEDCD51C1E2 -BAF3EB9B690ADE288031FD6481D5C40044F71CEC3AE50F6704D9236839EF9B1C -7FDA3F6E4039FBD2E5B99BB31573BDDA7236FED53D49CF51E3D4B1EECC9F530E -41E5FD3099C5BBDE367D1ABA42A476DC8C7015E1E028595994748D526E2E1D78 -D8DEE2625BD9EBA9A23BD4FAC1BD00DC3C08B078F96F4252843A566B22718B8D -0D4A3B7FFF310A76ED12B345A3AEE2F6C8A1AD394665A6F8C9EBD044A4AB0706 -958E404F955C4E46DF196E1C9BD16E47D60D4EC935864D1A922A5F08DDFCFD34 -21285BADA201BE83254B4A817F7372B64481B3929F1292E12BC91667763E382D -66720076AC19BF952A5B6A7A36D50338F256119F85E44093EE26D7EEA0DB0A6A -2D11DEDFC942EA5E22F4202359C91C65F4B7623EBC539EBA75815866CC964AFA -6369952AB12AF0F7D0F3BADACE96BCC865B4C246D392F6D118CAD444A97E6F89 -3100F3D786EE03431E1B3F1F45E2BC45AD0EF659667E757BAB0E7182DE558C8F -4CF615B2B286B2EDAA9B8A28312DDC1E586CC1225FF6435465A4AF56CCB2694E -B131A72BA2650689E03239761A264AA922FB6544395D991C3DB620F50006C140 -4258D85225E8013155B4531A6FA2017EA450F77F91AC191C50C1A2FAE77B1B05 -F40339270FF24D91BD842CCADBF9DFEA5AA13CA2C8EA069A242C93A73B9BF6CB -5C01247F02AE06329464E02C5A3F6835C3B2A1F110E0E72D907C8629DC0219E0 -4BD43EAD38454B8100021E55FA294C53188B6323F64C0042CC2F9728F776C99F -66B34990B279FD59B4AE356D1DB317F18DA66AF2E12EB5C9553D58BD075424A3 -00BFA49F981FBC0733F388710A62EE9216A96A959B700B02FD79E2174093D6EE -30E5CA22AD61E0563AA18865E47A4DF8FFD40FCAAF36FA72136533B3184BA684 -87E2C88C4A8F119F1DCC5B7CC8BCA31CD23806E08CB77530038FB09CABC6A035 -E21971E5088665D46747FC3D66B0626295252642C833862FCEF1C749CA6B6199 -738198327FBCD7DA364D6F0AE000DC56AA44D8A7D3E74BB7A7C91B117203257C -1ED384C741B14E526571B06E3665865D89A494F32D78674BB62063DF2A48989E -12293072B16049DBC1AAD7EDEBE0DF69F69FAC857D950BD962E17C8BF097DD63 -DA98E41A07C1C299FF834D41D6B075C8802E1081764B017809361A4C1043D141 -C340AA469642D10EAD0ED5F01314CDC9024EBE21924D5488B9FF775934B1B563 -591AF1D8973CF814A987637E8C8231653036AC5714B74680F23D2A41770C1E02 -22659A92D305AFCE2AFC973776939095B142E60375D5CC0AA54CE490BDE293A9 -F19DBD653D7BA4D9C968FDDEBB95A0B6035016FE534D438DD0BF26336F83C555 -1BF5AD6CA8F02CD063CC67D2929D2B6ABB42DFE5FCEE51D583155BD8FE72AB28 -BD423808157195E0293F75818ED5ECD68294C8B6866948084078D83246E9ED70 -38667D6B3398710C5ABC172F446AA0C5AF3F4023F08CC22D02E51D804299A12B -9503C2AA055914AA5DD5481A1B92CF8F70BFED758B447EEB256272CE393FAB8C -08F090E434EA61838AAA3CF02356D5EA8A8323881E413579C55123F64E817D51 -7504A8A473E7D6C39662B665556F9C5CF0F3DF9D42C0C03AA3FBD95DEAF4DA64 -B41FF342092A5445E96FCC6CC910DD9EDF8DAABDF255814A0D0D874B03D3687B -1441639C03FE3176093361CFF731478E609E4A86AF8810832EF983C5EACE4CF1 -AB8419AE0655F8DD18DE8E68F320BC1C1FA89DF622A03866E8AC8EBCBC336E76 -8AF4E24D9D53E0003E4FEE40D4386BC59E6FE3FB13AB6FB94D28FBBD95576A20 -8F8ECFC0952959796BE533D4867224DFC44D079FB8166AEF46F118CFC1B114DD -C87AA0156DFA28A10D8599B40588E1F84907CE0300C7A8CF3C6DB63505A79D04 -1AE29BB896A6B2266FEFB1CA6799CF384B1113F54ECE96FB5C8C90E0B36367AF -5E580A75E1EA2278CFBD60956D333FA75BCAFBEB7FA767EB960097BD38D4F4F3 -E16F00AB29674C802F1EBE7291B4452664260992AF6F834C1D02273BF1B3EA24 -5D6CB3D611F1A99F27300035ED706E6C3D18F56C7CFC472134A96690FCF476D0 -6843014794534851A4CAAA547D5DC4AADC3D94A03BE478FCDCE19CB05BC7CF54 -8B88D9698141D2309327680139F05275D56D025ECA13A25B3211A0F07AFEFFAF -2FB4A48CD4CC4915F988A619C6410A2E16B031EC19B7FDB904D149467F1D295D -6777FDC0712AA90E529D4768339EF966B5907B41CB1258BE514B39C8F853D28A -8951224C1FD0EA80D19D0BEF548A23E70E9D172A2FC6E6BAE3900D81D4E6C530 -1317BBAC68FFE952F47EDFDE434966B89B9E6DB348C6D3D8D10EF6254AAD9B9E -427FCA129A3867C5A0CA1723D4828F8DB1D99774606CC00BEBDB15E02A88F7AA -2B3F47F420E12A5104A09D6AC903E0C9C715BB99A87DBC453829F2ED8CC6A934 -FE875D5947EB0B7C5FBF193769C209CFB55AB5E331DA007C22517035295F7833 -C5F54040629BFE9CF0FD9FA9FF10A7DA143138CE41689004557E0DA6A51349BB -9530B852DBB52EC7FAFA39FCF8381CE3419AF0E9E6D69B14E5020C8DECFB66CA -7071451B87A1FDD2789736E5A3DAB0644CC9727B58529B5A807388CF904C1BEB -8CD7B322676FF8B7CC6A25F887CBCA97DE6A7CC53DD7142BBBD1FB447634E2A5 -E52158C7CA2951E87722298B50ACCD1A381F3FCEA2B8669026C751898DFBE999 -49B86879D78B50F5CBB3FFF59FB9CC55D6C0AFD190C521C9D087B8F0C34B11BE -7F5C705FCED255F6376E3A86A49B49E8059406A6A387FA711478EAC4007E5D80 -C907C72BCB7DF583F76B6685ED9B4262F607D69B23554D1D275A03692D5DFE85 -5002120CD7786263ACDE7CA7158644D8D8D78A757182C03620DC5112538E66F1 -61B30CC11B60AAA0B1873A846DB6281D7AE2420A76E6F66FA5D5B288B8888666 -F707AA8F77363AE3C2B0BBF0577D0131F0F7FAB358AB10A0511605B28C5402B5 -C5EA4466ABBAC85601CF8E61101D80F84D7FD7629620B931302E14E7A89B8955 -41D7A89413A906399D5E375665A4C24DEBA6DFFBC751E23F4D17642D391A4626 -F8397EC5553572023B0F57D5430E35163156F76CFE24442D041B6FA0B44AF48C -15FE0C8C9CBC300AF3A8BBB79B5BA6D2D1F45A294E201DC327BCFFBB5CBCF384 -CF4FDE8C9B07874E8C954603C4A4F0EE585610B19976F6682B41FE2EB56299BA -25EFC2604FBD73F7DE1AF858F325DB0D1FD2A3F8965A1DB71CB68C23ECFFE678 -E08C34E52C0E0B4F61B2CBAF3E765ABABDBE364B31C5C7AD94BB7CD5C92AB012 -43DDCD9A83C43F021176F69945AE6A702FCCACEBF5DBCBA63A92D82453DE824B -B240CFF9B29DF6677D635BCDB3A22DE9F1C0172F32136BC107A1CF2C614897F5 -D6D1C35B2ECDE7E0C8D8BDBF30944D46DEDBCF50E9C45D49A4AECDD5E079BA5E -4866856A603494B605E4E5BE811E626B6A5F54938324785CF96240C12CF83F2A -5302D5588F54E27486A9BB00BAA9262145DA0B7A1DA5E514DD6789692290109C -3F6C8C1C63E49C74BBCDF5FD1D7CC7CBBDEE68BDEED59DAA8BF185044C159365 -0CE5077F69F99A1368365057527484D54BE5461BE90AD66334149EDB5EE3317A -E9070F453CC27111F223C18081AE540DEB5F17E1978E28FB47C5033AA48E55E1 -AD0574F400E446499C63C0937ECBC03CD00E75355E2C41BCC160FB1D793D0407 -355BE741FF520F35C41C0EE6F7FE36065F33B4E30C6DCE227B4B514A575D09A0 -47A0BB2C03240393E73A976A06C6FAF22B9EB30619149F05E9B65F651F8E6199 -634F9485E2AAB2BDED709E56126111165A08D0171538BA37E325A173E4982BE2 -55023BBA920F46060883183231565C764196AFB26DEA93056F0FB140630E9725 -1EE72FB4374FF43A2A8E0807B8F77EB429B7B9D5ABBDC04072836F7EFB4DEE53 -26C1CEC5F6CF13334B84F47EBD1975A83FAE789C309A9243919104C844B6220C -F0FF4E9C6E693A6E4EB2D260D7DA96FDB956216E30C5EAC29AA568894361FAB2 -F9EEEDBFD197B278BAB7F2AD3DEBF46B0B1EE58F005132844C96171806BCD864 -2FD40897CC3E719856A9D137B772AFEEDDAB2D2B353C0705EFEDDC42D169818F -A2D0404F7C84DC9F9CB7527A36F7D8555FAC44AF8A91E872985FA0D758D1C898 -35BE8560D6B584ED66CF9D834C9EA63434575FBB33E54554D9E4B127EC94F55E -7B761616E717A84216C8BC656F79B0E567553932D9F30D3355A30BCB9DC8BC80 -1779D6995E35B3D97D019601BFB970E3CBE8483FF168860909534621D8873D37 -0073F48FEE38F40A8468FC016F7F76E6E1F09D33DD992FEDCFB2ED3860472E84 -6204643E41699ADF19440FDD4F0DCEEEEF52351B782DD90583361B7B8B5541BB -61D25A5AF18FA9F70C599F424C8F9DCFB47420CF4104120FC6F9EF03DF7133FB -27ECF4D848F5E067A27377985CCD10DF85D1E517B813DAD36E8A40664B352FAA -184A8DA90C0DE095DBEF531A2481BB31996107FC057A9D6263514089FA589C0E -AFD82DD4EFEF08B80F0F5D91B22E47A0474E27A0EE54755D6280AF36D52E0938 -C57614778147BEB2E89B4236B540457C7FF03BDB6C6978BB69584FCB58AE4625 -CE733497EC0DF25BEDB7E116C6C5D3FEEEB88D771D616AF3D050B3FA5568F6BB -0752DD30E42B427CB6E6065CD968C6257F2B325F94CC09F5729FD6FD3797E1B6 -C403A0F1B8F3784A856226E64EC3FDE9F4837B512BA76F78F781E44888186DC9 -C2CABDCD59EC4145F6A70B539A55941E830E6237C72AA0B9BF6EFBA37C0DA4B1 -CB4A72627A658600CEA384EC9C5B0CCD3C1ED49530A29C6A6091529CD8D6B2B7 -027E5759C87D353F4090802F13CCB8BBADF1AB157AA24310AA275F0A4FFDA93E -00E05E4E534735CF2E575DD02FCA3CFA96A9896451E9C0365CFB4952667E2CFD -D46D3ABC40FA8F73EC68072FB5AE920E14B37C19FF936649DF5E8A978E9DC653 -FC7DADD3C2DCB18A1839CDA3653470E56E62230A148304BFD323CB1D39F6B50E -D5444C8608AB03D73183210E6F4AAA2EB97005E0824AA42A2ACA2732A58B1D36 -B1EC88C9C5E2848AADED90D2F1BDA936C84263BE055793C553B986B73FE8A22C -1AD099E1D845D5AA1106670C003D889E169ED1877DC454B7601112DC539F56A4 -E936C65227E657BE26FEB41C8E950BCF54224805D9FD6D2516C4DEC09FAA3753 -262B0A82357EBA2978E80C291B267EE5FC19FB8B6BD509DEE723E032FBCAD28A -658F6516D60AE9498A14E1B0AD1FDDC65025EE114FD73EB506992C1FCA660041 -98B6C72AB28D643BFFE1160F600543585524AD00C04BA1C54335536D65B7C471 -FC823F7AEF385E4A013C4924750DC2DC8F12388029D0D958368C15B9C19D718A -AC77E9831E75A330583871159AB63A0332984FDF9D0498AFFD678ABA43FB885D -EB0662034DCEB9576F66174254B26CC515DDAF9EDFFADA446BB02E356E2B6499 -C6B7F4BADF5F949F6E50CD85E869646102F2E5222E62405A4798955E7F4D8018 -050125F9F5F1D8B2AD8F4A6472C2661DF0BBC6B669868C6CB8B52D528F389911 -CD58F5AA9592027BE25DB1946ED1216F2E915B4333AF69C8C0CCAEA467A46376 -D0AC46F291251D3B09883EFCF8EDA7386BBE03A5DA3B5F2FEDE4EC516FDCD92F -12D72BF6C7E690AE3FFCD13C587D2A48574653F562526B0ADCA0B701BE848951 -3A281BE4957189FC236B8CD68FD182FDE918E5C7FE2EFE91C4E6573BD9D0F0C6 -2DDA5F477152DBF21676DEAB763F441C7984F7650920CE6EF3DC77D707F8E03F -622F8E97AA3E7749D080FF7CC0FD1CC561B84714BB4BEFF4628DDC90711AA7DD -6EDA62DF8F73B9829904E802D8E0D60AF8F06A0DAB973B4C6A89020D3030B61A -D8C92ED9D14E29AA92C5305FC4687061998CF71056FE50AEA39BB265E6DF72F5 -F6EF4287D4DB779617F1CFFB3AB1E9D9DF73512C86CF2A82354749586EC9F273 -8CD928A02590A5C51CFB2FBD5F5CF25488800090376519E4A5CF5F0D1FC98BDB -101ED47F36A3678FBE57A31C09FBDBE605F0E9CBCD3254D415061AB3B9E668C2 -4CF41E833517AC0A07C3A0AD412E608CB5F0996D27E7341A2C637931B1BFD660 -1C330898C707F7323B1A47A6E6794AA94EF07C99D9BCD106108EEB903549140F -31D5E0DE52FA3FCDE78C9DB6F202940E69F86DA4AFFC8974D669A8802E6D5C49 -D60E640E5433F7474BD623580D24432927E6919E575FEC9FD044398D6174DA64 -7E6B7B042777003E55C4DF4981DC0A45B3AC04B1512380CE39B97544D3420C4C -B926016CDC82F5CD160FE7106DB362DDACEDAECEBD20464513AFA156038414C7 -DAECA2AE5D517DC2BE95B0E4707E0B191B3730EFB539CC0D3B80E1CC7B6ADCC9 -1F142222BE572124CFAA7246975BD131748A110B0362874FB61D91EA94A4E330 -B88C30A9CC1F7EA5AEAA12018A02EC5681D000A889B19641609A6E712116B7D2 -C7A04AA207CFE9A619290044CC4BDB7979502B5E7182D742DB646A923973EC3D -04382E589C9FDB590D5B25A1D414060802E1251E1F0DBED3B2674DE3FEB7ED96 -50AC23B0E3D9E44F2904B064D06A002AB11A44813BBE243F907681F6A5B7E4B4 -2BBB1D15AA391977FC0D644B9E4EDDEA1F6593F9D6D64F30F1F8DD238E762E53 -CC5B588DA5014CFDF4E281A34CC875656BF31B1ABE80617C269D3C32EDC40CA8 -E354DD255A369C4DF775C35EC9FFA8941D71FA984261AC1BE8C09C5B656658CC -CC2AD41D7CCE283A5530AE8DD2B8D03BCBB3B6B3696FD601C563289526310DBA -FFA90463815A687ECF1D69F69F7B449AEDA02A15E1A9227B0FEBC29F6E16866E -9E0FF502CB87D973ACC8D1BD08B5B76798CAB1A5D8A17DA7CC244EF085F080AC -96CB5CF0F0B2DCE2A1DB769A8777C971A7A4550C759071440654E195A7DC4044 -F60BD207C81295CA20A54903E0E2EBA0726C82DE70F2880A52198CFF2AECC6FF -0DC562A031D56847F6B8E3FEDBEC86862162F3E982169743CBA32DCEF2DFEA24 -D548A862DACE88B14677B0657420CF60E9E186B35AF3863BE4A9E5455BDAE62D -D39E6C7DE4B3E079BEB082842A1486DB5F8E759204926F146037DA7A77CE50B6 -8C29BC9B5299739FE52778D232B44833033A7DFB300429DD002E14F37EF31D08 -069B7D94E70BD31F90495D237B4F175540B12675874396FC75F9D005497F0424 -F68BED0F8CE28AFCCCDE87BF0D0F5301DADCF69980812F989CA9A7642FC5D50E -0632D79277781F3CD9E014E9DA160B2A56CA7EB621EE3D89018774B34E943F8E -EAC217CB05EB834B562B03CCEE6E457C681692C54339506BC7447B943D151012 -93F026765C80712D5398D3EC320BD4864BBA9C4F7242FD066CEBA54390D119BA -C3A15E45CF70E4999BCD0BA14FBA7C6480DA52D9900CC36DDE18693DD1FDDCC7 -FB5BCB5328E5304C0B3189166A2D7F3F3EFA16A4D8C8EAA30CDA83EC1BA519CD -C6CDF954A680DC9487D5397201A20B1530AC427F0DD32A17B8823428E4D1AD8C -8C512FF0F9576EBB8639852BF36E043E302D19A3B559F5F43D4077AC0F9CCDC4 -1A0B6BF5A5F657CB0378772D7476027E060D592492534DA6CFDC84639FDCF136 -036EAB94BBF6AE2A3302A6640EB48A537B579532A557C69240B5BE6DCB609E65 -B248336A2F7A326E85B9651659AD493245223EA204DC2ABBF33007DFA9307E34 -90F924B657395F3622C5449CB9965988E90A9B840FBC2F8B74BB2151B50467FB -0478F1423A776F79DF8AC78E999B1D6081A9B83F714ADABB5C548CD2AF4E9EF5 -A631BD50FC51817AED8EBC6BF7A46767E562BA211561347D89308D28FBC7C04C -61A1324C22E2352DF95EAABCE7EC3ADF40B863589557962D4330F443D0A14F5C -F3DE678CC2C45E6582F47F4EB36EBB12A73B395149CCDBD9A92E3E7A9EFAC658 -13AF608A3BF637A36A7318A342FCC9804352E361AF67436E7B4E6361FEB8656E -6FC5328E38D8C855BB6994E602481654E5372BEBBCBF48C63F6CFACC9F3D4FD3 -95B963ABCCD595D90C427ABE71671BC690DB170494938B4A9B8C0B329C4B0F65 -28B3BBB68584C7CEC9975566FFBF29EA166441185340639DD0FB38BA355A969B -1460753D46ADC2B94315E08A56E5023BA5473DA1933EAF6CF46C1C6413966EB6 -246A6F259FB72738C4DF24F91061764EDCCB4B1834F6EEB9BD80AB12CCBB6BAE -3E9715FC068386456612014DC8457AC3EA92D3140C7E9901856FBF9406F5FEEC -C4814CB0CEB13A44908644A5B6D69DDCACE742080D4A41A70D93705433D8B1D7 -51C782D483FE38BD619D1E0E863BD24AF8D1ED22CCFD1DDC63E481DD1D525BD3 -A69323974D440E4C676A8480ADA8BEDB2F8D7B82DF7E8CF71E9BFB6594A59055 -A50BF0B479C6D1E62E1C25E9BF89C898F815558AA20DB908210E6156A3C0C98C -DB0215DC67BEE211C018E82F504DA56DC959DE82E9467C9889CFC353D379E8D3 -08B40C015840E9EA9F9B11AEB3B1690F7B51E00181EAFC769C32A0EB57EDB2CB -B8304C16B1E391D9C83496A99F765A2F593AE9E60170F93E68D99414A71B2298 -F869CC5617669A5842F10170D8C73BE732CFCE2A2803B1ED4CC582817356A304 -2E80D38F53DB04091D403F76E9648FE51BD4CD3728FE0E27C563DDBA778D2B57 -8B9082ED2A2EA10C0A9EC44DC8695E1B930F408604FC497BB411F34718535925 -A8C763ABD12D21129E018416D6A7F3B85010642706F63E9109CA68AC84FF543F -5CE4ACEA6680A279A54A7E0A83F28B661684AB955DDFBCF3483D2255986F8CC5 -2141404DA424CE7C0F45AC2938AD5A9908B18259FD2C7865B242C3A6427DFC53 -B2AB4291DDA1CD7484AADAEEBEAEE1F6D9AFD997644C576E703F9588338E7DC3 -3E8BF6265048FD288DABEB790875CB83D7102EE1EF1ADEBD252146F5F1C34CA9 -270577C4D71EE41705F6A2F76A17463C8E553BF1E09C06CE00A600B907F36611 -464B9D2974D1C9C8BCB589AC5BB056FA8502E4CDB65B7FD34F5FDC2108915465 -E92B246505C67119DFB1E0A251ED432409F6674195B591E704B029E40E2AA827 -8D8C6A1E2E6E8A0FFEBEFB75896E0943E394F90F03A0DF61ED23E57A24E0C2D2 -79F9977AAA33E6AA211B48720A1D0AD4789608A29ED895DAA0D4A2428654EFFD -F5EA4087E6F727DE7C5EA25C15FA2A6A967FD0A240E890997D78AF8466EEB7DF -8D8BE4552E1996C4684BCE3E853E1C541C7D9C2333ED357D179E4E92A44518B1 -06D92F646AE65F7A27F746EC366EF4921D088CC6CDFD723838AE89648D6B6EAF -824C08B6AFC9D8439DAA5CCC862FFA61AC4B0EEFB2453C972B1A64FE31C071FA -A2DCF66B9CEED757FE42B9DCAE3302F807F7CB2C779F7441EC5F11C776036719 -427F1799BEF7CDFAB114B7C30F27C43CE3D71A71C7BA87C4FC34B711FFCCF892 -23450E5CB964642AE0E4638FF80A913FB7BEDF489DA43E315E8CB8506A4AE884 -BC0832A6B83CB4B390519DA862769AEEF454D3C4CAC6CD3899238A044718FEBB -59F5D7C79EE547269AAEF1ADB1DB7A97E5A01435D957413FF0FB229527025DFB -E1BC87C4198E5EFCFEFA3ACB877B1370D222C1CC30D0AA411440B6A59D545D53 -7D72D4D98337E08107FE636E3F25932D57108A8E3BA3F72006744D1B2E33EE8B -CABD44AEEA44A3307ABF8AC6B68F8D83CD6EDA68951673D6984DC6E2FE260C16 -A8673467A85E727DF7D5F2E5909BD2D22D272F87C945B0E93B4EC1A759393A9B -75F7C462B34542FA02DF5548CAB66E75B88A834354AB7439DDE480C6068A214F -D3748CE5C2B2F1693DE0EA5162771F7FBD17F5A1A7467667CAAAD0610F38CADD -89102E1351F7B5DB870DD9A3CEA56863C249263A102E649FD16FD827BD60BD19 -E680DAB90D235E5BF75D5315B2BE376EA7C1FC97D709FA12CCD937CDAC17845D -C373FDDBB0533C37169A34CF072F187E5661FE60DB1285920E3AD01EE806C874 -48BF676D73DCE4A919E3BD19B6A6DF8C4A23BA65A599774CF0E45F2F20410EAD -5A9E43CE85B335F953A0879CC8327B903C0F24CBDF65AE01836745EC4946749C -DC9810CEC0A4868C3356DE8D6447547785EEBD102E069C2DB83EB107696C8EAA -EB71EDB076E924F27351293F26EEE77DE1ED19EEF02EFF9DC8AD8827BFD0E10F -E3301ED3500E006F4898D0FA373F902A40DEAFD33850059A0EDBCC4FB23B7BFA -5087714FF84D9D987933D86D6533C0784BC72A32DE5E26A4CAEAC39715A19360 -79DAAFB08C7097553749CC993001EF6C17100AEDAF505DB97CE45372632F5CEC -A48C77B21F9E50E81EDE28E19D604ED0D7398D9621B7428F729FFA20F9DA8847 -F83FE50721CCF7260F38E1DF313C9D545D237A28C15934B1018C513F0AE93D72 -F0F22E8F2385686BCE5435122C3EB067F4AA14FDCFB812E7DEB5BA9ADECFBC44 -BA562AAF8AAAC463FC0B2E04A4BA98460A16C49B8AF7B9D624012D432E29FE9C -44836E970CCD5900BA3C2E7A9F4FA98E4AC8DCDD503162CEF4C0CF1598EF607B -E11D60FA839D420207FF3B46E1F432A69C99722BD77535A5A1827C0370BFDB83 -5EA905F8EBD42B427A38FAA2CF4E819C9FD74BF27F548875248AB6D00D2E29FC -6060F2F151C48B758F2C85C1EBF5868A18A1B747D324F7DB49855024F213092E -FF0BA46976813383A25196A4BF30EB1D2214362C75603407488823D2869ED813 -2D84E759F25F9BAB59629C2AB691076AA9BE254A27B49652B05E9AF71865E5E7 -BC324DDD2A1400F4B2888620E60EB08A9EFABB287CA0E52575A364CB0F22380F -E27FC8A0DD537BC0959413A2657AE6FE12936A61EA31ACA64F08523AD9B21514 -0F352F2EF3DDC159795F83E9E12870C13D1D9B98D3E152CED06D3BBEF27B9531 -000CE08D0B280C2C37C8D295557F1BA92C8233259A007E1F0FA0D54762E7A6C4 -28AA751CB4E4D6AB5466D8A04E4AE9F64A3781B730A0BCC6108C9D5198810D35 -CC353F1E76DD3C78D33772F3B3245716DC623F4177418224AC4A5F3E2CA59D03 -95BD0C240231093AB97FD553194ED4B63856045E23D72F67BB6D6A4D6CBC0FA6 -B62BBDF0AABB66C36DACD73A99801E813C6F3BBEE1AFA053BFC3530F2699D2CD -31F66636514A088710DD1DB370BEAFC47470A122381AB4F374BBFBD2AB39A953 -DD0FC82DEDEA60A99C9EB07EC0F702547C9ADF01164D5B22D6A41059984F347F -CAFE7146B3626AC97EC8AFB2614D085CD5FEDDA92EC73D7EC86FC0DD5BC9E912 -D68AFBC4DD321E00B6954F14D5CD9D6580C8DDDDB34ECC92B16BE8953B035AEF -0523D929EF5A086E7064E1117DD2AE2CFC346889116731CF431A2E22C6FE34B7 -6B7535EBAD4AE760956837944EAAF4F001120CB784D249E6CACCE4E0E0FFD8F0 -330C57C7A6E27545825F36189476B887BD56A72802D8947A42323C36114FBD24 -B47F11B3B0F7C5498463F54EA557574F1A8EAAD4D47964B9B244D75FEF37327E -6096D66FCA9E617E441978D58AD792A93E3C37FDB5FDE506AFE0BC0588FDDEA1 -2E64D54283E22364267A5B499EB52F623FFA9CB11DE74FC33715AF2ACFE57C25 -A621B07E7D39E56F4ED2AC442C1B85B412DFA95C574BBDE5111A09F2F70F46CD -FF84965EE534CC63034A2E579FA7928906DD2E64560CA3405B7B5247ACE33391 -F24669DB56F6BD022BBFA47934547003902ED8344277AE5761DBF7604D69C02A -33A7F20EE06494669AAE3403BDAB6E4C4373DD56DF66F9700A06FA86B030F3F1 -3B8210C9948A6EEF8400C952C4A81159316390109680E5C9C22595D8E6FA6717 -B0D6803E850AA03F2E854F0A39F819B64357D53B3FA73AE0981ABFEE4352353B -E5A31D3C3672F07FC2AB8FCA25E5B047F2AEABA8A658ECE9E35579E4214A9834 -C6EEA901E3A72FB1521D22FF6F117C6E80396CF1FAB02A8597F2407BF6CAE3BA -976537E118C6E84C69C76889DEEAFAD6D658CD83381C8CAF989C52BFC59334DC -7ED97D2741940291B677BB4AB0F02D45CD63379DA8F02F35658F13AF64F9D6AA -A42A77A6D2A1653BB1A0FBB7A52249D8133440827678AC81A66FC3DAB5A55F25 -B821E7B5153C6FACED54C203E5FA9F6DFDDFAF54C9C870B719EB0EA4C1131C98 -5DE4047C1862E71FCAD3E4FD982FAC9CC900FC22F6770712FF82BD27683CC442 -9B684AAB15FB663A04001D434E26690056EC7EE8EF3D3E4AF36DFDACEBF21B2D -681A134805B6D34D639782170DAFEBF22C888757E4BBAED1F72F2AEA9ED6CFF2 -C477430514D06ACD1E2AB0BF1EB27EA4DEE773DD77D140F02D2F4D5DB55B07D8 -23AEDB701A2885BD8AC950E8DD285172BBC6CC90A000EE8D5FB6C4D2693C70C3 -B90F94B7F806D4584935D69257CA0CB3F72BCFF88087865C9326F94BD3FAB401 -6C89D92242195DBE02F2437F6A96170F1D0C28623D6921EC424B6222838D18FA -E07B02189A3A79B317770FF5ABAA3D8EC721A5AF14B5276651930AED5B20CACC -34128430F8D6AE1BB7A52DCC22A9796792C926528C0DAC4FD652906A43D695B8 -267B1E89FC1B96628CD003FC2A3E8890E68655532146DC927D36C60E98E956C7 -F86DC4B803247084EF8014C3711867EB692B06F90E1B099501F4CD9AE0EEE694 -5A2B34E927E5239DEA54A8E9BD542DA437CD7928C67AFB661A72B9A2914416FB -6441889C6316F0D4045E09419F5D507152644126C4B614013B868D9F7631EB98 -46A5979176C2E3F9F6463BE83908141553E90F523420FDA7ED53F711C27A4517 -1052685F33B23C9A3D34288073B7FE4AC7796A0C3D7669531B4A4CD47C8BA1BC -9179E425B3C5C004A93ADE699B521F798B9AAE48753028A9F95F68ABB41792E8 -D067F9819247E7D81AFA10D72D0A7B3EFB3C202DE67ADEF30EFF42B4FA14DFE8 -573AFA45CF40E34AEE040ED718C7A37604E898F79184D346AFA0299ACE9BE973 -90B606F0B88DB4336292577439829D202B8BC881559868C2D32DACB708DC7EEC -59632D3E618D37B284780AF2666CC81BADB341C10C9745A1437015AA91AF676E -36741DEA9046B9EE93C70CDE6E5BE30C1574E295A592B03B951137A5443F980D -C36ED9B52125EB8A71078F51FC10BB49CFB048A54824A6911D945641933857D0 -A9DC80654384B562FA3F5AB575ACFFBC53B493A0FB579DC9DE1231A49FDF4375 -865FAB1BA20E74E4B314211692DD359441E47068397D57E608871CA05FB89BCF -E0D46BB5F84BF354BE90BDDE0ED7C565B84C32CF953F2BE1136D9C651891A894 -FC786EC9FACBB8E3F0ABFFE37463BEB48D313D59BAB7210BA2B6CFAE1B2A8BE1 -ED6B45CC9E251C4E8003E5F562EC048B69CF13A634680A2C67550CC94CEF59A1 -F217EE7665184E18D63DC0C91F5C606AD52F2987D379088B39E217C33CA14538 -DF3FF835551D339BF2B836957217D3ABB4DC57BDCEBBCCE14B70DAB6821FAF0E -FE68781DAB924B6966569A4FE5134ED14A74F72FCCEC988EEC4868DCD443A503 -0974EAE6F07E8311C1979A3B2B586188EB5BBABE38017D31FE9685EA852AD59D -8CD75108CDD566599D06B611AEDE7C492B3E82186980527C9281DE79D7449BB9 -660A8353E924B4DB1B9F6166553F436409A93BD5C603021AC613D5C470EFB743 -A6ABA267B872D32B531399BF9ECB63364379CFC3D1804CA7BFDDC19D8AB9560C -66B7D20F94E6AB76722D02E681D3E4561DEE24E21977A4C76967FD8D6499B435 -18BC23E58ABAEB635A8683C4D13551CCFE2B2179661992E3AE95EED9F0470693 -D09152B40DFBBB0298A9429F8B2300676D0353522265ECF91369F3A9888A26 +E54D14471A6ADD6DFC0A9E182436B4C197CB675C37F29D0404846AE086C2A5A8 +DA576BD98FD5245F1F19D20D265FE8A6C29571864BDADF555E0516D49EE5FC67 +CD278CA322575D75BC18E682A112F3EA978790C6FB0202939323D9D520F768F4 +EE5DEFFFB37D802D896E4E6943986006BAED87780F3B9D967B2FC8DC44A4A529 +2103A5C8E05BFF06517D8851AE4EDE73EBF32875A148CF6CEA6D4AE03DD1328F +651158122376528BB9826C2DD8D7E79847902DAA002E452D12A8F8356C363FDF +76C5969E2CD60336F300EB511BE4B7F1F5585DA7C6FBF995DB71B8CF22C0B458 +B6ACE92E0215C34849D8EFC56C9052A3924B628DF69B0435810BA49EDFA03E52 +CCE470EC571986F64D294E0DB056C9E509C81AC64E65BF1E2C17024BC8ED4352 +636CA39A3937DC3800FCCB1F77969154EFE9A7091ABE21970887F6898A281500 +7ABAA2EDD1A825E36155689AEBF310C63BBA08FB3C7414C49F445AEC145A06AF +E6FDB6A30B367DA1BF73AAEB9C503D23CAC63D77AF39A9AAB1C1FD22BEFB8F1A +0E50F612DF0A30B5984E18950261544B3AF01D1E839CEE5D093AF2E3567278BC +0D91A5301CE5FFC6ED8B9C38A11BB939EE48C37F2DE47E9BB52195BF1FC46E1F +FDA886B899401F144E4B32438F28CDDD418CB529CE8379771A0DE13E584BC354 +2E26FBC8D9BB1B1F92BC0300CA7046145698EF64A6540A468603092D633E8B2C +2F2F688ECC7F457BB6FC2F075F87EA556B5837E3632E993C79D08414E033C21B +F6238CC12034BDDAAE28A09A9CAAE51667A3AE782A92BF7F4A89A37731426D6C +FF47EFDB75BD2D462A79F9E55EB522FC6F5C6713775142D2FE1038D2D49FAC19 +39A26862AE2859DC5065C1565EF8C249D95D501A8C53F659CBDF3B0AFFF1A4BC +5BE2E54A2BCC84402D4EABBA36CFB9932CBE589476A9335F509ED972724004ED +289D44141EB8D3B63494CF9AAF357A2EE23B857DD0B1A0BBEB207039C30AB085 +28BC18F13B235F1B8C2881C0B581226D1230E7FAFB5652A728B50B5EC6AACA19 +26587B0CF2AD14DD7CD690373D166C1B9FEFDEB345C2023994F2755F34333FD0 +241342CB4CB78E98A798FA200F3BEBD3B1B8FB26F68A32D4970CC1BDF7880416 +EA7F68EEA9EDCBAAE75E762362127A9888D470EEE54D9103433F623924FE361B +6C0B370C8906FE9727A8F249D1B4291ECCA02BCB0BAF9A785CBF4C9451321F45 +775970916DFC43E0C2FFBDB9194DE54EA990B1CBAB06C5567F4E6DA7EBDD7028 +A475FCF7506BB8B3CA785233225544C87F74D792571FF09B3F6599B3F1111750 +201DE0AA6472939D049C2D674F91508A19809E82D0BA3ED2EEB76916543B8A19 +D758901E5999F8348E74D24A8FC602B7D16F986401C0463C2FADDF67F3FB2C1F +E08CBF9F753023701A1C9860135284C5CF30E5262C5408D6FCBCA90F14B9EDCA +7E15F68419A3A1842CF2F988F6E77057873007FC22A2575EE9FCF9B80682E944 +83C776E6F32ACD52BCD48CA90E2D5C31088F646E6A81D27BF7FECD78CD81B2CC +755155CDF0F1B951A3EC59012FF66E005CD4EA1F160C721CCA6C156957124C03 +0708EF85B90556AE357E27BBE9A6F9283D5B50F4C286D961B61C87F85DBFA44D +2F9C0D008334B4E2B2C4E6E461EAC86699E8EB8FFB216DC850ACEA016674CCD8 +BF7827FA6FA3D167C6980D6ECC7FB70BD5668DB9AA8BC2013900C693B2890A3E +5B86A27556DADEF2870ED87EA2EECA8DD0C1E1F58A7CFDF7AF3CDADCE2FE6D8E +9CDD02887120032EE541A73150BBF388AF868841C2C5EE9598D78A10414A8599 +2D936D5A9E83CA777D35563263ABFF48D283CD76B3F88FBB8F41278BD2E88B20 +2D950635AED81014E46E425434214BF56AEA935150DBB8F2C673DE93EA9C5A22 +E1D305798D85CA7A11F194E47F74F2658DA990E6CFD068F1426650F59269B269 +D2BCBC24A4973EC99EF1C30DDF20F6F383807A59B615E20A05B75582B82520D5 +E1B9B5B145C49F70009C1BD507F895382F82807CBB53E303CEB5C1F693ED6315 +A545E313B6130A9197FF31062F81F623FBD6E4D5B9534412265A8BC7BCC76B6F +AFE43079E82D77B54EAA36B21CFC2AE1E6AF5D19952E8E339507EB7A7A2D4578 +0724DB516F848EE099885D861A399E72D738395F4DC3E857BACF340C6D6E549C +79820E43D624F35FADC643944906B7154837693057F2F19A638FD68C246A5BEF +49363D787DCCA6C9A3FEAF0023FEC63F88F8998FCEE527957ECBF03B9556B68E +F7BE8C04FBD8CCDDC4DBA0A628D157DE2D1C752B07A9FD9442D6A423E4522630 +133D1094AE3C72FE88E50F13E2ABB0181E41C3C77F30E94190A66A4A110B7A90 +E0896CC9350E9ED01A2CA395851BFDD8A5711D8004E8C79FE8C1E98BAC0BD985 +A7FCE6A92077E0CB291A0F7AB5CC6C30B8CA7CE2B39B374E531A38C5CCB37C3C +91726D52D98E98A8908FFB91BDC68D30AA8A636C9788E6594AD2F176A9AAEE16 +EA3F249B42FC47A95BC492E52504C184B114389BE0909E827AFE2A33A1F61C95 +593102EC2AA44BEDF477FD2BD876C6F15F612BB8A2B3F6EE46676F36FA1B3BFD +1C48379F8E92A5EBD064758BFCFF2C1E9B908DCF51ED2FCA8E07A5578BA7BE6D +9C9FCF5FD25AAE03135B453279FAECE868B55C9D46C008AF8CC68B460C75D1E2 +D6F1F82FABD77EC7DD17FA21E207CB7EB7DBFF1FC61A36135E0A024FE527D4E4 +80C7E92B8A61D52A1C753BCFEEB2460B10AA8A72A76C87ED59600BA7D0ECB249 +65AEEB86F31AE0BA4D0E05FFDCE431884AC5FB9C8D149A1E421F82BE02E46E44 +240B53E7CABE9055C483981031E866C7231CC096AD7DA409FBD0EF0583AFF0C0 +88C7893082CC45C35D0CB712CC92A5156B98191A600FCD6B9ACDDBF31DF29BF4 +AAB4425E9D7C3C21D1F6E2505039DC84F2C7194A2CFBDF296D0FC08055E562E2 +123237E095F8A338BBBB0D4CE5A23BC1F722DC2D3457A6A95565420AEF16E07F +E78B81E5C0AD05259E6393893FB8536AB9C151875B3B085827622F485626C2B4 +C731C01E3ED08DD36C6DF477736C14C8B319F0B0D29B9D251E40AE9EEA341C56 +59684AA49DD1F293F3E54DD332CEA090A45010A29F978FD4F7F9B8B85437527E +0A17E7A5A03BD0D7ED518FD95353C931F84BD2B9CD6D4A0D6CCEC055850D5265 +856D9ABE52C7261B1CC637F5546B5476277908562F07E45BA586676A68798F94 +BBEA8AAF33B903912A65E9800B108E8463F90484747EB6E236071EC765D0B7C2 +D2B53047E8BDCB3C720AAAA41EA294178C2061710E8E5788F640C389935B0DA2 +B4C2615B956BEA859332D01DF2ACEAE7B939B68FB214621C5099CDCE43B63343 +6E51F0EFE835CC2B864DB358D8123DE4B50C49C1C16087A99FC427128A78891D +9821CD5330FD6D2D990028C42B968DF91C7545E5AD2ED35C2AEC94828E85B1AD +A18B0B1E347DA38E0076EB8ABA028E97424E3C902FE65E0FD8275E371DE741AC +9AABA09E2BB7DC781758A6973C7B5548E2659727AEA2141DC14AE1110D24F25A +D58CCBF9FE7C432D015150FB9197A4B2AA739B773289998FA15E8110959FD0D1 +30EA7B2AFA731E411A68B6F7963A3637BDC24002651F9FD67E8B7327C41A145A +A18BD7284A293F0BFDC4CC7F04AC310B6B3DAABB50B67FA45B8973959D84832B +11F27A2C5F2C0F9D328EF826D56A18DB5681D55784E3786A9C37B31DDEEE9E5D +51FFE1C4B23D716CF95FAA7FEFDAD7675C4BF94B5E7C5BDE9166D5793BA50E6F +C89AF166A3B12DFFCE61980C0D90C29776BF27FA7B16C14786C7DB3B04533AB3 +ADF781FB5E0A865E373CB52A1EB8D19F1A50DD3635D48313B3CD35CE6E55E0CE +39D75C50C6FFEBE7737FECED33F77228DDC38679988807A42D4120CE1D1E1C00 +206788347219F6CF84FDC75641B6E918E9A12124CE9806FBA2972ADFA13AB2DB +9C1FCCB6ED1C3C67448CB296FDFAB129F502CCEF4F06B5BE9640D9257CEF91B5 +9EE85B290F46109FCC2DF46F924BA1A5A841E78C9A7773C2F39C02CA14841EA4 +B002ED8F79827A85F158790AE542AB87B62ED40300C5F78B9D6B66DC1ED48C22 +1DFD400817D1197A4B82A87ADD3D469CA228B5D0DED28EAC563C3C77C7A564AF +46193EB6A759EA60C670D7B6AA51DCFF9B93F8C920671BFAF1D7649504B80CAB +C0C0C2800E3D9D42AA21498C7B8814A88D0A0C7FAB92F6D2B1A77539969B8F7A +9E388660CCFF786522E3EF9A6B1A6A1CE0E5E540B6FBA177A37ECBAB0C4A498C +6121EDD8874C465500279EF36D44F16F1C0E8E39F9780D8FB382FB99A606AB49 +A6497AF68BE879707C949F6B52223F577CBD6D55B16416465A2A18F30F321B53 +F86B6B4E4A8EA02D39E6AAC2EFC9E848E20BE60FF60DBB4B1F42D7158CD1C878 +EB878137575F3409CCEEF60008B8E5F2EC7262106299A2440EC668BD640B9B70 +C89AEE5E76B6C61A77CD81717DD17330385A1CA549BB232A8E7DE7B9E6AF8D25 +EDD53753C11D779F01E1F6CF64BD611DBC17CB4A9A3EB586BC51B0B9CB944678 +9D224BFD2F6BF275455A4ABD904D7018A00F9C3FBF4B06E52D62F201F870F53F +0BFD9D906116A375102AF114E4866FB7876C405E4B12A764E1D2B16E52C2D454 +BB3E0658D12C847274BA1E561C6D953FFE020C4D21609754B7EA3728197C3F12 +C06B2AC1FA2FBF315B86CFF65ADAD5C9DB29818B47888B2F1942DE87908769E2 +F7B46935FF7B966F86417B5B59F68A2C9E0D54BAA2F7115C520A51666A24A17C +945DA6E9E6A64FC800C0B13625C59B205EBC203962690C6467A588CE8BB5C73F +C9F33559A153FF3AA8DB074626F22288F91DDF87512C86885C0CE6C2A634D51E +74D1F255FCBE3F21D4ECA36B55B2704518C48AF9825683DFF3D7195AD31CE104 +7B81AC823A3F96575A87511D88F4BE86880C255960D5C6F8F6667FB4E91BDD1C +189FFBFD488D6E0966EEE480B02D8D0ACB6434A69B0C165F3C2BAB407F108E55 +434F6D70C0D1D9E5F7EE1F1A955B2F1443E945C86F20F124ABFDC516D1D5C7A6 +0D265EA3DE933CB95CBD095AE5248CD7A019DC1B8E0CB17AC89EB720E10A07B1 +CE057341EC034E1F67F4C10A981860ADA5D9175D276EDD89526CF90A8B2A5B30 +720D30C059BB45974AA5FC3DACF45B6E0DC37C94DC04B73DE1682149EC449235 +AF23622F2B08551824A1608CE6CCDBF2B9DD243193B67E60C33ED2DA8DF74032 +08A047143DDC307C848CCC58FF9F49D7AD7D0D150E0DDC93ED7248BC4B7914B8 +814D3F203F42BEF94BE753B1F1F928272077C685985604245C1F2882736E52DA +A24D4A438F7A8B6DECE1F2EC46E57E2501B301D1557063494E2E10A9F2DDAD5A +4D77795A5085AFF300F89F4A18FC1671FE8D212A4D45B7BB75A9280DD9B4384C +B1978B239702E4D41E963C93AE5F9D49D811D1580DF3F23BBE42A42B1116E177 +6E45D530ED3C60A097284C8CEB81F3892713030BF4306E3B03516F40BACC8CB7 +41CF6D5830F3373AAFEF24D890B199468D4FDCDA31DE44B5E0BD6088A899CA32 +78BF14F27023A4F43EA2AF37E19DB03974D146768A7AB7F78674C87C5B45EFBC +DCEE7224DA2A09ABA73F289CBC2C2A8A038CB4998BE859A02491C236BCC01455 +F233CEAA8BD1FB734A16965E3535592E1C99FF1D4040FBFF10D67CEAF472A14B +F47B062A156A5EE99400E110B12E28D7C3CC78C6A226B071DA7741338673A1CB +AE8791EB72C96EF04395AA310C6FD72CD3D35AD5717B0A103DABB1E05162E352 +F5135940DDAA514B7C80DEFA7B462AC20575FFC8ADC2D692CB8E17BB403CDEA8 +51919D22000D71358A0941335B0BBDF97B17BE572219A048178D416F03C23FF4 +DD54A7E33A782608544AD9855A88B2BEC481E88F030FB1897FE724BB133CBC58 +CD2E1AB3D37A10D68B193B0A2B6D0290E7AC666202E54EF54050AEE1BD93F17C +B7DFF6A4637E99573C13C83B5ED1B655B177832CD7D2269A1A049685EB9D967E +725F9AA675D4F2AA894910C8282423CC21A76331F7B440B2DF17064F2CC315E2 +7171069DFF4FFBD2CD712DBA0318D0ADF26B74F69379632B62D9E5A84FA3963B +FFAEC76D8595DAFCC582DE1D0298471CA74A0FC705A6113C8E450EBC3A7255CC +616BC14CB460AC4CC4F133AAE02A6190B138A537FED28402C323967DE2CF9C16 +34D125235B611067411F4027282031D7C0018F2D1C2EA3E84ED19FE1FC897453 +EEC1984F610345D0E9B116C2452222876A85D70333F8C09E6625C56534050F3C +67EA3EBCBD1701C8CBF0290A29F1DA9CC4031F9A1D031B0F46407FF674AC3461 +972BB99309342CFD823E2DD3D709B7A6D6B5A14627719A64566A194DD7D6B235 +BC431470D3ABF9F77C835298A94BD7504666111A77392EBDAF12EA6D151EB066 +79BF397C1A3688A92E8FA79DB5612849541CB32FF7D147CB3E80C67DCB827C41 +D152106CE160DA98B98B87CE52DA32E503A24A56A3D9CA5297AF041E7EECE5B1 +3C968705D7EF6CF9835F6F06AB24F35FAF950DB4BFE055B83BFCF139F0F36972 +627C50DC7345D8F0F2A96587A65D6A4DE4B871FBAC063645A69BC962D8CF6E97 +66D3E3DD5FD66CB36F0E88F515A20A9B744EC99EDE47C52D59973E04CB8B841A +CD30925511E03316325363142BE60C05788A3D885AA056B4BCD3EF0CBA0F1E12 +FE691408B1199EE36F8AFEBA63222D6BE82401C4F92AB8399B7FB8468A7E367C +5812897F5132D94AED7ED5E6B6D1BA9885921A26F4C3C0C74A8DE00A6CEDB86F +BBCB4B870E512656BD06C8973CEB1C4491D72CF275E73FACB0EF188F5363FEB7 +60289B08B9188CA4BEECFCC1E7784EC4DC6A6D09270CC03493B12594C2A58940 +93E3D21BF4595B03AA66AA345A6DE2984CE6BF84E6C688BB9F63700B19E7E022 +3BEF869DF341F35204BBE57858C84E4F34EAE1A4EB2C572EEF95FDB7CF9C4096 +E1E315D289DB185F3D9C9DAF29C595FAE8A1189C61F18027BA7D020FBC437A52 +D732B1A2C01604D5A0ADCC4C03B7B132227A959D467538C450A7EB3FAAFE54F2 +B53512AA39D1B7EBEEAA695194B133AB002A5255ECB9C77371BA5BB96F07FD58 +29F170806E338E089F561675AA48691A25BFF36262972E0E25FD426EB859B49C +9AF25DAD09D04239F0AB99560DD9438EC917F7D818BDD643E9C13049D4A7F4BA +53ADC2F80C81B7D65C1B387A64CE36AB962CB9E16A2400EEA520168F2D2FFD95 +CC9CE4463307FD600BE92F3821F8B134CD943780BE11C75F6F941BD45E17E58E +9826A5324FF33F5BE169E929C5C81ACA441A0E129EC0B03B208BC8F3F5D4DAC4 +8AAAA06FEF0ED5C64A633573EBA28F6D60ADD0E0617C6AC7A7E2DF9AC13F3E84 +B21DA463242695C6D1E5E477FDC4F44486A0DD5057DEBDE9F30805E69A95AB38 +F071CF69216E8B97B7C34027F02BF8F8DFC40AFF393947675609620795904E62 +CCD878C6BFE822CCD362F84215BA3E432C8A1D735764E6B94C8DEC547080E71E +89B0330112912B6EE92ED907CD40671AB2439EC7164EFF0F6946EC3BC2FB8EBF +C63173E727D0B5F39F90DE255EABEB9B651869B73CE96D12DF72D4FC9A1B2089 +229D78CDF2747D4D220AF37FC53FAFDBA8B59351F03DDAE5D8E384CA3C4F4EE9 +72661D9C0EBEAEACF659BBFD9FEE1EBDBACFBA58EB3D09D45DBF64E0684A4F0E +8A4012ECF46C8EDC6D2A78FBFC0E270B25649869BF367654434740C9ACAEFB94 +C7245A96C497197F0C193261AD1B8C5E42DF36FCDB9346E36443DC25948EC853 +CFC83CEA22F542A850490688497CAC46912BDF9282194E26D21A8DFBBFA1B7E9 +7FB5F1C7AA0ADD56635852EC046B7AE2A1899C76FF2628E90E0E1B211DA41E53 +CF84CF171CDA201D2DEDDA1796B5C1AA566C09E9DAC7AB344D76BF15CFBFDA77 +09C57A65ECCED62AFE178B332DE685E89C5CE758BEFA961497C813624530F2BF +04F22C4F60B3500FE8B79B2CCA30DEEBB39E1F62126C36A298B17BF6279D60A3 +4DECF56B9AFA112E0EE4902607265E0E2F0054A78C5613CC0A2B2C34C6986917 +BDE26EF41EE3B2DF98D842543807D09755592FC7BF83DCF9E68CEA9CE3FFB01A +A75B0D707E94E5127B40909AFD7DA2D680D59B7F0E61023318D5A07F8D56720D +2ECE0817DDF8FCE62CBF322B0A5B6E943A909200BF2B6085D30A98349C1AB963 +FC42E5DD2E97E251D18A840FDDF6F6842AEE8CD572A98FD9E3B919947CEE9CA6 +1B14E47992DB97A5F953C6B699BB97ED06012B33FF6D94F3EAF783B38240B657 +517AFD4522F3346E9D9F8A70B094F54E2527E85D9773C1370C3F899F11A61A61 +C3536C5140E72BB9F810F52CA5971F46F68652058D5871C78DAAED58E712F103 +991727F4D7F49FE30DAFC3A9AE78BBD5DEAED16CE4742EFE9249CE0B4D4CD0C2 +6ABB4C30E85A5886F590B9F444DACFB3E4B68BCC76F36684E9CE60DF5B2236B3 +5621DC80EA9DD3EE4F16465B801B33D4CE128B9C6A82CE08560B72C1B5291BCF +358A2A1EEF0FA209FC7168B3B661E3E40FB3D30E2E08B4604F4300EDDC4E11E6 +B479570F9B02BD42DF120D18E77911AB884BF326B7142646962C80F0BB5C3C12 +2E3880EAB34105F292036EA0A88839AF654B5BC9704D53B3EF7629C046BB5379 +C094EF8FEB5FB5565E86A3762E057AD3837CBA0F536EA7057C84EB868C498722 +2AA001D636CCC2F3A72B193591CC6B1C3354838F4C245BA4BB9A4BBC613262F3 +FA6FBC748C8FACA17B135E49AB960DB6872C615875D5985C899F2D656CAC3EA3 +62E4053EE049631EA48B97BFE9B53062491D4C2ACA65AE744590C5EDDAC78F57 +1040D9442EB10927FAC2024FC24B2FF9ABA44A8701585DDFDFAEB432696138B4 +FE9939888A40CE6287299BFDAC91175953C7F38020C332467B704135E8644868 +42B6FCA4DDC9AC04CD32EE5C3C9B45B6893372F9498CF5C19651414A61F6A2A2 +13568EC8CEB032718C17E0E5C1C1D2876724532FB2FBFEBE179470F22B15CC09 +E9E6A22C5C1F8CB7F05CBAEC0EEB8873BC1B56FFC529437E57DF1B040ED1EC6B +4BA14ADE52B503E4FE18296F0036760BC6ECF1044A15DFFC81EB7C11AED5F6FE +DB81B37D82BD82724F1B77C840E41524CF1589388686FFC21C05394D848824CB +4762A5ABE288644ACB5D973671B664B6F68104F2E7F93392EA076F819EA58EB2 +95F750BFC9D53EA8E1703EE20B43AD610FCB7784B4738ADE4C33458185D3640B +DC0B3B5503EEDBC99E1C45B9ABDE7D779F8C7838F2B21C4398EF3C4D567FF21A +E427A40E22F1E5DBF380B83DE726AA60FF43270D8E920B320F89E787C41274E5 +8DD0B2D4A2A1105A63B413215C98839CEBDA6194F9EF46837198DAF734775FB0 +C763B9B4162B93735ECB20B7C16D379521DC6A80209052A20EB8ADD1A00EFB4C +CF393C91A9D4F2D63800116992D2FF10DC312BCDAB3D59A6E21C53F840A84D52 +15076DA66068631349169BA98940872612831C1E70650F6B56D6BE0CA3F75C27 +AB9C03BB10CD06F73AA955E59C9CEA09D04D49230778E065B691E693F287F0B5 +B59924424E61166BABEB8D01317F050F54BEAA5901B9D0B4798F9EAEF69D0209 +03B8E7799D4803392EBC7439891C10A669299CED3DF9AA0AAA8FB43B4F998D24 +43E93ECB1909A6DB6232069DBB017ADE281F5AF5812D74C09B28FD373249634F +D74F3571B232049A1C2BF2AADEAB5DD550D8CA32F065CDB5A1FE05CB7CDD78B0 +7653F8373028D46D763D6B29F5ABCADD76212A375956C60FE89664F9B34FDD74 +45B9F8B6C30C5F79A2E95B6E334E5E572312183E77033C18B958B986A9CF82F6 +74ED57F1E160BBD3FD80F7BD9D17C6F289F76B87D5D8B1287F8F242B6808A8FD +61E612E92370437378888C1D7036AACA20B8C81CE15A5FF5D927EB390A72BB73 +A55CABD8F077AD7FBAF38E3B51E2F9F73915320C0017A4AC1A7D00E2054D153F +4BA820292C7169ED744BA9BE3A8C94495B7D022D813676CB59D95C549948ED15 +70D44B4145ABA9E9236D9608C0DFF2701A32E2787C0E8046DEFE46352F48D2D9 +54A29EDFF73AF590FB45665433EAE72EF04C4DCEB7653881ABC7BDB3A1F3C2AD +C329FAD88C32EB5F8B33AA189A568FBD35C16B71CE8482A7B64DB55C86F8239F +98933FC55FA21BA995C80716D22649A7AF709E358160CB5FF0324FFA4643223B +EC275C2474DF68C574C9B18BCC9CDADE1937754FCE03062EF6F3CB90DB7A79D6 +339F7B8EB3B63685FCC0756BAED7DB4AFC9BAF17DE8E8836CB5DF8FCAF71B91E +9B20B2B142E136CD6CB672268FF521EC5EFA6E56988E5FCA6F75FF15C6D5AD84 +82F4DEC84DEE67FBE91258DE2AA3D94DB48A7DF859E1C6A502DE1B9917C41E61 +E6A3C9F82997081E93439562FCFED61B664266C3A66B5AD73005844ABEF97EFB +BB37992257469285B3EC714C9E7D30CBDB1E834602DD7205CC2ABB19DB3D1E9E +5D6AA8AC9919845F826FB91EC327318FB1EABD8B905FA0BF9972EBE6F9E15822 +D6C47A35535BFA4DA0551BF2464F51649F6BF77E71A9806EA733CF96CB30FAF1 +7CB0677EECEF8142F3A59C751653C378D84C458B920F9BBF7BC108B6BE76B74E +6490BAB904CBB88A7E0A3D503B98A9D116DB6850B617BEF14DB927DAFC53A189 +095B31448CF73AD25F25BDB75ADC18342FD1BF1227F53AF69D31C5E0B2D5264F +EE7320D06761AE8EA0F0929768A77E87D800AD2B118EE10572D29BF71973BE61 +A348B2FAFF76F58ECF1A47AFDB4BC8951C5AFE7946323D5413CB292A56876EA6 +7A4E35C3D39A74EA7E138EE15D3B2678D91E38D94CF8D8B91766855CDE05F613 +D16873814293488AB11A7F0DE7EB574349A807595E652DB17713E59DFC1D98C4 +D65186BB1D6EF8B2648211FD4F38988E48A5CAF1B27CDB0BE437D558B669434A +9CC69F4E6EB94B697EF4238DD92EA780E3F5CF75E34E18CDD17AD1E1C6B2AC7E +50040C583D33E7A82C338BCA54F1693B4432C3C452E1F657A27BDFAA83CA6CC7 +2E890A145A2ADBF33C3567BC056FFD49D6976AFFE64D92235219FBC8A3C92B38 +E21B6D0C1A8EC5B6992475CED740DA6E8C853F8E443D9765B1F438B2E1106DE9 +542FA489DD082EE09FA5FDFB3648D6506B377D209406A9657E8C436F5E307899 +E02769D9D67CD58E6D2CB22A6D526B516BAB38B1C733596A102B82406A0886C1 +5D476584F0F6418055372B3C6002EAB0AC8AF380A6978669E78C2C57407CBF86 +4AB437DF85C25F59AE98FBF834C78C39B007A51A697A88C561E484E93599C72B +BB562C7250B59329B8D1F7F4B4AB2476875E0AF3714CD6E4E7973703CB501E27 +A6A311F10B9F0BFBC1E0BEBB4C89CC994AC0E4D2EDBCBBB962D31A343FC331E9 +073233ACAB6886E2DC0367C7CC2992369645B296413C03D27BAF418C4363E582 +3FB2DA273C1042F3085F7F9F4FCAE40F351418EB5A898BA998F384E1932C5E46 +CF173F2A9786817045A1E08737D8F1C0B9A6133D0086FB96343E1EDB50739601 +1B7903BA0454745C2E9C081691D196C6D04BBFF988EF3FD5669E0EA141D48B2E +B86009F1E4627BAE2C5791146FAFE1E91FED3CD8152EC28938B42392D8D3BAF7 +DF3683840CA5F4305E986230139D77D15AB1182A5DFBB3F2036586AD40D1D36F +D49BE7ED69F75DBD3BEEEBAFBA28B0559149BEC6475301CE35E37D72A1BF55DC +30C23CF987046E64D284D0DC3D09411CDA75C4C5C7868C2206E4A7998908BBA5 +1F522F266369DD5F9286B0864D45A01EBC7B1D8CDD1B8D34E723F36F682F2179 +F4D406621C2FAA6E554EC7C09DA5BE8527FD957392C9716F050C7942A629A9EE +9A4897B6C15E8DD63D0DE0F7CF826D76124ED6DE77F6064A01502E1304C55049 +1FF9AA67092FBF18145D8027F518B10F9710760A6CBA733F0C1B64ADAF5BC527 +4C24B6B3A684DD13171751B4C437F32AAD123454214F4B2CC7629B54E5BB40CD +93431C21EF4960852DE0735B223111FB1CF9854BB704EA64A5E258895195214C +C6AEAE8B127B62C3E6EB8B9D23621B02C430E8DB93C03895D567226715E694D1 +48A2674E6512FCB553700A947CCDC6AE3847258D2E33A9A89E7F8BC93F44A621 +30F0E10E2A27EF0EBB15F6D12E8D95D9886280CCCC35DD78128470BDEFBEC5C5 +AADF6CC0C5D21FA4E2C207E25400CCD1D9F9FD6ECDBB1426ED4DD76366AAF04A +D99225CA931C49227431B5ACFE00F965AD2A232CCEF1A25919E75914D253E58D +44D02EE0D669608AF1911716895A40E582633F2DA096A0E918F68874766439A4 +C250EBE7F3E6949C02FE6B403B7F11643EB352FD0EDABB005FFD6A6398CD1AE0 +C8809EC535E6BD855A001364D6E9A4DBEA39E2C79B6C9AC0405502FCCC58FD16 +1BBE3EDEE443B184B5B6ECE6A965E7492D0D1698406DBB171A9B681BCBB74B08 +AB64BEFFEF8BED8D9233739929D07AE6D639529DB2ECD8CF90EF164194019467 +EB38DB6748D4760D097463B3173CA931CEA327AB3C74E228C0FCB0330251D499 +A9D4FBABD24E1E696AC6A63716BC620A42FAEBC720359452A7D9810907577EA0 +636BC1A5309AD52A5D0630B3FA14FE23F968D3A105EFE033CD1DC39C8E9D1D9E +B0A0AD022C5D6A819218A7A31C95FC9633FBF852591441EEE8A03A1C68E67315 +CC66ECDB8A6D22DF313C5B3A21A0CB079080571F9070D2D2F87504E5D1E678BC +C16A00EB2FDEFC760AF97982FD1795A2563CA69DC5F7BE7D6473C24B2676C511 +81105B3118D0E3BED89612AA3E441BE3D0F1698CF987891FFF04E20A1EA40228 +12953BE70E0621829E0DF6B9C369F34977E3340768C1B1124CDCD1694D3B64F7 +E81E95BD54B025CAAEDB75EC864BCC78723D0F48978744F0BF8419A55D35E273 +67D916F3E28F5A06630BBBEE1339CE5601738FB4FA8044D9561F484AB58E4702 +6061613EFBA708D398CCDDA3E15EA4A82DF5E91E9D5ABC00DF191AD6521F427A +51208AE8E9D193F280C8083BE0EFBD75E0C33F398E59F318E6C193A7503A4732 +F9E11E8DDB511230BBAADA494CDE66C55B18C04170C247C84101A351C5CF1BED +A8E1B4268B511B0438FC14FFE363DCB276D4689564D743D0C35EAE0E711C7A80 +ABA0D520949819C273BAE91A300550ACBC30AAD247F2B13922D2F343FE137C89 +E06644B88A3E028556AAD5D25883E61063AC1300A803DE78B28E7292B5738665 +360B72A19266842D48E68314526512E4D938C64D636FD87E3C3401D528D0FAD8 +B198DD4BBCD6FC518106F210C725178C7B084F39DFBF49007B012BA73F11F0A2 +FC8C5084A79ABD0C176C08357070672A1238B9000AE85B00D363926BA430224E +EF247211757471C59755A710BFCE3E953D679A175AE6D1B0AD8EDA26984898EB +BCF0190FFCD38ADF3F2210CFB9E40805D795389781A154ADF379005BB8EFD6DA +EC676B8921D15EBA849557BEDEE27EC680FD2FB92453683899ECE7EC916A9C8D +279BC3E6BC789AB0DAD27F68FB8FFB2C0C4FAE9BA8BA8BCC60406A67D3F8D44A +3ADDDB77EFE9840B6A2F97BE6CA43512E91F1A5F1381D91A28C5CA612DEBDA0C +0975398C316ADCF7E1B9FC19D2781D8862BAD0DD63553601A589446811D850A4 +7A5EE9DC3BDE8DBA90307EB406572CBA608A874FF2CCB28D43DEE85E29717E20 +D93B5A3727EE3957F03DD83AA7EAFD41479699D983CE2D5DA023B95FD3A51E70 +E0571FAC0B7475177A11405714BB1567BF1F8D9CA2C8A97110E824DA2217DB17 +06F148EA959F791B16899375DC1D9228EA2482DD7AA22B6155BCF232732DBB61 +65A2D565487A303798FCF9E41541E3430ABEBA47F456CE1A122A662A392C7892 +C3D6D36DD99040B3CEC1786B03B46A58F0F5BA6B6B9E6CC3606F05D396AAA768 +7D4CBEA2400C1B0134D72D1FD173316B5C96DF8EA36A61BB73ADE9EAE53DE5C3 +C1526D9F0F8E1CDB1D0077047FE0D37DB3D9BBAD7AFB720F533BFB50EC001C82 +59C8559A0132EC46B57F00B52BB55800FEC1D94278EF2D366E9A36B45F36DB1C +8E476730CBCD0C4C16D338021FEE54FBD6B272196FD03159E57FF281DCDCDB53 +D67032ED477C0BAEC4BFD0708C0E527E6B849A7D12C434F970AC1B59A24F6DC2 +D252A1DF140AE17DE96263A66A91498CB5FAA64F9274E38F100CDC46420B8956 +1398D0BA55B26340B4885176992B50A0A1B52897D28CF346DED35BF49A35D82C +923AE3807CA5ED589DD3D44445B4A9A38D7AB80190FD3D8CD06228237EB849B6 +7F229DF0CA44DC2562FB572937B9EF41593DA9E048271C177BACD692F5AE7F23 +A192387094CA82EDC627A4EC87E3D38C43C54F156F6E4E76F0BA6808D8939C15 +2D7441B265E800E5897FA43AF8F31DEAB3F504703F47DDFE8443005E8A2013D4 +3DD9930928B091E0F68601B71F9C3766D3807322C0C78E70731FD700A7580098 +D7E95A706EC6AD11FDA3A6C32B31171DFF4BEAF84FA3FF9055E97B302E39E9FF +0C9C26A029EF0C17EA6173DEB3BFC8CFA190EC377A2C9E3361C212E0D6FE6B18 +190D70089E81E176D6627104FC9A25452BDF80B1E811A38F9AD3B08AAF5CC871 +EA34DA1C26361917ED6086F36F44B9CCD55E415F678871035A69E6F03E3320E1 +7181C1E00DF9863075226B6DDCCEB01A1E2014972D9D540F871E14170EC7492D +F6602AF3F7BAE9B56484EED9B1FB10D9A472BF9A42B4A5A20E34480740F88EB6 +6C0712F211D8768AE1138F17F4BD46D49784D5267E42876C50BF165A04C036D7 +14C17E5E0ABE870BE2605234B378764BA7D62A90EA13A89872CE0BFDEA89BE4F +00A006945A3095F26E89C32660D3F8E72897FB733D5879521E8C2C4E8A88FBCF +E4B8ED5AFE948A097354F21566C09D4AE09D1D42D3210AF5A256E6E8E8FF9F6B +F3695BF0CC12D06C0B6587C08D2FD03D6EE510AF09CE83DDF5D5DB328E36CD5A +CD3FDB378F9FD85DC7ED303E13E0D045BB89464DB81B6FB5E90B9C189C69B7DE +63D26B5ED513A021978B16B961C284A9316FB879382446215EDED65A3B53E4AC +6E257AA871CC8FA0C4E7B5CDB20049C8CFE11AA1131C41C3E06CD50F5F943B68 +F7FBE41F4EF6A8D0F730804E7D5F83F5C07F5D74E7F9B862F9A9910FEA396AF2 +9FBF78DB85A44E01A2814721A2B3018A811C3A5525541CF2EC43EE6977BE6B94 +8EB93A9B201033EF1F579D96E230C2620D00B2019E1E931B473C18FB13ED752C +3594AE05FBFE782E42F86323F1A3379799608111171BBEC2FC881EFF28DFE535 +D673AA5F6585A18628939AF3DFA6E1AC0D1B99D2EE76CEDF684FC2CBFE5F9B70 +3D5169903AECF35F70C6DB08E79FBCD59B022C1F0B9C4C8A056273FAA158B6DA +2ED09E1AAA97B9F503B3FDDFBBD678B60E8854272962B5C3E22E4E349DE6B6AB +3DF9C4972FB6C76E7C299F581EE84B2EA5968B17011E397F1CCDEF068F094892 +C6C84942127235EC69585BDB0E29EEEDE588D05A6C649A5B86647D6500090F91 +5D1D4A0A427B99CF7F32B3B2775EFE99004B4B7B0E3E39B378A0A7508310E576 +E25C4799D60C2C02C438DFA54D0EE25172DA4730DB65A97AF1D29F4A03B1F2D8 +C2969D2313478B6C6996BCFF955A5F9B87CC64C9B75BAE42AC8689172946DE94 +0C09FD5722FA7733180F3179B1AF11543F203A46A9811DF89A1ED63E4E8351A5 +A693F1275E32C63595D12F50F3CB06DEAD536548F9A8C02B23B32367D3B60AAC +70E2DBE1527D3F3D377C6DAD63FF037FC65E921B68114DD6056FFAE6A6A7DF17 +551D45B0EB8B92052CCA1F7783BB0ED64BF63B1BD12D58E372C103D3B5B18044 +275EF3817FE6D81753AC36950490EBB50F7E832418251C3C2EB411F1DF7ADBA0 +5AB8EC8F2482915E8BAB115A889D764E9B7CDE83020655042984DE0F70AAED5F +4C1A2DBC0105A5C5FCE2B14B87722D094B7148EEB07CC0B24D14EE0E49D80AD5 +4D2AE2B08A543C292DAD7F9635292D95DEFD842DABB1D376F4915303A116F0B2 +CDF207803CA5F54C0519E58F57969A771905DB60C3BA7B7BEC66A04B80080AA6 +F07629374B635D427873794A6C0177F392A2276C64D389B7513B17C9824C3D8E +9602E1D21DBAA82BDF7439DB9F54AE2F4D9CAB3C798969FA557DD87D25E89B88 +19AED8E384D446BBE309B79E2C7CAA43091C88E0546A602F6B2009805312AFDD +C8A6C65BAE07D024C353522DD8157C696CA6E1E66233BC2CED1D626DFF75C45D +829B3A2EA1FFB6F9F3853CCDC8C42B2A4E9AF21016B33876CE7032052D9A1BC5 +365D76B9CA4545FDCE8DB019116101424C6476A1BF24F678A99244003FD4871F +88FE0815DA4345CB44538CD546873714859A699D62E427C2FAB185730BEC1E5E +7ED24ED665CD75999B4EB4DF93D6FBBE34AEF6A28B3926FB3608C82081C67BF7 +66CC514A1A9FA5183EBBEC332998941601D803A099791043EB837C589B4C05D5 +C159E55D6531E40B0B8BDD2A381500FE835D2607EECB2B5A624F3F642EED3A44 +8058D47C2761D0A025720D61BA3A07EA6FD1F4DC08CCDFEE89AB2E3FB1D187C8 +55FAA26B8421EEB6C2BAAFC5CFE65DF7C4DE2E82C1409864DB763BFAA4CABC8C +CD3EE1B33A46F51165889E5EA9B3AB62409D5D3D82640507040E71A587A3935D +91E21453D240A879785FFCFFA7E692F74A1C89F16B9A9CA69BEA517058D59282 +3451E6AF43F89A89B2FD284166636D1085619020F337CF3D1D91219BC3500D69 +0B61F81B20C3925456A7E0E45DB8C18830CDD3B3AEFD01ABA44CD65F6E107B10 +3269C83D74BACBBDDE201683E3FEFB559C2FEA062BC036F068C4BC80FFC5F823 +1A3A9559AB85BBBB14C660B6B612910FA6391F3F2BA9A4E43BA4014337B510CA +AC86FB10D829E9EA54E33951E0394D0C238669BE9E2971E2FC07AC2DE0A96055 +1F3DFE71F8B6E36AE0D58ECD8396317243D16BA545EB2B30D7D9AE66757DF8AD +425D3C0CE41F643210804009E1FD7DEC1B12ABC063CBDB35739B13ECEFEC1B8F +418333069290AE870450C35535CD9BE88E50C3E08FD236921AC6D688596BF32C +8655A239B16A061FAD80C1C562761C7E0542245913EF905DE20626167CDF6D1A +82CD1C77A27601C870C2DD6EFC851BC7DC37E7F6E47D1B8CFE2CFF3B6153B6AA +39C011A06D087730B9E90523F17AA253A4396FC40ADF13525CFC74CAB3D7575A +CD9B5E5B48CD468B0DBB1BD9B8AE10E23D0F9D1C75D892022C130D7BCEE847C6 +8C61B019E78BD7DC599E082E35B28DB5E6FE364A0C95D585A61012997B5698B0 +3A31841F8A44401C09DC7D8DA4308165FCD4E3AFF17182D52FE151915B142CE9 +BFF709C02298FA1D71710CA4CF2FDDEFF2EFE9CBF70C11806151F20BF0B8AA44 +78E7B7271567C7460BBB30360805D531001B6FC4D3903EE55E07DF1B80C6AC72 +C34D617B1ECF3C4107E6E6838522EB39291354309FB398FC688918A2F4CB8B64 +31BA3950541541A33F1E5F7E6366954A86A4D385087B235B9B30C77D9EB89560 +644E13E877C788399BC2EBC24B2BA81D838B3491EA8F25A146D157CA12B63071 +BFF7748B6E2924B3F5D0CAE0F2951CC2BCD7611313605E421E08E2FD0D23618B +555ED35451616AE0E6824B83F334C6C942B0AB18665DBEBCF8953387C60746C8 +FF7579E0F2F568C3D790FE65A7BFEA4E3CE852C0800761A6A97459E6AC9DC618 +F697D4C084C873F19DB30FF3A30F953557BF19F3D537FE0E862A5F83044ED6C6 +99FA35F823A506A1E6954AD12D9184FCB91E1FC1F31447CB76B8A07D987A3BB3 +693050C15C1BE82982916797BFD39D9F00818447827A7AD945A46D9F124229EA +3AFF1CFA38CD9FCFA5C92A68311D0262C2098BE84E4CAE3C486618AA20CE60A1 +17B7DD54B60854E9771B0F906E413196C63A3A647C125BBFDE36570DD6F1962B +B044CAF4CFE97E03AAB00B4AD6622C9EBE897C135E6E94421F535BC698544781 +71CA7ED98FC755FAFCFDD6BBF532D5A263999E85E4F2FC6292B42301881482D9 +F71F70A9491F5B5C742C394DB0D8D1EC6FED020ABC879758AD572BAABC776CF8 +D13E3B086C7C512995BFBE098A790464529D5FFAEB88A298D5A911397E2C1484 +5D70F57D8E4BDFC516C12BACA35B4281E4B74255EED832FCC098D887FCE46D40 +9973999C987DE98F15022EAF4ACBEFBB3A59045D1DB954FB1D8FEF731F0CB419 +164BF5EF2519ED558439D97094864ED18DB07E09686B092B963FB6487A1C5418 +230AFA1D0772C67DD872B21687E1DAC09AC2D62B83A614A16D31C90FCC9C33A6 +4050C66CD6C5D3F437AE3D885381CDE61720D2756C97472611A2F83E02620934 +786C2B9297CEA8098D0710247CCF585248AB4A55261EFD6F4B9794063C36AB02 +B627827D28B60ACF5BF5CF56E91752EEC8400A93B4A211CD771AA9AACCCBF8F6 +0CE3D8E52236D8533BD469C4F4C2E9C94F163FF5CD4FFDD58467FC13AD78DD80 +955667B352680673799EAE573D3350D7FFB18BF11F66B12D33954D8194506BA5 +899566E467FC7DBC1CFD07C7A8EFA4686F79A8B3F613605DB9C99EC2190136CB +DC3B806C965228715A357A1C8E3BF790C09DA6E67DE70EED8C6619B99ADB864B +33597C0FFAD809311FAA54F814E5E0C06CFA07921668A235FC095ECBBDB51000 +204E44FD1857C8E1D57680D97BD11C973F5D010D6895D29BF2BF28E9A2437B1E +3F2C7D7582823CF375F2143C2D08F032EE9F5F30D57BA2F69FFCD28E08AE3418 +D14303D9959B4D763B9BBD371C49E94846F196D16DF822CDC6E6C67493D70058 +9ACA628BC60AEE755B021B640118AEAB84055D6090A221107F43427C33256FE9 +44D300 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -7557,13 +7574,13 @@ TeXDict begin 40258431 52099146 1000 600 600 (bashref.dvi) 57[56 45[{}8 109.091 /CMTT12 rf /Fi 130[45 1[45 123[{ T1Encoding ReEncodeFont }2 91.3242 /SFRM1095 rf /Fj 134[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 1[48 2[48 3[48 3[48 1[48 1[48 -1[48 48 48 1[48 48 48 1[48 48 48 48 1[48 6[48 6[48 48 -48 48 2[48 5[48 39[{}49 90.9091 /CMSLTT10 rf /Fk 134[65 +48 48 48 48 48 48 48 48 1[48 1[48 48 48 2[48 3[48 1[48 +1[48 1[48 48 48 1[48 48 48 1[48 48 48 48 1[48 6[48 6[48 +48 48 48 2[48 5[48 39[{}51 90.9091 /CMSLTT10 rf /Fk 134[65 65 89 65 68 48 48 50 65 68 61 68 102 34 65 1[34 68 61 -37 56 68 55 68 60 7[93 1[127 1[94 85 68 92 92 84 92 96 -116 74 96 1[46 96 96 77 81 94 89 87 93 1[58 5[61 61 61 -61 61 61 61 61 61 61 1[34 41 34 31[68 72 11[{}62 109.091 +37 56 68 55 68 60 7[93 93 127 1[94 85 68 92 92 84 92 +96 116 74 96 1[46 96 96 77 81 94 89 87 93 1[58 5[61 61 +61 61 61 61 61 61 61 61 1[34 41 34 31[68 72 11[{}63 109.091 /CMBX12 rf /Fl 135[42 1[42 1[30 37 38 1[46 46 51 74 23 42 1[28 1[42 1[42 46 42 1[46 51[33 32[51 12[{}19 90.9091 /CMTI10 rf /Fm 135[56 2[56 1[42 55 1[51 58 56 68 47 2[27 @@ -7576,9 +7593,9 @@ TeXDict begin 40258431 52099146 1000 600 600 (bashref.dvi) 81 81 35[90 94 11[{}52 143.462 /CMBX12 rf /Fq 200[0 21[91 17[45 1[91 12[71{}5 90.9091 /CMSY10 rf /Fr 133[40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 -28 40 51 40 51 45 7[68 68 93 1[68 66 51 67 1[62 71 68 +28 40 51 40 51 45 7[68 68 93 1[68 66 51 67 71 62 71 68 83 57 71 1[33 68 71 59 62 69 66 64 68 13[45 45 45 3[30 -8[45 2[25 18[76 1[51 53 11[{}57 90.9091 /CMSL10 rf /Fs +8[45 2[25 18[76 1[51 53 11[{}58 90.9091 /CMSL10 rf /Fs 132[67 1[71 71 97 71 75 52 53 55 1[75 67 75 112 37 71 41 37 75 67 41 61 75 60 75 65 3[37 1[37 1[102 102 139 102 103 94 75 100 101 92 101 105 128 81 105 69 50 105 @@ -7613,25 +7630,24 @@ ifelse %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a Fv(Bash)64 b(Reference)j(Man)-5 b(ual)p 150 1385 3600 34 v 2361 1481 a Fu(Reference)31 -b(Do)s(cumen)m(tation)i(for)d(Bash)2428 1589 y(Edition)h(5.2,)g(for)f -Ft(Bash)g Fu(V)-8 b(ersion)31 b(5.2.)3118 1697 y(Septem)m(b)s(er)f -(2022)150 4927 y Fs(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 -b(estern)46 b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068 -y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F)-11 +b(Do)s(cumen)m(tation)i(for)d(Bash)2428 1589 y(Edition)h(5.3,)g(for)f +Ft(Bash)g Fu(V)-8 b(ersion)31 b(5.3.)3333 1697 y(April)f(2024)150 +4927 y Fs(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46 +b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068 y(Brian)f(F)-11 +b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F)-11 b(oundation)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4279 a Fu(This)35 b(text)h(is)g(a)g(brief)f (description)h(of)f(the)h(features)g(that)g(are)g(presen)m(t)g(in)f -(the)h(Bash)f(shell)h(\(v)m(ersion)150 4389 y(5.2,)c(19)f(Septem)m(b)s -(er)f(2022\).)150 4523 y(This)e(is)h(Edition)f(5.2,)j(last)e(up)s -(dated)f(19)h(Septem)m(b)s(er)f(2022,)j(of)e Fr(The)f(GNU)i(Bash)e -(Reference)i(Man)m(ual)p Fu(,)150 4633 y(for)g Ft(Bash)p -Fu(,)g(V)-8 b(ersion)31 b(5.2.)150 4767 y(Cop)m(yrigh)m(t)602 -4764 y(c)577 4767 y Fq(\015)f Fu(1988{2022)35 b(F)-8 -b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 -4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h(to)g(cop)m(y)-8 -b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s(cumen)m(t)f -(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 +(the)h(Bash)f(shell)h(\(v)m(ersion)150 4389 y(5.3,)c(5)e(April)h +(2024\).)150 4523 y(This)36 b(is)g(Edition)h(5.3,)j(last)d(up)s(dated)e +(5)i(April)g(2024,)j(of)c Fr(The)h(GNU)g(Bash)g(Reference)g(Man)m(ual)p +Fu(,)i(for)150 4633 y Ft(Bash)p Fu(,)29 b(V)-8 b(ersion)31 +b(5.3.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 +y Fq(\015)f Fu(1988{2023)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 +b(oundation,)31 b(Inc.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h +(to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s +(cumen)m(t)f(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26 b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43 b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 @@ -7764,361 +7780,368 @@ g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)33 b Fu(34)399 4740 y(3.5.5)93 b(Arithmetic)31 b(Expansion)c Fn(:)15 b(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)40 b -Fu(34)399 4849 y(3.5.6)93 b(Pro)s(cess)30 b(Substitution)15 +Fu(35)399 4849 y(3.5.6)93 b(Pro)s(cess)30 b(Substitution)15 b Fn(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)g(:)h(:)28 b Fu(34)399 4959 y(3.5.7)93 b(W)-8 +(:)f(:)g(:)h(:)28 b Fu(35)399 4959 y(3.5.7)93 b(W)-8 b(ord)31 b(Splitting)d Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)41 -b Fu(35)399 5068 y(3.5.8)93 b(Filename)32 b(Expansion)22 +b Fu(36)399 5068 y(3.5.8)93 b(Filename)32 b(Expansion)22 b Fn(:)14 b(:)h(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) -f(:)h(:)f(:)g(:)35 b Fu(35)524 5178 y(3.5.8.1)93 b(P)m(attern)31 +f(:)h(:)f(:)g(:)35 b Fu(36)524 5178 y(3.5.8.1)93 b(P)m(attern)31 b(Matc)m(hing)14 b Fn(:)k(:)d(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)27 b Fu(36)399 5288 y(3.5.9)93 +h(:)f(:)g(:)h(:)f(:)h(:)27 b Fu(37)399 5288 y(3.5.9)93 b(Quote)31 b(Remo)m(v)-5 b(al)17 b Fn(:)g(:)e(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)30 -b Fu(38)p eop end +b Fu(39)p eop end %%Page: -2 4 TeXDict begin -2 3 bop 3699 -116 a Fu(ii)275 83 y(3.6)92 b(Redirections)14 b Fn(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)27 b Fu(38)399 193 y(3.6.1)93 b(Redirecting)31 +(:)h(:)f(:)g(:)27 b Fu(39)399 193 y(3.6.1)93 b(Redirecting)31 b(Input)11 b Fn(:)j(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)24 b Fu(39)399 302 +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)24 b Fu(40)399 302 y(3.6.2)93 b(Redirecting)31 b(Output)15 b Fn(:)f(:)i(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)28 -b Fu(39)399 412 y(3.6.3)93 b(App)s(ending)28 b(Redirected)k(Output)20 +b Fu(40)399 412 y(3.6.3)93 b(App)s(ending)28 b(Redirected)k(Output)20 b Fn(:)14 b(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h -(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)33 b Fu(39)399 +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)33 b Fu(40)399 521 y(3.6.4)93 b(Redirecting)31 b(Standard)e(Output)h(and)f(Standard)h (Error)16 b Fn(:)e(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)29 b -Fu(40)399 631 y(3.6.5)93 b(App)s(ending)28 b(Standard)i(Output)f(and)h +Fu(41)399 631 y(3.6.5)93 b(App)s(ending)28 b(Standard)i(Output)f(and)h (Standard)f(Error)d Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 -b Fu(40)399 741 y(3.6.6)93 b(Here)31 b(Do)s(cumen)m(ts)15 +b Fu(41)399 741 y(3.6.6)93 b(Here)31 b(Do)s(cumen)m(ts)15 b Fn(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)27 b Fu(40)399 850 y(3.6.7)93 +(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)27 b Fu(41)399 850 y(3.6.7)93 b(Here)31 b(Strings)16 b Fn(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)29 -b Fu(41)399 960 y(3.6.8)93 b(Duplicating)32 b(File)f(Descriptors)25 +b Fu(42)399 960 y(3.6.8)93 b(Duplicating)32 b(File)f(Descriptors)25 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)37 -b Fu(41)399 1069 y(3.6.9)93 b(Mo)m(ving)32 b(File)f(Descriptors)d +b Fu(42)399 1069 y(3.6.9)93 b(Mo)m(ving)32 b(File)f(Descriptors)d Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -40 b Fu(41)399 1179 y(3.6.10)93 b(Op)s(ening)29 b(File)j(Descriptors)f +40 b Fu(42)399 1179 y(3.6.10)93 b(Op)s(ening)29 b(File)j(Descriptors)f (for)f(Reading)h(and)f(W)-8 b(riting)29 b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f -(:)41 b Fu(41)275 1289 y(3.7)92 b(Executing)31 b(Commands)24 +(:)41 b Fu(42)275 1289 y(3.7)92 b(Executing)31 b(Commands)24 b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -g(:)h(:)f(:)h(:)f(:)g(:)h(:)38 b Fu(42)399 1398 y(3.7.1)93 +g(:)h(:)f(:)h(:)f(:)g(:)h(:)38 b Fu(43)399 1398 y(3.7.1)93 b(Simple)30 b(Command)f(Expansion)11 b Fn(:)k(:)g(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)24 b Fu(42)399 1508 y(3.7.2)93 b(Command)29 +h(:)f(:)g(:)h(:)f(:)24 b Fu(43)399 1508 y(3.7.2)93 b(Command)29 b(Searc)m(h)i(and)f(Execution)15 b Fn(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -28 b Fu(42)399 1617 y(3.7.3)93 b(Command)29 b(Execution)i(En)m +28 b Fu(43)399 1617 y(3.7.3)93 b(Command)29 b(Execution)i(En)m (vironmen)m(t)17 b Fn(:)e(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f -(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)30 b Fu(43)399 +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)30 b Fu(44)399 1727 y(3.7.4)93 b(En)m(vironmen)m(t)26 b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)g(:)h(:)39 b Fu(44)399 1836 y(3.7.5)93 b(Exit)31 +(:)f(:)g(:)h(:)39 b Fu(45)399 1836 y(3.7.5)93 b(Exit)31 b(Status)16 b Fn(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)29 -b Fu(44)399 1946 y(3.7.6)93 b(Signals)23 b Fn(:)15 b(:)h(:)f(:)h(:)f(:) +b Fu(45)399 1946 y(3.7.6)93 b(Signals)23 b Fn(:)15 b(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)36 b Fu(45)275 +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)36 b Fu(46)275 2056 y(3.8)92 b(Shell)30 b(Scripts)12 b Fn(:)i(:)i(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f -(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)25 b Fu(46)150 2306 +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)25 b Fu(47)150 2306 y Fs(4)135 b(Shell)45 b(Builtin)g(Commands)14 b Fo(:)20 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)27 b Fs(48)275 2443 y Fu(4.1)92 b(Bourne)30 +(:)h(:)f(:)h(:)f(:)27 b Fs(49)275 2443 y Fu(4.1)92 b(Bourne)30 b(Shell)g(Builtins)16 b Fn(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)29 -b Fu(48)275 2553 y(4.2)92 b(Bash)30 b(Builtin)h(Commands)13 +b Fu(49)275 2553 y(4.2)92 b(Bash)30 b(Builtin)h(Commands)13 b Fn(:)h(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)26 b Fu(55)275 2663 y(4.3)92 b(Mo)s(difying)30 +(:)f(:)g(:)h(:)f(:)26 b Fu(57)275 2663 y(4.3)92 b(Mo)s(difying)30 b(Shell)g(Beha)m(vior)18 b Fn(:)f(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)31 b Fu(67)399 +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)31 b Fu(69)399 2772 y(4.3.1)93 b(The)30 b(Set)g(Builtin)14 b Fn(:)i(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)g(:)27 b Fu(67)399 2882 y(4.3.2)93 b(The)30 b(Shopt)f(Builtin)21 +f(:)g(:)27 b Fu(69)399 2882 y(4.3.2)93 b(The)30 b(Shopt)f(Builtin)21 b Fn(:)16 b(:)g(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)g(:)h(:)34 b Fu(71)275 2991 y(4.4)92 +h(:)f(:)h(:)f(:)g(:)h(:)34 b Fu(73)275 2991 y(4.4)92 b(Sp)s(ecial)30 b(Builtins)9 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)g(:)h(:)f(:)22 b Fu(77)150 3242 y Fs(5)135 b(Shell)45 +f(:)g(:)h(:)f(:)22 b Fu(80)150 3242 y Fs(5)135 b(Shell)45 b(V)-11 b(ariables)11 b Fo(:)20 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:) -f(:)h(:)f(:)g(:)h(:)f(:)24 b Fs(78)275 3379 y Fu(5.1)92 +f(:)h(:)f(:)g(:)h(:)f(:)24 b Fs(81)275 3379 y Fu(5.1)92 b(Bourne)30 b(Shell)g(V)-8 b(ariables)10 b Fn(:)17 b(:)e(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -23 b Fu(78)275 3489 y(5.2)92 b(Bash)30 b(V)-8 b(ariables)26 +23 b Fu(81)275 3489 y(5.2)92 b(Bash)30 b(V)-8 b(ariables)26 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)38 -b Fu(78)150 3739 y Fs(6)135 b(Bash)44 b(F)-11 b(eatures)32 +b Fu(81)150 3739 y Fs(6)135 b(Bash)44 b(F)-11 b(eatures)32 b Fo(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -44 b Fs(91)275 3876 y Fu(6.1)92 b(In)m(v)m(oking)31 b(Bash)16 +44 b Fs(94)275 3876 y Fu(6.1)92 b(In)m(v)m(oking)31 b(Bash)16 b Fn(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)29 -b Fu(91)275 3986 y(6.2)92 b(Bash)30 b(Startup)g(Files)f +b Fu(94)275 3986 y(6.2)92 b(Bash)30 b(Startup)g(Files)f Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)41 b Fu(93)275 +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)41 b Fu(96)275 4095 y(6.3)92 b(In)m(teractiv)m(e)32 b(Shells)19 b Fn(:)d(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)32 b Fu(94)399 4205 y(6.3.1)93 +(:)h(:)f(:)g(:)h(:)f(:)h(:)32 b Fu(97)399 4205 y(6.3.1)93 b(What)31 b(is)f(an)h(In)m(teractiv)m(e)h(Shell?)25 b Fn(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)38 -b Fu(95)399 4315 y(6.3.2)93 b(Is)30 b(this)g(Shell)g(In)m(teractiv)m +b Fu(98)399 4315 y(6.3.2)93 b(Is)30 b(this)g(Shell)g(In)m(teractiv)m (e?)22 b Fn(:)d(:)c(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)35 b Fu(95)399 4424 y(6.3.3)93 b(In)m(teractiv)m(e)33 +h(:)35 b Fu(98)399 4424 y(6.3.3)93 b(In)m(teractiv)m(e)33 b(Shell)d(Beha)m(vior)11 b Fn(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)24 b Fu(95)275 4534 y(6.4)92 b(Bash)30 +(:)h(:)f(:)g(:)h(:)f(:)24 b Fu(98)275 4534 y(6.4)92 b(Bash)30 b(Conditional)h(Expressions)10 b Fn(:)k(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)g(:)h(:)f(:)23 b Fu(96)275 4643 y(6.5)92 -b(Shell)30 b(Arithmetic)13 b Fn(:)k(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g -(:)h(:)26 b Fu(98)275 4753 y(6.6)92 b(Aliases)18 b Fn(:)e(:)g(:)f(:)g +h(:)f(:)h(:)f(:)g(:)h(:)f(:)23 b Fu(99)275 4643 y(6.5)92 +b(Shell)30 b(Arithmetic)11 b Fn(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)24 b Fu(101)275 4753 y(6.6)92 b(Aliases)18 b Fn(:)e(:)g(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)31 -b Fu(100)275 4863 y(6.7)92 b(Arra)m(ys)23 b Fn(:)15 b(:)h(:)f(:)g(:)h +b Fu(103)275 4863 y(6.7)92 b(Arra)m(ys)23 b Fn(:)15 b(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)36 -b Fu(100)275 4972 y(6.8)92 b(The)29 b(Directory)j(Stac)m(k)14 +b Fu(103)275 4972 y(6.8)92 b(The)29 b(Directory)j(Stac)m(k)14 b Fn(:)j(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f -(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)27 b Fu(102)399 5082 y(6.8.1)93 +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)27 b Fu(105)399 5082 y(6.8.1)93 b(Directory)32 b(Stac)m(k)f(Builtins)20 b Fn(:)c(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)33 b Fu(102)275 5191 +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)33 b Fu(106)275 5191 y(6.9)92 b(Con)m(trolling)31 b(the)g(Prompt)10 b Fn(:)15 b(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)23 b Fu(104)275 5301 y(6.10)92 b(The)30 b(Restricted)h +h(:)f(:)h(:)23 b Fu(107)275 5301 y(6.10)92 b(The)30 b(Restricted)h (Shell)9 b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)22 b Fu(105)p +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)22 b Fu(109)p eop end %%Page: -3 5 TeXDict begin -3 4 bop 3674 -116 a Fu(iii)275 83 y(6.11)92 -b(Bash)31 b(POSIX)e(Mo)s(de)14 b Fn(:)i(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)28 -b Fu(106)275 193 y(6.12)92 b(Shell)30 b(Compatibilit)m(y)i(Mo)s(de)25 -b Fn(:)15 b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)38 b Fu(110)150 443 y Fs(7)135 b(Job)45 b(Con)l(trol)35 +b(Bash)31 b(and)e(POSIX)12 b Fn(:)j(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)25 +b Fu(109)399 193 y(6.11.1)93 b(What)31 b(is)g(POSIX?)22 +b Fn(:)14 b(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)36 b Fu(109)399 302 y(6.11.2)93 b(Bash)31 +b(POSIX)e(Mo)s(de)18 b Fn(:)e(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)31 b Fu(110)275 412 y(6.12)92 +b(Shell)30 b(Compatibilit)m(y)i(Mo)s(de)25 b Fn(:)15 +b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)38 +b Fu(114)150 663 y Fs(7)135 b(Job)45 b(Con)l(trol)35 b Fo(:)20 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) -g(:)48 b Fs(113)275 580 y Fu(7.1)92 b(Job)30 b(Con)m(trol)h(Basics)23 +g(:)48 b Fs(118)275 800 y Fu(7.1)92 b(Job)30 b(Con)m(trol)h(Basics)23 b Fn(:)16 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)36 b Fu(113)275 690 +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)36 b Fu(118)275 909 y(7.2)92 b(Job)30 b(Con)m(trol)h(Builtins)11 b Fn(:)k(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)24 b Fu(114)275 800 y(7.3)92 b(Job)30 b(Con)m(trol)h(V)-8 +(:)f(:)24 b Fu(119)275 1019 y(7.3)92 b(Job)30 b(Con)m(trol)h(V)-8 b(ariables)26 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Fu(116)150 -1050 y Fs(8)135 b(Command)45 b(Line)g(Editing)11 b Fo(:)20 +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Fu(121)150 +1269 y Fs(8)135 b(Command)45 b(Line)g(Editing)11 b Fo(:)20 b(:)g(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f -(:)g(:)h(:)f(:)h(:)k Fs(117)275 1187 y Fu(8.1)92 b(In)m(tro)s(duction) +(:)g(:)h(:)f(:)h(:)k Fs(122)275 1406 y Fu(8.1)92 b(In)m(tro)s(duction) 30 b(to)h(Line)f(Editing)12 b Fn(:)k(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)25 b Fu(117)275 1297 y(8.2)92 +(:)h(:)f(:)g(:)h(:)f(:)h(:)25 b Fu(122)275 1516 y(8.2)92 b(Readline)31 b(In)m(teraction)14 b Fn(:)j(:)e(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)27 -b Fu(117)399 1406 y(8.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)13 +b Fu(122)399 1626 y(8.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)13 b Fn(:)j(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)26 -b Fu(118)399 1516 y(8.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i +b Fu(123)399 1735 y(8.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i (Commands)13 b Fn(:)i(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)27 -b Fu(118)399 1626 y(8.2.3)93 b(Readline)31 b(Killing)g(Commands)24 +b Fu(123)399 1845 y(8.2.3)93 b(Readline)31 b(Killing)g(Commands)24 b Fn(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)38 -b Fu(119)399 1735 y(8.2.4)93 b(Readline)31 b(Argumen)m(ts)17 +b Fu(124)399 1954 y(8.2.4)93 b(Readline)31 b(Argumen)m(ts)17 b Fn(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h -(:)f(:)h(:)30 b Fu(119)399 1845 y(8.2.5)93 b(Searc)m(hing)31 +(:)f(:)h(:)30 b Fu(124)399 2064 y(8.2.5)93 b(Searc)m(hing)31 b(for)f(Commands)f(in)h(the)h(History)15 b Fn(:)g(:)h(:)f(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)28 b Fu(119)275 -1954 y(8.3)92 b(Readline)31 b(Init)f(File)8 b Fn(:)17 +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)28 b Fu(124)275 +2174 y(8.3)92 b(Readline)31 b(Init)f(File)8 b Fn(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)22 b Fu(120)399 2064 +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)22 b Fu(125)399 2283 y(8.3.1)93 b(Readline)31 b(Init)f(File)i(Syn)m(tax)21 b Fn(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)34 -b Fu(120)399 2174 y(8.3.2)93 b(Conditional)31 b(Init)f(Constructs)14 +b Fu(125)399 2393 y(8.3.2)93 b(Conditional)31 b(Init)f(Constructs)14 b Fn(:)h(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)27 -b Fu(129)399 2283 y(8.3.3)93 b(Sample)30 b(Init)g(File)20 +b Fu(134)399 2502 y(8.3.3)93 b(Sample)30 b(Init)g(File)20 b Fn(:)d(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)33 b Fu(130)275 2393 y(8.4)92 +(:)h(:)f(:)g(:)h(:)f(:)h(:)33 b Fu(136)275 2612 y(8.4)92 b(Bindable)30 b(Readline)h(Commands)19 b Fn(:)c(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)h(:)f(:)g(:)h(:)f(:)33 b Fu(133)399 2502 y(8.4.1)93 +h(:)f(:)h(:)f(:)g(:)h(:)f(:)33 b Fu(139)399 2721 y(8.4.1)93 b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)16 b Fn(:)h(:)e(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h -(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)29 b Fu(133)399 -2612 y(8.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)29 b Fu(139)399 +2831 y(8.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f (History)c Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)39 b Fu(134)399 2721 y(8.4.3)93 b(Commands)29 b(F)-8 +f(:)39 b Fu(140)399 2941 y(8.4.3)93 b(Commands)29 b(F)-8 b(or)31 b(Changing)f(T)-8 b(ext)9 b Fn(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)23 b Fu(136)399 2831 y(8.4.4)93 b(Killing)31 +h(:)f(:)23 b Fu(142)399 3050 y(8.4.4)93 b(Killing)31 b(And)e(Y)-8 b(anking)10 b Fn(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)24 b Fu(137)399 -2941 y(8.4.5)93 b(Sp)s(ecifying)30 b(Numeric)g(Argumen)m(ts)25 +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)24 b Fu(143)399 +3160 y(8.4.5)93 b(Sp)s(ecifying)30 b(Numeric)g(Argumen)m(ts)25 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h -(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)39 b Fu(138)399 -3050 y(8.4.6)93 b(Letting)31 b(Readline)g(T)m(yp)s(e)f(F)-8 +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)39 b Fu(144)399 +3269 y(8.4.6)93 b(Letting)31 b(Readline)g(T)m(yp)s(e)f(F)-8 b(or)31 b(Y)-8 b(ou)20 b Fn(:)c(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)33 -b Fu(139)399 3160 y(8.4.7)93 b(Keyb)s(oard)29 b(Macros)9 +b Fu(145)399 3379 y(8.4.7)93 b(Keyb)s(oard)29 b(Macros)9 b Fn(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)g(:)h(:)22 b Fu(140)399 3269 y(8.4.8)93 +h(:)f(:)h(:)f(:)g(:)h(:)22 b Fu(146)399 3489 y(8.4.8)93 b(Some)30 b(Miscellaneous)j(Commands)14 b Fn(:)f(:)j(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)27 b Fu(141)275 3379 y(8.5)92 b(Readline)31 b(vi)f(Mo)s(de)e +(:)f(:)27 b Fu(147)275 3598 y(8.5)92 b(Readline)31 b(vi)f(Mo)s(de)e Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)41 b Fu(143)275 -3489 y(8.6)92 b(Programmable)30 b(Completion)25 b Fn(:)15 +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)41 b Fu(149)275 +3708 y(8.6)92 b(Programmable)30 b(Completion)25 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)37 -b Fu(143)275 3598 y(8.7)92 b(Programmable)30 b(Completion)h(Builtins)14 +b Fu(150)275 3817 y(8.7)92 b(Programmable)30 b(Completion)h(Builtins)14 b Fn(:)i(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)28 b Fu(146)275 -3708 y(8.8)92 b(A)30 b(Programmable)h(Completion)g(Example)8 +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)28 b Fu(152)275 +3927 y(8.8)92 b(A)30 b(Programmable)h(Completion)g(Example)8 b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)22 b Fu(150)150 3958 y +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)22 b Fu(156)150 4178 y Fs(9)135 b(Using)45 b(History)h(In)l(teractiv)l(ely)28 b Fo(:)22 b(:)d(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g -(:)h(:)41 b Fs(152)275 4095 y Fu(9.1)92 b(Bash)30 b(History)h(F)-8 +(:)h(:)41 b Fs(159)275 4315 y Fu(9.1)92 b(Bash)30 b(History)h(F)-8 b(acilities)9 b Fn(:)19 b(:)c(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) -f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)22 b Fu(152)275 -4205 y(9.2)92 b(Bash)30 b(History)h(Builtins)d Fn(:)16 +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)22 b Fu(159)275 +4424 y(9.2)92 b(Bash)30 b(History)h(Builtins)d Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)h(:)f(:)41 b Fu(152)275 4315 y(9.3)92 b(History)31 +h(:)f(:)h(:)f(:)41 b Fu(159)275 4534 y(9.3)92 b(History)31 b(Expansion)10 b Fn(:)k(:)h(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)23 -b Fu(154)399 4424 y(9.3.1)93 b(Ev)m(en)m(t)31 b(Designators)19 +b Fu(161)399 4643 y(9.3.1)93 b(Ev)m(en)m(t)31 b(Designators)19 b Fn(:)e(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)32 b Fu(155)399 4534 y(9.3.2)93 b(W)-8 +(:)h(:)f(:)g(:)h(:)32 b Fu(162)399 4753 y(9.3.2)93 b(W)-8 b(ord)31 b(Designators)c Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)39 b Fu(156)399 -4643 y(9.3.3)93 b(Mo)s(di\014ers)15 b Fn(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)39 b Fu(163)399 +4863 y(9.3.3)93 b(Mo)s(di\014ers)15 b Fn(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)g(:)29 b Fu(156)p eop end +h(:)f(:)h(:)f(:)g(:)29 b Fu(164)p eop end %%Page: -4 6 TeXDict begin -4 5 bop 3677 -116 a Fu(iv)150 83 y Fs(10)135 b(Installing)46 b(Bash)16 b Fo(:)j(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)h(:)f(:)29 b Fs(158)275 220 y Fu(10.1)92 b(Basic)32 +f(:)h(:)f(:)29 b Fs(165)275 220 y Fu(10.1)92 b(Basic)32 b(Installation)8 b Fn(:)17 b(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)22 -b Fu(158)275 330 y(10.2)92 b(Compilers)30 b(and)g(Options)17 +b Fu(165)275 330 y(10.2)92 b(Compilers)30 b(and)g(Options)17 b Fn(:)d(:)i(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h -(:)f(:)h(:)f(:)30 b Fu(159)275 439 y(10.3)92 b(Compiling)30 +(:)f(:)h(:)f(:)30 b Fu(166)275 439 y(10.3)92 b(Compiling)30 b(F)-8 b(or)32 b(Multiple)f(Arc)m(hitectures)10 b Fn(:)16 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f -(:)g(:)h(:)f(:)h(:)f(:)23 b Fu(159)275 549 y(10.4)92 +(:)g(:)h(:)f(:)h(:)f(:)23 b Fu(166)275 549 y(10.4)92 b(Installation)32 b(Names)22 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)35 -b Fu(160)275 658 y(10.5)92 b(Sp)s(ecifying)30 b(the)g(System)h(T)m(yp)s +b Fu(167)275 658 y(10.5)92 b(Sp)s(ecifying)30 b(the)g(System)h(T)m(yp)s (e)21 b Fn(:)14 b(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)34 b Fu(160)275 768 y(10.6)92 b(Sharing)30 b(Defaults)24 +h(:)34 b Fu(167)275 768 y(10.6)92 b(Sharing)30 b(Defaults)24 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) -f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)37 b Fu(160)275 +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)37 b Fu(167)275 878 y(10.7)92 b(Op)s(eration)30 b(Con)m(trols)12 b Fn(:)k(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)25 b Fu(161)275 987 y(10.8)92 b(Optional)31 +(:)h(:)f(:)25 b Fu(168)275 987 y(10.8)92 b(Optional)31 b(F)-8 b(eatures)19 b Fn(:)d(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)32 -b Fu(161)150 1238 y Fs(App)t(endix)44 b(A)119 b(Rep)t(orting)46 +b Fu(168)150 1238 y Fs(App)t(endix)44 b(A)119 b(Rep)t(orting)46 b(Bugs)21 b Fo(:)f(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)35 b Fs(167)150 1498 y(App)t(endix)44 +(:)f(:)g(:)h(:)f(:)35 b Fs(174)150 1498 y(App)t(endix)44 b(B)125 b(Ma)7 b(jor)46 b(Di\013erences)g(F)-11 b(rom)284 1639 y(The)45 b(Bourne)f(Shell)35 b Fo(:)19 b(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:) -f(:)g(:)h(:)f(:)h(:)47 b Fs(168)275 1776 y Fu(B.1)92 +f(:)g(:)h(:)f(:)h(:)47 b Fs(175)275 1776 y Fu(B.1)92 b(Implemen)m(tation)31 b(Di\013erences)h(F)-8 b(rom)31 b(The)e(SVR4.2)j(Shell)22 b Fn(:)15 b(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h -(:)35 b Fu(172)150 2027 y Fs(App)t(endix)44 b(C)124 b(GNU)36 +(:)35 b Fu(180)150 2027 y Fs(App)t(endix)44 b(C)124 b(GNU)36 b(F)-11 b(ree)35 b(Do)t(cumen)l(tation)i(License)25 b -Fo(:)20 b(:)29 b Fs(174)150 2305 y(App)t(endix)44 b(D)118 +Fo(:)20 b(:)29 b Fs(181)150 2305 y(App)t(endix)44 b(D)118 b(Indexes)27 b Fo(:)20 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)40 -b Fs(182)275 2442 y Fu(D.1)92 b(Index)29 b(of)i(Shell)f(Builtin)h +b Fs(189)275 2442 y Fu(D.1)92 b(Index)29 b(of)i(Shell)f(Builtin)h (Commands)23 b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)38 -b Fu(182)275 2552 y(D.2)92 b(Index)29 b(of)i(Shell)f(Reserv)m(ed)h(W)-8 +b Fu(189)275 2552 y(D.2)92 b(Index)29 b(of)i(Shell)f(Reserv)m(ed)h(W)-8 b(ords)20 b Fn(:)c(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)34 -b Fu(183)275 2661 y(D.3)92 b(P)m(arameter)31 b(and)f(V)-8 +b Fu(190)275 2661 y(D.3)92 b(P)m(arameter)31 b(and)f(V)-8 b(ariable)32 b(Index)27 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)42 b Fu(184)275 2771 y(D.4)92 b(F)-8 b(unction)31 +h(:)f(:)g(:)42 b Fu(191)275 2771 y(D.4)92 b(F)-8 b(unction)31 b(Index)24 b Fn(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)38 -b Fu(186)275 2880 y(D.5)92 b(Concept)30 b(Index)15 b +b Fu(193)275 2880 y(D.5)92 b(Concept)30 b(Index)15 b Fn(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)29 b -Fu(188)p eop end +Fu(195)p eop end %%Page: 1 7 TeXDict begin 1 6 bop 3705 -116 a Fu(1)150 299 y Fp(1)80 b(In)l(tro)t(duction)150 604 y Fs(1.1)68 b(What)45 b(is)g(Bash?)150 @@ -8267,7 +8290,7 @@ b(and)e(function)h(names.)630 4020 y(Also)31 b(referred)f(to)h(as)f(an) h Ft(identifier)p Fu(.)150 4186 y Ft(operator)96 b Fu(A)38 b Ft(control)28 b(operator)36 b Fu(or)h(a)i Ft(redirection)27 b(operator)p Fu(.)61 b(See)38 b(Section)g(3.6)h([Redirec-)630 -4295 y(tions],)f(page)f(38,)i(for)d(a)g(list)h(of)f(redirection)h(op)s +4295 y(tions],)f(page)f(39,)i(for)d(a)g(list)h(of)f(redirection)h(op)s (erators.)58 b(Op)s(erators)35 b(con)m(tain)j(at)f(least)630 4405 y(one)31 b(unquoted)e Ft(metacharacter)p Fu(.)150 4570 y Ft(process)f(group)630 4680 y Fu(A)i(collection)k(of)c(related)h @@ -8339,17 +8362,17 @@ y Fu(The)c(follo)m(wing)h(is)f(a)h(brief)e(description)i(of)f(the)g (shell's)h(op)s(eration)f(when)f(it)i(reads)f(and)f(executes)j(a)150 3299 y(command.)h(Basically)-8 b(,)34 b(the)c(shell)h(do)s(es)f(the)h (follo)m(wing:)199 3456 y(1.)61 b(Reads)42 b(its)h(input)e(from)h(a)g -(\014le)h(\(see)g(Section)g(3.8)g([Shell)f(Scripts],)j(page)e(46\),)k +(\014le)h(\(see)g(Section)g(3.8)g([Shell)f(Scripts],)j(page)e(47\),)k (from)41 b(a)i(string)330 3566 y(supplied)30 b(as)h(an)g(argumen)m(t)h (to)g(the)f Ft(-c)g Fu(in)m(v)m(o)s(cation)i(option)f(\(see)g(Section)g -(6.1)g([In)m(v)m(oking)g(Bash],)330 3675 y(page)f(91\),)h(or)e(from)g +(6.1)g([In)m(v)m(oking)g(Bash],)330 3675 y(page)f(94\),)h(or)e(from)g (the)h(user's)f(terminal.)199 3821 y(2.)61 b(Breaks)43 b(the)g(input)f(in)m(to)h(w)m(ords)f(and)g(op)s(erators,)k(ob)s(eying)d (the)g(quoting)g(rules)f(describ)s(ed)f(in)330 3931 y(Section)27 b(3.1.2)i([Quoting],)f(page)f(6.)40 b(These)26 b(tok)m(ens)i(are)f (separated)g(b)m(y)f Ft(metacharacters)p Fu(.)36 b(Alias)330 4040 y(expansion)30 b(is)h(p)s(erformed)d(b)m(y)j(this)f(step)g(\(see)i -(Section)f(6.6)g([Aliases],)i(page)e(100\).)199 4186 +(Section)f(6.6)g([Aliases],)i(page)e(103\).)199 4186 y(3.)61 b(P)m(arses)35 b(the)g(tok)m(ens)g(in)m(to)h(simple)e(and)g (comp)s(ound)f(commands)h(\(see)h(Section)h(3.2)f([Shell)g(Com-)330 4296 y(mands],)30 b(page)h(9\).)199 4442 y(4.)61 b(P)m(erforms)40 @@ -8357,16 +8380,16 @@ b(the)h(v)-5 b(arious)40 b(shell)h(expansions)f(\(see)h(Section)g(3.5)g ([Shell)g(Expansions],)h(page)f(24\),)330 4551 y(breaking)35 b(the)g(expanded)g(tok)m(ens)h(in)m(to)g(lists)f(of)g(\014lenames)h (\(see)g(Section)f(3.5.8)i([Filename)g(Ex-)330 4661 y(pansion],)30 -b(page)h(35\))h(and)e(commands)g(and)g(argumen)m(ts.)199 +b(page)h(36\))h(and)e(commands)g(and)g(argumen)m(ts.)199 4807 y(5.)61 b(P)m(erforms)36 b(an)m(y)i(necessary)f(redirections)g -(\(see)h(Section)f(3.6)h([Redirections],)i(page)e(38\))g(and)e(re-)330 +(\(see)h(Section)f(3.6)h([Redirections],)i(page)e(39\))g(and)e(re-)330 4916 y(mo)m(v)m(es)c(the)e(redirection)h(op)s(erators)g(and)f(their)g (op)s(erands)f(from)h(the)h(argumen)m(t)f(list.)199 5062 y(6.)61 b(Executes)31 b(the)g(command)f(\(see)h(Section)g(3.7)h -([Executing)f(Commands],)f(page)h(42\).)199 5208 y(7.)61 +([Executing)f(Commands],)f(page)h(43\).)199 5208 y(7.)61 b(Optionally)40 b(w)m(aits)g(for)f(the)g(command)g(to)h(complete)g(and) f(collects)i(its)f(exit)g(status)f(\(see)h(Sec-)330 5317 -y(tion)31 b(3.7.5)h([Exit)f(Status],)g(page)g(44\).)p +y(tion)31 b(3.7.5)h([Exit)f(Status],)g(page)g(45\).)p eop end %%Page: 6 12 TeXDict begin 6 11 bop 150 -116 a Fu(Chapter)30 b(3:)41 @@ -8384,11 +8407,11 @@ y(Quoting)c(can)f(b)s(e)g(used)f(to)j(disable)e(sp)s(ecial)h(treatmen)m (quoted)g(if)h(it)g(is)f(to)h(represen)m(t)g(itself.)68 b(When)39 b(the)h(command)f(history)150 1018 y(expansion)i(facilities)j (are)e(b)s(eing)f(used)g(\(see)h(Section)h(9.3)f([History)h(In)m -(teraction],)j(page)c(154\),)47 b(the)150 1127 y Fr(history)30 +(teraction],)j(page)c(161\),)47 b(the)150 1127 y Fr(history)30 b(expansion)h Fu(c)m(haracter,)h(usually)f(`)p Ft(!)p Fu(',)g(m)m(ust)f(b)s(e)g(quoted)h(to)g(prev)m(en)m(t)g(history)g (expansion.)41 b(See)150 1237 y(Section)22 b(9.1)g([Bash)f(History)h(F) --8 b(acilities],)26 b(page)c(152,)j(for)20 b(more)h(details)h +-8 b(acilities],)26 b(page)c(159,)j(for)20 b(more)h(details)h (concerning)g(history)f(expansion.)275 1370 y(There)37 b(are)h(three)f(quoting)h(mec)m(hanisms:)56 b(the)38 b Fr(escap)s(e)g(c)m(haracter)p Fu(,)j(single)d(quotes,)i(and)d(double) @@ -8417,7 +8440,7 @@ b(quotes,)h(with)f(the)g(exception)h(of)f(`)p Ft($)p Fu(',)h(`)p Ft(`)p Fu(',)g(`)p Ft(\\)p Fu(',)g(and,)f(when)f(history)g (expansion)h(is)g(enabled,)h(`)p Ft(!)p Fu('.)150 3280 y(When)c(the)g(shell)g(is)g(in)f Fm(posix)h Fu(mo)s(de)f(\(see)i -(Section)g(6.11)g([Bash)f(POSIX)f(Mo)s(de],)i(page)g(106\),)h(the)e(`)p +(Section)g(6.11)g([Bash)f(POSIX)f(Mo)s(de],)i(page)g(109\),)h(the)e(`)p Ft(!)p Fu(')150 3390 y(has)d(no)g(sp)s(ecial)h(meaning)g(within)f (double)g(quotes,)h(ev)m(en)g(when)f(history)g(expansion)g(is)g (enabled.)40 b(The)150 3499 y(c)m(haracters)h(`)p Ft($)p @@ -8444,9 +8467,9 @@ b(sp)s(ecial)h(parameters)f(`)p Ft(*)p Fu(')h(and)f(`)p Ft(@)p Fu(')h(ha)m(v)m(e)g(sp)s(ecial)g(meaning)g(when)f(in)g(double)g (quotes)h(\(see)150 4509 y(Section)31 b(3.5.3)h([Shell)f(P)m(arameter)h (Expansion],)e(page)h(26\).)150 4707 y Fk(3.1.2.4)63 -b(ANSI-C)40 b(Quoting)150 4854 y Fu(Character)g(sequences)h(of)f(the)g -(form)g($')p Fr(string)8 b Fu(')40 b(are)h(treated)g(as)f(a)h(sp)s -(ecial)f(kind)f(of)i(single)f(quotes.)150 4963 y(The)e(sequence)i +b(ANSI-C)40 b(Quoting)150 4854 y Fu(Character)33 b(sequences)h(of)f +(the)g(form)g Ft($')p Fj(string)p Ft(')d Fu(are)k(treated)g(as)f(a)g +(sp)s(ecial)h(kind)e(of)h(single)h(quotes.)150 4963 y(The)k(sequence)i (expands)e(to)i Fr(string)p Fu(,)h(with)e(bac)m(kslash-escap)s(ed)h(c)m (haracters)g(in)f Fr(string)46 b Fu(replaced)40 b(as)150 5073 y(sp)s(eci\014ed)32 b(b)m(y)h(the)g(ANSI)f(C)h(standard.)47 @@ -8496,14 +8519,14 @@ b(See)36 b(the)h(gettext)i(do)s(cumen)m(tation)e(for)f(addi-)150 4430 y(tional)24 b(details)g(not)f(co)m(v)m(ered)i(here.)38 b(If)23 b(the)g(curren)m(t)f(lo)s(cale)j(is)e Ft(C)g Fu(or)g Ft(POSIX)p Fu(,)g(if)g(there)g(are)g(no)g(translations)150 -4540 y(a)m(v)-5 b(ailable,)32 b(of)c(if)h(the)f(string)h(is)g(not)f -(translated,)i(the)f(dollar)g(sign)f(is)h(ignored.)40 -b(Since)29 b(this)f(is)h(a)g(form)f(of)150 4650 y(double)d(quoting,)j +4540 y(a)m(v)-5 b(ailable,)31 b(or)d(if)g(the)h(string)f(is)g(not)g +(translated,)h(the)g(dollar)f(sign)g(is)g(ignored.)41 +b(Since)28 b(this)g(is)g(a)g(form)g(of)150 4650 y(double)d(quoting,)j (the)e(string)g(remains)f(double-quoted)h(b)m(y)g(default,)h(whether)e (or)h(not)g(it)g(is)g(translated)150 4759 y(and)i(replaced.)41 b(If)28 b(the)h Ft(noexpand_translation)23 b Fu(option)29 b(is)g(enabled)f(using)h(the)f Ft(shopt)g Fu(builtin)g(\(see)150 -4869 y(Section)33 b(4.3.2)h([The)e(Shopt)f(Builtin],)j(page)f(71\),)h +4869 y(Section)33 b(4.3.2)h([The)e(Shopt)f(Builtin],)j(page)f(73\),)h (translated)f(strings)e(are)i(single-quoted)g(instead)g(of)150 4978 y(double-quoted.)275 5121 y(The)39 b(rest)i(of)g(this)f(section)h (is)g(a)g(brief)f(o)m(v)m(erview)i(of)e(ho)m(w)h(y)m(ou)f(use)g @@ -8631,7 +8654,7 @@ b(a)i(non-in)m(teractiv)m(e)h(shell,)g(or)e(an)g(in)m(teractiv)m(e)j (shell)d(in)g(whic)m(h)g(the)g Ft(interactive_comments)16 b Fu(option)150 1645 y(to)40 b(the)f Ft(shopt)e Fu(builtin)h(is)h (enabled)g(\(see)h(Section)g(4.3.2)g([The)f(Shopt)f(Builtin],)k(page)e -(71\),)i(a)d(w)m(ord)150 1754 y(b)s(eginning)26 b(with)g(`)p +(73\),)i(a)d(w)m(ord)150 1754 y(b)s(eginning)26 b(with)g(`)p Ft(#)p Fu(')g(causes)h(that)f(w)m(ord)g(and)g(all)h(remaining)g(c)m (haracters)g(on)f(that)h(line)g(to)g(b)s(e)f(ignored.)150 1864 y(An)43 b(in)m(teractiv)m(e)j(shell)e(without)f(the)g @@ -8639,7 +8662,7 @@ Ft(interactive_comments)38 b Fu(option)44 b(enabled)f(do)s(es)g(not)g (allo)m(w)150 1973 y(commen)m(ts.)56 b(The)34 b Ft (interactive_comments)c Fu(option)35 b(is)g(on)g(b)m(y)g(default)g(in)g (in)m(teractiv)m(e)j(shells.)55 b(See)150 2083 y(Section)30 -b(6.3)f([In)m(teractiv)m(e)j(Shells],)d(page)h(94,)g(for)e(a)i +b(6.3)f([In)m(teractiv)m(e)j(Shells],)d(page)h(97,)g(for)e(a)i (description)e(of)h(what)g(mak)m(es)h(a)f(shell)g(in)m(teractiv)m(e.) 150 2316 y Fs(3.2)68 b(Shell)45 b(Commands)150 2476 y Fu(A)d(simple)g(shell)g(command)f(suc)m(h)h(as)g Ft(echo)29 @@ -8677,7 +8700,7 @@ y([De\014nitions],)37 b(page)e(3\).)54 b(The)35 b(\014rst)e(w)m(ord)i (generally)g(sp)s(eci\014es)g(a)g(command)f(to)h(b)s(e)f(executed,)j (with)150 4990 y(the)31 b(rest)f(of)h(the)f(w)m(ords)g(b)s(eing)g(that) h(command's)f(argumen)m(ts.)275 5121 y(The)h(return)h(status)g(\(see)i -(Section)f(3.7.5)h([Exit)f(Status],)h(page)f(44\))g(of)g(a)g(simple)f +(Section)f(3.7.5)h([Exit)f(Status],)h(page)f(45\))g(of)g(a)g(simple)f (command)g(is)h(its)150 5230 y(exit)38 b(status)f(as)g(pro)m(vided)f(b) m(y)h(the)g Fm(posix)f Fu(1003.1)j Ft(waitpid)c Fu(function,)j(or)f (128)p Ft(+)p Fr(n)g Fu(if)g(the)g(command)150 5340 y(w)m(as)31 @@ -8716,45 +8739,45 @@ b(The)31 b Ft(-p)f Fu(option)i(c)m(hanges)g(the)f(output)g(format)g(to) 150 2130 y(that)j(sp)s(eci\014ed)e(b)m(y)h Fm(posix)p Fu(.)49 b(When)33 b(the)g(shell)g(is)h(in)e Fm(posix)h Fu(mo)s(de)g(\(see)h(Section)g(6.11)g([Bash)g(POSIX)150 -2239 y(Mo)s(de],)j(page)e(106\),)j(it)e(do)s(es)e(not)i(recognize)g +2239 y(Mo)s(de],)j(page)e(109\),)j(it)e(do)s(es)e(not)i(recognize)g Ft(time)e Fu(as)h(a)h(reserv)m(ed)f(w)m(ord)f(if)h(the)g(next)g(tok)m (en)h(b)s(egins)150 2349 y(with)d(a)g(`)p Ft(-)p Fu('.)49 b(The)33 b Ft(TIMEFORMAT)d Fu(v)-5 b(ariable)34 b(ma)m(y)g(b)s(e)f(set) g(to)h(a)g(format)f(string)g(that)h(sp)s(eci\014es)f(ho)m(w)g(the)150 2458 y(timing)38 b(information)g(should)e(b)s(e)h(displa)m(y)m(ed.)62 b(See)38 b(Section)g(5.2)g([Bash)g(V)-8 b(ariables],)41 -b(page)d(78,)i(for)e(a)150 2568 y(description)27 b(of)g(the)h(a)m(v)-5 +b(page)d(81,)i(for)e(a)150 2568 y(description)27 b(of)g(the)h(a)m(v)-5 b(ailable)29 b(formats.)40 b(The)26 b(use)h(of)g Ft(time)f Fu(as)i(a)f(reserv)m(ed)g(w)m(ord)g(p)s(ermits)f(the)h(timing)150 2677 y(of)38 b(shell)g(builtins,)i(shell)e(functions,)i(and)d(pip)s (elines.)63 b(An)38 b(external)h Ft(time)e Fu(command)h(cannot)g(time) 150 2787 y(these)31 b(easily)-8 b(.)275 2927 y(When)26 b(the)h(shell)g(is)g(in)g Fm(posix)f Fu(mo)s(de)g(\(see)i(Section)f -(6.11)i([Bash)e(POSIX)f(Mo)s(de],)i(page)g(106\),)h Ft(time)150 -3036 y Fu(ma)m(y)d(b)s(e)f(follo)m(w)m(ed)j(b)m(y)d(a)h(newline.)39 -b(In)25 b(this)h(case,)i(the)d(shell)h(displa)m(ys)g(the)g(total)h -(user)e(and)g(system)h(time)150 3146 y(consumed)33 b(b)m(y)h(the)h -(shell)f(and)f(its)i(c)m(hildren.)51 b(The)34 b Ft(TIMEFORMAT)d -Fu(v)-5 b(ariable)35 b(ma)m(y)g(b)s(e)e(used)g(to)i(sp)s(ecify)150 -3255 y(the)c(format)f(of)h(the)f(time)h(information.)275 -3395 y(If)36 b(the)h(pip)s(eline)g(is)g(not)g(executed)h(async)m -(hronously)f(\(see)h(Section)g(3.2.4)g([Lists],)i(page)e(10\),)i(the) -150 3504 y(shell)31 b(w)m(aits)g(for)f(all)h(commands)f(in)g(the)h(pip) -s(eline)f(to)h(complete.)275 3644 y(Eac)m(h)d(command)g(in)f(a)i(m)m +(6.11)i([Bash)e(POSIX)f(Mo)s(de],)i(page)g(109\),)h Ft(time)150 +3036 y Fu(ma)m(y)38 b(b)s(e)f(follo)m(w)m(ed)i(b)m(y)f(a)g(newline.)62 +b(In)37 b(this)g(case,)k(the)c(shell)h(displa)m(ys)g(the)g(total)h +(user)e(and)g(system)150 3146 y(time)30 b(consumed)f(b)m(y)g(the)h +(shell)f(and)g(its)h(c)m(hildren.)40 b(The)29 b Ft(TIMEFORMAT)e +Fu(v)-5 b(ariable)30 b(sp)s(eci\014es)f(the)h(format)150 +3255 y(of)h(the)f(time)h(information.)275 3395 y(If)36 +b(the)h(pip)s(eline)g(is)g(not)g(executed)h(async)m(hronously)f(\(see)h +(Section)g(3.2.4)g([Lists],)i(page)e(10\),)i(the)150 +3504 y(shell)31 b(w)m(aits)g(for)f(all)h(commands)f(in)g(the)h(pip)s +(eline)f(to)h(complete.)275 3644 y(Eac)m(h)d(command)g(in)f(a)i(m)m (ulti-command)f(pip)s(eline,)h(where)e(pip)s(es)g(are)h(created,)i(is)e (executed)h(in)f(its)150 3753 y(o)m(wn)h Fr(subshell)p Fu(,)f(whic)m(h)h(is)g(a)g(separate)h(pro)s(cess)e(\(see)i(Section)g (3.7.3)g([Command)f(Execution)g(En)m(viron-)150 3863 -y(men)m(t],)d(page)e(43\).)40 b(If)23 b(the)h Ft(lastpipe)d +y(men)m(t],)d(page)e(44\).)40 b(If)23 b(the)h Ft(lastpipe)d Fu(option)j(is)g(enabled)g(using)f(the)h Ft(shopt)e Fu(builtin)h(\(see) -i(Section)f(4.3.2)150 3973 y([The)i(Shopt)f(Builtin],)i(page)g(71\),)h +i(Section)f(4.3.2)150 3973 y([The)i(Shopt)f(Builtin],)i(page)g(73\),)h (the)e(last)h(elemen)m(t)g(of)f(a)g(pip)s(eline)g(ma)m(y)g(b)s(e)f(run) g(b)m(y)g(the)h(shell)g(pro)s(cess)150 4082 y(when)j(job)h(con)m(trol)i (is)f(not)f(activ)m(e.)275 4222 y(The)24 b(exit)i(status)f(of)h(a)f (pip)s(eline)g(is)g(the)g(exit)h(status)f(of)h(the)f(last)h(command)f (in)f(the)i(pip)s(eline,)g(unless)150 4331 y(the)31 b Ft(pipefail)d Fu(option)j(is)g(enabled)f(\(see)i(Section)f(4.3.1)i -([The)d(Set)h(Builtin],)g(page)h(67\).)42 b(If)30 b Ft(pipefail)150 +([The)d(Set)h(Builtin],)g(page)h(69\).)42 b(If)30 b Ft(pipefail)150 4441 y Fu(is)f(enabled,)g(the)f(pip)s(eline's)g(return)g(status)h(is)f (the)h(v)-5 b(alue)29 b(of)f(the)h(last)g(\(righ)m(tmost\))i(command)d (to)h(exit)150 4550 y(with)34 b(a)h(non-zero)g(status,)i(or)d(zero)i @@ -8791,7 +8814,7 @@ g(as)h Fr(async)m(hronous)i Fu(commands.)78 b(The)43 b(shell)g(do)s(es)g(not)g(w)m(ait)h(for)f(the)150 1102 y(command)34 b(to)h(\014nish,)f(and)f(the)h(return)f(status)i(is)f(0)g (\(true\).)53 b(When)34 b(job)g(con)m(trol)h(is)f(not)h(activ)m(e)h -(\(see)150 1211 y(Chapter)27 b(7)h([Job)f(Con)m(trol],)i(page)g(113\),) +(\(see)150 1211 y(Chapter)27 b(7)h([Job)f(Con)m(trol],)i(page)g(118\),) h(the)d(standard)g(input)f(for)i(async)m(hronous)f(commands,)h(in)f (the)150 1321 y(absence)k(of)f(an)m(y)h(explicit)h(redirections,)f(is)f (redirected)h(from)f Ft(/dev/null)p Fu(.)275 1448 y(Commands)19 @@ -8822,7 +8845,7 @@ Fu(Comp)s(ound)29 b(commands)h(are)i(the)f(shell)g(programming)f (op)s(erator)f(and)g(is)g(terminated)g(b)m(y)g(a)g(corresp)s(onding)f (reserv)m(ed)150 3348 y(w)m(ord)i(or)g(op)s(erator.)40 b(An)m(y)26 b(redirections)g(\(see)i(Section)f(3.6)g([Redirections],)h -(page)f(38\))h(asso)s(ciated)f(with)150 3458 y(a)k(comp)s(ound)f +(page)f(39\))h(asso)s(ciated)f(with)150 3458 y(a)k(comp)s(ound)f (command)h(apply)f(to)i(all)g(commands)f(within)f(that)i(comp)s(ound)d (command)i(unless)f(ex-)150 3568 y(plicitly)i(o)m(v)m(erridden.)275 3695 y(In)20 b(most)h(cases)g(a)g(list)h(of)f(commands)f(in)g(a)h(comp) @@ -8883,8 +8906,8 @@ Fr(w)m(ords)p Fu(,)i(no)e(commands)g(are)g(executed,)j(and)d(the)630 Ft(;)i Fj(expr3)e Ft(\)\))h(;)h(do)f Fj(commands)e Ft(;)j(done)630 2437 y Fu(First,)38 b(the)f(arithmetic)h(expression)e Fr(expr1)43 b Fu(is)36 b(ev)-5 b(aluated)38 b(according)f(to)g(the)g -(rules)f(de-)630 2547 y(scrib)s(ed)41 b(b)s(elo)m(w)h(\(see)h(Section)g -(6.5)g([Shell)g(Arithmetic],)j(page)d(98\).)77 b(The)42 +(rules)f(de-)630 2547 y(scrib)s(ed)h(b)s(elo)m(w)i(\(see)g(Section)g +(6.5)h([Shell)e(Arithmetic],)k(page)d(101\).)67 b(The)38 b(arithmetic)630 2656 y(expression)33 b Fr(expr2)41 b Fu(is)34 b(then)f(ev)-5 b(aluated)35 b(rep)s(eatedly)f(un)m(til)g(it)g (ev)-5 b(aluates)35 b(to)g(zero.)51 b(Eac)m(h)630 2766 @@ -8898,7 +8921,7 @@ b(is)f(the)g(exit)h(status)g(of)f(the)g(last)h(command)f(in)630 3095 y Fr(commands)j Fu(that)d(is)f(executed,)i(or)e(false)h(if)f(an)m (y)h(of)g(the)f(expressions)g(is)h(in)m(v)-5 b(alid.)275 3262 y(The)26 b Ft(break)g Fu(and)h Ft(continue)e Fu(builtins)i(\(see)h -(Section)h(4.1)f([Bourne)g(Shell)f(Builtins],)i(page)f(48\))g(ma)m(y) +(Section)h(4.1)f([Bourne)g(Shell)f(Builtins],)i(page)f(49\))g(ma)m(y) 150 3372 y(b)s(e)i(used)f(to)i(con)m(trol)h(lo)s(op)f(execution.)150 3576 y Fk(3.2.5.2)63 b(Conditional)42 b(Constructs)150 3751 y Ft(if)384 b Fu(The)30 b(syn)m(tax)h(of)f(the)h @@ -8935,10 +8958,10 @@ Fu(corresp)s(onding)20 b(to)i(the)g(\014rst)f Fr(pattern)630 881 y Fu(that)h(matc)m(hes)h Fr(w)m(ord)p Fu(.)38 b(The)21 b(matc)m(h)h(is)g(p)s(erformed)e(according)j(to)f(the)g(rules)g (describ)s(ed)e(b)s(e-)630 990 y(lo)m(w)25 b(in)e(Section)i(3.5.8.1)h -([P)m(attern)f(Matc)m(hing],)i(page)e(36.)39 b(If)23 +([P)m(attern)f(Matc)m(hing],)i(page)e(37.)39 b(If)23 b(the)h Ft(nocasematch)d Fu(shell)j(op-)630 1100 y(tion)j(\(see)g(the)f (description)g(of)g Ft(shopt)f Fu(in)g(Section)i(4.3.2)h([The)e(Shopt)f -(Builtin],)j(page)f(71\))630 1209 y(is)40 b(enabled,)i(the)e(matc)m(h)h +(Builtin],)j(page)f(73\))630 1209 y(is)40 b(enabled,)i(the)e(matc)m(h)h (is)e(p)s(erformed)g(without)g(regard)h(to)h(the)f(case)g(of)g(alphab)s (etic)630 1319 y(c)m(haracters.)48 b(The)32 b(`)p Ft(|)p Fu(')g(is)h(used)e(to)i(separate)h(m)m(ultiple)f(patterns,)g(and)f(the) @@ -9032,21 +9055,21 @@ b(,)32 b(and)d(displa)m(ys)i(the)f(name)h(and)f(index)f(of)i(the)g 2642 y(\(\()h Fj(expression)e Ft(\)\))630 2777 y Fu(The)33 b(arithmetic)i Fr(expression)f Fu(is)f(ev)-5 b(aluated)35 b(according)g(to)f(the)g(rules)f(describ)s(ed)g(b)s(elo)m(w)630 -2887 y(\(see)22 b(Section)f(6.5)h([Shell)f(Arithmetic],)j(page)d(98\).) -39 b(The)20 b Fr(expression)h Fu(undergo)s(es)f(the)h(same)630 -2996 y(expansions)35 b(as)h(if)f(it)h(w)m(ere)g(within)f(double)f -(quotes,)k(but)d(double)f(quote)i(c)m(haracters)h(in)630 -3106 y Fr(expression)29 b Fu(are)h(not)f(treated)h(sp)s(ecially)g(are)g -(remo)m(v)m(ed.)41 b(If)29 b(the)h(v)-5 b(alue)29 b(of)h(the)f -(expression)630 3216 y(is)h(non-zero,)i(the)e(return)f(status)i(is)g -(0;)g(otherwise)f(the)h(return)e(status)i(is)f(1.)150 +2887 y(\(see)38 b(Section)g(6.5)h([Shell)e(Arithmetic],)j(page)f +(101\).)63 b(The)36 b Fr(expression)h Fu(undergo)s(es)g(the)630 +2996 y(same)26 b(expansions)f(as)g(if)g(it)h(w)m(ere)g(within)e(double) +h(quotes,)i(but)e(double)g(quote)g(c)m(haracters)630 +3106 y(in)20 b Fr(expression)h Fu(are)g(not)g(treated)h(sp)s(ecially)f +(are)g(remo)m(v)m(ed.)39 b(If)20 b(the)h(v)-5 b(alue)21 +b(of)g(the)g(expression)630 3216 y(is)30 b(non-zero,)i(the)e(return)f +(status)i(is)g(0;)g(otherwise)f(the)h(return)e(status)i(is)f(1.)150 3376 y Ft([[...)o(]])870 3511 y([[)47 b Fj(expression)e Ft(]])630 3646 y Fu(Return)25 b(a)h(status)f(of)h(0)g(or)g(1)g(dep)s (ending)e(on)h(the)h(ev)-5 b(aluation)27 b(of)e(the)h(conditional)h (expres-)630 3755 y(sion)j Fr(expression)p Fu(.)41 b(Expressions)29 b(are)i(comp)s(osed)f(of)g(the)h(primaries)f(describ)s(ed)f(b)s(elo)m (w)h(in)630 3865 y(Section)37 b(6.4)g([Bash)f(Conditional)h -(Expressions],)g(page)g(96.)58 b(The)36 b(w)m(ords)f(b)s(et)m(w)m(een)i +(Expressions],)g(page)g(99.)58 b(The)36 b(w)m(ords)f(b)s(et)m(w)m(een)i (the)630 3974 y Ft([[)h Fu(and)g Ft(]])g Fu(do)g(not)h(undergo)f(w)m (ord)g(splitting)h(and)f(\014lename)h(expansion.)65 b(The)38 b(shell)630 4084 y(p)s(erforms)26 b(tilde)j(expansion,)f(parameter)g @@ -9065,13 +9088,13 @@ b(the)h(`)p Ft(==)p Fu(')f(and)g(`)p Ft(!=)p Fu(')g(op)s(erators)h(are) g(used,)g(the)g(string)f(to)i(the)e(righ)m(t)h(of)g(the)g(op)s(erator) 630 5011 y(is)31 b(considered)g(a)h(pattern)f(and)g(matc)m(hed)h (according)g(to)g(the)g(rules)f(describ)s(ed)f(b)s(elo)m(w)h(in)630 -5121 y(Section)d(3.5.8.1)h([P)m(attern)f(Matc)m(hing],)h(page)f(36,)g +5121 y(Section)d(3.5.8.1)h([P)m(attern)f(Matc)m(hing],)h(page)f(37,)g (as)f(if)g(the)g Ft(extglob)d Fu(shell)j(option)g(w)m(ere)630 5230 y(enabled.)46 b(The)31 b(`)p Ft(=)p Fu(')h(op)s(erator)h(is)f (iden)m(tical)h(to)g(`)p Ft(==)p Fu('.)46 b(If)31 b(the)h Ft(nocasematch)d Fu(shell)j(option)630 5340 y(\(see)42 b(the)f(description)g(of)h Ft(shopt)d Fu(in)i(Section)h(4.3.2)h([The)e -(Shopt)f(Builtin],)45 b(page)d(71\))p eop end +(Shopt)f(Builtin],)45 b(page)d(73\))p eop end %%Page: 15 21 TeXDict begin 15 20 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(15)630 299 @@ -9102,7 +9125,7 @@ b(not.)66 b(If)38 b(the)h(regular)g(expression)g(is)g(syn)m(tactically) i(incorrect,)i(the)c(conditional)630 1757 y(expression)e(returns)e(2.) 61 b(If)37 b(the)g Ft(nocasematch)d Fu(shell)j(option)h(\(see)g(the)f (description)g(of)630 1867 y Ft(shopt)d Fu(in)h(Section)h(4.3.2)h([The) -e(Shopt)f(Builtin],)k(page)e(71\))g(is)g(enabled,)g(the)g(matc)m(h)g +e(Shopt)f(Builtin],)k(page)e(73\))g(is)g(enabled,)g(the)g(matc)m(h)g (is)630 1976 y(p)s(erformed)29 b(without)h(regard)h(to)g(the)f(case)i (of)e(alphab)s(etic)h(c)m(haracters.)630 2103 y(Y)-8 b(ou)23 b(can)g(quote)g(an)m(y)g(part)g(of)g(the)g(pattern)f(to)i @@ -9288,7 +9311,7 @@ b(example,)150 3861 y(the)f(output)f(of)g(all)h(the)g(commands)f(in)g 4272 y Fu(Placing)42 b(a)g(list)g(of)f(commands)g(b)s(et)m(w)m(een)h (paren)m(theses)f(forces)h(the)f(shell)h(to)g(create)h(a)630 4381 y(subshell)33 b(\(see)h(Section)g(3.7.3)i([Command)c(Execution)j -(En)m(vironmen)m(t],)g(page)f(43\),)i(and)630 4491 y(eac)m(h)g(of)f +(En)m(vironmen)m(t],)g(page)f(44\),)i(and)630 4491 y(eac)m(h)g(of)f (the)h(commands)e(in)h Fr(list)i Fu(is)e(executed)h(in)f(that)h (subshell)e(en)m(vironmen)m(t.)55 b(Since)630 4601 y(the)33 b Fr(list)j Fu(is)e(executed)g(in)f(a)g(subshell,)h(v)-5 @@ -9359,7 +9382,7 @@ Fu(is)35 b(not)f(allo)m(w)m(ed;)39 b(this)34 b(is)h(to)g(a)m(v)m(oid)h b(the)h(\014rst)150 3879 y(w)m(ord)30 b(of)h(the)f(simple)g(command.) 275 4007 y(When)42 b(the)i(copro)s(cess)f(is)g(executed,)48 b(the)43 b(shell)g(creates)i(an)e(arra)m(y)g(v)-5 b(ariable)44 -b(\(see)g(Section)g(6.7)150 4117 y([Arra)m(ys],)h(page)e(100\))g(named) +b(\(see)g(Section)g(6.7)150 4117 y([Arra)m(ys],)h(page)e(103\))g(named) e Fr(NAME)48 b Fu(in)41 b(the)h(con)m(text)h(of)f(the)g(executing)h (shell.)75 b(The)41 b(standard)150 4226 y(output)32 b(of)h Fr(command)i Fu(is)e(connected)g(via)g(a)g(pip)s(e)f(to)h(a)g(\014le)f @@ -9372,7 +9395,7 @@ Fr(command)j Fu(is)d(connected)150 4445 y(via)40 b(a)g(pip)s(e)f(to)h Fr(NAME)5 b Fu([1].)65 b(This)38 b(pip)s(e)f(is)h(established)g(b)s (efore)g(an)m(y)g(redirections)h(sp)s(eci\014ed)e(b)m(y)h(the)g (command)150 4664 y(\(see)33 b(Section)f(3.6)h([Redirections],)g(page)g -(38\).)45 b(The)31 b(\014le)h(descriptors)f(can)h(b)s(e)f(utilized)i +(39\).)45 b(The)31 b(\014le)h(descriptors)f(can)h(b)s(e)f(utilized)i (as)f(argumen)m(ts)150 4774 y(to)42 b(shell)g(commands)f(and)g (redirections)h(using)f(standard)g(w)m(ord)g(expansions.)74 b(Other)41 b(than)g(those)150 4884 y(created)27 b(to)g(execute)g @@ -9448,19 +9471,19 @@ b Fu(is)d(executed)150 3972 y(whenev)m(er)29 b Fr(fname)35 b Fu(is)29 b(sp)s(eci\014ed)g(as)g(the)h(name)f(of)h(a)f(simple)h (command.)40 b(When)29 b(the)h(shell)f(is)h(in)f Fm(posix)150 4082 y Fu(mo)s(de)i(\(see)h(Section)g(6.11)h([Bash)f(POSIX)e(Mo)s(de],) -i(page)g(106\),)i Fr(fname)i Fu(m)m(ust)31 b(b)s(e)g(a)h(v)-5 +i(page)g(109\),)i Fr(fname)i Fu(m)m(ust)31 b(b)s(e)g(a)h(v)-5 b(alid)31 b(shell)h(name)150 4192 y(and)h(ma)m(y)h(not)f(b)s(e)g(the)h (same)f(as)h(one)g(of)f(the)h(sp)s(ecial)g(builtins)e(\(see)j(Section)f -(4.4)g([Sp)s(ecial)g(Builtins],)150 4301 y(page)d(77\).)43 +(4.4)g([Sp)s(ecial)g(Builtins],)150 4301 y(page)d(80\).)43 b(In)29 b(default)i(mo)s(de,)g(a)f(function)h(name)f(can)h(b)s(e)f(an)m (y)h(unquoted)e(shell)i(w)m(ord)f(that)h(do)s(es)g(not)150 4411 y(con)m(tain)k(`)p Ft($)p Fu('.)52 b(An)m(y)34 b(redirections)g -(\(see)h(Section)g(3.6)g([Redirections],)h(page)f(38\))g(asso)s(ciated) +(\(see)h(Section)g(3.6)g([Redirections],)h(page)f(39\))g(asso)s(ciated) g(with)f(the)150 4520 y(shell)g(function)f(are)h(p)s(erformed)e(when)h (the)g(function)h(is)f(executed.)51 b(A)34 b(function)f(de\014nition)g (ma)m(y)i(b)s(e)150 4630 y(deleted)i(using)e(the)i Ft(-f)e Fu(option)i(to)f(the)h Ft(unset)d Fu(builtin)i(\(see)h(Section)g(4.1)g -([Bourne)f(Shell)g(Builtins],)150 4739 y(page)31 b(48\).)275 +([Bourne)f(Shell)g(Builtins],)150 4739 y(page)31 b(49\).)275 4875 y(The)26 b(exit)i(status)g(of)f(a)h(function)f(de\014nition)g(is)g (zero)h(unless)f(a)g(syn)m(tax)h(error)f(o)s(ccurs)g(or)g(a)h(readonly) 150 4985 y(function)k(with)f(the)i(same)f(name)g(already)h(exists.)46 @@ -9506,7 +9529,7 @@ Ft(set)f Fu(builtin,)i(\(in)f(whic)m(h)f(case)j(all)f(functions)e Fu(traps\),)j(and)e(the)h Ft(ERR)f Fu(trap)h(is)g(not)g(inherited)f (unless)g(the)h Ft(-o)c(errtrace)h Fu(shell)j(option)150 1806 y(has)h(b)s(een)f(enabled.)55 b(See)35 b(Section)h(4.1)g([Bourne)f -(Shell)g(Builtins],)i(page)f(48,)i(for)c(the)i(description)f(of)150 +(Shell)g(Builtins],)i(page)f(49,)i(for)c(the)i(description)f(of)150 1915 y(the)c Ft(trap)e Fu(builtin.)275 2066 y(The)38 b Ft(FUNCNEST)f Fu(v)-5 b(ariable,)42 b(if)d(set)h(to)g(a)g(n)m(umeric) f(v)-5 b(alue)39 b(greater)h(than)f(0,)j(de\014nes)d(a)g(maxim)m(um)150 @@ -9564,15 +9587,14 @@ b(scoping,)i(visible)e(v)-5 b(ariables)32 b(and)f(their)h(v)-5 b(alues)32 b(are)f(a)h(result)g(of)f(the)h(sequence)g(of)f(function)150 5011 y(calls)37 b(that)g(caused)g(execution)g(to)g(reac)m(h)g(the)g (curren)m(t)f(function.)58 b(The)36 b(v)-5 b(alue)36 -b(of)h(a)g(v)-5 b(ariable)37 b(that)g(a)150 5121 y(function)24 -b(sees)g(dep)s(ends)f(on)h(its)g(v)-5 b(alue)25 b(within)e(its)i -(caller,)i(if)d(an)m(y)-8 b(,)26 b(whether)e(that)g(caller)i(is)e(the)g -Ft(")p Fu(global)p Ft(")150 5230 y Fu(scop)s(e)41 b(or)g(another)g -(shell)g(function.)73 b(This)40 b(is)h(also)h(the)f(v)-5 -b(alue)41 b(that)h(a)f(lo)s(cal)i(v)-5 b(ariable)41 b(declaration)150 -5340 y Ft(")p Fu(shado)m(ws)p Ft(")p Fu(,)30 b(and)g(the)g(v)-5 -b(alue)31 b(that)g(is)f(restored)h(when)e(the)i(function)f(returns.)p -eop end +b(of)h(a)g(v)-5 b(ariable)37 b(that)g(a)150 5121 y(function)30 +b(sees)h(dep)s(ends)d(on)i(its)h(v)-5 b(alue)30 b(within)g(its)h +(caller,)h(if)e(an)m(y)-8 b(,)31 b(whether)f(that)g(caller)i(is)e(the)h +(global)150 5230 y(scop)s(e)41 b(or)g(another)g(shell)g(function.)73 +b(This)40 b(is)h(also)h(the)f(v)-5 b(alue)41 b(that)h(a)f(lo)s(cal)i(v) +-5 b(ariable)41 b(declaration)150 5340 y(shado)m(ws,)30 +b(and)g(the)h(v)-5 b(alue)31 b(that)f(is)h(restored)f(when)g(the)g +(function)g(returns.)p eop end %%Page: 21 27 TeXDict begin 21 26 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(21)275 299 @@ -9612,7 +9634,7 @@ b(ariable)32 b(at)g(a)g(previous)f(scop)s(e,)h(an)m(y)f(instance)i(of)e 3258 y(F)-8 b(unction)51 b(names)f(and)g(de\014nitions)g(ma)m(y)i(b)s (e)e(listed)h(with)f(the)h Ft(-f)f Fu(option)h(to)g(the)g Ft(declare)150 3368 y Fu(\()p Ft(typeset)p Fu(\))43 b(builtin)h -(command)g(\(see)h(Section)g(4.2)g([Bash)g(Builtins],)j(page)d(55\).)83 +(command)g(\(see)h(Section)g(4.2)g([Bash)g(Builtins],)j(page)d(57\).)83 b(The)44 b Ft(-F)f Fu(option)150 3477 y(to)e Ft(declare)e Fu(or)i Ft(typeset)e Fu(will)i(list)g(the)g(function)f(names)h(only)g (\(and)f(optionally)i(the)f(source)g(\014le)150 3587 @@ -9623,7 +9645,7 @@ g(pro)s(cesses)g(\(those)g(created)h(when)e(executing)i(a)f(separate)h (shell)f(in)m(v)m(o)s(cation\))150 3806 y(automatically)34 b(ha)m(v)m(e)e(them)e(de\014ned)g(with)g(the)h Ft(-f)f Fu(option)i(to)f(the)g Ft(export)e Fu(builtin)i(\(see)g(Section)h(4.1) -150 3916 y([Bourne)e(Shell)h(Builtins],)g(page)g(48\).)275 +150 3916 y([Bourne)e(Shell)h(Builtins],)g(page)g(49\).)275 4047 y(F)-8 b(unctions)33 b(ma)m(y)g(b)s(e)g(recursiv)m(e.)48 b(The)32 b Ft(FUNCNEST)f Fu(v)-5 b(ariable)34 b(ma)m(y)f(b)s(e)f(used)g (to)i(limit)g(the)f(depth)f(of)150 4157 y(the)27 b(function)f(call)i @@ -9641,7 +9663,7 @@ m(y)h(a)g Ft(name)p Fu(.)52 b(A)35 b(v)-5 b(ariable)150 Ft(attributes)p Fu(.)71 b(A)m(ttributes)42 b(are)f(assigned)h(using)f (the)g Ft(declare)150 4989 y Fu(builtin)29 b(command)g(\(see)h(the)g (description)f(of)g(the)h Ft(declare)d Fu(builtin)i(in)g(Section)h(4.2) -g([Bash)g(Builtins],)150 5099 y(page)h(55\).)275 5230 +g([Bash)g(Builtins],)150 5099 y(page)h(57\).)275 5230 y(A)d(parameter)h(is)g(set)g(if)f(it)h(has)f(b)s(een)g(assigned)h(a)g (v)-5 b(alue.)40 b(The)28 b(n)m(ull)h(string)f(is)h(a)g(v)-5 b(alid)28 b(v)-5 b(alue.)41 b(Once)150 5340 y(a)31 b(v)-5 @@ -9666,7 +9688,7 @@ Ft(integer)e Fu(attribute)i(set,)i(then)d Fr(v)-5 b(alue)42 b Fu(is)35 b(ev)-5 b(aluated)37 b(as)f(an)f(arithmetic)i(expression)f (ev)m(en)g(if)150 1082 y(the)i Ft($\(\(...)n(\)\))f Fu(expansion)g(is)g (not)h(used)e(\(see)j(Section)f(3.5.5)h([Arithmetic)f(Expansion],)h -(page)f(34\).)150 1191 y(W)-8 b(ord)26 b(splitting)h(and)e(\014lename)h +(page)f(35\).)150 1191 y(W)-8 b(ord)26 b(splitting)h(and)e(\014lename)h (expansion)g(are)g(not)h(p)s(erformed.)37 b(Assignmen)m(t)27 b(statemen)m(ts)g(ma)m(y)g(also)150 1301 y(app)s(ear)22 b(as)h(argumen)m(ts)g(to)h(the)f Ft(alias)p Fu(,)g Ft(declare)p @@ -9674,14 +9696,14 @@ Fu(,)f Ft(typeset)p Fu(,)h Ft(export)p Fu(,)g Ft(readonly)p Fu(,)f(and)g Ft(local)f Fu(builtin)150 1410 y(commands)31 b(\()p Fr(declaration)j Fu(commands\).)44 b(When)32 b(in)f Fm(posix)g Fu(mo)s(de)g(\(see)h(Section)h(6.11)g([Bash)f(POSIX)150 -1520 y(Mo)s(de],)h(page)f(106\),)i(these)e(builtins)f(ma)m(y)h(app)s +1520 y(Mo)s(de],)h(page)f(109\),)i(these)e(builtins)f(ma)m(y)h(app)s (ear)f(in)g(a)h(command)f(after)h(one)g(or)g(more)g(instances)g(of)150 1630 y(the)f Ft(command)d Fu(builtin)i(and)g(retain)h(these)f (assignmen)m(t)i(statemen)m(t)g(prop)s(erties.)275 1802 y(In)d(the)h(con)m(text)i(where)d(an)h(assignmen)m(t)h(statemen)m(t)h (is)e(assigning)g(a)h(v)-5 b(alue)30 b(to)h(a)f(shell)g(v)-5 b(ariable)31 b(or)150 1911 y(arra)m(y)k(index)f(\(see)h(Section)g(6.7)g -([Arra)m(ys],)h(page)f(100\),)i(the)e(`)p Ft(+=)p Fu(')f(op)s(erator)g +([Arra)m(ys],)h(page)f(103\),)i(the)e(`)p Ft(+=)p Fu(')f(op)s(erator)g (can)h(b)s(e)e(used)h(to)h(app)s(end)150 2021 y(to)h(or)g(add)e(to)j (the)e(v)-5 b(ariable's)36 b(previous)f(v)-5 b(alue.)57 b(This)34 b(includes)h(argumen)m(ts)h(to)g(builtin)f(commands)150 @@ -9695,7 +9717,7 @@ b(aluated)38 b(as)150 2350 y(an)28 b(arithmetic)h(expression)f(and)f b(alue,)30 b(whic)m(h)d(is)i(also)f(ev)-5 b(aluated.)150 2459 y(When)43 b(`)p Ft(+=)p Fu(')g(is)h(applied)f(to)h(an)f(arra)m(y)h (v)-5 b(ariable)44 b(using)f(comp)s(ound)e(assignmen)m(t)j(\(see)h -(Section)f(6.7)150 2569 y([Arra)m(ys],)g(page)d(100\),)k(the)c(v)-5 +(Section)f(6.7)150 2569 y([Arra)m(ys],)g(page)d(103\),)k(the)c(v)-5 b(ariable's)42 b(v)-5 b(alue)41 b(is)g(not)f(unset)h(\(as)g(it)g(is)g (when)e(using)h(`)p Ft(=)p Fu('\),)k(and)c(new)150 2679 y(v)-5 b(alues)27 b(are)g(app)s(ended)f(to)h(the)g(arra)m(y)h(b)s @@ -9709,7 +9731,7 @@ b Fr(v)-5 b(alue)32 b Fu(is)c(expanded)e(and)h(app)s(ended)e(to)j(the)f b(ariable)28 b(can)h(b)s(e)e(assigned)h(the)h Ft(nameref)d Fu(attribute)i(using)g(the)g Ft(-n)f Fu(option)i(to)g(the)f Ft(declare)e Fu(or)150 3180 y Ft(local)f Fu(builtin)h(commands)g(\(see) -i(Section)f(4.2)h([Bash)f(Builtins],)h(page)f(55\))h(to)f(create)i(a)e +i(Section)f(4.2)h([Bash)f(Builtins],)h(page)f(57\))h(to)f(create)i(a)e Fr(nameref)p Fu(,)g(or)g(a)150 3289 y(reference)f(to)g(another)f(v)-5 b(ariable.)40 b(This)24 b(allo)m(ws)j(v)-5 b(ariables)26 b(to)g(b)s(e)e(manipulated)h(indirectly)-8 b(.)40 b(Whenev)m(er)150 @@ -9745,7 +9767,7 @@ b(nameref)d(v)-5 b(ariables)36 b(can)g(reference)g(arra)m(y)g(v)-5 b(ariables)37 b(and)e(subscripted)f(arra)m(y)i(v)-5 b(ariables.)150 5121 y(Namerefs)36 b(can)f(b)s(e)g(unset)g(using)g(the)h Ft(-n)e Fu(option)i(to)g(the)g Ft(unset)e Fu(builtin)h(\(see)h(Section) -g(4.1)h([Bourne)150 5230 y(Shell)43 b(Builtins],)j(page)e(48\).)79 +g(4.1)h([Bourne)150 5230 y(Shell)43 b(Builtins],)j(page)e(49\).)79 b(Otherwise,)45 b(if)e Ft(unset)e Fu(is)i(executed)h(with)e(the)h(name) g(of)g(a)g(nameref)150 5340 y(v)-5 b(ariable)31 b(as)g(an)f(argumen)m (t,)h(the)g(v)-5 b(ariable)31 b(referenced)f(b)m(y)g(the)h(nameref)f(v) @@ -9768,7 +9790,7 @@ b(parameters)d(ma)m(y)150 884 y(not)j(b)s(e)f(assigned)h(to)g(with)f (assignmen)m(t)i(statemen)m(ts.)61 b(The)36 b Ft(set)g Fu(and)g Ft(shift)f Fu(builtins)h(are)h(used)f(to)150 994 y(set)k(and)f(unset)f(them)i(\(see)g(Chapter)f(4)g([Shell)h -(Builtin)g(Commands],)h(page)f(48\).)68 b(The)39 b(p)s(ositional)150 +(Builtin)g(Commands],)h(page)f(49\).)68 b(The)39 b(p)s(ositional)150 1103 y(parameters)44 b(are)g(temp)s(orarily)g(replaced)h(when)e(a)h (shell)g(function)g(is)g(executed)g(\(see)h(Section)g(3.3)150 1213 y([Shell)30 b(F)-8 b(unctions],)32 b(page)f(19\).)275 @@ -9843,63 +9865,63 @@ Fm(id)h Fu(of)f(the)h(job)f(most)h(recen)m(tly)h(placed)f(in)m(to)g (the)g(bac)m(k-)630 408 y(ground,)26 b(whether)g(executed)g(as)h(an)f (async)m(hronous)f(command)h(or)g(using)g(the)g Ft(bg)f Fu(builtin)630 518 y(\(see)31 b(Section)h(7.2)f([Job)f(Con)m(trol)h -(Builtins],)g(page)h(114\).)150 675 y Ft(0)432 b Fu(\($0\))46 +(Builtins],)g(page)h(119\).)150 675 y Ft(0)432 b Fu(\($0\))46 b(Expands)d(to)i(the)g(name)g(of)f(the)h(shell)g(or)f(shell)h(script.) 83 b(This)44 b(is)g(set)h(at)h(shell)630 785 y(initialization.)d(If)27 b(Bash)h(is)g(in)m(v)m(ok)m(ed)h(with)e(a)i(\014le)e(of)h(commands)g -(\(see)g(Section)h(3.8)g([Shell)630 894 y(Scripts],)g(page)g(46\),)h +(\(see)g(Section)h(3.8)g([Shell)630 894 y(Scripts],)g(page)g(47\),)h Ft($0)e Fu(is)h(set)g(to)g(the)f(name)h(of)f(that)h(\014le.)41 b(If)28 b(Bash)g(is)h(started)g(with)f(the)630 1004 y Ft(-c)i Fu(option)h(\(see)h(Section)g(6.1)f([In)m(v)m(oking)h(Bash],)g -(page)f(91\),)i(then)d Ft($0)g Fu(is)h(set)g(to)h(the)f(\014rst)630 +(page)f(94\),)i(then)d Ft($0)g Fu(is)h(set)g(to)h(the)f(\014rst)630 1113 y(argumen)m(t)g(after)g(the)g(string)g(to)g(b)s(e)f(executed,)i (if)f(one)g(is)f(presen)m(t.)42 b(Otherwise,)31 b(it)g(is)f(set)630 1223 y(to)h(the)g(\014lename)f(used)g(to)h(in)m(v)m(ok)m(e)h(Bash,)f (as)g(giv)m(en)g(b)m(y)f(argumen)m(t)h(zero.)150 1461 -y Fs(3.5)68 b(Shell)45 b(Expansions)150 1621 y Fu(Expansion)27 +y Fs(3.5)68 b(Shell)45 b(Expansions)150 1621 y Fu(Expansion)39 b(is)i(p)s(erformed)d(on)i(the)g(command)g(line)h(after)f(it)h(has)f(b) -s(een)f(split)h(in)m(to)i Ft(token)p Fu(s.)38 b(There)28 -b(are)150 1730 y(sev)m(en)j(kinds)e(of)i(expansion)f(p)s(erformed:)225 -1863 y Fq(\017)60 b Fu(brace)31 b(expansion)225 1997 -y Fq(\017)60 b Fu(tilde)31 b(expansion)225 2130 y Fq(\017)60 -b Fu(parameter)31 b(and)f(v)-5 b(ariable)31 b(expansion)225 -2263 y Fq(\017)60 b Fu(command)30 b(substitution)225 -2396 y Fq(\017)60 b Fu(arithmetic)32 b(expansion)225 -2529 y Fq(\017)60 b Fu(w)m(ord)30 b(splitting)225 2663 -y Fq(\017)60 b Fu(\014lename)31 b(expansion)275 2820 -y(The)24 b(order)h(of)h(expansions)f(is:)39 b(brace)25 -b(expansion;)j(tilde)e(expansion,)g(parameter)g(and)f(v)-5 -b(ariable)26 b(ex-)150 2929 y(pansion,)j(arithmetic)i(expansion,)f(and) +s(een)f(split)h(in)m(to)h Ft(token)p Fu(s.)69 b(Bash)150 +1730 y(p)s(erforms)29 b(these)i(expansions:)225 1863 +y Fq(\017)60 b Fu(brace)31 b(expansion)225 1997 y Fq(\017)60 +b Fu(tilde)31 b(expansion)225 2130 y Fq(\017)60 b Fu(parameter)31 +b(and)f(v)-5 b(ariable)31 b(expansion)225 2263 y Fq(\017)60 +b Fu(command)30 b(substitution)225 2396 y Fq(\017)60 +b Fu(arithmetic)32 b(expansion)225 2529 y Fq(\017)60 +b Fu(w)m(ord)30 b(splitting)225 2663 y Fq(\017)60 b Fu(\014lename)31 +b(expansion)225 2796 y Fq(\017)60 b Fu(quote)31 b(remo)m(v)-5 +b(al)275 2953 y(The)24 b(order)h(of)h(expansions)f(is:)39 +b(brace)25 b(expansion;)j(tilde)e(expansion,)g(parameter)g(and)f(v)-5 +b(ariable)26 b(ex-)150 3062 y(pansion,)j(arithmetic)i(expansion,)f(and) f(command)g(substitution)g(\(done)g(in)h(a)f(left-to-righ)m(t)k -(fashion\);)150 3039 y(w)m(ord)d(splitting;)h(and)f(\014lename)h -(expansion.)275 3172 y(On)c(systems)h(that)h(can)g(supp)s(ort)e(it,)i -(there)g(is)f(an)g(additional)i(expansion)e(a)m(v)-5 -b(ailable:)42 b Fr(pro)s(cess)28 b(sub-)150 3282 y(stitution)p -Fu(.)42 b(This)30 b(is)g(p)s(erformed)f(at)j(the)e(same)h(time)h(as)e -(tilde,)i(parameter,)f(v)-5 b(ariable,)32 b(and)e(arithmetic)150 -3391 y(expansion)g(and)g(command)g(substitution.)275 -3524 y(After)g(these)h(expansions)f(are)g(p)s(erformed,)f(quote)i(c)m -(haracters)h(presen)m(t)e(in)g(the)g(original)i(w)m(ord)e(are)150 -3634 y(remo)m(v)m(ed)h(unless)f(they)h(ha)m(v)m(e)g(b)s(een)f(quoted)g -(themselv)m(es)i(\()p Fr(quote)f(remo)m(v)-5 b(al)t Fu(\).)275 -3767 y(Only)31 b(brace)i(expansion,)h(w)m(ord)e(splitting,)i(and)e +(fashion\);)150 3172 y(w)m(ord)d(splitting;)h(\014lename)g(expansion;)f +(and)g(quote)h(remo)m(v)-5 b(al.)275 3305 y(On)27 b(systems)h(that)h +(can)g(supp)s(ort)e(it,)i(there)g(is)f(an)g(additional)i(expansion)e(a) +m(v)-5 b(ailable:)42 b Fr(pro)s(cess)28 b(sub-)150 3415 +y(stitution)p Fu(.)42 b(This)30 b(is)g(p)s(erformed)f(at)j(the)e(same)h +(time)h(as)e(tilde,)i(parameter,)f(v)-5 b(ariable,)32 +b(and)e(arithmetic)150 3524 y(expansion)g(and)g(command)g +(substitution.)275 3658 y Fr(Quote)42 b(remo)m(v)-5 b(al)46 +b Fu(is)c(alw)m(a)m(ys)h(p)s(erformed)d(last.)76 b(It)42 +b(remo)m(v)m(es)h(quote)f(c)m(haracters)i(presen)m(t)d(in)h(the)150 +3767 y(original)35 b(w)m(ord,)g(not)f(ones)g(resulting)h(from)e(one)h +(of)h(the)f(other)g(expansions,)h(unless)e(they)h(ha)m(v)m(e)i(b)s(een) +150 3877 y(quoted)31 b(themselv)m(es.)41 b(See)31 b(Section)g(3.5.9)h +([Quote)f(Remo)m(v)-5 b(al],)33 b(page)e(39,)g(for)g(more)f(details.) +275 4010 y(Only)h(brace)i(expansion,)h(w)m(ord)e(splitting,)i(and)e (\014lename)h(expansion)f(can)h(increase)g(the)g(n)m(um)m(b)s(er)150 -3877 y(of)24 b(w)m(ords)g(of)g(the)h(expansion;)h(other)e(expansions)g +4120 y(of)24 b(w)m(ords)g(of)g(the)h(expansion;)h(other)e(expansions)g (expand)g(a)g(single)h(w)m(ord)f(to)h(a)f(single)h(w)m(ord.)38 -b(The)24 b(only)150 3986 y(exceptions)i(to)f(this)g(are)g(the)g +b(The)24 b(only)150 4229 y(exceptions)i(to)f(this)g(are)g(the)g (expansions)g(of)g Ft("$@")f Fu(and)g Ft($*)g Fu(\(see)i(Section)f -(3.4.2)i([Sp)s(ecial)e(P)m(arameters],)150 4096 y(page)31 +(3.4.2)i([Sp)s(ecial)e(P)m(arameters],)150 4339 y(page)31 b(23\),)h(and)e Ft("${)p Fj(name)p Ft([@]}")d Fu(and)i Ft(${)p Fj(name)p Ft([*]})f Fu(\(see)j(Section)h(6.7)f([Arra)m(ys],)g -(page)g(100\).)275 4229 y(After)41 b(all)i(expansions,)h -Ft(quote)29 b(removal)40 b Fu(\(see)i(Section)h(3.5.9)g([Quote)f(Remo)m -(v)-5 b(al],)47 b(page)42 b(38\))h(is)150 4339 y(p)s(erformed.)150 -4535 y Fk(3.5.1)63 b(Brace)40 b(Expansion)150 4682 y -Fu(Brace)32 b(expansion)f(is)f(a)i(mec)m(hanism)f(b)m(y)f(whic)m(h)h -(arbitrary)f(strings)h(ma)m(y)g(b)s(e)f(generated.)43 +(page)g(103\).)150 4535 y Fk(3.5.1)63 b(Brace)40 b(Expansion)150 +4682 y Fu(Brace)32 b(expansion)f(is)f(a)i(mec)m(hanism)f(b)m(y)f(whic)m +(h)h(arbitrary)f(strings)h(ma)m(y)g(b)s(e)f(generated.)43 b(This)30 b(mec)m(h-)150 4792 y(anism)35 b(is)h(similar)f(to)h Fr(\014lename)g(expansion)f Fu(\(see)i(Section)f(3.5.8)h([Filename)g -(Expansion],)f(page)g(35\),)150 4902 y(but)26 b(the)h(\014lenames)g +(Expansion],)f(page)g(36\),)150 4902 y(but)26 b(the)h(\014lenames)g (generated)h(need)f(not)g(exist.)40 b(P)m(atterns)28 b(to)f(b)s(e)g(brace)g(expanded)f(tak)m(e)i(the)f(form)g(of)150 5011 y(an)j(optional)h Fr(pream)m(ble)p Fu(,)g(follo)m(w)m(ed)g(b)m(y)f @@ -9917,78 +9939,75 @@ b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(25)275 299 y(Brace)37 b(expansions)f(ma)m(y)h(b)s(e)f(nested.)59 b(The)36 b(results)g(of)h(eac)m(h)g(expanded)f(string)g(are)h(not)g (sorted;)150 408 y(left)31 b(to)g(righ)m(t)g(order)f(is)g(preserv)m -(ed.)41 b(F)-8 b(or)31 b(example,)390 537 y Ft(bash$)46 -b(echo)h(a{d,c,b}e)390 647 y(ade)g(ace)g(abe)275 776 +(ed.)41 b(F)-8 b(or)31 b(example,)390 546 y Ft(bash$)46 +b(echo)h(a{d,c,b}e)390 656 y(ade)g(ace)g(abe)275 793 y Fu(A)23 b(sequence)g(expression)g(tak)m(es)i(the)e(form)g Ft({)p Fj(x)p Ft(..)p Fj(y)p Ft([..)p Fj(incr)p Ft(]})p Fu(,)e(where)i Fr(x)29 b Fu(and)23 b Fr(y)30 b Fu(are)24 -b(either)g(in)m(tegers)150 886 y(or)34 b(letters,)i(and)d +b(either)g(in)m(tegers)150 903 y(or)34 b(letters,)i(and)d Fr(incr)p Fu(,)h(an)g(optional)g(incremen)m(t,)i(is)d(an)h(in)m(teger.) 52 b(When)33 b(in)m(tegers)i(are)f(supplied,)g(the)150 -995 y(expression)f(expands)f(to)i(eac)m(h)g(n)m(um)m(b)s(er)e(b)s(et)m -(w)m(een)i Fr(x)39 b Fu(and)33 b Fr(y)p Fu(,)h(inclusiv)m(e.)50 -b(Supplied)31 b(in)m(tegers)k(ma)m(y)f(b)s(e)150 1105 -y(pre\014xed)h(with)h(`)p Ft(0)p Fu(')g(to)h(force)g(eac)m(h)h(term)e -(to)h(ha)m(v)m(e)g(the)g(same)g(width.)57 b(When)36 b(either)h -Fr(x)42 b Fu(or)37 b Fr(y)43 b Fu(b)s(egins)150 1214 -y(with)37 b(a)h(zero,)j(the)c(shell)h(attempts)h(to)f(force)g(all)g +1012 y(expression)29 b(expands)g(to)h(eac)m(h)h(n)m(um)m(b)s(er)d(b)s +(et)m(w)m(een)i Fr(x)36 b Fu(and)29 b Fr(y)p Fu(,)h(inclusiv)m(e.)41 +b(When)29 b(either)h Fr(x)36 b Fu(or)29 b Fr(y)37 b Fu(b)s(egins)150 +1122 y(with)g(a)h(zero,)j(the)c(shell)h(attempts)h(to)f(force)g(all)g (generated)h(terms)e(to)i(con)m(tain)g(the)e(same)h(n)m(um)m(b)s(er)150 -1324 y(of)30 b(digits,)h(zero-padding)f(where)f(necessary)-8 +1232 y(of)30 b(digits,)h(zero-padding)f(where)f(necessary)-8 b(.)41 b(When)30 b(letters)g(are)h(supplied,)d(the)i(expression)g -(expands)150 1433 y(to)k(eac)m(h)g(c)m(haracter)h(lexicographically)h +(expands)150 1341 y(to)k(eac)m(h)g(c)m(haracter)h(lexicographically)h (b)s(et)m(w)m(een)e Fr(x)40 b Fu(and)32 b Fr(y)p Fu(,)i(inclusiv)m(e,)i -(using)c(the)i(default)f(C)g(lo)s(cale.)150 1543 y(Note)f(that)f(b)s +(using)c(the)i(default)f(C)g(lo)s(cale.)150 1451 y(Note)f(that)f(b)s (oth)f Fr(x)37 b Fu(and)30 b Fr(y)38 b Fu(m)m(ust)31 b(b)s(e)f(of)h(the)g(same)g(t)m(yp)s(e)g(\(in)m(teger)h(or)f(letter\).) -43 b(When)30 b(the)h(incremen)m(t)150 1653 y(is)e(supplied,)g(it)h(is)f +43 b(When)30 b(the)h(incremen)m(t)150 1560 y(is)e(supplied,)g(it)h(is)f (used)f(as)i(the)f(di\013erence)h(b)s(et)m(w)m(een)g(eac)m(h)g(term.)41 b(The)29 b(default)g(incremen)m(t)h(is)f(1)h(or)f(-1)150 -1762 y(as)i(appropriate.)275 1891 y(Brace)36 b(expansion)g(is)f(p)s +1670 y(as)i(appropriate.)275 1808 y(Brace)36 b(expansion)g(is)f(p)s (erformed)f(b)s(efore)h(an)m(y)h(other)g(expansions,)h(and)e(an)m(y)g -(c)m(haracters)i(sp)s(ecial)150 2001 y(to)32 b(other)g(expansions)g +(c)m(haracters)i(sp)s(ecial)150 1917 y(to)32 b(other)g(expansions)g (are)g(preserv)m(ed)f(in)h(the)f(result.)45 b(It)32 b(is)g(strictly)g -(textual.)46 b(Bash)32 b(do)s(es)f(not)h(apply)150 2110 +(textual.)46 b(Bash)32 b(do)s(es)f(not)h(apply)150 2027 y(an)m(y)27 b(syn)m(tactic)i(in)m(terpretation)g(to)f(the)f(con)m(text) i(of)e(the)g(expansion)g(or)g(the)h(text)g(b)s(et)m(w)m(een)f(the)h -(braces.)275 2239 y(A)h(correctly-formed)i(brace)f(expansion)f(m)m(ust) +(braces.)275 2164 y(A)h(correctly-formed)i(brace)f(expansion)f(m)m(ust) h(con)m(tain)h(unquoted)e(op)s(ening)g(and)g(closing)i(braces,)150 -2349 y(and)h(at)i(least)g(one)f(unquoted)g(comma)g(or)g(a)h(v)-5 +2274 y(and)h(at)i(least)g(one)f(unquoted)g(comma)g(or)g(a)h(v)-5 b(alid)33 b(sequence)g(expression.)48 b(An)m(y)33 b(incorrectly)h -(formed)150 2458 y(brace)d(expansion)f(is)g(left)h(unc)m(hanged.)275 -2587 y(A)25 b Fi({)h Fu(or)f(`)p Ft(,)p Fu(')g(ma)m(y)h(b)s(e)f(quoted) +(formed)150 2384 y(brace)d(expansion)f(is)g(left)h(unc)m(hanged.)275 +2521 y(A)25 b Fi({)h Fu(or)f(`)p Ft(,)p Fu(')g(ma)m(y)h(b)s(e)f(quoted) h(with)f(a)g(bac)m(kslash)h(to)g(prev)m(en)m(t)g(its)g(b)s(eing)f -(considered)g(part)g(of)h(a)g(brace)150 2697 y(expression.)51 +(considered)g(part)g(of)h(a)g(brace)150 2631 y(expression.)51 b(T)-8 b(o)34 b(a)m(v)m(oid)i(con\015icts)e(with)g(parameter)g (expansion,)h(the)f(string)g(`)p Ft(${)p Fu(')g(is)g(not)g(considered) -150 2807 y(eligible)e(for)e(brace)h(expansion,)f(and)g(inhibits)g +150 2740 y(eligible)e(for)e(brace)h(expansion,)f(and)g(inhibits)g (brace)h(expansion)f(un)m(til)g(the)h(closing)h(`)p Ft(})p -Fu('.)275 2936 y(This)e(construct)h(is)g(t)m(ypically)i(used)d(as)h +Fu('.)275 2878 y(This)e(construct)h(is)g(t)m(ypically)i(used)d(as)h (shorthand)f(when)g(the)h(common)g(pre\014x)f(of)h(the)g(strings)g(to) -150 3045 y(b)s(e)f(generated)h(is)g(longer)g(than)f(in)g(the)g(ab)s(o)m -(v)m(e)i(example:)390 3174 y Ft(mkdir)46 b(/usr/local/src/bash/{old,n)o -(ew,)o(dist)o(,bug)o(s})275 3303 y Fu(or)390 3432 y Ft(chown)g(root)h +150 2988 y(b)s(e)f(generated)h(is)g(longer)g(than)f(in)g(the)g(ab)s(o)m +(v)m(e)i(example:)390 3125 y Ft(mkdir)46 b(/usr/local/src/bash/{old,n)o +(ew,)o(dist)o(,bug)o(s})275 3263 y Fu(or)390 3400 y Ft(chown)g(root)h (/usr/{ucb/{ex,edit},lib/)o({ex?)o(.?*,)o(how)o(_ex})o(})150 -3620 y Fk(3.5.2)63 b(Tilde)41 b(Expansion)150 3767 y +3603 y Fk(3.5.2)63 b(Tilde)41 b(Expansion)150 3750 y Fu(If)29 b(a)h(w)m(ord)g(b)s(egins)f(with)g(an)h(unquoted)f(tilde)h(c)m (haracter)h(\(`)p Ft(~)p Fu('\),)g(all)g(of)f(the)g(c)m(haracters)h(up) -d(to)j(the)f(\014rst)150 3877 y(unquoted)24 b(slash)g(\(or)h(all)h(c)m +d(to)j(the)f(\014rst)150 3859 y(unquoted)24 b(slash)g(\(or)h(all)h(c)m (haracters,)h(if)e(there)g(is)f(no)h(unquoted)e(slash\))i(are)g -(considered)g(a)g Fr(tilde-pre\014x)p Fu(.)150 3986 y(If)38 +(considered)g(a)g Fr(tilde-pre\014x)p Fu(.)150 3969 y(If)38 b(none)g(of)g(the)h(c)m(haracters)g(in)f(the)h(tilde-pre\014x)f(are)h (quoted,)h(the)f(c)m(haracters)h(in)d(the)i(tilde-pre\014x)150 -4096 y(follo)m(wing)28 b(the)g(tilde)f(are)h(treated)g(as)f(a)g(p)s +4078 y(follo)m(wing)28 b(the)g(tilde)f(are)h(treated)g(as)f(a)g(p)s (ossible)g Fr(login)h(name)p Fu(.)39 b(If)27 b(this)g(login)h(name)f -(is)g(the)g(n)m(ull)g(string,)150 4205 y(the)35 b(tilde)g(is)g +(is)g(the)g(n)m(ull)g(string,)150 4188 y(the)35 b(tilde)g(is)g (replaced)g(with)f(the)h(v)-5 b(alue)35 b(of)g(the)g Ft(HOME)e Fu(shell)i(v)-5 b(ariable.)54 b(If)34 b Ft(HOME)g -Fu(is)h(unset,)g(the)g(home)150 4315 y(directory)e(of)g(the)f(user)g +Fu(is)h(unset,)g(the)g(home)150 4298 y(directory)e(of)g(the)f(user)g (executing)i(the)e(shell)h(is)f(substituted)g(instead.)47 -b(Otherwise,)33 b(the)g(tilde-pre\014x)150 4425 y(is)d(replaced)h(with) +b(Otherwise,)33 b(the)g(tilde-pre\014x)150 4407 y(is)d(replaced)h(with) f(the)h(home)f(directory)h(asso)s(ciated)h(with)e(the)h(sp)s(eci\014ed) -e(login)j(name.)275 4554 y(If)g(the)h(tilde-pre\014x)f(is)h(`)p +e(login)j(name.)275 4545 y(If)g(the)h(tilde-pre\014x)f(is)h(`)p Ft(~+)p Fu(',)g(the)g(v)-5 b(alue)33 b(of)g(the)g(shell)g(v)-5 b(ariable)34 b Ft(PWD)d Fu(replaces)j(the)f(tilde-pre\014x.)47 -b(If)150 4663 y(the)31 b(tilde-pre\014x)f(is)g(`)p Ft(~-)p +b(If)150 4654 y(the)31 b(tilde-pre\014x)f(is)g(`)p Ft(~-)p Fu(',)h(the)f(v)-5 b(alue)31 b(of)g(the)f(shell)h(v)-5 b(ariable)31 b Ft(OLDPWD)p Fu(,)e(if)h(it)h(is)g(set,)g(is)f (substituted.)275 4792 y(If)f(the)h(c)m(haracters)h(follo)m(wing)h(the) @@ -10001,7 +10020,7 @@ g(w)m(ould)f(b)s(e)g(displa)m(y)m(ed)h(b)m(y)g(the)f Ft(dirs)g Fu(builtin)g(in)m(v)m(ok)m(ed)i(with)e(the)g(c)m(haracters) 150 5121 y(follo)m(wing)40 b(tilde)f(in)g(the)f(tilde-pre\014x)h(as)g (an)f(argumen)m(t)h(\(see)h(Section)f(6.8)h([The)e(Directory)i(Stac)m -(k],)150 5230 y(page)34 b(102\).)50 b(If)32 b(the)h(tilde-pre\014x,)h +(k],)150 5230 y(page)34 b(105\).)50 b(If)32 b(the)h(tilde-pre\014x,)h (sans)e(the)h(tilde,)i(consists)e(of)g(a)h(n)m(um)m(b)s(er)d(without)i (a)g(leading)h(`)p Ft(+)p Fu(')f(or)150 5340 y(`)p Ft(-)p Fu(',)e(`)p Ft(+)p Fu(')f(is)h(assumed.)p eop end @@ -10060,7 +10079,7 @@ b(alue)42 b(of)g Fr(parameter)48 b Fu(is)150 4105 y(substituted.)43 b(The)31 b Fr(parameter)39 b Fu(is)31 b(a)h(shell)f(parameter)h(as)g (describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)f(Section)g(3.4)h([Shell)150 4215 y(P)m(arameters],)28 b(page)f(21\))g(or)f(an)f(arra)m(y)h -(reference)h(\(see)f(Section)h(6.7)g([Arra)m(ys],)g(page)g(100\).)41 +(reference)h(\(see)f(Section)h(6.7)g([Arra)m(ys],)g(page)g(103\).)41 b(The)25 b(braces)150 4325 y(are)32 b(required)g(when)f Fr(parameter)39 b Fu(is)32 b(a)h(p)s(ositional)f(parameter)h(with)f (more)g(than)g(one)g(digit,)i(or)e(when)150 4434 y Fr(parameter)37 @@ -10093,583 +10112,652 @@ b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(27)150 299 y(describ)s(ed)28 b(b)s(elo)m(w.)41 b(The)28 b(exclamation)j(p)s(oin)m (t)f(m)m(ust)f(immediately)h(follo)m(w)g(the)g(left)f(brace)h(in)f (order)f(to)150 408 y(in)m(tro)s(duce)i(indirection.)275 -547 y(In)39 b(eac)m(h)i(of)g(the)f(cases)h(b)s(elo)m(w,)i +542 y(In)39 b(eac)m(h)i(of)g(the)f(cases)h(b)s(elo)m(w,)i Fr(w)m(ord)h Fu(is)c(sub)5 b(ject)40 b(to)h(tilde)f(expansion,)j -(parameter)e(expansion,)150 657 y(command)30 b(substitution,)g(and)g -(arithmetic)i(expansion.)275 795 y(When)h(not)h(p)s(erforming)e -(substring)h(expansion,)h(using)g(the)f(form)h(describ)s(ed)e(b)s(elo)m -(w)i(\(e.g.,)i(`)p Ft(:-)p Fu('\),)150 905 y(Bash)d(tests)h(for)e(a)i +(parameter)e(expansion,)150 651 y(command)30 b(substitution,)g(and)g +(arithmetic)i(expansion.)275 784 y(When)e(not)h(p)s(erforming)e +(substring)g(expansion,)i(using)f(the)h(forms)f(describ)s(ed)f(b)s(elo) +m(w)i(\(e.g.,)h(`)p Ft(:-)p Fu('\),)150 894 y(Bash)h(tests)h(for)e(a)i (parameter)f(that)h(is)e(unset)h(or)g(n)m(ull.)48 b(Omitting)33 -b(the)h(colon)f(results)g(in)g(a)g(test)h(only)150 1015 +b(the)h(colon)f(results)g(in)g(a)g(test)h(only)150 1003 y(for)c(a)i(parameter)f(that)g(is)g(unset.)41 b(Put)31 b(another)f(w)m(a)m(y)-8 b(,)33 b(if)e(the)f(colon)i(is)f(included,)f -(the)h(op)s(erator)g(tests)150 1124 y(for)36 b(b)s(oth)g +(the)h(op)s(erator)g(tests)150 1113 y(for)36 b(b)s(oth)g Fr(parameter)7 b Fu('s)37 b(existence)h(and)e(that)i(its)f(v)-5 b(alue)37 b(is)g(not)f(n)m(ull;)k(if)d(the)g(colon)h(is)e(omitted,)k -(the)150 1234 y(op)s(erator)31 b(tests)g(only)f(for)g(existence.)150 -1399 y Ft(${)p Fj(parameter)p Ft(:)p Fq(\000)p Fj(word)p -Ft(})630 1509 y Fu(If)g Fr(parameter)37 b Fu(is)30 b(unset)g(or)h(n)m +(the)150 1223 y(op)s(erator)31 b(tests)g(only)f(for)g(existence.)150 +1379 y Ft(${)p Fj(parameter)p Ft(:)p Fq(\000)p Fj(word)p +Ft(})630 1489 y Fu(If)g Fr(parameter)37 b Fu(is)30 b(unset)g(or)h(n)m (ull,)f(the)h(expansion)f(of)g Fr(w)m(ord)k Fu(is)c(substituted.)40 -b(Otherwise,)630 1619 y(the)31 b(v)-5 b(alue)30 b(of)h -Fr(parameter)37 b Fu(is)31 b(substituted.)870 1755 y -Ft($)47 b(v=123)870 1865 y($)g(echo)g(${v-unset})870 -1974 y(123)150 2138 y(${)p Fj(parameter)p Ft(:=)p Fj(word)p -Ft(})630 2248 y Fu(If)33 b Fr(parameter)40 b Fu(is)33 -b(unset)f(or)h(n)m(ull,)h(the)f(expansion)g(of)g Fr(w)m(ord)j -Fu(is)d(assigned)g(to)h Fr(parameter)p Fu(.)630 2357 -y(The)c(v)-5 b(alue)32 b(of)f Fr(parameter)38 b Fu(is)31 -b(then)g(substituted.)42 b(P)m(ositional)33 b(parameters)e(and)f(sp)s -(ecial)630 2467 y(parameters)h(ma)m(y)g(not)f(b)s(e)g(assigned)h(to)g -(in)f(this)g(w)m(a)m(y)-8 b(.)870 2603 y Ft($)47 b(var=)870 -2713 y($)g(:)h(${var:=DEFAULT})870 2823 y($)f(echo)g($var)870 -2932 y(DEFAULT)150 3096 y(${)p Fj(parameter)p Ft(:?)p -Fj(word)p Ft(})630 3205 y Fu(If)26 b Fr(parameter)33 -b Fu(is)26 b(n)m(ull)g(or)g(unset,)h(the)f(expansion)g(of)g -Fr(w)m(ord)k Fu(\(or)c(a)h(message)g(to)g(that)f(e\013ect)630 -3315 y(if)i Fr(w)m(ord)j Fu(is)d(not)g(presen)m(t\))h(is)f(written)g +b(Otherwise,)630 1598 y(the)31 b(v)-5 b(alue)30 b(of)h +Fr(parameter)37 b Fu(is)31 b(substituted.)870 1731 y +Ft($)47 b(v=123)870 1841 y($)g(echo)g(${v-unset})870 +1951 y(123)870 2060 y($)g(echo)g(${v:-unset-or-null})870 +2170 y(123)870 2279 y($)g(unset)g(v)870 2389 y($)g(echo)g(${v-unset}) +870 2498 y(unset)870 2608 y($)g(v=)870 2718 y($)g(echo)g +(${v:-unset-or-null})870 2827 y(unset-or-null)150 2984 +y(${)p Fj(parameter)p Ft(:=)p Fj(word)p Ft(})630 3093 +y Fu(If)33 b Fr(parameter)40 b Fu(is)33 b(unset)f(or)h(n)m(ull,)h(the)f +(expansion)g(of)g Fr(w)m(ord)j Fu(is)d(assigned)g(to)h +Fr(parameter)p Fu(.)630 3203 y(The)c(v)-5 b(alue)32 b(of)f +Fr(parameter)38 b Fu(is)31 b(then)g(substituted.)42 b(P)m(ositional)33 +b(parameters)e(and)f(sp)s(ecial)630 3313 y(parameters)h(ma)m(y)g(not)f +(b)s(e)g(assigned)h(to)g(in)f(this)g(w)m(a)m(y)-8 b(.)870 +3446 y Ft($)47 b(var=)870 3555 y($)g(:)h(${var:=DEFAULT})870 +3665 y($)f(echo)g($var)870 3774 y(DEFAULT)150 3931 y(${)p +Fj(parameter)p Ft(:?)p Fj(word)p Ft(})630 4041 y Fu(If)26 +b Fr(parameter)33 b Fu(is)26 b(n)m(ull)g(or)g(unset,)h(the)f(expansion) +g(of)g Fr(w)m(ord)k Fu(\(or)c(a)h(message)g(to)g(that)f(e\013ect)630 +4150 y(if)i Fr(w)m(ord)j Fu(is)d(not)g(presen)m(t\))h(is)f(written)g (to)h(the)f(standard)f(error)h(and)f(the)h(shell,)h(if)f(it)h(is)f(not) -630 3425 y(in)m(teractiv)m(e,)33 b(exits.)42 b(Otherwise,)30 +630 4260 y(in)m(teractiv)m(e,)33 b(exits.)42 b(Otherwise,)30 b(the)h(v)-5 b(alue)31 b(of)f Fr(parameter)38 b Fu(is)30 -b(substituted.)870 3561 y Ft($)47 b(var=)870 3671 y($)g(:)h(${var:?var) -d(is)i(unset)f(or)i(null})870 3780 y(bash:)e(var:)h(var)g(is)g(unset)f -(or)i(null)150 3944 y(${)p Fj(parameter)p Ft(:+)p Fj(word)p -Ft(})630 4053 y Fu(If)35 b Fr(parameter)42 b Fu(is)36 +b(substituted.)870 4393 y Ft($)47 b(var=)870 4502 y($)g(:)h(${var:?var) +d(is)i(unset)f(or)i(null})870 4612 y(bash:)e(var:)h(var)g(is)g(unset)f +(or)i(null)150 4769 y(${)p Fj(parameter)p Ft(:+)p Fj(word)p +Ft(})630 4878 y Fu(If)35 b Fr(parameter)42 b Fu(is)36 b(n)m(ull)f(or)h(unset,)g(nothing)g(is)f(substituted,)i(otherwise)e -(the)h(expansion)630 4163 y(of)31 b Fr(w)m(ord)i Fu(is)e(substituted.) -870 4300 y Ft($)47 b(var=123)870 4409 y($)g(echo)g(${var:+var)e(is)i -(set)g(and)g(not)g(null})870 4519 y(var)g(is)g(set)g(and)g(not)g(null) -150 4682 y(${)p Fj(parameter)p Ft(:)p Fj(offset)p Ft(})150 -4792 y(${)p Fj(parameter)p Ft(:)p Fj(offset)p Ft(:)p -Fj(lengt)o(h)p Ft(})630 4902 y Fu(This)30 b(is)h(referred)f(to)h(as)g -(Substring)f(Expansion.)41 b(It)31 b(expands)f(to)h(up)f(to)h -Fr(length)g Fu(c)m(harac-)630 5011 y(ters)k(of)g(the)h(v)-5 -b(alue)35 b(of)g Fr(parameter)42 b Fu(starting)36 b(at)g(the)f(c)m -(haracter)i(sp)s(eci\014ed)d(b)m(y)h Fr(o\013set)p Fu(.)55 -b(If)630 5121 y Fr(parameter)41 b Fu(is)35 b(`)p Ft(@)p -Fu(')f(or)h(`)p Ft(*)p Fu(',)g(an)g(indexed)f(arra)m(y)g(subscripted)g -(b)m(y)g(`)p Ft(@)p Fu(')g(or)h(`)p Ft(*)p Fu(',)g(or)g(an)f(asso-)630 -5230 y(ciativ)m(e)i(arra)m(y)e(name,)h(the)f(results)f(di\013er)g(as)h -(describ)s(ed)e(b)s(elo)m(w.)51 b(If)33 b Fr(length)h -Fu(is)g(omitted,)630 5340 y(it)d(expands)f(to)h(the)g(substring)e(of)h -(the)h(v)-5 b(alue)31 b(of)g Fr(parameter)37 b Fu(starting)31 -b(at)h(the)e(c)m(haracter)p eop end +(the)h(expansion)630 4988 y(of)31 b Fr(w)m(ord)i Fu(is)e(substituted.) +870 5121 y Ft($)47 b(var=123)870 5230 y($)g(echo)g(${var:+var)e(is)i +(set)g(and)g(not)g(null})870 5340 y(var)g(is)g(set)g(and)g(not)g(null)p +eop end %%Page: 28 34 TeXDict begin 28 33 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(28)630 299 -y(sp)s(eci\014ed)30 b(b)m(y)g Fr(o\013set)k Fu(and)c(extending)h(to)g -(the)g(end)f(of)g(the)h(v)-5 b(alue.)42 b Fr(length)31 -b Fu(and)f Fr(o\013set)k Fu(are)630 408 y(arithmetic)e(expressions)e -(\(see)h(Section)g(6.5)h([Shell)e(Arithmetic],)i(page)f(98\).)630 -555 y(If)39 b Fr(o\013set)k Fu(ev)-5 b(aluates)41 b(to)f(a)g(n)m(um)m -(b)s(er)f(less)h(than)f(zero,)k(the)d(v)-5 b(alue)40 -b(is)g(used)e(as)i(an)g(o\013set)630 664 y(in)33 b(c)m(haracters)i -(from)f(the)f(end)g(of)h(the)g(v)-5 b(alue)34 b(of)g -Fr(parameter)p Fu(.)51 b(If)33 b Fr(length)h Fu(ev)-5 -b(aluates)35 b(to)g(a)630 774 y(n)m(um)m(b)s(er)23 b(less)h(than)g -(zero,)j(it)d(is)h(in)m(terpreted)f(as)g(an)h(o\013set)g(in)f(c)m -(haracters)h(from)f(the)g(end)g(of)630 883 y(the)31 b(v)-5 -b(alue)31 b(of)g Fr(parameter)38 b Fu(rather)30 b(than)h(a)g(n)m(um)m -(b)s(er)f(of)g(c)m(haracters,)j(and)d(the)h(expansion)630 -993 y(is)39 b(the)g(c)m(haracters)i(b)s(et)m(w)m(een)f +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(28)150 299 +y Ft(${)p Fj(parameter)p Ft(:)p Fj(offset)p Ft(})150 +408 y(${)p Fj(parameter)p Ft(:)p Fj(offset)p Ft(:)p Fj(lengt)o(h)p +Ft(})630 518 y Fu(This)30 b(is)h(referred)f(to)h(as)g(Substring)f +(Expansion.)41 b(It)31 b(expands)f(to)h(up)f(to)h Fr(length)g +Fu(c)m(harac-)630 628 y(ters)k(of)g(the)h(v)-5 b(alue)35 +b(of)g Fr(parameter)42 b Fu(starting)36 b(at)g(the)f(c)m(haracter)i(sp) +s(eci\014ed)d(b)m(y)h Fr(o\013set)p Fu(.)55 b(If)630 +737 y Fr(parameter)41 b Fu(is)35 b(`)p Ft(@)p Fu(')f(or)h(`)p +Ft(*)p Fu(',)g(an)g(indexed)f(arra)m(y)g(subscripted)g(b)m(y)g(`)p +Ft(@)p Fu(')g(or)h(`)p Ft(*)p Fu(',)g(or)g(an)f(asso-)630 +847 y(ciativ)m(e)i(arra)m(y)e(name,)h(the)f(results)f(di\013er)g(as)h +(describ)s(ed)e(b)s(elo)m(w.)51 b(If)33 b Fr(length)h +Fu(is)g(omitted,)630 956 y(it)d(expands)f(to)h(the)g(substring)e(of)h +(the)h(v)-5 b(alue)31 b(of)g Fr(parameter)37 b Fu(starting)31 +b(at)h(the)e(c)m(haracter)630 1066 y(sp)s(eci\014ed)g(b)m(y)g +Fr(o\013set)k Fu(and)c(extending)h(to)g(the)g(end)f(of)g(the)h(v)-5 +b(alue.)42 b Fr(length)31 b Fu(and)f Fr(o\013set)k Fu(are)630 +1176 y(arithmetic)e(expressions)e(\(see)h(Section)g(6.5)h([Shell)e +(Arithmetic],)i(page)f(101\).)630 1322 y(If)39 b Fr(o\013set)k +Fu(ev)-5 b(aluates)41 b(to)f(a)g(n)m(um)m(b)s(er)f(less)h(than)f(zero,) +k(the)d(v)-5 b(alue)40 b(is)g(used)e(as)i(an)g(o\013set)630 +1431 y(in)33 b(c)m(haracters)i(from)f(the)f(end)g(of)h(the)g(v)-5 +b(alue)34 b(of)g Fr(parameter)p Fu(.)51 b(If)33 b Fr(length)h +Fu(ev)-5 b(aluates)35 b(to)g(a)630 1541 y(n)m(um)m(b)s(er)23 +b(less)h(than)g(zero,)j(it)d(is)h(in)m(terpreted)f(as)g(an)h(o\013set)g +(in)f(c)m(haracters)h(from)f(the)g(end)g(of)630 1650 +y(the)31 b(v)-5 b(alue)31 b(of)g Fr(parameter)38 b Fu(rather)30 +b(than)h(a)g(n)m(um)m(b)s(er)f(of)g(c)m(haracters,)j(and)d(the)h +(expansion)630 1760 y(is)39 b(the)g(c)m(haracters)i(b)s(et)m(w)m(een)f Fr(o\013set)i Fu(and)c(that)i(result.)67 b(Note)40 b(that)g(a)g -(negativ)m(e)h(o\013set)630 1103 y(m)m(ust)27 b(b)s(e)g(separated)g +(negativ)m(e)h(o\013set)630 1870 y(m)m(ust)27 b(b)s(e)g(separated)g (from)g(the)g(colon)i(b)m(y)e(at)h(least)g(one)f(space)h(to)g(a)m(v)m -(oid)h(b)s(eing)e(confused)630 1212 y(with)j(the)h(`)p -Ft(:-)p Fu(')f(expansion.)630 1358 y(Here)43 b(are)g(some)f(examples)h +(oid)h(b)s(eing)e(confused)630 1979 y(with)j(the)h(`)p +Ft(:-)p Fu(')f(expansion.)630 2125 y(Here)43 b(are)g(some)f(examples)h (illustrating)g(substring)f(expansion)g(on)g(parameters)h(and)630 -1468 y(subscripted)29 b(arra)m(ys:)630 1614 y Ft($)47 -b(string=01234567890abcdefgh)630 1724 y($)g(echo)g(${string:7})630 -1833 y(7890abcdefgh)630 1943 y($)g(echo)g(${string:7:0})630 -2162 y($)g(echo)g(${string:7:2})630 2271 y(78)630 2381 -y($)g(echo)g(${string:7:-2})630 2491 y(7890abcdef)630 -2600 y($)g(echo)g(${string:)e(-7})630 2710 y(bcdefgh)630 -2819 y($)i(echo)g(${string:)e(-7:0})630 3039 y($)i(echo)g(${string:)e -(-7:2})630 3148 y(bc)630 3258 y($)i(echo)g(${string:)e(-7:-2})630 -3367 y(bcdef)630 3477 y($)i(set)g(--)h(01234567890abcdefgh)630 -3587 y($)f(echo)g(${1:7})630 3696 y(7890abcdefgh)630 -3806 y($)g(echo)g(${1:7:0})630 4025 y($)g(echo)g(${1:7:2})630 -4134 y(78)630 4244 y($)g(echo)g(${1:7:-2})630 4354 y(7890abcdef)630 -4463 y($)g(echo)g(${1:)g(-7})630 4573 y(bcdefgh)630 4682 -y($)g(echo)g(${1:)g(-7:0})630 4902 y($)g(echo)g(${1:)g(-7:2})630 -5011 y(bc)630 5121 y($)g(echo)g(${1:)g(-7:-2})630 5230 -y(bcdef)630 5340 y($)g(array[0]=01234567890abcdef)o(gh)p -eop end +2235 y(subscripted)29 b(arra)m(ys:)630 2381 y Ft($)47 +b(string=01234567890abcdefgh)630 2491 y($)g(echo)g(${string:7})630 +2600 y(7890abcdefgh)630 2710 y($)g(echo)g(${string:7:0})630 +2929 y($)g(echo)g(${string:7:2})630 3039 y(78)630 3148 +y($)g(echo)g(${string:7:-2})630 3258 y(7890abcdef)630 +3367 y($)g(echo)g(${string:)e(-7})630 3477 y(bcdefgh)630 +3587 y($)i(echo)g(${string:)e(-7:0})630 3806 y($)i(echo)g(${string:)e +(-7:2})630 3915 y(bc)630 4025 y($)i(echo)g(${string:)e(-7:-2})630 +4134 y(bcdef)630 4244 y($)i(set)g(--)h(01234567890abcdefgh)630 +4354 y($)f(echo)g(${1:7})630 4463 y(7890abcdefgh)630 +4573 y($)g(echo)g(${1:7:0})630 4792 y($)g(echo)g(${1:7:2})630 +4902 y(78)630 5011 y($)g(echo)g(${1:7:-2})630 5121 y(7890abcdef)630 +5230 y($)g(echo)g(${1:)g(-7})630 5340 y(bcdefgh)p eop +end %%Page: 29 35 TeXDict begin 29 34 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(29)630 299 -y Ft($)47 b(echo)g(${array[0]:7})630 408 y(7890abcdefgh)630 -518 y($)g(echo)g(${array[0]:7:0})630 737 y($)g(echo)g(${array[0]:7:2}) -630 847 y(78)630 956 y($)g(echo)g(${array[0]:7:-2})630 -1066 y(7890abcdef)630 1176 y($)g(echo)g(${array[0]:)e(-7})630 -1285 y(bcdefgh)630 1395 y($)i(echo)g(${array[0]:)e(-7:0})630 -1614 y($)i(echo)g(${array[0]:)e(-7:2})630 1724 y(bc)630 -1833 y($)i(echo)g(${array[0]:)e(-7:-2})630 1943 y(bcdef)630 -2071 y Fu(If)34 b Fr(parameter)41 b Fu(is)35 b(`)p Ft(@)p +y Ft($)47 b(echo)g(${1:)g(-7:0})630 518 y($)g(echo)g(${1:)g(-7:2})630 +628 y(bc)630 737 y($)g(echo)g(${1:)g(-7:-2})630 847 y(bcdef)630 +956 y($)g(array[0]=01234567890abcdef)o(gh)630 1066 y($)g(echo)g +(${array[0]:7})630 1176 y(7890abcdefgh)630 1285 y($)g(echo)g +(${array[0]:7:0})630 1504 y($)g(echo)g(${array[0]:7:2})630 +1614 y(78)630 1724 y($)g(echo)g(${array[0]:7:-2})630 +1833 y(7890abcdef)630 1943 y($)g(echo)g(${array[0]:)e(-7})630 +2052 y(bcdefgh)630 2162 y($)i(echo)g(${array[0]:)e(-7:0})630 +2381 y($)i(echo)g(${array[0]:)e(-7:2})630 2491 y(bc)630 +2600 y($)i(echo)g(${array[0]:)e(-7:-2})630 2710 y(bcdef)630 +2856 y Fu(If)34 b Fr(parameter)41 b Fu(is)35 b(`)p Ft(@)p Fu(')f(or)h(`)p Ft(*)p Fu(',)h(the)e(result)g(is)h Fr(length)g -Fu(p)s(ositional)g(parameters)g(b)s(eginning)630 2180 -y(at)27 b Fr(o\013set)p Fu(.)40 b(A)26 b(negativ)m(e)j -Fr(o\013set)g Fu(is)d(tak)m(en)h(relativ)m(e)h(to)f(one)g(greater)g -(than)f(the)g(greatest)i(p)s(o-)630 2290 y(sitional)i(parameter,)f(so)f -(an)g(o\013set)i(of)e(-1)h(ev)-5 b(aluates)30 b(to)f(the)f(last)h(p)s -(ositional)g(parameter.)630 2399 y(It)h(is)h(an)f(expansion)g(error)g -(if)h Fr(length)f Fu(ev)-5 b(aluates)32 b(to)g(a)e(n)m(um)m(b)s(er)f -(less)i(than)f(zero.)630 2527 y(The)i(follo)m(wing)i(examples)f -(illustrate)h(substring)d(expansion)i(using)f(p)s(ositional)h(param-) -630 2637 y(eters:)630 2765 y Ft($)47 b(set)g(--)h(1)f(2)g(3)h(4)f(5)h -(6)f(7)h(8)f(9)h(0)f(a)h(b)f(c)g(d)h(e)f(f)h(g)f(h)630 -2874 y($)g(echo)g(${@:7})630 2984 y(7)g(8)h(9)f(0)h(a)f(b)h(c)f(d)h(e)f -(f)h(g)f(h)630 3093 y($)g(echo)g(${@:7:0})630 3313 y($)g(echo)g -(${@:7:2})630 3422 y(7)g(8)630 3532 y($)g(echo)g(${@:7:-2})630 -3641 y(bash:)f(-2:)h(substring)f(expression)f(<)i(0)630 -3751 y($)g(echo)g(${@:)g(-7:2})630 3861 y(b)g(c)630 3970 -y($)g(echo)g(${@:0})630 4080 y(./bash)f(1)i(2)f(3)g(4)h(5)f(6)h(7)f(8)h -(9)f(0)h(a)f(b)h(c)f(d)g(e)h(f)f(g)h(h)630 4189 y($)f(echo)g(${@:0:2}) -630 4299 y(./bash)f(1)630 4408 y($)h(echo)g(${@:)g(-7:0})630 -4646 y Fu(If)36 b Fr(parameter)43 b Fu(is)36 b(an)g(indexed)g(arra)m(y) -g(name)g(subscripted)f(b)m(y)h(`)p Ft(@)p Fu(')g(or)h(`)p -Ft(*)p Fu(',)h(the)e(result)g(is)630 4755 y(the)j Fr(length)g +Fu(p)s(ositional)g(parameters)g(b)s(eginning)630 2966 +y(at)j Fr(o\013set)p Fu(.)62 b(A)37 b(negativ)m(e)j Fr(o\013set)g +Fu(is)d(tak)m(en)i(relativ)m(e)g(to)f(one)f(greater)i(than)e(the)g +(greatest)630 3075 y(p)s(ositional)23 b(parameter,)h(so)e(an)g +(o\013set)h(of)g(-1)f(ev)-5 b(aluates)24 b(to)f(the)f(last)h(p)s +(ositional)f(parameter)630 3185 y(\(or)34 b(0)g(if)g(there)g(are)g(no)f +(p)s(ositional)i(parameters\).)51 b(It)34 b(is)g(an)f(expansion)h +(error)f(if)h Fr(length)630 3294 y Fu(ev)-5 b(aluates)32 +b(to)f(a)g(n)m(um)m(b)s(er)e(less)i(than)f(zero.)630 +3440 y(The)i(follo)m(wing)i(examples)f(illustrate)h(substring)d +(expansion)i(using)f(p)s(ositional)h(param-)630 3550 +y(eters:)630 3696 y Ft($)47 b(set)g(--)h(1)f(2)g(3)h(4)f(5)h(6)f(7)h(8) +f(9)h(0)f(a)h(b)f(c)g(d)h(e)f(f)h(g)f(h)630 3806 y($)g(echo)g(${@:7}) +630 3915 y(7)g(8)h(9)f(0)h(a)f(b)h(c)f(d)h(e)f(f)h(g)f(h)630 +4025 y($)g(echo)g(${@:7:0})630 4244 y($)g(echo)g(${@:7:2})630 +4354 y(7)g(8)630 4463 y($)g(echo)g(${@:7:-2})630 4573 +y(bash:)f(-2:)h(substring)f(expression)f(<)i(0)630 4682 +y($)g(echo)g(${@:)g(-7:2})630 4792 y(b)g(c)630 4902 y($)g(echo)g +(${@:0})630 5011 y(./bash)f(1)i(2)f(3)g(4)h(5)f(6)h(7)f(8)h(9)f(0)h(a)f +(b)h(c)f(d)g(e)h(f)f(g)h(h)630 5121 y($)f(echo)g(${@:0:2})630 +5230 y(./bash)f(1)630 5340 y($)h(echo)g(${@:)g(-7:0})p +eop end +%%Page: 30 36 +TeXDict begin 30 35 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(30)630 428 +y(If)36 b Fr(parameter)43 b Fu(is)36 b(an)g(indexed)g(arra)m(y)g(name)g +(subscripted)f(b)m(y)h(`)p Ft(@)p Fu(')g(or)h(`)p Ft(*)p +Fu(',)h(the)e(result)g(is)630 538 y(the)j Fr(length)g Fu(mem)m(b)s(ers)f(of)h(the)f(arra)m(y)i(b)s(eginning)d(with)i Ft(${)p Fj(parameter)p Ft([)p Fj(offset)p Ft(]})p Fu(.)60 -b(A)630 4865 y(negativ)m(e)33 b Fr(o\013set)g Fu(is)e(tak)m(en)h +b(A)630 648 y(negativ)m(e)33 b Fr(o\013set)g Fu(is)e(tak)m(en)h (relativ)m(e)g(to)g(one)f(greater)g(than)g(the)f(maxim)m(um)h(index)f -(of)h(the)630 4975 y(sp)s(eci\014ed)38 b(arra)m(y)-8 -b(.)65 b(It)38 b(is)g(an)h(expansion)f(error)f(if)i Fr(length)f +(of)h(the)630 757 y(sp)s(eci\014ed)38 b(arra)m(y)-8 b(.)65 +b(It)38 b(is)g(an)h(expansion)f(error)f(if)i Fr(length)f Fu(ev)-5 b(aluates)40 b(to)f(a)g(n)m(um)m(b)s(er)e(less)630 -5084 y(than)30 b(zero.)630 5212 y(These)23 b(examples)i(sho)m(w)e(ho)m -(w)h(y)m(ou)g(can)g(use)f(substring)f(expansion)i(with)f(indexed)g -(arra)m(ys:)630 5340 y Ft($)47 b(array=\(0)f(1)h(2)h(3)f(4)h(5)f(6)h(7) -f(8)h(9)f(0)h(a)f(b)g(c)h(d)f(e)h(f)f(g)h(h\))p eop end -%%Page: 30 36 -TeXDict begin 30 35 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(30)630 299 -y Ft($)47 b(echo)g(${array[@]:7})630 408 y(7)g(8)h(9)f(0)h(a)f(b)h(c)f -(d)h(e)f(f)h(g)f(h)630 518 y($)g(echo)g(${array[@]:7:2})630 -628 y(7)g(8)630 737 y($)g(echo)g(${array[@]:)e(-7:2})630 -847 y(b)i(c)630 956 y($)g(echo)g(${array[@]:)e(-7:-2})630 -1066 y(bash:)h(-2:)h(substring)f(expression)f(<)i(0)630 -1176 y($)g(echo)g(${array[@]:0})630 1285 y(0)g(1)h(2)f(3)h(4)f(5)h(6)f -(7)h(8)f(9)h(0)f(a)g(b)h(c)f(d)h(e)f(f)h(g)f(h)630 1395 -y($)g(echo)g(${array[@]:0:2})630 1504 y(0)g(1)630 1614 -y($)g(echo)g(${array[@]:)e(-7:0})630 1855 y Fu(Substring)25 -b(expansion)g(applied)h(to)h(an)f(asso)s(ciativ)m(e)j(arra)m(y)d(pro)s -(duces)f(unde\014ned)f(results.)630 1987 y(Substring)32 -b(indexing)i(is)f(zero-based)i(unless)e(the)h(p)s(ositional)g -(parameters)g(are)g(used,)g(in)630 2096 y(whic)m(h)29 +867 y(than)30 b(zero.)630 996 y(These)23 b(examples)i(sho)m(w)e(ho)m(w) +h(y)m(ou)g(can)g(use)f(substring)f(expansion)i(with)f(indexed)g(arra)m +(ys:)630 1126 y Ft($)47 b(array=\(0)f(1)h(2)h(3)f(4)h(5)f(6)h(7)f(8)h +(9)f(0)h(a)f(b)g(c)h(d)f(e)h(f)f(g)h(h\))630 1235 y($)f(echo)g +(${array[@]:7})630 1345 y(7)g(8)h(9)f(0)h(a)f(b)h(c)f(d)h(e)f(f)h(g)f +(h)630 1455 y($)g(echo)g(${array[@]:7:2})630 1564 y(7)g(8)630 +1674 y($)g(echo)g(${array[@]:)e(-7:2})630 1783 y(b)i(c)630 +1893 y($)g(echo)g(${array[@]:)e(-7:-2})630 2002 y(bash:)h(-2:)h +(substring)f(expression)f(<)i(0)630 2112 y($)g(echo)g(${array[@]:0})630 +2222 y(0)g(1)h(2)f(3)h(4)f(5)h(6)f(7)h(8)f(9)h(0)f(a)g(b)h(c)f(d)h(e)f +(f)h(g)f(h)630 2331 y($)g(echo)g(${array[@]:0:2})630 +2441 y(0)g(1)630 2550 y($)g(echo)g(${array[@]:)e(-7:0})630 +2790 y Fu(Substring)25 b(expansion)g(applied)h(to)h(an)f(asso)s(ciativ) +m(e)j(arra)m(y)d(pro)s(duces)f(unde\014ned)f(results.)630 +2919 y(Substring)32 b(indexing)i(is)f(zero-based)i(unless)e(the)h(p)s +(ositional)g(parameters)g(are)g(used,)g(in)630 3029 y(whic)m(h)29 b(case)i(the)f(indexing)g(starts)g(at)g(1)g(b)m(y)g(default.)41 b(If)29 b Fr(o\013set)k Fu(is)d(0,)g(and)f(the)h(p)s(ositional)630 -2206 y(parameters)h(are)f(used,)g Ft($0)g Fu(is)g(pre\014xed)g(to)h -(the)f(list.)150 2359 y Ft(${!)p Fj(prefix)p Ft(*})150 -2469 y(${!)p Fj(prefix)p Ft(@})630 2578 y Fu(Expands)24 +3138 y(parameters)h(are)f(used,)g Ft($0)g Fu(is)g(pre\014xed)g(to)h +(the)f(list.)150 3288 y Ft(${!)p Fj(prefix)p Ft(*})150 +3397 y(${!)p Fj(prefix)p Ft(@})630 3507 y Fu(Expands)24 b(to)h(the)g(names)g(of)g(v)-5 b(ariables)26 b(whose)f(names)f(b)s (egin)h(with)f Fr(pre\014x)p Fu(,)i(separated)f(b)m(y)630 -2688 y(the)k(\014rst)f(c)m(haracter)j(of)e(the)g Ft(IFS)f +3616 y(the)k(\014rst)f(c)m(haracter)j(of)e(the)g Ft(IFS)f Fu(sp)s(ecial)i(v)-5 b(ariable.)41 b(When)29 b(`)p Ft(@)p -Fu(')g(is)g(used)f(and)h(the)g(expan-)630 2798 y(sion)35 +Fu(')g(is)g(used)f(and)h(the)g(expan-)630 3726 y(sion)35 b(app)s(ears)g(within)f(double)h(quotes,)i(eac)m(h)f(v)-5 b(ariable)36 b(name)f(expands)g(to)g(a)h(separate)630 -2907 y(w)m(ord.)150 3061 y Ft(${!)p Fj(name)p Ft([@]})150 -3170 y(${!)p Fj(name)p Ft([*]})630 3280 y Fu(If)26 b +3836 y(w)m(ord.)150 3985 y Ft(${!)p Fj(name)p Ft([@]})150 +4095 y(${!)p Fj(name)p Ft([*]})630 4204 y Fu(If)26 b Fr(name)32 b Fu(is)27 b(an)f(arra)m(y)h(v)-5 b(ariable,)29 b(expands)d(to)h(the)g(list)g(of)g(arra)m(y)g(indices)g(\(k)m(eys\))h -(assigned)630 3389 y(in)c Fr(name)p Fu(.)39 b(If)24 b +(assigned)630 4314 y(in)c Fr(name)p Fu(.)39 b(If)24 b Fr(name)30 b Fu(is)24 b(not)h(an)f(arra)m(y)-8 b(,)27 b(expands)c(to)j(0)f(if)f Fr(name)30 b Fu(is)24 b(set)h(and)f(n)m(ull)g -(otherwise.)630 3499 y(When)39 b(`)p Ft(@)p Fu(')h(is)f(used)g(and)f +(otherwise.)630 4423 y(When)39 b(`)p Ft(@)p Fu(')h(is)f(used)g(and)f (the)i(expansion)f(app)s(ears)g(within)f(double)h(quotes,)k(eac)m(h)d -(k)m(ey)630 3608 y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150 -3762 y Ft(${#)p Fj(parameter)p Ft(})630 3871 y Fu(The)40 +(k)m(ey)630 4533 y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150 +4682 y Ft(${#)p Fj(parameter)p Ft(})630 4792 y Fu(The)40 b(length)g(in)g(c)m(haracters)i(of)e(the)h(expanded)e(v)-5 b(alue)41 b(of)f Fr(parameter)47 b Fu(is)40 b(substituted.)630 -3981 y(If)i Fr(parameter)50 b Fu(is)43 b(`)p Ft(*)p Fu(')g(or)g(`)p +4902 y(If)i Fr(parameter)50 b Fu(is)43 b(`)p Ft(*)p Fu(')g(or)g(`)p Ft(@)p Fu(',)k(the)c(v)-5 b(alue)43 b(substituted)f(is)h(the)g(n)m(um)m -(b)s(er)f(of)h(p)s(ositional)630 4091 y(parameters.)i(If)32 +(b)s(er)f(of)h(p)s(ositional)630 5011 y(parameters.)i(If)32 b Fr(parameter)38 b Fu(is)32 b(an)g(arra)m(y)g(name)g(subscripted)f(b)m (y)g(`)p Ft(*)p Fu(')h(or)g(`)p Ft(@)p Fu(',)g(the)g(v)-5 -b(alue)630 4200 y(substituted)30 b(is)h(the)g(n)m(um)m(b)s(er)e(of)i +b(alue)630 5121 y(substituted)30 b(is)h(the)g(n)m(um)m(b)s(er)e(of)i (elemen)m(ts)i(in)d(the)h(arra)m(y)-8 b(.)43 b(If)30 -b Fr(parameter)38 b Fu(is)31 b(an)f(indexed)630 4310 +b Fr(parameter)38 b Fu(is)31 b(an)f(indexed)630 5230 y(arra)m(y)37 b(name)g(subscripted)f(b)m(y)h(a)g(negativ)m(e)i(n)m(um)m (b)s(er,)f(that)f(n)m(um)m(b)s(er)f(is)g(in)m(terpreted)i(as)630 -4419 y(relativ)m(e)47 b(to)g(one)e(greater)i(than)e(the)h(maxim)m(um)f -(index)g(of)g Fr(parameter)p Fu(,)50 b(so)c(negativ)m(e)630 -4529 y(indices)30 b(coun)m(t)h(bac)m(k)g(from)f(the)h(end)e(of)i(the)f -(arra)m(y)-8 b(,)32 b(and)e(an)g(index)g(of)g(-1)h(references)g(the)630 -4639 y(last)g(elemen)m(t.)150 4792 y Ft(${)p Fj(parameter)p -Ft(#)p Fj(word)p Ft(})150 4902 y(${)p Fj(parameter)p -Ft(##)p Fj(word)p Ft(})630 5011 y Fu(The)43 b Fr(w)m(ord)k -Fu(is)d(expanded)f(to)h(pro)s(duce)f(a)h(pattern)g(and)f(matc)m(hed)i -(according)f(to)h(the)630 5121 y(rules)31 b(describ)s(ed)g(b)s(elo)m(w) -h(\(see)h(Section)g(3.5.8.1)h([P)m(attern)g(Matc)m(hing],)g(page)f -(36\).)46 b(If)32 b(the)630 5230 y(pattern)37 b(matc)m(hes)h(the)f(b)s -(eginning)f(of)h(the)g(expanded)f(v)-5 b(alue)38 b(of)f -Fr(parameter)p Fu(,)i(then)e(the)630 5340 y(result)f(of)h(the)f -(expansion)h(is)f(the)h(expanded)e(v)-5 b(alue)37 b(of)g -Fr(parameter)43 b Fu(with)36 b(the)h(shortest)p eop end +5340 y(relativ)m(e)47 b(to)g(one)e(greater)i(than)e(the)h(maxim)m(um)f +(index)g(of)g Fr(parameter)p Fu(,)50 b(so)c(negativ)m(e)p +eop end %%Page: 31 37 TeXDict begin 31 36 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(31)630 299 -y(matc)m(hing)31 b(pattern)e(\(the)h(`)p Ft(#)p Fu(')g(case\))h(or)e -(the)h(longest)h(matc)m(hing)f(pattern)g(\(the)g(`)p -Ft(##)p Fu(')g(case\))630 408 y(deleted.)49 b(If)32 b -Fr(parameter)40 b Fu(is)33 b(`)p Ft(@)p Fu(')g(or)g(`)p -Ft(*)p Fu(',)h(the)f(pattern)g(remo)m(v)-5 b(al)34 b(op)s(eration)g(is) -f(applied)f(to)630 518 y(eac)m(h)38 b(p)s(ositional)g(parameter)g(in)f -(turn,)h(and)e(the)h(expansion)g(is)h(the)f(resultan)m(t)h(list.)61 -b(If)630 628 y Fr(parameter)38 b Fu(is)32 b(an)f(arra)m(y)h(v)-5 -b(ariable)32 b(subscripted)e(with)h(`)p Ft(@)p Fu(')g(or)h(`)p -Ft(*)p Fu(',)g(the)f(pattern)h(remo)m(v)-5 b(al)630 737 -y(op)s(eration)30 b(is)g(applied)f(to)i(eac)m(h)g(mem)m(b)s(er)e(of)h -(the)g(arra)m(y)g(in)f(turn,)g(and)g(the)h(expansion)g(is)630 -847 y(the)h(resultan)m(t)g(list.)150 1019 y Ft(${)p Fj(parameter)p -Ft(\045)p Fj(word)p Ft(})150 1129 y(${)p Fj(parameter)p -Ft(\045\045)p Fj(word)p Ft(})630 1238 y Fu(The)43 b Fr(w)m(ord)k -Fu(is)d(expanded)f(to)h(pro)s(duce)f(a)h(pattern)g(and)f(matc)m(hed)i -(according)f(to)h(the)630 1348 y(rules)f(describ)s(ed)g(b)s(elo)m(w)h -(\(see)h(Section)g(3.5.8.1)h([P)m(attern)f(Matc)m(hing],)51 -b(page)45 b(36\).)85 b(If)630 1457 y(the)43 b(pattern)g(matc)m(hes)h(a) -g(trailing)g(p)s(ortion)e(of)h(the)g(expanded)g(v)-5 -b(alue)43 b(of)g Fr(parameter)p Fu(,)630 1567 y(then)c(the)g(result)g -(of)h(the)f(expansion)g(is)h(the)f(v)-5 b(alue)40 b(of)f -Fr(parameter)46 b Fu(with)39 b(the)h(shortest)630 1677 -y(matc)m(hing)31 b(pattern)e(\(the)h(`)p Ft(\045)p Fu(')g(case\))h(or)e -(the)h(longest)h(matc)m(hing)f(pattern)g(\(the)g(`)p -Ft(\045\045)p Fu(')g(case\))630 1786 y(deleted.)49 b(If)32 -b Fr(parameter)40 b Fu(is)33 b(`)p Ft(@)p Fu(')g(or)g(`)p +y(indices)30 b(coun)m(t)h(bac)m(k)g(from)f(the)h(end)e(of)i(the)f(arra) +m(y)-8 b(,)32 b(and)e(an)g(index)g(of)g(-1)h(references)g(the)630 +408 y(last)g(elemen)m(t.)150 612 y Ft(${)p Fj(parameter)p +Ft(#)p Fj(word)p Ft(})150 722 y(${)p Fj(parameter)p Ft(##)p +Fj(word)p Ft(})630 831 y Fu(The)43 b Fr(w)m(ord)k Fu(is)d(expanded)f +(to)h(pro)s(duce)f(a)h(pattern)g(and)f(matc)m(hed)i(according)f(to)h +(the)630 941 y(rules)31 b(describ)s(ed)g(b)s(elo)m(w)h(\(see)h(Section) +g(3.5.8.1)h([P)m(attern)g(Matc)m(hing],)g(page)f(37\).)46 +b(If)32 b(the)630 1050 y(pattern)37 b(matc)m(hes)h(the)f(b)s(eginning)f +(of)h(the)g(expanded)f(v)-5 b(alue)38 b(of)f Fr(parameter)p +Fu(,)i(then)e(the)630 1160 y(result)f(of)h(the)f(expansion)h(is)f(the)h +(expanded)e(v)-5 b(alue)37 b(of)g Fr(parameter)43 b Fu(with)36 +b(the)h(shortest)630 1270 y(matc)m(hing)31 b(pattern)e(\(the)h(`)p +Ft(#)p Fu(')g(case\))h(or)e(the)h(longest)h(matc)m(hing)f(pattern)g +(\(the)g(`)p Ft(##)p Fu(')g(case\))630 1379 y(deleted.)49 +b(If)32 b Fr(parameter)40 b Fu(is)33 b(`)p Ft(@)p Fu(')g(or)g(`)p Ft(*)p Fu(',)h(the)f(pattern)g(remo)m(v)-5 b(al)34 b(op)s(eration)g(is) -f(applied)f(to)630 1896 y(eac)m(h)38 b(p)s(ositional)g(parameter)g(in)f +f(applied)f(to)630 1489 y(eac)m(h)38 b(p)s(ositional)g(parameter)g(in)f (turn,)h(and)e(the)h(expansion)g(is)h(the)f(resultan)m(t)h(list.)61 -b(If)630 2005 y Fr(parameter)38 b Fu(is)32 b(an)f(arra)m(y)h(v)-5 +b(If)630 1598 y Fr(parameter)38 b Fu(is)32 b(an)f(arra)m(y)h(v)-5 b(ariable)32 b(subscripted)e(with)h(`)p Ft(@)p Fu(')g(or)h(`)p -Ft(*)p Fu(',)g(the)f(pattern)h(remo)m(v)-5 b(al)630 2115 +Ft(*)p Fu(',)g(the)f(pattern)h(remo)m(v)-5 b(al)630 1708 y(op)s(eration)30 b(is)g(applied)f(to)i(eac)m(h)g(mem)m(b)s(er)e(of)h (the)g(arra)m(y)g(in)f(turn,)g(and)g(the)h(expansion)g(is)630 -2225 y(the)h(resultan)m(t)g(list.)150 2397 y Ft(${)p -Fj(parameter)p Ft(/)p Fj(pattern)p Ft(/)p Fj(stri)o(ng)p -Ft(})150 2506 y(${)p Fj(parameter)p Ft(//)p Fj(pattern)p -Ft(/)p Fj(str)o(ing)p Ft(})150 2616 y(${)p Fj(parameter)p -Ft(/#)p Fj(pattern)p Ft(/)p Fj(str)o(ing)p Ft(})150 2725 +1817 y(the)h(resultan)m(t)g(list.)150 2021 y Ft(${)p +Fj(parameter)p Ft(\045)p Fj(word)p Ft(})150 2131 y(${)p +Fj(parameter)p Ft(\045\045)p Fj(word)p Ft(})630 2240 +y Fu(The)43 b Fr(w)m(ord)k Fu(is)d(expanded)f(to)h(pro)s(duce)f(a)h +(pattern)g(and)f(matc)m(hed)i(according)f(to)h(the)630 +2350 y(rules)f(describ)s(ed)g(b)s(elo)m(w)h(\(see)h(Section)g(3.5.8.1)h +([P)m(attern)f(Matc)m(hing],)51 b(page)45 b(37\).)85 +b(If)630 2459 y(the)43 b(pattern)g(matc)m(hes)h(a)g(trailing)g(p)s +(ortion)e(of)h(the)g(expanded)g(v)-5 b(alue)43 b(of)g +Fr(parameter)p Fu(,)630 2569 y(then)c(the)g(result)g(of)h(the)f +(expansion)g(is)h(the)f(v)-5 b(alue)40 b(of)f Fr(parameter)46 +b Fu(with)39 b(the)h(shortest)630 2679 y(matc)m(hing)31 +b(pattern)e(\(the)h(`)p Ft(\045)p Fu(')g(case\))h(or)e(the)h(longest)h +(matc)m(hing)f(pattern)g(\(the)g(`)p Ft(\045\045)p Fu(')g(case\))630 +2788 y(deleted.)49 b(If)32 b Fr(parameter)40 b Fu(is)33 +b(`)p Ft(@)p Fu(')g(or)g(`)p Ft(*)p Fu(',)h(the)f(pattern)g(remo)m(v)-5 +b(al)34 b(op)s(eration)g(is)f(applied)f(to)630 2898 y(eac)m(h)38 +b(p)s(ositional)g(parameter)g(in)f(turn,)h(and)e(the)h(expansion)g(is)h +(the)f(resultan)m(t)h(list.)61 b(If)630 3007 y Fr(parameter)38 +b Fu(is)32 b(an)f(arra)m(y)h(v)-5 b(ariable)32 b(subscripted)e(with)h +(`)p Ft(@)p Fu(')g(or)h(`)p Ft(*)p Fu(',)g(the)f(pattern)h(remo)m(v)-5 +b(al)630 3117 y(op)s(eration)30 b(is)g(applied)f(to)i(eac)m(h)g(mem)m +(b)s(er)e(of)h(the)g(arra)m(y)g(in)f(turn,)g(and)g(the)h(expansion)g +(is)630 3226 y(the)h(resultan)m(t)g(list.)150 3430 y +Ft(${)p Fj(parameter)p Ft(/)p Fj(pattern)p Ft(/)p Fj(stri)o(ng)p +Ft(})150 3540 y(${)p Fj(parameter)p Ft(//)p Fj(pattern)p +Ft(/)p Fj(str)o(ing)p Ft(})150 3649 y(${)p Fj(parameter)p +Ft(/#)p Fj(pattern)p Ft(/)p Fj(str)o(ing)p Ft(})150 3759 y(${)p Fj(parameter)p Ft(/\045)p Fj(pattern)p Ft(/)p -Fj(str)o(ing)p Ft(})630 2835 y Fu(The)37 b Fr(pattern)g +Fj(str)o(ing)p Ft(})630 3868 y Fu(The)37 b Fr(pattern)g Fu(is)g(expanded)g(to)h(pro)s(duce)e(a)h(pattern)g(just)g(as)h(in)e -(\014lename)i(expansion.)630 2945 y Fr(P)m(arameter)46 +(\014lename)i(expansion.)630 3978 y Fr(P)m(arameter)46 b Fu(is)38 b(expanded)f(and)g(the)i(longest)g(matc)m(h)g(of)f Fr(pattern)g Fu(against)h(its)f(v)-5 b(alue)39 b(is)630 -3054 y(replaced)30 b(with)e Fr(string)p Fu(.)41 b Fr(string)c +4088 y(replaced)30 b(with)e Fr(string)p Fu(.)41 b Fr(string)c Fu(undergo)s(es)28 b(tilde)i(expansion,)f(parameter)h(and)e(v)-5 -b(ariable)630 3164 y(expansion,)25 b(arithmetic)g(expansion,)g(command) +b(ariable)630 4197 y(expansion,)25 b(arithmetic)g(expansion,)g(command) e(and)g(pro)s(cess)g(substitution,)i(and)e(quote)630 -3273 y(remo)m(v)-5 b(al.)54 b(The)33 b(matc)m(h)j(is)e(p)s(erformed)f +4307 y(remo)m(v)-5 b(al.)54 b(The)33 b(matc)m(h)j(is)e(p)s(erformed)f (according)i(to)g(the)f(rules)g(describ)s(ed)f(b)s(elo)m(w)i(\(see)630 -3383 y(Section)c(3.5.8.1)i([P)m(attern)f(Matc)m(hing],)g(page)f(36\).) -630 3524 y(In)45 b(the)g(\014rst)g(form)g(ab)s(o)m(v)m(e,)50 +4416 y(Section)c(3.5.8.1)i([P)m(attern)f(Matc)m(hing],)g(page)f(37\).) +630 4573 y(In)45 b(the)g(\014rst)g(form)g(ab)s(o)m(v)m(e,)50 b(only)c(the)f(\014rst)g(matc)m(h)h(is)f(replaced.)86 -b(If)45 b(there)h(are)g(t)m(w)m(o)630 3634 y(slashes)28 +b(If)45 b(there)h(are)g(t)m(w)m(o)630 4682 y(slashes)28 b(separating)g Fr(parameter)35 b Fu(and)27 b Fr(pattern)g Fu(\(the)i(second)e(form)g(ab)s(o)m(v)m(e\),)j(all)f(matc)m(hes)630 -3743 y(of)d Fr(pattern)g Fu(are)g(replaced)g(with)f Fr(string)p +4792 y(of)d Fr(pattern)g Fu(are)g(replaced)g(with)f Fr(string)p Fu(.)40 b(If)25 b Fr(pattern)h Fu(is)f(preceded)h(b)m(y)f(`)p -Ft(#)p Fu(')h(\(the)h(third)d(form)630 3853 y(ab)s(o)m(v)m(e\),)32 +Ft(#)p Fu(')h(\(the)h(third)d(form)630 4902 y(ab)s(o)m(v)m(e\),)32 b(it)e(m)m(ust)f(matc)m(h)i(at)f(the)g(b)s(eginning)e(of)i(the)g (expanded)f(v)-5 b(alue)30 b(of)f Fr(parameter)p Fu(.)41 -b(If)630 3962 y Fr(pattern)28 b Fu(is)g(preceded)g(b)m(y)g(`)p +b(If)630 5011 y Fr(pattern)28 b Fu(is)g(preceded)g(b)m(y)g(`)p Ft(\045)p Fu(')g(\(the)h(fourth)e(form)h(ab)s(o)m(v)m(e\),)i(it)f(m)m -(ust)f(matc)m(h)h(at)g(the)f(end)g(of)630 4072 y(the)i(expanded)e(v)-5 +(ust)f(matc)m(h)h(at)g(the)f(end)g(of)630 5121 y(the)i(expanded)e(v)-5 b(alue)30 b(of)g Fr(parameter)p Fu(.)41 b(If)28 b(the)i(expansion)f(of) h Fr(string)37 b Fu(is)29 b(n)m(ull,)h(matc)m(hes)h(of)630 -4181 y Fr(pattern)d Fu(are)g(deleted.)41 b(If)28 b Fr(string)35 +5230 y Fr(pattern)d Fu(are)g(deleted.)41 b(If)28 b Fr(string)35 b Fu(is)28 b(n)m(ull,)h(matc)m(hes)g(of)f Fr(pattern)g -Fu(are)h(deleted)f(and)g(the)g(`)p Ft(/)p Fu(')630 4291 -y(follo)m(wing)k Fr(pattern)e Fu(ma)m(y)h(b)s(e)f(omitted.)630 -4432 y(If)f(the)h Ft(patsub_replacement)25 b Fu(shell)30 -b(option)g(is)f(enabled)h(using)f Ft(shopt)p Fu(,)g(an)m(y)h(unquoted) -630 4542 y(instances)40 b(of)g(`)p Ft(&)p Fu(')g(in)f -Fr(string)48 b Fu(are)40 b(replaced)g(with)g(the)g(matc)m(hing)g(p)s -(ortion)g(of)g Fr(pattern)p Fu(.)630 4651 y(This)30 b(is)g(in)m(tended) -g(to)h(duplicate)g(a)g(common)g Ft(sed)e Fu(idiom.)630 -4792 y(Quoting)g(an)m(y)f(part)h(of)f Fr(string)36 b -Fu(inhibits)28 b(replacemen)m(t)i(in)e(the)g(expansion)h(of)f(the)h -(quoted)630 4902 y(p)s(ortion,)j(including)g(replacemen)m(t)h(strings)f -(stored)g(in)g(shell)g(v)-5 b(ariables.)46 b(Bac)m(kslash)34 -b(will)630 5011 y(escap)s(e)k(`)p Ft(&)p Fu(')g(in)f -Fr(string)8 b Fu(;)42 b(the)c(bac)m(kslash)g(is)g(remo)m(v)m(ed)g(in)g -(order)f(to)h(p)s(ermit)f(a)i(literal)g(`)p Ft(&)p Fu(')630 -5121 y(in)31 b(the)h(replacemen)m(t)h(string.)44 b(Users)32 -b(should)e(tak)m(e)k(care)e(if)g Fr(string)39 b Fu(is)32 -b(double-quoted)f(to)630 5230 y(a)m(v)m(oid)37 b(un)m(w)m(an)m(ted)f -(in)m(teractions)i(b)s(et)m(w)m(een)e(the)g(bac)m(kslash)h(and)e -(double-quoting,)j(since)630 5340 y(bac)m(kslash)31 b(has)f(sp)s(ecial) -h(meaning)f(within)g(double)f(quotes.)42 b(P)m(attern)31 -b(substitution)f(p)s(er-)p eop end +Fu(are)h(deleted)f(and)g(the)g(`)p Ft(/)p Fu(')630 5340 +y(follo)m(wing)k Fr(pattern)e Fu(ma)m(y)h(b)s(e)f(omitted.)p +eop end %%Page: 32 38 TeXDict begin 32 37 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(32)630 299 -y(forms)28 b(the)h(c)m(hec)m(k)i(for)d(unquoted)g(`)p +y(If)29 b(the)h Ft(patsub_replacement)25 b Fu(shell)30 +b(option)g(is)f(enabled)h(using)f Ft(shopt)p Fu(,)g(an)m(y)h(unquoted) +630 408 y(instances)40 b(of)g(`)p Ft(&)p Fu(')g(in)f +Fr(string)48 b Fu(are)40 b(replaced)g(with)g(the)g(matc)m(hing)g(p)s +(ortion)g(of)g Fr(pattern)p Fu(.)630 518 y(This)30 b(is)g(in)m(tended)g +(to)h(duplicate)g(a)g(common)g Ft(sed)e Fu(idiom.)630 +648 y(Quoting)g(an)m(y)f(part)h(of)f Fr(string)36 b Fu(inhibits)28 +b(replacemen)m(t)i(in)e(the)g(expansion)h(of)f(the)h(quoted)630 +757 y(p)s(ortion,)j(including)g(replacemen)m(t)h(strings)f(stored)g(in) +g(shell)g(v)-5 b(ariables.)46 b(Bac)m(kslash)34 b(will)630 +867 y(escap)s(e)k(`)p Ft(&)p Fu(')g(in)f Fr(string)8 +b Fu(;)42 b(the)c(bac)m(kslash)g(is)g(remo)m(v)m(ed)g(in)g(order)f(to)h +(p)s(ermit)f(a)i(literal)g(`)p Ft(&)p Fu(')630 976 y(in)31 +b(the)h(replacemen)m(t)h(string.)44 b(Users)32 b(should)e(tak)m(e)k +(care)e(if)g Fr(string)39 b Fu(is)32 b(double-quoted)f(to)630 +1086 y(a)m(v)m(oid)37 b(un)m(w)m(an)m(ted)f(in)m(teractions)i(b)s(et)m +(w)m(een)e(the)g(bac)m(kslash)h(and)e(double-quoting,)j(since)630 +1196 y(bac)m(kslash)31 b(has)f(sp)s(ecial)h(meaning)f(within)g(double)f +(quotes.)42 b(P)m(attern)31 b(substitution)f(p)s(er-)630 +1305 y(forms)e(the)h(c)m(hec)m(k)i(for)d(unquoted)g(`)p Ft(&)p Fu(')h(after)g(expanding)g Fr(string)p Fu(,)g(so)g(users)f -(should)g(ensure)630 408 y(to)33 b(prop)s(erly)e(quote)i(an)m(y)f(o)s +(should)g(ensure)630 1415 y(to)33 b(prop)s(erly)e(quote)i(an)m(y)f(o)s (ccurrences)g(of)h(`)p Ft(&)p Fu(')f(they)g(w)m(an)m(t)h(to)g(b)s(e)f -(tak)m(en)h(literally)h(in)e(the)630 518 y(replacemen)m(t)k(and)e +(tak)m(en)h(literally)h(in)e(the)630 1524 y(replacemen)m(t)k(and)e (ensure)g(an)m(y)h(instances)g(of)g(`)p Ft(&)p Fu(')f(they)h(w)m(an)m -(t)g(to)h(b)s(e)e(replaced)h(are)g(un-)630 628 y(quoted.)630 -756 y(F)-8 b(or)31 b(instance,)870 883 y Ft(var=abcdef)870 -993 y(rep='&)46 b(')870 1103 y(echo)h(${var/abc/&)d(})870 -1212 y(echo)j("${var/abc/&)d(}")870 1322 y(echo)j(${var/abc/$rep})870 -1431 y(echo)g("${var/abc/$rep}")630 1559 y Fu(will)31 +(t)g(to)h(b)s(e)e(replaced)h(are)g(un-)630 1634 y(quoted.)630 +1763 y(F)-8 b(or)31 b(instance,)870 1893 y Ft(var=abcdef)870 +2002 y(rep='&)46 b(')870 2112 y(echo)h(${var/abc/&)d(})870 +2222 y(echo)j("${var/abc/&)d(}")870 2331 y(echo)j(${var/abc/$rep})870 +2441 y(echo)g("${var/abc/$rep}")630 2570 y Fu(will)31 b(displa)m(y)f(four)g(lines)h(of)f Ft(")p Fu(ab)s(c)g(def)p -Ft(")p Fu(,)g(while)870 1687 y Ft(var=abcdef)870 1797 -y(rep='&)46 b(')870 1906 y(echo)h(${var/abc/\\&)d(})870 -2016 y(echo)j("${var/abc/\\&)d(}")870 2125 y(echo)j(${var/abc/"&)d("}) -870 2235 y(echo)j(${var/abc/"$rep"})630 2363 y Fu(will)34 +Ft(")p Fu(,)g(while)870 2700 y Ft(var=abcdef)870 2809 +y(rep='&)46 b(')870 2919 y(echo)h(${var/abc/\\&)d(})870 +3029 y(echo)j("${var/abc/\\&)d(}")870 3138 y(echo)j(${var/abc/"&)d("}) +870 3248 y(echo)j(${var/abc/"$rep"})630 3377 y Fu(will)34 b(displa)m(y)g(four)g(lines)g(of)g Ft(")p Fu(&)f(def)p Ft(")p Fu(.)51 b(Lik)m(e)35 b(the)f(pattern)g(remo)m(v)-5 -b(al)35 b(op)s(erators,)g(double)630 2472 y(quotes)23 +b(al)35 b(op)s(erators,)g(double)630 3487 y(quotes)23 b(surrounding)c(the)k(replacemen)m(t)g(string)f(quote)h(the)f(expanded) -f(c)m(haracters,)26 b(while)630 2582 y(double)43 b(quotes)i(enclosing)f +f(c)m(haracters,)26 b(while)630 3597 y(double)43 b(quotes)i(enclosing)f (the)g(en)m(tire)h(parameter)f(substitution)f(do)h(not,)k(since)c(the) -630 2692 y(expansion)e(is)h(p)s(erformed)e(in)h(a)h(con)m(text)h(that)f +630 3706 y(expansion)e(is)h(p)s(erformed)e(in)h(a)h(con)m(text)h(that)f (do)s(esn't)f(tak)m(e)i(an)m(y)f(enclosing)g(double)630 -2801 y(quotes)31 b(in)m(to)g(accoun)m(t.)630 2929 y(Since)24 +3816 y(quotes)31 b(in)m(to)g(accoun)m(t.)630 3945 y(Since)24 b(bac)m(kslash)i(can)e(escap)s(e)h(`)p Ft(&)p Fu(',)h(it)f(can)g(also)h (escap)s(e)f(a)f(bac)m(kslash)i(in)e(the)g(replacemen)m(t)630 -3039 y(string.)39 b(This)26 b(means)g(that)h(`)p Ft(\\\\)p +4055 y(string.)39 b(This)26 b(means)g(that)h(`)p Ft(\\\\)p Fu(')g(will)f(insert)h(a)f(literal)i(bac)m(kslash)f(in)m(to)h(the)e -(replacemen)m(t,)630 3148 y(so)31 b(these)f(t)m(w)m(o)i -Ft(echo)d Fu(commands)870 3276 y Ft(var=abcdef)870 3386 -y(rep='\\\\&xyz')870 3495 y(echo)47 b(${var/abc/\\\\&xyz})870 -3605 y(echo)g(${var/abc/$rep})630 3733 y Fu(will)31 b(b)s(oth)e(output) -h(`)p Ft(\\abcxyzdef)p Fu('.)630 3861 y(It)g(should)g(rarely)g(b)s(e)g +(replacemen)m(t,)630 4164 y(so)31 b(these)f(t)m(w)m(o)i +Ft(echo)d Fu(commands)870 4294 y Ft(var=abcdef)870 4403 +y(rep='\\\\&xyz')870 4513 y(echo)47 b(${var/abc/\\\\&xyz})870 +4623 y(echo)g(${var/abc/$rep})630 4752 y Fu(will)31 b(b)s(oth)e(output) +h(`)p Ft(\\abcxyzdef)p Fu('.)630 4882 y(It)g(should)g(rarely)g(b)s(e)g (necessary)h(to)g(enclose)h(only)e Fr(string)38 b Fu(in)30 -b(double)g(quotes.)630 3988 y(If)j(the)h Ft(nocasematch)d +b(double)g(quotes.)630 5011 y(If)j(the)h Ft(nocasematch)d Fu(shell)i(option)h(\(see)h(the)f(description)f(of)h -Ft(shopt)e Fu(in)i(Section)g(4.3.2)630 4098 y([The)23 -b(Shopt)g(Builtin],)j(page)e(71\))h(is)e(enabled,)i(the)f(matc)m(h)g -(is)g(p)s(erformed)e(without)h(regard)630 4208 y(to)31 +Ft(shopt)e Fu(in)i(Section)g(4.3.2)630 5121 y([The)23 +b(Shopt)g(Builtin],)j(page)e(73\))h(is)e(enabled,)i(the)f(matc)m(h)g +(is)g(p)s(erformed)e(without)h(regard)630 5230 y(to)31 b(the)f(case)h(of)g(alphab)s(etic)f(c)m(haracters.)42 b(If)30 b Fr(parameter)37 b Fu(is)30 b(`)p Ft(@)p Fu(')g(or)g(`)p -Ft(*)p Fu(',)h(the)f(substitution)630 4317 y(op)s(eration)g(is)f +Ft(*)p Fu(',)h(the)f(substitution)630 5340 y(op)s(eration)g(is)f (applied)g(to)h(eac)m(h)g(p)s(ositional)g(parameter)g(in)e(turn,)h(and) -g(the)g(expansion)g(is)630 4427 y(the)i(resultan)m(t)h(list.)45 -b(If)30 b Fr(parameter)39 b Fu(is)31 b(an)g(arra)m(y)h(v)-5 -b(ariable)32 b(subscripted)e(with)h(`)p Ft(@)p Fu(')g(or)h(`)p -Ft(*)p Fu(',)630 4536 y(the)e(substitution)g(op)s(eration)h(is)f -(applied)g(to)h(eac)m(h)h(mem)m(b)s(er)e(of)g(the)g(arra)m(y)h(in)f -(turn,)g(and)630 4646 y(the)h(expansion)f(is)g(the)h(resultan)m(t)g -(list.)150 4792 y Ft(${)p Fj(parameter)p Ft(^)p Fj(pattern)p -Ft(})150 4902 y(${)p Fj(parameter)p Ft(^^)p Fj(pattern)p -Ft(})150 5011 y(${)p Fj(parameter)p Ft(,)p Fj(pattern)p -Ft(})150 5121 y(${)p Fj(parameter)p Ft(,,)p Fj(pattern)p -Ft(})630 5230 y Fu(This)36 b(expansion)g(mo)s(di\014es)g(the)g(case)i -(of)f(alphab)s(etic)g(c)m(haracters)h(in)e Fr(parameter)p -Fu(.)59 b(The)630 5340 y Fr(pattern)33 b Fu(is)g(expanded)e(to)j(pro)s -(duce)d(a)j(pattern)e(just)g(as)h(in)g(\014lename)g(expansion.)47 -b(Eac)m(h)p eop end +g(the)g(expansion)g(is)p eop end %%Page: 33 39 TeXDict begin 33 38 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(33)630 299 -y(c)m(haracter)32 b(in)e(the)g(expanded)f(v)-5 b(alue)31 -b(of)f Fr(parameter)37 b Fu(is)30 b(tested)h(against)h -Fr(pattern)p Fu(,)e(and,)g(if)630 408 y(it)j(matc)m(hes)h(the)g -(pattern,)f(its)h(case)g(is)f(con)m(v)m(erted.)49 b(The)33 -b(pattern)g(should)f(not)h(attempt)630 518 y(to)e(matc)m(h)g(more)g -(than)f(one)h(c)m(haracter.)630 650 y(The)f(`)p Ft(^)p -Fu(')g(op)s(erator)g(con)m(v)m(erts)i(lo)m(w)m(ercase)g(letters)g(matc) -m(hing)f Fr(pattern)f Fu(to)h(upp)s(ercase;)f(the)630 -760 y(`)p Ft(,)p Fu(')25 b(op)s(erator)f(con)m(v)m(erts)i(matc)m(hing)g -(upp)s(ercase)d(letters)j(to)f(lo)m(w)m(ercase.)41 b(The)24 -b(`)p Ft(^^)p Fu(')g(and)g(`)p Ft(,,)p Fu(')630 870 y(expansions)31 -b(con)m(v)m(ert)i(eac)m(h)g(matc)m(hed)f(c)m(haracter)h(in)e(the)h -(expanded)f(v)-5 b(alue;)32 b(the)g(`)p Ft(^)p Fu(')g(and)630 -979 y(`)p Ft(,)p Fu(')24 b(expansions)f(matc)m(h)i(and)e(con)m(v)m(ert) -j(only)d(the)h(\014rst)f(c)m(haracter)j(in)d(the)h(expanded)f(v)-5 -b(alue.)630 1089 y(If)30 b Fr(pattern)g Fu(is)h(omitted,)g(it)g(is)g -(treated)g(lik)m(e)h(a)f(`)p Ft(?)p Fu(',)f(whic)m(h)g(matc)m(hes)i(ev) -m(ery)f(c)m(haracter.)630 1221 y(If)23 b Fr(parameter)31 -b Fu(is)24 b(`)p Ft(@)p Fu(')g(or)g(`)p Ft(*)p Fu(',)h(the)f(case)h(mo) -s(di\014cation)f(op)s(eration)g(is)g(applied)g(to)g(eac)m(h)h(p)s(osi-) -630 1331 y(tional)h(parameter)e(in)h(turn,)f(and)g(the)h(expansion)f -(is)g(the)h(resultan)m(t)g(list.)40 b(If)23 b Fr(parameter)32 -b Fu(is)630 1440 y(an)e(arra)m(y)g(v)-5 b(ariable)31 +y(the)31 b(resultan)m(t)h(list.)45 b(If)30 b Fr(parameter)39 +b Fu(is)31 b(an)g(arra)m(y)h(v)-5 b(ariable)32 b(subscripted)e(with)h +(`)p Ft(@)p Fu(')g(or)h(`)p Ft(*)p Fu(',)630 408 y(the)e(substitution)g +(op)s(eration)h(is)f(applied)g(to)h(eac)m(h)h(mem)m(b)s(er)e(of)g(the)g +(arra)m(y)h(in)f(turn,)g(and)630 518 y(the)h(expansion)f(is)g(the)h +(resultan)m(t)g(list.)150 671 y Ft(${)p Fj(parameter)p +Ft(^)p Fj(pattern)p Ft(})150 781 y(${)p Fj(parameter)p +Ft(^^)p Fj(pattern)p Ft(})150 891 y(${)p Fj(parameter)p +Ft(,)p Fj(pattern)p Ft(})150 1000 y(${)p Fj(parameter)p +Ft(,,)p Fj(pattern)p Ft(})630 1110 y Fu(This)36 b(expansion)g(mo)s +(di\014es)g(the)g(case)i(of)f(alphab)s(etic)g(c)m(haracters)h(in)e +Fr(parameter)p Fu(.)59 b(The)630 1219 y Fr(pattern)33 +b Fu(is)g(expanded)e(to)j(pro)s(duce)d(a)j(pattern)e(just)g(as)h(in)g +(\014lename)g(expansion.)47 b(Eac)m(h)630 1329 y(c)m(haracter)32 +b(in)e(the)g(expanded)f(v)-5 b(alue)31 b(of)f Fr(parameter)37 +b Fu(is)30 b(tested)h(against)h Fr(pattern)p Fu(,)e(and,)g(if)630 +1439 y(it)j(matc)m(hes)h(the)g(pattern,)f(its)h(case)g(is)f(con)m(v)m +(erted.)49 b(The)33 b(pattern)g(should)f(not)h(attempt)630 +1548 y(to)e(matc)m(h)g(more)g(than)f(one)h(c)m(haracter.)630 +1680 y(The)f(`)p Ft(^)p Fu(')g(op)s(erator)g(con)m(v)m(erts)i(lo)m(w)m +(ercase)g(letters)g(matc)m(hing)f Fr(pattern)f Fu(to)h(upp)s(ercase;)f +(the)630 1789 y(`)p Ft(,)p Fu(')25 b(op)s(erator)f(con)m(v)m(erts)i +(matc)m(hing)g(upp)s(ercase)d(letters)j(to)f(lo)m(w)m(ercase.)41 +b(The)24 b(`)p Ft(^^)p Fu(')g(and)g(`)p Ft(,,)p Fu(')630 +1899 y(expansions)31 b(con)m(v)m(ert)i(eac)m(h)g(matc)m(hed)f(c)m +(haracter)h(in)e(the)h(expanded)f(v)-5 b(alue;)32 b(the)g(`)p +Ft(^)p Fu(')g(and)630 2008 y(`)p Ft(,)p Fu(')24 b(expansions)f(matc)m +(h)i(and)e(con)m(v)m(ert)j(only)d(the)h(\014rst)f(c)m(haracter)j(in)d +(the)h(expanded)f(v)-5 b(alue.)630 2118 y(If)30 b Fr(pattern)g +Fu(is)h(omitted,)g(it)g(is)g(treated)g(lik)m(e)h(a)f(`)p +Ft(?)p Fu(',)f(whic)m(h)g(matc)m(hes)i(ev)m(ery)f(c)m(haracter.)630 +2250 y(If)23 b Fr(parameter)31 b Fu(is)24 b(`)p Ft(@)p +Fu(')g(or)g(`)p Ft(*)p Fu(',)h(the)f(case)h(mo)s(di\014cation)f(op)s +(eration)g(is)g(applied)g(to)g(eac)m(h)h(p)s(osi-)630 +2359 y(tional)h(parameter)e(in)h(turn,)f(and)g(the)h(expansion)f(is)g +(the)h(resultan)m(t)g(list.)40 b(If)23 b Fr(parameter)32 +b Fu(is)630 2469 y(an)e(arra)m(y)g(v)-5 b(ariable)31 b(subscripted)d(with)i(`)p Ft(@)p Fu(')g(or)f(`)p Ft(*)p Fu(',)i(the)f(case)g(mo)s(di\014cation)h(op)s(eration)f(is)630 -1550 y(applied)d(to)g(eac)m(h)h(mem)m(b)s(er)e(of)h(the)g(arra)m(y)g +2578 y(applied)d(to)g(eac)m(h)h(mem)m(b)s(er)e(of)h(the)g(arra)m(y)g (in)g(turn,)g(and)f(the)h(expansion)f(is)h(the)g(resultan)m(t)630 -1660 y(list.)150 1815 y Ft(${)p Fj(parameter)p Ft(@)p -Fj(operator)p Ft(})630 1924 y Fu(The)h(expansion)h(is)f(either)h(a)g +2688 y(list.)150 2841 y Ft(${)p Fj(parameter)p Ft(@)p +Fj(operator)p Ft(})630 2951 y Fu(The)h(expansion)h(is)f(either)h(a)g (transformation)g(of)g(the)g(v)-5 b(alue)29 b(of)g Fr(parameter)35 -b Fu(or)29 b(informa-)630 2034 y(tion)e(ab)s(out)f Fr(parameter)33 +b Fu(or)29 b(informa-)630 3061 y(tion)e(ab)s(out)f Fr(parameter)33 b Fu(itself,)28 b(dep)s(ending)c(on)i(the)h(v)-5 b(alue)26 b(of)h Fr(op)s(erator)p Fu(.)39 b(Eac)m(h)27 b Fr(op)s(erator)630 -2144 y Fu(is)j(a)h(single)g(letter:)630 2299 y Ft(U)432 +3170 y Fu(is)j(a)h(single)g(letter:)630 3324 y Ft(U)432 b Fu(The)31 b(expansion)g(is)g(a)g(string)h(that)f(is)h(the)f(v)-5 b(alue)32 b(of)f Fr(parameter)38 b Fu(with)31 b(lo)m(w-)1110 -2408 y(ercase)g(alphab)s(etic)g(c)m(haracters)h(con)m(v)m(erted)g(to)f -(upp)s(ercase.)630 2564 y Ft(u)432 b Fu(The)34 b(expansion)g(is)g(a)h +3433 y(ercase)g(alphab)s(etic)g(c)m(haracters)h(con)m(v)m(erted)g(to)f +(upp)s(ercase.)630 3587 y Ft(u)432 b Fu(The)34 b(expansion)g(is)g(a)h (string)f(that)h(is)g(the)f(v)-5 b(alue)35 b(of)f Fr(parameter)42 -b Fu(with)34 b(the)1110 2673 y(\014rst)c(c)m(haracter)i(con)m(v)m +b Fu(with)34 b(the)1110 3696 y(\014rst)c(c)m(haracter)i(con)m(v)m (erted)f(to)h(upp)s(ercase,)d(if)i(it)g(is)f(alphab)s(etic.)630 -2829 y Ft(L)432 b Fu(The)33 b(expansion)h(is)g(a)g(string)g(that)h(is)f +3850 y Ft(L)432 b Fu(The)33 b(expansion)h(is)g(a)g(string)g(that)h(is)f (the)g(v)-5 b(alue)34 b(of)g Fr(parameter)41 b Fu(with)34 -b(up-)1110 2938 y(p)s(ercase)c(alphab)s(etic)h(c)m(haracters)h(con)m(v) -m(erted)g(to)f(lo)m(w)m(ercase.)630 3093 y Ft(Q)432 b +b(up-)1110 3959 y(p)s(ercase)c(alphab)s(etic)h(c)m(haracters)h(con)m(v) +m(erted)g(to)f(lo)m(w)m(ercase.)630 4113 y Ft(Q)432 b Fu(The)30 b(expansion)h(is)g(a)g(string)f(that)i(is)f(the)g(v)-5 b(alue)31 b(of)g Fr(parameter)37 b Fu(quoted)31 b(in)1110 -3203 y(a)g(format)f(that)h(can)g(b)s(e)f(reused)f(as)i(input.)630 -3358 y Ft(E)432 b Fu(The)27 b(expansion)g(is)g(a)g(string)h(that)f(is)h +4222 y(a)g(format)f(that)h(can)g(b)s(e)f(reused)f(as)i(input.)630 +4376 y Ft(E)432 b Fu(The)27 b(expansion)g(is)g(a)g(string)h(that)f(is)h (the)f(v)-5 b(alue)28 b(of)f Fr(parameter)34 b Fu(with)27 -b(bac)m(k-)1110 3468 y(slash)e(escap)s(e)h(sequences)f(expanded)g(as)g +b(bac)m(k-)1110 4485 y(slash)e(escap)s(e)h(sequences)f(expanded)g(as)g (with)g(the)h Ft($'...)o(')e Fu(quoting)i(mec)m(h-)1110 -3577 y(anism.)630 3733 y Ft(P)432 b Fu(The)22 b(expansion)h(is)g(a)g +4595 y(anism.)630 4748 y Ft(P)432 b Fu(The)22 b(expansion)h(is)g(a)g (string)g(that)g(is)g(the)g(result)g(of)g(expanding)f(the)h(v)-5 -b(alue)24 b(of)1110 3842 y Fr(parameter)31 b Fu(as)24 +b(alue)24 b(of)1110 4858 y Fr(parameter)31 b Fu(as)24 b(if)f(it)h(w)m(ere)g(a)g(prompt)f(string)h(\(see)g(Section)h(6.9)g -([Con)m(trolling)1110 3952 y(the)31 b(Prompt],)f(page)h(104\).)630 -4107 y Ft(A)432 b Fu(The)24 b(expansion)g(is)g(a)h(string)f(in)g(the)g +([Con)m(trolling)1110 4967 y(the)31 b(Prompt],)f(page)h(107\).)630 +5121 y Ft(A)432 b Fu(The)24 b(expansion)g(is)g(a)h(string)f(in)g(the)g (form)g(of)h(an)f(assignmen)m(t)h(statemen)m(t)h(or)1110 -4217 y Ft(declare)h Fu(command)i(that,)h(if)f(ev)-5 b(aluated,)31 -b(will)e(recreate)i Fr(parameter)36 b Fu(with)1110 4326 -y(its)31 b(attributes)g(and)e(v)-5 b(alue.)630 4482 y -Ft(K)432 b Fu(Pro)s(duces)33 b(a)i(p)s(ossibly-quoted)e(v)m(ersion)i +5230 y Ft(declare)h Fu(command)i(that,)h(if)f(ev)-5 b(aluated,)31 +b(will)e(recreate)i Fr(parameter)36 b Fu(with)1110 5340 +y(its)31 b(attributes)g(and)e(v)-5 b(alue.)p eop end +%%Page: 34 40 +TeXDict begin 34 39 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(34)630 299 +y Ft(K)432 b Fu(Pro)s(duces)33 b(a)i(p)s(ossibly-quoted)e(v)m(ersion)i (of)f(the)h(v)-5 b(alue)34 b(of)h Fr(parameter)p Fu(,)g(ex-)1110 -4591 y(cept)46 b(that)h(it)f(prin)m(ts)f(the)h(v)-5 b(alues)47 +408 y(cept)46 b(that)h(it)f(prin)m(ts)f(the)h(v)-5 b(alues)47 b(of)f(indexed)f(and)g(asso)s(ciativ)m(e)k(arra)m(ys)1110 -4701 y(as)37 b(a)g(sequence)f(of)h(quoted)g(k)m(ey-v)-5 +518 y(as)37 b(a)g(sequence)f(of)h(quoted)g(k)m(ey-v)-5 b(alue)38 b(pairs)e(\(see)h(Section)h(6.7)f([Arra)m(ys],)1110 -4810 y(page)31 b(100\).)630 4966 y Ft(a)432 b Fu(The)30 +628 y(page)29 b(103\).)41 b(The)28 b(k)m(eys)g(and)f(v)-5 +b(alues)29 b(are)f(quoted)g(in)f(a)i(format)f(that)g(can)h(b)s(e)1110 +737 y(reused)h(as)g(input.)630 896 y Ft(a)432 b Fu(The)30 b(expansion)g(is)g(a)h(string)f(consisting)h(of)g(\015ag)g(v)-5 -b(alues)30 b(represen)m(ting)h Fr(pa-)1110 5075 y(rameter)7 -b Fu('s)31 b(attributes.)630 5230 y Ft(k)432 b Fu(Lik)m(e)29 +b(alues)30 b(represen)m(ting)h Fr(pa-)1110 1006 y(rameter)7 +b Fu('s)31 b(attributes.)630 1165 y Ft(k)432 b Fu(Lik)m(e)29 b(the)g(`)p Ft(K)p Fu(')g(transformation,)g(but)f(expands)g(the)g(k)m -(eys)i(and)d(v)-5 b(alues)29 b(of)g(in-)1110 5340 y(dexed)c(and)f(asso) +(eys)i(and)d(v)-5 b(alues)29 b(of)g(in-)1110 1275 y(dexed)c(and)f(asso) s(ciativ)m(e)k(arra)m(ys)d(to)h(separate)f(w)m(ords)g(after)g(w)m(ord)g -(splitting.)p eop end -%%Page: 34 40 -TeXDict begin 34 39 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(34)630 299 -y(If)29 b Fr(parameter)37 b Fu(is)30 b(`)p Ft(@)p Fu(')g(or)g(`)p -Ft(*)p Fu(',)g(the)g(op)s(eration)g(is)g(applied)f(to)i(eac)m(h)g(p)s -(ositional)f(parameter)630 408 y(in)24 b(turn,)g(and)f(the)h(expansion) -g(is)g(the)g(resultan)m(t)h(list.)39 b(If)23 b Fr(parameter)31 -b Fu(is)24 b(an)g(arra)m(y)g(v)-5 b(ariable)630 518 y(subscripted)24 -b(with)h(`)p Ft(@)p Fu(')h(or)g(`)p Ft(*)p Fu(',)h(the)e(op)s(eration)h -(is)g(applied)f(to)h(eac)m(h)h(mem)m(b)s(er)e(of)h(the)f(arra)m(y)630 -628 y(in)30 b(turn,)g(and)f(the)i(expansion)f(is)h(the)f(resultan)m(t)h -(list.)630 761 y(The)c(result)h(of)g(the)f(expansion)h(is)g(sub)5 +(splitting.)630 1434 y(If)k Fr(parameter)37 b Fu(is)30 +b(`)p Ft(@)p Fu(')g(or)g(`)p Ft(*)p Fu(',)g(the)g(op)s(eration)g(is)g +(applied)f(to)i(eac)m(h)g(p)s(ositional)f(parameter)630 +1543 y(in)24 b(turn,)g(and)f(the)h(expansion)g(is)g(the)g(resultan)m(t) +h(list.)39 b(If)23 b Fr(parameter)31 b Fu(is)24 b(an)g(arra)m(y)g(v)-5 +b(ariable)630 1653 y(subscripted)24 b(with)h(`)p Ft(@)p +Fu(')h(or)g(`)p Ft(*)p Fu(',)h(the)e(op)s(eration)h(is)g(applied)f(to)h +(eac)m(h)h(mem)m(b)s(er)e(of)h(the)f(arra)m(y)630 1763 +y(in)30 b(turn,)g(and)f(the)i(expansion)f(is)h(the)f(resultan)m(t)h +(list.)630 1897 y(The)c(result)h(of)g(the)f(expansion)h(is)g(sub)5 b(ject)27 b(to)h(w)m(ord)g(splitting)g(and)f(\014lename)h(expansion)630 -870 y(as)j(describ)s(ed)e(b)s(elo)m(w.)150 1067 y Fk(3.5.4)63 -b(Command)41 b(Substitution)150 1214 y Fu(Command)f(substitution)h -(allo)m(ws)i(the)e(output)g(of)h(a)f(command)g(to)h(replace)g(the)g -(command)f(itself.)150 1324 y(Command)29 b(substitution)h(o)s(ccurs)h -(when)e(a)i(command)f(is)g(enclosed)h(as)g(follo)m(ws:)390 -1457 y Ft($\()p Fj(command)p Ft(\))150 1590 y Fu(or)390 -1724 y Ft(`)p Fj(command)p Ft(`)150 1857 y Fu(Bash)20 -b(p)s(erforms)f(the)i(expansion)f(b)m(y)g(executing)i -Fr(command)h Fu(in)d(a)h(subshell)e(en)m(vironmen)m(t)i(and)f -(replacing)150 1966 y(the)40 b(command)g(substitution)f(with)h(the)g -(standard)f(output)g(of)h(the)g(command,)i(with)e(an)m(y)g(trailing)150 -2076 y(newlines)e(deleted.)64 b(Em)m(b)s(edded)37 b(newlines)h(are)g -(not)g(deleted,)j(but)d(they)g(ma)m(y)h(b)s(e)e(remo)m(v)m(ed)i(during) -150 2186 y(w)m(ord)30 b(splitting.)42 b(The)30 b(command)g -(substitution)h Ft($\(cat)e Fj(file)p Ft(\))g Fu(can)h(b)s(e)g -(replaced)h(b)m(y)g(the)f(equiv)-5 b(alen)m(t)150 2295 -y(but)30 b(faster)g Ft($\(<)g Fj(file)p Ft(\))p Fu(.)275 -2428 y(When)j(the)i(old-st)m(yle)h(bac)m(kquote)f(form)f(of)g -(substitution)g(is)g(used,)h(bac)m(kslash)f(retains)h(its)f(literal)150 -2538 y(meaning)k(except)h(when)e(follo)m(w)m(ed)j(b)m(y)e(`)p -Ft($)p Fu(',)j(`)p Ft(`)p Fu(',)f(or)e(`)p Ft(\\)p Fu('.)64 -b(The)38 b(\014rst)f(bac)m(kquote)j(not)e(preceded)g(b)m(y)g(a)150 -2648 y(bac)m(kslash)k(terminates)f(the)h(command)e(substitution.)72 -b(When)41 b(using)f(the)i Ft($\()p Fj(command)p Ft(\))c -Fu(form,)43 b(all)150 2757 y(c)m(haracters)32 b(b)s(et)m(w)m(een)f(the) -f(paren)m(theses)h(mak)m(e)g(up)f(the)g(command;)h(none)f(are)h -(treated)g(sp)s(ecially)-8 b(.)275 2890 y(Command)22 -b(substitutions)g(ma)m(y)i(b)s(e)e(nested.)39 b(T)-8 -b(o)23 b(nest)g(when)f(using)h(the)g(bac)m(kquoted)h(form,)g(escap)s(e) -150 3000 y(the)31 b(inner)e(bac)m(kquotes)j(with)e(bac)m(kslashes.)275 -3133 y(If)e(the)i(substitution)e(app)s(ears)h(within)g(double)f -(quotes,)i(w)m(ord)f(splitting)h(and)f(\014lename)g(expansion)150 -3243 y(are)i(not)f(p)s(erformed)f(on)h(the)h(results.)150 -3440 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)150 3587 -y Fu(Arithmetic)25 b(expansion)g(allo)m(ws)g(the)g(ev)-5 +2007 y(as)j(describ)s(ed)e(b)s(elo)m(w.)150 2206 y Fk(3.5.4)63 +b(Command)41 b(Substitution)150 2352 y Fu(Command)24 +b(substitution)h(allo)m(ws)h(the)f(output)g(of)g(a)g(command)g(to)h +(replace)g(the)f(command)g(itself.)39 b(The)150 2462 +y(standard)30 b(form)f(of)i(command)f(substitution)g(o)s(ccurs)g(when)g +(a)g(command)h(is)f(enclosed)h(as)g(follo)m(ws:)390 2596 +y Ft($\()p Fj(command)p Ft(\))150 2731 y Fu(or)f(\(deprecated\))390 +2865 y Ft(`)p Fj(command)p Ft(`.)150 3000 y Fu(Bash)24 +b(p)s(erforms)e(command)i(substitution)f(b)m(y)h(executing)h +Fr(command)i Fu(in)c(a)h(subshell)f(en)m(vironmen)m(t)i(and)150 +3109 y(replacing)35 b(the)f(command)g(substitution)g(with)f(the)i +(standard)e(output)g(of)i(the)f(command,)h(with)f(an)m(y)150 +3219 y(trailing)j(newlines)f(deleted.)58 b(Em)m(b)s(edded)34 +b(newlines)i(are)g(not)g(deleted,)j(but)c(they)h(ma)m(y)h(b)s(e)e(remo) +m(v)m(ed)150 3328 y(during)40 b(w)m(ord)i(splitting.)75 +b(The)41 b(command)g(substitution)g Ft($\(cat)29 b Fj(file)p +Ft(\))40 b Fu(can)i(b)s(e)f(replaced)h(b)m(y)g(the)150 +3438 y(equiv)-5 b(alen)m(t)32 b(but)d(faster)i Ft($\(<)f +Fj(file)p Ft(\))p Fu(.)275 3572 y(With)h(the)h(old-st)m(yle)h(bac)m +(kquote)g(form)e(of)h(substitution,)f(bac)m(kslash)h(retains)g(its)g +(literal)h(meaning)150 3682 y(except)k(when)d(follo)m(w)m(ed)k(b)m(y)d +(`)p Ft($)p Fu(',)j(`)p Ft(`)p Fu(',)f(or)f(`)p Ft(\\)p +Fu('.)57 b(The)35 b(\014rst)g(bac)m(kquote)i(not)f(preceded)g(b)m(y)f +(a)h(bac)m(kslash)150 3791 y(terminates)k(the)e(command)h +(substitution.)65 b(When)39 b(using)f(the)h Ft($\()p +Fj(command)p Ft(\))c Fu(form,)41 b(all)e(c)m(haracters)150 +3901 y(b)s(et)m(w)m(een)31 b(the)g(paren)m(theses)f(mak)m(e)i(up)d(the) +h(command;)h(none)f(are)h(treated)g(sp)s(ecially)-8 b(.)275 +4035 y(There)29 b(is)i(an)f(alternate)i(form)e(of)h(command)f +(substitution:)390 4170 y Ft(${)p Fj(c)47 b(command)p +Ft(;)e(})150 4304 y Fu(whic)m(h)38 b(executes)i Fr(command)i +Fu(in)d(the)g(curren)m(t)f(execution)i(en)m(vironmen)m(t)f(and)f +(captures)h(its)g(output,)150 4414 y(again)31 b(with)f(trailing)i +(newlines)e(remo)m(v)m(ed.)275 4548 y(The)40 b(c)m(haracter)i +Fr(c)47 b Fu(follo)m(wing)42 b(the)f(op)s(en)g(brace)g(m)m(ust)f(b)s(e) +h(a)g(space,)j(tab,)g(newline,)g(or)d(`)p Ft(|)p Fu(',)j(and)150 +4658 y(the)39 b(close)i(brace)e(m)m(ust)g(b)s(e)g(in)g(a)g(p)s(osition) +h(where)e(a)i(reserv)m(ed)f(w)m(ord)g(ma)m(y)h(app)s(ear)e(\(i.e.,)43 +b(preceded)150 4767 y(b)m(y)32 b(a)g(command)g(terminator)h(suc)m(h)e +(as)h(semicolon\).)47 b(Bash)32 b(allo)m(ws)i(the)e(close)h(brace)f(to) +h(b)s(e)e(joined)h(to)150 4877 y(the)f(remaining)g(c)m(haracters)h(in)e +(the)h(w)m(ord)f(without)h(b)s(eing)f(follo)m(w)m(ed)i(b)m(y)f(a)g +(shell)f(metac)m(haracter)k(as)d(a)150 4986 y(reserv)m(ed)g(w)m(ord)f +(w)m(ould)g(usually)g(require.)275 5121 y(An)m(y)j(side)h(e\013ects)h +(of)e Fr(command)k Fu(tak)m(e)e(e\013ect)h(immediately)e(in)g(the)f +(curren)m(t)h(execution)h(en)m(viron-)150 5230 y(men)m(t)d(and)g(p)s +(ersist)f(in)g(the)h(curren)m(t)g(en)m(vironmen)m(t)h(after)f(the)g +(command)g(completes)h(\(e.g.,)h(the)e Ft(exit)150 5340 +y Fu(builtin)e(will)h(exit)g(the)g(shell\).)p eop end +%%Page: 35 41 +TeXDict begin 35 40 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(35)275 299 +y(This)31 b(t)m(yp)s(e)i(of)g(command)f(substitution)g(sup)s +(er\014cially)g(resem)m(bles)h(executing)h(an)f(unnamed)e(shell)150 +408 y(function:)42 b(lo)s(cal)33 b(v)-5 b(ariables)32 +b(are)g(created)g(as)g(when)e(a)i(shell)g(function)f(is)g(executing,)i +(and)e(the)h Ft(return)150 518 y Fu(builtin)k(forces)i +Fr(command)i Fu(to)e(complete;)j(ho)m(w)m(ev)m(er,)f(the)d(rest)g(of)g +(the)h(execution)g(en)m(vironmen)m(t,)h(in-)150 628 y(cluding)30 +b(the)h(p)s(ositional)g(parameters,)g(is)f(shared)g(with)g(the)h +(caller.)275 766 y(If)26 b(the)g(\014rst)g(c)m(haracter)i(follo)m(wing) +g(the)f(op)s(en)f(brace)h(is)f(a)h(`)p Ft(|)p Fu(',)h(the)f(construct)g +(expands)e(to)j(the)e(v)-5 b(alue)150 875 y(of)24 b(the)g +Ft(REPLY)e Fu(shell)i(v)-5 b(ariable)24 b(after)g Fr(command)j +Fu(executes,)g(without)d(remo)m(ving)g(an)m(y)g(trailing)h(newlines,) +150 985 y(and)h(the)g(standard)f(output)h(of)g Fr(command)k +Fu(remains)c(the)g(same)h(as)f(in)g(the)g(calling)i(shell.)39 +b(Bash)27 b(creates)150 1094 y Ft(REPLY)33 b Fu(as)j(an)e +(initially-unset)j(lo)s(cal)f(v)-5 b(ariable)35 b(when)f +Fr(command)39 b Fu(executes,)e(and)d(restores)i Ft(REPLY)d +Fu(to)150 1204 y(the)i(v)-5 b(alue)34 b(it)h(had)f(b)s(efore)g(the)h +(command)f(substitution)g(after)h Fr(command)j Fu(completes,)f(as)d +(with)h(an)m(y)150 1314 y(lo)s(cal)d(v)-5 b(ariable.)275 +1451 y(F)d(or)23 b(example,)i(this)e(construct)g(expands)f(to)i(`)p +Ft(12345)p Fu(',)f(and)f(lea)m(v)m(es)j(the)e(shell)g(v)-5 +b(ariable)24 b Ft(X)e Fu(unc)m(hanged)150 1561 y(in)30 +b(the)h(curren)m(t)f(execution)h(en)m(vironmen)m(t:)390 +1809 y Ft(${)47 b(local)g(X=12345)e(;)j(echo)e($X;)h(})150 +1946 y Fu(\(not)28 b(declaring)g Ft(X)f Fu(as)g(lo)s(cal)i(w)m(ould)e +(mo)s(dify)f(its)i(v)-5 b(alue)27 b(in)g(the)h(curren)m(t)f(en)m +(vironmen)m(t,)i(as)e(with)g(normal)150 2056 y(shell)38 +b(function)g(execution\),)43 b(while)38 b(this)g(construct)h(do)s(es)f +(not)g(require)g(an)m(y)h(output)f(to)h(expand)e(to)150 +2166 y(`)p Ft(12345)p Fu(':)390 2304 y Ft(${|)47 b(REPLY=12345;)d(})150 +2441 y Fu(and)30 b(restores)h Ft(REPLY)e Fu(to)i(the)f(v)-5 +b(alue)31 b(it)g(had)f(b)s(efore)g(the)g(command)g(substitution.)275 +2579 y(Command)22 b(substitutions)g(ma)m(y)i(b)s(e)e(nested.)39 +b(T)-8 b(o)23 b(nest)g(when)f(using)h(the)g(bac)m(kquoted)h(form,)g +(escap)s(e)150 2689 y(the)31 b(inner)e(bac)m(kquotes)j(with)e(bac)m +(kslashes.)275 2827 y(If)g(the)h(substitution)g(app)s(ears)f(within)h +(double)f(quotes,)i(Bash)f(do)s(es)g(not)g(p)s(erform)f(w)m(ord)g +(splitting)150 2936 y(and)g(\014lename)g(expansion)h(on)f(the)g +(results.)150 3139 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)150 +3286 y Fu(Arithmetic)25 b(expansion)g(allo)m(ws)g(the)g(ev)-5 b(aluation)26 b(of)f(an)f(arithmetic)i(expression)e(and)g(the)g -(substitution)150 3696 y(of)31 b(the)f(result.)41 b(The)30 -b(format)g(for)g(arithmetic)i(expansion)e(is:)390 3829 -y Ft($\(\()47 b Fj(expression)e Ft(\)\))275 3963 y Fu(The)34 +(substitution)150 3396 y(of)31 b(the)f(result.)41 b(The)30 +b(format)g(for)g(arithmetic)i(expansion)e(is:)390 3534 +y Ft($\(\()47 b Fj(expression)e Ft(\)\))275 3672 y Fu(The)34 b Fr(expression)h Fu(undergo)s(es)f(the)h(same)h(expansions)e(as)i(if)f -(it)g(w)m(ere)h(within)e(double)h(quotes,)i(but)150 4072 +(it)g(w)m(ere)h(within)e(double)h(quotes,)i(but)150 3781 y(double)g(quote)g(c)m(haracters)i(in)d Fr(expression)h Fu(are)g(not)g(treated)h(sp)s(ecially)g(and)f(are)g(remo)m(v)m(ed.)61 -b(All)38 b(to-)150 4182 y(k)m(ens)c(in)f(the)h(expression)f(undergo)g +b(All)38 b(to-)150 3891 y(k)m(ens)c(in)f(the)h(expression)f(undergo)g (parameter)h(and)f(v)-5 b(ariable)34 b(expansion,)h(command)e -(substitution,)150 4291 y(and)41 b(quote)i(remo)m(v)-5 +(substitution,)150 4000 y(and)41 b(quote)i(remo)m(v)-5 b(al.)76 b(The)41 b(result)h(is)g(treated)h(as)f(the)g(arithmetic)h -(expression)f(to)g(b)s(e)f(ev)-5 b(aluated.)150 4401 +(expression)f(to)g(b)s(e)f(ev)-5 b(aluated.)150 4110 y(Arithmetic)31 b(expansions)f(ma)m(y)h(b)s(e)f(nested.)275 -4534 y(The)k(ev)-5 b(aluation)37 b(is)f(p)s(erformed)e(according)i(to)g +4248 y(The)k(ev)-5 b(aluation)37 b(is)f(p)s(erformed)e(according)i(to)g (the)g(rules)f(listed)h(b)s(elo)m(w)g(\(see)g(Section)g(6.5)h([Shell) -150 4644 y(Arithmetic],)32 b(page)f(98\).)42 b(If)30 -b(the)h(expression)f(is)g(in)m(v)-5 b(alid,)32 b(Bash)e(prin)m(ts)g(a)h -(message)g(indicating)h(failure)150 4753 y(to)f(the)g(standard)e(error) -h(and)g(no)g(substitution)g(o)s(ccurs.)150 4950 y Fk(3.5.6)63 -b(Pro)s(cess)42 b(Substitution)150 5097 y Fu(Pro)s(cess)33 +150 4357 y(Arithmetic],)29 b(page)e(101\).)41 b(If)27 +b(the)f(expression)h(is)f(in)m(v)-5 b(alid,)29 b(Bash)d(prin)m(ts)g(a)i +(message)f(indicating)h(failure)150 4467 y(to)j(the)g(standard)e(error) +h(and)g(no)g(substitution)g(o)s(ccurs.)150 4670 y Fk(3.5.6)63 +b(Pro)s(cess)42 b(Substitution)150 4817 y Fu(Pro)s(cess)33 b(substitution)g(allo)m(ws)i(a)e(pro)s(cess's)g(input)f(or)h(output)g (to)h(b)s(e)f(referred)f(to)i(using)f(a)g(\014lename.)150 -5207 y(It)d(tak)m(es)i(the)f(form)f(of)390 5340 y Ft(<\()p +4926 y(It)d(tak)m(es)i(the)f(form)f(of)390 5064 y Ft(<\()p +Fj(list)p Ft(\))150 5202 y Fu(or)390 5340 y Ft(>\()p Fj(list)p Ft(\))p eop end -%%Page: 35 41 -TeXDict begin 35 40 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(35)150 299 -y(or)390 426 y Ft(>\()p Fj(list)p Ft(\))150 553 y Fu(The)28 -b(pro)s(cess)h Fr(list)j Fu(is)d(run)e(async)m(hronously)-8 +%%Page: 36 42 +TeXDict begin 36 41 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(36)150 299 +y(The)28 b(pro)s(cess)h Fr(list)j Fu(is)d(run)e(async)m(hronously)-8 b(,)30 b(and)e(its)i(input)e(or)h(output)f(app)s(ears)h(as)g(a)g -(\014lename.)41 b(This)150 663 y(\014lename)25 b(is)g(passed)g(as)g(an) +(\014lename.)41 b(This)150 408 y(\014lename)25 b(is)g(passed)g(as)g(an) g(argumen)m(t)h(to)g(the)f(curren)m(t)g(command)g(as)g(the)g(result)g -(of)g(the)h(expansion.)38 b(If)150 772 y(the)28 b Ft(>\()p +(of)g(the)h(expansion.)38 b(If)150 518 y(the)28 b Ft(>\()p Fj(list)p Ft(\))d Fu(form)i(is)g(used,)h(writing)f(to)h(the)g(\014le)f (will)h(pro)m(vide)g(input)e(for)h Fr(list)p Fu(.)41 b(If)26 b(the)i Ft(<\()p Fj(list)p Ft(\))d Fu(form)150 -882 y(is)g(used,)g(the)f(\014le)h(passed)f(as)h(an)f(argumen)m(t)h +628 y(is)g(used,)g(the)f(\014le)h(passed)f(as)h(an)f(argumen)m(t)h (should)e(b)s(e)h(read)h(to)g(obtain)g(the)f(output)g(of)h -Fr(list)p Fu(.)40 b(Note)25 b(that)150 991 y(no)33 b(space)g(ma)m(y)g +Fr(list)p Fu(.)40 b(Note)25 b(that)150 737 y(no)33 b(space)g(ma)m(y)g (app)s(ear)f(b)s(et)m(w)m(een)i(the)f Ft(<)f Fu(or)h Ft(>)f Fu(and)g(the)h(left)h(paren)m(thesis,)f(otherwise)h(the)f -(construct)150 1101 y(w)m(ould)j(b)s(e)g(in)m(terpreted)g(as)h(a)f +(construct)150 847 y(w)m(ould)j(b)s(e)g(in)m(terpreted)g(as)h(a)f (redirection.)59 b(Pro)s(cess)36 b(substitution)g(is)h(supp)s(orted)d -(on)i(systems)g(that)150 1210 y(supp)s(ort)29 b(named)h(pip)s(es)f(\()p +(on)i(systems)g(that)150 956 y(supp)s(ort)29 b(named)h(pip)s(es)f(\()p Fm(fif)n(o)p Fu(s\))h(or)h(the)f Ft(/dev/fd)f Fu(metho)s(d)h(of)g -(naming)g(op)s(en)g(\014les.)275 1337 y(When)36 b(a)m(v)-5 +(naming)g(op)s(en)g(\014les.)275 1083 y(When)36 b(a)m(v)-5 b(ailable,)40 b(pro)s(cess)c(substitution)h(is)f(p)s(erformed)f(sim)m -(ultaneously)i(with)g(parameter)g(and)150 1447 y(v)-5 +(ultaneously)i(with)g(parameter)g(and)150 1193 y(v)-5 b(ariable)31 b(expansion,)g(command)f(substitution,)g(and)g(arithmetic) -i(expansion.)150 1631 y Fk(3.5.7)63 b(W)-10 b(ord)41 -b(Splitting)150 1778 y Fu(The)30 b(shell)h(scans)g(the)g(results)f(of)h +i(expansion.)150 1377 y Fk(3.5.7)63 b(W)-10 b(ord)41 +b(Splitting)150 1524 y Fu(The)30 b(shell)h(scans)g(the)g(results)f(of)h (parameter)g(expansion,)g(command)g(substitution,)g(and)f(arithmetic) -150 1888 y(expansion)g(that)h(did)f(not)g(o)s(ccur)h(within)e(double)h -(quotes)h(for)f(w)m(ord)g(splitting.)275 2015 y(The)e(shell)g(treats)i +150 1634 y(expansion)g(that)h(did)f(not)g(o)s(ccur)h(within)e(double)h +(quotes)h(for)f(w)m(ord)g(splitting.)275 1761 y(The)e(shell)g(treats)i (eac)m(h)g(c)m(haracter)g(of)f Ft($IFS)e Fu(as)i(a)g(delimiter,)h(and)e -(splits)g(the)h(results)f(of)h(the)g(other)150 2125 y(expansions)22 -b(in)m(to)i(w)m(ords)e(using)h(these)g(c)m(haracters)h(as)f(\014eld)f -(terminators.)39 b(If)22 b Ft(IFS)g Fu(is)h(unset,)h(or)e(its)h(v)-5 -b(alue)150 2234 y(is)36 b(exactly)j Ft(<space><tab><newline>)p -Fu(,)32 b(the)37 b(default,)h(then)e(sequences)h(of)67 -b Ft(<space>)p Fu(,)36 b Ft(<tab>)p Fu(,)h(and)150 2344 -y Ft(<newline>)28 b Fu(at)k(the)f(b)s(eginning)f(and)h(end)f(of)h(the)g -(results)g(of)g(the)g(previous)g(expansions)f(are)i(ignored,)150 -2453 y(and)k(an)m(y)h(sequence)h(of)f Ft(IFS)f Fu(c)m(haracters)i(not)f -(at)h(the)f(b)s(eginning)f(or)h(end)f(serv)m(es)h(to)h(delimit)f(w)m -(ords.)150 2563 y(If)43 b Ft(IFS)f Fu(has)h(a)h(v)-5 -b(alue)43 b(other)h(than)f(the)g(default,)k(then)c(sequences)h(of)f -(the)h(whitespace)f(c)m(haracters)150 2672 y Ft(space)p -Fu(,)29 b Ft(tab)p Fu(,)h(and)g Ft(newline)e Fu(are)j(ignored)g(at)g -(the)f(b)s(eginning)g(and)g(end)g(of)g(the)h(w)m(ord,)f(as)h(long)g(as) -g(the)150 2782 y(whitespace)c(c)m(haracter)h(is)f(in)f(the)g(v)-5 -b(alue)27 b(of)g Ft(IFS)e Fu(\(an)i Ft(IFS)e Fu(whitespace)i(c)m -(haracter\).)42 b(An)m(y)26 b(c)m(haracter)i(in)150 2892 -y Ft(IFS)c Fu(that)h(is)g(not)f Ft(IFS)g Fu(whitespace,)j(along)f(with) -e(an)m(y)h(adjacen)m(t)h Ft(IFS)e Fu(whitespace)h(c)m(haracters,)i -(delimits)150 3001 y(a)k(\014eld.)40 b(A)31 b(sequence)g(of)f -Ft(IFS)g Fu(whitespace)h(c)m(haracters)h(is)e(also)h(treated)h(as)f(a)f -(delimiter.)42 b(If)30 b(the)g(v)-5 b(alue)150 3111 y(of)31 -b Ft(IFS)e Fu(is)h(n)m(ull,)h(no)f(w)m(ord)g(splitting)h(o)s(ccurs.)275 -3238 y(Explicit)21 b(n)m(ull)g(argumen)m(ts)g(\()p Ft("")g +(splits)g(the)h(results)f(of)h(the)g(other)150 1870 y(expansions)h(in)m +(to)h(w)m(ords)f(using)g(these)h(c)m(haracters)h(as)e(\014eld)g +(terminators.)275 1998 y(If)38 b Ft(IFS)g Fu(is)g(unset,)j(or)e(its)g +(v)-5 b(alue)39 b(is)g(exactly)h Ft(<space><tab><newline>)p +Fu(,)c(the)j(default,)i(then)d(se-)150 2107 y(quences)27 +b(of)h Ft(space)p Fu(,)f Ft(tab)p Fu(,)g(and)g Ft(newline)e +Fu(at)j(the)f(b)s(eginning)g(and)g(end)f(of)i(the)f(results)g(of)h(the) +f(previous)150 2217 y(expansions)38 b(are)g(ignored,)i(and)d(an)m(y)i +(sequence)f(of)g Ft(IFS)f Fu(c)m(haracters)j(not)e(at)g(the)g(b)s +(eginning)g(or)g(end)150 2326 y(serv)m(es)e(to)h(delimit)f(w)m(ords.)56 +b(If)35 b Ft(IFS)g Fu(has)h(a)g(v)-5 b(alue)36 b(other)g(than)f(the)h +(default,)i(then)d(sequences)h(of)g(the)150 2436 y(whitespace)i(c)m +(haracters)h Ft(space)p Fu(,)e Ft(tab)p Fu(,)h(and)f +Ft(newline)e Fu(are)j(ignored)f(at)h(the)f(b)s(eginning)g(and)f(end)h +(of)150 2545 y(the)h(w)m(ord,)j(as)d(long)h(as)g(the)f(whitespace)h(c)m +(haracter)h(is)e(in)g(the)h(v)-5 b(alue)38 b(of)h Ft(IFS)e +Fu(\(an)i Ft(IFS)e Fu(whitespace)150 2655 y(c)m(haracter\).)47 +b(An)m(y)32 b(c)m(haracter)i(in)d Ft(IFS)g Fu(that)i(is)f(not)g +Ft(IFS)f Fu(whitespace,)i(along)g(with)e(an)m(y)i(adjacen)m(t)g +Ft(IFS)150 2765 y Fu(whitespace)41 b(c)m(haracters,)j(delimits)d(a)g +(\014eld.)70 b(A)40 b(sequence)h(of)g Ft(IFS)e Fu(whitespace)i(c)m +(haracters)h(is)e(also)150 2874 y(treated)31 b(as)g(a)g(delimiter.)275 +3001 y(If)22 b(the)h(v)-5 b(alue)23 b(of)f Ft(IFS)g Fu(is)h(n)m(ull,)h +(no)f(w)m(ord)f(splitting)h(o)s(ccurs.)38 b(If)22 b Ft(IFS)g +Fu(is)h(unset,)h(w)m(ord)e(splitting)h(b)s(eha)m(v)m(es)150 +3111 y(as)31 b(if)f(it)h(con)m(tained)g(the)g(default)g(v)-5 +b(alue)30 b Ft(<space><tab><newline>)p Fu(.)275 3238 +y(Explicit)21 b(n)m(ull)g(argumen)m(ts)g(\()p Ft("")g Fu(or)g Ft('')p Fu(\))f(are)h(retained)h(and)e(passed)g(to)i(commands)e (as)i(empt)m(y)f(strings.)150 3347 y(Unquoted)37 b(implicit)i(n)m(ull)f (argumen)m(ts,)i(resulting)d(from)g(the)h(expansion)g(of)g(parameters)f @@ -10688,7 +10776,7 @@ b(that)g(if)g(no)f(expansion)g(o)s(ccurs,)g(no)h(splitting)g(is)f(p)s (erformed.)150 4207 y Fk(3.5.8)63 b(Filename)41 b(Expansion)150 4354 y Fu(After)30 b(w)m(ord)f(splitting,)i(unless)d(the)i Ft(-f)f Fu(option)h(has)f(b)s(een)g(set)h(\(see)g(Section)h(4.3.1)g -([The)e(Set)h(Builtin],)150 4463 y(page)d(67\),)i(Bash)d(scans)h(eac)m +([The)e(Set)h(Builtin],)150 4463 y(page)d(69\),)i(Bash)d(scans)h(eac)m (h)h(w)m(ord)e(for)g(the)h(c)m(haracters)g(`)p Ft(*)p Fu(',)h(`)p Ft(?)p Fu(',)g(and)e(`)p Ft([)p Fu('.)39 b(If)26 b(one)h(of)g(these)f(c)m(haracters)150 4573 y(app)s(ears,)34 @@ -10696,7 +10784,7 @@ b(and)f(is)g(not)h(quoted,)h(then)e(the)h(w)m(ord)f(is)h(regarded)f(as) h(a)g Fr(pattern)p Fu(,)h(and)e(replaced)h(with)f(an)150 4682 y(alphab)s(etically)41 b(sorted)e(list)h(of)g(\014lenames)f(matc)m (hing)i(the)e(pattern)g(\(see)i(Section)f(3.5.8.1)i([P)m(attern)150 -4792 y(Matc)m(hing],)e(page)e(36\).)60 b(If)36 b(no)h(matc)m(hing)g +4792 y(Matc)m(hing],)e(page)e(37\).)60 b(If)36 b(no)h(matc)m(hing)g (\014lenames)g(are)g(found,)g(and)f(the)g(shell)h(option)g Ft(nullglob)150 4902 y Fu(is)k(disabled,)i(the)f(w)m(ord)e(is)h(left)h (unc)m(hanged.)72 b(If)40 b(the)h Ft(nullglob)e Fu(option)i(is)g(set,)k @@ -10708,9 +10796,9 @@ g(remo)m(v)m(ed.)60 b(If)36 b(the)h Ft(failglob)d Fu(shell)j(option)g y Ft(nocaseglob)e Fu(is)j(enabled,)i(the)e(matc)m(h)h(is)f(p)s (erformed)e(without)i(regard)g(to)h(the)f(case)h(of)f(alphab)s(etic)150 5340 y(c)m(haracters.)p eop end -%%Page: 36 42 -TeXDict begin 36 41 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(36)275 299 +%%Page: 37 43 +TeXDict begin 37 42 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(37)275 299 y(When)23 b(a)h(pattern)f(is)h(used)f(for)g(\014lename)h(expansion,)h (the)e(c)m(haracter)i(`)p Ft(.)p Fu(')f(at)g(the)g(start)g(of)g(a)g (\014lename)150 408 y(or)f(immediately)i(follo)m(wing)g(a)f(slash)f(m)m @@ -10721,386 +10809,393 @@ Ft(.)p Fu(')g(and)g(`)p Ft(..)p Fu(',)h(the)f(pattern)g(m)m(ust)g(b)s (egin)f(with)h(`)p Ft(.)p Fu(')g(\(for)150 628 y(example,)42 b(`)p Ft(.?)p Fu('\),)f(ev)m(en)f(if)f Ft(dotglob)d Fu(is)j(set.)67 b(If)38 b(the)h Ft(globskipdots)d Fu(shell)j(option)g(is)g(enabled,)i -(the)150 737 y(\014lenames)33 b(`)p Ft(.)p Fu(')g(and)f(`)p -Ft(..)p Fu(')h(are)g(nev)m(er)g(matc)m(hed,)h(ev)m(en)g(if)e(the)h -(pattern)g(b)s(egins)f(with)h(a)g(`)p Ft(.)p Fu('.)48 -b(When)33 b(not)150 847 y(matc)m(hing)e(\014lenames,)g(the)g(`)p -Ft(.)p Fu(')f(c)m(haracter)i(is)f(not)f(treated)i(sp)s(ecially)-8 -b(.)275 985 y(When)30 b(matc)m(hing)i(a)f(\014lename,)h(the)f(slash)f -(c)m(haracter)j(m)m(ust)d(alw)m(a)m(ys)j(b)s(e)d(matc)m(hed)h -(explicitly)i(b)m(y)e(a)150 1095 y(slash)d(in)f(the)h(pattern,)h(but)e -(in)h(other)g(matc)m(hing)h(con)m(texts)h(it)e(can)g(b)s(e)g(matc)m -(hed)g(b)m(y)g(a)g(sp)s(ecial)h(pattern)150 1205 y(c)m(haracter)j(as)f -(describ)s(ed)e(b)s(elo)m(w)h(\(see)i(Section)f(3.5.8.1)i([P)m(attern)e -(Matc)m(hing],)i(page)e(36\).)275 1343 y(See)d(the)g(description)g(of)g -Ft(shopt)e Fu(in)i(Section)g(4.3.2)i([The)e(Shopt)f(Builtin],)i(page)g -(71,)g(for)f(a)g(descrip-)150 1453 y(tion)j(of)f(the)h -Ft(nocaseglob)p Fu(,)d Ft(nullglob)p Fu(,)g Ft(globskipdots)p -Fu(,)f Ft(failglob)p Fu(,)i(and)h Ft(dotglob)e Fu(options.)275 -1592 y(The)36 b Ft(GLOBIGNORE)d Fu(shell)k(v)-5 b(ariable)37 +(the)150 737 y(\014lenames)23 b(`)p Ft(.)p Fu(')g(and)g(`)p +Ft(..)p Fu(')g(nev)m(er)g(matc)m(h,)j(ev)m(en)e(if)f(the)g(pattern)g(b) +s(egins)g(with)g(a)g(`)p Ft(.)p Fu('.)39 b(When)22 b(not)i(matc)m(hing) +150 847 y(\014lenames,)31 b(the)f(`)p Ft(.)p Fu(')h(c)m(haracter)h(is)e +(not)h(treated)g(sp)s(ecially)-8 b(.)275 976 y(When)30 +b(matc)m(hing)i(a)f(\014lename,)h(the)f(slash)f(c)m(haracter)j(m)m(ust) +d(alw)m(a)m(ys)j(b)s(e)d(matc)m(hed)h(explicitly)i(b)m(y)e(a)150 +1085 y(slash)d(in)f(the)h(pattern,)h(but)e(in)h(other)g(matc)m(hing)h +(con)m(texts)h(it)e(can)g(b)s(e)g(matc)m(hed)g(b)m(y)g(a)g(sp)s(ecial)h +(pattern)150 1195 y(c)m(haracter)j(as)f(describ)s(ed)e(b)s(elo)m(w)h +(\(see)i(Section)f(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i(page)e +(37\).)275 1324 y(See)d(the)g(description)g(of)g Ft(shopt)e +Fu(in)i(Section)g(4.3.2)i([The)e(Shopt)f(Builtin],)i(page)g(73,)g(for)f +(a)g(descrip-)150 1433 y(tion)j(of)f(the)h Ft(nocaseglob)p +Fu(,)d Ft(nullglob)p Fu(,)g Ft(globskipdots)p Fu(,)f +Ft(failglob)p Fu(,)i(and)h Ft(dotglob)e Fu(options.)275 +1562 y(The)36 b Ft(GLOBIGNORE)d Fu(shell)k(v)-5 b(ariable)37 b(ma)m(y)g(b)s(e)f(used)g(to)h(restrict)g(the)g(set)g(of)g(\014le)f -(names)h(matc)m(hing)150 1701 y(a)42 b(pattern.)74 b(If)41 +(names)h(matc)m(hing)150 1672 y(a)42 b(pattern.)74 b(If)41 b Ft(GLOBIGNORE)e Fu(is)i(set,)k(eac)m(h)e(matc)m(hing)f(\014le)g(name) -f(that)h(also)h(matc)m(hes)f(one)g(of)g(the)150 1811 +f(that)h(also)h(matc)m(hes)f(one)g(of)g(the)150 1782 y(patterns)34 b(in)g Ft(GLOBIGNORE)d Fu(is)k(remo)m(v)m(ed)g(from)f (the)g(list)h(of)f(matc)m(hes.)54 b(If)33 b(the)i Ft(nocaseglob)c -Fu(option)k(is)150 1920 y(set,)c(the)e(matc)m(hing)i(against)g(the)f +Fu(option)k(is)150 1891 y(set,)c(the)e(matc)m(hing)i(against)g(the)f (patterns)f(in)h Ft(GLOBIGNORE)c Fu(is)k(p)s(erformed)e(without)i -(regard)f(to)i(case.)150 2030 y(The)d(\014lenames)h Ft(.)g +(regard)f(to)i(case.)150 2001 y(The)d(\014lenames)h Ft(.)g Fu(and)f Ft(..)h Fu(are)g(alw)m(a)m(ys)h(ignored)f(when)f Ft(GLOBIGNORE)f Fu(is)i(set)g(and)f(not)h(n)m(ull.)41 -b(Ho)m(w)m(ev)m(er,)150 2139 y(setting)30 b Ft(GLOBIGNORE)d +b(Ho)m(w)m(ev)m(er,)150 2110 y(setting)30 b Ft(GLOBIGNORE)d Fu(to)j(a)f(non-n)m(ull)g(v)-5 b(alue)30 b(has)f(the)g(e\013ect)i(of)f (enabling)f(the)h Ft(dotglob)d Fu(shell)i(option,)150 -2249 y(so)j(all)h(other)f(\014lenames)g(b)s(eginning)f(with)h(a)g(`)p +2220 y(so)j(all)h(other)f(\014lenames)g(b)s(eginning)f(with)h(a)g(`)p Ft(.)p Fu(')g(will)h(matc)m(h.)46 b(T)-8 b(o)32 b(get)h(the)f(old)g(b)s -(eha)m(vior)g(of)h(ignoring)150 2359 y(\014lenames)c(b)s(eginning)f +(eha)m(vior)g(of)h(ignoring)150 2330 y(\014lenames)c(b)s(eginning)f (with)h(a)h(`)p Ft(.)p Fu(',)f(mak)m(e)h(`)p Ft(.*)p Fu(')f(one)h(of)f(the)g(patterns)g(in)g Ft(GLOBIGNORE)p -Fu(.)37 b(The)29 b Ft(dotglob)150 2468 y Fu(option)i(is)f(disabled)g -(when)g Ft(GLOBIGNORE)d Fu(is)k(unset.)150 2672 y Fk(3.5.8.1)63 -b(P)m(attern)40 b(Matc)m(hing)150 2819 y Fu(An)m(y)24 -b(c)m(haracter)h(that)f(app)s(ears)f(in)g(a)h(pattern,)i(other)e(than)f -(the)h(sp)s(ecial)g(pattern)g(c)m(haracters)h(describ)s(ed)150 -2928 y(b)s(elo)m(w,)31 b(matc)m(hes)g(itself.)42 b(The)29 -b Fm(nul)h Fu(c)m(haracter)i(ma)m(y)e(not)h(o)s(ccur)f(in)g(a)h -(pattern.)40 b(A)31 b(bac)m(kslash)g(escap)s(es)150 3038 -y(the)38 b(follo)m(wing)g(c)m(haracter;)43 b(the)37 b(escaping)i(bac)m -(kslash)e(is)h(discarded)f(when)f(matc)m(hing.)63 b(The)36 -b(sp)s(ecial)150 3147 y(pattern)30 b(c)m(haracters)i(m)m(ust)f(b)s(e)e -(quoted)i(if)f(they)h(are)f(to)i(b)s(e)d(matc)m(hed)i(literally)-8 -b(.)275 3286 y(The)29 b(sp)s(ecial)i(pattern)g(c)m(haracters)h(ha)m(v)m -(e)f(the)g(follo)m(wing)h(meanings:)150 3452 y Ft(*)432 -b Fu(Matc)m(hes)31 b(an)m(y)e(string,)h(including)f(the)g(n)m(ull)g -(string.)41 b(When)29 b(the)g Ft(globstar)e Fu(shell)i(option)630 -3561 y(is)37 b(enabled,)h(and)e(`)p Ft(*)p Fu(')h(is)g(used)f(in)g(a)h -(\014lename)g(expansion)g(con)m(text,)j(t)m(w)m(o)e(adjacen)m(t)g(`)p -Ft(*)p Fu('s)630 3671 y(used)f(as)g(a)h(single)g(pattern)g(will)f(matc) -m(h)i(all)f(\014les)f(and)g(zero)h(or)g(more)f(directories)i(and)630 -3780 y(sub)s(directories.)g(If)25 b(follo)m(w)m(ed)j(b)m(y)e(a)g(`)p +Fu(.)37 b(The)29 b Ft(dotglob)150 2439 y Fu(option)i(is)f(disabled)g +(when)g Ft(GLOBIGNORE)d Fu(is)k(unset.)275 2568 y(After)26 +b(the)h(pattern)g(is)f(expanded)g(and)g(matc)m(hed)h(against)h +(\014lenames,)f(the)g(v)-5 b(alue)27 b(of)g(the)f Ft(GLOBSORT)150 +2678 y Fu(v)-5 b(ariable)46 b(con)m(trols)g(ho)m(w)f(the)g(results)f +(are)h(sorted,)k(as)c(describ)s(ed)f(b)s(elo)m(w)h(\(see)h(Section)g +(5.2)g([Bash)150 2787 y(V)-8 b(ariables],)32 b(page)f(81\).)150 +2975 y Fk(3.5.8.1)63 b(P)m(attern)40 b(Matc)m(hing)150 +3122 y Fu(An)m(y)24 b(c)m(haracter)h(that)f(app)s(ears)f(in)g(a)h +(pattern,)i(other)e(than)f(the)h(sp)s(ecial)g(pattern)g(c)m(haracters)h +(describ)s(ed)150 3232 y(b)s(elo)m(w,)31 b(matc)m(hes)g(itself.)42 +b(The)29 b Fm(nul)h Fu(c)m(haracter)i(ma)m(y)e(not)h(o)s(ccur)f(in)g(a) +h(pattern.)40 b(A)31 b(bac)m(kslash)g(escap)s(es)150 +3342 y(the)38 b(follo)m(wing)g(c)m(haracter;)43 b(the)37 +b(escaping)i(bac)m(kslash)e(is)h(discarded)f(when)f(matc)m(hing.)63 +b(The)36 b(sp)s(ecial)150 3451 y(pattern)30 b(c)m(haracters)i(m)m(ust)f +(b)s(e)e(quoted)i(if)f(they)h(are)f(to)i(b)s(e)d(matc)m(hed)i +(literally)-8 b(.)275 3580 y(The)29 b(sp)s(ecial)i(pattern)g(c)m +(haracters)h(ha)m(v)m(e)f(the)g(follo)m(wing)h(meanings:)150 +3728 y Ft(*)432 b Fu(Matc)m(hes)31 b(an)m(y)e(string,)h(including)f +(the)g(n)m(ull)g(string.)41 b(When)29 b(the)g Ft(globstar)e +Fu(shell)i(option)630 3838 y(is)37 b(enabled,)h(and)e(`)p +Ft(*)p Fu(')h(is)g(used)f(in)g(a)h(\014lename)g(expansion)g(con)m +(text,)j(t)m(w)m(o)e(adjacen)m(t)g(`)p Ft(*)p Fu('s)630 +3948 y(used)f(as)g(a)h(single)g(pattern)g(will)f(matc)m(h)i(all)f +(\014les)f(and)g(zero)h(or)g(more)f(directories)i(and)630 +4057 y(sub)s(directories.)g(If)25 b(follo)m(w)m(ed)j(b)m(y)e(a)g(`)p Ft(/)p Fu(',)h(t)m(w)m(o)g(adjacen)m(t)h(`)p Ft(*)p Fu('s)e(will)g -(matc)m(h)h(only)f(directories)630 3890 y(and)k(sub)s(directories.)150 -4054 y Ft(?)432 b Fu(Matc)m(hes)32 b(an)m(y)f(single)g(c)m(haracter.) -150 4217 y Ft([...)o(])241 b Fu(Matc)m(hes)27 b(an)m(y)e(one)g(of)g +(matc)m(h)h(only)f(directories)630 4167 y(and)k(sub)s(directories.)150 +4315 y Ft(?)432 b Fu(Matc)m(hes)32 b(an)m(y)f(single)g(c)m(haracter.) +150 4463 y Ft([...)o(])241 b Fu(Matc)m(hes)27 b(an)m(y)e(one)g(of)g (the)g(enclosed)g(c)m(haracters.)41 b(A)25 b(pair)f(of)h(c)m(haracters) -i(separated)e(b)m(y)g(a)630 4327 y(h)m(yphen)k(denotes)i(a)g +i(separated)e(b)m(y)g(a)630 4573 y(h)m(yphen)k(denotes)i(a)g Fr(range)g(expression)p Fu(;)f(an)m(y)h(c)m(haracter)h(that)f(falls)g -(b)s(et)m(w)m(een)g(those)g(t)m(w)m(o)630 4436 y(c)m(haracters,)d +(b)s(et)m(w)m(een)g(those)g(t)m(w)m(o)630 4682 y(c)m(haracters,)d (inclusiv)m(e,)f(using)d(the)h(curren)m(t)f(lo)s(cale's)j(collating)g -(sequence)e(and)f(c)m(haracter)630 4546 y(set,)31 b(is)f(matc)m(hed.)42 +(sequence)e(and)f(c)m(haracter)630 4792 y(set,)31 b(is)f(matc)m(hed.)42 b(If)30 b(the)g(\014rst)g(c)m(haracter)i(follo)m(wing)g(the)e(`)p Ft([)p Fu(')h(is)f(a)h(`)p Ft(!)p Fu(')f(or)g(a)h(`)p -Ft(^)p Fu(')g(then)f(an)m(y)630 4655 y(c)m(haracter)c(not)f(enclosed)g +Ft(^)p Fu(')g(then)f(an)m(y)630 4902 y(c)m(haracter)c(not)f(enclosed)g (is)g(matc)m(hed.)40 b(A)25 b(`)p Fq(\000)p Fu(')f(ma)m(y)i(b)s(e)e -(matc)m(hed)h(b)m(y)f(including)h(it)g(as)g(the)630 4765 +(matc)m(hed)h(b)m(y)f(including)h(it)g(as)g(the)630 5011 y(\014rst)32 b(or)h(last)h(c)m(haracter)h(in)e(the)g(set.)50 b(A)33 b(`)p Ft(])p Fu(')g(ma)m(y)h(b)s(e)e(matc)m(hed)i(b)m(y)f -(including)g(it)g(as)h(the)630 4875 y(\014rst)c(c)m(haracter)j(in)d +(including)g(it)g(as)h(the)630 5121 y(\014rst)c(c)m(haracter)j(in)d (the)h(set.)43 b(The)31 b(sorting)g(order)g(of)g(c)m(haracters)h(in)f -(range)g(expressions,)630 4984 y(and)f(the)h(c)m(haracters)h(included)e +(range)g(expressions,)630 5230 y(and)f(the)h(c)m(haracters)h(included)e (in)h(the)f(range,)i(are)f(determined)f(b)m(y)h(the)g(curren)m(t)f(lo)s -(cale)630 5094 y(and)g(the)g(v)-5 b(alues)31 b(of)g(the)f +(cale)630 5340 y(and)g(the)g(v)-5 b(alues)31 b(of)g(the)f Ft(LC_COLLATE)e Fu(and)h Ft(LC_ALL)g Fu(shell)i(v)-5 -b(ariables,)31 b(if)f(set.)630 5230 y(F)-8 b(or)34 b(example,)g(in)f -(the)g(default)g(C)f(lo)s(cale,)k(`)p Ft([a-dx-z])p Fu(')31 -b(is)i(equiv)-5 b(alen)m(t)34 b(to)g(`)p Ft([abcdxyz])p -Fu('.)630 5340 y(Man)m(y)68 b(lo)s(cales)h(sort)f(c)m(haracters)h(in)e -(dictionary)i(order,)76 b(and)67 b(in)g(these)h(lo)s(cales)p -eop end -%%Page: 37 43 -TeXDict begin 37 42 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(37)630 299 -y(`)p Ft([a-dx-z])p Fu(')36 b(is)i(t)m(ypically)i(not)e(equiv)-5 -b(alen)m(t)39 b(to)g(`)p Ft([abcdxyz])p Fu(';)g(it)g(migh)m(t)f(b)s(e)f -(equiv)-5 b(alen)m(t)630 408 y(to)34 b(`)p Ft([aBbCcDdxYyZz])p -Fu(',)c(for)j(example.)49 b(T)-8 b(o)33 b(obtain)h(the)f(traditional)h -(in)m(terpretation)h(of)630 518 y(ranges)e(in)f(brac)m(k)m(et)i -(expressions,)g(y)m(ou)f(can)g(force)g(the)g(use)f(of)h(the)g(C)f(lo)s -(cale)i(b)m(y)f(setting)630 628 y(the)c Ft(LC_COLLATE)e -Fu(or)i Ft(LC_ALL)f Fu(en)m(vironmen)m(t)i(v)-5 b(ariable)30 -b(to)g(the)f(v)-5 b(alue)30 b(`)p Ft(C)p Fu(',)g(or)f(enable)h(the)630 -737 y Ft(globasciiranges)c Fu(shell)31 b(option.)630 -873 y(Within)23 b(`)p Ft([)p Fu(')h(and)e(`)p Ft(])p -Fu(',)j Fr(c)m(haracter)g(classes)j Fu(can)c(b)s(e)e(sp)s(eci\014ed)h -(using)f(the)i(syn)m(tax)f Ft([:)p Fr(class)t Ft(:])p -Fu(,)630 982 y(where)30 b Fr(class)35 b Fu(is)30 b(one)h(of)f(the)h -(follo)m(wing)h(classes)f(de\014ned)e(in)h(the)h Fm(posix)f -Fu(standard:)870 1118 y Ft(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g -(digit)g(graph)g(lower)870 1227 y(print)g(punct)g(space)f(upper)h(word) -190 b(xdigit)630 1363 y Fu(A)42 b(c)m(haracter)h(class)f(matc)m(hes)h -(an)m(y)f(c)m(haracter)h(b)s(elonging)f(to)g(that)g(class.)75 -b(The)41 b Ft(word)630 1472 y Fu(c)m(haracter)32 b(class)f(matc)m(hes)h +b(ariables,)31 b(if)f(set.)p eop end +%%Page: 38 44 +TeXDict begin 38 43 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(38)630 299 +y(F)-8 b(or)34 b(example,)g(in)f(the)g(default)g(C)f(lo)s(cale,)k(`)p +Ft([a-dx-z])p Fu(')31 b(is)i(equiv)-5 b(alen)m(t)34 b(to)g(`)p +Ft([abcdxyz])p Fu('.)630 408 y(Man)m(y)68 b(lo)s(cales)h(sort)f(c)m +(haracters)h(in)e(dictionary)i(order,)76 b(and)67 b(in)g(these)h(lo)s +(cales)630 518 y(`)p Ft([a-dx-z])p Fu(')36 b(is)i(t)m(ypically)i(not)e +(equiv)-5 b(alen)m(t)39 b(to)g(`)p Ft([abcdxyz])p Fu(';)g(it)g(migh)m +(t)f(b)s(e)f(equiv)-5 b(alen)m(t)630 628 y(to)34 b(`)p +Ft([aBbCcDdxYyZz])p Fu(',)c(for)j(example.)49 b(T)-8 +b(o)33 b(obtain)h(the)f(traditional)h(in)m(terpretation)h(of)630 +737 y(ranges)e(in)f(brac)m(k)m(et)i(expressions,)g(y)m(ou)f(can)g +(force)g(the)g(use)f(of)h(the)g(C)f(lo)s(cale)i(b)m(y)f(setting)630 +847 y(the)c Ft(LC_COLLATE)e Fu(or)i Ft(LC_ALL)f Fu(en)m(vironmen)m(t)i +(v)-5 b(ariable)30 b(to)g(the)f(v)-5 b(alue)30 b(`)p +Ft(C)p Fu(',)g(or)f(enable)h(the)630 956 y Ft(globasciiranges)c +Fu(shell)31 b(option.)630 1093 y(Within)23 b(`)p Ft([)p +Fu(')h(and)e(`)p Ft(])p Fu(',)j Fr(c)m(haracter)g(classes)j +Fu(can)c(b)s(e)e(sp)s(eci\014ed)h(using)f(the)i(syn)m(tax)f +Ft([:)p Fr(class)t Ft(:])p Fu(,)630 1203 y(where)30 b +Fr(class)35 b Fu(is)30 b(one)h(of)f(the)h(follo)m(wing)h(classes)f +(de\014ned)e(in)h(the)h Fm(posix)f Fu(standard:)870 1339 +y Ft(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g(digit)g(graph)g(lower) +870 1449 y(print)g(punct)g(space)f(upper)h(word)190 b(xdigit)630 +1585 y Fu(A)42 b(c)m(haracter)h(class)f(matc)m(hes)h(an)m(y)f(c)m +(haracter)h(b)s(elonging)f(to)g(that)g(class.)75 b(The)41 +b Ft(word)630 1695 y Fu(c)m(haracter)32 b(class)f(matc)m(hes)h (letters,)f(digits,)h(and)d(the)i(c)m(haracter)h(`)p -Ft(_)p Fu('.)630 1608 y(Within)25 b(`)p Ft([)p Fu(')f(and)g(`)p +Ft(_)p Fu('.)630 1831 y(Within)25 b(`)p Ft([)p Fu(')f(and)g(`)p Ft(])p Fu(',)i(an)e Fr(equiv)-5 b(alence)26 b(class)j Fu(can)24 b(b)s(e)g(sp)s(eci\014ed)g(using)g(the)g(syn)m(tax)h -Ft([=)p Fr(c)6 b Ft(=])p Fu(,)630 1717 y(whic)m(h)29 +Ft([=)p Fr(c)6 b Ft(=])p Fu(,)630 1941 y(whic)m(h)29 b(matc)m(hes)i(all)f(c)m(haracters)h(with)e(the)h(same)g(collation)h(w) -m(eigh)m(t)g(\(as)f(de\014ned)e(b)m(y)i(the)630 1827 +m(eigh)m(t)g(\(as)f(de\014ned)e(b)m(y)i(the)630 2051 y(curren)m(t)g(lo)s(cale\))j(as)d(the)h(c)m(haracter)h -Fr(c)p Fu(.)630 1962 y(Within)22 b(`)p Ft([)p Fu(')f(and)g(`)p +Fr(c)p Fu(.)630 2187 y(Within)22 b(`)p Ft([)p Fu(')f(and)g(`)p Ft(])p Fu(',)j(the)d(syn)m(tax)h Ft([.)p Fr(sym)m(b)s(ol)t Ft(.])e Fu(matc)m(hes)i(the)g(collating)i(sym)m(b)s(ol)d -Fr(sym)m(b)s(ol)p Fu(.)275 2125 y(If)i(the)g Ft(extglob)f +Fr(sym)m(b)s(ol)p Fu(.)275 2353 y(If)i(the)g Ft(extglob)f Fu(shell)h(option)h(is)g(enabled)f(using)g(the)h Ft(shopt)e Fu(builtin,)i(the)g(shell)f(recognizes)j(sev)m(eral)150 -2234 y(extended)i(pattern)f(matc)m(hing)i(op)s(erators.)40 +2462 y(extended)i(pattern)f(matc)m(hing)i(op)s(erators.)40 b(In)26 b(the)i(follo)m(wing)h(description,)g(a)e Fr(pattern-list)k -Fu(is)d(a)g(list)g(of)150 2344 y(one)23 b(or)f(more)h(patterns)g +Fu(is)d(a)g(list)g(of)150 2572 y(one)23 b(or)f(more)h(patterns)g (separated)g(b)m(y)f(a)h(`)p Ft(|)p Fu('.)38 b(When)22 b(matc)m(hing)i(\014lenames,)g(the)f Ft(dotglob)e Fu(shell)h(option)150 -2453 y(determines)h(the)h(set)g(of)g(\014lenames)f(that)h(are)g +2682 y(determines)h(the)h(set)g(of)g(\014lenames)f(that)h(are)g (tested,)i(as)d(describ)s(ed)g(ab)s(o)m(v)m(e.)39 b(Comp)s(osite)24 -b(patterns)f(ma)m(y)150 2563 y(b)s(e)30 b(formed)g(using)f(one)i(or)f -(more)h(of)g(the)f(follo)m(wing)i(sub-patterns:)150 2725 -y Ft(?\()p Fj(pattern-list)p Ft(\))630 2835 y Fu(Matc)m(hes)g(zero)f +b(patterns)f(ma)m(y)150 2791 y(b)s(e)30 b(formed)g(using)f(one)i(or)f +(more)h(of)g(the)f(follo)m(wing)i(sub-patterns:)150 2957 +y Ft(?\()p Fj(pattern-list)p Ft(\))630 3066 y Fu(Matc)m(hes)g(zero)f (or)g(one)f(o)s(ccurrence)h(of)f(the)h(giv)m(en)g(patterns.)150 -2996 y Ft(*\()p Fj(pattern-list)p Ft(\))630 3106 y Fu(Matc)m(hes)h +3230 y Ft(*\()p Fj(pattern-list)p Ft(\))630 3340 y Fu(Matc)m(hes)h (zero)f(or)g(more)f(o)s(ccurrences)h(of)f(the)h(giv)m(en)g(patterns.) -150 3267 y Ft(+\()p Fj(pattern-list)p Ft(\))630 3377 +150 3503 y Ft(+\()p Fj(pattern-list)p Ft(\))630 3613 y Fu(Matc)m(hes)h(one)f(or)f(more)h(o)s(ccurrences)f(of)h(the)f(giv)m -(en)i(patterns.)150 3538 y Ft(@\()p Fj(pattern-list)p -Ft(\))630 3648 y Fu(Matc)m(hes)g(one)f(of)f(the)h(giv)m(en)g(patterns.) -150 3809 y Ft(!\()p Fj(pattern-list)p Ft(\))630 3919 +(en)i(patterns.)150 3776 y Ft(@\()p Fj(pattern-list)p +Ft(\))630 3886 y Fu(Matc)m(hes)g(one)f(of)f(the)h(giv)m(en)g(patterns.) +150 4049 y Ft(!\()p Fj(pattern-list)p Ft(\))630 4159 y Fu(Matc)m(hes)h(an)m(ything)f(except)g(one)g(of)f(the)h(giv)m(en)g -(patterns.)275 4081 y(The)h Ft(extglob)f Fu(option)j(c)m(hanges)g(the)f +(patterns.)275 4325 y(The)h Ft(extglob)f Fu(option)j(c)m(hanges)g(the)f (b)s(eha)m(vior)g(of)h(the)f(parser,)g(since)h(the)f(paren)m(theses)h -(are)f(nor-)150 4190 y(mally)44 b(treated)g(as)f(op)s(erators)g(with)g +(are)f(nor-)150 4434 y(mally)44 b(treated)g(as)f(op)s(erators)g(with)g (syn)m(tactic)i(meaning.)79 b(T)-8 b(o)44 b(ensure)e(that)i(extended)f -(matc)m(hing)150 4300 y(patterns)30 b(are)g(parsed)f(correctly)-8 +(matc)m(hing)150 4544 y(patterns)30 b(are)g(parsed)f(correctly)-8 b(,)32 b(mak)m(e)e(sure)g(that)g Ft(extglob)e Fu(is)h(enabled)h(b)s -(efore)f(parsing)h(constructs)150 4410 y(con)m(taining)i(the)e +(efore)f(parsing)h(constructs)150 4653 y(con)m(taining)i(the)e (patterns,)h(including)f(shell)h(functions)f(and)f(command)h -(substitutions.)275 4546 y(When)c(matc)m(hing)i(\014lenames,)g(the)f +(substitutions.)275 4792 y(When)c(matc)m(hing)i(\014lenames,)g(the)f Ft(dotglob)e Fu(shell)i(option)h(determines)f(the)g(set)g(of)g -(\014lenames)g(that)150 4656 y(are)34 b(tested:)47 b(when)33 +(\014lenames)g(that)150 4902 y(are)34 b(tested:)47 b(when)33 b Ft(dotglob)e Fu(is)i(enabled,)i(the)e(set)h(of)g(\014lenames)f -(includes)g(all)h(\014les)g(b)s(eginning)e(with)150 4765 +(includes)g(all)h(\014les)g(b)s(eginning)e(with)150 5011 y(`)p Ft(.)p Fu(',)d(but)e(the)g(\014lenames)h(`)p Ft(.)p Fu(')g(and)f(`)p Ft(..)p Fu(')g(m)m(ust)h(b)s(e)f(matc)m(hed)h(b)m(y)g (a)g(pattern)g(or)f(sub-pattern)g(that)h(b)s(egins)150 -4875 y(with)33 b(a)g(dot;)j(when)c(it)h(is)h(disabled,)f(the)h(set)g +5121 y(with)33 b(a)g(dot;)j(when)c(it)h(is)h(disabled,)f(the)h(set)g (do)s(es)e(not)i(include)f(an)m(y)g(\014lenames)g(b)s(eginning)g(with)g -(\\.")150 4984 y(unless)24 b(the)g(pattern)h(or)f(sub-pattern)g(b)s +(\\.")150 5230 y(unless)24 b(the)g(pattern)h(or)f(sub-pattern)g(b)s (egins)g(with)g(a)g(`)p Ft(.)p Fu('.)39 b(As)25 b(ab)s(o)m(v)m(e,)i(`)p Ft(.)p Fu(')d(only)h(has)f(a)h(sp)s(ecial)g(meaning)150 -5094 y(when)k(matc)m(hing)j(\014lenames.)275 5230 y(Complicated)41 -b(extended)f(pattern)g(matc)m(hing)h(against)h(long)f(strings)f(is)g -(slo)m(w,)k(esp)s(ecially)d(when)150 5340 y(the)29 b(patterns)g(con)m -(tain)i(alternations)f(and)f(the)g(strings)g(con)m(tain)h(m)m(ultiple)g -(matc)m(hes.)42 b(Using)29 b(separate)p eop end -%%Page: 38 44 -TeXDict begin 38 43 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(38)150 299 -y(matc)m(hes)38 b(against)g(shorter)e(strings,)i(or)f(using)f(arra)m -(ys)h(of)g(strings)f(instead)h(of)g(a)g(single)g(long)h(string,)150 -408 y(ma)m(y)31 b(b)s(e)f(faster.)150 603 y Fk(3.5.9)63 -b(Quote)41 b(Remo)m(v)-7 b(al)150 750 y Fu(After)32 b(the)g(preceding)g -(expansions,)h(all)f(unquoted)f(o)s(ccurrences)h(of)g(the)h(c)m -(haracters)g(`)p Ft(\\)p Fu(',)g(`)p Ft(')p Fu(',)f(and)g(`)p -Ft(")p Fu(')150 860 y(that)f(did)f(not)g(result)g(from)g(one)h(of)g -(the)f(ab)s(o)m(v)m(e)i(expansions)e(are)h(remo)m(v)m(ed.)150 -1096 y Fs(3.6)68 b(Redirections)150 1255 y Fu(Before)32 -b(a)f(command)f(is)h(executed,)h(its)f(input)e(and)h(output)h(ma)m(y)g -(b)s(e)f Fr(redirected)k Fu(using)c(a)i(sp)s(ecial)f(no-)150 -1365 y(tation)d(in)m(terpreted)f(b)m(y)f(the)h(shell.)40 -b Fr(Redirection)27 b Fu(allo)m(ws)h(commands')f(\014le)f(handles)g(to) -i(b)s(e)e(duplicated,)150 1475 y(op)s(ened,)i(closed,)i(made)e(to)h -(refer)f(to)h(di\013eren)m(t)f(\014les,)h(and)f(can)g(c)m(hange)h(the)g -(\014les)f(the)g(command)g(reads)150 1584 y(from)39 b(and)g(writes)h -(to.)69 b(Redirection)40 b(ma)m(y)g(also)h(b)s(e)e(used)g(to)h(mo)s -(dify)f(\014le)g(handles)g(in)g(the)h(curren)m(t)150 -1694 y(shell)e(execution)h(en)m(vironmen)m(t.)65 b(The)37 -b(follo)m(wing)j(redirection)f(op)s(erators)f(ma)m(y)g(precede)h(or)f -(app)s(ear)150 1803 y(an)m(ywhere)30 b(within)f(a)h(simple)f(command)h -(or)f(ma)m(y)i(follo)m(w)g(a)f(command.)40 b(Redirections)30 -b(are)g(pro)s(cessed)150 1913 y(in)g(the)h(order)f(they)g(app)s(ear,)g -(from)g(left)h(to)g(righ)m(t.)275 2045 y(Eac)m(h)45 b(redirection)h -(that)f(ma)m(y)h(b)s(e)e(preceded)g(b)m(y)h(a)h(\014le)f(descriptor)f -(n)m(um)m(b)s(er)g(ma)m(y)h(instead)h(b)s(e)150 2155 -y(preceded)41 b(b)m(y)g(a)h(w)m(ord)f(of)g(the)h(form)f +5340 y(when)k(matc)m(hing)j(\014lenames.)p eop end +%%Page: 39 45 +TeXDict begin 39 44 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(39)275 299 +y(Complicated)41 b(extended)f(pattern)g(matc)m(hing)h(against)h(long)f +(strings)f(is)g(slo)m(w,)k(esp)s(ecially)d(when)150 408 +y(the)29 b(patterns)g(con)m(tain)i(alternations)f(and)f(the)g(strings)g +(con)m(tain)h(m)m(ultiple)g(matc)m(hes.)42 b(Using)29 +b(separate)150 518 y(matc)m(hes)38 b(against)g(shorter)e(strings,)i(or) +f(using)f(arra)m(ys)h(of)g(strings)f(instead)h(of)g(a)g(single)g(long)h +(string,)150 628 y(ma)m(y)31 b(b)s(e)f(faster.)150 828 +y Fk(3.5.9)63 b(Quote)41 b(Remo)m(v)-7 b(al)150 975 y +Fu(After)32 b(the)g(preceding)g(expansions,)h(all)f(unquoted)f(o)s +(ccurrences)h(of)g(the)h(c)m(haracters)g(`)p Ft(\\)p +Fu(',)g(`)p Ft(')p Fu(',)f(and)g(`)p Ft(")p Fu(')150 +1085 y(that)f(did)f(not)g(result)g(from)g(one)h(of)g(the)f(ab)s(o)m(v)m +(e)i(expansions)e(are)h(remo)m(v)m(ed.)150 1328 y Fs(3.6)68 +b(Redirections)150 1487 y Fu(Before)32 b(a)f(command)f(is)h(executed,)h +(its)f(input)e(and)h(output)h(ma)m(y)g(b)s(e)f Fr(redirected)k +Fu(using)c(a)i(sp)s(ecial)f(no-)150 1597 y(tation)d(in)m(terpreted)f(b) +m(y)f(the)h(shell.)40 b Fr(Redirection)27 b Fu(allo)m(ws)h(commands')f +(\014le)f(handles)g(to)i(b)s(e)e(duplicated,)150 1706 +y(op)s(ened,)i(closed,)i(made)e(to)h(refer)f(to)h(di\013eren)m(t)f +(\014les,)h(and)f(can)g(c)m(hange)h(the)g(\014les)f(the)g(command)g +(reads)150 1816 y(from)39 b(and)g(writes)h(to.)69 b(Redirection)40 +b(ma)m(y)g(also)h(b)s(e)e(used)g(to)h(mo)s(dify)f(\014le)g(handles)g +(in)g(the)h(curren)m(t)150 1925 y(shell)e(execution)h(en)m(vironmen)m +(t.)65 b(The)37 b(follo)m(wing)j(redirection)f(op)s(erators)f(ma)m(y)g +(precede)h(or)f(app)s(ear)150 2035 y(an)m(ywhere)30 b(within)f(a)h +(simple)f(command)h(or)f(ma)m(y)i(follo)m(w)g(a)f(command.)40 +b(Redirections)30 b(are)g(pro)s(cessed)150 2145 y(in)g(the)h(order)f +(they)g(app)s(ear,)g(from)g(left)h(to)g(righ)m(t.)275 +2280 y(Eac)m(h)45 b(redirection)h(that)f(ma)m(y)h(b)s(e)e(preceded)g(b) +m(y)h(a)h(\014le)f(descriptor)f(n)m(um)m(b)s(er)g(ma)m(y)h(instead)h(b) +s(e)150 2390 y(preceded)41 b(b)m(y)g(a)h(w)m(ord)f(of)g(the)h(form)f Fi({)p Fr(v)-5 b(arname)5 b Fi(})p Fu(.)74 b(In)41 b(this)g(case,)k -(for)c(eac)m(h)i(redirection)f(op)s(erator)150 2264 y(except)37 +(for)c(eac)m(h)i(redirection)f(op)s(erator)150 2500 y(except)37 b Ft(>)p Fu(&-)e(and)g Ft(<)p Fu(&-,)i(the)f(shell)g(will)g(allo)s (cate)j(a)d(\014le)g(descriptor)f(greater)i(than)f(10)g(and)f(assign)h -(it)150 2374 y(to)e Fi({)p Fr(v)-5 b(arname)5 b Fi(})p +(it)150 2609 y(to)e Fi({)p Fr(v)-5 b(arname)5 b Fi(})p Fu(.)52 b(If)33 b Ft(>)p Fu(&-)g(or)h Ft(<)p Fu(&-)f(is)g(preceded)h(b) m(y)f Fi({)p Fr(v)-5 b(arname)5 b Fi(})p Fu(,)36 b(the)e(v)-5 b(alue)34 b(of)f Fr(v)-5 b(arname)39 b Fu(de\014nes)33 -b(the)150 2483 y(\014le)e(descriptor)g(to)h(close.)43 +b(the)150 2719 y(\014le)e(descriptor)g(to)h(close.)43 b(If)31 b Fi({)p Fr(v)-5 b(arname)5 b Fi(})32 b Fu(is)f(supplied,)f (the)h(redirection)g(p)s(ersists)f(b)s(ey)m(ond)h(the)g(scop)s(e)150 -2593 y(of)42 b(the)f(command,)j(allo)m(wing)f(the)f(shell)g(programmer) +2828 y(of)42 b(the)f(command,)j(allo)m(wing)f(the)f(shell)g(programmer) f(to)h(manage)g(the)g(\014le)f(descriptor's)h(lifetime)150 -2703 y(man)m(ually)-8 b(.)41 b(The)29 b Ft(varredir_close)c +2938 y(man)m(ually)-8 b(.)41 b(The)29 b Ft(varredir_close)c Fu(shell)k(option)g(manages)h(this)f(b)s(eha)m(vior)g(\(see)h(Section)f -(4.3.2)i([The)150 2812 y(Shopt)f(Builtin],)h(page)g(71\).)275 -2944 y(In)c(the)i(follo)m(wing)h(descriptions,)g(if)e(the)h(\014le)g +(4.3.2)i([The)150 3048 y(Shopt)f(Builtin],)h(page)g(73\).)275 +3183 y(In)c(the)i(follo)m(wing)h(descriptions,)g(if)e(the)h(\014le)g (descriptor)f(n)m(um)m(b)s(er)g(is)g(omitted,)i(and)f(the)f(\014rst)g -(c)m(har-)150 3054 y(acter)42 b(of)f(the)g(redirection)g(op)s(erator)g +(c)m(har-)150 3293 y(acter)42 b(of)f(the)g(redirection)g(op)s(erator)g (is)g(`)p Ft(<)p Fu(',)i(the)e(redirection)g(refers)g(to)g(the)g -(standard)f(input)f(\(\014le)150 3164 y(descriptor)33 +(standard)f(input)f(\(\014le)150 3403 y(descriptor)33 b(0\).)49 b(If)33 b(the)g(\014rst)f(c)m(haracter)i(of)g(the)f (redirection)g(op)s(erator)h(is)f(`)p Ft(>)p Fu(',)h(the)f(redirection) -g(refers)150 3273 y(to)e(the)g(standard)e(output)h(\(\014le)h -(descriptor)f(1\).)275 3405 y(The)h(w)m(ord)h(follo)m(wing)i(the)f +g(refers)150 3512 y(to)e(the)g(standard)e(output)h(\(\014le)h +(descriptor)f(1\).)275 3648 y(The)h(w)m(ord)h(follo)m(wing)i(the)f (redirection)g(op)s(erator)f(in)g(the)h(follo)m(wing)h(descriptions,)f -(unless)e(other-)150 3515 y(wise)21 b(noted,)i(is)e(sub)5 +(unless)e(other-)150 3758 y(wise)21 b(noted,)i(is)e(sub)5 b(jected)21 b(to)h(brace)f(expansion,)i(tilde)f(expansion,)h(parameter) -e(expansion,)i(command)150 3625 y(substitution,)31 b(arithmetic)h +e(expansion,)i(command)150 3867 y(substitution,)31 b(arithmetic)h (expansion,)f(quote)h(remo)m(v)-5 b(al,)33 b(\014lename)e(expansion,)g -(and)f(w)m(ord)h(splitting.)150 3734 y(If)f(it)h(expands)e(to)i(more)g +(and)f(w)m(ord)h(splitting.)150 3977 y(If)f(it)h(expands)e(to)i(more)g (than)f(one)h(w)m(ord,)f(Bash)h(rep)s(orts)e(an)h(error.)275 -3866 y(Note)h(that)g(the)g(order)f(of)g(redirections)h(is)g +4113 y(Note)h(that)g(the)g(order)f(of)g(redirections)h(is)g (signi\014can)m(t.)41 b(F)-8 b(or)31 b(example,)h(the)e(command)390 -3999 y Ft(ls)47 b(>)h Fj(dirlist)d Ft(2>&1)150 4131 y +4249 y Ft(ls)47 b(>)h Fj(dirlist)d Ft(2>&1)150 4384 y Fu(directs)28 b(b)s(oth)f(standard)g(output)g(\(\014le)h(descriptor)f (1\))i(and)e(standard)f(error)i(\(\014le)g(descriptor)f(2\))h(to)h(the) -150 4240 y(\014le)h Fr(dirlist)p Fu(,)h(while)f(the)h(command)390 -4373 y Ft(ls)47 b(2>&1)g(>)g Fj(dirlist)150 4505 y Fu(directs)28 +150 4494 y(\014le)h Fr(dirlist)p Fu(,)h(while)f(the)h(command)390 +4630 y Ft(ls)47 b(2>&1)g(>)g Fj(dirlist)150 4766 y Fu(directs)28 b(only)f(the)h(standard)e(output)i(to)g(\014le)f Fr(dirlist)p Fu(,)h(b)s(ecause)g(the)f(standard)g(error)g(w)m(as)h(made)f(a)h(cop)m -(y)150 4615 y(of)j(the)f(standard)g(output)g(b)s(efore)g(the)g +(y)150 4875 y(of)j(the)f(standard)g(output)g(b)s(efore)g(the)g (standard)g(output)g(w)m(as)g(redirected)h(to)g Fr(dirlist)p -Fu(.)275 4747 y(Bash)26 b(handles)f(sev)m(eral)j(\014lenames)e(sp)s +Fu(.)275 5011 y(Bash)26 b(handles)f(sev)m(eral)j(\014lenames)e(sp)s (ecially)h(when)f(they)g(are)g(used)g(in)g(redirections,)i(as)e -(describ)s(ed)150 4856 y(in)38 b(the)h(follo)m(wing)h(table.)66 +(describ)s(ed)150 5121 y(in)38 b(the)h(follo)m(wing)h(table.)66 b(If)38 b(the)h(op)s(erating)g(system)f(on)h(whic)m(h)f(Bash)h(is)f -(running)f(pro)m(vides)h(these)150 4966 y(sp)s(ecial)27 -b(\014les,)g(bash)e(will)i(use)f(them;)h(otherwise)g(it)f(will)h(em)m -(ulate)h(them)e(in)m(ternally)h(with)f(the)g(b)s(eha)m(vior)150 -5076 y(describ)s(ed)j(b)s(elo)m(w.)150 5230 y Ft(/dev/fd/)p -Fj(fd)630 5340 y Fu(If)h Fr(fd)j Fu(is)d(a)h(v)-5 b(alid)31 -b(in)m(teger,)h(\014le)e(descriptor)h Fr(fd)i Fu(is)d(duplicated.)p -eop end -%%Page: 39 45 -TeXDict begin 39 44 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(39)150 299 -y Ft(/dev/stdin)630 408 y Fu(File)32 b(descriptor)e(0)h(is)f -(duplicated.)150 577 y Ft(/dev/stdout)630 687 y Fu(File)i(descriptor)e -(1)h(is)f(duplicated.)150 856 y Ft(/dev/stderr)630 965 -y Fu(File)i(descriptor)e(2)h(is)f(duplicated.)150 1134 -y Ft(/dev/tcp/)p Fj(host)p Ft(/)p Fj(port)630 1244 y -Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5 b(alid)41 b(hostname)h(or)f(In)m -(ternet)h(address,)i(and)c Fr(p)s(ort)j Fu(is)f(an)f(in)m(teger)i(p)s -(ort)630 1354 y(n)m(um)m(b)s(er)23 b(or)i(service)h(name,)g(Bash)f -(attempts)h(to)f(op)s(en)f(the)h(corresp)s(onding)f(TCP)g(so)s(c)m(k)m -(et.)150 1522 y Ft(/dev/udp/)p Fj(host)p Ft(/)p Fj(port)630 -1632 y Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5 b(alid)41 -b(hostname)h(or)f(In)m(ternet)h(address,)i(and)c Fr(p)s(ort)j -Fu(is)f(an)f(in)m(teger)i(p)s(ort)630 1742 y(n)m(um)m(b)s(er)23 -b(or)h(service)h(name,)h(Bash)e(attempts)h(to)g(op)s(en)f(the)g -(corresp)s(onding)f(UDP)i(so)s(c)m(k)m(et.)275 1915 y(A)30 -b(failure)h(to)g(op)s(en)e(or)i(create)h(a)e(\014le)h(causes)g(the)f -(redirection)h(to)g(fail.)275 2059 y(Redirections)f(using)e(\014le)i -(descriptors)f(greater)h(than)f(9)h(should)e(b)s(e)h(used)f(with)h -(care,)h(as)g(they)f(ma)m(y)150 2169 y(con\015ict)i(with)f(\014le)h -(descriptors)f(the)g(shell)h(uses)f(in)m(ternally)-8 -b(.)150 2378 y Fk(3.6.1)63 b(Redirecting)40 b(Input)150 -2525 y Fu(Redirection)35 b(of)f(input)f(causes)i(the)f(\014le)g(whose)g -(name)g(results)g(from)g(the)g(expansion)g(of)g Fr(w)m(ord)k -Fu(to)d(b)s(e)150 2634 y(op)s(ened)d(for)g(reading)g(on)g(\014le)h -(descriptor)f Ft(n)p Fu(,)h(or)f(the)g(standard)g(input)f(\(\014le)i -(descriptor)f(0\))h(if)f Ft(n)g Fu(is)h(not)150 2744 -y(sp)s(eci\014ed.)275 2888 y(The)c(general)j(format)e(for)h -(redirecting)g(input)e(is:)390 3032 y Ft([)p Fj(n)p Ft(]<)p -Fj(word)150 3241 y Fk(3.6.2)63 b(Redirecting)40 b(Output)150 -3388 y Fu(Redirection)31 b(of)g(output)f(causes)h(the)f(\014le)h(whose) +(running)f(pro)m(vides)h(these)150 5230 y(sp)s(ecial)26 +b(\014les,)g(Bash)f(will)h(use)e(them;)k(otherwise)d(it)h(will)f(em)m +(ulate)i(them)e(in)m(ternally)h(with)f(the)g(b)s(eha)m(vior)150 +5340 y(describ)s(ed)k(b)s(elo)m(w.)p eop end +%%Page: 40 46 +TeXDict begin 40 45 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(40)150 299 +y Ft(/dev/fd/)p Fj(fd)630 408 y Fu(If)30 b Fr(fd)j Fu(is)d(a)h(v)-5 +b(alid)31 b(in)m(teger,)h(\014le)e(descriptor)h Fr(fd)i +Fu(is)d(duplicated.)150 559 y Ft(/dev/stdin)630 669 y +Fu(File)i(descriptor)e(0)h(is)f(duplicated.)150 820 y +Ft(/dev/stdout)630 929 y Fu(File)i(descriptor)e(1)h(is)f(duplicated.) +150 1080 y Ft(/dev/stderr)630 1190 y Fu(File)i(descriptor)e(2)h(is)f +(duplicated.)150 1340 y Ft(/dev/tcp/)p Fj(host)p Ft(/)p +Fj(port)630 1450 y Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5 +b(alid)41 b(hostname)h(or)f(In)m(ternet)h(address,)i(and)c +Fr(p)s(ort)j Fu(is)f(an)f(in)m(teger)i(p)s(ort)630 1560 +y(n)m(um)m(b)s(er)23 b(or)i(service)h(name,)g(Bash)f(attempts)h(to)f +(op)s(en)f(the)h(corresp)s(onding)f(TCP)g(so)s(c)m(k)m(et.)150 +1710 y Ft(/dev/udp/)p Fj(host)p Ft(/)p Fj(port)630 1820 +y Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5 b(alid)41 b(hostname)h(or)f(In) +m(ternet)h(address,)i(and)c Fr(p)s(ort)j Fu(is)f(an)f(in)m(teger)i(p)s +(ort)630 1929 y(n)m(um)m(b)s(er)23 b(or)h(service)h(name,)h(Bash)e +(attempts)h(to)g(op)s(en)f(the)g(corresp)s(onding)f(UDP)i(so)s(c)m(k)m +(et.)275 2080 y(A)30 b(failure)h(to)g(op)s(en)e(or)i(create)h(a)e +(\014le)h(causes)g(the)f(redirection)h(to)g(fail.)275 +2210 y(Redirections)f(using)e(\014le)i(descriptors)f(greater)h(than)f +(9)h(should)e(b)s(e)h(used)f(with)h(care,)h(as)g(they)f(ma)m(y)150 +2320 y(con\015ict)i(with)f(\014le)h(descriptors)f(the)g(shell)h(uses)f +(in)m(ternally)-8 b(.)150 2511 y Fk(3.6.1)63 b(Redirecting)40 +b(Input)150 2658 y Fu(Redirection)35 b(of)f(input)f(causes)i(the)f +(\014le)g(whose)g(name)g(results)g(from)g(the)g(expansion)g(of)g +Fr(w)m(ord)k Fu(to)d(b)s(e)150 2767 y(op)s(ened)d(for)g(reading)g(on)g +(\014le)h(descriptor)f Ft(n)p Fu(,)h(or)f(the)g(standard)g(input)f +(\(\014le)i(descriptor)f(0\))h(if)f Ft(n)g Fu(is)h(not)150 +2877 y(sp)s(eci\014ed.)275 3007 y(The)c(general)j(format)e(for)h +(redirecting)g(input)e(is:)390 3137 y Ft([)p Fj(n)p Ft(]<)p +Fj(word)150 3328 y Fk(3.6.2)63 b(Redirecting)40 b(Output)150 +3475 y Fu(Redirection)31 b(of)g(output)f(causes)h(the)f(\014le)h(whose) f(name)g(results)h(from)e(the)i(expansion)f(of)h Fr(w)m(ord)i -Fu(to)f(b)s(e)150 3497 y(op)s(ened)d(for)g(writing)g(on)g(\014le)h +Fu(to)f(b)s(e)150 3584 y(op)s(ened)d(for)g(writing)g(on)g(\014le)h (descriptor)f Fr(n)p Fu(,)g(or)g(the)h(standard)e(output)h(\(\014le)h -(descriptor)f(1\))h(if)g Fr(n)e Fu(is)i(not)150 3607 +(descriptor)f(1\))h(if)g Fr(n)e Fu(is)i(not)150 3694 y(sp)s(eci\014ed.)40 b(If)30 b(the)g(\014le)h(do)s(es)f(not)h(exist)g (it)g(is)f(created;)i(if)e(it)h(do)s(es)f(exist)h(it)g(is)g(truncated)f -(to)h(zero)g(size.)275 3751 y(The)e(general)j(format)e(for)h -(redirecting)g(output)f(is:)390 3895 y Ft([)p Fj(n)p -Ft(]>[|])p Fj(word)275 4039 y Fu(If)g(the)h(redirection)g(op)s(erator)g +(to)h(zero)g(size.)275 3824 y(The)e(general)j(format)e(for)h +(redirecting)g(output)f(is:)390 3954 y Ft([)p Fj(n)p +Ft(]>[|])p Fj(word)275 4084 y Fu(If)g(the)h(redirection)g(op)s(erator)g (is)g(`)p Ft(>)p Fu(',)g(and)f(the)h Ft(noclobber)d Fu(option)j(to)g -(the)g Ft(set)f Fu(builtin)g(has)h(b)s(een)150 4148 y(enabled,)h(the)g +(the)g Ft(set)f Fu(builtin)g(has)h(b)s(een)150 4194 y(enabled,)h(the)g (redirection)h(will)f(fail)h(if)e(the)i(\014le)e(whose)h(name)g (results)g(from)f(the)h(expansion)g(of)g Fr(w)m(ord)150 -4258 y Fu(exists)f(and)f(is)g(a)h(regular)g(\014le.)41 +4304 y Fu(exists)f(and)f(is)g(a)h(regular)g(\014le.)41 b(If)30 b(the)h(redirection)g(op)s(erator)g(is)f(`)p Ft(>|)p Fu(',)h(or)f(the)h(redirection)g(op)s(erator)g(is)150 -4367 y(`)p Ft(>)p Fu(')36 b(and)f(the)g Ft(noclobber)e +4413 y(`)p Ft(>)p Fu(')36 b(and)f(the)g Ft(noclobber)e Fu(option)j(is)g(not)g(enabled,)h(the)e(redirection)h(is)g(attempted)g -(ev)m(en)h(if)e(the)h(\014le)150 4477 y(named)30 b(b)m(y)g -Fr(w)m(ord)k Fu(exists.)150 4686 y Fk(3.6.3)63 b(App)s(ending)42 -b(Redirected)e(Output)150 4833 y Fu(Redirection)23 b(of)e(output)h(in)f +(ev)m(en)h(if)e(the)h(\014le)150 4523 y(named)30 b(b)m(y)g +Fr(w)m(ord)k Fu(exists.)150 4713 y Fk(3.6.3)63 b(App)s(ending)42 +b(Redirected)e(Output)150 4860 y Fu(Redirection)23 b(of)e(output)h(in)f (this)h(fashion)f(causes)h(the)g(\014le)g(whose)f(name)h(results)f -(from)g(the)h(expansion)g(of)150 4942 y Fr(w)m(ord)28 +(from)g(the)h(expansion)g(of)150 4970 y Fr(w)m(ord)28 b Fu(to)e(b)s(e)e(op)s(ened)g(for)h(app)s(ending)e(on)i(\014le)g (descriptor)g Fr(n)p Fu(,)g(or)g(the)g(standard)f(output)h(\(\014le)g -(descriptor)150 5052 y(1\))31 b(if)f Fr(n)g Fu(is)h(not)f(sp)s +(descriptor)150 5080 y(1\))31 b(if)f Fr(n)g Fu(is)h(not)f(sp)s (eci\014ed.)40 b(If)30 b(the)h(\014le)f(do)s(es)g(not)h(exist)g(it)g -(is)f(created.)275 5196 y(The)f(general)j(format)e(for)h(app)s(ending)e +(is)f(created.)275 5210 y(The)f(general)j(format)e(for)h(app)s(ending)e (output)h(is:)390 5340 y Ft([)p Fj(n)p Ft(]>>)p Fj(word)p eop end -%%Page: 40 46 -TeXDict begin 40 45 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(40)150 299 +%%Page: 41 47 +TeXDict begin 41 46 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(41)150 299 y Fk(3.6.4)63 b(Redirecting)40 b(Standard)h(Output)g(and)g(Standard)g (Error)150 446 y Fu(This)33 b(construct)i(allo)m(ws)g(b)s(oth)f(the)g (standard)g(output)f(\(\014le)i(descriptor)f(1\))h(and)f(the)g (standard)f(error)150 555 y(output)d(\(\014le)h(descriptor)f(2\))h(to)g (b)s(e)f(redirected)h(to)g(the)f(\014le)h(whose)f(name)h(is)f(the)g -(expansion)h(of)f Fr(w)m(ord)p Fu(.)275 712 y(There)f(are)i(t)m(w)m(o)h +(expansion)h(of)f Fr(w)m(ord)p Fu(.)275 698 y(There)f(are)i(t)m(w)m(o)h (formats)e(for)h(redirecting)g(standard)e(output)h(and)g(standard)f -(error:)390 870 y Ft(&>)p Fj(word)150 1027 y Fu(and)390 -1184 y Ft(>&)p Fj(word)150 1341 y Fu(Of)h(the)g(t)m(w)m(o)i(forms,)e +(error:)390 841 y Ft(&>)p Fj(word)150 984 y Fu(and)390 +1127 y Ft(>&)p Fj(word)150 1270 y Fu(Of)h(the)g(t)m(w)m(o)i(forms,)e (the)h(\014rst)e(is)i(preferred.)39 b(This)30 b(is)g(seman)m(tically)j -(equiv)-5 b(alen)m(t)32 b(to)390 1498 y Ft(>)p Fj(word)46 -b Ft(2>&1)275 1655 y Fu(When)41 b(using)g(the)h(second)f(form,)k +(equiv)-5 b(alen)m(t)32 b(to)390 1414 y Ft(>)p Fj(word)46 +b Ft(2>&1)275 1557 y Fu(When)41 b(using)g(the)h(second)f(form,)k Fr(w)m(ord)f Fu(ma)m(y)e(not)g(expand)f(to)h(a)g(n)m(um)m(b)s(er)f(or)g -(`)p Ft(-)p Fu('.)75 b(If)41 b(it)h(do)s(es,)150 1764 +(`)p Ft(-)p Fu('.)75 b(If)41 b(it)h(do)s(es,)150 1666 y(other)27 b(redirection)g(op)s(erators)f(apply)h(\(see)g(Duplicating)h (File)f(Descriptors)h(b)s(elo)m(w\))f(for)f(compatibilit)m(y)150 -1874 y(reasons.)150 2096 y Fk(3.6.5)63 b(App)s(ending)42 -b(Standard)f(Output)g(and)g(Standard)g(Error)150 2243 +1776 y(reasons.)150 1983 y Fk(3.6.5)63 b(App)s(ending)42 +b(Standard)f(Output)g(and)g(Standard)g(Error)150 2130 y Fu(This)33 b(construct)i(allo)m(ws)g(b)s(oth)f(the)g(standard)g (output)f(\(\014le)i(descriptor)f(1\))h(and)f(the)g(standard)f(error) -150 2352 y(output)d(\(\014le)h(descriptor)f(2\))h(to)g(b)s(e)f(app)s +150 2240 y(output)d(\(\014le)h(descriptor)f(2\))h(to)g(b)s(e)f(app)s (ended)f(to)i(the)f(\014le)h(whose)f(name)g(is)h(the)f(expansion)h(of)f -Fr(w)m(ord)p Fu(.)275 2509 y(The)f(format)i(for)f(app)s(ending)f +Fr(w)m(ord)p Fu(.)275 2383 y(The)f(format)i(for)f(app)s(ending)f (standard)h(output)g(and)f(standard)h(error)g(is:)390 -2666 y Ft(&>>)p Fj(word)150 2823 y Fu(This)g(is)g(seman)m(tically)j -(equiv)-5 b(alen)m(t)32 b(to)390 2980 y Ft(>>)p Fj(word)46 -b Ft(2>&1)275 3138 y Fu(\(see)31 b(Duplicating)h(File)f(Descriptors)g -(b)s(elo)m(w\).)150 3359 y Fk(3.6.6)63 b(Here)41 b(Do)s(cumen)m(ts)150 -3506 y Fu(This)26 b(t)m(yp)s(e)g(of)h(redirection)g(instructs)f(the)g -(shell)h(to)g(read)f(input)g(from)g(the)g(curren)m(t)h(source)f(un)m -(til)h(a)g(line)150 3616 y(con)m(taining)h(only)e Fr(w)m(ord)k -Fu(\(with)c(no)g(trailing)h(blanks\))f(is)g(seen.)40 -b(All)27 b(of)f(the)g(lines)h(read)f(up)f(to)i(that)g(p)s(oin)m(t)150 -3725 y(are)k(then)f(used)f(as)i(the)g(standard)e(input)h(\(or)g(\014le) -h(descriptor)f Fr(n)g Fu(if)g Fr(n)g Fu(is)g(sp)s(eci\014ed\))g(for)h -(a)f(command.)275 3883 y(The)f(format)i(of)g(here-do)s(cumen)m(ts)f -(is:)390 4040 y Ft([)p Fj(n)p Ft(]<<[)p Fq(\000)p Ft(])p -Fj(word)772 4149 y(here-document)390 4259 y(delimiter)275 -4416 y Fu(No)i(parameter)h(and)f(v)-5 b(ariable)32 b(expansion,)h -(command)f(substitution,)h(arithmetic)g(expansion,)g(or)150 -4525 y(\014lename)26 b(expansion)g(is)g(p)s(erformed)e(on)i -Fr(w)m(ord)p Fu(.)39 b(If)25 b(an)m(y)i(part)e(of)h Fr(w)m(ord)j -Fu(is)d(quoted,)i(the)e Fr(delimiter)33 b Fu(is)26 b(the)150 -4635 y(result)33 b(of)g(quote)g(remo)m(v)-5 b(al)34 b(on)f -Fr(w)m(ord)p Fu(,)g(and)f(the)h(lines)g(in)g(the)g(here-do)s(cumen)m(t) -g(are)g(not)g(expanded.)47 b(If)150 4745 y Fr(w)m(ord)26 -b Fu(is)c(unquoted,)h(all)g(lines)g(of)g(the)f(here-do)s(cumen)m(t)g -(are)h(sub)5 b(jected)22 b(to)h(parameter)g(expansion,)h(com-)150 -4854 y(mand)30 b(substitution,)g(and)g(arithmetic)h(expansion,)g(the)f -(c)m(haracter)i(sequence)f Ft(\\newline)d Fu(is)j(ignored,)150 -4964 y(and)f(`)p Ft(\\)p Fu(')g(m)m(ust)h(b)s(e)e(used)h(to)h(quote)g -(the)g(c)m(haracters)g(`)p Ft(\\)p Fu(',)g(`)p Ft($)p -Fu(',)g(and)f(`)p Ft(`)p Fu('.)275 5121 y(If)21 b(the)i(redirection)g -(op)s(erator)g(is)f(`)p Ft(<<-)p Fu(',)i(then)e(all)h(leading)g(tab)g -(c)m(haracters)h(are)e(stripp)s(ed)f(from)h(input)150 -5230 y(lines)33 b(and)f(the)h(line)h(con)m(taining)g -Fr(delimiter)p Fu(.)49 b(This)32 b(allo)m(ws)i(here-do)s(cumen)m(ts)f -(within)f(shell)i(scripts)e(to)150 5340 y(b)s(e)e(inden)m(ted)g(in)g(a) -h(natural)f(fashion.)p eop end -%%Page: 41 47 -TeXDict begin 41 46 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(41)150 299 +2526 y Ft(&>>)p Fj(word)150 2669 y Fu(This)g(is)g(seman)m(tically)j +(equiv)-5 b(alen)m(t)32 b(to)390 2812 y Ft(>>)p Fj(word)46 +b Ft(2>&1)275 2955 y Fu(\(see)31 b(Duplicating)h(File)f(Descriptors)g +(b)s(elo)m(w\).)150 3163 y Fk(3.6.6)63 b(Here)41 b(Do)s(cumen)m(ts)150 +3310 y Fu(This)36 b(t)m(yp)s(e)h(of)f(redirection)h(instructs)g(the)f +(shell)h(to)h(read)e(input)g(from)g(the)g(curren)m(t)h(source)g(un)m +(til)f(it)150 3419 y(reads)31 b(a)g(line)g(con)m(taining)h(only)f +Fr(delimiter)38 b Fu(\(with)31 b(no)g(trailing)h(blanks\).)41 +b(All)32 b(of)f(the)g(lines)g(read)f(up)g(to)150 3529 +y(that)35 b(p)s(oin)m(t)f(are)g(then)g(used)g(as)g(the)g(standard)g +(input)f(\(or)h(\014le)g(descriptor)g Fr(n)g Fu(if)g +Fr(n)g Fu(is)g(sp)s(eci\014ed\))g(for)g(a)150 3639 y(command.)275 +3782 y(The)29 b(format)i(of)g(here-do)s(cumen)m(ts)f(is:)390 +3925 y Ft([)p Fj(n)p Ft(]<<[)p Fq(\000)p Ft(])p Fj(word)772 +4034 y(here-document)390 4144 y(delimiter)275 4287 y +Fu(No)i(parameter)h(and)f(v)-5 b(ariable)32 b(expansion,)h(command)f +(substitution,)h(arithmetic)g(expansion,)g(or)150 4396 +y(\014lename)e(expansion)f(is)g(p)s(erformed)f(on)h Fr(w)m(ord)p +Fu(.)275 4539 y(If)40 b(an)m(y)i(part)g(of)f Fr(w)m(ord)k +Fu(is)c(quoted,)k(the)c Fr(delimiter)49 b Fu(is)41 b(the)h(result)f(of) +h(quote)g(remo)m(v)-5 b(al)43 b(on)e Fr(w)m(ord)p Fu(,)150 +4649 y(and)d(the)h(lines)g(in)f(the)h(here-do)s(cumen)m(t)g(are)g(not)g +(expanded.)65 b(If)38 b Fr(w)m(ord)k Fu(is)d(unquoted,)h +Fr(delimiter)46 b Fu(is)150 4759 y Fr(w)m(ord)32 b Fu(itself,)e(all)f +(lines)g(of)g(the)g(here-do)s(cumen)m(t)f(are)h(sub)5 +b(jected)29 b(to)g(parameter)g(expansion,)g(command)150 +4868 y(substitution,)39 b(and)e(arithmetic)i(expansion,)g(the)f(c)m +(haracter)h(sequence)e Ft(\\newline)f Fu(is)h(ignored,)j(and)150 +4978 y(`)p Ft(\\)p Fu(')31 b(m)m(ust)f(b)s(e)g(used)f(to)i(quote)g(the) +g(c)m(haracters)h(`)p Ft(\\)p Fu(',)e(`)p Ft($)p Fu(',)h(and)f(`)p +Ft(`)p Fu('.)275 5121 y(If)21 b(the)i(redirection)g(op)s(erator)g(is)f +(`)p Ft(<<-)p Fu(',)i(then)e(all)h(leading)g(tab)g(c)m(haracters)h(are) +e(stripp)s(ed)f(from)h(input)150 5230 y(lines)33 b(and)f(the)h(line)h +(con)m(taining)g Fr(delimiter)p Fu(.)49 b(This)32 b(allo)m(ws)i +(here-do)s(cumen)m(ts)f(within)f(shell)i(scripts)e(to)150 +5340 y(b)s(e)e(inden)m(ted)g(in)g(a)h(natural)f(fashion.)p +eop end +%%Page: 42 48 +TeXDict begin 42 47 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(42)150 299 y Fk(3.6.7)63 b(Here)41 b(Strings)150 446 y Fu(A)30 b(v)-5 b(arian)m(t)32 b(of)e(here)h(do)s(cumen)m(ts,)f(the)g(format)h(is:)390 600 y Ft([)p Fj(n)p Ft(]<<<)46 b Fj(word)275 753 y Fu(The)29 @@ -11163,9 +11258,9 @@ b(on)f(\014le)h(descriptor)f Fr(n)p Fu(,)h(or)g(on)f(\014le)h (descriptor)g(0)g(if)f Fr(n)g Fu(is)h(not)g(sp)s(eci\014ed.)47 b(If)32 b(the)h(\014le)f(do)s(es)h(not)150 5340 y(exist,)e(it)g(is)g (created.)p eop end -%%Page: 42 48 -TeXDict begin 42 47 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(42)150 299 +%%Page: 43 49 +TeXDict begin 43 48 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(43)150 299 y Fs(3.7)68 b(Executing)46 b(Commands)150 523 y Fk(3.7.1)63 b(Simple)41 b(Command)h(Expansion)150 670 y Fu(When)33 b(a)g(simple)g(command)g(is)g(executed,)h(the)g(shell)f(p)s(erforms)e @@ -11183,7 +11278,7 @@ b(ariable)40 b(assignmen)m(ts)h(or)e(redirections)i(are)f(expanded)f (the)g(name)h(of)f(the)h(command)f(and)f(the)i(remaining)f(w)m(ords)g (are)g(the)h(argu-)330 1486 y(men)m(ts.)199 1620 y(3.)61 b(Redirections)25 b(are)f(p)s(erformed)f(as)h(describ)s(ed)f(ab)s(o)m -(v)m(e)i(\(see)g(Section)g(3.6)g([Redirections],)i(page)d(38\).)199 +(v)m(e)i(\(see)g(Section)g(3.6)g([Redirections],)i(page)d(39\).)199 1754 y(4.)61 b(The)25 b(text)h(after)f(the)g(`)p Ft(=)p Fu(')h(in)e(eac)m(h)j(v)-5 b(ariable)25 b(assignmen)m(t)h(undergo)s(es) e(tilde)i(expansion,)g(parameter)330 1864 y(expansion,)49 @@ -11219,35 +11314,35 @@ f(is)h(the)f(exit)h(status)g(of)f(the)h(last)g(command)f(substitution) (Execution)150 3842 y Fu(After)i(a)h(command)f(has)g(b)s(een)f(split)h (in)m(to)h(w)m(ords,)j(if)c(it)g(results)g(in)g(a)h(simple)f(command)g (and)f(an)150 3951 y(optional)32 b(list)f(of)f(argumen)m(ts,)h(the)g -(follo)m(wing)g(actions)h(are)f(tak)m(en.)199 4085 y(1.)61 -b(If)24 b(the)g(command)g(name)g(con)m(tains)i(no)e(slashes,)i(the)e -(shell)h(attempts)g(to)g(lo)s(cate)h(it.)39 b(If)24 b(there)g(exists) -330 4195 y(a)h(shell)g(function)f(b)m(y)g(that)h(name,)h(that)f -(function)f(is)h(in)m(v)m(ok)m(ed)h(as)e(describ)s(ed)g(in)g(Section)h -(3.3)h([Shell)330 4305 y(F)-8 b(unctions],)31 b(page)h(19.)199 -4439 y(2.)61 b(If)41 b(the)g(name)h(do)s(es)f(not)g(matc)m(h)i(a)e -(function,)j(the)e(shell)f(searc)m(hes)i(for)e(it)h(in)f(the)g(list)h -(of)g(shell)330 4548 y(builtins.)e(If)30 b(a)h(matc)m(h)g(is)f(found,)g -(that)h(builtin)f(is)g(in)m(v)m(ok)m(ed.)199 4682 y(3.)61 -b(If)40 b(the)g(name)h(is)f(neither)h(a)f(shell)h(function)f(nor)g(a)g -(builtin,)j(and)d(con)m(tains)h(no)g(slashes,)i(Bash)330 -4792 y(searc)m(hes)c(eac)m(h)g(elemen)m(t)g(of)g Ft($PATH)d -Fu(for)i(a)g(directory)h(con)m(taining)g(an)f(executable)h(\014le)f(b)m -(y)g(that)330 4902 y(name.)56 b(Bash)36 b(uses)f(a)h(hash)e(table)j(to) -f(remem)m(b)s(er)f(the)h(full)f(pathnames)g(of)h(executable)h(\014les)e -(to)330 5011 y(a)m(v)m(oid)e(m)m(ultiple)f Ft(PATH)f -Fu(searc)m(hes)i(\(see)f(the)g(description)g(of)f Ft(hash)g -Fu(in)g(Section)i(4.1)f([Bourne)g(Shell)330 5121 y(Builtins],)37 -b(page)f(48\).)55 b(A)35 b(full)g(searc)m(h)g(of)g(the)g(directories)h -(in)f Ft($PATH)e Fu(is)i(p)s(erformed)f(only)h(if)g(the)330 -5230 y(command)24 b(is)h(not)g(found)e(in)i(the)g(hash)f(table.)39 -b(If)25 b(the)f(searc)m(h)i(is)e(unsuccessful,)h(the)g(shell)g(searc)m -(hes)330 5340 y(for)e(a)h(de\014ned)e(shell)h(function)h(named)e -Ft(command_not_found_handle)p Fu(.)32 b(If)23 b(that)h(function)f -(exists,)p eop end -%%Page: 43 49 -TeXDict begin 43 48 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(43)330 299 +(shell)f(p)s(erforms)f(the)i(follo)m(wing)g(actions.)199 +4085 y(1.)61 b(If)24 b(the)g(command)g(name)g(con)m(tains)i(no)e +(slashes,)i(the)e(shell)h(attempts)g(to)g(lo)s(cate)h(it.)39 +b(If)24 b(there)g(exists)330 4195 y(a)h(shell)g(function)f(b)m(y)g +(that)h(name,)h(that)f(function)f(is)h(in)m(v)m(ok)m(ed)h(as)e(describ) +s(ed)g(in)g(Section)h(3.3)h([Shell)330 4305 y(F)-8 b(unctions],)31 +b(page)h(19.)199 4439 y(2.)61 b(If)41 b(the)g(name)h(do)s(es)f(not)g +(matc)m(h)i(a)e(function,)j(the)e(shell)f(searc)m(hes)i(for)e(it)h(in)f +(the)g(list)h(of)g(shell)330 4548 y(builtins.)e(If)30 +b(a)h(matc)m(h)g(is)f(found,)g(that)h(builtin)f(is)g(in)m(v)m(ok)m(ed.) +199 4682 y(3.)61 b(If)40 b(the)g(name)h(is)f(neither)h(a)f(shell)h +(function)f(nor)g(a)g(builtin,)j(and)d(con)m(tains)h(no)g(slashes,)i +(Bash)330 4792 y(searc)m(hes)c(eac)m(h)g(elemen)m(t)g(of)g +Ft($PATH)d Fu(for)i(a)g(directory)h(con)m(taining)g(an)f(executable)h +(\014le)f(b)m(y)g(that)330 4902 y(name.)56 b(Bash)36 +b(uses)f(a)h(hash)e(table)j(to)f(remem)m(b)s(er)f(the)h(full)f +(pathnames)g(of)h(executable)h(\014les)e(to)330 5011 +y(a)m(v)m(oid)e(m)m(ultiple)f Ft(PATH)f Fu(searc)m(hes)i(\(see)f(the)g +(description)g(of)f Ft(hash)g Fu(in)g(Section)i(4.1)f([Bourne)g(Shell) +330 5121 y(Builtins],)37 b(page)f(49\).)55 b(A)35 b(full)g(searc)m(h)g +(of)g(the)g(directories)h(in)f Ft($PATH)e Fu(is)i(p)s(erformed)f(only)h +(if)g(the)330 5230 y(command)24 b(is)h(not)g(found)e(in)i(the)g(hash)f +(table.)39 b(If)25 b(the)f(searc)m(h)i(is)e(unsuccessful,)h(the)g +(shell)g(searc)m(hes)330 5340 y(for)e(a)h(de\014ned)e(shell)h(function) +h(named)e Ft(command_not_found_handle)p Fu(.)32 b(If)23 +b(that)h(function)f(exists,)p eop end +%%Page: 44 50 +TeXDict begin 44 49 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(44)330 299 y(it)33 b(is)f(in)m(v)m(ok)m(ed)i(in)e(a)h(separate)h(execution)f(en)m (vironmen)m(t)g(with)f(the)h(original)h(command)e(and)g(the)330 408 y(original)26 b(command's)e(argumen)m(ts)h(as)g(its)g(argumen)m @@ -11267,7 +11362,7 @@ b(.)199 1218 y(5.)61 b(If)35 b(this)h(execution)h(fails)f(b)s(ecause)g (\014le)g(is)g(not)330 1328 y(a)d(directory)-8 b(,)34 b(it)f(is)g(assumed)e(to)j(b)s(e)d(a)i Fr(shell)g(script)h Fu(and)e(the)h(shell)f(executes)i(it)f(as)g(describ)s(ed)e(in)330 -1438 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(46.)199 +1438 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(47.)199 1569 y(6.)61 b(If)38 b(the)h(command)f(w)m(as)h(not)g(b)s(egun)e(async) m(hronously)-8 b(,)42 b(the)c(shell)h(w)m(aits)h(for)e(the)h(command)f (to)330 1678 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)150 @@ -11295,9 +11390,9 @@ b(enabled)g(at)h(in)m(v)m(o)s(cation)h(\(either)f(b)m(y)f(default)g(or) g(with)g(command-line)g(argumen)m(ts\))h(or)330 3482 y(b)m(y)c Ft(set)225 3613 y Fq(\017)60 b Fu(options)31 b(enabled)f(b)m(y)g Ft(shopt)f Fu(\(see)j(Section)f(4.3.2)h([The)e -(Shopt)g(Builtin],)h(page)g(71\))225 3744 y Fq(\017)60 +(Shopt)g(Builtin],)h(page)g(73\))225 3744 y Fq(\017)60 b Fu(shell)31 b(aliases)g(de\014ned)f(with)g Ft(alias)f -Fu(\(see)i(Section)g(6.6)h([Aliases],)g(page)f(100\))225 +Fu(\(see)i(Section)g(6.6)h([Aliases],)g(page)f(103\))225 3875 y Fq(\017)60 b Fu(v)-5 b(arious)50 b(pro)s(cess)f Fm(id)p Fu(s,)55 b(including)49 b(those)i(of)e(bac)m(kground)h(jobs)f (\(see)i(Section)g(3.2.4)g([Lists],)330 3985 y(page)31 @@ -11317,302 +11412,306 @@ y Fq(\017)60 b Fu(the)31 b(curren)m(t)f(w)m(orking)g(directory)225 b(and)e(functions)h(mark)m(ed)g(for)g(exp)s(ort,)g(along)h(with)f(v)-5 b(ariables)32 b(exp)s(orted)g(for)g(the)330 5099 y(command,)e(passed)g (in)g(the)h(en)m(vironmen)m(t)g(\(see)g(Section)g(3.7.4)i([En)m -(vironmen)m(t],)e(page)g(44\))225 5230 y Fq(\017)60 b +(vironmen)m(t],)e(page)g(45\))225 5230 y Fq(\017)60 b Fu(traps)31 b(caugh)m(t)h(b)m(y)f(the)g(shell)h(are)f(reset)h(to)g(the) f(v)-5 b(alues)32 b(inherited)e(from)h(the)g(shell's)h(paren)m(t,)g (and)330 5340 y(traps)e(ignored)h(b)m(y)f(the)g(shell)h(are)g(ignored)p eop end -%%Page: 44 50 -TeXDict begin 44 49 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(44)275 299 +%%Page: 45 51 +TeXDict begin 45 50 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(45)275 299 y(A)41 b(command)g(in)m(v)m(ok)m(ed)i(in)e(this)h(separate)g(en)m (vironmen)m(t)g(cannot)g(a\013ect)h(the)f(shell's)g(execution)150 -408 y(en)m(vironmen)m(t.)275 540 y(A)30 b Fr(subshell)j +408 y(en)m(vironmen)m(t.)275 542 y(A)30 b Fr(subshell)j Fu(is)d(a)h(cop)m(y)g(of)g(the)f(shell)h(pro)s(cess.)275 -671 y(Command)k(substitution,)j(commands)e(group)s(ed)f(with)i(paren)m -(theses,)h(and)e(async)m(hronous)g(com-)150 781 y(mands)c(are)h(in)m(v) +675 y(Command)k(substitution,)j(commands)e(group)s(ed)f(with)i(paren)m +(theses,)h(and)e(async)m(hronous)g(com-)150 785 y(mands)c(are)h(in)m(v) m(ok)m(ed)i(in)d(a)i(subshell)e(en)m(vironmen)m(t)h(that)h(is)f(a)g (duplicate)h(of)f(the)g(shell)g(en)m(vironmen)m(t,)150 -891 y(except)i(that)g(traps)f(caugh)m(t)h(b)m(y)f(the)h(shell)f(are)g +894 y(except)i(that)g(traps)f(caugh)m(t)h(b)m(y)f(the)h(shell)f(are)g (reset)h(to)g(the)f(v)-5 b(alues)35 b(that)g(the)f(shell)h(inherited)e -(from)150 1000 y(its)g(paren)m(t)f(at)h(in)m(v)m(o)s(cation.)49 +(from)150 1004 y(its)g(paren)m(t)f(at)h(in)m(v)m(o)s(cation.)49 b(Builtin)32 b(commands)g(that)h(are)g(in)m(v)m(ok)m(ed)h(as)e(part)g -(of)h(a)f(pip)s(eline)g(are)h(also)150 1110 y(executed)41 +(of)h(a)f(pip)s(eline)g(are)h(also)150 1113 y(executed)41 b(in)f(a)h(subshell)e(en)m(vironmen)m(t.)72 b(Changes)40 b(made)g(to)h(the)g(subshell)e(en)m(vironmen)m(t)i(cannot)150 -1219 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m(t.)275 -1351 y(Subshells)c(spa)m(wned)i(to)h(execute)g(command)f(substitutions) -g(inherit)g(the)g(v)-5 b(alue)31 b(of)f(the)h Ft(-e)e -Fu(option)150 1460 y(from)23 b(the)i(paren)m(t)f(shell.)38 -b(When)24 b(not)g(in)g Fm(posix)f Fu(mo)s(de,)i(Bash)f(clears)h(the)f -Ft(-e)f Fu(option)i(in)e(suc)m(h)h(subshells.)275 1592 -y(If)f(a)h(command)g(is)g(follo)m(w)m(ed)h(b)m(y)f(a)g(`)p +1223 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m(t.)275 +1356 y(When)e(the)h(shell)g(is)g(in)f Fm(posix)h Fu(mo)s(de,)f +(subshells)g(spa)m(wned)g(to)i(execute)g(command)e(substitutions)150 +1466 y(inherit)35 b(the)g(v)-5 b(alue)35 b(of)h(the)f +Ft(-e)f Fu(option)h(from)g(the)g(paren)m(t)g(shell.)55 +b(When)35 b(not)g(in)g Fm(posix)f Fu(mo)s(de,)i(Bash)150 +1575 y(clears)41 b(the)f Ft(-e)f Fu(option)h(in)g(suc)m(h)f(subshells)g +(See)h(the)g(description)g(of)g(the)g Ft(inherit_errexit)c +Fu(shell)150 1685 y(option)30 b(\(see)h(Section)g(4.2)g([Bash)f +(Builtins],)h(page)g(57\))g(for)f(ho)m(w)g(to)g(con)m(trol)i(this)e(b)s +(eha)m(vior)g(when)f(not)150 1795 y(in)h Fm(posix)g Fu(mo)s(de.)275 +1928 y(If)23 b(a)h(command)g(is)g(follo)m(w)m(ed)h(b)m(y)f(a)g(`)p Ft(&)p Fu(')g(and)f(job)h(con)m(trol)h(is)f(not)g(activ)m(e,)k(the)c -(default)g(standard)f(input)150 1701 y(for)35 b(the)g(command)g(is)g +(default)g(standard)f(input)150 2037 y(for)35 b(the)g(command)g(is)g (the)g(empt)m(y)h(\014le)f Ft(/dev/null)p Fu(.)52 b(Otherwise,)37 -b(the)e(in)m(v)m(ok)m(ed)h(command)f(inherits)150 1811 +b(the)e(in)m(v)m(ok)m(ed)h(command)f(inherits)150 2147 y(the)c(\014le)f(descriptors)g(of)h(the)f(calling)i(shell)f(as)f(mo)s -(di\014ed)g(b)m(y)g(redirections.)150 2004 y Fk(3.7.4)63 -b(En)m(vironmen)m(t)150 2151 y Fu(When)29 b(a)g(program)f(is)h(in)m(v)m +(di\014ed)g(b)m(y)g(redirections.)150 2344 y Fk(3.7.4)63 +b(En)m(vironmen)m(t)150 2491 y Fu(When)29 b(a)g(program)f(is)h(in)m(v)m (ok)m(ed)h(it)g(is)f(giv)m(en)g(an)g(arra)m(y)g(of)g(strings)g(called)h (the)f Fr(en)m(vironmen)m(t)p Fu(.)41 b(This)28 b(is)h(a)150 -2261 y(list)i(of)g(name-v)-5 b(alue)31 b(pairs,)f(of)h(the)f(form)g -Ft(name=value)p Fu(.)275 2392 y(Bash)39 b(pro)m(vides)g(sev)m(eral)i(w) +2600 y(list)i(of)g(name-v)-5 b(alue)31 b(pairs,)f(of)h(the)f(form)g +Ft(name=value)p Fu(.)275 2733 y(Bash)39 b(pro)m(vides)g(sev)m(eral)i(w) m(a)m(ys)g(to)f(manipulate)f(the)h(en)m(vironmen)m(t.)69 -b(On)38 b(in)m(v)m(o)s(cation,)44 b(the)c(shell)150 2502 +b(On)38 b(in)m(v)m(o)s(cation,)44 b(the)c(shell)150 2843 y(scans)g(its)h(o)m(wn)f(en)m(vironmen)m(t)h(and)f(creates)i(a)f (parameter)f(for)g(eac)m(h)i(name)e(found,)i(automatically)150 -2611 y(marking)23 b(it)h(for)f Ft(export)f Fu(to)i(c)m(hild)g(pro)s +2953 y(marking)23 b(it)h(for)f Ft(export)f Fu(to)i(c)m(hild)g(pro)s (cesses.)38 b(Executed)24 b(commands)f(inherit)g(the)g(en)m(vironmen)m -(t.)39 b(The)150 2721 y Ft(export)c Fu(and)i(`)p Ft(declare)29 +(t.)39 b(The)150 3062 y Ft(export)c Fu(and)i(`)p Ft(declare)29 b(-x)p Fu(')36 b(commands)h(allo)m(w)i(parameters)e(and)g(functions)g -(to)h(b)s(e)e(added)h(to)h(and)150 2830 y(deleted)21 +(to)h(b)s(e)e(added)h(to)h(and)150 3172 y(deleted)21 b(from)f(the)h(en)m(vironmen)m(t.)38 b(If)20 b(the)h(v)-5 b(alue)21 b(of)g(a)g(parameter)g(in)f(the)g(en)m(vironmen)m(t)i(is)e -(mo)s(di\014ed,)i(the)150 2940 y(new)31 b(v)-5 b(alue)32 +(mo)s(di\014ed,)i(the)150 3281 y(new)31 b(v)-5 b(alue)32 b(b)s(ecomes)f(part)h(of)f(the)h(en)m(vironmen)m(t,)g(replacing)h(the)e (old.)44 b(The)31 b(en)m(vironmen)m(t)h(inherited)150 -3050 y(b)m(y)f(an)m(y)g(executed)h(command)f(consists)g(of)g(the)g +3391 y(b)m(y)f(an)m(y)g(executed)h(command)f(consists)g(of)g(the)g (shell's)h(initial)g(en)m(vironmen)m(t,)g(whose)f(v)-5 -b(alues)31 b(ma)m(y)h(b)s(e)150 3159 y(mo)s(di\014ed)26 +b(alues)31 b(ma)m(y)h(b)s(e)150 3501 y(mo)s(di\014ed)26 b(in)g(the)h(shell,)h(less)f(an)m(y)g(pairs)f(remo)m(v)m(ed)i(b)m(y)f (the)g Ft(unset)e Fu(and)h(`)p Ft(export)j(-n)p Fu(')e(commands,)g -(plus)150 3269 y(an)m(y)k(additions)f(via)h(the)g Ft(export)d -Fu(and)i(`)p Ft(declare)f(-x)p Fu(')h(commands.)275 3400 +(plus)150 3610 y(an)m(y)k(additions)f(via)h(the)g Ft(export)d +Fu(and)i(`)p Ft(declare)f(-x)p Fu(')h(commands.)275 3743 y(The)j(en)m(vironmen)m(t)i(for)f(an)m(y)g(simple)h(command)f(or)g (function)g(ma)m(y)g(b)s(e)g(augmen)m(ted)h(temp)s(orarily)150 -3510 y(b)m(y)c(pre\014xing)e(it)i(with)g(parameter)g(assignmen)m(ts,)h +3853 y(b)m(y)c(pre\014xing)e(it)i(with)g(parameter)g(assignmen)m(ts,)h (as)e(describ)s(ed)g(in)g(Section)i(3.4)g([Shell)e(P)m(arameters],)150 -3619 y(page)g(21.)41 b(These)29 b(assignmen)m(t)i(statemen)m(ts)g +3963 y(page)g(21.)41 b(These)29 b(assignmen)m(t)i(statemen)m(ts)g (a\013ect)f(only)g(the)f(en)m(vironmen)m(t)h(seen)g(b)m(y)f(that)h -(command.)275 3751 y(If)g(the)h Ft(-k)g Fu(option)g(is)g(set)h(\(see)g -(Section)g(4.3.1)g([The)f(Set)g(Builtin],)h(page)g(67\),)h(then)e(all)g -(parameter)150 3860 y(assignmen)m(ts)f(are)g(placed)h(in)e(the)h(en)m +(command.)275 4096 y(If)g(the)h Ft(-k)g Fu(option)g(is)g(set)h(\(see)g +(Section)g(4.3.1)g([The)f(Set)g(Builtin],)h(page)g(69\),)h(then)e(all)g +(parameter)150 4205 y(assignmen)m(ts)f(are)g(placed)h(in)e(the)h(en)m (vironmen)m(t)g(for)g(a)g(command,)f(not)h(just)f(those)i(that)f -(precede)g(the)150 3970 y(command)g(name.)275 4101 y(When)h(Bash)h(in)m +(precede)g(the)150 4315 y(command)g(name.)275 4448 y(When)h(Bash)h(in)m (v)m(ok)m(es)i(an)e(external)h(command,)f(the)g(v)-5 b(ariable)33 b(`)p Ft($_)p Fu(')f(is)g(set)h(to)f(the)g(full)g -(pathname)150 4211 y(of)f(the)f(command)g(and)g(passed)g(to)h(that)g -(command)f(in)g(its)h(en)m(vironmen)m(t.)150 4404 y Fk(3.7.5)63 -b(Exit)40 b(Status)150 4551 y Fu(The)23 b(exit)i(status)f(of)h(an)e +(pathname)150 4558 y(of)f(the)f(command)g(and)g(passed)g(to)h(that)g +(command)f(in)g(its)h(en)m(vironmen)m(t.)150 4755 y Fk(3.7.5)63 +b(Exit)40 b(Status)150 4902 y Fu(The)23 b(exit)i(status)f(of)h(an)e (executed)i(command)f(is)g(the)g(v)-5 b(alue)24 b(returned)f(b)m(y)h -(the)g Ft(waitpid)e Fu(system)i(call)h(or)150 4661 y(equiv)-5 +(the)g Ft(waitpid)e Fu(system)i(call)h(or)150 5011 y(equiv)-5 b(alen)m(t)33 b(function.)45 b(Exit)32 b(statuses)g(fall)g(b)s(et)m(w)m (een)h(0)f(and)f(255,)i(though,)f(as)g(explained)g(b)s(elo)m(w,)h(the) -150 4770 y(shell)i(ma)m(y)g(use)f(v)-5 b(alues)35 b(ab)s(o)m(v)m(e)g +150 5121 y(shell)i(ma)m(y)g(use)f(v)-5 b(alues)35 b(ab)s(o)m(v)m(e)g (125)h(sp)s(ecially)-8 b(.)54 b(Exit)35 b(statuses)g(from)f(shell)h -(builtins)f(and)f(comp)s(ound)150 4880 y(commands)j(are)g(also)h +(builtins)f(and)f(comp)s(ound)150 5230 y(commands)j(are)g(also)h (limited)g(to)g(this)f(range.)58 b(Under)36 b(certain)h(circumstances,) -h(the)e(shell)h(will)f(use)150 4989 y(sp)s(ecial)31 b(v)-5 -b(alues)31 b(to)g(indicate)g(sp)s(eci\014c)f(failure)h(mo)s(des.)275 -5121 y(F)-8 b(or)32 b(the)g(shell's)g(purp)s(oses,)e(a)j(command)e -(whic)m(h)h(exits)g(with)g(a)g(zero)g(exit)h(status)f(has)f(succeeded.) -150 5230 y(A)e(non-zero)h(exit)g(status)g(indicates)g(failure.)40 +h(the)e(shell)h(will)f(use)150 5340 y(sp)s(ecial)31 b(v)-5 +b(alues)31 b(to)g(indicate)g(sp)s(eci\014c)f(failure)h(mo)s(des.)p +eop end +%%Page: 46 52 +TeXDict begin 46 51 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(46)275 299 +y(F)-8 b(or)32 b(the)g(shell's)g(purp)s(oses,)e(a)j(command)e(whic)m(h) +h(exits)g(with)g(a)g(zero)g(exit)h(status)f(has)f(succeeded.)150 +408 y(A)e(non-zero)h(exit)g(status)g(indicates)g(failure.)40 b(This)28 b(seemingly)i(coun)m(ter-in)m(tuitiv)m(e)i(sc)m(heme)e(is)f -(used)g(so)150 5340 y(there)34 b(is)g(one)g(w)m(ell-de\014ned)g(w)m(a)m +(used)g(so)150 518 y(there)34 b(is)g(one)g(w)m(ell-de\014ned)g(w)m(a)m (y)g(to)h(indicate)g(success)f(and)f(a)h(v)-5 b(ariet)m(y)35 -b(of)f(w)m(a)m(ys)h(to)f(indicate)h(v)-5 b(arious)p eop -end -%%Page: 45 51 -TeXDict begin 45 50 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(45)150 299 -y(failure)38 b(mo)s(des.)62 b(When)37 b(a)h(command)f(terminates)i(on)e -(a)h(fatal)h(signal)g(whose)e(n)m(um)m(b)s(er)f(is)i -Fr(N)p Fu(,)i(Bash)150 408 y(uses)30 b(the)g(v)-5 b(alue)31 +b(of)f(w)m(a)m(ys)h(to)f(indicate)h(v)-5 b(arious)150 +628 y(failure)38 b(mo)s(des.)62 b(When)37 b(a)h(command)f(terminates)i +(on)e(a)h(fatal)h(signal)g(whose)e(n)m(um)m(b)s(er)f(is)i +Fr(N)p Fu(,)i(Bash)150 737 y(uses)30 b(the)g(v)-5 b(alue)31 b(128)p Ft(+)p Fr(N)42 b Fu(as)30 b(the)h(exit)g(status.)275 -549 y(If)k(a)h(command)g(is)g(not)g(found,)g(the)g(c)m(hild)h(pro)s +868 y(If)k(a)h(command)g(is)g(not)g(found,)g(the)g(c)m(hild)h(pro)s (cess)e(created)i(to)g(execute)g(it)g(returns)d(a)j(status)f(of)150 -658 y(127.)42 b(If)30 b(a)h(command)f(is)g(found)f(but)h(is)g(not)h +977 y(127.)42 b(If)30 b(a)h(command)f(is)g(found)f(but)h(is)g(not)h (executable,)h(the)f(return)e(status)i(is)f(126.)275 -798 y(If)i(a)i(command)f(fails)g(b)s(ecause)g(of)h(an)f(error)f(during) -g(expansion)h(or)g(redirection,)i(the)f(exit)g(status)150 -908 y(is)c(greater)i(than)e(zero.)275 1048 y(The)38 b(exit)h(status)g -(is)g(used)f(b)m(y)g(the)h(Bash)g(conditional)h(commands)e(\(see)h -(Section)h(3.2.5.2)h([Con-)150 1158 y(ditional)i(Constructs],)h(page)f -(12\))g(and)e(some)i(of)f(the)g(list)g(constructs)g(\(see)h(Section)f -(3.2.4)i([Lists],)150 1267 y(page)31 b(10\).)275 1407 -y(All)40 b(of)g(the)h(Bash)f(builtins)f(return)g(an)h(exit)h(status)g -(of)f(zero)h(if)f(they)g(succeed)g(and)g(a)g(non-zero)150 -1517 y(status)34 b(on)f(failure,)i(so)f(they)g(ma)m(y)g(b)s(e)f(used)g -(b)m(y)g(the)h(conditional)h(and)e(list)h(constructs.)50 -b(All)35 b(builtins)150 1627 y(return)e(an)i(exit)g(status)g(of)f(2)h -(to)g(indicate)h(incorrect)f(usage,)h(generally)g(in)m(v)-5 -b(alid)35 b(options)g(or)f(missing)150 1736 y(argumen)m(ts.)275 -1876 y(The)f(exit)i(status)f(of)h(the)f(last)h(command)f(is)g(a)m(v)-5 +1108 y(If)i(a)i(command)f(fails)g(b)s(ecause)g(of)h(an)f(error)f +(during)g(expansion)h(or)g(redirection,)i(the)f(exit)g(status)150 +1218 y(is)c(greater)i(than)e(zero.)275 1348 y(The)38 +b(exit)h(status)g(is)g(used)f(b)m(y)g(the)h(Bash)g(conditional)h +(commands)e(\(see)h(Section)h(3.2.5.2)h([Con-)150 1458 +y(ditional)i(Constructs],)h(page)f(12\))g(and)e(some)i(of)f(the)g(list) +g(constructs)g(\(see)h(Section)f(3.2.4)i([Lists],)150 +1567 y(page)31 b(10\).)275 1698 y(All)40 b(of)g(the)h(Bash)f(builtins)f +(return)g(an)h(exit)h(status)g(of)f(zero)h(if)f(they)g(succeed)g(and)g +(a)g(non-zero)150 1807 y(status)34 b(on)f(failure,)i(so)f(they)g(ma)m +(y)g(b)s(e)f(used)g(b)m(y)g(the)h(conditional)h(and)e(list)h +(constructs.)50 b(All)35 b(builtins)150 1917 y(return)e(an)i(exit)g +(status)g(of)f(2)h(to)g(indicate)h(incorrect)f(usage,)h(generally)g(in) +m(v)-5 b(alid)35 b(options)g(or)f(missing)150 2027 y(argumen)m(ts.)275 +2157 y(The)f(exit)i(status)f(of)h(the)f(last)h(command)f(is)g(a)m(v)-5 b(ailable)36 b(in)e(the)g(sp)s(ecial)h(parameter)f($?)52 -b(\(see)35 b(Sec-)150 1986 y(tion)c(3.4.2)h([Sp)s(ecial)f(P)m -(arameters],)h(page)f(23\).)150 2191 y Fk(3.7.6)63 b(Signals)150 -2338 y Fu(When)36 b(Bash)g(is)h(in)m(teractiv)m(e,)j(in)c(the)h +b(\(see)35 b(Sec-)150 2267 y(tion)c(3.4.2)h([Sp)s(ecial)f(P)m +(arameters],)h(page)f(23\).)150 2458 y Fk(3.7.6)63 b(Signals)150 +2605 y Fu(When)36 b(Bash)g(is)h(in)m(teractiv)m(e,)j(in)c(the)h (absence)f(of)h(an)m(y)f(traps,)i(it)e(ignores)h Ft(SIGTERM)d -Fu(\(so)j(that)g(`)p Ft(kill)150 2447 y(0)p Fu(')c(do)s(es)g(not)g +Fu(\(so)j(that)g(`)p Ft(kill)150 2715 y(0)p Fu(')c(do)s(es)g(not)g (kill)g(an)g(in)m(teractiv)m(e)j(shell\),)f(and)d Ft(SIGINT)f Fu(is)i(caugh)m(t)h(and)f(handled)f(\(so)h(that)h(the)f -Ft(wait)150 2557 y Fu(builtin)24 b(is)h(in)m(terruptible\).)39 +Ft(wait)150 2824 y Fu(builtin)24 b(is)h(in)m(terruptible\).)39 b(When)24 b(Bash)g(receiv)m(es)j(a)d Ft(SIGINT)p Fu(,)h(it)g(breaks)f -(out)h(of)f(an)m(y)h(executing)h(lo)s(ops.)150 2667 y(In)31 +(out)h(of)f(an)m(y)h(executing)h(lo)s(ops.)150 2934 y(In)31 b(all)h(cases,)h(Bash)f(ignores)g Ft(SIGQUIT)p Fu(.)42 b(If)32 b(job)f(con)m(trol)i(is)e(in)h(e\013ect)h(\(see)f(Chapter)f(7)h -([Job)g(Con)m(trol],)150 2776 y(page)f(113\),)h(Bash)f(ignores)g +([Job)g(Con)m(trol],)150 3043 y(page)f(118\),)h(Bash)f(ignores)g Ft(SIGTTIN)p Fu(,)d Ft(SIGTTOU)p Fu(,)h(and)h Ft(SIGTSTP)p -Fu(.)275 2916 y(Non-builtin)h(commands)g(started)g(b)m(y)g(Bash)h(ha)m +Fu(.)275 3174 y(Non-builtin)h(commands)g(started)g(b)m(y)g(Bash)h(ha)m (v)m(e)g(signal)g(handlers)e(set)i(to)g(the)g(v)-5 b(alues)31 -b(inherited)150 3026 y(b)m(y)37 b(the)h(shell)g(from)f(its)h(paren)m +b(inherited)150 3284 y(b)m(y)37 b(the)h(shell)g(from)f(its)h(paren)m (t.)62 b(When)38 b(job)f(con)m(trol)i(is)e(not)h(in)f(e\013ect,)k -(async)m(hronous)c(commands)150 3136 y(ignore)f Ft(SIGINT)e +(async)m(hronous)c(commands)150 3393 y(ignore)f Ft(SIGINT)e Fu(and)h Ft(SIGQUIT)e Fu(in)j(addition)f(to)i(these)f(inherited)f -(handlers.)55 b(Commands)35 b(run)f(as)i(a)150 3245 y(result)27 +(handlers.)55 b(Commands)35 b(run)f(as)i(a)150 3503 y(result)27 b(of)h(command)f(substitution)h(ignore)g(the)g(k)m(eyb)s (oard-generated)g(job)g(con)m(trol)h(signals)f Ft(SIGTTIN)p -Fu(,)150 3355 y Ft(SIGTTOU)p Fu(,)h(and)g Ft(SIGTSTP)p -Fu(.)275 3495 y(The)h(shell)i(exits)g(b)m(y)f(default)g(up)s(on)f +Fu(,)150 3612 y Ft(SIGTTOU)p Fu(,)h(and)g Ft(SIGTSTP)p +Fu(.)275 3743 y(The)h(shell)i(exits)g(b)m(y)f(default)g(up)s(on)f (receipt)i(of)f(a)h Ft(SIGHUP)p Fu(.)42 b(Before)32 b(exiting,)h(an)e -(in)m(teractiv)m(e)j(shell)150 3604 y(resends)41 b(the)i +(in)m(teractiv)m(e)j(shell)150 3852 y(resends)41 b(the)i Ft(SIGHUP)e Fu(to)i(all)g(jobs,)i(running)c(or)h(stopp)s(ed.)76 b(Stopp)s(ed)41 b(jobs)h(are)h(sen)m(t)g Ft(SIGCONT)d -Fu(to)150 3714 y(ensure)32 b(that)h(they)g(receiv)m(e)i(the)e +Fu(to)150 3962 y(ensure)32 b(that)h(they)g(receiv)m(e)i(the)e Ft(SIGHUP)p Fu(.)47 b(T)-8 b(o)33 b(prev)m(en)m(t)g(the)g(shell)g(from) -g(sending)f(the)h Ft(SIGHUP)e Fu(signal)150 3824 y(to)i(a)g(particular) +g(sending)f(the)h Ft(SIGHUP)e Fu(signal)150 4072 y(to)i(a)g(particular) g(job,)g(it)g(should)f(b)s(e)g(remo)m(v)m(ed)h(from)g(the)f(jobs)g (table)i(with)e(the)h Ft(disown)e Fu(builtin)h(\(see)150 -3933 y(Section)c(7.2)g([Job)e(Con)m(trol)i(Builtins],)g(page)g(114\))h +4181 y(Section)c(7.2)g([Job)e(Con)m(trol)i(Builtins],)g(page)g(119\))h (or)e(mark)m(ed)g(to)g(not)g(receiv)m(e)i Ft(SIGHUP)c -Fu(using)i Ft(disown)150 4043 y(-h)p Fu(.)275 4183 y(If)38 +Fu(using)i Ft(disown)150 4291 y(-h)p Fu(.)275 4421 y(If)38 b(the)h Ft(huponexit)e Fu(shell)i(option)g(has)g(b)s(een)f(set)i(with)f Ft(shopt)e Fu(\(see)j(Section)g(4.3.2)h([The)e(Shopt)150 -4293 y(Builtin],)31 b(page)g(71\),)h(Bash)f(sends)e(a)i +4531 y(Builtin],)31 b(page)g(73\),)h(Bash)f(sends)e(a)i Ft(SIGHUP)e Fu(to)i(all)g(jobs)f(when)f(an)i(in)m(teractiv)m(e)i(login) -e(shell)g(exits.)275 4433 y(If)38 b(Bash)h(is)g(w)m(aiting)h(for)f(a)g +e(shell)g(exits.)275 4661 y(If)38 b(Bash)h(is)g(w)m(aiting)h(for)f(a)g (command)f(to)i(complete)g(and)e(receiv)m(es)j(a)e(signal)h(for)e(whic) -m(h)h(a)g(trap)150 4542 y(has)c(b)s(een)f(set,)i(the)f(trap)g(will)g +m(h)h(a)g(trap)150 4771 y(has)c(b)s(een)f(set,)i(the)f(trap)g(will)g (not)g(b)s(e)f(executed)i(un)m(til)f(the)g(command)f(completes.)55 -b(When)35 b(Bash)g(is)150 4652 y(w)m(aiting)j(for)f(an)g(async)m +b(When)35 b(Bash)g(is)150 4881 y(w)m(aiting)j(for)f(an)g(async)m (hronous)g(command)g(via)h(the)f Ft(wait)f Fu(builtin,)i(the)g -(reception)g(of)f(a)g(signal)h(for)150 4761 y(whic)m(h)d(a)g(trap)g +(reception)g(of)f(a)g(signal)h(for)150 4990 y(whic)m(h)d(a)g(trap)g (has)g(b)s(een)f(set)h(will)h(cause)f(the)g Ft(wait)f Fu(builtin)h(to)g(return)f(immediately)i(with)f(an)g(exit)150 -4871 y(status)c(greater)g(than)f(128,)i(immediately)g(after)f(whic)m(h) -f(the)h(trap)f(is)g(executed.)275 5011 y(When)41 b(job)g(con)m(trol)h +5100 y(status)c(greater)g(than)f(128,)i(immediately)g(after)f(whic)m(h) +f(the)h(trap)f(is)g(executed.)275 5230 y(When)41 b(job)g(con)m(trol)h (is)g(not)f(enabled,)k(and)40 b(Bash)i(is)f(w)m(aiting)i(for)e(a)h -(foreground)e(command)h(to)150 5121 y(complete,)35 b(the)e(shell)h +(foreground)e(command)h(to)150 5340 y(complete,)35 b(the)e(shell)h (receiv)m(es)g(k)m(eyb)s(oard-generated)g(signals)g(suc)m(h)e(as)i -Ft(SIGINT)d Fu(\(usually)i(generated)150 5230 y(b)m(y)e(`)p -Ft(^C)p Fu('\))h(that)g(users)e(commonly)i(in)m(tend)g(to)g(send)e(to)j -(that)f(command.)43 b(This)31 b(happ)s(ens)e(b)s(ecause)j(the)150 -5340 y(shell)23 b(and)g(the)h(command)f(are)g(in)g(the)h(same)f(pro)s -(cess)g(group)g(as)h(the)f(terminal,)i(and)e(`)p Ft(^C)p -Fu(')g(sends)g Ft(SIGINT)p eop end -%%Page: 46 52 -TeXDict begin 46 51 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(46)150 299 -y(to)35 b(all)g(pro)s(cesses)f(in)g(that)g(pro)s(cess)g(group.)51 -b(See)35 b(Chapter)e(7)i([Job)f(Con)m(trol],)i(page)f(113,)h(for)e(a)h -(more)150 408 y(in-depth)30 b(discussion)f(of)i(pro)s(cess)f(groups.) -275 542 y(When)35 b(Bash)h(is)g(running)f(without)h(job)f(con)m(trol)i +Ft(SIGINT)d Fu(\(usually)i(generated)p eop end +%%Page: 47 53 +TeXDict begin 47 52 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(47)150 299 +y(b)m(y)31 b(`)p Ft(^C)p Fu('\))h(that)g(users)e(commonly)i(in)m(tend)g +(to)g(send)e(to)j(that)f(command.)43 b(This)31 b(happ)s(ens)e(b)s +(ecause)j(the)150 408 y(shell)23 b(and)g(the)h(command)f(are)g(in)g +(the)h(same)f(pro)s(cess)g(group)g(as)h(the)f(terminal,)i(and)e(`)p +Ft(^C)p Fu(')g(sends)g Ft(SIGINT)150 518 y Fu(to)35 b(all)g(pro)s +(cesses)f(in)g(that)g(pro)s(cess)g(group.)51 b(See)35 +b(Chapter)e(7)i([Job)f(Con)m(trol],)i(page)f(118,)h(for)e(a)h(more)150 +628 y(in-depth)30 b(discussion)f(of)i(pro)s(cess)f(groups.)275 +773 y(When)35 b(Bash)h(is)g(running)f(without)h(job)f(con)m(trol)i (enabled)f(and)g(receiv)m(es)h Ft(SIGINT)e Fu(while)h(w)m(aiting)150 -651 y(for)g(a)h(foreground)f(command,)i(it)f(w)m(aits)g(un)m(til)g +882 y(for)g(a)h(foreground)f(command,)i(it)f(w)m(aits)g(un)m(til)g (that)g(foreground)f(command)g(terminates)h(and)f(then)150 -761 y(decides)31 b(what)f(to)h(do)f(ab)s(out)g(the)h -Ft(SIGINT)p Fu(:)199 894 y(1.)61 b(If)29 b(the)h(command)f(terminates)i -(due)d(to)j(the)e Ft(SIGINT)p Fu(,)g(Bash)g(concludes)h(that)g(the)g -(user)f(mean)m(t)h(to)330 1004 y(end)25 b(the)h(en)m(tire)h(script,)g +992 y(decides)31 b(what)f(to)h(do)f(ab)s(out)g(the)h +Ft(SIGINT)p Fu(:)199 1137 y(1.)61 b(If)29 b(the)h(command)f(terminates) +i(due)d(to)j(the)e Ft(SIGINT)p Fu(,)g(Bash)g(concludes)h(that)g(the)g +(user)f(mean)m(t)h(to)330 1247 y(end)25 b(the)h(en)m(tire)h(script,)g (and)f(acts)h(on)e(the)i Ft(SIGINT)d Fu(\(e.g.,)k(b)m(y)e(running)f(a)h -Ft(SIGINT)e Fu(trap)i(or)g(exiting)330 1113 y(itself)7 -b(\);)199 1246 y(2.)61 b(If)39 b(the)g(pip)s(eline)g(do)s(es)g(not)h +Ft(SIGINT)e Fu(trap)i(or)g(exiting)330 1356 y(itself)7 +b(\);)199 1496 y(2.)61 b(If)39 b(the)g(pip)s(eline)g(do)s(es)g(not)h (terminate)g(due)f(to)h Ft(SIGINT)p Fu(,)g(the)g(program)f(handled)f -(the)i Ft(SIGINT)330 1356 y Fu(itself)35 b(and)e(did)h(not)g(treat)h +(the)i Ft(SIGINT)330 1606 y Fu(itself)35 b(and)e(did)h(not)g(treat)h (it)g(as)f(a)g(fatal)i(signal.)52 b(In)33 b(that)i(case,)h(Bash)e(do)s -(es)g(not)g(treat)i Ft(SIGINT)330 1466 y Fu(as)41 b(a)g(fatal)g +(es)g(not)g(treat)i Ft(SIGINT)330 1715 y Fu(as)41 b(a)g(fatal)g (signal,)j(either,)g(instead)d(assuming)f(that)h(the)g Ft(SIGINT)d Fu(w)m(as)j(used)f(as)h(part)f(of)h(the)330 -1575 y(program's)32 b(normal)g(op)s(eration)h(\(e.g.,)h +1825 y(program's)32 b(normal)g(op)s(eration)h(\(e.g.,)h Ft(emacs)d Fu(uses)g(it)i(to)g(ab)s(ort)f(editing)h(commands\))f(or)g -(delib-)330 1685 y(erately)41 b(discarded.)69 b(Ho)m(w)m(ev)m(er,)45 +(delib-)330 1935 y(erately)41 b(discarded.)69 b(Ho)m(w)m(ev)m(er,)45 b(Bash)40 b(will)h(run)d(an)m(y)j(trap)e(set)i(on)f Ft(SIGINT)p -Fu(,)h(as)f(it)h(do)s(es)e(with)330 1794 y(an)m(y)31 +Fu(,)h(as)f(it)h(do)s(es)e(with)330 2044 y(an)m(y)31 b(other)f(trapp)s(ed)f(signal)i(it)g(receiv)m(es)h(while)e(it)h(is)f(w) m(aiting)h(for)f(the)h(foreground)e(command)h(to)330 -1904 y(complete,)i(for)e(compatibilit)m(y)-8 b(.)150 -2142 y Fs(3.8)68 b(Shell)45 b(Scripts)150 2302 y Fu(A)30 +2154 y(complete,)i(for)e(compatibilit)m(y)-8 b(.)150 +2411 y Fs(3.8)68 b(Shell)45 b(Scripts)150 2570 y Fu(A)30 b(shell)f(script)h(is)f(a)h(text)h(\014le)f(con)m(taining)h(shell)f (commands.)40 b(When)29 b(suc)m(h)g(a)h(\014le)g(is)f(used)g(as)h(the)g -(\014rst)150 2411 y(non-option)c(argumen)m(t)h(when)e(in)m(v)m(oking)i +(\014rst)150 2680 y(non-option)c(argumen)m(t)h(when)e(in)m(v)m(oking)i (Bash,)g(and)f(neither)g(the)g Ft(-c)g Fu(nor)f Ft(-s)h -Fu(option)g(is)g(supplied)f(\(see)150 2521 y(Section)39 -b(6.1)g([In)m(v)m(oking)g(Bash],)h(page)f(91\),)i(Bash)d(reads)g(and)f -(executes)i(commands)f(from)f(the)i(\014le,)150 2630 +Fu(option)g(is)g(supplied)f(\(see)150 2789 y(Section)39 +b(6.1)g([In)m(v)m(oking)g(Bash],)h(page)f(94\),)i(Bash)d(reads)g(and)f +(executes)i(commands)f(from)f(the)i(\014le,)150 2899 y(then)32 b(exits.)46 b(This)32 b(mo)s(de)f(of)i(op)s(eration)f (creates)i(a)e(non-in)m(teractiv)m(e)j(shell.)46 b(The)31 -b(shell)i(\014rst)e(searc)m(hes)150 2740 y(for)d(the)g(\014le)g(in)g +b(shell)i(\014rst)e(searc)m(hes)150 3008 y(for)d(the)g(\014le)g(in)g (the)g(curren)m(t)f(directory)-8 b(,)30 b(and)d(lo)s(oks)i(in)e(the)i (directories)g(in)e Ft($PATH)g Fu(if)h(not)g(found)e(there.)275 -2873 y(When)34 b(Bash)h(runs)e(a)i(shell)g(script,)g(it)h(sets)f(the)f +3154 y(When)34 b(Bash)h(runs)e(a)i(shell)g(script,)g(it)h(sets)f(the)f (sp)s(ecial)i(parameter)f Ft(0)f Fu(to)h(the)g(name)g(of)g(the)g -(\014le,)150 2983 y(rather)k(than)g(the)h(name)f(of)h(the)f(shell,)j +(\014le,)150 3263 y(rather)k(than)g(the)h(name)f(of)h(the)f(shell,)j (and)d(the)h(p)s(ositional)g(parameters)f(are)h(set)g(to)g(the)g -(remain-)150 3092 y(ing)f(argumen)m(ts,)j(if)d(an)m(y)g(are)g(giv)m +(remain-)150 3373 y(ing)f(argumen)m(ts,)j(if)d(an)m(y)g(are)g(giv)m (en.)67 b(If)39 b(no)g(additional)g(argumen)m(ts)h(are)f(supplied,)h -(the)f(p)s(ositional)150 3202 y(parameters)31 b(are)f(unset.)275 -3335 y(A)39 b(shell)h(script)f(ma)m(y)h(b)s(e)f(made)h(executable)h(b)m +(the)f(p)s(ositional)150 3482 y(parameters)31 b(are)f(unset.)275 +3628 y(A)39 b(shell)h(script)f(ma)m(y)h(b)s(e)f(made)h(executable)h(b)m (y)e(using)g(the)h Ft(chmod)e Fu(command)h(to)h(turn)e(on)i(the)150 -3445 y(execute)j(bit.)73 b(When)41 b(Bash)g(\014nds)e(suc)m(h)i(a)h +3737 y(execute)j(bit.)73 b(When)41 b(Bash)g(\014nds)e(suc)m(h)i(a)h (\014le)f(while)g(searc)m(hing)h(the)f Ft($PATH)f Fu(for)h(a)h -(command,)h(it)150 3554 y(creates)32 b(a)f(new)e(instance)i(of)g +(command,)h(it)150 3847 y(creates)32 b(a)f(new)e(instance)i(of)g (itself)g(to)g(execute)h(it.)41 b(In)30 b(other)h(w)m(ords,)f -(executing)390 3688 y Ft(filename)46 b Fj(arguments)150 -3821 y Fu(is)30 b(equiv)-5 b(alen)m(t)32 b(to)f(executing)390 -3954 y Ft(bash)47 b(filename)e Fj(arguments)150 4087 +(executing)390 3992 y Ft(filename)46 b Fj(arguments)150 +4137 y Fu(is)30 b(equiv)-5 b(alen)m(t)32 b(to)f(executing)390 +4282 y Ft(bash)47 b(filename)e Fj(arguments)150 4428 y Fu(if)30 b Ft(filename)d Fu(is)j(an)f(executable)j(shell)e(script.)40 b(This)29 b(subshell)g(reinitializes)i(itself,)g(so)f(that)h(the)e -(e\013ect)150 4197 y(is)36 b(as)h(if)g(a)f(new)g(shell)h(had)f(b)s(een) +(e\013ect)150 4537 y(is)36 b(as)h(if)g(a)f(new)g(shell)h(had)f(b)s(een) g(in)m(v)m(ok)m(ed)h(to)h(in)m(terpret)e(the)h(script,)h(with)e(the)h -(exception)h(that)f(the)150 4306 y(lo)s(cations)25 b(of)g(commands)e +(exception)h(that)f(the)150 4647 y(lo)s(cations)25 b(of)g(commands)e (remem)m(b)s(ered)h(b)m(y)g(the)g(paren)m(t)g(\(see)h(the)f (description)g(of)g Ft(hash)f Fu(in)h(Section)h(4.1)150 -4416 y([Bourne)30 b(Shell)h(Builtins],)g(page)g(48\))h(are)e(retained)h -(b)m(y)f(the)h(c)m(hild.)275 4549 y(Most)36 b(v)m(ersions)g(of)g(Unix)f +4756 y([Bourne)30 b(Shell)h(Builtins],)g(page)g(49\))h(are)e(retained)h +(b)m(y)f(the)h(c)m(hild.)275 4902 y(Most)36 b(v)m(ersions)g(of)g(Unix)f (mak)m(e)h(this)g(a)g(part)f(of)h(the)g(op)s(erating)g(system's)f -(command)h(execution)150 4659 y(mec)m(hanism.)50 b(If)33 +(command)h(execution)150 5011 y(mec)m(hanism.)50 b(If)33 b(the)g(\014rst)g(line)h(of)f(a)h(script)f(b)s(egins)g(with)g(the)g(t)m (w)m(o)i(c)m(haracters)g(`)p Ft(#!)p Fu(',)f(the)g(remainder)150 -4768 y(of)27 b(the)g(line)g(sp)s(eci\014es)g(an)g(in)m(terpreter)g(for) +5121 y(of)27 b(the)g(line)g(sp)s(eci\014es)g(an)g(in)m(terpreter)g(for) g(the)g(program)g(and,)g(dep)s(ending)e(on)i(the)g(op)s(erating)h -(system,)150 4878 y(one)e(or)g(more)g(optional)h(argumen)m(ts)f(for)g +(system,)150 5230 y(one)e(or)g(more)g(optional)h(argumen)m(ts)f(for)g (that)g(in)m(terpreter.)40 b(Th)m(us,)26 b(y)m(ou)g(can)g(sp)s(ecify)g -(Bash,)h Ft(awk)p Fu(,)f(P)m(erl,)150 4988 y(or)k(some)h(other)g(in)m +(Bash,)h Ft(awk)p Fu(,)f(P)m(erl,)150 5340 y(or)k(some)h(other)g(in)m (terpreter)g(and)e(write)i(the)f(rest)h(of)g(the)f(script)g(\014le)h -(in)f(that)h(language.)275 5121 y(The)k(argumen)m(ts)h(to)h(the)f(in)m -(terpreter)h(consist)f(of)h(one)f(or)g(more)g(optional)h(argumen)m(ts)f -(follo)m(wing)150 5230 y(the)e(in)m(terpreter)g(name)g(on)g(the)g -(\014rst)g(line)g(of)g(the)g(script)g(\014le,)h(follo)m(w)m(ed)h(b)m(y) -e(the)g(name)g(of)g(the)g(script)150 5340 y(\014le,)k(follo)m(w)m(ed)g -(b)m(y)e(the)g(rest)g(of)g(the)h(argumen)m(ts)f(supplied)f(to)i(the)f -(script.)58 b(The)35 b(details)i(of)g(ho)m(w)f(the)p -eop end -%%Page: 47 53 -TeXDict begin 47 52 bop 150 -116 a Fu(Chapter)30 b(3:)41 -b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(47)150 299 -y(in)m(terpreter)26 b(line)g(is)g(split)g(in)m(to)h(an)f(in)m -(terpreter)g(name)g(and)f(a)h(set)h(of)e(argumen)m(ts)i(v)-5 -b(ary)25 b(across)i(systems.)150 408 y(Bash)j(will)f(p)s(erform)g(this) -g(action)i(on)e(op)s(erating)h(systems)g(that)g(do)f(not)h(handle)f(it) -h(themselv)m(es.)42 b(Note)150 518 y(that)e(some)g(older)g(v)m(ersions) -g(of)g(Unix)f(limit)i(the)f(in)m(terpreter)g(name)g(and)f(a)h(single)g -(argumen)m(t)g(to)h(a)150 628 y(maxim)m(um)21 b(of)g(32)h(c)m -(haracters,)j(so)c(it's)h(not)g(p)s(ortable)f(to)h(assume)e(that)i -(using)f(more)g(than)g(one)g(argumen)m(t)150 737 y(will)31 -b(w)m(ork.)275 872 y(Bash)h(scripts)g(often)g(b)s(egin)g(with)g -Ft(#!)e(/bin/bash)g Fu(\(assuming)i(that)h(Bash)f(has)g(b)s(een)f -(installed)i(in)150 981 y Ft(/bin)p Fu(\),)26 b(since)h(this)f(ensures) -f(that)i(Bash)f(will)h(b)s(e)f(used)f(to)i(in)m(terpret)f(the)h -(script,)g(ev)m(en)g(if)f(it)h(is)f(executed)150 1091 -y(under)h(another)h(shell.)41 b(It's)28 b(a)h(common)g(idiom)f(to)h -(use)f Ft(env)g Fu(to)h(\014nd)e Ft(bash)g Fu(ev)m(en)i(if)f(it's)i(b)s -(een)d(installed)150 1200 y(in)h(another)g(directory:)40 -b Ft(#!/usr/bin/env)27 b(bash)f Fu(will)j(\014nd)d(the)j(\014rst)e(o)s -(ccurrence)h(of)g Ft(bash)f Fu(in)h Ft($PATH)p Fu(.)p -eop end +(in)f(that)h(language.)p eop end %%Page: 48 54 -TeXDict begin 48 53 bop 3659 -116 a Fu(48)150 299 y Fp(4)80 +TeXDict begin 48 53 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(48)275 299 +y(The)35 b(argumen)m(ts)h(to)h(the)f(in)m(terpreter)h(consist)f(of)h +(one)f(or)g(more)g(optional)h(argumen)m(ts)f(follo)m(wing)150 +408 y(the)e(in)m(terpreter)g(name)g(on)g(the)g(\014rst)g(line)g(of)g +(the)g(script)g(\014le,)h(follo)m(w)m(ed)h(b)m(y)e(the)g(name)g(of)g +(the)g(script)150 518 y(\014le,)k(follo)m(w)m(ed)g(b)m(y)e(the)g(rest)g +(of)g(the)h(argumen)m(ts)f(supplied)f(to)i(the)f(script.)58 +b(The)35 b(details)i(of)g(ho)m(w)f(the)150 628 y(in)m(terpreter)26 +b(line)g(is)g(split)g(in)m(to)h(an)f(in)m(terpreter)g(name)g(and)f(a)h +(set)h(of)e(argumen)m(ts)i(v)-5 b(ary)25 b(across)i(systems.)150 +737 y(Bash)j(will)f(p)s(erform)g(this)g(action)i(on)e(op)s(erating)h +(systems)g(that)g(do)f(not)h(handle)f(it)h(themselv)m(es.)42 +b(Note)150 847 y(that)e(some)g(older)g(v)m(ersions)g(of)g(Unix)f(limit) +i(the)f(in)m(terpreter)g(name)g(and)f(a)h(single)g(argumen)m(t)g(to)h +(a)150 956 y(maxim)m(um)21 b(of)g(32)h(c)m(haracters,)j(so)c(it's)h +(not)g(p)s(ortable)f(to)h(assume)e(that)i(using)f(more)g(than)g(one)g +(argumen)m(t)150 1066 y(will)31 b(w)m(ork.)275 1200 y(Bash)h(scripts)g +(often)g(b)s(egin)g(with)g Ft(#!)e(/bin/bash)g Fu(\(assuming)i(that)h +(Bash)f(has)g(b)s(een)f(installed)i(in)150 1310 y Ft(/bin)p +Fu(\),)26 b(since)h(this)f(ensures)f(that)i(Bash)f(will)h(b)s(e)f(used) +f(to)i(in)m(terpret)f(the)h(script,)g(ev)m(en)g(if)f(it)h(is)f +(executed)150 1420 y(under)h(another)h(shell.)41 b(It's)28 +b(a)h(common)g(idiom)f(to)h(use)f Ft(env)g Fu(to)h(\014nd)e +Ft(bash)g Fu(ev)m(en)i(if)f(it's)i(b)s(een)d(installed)150 +1529 y(in)h(another)g(directory:)40 b Ft(#!/usr/bin/env)27 +b(bash)f Fu(will)j(\014nd)d(the)j(\014rst)e(o)s(ccurrence)h(of)g +Ft(bash)f Fu(in)h Ft($PATH)p Fu(.)p eop end +%%Page: 49 55 +TeXDict begin 49 54 bop 3659 -116 a Fu(49)150 299 y Fp(4)80 b(Shell)53 b(Builtin)f(Commands)150 499 y Fu(Builtin)34 b(commands)f(are)h(con)m(tained)g(within)f(the)h(shell)g(itself.)50 b(When)34 b(the)f(name)h(of)f(a)h(builtin)f(com-)150 @@ -11631,12 +11730,12 @@ b(Builtin)150 828 y(commands)f(are)h(necessary)g(to)g(implemen)m(t)g (other)g(c)m(hapters:)69 b(builtin)43 b(commands)h(whic)m(h)150 1412 y(pro)m(vide)23 b(the)h(Bash)f(in)m(terface)i(to)f(the)g(job)f (con)m(trol)i(facilities)g(\(see)f(Section)h(7.2)f([Job)f(Con)m(trol)h -(Builtins],)150 1521 y(page)33 b(114\),)i(the)e(directory)g(stac)m(k)h +(Builtins],)150 1521 y(page)33 b(119\),)i(the)e(directory)g(stac)m(k)h (\(see)f(Section)h(6.8.1)g([Directory)g(Stac)m(k)g(Builtins],)g(page)f -(102\),)i(the)150 1631 y(command)23 b(history)h(\(see)g(Section)g(9.2)h -([Bash)f(History)g(Builtins],)h(page)g(152\),)h(and)d(the)h +(106\),)i(the)150 1631 y(command)23 b(history)h(\(see)g(Section)g(9.2)h +([Bash)f(History)g(Builtins],)h(page)g(159\),)h(and)d(the)h (programmable)150 1740 y(completion)32 b(facilities)g(\(see)g(Section)f -(8.7)g([Programmable)g(Completion)g(Builtins],)g(page)h(146\).)275 +(8.7)g([Programmable)g(Completion)g(Builtins],)g(page)h(152\).)275 1868 y(Man)m(y)f(of)f(the)h(builtins)e(ha)m(v)m(e)j(b)s(een)e(extended) g(b)m(y)g Fm(posix)g Fu(or)g(Bash.)275 1996 y(Unless)20 b(otherwise)h(noted,)h(eac)m(h)g(builtin)e(command)g(do)s(cumen)m(ted)g @@ -11697,9 +11796,9 @@ Fu(is)36 b(not)g(found,)h(or)e(cannot)i(b)s(e)e(read,)j(the)e(return)f (status)h(is)g(non-zero.)58 b(This)630 5340 y(builtin)30 b(is)g(equiv)-5 b(alen)m(t)32 b(to)f Ft(source)p Fu(.)p eop end -%%Page: 49 55 -TeXDict begin 49 54 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(49)150 299 y Ft(break)870 +%%Page: 50 56 +TeXDict begin 50 55 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(50)150 299 y Ft(break)870 433 y(break)46 b([)p Fj(n)p Ft(])630 568 y Fu(Exit)f(from)f(a)g Ft(for)p Fu(,)k Ft(while)p Fu(,)e Ft(until)p Fu(,)h(or)d Ft(select)f Fu(lo)s(op.)83 b(If)44 b Fr(n)g Fu(is)g(supplied,)j(the)e @@ -11707,22 +11806,23 @@ Fr(n)p Fu(th)630 677 y(enclosing)c(lo)s(op)f(is)h(exited.)70 b Fr(n)40 b Fu(m)m(ust)g(b)s(e)f(greater)j(than)d(or)i(equal)f(to)h(1.) 70 b(The)40 b(return)630 787 y(status)31 b(is)f(zero)h(unless)f Fr(n)g Fu(is)g(not)h(greater)g(than)g(or)f(equal)h(to)g(1.)150 -946 y Ft(cd)870 1081 y(cd)47 b([-L|[-P)f([-e]])g([-@])h([)p +946 y Ft(cd)870 1081 y(cd)47 b([-L|[-P)f([-e]]])g([-@])h([)p Fj(directory)p Ft(])630 1215 y Fu(Change)27 b(the)g(curren)m(t)f(w)m (orking)h(directory)g(to)h Fr(directory)p Fu(.)40 b(If)26 b Fr(directory)35 b Fu(is)27 b(not)g(supplied,)630 1325 y(the)k(v)-5 b(alue)31 b(of)g(the)g Ft(HOME)e Fu(shell)i(v)-5 b(ariable)32 b(is)f(used.)40 b(If)31 b(the)g(shell)g(v)-5 -b(ariable)31 b Ft(CDPATH)e Fu(exists,)630 1435 y(it)44 -b(is)f(used)g(as)h(a)f(searc)m(h)h(path:)67 b(eac)m(h)45 -b(directory)f(name)f(in)g Ft(CDPATH)f Fu(is)h(searc)m(hed)h(for)630 -1544 y Fr(directory)p Fu(,)k(with)c(alternativ)m(e)i(directory)f(names) -e(in)h Ft(CDPATH)e Fu(separated)j(b)m(y)f(a)g(colon)630 -1654 y(\(`)p Ft(:)p Fu('\).)e(If)30 b Fr(directory)38 -b Fu(b)s(egins)30 b(with)g(a)h(slash,)f Ft(CDPATH)f Fu(is)h(not)h -(used.)630 1788 y(The)g Ft(-P)h Fu(option)g(means)g(to)h(not)f(follo)m -(w)h(sym)m(b)s(olic)g(links:)44 b(sym)m(b)s(olic)32 b(links)g(are)g -(resolv)m(ed)630 1898 y(while)41 b Ft(cd)f Fu(is)h(tra)m(v)m(ersing)h +b(ariable)31 b Ft(CDPATH)e Fu(exists,)630 1435 y Ft(cd)40 +b Fu(uses)h(it)g(as)g(a)g(searc)m(h)g(path:)62 b Ft(cd)40 +b Fu(searc)m(hes)i(eac)m(h)g(directory)f(name)g(in)f +Ft(CDPATH)f Fu(for)630 1544 y Fr(directory)p Fu(,)48 +b(with)c(alternativ)m(e)i(directory)f(names)e(in)h Ft(CDPATH)e +Fu(separated)j(b)m(y)f(a)g(colon)630 1654 y(\(`)p Ft(:)p +Fu('\).)e(If)30 b Fr(directory)38 b Fu(b)s(egins)30 b(with)g(a)h +(slash,)f Ft(CDPATH)f Fu(is)h(not)h(used.)630 1788 y(The)g +Ft(-P)h Fu(option)g(means)g(to)h(not)f(follo)m(w)h(sym)m(b)s(olic)g +(links:)44 b(sym)m(b)s(olic)32 b(links)g(are)g(resolv)m(ed)630 +1898 y(while)41 b Ft(cd)f Fu(is)h(tra)m(v)m(ersing)h Fr(directory)49 b Fu(and)40 b(b)s(efore)g(pro)s(cessing)h(an)f (instance)i(of)f(`)p Ft(..)p Fu(')f(in)630 2007 y Fr(directory)p Fu(.)630 2142 y(By)34 b(default,)h(or)e(when)g(the)g @@ -11770,1963 +11870,2102 @@ b(than)f(or)g(equal)g(to)h(1.)63 b(The)38 b(return)e(status)j(is)e (zero)i(unless)e Fr(n)h Fu(is)g(not)g(greater)630 5046 y(than)30 b(or)g(equal)h(to)g(1.)150 5205 y Ft(eval)870 5340 y(eval)47 b([)p Fj(arguments)p Ft(])p eop end -%%Page: 50 56 -TeXDict begin 50 55 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(50)630 299 y(The)25 +%%Page: 51 57 +TeXDict begin 51 56 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(51)630 299 y(The)25 b(argumen)m(ts)h(are)g(concatenated)i(together)f(in)m(to)f(a)g(single)h (command,)f(whic)m(h)g(is)f(then)630 408 y(read)35 b(and)g(executed,)j (and)d(its)h(exit)g(status)g(returned)e(as)h(the)h(exit)g(status)g(of)g Ft(eval)p Fu(.)54 b(If)630 518 y(there)31 b(are)f(no)h(argumen)m(ts)f (or)h(only)f(empt)m(y)h(argumen)m(ts,)g(the)f(return)g(status)g(is)h -(zero.)150 679 y Ft(exec)870 815 y(exec)47 b([-cl])f([-a)h +(zero.)150 680 y Ft(exec)870 816 y(exec)47 b([-cl])f([-a)h Fj(name)p Ft(])f([)p Fj(command)g Ft([)p Fj(arguments)p -Ft(]])630 950 y Fu(If)36 b Fr(command)k Fu(is)c(supplied,)h(it)g +Ft(]])630 951 y Fu(If)36 b Fr(command)k Fu(is)c(supplied,)h(it)g (replaces)h(the)e(shell)h(without)f(creating)i(a)f(new)f(pro)s(cess.) -630 1060 y(If)k(the)h Ft(-l)e Fu(option)i(is)g(supplied,)h(the)e(shell) +630 1061 y(If)k(the)h Ft(-l)e Fu(option)i(is)g(supplied,)h(the)e(shell) h(places)g(a)g(dash)f(at)h(the)f(b)s(eginning)g(of)h(the)630 -1169 y(zeroth)36 b(argumen)m(t)h(passed)e(to)h Fr(command)p +1170 y(zeroth)36 b(argumen)m(t)h(passed)e(to)h Fr(command)p Fu(.)57 b(This)35 b(is)h(what)f(the)h Ft(login)e Fu(program)i(do)s(es.) -630 1279 y(The)i Ft(-c)g Fu(option)g(causes)h Fr(command)j +630 1280 y(The)i Ft(-c)g Fu(option)g(causes)h Fr(command)j Fu(to)d(b)s(e)f(executed)h(with)f(an)g(empt)m(y)h(en)m(vironmen)m(t.) -630 1388 y(If)c Ft(-a)g Fu(is)h(supplied,)f(the)h(shell)g(passes)f +630 1390 y(If)c Ft(-a)g Fu(is)h(supplied,)f(the)h(shell)g(passes)f Fr(name)41 b Fu(as)36 b(the)f(zeroth)i(argumen)m(t)f(to)g -Fr(command)p Fu(.)630 1498 y(If)c Fr(command)j Fu(cannot)e(b)s(e)f +Fr(command)p Fu(.)630 1499 y(If)c Fr(command)j Fu(cannot)e(b)s(e)f (executed)h(for)f(some)g(reason,)h(a)g(non-in)m(teractiv)m(e)i(shell)d -(exits,)630 1608 y(unless)27 b(the)g Ft(execfail)e Fu(shell)i(option)h +(exits,)630 1609 y(unless)27 b(the)g Ft(execfail)e Fu(shell)i(option)h (is)f(enabled.)40 b(In)27 b(that)g(case,)j(it)d(returns)f(failure.)40 -b(An)630 1717 y(in)m(teractiv)m(e)35 b(shell)d(returns)f(failure)h(if)g +b(An)630 1718 y(in)m(teractiv)m(e)35 b(shell)d(returns)f(failure)h(if)g (the)g(\014le)g(cannot)h(b)s(e)e(executed.)47 b(A)32 -b(subshell)f(exits)630 1827 y(unconditionally)j(if)g +b(subshell)f(exits)630 1828 y(unconditionally)j(if)g Ft(exec)f Fu(fails.)52 b(If)33 b(no)h Fr(command)j Fu(is)d(sp)s -(eci\014ed,)h(redirections)f(ma)m(y)h(b)s(e)630 1936 +(eci\014ed,)h(redirections)f(ma)m(y)h(b)s(e)630 1937 y(used)30 b(to)i(a\013ect)g(the)f(curren)m(t)g(shell)g(en)m(vironmen)m (t.)43 b(If)30 b(there)i(are)f(no)g(redirection)g(errors,)630 -2046 y(the)g(return)e(status)i(is)f(zero;)h(otherwise)g(the)g(return)e -(status)i(is)f(non-zero.)150 2207 y Ft(exit)870 2342 -y(exit)47 b([)p Fj(n)p Ft(])630 2478 y Fu(Exit)30 b(the)g(shell,)h +2047 y(the)g(return)e(status)i(is)f(zero;)h(otherwise)g(the)g(return)e +(status)i(is)f(non-zero.)150 2209 y Ft(exit)870 2345 +y(exit)47 b([)p Fj(n)p Ft(])630 2480 y Fu(Exit)30 b(the)g(shell,)h (returning)d(a)j(status)f(of)g Fr(n)f Fu(to)h(the)g(shell's)g(paren)m -(t.)41 b(If)30 b Fr(n)f Fu(is)h(omitted,)h(the)630 2587 +(t.)41 b(If)30 b Fr(n)f Fu(is)h(omitted,)h(the)630 2590 y(exit)c(status)g(is)g(that)g(of)g(the)g(last)g(command)f(executed.)41 b(An)m(y)26 b(trap)h(on)f Ft(EXIT)f Fu(is)i(executed)630 -2697 y(b)s(efore)j(the)h(shell)f(terminates.)150 2858 -y Ft(export)870 2993 y(export)46 b([-fn])g([-p])h([)p -Fj(name)p Ft([=)p Fj(value)p Ft(]])630 3129 y Fu(Mark)40 +2699 y(b)s(efore)j(the)h(shell)f(terminates.)150 2861 +y Ft(export)870 2997 y(export)46 b([-fn])g([-p])h([)p +Fj(name)p Ft([=)p Fj(value)p Ft(]])630 3133 y Fu(Mark)40 b(eac)m(h)h Fr(name)k Fu(to)40 b(b)s(e)f(passed)g(to)i(c)m(hild)f(pro)s (cesses)f(in)g(the)h(en)m(vironmen)m(t.)70 b(If)39 b(the)630 -3238 y Ft(-f)33 b Fu(option)h(is)g(supplied,)f(the)h +3242 y Ft(-f)33 b Fu(option)h(is)g(supplied,)f(the)h Fr(name)5 b Fu(s)33 b(refer)g(to)i(shell)e(functions;)i(otherwise)f -(the)g(names)630 3348 y(refer)c(to)h(shell)g(v)-5 b(ariables.)41 +(the)g(names)630 3352 y(refer)c(to)h(shell)g(v)-5 b(ariables.)41 b(The)30 b Ft(-n)f Fu(option)i(means)f(to)h(no)f(longer)h(mark)f(eac)m -(h)i Fr(name)j Fu(for)630 3458 y(exp)s(ort.)51 b(If)34 +(h)i Fr(name)j Fu(for)630 3461 y(exp)s(ort.)51 b(If)34 b(no)g Fr(name)5 b Fu(s)34 b(are)g(supplied,)g(or)g(if)g(the)g Ft(-p)f Fu(option)i(is)f(giv)m(en,)i(a)e(list)h(of)f(names)630 -3567 y(of)d(all)h(exp)s(orted)e(v)-5 b(ariables)31 b(is)g(displa)m(y)m +3571 y(of)d(all)h(exp)s(orted)e(v)-5 b(ariables)31 b(is)g(displa)m(y)m (ed.)43 b(The)30 b Ft(-p)g Fu(option)i(displa)m(ys)e(output)h(in)f(a)h -(form)630 3677 y(that)25 b(ma)m(y)g(b)s(e)f(reused)g(as)h(input.)38 +(form)630 3680 y(that)25 b(ma)m(y)g(b)s(e)f(reused)g(as)h(input.)38 b(If)24 b(a)h(v)-5 b(ariable)25 b(name)g(is)g(follo)m(w)m(ed)h(b)m(y)e (=)p Fr(v)-5 b(alue)p Fu(,)27 b(the)d(v)-5 b(alue)630 -3786 y(of)31 b(the)f(v)-5 b(ariable)31 b(is)g(set)g(to)g -Fr(v)-5 b(alue)p Fu(.)630 3922 y(The)29 b(return)e(status)j(is)f(zero)h +3790 y(of)31 b(the)f(v)-5 b(ariable)31 b(is)g(set)g(to)g +Fr(v)-5 b(alue)p Fu(.)630 3926 y(The)29 b(return)e(status)j(is)f(zero)h (unless)e(an)h(in)m(v)-5 b(alid)29 b(option)h(is)f(supplied,)f(one)i -(of)f(the)g(names)630 4031 y(is)k(not)g(a)h(v)-5 b(alid)33 +(of)f(the)g(names)630 4035 y(is)k(not)g(a)h(v)-5 b(alid)33 b(shell)h(v)-5 b(ariable)33 b(name,)i(or)e Ft(-f)f Fu(is)h(supplied)f -(with)h(a)g(name)g(that)h(is)f(not)h(a)630 4141 y(shell)d(function.)150 -4302 y Ft(getopts)870 4437 y(getopts)46 b Fj(optstring)f(name)i -Ft([)p Fj(arg)f Ft(...])630 4573 y(getopts)28 b Fu(is)i(used)g(b)m(y)g -(shell)g(scripts)g(to)g(parse)g(p)s(ositional)h(parameters.)41 -b Fr(optstring)d Fu(con-)630 4682 y(tains)k(the)g(option)f(c)m -(haracters)i(to)g(b)s(e)d(recognized;)49 b(if)42 b(a)f(c)m(haracter)j -(is)d(follo)m(w)m(ed)i(b)m(y)f(a)630 4792 y(colon,)33 -b(the)f(option)g(is)g(exp)s(ected)g(to)h(ha)m(v)m(e)g(an)e(argumen)m -(t,)i(whic)m(h)f(should)e(b)s(e)h(separated)630 4902 -y(from)40 b(it)g(b)m(y)g(whitespace.)70 b(The)40 b(colon)h(\(`)p -Ft(:)p Fu('\))g(and)e(question)h(mark)g(\(`)p Ft(?)p -Fu('\))h(ma)m(y)f(not)h(b)s(e)630 5011 y(used)d(as)g(option)h(c)m -(haracters.)67 b(Eac)m(h)39 b(time)g(it)g(is)f(in)m(v)m(ok)m(ed,)k -Ft(getopts)37 b Fu(places)i(the)g(next)630 5121 y(option)29 -b(in)f(the)h(shell)g(v)-5 b(ariable)30 b Fr(name)p Fu(,)f(initializing) -i Fr(name)j Fu(if)28 b(it)h(do)s(es)g(not)g(exist,)h(and)e(the)630 -5230 y(index)33 b(of)g(the)h(next)f(argumen)m(t)h(to)g(b)s(e)e(pro)s -(cessed)h(in)m(to)h(the)g(v)-5 b(ariable)34 b Ft(OPTIND)p -Fu(.)48 b Ft(OPTIND)630 5340 y Fu(is)41 b(initialized)i(to)f(1)f(eac)m -(h)h(time)g(the)f(shell)g(or)g(a)g(shell)g(script)g(is)g(in)m(v)m(ok)m -(ed.)74 b(When)41 b(an)p eop end -%%Page: 51 57 -TeXDict begin 51 56 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(51)630 299 y(option)36 -b(requires)e(an)h(argumen)m(t,)i Ft(getopts)c Fu(places)j(that)g -(argumen)m(t)g(in)m(to)g(the)f(v)-5 b(ariable)630 408 -y Ft(OPTARG)p Fu(.)55 b(The)35 b(shell)g(do)s(es)h(not)g(reset)g -Ft(OPTIND)e Fu(automatically;)41 b(it)36 b(m)m(ust)f(b)s(e)g(man)m -(ually)630 518 y(reset)i(b)s(et)m(w)m(een)g(m)m(ultiple)h(calls)f(to)g -Ft(getopts)e Fu(within)h(the)h(same)g(shell)f(in)m(v)m(o)s(cation)j(if) -e(a)630 628 y(new)30 b(set)h(of)f(parameters)h(is)f(to)i(b)s(e)d(used.) -630 771 y(When)41 b(the)h(end)e(of)i(options)g(is)f(encoun)m(tered,)k -Ft(getopts)39 b Fu(exits)j(with)f(a)h(return)e(v)-5 b(alue)630 -881 y(greater)32 b(than)e(zero.)41 b Ft(OPTIND)29 b Fu(is)h(set)h(to)g -(the)g(index)f(of)g(the)h(\014rst)f(non-option)g(argumen)m(t,)630 -990 y(and)g Fr(name)35 b Fu(is)c(set)g(to)g(`)p Ft(?)p -Fu('.)630 1133 y Ft(getopts)c Fu(normally)j(parses)e(the)i(p)s +(with)h(a)g(name)g(that)h(is)f(not)h(a)630 4145 y(shell)d(function.)150 +4307 y Ft(false)870 4442 y(false)630 4578 y Fu(Do)s(es)g(nothing,)g +(returns)e(a)h(non-zero)h(status.)150 4740 y Ft(getopts)870 +4876 y(getopts)46 b Fj(optstring)f(name)i Ft([)p Fj(arg)f +Ft(...])630 5011 y(getopts)28 b Fu(is)i(used)g(b)m(y)g(shell)g(scripts) +g(to)g(parse)g(p)s(ositional)h(parameters.)41 b Fr(optstring)d +Fu(con-)630 5121 y(tains)k(the)g(option)f(c)m(haracters)i(to)g(b)s(e)d +(recognized;)49 b(if)42 b(a)f(c)m(haracter)j(is)d(follo)m(w)m(ed)i(b)m +(y)f(a)630 5230 y(colon,)33 b(the)f(option)g(is)g(exp)s(ected)g(to)h +(ha)m(v)m(e)g(an)e(argumen)m(t,)i(whic)m(h)f(should)e(b)s(e)h +(separated)630 5340 y(from)40 b(it)g(b)m(y)g(whitespace.)70 +b(The)40 b(colon)h(\(`)p Ft(:)p Fu('\))g(and)e(question)h(mark)g(\(`)p +Ft(?)p Fu('\))h(ma)m(y)f(not)h(b)s(e)p eop end +%%Page: 52 58 +TeXDict begin 52 57 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(52)630 299 y(used)38 +b(as)g(option)h(c)m(haracters.)67 b(Eac)m(h)39 b(time)g(it)g(is)f(in)m +(v)m(ok)m(ed,)k Ft(getopts)37 b Fu(places)i(the)g(next)630 +408 y(option)29 b(in)f(the)h(shell)g(v)-5 b(ariable)30 +b Fr(name)p Fu(,)f(initializing)i Fr(name)j Fu(if)28 +b(it)h(do)s(es)g(not)g(exist,)h(and)e(the)630 518 y(index)33 +b(of)g(the)h(next)f(argumen)m(t)h(to)g(b)s(e)e(pro)s(cessed)h(in)m(to)h +(the)g(v)-5 b(ariable)34 b Ft(OPTIND)p Fu(.)48 b Ft(OPTIND)630 +628 y Fu(is)41 b(initialized)i(to)f(1)f(eac)m(h)h(time)g(the)f(shell)g +(or)g(a)g(shell)g(script)g(is)g(in)m(v)m(ok)m(ed.)74 +b(When)41 b(an)630 737 y(option)36 b(requires)e(an)h(argumen)m(t,)i +Ft(getopts)c Fu(places)j(that)g(argumen)m(t)g(in)m(to)g(the)f(v)-5 +b(ariable)630 847 y Ft(OPTARG)p Fu(.)55 b(The)35 b(shell)g(do)s(es)h +(not)g(reset)g Ft(OPTIND)e Fu(automatically;)41 b(it)36 +b(m)m(ust)f(b)s(e)g(man)m(ually)630 956 y(reset)i(b)s(et)m(w)m(een)g(m) +m(ultiple)h(calls)f(to)g Ft(getopts)e Fu(within)h(the)h(same)g(shell)f +(in)m(v)m(o)s(cation)j(if)e(a)630 1066 y(new)30 b(set)h(of)f +(parameters)h(is)f(to)i(b)s(e)d(used.)630 1196 y(When)41 +b(the)h(end)e(of)i(options)g(is)f(encoun)m(tered,)k Ft(getopts)39 +b Fu(exits)j(with)f(a)h(return)e(v)-5 b(alue)630 1305 +y(greater)32 b(than)e(zero.)41 b Ft(OPTIND)29 b Fu(is)h(set)h(to)g(the) +g(index)f(of)g(the)h(\014rst)f(non-option)g(argumen)m(t,)630 +1415 y(and)g Fr(name)35 b Fu(is)c(set)g(to)g(`)p Ft(?)p +Fu('.)630 1544 y Ft(getopts)c Fu(normally)j(parses)e(the)i(p)s (ositional)g(parameters,)g(but)e(if)i(more)f(argumen)m(ts)h(are)630 -1243 y(supplied)f(as)i Fr(arg)38 b Fu(v)-5 b(alues,)31 -b Ft(getopts)e Fu(parses)h(those)h(instead.)630 1386 +1654 y(supplied)f(as)i Fr(arg)38 b Fu(v)-5 b(alues,)31 +b Ft(getopts)e Fu(parses)h(those)h(instead.)630 1783 y Ft(getopts)h Fu(can)h(rep)s(ort)g(errors)g(in)h(t)m(w)m(o)h(w)m(a)m (ys.)51 b(If)33 b(the)h(\014rst)e(c)m(haracter)k(of)d -Fr(optstring)42 b Fu(is)34 b(a)630 1496 y(colon,)g Fr(silen)m(t)h +Fr(optstring)42 b Fu(is)34 b(a)630 1893 y(colon,)g Fr(silen)m(t)h Fu(error)d(rep)s(orting)f(is)i(used.)45 b(In)31 b(normal)h(op)s -(eration,)h(diagnostic)h(messages)630 1606 y(are)c(prin)m(ted)e(when)g +(eration,)h(diagnostic)h(messages)630 2002 y(are)c(prin)m(ted)e(when)g (in)m(v)-5 b(alid)30 b(options)g(or)f(missing)g(option)g(argumen)m(ts)h -(are)f(encoun)m(tered.)630 1715 y(If)34 b(the)g(v)-5 +(are)f(encoun)m(tered.)630 2112 y(If)34 b(the)g(v)-5 b(ariable)35 b Ft(OPTERR)d Fu(is)i(set)h(to)f(0,)i(no)e(error)g (messages)h(will)f(b)s(e)f(displa)m(y)m(ed,)j(ev)m(en)f(if)630 -1825 y(the)c(\014rst)e(c)m(haracter)j(of)f Ft(optstring)d -Fu(is)i(not)h(a)f(colon.)630 1968 y(If)39 b(an)h(in)m(v)-5 -b(alid)41 b(option)f(is)g(seen,)i Ft(getopts)c Fu(places)j(`)p -Ft(?)p Fu(')f(in)m(to)h Fr(name)k Fu(and,)d(if)e(not)g(silen)m(t,)630 -2078 y(prin)m(ts)f(an)h(error)f(message)h(and)f(unsets)g -Ft(OPTARG)p Fu(.)67 b(If)39 b Ft(getopts)f Fu(is)i(silen)m(t,)j(the)c -(option)630 2187 y(c)m(haracter)32 b(found)d(is)h(placed)h(in)f -Ft(OPTARG)f Fu(and)h(no)g(diagnostic)i(message)f(is)g(prin)m(ted.)630 -2330 y(If)c(a)g(required)f(argumen)m(t)i(is)f(not)g(found,)g(and)f -Ft(getopts)f Fu(is)i(not)h(silen)m(t,)h(a)e(question)g(mark)630 -2440 y(\(`)p Ft(?)p Fu('\))h(is)g(placed)g(in)f Fr(name)p -Fu(,)h Ft(OPTARG)e Fu(is)h(unset,)h(and)f(a)g(diagnostic)i(message)g -(is)e(prin)m(ted.)39 b(If)630 2550 y Ft(getopts)28 b -Fu(is)h(silen)m(t,)i(then)e(a)h(colon)h(\(`)p Ft(:)p -Fu('\))f(is)g(placed)g(in)f Fr(name)35 b Fu(and)29 b -Ft(OPTARG)f Fu(is)h(set)h(to)h(the)630 2659 y(option)g(c)m(haracter)h -(found.)150 2836 y Ft(hash)870 2980 y(hash)47 b([-r])f([-p)h -Fj(filename)p Ft(])e([-dt])i([)p Fj(name)p Ft(])630 3123 -y Fu(Eac)m(h)32 b(time)g Ft(hash)e Fu(is)h(in)m(v)m(ok)m(ed,)j(it)d -(remem)m(b)s(ers)g(the)g(full)g(pathnames)g(of)h(the)f(commands)630 -3232 y(sp)s(eci\014ed)i(as)i Fr(name)k Fu(argumen)m(ts,)c(so)g(they)f -(need)g(not)g(b)s(e)f(searc)m(hed)i(for)f(on)g(subsequen)m(t)630 -3342 y(in)m(v)m(o)s(cations.)79 b(The)41 b(commands)h(are)h(found)e(b)m -(y)h(searc)m(hing)i(through)d(the)i(directories)630 3452 -y(listed)37 b(in)g Ft($PATH)p Fu(.)58 b(An)m(y)37 b(previously-remem)m -(b)s(ered)f(pathname)h(is)g(discarded.)59 b(The)37 b -Ft(-p)630 3561 y Fu(option)d(inhibits)f(the)h(path)g(searc)m(h,)h(and)e -Fr(\014lename)39 b Fu(is)34 b(used)f(as)h(the)f(lo)s(cation)j(of)e -Fr(name)p Fu(.)630 3671 y(The)42 b Ft(-r)g Fu(option)h(causes)f(the)h -(shell)g(to)g(forget)g(all)h(remem)m(b)s(ered)d(lo)s(cations.)79 -b(The)42 b Ft(-d)630 3780 y Fu(option)31 b(causes)g(the)f(shell)h(to)g -(forget)h(the)f(remem)m(b)s(ered)e(lo)s(cation)j(of)f(eac)m(h)h -Fr(name)p Fu(.)41 b(If)30 b(the)630 3890 y Ft(-t)39 b -Fu(option)h(is)g(supplied,)g(the)g(full)f(pathname)h(to)g(whic)m(h)f -(eac)m(h)i Fr(name)k Fu(corresp)s(onds)38 b(is)630 4000 -y(prin)m(ted.)i(If)28 b(m)m(ultiple)h Fr(name)34 b Fu(argumen)m(ts)29 -b(are)g(supplied)f(with)g Ft(-t)p Fu(,)h(the)g Fr(name)34 -b Fu(is)28 b(prin)m(ted)630 4109 y(b)s(efore)h(the)i(hashed)e(full)g -(pathname.)41 b(The)29 b Ft(-l)g Fu(option)i(causes)f(output)f(to)i(b)s -(e)e(displa)m(y)m(ed)630 4219 y(in)23 b(a)h(format)g(that)g(ma)m(y)g(b) -s(e)f(reused)f(as)i(input.)37 b(If)23 b(no)h(argumen)m(ts)f(are)h(giv)m -(en,)i(or)e(if)f(only)h Ft(-l)630 4328 y Fu(is)35 b(supplied,)f -(information)h(ab)s(out)g(remem)m(b)s(ered)f(commands)g(is)h(prin)m -(ted.)53 b(The)34 b(return)630 4438 y(status)d(is)f(zero)h(unless)f(a)h -Fr(name)k Fu(is)c(not)f(found)f(or)i(an)f(in)m(v)-5 b(alid)31 -b(option)g(is)f(supplied.)150 4615 y Ft(pwd)870 4758 -y(pwd)47 b([-LP])630 4902 y Fu(Prin)m(t)29 b(the)g(absolute)h(pathname) -e(of)h(the)h(curren)m(t)e(w)m(orking)h(directory)-8 b(.)42 -b(If)28 b(the)h Ft(-P)f Fu(option)630 5011 y(is)39 b(supplied,)h(the)f +2222 y(the)c(\014rst)e(c)m(haracter)j(of)f Ft(optstring)d +Fu(is)i(not)h(a)f(colon.)630 2351 y(If)i Ft(getopts)e +Fu(detects)j(an)g(in)m(v)-5 b(alid)32 b(option,)i(it)f(places)g(`)p +Ft(?)p Fu(')f(in)m(to)h Fr(name)38 b Fu(and,)32 b(if)g(not)h(silen)m +(t,)630 2461 y(prin)m(ts)e(an)h(error)f(message)i(and)e(unsets)g +Ft(OPTARG)p Fu(.)42 b(If)31 b Ft(getopts)f Fu(is)i(silen)m(t,)h(it)f +(assigns)g(the)630 2570 y(option)f(c)m(haracter)h(found)d(to)i +Ft(OPTARG)e Fu(and)g(do)s(es)h(not)h(prin)m(t)f(a)h(diagnostic)h +(message.)630 2700 y(If)21 b(a)h(required)f(argumen)m(t)h(is)g(not)g +(found,)g(and)f Ft(getopts)f Fu(is)h(not)h(silen)m(t,)j(it)d(sets)g +(the)g(v)-5 b(alue)22 b(of)630 2809 y Fr(name)32 b Fu(to)27 +b(a)g(question)g(mark)f(\(`)p Ft(?)p Fu('\),)j(unsets)d +Ft(OPTARG)p Fu(,)g(and)g(prin)m(ts)g(a)h(diagnostic)h(message.)630 +2919 y(If)i Ft(getopts)f Fu(is)i(silen)m(t,)h(it)f(sets)h(the)f(v)-5 +b(alue)31 b(of)g Fr(name)36 b Fu(to)31 b(a)g(colon)h(\(`)p +Ft(:)p Fu('\),)g(and)e(sets)i Ft(OPTARG)630 3029 y Fu(to)f(the)g +(option)g(c)m(haracter)g(found.)150 3178 y Ft(hash)870 +3308 y(hash)47 b([-r])f([-p)h Fj(filename)p Ft(])e([-dt])i([)p +Fj(name)p Ft(])630 3437 y Fu(Eac)m(h)37 b(time)h Ft(hash)d +Fu(is)i(in)m(v)m(ok)m(ed,)j(it)d(remem)m(b)s(ers)f(the)h(full)f +(\014lenames)h(of)f(the)h(commands)630 3547 y(sp)s(eci\014ed)c(as)i +Fr(name)k Fu(argumen)m(ts,)c(so)g(they)f(need)g(not)g(b)s(e)f(searc)m +(hed)i(for)f(on)g(subsequen)m(t)630 3656 y(in)m(v)m(o)s(cations.)79 +b(The)41 b(commands)h(are)h(found)e(b)m(y)h(searc)m(hing)i(through)d +(the)i(directories)630 3766 y(listed)f(in)g Ft($PATH)p +Fu(.)74 b(An)m(y)42 b(previously-remem)m(b)s(ered)f(\014lename)h(is)g +(discarded.)74 b(The)42 b Ft(-p)630 3875 y Fu(option)34 +b(inhibits)f(the)h(path)g(searc)m(h,)h(and)e Fr(\014lename)39 +b Fu(is)34 b(used)f(as)h(the)f(lo)s(cation)j(of)e Fr(name)p +Fu(.)630 3985 y(The)h Ft(-r)g Fu(option)h(causes)g(the)g(shell)g(to)h +(forget)f(all)h(remem)m(b)s(ered)e(lo)s(cations.)58 b(Assigning)630 +4095 y(to)42 b(the)f Ft(PATH)f Fu(v)-5 b(ariable)42 b(also)g(clears)g +(all)g(hashed)f(\014lenames.)73 b(The)40 b Ft(-d)h Fu(option)h(causes) +630 4204 y(the)f(shell)g(to)g(forget)h(the)f(remem)m(b)s(ered)f(lo)s +(cation)i(of)f(eac)m(h)h Fr(name)p Fu(.)71 b(If)41 b(the)f +Ft(-t)g Fu(option)630 4314 y(is)c(supplied,)g(the)g(full)g(pathname)g +(to)g(whic)m(h)g(eac)m(h)h Fr(name)k Fu(corresp)s(onds)35 +b(is)h(prin)m(ted.)56 b(If)630 4423 y(m)m(ultiple)44 +b Fr(name)49 b Fu(argumen)m(ts)44 b(are)h(supplied)d(with)i +Ft(-t)p Fu(,)i(the)e Fr(name)49 b Fu(is)44 b(prin)m(ted)f(b)s(efore)630 +4533 y(the)36 b(hashed)g(full)f(pathname.)58 b(The)36 +b Ft(-l)f Fu(option)i(causes)f(output)g(to)h(b)s(e)e(displa)m(y)m(ed)i +(in)f(a)630 4643 y(format)f(that)g(ma)m(y)g(b)s(e)f(reused)f(as)i +(input.)52 b(If)34 b(no)g(argumen)m(ts)h(are)g(giv)m(en,)h(or)f(if)f +(only)h Ft(-l)630 4752 y Fu(is)d(supplied,)g(information)h(ab)s(out)f +(remem)m(b)s(ered)g(commands)f(is)i(prin)m(ted.)46 b(The)32 +b Ft(-t)p Fu(,)g Ft(-d)p Fu(,)630 4862 y(and)40 b Ft(-p)h +Fu(options)g(\(the)g(options)g(that)h(act)g(on)f(the)g +Fr(name)46 b Fu(argumen)m(ts\))41 b(are)g(m)m(utually)630 +4971 y(exclusiv)m(e.)j(Only)30 b(one)h(will)g(b)s(e)g(activ)m(e.)44 +b(If)31 b(more)g(than)f(one)h(is)g(supplied,)f Ft(-t)h +Fu(has)f(higher)630 5081 y(priorit)m(y)38 b(than)f Ft(-p)p +Fu(,)i(and)e(b)s(oth)g(are)h(higher)f(priorit)m(y)h(than)g +Ft(-d)p Fu(.)61 b(The)38 b(return)e(status)i(is)630 5191 +y(zero)31 b(unless)f(a)h Fr(name)k Fu(is)c(not)f(found)f(or)i(an)f(in)m +(v)-5 b(alid)31 b(option)g(is)f(supplied.)150 5340 y +Ft(pwd)p eop end +%%Page: 53 59 +TeXDict begin 53 58 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(53)870 299 y Ft(pwd)47 +b([-LP])630 434 y Fu(Prin)m(t)29 b(the)g(absolute)h(pathname)e(of)h +(the)h(curren)m(t)e(w)m(orking)h(directory)-8 b(.)42 +b(If)28 b(the)h Ft(-P)f Fu(option)630 543 y(is)39 b(supplied,)h(the)f (pathname)g(prin)m(ted)g(will)g(not)h(con)m(tain)g(sym)m(b)s(olic)f -(links.)67 b(If)38 b(the)i Ft(-L)630 5121 y Fu(option)k(is)g(supplied,) -i(the)e(pathname)f(prin)m(ted)h(ma)m(y)g(con)m(tain)h(sym)m(b)s(olic)f -(links.)80 b(The)630 5230 y(return)26 b(status)h(is)h(zero)g(unless)e +(links.)67 b(If)38 b(the)i Ft(-L)630 653 y Fu(option)k(is)g(supplied,)i +(the)e(pathname)f(prin)m(ted)h(ma)m(y)g(con)m(tain)h(sym)m(b)s(olic)f +(links.)80 b(The)630 763 y(return)26 b(status)h(is)h(zero)g(unless)e (an)h(error)g(is)g(encoun)m(tered)g(while)h(determining)f(the)g(name) -630 5340 y(of)k(the)f(curren)m(t)g(directory)h(or)f(an)h(in)m(v)-5 -b(alid)31 b(option)g(is)f(supplied.)p eop end -%%Page: 52 58 -TeXDict begin 52 57 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(52)150 299 y Ft(readonly)870 -432 y(readonly)46 b([-aAf])g([-p])g([)p Fj(name)p Ft([=)p -Fj(value)p Ft(]])e(...)630 565 y Fu(Mark)33 b(eac)m(h)h +630 872 y(of)k(the)f(curren)m(t)g(directory)h(or)f(an)h(in)m(v)-5 +b(alid)31 b(option)g(is)f(supplied.)150 1032 y Ft(readonly)870 +1167 y(readonly)46 b([-aAf])g([-p])g([)p Fj(name)p Ft([=)p +Fj(value)p Ft(]])e(...)630 1302 y Fu(Mark)33 b(eac)m(h)h Fr(name)39 b Fu(as)33 b(readonly)-8 b(.)49 b(The)32 b(v)-5 b(alues)34 b(of)f(these)g(names)g(ma)m(y)h(not)f(b)s(e)f(c)m(hanged)630 -675 y(b)m(y)38 b(subsequen)m(t)g(assignmen)m(t.)65 b(If)38 +1412 y(b)m(y)38 b(subsequen)m(t)g(assignmen)m(t.)65 b(If)38 b(the)h Ft(-f)f Fu(option)g(is)h(supplied,)g(eac)m(h)h -Fr(name)j Fu(refers)38 b(to)630 784 y(a)f(shell)g(function.)59 +Fr(name)j Fu(refers)38 b(to)630 1521 y(a)f(shell)g(function.)59 b(The)36 b Ft(-a)g Fu(option)h(means)f(eac)m(h)i Fr(name)k -Fu(refers)36 b(to)h(an)f(indexed)g(arra)m(y)630 894 y(v)-5 -b(ariable;)28 b(the)f Ft(-A)e Fu(option)h(means)g(eac)m(h)h +Fu(refers)36 b(to)h(an)f(indexed)g(arra)m(y)630 1631 +y(v)-5 b(ariable;)28 b(the)f Ft(-A)e Fu(option)h(means)g(eac)m(h)h Fr(name)k Fu(refers)26 b(to)g(an)g(asso)s(ciativ)m(e)i(arra)m(y)f(v)-5 -b(ariable.)630 1003 y(If)35 b(b)s(oth)g(options)h(are)h(supplied,)f +b(ariable.)630 1740 y(If)35 b(b)s(oth)g(options)h(are)h(supplied,)f Ft(-A)f Fu(tak)m(es)i(precedence.)58 b(If)35 b(no)h Fr(name)k -Fu(argumen)m(ts)d(are)630 1113 y(giv)m(en,)k(or)c(if)h(the)g +Fu(argumen)m(ts)d(are)630 1850 y(giv)m(en,)k(or)c(if)h(the)g Ft(-p)f Fu(option)h(is)f(supplied,)i(a)f(list)g(of)g(all)g(readonly)g -(names)f(is)h(prin)m(ted.)630 1223 y(The)32 b(other)g(options)g(ma)m(y) +(names)f(is)h(prin)m(ted.)630 1960 y(The)32 b(other)g(options)g(ma)m(y) h(b)s(e)f(used)f(to)i(restrict)g(the)f(output)g(to)h(a)f(subset)g(of)g -(the)g(set)h(of)630 1332 y(readonly)c(names.)41 b(The)28 +(the)g(set)h(of)630 2069 y(readonly)c(names.)41 b(The)28 b Ft(-p)h Fu(option)h(causes)g(output)e(to)j(b)s(e)d(displa)m(y)m(ed)i -(in)f(a)h(format)f(that)630 1442 y(ma)m(y)j(b)s(e)e(reused)g(as)i +(in)f(a)h(format)f(that)630 2179 y(ma)m(y)j(b)s(e)e(reused)g(as)i (input.)42 b(If)30 b(a)i(v)-5 b(ariable)31 b(name)h(is)f(follo)m(w)m (ed)h(b)m(y)f(=)p Fr(v)-5 b(alue)p Fu(,)32 b(the)f(v)-5 -b(alue)32 b(of)630 1551 y(the)i(v)-5 b(ariable)34 b(is)f(set)i(to)f +b(alue)32 b(of)630 2288 y(the)i(v)-5 b(ariable)34 b(is)f(set)i(to)f Fr(v)-5 b(alue)p Fu(.)50 b(The)33 b(return)g(status)g(is)h(zero)g -(unless)f(an)g(in)m(v)-5 b(alid)34 b(option)630 1661 +(unless)f(an)g(in)m(v)-5 b(alid)34 b(option)630 2398 y(is)c(supplied,)f(one)h(of)g(the)g Fr(name)35 b Fu(argumen)m(ts)30 b(is)g(not)g(a)g(v)-5 b(alid)31 b(shell)f(v)-5 b(ariable)30 -b(or)g(function)630 1771 y(name,)h(or)f(the)h Ft(-f)e +b(or)g(function)630 2508 y(name,)h(or)f(the)h Ft(-f)e Fu(option)i(is)g(supplied)e(with)h(a)h(name)f(that)h(is)f(not)h(a)g -(shell)f(function.)150 1927 y Ft(return)870 2060 y(return)46 -b([)p Fj(n)p Ft(])630 2193 y Fu(Cause)37 b(a)g(shell)h(function)f(to)g +(shell)f(function.)150 2668 y Ft(return)870 2803 y(return)46 +b([)p Fj(n)p Ft(])630 2937 y Fu(Cause)37 b(a)g(shell)h(function)f(to)g (stop)h(executing)g(and)e(return)h(the)g(v)-5 b(alue)37 -b Fr(n)g Fu(to)h(its)f(caller.)630 2303 y(If)h Fr(n)h +b Fr(n)g Fu(to)h(its)f(caller.)630 3047 y(If)h Fr(n)h Fu(is)g(not)g(supplied,)h(the)f(return)e(v)-5 b(alue)40 b(is)f(the)g(exit)g(status)g(of)g(the)g(last)h(command)630 -2412 y(executed)i(in)f(the)g(function.)72 b(If)41 b Ft(return)e +3157 y(executed)i(in)f(the)g(function.)72 b(If)41 b Ft(return)e Fu(is)i(executed)h(b)m(y)f(a)h(trap)f(handler,)i(the)e(last)630 -2522 y(command)d(used)f(to)i(determine)f(the)g(status)g(is)h(the)f -(last)h(command)e(executed)i(b)s(efore)630 2632 y(the)27 +3266 y(command)d(used)f(to)i(determine)f(the)g(status)g(is)h(the)f +(last)h(command)e(executed)i(b)s(efore)630 3376 y(the)27 b(trap)g(handler.)39 b(If)26 b Ft(return)g Fu(is)h(executed)h(during)d -(a)j Ft(DEBUG)d Fu(trap,)j(the)f(last)h(command)630 2741 +(a)j Ft(DEBUG)d Fu(trap,)j(the)f(last)h(command)630 3485 y(used)f(to)h(determine)g(the)f(status)h(is)g(the)f(last)i(command)e -(executed)h(b)m(y)g(the)f(trap)h(handler)630 2851 y(b)s(efore)e +(executed)h(b)m(y)g(the)f(trap)h(handler)630 3595 y(b)s(efore)e Ft(return)f Fu(w)m(as)i(in)m(v)m(ok)m(ed.)41 b Ft(return)25 b Fu(ma)m(y)i(also)g(b)s(e)f(used)g(to)h(terminate)h(execution)g(of)630 -2960 y(a)34 b(script)g(b)s(eing)g(executed)g(with)g(the)g +3705 y(a)34 b(script)g(b)s(eing)g(executed)g(with)g(the)g Ft(.)g Fu(\()p Ft(source)p Fu(\))f(builtin,)h(returning)f(either)i -Fr(n)e Fu(or)h(the)630 3070 y(exit)j(status)f(of)g(the)g(last)h +Fr(n)e Fu(or)h(the)630 3814 y(exit)j(status)f(of)g(the)g(last)h (command)e(executed)i(within)e(the)h(script)g(as)g(the)g(exit)h(status) -630 3180 y(of)i(the)g(script.)65 b(If)38 b Fr(n)g Fu(is)h(supplied,)h +630 3924 y(of)i(the)g(script.)65 b(If)38 b Fr(n)g Fu(is)h(supplied,)h (the)f(return)e(v)-5 b(alue)39 b(is)g(its)g(least)h(signi\014can)m(t)g -(8)f(bits.)630 3289 y(An)m(y)g(command)f(asso)s(ciated)j(with)d(the)h +(8)f(bits.)630 4033 y(An)m(y)g(command)f(asso)s(ciated)j(with)d(the)h Ft(RETURN)e Fu(trap)i(is)g(executed)g(b)s(efore)g(execution)630 -3399 y(resumes)29 b(after)h(the)g(function)g(or)g(script.)40 +4143 y(resumes)29 b(after)h(the)g(function)g(or)g(script.)40 b(The)29 b(return)g(status)h(is)g(non-zero)g(if)g Ft(return)e -Fu(is)630 3508 y(supplied)h(a)i(non-n)m(umeric)g(argumen)m(t)g(or)f(is) +Fu(is)630 4253 y(supplied)h(a)i(non-n)m(umeric)g(argumen)m(t)g(or)f(is) h(used)f(outside)h(a)g(function)f(and)g(not)h(during)630 -3618 y(the)g(execution)g(of)g(a)f(script)h(b)m(y)f Ft(.)g -Fu(or)g Ft(source)p Fu(.)150 3774 y Ft(shift)870 3907 -y(shift)46 b([)p Fj(n)p Ft(])630 4041 y Fu(Shift)41 b(the)g(p)s +4362 y(the)g(execution)g(of)g(a)f(script)h(b)m(y)f Ft(.)g +Fu(or)g Ft(source)p Fu(.)150 4522 y Ft(shift)870 4657 +y(shift)46 b([)p Fj(n)p Ft(])630 4792 y Fu(Shift)41 b(the)g(p)s (ositional)h(parameters)g(to)g(the)f(left)h(b)m(y)g Fr(n)p -Fu(.)73 b(The)40 b(p)s(ositional)j(parameters)630 4150 +Fu(.)73 b(The)40 b(p)s(ositional)j(parameters)630 4902 y(from)34 b Fr(n)p Ft(+)p Fu(1)39 b(.)22 b(.)h(.)45 b Ft($#)34 b Fu(are)g(renamed)g(to)h Ft($1)k Fu(.)22 b(.)g(.)46 b Ft($#)p Fu(-)p Fr(n)p Fu(.)51 b(P)m(arameters)36 b(represen)m(ted)e -(b)m(y)g(the)630 4260 y(n)m(um)m(b)s(ers)d Ft($#)i Fu(do)m(wn)f(to)i +(b)m(y)g(the)630 5011 y(n)m(um)m(b)s(ers)d Ft($#)i Fu(do)m(wn)f(to)i Ft($#)p Fu(-)p Fr(n)p Ft(+)p Fu(1)e(are)h(unset.)48 b Fr(n)32 b Fu(m)m(ust)h(b)s(e)f(a)h(non-negativ)m(e)i(n)m(um)m(b)s(er)d -(less)630 4369 y(than)g(or)g(equal)h(to)g Ft($#)p Fu(.)46 +(less)630 5121 y(than)g(or)g(equal)h(to)g Ft($#)p Fu(.)46 b(If)31 b Fr(n)h Fu(is)g(zero)h(or)f(greater)i(than)e -Ft($#)p Fu(,)g(the)h(p)s(ositional)g(parameters)630 4479 +Ft($#)p Fu(,)g(the)h(p)s(ositional)g(parameters)630 5230 y(are)e(not)h(c)m(hanged.)43 b(If)31 b Fr(n)g Fu(is)g(not)g(supplied,)f (it)i(is)f(assumed)f(to)i(b)s(e)f(1.)43 b(The)31 b(return)f(status)630 -4589 y(is)g(zero)i(unless)d Fr(n)h Fu(is)g(greater)i(than)e -Ft($#)g Fu(or)g(less)h(than)f(zero,)i(non-zero)e(otherwise.)150 -4745 y Ft(test)150 4855 y([)870 4988 y(test)47 b Fj(expr)630 -5121 y Fu(Ev)-5 b(aluate)43 b(a)f(conditional)h(expression)f -Fr(expr)48 b Fu(and)41 b(return)g(a)h(status)g(of)g(0)g(\(true\))h(or)f -(1)630 5230 y(\(false\).)g(Eac)m(h)31 b(op)s(erator)f(and)f(op)s(erand) -g(m)m(ust)h(b)s(e)f(a)i(separate)g(argumen)m(t.)41 b(Expressions)630 -5340 y(are)26 b(comp)s(osed)f(of)g(the)h(primaries)f(describ)s(ed)f(b)s -(elo)m(w)h(in)g(Section)h(6.4)h([Bash)e(Conditional)p +5340 y(is)g(zero)i(unless)d Fr(n)h Fu(is)g(greater)i(than)e +Ft($#)g Fu(or)g(less)h(than)f(zero,)i(non-zero)e(otherwise.)p eop end -%%Page: 53 59 -TeXDict begin 53 58 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(53)630 299 y(Expressions],)39 -b(page)g(96.)64 b Ft(test)37 b Fu(do)s(es)g(not)h(accept)i(an)m(y)e -(options,)i(nor)e(do)s(es)f(it)h(accept)630 408 y(and)30 -b(ignore)h(an)f(argumen)m(t)h(of)f Ft(--)g Fu(as)h(signifying)f(the)h -(end)f(of)g(options.)630 550 y(When)g(the)h Ft([)f Fu(form)g(is)g -(used,)g(the)g(last)i(argumen)m(t)e(to)i(the)e(command)g(m)m(ust)h(b)s -(e)e(a)i Ft(])p Fu(.)630 692 y(Expressions)23 b(ma)m(y)h(b)s(e)e(com)m -(bined)i(using)f(the)h(follo)m(wing)h(op)s(erators,)g(listed)f(in)f -(decreasing)630 801 y(order)30 b(of)h(precedence.)43 -b(The)30 b(ev)-5 b(aluation)33 b(dep)s(ends)28 b(on)j(the)g(n)m(um)m(b) -s(er)f(of)h(argumen)m(ts;)g(see)630 911 y(b)s(elo)m(w.)41 -b(Op)s(erator)30 b(precedence)h(is)f(used)g(when)f(there)i(are)f(\014v) -m(e)h(or)f(more)h(argumen)m(ts.)630 1084 y Ft(!)f Fj(expr)210 -b Fu(T)-8 b(rue)30 b(if)g Fr(expr)37 b Fu(is)30 b(false.)630 -1258 y Ft(\()g Fj(expr)f Ft(\))133 b Fu(Returns)23 b(the)i(v)-5 +%%Page: 54 60 +TeXDict begin 54 59 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(54)150 299 y Ft(test)150 +408 y([)870 541 y(test)47 b Fj(expr)630 673 y Fu(Ev)-5 +b(aluate)43 b(a)f(conditional)h(expression)f Fr(expr)48 +b Fu(and)41 b(return)g(a)h(status)g(of)g(0)g(\(true\))h(or)f(1)630 +783 y(\(false\).)g(Eac)m(h)31 b(op)s(erator)f(and)f(op)s(erand)g(m)m +(ust)h(b)s(e)f(a)i(separate)g(argumen)m(t.)41 b(Expressions)630 +892 y(are)26 b(comp)s(osed)f(of)g(the)h(primaries)f(describ)s(ed)f(b)s +(elo)m(w)h(in)g(Section)h(6.4)h([Bash)e(Conditional)630 +1002 y(Expressions],)39 b(page)g(99.)64 b Ft(test)37 +b Fu(do)s(es)g(not)h(accept)i(an)m(y)e(options,)i(nor)e(do)s(es)f(it)h +(accept)630 1112 y(and)30 b(ignore)h(an)f(argumen)m(t)h(of)f +Ft(--)g Fu(as)h(signifying)f(the)h(end)f(of)g(options.)630 +1244 y(When)g(the)h Ft([)f Fu(form)g(is)g(used,)g(the)g(last)i(argumen) +m(t)e(to)i(the)e(command)g(m)m(ust)h(b)s(e)e(a)i Ft(])p +Fu(.)630 1377 y(Expressions)23 b(ma)m(y)h(b)s(e)e(com)m(bined)i(using)f +(the)h(follo)m(wing)h(op)s(erators,)g(listed)f(in)f(decreasing)630 +1486 y(order)30 b(of)h(precedence.)43 b(The)30 b(ev)-5 +b(aluation)33 b(dep)s(ends)28 b(on)j(the)g(n)m(um)m(b)s(er)f(of)h +(argumen)m(ts;)g(see)630 1596 y(b)s(elo)m(w.)41 b(Op)s(erator)30 +b(precedence)h(is)f(used)g(when)f(there)i(are)f(\014v)m(e)h(or)f(more)h +(argumen)m(ts.)630 1751 y Ft(!)f Fj(expr)210 b Fu(T)-8 +b(rue)30 b(if)g Fr(expr)37 b Fu(is)30 b(false.)630 1906 +y Ft(\()g Fj(expr)f Ft(\))133 b Fu(Returns)23 b(the)i(v)-5 b(alue)25 b(of)f Fr(expr)p Fu(.)38 b(This)24 b(ma)m(y)h(b)s(e)e(used)h -(to)h(o)m(v)m(erride)g(the)g(normal)1110 1367 y(precedence)31 -b(of)f(op)s(erators.)630 1541 y Fj(expr1)f Ft(-a)h Fj(expr2)1110 -1650 y Fu(T)-8 b(rue)30 b(if)g(b)s(oth)g Fr(expr1)37 -b Fu(and)30 b Fr(expr2)38 b Fu(are)30 b(true.)630 1824 -y Fj(expr1)f Ft(-o)h Fj(expr2)1110 1934 y Fu(T)-8 b(rue)30 +(to)h(o)m(v)m(erride)g(the)g(normal)1110 2016 y(precedence)31 +b(of)f(op)s(erators.)630 2171 y Fj(expr1)f Ft(-a)h Fj(expr2)1110 +2281 y Fu(T)-8 b(rue)30 b(if)g(b)s(oth)g Fr(expr1)37 +b Fu(and)30 b Fr(expr2)38 b Fu(are)30 b(true.)630 2436 +y Fj(expr1)f Ft(-o)h Fj(expr2)1110 2545 y Fu(T)-8 b(rue)30 b(if)g(either)h Fr(expr1)38 b Fu(or)30 b Fr(expr2)37 -b Fu(is)31 b(true.)630 2107 y(The)37 b Ft(test)f Fu(and)g +b Fu(is)31 b(true.)630 2701 y(The)37 b Ft(test)f Fu(and)g Ft([)h Fu(builtins)g(ev)-5 b(aluate)39 b(conditional)f(expressions)f -(using)g(a)g(set)h(of)f(rules)630 2217 y(based)30 b(on)g(the)h(n)m(um)m -(b)s(er)e(of)h(argumen)m(ts.)630 2390 y(0)h(argumen)m(ts)1110 -2500 y(The)f(expression)g(is)g(false.)630 2673 y(1)h(argumen)m(t)1110 -2783 y(The)f(expression)g(is)g(true)h(if,)f(and)g(only)g(if,)h(the)g -(argumen)m(t)f(is)h(not)f(n)m(ull.)630 2956 y(2)h(argumen)m(ts)1110 -3066 y(If)f(the)h(\014rst)f(argumen)m(t)h(is)g(`)p Ft(!)p +(using)g(a)g(set)h(of)f(rules)630 2810 y(based)30 b(on)g(the)h(n)m(um)m +(b)s(er)e(of)h(argumen)m(ts.)630 2966 y(0)h(argumen)m(ts)1110 +3075 y(The)f(expression)g(is)g(false.)630 3230 y(1)h(argumen)m(t)1110 +3340 y(The)f(expression)g(is)g(true)h(if,)f(and)g(only)g(if,)h(the)g +(argumen)m(t)f(is)h(not)f(n)m(ull.)630 3495 y(2)h(argumen)m(ts)1110 +3605 y(If)f(the)h(\014rst)f(argumen)m(t)h(is)g(`)p Ft(!)p Fu(',)g(the)g(expression)g(is)g(true)f(if)h(and)f(only)h(if)g(the)1110 -3176 y(second)j(argumen)m(t)f(is)h(n)m(ull.)50 b(If)33 +3714 y(second)j(argumen)m(t)f(is)h(n)m(ull.)50 b(If)33 b(the)h(\014rst)e(argumen)m(t)i(is)g(one)g(of)f(the)h(unary)1110 -3285 y(conditional)42 b(op)s(erators)f(\(see)g(Section)h(6.4)f([Bash)g -(Conditional)g(Expres-)1110 3395 y(sions],)34 b(page)f(96\),)i(the)e +3824 y(conditional)42 b(op)s(erators)f(\(see)g(Section)h(6.4)f([Bash)g +(Conditional)g(Expres-)1110 3934 y(sions],)34 b(page)f(99\),)i(the)e (expression)f(is)h(true)g(if)g(the)g(unary)e(test)j(is)f(true.)47 -b(If)1110 3504 y(the)33 b(\014rst)g(argumen)m(t)h(is)f(not)g(a)h(v)-5 +b(If)1110 4043 y(the)33 b(\014rst)g(argumen)m(t)h(is)f(not)g(a)h(v)-5 b(alid)34 b(unary)e(op)s(erator,)i(the)g(expression)f(is)1110 -3614 y(false.)630 3787 y(3)e(argumen)m(ts)1110 3897 y(The)f(follo)m +4153 y(false.)630 4308 y(3)e(argumen)m(ts)1110 4418 y(The)f(follo)m (wing)i(conditions)f(are)f(applied)h(in)f(the)g(order)g(listed.)1159 -4039 y(1.)61 b(If)29 b(the)g(second)g(argumen)m(t)h(is)f(one)h(of)f -(the)h(binary)e(conditional)j(op)s(era-)1290 4148 y(tors)c(\(see)h -(Section)g(6.4)g([Bash)g(Conditional)f(Expressions],)h(page)f(96\),) -1290 4258 y(the)d(result)g(of)f(the)h(expression)g(is)g(the)f(result)h -(of)g(the)g(binary)f(test)h(using)1290 4367 y(the)35 +4550 y(1.)61 b(If)29 b(the)g(second)g(argumen)m(t)h(is)f(one)h(of)f +(the)h(binary)e(conditional)j(op)s(era-)1290 4660 y(tors)c(\(see)h +(Section)g(6.4)g([Bash)g(Conditional)f(Expressions],)h(page)f(99\),) +1290 4769 y(the)d(result)g(of)f(the)h(expression)g(is)g(the)f(result)h +(of)g(the)g(binary)f(test)h(using)1290 4879 y(the)35 b(\014rst)e(and)h(third)g(argumen)m(ts)h(as)f(op)s(erands.)52 b(The)34 b(`)p Ft(-a)p Fu(')g(and)g(`)p Ft(-o)p Fu(')1290 -4477 y(op)s(erators)24 b(are)g(considered)g(binary)f(op)s(erators)h -(when)f(there)h(are)h(three)1290 4587 y(argumen)m(ts.)1159 -4728 y(2.)61 b(If)41 b(the)h(\014rst)e(argumen)m(t)i(is)f(`)p +4988 y(op)s(erators)24 b(are)g(considered)g(binary)f(op)s(erators)h +(when)f(there)h(are)h(three)1290 5098 y(argumen)m(ts.)1159 +5230 y(2.)61 b(If)41 b(the)h(\014rst)e(argumen)m(t)i(is)f(`)p Ft(!)p Fu(',)k(the)d(v)-5 b(alue)41 b(is)h(the)f(negation)i(of)f(the) -1290 4838 y(t)m(w)m(o-argumen)m(t)33 b(test)e(using)f(the)g(second)h -(and)e(third)h(argumen)m(ts.)1159 4979 y(3.)61 b(If)35 -b(the)h(\014rst)e(argumen)m(t)i(is)g(exactly)h(`)p Ft(\()p -Fu(')f(and)f(the)g(third)g(argumen)m(t)h(is)1290 5089 -y(exactly)i(`)p Ft(\))p Fu(',)g(the)f(result)f(is)h(the)f(one-argumen)m -(t)i(test)f(of)f(the)h(second)1290 5198 y(argumen)m(t.)1159 -5340 y(4.)61 b(Otherwise,)30 b(the)h(expression)f(is)g(false.)p -eop end -%%Page: 54 60 -TeXDict begin 54 59 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(54)630 299 y(4)31 -b(argumen)m(ts)1110 408 y(The)f(follo)m(wing)i(conditions)f(are)f -(applied)h(in)f(the)g(order)g(listed.)1159 544 y(1.)61 -b(If)39 b(the)i(\014rst)e(argumen)m(t)h(is)g(`)p Ft(!)p -Fu(',)j(the)d(result)f(is)h(the)g(negation)i(of)e(the)1290 -653 y(three-argumen)m(t)k(expression)e(comp)s(osed)g(of)h(the)g -(remaining)g(argu-)1290 763 y(men)m(ts.)1159 898 y(2.)61 +1290 5340 y(t)m(w)m(o-argumen)m(t)33 b(test)e(using)f(the)g(second)h +(and)e(third)h(argumen)m(ts.)p eop end +%%Page: 55 61 +TeXDict begin 55 60 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(55)1159 299 y(3.)61 +b(If)35 b(the)h(\014rst)e(argumen)m(t)i(is)g(exactly)h(`)p +Ft(\()p Fu(')f(and)f(the)g(third)g(argumen)m(t)h(is)1290 +408 y(exactly)i(`)p Ft(\))p Fu(',)g(the)f(result)f(is)h(the)f +(one-argumen)m(t)i(test)f(of)f(the)h(second)1290 518 +y(argumen)m(t.)1159 651 y(4.)61 b(Otherwise,)30 b(the)h(expression)f +(is)g(false.)630 809 y(4)h(argumen)m(ts)1110 918 y(The)f(follo)m(wing)i +(conditions)f(are)f(applied)h(in)f(the)g(order)g(listed.)1159 +1052 y(1.)61 b(If)39 b(the)i(\014rst)e(argumen)m(t)h(is)g(`)p +Ft(!)p Fu(',)j(the)d(result)f(is)h(the)g(negation)i(of)e(the)1290 +1161 y(three-argumen)m(t)k(expression)e(comp)s(osed)g(of)h(the)g +(remaining)g(argu-)1290 1271 y(men)m(ts.)1159 1404 y(2.)61 b(If)31 b(the)g(\014rst)f(argumen)m(t)i(is)f(exactly)i(`)p Ft(\()p Fu(')e(and)g(the)g(fourth)f(argumen)m(t)i(is)1290 -1008 y(exactly)38 b(`)p Ft(\))p Fu(',)f(the)f(result)g(is)g(the)g(t)m -(w)m(o-argumen)m(t)i(test)f(of)f(the)g(second)1290 1118 -y(and)30 b(third)f(argumen)m(ts.)1159 1253 y(3.)61 b(Otherwise,)26 +1514 y(exactly)38 b(`)p Ft(\))p Fu(',)f(the)f(result)g(is)g(the)g(t)m +(w)m(o-argumen)m(t)i(test)f(of)f(the)g(second)1290 1623 +y(and)30 b(third)f(argumen)m(ts.)1159 1757 y(3.)61 b(Otherwise,)26 b(the)f(expression)f(is)h(parsed)f(and)g(ev)-5 b(aluated)26 -b(according)g(to)1290 1363 y(precedence)31 b(using)f(the)g(rules)g -(listed)h(ab)s(o)m(v)m(e.)630 1524 y(5)g(or)f(more)h(argumen)m(ts)1110 -1633 y(The)43 b(expression)f(is)i(parsed)e(and)g(ev)-5 -b(aluated)45 b(according)f(to)f(precedence)1110 1743 +b(according)g(to)1290 1866 y(precedence)31 b(using)f(the)g(rules)g +(listed)h(ab)s(o)m(v)m(e.)630 2024 y(5)g(or)f(more)h(argumen)m(ts)1110 +2133 y(The)43 b(expression)f(is)i(parsed)e(and)g(ev)-5 +b(aluated)45 b(according)f(to)f(precedence)1110 2243 y(using)30 b(the)g(rules)g(listed)h(ab)s(o)m(v)m(e.)630 -1904 y(When)40 b(used)f(with)g Ft(test)g Fu(or)h(`)p -Ft([)p Fu(',)j(the)d(`)p Ft(<)p Fu(')g(and)f(`)p Ft(>)p -Fu(')h(op)s(erators)g(sort)g(lexicographically)630 2014 -y(using)30 b(ASCI)s(I)f(ordering.)150 2175 y Ft(times)870 -2310 y(times)630 2446 y Fu(Prin)m(t)37 b(out)h(the)g(user)e(and)h -(system)g(times)h(used)f(b)m(y)g(the)h(shell)f(and)g(its)h(c)m -(hildren.)61 b(The)630 2555 y(return)29 b(status)i(is)f(zero.)150 -2716 y Ft(trap)870 2852 y(trap)47 b([-lp])f([)p Fj(arg)p -Ft(])g([)p Fj(sigspec)g Ft(...)o(])630 2987 y Fu(The)d(commands)f(in)h -Fr(arg)51 b Fu(are)44 b(to)g(b)s(e)e(read)h(and)g(executed)h(when)e -(the)h(shell)g(receiv)m(es)630 3097 y(signal)36 b Fr(sigsp)s(ec)p -Fu(.)57 b(If)35 b Fr(arg)44 b Fu(is)36 b(absen)m(t)g(\(and)f(there)h -(is)g(a)f(single)i Fr(sigsp)s(ec)6 b Fu(\))35 b(or)h(equal)g(to)h(`)p -Ft(-)p Fu(',)630 3206 y(eac)m(h)k(sp)s(eci\014ed)e(signal's)h(disp)s -(osition)g(is)f(reset)i(to)f(the)g(v)-5 b(alue)40 b(it)g(had)f(when)g -(the)h(shell)630 3316 y(w)m(as)33 b(started.)47 b(If)32 -b Fr(arg)41 b Fu(is)32 b(the)h(n)m(ull)f(string,)i(then)e(the)g(signal) -i(sp)s(eci\014ed)d(b)m(y)i(eac)m(h)g Fr(sigsp)s(ec)630 -3425 y Fu(is)g(ignored)h(b)m(y)f(the)g(shell)h(and)e(commands)h(it)h -(in)m(v)m(ok)m(es.)51 b(If)33 b Fr(arg)41 b Fu(is)33 -b(not)h(presen)m(t)f(and)g Ft(-p)630 3535 y Fu(has)g(b)s(een)g -(supplied,)f(the)i(shell)f(displa)m(ys)h(the)f(trap)g(commands)g(asso)s -(ciated)i(with)e(eac)m(h)630 3645 y Fr(sigsp)s(ec)p Fu(.)47 -b(If)31 b(no)i(argumen)m(ts)f(are)h(supplied,)e(or)i(only)f -Ft(-p)g Fu(is)g(giv)m(en,)i Ft(trap)d Fu(prin)m(ts)h(the)g(list)630 -3754 y(of)c(commands)f(asso)s(ciated)i(with)f(eac)m(h)h(signal)f(n)m -(um)m(b)s(er)e(in)i(a)g(form)f(that)h(ma)m(y)h(b)s(e)e(reused)630 -3864 y(as)f(shell)h(input.)38 b(The)26 b Ft(-l)f Fu(option)i(causes)f -(the)g(shell)h(to)g(prin)m(t)e(a)i(list)f(of)h(signal)g(names)f(and)630 -3973 y(their)33 b(corresp)s(onding)f(n)m(um)m(b)s(ers.)47 -b(Eac)m(h)34 b Fr(sigsp)s(ec)39 b Fu(is)33 b(either)g(a)h(signal)g -(name)f(or)g(a)g(signal)630 4083 y(n)m(um)m(b)s(er.)39 -b(Signal)31 b(names)f(are)h(case)h(insensitiv)m(e)f(and)f(the)g -Ft(SIG)g Fu(pre\014x)f(is)i(optional.)630 4218 y(If)k(a)g -Fr(sigsp)s(ec)41 b Fu(is)35 b Ft(0)g Fu(or)g Ft(EXIT)p -Fu(,)g Fr(arg)43 b Fu(is)35 b(executed)h(when)e(the)h(shell)h(exits.)55 -b(If)35 b(a)g Fr(sigsp)s(ec)41 b Fu(is)630 4328 y Ft(DEBUG)p -Fu(,)32 b(the)g(command)g Fr(arg)40 b Fu(is)33 b(executed)g(b)s(efore)f -(ev)m(ery)h(simple)f(command,)h Ft(for)e Fu(com-)630 -4437 y(mand,)d Ft(case)g Fu(command,)h Ft(select)e Fu(command,)i(ev)m -(ery)h(arithmetic)g Ft(for)d Fu(command,)j(and)630 4547 -y(b)s(efore)22 b(the)g(\014rst)f(command)h(executes)i(in)e(a)g(shell)h -(function.)37 b(Refer)22 b(to)h(the)g(description)f(of)630 -4657 y(the)i Ft(extdebug)d Fu(option)j(to)h(the)f Ft(shopt)e -Fu(builtin)h(\(see)i(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)630 -4766 y(page)33 b(71\))g(for)f(details)h(of)f(its)h(e\013ect)g(on)f(the) -g Ft(DEBUG)f Fu(trap.)46 b(If)31 b(a)i Fr(sigsp)s(ec)38 -b Fu(is)32 b Ft(RETURN)p Fu(,)f(the)630 4876 y(command)h -Fr(arg)41 b Fu(is)33 b(executed)g(eac)m(h)h(time)f(a)g(shell)g -(function)g(or)f(a)h(script)g(executed)g(with)630 4985 -y(the)e Ft(.)f Fu(or)g Ft(source)f Fu(builtins)g(\014nishes)h -(executing.)630 5121 y(If)20 b(a)i Fr(sigsp)s(ec)27 b -Fu(is)21 b Ft(ERR)p Fu(,)h(the)f(command)g Fr(arg)29 -b Fu(is)21 b(executed)h(whenev)m(er)e(a)i(pip)s(eline)e(\(whic)m(h)h -(ma)m(y)630 5230 y(consist)35 b(of)g(a)f(single)h(simple)g(command\),)h -(a)e(list,)j(or)d(a)h(comp)s(ound)e(command)h(returns)630 -5340 y(a)41 b(non-zero)g(exit)h(status,)h(sub)5 b(ject)41 -b(to)g(the)g(follo)m(wing)h(conditions.)72 b(The)40 b -Ft(ERR)f Fu(trap)i(is)p eop end -%%Page: 55 61 -TeXDict begin 55 60 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(55)630 299 y(not)37 -b(executed)h(if)f(the)h(failed)f(command)g(is)g(part)g(of)h(the)f -(command)g(list)h(immediately)630 408 y(follo)m(wing)30 -b(an)e Ft(until)f Fu(or)i Ft(while)e Fu(k)m(eyw)m(ord,)i(part)g(of)f -(the)h(test)g(follo)m(wing)h(the)f Ft(if)f Fu(or)g Ft(elif)630 -518 y Fu(reserv)m(ed)45 b(w)m(ords,)j(part)c(of)h(a)g(command)g -(executed)g(in)g(a)g Ft(&&)f Fu(or)h Ft(||)f Fu(list)h(except)h(the)630 -628 y(command)28 b(follo)m(wing)j(the)d(\014nal)h Ft(&&)f -Fu(or)g Ft(||)p Fu(,)h(an)m(y)g(command)f(in)h(a)g(pip)s(eline)f(but)g -(the)h(last,)630 737 y(or)d(if)g(the)f(command's)h(return)f(status)h -(is)g(b)s(eing)f(in)m(v)m(erted)i(using)e Ft(!)p Fu(.)39 -b(These)25 b(are)i(the)f(same)630 847 y(conditions)31 -b(ob)s(ey)m(ed)f(b)m(y)h(the)f Ft(errexit)f Fu(\()p Ft(-e)p -Fu(\))h(option.)630 974 y(Signals)37 b(ignored)f(up)s(on)f(en)m(try)i -(to)g(the)f(shell)h(cannot)g(b)s(e)f(trapp)s(ed)f(or)h(reset.)59 -b(T)-8 b(rapp)s(ed)630 1084 y(signals)28 b(that)f(are)h(not)f(b)s(eing) -g(ignored)g(are)g(reset)h(to)g(their)f(original)h(v)-5 -b(alues)28 b(in)e(a)i(subshell)630 1194 y(or)i(subshell)g(en)m -(vironmen)m(t)h(when)e(one)i(is)f(created.)630 1321 y(The)g(return)f -(status)i(is)f(zero)h(unless)f(a)h Fr(sigsp)s(ec)36 b -Fu(do)s(es)30 b(not)h(sp)s(ecify)f(a)g(v)-5 b(alid)31 -b(signal.)150 1467 y Ft(umask)870 1595 y(umask)46 b([-p])h([-S])g([)p -Fj(mode)p Ft(])630 1722 y Fu(Set)30 b(the)f(shell)h(pro)s(cess's)f +2400 y(If)24 b(the)h(shell)g(is)f(in)h Fm(posix)e Fu(mo)s(de,)j(or)f +(if)f(the)h(expression)f(is)h(part)f(of)h(the)g Ft([[)f +Fu(command,)i(the)630 2510 y(`)p Ft(<)p Fu(')34 b(and)e(`)p +Ft(>)p Fu(')i(op)s(erators)g(sort)f(using)g(the)h(curren)m(t)f(lo)s +(cale.)52 b(If)33 b(the)h(shell)f(is)h(not)g(in)f Fm(posix)630 +2619 y Fu(mo)s(de,)28 b(the)f Ft(test)f Fu(and)g(`)p +Ft([)p Fu(')h(commands)g(sort)g(lexicographically)j(using)c(ASCI)s(I)g +(ordering.)630 2753 y(The)k(historical)i(op)s(erator-precedence)f +(parsing)f(with)g(4)h(or)f(more)h(argumen)m(ts)g(can)f(lead)630 +2862 y(to)k(am)m(biguities)g(when)e(it)i(encoun)m(ters)f(strings)g +(that)h(lo)s(ok)f(lik)m(e)i(primaries.)48 b(The)33 b +Fm(posix)630 2972 y Fu(standard)42 b(has)g(deprecated)i(the)f +Ft(-a)f Fu(and)g Ft(-o)g Fu(primaries)g(and)h(enclosing)g(expressions) +630 3081 y(within)28 b(paren)m(theses.)40 b(Scripts)28 +b(should)f(no)h(longer)h(use)f(them.)40 b(It's)28 b(m)m(uc)m(h)g(more)h +(reliable)630 3191 y(to)f(restrict)f(test)h(in)m(v)m(o)s(cations)h(to)e +(a)g(single)h(primary)-8 b(,)27 b(and)f(to)i(replace)g(uses)e(of)h +Ft(-a)f Fu(and)h Ft(-o)630 3301 y Fu(with)j(the)h(shell's)f +Ft(&&)g Fu(and)g Ft(||)g Fu(list)h(op)s(erators.)41 b(F)-8 +b(or)31 b(example,)g(use)870 3434 y Ft(test)47 b(-n)g(string1)f(&&)h +(test)f(-n)i(string2)630 3567 y Fu(instead)31 b(of)870 +3701 y Ft(test)47 b(-n)g(string1)f(-a)h(-n)g(string2)150 +3858 y(times)870 3992 y(times)630 4125 y Fu(Prin)m(t)37 +b(out)h(the)g(user)e(and)h(system)g(times)h(used)f(b)m(y)g(the)h(shell) +f(and)g(its)h(c)m(hildren.)61 b(The)630 4235 y(return)29 +b(status)i(is)f(zero.)150 4392 y Ft(trap)870 4525 y(trap)47 +b([-Plp])f([)p Fj(action)p Ft(])f([)p Fj(sigspec)h Ft(...)o(])630 +4659 y Fu(The)40 b Fr(action)i Fu(is)e(a)h(command)f(that)h(is)f(read)h +(and)e(executed)j(when)d(the)i(shell)f(receiv)m(es)630 +4768 y(signal)30 b Fr(sigsp)s(ec)p Fu(.)40 b(If)29 b +Fr(action)h Fu(is)f(absen)m(t)h(\(and)f(there)g(is)g(a)g(single)h +Fr(sigsp)s(ec)6 b Fu(\))29 b(or)g(equal)h(to)g(`)p Ft(-)p +Fu(',)630 4878 y(eac)m(h)e(sp)s(eci\014ed)e(signal's)h(disp)s(osition)f +(is)h(reset)g(to)g(the)g(v)-5 b(alue)27 b(it)g(had)f(when)f(the)i +(shell)g(w)m(as)630 4987 y(started.)43 b(If)30 b Fr(action)j +Fu(is)e(the)g(n)m(ull)f(string,)i(then)e(the)i(signal)f(sp)s(eci\014ed) +f(b)m(y)h(eac)m(h)h Fr(sigsp)s(ec)37 b Fu(is)630 5097 +y(ignored)30 b(b)m(y)h(the)f(shell)h(and)f(commands)g(it)h(in)m(v)m(ok) +m(es.)630 5230 y(If)44 b(no)h(argumen)m(ts)g(are)g(supplied,)j +Ft(trap)c Fu(prin)m(ts)g(the)h(actions)h(asso)s(ciated)g(with)f(eac)m +(h)630 5340 y(trapp)s(ed)29 b(signal)j(as)f(a)g(set)g(of)f +Ft(trap)g Fu(commands)g(that)h(can)g(b)s(e)f(reused)g(as)h(shell)g +(input)e(to)p eop end +%%Page: 56 62 +TeXDict begin 56 61 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(56)630 299 y(restore)29 +b(the)g(curren)m(t)g(signal)g(disp)s(ositions.)40 b(If)28 +b Fr(action)i Fu(is)f(not)f(presen)m(t)h(and)f Ft(-p)g +Fu(has)h(b)s(een)630 408 y(supplied,)39 b Ft(trap)e Fu(displa)m(ys)i +(the)f(trap)h(commands)f(asso)s(ciated)h(with)f(eac)m(h)i +Fr(sigsp)s(ec)p Fu(,)h(or,)630 518 y(if)32 b(no)g Fr(sigsp)s(ec)6 +b Fu(s)32 b(are)h(supplied,)e(for)h(all)h(trapp)s(ed)e(signals,)j(as)e +(a)h(set)g(of)f Ft(trap)f Fu(commands)630 628 y(that)44 +b(can)g(b)s(e)f(reused)g(as)g(shell)h(input)f(to)h(restore)g(the)g +(curren)m(t)f(signal)h(disp)s(ositions.)630 737 y(The)31 +b Ft(-P)g Fu(option)g(b)s(eha)m(v)m(es)h(similarly)-8 +b(,)33 b(but)e(displa)m(ys)g(only)g(the)h(actions)g(asso)s(ciated)h +(with)630 847 y(eac)m(h)43 b Fr(sigsp)s(ec)k Fu(argumen)m(t.)74 +b Ft(-P)41 b Fu(requires)g(at)h(least)h(one)f Fr(sigsp)s(ec)47 +b Fu(argumen)m(t.)75 b(The)41 b Ft(-P)630 956 y Fu(or)34 +b Ft(-p)f Fu(options)h(to)g Ft(trap)e Fu(ma)m(y)j(b)s(e)e(used)g(in)g +(a)h(subshell)f(en)m(vironmen)m(t)h(\(e.g.,)i(command)630 +1066 y(substitution\))k(and,)j(as)d(long)h(as)g(they)g(are)f(used)g(b)s +(efore)g Ft(trap)f Fu(is)h(used)g(to)h(c)m(hange)h(a)630 +1176 y(signal's)31 b(handling,)f(will)h(displa)m(y)f(the)h(state)h(of)e +(its)h(paren)m(t's)g(traps.)630 1310 y(The)21 b Ft(-l)f +Fu(option)i(causes)g Ft(trap)e Fu(to)i(prin)m(t)f(a)g(list)h(of)g +(signal)g(names)f(and)g(their)g(corresp)s(onding)630 +1420 y(n)m(um)m(b)s(ers.)37 b(Eac)m(h)24 b Fr(sigsp)s(ec)30 +b Fu(is)23 b(either)i(a)f(signal)g(name)g(or)f(a)h(signal)h(n)m(um)m(b) +s(er.)37 b(Signal)24 b(names)630 1530 y(are)31 b(case)g(insensitiv)m(e) +h(and)d(the)i Ft(SIG)e Fu(pre\014x)h(is)g(optional.)630 +1665 y(If)f(a)g Fr(sigsp)s(ec)35 b Fu(is)30 b Ft(0)f +Fu(or)g Ft(EXIT)p Fu(,)f Fr(action)j Fu(is)e(executed)h(when)f(the)g +(shell)g(exits.)42 b(If)28 b(a)i Fr(sigsp)s(ec)35 b Fu(is)630 +1774 y Ft(DEBUG)p Fu(,)g Fr(action)g Fu(is)g(executed)h(b)s(efore)e(ev) +m(ery)h(simple)g(command,)h Ft(for)d Fu(command,)j Ft(case)630 +1884 y Fu(command,)29 b Ft(select)d Fu(command,)j(\(\()g(arithmetic)h +(command,)e([[)h(conditional)h(command,)630 1993 y(arithmetic)44 +b Ft(for)e Fu(command,)k(and)c(b)s(efore)g(the)h(\014rst)f(command)g +(executes)i(in)f(a)g(shell)630 2103 y(function.)d(Refer)31 +b(to)g(the)f(description)h(of)f(the)h Ft(extdebug)d Fu(option)j(to)g +(the)f Ft(shopt)f Fu(builtin)630 2212 y(\(see)35 b(Section)g(4.3.2)g +([The)f(Shopt)f(Builtin],)j(page)f(73\))g(for)f(details)h(of)f(its)g +(e\013ect)i(on)e(the)630 2322 y Ft(DEBUG)25 b Fu(trap.)39 +b(If)26 b(a)g Fr(sigsp)s(ec)32 b Fu(is)26 b Ft(RETURN)p +Fu(,)g Fr(action)i Fu(is)e(executed)h(eac)m(h)g(time)g(a)g(shell)f +(function)630 2432 y(or)k(a)h(script)f(executed)i(with)e(the)g +Ft(.)g Fu(or)h Ft(source)d Fu(builtins)i(\014nishes)f(executing.)630 +2567 y(If)c(a)h Fr(sigsp)s(ec)31 b Fu(is)25 b Ft(ERR)p +Fu(,)h Fr(action)g Fu(is)g(executed)g(whenev)m(er)f(a)h(pip)s(eline)f +(\(whic)m(h)g(ma)m(y)h(consist)g(of)630 2676 y(a)31 b(single)h(simple)f +(command\),)h(a)f(list,)h(or)f(a)h(comp)s(ound)d(command)i(returns)f(a) +h(non-zero)630 2786 y(exit)e(status,)g(sub)5 b(ject)27 +b(to)i(the)f(follo)m(wing)h(conditions.)40 b(The)28 b +Ft(ERR)f Fu(trap)g(is)h(not)g(executed)h(if)630 2895 +y(the)24 b(failed)h(command)e(is)h(part)g(of)g(the)g(command)g(list)h +(immediately)g(follo)m(wing)h(an)d Ft(until)630 3005 +y Fu(or)h Ft(while)f Fu(k)m(eyw)m(ord,)j(part)e(of)g(the)g(test)h +(follo)m(wing)h(the)e Ft(if)g Fu(or)g Ft(elif)f Fu(reserv)m(ed)h(w)m +(ords,)h(part)630 3114 y(of)37 b(a)g(command)f(executed)i(in)e(a)h +Ft(&&)f Fu(or)h Ft(||)f Fu(list)h(except)g(the)g(command)g(follo)m +(wing)h(the)630 3224 y(\014nal)f Ft(&&)f Fu(or)h Ft(||)p +Fu(,)i(an)m(y)e(command)g(in)g(a)g(pip)s(eline)g(but)f(the)i(last,)i +(or)d(if)g(the)g(command's)630 3334 y(return)31 b(status)i(is)f(b)s +(eing)f(in)m(v)m(erted)i(using)f Ft(!)p Fu(.)46 b(These)32 +b(are)g(the)h(same)f(conditions)h(ob)s(ey)m(ed)630 3443 +y(b)m(y)d(the)h Ft(errexit)d Fu(\()p Ft(-e)p Fu(\))j(option.)630 +3578 y(Signals)23 b(ignored)h(up)s(on)e(en)m(try)h(to)h(a)g(non-in)m +(teractiv)m(e)i(shell)d(cannot)h(b)s(e)f(trapp)s(ed)f(or)h(reset.)630 +3688 y(In)m(teractiv)m(e)i(shells)d(p)s(ermit)f(trapping)h(signals)h +(ignored)f(on)g(en)m(try)-8 b(.)39 b(T)-8 b(rapp)s(ed)21 +b(signals)h(that)630 3797 y(are)30 b(not)g(b)s(eing)f(ignored)h(are)g +(reset)g(to)g(their)g(original)g(v)-5 b(alues)30 b(in)g(a)g(subshell)e +(or)i(subshell)630 3907 y(en)m(vironmen)m(t)h(when)e(one)i(is)f +(created.)630 4042 y(The)g(return)f(status)i(is)f(zero)h(unless)f(a)h +Fr(sigsp)s(ec)36 b Fu(do)s(es)30 b(not)h(sp)s(ecify)f(a)g(v)-5 +b(alid)31 b(signal.)150 4202 y Ft(true)870 4337 y(true)630 +4472 y Fu(Do)s(es)g(nothing,)g(returns)e(a)h(0)h(status.)150 +4632 y Ft(umask)870 4767 y(umask)46 b([-p])h([-S])g([)p +Fj(mode)p Ft(])630 4902 y Fu(Set)30 b(the)f(shell)h(pro)s(cess's)f (\014le)h(creation)g(mask)g(to)g Fr(mo)s(de)p Fu(.)40 b(If)29 b Fr(mo)s(de)34 b Fu(b)s(egins)29 b(with)g(a)h(digit,)630 -1832 y(it)e(is)f(in)m(terpreted)g(as)g(an)g(o)s(ctal)i(n)m(um)m(b)s +5011 y(it)e(is)f(in)m(terpreted)g(as)g(an)g(o)s(ctal)i(n)m(um)m(b)s (er;)e(if)g(not,)h(it)g(is)f(in)m(terpreted)g(as)g(a)h(sym)m(b)s(olic)f -(mo)s(de)630 1942 y(mask)i(similar)g(to)g(that)h(accepted)g(b)m(y)f +(mo)s(de)630 5121 y(mask)i(similar)g(to)g(that)h(accepted)g(b)m(y)f (the)g Ft(chmod)e Fu(command.)40 b(If)28 b Fr(mo)s(de)34 -b Fu(is)28 b(omitted,)j(the)630 2051 y(curren)m(t)39 +b Fu(is)28 b(omitted,)j(the)630 5230 y(curren)m(t)39 b(v)-5 b(alue)40 b(of)f(the)g(mask)g(is)h(prin)m(ted.)66 b(If)39 b(the)g Ft(-S)g Fu(option)g(is)h(supplied)d(without)j(a)630 -2161 y Fr(mo)s(de)d Fu(argumen)m(t,)d(the)e(mask)g(is)h(prin)m(ted)f +5340 y Fr(mo)s(de)d Fu(argumen)m(t,)d(the)e(mask)g(is)h(prin)m(ted)f (in)g(a)g(sym)m(b)s(olic)h(format.)47 b(If)32 b(the)g -Ft(-p)g Fu(option)h(is)630 2270 y(supplied,)f(and)f Fr(mo)s(de)37 -b Fu(is)32 b(omitted,)i(the)f(output)f(is)g(in)g(a)g(form)g(that)h(ma)m -(y)g(b)s(e)e(reused)h(as)630 2380 y(input.)62 b(The)38 -b(return)f(status)h(is)g(zero)g(if)g(the)g(mo)s(de)g(is)g(successfully) -g(c)m(hanged)g(or)g(if)g(no)630 2489 y Fr(mo)s(de)d Fu(argumen)m(t)c -(is)f(supplied,)g(and)f(non-zero)i(otherwise.)630 2617 -y(Note)38 b(that)e(when)g(the)g(mo)s(de)g(is)g(in)m(terpreted)h(as)f -(an)g(o)s(ctal)i(n)m(um)m(b)s(er,)e(eac)m(h)i(n)m(um)m(b)s(er)d(of)630 -2727 y(the)f(umask)g(is)h(subtracted)f(from)f Ft(7)p -Fu(.)53 b(Th)m(us,)34 b(a)h(umask)e(of)i Ft(022)e Fu(results)h(in)g(p)s -(ermissions)630 2836 y(of)d Ft(755)p Fu(.)150 2982 y -Ft(unset)870 3110 y(unset)46 b([-fnv])g([)p Fj(name)p -Ft(])630 3237 y Fu(Remo)m(v)m(e)36 b(eac)m(h)f(v)-5 b(ariable)35 -b(or)f(function)f Fr(name)p Fu(.)52 b(If)33 b(the)i Ft(-v)e -Fu(option)h(is)g(giv)m(en,)j(eac)m(h)e Fr(name)630 3347 -y Fu(refers)27 b(to)h(a)g(shell)f(v)-5 b(ariable)28 b(and)f(that)h(v)-5 -b(ariable)28 b(is)f(remo)m(v)m(ed.)41 b(If)27 b(the)g -Ft(-f)g Fu(option)g(is)h(giv)m(en,)630 3457 y(the)37 -b Fr(name)5 b Fu(s)37 b(refer)f(to)i(shell)f(functions,)h(and)e(the)h -(function)g(de\014nition)f(is)h(remo)m(v)m(ed.)61 b(If)630 -3566 y(the)34 b Ft(-n)e Fu(option)i(is)f(supplied,)h(and)e +Ft(-p)g Fu(option)h(is)p eop end +%%Page: 57 63 +TeXDict begin 57 62 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(57)630 299 y(supplied,)32 +b(and)f Fr(mo)s(de)37 b Fu(is)32 b(omitted,)i(the)f(output)f(is)g(in)g +(a)g(form)g(that)h(ma)m(y)g(b)s(e)e(reused)h(as)630 408 +y(input.)62 b(The)38 b(return)f(status)h(is)g(zero)g(if)g(the)g(mo)s +(de)g(is)g(successfully)g(c)m(hanged)g(or)g(if)g(no)630 +518 y Fr(mo)s(de)d Fu(argumen)m(t)c(is)f(supplied,)g(and)f(non-zero)i +(otherwise.)630 648 y(Note)38 b(that)e(when)g(the)g(mo)s(de)g(is)g(in)m +(terpreted)h(as)f(an)g(o)s(ctal)i(n)m(um)m(b)s(er,)e(eac)m(h)i(n)m(um)m +(b)s(er)d(of)630 758 y(the)f(umask)g(is)h(subtracted)f(from)f +Ft(7)p Fu(.)53 b(Th)m(us,)34 b(a)h(umask)e(of)i Ft(022)e +Fu(results)h(in)g(p)s(ermissions)630 867 y(of)d Ft(755)p +Fu(.)150 1018 y Ft(unset)870 1148 y(unset)46 b([-fnv])g([)p +Fj(name)p Ft(])630 1278 y Fu(Remo)m(v)m(e)36 b(eac)m(h)f(v)-5 +b(ariable)35 b(or)f(function)f Fr(name)p Fu(.)52 b(If)33 +b(the)i Ft(-v)e Fu(option)h(is)g(giv)m(en,)j(eac)m(h)e +Fr(name)630 1388 y Fu(refers)27 b(to)h(a)g(shell)f(v)-5 +b(ariable)28 b(and)f(that)h(v)-5 b(ariable)28 b(is)f(remo)m(v)m(ed.)41 +b(If)27 b(the)g Ft(-f)g Fu(option)g(is)h(giv)m(en,)630 +1497 y(the)37 b Fr(name)5 b Fu(s)37 b(refer)f(to)i(shell)f(functions,)h +(and)e(the)h(function)g(de\014nition)f(is)h(remo)m(v)m(ed.)61 +b(If)630 1607 y(the)34 b Ft(-n)e Fu(option)i(is)f(supplied,)h(and)e Fr(name)39 b Fu(is)33 b(a)h(v)-5 b(ariable)34 b(with)f(the)h -Ft(nameref)d Fu(attribute,)630 3676 y Fr(name)42 b Fu(will)37 +Ft(nameref)d Fu(attribute,)630 1716 y Fr(name)42 b Fu(will)37 b(b)s(e)f(unset)g(rather)g(than)h(the)g(v)-5 b(ariable)37 b(it)g(references.)60 b Ft(-n)36 b Fu(has)g(no)h(e\013ect)h(if)630 -3785 y(the)h Ft(-f)g Fu(option)g(is)h(supplied.)65 b(If)39 +1826 y(the)h Ft(-f)g Fu(option)g(is)h(supplied.)65 b(If)39 b(no)g(options)h(are)f(supplied,)h(eac)m(h)h Fr(name)j -Fu(refers)39 b(to)h(a)630 3895 y(v)-5 b(ariable;)45 b(if)39 +Fu(refers)39 b(to)h(a)630 1936 y(v)-5 b(ariable;)45 b(if)39 b(there)g(is)g(no)g(v)-5 b(ariable)40 b(b)m(y)f(that)h(name,)h(a)f -(function)f(with)g(that)g(name,)j(if)630 4004 y(an)m(y)-8 +(function)f(with)g(that)g(name,)j(if)630 2045 y(an)m(y)-8 b(,)34 b(is)e(unset.)46 b(Readonly)33 b(v)-5 b(ariables)33 b(and)f(functions)g(ma)m(y)h(not)f(b)s(e)g(unset.)46 -b(Some)33 b(shell)630 4114 y(v)-5 b(ariables)29 b(lose)h(their)e(sp)s +b(Some)33 b(shell)630 2155 y(v)-5 b(ariables)29 b(lose)h(their)e(sp)s (ecial)h(b)s(eha)m(vior)g(if)f(they)h(are)g(unset;)g(suc)m(h)f(b)s(eha) -m(vior)h(is)g(noted)f(in)630 4224 y(the)35 b(description)h(of)f(the)g +m(vior)h(is)g(noted)f(in)630 2264 y(the)35 b(description)h(of)f(the)g (individual)g(v)-5 b(ariables.)56 b(The)34 b(return)g(status)i(is)f -(zero)h(unless)f(a)630 4333 y Fr(name)h Fu(is)30 b(readonly)g(or)h(ma)m -(y)g(not)f(b)s(e)g(unset.)150 4560 y Fs(4.2)68 b(Bash)45 -b(Builtin)g(Commands)150 4720 y Fu(This)c(section)h(describ)s(es)f +(zero)h(unless)f(a)630 2374 y Fr(name)h Fu(is)30 b(readonly)g(or)h(ma)m +(y)g(not)f(b)s(e)g(unset.)150 2606 y Fs(4.2)68 b(Bash)45 +b(Builtin)g(Commands)150 2765 y Fu(This)c(section)h(describ)s(es)f (builtin)f(commands)h(whic)m(h)g(are)h(unique)e(to)j(or)e(ha)m(v)m(e)h -(b)s(een)f(extended)g(in)150 4829 y(Bash.)g(Some)30 b(of)h(these)g +(b)s(een)f(extended)g(in)150 2875 y(Bash.)g(Some)30 b(of)h(these)g (commands)f(are)g(sp)s(eci\014ed)g(in)g(the)h Fm(posix)e -Fu(standard.)150 4975 y Ft(alias)870 5103 y(alias)46 +Fu(standard.)150 3025 y Ft(alias)870 3155 y(alias)46 b([-p])h([)p Fj(name)p Ft([=)p Fj(value)p Ft(])d(...)o(])630 -5230 y Fu(Without)26 b(argumen)m(ts)f(or)g(with)f(the)h +3285 y Fu(Without)26 b(argumen)m(ts)f(or)g(with)f(the)h Ft(-p)g Fu(option,)h Ft(alias)e Fu(prin)m(ts)g(the)h(list)h(of)f -(aliases)h(on)f(the)630 5340 y(standard)g(output)g(in)g(a)h(form)f +(aliases)h(on)f(the)630 3395 y(standard)g(output)g(in)g(a)h(form)f (that)h(allo)m(ws)h(them)e(to)h(b)s(e)f(reused)g(as)g(input.)39 -b(If)25 b(argumen)m(ts)p eop end -%%Page: 56 62 -TeXDict begin 56 61 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(56)630 299 y(are)28 -b(supplied,)e(an)i(alias)g(is)f(de\014ned)f(for)h(eac)m(h)h -Fr(name)33 b Fu(whose)27 b Fr(v)-5 b(alue)33 b Fu(is)27 -b(giv)m(en.)41 b(If)26 b(no)h Fr(v)-5 b(alue)630 408 -y Fu(is)37 b(giv)m(en,)j(the)d(name)g(and)g(v)-5 b(alue)37 -b(of)h(the)f(alias)h(is)f(prin)m(ted.)61 b(Aliases)38 -b(are)f(describ)s(ed)f(in)630 518 y(Section)31 b(6.6)h([Aliases],)g -(page)f(100.)150 676 y Ft(bind)870 810 y(bind)47 b([-m)g -Fj(keymap)p Ft(])e([-lpsvPSVX])870 920 y(bind)i([-m)g -Fj(keymap)p Ft(])e([-q)i Fj(function)p Ft(])f([-u)g Fj(function)p -Ft(])g([-r)h Fj(keyseq)p Ft(])870 1029 y(bind)g([-m)g -Fj(keymap)p Ft(])e(-f)j Fj(filename)870 1139 y Ft(bind)f([-m)g -Fj(keymap)p Ft(])e(-x)j Fj(keyseq:shell-command)870 1249 -y Ft(bind)f([-m)g Fj(keymap)p Ft(])e Fj(keyseq:function-name)870 -1358 y Ft(bind)i([-m)g Fj(keymap)p Ft(])e Fj(keyseq:readline-command) -870 1468 y Ft(bind)i Fj(readline-command-line)630 1602 -y Fu(Displa)m(y)22 b(curren)m(t)f(Readline)h(\(see)f(Chapter)g(8)g -([Command)f(Line)h(Editing],)j(page)e(117\))g(k)m(ey)630 -1711 y(and)36 b(function)g(bindings,)i(bind)d(a)i(k)m(ey)g(sequence)g -(to)h(a)f(Readline)g(function)f(or)h(macro,)630 1821 -y(or)44 b(set)h(a)g(Readline)f(v)-5 b(ariable.)83 b(Eac)m(h)45 -b(non-option)g(argumen)m(t)f(is)g(a)h(command)f(as)g(it)630 -1931 y(w)m(ould)e(app)s(ear)f(in)h(a)h(Readline)g(initialization)i -(\014le)d(\(see)h(Section)g(8.3)g([Readline)g(Init)630 -2040 y(File],)c(page)d(120\),)j(but)c(eac)m(h)h(binding)f(or)g(command) -h(m)m(ust)f(b)s(e)g(passed)g(as)h(a)g(separate)630 2150 -y(argumen)m(t;)31 b(e.g.,)h(`)p Ft("\\C-x\\C-r":re-read-init-f)o(ile)p -Fu('.)630 2284 y(Options,)e(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m -(wing)h(meanings:)630 2442 y Ft(-m)e Fj(keymap)66 b Fu(Use)54 -b Fr(k)m(eymap)j Fu(as)d(the)g(k)m(eymap)g(to)h(b)s(e)e(a\013ected)i(b) -m(y)f(the)g(subsequen)m(t)1110 2552 y(bindings.)46 b(Acceptable)34 +b(If)25 b(argumen)m(ts)630 3505 y(are)j(supplied,)e(an)i(alias)g(is)f +(de\014ned)f(for)h(eac)m(h)h Fr(name)33 b Fu(whose)27 +b Fr(v)-5 b(alue)33 b Fu(is)27 b(giv)m(en.)41 b(If)26 +b(no)h Fr(v)-5 b(alue)630 3614 y Fu(is)37 b(giv)m(en,)j(the)d(name)g +(and)g(v)-5 b(alue)37 b(of)h(the)f(alias)h(is)f(prin)m(ted.)61 +b(Aliases)38 b(are)f(describ)s(ed)f(in)630 3724 y(Section)31 +b(6.6)h([Aliases],)g(page)f(103.)150 3874 y Ft(bind)870 +4004 y(bind)47 b([-m)g Fj(keymap)p Ft(])e([-lpsvPSVX])870 +4114 y(bind)i([-m)g Fj(keymap)p Ft(])e([-q)i Fj(function)p +Ft(])f([-u)g Fj(function)p Ft(])g([-r)h Fj(keyseq)p Ft(])870 +4224 y(bind)g([-m)g Fj(keymap)p Ft(])e(-f)j Fj(filename)870 +4333 y Ft(bind)f([-m)g Fj(keymap)p Ft(])e(-x)j Fj(keyseq[:)d +(]shell-command)870 4443 y Ft(bind)i([-m)g Fj(keymap)p +Ft(])e Fj(keyseq:function-name)870 4552 y Ft(bind)i([-m)g +Fj(keymap)p Ft(])e Fj(keyseq:readline-command)870 4662 +y Ft(bind)i Fj(readline-command-line)630 4792 y Fu(Displa)m(y)22 +b(curren)m(t)f(Readline)h(\(see)f(Chapter)g(8)g([Command)f(Line)h +(Editing],)j(page)e(122\))g(k)m(ey)630 4902 y(and)36 +b(function)g(bindings,)i(bind)d(a)i(k)m(ey)g(sequence)g(to)h(a)f +(Readline)g(function)f(or)h(macro,)630 5011 y(or)44 b(set)h(a)g +(Readline)f(v)-5 b(ariable.)83 b(Eac)m(h)45 b(non-option)g(argumen)m(t) +f(is)g(a)h(command)f(as)g(it)630 5121 y(w)m(ould)e(app)s(ear)f(in)h(a)h +(Readline)g(initialization)i(\014le)d(\(see)h(Section)g(8.3)g +([Readline)g(Init)630 5230 y(File],)c(page)d(125\),)j(but)c(eac)m(h)h +(binding)f(or)g(command)h(m)m(ust)f(b)s(e)g(passed)g(as)h(a)g(separate) +630 5340 y(argumen)m(t;)31 b(e.g.,)h(`)p Ft +("\\C-x\\C-r":re-read-init-f)o(ile)p Fu('.)p eop end +%%Page: 58 64 +TeXDict begin 58 63 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(58)630 299 y(Options,)30 +b(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h(meanings:)630 +459 y Ft(-m)e Fj(keymap)66 b Fu(Use)54 b Fr(k)m(eymap)j +Fu(as)d(the)g(k)m(eymap)g(to)h(b)s(e)e(a\013ected)i(b)m(y)f(the)g +(subsequen)m(t)1110 569 y(bindings.)46 b(Acceptable)34 b Fr(k)m(eymap)i Fu(names)c(are)h Ft(emacs)p Fu(,)f Ft(emacs-standard)p -Fu(,)1110 2661 y Ft(emacs-meta)p Fu(,)99 b Ft(emacs-ctlx)p +Fu(,)1110 678 y Ft(emacs-meta)p Fu(,)99 b Ft(emacs-ctlx)p Fu(,)f Ft(vi)p Fu(,)j Ft(vi-move)p Fu(,)f Ft(vi-command)p -Fu(,)f(and)1110 2771 y Ft(vi-insert)p Fu(.)81 b Ft(vi)44 +Fu(,)f(and)1110 788 y Ft(vi-insert)p Fu(.)81 b Ft(vi)44 b Fu(is)h(equiv)-5 b(alen)m(t)46 b(to)g Ft(vi-command)c -Fu(\()p Ft(vi-move)h Fu(is)i(also)h(a)1110 2880 y(synon)m(ym\);)30 +Fu(\()p Ft(vi-move)h Fu(is)i(also)h(a)1110 897 y(synon)m(ym\);)30 b Ft(emacs)f Fu(is)i(equiv)-5 b(alen)m(t)32 b(to)f Ft(emacs-standard)p -Fu(.)630 3039 y Ft(-l)384 b Fu(List)31 b(the)f(names)g(of)h(all)g -(Readline)g(functions.)630 3197 y Ft(-p)384 b Fu(Displa)m(y)34 +Fu(.)630 1058 y Ft(-l)384 b Fu(List)31 b(the)f(names)g(of)h(all)g +(Readline)g(functions.)630 1218 y Ft(-p)384 b Fu(Displa)m(y)34 b(Readline)f(function)g(names)g(and)f(bindings)f(in)i(suc)m(h)f(a)i(w)m -(a)m(y)f(that)1110 3306 y(they)e(can)f(b)s(e)g(used)g(as)g(input)g(or)g -(in)g(a)h(Readline)g(initialization)i(\014le.)630 3465 -y Ft(-P)384 b Fu(List)31 b(curren)m(t)f(Readline)h(function)f(names)g -(and)g(bindings.)630 3623 y Ft(-v)384 b Fu(Displa)m(y)25 +(a)m(y)f(that)1110 1327 y(they)h(can)g(b)s(e)f(used)f(as)i(an)g +(argumen)m(t)g(to)g(a)g(subsequen)m(t)f Ft(bind)f Fu(command)1110 +1437 y(or)e(in)g(a)h(Readline)g(initialization)i(\014le.)630 +1597 y Ft(-P)384 b Fu(List)31 b(curren)m(t)f(Readline)h(function)f +(names)g(and)g(bindings.)630 1757 y Ft(-v)384 b Fu(Displa)m(y)25 b(Readline)f(v)-5 b(ariable)25 b(names)f(and)f(v)-5 b(alues)24 -b(in)g(suc)m(h)f(a)i(w)m(a)m(y)f(that)h(they)1110 3733 -y(can)31 b(b)s(e)e(used)h(as)h(input)e(or)h(in)g(a)h(Readline)g -(initialization)j(\014le.)630 3891 y Ft(-V)384 b Fu(List)31 +b(in)g(suc)m(h)f(a)i(w)m(a)m(y)f(that)h(they)1110 1867 +y(can)33 b(b)s(e)e(used)h(as)g(an)g(argumen)m(t)h(to)g(a)f(subsequen)m +(t)g Ft(bind)f Fu(command)h(or)g(in)1110 1976 y(a)f(Readline)g +(initialization)i(\014le.)630 2137 y Ft(-V)384 b Fu(List)31 b(curren)m(t)f(Readline)h(v)-5 b(ariable)31 b(names)f(and)g(v)-5 -b(alues.)630 4049 y Ft(-s)384 b Fu(Displa)m(y)39 b(Readline)f(k)m(ey)g +b(alues.)630 2297 y Ft(-s)384 b Fu(Displa)m(y)39 b(Readline)f(k)m(ey)g (sequences)f(b)s(ound)f(to)i(macros)g(and)f(the)g(strings)1110 -4159 y(they)d(output)f(in)h(suc)m(h)f(a)h(w)m(a)m(y)h(that)f(they)g -(can)g(b)s(e)f(used)g(as)h(input)e(or)i(in)g(a)1110 4268 -y(Readline)d(initialization)i(\014le.)630 4427 y Ft(-S)384 +2406 y(they)e(output)f(in)g(suc)m(h)g(a)h(w)m(a)m(y)g(that)g(they)f +(can)h(b)s(e)f(used)g(as)g(an)g(argumen)m(t)1110 2516 +y(to)d(a)g(subsequen)m(t)f Ft(bind)f Fu(command)h(or)g(in)g(a)h +(Readline)g(initialization)i(\014le.)630 2676 y Ft(-S)384 b Fu(Displa)m(y)39 b(Readline)f(k)m(ey)g(sequences)f(b)s(ound)f(to)i -(macros)g(and)f(the)g(strings)1110 4536 y(they)31 b(output.)630 -4695 y Ft(-f)f Fj(filename)1110 4804 y Fu(Read)h(k)m(ey)g(bindings)e -(from)h Fr(\014lename)p Fu(.)630 4963 y Ft(-q)g Fj(function)1110 -5072 y Fu(Query)g(ab)s(out)g(whic)m(h)g(k)m(eys)h(in)m(v)m(ok)m(e)h -(the)f(named)f Fr(function)p Fu(.)630 5230 y Ft(-u)g -Fj(function)1110 5340 y Fu(Un)m(bind)f(all)i(k)m(eys)g(b)s(ound)e(to)i -(the)f(named)g Fr(function)p Fu(.)p eop end -%%Page: 57 63 -TeXDict begin 57 62 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(57)630 299 y Ft(-r)30 -b Fj(keyseq)66 b Fu(Remo)m(v)m(e)32 b(an)m(y)f(curren)m(t)f(binding)f -(for)h Fr(k)m(eyseq)p Fu(.)630 452 y Ft(-x)g Fj(keyseq:shell-command) -1110 562 y Fu(Cause)35 b Fr(shell-command)k Fu(to)d(b)s(e)f(executed)h +(macros)g(and)f(the)g(strings)1110 2786 y(they)31 b(output.)630 +2946 y Ft(-f)f Fj(filename)1110 3055 y Fu(Read)h(k)m(ey)g(bindings)e +(from)h Fr(\014lename)p Fu(.)630 3216 y Ft(-q)g Fj(function)1110 +3325 y Fu(Query)g(ab)s(out)g(whic)m(h)g(k)m(eys)h(in)m(v)m(ok)m(e)h +(the)f(named)f Fr(function)p Fu(.)630 3485 y Ft(-u)g +Fj(function)1110 3595 y Fu(Un)m(bind)f(all)i(k)m(eys)g(b)s(ound)e(to)i +(the)f(named)g Fr(function)p Fu(.)630 3755 y Ft(-r)g +Fj(keyseq)66 b Fu(Remo)m(v)m(e)32 b(an)m(y)f(curren)m(t)f(binding)f +(for)h Fr(k)m(eyseq)p Fu(.)630 3915 y Ft(-x)g Fj(keyseq:shell-command) +1110 4025 y Fu(Cause)35 b Fr(shell-command)k Fu(to)d(b)s(e)f(executed)h (whenev)m(er)f Fr(k)m(eyseq)j Fu(is)d(en)m(tered.)1110 -671 y(When)46 b Fr(shell-command)k Fu(is)c(executed,)51 -b(the)46 b(shell)g(sets)g(the)g Ft(READLINE_)1110 781 -y(LINE)37 b Fu(v)-5 b(ariable)38 b(to)g(the)g(con)m(ten)m(ts)i(of)e -(the)g(Readline)g(line)g(bu\013er)f(and)g(the)1110 891 -y Ft(READLINE_POINT)d Fu(and)j Ft(READLINE_MARK)d Fu(v)-5 -b(ariables)39 b(to)f(the)g(curren)m(t)g(lo-)1110 1000 -y(cation)46 b(of)f(the)g(insertion)g(p)s(oin)m(t)f(and)g(the)h(sa)m(v)m -(ed)h(insertion)f(p)s(oin)m(t)f(\(the)1110 1110 y Fr(mark)6 -b Fu(\),)38 b(resp)s(ectiv)m(ely)-8 b(.)62 b(The)36 b(shell)h(assigns)g -(an)m(y)g(n)m(umeric)g(argumen)m(t)g(the)1110 1219 y(user)43 -b(supplied)g(to)h(the)g Ft(READLINE_ARGUMENT)39 b Fu(v)-5 -b(ariable.)82 b(If)44 b(there)g(w)m(as)1110 1329 y(no)39 -b(argumen)m(t,)j(that)d(v)-5 b(ariable)40 b(is)f(not)g(set.)68 -b(If)38 b(the)h(executed)h(command)1110 1439 y(c)m(hanges)e(the)e(v)-5 -b(alue)37 b(of)g(an)m(y)g(of)g Ft(READLINE_LINE)p Fu(,)d -Ft(READLINE_POINT)p Fu(,)h(or)1110 1548 y Ft(READLINE_MARK)p -Fu(,)i(those)i(new)f(v)-5 b(alues)38 b(will)h(b)s(e)f(re\015ected)h(in) -f(the)g(editing)1110 1658 y(state.)630 1811 y Ft(-X)384 -b Fu(List)27 b(all)i(k)m(ey)f(sequences)f(b)s(ound)e(to)j(shell)g -(commands)e(and)h(the)g(asso)s(ciated)1110 1921 y(commands)j(in)g(a)h -(format)g(that)f(can)h(b)s(e)f(reused)f(as)i(input.)630 -2074 y(The)26 b(return)f(status)i(is)f(zero)i(unless)d(an)i(in)m(v)-5 -b(alid)27 b(option)g(is)f(supplied)f(or)i(an)f(error)g(o)s(ccurs.)150 -2228 y Ft(builtin)870 2359 y(builtin)46 b([)p Fj(shell-builtin)e -Ft([)p Fj(args)p Ft(]])630 2491 y Fu(Run)35 b(a)i(shell)f(builtin,)i -(passing)e(it)h Fr(args)p Fu(,)h(and)e(return)f(its)i(exit)g(status.)59 -b(This)35 b(is)i(useful)630 2600 y(when)29 b(de\014ning)h(a)g(shell)h -(function)f(with)g(the)g(same)h(name)f(as)h(a)g(shell)f(builtin,)g -(retaining)630 2710 y(the)k(functionalit)m(y)h(of)f(the)f(builtin)g -(within)g(the)h(function.)50 b(The)33 b(return)g(status)h(is)f(non-)630 -2819 y(zero)e(if)g Fr(shell-builtin)f Fu(is)g(not)h(a)g(shell)f -(builtin)g(command.)150 2973 y Ft(caller)870 3104 y(caller)46 -b([)p Fj(expr)p Ft(])630 3236 y Fu(Returns)34 b(the)g(con)m(text)j(of)e +4134 y(The)c(separator)i(b)s(et)m(w)m(een)g Fr(k)m(eyseq)i +Fu(and)c Fr(shell-command)36 b Fu(is)c(either)h(white-)1110 +4244 y(space)26 b(or)g(a)g(colon)h(optionally)g(follo)m(w)m(ed)g(b)m(y) +e(whitespace.)40 b(If)25 b(the)h(separator)1110 4354 +y(is)40 b(whitespace,)i Fr(shell-command)i Fu(m)m(ust)39 +b(b)s(e)g(enclosed)h(in)f(double)g(quotes)1110 4463 y(and)30 +b(Readline)g(expands)g(an)m(y)g(of)h(its)f(sp)s(ecial)h(bac)m +(kslash-escap)s(es)h(in)d Fr(shell-)1110 4573 y(command)47 +b Fu(b)s(efore)c(sa)m(ving)i(it.)80 b(If)43 b(the)h(separator)g(is)g(a) +g(colon,)k(an)m(y)c(en-)1110 4682 y(closing)35 b(double)e(quotes)g(are) +h(optional,)i(and)d(Readline)h(do)s(es)f(not)h(expand)1110 +4792 y(the)40 b(command)g(string)f(b)s(efore)h(sa)m(ving)g(it.)70 +b(Since)40 b(the)g(en)m(tire)g(k)m(ey)h(bind-)1110 4902 +y(ing)g(expression)g(m)m(ust)g(b)s(e)f(a)h(single)h(argumen)m(t,)i(it)e +(should)e(b)s(e)g(enclosed)1110 5011 y(in)k(quotes.)85 +b(When)44 b Fr(shell-command)49 b Fu(is)44 b(executed,)50 +b(the)45 b(shell)g(sets)g(the)1110 5121 y Ft(READLINE_LINE)25 +b Fu(v)-5 b(ariable)29 b(to)h(the)f(con)m(ten)m(ts)h(of)f(the)g +(Readline)g(line)g(bu\013er)1110 5230 y(and)e(the)h Ft(READLINE_POINT)c +Fu(and)j Ft(READLINE_MARK)d Fu(v)-5 b(ariables)29 b(to)f(the)g(cur-) +1110 5340 y(ren)m(t)38 b(lo)s(cation)h(of)f(the)g(insertion)f(p)s(oin)m +(t)h(and)f(the)h(sa)m(v)m(ed)g(insertion)g(p)s(oin)m(t)p +eop end +%%Page: 59 65 +TeXDict begin 59 64 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(59)1110 299 y(\(the)34 +b Fr(mark)6 b Fu(\),)34 b(resp)s(ectiv)m(ely)-8 b(.)51 +b(The)33 b(shell)g(assigns)h(an)m(y)f(n)m(umeric)g(argumen)m(t)1110 +408 y(the)28 b(user)f(supplied)f(to)j(the)f Ft(READLINE_ARGUMENT)23 +b Fu(v)-5 b(ariable.)40 b(If)28 b(there)g(w)m(as)1110 +518 y(no)39 b(argumen)m(t,)j(that)d(v)-5 b(ariable)40 +b(is)f(not)g(set.)68 b(If)38 b(the)h(executed)h(command)1110 +628 y(c)m(hanges)e(the)e(v)-5 b(alue)37 b(of)g(an)m(y)g(of)g +Ft(READLINE_LINE)p Fu(,)d Ft(READLINE_POINT)p Fu(,)h(or)1110 +737 y Ft(READLINE_MARK)p Fu(,)i(those)i(new)f(v)-5 b(alues)38 +b(will)h(b)s(e)f(re\015ected)h(in)f(the)g(editing)1110 +847 y(state.)630 1014 y Ft(-X)384 b Fu(List)27 b(all)i(k)m(ey)f +(sequences)f(b)s(ound)e(to)j(shell)g(commands)e(and)h(the)g(asso)s +(ciated)1110 1124 y(commands)42 b(in)f(a)i(format)f(that)h(can)f(b)s(e) +g(reused)f(as)h(an)g(argumen)m(t)h(to)g(a)1110 1233 y(subsequen)m(t)30 +b Ft(bind)f Fu(command.)630 1401 y(The)d(return)f(status)i(is)f(zero)i +(unless)d(an)i(in)m(v)-5 b(alid)27 b(option)g(is)f(supplied)f(or)i(an)f +(error)g(o)s(ccurs.)150 1568 y Ft(builtin)870 1706 y(builtin)46 +b([)p Fj(shell-builtin)e Ft([)p Fj(args)p Ft(]])630 1845 +y Fu(Run)35 b(a)i(shell)f(builtin,)i(passing)e(it)h Fr(args)p +Fu(,)h(and)e(return)f(its)i(exit)g(status.)59 b(This)35 +b(is)i(useful)630 1954 y(when)29 b(de\014ning)h(a)g(shell)h(function)f +(with)g(the)g(same)h(name)f(as)h(a)g(shell)f(builtin,)g(retaining)630 +2064 y(the)k(functionalit)m(y)h(of)f(the)f(builtin)g(within)g(the)h +(function.)50 b(The)33 b(return)g(status)h(is)f(non-)630 +2173 y(zero)e(if)g Fr(shell-builtin)f Fu(is)g(not)h(a)g(shell)f +(builtin)g(command.)150 2341 y Ft(caller)870 2479 y(caller)46 +b([)p Fj(expr)p Ft(])630 2618 y Fu(Returns)34 b(the)g(con)m(text)j(of)e (an)m(y)g(activ)m(e)i(subroutine)c(call)j(\(a)f(shell)g(function)f(or)h -(a)g(script)630 3345 y(executed)c(with)f(the)h Ft(.)f -Fu(or)g Ft(source)f Fu(builtins\).)630 3477 y(Without)45 +(a)g(script)630 2727 y(executed)c(with)f(the)h Ft(.)f +Fu(or)g Ft(source)f Fu(builtins\).)630 2866 y(Without)45 b Fr(expr)p Fu(,)j Ft(caller)43 b Fu(displa)m(ys)i(the)f(line)h(n)m(um) -m(b)s(er)f(and)g(source)g(\014lename)h(of)g(the)630 3587 +m(b)s(er)f(and)g(source)g(\014lename)h(of)g(the)630 2975 y(curren)m(t)35 b(subroutine)g(call.)58 b(If)35 b(a)h(non-negativ)m(e)i (in)m(teger)f(is)f(supplied)e(as)i Fr(expr)p Fu(,)h Ft(caller)630 -3696 y Fu(displa)m(ys)k(the)f(line)h(n)m(um)m(b)s(er,)h(subroutine)d +3085 y Fu(displa)m(ys)k(the)f(line)h(n)m(um)m(b)s(er,)h(subroutine)d (name,)44 b(and)c(source)g(\014le)h(corresp)s(onding)e(to)630 -3806 y(that)c(p)s(osition)g(in)f(the)h(curren)m(t)f(execution)i(call)g +3194 y(that)c(p)s(osition)g(in)f(the)h(curren)m(t)f(execution)i(call)g (stac)m(k.)54 b(This)34 b(extra)h(information)g(ma)m(y)630 -3915 y(b)s(e)30 b(used,)g(for)g(example,)h(to)g(prin)m(t)f(a)h(stac)m +3304 y(b)s(e)30 b(used,)g(for)g(example,)h(to)g(prin)m(t)f(a)h(stac)m (k)h(trace.)42 b(The)29 b(curren)m(t)i(frame)f(is)g(frame)h(0.)630 -4047 y(The)d(return)g(v)-5 b(alue)29 b(is)g(0)g(unless)f(the)h(shell)g +3442 y(The)d(return)g(v)-5 b(alue)29 b(is)g(0)g(unless)f(the)h(shell)g (is)g(not)g(executing)h(a)f(subroutine)e(call)j(or)f -Fr(expr)630 4156 y Fu(do)s(es)h(not)h(corresp)s(ond)e(to)i(a)g(v)-5 +Fr(expr)630 3552 y Fu(do)s(es)h(not)h(corresp)s(ond)e(to)i(a)g(v)-5 b(alid)30 b(p)s(osition)h(in)f(the)g(call)i(stac)m(k.)150 -4310 y Ft(command)870 4441 y(command)46 b([-pVv])g Fj(command)g -Ft([)p Fj(arguments)f Ft(...)o(])630 4573 y Fu(Runs)32 +3719 y Ft(command)870 3858 y(command)46 b([-pVv])g Fj(command)g +Ft([)p Fj(arguments)f Ft(...)o(])630 3996 y Fu(Runs)32 b Fr(command)k Fu(with)d Fr(argumen)m(ts)k Fu(ignoring)c(an)m(y)g -(shell)h(function)e(named)h Fr(command)p Fu(.)630 4682 +(shell)h(function)e(named)h Fr(command)p Fu(.)630 4106 y(Only)39 b(shell)i(builtin)e(commands)h(or)g(commands)f(found)g(b)m(y) -h(searc)m(hing)h(the)f Ft(PATH)f Fu(are)630 4792 y(executed.)59 +h(searc)m(hing)h(the)f Ft(PATH)f Fu(are)630 4215 y(executed.)59 b(If)36 b(there)h(is)f(a)h(shell)f(function)g(named)g Ft(ls)p Fu(,)h(running)e(`)p Ft(command)29 b(ls)p Fu(')35 -b(within)630 4902 y(the)c(function)f(will)h(execute)g(the)g(external)g +b(within)630 4325 y(the)c(function)f(will)h(execute)g(the)g(external)g (command)g Ft(ls)f Fu(instead)g(of)h(calling)h(the)f(func-)630 -5011 y(tion)36 b(recursiv)m(ely)-8 b(.)56 b(The)34 b +4434 y(tion)36 b(recursiv)m(ely)-8 b(.)56 b(The)34 b Ft(-p)h Fu(option)g(means)g(to)h(use)f(a)g(default)h(v)-5 -b(alue)35 b(for)g Ft(PATH)f Fu(that)i(is)630 5121 y(guaran)m(teed)f(to) +b(alue)35 b(for)g Ft(PATH)f Fu(that)i(is)630 4544 y(guaran)m(teed)f(to) f(\014nd)e(all)j(of)f(the)g(standard)f(utilities.)52 -b(The)33 b(return)g(status)h(in)f(this)h(case)630 5230 +b(The)33 b(return)g(status)h(in)f(this)h(case)630 4654 y(is)29 b(127)g(if)g Fr(command)j Fu(cannot)d(b)s(e)e(found)h(or)g(an)g (error)h(o)s(ccurred,)f(and)g(the)h(exit)g(status)g(of)630 -5340 y Fr(command)34 b Fu(otherwise.)p eop end -%%Page: 58 64 -TeXDict begin 58 63 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(58)630 299 y(If)32 -b(either)h(the)f Ft(-V)g Fu(or)g Ft(-v)g Fu(option)h(is)f(supplied,)g -(a)h(description)f(of)h Fr(command)j Fu(is)c(prin)m(ted.)630 -408 y(The)f Ft(-v)h Fu(option)g(causes)g(a)g(single)h(w)m(ord)f -(indicating)g(the)g(command)g(or)g(\014le)g(name)g(used)630 -518 y(to)40 b(in)m(v)m(ok)m(e)h Fr(command)h Fu(to)e(b)s(e)e(displa)m -(y)m(ed;)44 b(the)39 b Ft(-V)f Fu(option)i(pro)s(duces)d(a)j(more)f(v)m -(erb)s(ose)630 628 y(description.)61 b(In)36 b(this)h(case,)j(the)e -(return)e(status)h(is)g(zero)h(if)f Fr(command)k Fu(is)c(found,)h(and) -630 737 y(non-zero)31 b(if)f(not.)150 897 y Ft(declare)870 -1031 y(declare)46 b([-aAfFgiIlnrtux])d([-p])k([)p Fj(name)p -Ft([=)p Fj(value)p Ft(])d(...)o(])630 1166 y Fu(Declare)29 +4763 y Fr(command)34 b Fu(otherwise.)630 4902 y(If)e(either)h(the)f +Ft(-V)g Fu(or)g Ft(-v)g Fu(option)h(is)f(supplied,)g(a)h(description)f +(of)h Fr(command)j Fu(is)c(prin)m(ted.)630 5011 y(The)f +Ft(-v)h Fu(option)g(causes)g(a)g(single)h(w)m(ord)f(indicating)g(the)g +(command)g(or)g(\014le)g(name)g(used)630 5121 y(to)40 +b(in)m(v)m(ok)m(e)h Fr(command)h Fu(to)e(b)s(e)e(displa)m(y)m(ed;)44 +b(the)39 b Ft(-V)f Fu(option)i(pro)s(duces)d(a)j(more)f(v)m(erb)s(ose) +630 5230 y(description.)61 b(In)36 b(this)h(case,)j(the)e(return)e +(status)h(is)g(zero)h(if)f Fr(command)k Fu(is)c(found,)h(and)630 +5340 y(non-zero)31 b(if)f(not.)p eop end +%%Page: 60 66 +TeXDict begin 60 65 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(60)150 299 y Ft(declare)870 +428 y(declare)46 b([-aAfFgiIlnrtux])d([-p])k([)p Fj(name)p +Ft([=)p Fj(value)p Ft(])d(...)o(])630 558 y Fu(Declare)29 b(v)-5 b(ariables)28 b(and)e(giv)m(e)j(them)e(attributes.)40 b(If)27 b(no)g Fr(name)5 b Fu(s)27 b(are)h(giv)m(en,)h(then)e(displa)m -(y)630 1275 y(the)k(v)-5 b(alues)30 b(of)h(v)-5 b(ariables)31 -b(instead.)630 1410 y(The)k Ft(-p)f Fu(option)i(will)g(displa)m(y)f -(the)h(attributes)g(and)e(v)-5 b(alues)36 b(of)f(eac)m(h)i -Fr(name)p Fu(.)55 b(When)36 b Ft(-p)630 1519 y Fu(is)i(used)g(with)g +(y)630 667 y(the)k(v)-5 b(alues)30 b(of)h(v)-5 b(ariables)31 +b(instead.)630 797 y(The)k Ft(-p)f Fu(option)i(will)g(displa)m(y)f(the) +h(attributes)g(and)e(v)-5 b(alues)36 b(of)f(eac)m(h)i +Fr(name)p Fu(.)55 b(When)36 b Ft(-p)630 907 y Fu(is)i(used)g(with)g Fr(name)43 b Fu(argumen)m(ts,)e(additional)e(options,)i(other)d(than)g -Ft(-f)g Fu(and)g Ft(-F)p Fu(,)i(are)630 1629 y(ignored.)630 -1763 y(When)g Ft(-p)g Fu(is)g(supplied)f(without)i Fr(name)k +Ft(-f)g Fu(and)g Ft(-F)p Fu(,)i(are)630 1016 y(ignored.)630 +1146 y(When)g Ft(-p)g Fu(is)g(supplied)f(without)i Fr(name)k Fu(argumen)m(ts,)f Ft(declare)38 b Fu(will)j(displa)m(y)f(the)h(at-)630 -1873 y(tributes)31 b(and)f(v)-5 b(alues)31 b(of)g(all)h(v)-5 +1255 y(tributes)31 b(and)f(v)-5 b(alues)31 b(of)g(all)h(v)-5 b(ariables)31 b(ha)m(ving)h(the)f(attributes)g(sp)s(eci\014ed)f(b)m(y)h -(the)g(addi-)630 1983 y(tional)k(options.)52 b(If)34 +(the)g(addi-)630 1365 y(tional)k(options.)52 b(If)34 b(no)g(other)g(options)g(are)g(supplied)f(with)h Ft(-p)p -Fu(,)g Ft(declare)e Fu(will)j(displa)m(y)630 2092 y(the)e(attributes)h +Fu(,)g Ft(declare)e Fu(will)j(displa)m(y)630 1474 y(the)e(attributes)h (and)e(v)-5 b(alues)33 b(of)g(all)h(shell)f(v)-5 b(ariables.)50 b(The)32 b Ft(-f)g Fu(option)i(will)f(restrict)h(the)630 -2202 y(displa)m(y)d(to)g(shell)f(functions.)630 2336 +1584 y(displa)m(y)d(to)g(shell)f(functions.)630 1714 y(The)41 b Ft(-F)f Fu(option)i(inhibits)e(the)i(displa)m(y)f(of)g (function)g(de\014nitions;)47 b(only)41 b(the)g(function)630 -2446 y(name)30 b(and)f(attributes)i(are)f(prin)m(ted.)40 +1823 y(name)30 b(and)f(attributes)i(are)f(prin)m(ted.)40 b(If)30 b(the)g Ft(extdebug)e Fu(shell)i(option)g(is)g(enabled)g(using) -630 2555 y Ft(shopt)24 b Fu(\(see)i(Section)g(4.3.2)i([The)d(Shopt)f -(Builtin],)k(page)e(71\),)i(the)d(source)h(\014le)f(name)h(and)630 -2665 y(line)31 b(n)m(um)m(b)s(er)e(where)h(eac)m(h)h +630 1933 y Ft(shopt)24 b Fu(\(see)i(Section)g(4.3.2)i([The)d(Shopt)f +(Builtin],)k(page)e(73\),)i(the)d(source)h(\014le)f(name)h(and)630 +2042 y(line)31 b(n)m(um)m(b)s(er)e(where)h(eac)m(h)h Fr(name)36 b Fu(is)30 b(de\014ned)f(are)i(displa)m(y)m(ed)g(as)g(w)m -(ell.)41 b Ft(-F)30 b Fu(implies)h Ft(-f)p Fu(.)630 2800 +(ell.)41 b Ft(-F)30 b Fu(implies)h Ft(-f)p Fu(.)630 2172 y(The)36 b Ft(-g)g Fu(option)h(forces)g(v)-5 b(ariables)37 b(to)g(b)s(e)f(created)i(or)e(mo)s(di\014ed)g(at)h(the)g(global)h(scop) -s(e,)630 2909 y(ev)m(en)g(when)e Ft(declare)f Fu(is)j(executed)g(in)f +s(e,)630 2281 y(ev)m(en)g(when)e Ft(declare)f Fu(is)j(executed)g(in)f (a)g(shell)h(function.)61 b(It)37 b(is)g(ignored)h(in)f(all)h(other)630 -3019 y(cases.)630 3153 y(The)50 b Ft(-I)h Fu(option)g(causes)h(lo)s +2391 y(cases.)630 2521 y(The)50 b Ft(-I)h Fu(option)g(causes)h(lo)s (cal)g(v)-5 b(ariables)51 b(to)h(inherit)f(the)g(attributes)g(\(except) -i(the)630 3263 y Ft(nameref)43 b Fu(attribute\))j(and)f(v)-5 +i(the)630 2630 y Ft(nameref)43 b Fu(attribute\))j(and)f(v)-5 b(alue)46 b(of)f(an)m(y)h(existing)g(v)-5 b(ariable)46 -b(with)f(the)g(same)h Fr(name)630 3372 y Fu(at)40 b(a)f(surrounding)d +b(with)f(the)g(same)h Fr(name)630 2740 y Fu(at)40 b(a)f(surrounding)d (scop)s(e.)66 b(If)39 b(there)g(is)g(no)f(existing)i(v)-5 b(ariable,)42 b(the)d(lo)s(cal)h(v)-5 b(ariable)40 b(is)630 -3482 y(initially)32 b(unset.)630 3616 y(The)27 b(follo)m(wing)h +2849 y(initially)32 b(unset.)630 2979 y(The)27 b(follo)m(wing)h (options)g(can)f(b)s(e)g(used)f(to)i(restrict)g(output)e(to)i(v)-5 -b(ariables)28 b(with)f(the)g(sp)s(ec-)630 3726 y(i\014ed)j(attributes)h +b(ariables)28 b(with)f(the)g(sp)s(ec-)630 3088 y(i\014ed)j(attributes)h (or)f(to)h(giv)m(e)h(v)-5 b(ariables)31 b(attributes:)630 -3885 y Ft(-a)384 b Fu(Eac)m(h)36 b Fr(name)k Fu(is)34 +3238 y Ft(-a)384 b Fu(Eac)m(h)36 b Fr(name)k Fu(is)34 b(an)h(indexed)g(arra)m(y)g(v)-5 b(ariable)36 b(\(see)f(Section)h(6.7)g -([Arra)m(ys],)1110 3995 y(page)31 b(100\).)630 4154 y +([Arra)m(ys],)1110 3347 y(page)31 b(103\).)630 3497 y Ft(-A)384 b Fu(Eac)m(h)24 b Fr(name)k Fu(is)23 b(an)g(asso)s(ciativ)m (e)j(arra)m(y)e(v)-5 b(ariable)24 b(\(see)g(Section)g(6.7)g([Arra)m -(ys],)1110 4264 y(page)31 b(100\).)630 4423 y Ft(-f)384 -b Fu(Use)31 b(function)f(names)g(only)-8 b(.)630 4583 +(ys],)1110 3606 y(page)31 b(103\).)630 3756 y Ft(-f)384 +b Fu(Use)31 b(function)f(names)g(only)-8 b(.)630 3905 y Ft(-i)384 b Fu(The)36 b(v)-5 b(ariable)37 b(is)f(to)h(b)s(e)f (treated)h(as)g(an)f(in)m(teger;)41 b(arithmetic)c(ev)-5 -b(aluation)1110 4692 y(\(see)29 b(Section)f(6.5)h([Shell)f -(Arithmetic],)i(page)e(98\))h(is)f(p)s(erformed)e(when)h(the)1110 -4802 y(v)-5 b(ariable)31 b(is)g(assigned)f(a)h(v)-5 b(alue.)630 -4961 y Ft(-l)384 b Fu(When)26 b(the)g(v)-5 b(ariable)27 -b(is)f(assigned)g(a)g(v)-5 b(alue,)28 b(all)f(upp)s(er-case)e(c)m -(haracters)j(are)1110 5071 y(con)m(v)m(erted)k(to)f(lo)m(w)m(er-case.) -43 b(The)30 b(upp)s(er-case)g(attribute)h(is)g(disabled.)630 -5230 y Ft(-n)384 b Fu(Giv)m(e)28 b(eac)m(h)g Fr(name)k +b(aluation)1110 4015 y(\(see)41 b(Section)f(6.5)h([Shell)e +(Arithmetic],)44 b(page)c(101\))h(is)f(p)s(erformed)e(when)1110 +4125 y(the)31 b(v)-5 b(ariable)31 b(is)f(assigned)h(a)f(v)-5 +b(alue.)630 4274 y Ft(-l)384 b Fu(When)26 b(the)g(v)-5 +b(ariable)27 b(is)f(assigned)g(a)g(v)-5 b(alue,)28 b(all)f(upp)s +(er-case)e(c)m(haracters)j(are)1110 4384 y(con)m(v)m(erted)k(to)f(lo)m +(w)m(er-case.)43 b(The)30 b(upp)s(er-case)g(attribute)h(is)g(disabled.) +630 4533 y Ft(-n)384 b Fu(Giv)m(e)28 b(eac)m(h)g Fr(name)k Fu(the)27 b Ft(nameref)d Fu(attribute,)29 b(making)e(it)g(a)g(name)f -(reference)1110 5340 y(to)32 b(another)g(v)-5 b(ariable.)46 +(reference)1110 4643 y(to)32 b(another)g(v)-5 b(ariable.)46 b(That)31 b(other)h(v)-5 b(ariable)33 b(is)f(de\014ned)e(b)m(y)i(the)g -(v)-5 b(alue)32 b(of)p eop end -%%Page: 59 65 -TeXDict begin 59 64 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(59)1110 299 y -Fr(name)p Fu(.)54 b(All)35 b(references,)h(assignmen)m(ts,)h(and)d -(attribute)h(mo)s(di\014cations)g(to)1110 408 y Fr(name)p -Fu(,)27 b(except)f(for)f(those)h(using)f(or)g(c)m(hanging)h(the)f -Ft(-n)g Fu(attribute)h(itself,)i(are)1110 518 y(p)s(erformed)22 -b(on)h(the)g(v)-5 b(ariable)25 b(referenced)e(b)m(y)g -Fr(name)5 b Fu('s)23 b(v)-5 b(alue.)39 b(The)23 b(nameref)1110 -628 y(attribute)31 b(cannot)g(b)s(e)f(applied)g(to)h(arra)m(y)g(v)-5 -b(ariables.)630 785 y Ft(-r)384 b Fu(Mak)m(e)25 b Fr(name)5 -b Fu(s)23 b(readonly)-8 b(.)39 b(These)24 b(names)f(cannot)h(then)f(b)s -(e)g(assigned)h(v)-5 b(alues)1110 894 y(b)m(y)30 b(subsequen)m(t)g -(assignmen)m(t)h(statemen)m(ts)h(or)f(unset.)630 1052 -y Ft(-t)384 b Fu(Giv)m(e)33 b(eac)m(h)h Fr(name)j Fu(the)32 -b Ft(trace)f Fu(attribute.)46 b(T)-8 b(raced)32 b(functions)g(inherit)g -(the)1110 1161 y Ft(DEBUG)26 b Fu(and)h Ft(RETURN)f Fu(traps)h(from)g -(the)h(calling)h(shell.)40 b(The)27 b(trace)i(attribute)1110 -1271 y(has)h(no)g(sp)s(ecial)h(meaning)g(for)f(v)-5 b(ariables.)630 -1428 y Ft(-u)384 b Fu(When)28 b(the)h(v)-5 b(ariable)29 +(v)-5 b(alue)32 b(of)1110 4752 y Fr(name)p Fu(.)54 b(All)35 +b(references,)h(assignmen)m(ts,)h(and)d(attribute)h(mo)s(di\014cations) +g(to)1110 4862 y Fr(name)p Fu(,)27 b(except)f(for)f(those)h(using)f(or) +g(c)m(hanging)h(the)f Ft(-n)g Fu(attribute)h(itself,)i(are)1110 +4971 y(p)s(erformed)22 b(on)h(the)g(v)-5 b(ariable)25 +b(referenced)e(b)m(y)g Fr(name)5 b Fu('s)23 b(v)-5 b(alue.)39 +b(The)23 b(nameref)1110 5081 y(attribute)31 b(cannot)g(b)s(e)f(applied) +g(to)h(arra)m(y)g(v)-5 b(ariables.)630 5230 y Ft(-r)384 +b Fu(Mak)m(e)25 b Fr(name)5 b Fu(s)23 b(readonly)-8 b(.)39 +b(These)24 b(names)f(cannot)h(then)f(b)s(e)g(assigned)h(v)-5 +b(alues)1110 5340 y(b)m(y)30 b(subsequen)m(t)g(assignmen)m(t)h +(statemen)m(ts)h(or)f(unset.)p eop end +%%Page: 61 67 +TeXDict begin 61 66 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(61)630 299 y Ft(-t)384 +b Fu(Giv)m(e)33 b(eac)m(h)h Fr(name)j Fu(the)32 b Ft(trace)f +Fu(attribute.)46 b(T)-8 b(raced)32 b(functions)g(inherit)g(the)1110 +408 y Ft(DEBUG)26 b Fu(and)h Ft(RETURN)f Fu(traps)h(from)g(the)h +(calling)h(shell.)40 b(The)27 b(trace)i(attribute)1110 +518 y(has)h(no)g(sp)s(ecial)h(meaning)g(for)f(v)-5 b(ariables.)630 +676 y Ft(-u)384 b Fu(When)28 b(the)h(v)-5 b(ariable)29 b(is)f(assigned)h(a)f(v)-5 b(alue,)30 b(all)f(lo)m(w)m(er-case)i(c)m -(haracters)f(are)1110 1538 y(con)m(v)m(erted)i(to)f(upp)s(er-case.)40 +(haracters)f(are)1110 786 y(con)m(v)m(erted)i(to)f(upp)s(er-case.)40 b(The)30 b(lo)m(w)m(er-case)j(attribute)e(is)g(disabled.)630 -1695 y Ft(-x)384 b Fu(Mark)30 b(eac)m(h)h Fr(name)k Fu(for)29 +944 y Ft(-x)384 b Fu(Mark)30 b(eac)m(h)h Fr(name)k Fu(for)29 b(exp)s(ort)h(to)g(subsequen)m(t)f(commands)h(via)g(the)g(en)m(vi-)1110 -1805 y(ronmen)m(t.)630 1962 y(Using)e(`)p Ft(+)p Fu(')h(instead)f(of)g +1054 y(ronmen)m(t.)630 1212 y(Using)e(`)p Ft(+)p Fu(')h(instead)f(of)g (`)p Ft(-)p Fu(')g(turns)f(o\013)i(the)f(attribute)h(instead,)g(with)f -(the)g(exceptions)h(that)630 2071 y(`)p Ft(+a)p Fu(')23 +(the)g(exceptions)h(that)630 1322 y(`)p Ft(+a)p Fu(')23 b(and)f(`)p Ft(+A)p Fu(')h(ma)m(y)h(not)f(b)s(e)f(used)g(to)i(destro)m (y)g(arra)m(y)f(v)-5 b(ariables)24 b(and)e(`)p Ft(+r)p -Fu(')h(will)g(not)g(remo)m(v)m(e)630 2181 y(the)36 b(readonly)h +Fu(')h(will)g(not)g(remo)m(v)m(e)630 1431 y(the)36 b(readonly)h (attribute.)59 b(When)36 b(used)f(in)h(a)h(function,)g -Ft(declare)d Fu(mak)m(es)j(eac)m(h)h Fr(name)630 2291 +Ft(declare)d Fu(mak)m(es)j(eac)m(h)h Fr(name)630 1541 y Fu(lo)s(cal,)e(as)d(with)h(the)f Ft(local)f Fu(command,)j(unless)d (the)i Ft(-g)f Fu(option)h(is)f(used.)49 b(If)33 b(a)h(v)-5 -b(ariable)630 2400 y(name)30 b(is)h(follo)m(w)m(ed)h(b)m(y)e(=)p +b(ariable)630 1650 y(name)30 b(is)h(follo)m(w)m(ed)h(b)m(y)e(=)p Fr(v)-5 b(alue)p Fu(,)31 b(the)f(v)-5 b(alue)31 b(of)g(the)f(v)-5 b(ariable)32 b(is)e(set)h(to)g Fr(v)-5 b(alue)p Fu(.)630 -2534 y(When)41 b(using)g Ft(-a)g Fu(or)h Ft(-A)e Fu(and)h(the)h(comp)s +1784 y(When)41 b(using)g Ft(-a)g Fu(or)h Ft(-A)e Fu(and)h(the)h(comp)s (ound)e(assignmen)m(t)i(syn)m(tax)g(to)g(create)h(arra)m(y)630 -2643 y(v)-5 b(ariables,)28 b(additional)f(attributes)g(do)f(not)h(tak)m +1894 y(v)-5 b(ariables,)28 b(additional)f(attributes)g(do)f(not)h(tak)m (e)h(e\013ect)g(un)m(til)e(subsequen)m(t)g(assignmen)m(ts.)630 -2777 y(The)35 b(return)f(status)i(is)g(zero)g(unless)f(an)g(in)m(v)-5 +2028 y(The)35 b(return)f(status)i(is)g(zero)g(unless)f(an)g(in)m(v)-5 b(alid)36 b(option)g(is)g(encoun)m(tered,)h(an)f(attempt)630 -2886 y(is)c(made)g(to)g(de\014ne)f(a)h(function)g(using)f(`)p +2138 y(is)c(made)g(to)g(de\014ne)f(a)h(function)g(using)f(`)p Ft(-f)f(foo=bar)p Fu(',)h(an)h(attempt)g(is)g(made)g(to)h(assign)630 -2996 y(a)42 b(v)-5 b(alue)43 b(to)g(a)f(readonly)g(v)-5 +2247 y(a)42 b(v)-5 b(alue)43 b(to)g(a)f(readonly)g(v)-5 b(ariable,)47 b(an)42 b(attempt)h(is)f(made)g(to)h(assign)f(a)h(v)-5 -b(alue)42 b(to)h(an)630 3105 y(arra)m(y)30 b(v)-5 b(ariable)30 +b(alue)42 b(to)h(an)630 2357 y(arra)m(y)30 b(v)-5 b(ariable)30 b(without)g(using)e(the)i(comp)s(ound)e(assignmen)m(t)i(syn)m(tax)g -(\(see)h(Section)f(6.7)630 3215 y([Arra)m(ys],)43 b(page)d(100\),)k +(\(see)h(Section)f(6.7)630 2466 y([Arra)m(ys],)43 b(page)d(103\),)k (one)c(of)g(the)g Fr(name)5 b Fu(s)40 b(is)f(not)h(a)g(v)-5 b(alid)40 b(shell)g(v)-5 b(ariable)41 b(name,)h(an)630 -3324 y(attempt)28 b(is)f(made)h(to)f(turn)f(o\013)i(readonly)f(status)g +2576 y(attempt)28 b(is)f(made)h(to)f(turn)f(o\013)i(readonly)f(status)g (for)g(a)h(readonly)f(v)-5 b(ariable,)29 b(an)e(attempt)630 -3434 y(is)h(made)h(to)g(turn)e(o\013)i(arra)m(y)f(status)h(for)f(an)g +2685 y(is)h(made)h(to)g(turn)e(o\013)i(arra)m(y)f(status)h(for)f(an)g (arra)m(y)h(v)-5 b(ariable,)30 b(or)e(an)g(attempt)i(is)e(made)g(to)630 -3544 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g -Ft(-f)p Fu(.)150 3701 y Ft(echo)870 3834 y(echo)47 b([-neE])f([)p -Fj(arg)g Ft(...])630 3968 y Fu(Output)31 b(the)i Fr(arg)8 +2795 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g +Ft(-f)p Fu(.)150 2953 y Ft(echo)870 3087 y(echo)47 b([-neE])f([)p +Fj(arg)g Ft(...])630 3221 y Fu(Output)31 b(the)i Fr(arg)8 b Fu(s,)33 b(separated)g(b)m(y)g(spaces,)g(terminated)g(with)f(a)h -(newline.)47 b(The)32 b(return)630 4077 y(status)f(is)f(0)h(unless)f(a) +(newline.)47 b(The)32 b(return)630 3331 y(status)f(is)f(0)h(unless)f(a) h(write)g(error)f(o)s(ccurs.)41 b(If)30 b Ft(-n)g Fu(is)h(sp)s -(eci\014ed,)f(the)h(trailing)g(newline)g(is)630 4187 +(eci\014ed,)f(the)h(trailing)g(newline)g(is)630 3440 y(suppressed.)38 b(If)29 b(the)h Ft(-e)f Fu(option)h(is)f(giv)m(en,)i (in)m(terpretation)g(of)e(the)h(follo)m(wing)h(bac)m(kslash-)630 -4296 y(escap)s(ed)43 b(c)m(haracters)h(is)e(enabled.)78 -b(The)42 b Ft(-E)g Fu(option)h(disables)g(the)g(in)m(terpretation)h(of) -630 4406 y(these)27 b(escap)s(e)g(c)m(haracters,)i(ev)m(en)e(on)g -(systems)f(where)g(they)h(are)g(in)m(terpreted)g(b)m(y)f(default.)630 -4516 y(The)32 b Ft(xpg_echo)f Fu(shell)i(option)g(ma)m(y)h(b)s(e)e -(used)g(to)h(dynamically)h(determine)f(whether)f(or)630 -4625 y(not)h Ft(echo)f Fu(expands)g(these)h(escap)s(e)h(c)m(haracters)g -(b)m(y)f(default.)48 b Ft(echo)32 b Fu(do)s(es)g(not)i(in)m(terpret)630 -4735 y Ft(--)c Fu(to)h(mean)f(the)h(end)f(of)g(options.)630 -4868 y Ft(echo)f Fu(in)m(terprets)i(the)f(follo)m(wing)i(escap)s(e)f -(sequences:)630 5026 y Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630 -5183 y Ft(\\b)384 b Fu(bac)m(kspace)630 5340 y Ft(\\c)g -Fu(suppress)28 b(further)h(output)p eop end -%%Page: 60 66 -TeXDict begin 60 65 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(60)630 299 y Ft(\\e)630 -408 y(\\E)384 b Fu(escap)s(e)630 556 y Ft(\\f)g Fu(form)30 -b(feed)630 703 y Ft(\\n)384 b Fu(new)30 b(line)630 851 -y Ft(\\r)384 b Fu(carriage)32 b(return)630 998 y Ft(\\t)384 -b Fu(horizon)m(tal)32 b(tab)630 1145 y Ft(\\v)384 b Fu(v)m(ertical)32 -b(tab)630 1293 y Ft(\\\\)384 b Fu(bac)m(kslash)630 1440 +3550 y(escap)s(ed)22 b(c)m(haracters)i(is)e(enabled.)38 +b(The)21 b Ft(-E)h Fu(option)g(disables)g(the)h(in)m(terpretation)g(of) +f(these)630 3660 y(escap)s(e)30 b(c)m(haracters,)i(ev)m(en)f(on)e +(systems)h(where)g(they)g(are)g(in)m(terpreted)g(b)m(y)g(default.)40 +b(The)630 3769 y Ft(xpg_echo)33 b Fu(shell)i(option)h(ma)m(y)f(b)s(e)g +(used)f(to)i(dynamically)g(determine)f(whether)g(or)g(not)630 +3879 y Ft(echo)j Fu(in)m(terprets)i(an)m(y)f(options)h(and)f(expands)f +(these)i(escap)s(e)g(c)m(haracters)g(b)m(y)f(default.)630 +3988 y Ft(echo)29 b Fu(do)s(es)h(not)h(in)m(terpret)g +Ft(--)e Fu(to)j(mean)e(the)h(end)e(of)i(options.)630 +4122 y Ft(echo)e Fu(in)m(terprets)i(the)f(follo)m(wing)i(escap)s(e)f +(sequences:)630 4281 y Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630 +4439 y Ft(\\b)384 b Fu(bac)m(kspace)630 4597 y Ft(\\c)g +Fu(suppress)28 b(further)h(output)630 4756 y Ft(\\e)630 +4865 y(\\E)384 b Fu(escap)s(e)630 5023 y Ft(\\f)g Fu(form)30 +b(feed)630 5182 y Ft(\\n)384 b Fu(new)30 b(line)630 5340 +y Ft(\\r)384 b Fu(carriage)32 b(return)p eop end +%%Page: 62 68 +TeXDict begin 62 67 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(62)630 299 y Ft(\\t)384 +b Fu(horizon)m(tal)32 b(tab)630 472 y Ft(\\v)384 b Fu(v)m(ertical)32 +b(tab)630 646 y Ft(\\\\)384 b Fu(bac)m(kslash)630 819 y Ft(\\0)p Fj(nnn)240 b Fu(the)32 b(eigh)m(t-bit)i(c)m(haracter)g (whose)e(v)-5 b(alue)33 b(is)f(the)g(o)s(ctal)i(v)-5 -b(alue)32 b Fr(nnn)f Fu(\(zero)i(to)1110 1550 y(three)e(o)s(ctal)g -(digits\))630 1697 y Ft(\\x)p Fj(HH)288 b Fu(the)38 b(eigh)m(t-bit)i(c) +b(alue)32 b Fr(nnn)f Fu(\(zero)i(to)1110 929 y(three)e(o)s(ctal)g +(digits\))630 1103 y Ft(\\x)p Fj(HH)288 b Fu(the)38 b(eigh)m(t-bit)i(c) m(haracter)g(whose)e(v)-5 b(alue)39 b(is)f(the)h(hexadecimal)g(v)-5 -b(alue)39 b Fr(HH)1110 1807 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e -(digits\))630 1954 y Ft(\\u)p Fj(HHHH)192 b Fu(the)41 +b(alue)39 b Fr(HH)1110 1212 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e +(digits\))630 1386 y Ft(\\u)p Fj(HHHH)192 b Fu(the)41 b(Unico)s(de)g(\(ISO/IEC)f(10646\))j(c)m(haracter)g(whose)e(v)-5 -b(alue)41 b(is)g(the)g(hex-)1110 2064 y(adecimal)32 b(v)-5 +b(alue)41 b(is)g(the)g(hex-)1110 1495 y(adecimal)32 b(v)-5 b(alue)31 b Fr(HHHH)41 b Fu(\(one)31 b(to)g(four)e(hex)h(digits\))630 -2211 y Ft(\\U)p Fj(HHHHHHHH)1110 2321 y Fu(the)41 b(Unico)s(de)g +1669 y Ft(\\U)p Fj(HHHHHHHH)1110 1778 y Fu(the)41 b(Unico)s(de)g (\(ISO/IEC)f(10646\))j(c)m(haracter)g(whose)e(v)-5 b(alue)41 -b(is)g(the)g(hex-)1110 2430 y(adecimal)32 b(v)-5 b(alue)31 +b(is)g(the)g(hex-)1110 1888 y(adecimal)32 b(v)-5 b(alue)31 b Fr(HHHHHHHH)41 b Fu(\(one)31 b(to)g(eigh)m(t)h(hex)e(digits\))150 -2578 y Ft(enable)870 2706 y(enable)46 b([-a])h([-dnps])f([-f)g -Fj(filename)p Ft(])g([)p Fj(name)g Ft(...)o(])630 2835 +2061 y Ft(enable)870 2203 y(enable)46 b([-a])h([-dnps])f([-f)g +Fj(filename)p Ft(])g([)p Fj(name)g Ft(...)o(])630 2345 y Fu(Enable)36 b(and)f(disable)h(builtin)g(shell)g(commands.)56 b(Disabling)37 b(a)g(builtin)e(allo)m(ws)i(a)f(disk)630 -2944 y(command)e(whic)m(h)g(has)g(the)g(same)h(name)f(as)h(a)f(shell)h -(builtin)e(to)i(b)s(e)f(executed)h(without)630 3054 y(sp)s(ecifying)27 +2454 y(command)e(whic)m(h)g(has)g(the)g(same)h(name)f(as)h(a)f(shell)h +(builtin)e(to)i(b)s(e)f(executed)h(without)630 2564 y(sp)s(ecifying)27 b(a)g(full)g(pathname,)g(ev)m(en)h(though)f(the)g(shell)g(normally)g -(searc)m(hes)h(for)f(builtins)630 3163 y(b)s(efore)35 +(searc)m(hes)h(for)f(builtins)630 2673 y(b)s(efore)35 b(disk)g(commands.)55 b(If)35 b Ft(-n)g Fu(is)g(used,)h(the)g Fr(name)5 b Fu(s)35 b(b)s(ecome)h(disabled.)55 b(Otherwise)630 -3273 y Fr(name)5 b Fu(s)44 b(are)h(enabled.)82 b(F)-8 +2783 y Fr(name)5 b Fu(s)44 b(are)h(enabled.)82 b(F)-8 b(or)45 b(example,)k(to)c(use)f(the)g Ft(test)f Fu(binary)h(found)f -(via)h Ft($PATH)630 3382 y Fu(instead)31 b(of)f(the)h(shell)f(builtin)g +(via)h Ft($PATH)630 2892 y Fu(instead)31 b(of)f(the)h(shell)f(builtin)g (v)m(ersion,)h(t)m(yp)s(e)g(`)p Ft(enable)e(-n)h(test)p -Fu('.)630 3511 y(If)45 b(the)i Ft(-p)e Fu(option)h(is)g(supplied,)j(or) +Fu('.)630 3034 y(If)45 b(the)i Ft(-p)e Fu(option)h(is)g(supplied,)j(or) d(no)g Fr(name)51 b Fu(argumen)m(ts)46 b(app)s(ear,)k(a)c(list)h(of)f -(shell)630 3621 y(builtins)37 b(is)h(prin)m(ted.)63 b(With)38 +(shell)630 3144 y(builtins)37 b(is)h(prin)m(ted.)63 b(With)38 b(no)f(other)h(argumen)m(ts,)j(the)d(list)g(consists)g(of)g(all)h -(enabled)630 3730 y(shell)d(builtins.)57 b(The)35 b Ft(-a)h +(enabled)630 3253 y(shell)d(builtins.)57 b(The)35 b Ft(-a)h Fu(option)g(means)g(to)g(list)h(eac)m(h)g(builtin)f(with)f(an)h -(indication)h(of)630 3840 y(whether)30 b(or)g(not)h(it)g(is)f(enabled.) -630 3968 y(The)22 b Ft(-f)f Fu(option)h(means)g(to)h(load)g(the)f(new)g +(indication)h(of)630 3363 y(whether)30 b(or)g(not)h(it)g(is)f(enabled.) +630 3504 y(The)22 b Ft(-f)f Fu(option)h(means)g(to)h(load)g(the)f(new)g (builtin)f(command)h Fr(name)27 b Fu(from)22 b(shared)f(ob)5 -b(ject)630 4078 y Fr(\014lename)p Fu(,)31 b(on)f(systems)g(that)h(supp) -s(ort)e(dynamic)h(loading.)41 b(Bash)31 b(will)f(use)g(the)h(v)-5 -b(alue)31 b(of)630 4187 y(the)39 b Ft(BASH_LOADABLES_PATH)34 -b Fu(v)-5 b(ariable)40 b(as)f(a)h(colon-separated)h(list)f(of)f -(directories)h(in)630 4297 y(whic)m(h)31 b(to)h(searc)m(h)g(for)f -Fr(\014lename)p Fu(.)44 b(The)31 b(default)g(is)h(system-dep)s(enden)m -(t.)43 b(The)31 b Ft(-d)f Fu(option)630 4407 y(will)h(delete)g(a)g -(builtin)f(loaded)h(with)f Ft(-f)p Fu(.)630 4535 y(If)j(there)i(are)f -(no)g(options,)h(a)f(list)h(of)f(the)g(shell)g(builtins)g(is)g(displa)m -(y)m(ed.)52 b(The)33 b Ft(-s)g Fu(option)630 4645 y(restricts)j -Ft(enable)d Fu(to)j(the)f Fm(posix)f Fu(sp)s(ecial)i(builtins.)54 -b(If)34 b Ft(-s)h Fu(is)g(used)f(with)g Ft(-f)p Fu(,)i(the)f(new)630 -4754 y(builtin)30 b(b)s(ecomes)h(a)f(sp)s(ecial)h(builtin)f(\(see)i -(Section)f(4.4)g([Sp)s(ecial)g(Builtins],)g(page)g(77\).)630 -4883 y(If)24 b(no)g(options)h(are)g(supplied)e(and)h(a)h -Fr(name)k Fu(is)c(not)f(a)h(shell)g(builtin,)g Ft(enable)e -Fu(will)i(attempt)630 4992 y(to)c(load)g Fr(name)26 b -Fu(from)20 b(a)g(shared)g(ob)5 b(ject)21 b(named)f Fr(name)p -Fu(,)j(as)d(if)h(the)f(command)h(w)m(ere)f(`)p Ft(enable)630 -5102 y(-f)30 b Fj(name)f(name)p Fu('.)630 5230 y(The)d(return)f(status) -h(is)g(zero)h(unless)e(a)i Fr(name)k Fu(is)26 b(not)g(a)h(shell)f -(builtin)g(or)g(there)g(is)g(an)g(error)630 5340 y(loading)31 -b(a)g(new)f(builtin)g(from)g(a)g(shared)g(ob)5 b(ject.)p -eop end -%%Page: 61 67 -TeXDict begin 61 66 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(61)150 299 y Ft(help)870 -435 y(help)47 b([-dms])f([)p Fj(pattern)p Ft(])630 571 -y Fu(Displa)m(y)40 b(helpful)e(information)h(ab)s(out)g(builtin)f -(commands.)66 b(If)38 b Fr(pattern)h Fu(is)g(sp)s(eci\014ed,)630 -681 y Ft(help)28 b Fu(giv)m(es)i(detailed)g(help)e(on)h(all)h(commands) -e(matc)m(hing)i Fr(pattern)p Fu(,)g(otherwise)f(a)g(list)h(of)630 -790 y(the)h(builtins)e(is)i(prin)m(ted.)630 926 y(Options,)f(if)h +b(ject)630 3614 y Fr(\014lename)p Fu(,)41 b(on)d(systems)g(that)g(supp) +s(ort)f(dynamic)h(loading.)65 b(Bash)38 b(will)g(use)g(the)g(v)-5 +b(alue)630 3724 y(of)28 b(the)g Ft(BASH_LOADABLES_PATH)23 +b Fu(v)-5 b(ariable)28 b(as)h(a)f(colon-separated)i(list)e(of)g +(directories)h(in)630 3833 y(whic)m(h)c(to)g(searc)m(h)h(for)e +Fr(\014lename)p Fu(,)j(if)e Fr(\014lename)30 b Fu(do)s(es)24 +b(not)h(con)m(tain)i(a)e(slash.)39 b(The)24 b(default)h(is)630 +3943 y(system-dep)s(enden)m(t,)d(and)e(ma)m(y)h(include)f +Ft(")p Fu(.)p Ft(")g Fu(to)h(force)g(a)g(searc)m(h)g(of)g(the)g(curren) +m(t)f(directory)-8 b(.)630 4052 y(The)30 b Ft(-d)g Fu(option)g(will)h +(delete)h(a)f(builtin)e(loaded)i(with)f Ft(-f)p Fu(.)630 +4194 y(If)j(there)i(are)f(no)g(options,)h(a)f(list)h(of)f(the)g(shell)g +(builtins)g(is)g(displa)m(y)m(ed.)52 b(The)33 b Ft(-s)g +Fu(option)630 4303 y(restricts)j Ft(enable)d Fu(to)j(the)f +Fm(posix)f Fu(sp)s(ecial)i(builtins.)54 b(If)34 b Ft(-s)h +Fu(is)g(used)f(with)g Ft(-f)p Fu(,)i(the)f(new)630 4413 +y(builtin)30 b(b)s(ecomes)h(a)f(sp)s(ecial)h(builtin)f(\(see)i(Section) +f(4.4)g([Sp)s(ecial)g(Builtins],)g(page)g(80\).)630 4555 +y(If)24 b(no)g(options)h(are)g(supplied)e(and)h(a)h Fr(name)k +Fu(is)c(not)f(a)h(shell)g(builtin,)g Ft(enable)e Fu(will)i(attempt)630 +4664 y(to)c(load)g Fr(name)26 b Fu(from)20 b(a)g(shared)g(ob)5 +b(ject)21 b(named)f Fr(name)p Fu(,)j(as)d(if)h(the)f(command)h(w)m(ere) +f(`)p Ft(enable)630 4774 y(-f)30 b Fj(name)f(name)p Fu('.)630 +4915 y(The)d(return)f(status)h(is)g(zero)h(unless)e(a)i +Fr(name)k Fu(is)26 b(not)g(a)h(shell)f(builtin)g(or)g(there)g(is)g(an)g +(error)630 5025 y(loading)31 b(a)g(new)f(builtin)g(from)g(a)g(shared)g +(ob)5 b(ject.)150 5198 y Ft(help)870 5340 y(help)47 b([-dms])f([)p +Fj(pattern)p Ft(])p eop end +%%Page: 63 69 +TeXDict begin 63 68 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(63)630 299 y(Displa)m(y)40 +b(helpful)e(information)h(ab)s(out)g(builtin)f(commands.)66 +b(If)38 b Fr(pattern)h Fu(is)g(sp)s(eci\014ed,)630 408 +y Ft(help)28 b Fu(giv)m(es)i(detailed)g(help)e(on)h(all)h(commands)e +(matc)m(hing)i Fr(pattern)p Fu(,)g(otherwise)f(a)g(list)h(of)630 +518 y(the)h(builtins)e(is)i(prin)m(ted.)630 652 y(Options,)f(if)h (supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h(meanings:)630 -1089 y Ft(-d)384 b Fu(Displa)m(y)32 b(a)e(short)g(description)h(of)f -(eac)m(h)i Fr(pattern)630 1251 y Ft(-m)384 b Fu(Displa)m(y)32 +811 y Ft(-d)384 b Fu(Displa)m(y)32 b(a)e(short)g(description)h(of)f +(eac)m(h)i Fr(pattern)630 971 y Ft(-m)384 b Fu(Displa)m(y)32 b(the)e(description)g(of)h(eac)m(h)h Fr(pattern)e Fu(in)g(a)h -(manpage-lik)m(e)h(format)630 1414 y Ft(-s)384 b Fu(Displa)m(y)32 +(manpage-lik)m(e)h(format)630 1130 y Ft(-s)384 b Fu(Displa)m(y)32 b(only)e(a)h(short)f(usage)h(synopsis)e(for)i(eac)m(h)g -Fr(pattern)630 1576 y Fu(The)f(return)f(status)i(is)f(zero)h(unless)f -(no)g(command)h(matc)m(hes)g Fr(pattern)p Fu(.)150 1739 -y Ft(let)870 1875 y(let)47 b Fj(expression)e Ft([)p Fj(expression)g -Ft(...)o(])630 2011 y Fu(The)c Ft(let)g Fu(builtin)g(allo)m(ws)i +Fr(pattern)630 1289 y Fu(The)f(return)f(status)i(is)f(zero)h(unless)f +(no)g(command)h(matc)m(hes)g Fr(pattern)p Fu(.)150 1448 +y Ft(let)870 1582 y(let)47 b Fj(expression)e Ft([)p Fj(expression)g +Ft(...)o(])630 1716 y Fu(The)c Ft(let)g Fu(builtin)g(allo)m(ws)i (arithmetic)f(to)h(b)s(e)d(p)s(erformed)g(on)i(shell)g(v)-5 -b(ariables.)74 b(Eac)m(h)630 2120 y Fr(expression)31 +b(ariables.)74 b(Eac)m(h)630 1826 y Fr(expression)31 b Fu(is)g(ev)-5 b(aluated)32 b(according)f(to)h(the)f(rules)g(giv)m(en) -h(b)s(elo)m(w)f(in)f(Section)i(6.5)g([Shell)630 2230 -y(Arithmetic],)51 b(page)46 b(98.)87 b(If)45 b(the)g(last)h -Fr(expression)g Fu(ev)-5 b(aluates)47 b(to)f(0,)k Ft(let)44 -b Fu(returns)g(1;)630 2340 y(otherwise)31 b(0)g(is)f(returned.)150 -2502 y Ft(local)870 2638 y(local)46 b([)p Fj(option)p -Ft(])g Fj(name)p Ft([=)p Fj(value)p Ft(])e(...)630 2774 +h(b)s(elo)m(w)f(in)f(Section)i(6.5)g([Shell)630 1936 +y(Arithmetic],)47 b(page)c(101.)78 b(If)41 b(the)i(last)g +Fr(expression)f Fu(ev)-5 b(aluates)44 b(to)f(0,)j Ft(let)41 +b Fu(returns)g(1;)630 2045 y(otherwise)31 b(0)g(is)f(returned.)150 +2204 y Ft(local)870 2339 y(local)46 b([)p Fj(option)p +Ft(])g Fj(name)p Ft([=)p Fj(value)p Ft(])e(...)630 2473 y Fu(F)-8 b(or)27 b(eac)m(h)g(argumen)m(t,)g(a)f(lo)s(cal)h(v)-5 b(ariable)27 b(named)e Fr(name)31 b Fu(is)26 b(created,)i(and)d -(assigned)h Fr(v)-5 b(alue)p Fu(.)630 2884 y(The)37 b -Fr(option)h Fu(can)f(b)s(e)g(an)m(y)h(of)f(the)h(options)g(accepted)g -(b)m(y)g Ft(declare)p Fu(.)59 b Ft(local)36 b Fu(can)i(only)630 -2993 y(b)s(e)j(used)h(within)f(a)i(function;)48 b(it)42 -b(mak)m(es)h(the)f(v)-5 b(ariable)43 b Fr(name)48 b Fu(ha)m(v)m(e)43 -b(a)f(visible)h(scop)s(e)630 3103 y(restricted)h(to)f(that)h(function)e -(and)g(its)i(c)m(hildren.)78 b(If)42 b Fr(name)48 b Fu(is)43 -b(`)p Ft(-)p Fu(',)j(the)d(set)h(of)f(shell)630 3212 -y(options)34 b(is)f(made)g(lo)s(cal)i(to)f(the)f(function)g(in)g(whic)m -(h)g Ft(local)f Fu(is)h(in)m(v)m(ok)m(ed:)48 b(shell)34 -b(options)630 3322 y(c)m(hanged)e(using)e(the)i Ft(set)e -Fu(builtin)h(inside)g(the)g(function)g(are)g(restored)h(to)g(their)f -(original)630 3432 y(v)-5 b(alues)36 b(when)e(the)i(function)f -(returns.)54 b(The)35 b(restore)h(is)g(e\013ected)h(as)e(if)h(a)g -(series)f(of)h Ft(set)630 3541 y Fu(commands)j(w)m(ere)g(executed)h(to) -f(restore)h(the)f(v)-5 b(alues)39 b(that)h(w)m(ere)f(in)f(place)i(b)s -(efore)f(the)630 3651 y(function.)j(The)30 b(return)g(status)h(is)g -(zero)h(unless)e Ft(local)g Fu(is)h(used)f(outside)h(a)g(function,)g -(an)630 3760 y(in)m(v)-5 b(alid)31 b Fr(name)k Fu(is)c(supplied,)e(or)i -Fr(name)k Fu(is)c(a)f(readonly)h(v)-5 b(ariable.)150 -3923 y Ft(logout)870 4059 y(logout)46 b([)p Fj(n)p Ft(])630 -4195 y Fu(Exit)31 b(a)g(login)g(shell,)g(returning)e(a)i(status)g(of)f -Fr(n)g Fu(to)h(the)g(shell's)f(paren)m(t.)150 4357 y -Ft(mapfile)870 4493 y(mapfile)46 b([-d)h Fj(delim)p Ft(])f([-n)h -Fj(count)p Ft(])f([-O)h Fj(origin)p Ft(])f([-s)g Fj(count)p -Ft(])1061 4603 y([-t])h([-u)f Fj(fd)p Ft(])h([-C)g Fj(callback)p -Ft(])f([-c)g Fj(quantum)p Ft(])g([)p Fj(array)p Ft(])630 -4739 y Fu(Read)38 b(lines)f(from)g(the)h(standard)e(input)g(in)m(to)j -(the)e(indexed)g(arra)m(y)h(v)-5 b(ariable)38 b Fr(arra)m(y)p -Fu(,)i(or)630 4849 y(from)28 b(\014le)h(descriptor)f -Fr(fd)k Fu(if)c(the)h Ft(-u)f Fu(option)h(is)g(supplied.)39 -b(The)28 b(v)-5 b(ariable)29 b Ft(MAPFILE)e Fu(is)i(the)630 -4958 y(default)i Fr(arra)m(y)p Fu(.)41 b(Options,)30 -b(if)g(supplied,)g(ha)m(v)m(e)h(the)g(follo)m(wing)h(meanings:)630 -5121 y Ft(-d)384 b Fu(The)37 b(\014rst)g(c)m(haracter)i(of)f -Fr(delim)g Fu(is)f(used)g(to)h(terminate)h(eac)m(h)g(input)d(line,)1110 -5230 y(rather)41 b(than)h(newline.)74 b(If)41 b Fr(delim)h -Fu(is)g(the)f(empt)m(y)h(string,)j Ft(mapfile)40 b Fu(will)1110 -5340 y(terminate)31 b(a)g(line)g(when)e(it)i(reads)f(a)h(NUL)g(c)m -(haracter.)p eop end -%%Page: 62 68 -TeXDict begin 62 67 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(62)630 299 y Ft(-n)384 +(assigned)h Fr(v)-5 b(alue)p Fu(.)630 2583 y(The)28 b +Fr(option)i Fu(can)f(b)s(e)f(an)m(y)i(of)f(the)g(options)g(accepted)i +(b)m(y)d Ft(declare)p Fu(.)39 b Ft(local)27 b Fu(can)i(only)h(b)s(e)630 +2692 y(used)20 b(within)g(a)h(function;)j(it)d(mak)m(es)g(the)g(v)-5 +b(ariable)22 b Fr(name)k Fu(ha)m(v)m(e)21 b(a)g(visible)h(scop)s(e)e +(restricted)630 2802 y(to)28 b(that)g(function)f(and)g(its)h(c)m +(hildren.)39 b(If)27 b Fr(name)33 b Fu(is)27 b(`)p Ft(-)p +Fu(',)i(the)f(set)f(of)h(shell)g(options)f(is)h(made)630 +2911 y(lo)s(cal)40 b(to)f(the)f(function)g(in)g(whic)m(h)h +Ft(local)e Fu(is)h(in)m(v)m(ok)m(ed:)58 b(shell)39 b(options)f(c)m +(hanged)h(using)630 3021 y(the)31 b Ft(set)f Fu(builtin)h(inside)g(the) +g(function)f(after)i(the)f(call)h(to)g Ft(local)e Fu(are)h(restored)g +(to)h(their)630 3131 y(original)h(v)-5 b(alues)33 b(when)e(the)i +(function)f(returns.)45 b(The)32 b(restore)h(is)f(e\013ected)i(as)f(if) +f(a)h(series)630 3240 y(of)c Ft(set)f Fu(commands)h(w)m(ere)g(executed) +h(to)g(restore)f(the)g(v)-5 b(alues)30 b(that)f(w)m(ere)h(in)e(place)i +(b)s(efore)630 3350 y(the)f(function.)40 b(The)28 b(return)f(status)i +(is)g(zero)g(unless)f Ft(local)f Fu(is)h(used)g(outside)h(a)g +(function,)630 3459 y(an)h(in)m(v)-5 b(alid)31 b Fr(name)36 +b Fu(is)30 b(supplied,)f(or)i Fr(name)k Fu(is)c(a)g(readonly)f(v)-5 +b(ariable.)150 3618 y Ft(logout)870 3753 y(logout)46 +b([)p Fj(n)p Ft(])630 3887 y Fu(Exit)31 b(a)g(login)g(shell,)g +(returning)e(a)i(status)g(of)f Fr(n)g Fu(to)h(the)g(shell's)f(paren)m +(t.)150 4046 y Ft(mapfile)870 4180 y(mapfile)46 b([-d)h +Fj(delim)p Ft(])f([-n)h Fj(count)p Ft(])f([-O)h Fj(origin)p +Ft(])f([-s)g Fj(count)p Ft(])1061 4290 y([-t])h([-u)f +Fj(fd)p Ft(])h([-C)g Fj(callback)p Ft(])f([-c)g Fj(quantum)p +Ft(])g([)p Fj(array)p Ft(])630 4424 y Fu(Read)38 b(lines)f(from)g(the)h +(standard)e(input)g(in)m(to)j(the)e(indexed)g(arra)m(y)h(v)-5 +b(ariable)38 b Fr(arra)m(y)p Fu(,)i(or)630 4534 y(from)28 +b(\014le)h(descriptor)f Fr(fd)k Fu(if)c(the)h Ft(-u)f +Fu(option)h(is)g(supplied.)39 b(The)28 b(v)-5 b(ariable)29 +b Ft(MAPFILE)e Fu(is)i(the)630 4644 y(default)i Fr(arra)m(y)p +Fu(.)41 b(Options,)30 b(if)g(supplied,)g(ha)m(v)m(e)h(the)g(follo)m +(wing)h(meanings:)630 4803 y Ft(-d)384 b Fu(The)37 b(\014rst)g(c)m +(haracter)i(of)f Fr(delim)g Fu(is)f(used)g(to)h(terminate)h(eac)m(h)g +(input)d(line,)1110 4912 y(rather)41 b(than)h(newline.)74 +b(If)41 b Fr(delim)h Fu(is)g(the)f(empt)m(y)h(string,)j +Ft(mapfile)40 b Fu(will)1110 5022 y(terminate)31 b(a)g(line)g(when)e +(it)i(reads)f(a)h(NUL)g(c)m(haracter.)630 5181 y Ft(-n)384 b Fu(Cop)m(y)30 b(at)h(most)g Fr(coun)m(t)i Fu(lines.)41 b(If)30 b Fr(coun)m(t)j Fu(is)d(0,)h(all)h(lines)e(are)h(copied.)630 -446 y Ft(-O)384 b Fu(Begin)31 b(assigning)g(to)g Fr(arra)m(y)39 +5340 y Ft(-O)384 b Fu(Begin)31 b(assigning)g(to)g Fr(arra)m(y)39 b Fu(at)31 b(index)f Fr(origin)p Fu(.)41 b(The)30 b(default)h(index)f -(is)g(0.)630 594 y Ft(-s)384 b Fu(Discard)31 b(the)f(\014rst)g -Fr(coun)m(t)j Fu(lines)e(read.)630 741 y Ft(-t)384 b -Fu(Remo)m(v)m(e)32 b(a)f(trailing)g Fr(delim)g Fu(\(default)g -(newline\))f(from)g(eac)m(h)i(line)f(read.)630 888 y -Ft(-u)384 b Fu(Read)31 b(lines)f(from)g(\014le)h(descriptor)f +(is)g(0.)p eop end +%%Page: 64 70 +TeXDict begin 64 69 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(64)630 299 y Ft(-s)384 +b Fu(Discard)31 b(the)f(\014rst)g Fr(coun)m(t)j Fu(lines)e(read.)630 +461 y Ft(-t)384 b Fu(Remo)m(v)m(e)32 b(a)f(trailing)g +Fr(delim)g Fu(\(default)g(newline\))f(from)g(eac)m(h)i(line)f(read.)630 +623 y Ft(-u)384 b Fu(Read)31 b(lines)f(from)g(\014le)h(descriptor)f Fr(fd)j Fu(instead)e(of)f(the)h(standard)e(input.)630 -1036 y Ft(-C)384 b Fu(Ev)-5 b(aluate)26 b Fr(callbac)m(k)33 +785 y Ft(-C)384 b Fu(Ev)-5 b(aluate)26 b Fr(callbac)m(k)33 b Fu(eac)m(h)26 b(time)g Fr(quan)m(tum)f Fu(lines)g(are)g(read.)39 -b(The)25 b Ft(-c)f Fu(option)1110 1145 y(sp)s(eci\014es)30 -b Fr(quan)m(tum)p Fu(.)630 1293 y Ft(-c)384 b Fu(Sp)s(ecify)30 +b(The)25 b Ft(-c)f Fu(option)1110 895 y(sp)s(eci\014es)30 +b Fr(quan)m(tum)p Fu(.)630 1057 y Ft(-c)384 b Fu(Sp)s(ecify)30 b(the)g(n)m(um)m(b)s(er)f(of)i(lines)f(read)h(b)s(et)m(w)m(een)g(eac)m -(h)g(call)h(to)f Fr(callbac)m(k)p Fu(.)630 1440 y(If)36 +(h)g(call)h(to)f Fr(callbac)m(k)p Fu(.)630 1219 y(If)36 b Ft(-C)g Fu(is)g(sp)s(eci\014ed)g(without)g Ft(-c)p Fu(,)h(the)g(default)f(quan)m(tum)g(is)h(5000.)60 b(When)36 -b Fr(callbac)m(k)44 b Fu(is)630 1550 y(ev)-5 b(aluated,)30 +b Fr(callbac)m(k)44 b Fu(is)630 1329 y(ev)-5 b(aluated,)30 b(it)e(is)g(supplied)f(the)h(index)f(of)i(the)f(next)g(arra)m(y)g -(elemen)m(t)h(to)g(b)s(e)e(assigned)i(and)630 1659 y(the)39 +(elemen)m(t)h(to)g(b)s(e)e(assigned)i(and)630 1439 y(the)39 b(line)g(to)h(b)s(e)e(assigned)h(to)h(that)f(elemen)m(t)i(as)e (additional)h(argumen)m(ts.)66 b Fr(callbac)m(k)47 b -Fu(is)630 1769 y(ev)-5 b(aluated)32 b(after)e(the)h(line)g(is)f(read)g +Fu(is)630 1548 y(ev)-5 b(aluated)32 b(after)e(the)h(line)g(is)f(read)g (but)g(b)s(efore)g(the)h(arra)m(y)g(elemen)m(t)g(is)g(assigned.)630 -1897 y(If)25 b(not)g(supplied)f(with)h(an)g(explicit)i(origin,)g +1684 y(If)25 b(not)g(supplied)f(with)h(an)g(explicit)i(origin,)g Ft(mapfile)c Fu(will)j(clear)g Fr(arra)m(y)34 b Fu(b)s(efore)24 -b(assigning)630 2007 y(to)31 b(it.)630 2135 y Ft(mapfile)41 +b(assigning)630 1794 y(to)31 b(it.)630 1930 y Ft(mapfile)41 b Fu(returns)g(successfully)i(unless)e(an)i(in)m(v)-5 b(alid)43 b(option)g(or)g(option)g(argumen)m(t)g(is)630 -2245 y(supplied,)29 b Fr(arra)m(y)39 b Fu(is)30 b(in)m(v)-5 +2039 y(supplied,)29 b Fr(arra)m(y)39 b Fu(is)30 b(in)m(v)-5 b(alid)31 b(or)g(unassignable,)f(or)h Fr(arra)m(y)38 b Fu(is)31 b(not)f(an)h(indexed)e(arra)m(y)-8 b(.)150 -2392 y Ft(printf)870 2521 y(printf)46 b([-v)h Fj(var)p -Ft(])g Fj(format)f Ft([)p Fj(arguments)p Ft(])630 2649 +2201 y Ft(printf)870 2337 y(printf)46 b([-v)h Fj(var)p +Ft(])g Fj(format)f Ft([)p Fj(arguments)p Ft(])630 2473 y Fu(W)-8 b(rite)27 b(the)g(formatted)f Fr(argumen)m(ts)k Fu(to)d(the)f(standard)f(output)h(under)e(the)i(con)m(trol)i(of)e(the) -630 2759 y Fr(format)p Fu(.)66 b(The)39 b Ft(-v)f Fu(option)h(causes)g +630 2583 y Fr(format)p Fu(.)66 b(The)39 b Ft(-v)f Fu(option)h(causes)g (the)g(output)g(to)g(b)s(e)f(assigned)h(to)h(the)f(v)-5 -b(ariable)39 b Fr(v)-5 b(ar)630 2869 y Fu(rather)30 b(than)g(b)s(eing)g -(prin)m(ted)g(to)h(the)g(standard)e(output.)630 2997 +b(ariable)39 b Fr(v)-5 b(ar)630 2692 y Fu(rather)30 b(than)g(b)s(eing)g +(prin)m(ted)g(to)h(the)g(standard)e(output.)630 2828 y(The)36 b Fr(format)i Fu(is)f(a)f(c)m(haracter)i(string)e(whic)m(h)g (con)m(tains)i(three)e(t)m(yp)s(es)g(of)h(ob)5 b(jects:)53 -b(plain)630 3107 y(c)m(haracters,)41 b(whic)m(h)c(are)h(simply)e +b(plain)630 2938 y(c)m(haracters,)41 b(whic)m(h)c(are)h(simply)e (copied)i(to)g(standard)f(output,)i(c)m(haracter)g(escap)s(e)e(se-)630 -3216 y(quences,)g(whic)m(h)f(are)g(con)m(v)m(erted)h(and)f(copied)g(to) -g(the)g(standard)f(output,)i(and)f(format)630 3326 y(sp)s +3047 y(quences,)g(whic)m(h)f(are)g(con)m(v)m(erted)h(and)f(copied)g(to) +g(the)g(standard)f(output,)i(and)f(format)630 3157 y(sp)s (eci\014cations,)j(eac)m(h)e(of)g(whic)m(h)f(causes)g(prin)m(ting)g(of) h(the)f(next)h(successiv)m(e)g Fr(argumen)m(t)p Fu(.)630 -3435 y(In)24 b(addition)h(to)g(the)g(standard)f Ft(printf\(1\))e -Fu(formats,)27 b Ft(printf)c Fu(in)m(terprets)i(the)f(follo)m(wing)630 -3545 y(extensions:)630 3692 y Ft(\045b)384 b Fu(Causes)38 -b Ft(printf)f Fu(to)j(expand)e(bac)m(kslash)h(escap)s(e)g(sequences)g -(in)f(the)h(cor-)1110 3802 y(resp)s(onding)31 b Fr(argumen)m(t)j -Fu(in)e(the)h(same)f(w)m(a)m(y)h(as)g Ft(echo)c(-e)j -Fu(\(see)h(Section)g(4.2)1110 3912 y([Bash)e(Builtins],)g(page)g(55\).) -630 4059 y Ft(\045q)384 b Fu(Causes)32 b Ft(printf)e -Fu(to)i(output)g(the)g(corresp)s(onding)f Fr(argumen)m(t)j -Fu(in)d(a)i(format)1110 4169 y(that)e(can)g(b)s(e)e(reused)h(as)h -(shell)f(input.)630 4316 y Ft(\045Q)384 b Fu(lik)m(e)34 -b Ft(\045q)p Fu(,)f(but)f(applies)g(an)m(y)h(supplied)e(precision)i(to) -h(the)e Fr(argumen)m(t)j Fu(b)s(efore)1110 4425 y(quoting)c(it.)630 -4573 y Ft(\045\()p Fj(datefmt)p Ft(\)T)1110 4682 y Fu(Causes)e -Ft(printf)e Fu(to)j(output)f(the)g(date-time)i(string)e(resulting)h -(from)e(using)1110 4792 y Fr(datefm)m(t)45 b Fu(as)d(a)g(format)g -(string)g(for)g Ft(strftime)p Fu(\(3\).)74 b(The)41 b(corresp)s(onding) -1110 4902 y Fr(argumen)m(t)h Fu(is)e(an)g(in)m(teger)i(represen)m(ting) -e(the)g(n)m(um)m(b)s(er)f(of)h(seconds)g(since)1110 5011 +3267 y(In)27 b(addition)g(to)h(the)g(standard)e Ft(printf\(3\))f +Fu(format)j(c)m(haracters)g Ft(csndiouxXeEfFgGaA)p Fu(,)630 +3376 y Ft(printf)h Fu(in)m(terprets)h(the)h(follo)m(wing)h(additional)f +(format)g(sp)s(eci\014ers:)630 3538 y Ft(\045b)384 b +Fu(Causes)38 b Ft(printf)f Fu(to)j(expand)e(bac)m(kslash)h(escap)s(e)g +(sequences)g(in)f(the)h(cor-)1110 3648 y(resp)s(onding)31 +b Fr(argumen)m(t)j Fu(in)e(the)h(same)f(w)m(a)m(y)h(as)g +Ft(echo)c(-e)j Fu(\(see)h(Section)g(4.2)1110 3758 y([Bash)e(Builtins],) +g(page)g(57\).)630 3920 y Ft(\045q)384 b Fu(Causes)32 +b Ft(printf)e Fu(to)i(output)g(the)g(corresp)s(onding)f +Fr(argumen)m(t)j Fu(in)d(a)i(format)1110 4029 y(that)42 +b(can)f(b)s(e)g(reused)g(as)g(shell)h(input.)72 b Ft(\045q)41 +b Fu(and)f Ft(\045Q)p Fu(P)h(use)g(the)g(ANSI-C)1110 +4139 y(quoting)29 b(st)m(yle)h(\(see)g(Section)g(3.1.2.4)h([ANSI-C)e +(Quoting],)h(page)f(6\))h(if)f(an)m(y)1110 4248 y(c)m(haracters)g(in)e +(the)h(argumen)m(t)g(string)f(require)h(it,)g(and)f(bac)m(kslash)h +(quoting)1110 4358 y(otherwise.)79 b(If)42 b(the)h(format)h(string)f +(uses)f(the)h Ft(printf)e Fr(alternate)k(form)p Fu(,)1110 +4468 y(these)31 b(t)m(w)m(o)h(formats)e(quote)h(the)g(argumen)m(t)f +(string)h(using)f(single)h(quotes.)630 4630 y Ft(\045Q)384 +b Fu(lik)m(e)34 b Ft(\045q)p Fu(,)f(but)f(applies)g(an)m(y)h(supplied)e +(precision)i(to)h(the)e Fr(argumen)m(t)j Fu(b)s(efore)1110 +4739 y(quoting)c(it.)630 4902 y Ft(\045\()p Fj(datefmt)p +Ft(\)T)1110 5011 y Fu(Causes)e Ft(printf)e Fu(to)j(output)f(the)g +(date-time)i(string)e(resulting)h(from)e(using)1110 5121 +y Fr(datefm)m(t)45 b Fu(as)d(a)g(format)g(string)g(for)g +Ft(strftime)p Fu(\(3\).)74 b(The)41 b(corresp)s(onding)1110 +5230 y Fr(argumen)m(t)h Fu(is)e(an)g(in)m(teger)i(represen)m(ting)e +(the)g(n)m(um)m(b)s(er)f(of)h(seconds)g(since)1110 5340 y(the)24 b(ep)s(o)s(c)m(h.)38 b(Tw)m(o)24 b(sp)s(ecial)h(argumen)m(t)f (v)-5 b(alues)24 b(ma)m(y)h(b)s(e)e(used:)36 b(-1)25 -b(represen)m(ts)1110 5121 y(the)30 b(curren)m(t)g(time,)h(and)e(-2)i -(represen)m(ts)f(the)g(time)h(the)f(shell)g(w)m(as)g(in)m(v)m(ok)m(ed.) -1110 5230 y(If)38 b(no)g(argumen)m(t)h(is)f(sp)s(eci\014ed,)i(con)m(v)m -(ersion)f(b)s(eha)m(v)m(es)g(as)g(if)f(-1)h(had)f(b)s(een)1110 -5340 y(giv)m(en.)k(This)29 b(is)i(an)f(exception)i(to)f(the)f(usual)g -Ft(printf)f Fu(b)s(eha)m(vior.)p eop end -%%Page: 63 69 -TeXDict begin 63 68 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(63)630 299 y(The)26 -b(\045b,)h(\045q,)h(and)e(\045T)g(directiv)m(es)j(all)e(use)g(the)g -(\014eld)f(width)g(and)h(precision)g(argumen)m(ts)630 -408 y(from)f(the)g(format)h(sp)s(eci\014cation)g(and)e(write)i(that)f -(man)m(y)h(b)m(ytes)f(from)g(\(or)h(use)e(that)i(wide)630 -518 y(a)42 b(\014eld)g(for\))g(the)h(expanded)e(argumen)m(t,)k(whic)m -(h)d(usually)g(con)m(tains)h(more)f(c)m(haracters)630 -628 y(than)30 b(the)h(original.)630 760 y(Argumen)m(ts)d(to)h +b(represen)m(ts)p eop end +%%Page: 65 71 +TeXDict begin 65 70 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(65)1110 299 y(the)30 +b(curren)m(t)g(time,)h(and)e(-2)i(represen)m(ts)f(the)g(time)h(the)f +(shell)g(w)m(as)g(in)m(v)m(ok)m(ed.)1110 408 y(If)38 +b(no)g(argumen)m(t)h(is)f(sp)s(eci\014ed,)i(con)m(v)m(ersion)f(b)s(eha) +m(v)m(es)g(as)g(if)f(-1)h(had)f(b)s(een)1110 518 y(giv)m(en.)k(This)29 +b(is)i(an)f(exception)i(to)f(the)f(usual)g Ft(printf)f +Fu(b)s(eha)m(vior.)630 679 y(The)39 b(\045b,)i(\045q,)g(and)e(\045T)f +(format)i(sp)s(eci\014ers)e(all)i(use)f(the)h(\014eld)f(width)f(and)h +(precision)630 789 y(argumen)m(ts)e(from)f(the)h(format)g(sp)s +(eci\014cation)g(and)f(write)h(that)h(man)m(y)e(b)m(ytes)h(from)g(\(or) +630 898 y(use)29 b(that)h(wide)f(a)g(\014eld)g(for\))g(the)h(expanded)e +(argumen)m(t,)i(whic)m(h)f(usually)g(con)m(tains)i(more)630 +1008 y(c)m(haracters)h(than)e(the)h(original.)630 1143 +y(The)e(\045n)f(format)h(sp)s(eci\014er)g(accepts)h(a)g(corresp)s +(onding)e(argumen)m(t)h(that)h(is)f(treated)h(as)g(a)630 +1253 y(shell)h(v)-5 b(ariable)31 b(name.)630 1388 y(The)26 +b(\045s)g(and)h(\045c)f(format)h(sp)s(eci\014ers)f(accept)i(an)f(l)g +(\(long\))h(mo)s(di\014er,)e(whic)m(h)h(forces)g(them)630 +1498 y(to)21 b(con)m(v)m(ert)i(the)e(argumen)m(t)g(string)g(to)g(a)g +(wide-c)m(haracter)i(string)e(and)f(apply)g(an)m(y)h(supplied)630 +1608 y(\014eld)30 b(width)g(and)f(precision)i(in)f(terms)g(of)h(c)m +(haracters,)h(not)e(b)m(ytes.)630 1743 y(Argumen)m(ts)e(to)h (non-string)e(format)i(sp)s(eci\014ers)e(are)h(treated)h(as)g(C)e -(language)j(constan)m(ts,)630 870 y(except)22 b(that)g(a)g(leading)g +(language)j(constan)m(ts,)630 1852 y(except)22 b(that)g(a)g(leading)g (plus)e(or)h(min)m(us)f(sign)i(is)f(allo)m(w)m(ed,)k(and)c(if)g(the)g -(leading)h(c)m(haracter)h(is)630 979 y(a)i(single)g(or)f(double)h +(leading)h(c)m(haracter)h(is)630 1962 y(a)i(single)g(or)f(double)h (quote,)h(the)f(v)-5 b(alue)25 b(is)f(the)h(ASCI)s(I)e(v)-5 b(alue)25 b(of)f(the)h(follo)m(wing)h(c)m(haracter.)630 -1112 y(The)31 b Fr(format)i Fu(is)f(reused)e(as)i(necessary)f(to)i +2097 y(The)31 b Fr(format)i Fu(is)f(reused)e(as)i(necessary)f(to)i (consume)e(all)h(of)f(the)h Fr(argumen)m(ts)p Fu(.)44 -b(If)30 b(the)i Fr(for-)630 1222 y(mat)c Fu(requires)e(more)g +b(If)30 b(the)i Fr(for-)630 2207 y(mat)c Fu(requires)e(more)g Fr(argumen)m(ts)k Fu(than)25 b(are)i(supplied,)e(the)h(extra)h(format)f -(sp)s(eci\014cations)630 1331 y(b)s(eha)m(v)m(e)j(as)g(if)f(a)h(zero)g +(sp)s(eci\014cations)630 2317 y(b)s(eha)m(v)m(e)j(as)g(if)f(a)h(zero)g (v)-5 b(alue)29 b(or)g(n)m(ull)f(string,)h(as)g(appropriate,)g(had)f(b) -s(een)g(supplied.)38 b(The)630 1441 y(return)29 b(v)-5 -b(alue)31 b(is)g(zero)g(on)f(success,)h(non-zero)g(on)f(failure.)150 -1597 y Ft(read)870 1729 y(read)47 b([-ers])f([-a)h Fj(aname)p -Ft(])f([-d)h Fj(delim)p Ft(])f([-i)h Fj(text)p Ft(])f([-n)h -Fj(nchars)p Ft(])1061 1839 y([-N)g Fj(nchars)p Ft(])f([-p)h +s(een)g(supplied.)38 b(The)630 2426 y(return)e(v)-5 b(alue)38 +b(is)g(zero)g(on)f(success,)j(non-zero)e(if)f(an)h(in)m(v)-5 +b(alid)38 b(option)g(is)f(supplied)f(or)i(a)630 2536 +y(write)31 b(or)f(assignmen)m(t)h(error)f(o)s(ccurs.)150 +2697 y Ft(read)870 2832 y(read)47 b([-Eers])e([-a)i Fj(aname)p +Ft(])f([-d)h Fj(delim)p Ft(])f([-i)h Fj(text)p Ft(])g([-n)g +Fj(nchars)p Ft(])1061 2942 y([-N)g Fj(nchars)p Ft(])f([-p)h Fj(prompt)p Ft(])e([-t)i Fj(timeout)p Ft(])f([-u)h Fj(fd)p -Ft(])g([)p Fj(name)f Ft(...)o(])630 1972 y Fu(One)38 +Ft(])g([)p Fj(name)f Ft(...)o(])630 3077 y Fu(One)38 b(line)g(is)g(read)g(from)g(the)g(standard)f(input,)j(or)e(from)f(the)i -(\014le)f(descriptor)g Fr(fd)j Fu(sup-)630 2081 y(plied)34 +(\014le)f(descriptor)g Fr(fd)j Fu(sup-)630 3187 y(plied)34 b(as)h(an)f(argumen)m(t)h(to)g(the)f Ft(-u)g Fu(option,)i(split)f(in)m (to)g(w)m(ords)f(as)g(describ)s(ed)g(ab)s(o)m(v)m(e)h(in)630 -2191 y(Section)j(3.5.7)h([W)-8 b(ord)38 b(Splitting],)i(page)e(35,)j +3296 y(Section)j(3.5.7)h([W)-8 b(ord)38 b(Splitting],)i(page)e(36,)j (and)36 b(the)i(\014rst)f(w)m(ord)g(is)g(assigned)h(to)g(the)630 -2300 y(\014rst)32 b Fr(name)p Fu(,)h(the)g(second)g(w)m(ord)f(to)h(the) +3406 y(\014rst)32 b Fr(name)p Fu(,)h(the)g(second)g(w)m(ord)f(to)h(the) g(second)g Fr(name)p Fu(,)g(and)f(so)h(on.)47 b(If)32 -b(there)h(are)g(more)630 2410 y(w)m(ords)39 b(than)g(names,)j(the)e +b(there)h(are)g(more)630 3516 y(w)m(ords)39 b(than)g(names,)j(the)e (remaining)f(w)m(ords)g(and)g(their)h(in)m(terv)m(ening)g(delimiters)h -(are)630 2519 y(assigned)29 b(to)h(the)g(last)g Fr(name)p +(are)630 3625 y(assigned)29 b(to)h(the)g(last)g Fr(name)p Fu(.)40 b(If)29 b(there)g(are)h(few)m(er)f(w)m(ords)g(read)g(from)g -(the)g(input)g(stream)630 2629 y(than)35 b(names,)i(the)e(remaining)h +(the)g(input)g(stream)630 3735 y(than)35 b(names,)i(the)e(remaining)h (names)f(are)h(assigned)f(empt)m(y)h(v)-5 b(alues.)56 -b(The)34 b(c)m(haracters)630 2739 y(in)e(the)h(v)-5 b(alue)33 +b(The)34 b(c)m(haracters)630 3844 y(in)e(the)h(v)-5 b(alue)33 b(of)g(the)g Ft(IFS)f Fu(v)-5 b(ariable)33 b(are)h(used)d(to)j(split)f -(the)g(line)g(in)m(to)g(w)m(ords)g(using)f(the)630 2848 +(the)g(line)g(in)m(to)g(w)m(ords)g(using)f(the)630 3954 y(same)d(rules)f(the)g(shell)h(uses)f(for)g(expansion)g(\(describ)s(ed) g(ab)s(o)m(v)m(e)i(in)e(Section)h(3.5.7)h([W)-8 b(ord)630 -2958 y(Splitting],)38 b(page)f(35\).)60 b(The)35 b(bac)m(kslash)i(c)m +4064 y(Splitting],)38 b(page)f(36\).)60 b(The)35 b(bac)m(kslash)i(c)m (haracter)h(`)p Ft(\\)p Fu(')e(ma)m(y)h(b)s(e)f(used)f(to)i(remo)m(v)m -(e)h(an)m(y)630 3067 y(sp)s(ecial)31 b(meaning)g(for)f(the)g(next)h(c)m +(e)h(an)m(y)630 4173 y(sp)s(ecial)31 b(meaning)g(for)f(the)g(next)h(c)m (haracter)h(read)e(and)g(for)g(line)h(con)m(tin)m(uation.)630 -3200 y(Options,)f(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h -(meanings:)630 3356 y Ft(-a)e Fj(aname)114 b Fu(The)34 +4309 y(Options,)f(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h +(meanings:)630 4470 y Ft(-a)e Fj(aname)114 b Fu(The)34 b(w)m(ords)f(are)i(assigned)f(to)h(sequen)m(tial)h(indices)e(of)g(the)g -(arra)m(y)h(v)-5 b(ariable)1110 3465 y Fr(aname)p Fu(,)29 +(arra)m(y)h(v)-5 b(ariable)1110 4579 y Fr(aname)p Fu(,)29 b(starting)h(at)f(0.)40 b(All)29 b(elemen)m(ts)h(are)e(remo)m(v)m(ed)i -(from)d Fr(aname)34 b Fu(b)s(efore)1110 3575 y(the)d(assignmen)m(t.)41 +(from)d Fr(aname)34 b Fu(b)s(efore)1110 4689 y(the)d(assignmen)m(t.)41 b(Other)30 b Fr(name)36 b Fu(argumen)m(ts)30 b(are)h(ignored.)630 -3731 y Ft(-d)f Fj(delim)114 b Fu(The)41 b(\014rst)h(c)m(haracter)h(of)f +4850 y Ft(-d)f Fj(delim)114 b Fu(The)41 b(\014rst)h(c)m(haracter)h(of)f Fr(delim)g Fu(is)g(used)g(to)g(terminate)h(the)f(input)f(line,)1110 -3840 y(rather)31 b(than)g(newline.)42 b(If)30 b Fr(delim)h +4960 y(rather)31 b(than)g(newline.)42 b(If)30 b Fr(delim)h Fu(is)g(the)h(empt)m(y)f(string,)g Ft(read)f Fu(will)h(termi-)1110 -3950 y(nate)g(a)g(line)f(when)g(it)h(reads)f(a)h(NUL)f(c)m(haracter.) -630 4106 y Ft(-e)384 b Fu(Readline)46 b(\(see)g(Chapter)e(8)h([Command) -f(Line)h(Editing],)50 b(page)45 b(117\))i(is)1110 4215 +5069 y(nate)g(a)g(line)f(when)g(it)h(reads)f(a)h(NUL)f(c)m(haracter.) +630 5230 y Ft(-e)384 b Fu(Readline)46 b(\(see)g(Chapter)e(8)h([Command) +f(Line)h(Editing],)50 b(page)45 b(122\))i(is)1110 5340 y(used)37 b(to)i(obtain)g(the)f(line.)65 b(Readline)39 -b(uses)e(the)i(curren)m(t)f(\(or)g(default,)j(if)1110 -4325 y(line)h(editing)g(w)m(as)g(not)g(previously)f(activ)m(e\))k -(editing)d(settings,)j(but)c(uses)1110 4434 y(Readline's)31 -b(default)g(\014lename)f(completion.)630 4590 y Ft(-i)g -Fj(text)162 b Fu(If)36 b(Readline)i(is)f(b)s(eing)g(used)f(to)h(read)g -(the)g(line,)j Fr(text)f Fu(is)e(placed)h(in)m(to)g(the)1110 -4700 y(editing)31 b(bu\013er)e(b)s(efore)h(editing)h(b)s(egins.)630 -4855 y Ft(-n)f Fj(nchars)66 b Ft(read)38 b Fu(returns)f(after)j -(reading)f Fr(nc)m(hars)j Fu(c)m(haracters)e(rather)f(than)g(w)m -(aiting)1110 4965 y(for)d(a)h(complete)h(line)f(of)g(input,)g(but)f -(honors)g(a)h(delimiter)g(if)f(few)m(er)h(than)1110 5075 -y Fr(nc)m(hars)d Fu(c)m(haracters)e(are)e(read)h(b)s(efore)f(the)g -(delimiter.)630 5230 y Ft(-N)g Fj(nchars)66 b Ft(read)39 +b(uses)e(the)i(curren)m(t)f(\(or)g(default,)j(if)p eop +end +%%Page: 66 72 +TeXDict begin 66 71 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(66)1110 299 y(line)42 +b(editing)g(w)m(as)g(not)g(previously)f(activ)m(e\))k(editing)d +(settings,)j(but)c(uses)1110 408 y(Readline's)31 b(default)g +(\014lename)f(completion.)630 560 y Ft(-E)384 b Fu(Readline)46 +b(\(see)g(Chapter)e(8)h([Command)f(Line)h(Editing],)50 +b(page)45 b(122\))i(is)1110 669 y(used)37 b(to)i(obtain)g(the)f(line.) +65 b(Readline)39 b(uses)e(the)i(curren)m(t)f(\(or)g(default,)j(if)1110 +779 y(line)h(editing)g(w)m(as)g(not)g(previously)f(activ)m(e\))k +(editing)d(settings,)j(but)c(uses)1110 889 y(Bash's)31 +b(default)f(completion,)i(including)e(programmable)h(completion.)630 +1040 y Ft(-i)f Fj(text)162 b Fu(If)36 b(Readline)i(is)f(b)s(eing)g +(used)f(to)h(read)g(the)g(line,)j Fr(text)f Fu(is)e(placed)h(in)m(to)g +(the)1110 1149 y(editing)31 b(bu\013er)e(b)s(efore)h(editing)h(b)s +(egins.)630 1301 y Ft(-n)f Fj(nchars)66 b Ft(read)38 +b Fu(returns)f(after)j(reading)f Fr(nc)m(hars)j Fu(c)m(haracters)e +(rather)f(than)g(w)m(aiting)1110 1410 y(for)d(a)h(complete)h(line)f(of) +g(input,)g(but)f(honors)g(a)h(delimiter)g(if)f(few)m(er)h(than)1110 +1520 y Fr(nc)m(hars)d Fu(c)m(haracters)e(are)e(read)h(b)s(efore)f(the)g +(delimiter.)630 1671 y Ft(-N)g Fj(nchars)66 b Ft(read)39 b Fu(returns)f(after)j(reading)e(exactly)j Fr(nc)m(hars)h -Fu(c)m(haracters)f(rather)d(than)1110 5340 y(w)m(aiting)32 +Fu(c)m(haracters)f(rather)d(than)1110 1781 y(w)m(aiting)32 b(for)f(a)g(complete)i(line)e(of)g(input,)g(unless)f(EOF)h(is)g(encoun) -m(tered)g(or)p eop end -%%Page: 64 70 -TeXDict begin 64 69 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(64)1110 299 y -Ft(read)30 b Fu(times)i(out.)43 b(Delimiter)33 b(c)m(haracters)f -(encoun)m(tered)g(in)f(the)g(input)g(are)1110 408 y(not)g(treated)h(sp) -s(ecially)f(and)f(do)h(not)g(cause)g Ft(read)e Fu(to)j(return)d(un)m -(til)i Fr(nc)m(hars)1110 518 y Fu(c)m(haracters)26 b(are)f(read.)38 -b(The)24 b(result)g(is)h(not)f(split)h(on)f(the)h(c)m(haracters)h(in)e -Ft(IFS)p Fu(;)1110 628 y(the)e(in)m(ten)m(t)i(is)e(that)h(the)f(v)-5 +m(tered)g(or)1110 1891 y Ft(read)f Fu(times)i(out.)43 +b(Delimiter)33 b(c)m(haracters)f(encoun)m(tered)g(in)f(the)g(input)g +(are)1110 2000 y(not)g(treated)h(sp)s(ecially)f(and)f(do)h(not)g(cause) +g Ft(read)e Fu(to)j(return)d(un)m(til)i Fr(nc)m(hars)1110 +2110 y Fu(c)m(haracters)26 b(are)f(read.)38 b(The)24 +b(result)g(is)h(not)f(split)h(on)f(the)h(c)m(haracters)h(in)e +Ft(IFS)p Fu(;)1110 2219 y(the)e(in)m(ten)m(t)i(is)e(that)h(the)f(v)-5 b(ariable)23 b(is)f(assigned)g(exactly)i(the)e(c)m(haracters)i(read) -1110 737 y(\(with)30 b(the)h(exception)h(of)e(bac)m(kslash;)h(see)g -(the)g Ft(-r)f Fu(option)h(b)s(elo)m(w\).)630 894 y Ft(-p)f -Fj(prompt)66 b Fu(Displa)m(y)38 b Fr(prompt)p Fu(,)g(without)e(a)h -(trailing)h(newline,)h(b)s(efore)d(attempting)i(to)1110 -1004 y(read)f(an)m(y)h(input.)60 b(The)37 b(prompt)g(is)g(displa)m(y)m -(ed)h(only)f(if)g(input)g(is)g(coming)1110 1114 y(from)30 -b(a)h(terminal.)630 1271 y Ft(-r)384 b Fu(If)21 b(this)h(option)g(is)f +1110 2329 y(\(with)30 b(the)h(exception)h(of)e(bac)m(kslash;)h(see)g +(the)g Ft(-r)f Fu(option)h(b)s(elo)m(w\).)630 2480 y +Ft(-p)f Fj(prompt)66 b Fu(Displa)m(y)38 b Fr(prompt)p +Fu(,)g(without)e(a)h(trailing)h(newline,)h(b)s(efore)d(attempting)i(to) +1110 2590 y(read)f(an)m(y)h(input.)60 b(The)37 b(prompt)g(is)g(displa)m +(y)m(ed)h(only)f(if)g(input)g(is)g(coming)1110 2699 y(from)30 +b(a)h(terminal.)630 2851 y Ft(-r)384 b Fu(If)21 b(this)h(option)g(is)f (giv)m(en,)k(bac)m(kslash)d(do)s(es)f(not)h(act)h(as)f(an)f(escap)s(e)h -(c)m(haracter.)1110 1380 y(The)30 b(bac)m(kslash)i(is)f(considered)g +(c)m(haracter.)1110 2960 y(The)30 b(bac)m(kslash)i(is)f(considered)g (to)h(b)s(e)e(part)h(of)g(the)g(line.)43 b(In)30 b(particular,)i(a)1110 -1490 y(bac)m(kslash-newline)26 b(pair)e(ma)m(y)h(not)g(then)g(b)s(e)f -(used)g(as)h(a)g(line)g(con)m(tin)m(uation.)630 1647 +3070 y(bac)m(kslash-newline)26 b(pair)e(ma)m(y)h(not)g(then)g(b)s(e)f +(used)g(as)h(a)g(line)g(con)m(tin)m(uation.)630 3221 y Ft(-s)384 b Fu(Silen)m(t)28 b(mo)s(de.)40 b(If)27 b(input)f(is)i (coming)g(from)f(a)h(terminal,)h(c)m(haracters)g(are)f(not)1110 -1757 y(ec)m(ho)s(ed.)630 1914 y Ft(-t)i Fj(timeout)1110 -2024 y Fu(Cause)23 b Ft(read)f Fu(to)i(time)f(out)h(and)e(return)g +3331 y(ec)m(ho)s(ed.)630 3482 y Ft(-t)i Fj(timeout)1110 +3592 y Fu(Cause)23 b Ft(read)f Fu(to)i(time)f(out)h(and)e(return)g (failure)h(if)g(a)h(complete)g(line)g(of)f(input)1110 -2133 y(\(or)h(a)f(sp)s(eci\014ed)g(n)m(um)m(b)s(er)f(of)i(c)m +3701 y(\(or)h(a)f(sp)s(eci\014ed)g(n)m(um)m(b)s(er)f(of)i(c)m (haracters\))h(is)e(not)h(read)f(within)g Fr(timeout)j -Fu(sec-)1110 2243 y(onds.)43 b Fr(timeout)34 b Fu(ma)m(y)e(b)s(e)e(a)i +Fu(sec-)1110 3811 y(onds.)43 b Fr(timeout)34 b Fu(ma)m(y)e(b)s(e)e(a)i (decimal)g(n)m(um)m(b)s(er)e(with)h(a)h(fractional)g(p)s(ortion)1110 -2352 y(follo)m(wing)39 b(the)f(decimal)g(p)s(oin)m(t.)63 +3921 y(follo)m(wing)39 b(the)f(decimal)g(p)s(oin)m(t.)63 b(This)37 b(option)h(is)g(only)f(e\013ectiv)m(e)k(if)c -Ft(read)1110 2462 y Fu(is)c(reading)h(input)e(from)h(a)h(terminal,)h +Ft(read)1110 4030 y Fu(is)c(reading)h(input)e(from)h(a)h(terminal,)h (pip)s(e,)e(or)h(other)f(sp)s(ecial)h(\014le;)h(it)f(has)1110 -2572 y(no)f(e\013ect)i(when)d(reading)i(from)f(regular)g(\014les.)50 -b(If)33 b Ft(read)f Fu(times)i(out,)g Ft(read)1110 2681 +4140 y(no)f(e\013ect)i(when)d(reading)i(from)f(regular)g(\014les.)50 +b(If)33 b Ft(read)f Fu(times)i(out,)g Ft(read)1110 4249 y Fu(sa)m(v)m(es)41 b(an)m(y)f(partial)h(input)e(read)g(in)m(to)i(the)f (sp)s(eci\014ed)f(v)-5 b(ariable)40 b Fr(name)p Fu(.)69 -b(If)1110 2791 y Fr(timeout)31 b Fu(is)c(0,)i Ft(read)d +b(If)1110 4359 y Fr(timeout)31 b Fu(is)c(0,)i Ft(read)d Fu(returns)h(immediately)-8 b(,)30 b(without)d(trying)h(to)g(read)g(an) -m(y)1110 2900 y(data.)49 b(The)33 b(exit)h(status)f(is)g(0)g(if)g +m(y)1110 4468 y(data.)49 b(The)33 b(exit)h(status)f(is)g(0)g(if)g (input)f(is)h(a)m(v)-5 b(ailable)36 b(on)c(the)i(sp)s(eci\014ed)e -(\014le)1110 3010 y(descriptor,)37 b(or)e(the)h(read)f(will)h(return)e -(EOF,)h(non-zero)h(otherwise.)56 b(The)1110 3120 y(exit)31 +(\014le)1110 4578 y(descriptor,)37 b(or)e(the)h(read)f(will)h(return)e +(EOF,)h(non-zero)h(otherwise.)56 b(The)1110 4688 y(exit)31 b(status)g(is)f(greater)i(than)e(128)i(if)e(the)h(timeout)g(is)f -(exceeded.)630 3277 y Ft(-u)g Fj(fd)258 b Fu(Read)31 +(exceeded.)630 4839 y Ft(-u)g Fj(fd)258 b Fu(Read)31 b(input)e(from)h(\014le)g(descriptor)h Fr(fd)p Fu(.)630 -3434 y(If)h(no)g Fr(name)5 b Fu(s)33 b(are)f(supplied,)g(the)h(line)g -(read,)g(without)f(the)h(ending)f(delimiter)h(but)e(oth-)630 -3544 y(erwise)36 b(unmo)s(di\014ed,)e(is)i(assigned)f(to)h(the)g(v)-5 +4990 y(Other)36 b(than)g(the)h(case)h(where)e Fr(delim)g +Fu(is)h(the)f(empt)m(y)h(string,)i Ft(read)c Fu(ignores)i(an)m(y)g(NUL) +630 5100 y(c)m(haracters)32 b(in)e(the)g(input.)630 5230 +y(If)i(no)g Fr(name)5 b Fu(s)33 b(are)f(supplied,)g(the)h(line)g(read,) +g(without)f(the)h(ending)f(delimiter)h(but)e(oth-)630 +5340 y(erwise)36 b(unmo)s(di\014ed,)e(is)i(assigned)f(to)h(the)g(v)-5 b(ariable)36 b Ft(REPLY)p Fu(.)55 b(The)34 b(exit)j(status)e(is)h -(zero,)630 3653 y(unless)i(end-of-\014le)h(is)f(encoun)m(tered,)j -Ft(read)d Fu(times)h(out)f(\(in)h(whic)m(h)f(case)h(the)g(status)g(is) -630 3763 y(greater)31 b(than)f(128\),)i(a)e(v)-5 b(ariable)30 -b(assignmen)m(t)h(error)f(\(suc)m(h)f(as)i(assigning)f(to)h(a)f -(readonly)630 3872 y(v)-5 b(ariable\))30 b(o)s(ccurs,)f(or)f(an)h(in)m -(v)-5 b(alid)29 b(\014le)g(descriptor)f(is)h(supplied)e(as)i(the)g -(argumen)m(t)g(to)g Ft(-u)p Fu(.)150 4030 y Ft(readarray)870 -4139 y(readarray)45 b([-d)i Fj(delim)p Ft(])f([-n)h Fj(count)p +(zero,)p eop end +%%Page: 67 73 +TeXDict begin 67 72 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(67)630 299 y(unless)38 +b(end-of-\014le)h(is)f(encoun)m(tered,)j Ft(read)d Fu(times)h(out)f +(\(in)h(whic)m(h)f(case)h(the)g(status)g(is)630 408 y(greater)31 +b(than)f(128\),)i(a)e(v)-5 b(ariable)30 b(assignmen)m(t)h(error)f +(\(suc)m(h)f(as)i(assigning)f(to)h(a)f(readonly)630 518 +y(v)-5 b(ariable\))30 b(o)s(ccurs,)f(or)f(an)h(in)m(v)-5 +b(alid)29 b(\014le)g(descriptor)f(is)h(supplied)e(as)i(the)g(argumen)m +(t)g(to)g Ft(-u)p Fu(.)150 678 y Ft(readarray)870 788 +y(readarray)45 b([-d)i Fj(delim)p Ft(])f([-n)h Fj(count)p Ft(])f([-O)h Fj(origin)p Ft(])f([-s)h Fj(count)p Ft(])1061 -4249 y([-t])g([-u)f Fj(fd)p Ft(])h([-C)g Fj(callback)p +897 y([-t])g([-u)f Fj(fd)p Ft(])h([-C)g Fj(callback)p Ft(])f([-c)g Fj(quantum)p Ft(])g([)p Fj(array)p Ft(])630 -4382 y Fu(Read)38 b(lines)f(from)g(the)h(standard)e(input)g(in)m(to)j +1032 y Fu(Read)38 b(lines)f(from)g(the)h(standard)e(input)g(in)m(to)j (the)e(indexed)g(arra)m(y)h(v)-5 b(ariable)38 b Fr(arra)m(y)p -Fu(,)i(or)630 4492 y(from)30 b(\014le)g(descriptor)h +Fu(,)i(or)630 1142 y(from)30 b(\014le)g(descriptor)h Fr(fd)i Fu(if)d(the)h Ft(-u)e Fu(option)i(is)g(supplied.)630 -4625 y(A)f(synon)m(ym)g(for)g Ft(mapfile)p Fu(.)150 4783 -y Ft(source)870 4916 y(source)46 b Fj(filename)630 5049 +1277 y(A)f(synon)m(ym)g(for)g Ft(mapfile)p Fu(.)150 1437 +y Ft(source)870 1572 y(source)46 b Fj(filename)630 1707 y Fu(A)30 b(synon)m(ym)g(for)g Ft(.)g Fu(\(see)i(Section)f(4.1)g -([Bourne)g(Shell)f(Builtins],)h(page)g(48\).)150 5207 -y Ft(type)870 5340 y(type)47 b([-afptP])e([)p Fj(name)i -Ft(...)o(])p eop end -%%Page: 65 71 -TeXDict begin 65 70 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(65)630 299 y(F)-8 -b(or)42 b(eac)m(h)g Fr(name)p Fu(,)i(indicate)e(ho)m(w)g(it)f(w)m(ould) -g(b)s(e)g(in)m(terpreted)g(if)g(used)f(as)i(a)f(command)630 -408 y(name.)630 543 y(If)g(the)g Ft(-t)g Fu(option)h(is)f(used,)j -Ft(type)c Fu(prin)m(ts)h(a)h(single)g(w)m(ord)f(whic)m(h)g(is)g(one)h -(of)g(`)p Ft(alias)p Fu(',)630 653 y(`)p Ft(function)p -Fu(',)32 b(`)p Ft(builtin)p Fu(',)g(`)p Ft(file)p Fu(')g(or)h(`)p -Ft(keyword)p Fu(',)f(if)h Fr(name)38 b Fu(is)33 b(an)f(alias,)j(shell)e -(function,)630 762 y(shell)i(builtin,)g(disk)g(\014le,)h(or)e(shell)h -(reserv)m(ed)g(w)m(ord,)h(resp)s(ectiv)m(ely)-8 b(.)55 -b(If)34 b(the)h Fr(name)40 b Fu(is)35 b(not)630 872 y(found,)29 -b(then)h(nothing)h(is)f(prin)m(ted,)g(and)g Ft(type)f -Fu(returns)g(a)i(failure)g(status.)630 1007 y(If)25 b(the)g -Ft(-p)g Fu(option)h(is)f(used,)h Ft(type)e Fu(either)h(returns)g(the)g -(name)g(of)h(the)f(disk)g(\014le)g(that)h(w)m(ould)630 -1116 y(b)s(e)k(executed,)h(or)g(nothing)f(if)g Ft(-t)g -Fu(w)m(ould)g(not)h(return)e(`)p Ft(file)p Fu('.)630 -1251 y(The)h Ft(-P)g Fu(option)h(forces)g(a)g(path)f(searc)m(h)h(for)g -(eac)m(h)g Fr(name)p Fu(,)g(ev)m(en)g(if)g Ft(-t)f Fu(w)m(ould)g(not)h -(return)630 1360 y(`)p Ft(file)p Fu('.)630 1495 y(If)f(a)g(command)g -(is)g(hashed,)f Ft(-p)h Fu(and)f Ft(-P)g Fu(prin)m(t)h(the)g(hashed)f -(v)-5 b(alue,)31 b(whic)m(h)f(is)g(not)g(neces-)630 1605 -y(sarily)h(the)f(\014le)h(that)g(app)s(ears)e(\014rst)h(in)g -Ft($PATH)p Fu(.)630 1739 y(If)22 b(the)i Ft(-a)e Fu(option)h(is)g -(used,)h Ft(type)e Fu(returns)f(all)j(of)f(the)g(places)h(that)f(con)m -(tain)i(an)d(executable)630 1849 y(named)32 b Fr(\014le)p -Fu(.)49 b(This)32 b(includes)h(aliases)h(and)e(functions,)i(if)f(and)f -(only)h(if)g(the)g Ft(-p)f Fu(option)i(is)630 1958 y(not)d(also)g -(used.)630 2093 y(If)f(the)g Ft(-f)g Fu(option)g(is)h(used,)e -Ft(type)g Fu(do)s(es)h(not)h(attempt)g(to)g(\014nd)d(shell)j -(functions,)f(as)g(with)630 2203 y(the)h Ft(command)d -Fu(builtin.)630 2337 y(The)j(return)e(status)j(is)f(zero)h(if)f(all)g -(of)h(the)f Fr(name)5 b Fu(s)31 b(are)g(found,)f(non-zero)i(if)f(an)m -(y)g(are)h(not)630 2447 y(found.)150 2607 y Ft(typeset)870 -2741 y(typeset)46 b([-afFgrxilnrtux])d([-p])k([)p Fj(name)p -Ft([=)p Fj(value)p Ft(])d(...)o(])630 2876 y Fu(The)31 +([Bourne)g(Shell)f(Builtins],)h(page)g(49\).)150 1867 +y Ft(type)870 2002 y(type)47 b([-afptP])e([)p Fj(name)i +Ft(...)o(])630 2137 y Fu(F)-8 b(or)42 b(eac)m(h)g Fr(name)p +Fu(,)i(indicate)e(ho)m(w)g(it)f(w)m(ould)g(b)s(e)g(in)m(terpreted)g(if) +g(used)f(as)i(a)f(command)630 2246 y(name.)630 2381 y(If)g(the)g +Ft(-t)g Fu(option)h(is)f(used,)j Ft(type)c Fu(prin)m(ts)h(a)h(single)g +(w)m(ord)f(whic)m(h)g(is)g(one)h(of)g(`)p Ft(alias)p +Fu(',)630 2491 y(`)p Ft(keyword)p Fu(',)32 b(`)p Ft(function)p +Fu(',)g(`)p Ft(builtin)p Fu(',)g(or)h(`)p Ft(file)p Fu(',)g(if)g +Fr(name)38 b Fu(is)33 b(an)g(alias,)i(shell)e(reserv)m(ed)630 +2600 y(w)m(ord,)39 b(shell)e(function,)i(shell)e(builtin,)i(or)e +(executable)i(disk)d(\014le,)j(resp)s(ectiv)m(ely)-8 +b(.)63 b(If)37 b(the)630 2710 y Fr(name)f Fu(is)30 b(not)h(found,)e +(then)h(nothing)g(is)h(prin)m(ted,)f(and)g Ft(type)f +Fu(returns)g(a)i(failure)f(status.)630 2845 y(If)25 b(the)h +Ft(-p)f Fu(option)g(is)h(used,)g Ft(type)e Fu(either)i(returns)e(the)i +(name)f(of)h(the)g(executable)h(\014le)e(that)630 2954 +y(w)m(ould)30 b(b)s(e)g(found)f(b)m(y)h(searc)m(hing)h +Ft($PATH)p Fu(,)f(or)g(nothing)g(if)h Ft(-t)e Fu(w)m(ould)i(not)f +(return)f(`)p Ft(file)p Fu('.)630 3089 y(The)h Ft(-P)g +Fu(option)h(forces)g(a)g(path)f(searc)m(h)h(for)g(eac)m(h)g +Fr(name)p Fu(,)g(ev)m(en)g(if)g Ft(-t)f Fu(w)m(ould)g(not)h(return)630 +3199 y(`)p Ft(file)p Fu('.)630 3334 y(If)e(a)h Fr(name)k +Fu(is)29 b(presen)m(t)h(in)f(the)g(table)h(of)g(hashed)e(commands,)i +(options)f Ft(-p)g Fu(and)g Ft(-P)f Fu(prin)m(t)630 3443 +y(the)j(hashed)e(v)-5 b(alue,)31 b(whic)m(h)f(is)h(not)f(necessarily)i +(the)e(\014le)h(that)g(app)s(ears)e(\014rst)h(in)g Ft($PATH)p +Fu(.)630 3578 y(If)e(the)h Ft(-a)f Fu(option)h(is)f(used,)h +Ft(type)e Fu(returns)g(all)j(of)e(the)h(places)g(that)g(con)m(tain)h(a) +f(command)630 3688 y(named)c Fr(name)p Fu(.)39 b(This)25 +b(includes)g(aliases,)j(reserv)m(ed)e(w)m(ords,)g(functions,)h(and)d +(builtins,)j(but)630 3797 y(the)34 b(path)f(searc)m(h)i(options)f(\()p +Ft(-p)f Fu(and)h Ft(-P)p Fu(\))f(can)h(b)s(e)f(supplied)g(to)h +(restrict)h(the)f(output)f(to)630 3907 y(executable)k(\014les.)55 +b(If)34 b Ft(-a)h Fu(is)g(supplied)f(with)h Ft(-p)p Fu(,)h +Ft(type)e Fu(do)s(es)g(not)i(lo)s(ok)g(in)e(the)i(table)g(of)630 +4016 y(hashed)30 b(commands,)g(and)g(only)g(p)s(erforms)f(a)i +Ft(PATH)e Fu(searc)m(h)i(for)f Fr(name)p Fu(.)630 4151 +y(If)g(the)g Ft(-f)g Fu(option)g(is)h(used,)e Ft(type)g +Fu(do)s(es)h(not)h(attempt)g(to)g(\014nd)d(shell)j(functions,)f(as)g +(with)630 4261 y(the)h Ft(command)d Fu(builtin.)630 4396 +y(The)j(return)e(status)j(is)f(zero)h(if)f(all)g(of)h(the)f +Fr(name)5 b Fu(s)31 b(are)g(found,)f(non-zero)i(if)f(an)m(y)g(are)h +(not)630 4505 y(found.)150 4666 y Ft(typeset)870 4800 +y(typeset)46 b([-afFgrxilnrtux])d([-p])k([)p Fj(name)p +Ft([=)p Fj(value)p Ft(])d(...)o(])630 4935 y Fu(The)31 b Ft(typeset)e Fu(command)i(is)g(supplied)f(for)h(compatibilit)m(y)i -(with)e(the)g(Korn)f(shell.)44 b(It)31 b(is)630 2985 +(with)e(the)g(Korn)f(shell.)44 b(It)31 b(is)630 5045 y(a)g(synon)m(ym)f(for)g(the)g Ft(declare)f Fu(builtin)h(command.)150 -3145 y Ft(ulimit)870 3280 y(ulimit)46 b([-HS])g(-a)870 -3389 y(ulimit)g([-HS])g([-bcdefiklmnpqrstuvxPRT])c([)p -Fj(limit)p Ft(])630 3524 y(ulimit)25 b Fu(pro)m(vides)h(con)m(trol)i(o) -m(v)m(er)g(the)f(resources)f(a)m(v)-5 b(ailable)29 b(to)e(pro)s(cesses) -f(started)h(b)m(y)g(the)630 3634 y(shell,)i(on)f(systems)g(that)h(allo) -m(w)h(suc)m(h)e(con)m(trol.)41 b(If)28 b(an)g(option)h(is)f(giv)m(en,)i -(it)e(is)h(in)m(terpreted)630 3743 y(as)i(follo)m(ws:)630 -3903 y Ft(-S)384 b Fu(Change)30 b(and)g(rep)s(ort)g(the)g(soft)h(limit) -g(asso)s(ciated)h(with)e(a)h(resource.)630 4062 y Ft(-H)384 -b Fu(Change)30 b(and)g(rep)s(ort)g(the)g(hard)g(limit)h(asso)s(ciated)h -(with)e(a)h(resource.)630 4222 y Ft(-a)384 b Fu(All)31 -b(curren)m(t)f(limits)h(are)g(rep)s(orted;)f(no)g(limits)h(are)g(set.) -630 4382 y Ft(-b)384 b Fu(The)30 b(maxim)m(um)g(so)s(c)m(k)m(et)i -(bu\013er)e(size.)630 4542 y Ft(-c)384 b Fu(The)30 b(maxim)m(um)g(size) -h(of)g(core)g(\014les)f(created.)630 4701 y Ft(-d)384 -b Fu(The)30 b(maxim)m(um)g(size)h(of)g(a)g(pro)s(cess's)f(data)h -(segmen)m(t.)630 4861 y Ft(-e)384 b Fu(The)30 b(maxim)m(um)g(sc)m -(heduling)h(priorit)m(y)f(\()p Ft(")p Fu(nice)p Ft(")p -Fu(\).)630 5021 y Ft(-f)384 b Fu(The)30 b(maxim)m(um)g(size)h(of)g -(\014les)f(written)h(b)m(y)f(the)g(shell)h(and)f(its)h(c)m(hildren.)630 -5180 y Ft(-i)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(p)s -(ending)e(signals.)630 5340 y Ft(-k)384 b Fu(The)30 b(maxim)m(um)g(n)m -(um)m(b)s(er)f(of)i(kqueues)f(that)h(ma)m(y)g(b)s(e)e(allo)s(cated.)p +5205 y Ft(ulimit)870 5340 y(ulimit)46 b([-HS])g(-a)p eop end -%%Page: 66 72 -TeXDict begin 66 71 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(66)630 299 y Ft(-l)384 -b Fu(The)30 b(maxim)m(um)g(size)h(that)g(ma)m(y)g(b)s(e)f(lo)s(c)m(k)m -(ed)i(in)m(to)f(memory)-8 b(.)630 467 y Ft(-m)384 b Fu(The)36 -b(maxim)m(um)g(residen)m(t)h(set)g(size)g(\(man)m(y)g(systems)f(do)h -(not)f(honor)g(this)1110 576 y(limit\).)630 744 y Ft(-n)384 -b Fu(The)38 b(maxim)m(um)h(n)m(um)m(b)s(er)e(of)i(op)s(en)f(\014le)h -(descriptors)g(\(most)g(systems)g(do)1110 854 y(not)31 -b(allo)m(w)g(this)g(v)-5 b(alue)31 b(to)g(b)s(e)e(set\).)630 -1022 y Ft(-p)384 b Fu(The)30 b(pip)s(e)f(bu\013er)h(size.)630 -1190 y Ft(-q)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(b)m -(ytes)g(in)f Fm(posix)f Fu(message)j(queues.)630 1358 +%%Page: 68 74 +TeXDict begin 68 73 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(68)870 299 y Ft(ulimit)46 +b([-HS])g([-bcdefiklmnpqrstuvxPRT])c([)p Fj(limit)p Ft(])630 +432 y(ulimit)25 b Fu(pro)m(vides)h(con)m(trol)i(o)m(v)m(er)g(the)f +(resources)f(a)m(v)-5 b(ailable)29 b(to)e(pro)s(cesses)f(started)h(b)m +(y)g(the)630 542 y(shell,)i(on)f(systems)g(that)h(allo)m(w)h(suc)m(h)e +(con)m(trol.)41 b(If)28 b(an)g(option)h(is)f(giv)m(en,)i(it)e(is)h(in)m +(terpreted)630 651 y(as)i(follo)m(ws:)630 808 y Ft(-S)384 +b Fu(Change)30 b(and)g(rep)s(ort)g(the)g(soft)h(limit)g(asso)s(ciated)h +(with)e(a)h(resource.)630 965 y Ft(-H)384 b Fu(Change)30 +b(and)g(rep)s(ort)g(the)g(hard)g(limit)h(asso)s(ciated)h(with)e(a)h +(resource.)630 1122 y Ft(-a)384 b Fu(All)31 b(curren)m(t)f(limits)h +(are)g(rep)s(orted;)f(no)g(limits)h(are)g(set.)630 1279 +y Ft(-b)384 b Fu(The)30 b(maxim)m(um)g(so)s(c)m(k)m(et)i(bu\013er)e +(size.)630 1436 y Ft(-c)384 b Fu(The)30 b(maxim)m(um)g(size)h(of)g +(core)g(\014les)f(created.)630 1592 y Ft(-d)384 b Fu(The)30 +b(maxim)m(um)g(size)h(of)g(a)g(pro)s(cess's)f(data)h(segmen)m(t.)630 +1749 y Ft(-e)384 b Fu(The)30 b(maxim)m(um)g(sc)m(heduling)h(priorit)m +(y)f(\()p Ft(")p Fu(nice)p Ft(")p Fu(\).)630 1906 y Ft(-f)384 +b Fu(The)30 b(maxim)m(um)g(size)h(of)g(\014les)f(written)h(b)m(y)f(the) +g(shell)h(and)f(its)h(c)m(hildren.)630 2063 y Ft(-i)384 +b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(p)s(ending)e +(signals.)630 2220 y Ft(-k)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s +(er)f(of)i(kqueues)f(that)h(ma)m(y)g(b)s(e)e(allo)s(cated.)630 +2377 y Ft(-l)384 b Fu(The)30 b(maxim)m(um)g(size)h(that)g(ma)m(y)g(b)s +(e)f(lo)s(c)m(k)m(ed)i(in)m(to)f(memory)-8 b(.)630 2534 +y Ft(-m)384 b Fu(The)36 b(maxim)m(um)g(residen)m(t)h(set)g(size)g +(\(man)m(y)g(systems)f(do)h(not)f(honor)g(this)1110 2643 +y(limit\).)630 2800 y Ft(-n)384 b Fu(The)38 b(maxim)m(um)h(n)m(um)m(b)s +(er)e(of)i(op)s(en)f(\014le)h(descriptors)g(\(most)g(systems)g(do)1110 +2910 y(not)31 b(allo)m(w)g(this)g(v)-5 b(alue)31 b(to)g(b)s(e)e(set\).) +630 3067 y Ft(-p)384 b Fu(The)30 b(pip)s(e)f(bu\013er)h(size.)630 +3223 y Ft(-q)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(b)m +(ytes)g(in)f Fm(posix)f Fu(message)j(queues.)630 3380 y Ft(-r)384 b Fu(The)30 b(maxim)m(um)g(real-time)i(sc)m(heduling)f -(priorit)m(y)-8 b(.)630 1526 y Ft(-s)384 b Fu(The)30 -b(maxim)m(um)g(stac)m(k)i(size.)630 1694 y Ft(-t)384 +(priorit)m(y)-8 b(.)630 3537 y Ft(-s)384 b Fu(The)30 +b(maxim)m(um)g(stac)m(k)i(size.)630 3694 y Ft(-t)384 b Fu(The)30 b(maxim)m(um)g(amoun)m(t)h(of)f(cpu)g(time)h(in)f(seconds.) -630 1862 y Ft(-u)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i +630 3851 y Ft(-u)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i (pro)s(cesses)f(a)m(v)-5 b(ailable)33 b(to)e(a)f(single)i(user.)630 -2030 y Ft(-v)384 b Fu(The)41 b(maxim)m(um)h(amoun)m(t)g(of)h(virtual)f +4008 y Ft(-v)384 b Fu(The)41 b(maxim)m(um)h(amoun)m(t)g(of)h(virtual)f (memory)g(a)m(v)-5 b(ailable)44 b(to)e(the)g(shell,)1110 -2140 y(and,)30 b(on)g(some)h(systems,)g(to)g(its)g(c)m(hildren.)630 -2308 y Ft(-x)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i -(\014le)f(lo)s(c)m(ks.)630 2476 y Ft(-P)384 b Fu(The)30 +4117 y(and,)30 b(on)g(some)h(systems,)g(to)g(its)g(c)m(hildren.)630 +4274 y Ft(-x)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i +(\014le)f(lo)s(c)m(ks.)630 4431 y Ft(-P)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(pseudoterminals.)630 -2643 y Ft(-R)384 b Fu(The)27 b(maxim)m(um)h(time)h(a)f(real-time)i(pro) +4588 y Ft(-R)384 b Fu(The)27 b(maxim)m(um)h(time)h(a)f(real-time)i(pro) s(cess)d(can)i(run)d(b)s(efore)i(blo)s(c)m(king,)h(in)1110 -2753 y(microseconds.)630 2921 y Ft(-T)384 b Fu(The)30 -b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(threads.)630 3089 +4697 y(microseconds.)630 4854 y Ft(-T)384 b Fu(The)30 +b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(threads.)630 5011 y(If)36 b Fr(limit)k Fu(is)c(giv)m(en,)k(and)c(the)h Ft(-a)f Fu(option)h(is)f(not)h(used,)h Fr(limit)h Fu(is)e(the)g(new)f -(v)-5 b(alue)37 b(of)g(the)630 3199 y(sp)s(eci\014ed)c(resource.)51 +(v)-5 b(alue)37 b(of)g(the)630 5121 y(sp)s(eci\014ed)c(resource.)51 b(The)34 b(sp)s(ecial)g Fr(limit)j Fu(v)-5 b(alues)34 b Ft(hard)p Fu(,)g Ft(soft)p Fu(,)g(and)f Ft(unlimited)e -Fu(stand)630 3308 y(for)h(the)g(curren)m(t)g(hard)f(limit,)i(the)g +Fu(stand)630 5230 y(for)h(the)g(curren)m(t)g(hard)f(limit,)i(the)g (curren)m(t)f(soft)g(limit,)h(and)f(no)g(limit,)h(resp)s(ectiv)m(ely)-8 -b(.)48 b(A)630 3418 y(hard)24 b(limit)i(cannot)g(b)s(e)e(increased)h(b) +b(.)48 b(A)630 5340 y(hard)24 b(limit)i(cannot)g(b)s(e)e(increased)h(b) m(y)g(a)h(non-ro)s(ot)f(user)f(once)i(it)g(is)f(set;)j(a)d(soft)g -(limit)h(ma)m(y)630 3527 y(b)s(e)37 b(increased)h(up)e(to)j(the)f(v)-5 -b(alue)38 b(of)f(the)h(hard)f(limit.)63 b(Otherwise,)39 -b(the)f(curren)m(t)f(v)-5 b(alue)630 3637 y(of)39 b(the)g(soft)h(limit) -g(for)f(the)g(sp)s(eci\014ed)f(resource)h(is)g(prin)m(ted,)i(unless)e -(the)g Ft(-H)f Fu(option)i(is)630 3747 y(supplied.)47 -b(When)33 b(more)g(than)g(one)g(resource)g(is)g(sp)s(eci\014ed,)g(the)g -(limit)h(name)f(and)f(unit,)630 3856 y(if)27 b(appropriate,)h(are)f -(prin)m(ted)g(b)s(efore)g(the)g(v)-5 b(alue.)40 b(When)27 -b(setting)h(new)e(limits,)j(if)e(neither)630 3966 y Ft(-H)38 -b Fu(nor)g Ft(-S)g Fu(is)h(supplied,)h(b)s(oth)e(the)h(hard)f(and)g -(soft)h(limits)g(are)g(set.)67 b(If)38 b(no)h(option)g(is)630 -4075 y(giv)m(en,)c(then)f Ft(-f)e Fu(is)i(assumed.)49 -b(V)-8 b(alues)35 b(are)e(in)h(1024-b)m(yte)i(incremen)m(ts,)f(except)f -(for)f Ft(-t)p Fu(,)630 4185 y(whic)m(h)e(is)g(in)g(seconds;)h -Ft(-R)p Fu(,)g(whic)m(h)f(is)g(in)g(microseconds;)h Ft(-p)p -Fu(,)g(whic)m(h)f(is)g(in)g(units)g(of)g(512-)630 4295 -y(b)m(yte)k(blo)s(c)m(ks;)j Ft(-P)p Fu(,)e Ft(-T)p Fu(,)f -Ft(-b)p Fu(,)h Ft(-k)p Fu(,)f Ft(-n)g Fu(and)f Ft(-u)p -Fu(,)h(whic)m(h)g(are)g(unscaled)g(v)-5 b(alues;)37 b(and,)f(when)630 -4404 y(in)g Fm(posix)f Fu(Mo)s(de)h(\(see)g(Section)h(6.11)g([Bash)g -(POSIX)d(Mo)s(de],)k(page)f(106\),)i Ft(-c)c Fu(and)g -Ft(-f)p Fu(,)630 4514 y(whic)m(h)30 b(are)h(in)f(512-b)m(yte)j -(incremen)m(ts.)630 4653 y(The)h(return)g(status)h(is)f(zero)i(unless)e -(an)g(in)m(v)-5 b(alid)36 b(option)f(or)f(argumen)m(t)i(is)e(supplied,) -h(or)630 4762 y(an)30 b(error)g(o)s(ccurs)g(while)h(setting)g(a)g(new)f -(limit.)150 4930 y Ft(unalias)870 5069 y(unalias)46 b([-a])g([)p -Fj(name)h Ft(...)g(])630 5208 y Fu(Remo)m(v)m(e)42 b(eac)m(h)f +(limit)h(ma)m(y)p eop end +%%Page: 69 75 +TeXDict begin 69 74 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(69)630 299 y(b)s(e)37 +b(increased)h(up)e(to)j(the)f(v)-5 b(alue)38 b(of)f(the)h(hard)f +(limit.)63 b(Otherwise,)39 b(the)f(curren)m(t)f(v)-5 +b(alue)630 408 y(of)39 b(the)g(soft)h(limit)g(for)f(the)g(sp)s +(eci\014ed)f(resource)h(is)g(prin)m(ted,)i(unless)e(the)g +Ft(-H)f Fu(option)i(is)630 518 y(supplied.)47 b(When)33 +b(more)g(than)g(one)g(resource)g(is)g(sp)s(eci\014ed,)g(the)g(limit)h +(name)f(and)f(unit,)630 628 y(if)27 b(appropriate,)h(are)f(prin)m(ted)g +(b)s(efore)g(the)g(v)-5 b(alue.)40 b(When)27 b(setting)h(new)e(limits,) +j(if)e(neither)630 737 y Ft(-H)38 b Fu(nor)g Ft(-S)g +Fu(is)h(supplied,)h(b)s(oth)e(the)h(hard)f(and)g(soft)h(limits)g(are)g +(set.)67 b(If)38 b(no)h(option)g(is)630 847 y(giv)m(en,)c(then)f +Ft(-f)e Fu(is)i(assumed.)49 b(V)-8 b(alues)35 b(are)e(in)h(1024-b)m +(yte)i(incremen)m(ts,)f(except)f(for)f Ft(-t)p Fu(,)630 +956 y(whic)m(h)e(is)g(in)g(seconds;)h Ft(-R)p Fu(,)g(whic)m(h)f(is)g +(in)g(microseconds;)h Ft(-p)p Fu(,)g(whic)m(h)f(is)g(in)g(units)g(of)g +(512-)630 1066 y(b)m(yte)k(blo)s(c)m(ks;)j Ft(-P)p Fu(,)e +Ft(-T)p Fu(,)f Ft(-b)p Fu(,)h Ft(-k)p Fu(,)f Ft(-n)g +Fu(and)f Ft(-u)p Fu(,)h(whic)m(h)g(are)g(unscaled)g(v)-5 +b(alues;)37 b(and,)f(when)630 1176 y(in)g Fm(posix)f +Fu(Mo)s(de)h(\(see)g(Section)h(6.11)g([Bash)g(POSIX)d(Mo)s(de],)k(page) +f(109\),)i Ft(-c)c Fu(and)g Ft(-f)p Fu(,)630 1285 y(whic)m(h)30 +b(are)h(in)f(512-b)m(yte)j(incremen)m(ts.)630 1418 y(The)h(return)g +(status)h(is)f(zero)i(unless)e(an)g(in)m(v)-5 b(alid)36 +b(option)f(or)f(argumen)m(t)i(is)e(supplied,)h(or)630 +1528 y(an)30 b(error)g(o)s(ccurs)g(while)h(setting)g(a)g(new)f(limit.) +150 1685 y Ft(unalias)870 1818 y(unalias)46 b([-a])g([)p +Fj(name)h Ft(...)g(])630 1951 y Fu(Remo)m(v)m(e)42 b(eac)m(h)f Fr(name)k Fu(from)39 b(the)i(list)f(of)g(aliases.)71 b(If)40 b Ft(-a)f Fu(is)h(supplied,)h(all)g(aliases)h(are)630 -5317 y(remo)m(v)m(ed.)g(Aliases)31 b(are)g(describ)s(ed)e(in)h(Section) -i(6.6)f([Aliases],)h(page)f(100.)p eop end -%%Page: 67 73 -TeXDict begin 67 72 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(67)150 299 y Fs(4.3)68 -b(Mo)t(difying)45 b(Shell)g(Beha)l(vior)150 520 y Fk(4.3.1)63 -b(The)41 b(Set)g(Builtin)150 667 y Fu(This)35 b(builtin)h(is)g(so)g +2061 y(remo)m(v)m(ed.)g(Aliases)31 b(are)g(describ)s(ed)e(in)h(Section) +i(6.6)f([Aliases],)h(page)f(103.)150 2299 y Fs(4.3)68 +b(Mo)t(difying)45 b(Shell)g(Beha)l(vior)150 2522 y Fk(4.3.1)63 +b(The)41 b(Set)g(Builtin)150 2669 y Fu(This)35 b(builtin)h(is)g(so)g (complicated)i(that)f(it)f(deserv)m(es)h(its)f(o)m(wn)g(section.)59 b Ft(set)35 b Fu(allo)m(ws)j(y)m(ou)e(to)h(c)m(hange)150 -777 y(the)c(v)-5 b(alues)34 b(of)f(shell)g(options)h(and)e(set)i(the)f +2779 y(the)c(v)-5 b(alues)34 b(of)f(shell)g(options)h(and)e(set)i(the)f (p)s(ositional)h(parameters,)h(or)e(to)h(displa)m(y)f(the)g(names)h -(and)150 886 y(v)-5 b(alues)31 b(of)f(shell)h(v)-5 b(ariables.)150 -1041 y Ft(set)870 1172 y(set)47 b([-abefhkmnptuvxBCEHPT])42 +(and)150 2888 y(v)-5 b(alues)31 b(of)f(shell)h(v)-5 b(ariables.)150 +3045 y Ft(set)870 3178 y(set)47 b([-abefhkmnptuvxBCEHPT])42 b([-o)47 b Fj(option-name)p Ft(])d([--])j([-])g([)p Fj(argument)e -Ft(...)o(])870 1282 y(set)i([+abefhkmnptuvxBCEHPT])42 +Ft(...)o(])870 3288 y(set)i([+abefhkmnptuvxBCEHPT])42 b([+o)47 b Fj(option-name)p Ft(])d([--])j([-])g([)p Fj(argument)e -Ft(...)o(])630 1414 y Fu(If)22 b(no)h(options)g(or)g(argumen)m(ts)g -(are)g(supplied,)g Ft(set)f Fu(displa)m(ys)g(the)h(names)g(and)f(v)-5 -b(alues)23 b(of)g(all)630 1523 y(shell)j(v)-5 b(ariables)27 -b(and)e(functions,)h(sorted)g(according)h(to)g(the)f(curren)m(t)f(lo)s -(cale,)k(in)c(a)i(format)630 1633 y(that)i(ma)m(y)h(b)s(e)e(reused)g -(as)h(input)f(for)h(setting)h(or)e(resetting)i(the)f(curren)m(tly-set)h -(v)-5 b(ariables.)630 1743 y(Read-only)37 b(v)-5 b(ariables)37 +Ft(...)o(])870 3397 y(set)i(-o)870 3507 y(set)g(+o)630 +3640 y Fu(If)22 b(no)h(options)g(or)g(argumen)m(ts)g(are)g(supplied,)g +Ft(set)f Fu(displa)m(ys)g(the)h(names)g(and)f(v)-5 b(alues)23 +b(of)g(all)630 3750 y(shell)j(v)-5 b(ariables)27 b(and)e(functions,)h +(sorted)g(according)h(to)g(the)f(curren)m(t)f(lo)s(cale,)k(in)c(a)i +(format)630 3859 y(that)i(ma)m(y)h(b)s(e)e(reused)g(as)h(input)f(for)h +(setting)h(or)e(resetting)i(the)f(curren)m(tly-set)h(v)-5 +b(ariables.)630 3969 y(Read-only)37 b(v)-5 b(ariables)37 b(cannot)h(b)s(e)e(reset.)59 b(In)36 b Fm(posix)g Fu(mo)s(de,)i(only)f -(shell)f(v)-5 b(ariables)38 b(are)630 1852 y(listed.)630 -1984 y(When)29 b(options)g(are)g(supplied,)f(they)h(set)h(or)f(unset)f +(shell)f(v)-5 b(ariables)38 b(are)630 4079 y(listed.)630 +4212 y(When)29 b(options)g(are)g(supplied,)f(they)h(set)h(or)f(unset)f (shell)h(attributes.)41 b(Options,)29 b(if)g(sp)s(ec-)630 -2094 y(i\014ed,)h(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)630 -2248 y Ft(-a)384 b Fu(Eac)m(h)37 b(v)-5 b(ariable)36 +4321 y(i\014ed,)h(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)630 +4478 y Ft(-a)384 b Fu(Eac)m(h)37 b(v)-5 b(ariable)36 b(or)g(function)g(that)g(is)g(created)h(or)f(mo)s(di\014ed)f(is)h(giv)m -(en)h(the)1110 2357 y(exp)s(ort)28 b(attribute)h(and)f(mark)m(ed)g(for) +(en)h(the)1110 4588 y(exp)s(ort)28 b(attribute)h(and)f(mark)m(ed)g(for) g(exp)s(ort)g(to)h(the)g(en)m(vironmen)m(t)f(of)h(sub-)1110 -2467 y(sequen)m(t)i(commands.)630 2621 y Ft(-b)384 b +4697 y(sequen)m(t)i(commands.)630 4854 y Ft(-b)384 b Fu(Cause)44 b(the)h(status)g(of)f(terminated)h(bac)m(kground)g(jobs)f -(to)h(b)s(e)f(rep)s(orted)1110 2730 y(immediately)-8 +(to)h(b)s(e)f(rep)s(orted)1110 4964 y(immediately)-8 b(,)30 b(rather)d(than)f(b)s(efore)h(prin)m(ting)g(the)g(next)g -(primary)g(prompt.)630 2885 y Ft(-e)384 b Fu(Exit)65 +(primary)g(prompt.)630 5121 y Ft(-e)384 b Fu(Exit)65 b(immediately)g(if)f(a)h(pip)s(eline)e(\(see)i(Section)g(3.2.3)h([Pip)s -(elines],)1110 2994 y(page)51 b(10\),)58 b(whic)m(h)50 +(elines],)1110 5230 y(page)51 b(10\),)58 b(whic)m(h)50 b(ma)m(y)h(consist)h(of)e(a)i(single)f(simple)g(command)f(\(see)1110 -3104 y(Section)30 b(3.2.2)i([Simple)d(Commands],)g(page)h(9\),)h(a)f -(list)g(\(see)h(Section)f(3.2.4)1110 3213 y([Lists],)60 +5340 y(Section)30 b(3.2.2)i([Simple)d(Commands],)g(page)h(9\),)h(a)f +(list)g(\(see)h(Section)f(3.2.4)p eop end +%%Page: 70 76 +TeXDict begin 70 75 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(70)1110 299 y([Lists],)60 b(page)55 b(10\),)60 b(or)54 b(a)g(comp)s(ound)e(command)h(\(see)i -(Section)f(3.2.5)1110 3323 y([Comp)s(ound)60 b(Commands],)70 +(Section)f(3.2.5)1110 408 y([Comp)s(ound)60 b(Commands],)70 b(page)63 b(11\))g(returns)e(a)i(non-zero)f(status.)1110 -3432 y(The)41 b(shell)g(do)s(es)g(not)g(exit)h(if)f(the)h(command)f -(that)h(fails)f(is)g(part)g(of)h(the)1110 3542 y(command)g(list)h +518 y(The)41 b(shell)g(do)s(es)g(not)g(exit)h(if)f(the)h(command)f +(that)h(fails)f(is)g(part)g(of)h(the)1110 628 y(command)g(list)h (immediately)g(follo)m(wing)g(a)g Ft(while)e Fu(or)h -Ft(until)e Fu(k)m(eyw)m(ord,)1110 3652 y(part)61 b(of)g(the)g(test)h -(in)e(an)h Ft(if)f Fu(statemen)m(t,)71 b(part)61 b(of)g(an)m(y)g -(command)1110 3761 y(executed)50 b(in)e(a)h Ft(&&)f Fu(or)h -Ft(||)f Fu(list)h(except)g(the)g(command)g(follo)m(wing)h(the)1110 -3871 y(\014nal)37 b Ft(&&)g Fu(or)g Ft(||)p Fu(,)h(an)m(y)g(command)f +Ft(until)e Fu(k)m(eyw)m(ord,)1110 737 y(part)61 b(of)g(the)g(test)h(in) +e(an)h Ft(if)f Fu(statemen)m(t,)71 b(part)61 b(of)g(an)m(y)g(command) +1110 847 y(executed)50 b(in)e(a)h Ft(&&)f Fu(or)h Ft(||)f +Fu(list)h(except)g(the)g(command)g(follo)m(wing)h(the)1110 +956 y(\014nal)37 b Ft(&&)g Fu(or)g Ft(||)p Fu(,)h(an)m(y)g(command)f (in)g(a)g(pip)s(eline)g(but)g(the)g(last,)j(or)e(if)f(the)1110 -3980 y(command's)c(return)f(status)h(is)g(b)s(eing)g(in)m(v)m(erted)h +1066 y(command's)c(return)f(status)h(is)g(b)s(eing)g(in)m(v)m(erted)h (with)e Ft(!)p Fu(.)48 b(If)33 b(a)g(comp)s(ound)1110 -4090 y(command)g(other)g(than)f(a)i(subshell)d(returns)h(a)h(non-zero)h -(status)f(b)s(ecause)1110 4200 y(a)k(command)g(failed)g(while)g +1176 y(command)g(other)g(than)f(a)i(subshell)d(returns)h(a)h(non-zero)h +(status)f(b)s(ecause)1110 1285 y(a)k(command)g(failed)g(while)g Ft(-e)f Fu(w)m(as)i(b)s(eing)e(ignored,)j(the)e(shell)g(do)s(es)g(not) -1110 4309 y(exit.)42 b(A)30 b(trap)g(on)h Ft(ERR)p Fu(,)e(if)i(set,)g +1110 1395 y(exit.)42 b(A)30 b(trap)g(on)h Ft(ERR)p Fu(,)e(if)i(set,)g (is)f(executed)i(b)s(efore)e(the)g(shell)h(exits.)1110 -4441 y(This)f(option)h(applies)f(to)h(the)g(shell)g(en)m(vironmen)m(t)g -(and)f(eac)m(h)h(subshell)f(en-)1110 4551 y(vironmen)m(t)j(separately)i +1532 y(This)f(option)h(applies)f(to)h(the)g(shell)g(en)m(vironmen)m(t)g +(and)f(eac)m(h)h(subshell)f(en-)1110 1641 y(vironmen)m(t)j(separately)i (\(see)f(Section)g(3.7.3)h([Command)d(Execution)i(En-)1110 -4660 y(vironmen)m(t],)i(page)f(43\),)i(and)d(ma)m(y)h(cause)f -(subshells)g(to)h(exit)g(b)s(efore)f(exe-)1110 4770 y(cuting)d(all)g -(the)g(commands)f(in)g(the)g(subshell.)1110 4902 y(If)41 +1751 y(vironmen)m(t],)i(page)f(44\),)i(and)d(ma)m(y)h(cause)f +(subshells)g(to)h(exit)g(b)s(efore)f(exe-)1110 1861 y(cuting)d(all)g +(the)g(commands)f(in)g(the)g(subshell.)1110 1998 y(If)41 b(a)g(comp)s(ound)e(command)i(or)g(shell)g(function)g(executes)h(in)f -(a)g(con)m(text)1110 5011 y(where)31 b Ft(-e)g Fu(is)g(b)s(eing)g +(a)g(con)m(text)1110 2107 y(where)31 b Ft(-e)g Fu(is)g(b)s(eing)g (ignored,)h(none)f(of)h(the)f(commands)g(executed)h(within)1110 -5121 y(the)j(comp)s(ound)f(command)h(or)g(function)f(b)s(o)s(dy)g(will) -h(b)s(e)f(a\013ected)j(b)m(y)e(the)1110 5230 y Ft(-e)25 +2217 y(the)j(comp)s(ound)f(command)h(or)g(function)f(b)s(o)s(dy)g(will) +h(b)s(e)f(a\013ected)j(b)m(y)e(the)1110 2326 y Ft(-e)25 b Fu(setting,)j(ev)m(en)e(if)g Ft(-e)f Fu(is)h(set)g(and)f(a)h(command) -g(returns)e(a)i(failure)g(status.)1110 5340 y(If)32 b(a)i(comp)s(ound)d +g(returns)e(a)i(failure)g(status.)1110 2436 y(If)32 b(a)i(comp)s(ound)d (command)i(or)g(shell)g(function)f(sets)i Ft(-e)e Fu(while)h(executing) -p eop end -%%Page: 68 74 -TeXDict begin 68 73 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(68)1110 299 y(in)40 -b(a)h(con)m(text)i(where)d Ft(-e)g Fu(is)h(ignored,)j(that)d(setting)h -(will)f(not)g(ha)m(v)m(e)h(an)m(y)1110 408 y(e\013ect)g(un)m(til)e(the) -h(comp)s(ound)e(command)h(or)g(the)g(command)g(con)m(taining)1110 -518 y(the)31 b(function)f(call)h(completes.)630 682 y -Ft(-f)384 b Fu(Disable)31 b(\014lename)g(expansion)f(\(globbing\).)630 -847 y Ft(-h)384 b Fu(Lo)s(cate)33 b(and)e(remem)m(b)s(er)h(\(hash\))g -(commands)f(as)h(they)g(are)g(lo)s(ok)m(ed)h(up)e(for)1110 -956 y(execution.)42 b(This)29 b(option)i(is)g(enabled)f(b)m(y)g -(default.)630 1121 y Ft(-k)384 b Fu(All)34 b(argumen)m(ts)g(in)f(the)h -(form)f(of)g(assignmen)m(t)h(statemen)m(ts)i(are)d(placed)h(in)1110 -1230 y(the)k(en)m(vironmen)m(t)g(for)g(a)g(command,)h(not)f(just)f -(those)i(that)f(precede)g(the)1110 1340 y(command)30 -b(name.)630 1504 y Ft(-m)384 b Fu(Job)28 b(con)m(trol)h(is)f(enabled)g -(\(see)h(Chapter)f(7)g([Job)g(Con)m(trol],)i(page)f(113\).)41 -b(All)1110 1614 y(pro)s(cesses)27 b(run)f(in)i(a)g(separate)g(pro)s +1110 2545 y(in)40 b(a)h(con)m(text)i(where)d Ft(-e)g +Fu(is)h(ignored,)j(that)d(setting)h(will)f(not)g(ha)m(v)m(e)h(an)m(y) +1110 2655 y(e\013ect)g(un)m(til)e(the)h(comp)s(ound)e(command)h(or)g +(the)g(command)g(con)m(taining)1110 2765 y(the)31 b(function)f(call)h +(completes.)630 2929 y Ft(-f)384 b Fu(Disable)31 b(\014lename)g +(expansion)f(\(globbing\).)630 3093 y Ft(-h)384 b Fu(Lo)s(cate)33 +b(and)e(remem)m(b)s(er)h(\(hash\))g(commands)f(as)h(they)g(are)g(lo)s +(ok)m(ed)h(up)e(for)1110 3203 y(execution.)42 b(This)29 +b(option)i(is)g(enabled)f(b)m(y)g(default.)630 3367 y +Ft(-k)384 b Fu(All)34 b(argumen)m(ts)g(in)f(the)h(form)f(of)g +(assignmen)m(t)h(statemen)m(ts)i(are)d(placed)h(in)1110 +3477 y(the)k(en)m(vironmen)m(t)g(for)g(a)g(command,)h(not)f(just)f +(those)i(that)f(precede)g(the)1110 3587 y(command)30 +b(name.)630 3751 y Ft(-m)384 b Fu(Job)28 b(con)m(trol)h(is)f(enabled)g +(\(see)h(Chapter)f(7)g([Job)g(Con)m(trol],)i(page)f(118\).)41 +b(All)1110 3861 y(pro)s(cesses)27 b(run)f(in)i(a)g(separate)g(pro)s (cess)f(group.)40 b(When)27 b(a)h(bac)m(kground)f(job)1110 -1724 y(completes,)32 b(the)f(shell)f(prin)m(ts)g(a)h(line)f(con)m -(taining)i(its)f(exit)g(status.)630 1888 y Ft(-n)384 +3970 y(completes,)32 b(the)f(shell)f(prin)m(ts)g(a)h(line)f(con)m +(taining)i(its)f(exit)g(status.)630 4134 y Ft(-n)384 b Fu(Read)38 b(commands)f(but)f(do)i(not)f(execute)i(them.)62 -b(This)37 b(ma)m(y)h(b)s(e)f(used)f(to)1110 1998 y(c)m(hec)m(k)d(a)e +b(This)37 b(ma)m(y)h(b)s(e)f(used)f(to)1110 4244 y(c)m(hec)m(k)d(a)e (script)g(for)g(syn)m(tax)h(errors.)42 b(This)30 b(option)i(is)f -(ignored)g(b)m(y)g(in)m(terac-)1110 2107 y(tiv)m(e)h(shells.)630 -2271 y Ft(-o)e Fj(option-name)1110 2381 y Fu(Set)h(the)f(option)h -(corresp)s(onding)e(to)i Fr(option-name)5 b Fu(:)1110 -2545 y Ft(allexport)1590 2655 y Fu(Same)30 b(as)h Ft(-a)p -Fu(.)1110 2819 y Ft(braceexpand)1590 2929 y Fu(Same)f(as)h -Ft(-B)p Fu(.)1110 3093 y Ft(emacs)240 b Fu(Use)25 b(an)f -Ft(emacs)p Fu(-st)m(yle)h(line)f(editing)h(in)m(terface)h(\(see)g -(Chapter)e(8)1590 3203 y([Command)33 b(Line)g(Editing],)h(page)h -(117\).)51 b(This)32 b(also)i(a\013ects)1590 3313 y(the)d(editing)g(in) -m(terface)h(used)d(for)h Ft(read)f(-e)p Fu(.)1110 3477 -y Ft(errexit)144 b Fu(Same)30 b(as)h Ft(-e)p Fu(.)1110 -3641 y Ft(errtrace)96 b Fu(Same)30 b(as)h Ft(-E)p Fu(.)1110 -3806 y Ft(functrace)1590 3915 y Fu(Same)f(as)h Ft(-T)p -Fu(.)1110 4080 y Ft(hashall)144 b Fu(Same)30 b(as)h Ft(-h)p -Fu(.)1110 4244 y Ft(histexpand)1590 4354 y Fu(Same)f(as)h -Ft(-H)p Fu(.)1110 4518 y Ft(history)144 b Fu(Enable)39 -b(command)g(history)-8 b(,)42 b(as)d(describ)s(ed)f(in)h(Section)h(9.1) -1590 4628 y([Bash)d(History)g(F)-8 b(acilities],)41 b(page)c(152.)60 -b(This)36 b(option)h(is)f(on)1590 4737 y(b)m(y)30 b(default)h(in)f(in)m -(teractiv)m(e)j(shells.)1110 4902 y Ft(ignoreeof)1590 -5011 y Fu(An)d(in)m(teractiv)m(e)j(shell)e(will)g(not)f(exit)h(up)s(on) -e(reading)i(EOF.)1110 5176 y Ft(keyword)144 b Fu(Same)30 -b(as)h Ft(-k)p Fu(.)1110 5340 y Ft(monitor)144 b Fu(Same)30 -b(as)h Ft(-m)p Fu(.)p eop end -%%Page: 69 75 -TeXDict begin 69 74 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(69)1110 299 y -Ft(noclobber)1590 408 y Fu(Same)30 b(as)h Ft(-C)p Fu(.)1110 -570 y Ft(noexec)192 b Fu(Same)30 b(as)h Ft(-n)p Fu(.)1110 -731 y Ft(noglob)192 b Fu(Same)30 b(as)h Ft(-f)p Fu(.)1110 -892 y Ft(nolog)240 b Fu(Curren)m(tly)30 b(ignored.)1110 -1053 y Ft(notify)192 b Fu(Same)30 b(as)h Ft(-b)p Fu(.)1110 -1214 y Ft(nounset)144 b Fu(Same)30 b(as)h Ft(-u)p Fu(.)1110 -1375 y Ft(onecmd)192 b Fu(Same)30 b(as)h Ft(-t)p Fu(.)1110 -1537 y Ft(physical)96 b Fu(Same)30 b(as)h Ft(-P)p Fu(.)1110 -1698 y Ft(pipefail)96 b Fu(If)44 b(set,)k(the)d(return)e(v)-5 +(ignored)g(b)m(y)g(in)m(terac-)1110 4354 y(tiv)m(e)h(shells.)630 +4518 y Ft(-o)e Fj(option-name)1110 4628 y Fu(Set)44 b(the)h(option)f +(corresp)s(onding)f(to)i Fr(option-name)p Fu(.)83 b(If)44 +b Ft(-o)f Fu(is)h(supplied)1110 4737 y(with)29 b(no)h +Fr(option-name)p Fu(,)h Ft(set)e Fu(prin)m(ts)g(the)g(curren)m(t)h +(shell)g(options)g(settings.)1110 4847 y(If)37 b Ft(+o)g +Fu(is)h(supplied)e(with)h(no)h Fr(option-name)p Fu(,)i +Ft(set)d Fu(prin)m(ts)g(a)h(series)g(of)g Ft(set)1110 +4956 y Fu(commands)31 b(to)i(recreate)g(the)f(curren)m(t)g(option)g +(settings)h(on)f(the)g(standard)1110 5066 y(output.)40 +b(V)-8 b(alid)32 b(option)f(names)f(are:)1110 5230 y +Ft(allexport)1590 5340 y Fu(Same)g(as)h Ft(-a)p Fu(.)p +eop end +%%Page: 71 77 +TeXDict begin 71 76 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(71)1110 299 y +Ft(braceexpand)1590 408 y Fu(Same)30 b(as)h Ft(-B)p Fu(.)1110 +573 y Ft(emacs)240 b Fu(Use)25 b(an)f Ft(emacs)p Fu(-st)m(yle)h(line)f +(editing)h(in)m(terface)h(\(see)g(Chapter)e(8)1590 682 +y([Command)33 b(Line)g(Editing],)h(page)h(122\).)51 b(This)32 +b(also)i(a\013ects)1590 792 y(the)d(editing)g(in)m(terface)h(used)d +(for)h Ft(read)f(-e)p Fu(.)1110 956 y Ft(errexit)144 +b Fu(Same)30 b(as)h Ft(-e)p Fu(.)1110 1121 y Ft(errtrace)96 +b Fu(Same)30 b(as)h Ft(-E)p Fu(.)1110 1285 y Ft(functrace)1590 +1395 y Fu(Same)f(as)h Ft(-T)p Fu(.)1110 1559 y Ft(hashall)144 +b Fu(Same)30 b(as)h Ft(-h)p Fu(.)1110 1724 y Ft(histexpand)1590 +1833 y Fu(Same)f(as)h Ft(-H)p Fu(.)1110 1998 y Ft(history)144 +b Fu(Enable)39 b(command)g(history)-8 b(,)42 b(as)d(describ)s(ed)f(in)h +(Section)h(9.1)1590 2107 y([Bash)d(History)g(F)-8 b(acilities],)41 +b(page)c(159.)60 b(This)36 b(option)h(is)f(on)1590 2217 +y(b)m(y)30 b(default)h(in)f(in)m(teractiv)m(e)j(shells.)1110 +2381 y Ft(ignoreeof)1590 2491 y Fu(An)d(in)m(teractiv)m(e)j(shell)e +(will)g(not)f(exit)h(up)s(on)e(reading)i(EOF.)1110 2655 +y Ft(keyword)144 b Fu(Same)30 b(as)h Ft(-k)p Fu(.)1110 +2819 y Ft(monitor)144 b Fu(Same)30 b(as)h Ft(-m)p Fu(.)1110 +2984 y Ft(noclobber)1590 3093 y Fu(Same)f(as)h Ft(-C)p +Fu(.)1110 3258 y Ft(noexec)192 b Fu(Same)30 b(as)h Ft(-n)p +Fu(.)1110 3422 y Ft(noglob)192 b Fu(Same)30 b(as)h Ft(-f)p +Fu(.)1110 3587 y Ft(nolog)240 b Fu(Curren)m(tly)30 b(ignored.)1110 +3751 y Ft(notify)192 b Fu(Same)30 b(as)h Ft(-b)p Fu(.)1110 +3915 y Ft(nounset)144 b Fu(Same)30 b(as)h Ft(-u)p Fu(.)1110 +4080 y Ft(onecmd)192 b Fu(Same)30 b(as)h Ft(-t)p Fu(.)1110 +4244 y Ft(physical)96 b Fu(Same)30 b(as)h Ft(-P)p Fu(.)1110 +4408 y Ft(pipefail)96 b Fu(If)44 b(set,)k(the)d(return)e(v)-5 b(alue)45 b(of)f(a)h(pip)s(eline)e(is)i(the)f(v)-5 b(alue)45 -b(of)1590 1807 y(the)33 b(last)h(\(righ)m(tmost\))h(command)e(to)h -(exit)g(with)f(a)g(non-zero)1590 1917 y(status,)28 b(or)f(zero)g(if)f +b(of)1590 4518 y(the)33 b(last)h(\(righ)m(tmost\))h(command)e(to)h +(exit)g(with)f(a)g(non-zero)1590 4628 y(status,)28 b(or)f(zero)g(if)f (all)i(commands)e(in)g(the)h(pip)s(eline)f(exit)i(suc-)1590 -2027 y(cessfully)-8 b(.)41 b(This)30 b(option)h(is)f(disabled)g(b)m(y)h -(default.)1110 2188 y Ft(posix)240 b Fu(Change)30 b(the)g(b)s(eha)m +4737 y(cessfully)-8 b(.)41 b(This)30 b(option)h(is)f(disabled)g(b)m(y)h +(default.)1110 4902 y Ft(posix)240 b Fu(Change)30 b(the)g(b)s(eha)m (vior)h(of)f(Bash)g(where)g(the)g(default)h(op)s(era-)1590 -2297 y(tion)25 b(di\013ers)f(from)g(the)h Fm(posix)f -Fu(standard)f(to)i(matc)m(h)h(the)f(stan-)1590 2407 y(dard)h(\(see)j -(Section)f(6.11)h([Bash)f(POSIX)e(Mo)s(de],)j(page)f(106\).)1590 -2516 y(This)37 b(is)g(in)m(tended)g(to)h(mak)m(e)g(Bash)g(b)s(eha)m(v)m -(e)g(as)g(a)f(strict)h(su-)1590 2626 y(p)s(erset)30 b(of)h(that)f -(standard.)1110 2787 y Ft(privileged)1590 2897 y Fu(Same)g(as)h -Ft(-p)p Fu(.)1110 3058 y Ft(verbose)144 b Fu(Same)30 -b(as)h Ft(-v)p Fu(.)1110 3219 y Ft(vi)384 b Fu(Use)36 -b(a)g Ft(vi)p Fu(-st)m(yle)g(line)g(editing)g(in)m(terface.)58 -b(This)35 b(also)h(a\013ects)1590 3329 y(the)31 b(editing)g(in)m -(terface)h(used)d(for)h Ft(read)f(-e)p Fu(.)1110 3490 -y Ft(xtrace)192 b Fu(Same)30 b(as)h Ft(-x)p Fu(.)630 -3651 y Ft(-p)384 b Fu(T)-8 b(urn)33 b(on)h(privileged)h(mo)s(de.)51 -b(In)34 b(this)g(mo)s(de,)h(the)f Ft($BASH_ENV)e Fu(and)h -Ft($ENV)1110 3761 y Fu(\014les)23 b(are)h(not)f(pro)s(cessed,)h(shell)g -(functions)e(are)i(not)f(inherited)g(from)f(the)i(en-)1110 -3870 y(vironmen)m(t,)h(and)e(the)g Ft(SHELLOPTS)p Fu(,)f -Ft(BASHOPTS)p Fu(,)h Ft(CDPATH)e Fu(and)i Ft(GLOBIGNORE)1110 -3980 y Fu(v)-5 b(ariables,)23 b(if)e(they)g(app)s(ear)f(in)g(the)h(en)m -(vironmen)m(t,)i(are)e(ignored.)38 b(If)20 b(the)h(shell)1110 -4089 y(is)37 b(started)h(with)f(the)g(e\013ectiv)m(e)j(user)d -(\(group\))g(id)g(not)g(equal)h(to)g(the)f(real)1110 -4199 y(user)h(\(group\))h(id,)i(and)d(the)h Ft(-p)f Fu(option)i(is)e -(not)i(supplied,)f(these)h(actions)1110 4309 y(are)32 -b(tak)m(en)i(and)d(the)h(e\013ectiv)m(e)j(user)c(id)h(is)g(set)h(to)f -(the)h(real)f(user)g(id.)45 b(If)32 b(the)1110 4418 y -Ft(-p)i Fu(option)h(is)g(supplied)f(at)h(startup,)h(the)f(e\013ectiv)m -(e)i(user)d(id)g(is)h(not)g(reset.)1110 4528 y(T)-8 b(urning)35 -b(this)i(option)g(o\013)g(causes)g(the)g(e\013ectiv)m(e)i(user)d(and)g -(group)g(ids)g(to)1110 4637 y(b)s(e)30 b(set)h(to)g(the)f(real)h(user)f -(and)g(group)g(ids.)630 4798 y Ft(-r)384 b Fu(Enable)32 -b(restricted)h(shell)f(mo)s(de.)45 b(This)31 b(option)i(cannot)g(b)s(e) -e(unset)h(once)g(it)1110 4908 y(has)e(b)s(een)g(set.)630 -5069 y Ft(-t)384 b Fu(Exit)31 b(after)g(reading)f(and)g(executing)h -(one)g(command.)630 5230 y Ft(-u)384 b Fu(T)-8 b(reat)25 -b(unset)e(v)-5 b(ariables)25 b(and)e(parameters)h(other)h(than)e(the)h -(sp)s(ecial)h(param-)1110 5340 y(eters)32 b(`)p Ft(@)p -Fu(')f(or)h(`)p Ft(*)p Fu(',)g(or)f(arra)m(y)h(v)-5 b(ariables)32 -b(subscripted)e(with)h(`)p Ft(@)p Fu(')g(or)h(`)p Ft(*)p -Fu(',)f(as)h(an)p eop end -%%Page: 70 76 -TeXDict begin 70 75 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(70)1110 299 y(error)24 +5011 y(tion)25 b(di\013ers)f(from)g(the)h Fm(posix)f +Fu(standard)f(to)i(matc)m(h)h(the)f(stan-)1590 5121 y(dard)h(\(see)j +(Section)f(6.11)h([Bash)f(POSIX)e(Mo)s(de],)j(page)f(109\).)1590 +5230 y(This)37 b(is)g(in)m(tended)g(to)h(mak)m(e)g(Bash)g(b)s(eha)m(v)m +(e)g(as)g(a)f(strict)h(su-)1590 5340 y(p)s(erset)30 b(of)h(that)f +(standard.)p eop end +%%Page: 72 78 +TeXDict begin 72 77 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(72)1110 299 y +Ft(privileged)1590 408 y Fu(Same)30 b(as)h Ft(-p)p Fu(.)1110 +560 y Ft(verbose)144 b Fu(Same)30 b(as)h Ft(-v)p Fu(.)1110 +712 y Ft(vi)384 b Fu(Use)36 b(a)g Ft(vi)p Fu(-st)m(yle)g(line)g +(editing)g(in)m(terface.)58 b(This)35 b(also)h(a\013ects)1590 +822 y(the)31 b(editing)g(in)m(terface)h(used)d(for)h +Ft(read)f(-e)p Fu(.)1110 973 y Ft(xtrace)192 b Fu(Same)30 +b(as)h Ft(-x)p Fu(.)630 1125 y Ft(-p)384 b Fu(T)-8 b(urn)33 +b(on)h(privileged)h(mo)s(de.)51 b(In)34 b(this)g(mo)s(de,)h(the)f +Ft($BASH_ENV)e Fu(and)h Ft($ENV)1110 1235 y Fu(\014les)23 +b(are)h(not)f(pro)s(cessed,)h(shell)g(functions)e(are)i(not)f +(inherited)g(from)f(the)i(en-)1110 1344 y(vironmen)m(t,)h(and)e(the)g +Ft(SHELLOPTS)p Fu(,)f Ft(BASHOPTS)p Fu(,)h Ft(CDPATH)e +Fu(and)i Ft(GLOBIGNORE)1110 1454 y Fu(v)-5 b(ariables,)23 +b(if)e(they)g(app)s(ear)f(in)g(the)h(en)m(vironmen)m(t,)i(are)e +(ignored.)38 b(If)20 b(the)h(shell)1110 1563 y(is)37 +b(started)h(with)f(the)g(e\013ectiv)m(e)j(user)d(\(group\))g(id)g(not)g +(equal)h(to)g(the)f(real)1110 1673 y(user)h(\(group\))h(id,)i(and)d +(the)h Ft(-p)f Fu(option)i(is)e(not)i(supplied,)f(these)h(actions)1110 +1783 y(are)32 b(tak)m(en)i(and)d(the)h(e\013ectiv)m(e)j(user)c(id)h(is) +g(set)h(to)f(the)h(real)f(user)g(id.)45 b(If)32 b(the)1110 +1892 y Ft(-p)i Fu(option)h(is)g(supplied)f(at)h(startup,)h(the)f +(e\013ectiv)m(e)i(user)d(id)g(is)h(not)g(reset.)1110 +2002 y(T)-8 b(urning)35 b(this)i(option)g(o\013)g(causes)g(the)g +(e\013ectiv)m(e)i(user)d(and)g(group)g(ids)g(to)1110 +2111 y(b)s(e)30 b(set)h(to)g(the)f(real)h(user)f(and)g(group)g(ids.)630 +2263 y Ft(-r)384 b Fu(Enable)51 b(restricted)h(shell)g(mo)s(de)f(\(see) +h(Section)g(6.10)h([The)e(Restricted)1110 2373 y(Shell],)42 +b(page)e(109\).)69 b(This)39 b(option)g(cannot)h(b)s(e)f(unset)g(once)h +(it)g(has)f(b)s(een)1110 2482 y(set.)630 2634 y Ft(-t)384 +b Fu(Exit)31 b(after)g(reading)f(and)g(executing)h(one)g(command.)630 +2786 y Ft(-u)384 b Fu(T)-8 b(reat)25 b(unset)e(v)-5 b(ariables)25 +b(and)e(parameters)h(other)h(than)e(the)h(sp)s(ecial)h(param-)1110 +2895 y(eters)32 b(`)p Ft(@)p Fu(')f(or)h(`)p Ft(*)p Fu(',)g(or)f(arra)m +(y)h(v)-5 b(ariables)32 b(subscripted)e(with)h(`)p Ft(@)p +Fu(')g(or)h(`)p Ft(*)p Fu(',)f(as)h(an)1110 3005 y(error)24 b(when)g(p)s(erforming)g(parameter)h(expansion.)39 b(An)24 -b(error)h(message)h(will)1110 408 y(b)s(e)37 b(written)h(to)h(the)f +b(error)h(message)h(will)1110 3114 y(b)s(e)37 b(written)h(to)h(the)f (standard)f(error,)i(and)f(a)g(non-in)m(teractiv)m(e)j(shell)d(will) -1110 518 y(exit.)630 667 y Ft(-v)384 b Fu(Prin)m(t)30 +1110 3224 y(exit.)630 3376 y Ft(-v)384 b Fu(Prin)m(t)30 b(shell)h(input)e(lines)i(as)g(they)f(are)h(read.)630 -817 y Ft(-x)384 b Fu(Prin)m(t)21 b(a)h(trace)h(of)f(simple)f(commands,) -i Ft(for)e Fu(commands,)i Ft(case)d Fu(commands,)1110 -927 y Ft(select)29 b Fu(commands,)j(and)e(arithmetic)j -Ft(for)d Fu(commands)h(and)f(their)i(argu-)1110 1036 -y(men)m(ts)h(or)f(asso)s(ciated)i(w)m(ord)e(lists)h(after)g(they)f(are) -h(expanded)f(and)f(b)s(efore)1110 1146 y(they)i(are)g(executed.)49 -b(The)32 b(v)-5 b(alue)33 b(of)g(the)g Ft(PS4)f Fu(v)-5 -b(ariable)34 b(is)f(expanded)f(and)1110 1255 y(the)24 -b(resultan)m(t)h(v)-5 b(alue)24 b(is)g(prin)m(ted)g(b)s(efore)f(the)h -(command)g(and)f(its)i(expanded)1110 1365 y(argumen)m(ts.)630 -1514 y Ft(-B)384 b Fu(The)41 b(shell)g(will)g(p)s(erform)f(brace)h -(expansion)g(\(see)h(Section)g(3.5.1)g([Brace)1110 1624 -y(Expansion],)30 b(page)h(24\).)42 b(This)30 b(option)h(is)f(on)g(b)m -(y)h(default.)630 1773 y Ft(-C)384 b Fu(Prev)m(en)m(t)25 +3528 y Ft(-x)384 b Fu(Prin)m(t)21 b(a)h(trace)h(of)f(simple)f +(commands,)i Ft(for)e Fu(commands,)i Ft(case)d Fu(commands,)1110 +3637 y Ft(select)29 b Fu(commands,)j(and)e(arithmetic)j +Ft(for)d Fu(commands)h(and)f(their)i(argu-)1110 3747 +y(men)m(ts)g(or)g(asso)s(ciated)h(w)m(ord)e(lists)h(to)g(standard)f +(error)g(after)i(they)e(are)h(ex-)1110 3856 y(panded)20 +b(and)h(b)s(efore)g(they)g(are)h(executed.)39 b(The)21 +b(shell)g(prin)m(ts)g(the)h(expanded)1110 3966 y(v)-5 +b(alue)28 b(of)f(the)g Ft(PS4)g Fu(v)-5 b(ariable)28 +b(b)s(efore)f(the)g(command)g(and)g(its)g(expanded)g(ar-)1110 +4075 y(gumen)m(ts.)630 4227 y Ft(-B)384 b Fu(The)41 b(shell)g(will)g(p) +s(erform)f(brace)h(expansion)g(\(see)h(Section)g(3.5.1)g([Brace)1110 +4337 y(Expansion],)30 b(page)h(24\).)42 b(This)30 b(option)h(is)f(on)g +(b)m(y)h(default.)630 4489 y Ft(-C)384 b Fu(Prev)m(en)m(t)25 b(output)e(redirection)h(using)f(`)p Ft(>)p Fu(',)i(`)p Ft(>&)p Fu(',)g(and)e(`)p Ft(<>)p Fu(')g(from)h(o)m(v)m(erwriting)1110 -1883 y(existing)31 b(\014les.)630 2032 y Ft(-E)384 b +4598 y(existing)31 b(\014les.)630 4750 y Ft(-E)384 b Fu(If)39 b(set,)j(an)m(y)e(trap)f(on)g Ft(ERR)g Fu(is)g(inherited)g(b)m -(y)g(shell)h(functions,)h(command)1110 2142 y(substitutions,)35 +(y)g(shell)h(functions,)h(command)1110 4859 y(substitutions,)35 b(and)e(commands)g(executed)i(in)f(a)g(subshell)f(en)m(vironmen)m(t.) -1110 2252 y(The)d Ft(ERR)f Fu(trap)i(is)f(normally)h(not)f(inherited)g -(in)g(suc)m(h)g(cases.)630 2401 y Ft(-H)384 b Fu(Enable)38 +1110 4969 y(The)d Ft(ERR)f Fu(trap)i(is)f(normally)h(not)f(inherited)g +(in)g(suc)m(h)g(cases.)630 5121 y Ft(-H)384 b Fu(Enable)38 b(`)p Ft(!)p Fu(')h(st)m(yle)h(history)e(substitution)g(\(see)h -(Section)h(9.3)f([History)g(In-)1110 2511 y(teraction],)g(page)d -(154\).)57 b(This)34 b(option)i(is)f(on)g(b)m(y)h(default)f(for)g(in)m -(teractiv)m(e)1110 2620 y(shells.)630 2770 y Ft(-P)384 +(Section)h(9.3)f([History)g(In-)1110 5230 y(teraction],)g(page)d +(161\).)57 b(This)34 b(option)i(is)f(on)g(b)m(y)h(default)f(for)g(in)m +(teractiv)m(e)1110 5340 y(shells.)p eop end +%%Page: 73 79 +TeXDict begin 73 78 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(73)630 299 y Ft(-P)384 b Fu(If)39 b(set,)j(do)d(not)g(resolv)m(e)i(sym)m(b)s(olic)e(links)g -(when)f(p)s(erforming)g(commands)1110 2879 y(suc)m(h)29 +(when)f(p)s(erforming)g(commands)1110 408 y(suc)m(h)29 b(as)h Ft(cd)f Fu(whic)m(h)g(c)m(hange)h(the)g(curren)m(t)f(directory) --8 b(.)42 b(The)28 b(ph)m(ysical)j(direc-)1110 2989 y(tory)j(is)g(used) -f(instead.)52 b(By)34 b(default,)h(Bash)f(follo)m(ws)h(the)f(logical)i -(c)m(hain)f(of)1110 3098 y(directories)j(when)d(p)s(erforming)h +-8 b(.)42 b(The)28 b(ph)m(ysical)j(direc-)1110 518 y(tory)j(is)g(used)f +(instead.)52 b(By)34 b(default,)h(Bash)f(follo)m(ws)h(the)f(logical)i +(c)m(hain)f(of)1110 628 y(directories)j(when)d(p)s(erforming)h (commands)g(whic)m(h)g(c)m(hange)i(the)f(curren)m(t)1110 -3208 y(directory)-8 b(.)1110 3337 y(F)g(or)42 b(example,)i(if)d +737 y(directory)-8 b(.)1110 870 y(F)g(or)42 b(example,)i(if)d Ft(/usr/sys)e Fu(is)i(a)g(sym)m(b)s(olic)g(link)g(to)h -Ft(/usr/local/sys)1110 3447 y Fu(then:)1350 3577 y Ft($)47 -b(cd)h(/usr/sys;)d(echo)i($PWD)1350 3686 y(/usr/sys)1350 -3796 y($)g(cd)h(..;)f(pwd)1350 3905 y(/usr)1110 4035 -y Fu(If)30 b Ft(set)f(-P)h Fu(is)h(on,)f(then:)1350 4164 -y Ft($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 4274 y(/usr/local/sys) -1350 4384 y($)g(cd)h(..;)f(pwd)1350 4493 y(/usr/local)630 -4643 y(-T)384 b Fu(If)34 b(set,)j(an)m(y)e(trap)g(on)g +Ft(/usr/local/sys)1110 980 y Fu(then:)1350 1113 y Ft($)47 +b(cd)h(/usr/sys;)d(echo)i($PWD)1350 1223 y(/usr/sys)1350 +1332 y($)g(cd)h(..;)f(pwd)1350 1442 y(/usr)1110 1575 +y Fu(If)30 b Ft(set)f(-P)h Fu(is)h(on,)f(then:)1350 1708 +y Ft($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 1818 y(/usr/local/sys) +1350 1927 y($)g(cd)h(..;)f(pwd)1350 2037 y(/usr/local)630 +2194 y(-T)384 b Fu(If)34 b(set,)j(an)m(y)e(trap)g(on)g Ft(DEBUG)e Fu(and)i Ft(RETURN)e Fu(are)i(inherited)g(b)m(y)f(shell)i -(func-)1110 4752 y(tions,)k(command)d(substitutions,)h(and)f(commands)g -(executed)h(in)f(a)h(sub-)1110 4862 y(shell)33 b(en)m(vironmen)m(t.)49 +(func-)1110 2303 y(tions,)k(command)d(substitutions,)h(and)f(commands)g +(executed)h(in)f(a)h(sub-)1110 2413 y(shell)33 b(en)m(vironmen)m(t.)49 b(The)32 b Ft(DEBUG)g Fu(and)g Ft(RETURN)f Fu(traps)h(are)i(normally)f -(not)1110 4971 y(inherited)d(in)g(suc)m(h)g(cases.)630 -5121 y Ft(--)384 b Fu(If)44 b(no)g(argumen)m(ts)g(follo)m(w)i(this)e +(not)1110 2522 y(inherited)d(in)g(suc)m(h)g(cases.)630 +2679 y Ft(--)384 b Fu(If)44 b(no)g(argumen)m(ts)g(follo)m(w)i(this)e (option,)k(then)c(the)h(p)s(ositional)g(parame-)1110 -5230 y(ters)31 b(are)g(unset.)40 b(Otherwise,)31 b(the)f(p)s(ositional) -i(parameters)f(are)f(set)h(to)h(the)1110 5340 y Fr(argumen)m(ts)p +2789 y(ters)31 b(are)g(unset.)40 b(Otherwise,)31 b(the)f(p)s(ositional) +i(parameters)f(are)f(set)h(to)h(the)1110 2898 y Fr(argumen)m(ts)p Fu(,)f(ev)m(en)g(if)f(some)h(of)g(them)f(b)s(egin)g(with)g(a)h(`)p -Ft(-)p Fu('.)p eop end -%%Page: 71 77 -TeXDict begin 71 76 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(71)630 299 y Ft(-)432 -b Fu(Signal)45 b(the)g(end)f(of)h(options,)k(cause)c(all)h(remaining)e -Fr(argumen)m(ts)49 b Fu(to)d(b)s(e)1110 408 y(assigned)33 -b(to)h(the)g(p)s(ositional)g(parameters.)49 b(The)33 -b Ft(-x)g Fu(and)f Ft(-v)h Fu(options)h(are)1110 518 -y(turned)k(o\013.)68 b(If)38 b(there)i(are)f(no)g(argumen)m(ts,)j(the)e -(p)s(ositional)g(parameters)1110 628 y(remain)30 b(unc)m(hanged.)630 -775 y(Using)d(`)p Ft(+)p Fu(')h(rather)f(than)g(`)p Ft(-)p -Fu(')g(causes)h(these)f(options)h(to)g(b)s(e)e(turned)g(o\013.)40 -b(The)27 b(options)h(can)630 884 y(also)36 b(b)s(e)f(used)f(up)s(on)g -(in)m(v)m(o)s(cation)j(of)e(the)g(shell.)56 b(The)34 -b(curren)m(t)h(set)h(of)f(options)h(ma)m(y)g(b)s(e)630 -994 y(found)29 b(in)h Ft($-)p Fu(.)630 1122 y(The)43 +Ft(-)p Fu('.)630 3055 y Ft(-)432 b Fu(Signal)45 b(the)g(end)f(of)h +(options,)k(cause)c(all)h(remaining)e Fr(argumen)m(ts)49 +b Fu(to)d(b)s(e)1110 3164 y(assigned)33 b(to)h(the)g(p)s(ositional)g +(parameters.)49 b(The)33 b Ft(-x)g Fu(and)f Ft(-v)h Fu(options)h(are) +1110 3274 y(turned)k(o\013.)68 b(If)38 b(there)i(are)f(no)g(argumen)m +(ts,)j(the)e(p)s(ositional)g(parameters)1110 3384 y(remain)30 +b(unc)m(hanged.)630 3540 y(Using)d(`)p Ft(+)p Fu(')h(rather)f(than)g(`) +p Ft(-)p Fu(')g(causes)h(these)f(options)h(to)g(b)s(e)e(turned)g +(o\013.)40 b(The)27 b(options)h(can)630 3650 y(also)36 +b(b)s(e)f(used)f(up)s(on)g(in)m(v)m(o)s(cation)j(of)e(the)g(shell.)56 +b(The)34 b(curren)m(t)h(set)h(of)f(options)h(ma)m(y)g(b)s(e)630 +3759 y(found)29 b(in)h Ft($-)p Fu(.)630 3893 y(The)43 b(remaining)h(N)f Fr(argumen)m(ts)48 b Fu(are)c(p)s(ositional)g -(parameters)g(and)f(are)h(assigned,)j(in)630 1232 y(order,)30 +(parameters)g(and)f(are)h(assigned,)j(in)630 4002 y(order,)30 b(to)h Ft($1)p Fu(,)f Ft($2)p Fu(,)36 b(.)22 b(.)g(.)42 b Ft($N)p Fu(.)e(The)30 b(sp)s(ecial)h(parameter)g Ft(#)f -Fu(is)g(set)h(to)g(N.)630 1360 y(The)f(return)f(status)i(is)f(alw)m(a)m +Fu(is)g(set)h(to)g(N.)630 4135 y(The)f(return)f(status)i(is)f(alw)m(a)m (ys)i(zero)f(unless)f(an)g(in)m(v)-5 b(alid)31 b(option)g(is)f -(supplied.)150 1548 y Fk(4.3.2)63 b(The)41 b(Shopt)h(Builtin)150 -1695 y Fu(This)30 b(builtin)g(allo)m(ws)h(y)m(ou)g(to)g(c)m(hange)h +(supplied.)150 4332 y Fk(4.3.2)63 b(The)41 b(Shopt)h(Builtin)150 +4479 y Fu(This)30 b(builtin)g(allo)m(ws)h(y)m(ou)g(to)g(c)m(hange)h (additional)f(shell)f(optional)i(b)s(eha)m(vior.)150 -1842 y Ft(shopt)870 1970 y(shopt)46 b([-pqsu])g([-o])h([)p -Fj(optname)e Ft(...])630 2099 y Fu(T)-8 b(oggle)37 b(the)e(v)-5 +4635 y Ft(shopt)870 4768 y(shopt)46 b([-pqsu])g([-o])h([)p +Fj(optname)e Ft(...])630 4902 y Fu(T)-8 b(oggle)37 b(the)e(v)-5 b(alues)35 b(of)g(settings)h(con)m(trolling)g(optional)g(shell)f(b)s -(eha)m(vior.)55 b(The)34 b(settings)630 2208 y(can)24 +(eha)m(vior.)55 b(The)34 b(settings)630 5011 y(can)24 b(b)s(e)g(either)h(those)f(listed)h(b)s(elo)m(w,)h(or,)f(if)g(the)f Ft(-o)f Fu(option)i(is)f(used,)h(those)g(a)m(v)-5 b(ailable)26 -b(with)630 2318 y(the)k Ft(-o)f Fu(option)i(to)f(the)g +b(with)630 5121 y(the)k Ft(-o)f Fu(option)i(to)f(the)g Ft(set)f Fu(builtin)h(command)f(\(see)i(Section)g(4.3.1)g([The)f(Set)g -(Builtin],)630 2427 y(page)i(67\).)45 b(With)32 b(no)f(options,)h(or)g +(Builtin],)630 5230 y(page)i(69\).)45 b(With)32 b(no)f(options,)h(or)g (with)f(the)g Ft(-p)g Fu(option,)h(a)g(list)g(of)f(all)i(settable)g -(options)630 2537 y(is)g(displa)m(y)m(ed,)i(with)e(an)g(indication)h +(options)630 5340 y(is)g(displa)m(y)m(ed,)i(with)e(an)g(indication)h (of)f(whether)g(or)g(not)g(eac)m(h)h(is)g(set;)h(if)e -Fr(optname)5 b Fu(s)34 b(are)630 2647 y(supplied,)25 +Fr(optname)5 b Fu(s)34 b(are)p eop end +%%Page: 74 80 +TeXDict begin 74 79 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(74)630 299 y(supplied,)25 b(the)g(output)g(is)g(restricted)g(to)h(those)g(options.)39 -b(The)24 b Ft(-p)h Fu(option)g(causes)g(output)630 2756 +b(The)24 b Ft(-p)h Fu(option)g(causes)g(output)630 408 y(to)30 b(b)s(e)f(displa)m(y)m(ed)g(in)g(a)h(form)f(that)g(ma)m(y)h(b)s (e)f(reused)f(as)i(input.)39 b(Other)29 b(options)g(ha)m(v)m(e)i(the) -630 2866 y(follo)m(wing)h(meanings:)630 3013 y Ft(-s)384 +630 518 y(follo)m(wing)h(meanings:)630 680 y Ft(-s)384 b Fu(Enable)30 b(\(set\))i(eac)m(h)f Fr(optname)p Fu(.)630 -3160 y Ft(-u)384 b Fu(Disable)31 b(\(unset\))g(eac)m(h)h -Fr(optname)p Fu(.)630 3307 y Ft(-q)384 b Fu(Suppresses)28 +842 y Ft(-u)384 b Fu(Disable)31 b(\(unset\))g(eac)m(h)h +Fr(optname)p Fu(.)630 1005 y Ft(-q)384 b Fu(Suppresses)28 b(normal)h(output;)h(the)g(return)e(status)i(indicates)h(whether)e(the) -1110 3417 y Fr(optname)37 b Fu(is)31 b(set)h(or)f(unset.)43 +1110 1114 y Fr(optname)37 b Fu(is)31 b(set)h(or)f(unset.)43 b(If)31 b(m)m(ultiple)h Fr(optname)37 b Fu(argumen)m(ts)31 -b(are)h(giv)m(en)1110 3527 y(with)d Ft(-q)p Fu(,)f(the)i(return)d +b(are)h(giv)m(en)1110 1224 y(with)d Ft(-q)p Fu(,)f(the)i(return)d (status)j(is)f(zero)g(if)g(all)h Fr(optname)5 b Fu(s)29 -b(are)h(enabled;)f(non-)1110 3636 y(zero)i(otherwise.)630 -3784 y Ft(-o)384 b Fu(Restricts)22 b(the)f(v)-5 b(alues)22 +b(are)h(enabled;)f(non-)1110 1333 y(zero)i(otherwise.)630 +1496 y Ft(-o)384 b Fu(Restricts)22 b(the)f(v)-5 b(alues)22 b(of)f Fr(optname)27 b Fu(to)22 b(b)s(e)e(those)i(de\014ned)e(for)h -(the)g Ft(-o)f Fu(option)1110 3893 y(to)31 b(the)g Ft(set)e +(the)g Ft(-o)f Fu(option)1110 1605 y(to)31 b(the)g Ft(set)e Fu(builtin)h(\(see)h(Section)h(4.3.1)g([The)e(Set)g(Builtin],)i(page)f -(67\).)630 4040 y(If)e(either)i Ft(-s)e Fu(or)h Ft(-u)f +(69\).)630 1767 y(If)e(either)i Ft(-s)e Fu(or)h Ft(-u)f Fu(is)h(used)f(with)g(no)h Fr(optname)35 b Fu(argumen)m(ts,)c -Ft(shopt)d Fu(sho)m(ws)h(only)h(those)630 4150 y(options)h(whic)m(h)f +Ft(shopt)d Fu(sho)m(ws)h(only)h(those)630 1877 y(options)h(whic)m(h)f (are)h(set)f(or)h(unset,)f(resp)s(ectiv)m(ely)-8 b(.)630 -4278 y(Unless)30 b(otherwise)h(noted,)g(the)g Ft(shopt)d +2013 y(Unless)30 b(otherwise)h(noted,)g(the)g Ft(shopt)d Fu(options)j(are)g(disabled)f(\(o\013)7 b(\))32 b(b)m(y)e(default.)630 -4407 y(The)d(return)f(status)i(when)e(listing)j(options)e(is)h(zero)g +2149 y(The)d(return)f(status)i(when)e(listing)j(options)e(is)h(zero)g (if)f(all)i Fr(optname)5 b Fu(s)27 b(are)h(enabled,)g(non-)630 -4516 y(zero)40 b(otherwise.)66 b(When)39 b(setting)h(or)f(unsetting)g -(options,)i(the)e(return)f(status)h(is)g(zero)630 4626 +2258 y(zero)40 b(otherwise.)66 b(When)39 b(setting)h(or)f(unsetting)g +(options,)i(the)e(return)f(status)h(is)g(zero)630 2368 y(unless)30 b(an)g Fr(optname)36 b Fu(is)30 b(not)h(a)g(v)-5 -b(alid)30 b(shell)h(option.)630 4754 y(The)f(list)h(of)f -Ft(shopt)f Fu(options)i(is:)630 4902 y Ft(assoc_expand_once)1110 -5011 y Fu(If)h(set,)i(the)e(shell)h(suppresses)e(m)m(ultiple)i(ev)-5 -b(aluation)34 b(of)e(asso)s(ciativ)m(e)j(arra)m(y)1110 -5121 y(subscripts)24 b(during)h(arithmetic)h(expression)g(ev)-5 -b(aluation,)28 b(while)e(executing)1110 5230 y(builtins)c(that)i(can)f -(p)s(erform)f(v)-5 b(ariable)24 b(assignmen)m(ts,)h(and)e(while)g -(executing)1110 5340 y(builtins)30 b(that)h(p)s(erform)e(arra)m(y)i -(dereferencing.)p eop end -%%Page: 72 78 -TeXDict begin 72 77 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(72)630 299 y Ft(autocd)192 +b(alid)30 b(shell)h(option.)630 2504 y(The)f(list)h(of)f +Ft(shopt)f Fu(options)i(is:)630 2666 y Ft(array_expand_once)1110 +2776 y Fu(If)39 b(set,)j(the)d(shell)g(suppresses)e(m)m(ultiple)j(ev)-5 +b(aluation)41 b(of)e(asso)s(ciativ)m(e)j(and)1110 2885 +y(indexed)37 b(arra)m(y)h(subscripts)e(during)g(arithmetic)j +(expression)e(ev)-5 b(aluation,)1110 2995 y(while)23 +b(executing)h(builtins)f(that)g(can)h(p)s(erform)d(v)-5 +b(ariable)24 b(assignmen)m(ts,)i(and)1110 3104 y(while)k(executing)i +(builtins)e(that)h(p)s(erform)e(arra)m(y)i(dereferencing.)630 +3267 y Ft(assoc_expand_once)1110 3376 y Fu(Deprecated;)h(a)f(synon)m +(ym)f(for)g Ft(array_expand_once)p Fu(.)630 3538 y Ft(autocd)192 b Fu(If)27 b(set,)h(a)g(command)f(name)g(that)h(is)f(the)g(name)g(of)h -(a)f(directory)h(is)f(executed)1110 408 y(as)j(if)f(it)h(w)m(ere)f(the) -h(argumen)m(t)g(to)g(the)f Ft(cd)g Fu(command.)40 b(This)29 -b(option)g(is)h(only)1110 518 y(used)g(b)m(y)g(in)m(teractiv)m(e)j -(shells.)630 682 y Ft(cdable_vars)1110 792 y Fu(If)h(this)h(is)g(set,)i -(an)e(argumen)m(t)g(to)h(the)f Ft(cd)f Fu(builtin)h(command)f(that)i -(is)f(not)1110 902 y(a)c(directory)g(is)g(assumed)f(to)h(b)s(e)f(the)h -(name)f(of)h(a)g(v)-5 b(ariable)31 b(whose)g(v)-5 b(alue)31 -b(is)1110 1011 y(the)g(directory)f(to)i(c)m(hange)f(to.)630 -1176 y Ft(cdspell)144 b Fu(If)27 b(set,)h(minor)f(errors)f(in)h(the)g -(sp)s(elling)h(of)f(a)g(directory)h(comp)s(onen)m(t)f(in)g(a)h -Ft(cd)1110 1285 y Fu(command)i(will)h(b)s(e)f(corrected.)43 -b(The)30 b(errors)g(c)m(hec)m(k)m(ed)j(for)d(are)h(transp)s(osed)1110 -1395 y(c)m(haracters,)46 b(a)c(missing)f(c)m(haracter,)47 +(a)f(directory)h(is)f(executed)1110 3648 y(as)j(if)f(it)h(w)m(ere)f +(the)h(argumen)m(t)g(to)g(the)f Ft(cd)g Fu(command.)40 +b(This)29 b(option)g(is)h(only)1110 3758 y(used)g(b)m(y)g(in)m +(teractiv)m(e)j(shells.)630 3920 y Ft(cdable_vars)1110 +4029 y Fu(If)h(this)h(is)g(set,)i(an)e(argumen)m(t)g(to)h(the)f +Ft(cd)f Fu(builtin)h(command)f(that)i(is)f(not)1110 4139 +y(a)c(directory)g(is)g(assumed)f(to)h(b)s(e)f(the)h(name)f(of)h(a)g(v) +-5 b(ariable)31 b(whose)g(v)-5 b(alue)31 b(is)1110 4248 +y(the)g(directory)f(to)i(c)m(hange)f(to.)630 4411 y Ft(cdspell)144 +b Fu(If)27 b(set,)h(minor)f(errors)f(in)h(the)g(sp)s(elling)h(of)f(a)g +(directory)h(comp)s(onen)m(t)f(in)g(a)h Ft(cd)1110 4520 +y Fu(command)i(will)h(b)s(e)f(corrected.)43 b(The)30 +b(errors)g(c)m(hec)m(k)m(ed)j(for)d(are)h(transp)s(osed)1110 +4630 y(c)m(haracters,)46 b(a)c(missing)f(c)m(haracter,)47 b(and)40 b(a)i(c)m(haracter)h(to)s(o)g(man)m(y)-8 b(.)74 -b(If)42 b(a)1110 1504 y(correction)25 b(is)e(found,)g(the)h(corrected)g -(path)f(is)g(prin)m(ted,)h(and)f(the)g(command)1110 1614 +b(If)42 b(a)1110 4739 y(correction)25 b(is)e(found,)g(the)h(corrected)g +(path)f(is)g(prin)m(ted,)h(and)f(the)g(command)1110 4849 y(pro)s(ceeds.)40 b(This)30 b(option)h(is)f(only)h(used)e(b)m(y)h(in)m -(teractiv)m(e)k(shells.)630 1778 y Ft(checkhash)1110 -1888 y Fu(If)29 b(this)h(is)g(set,)g(Bash)g(c)m(hec)m(ks)h(that)g(a)f -(command)f(found)g(in)g(the)h(hash)f(table)1110 1998 +(teractiv)m(e)k(shells.)630 5011 y Ft(checkhash)1110 +5121 y Fu(If)29 b(this)h(is)g(set,)g(Bash)g(c)m(hec)m(ks)h(that)g(a)f +(command)f(found)g(in)g(the)h(hash)f(table)1110 5230 y(exists)k(b)s(efore)f(trying)h(to)h(execute)g(it.)48 -b(If)32 b(a)h(hashed)e(command)i(no)f(longer)1110 2107 -y(exists,)f(a)g(normal)f(path)g(searc)m(h)h(is)g(p)s(erformed.)630 -2271 y Ft(checkjobs)1110 2381 y Fu(If)d(set,)i(Bash)e(lists)h(the)g -(status)g(of)f(an)m(y)h(stopp)s(ed)f(and)g(running)e(jobs)i(b)s(efore) -1110 2491 y(exiting)42 b(an)f(in)m(teractiv)m(e)j(shell.)72 -b(If)41 b(an)m(y)g(jobs)f(are)i(running,)g(this)f(causes)1110 -2600 y(the)30 b(exit)g(to)g(b)s(e)f(deferred)g(un)m(til)h(a)f(second)h -(exit)g(is)g(attempted)h(without)e(an)1110 2710 y(in)m(terv)m(ening)d -(command)f(\(see)h(Chapter)e(7)h([Job)g(Con)m(trol],)i(page)f(113\).)40 -b(The)1110 2819 y(shell)31 b(alw)m(a)m(ys)g(p)s(ostp)s(ones)f(exiting)h -(if)g(an)m(y)f(jobs)g(are)h(stopp)s(ed.)630 2984 y Ft(checkwinsize)1110 -3093 y Fu(If)23 b(set,)j(Bash)e(c)m(hec)m(ks)h(the)f(windo)m(w)f(size)h -(after)h(eac)m(h)f(external)h(\(non-builtin\))1110 3203 +b(If)32 b(a)h(hashed)e(command)i(no)f(longer)1110 5340 +y(exists,)f(a)g(normal)f(path)g(searc)m(h)h(is)g(p)s(erformed.)p +eop end +%%Page: 75 81 +TeXDict begin 75 80 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(75)630 299 y Ft(checkjobs)1110 +408 y Fu(If)28 b(set,)i(Bash)e(lists)h(the)g(status)g(of)f(an)m(y)h +(stopp)s(ed)f(and)g(running)e(jobs)i(b)s(efore)1110 518 +y(exiting)42 b(an)f(in)m(teractiv)m(e)j(shell.)72 b(If)41 +b(an)m(y)g(jobs)f(are)i(running,)g(this)f(causes)1110 +628 y(the)30 b(exit)g(to)g(b)s(e)f(deferred)g(un)m(til)h(a)f(second)h +(exit)g(is)g(attempted)h(without)e(an)1110 737 y(in)m(terv)m(ening)d +(command)f(\(see)h(Chapter)e(7)h([Job)g(Con)m(trol],)i(page)f(118\).)40 +b(The)1110 847 y(shell)31 b(alw)m(a)m(ys)g(p)s(ostp)s(ones)f(exiting)h +(if)g(an)m(y)f(jobs)g(are)h(stopp)s(ed.)630 1029 y Ft(checkwinsize)1110 +1139 y Fu(If)23 b(set,)j(Bash)e(c)m(hec)m(ks)h(the)f(windo)m(w)f(size)h +(after)h(eac)m(h)f(external)h(\(non-builtin\))1110 1249 y(command)55 b(and,)60 b(if)55 b(necessary)-8 b(,)62 b(up)s(dates)54 b(the)h(v)-5 b(alues)55 b(of)g Ft(LINES)f -Fu(and)1110 3313 y Ft(COLUMNS)p Fu(.)39 b(This)29 b(option)i(is)g -(enabled)f(b)m(y)g(default.)630 3477 y Ft(cmdhist)144 +Fu(and)1110 1358 y Ft(COLUMNS)p Fu(.)39 b(This)29 b(option)i(is)g +(enabled)f(b)m(y)g(default.)630 1541 y Ft(cmdhist)144 b Fu(If)33 b(set,)j(Bash)e(attempts)h(to)g(sa)m(v)m(e)g(all)g(lines)f -(of)g(a)h(m)m(ultiple-line)g(command)1110 3587 y(in)c(the)g(same)g +(of)g(a)h(m)m(ultiple-line)g(command)1110 1650 y(in)c(the)g(same)g (history)g(en)m(try)-8 b(.)42 b(This)30 b(allo)m(ws)i(easy)g -(re-editing)g(of)f(m)m(ulti-line)1110 3696 y(commands.)79 +(re-editing)g(of)f(m)m(ulti-line)1110 1760 y(commands.)79 b(This)43 b(option)g(is)h(enabled)f(b)m(y)g(default,)k(but)c(only)g -(has)g(an)1110 3806 y(e\013ect)30 b(if)e(command)g(history)g(is)h +(has)g(an)1110 1870 y(e\013ect)30 b(if)e(command)g(history)g(is)h (enabled)f(\(see)h(Section)g(9.1)h([Bash)e(History)1110 -3915 y(F)-8 b(acilities],)34 b(page)d(152\).)630 4080 -y Ft(compat31)630 4189 y(compat32)630 4299 y(compat40)630 -4408 y(compat41)630 4518 y(compat42)630 4628 y(compat43)630 -4737 y(compat44)96 b Fu(These)39 b(con)m(trol)i(asp)s(ects)f(of)f(the)h +1979 y(F)-8 b(acilities],)34 b(page)d(159\).)630 2162 +y Ft(compat31)630 2271 y(compat32)630 2381 y(compat40)630 +2491 y(compat41)630 2600 y(compat42)630 2710 y(compat43)630 +2819 y(compat44)96 b Fu(These)39 b(con)m(trol)i(asp)s(ects)f(of)f(the)h (shell's)g(compatibilit)m(y)h(mo)s(de)e(\(see)h(Sec-)1110 -4847 y(tion)31 b(6.12)h([Shell)e(Compatibilit)m(y)i(Mo)s(de],)f(page)g -(110\).)630 5011 y Ft(complete_fullquote)1110 5121 y +2929 y(tion)31 b(6.12)h([Shell)e(Compatibilit)m(y)i(Mo)s(de],)f(page)g +(114\).)630 3112 y Ft(complete_fullquote)1110 3221 y Fu(If)g(set,)g(Bash)h(quotes)f(all)h(shell)f(metac)m(haracters)i(in)e -(\014lenames)g(and)g(direc-)1110 5230 y(tory)g(names)f(when)g(p)s +(\014lenames)g(and)g(direc-)1110 3331 y(tory)g(names)f(when)g(p)s (erforming)f(completion.)43 b(If)30 b(not)h(set,)g(Bash)g(remo)m(v)m -(es)1110 5340 y(metac)m(haracters)40 b(suc)m(h)d(as)h(the)g(dollar)g -(sign)g(from)f(the)h(set)g(of)f(c)m(haracters)p eop end -%%Page: 73 79 -TeXDict begin 73 78 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(73)1110 299 y(that)36 -b(will)g(b)s(e)f(quoted)g(in)g(completed)i(\014lenames)e(when)f(these)i -(metac)m(har-)1110 408 y(acters)29 b(app)s(ear)e(in)g(shell)h(v)-5 -b(ariable)28 b(references)g(in)f(w)m(ords)g(to)i(b)s(e)e(completed.) -1110 518 y(This)k(means)i(that)g(dollar)f(signs)g(in)g(v)-5 -b(ariable)33 b(names)g(that)f(expand)g(to)h(di-)1110 -628 y(rectories)28 b(will)g(not)f(b)s(e)f(quoted;)j(ho)m(w)m(ev)m(er,)g -(an)m(y)e(dollar)h(signs)f(app)s(earing)f(in)1110 737 -y(\014lenames)j(will)h(not)f(b)s(e)g(quoted,)h(either.)41 -b(This)28 b(is)i(activ)m(e)h(only)e(when)g(bash)1110 -847 y(is)39 b(using)f(bac)m(kslashes)i(to)g(quote)g(completed)f -(\014lenames.)67 b(This)38 b(v)-5 b(ariable)1110 956 +(es)1110 3440 y(metac)m(haracters)40 b(suc)m(h)d(as)h(the)g(dollar)g +(sign)g(from)f(the)h(set)g(of)f(c)m(haracters)1110 3550 +y(that)f(will)g(b)s(e)f(quoted)g(in)g(completed)i(\014lenames)e(when)f +(these)i(metac)m(har-)1110 3660 y(acters)29 b(app)s(ear)e(in)g(shell)h +(v)-5 b(ariable)28 b(references)g(in)f(w)m(ords)g(to)i(b)s(e)e +(completed.)1110 3769 y(This)k(means)i(that)g(dollar)f(signs)g(in)g(v) +-5 b(ariable)33 b(names)g(that)f(expand)g(to)h(di-)1110 +3879 y(rectories)28 b(will)g(not)f(b)s(e)f(quoted;)j(ho)m(w)m(ev)m(er,) +g(an)m(y)e(dollar)h(signs)f(app)s(earing)f(in)1110 3988 +y(\014lenames)i(will)g(not)g(b)s(e)g(quoted,)g(either.)41 +b(This)27 b(is)h(activ)m(e)i(only)e(when)f(Bash)1110 +4098 y(is)39 b(using)f(bac)m(kslashes)i(to)g(quote)g(completed)f +(\014lenames.)67 b(This)38 b(v)-5 b(ariable)1110 4208 y(is)41 b(set)g(b)m(y)g(default,)j(whic)m(h)c(is)h(the)g(default)g -(Bash)g(b)s(eha)m(vior)g(in)g(v)m(ersions)1110 1066 y(through)30 -b(4.2.)630 1244 y Ft(direxpand)1110 1354 y Fu(If)k(set,)i(Bash)f +(Bash)g(b)s(eha)m(vior)g(in)g(v)m(ersions)1110 4317 y(through)30 +b(4.2.)630 4500 y Ft(direxpand)1110 4609 y Fu(If)k(set,)i(Bash)f (replaces)g(directory)g(names)g(with)f(the)g(results)h(of)f(w)m(ord)g -(ex-)1110 1463 y(pansion)k(when)g(p)s(erforming)f(\014lename)i -(completion.)67 b(This)38 b(c)m(hanges)i(the)1110 1573 +(ex-)1110 4719 y(pansion)k(when)g(p)s(erforming)f(\014lename)i +(completion.)67 b(This)38 b(c)m(hanges)i(the)1110 4829 y(con)m(ten)m(ts)c(of)e(the)h(Readline)f(editing)h(bu\013er.)52 -b(If)33 b(not)i(set,)h(Bash)e(attempts)1110 1682 y(to)d(preserv)m(e)g -(what)f(the)g(user)g(t)m(yp)s(ed.)630 1861 y Ft(dirspell)96 +b(If)33 b(not)i(set,)h(Bash)e(attempts)1110 4938 y(to)d(preserv)m(e)g +(what)f(the)g(user)g(t)m(yp)s(ed.)630 5121 y Ft(dirspell)96 b Fu(If)26 b(set,)i(Bash)f(attempts)g(sp)s(elling)g(correction)g(on)g -(directory)g(names)f(during)1110 1970 y(w)m(ord)36 b(completion)h(if)f +(directory)g(names)f(during)1110 5230 y(w)m(ord)36 b(completion)h(if)f (the)g(directory)g(name)g(initially)h(supplied)e(do)s(es)h(not)1110 -2080 y(exist.)630 2258 y Ft(dotglob)144 b Fu(If)36 b(set,)i(Bash)e -(includes)g(\014lenames)g(b)s(eginning)f(with)h(a)g(`.')58 -b(in)36 b(the)g(results)1110 2367 y(of)f(\014lename)f(expansion.)53 -b(The)33 b(\014lenames)i(`)p Ft(.)p Fu(')f(and)g(`)p -Ft(..)p Fu(')g(m)m(ust)h(alw)m(a)m(ys)h(b)s(e)1110 2477 +5340 y(exist.)p eop end +%%Page: 76 82 +TeXDict begin 76 81 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(76)630 299 y Ft(dotglob)144 +b Fu(If)36 b(set,)i(Bash)e(includes)g(\014lenames)g(b)s(eginning)f +(with)h(a)g(`.')58 b(in)36 b(the)g(results)1110 408 y(of)f(\014lename)f +(expansion.)53 b(The)33 b(\014lenames)i(`)p Ft(.)p Fu(')f(and)g(`)p +Ft(..)p Fu(')g(m)m(ust)h(alw)m(a)m(ys)h(b)s(e)1110 518 y(matc)m(hed)31 b(explicitly)-8 b(,)33 b(ev)m(en)e(if)f -Ft(dotglob)f Fu(is)h(set.)630 2655 y Ft(execfail)96 b +Ft(dotglob)f Fu(is)h(set.)630 682 y Ft(execfail)96 b Fu(If)24 b(this)h(is)f(set,)j(a)e(non-in)m(teractiv)m(e)i(shell)e(will) -f(not)h(exit)h(if)e(it)h(cannot)h(execute)1110 2765 y(the)i(\014le)g -(sp)s(eci\014ed)g(as)g(an)g(argumen)m(t)g(to)h(the)f -Ft(exec)f Fu(builtin)h(command.)39 b(An)1110 2874 y(in)m(teractiv)m(e) -33 b(shell)e(do)s(es)f(not)g(exit)i(if)e Ft(exec)f Fu(fails.)630 -3052 y Ft(expand_aliases)1110 3162 y Fu(If)j(set,)h(aliases)g(are)g +f(not)h(exit)h(if)e(it)h(cannot)h(execute)1110 792 y(the)i(\014le)g(sp) +s(eci\014ed)g(as)g(an)g(argumen)m(t)g(to)h(the)f Ft(exec)f +Fu(builtin)h(command.)39 b(An)1110 902 y(in)m(teractiv)m(e)33 +b(shell)e(do)s(es)f(not)g(exit)i(if)e Ft(exec)f Fu(fails.)630 +1066 y Ft(expand_aliases)1110 1176 y Fu(If)j(set,)h(aliases)g(are)g (expanded)e(as)h(describ)s(ed)f(b)s(elo)m(w)h(under)f(Aliases,)i(Sec-) -1110 3271 y(tion)i(6.6)h([Aliases],)h(page)e(100.)55 +1110 1285 y(tion)i(6.6)h([Aliases],)h(page)e(103.)55 b(This)33 b(option)i(is)g(enabled)f(b)m(y)h(default)f(for)1110 -3381 y(in)m(teractiv)m(e)f(shells.)630 3559 y Ft(extdebug)96 +1395 y(in)m(teractiv)m(e)f(shells.)630 1559 y Ft(extdebug)96 b Fu(If)35 b(set)i(at)f(shell)g(in)m(v)m(o)s(cation,)k(or)c(in)f(a)h (shell)h(startup)e(\014le,)i(arrange)g(to)f(ex-)1110 -3669 y(ecute)h(the)f(debugger)g(pro\014le)g(b)s(efore)g(the)g(shell)h -(starts,)h(iden)m(tical)g(to)f(the)1110 3778 y Ft(--debugger)32 +1669 y(ecute)h(the)f(debugger)g(pro\014le)g(b)s(efore)g(the)g(shell)h +(starts,)h(iden)m(tical)g(to)f(the)1110 1778 y Ft(--debugger)32 b Fu(option.)56 b(If)35 b(set)h(after)g(in)m(v)m(o)s(cation,)j(b)s(eha) -m(vior)c(in)m(tended)g(for)1110 3888 y(use)30 b(b)m(y)g(debuggers)g(is) -h(enabled:)1159 4032 y(1.)61 b(The)37 b Ft(-F)g Fu(option)h(to)g(the)g +m(vior)c(in)m(tended)g(for)1110 1888 y(use)30 b(b)m(y)g(debuggers)g(is) +h(enabled:)1159 2025 y(1.)61 b(The)37 b Ft(-F)g Fu(option)h(to)g(the)g Ft(declare)d Fu(builtin)i(\(see)i(Section)f(4.2)h([Bash)1290 -4141 y(Builtins],)29 b(page)g(55\))g(displa)m(ys)f(the)g(source)h -(\014le)f(name)g(and)f(line)h(n)m(um-)1290 4251 y(b)s(er)h(corresp)s +2134 y(Builtins],)29 b(page)g(57\))g(displa)m(ys)f(the)g(source)h +(\014le)f(name)g(and)f(line)h(n)m(um-)1290 2244 y(b)s(er)h(corresp)s (onding)g(to)i(eac)m(h)g(function)f(name)g(supplied)f(as)i(an)f(argu-) -1290 4361 y(men)m(t.)1159 4504 y(2.)61 b(If)20 b(the)h(command)g(run)e +1290 2354 y(men)m(t.)1159 2491 y(2.)61 b(If)20 b(the)h(command)g(run)e (b)m(y)i(the)f Ft(DEBUG)g Fu(trap)g(returns)g(a)h(non-zero)g(v)-5 -b(alue,)1290 4614 y(the)31 b(next)f(command)g(is)h(skipp)s(ed)e(and)g -(not)i(executed.)1159 4758 y(3.)61 b(If)37 b(the)g(command)g(run)f(b)m +b(alue,)1290 2600 y(the)31 b(next)f(command)g(is)h(skipp)s(ed)e(and)g +(not)i(executed.)1159 2737 y(3.)61 b(If)37 b(the)g(command)g(run)f(b)m (y)i(the)f Ft(DEBUG)f Fu(trap)h(returns)f(a)i(v)-5 b(alue)38 -b(of)f(2,)1290 4867 y(and)c(the)g(shell)h(is)f(executing)i(in)e(a)h -(subroutine)e(\(a)i(shell)g(function)f(or)1290 4977 y(a)h(shell)g +b(of)f(2,)1290 2847 y(and)c(the)g(shell)h(is)f(executing)i(in)e(a)h +(subroutine)e(\(a)i(shell)g(function)f(or)1290 2956 y(a)h(shell)g (script)f(executed)h(b)m(y)g(the)f Ft(.)h Fu(or)f Ft(source)f -Fu(builtins\),)i(the)g(shell)1290 5087 y(sim)m(ulates)d(a)g(call)h(to)f -Ft(return)p Fu(.)1159 5230 y(4.)61 b Ft(BASH_ARGC)34 +Fu(builtins\),)i(the)g(shell)1290 3066 y(sim)m(ulates)d(a)g(call)h(to)f +Ft(return)p Fu(.)1159 3203 y(4.)61 b Ft(BASH_ARGC)34 b Fu(and)i Ft(BASH_ARGV)e Fu(are)j(up)s(dated)e(as)h(describ)s(ed)g(in) -g(their)1290 5340 y(descriptions)30 b(\(see)i(Section)f(5.2)g([Bash)g -(V)-8 b(ariables],)32 b(page)f(78\).)p eop end -%%Page: 74 80 -TeXDict begin 74 79 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(74)1159 299 y(5.)61 +g(their)1290 3313 y(descriptions)30 b(\(see)i(Section)f(5.2)g([Bash)g +(V)-8 b(ariables],)32 b(page)f(81\).)1159 3450 y(5.)61 b(F)-8 b(unction)57 b(tracing)g(is)g(enabled:)93 b(command)56 -b(substitution,)63 b(shell)1290 408 y(functions,)32 b(and)e(subshells)h -(in)m(v)m(ok)m(ed)i(with)e Ft(\()f Fj(command)e Ft(\))j -Fu(inherit)h(the)1290 518 y Ft(DEBUG)d Fu(and)h Ft(RETURN)e -Fu(traps.)1159 662 y(6.)61 b(Error)41 b(tracing)i(is)f(enabled:)63 -b(command)42 b(substitution,)i(shell)f(func-)1290 772 -y(tions,)32 b(and)e(subshells)g(in)m(v)m(ok)m(ed)i(with)e -Ft(\()g Fj(command)f Ft(\))h Fu(inherit)h(the)g Ft(ERR)1290 -881 y Fu(trap.)630 1060 y Ft(extglob)144 b Fu(If)26 b(set,)i(the)f -(extended)f(pattern)h(matc)m(hing)g(features)g(describ)s(ed)e(ab)s(o)m -(v)m(e)j(\(see)1110 1170 y(Section)j(3.5.8.1)i([P)m(attern)f(Matc)m -(hing],)g(page)f(36\))h(are)f(enabled.)630 1349 y Ft(extquote)96 -b Fu(If)51 b(set,)58 b Ft($')p Fj(string)p Ft(')49 b -Fu(and)i Ft($")p Fj(string)p Ft(")e Fu(quoting)k(is)e(p)s(erformed)f -(within)1110 1458 y Ft(${)p Fj(parameter)p Ft(})31 b -Fu(expansions)k(enclosed)g(in)g(double)f(quotes.)55 b(This)33 -b(option)1110 1568 y(is)d(enabled)h(b)m(y)f(default.)630 -1747 y Ft(failglob)96 b Fu(If)36 b(set,)j(patterns)d(whic)m(h)g(fail)h -(to)h(matc)m(h)f(\014lenames)f(during)g(\014lename)g(ex-)1110 -1856 y(pansion)30 b(result)g(in)g(an)g(expansion)h(error.)630 -2035 y Ft(force_fignore)1110 2145 y Fu(If)43 b(set,)k(the)d(su\016xes)f +b(substitution,)63 b(shell)1290 3559 y(functions,)32 +b(and)e(subshells)h(in)m(v)m(ok)m(ed)i(with)e Ft(\()f +Fj(command)e Ft(\))j Fu(inherit)h(the)1290 3669 y Ft(DEBUG)d +Fu(and)h Ft(RETURN)e Fu(traps.)1159 3806 y(6.)61 b(Error)41 +b(tracing)i(is)f(enabled:)63 b(command)42 b(substitution,)i(shell)f +(func-)1290 3915 y(tions,)32 b(and)e(subshells)g(in)m(v)m(ok)m(ed)i +(with)e Ft(\()g Fj(command)f Ft(\))h Fu(inherit)h(the)g +Ft(ERR)1290 4025 y Fu(trap.)630 4189 y Ft(extglob)144 +b Fu(If)26 b(set,)i(the)f(extended)f(pattern)h(matc)m(hing)g(features)g +(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)1110 4299 y(Section)j(3.5.8.1)i +([P)m(attern)f(Matc)m(hing],)g(page)f(37\))h(are)f(enabled.)630 +4463 y Ft(extquote)96 b Fu(If)51 b(set,)58 b Ft($')p +Fj(string)p Ft(')49 b Fu(and)i Ft($")p Fj(string)p Ft(")e +Fu(quoting)k(is)e(p)s(erformed)f(within)1110 4573 y Ft(${)p +Fj(parameter)p Ft(})31 b Fu(expansions)k(enclosed)g(in)g(double)f +(quotes.)55 b(This)33 b(option)1110 4682 y(is)d(enabled)h(b)m(y)f +(default.)630 4847 y Ft(failglob)96 b Fu(If)36 b(set,)j(patterns)d +(whic)m(h)g(fail)h(to)h(matc)m(h)f(\014lenames)f(during)g(\014lename)g +(ex-)1110 4956 y(pansion)30 b(result)g(in)g(an)g(expansion)h(error.)630 +5121 y Ft(force_fignore)1110 5230 y Fu(If)43 b(set,)k(the)d(su\016xes)f (sp)s(eci\014ed)f(b)m(y)i(the)f Ft(FIGNORE)f Fu(shell)h(v)-5 -b(ariable)44 b(cause)1110 2254 y(w)m(ords)31 b(to)h(b)s(e)f(ignored)h -(when)f(p)s(erforming)f(w)m(ord)h(completion)i(ev)m(en)f(if)g(the)1110 -2364 y(ignored)37 b(w)m(ords)g(are)g(the)h(only)f(p)s(ossible)g -(completions.)62 b(See)37 b(Section)h(5.2)1110 2473 y([Bash)24 -b(V)-8 b(ariables],)27 b(page)e(78,)h(for)d(a)h(description)g(of)g -Ft(FIGNORE)p Fu(.)37 b(This)22 b(option)1110 2583 y(is)30 -b(enabled)h(b)m(y)f(default.)630 2762 y Ft(globasciiranges)1110 -2871 y Fu(If)j(set,)h(range)f(expressions)g(used)f(in)h(pattern)g(matc) -m(hing)h(brac)m(k)m(et)h(expres-)1110 2981 y(sions)28 -b(\(see)h(Section)h(3.5.8.1)g([P)m(attern)g(Matc)m(hing],)h(page)e -(36\))g(b)s(eha)m(v)m(e)g(as)g(if)1110 3091 y(in)i(the)g(traditional)i -(C)d(lo)s(cale)j(when)d(p)s(erforming)g(comparisons.)44 -b(That)31 b(is,)1110 3200 y(the)d(curren)m(t)g(lo)s(cale's)i(collating) -h(sequence)d(is)h(not)f(tak)m(en)h(in)m(to)g(accoun)m(t,)i(so)1110 -3310 y(`)p Ft(b)p Fu(')j(will)g(not)g(collate)i(b)s(et)m(w)m(een)e(`)p -Ft(A)p Fu(')g(and)f(`)p Ft(B)p Fu(',)h(and)f(upp)s(er-case)g(and)g(lo)m -(w)m(er-)1110 3419 y(case)e(ASCI)s(I)e(c)m(haracters)j(will)f(collate)i -(together.)630 3598 y Ft(globskipdots)1110 3708 y Fu(If)38 -b(set,)k(\014lename)d(expansion)f(will)h(nev)m(er)g(matc)m(h)h(the)f -(\014lenames)g(`)p Ft(.)p Fu(')g(and)1110 3817 y(`)p -Ft(..)p Fu(',)c(ev)m(en)g(if)g(the)f(pattern)g(b)s(egins)g(with)g(a)h -(`)p Ft(.)p Fu('.)52 b(This)34 b(option)h(is)f(enabled)1110 -3927 y(b)m(y)c(default.)630 4106 y Ft(globstar)96 b Fu(If)38 -b(set,)j(the)e(pattern)f(`)p Ft(**)p Fu(')h(used)e(in)i(a)f(\014lename) -h(expansion)f(con)m(text)j(will)1110 4215 y(matc)m(h)36 -b(all)g(\014les)f(and)f(zero)i(or)f(more)g(directories)h(and)e(sub)s -(directories.)54 b(If)1110 4325 y(the)30 b(pattern)g(is)g(follo)m(w)m -(ed)i(b)m(y)d(a)i(`)p Ft(/)p Fu(',)f(only)g(directories)h(and)f(sub)s -(directories)1110 4434 y(matc)m(h.)630 4613 y Ft(gnu_errfmt)1110 -4723 y Fu(If)35 b(set,)j(shell)e(error)g(messages)g(are)h(written)e(in) -h(the)g(standard)f Fm(gnu)g Fu(error)1110 4832 y(message)c(format.)630 -5011 y Ft(histappend)1110 5121 y Fu(If)c(set,)j(the)e(history)g(list)g +b(ariable)44 b(cause)1110 5340 y(w)m(ords)31 b(to)h(b)s(e)f(ignored)h +(when)f(p)s(erforming)f(w)m(ord)h(completion)i(ev)m(en)f(if)g(the)p +eop end +%%Page: 77 83 +TeXDict begin 77 82 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(77)1110 299 y(ignored)37 +b(w)m(ords)g(are)g(the)h(only)f(p)s(ossible)g(completions.)62 +b(See)37 b(Section)h(5.2)1110 408 y([Bash)24 b(V)-8 b(ariables],)27 +b(page)e(81,)h(for)d(a)h(description)g(of)g Ft(FIGNORE)p +Fu(.)37 b(This)22 b(option)1110 518 y(is)30 b(enabled)h(b)m(y)f +(default.)630 701 y Ft(globasciiranges)1110 810 y Fu(If)j(set,)h(range) +f(expressions)g(used)f(in)h(pattern)g(matc)m(hing)h(brac)m(k)m(et)h +(expres-)1110 920 y(sions)28 b(\(see)h(Section)h(3.5.8.1)g([P)m(attern) +g(Matc)m(hing],)h(page)e(37\))g(b)s(eha)m(v)m(e)g(as)g(if)1110 +1029 y(in)i(the)g(traditional)i(C)d(lo)s(cale)j(when)d(p)s(erforming)g +(comparisons.)44 b(That)31 b(is,)1110 1139 y(the)d(curren)m(t)g(lo)s +(cale's)i(collating)h(sequence)d(is)h(not)f(tak)m(en)h(in)m(to)g +(accoun)m(t,)i(so)1110 1249 y(`)p Ft(b)p Fu(')j(will)g(not)g(collate)i +(b)s(et)m(w)m(een)e(`)p Ft(A)p Fu(')g(and)f(`)p Ft(B)p +Fu(',)h(and)f(upp)s(er-case)g(and)g(lo)m(w)m(er-)1110 +1358 y(case)e(ASCI)s(I)e(c)m(haracters)j(will)f(collate)i(together.)630 +1541 y Ft(globskipdots)1110 1650 y Fu(If)38 b(set,)k(\014lename)d +(expansion)f(will)h(nev)m(er)g(matc)m(h)h(the)f(\014lenames)g(`)p +Ft(.)p Fu(')g(and)1110 1760 y(`)p Ft(..)p Fu(',)c(ev)m(en)g(if)g(the)f +(pattern)g(b)s(egins)g(with)g(a)h(`)p Ft(.)p Fu('.)52 +b(This)34 b(option)h(is)f(enabled)1110 1870 y(b)m(y)c(default.)630 +2052 y Ft(globstar)96 b Fu(If)38 b(set,)j(the)e(pattern)f(`)p +Ft(**)p Fu(')h(used)e(in)i(a)f(\014lename)h(expansion)f(con)m(text)j +(will)1110 2162 y(matc)m(h)36 b(all)g(\014les)f(and)f(zero)i(or)f(more) +g(directories)h(and)e(sub)s(directories.)54 b(If)1110 +2271 y(the)30 b(pattern)g(is)g(follo)m(w)m(ed)i(b)m(y)d(a)i(`)p +Ft(/)p Fu(',)f(only)g(directories)h(and)f(sub)s(directories)1110 +2381 y(matc)m(h.)630 2564 y Ft(gnu_errfmt)1110 2673 y +Fu(If)35 b(set,)j(shell)e(error)g(messages)g(are)h(written)e(in)h(the)g +(standard)f Fm(gnu)g Fu(error)1110 2783 y(message)c(format.)630 +2966 y Ft(histappend)1110 3075 y Fu(If)c(set,)j(the)e(history)g(list)g (is)g(app)s(ended)e(to)j(the)f(\014le)g(named)f(b)m(y)h(the)g(v)-5 -b(alue)29 b(of)1110 5230 y(the)d Ft(HISTFILE)d Fu(v)-5 +b(alue)29 b(of)1110 3185 y(the)d Ft(HISTFILE)d Fu(v)-5 b(ariable)26 b(when)e(the)h(shell)h(exits,)h(rather)e(than)h(o)m(v)m -(erwriting)1110 5340 y(the)31 b(\014le.)p eop end -%%Page: 75 81 -TeXDict begin 75 80 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(75)630 299 y Ft(histreedit)1110 -408 y Fu(If)33 b(set,)h(and)f(Readline)h(is)f(b)s(eing)g(used,)g(a)g +(erwriting)1110 3294 y(the)31 b(\014le.)630 3477 y Ft(histreedit)1110 +3587 y Fu(If)i(set,)h(and)f(Readline)h(is)f(b)s(eing)g(used,)g(a)g (user)g(is)g(giv)m(en)h(the)g(opp)s(ortunit)m(y)1110 -518 y(to)d(re-edit)g(a)g(failed)g(history)f(substitution.)630 -682 y Ft(histverify)1110 792 y Fu(If)35 b(set,)i(and)e(Readline)h(is)f -(b)s(eing)g(used,)h(the)f(results)g(of)g(history)h(substitu-)1110 -902 y(tion)h(are)g(not)g(immediately)h(passed)e(to)h(the)g(shell)g -(parser.)59 b(Instead,)38 b(the)1110 1011 y(resulting)i(line)f(is)h +3696 y(to)d(re-edit)g(a)g(failed)g(history)f(substitution.)630 +3879 y Ft(histverify)1110 3988 y Fu(If)35 b(set,)i(and)e(Readline)h(is) +f(b)s(eing)g(used,)h(the)f(results)g(of)g(history)h(substitu-)1110 +4098 y(tion)h(are)g(not)g(immediately)h(passed)e(to)h(the)g(shell)g +(parser.)59 b(Instead,)38 b(the)1110 4208 y(resulting)i(line)f(is)h (loaded)g(in)m(to)g(the)g(Readline)g(editing)g(bu\013er,)h(allo)m(wing) -1110 1121 y(further)29 b(mo)s(di\014cation.)630 1285 -y Ft(hostcomplete)1110 1395 y Fu(If)38 b(set,)j(and)c(Readline)i(is)f +1110 4317 y(further)29 b(mo)s(di\014cation.)630 4500 +y Ft(hostcomplete)1110 4609 y Fu(If)38 b(set,)j(and)c(Readline)i(is)f (b)s(eing)g(used,)h(Bash)g(will)f(attempt)h(to)g(p)s(erform)1110 -1504 y(hostname)d(completion)h(when)e(a)h(w)m(ord)f(con)m(taining)i(a)f -(`)p Ft(@)p Fu(')g(is)g(b)s(eing)f(com-)1110 1614 y(pleted)g(\(see)h +4719 y(hostname)d(completion)h(when)e(a)h(w)m(ord)f(con)m(taining)i(a)f +(`)p Ft(@)p Fu(')g(is)g(b)s(eing)f(com-)1110 4829 y(pleted)g(\(see)h (Section)f(8.4.6)i([Commands)d(F)-8 b(or)36 b(Completion],)g(page)g -(139\).)1110 1724 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.) -630 1888 y Ft(huponexit)1110 1998 y Fu(If)i(set,)i(Bash)f(will)h(send)d +(145\).)1110 4938 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.) +630 5121 y Ft(huponexit)1110 5230 y Fu(If)i(set,)i(Bash)f(will)h(send)d Ft(SIGHUP)h Fu(to)h(all)h(jobs)e(when)g(an)g(in)m(teractiv)m(e)k(login) -1110 2107 y(shell)31 b(exits)g(\(see)g(Section)g(3.7.6)h([Signals],)g -(page)f(45\).)630 2271 y Ft(inherit_errexit)1110 2381 -y Fu(If)e(set,)h(command)g(substitution)f(inherits)g(the)g(v)-5 -b(alue)30 b(of)g(the)f Ft(errexit)f Fu(op-)1110 2491 -y(tion,)33 b(instead)g(of)f(unsetting)g(it)h(in)f(the)g(subshell)f(en)m -(vironmen)m(t.)46 b(This)32 b(op-)1110 2600 y(tion)f(is)f(enabled)h -(when)e Fm(posix)h Fu(mo)s(de)g(is)g(enabled.)630 2765 -y Ft(interactive_comments)1110 2874 y Fu(Allo)m(w)d(a)g(w)m(ord)e(b)s +1110 5340 y(shell)31 b(exits)g(\(see)g(Section)g(3.7.6)h([Signals],)g +(page)f(46\).)p eop end +%%Page: 78 84 +TeXDict begin 78 83 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(78)630 299 y Ft(inherit_errexit) +1110 408 y Fu(If)29 b(set,)h(command)g(substitution)f(inherits)g(the)g +(v)-5 b(alue)30 b(of)g(the)f Ft(errexit)f Fu(op-)1110 +518 y(tion,)33 b(instead)g(of)f(unsetting)g(it)h(in)f(the)g(subshell)f +(en)m(vironmen)m(t.)46 b(This)32 b(op-)1110 628 y(tion)f(is)f(enabled)h +(when)e Fm(posix)h Fu(mo)s(de)g(is)g(enabled.)630 792 +y Ft(interactive_comments)1110 902 y Fu(Allo)m(w)d(a)g(w)m(ord)e(b)s (eginning)g(with)h(`)p Ft(#)p Fu(')g(to)h(cause)f(that)h(w)m(ord)f(and) -f(all)i(remain-)1110 2984 y(ing)41 b(c)m(haracters)i(on)e(that)h(line)g +f(all)i(remain-)1110 1011 y(ing)41 b(c)m(haracters)i(on)e(that)h(line)g (to)g(b)s(e)f(ignored)g(in)g(an)g(in)m(teractiv)m(e)j(shell.)1110 -3093 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)630 -3258 y Ft(lastpipe)96 b Fu(If)24 b(set,)i(and)e(job)g(con)m(trol)i(is)f +1121 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)630 +1285 y Ft(lastpipe)96 b Fu(If)24 b(set,)i(and)e(job)g(con)m(trol)i(is)f (not)f(activ)m(e,)k(the)d(shell)f(runs)f(the)i(last)g(command)1110 -3367 y(of)37 b(a)h(pip)s(eline)e(not)h(executed)h(in)f(the)g(bac)m -(kground)g(in)g(the)g(curren)m(t)g(shell)1110 3477 y(en)m(vironmen)m -(t.)630 3641 y Ft(lithist)144 b Fu(If)22 b(enabled,)i(and)d(the)h +1395 y(of)37 b(a)h(pip)s(eline)e(not)h(executed)h(in)f(the)g(bac)m +(kground)g(in)g(the)g(curren)m(t)g(shell)1110 1504 y(en)m(vironmen)m +(t.)630 1669 y Ft(lithist)144 b Fu(If)22 b(enabled,)i(and)d(the)h Ft(cmdhist)e Fu(option)j(is)f(enabled,)i(m)m(ulti-line)f(commands)1110 -3751 y(are)28 b(sa)m(v)m(ed)h(to)g(the)f(history)g(with)f(em)m(b)s -(edded)g(newlines)h(rather)g(than)f(using)1110 3861 y(semicolon)32 -b(separators)f(where)e(p)s(ossible.)630 4025 y Ft(localvar_inherit)1110 -4134 y Fu(If)j(set,)h(lo)s(cal)g(v)-5 b(ariables)33 b(inherit)f(the)g +1778 y(are)28 b(sa)m(v)m(ed)h(to)g(the)f(history)g(with)f(em)m(b)s +(edded)g(newlines)h(rather)g(than)f(using)1110 1888 y(semicolon)32 +b(separators)f(where)e(p)s(ossible.)630 2052 y Ft(localvar_inherit)1110 +2162 y Fu(If)j(set,)h(lo)s(cal)g(v)-5 b(ariables)33 b(inherit)f(the)g (v)-5 b(alue)32 b(and)g(attributes)h(of)f(a)g(v)-5 b(ariable)1110 -4244 y(of)36 b(the)g(same)g(name)g(that)h(exists)f(at)h(a)f(previous)g -(scop)s(e)g(b)s(efore)f(an)m(y)h(new)1110 4354 y(v)-5 +2271 y(of)36 b(the)g(same)g(name)g(that)h(exists)f(at)h(a)f(previous)g +(scop)s(e)g(b)s(efore)f(an)m(y)h(new)1110 2381 y(v)-5 b(alue)31 b(is)f(assigned.)41 b(The)30 b Ft(nameref)e -Fu(attribute)k(is)e(not)h(inherited.)630 4518 y Ft(localvar_unset)1110 -4628 y Fu(If)i(set,)i(calling)g Ft(unset)d Fu(on)i(lo)s(cal)g(v)-5 +Fu(attribute)k(is)e(not)h(inherited.)630 2545 y Ft(localvar_unset)1110 +2655 y Fu(If)i(set,)i(calling)g Ft(unset)d Fu(on)i(lo)s(cal)g(v)-5 b(ariables)35 b(in)e(previous)g(function)g(scop)s(es)1110 -4737 y(marks)26 b(them)g(so)g(subsequen)m(t)g(lo)s(okups)f(\014nd)g -(them)h(unset)f(un)m(til)i(that)g(func-)1110 4847 y(tion)40 +2765 y(marks)26 b(them)g(so)g(subsequen)m(t)g(lo)s(okups)f(\014nd)g +(them)h(unset)f(un)m(til)i(that)g(func-)1110 2874 y(tion)40 b(returns.)68 b(This)39 b(is)g(iden)m(tical)j(to)e(the)g(b)s(eha)m -(vior)g(of)g(unsetting)g(lo)s(cal)1110 4956 y(v)-5 b(ariables)31 -b(at)g(the)g(curren)m(t)f(function)g(scop)s(e.)630 5121 -y Ft(login_shell)1110 5230 y Fu(The)35 b(shell)h(sets)g(this)f(option)h +(vior)g(of)g(unsetting)g(lo)s(cal)1110 2984 y(v)-5 b(ariables)31 +b(at)g(the)g(curren)m(t)f(function)g(scop)s(e.)630 3148 +y Ft(login_shell)1110 3258 y Fu(The)35 b(shell)h(sets)g(this)f(option)h (if)g(it)g(is)f(started)h(as)g(a)g(login)g(shell)g(\(see)g(Sec-)1110 -5340 y(tion)29 b(6.1)g([In)m(v)m(oking)h(Bash],)f(page)g(91\).)41 -b(The)28 b(v)-5 b(alue)29 b(ma)m(y)g(not)f(b)s(e)g(c)m(hanged.)p -eop end -%%Page: 76 82 -TeXDict begin 76 81 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(76)630 299 y Ft(mailwarn)96 -b Fu(If)34 b(set,)i(and)e(a)h(\014le)g(that)g(Bash)f(is)h(c)m(hec)m -(king)h(for)f(mail)g(has)f(b)s(een)g(accessed)1110 408 -y(since)24 b(the)h(last)g(time)f(it)h(w)m(as)f(c)m(hec)m(k)m(ed,)k(the) -c(message)h Ft("The)k(mail)h(in)f Fj(mail-)1110 518 y(file)g -Ft(has)h(been)f(read")g Fu(is)h(displa)m(y)m(ed.)630 -701 y Ft(no_empty_cmd_completion)1110 810 y Fu(If)g(set,)g(and)g +3367 y(tion)29 b(6.1)g([In)m(v)m(oking)h(Bash],)f(page)g(94\).)41 +b(The)28 b(v)-5 b(alue)29 b(ma)m(y)g(not)f(b)s(e)g(c)m(hanged.)630 +3532 y Ft(mailwarn)96 b Fu(If)34 b(set,)i(and)e(a)h(\014le)g(that)g +(Bash)f(is)h(c)m(hec)m(king)h(for)f(mail)g(has)f(b)s(een)g(accessed) +1110 3641 y(since)24 b(the)h(last)g(time)f(it)h(w)m(as)f(c)m(hec)m(k)m +(ed,)k(the)c(message)h Ft("The)k(mail)h(in)f Fj(mail-)1110 +3751 y(file)g Ft(has)h(been)f(read")g Fu(is)h(displa)m(y)m(ed.)630 +3915 y Ft(no_empty_cmd_completion)1110 4025 y Fu(If)g(set,)g(and)g (Readline)g(is)h(b)s(eing)e(used,)h(Bash)g(will)g(not)g(attempt)i(to)e -(searc)m(h)1110 920 y(the)25 b Ft(PATH)f Fu(for)h(p)s(ossible)f +(searc)m(h)1110 4134 y(the)25 b Ft(PATH)f Fu(for)h(p)s(ossible)f (completions)j(when)d(completion)i(is)f(attempted)h(on)1110 -1029 y(an)k(empt)m(y)h(line.)630 1212 y Ft(nocaseglob)1110 -1322 y Fu(If)38 b(set,)k(Bash)d(matc)m(hes)g(\014lenames)g(in)f(a)h -(case-insensitiv)m(e)j(fashion)c(when)1110 1431 y(p)s(erforming)29 -b(\014lename)i(expansion.)630 1614 y Ft(nocasematch)1110 -1724 y Fu(If)42 b(set,)k(Bash)d(matc)m(hes)g(patterns)g(in)f(a)h -(case-insensitiv)m(e)i(fashion)d(when)1110 1833 y(p)s(erforming)31 +4244 y(an)k(empt)m(y)h(line.)630 4408 y Ft(nocaseglob)1110 +4518 y Fu(If)38 b(set,)k(Bash)d(matc)m(hes)g(\014lenames)g(in)f(a)h +(case-insensitiv)m(e)j(fashion)c(when)1110 4628 y(p)s(erforming)29 +b(\014lename)i(expansion.)630 4792 y Ft(nocasematch)1110 +4902 y Fu(If)42 b(set,)k(Bash)d(matc)m(hes)g(patterns)g(in)f(a)h +(case-insensitiv)m(e)i(fashion)d(when)1110 5011 y(p)s(erforming)31 b(matc)m(hing)i(while)f(executing)i Ft(case)d Fu(or)h -Ft([[)g Fu(conditional)h(com-)1110 1943 y(mands)25 b(\(see)i(Section)f +Ft([[)g Fu(conditional)h(com-)1110 5121 y(mands)25 b(\(see)i(Section)f (3.2.5.2)j([Conditional)e(Constructs],)f(page)h(12,)h(when)1110 -2052 y(p)s(erforming)e(pattern)i(substitution)f(w)m(ord)g(expansions,)h -(or)f(when)g(\014ltering)1110 2162 y(p)s(ossible)j(completions)h(as)g -(part)f(of)h(programmable)f(completion.)630 2345 y Ft -(noexpand_translation)1110 2454 y Fu(If)23 b(set,)j(Bash)d(encloses)i +5230 y(p)s(erforming)e(pattern)i(substitution)f(w)m(ord)g(expansions,)h +(or)f(when)g(\014ltering)1110 5340 y(p)s(ossible)j(completions)h(as)g +(part)f(of)h(programmable)f(completion.)p eop end +%%Page: 79 85 +TeXDict begin 79 84 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(79)630 299 y Ft +(noexpand_translation)1110 408 y Fu(If)23 b(set,)j(Bash)d(encloses)i (the)e(translated)h(results)g(of)f($)p Ft(")p Fu(...)p -Ft(")h Fu(quoting)g(in)f(single)1110 2564 y(quotes)k(instead)g(of)g +Ft(")h Fu(quoting)g(in)f(single)1110 518 y(quotes)k(instead)g(of)g (double)f(quotes.)40 b(If)26 b(the)h(string)f(is)h(not)g(translated,)h -(this)1110 2673 y(has)i(no)g(e\013ect.)630 2856 y Ft(nullglob)96 -b Fu(If)23 b(set,)j(Bash)e(allo)m(ws)g(\014lename)g(patterns)g(whic)m -(h)f(matc)m(h)h(no)g(\014les)f(to)i(expand)1110 2966 -y(to)31 b(a)g(n)m(ull)f(string,)h(rather)f(than)g(themselv)m(es.)630 -3148 y Ft(patsub_replacement)1110 3258 y Fu(If)38 b(set,)k(Bash)d -(expands)e(o)s(ccurrences)i(of)g(`)p Ft(&)p Fu(')g(in)f(the)h -(replacemen)m(t)h(string)1110 3367 y(of)47 b(pattern)g(substitution)g -(to)h(the)f(text)h(matc)m(hed)g(b)m(y)f(the)g(pattern,)52 -b(as)1110 3477 y(describ)s(ed)45 b(ab)s(o)m(v)m(e)i(\(see)f(Section)h -(3.5.3)g([Shell)f(P)m(arameter)h(Expansion],)1110 3587 -y(page)31 b(26\).)42 b(This)30 b(option)g(is)h(enabled)f(b)m(y)g -(default.)630 3769 y Ft(progcomp)96 b Fu(If)25 b(set,)i(the)f -(programmable)g(completion)g(facilities)i(\(see)f(Section)f(8.6)h -([Pro-)1110 3879 y(grammable)45 b(Completion],)k(page)c(143\))h(are)f -(enabled.)82 b(This)44 b(option)h(is)1110 3988 y(enabled)30 -b(b)m(y)h(default.)630 4171 y Ft(progcomp_alias)1110 -4281 y Fu(If)23 b(set,)j(and)d(programmable)h(completion)h(is)f -(enabled,)h(Bash)f(treats)h(a)f(com-)1110 4390 y(mand)34 -b(name)h(that)g(do)s(esn't)f(ha)m(v)m(e)i(an)m(y)g(completions)f(as)g -(a)g(p)s(ossible)g(alias)1110 4500 y(and)40 b(attempts)i(alias)h -(expansion.)72 b(If)41 b(it)g(has)g(an)g(alias,)k(Bash)c(attempts)1110 -4609 y(programmable)28 b(completion)h(using)e(the)h(command)f(w)m(ord)h -(resulting)f(from)1110 4719 y(the)k(expanded)e(alias.)630 -4902 y Ft(promptvars)1110 5011 y Fu(If)50 b(set,)56 b(prompt)49 -b(strings)h(undergo)g(parameter)h(expansion,)k(command)1110 -5121 y(substitution,)35 b(arithmetic)g(expansion,)g(and)e(quote)i(remo) -m(v)-5 b(al)35 b(after)f(b)s(eing)1110 5230 y(expanded)53 -b(as)h(describ)s(ed)e(b)s(elo)m(w)i(\(see)h(Section)f(6.9)h([Con)m -(trolling)g(the)1110 5340 y(Prompt],)30 b(page)h(104\).)43 -b(This)29 b(option)i(is)g(enabled)f(b)m(y)g(default.)p -eop end -%%Page: 77 83 -TeXDict begin 77 82 bop 150 -116 a Fu(Chapter)30 b(4:)41 -b(Shell)30 b(Builtin)h(Commands)2069 b(77)630 299 y Ft -(restricted_shell)1110 408 y Fu(The)40 b(shell)h(sets)g(this)g(option)g -(if)g(it)h(is)e(started)i(in)e(restricted)i(mo)s(de)e(\(see)1110 -518 y(Section)32 b(6.10)h([The)d(Restricted)j(Shell],)e(page)h(105\).) -45 b(The)30 b(v)-5 b(alue)32 b(ma)m(y)g(not)1110 628 -y(b)s(e)g(c)m(hanged.)49 b(This)32 b(is)h(not)h(reset)f(when)f(the)h -(startup)g(\014les)f(are)i(executed,)1110 737 y(allo)m(wing)k(the)e -(startup)f(\014les)h(to)g(disco)m(v)m(er)h(whether)f(or)f(not)i(a)f -(shell)g(is)g(re-)1110 847 y(stricted.)630 1006 y Ft(shift_verbose)1110 -1116 y Fu(If)g(this)g(is)g(set,)j(the)d Ft(shift)f Fu(builtin)h(prin)m -(ts)f(an)h(error)g(message)i(when)d(the)1110 1225 y(shift)30 +(this)1110 628 y(has)i(no)g(e\013ect.)630 774 y Ft(nullglob)96 +b Fu(If)35 b(set,)j(\014lename)e(expansion)f(patterns)h(whic)m(h)f +(matc)m(h)i(no)e(\014les)h(\(see)g(Sec-)1110 883 y(tion)g(3.5.8)i +([Filename)f(Expansion],)f(page)h(36\))g(expand)e(to)h(nothing)g(and) +1110 993 y(are)31 b(remo)m(v)m(ed,)g(rather)g(than)f(expanding)g(to)h +(themselv)m(es.)630 1139 y Ft(patsub_replacement)1110 +1249 y Fu(If)38 b(set,)k(Bash)d(expands)e(o)s(ccurrences)i(of)g(`)p +Ft(&)p Fu(')g(in)f(the)h(replacemen)m(t)h(string)1110 +1358 y(of)47 b(pattern)g(substitution)g(to)h(the)f(text)h(matc)m(hed)g +(b)m(y)f(the)g(pattern,)52 b(as)1110 1468 y(describ)s(ed)45 +b(ab)s(o)m(v)m(e)i(\(see)f(Section)h(3.5.3)g([Shell)f(P)m(arameter)h +(Expansion],)1110 1577 y(page)31 b(26\).)42 b(This)30 +b(option)g(is)h(enabled)f(b)m(y)g(default.)630 1724 y +Ft(progcomp)96 b Fu(If)25 b(set,)i(the)f(programmable)g(completion)g +(facilities)i(\(see)f(Section)f(8.6)h([Pro-)1110 1833 +y(grammable)45 b(Completion],)k(page)c(150\))h(are)f(enabled.)82 +b(This)44 b(option)h(is)1110 1943 y(enabled)30 b(b)m(y)h(default.)630 +2089 y Ft(progcomp_alias)1110 2198 y Fu(If)23 b(set,)j(and)d +(programmable)h(completion)h(is)f(enabled,)h(Bash)f(treats)h(a)f(com-) +1110 2308 y(mand)34 b(name)h(that)g(do)s(esn't)f(ha)m(v)m(e)i(an)m(y)g +(completions)f(as)g(a)g(p)s(ossible)g(alias)1110 2418 +y(and)40 b(attempts)i(alias)h(expansion.)72 b(If)41 b(it)g(has)g(an)g +(alias,)k(Bash)c(attempts)1110 2527 y(programmable)28 +b(completion)h(using)e(the)h(command)f(w)m(ord)h(resulting)f(from)1110 +2637 y(the)k(expanded)e(alias.)630 2783 y Ft(promptvars)1110 +2892 y Fu(If)50 b(set,)56 b(prompt)49 b(strings)h(undergo)g(parameter)h +(expansion,)k(command)1110 3002 y(substitution,)35 b(arithmetic)g +(expansion,)g(and)e(quote)i(remo)m(v)-5 b(al)35 b(after)f(b)s(eing)1110 +3112 y(expanded)53 b(as)h(describ)s(ed)e(b)s(elo)m(w)i(\(see)h(Section) +f(6.9)h([Con)m(trolling)g(the)1110 3221 y(Prompt],)30 +b(page)h(107\).)43 b(This)29 b(option)i(is)g(enabled)f(b)m(y)g +(default.)630 3367 y Ft(restricted_shell)1110 3477 y +Fu(The)40 b(shell)h(sets)g(this)g(option)g(if)g(it)h(is)e(started)i(in) +e(restricted)i(mo)s(de)e(\(see)1110 3587 y(Section)32 +b(6.10)h([The)d(Restricted)j(Shell],)e(page)h(109\).)45 +b(The)30 b(v)-5 b(alue)32 b(ma)m(y)g(not)1110 3696 y(b)s(e)g(c)m +(hanged.)49 b(This)32 b(is)h(not)h(reset)f(when)f(the)h(startup)g +(\014les)f(are)i(executed,)1110 3806 y(allo)m(wing)k(the)e(startup)f +(\014les)h(to)g(disco)m(v)m(er)h(whether)f(or)f(not)i(a)f(shell)g(is)g +(re-)1110 3915 y(stricted.)630 4061 y Ft(shift_verbose)1110 +4171 y Fu(If)g(this)g(is)g(set,)j(the)d Ft(shift)f Fu(builtin)h(prin)m +(ts)f(an)h(error)g(message)i(when)d(the)1110 4281 y(shift)30 b(coun)m(t)h(exceeds)g(the)g(n)m(um)m(b)s(er)e(of)h(p)s(ositional)i -(parameters.)630 1385 y Ft(sourcepath)1110 1494 y Fu(If)40 +(parameters.)630 4427 y Ft(sourcepath)1110 4536 y Fu(If)40 b(set,)45 b(the)c Ft(.)f Fu(\()p Ft(source)p Fu(\))g(builtin)g(uses)h (the)g(v)-5 b(alue)41 b(of)g Ft(PATH)f Fu(to)h(\014nd)f(the)1110 -1604 y(directory)32 b(con)m(taining)g(the)g(\014le)f(supplied)f(as)h -(an)g(argumen)m(t.)44 b(This)30 b(option)1110 1714 y(is)g(enabled)h(b)m -(y)f(default.)630 1873 y Ft(varredir_close)1110 1983 +4646 y(directory)32 b(con)m(taining)g(the)g(\014le)f(supplied)f(as)h +(an)g(argumen)m(t.)44 b(This)30 b(option)1110 4756 y(is)g(enabled)h(b)m +(y)f(default.)630 4902 y Ft(varredir_close)1110 5011 y Fu(If)i(set,)h(the)f(shell)h(automatically)i(closes)e(\014le)f -(descriptors)g(assigned)g(using)1110 2092 y(the)40 b +(descriptors)g(assigned)g(using)1110 5121 y(the)40 b Ft({varname})c Fu(redirection)k(syn)m(tax)g(\(see)h(Section)f(3.6)g -([Redirections],)1110 2202 y(page)h(38\))f(instead)h(of)e(lea)m(ving)j -(them)e(op)s(en)f(when)g(the)h(command)f(com-)1110 2311 -y(pletes.)630 2471 y Ft(xpg_echo)96 b Fu(If)31 b(set,)h(the)g -Ft(echo)e Fu(builtin)h(expands)f(bac)m(kslash-escap)s(e)j(sequences)f -(b)m(y)f(de-)1110 2580 y(fault.)150 2821 y Fs(4.4)68 -b(Sp)t(ecial)45 b(Builtins)150 2980 y Fu(F)-8 b(or)35 -b(historical)h(reasons,)g(the)e Fm(posix)g Fu(standard)f(has)i -(classi\014ed)f(sev)m(eral)i(builtin)e(commands)g(as)h -Fl(sp)-5 b(e-)150 3090 y(cial)p Fu(.)47 b(When)33 b(Bash)f(is)h -(executing)g(in)f Fm(posix)g Fu(mo)s(de,)h(the)g(sp)s(ecial)g(builtins) -e(di\013er)i(from)f(other)g(builtin)150 3200 y(commands)e(in)g(three)h -(resp)s(ects:)199 3334 y(1.)61 b(Sp)s(ecial)31 b(builtins)e(are)i -(found)e(b)s(efore)h(shell)h(functions)f(during)f(command)h(lo)s(okup.) -199 3469 y(2.)61 b(If)30 b(a)h(sp)s(ecial)g(builtin)f(returns)f(an)h -(error)g(status,)h(a)g(non-in)m(teractiv)m(e)i(shell)d(exits.)199 -3603 y(3.)61 b(Assignmen)m(t)30 b(statemen)m(ts)h(preceding)f(the)f -(command)g(sta)m(y)i(in)e(e\013ect)i(in)e(the)h(shell)f(en)m(vironmen)m -(t)330 3713 y(after)i(the)f(command)h(completes.)275 -3872 y(When)36 b(Bash)g(is)h(not)f(executing)i(in)e Fm(posix)f -Fu(mo)s(de,)j(these)f(builtins)f(b)s(eha)m(v)m(e)h(no)f(di\013eren)m -(tly)h(than)150 3982 y(the)31 b(rest)f(of)h(the)f(Bash)h(builtin)e -(commands.)41 b(The)30 b(Bash)g Fm(posix)g Fu(mo)s(de)g(is)g(describ)s -(ed)f(in)h(Section)h(6.11)150 4091 y([Bash)g(POSIX)e(Mo)s(de],)i(page)g -(106.)275 4226 y(These)f(are)g(the)h Fm(posix)f Fu(sp)s(ecial)h -(builtins:)390 4360 y Ft(break)46 b(:)i(.)f(continue)f(eval)g(exec)h -(exit)g(export)f(readonly)f(return)h(set)390 4470 y(shift)g(trap)h +([Redirections],)1110 5230 y(page)h(39\))f(instead)h(of)e(lea)m(ving)j +(them)e(op)s(en)f(when)g(the)h(command)f(com-)1110 5340 +y(pletes.)p eop end +%%Page: 80 86 +TeXDict begin 80 85 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(80)630 299 y Ft(xpg_echo)96 +b Fu(If)31 b(set,)h(the)g Ft(echo)e Fu(builtin)h(expands)f(bac)m +(kslash-escap)s(e)j(sequences)f(b)m(y)f(de-)1110 408 +y(fault.)40 b(If)27 b(the)h Ft(posix)e Fu(shell)h(option)h(\(see)h +(Section)f(4.3.1)h([The)e(Set)h(Builtin],)1110 518 y(page)j(69\))h(is)e +(also)h(enabled,)g Ft(echo)e Fu(do)s(es)h(not)h(in)m(terpret)g(an)m(y)f +(options.)150 759 y Fs(4.4)68 b(Sp)t(ecial)45 b(Builtins)150 +918 y Fu(F)-8 b(or)35 b(historical)h(reasons,)g(the)e +Fm(posix)g Fu(standard)f(has)i(classi\014ed)f(sev)m(eral)i(builtin)e +(commands)g(as)h Fl(sp)-5 b(e-)150 1028 y(cial)p Fu(.)47 +b(When)33 b(Bash)f(is)h(executing)g(in)f Fm(posix)g Fu(mo)s(de,)h(the)g +(sp)s(ecial)g(builtins)e(di\013er)i(from)f(other)g(builtin)150 +1137 y(commands)e(in)g(three)h(resp)s(ects:)199 1272 +y(1.)61 b(Sp)s(ecial)31 b(builtins)e(are)i(found)e(b)s(efore)h(shell)h +(functions)f(during)f(command)h(lo)s(okup.)199 1406 y(2.)61 +b(If)30 b(a)h(sp)s(ecial)g(builtin)f(returns)f(an)h(error)g(status,)h +(a)g(non-in)m(teractiv)m(e)i(shell)d(exits.)199 1541 +y(3.)61 b(Assignmen)m(t)30 b(statemen)m(ts)h(preceding)f(the)f(command) +g(sta)m(y)i(in)e(e\013ect)i(in)e(the)h(shell)f(en)m(vironmen)m(t)330 +1650 y(after)i(the)f(command)h(completes.)275 1810 y(When)36 +b(Bash)g(is)h(not)f(executing)i(in)e Fm(posix)f Fu(mo)s(de,)j(these)f +(builtins)f(b)s(eha)m(v)m(e)h(no)f(di\013eren)m(tly)h(than)150 +1919 y(the)31 b(rest)f(of)h(the)f(Bash)h(builtin)e(commands.)41 +b(The)30 b(Bash)g Fm(posix)g Fu(mo)s(de)g(is)g(describ)s(ed)f(in)h +(Section)h(6.11)150 2029 y([Bash)g(POSIX)e(Mo)s(de],)i(page)g(109.)275 +2164 y(These)f(are)g(the)h Fm(posix)f Fu(sp)s(ecial)h(builtins:)390 +2298 y Ft(break)46 b(:)i(.)f(source)f(continue)g(eval)h(exec)f(exit)h +(export)f(readonly)f(return)i(set)390 2408 y(shift)f(times)h(trap)f (unset)p eop end -%%Page: 78 84 -TeXDict begin 78 83 bop 3659 -116 a Fu(78)150 299 y Fp(5)80 +%%Page: 81 87 +TeXDict begin 81 86 bop 3659 -116 a Fu(81)150 299 y Fp(5)80 b(Shell)53 b(V)-13 b(ariables)150 504 y Fu(This)21 b(c)m(hapter)i (describ)s(es)e(the)i(shell)f(v)-5 b(ariables)23 b(that)f(Bash)h(uses.) 37 b(Bash)23 b(automatically)h(assigns)f(default)150 @@ -13775,7 +14014,7 @@ Fu(builtin.)150 3392 y Ft(PATH)288 b Fu(A)32 b(colon-separated)i(list)f 3869 y Ft(PS1)336 b Fu(The)35 b(primary)f(prompt)h(string.)55 b(The)35 b(default)h(v)-5 b(alue)35 b(is)h(`)p Ft(\\s-\\v\\$)28 b Fu('.)56 b(See)36 b(Section)g(6.9)630 3979 y([Con)m(trolling)i(the)e -(Prompt],)i(page)f(104,)i(for)d(the)h(complete)h(list)e(of)h(escap)s(e) +(Prompt],)i(page)f(107,)i(for)d(the)h(complete)h(list)e(of)h(escap)s(e) g(sequences)630 4088 y(that)31 b(are)g(expanded)e(b)s(efore)h Ft(PS1)g Fu(is)g(displa)m(y)m(ed.)150 4236 y Ft(PS2)336 b Fu(The)28 b(secondary)g(prompt)g(string.)40 b(The)28 @@ -13790,15 +14029,15 @@ b(few)g(v)-5 b(ariables)24 b(used)g(b)m(y)f(Bash)i(are)f(describ)s(ed)f (in)h(di\013eren)m(t)g(c)m(hapters:)38 b(v)-5 b(ariables)25 b(for)f(con)m(trolling)150 5082 y(the)31 b(job)f(con)m(trol)h (facilities)i(\(see)e(Section)g(7.3)h([Job)e(Con)m(trol)h(V)-8 -b(ariables],)32 b(page)g(116\).)150 5230 y Ft(_)432 b +b(ariables],)32 b(page)g(121\).)150 5230 y Ft(_)432 b Fu(\($)p 716 5230 28 4 v 41 w(,)34 b(an)g(underscore.\))49 b(A)m(t)35 b(shell)f(startup,)g(set)g(to)g(the)g(pathname)f(used)g(to)h (in)m(v)m(ok)m(e)i(the)630 5340 y(shell)e(or)g(shell)h(script)f(b)s (eing)f(executed)j(as)e(passed)g(in)f(the)i(en)m(vironmen)m(t)f(or)g (argumen)m(t)p eop end -%%Page: 79 85 -TeXDict begin 79 84 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(79)630 299 y(list.)55 +%%Page: 82 88 +TeXDict begin 82 87 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(82)630 299 y(list.)55 b(Subsequen)m(tly)-8 b(,)35 b(expands)f(to)i(the)f(last)g(argumen)m(t)h (to)f(the)g(previous)f(simple)h(com-)630 408 y(mand)21 b(executed)i(in)e(the)i(foreground,)g(after)f(expansion.)38 @@ -13807,63 +14046,65 @@ y(used)h(to)i(in)m(v)m(ok)m(e)h(eac)m(h)g(command)e(executed)h(and)f (placed)g(in)g(the)g(en)m(vironmen)m(t)h(exp)s(orted)630 628 y(to)33 b(that)g(command.)45 b(When)32 b(c)m(hec)m(king)i(mail,)g (this)e(parameter)g(holds)g(the)g(name)g(of)h(the)630 -737 y(mail)e(\014le.)150 920 y Ft(BASH)288 b Fu(The)30 +737 y(mail)e(\014le.)150 902 y Ft(BASH)288 b Fu(The)30 b(full)g(pathname)g(used)g(to)h(execute)h(the)e(curren)m(t)g(instance)h -(of)g(Bash.)150 1103 y Ft(BASHOPTS)96 b Fu(A)31 b(colon-separated)h +(of)g(Bash.)150 1066 y Ft(BASHOPTS)96 b Fu(A)31 b(colon-separated)h (list)f(of)g(enabled)f(shell)h(options.)41 b(Eac)m(h)31 b(w)m(ord)f(in)g(the)h(list)g(is)g(a)g(v)-5 b(alid)630 -1212 y(argumen)m(t)37 b(for)g(the)g Ft(-s)f Fu(option)i(to)f(the)g +1176 y(argumen)m(t)37 b(for)g(the)g Ft(-s)f Fu(option)i(to)f(the)g Ft(shopt)f Fu(builtin)g(command)h(\(see)g(Section)h(4.3.2)630 -1322 y([The)e(Shopt)g(Builtin],)i(page)f(71\).)60 b(The)36 +1285 y([The)e(Shopt)g(Builtin],)i(page)f(73\).)60 b(The)36 b(options)h(app)s(earing)f(in)g Ft(BASHOPTS)e Fu(are)i(those)630 -1431 y(rep)s(orted)e(as)h(`)p Ft(on)p Fu(')f(b)m(y)h(`)p +1395 y(rep)s(orted)e(as)h(`)p Ft(on)p Fu(')f(b)m(y)h(`)p Ft(shopt)p Fu('.)53 b(If)34 b(this)g(v)-5 b(ariable)36 b(is)f(in)f(the)h(en)m(vironmen)m(t)g(when)f(Bash)630 -1541 y(starts)25 b(up,)f(eac)m(h)i(shell)e(option)h(in)e(the)i(list)g +1504 y(starts)25 b(up,)f(eac)m(h)i(shell)e(option)h(in)e(the)i(list)g (will)f(b)s(e)g(enabled)g(b)s(efore)g(reading)g(an)m(y)g(startup)630 -1650 y(\014les.)41 b(This)29 b(v)-5 b(ariable)31 b(is)g(readonly)-8 -b(.)150 1833 y Ft(BASHPID)144 b Fu(Expands)35 b(to)i(the)f(pro)s(cess)f +1614 y(\014les.)41 b(This)29 b(v)-5 b(ariable)31 b(is)g(readonly)-8 +b(.)150 1778 y Ft(BASHPID)144 b Fu(Expands)35 b(to)i(the)f(pro)s(cess)f (ID)i(of)f(the)g(curren)m(t)g(Bash)g(pro)s(cess.)58 b(This)35 -b(di\013ers)h(from)g Ft($$)630 1943 y Fu(under)31 b(certain)j +b(di\013ers)h(from)g Ft($$)630 1888 y Fu(under)31 b(certain)j (circumstances,)h(suc)m(h)e(as)g(subshells)f(that)i(do)f(not)g(require) -g(Bash)g(to)h(b)s(e)630 2052 y(re-initialized.)57 b(Assignmen)m(ts)35 +g(Bash)g(to)h(b)s(e)630 1998 y(re-initialized.)57 b(Assignmen)m(ts)35 b(to)h Ft(BASHPID)d Fu(ha)m(v)m(e)j(no)f(e\013ect.)56 -b(If)34 b Ft(BASHPID)f Fu(is)i(unset,)h(it)630 2162 y(loses)31 +b(If)34 b Ft(BASHPID)f Fu(is)i(unset,)h(it)630 2107 y(loses)31 b(its)g(sp)s(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g -(subsequen)m(tly)f(reset.)150 2345 y Ft(BASH_ALIASES)630 -2454 y Fu(An)40 b(asso)s(ciativ)m(e)j(arra)m(y)d(v)-5 +(subsequen)m(tly)f(reset.)150 2271 y Ft(BASH_ALIASES)630 +2381 y Fu(An)40 b(asso)s(ciativ)m(e)j(arra)m(y)d(v)-5 b(ariable)41 b(whose)f(mem)m(b)s(ers)f(corresp)s(ond)g(to)i(the)f(in)m -(ternal)h(list)630 2564 y(of)c(aliases)h(as)f(main)m(tained)g(b)m(y)g +(ternal)h(list)630 2491 y(of)c(aliases)h(as)f(main)m(tained)g(b)m(y)g (the)g Ft(alias)e Fu(builtin.)59 b(\(see)37 b(Section)h(4.1)f([Bourne)g -(Shell)630 2673 y(Builtins],)31 b(page)g(48\).)42 b(Elemen)m(ts)31 +(Shell)630 2600 y(Builtins],)31 b(page)g(49\).)42 b(Elemen)m(ts)31 b(added)e(to)i(this)f(arra)m(y)h(app)s(ear)f(in)g(the)g(alias)h(list;)h -(ho)m(w-)630 2783 y(ev)m(er,)k(unsetting)f(arra)m(y)g(elemen)m(ts)g +(ho)m(w-)630 2710 y(ev)m(er,)k(unsetting)f(arra)m(y)g(elemen)m(ts)g (curren)m(tly)g(do)s(es)f(not)g(cause)h(aliases)h(to)f(b)s(e)f(remo)m -(v)m(ed)630 2892 y(from)25 b(the)h(alias)h(list.)40 b(If)25 +(v)m(ed)630 2819 y(from)25 b(the)h(alias)h(list.)40 b(If)25 b Ft(BASH_ALIASES)d Fu(is)k(unset,)g(it)g(loses)h(its)f(sp)s(ecial)g -(prop)s(erties,)g(ev)m(en)630 3002 y(if)k(it)h(is)g(subsequen)m(tly)f -(reset.)150 3185 y Ft(BASH_ARGC)630 3294 y Fu(An)39 b(arra)m(y)g(v)-5 +(prop)s(erties,)g(ev)m(en)630 2929 y(if)k(it)h(is)g(subsequen)m(tly)f +(reset.)150 3093 y Ft(BASH_ARGC)630 3203 y Fu(An)39 b(arra)m(y)g(v)-5 b(ariable)40 b(whose)f(v)-5 b(alues)39 b(are)h(the)f(n)m(um)m(b)s(er)f -(of)h(parameters)g(in)g(eac)m(h)h(frame)630 3404 y(of)i(the)g(curren)m -(t)g(bash)f(execution)i(call)g(stac)m(k.)76 b(The)42 -b(n)m(um)m(b)s(er)e(of)i(parameters)g(to)h(the)630 3513 -y(curren)m(t)38 b(subroutine)f(\(shell)i(function)e(or)i(script)f +(of)h(parameters)g(in)g(eac)m(h)h(frame)630 3313 y(of)h(the)g(curren)m +(t)g(Bash)g(execution)h(call)g(stac)m(k.)73 b(The)41 +b(n)m(um)m(b)s(er)e(of)i(parameters)g(to)h(the)630 3422 +y(curren)m(t)c(subroutine)f(\(shell)i(function)e(or)i(script)f (executed)h(with)e Ft(.)h Fu(or)g Ft(source)p Fu(\))f(is)h(at)630 -3623 y(the)27 b(top)g(of)g(the)g(stac)m(k.)41 b(When)27 +3532 y(the)27 b(top)g(of)g(the)g(stac)m(k.)41 b(When)27 b(a)g(subroutine)f(is)h(executed,)i(the)e(n)m(um)m(b)s(er)f(of)h -(parameters)630 3733 y(passed)44 b(is)h(pushed)e(on)m(to)j +(parameters)630 3641 y(passed)44 b(is)h(pushed)e(on)m(to)j Ft(BASH_ARGC)p Fu(.)81 b(The)44 b(shell)h(sets)g Ft(BASH_ARGC)e -Fu(only)i(when)e(in)630 3842 y(extended)34 b(debugging)f(mo)s(de)g -(\(see)i(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)i(page)g(71,)g(for) -630 3952 y(a)e(description)g(of)f(the)h Ft(extdebug)d +Fu(only)i(when)e(in)630 3751 y(extended)34 b(debugging)f(mo)s(de)g +(\(see)i(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)i(page)g(73,)g(for) +630 3861 y(a)e(description)g(of)f(the)h Ft(extdebug)d Fu(option)j(to)h(the)e Ft(shopt)g Fu(builtin\).)47 b(Setting)33 -b Ft(extdebug)630 4061 y Fu(after)c(the)g(shell)g(has)g(started)g(to)g +b Ft(extdebug)630 3970 y Fu(after)c(the)g(shell)g(has)g(started)g(to)g (execute)i(a)e(script,)g(or)g(referencing)g(this)f(v)-5 -b(ariable)30 b(when)630 4171 y Ft(extdebug)e Fu(is)j(not)f(set,)h(ma)m -(y)g(result)g(in)f(inconsisten)m(t)h(v)-5 b(alues.)150 -4354 y Ft(BASH_ARGV)630 4463 y Fu(An)24 b(arra)m(y)g(v)-5 -b(ariable)25 b(con)m(taining)h(all)f(of)f(the)h(parameters)f(in)g(the)g -(curren)m(t)g(bash)g(execution)630 4573 y(call)35 b(stac)m(k.)53 +b(ariable)30 b(when)630 4080 y Ft(extdebug)i Fu(is)i(not)h(set,)g(ma)m +(y)g(result)f(in)g(inconsisten)m(t)h(v)-5 b(alues.)53 +b(Assignmen)m(ts)34 b(to)h Ft(BASH_)630 4189 y(ARGC)29 +b Fu(ha)m(v)m(e)j(no)e(e\013ect,)i(and)e(it)h(ma)m(y)g(not)f(b)s(e)g +(unset.)150 4354 y Ft(BASH_ARGV)630 4463 y Fu(An)23 b(arra)m(y)g(v)-5 +b(ariable)24 b(con)m(taining)g(all)g(of)f(the)h(parameters)f(in)g(the)g +(curren)m(t)g(Bash)g(execution)630 4573 y(call)35 b(stac)m(k.)53 b(The)34 b(\014nal)g(parameter)g(of)g(the)g(last)h(subroutine)e(call)i (is)f(at)h(the)f(top)h(of)f(the)630 4682 y(stac)m(k;)28 b(the)c(\014rst)f(parameter)i(of)f(the)g(initial)i(call)f(is)f(at)h @@ -13872,16 +14113,18 @@ y(is)40 b(executed,)j(the)d(parameters)h(supplied)d(are)i(pushed)f(on)m (to)i Ft(BASH_ARGV)p Fu(.)66 b(The)40 b(shell)630 4902 y(sets)28 b Ft(BASH_ARGV)e Fu(only)i(when)f(in)h(extended)g(debugging)g (mo)s(de)g(\(see)h(Section)f(4.3.2)i([The)630 5011 y(Shopt)g(Builtin],) -h(page)g(71,)g(for)g(a)f(description)h(of)f(the)h Ft(extdebug)d +h(page)g(73,)g(for)g(a)f(description)h(of)f(the)h Ft(extdebug)d Fu(option)j(to)g(the)f Ft(shopt)630 5121 y Fu(builtin\).)64 b(Setting)38 b Ft(extdebug)e Fu(after)j(the)f(shell)g(has)g(started)g (to)h(execute)g(a)g(script,)h(or)630 5230 y(referencing)35 b(this)f(v)-5 b(ariable)35 b(when)e Ft(extdebug)f Fu(is)j(not)f(set,)j (ma)m(y)e(result)f(in)g(inconsisten)m(t)630 5340 y(v)-5 -b(alues.)p eop end -%%Page: 80 86 -TeXDict begin 80 85 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(80)150 299 y Ft(BASH_ARGV0)630 +b(alues.)41 b(Assignmen)m(ts)31 b(to)g Ft(BASH_ARGV)d +Fu(ha)m(v)m(e)j(no)g(e\013ect,)h(and)e(it)g(ma)m(y)h(not)g(b)s(e)f +(unset.)p eop end +%%Page: 83 89 +TeXDict begin 83 88 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(83)150 299 y Ft(BASH_ARGV0)630 408 y Fu(When)31 b(referenced,)g(this)g(v)-5 b(ariable)32 b(expands)e(to)h(the)h(name)f(of)g(the)g(shell)g(or)g(shell)g(script) 630 518 y(\(iden)m(tical)42 b(to)e Ft($0)p Fu(;)j(See)d(Section)g @@ -13891,783 +14134,842 @@ b(Assignmen)m(t)32 b(to)h Ft(BASH_ARGV0)c Fu(causes)j(the)f(v)-5 b(alue)630 737 y(assigned)34 b(to)h(also)g(b)s(e)e(assigned)h(to)g Ft($0)p Fu(.)51 b(If)33 b Ft(BASH_ARGV0)f Fu(is)h(unset,)i(it)f(loses)h (its)f(sp)s(ecial)630 847 y(prop)s(erties,)c(ev)m(en)h(if)f(it)h(is)g -(subsequen)m(tly)f(reset.)150 1048 y Ft(BASH_CMDS)630 -1157 y Fu(An)k(asso)s(ciativ)m(e)i(arra)m(y)f(v)-5 b(ariable)35 +(subsequen)m(tly)f(reset.)150 1029 y Ft(BASH_CMDS)630 +1139 y Fu(An)k(asso)s(ciativ)m(e)i(arra)m(y)f(v)-5 b(ariable)35 b(whose)f(mem)m(b)s(ers)f(corresp)s(ond)g(to)i(the)f(in)m(ternal)h -(hash)630 1267 y(table)c(of)g(commands)f(as)g(main)m(tained)h(b)m(y)g +(hash)630 1249 y(table)c(of)g(commands)f(as)g(main)m(tained)h(b)m(y)g (the)f Ft(hash)f Fu(builtin)h(\(see)h(Section)g(4.1)h([Bourne)630 -1377 y(Shell)42 b(Builtins],)k(page)d(48\).)77 b(Elemen)m(ts)43 +1358 y(Shell)42 b(Builtins],)k(page)d(49\).)77 b(Elemen)m(ts)43 b(added)e(to)i(this)f(arra)m(y)h(app)s(ear)f(in)f(the)i(hash)630 -1486 y(table;)k(ho)m(w)m(ev)m(er,)e(unsetting)c(arra)m(y)g(elemen)m(ts) +1468 y(table;)k(ho)m(w)m(ev)m(er,)e(unsetting)c(arra)m(y)g(elemen)m(ts) i(curren)m(tly)d(do)s(es)h(not)g(cause)g(command)630 -1596 y(names)36 b(to)g(b)s(e)f(remo)m(v)m(ed)i(from)e(the)h(hash)f +1577 y(names)36 b(to)g(b)s(e)f(remo)m(v)m(ed)i(from)e(the)h(hash)f (table.)58 b(If)36 b Ft(BASH_CMDS)d Fu(is)j(unset,)h(it)f(loses)h(its) -630 1705 y(sp)s(ecial)31 b(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g -(subsequen)m(tly)f(reset.)150 1906 y Ft(BASH_COMMAND)630 -2016 y Fu(The)39 b(command)h(curren)m(tly)g(b)s(eing)f(executed)i(or)e +630 1687 y(sp)s(ecial)31 b(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g +(subsequen)m(tly)f(reset.)150 1870 y Ft(BASH_COMMAND)630 +1979 y Fu(The)39 b(command)h(curren)m(tly)g(b)s(eing)f(executed)i(or)e (ab)s(out)h(to)g(b)s(e)f(executed,)44 b(unless)39 b(the)630 -2125 y(shell)g(is)g(executing)g(a)g(command)g(as)g(the)f(result)h(of)g +2089 y(shell)g(is)g(executing)g(a)g(command)g(as)g(the)f(result)h(of)g (a)g(trap,)i(in)d(whic)m(h)g(case)i(it)f(is)g(the)630 -2235 y(command)30 b(executing)i(at)g(the)f(time)g(of)g(the)g(trap.)41 +2198 y(command)30 b(executing)i(at)g(the)f(time)g(of)g(the)g(trap.)41 b(If)30 b Ft(BASH_COMMAND)e Fu(is)i(unset,)h(it)g(loses)630 -2345 y(its)g(sp)s(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)f -(subsequen)m(tly)g(reset.)150 2545 y Ft(BASH_COMPAT)630 -2655 y Fu(The)i(v)-5 b(alue)33 b(is)g(used)f(to)h(set)g(the)g(shell's)g +2308 y(its)g(sp)s(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)f +(subsequen)m(tly)g(reset.)150 2491 y Ft(BASH_COMPAT)630 +2600 y Fu(The)i(v)-5 b(alue)33 b(is)g(used)f(to)h(set)g(the)g(shell's)g (compatibilit)m(y)i(lev)m(el.)49 b(See)33 b(Section)h(6.12)g([Shell)630 -2765 y(Compatibilit)m(y)j(Mo)s(de],)h(page)e(110,)i(for)e(a)g +2710 y(Compatibilit)m(y)j(Mo)s(de],)h(page)e(114,)i(for)e(a)g (description)g(of)f(the)h(v)-5 b(arious)36 b(compatibilit)m(y)630 -2874 y(lev)m(els)g(and)f(their)g(e\013ects.)55 b(The)34 +2819 y(lev)m(els)g(and)f(their)g(e\013ects.)55 b(The)34 b(v)-5 b(alue)36 b(ma)m(y)f(b)s(e)f(a)i(decimal)f(n)m(um)m(b)s(er)f -(\(e.g.,)k(4.2\))e(or)f(an)630 2984 y(in)m(teger)44 b(\(e.g.,)j(42\))d +(\(e.g.,)k(4.2\))e(or)f(an)630 2929 y(in)m(teger)44 b(\(e.g.,)j(42\))d (corresp)s(onding)d(to)i(the)g(desired)e(compatibilit)m(y)k(lev)m(el.) -78 b(If)42 b Ft(BASH_)630 3093 y(COMPAT)28 b Fu(is)j(unset)e(or)h(set)h +78 b(If)42 b Ft(BASH_)630 3039 y(COMPAT)28 b Fu(is)j(unset)e(or)h(set)h (to)g(the)f(empt)m(y)h(string,)f(the)h(compatibilit)m(y)h(lev)m(el)g -(is)e(set)h(to)g(the)630 3203 y(default)39 b(for)g(the)g(curren)m(t)g -(v)m(ersion.)67 b(If)38 b Ft(BASH_COMPAT)e Fu(is)j(set)h(to)f(a)h(v)-5 -b(alue)39 b(that)h(is)f(not)630 3313 y(one)31 b(of)f(the)h(v)-5 -b(alid)31 b(compatibilit)m(y)i(lev)m(els,)f(the)f(shell)f(prin)m(ts)g -(an)h(error)f(message)i(and)e(sets)630 3422 y(the)i(compatibilit)m(y)j -(lev)m(el)e(to)g(the)g(default)f(for)g(the)g(curren)m(t)g(v)m(ersion.) -47 b(The)31 b(v)-5 b(alid)33 b(v)-5 b(alues)630 3532 -y(corresp)s(ond)31 b(to)i(the)g(compatibilit)m(y)i(lev)m(els)f(describ) -s(ed)d(b)s(elo)m(w)i(\(see)g(Section)h(6.12)g([Shell)630 -3641 y(Compatibilit)m(y)d(Mo)s(de],)f(page)g(110\).)42 -b(F)-8 b(or)30 b(example,)h(4.2)f(and)f(42)h(are)g(v)-5 -b(alid)30 b(v)-5 b(alues)29 b(that)630 3751 y(corresp)s(ond)d(to)i(the) -f Ft(compat42)e(shopt)g Fu(option)j(and)e(set)i(the)f(compatibilit)m(y) -i(lev)m(el)g(to)f(42.)630 3861 y(The)i(curren)m(t)g(v)m(ersion)h(is)f -(also)i(a)e(v)-5 b(alid)31 b(v)-5 b(alue.)150 4061 y -Ft(BASH_ENV)96 b Fu(If)28 b(this)g(v)-5 b(ariable)30 +(is)e(set)h(to)g(the)630 3148 y(default)e(for)f(the)g(curren)m(t)g(v)m +(ersion.)41 b(If)28 b Ft(BASH_COMPAT)d Fu(is)j(set)h(to)g(a)g(v)-5 +b(alue)29 b(that)g(is)f(not)h(one)630 3258 y(of)i(the)h(v)-5 +b(alid)31 b(compatibilit)m(y)j(lev)m(els,)f(the)f(shell)f(prin)m(ts)g +(an)g(error)g(message)h(and)f(sets)h(the)630 3367 y(compatibilit)m(y)h +(lev)m(el)f(to)f(the)g(default)f(for)h(the)f(curren)m(t)g(v)m(ersion.) +42 b(A)30 b(subset)g(of)h(the)g(v)-5 b(alid)630 3477 +y(v)g(alues)31 b(corresp)s(ond)d(to)j(the)g(compatibilit)m(y)h(lev)m +(els)g(describ)s(ed)d(b)s(elo)m(w)h(\(see)h(Section)g(6.12)630 +3587 y([Shell)25 b(Compatibilit)m(y)h(Mo)s(de],)h(page)e(114\).)41 +b(F)-8 b(or)25 b(example,)i(4.2)f(and)e(42)h(are)h(v)-5 +b(alid)25 b(v)-5 b(alues)630 3696 y(that)33 b(corresp)s(ond)e(to)i(the) +f Ft(compat42)e(shopt)h Fu(option)i(and)f(set)g(the)h(compatibilit)m(y) +h(lev)m(el)630 3806 y(to)d(42.)42 b(The)30 b(curren)m(t)g(v)m(ersion)h +(is)f(also)h(a)g(v)-5 b(alid)31 b(v)-5 b(alue.)150 3988 +y Ft(BASH_ENV)96 b Fu(If)28 b(this)g(v)-5 b(ariable)30 b(is)e(set)h(when)f(Bash)g(is)h(in)m(v)m(ok)m(ed)h(to)f(execute)h(a)e -(shell)h(script,)g(its)g(v)-5 b(alue)29 b(is)630 4171 +(shell)h(script,)g(its)g(v)-5 b(alue)29 b(is)630 4098 y(expanded)k(and)h(used)g(as)g(the)h(name)f(of)g(a)h(startup)f(\014le)g -(to)h(read)f(b)s(efore)g(executing)i(the)630 4281 y(script.)41 -b(See)30 b(Section)h(6.2)h([Bash)f(Startup)e(Files],)j(page)f(93.)150 -4482 y Ft(BASH_EXECUTION_STRING)630 4591 y Fu(The)f(command)g(argumen)m +(to)h(read)f(b)s(efore)g(executing)i(the)630 4208 y(script.)41 +b(See)30 b(Section)h(6.2)h([Bash)f(Startup)e(Files],)j(page)f(96.)150 +4390 y Ft(BASH_EXECUTION_STRING)630 4500 y Fu(The)f(command)g(argumen)m (t)h(to)g(the)g Ft(-c)e Fu(in)m(v)m(o)s(cation)k(option.)150 -4792 y Ft(BASH_LINENO)630 4902 y Fu(An)38 b(arra)m(y)g(v)-5 +4682 y Ft(BASH_LINENO)630 4792 y Fu(An)38 b(arra)m(y)g(v)-5 b(ariable)39 b(whose)f(mem)m(b)s(ers)f(are)i(the)f(line)h(n)m(um)m(b)s -(ers)d(in)i(source)g(\014les)g(where)630 5011 y(eac)m(h)h(corresp)s +(ers)d(in)i(source)g(\014les)g(where)630 4902 y(eac)m(h)h(corresp)s (onding)e(mem)m(b)s(er)g(of)h Ft(FUNCNAME)d Fu(w)m(as)k(in)m(v)m(ok)m -(ed.)64 b Ft(${BASH_LINENO[$i]})630 5121 y Fu(is)74 b(the)g(line)h(n)m +(ed.)64 b Ft(${BASH_LINENO[$i]})630 5011 y Fu(is)74 b(the)g(line)h(n)m (um)m(b)s(er)e(in)g(the)i(source)f(\014le)g(\()p Ft -(${BASH_SOURCE[$i+1]})p Fu(\))69 b(where)630 5230 y Ft(${FUNCNAME[$i]}) +(${BASH_SOURCE[$i+1]})p Fu(\))69 b(where)630 5121 y Ft(${FUNCNAME[$i]}) 32 b Fu(w)m(as)37 b(called)g(\(or)g Ft(${BASH_LINENO[$i-1]})31 -b Fu(if)36 b(referenced)g(within)630 5340 y(another)31 -b(shell)f(function\).)41 b(Use)31 b Ft(LINENO)d Fu(to)j(obtain)g(the)g -(curren)m(t)f(line)h(n)m(um)m(b)s(er.)p eop end -%%Page: 81 87 -TeXDict begin 81 86 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(81)150 299 y Ft +b Fu(if)36 b(referenced)g(within)630 5230 y(another)55 +b(shell)h(function\).)114 b(Use)56 b Ft(LINENO)d Fu(to)j(obtain)f(the)h +(curren)m(t)f(line)g(n)m(um)m(b)s(er.)630 5340 y(Assignmen)m(ts)31 +b(to)g Ft(BASH_LINENO)c Fu(ha)m(v)m(e)32 b(no)e(e\013ect,)i(and)e(it)h +(ma)m(y)g(not)f(b)s(e)g(unset.)p eop end +%%Page: 84 90 +TeXDict begin 84 89 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(84)150 299 y Ft (BASH_LOADABLES_PATH)630 408 y Fu(A)39 b(colon-separated)i(list)f(of)f (directories)h(in)f(whic)m(h)g(the)g(shell)h(lo)s(oks)f(for)g (dynamically)630 518 y(loadable)32 b(builtins)d(sp)s(eci\014ed)h(b)m(y) -g(the)h Ft(enable)e Fu(command.)150 673 y Ft(BASH_REMATCH)630 -783 y Fu(An)43 b(arra)m(y)i(v)-5 b(ariable)44 b(whose)g(mem)m(b)s(ers)f -(are)h(assigned)g(b)m(y)f(the)h(`)p Ft(=~)p Fu(')g(binary)f(op)s -(erator)630 892 y(to)37 b(the)f Ft([[)g Fu(conditional)i(command)e +g(the)h Ft(enable)e Fu(command.)150 677 y Ft(BASH_MONOSECONDS)630 +787 y Fu(Eac)m(h)35 b(time)g(this)f(v)-5 b(ariable)35 +b(is)g(referenced,)g(it)g(expands)f(to)h(the)f(v)-5 b(alue)35 +b(returned)e(b)m(y)i(the)630 897 y(system's)i(monotonic)i(clo)s(c)m(k,) +h(if)d(one)h(is)f(a)m(v)-5 b(ailable.)64 b(If)36 b(there)i(is)f(no)g +(monotonic)h(clo)s(c)m(k,)630 1006 y(this)32 b(is)g(equiv)-5 +b(alen)m(t)34 b(to)f Ft(EPOCHSECONDS)p Fu(.)43 b(If)32 +b Ft(BASH_MONOSECONDS)c Fu(is)k(unset,)h(it)g(loses)g(its)630 +1116 y(sp)s(ecial)e(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g +(subsequen)m(tly)f(reset.)150 1275 y Ft(BASH_REMATCH)630 +1385 y Fu(An)43 b(arra)m(y)i(v)-5 b(ariable)44 b(whose)g(mem)m(b)s(ers) +f(are)h(assigned)g(b)m(y)f(the)h(`)p Ft(=~)p Fu(')g(binary)f(op)s +(erator)630 1494 y(to)37 b(the)f Ft([[)g Fu(conditional)i(command)e (\(see)h(Section)g(3.2.5.2)i([Conditional)e(Constructs],)630 -1002 y(page)e(12\).)52 b(The)33 b(elemen)m(t)j(with)d(index)g(0)i(is)f +1604 y(page)e(12\).)52 b(The)33 b(elemen)m(t)j(with)d(index)g(0)i(is)f (the)g(p)s(ortion)f(of)h(the)g(string)g(matc)m(hing)h(the)630 -1112 y(en)m(tire)29 b(regular)f(expression.)40 b(The)27 +1714 y(en)m(tire)29 b(regular)f(expression.)40 b(The)27 b(elemen)m(t)j(with)d(index)h Fr(n)f Fu(is)h(the)g(p)s(ortion)g(of)g -(the)g(string)630 1221 y(matc)m(hing)j(the)g Fr(n)p Fu(th)f(paren)m -(thesized)h(sub)s(expression.)150 1377 y Ft(BASH_SOURCE)630 -1486 y Fu(An)40 b(arra)m(y)h(v)-5 b(ariable)41 b(whose)f(mem)m(b)s(ers) +(the)g(string)630 1823 y(matc)m(hing)j(the)g Fr(n)p Fu(th)f(paren)m +(thesized)h(sub)s(expression.)150 1983 y Ft(BASH_SOURCE)630 +2092 y Fu(An)40 b(arra)m(y)h(v)-5 b(ariable)41 b(whose)f(mem)m(b)s(ers) g(are)h(the)g(source)f(\014lenames)h(where)f(the)g(corre-)630 -1596 y(sp)s(onding)27 b(shell)i(function)f(names)g(in)g(the)h +2202 y(sp)s(onding)27 b(shell)i(function)f(names)g(in)g(the)h Ft(FUNCNAME)d Fu(arra)m(y)j(v)-5 b(ariable)30 b(are)f(de\014ned.)38 -b(The)630 1705 y(shell)26 b(function)g Ft(${FUNCNAME[$i]})c +b(The)630 2311 y(shell)26 b(function)g Ft(${FUNCNAME[$i]})c Fu(is)k(de\014ned)f(in)g(the)h(\014le)h Ft(${BASH_SOURCE[$i]})21 -b Fu(and)630 1815 y(called)32 b(from)d Ft(${BASH_SOURCE[$i+1]})150 -1970 y(BASH_SUBSHELL)630 2080 y Fu(Incremen)m(ted)24 +b Fu(and)630 2421 y(called)36 b(from)e Ft(${BASH_SOURCE[$i+1]})c +Fu(Assignmen)m(ts)35 b(to)g Ft(BASH_SOURCE)d Fu(ha)m(v)m(e)k(no)f(ef-) +630 2531 y(fect,)c(and)f(it)h(ma)m(y)g(not)g(b)s(e)e(unset.)150 +2690 y Ft(BASH_SUBSHELL)630 2800 y Fu(Incremen)m(ted)24 b(b)m(y)f(one)h(within)f(eac)m(h)i(subshell)d(or)i(subshell)e(en)m -(vironmen)m(t)i(when)f(the)h(shell)630 2189 y(b)s(egins)j(executing)i +(vironmen)m(t)i(when)f(the)h(shell)630 2909 y(b)s(egins)j(executing)i (in)e(that)h(en)m(vironmen)m(t.)41 b(The)27 b(initial)i(v)-5 b(alue)28 b(is)f(0.)40 b(If)28 b Ft(BASH_SUBSHELL)630 -2299 y Fu(is)i(unset,)h(it)g(loses)g(its)f(sp)s(ecial)h(prop)s(erties,) +3019 y Fu(is)i(unset,)h(it)g(loses)g(its)f(sp)s(ecial)h(prop)s(erties,) f(ev)m(en)h(if)g(it)g(is)f(subsequen)m(tly)g(reset.)150 -2454 y Ft(BASH_VERSINFO)630 2564 y Fu(A)i(readonly)g(arra)m(y)g(v)-5 -b(ariable)32 b(\(see)h(Section)g(6.7)f([Arra)m(ys],)h(page)g(100\))g -(whose)f(mem)m(b)s(ers)630 2673 y(hold)g(v)m(ersion)h(information)f -(for)g(this)g(instance)h(of)g(Bash.)46 b(The)32 b(v)-5 -b(alues)32 b(assigned)h(to)g(the)630 2783 y(arra)m(y)e(mem)m(b)s(ers)e -(are)i(as)g(follo)m(ws:)630 2938 y Ft(BASH_VERSINFO[0])1110 -3048 y Fu(The)f(ma)5 b(jor)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(\(the)i -Fr(release)5 b Fu(\).)630 3203 y Ft(BASH_VERSINFO[1])1110 -3313 y Fu(The)30 b(minor)g(v)m(ersion)h(n)m(um)m(b)s(er)e(\(the)i -Fr(v)m(ersion)p Fu(\).)630 3468 y Ft(BASH_VERSINFO[2])1110 -3577 y Fu(The)f(patc)m(h)h(lev)m(el.)630 3733 y Ft(BASH_VERSINFO[3]) -1110 3842 y Fu(The)f(build)f(v)m(ersion.)630 3998 y Ft -(BASH_VERSINFO[4])1110 4107 y Fu(The)h(release)i(status)e(\(e.g.,)j -Ft(beta1)p Fu(\).)630 4262 y Ft(BASH_VERSINFO[5])1110 -4372 y Fu(The)d(v)-5 b(alue)31 b(of)f Ft(MACHTYPE)p Fu(.)150 -4527 y Ft(BASH_VERSION)630 4637 y Fu(The)g(v)m(ersion)h(n)m(um)m(b)s -(er)e(of)h(the)h(curren)m(t)f(instance)h(of)g(Bash.)150 -4792 y Ft(BASH_XTRACEFD)630 4902 y Fu(If)f(set)h(to)h(an)e(in)m(teger)i +3178 y Ft(BASH_TRAPSIG)630 3288 y Fu(Set)g(to)h(the)f(signal)h(n)m(um)m +(b)s(er)e(corresp)s(onding)g(to)i(the)f(trap)g(action)h(b)s(eing)f +(executed)h(dur-)630 3397 y(ing)38 b(its)h(execution.)66 +b(See)38 b(the)g(description)h(of)f Ft(trap)f Fu(\(see)i(Section)g(4.1) +h([Bourne)e(Shell)630 3507 y(Builtins],)31 b(page)g(49\))h(for)e +(information)h(ab)s(out)f(signal)h(n)m(um)m(b)s(ers)e(and)h(trap)g +(execution.)150 3666 y Ft(BASH_VERSINFO)630 3776 y Fu(A)i(readonly)g +(arra)m(y)g(v)-5 b(ariable)32 b(\(see)h(Section)g(6.7)f([Arra)m(ys],)h +(page)g(103\))g(whose)f(mem)m(b)s(ers)630 3885 y(hold)g(v)m(ersion)h +(information)f(for)g(this)g(instance)h(of)g(Bash.)46 +b(The)32 b(v)-5 b(alues)32 b(assigned)h(to)g(the)630 +3995 y(arra)m(y)e(mem)m(b)s(ers)e(are)i(as)g(follo)m(ws:)630 +4154 y Ft(BASH_VERSINFO[0])1110 4264 y Fu(The)f(ma)5 +b(jor)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(\(the)i Fr(release)5 +b Fu(\).)630 4423 y Ft(BASH_VERSINFO[1])1110 4533 y Fu(The)30 +b(minor)g(v)m(ersion)h(n)m(um)m(b)s(er)e(\(the)i Fr(v)m(ersion)p +Fu(\).)630 4692 y Ft(BASH_VERSINFO[2])1110 4802 y Fu(The)f(patc)m(h)h +(lev)m(el.)630 4961 y Ft(BASH_VERSINFO[3])1110 5071 y +Fu(The)f(build)f(v)m(ersion.)630 5230 y Ft(BASH_VERSINFO[4])1110 +5340 y Fu(The)h(release)i(status)e(\(e.g.,)j Ft(beta)p +Fu(\).)p eop end +%%Page: 85 91 +TeXDict begin 85 90 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(85)630 299 y Ft(BASH_VERSINFO[5]) +1110 408 y Fu(The)30 b(v)-5 b(alue)31 b(of)f Ft(MACHTYPE)p +Fu(.)150 573 y Ft(BASH_VERSION)630 682 y Fu(The)g(v)m(ersion)h(n)m(um)m +(b)s(er)e(of)h(the)h(curren)m(t)f(instance)h(of)g(Bash.)150 +847 y Ft(BASH_XTRACEFD)630 956 y Fu(If)f(set)h(to)h(an)e(in)m(teger)i (corresp)s(onding)e(to)h(a)g(v)-5 b(alid)31 b(\014le)g(descriptor,)g -(Bash)g(will)g(write)g(the)630 5011 y(trace)37 b(output)f(generated)h +(Bash)g(will)g(write)g(the)630 1066 y(trace)37 b(output)f(generated)h (when)f(`)p Ft(set)29 b(-x)p Fu(')36 b(is)g(enabled)h(to)g(that)f -(\014le)h(descriptor.)58 b(This)630 5121 y(allo)m(ws)29 +(\014le)h(descriptor.)58 b(This)630 1176 y(allo)m(ws)29 b(tracing)h(output)d(to)i(b)s(e)f(separated)g(from)g(diagnostic)h(and)f -(error)f(messages.)41 b(The)630 5230 y(\014le)31 b(descriptor)f(is)h +(error)f(messages.)41 b(The)630 1285 y(\014le)31 b(descriptor)f(is)h (closed)g(when)f Ft(BASH_XTRACEFD)d Fu(is)k(unset)f(or)g(assigned)h(a)g -(new)f(v)-5 b(alue.)630 5340 y(Unsetting)45 b Ft(BASH_XTRACEFD)40 +(new)f(v)-5 b(alue.)630 1395 y(Unsetting)45 b Ft(BASH_XTRACEFD)40 b Fu(or)k(assigning)g(it)g(the)g(empt)m(y)h(string)e(causes)i(the)f -(trace)p eop end -%%Page: 82 88 -TeXDict begin 82 87 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(82)630 299 y(output)33 -b(to)i(b)s(e)d(sen)m(t)j(to)f(the)g(standard)e(error.)50 -b(Note)35 b(that)g(setting)f Ft(BASH_XTRACEFD)c Fu(to)630 -408 y(2)39 b(\(the)h(standard)e(error)g(\014le)h(descriptor\))h(and)e -(then)h(unsetting)g(it)g(will)g(result)g(in)g(the)630 -518 y(standard)30 b(error)g(b)s(eing)f(closed.)150 664 -y Ft(CHILD_MAX)630 774 y Fu(Set)35 b(the)h(n)m(um)m(b)s(er)e(of)h +(trace)630 1504 y(output)33 b(to)i(b)s(e)d(sen)m(t)j(to)f(the)g +(standard)e(error.)50 b(Note)35 b(that)g(setting)f Ft(BASH_XTRACEFD)c +Fu(to)630 1614 y(2)39 b(\(the)h(standard)e(error)g(\014le)h +(descriptor\))h(and)e(then)h(unsetting)g(it)g(will)g(result)g(in)g(the) +630 1724 y(standard)30 b(error)g(b)s(eing)f(closed.)150 +1888 y Ft(CHILD_MAX)630 1998 y Fu(Set)35 b(the)h(n)m(um)m(b)s(er)e(of)h (exited)h(c)m(hild)g(status)f(v)-5 b(alues)36 b(for)f(the)g(shell)g(to) -h(remem)m(b)s(er.)55 b(Bash)630 883 y(will)37 b(not)g(allo)m(w)i(this)e -(v)-5 b(alue)37 b(to)h(b)s(e)e(decreased)i(b)s(elo)m(w)f(a)g -Fm(posix)p Fu(-mandated)f(minim)m(um,)630 993 y(and)30 +h(remem)m(b)s(er.)55 b(Bash)630 2107 y(will)37 b(not)g(allo)m(w)i(this) +e(v)-5 b(alue)37 b(to)h(b)s(e)e(decreased)i(b)s(elo)m(w)f(a)g +Fm(posix)p Fu(-mandated)f(minim)m(um,)630 2217 y(and)30 b(there)g(is)g(a)h(maxim)m(um)f(v)-5 b(alue)30 b(\(curren)m(tly)h (8192\))h(that)f(this)f(ma)m(y)g(not)h(exceed.)41 b(The)630 -1103 y(minim)m(um)30 b(v)-5 b(alue)30 b(is)h(system-dep)s(enden)m(t.) -150 1249 y Ft(COLUMNS)144 b Fu(Used)32 b(b)m(y)f(the)h +2326 y(minim)m(um)30 b(v)-5 b(alue)30 b(is)h(system-dep)s(enden)m(t.) +150 2491 y Ft(COLUMNS)144 b Fu(Used)32 b(b)m(y)f(the)h Ft(select)e Fu(command)h(to)i(determine)f(the)f(terminal)i(width)d -(when)h(prin)m(ting)630 1358 y(selection)39 b(lists.)63 +(when)h(prin)m(ting)630 2600 y(selection)39 b(lists.)63 b(Automatically)41 b(set)d(if)f(the)h Ft(checkwinsize)d -Fu(option)j(is)f(enabled)h(\(see)630 1468 y(Section)44 -b(4.3.2)h([The)e(Shopt)g(Builtin],)k(page)d(71\),)k(or)43 -b(in)g(an)g(in)m(teractiv)m(e)j(shell)e(up)s(on)630 1577 -y(receipt)31 b(of)g(a)g Ft(SIGWINCH)p Fu(.)150 1724 y -Ft(COMP_CWORD)630 1833 y Fu(An)38 b(index)g(in)m(to)h +Fu(option)j(is)f(enabled)h(\(see)630 2710 y(Section)44 +b(4.3.2)h([The)e(Shopt)g(Builtin],)k(page)d(73\),)k(or)43 +b(in)g(an)g(in)m(teractiv)m(e)j(shell)e(up)s(on)630 2819 +y(receipt)31 b(of)g(a)g Ft(SIGWINCH)p Fu(.)150 2984 y +Ft(COMP_CWORD)630 3093 y Fu(An)38 b(index)g(in)m(to)h Ft(${COMP_WORDS})c Fu(of)k(the)g(w)m(ord)f(con)m(taining)i(the)e -(curren)m(t)g(cursor)g(p)s(o-)630 1943 y(sition.)72 b(This)40 +(curren)m(t)g(cursor)g(p)s(o-)630 3203 y(sition.)72 b(This)40 b(v)-5 b(ariable)41 b(is)f(a)m(v)-5 b(ailable)43 b(only)e(in)f(shell)h (functions)f(in)m(v)m(ok)m(ed)i(b)m(y)e(the)h(pro-)630 -2052 y(grammable)36 b(completion)g(facilities)i(\(see)e(Section)g(8.6)g -([Programmable)g(Completion],)630 2162 y(page)31 b(143\).)150 -2308 y Ft(COMP_LINE)630 2418 y Fu(The)38 b(curren)m(t)h(command)f +3313 y(grammable)36 b(completion)g(facilities)i(\(see)e(Section)g(8.6)g +([Programmable)g(Completion],)630 3422 y(page)31 b(150\).)150 +3587 y Ft(COMP_LINE)630 3696 y Fu(The)38 b(curren)m(t)h(command)f (line.)66 b(This)37 b(v)-5 b(ariable)40 b(is)f(a)m(v)-5 -b(ailable)41 b(only)d(in)h(shell)f(functions)630 2527 +b(ailable)41 b(only)d(in)h(shell)f(functions)630 3806 y(and)25 b(external)h(commands)f(in)m(v)m(ok)m(ed)h(b)m(y)f(the)h -(programmable)f(completion)i(facilities)g(\(see)630 2637 -y(Section)k(8.6)h([Programmable)f(Completion],)g(page)g(143\).)150 -2783 y Ft(COMP_POINT)630 2892 y Fu(The)25 b(index)g(of)h(the)g(curren)m +(programmable)f(completion)i(facilities)g(\(see)630 3915 +y(Section)k(8.6)h([Programmable)f(Completion],)g(page)g(150\).)150 +4080 y Ft(COMP_POINT)630 4189 y Fu(The)25 b(index)g(of)h(the)g(curren)m (t)f(cursor)g(p)s(osition)h(relativ)m(e)i(to)e(the)g(b)s(eginning)f(of) -g(the)h(curren)m(t)630 3002 y(command.)40 b(If)27 b(the)h(curren)m(t)g +g(the)h(curren)m(t)630 4299 y(command.)40 b(If)27 b(the)h(curren)m(t)g (cursor)g(p)s(osition)g(is)g(at)g(the)g(end)g(of)g(the)g(curren)m(t)g -(command,)630 3112 y(the)i(v)-5 b(alue)30 b(of)g(this)g(v)-5 +(command,)630 4408 y(the)i(v)-5 b(alue)30 b(of)g(this)g(v)-5 b(ariable)31 b(is)f(equal)g(to)h Ft(${#COMP_LINE})p Fu(.)37 b(This)29 b(v)-5 b(ariable)31 b(is)f(a)m(v)-5 b(ailable)630 -3221 y(only)36 b(in)f(shell)h(functions)f(and)g(external)h(commands)g -(in)m(v)m(ok)m(ed)h(b)m(y)e(the)h(programmable)630 3331 +4518 y(only)36 b(in)f(shell)h(functions)f(and)g(external)h(commands)g +(in)m(v)m(ok)m(ed)h(b)m(y)e(the)h(programmable)630 4628 y(completion)c(facilities)g(\(see)g(Section)f(8.6)g([Programmable)g -(Completion],)h(page)f(143\).)150 3477 y Ft(COMP_TYPE)630 -3587 y Fu(Set)c(to)h(an)f(in)m(teger)h(v)-5 b(alue)28 +(Completion],)h(page)f(150\).)150 4792 y Ft(COMP_TYPE)630 +4902 y Fu(Set)c(to)h(an)f(in)m(teger)h(v)-5 b(alue)28 b(corresp)s(onding)e(to)h(the)h(t)m(yp)s(e)f(of)g(completion)h -(attempted)g(that)630 3696 y(caused)j(a)g(completion)h(function)e(to)h +(attempted)g(that)630 5011 y(caused)j(a)g(completion)h(function)e(to)h (b)s(e)f(called:)43 b Ft(TAB)p Fu(,)30 b(for)g(normal)h(completion,)h -(`)p Ft(?)p Fu(',)f(for)630 3806 y(listing)k(completions)h(after)f +(`)p Ft(?)p Fu(',)f(for)630 5121 y(listing)k(completions)h(after)f (successiv)m(e)g(tabs,)h(`)p Ft(!)p Fu(',)g(for)e(listing)h(alternativ) -m(es)i(on)d(partial)630 3915 y(w)m(ord)22 b(completion,)k(`)p +m(es)i(on)d(partial)630 5230 y(w)m(ord)22 b(completion,)k(`)p Ft(@)p Fu(',)f(to)e(list)g(completions)h(if)f(the)g(w)m(ord)f(is)h(not) g(unmo)s(di\014ed,)f(or)h(`)p Ft(\045)p Fu(',)h(for)630 -4025 y(men)m(u)i(completion.)41 b(This)25 b(v)-5 b(ariable)27 +5340 y(men)m(u)i(completion.)41 b(This)25 b(v)-5 b(ariable)27 b(is)g(a)m(v)-5 b(ailable)28 b(only)f(in)f(shell)g(functions)g(and)g -(external)630 4134 y(commands)32 b(in)m(v)m(ok)m(ed)i(b)m(y)e(the)g -(programmable)h(completion)g(facilities)i(\(see)e(Section)g(8.6)630 -4244 y([Programmable)e(Completion],)h(page)f(143\).)150 -4390 y Ft(COMP_KEY)96 b Fu(The)29 b(k)m(ey)i(\(or)g(\014nal)e(k)m(ey)i -(of)f(a)g(k)m(ey)h(sequence\))g(used)e(to)i(in)m(v)m(ok)m(e)h(the)e -(curren)m(t)g(completion)630 4500 y(function.)150 4646 -y Ft(COMP_WORDBREAKS)630 4756 y Fu(The)f(set)i(of)e(c)m(haracters)j -(that)e(the)g(Readline)g(library)g(treats)g(as)g(w)m(ord)g(separators)g -(when)630 4865 y(p)s(erforming)i(w)m(ord)h(completion.)51 -b(If)33 b Ft(COMP_WORDBREAKS)c Fu(is)34 b(unset,)g(it)f(loses)i(its)e -(sp)s(ecial)630 4975 y(prop)s(erties,)d(ev)m(en)h(if)f(it)h(is)g -(subsequen)m(tly)f(reset.)150 5121 y Ft(COMP_WORDS)630 -5230 y Fu(An)36 b(arra)m(y)g(v)-5 b(ariable)37 b(consisting)g(of)f(the) -g(individual)f(w)m(ords)h(in)f(the)h(curren)m(t)g(command)630 -5340 y(line.)94 b(The)47 b(line)i(is)f(split)g(in)m(to)h(w)m(ords)e(as) -h(Readline)h(w)m(ould)f(split)g(it,)53 b(using)47 b Ft(COMP_)p -eop end -%%Page: 83 89 -TeXDict begin 83 88 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(83)630 299 y Ft(WORDBREAKS)34 -b Fu(as)i(describ)s(ed)g(ab)s(o)m(v)m(e.)60 b(This)36 -b(v)-5 b(ariable)37 b(is)f(a)m(v)-5 b(ailable)39 b(only)e(in)f(shell)h -(func-)630 408 y(tions)32 b(in)m(v)m(ok)m(ed)i(b)m(y)d(the)i -(programmable)f(completion)h(facilities)h(\(see)f(Section)g(8.6)g -([Pro-)630 518 y(grammable)e(Completion],)g(page)g(143\).)150 -676 y Ft(COMPREPLY)630 786 y Fu(An)37 b(arra)m(y)h(v)-5 +(external)p eop end +%%Page: 86 92 +TeXDict begin 86 91 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(86)630 299 y(commands)32 +b(in)m(v)m(ok)m(ed)i(b)m(y)e(the)g(programmable)h(completion)g +(facilities)i(\(see)e(Section)g(8.6)630 408 y([Programmable)e +(Completion],)h(page)f(150\).)150 562 y Ft(COMP_KEY)96 +b Fu(The)29 b(k)m(ey)i(\(or)g(\014nal)e(k)m(ey)i(of)f(a)g(k)m(ey)h +(sequence\))g(used)e(to)i(in)m(v)m(ok)m(e)h(the)e(curren)m(t)g +(completion)630 671 y(function.)150 825 y Ft(COMP_WORDBREAKS)630 +934 y Fu(The)f(set)i(of)e(c)m(haracters)j(that)e(the)g(Readline)g +(library)g(treats)g(as)g(w)m(ord)g(separators)g(when)630 +1044 y(p)s(erforming)i(w)m(ord)h(completion.)51 b(If)33 +b Ft(COMP_WORDBREAKS)c Fu(is)34 b(unset,)g(it)f(loses)i(its)e(sp)s +(ecial)630 1154 y(prop)s(erties,)d(ev)m(en)h(if)f(it)h(is)g(subsequen)m +(tly)f(reset.)150 1307 y Ft(COMP_WORDS)630 1417 y Fu(An)36 +b(arra)m(y)g(v)-5 b(ariable)37 b(consisting)g(of)f(the)g(individual)f +(w)m(ords)h(in)f(the)h(curren)m(t)g(command)630 1526 +y(line.)94 b(The)47 b(line)i(is)f(split)g(in)m(to)h(w)m(ords)e(as)h +(Readline)h(w)m(ould)f(split)g(it,)53 b(using)47 b Ft(COMP_)630 +1636 y(WORDBREAKS)34 b Fu(as)i(describ)s(ed)g(ab)s(o)m(v)m(e.)60 +b(This)36 b(v)-5 b(ariable)37 b(is)f(a)m(v)-5 b(ailable)39 +b(only)e(in)f(shell)h(func-)630 1745 y(tions)32 b(in)m(v)m(ok)m(ed)i(b) +m(y)d(the)i(programmable)f(completion)h(facilities)h(\(see)f(Section)g +(8.6)g([Pro-)630 1855 y(grammable)e(Completion],)g(page)g(150\).)150 +2008 y Ft(COMPREPLY)630 2118 y Fu(An)37 b(arra)m(y)h(v)-5 b(ariable)38 b(from)f(whic)m(h)g(Bash)g(reads)g(the)h(p)s(ossible)e -(completions)j(generated)630 896 y(b)m(y)33 b(a)g(shell)h(function)f +(completions)j(generated)630 2228 y(b)m(y)33 b(a)g(shell)h(function)f (in)m(v)m(ok)m(ed)h(b)m(y)f(the)g(programmable)h(completion)g(facilit)m -(y)h(\(see)f(Sec-)630 1005 y(tion)g(8.6)g([Programmable)g(Completion],) -h(page)f(143\).)51 b(Eac)m(h)34 b(arra)m(y)g(elemen)m(t)h(con)m(tains) -630 1115 y(one)c(p)s(ossible)f(completion.)150 1273 y +(y)h(\(see)f(Sec-)630 2337 y(tion)g(8.6)g([Programmable)g(Completion],) +h(page)f(150\).)51 b(Eac)m(h)34 b(arra)m(y)g(elemen)m(t)h(con)m(tains) +630 2447 y(one)c(p)s(ossible)f(completion.)150 2600 y Ft(COPROC)192 b Fu(An)27 b(arra)m(y)g(v)-5 b(ariable)28 b(created)g(to)f(hold)g(the)g(\014le)g(descriptors)g(for)g(output)f -(from)h(and)f(input)630 1383 y(to)31 b(an)f(unnamed)f(copro)s(cess)i +(from)h(and)f(input)630 2710 y(to)31 b(an)f(unnamed)f(copro)s(cess)i (\(see)g(Section)h(3.2.6)g([Copro)s(cesses],)f(page)g(18\).)150 -1541 y Ft(DIRSTACK)96 b Fu(An)26 b(arra)m(y)h(v)-5 b(ariable)28 +2863 y Ft(DIRSTACK)96 b Fu(An)26 b(arra)m(y)h(v)-5 b(ariable)28 b(con)m(taining)g(the)f(curren)m(t)f(con)m(ten)m(ts)j(of)e(the)f -(directory)i(stac)m(k.)41 b(Direc-)630 1650 y(tories)33 +(directory)i(stac)m(k.)41 b(Direc-)630 2973 y(tories)33 b(app)s(ear)f(in)g(the)h(stac)m(k)h(in)e(the)h(order)f(they)h(are)g (displa)m(y)m(ed)g(b)m(y)f(the)h Ft(dirs)e Fu(builtin.)630 -1760 y(Assigning)f(to)h(mem)m(b)s(ers)f(of)g(this)g(arra)m(y)g(v)-5 +3082 y(Assigning)f(to)h(mem)m(b)s(ers)f(of)g(this)g(arra)m(y)g(v)-5 b(ariable)31 b(ma)m(y)g(b)s(e)e(used)h(to)h(mo)s(dify)e(directories)630 -1870 y(already)41 b(in)f(the)h(stac)m(k,)k(but)40 b(the)h +3192 y(already)41 b(in)f(the)h(stac)m(k,)k(but)40 b(the)h Ft(pushd)e Fu(and)h Ft(popd)f Fu(builtins)h(m)m(ust)h(b)s(e)e(used)h -(to)i(add)630 1979 y(and)37 b(remo)m(v)m(e)h(directories.)63 +(to)i(add)630 3302 y(and)37 b(remo)m(v)m(e)h(directories.)63 b(Assignmen)m(t)37 b(to)h(this)f(v)-5 b(ariable)38 b(will)g(not)f(c)m -(hange)i(the)e(cur-)630 2089 y(ren)m(t)c(directory)-8 +(hange)i(the)e(cur-)630 3411 y(ren)m(t)c(directory)-8 b(.)47 b(If)32 b Ft(DIRSTACK)e Fu(is)i(unset,)g(it)h(loses)g(its)g(sp)s (ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)630 -2198 y(subsequen)m(tly)d(reset.)150 2357 y Ft(EMACS)240 +3521 y(subsequen)m(tly)d(reset.)150 3674 y Ft(EMACS)240 b Fu(If)31 b(Bash)h(\014nds)d(this)j(v)-5 b(ariable)32 b(in)f(the)h(en)m(vironmen)m(t)g(when)e(the)i(shell)f(starts)h(with)f -(v)-5 b(alue)630 2466 y(`)p Ft(t)p Fu(',)36 b(it)f(assumes)f(that)h +(v)-5 b(alue)630 3784 y(`)p Ft(t)p Fu(',)36 b(it)f(assumes)f(that)h (the)g(shell)f(is)h(running)e(in)h(an)g(Emacs)h(shell)g(bu\013er)e(and) -h(disables)630 2576 y(line)d(editing.)150 2734 y Ft(ENV)336 +h(disables)630 3893 y(line)d(editing.)150 4047 y Ft(ENV)336 b Fu(Expanded)33 b(and)h(executed)i(similarly)f(to)g Ft(BASH_ENV)d Fu(\(see)k(Section)f(6.2)h([Bash)f(Startup)630 -2844 y(Files],)k(page)e(93\))h(when)d(an)h(in)m(teractiv)m(e)j(shell)d +4156 y(Files],)k(page)e(96\))h(when)d(an)h(in)m(teractiv)m(e)j(shell)d (is)h(in)m(v)m(ok)m(ed)g(in)f Fm(posix)g Fu(Mo)s(de)g(\(see)h(Sec-)630 -2953 y(tion)31 b(6.11)h([Bash)f(POSIX)e(Mo)s(de],)i(page)g(106\).)150 -3112 y Ft(EPOCHREALTIME)630 3221 y Fu(Eac)m(h)38 b(time)f(this)g +4266 y(tion)31 b(6.11)h([Bash)f(POSIX)e(Mo)s(de],)i(page)g(109\).)150 +4419 y Ft(EPOCHREALTIME)630 4529 y Fu(Eac)m(h)38 b(time)f(this)g (parameter)h(is)f(referenced,)i(it)f(expands)e(to)i(the)f(n)m(um)m(b)s -(er)f(of)h(seconds)630 3331 y(since)f(the)g(Unix)f(Ep)s(o)s(c)m(h)g(as) +(er)f(of)h(seconds)630 4639 y(since)f(the)g(Unix)f(Ep)s(o)s(c)m(h)g(as) h(a)g(\015oating)h(p)s(oin)m(t)f(v)-5 b(alue)36 b(with)f(micro-second)i -(gran)m(ularit)m(y)630 3440 y(\(see)k(the)g(do)s(cumen)m(tation)h(for)e +(gran)m(ularit)m(y)630 4748 y(\(see)k(the)g(do)s(cumen)m(tation)h(for)e (the)h(C)f(library)g(function)g Ft(time)g Fu(for)g(the)h(de\014nition)f -(of)630 3550 y(Ep)s(o)s(c)m(h\).)82 b(Assignmen)m(ts)44 +(of)630 4858 y(Ep)s(o)s(c)m(h\).)82 b(Assignmen)m(ts)44 b(to)h Ft(EPOCHREALTIME)c Fu(are)j(ignored.)83 b(If)43 -b Ft(EPOCHREALTIME)e Fu(is)630 3660 y(unset,)30 b(it)h(loses)g(its)g +b Ft(EPOCHREALTIME)e Fu(is)630 4967 y(unset,)30 b(it)h(loses)g(its)g (sp)s(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g(subsequen)m -(tly)f(reset.)150 3818 y Ft(EPOCHSECONDS)630 3927 y Fu(Eac)m(h)38 +(tly)f(reset.)150 5121 y Ft(EPOCHSECONDS)630 5230 y Fu(Eac)m(h)38 b(time)f(this)g(parameter)h(is)f(referenced,)i(it)f(expands)e(to)i(the) -f(n)m(um)m(b)s(er)f(of)h(seconds)630 4037 y(since)d(the)g(Unix)g(Ep)s +f(n)m(um)m(b)s(er)f(of)h(seconds)630 5340 y(since)d(the)g(Unix)g(Ep)s (o)s(c)m(h)f(\(see)i(the)f(do)s(cumen)m(tation)h(for)e(the)i(C)e -(library)h(function)f Ft(time)630 4147 y Fu(for)41 b(the)g -(de\014nition)g(of)h(Ep)s(o)s(c)m(h\).)73 b(Assignmen)m(ts)41 +(library)h(function)f Ft(time)p eop end +%%Page: 87 93 +TeXDict begin 87 92 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(87)630 299 y(for)41 +b(the)g(de\014nition)g(of)h(Ep)s(o)s(c)m(h\).)73 b(Assignmen)m(ts)41 b(to)h Ft(EPOCHSECONDS)c Fu(are)k(ignored.)73 b(If)630 -4256 y Ft(EPOCHSECONDS)27 b Fu(is)j(unset,)g(it)g(loses)h(its)g(sp)s +408 y Ft(EPOCHSECONDS)27 b Fu(is)j(unset,)g(it)g(loses)h(its)g(sp)s (ecial)f(prop)s(erties,)g(ev)m(en)h(if)f(it)g(is)g(subsequen)m(tly)630 -4366 y(reset.)150 4524 y Ft(EUID)288 b Fu(The)30 b(n)m(umeric)g +518 y(reset.)150 679 y Ft(EUID)288 b Fu(The)30 b(n)m(umeric)g (e\013ectiv)m(e)j(user)d(id)g(of)g(the)h(curren)m(t)f(user.)40 b(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8 b(.)150 -4682 y Ft(EXECIGNORE)630 4792 y Fu(A)29 b(colon-separated)h(list)f(of)g +840 y Ft(EXECIGNORE)630 950 y Fu(A)29 b(colon-separated)h(list)f(of)g (shell)g(patterns)f(\(see)i(Section)f(3.5.8.1)i([P)m(attern)f(Matc)m -(hing],)630 4902 y(page)j(36\))g(de\014ning)e(the)h(list)g(of)g +(hing],)630 1060 y(page)j(37\))g(de\014ning)e(the)h(list)g(of)g (\014lenames)g(to)g(b)s(e)g(ignored)g(b)m(y)f(command)h(searc)m(h)g -(using)630 5011 y Ft(PATH)p Fu(.)k(Files)22 b(whose)f(full)g(pathnames) +(using)630 1169 y Ft(PATH)p Fu(.)k(Files)22 b(whose)f(full)g(pathnames) g(matc)m(h)h(one)f(of)g(these)h(patterns)e(are)i(not)f(considered)630 -5121 y(executable)j(\014les)e(for)g(the)h(purp)s(oses)d(of)j +1279 y(executable)j(\014les)e(for)g(the)h(purp)s(oses)d(of)j (completion)h(and)d(command)i(execution)g(via)g Ft(PATH)630 -5230 y Fu(lo)s(okup.)56 b(This)35 b(do)s(es)g(not)h(a\013ect)i(the)d(b) +1388 y Fu(lo)s(okup.)56 b(This)35 b(do)s(es)g(not)h(a\013ect)i(the)d(b) s(eha)m(vior)h(of)g(the)g Ft([)p Fu(,)h Ft(test)p Fu(,)f(and)f -Ft([[)g Fu(commands.)630 5340 y(F)-8 b(ull)42 b(pathnames)e(in)h(the)g +Ft([[)g Fu(commands.)630 1498 y(F)-8 b(ull)42 b(pathnames)e(in)h(the)g (command)g(hash)f(table)i(are)g(not)f(sub)5 b(ject)41 -b(to)g Ft(EXECIGNORE)p Fu(.)p eop end -%%Page: 84 90 -TeXDict begin 84 89 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(84)630 299 y(Use)30 -b(this)f(v)-5 b(ariable)30 b(to)g(ignore)g(shared)f(library)g(\014les)g -(that)h(ha)m(v)m(e)h(the)f(executable)h(bit)e(set,)630 -408 y(but)36 b(are)h(not)g(executable)i(\014les.)60 b(The)36 -b(pattern)h(matc)m(hing)h(honors)e(the)h(setting)h(of)f(the)630 -518 y Ft(extglob)28 b Fu(shell)j(option.)150 679 y Ft(FCEDIT)192 +b(to)g Ft(EXECIGNORE)p Fu(.)630 1608 y(Use)30 b(this)f(v)-5 +b(ariable)30 b(to)g(ignore)g(shared)f(library)g(\014les)g(that)h(ha)m +(v)m(e)h(the)f(executable)h(bit)e(set,)630 1717 y(but)36 +b(are)h(not)g(executable)i(\014les.)60 b(The)36 b(pattern)h(matc)m +(hing)h(honors)e(the)h(setting)h(of)f(the)630 1827 y +Ft(extglob)28 b Fu(shell)j(option.)150 1988 y Ft(FCEDIT)192 b Fu(The)30 b(editor)h(used)e(as)i(a)g(default)f(b)m(y)h(the)f Ft(-e)g Fu(option)h(to)g(the)f Ft(fc)g Fu(builtin)g(command.)150 -840 y Ft(FIGNORE)144 b Fu(A)35 b(colon-separated)i(list)f(of)g +2149 y Ft(FIGNORE)144 b Fu(A)35 b(colon-separated)i(list)f(of)g (su\016xes)e(to)i(ignore)g(when)e(p)s(erforming)g(\014lename)i(comple-) -630 950 y(tion.)k(A)27 b(\014lename)g(whose)f(su\016x)g(matc)m(hes)i +630 2259 y(tion.)k(A)27 b(\014lename)g(whose)f(su\016x)g(matc)m(hes)i (one)f(of)g(the)g(en)m(tries)g(in)g Ft(FIGNORE)d Fu(is)j(excluded)630 -1060 y(from)j(the)g(list)h(of)g(matc)m(hed)g(\014lenames.)41 +2368 y(from)j(the)g(list)h(of)g(matc)m(hed)g(\014lenames.)41 b(A)30 b(sample)h(v)-5 b(alue)31 b(is)f(`)p Ft(.o:~)p -Fu(')150 1221 y Ft(FUNCNAME)96 b Fu(An)35 b(arra)m(y)i(v)-5 +Fu(')150 2529 y Ft(FUNCNAME)96 b Fu(An)35 b(arra)m(y)i(v)-5 b(ariable)36 b(con)m(taining)h(the)f(names)g(of)g(all)g(shell)g -(functions)g(curren)m(tly)f(in)h(the)630 1330 y(execution)g(call)h +(functions)g(curren)m(tly)f(in)h(the)630 2639 y(execution)g(call)h (stac)m(k.)57 b(The)34 b(elemen)m(t)j(with)e(index)g(0)h(is)f(the)g -(name)h(of)f(an)m(y)h(curren)m(tly-)630 1440 y(executing)f(shell)f +(name)h(of)f(an)m(y)h(curren)m(tly-)630 2749 y(executing)f(shell)f (function.)51 b(The)34 b(b)s(ottom-most)h(elemen)m(t)g(\(the)g(one)f -(with)g(the)g(highest)630 1549 y(index\))e(is)h Ft("main")p +(with)g(the)g(highest)630 2858 y(index\))e(is)h Ft("main")p Fu(.)44 b(This)32 b(v)-5 b(ariable)33 b(exists)g(only)g(when)e(a)i -(shell)f(function)g(is)g(executing.)630 1659 y(Assignmen)m(ts)23 +(shell)f(function)g(is)g(executing.)630 2968 y(Assignmen)m(ts)23 b(to)f Ft(FUNCNAME)e Fu(ha)m(v)m(e)k(no)e(e\013ect.)39 b(If)22 b Ft(FUNCNAME)e Fu(is)i(unset,)h(it)g(loses)g(its)f(sp)s(ecial) -630 1769 y(prop)s(erties,)30 b(ev)m(en)h(if)f(it)h(is)g(subsequen)m -(tly)f(reset.)630 1904 y(This)h(v)-5 b(ariable)32 b(can)f(b)s(e)g(used) +630 3077 y(prop)s(erties,)30 b(ev)m(en)h(if)f(it)h(is)g(subsequen)m +(tly)f(reset.)630 3213 y(This)h(v)-5 b(ariable)32 b(can)f(b)s(e)g(used) g(with)g Ft(BASH_LINENO)d Fu(and)j Ft(BASH_SOURCE)p Fu(.)40 -b(Eac)m(h)32 b(elemen)m(t)630 2014 y(of)g Ft(FUNCNAME)d +b(Eac)m(h)32 b(elemen)m(t)630 3322 y(of)g Ft(FUNCNAME)d Fu(has)j(corresp)s(onding)e(elemen)m(ts)j(in)f Ft(BASH_LINENO)c -Fu(and)k Ft(BASH_SOURCE)c Fu(to)630 2123 y(describ)s(e)39 +Fu(and)k Ft(BASH_SOURCE)c Fu(to)630 3432 y(describ)s(e)39 b(the)h(call)h(stac)m(k.)70 b(F)-8 b(or)41 b(instance,)i Ft(${FUNCNAME[$i]})35 b Fu(w)m(as)41 b(called)f(from)g(the)630 -2233 y(\014le)27 b Ft(${BASH_SOURCE[$i+1]})21 b Fu(at)27 +3541 y(\014le)27 b Ft(${BASH_SOURCE[$i+1]})21 b Fu(at)27 b(line)h(n)m(um)m(b)s(er)d Ft(${BASH_LINENO[$i]})p Fu(.)34 -b(The)27 b Ft(caller)630 2342 y Fu(builtin)j(displa)m(ys)g(the)h +b(The)27 b Ft(caller)630 3651 y Fu(builtin)j(displa)m(ys)g(the)h (curren)m(t)f(call)i(stac)m(k)g(using)d(this)i(information.)150 -2504 y Ft(FUNCNEST)96 b Fu(If)34 b(set)i(to)f(a)h(n)m(umeric)e(v)-5 +3812 y Ft(FUNCNEST)96 b Fu(If)34 b(set)i(to)f(a)h(n)m(umeric)e(v)-5 b(alue)36 b(greater)g(than)e(0,)j(de\014nes)d(a)h(maxim)m(um)g -(function)g(nesting)630 2613 y(lev)m(el.)42 b(F)-8 b(unction)29 +(function)g(nesting)630 3922 y(lev)m(el.)42 b(F)-8 b(unction)29 b(in)m(v)m(o)s(cations)h(that)f(exceed)h(this)e(nesting)h(lev)m(el)h -(will)f(cause)g(the)f(curren)m(t)630 2723 y(command)i(to)h(ab)s(ort.) -150 2884 y Ft(GLOBIGNORE)630 2993 y Fu(A)k(colon-separated)i(list)f(of) +(will)f(cause)g(the)f(curren)m(t)630 4031 y(command)i(to)h(ab)s(ort.) +150 4193 y Ft(GLOBIGNORE)630 4302 y Fu(A)k(colon-separated)i(list)f(of) f(patterns)g(de\014ning)f(the)i(set)f(of)g(\014le)h(names)f(to)g(b)s(e) -g(ignored)630 3103 y(b)m(y)28 b(\014lename)h(expansion.)40 +g(ignored)630 4412 y(b)m(y)28 b(\014lename)h(expansion.)40 b(If)28 b(a)h(\014le)g(name)g(matc)m(hed)g(b)m(y)g(a)g(\014lename)f -(expansion)h(pattern)630 3213 y(also)k(matc)m(hes)g(one)f(of)g(the)g +(expansion)h(pattern)630 4521 y(also)k(matc)m(hes)g(one)f(of)g(the)g (patterns)g(in)f Ft(GLOBIGNORE)p Fu(,)f(it)i(is)g(remo)m(v)m(ed)h(from) -e(the)h(list)h(of)630 3322 y(matc)m(hes.)41 b(The)27 +e(the)h(list)h(of)630 4631 y(matc)m(hes.)41 b(The)27 b(pattern)g(matc)m(hing)h(honors)f(the)g(setting)i(of)e(the)h -Ft(extglob)d Fu(shell)i(option.)150 3483 y Ft(GROUPS)192 -b Fu(An)36 b(arra)m(y)g(v)-5 b(ariable)37 b(con)m(taining)g(the)f(list) -h(of)f(groups)g(of)g(whic)m(h)f(the)i(curren)m(t)e(user)h(is)g(a)630 -3593 y(mem)m(b)s(er.)41 b(Assignmen)m(ts)30 b(to)i Ft(GROUPS)d -Fu(ha)m(v)m(e)i(no)g(e\013ect.)42 b(If)30 b Ft(GROUPS)f -Fu(is)i(unset,)f(it)h(loses)h(its)630 3703 y(sp)s(ecial)f(prop)s -(erties,)f(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f(reset.)150 -3864 y Ft(histchars)630 3973 y Fu(Up)c(to)g(three)g(c)m(haracters)i -(whic)m(h)d(con)m(trol)j(history)d(expansion,)i(quic)m(k)g -(substitution,)g(and)630 4083 y(tok)m(enization)k(\(see)f(Section)f -(9.3)h([History)f(In)m(teraction],)i(page)f(154\).)41 -b(The)29 b(\014rst)e(c)m(harac-)630 4193 y(ter)j(is)f(the)g -Fr(history)g(expansion)g Fu(c)m(haracter,)j(that)e(is,)f(the)h(c)m -(haracter)h(whic)m(h)d(signi\014es)i(the)630 4302 y(start)25 -b(of)f(a)h(history)f(expansion,)i(normally)e(`)p Ft(!)p -Fu('.)39 b(The)24 b(second)g(c)m(haracter)i(is)e(the)g(c)m(haracter)630 -4412 y(whic)m(h)36 b(signi\014es)g(`quic)m(k)h(substitution')f(when)f -(seen)h(as)g(the)g(\014rst)f(c)m(haracter)j(on)e(a)g(line,)630 -4521 y(normally)27 b(`)p Ft(^)p Fu('.)39 b(The)26 b(optional)i(third)d -(c)m(haracter)j(is)e(the)h(c)m(haracter)h(whic)m(h)e(indicates)h(that) -630 4631 y(the)34 b(remainder)f(of)h(the)g(line)g(is)f(a)h(commen)m(t)h +Ft(extglob)d Fu(shell)i(option.)150 4792 y Ft(GLOBSORT)96 +b Fu(Con)m(trol)41 b(ho)m(w)f(the)g(results)g(of)h(\014lename)f +(expansion)g(are)g(sorted.)70 b(The)40 b(v)-5 b(alue)41 +b(of)f(this)630 4902 y(v)-5 b(ariable)45 b(sp)s(eci\014es)e(the)h(sort) +g(criteria)h(and)e(sort)h(order)f(for)g(the)h(results)g(of)g +(\014lename)630 5011 y(expansion.)c(If)29 b(this)g(v)-5 +b(ariable)30 b(is)f(unset)f(or)h(set)h(to)g(the)f(n)m(ull)g(string,)h +(\014lename)f(expansion)630 5121 y(uses)40 b(the)h(historical)h(b)s +(eha)m(vior)e(of)h(sorting)g(b)m(y)f(name.)71 b(If)40 +b(set,)k(a)d(v)-5 b(alid)41 b(v)-5 b(alue)40 b(b)s(egins)630 +5230 y(with)27 b(an)f(optional)i(`)p Ft(+)p Fu(',)g(whic)m(h)f(is)g +(ignored,)g(or)g(`)p Ft(-)p Fu(',)h(whic)m(h)f(rev)m(erses)g(the)g +(sort)g(order)f(from)630 5340 y(ascending)34 b(to)g(descending,)g +(follo)m(w)m(ed)h(b)m(y)e(a)h(sort)f(sp)s(eci\014er.)50 +b(The)32 b(v)-5 b(alid)34 b(sort)g(sp)s(eci\014ers)p +eop end +%%Page: 88 94 +TeXDict begin 88 93 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(88)630 299 y(are)21 +b(`)p Ft(name)p Fu(',)h(`)p Ft(size)p Fu(',)g(`)p Ft(mtime)p +Fu(',)g(`)p Ft(atime)p Fu(',)g(`)p Ft(ctime)p Fu(',)f(and)f(`)p +Ft(blocks)p Fu(',)i(whic)m(h)e(sort)h(the)g(\014les)f(on)630 +408 y(name,)30 b(\014le)h(size,)g(mo)s(di\014cation)f(time,)h(access)h +(time,)f(ino)s(de)e(c)m(hange)j(time,)f(and)e(n)m(um)m(b)s(er)630 +518 y(of)i(blo)s(c)m(ks,)g(resp)s(ectiv)m(ely)-8 b(.)630 +659 y(F)g(or)33 b(example,)g(a)f(v)-5 b(alue)33 b(of)f +Ft(-mtime)e Fu(sorts)i(the)g(results)g(in)f(descending)h(order)f(b)m(y) +h(mo)s(di-)630 769 y(\014cation)f(time)g(\(new)m(est)h(\014rst\).)630 +909 y(A)26 b(sort)h(sp)s(eci\014er)e(of)h(`)p Ft(nosort)p +Fu(')f(disables)h(sorting)h(completely;)i(the)e(results)f(are)g +(returned)630 1019 y(in)k(the)h(order)f(they)g(are)h(read)f(from)g(the) +h(\014le)f(system,.)630 1160 y(If)c(the)h(sort)f(sp)s(eci\014er)g(is)h +(missing,)g(it)g(defaults)g(to)g Fr(name)p Fu(,)g(so)g(a)g(v)-5 +b(alue)27 b(of)f(`)p Ft(+)p Fu(')h(is)f(equiv)-5 b(alen)m(t)630 +1270 y(to)31 b(the)g(n)m(ull)f(string,)h(and)e(a)i(v)-5 +b(alue)31 b(of)f(`)p Ft(-)p Fu(')h(sorts)f(b)m(y)h(name)f(in)g +(descending)g(order.)630 1410 y(An)m(y)g(in)m(v)-5 b(alid)31 +b(v)-5 b(alue)31 b(restores)g(the)g(historical)g(sorting)g(b)s(eha)m +(vior.)150 1583 y Ft(GROUPS)192 b Fu(An)36 b(arra)m(y)g(v)-5 +b(ariable)37 b(con)m(taining)g(the)f(list)h(of)f(groups)g(of)g(whic)m +(h)f(the)i(curren)m(t)e(user)h(is)g(a)630 1692 y(mem)m(b)s(er.)41 +b(Assignmen)m(ts)30 b(to)i Ft(GROUPS)d Fu(ha)m(v)m(e)i(no)g(e\013ect.) +42 b(If)30 b Ft(GROUPS)f Fu(is)i(unset,)f(it)h(loses)h(its)630 +1802 y(sp)s(ecial)f(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g +(subsequen)m(tly)f(reset.)150 1974 y Ft(histchars)630 +2084 y Fu(Up)c(to)g(three)g(c)m(haracters)i(whic)m(h)d(con)m(trol)j +(history)d(expansion,)i(quic)m(k)g(substitution,)g(and)630 +2193 y(tok)m(enization)k(\(see)f(Section)f(9.3)h([History)f(In)m +(teraction],)i(page)f(161\).)41 b(The)29 b(\014rst)e(c)m(harac-)630 +2303 y(ter)j(is)f(the)g Fr(history)g(expansion)g Fu(c)m(haracter,)j +(that)e(is,)f(the)h(c)m(haracter)h(whic)m(h)d(signi\014es)i(the)630 +2412 y(start)25 b(of)f(a)h(history)f(expansion,)i(normally)e(`)p +Ft(!)p Fu('.)39 b(The)24 b(second)g(c)m(haracter)i(is)e(the)g(c)m +(haracter)630 2522 y(whic)m(h)32 b(signi\014es)g Ft(")p +Fu(quic)m(k)h(substitution)p Ft(")f Fu(when)f(seen)h(as)h(the)f +(\014rst)g(c)m(haracter)i(on)e(a)g(line,)630 2632 y(normally)27 +b(`)p Ft(^)p Fu('.)39 b(The)26 b(optional)i(third)d(c)m(haracter)j(is)e +(the)h(c)m(haracter)h(whic)m(h)e(indicates)h(that)630 +2741 y(the)34 b(remainder)f(of)h(the)g(line)g(is)f(a)h(commen)m(t)h (when)e(found)f(as)i(the)g(\014rst)f(c)m(haracter)i(of)f(a)630 -4740 y(w)m(ord,)i(usually)f(`)p Ft(#)p Fu('.)55 b(The)34 +2851 y(w)m(ord,)i(usually)f(`)p Ft(#)p Fu('.)55 b(The)34 b(history)h(commen)m(t)h(c)m(haracter)h(causes)e(history)g -(substitution)630 4850 y(to)27 b(b)s(e)f(skipp)s(ed)f(for)i(the)f +(substitution)630 2960 y(to)27 b(b)s(e)f(skipp)s(ed)f(for)i(the)f (remaining)h(w)m(ords)f(on)h(the)f(line.)40 b(It)27 b(do)s(es)f(not)h -(necessarily)g(cause)630 4960 y(the)k(shell)f(parser)g(to)h(treat)g +(necessarily)g(cause)630 3070 y(the)k(shell)f(parser)g(to)h(treat)g (the)g(rest)g(of)f(the)h(line)f(as)h(a)g(commen)m(t.)150 -5121 y Ft(HISTCMD)144 b Fu(The)44 b(history)h(n)m(um)m(b)s(er,)j(or)d +3242 y Ft(HISTCMD)144 b Fu(The)44 b(history)h(n)m(um)m(b)s(er,)j(or)d (index)g(in)f(the)h(history)g(list,)50 b(of)45 b(the)g(curren)m(t)g -(command.)630 5230 y(Assignmen)m(ts)37 b(to)h Ft(HISTCMD)d +(command.)630 3352 y(Assignmen)m(ts)37 b(to)h Ft(HISTCMD)d Fu(are)j(ignored.)61 b(If)37 b Ft(HISTCMD)e Fu(is)i(unset,)h(it)g -(loses)g(its)f(sp)s(ecial)630 5340 y(prop)s(erties,)30 -b(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f(reset.)p -eop end -%%Page: 85 91 -TeXDict begin 85 90 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(85)150 299 y Ft(HISTCONTROL)630 -408 y Fu(A)40 b(colon-separated)i(list)f(of)f(v)-5 b(alues)40 -b(con)m(trolling)i(ho)m(w)e(commands)g(are)h(sa)m(v)m(ed)g(on)f(the)630 -518 y(history)29 b(list.)41 b(If)28 b(the)h(list)h(of)f(v)-5 -b(alues)29 b(includes)f(`)p Ft(ignorespace)p Fu(',)f(lines)i(whic)m(h)g -(b)s(egin)f(with)630 628 y(a)39 b(space)g(c)m(haracter)i(are)e(not)g -(sa)m(v)m(ed)g(in)g(the)g(history)f(list.)66 b(A)39 b(v)-5 -b(alue)39 b(of)g(`)p Ft(ignoredups)p Fu(')630 737 y(causes)34 -b(lines)h(whic)m(h)f(matc)m(h)h(the)f(previous)f(history)h(en)m(try)h -(to)g(not)f(b)s(e)f(sa)m(v)m(ed.)53 b(A)34 b(v)-5 b(alue)630 -847 y(of)32 b(`)p Ft(ignoreboth)p Fu(')d(is)j(shorthand)e(for)i(`)p -Ft(ignorespace)p Fu(')d(and)i(`)p Ft(ignoredups)p Fu('.)42 -b(A)32 b(v)-5 b(alue)32 b(of)630 956 y(`)p Ft(erasedups)p -Fu(')f(causes)i(all)h(previous)f(lines)g(matc)m(hing)h(the)f(curren)m -(t)g(line)g(to)h(b)s(e)e(remo)m(v)m(ed)630 1066 y(from)42 -b(the)h(history)f(list)i(b)s(efore)e(that)h(line)g(is)g(sa)m(v)m(ed.)78 -b(An)m(y)43 b(v)-5 b(alue)43 b(not)g(in)f(the)h(ab)s(o)m(v)m(e)630 -1176 y(list)35 b(is)g(ignored.)53 b(If)34 b Ft(HISTCONTROL)e -Fu(is)i(unset,)i(or)e(do)s(es)h(not)g(include)f(a)h(v)-5 -b(alid)35 b(v)-5 b(alue,)36 b(all)630 1285 y(lines)30 +(loses)g(its)f(sp)s(ecial)630 3461 y(prop)s(erties,)30 +b(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f(reset.)150 +3634 y Ft(HISTCONTROL)630 3743 y Fu(A)40 b(colon-separated)i(list)f(of) +f(v)-5 b(alues)40 b(con)m(trolling)i(ho)m(w)e(commands)g(are)h(sa)m(v)m +(ed)g(on)f(the)630 3853 y(history)29 b(list.)41 b(If)28 +b(the)h(list)h(of)f(v)-5 b(alues)29 b(includes)f(`)p +Ft(ignorespace)p Fu(',)f(lines)i(whic)m(h)g(b)s(egin)f(with)630 +3962 y(a)39 b(space)g(c)m(haracter)i(are)e(not)g(sa)m(v)m(ed)g(in)g +(the)g(history)f(list.)66 b(A)39 b(v)-5 b(alue)39 b(of)g(`)p +Ft(ignoredups)p Fu(')630 4072 y(causes)34 b(lines)h(whic)m(h)f(matc)m +(h)h(the)f(previous)f(history)h(en)m(try)h(to)g(not)f(b)s(e)f(sa)m(v)m +(ed.)53 b(A)34 b(v)-5 b(alue)630 4181 y(of)32 b(`)p Ft(ignoreboth)p +Fu(')d(is)j(shorthand)e(for)i(`)p Ft(ignorespace)p Fu(')d(and)i(`)p +Ft(ignoredups)p Fu('.)42 b(A)32 b(v)-5 b(alue)32 b(of)630 +4291 y(`)p Ft(erasedups)p Fu(')f(causes)i(all)h(previous)f(lines)g +(matc)m(hing)h(the)f(curren)m(t)g(line)g(to)h(b)s(e)e(remo)m(v)m(ed)630 +4401 y(from)42 b(the)h(history)f(list)i(b)s(efore)e(that)h(line)g(is)g +(sa)m(v)m(ed.)78 b(An)m(y)43 b(v)-5 b(alue)43 b(not)g(in)f(the)h(ab)s +(o)m(v)m(e)630 4510 y(list)35 b(is)g(ignored.)53 b(If)34 +b Ft(HISTCONTROL)e Fu(is)i(unset,)i(or)e(do)s(es)h(not)g(include)f(a)h +(v)-5 b(alid)35 b(v)-5 b(alue,)36 b(all)630 4620 y(lines)30 b(read)g(b)m(y)g(the)g(shell)g(parser)g(are)g(sa)m(v)m(ed)h(on)f(the)g (history)g(list,)h(sub)5 b(ject)30 b(to)g(the)g(v)-5 -b(alue)630 1395 y(of)42 b Ft(HISTIGNORE)p Fu(.)73 b(The)42 +b(alue)630 4729 y(of)42 b Ft(HISTIGNORE)p Fu(.)73 b(The)42 b(second)g(and)g(subsequen)m(t)f(lines)h(of)h(a)f(m)m(ulti-line)h(comp) -s(ound)630 1504 y(command)33 b(are)h(not)g(tested,)i(and)d(are)h(added) +s(ound)630 4839 y(command)33 b(are)h(not)g(tested,)i(and)d(are)h(added) f(to)h(the)g(history)g(regardless)g(of)g(the)f(v)-5 b(alue)630 -1614 y(of)31 b Ft(HISTCONTROL)p Fu(.)150 1763 y Ft(HISTFILE)96 -b Fu(The)27 b(name)h(of)g(the)g(\014le)g(to)h(whic)m(h)f(the)g(command) -f(history)h(is)g(sa)m(v)m(ed.)41 b(The)27 b(default)h(v)-5 -b(alue)630 1873 y(is)30 b Ft(~/.bash_history)p Fu(.)150 -2022 y Ft(HISTFILESIZE)630 2132 y Fu(The)c(maxim)m(um)f(n)m(um)m(b)s -(er)g(of)h(lines)h(con)m(tained)g(in)f(the)g(history)g(\014le.)39 -b(When)26 b(this)g(v)-5 b(ariable)630 2242 y(is)25 b(assigned)h(a)g(v) --5 b(alue,)27 b(the)f(history)f(\014le)h(is)f(truncated,)i(if)e -(necessary)-8 b(,)28 b(to)e(con)m(tain)g(no)g(more)630 -2351 y(than)37 b(that)h(n)m(um)m(b)s(er)d(of)j(lines)f(b)m(y)g(remo)m -(ving)h(the)f(oldest)h(en)m(tries.)62 b(The)37 b(history)g(\014le)g(is) -630 2461 y(also)i(truncated)f(to)h(this)e(size)i(after)g(writing)f(it)g +4949 y(of)31 b Ft(HISTCONTROL)p Fu(.)150 5121 y Ft(HISTFILE)96 +b Fu(The)35 b(name)h(of)g(the)g(\014le)g(to)h(whic)m(h)e(the)h(command) +g(history)g(is)f(sa)m(v)m(ed.)59 b(Bash)36 b(assigns)g(a)630 +5230 y(default)31 b(v)-5 b(alue)31 b(of)f Ft(~/.bash_history)p +Fu(.)37 b(If)30 b Ft(HISTFILE)e Fu(is)i(unset)g(or)h(n)m(ull,)g(the)f +(command)630 5340 y(history)g(is)h(not)f(sa)m(v)m(ed)i(when)d(a)i +(shell)g(exits.)p eop end +%%Page: 89 95 +TeXDict begin 89 94 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(89)150 299 y Ft(HISTFILESIZE)630 +408 y Fu(The)26 b(maxim)m(um)f(n)m(um)m(b)s(er)g(of)h(lines)h(con)m +(tained)g(in)f(the)g(history)g(\014le.)39 b(When)26 b(this)g(v)-5 +b(ariable)630 518 y(is)25 b(assigned)h(a)g(v)-5 b(alue,)27 +b(the)f(history)f(\014le)h(is)f(truncated,)i(if)e(necessary)-8 +b(,)28 b(to)e(con)m(tain)g(no)g(more)630 628 y(than)37 +b(that)h(n)m(um)m(b)s(er)d(of)j(lines)f(b)m(y)g(remo)m(ving)h(the)f +(oldest)h(en)m(tries.)62 b(The)37 b(history)g(\014le)g(is)630 +737 y(also)i(truncated)f(to)h(this)e(size)i(after)g(writing)f(it)g (when)f(a)h(shell)h(exits.)64 b(If)37 b(the)h(v)-5 b(alue)39 -b(is)630 2570 y(0,)g(the)e(history)f(\014le)h(is)g(truncated)f(to)i +b(is)630 847 y(0,)g(the)e(history)f(\014le)h(is)g(truncated)f(to)i (zero)f(size.)60 b(Non-n)m(umeric)37 b(v)-5 b(alues)37 -b(and)f(n)m(umeric)630 2680 y(v)-5 b(alues)31 b(less)f(than)g(zero)h +b(and)f(n)m(umeric)630 956 y(v)-5 b(alues)31 b(less)f(than)g(zero)h (inhibit)f(truncation.)41 b(The)29 b(shell)i(sets)f(the)h(default)f(v) --5 b(alue)31 b(to)g(the)630 2790 y(v)-5 b(alue)31 b(of)f +-5 b(alue)31 b(to)g(the)630 1066 y(v)-5 b(alue)31 b(of)f Ft(HISTSIZE)f Fu(after)h(reading)h(an)m(y)g(startup)f(\014les.)150 -2939 y Ft(HISTIGNORE)630 3049 y Fu(A)j(colon-separated)h(list)f(of)g +1226 y Ft(HISTIGNORE)630 1336 y Fu(A)j(colon-separated)h(list)f(of)g (patterns)f(used)g(to)h(decide)g(whic)m(h)f(command)g(lines)h(should) -630 3158 y(b)s(e)f(sa)m(v)m(ed)h(on)g(the)f(history)h(list.)47 -b(Eac)m(h)33 b(pattern)g(is)f(anc)m(hored)h(at)g(the)f(b)s(eginning)g -(of)h(the)630 3268 y(line)43 b(and)e(m)m(ust)h(matc)m(h)h(the)g -(complete)h(line)e(\(no)h(implicit)g(`)p Ft(*)p Fu(')f(is)g(app)s -(ended\).)75 b(Eac)m(h)630 3377 y(pattern)42 b(is)g(tested)g(against)h -(the)f(line)g(after)g(the)g(c)m(hec)m(ks)h(sp)s(eci\014ed)e(b)m(y)h -Ft(HISTCONTROL)630 3487 y Fu(are)37 b(applied.)59 b(In)36 -b(addition)h(to)g(the)g(normal)g(shell)f(pattern)h(matc)m(hing)h(c)m -(haracters,)i(`)p Ft(&)p Fu(')630 3597 y(matc)m(hes)d(the)f(previous)g -(history)g(line.)57 b(`)p Ft(&)p Fu(')36 b(ma)m(y)h(b)s(e)e(escap)s(ed) -h(using)g(a)g(bac)m(kslash;)k(the)630 3706 y(bac)m(kslash)34 -b(is)g(remo)m(v)m(ed)h(b)s(efore)e(attempting)i(a)g(matc)m(h.)51 -b(The)34 b(second)f(and)h(subsequen)m(t)630 3816 y(lines)e(of)h(a)g(m)m -(ulti-line)g(comp)s(ound)e(command)h(are)h(not)f(tested,)i(and)e(are)g -(added)g(to)h(the)630 3925 y(history)k(regardless)h(of)f(the)g(v)-5 -b(alue)38 b(of)f Ft(HISTIGNORE)p Fu(.)58 b(The)37 b(pattern)g(matc)m -(hing)i(honors)630 4035 y(the)31 b(setting)g(of)g(the)f -Ft(extglob)f Fu(shell)h(option.)630 4164 y Ft(HISTIGNORE)20 -b Fu(subsumes)g(the)j(function)f(of)h Ft(HISTCONTROL)p -Fu(.)35 b(A)23 b(pattern)f(of)h(`)p Ft(&)p Fu(')g(is)f(iden)m(tical)630 -4274 y(to)k Ft(ignoredups)p Fu(,)e(and)h(a)h(pattern)g(of)f(`)p -Ft([)31 b(]*)p Fu(')25 b(is)h(iden)m(tical)h(to)f Ft(ignorespace)p -Fu(.)36 b(Com)m(bining)630 4384 y(these)30 b(t)m(w)m(o)h(patterns,)f -(separating)g(them)g(with)f(a)h(colon,)h(pro)m(vides)e(the)h -(functionalit)m(y)h(of)630 4493 y Ft(ignoreboth)p Fu(.)150 -4643 y Ft(HISTSIZE)96 b Fu(The)37 b(maxim)m(um)g(n)m(um)m(b)s(er)e(of)j -(commands)f(to)g(remem)m(b)s(er)g(on)g(the)g(history)g(list.)62 -b(If)37 b(the)630 4752 y(v)-5 b(alue)26 b(is)g(0,)i(commands)d(are)h -(not)h(sa)m(v)m(ed)g(in)e(the)h(history)g(list.)40 b(Numeric)26 -b(v)-5 b(alues)26 b(less)g(than)630 4862 y(zero)i(result)e(in)h(ev)m +630 1445 y(b)s(e)d(sa)m(v)m(ed)i(on)f(the)g(history)g(list.)43 +b(If)30 b(a)h(command)g(line)g(matc)m(hes)h(one)f(of)g(the)g(patterns)g +(in)630 1555 y(the)38 b(v)-5 b(alue)38 b(of)f Ft(HISTIGNORE)p +Fu(,)g(it)h(is)g(not)f(sa)m(v)m(ed)i(on)e(the)h(history)f(list.)63 +b(Eac)m(h)38 b(pattern)g(is)630 1665 y(anc)m(hored)30 +b(at)h(the)f(b)s(eginning)g(of)g(the)g(line)h(and)e(m)m(ust)h(matc)m(h) +h(the)f(complete)i(line)e(\(Bash)630 1774 y(will)23 b(not)f(implicitly) +i(app)s(end)c(a)j(`)p Ft(*)p Fu('\).)38 b(Eac)m(h)23 +b(pattern)g(is)f(tested)h(against)h(the)e(line)h(after)g(the)630 +1884 y(c)m(hec)m(ks)36 b(sp)s(eci\014ed)f(b)m(y)g Ft(HISTCONTROL)d +Fu(are)j(applied.)54 b(In)35 b(addition)g(to)h(the)f(normal)g(shell)630 +1993 y(pattern)c(matc)m(hing)i(c)m(haracters,)g(`)p Ft(&)p +Fu(')e(matc)m(hes)i(the)e(previous)g(history)g(line.)43 +b(`)p Ft(&)p Fu(')32 b(ma)m(y)g(b)s(e)630 2103 y(escap)s(ed)24 +b(using)g(a)h(bac)m(kslash;)j(the)c(bac)m(kslash)h(is)g(remo)m(v)m(ed)g +(b)s(efore)f(attempting)i(a)f(matc)m(h.)630 2212 y(The)35 +b(second)h(and)f(subsequen)m(t)g(lines)h(of)g(a)h(m)m(ulti-line)g(comp) +s(ound)d(command)h(are)i(not)630 2322 y(tested,)27 b(and)e(are)h(added) +e(to)i(the)g(history)f(regardless)g(of)h(the)f(v)-5 b(alue)26 +b(of)f Ft(HISTIGNORE)p Fu(.)36 b(The)630 2432 y(pattern)30 +b(matc)m(hing)i(honors)e(the)g(setting)i(of)e(the)h Ft(extglob)d +Fu(shell)j(option.)630 2567 y Ft(HISTIGNORE)20 b Fu(subsumes)g(the)j +(function)f(of)h Ft(HISTCONTROL)p Fu(.)35 b(A)23 b(pattern)f(of)h(`)p +Ft(&)p Fu(')g(is)f(iden)m(tical)630 2676 y(to)k Ft(ignoredups)p +Fu(,)e(and)h(a)h(pattern)g(of)f(`)p Ft([)31 b(]*)p Fu(')25 +b(is)h(iden)m(tical)h(to)f Ft(ignorespace)p Fu(.)36 b(Com)m(bining)630 +2786 y(these)30 b(t)m(w)m(o)h(patterns,)f(separating)g(them)g(with)f(a) +h(colon,)h(pro)m(vides)e(the)h(functionalit)m(y)h(of)630 +2895 y Ft(ignoreboth)p Fu(.)150 3055 y Ft(HISTSIZE)96 +b Fu(The)37 b(maxim)m(um)g(n)m(um)m(b)s(er)e(of)j(commands)f(to)g +(remem)m(b)s(er)g(on)g(the)g(history)g(list.)62 b(If)37 +b(the)630 3165 y(v)-5 b(alue)26 b(is)g(0,)i(commands)d(are)h(not)h(sa)m +(v)m(ed)g(in)e(the)h(history)g(list.)40 b(Numeric)26 +b(v)-5 b(alues)26 b(less)g(than)630 3275 y(zero)i(result)e(in)h(ev)m (ery)g(command)g(b)s(eing)f(sa)m(v)m(ed)i(on)f(the)g(history)f(list)i -(\(there)f(is)g(no)g(limit\).)630 4971 y(The)j(shell)g(sets)h(the)g +(\(there)f(is)g(no)g(limit\).)630 3384 y(The)j(shell)g(sets)h(the)g (default)f(v)-5 b(alue)31 b(to)g(500)h(after)f(reading)f(an)m(y)h -(startup)f(\014les.)150 5121 y Ft(HISTTIMEFORMAT)630 -5230 y Fu(If)44 b(this)g(v)-5 b(ariable)45 b(is)f(set)g(and)g(not)g(n)m +(startup)f(\014les.)150 3544 y Ft(HISTTIMEFORMAT)630 +3654 y Fu(If)44 b(this)g(v)-5 b(ariable)45 b(is)f(set)g(and)g(not)g(n)m (ull,)k(its)d(v)-5 b(alue)44 b(is)g(used)g(as)g(a)h(format)f(string)g -(for)630 5340 y Ft(strftime)26 b Fu(to)k(prin)m(t)e(the)g(time)i(stamp) -e(asso)s(ciated)i(with)e(eac)m(h)i(history)f(en)m(try)f(displa)m(y)m -(ed)p eop end -%%Page: 86 92 -TeXDict begin 86 91 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(86)630 299 y(b)m(y)34 -b(the)f Ft(history)f Fu(builtin.)50 b(If)33 b(this)h(v)-5 -b(ariable)34 b(is)g(set,)h(time)f(stamps)g(are)g(written)f(to)i(the)630 -408 y(history)26 b(\014le)g(so)g(they)g(ma)m(y)h(b)s(e)e(preserv)m(ed)g -(across)i(shell)f(sessions.)39 b(This)25 b(uses)h(the)g(history)630 -518 y(commen)m(t)31 b(c)m(haracter)h(to)f(distinguish)f(timestamps)h -(from)f(other)g(history)h(lines.)150 687 y Ft(HOSTFILE)96 -b Fu(Con)m(tains)33 b(the)g(name)f(of)h(a)g(\014le)f(in)g(the)h(same)g -(format)g(as)f Ft(/etc/hosts)e Fu(that)j(should)f(b)s(e)630 -797 y(read)21 b(when)g(the)g(shell)h(needs)f(to)h(complete)h(a)e -(hostname.)38 b(The)21 b(list)h(of)g(p)s(ossible)f(hostname)630 -907 y(completions)27 b(ma)m(y)f(b)s(e)f(c)m(hanged)h(while)f(the)h -(shell)g(is)f(running;)h(the)g(next)f(time)i(hostname)630 -1016 y(completion)33 b(is)g(attempted)g(after)g(the)f(v)-5 -b(alue)33 b(is)f(c)m(hanged,)i(Bash)e(adds)f(the)i(con)m(ten)m(ts)h(of) -630 1126 y(the)h(new)f(\014le)g(to)h(the)g(existing)h(list.)53 +(for)630 3764 y Ft(strftime)p Fu(\(3\))37 b(to)i(prin)m(t)g(the)f(time) +h(stamp)f(asso)s(ciated)i(with)e(eac)m(h)i(history)e(en)m(try)h(dis-) +630 3873 y(pla)m(y)m(ed)34 b(b)m(y)e(the)h Ft(history)e +Fu(builtin.)47 b(If)32 b(this)h(v)-5 b(ariable)33 b(is)g(set,)h(time)f +(stamps)g(are)g(written)630 3983 y(to)d(the)f(history)g(\014le)h(so)f +(they)g(ma)m(y)h(b)s(e)f(preserv)m(ed)f(across)i(shell)f(sessions.)41 +b(This)28 b(uses)h(the)630 4092 y(history)h(commen)m(t)i(c)m(haracter)g +(to)f(distinguish)e(timestamps)i(from)f(other)h(history)f(lines.)150 +4253 y Ft(HOSTFILE)96 b Fu(Con)m(tains)33 b(the)g(name)f(of)h(a)g +(\014le)f(in)g(the)h(same)g(format)g(as)f Ft(/etc/hosts)e +Fu(that)j(should)f(b)s(e)630 4362 y(read)21 b(when)g(the)g(shell)h +(needs)f(to)h(complete)h(a)e(hostname.)38 b(The)21 b(list)h(of)g(p)s +(ossible)f(hostname)630 4472 y(completions)27 b(ma)m(y)f(b)s(e)f(c)m +(hanged)h(while)f(the)h(shell)g(is)f(running;)h(the)g(next)f(time)i +(hostname)630 4581 y(completion)33 b(is)g(attempted)g(after)g(the)f(v) +-5 b(alue)33 b(is)f(c)m(hanged,)i(Bash)e(adds)f(the)i(con)m(ten)m(ts)h +(of)630 4691 y(the)h(new)f(\014le)g(to)h(the)g(existing)h(list.)53 b(If)34 b Ft(HOSTFILE)e Fu(is)j(set,)h(but)e(has)g(no)h(v)-5 -b(alue,)36 b(or)e(do)s(es)630 1235 y(not)d(name)f(a)h(readable)g +b(alue,)36 b(or)e(do)s(es)630 4800 y(not)d(name)f(a)h(readable)g (\014le,)g(Bash)f(attempts)i(to)f(read)f Ft(/etc/hosts)e -Fu(to)j(obtain)g(the)f(list)630 1345 y(of)h(p)s(ossible)f(hostname)h +Fu(to)j(obtain)g(the)f(list)630 4910 y(of)h(p)s(ossible)f(hostname)h (completions.)43 b(When)31 b Ft(HOSTFILE)d Fu(is)j(unset,)f(the)h -(hostname)g(list)630 1455 y(is)f(cleared.)150 1624 y +(hostname)g(list)630 5020 y(is)f(cleared.)150 5180 y Ft(HOSTNAME)96 b Fu(The)30 b(name)g(of)h(the)f(curren)m(t)h(host.)150 -1793 y Ft(HOSTTYPE)96 b Fu(A)30 b(string)h(describing)f(the)g(mac)m -(hine)h(Bash)g(is)f(running)f(on.)150 1963 y Ft(IGNOREEOF)630 -2072 y Fu(Con)m(trols)e(the)h(action)g(of)f(the)g(shell)g(on)g(receipt) -h(of)f(an)g Ft(EOF)f Fu(c)m(haracter)i(as)g(the)f(sole)h(input.)630 -2182 y(If)i(set,)i(the)f(v)-5 b(alue)32 b(denotes)f(the)g(n)m(um)m(b)s -(er)f(of)h(consecutiv)m(e)i Ft(EOF)d Fu(c)m(haracters)i(that)f(can)h(b) -s(e)630 2291 y(read)40 b(as)f(the)h(\014rst)f(c)m(haracter)i(on)f(an)f -(input)g(line)h(b)s(efore)f(the)h(shell)g(will)g(exit.)70 -b(If)39 b(the)630 2401 y(v)-5 b(ariable)39 b(exists)f(but)g(do)s(es)f +5340 y Ft(HOSTTYPE)96 b Fu(A)30 b(string)h(describing)f(the)g(mac)m +(hine)h(Bash)g(is)f(running)f(on.)p eop end +%%Page: 90 96 +TeXDict begin 90 95 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(90)150 299 y Ft(IGNOREEOF)630 +408 y Fu(Con)m(trols)27 b(the)h(action)g(of)f(the)g(shell)g(on)g +(receipt)h(of)f(an)g Ft(EOF)f Fu(c)m(haracter)i(as)g(the)f(sole)h +(input.)630 518 y(If)i(set,)i(the)f(v)-5 b(alue)32 b(denotes)f(the)g(n) +m(um)m(b)s(er)f(of)h(consecutiv)m(e)i Ft(EOF)d Fu(c)m(haracters)i(that) +f(can)h(b)s(e)630 628 y(read)40 b(as)f(the)h(\014rst)f(c)m(haracter)i +(on)f(an)f(input)g(line)h(b)s(efore)f(the)h(shell)g(will)g(exit.)70 +b(If)39 b(the)630 737 y(v)-5 b(ariable)39 b(exists)f(but)g(do)s(es)f (not)h(ha)m(v)m(e)h(a)g(n)m(umeric)f(v)-5 b(alue,)40 -b(or)e(has)g(no)g(v)-5 b(alue,)40 b(then)e(the)630 2511 +b(or)e(has)g(no)g(v)-5 b(alue,)40 b(then)e(the)630 847 y(default)31 b(is)g(10.)43 b(If)30 b(the)h(v)-5 b(ariable)31 b(do)s(es)g(not)g(exist,)h(then)e Ft(EOF)g Fu(signi\014es)h(the)g(end)f -(of)h(input)630 2620 y(to)g(the)g(shell.)41 b(This)29 +(of)h(input)630 956 y(to)g(the)g(shell.)41 b(This)29 b(is)i(only)f(in)g(e\013ect)i(for)e(in)m(teractiv)m(e)j(shells.)150 -2790 y Ft(INPUTRC)144 b Fu(The)68 b(name)h(of)f(the)h(Readline)g +1108 y Ft(INPUTRC)144 b Fu(The)68 b(name)h(of)f(the)h(Readline)g (initialization)j(\014le,)78 b(o)m(v)m(erriding)69 b(the)g(default)g -(of)630 2899 y Ft(~/.inputrc)p Fu(.)150 3068 y Ft(INSIDE_EMACS)630 -3178 y Fu(If)29 b(Bash)h(\014nds)e(this)h(v)-5 b(ariable)31 +(of)630 1218 y Ft(~/.inputrc)p Fu(.)150 1369 y Ft(INSIDE_EMACS)630 +1479 y Fu(If)29 b(Bash)h(\014nds)e(this)h(v)-5 b(ariable)31 b(in)e(the)h(en)m(vironmen)m(t)g(when)e(the)i(shell)g(starts,)g(it)g -(assumes)630 3288 y(that)i(the)g(shell)g(is)f(running)f(in)i(an)f +(assumes)630 1589 y(that)i(the)g(shell)g(is)f(running)f(in)i(an)f (Emacs)h(shell)g(bu\013er)e(and)h(ma)m(y)i(disable)e(line)h(editing)630 -3397 y(dep)s(ending)d(on)h(the)h(v)-5 b(alue)31 b(of)f -Ft(TERM)p Fu(.)150 3567 y Ft(LANG)288 b Fu(Used)28 b(to)h(determine)f +1698 y(dep)s(ending)d(on)h(the)h(v)-5 b(alue)31 b(of)f +Ft(TERM)p Fu(.)150 1850 y Ft(LANG)288 b Fu(Used)28 b(to)h(determine)f (the)g(lo)s(cale)h(category)h(for)e(an)m(y)h(category)h(not)e(sp)s -(eci\014cally)g(selected)630 3676 y(with)i(a)h(v)-5 b(ariable)31 -b(starting)g(with)f Ft(LC_)p Fu(.)150 3846 y Ft(LC_ALL)192 +(eci\014cally)g(selected)630 1960 y(with)i(a)h(v)-5 b(ariable)31 +b(starting)g(with)f Ft(LC_)p Fu(.)150 2111 y Ft(LC_ALL)192 b Fu(This)28 b(v)-5 b(ariable)29 b(o)m(v)m(errides)h(the)f(v)-5 b(alue)29 b(of)g Ft(LANG)f Fu(and)g(an)m(y)h(other)g -Ft(LC_)f Fu(v)-5 b(ariable)29 b(sp)s(ecifying)630 3955 -y(a)i(lo)s(cale)h(category)-8 b(.)150 4125 y Ft(LC_COLLATE)630 -4234 y Fu(This)37 b(v)-5 b(ariable)38 b(determines)g(the)g(collation)i +Ft(LC_)f Fu(v)-5 b(ariable)29 b(sp)s(ecifying)630 2221 +y(a)i(lo)s(cale)h(category)-8 b(.)150 2373 y Ft(LC_COLLATE)630 +2482 y Fu(This)37 b(v)-5 b(ariable)38 b(determines)g(the)g(collation)i (order)d(used)g(when)f(sorting)i(the)g(results)g(of)630 -4344 y(\014lename)e(expansion,)i(and)e(determines)g(the)h(b)s(eha)m -(vior)f(of)g(range)h(expressions,)h(equiv-)630 4453 y(alence)e +2592 y(\014lename)e(expansion,)i(and)e(determines)g(the)h(b)s(eha)m +(vior)f(of)g(range)h(expressions,)h(equiv-)630 2701 y(alence)e (classes,)h(and)e(collating)i(sequences)e(within)f(\014lename)h -(expansion)g(and)f(pattern)630 4563 y(matc)m(hing)d(\(see)h(Section)f -(3.5.8)h([Filename)g(Expansion],)e(page)h(35\).)150 4732 +(expansion)g(and)f(pattern)630 2811 y(matc)m(hing)d(\(see)h(Section)f +(3.5.8)h([Filename)g(Expansion],)e(page)h(36\).)150 2963 y Ft(LC_CTYPE)96 b Fu(This)36 b(v)-5 b(ariable)37 b(determines)f(the)h (in)m(terpretation)h(of)f(c)m(haracters)h(and)e(the)g(b)s(eha)m(vior)h -(of)630 4842 y(c)m(haracter)46 b(classes)g(within)e(\014lename)h +(of)630 3072 y(c)m(haracter)46 b(classes)g(within)e(\014lename)h (expansion)g(and)f(pattern)h(matc)m(hing)h(\(see)f(Sec-)630 -4951 y(tion)31 b(3.5.8)h([Filename)g(Expansion],)e(page)h(35\).)150 -5121 y Ft(LC_MESSAGES)630 5230 y Fu(This)25 b(v)-5 b(ariable)27 +3182 y(tion)31 b(3.5.8)h([Filename)g(Expansion],)e(page)h(36\).)150 +3334 y Ft(LC_MESSAGES)630 3443 y Fu(This)25 b(v)-5 b(ariable)27 b(determines)f(the)g(lo)s(cale)i(used)d(to)i(translate)g(double-quoted) -f(strings)g(pre-)630 5340 y(ceded)31 b(b)m(y)f(a)h(`)p +f(strings)g(pre-)630 3553 y(ceded)31 b(b)m(y)f(a)h(`)p Ft($)p Fu(')f(\(see)h(Section)h(3.1.2.5)g([Lo)s(cale)g(T)-8 -b(ranslation],)32 b(page)f(7\).)p eop end -%%Page: 87 93 -TeXDict begin 87 92 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(87)150 299 y Ft(LC_NUMERIC)630 -408 y Fu(This)30 b(v)-5 b(ariable)31 b(determines)f(the)h(lo)s(cale)h +b(ranslation],)32 b(page)f(7\).)150 3705 y Ft(LC_NUMERIC)630 +3814 y Fu(This)f(v)-5 b(ariable)31 b(determines)f(the)h(lo)s(cale)h (category)g(used)e(for)g(n)m(um)m(b)s(er)f(formatting.)150 -573 y Ft(LC_TIME)144 b Fu(This)25 b(v)-5 b(ariable)26 +3966 y Ft(LC_TIME)144 b Fu(This)25 b(v)-5 b(ariable)26 b(determines)g(the)g(lo)s(cale)h(category)h(used)d(for)g(data)h(and)f -(time)i(formatting.)150 737 y Ft(LINENO)192 b Fu(The)32 +(time)i(formatting.)150 4118 y Ft(LINENO)192 b Fu(The)32 b(line)h(n)m(um)m(b)s(er)e(in)i(the)f(script)h(or)f(shell)h(function)f (curren)m(tly)h(executing.)49 b(If)32 b Ft(LINENO)630 -847 y Fu(is)e(unset,)h(it)g(loses)g(its)f(sp)s(ecial)h(prop)s(erties,)f -(ev)m(en)h(if)g(it)g(is)f(subsequen)m(tly)g(reset.)150 -1011 y Ft(LINES)240 b Fu(Used)43 b(b)m(y)g(the)g Ft(select)e +4227 y Fu(is)e(unset,)h(it)g(loses)g(its)f(sp)s(ecial)h(prop)s(erties,) +f(ev)m(en)h(if)g(it)g(is)f(subsequen)m(tly)g(reset.)150 +4379 y Ft(LINES)240 b Fu(Used)43 b(b)m(y)g(the)g Ft(select)e Fu(command)i(to)g(determine)g(the)g(column)g(length)g(for)g(prin)m -(ting)630 1121 y(selection)c(lists.)63 b(Automatically)41 +(ting)630 4489 y(selection)c(lists.)63 b(Automatically)41 b(set)d(if)f(the)h Ft(checkwinsize)d Fu(option)j(is)f(enabled)h(\(see) -630 1230 y(Section)44 b(4.3.2)h([The)e(Shopt)g(Builtin],)k(page)d -(71\),)k(or)43 b(in)g(an)g(in)m(teractiv)m(e)j(shell)e(up)s(on)630 -1340 y(receipt)31 b(of)g(a)g Ft(SIGWINCH)p Fu(.)150 1504 +630 4598 y(Section)44 b(4.3.2)h([The)e(Shopt)g(Builtin],)k(page)d +(73\),)k(or)43 b(in)g(an)g(in)m(teractiv)m(e)j(shell)e(up)s(on)630 +4708 y(receipt)31 b(of)g(a)g Ft(SIGWINCH)p Fu(.)150 4859 y Ft(MACHTYPE)96 b Fu(A)26 b(string)g(that)h(fully)f(describ)s(es)f (the)h(system)g(t)m(yp)s(e)h(on)f(whic)m(h)f(Bash)i(is)f(executing,)i -(in)e(the)630 1614 y(standard)k Fm(gnu)g Fr(cpu-compan)m(y-system)h -Fu(format.)150 1778 y Ft(MAILCHECK)630 1888 y Fu(Ho)m(w)d(often)g(\(in) +(in)e(the)630 4969 y(standard)k Fm(gnu)g Fr(cpu-compan)m(y-system)h +Fu(format.)150 5121 y Ft(MAILCHECK)630 5230 y Fu(Ho)m(w)d(often)g(\(in) g(seconds\))g(that)g(the)f(shell)h(should)f(c)m(hec)m(k)i(for)e(mail)h -(in)f(the)h(\014les)g(sp)s(eci\014ed)630 1998 y(in)i(the)h +(in)f(the)h(\014les)g(sp)s(eci\014ed)630 5340 y(in)i(the)h Ft(MAILPATH)e Fu(or)i Ft(MAIL)e Fu(v)-5 b(ariables.)43 b(The)30 b(default)h(is)f(60)i(seconds.)42 b(When)30 -b(it)h(is)g(time)630 2107 y(to)37 b(c)m(hec)m(k)h(for)e(mail,)j(the)e -(shell)f(do)s(es)g(so)h(b)s(efore)f(displa)m(ying)h(the)f(primary)g -(prompt.)57 b(If)630 2217 y(this)37 b(v)-5 b(ariable)38 -b(is)f(unset,)h(or)f(set)h(to)g(a)f(v)-5 b(alue)38 b(that)f(is)g(not)h -(a)f(n)m(um)m(b)s(er)f(greater)i(than)f(or)630 2326 y(equal)31 -b(to)g(zero,)g(the)g(shell)g(disables)f(mail)h(c)m(hec)m(king.)150 -2491 y Ft(MAPFILE)144 b Fu(An)35 b(arra)m(y)h(v)-5 b(ariable)36 -b(created)g(to)h(hold)e(the)g(text)i(read)e(b)m(y)g(the)h -Ft(mapfile)d Fu(builtin)i(when)630 2600 y(no)30 b(v)-5 -b(ariable)31 b(name)g(is)f(supplied.)150 2765 y Ft(OLDPWD)192 -b Fu(The)30 b(previous)g(w)m(orking)g(directory)h(as)g(set)g(b)m(y)f -(the)h Ft(cd)e Fu(builtin.)150 2929 y Ft(OPTERR)192 b -Fu(If)35 b(set)i(to)f(the)h(v)-5 b(alue)36 b(1,)i(Bash)e(displa)m(ys)g -(error)f(messages)i(generated)g(b)m(y)f(the)g Ft(getopts)630 -3039 y Fu(builtin)30 b(command.)150 3203 y Ft(OSTYPE)192 -b Fu(A)30 b(string)h(describing)f(the)g(op)s(erating)h(system)g(Bash)f -(is)h(running)d(on.)150 3367 y Ft(PIPESTATUS)630 3477 -y Fu(An)48 b(arra)m(y)g(v)-5 b(ariable)49 b(\(see)g(Section)g(6.7)g -([Arra)m(ys],)k(page)c(100\))g(con)m(taining)h(a)e(list)h(of)630 -3587 y(exit)32 b(status)f(v)-5 b(alues)31 b(from)f(the)h(pro)s(cesses)g -(in)g(the)g(most-recen)m(tly-executed)j(foreground)630 -3696 y(pip)s(eline)c(\(whic)m(h)g(ma)m(y)h(con)m(tain)h(only)f(a)f -(single)h(command\).)150 3861 y Ft(POSIXLY_CORRECT)630 -3970 y Fu(If)h(this)g(v)-5 b(ariable)34 b(is)e(in)g(the)h(en)m -(vironmen)m(t)g(when)e(Bash)i(starts,)g(the)g(shell)g(en)m(ters)g -Fm(posix)630 4080 y Fu(mo)s(de)46 b(\(see)h(Section)g(6.11)g([Bash)g -(POSIX)e(Mo)s(de],)50 b(page)d(106\))h(b)s(efore)e(reading)g(the)630 -4189 y(startup)38 b(\014les,)j(as)e(if)g(the)g Ft(--posix)d -Fu(in)m(v)m(o)s(cation)41 b(option)e(had)f(b)s(een)g(supplied.)64 -b(If)39 b(it)g(is)630 4299 y(set)31 b(while)f(the)h(shell)f(is)h -(running,)e(Bash)h(enables)h Fm(posix)f Fu(mo)s(de,)g(as)g(if)h(the)f -(command)870 4436 y Ft(set)47 b(-o)g(posix)630 4573 y -Fu(had)33 b(b)s(een)g(executed.)51 b(When)33 b(the)h(shell)f(en)m(ters) -h Fm(posix)f Fu(mo)s(de,)h(it)g(sets)g(this)g(v)-5 b(ariable)34 -b(if)630 4682 y(it)d(w)m(as)g(not)f(already)h(set.)150 -4847 y Ft(PPID)288 b Fu(The)30 b(pro)s(cess)g Fm(id)g -Fu(of)h(the)f(shell's)h(paren)m(t)g(pro)s(cess.)40 b(This)30 -b(v)-5 b(ariable)31 b(is)f(readonly)-8 b(.)150 5011 y -Ft(PROMPT_COMMAND)630 5121 y Fu(If)23 b(this)h(v)-5 b(ariable)24 -b(is)g(set,)i(and)d(is)h(an)f(arra)m(y)-8 b(,)27 b(the)d(v)-5 -b(alue)24 b(of)g(eac)m(h)g(set)h(elemen)m(t)g(is)f(in)m(terpreted)630 -5230 y(as)29 b(a)g(command)f(to)i(execute)g(b)s(efore)e(prin)m(ting)h -(the)g(primary)f(prompt)f(\()p Ft($PS1)p Fu(\).)40 b(If)28 -b(this)h(is)630 5340 y(set)c(but)f(not)g(an)h(arra)m(y)g(v)-5 -b(ariable,)26 b(its)f(v)-5 b(alue)25 b(is)f(used)g(as)h(a)f(command)g -(to)i(execute)f(instead.)p eop end -%%Page: 88 94 -TeXDict begin 88 93 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(88)150 299 y Ft(PROMPT_DIRTRIM)630 -408 y Fu(If)27 b(set)g(to)h(a)g(n)m(um)m(b)s(er)e(greater)i(than)f -(zero,)i(the)e(v)-5 b(alue)28 b(is)f(used)g(as)g(the)h(n)m(um)m(b)s(er) -e(of)h(trailing)630 518 y(directory)c(comp)s(onen)m(ts)h(to)f(retain)h -(when)e(expanding)g(the)h Ft(\\w)g Fu(and)f Ft(\\W)g -Fu(prompt)h(string)f(es-)630 628 y(cap)s(es)i(\(see)h(Section)g(6.9)g -([Con)m(trolling)g(the)f(Prompt],)i(page)e(104\).)41 -b(Characters)24 b(remo)m(v)m(ed)630 737 y(are)31 b(replaced)g(with)f -(an)g(ellipsis.)150 892 y Ft(PS0)336 b Fu(The)32 b(v)-5 +b(it)h(is)g(time)p eop end +%%Page: 91 97 +TeXDict begin 91 96 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(91)630 299 y(to)37 +b(c)m(hec)m(k)h(for)e(mail,)j(the)e(shell)f(do)s(es)g(so)h(b)s(efore)f +(displa)m(ying)h(the)f(primary)g(prompt.)57 b(If)630 +408 y(this)37 b(v)-5 b(ariable)38 b(is)f(unset,)h(or)f(set)h(to)g(a)f +(v)-5 b(alue)38 b(that)f(is)g(not)h(a)f(n)m(um)m(b)s(er)f(greater)i +(than)f(or)630 518 y(equal)31 b(to)g(zero,)g(the)g(shell)g(disables)f +(mail)h(c)m(hec)m(king.)150 675 y Ft(MAPFILE)144 b Fu(An)35 +b(arra)m(y)h(v)-5 b(ariable)36 b(created)g(to)h(hold)e(the)g(text)i +(read)e(b)m(y)g(the)h Ft(mapfile)d Fu(builtin)i(when)630 +784 y(no)30 b(v)-5 b(ariable)31 b(name)g(is)f(supplied.)150 +941 y Ft(OLDPWD)192 b Fu(The)30 b(previous)g(w)m(orking)g(directory)h +(as)g(set)g(b)m(y)f(the)h Ft(cd)e Fu(builtin.)150 1097 +y Ft(OPTERR)192 b Fu(If)35 b(set)i(to)f(the)h(v)-5 b(alue)36 +b(1,)i(Bash)e(displa)m(ys)g(error)f(messages)i(generated)g(b)m(y)f(the) +g Ft(getopts)630 1207 y Fu(builtin)30 b(command.)150 +1363 y Ft(OSTYPE)192 b Fu(A)30 b(string)h(describing)f(the)g(op)s +(erating)h(system)g(Bash)f(is)h(running)d(on.)150 1520 +y Ft(PIPESTATUS)630 1630 y Fu(An)48 b(arra)m(y)g(v)-5 +b(ariable)49 b(\(see)g(Section)g(6.7)g([Arra)m(ys],)k(page)c(103\))g +(con)m(taining)h(a)e(list)h(of)630 1739 y(exit)32 b(status)f(v)-5 +b(alues)31 b(from)f(the)h(pro)s(cesses)g(in)g(the)g(most-recen)m +(tly-executed)j(foreground)630 1849 y(pip)s(eline)c(\(whic)m(h)g(ma)m +(y)h(con)m(tain)h(only)f(a)f(single)h(command\).)150 +2005 y Ft(POSIXLY_CORRECT)630 2115 y Fu(If)h(this)g(v)-5 +b(ariable)34 b(is)e(in)g(the)h(en)m(vironmen)m(t)g(when)e(Bash)i +(starts,)g(the)g(shell)g(en)m(ters)g Fm(posix)630 2225 +y Fu(mo)s(de)46 b(\(see)h(Section)g(6.11)g([Bash)g(POSIX)e(Mo)s(de],)50 +b(page)d(109\))h(b)s(efore)e(reading)g(the)630 2334 y(startup)38 +b(\014les,)j(as)e(if)g(the)g Ft(--posix)d Fu(in)m(v)m(o)s(cation)41 +b(option)e(had)f(b)s(een)g(supplied.)64 b(If)39 b(it)g(is)630 +2444 y(set)31 b(while)f(the)h(shell)f(is)h(running,)e(Bash)h(enables)h +Fm(posix)f Fu(mo)s(de,)g(as)g(if)h(the)f(command)870 +2577 y Ft(set)47 b(-o)g(posix)630 2710 y Fu(had)33 b(b)s(een)g +(executed.)51 b(When)33 b(the)h(shell)f(en)m(ters)h Fm(posix)f +Fu(mo)s(de,)h(it)g(sets)g(this)g(v)-5 b(ariable)34 b(if)630 +2819 y(it)d(w)m(as)g(not)f(already)h(set.)150 2976 y +Ft(PPID)288 b Fu(The)30 b(pro)s(cess)g Fm(id)g Fu(of)h(the)f(shell's)h +(paren)m(t)g(pro)s(cess.)40 b(This)30 b(v)-5 b(ariable)31 +b(is)f(readonly)-8 b(.)150 3133 y Ft(PROMPT_COMMAND)630 +3242 y Fu(If)23 b(this)h(v)-5 b(ariable)24 b(is)g(set,)i(and)d(is)h(an) +f(arra)m(y)-8 b(,)27 b(the)d(v)-5 b(alue)24 b(of)g(eac)m(h)g(set)h +(elemen)m(t)g(is)f(in)m(terpreted)630 3352 y(as)29 b(a)g(command)f(to)i +(execute)g(b)s(efore)e(prin)m(ting)h(the)g(primary)f(prompt)f(\()p +Ft($PS1)p Fu(\).)40 b(If)28 b(this)h(is)630 3461 y(set)c(but)f(not)g +(an)h(arra)m(y)g(v)-5 b(ariable,)26 b(its)f(v)-5 b(alue)25 +b(is)f(used)g(as)h(a)f(command)g(to)i(execute)f(instead.)150 +3618 y Ft(PROMPT_DIRTRIM)630 3727 y Fu(If)i(set)g(to)h(a)g(n)m(um)m(b)s +(er)e(greater)i(than)f(zero,)i(the)e(v)-5 b(alue)28 b(is)f(used)g(as)g +(the)h(n)m(um)m(b)s(er)e(of)h(trailing)630 3837 y(directory)c(comp)s +(onen)m(ts)h(to)f(retain)h(when)e(expanding)g(the)h Ft(\\w)g +Fu(and)f Ft(\\W)g Fu(prompt)h(string)f(es-)630 3947 y(cap)s(es)i(\(see) +h(Section)g(6.9)g([Con)m(trolling)g(the)f(Prompt],)i(page)e(107\).)41 +b(Characters)24 b(remo)m(v)m(ed)630 4056 y(are)31 b(replaced)g(with)f +(an)g(ellipsis.)150 4213 y Ft(PS0)336 b Fu(The)32 b(v)-5 b(alue)33 b(of)g(this)g(parameter)g(is)g(expanded)e(lik)m(e)j Ft(PS1)e Fu(and)g(displa)m(y)m(ed)i(b)m(y)e(in)m(teractiv)m(e)630 -1002 y(shells)e(after)h(reading)g(a)g(command)f(and)f(b)s(efore)h(the)h -(command)f(is)h(executed.)150 1157 y Ft(PS3)336 b Fu(The)34 +4322 y(shells)e(after)h(reading)g(a)g(command)f(and)f(b)s(efore)h(the)h +(command)f(is)h(executed.)150 4479 y Ft(PS3)336 b Fu(The)34 b(v)-5 b(alue)35 b(of)f(this)g(v)-5 b(ariable)35 b(is)g(used)e(as)i (the)f(prompt)g(for)g(the)g Ft(select)f Fu(command.)52 -b(If)630 1267 y(this)30 b(v)-5 b(ariable)31 b(is)g(not)f(set,)i(the)e +b(If)630 4589 y(this)30 b(v)-5 b(ariable)31 b(is)g(not)f(set,)i(the)e Ft(select)f Fu(command)h(prompts)f(with)h(`)p Ft(#?)g -Fu(')150 1422 y Ft(PS4)336 b Fu(The)38 b(v)-5 b(alue)39 +Fu(')150 4745 y Ft(PS4)336 b Fu(The)38 b(v)-5 b(alue)39 b(of)g(this)g(parameter)g(is)g(expanded)f(lik)m(e)i Ft(PS1)e -Fu(and)g(the)h(expanded)f(v)-5 b(alue)39 b(is)630 1532 +Fu(and)g(the)h(expanded)f(v)-5 b(alue)39 b(is)630 4855 y(the)c(prompt)f(prin)m(ted)g(b)s(efore)g(the)h(command)f(line)h(is)g (ec)m(ho)s(ed)g(when)f(the)h Ft(-x)f Fu(option)h(is)630 -1641 y(set)k(\(see)h(Section)g(4.3.1)g([The)f(Set)g(Builtin],)j(page)e -(67\).)67 b(The)38 b(\014rst)g(c)m(haracter)j(of)e(the)630 -1751 y(expanded)33 b(v)-5 b(alue)33 b(is)h(replicated)g(m)m(ultiple)g +4964 y(set)k(\(see)h(Section)g(4.3.1)g([The)f(Set)g(Builtin],)j(page)e +(69\).)67 b(The)38 b(\014rst)g(c)m(haracter)j(of)e(the)630 +5074 y(expanded)33 b(v)-5 b(alue)33 b(is)h(replicated)g(m)m(ultiple)g (times,)h(as)f(necessary)-8 b(,)35 b(to)f(indicate)g(m)m(ultiple)630 -1861 y(lev)m(els)e(of)e(indirection.)42 b(The)29 b(default)i(is)f(`)p -Ft(+)h Fu('.)150 2016 y Ft(PWD)336 b Fu(The)30 b(curren)m(t)g(w)m +5183 y(lev)m(els)e(of)e(indirection.)42 b(The)29 b(default)i(is)f(`)p +Ft(+)h Fu('.)150 5340 y Ft(PWD)336 b Fu(The)30 b(curren)m(t)g(w)m (orking)h(directory)g(as)f(set)h(b)m(y)f(the)h Ft(cd)f -Fu(builtin.)150 2171 y Ft(RANDOM)192 b Fu(Eac)m(h)26 -b(time)g(this)f(parameter)h(is)g(referenced,)g(it)g(expands)f(to)h(a)g -(random)e(in)m(teger)j(b)s(et)m(w)m(een)630 2281 y(0)e(and)e(32767.)41 -b(Assigning)25 b(a)f(v)-5 b(alue)25 b(to)g(this)f(v)-5 -b(ariable)25 b(seeds)f(the)h(random)e(n)m(um)m(b)s(er)g(gener-)630 -2390 y(ator.)41 b(If)27 b Ft(RANDOM)f Fu(is)h(unset,)h(it)g(loses)h -(its)f(sp)s(ecial)g(prop)s(erties,)g(ev)m(en)g(if)g(it)g(is)f -(subsequen)m(tly)630 2500 y(reset.)150 2655 y Ft(READLINE_ARGUMENT)630 -2765 y Fu(An)m(y)37 b(n)m(umeric)f(argumen)m(t)h(giv)m(en)g(to)g(a)g -(Readline)g(command)f(that)h(w)m(as)g(de\014ned)e(using)630 -2874 y(`)p Ft(bind)29 b(-x)p Fu(')h(\(see)i(Section)f(4.2)g([Bash)g -(Builtins],)g(page)h(55,)f(when)e(it)i(w)m(as)g(in)m(v)m(ok)m(ed.)150 -3029 y Ft(READLINE_LINE)630 3139 y Fu(The)c(con)m(ten)m(ts)i(of)f(the)g -(Readline)g(line)g(bu\013er,)f(for)h(use)f(with)g(`)p -Ft(bind)j(-x)p Fu(')d(\(see)h(Section)h(4.2)630 3249 -y([Bash)i(Builtins],)g(page)g(55\).)150 3404 y Ft(READLINE_MARK)630 -3513 y Fu(The)26 b(p)s(osition)h(of)g(the)g Fr(mark)32 +Fu(builtin.)p eop end +%%Page: 92 98 +TeXDict begin 92 97 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(92)150 299 y Ft(RANDOM)192 +b Fu(Eac)m(h)26 b(time)g(this)f(parameter)h(is)g(referenced,)g(it)g +(expands)f(to)h(a)g(random)e(in)m(teger)j(b)s(et)m(w)m(een)630 +408 y(0)e(and)e(32767.)41 b(Assigning)25 b(a)f(v)-5 b(alue)25 +b(to)g(this)f(v)-5 b(ariable)25 b(seeds)f(the)h(random)e(n)m(um)m(b)s +(er)g(gener-)630 518 y(ator.)41 b(If)27 b Ft(RANDOM)f +Fu(is)h(unset,)h(it)g(loses)h(its)f(sp)s(ecial)g(prop)s(erties,)g(ev)m +(en)g(if)g(it)g(is)f(subsequen)m(tly)630 628 y(reset.)150 +792 y Ft(READLINE_ARGUMENT)630 902 y Fu(An)m(y)37 b(n)m(umeric)f +(argumen)m(t)h(giv)m(en)g(to)g(a)g(Readline)g(command)f(that)h(w)m(as)g +(de\014ned)e(using)630 1011 y(`)p Ft(bind)29 b(-x)p Fu(')h(\(see)i +(Section)f(4.2)g([Bash)g(Builtins],)g(page)h(57,)f(when)e(it)i(w)m(as)g +(in)m(v)m(ok)m(ed.)150 1176 y Ft(READLINE_LINE)630 1285 +y Fu(The)c(con)m(ten)m(ts)i(of)f(the)g(Readline)g(line)g(bu\013er,)f +(for)h(use)f(with)g(`)p Ft(bind)j(-x)p Fu(')d(\(see)h(Section)h(4.2)630 +1395 y([Bash)i(Builtins],)g(page)g(57\).)150 1559 y Ft(READLINE_MARK) +630 1669 y Fu(The)26 b(p)s(osition)h(of)g(the)g Fr(mark)32 b Fu(\(sa)m(v)m(ed)c(insertion)f(p)s(oin)m(t\))g(in)g(the)g(Readline)g -(line)g(bu\013er,)g(for)630 3623 y(use)36 b(with)f(`)p +(line)g(bu\013er,)g(for)630 1778 y(use)36 b(with)f(`)p Ft(bind)30 b(-x)p Fu(')35 b(\(see)i(Section)g(4.2)g([Bash)f(Builtins],) -i(page)f(55\).)58 b(The)35 b(c)m(haracters)630 3733 y(b)s(et)m(w)m(een) +i(page)f(57\).)58 b(The)35 b(c)m(haracters)630 1888 y(b)s(et)m(w)m(een) c(the)g(insertion)f(p)s(oin)m(t)g(and)g(the)h(mark)f(are)h(often)f -(called)i(the)f Fr(region)p Fu(.)150 3888 y Ft(READLINE_POINT)630 -3998 y Fu(The)23 b(p)s(osition)g(of)g(the)h(insertion)f(p)s(oin)m(t)g +(called)i(the)f Fr(region)p Fu(.)150 2052 y Ft(READLINE_POINT)630 +2162 y Fu(The)23 b(p)s(osition)g(of)g(the)h(insertion)f(p)s(oin)m(t)g (in)g(the)g(Readline)h(line)f(bu\013er,)h(for)f(use)g(with)g(`)p -Ft(bind)630 4107 y(-x)p Fu(')30 b(\(see)h(Section)h(4.2)f([Bash)g -(Builtins],)g(page)g(55\).)150 4262 y Ft(REPLY)240 b +Ft(bind)630 2271 y(-x)p Fu(')30 b(\(see)h(Section)h(4.2)f([Bash)g +(Builtins],)g(page)g(57\).)150 2436 y Ft(REPLY)240 b Fu(The)30 b(default)g(v)-5 b(ariable)32 b(for)e(the)g -Ft(read)g Fu(builtin.)150 4418 y Ft(SECONDS)144 b Fu(This)40 +Ft(read)g Fu(builtin.)150 2600 y Ft(SECONDS)144 b Fu(This)40 b(v)-5 b(ariable)41 b(expands)f(to)h(the)g(n)m(um)m(b)s(er)e(of)i (seconds)g(since)g(the)f(shell)h(w)m(as)g(started.)630 -4527 y(Assignmen)m(t)i(to)g(this)g(v)-5 b(ariable)43 +2710 y(Assignmen)m(t)i(to)g(this)g(v)-5 b(ariable)43 b(resets)g(the)g(coun)m(t)g(to)g(the)g(v)-5 b(alue)43 -b(assigned,)j(and)c(the)630 4637 y(expanded)35 b(v)-5 +b(assigned,)j(and)c(the)630 2819 y(expanded)35 b(v)-5 b(alue)36 b(b)s(ecomes)h(the)f(v)-5 b(alue)36 b(assigned)g(plus)f(the)h -(n)m(um)m(b)s(er)f(of)h(seconds)g(since)630 4746 y(the)41 +(n)m(um)m(b)s(er)f(of)h(seconds)g(since)630 2929 y(the)41 b(assignmen)m(t.)72 b(The)40 b(n)m(um)m(b)s(er)f(of)i(seconds)f(at)h (shell)g(in)m(v)m(o)s(cation)i(and)c(the)i(curren)m(t)630 -4856 y(time)30 b(are)g(alw)m(a)m(ys)g(determined)f(b)m(y)g(querying)g +3039 y(time)30 b(are)g(alw)m(a)m(ys)g(determined)f(b)m(y)g(querying)g (the)h(system)f(clo)s(c)m(k.)42 b(If)29 b Ft(SECONDS)e -Fu(is)i(unset,)630 4966 y(it)i(loses)g(its)g(sp)s(ecial)g(prop)s +Fu(is)i(unset,)630 3148 y(it)i(loses)g(its)g(sp)s(ecial)g(prop)s (erties,)f(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)e(reset.)150 -5121 y Ft(SHELL)240 b Fu(This)24 b(en)m(vironmen)m(t)i(v)-5 +3313 y Ft(SHELL)240 b Fu(This)24 b(en)m(vironmen)m(t)i(v)-5 b(ariable)26 b(expands)e(to)i(the)g(full)f(pathname)g(to)h(the)f -(shell.)39 b(If)25 b(it)g(is)h(not)630 5230 y(set)36 +(shell.)39 b(If)25 b(it)g(is)h(not)630 3422 y(set)36 b(when)f(the)h(shell)g(starts,)i(Bash)e(assigns)h(to)f(it)h(the)f(full) -f(pathname)h(of)g(the)g(curren)m(t)630 5340 y(user's)30 -b(login)h(shell.)p eop end -%%Page: 89 95 -TeXDict begin 89 94 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(89)150 299 y Ft(SHELLOPTS)630 -408 y Fu(A)31 b(colon-separated)h(list)f(of)g(enabled)f(shell)h -(options.)41 b(Eac)m(h)31 b(w)m(ord)f(in)g(the)h(list)g(is)g(a)g(v)-5 -b(alid)630 518 y(argumen)m(t)28 b(for)f(the)h Ft(-o)e +f(pathname)h(of)g(the)g(curren)m(t)630 3532 y(user's)30 +b(login)h(shell.)150 3696 y Ft(SHELLOPTS)630 3806 y Fu(A)g +(colon-separated)h(list)f(of)g(enabled)f(shell)h(options.)41 +b(Eac)m(h)31 b(w)m(ord)f(in)g(the)h(list)g(is)g(a)g(v)-5 +b(alid)630 3915 y(argumen)m(t)28 b(for)f(the)h Ft(-o)e Fu(option)i(to)g(the)g Ft(set)e Fu(builtin)h(command)g(\(see)i(Section) -f(4.3.1)h([The)630 628 y(Set)g(Builtin],)h(page)f(67\).)42 +f(4.3.1)h([The)630 4025 y(Set)g(Builtin],)h(page)f(69\).)42 b(The)28 b(options)h(app)s(earing)f(in)g Ft(SHELLOPTS)e -Fu(are)j(those)h(rep)s(orted)630 737 y(as)g(`)p Ft(on)p +Fu(are)j(those)h(rep)s(orted)630 4134 y(as)g(`)p Ft(on)p Fu(')f(b)m(y)h(`)p Ft(set)g(-o)p Fu('.)40 b(If)29 b(this)h(v)-5 b(ariable)30 b(is)g(in)f(the)h(en)m(vironmen)m(t)g(when)f(Bash)h -(starts)g(up,)630 847 y(eac)m(h)41 b(shell)e(option)h(in)f(the)h(list)g -(will)f(b)s(e)g(enabled)h(b)s(efore)f(reading)g(an)m(y)h(startup)f -(\014les.)630 956 y(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8 -b(.)150 1121 y Ft(SHLVL)240 b Fu(Incremen)m(ted)21 b(b)m(y)g(one)g(eac) +(starts)g(up,)630 4244 y(eac)m(h)41 b(shell)e(option)h(in)f(the)h(list) +g(will)f(b)s(e)g(enabled)h(b)s(efore)f(reading)g(an)m(y)h(startup)f +(\014les.)630 4354 y(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8 +b(.)150 4518 y Ft(SHLVL)240 b Fu(Incremen)m(ted)21 b(b)m(y)g(one)g(eac) m(h)h(time)f(a)h(new)e(instance)h(of)g(Bash)g(is)g(started.)38 -b(This)20 b(is)h(in)m(tended)630 1230 y(to)31 b(b)s(e)f(a)h(coun)m(t)g +b(This)20 b(is)h(in)m(tended)630 4628 y(to)31 b(b)s(e)f(a)h(coun)m(t)g (of)f(ho)m(w)h(deeply)f(y)m(our)g(Bash)h(shells)f(are)h(nested.)150 -1395 y Ft(SRANDOM)144 b Fu(This)36 b(v)-5 b(ariable)37 +4792 y Ft(SRANDOM)144 b Fu(This)36 b(v)-5 b(ariable)37 b(expands)f(to)h(a)g(32-bit)h(pseudo-random)d(n)m(um)m(b)s(er)g(eac)m -(h)j(time)f(it)g(is)g(ref-)630 1504 y(erenced.)47 b(The)32 +(h)j(time)f(it)g(is)g(ref-)630 4902 y(erenced.)47 b(The)32 b(random)g(n)m(um)m(b)s(er)f(generator)j(is)e(not)h(linear)g(on)f -(systems)h(that)g(supp)s(ort)630 1614 y Ft(/dev/urandom)26 +(systems)h(that)g(supp)s(ort)630 5011 y Ft(/dev/urandom)26 b Fu(or)k Ft(arc4random)p Fu(,)d(so)j(eac)m(h)g(returned)f(n)m(um)m(b)s -(er)f(has)h(no)g(relationship)h(to)630 1724 y(the)39 +(er)f(has)h(no)g(relationship)h(to)630 5121 y(the)39 b(n)m(um)m(b)s(ers)e(preceding)i(it.)66 b(The)38 b(random)g(n)m(um)m(b) -s(er)f(generator)j(cannot)g(b)s(e)e(seeded,)630 1833 +s(er)f(generator)j(cannot)g(b)s(e)e(seeded,)630 5230 y(so)c(assignmen)m(ts)g(to)g(this)f(v)-5 b(ariable)34 b(ha)m(v)m(e)h(no)e(e\013ect.)51 b(If)33 b Ft(SRANDOM)e -Fu(is)j(unset,)g(it)f(loses)i(its)630 1943 y(sp)s(ecial)c(prop)s -(erties,)f(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f(reset.)150 -2107 y Ft(TIMEFORMAT)630 2217 y Fu(The)g(v)-5 b(alue)32 -b(of)f(this)g(parameter)g(is)g(used)f(as)h(a)g(format)h(string)f(sp)s -(ecifying)f(ho)m(w)h(the)g(tim-)630 2326 y(ing)37 b(information)f(for)h -(pip)s(elines)f(pre\014xed)f(with)h(the)h Ft(time)e Fu(reserv)m(ed)i(w) -m(ord)f(should)g(b)s(e)630 2436 y(displa)m(y)m(ed.)k(The)27 -b(`)p Ft(\045)p Fu(')h(c)m(haracter)h(in)m(tro)s(duces)e(an)h(escap)s -(e)g(sequence)g(that)g(is)f(expanded)g(to)630 2545 y(a)37 -b(time)g(v)-5 b(alue)36 b(or)h(other)f(information.)59 -b(The)36 b(escap)s(e)g(sequences)h(and)e(their)i(meanings)630 -2655 y(are)31 b(as)f(follo)m(ws;)i(the)f(braces)f(denote)h(optional)h -(p)s(ortions.)630 2819 y Ft(\045\045)384 b Fu(A)30 b(literal)i(`)p -Ft(\045)p Fu('.)630 2984 y Ft(\045[)p Fj(p)p Ft(][l]R)96 -b Fu(The)30 b(elapsed)h(time)g(in)f(seconds.)630 3148 -y Ft(\045[)p Fj(p)p Ft(][l]U)96 b Fu(The)30 b(n)m(um)m(b)s(er)f(of)h -(CPU)g(seconds)h(sp)s(en)m(t)f(in)g(user)f(mo)s(de.)630 -3313 y Ft(\045[)p Fj(p)p Ft(][l]S)96 b Fu(The)30 b(n)m(um)m(b)s(er)f +Fu(is)j(unset,)g(it)f(loses)i(its)630 5340 y(sp)s(ecial)c(prop)s +(erties,)f(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f(reset.)p +eop end +%%Page: 93 99 +TeXDict begin 93 98 bop 150 -116 a Fu(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(93)150 299 y Ft(TIMEFORMAT)630 +408 y Fu(The)30 b(v)-5 b(alue)32 b(of)f(this)g(parameter)g(is)g(used)f +(as)h(a)g(format)h(string)f(sp)s(ecifying)f(ho)m(w)h(the)g(tim-)630 +518 y(ing)37 b(information)f(for)h(pip)s(elines)f(pre\014xed)f(with)h +(the)h Ft(time)e Fu(reserv)m(ed)i(w)m(ord)f(should)g(b)s(e)630 +628 y(displa)m(y)m(ed.)k(The)27 b(`)p Ft(\045)p Fu(')h(c)m(haracter)h +(in)m(tro)s(duces)e(an)h(escap)s(e)g(sequence)g(that)g(is)f(expanded)g +(to)630 737 y(a)37 b(time)g(v)-5 b(alue)36 b(or)h(other)f(information.) +59 b(The)36 b(escap)s(e)g(sequences)h(and)e(their)i(meanings)630 +847 y(are)31 b(as)f(follo)m(ws;)i(the)f(brac)m(k)m(ets)h(denote)e +(optional)i(p)s(ortions.)630 1006 y Ft(\045\045)384 b +Fu(A)30 b(literal)i(`)p Ft(\045)p Fu('.)630 1166 y Ft(\045[)p +Fj(p)p Ft(][l]R)96 b Fu(The)30 b(elapsed)h(time)g(in)f(seconds.)630 +1325 y Ft(\045[)p Fj(p)p Ft(][l]U)96 b Fu(The)30 b(n)m(um)m(b)s(er)f +(of)h(CPU)g(seconds)h(sp)s(en)m(t)f(in)g(user)f(mo)s(de.)630 +1484 y Ft(\045[)p Fj(p)p Ft(][l]S)96 b Fu(The)30 b(n)m(um)m(b)s(er)f (of)h(CPU)g(seconds)h(sp)s(en)m(t)f(in)g(system)g(mo)s(de.)630 -3477 y Ft(\045P)384 b Fu(The)30 b(CPU)g(p)s(ercen)m(tage,)i(computed)e -(as)h(\(\045U)f Ft(+)g Fu(\045S\))g(/)h(\045R.)630 3641 +1644 y Ft(\045P)384 b Fu(The)30 b(CPU)g(p)s(ercen)m(tage,)i(computed)e +(as)h(\(\045U)f Ft(+)g Fu(\045S\))g(/)h(\045R.)630 1803 y(The)23 b(optional)j Fr(p)g Fu(is)e(a)g(digit)h(sp)s(ecifying)e(the)h (precision,)i(the)e(n)m(um)m(b)s(er)f(of)h(fractional)h(digits)630 -3751 y(after)36 b(a)f(decimal)i(p)s(oin)m(t.)55 b(A)35 +1913 y(after)36 b(a)f(decimal)i(p)s(oin)m(t.)55 b(A)35 b(v)-5 b(alue)36 b(of)f(0)h(causes)g(no)f(decimal)h(p)s(oin)m(t)f(or)h -(fraction)g(to)g(b)s(e)630 3861 y(output.)48 b(A)m(t)34 -b(most)f(three)g(places)h(after)f(the)g(decimal)h(p)s(oin)m(t)f(ma)m(y) -h(b)s(e)e(sp)s(eci\014ed;)i(v)-5 b(alues)630 3970 y(of)31 -b Fr(p)h Fu(greater)g(than)e(3)h(are)f(c)m(hanged)h(to)g(3.)42 -b(If)29 b Fr(p)k Fu(is)d(not)h(sp)s(eci\014ed,)f(the)h(v)-5 -b(alue)30 b(3)h(is)g(used.)630 4107 y(The)54 b(optional)h +(fraction)g(to)g(b)s(e)630 2022 y(output.)45 b(A)m(t)33 +b(most)g(six)f(places)h(after)f(the)h(decimal)g(p)s(oin)m(t)f(ma)m(y)g +(b)s(e)g(sp)s(eci\014ed;)g(v)-5 b(alues)33 b(of)630 2132 +y Fr(p)g Fu(greater)e(than)f(6)h(are)g(c)m(hanged)g(to)g(6.)41 +b(If)30 b Fr(p)j Fu(is)d(not)h(sp)s(eci\014ed,)e(the)i(v)-5 +b(alue)31 b(3)g(is)f(used.)630 2267 y(The)54 b(optional)h Ft(l)f Fu(sp)s(eci\014es)g(a)h(longer)f(format,)61 b(including)54 -b(min)m(utes,)61 b(of)54 b(the)g(form)630 4217 y Fr(MM)10 +b(min)m(utes,)61 b(of)54 b(the)g(form)630 2376 y Fr(MM)10 b Fu(m)p Fr(SS)p Fu(.)p Fr(FF)d Fu(s.)103 b(The)50 b(v)-5 b(alue)52 b(of)f Fr(p)j Fu(determines)d(whether)f(or)h(not)h(the)f -(fraction)h(is)630 4326 y(included.)630 4463 y(If)30 +(fraction)h(is)630 2486 y(included.)630 2620 y(If)30 b(this)g(v)-5 b(ariable)31 b(is)g(not)f(set,)i(Bash)e(acts)h(as)g(if)f -(it)h(had)f(the)h(v)-5 b(alue)870 4600 y Ft +(it)h(had)f(the)h(v)-5 b(alue)870 2755 y Ft ($'\\nreal\\t\0453lR\\nuser\\t\0453)o(lU\\n)o(sys\\)o(t\0453)o(lS')630 -4737 y Fu(If)37 b(the)g(v)-5 b(alue)38 b(is)f(n)m(ull,)i(no)f(timing)f -(information)h(is)f(displa)m(y)m(ed.)62 b(A)37 b(trailing)i(newline)e -(is)630 4847 y(added)30 b(when)f(the)i(format)f(string)h(is)f(displa)m -(y)m(ed.)150 5011 y Ft(TMOUT)240 b Fu(If)22 b(set)h(to)g(a)g(v)-5 -b(alue)23 b(greater)h(than)e(zero,)j Ft(TMOUT)d Fu(is)g(treated)i(as)e -(the)h(default)g(timeout)g(for)g(the)630 5121 y Ft(read)31 -b Fu(builtin)h(\(see)h(Section)f(4.2)i([Bash)e(Builtins],)h(page)g -(55\).)47 b(The)32 b Ft(select)e Fu(command)630 5230 -y(\(see)f(Section)h(3.2.5.2)g([Conditional)g(Constructs],)e(page)i -(12\))f(terminates)g(if)g(input)e(do)s(es)630 5340 y(not)k(arriv)m(e)g -(after)g Ft(TMOUT)e Fu(seconds)h(when)f(input)h(is)g(coming)h(from)f(a) -h(terminal.)p eop end -%%Page: 90 96 -TeXDict begin 90 95 bop 150 -116 a Fu(Chapter)30 b(5:)41 -b(Shell)30 b(V)-8 b(ariables)2459 b(90)630 299 y(In)40 +2889 y Fu(If)34 b(the)h(v)-5 b(alue)35 b(is)g(n)m(ull,)h(Bash)f(do)s +(es)f(not)h(displa)m(y)g(an)m(y)g(timing)g(information.)54 +b(A)35 b(trailing)630 2999 y(newline)30 b(is)h(added)e(when)h(the)g +(format)h(string)f(is)h(displa)m(y)m(ed.)150 3158 y Ft(TMOUT)240 +b Fu(If)22 b(set)h(to)g(a)g(v)-5 b(alue)23 b(greater)h(than)e(zero,)j +Ft(TMOUT)d Fu(is)g(treated)i(as)e(the)h(default)g(timeout)g(for)g(the) +630 3268 y Ft(read)31 b Fu(builtin)h(\(see)h(Section)f(4.2)i([Bash)e +(Builtins],)h(page)g(57\).)47 b(The)32 b Ft(select)e +Fu(command)630 3377 y(\(see)f(Section)h(3.2.5.2)g([Conditional)g +(Constructs],)e(page)i(12\))f(terminates)g(if)g(input)e(do)s(es)630 +3487 y(not)k(arriv)m(e)g(after)g Ft(TMOUT)e Fu(seconds)h(when)f(input)h +(is)g(coming)h(from)f(a)h(terminal.)630 3621 y(In)40 b(an)h(in)m(teractiv)m(e)i(shell,)h(the)d(v)-5 b(alue)41 b(is)g(in)m(terpreted)g(as)f(the)h(n)m(um)m(b)s(er)f(of)h(seconds)f(to) -630 408 y(w)m(ait)28 b(for)e(a)g(line)h(of)g(input)e(after)i(issuing)f +630 3731 y(w)m(ait)28 b(for)e(a)g(line)h(of)g(input)e(after)i(issuing)f (the)h(primary)e(prompt.)39 b(Bash)26 b(terminates)h(after)630 -518 y(w)m(aiting)32 b(for)e(that)h(n)m(um)m(b)s(er)e(of)h(seconds)h(if) -f(a)h(complete)h(line)e(of)h(input)e(do)s(es)h(not)h(arriv)m(e.)150 -677 y Ft(TMPDIR)192 b Fu(If)39 b(set,)j(Bash)e(uses)f(its)h(v)-5 +3841 y(w)m(aiting)32 b(for)e(that)h(n)m(um)m(b)s(er)e(of)h(seconds)h +(if)f(a)h(complete)h(line)e(of)h(input)e(do)s(es)h(not)h(arriv)m(e.)150 +4000 y Ft(TMPDIR)192 b Fu(If)39 b(set,)j(Bash)e(uses)f(its)h(v)-5 b(alue)40 b(as)f(the)h(name)f(of)h(a)g(directory)g(in)f(whic)m(h)g -(Bash)h(creates)630 787 y(temp)s(orary)30 b(\014les)g(for)g(the)h -(shell's)g(use.)150 946 y Ft(UID)336 b Fu(The)30 b(n)m(umeric)g(real)h +(Bash)h(creates)630 4110 y(temp)s(orary)30 b(\014les)g(for)g(the)h +(shell's)g(use.)150 4269 y Ft(UID)336 b Fu(The)30 b(n)m(umeric)g(real)h (user)f(id)g(of)g(the)h(curren)m(t)f(user.)40 b(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8 b(.)p eop end -%%Page: 91 97 -TeXDict begin 91 96 bop 3659 -116 a Fu(91)150 299 y Fp(6)80 +%%Page: 94 100 +TeXDict begin 94 99 bop 3659 -116 a Fu(94)150 299 y Fp(6)80 b(Bash)54 b(F)-13 b(eatures)150 502 y Fu(This)30 b(c)m(hapter)h (describ)s(es)e(features)i(unique)e(to)i(Bash.)150 731 y Fs(6.1)68 b(In)l(v)l(oking)46 b(Bash)390 890 y Ft(bash)h([long-opt])e @@ -14681,7 +14983,7 @@ b([-o)k Fj(option)p Ft(])581 1438 y([-O)h Fj(shopt_option)p Ft(])d([)p Fj(argument)h Ft(...)o(])275 1567 y Fu(All)31 b(of)g(the)f(single-c)m(haracter)k(options)d(used)f(with)g(the)h Ft(set)f Fu(builtin)g(\(see)h(Section)h(4.3.1)g([The)f(Set)150 -1676 y(Builtin],)45 b(page)c(67\))i(can)e(b)s(e)f(used)h(as)g(options)g +1676 y(Builtin],)45 b(page)c(69\))i(can)e(b)s(e)f(used)h(as)g(options)g (when)f(the)i(shell)f(is)g(in)m(v)m(ok)m(ed.)74 b(In)41 b(addition,)j(there)150 1786 y(are)38 b(sev)m(eral)h(m)m(ulti-c)m (haracter)h(options)d(that)h(y)m(ou)g(can)g(use.)61 b(These)38 @@ -14691,7 +14993,7 @@ b(line)h(b)s(efore)f(the)g(single-c)m(haracter)j(options)e(to)g(b)s(e)f (the)g(debugger)g(pro\014le)g(to)h(b)s(e)e(executed)i(b)s(efore)f(the)g (shell)g(starts.)49 b(T)-8 b(urns)630 2262 y(on)35 b(extended)g (debugging)f(mo)s(de)h(\(see)g(Section)h(4.3.2)h([The)d(Shopt)g -(Builtin],)j(page)f(71,)630 2371 y(for)30 b(a)h(description)f(of)h(the) +(Builtin],)j(page)f(73,)630 2371 y(for)30 b(a)h(description)f(of)h(the) f Ft(extdebug)f Fu(option)h(to)h(the)g Ft(shopt)e Fu(builtin\).)150 2519 y Ft(--dump-po-strings)630 2628 y Fu(A)37 b(list)g(of)f(all)i (double-quoted)e(strings)g(preceded)g(b)m(y)h(`)p Ft($)p @@ -14709,7 +15011,7 @@ b(of)g Ft(~/.bashrc)p Fu(\))e(in)h(an)h(in)m(teractiv)m(e)i(shell.)150 3765 y Ft(--login)144 b Fu(Equiv)-5 b(alen)m(t)31 b(to)g Ft(-l)p Fu(.)150 3912 y Ft(--noediting)630 4022 y Fu(Do)h(not)e(use)h (the)g Fm(gnu)f Fu(Readline)i(library)e(\(see)h(Chapter)g(8)g([Command) -f(Line)g(Editing],)630 4131 y(page)h(117\))h(to)f(read)g(command)f +f(Line)g(Editing],)630 4131 y(page)h(122\))h(to)f(read)g(command)f (lines)g(when)g(the)g(shell)h(is)f(in)m(teractiv)m(e.)150 4278 y Ft(--noprofile)630 4388 y Fu(Don't)22 b(load)g(the)g (system-wide)f(startup)g(\014le)h Ft(/etc/profile)c Fu(or)j(an)m(y)h @@ -14726,154 +15028,157 @@ b(the)h(b)s(eha)m(vior)f(of)g(Bash)h(where)e(the)i(default)f(op)s y Fu(standard)35 b(to)h(matc)m(h)g(the)g(standard.)55 b(This)35 b(is)h(in)m(tended)f(to)h(mak)m(e)h(Bash)f(b)s(eha)m(v)m(e)g (as)g(a)630 5230 y(strict)22 b(sup)s(erset)e(of)h(that)g(standard.)37 -b(See)21 b(Section)h(6.11)g([Bash)f(POSIX)f(Mo)s(de],)k(page)d(106,)630 +b(See)21 b(Section)h(6.11)g([Bash)f(POSIX)f(Mo)s(de],)k(page)d(109,)630 5340 y(for)30 b(a)h(description)f(of)h(the)f(Bash)h Fm(posix)f Fu(mo)s(de.)p eop end -%%Page: 92 98 -TeXDict begin 92 97 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2484 b(92)150 299 y Ft(--restricted)630 -408 y Fu(Mak)m(e)54 b(the)e(shell)g(a)h(restricted)g(shell)f(\(see)h -(Section)g(6.10)h([The)d(Restricted)j(Shell],)630 518 -y(page)31 b(105\).)150 677 y Ft(--verbose)630 787 y Fu(Equiv)-5 -b(alen)m(t)31 b(to)g Ft(-v)p Fu(.)41 b(Prin)m(t)30 b(shell)g(input)g -(lines)g(as)h(they're)g(read.)150 946 y Ft(--version)630 -1056 y Fu(Sho)m(w)d(v)m(ersion)g(information)g(for)g(this)g(instance)h -(of)f(Bash)g(on)g(the)g(standard)f(output)h(and)630 1166 -y(exit)j(successfully)-8 b(.)275 1325 y(There)28 b(are)i(sev)m(eral)g -(single-c)m(haracter)i(options)d(that)h(ma)m(y)g(b)s(e)e(supplied)g(at) -i(in)m(v)m(o)s(cation)h(whic)m(h)e(are)150 1435 y(not)i(a)m(v)-5 -b(ailable)32 b(with)e(the)h Ft(set)e Fu(builtin.)150 -1594 y Ft(-c)384 b Fu(Read)66 b(and)f(execute)i(commands)e(from)g(the)h -(\014rst)e(non-option)i(argumen)m(t)g Fr(com-)630 1704 -y(mand)p 859 1704 28 4 v 39 w(string)p Fu(,)34 b(then)e(exit.)49 +%%Page: 95 101 +TeXDict begin 95 100 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(95)150 299 y Ft(--restricted)630 +408 y Fu(Equiv)-5 b(alen)m(t)35 b(to)g Ft(-r)p Fu(.)51 +b(Mak)m(e)35 b(the)g(shell)f(a)g(restricted)h(shell)f(\(see)h(Section)g +(6.10)h([The)d(Re-)630 518 y(stricted)e(Shell],)g(page)g(109\).)150 +667 y Ft(--verbose)630 777 y Fu(Equiv)-5 b(alen)m(t)31 +b(to)g Ft(-v)p Fu(.)41 b(Prin)m(t)30 b(shell)g(input)g(lines)g(as)h +(they're)g(read.)150 927 y Ft(--version)630 1036 y Fu(Sho)m(w)d(v)m +(ersion)g(information)g(for)g(this)g(instance)h(of)f(Bash)g(on)g(the)g +(standard)f(output)h(and)630 1146 y(exit)j(successfully)-8 +b(.)275 1295 y(There)28 b(are)i(sev)m(eral)g(single-c)m(haracter)i +(options)d(that)h(ma)m(y)g(b)s(e)e(supplied)g(at)i(in)m(v)m(o)s(cation) +h(whic)m(h)e(are)150 1405 y(not)i(a)m(v)-5 b(ailable)32 +b(with)e(the)h Ft(set)e Fu(builtin.)150 1554 y Ft(-c)384 +b Fu(Read)66 b(and)f(execute)i(commands)e(from)g(the)h(\014rst)e +(non-option)i(argumen)m(t)g Fr(com-)630 1664 y(mand)p +859 1664 28 4 v 39 w(string)p Fu(,)34 b(then)e(exit.)49 b(If)32 b(there)h(are)g(argumen)m(ts)g(after)g(the)g -Fr(command)p 3303 1704 V 40 w(string)p Fu(,)h(the)630 -1813 y(\014rst)e(argumen)m(t)h(is)g(assigned)g(to)h Ft($0)e +Fr(command)p 3303 1664 V 40 w(string)p Fu(,)h(the)630 +1773 y(\014rst)e(argumen)m(t)h(is)g(assigned)g(to)h Ft($0)e Fu(and)h(an)m(y)g(remaining)g(argumen)m(ts)g(are)g(assigned)g(to)630 -1923 y(the)38 b(p)s(ositional)h(parameters.)65 b(The)37 +1883 y(the)38 b(p)s(ositional)h(parameters.)65 b(The)37 b(assignmen)m(t)i(to)g Ft($0)f Fu(sets)g(the)h(name)f(of)g(the)g -(shell,)630 2032 y(whic)m(h)30 b(is)h(used)e(in)h(w)m(arning)g(and)g -(error)g(messages.)150 2192 y Ft(-i)384 b Fu(F)-8 b(orce)22 +(shell,)630 1993 y(whic)m(h)30 b(is)h(used)e(in)h(w)m(arning)g(and)g +(error)g(messages.)150 2142 y Ft(-i)384 b Fu(F)-8 b(orce)22 b(the)g(shell)f(to)g(run)f(in)m(teractiv)m(ely)-8 b(.)41 b(In)m(teractiv)m(e)23 b(shells)e(are)h(describ)s(ed)d(in)i(Section)h -(6.3)630 2301 y([In)m(teractiv)m(e)33 b(Shells],)e(page)g(94.)150 -2461 y Ft(-l)384 b Fu(Mak)m(e)33 b(this)e(shell)h(act)g(as)g(if)f(it)h +(6.3)630 2252 y([In)m(teractiv)m(e)33 b(Shells],)e(page)g(97.)150 +2401 y Ft(-l)384 b Fu(Mak)m(e)33 b(this)e(shell)h(act)g(as)g(if)f(it)h (had)f(b)s(een)f(directly)i(in)m(v)m(ok)m(ed)h(b)m(y)f(login.)44 -b(When)31 b(the)h(shell)630 2570 y(is)37 b(in)m(teractiv)m(e,)43 +b(When)31 b(the)h(shell)630 2511 y(is)37 b(in)m(teractiv)m(e,)43 b(this)37 b(is)g(equiv)-5 b(alen)m(t)39 b(to)f(starting)h(a)e(login)i (shell)e(with)g(`)p Ft(exec)30 b(-l)g(bash)p Fu('.)630 -2680 y(When)h(the)g(shell)h(is)f(not)g(in)m(teractiv)m(e,)k(the)c +2620 y(When)h(the)g(shell)h(is)f(not)g(in)m(teractiv)m(e,)k(the)c (login)h(shell)g(startup)f(\014les)g(will)g(b)s(e)g(executed.)630 -2790 y(`)p Ft(exec)e(bash)h(-l)p Fu(')43 b(or)h(`)p Ft(exec)29 +2730 y(`)p Ft(exec)e(bash)h(-l)p Fu(')43 b(or)h(`)p Ft(exec)29 b(bash)g(--login)p Fu(')42 b(will)i(replace)h(the)f(curren)m(t)f(shell) -h(with)g(a)630 2899 y(Bash)26 b(login)g(shell.)39 b(See)26 -b(Section)g(6.2)h([Bash)e(Startup)g(Files],)j(page)e(93,)i(for)d(a)h -(description)630 3009 y(of)31 b(the)f(sp)s(ecial)h(b)s(eha)m(vior)g(of) -f(a)h(login)g(shell.)150 3168 y Ft(-r)384 b Fu(Mak)m(e)54 +h(with)g(a)630 2839 y(Bash)26 b(login)g(shell.)39 b(See)26 +b(Section)g(6.2)h([Bash)e(Startup)g(Files],)j(page)e(96,)i(for)d(a)h +(description)630 2949 y(of)31 b(the)f(sp)s(ecial)h(b)s(eha)m(vior)g(of) +f(a)h(login)g(shell.)150 3098 y Ft(-r)384 b Fu(Mak)m(e)54 b(the)e(shell)g(a)h(restricted)g(shell)f(\(see)h(Section)g(6.10)h([The) -d(Restricted)j(Shell],)630 3278 y(page)31 b(105\).)150 -3437 y Ft(-s)384 b Fu(If)24 b(this)h(option)h(is)f(presen)m(t,)h(or)f +d(Restricted)j(Shell],)630 3208 y(page)31 b(109\).)150 +3357 y Ft(-s)384 b Fu(If)24 b(this)h(option)h(is)f(presen)m(t,)h(or)f (if)g(no)f(argumen)m(ts)i(remain)e(after)i(option)f(pro)s(cessing,)h -(then)630 3547 y(commands)i(are)h(read)g(from)f(the)h(standard)f +(then)630 3467 y(commands)i(are)h(read)g(from)f(the)h(standard)f (input.)39 b(This)28 b(option)h(allo)m(ws)h(the)f(p)s(ositional)630 -3656 y(parameters)i(to)h(b)s(e)e(set)i(when)d(in)m(v)m(oking)k(an)d(in) +3577 y(parameters)i(to)h(b)s(e)e(set)i(when)d(in)m(v)m(oking)k(an)d(in) m(teractiv)m(e)k(shell)d(or)g(when)f(reading)h(input)630 -3766 y(through)f(a)g(pip)s(e.)150 3925 y Ft(-D)384 b +3686 y(through)f(a)g(pip)s(e.)150 3836 y Ft(-D)384 b Fu(A)37 b(list)g(of)f(all)i(double-quoted)e(strings)g(preceded)g(b)m(y) h(`)p Ft($)p Fu(')f(is)h(prin)m(ted)f(on)g(the)h(standard)630 -4035 y(output.)63 b(These)38 b(are)g(the)g(strings)g(that)h(are)f(sub)5 -b(ject)38 b(to)h(language)g(translation)g(when)630 4144 +3945 y(output.)63 b(These)38 b(are)g(the)g(strings)g(that)h(are)f(sub)5 +b(ject)38 b(to)h(language)g(translation)g(when)630 4055 y(the)e(curren)m(t)g(lo)s(cale)h(is)f(not)g Ft(C)g Fu(or)f Ft(POSIX)g Fu(\(see)h(Section)h(3.1.2.5)h([Lo)s(cale)g(T)-8 -b(ranslation],)630 4254 y(page)31 b(7\).)42 b(This)29 +b(ranslation],)630 4164 y(page)31 b(7\).)42 b(This)29 b(implies)i(the)f Ft(-n)g Fu(option;)h(no)f(commands)g(will)h(b)s(e)f -(executed.)150 4413 y Ft([-+]O)f([)p Fj(shopt_option)p -Ft(])630 4523 y Fr(shopt)p 854 4523 V 40 w(option)44 +(executed.)150 4314 y Ft([-+]O)f([)p Fj(shopt_option)p +Ft(])630 4423 y Fr(shopt)p 854 4423 V 40 w(option)44 b Fu(is)g(one)h(of)f(the)g(shell)h(options)f(accepted)h(b)m(y)f(the)h -Ft(shopt)d Fu(builtin)i(\(see)630 4633 y(Section)32 b(4.3.2)h([The)e -(Shopt)f(Builtin],)i(page)g(71\).)44 b(If)31 b Fr(shopt)p -2724 4633 V 40 w(option)g Fu(is)g(presen)m(t,)h Ft(-O)f -Fu(sets)630 4742 y(the)24 b(v)-5 b(alue)24 b(of)g(that)h(option;)h +Ft(shopt)d Fu(builtin)i(\(see)630 4533 y(Section)32 b(4.3.2)h([The)e +(Shopt)f(Builtin],)i(page)g(73\).)44 b(If)31 b Fr(shopt)p +2724 4533 V 40 w(option)g Fu(is)g(presen)m(t,)h Ft(-O)f +Fu(sets)630 4643 y(the)24 b(v)-5 b(alue)24 b(of)g(that)h(option;)h Ft(+O)e Fu(unsets)f(it.)39 b(If)23 b Fr(shopt)p 2423 -4742 V 40 w(option)h Fu(is)g(not)g(supplied,)g(the)g(names)630 -4852 y(and)31 b(v)-5 b(alues)32 b(of)g(the)g(shell)g(options)g +4643 V 40 w(option)h Fu(is)g(not)g(supplied,)g(the)g(names)630 +4752 y(and)31 b(v)-5 b(alues)32 b(of)g(the)g(shell)g(options)g (accepted)h(b)m(y)f Ft(shopt)e Fu(are)i(prin)m(ted)f(on)h(the)g -(standard)630 4961 y(output.)40 b(If)29 b(the)h(in)m(v)m(o)s(cation)h +(standard)630 4862 y(output.)40 b(If)29 b(the)h(in)m(v)m(o)s(cation)h (option)f(is)f Ft(+O)p Fu(,)h(the)f(output)g(is)h(displa)m(y)m(ed)g(in) -f(a)h(format)f(that)630 5071 y(ma)m(y)i(b)s(e)f(reused)f(as)i(input.) -150 5230 y Ft(--)384 b Fu(A)38 b Ft(--)g Fu(signals)g(the)h(end)e(of)i +f(a)h(format)f(that)630 4971 y(ma)m(y)i(b)s(e)f(reused)f(as)i(input.) +150 5121 y Ft(--)384 b Fu(A)38 b Ft(--)g Fu(signals)g(the)h(end)e(of)i (options)f(and)g(disables)g(further)f(option)h(pro)s(cessing.)64 -b(An)m(y)630 5340 y(argumen)m(ts)31 b(after)g(the)f Ft(--)g -Fu(are)h(treated)g(as)g(\014lenames)f(and)g(argumen)m(ts.)p -eop end -%%Page: 93 99 -TeXDict begin 93 98 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2484 b(93)275 299 y(A)27 b -Fl(lo)-5 b(gin)35 b Fu(shell)27 b(is)g(one)h(whose)f(\014rst)f(c)m -(haracter)j(of)e(argumen)m(t)h(zero)f(is)h(`)p Ft(-)p +b(An)m(y)630 5230 y(argumen)m(ts)38 b(after)g(the)f Ft(--)g +Fu(are)h(treated)g(as)g(a)g(shell)f(script)h(\014lename)f(\(see)i +(Section)f(3.8)630 5340 y([Shell)30 b(Scripts],)h(page)g(47\))g(and)f +(argumen)m(ts)h(passed)f(to)h(that)g(script.)p eop end +%%Page: 96 102 +TeXDict begin 96 101 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(96)150 299 y Ft(-)432 +b Fu(Equiv)-5 b(alen)m(t)31 b(to)g Ft(--)p Fu(.)275 456 +y(A)c Fl(lo)-5 b(gin)35 b Fu(shell)27 b(is)g(one)h(whose)f(\014rst)f(c) +m(haracter)j(of)e(argumen)m(t)h(zero)f(is)h(`)p Ft(-)p Fu(',)g(or)f(one)g(in)m(v)m(ok)m(ed)i(with)e(the)150 -408 y Ft(--login)h Fu(option.)275 555 y(An)g Fl(inter)-5 +566 y Ft(--login)h Fu(option.)275 699 y(An)g Fl(inter)-5 b(active)37 b Fu(shell)30 b(is)f(one)g(started)h(without)f(non-option)h (argumen)m(ts,)g(unless)e Ft(-s)h Fu(is)g(sp)s(eci\014ed,)150 -665 y(without)k(sp)s(ecifying)h(the)f Ft(-c)g Fu(option,)i(and)e(whose) +809 y(without)k(sp)s(ecifying)h(the)f Ft(-c)g Fu(option,)i(and)e(whose) g(input)g(and)f(output)h(are)h(b)s(oth)f(connected)h(to)g(ter-)150 -774 y(minals)g(\(as)g(determined)f(b)m(y)h Ft(isatty\(3\))p +918 y(minals)g(\(as)g(determined)f(b)m(y)h Ft(isatty\(3\))p Fu(\),)e(or)i(one)g(started)g(with)f(the)h Ft(-i)f Fu(option.)51 -b(See)33 b(Section)i(6.3)150 884 y([In)m(teractiv)m(e)e(Shells],)e -(page)g(94,)g(for)f(more)h(information.)275 1031 y(If)i(argumen)m(ts)h +b(See)33 b(Section)i(6.3)150 1028 y([In)m(teractiv)m(e)e(Shells],)e +(page)g(97,)g(for)f(more)h(information.)275 1161 y(If)i(argumen)m(ts)h (remain)g(after)h(option)f(pro)s(cessing,)h(and)e(neither)h(the)g -Ft(-c)g Fu(nor)f(the)h Ft(-s)g Fu(option)g(has)150 1140 +Ft(-c)g Fu(nor)f(the)h Ft(-s)g Fu(option)g(has)150 1271 y(b)s(een)44 b(supplied,)j(the)d(\014rst)g(argumen)m(t)h(is)g(assumed)e (to)j(b)s(e)d(the)i(name)g(of)f(a)h(\014le)g(con)m(taining)h(shell)150 -1250 y(commands)30 b(\(see)g(Section)h(3.8)g([Shell)f(Scripts],)g(page) -h(46\).)41 b(When)30 b(Bash)g(is)g(in)m(v)m(ok)m(ed)i(in)d(this)h -(fashion,)150 1359 y Ft($0)37 b Fu(is)g(set)h(to)h(the)e(name)h(of)f +1380 y(commands)30 b(\(see)g(Section)h(3.8)g([Shell)f(Scripts],)g(page) +h(47\).)41 b(When)30 b(Bash)g(is)g(in)m(v)m(ok)m(ed)i(in)d(this)h +(fashion,)150 1490 y Ft($0)37 b Fu(is)g(set)h(to)h(the)e(name)h(of)f (the)h(\014le,)i(and)c(the)i(p)s(ositional)g(parameters)g(are)g(set)g -(to)g(the)g(remaining)150 1469 y(argumen)m(ts.)h(Bash)26 +(to)g(the)g(remaining)150 1599 y(argumen)m(ts.)h(Bash)26 b(reads)f(and)g(executes)h(commands)f(from)g(this)g(\014le,)i(then)e -(exits.)40 b(Bash's)25 b(exit)i(status)150 1579 y(is)f(the)h(exit)h +(exits.)40 b(Bash's)25 b(exit)i(status)150 1709 y(is)f(the)h(exit)h (status)e(of)h(the)g(last)g(command)f(executed)h(in)g(the)f(script.)40 -b(If)26 b(no)g(commands)g(are)h(executed,)150 1688 y(the)k(exit)g -(status)g(is)f(0.)150 1947 y Fs(6.2)68 b(Bash)45 b(Startup)g(Files)150 -2107 y Fu(This)23 b(section)j(describ)s(es)d(ho)m(w)i(Bash)f(executes)h +b(If)26 b(no)g(commands)g(are)h(executed,)150 1819 y(the)k(exit)g +(status)g(is)f(0.)150 2057 y Fs(6.2)68 b(Bash)45 b(Startup)g(Files)150 +2217 y Fu(This)23 b(section)j(describ)s(es)d(ho)m(w)i(Bash)f(executes)h (its)g(startup)f(\014les.)38 b(If)24 b(an)m(y)h(of)f(the)h(\014les)f -(exist)h(but)e(cannot)150 2216 y(b)s(e)29 b(read,)i(Bash)f(rep)s(orts)f +(exist)h(but)e(cannot)150 2326 y(b)s(e)29 b(read,)i(Bash)f(rep)s(orts)f (an)h(error.)40 b(Tildes)30 b(are)g(expanded)f(in)h(\014lenames)g(as)g -(describ)s(ed)f(ab)s(o)m(v)m(e)i(under)150 2326 y(Tilde)f(Expansion)g +(describ)s(ed)f(ab)s(o)m(v)m(e)i(under)150 2436 y(Tilde)f(Expansion)g (\(see)h(Section)h(3.5.2)g([Tilde)e(Expansion],)h(page)g(25\).)275 -2473 y(In)m(teractiv)m(e)h(shells)f(are)g(describ)s(ed)e(in)h(Section)h -(6.3)h([In)m(teractiv)m(e)h(Shells],)d(page)h(94.)150 -2684 y Fk(In)m(v)m(ok)m(ed)40 b(as)h(an)f(in)m(teractiv)m(e)f(login)j -(shell,)g(or)g(with)e Fh(--login)150 2831 y Fu(When)c(Bash)f(is)h(in)m +2569 y(In)m(teractiv)m(e)h(shells)f(are)g(describ)s(ed)e(in)h(Section)h +(6.3)h([In)m(teractiv)m(e)h(Shells],)d(page)h(97.)150 +2766 y Fk(In)m(v)m(ok)m(ed)40 b(as)h(an)f(in)m(teractiv)m(e)f(login)j +(shell,)g(or)g(with)e Fh(--login)150 2913 y Fu(When)c(Bash)f(is)h(in)m (v)m(ok)m(ed)h(as)f(an)g(in)m(teractiv)m(e)j(login)d(shell,)i(or)e(as)g -(a)g(non-in)m(teractiv)m(e)i(shell)e(with)g(the)150 2940 +(a)g(non-in)m(teractiv)m(e)i(shell)e(with)g(the)150 3023 y Ft(--login)30 b Fu(option,)k(it)f(\014rst)e(reads)h(and)g(executes)i (commands)e(from)f(the)i(\014le)f Ft(/etc/profile)p Fu(,)e(if)i(that) -150 3050 y(\014le)44 b(exists.)80 b(After)44 b(reading)g(that)g +150 3132 y(\014le)44 b(exists.)80 b(After)44 b(reading)g(that)g (\014le,)j(it)d(lo)s(oks)g(for)f Ft(~/.bash_profile)p -Fu(,)g Ft(~/.bash_login)p Fu(,)h(and)150 3160 y Ft(~/.profile)p +Fu(,)g Ft(~/.bash_login)p Fu(,)h(and)150 3242 y Ft(~/.profile)p Fu(,)25 b(in)i(that)g(order,)h(and)e(reads)h(and)f(executes)j(commands) -d(from)h(the)g(\014rst)f(one)i(that)f(exists)150 3269 +d(from)h(the)g(\014rst)f(one)i(that)f(exists)150 3351 y(and)j(is)h(readable.)42 b(The)30 b Ft(--noprofile)d Fu(option)k(ma)m(y)g(b)s(e)f(used)g(when)g(the)h(shell)f(is)h(started)g -(to)g(inhibit)150 3379 y(this)f(b)s(eha)m(vior.)275 3526 +(to)g(inhibit)150 3461 y(this)f(b)s(eha)m(vior.)275 3594 y(When)h(an)g(in)m(teractiv)m(e)k(login)d(shell)g(exits,)h(or)f(a)g (non-in)m(teractiv)m(e)i(login)f(shell)e(executes)i(the)f -Ft(exit)150 3635 y Fu(builtin)g(command,)i(Bash)e(reads)h(and)f +Ft(exit)150 3704 y Fu(builtin)g(command,)i(Bash)e(reads)h(and)f (executes)i(commands)e(from)g(the)h(\014le)g Ft(~/.bash_logout)p -Fu(,)d(if)i(it)150 3745 y(exists.)150 3956 y Fk(In)m(v)m(ok)m(ed)40 +Fu(,)d(if)i(it)150 3814 y(exists.)150 4011 y Fk(In)m(v)m(ok)m(ed)40 b(as)h(an)f(in)m(teractiv)m(e)f(non-login)k(shell)150 -4103 y Fu(When)g(an)h(in)m(teractiv)m(e)i(shell)e(that)g(is)f(not)h(a)g +4158 y Fu(When)g(an)h(in)m(teractiv)m(e)i(shell)e(that)g(is)f(not)h(a)g (login)g(shell)g(is)f(started,)48 b(Bash)c(reads)f(and)g(executes)150 -4213 y(commands)31 b(from)g Ft(~/.bashrc)p Fu(,)f(if)h(that)h(\014le)g +4267 y(commands)31 b(from)g Ft(~/.bashrc)p Fu(,)f(if)h(that)h(\014le)g (exists.)44 b(This)31 b(ma)m(y)h(b)s(e)f(inhibited)g(b)m(y)g(using)g -(the)h Ft(--norc)150 4322 y Fu(option.)40 b(The)27 b +(the)h Ft(--norc)150 4377 y Fu(option.)40 b(The)27 b Ft(--rcfile)h Fj(file)e Fu(option)h(will)g(force)h(Bash)f(to)h(read)f -(and)f(execute)j(commands)d(from)h Fr(\014le)150 4432 -y Fu(instead)k(of)f Ft(~/.bashrc)p Fu(.)275 4579 y(So,)g(t)m(ypically) +(and)f(execute)j(commands)d(from)h Fr(\014le)150 4486 +y Fu(instead)k(of)f Ft(~/.bashrc)p Fu(.)275 4620 y(So,)g(t)m(ypically) -8 b(,)33 b(y)m(our)d Ft(~/.bash_profile)c Fu(con)m(tains)32 -b(the)f(line)390 4725 y Ft(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g -(~/.bashrc;)e(fi)150 4872 y Fu(after)31 b(\(or)g(b)s(efore\))f(an)m(y)h +b(the)f(line)390 4753 y Ft(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g +(~/.bashrc;)e(fi)150 4886 y Fu(after)31 b(\(or)g(b)s(efore\))f(an)m(y)h (login-sp)s(eci\014c)g(initializations.)150 5083 y Fk(In)m(v)m(ok)m(ed) 40 b(non-in)m(teractiv)m(ely)150 5230 y Fu(When)33 b(Bash)g(is)g (started)h(non-in)m(teractiv)m(ely)-8 b(,)37 b(to)d(run)e(a)h(shell)h @@ -14881,9 +15186,9 @@ b(the)f(line)390 4725 y Ft(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g 5340 y(v)-5 b(ariable)35 b Ft(BASH_ENV)d Fu(in)i(the)h(en)m(vironmen)m (t,)h(expands)e(its)g(v)-5 b(alue)35 b(if)g(it)g(app)s(ears)e(there,)j (and)e(uses)g(the)p eop end -%%Page: 94 100 -TeXDict begin 94 99 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2484 b(94)150 299 y(expanded)30 +%%Page: 97 103 +TeXDict begin 97 102 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(97)150 299 y(expanded)30 b(v)-5 b(alue)30 b(as)h(the)g(name)f(of)h(a)f(\014le)h(to)g(read)f(and) g(execute.)42 b(Bash)31 b(b)s(eha)m(v)m(es)g(as)g(if)f(the)g(follo)m (wing)150 408 y(command)g(w)m(ere)h(executed:)390 552 @@ -14964,9 +15269,9 @@ h(and)e(the)h(e\013ectiv)m(e)j(user)c(id)h(is)g(set)g(to)h(the)f(real)h h(is)g(the)g(same,)i(but)d(the)150 5070 y(e\013ectiv)m(e)c(user)d(id)g (is)g(not)h(reset.)150 5324 y Fs(6.3)68 b(In)l(teractiv)l(e)47 b(Shells)p eop end -%%Page: 95 101 -TeXDict begin 95 100 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2484 b(95)150 299 y Fk(6.3.1)63 +%%Page: 98 104 +TeXDict begin 98 103 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(98)150 299 y Fk(6.3.1)63 b(What)40 b(is)h(an)g(In)m(teractiv)m(e)e(Shell?)150 446 y Fu(An)f(in)m(teractiv)m(e)j(shell)e(is)f(one)h(started)g(without) f(non-option)g(argumen)m(ts)h(\(unless)f Ft(-s)g Fu(is)g(sp)s @@ -15001,8 +15306,8 @@ b(Shell)k(Beha)m(vior)150 3187 y Fu(When)30 b(the)h(shell)f(is)h (eha)m(vior)f(in)g(sev)m(eral)i(w)m(a)m(ys.)199 3330 y(1.)61 b(Startup)37 b(\014les)g(are)h(read)f(and)g(executed)h(as)f (describ)s(ed)g(in)g(Section)h(6.2)g([Bash)g(Startup)e(Files],)330 -3440 y(page)31 b(93.)199 3579 y(2.)61 b(Job)32 b(Con)m(trol)h(\(see)g -(Chapter)e(7)i([Job)f(Con)m(trol],)i(page)f(113\))h(is)e(enabled)g(b)m +3440 y(page)31 b(96.)199 3579 y(2.)61 b(Job)32 b(Con)m(trol)h(\(see)g +(Chapter)e(7)i([Job)f(Con)m(trol],)i(page)f(118\))h(is)e(enabled)g(b)m (y)g(default.)46 b(When)32 b(job)330 3689 y(con)m(trol)j(is)f(in)f (e\013ect,)k(Bash)d(ignores)g(the)g(k)m(eyb)s(oard-generated)h(job)e (con)m(trol)i(signals)g Ft(SIGTTIN)p Fu(,)330 3798 y @@ -15015,57 +15320,57 @@ Fu(b)s(efore)h(reading)g(the)g(second)g(and)f(subsequen)m(t)g(lines)i b(expands)f(and)h(displa)m(ys)g Ft(PS0)f Fu(after)h(it)h(reads)f(a)g (command)g(but)f(b)s(efore)h(executing)330 4266 y(it.)54 b(See)35 b(Section)h(6.9)f([Con)m(trolling)i(the)d(Prompt],)i(page)g -(104,)h(for)d(a)h(complete)i(list)e(of)g(prompt)330 4375 +(107,)h(for)d(a)h(complete)i(list)e(of)g(prompt)330 4375 y(string)30 b(escap)s(e)h(sequences.)199 4514 y(4.)61 b(Bash)31 b(executes)i(the)e(v)-5 b(alues)32 b(of)g(the)f(set)h(elemen) m(ts)g(of)g(the)f Ft(PROMPT_COMMAND)d Fu(arra)m(y)k(v)-5 b(ariable)32 b(as)330 4624 y(commands)27 b(b)s(efore)f(prin)m(ting)h (the)g(primary)g(prompt,)g Ft($PS1)f Fu(\(see)i(Section)f(5.2)i([Bash)e -(V)-8 b(ariables],)330 4733 y(page)31 b(78\).)199 4872 +(V)-8 b(ariables],)330 4733 y(page)31 b(81\).)199 4872 y(5.)61 b(Readline)27 b(\(see)g(Chapter)e(8)h([Command)g(Line)g -(Editing],)h(page)g(117\))g(is)f(used)g(to)g(read)g(commands)330 +(Editing],)h(page)g(122\))g(is)f(used)g(to)g(read)g(commands)330 4982 y(from)k(the)g(user's)g(terminal.)199 5121 y(6.)61 b(Bash)36 b(insp)s(ects)g(the)h(v)-5 b(alue)37 b(of)f(the)g Ft(ignoreeof)e Fu(option)j(to)g Ft(set)29 b(-o)36 b Fu(instead)h(of)f (exiting)i(imme-)330 5230 y(diately)f(when)e(it)i(receiv)m(es)h(an)e Ft(EOF)f Fu(on)h(its)g(standard)f(input)g(when)h(reading)g(a)g(command) g(\(see)330 5340 y(Section)31 b(4.3.1)h([The)e(Set)h(Builtin],)g(page)g -(67\).)p eop end -%%Page: 96 102 -TeXDict begin 96 101 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2484 b(96)199 299 y(7.)61 +(69\).)p eop end +%%Page: 99 105 +TeXDict begin 99 104 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(99)199 299 y(7.)61 b(Command)43 b(history)h(\(see)h(Section)g(9.1)g([Bash)f(History)h(F)-8 -b(acilities],)51 b(page)45 b(152\))h(and)d(history)330 +b(acilities],)51 b(page)45 b(159\))h(and)d(history)330 408 y(expansion)h(\(see)i(Section)f(9.3)h([History)g(In)m(teraction],)k -(page)45 b(154\))h(are)f(enabled)g(b)m(y)f(default.)330 +(page)45 b(161\))h(are)f(enabled)g(b)m(y)f(default.)330 518 y(Bash)28 b(will)g(sa)m(v)m(e)h(the)f(command)f(history)h(to)g(the) g(\014le)g(named)f(b)m(y)h Ft($HISTFILE)d Fu(when)h(a)i(shell)g(with) 330 628 y(history)i(enabled)h(exits.)199 762 y(8.)61 b(Alias)31 b(expansion)g(\(see)g(Section)g(6.6)g([Aliases],)i(page)e -(100\))h(is)e(p)s(erformed)f(b)m(y)h(default.)199 896 +(103\))h(is)e(p)s(erformed)f(b)m(y)h(default.)199 896 y(9.)61 b(In)24 b(the)g(absence)h(of)f(an)m(y)h(traps,)g(Bash)g (ignores)f Ft(SIGTERM)f Fu(\(see)i(Section)g(3.7.6)h([Signals],)g(page) -f(45\).)154 1030 y(10.)61 b(In)29 b(the)g(absence)h(of)g(an)m(y)g +f(46\).)154 1030 y(10.)61 b(In)29 b(the)g(absence)h(of)g(an)m(y)g (traps,)f Ft(SIGINT)f Fu(is)h(caugh)m(t)i(and)e(handled)f(\(see)j -(Section)f(3.7.6)h([Signals],)330 1140 y(page)g(45\).)42 +(Section)f(3.7.6)h([Signals],)330 1140 y(page)g(46\).)42 b Ft(SIGINT)29 b Fu(will)h(in)m(terrupt)g(some)h(shell)g(builtins.)154 1274 y(11.)61 b(An)40 b(in)m(teractiv)m(e)j(login)e(shell)g(sends)e(a)i Ft(SIGHUP)d Fu(to)j(all)g(jobs)f(on)g(exit)h(if)g(the)f Ft(huponexit)e Fu(shell)330 1383 y(option)31 b(has)f(b)s(een)g(enabled) -g(\(see)h(Section)g(3.7.6)i([Signals],)e(page)g(45\).)154 +g(\(see)h(Section)g(3.7.6)i([Signals],)e(page)g(46\).)154 1517 y(12.)61 b(The)29 b Ft(-n)g Fu(in)m(v)m(o)s(cation)j(option)e(is)g (ignored,)g(and)f(`)p Ft(set)h(-n)p Fu(')f(has)h(no)f(e\013ect)j(\(see) -e(Section)h(4.3.1)g([The)330 1627 y(Set)g(Builtin],)g(page)g(67\).)154 +e(Section)h(4.3.1)g([The)330 1627 y(Set)g(Builtin],)g(page)g(69\).)154 1761 y(13.)61 b(Bash)32 b(will)g(c)m(hec)m(k)i(for)e(mail)g(p)s(erio)s (dically)-8 b(,)34 b(dep)s(ending)c(on)i(the)g(v)-5 b(alues)32 b(of)g(the)h Ft(MAIL)p Fu(,)e Ft(MAILPATH)p Fu(,)330 1871 y(and)f Ft(MAILCHECK)e Fu(shell)i(v)-5 b(ariables)31 b(\(see)h(Section)f(5.2)g([Bash)g(V)-8 b(ariables],)32 -b(page)f(78\).)154 2005 y(14.)61 b(Expansion)32 b(errors)h(due)f(to)i +b(page)f(81\).)154 2005 y(14.)61 b(Expansion)32 b(errors)h(due)f(to)i (references)f(to)h(un)m(b)s(ound)c(shell)j(v)-5 b(ariables)34 b(after)g(`)p Ft(set)29 b(-u)p Fu(')k(has)g(b)s(een)330 2114 y(enabled)d(will)h(not)g(cause)g(the)f(shell)h(to)g(exit)g(\(see)g -(Section)h(4.3.1)g([The)e(Set)h(Builtin],)g(page)g(67\).)154 +(Section)h(4.3.1)g([The)e(Set)h(Builtin],)g(page)g(69\).)154 2248 y(15.)61 b(The)48 b(shell)h(will)f(not)h(exit)g(on)g(expansion)f (errors)g(caused)g(b)m(y)h Fr(v)-5 b(ar)54 b Fu(b)s(eing)48 b(unset)g(or)h(n)m(ull)f(in)330 2358 y Ft(${)p Fj(var)p @@ -15076,10 +15381,10 @@ Ft(:?)p Fj(word)p Ft(})27 b Fu(expansions)j(\(see)h(Section)h(3.5.3)g 2626 y(17.)61 b(When)26 b(running)f(in)i Fm(posix)e Fu(mo)s(de,)j(a)f (sp)s(ecial)g(builtin)f(returning)g(an)g(error)h(status)g(will)g(not)f (cause)330 2736 y(the)31 b(shell)f(to)h(exit)h(\(see)f(Section)g(6.11)h -([Bash)f(POSIX)e(Mo)s(de],)i(page)g(106\).)154 2870 y(18.)61 +([Bash)f(POSIX)e(Mo)s(de],)i(page)g(109\).)154 2870 y(18.)61 b(A)34 b(failed)g Ft(exec)f Fu(will)h(not)g(cause)g(the)g(shell)g(to)g (exit)h(\(see)f(Section)h(4.1)g([Bourne)f(Shell)f(Builtins],)330 -2980 y(page)e(48\).)154 3114 y(19.)61 b(P)m(arser)31 +2980 y(page)e(49\).)154 3114 y(19.)61 b(P)m(arser)31 b(syn)m(tax)f(errors)g(will)h(not)g(cause)g(the)f(shell)h(to)g(exit.) 154 3248 y(20.)61 b(If)28 b(the)g Ft(cdspell)f Fu(shell)h(option)h(is)g (enabled,)g(the)f(shell)h(will)f(attempt)i(simple)e(sp)s(elling)h @@ -15087,20 +15392,20 @@ b(syn)m(tax)f(errors)g(will)h(not)g(cause)g(the)f(shell)h(to)g(exit.) Ft(cd)e Fu(builtin)h(\(see)i(the)e(description)h(of)f(the)h Ft(cdspell)d Fu(option)j(to)330 3467 y(the)j Ft(shopt)e Fu(builtin)h(in)h(Section)g(4.3.2)i([The)d(Shopt)g(Builtin],)i(page)g -(71\).)46 b(The)31 b Ft(cdspell)e Fu(option)330 3576 +(73\).)46 b(The)31 b Ft(cdspell)e Fu(option)330 3576 y(is)h(only)h(e\013ectiv)m(e)i(in)d(in)m(teractiv)m(e)j(shells.)154 3711 y(21.)61 b(The)42 b(shell)h(will)g(c)m(hec)m(k)h(the)f(v)-5 b(alue)43 b(of)f(the)h Ft(TMOUT)e Fu(v)-5 b(ariable)44 b(and)e(exit)h(if)g(a)g(command)f(is)h(not)330 3820 y(read)30 b(within)g(the)g(sp)s(eci\014ed)f(n)m(um)m(b)s(er)g(of)i(seconds)f (after)g(prin)m(ting)g Ft($PS1)f Fu(\(see)i(Section)g(5.2)h([Bash)330 -3930 y(V)-8 b(ariables],)32 b(page)f(78\).)150 4170 y +3930 y(V)-8 b(ariables],)32 b(page)f(81\).)150 4170 y Fs(6.4)68 b(Bash)45 b(Conditional)h(Expressions)150 4329 y Fu(Conditional)25 b(expressions)f(are)g(used)g(b)m(y)g(the)g Ft([[)g Fu(comp)s(ound)e(command)i(\(see)h(Section)g(3.2.5.2)i([Condi-) 150 4439 y(tional)h(Constructs],)g(page)f(12\))h(and)e(the)h Ft(test)f Fu(and)g Ft([)h Fu(builtin)f(commands)h(\(see)g(Section)h -(4.1)g([Bourne)150 4548 y(Shell)37 b(Builtins],)j(page)e(48\).)63 +(4.1)g([Bourne)150 4548 y(Shell)37 b(Builtins],)j(page)e(49\).)63 b(The)36 b Ft(test)g Fu(and)h Ft([)g Fu(commands)g(determine)g(their)h (b)s(eha)m(vior)f(based)g(on)150 4658 y(the)29 b(n)m(um)m(b)s(er)f(of)h (argumen)m(ts;)h(see)f(the)h(descriptions)e(of)i(those)f(commands)g @@ -15117,9 +15422,9 @@ b(If)34 b(the)h(op)s(erating)f(system)h(on)f(whic)m(h)g(Bash)h(is)f b(\014les,)i(Bash)e(will)g(use)f(them;)k(otherwise)d(it)g(will)g(em)m (ulate)h(them)f(in)m(ternally)h(with)e(this)h(b)s(eha)m(vior:)p eop end -%%Page: 97 103 -TeXDict begin 97 102 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2484 b(97)150 299 y(If)27 +%%Page: 100 106 +TeXDict begin 100 105 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(100)150 299 y(If)27 b(the)g Fr(\014le)33 b Fu(argumen)m(t)27 b(to)h(one)g(of)f(the)h (primaries)f(is)g(of)h(the)f(form)g Ft(/dev/fd/)p Fj(N)p Fu(,)e(then)i(\014le)h(descriptor)f Fr(N)150 408 y Fu(is)g(c)m(hec)m(k) @@ -15192,774 +15497,870 @@ b(not.)150 5230 y Fj(file1)f Ft(-ot)g Fj(file2)630 5340 y Fu(T)-8 b(rue)30 b(if)g Fr(\014le1)38 b Fu(is)31 b(older)f(than)g Fr(\014le2)p Fu(,)i(or)e(if)g Fr(\014le2)38 b Fu(exists)31 b(and)f Fr(\014le1)38 b Fu(do)s(es)30 b(not.)p eop end -%%Page: 98 104 -TeXDict begin 98 103 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2484 b(98)150 299 y Ft(-o)30 +%%Page: 101 107 +TeXDict begin 101 106 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(101)150 299 y Ft(-o)30 b Fj(optname)630 408 y Fu(T)-8 b(rue)41 b(if)g(the)g(shell)h(option)f Fr(optname)47 b Fu(is)41 b(enabled.)73 b(The)41 b(list)h(of)f(options)h (app)s(ears)e(in)630 518 y(the)33 b(description)h(of)f(the)g Ft(-o)g Fu(option)g(to)h(the)g Ft(set)e Fu(builtin)h(\(see)h(Section)g -(4.3.1)h([The)e(Set)630 628 y(Builtin],)e(page)g(67\).)150 -783 y Ft(-v)f Fj(varname)630 892 y Fu(T)-8 b(rue)30 b(if)g(the)h(shell) -f(v)-5 b(ariable)32 b Fr(v)-5 b(arname)35 b Fu(is)30 -b(set)h(\(has)g(b)s(een)e(assigned)i(a)g(v)-5 b(alue\).)150 -1047 y Ft(-R)30 b Fj(varname)630 1157 y Fu(T)-8 b(rue)30 -b(if)g(the)h(shell)f(v)-5 b(ariable)32 b Fr(v)-5 b(arname)35 -b Fu(is)30 b(set)h(and)f(is)h(a)f(name)h(reference.)150 -1312 y Ft(-z)f Fj(string)66 b Fu(T)-8 b(rue)30 b(if)g(the)h(length)g -(of)f Fr(string)38 b Fu(is)31 b(zero.)150 1467 y Ft(-n)f -Fj(string)150 1576 y(string)192 b Fu(T)-8 b(rue)30 b(if)g(the)h(length) -g(of)f Fr(string)38 b Fu(is)31 b(non-zero.)150 1731 y -Fj(string1)d Ft(==)i Fj(string2)150 1841 y(string1)e -Ft(=)i Fj(string2)630 1951 y Fu(T)-8 b(rue)43 b(if)h(the)g(strings)g +(4.3.1)h([The)e(Set)630 628 y(Builtin],)e(page)g(69\).)150 +772 y Ft(-v)f Fj(varname)630 882 y Fu(T)-8 b(rue)24 b(if)h(the)g(shell) +g(v)-5 b(ariable)26 b Fr(v)-5 b(arname)30 b Fu(is)25 +b(set)g(\(has)g(b)s(een)f(assigned)h(a)h(v)-5 b(alue\).)39 +b(If)25 b Fr(v)-5 b(arname)630 991 y Fu(is)37 b(an)g(indexed)g(arra)m +(y)h(v)-5 b(ariable)38 b(name)f(subscripted)f(b)m(y)h(`)p +Ft(@)p Fu(')g(or)h(`)p Ft(*)p Fu(',)h(this)e(returns)f(true)630 +1101 y(if)g(the)f(arra)m(y)h(has)g(an)m(y)f(set)i(elemen)m(ts.)57 +b(If)35 b Fr(v)-5 b(arname)41 b Fu(is)35 b(an)h(asso)s(ciativ)m(e)i +(arra)m(y)e(v)-5 b(ariable)630 1210 y(name)32 b(subscripted)e(b)m(y)h +(`)p Ft(@)p Fu(')h(or)g(`)p Ft(*)p Fu(',)g(this)f(returns)g(true)g(if)h +(an)f(elemen)m(t)i(with)e(that)i(k)m(ey)f(is)630 1320 +y(set.)150 1464 y Ft(-R)e Fj(varname)630 1574 y Fu(T)-8 +b(rue)30 b(if)g(the)h(shell)f(v)-5 b(ariable)32 b Fr(v)-5 +b(arname)35 b Fu(is)30 b(set)h(and)f(is)h(a)f(name)h(reference.)150 +1718 y Ft(-z)f Fj(string)66 b Fu(T)-8 b(rue)30 b(if)g(the)h(length)g +(of)f Fr(string)38 b Fu(is)31 b(zero.)150 1862 y Ft(-n)f +Fj(string)150 1972 y(string)192 b Fu(T)-8 b(rue)30 b(if)g(the)h(length) +g(of)f Fr(string)38 b Fu(is)31 b(non-zero.)150 2116 y +Fj(string1)d Ft(==)i Fj(string2)150 2226 y(string1)e +Ft(=)i Fj(string2)630 2336 y Fu(T)-8 b(rue)43 b(if)h(the)g(strings)g (are)g(equal.)82 b(When)44 b(used)f(with)g(the)h Ft([[)g -Fu(command,)j(this)d(p)s(er-)630 2060 y(forms)d(pattern)g(matc)m(hing)i +Fu(command,)j(this)d(p)s(er-)630 2445 y(forms)d(pattern)g(matc)m(hing)i (as)f(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)f(Section)g(3.2.5.2)i -([Conditional)630 2170 y(Constructs],)30 b(page)h(12\).)630 -2302 y(`)p Ft(=)p Fu(')g(should)e(b)s(e)h(used)f(with)h(the)h +([Conditional)630 2555 y(Constructs],)30 b(page)h(12\).)630 +2682 y(`)p Ft(=)p Fu(')g(should)e(b)s(e)h(used)f(with)h(the)h Ft(test)e Fu(command)h(for)g Fm(posix)g Fu(conformance.)150 -2457 y Fj(string1)e Ft(!=)i Fj(string2)630 2567 y Fu(T)-8 +2826 y Fj(string1)e Ft(!=)i Fj(string2)630 2936 y Fu(T)-8 b(rue)30 b(if)g(the)h(strings)f(are)h(not)f(equal.)150 -2722 y Fj(string1)e Ft(<)i Fj(string2)630 2831 y Fu(T)-8 +3080 y Fj(string1)e Ft(<)i Fj(string2)630 3189 y Fu(T)-8 b(rue)30 b(if)g Fr(string1)38 b Fu(sorts)31 b(b)s(efore)f -Fr(string2)38 b Fu(lexicographically)-8 b(.)150 2986 -y Fj(string1)28 b Ft(>)i Fj(string2)630 3096 y Fu(T)-8 +Fr(string2)38 b Fu(lexicographically)-8 b(.)150 3334 +y Fj(string1)28 b Ft(>)i Fj(string2)630 3443 y Fu(T)-8 b(rue)30 b(if)g Fr(string1)38 b Fu(sorts)31 b(after)g -Fr(string2)38 b Fu(lexicographically)-8 b(.)150 3251 -y Fj(arg1)29 b Ft(OP)h Fj(arg2)630 3361 y Ft(OP)j Fu(is)h(one)g(of)h(`) +Fr(string2)38 b Fu(lexicographically)-8 b(.)150 3588 +y Fj(arg1)29 b Ft(OP)h Fj(arg2)630 3697 y Ft(OP)j Fu(is)h(one)g(of)h(`) p Ft(-eq)p Fu(',)f(`)p Ft(-ne)p Fu(',)h(`)p Ft(-lt)p Fu(',)g(`)p Ft(-le)p Fu(',)f(`)p Ft(-gt)p Fu(',)h(or)f(`)p Ft(-ge)p Fu('.)51 b(These)34 b(arithmetic)h(binary)630 -3470 y(op)s(erators)h(return)e(true)i(if)f Fr(arg1)44 +3807 y(op)s(erators)h(return)e(true)i(if)f Fr(arg1)44 b Fu(is)36 b(equal)g(to,)i(not)e(equal)g(to,)i(less)e(than,)h(less)f -(than)f(or)630 3580 y(equal)29 b(to,)g(greater)h(than,)e(or)g(greater)i +(than)f(or)630 3916 y(equal)29 b(to,)g(greater)h(than,)e(or)g(greater)i (than)d(or)i(equal)f(to)h Fr(arg2)p Fu(,)h(resp)s(ectiv)m(ely)-8 -b(.)42 b Fr(Arg1)36 b Fu(and)630 3689 y Fr(arg2)41 b +b(.)42 b Fr(Arg1)36 b Fu(and)630 4026 y Fr(arg2)41 b Fu(ma)m(y)34 b(b)s(e)f(p)s(ositiv)m(e)h(or)f(negativ)m(e)j(in)m (tegers.)50 b(When)33 b(used)g(with)g(the)g Ft([[)g Fu(command,)630 -3799 y Fr(Arg1)41 b Fu(and)33 b Fr(Arg2)41 b Fu(are)33 +4136 y Fr(Arg1)41 b Fu(and)33 b Fr(Arg2)41 b Fu(are)33 b(ev)-5 b(aluated)35 b(as)e(arithmetic)i(expressions)d(\(see)j(Section) -f(6.5)g([Shell)630 3908 y(Arithmetic],)e(page)f(98\).)150 -4145 y Fs(6.5)68 b(Shell)45 b(Arithmetic)150 4304 y Fu(The)26 +f(6.5)g([Shell)630 4245 y(Arithmetic],)e(page)f(101\).)150 +4471 y Fs(6.5)68 b(Shell)45 b(Arithmetic)150 4630 y Fu(The)26 b(shell)h(allo)m(ws)h(arithmetic)f(expressions)g(to)g(b)s(e)f(ev)-5 b(aluated,)29 b(as)d(one)h(of)g(the)g(shell)f(expansions)h(or)f(b)m(y) -150 4414 y(using)h(the)g Ft(\(\()g Fu(comp)s(ound)e(command,)j(the)g +150 4740 y(using)h(the)g Ft(\(\()g Fu(comp)s(ound)e(command,)j(the)g Ft(let)e Fu(builtin,)i(or)f(the)g Ft(-i)g Fu(option)h(to)f(the)h -Ft(declare)d Fu(builtin.)275 4546 y(Ev)-5 b(aluation)27 +Ft(declare)d Fu(builtin.)275 4867 y(Ev)-5 b(aluation)27 b(is)g(done)f(in)g(\014xed-width)g(in)m(tegers)i(with)e(no)h(c)m(hec)m (k)h(for)e(o)m(v)m(er\015o)m(w,)j(though)d(division)h(b)m(y)150 -4656 y(0)g(is)g(trapp)s(ed)f(and)h(\015agged)g(as)h(an)f(error.)39 +4976 y(0)g(is)g(trapp)s(ed)f(and)h(\015agged)g(as)h(an)f(error.)39 b(The)26 b(op)s(erators)h(and)g(their)g(precedence,)h(asso)s(ciativit)m -(y)-8 b(,)32 b(and)150 4765 y(v)-5 b(alues)35 b(are)h(the)f(same)g(as)h +(y)-8 b(,)32 b(and)150 5086 y(v)-5 b(alues)35 b(are)h(the)f(same)g(as)h (in)e(the)h(C)g(language.)56 b(The)35 b(follo)m(wing)h(list)g(of)f(op)s -(erators)g(is)g(group)s(ed)f(in)m(to)150 4875 y(lev)m(els)27 +(erators)g(is)g(group)s(ed)f(in)m(to)150 5196 y(lev)m(els)27 b(of)f(equal-precedence)i(op)s(erators.)39 b(The)25 b(lev)m(els)j(are)e (listed)h(in)e(order)h(of)g(decreasing)g(precedence.)150 -5030 y Fj(id)p Ft(++)j Fj(id)p Ft(--)67 b Fu(v)-5 b(ariable)31 -b(p)s(ost-incremen)m(t)g(and)f(p)s(ost-decremen)m(t)150 -5185 y Ft(++)p Fj(id)f Ft(--)p Fj(id)67 b Fu(v)-5 b(ariable)31 -b(pre-incremen)m(t)g(and)f(pre-decremen)m(t)150 5340 -y Ft(-)g(+)354 b Fu(unary)29 b(min)m(us)h(and)g(plus)p +5340 y Fj(id)p Ft(++)j Fj(id)p Ft(--)67 b Fu(v)-5 b(ariable)31 +b(p)s(ost-incremen)m(t)g(and)f(p)s(ost-decremen)m(t)p eop end -%%Page: 99 105 -TeXDict begin 99 104 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2484 b(99)150 299 y Ft(!)30 -b(~)354 b Fu(logical)33 b(and)d(bit)m(wise)h(negation)150 -482 y Ft(**)384 b Fu(exp)s(onen)m(tiation)150 664 y Ft(*)30 -b(/)g(\045)276 b Fu(m)m(ultiplication,)33 b(division,)d(remainder)150 -847 y Ft(+)g(-)354 b Fu(addition,)31 b(subtraction)150 -1030 y Ft(<<)f(>>)258 b Fu(left)31 b(and)f(righ)m(t)h(bit)m(wise)g -(shifts)150 1213 y Ft(<=)f(>=)g(<)g(>)102 b Fu(comparison)150 -1395 y Ft(==)30 b(!=)258 b Fu(equalit)m(y)32 b(and)e(inequalit)m(y)150 -1578 y Ft(&)432 b Fu(bit)m(wise)31 b(AND)150 1761 y Ft(^)432 -b Fu(bit)m(wise)31 b(exclusiv)m(e)h(OR)150 1944 y Ft(|)432 -b Fu(bit)m(wise)31 b(OR)150 2126 y Ft(&&)384 b Fu(logical)33 -b(AND)150 2309 y Ft(||)384 b Fu(logical)33 b(OR)150 2492 -y Ft(expr)c(?)h(expr)f(:)h(expr)630 2601 y Fu(conditional)i(op)s -(erator)150 2784 y Ft(=)e(*=)g(/=)g(\045=)f(+=)h(-=)g(<<=)f(>>=)h(&=)g -(^=)f(|=)630 2894 y Fu(assignmen)m(t)150 3076 y Ft(expr1)g(,)h(expr2) -630 3186 y Fu(comma)275 3380 y(Shell)38 b(v)-5 b(ariables)39 -b(are)g(allo)m(w)m(ed)i(as)e(op)s(erands;)i(parameter)e(expansion)g(is) -f(p)s(erformed)g(b)s(efore)g(the)150 3490 y(expression)g(is)g(ev)-5 -b(aluated.)66 b(Within)38 b(an)h(expression,)h(shell)e(v)-5 -b(ariables)39 b(ma)m(y)g(also)g(b)s(e)f(referenced)g(b)m(y)150 -3600 y(name)31 b(without)f(using)g(the)h(parameter)g(expansion)f(syn)m -(tax.)42 b(A)31 b(shell)f(v)-5 b(ariable)32 b(that)f(is)f(n)m(ull)h(or) -f(unset)150 3709 y(ev)-5 b(aluates)41 b(to)f(0)g(when)e(referenced)h(b) -m(y)g(name)h(without)f(using)g(the)g(parameter)h(expansion)f(syn)m -(tax.)150 3819 y(The)c(v)-5 b(alue)37 b(of)f(a)h(v)-5 -b(ariable)36 b(is)g(ev)-5 b(aluated)38 b(as)e(an)g(arithmetic)h -(expression)f(when)f(it)h(is)g(referenced,)i(or)150 3928 -y(when)27 b(a)h(v)-5 b(ariable)29 b(whic)m(h)e(has)h(b)s(een)f(giv)m -(en)i(the)f Ft(integer)e Fu(attribute)i(using)g(`)p Ft(declare)g(-i)p -Fu(')g(is)g(assigned)150 4038 y(a)33 b(v)-5 b(alue.)49 +%%Page: 102 108 +TeXDict begin 102 107 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(102)150 299 y Ft(++)p +Fj(id)29 b Ft(--)p Fj(id)67 b Fu(v)-5 b(ariable)31 b(pre-incremen)m(t)g +(and)f(pre-decremen)m(t)150 463 y Ft(-)g(+)354 b Fu(unary)29 +b(min)m(us)h(and)g(plus)150 627 y Ft(!)g(~)354 b Fu(logical)33 +b(and)d(bit)m(wise)h(negation)150 791 y Ft(**)384 b Fu(exp)s(onen)m +(tiation)150 955 y Ft(*)30 b(/)g(\045)276 b Fu(m)m(ultiplication,)33 +b(division,)d(remainder)150 1119 y Ft(+)g(-)354 b Fu(addition,)31 +b(subtraction)150 1283 y Ft(<<)f(>>)258 b Fu(left)31 +b(and)f(righ)m(t)h(bit)m(wise)g(shifts)150 1447 y Ft(<=)f(>=)g(<)g(>) +102 b Fu(comparison)150 1611 y Ft(==)30 b(!=)258 b Fu(equalit)m(y)32 +b(and)e(inequalit)m(y)150 1775 y Ft(&)432 b Fu(bit)m(wise)31 +b(AND)150 1939 y Ft(^)432 b Fu(bit)m(wise)31 b(exclusiv)m(e)h(OR)150 +2103 y Ft(|)432 b Fu(bit)m(wise)31 b(OR)150 2267 y Ft(&&)384 +b Fu(logical)33 b(AND)150 2431 y Ft(||)384 b Fu(logical)33 +b(OR)150 2595 y Ft(expr)c(?)h(if-true-expr)d(:)j(if-false-expr)630 +2704 y Fu(conditional)i(op)s(erator)150 2868 y Ft(=)e(*=)g(/=)g(\045=)f +(+=)h(-=)g(<<=)f(>>=)h(&=)g(^=)f(|=)630 2978 y Fu(assignmen)m(t)150 +3142 y Ft(expr1)g(,)h(expr2)630 3252 y Fu(comma)275 3418 +y(Shell)38 b(v)-5 b(ariables)39 b(are)g(allo)m(w)m(ed)i(as)e(op)s +(erands;)i(parameter)e(expansion)g(is)f(p)s(erformed)g(b)s(efore)g(the) +150 3528 y(expression)g(is)g(ev)-5 b(aluated.)66 b(Within)38 +b(an)h(expression,)h(shell)e(v)-5 b(ariables)39 b(ma)m(y)g(also)g(b)s +(e)f(referenced)g(b)m(y)150 3637 y(name)31 b(without)f(using)g(the)h +(parameter)g(expansion)f(syn)m(tax.)42 b(A)31 b(shell)f(v)-5 +b(ariable)32 b(that)f(is)f(n)m(ull)h(or)f(unset)150 3747 +y(ev)-5 b(aluates)41 b(to)f(0)g(when)e(referenced)h(b)m(y)g(name)h +(without)f(using)g(the)g(parameter)h(expansion)f(syn)m(tax.)150 +3856 y(The)c(v)-5 b(alue)37 b(of)f(a)h(v)-5 b(ariable)36 +b(is)g(ev)-5 b(aluated)38 b(as)e(an)g(arithmetic)h(expression)f(when)f +(it)h(is)g(referenced,)i(or)150 3966 y(when)27 b(a)h(v)-5 +b(ariable)29 b(whic)m(h)e(has)h(b)s(een)f(giv)m(en)i(the)f +Ft(integer)e Fu(attribute)i(using)g(`)p Ft(declare)g(-i)p +Fu(')g(is)g(assigned)150 4075 y(a)33 b(v)-5 b(alue.)49 b(A)33 b(n)m(ull)g(v)-5 b(alue)34 b(ev)-5 b(aluates)34 b(to)g(0.)49 b(A)33 b(shell)g(v)-5 b(ariable)34 b(need)e(not)i(ha)m(v)m -(e)g(its)f Ft(integer)e Fu(attribute)150 4148 y(turned)e(on)h(to)i(b)s -(e)d(used)h(in)g(an)g(expression.)275 4305 y(In)m(teger)41 +(e)g(its)f Ft(integer)e Fu(attribute)150 4185 y(turned)e(on)h(to)i(b)s +(e)d(used)h(in)g(an)g(expression.)275 4324 y(In)m(teger)41 b(constan)m(ts)g(follo)m(w)h(the)e(C)g(language)i(de\014nition,)g -(without)f(su\016xes)e(or)h(c)m(haracter)i(con-)150 4415 +(without)f(su\016xes)e(or)h(c)m(haracter)i(con-)150 4434 y(stan)m(ts.)f(Constan)m(ts)31 b(with)f(a)g(leading)h(0)f(are)h(in)m (terpreted)f(as)g(o)s(ctal)i(n)m(um)m(b)s(ers.)39 b(A)30 b(leading)h(`)p Ft(0x)p Fu(')f(or)g(`)p Ft(0X)p Fu(')150 -4525 y(denotes)g(hexadecimal.)42 b(Otherwise,)30 b(n)m(um)m(b)s(ers)f +4543 y(denotes)g(hexadecimal.)42 b(Otherwise,)30 b(n)m(um)m(b)s(ers)f (tak)m(e)i(the)f(form)g([)p Fr(base)5 b Ft(#)p Fu(])p Fr(n)p Fu(,)30 b(where)f(the)i(optional)g Fr(base)150 -4634 y Fu(is)e(a)h(decimal)g(n)m(um)m(b)s(er)e(b)s(et)m(w)m(een)h(2)h +4653 y Fu(is)e(a)h(decimal)g(n)m(um)m(b)s(er)e(b)s(et)m(w)m(een)h(2)h (and)e(64)i(represen)m(ting)g(the)f(arithmetic)i(base,)e(and)g -Fr(n)g Fu(is)g(a)g(n)m(um)m(b)s(er)150 4744 y(in)g(that)i(base.)40 +Fr(n)g Fu(is)g(a)g(n)m(um)m(b)s(er)150 4763 y(in)g(that)i(base.)40 b(If)30 b Fr(base)5 b Ft(#)30 b Fu(is)f(omitted,)i(then)f(base)g(10)g (is)g(used.)40 b(When)30 b(sp)s(ecifying)f Fr(n)p Fu(,)h(if)f(a)i -(non-digit)f(is)150 4853 y(required,)k(the)g(digits)h(greater)g(than)e +(non-digit)f(is)150 4872 y(required,)k(the)g(digits)h(greater)g(than)e (9)i(are)f(represen)m(ted)g(b)m(y)f(the)h(lo)m(w)m(ercase)j(letters,)f -(the)e(upp)s(ercase)150 4963 y(letters,)26 b(`)p Ft(@)p +(the)e(upp)s(ercase)150 4982 y(letters,)26 b(`)p Ft(@)p Fu(',)g(and)d(`)p Ft(_)p Fu(',)i(in)e(that)i(order.)38 b(If)23 b Fr(base)29 b Fu(is)23 b(less)h(than)g(or)f(equal)h(to)h(36,)h -(lo)m(w)m(ercase)g(and)d(upp)s(ercase)150 5073 y(letters)32 +(lo)m(w)m(ercase)g(and)d(upp)s(ercase)150 5091 y(letters)32 b(ma)m(y)f(b)s(e)e(used)h(in)m(terc)m(hangeably)i(to)f(represen)m(t)g (n)m(um)m(b)s(ers)e(b)s(et)m(w)m(een)i(10)g(and)f(35.)275 5230 y(Op)s(erators)44 b(are)h(ev)-5 b(aluated)46 b(in)f(order)f(of)h (precedence.)85 b(Sub-expressions)44 b(in)g(paren)m(theses)i(are)150 5340 y(ev)-5 b(aluated)32 b(\014rst)d(and)h(ma)m(y)h(o)m(v)m(erride)g (the)g(precedence)g(rules)f(ab)s(o)m(v)m(e.)p eop end -%%Page: 100 106 -TeXDict begin 100 105 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(100)150 299 y Fs(6.6)68 -b(Aliases)150 458 y Fr(Aliases)41 b Fu(allo)m(w)d(a)f(string)f(to)h(b)s -(e)f(substituted)g(for)g(a)g(w)m(ord)g(when)g(it)h(is)f(used)f(as)i -(the)g(\014rst)e(w)m(ord)h(of)h(a)150 568 y(simple)32 -b(command.)45 b(The)31 b(shell)i(main)m(tains)f(a)h(list)f(of)g -(aliases)i(that)e(ma)m(y)h(b)s(e)e(set)h(and)g(unset)f(with)h(the)150 -677 y Ft(alias)d Fu(and)h Ft(unalias)e Fu(builtin)i(commands.)275 -810 y(The)f(\014rst)f(w)m(ord)i(of)f(eac)m(h)i(simple)f(command,)g(if)f -(unquoted,)g(is)h(c)m(hec)m(k)m(ed)h(to)g(see)f(if)g(it)g(has)f(an)g -(alias.)150 920 y(If)24 b(so,)i(that)g(w)m(ord)e(is)h(replaced)g(b)m(y) -f(the)h(text)h(of)e(the)h(alias.)40 b(The)24 b(c)m(haracters)i(`)p -Ft(/)p Fu(',)h(`)p Ft($)p Fu(',)f(`)p Ft(`)p Fu(',)g(`)p -Ft(=)p Fu(')f(and)f(an)m(y)h(of)150 1030 y(the)e(shell)g(metac)m -(haracters)i(or)e(quoting)g(c)m(haracters)h(listed)g(ab)s(o)m(v)m(e)g -(ma)m(y)f(not)g(app)s(ear)f(in)h(an)g(alias)h(name.)150 -1139 y(The)e(replacemen)m(t)h(text)g(ma)m(y)g(con)m(tain)h(an)m(y)e(v) --5 b(alid)23 b(shell)f(input,)h(including)f(shell)g(metac)m(haracters.) -40 b(The)150 1249 y(\014rst)35 b(w)m(ord)g(of)h(the)g(replacemen)m(t)i -(text)e(is)g(tested)h(for)e(aliases,)k(but)c(a)h(w)m(ord)g(that)g(is)g -(iden)m(tical)i(to)e(an)150 1358 y(alias)c(b)s(eing)f(expanded)f(is)h -(not)g(expanded)f(a)h(second)g(time.)43 b(This)30 b(means)h(that)g(one) -g(ma)m(y)h(alias)g Ft(ls)e Fu(to)150 1468 y Ft("ls)f(-F")p -Fu(,)f(for)f(instance,)i(and)d(Bash)i(do)s(es)f(not)h(try)f(to)h -(recursiv)m(ely)g(expand)e(the)i(replacemen)m(t)h(text.)40 -b(If)150 1578 y(the)30 b(last)h(c)m(haracter)g(of)g(the)f(alias)h(v)-5 -b(alue)30 b(is)g(a)g Ft(blank)p Fu(,)f(then)h(the)g(next)g(command)g(w) -m(ord)f(follo)m(wing)j(the)150 1687 y(alias)g(is)e(also)h(c)m(hec)m(k)m -(ed)i(for)d(alias)h(expansion.)275 1820 y(Aliases)e(are)f(created)i -(and)d(listed)i(with)f(the)g Ft(alias)f Fu(command,)h(and)g(remo)m(v)m -(ed)h(with)f(the)g Ft(unalias)150 1930 y Fu(command.)275 -2063 y(There)44 b(is)h(no)g(mec)m(hanism)g(for)f(using)h(argumen)m(ts)g -(in)f(the)h(replacemen)m(t)i(text,)i(as)d(in)e Ft(csh)p -Fu(.)83 b(If)150 2172 y(argumen)m(ts)31 b(are)f(needed,)h(use)f(a)h -(shell)f(function)g(\(see)i(Section)f(3.3)g([Shell)g(F)-8 -b(unctions],)31 b(page)g(19\).)275 2305 y(Aliases)i(are)h(not)e -(expanded)g(when)g(the)h(shell)g(is)g(not)g(in)m(teractiv)m(e,)j -(unless)c(the)h Ft(expand_aliases)150 2415 y Fu(shell)e(option)f(is)h -(set)g(using)f Ft(shopt)f Fu(\(see)i(Section)g(4.3.2)h([The)e(Shopt)g -(Builtin],)h(page)g(71\).)275 2548 y(The)38 b(rules)h(concerning)h(the) -f(de\014nition)g(and)g(use)g(of)g(aliases)i(are)e(somewhat)h -(confusing.)67 b(Bash)150 2657 y(alw)m(a)m(ys)37 b(reads)f(at)h(least)g -(one)f(complete)i(line)e(of)g(input,)h(and)e(all)i(lines)f(that)g(mak)m -(e)h(up)e(a)h(comp)s(ound)150 2767 y(command,)29 b(b)s(efore)g -(executing)i(an)m(y)e(of)h(the)f(commands)g(on)g(that)h(line)f(or)h -(the)f(comp)s(ound)f(command.)150 2877 y(Aliases)g(are)g(expanded)e -(when)g(a)i(command)f(is)g(read,)h(not)f(when)f(it)i(is)f(executed.)41 -b(Therefore,)28 b(an)f(alias)150 2986 y(de\014nition)36 -b(app)s(earing)h(on)f(the)h(same)g(line)g(as)g(another)g(command)f(do)s -(es)g(not)h(tak)m(e)i(e\013ect)f(un)m(til)f(the)150 3096 -y(next)i(line)g(of)g(input)f(is)h(read.)66 b(The)38 b(commands)h(follo) -m(wing)h(the)f(alias)h(de\014nition)e(on)h(that)g(line)h(are)150 -3205 y(not)33 b(a\013ected)h(b)m(y)f(the)g(new)f(alias.)49 -b(This)32 b(b)s(eha)m(vior)h(is)g(also)g(an)g(issue)g(when)e(functions) -i(are)g(executed.)150 3315 y(Aliases)c(are)g(expanded)e(when)g(a)i -(function)e(de\014nition)h(is)g(read,)h(not)f(when)g(the)g(function)g -(is)g(executed,)150 3425 y(b)s(ecause)36 b(a)h(function)f(de\014nition) -f(is)i(itself)g(a)f(command.)58 b(As)36 b(a)h(consequence,)h(aliases)g -(de\014ned)d(in)h(a)150 3534 y(function)28 b(are)h(not)g(a)m(v)-5 +%%Page: 103 109 +TeXDict begin 103 108 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(103)150 299 y Fs(6.6)68 +b(Aliases)150 458 y Fr(Aliases)31 b Fu(allo)m(w)d(a)f(string)f(to)i(b)s +(e)d(substituted)h(for)g(a)h(w)m(ord)f(that)h(is)g(in)f(a)h(p)s +(osition)f(in)g(the)h(input)e(where)h(it)150 568 y(can)33 +b(b)s(e)e(the)i(\014rst)f(w)m(ord)g(of)g(a)h(simple)f(command.)47 +b(Aliases)34 b(ha)m(v)m(e)f(names)f(and)g(corresp)s(onding)g(v)-5 +b(alues)150 677 y(that)25 b(are)g(set)g(and)f(unset)g(using)g(the)h +Ft(alias)e Fu(and)h Ft(unalias)f Fu(builtin)h(commands)g(\(see)i +(Chapter)e(4)h([Shell)150 787 y(Builtin)31 b(Commands],)f(page)h(49\).) +275 934 y(If)g(the)g(shell)h(reads)f(an)g(unquoted)g(w)m(ord)g(in)g +(the)h(righ)m(t)g(p)s(osition,)g(it)g(c)m(hec)m(ks)h(the)f(w)m(ord)f +(to)h(see)g(if)f(it)150 1044 y(matc)m(hes)h(an)f(alias)h(name.)43 +b(If)30 b(it)i(matc)m(hes,)g(the)f(shell)g(replaces)h(the)f(w)m(ord)g +(with)f(the)i(alias)g(v)-5 b(alue,)32 b(and)150 1153 +y(reads)h(that)h(v)-5 b(alue)33 b(as)h(if)f(it)h(had)e(b)s(een)h(read)g +(instead)g(of)h(the)f(w)m(ord.)49 b(The)33 b(shell)g(do)s(esn't)g(lo)s +(ok)h(at)g(an)m(y)150 1263 y(c)m(haracters)e(follo)m(wing)g(the)e(w)m +(ord)g(b)s(efore)g(attempting)i(alias)f(substitution.)275 +1410 y(The)d(c)m(haracters)i(`)p Ft(/)p Fu(',)f(`)p Ft($)p +Fu(',)g(`)p Ft(`)p Fu(',)g(`)p Ft(=)p Fu(')g(and)f(an)m(y)h(of)g(the)f +(shell)h(metac)m(haracters)i(or)e(quoting)f(c)m(haracters)150 +1519 y(listed)g(ab)s(o)m(v)m(e)h(ma)m(y)f(not)g(app)s(ear)f(in)g(an)g +(alias)i(name.)40 b(The)27 b(replacemen)m(t)i(text)g(ma)m(y)f(con)m +(tain)h(an)m(y)f(v)-5 b(alid)150 1629 y(shell)28 b(input,)g(including)g +(shell)g(metac)m(haracters.)42 b(The)28 b(\014rst)f(w)m(ord)h(of)g(the) +g(replacemen)m(t)i(text)f(is)f(tested)150 1738 y(for)e(aliases,)j(but)d +(a)h(w)m(ord)f(that)h(is)g(iden)m(tical)h(to)f(an)g(alias)g(b)s(eing)f +(expanded)g(is)h(not)f(expanded)g(a)h(second)150 1848 +y(time.)41 b(This)28 b(means)h(that)g(one)g(ma)m(y)h(alias)g +Ft(ls)e Fu(to)i Ft("ls)f(-F")p Fu(,)g(for)f(instance,)j(and)d(Bash)h +(do)s(es)f(not)h(try)g(to)150 1958 y(recursiv)m(ely)i(expand)f(the)g +(replacemen)m(t)i(text.)275 2104 y(If)25 b(the)i(last)g(c)m(haracter)h +(of)e(the)g(alias)i(v)-5 b(alue)26 b(is)h(a)f Ft(blank)p +Fu(,)g(then)g(the)g(next)h(command)f(w)m(ord)f(follo)m(wing)150 +2214 y(the)31 b(alias)g(is)g(also)g(c)m(hec)m(k)m(ed)h(for)e(alias)i +(expansion.)275 2361 y(Aliases)d(are)f(created)i(and)d(listed)i(with)f +(the)g Ft(alias)f Fu(command,)h(and)g(remo)m(v)m(ed)h(with)f(the)g +Ft(unalias)150 2471 y Fu(command.)275 2617 y(There)44 +b(is)h(no)g(mec)m(hanism)g(for)f(using)h(argumen)m(ts)g(in)f(the)h +(replacemen)m(t)i(text,)i(as)d(in)e Ft(csh)p Fu(.)83 +b(If)150 2727 y(argumen)m(ts)44 b(are)g(needed,)j(use)d(a)g(shell)g +(function)g(\(see)g(Section)h(3.3)g([Shell)f(F)-8 b(unctions],)48 +b(page)d(19\))150 2837 y(instead.)275 2984 y(Aliases)33 +b(are)h(not)e(expanded)g(when)g(the)h(shell)g(is)g(not)g(in)m(teractiv) +m(e,)j(unless)c(the)h Ft(expand_aliases)150 3093 y Fu(shell)e(option)f +(is)h(set)g(using)f Ft(shopt)f Fu(\(see)i(Section)g(4.3.2)h([The)e +(Shopt)g(Builtin],)h(page)g(73\).)275 3240 y(The)38 b(rules)h +(concerning)h(the)f(de\014nition)g(and)g(use)g(of)g(aliases)i(are)e +(somewhat)h(confusing.)67 b(Bash)150 3350 y(alw)m(a)m(ys)37 +b(reads)f(at)h(least)g(one)f(complete)i(line)e(of)g(input,)h(and)e(all) +i(lines)f(that)g(mak)m(e)h(up)e(a)h(comp)s(ound)150 3459 +y(command,)29 b(b)s(efore)g(executing)i(an)m(y)e(of)h(the)f(commands)g +(on)g(that)h(line)f(or)h(the)f(comp)s(ound)f(command.)150 +3569 y(Aliases)g(are)g(expanded)e(when)g(a)i(command)f(is)g(read,)h +(not)f(when)f(it)i(is)f(executed.)41 b(Therefore,)28 +b(an)f(alias)150 3678 y(de\014nition)36 b(app)s(earing)h(on)f(the)h +(same)g(line)g(as)g(another)g(command)f(do)s(es)g(not)h(tak)m(e)i +(e\013ect)f(un)m(til)f(the)150 3788 y(next)i(line)g(of)g(input)f(is)h +(read.)66 b(The)38 b(commands)h(follo)m(wing)h(the)f(alias)h +(de\014nition)e(on)h(that)g(line)h(are)150 3898 y(not)33 +b(a\013ected)h(b)m(y)f(the)g(new)f(alias.)49 b(This)32 +b(b)s(eha)m(vior)h(is)g(also)g(an)g(issue)g(when)e(functions)i(are)g +(executed.)150 4007 y(Aliases)c(are)g(expanded)e(when)g(a)i(function)e +(de\014nition)h(is)g(read,)h(not)f(when)g(the)g(function)g(is)g +(executed,)150 4117 y(b)s(ecause)36 b(a)h(function)f(de\014nition)f(is) +i(itself)g(a)f(command.)58 b(As)36 b(a)h(consequence,)h(aliases)g +(de\014ned)d(in)h(a)150 4226 y(function)28 b(are)h(not)g(a)m(v)-5 b(ailable)31 b(un)m(til)e(after)g(that)g(function)f(is)g(executed.)41 b(T)-8 b(o)29 b(b)s(e)f(safe,)i(alw)m(a)m(ys)g(put)e(alias)150 -3644 y(de\014nitions)i(on)g(a)h(separate)g(line,)g(and)f(do)g(not)h +4336 y(de\014nitions)i(on)g(a)h(separate)g(line,)g(and)f(do)g(not)h (use)f Ft(alias)f Fu(in)h(comp)s(ound)f(commands.)275 -3777 y(F)-8 b(or)31 b(almost)g(ev)m(ery)g(purp)s(ose,)e(shell)i +4483 y(F)-8 b(or)31 b(almost)g(ev)m(ery)g(purp)s(ose,)e(shell)i (functions)f(are)g(preferred)g(o)m(v)m(er)h(aliases.)150 -4014 y Fs(6.7)68 b(Arra)l(ys)150 4174 y Fu(Bash)33 b(pro)m(vides)g +4742 y Fs(6.7)68 b(Arra)l(ys)150 4902 y Fu(Bash)33 b(pro)m(vides)g (one-dimensional)g(indexed)f(and)h(asso)s(ciativ)m(e)i(arra)m(y)e(v)-5 b(ariables.)49 b(An)m(y)33 b(v)-5 b(ariable)33 b(ma)m(y)150 -4283 y(b)s(e)e(used)h(as)g(an)g(indexed)f(arra)m(y;)j(the)e +5011 y(b)s(e)e(used)h(as)g(an)g(indexed)f(arra)m(y;)j(the)e Ft(declare)e Fu(builtin)h(will)i(explicitly)g(declare)g(an)f(arra)m(y) --8 b(.)46 b(There)32 b(is)150 4393 y(no)h(maxim)m(um)g(limit)h(on)f +-8 b(.)46 b(There)32 b(is)150 5121 y(no)h(maxim)m(um)g(limit)h(on)f (the)g(size)h(of)g(an)f(arra)m(y)-8 b(,)35 b(nor)d(an)m(y)i(requiremen) -m(t)f(that)h(mem)m(b)s(ers)e(b)s(e)g(indexed)150 4503 +m(t)f(that)h(mem)m(b)s(ers)e(b)s(e)g(indexed)150 5230 y(or)26 b(assigned)h(con)m(tiguously)-8 b(.)41 b(Indexed)25 b(arra)m(ys)i(are)f(referenced)g(using)g(in)m(tegers)i(\(including)e -(arithmetic)150 4612 y(expressions)38 b(\(see)h(Section)g(6.5)h([Shell) -e(Arithmetic],)k(page)d(98\)\))h(and)d(are)i(zero-based;)k(asso)s -(ciativ)m(e)150 4722 y(arra)m(ys)37 b(use)f(arbitrary)g(strings.)59 -b(Unless)36 b(otherwise)h(noted,)h(indexed)e(arra)m(y)h(indices)f(m)m -(ust)g(b)s(e)g(non-)150 4831 y(negativ)m(e)d(in)m(tegers.)275 -4964 y(An)26 b(indexed)h(arra)m(y)h(is)f(created)h(automatically)j(if)c -(an)m(y)g(v)-5 b(ariable)28 b(is)g(assigned)f(to)h(using)f(the)g(syn)m -(tax)390 5097 y Fj(name)p Ft([)p Fj(subscript)p Ft(]=)p -Fj(value)150 5230 y Fu(The)34 b Fr(subscript)h Fu(is)g(treated)g(as)g -(an)f(arithmetic)i(expression)e(that)h(m)m(ust)g(ev)-5 -b(aluate)36 b(to)f(a)g(n)m(um)m(b)s(er.)51 b(T)-8 b(o)150 -5340 y(explicitly)32 b(declare)f(an)g(arra)m(y)-8 b(,)31 -b(use)p eop end -%%Page: 101 107 -TeXDict begin 101 106 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(101)390 299 y Ft(declare)46 -b(-a)h Fj(name)150 438 y Fu(The)30 b(syn)m(tax)390 577 -y Ft(declare)46 b(-a)h Fj(name)p Ft([)p Fj(subscript)p -Ft(])150 715 y Fu(is)30 b(also)i(accepted;)g(the)e Fr(subscript)h -Fu(is)g(ignored.)150 854 y(Asso)s(ciativ)m(e)i(arra)m(ys)d(are)h -(created)h(using)390 993 y Ft(declare)46 b(-A)h Fj(name)275 -1132 y Fu(A)m(ttributes)f(ma)m(y)h(b)s(e)e(sp)s(eci\014ed)g(for)h(an)g +(arithmetic)150 5340 y(expressions)34 b(\(see)h(Section)h(6.5)f([Shell) +g(Arithmetic],)i(page)e(101\)\))h(and)e(are)h(zero-based;)i(asso)s +(ciativ)m(e)p eop end +%%Page: 104 110 +TeXDict begin 104 109 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(104)150 299 y(arra)m(ys)37 +b(use)f(arbitrary)g(strings.)59 b(Unless)36 b(otherwise)h(noted,)h +(indexed)e(arra)m(y)h(indices)f(m)m(ust)g(b)s(e)g(non-)150 +408 y(negativ)m(e)d(in)m(tegers.)275 541 y(An)26 b(indexed)h(arra)m(y)h +(is)f(created)h(automatically)j(if)c(an)m(y)g(v)-5 b(ariable)28 +b(is)g(assigned)f(to)h(using)f(the)g(syn)m(tax)390 674 +y Fj(name)p Ft([)p Fj(subscript)p Ft(]=)p Fj(value)150 +806 y Fu(The)34 b Fr(subscript)h Fu(is)g(treated)g(as)g(an)f +(arithmetic)i(expression)e(that)h(m)m(ust)g(ev)-5 b(aluate)36 +b(to)f(a)g(n)m(um)m(b)s(er.)51 b(T)-8 b(o)150 916 y(explicitly)32 +b(declare)f(an)g(arra)m(y)-8 b(,)31 b(use)390 1049 y +Ft(declare)46 b(-a)h Fj(name)150 1181 y Fu(The)30 b(syn)m(tax)390 +1314 y Ft(declare)46 b(-a)h Fj(name)p Ft([)p Fj(subscript)p +Ft(])150 1447 y Fu(is)30 b(also)i(accepted;)g(the)e Fr(subscript)h +Fu(is)g(ignored.)150 1579 y(Asso)s(ciativ)m(e)i(arra)m(ys)d(are)h +(created)h(using)390 1712 y Ft(declare)46 b(-A)h Fj(name)275 +1845 y Fu(A)m(ttributes)f(ma)m(y)h(b)s(e)e(sp)s(eci\014ed)g(for)h(an)g (arra)m(y)g(v)-5 b(ariable)47 b(using)e(the)h Ft(declare)e -Fu(and)h Ft(readonly)150 1241 y Fu(builtins.)40 b(Eac)m(h)31 +Fu(and)h Ft(readonly)150 1954 y Fu(builtins.)40 b(Eac)m(h)31 b(attribute)g(applies)g(to)g(all)g(mem)m(b)s(ers)f(of)g(an)h(arra)m(y) --8 b(.)275 1380 y(Arra)m(ys)30 b(are)h(assigned)f(to)h(using)f(comp)s -(ound)f(assignmen)m(ts)i(of)g(the)f(form)390 1519 y Fj(name)p -Ft(=\()p Fj(value1)44 b(value2)j Ft(...)f(\))150 1658 +-8 b(.)275 2087 y(Arra)m(ys)30 b(are)h(assigned)f(to)h(using)f(comp)s +(ound)f(assignmen)m(ts)i(of)g(the)f(form)390 2220 y Fj(name)p +Ft(=\()p Fj(value1)44 b(value2)j Ft(...)f(\))150 2352 y Fu(where)33 b(eac)m(h)i Fr(v)-5 b(alue)40 b Fu(ma)m(y)34 b(b)s(e)g(of)g(the)g(form)f Ft([)p Fj(subscript)p Ft(]=)p Fr(string)p Fu(.)48 b(Indexed)33 b(arra)m(y)h(assignmen)m(ts)h(do)150 -1767 y(not)26 b(require)f(an)m(ything)g(but)g Fr(string)p +2462 y(not)26 b(require)f(an)m(ything)g(but)g Fr(string)p Fu(.)39 b(When)25 b(assigning)h(to)g(indexed)f(arra)m(ys,)i(if)e(the)h -(optional)g(subscript)150 1877 y(is)h(supplied,)f(that)h(index)g(is)f +(optional)g(subscript)150 2571 y(is)h(supplied,)f(that)h(index)g(is)f (assigned)h(to;)i(otherwise)e(the)g(index)g(of)f(the)h(elemen)m(t)i -(assigned)d(is)h(the)g(last)150 1987 y(index)j(assigned)h(to)g(b)m(y)f +(assigned)d(is)h(the)g(last)150 2681 y(index)j(assigned)h(to)g(b)m(y)f (the)g(statemen)m(t)j(plus)c(one.)41 b(Indexing)30 b(starts)h(at)g -(zero.)275 2125 y(Eac)m(h)26 b Fr(v)-5 b(alue)32 b Fu(in)26 -b(the)h(list)g(undergo)s(es)e(all)i(the)g(shell)f(expansions)g(describ) -s(ed)f(ab)s(o)m(v)m(e)j(\(see)f(Section)g(3.5)150 2235 -y([Shell)j(Expansions],)h(page)g(24\).)275 2374 y(When)k(assigning)i -(to)g(an)f(asso)s(ciativ)m(e)i(arra)m(y)-8 b(,)39 b(the)d(w)m(ords)f -(in)h(a)h(comp)s(ound)d(assignmen)m(t)j(ma)m(y)g(b)s(e)150 -2483 y(either)31 b(assignmen)m(t)h(statemen)m(ts,)h(for)e(whic)m(h)g -(the)g(subscript)f(is)h(required,)g(or)g(a)g(list)h(of)f(w)m(ords)f -(that)i(is)150 2593 y(in)m(terpreted)g(as)g(a)g(sequence)f(of)h -(alternating)h(k)m(eys)f(and)f(v)-5 b(alues:)44 b Fr(name)5 -b Fu(=\()p Fr(k)m(ey1)40 b(v)-5 b(alue1)40 b(k)m(ey2)g(v)-5 -b(alue2)156 2703 y Fu(.)22 b(.)g(.)47 b(\).)57 b(These)35 -b(are)i(treated)f(iden)m(tically)i(to)e Fr(name)5 b Fu(=\()36 -b([)p Fr(k)m(ey1)7 b Fu(]=)p Fr(v)-5 b(alue1)46 b Fu([)p -Fr(k)m(ey2)7 b Fu(]=)p Fr(v)-5 b(alue2)51 b Fu(.)22 b(.)h(.)46 -b(\).)57 b(The)150 2812 y(\014rst)25 b(w)m(ord)f(in)h(the)h(list)g -(determines)f(ho)m(w)g(the)h(remaining)f(w)m(ords)g(are)h(in)m -(terpreted;)h(all)f(assignmen)m(ts)g(in)150 2922 y(a)31 -b(list)f(m)m(ust)h(b)s(e)e(of)h(the)h(same)f(t)m(yp)s(e.)41 -b(When)30 b(using)g(k)m(ey/v)-5 b(alue)32 b(pairs,)e(the)g(k)m(eys)h -(ma)m(y)g(not)f(b)s(e)g(missing)150 3031 y(or)g(empt)m(y;)h(a)g -(\014nal)f(missing)g(v)-5 b(alue)31 b(is)g(treated)g(lik)m(e)h(the)e -(empt)m(y)h(string.)275 3170 y(This)f(syn)m(tax)j(is)e(also)i(accepted) -g(b)m(y)f(the)f Ft(declare)f Fu(builtin.)44 b(Individual)31 -b(arra)m(y)h(elemen)m(ts)h(ma)m(y)g(b)s(e)150 3280 y(assigned)e(to)g -(using)f(the)g Fj(name)p Ft([)p Fj(subscript)p Ft(]=)p -Fj(value)25 b Fu(syn)m(tax)31 b(in)m(tro)s(duced)e(ab)s(o)m(v)m(e.)275 -3419 y(When)h(assigning)h(to)h(an)e(indexed)g(arra)m(y)-8 +(zero.)275 2814 y(Eac)m(h)36 b Fr(v)-5 b(alue)41 b Fu(in)35 +b(the)h(list)h(undergo)s(es)d(the)i(shell)g(expansions)f(describ)s(ed)g +(ab)s(o)m(v)m(e)i(\(see)f(Section)h(3.5)150 2923 y([Shell)e +(Expansions],)g(page)g(24\),)i(but)d Fr(v)-5 b(alue)5 +b Fu(s)35 b(that)g(are)g(v)-5 b(alid)35 b(v)-5 b(ariable)35 +b(assignmen)m(ts)h(including)e(the)150 3033 y(brac)m(k)m(ets)22 +b(and)e(subscript)f(do)h(not)h(undergo)f(brace)h(expansion)f(and)g(w)m +(ord)g(splitting,)k(as)c(with)h(individual)150 3142 y(v)-5 +b(ariable)31 b(assignmen)m(ts.)275 3275 y(When)k(assigning)i(to)g(an)f +(asso)s(ciativ)m(e)i(arra)m(y)-8 b(,)39 b(the)d(w)m(ords)f(in)h(a)h +(comp)s(ound)d(assignmen)m(t)j(ma)m(y)g(b)s(e)150 3385 +y(either)31 b(assignmen)m(t)h(statemen)m(ts,)h(for)e(whic)m(h)g(the)g +(subscript)f(is)h(required,)g(or)g(a)g(list)h(of)f(w)m(ords)f(that)i +(is)150 3494 y(in)m(terpreted)g(as)g(a)g(sequence)f(of)h(alternating)h +(k)m(eys)f(and)f(v)-5 b(alues:)44 b Fr(name)5 b Fu(=\()p +Fr(k)m(ey1)40 b(v)-5 b(alue1)40 b(k)m(ey2)g(v)-5 b(alue2)156 +3604 y Fu(.)22 b(.)g(.)47 b(\).)57 b(These)35 b(are)i(treated)f(iden)m +(tically)i(to)e Fr(name)5 b Fu(=\()36 b([)p Fr(k)m(ey1)7 +b Fu(]=)p Fr(v)-5 b(alue1)46 b Fu([)p Fr(k)m(ey2)7 b +Fu(]=)p Fr(v)-5 b(alue2)51 b Fu(.)22 b(.)h(.)46 b(\).)57 +b(The)150 3713 y(\014rst)25 b(w)m(ord)f(in)h(the)h(list)g(determines)f +(ho)m(w)g(the)h(remaining)f(w)m(ords)g(are)h(in)m(terpreted;)h(all)f +(assignmen)m(ts)g(in)150 3823 y(a)31 b(list)f(m)m(ust)h(b)s(e)e(of)h +(the)h(same)f(t)m(yp)s(e.)41 b(When)30 b(using)g(k)m(ey/v)-5 +b(alue)32 b(pairs,)e(the)g(k)m(eys)h(ma)m(y)g(not)f(b)s(e)g(missing)150 +3933 y(or)g(empt)m(y;)h(a)g(\014nal)f(missing)g(v)-5 +b(alue)31 b(is)g(treated)g(lik)m(e)h(the)e(empt)m(y)h(string.)275 +4065 y(This)f(syn)m(tax)j(is)e(also)i(accepted)g(b)m(y)f(the)f +Ft(declare)f Fu(builtin.)44 b(Individual)31 b(arra)m(y)h(elemen)m(ts)h +(ma)m(y)g(b)s(e)150 4175 y(assigned)e(to)g(using)f(the)g +Fj(name)p Ft([)p Fj(subscript)p Ft(]=)p Fj(value)25 b +Fu(syn)m(tax)31 b(in)m(tro)s(duced)e(ab)s(o)m(v)m(e.)275 +4308 y(When)h(assigning)h(to)h(an)e(indexed)g(arra)m(y)-8 b(,)32 b(if)f Fr(name)36 b Fu(is)31 b(subscripted)e(b)m(y)i(a)g -(negativ)m(e)i(n)m(um)m(b)s(er,)c(that)150 3528 y(n)m(um)m(b)s(er)43 +(negativ)m(e)i(n)m(um)m(b)s(er,)c(that)150 4417 y(n)m(um)m(b)s(er)43 b(is)h(in)m(terpreted)h(as)f(relativ)m(e)j(to)e(one)f(greater)i(than)e (the)g(maxim)m(um)g(index)g(of)h Fr(name)p Fu(,)j(so)150 -3638 y(negativ)m(e)30 b(indices)d(coun)m(t)h(bac)m(k)g(from)f(the)g +4527 y(negativ)m(e)30 b(indices)d(coun)m(t)h(bac)m(k)g(from)f(the)g (end)g(of)g(the)h(arra)m(y)-8 b(,)29 b(and)e(an)g(index)g(of)g(-1)h -(references)g(the)f(last)150 3747 y(elemen)m(t.)275 3886 +(references)g(the)f(last)150 4636 y(elemen)m(t.)275 4769 y(The)j(`)p Ft(+=)p Fu(')g(op)s(erator)h(will)g(app)s(end)e(to)i(an)g (arra)m(y)g(v)-5 b(ariable)32 b(when)d(assigning)i(using)g(the)f(comp)s -(ound)150 3996 y(assignmen)m(t)h(syn)m(tax;)g(see)g(Section)g(3.4)h +(ound)150 4879 y(assignmen)m(t)h(syn)m(tax;)g(see)g(Section)g(3.4)h ([Shell)e(P)m(arameters],)i(page)g(21,)f(ab)s(o)m(v)m(e.)275 -4134 y(An)m(y)d(elemen)m(t)h(of)g(an)f(arra)m(y)g(ma)m(y)h(b)s(e)f +5011 y(An)m(y)d(elemen)m(t)h(of)g(an)f(arra)m(y)g(ma)m(y)h(b)s(e)f (referenced)g(using)g Ft(${)p Fj(name)p Ft([)p Fj(subscript)p -Ft(]})p Fu(.)35 b(The)27 b(braces)i(are)150 4244 y(required)f(to)j(a)m -(v)m(oid)f(con\015icts)g(with)f(the)h(shell's)f(\014lename)h(expansion) -f(op)s(erators.)41 b(If)28 b(the)i Fr(subscript)g Fu(is)150 -4354 y(`)p Ft(@)p Fu(')f(or)h(`)p Ft(*)p Fu(',)f(the)h(w)m(ord)f -(expands)f(to)i(all)g(mem)m(b)s(ers)e(of)i(the)f(arra)m(y)h -Fr(name)p Fu(.)40 b(These)29 b(subscripts)f(di\013er)h(only)150 -4463 y(when)36 b(the)g(w)m(ord)g(app)s(ears)g(within)g(double)g -(quotes.)60 b(If)36 b(the)h(w)m(ord)f(is)g(double-quoted,)j -Ft(${)p Fj(name)p Ft([*]})150 4573 y Fu(expands)25 b(to)h(a)g(single)h -(w)m(ord)e(with)g(the)h(v)-5 b(alue)26 b(of)g(eac)m(h)h(arra)m(y)f(mem) -m(b)s(er)f(separated)h(b)m(y)g(the)f(\014rst)g(c)m(harac-)150 -4682 y(ter)j(of)g(the)h Ft(IFS)e Fu(v)-5 b(ariable,)29 -b(and)f Ft(${)p Fj(name)p Ft([@]})d Fu(expands)i(eac)m(h)i(elemen)m(t)h -(of)e Fr(name)33 b Fu(to)c(a)f(separate)h(w)m(ord.)150 -4792 y(When)j(there)h(are)f(no)g(arra)m(y)h(mem)m(b)s(ers,)f -Ft(${)p Fj(name)p Ft([@]})e Fu(expands)h(to)i(nothing.)47 -b(If)31 b(the)i(double-quoted)150 4902 y(expansion)39 -b(o)s(ccurs)h(within)f(a)h(w)m(ord,)i(the)d(expansion)h(of)g(the)f -(\014rst)g(parameter)h(is)g(joined)f(with)h(the)150 5011 -y(b)s(eginning)29 b(part)g(of)h(the)f(original)i(w)m(ord,)e(and)g(the)h -(expansion)f(of)h(the)f(last)i(parameter)e(is)h(joined)f(with)150 -5121 y(the)g(last)h(part)f(of)g(the)g(original)h(w)m(ord.)40 -b(This)28 b(is)h(analogous)h(to)f(the)h(expansion)e(of)h(the)g(sp)s -(ecial)h(param-)150 5230 y(eters)g(`)p Ft(@)p Fu(')f(and)g(`)p -Ft(*)p Fu('.)41 b Ft(${#)p Fj(name)p Ft([)p Fj(subscript)p -Ft(]})24 b Fu(expands)k(to)i(the)g(length)g(of)f Ft(${)p -Fj(name)p Ft([)p Fj(subscript)p Ft(]})p Fu(.)35 b(If)150 -5340 y Fr(subscript)28 b Fu(is)g(`)p Ft(@)p Fu(')f(or)h(`)p -Ft(*)p Fu(',)g(the)g(expansion)f(is)g(the)h(n)m(um)m(b)s(er)e(of)i -(elemen)m(ts)g(in)f(the)h(arra)m(y)-8 b(.)41 b(If)27 -b(the)g Fr(subscript)p eop end -%%Page: 102 108 -TeXDict begin 102 107 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(102)150 299 y(used)34 -b(to)h(reference)g(an)f(elemen)m(t)i(of)f(an)f(indexed)g(arra)m(y)h(ev) --5 b(aluates)36 b(to)f(a)g(n)m(um)m(b)s(er)e(less)i(than)f(zero,)i(it) -150 408 y(is)c(in)m(terpreted)h(as)f(relativ)m(e)i(to)f(one)f(greater)h -(than)f(the)h(maxim)m(um)f(index)f(of)h(the)h(arra)m(y)-8 -b(,)33 b(so)g(negativ)m(e)150 518 y(indices)d(coun)m(t)h(bac)m(k)h -(from)e(the)g(end)g(of)g(the)h(arra)m(y)-8 b(,)31 b(and)f(an)g(index)g -(of)h(-1)g(refers)f(to)h(the)g(last)g(elemen)m(t.)275 -675 y(Referencing)41 b(an)f(arra)m(y)h(v)-5 b(ariable)42 +Ft(]})p Fu(.)35 b(The)27 b(braces)i(are)150 5121 y(required)35 +b(to)i(a)m(v)m(oid)g(con\015icts)g(with)f(the)g(shell's)g(\014lename)g +(expansion)g(op)s(erators.)58 b(If)35 b(the)h Fr(subscript)150 +5230 y Fu(is)g(`)p Ft(@)p Fu(')h(or)f(`)p Ft(*)p Fu(',)i(the)f(w)m(ord) +f(expands)f(to)j(all)f(mem)m(b)s(ers)e(of)i(the)f(arra)m(y)h +Fr(name)p Fu(,)h(unless)e(otherwise)h(noted)150 5340 +y(in)g(the)h(description)g(of)g(a)g(builtin)g(or)f(w)m(ord)h +(expansion.)63 b(These)37 b(subscripts)g(di\013er)g(only)h(when)f(the)p +eop end +%%Page: 105 111 +TeXDict begin 105 110 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(105)150 299 y(w)m(ord)25 +b(app)s(ears)g(within)g(double)h(quotes.)39 b(If)26 b(the)f(w)m(ord)h +(is)f(double-quoted,)i Ft(${)p Fj(name)p Ft([*]})c Fu(expands)i(to)i(a) +150 408 y(single)h(w)m(ord)f(with)f(the)i(v)-5 b(alue)27 +b(of)h(eac)m(h)g(arra)m(y)g(mem)m(b)s(er)e(separated)i(b)m(y)f(the)g +(\014rst)f(c)m(haracter)j(of)e(the)h Ft(IFS)150 518 y +Fu(v)-5 b(ariable,)34 b(and)e Ft(${)p Fj(name)p Ft([@]})e +Fu(expands)h(eac)m(h)j(elemen)m(t)g(of)f Fr(name)k Fu(to)c(a)g +(separate)h(w)m(ord.)46 b(When)33 b(there)150 628 y(are)39 +b(no)f(arra)m(y)g(mem)m(b)s(ers,)i Ft(${)p Fj(name)p +Ft([@]})35 b Fu(expands)i(to)i(nothing.)64 b(If)38 b(the)g +(double-quoted)g(expansion)150 737 y(o)s(ccurs)26 b(within)g(a)g(w)m +(ord,)h(the)g(expansion)f(of)h(the)f(\014rst)g(parameter)g(is)h(joined) +f(with)g(the)g(b)s(eginning)g(part)150 847 y(of)j(the)g(original)g(w)m +(ord,)g(and)f(the)h(expansion)f(of)h(the)g(last)h(parameter)f(is)f +(joined)h(with)f(the)h(last)g(part)g(of)150 956 y(the)h(original)h(w)m +(ord.)40 b(This)29 b(is)h(analogous)h(to)f(the)g(expansion)f(of)h(the)g +(sp)s(ecial)h(parameters)f(`)p Ft(@)p Fu(')f(and)h(`)p +Ft(*)p Fu('.)150 1066 y Ft(${#)p Fj(name)p Ft([)p Fj(subscript)p +Ft(]})21 b Fu(expands)k(to)h(the)g(length)h(of)f Ft(${)p +Fj(name)p Ft([)p Fj(subscript)p Ft(]})p Fu(.)34 b(If)25 +b Fr(subscript)i Fu(is)f(`)p Ft(@)p Fu(')g(or)150 1176 +y(`)p Ft(*)p Fu(',)j(the)g(expansion)g(is)g(the)g(n)m(um)m(b)s(er)e(of) +i(elemen)m(ts)h(in)e(the)h(arra)m(y)-8 b(.)41 b(If)29 +b(the)g Fr(subscript)g Fu(used)f(to)h(reference)150 1285 +y(an)36 b(elemen)m(t)i(of)e(an)h(indexed)e(arra)m(y)i(ev)-5 +b(aluates)38 b(to)f(a)g(n)m(um)m(b)s(er)e(less)h(than)g(zero,)j(it)e +(is)f(in)m(terpreted)h(as)150 1395 y(relativ)m(e)28 b(to)f(one)f +(greater)i(than)d(the)i(maxim)m(um)f(index)f(of)h(the)h(arra)m(y)-8 +b(,)28 b(so)e(negativ)m(e)i(indices)e(coun)m(t)h(bac)m(k)150 +1504 y(from)j(the)g(end)g(of)h(the)f(arra)m(y)-8 b(,)32 +b(and)e(an)g(index)g(of)g(-1)h(refers)f(to)h(the)g(last)g(elemen)m(t.) +275 1639 y(Referencing)41 b(an)f(arra)m(y)h(v)-5 b(ariable)42 b(without)e(a)h(subscript)e(is)i(equiv)-5 b(alen)m(t)42 -b(to)f(referencing)g(with)g(a)150 785 y(subscript)35 -b(of)h(0.)57 b(An)m(y)36 b(reference)g(to)h(a)f(v)-5 -b(ariable)36 b(using)g(a)g(v)-5 b(alid)36 b(subscript)f(is)h(legal,)j -(and)c Ft(bash)g Fu(will)150 894 y(create)d(an)e(arra)m(y)h(if)f -(necessary)-8 b(.)275 1051 y(An)35 b(arra)m(y)i(v)-5 +b(to)f(referencing)g(with)g(a)150 1748 y(subscript)34 +b(of)h(0.)55 b(An)m(y)36 b(reference)f(to)h(a)g(v)-5 +b(ariable)35 b(using)g(a)h(v)-5 b(alid)35 b(subscript)f(is)h(v)-5 +b(alid,)37 b(and)d(Bash)i(will)150 1858 y(create)c(an)e(arra)m(y)h(if)f +(necessary)-8 b(.)275 1992 y(An)35 b(arra)m(y)i(v)-5 b(ariable)37 b(is)g(considered)f(set)h(if)f(a)h(subscript)e(has)h(b)s (een)g(assigned)g(a)h(v)-5 b(alue.)59 b(The)36 b(n)m(ull)150 -1161 y(string)30 b(is)h(a)g(v)-5 b(alid)30 b(v)-5 b(alue.)275 -1317 y(It)29 b(is)h(p)s(ossible)f(to)h(obtain)g(the)f(k)m(eys)i +2102 y(string)30 b(is)h(a)g(v)-5 b(alid)30 b(v)-5 b(alue.)275 +2236 y(It)29 b(is)h(p)s(ossible)f(to)h(obtain)g(the)f(k)m(eys)i (\(indices\))f(of)f(an)h(arra)m(y)g(as)f(w)m(ell)i(as)f(the)f(v)-5 b(alues.)41 b($)p Fi({)p Fu(!)p Fr(name)5 b Fu([@])p -Fi(})150 1427 y Fu(and)39 b($)p Fi({)p Fu(!)p Fr(name)5 +Fi(})150 2346 y Fu(and)39 b($)p Fi({)p Fu(!)p Fr(name)5 b Fu([*])p Fi(})43 b Fu(expand)c(to)i(the)f(indices)h(assigned)f(in)g (arra)m(y)g(v)-5 b(ariable)41 b Fr(name)p Fu(.)70 b(The)39 -b(treatmen)m(t)150 1537 y(when)i(in)g(double)g(quotes)h(is)f(similar)h +b(treatmen)m(t)150 2455 y(when)i(in)g(double)g(quotes)h(is)f(similar)h (to)h(the)e(expansion)h(of)f(the)h(sp)s(ecial)g(parameters)g(`)p -Ft(@)p Fu(')g(and)f(`)p Ft(*)p Fu(')150 1646 y(within)30 -b(double)g(quotes.)275 1803 y(The)25 b Ft(unset)g Fu(builtin)g(is)h +Ft(@)p Fu(')g(and)f(`)p Ft(*)p Fu(')150 2565 y(within)30 +b(double)g(quotes.)275 2699 y(The)25 b Ft(unset)g Fu(builtin)g(is)h (used)f(to)i(destro)m(y)f(arra)m(ys.)40 b Ft(unset)29 b Fj(name)p Ft([)p Fj(subscript)p Ft(])22 b Fu(destro)m(ys)k(the)g -(arra)m(y)150 1913 y(elemen)m(t)40 b(at)e(index)g Fr(subscript)p +(arra)m(y)150 2809 y(elemen)m(t)40 b(at)e(index)g Fr(subscript)p Fu(.)62 b(Negativ)m(e)41 b(subscripts)c(to)i(indexed)e(arra)m(ys)i(are) -f(in)m(terpreted)h(as)f(de-)150 2022 y(scrib)s(ed)30 +f(in)m(terpreted)h(as)f(de-)150 2918 y(scrib)s(ed)30 b(ab)s(o)m(v)m(e.)42 b(Unsetting)31 b(the)g(last)g(elemen)m(t)h(of)f (an)g(arra)m(y)g(v)-5 b(ariable)31 b(do)s(es)f(not)h(unset)f(the)h(v)-5 -b(ariable.)150 2132 y Ft(unset)29 b Fj(name)p Fu(,)39 +b(ariable.)150 3028 y Ft(unset)29 b Fj(name)p Fu(,)39 b(where)e Fr(name)43 b Fu(is)37 b(an)h(arra)m(y)-8 b(,)41 b(remo)m(v)m(es)e(the)f(en)m(tire)g(arra)m(y)-8 b(.)64 b Ft(unset)29 b Fj(name)p Ft([)p Fj(subscript)p Ft(])150 -2241 y Fu(b)s(eha)m(v)m(es)h(di\013eren)m(tly)g(dep)s(ending)d(on)j +3137 y Fu(b)s(eha)m(v)m(es)h(di\013eren)m(tly)g(dep)s(ending)d(on)j (the)f(arra)m(y)h(t)m(yp)s(e)f(when)g(giv)m(en)h(a)f(subscript)g(of)g (`)p Ft(*)p Fu(')g(or)h(`)p Ft(@)p Fu('.)40 b(When)150 -2351 y Fr(name)46 b Fu(is)40 b(an)h(asso)s(ciativ)m(e)i(arra)m(y)-8 +3247 y Fr(name)46 b Fu(is)40 b(an)h(asso)s(ciativ)m(e)i(arra)m(y)-8 b(,)44 b(it)d(remo)m(v)m(es)h(the)f(elemen)m(t)h(with)e(k)m(ey)h(`)p Ft(*)p Fu(')g(or)f(`)p Ft(@)p Fu('.)72 b(If)40 b Fr(name)45 -b Fu(is)c(an)150 2461 y(indexed)30 b(arra)m(y)-8 b(,)31 +b Fu(is)c(an)150 3357 y(indexed)30 b(arra)m(y)-8 b(,)31 b Ft(unset)e Fu(remo)m(v)m(es)j(all)f(of)g(the)f(elemen)m(ts,)i(but)e (do)s(es)g(not)h(remo)m(v)m(e)h(the)e(arra)m(y)h(itself.)275 -2617 y(When)k(using)g(a)i(v)-5 b(ariable)36 b(name)g(with)g(a)g +3491 y(When)k(using)g(a)i(v)-5 b(ariable)36 b(name)g(with)g(a)g (subscript)e(as)i(an)g(argumen)m(t)g(to)h(a)f(command,)h(suc)m(h)f(as) -150 2727 y(with)k Ft(unset)p Fu(,)h(without)e(using)h(the)g(w)m(ord)f +150 3600 y(with)k Ft(unset)p Fu(,)h(without)e(using)h(the)g(w)m(ord)f (expansion)h(syn)m(tax)g(describ)s(ed)f(ab)s(o)m(v)m(e,)44 -b(the)c(argumen)m(t)g(is)150 2837 y(sub)5 b(ject)25 b(to)h(the)g +b(the)c(argumen)m(t)g(is)150 3710 y(sub)5 b(ject)25 b(to)h(the)g (shell's)g(\014lename)f(expansion.)39 b(If)25 b(\014lename)h(expansion) -f(is)g(not)h(desired,)g(the)f(argumen)m(t)150 2946 y(should)k(b)s(e)h -(quoted.)275 3103 y(The)20 b Ft(declare)p Fu(,)h Ft(local)p +f(is)g(not)h(desired,)g(the)f(argumen)m(t)150 3820 y(should)k(b)s(e)h +(quoted.)275 3954 y(The)20 b Ft(declare)p Fu(,)h Ft(local)p Fu(,)h(and)e Ft(readonly)f Fu(builtins)h(eac)m(h)i(accept)g(a)g Ft(-a)e Fu(option)h(to)h(sp)s(ecify)f(an)f(indexed)150 -3213 y(arra)m(y)28 b(and)f(a)h Ft(-A)e Fu(option)i(to)g(sp)s(ecify)f +4064 y(arra)m(y)28 b(and)f(a)h Ft(-A)e Fu(option)i(to)g(sp)s(ecify)f (an)h(asso)s(ciativ)m(e)i(arra)m(y)-8 b(.)40 b(If)27 b(b)s(oth)g(options)h(are)g(supplied,)f Ft(-A)f Fu(tak)m(es)150 -3322 y(precedence.)55 b(The)35 b Ft(read)f Fu(builtin)h(accepts)h(a)g +4173 y(precedence.)55 b(The)35 b Ft(read)f Fu(builtin)h(accepts)h(a)g Ft(-a)e Fu(option)i(to)g(assign)f(a)g(list)h(of)f(w)m(ords)g(read)g -(from)g(the)150 3432 y(standard)h(input)g(to)i(an)f(arra)m(y)-8 +(from)g(the)150 4283 y(standard)h(input)g(to)i(an)f(arra)m(y)-8 b(,)40 b(and)c(can)h(read)g(v)-5 b(alues)38 b(from)e(the)h(standard)g -(input)f(in)m(to)i(individual)150 3541 y(arra)m(y)f(elemen)m(ts.)62 +(input)f(in)m(to)i(individual)150 4392 y(arra)m(y)f(elemen)m(ts.)62 b(The)36 b Ft(set)g Fu(and)h Ft(declare)d Fu(builtins)j(displa)m(y)g (arra)m(y)g(v)-5 b(alues)37 b(in)g(a)g(w)m(a)m(y)h(that)g(allo)m(ws)150 -3651 y(them)30 b(to)h(b)s(e)f(reused)g(as)g(input.)150 -3925 y Fs(6.8)68 b(The)45 b(Directory)g(Stac)l(k)150 -4085 y Fu(The)21 b(directory)h(stac)m(k)h(is)e(a)h(list)g(of)f(recen)m +4502 y(them)30 b(to)h(b)s(e)f(reused)g(as)g(input.)150 +4742 y Fs(6.8)68 b(The)45 b(Directory)g(Stac)l(k)150 +4902 y Fu(The)21 b(directory)h(stac)m(k)h(is)e(a)h(list)g(of)f(recen)m (tly-visited)j(directories.)39 b(The)20 b Ft(pushd)g -Fu(builtin)h(adds)g(directories)150 4194 y(to)42 b(the)f(stac)m(k)i(as) +Fu(builtin)h(adds)g(directories)150 5011 y(to)42 b(the)f(stac)m(k)i(as) e(it)h(c)m(hanges)g(the)f(curren)m(t)g(directory)-8 b(,)45 b(and)40 b(the)i Ft(popd)e Fu(builtin)g(remo)m(v)m(es)j(sp)s(eci\014ed) -150 4304 y(directories)29 b(from)f(the)h(stac)m(k)h(and)d(c)m(hanges)j +150 5121 y(directories)29 b(from)f(the)h(stac)m(k)h(and)d(c)m(hanges)j (the)e(curren)m(t)g(directory)h(to)g(the)g(directory)f(remo)m(v)m(ed.) -41 b(The)150 4414 y Ft(dirs)34 b Fu(builtin)g(displa)m(ys)h(the)g(con)m +41 b(The)150 5230 y Ft(dirs)34 b Fu(builtin)g(displa)m(ys)h(the)g(con)m (ten)m(ts)i(of)e(the)g(directory)h(stac)m(k.)56 b(The)34 -b(curren)m(t)h(directory)g(is)g(alw)m(a)m(ys)150 4523 -y(the)c Ft(")p Fu(top)p Ft(")f Fu(of)g(the)h(directory)g(stac)m(k.)275 -4680 y(The)k(con)m(ten)m(ts)i(of)f(the)h(directory)f(stac)m(k)h(are)f -(also)h(visible)g(as)f(the)g(v)-5 b(alue)36 b(of)g(the)g -Ft(DIRSTACK)e Fu(shell)150 4790 y(v)-5 b(ariable.)150 -5011 y Fk(6.8.1)63 b(Directory)40 b(Stac)m(k)g(Builtins)150 -5194 y Ft(dirs)870 5340 y(dirs)47 b([-clpv])e([+)p Fj(N)i -Ft(|)h(-)p Fj(N)p Ft(])p eop end -%%Page: 103 109 -TeXDict begin 103 108 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(103)630 299 y(Displa)m(y)35 -b(the)f(list)g(of)g(curren)m(tly)g(remem)m(b)s(ered)f(directories.)51 -b(Directories)36 b(are)e(added)f(to)630 408 y(the)28 -b(list)h(with)f(the)g Ft(pushd)f Fu(command;)i(the)f -Ft(popd)f Fu(command)h(remo)m(v)m(es)h(directories)g(from)630 -518 y(the)i(list.)41 b(The)30 b(curren)m(t)g(directory)h(is)f(alw)m(a)m -(ys)i(the)f(\014rst)e(directory)i(in)f(the)h(stac)m(k.)630 -676 y Ft(-c)384 b Fu(Clears)31 b(the)f(directory)h(stac)m(k)h(b)m(y)e -(deleting)h(all)h(of)e(the)h(elemen)m(ts.)630 833 y Ft(-l)384 -b Fu(Pro)s(duces)31 b(a)h(listing)h(using)e(full)h(pathnames;)h(the)f -(default)g(listing)h(format)1110 943 y(uses)d(a)h(tilde)g(to)g(denote)g -(the)f(home)h(directory)-8 b(.)630 1100 y Ft(-p)384 b -Fu(Causes)30 b Ft(dirs)f Fu(to)i(prin)m(t)f(the)h(directory)g(stac)m(k) -h(with)e(one)g(en)m(try)h(p)s(er)e(line.)630 1258 y Ft(-v)384 -b Fu(Causes)36 b Ft(dirs)f Fu(to)i(prin)m(t)f(the)g(directory)h(stac)m -(k)h(with)e(one)h(en)m(try)f(p)s(er)f(line,)1110 1367 -y(pre\014xing)30 b(eac)m(h)h(en)m(try)g(with)f(its)h(index)e(in)i(the)f -(stac)m(k.)630 1525 y Ft(+)p Fj(N)384 b Fu(Displa)m(ys)23 -b(the)f Fr(N)10 b Fu(th)21 b(directory)h(\(coun)m(ting)h(from)e(the)h -(left)g(of)g(the)g(list)g(prin)m(ted)1110 1634 y(b)m(y)30 -b Ft(dirs)f Fu(when)h(in)m(v)m(ok)m(ed)i(without)e(options\),)h -(starting)g(with)g(zero.)630 1792 y Ft(-)p Fj(N)384 b -Fu(Displa)m(ys)47 b(the)g Fr(N)10 b Fu(th)46 b(directory)h(\(coun)m -(ting)g(from)f(the)g(righ)m(t)h(of)g(the)f(list)1110 -1902 y(prin)m(ted)25 b(b)m(y)g Ft(dirs)g Fu(when)f(in)m(v)m(ok)m(ed)j -(without)f(options\),)h(starting)g(with)e(zero.)150 2059 -y Ft(popd)870 2193 y(popd)47 b([-n])f([+)p Fj(N)h Ft(|)h(-)p -Fj(N)p Ft(])630 2326 y Fu(Remo)m(v)m(es)34 b(elemen)m(ts)g(from)e(the)h -(directory)g(stac)m(k.)49 b(The)32 b(elemen)m(ts)i(are)f(n)m(um)m(b)s -(ered)e(from)630 2436 y(0)38 b(starting)h(at)f(the)g(\014rst)f -(directory)h(listed)g(b)m(y)g Ft(dirs)p Fu(;)j(that)d(is,)i -Ft(popd)c Fu(is)i(equiv)-5 b(alen)m(t)39 b(to)630 2545 -y Ft(popd)29 b(+0)p Fu(.)630 2679 y(When)j(no)g(argumen)m(ts)h(are)g -(giv)m(en,)h Ft(popd)d Fu(remo)m(v)m(es)j(the)f(top)f(directory)h(from) -f(the)g(stac)m(k)630 2789 y(and)e(c)m(hanges)h(to)g(the)g(new)f(top)g -(directory)-8 b(.)630 2922 y(Argumen)m(ts,)31 b(if)f(supplied,)f(ha)m -(v)m(e)j(the)e(follo)m(wing)i(meanings:)630 3080 y Ft(-n)384 -b Fu(Suppresses)27 b(the)j(normal)g(c)m(hange)g(of)g(directory)g(when)e -(remo)m(ving)j(directo-)1110 3189 y(ries)f(from)g(the)h(stac)m(k,)h(so) -f(that)g(only)f(the)h(stac)m(k)g(is)g(manipulated.)630 -3347 y Ft(+)p Fj(N)384 b Fu(Remo)m(v)m(es)22 b(the)f -Fr(N)10 b Fu(th)20 b(directory)g(\(coun)m(ting)i(from)e(the)g(left)h -(of)g(the)f(list)h(prin)m(ted)1110 3456 y(b)m(y)30 b -Ft(dirs)p Fu(\),)g(starting)h(with)f(zero,)i(from)e(the)g(stac)m(k.)630 -3614 y Ft(-)p Fj(N)384 b Fu(Remo)m(v)m(es)46 b(the)g -Fr(N)10 b Fu(th)44 b(directory)h(\(coun)m(ting)h(from)f(the)g(righ)m(t) -g(of)g(the)g(list)1110 3724 y(prin)m(ted)30 b(b)m(y)g -Ft(dirs)p Fu(\),)g(starting)h(with)f(zero,)i(from)e(the)g(stac)m(k.)630 -3881 y(If)d(the)h(top)g(elemen)m(t)h(of)f(the)g(directory)g(stac)m(k)h -(is)e(mo)s(di\014ed,)h(and)f(the)h Ft(-n)f Fu(option)h(w)m(as)g(not)630 -3991 y(supplied,)j Ft(popd)g Fu(uses)g(the)h Ft(cd)f -Fu(builtin)g(to)i(c)m(hange)g(to)f(the)g(directory)g(at)h(the)f(top)g -(of)g(the)630 4100 y(stac)m(k.)42 b(If)30 b(the)h Ft(cd)e -Fu(fails,)j Ft(popd)d Fu(returns)g(a)i(non-zero)g(v)-5 -b(alue.)630 4234 y(Otherwise,)34 b Ft(popd)f Fu(returns)f(an)h -(unsuccessful)g(status)g(if)h(an)f(in)m(v)-5 b(alid)34 -b(option)g(is)g(encoun-)630 4343 y(tered,)39 b(the)d(directory)h(stac)m -(k)i(is)d(empt)m(y)-8 b(,)39 b(or)e(a)g(non-existen)m(t)h(directory)f -(stac)m(k)h(en)m(try)f(is)630 4453 y(sp)s(eci\014ed.)630 -4587 y(If)32 b(the)h Ft(popd)f Fu(command)h(is)g(successful,)g(Bash)g -(runs)f Ft(dirs)f Fu(to)j(sho)m(w)f(the)g(\014nal)f(con)m(ten)m(ts)630 -4696 y(of)f(the)f(directory)h(stac)m(k,)h(and)e(the)g(return)g(status)g -(is)h(0.)150 4854 y Ft(pushd)870 4987 y(pushd)46 b([-n])h([+)p -Fj(N)g Ft(|)g Fj(-N)h Ft(|)f Fj(dir)p Ft(])630 5121 y -Fu(Adds)27 b(a)h(directory)h(to)g(the)f(top)g(of)g(the)g(directory)h -(stac)m(k,)h(or)e(rotates)h(the)f(stac)m(k,)j(making)630 -5230 y(the)37 b(new)g(top)g(of)g(the)g(stac)m(k)i(the)e(curren)m(t)f(w) -m(orking)i(directory)-8 b(.)61 b(With)38 b(no)e(argumen)m(ts,)630 -5340 y Ft(pushd)29 b Fu(exc)m(hanges)j(the)e(top)h(t)m(w)m(o)h(elemen)m -(ts)f(of)g(the)f(directory)h(stac)m(k.)p eop end -%%Page: 104 110 -TeXDict begin 104 109 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(104)630 299 y(Argumen)m(ts,)31 -b(if)f(supplied,)f(ha)m(v)m(e)j(the)e(follo)m(wing)i(meanings:)630 -455 y Ft(-n)384 b Fu(Suppresses)24 b(the)j(normal)f(c)m(hange)h(of)g -(directory)f(when)g(rotating)h(or)f(adding)1110 564 y(directories)31 -b(to)h(the)e(stac)m(k,)i(so)f(that)g(only)f(the)h(stac)m(k)h(is)e -(manipulated.)630 720 y Ft(+)p Fj(N)384 b Fu(Brings)29 -b(the)f Fr(N)10 b Fu(th)29 b(directory)g(\(coun)m(ting)h(from)e(the)g -(left)i(of)e(the)h(list)g(prin)m(ted)1110 830 y(b)m(y)34 +b(curren)m(t)h(directory)g(is)g(alw)m(a)m(ys)150 5340 +y(the)c Ft(")p Fu(top)p Ft(")f Fu(of)g(the)h(directory)g(stac)m(k.)p +eop end +%%Page: 106 112 +TeXDict begin 106 111 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(106)275 299 y(The)35 +b(con)m(ten)m(ts)i(of)f(the)h(directory)f(stac)m(k)h(are)f(also)h +(visible)g(as)f(the)g(v)-5 b(alue)36 b(of)g(the)g Ft(DIRSTACK)e +Fu(shell)150 408 y(v)-5 b(ariable.)150 600 y Fk(6.8.1)63 +b(Directory)40 b(Stac)m(k)g(Builtins)150 768 y Ft(dirs)870 +898 y(dirs)47 b([-clpv])e([+)p Fj(N)i Ft(|)h(-)p Fj(N)p +Ft(])630 1029 y Fu(Displa)m(y)35 b(the)f(list)g(of)g(curren)m(tly)g +(remem)m(b)s(ered)f(directories.)51 b(Directories)36 +b(are)e(added)f(to)630 1138 y(the)28 b(list)h(with)f(the)g +Ft(pushd)f Fu(command;)i(the)f Ft(popd)f Fu(command)h(remo)m(v)m(es)h +(directories)g(from)630 1248 y(the)i(list.)41 b(The)30 +b(curren)m(t)g(directory)h(is)f(alw)m(a)m(ys)i(the)f(\014rst)e +(directory)i(in)f(the)h(stac)m(k.)630 1399 y Ft(-c)384 +b Fu(Clears)31 b(the)f(directory)h(stac)m(k)h(b)m(y)e(deleting)h(all)h +(of)e(the)h(elemen)m(ts.)630 1551 y Ft(-l)384 b Fu(Pro)s(duces)31 +b(a)h(listing)h(using)e(full)h(pathnames;)h(the)f(default)g(listing)h +(format)1110 1660 y(uses)d(a)h(tilde)g(to)g(denote)g(the)f(home)h +(directory)-8 b(.)630 1812 y Ft(-p)384 b Fu(Causes)30 +b Ft(dirs)f Fu(to)i(prin)m(t)f(the)h(directory)g(stac)m(k)h(with)e(one) +g(en)m(try)h(p)s(er)e(line.)630 1963 y Ft(-v)384 b Fu(Causes)36 +b Ft(dirs)f Fu(to)i(prin)m(t)f(the)g(directory)h(stac)m(k)h(with)e(one) +h(en)m(try)f(p)s(er)f(line,)1110 2073 y(pre\014xing)30 +b(eac)m(h)h(en)m(try)g(with)f(its)h(index)e(in)i(the)f(stac)m(k.)630 +2224 y Ft(+)p Fj(N)384 b Fu(Displa)m(ys)23 b(the)f Fr(N)10 +b Fu(th)21 b(directory)h(\(coun)m(ting)h(from)e(the)h(left)g(of)g(the)g +(list)g(prin)m(ted)1110 2334 y(b)m(y)30 b Ft(dirs)f Fu(when)h(in)m(v)m +(ok)m(ed)i(without)e(options\),)h(starting)g(with)g(zero.)630 +2485 y Ft(-)p Fj(N)384 b Fu(Displa)m(ys)47 b(the)g Fr(N)10 +b Fu(th)46 b(directory)h(\(coun)m(ting)g(from)f(the)g(righ)m(t)h(of)g +(the)f(list)1110 2595 y(prin)m(ted)25 b(b)m(y)g Ft(dirs)g +Fu(when)f(in)m(v)m(ok)m(ed)j(without)f(options\),)h(starting)g(with)e +(zero.)150 2746 y Ft(popd)870 2876 y(popd)47 b([-n])f([+)p +Fj(N)h Ft(|)h(-)p Fj(N)p Ft(])630 3007 y Fu(Remo)m(v)m(es)34 +b(elemen)m(ts)g(from)e(the)h(directory)g(stac)m(k.)49 +b(The)32 b(elemen)m(ts)i(are)f(n)m(um)m(b)s(ered)e(from)630 +3116 y(0)38 b(starting)h(at)f(the)g(\014rst)f(directory)h(listed)g(b)m +(y)g Ft(dirs)p Fu(;)j(that)d(is,)i Ft(popd)c Fu(is)i(equiv)-5 +b(alen)m(t)39 b(to)630 3226 y Ft(popd)29 b(+0)p Fu(.)630 +3357 y(When)j(no)g(argumen)m(ts)h(are)g(giv)m(en,)h Ft(popd)d +Fu(remo)m(v)m(es)j(the)f(top)f(directory)h(from)f(the)g(stac)m(k)630 +3466 y(and)e(c)m(hanges)h(to)g(the)g(new)f(top)g(directory)-8 +b(.)630 3597 y(Argumen)m(ts,)31 b(if)f(supplied,)f(ha)m(v)m(e)j(the)e +(follo)m(wing)i(meanings:)630 3748 y Ft(-n)384 b Fu(Suppresses)27 +b(the)j(normal)g(c)m(hange)g(of)g(directory)g(when)e(remo)m(ving)j +(directo-)1110 3858 y(ries)f(from)g(the)h(stac)m(k,)h(so)f(that)g(only) +f(the)h(stac)m(k)g(is)g(manipulated.)630 4009 y Ft(+)p +Fj(N)384 b Fu(Remo)m(v)m(es)22 b(the)f Fr(N)10 b Fu(th)20 +b(directory)g(\(coun)m(ting)i(from)e(the)g(left)h(of)g(the)f(list)h +(prin)m(ted)1110 4119 y(b)m(y)30 b Ft(dirs)p Fu(\),)g(starting)h(with)f +(zero,)i(from)e(the)g(stac)m(k.)630 4270 y Ft(-)p Fj(N)384 +b Fu(Remo)m(v)m(es)46 b(the)g Fr(N)10 b Fu(th)44 b(directory)h(\(coun)m +(ting)h(from)f(the)g(righ)m(t)g(of)g(the)g(list)1110 +4380 y(prin)m(ted)30 b(b)m(y)g Ft(dirs)p Fu(\),)g(starting)h(with)f +(zero,)i(from)e(the)g(stac)m(k.)630 4531 y(If)d(the)h(top)g(elemen)m(t) +h(of)f(the)g(directory)g(stac)m(k)h(is)e(mo)s(di\014ed,)h(and)f(the)h +Ft(-n)f Fu(option)h(w)m(as)g(not)630 4641 y(supplied,)j +Ft(popd)g Fu(uses)g(the)h Ft(cd)f Fu(builtin)g(to)i(c)m(hange)g(to)f +(the)g(directory)g(at)h(the)f(top)g(of)g(the)630 4750 +y(stac)m(k.)42 b(If)30 b(the)h Ft(cd)e Fu(fails,)j Ft(popd)d +Fu(returns)g(a)i(non-zero)g(v)-5 b(alue.)630 4881 y(Otherwise,)34 +b Ft(popd)f Fu(returns)f(an)h(unsuccessful)g(status)g(if)h(an)f(in)m(v) +-5 b(alid)34 b(option)g(is)g(encoun-)630 4990 y(tered,)39 +b(the)d(directory)h(stac)m(k)i(is)d(empt)m(y)-8 b(,)39 +b(or)e(a)g(non-existen)m(t)h(directory)f(stac)m(k)h(en)m(try)f(is)630 +5100 y(sp)s(eci\014ed.)630 5230 y(If)32 b(the)h Ft(popd)f +Fu(command)h(is)g(successful,)g(Bash)g(runs)f Ft(dirs)f +Fu(to)j(sho)m(w)f(the)g(\014nal)f(con)m(ten)m(ts)630 +5340 y(of)f(the)f(directory)h(stac)m(k,)h(and)e(the)g(return)g(status)g +(is)h(0.)p eop end +%%Page: 107 113 +TeXDict begin 107 112 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(107)150 299 y Ft(pushd)870 +432 y(pushd)46 b([-n])h([+)p Fj(N)g Ft(|)g Fj(-N)h Ft(|)f +Fj(dir)p Ft(])630 565 y Fu(Adds)27 b(a)h(directory)h(to)g(the)f(top)g +(of)g(the)g(directory)h(stac)m(k,)h(or)e(rotates)h(the)f(stac)m(k,)j +(making)630 674 y(the)37 b(new)g(top)g(of)g(the)g(stac)m(k)i(the)e +(curren)m(t)f(w)m(orking)i(directory)-8 b(.)61 b(With)38 +b(no)e(argumen)m(ts,)630 784 y Ft(pushd)29 b Fu(exc)m(hanges)j(the)e +(top)h(t)m(w)m(o)h(elemen)m(ts)f(of)g(the)f(directory)h(stac)m(k.)630 +917 y(Argumen)m(ts,)g(if)f(supplied,)f(ha)m(v)m(e)j(the)e(follo)m(wing) +i(meanings:)630 1073 y Ft(-n)384 b Fu(Suppresses)24 b(the)j(normal)f(c) +m(hange)h(of)g(directory)f(when)g(rotating)h(or)f(adding)1110 +1182 y(directories)31 b(to)h(the)e(stac)m(k,)i(so)f(that)g(only)f(the)h +(stac)m(k)h(is)e(manipulated.)630 1339 y Ft(+)p Fj(N)384 +b Fu(Brings)29 b(the)f Fr(N)10 b Fu(th)29 b(directory)g(\(coun)m(ting)h +(from)e(the)g(left)i(of)e(the)h(list)g(prin)m(ted)1110 +1448 y(b)m(y)34 b Ft(dirs)p Fu(,)g(starting)h(with)f(zero\))i(to)f(the) +f(top)g(of)h(the)f(list)h(b)m(y)f(rotating)i(the)1110 +1558 y(stac)m(k.)630 1714 y Ft(-)p Fj(N)384 b Fu(Brings)23 +b(the)g Fr(N)10 b Fu(th)23 b(directory)h(\(coun)m(ting)g(from)e(the)i +(righ)m(t)f(of)g(the)h(list)f(prin)m(ted)1110 1824 y(b)m(y)34 b Ft(dirs)p Fu(,)g(starting)h(with)f(zero\))i(to)f(the)f(top)g(of)h -(the)f(list)h(b)m(y)f(rotating)i(the)1110 939 y(stac)m(k.)630 -1095 y Ft(-)p Fj(N)384 b Fu(Brings)23 b(the)g Fr(N)10 -b Fu(th)23 b(directory)h(\(coun)m(ting)g(from)e(the)i(righ)m(t)f(of)g -(the)h(list)f(prin)m(ted)1110 1205 y(b)m(y)34 b Ft(dirs)p -Fu(,)g(starting)h(with)f(zero\))i(to)f(the)f(top)g(of)h(the)f(list)h(b) -m(y)f(rotating)i(the)1110 1314 y(stac)m(k.)630 1470 y -Fj(dir)336 b Fu(Mak)m(es)32 b Fr(dir)k Fu(b)s(e)30 b(the)g(top)h(of)f -(the)h(stac)m(k.)630 1626 y(After)39 b(the)g(stac)m(k)h(has)e(b)s(een)g -(mo)s(di\014ed,)i(if)f(the)g Ft(-n)f Fu(option)h(w)m(as)g(not)g -(supplied,)g Ft(pushd)630 1735 y Fu(uses)29 b(the)h Ft(cd)f -Fu(builtin)g(to)h(c)m(hange)g(to)h(the)e(directory)h(at)g(the)g(top)g -(of)f(the)h(stac)m(k.)42 b(If)29 b(the)h Ft(cd)630 1845 -y Fu(fails,)h Ft(pushd)e Fu(returns)g(a)i(non-zero)g(v)-5 -b(alue.)630 1978 y(Otherwise,)34 b(if)g(no)f(argumen)m(ts)h(are)g -(supplied,)f Ft(pushd)f Fu(returns)g(0)i(unless)f(the)g(directory)630 -2087 y(stac)m(k)g(is)f(empt)m(y)-8 b(.)46 b(When)32 b(rotating)h(the)f -(directory)g(stac)m(k,)i Ft(pushd)d Fu(returns)f(0)j(unless)e(the)630 -2197 y(directory)g(stac)m(k)h(is)e(empt)m(y)h(or)f(a)h(non-existen)m(t) -h(directory)f(stac)m(k)g(elemen)m(t)h(is)f(sp)s(eci\014ed.)630 -2330 y(If)e(the)g Ft(pushd)f Fu(command)h(is)g(successful,)h(Bash)f -(runs)f Ft(dirs)g Fu(to)i(sho)m(w)f(the)g(\014nal)g(con)m(ten)m(ts)630 -2439 y(of)i(the)f(directory)h(stac)m(k.)150 2676 y Fs(6.9)68 -b(Con)l(trolling)47 b(the)e(Prompt)150 2836 y Fu(Bash)37 +(the)f(list)h(b)m(y)f(rotating)i(the)1110 1933 y(stac)m(k.)630 +2089 y Fj(dir)336 b Fu(Mak)m(es)32 b Fr(dir)k Fu(b)s(e)30 +b(the)g(top)h(of)f(the)h(stac)m(k.)630 2246 y(After)39 +b(the)g(stac)m(k)h(has)e(b)s(een)g(mo)s(di\014ed,)i(if)f(the)g +Ft(-n)f Fu(option)h(w)m(as)g(not)g(supplied,)g Ft(pushd)630 +2355 y Fu(uses)29 b(the)h Ft(cd)f Fu(builtin)g(to)h(c)m(hange)g(to)h +(the)e(directory)h(at)g(the)g(top)g(of)f(the)h(stac)m(k.)42 +b(If)29 b(the)h Ft(cd)630 2465 y Fu(fails,)h Ft(pushd)e +Fu(returns)g(a)i(non-zero)g(v)-5 b(alue.)630 2598 y(Otherwise,)34 +b(if)g(no)f(argumen)m(ts)h(are)g(supplied,)f Ft(pushd)f +Fu(returns)g(0)i(unless)f(the)g(directory)630 2707 y(stac)m(k)g(is)f +(empt)m(y)-8 b(.)46 b(When)32 b(rotating)h(the)f(directory)g(stac)m(k,) +i Ft(pushd)d Fu(returns)f(0)j(unless)e(the)630 2817 y(directory)g(stac) +m(k)h(is)e(empt)m(y)h(or)f(a)h(non-existen)m(t)h(directory)f(stac)m(k)g +(elemen)m(t)h(is)f(sp)s(eci\014ed.)630 2950 y(If)e(the)g +Ft(pushd)f Fu(command)h(is)g(successful,)h(Bash)f(runs)f +Ft(dirs)g Fu(to)i(sho)m(w)f(the)g(\014nal)g(con)m(ten)m(ts)630 +3059 y(of)i(the)f(directory)h(stac)m(k.)150 3297 y Fs(6.9)68 +b(Con)l(trolling)47 b(the)e(Prompt)150 3456 y Fu(Bash)37 b(examines)h(the)f(v)-5 b(alue)37 b(of)g(the)h(arra)m(y)f(v)-5 b(ariable)38 b Ft(PROMPT_COMMAND)33 b Fu(just)j(b)s(efore)h(prin)m -(ting)g(eac)m(h)150 2945 y(primary)c(prompt.)49 b(If)33 +(ting)g(eac)m(h)150 3566 y(primary)c(prompt.)49 b(If)33 b(an)m(y)h(elemen)m(ts)h(in)f Ft(PROMPT_COMMAND)29 b Fu(are)34 b(set)h(and)e(non-n)m(ull,)h(Bash)g(executes)150 -3055 y(eac)m(h)e(v)-5 b(alue,)31 b(in)f(n)m(umeric)g(order,)g(just)g +3675 y(eac)m(h)e(v)-5 b(alue,)31 b(in)f(n)m(umeric)g(order,)g(just)g (as)g(if)h(it)g(had)e(b)s(een)h(t)m(yp)s(ed)g(on)g(the)h(command)f -(line.)275 3188 y(In)d(addition,)j(the)f(follo)m(wing)h(table)f +(line.)275 3808 y(In)d(addition,)j(the)f(follo)m(wing)h(table)f (describ)s(es)f(the)h(sp)s(ecial)g(c)m(haracters)h(whic)m(h)f(can)f -(app)s(ear)g(in)h(the)150 3297 y(prompt)g(v)-5 b(ariables)32 +(app)s(ear)g(in)h(the)150 3918 y(prompt)g(v)-5 b(ariables)32 b Ft(PS0)p Fu(,)d Ft(PS1)p Fu(,)h Ft(PS2)p Fu(,)g(and)f -Ft(PS4)p Fu(:)150 3453 y Ft(\\a)384 b Fu(A)30 b(b)s(ell)h(c)m -(haracter.)150 3609 y Ft(\\d)384 b Fu(The)30 b(date,)h(in)f +Ft(PS4)p Fu(:)150 4074 y Ft(\\a)384 b Fu(A)30 b(b)s(ell)h(c)m +(haracter.)150 4230 y Ft(\\d)384 b Fu(The)30 b(date,)h(in)f Ft(")p Fu(W)-8 b(eekda)m(y)32 b(Mon)m(th)f(Date)p Ft(")h Fu(format)f(\(e.g.,)h Ft(")p Fu(T)-8 b(ue)30 b(Ma)m(y)h(26)p -Ft(")p Fu(\).)150 3765 y Ft(\\D{)p Fj(format)p Ft(})630 -3874 y Fu(The)c Fr(format)i Fu(is)f(passed)e(to)i Ft(strftime)p +Ft(")p Fu(\).)150 4386 y Ft(\\D{)p Fj(format)p Ft(})630 +4496 y Fu(The)c Fr(format)i Fu(is)f(passed)e(to)i Ft(strftime)p Fu(\(3\))f(and)f(the)i(result)f(is)g(inserted)g(in)m(to)h(the)g(prompt) -630 3984 y(string;)42 b(an)d(empt)m(y)f Fr(format)j Fu(results)d(in)g +630 4606 y(string;)42 b(an)d(empt)m(y)f Fr(format)j Fu(results)d(in)g (a)h(lo)s(cale-sp)s(eci\014c)h(time)f(represen)m(tation.)65 -b(The)630 4093 y(braces)31 b(are)f(required.)150 4249 +b(The)630 4715 y(braces)31 b(are)f(required.)150 4871 y Ft(\\e)384 b Fu(An)30 b(escap)s(e)h(c)m(haracter.)150 -4405 y Ft(\\h)384 b Fu(The)30 b(hostname,)h(up)e(to)i(the)g(\014rst)e -(`.'.)150 4561 y Ft(\\H)384 b Fu(The)30 b(hostname.)150 -4717 y Ft(\\j)384 b Fu(The)30 b(n)m(um)m(b)s(er)f(of)h(jobs)g(curren)m -(tly)h(managed)g(b)m(y)f(the)g(shell.)150 4873 y Ft(\\l)384 +5028 y Ft(\\h)384 b Fu(The)30 b(hostname,)h(up)e(to)i(the)g(\014rst)e +(`.'.)150 5184 y Ft(\\H)384 b Fu(The)30 b(hostname.)150 +5340 y Ft(\\j)384 b Fu(The)30 b(n)m(um)m(b)s(er)f(of)h(jobs)g(curren)m +(tly)h(managed)g(b)m(y)f(the)g(shell.)p eop end +%%Page: 108 114 +TeXDict begin 108 113 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(108)150 299 y Ft(\\l)384 b Fu(The)30 b(basename)h(of)f(the)h(shell's)f(terminal)h(device)g -(name.)150 5028 y Ft(\\n)384 b Fu(A)30 b(newline.)150 -5184 y Ft(\\r)384 b Fu(A)30 b(carriage)i(return.)150 -5340 y Ft(\\s)384 b Fu(The)22 b(name)g(of)h(the)f(shell,)i(the)f -(basename)f(of)h Ft($0)f Fu(\(the)g(p)s(ortion)g(follo)m(wing)i(the)f -(\014nal)e(slash\).)p eop end -%%Page: 105 111 -TeXDict begin 105 110 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(105)150 299 y Ft(\\t)384 -b Fu(The)30 b(time,)h(in)f(24-hour)h(HH:MM:SS)g(format.)150 -459 y Ft(\\T)384 b Fu(The)30 b(time,)h(in)f(12-hour)h(HH:MM:SS)g -(format.)150 619 y Ft(\\@)384 b Fu(The)30 b(time,)h(in)f(12-hour)h -(am/pm)f(format.)150 780 y Ft(\\A)384 b Fu(The)30 b(time,)h(in)f -(24-hour)h(HH:MM)g(format.)150 940 y Ft(\\u)384 b Fu(The)30 -b(username)g(of)g(the)h(curren)m(t)f(user.)150 1100 y -Ft(\\v)384 b Fu(The)30 b(v)m(ersion)h(of)f(Bash)h(\(e.g.,)h(2.00\))150 -1261 y Ft(\\V)384 b Fu(The)30 b(release)i(of)e(Bash,)h(v)m(ersion)g -Ft(+)f Fu(patc)m(hlev)m(el)i(\(e.g.,)h(2.00.0\))150 1421 -y Ft(\\w)384 b Fu(The)27 b(v)-5 b(alue)28 b(of)g(the)g +(name.)150 487 y Ft(\\n)384 b Fu(A)30 b(newline.)150 +676 y Ft(\\r)384 b Fu(A)30 b(carriage)i(return.)150 864 +y Ft(\\s)384 b Fu(The)22 b(name)g(of)h(the)f(shell,)i(the)f(basename)f +(of)h Ft($0)f Fu(\(the)g(p)s(ortion)g(follo)m(wing)i(the)f(\014nal)e +(slash\).)150 1052 y Ft(\\t)384 b Fu(The)30 b(time,)h(in)f(24-hour)h +(HH:MM:SS)g(format.)150 1241 y Ft(\\T)384 b Fu(The)30 +b(time,)h(in)f(12-hour)h(HH:MM:SS)g(format.)150 1429 +y Ft(\\@)384 b Fu(The)30 b(time,)h(in)f(12-hour)h(am/pm)f(format.)150 +1617 y Ft(\\A)384 b Fu(The)30 b(time,)h(in)f(24-hour)h(HH:MM)g(format.) +150 1806 y Ft(\\u)384 b Fu(The)30 b(username)g(of)g(the)h(curren)m(t)f +(user.)150 1994 y Ft(\\v)384 b Fu(The)30 b(v)m(ersion)h(of)f(Bash)h +(\(e.g.,)h(2.00\))150 2183 y Ft(\\V)384 b Fu(The)30 b(release)i(of)e +(Bash,)h(v)m(ersion)g Ft(+)f Fu(patc)m(hlev)m(el)i(\(e.g.,)h(2.00.0\)) +150 2371 y Ft(\\w)384 b Fu(The)27 b(v)-5 b(alue)28 b(of)g(the)g Ft(PWD)f Fu(shell)h(v)-5 b(ariable)28 b(\()p Ft($PWD)p Fu(\),)g(with)g Ft($HOME)e Fu(abbreviated)i(with)f(a)h(tilde)630 -1530 y(\(uses)i(the)h Ft($PROMPT_DIRTRIM)26 b Fu(v)-5 -b(ariable\).)150 1691 y Ft(\\W)384 b Fu(The)30 b(basename)h(of)f +2480 y(\(uses)i(the)h Ft($PROMPT_DIRTRIM)26 b Fu(v)-5 +b(ariable\).)150 2669 y Ft(\\W)384 b Fu(The)30 b(basename)h(of)f Ft($PWD)p Fu(,)g(with)g Ft($HOME)f Fu(abbreviated)h(with)g(a)h(tilde.) -150 1851 y Ft(\\!)384 b Fu(The)30 b(history)g(n)m(um)m(b)s(er)f(of)i -(this)f(command.)150 2011 y Ft(\\#)384 b Fu(The)30 b(command)g(n)m(um)m -(b)s(er)f(of)i(this)f(command.)150 2171 y Ft(\\$)384 +150 2857 y Ft(\\!)384 b Fu(The)30 b(history)g(n)m(um)m(b)s(er)f(of)i +(this)f(command.)150 3046 y Ft(\\#)384 b Fu(The)30 b(command)g(n)m(um)m +(b)s(er)f(of)i(this)f(command.)150 3234 y Ft(\\$)384 b Fu(If)30 b(the)g(e\013ectiv)m(e)j(uid)d(is)g(0,)h Ft(#)p -Fu(,)g(otherwise)g Ft($)p Fu(.)150 2332 y Ft(\\)p Fj(nnn)288 +Fu(,)g(otherwise)g Ft($)p Fu(.)150 3422 y Ft(\\)p Fj(nnn)288 b Fu(The)30 b(c)m(haracter)i(whose)e(ASCI)s(I)f(co)s(de)h(is)h(the)f(o) -s(ctal)i(v)-5 b(alue)31 b Fr(nnn)p Fu(.)150 2492 y Ft(\\\\)384 -b Fu(A)30 b(bac)m(kslash.)150 2652 y Ft(\\[)384 b Fu(Begin)38 +s(ctal)i(v)-5 b(alue)31 b Fr(nnn)p Fu(.)150 3611 y Ft(\\\\)384 +b Fu(A)30 b(bac)m(kslash.)150 3799 y Ft(\\[)384 b Fu(Begin)38 b(a)f(sequence)g(of)g(non-prin)m(ting)g(c)m(haracters.)61 b(This)36 b(could)h(b)s(e)g(used)f(to)h(em)m(b)s(ed)g(a)630 -2762 y(terminal)31 b(con)m(trol)h(sequence)e(in)m(to)i(the)e(prompt.) -150 2922 y Ft(\\])384 b Fu(End)29 b(a)i(sequence)g(of)f(non-prin)m -(ting)g(c)m(haracters.)275 3083 y(The)25 b(command)h(n)m(um)m(b)s(er)f +3909 y(terminal)31 b(con)m(trol)h(sequence)e(in)m(to)i(the)e(prompt.) +150 4097 y Ft(\\])384 b Fu(End)29 b(a)i(sequence)g(of)f(non-prin)m +(ting)g(c)m(haracters.)275 4300 y(The)25 b(command)h(n)m(um)m(b)s(er)f (and)h(the)g(history)g(n)m(um)m(b)s(er)f(are)i(usually)f(di\013eren)m -(t:)39 b(the)26 b(history)g(n)m(um)m(b)s(er)150 3192 +(t:)39 b(the)26 b(history)g(n)m(um)m(b)s(er)150 4409 y(of)h(a)f(command)h(is)f(its)h(p)s(osition)f(in)g(the)h(history)f (list,)i(whic)m(h)f(ma)m(y)g(include)f(commands)g(restored)g(from)150 -3302 y(the)39 b(history)h(\014le)f(\(see)h(Section)g(9.1)h([Bash)e -(History)h(F)-8 b(acilities],)45 b(page)40 b(152\),)j(while)d(the)f -(command)150 3412 y(n)m(um)m(b)s(er)j(is)h(the)h(p)s(osition)f(in)g +4519 y(the)39 b(history)h(\014le)f(\(see)h(Section)g(9.1)h([Bash)e +(History)h(F)-8 b(acilities],)45 b(page)40 b(159\),)j(while)d(the)f +(command)150 4629 y(n)m(um)m(b)s(er)j(is)h(the)h(p)s(osition)f(in)g (the)g(sequence)h(of)f(commands)g(executed)h(during)e(the)i(curren)m(t) -f(shell)150 3521 y(session.)275 3657 y(After)28 b(the)g(string)g(is)g +f(shell)150 4738 y(session.)275 4902 y(After)28 b(the)g(string)g(is)g (deco)s(ded,)g(it)g(is)g(expanded)f(via)i(parameter)f(expansion,)h -(command)f(substitu-)150 3766 y(tion,)g(arithmetic)f(expansion,)g(and)e +(command)f(substitu-)150 5011 y(tion,)g(arithmetic)f(expansion,)g(and)e (quote)i(remo)m(v)-5 b(al,)29 b(sub)5 b(ject)25 b(to)i(the)f(v)-5 -b(alue)27 b(of)f(the)g Ft(promptvars)e Fu(shell)150 3876 +b(alue)27 b(of)f(the)g Ft(promptvars)e Fu(shell)150 5121 y(option)i(\(see)h(Section)g(4.3.2)g([The)f(Shopt)f(Builtin],)j(page)e -(71\).)41 b(This)25 b(can)h(ha)m(v)m(e)h(un)m(w)m(an)m(ted)f(side)g -(e\013ects)150 3985 y(if)i(escap)s(ed)f(p)s(ortions)g(of)h(the)g +(73\).)41 b(This)25 b(can)h(ha)m(v)m(e)h(un)m(w)m(an)m(ted)f(side)g +(e\013ects)150 5230 y(if)i(escap)s(ed)f(p)s(ortions)g(of)h(the)g (string)f(app)s(ear)g(within)g(command)h(substitution)f(or)h(con)m -(tain)g(c)m(haracters)150 4095 y(sp)s(ecial)j(to)g(w)m(ord)f -(expansion.)150 4337 y Fs(6.10)68 b(The)45 b(Restricted)h(Shell)150 -4496 y Fu(If)34 b(Bash)g(is)g(started)g(with)g(the)g(name)h -Ft(rbash)p Fu(,)e(or)h(the)h Ft(--restricted)30 b Fu(or)k -Ft(-r)g Fu(option)g(is)g(supplied)f(at)150 4606 y(in)m(v)m(o)s(cation,) -d(the)d(shell)g(b)s(ecomes)h(restricted.)40 b(A)27 b(restricted)h -(shell)f(is)g(used)f(to)i(set)f(up)f(an)h(en)m(vironmen)m(t)150 -4716 y(more)g(con)m(trolled)i(than)e(the)g(standard)g(shell.)40 -b(A)27 b(restricted)h(shell)f(b)s(eha)m(v)m(es)h(iden)m(tically)h(to)f -Ft(bash)e Fu(with)150 4825 y(the)31 b(exception)g(that)g(the)g(follo)m -(wing)h(are)e(disallo)m(w)m(ed)i(or)e(not)h(p)s(erformed:)225 -4961 y Fq(\017)60 b Fu(Changing)30 b(directories)h(with)g(the)f -Ft(cd)g Fu(builtin.)225 5095 y Fq(\017)60 b Fu(Setting)33 +(tain)g(c)m(haracters)150 5340 y(sp)s(ecial)j(to)g(w)m(ord)f +(expansion.)p eop end +%%Page: 109 115 +TeXDict begin 109 114 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(109)150 299 y Fs(6.10)68 +b(The)45 b(Restricted)h(Shell)150 458 y Fu(If)34 b(Bash)g(is)g(started) +g(with)g(the)g(name)h Ft(rbash)p Fu(,)e(or)h(the)h Ft(--restricted)30 +b Fu(or)k Ft(-r)g Fu(option)g(is)g(supplied)f(at)150 +568 y(in)m(v)m(o)s(cation,)d(the)d(shell)g(b)s(ecomes)h(restricted.)40 +b(A)27 b(restricted)h(shell)f(is)g(used)f(to)i(set)f(up)f(an)h(en)m +(vironmen)m(t)150 677 y(more)g(con)m(trolled)i(than)e(the)g(standard)g +(shell.)40 b(A)27 b(restricted)h(shell)f(b)s(eha)m(v)m(es)h(iden)m +(tically)h(to)f Ft(bash)e Fu(with)150 787 y(the)31 b(exception)g(that)g +(the)g(follo)m(wing)h(are)e(disallo)m(w)m(ed)i(or)e(not)h(p)s +(erformed:)225 919 y Fq(\017)60 b Fu(Changing)30 b(directories)h(with)g +(the)f Ft(cd)g Fu(builtin.)225 1050 y Fq(\017)60 b Fu(Setting)33 b(or)g(unsetting)f(the)h(v)-5 b(alues)33 b(of)f(the)h Ft(SHELL)p Fu(,)f Ft(PATH)p Fu(,)g Ft(HISTFILE)p Fu(,)f Ft(ENV)p Fu(,)h(or)g Ft(BASH_ENV)e Fu(v)-5 b(ari-)330 -5205 y(ables.)225 5340 y Fq(\017)60 b Fu(Sp)s(ecifying)30 -b(command)g(names)g(con)m(taining)i(slashes.)p eop end -%%Page: 106 112 -TeXDict begin 106 111 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(106)225 299 y Fq(\017)60 -b Fu(Sp)s(ecifying)30 b(a)h(\014lename)f(con)m(taining)i(a)f(slash)f -(as)h(an)f(argumen)m(t)h(to)g(the)f Ft(.)h Fu(builtin)e(command.)225 -434 y Fq(\017)60 b Fu(Sp)s(ecifying)33 b(a)i(\014lename)f(con)m -(taining)h(a)g(slash)e(as)i(an)e(argumen)m(t)i(to)g(the)f -Ft(history)e Fu(builtin)h(com-)330 543 y(mand.)225 678 -y Fq(\017)60 b Fu(Sp)s(ecifying)32 b(a)g(\014lename)h(con)m(taining)h -(a)e(slash)g(as)h(an)f(argumen)m(t)h(to)g(the)f Ft(-p)g -Fu(option)h(to)g(the)f Ft(hash)330 788 y Fu(builtin)e(command.)225 -923 y Fq(\017)60 b Fu(Imp)s(orting)30 b(function)g(de\014nitions)g -(from)f(the)i(shell)g(en)m(vironmen)m(t)g(at)g(startup.)225 -1058 y Fq(\017)60 b Fu(P)m(arsing)31 b(the)f(v)-5 b(alue)31 -b(of)g Ft(SHELLOPTS)d Fu(from)h(the)i(shell)g(en)m(vironmen)m(t)g(at)g -(startup.)225 1193 y Fq(\017)60 b Fu(Redirecting)31 b(output)f(using)g -(the)h(`)p Ft(>)p Fu(',)g(`)p Ft(>|)p Fu(',)f(`)p Ft(<>)p -Fu(',)h(`)p Ft(>&)p Fu(',)f(`)p Ft(&>)p Fu(',)h(and)e(`)p -Ft(>>)p Fu(')i(redirection)g(op)s(erators.)225 1327 y -Fq(\017)60 b Fu(Using)31 b(the)f Ft(exec)f Fu(builtin)h(to)h(replace)h -(the)e(shell)h(with)f(another)h(command.)225 1462 y Fq(\017)60 -b Fu(Adding)24 b(or)g(deleting)i(builtin)e(commands)g(with)h(the)f -Ft(-f)g Fu(and)g Ft(-d)g Fu(options)h(to)h(the)e Ft(enable)f -Fu(builtin.)225 1597 y Fq(\017)60 b Fu(Using)31 b(the)f -Ft(enable)f Fu(builtin)h(command)g(to)h(enable)g(disabled)f(shell)g -(builtins.)225 1732 y Fq(\017)60 b Fu(Sp)s(ecifying)30 -b(the)g Ft(-p)g Fu(option)h(to)g(the)g Ft(command)d Fu(builtin.)225 -1867 y Fq(\017)60 b Fu(T)-8 b(urning)29 b(o\013)i(restricted)g(mo)s(de) -f(with)g(`)p Ft(set)g(+r)p Fu(')g(or)g(`)p Ft(shopt)f(-u)h -(restricted_shell)p Fu('.)275 2028 y(These)g(restrictions)h(are)g -(enforced)f(after)h(an)m(y)g(startup)f(\014les)g(are)h(read.)275 -2163 y(When)j(a)i(command)e(that)i(is)f(found)f(to)h(b)s(e)g(a)g(shell) -g(script)g(is)g(executed)h(\(see)g(Section)g(3.8)g([Shell)150 -2273 y(Scripts],)25 b(page)e(46\),)j Ft(rbash)c Fu(turns)g(o\013)i(an)m -(y)f(restrictions)h(in)f(the)g(shell)h(spa)m(wned)e(to)i(execute)g(the) -g(script.)275 2408 y(The)32 b(restricted)h(shell)g(mo)s(de)g(is)g(only) -g(one)g(comp)s(onen)m(t)g(of)g(a)g(useful)f(restricted)i(en)m(vironmen) -m(t.)49 b(It)150 2517 y(should)22 b(b)s(e)f(accompanied)j(b)m(y)e -(setting)i Ft(PATH)d Fu(to)j(a)f(v)-5 b(alue)23 b(that)g(allo)m(ws)h -(execution)f(of)g(only)g(a)g(few)f(v)m(eri\014ed)150 -2627 y(commands)35 b(\(commands)g(that)h(allo)m(w)g(shell)f(escap)s(es) -h(are)f(particularly)h(vulnerable\),)h(c)m(hanging)f(the)150 -2737 y(curren)m(t)28 b(directory)g(to)h(a)f(non-writable)g(directory)g +1160 y(ables.)225 1292 y Fq(\017)60 b Fu(Sp)s(ecifying)30 +b(command)g(names)g(con)m(taining)i(slashes.)225 1424 +y Fq(\017)60 b Fu(Sp)s(ecifying)30 b(a)h(\014lename)f(con)m(taining)i +(a)f(slash)f(as)h(an)f(argumen)m(t)h(to)g(the)f Ft(.)h +Fu(builtin)e(command.)225 1555 y Fq(\017)60 b Fu(Sp)s(ecifying)33 +b(a)i(\014lename)f(con)m(taining)h(a)g(slash)e(as)i(an)e(argumen)m(t)i +(to)g(the)f Ft(history)e Fu(builtin)h(com-)330 1665 y(mand.)225 +1797 y Fq(\017)60 b Fu(Sp)s(ecifying)32 b(a)g(\014lename)h(con)m +(taining)h(a)e(slash)g(as)h(an)f(argumen)m(t)h(to)g(the)f +Ft(-p)g Fu(option)h(to)g(the)f Ft(hash)330 1906 y Fu(builtin)e +(command.)225 2038 y Fq(\017)60 b Fu(Imp)s(orting)30 +b(function)g(de\014nitions)g(from)f(the)i(shell)g(en)m(vironmen)m(t)g +(at)g(startup.)225 2170 y Fq(\017)60 b Fu(P)m(arsing)31 +b(the)f(v)-5 b(alue)31 b(of)g Ft(SHELLOPTS)d Fu(from)h(the)i(shell)g +(en)m(vironmen)m(t)g(at)g(startup.)225 2301 y Fq(\017)60 +b Fu(Redirecting)31 b(output)f(using)g(the)h(`)p Ft(>)p +Fu(',)g(`)p Ft(>|)p Fu(',)f(`)p Ft(<>)p Fu(',)h(`)p Ft(>&)p +Fu(',)f(`)p Ft(&>)p Fu(',)h(and)e(`)p Ft(>>)p Fu(')i(redirection)g(op)s +(erators.)225 2433 y Fq(\017)60 b Fu(Using)31 b(the)f +Ft(exec)f Fu(builtin)h(to)h(replace)h(the)e(shell)h(with)f(another)h +(command.)225 2565 y Fq(\017)60 b Fu(Adding)24 b(or)g(deleting)i +(builtin)e(commands)g(with)h(the)f Ft(-f)g Fu(and)g Ft(-d)g +Fu(options)h(to)h(the)e Ft(enable)f Fu(builtin.)225 2696 +y Fq(\017)60 b Fu(Using)31 b(the)f Ft(enable)f Fu(builtin)h(command)g +(to)h(enable)g(disabled)f(shell)g(builtins.)225 2828 +y Fq(\017)60 b Fu(Sp)s(ecifying)30 b(the)g Ft(-p)g Fu(option)h(to)g +(the)g Ft(command)d Fu(builtin.)225 2960 y Fq(\017)60 +b Fu(T)-8 b(urning)29 b(o\013)i(restricted)g(mo)s(de)f(with)g(`)p +Ft(set)g(+r)p Fu(')g(or)g(`)p Ft(shopt)f(-u)h(restricted_shell)p +Fu('.)275 3114 y(These)g(restrictions)h(are)g(enforced)f(after)h(an)m +(y)g(startup)f(\014les)g(are)h(read.)275 3245 y(When)j(a)i(command)e +(that)i(is)f(found)f(to)h(b)s(e)g(a)g(shell)g(script)g(is)g(executed)h +(\(see)g(Section)g(3.8)g([Shell)150 3355 y(Scripts],)25 +b(page)e(47\),)j Ft(rbash)c Fu(turns)g(o\013)i(an)m(y)f(restrictions)h +(in)f(the)g(shell)h(spa)m(wned)e(to)i(execute)g(the)g(script.)275 +3487 y(The)32 b(restricted)h(shell)g(mo)s(de)g(is)g(only)g(one)g(comp)s +(onen)m(t)g(of)g(a)g(useful)f(restricted)i(en)m(vironmen)m(t.)49 +b(It)150 3596 y(should)22 b(b)s(e)f(accompanied)j(b)m(y)e(setting)i +Ft(PATH)d Fu(to)j(a)f(v)-5 b(alue)23 b(that)g(allo)m(ws)h(execution)f +(of)g(only)g(a)g(few)f(v)m(eri\014ed)150 3706 y(commands)35 +b(\(commands)g(that)h(allo)m(w)g(shell)f(escap)s(es)h(are)f +(particularly)h(vulnerable\),)h(c)m(hanging)f(the)150 +3815 y(curren)m(t)28 b(directory)g(to)h(a)f(non-writable)g(directory)g (other)g(than)g Ft($HOME)e Fu(after)j(login,)g(not)f(allo)m(wing)i(the) -150 2846 y(restricted)25 b(shell)g(to)h(execute)g(shell)f(scripts,)h +150 3925 y(restricted)25 b(shell)g(to)h(execute)g(shell)f(scripts,)h (and)e(cleaning)i(the)f(en)m(vironmen)m(t)h(of)f(v)-5 -b(ariables)25 b(that)g(cause)150 2956 y(some)31 b(commands)f(to)h(mo)s +b(ariables)25 b(that)g(cause)150 4035 y(some)31 b(commands)f(to)h(mo)s (dify)e(their)i(b)s(eha)m(vior)f(\(e.g.,)j Ft(VISUAL)28 -b Fu(or)j Ft(PAGER)p Fu(\).)275 3091 y(Mo)s(dern)e(systems)g(pro)m +b Fu(or)j Ft(PAGER)p Fu(\).)275 4166 y(Mo)s(dern)e(systems)g(pro)m (vide)h(more)g(secure)g(w)m(a)m(ys)g(to)h(implemen)m(t)f(a)g -(restricted)h(en)m(vironmen)m(t,)f(suc)m(h)150 3201 y(as)h +(restricted)h(en)m(vironmen)m(t,)f(suc)m(h)150 4276 y(as)h Ft(jails)p Fu(,)e Ft(zones)p Fu(,)g(or)h Ft(containers)p -Fu(.)150 3443 y Fs(6.11)68 b(Bash)45 b(POSIX)f(Mo)t(de)150 -3602 y Fu(Starting)39 b(Bash)f(with)g(the)h Ft(--posix)d -Fu(command-line)j(option)g(or)f(executing)h(`)p Ft(set)30 -b(-o)g(posix)p Fu(')37 b(while)150 3712 y(Bash)26 b(is)g(running)e -(will)j(cause)f(Bash)g(to)h(conform)f(more)g(closely)h(to)g(the)f -Fm(posix)f Fu(standard)g(b)m(y)h(c)m(hanging)150 3821 -y(the)31 b(b)s(eha)m(vior)f(to)h(matc)m(h)g(that)g(sp)s(eci\014ed)f(b)m -(y)g Fm(posix)g Fu(in)g(areas)h(where)f(the)h(Bash)f(default)h -(di\013ers.)275 3957 y(When)f(in)m(v)m(ok)m(ed)h(as)g -Ft(sh)p Fu(,)f(Bash)h(en)m(ters)g Fm(posix)e Fu(mo)s(de)h(after)h -(reading)g(the)f(startup)g(\014les.)275 4092 y(The)f(follo)m(wing)j +Fu(.)150 4511 y Fs(6.11)68 b(Bash)45 b(and)g(POSIX)150 +4733 y Fk(6.11.1)63 b(What)40 b(is)i(POSIX?)150 4879 +y Fm(posix)22 b Fu(is)g(the)g(name)h(for)f(a)g(family)h(of)g(standards) +e(based)h(on)g(Unix.)38 b(A)22 b(n)m(um)m(b)s(er)f(of)i(Unix)f +(services,)j(to)s(ols,)150 4989 y(and)33 b(functions)g(are)h(part)f(of) +h(the)f(standard,)h(ranging)g(from)f(the)g(basic)h(system)g(calls)g +(and)f(C)g(library)150 5099 y(functions)d(to)h(common)g(applications)g +(and)f(to)s(ols)h(to)g(system)g(administration)g(and)e(managemen)m(t.) +275 5230 y(The)22 b Fm(posix)g Fu(Shell)g(and)g(Utilities)j(standard)c +(w)m(as)i(originally)h(dev)m(elop)s(ed)f(b)m(y)g(IEEE)f(W)-8 +b(orking)24 b(Group)150 5340 y(1003.2)46 b(\(POSIX.2\).)80 +b(The)43 b(\014rst)f(edition)i(of)g(the)f(1003.2)j(standard)c(w)m(as)i +(published)e(in)h(1992.)81 b(It)p eop end +%%Page: 110 116 +TeXDict begin 110 115 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(110)150 299 y(w)m(as)31 +b(merged)g(with)g(the)g(original)h(IEEE)e(1003.1)k(W)-8 +b(orking)32 b(Group)e(and)g(is)h(curren)m(tly)g(main)m(tained)h(b)m(y) +150 408 y(the)41 b(Austin)g(Group)g(\(a)h(join)m(t)g(w)m(orking)g +(group)e(of)i(the)f(IEEE,)g(The)g(Op)s(en)f(Group)g(and)h(ISO/IEC)150 +518 y(SC22/W)m(G15\).)i(T)-8 b(o)s(da)m(y)28 b(the)g(Shell)g(and)f +(Utilities)j(are)e(a)g(v)m(olume)h(within)e(the)h(set)h(of)f(do)s +(cumen)m(ts)f(that)150 628 y(mak)m(e)34 b(up)e(IEEE)g(Std)g +(1003.1-2017,)38 b(and)32 b(th)m(us)h(the)g(former)f(POSIX.2)h(\(from)f +(1992\))j(is)e(no)m(w)g(part)g(of)150 737 y(the)e(curren)m(t)f +(uni\014ed)f Fm(posix)g Fu(standard.)275 869 y(The)k(Shell)h(and)g +(Utilities)i(v)m(olume)f(concen)m(trates)h(on)e(the)g(command)g(in)m +(terpreter)h(in)m(terface)h(and)150 979 y(utilit)m(y)i(programs)f +(commonly)g(executed)g(from)g(the)g(command)f(line)h(or)g(b)m(y)g +(other)g(programs.)59 b(The)150 1089 y(standard)37 b(is)g(freely)h(a)m +(v)-5 b(ailable)40 b(on)d(the)h(w)m(eb)g(at)g Ft(https:)6 +b(/)g(/)g(pubs)g(.)g(opengrou)o(p)g(.)g(o)o(rg)g(/)f(onl)o(inep)o(ubs)g +(/)150 1198 y(9699919799/utilities/con)o(tent)o(s.ht)o(ml)p +Fu(.)275 1330 y(Bash)25 b(is)g(concerned)h(with)f(the)g(asp)s(ects)h +(of)f(the)h(shell's)g(b)s(eha)m(vior)f(de\014ned)f(b)m(y)h(the)h +Fm(posix)e Fu(Shell)i(and)150 1440 y(Utilities)35 b(v)m(olume.)49 +b(The)33 b(shell)g(command)f(language)j(has)d(of)i(course)f(b)s(een)f +(standardized,)h(including)150 1550 y(the)42 b(basic)g(\015o)m(w)g(con) +m(trol)i(and)d(program)g(execution)i(constructs,)j(I/O)41 +b(redirection)i(and)e(pip)s(elines,)150 1659 y(argumen)m(t)31 +b(handling,)f(v)-5 b(ariable)31 b(expansion,)f(and)g(quoting.)275 +1791 y(The)40 b Fl(sp)-5 b(e)g(cial)52 b Fu(builtins,)44 +b(whic)m(h)d(m)m(ust)g(b)s(e)g(implemen)m(ted)h(as)f(part)g(of)h(the)f +(shell)g(to)h(pro)m(vide)g(the)150 1901 y(desired)25 +b(functionalit)m(y)-8 b(,)28 b(are)e(sp)s(eci\014ed)f(as)g(b)s(eing)g +(part)h(of)f(the)h(shell;)h(examples)f(of)g(these)g(are)f +Ft(eval)g Fu(and)150 2010 y Ft(export)p Fu(.)39 b(Other)28 +b(utilities)i(app)s(ear)f(in)f(the)h(sections)h(of)f(POSIX)f(not)h(dev) +m(oted)h(to)g(the)f(shell)g(whic)m(h)g(are)150 2120 y(commonly)24 +b(\(and)f(in)g(some)h(cases)g(m)m(ust)f(b)s(e\))g(implemen)m(ted)h(as)f +(builtin)g(commands,)i(suc)m(h)e(as)g Ft(read)g Fu(and)150 +2230 y Ft(test)p Fu(.)39 b(POSIX)28 b(also)h(sp)s(eci\014es)g(asp)s +(ects)g(of)g(the)g(shell's)g(in)m(teractiv)m(e)i(b)s(eha)m(vior,)f +(including)e(job)g(con)m(trol)150 2339 y(and)36 b(command)g(line)h +(editing.)59 b(Only)36 b(vi-st)m(yle)i(line)f(editing)g(commands)f(ha)m +(v)m(e)h(b)s(een)f(standardized;)150 2449 y(emacs)31 +b(editing)g(commands)f(w)m(ere)h(left)g(out)g(due)e(to)j(ob)5 +b(jections.)150 2643 y Fk(6.11.2)63 b(Bash)41 b(POSIX)g(Mo)s(de)150 +2790 y Fu(Although)29 b(Bash)g(is)g(an)g(implemen)m(tation)h(of)f(the)g +Fm(posix)f Fu(shell)h(sp)s(eci\014cation,)i(there)e(are)g(areas)g +(where)150 2900 y(the)g(Bash)g(default)g(b)s(eha)m(vior)g(di\013ers)f +(from)g(the)h(sp)s(eci\014cation.)41 b(The)28 b(Bash)h +Fr(p)s(osix)g(mo)s(de)k Fu(c)m(hanges)d(the)150 3009 +y(Bash)h(b)s(eha)m(vior)f(in)g(these)h(areas)g(so)g(that)g(it)f +(conforms)h(to)g(the)f(standard)g(more)g(closely)-8 b(.)275 +3142 y(Starting)26 b(Bash)g(with)f(the)h Ft(--posix)e +Fu(command-line)j(option)f(or)g(executing)h(`)p Ft(set)j(-o)f(posix)p +Fu(')c(while)150 3251 y(Bash)h(is)g(running)e(will)j(cause)f(Bash)g(to) +h(conform)f(more)g(closely)h(to)g(the)f Fm(posix)f Fu(standard)g(b)m(y) +h(c)m(hanging)150 3361 y(the)31 b(b)s(eha)m(vior)f(to)h(matc)m(h)g +(that)g(sp)s(eci\014ed)f(b)m(y)g Fm(posix)g Fu(in)g(areas)h(where)f +(the)h(Bash)f(default)h(di\013ers.)275 3493 y(When)f(in)m(v)m(ok)m(ed)h +(as)g Ft(sh)p Fu(,)f(Bash)h(en)m(ters)g Fm(posix)e Fu(mo)s(de)h(after)h +(reading)g(the)f(startup)g(\014les.)275 3625 y(The)f(follo)m(wing)j (list)f(is)g(what's)f(c)m(hanged)h(when)e(`)p Fm(posix)h -Fu(mo)s(de')h(is)f(in)g(e\013ect:)199 4227 y(1.)61 b(Bash)31 +Fu(mo)s(de')h(is)f(in)g(e\013ect:)199 3757 y(1.)61 b(Bash)31 b(ensures)e(that)i(the)f Ft(POSIXLY_CORRECT)d Fu(v)-5 -b(ariable)31 b(is)f(set.)199 4362 y(2.)61 b(When)28 b(a)i(command)e(in) +b(ariable)31 b(is)f(set.)199 3889 y(2.)61 b(When)28 b(a)i(command)e(in) g(the)h(hash)f(table)i(no)e(longer)h(exists,)h(Bash)f(will)g(re-searc)m -(h)h Ft($PATH)d Fu(to)i(\014nd)330 4472 y(the)i(new)e(lo)s(cation.)43 +(h)h Ft($PATH)d Fu(to)i(\014nd)330 3999 y(the)i(new)e(lo)s(cation.)43 b(This)29 b(is)i(also)g(a)m(v)-5 b(ailable)33 b(with)d(`)p -Ft(shopt)f(-s)h(checkhash)p Fu('.)199 4607 y(3.)61 b(Bash)36 +Ft(shopt)f(-s)h(checkhash)p Fu('.)199 4131 y(3.)61 b(Bash)36 b(will)g(not)g(insert)g(a)g(command)f(without)h(the)g(execute)h(bit)f -(set)g(in)m(to)h(the)f(command)g(hash)330 4716 y(table,)c(ev)m(en)f(if) +(set)g(in)m(to)h(the)f(command)g(hash)330 4241 y(table,)c(ev)m(en)f(if) f(it)h(returns)e(it)i(as)g(a)f(\(last-ditc)m(h\))j(result)d(from)g(a)h -Ft($PATH)e Fu(searc)m(h.)199 4851 y(4.)61 b(The)42 b(message)h(prin)m +Ft($PATH)e Fu(searc)m(h.)199 4373 y(4.)61 b(The)42 b(message)h(prin)m (ted)e(b)m(y)h(the)g(job)g(con)m(trol)i(co)s(de)e(and)f(builtins)h -(when)f(a)h(job)g(exits)h(with)f(a)330 4961 y(non-zero)31 -b(status)g(is)f(`Done\(status\)'.)199 5095 y(5.)61 b(The)40 +(when)f(a)h(job)g(exits)h(with)f(a)330 4483 y(non-zero)31 +b(status)g(is)f(`Done\(status\)'.)199 4615 y(5.)61 b(The)40 b(message)h(prin)m(ted)f(b)m(y)g(the)h(job)f(con)m(trol)h(co)s(de)g (and)f(builtins)f(when)h(a)g(job)g(is)h(stopp)s(ed)e(is)330 -5205 y(`Stopp)s(ed\()p Fr(signame)5 b Fu(\)',)31 b(where)f +4724 y(`Stopp)s(ed\()p Fr(signame)5 b Fu(\)',)31 b(where)f Fr(signame)36 b Fu(is,)31 b(for)f(example,)h Ft(SIGTSTP)p -Fu(.)199 5340 y(6.)61 b(Alias)31 b(expansion)g(is)f(alw)m(a)m(ys)i -(enabled,)e(ev)m(en)i(in)e(non-in)m(teractiv)m(e)j(shells.)p -eop end -%%Page: 107 113 -TeXDict begin 107 112 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(107)199 299 y(7.)61 -b(Reserv)m(ed)40 b(w)m(ords)g(app)s(earing)f(in)h(a)g(con)m(text)i -(where)d(reserv)m(ed)h(w)m(ords)f(are)i(recognized)g(do)f(not)330 -408 y(undergo)30 b(alias)h(expansion.)199 536 y(8.)61 +Fu(.)199 4856 y(6.)61 b(Alias)31 b(expansion)g(is)f(alw)m(a)m(ys)i +(enabled,)e(ev)m(en)i(in)e(non-in)m(teractiv)m(e)j(shells.)199 +4989 y(7.)61 b(Reserv)m(ed)40 b(w)m(ords)g(app)s(earing)f(in)h(a)g(con) +m(text)i(where)d(reserv)m(ed)h(w)m(ords)f(are)i(recognized)g(do)f(not) +330 5098 y(undergo)30 b(alias)h(expansion.)199 5230 y(8.)61 b(Alias)45 b(expansion)e(is)h(p)s(erformed)f(when)f(initially)k -(parsing)d(a)h(command)g(substitution.)80 b(The)330 646 +(parsing)d(a)h(command)g(substitution.)80 b(The)330 5340 y(default)44 b(mo)s(de)g(generally)h(defers)f(it,)k(when)43 -b(enabled,)48 b(un)m(til)c(the)g(command)g(substitution)g(is)330 -756 y(executed.)77 b(This)42 b(means)g(that)h(command)f(substitution)f -(will)i(not)g(expand)e(aliases)j(that)f(are)330 865 y(de\014ned)34 +b(enabled,)48 b(un)m(til)c(the)g(command)g(substitution)g(is)p +eop end +%%Page: 111 117 +TeXDict begin 111 116 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(111)330 299 y(executed.)77 +b(This)42 b(means)g(that)h(command)f(substitution)f(will)i(not)g +(expand)e(aliases)j(that)f(are)330 408 y(de\014ned)34 b(after)h(the)g(command)f(substitution)h(is)g(initially)h(parsed)e -(\(e.g.,)k(as)d(part)f(of)h(a)g(function)330 975 y(de\014nition\).)199 -1103 y(9.)61 b(The)38 b Fm(posix)h Ft(PS1)f Fu(and)g -Ft(PS2)g Fu(expansions)g(of)i(`)p Ft(!)p Fu(')f(to)g(the)g(history)g(n) -m(um)m(b)s(er)f(and)g(`)p Ft(!!)p Fu(')h(to)g(`)p Ft(!)p -Fu(')h(are)330 1212 y(enabled,)26 b(and)f(parameter)g(expansion)g(is)g -(p)s(erformed)e(on)i(the)g(v)-5 b(alues)25 b(of)g Ft(PS1)f -Fu(and)h Ft(PS2)f Fu(regardless)330 1322 y(of)31 b(the)f(setting)i(of)e -(the)h Ft(promptvars)c Fu(option.)154 1450 y(10.)61 b(The)30 +(\(e.g.,)k(as)d(part)f(of)h(a)g(function)330 518 y(de\014nition\).)199 +646 y(9.)61 b(The)38 b Fm(posix)h Ft(PS1)f Fu(and)g Ft(PS2)g +Fu(expansions)g(of)i(`)p Ft(!)p Fu(')f(to)g(the)g(history)g(n)m(um)m(b) +s(er)f(and)g(`)p Ft(!!)p Fu(')h(to)g(`)p Ft(!)p Fu(')h(are)330 +756 y(enabled,)26 b(and)f(parameter)g(expansion)g(is)g(p)s(erformed)e +(on)i(the)g(v)-5 b(alues)25 b(of)g Ft(PS1)f Fu(and)h +Ft(PS2)f Fu(regardless)330 865 y(of)31 b(the)f(setting)i(of)e(the)h +Ft(promptvars)c Fu(option.)154 993 y(10.)61 b(The)30 b Fm(posix)g Fu(startup)f(\014les)i(are)g(executed)g(\()p Ft($ENV)p Fu(\))f(rather)g(than)g(the)h(normal)f(Bash)g(\014les.)154 -1577 y(11.)61 b(Tilde)30 b(expansion)g(is)f(only)h(p)s(erformed)f(on)h +1121 y(11.)61 b(Tilde)30 b(expansion)g(is)f(only)h(p)s(erformed)f(on)h (assignmen)m(ts)g(preceding)g(a)g(command)g(name,)g(rather)330 -1687 y(than)g(on)g(all)i(assignmen)m(t)f(statemen)m(ts)h(on)e(the)h -(line.)154 1815 y(12.)61 b(The)30 b(default)g(history)h(\014le)f(is)h -Ft(~/.sh_history)26 b Fu(\(this)31 b(is)f(the)h(default)g(v)-5 -b(alue)30 b(of)h Ft($HISTFILE)p Fu(\).)154 1943 y(13.)61 -b(Redirection)25 b(op)s(erators)f(do)g(not)g(p)s(erform)f(\014lename)h -(expansion)g(on)g(the)g(w)m(ord)f(in)h(the)g(redirection)330 -2052 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m(e.)154 -2180 y(14.)61 b(Redirection)31 b(op)s(erators)g(do)f(not)h(p)s(erform)e -(w)m(ord)h(splitting)h(on)f(the)h(w)m(ord)f(in)g(the)g(redirection.)154 -2308 y(15.)61 b(F)-8 b(unction)35 b(names)g(m)m(ust)f(b)s(e)g(v)-5 -b(alid)35 b(shell)f Ft(name)p Fu(s.)52 b(That)34 b(is,)i(they)f(ma)m(y) -g(not)g(con)m(tain)g(c)m(haracters)330 2418 y(other)e(than)g(letters,)h -(digits,)h(and)d(underscores,)h(and)f(ma)m(y)h(not)g(start)h(with)e(a)h -(digit.)49 b(Declaring)330 2527 y(a)31 b(function)f(with)g(an)g(in)m(v) --5 b(alid)31 b(name)g(causes)f(a)h(fatal)h(syn)m(tax)f(error)f(in)g -(non-in)m(teractiv)m(e)j(shells.)154 2655 y(16.)61 b(F)-8 -b(unction)31 b(names)f(ma)m(y)h(not)g(b)s(e)f(the)g(same)h(as)g(one)f -(of)h(the)f Fm(posix)g Fu(sp)s(ecial)h(builtins.)154 -2783 y(17.)61 b Fm(posix)30 b Fu(sp)s(ecial)h(builtins)e(are)i(found)e -(b)s(efore)h(shell)h(functions)f(during)f(command)h(lo)s(okup.)154 -2911 y(18.)61 b(When)48 b(prin)m(ting)g(shell)h(function)f -(de\014nitions)g(\(e.g.,)55 b(b)m(y)48 b Ft(type)p Fu(\),)k(Bash)d(do)s -(es)f(not)h(prin)m(t)f(the)330 3020 y Ft(function)28 -b Fu(k)m(eyw)m(ord.)154 3148 y(19.)61 b(Literal)28 b(tildes)g(that)f -(app)s(ear)f(as)i(the)f(\014rst)f(c)m(haracter)j(in)d(elemen)m(ts)j(of) -e(the)g Ft(PATH)f Fu(v)-5 b(ariable)27 b(are)h(not)330 -3258 y(expanded)i(as)g(describ)s(ed)f(ab)s(o)m(v)m(e)j(under)d(Section) -i(3.5.2)h([Tilde)f(Expansion],)f(page)h(25.)154 3386 -y(20.)61 b(The)29 b Ft(time)g Fu(reserv)m(ed)h(w)m(ord)g(ma)m(y)g(b)s -(e)g(used)f(b)m(y)h(itself)g(as)g(a)h(command.)40 b(When)30 -b(used)f(in)g(this)h(w)m(a)m(y)-8 b(,)330 3495 y(it)33 -b(displa)m(ys)g(timing)g(statistics)h(for)e(the)h(shell)g(and)f(its)g -(completed)i(c)m(hildren.)47 b(The)32 b Ft(TIMEFORMAT)330 -3605 y Fu(v)-5 b(ariable)31 b(con)m(trols)h(the)e(format)h(of)g(the)f -(timing)h(information.)154 3733 y(21.)61 b(When)33 b(parsing)g(and)f -(expanding)h(a)h($)p Fi({)6 b Fu(.)22 b(.)h(.)11 b Fi(})33 -b Fu(expansion)g(that)h(app)s(ears)f(within)f(double)h(quotes,)330 -3842 y(single)42 b(quotes)g(are)g(no)g(longer)g(sp)s(ecial)g(and)f -(cannot)i(b)s(e)e(used)g(to)h(quote)g(a)g(closing)h(brace)f(or)330 -3952 y(other)31 b(sp)s(ecial)h(c)m(haracter,)i(unless)c(the)i(op)s -(erator)f(is)g(one)h(of)f(those)h(de\014ned)e(to)i(p)s(erform)e -(pattern)330 4061 y(remo)m(v)-5 b(al.)42 b(In)30 b(this)g(case,)i(they) -e(do)g(not)h(ha)m(v)m(e)h(to)f(app)s(ear)e(as)i(matc)m(hed)g(pairs.)154 -4189 y(22.)61 b(The)29 b(parser)g(do)s(es)g(not)h(recognize)h +1230 y(than)g(on)g(all)i(assignmen)m(t)f(statemen)m(ts)h(on)e(the)h +(line.)154 1358 y(12.)61 b(The)29 b(default)g(history)g(\014le)g(is)g +Ft(~/.sh_history)d Fu(\(this)j(is)g(the)g(default)h(v)-5 +b(alue)29 b(the)h(shell)f(assigns)g(to)330 1468 y Ft($HISTFILE)p +Fu(\).)154 1596 y(13.)61 b(Redirection)25 b(op)s(erators)f(do)g(not)g +(p)s(erform)f(\014lename)h(expansion)g(on)g(the)g(w)m(ord)f(in)h(the)g +(redirection)330 1705 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m +(e.)154 1833 y(14.)61 b(Redirection)31 b(op)s(erators)g(do)f(not)h(p)s +(erform)e(w)m(ord)h(splitting)h(on)f(the)h(w)m(ord)f(in)g(the)g +(redirection.)154 1961 y(15.)61 b(F)-8 b(unction)35 b(names)g(m)m(ust)f +(b)s(e)g(v)-5 b(alid)35 b(shell)f Ft(name)p Fu(s.)52 +b(That)34 b(is,)i(they)f(ma)m(y)g(not)g(con)m(tain)g(c)m(haracters)330 +2071 y(other)e(than)g(letters,)h(digits,)h(and)d(underscores,)h(and)f +(ma)m(y)h(not)g(start)h(with)e(a)h(digit.)49 b(Declaring)330 +2180 y(a)31 b(function)f(with)g(an)g(in)m(v)-5 b(alid)31 +b(name)g(causes)f(a)h(fatal)h(syn)m(tax)f(error)f(in)g(non-in)m +(teractiv)m(e)j(shells.)154 2308 y(16.)61 b(F)-8 b(unction)31 +b(names)f(ma)m(y)h(not)g(b)s(e)f(the)g(same)h(as)g(one)f(of)h(the)f +Fm(posix)g Fu(sp)s(ecial)h(builtins.)154 2436 y(17.)61 +b(Ev)m(en)27 b(if)h(a)f(shell)h(function)f(whose)g(name)g(con)m(tains)i +(a)f(slash)f(w)m(as)g(de\014ned)g(b)s(efore)f(en)m(tering)j +Fm(posix)330 2545 y Fu(mo)s(de,)h(the)h(shell)f(will)h(not)g(execute)g +(a)g(function)f(whose)g(name)h(con)m(tains)g(one)g(or)f(more)h +(slashes.)154 2673 y(18.)61 b Fm(posix)25 b Fu(sp)s(ecial)i(builtins)f +(are)g(found)f(b)s(efore)h(shell)g(functions)g(during)f(command)g(lo)s +(okup,)i(includ-)330 2783 y(ing)k(output)e(prin)m(ted)h(b)m(y)h(the)f +Ft(type)f Fu(and)h Ft(command)f Fu(builtins.)154 2911 +y(19.)61 b(When)48 b(prin)m(ting)g(shell)h(function)f(de\014nitions)g +(\(e.g.,)55 b(b)m(y)48 b Ft(type)p Fu(\),)k(Bash)d(do)s(es)f(not)h +(prin)m(t)f(the)330 3020 y Ft(function)28 b Fu(k)m(eyw)m(ord.)154 +3148 y(20.)61 b(Literal)28 b(tildes)g(that)f(app)s(ear)f(as)i(the)f +(\014rst)f(c)m(haracter)j(in)d(elemen)m(ts)j(of)e(the)g +Ft(PATH)f Fu(v)-5 b(ariable)27 b(are)h(not)330 3258 y(expanded)i(as)g +(describ)s(ed)f(ab)s(o)m(v)m(e)j(under)d(Section)i(3.5.2)h([Tilde)f +(Expansion],)f(page)h(25.)154 3386 y(21.)61 b(The)29 +b Ft(time)g Fu(reserv)m(ed)h(w)m(ord)g(ma)m(y)g(b)s(e)g(used)f(b)m(y)h +(itself)g(as)g(a)h(command.)40 b(When)30 b(used)f(in)g(this)h(w)m(a)m +(y)-8 b(,)330 3495 y(it)33 b(displa)m(ys)g(timing)g(statistics)h(for)e +(the)h(shell)g(and)f(its)g(completed)i(c)m(hildren.)47 +b(The)32 b Ft(TIMEFORMAT)330 3605 y Fu(v)-5 b(ariable)31 +b(con)m(trols)h(the)e(format)h(of)g(the)f(timing)h(information.)154 +3733 y(22.)61 b(When)33 b(parsing)g(and)f(expanding)h(a)h($)p +Fi({)6 b Fu(.)22 b(.)h(.)11 b Fi(})33 b Fu(expansion)g(that)h(app)s +(ears)f(within)f(double)h(quotes,)330 3842 y(single)42 +b(quotes)g(are)g(no)g(longer)g(sp)s(ecial)g(and)f(cannot)i(b)s(e)e +(used)g(to)h(quote)g(a)g(closing)h(brace)f(or)330 3952 +y(other)31 b(sp)s(ecial)h(c)m(haracter,)i(unless)c(the)i(op)s(erator)f +(is)g(one)h(of)f(those)h(de\014ned)e(to)i(p)s(erform)e(pattern)330 +4061 y(remo)m(v)-5 b(al.)42 b(In)30 b(this)g(case,)i(they)e(do)g(not)h +(ha)m(v)m(e)h(to)f(app)s(ear)e(as)i(matc)m(hed)g(pairs.)154 +4189 y(23.)61 b(The)29 b(parser)g(do)s(es)g(not)h(recognize)h Ft(time)d Fu(as)i(a)g(reserv)m(ed)f(w)m(ord)g(if)h(the)f(next)h(tok)m (en)h(b)s(egins)d(with)i(a)330 4299 y(`)p Ft(-)p Fu('.)154 -4427 y(23.)61 b(The)30 b(`)p Ft(!)p Fu(')h(c)m(haracter)h(do)s(es)e +4427 y(24.)61 b(The)30 b(`)p Ft(!)p Fu(')h(c)m(haracter)h(do)s(es)e (not)h(in)m(tro)s(duce)g(history)f(expansion)h(within)f(a)h (double-quoted)g(string,)330 4536 y(ev)m(en)g(if)f(the)h -Ft(histexpand)d Fu(option)i(is)h(enabled.)154 4664 y(24.)61 +Ft(histexpand)d Fu(option)i(is)h(enabled.)154 4664 y(25.)61 b(If)24 b(a)g Fm(posix)g Fu(sp)s(ecial)h(builtin)f(returns)f(an)h (error)g(status,)i(a)e(non-in)m(teractiv)m(e)j(shell)e(exits.)39 b(The)24 b(fatal)330 4774 y(errors)30 b(are)h(those)f(listed)h(in)f @@ -15967,423 +16368,483 @@ b(The)24 b(fatal)330 4774 y(errors)30 b(are)h(those)f(listed)h(in)f (passing)e(incorrect)330 4883 y(options,)43 b(redirection)d(errors,)i (v)-5 b(ariable)41 b(assignmen)m(t)g(errors)e(for)g(assignmen)m(ts)i (preceding)f(the)330 4993 y(command)30 b(name,)h(and)f(so)g(on.)154 -5121 y(25.)61 b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with)e -(an)h(error)g(status)g(if)g(a)g(v)-5 b(ariable)32 b(assignmen)m(t)g -(error)e(o)s(ccurs)330 5230 y(when)38 b(no)h(command)g(name)g(follo)m +5121 y(26.)61 b(The)35 b Ft(unset)e Fu(builtin)i(with)g(the)g +Ft(-v)f Fu(option)i(sp)s(eci\014ed)e(returns)g(a)i(fatal)g(error)f(if)g +(it)g(attempts)h(to)330 5230 y(unset)22 b(a)h Ft(readonly)d +Fu(or)i Ft(non-unsettable)c Fu(v)-5 b(ariable,)25 b(or)e(encoun)m(ters) +f(a)h(v)-5 b(ariable)23 b(name)f(argumen)m(t)330 5340 +y(that)31 b(is)f(an)h(in)m(v)-5 b(alid)31 b(iden)m(ti\014er,)f(whic)m +(h)g(causes)h(a)g(non-in)m(teractiv)m(e)i(shell)e(to)g(exit.)p +eop end +%%Page: 112 118 +TeXDict begin 112 117 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(112)154 299 y(27.)61 +b(When)39 b(ask)m(ed)g(to)g(unset)g(a)g(v)-5 b(ariable)39 +b(that)h(app)s(ears)e(in)g(an)h(assignmen)m(t)g(statemen)m(t)i +(preceding)330 408 y(the)30 b(command,)f(the)h Ft(unset)e +Fu(builtin)h(attempts)i(to)f(unset)f(a)h(v)-5 b(ariable)31 +b(of)e(the)h(same)g(name)g(in)f(the)330 518 y(curren)m(t)24 +b(or)g(previous)g(scop)s(e)g(as)g(w)m(ell.)40 b(This)23 +b(implemen)m(ts)i(the)f(required)f Ft(")p Fu(if)h(an)g(assigned)g(v)-5 +b(ariable)330 628 y(is)34 b(further)e(mo)s(di\014ed)g(b)m(y)i(the)g +(utilit)m(y)-8 b(,)36 b(the)e(mo)s(di\014cations)g(made)g(b)m(y)f(the)h +(utilit)m(y)h(shall)f(p)s(ersist)p Ft(")330 737 y Fu(b)s(eha)m(vior.) +154 873 y(28.)61 b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with) +e(an)h(error)g(status)g(if)g(a)g(v)-5 b(ariable)32 b(assignmen)m(t)g +(error)e(o)s(ccurs)330 982 y(when)38 b(no)h(command)g(name)g(follo)m (ws)i(the)e(assignmen)m(t)h(statemen)m(ts.)69 b(A)39 -b(v)-5 b(ariable)40 b(assignmen)m(t)330 5340 y(error)30 +b(v)-5 b(ariable)40 b(assignmen)m(t)330 1092 y(error)30 b(o)s(ccurs,)g(for)g(example,)i(when)d(trying)i(to)g(assign)f(a)h(v)-5 -b(alue)31 b(to)g(a)g(readonly)f(v)-5 b(ariable.)p eop -end -%%Page: 108 114 -TeXDict begin 108 113 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(108)154 299 y(26.)61 -b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with)e(an)h(error)g -(status)g(if)g(a)g(v)-5 b(ariable)32 b(assignmen)m(t)g(error)e(o)s -(ccurs)330 408 y(in)g(an)g(assignmen)m(t)i(statemen)m(t)g(preceding)e -(a)h(sp)s(ecial)g(builtin,)f(but)g(not)g(with)h(an)m(y)f(other)h -(simple)330 518 y(command.)38 b(F)-8 b(or)23 b(an)m(y)g(other)g(simple) -g(command,)h(the)f(shell)g(ab)s(orts)f(execution)i(of)f(that)g -(command,)330 628 y(and)44 b(execution)i(con)m(tin)m(ues)g(at)g(the)f -(top)g(lev)m(el)h(\()p Ft(")p Fu(the)f(shell)h(shall)f(not)g(p)s -(erform)e(an)m(y)i(further)330 737 y(pro)s(cessing)30 -b(of)h(the)f(command)g(in)g(whic)m(h)h(the)f(error)g(o)s(ccurred)p -Ft(")p Fu(\).)154 871 y(27.)61 b(A)43 b(non-in)m(teractiv)m(e)i(shell)e -(exits)h(with)f(an)f(error)h(status)g(if)g(the)g(iteration)h(v)-5 -b(ariable)44 b(in)f(a)g Ft(for)330 981 y Fu(statemen)m(t)32 -b(or)f(the)f(selection)i(v)-5 b(ariable)32 b(in)e(a)g -Ft(select)f Fu(statemen)m(t)j(is)f(a)f(readonly)h(v)-5 -b(ariable.)154 1115 y(28.)61 b(Non-in)m(teractiv)m(e)34 +b(alue)31 b(to)g(a)g(readonly)f(v)-5 b(ariable.)154 1227 +y(29.)61 b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with)e(an)h +(error)g(status)g(if)g(a)g(v)-5 b(ariable)32 b(assignmen)m(t)g(error)e +(o)s(ccurs)330 1337 y(in)g(an)g(assignmen)m(t)i(statemen)m(t)g +(preceding)e(a)h(sp)s(ecial)g(builtin,)f(but)g(not)g(with)h(an)m(y)f +(other)h(simple)330 1446 y(command.)38 b(F)-8 b(or)23 +b(an)m(y)g(other)g(simple)g(command,)h(the)f(shell)g(ab)s(orts)f +(execution)i(of)f(that)g(command,)330 1556 y(and)44 b(execution)i(con)m +(tin)m(ues)g(at)g(the)f(top)g(lev)m(el)h(\()p Ft(")p +Fu(the)f(shell)h(shall)f(not)g(p)s(erform)e(an)m(y)i(further)330 +1666 y(pro)s(cessing)30 b(of)h(the)f(command)g(in)g(whic)m(h)h(the)f +(error)g(o)s(ccurred)p Ft(")p Fu(\).)154 1801 y(30.)61 +b(A)43 b(non-in)m(teractiv)m(e)i(shell)e(exits)h(with)f(an)f(error)h +(status)g(if)g(the)g(iteration)h(v)-5 b(ariable)44 b(in)f(a)g +Ft(for)330 1910 y Fu(statemen)m(t)30 b(or)f(the)g(selection)h(v)-5 +b(ariable)30 b(in)e(a)h Ft(select)e Fu(statemen)m(t)k(is)d(a)h +(readonly)g(v)-5 b(ariable)30 b(or)e(has)330 2020 y(an)i(in)m(v)-5 +b(alid)31 b(name.)154 2155 y(31.)61 b(Non-in)m(teractiv)m(e)34 b(shells)c(exit)h(if)g Fr(\014lename)k Fu(in)30 b Ft(.)g -Fr(\014lename)36 b Fu(is)31 b(not)f(found.)154 1249 y(29.)61 +Fr(\014lename)36 b Fu(is)31 b(not)f(found.)154 2291 y(32.)61 b(Non-in)m(teractiv)m(e)41 b(shells)d(exit)h(if)f(a)g(syn)m(tax)g (error)g(in)f(an)h(arithmetic)h(expansion)f(results)f(in)h(an)330 -1358 y(in)m(v)-5 b(alid)31 b(expression.)154 1492 y(30.)61 +2400 y(in)m(v)-5 b(alid)31 b(expression.)154 2536 y(33.)61 b(Non-in)m(teractiv)m(e)34 b(shells)c(exit)h(if)g(a)f(parameter)h -(expansion)g(error)f(o)s(ccurs.)154 1626 y(31.)61 b(Non-in)m(teractiv)m +(expansion)g(error)f(o)s(ccurs.)154 2671 y(34.)61 b(Non-in)m(teractiv)m (e)27 b(shells)c(exit)i(if)e(there)h(is)f(a)h(syn)m(tax)g(error)f(in)g (a)h(script)f(read)g(with)h(the)f Ft(.)g Fu(or)h Ft(source)330 -1736 y Fu(builtins,)30 b(or)g(in)g(a)h(string)g(pro)s(cessed)e(b)m(y)i -(the)f Ft(eval)f Fu(builtin.)154 1870 y(32.)61 b(While)32 +2781 y Fu(builtins,)30 b(or)g(in)g(a)h(string)g(pro)s(cessed)e(b)m(y)i +(the)f Ft(eval)f Fu(builtin.)154 2916 y(35.)61 b(While)32 b(v)-5 b(ariable)32 b(indirection)f(is)g(a)m(v)-5 b(ailable,)34 b(it)d(ma)m(y)h(not)f(b)s(e)g(applied)g(to)g(the)h(`)p Ft(#)p Fu(')f(and)f(`)p Ft(?)p Fu(')h(sp)s(ecial)330 -1979 y(parameters.)154 2113 y(33.)61 b(Expanding)21 b(the)h(`)p +3026 y(parameters.)154 3161 y(36.)61 b(Expanding)21 b(the)h(`)p Ft(*)p Fu(')g(sp)s(ecial)h(parameter)f(in)g(a)g(pattern)h(con)m(text)g -(where)f(the)g(expansion)g(is)g(double-)330 2223 y(quoted)31 +(where)f(the)g(expansion)g(is)g(double-)330 3271 y(quoted)31 b(do)s(es)f(not)g(treat)i(the)e Ft($*)g Fu(as)h(if)f(it)h(w)m(ere)g -(double-quoted.)154 2357 y(34.)61 b(Assignmen)m(t)23 +(double-quoted.)154 3406 y(37.)61 b(Assignmen)m(t)23 b(statemen)m(ts)h(preceding)e Fm(posix)f Fu(sp)s(ecial)i(builtins)f(p)s -(ersist)g(in)f(the)i(shell)f(en)m(vironmen)m(t)330 2466 -y(after)31 b(the)f(builtin)g(completes.)154 2600 y(35.)61 +(ersist)g(in)f(the)i(shell)f(en)m(vironmen)m(t)330 3516 +y(after)31 b(the)f(builtin)g(completes.)154 3651 y(38.)61 b(The)31 b Ft(command)e Fu(builtin)i(do)s(es)g(not)h(prev)m(en)m(t)f (builtins)g(that)h(tak)m(e)h(assignmen)m(t)f(statemen)m(ts)h(as)f(ar-) -330 2710 y(gumen)m(ts)40 b(from)e(expanding)h(them)g(as)h(assignmen)m +330 3761 y(gumen)m(ts)40 b(from)e(expanding)h(them)g(as)h(assignmen)m (t)g(statemen)m(ts;)46 b(when)38 b(not)i(in)f Fm(posix)f -Fu(mo)s(de,)330 2819 y(assignmen)m(t)k(builtins)e(lose)h(their)g +Fu(mo)s(de,)330 3870 y(assignmen)m(t)k(builtins)e(lose)h(their)g (assignmen)m(t)h(statemen)m(t)h(expansion)d(prop)s(erties)g(when)g -(pre-)330 2929 y(ceded)31 b(b)m(y)f Ft(command)p Fu(.)154 -3063 y(36.)61 b(The)27 b Ft(bg)g Fu(builtin)g(uses)g(the)h(required)f +(pre-)330 3980 y(ceded)31 b(b)m(y)f Ft(command)p Fu(.)154 +4115 y(39.)61 b(The)27 b Ft(bg)g Fu(builtin)g(uses)g(the)h(required)f (format)h(to)g(describ)s(e)f(eac)m(h)i(job)e(placed)h(in)f(the)h(bac)m -(kground,)330 3173 y(whic)m(h)h(do)s(es)g(not)g(include)g(an)g +(kground,)330 4225 y(whic)m(h)h(do)s(es)g(not)g(include)g(an)g (indication)h(of)f(whether)f(the)h(job)g(is)g(the)h(curren)m(t)e(or)h -(previous)g(job.)154 3306 y(37.)61 b(The)23 b(output)f(of)i(`)p +(previous)g(job.)154 4360 y(40.)61 b(The)23 b(output)f(of)i(`)p Ft(kill)29 b(-l)p Fu(')23 b(prin)m(ts)f(all)i(the)g(signal)f(names)g (on)g(a)h(single)g(line,)h(separated)e(b)m(y)g(spaces,)330 -3416 y(without)30 b(the)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154 -3550 y(38.)61 b(The)30 b Ft(kill)f Fu(builtin)h(do)s(es)g(not)h(accept) +4470 y(without)30 b(the)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154 +4605 y(41.)61 b(The)30 b Ft(kill)f Fu(builtin)h(do)s(es)g(not)h(accept) h(signal)f(names)f(with)g(a)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154 -3684 y(39.)61 b(The)38 b Ft(export)f Fu(and)g Ft(readonly)f +4740 y(42.)61 b(The)38 b Ft(export)f Fu(and)g Ft(readonly)f Fu(builtin)i(commands)g(displa)m(y)h(their)f(output)g(in)g(the)h -(format)g(re-)330 3794 y(quired)30 b(b)m(y)g Fm(posix)p -Fu(.)154 3927 y(40.)61 b(The)30 b Ft(trap)f Fu(builtin)h(displa)m(ys)g -(signal)i(names)e(without)g(the)h(leading)g Ft(SIG)p -Fu(.)154 4061 y(41.)61 b(The)39 b Ft(trap)e Fu(builtin)i(do)s(esn't)g -(c)m(hec)m(k)h(the)g(\014rst)e(argumen)m(t)i(for)e(a)i(p)s(ossible)e -(signal)i(sp)s(eci\014cation)330 4171 y(and)30 b(rev)m(ert)i(the)e -(signal)i(handling)e(to)h(the)g(original)h(disp)s(osition)e(if)h(it)g -(is,)g(unless)f(that)h(argumen)m(t)330 4281 y(consists)e(solely)g(of)g -(digits)g(and)f(is)g(a)h(v)-5 b(alid)29 b(signal)g(n)m(um)m(b)s(er.)38 -b(If)28 b(users)g(w)m(an)m(t)h(to)g(reset)g(the)g(handler)330 -4390 y(for)h(a)g(giv)m(en)h(signal)g(to)f(the)h(original)g(disp)s +(format)g(re-)330 4850 y(quired)30 b(b)m(y)g Fm(posix)p +Fu(.)154 4985 y(43.)61 b(If)39 b(the)g Ft(export)f Fu(and)g +Ft(readonly)f Fu(builtin)i(commands)g(get)h(an)g(argumen)m(t)f(that)h +(is)f(not)h(a)g(v)-5 b(alid)330 5095 y(iden)m(ti\014er,)27 +b(and)f(they)g(are)h(not)f(op)s(erating)g(on)g(shell)h(functions,)f +(they)h(return)d(an)i(error.)39 b(This)26 b(will)330 +5205 y(cause)31 b(a)g(non-in)m(teractiv)m(e)i(shell)d(to)h(exit)h(b)s +(ecause)e(these)h(are)g(sp)s(ecial)g(builtins.)154 5340 +y(44.)61 b(The)30 b Ft(trap)f Fu(builtin)h(displa)m(ys)g(signal)i +(names)e(without)g(the)h(leading)g Ft(SIG)p Fu(.)p eop +end +%%Page: 113 119 +TeXDict begin 113 118 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(113)154 299 y(45.)61 +b(The)39 b Ft(trap)e Fu(builtin)i(do)s(esn't)g(c)m(hec)m(k)h(the)g +(\014rst)e(argumen)m(t)i(for)e(a)i(p)s(ossible)e(signal)i(sp)s +(eci\014cation)330 408 y(and)30 b(rev)m(ert)i(the)e(signal)i(handling)e +(to)h(the)g(original)h(disp)s(osition)e(if)h(it)g(is,)g(unless)f(that)h +(argumen)m(t)330 518 y(consists)e(solely)g(of)g(digits)g(and)f(is)g(a)h +(v)-5 b(alid)29 b(signal)g(n)m(um)m(b)s(er.)38 b(If)28 +b(users)g(w)m(an)m(t)h(to)g(reset)g(the)g(handler)330 +628 y(for)h(a)g(giv)m(en)h(signal)g(to)f(the)h(original)g(disp)s (osition,)f(they)g(should)f(use)h(`)p Ft(-)p Fu(')g(as)g(the)g(\014rst) -f(argumen)m(t.)154 4524 y(42.)61 b Ft(trap)29 b(-p)35 -b Fu(displa)m(ys)h(signals)h(whose)f(disp)s(ositions)f(are)h(set)h(to)f -(SIG)p 2687 4524 28 4 v 40 w(DFL)g(and)g(those)g(that)g(w)m(ere)330 -4634 y(ignored)30 b(when)g(the)g(shell)h(started.)154 -4768 y(43.)61 b(The)21 b Ft(.)h Fu(and)f Ft(source)f -Fu(builtins)h(do)g(not)h(searc)m(h)h(the)f(curren)m(t)f(directory)h -(for)g(the)g(\014lename)f(argumen)m(t)330 4877 y(if)30 -b(it)h(is)g(not)f(found)f(b)m(y)i(searc)m(hing)g Ft(PATH)p -Fu(.)154 5011 y(44.)61 b(Enabling)21 b Fm(posix)g Fu(mo)s(de)g(has)g -(the)g(e\013ect)i(of)e(setting)i(the)e Ft(inherit_errexit)d -Fu(option,)23 b(so)f(subshells)330 5121 y(spa)m(wned)27 -b(to)i(execute)g(command)e(substitutions)h(inherit)f(the)h(v)-5 -b(alue)28 b(of)g(the)g Ft(-e)f Fu(option)h(from)g(the)330 -5230 y(paren)m(t)37 b(shell.)62 b(When)37 b(the)g Ft(inherit_errexit)c -Fu(option)38 b(is)f(not)h(enabled,)h(Bash)e(clears)h(the)g -Ft(-e)330 5340 y Fu(option)31 b(in)f(suc)m(h)g(subshells.)p -eop end -%%Page: 109 115 -TeXDict begin 109 114 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(109)154 299 y(45.)61 -b(Enabling)32 b Fm(posix)f Fu(mo)s(de)h(has)g(the)h(e\013ect)g(of)g -(setting)g(the)g Ft(shift_verbose)28 b Fu(option,)34 -b(so)e(n)m(umeric)330 408 y(argumen)m(ts)f(to)g Ft(shift)f -Fu(that)h(exceed)h(the)e(n)m(um)m(b)s(er)g(of)h(p)s(ositional)g -(parameters)g(will)g(result)g(in)f(an)330 518 y(error)g(message.)154 -662 y(46.)61 b(When)43 b(the)g Ft(alias)f Fu(builtin)g(displa)m(ys)i -(alias)g(de\014nitions,)i(it)d(do)s(es)g(not)g(displa)m(y)h(them)f -(with)g(a)330 771 y(leading)31 b(`)p Ft(alias)e Fu(')i(unless)f(the)g -Ft(-p)g Fu(option)h(is)f(supplied.)154 915 y(47.)61 b(When)40 -b(the)g Ft(set)f Fu(builtin)h(is)g(in)m(v)m(ok)m(ed)h(without)f -(options,)j(it)e(do)s(es)f(not)g(displa)m(y)g(shell)g(function)330 -1025 y(names)30 b(and)g(de\014nitions.)154 1169 y(48.)61 -b(When)36 b(the)g Ft(set)g Fu(builtin)g(is)g(in)m(v)m(ok)m(ed)i -(without)e(options,)i(it)f(displa)m(ys)f(v)-5 b(ariable)37 -b(v)-5 b(alues)37 b(without)330 1278 y(quotes,)26 b(unless)d(they)i -(con)m(tain)g(shell)f(metac)m(haracters,)k(ev)m(en)d(if)f(the)g(result) -g(con)m(tains)i(nonprin)m(ting)330 1388 y(c)m(haracters.)154 -1532 y(49.)61 b(When)35 b(the)h Ft(cd)e Fu(builtin)h(is)h(in)m(v)m(ok)m -(ed)g(in)f(logical)j(mo)s(de,)e(and)f(the)h(pathname)f(constructed)g -(from)330 1641 y Ft($PWD)i Fu(and)h(the)h(directory)f(name)h(supplied)e -(as)i(an)f(argumen)m(t)h(do)s(es)f(not)g(refer)h(to)g(an)f(existing)330 -1751 y(directory)-8 b(,)32 b Ft(cd)d Fu(will)i(fail)g(instead)g(of)f +f(argumen)m(t.)154 757 y(46.)61 b Ft(trap)29 b(-p)24 +b Fu(without)g(argumen)m(ts)g(displa)m(ys)g(signals)g(whose)g(disp)s +(ositions)g(are)g(set)h(to)f(SIG)p 3360 757 28 4 v 40 +w(DFL)h(and)330 866 y(those)31 b(that)g(w)m(ere)g(ignored)f(when)g(the) +g(shell)h(started,)g(not)f(just)g(trapp)s(ed)f(signals.)154 +995 y(47.)61 b(The)21 b Ft(.)h Fu(and)f Ft(source)f Fu(builtins)h(do)g +(not)h(searc)m(h)h(the)f(curren)m(t)f(directory)h(for)g(the)g +(\014lename)f(argumen)m(t)330 1105 y(if)30 b(it)h(is)g(not)f(found)f(b) +m(y)i(searc)m(hing)g Ft(PATH)p Fu(.)154 1234 y(48.)61 +b(Enabling)21 b Fm(posix)g Fu(mo)s(de)g(has)g(the)g(e\013ect)i(of)e +(setting)i(the)e Ft(inherit_errexit)d Fu(option,)23 b(so)f(subshells) +330 1343 y(spa)m(wned)27 b(to)i(execute)g(command)e(substitutions)h +(inherit)f(the)h(v)-5 b(alue)28 b(of)g(the)g Ft(-e)f +Fu(option)h(from)g(the)330 1453 y(paren)m(t)37 b(shell.)62 +b(When)37 b(the)g Ft(inherit_errexit)c Fu(option)38 b(is)f(not)h +(enabled,)h(Bash)e(clears)h(the)g Ft(-e)330 1562 y Fu(option)31 +b(in)f(suc)m(h)g(subshells.)154 1691 y(49.)61 b(Enabling)32 +b Fm(posix)f Fu(mo)s(de)h(has)g(the)h(e\013ect)g(of)g(setting)g(the)g +Ft(shift_verbose)28 b Fu(option,)34 b(so)e(n)m(umeric)330 +1801 y(argumen)m(ts)f(to)g Ft(shift)f Fu(that)h(exceed)h(the)e(n)m(um)m +(b)s(er)g(of)h(p)s(ositional)g(parameters)g(will)g(result)g(in)f(an)330 +1910 y(error)g(message.)154 2039 y(50.)61 b(When)43 b(the)g +Ft(alias)f Fu(builtin)g(displa)m(ys)i(alias)g(de\014nitions,)i(it)d(do) +s(es)g(not)g(displa)m(y)h(them)f(with)g(a)330 2149 y(leading)31 +b(`)p Ft(alias)e Fu(')i(unless)f(the)g Ft(-p)g Fu(option)h(is)f +(supplied.)154 2278 y(51.)61 b(When)40 b(the)g Ft(set)f +Fu(builtin)h(is)g(in)m(v)m(ok)m(ed)h(without)f(options,)j(it)e(do)s(es) +f(not)g(displa)m(y)g(shell)g(function)330 2388 y(names)30 +b(and)g(de\014nitions.)154 2516 y(52.)61 b(When)36 b(the)g +Ft(set)g Fu(builtin)g(is)g(in)m(v)m(ok)m(ed)i(without)e(options,)i(it)f +(displa)m(ys)f(v)-5 b(ariable)37 b(v)-5 b(alues)37 b(without)330 +2626 y(quotes,)26 b(unless)d(they)i(con)m(tain)g(shell)f(metac)m +(haracters,)k(ev)m(en)d(if)f(the)g(result)g(con)m(tains)i(nonprin)m +(ting)330 2736 y(c)m(haracters.)154 2865 y(53.)61 b(When)35 +b(the)h Ft(cd)e Fu(builtin)h(is)h(in)m(v)m(ok)m(ed)g(in)f(logical)j(mo) +s(de,)e(and)f(the)h(pathname)f(constructed)g(from)330 +2974 y Ft($PWD)i Fu(and)h(the)h(directory)f(name)h(supplied)e(as)i(an)f +(argumen)m(t)h(do)s(es)f(not)g(refer)h(to)g(an)f(existing)330 +3084 y(directory)-8 b(,)32 b Ft(cd)d Fu(will)i(fail)g(instead)g(of)f (falling)h(bac)m(k)h(to)f(ph)m(ysical)g(mo)s(de.)154 -1895 y(50.)61 b(When)37 b(the)h Ft(cd)f Fu(builtin)g(cannot)h(c)m +3213 y(54.)61 b(When)37 b(the)h Ft(cd)f Fu(builtin)g(cannot)h(c)m (hange)h(a)f(directory)g(b)s(ecause)g(the)g(length)g(of)f(the)h -(pathname)330 2004 y(constructed)27 b(from)g Ft($PWD)f +(pathname)330 3322 y(constructed)27 b(from)g Ft($PWD)f Fu(and)h(the)g(directory)h(name)f(supplied)f(as)i(an)f(argumen)m(t)g -(exceeds)h Ft(PATH_)330 2114 y(MAX)d Fu(when)g(all)h(sym)m(b)s(olic)g -(links)g(are)g(expanded,)g Ft(cd)f Fu(will)h(fail)h(instead)f(of)g -(attempting)h(to)f(use)g(only)330 2224 y(the)31 b(supplied)e(directory) -i(name.)154 2367 y(51.)61 b(The)36 b Ft(pwd)f Fu(builtin)h(v)m +(exceeds)h Ft(PATH_)330 3432 y(MAX)h Fu(when)h(canonicalized,)j +Ft(cd)c Fu(will)i(attempt)h(to)f(use)f(the)g(supplied)f(directory)i +(name.)154 3561 y(55.)61 b(The)36 b Ft(pwd)f Fu(builtin)h(v)m (eri\014es)h(that)g(the)f(v)-5 b(alue)37 b(it)g(prin)m(ts)e(is)i(the)f (same)h(as)f(the)h(curren)m(t)f(directory)-8 b(,)330 -2477 y(ev)m(en)31 b(if)f(it)h(is)g(not)f(ask)m(ed)h(to)g(c)m(hec)m(k)h +3670 y(ev)m(en)31 b(if)f(it)h(is)g(not)f(ask)m(ed)h(to)g(c)m(hec)m(k)h (the)f(\014le)f(system)h(with)f(the)h Ft(-P)e Fu(option.)154 -2621 y(52.)61 b(When)35 b(listing)g(the)g(history)-8 +3799 y(56.)61 b(When)35 b(listing)g(the)g(history)-8 b(,)36 b(the)f Ft(fc)g Fu(builtin)f(do)s(es)g(not)h(include)g(an)f -(indication)i(of)f(whether)f(or)330 2730 y(not)d(a)f(history)h(en)m -(try)f(has)g(b)s(een)g(mo)s(di\014ed.)154 2874 y(53.)61 +(indication)i(of)f(whether)f(or)330 3909 y(not)d(a)f(history)h(en)m +(try)f(has)g(b)s(een)g(mo)s(di\014ed.)154 4038 y(57.)61 b(The)30 b(default)g(editor)h(used)f(b)m(y)g Ft(fc)g -Fu(is)g Ft(ed)p Fu(.)154 3018 y(54.)61 b(The)37 b Ft(type)g -Fu(and)g Ft(command)f Fu(builtins)i(will)g(not)g(rep)s(ort)f(a)i -(non-executable)g(\014le)f(as)g(ha)m(ving)h(b)s(een)330 -3128 y(found,)26 b(though)h(the)g(shell)g(will)g(attempt)h(to)g -(execute)g(suc)m(h)f(a)g(\014le)g(if)g(it)g(is)g(the)g(only)g(so-named) -g(\014le)330 3237 y(found)i(in)h Ft($PATH)p Fu(.)154 -3381 y(55.)61 b(The)33 b Ft(vi)f Fu(editing)i(mo)s(de)f(will)g(in)m(v)m -(ok)m(e)i(the)e Ft(vi)g Fu(editor)h(directly)f(when)f(the)i(`)p -Ft(v)p Fu(')f(command)g(is)g(run,)330 3491 y(instead)e(of)f(c)m(hec)m -(king)i Ft($VISUAL)d Fu(and)g Ft($EDITOR)p Fu(.)154 3634 -y(56.)61 b(When)41 b(the)g Ft(xpg_echo)e Fu(option)i(is)g(enabled,)j -(Bash)d(do)s(es)g(not)g(attempt)h(to)g(in)m(terpret)f(an)m(y)h(ar-)330 -3744 y(gumen)m(ts)35 b(to)g Ft(echo)e Fu(as)i(options.)54 +Fu(is)g Ft(ed)p Fu(.)154 4167 y(58.)61 b Ft(fc)30 b Fu(treats)h(extra)g +(argumen)m(ts)g(as)f(an)h(error)f(instead)g(of)h(ignoring)g(them.)154 +4296 y(59.)61 b(If)38 b(there)h(are)g(to)s(o)g(man)m(y)g(argumen)m(ts)g +(supplied)e(to)i Ft(fc)30 b(-s)p Fu(,)40 b Ft(fc)e Fu(prin)m(ts)g(an)h +(error)f(message)i(and)330 4405 y(returns)29 b(failure.)154 +4534 y(60.)61 b(The)37 b Ft(type)g Fu(and)g Ft(command)f +Fu(builtins)i(will)g(not)g(rep)s(ort)f(a)i(non-executable)g(\014le)f +(as)g(ha)m(ving)h(b)s(een)330 4644 y(found,)26 b(though)h(the)g(shell)g +(will)g(attempt)h(to)g(execute)g(suc)m(h)f(a)g(\014le)g(if)g(it)g(is)g +(the)g(only)g(so-named)g(\014le)330 4753 y(found)i(in)h +Ft($PATH)p Fu(.)154 4882 y(61.)61 b(The)33 b Ft(vi)f +Fu(editing)i(mo)s(de)f(will)g(in)m(v)m(ok)m(e)i(the)e +Ft(vi)g Fu(editor)h(directly)f(when)f(the)i(`)p Ft(v)p +Fu(')f(command)g(is)g(run,)330 4992 y(instead)e(of)f(c)m(hec)m(king)i +Ft($VISUAL)d Fu(and)g Ft($EDITOR)p Fu(.)154 5121 y(62.)61 +b(When)41 b(the)g Ft(xpg_echo)e Fu(option)i(is)g(enabled,)j(Bash)d(do)s +(es)g(not)g(attempt)h(to)g(in)m(terpret)f(an)m(y)h(ar-)330 +5230 y(gumen)m(ts)35 b(to)g Ft(echo)e Fu(as)i(options.)54 b(Eac)m(h)35 b(argumen)m(t)g(is)f(displa)m(y)m(ed,)j(after)e(escap)s(e) -g(c)m(haracters)h(are)330 3854 y(con)m(v)m(erted.)154 -3998 y(57.)61 b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m -(k)g(size)g(of)g(512)g(b)m(ytes)g(for)f(the)h Ft(-c)f -Fu(and)g Ft(-f)f Fu(options.)154 4141 y(58.)61 b(The)39 -b(arriv)-5 b(al)41 b(of)f Ft(SIGCHLD)e Fu(when)h(a)h(trap)g(is)g(set)h -(on)f Ft(SIGCHLD)e Fu(do)s(es)h(not)h(in)m(terrupt)g(the)g -Ft(wait)330 4251 y Fu(builtin)c(and)h(cause)g(it)h(to)f(return)f +g(c)m(haracters)h(are)330 5340 y(con)m(v)m(erted.)p eop +end +%%Page: 114 120 +TeXDict begin 114 119 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(114)154 299 y(63.)61 +b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m(k)g(size)g(of) +g(512)g(b)m(ytes)g(for)f(the)h Ft(-c)f Fu(and)g Ft(-f)f +Fu(options.)154 438 y(64.)61 b(The)39 b(arriv)-5 b(al)41 +b(of)f Ft(SIGCHLD)e Fu(when)h(a)h(trap)g(is)g(set)h(on)f +Ft(SIGCHLD)e Fu(do)s(es)h(not)h(in)m(terrupt)g(the)g +Ft(wait)330 548 y Fu(builtin)c(and)h(cause)g(it)h(to)f(return)f (immediately)-8 b(.)62 b(The)37 b(trap)f(command)h(is)g(run)e(once)j -(for)f(eac)m(h)330 4361 y(c)m(hild)31 b(that)g(exits.)154 -4504 y(59.)61 b(The)27 b Ft(read)f Fu(builtin)g(ma)m(y)i(b)s(e)e(in)m +(for)f(eac)m(h)330 657 y(c)m(hild)31 b(that)g(exits.)154 +797 y(65.)61 b(The)27 b Ft(read)f Fu(builtin)g(ma)m(y)i(b)s(e)e(in)m (terrupted)h(b)m(y)g(a)h(signal)f(for)g(whic)m(h)g(a)h(trap)f(has)g(b)s -(een)f(set.)40 b(If)27 b(Bash)330 4614 y(receiv)m(es)41 +(een)f(set.)40 b(If)27 b(Bash)330 906 y(receiv)m(es)41 b(a)f(trapp)s(ed)e(signal)i(while)f(executing)h Ft(read)p Fu(,)h(the)e(trap)h(handler)e(executes)i(and)f Ft(read)330 -4724 y Fu(returns)29 b(an)h(exit)i(status)e(greater)i(than)e(128.)154 -4867 y(60.)61 b(The)33 b Ft(printf)f Fu(builtin)i(uses)f +1016 y Fu(returns)29 b(an)h(exit)i(status)e(greater)i(than)e(128.)154 +1155 y(66.)61 b(The)33 b Ft(printf)f Fu(builtin)i(uses)f Ft(double)f Fu(\(via)j Ft(strtod)p Fu(\))d(to)j(con)m(v)m(ert)g -(argumen)m(ts)f(corresp)s(onding)f(to)330 4977 y(\015oating)40 +(argumen)m(ts)f(corresp)s(onding)f(to)330 1265 y(\015oating)40 b(p)s(oin)m(t)f(con)m(v)m(ersion)h(sp)s(eci\014ers,)h(instead)e(of)g Ft(long)29 b(double)38 b Fu(if)h(it's)g(a)m(v)-5 b(ailable.)69 -b(The)39 b(`)p Ft(L)p Fu(')330 5087 y(length)31 b(mo)s(di\014er)e +b(The)39 b(`)p Ft(L)p Fu(')330 1375 y(length)31 b(mo)s(di\014er)e (forces)i Ft(printf)e Fu(to)i(use)f Ft(long)f(double)g -Fu(if)h(it's)h(a)m(v)-5 b(ailable.)154 5230 y(61.)61 +Fu(if)h(it's)h(a)m(v)-5 b(ailable.)154 1514 y(67.)61 b(Bash)27 b(remo)m(v)m(es)h(an)e(exited)i(bac)m(kground)e(pro)s(cess's) h(status)g(from)f(the)h(list)g(of)g(suc)m(h)f(statuses)h(after)330 -5340 y(the)k Ft(wait)e Fu(builtin)h(is)g(used)g(to)h(obtain)g(it.)p -eop end -%%Page: 110 116 -TeXDict begin 110 115 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(110)275 299 y(There)34 -b(is)g(other)h Fm(posix)f Fu(b)s(eha)m(vior)h(that)g(Bash)g(do)s(es)f -(not)h(implemen)m(t)g(b)m(y)g(default)f(ev)m(en)i(when)d(in)150 -408 y Fm(posix)d Fu(mo)s(de.)40 b(Sp)s(eci\014cally:)199 -549 y(1.)61 b(The)30 b Ft(fc)f Fu(builtin)h(c)m(hec)m(ks)i -Ft($EDITOR)c Fu(as)j(a)f(program)g(to)h(edit)g(history)f(en)m(tries)h -(if)f Ft(FCEDIT)f Fu(is)h(unset,)330 658 y(rather)g(than)g(defaulting)h +1624 y(the)k Ft(wait)e Fu(builtin)h(is)g(used)g(to)h(obtain)g(it.)154 +1763 y(68.)61 b(A)39 b(double)f(quote)i(c)m(haracter)g(\(`)p +Ft(")p Fu('\))g(is)f(treated)g(sp)s(ecially)h(when)e(it)h(app)s(ears)f +(in)h(a)g(bac)m(kquoted)330 1873 y(command)24 b(substitution)f(in)h +(the)g(b)s(o)s(dy)e(of)i(a)g(here-do)s(cumen)m(t)g(that)h(undergo)s(es) +e(expansion.)38 b(That)330 1982 y(means,)29 b(for)f(example,)i(that)f +(a)g(bac)m(kslash)g(preceding)f(a)h(double)f(quote)h(c)m(haracter)h +(will)f(escap)s(e)f(it)330 2092 y(and)i(the)g(bac)m(kslash)h(will)g(b)s +(e)f(remo)m(v)m(ed.)154 2231 y(69.)61 b(The)26 b Ft(test)g +Fu(builtin)g(compares)h(strings)g(using)f(the)h(curren)m(t)f(lo)s(cale) +j(when)c(pro)s(cessing)i(the)g(`)p Ft(<)p Fu(')g(and)330 +2341 y(`)p Ft(>)p Fu(')k(binary)e(op)s(erators.)154 2480 +y(70.)61 b(The)27 b Ft(test)f Fu(builtin's)g Ft(-t)h +Fu(unary)f(primary)g(requires)h(an)g(argumen)m(t.)40 +b(Historical)29 b(v)m(ersions)f(of)f Ft(test)330 2590 +y Fu(made)c(the)h(argumen)m(t)g(optional)h(in)e(certain)h(cases,)i(and) +d(Bash)h(attempts)g(to)g(accommo)s(date)h(those)330 2699 +y(for)30 b(bac)m(kw)m(ards)h(compatibilit)m(y)-8 b(.)154 +2839 y(71.)61 b(Command)25 b(substitutions)g(don't)g(set)h(the)g(`)p +Ft(?)p Fu(')g(sp)s(ecial)g(parameter.)40 b(The)25 b(exit)h(status)g(of) +g(a)g(simple)330 2948 y(command)i(without)g(a)h(command)f(w)m(ord)f(is) +i(still)g(the)f(exit)h(status)g(of)f(the)g(last)h(command)f(substi-)330 +3058 y(tution)f(that)h(o)s(ccurred)e(while)h(ev)-5 b(aluating)28 +b(the)g(v)-5 b(ariable)27 b(assignmen)m(ts)h(and)e(redirections)i(in)e +(that)330 3167 y(command,)h(but)f(that)g(do)s(es)g(not)h(happ)s(en)d +(un)m(til)j(after)g(all)g(of)f(the)h(assignmen)m(ts)g(and)e +(redirections.)275 3342 y(There)34 b(is)g(other)h Fm(posix)f +Fu(b)s(eha)m(vior)h(that)g(Bash)g(do)s(es)f(not)h(implemen)m(t)g(b)m(y) +g(default)f(ev)m(en)i(when)d(in)150 3451 y Fm(posix)d +Fu(mo)s(de.)40 b(Sp)s(eci\014cally:)199 3595 y(1.)61 +b(The)30 b Ft(fc)f Fu(builtin)h(c)m(hec)m(ks)i Ft($EDITOR)c +Fu(as)j(a)f(program)g(to)h(edit)g(history)f(en)m(tries)h(if)f +Ft(FCEDIT)f Fu(is)h(unset,)330 3705 y(rather)g(than)g(defaulting)h (directly)g(to)g Ft(ed)p Fu(.)40 b Ft(fc)30 b Fu(uses)g -Ft(ed)g Fu(if)g Ft(EDITOR)f Fu(is)h(unset.)199 796 y(2.)61 -b(As)29 b(noted)g(ab)s(o)m(v)m(e,)i(Bash)e(requires)g(the)g -Ft(xpg_echo)e Fu(option)j(to)g(b)s(e)e(enabled)h(for)g(the)g -Ft(echo)f Fu(builtin)330 905 y(to)j(b)s(e)f(fully)g(conforman)m(t.)275 -1073 y(Bash)c(can)g(b)s(e)f(con\014gured)h(to)g(b)s(e)g -Fm(posix)p Fu(-conforman)m(t)g(b)m(y)g(default,)h(b)m(y)f(sp)s -(ecifying)g(the)g Ft(--enable-)150 1183 y(strict-posix-default)c -Fu(to)27 b Ft(configure)e Fu(when)h(building)h(\(see)h(Section)g(10.8)g -([Optional)g(F)-8 b(eatures],)150 1292 y(page)31 b(161\).)150 -1542 y Fs(6.12)68 b(Shell)46 b(Compatibilit)l(y)h(Mo)t(de)150 -1701 y Fu(Bash-4.0)33 b(in)m(tro)s(duced)f(the)f(concept)i(of)f(a)g -Fr(shell)g(compatibilit)m(y)i(lev)m(el)p Fu(,)g(sp)s(eci\014ed)d(as)h -(a)g(set)h(of)f(options)150 1811 y(to)f(the)f(shopt)g(builtin)g(\()p -Ft(compat31)p Fu(,)e Ft(compat32)p Fu(,)h Ft(compat40)p -Fu(,)f Ft(compat41)p Fu(,)g(and)i(so)g(on\).)41 b(There)30 -b(is)g(only)150 1920 y(one)f(curren)m(t)f(compatibilit)m(y)j(lev)m(el)f -({)f(eac)m(h)h(option)f(is)g(m)m(utually)g(exclusiv)m(e.)41 -b(The)28 b(compatibilit)m(y)j(lev)m(el)150 2030 y(is)39 -b(in)m(tended)g(to)h(allo)m(w)g(users)e(to)i(select)h(b)s(eha)m(vior)e -(from)f(previous)h(v)m(ersions)g(that)h(is)f(incompatible)150 -2139 y(with)d(new)m(er)g(v)m(ersions)g(while)g(they)g(migrate)h -(scripts)f(to)h(use)f(curren)m(t)f(features)i(and)e(b)s(eha)m(vior.)58 -b(It's)150 2249 y(in)m(tended)30 b(to)h(b)s(e)f(a)h(temp)s(orary)f -(solution.)275 2389 y(This)k(section)j(do)s(es)e(not)h(men)m(tion)g(b)s -(eha)m(vior)g(that)g(is)f(standard)g(for)g(a)h(particular)g(v)m(ersion) -g(\(e.g.,)150 2499 y(setting)d Ft(compat32)c Fu(means)i(that)i(quoting) -e(the)h(rhs)f(of)g(the)h(regexp)g(matc)m(hing)h(op)s(erator)e(quotes)h -(sp)s(e-)150 2608 y(cial)39 b(regexp)e(c)m(haracters)i(in)e(the)g(w)m -(ord,)i(whic)m(h)e(is)g(default)h(b)s(eha)m(vior)f(in)g(bash-3.2)h(and) -f(subsequen)m(t)150 2718 y(v)m(ersions\).)275 2858 y(If)29 -b(a)h(user)f(enables,)h(sa)m(y)-8 b(,)31 b Ft(compat32)p -Fu(,)d(it)i(ma)m(y)g(a\013ect)h(the)f(b)s(eha)m(vior)g(of)g(other)g -(compatibilit)m(y)h(lev)m(els)150 2968 y(up)23 b(to)h(and)f(including)h -(the)g(curren)m(t)f(compatibilit)m(y)j(lev)m(el.)41 b(The)23 -b(idea)h(is)g(that)g(eac)m(h)h(compatibilit)m(y)h(lev)m(el)150 -3077 y(con)m(trols)35 b(b)s(eha)m(vior)f(that)g(c)m(hanged)g(in)f(that) -h(v)m(ersion)g(of)g(Bash,)h(but)e(that)h(b)s(eha)m(vior)g(ma)m(y)g(ha)m -(v)m(e)h(b)s(een)150 3187 y(presen)m(t)f(in)g(earlier)g(v)m(ersions.)52 -b(F)-8 b(or)35 b(instance,)g(the)f(c)m(hange)h(to)g(use)f(lo)s -(cale-based)h(comparisons)f(with)150 3296 y(the)e Ft([[)f -Fu(command)g(came)h(in)g(bash-4.1,)h(and)d(earlier)j(v)m(ersions)f -(used)f(ASCI)s(I-based)f(comparisons,)i(so)150 3406 y(enabling)27 -b Ft(compat32)e Fu(will)i(enable)g(ASCI)s(I-based)e(comparisons)i(as)g -(w)m(ell.)41 b(That)26 b(gran)m(ularit)m(y)i(ma)m(y)g(not)150 -3515 y(b)s(e)i(su\016cien)m(t)i(for)f(all)g(uses,)g(and)g(as)g(a)g -(result)g(users)f(should)g(emplo)m(y)i(compatibilit)m(y)h(lev)m(els)g -(carefully)-8 b(.)150 3625 y(Read)31 b(the)f(do)s(cumen)m(tation)h(for) -g(a)f(particular)h(feature)g(to)g(\014nd)e(out)h(the)h(curren)m(t)f(b)s -(eha)m(vior.)275 3765 y(Bash-4.3)44 b(in)m(tro)s(duced)e(a)h(new)f -(shell)h(v)-5 b(ariable:)65 b Ft(BASH_COMPAT)p Fu(.)75 -b(The)42 b(v)-5 b(alue)43 b(assigned)g(to)g(this)150 -3875 y(v)-5 b(ariable)32 b(\(a)g(decimal)h(v)m(ersion)e(n)m(um)m(b)s +Ft(ed)g Fu(if)g Ft(EDITOR)f Fu(is)h(unset.)199 3844 y(2.)61 +b(A)37 b(non-in)m(teractiv)m(e)i(shell)e(do)s(es)f(not)h(exit)h(if)e(a) +h(v)-5 b(ariable)38 b(assignmen)m(t)f(preceding)g(the)g +Ft(command)330 3954 y Fu(builtin)30 b(or)g(another)h(non-sp)s(ecial)g +(builtin)f(fails.)199 4093 y(3.)61 b(As)29 b(noted)g(ab)s(o)m(v)m(e,)i +(Bash)e(requires)g(the)g Ft(xpg_echo)e Fu(option)j(to)g(b)s(e)e +(enabled)h(for)g(the)g Ft(echo)f Fu(builtin)330 4203 +y(to)j(b)s(e)f(fully)g(conforman)m(t.)275 4377 y(Bash)c(can)g(b)s(e)f +(con\014gured)h(to)g(b)s(e)g Fm(posix)p Fu(-conforman)m(t)g(b)m(y)g +(default,)h(b)m(y)f(sp)s(ecifying)g(the)g Ft(--enable-)150 +4487 y(strict-posix-default)c Fu(to)27 b Ft(configure)e +Fu(when)h(building)h(\(see)h(Section)g(10.8)g([Optional)g(F)-8 +b(eatures],)150 4596 y(page)31 b(168\).)150 4852 y Fs(6.12)68 +b(Shell)46 b(Compatibilit)l(y)h(Mo)t(de)150 5011 y Fu(Bash-4.0)33 +b(in)m(tro)s(duced)f(the)f(concept)i(of)f(a)g Fr(shell)g(compatibilit)m +(y)i(lev)m(el)p Fu(,)g(sp)s(eci\014ed)d(as)h(a)g(set)h(of)f(options)150 +5121 y(to)f(the)f(shopt)g(builtin)g(\()p Ft(compat31)p +Fu(,)e Ft(compat32)p Fu(,)h Ft(compat40)p Fu(,)f Ft(compat41)p +Fu(,)g(and)i(so)g(on\).)41 b(There)30 b(is)g(only)150 +5230 y(one)f(curren)m(t)f(compatibilit)m(y)j(lev)m(el)f({)f(eac)m(h)h +(option)f(is)g(m)m(utually)g(exclusiv)m(e.)41 b(The)28 +b(compatibilit)m(y)j(lev)m(el)150 5340 y(is)39 b(in)m(tended)g(to)h +(allo)m(w)g(users)e(to)i(select)h(b)s(eha)m(vior)e(from)f(previous)h(v) +m(ersions)g(that)h(is)f(incompatible)p eop end +%%Page: 115 121 +TeXDict begin 115 120 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(115)150 299 y(with)36 +b(new)m(er)g(v)m(ersions)g(while)g(they)g(migrate)h(scripts)f(to)h(use) +f(curren)m(t)f(features)i(and)e(b)s(eha)m(vior.)58 b(It's)150 +408 y(in)m(tended)30 b(to)h(b)s(e)f(a)h(temp)s(orary)f(solution.)275 +556 y(This)k(section)j(do)s(es)e(not)h(men)m(tion)g(b)s(eha)m(vior)g +(that)g(is)f(standard)g(for)g(a)h(particular)g(v)m(ersion)g(\(e.g.,)150 +666 y(setting)d Ft(compat32)c Fu(means)i(that)i(quoting)e(the)h(rhs)f +(of)g(the)h(regexp)g(matc)m(hing)h(op)s(erator)e(quotes)h(sp)s(e-)150 +775 y(cial)39 b(regexp)e(c)m(haracters)i(in)e(the)g(w)m(ord,)i(whic)m +(h)e(is)g(default)h(b)s(eha)m(vior)f(in)g(bash-3.2)h(and)f(subsequen)m +(t)150 885 y(v)m(ersions\).)275 1032 y(If)29 b(a)h(user)f(enables,)h +(sa)m(y)-8 b(,)31 b Ft(compat32)p Fu(,)d(it)i(ma)m(y)g(a\013ect)h(the)f +(b)s(eha)m(vior)g(of)g(other)g(compatibilit)m(y)h(lev)m(els)150 +1142 y(up)23 b(to)h(and)f(including)h(the)g(curren)m(t)f(compatibilit)m +(y)j(lev)m(el.)41 b(The)23 b(idea)h(is)g(that)g(eac)m(h)h(compatibilit) +m(y)h(lev)m(el)150 1251 y(con)m(trols)35 b(b)s(eha)m(vior)f(that)g(c)m +(hanged)g(in)f(that)h(v)m(ersion)g(of)g(Bash,)h(but)e(that)h(b)s(eha)m +(vior)g(ma)m(y)g(ha)m(v)m(e)h(b)s(een)150 1361 y(presen)m(t)f(in)g +(earlier)g(v)m(ersions.)52 b(F)-8 b(or)35 b(instance,)g(the)f(c)m +(hange)h(to)g(use)f(lo)s(cale-based)h(comparisons)f(with)150 +1471 y(the)e Ft([[)f Fu(command)g(came)h(in)g(bash-4.1,)h(and)d +(earlier)j(v)m(ersions)f(used)f(ASCI)s(I-based)f(comparisons,)i(so)150 +1580 y(enabling)27 b Ft(compat32)e Fu(will)i(enable)g(ASCI)s(I-based)e +(comparisons)i(as)g(w)m(ell.)41 b(That)26 b(gran)m(ularit)m(y)i(ma)m(y) +g(not)150 1690 y(b)s(e)i(su\016cien)m(t)i(for)f(all)g(uses,)g(and)g(as) +g(a)g(result)g(users)f(should)g(emplo)m(y)i(compatibilit)m(y)h(lev)m +(els)g(carefully)-8 b(.)150 1799 y(Read)31 b(the)f(do)s(cumen)m(tation) +h(for)g(a)f(particular)h(feature)g(to)g(\014nd)e(out)h(the)h(curren)m +(t)f(b)s(eha)m(vior.)275 1947 y(Bash-4.3)44 b(in)m(tro)s(duced)e(a)h +(new)f(shell)h(v)-5 b(ariable:)65 b Ft(BASH_COMPAT)p +Fu(.)75 b(The)42 b(v)-5 b(alue)43 b(assigned)g(to)g(this)150 +2056 y(v)-5 b(ariable)32 b(\(a)g(decimal)h(v)m(ersion)e(n)m(um)m(b)s (er)f(lik)m(e)j(4.2,)g(or)e(an)h(in)m(teger)g(corresp)s(onding)f(to)h -(the)f Ft(compat)p Fr(NN)150 3984 y Fu(option,)g(lik)m(e)h(42\))f +(the)f Ft(compat)p Fr(NN)150 2166 y Fu(option,)g(lik)m(e)h(42\))f (determines)g(the)f(compatibilit)m(y)j(lev)m(el.)275 -4125 y(Starting)e(with)g(bash-4.4,)h(Bash)f(has)g(b)s(egun)f +2313 y(Starting)e(with)g(bash-4.4,)h(Bash)f(has)g(b)s(egun)f (deprecating)h(older)h(compatibilit)m(y)h(lev)m(els.)44 -b(Ev)m(en)m(tu-)150 4234 y(ally)-8 b(,)32 b(the)e(options)h(will)g(b)s +b(Ev)m(en)m(tu-)150 2423 y(ally)-8 b(,)32 b(the)e(options)h(will)g(b)s (e)f(remo)m(v)m(ed)h(in)f(fa)m(v)m(or)i(of)e Ft(BASH_COMPAT)p -Fu(.)275 4374 y(Bash-5.0)36 b(is)f(the)g(\014nal)f(v)m(ersion)i(for)e -(whic)m(h)h(there)g(will)g(b)s(e)f(an)h(individual)f(shopt)h(option)g -(for)g(the)150 4484 y(previous)30 b(v)m(ersion.)41 b(Users)30 -b(should)g(use)g Ft(BASH_COMPAT)d Fu(on)j(bash-5.0)h(and)f(later)i(v)m -(ersions.)275 4624 y(The)24 b(follo)m(wing)i(table)g(describ)s(es)e -(the)i(b)s(eha)m(vior)f(c)m(hanges)h(con)m(trolled)g(b)m(y)f(eac)m(h)h -(compatibilit)m(y)h(lev)m(el)150 4734 y(setting.)43 b(The)30 -b Ft(compat)p Fr(NN)39 b Fu(tag)32 b(is)f(used)f(as)h(shorthand)e(for)h -(setting)i(the)f(compatibilit)m(y)i(lev)m(el)f(to)g Fr(NN)150 -4843 y Fu(using)37 b(one)h(of)g(the)g(follo)m(wing)h(mec)m(hanisms.)63 -b(F)-8 b(or)39 b(v)m(ersions)f(prior)f(to)h(bash-5.0,)j(the)d -(compatibilit)m(y)150 4953 y(lev)m(el)d(ma)m(y)f(b)s(e)e(set)i(using)e -(the)i(corresp)s(onding)e Ft(compat)p Fr(NN)41 b Fu(shopt)33 -b(option.)50 b(F)-8 b(or)34 b(bash-4.3)f(and)g(later)150 -5062 y(v)m(ersions,)40 b(the)e Ft(BASH_COMPAT)d Fu(v)-5 +Fu(.)275 2571 y(Bash-5.0)g(w)m(as)g(the)g(\014nal)f(v)m(ersion)g(for)g +(whic)m(h)g(there)h(will)f(b)s(e)g(an)g(individual)g(shopt)g(option)h +(for)f(the)150 2680 y(previous)h(v)m(ersion.)41 b(Users)30 +b(should)g(con)m(trol)h(the)g(compatibilit)m(y)i(lev)m(el)f(with)e +Ft(BASH_COMPAT)p Fu(.)275 2828 y(The)24 b(follo)m(wing)i(table)g +(describ)s(es)e(the)i(b)s(eha)m(vior)f(c)m(hanges)h(con)m(trolled)g(b)m +(y)f(eac)m(h)h(compatibilit)m(y)h(lev)m(el)150 2937 y(setting.)43 +b(The)30 b Ft(compat)p Fr(NN)39 b Fu(tag)32 b(is)f(used)f(as)h +(shorthand)e(for)h(setting)i(the)f(compatibilit)m(y)i(lev)m(el)f(to)g +Fr(NN)150 3047 y Fu(using)37 b(one)h(of)g(the)g(follo)m(wing)h(mec)m +(hanisms.)63 b(F)-8 b(or)39 b(v)m(ersions)f(prior)f(to)h(bash-5.0,)j +(the)d(compatibilit)m(y)150 3156 y(lev)m(el)d(ma)m(y)f(b)s(e)e(set)i +(using)e(the)i(corresp)s(onding)e Ft(compat)p Fr(NN)41 +b Fu(shopt)33 b(option.)50 b(F)-8 b(or)34 b(bash-4.3)f(and)g(later)150 +3266 y(v)m(ersions,)40 b(the)e Ft(BASH_COMPAT)d Fu(v)-5 b(ariable)39 b(is)e(preferred,)i(and)e(it)i(is)f(required)f(for)g -(bash-5.1)i(and)e(later)150 5172 y(v)m(ersions.)150 5340 -y Ft(compat31)p eop end -%%Page: 111 117 -TeXDict begin 111 116 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(111)705 299 y Fq(\017)60 -b Fu(quoting)34 b(the)g(rhs)e(of)i(the)f Ft([[)g Fu(command's)h(regexp) -f(matc)m(hing)i(op)s(erator)f(\(=)p Ft(~)p Fu(\))f(has)810 -408 y(no)d(sp)s(ecial)h(e\013ect)150 568 y Ft(compat32)705 -702 y Fq(\017)60 b Fu(in)m(terrupting)28 b(a)g(command)g(list)h(suc)m -(h)f(as)g Ft(")p Fu(a)g(;)h(b)f(;)h(c)p Ft(")f Fu(causes)h(the)f -(execution)h(of)g(the)810 812 y(next)j(command)f(in)g(the)h(list)g -(\(in)f(bash-4.0)h(and)f(later)i(v)m(ersions,)f(the)g(shell)f(acts)i -(as)810 922 y(if)i(it)i(receiv)m(ed)f(the)g(in)m(terrupt,)h(so)f(in)m -(terrupting)f(one)h(command)f(in)g(a)h(list)g(ab)s(orts)810 -1031 y(the)31 b(execution)g(of)g(the)f(en)m(tire)i(list\))150 -1191 y Ft(compat40)705 1325 y Fq(\017)60 b Fu(the)35 +(bash-5.1)i(and)e(later)150 3376 y(v)m(ersions.)150 3554 +y Ft(compat31)705 3695 y Fq(\017)60 b Fu(quoting)34 b(the)g(rhs)e(of)i +(the)f Ft([[)g Fu(command's)h(regexp)f(matc)m(hing)i(op)s(erator)f(\(=) +p Ft(~)p Fu(\))f(has)810 3805 y(no)d(sp)s(ecial)h(e\013ect)150 +3977 y Ft(compat40)705 4118 y Fq(\017)60 b Fu(the)35 b(`)p Ft(<)p Fu(')g(and)f(`)p Ft(>)p Fu(')g(op)s(erators)h(to)g(the)g Ft([[)f Fu(command)h(do)f(not)h(consider)f(the)h(curren)m(t)810 -1435 y(lo)s(cale)41 b(when)d(comparing)i(strings;)k(they)c(use)f(ASCI)s -(I)f(ordering.)67 b(Bash)40 b(v)m(ersions)810 1544 y(prior)f(to)i +4228 y(lo)s(cale)41 b(when)d(comparing)i(strings;)k(they)c(use)f(ASCI)s +(I)f(ordering.)67 b(Bash)40 b(v)m(ersions)810 4338 y(prior)f(to)i (bash-4.1)f(use)g(ASCI)s(I)e(collation)k(and)d(strcmp\(3\);)45 -b(bash-4.1)c(and)e(later)810 1654 y(use)30 b(the)h(curren)m(t)f(lo)s +b(bash-4.1)c(and)e(later)810 4447 y(use)30 b(the)h(curren)m(t)f(lo)s (cale's)i(collation)h(sequence)d(and)g(strcoll\(3\).)150 -1813 y Ft(compat41)705 1948 y Fq(\017)60 b Fu(in)29 b(p)s(osix)f(mo)s +4620 y Ft(compat41)705 4761 y Fq(\017)60 b Fu(in)29 b(p)s(osix)f(mo)s (de,)i Ft(time)e Fu(ma)m(y)h(b)s(e)g(follo)m(w)m(ed)i(b)m(y)e(options)g -(and)g(still)h(b)s(e)e(recognized)j(as)810 2057 y(a)g(reserv)m(ed)f(w)m +(and)g(still)h(b)s(e)e(recognized)j(as)810 4870 y(a)g(reserv)m(ed)f(w)m (ord)g(\(this)h(is)f Fm(posix)g Fu(in)m(terpretation)i(267\))705 -2192 y Fq(\017)60 b Fu(in)37 b(p)s(osix)f(mo)s(de,)i(the)g(parser)e +5011 y Fq(\017)60 b Fu(in)37 b(p)s(osix)f(mo)s(de,)i(the)g(parser)e (requires)g(that)i(an)f(ev)m(en)g(n)m(um)m(b)s(er)f(of)h(single)g -(quotes)810 2301 y(o)s(ccur)28 b(in)g(the)h Fr(w)m(ord)i +(quotes)810 5121 y(o)s(ccur)28 b(in)g(the)h Fr(w)m(ord)i Fu(p)s(ortion)d(of)h(a)g(double-quoted)f($)p Fi({)6 b Fu(.)23 b(.)f(.)11 b Fi(})29 b Fu(parameter)g(expansion)810 -2411 y(and)34 b(treats)h(them)f(sp)s(ecially)-8 b(,)37 +5230 y(and)34 b(treats)h(them)f(sp)s(ecially)-8 b(,)37 b(so)e(that)g(c)m(haracters)g(within)f(the)h(single)g(quotes)g(are)810 -2521 y(considered)30 b(quoted)h(\(this)f(is)h Fm(posix)e -Fu(in)m(terpretation)j(221\))150 2680 y Ft(compat42)705 -2814 y Fq(\017)60 b Fu(the)29 b(replacemen)m(t)i(string)e(in)g +5340 y(considered)30 b(quoted)h(\(this)f(is)h Fm(posix)e +Fu(in)m(terpretation)j(221\))p eop end +%%Page: 116 122 +TeXDict begin 116 121 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(116)150 299 y Ft(compat42)705 +434 y Fq(\017)60 b Fu(the)29 b(replacemen)m(t)i(string)e(in)g (double-quoted)h(pattern)f(substitution)g(do)s(es)g(not)h(un-)810 -2924 y(dergo)h(quote)g(remo)m(v)-5 b(al,)32 b(as)e(it)h(do)s(es)f(in)g -(v)m(ersions)h(after)g(bash-4.2)705 3059 y Fq(\017)60 +544 y(dergo)h(quote)g(remo)m(v)-5 b(al,)32 b(as)e(it)h(do)s(es)f(in)g +(v)m(ersions)h(after)g(bash-4.2)705 679 y Fq(\017)60 b Fu(in)39 b(p)s(osix)g(mo)s(de,)j(single)e(quotes)g(are)g(considered)f -(sp)s(ecial)h(when)f(expanding)g(the)810 3168 y Fr(w)m(ord)d +(sp)s(ecial)h(when)f(expanding)g(the)810 789 y Fr(w)m(ord)d Fu(p)s(ortion)c(of)g(a)h(double-quoted)g($)p Fi({)6 b Fu(.)22 b(.)h(.)11 b Fi(})33 b Fu(parameter)g(expansion)f(and)g(can)h -(b)s(e)810 3278 y(used)40 b(to)i(quote)g(a)f(closing)h(brace)f(or)g +(b)s(e)810 898 y(used)40 b(to)i(quote)g(a)f(closing)h(brace)f(or)g (other)h(sp)s(ecial)f(c)m(haracter)i(\(this)e(is)g(part)g(of)810 -3387 y Fm(posix)36 b Fu(in)m(terpretation)h(221\);)42 +1008 y Fm(posix)36 b Fu(in)m(terpretation)h(221\);)42 b(in)36 b(later)h(v)m(ersions,)h(single)f(quotes)g(are)g(not)f(sp)s -(ecial)810 3497 y(within)30 b(double-quoted)g(w)m(ord)g(expansions)150 -3656 y Ft(compat43)705 3791 y Fq(\017)60 b Fu(the)31 +(ecial)810 1118 y(within)30 b(double-quoted)g(w)m(ord)g(expansions)150 +1279 y Ft(compat43)705 1414 y Fq(\017)60 b Fu(the)31 b(shell)g(do)s(es)g(not)g(prin)m(t)f(a)h(w)m(arning)g(message)h(if)f -(an)g(attempt)h(is)f(made)f(to)i(use)f(a)810 3900 y(quoted)36 +(an)g(attempt)h(is)f(made)f(to)i(use)f(a)810 1524 y(quoted)36 b(comp)s(ound)e(assignmen)m(t)i(as)g(an)g(argumen)m(t)g(to)g(declare)h -(\(e.g.,)i(declare)d(-a)810 4010 y(fo)s(o='\(1)31 b(2\)'\).)42 +(\(e.g.,)i(declare)d(-a)810 1633 y(fo)s(o='\(1)31 b(2\)'\).)42 b(Later)31 b(v)m(ersions)g(w)m(arn)f(that)h(this)f(usage)h(is)g -(deprecated)705 4144 y Fq(\017)60 b Fu(w)m(ord)21 b(expansion)g(errors) +(deprecated)705 1769 y Fq(\017)60 b Fu(w)m(ord)21 b(expansion)g(errors) g(are)h(considered)f(non-fatal)h(errors)f(that)h(cause)g(the)f(curren)m -(t)810 4254 y(command)k(to)g(fail,)i(ev)m(en)e(in)g(p)s(osix)f(mo)s(de) +(t)810 1878 y(command)k(to)g(fail,)i(ev)m(en)e(in)g(p)s(osix)f(mo)s(de) h(\(the)g(default)g(b)s(eha)m(vior)g(is)g(to)g(mak)m(e)h(them)810 -4364 y(fatal)32 b(errors)d(that)i(cause)g(the)g(shell)f(to)i(exit\))705 -4498 y Fq(\017)60 b Fu(when)37 b(executing)i(a)g(shell)f(function,)i +1988 y(fatal)32 b(errors)d(that)i(cause)g(the)g(shell)f(to)i(exit\))705 +2123 y Fq(\017)60 b Fu(when)37 b(executing)i(a)g(shell)f(function,)i (the)f(lo)s(op)f(state)h(\(while/un)m(til/etc.\))68 b(is)38 -b(not)810 4608 y(reset,)c(so)g Ft(break)d Fu(or)i Ft(continue)e +b(not)810 2233 y(reset,)c(so)g Ft(break)d Fu(or)i Ft(continue)e Fu(in)h(that)i(function)f(will)g(break)g(or)g(con)m(tin)m(ue)h(lo)s -(ops)810 4717 y(in)h(the)g(calling)h(con)m(text.)57 b(Bash-4.4)37 +(ops)810 2342 y(in)h(the)g(calling)h(con)m(text.)57 b(Bash-4.4)37 b(and)d(later)i(reset)g(the)f(lo)s(op)g(state)i(to)e(prev)m(en)m(t)810 -4827 y(this)150 4986 y Ft(compat44)705 5121 y Fq(\017)60 +2452 y(this)150 2613 y Ft(compat44)705 2749 y Fq(\017)60 b Fu(the)41 b(shell)g(sets)g(up)e(the)i(v)-5 b(alues)41 b(used)f(b)m(y)h Ft(BASH_ARGV)d Fu(and)i Ft(BASH_ARGC)e -Fu(so)j(they)810 5230 y(can)26 b(expand)f(to)h(the)g(shell's)g(p)s +Fu(so)j(they)810 2858 y(can)26 b(expand)f(to)h(the)g(shell's)g(p)s (ositional)g(parameters)g(ev)m(en)h(if)e(extended)h(debugging)810 -5340 y(mo)s(de)k(is)g(not)h(enabled)p eop end -%%Page: 112 118 -TeXDict begin 112 117 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(112)705 299 y Fq(\017)60 +2968 y(mo)s(de)k(is)g(not)h(enabled)705 3103 y Fq(\017)60 b Fu(a)40 b(subshell)f(inherits)g(lo)s(ops)h(from)g(its)g(paren)m(t)g (con)m(text,)k(so)c Ft(break)e Fu(or)i Ft(continue)810 -408 y Fu(will)35 b(cause)g(the)f(subshell)f(to)i(exit.)54 +3213 y Fu(will)35 b(cause)g(the)f(subshell)f(to)i(exit.)54 b(Bash-5.0)36 b(and)d(later)j(reset)f(the)f(lo)s(op)h(state)g(to)810 -518 y(prev)m(en)m(t)c(the)g(exit)705 653 y Fq(\017)60 +3322 y(prev)m(en)m(t)c(the)g(exit)705 3458 y Fq(\017)60 b Fu(v)-5 b(ariable)28 b(assignmen)m(ts)h(preceding)f(builtins)f(lik)m (e)i Ft(export)d Fu(and)h Ft(readonly)e Fu(that)j(set)810 -762 y(attributes)37 b(con)m(tin)m(ue)h(to)g(a\013ect)g(v)-5 +3567 y(attributes)37 b(con)m(tin)m(ue)h(to)g(a\013ect)g(v)-5 b(ariables)37 b(with)g(the)f(same)h(name)g(in)g(the)f(calling)810 -872 y(en)m(vironmen)m(t)31 b(ev)m(en)g(if)f(the)h(shell)g(is)f(not)h -(in)f(p)s(osix)f(mo)s(de)150 1031 y Ft(compat50)f(\(set)h(using)g -(BASH_COMPAT\))705 1141 y Fq(\017)60 b Fu(Bash-5.1)29 +3677 y(en)m(vironmen)m(t)31 b(ev)m(en)g(if)f(the)h(shell)g(is)f(not)h +(in)f(p)s(osix)f(mo)s(de)150 3838 y Ft(compat50)f(\(set)h(using)g +(BASH_COMPAT\))705 3948 y Fq(\017)60 b Fu(Bash-5.1)29 b(c)m(hanged)g(the)f(w)m(a)m(y)g Ft($RANDOM)e Fu(is)i(generated)h(to)f -(in)m(tro)s(duce)g(sligh)m(tly)h(more)810 1250 y(randomness.)39 +(in)m(tro)s(duce)g(sligh)m(tly)h(more)810 4057 y(randomness.)39 b(If)30 b(the)f(shell)h(compatibilit)m(y)i(lev)m(el)f(is)f(set)g(to)h -(50)f(or)g(lo)m(w)m(er,)h(it)f(rev)m(erts)810 1360 y(to)e(the)g(metho)s +(50)f(or)g(lo)m(w)m(er,)h(it)f(rev)m(erts)810 4167 y(to)e(the)g(metho)s (d)f(from)g(bash-5.0)h(and)f(previous)g(v)m(ersions,)i(so)e(seeding)h -(the)g(random)810 1469 y(n)m(um)m(b)s(er)36 b(generator)j(b)m(y)e +(the)g(random)810 4276 y(n)m(um)m(b)s(er)36 b(generator)j(b)m(y)e (assigning)h(a)g(v)-5 b(alue)38 b(to)g Ft(RANDOM)e Fu(will)i(pro)s -(duce)e(the)i(same)810 1579 y(sequence)31 b(as)f(in)g(bash-5.0)705 -1714 y Fq(\017)60 b Fu(If)22 b(the)g(command)g(hash)f(table)i(is)f +(duce)e(the)i(same)810 4386 y(sequence)31 b(as)f(in)g(bash-5.0)705 +4521 y Fq(\017)60 b Fu(If)22 b(the)g(command)g(hash)f(table)i(is)f (empt)m(y)-8 b(,)25 b(Bash)d(v)m(ersions)g(prior)g(to)h(bash-5.1)f -(prin)m(ted)810 1823 y(an)29 b(informational)i(message)g(to)f(that)g +(prin)m(ted)810 4631 y(an)29 b(informational)i(message)g(to)f(that)g (e\013ect,)h(ev)m(en)g(when)d(pro)s(ducing)g(output)h(that)810 -1933 y(can)40 b(b)s(e)g(reused)f(as)h(input.)69 b(Bash-5.1)42 +4740 y(can)40 b(b)s(e)g(reused)f(as)h(input.)69 b(Bash-5.1)42 b(suppresses)c(that)j(message)g(when)e(the)i Ft(-l)810 -2042 y Fu(option)31 b(is)f(supplied.)150 2202 y Ft(compat51)e(\(set)h -(using)g(BASH_COMPAT\))705 2311 y Fq(\017)60 b Fu(The)38 +4850 y Fu(option)31 b(is)f(supplied.)150 5011 y Ft(compat51)e(\(set)h +(using)g(BASH_COMPAT\))705 5121 y Fq(\017)60 b Fu(The)38 b Ft(unset)g Fu(builtin)g(will)h(unset)f(the)h(arra)m(y)g Ft(a)g Fu(giv)m(en)g(an)g(argumen)m(t)g(lik)m(e)h(`)p -Ft(a[@])p Fu('.)810 2421 y(Bash-5.2)32 b(will)f(unset)f(an)g(elemen)m +Ft(a[@])p Fu('.)810 5230 y(Bash-5.2)32 b(will)f(unset)f(an)g(elemen)m (t)i(with)e(k)m(ey)i(`)p Ft(@)p Fu(')e(\(asso)s(ciativ)m(e)k(arra)m -(ys\))d(or)f(remo)m(v)m(e)810 2531 y(all)h(the)g(elemen)m(ts)h(without) -e(unsetting)g(the)h(arra)m(y)g(\(indexed)f(arra)m(ys\))705 -2665 y Fq(\017)60 b Fu(arithmetic)36 b(commands)e(\()h(\(\(...\)\))55 -b(\))f(and)34 b(the)g(expressions)h(in)f(an)g(arithmetic)i(for)810 -2775 y(statemen)m(t)c(can)f(b)s(e)f(expanded)f(more)i(than)f(once)705 -2909 y Fq(\017)60 b Fu(expressions)22 b(used)g(as)h(argumen)m(ts)g(to)h +(ys\))d(or)f(remo)m(v)m(e)810 5340 y(all)h(the)g(elemen)m(ts)h(without) +e(unsetting)g(the)h(arra)m(y)g(\(indexed)f(arra)m(ys\))p +eop end +%%Page: 117 123 +TeXDict begin 117 122 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2439 b(117)705 299 y Fq(\017)60 +b Fu(arithmetic)36 b(commands)e(\()h(\(\(...\)\))55 b(\))f(and)34 +b(the)g(expressions)h(in)f(an)g(arithmetic)i(for)810 +408 y(statemen)m(t)c(can)f(b)s(e)f(expanded)f(more)i(than)f(once)705 +543 y Fq(\017)60 b Fu(expressions)22 b(used)g(as)h(argumen)m(ts)g(to)h (arithmetic)f(op)s(erators)g(in)g(the)g Ft([[)f Fu(conditional)810 -3019 y(command)30 b(can)h(b)s(e)f(expanded)f(more)i(than)f(once)705 -3153 y Fq(\017)60 b Fu(the)35 b(expressions)g(in)g(substring)e +653 y(command)30 b(can)h(b)s(e)f(expanded)f(more)i(than)f(once)705 +787 y Fq(\017)60 b Fu(the)35 b(expressions)g(in)g(substring)e (parameter)j(brace)f(expansion)g(can)g(b)s(e)g(expanded)810 -3263 y(more)c(than)f(once)705 3397 y Fq(\017)60 b Fu(the)39 +897 y(more)c(than)f(once)705 1031 y Fq(\017)60 b Fu(the)39 b(expressions)f(in)g(the)h($\(\()h(...)66 b(\)\))f(w)m(ord)39 -b(expansion)f(can)h(b)s(e)f(expanded)g(more)810 3507 -y(than)30 b(once)705 3641 y Fq(\017)60 b Fu(arithmetic)36 +b(expansion)f(can)h(b)s(e)f(expanded)g(more)810 1141 +y(than)30 b(once)705 1275 y Fq(\017)60 b Fu(arithmetic)36 b(expressions)f(used)f(as)h(indexed)f(arra)m(y)i(subscripts)d(can)i(b)s -(e)g(expanded)810 3751 y(more)c(than)f(once)705 3885 +(e)g(expanded)810 1385 y(more)c(than)f(once)705 1519 y Fq(\017)60 b Ft(test)29 b(-v)p Fu(,)35 b(when)f(giv)m(en)h(an)g (argumen)m(t)g(of)f(`)p Ft(A[@])p Fu(',)h(where)f Fr(A)h -Fu(is)f(an)h(existing)g(asso-)810 3995 y(ciativ)m(e)h(arra)m(y)-8 +Fu(is)f(an)h(existing)g(asso-)810 1629 y(ciativ)m(e)h(arra)m(y)-8 b(,)37 b(will)d(return)f(true)g(if)h(the)h(arra)m(y)f(has)g(an)m(y)g -(set)g(elemen)m(ts.)53 b(Bash-5.2)810 4105 y(will)31 +(set)g(elemen)m(ts.)53 b(Bash-5.2)810 1738 y(will)31 b(lo)s(ok)g(for)f(and)g(rep)s(ort)f(on)i(a)f(k)m(ey)i(named)d(`)p -Ft(@)p Fu(')705 4239 y Fq(\017)60 b Fu(the)40 b($)p Fi({)p +Ft(@)p Fu(')705 1873 y Fq(\017)60 b Fu(the)40 b($)p Fi({)p Fr(parameter)7 b Fu([:]=)p Fr(v)-5 b(alue)5 b Fi(})42 b Fu(w)m(ord)e(expansion)f(will)i(return)d Fr(v)-5 b(alue)p -Fu(,)43 b(b)s(efore)d(an)m(y)810 4349 y(v)-5 b(ariable-sp)s(eci\014c)34 +Fu(,)43 b(b)s(efore)d(an)m(y)810 1983 y(v)-5 b(ariable-sp)s(eci\014c)34 b(transformations)f(ha)m(v)m(e)h(b)s(een)e(p)s(erformed)f(\(e.g.,)36 -b(con)m(v)m(erting)e(to)810 4458 y(lo)m(w)m(ercase\).)43 +b(con)m(v)m(erting)e(to)810 2092 y(lo)m(w)m(ercase\).)43 b(Bash-5.2)32 b(will)f(return)e(the)i(\014nal)f(v)-5 b(alue)31 b(assigned)f(to)i(the)e(v)-5 b(ariable.)705 -4593 y Fq(\017)60 b Fu(P)m(arsing)37 b(command)f(substitutions)g(will)g -(b)s(eha)m(v)m(e)h(as)g(if)f(extended)g(glob)h(\(see)g(Sec-)810 -4702 y(tion)30 b(4.3.2)h([The)f(Shopt)f(Builtin],)h(page)h(71\))f(is)g -(enabled,)g(so)g(that)g(parsing)f(a)h(com-)810 4812 y(mand)38 -b(substitution)g(con)m(taining)i(an)f(extglob)h(pattern)f(\(sa)m(y)-8 -b(,)42 b(as)d(part)g(of)g(a)g(shell)810 4922 y(function\))30 +2227 y Fq(\017)60 b Fu(P)m(arsing)40 b(command)f(substitutions)f(will)i +(b)s(eha)m(v)m(e)g(as)f(if)g(extended)g(globbing)h(\(see)810 +2336 y(Section)e(4.3.2)g([The)f(Shopt)f(Builtin],)j(page)f(73\))g(is)f +(enabled,)i(so)e(that)g(parsing)g(a)810 2446 y(command)24 +b(substitution)g(con)m(taining)h(an)f(extglob)i(pattern)e(\(sa)m(y)-8 +b(,)27 b(as)d(part)g(of)g(a)h(shell)810 2555 y(function\))30 b(will)h(not)g(fail.)41 b(This)30 b(assumes)g(the)h(in)m(ten)m(t)g(is)g -(to)g(enable)g(extglob)g(b)s(efore)810 5031 y(the)i(command)f(is)g +(to)g(enable)g(extglob)g(b)s(efore)810 2665 y(the)i(command)f(is)g (executed)h(and)f(w)m(ord)g(expansions)g(are)h(p)s(erformed.)45 -b(It)33 b(will)f(fail)810 5141 y(at)42 b(w)m(ord)f(expansion)h(time)g +b(It)33 b(will)f(fail)810 2775 y(at)42 b(w)m(ord)f(expansion)h(time)g (if)f(extglob)i(hasn't)e(b)s(een)g(enabled)h(b)m(y)f(the)h(time)g(the) -810 5250 y(command)30 b(is)h(executed.)p eop end -%%Page: 113 119 -TeXDict begin 113 118 bop 3614 -116 a Fu(113)150 299 +810 2884 y(command)30 b(is)h(executed.)150 3044 y Ft(compat52)d(\(set)h +(using)g(BASH_COMPAT\))705 3153 y Fq(\017)60 b Fu(The)23 +b Ft(test)g Fu(builtin)g(uses)h(its)g(historical)h(algorithm)g(to)f +(parse)g(paren)m(thesized)g(sub)s(ex-)810 3263 y(pressions)30 +b(when)f(giv)m(en)i(\014v)m(e)g(or)f(more)h(argumen)m(ts.)p +eop end +%%Page: 118 124 +TeXDict begin 118 123 bop 3614 -116 a Fu(118)150 299 y Fp(7)80 b(Job)54 b(Con)l(trol)150 518 y Fu(This)25 b(c)m(hapter)i(discusses)f(what)g(job)f(con)m(trol)j(is,)f(ho)m(w)f(it) h(w)m(orks,)g(and)f(ho)m(w)g(Bash)g(allo)m(ws)h(y)m(ou)g(to)g(access) @@ -16426,13 +16887,13 @@ b(are)g(imm)m(une)g(to)g(k)m(eyb)s(oard-generated)h(signals.)40 b(Only)23 b(foreground)g(pro)s(cesses)h(are)g(allo)m(w)m(ed)150 2973 y(to)g(read)e(from)h(or,)h(if)f(the)g(user)f(so)i(sp)s(eci\014es)e (with)h Ft(stty)29 b(tostop)p Fu(,)23 b(write)g(to)g(the)h(terminal.)38 -b(Bac)m(kground)150 3082 y(pro)s(cesses)27 b(whic)m(h)g(attempt)h(to)f -(read)g(from)g(\(write)g(to)h(when)e Ft(stty)j(tostop)d -Fu(is)h(in)f(e\013ect\))j(the)e(terminal)150 3192 y(are)32 -b(sen)m(t)g(a)g Ft(SIGTTIN)e Fu(\()p Ft(SIGTTOU)p Fu(\))g(signal)i(b)m -(y)g(the)g(k)m(ernel's)g(terminal)g(driv)m(er,)g(whic)m(h,)g(unless)f -(caugh)m(t,)150 3302 y(susp)s(ends)d(the)i(pro)s(cess.)275 -3433 y(If)k(the)i(op)s(erating)g(system)f(on)h(whic)m(h)f(Bash)g(is)h +b(Bac)m(kground)150 3082 y(pro)s(cesses)32 b(whic)m(h)f(attempt)i(to)g +(read)f(from)f(\(write)h(to)h(when)e Ft(tostop)f Fu(is)i(in)f +(e\013ect\))j(the)e(terminal)h(are)150 3192 y(sen)m(t)44 +b(a)h Ft(SIGTTIN)c Fu(\()p Ft(SIGTTOU)p Fu(\))i(signal)i(b)m(y)e(the)h +(k)m(ernel's)h(terminal)f(driv)m(er,)j(whic)m(h,)g(unless)d(caugh)m(t,) +150 3302 y(susp)s(ends)28 b(the)i(pro)s(cess.)275 3433 +y(If)k(the)i(op)s(erating)g(system)f(on)h(whic)m(h)f(Bash)g(is)h (running)d(supp)s(orts)h(job)h(con)m(trol,)j(Bash)e(con)m(tains)150 3543 y(facilities)30 b(to)f(use)f(it.)40 b(T)m(yping)28 b(the)g Fr(susp)s(end)h Fu(c)m(haracter)h(\(t)m(ypically)g(`)p @@ -16475,9 +16936,9 @@ h Ft(jobs)e Fu(command\),)k(the)d(curren)m(t)h(job)f(is)g(alw)m(a)m(ys) i(\015agged)f(with)f(a)h(`)p Ft(+)p Fu(',)i(and)d(the)150 5340 y(previous)30 b(job)g(with)g(a)h(`)p Ft(-)p Fu('.)p eop end -%%Page: 114 120 -TeXDict begin 114 119 bop 150 -116 a Fu(Chapter)30 b(7:)41 -b(Job)30 b(Con)m(trol)2526 b(114)275 299 y(A)38 b(job)g(ma)m(y)h(also)g +%%Page: 119 125 +TeXDict begin 119 124 bop 150 -116 a Fu(Chapter)30 b(7:)41 +b(Job)30 b(Con)m(trol)2526 b(119)275 299 y(A)38 b(job)g(ma)m(y)h(also)g (b)s(e)f(referred)f(to)j(using)d(a)i(pre\014x)e(of)i(the)f(name)h(used) e(to)i(start)g(it,)i(or)e(using)f(a)150 408 y(substring)g(that)j(app)s (ears)e(in)g(its)h(command)f(line.)69 b(F)-8 b(or)41 @@ -16503,13 +16964,13 @@ g(to)g(not)g(in)m(terrupt)150 1439 y(an)m(y)k(other)f(output.)40 b(If)28 b(the)g Ft(-b)g Fu(option)g(to)h(the)g Ft(set)e Fu(builtin)h(is)g(enabled,)h(Bash)g(rep)s(orts)e(suc)m(h)h(c)m(hanges) 150 1548 y(immediately)d(\(see)g(Section)g(4.3.1)g([The)f(Set)g -(Builtin],)i(page)f(67\).)40 b(An)m(y)24 b(trap)f(on)h +(Builtin],)i(page)f(69\).)40 b(An)m(y)24 b(trap)f(on)h Ft(SIGCHLD)e Fu(is)i(executed)150 1658 y(for)30 b(eac)m(h)i(c)m(hild)e (pro)s(cess)g(that)h(exits.)275 1789 y(If)25 b(an)h(attempt)h(to)g (exit)g(Bash)f(is)h(made)f(while)g(jobs)f(are)i(stopp)s(ed,)f(\(or)h (running,)e(if)h(the)g Ft(checkjobs)150 1899 y Fu(option)e(is)f (enabled)h({)g(see)g(Section)g(4.3.2)h([The)e(Shopt)g(Builtin],)j(page) -e(71\),)i(the)e(shell)f(prin)m(ts)g(a)h(w)m(arning)150 +e(73\),)i(the)e(shell)f(prin)m(ts)g(a)h(w)m(arning)150 2009 y(message,)k(and)c(if)i(the)f Ft(checkjobs)e Fu(option)j(is)f (enabled,)i(lists)e(the)h(jobs)f(and)f(their)i(statuses.)39 b(The)25 b Ft(jobs)150 2118 y Fu(command)36 b(ma)m(y)h(then)f(b)s(e)f @@ -16555,9 +17016,9 @@ b(The)30 b(options)g(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)630 5340 y Ft(-l)384 b Fu(List)31 b(pro)s(cess)f Fm(id)p Fu(s)g(in)g(addition)h(to)g(the)f(normal)h(information.)p eop end -%%Page: 115 121 -TeXDict begin 115 120 bop 150 -116 a Fu(Chapter)30 b(7:)41 -b(Job)30 b(Con)m(trol)2526 b(115)630 299 y Ft(-n)384 +%%Page: 120 126 +TeXDict begin 120 125 bop 150 -116 a Fu(Chapter)30 b(7:)41 +b(Job)30 b(Con)m(trol)2526 b(120)630 299 y Ft(-n)384 b Fu(Displa)m(y)26 b(information)f(only)h(ab)s(out)e(jobs)h(that)g(ha)m (v)m(e)i(c)m(hanged)e(status)h(since)1110 408 y(the)31 b(user)e(w)m(as)i(last)g(noti\014ed)f(of)h(their)f(status.)630 @@ -16646,9 +17107,9 @@ b(If)27 b Ft(wait)g Fu(is)g(in)m(terrupted)g(b)m(y)h(a)g(signal,)h(the) f(return)630 5340 y(status)j(will)f(b)s(e)g(greater)i(than)e(128,)i(as) e(describ)s(ed)g(ab)s(o)m(v)m(e)h(\(see)h(Section)f(3.7.6)h([Signals],) p eop end -%%Page: 116 122 -TeXDict begin 116 121 bop 150 -116 a Fu(Chapter)30 b(7:)41 -b(Job)30 b(Con)m(trol)2526 b(116)630 299 y(page)33 b(45\).)48 +%%Page: 121 127 +TeXDict begin 121 126 bop 150 -116 a Fu(Chapter)30 b(7:)41 +b(Job)30 b(Con)m(trol)2526 b(121)630 299 y(page)33 b(46\).)48 b(Otherwise,)32 b(the)h(return)e(status)i(is)f(the)g(exit)i(status)e (of)h(the)f(last)h(pro)s(cess)f(or)630 408 y(job)e(w)m(aited)h(for.)150 568 y Ft(disown)870 702 y(disown)46 b([-ar])g([-h])h([)p @@ -16703,14 +17164,14 @@ Fu(',)d(the)i(string)g(supplied)e(needs)i(to)g(matc)m(h)h(a)f 62 b(The)37 b(`)p Ft(substring)p Fu(')e(v)-5 b(alue)38 b(pro)m(vides)f(functionalit)m(y)i(analogous)g(to)630 4042 y(the)c(`)p Ft(\045?)p Fu(')g(job)g Fm(id)g Fu(\(see)h(Section)g -(7.1)g([Job)e(Con)m(trol)i(Basics],)i(page)e(113\).)56 +(7.1)g([Job)e(Con)m(trol)i(Basics],)i(page)e(118\).)56 b(If)34 b(set)i(to)g(an)m(y)630 4151 y(other)c(v)-5 b(alue,)32 b(the)g(supplied)e(string)i(m)m(ust)f(b)s(e)g(a)h(pre\014x)f(of)h(a)g (stopp)s(ed)e(job's)i(name;)g(this)630 4261 y(pro)m(vides)e (functionalit)m(y)i(analogous)g(to)f(the)g(`)p Ft(\045)p Fu(')f(job)g Fm(id)p Fu(.)p eop end -%%Page: 117 123 -TeXDict begin 117 122 bop 3614 -116 a Fu(117)150 299 +%%Page: 122 128 +TeXDict begin 122 127 bop 3614 -116 a Fu(122)150 299 y Fp(8)80 b(Command)54 b(Line)f(Editing)150 635 y Fu(This)28 b(c)m(hapter)i(describ)s(es)e(the)h(basic)g(features)h(of)f(the)g Fm(gnu)f Fu(command)h(line)g(editing)h(in)m(terface.)42 @@ -16723,7 +17184,7 @@ b(Com-)150 745 y(mand)c(line)i(editing)f(is)g(pro)m(vided)g(b)m(y)g (shell)f(in)m(v)m(o)s(cation.)45 b(Line)31 b(editing)150 1074 y(is)g(also)h(used)f(when)f(using)h(the)g Ft(-e)g Fu(option)h(to)g(the)f Ft(read)f Fu(builtin)h(command)g(\(see)h -(Section)g(4.2)h([Bash)150 1183 y(Builtins],)j(page)f(55\).)52 +(Section)g(4.2)h([Bash)150 1183 y(Builtins],)j(page)f(57\).)52 b(By)35 b(default,)g(the)f(line)h(editing)f(commands)g(are)h(similar)f (to)h(those)f(of)g(Emacs.)150 1293 y(A)h(vi-st)m(yle)h(line)f(editing)g (in)m(terface)h(is)e(also)i(a)m(v)-5 b(ailable.)55 b(Line)34 @@ -16731,7 +17192,7 @@ b(editing)h(can)g(b)s(e)f(enabled)g(at)h(an)m(y)g(time)150 1402 y(using)h(the)g Ft(-o)30 b(emacs)35 b Fu(or)h Ft(-o)30 b(vi)35 b Fu(options)i(to)g(the)f Ft(set)f Fu(builtin)h(command)g (\(see)h(Section)g(4.3.1)h([The)150 1512 y(Set)31 b(Builtin],)g(page)g -(67\),)h(or)e(disabled)g(using)g(the)h Ft(+o)e(emacs)g +(69\),)h(or)e(disabled)g(using)g(the)h Ft(+o)e(emacs)g Fu(or)i Ft(+o)e(vi)h Fu(options)h(to)g Ft(set)p Fu(.)150 1804 y Fs(8.1)68 b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)150 1963 y Fu(The)30 b(follo)m(wing)i(paragraphs)d(describ)s(e)h(the)h @@ -16770,7 +17231,7 @@ b Ft(DEL)p Fu(,)f Ft(ESC)p Fu(,)g Ft(LFD)p Fu(,)g Ft(SPC)p Fu(,)g Ft(RET)p Fu(,)150 3902 y(and)d Ft(TAB)f Fu(all)j(stand)e(for)g (themselv)m(es)i(when)d(seen)i(in)f(this)g(text,)j(or)d(in)h(an)f(init) h(\014le)f(\(see)i(Section)f(8.3)150 4012 y([Readline)f(Init)g(File],)i -(page)e(120\).)52 b(If)33 b(y)m(our)g(k)m(eyb)s(oard)h(lac)m(ks)g(a)g +(page)e(125\).)52 b(If)33 b(y)m(our)g(k)m(eyb)s(oard)h(lac)m(ks)g(a)g Ft(LFD)f Fu(k)m(ey)-8 b(,)36 b(t)m(yping)e Ft(C-j)e Fu(will)i(pro)s (duce)150 4122 y(the)d(desired)e(c)m(haracter.)43 b(The)30 b Ft(RET)f Fu(k)m(ey)i(ma)m(y)g(b)s(e)f(lab)s(eled)h @@ -16794,9 +17255,9 @@ Ft(RET)p Fu(.)39 b(Y)-8 b(ou)25 b(do)g(not)g(ha)m(v)m(e)h(to)g(b)s(e)e Ft(RET)p Fu(;)i(the)g(en)m(tire)g(line)f(is)h(accepted)g(regardless)g (of)f(the)h(lo)s(cation)h(of)e(the)h(cursor)150 5340 y(within)c(the)g(line.)p eop end -%%Page: 118 124 -TeXDict begin 118 123 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(118)150 299 y Fk(8.2.1)63 +%%Page: 123 129 +TeXDict begin 123 128 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(123)150 299 y Fk(8.2.1)63 b(Readline)40 b(Bare)h(Essen)m(tials)150 446 y Fu(In)31 b(order)h(to)h(en)m(ter)g(c)m(haracters)g(in)m(to)g(the)g(line,)g (simply)e(t)m(yp)s(e)i(them.)46 b(The)31 b(t)m(yp)s(ed)h(c)m(haracter)i @@ -16863,9 +17324,9 @@ b(It)24 b(is)h(a)g(lo)s(ose)150 5230 y(con)m(v)m(en)m(tion)32 b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m (haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150 5340 y(w)m(ords.)p eop end -%%Page: 119 125 -TeXDict begin 119 124 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(119)150 299 y Fk(8.2.3)63 +%%Page: 124 130 +TeXDict begin 124 129 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(124)150 299 y Fk(8.2.3)63 b(Readline)40 b(Killing)i(Commands)150 446 y Fr(Killing)35 b Fu(text)28 b(means)e(to)h(delete)h(the)f(text)g(from)g(the)f(line,)i (but)e(to)h(sa)m(v)m(e)h(it)g(a)m(w)m(a)m(y)g(for)e(later)i(use,)f @@ -16939,13 +17400,13 @@ b(on)e(the)h(input)e(line.)150 4974 y Fk(8.2.5)63 b(Searc)m(hing)40 b(for)i(Commands)g(in)f(the)g(History)150 5121 y Fu(Readline)35 b(pro)m(vides)f(commands)g(for)g(searc)m(hing)h(through)e(the)i (command)f(history)g(\(see)h(Section)g(9.1)150 5230 y([Bash)i(History)h -(F)-8 b(acilities],)42 b(page)37 b(152\))i(for)d(lines)h(con)m(taining) +(F)-8 b(acilities],)42 b(page)37 b(159\))i(for)d(lines)h(con)m(taining) i(a)e(sp)s(eci\014ed)f(string.)60 b(There)36 b(are)i(t)m(w)m(o)150 5340 y(searc)m(h)31 b(mo)s(des:)40 b Fr(incremen)m(tal)35 b Fu(and)30 b Fr(non-incremen)m(tal)p Fu(.)p eop end -%%Page: 120 126 -TeXDict begin 120 125 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(120)275 299 y(Incremen)m(tal)26 +%%Page: 125 131 +TeXDict begin 125 130 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(125)275 299 y(Incremen)m(tal)26 b(searc)m(hes)h(b)s(egin)e(b)s(efore)g(the)h(user)f(has)h(\014nished)e (t)m(yping)i(the)g(searc)m(h)g(string.)39 b(As)26 b(eac)m(h)150 408 y(c)m(haracter)37 b(of)e(the)h(searc)m(h)g(string)f(is)h(t)m(yp)s @@ -16985,57 +17446,57 @@ y(terminate)i(the)g(searc)m(h,)g(mak)m(e)h(the)e(last)h(line)g(found)e (the)i(curren)m(t)f(line,)h(and)f(b)s(egin)g(editing.)275 2094 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h(incremen)m(tal)g (searc)m(h)f(string.)54 b(If)34 b(t)m(w)m(o)j Fj(C-r)p -Fu(s)c(are)i(t)m(yp)s(ed)g(without)150 2204 y(an)m(y)i(in)m(terv)m -(ening)g(c)m(haracters)h(de\014ning)e(a)h(new)f(searc)m(h)h(string,)h -(an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i(string)g(is)150 -2313 y(used.)275 2444 y(Non-incremen)m(tal)48 b(searc)m(hes)g(read)e -(the)h(en)m(tire)h(searc)m(h)f(string)g(b)s(efore)f(starting)h(to)h -(searc)m(h)f(for)150 2553 y(matc)m(hing)d(history)e(lines.)78 -b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f(t)m(yp)s(ed)g(b)m(y)g -(the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 2663 y(con)m(ten)m(ts)32 -b(of)f(the)f(curren)m(t)g(line.)150 2896 y Fs(8.3)68 -b(Readline)47 b(Init)e(File)150 3055 y Fu(Although)f(the)g(Readline)g -(library)f(comes)i(with)e(a)h(set)h(of)f(Emacs-lik)m(e)h(k)m -(eybindings)f(installed)g(b)m(y)150 3165 y(default,)26 -b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren)m(t)f(set)g(of)g(k) -m(eybindings.)38 b(An)m(y)25 b(user)f(can)h(customize)h(programs)150 -3274 y(that)39 b(use)g(Readline)g(b)m(y)f(putting)h(commands)f(in)g(an) -h Fr(inputrc)k Fu(\014le,)e(con)m(v)m(en)m(tionally)h(in)c(their)h -(home)150 3384 y(directory)-8 b(.)59 b(The)35 b(name)i(of)f(this)g -(\014le)g(is)g(tak)m(en)h(from)f(the)g(v)-5 b(alue)37 -b(of)f(the)g(shell)h(v)-5 b(ariable)36 b Ft(INPUTRC)p -Fu(.)56 b(If)150 3493 y(that)36 b(v)-5 b(ariable)36 b(is)f(unset,)h -(the)f(default)h(is)f Ft(~/.inputrc)p Fu(.)52 b(If)35 -b(that)g(\014le)h(do)s(es)e(not)i(exist)g(or)f(cannot)h(b)s(e)150 -3603 y(read,)f(the)f(ultimate)h(default)f(is)g Ft(/etc/inputrc)p -Fu(.)47 b(The)33 b Ft(bind)g Fu(builtin)g(command)h(can)g(also)h(b)s(e) -e(used)150 3713 y(to)e(set)g(Readline)g(k)m(eybindings)f(and)g(v)-5 -b(ariables.)41 b(See)31 b(Section)g(4.2)g([Bash)g(Builtins],)g(page)g -(55.)275 3843 y(When)e(a)h(program)f(whic)m(h)h(uses)f(the)h(Readline)g -(library)f(starts)h(up,)f(the)h(init)g(\014le)f(is)h(read,)g(and)f(the) -150 3953 y(k)m(ey)i(bindings)e(are)i(set.)275 4083 y(In)26 -b(addition,)i(the)f Ft(C-x)i(C-r)d Fu(command)h(re-reads)g(this)f(init) -h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m(hanges)150 -4193 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g(it.)150 -4384 y Fk(8.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150 -4531 y Fu(There)f(are)i(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w) -m(ed)h(in)d(the)h(Readline)h(init)f(\014le.)73 b(Blank)41 -b(lines)h(are)150 4641 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h -(a)g(`)p Ft(#)p Fu(')g(are)h(commen)m(ts.)73 b(Lines)41 -b(b)s(eginning)f(with)g(a)i(`)p Ft($)p Fu(')f(indicate)150 -4750 y(conditional)e(constructs)f(\(see)g(Section)h(8.3.2)g -([Conditional)g(Init)e(Constructs],)j(page)e(129\).)64 -b(Other)150 4860 y(lines)31 b(denote)g(v)-5 b(ariable)31 -b(settings)g(and)f(k)m(ey)h(bindings.)150 5011 y(V)-8 -b(ariable)32 b(Settings)630 5121 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e -(the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g(b)m(y)f(altering)h -(the)g(v)-5 b(alues)41 b(of)630 5230 y(v)-5 b(ariables)34 -b(in)f(Readline)i(using)e(the)g Ft(set)g Fu(command)g(within)g(the)h -(init)g(\014le.)50 b(The)33 b(syn)m(tax)630 5340 y(is)d(simple:)p -eop end -%%Page: 121 127 -TeXDict begin 121 126 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(121)870 299 y Ft(set)47 +Fu(s)c(are)i(t)m(yp)s(ed)g(without)150 2204 y(an)m(y)42 +b(in)m(terv)m(ening)i(c)m(haracters)f(de\014ning)f(a)g(new)g(searc)m(h) +g(string,)k(Readline)c(uses)g(an)m(y)h(remem)m(b)s(ered)150 +2313 y(searc)m(h)31 b(string.)275 2444 y(Non-incremen)m(tal)48 +b(searc)m(hes)g(read)e(the)h(en)m(tire)h(searc)m(h)f(string)g(b)s +(efore)f(starting)h(to)h(searc)m(h)f(for)150 2553 y(matc)m(hing)d +(history)e(lines.)78 b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f +(t)m(yp)s(ed)g(b)m(y)g(the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 +2663 y(con)m(ten)m(ts)32 b(of)f(the)f(curren)m(t)g(line.)150 +2896 y Fs(8.3)68 b(Readline)47 b(Init)e(File)150 3055 +y Fu(Although)f(the)g(Readline)g(library)f(comes)i(with)e(a)h(set)h(of) +f(Emacs-lik)m(e)h(k)m(eybindings)f(installed)g(b)m(y)150 +3165 y(default,)26 b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren) +m(t)f(set)g(of)g(k)m(eybindings.)38 b(An)m(y)25 b(user)f(can)h +(customize)h(programs)150 3274 y(that)39 b(use)g(Readline)g(b)m(y)f +(putting)h(commands)f(in)g(an)h Fr(inputrc)k Fu(\014le,)e(con)m(v)m(en) +m(tionally)h(in)c(their)h(home)150 3384 y(directory)-8 +b(.)59 b(The)35 b(name)i(of)f(this)g(\014le)g(is)g(tak)m(en)h(from)f +(the)g(v)-5 b(alue)37 b(of)f(the)g(shell)h(v)-5 b(ariable)36 +b Ft(INPUTRC)p Fu(.)56 b(If)150 3493 y(that)36 b(v)-5 +b(ariable)36 b(is)f(unset,)h(the)f(default)h(is)f Ft(~/.inputrc)p +Fu(.)52 b(If)35 b(that)g(\014le)h(do)s(es)e(not)i(exist)g(or)f(cannot)h +(b)s(e)150 3603 y(read,)f(the)f(ultimate)h(default)f(is)g +Ft(/etc/inputrc)p Fu(.)47 b(The)33 b Ft(bind)g Fu(builtin)g(command)h +(can)g(also)h(b)s(e)e(used)150 3713 y(to)e(set)g(Readline)g(k)m +(eybindings)f(and)g(v)-5 b(ariables.)41 b(See)31 b(Section)g(4.2)g +([Bash)g(Builtins],)g(page)g(57.)275 3843 y(When)e(a)h(program)f(whic)m +(h)h(uses)f(the)h(Readline)g(library)f(starts)h(up,)f(the)h(init)g +(\014le)f(is)h(read,)g(and)f(the)150 3953 y(k)m(ey)i(bindings)e(are)i +(set.)275 4083 y(In)26 b(addition,)i(the)f Ft(C-x)i(C-r)d +Fu(command)h(re-reads)g(this)f(init)h(\014le,)h(th)m(us)f(incorp)s +(orating)g(an)m(y)g(c)m(hanges)150 4193 y(that)k(y)m(ou)g(migh)m(t)g +(ha)m(v)m(e)g(made)g(to)g(it.)150 4384 y Fk(8.3.1)63 +b(Readline)40 b(Init)h(File)g(Syn)m(tax)150 4531 y Fu(There)f(are)i +(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w)m(ed)h(in)d(the)h +(Readline)h(init)f(\014le.)73 b(Blank)41 b(lines)h(are)150 +4641 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h(a)g(`)p +Ft(#)p Fu(')g(are)h(commen)m(ts.)73 b(Lines)41 b(b)s(eginning)f(with)g +(a)i(`)p Ft($)p Fu(')f(indicate)150 4750 y(conditional)e(constructs)f +(\(see)g(Section)h(8.3.2)g([Conditional)g(Init)e(Constructs],)j(page)e +(134\).)64 b(Other)150 4860 y(lines)31 b(denote)g(v)-5 +b(ariable)31 b(settings)g(and)f(k)m(ey)h(bindings.)150 +5011 y(V)-8 b(ariable)32 b(Settings)630 5121 y(Y)-8 b(ou)41 +b(can)g(mo)s(dify)e(the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g +(b)m(y)f(altering)h(the)g(v)-5 b(alues)41 b(of)630 5230 +y(v)-5 b(ariables)34 b(in)f(Readline)i(using)e(the)g +Ft(set)g Fu(command)g(within)g(the)h(init)g(\014le.)50 +b(The)33 b(syn)m(tax)630 5340 y(is)d(simple:)p eop end +%%Page: 126 132 +TeXDict begin 126 131 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(126)870 299 y Ft(set)47 b Fj(variable)e(value)630 432 y Fu(Here,)29 b(for)e(example,)h(is)g(ho) m(w)f(to)h(c)m(hange)g(from)f(the)g(default)h(Emacs-lik)m(e)h(k)m(ey)f (binding)e(to)630 542 y(use)k Ft(vi)g Fu(line)h(editing)g(commands:)870 @@ -17052,7 +17513,7 @@ b(1.)39 b(An)m(y)25 b(other)f(v)-5 b(alue)25 b(results)f(in)g(the)g(v) 1403 y(The)37 b Ft(bind)30 b(-V)37 b Fu(command)g(lists)i(the)f(curren) m(t)f(Readline)i(v)-5 b(ariable)38 b(names)g(and)f(v)-5 b(alues.)630 1512 y(See)31 b(Section)g(4.2)g([Bash)g(Builtins],)g(page) -g(55.)630 1645 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g +g(57.)630 1645 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g (is)g(c)m(hangeable)j(with)d(the)g(follo)m(wing)i(v)-5 b(ariables.)630 1802 y Ft(active-region-start-colo)o(r)1110 1911 y Fu(A)27 b(string)f(v)-5 b(ariable)27 b(that)g(con)m(trols)h(the) @@ -17102,638 +17563,652 @@ Ft(visible)p Fu(',)32 b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g (attempts)g(to)h(ring)e(the)g(terminal's)1110 4855 y(b)s(ell.)630 5011 y Ft(bind-tty-special-chars)1110 5121 y Fu(If)e(set)g(to)h(`)p Ft(on)p Fu(')f(\(the)g(default\),)i(Readline)f(attempts)g(to)g(bind)d -(the)i(con)m(trol)1110 5230 y(c)m(haracters)30 b(treated)g(sp)s -(ecially)g(b)m(y)f(the)g(k)m(ernel's)h(terminal)f(driv)m(er)g(to)h -(their)1110 5340 y(Readline)h(equiv)-5 b(alen)m(ts.)p +(the)i(con)m(trol)1110 5230 y(c)m(haracters)28 b(that)g(are)f(treated)g +(sp)s(ecially)h(b)m(y)f(the)g(k)m(ernel's)g(terminal)g(driv)m(er)1110 +5340 y(to)33 b(their)f(Readline)h(equiv)-5 b(alen)m(ts.)47 +b(These)32 b(o)m(v)m(erride)h(the)f(default)g(Readline)p eop end -%%Page: 122 128 -TeXDict begin 122 127 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(122)630 299 y Ft -(blink-matching-paren)1110 408 y Fu(If)36 b(set)g(to)h(`)p -Ft(on)p Fu(',)h(Readline)f(attempts)g(to)g(brie\015y)e(mo)m(v)m(e)j -(the)f(cursor)e(to)i(an)1110 518 y(op)s(ening)k(paren)m(thesis)h(when)f -(a)h(closing)h(paren)m(thesis)e(is)h(inserted.)74 b(The)1110 -628 y(default)31 b(is)f(`)p Ft(off)p Fu('.)630 792 y -Ft(colored-completion-prefi)o(x)1110 902 y Fu(If)f(set)h(to)g(`)p -Ft(on)p Fu(',)g(when)e(listing)i(completions,)h(Readline)f(displa)m(ys) -g(the)f(com-)1110 1011 y(mon)c(pre\014x)f(of)i(the)f(set)h(of)g(p)s -(ossible)f(completions)h(using)f(a)h(di\013eren)m(t)g(color.)1110 -1121 y(The)f(color)h(de\014nitions)f(are)h(tak)m(en)g(from)f(the)g(v)-5 -b(alue)26 b(of)g(the)f Ft(LS_COLORS)e Fu(en-)1110 1230 +%%Page: 127 133 +TeXDict begin 127 132 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(127)1110 299 y(bindings)33 +b(describ)s(ed)g(here.)51 b(T)m(yp)s(e)34 b(`)p Ft(stty)29 +b(-a)p Fu(')34 b(at)h(a)f(Bash)g(prompt)g(to)g(see)1110 +408 y(y)m(our)h(curren)m(t)g(terminal)h(settings,)i(including)d(the)h +(sp)s(ecial)f(con)m(trol)i(c)m(har-)1110 518 y(acters)31 +b(\(usually)g Ft(cchars)p Fu(\).)630 664 y Ft(blink-matching-paren)1110 +774 y Fu(If)36 b(set)g(to)h(`)p Ft(on)p Fu(',)h(Readline)f(attempts)g +(to)g(brie\015y)e(mo)m(v)m(e)j(the)f(cursor)e(to)i(an)1110 +883 y(op)s(ening)k(paren)m(thesis)h(when)f(a)h(closing)h(paren)m +(thesis)e(is)h(inserted.)74 b(The)1110 993 y(default)31 +b(is)f(`)p Ft(off)p Fu('.)630 1139 y Ft(colored-completion-prefi)o(x) +1110 1249 y Fu(If)f(set)h(to)g(`)p Ft(on)p Fu(',)g(when)e(listing)i +(completions,)h(Readline)f(displa)m(ys)g(the)f(com-)1110 +1358 y(mon)c(pre\014x)f(of)i(the)f(set)h(of)g(p)s(ossible)f +(completions)h(using)f(a)h(di\013eren)m(t)g(color.)1110 +1468 y(The)f(color)h(de\014nitions)f(are)h(tak)m(en)g(from)f(the)g(v)-5 +b(alue)26 b(of)g(the)f Ft(LS_COLORS)e Fu(en-)1110 1577 y(vironmen)m(t)34 b(v)-5 b(ariable.)50 b(If)33 b(there)h(is)g(a)f (color)i(de\014nition)e(in)g Ft(LS_COLORS)e Fu(for)1110 -1340 y(the)22 b(custom)g(su\016x)f(`)p Ft(readline-colored-complet)o -(ion)o(-pre)o(fix)p Fu(',)c(Read-)1110 1450 y(line)24 +1687 y(the)22 b(custom)g(su\016x)f(`)p Ft(readline-colored-complet)o +(ion)o(-pre)o(fix)p Fu(',)c(Read-)1110 1797 y(line)24 b(uses)e(this)i(color)g(for)f(the)h(common)f(pre\014x)f(instead)i(of)f -(its)h(default.)38 b(The)1110 1559 y(default)31 b(is)f(`)p -Ft(off)p Fu('.)630 1724 y Ft(colored-stats)1110 1833 +(its)h(default.)38 b(The)1110 1906 y(default)31 b(is)f(`)p +Ft(off)p Fu('.)630 2052 y Ft(colored-stats)1110 2162 y Fu(If)c(set)h(to)g(`)p Ft(on)p Fu(',)h(Readline)f(displa)m(ys)g(p)s (ossible)f(completions)h(using)f(di\013eren)m(t)1110 -1943 y(colors)40 b(to)g(indicate)g(their)f(\014le)h(t)m(yp)s(e.)67 +2271 y(colors)40 b(to)g(indicate)g(their)f(\014le)h(t)m(yp)s(e.)67 b(The)38 b(color)j(de\014nitions)d(are)i(tak)m(en)1110 -2052 y(from)24 b(the)h(v)-5 b(alue)25 b(of)g(the)g Ft(LS_COLORS)d +2381 y(from)24 b(the)h(v)-5 b(alue)25 b(of)g(the)g Ft(LS_COLORS)d Fu(en)m(vironmen)m(t)j(v)-5 b(ariable.)40 b(The)24 b(default)1110 -2162 y(is)30 b(`)p Ft(off)p Fu('.)630 2326 y Ft(comment-begin)1110 -2436 y Fu(The)62 b(string)g(to)h(insert)f(at)h(the)g(b)s(eginning)e(of) -h(the)h(line)f(when)g(the)1110 2545 y Ft(insert-comment)26 +2491 y(is)30 b(`)p Ft(off)p Fu('.)630 2637 y Ft(comment-begin)1110 +2746 y Fu(The)62 b(string)g(to)h(insert)f(at)h(the)g(b)s(eginning)e(of) +h(the)h(line)f(when)g(the)1110 2856 y Ft(insert-comment)26 b Fu(command)31 b(is)f(executed.)42 b(The)30 b(default)g(v)-5 -b(alue)31 b(is)f Ft("#")p Fu(.)630 2710 y Ft(completion-display-width) -1110 2819 y Fu(The)41 b(n)m(um)m(b)s(er)f(of)i(screen)g(columns)f(used) -g(to)h(displa)m(y)g(p)s(ossible)f(matc)m(hes)1110 2929 +b(alue)31 b(is)f Ft("#")p Fu(.)630 3002 y Ft(completion-display-width) +1110 3112 y Fu(The)41 b(n)m(um)m(b)s(er)f(of)i(screen)g(columns)f(used) +g(to)h(displa)m(y)g(p)s(ossible)f(matc)m(hes)1110 3221 y(when)28 b(p)s(erforming)g(completion.)41 b(The)29 b(v)-5 b(alue)29 b(is)g(ignored)g(if)g(it)h(is)f(less)g(than)1110 -3039 y(0)e(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39 +3331 y(0)e(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39 b(A)26 b(v)-5 b(alue)27 b(of)f(0)h(will)f(cause)1110 -3148 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e +3440 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e (line.)41 b(The)30 b(default)h(v)-5 b(alue)31 b(is)f(-1.)630 -3313 y Ft(completion-ignore-case)1110 3422 y Fu(If)d(set)h(to)g(`)p +3587 y Ft(completion-ignore-case)1110 3696 y Fu(If)d(set)h(to)g(`)p Ft(on)p Fu(',)g(Readline)g(p)s(erforms)e(\014lename)h(matc)m(hing)i -(and)e(completion)1110 3532 y(in)j(a)h(case-insensitiv)m(e)i(fashion.) +(and)e(completion)1110 3806 y(in)j(a)h(case-insensitiv)m(e)i(fashion.) 40 b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Ft(off)p -Fu('.)630 3696 y Ft(completion-map-case)1110 3806 y Fu(If)22 +Fu('.)630 3952 y Ft(completion-map-case)1110 4061 y Fu(If)22 b(set)g(to)h(`)p Ft(on)p Fu(',)h(and)e Fr(completion-ignore-case)31 -b Fu(is)22 b(enabled,)i(Readline)f(treats)1110 3915 y(h)m(yphens)29 +b Fu(is)22 b(enabled,)i(Readline)f(treats)1110 4171 y(h)m(yphens)29 b(\(`)p Ft(-)p Fu('\))j(and)e(underscores)g(\(`)p Ft(_)p Fu('\))i(as)f(equiv)-5 b(alen)m(t)32 b(when)e(p)s(erforming)1110 -4025 y(case-insensitiv)m(e)47 b(\014lename)e(matc)m(hing)g(and)f -(completion.)85 b(The)44 b(default)1110 4134 y(v)-5 b(alue)31 -b(is)f(`)p Ft(off)p Fu('.)630 4299 y Ft(completion-prefix-displa)o -(y-le)o(ngth)1110 4408 y Fu(The)h(length)g(in)g(c)m(haracters)i(of)f +4281 y(case-insensitiv)m(e)47 b(\014lename)e(matc)m(hing)g(and)f +(completion.)85 b(The)44 b(default)1110 4390 y(v)-5 b(alue)31 +b(is)f(`)p Ft(off)p Fu('.)630 4536 y Ft(completion-prefix-displa)o +(y-le)o(ngth)1110 4646 y Fu(The)h(length)g(in)g(c)m(haracters)i(of)f (the)f(common)h(pre\014x)e(of)h(a)h(list)g(of)f(p)s(ossible)1110 -4518 y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s -(di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 4628 +4756 y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s +(di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 4865 y(v)-5 b(alue)26 b(greater)h(than)e(zero,)j(common)e(pre\014xes)e -(longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 4737 +(longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 4975 y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible) -f(completions.)630 4902 y Ft(completion-query-items)1110 -5011 y Fu(The)c(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h -(that)g(determines)f(when)f(the)i(user)1110 5121 y(is)43 +f(completions.)630 5121 y Ft(completion-query-items)1110 +5230 y Fu(The)c(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h +(that)g(determines)f(when)f(the)i(user)1110 5340 y(is)43 b(ask)m(ed)g(whether)f(the)g(list)h(of)g(p)s(ossibilities)g(should)f(b) -s(e)g(displa)m(y)m(ed.)77 b(If)1110 5230 y(the)29 b(n)m(um)m(b)s(er)f -(of)h(p)s(ossible)g(completions)h(is)f(greater)h(than)f(or)g(equal)g -(to)h(this)1110 5340 y(v)-5 b(alue,)45 b(Readline)e(will)f(ask)g -(whether)f(or)h(not)g(the)g(user)f(wishes)g(to)i(view)p -eop end -%%Page: 123 129 -TeXDict begin 123 128 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(123)1110 299 y(them;)33 -b(otherwise,)f(they)g(are)g(simply)g(listed.)45 b(This)31 -b(v)-5 b(ariable)33 b(m)m(ust)e(b)s(e)g(set)1110 408 -y(to)43 b(an)e(in)m(teger)j(v)-5 b(alue)42 b(greater)h(than)f(or)g +s(e)g(displa)m(y)m(ed.)77 b(If)p eop end +%%Page: 128 134 +TeXDict begin 128 133 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(128)1110 299 y(the)29 +b(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h(is)f(greater)h +(than)f(or)g(equal)g(to)h(this)1110 408 y(v)-5 b(alue,)45 +b(Readline)e(will)f(ask)g(whether)f(or)h(not)g(the)g(user)f(wishes)g +(to)i(view)1110 518 y(them;)33 b(otherwise,)f(they)g(are)g(simply)g +(listed.)45 b(This)31 b(v)-5 b(ariable)33 b(m)m(ust)e(b)s(e)g(set)1110 +628 y(to)43 b(an)e(in)m(teger)j(v)-5 b(alue)42 b(greater)h(than)f(or)g (equal)g(to)h(zero.)76 b(A)42 b(zero)g(v)-5 b(alue)1110 -518 y(means)40 b(Readline)h(should)f(nev)m(er)g(ask;)46 +737 y(means)40 b(Readline)h(should)f(nev)m(er)g(ask;)46 b(negativ)m(e)d(v)-5 b(alues)41 b(are)f(treated)i(as)1110 -628 y(zero.)g(The)29 b(default)i(limit)g(is)g Ft(100)p -Fu(.)630 774 y Ft(convert-meta)1110 883 y Fu(If)22 b(set)g(to)h(`)p -Ft(on)p Fu(',)h(Readline)f(will)f(con)m(v)m(ert)i(c)m(haracters)f(with) -f(the)g(eigh)m(th)h(bit)f(set)1110 993 y(to)33 b(an)e -Fm(asci)r(i)h Fu(k)m(ey)h(sequence)f(b)m(y)g(stripping)f(the)h(eigh)m -(th)h(bit)f(and)f(pre\014xing)1110 1103 y(an)24 b Ft(ESC)g -Fu(c)m(haracter,)j(con)m(v)m(erting)f(them)f(to)g(a)g(meta-pre\014xed)f -(k)m(ey)h(sequence.)1110 1212 y(The)i(default)h(v)-5 -b(alue)28 b(is)f(`)p Ft(on)p Fu(',)i(but)d(will)i(b)s(e)f(set)h(to)g(`) -p Ft(off)p Fu(')g(if)f(the)h(lo)s(cale)h(is)f(one)1110 -1322 y(that)21 b(con)m(tains)h(eigh)m(t-bit)h(c)m(haracters.)39 -b(This)20 b(v)-5 b(ariable)21 b(is)g(dep)s(enden)m(t)f(on)h(the)1110 -1431 y Ft(LC_CTYPE)26 b Fu(lo)s(cale)31 b(category)-8 +847 y(zero.)g(The)29 b(default)i(limit)g(is)g Ft(100)p +Fu(.)630 1011 y Ft(convert-meta)1110 1121 y Fu(If)22 +b(set)g(to)h(`)p Ft(on)p Fu(',)h(Readline)f(will)f(con)m(v)m(ert)i(c)m +(haracters)f(with)f(the)g(eigh)m(th)h(bit)f(set)1110 +1230 y(to)33 b(an)e Fm(asci)r(i)h Fu(k)m(ey)h(sequence)f(b)m(y)g +(stripping)f(the)h(eigh)m(th)h(bit)f(and)f(pre\014xing)1110 +1340 y(an)24 b Ft(ESC)g Fu(c)m(haracter,)j(con)m(v)m(erting)f(them)f +(to)g(a)g(meta-pre\014xed)f(k)m(ey)h(sequence.)1110 1450 +y(The)i(default)h(v)-5 b(alue)28 b(is)f(`)p Ft(on)p Fu(',)i(but)d(will) +i(b)s(e)f(set)h(to)g(`)p Ft(off)p Fu(')g(if)f(the)h(lo)s(cale)h(is)f +(one)1110 1559 y(that)21 b(con)m(tains)h(eigh)m(t-bit)h(c)m(haracters.) +39 b(This)20 b(v)-5 b(ariable)21 b(is)g(dep)s(enden)m(t)f(on)h(the)1110 +1669 y Ft(LC_CTYPE)26 b Fu(lo)s(cale)31 b(category)-8 b(,)31 b(and)d(ma)m(y)h(c)m(hange)h(if)e(the)h(lo)s(cale)h(is)f(c)m -(hanged.)630 1577 y Ft(disable-completion)1110 1687 y +(hanged.)630 1833 y Ft(disable-completion)1110 1943 y Fu(If)36 b(set)h(to)h(`)p Ft(On)p Fu(',)g(Readline)f(will)g(inhibit)f -(w)m(ord)h(completion.)60 b(Completion)1110 1797 y(c)m(haracters)28 +(w)m(ord)h(completion.)60 b(Completion)1110 2052 y(c)m(haracters)28 b(will)e(b)s(e)f(inserted)h(in)m(to)h(the)g(line)f(as)g(if)g(they)h -(had)e(b)s(een)g(mapp)s(ed)1110 1906 y(to)31 b Ft(self-insert)p +(had)e(b)s(een)g(mapp)s(ed)1110 2162 y(to)31 b Ft(self-insert)p Fu(.)38 b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)630 -2052 y Ft(echo-control-characters)1110 2162 y Fu(When)f(set)h(to)g(`)p +2326 y Ft(echo-control-characters)1110 2436 y Fu(When)f(set)h(to)g(`)p Ft(on)p Fu(',)f(on)g(op)s(erating)h(systems)f(that)h(indicate)g(they)g -(supp)s(ort)1110 2271 y(it,)e(Readline)g(ec)m(ho)s(es)g(a)f(c)m +(supp)s(ort)1110 2545 y(it,)e(Readline)g(ec)m(ho)s(es)g(a)f(c)m (haracter)i(corresp)s(onding)d(to)i(a)f(signal)h(generated)1110 -2381 y(from)h(the)g(k)m(eyb)s(oard.)41 b(The)30 b(default)g(is)h(`)p -Ft(on)p Fu('.)630 2527 y Ft(editing-mode)1110 2637 y +2655 y(from)h(the)g(k)m(eyb)s(oard.)41 b(The)30 b(default)g(is)h(`)p +Ft(on)p Fu('.)630 2819 y Ft(editing-mode)1110 2929 y Fu(The)d Ft(editing-mode)e Fu(v)-5 b(ariable)29 b(con)m(trols)h(whic)m -(h)e(default)h(set)h(of)e(k)m(ey)i(bind-)1110 2746 y(ings)25 +(h)e(default)h(set)h(of)e(k)m(ey)i(bind-)1110 3039 y(ings)25 b(is)g(used.)38 b(By)26 b(default,)g(Readline)g(starts)f(up)f(in)h -(Emacs)g(editing)h(mo)s(de,)1110 2856 y(where)j(the)g(k)m(eystrok)m(es) +(Emacs)g(editing)h(mo)s(de,)1110 3148 y(where)j(the)g(k)m(eystrok)m(es) i(are)e(most)h(similar)f(to)h(Emacs.)40 b(This)29 b(v)-5 -b(ariable)30 b(can)1110 2966 y(b)s(e)g(set)h(to)g(either)g(`)p -Ft(emacs)p Fu(')e(or)h(`)p Ft(vi)p Fu('.)630 3112 y Ft -(emacs-mode-string)1110 3221 y Fu(If)j(the)h Fr(sho)m(w-mo)s +b(ariable)30 b(can)1110 3258 y(b)s(e)g(set)h(to)g(either)g(`)p +Ft(emacs)p Fu(')e(or)h(`)p Ft(vi)p Fu('.)630 3422 y Ft +(emacs-mode-string)1110 3532 y Fu(If)j(the)h Fr(sho)m(w-mo)s (de-in-prompt)h Fu(v)-5 b(ariable)35 b(is)e(enabled,)i(this)f(string)f -(is)h(dis-)1110 3331 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the) +(is)h(dis-)1110 3641 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the) g(last)h(line)f(of)h(the)f(primary)f(prompt)g(when)1110 -3440 y(emacs)g(editing)h(mo)s(de)e(is)h(activ)m(e.)40 +3751 y(emacs)g(editing)h(mo)s(de)e(is)h(activ)m(e.)40 b(The)21 b(v)-5 b(alue)22 b(is)g(expanded)f(lik)m(e)h(a)h(k)m(ey)f -(bind-)1110 3550 y(ing,)27 b(so)f(the)f(standard)g(set)h(of)f(meta-)i +(bind-)1110 3861 y(ing,)27 b(so)f(the)f(standard)g(set)h(of)f(meta-)i (and)e(con)m(trol)i(pre\014xes)d(and)h(bac)m(kslash)1110 -3660 y(escap)s(e)f(sequences)h(is)e(a)m(v)-5 b(ailable.)41 +3970 y(escap)s(e)f(sequences)h(is)e(a)m(v)-5 b(ailable.)41 b(Use)25 b(the)f(`)p Ft(\\1)p Fu(')f(and)h(`)p Ft(\\2)p -Fu(')g(escap)s(es)g(to)g(b)s(egin)1110 3769 y(and)37 +Fu(')g(escap)s(es)g(to)g(b)s(egin)1110 4080 y(and)37 b(end)g(sequences)h(of)f(non-prin)m(ting)h(c)m(haracters,)j(whic)m(h)c -(can)h(b)s(e)f(used)1110 3879 y(to)h(em)m(b)s(ed)f(a)g(terminal)h(con)m +(can)h(b)s(e)f(used)1110 4189 y(to)h(em)m(b)s(ed)f(a)g(terminal)h(con)m (trol)h(sequence)f(in)m(to)g(the)f(mo)s(de)g(string.)61 -b(The)1110 3988 y(default)31 b(is)f(`)p Ft(@)p Fu('.)630 -4134 y Ft(enable-active-region)1110 4244 y Fu(The)46 +b(The)1110 4299 y(default)31 b(is)f(`)p Ft(@)p Fu('.)630 +4463 y Ft(enable-active-region)1110 4573 y Fu(The)46 b Fr(p)s(oin)m(t)j Fu(is)e(the)g(curren)m(t)f(cursor)g(p)s(osition,)52 -b(and)46 b Fr(mark)52 b Fu(refers)46 b(to)i(a)1110 4354 +b(and)46 b Fr(mark)52 b Fu(refers)46 b(to)i(a)1110 4682 y(sa)m(v)m(ed)37 b(cursor)f(p)s(osition)g(\(see)i(Section)f(8.4.1)h -([Commands)d(F)-8 b(or)37 b(Mo)m(ving],)1110 4463 y(page)d(133\).)50 +([Commands)d(F)-8 b(or)37 b(Mo)m(ving],)1110 4792 y(page)d(139\).)50 b(The)33 b(text)h(b)s(et)m(w)m(een)f(the)g(p)s(oin)m(t)g(and)g(mark)g -(is)g(referred)f(to)i(as)1110 4573 y(the)h Fr(region)p +(is)g(referred)f(to)i(as)1110 4902 y(the)h Fr(region)p Fu(.)53 b(When)34 b(this)g(v)-5 b(ariable)36 b(is)e(set)h(to)g(`)p -Ft(On)p Fu(',)h(Readline)f(allo)m(ws)g(cer-)1110 4682 +Ft(On)p Fu(',)h(Readline)f(allo)m(ws)g(cer-)1110 5011 y(tain)30 b(commands)f(to)g(designate)i(the)e(region)h(as)f Fr(activ)m(e)p Fu(.)43 b(When)29 b(the)g(region)1110 -4792 y(is)g(activ)m(e,)j(Readline)e(highligh)m(ts)g(the)g(text)g(in)f -(the)g(region)h(using)f(the)g(v)-5 b(alue)1110 4902 y(of)35 +5121 y(is)g(activ)m(e,)j(Readline)e(highligh)m(ts)g(the)g(text)g(in)f +(the)g(region)h(using)f(the)g(v)-5 b(alue)1110 5230 y(of)35 b(the)g Ft(active-region-start-color)p Fu(,)30 b(whic)m(h)35 -b(defaults)g(to)h(the)f(string)1110 5011 y(that)23 b(enables)f(the)g +b(defaults)g(to)h(the)f(string)1110 5340 y(that)23 b(enables)f(the)g (terminal's)h(standout)e(mo)s(de.)38 b(The)21 b(activ)m(e)k(region)d -(sho)m(ws)1110 5121 y(the)32 b(text)h(inserted)f(b)m(y)g(brac)m(k)m -(eted-paste)i(and)e(an)m(y)g(matc)m(hing)h(text)g(found)1110 -5230 y(b)m(y)f(incremen)m(tal)i(and)e(non-incremen)m(tal)i(history)e -(searc)m(hes.)48 b(The)32 b(default)1110 5340 y(is)e(`)p -Ft(On)p Fu('.)p eop end -%%Page: 124 130 -TeXDict begin 124 129 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(124)630 299 y Ft -(enable-bracketed-paste)1110 408 y Fu(When)36 b(set)h(to)g(`)p +(sho)m(ws)p eop end +%%Page: 129 135 +TeXDict begin 129 134 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(129)1110 299 y(the)32 +b(text)h(inserted)f(b)m(y)g(brac)m(k)m(eted-paste)i(and)e(an)m(y)g +(matc)m(hing)h(text)g(found)1110 408 y(b)m(y)f(incremen)m(tal)i(and)e +(non-incremen)m(tal)i(history)e(searc)m(hes.)48 b(The)32 +b(default)1110 518 y(is)e(`)p Ft(On)p Fu('.)630 706 y +Ft(enable-bracketed-paste)1110 816 y Fu(When)36 b(set)h(to)g(`)p Ft(On)p Fu(',)h(Readline)f(con\014gures)f(the)h(terminal)f(to)i(insert) -e(eac)m(h)1110 518 y(paste)27 b(in)m(to)g(the)f(editing)h(bu\013er)e +e(eac)m(h)1110 925 y(paste)27 b(in)m(to)g(the)f(editing)h(bu\013er)e (as)h(a)h(single)g(string)f(of)g(c)m(haracters,)j(instead)1110 -628 y(of)d(treating)i(eac)m(h)g(c)m(haracter)f(as)g(if)f(it)h(had)f(b)s -(een)f(read)i(from)e(the)i(k)m(eyb)s(oard.)1110 737 y(This)36 -b(is)h(called)h(putting)f(the)h(terminal)f(in)m(to)h +1035 y(of)d(treating)i(eac)m(h)g(c)m(haracter)f(as)g(if)f(it)h(had)f(b) +s(een)f(read)i(from)e(the)i(k)m(eyb)s(oard.)1110 1144 +y(This)36 b(is)h(called)h(putting)f(the)h(terminal)f(in)m(to)h Fr(brac)m(k)m(eted)h(paste)e(mo)s(de)5 b Fu(;)40 b(it)1110 -847 y(prev)m(en)m(ts)30 b(Readline)h(from)e(executing)i(an)m(y)f -(editing)h(commands)e(b)s(ound)f(to)1110 956 y(k)m(ey)j(sequences)g +1254 y(prev)m(en)m(ts)30 b(Readline)h(from)e(executing)i(an)m(y)f +(editing)h(commands)e(b)s(ound)f(to)1110 1363 y(k)m(ey)j(sequences)g (app)s(earing)f(in)g(the)g(pasted)h(text.)42 b(The)29 -b(default)i(is)f(`)p Ft(On)p Fu('.)630 1113 y Ft(enable-keypad)1110 -1223 y Fu(When)23 b(set)h(to)g(`)p Ft(on)p Fu(',)h(Readline)f(will)g +b(default)i(is)f(`)p Ft(On)p Fu('.)630 1551 y Ft(enable-keypad)1110 +1661 y Fu(When)23 b(set)h(to)g(`)p Ft(on)p Fu(',)h(Readline)f(will)g (try)f(to)h(enable)g(the)f(application)i(k)m(eypad)1110 -1332 y(when)h(it)h(is)f(called.)41 b(Some)27 b(systems)f(need)h(this)f -(to)h(enable)g(the)g(arro)m(w)g(k)m(eys.)1110 1442 y(The)j(default)g -(is)h(`)p Ft(off)p Fu('.)630 1598 y Ft(enable-meta-key)1110 -1708 y Fu(When)40 b(set)g(to)g(`)p Ft(on)p Fu(',)j(Readline)d(will)g +1771 y(when)h(it)h(is)f(called.)41 b(Some)27 b(systems)f(need)h(this)f +(to)h(enable)g(the)g(arro)m(w)g(k)m(eys.)1110 1880 y(The)j(default)g +(is)h(`)p Ft(off)p Fu('.)630 2068 y Ft(enable-meta-key)1110 +2178 y Fu(When)40 b(set)g(to)g(`)p Ft(on)p Fu(',)j(Readline)d(will)g (try)g(to)g(enable)g(an)m(y)g(meta)h(mo)s(di\014er)1110 -1817 y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h -(is)g(called.)76 b(On)41 b(man)m(y)1110 1927 y(terminals,)c(the)e(meta) +2287 y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h +(is)g(called.)76 b(On)41 b(man)m(y)1110 2397 y(terminals,)c(the)e(meta) h(k)m(ey)g(is)f(used)g(to)h(send)e(eigh)m(t-bit)j(c)m(haracters.)56 -b(The)1110 2037 y(default)31 b(is)f(`)p Ft(on)p Fu('.)630 -2193 y Ft(expand-tilde)1110 2303 y Fu(If)d(set)h(to)h(`)p +b(The)1110 2506 y(default)31 b(is)f(`)p Ft(on)p Fu('.)630 +2694 y Ft(expand-tilde)1110 2804 y Fu(If)d(set)h(to)h(`)p Ft(on)p Fu(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h -(Readline)h(attempts)1110 2412 y(w)m(ord)i(completion.)42 -b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)630 2569 -y Ft(history-preserve-point)1110 2679 y Fu(If)41 b(set)h(to)h(`)p +(Readline)h(attempts)1110 2913 y(w)m(ord)i(completion.)42 +b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)630 3101 +y Ft(history-preserve-point)1110 3211 y Fu(If)41 b(set)h(to)h(`)p Ft(on)p Fu(',)i(the)c(history)h(co)s(de)g(attempts)h(to)f(place)h(the)f -(p)s(oin)m(t)f(\(the)1110 2788 y(curren)m(t)35 b(cursor)g(p)s +(p)s(oin)m(t)f(\(the)1110 3320 y(curren)m(t)35 b(cursor)g(p)s (osition\))g(at)h(the)g(same)f(lo)s(cation)i(on)e(eac)m(h)h(history)g -(line)1110 2898 y(retriev)m(ed)h(with)f Ft(previous-history)c +(line)1110 3430 y(retriev)m(ed)h(with)f Ft(previous-history)c Fu(or)37 b Ft(next-history)p Fu(.)55 b(The)36 b(default)1110 -3007 y(is)30 b(`)p Ft(off)p Fu('.)630 3164 y Ft(history-size)1110 -3273 y Fu(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g -(en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 3383 +3540 y(is)30 b(`)p Ft(off)p Fu('.)630 3727 y Ft(history-size)1110 +3837 y Fu(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g +(en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 3947 y(list.)51 b(If)34 b(set)g(to)h(zero,)g(an)m(y)f(existing)h(history)f -(en)m(tries)g(are)g(deleted)h(and)e(no)1110 3493 y(new)e(en)m(tries)i +(en)m(tries)g(are)g(deleted)h(and)e(no)1110 4056 y(new)e(en)m(tries)i (are)f(sa)m(v)m(ed.)46 b(If)31 b(set)h(to)h(a)f(v)-5 b(alue)32 b(less)g(than)f(zero,)i(the)f(n)m(um)m(b)s(er)1110 -3602 y(of)f(history)f(en)m(tries)h(is)g(not)g(limited.)42 +4166 y(of)f(history)f(en)m(tries)h(is)g(not)g(limited.)42 b(By)30 b(default,)h(the)g(n)m(um)m(b)s(er)e(of)i(history)1110 -3712 y(en)m(tries)j(is)f(not)g(limited.)49 b(If)32 b(an)h(attempt)h(is) -f(made)g(to)h(set)f Fr(history-size)39 b Fu(to)1110 3821 +4275 y(en)m(tries)j(is)f(not)g(limited.)49 b(If)32 b(an)h(attempt)h(is) +f(made)g(to)h(set)f Fr(history-size)39 b Fu(to)1110 4385 y(a)34 b(non-n)m(umeric)f(v)-5 b(alue,)34 b(the)g(maxim)m(um)f(n)m(um)m -(b)s(er)f(of)h(history)h(en)m(tries)g(will)1110 3931 -y(b)s(e)c(set)h(to)g(500.)630 4088 y Ft(horizontal-scroll-mode)1110 -4197 y Fu(This)k(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f +(b)s(er)f(of)h(history)h(en)m(tries)g(will)1110 4495 +y(b)s(e)c(set)h(to)g(500.)630 4682 y Ft(horizontal-scroll-mode)1110 +4792 y Fu(This)k(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f (`)p Ft(on)p Fu(')g(or)g(`)p Ft(off)p Fu('.)57 b(Setting)36 -b(it)g(to)h(`)p Ft(on)p Fu(')1110 4307 y(means)26 b(that)h(the)f(text)h +b(it)g(to)h(`)p Ft(on)p Fu(')1110 4902 y(means)26 b(that)h(the)f(text)h (of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m -(tally)1110 4416 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i -(are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 4526 +(tally)1110 5011 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i +(are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 5121 y(screen,)c(instead)g(of)f(wrapping)f(on)m(to)i(a)g(new)e(screen)i -(line.)40 b(This)26 b(v)-5 b(ariable)28 b(is)1110 4635 +(line.)40 b(This)26 b(v)-5 b(ariable)28 b(is)1110 5230 y(automatically)k(set)e(to)g(`)p Ft(on)p Fu(')f(for)g(terminals)g(of)h -(heigh)m(t)g(1.)41 b(By)29 b(default,)h(this)1110 4745 -y(v)-5 b(ariable)31 b(is)g(set)f(to)i(`)p Ft(off)p Fu('.)630 -4902 y Ft(input-meta)1110 5011 y Fu(If)f(set)g(to)h(`)p -Ft(on)p Fu(',)g(Readline)g(will)f(enable)h(eigh)m(t-bit)h(input)d(\(it) -i(will)f(not)h(clear)1110 5121 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h -(c)m(haracters)h(it)f(reads\),)j(regardless)c(of)h(what)g(the)1110 -5230 y(terminal)k(claims)h(it)f(can)g(supp)s(ort.)79 -b(The)44 b(default)g(v)-5 b(alue)44 b(is)g(`)p Ft(off)p -Fu(',)j(but)1110 5340 y(Readline)24 b(will)h(set)f(it)g(to)h(`)p -Ft(on)p Fu(')e(if)h(the)g(lo)s(cale)i(con)m(tains)f(eigh)m(t-bit)g(c)m -(haracters.)p eop end -%%Page: 125 131 -TeXDict begin 125 130 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(125)1110 299 y(The)29 -b(name)g Ft(meta-flag)e Fu(is)i(a)h(synon)m(ym)f(for)g(this)g(v)-5 -b(ariable.)42 b(This)28 b(v)-5 b(ariable)1110 408 y(is)35 +(heigh)m(t)g(1.)41 b(By)29 b(default,)h(this)1110 5340 +y(v)-5 b(ariable)31 b(is)g(set)f(to)i(`)p Ft(off)p Fu('.)p +eop end +%%Page: 130 136 +TeXDict begin 130 135 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(130)630 299 y Ft(input-meta)1110 +408 y Fu(If)31 b(set)g(to)h(`)p Ft(on)p Fu(',)g(Readline)g(will)f +(enable)h(eigh)m(t-bit)h(input)d(\(it)i(will)f(not)h(clear)1110 +518 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h(c)m(haracters)h(it)f +(reads\),)j(regardless)c(of)h(what)g(the)1110 628 y(terminal)k(claims)h +(it)f(can)g(supp)s(ort.)79 b(The)44 b(default)g(v)-5 +b(alue)44 b(is)g(`)p Ft(off)p Fu(',)j(but)1110 737 y(Readline)24 +b(will)h(set)f(it)g(to)h(`)p Ft(on)p Fu(')e(if)h(the)g(lo)s(cale)i(con) +m(tains)f(eigh)m(t-bit)g(c)m(haracters.)1110 847 y(The)k(name)g +Ft(meta-flag)e Fu(is)i(a)h(synon)m(ym)f(for)g(this)g(v)-5 +b(ariable.)42 b(This)28 b(v)-5 b(ariable)1110 956 y(is)35 b(dep)s(enden)m(t)f(on)h(the)g Ft(LC_CTYPE)e Fu(lo)s(cale)k(category)-8 -b(,)39 b(and)34 b(ma)m(y)i(c)m(hange)g(if)1110 518 y(the)31 -b(lo)s(cale)h(is)e(c)m(hanged.)630 675 y Ft(isearch-terminators)1110 -784 y Fu(The)51 b(string)h(of)g(c)m(haracters)h(that)f(should)e -(terminate)j(an)f(incremen)m(tal)1110 894 y(searc)m(h)25 +b(,)39 b(and)34 b(ma)m(y)i(c)m(hange)g(if)1110 1066 y(the)31 +b(lo)s(cale)h(is)e(c)m(hanged.)630 1212 y Ft(isearch-terminators)1110 +1322 y Fu(The)51 b(string)h(of)g(c)m(haracters)h(that)f(should)e +(terminate)j(an)f(incremen)m(tal)1110 1431 y(searc)m(h)25 b(without)g(subsequen)m(tly)g(executing)h(the)f(c)m(haracter)h(as)f(a)g -(command)1110 1003 y(\(see)38 b(Section)g(8.2.5)h([Searc)m(hing],)h -(page)e(119\).)62 b(If)37 b(this)g(v)-5 b(ariable)38 -b(has)f(not)1110 1113 y(b)s(een)e(giv)m(en)h(a)g(v)-5 +(command)1110 1541 y(\(see)38 b(Section)g(8.2.5)h([Searc)m(hing],)h +(page)e(124\).)62 b(If)37 b(this)g(v)-5 b(ariable)38 +b(has)f(not)1110 1650 y(b)s(een)e(giv)m(en)h(a)g(v)-5 b(alue,)37 b(the)f(c)m(haracters)h Ft(ESC)d Fu(and)h -Fj(C-J)g Fu(will)h(terminate)g(an)1110 1223 y(incremen)m(tal)c(searc)m -(h.)630 1379 y Ft(keymap)192 b Fu(Sets)64 b(Readline's)i(idea)f(of)f +Fj(C-J)g Fu(will)h(terminate)g(an)1110 1760 y(incremen)m(tal)c(searc)m +(h.)630 1906 y Ft(keymap)192 b Fu(Sets)64 b(Readline's)i(idea)f(of)f (the)h(curren)m(t)f(k)m(eymap)h(for)f(k)m(ey)h(binding)1110 -1489 y(commands.)71 b(Built-in)41 b Ft(keymap)e Fu(names)h(are)h -Ft(emacs)p Fu(,)h Ft(emacs-standard)p Fu(,)1110 1598 +2016 y(commands.)71 b(Built-in)41 b Ft(keymap)e Fu(names)h(are)h +Ft(emacs)p Fu(,)h Ft(emacs-standard)p Fu(,)1110 2125 y Ft(emacs-meta)p Fu(,)99 b Ft(emacs-ctlx)p Fu(,)f Ft(vi)p Fu(,)j Ft(vi-move)p Fu(,)f Ft(vi-command)p Fu(,)f(and)1110 -1708 y Ft(vi-insert)p Fu(.)81 b Ft(vi)44 b Fu(is)h(equiv)-5 +2235 y Ft(vi-insert)p Fu(.)81 b Ft(vi)44 b Fu(is)h(equiv)-5 b(alen)m(t)46 b(to)g Ft(vi-command)c Fu(\()p Ft(vi-move)h -Fu(is)i(also)h(a)1110 1817 y(synon)m(ym\);)41 b Ft(emacs)c +Fu(is)i(also)h(a)1110 2345 y(synon)m(ym\);)41 b Ft(emacs)c Fu(is)h(equiv)-5 b(alen)m(t)39 b(to)f Ft(emacs-standard)p -Fu(.)59 b(Applications)1110 1927 y(ma)m(y)32 b(add)e(additional)i +Fu(.)59 b(Applications)1110 2454 y(ma)m(y)32 b(add)e(additional)i (names.)43 b(The)30 b(default)h(v)-5 b(alue)32 b(is)f -Ft(emacs)p Fu(.)41 b(The)30 b(v)-5 b(alue)1110 2037 y(of)31 +Ft(emacs)p Fu(.)41 b(The)30 b(v)-5 b(alue)1110 2564 y(of)31 b(the)f Ft(editing-mode)d Fu(v)-5 b(ariable)31 b(also)h(a\013ects)f -(the)g(default)g(k)m(eymap.)630 2193 y Ft(keyseq-timeout)1110 -2303 y Fu(Sp)s(eci\014es)25 b(the)g(duration)g(Readline)h(will)g(w)m -(ait)g(for)g(a)f(c)m(haracter)i(when)e(read-)1110 2412 +(the)g(default)g(k)m(eymap.)630 2710 y Ft(keyseq-timeout)1110 +2819 y Fu(Sp)s(eci\014es)25 b(the)g(duration)g(Readline)h(will)g(w)m +(ait)g(for)g(a)f(c)m(haracter)i(when)e(read-)1110 2929 y(ing)30 b(an)g(am)m(biguous)g(k)m(ey)h(sequence)f(\(one)g(that)h(can)f -(form)g(a)g(complete)h(k)m(ey)1110 2522 y(sequence)j(using)e(the)i +(form)g(a)g(complete)h(k)m(ey)1110 3039 y(sequence)j(using)e(the)i (input)e(read)h(so)g(far,)h(or)g(can)f(tak)m(e)i(additional)f(input) -1110 2632 y(to)g(complete)g(a)f(longer)h(k)m(ey)f(sequence\).)49 +1110 3148 y(to)g(complete)g(a)f(longer)h(k)m(ey)f(sequence\).)49 b(If)33 b(no)f(input)g(is)h(receiv)m(ed)h(within)1110 -2741 y(the)43 b(timeout,)48 b(Readline)43 b(will)g(use)g(the)g(shorter) -g(but)f(complete)j(k)m(ey)e(se-)1110 2851 y(quence.)c(Readline)26 +3258 y(the)43 b(timeout,)48 b(Readline)43 b(will)g(use)g(the)g(shorter) +g(but)f(complete)j(k)m(ey)e(se-)1110 3367 y(quence.)c(Readline)26 b(uses)f(this)h(v)-5 b(alue)26 b(to)g(determine)g(whether)f(or)g(not)h -(input)1110 2960 y(is)31 b(a)m(v)-5 b(ailable)33 b(on)d(the)h(curren)m +(input)1110 3477 y(is)31 b(a)m(v)-5 b(ailable)33 b(on)d(the)h(curren)m (t)f(input)g(source)h(\()p Ft(rl_instream)d Fu(b)m(y)i(default\).)1110 -3070 y(The)25 b(v)-5 b(alue)26 b(is)f(sp)s(eci\014ed)f(in)h +3587 y(The)25 b(v)-5 b(alue)26 b(is)f(sp)s(eci\014ed)f(in)h (milliseconds,)j(so)d(a)h(v)-5 b(alue)26 b(of)f(1000)i(means)e(that) -1110 3180 y(Readline)e(will)g(w)m(ait)g(one)g(second)f(for)g +1110 3696 y(Readline)e(will)g(w)m(ait)g(one)g(second)f(for)g (additional)i(input.)37 b(If)22 b(this)g(v)-5 b(ariable)23 -b(is)1110 3289 y(set)28 b(to)h(a)f(v)-5 b(alue)29 b(less)f(than)g(or)f +b(is)1110 3806 y(set)28 b(to)h(a)f(v)-5 b(alue)29 b(less)f(than)g(or)f (equal)i(to)f(zero,)i(or)e(to)g(a)h(non-n)m(umeric)e(v)-5 -b(alue,)1110 3399 y(Readline)30 b(will)f(w)m(ait)i(un)m(til)e(another)h +b(alue,)1110 3915 y(Readline)30 b(will)f(w)m(ait)i(un)m(til)e(another)h (k)m(ey)g(is)f(pressed)g(to)h(decide)f(whic)m(h)g(k)m(ey)1110 -3508 y(sequence)i(to)g(complete.)42 b(The)30 b(default)g(v)-5 -b(alue)31 b(is)g Ft(500)p Fu(.)630 3665 y Ft(mark-directories)1110 -3774 y Fu(If)38 b(set)g(to)h(`)p Ft(on)p Fu(',)i(completed)e(directory) +4025 y(sequence)i(to)g(complete.)42 b(The)30 b(default)g(v)-5 +b(alue)31 b(is)g Ft(500)p Fu(.)630 4171 y Ft(mark-directories)1110 +4281 y Fu(If)38 b(set)g(to)h(`)p Ft(on)p Fu(',)i(completed)e(directory) f(names)g(ha)m(v)m(e)i(a)e(slash)g(app)s(ended.)1110 -3884 y(The)30 b(default)g(is)h(`)p Ft(on)p Fu('.)630 -4041 y Ft(mark-modified-lines)1110 4150 y Fu(This)k(v)-5 +4390 y(The)30 b(default)g(is)h(`)p Ft(on)p Fu('.)630 +4536 y Ft(mark-modified-lines)1110 4646 y Fu(This)k(v)-5 b(ariable,)38 b(when)d(set)h(to)h(`)p Ft(on)p Fu(',)g(causes)g -(Readline)f(to)h(displa)m(y)f(an)f(as-)1110 4260 y(terisk)f(\(`)p +(Readline)f(to)h(displa)m(y)f(an)f(as-)1110 4756 y(terisk)f(\(`)p Ft(*)p Fu('\))h(at)f(the)g(start)g(of)g(history)g(lines)g(whic)m(h)f -(ha)m(v)m(e)i(b)s(een)e(mo)s(di\014ed.)1110 4369 y(This)d(v)-5 +(ha)m(v)m(e)i(b)s(een)e(mo)s(di\014ed.)1110 4865 y(This)d(v)-5 b(ariable)31 b(is)f(`)p Ft(off)p Fu(')g(b)m(y)g(default.)630 -4526 y Ft(mark-symlinked-directori)o(es)1110 4635 y Fu(If)59 +5011 y Ft(mark-symlinked-directori)o(es)1110 5121 y Fu(If)59 b(set)h(to)g(`)p Ft(on)p Fu(',)67 b(completed)60 b(names)f(whic)m(h)g -(are)h(sym)m(b)s(olic)g(links)f(to)1110 4745 y(directories)71 +(are)h(sym)m(b)s(olic)g(links)f(to)1110 5230 y(directories)71 b(ha)m(v)m(e)f(a)g(slash)f(app)s(ended)f(\(sub)5 b(ject)70 -b(to)g(the)g(v)-5 b(alue)70 b(of)1110 4855 y Ft(mark-directories)p -Fu(\).)37 b(The)30 b(default)g(is)g(`)p Ft(off)p Fu('.)630 -5011 y Ft(match-hidden-files)1110 5121 y Fu(This)21 b(v)-5 -b(ariable,)25 b(when)d(set)g(to)h(`)p Ft(on)p Fu(',)h(causes)f -(Readline)g(to)g(matc)m(h)g(\014les)f(whose)1110 5230 -y(names)44 b(b)s(egin)g(with)g(a)g(`)p Ft(.)p Fu(')g(\(hidden)f -(\014les\))i(when)e(p)s(erforming)g(\014lename)1110 5340 -y(completion.)75 b(If)41 b(set)g(to)h(`)p Ft(off)p Fu(',)i(the)e -(leading)g(`)p Ft(.)p Fu(')f(m)m(ust)g(b)s(e)g(supplied)f(b)m(y)p +b(to)g(the)g(v)-5 b(alue)70 b(of)1110 5340 y Ft(mark-directories)p +Fu(\).)37 b(The)30 b(default)g(is)g(`)p Ft(off)p Fu('.)p eop end -%%Page: 126 132 -TeXDict begin 126 131 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(126)1110 299 y(the)34 -b(user)g(in)g(the)g(\014lename)g(to)h(b)s(e)f(completed.)53 -b(This)33 b(v)-5 b(ariable)35 b(is)f(`)p Ft(on)p Fu(')g(b)m(y)1110 -408 y(default.)630 587 y Ft(menu-complete-display-pr)o(efix)1110 -696 y Fu(If)f(set)h(to)g(`)p Ft(on)p Fu(',)h(men)m(u)e(completion)i +%%Page: 131 137 +TeXDict begin 131 136 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(131)630 299 y Ft +(match-hidden-files)1110 408 y Fu(This)24 b(v)-5 b(ariable,)26 +b(when)e(set)h(to)g(`)p Ft(on)p Fu(',)g(forces)g(Readline)g(to)g(matc)m +(h)h(\014les)e(whose)1110 518 y(names)44 b(b)s(egin)g(with)g(a)g(`)p +Ft(.)p Fu(')g(\(hidden)f(\014les\))i(when)e(p)s(erforming)g(\014lename) +1110 628 y(completion.)f(If)28 b(set)i(to)g(`)p Ft(off)p +Fu(',)f(the)g(user)f(m)m(ust)h(include)g(the)g(leading)h(`)p +Ft(.)p Fu(')f(in)1110 737 y(the)i(\014lename)f(to)h(b)s(e)f(completed.) +42 b(This)29 b(v)-5 b(ariable)31 b(is)g(`)p Ft(on)p Fu(')f(b)m(y)g +(default.)630 888 y Ft(menu-complete-display-pr)o(efix)1110 +998 y Fu(If)j(set)h(to)g(`)p Ft(on)p Fu(',)h(men)m(u)e(completion)i (displa)m(ys)e(the)h(common)g(pre\014x)e(of)i(the)1110 -806 y(list)k(of)g(p)s(ossible)f(completions)i(\(whic)m(h)e(ma)m(y)h(b)s -(e)f(empt)m(y\))i(b)s(efore)e(cycling)1110 915 y(through)30 +1107 y(list)k(of)g(p)s(ossible)f(completions)i(\(whic)m(h)e(ma)m(y)h(b) +s(e)f(empt)m(y\))i(b)s(efore)e(cycling)1110 1217 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p Ft(off)p -Fu('.)630 1093 y Ft(output-meta)1110 1203 y Fu(If)35 +Fu('.)630 1367 y Ft(output-meta)1110 1477 y Fu(If)35 b(set)h(to)g(`)p Ft(on)p Fu(',)h(Readline)f(will)g(displa)m(y)f(c)m -(haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 1313 y(set)h(directly)g +(haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 1587 y(set)h(directly)g (rather)f(than)g(as)h(a)g(meta-pre\014xed)f(escap)s(e)h(sequence.)59 -b(The)1110 1422 y(default)26 b(is)f(`)p Ft(off)p Fu(',)i(but)e +b(The)1110 1696 y(default)26 b(is)f(`)p Ft(off)p Fu(',)i(but)e (Readline)h(will)g(set)g(it)g(to)h(`)p Ft(on)p Fu(')e(if)h(the)f(lo)s -(cale)j(con)m(tains)1110 1532 y(eigh)m(t-bit)38 b(c)m(haracters.)61 +(cale)j(con)m(tains)1110 1806 y(eigh)m(t-bit)38 b(c)m(haracters.)61 b(This)36 b(v)-5 b(ariable)37 b(is)g(dep)s(enden)m(t)e(on)h(the)h -Ft(LC_CTYPE)1110 1641 y Fu(lo)s(cale)32 b(category)-8 +Ft(LC_CTYPE)1110 1915 y Fu(lo)s(cale)32 b(category)-8 b(,)33 b(and)d(ma)m(y)h(c)m(hange)g(if)g(the)f(lo)s(cale)i(is)f(c)m -(hanged.)630 1819 y Ft(page-completions)1110 1929 y Fu(If)i(set)i(to)f +(hanged.)630 2066 y Ft(page-completions)1110 2176 y Fu(If)i(set)i(to)f (`)p Ft(on)p Fu(',)h(Readline)g(uses)e(an)h(in)m(ternal)h Ft(more)p Fu(-lik)m(e)f(pager)g(to)h(displa)m(y)1110 -2039 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g(time.) +2285 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g(time.) 47 b(This)31 b(v)-5 b(ariable)34 b(is)e(`)p Ft(on)p Fu(')1110 -2148 y(b)m(y)e(default.)630 2326 y Ft(print-completions-horizo)o(ntal)o -(ly)1110 2436 y Fu(If)23 b(set)i(to)g(`)p Ft(on)p Fu(',)g(Readline)g +2395 y(b)m(y)e(default.)630 2545 y Ft(print-completions-horizo)o(ntal)o +(ly)1110 2655 y Fu(If)23 b(set)i(to)g(`)p Ft(on)p Fu(',)g(Readline)g (will)f(displa)m(y)g(completions)h(with)f(matc)m(hes)h(sorted)1110 -2545 y(horizon)m(tally)45 b(in)e(alphab)s(etical)i(order,)i(rather)c -(than)g(do)m(wn)g(the)h(screen.)1110 2655 y(The)30 b(default)g(is)h(`)p -Ft(off)p Fu('.)630 2833 y Ft(revert-all-at-newline)1110 -2943 y Fu(If)e(set)h(to)g(`)p Ft(on)p Fu(',)g(Readline)g(will)g(undo)f +2765 y(horizon)m(tally)45 b(in)e(alphab)s(etical)i(order,)i(rather)c +(than)g(do)m(wn)g(the)h(screen.)1110 2874 y(The)30 b(default)g(is)h(`)p +Ft(off)p Fu('.)630 3025 y Ft(revert-all-at-newline)1110 +3134 y Fu(If)e(set)h(to)g(`)p Ft(on)p Fu(',)g(Readline)g(will)g(undo)f (all)h(c)m(hanges)h(to)f(history)g(lines)f(b)s(efore)1110 -3052 y(returning)f(when)f Ft(accept-line)f Fu(is)j(executed.)41 -b(By)29 b(default,)g(history)g(lines)1110 3162 y(ma)m(y)42 +3244 y(returning)f(when)f Ft(accept-line)f Fu(is)j(executed.)41 +b(By)29 b(default,)g(history)g(lines)1110 3354 y(ma)m(y)42 b(b)s(e)g(mo)s(di\014ed)e(and)h(retain)i(individual)e(undo)g(lists)h -(across)g(calls)h(to)1110 3271 y Ft(readline\(\))p Fu(.)38 -b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)630 3450 -y Ft(show-all-if-ambiguous)1110 3559 y Fu(This)e(alters)i(the)f +(across)g(calls)h(to)1110 3463 y Ft(readline\(\))p Fu(.)38 +b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)630 3614 +y Ft(search-ignore-case)1110 3724 y Fu(If)j(set)g(to)h(`)p +Ft(on)p Fu(',)h(Readline)e(p)s(erforms)f(incremen)m(tal)i(and)f +(non-incremen)m(tal)1110 3833 y(history)27 b(list)g(searc)m(hes)h(in)f +(a)g(case-insensitiv)m(e)j(fashion.)39 b(The)26 b(default)h(v)-5 +b(alue)1110 3943 y(is)30 b(`)p Ft(off)p Fu('.)630 4093 +y Ft(show-all-if-ambiguous)1110 4203 y Fu(This)f(alters)i(the)f (default)g(b)s(eha)m(vior)g(of)g(the)h(completion)g(functions.)40 -b(If)29 b(set)1110 3669 y(to)f(`)p Ft(on)p Fu(',)g(w)m(ords)f(whic)m(h) +b(If)29 b(set)1110 4313 y(to)f(`)p Ft(on)p Fu(',)g(w)m(ords)f(whic)m(h) g(ha)m(v)m(e)i(more)f(than)f(one)h(p)s(ossible)f(completion)h(cause) -1110 3778 y(the)39 b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i -(instead)e(of)g(ringing)g(the)g(b)s(ell.)1110 3888 y(The)30 +1110 4422 y(the)39 b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i +(instead)e(of)g(ringing)g(the)g(b)s(ell.)1110 4532 y(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Ft(off)p Fu('.)630 -4066 y Ft(show-all-if-unmodified)1110 4176 y Fu(This)38 +4682 y Ft(show-all-if-unmodified)1110 4792 y Fu(This)38 b(alters)h(the)g(default)g(b)s(eha)m(vior)g(of)f(the)h(completion)h -(functions)e(in)h(a)1110 4285 y(fashion)25 b(similar)h(to)g +(functions)e(in)h(a)1110 4902 y(fashion)25 b(similar)h(to)g Fr(sho)m(w-all-if-am)m(biguous)p Fu(.)41 b(If)25 b(set)h(to)h(`)p -Ft(on)p Fu(',)f(w)m(ords)f(whic)m(h)1110 4395 y(ha)m(v)m(e)32 +Ft(on)p Fu(',)f(w)m(ords)f(whic)m(h)1110 5011 y(ha)m(v)m(e)32 b(more)f(than)f(one)i(p)s(ossible)e(completion)i(without)f(an)m(y)g(p)s -(ossible)f(par-)1110 4504 y(tial)43 b(completion)h(\(the)f(p)s(ossible) -f(completions)h(don't)f(share)g(a)h(common)1110 4614 +(ossible)f(par-)1110 5121 y(tial)43 b(completion)h(\(the)f(p)s(ossible) +f(completions)h(don't)f(share)g(a)h(common)1110 5230 y(pre\014x\))30 b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)g -(immediately)i(instead)e(of)h(ring-)1110 4724 y(ing)g(the)f(b)s(ell.)41 +(immediately)i(instead)e(of)h(ring-)1110 5340 y(ing)g(the)f(b)s(ell.)41 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Ft(off)p -Fu('.)630 4902 y Ft(show-mode-in-prompt)1110 5011 y Fu(If)24 -b(set)h(to)g(`)p Ft(on)p Fu(',)g(add)f(a)h(string)f(to)h(the)f(b)s -(eginning)g(of)g(the)h(prompt)e(indicating)1110 5121 -y(the)33 b(editing)h(mo)s(de:)46 b(emacs,)35 b(vi)e(command,)h(or)f(vi) -h(insertion.)49 b(The)32 b(mo)s(de)1110 5230 y(strings)45 -b(are)h(user-settable)g(\(e.g.,)51 b Fr(emacs-mo)s(de-string)8 -b Fu(\).)87 b(The)45 b(default)1110 5340 y(v)-5 b(alue)31 -b(is)f(`)p Ft(off)p Fu('.)p eop end -%%Page: 127 133 -TeXDict begin 127 132 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(127)630 299 y Ft -(skip-completed-text)1110 408 y Fu(If)32 b(set)i(to)f(`)p -Ft(on)p Fu(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s(eha)m -(vior)f(when)f(in-)1110 518 y(serting)d(a)h(single)g(matc)m(h)f(in)m +Fu('.)p eop end +%%Page: 132 138 +TeXDict begin 132 137 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(132)630 299 y Ft +(show-mode-in-prompt)1110 408 y Fu(If)24 b(set)h(to)g(`)p +Ft(on)p Fu(',)g(add)f(a)h(string)f(to)h(the)f(b)s(eginning)g(of)g(the)h +(prompt)e(indicating)1110 518 y(the)33 b(editing)h(mo)s(de:)46 +b(emacs,)35 b(vi)e(command,)h(or)f(vi)h(insertion.)49 +b(The)32 b(mo)s(de)1110 628 y(strings)45 b(are)h(user-settable)g +(\(e.g.,)51 b Fr(emacs-mo)s(de-string)8 b Fu(\).)87 b(The)45 +b(default)1110 737 y(v)-5 b(alue)31 b(is)f(`)p Ft(off)p +Fu('.)630 887 y Ft(skip-completed-text)1110 996 y Fu(If)i(set)i(to)f(`) +p Ft(on)p Fu(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s(eha) +m(vior)f(when)f(in-)1110 1106 y(serting)d(a)h(single)g(matc)m(h)f(in)m (to)h(the)g(line.)40 b(It's)30 b(only)f(activ)m(e)i(when)d(p)s(erform-) -1110 628 y(ing)k(completion)i(in)e(the)g(middle)g(of)g(a)h(w)m(ord.)46 -b(If)32 b(enabled,)g(Readline)h(do)s(es)1110 737 y(not)41 +1110 1215 y(ing)k(completion)i(in)e(the)g(middle)g(of)g(a)h(w)m(ord.)46 +b(If)32 b(enabled,)g(Readline)h(do)s(es)1110 1325 y(not)41 b(insert)f(c)m(haracters)i(from)e(the)h(completion)h(that)f(matc)m(h)g -(c)m(haracters)1110 847 y(after)c(p)s(oin)m(t)g(in)g(the)g(w)m(ord)f(b) -s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g(w)m(ord)1110 -956 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g(duplicated.)45 +(c)m(haracters)1110 1435 y(after)c(p)s(oin)m(t)g(in)g(the)g(w)m(ord)f +(b)s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g(w)m(ord)1110 +1544 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g(duplicated.)45 b(F)-8 b(or)32 b(instance,)h(if)f(this)f(is)h(en-)1110 -1066 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g -(after)h(the)g(`)p Ft(e)p Fu(')f(in)1110 1176 y(`)p Ft(Makefile)p +1654 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g +(after)h(the)g(`)p Ft(e)p Fu(')f(in)1110 1763 y(`)p Ft(Makefile)p Fu(')c(will)i(result)f(in)g(`)p Ft(Makefile)p Fu(')f(rather)h(than)h(`) -p Ft(Makefilefile)p Fu(',)1110 1285 y(assuming)d(there)g(is)h(a)f +p Ft(Makefilefile)p Fu(',)1110 1873 y(assuming)d(there)g(is)h(a)f (single)h(p)s(ossible)f(completion.)56 b(The)35 b(default)g(v)-5 -b(alue)1110 1395 y(is)30 b(`)p Ft(off)p Fu('.)630 1548 -y Ft(vi-cmd-mode-string)1110 1658 y Fu(If)j(the)h Fr(sho)m(w-mo)s +b(alue)1110 1983 y(is)30 b(`)p Ft(off)p Fu('.)630 2132 +y Ft(vi-cmd-mode-string)1110 2242 y Fu(If)j(the)h Fr(sho)m(w-mo)s (de-in-prompt)h Fu(v)-5 b(ariable)35 b(is)e(enabled,)i(this)f(string)f -(is)h(dis-)1110 1767 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the) +(is)h(dis-)1110 2351 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the) g(last)h(line)f(of)h(the)f(primary)f(prompt)g(when)1110 -1877 y(vi)32 b(editing)h(mo)s(de)f(is)g(activ)m(e)j(and)c(in)h(command) +2461 y(vi)32 b(editing)h(mo)s(de)f(is)g(activ)m(e)j(and)c(in)h(command) g(mo)s(de.)46 b(The)31 b(v)-5 b(alue)33 b(is)f(ex-)1110 -1987 y(panded)26 b(lik)m(e)i(a)f(k)m(ey)h(binding,)e(so)i(the)f +2570 y(panded)26 b(lik)m(e)i(a)f(k)m(ey)h(binding,)e(so)i(the)f (standard)f(set)h(of)g(meta-)h(and)e(con)m(trol)1110 -2096 y(pre\014xes)34 b(and)g(bac)m(kslash)i(escap)s(e)g(sequences)f(is) +2680 y(pre\014xes)34 b(and)g(bac)m(kslash)i(escap)s(e)g(sequences)f(is) g(a)m(v)-5 b(ailable.)57 b(Use)35 b(the)g(`)p Ft(\\1)p -Fu(')1110 2206 y(and)23 b(`)p Ft(\\2)p Fu(')h(escap)s(es)h(to)f(b)s +Fu(')1110 2790 y(and)23 b(`)p Ft(\\2)p Fu(')h(escap)s(es)h(to)f(b)s (egin)g(and)f(end)g(sequences)i(of)f(non-prin)m(ting)f(c)m(harac-)1110 -2315 y(ters,)31 b(whic)m(h)g(can)g(b)s(e)f(used)g(to)h(em)m(b)s(ed)f(a) -h(terminal)h(con)m(trol)g(sequence)f(in)m(to)1110 2425 +2899 y(ters,)31 b(whic)m(h)g(can)g(b)s(e)f(used)g(to)h(em)m(b)s(ed)f(a) +h(terminal)h(con)m(trol)g(sequence)f(in)m(to)1110 3009 y(the)g(mo)s(de)f(string.)40 b(The)30 b(default)h(is)f(`)p -Ft(\(cmd\))p Fu('.)630 2578 y Ft(vi-ins-mode-string)1110 -2688 y Fu(If)j(the)h Fr(sho)m(w-mo)s(de-in-prompt)h Fu(v)-5 +Ft(\(cmd\))p Fu('.)630 3158 y Ft(vi-ins-mode-string)1110 +3268 y Fu(If)j(the)h Fr(sho)m(w-mo)s(de-in-prompt)h Fu(v)-5 b(ariable)35 b(is)e(enabled,)i(this)f(string)f(is)h(dis-)1110 -2798 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the)g(last)h(line)f -(of)h(the)f(primary)f(prompt)g(when)1110 2907 y(vi)35 +3377 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the)g(last)h(line)f +(of)h(the)f(primary)f(prompt)g(when)1110 3487 y(vi)35 b(editing)h(mo)s(de)e(is)i(activ)m(e)h(and)d(in)h(insertion)g(mo)s(de.) -54 b(The)35 b(v)-5 b(alue)35 b(is)g(ex-)1110 3017 y(panded)26 +54 b(The)35 b(v)-5 b(alue)35 b(is)g(ex-)1110 3597 y(panded)26 b(lik)m(e)i(a)f(k)m(ey)h(binding,)e(so)i(the)f(standard)f(set)h(of)g -(meta-)h(and)e(con)m(trol)1110 3126 y(pre\014xes)34 b(and)g(bac)m +(meta-)h(and)e(con)m(trol)1110 3706 y(pre\014xes)34 b(and)g(bac)m (kslash)i(escap)s(e)g(sequences)f(is)g(a)m(v)-5 b(ailable.)57 -b(Use)35 b(the)g(`)p Ft(\\1)p Fu(')1110 3236 y(and)23 +b(Use)35 b(the)g(`)p Ft(\\1)p Fu(')1110 3816 y(and)23 b(`)p Ft(\\2)p Fu(')h(escap)s(es)h(to)f(b)s(egin)g(and)f(end)g -(sequences)i(of)f(non-prin)m(ting)f(c)m(harac-)1110 3345 +(sequences)i(of)f(non-prin)m(ting)f(c)m(harac-)1110 3925 y(ters,)31 b(whic)m(h)g(can)g(b)s(e)f(used)g(to)h(em)m(b)s(ed)f(a)h -(terminal)h(con)m(trol)g(sequence)f(in)m(to)1110 3455 +(terminal)h(con)m(trol)g(sequence)f(in)m(to)1110 4035 y(the)g(mo)s(de)f(string.)40 b(The)30 b(default)h(is)f(`)p -Ft(\(ins\))p Fu('.)630 3608 y Ft(visible-stats)1110 3718 +Ft(\(ins\))p Fu('.)630 4184 y Ft(visible-stats)1110 4294 y Fu(If)h(set)i(to)f(`)p Ft(on)p Fu(',)h(a)f(c)m(haracter)i(denoting)e (a)g(\014le's)g(t)m(yp)s(e)g(is)g(app)s(ended)e(to)j(the)1110 -3828 y(\014lename)e(when)e(listing)i(p)s(ossible)f(completions.)42 -b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)150 3981 -y(Key)f(Bindings)630 4091 y(The)41 b(syn)m(tax)i(for)f(con)m(trolling)h +4403 y(\014lename)e(when)e(listing)i(p)s(ossible)f(completions.)42 +b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)150 4553 +y(Key)f(Bindings)630 4663 y(The)41 b(syn)m(tax)i(for)f(con)m(trolling)h (k)m(ey)g(bindings)e(in)h(the)g(init)g(\014le)g(is)g(simple.)75 -b(First)43 b(y)m(ou)630 4200 y(need)27 b(to)i(\014nd)d(the)i(name)f(of) +b(First)43 b(y)m(ou)630 4772 y(need)27 b(to)i(\014nd)d(the)i(name)f(of) h(the)g(command)f(that)i(y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41 -b(The)27 b(follo)m(wing)630 4310 y(sections)37 b(con)m(tain)g(tables)g +b(The)27 b(follo)m(wing)630 4882 y(sections)37 b(con)m(tain)g(tables)g (of)f(the)g(command)f(name,)j(the)e(default)g(k)m(eybinding,)h(if)f(an) -m(y)-8 b(,)630 4419 y(and)30 b(a)h(short)f(description)g(of)h(what)f -(the)g(command)h(do)s(es.)630 4551 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g +m(y)-8 b(,)630 4991 y(and)30 b(a)h(short)f(description)g(of)h(what)f +(the)g(command)h(do)s(es.)630 5121 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g (name)g(of)g(the)g(command,)h(simply)f(place)h(on)e(a)i(line)f(in)g -(the)g(init)630 4661 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m +(the)g(init)630 5230 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m (ou)g(wish)f(to)h(bind)f(the)h(command)f(to,)i(a)f(colon,)i(and)d(then) -630 4770 y(the)f(name)h(of)f(the)g(command.)46 b(There)32 +630 5340 y(the)f(name)h(of)f(the)g(command.)46 b(There)32 b(can)g(b)s(e)g(no)g(space)g(b)s(et)m(w)m(een)h(the)f(k)m(ey)h(name)g -(and)630 4880 y(the)41 b(colon)h({)f(that)g(will)g(b)s(e)g(in)m -(terpreted)g(as)g(part)f(of)h(the)g(k)m(ey)h(name.)72 -b(The)40 b(name)h(of)630 4989 y(the)35 b(k)m(ey)g(can)g(b)s(e)f -(expressed)f(in)i(di\013eren)m(t)g(w)m(a)m(ys,)h(dep)s(ending)d(on)h -(what)h(y)m(ou)g(\014nd)e(most)630 5099 y(comfortable.)630 -5230 y(In)g(addition)h(to)g(command)g(names,)g(Readline)g(allo)m(ws)h -(k)m(eys)g(to)f(b)s(e)f(b)s(ound)f(to)i(a)g(string)630 -5340 y(that)d(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f(pressed)g(\(a) -h Fr(macro)5 b Fu(\).)p eop end -%%Page: 128 134 -TeXDict begin 128 133 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(128)630 299 y(The)42 +(and)p eop end +%%Page: 133 139 +TeXDict begin 133 138 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(133)630 299 y(the)41 +b(colon)h({)f(that)g(will)g(b)s(e)g(in)m(terpreted)g(as)g(part)f(of)h +(the)g(k)m(ey)h(name.)72 b(The)40 b(name)h(of)630 408 +y(the)35 b(k)m(ey)g(can)g(b)s(e)f(expressed)f(in)i(di\013eren)m(t)g(w)m +(a)m(ys,)h(dep)s(ending)d(on)h(what)h(y)m(ou)g(\014nd)e(most)630 +518 y(comfortable.)630 650 y(In)g(addition)h(to)g(command)g(names,)g +(Readline)g(allo)m(ws)h(k)m(eys)g(to)f(b)s(e)f(b)s(ound)f(to)i(a)g +(string)630 759 y(that)d(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f +(pressed)g(\(a)h Fr(macro)5 b Fu(\).)630 891 y(The)42 b Ft(bind)30 b(-p)42 b Fu(command)h(displa)m(ys)g(Readline)g(function)g -(names)g(and)f(bindings)g(in)h(a)630 408 y(format)28 +(names)g(and)f(bindings)g(in)h(a)630 1000 y(format)28 b(that)h(can)f(b)s(e)f(put)g(directly)i(in)m(to)f(an)g(initialization)j -(\014le.)40 b(See)28 b(Section)h(4.2)g([Bash)630 518 -y(Builtins],)i(page)g(55.)630 673 y Fr(k)m(eyname)5 b -Fu(:)42 b Fr(function-name)35 b Fu(or)c Fr(macro)1110 -783 y(k)m(eyname)k Fu(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s +(\014le.)40 b(See)28 b(Section)h(4.2)g([Bash)630 1110 +y(Builtins],)i(page)g(57.)630 1263 y Fr(k)m(eyname)5 +b Fu(:)42 b Fr(function-name)35 b Fu(or)c Fr(macro)1110 +1373 y(k)m(eyname)k Fu(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s (elled)e(out)h(in)g(English.)39 b(F)-8 b(or)30 b(example:)1350 -915 y Ft(Control-u:)45 b(universal-argument)1350 1024 -y(Meta-Rubout:)f(backward-kill-word)1350 1134 y(Control-o:)h(">)i -(output")1110 1266 y Fu(In)94 b(the)g(example)h(ab)s(o)m(v)m(e,)112 +1504 y Ft(Control-u:)45 b(universal-argument)1350 1614 +y(Meta-Rubout:)f(backward-kill-word)1350 1724 y(Control-o:)h(">)i +(output")1110 1855 y Fu(In)94 b(the)g(example)h(ab)s(o)m(v)m(e,)112 b Fj(C-u)94 b Fu(is)g(b)s(ound)f(to)i(the)f(function)1110 -1376 y Ft(universal-argument)p Fu(,)124 b Fj(M-DEL)107 -b Fu(is)i(b)s(ound)e(to)j(the)f(function)1110 1485 y +1965 y Ft(universal-argument)p Fu(,)124 b Fj(M-DEL)107 +b Fu(is)i(b)s(ound)e(to)j(the)f(function)1110 2074 y Ft(backward-kill-word)p Fu(,)75 b(and)69 b Fj(C-o)g Fu(is)h(b)s(ound)e -(to)j(run)d(the)i(macro)1110 1595 y(expressed)45 b(on)h(the)g(righ)m(t) +(to)j(run)d(the)i(macro)1110 2184 y(expressed)45 b(on)h(the)g(righ)m(t) g(hand)e(side)i(\(that)h(is,)i(to)e(insert)e(the)h(text)h(`)p -Ft(>)1110 1705 y(output)p Fu(')29 b(in)m(to)i(the)g(line\).)1110 -1837 y(A)62 b(n)m(um)m(b)s(er)e(of)i(sym)m(b)s(olic)h(c)m(haracter)g -(names)f(are)g(recognized)h(while)1110 1946 y(pro)s(cessing)40 +Ft(>)1110 2293 y(output)p Fu(')29 b(in)m(to)i(the)g(line\).)1110 +2425 y(A)62 b(n)m(um)m(b)s(er)e(of)i(sym)m(b)s(olic)h(c)m(haracter)g +(names)f(are)g(recognized)h(while)1110 2534 y(pro)s(cessing)40 b(this)f(k)m(ey)i(binding)e(syn)m(tax:)60 b Fr(DEL)p Fu(,)42 b Fr(ESC)p Fu(,)g Fr(ESCAPE)p Fu(,)f Fr(LFD)p -Fu(,)1110 2056 y Fr(NEWLINE)p Fu(,)31 b Fr(RET)p Fu(,)f +Fu(,)1110 2644 y Fr(NEWLINE)p Fu(,)31 b Fr(RET)p Fu(,)f Fr(RETURN)p Fu(,)g Fr(R)m(UBOUT)p Fu(,)h Fr(SP)-8 b(A)m(CE)p Fu(,)31 b Fr(SPC)p Fu(,)e(and)h Fr(T)-8 b(AB)p Fu(.)630 -2211 y Ft(")p Fr(k)m(eyseq)r Ft(")p Fu(:)41 b Fr(function-name)36 -b Fu(or)30 b Fr(macro)1110 2321 y(k)m(eyseq)k Fu(di\013ers)d(from)f +2798 y Ft(")p Fr(k)m(eyseq)r Ft(")p Fu(:)41 b Fr(function-name)36 +b Fu(or)30 b Fr(macro)1110 2907 y(k)m(eyseq)k Fu(di\013ers)d(from)f Fr(k)m(eyname)37 b Fu(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f -(denoting)g(an)g(en-)1110 2430 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s +(denoting)g(an)g(en-)1110 3017 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s (e)f(sp)s(eci\014ed,)h(b)m(y)f(placing)i(the)f(k)m(ey)g(sequence)g(in) -1110 2540 y(double)29 b(quotes.)41 b(Some)29 b Fm(gnu)h +1110 3126 y(double)29 b(quotes.)41 b(Some)29 b Fm(gnu)h Fu(Emacs)f(st)m(yle)i(k)m(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as) -1110 2649 y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s -(ecial)h(c)m(haracter)g(names)f(are)g(not)1110 2759 y(recognized.)1350 -2891 y Ft("\\C-u":)46 b(universal-argument)1350 3001 -y("\\C-x\\C-r":)f(re-read-init-file)1350 3110 y("\\e[11~":)g("Function) -h(Key)g(1")1110 3243 y Fu(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74 +1110 3236 y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s +(ecial)h(c)m(haracter)g(names)f(are)g(not)1110 3345 y(recognized.)1350 +3477 y Ft("\\C-u":)46 b(universal-argument)1350 3587 +y("\\C-x\\C-r":)f(re-read-init-file)1350 3696 y("\\e[11~":)g("Function) +h(Key)g(1")1110 3828 y Fu(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74 b Fj(C-u)64 b Fu(is)g(again)i(b)s(ound)c(to)k(the)e(function)1110 -3352 y Ft(universal-argument)39 b Fu(\(just)k(as)h(it)g(w)m(as)g(in)g -(the)f(\014rst)g(example\),)49 b(`)p Fj(C-x)1110 3462 +3937 y Ft(universal-argument)39 b Fu(\(just)k(as)h(it)g(w)m(as)g(in)g +(the)f(\014rst)g(example\),)49 b(`)p Fj(C-x)1110 4047 y(C-r)p Fu(')30 b(is)g(b)s(ound)e(to)j(the)g(function)f Ft(re-read-init-file)p Fu(,)c(and)j(`)p Ft(ESC)h([)g(1)g(1)1110 -3571 y(~)p Fu(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p -Ft(Function)e(Key)g(1)p Fu('.)630 3726 y(The)g(follo)m(wing)i +4156 y(~)p Fu(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p +Ft(Function)e(Key)g(1)p Fu('.)630 4310 y(The)g(follo)m(wing)i Fm(gnu)f Fu(Emacs)g(st)m(yle)h(escap)s(e)f(sequences)g(are)g(a)m(v)-5 -b(ailable)32 b(when)d(sp)s(ecifying)630 3836 y(k)m(ey)i(sequences:)630 -3991 y Fj(\\C-)336 b Fu(con)m(trol)32 b(pre\014x)630 -4146 y Fj(\\M-)336 b Fu(meta)31 b(pre\014x)630 4301 y +b(ailable)32 b(when)d(sp)s(ecifying)630 4419 y(k)m(ey)i(sequences:)630 +4573 y Fj(\\C-)336 b Fu(con)m(trol)32 b(pre\014x)630 +4726 y Fj(\\M-)336 b Fu(meta)31 b(pre\014x)630 4880 y Fj(\\e)384 b Fu(an)30 b(escap)s(e)h(c)m(haracter)630 -4456 y Fj(\\\\)384 b Fu(bac)m(kslash)630 4611 y Fj(\\)p +5033 y Fj(\\\\)384 b Fu(bac)m(kslash)630 5187 y Fj(\\)p Ft(")g(")p Fu(,)30 b(a)h(double)f(quotation)i(mark)630 -4766 y Fj(\\')384 b Ft(')p Fu(,)30 b(a)h(single)g(quote)g(or)f(ap)s -(ostrophe)630 4921 y(In)d(addition)h(to)g(the)g Fm(gnu)f -Fu(Emacs)h(st)m(yle)h(escap)s(e)f(sequences,)h(a)f(second)f(set)h(of)g -(bac)m(kslash)630 5030 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 -5185 y Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630 5340 -y Ft(\\b)384 b Fu(bac)m(kspace)p eop end -%%Page: 129 135 -TeXDict begin 129 134 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(129)630 299 y Ft(\\d)384 -b Fu(delete)630 460 y Ft(\\f)g Fu(form)30 b(feed)630 -620 y Ft(\\n)384 b Fu(newline)630 781 y Ft(\\r)g Fu(carriage)32 -b(return)630 941 y Ft(\\t)384 b Fu(horizon)m(tal)32 b(tab)630 -1102 y Ft(\\v)384 b Fu(v)m(ertical)32 b(tab)630 1263 -y Ft(\\)p Fj(nnn)288 b Fu(the)35 b(eigh)m(t-bit)h(c)m(haracter)g(whose) -e(v)-5 b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 b(alue)35 -b Fr(nnn)e Fu(\(one)i(to)1110 1372 y(three)c(digits\))630 -1533 y Ft(\\x)p Fj(HH)288 b Fu(the)38 b(eigh)m(t-bit)i(c)m(haracter)g -(whose)e(v)-5 b(alue)39 b(is)f(the)h(hexadecimal)g(v)-5 -b(alue)39 b Fr(HH)1110 1643 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e -(digits\))630 1803 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g -(macro,)i(single)e(or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to) -630 1913 y(indicate)23 b(a)e(macro)h(de\014nition.)38 -b(Unquoted)21 b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f -(name.)38 b(In)630 2022 y(the)22 b(macro)f(b)s(o)s(dy)-8 -b(,)23 b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m -(e)j(are)e(expanded.)37 b(Bac)m(kslash)630 2132 y(will)j(quote)h(an)m -(y)f(other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k(including)39 +5340 y Fj(\\')384 b Ft(')p Fu(,)30 b(a)h(single)g(quote)g(or)f(ap)s +(ostrophe)p eop end +%%Page: 134 140 +TeXDict begin 134 139 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(134)630 299 y(In)27 +b(addition)h(to)g(the)g Fm(gnu)f Fu(Emacs)h(st)m(yle)h(escap)s(e)f +(sequences,)h(a)f(second)f(set)h(of)g(bac)m(kslash)630 +408 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 570 y +Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630 731 y Ft(\\b)384 +b Fu(bac)m(kspace)630 892 y Ft(\\d)g Fu(delete)630 1053 +y Ft(\\f)g Fu(form)30 b(feed)630 1214 y Ft(\\n)384 b +Fu(newline)630 1375 y Ft(\\r)g Fu(carriage)32 b(return)630 +1536 y Ft(\\t)384 b Fu(horizon)m(tal)32 b(tab)630 1697 +y Ft(\\v)384 b Fu(v)m(ertical)32 b(tab)630 1858 y Ft(\\)p +Fj(nnn)288 b Fu(the)35 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e(v)-5 +b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 b(alue)35 b Fr(nnn)e +Fu(\(one)i(to)1110 1968 y(three)c(digits\))630 2129 y +Ft(\\x)p Fj(HH)288 b Fu(the)38 b(eigh)m(t-bit)i(c)m(haracter)g(whose)e +(v)-5 b(alue)39 b(is)f(the)h(hexadecimal)g(v)-5 b(alue)39 +b Fr(HH)1110 2239 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630 +2400 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g(macro,)i(single)e +(or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to)630 +2509 y(indicate)23 b(a)e(macro)h(de\014nition.)38 b(Unquoted)21 +b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f(name.)38 +b(In)630 2619 y(the)22 b(macro)f(b)s(o)s(dy)-8 b(,)23 +b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m(e)j +(are)e(expanded.)37 b(Bac)m(kslash)630 2729 y(will)j(quote)h(an)m(y)f +(other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k(including)39 b(`)p Ft(")p Fu(')h(and)g(`)p Ft(')p Fu('.)69 b(F)-8 -b(or)630 2242 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i +b(or)630 2838 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i (mak)m(e)h(`)p Fj(C-x)j Ft(\\)p Fu(')c(insert)f(a)h(single)h(`)p -Ft(\\)p Fu(')f(in)m(to)g(the)g(line:)870 2377 y Ft("\\C-x\\\\":)45 -b("\\\\")150 2577 y Fk(8.3.2)63 b(Conditional)41 b(Init)g(Constructs) -150 2724 y Fu(Readline)c(implemen)m(ts)g(a)h(facilit)m(y)g(similar)f +Ft(\\)p Fu(')f(in)m(to)g(the)g(line:)870 2974 y Ft("\\C-x\\\\":)45 +b("\\\\")150 3175 y Fk(8.3.2)63 b(Conditional)41 b(Init)g(Constructs) +150 3322 y Fu(Readline)c(implemen)m(ts)g(a)h(facilit)m(y)g(similar)f (in)g(spirit)f(to)i(the)f(conditional)h(compilation)g(features)f(of)150 -2834 y(the)31 b(C)f(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)g +3431 y(the)31 b(C)f(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)g (bindings)d(and)h(v)-5 b(ariable)32 b(settings)f(to)h(b)s(e)e(p)s -(erformed)f(as)i(the)150 2943 y(result)f(of)h(tests.)41 +(erformed)f(as)i(the)150 3541 y(result)f(of)h(tests.)41 b(There)30 b(are)h(four)f(parser)f(directiv)m(es)j(used.)150 -3105 y Ft($if)336 b Fu(The)31 b Ft($if)f Fu(construct)i(allo)m(ws)h +3703 y Ft($if)336 b Fu(The)31 b Ft($if)f Fu(construct)i(allo)m(ws)h (bindings)d(to)i(b)s(e)e(made)i(based)f(on)g(the)g(editing)h(mo)s(de,)g -(the)630 3214 y(terminal)37 b(b)s(eing)f(used,)h(or)f(the)h +(the)630 3812 y(terminal)37 b(b)s(eing)f(used,)h(or)f(the)h (application)g(using)f(Readline.)59 b(The)36 b(text)h(of)f(the)h(test,) -630 3324 y(after)30 b(an)m(y)g(comparison)g(op)s(erator,)g(extends)f +630 3922 y(after)30 b(an)m(y)g(comparison)g(op)s(erator,)g(extends)f (to)h(the)g(end)f(of)h(the)f(line;)i(unless)e(otherwise)630 -3433 y(noted,)i(no)f(c)m(haracters)i(are)f(required)e(to)i(isolate)i -(it.)630 3594 y Ft(mode)288 b Fu(The)30 b Ft(mode=)e +4031 y(noted,)i(no)f(c)m(haracters)i(are)f(required)e(to)i(isolate)i +(it.)630 4193 y Ft(mode)288 b Fu(The)30 b Ft(mode=)e Fu(form)i(of)g(the)h Ft($if)e Fu(directiv)m(e)j(is)e(used)f(to)i(test)g -(whether)e(Read-)1110 3704 y(line)44 b(is)f(in)g Ft(emacs)f +(whether)e(Read-)1110 4302 y(line)44 b(is)f(in)g Ft(emacs)f Fu(or)h Ft(vi)g Fu(mo)s(de.)79 b(This)42 b(ma)m(y)i(b)s(e)e(used)h(in)g -(conjunction)1110 3813 y(with)c(the)h(`)p Ft(set)29 b(keymap)p +(conjunction)1110 4412 y(with)c(the)h(`)p Ft(set)29 b(keymap)p Fu(')38 b(command,)k(for)d(instance,)j(to)e(set)g(bindings)e(in)1110 -3923 y(the)32 b Ft(emacs-standard)c Fu(and)j Ft(emacs-ctlx)d -Fu(k)m(eymaps)k(only)g(if)g(Readline)g(is)1110 4032 y(starting)f(out)g -(in)f Ft(emacs)f Fu(mo)s(de.)630 4193 y Ft(term)288 b +4521 y(the)32 b Ft(emacs-standard)c Fu(and)j Ft(emacs-ctlx)d +Fu(k)m(eymaps)k(only)g(if)g(Readline)g(is)1110 4631 y(starting)f(out)g +(in)f Ft(emacs)f Fu(mo)s(de.)630 4792 y Ft(term)288 b Fu(The)26 b Ft(term=)g Fu(form)g(ma)m(y)i(b)s(e)e(used)g(to)i(include)f -(terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 4303 y(ings,)38 +(terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 4902 y(ings,)38 b(p)s(erhaps)c(to)j(bind)e(the)h(k)m(ey)h(sequences)f(output)g(b)m(y)g -(the)g(terminal's)1110 4412 y(function)24 b(k)m(eys.)39 +(the)g(terminal's)1110 5011 y(function)24 b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)f(side)g(of)g(the)g(`)p -Ft(=)p Fu(')g(is)g(tested)h(against)1110 4522 y(b)s(oth)k(the)h(full)g +Ft(=)p Fu(')g(is)g(tested)h(against)1110 5121 y(b)s(oth)k(the)h(full)g (name)g(of)g(the)g(terminal)h(and)e(the)i(p)s(ortion)e(of)h(the)g -(terminal)1110 4631 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p +(terminal)1110 5230 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p Ft(-)p Fu('.)50 b(This)33 b(allo)m(ws)i Ft(sun)e Fu(to)h(matc)m(h)g(b)s -(oth)f Ft(sun)g Fu(and)1110 4741 y Ft(sun-cmd)p Fu(,)c(for)h(instance.) -630 4902 y Ft(version)144 b Fu(The)44 b Ft(version)f -Fu(test)i(ma)m(y)h(b)s(e)e(used)f(to)j(p)s(erform)d(comparisons)i -(against)1110 5011 y(sp)s(eci\014c)c(Readline)i(v)m(ersions.)74 -b(The)42 b Ft(version)d Fu(expands)i(to)h(the)g(curren)m(t)1110 -5121 y(Readline)25 b(v)m(ersion.)39 b(The)23 b(set)h(of)g(comparison)h -(op)s(erators)f(includes)f(`)p Ft(=)p Fu(')h(\(and)1110 -5230 y(`)p Ft(==)p Fu('\),)33 b(`)p Ft(!=)p Fu(',)f(`)p -Ft(<=)p Fu(',)h(`)p Ft(>=)p Fu(',)f(`)p Ft(<)p Fu(',)h(and)e(`)p -Ft(>)p Fu('.)46 b(The)31 b(v)m(ersion)i(n)m(um)m(b)s(er)d(supplied)h -(on)1110 5340 y(the)j(righ)m(t)h(side)f(of)g(the)g(op)s(erator)g -(consists)h(of)f(a)g(ma)5 b(jor)35 b(v)m(ersion)f(n)m(um)m(b)s(er,)p -eop end -%%Page: 130 136 -TeXDict begin 130 135 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(130)1110 299 y(an)45 -b(optional)i(decimal)f(p)s(oin)m(t,)k(and)44 b(an)i(optional)g(minor)f -(v)m(ersion)h(\(e.g.,)1110 408 y(`)p Ft(7.1)p Fu('\).)40 -b(If)27 b(the)h(minor)f(v)m(ersion)h(is)g(omitted,)h(it)f(is)g(assumed) -f(to)h(b)s(e)f(`)p Ft(0)p Fu('.)40 b(The)1110 518 y(op)s(erator)34 -b(ma)m(y)g(b)s(e)f(separated)g(from)g(the)h(string)f -Ft(version)f Fu(and)h(from)g(the)1110 628 y(v)m(ersion)39 -b(n)m(um)m(b)s(er)f(argumen)m(t)h(b)m(y)f(whitespace.)67 -b(The)38 b(follo)m(wing)i(example)1110 737 y(sets)31 -b(a)g(v)-5 b(ariable)31 b(if)f(the)h(Readline)g(v)m(ersion)f(b)s(eing)g -(used)g(is)g(7.0)i(or)e(new)m(er:)1350 872 y Ft($if)47 -b(version)f(>=)h(7.0)1350 981 y(set)g(show-mode-in-prompt)42 -b(on)1350 1091 y($endif)630 1250 y(application)1110 1360 -y Fu(The)21 b Fr(application)j Fu(construct)e(is)g(used)f(to)i(include) -f(application-sp)s(eci\014c)h(set-)1110 1469 y(tings.)39 -b(Eac)m(h)26 b(program)e(using)g(the)h(Readline)g(library)g(sets)g(the) -g Fr(application)1110 1579 y(name)p Fu(,)g(and)e(y)m(ou)g(can)h(test)g -(for)f(a)g(particular)h(v)-5 b(alue.)39 b(This)22 b(could)h(b)s(e)g -(used)f(to)1110 1689 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e -(useful)g(for)h(a)g(sp)s(eci\014c)f(program.)48 b(F)-8 -b(or)1110 1798 y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f -(a)i(k)m(ey)f(sequence)h(that)f(quotes)1110 1908 y(the)e(curren)m(t)f -(or)g(previous)g(w)m(ord)g(in)g(Bash:)1350 2042 y Ft($if)47 -b(Bash)1350 2152 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word) -1350 2262 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 2371 y($endif)630 -2531 y(variable)96 b Fu(The)33 b Fr(v)-5 b(ariable)39 +(oth)f Ft(sun)g Fu(and)1110 5340 y Ft(sun-cmd)p Fu(,)c(for)h(instance.) +p eop end +%%Page: 135 141 +TeXDict begin 135 140 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(135)630 299 y Ft(version)144 +b Fu(The)44 b Ft(version)f Fu(test)i(ma)m(y)h(b)s(e)e(used)f(to)j(p)s +(erform)d(comparisons)i(against)1110 408 y(sp)s(eci\014c)c(Readline)i +(v)m(ersions.)74 b(The)42 b Ft(version)d Fu(expands)i(to)h(the)g +(curren)m(t)1110 518 y(Readline)25 b(v)m(ersion.)39 b(The)23 +b(set)h(of)g(comparison)h(op)s(erators)f(includes)f(`)p +Ft(=)p Fu(')h(\(and)1110 628 y(`)p Ft(==)p Fu('\),)33 +b(`)p Ft(!=)p Fu(',)f(`)p Ft(<=)p Fu(',)h(`)p Ft(>=)p +Fu(',)f(`)p Ft(<)p Fu(',)h(and)e(`)p Ft(>)p Fu('.)46 +b(The)31 b(v)m(ersion)i(n)m(um)m(b)s(er)d(supplied)h(on)1110 +737 y(the)j(righ)m(t)h(side)f(of)g(the)g(op)s(erator)g(consists)h(of)f +(a)g(ma)5 b(jor)35 b(v)m(ersion)f(n)m(um)m(b)s(er,)1110 +847 y(an)45 b(optional)i(decimal)f(p)s(oin)m(t,)k(and)44 +b(an)i(optional)g(minor)f(v)m(ersion)h(\(e.g.,)1110 956 +y(`)p Ft(7.1)p Fu('\).)40 b(If)27 b(the)h(minor)f(v)m(ersion)h(is)g +(omitted,)h(it)f(is)g(assumed)f(to)h(b)s(e)f(`)p Ft(0)p +Fu('.)40 b(The)1110 1066 y(op)s(erator)34 b(ma)m(y)g(b)s(e)f(separated) +g(from)g(the)h(string)f Ft(version)f Fu(and)h(from)g(the)1110 +1176 y(v)m(ersion)39 b(n)m(um)m(b)s(er)f(argumen)m(t)h(b)m(y)f +(whitespace.)67 b(The)38 b(follo)m(wing)i(example)1110 +1285 y(sets)31 b(a)g(v)-5 b(ariable)31 b(if)f(the)h(Readline)g(v)m +(ersion)f(b)s(eing)g(used)g(is)g(7.0)i(or)e(new)m(er:)1350 +1440 y Ft($if)47 b(version)f(>=)h(7.0)1350 1550 y(set)g +(show-mode-in-prompt)42 b(on)1350 1659 y($endif)630 1860 +y(application)1110 1970 y Fu(The)21 b Fr(application)j +Fu(construct)e(is)g(used)f(to)i(include)f(application-sp)s(eci\014c)h +(set-)1110 2079 y(tings.)39 b(Eac)m(h)26 b(program)e(using)g(the)h +(Readline)g(library)g(sets)g(the)g Fr(application)1110 +2189 y(name)p Fu(,)g(and)e(y)m(ou)g(can)h(test)g(for)f(a)g(particular)h +(v)-5 b(alue.)39 b(This)22 b(could)h(b)s(e)g(used)f(to)1110 +2298 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e(useful)g(for)h +(a)g(sp)s(eci\014c)f(program.)48 b(F)-8 b(or)1110 2408 +y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f(a)i(k)m(ey)f +(sequence)h(that)f(quotes)1110 2518 y(the)e(curren)m(t)f(or)g(previous) +g(w)m(ord)g(in)g(Bash:)1350 2673 y Ft($if)47 b(Bash)1350 +2782 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)1350 +2892 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 3002 y($endif)630 +3202 y(variable)96 b Fu(The)33 b Fr(v)-5 b(ariable)39 b Fu(construct)33 b(pro)m(vides)g(simple)g(equalit)m(y)i(tests)e(for)g -(Readline)1110 2640 y(v)-5 b(ariables)32 b(and)f(v)-5 +(Readline)1110 3312 y(v)-5 b(ariables)32 b(and)f(v)-5 b(alues.)45 b(The)32 b(p)s(ermitted)f(comparison)h(op)s(erators)f(are)i -(`)p Ft(=)p Fu(',)1110 2750 y(`)p Ft(==)p Fu(',)49 b(and)44 +(`)p Ft(=)p Fu(',)1110 3421 y(`)p Ft(==)p Fu(',)49 b(and)44 b(`)p Ft(!=)p Fu('.)85 b(The)44 b(v)-5 b(ariable)46 b(name)f(m)m(ust)g -(b)s(e)g(separated)g(from)g(the)1110 2859 y(comparison)25 +(b)s(e)g(separated)g(from)g(the)1110 3531 y(comparison)25 b(op)s(erator)g(b)m(y)g(whitespace;)j(the)d(op)s(erator)g(ma)m(y)g(b)s -(e)f(separated)1110 2969 y(from)33 b(the)h(v)-5 b(alue)35 +(e)f(separated)1110 3641 y(from)33 b(the)h(v)-5 b(alue)35 b(on)f(the)g(righ)m(t)g(hand)f(side)h(b)m(y)f(whitespace.)52 -b(Both)35 b(string)1110 3078 y(and)i(b)s(o)s(olean)g(v)-5 +b(Both)35 b(string)1110 3750 y(and)i(b)s(o)s(olean)g(v)-5 b(ariables)38 b(ma)m(y)h(b)s(e)d(tested.)63 b(Bo)s(olean)39 -b(v)-5 b(ariables)38 b(m)m(ust)g(b)s(e)1110 3188 y(tested)46 +b(v)-5 b(ariables)38 b(m)m(ust)g(b)s(e)1110 3860 y(tested)46 b(against)g(the)f(v)-5 b(alues)46 b Fr(on)f Fu(and)f Fr(o\013)p Fu(.)85 b(The)45 b(follo)m(wing)h(example)g(is)1110 -3298 y(equiv)-5 b(alen)m(t)32 b(to)f(the)f Ft(mode=emacs)e -Fu(test)j(describ)s(ed)f(ab)s(o)m(v)m(e:)1350 3432 y -Ft($if)47 b(editing-mode)d(==)k(emacs)1350 3542 y(set)f -(show-mode-in-prompt)42 b(on)1350 3651 y($endif)150 3811 +3969 y(equiv)-5 b(alen)m(t)32 b(to)f(the)f Ft(mode=emacs)e +Fu(test)j(describ)s(ed)f(ab)s(o)m(v)m(e:)1350 4124 y +Ft($if)47 b(editing-mode)d(==)k(emacs)1350 4234 y(set)f +(show-mode-in-prompt)42 b(on)1350 4344 y($endif)150 4544 y($endif)192 b Fu(This)29 b(command,)i(as)f(seen)h(in)f(the)g(previous) g(example,)h(terminates)g(an)g Ft($if)e Fu(command.)150 -3970 y Ft($else)240 b Fu(Commands)29 b(in)h(this)h(branc)m(h)e(of)i +4745 y Ft($else)240 b Fu(Commands)29 b(in)h(this)h(branc)m(h)e(of)i (the)f Ft($if)g Fu(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g -(fails.)150 4130 y Ft($include)96 b Fu(This)43 b(directiv)m(e)i(tak)m +(fails.)150 4945 y Ft($include)96 b Fu(This)43 b(directiv)m(e)i(tak)m (es)g(a)e(single)i(\014lename)e(as)h(an)f(argumen)m(t)h(and)f(reads)g -(commands)630 4239 y(and)38 b(bindings)f(from)h(that)i(\014le.)65 +(commands)630 5055 y(and)38 b(bindings)f(from)h(that)i(\014le.)65 b(F)-8 b(or)39 b(example,)j(the)d(follo)m(wing)h(directiv)m(e)g(reads)e -(from)630 4349 y Ft(/etc/inputrc)p Fu(:)870 4483 y Ft($include)46 -b(/etc/inputrc)150 4682 y Fk(8.3.3)63 b(Sample)41 b(Init)g(File)150 -4829 y Fu(Here)27 b(is)f(an)h(example)g(of)f(an)h Fr(inputrc)k -Fu(\014le.)39 b(This)26 b(illustrates)h(k)m(ey)h(binding,)e(v)-5 -b(ariable)27 b(assignmen)m(t,)i(and)150 4939 y(conditional)j(syn)m -(tax.)p eop end -%%Page: 131 137 -TeXDict begin 131 136 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(131)390 408 y Ft(#)47 +(from)630 5165 y Ft(/etc/inputrc)p Fu(:)870 5320 y Ft($include)46 +b(/etc/inputrc)p eop end +%%Page: 136 142 +TeXDict begin 136 141 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(136)150 299 y Fk(8.3.3)63 +b(Sample)41 b(Init)g(File)150 446 y Fu(Here)27 b(is)f(an)h(example)g +(of)f(an)h Fr(inputrc)k Fu(\014le.)39 b(This)26 b(illustrates)h(k)m(ey) +h(binding,)e(v)-5 b(ariable)27 b(assignmen)m(t,)i(and)150 +555 y(conditional)j(syn)m(tax.)p eop end +%%Page: 137 143 +TeXDict begin 137 142 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(137)390 408 y Ft(#)47 b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h (editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h (Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include) @@ -17762,9 +18237,9 @@ y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode)390 4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode) 390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390 5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end -%%Page: 132 138 -TeXDict begin 132 137 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(132)390 299 y Ft(#"\\M-\\C-[A":) +%%Page: 138 144 +TeXDict begin 138 143 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(138)390 299 y Ft(#"\\M-\\C-[A":) 331 b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390 628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066 y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the) @@ -17797,9 +18272,9 @@ y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h g(for)i(a)g(word,)390 5121 y(#)g(ask)g(whether)f(or)h(not)g(the)g(user) g(wants)f(to)h(see)g(all)g(of)g(them)390 5230 y(set)g (completion-query-items)42 b(150)p eop end -%%Page: 133 139 -TeXDict begin 133 138 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(133)390 299 y Ft(#)47 +%%Page: 139 145 +TeXDict begin 139 144 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(139)390 299 y Ft(#)47 b(For)g(FTP)390 408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390 628 y("\\C-xt":)g("put)g(\\M-?")390 737 y("\\M-.":)g(yank-last-arg)390 847 y($endif)150 1089 y Fs(8.4)68 b(Bindable)45 b(Readline)i(Commands) @@ -17809,7 +18284,7 @@ b(Y)-8 b(ou)33 b(can)150 1358 y(list)40 b(y)m(our)f(k)m(ey)i(bindings)d (b)m(y)h(executing)i Ft(bind)29 b(-P)39 b Fu(or,)j(for)d(a)h(more)g (terse)g(format,)i(suitable)e(for)f(an)150 1468 y Fr(inputrc)34 b Fu(\014le,)29 b Ft(bind)g(-p)p Fu(.)40 b(\(See)30 b(Section)f(4.2)h -([Bash)g(Builtins],)g(page)g(55.\))41 b(Command)28 b(names)h(without) +([Bash)g(Builtins],)g(page)g(57.\))41 b(Command)28 b(names)h(without) 150 1577 y(an)h(accompan)m(ying)i(k)m(ey)f(sequence)g(are)g(un)m(b)s (ound)d(b)m(y)i(default.)275 1713 y(In)25 b(the)h(follo)m(wing)i (descriptions,)f Fr(p)s(oin)m(t)h Fu(refers)e(to)h(the)f(curren)m(t)g @@ -17849,9 +18324,9 @@ b(screen)f(line.)39 b(This)24 b(will)i(not)f(ha)m(v)m(e)h(the)f (ysical)h(line)g(or)f(if)g(p)s(oin)m(t)h(is)f(not)h(greater)g(than)630 5340 y(the)j(length)f(of)h(the)f(prompt)g(plus)f(the)i(screen)f(width.) p eop end -%%Page: 134 140 -TeXDict begin 134 139 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(134)150 299 y Ft(next-screen-line) +%%Page: 140 146 +TeXDict begin 140 145 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(140)150 299 y Ft(next-screen-line) 26 b(\(\))630 408 y Fu(A)m(ttempt)g(to)f(mo)m(v)m(e)i(p)s(oin)m(t)d(to) i(the)e(same)i(ph)m(ysical)f(screen)g(column)f(on)h(the)f(next)h(ph)m (ysical)630 518 y(screen)e(line.)39 b(This)23 b(will)g(not)h(ha)m(v)m @@ -17909,9 +18384,9 @@ b(\(M-p\))630 5121 y Fu(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g (tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h(the)630 5340 y(user.)k(The)30 b(searc)m(h)h(string)f(ma)m(y)h(matc)m(h)g(an)m (ywhere)g(in)f(a)h(history)f(line.)p eop end -%%Page: 135 141 -TeXDict begin 135 140 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(135)150 299 y Ft +%%Page: 141 147 +TeXDict begin 141 146 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(141)150 299 y Ft (non-incremental-forward-)o(sear)o(ch-h)o(ist)o(ory)24 b(\(M-n\))630 408 y Fu(Searc)m(h)44 b(forw)m(ard)f(starting)h(at)h(the) e(curren)m(t)h(line)g(and)f(mo)m(ving)h(`do)m(wn')g(through)f(the)630 @@ -17985,9 +18460,9 @@ b(the)g(curren)m(t)e(line)i(for)f(return)f(to)h(the)h(calling)g b(en)m(tered,)k(and)d(fetc)m(h)h(the)f(next)g(line)h(relativ)m(e)h(to)f (the)f(curren)m(t)g(line)h(from)f(the)g(history)p eop end -%%Page: 136 142 -TeXDict begin 136 141 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(136)630 299 y(for)31 +%%Page: 142 148 +TeXDict begin 142 147 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(142)630 299 y(for)31 b(editing.)43 b(A)31 b(n)m(umeric)f(argumen)m(t,)i(if)f(supplied,)f(sp) s(eci\014es)h(the)g(history)f(en)m(try)i(to)f(use)630 408 y(instead)g(of)f(the)h(curren)m(t)f(line.)150 565 @@ -18051,131 +18526,130 @@ g(of)h(the)630 5230 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h (last)h(t)m(w)m(o)g(c)m(haracters)g(of)f(the)h(line.)38 b(Negativ)m(e)25 b(argumen)m(ts)630 5340 y(ha)m(v)m(e)32 b(no)e(e\013ect.)p eop end -%%Page: 137 143 -TeXDict begin 137 142 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(137)150 299 y Ft(transpose-words) +%%Page: 143 149 +TeXDict begin 143 148 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(143)150 299 y Ft(transpose-words) 26 b(\(M-t\))630 408 y Fu(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s (oin)m(t)g(past)g(the)h(w)m(ord)f(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p) s(oin)m(t)f(past)g(that)630 518 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 b(the)i(insertion)f(p)s(oin)m(t)h(is)f(at)h(the)g(end)e(of)i (the)f(line,)i(this)e(transp)s(oses)g(the)630 628 y(last)j(t)m(w)m(o)h -(w)m(ords)e(on)g(the)h(line.)150 797 y Ft(upcase-word)c(\(M-u\))630 -907 y Fu(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))i -(w)m(ord.)45 b(With)32 b(a)g(negativ)m(e)j(argumen)m(t,)e(upp)s(er-)630 -1016 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do)g(not)h(mo)m(v)m(e)h -(the)e(cursor.)150 1186 y Ft(downcase-word)d(\(M-l\))630 -1296 y Fu(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))i -(w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m(t,)g(lo)m(w)m -(ercase)630 1405 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f(mo)m -(v)m(e)i(the)f(cursor.)150 1575 y Ft(capitalize-word)26 -b(\(M-c\))630 1684 y Fu(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m +(w)m(ords)e(on)g(the)h(line.)150 803 y Ft(shell-transpose-words)25 +b(\(M-C-t\))630 913 y Fu(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin) +m(t)g(past)g(the)h(w)m(ord)f(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s +(oin)m(t)f(past)g(that)630 1022 y(w)m(ord)c(as)h(w)m(ell.)41 +b(If)27 b(the)i(insertion)f(p)s(oin)m(t)h(is)f(at)h(the)g(end)e(of)i +(the)f(line,)i(this)e(transp)s(oses)g(the)630 1132 y(last)j(t)m(w)m(o)h +(w)m(ords)d(on)i(the)f(line.)41 b(W)-8 b(ord)31 b(b)s(oundaries)e(are)h +(the)h(same)f(as)h Ft(shell-forward-)630 1241 y(word)e +Fu(and)h Ft(shell-backward-word)p Fu(.)150 1417 y Ft(upcase-word)d +(\(M-u\))630 1526 y Fu(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g +(follo)m(wing\))i(w)m(ord.)45 b(With)32 b(a)g(negativ)m(e)j(argumen)m +(t,)e(upp)s(er-)630 1636 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do) +g(not)h(mo)m(v)m(e)h(the)e(cursor.)150 1811 y Ft(downcase-word)d +(\(M-l\))630 1921 y Fu(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h +(follo)m(wing\))i(w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m +(t,)g(lo)m(w)m(ercase)630 2030 y(the)31 b(previous)e(w)m(ord,)i(but)e +(do)i(not)f(mo)m(v)m(e)i(the)f(cursor.)150 2206 y Ft(capitalize-word)26 +b(\(M-c\))630 2315 y Fu(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m (wing\))i(w)m(ord.)38 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h -(capitalize)630 1794 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f -(mo)m(v)m(e)i(the)f(cursor.)150 1964 y Ft(overwrite-mode)26 -b(\(\))630 2073 y Fu(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48 +(capitalize)630 2425 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f +(mo)m(v)m(e)i(the)f(cursor.)150 2600 y Ft(overwrite-mode)26 +b(\(\))630 2710 y Fu(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48 b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,) -h(switc)m(hes)630 2183 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37 +h(switc)m(hes)630 2819 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37 b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m -(t,)i(switc)m(hes)e(to)630 2292 y(insert)30 b(mo)s(de.)41 +(t,)i(switc)m(hes)e(to)630 2929 y(insert)30 b(mo)s(de.)41 b(This)30 b(command)h(a\013ects)h(only)e Ft(emacs)f Fu(mo)s(de;)i -Ft(vi)f Fu(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 2402 +Ft(vi)f Fu(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 3038 y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f Ft(readline\(\))c Fu(starts)k(in)f(insert)g(mo)s(de.)630 -2541 y(In)52 b(o)m(v)m(erwrite)h(mo)s(de,)58 b(c)m(haracters)c(b)s +3181 y(In)52 b(o)m(v)m(erwrite)h(mo)s(de,)58 b(c)m(haracters)c(b)s (ound)c(to)j Ft(self-insert)c Fu(replace)k(the)g(text)g(at)630 -2651 y(p)s(oin)m(t)59 b(rather)f(than)h(pushing)e(the)i(text)g(to)h +3290 y(p)s(oin)m(t)59 b(rather)f(than)h(pushing)e(the)i(text)g(to)h (the)f(righ)m(t.)126 b(Characters)59 b(b)s(ound)d(to)630 -2761 y Ft(backward-delete-char)25 b Fu(replace)31 b(the)g(c)m(haracter) -h(b)s(efore)e(p)s(oin)m(t)g(with)g(a)h(space.)630 2900 +3400 y Ft(backward-delete-char)25 b Fu(replace)31 b(the)g(c)m(haracter) +h(b)s(efore)e(p)s(oin)m(t)g(with)g(a)h(space.)630 3542 y(By)g(default,)f(this)h(command)f(is)g(un)m(b)s(ound.)150 -3110 y Fk(8.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150 -3287 y Ft(kill-line)28 b(\(C-k\))630 3396 y Fu(Kill)k(the)f(text)i +3758 y Fk(8.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150 +3937 y Ft(kill-line)28 b(\(C-k\))630 4047 y Fu(Kill)k(the)f(text)i (from)d(p)s(oin)m(t)i(to)g(the)f(end)g(of)g(the)h(line.)44 b(With)31 b(a)h(negativ)m(e)i(n)m(umeric)d(argu-)630 -3506 y(men)m(t,)g(kill)g(bac)m(kw)m(ard)g(from)f(the)g(cursor)g(to)h +4157 y(men)m(t,)g(kill)g(bac)m(kw)m(ard)g(from)f(the)g(cursor)g(to)h (the)g(b)s(eginning)e(of)i(the)g(curren)m(t)f(line.)150 -3675 y Ft(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630 -3785 y Fu(Kill)40 b(bac)m(kw)m(ard)h(from)e(the)h(cursor)g(to)g(the)g +4332 y Ft(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630 +4441 y Fu(Kill)40 b(bac)m(kw)m(ard)h(from)e(the)h(cursor)g(to)g(the)g (b)s(eginning)g(of)g(the)g(curren)m(t)f(line.)70 b(With)41 -b(a)630 3895 y(negativ)m(e)47 b(n)m(umeric)e(argumen)m(t,)50 +b(a)630 4551 y(negativ)m(e)47 b(n)m(umeric)e(argumen)m(t,)50 b(kill)c(forw)m(ard)e(from)h(the)g(cursor)g(to)h(the)f(end)f(of)i(the) -630 4004 y(curren)m(t)30 b(line.)150 4174 y Ft(unix-line-discard)c -(\(C-u\))630 4283 y Fu(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor)f +630 4661 y(curren)m(t)30 b(line.)150 4836 y Ft(unix-line-discard)c +(\(C-u\))630 4946 y Fu(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor)f (to)h(the)f(b)s(eginning)g(of)h(the)f(curren)m(t)g(line.)150 -4453 y Ft(kill-whole-line)c(\(\))630 4562 y Fu(Kill)37 +5121 y Ft(kill-whole-line)c(\(\))630 5230 y Fu(Kill)37 b(all)g(c)m(haracters)h(on)f(the)f(curren)m(t)h(line,)h(no)f(matter)g (where)f(p)s(oin)m(t)h(is.)59 b(By)36 b(default,)630 -4672 y(this)30 b(is)h(un)m(b)s(ound.)150 4842 y Ft(kill-word)d(\(M-d\)) -630 4951 y Fu(Kill)i(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f -(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)h -(the)g(end)630 5061 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 -b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Ft(forward-word)p -Fu(.)150 5230 y Ft(backward-kill-word)25 b(\(M-DEL\))630 -5340 y Fu(Kill)k(the)g(w)m(ord)g(b)s(ehind)e(p)s(oin)m(t.)40 -b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h(the)g(same)g(as)g -Ft(backward-word)p Fu(.)p eop end -%%Page: 138 144 -TeXDict begin 138 143 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(138)150 299 y Ft(shell-kill-word) -26 b(\(M-C-d\))630 408 y Fu(Kill)k(from)f(p)s(oin)m(t)g(to)h(the)g(end) -e(of)i(the)f(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m -(ords,)f(to)h(the)g(end)630 518 y(of)h(the)f(next)h(w)m(ord.)40 +5340 y(this)30 b(is)h(un)m(b)s(ound.)p eop end +%%Page: 144 150 +TeXDict begin 144 149 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(144)150 299 y Ft(kill-word)28 +b(\(M-d\))630 408 y Fu(Kill)i(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of) +i(the)f(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,) +f(to)h(the)g(end)630 518 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f -Ft(shell-forward-word)p Fu(.)150 692 y Ft(shell-backward-kill-word)24 -b(\(\))630 801 y Fu(Kill)e(the)h(w)m(ord)e(b)s(ehind)g(p)s(oin)m(t.)38 +Ft(forward-word)p Fu(.)150 687 y Ft(backward-kill-word)25 +b(\(M-DEL\))630 796 y Fu(Kill)k(the)g(w)m(ord)g(b)s(ehind)e(p)s(oin)m +(t.)40 b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h(the)g(same)g(as)g +Ft(backward-word)p Fu(.)150 965 y Ft(shell-kill-word)d(\(M-C-d\))630 +1075 y Fu(Kill)k(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f +(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)h +(the)g(end)630 1184 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 +b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Ft +(shell-forward-word)p Fu(.)150 1353 y Ft(shell-backward-kill-word)24 +b(\(\))630 1463 y Fu(Kill)e(the)h(w)m(ord)e(b)s(ehind)g(p)s(oin)m(t.)38 b(W)-8 b(ord)22 b(b)s(oundaries)f(are)h(the)g(same)h(as)f -Ft(shell-backward-)630 911 y(word)p Fu(.)150 1084 y Ft -(shell-transpose-words)j(\(M-C-t\))630 1194 y Fu(Drag)33 -b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)g(past)g(the)h(w)m(ord)f -(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s(oin)m(t)f(past)g(that)630 -1304 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 b(the)i(insertion)f(p)s(oin)m -(t)h(is)f(at)h(the)g(end)e(of)i(the)f(line,)i(this)e(transp)s(oses)g -(the)630 1413 y(last)j(t)m(w)m(o)h(w)m(ords)d(on)i(the)f(line.)41 -b(W)-8 b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)f(as)h -Ft(shell-forward-)630 1523 y(word)e Fu(and)h Ft(shell-backward-word)p -Fu(.)150 1696 y Ft(unix-word-rubout)c(\(C-w\))630 1806 -y Fu(Kill)32 b(the)g(w)m(ord)f(b)s(ehind)f(p)s(oin)m(t,)i(using)f -(white)h(space)g(as)g(a)g(w)m(ord)f(b)s(oundary)-8 b(.)43 -b(The)31 b(killed)630 1915 y(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f -(kill-ring.)150 2089 y Ft(unix-filename-rubout)25 b(\(\))630 -2199 y Fu(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m(t,)j(using)e -(white)g(space)h(and)f(the)g(slash)g(c)m(haracter)i(as)f(the)630 -2308 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30 b(killed)h(text)g(is)g -(sa)m(v)m(ed)g(on)g(the)f(kill-ring.)150 2482 y Ft -(delete-horizontal-space)24 b(\(\))630 2591 y Fu(Delete)33 -b(all)e(spaces)g(and)e(tabs)i(around)e(p)s(oin)m(t.)41 -b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 2765 -y Ft(kill-region)d(\(\))630 2874 y Fu(Kill)k(the)f(text)i(in)e(the)g +Ft(shell-backward-)630 1572 y(word)p Fu(.)150 1741 y +Ft(unix-word-rubout)k(\(C-w\))630 1851 y Fu(Kill)32 b(the)g(w)m(ord)f +(b)s(ehind)f(p)s(oin)m(t,)i(using)f(white)h(space)g(as)g(a)g(w)m(ord)f +(b)s(oundary)-8 b(.)43 b(The)31 b(killed)630 1960 y(text)g(is)g(sa)m(v) +m(ed)g(on)g(the)f(kill-ring.)150 2129 y Ft(unix-filename-rubout)25 +b(\(\))630 2239 y Fu(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m +(t,)j(using)e(white)g(space)h(and)f(the)g(slash)g(c)m(haracter)i(as)f +(the)630 2348 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30 +b(killed)h(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f(kill-ring.)150 +2517 y Ft(delete-horizontal-space)24 b(\(\))630 2627 +y Fu(Delete)33 b(all)e(spaces)g(and)e(tabs)i(around)e(p)s(oin)m(t.)41 +b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 2796 +y Ft(kill-region)d(\(\))630 2905 y Fu(Kill)k(the)f(text)i(in)e(the)g (curren)m(t)h(region.)41 b(By)31 b(default,)f(this)h(command)f(is)g(un) -m(b)s(ound.)150 3048 y Ft(copy-region-as-kill)25 b(\(\))630 -3158 y Fu(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h(the)f +m(b)s(ound.)150 3074 y Ft(copy-region-as-kill)25 b(\(\))630 +3184 y Fu(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h(the)f (kill)h(bu\013er,)f(so)g(it)h(can)f(b)s(e)f(y)m(ank)m(ed)i(righ)m(t)f -(a)m(w)m(a)m(y)-8 b(.)630 3267 y(By)31 b(default,)f(this)h(command)f -(is)g(un)m(b)s(ound.)150 3441 y Ft(copy-backward-word)25 -b(\(\))630 3550 y Fu(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m +(a)m(w)m(a)m(y)-8 b(.)630 3293 y(By)31 b(default,)f(this)h(command)f +(is)g(un)m(b)s(ound.)150 3462 y Ft(copy-backward-word)25 +b(\(\))630 3572 y Fu(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m (t)g(to)i(the)e(kill)h(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries) -f(are)i(the)630 3660 y(same)31 b(as)f Ft(backward-word)p +f(are)i(the)630 3681 y(same)31 b(as)f Ft(backward-word)p Fu(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)150 -3833 y Ft(copy-forward-word)26 b(\(\))630 3943 y Fu(Cop)m(y)31 +3850 y Ft(copy-forward-word)26 b(\(\))630 3960 y Fu(Cop)m(y)31 b(the)g(w)m(ord)g(follo)m(wing)h(p)s(oin)m(t)f(to)h(the)f(kill)h (bu\013er.)42 b(The)30 b(w)m(ord)h(b)s(oundaries)e(are)j(the)630 -4053 y(same)f(as)f Ft(forward-word)p Fu(.)38 b(By)30 +4069 y(same)f(as)f Ft(forward-word)p Fu(.)38 b(By)30 b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)150 -4226 y Ft(yank)f(\(C-y\))630 4336 y Fu(Y)-8 b(ank)31 +4238 y Ft(yank)f(\(C-y\))630 4348 y Fu(Y)-8 b(ank)31 b(the)f(top)h(of)g(the)f(kill)h(ring)f(in)m(to)i(the)e(bu\013er)g(at)h -(p)s(oin)m(t.)150 4509 y Ft(yank-pop)d(\(M-y\))630 4619 +(p)s(oin)m(t.)150 4516 y Ft(yank-pop)d(\(M-y\))630 4626 y Fu(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h(the)g(prior)630 -4728 y(command)30 b(is)h Ft(yank)e Fu(or)h Ft(yank-pop)p -Fu(.)150 4942 y Fk(8.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m +4736 y(command)30 b(is)h Ft(yank)e Fu(or)h Ft(yank-pop)p +Fu(.)150 4944 y Fk(8.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m (ts)150 5121 y Ft(digit-argument)26 b(\()p Fj(M-0)p Ft(,)j Fj(M-1)p Ft(,)h(...)f Fj(M--)p Ft(\))630 5230 y Fu(Add)d(this)h(digit)g (to)h(the)f(argumen)m(t)g(already)h(accum)m(ulating,)h(or)e(start)h(a)f (new)f(argumen)m(t.)630 5340 y Fj(M--)j Fu(starts)i(a)g(negativ)m(e)i (argumen)m(t.)p eop end -%%Page: 139 145 -TeXDict begin 139 144 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(139)150 299 y Ft +%%Page: 145 151 +TeXDict begin 145 150 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(145)150 299 y Ft (universal-argument)25 b(\(\))630 408 y Fu(This)g(is)g(another)h(w)m(a) m(y)g(to)h(sp)s(ecify)e(an)g(argumen)m(t.)40 b(If)25 b(this)g(command)h(is)f(follo)m(w)m(ed)i(b)m(y)f(one)630 @@ -18250,9 +18724,9 @@ y Ft(possible-completions)p Fu(.)35 b(This)30 b(command)g(is)g(un)m(b)s (ound)e(b)m(y)i(default.)150 5230 y Ft(complete-filename)c(\(M-/\))630 5340 y Fu(A)m(ttempt)32 b(\014lename)e(completion)i(on)e(the)h(text)g (b)s(efore)f(p)s(oin)m(t.)p eop end -%%Page: 140 146 -TeXDict begin 140 145 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(140)150 299 y Ft +%%Page: 146 152 +TeXDict begin 146 151 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(146)150 299 y Ft (possible-filename-comple)o(tion)o(s)24 b(\(C-x)30 b(/\))630 408 y Fu(List)f(the)g(p)s(ossible)f(completions)h(of)g(the)g(text)g(b)s (efore)g(p)s(oin)m(t,)g(treating)h(it)f(as)g(a)f(\014lename.)150 @@ -18304,9 +18778,9 @@ g(macro.)150 5121 y Ft(end-kbd-macro)d(\(C-x)i(\)\))630 5230 y Fu(Stop)e(sa)m(ving)h(the)g(c)m(haracters)g(t)m(yp)s(ed)f(in)m (to)i(the)e(curren)m(t)g(k)m(eyb)s(oard)g(macro)h(and)f(sa)m(v)m(e)i (the)630 5340 y(de\014nition.)p eop end -%%Page: 141 147 -TeXDict begin 141 146 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(141)150 299 y Ft +%%Page: 147 153 +TeXDict begin 147 152 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(147)150 299 y Ft (call-last-kbd-macro)25 b(\(C-x)k(e\))630 408 y Fu(Re-execute)37 b(the)e(last)h(k)m(eyb)s(oard)f(macro)h(de\014ned,)f(b)m(y)h(making)f (the)g(c)m(haracters)i(in)e(the)630 518 y(macro)c(app)s(ear)f(as)g(if)h @@ -18363,9 +18837,9 @@ g(that)630 4968 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(argumen)m(t)f (as)g(those)h(de\014ned)630 5340 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g (and)f(End.)60 b(Suc)m(h)37 b(sequences)g(b)s(egin)g(with)g(a)h(Con)m (trol)g(Sequence)p eop end -%%Page: 142 148 -TeXDict begin 142 147 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(142)630 299 y(Indicator)37 +%%Page: 148 154 +TeXDict begin 148 153 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(148)630 299 y(Indicator)37 b(\(CSI\),)f(usually)h(ESC-[.)59 b(If)36 b(this)g(sequence)h(is)g(b)s (ound)d(to)k Ft("\\)p Fu(e[)p Ft(")p Fu(,)g(k)m(eys)f(pro-)630 408 y(ducing)29 b(suc)m(h)g(sequences)g(will)h(ha)m(v)m(e)h(no)e @@ -18438,656 +18912,680 @@ b(If)39 b(a)h(n)m(umeric)630 4847 y(argumen)m(t)31 b(is)f(supplied,)g 50 b(If)33 b(a)h(n)m(umeric)g(argumen)m(t)g(is)f(supplied,)h(a)g(`)p Ft(*)p Fu(')630 5340 y(is)c(app)s(ended)f(b)s(efore)h(pathname)g (expansion.)p eop end -%%Page: 143 149 -TeXDict begin 143 148 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(143)150 299 y Ft +%%Page: 149 155 +TeXDict begin 149 154 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(149)150 299 y Ft (display-shell-version)25 b(\(C-x)k(C-v\))630 408 y Fu(Displa)m(y)j(v)m (ersion)e(information)h(ab)s(out)f(the)h(curren)m(t)f(instance)h(of)f -(Bash.)150 566 y Ft(shell-expand-line)c(\(M-C-e\))630 -676 y Fu(Expand)34 b(the)h(line)h(as)g(the)f(shell)h(do)s(es.)55 -b(This)34 b(p)s(erforms)g(alias)i(and)f(history)g(expansion)630 -785 y(as)f(w)m(ell)g(as)g(all)h(of)e(the)h(shell)g(w)m(ord)f -(expansions)g(\(see)i(Section)f(3.5)h([Shell)e(Expansions],)630 -895 y(page)e(24\).)150 1053 y Ft(history-expand-line)25 -b(\(M-^\))630 1162 y Fu(P)m(erform)30 b(history)h(expansion)f(on)g(the) -h(curren)m(t)f(line.)150 1320 y Ft(magic-space)d(\(\))630 -1429 y Fu(P)m(erform)c(history)g(expansion)g(on)g(the)g(curren)m(t)g -(line)g(and)g(insert)g(a)g(space)h(\(see)g(Section)g(9.3)630 -1539 y([History)31 b(In)m(teraction],)i(page)e(154\).)150 -1697 y Ft(alias-expand-line)26 b(\(\))630 1806 y Fu(P)m(erform)e(alias) -i(expansion)e(on)h(the)g(curren)m(t)f(line)h(\(see)g(Section)h(6.6)f -([Aliases],)j(page)d(100\).)150 1964 y Ft(history-and-alias-expand)o -(-lin)o(e)f(\(\))630 2073 y Fu(P)m(erform)30 b(history)h(and)e(alias)j -(expansion)e(on)g(the)h(curren)m(t)f(line.)150 2231 y -Ft(insert-last-argument)25 b(\(M-.)k(or)h(M-_\))630 2341 -y Fu(A)g(synon)m(ym)g(for)g Ft(yank-last-arg)p Fu(.)150 -2498 y Ft(edit-and-execute-command)24 b(\(C-x)29 b(C-e\))630 -2608 y Fu(In)m(v)m(ok)m(e)34 b(an)f(editor)g(on)g(the)g(curren)m(t)f -(command)h(line,)h(and)e(execute)i(the)f(result)g(as)g(shell)630 -2718 y(commands.)81 b(Bash)44 b(attempts)h(to)g(in)m(v)m(ok)m(e)h -Ft($VISUAL)p Fu(,)f Ft($EDITOR)p Fu(,)h(and)d Ft(emacs)g -Fu(as)h(the)630 2827 y(editor,)31 b(in)f(that)h(order.)150 -3066 y Fs(8.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 3226 +(Bash.)150 589 y Ft(shell-expand-line)c(\(M-C-e\))630 +699 y Fu(Expand)j(the)h(line)g(b)m(y)g(p)s(erforming)f(shell)h(w)m(ord) +g(expansions.)40 b(This)29 b(p)s(erforms)f(alias)k(and)630 +809 y(history)40 b(expansion,)j($')p Fr(string)8 b Fu(')41 +b(and)f($)p Ft(")p Fr(string)8 b Ft(")39 b Fu(quoting,)44 +b(tilde)d(expansion,)i(parame-)630 918 y(ter)d(and)f(v)-5 +b(ariable)40 b(expansion,)i(arithmetic)f(expansion,)g(command)f(and)f +(pro)s(ces)g(sub-)630 1028 y(stitution,)34 b(w)m(ord)f(splitting,)h +(and)e(quote)i(remo)m(v)-5 b(al.)49 b(An)32 b(explicit)i(argumen)m(t)g +(suppresses)630 1137 y(command)c(and)g(pro)s(cess)g(substitution.)150 +1318 y Ft(history-expand-line)25 b(\(M-^\))630 1428 y +Fu(P)m(erform)30 b(history)h(expansion)f(on)g(the)h(curren)m(t)f(line.) +150 1609 y Ft(magic-space)d(\(\))630 1718 y Fu(P)m(erform)c(history)g +(expansion)g(on)g(the)g(curren)m(t)g(line)g(and)g(insert)g(a)g(space)h +(\(see)g(Section)g(9.3)630 1828 y([History)31 b(In)m(teraction],)i +(page)e(161\).)150 2009 y Ft(alias-expand-line)26 b(\(\))630 +2118 y Fu(P)m(erform)e(alias)i(expansion)e(on)h(the)g(curren)m(t)f +(line)h(\(see)g(Section)h(6.6)f([Aliases],)j(page)d(103\).)150 +2299 y Ft(history-and-alias-expand)o(-lin)o(e)f(\(\))630 +2409 y Fu(P)m(erform)30 b(history)h(and)e(alias)j(expansion)e(on)g(the) +h(curren)m(t)f(line.)150 2590 y Ft(insert-last-argument)25 +b(\(M-.)k(or)h(M-_\))630 2699 y Fu(A)g(synon)m(ym)g(for)g +Ft(yank-last-arg)p Fu(.)150 2880 y Ft(edit-and-execute-command)24 +b(\(C-x)29 b(C-e\))630 2990 y Fu(In)m(v)m(ok)m(e)34 b(an)f(editor)g(on) +g(the)g(curren)m(t)f(command)h(line,)h(and)e(execute)i(the)f(result)g +(as)g(shell)630 3100 y(commands.)81 b(Bash)44 b(attempts)h(to)g(in)m(v) +m(ok)m(e)h Ft($VISUAL)p Fu(,)f Ft($EDITOR)p Fu(,)h(and)d +Ft(emacs)g Fu(as)h(the)630 3209 y(editor,)31 b(in)f(that)h(order.)150 +3390 y Ft(execute-named-command)25 b(\(M-x\))630 3500 +y Fu(Read)j(a)g(bindable)f(readline)h(command)g(name)g(from)f(the)h +(input)f(and)g(execute)j(the)e(func-)630 3609 y(tion)e(to)h(whic)m(h)f +(it's)g(b)s(ound,)f(as)h(if)g(the)g(k)m(ey)h(sequence)f(to)h(whic)m(h)e +(it)i(w)m(as)f(b)s(ound)e(app)s(eared)630 3719 y(in)37 +b(the)h(input.)61 b(If)37 b(this)h(function)f(is)g(supplied)g(with)g(a) +h(n)m(umeric)f(argumen)m(t,)j(it)e(passes)630 3828 y(that)31 +b(argumen)m(t)g(to)g(the)f(function)h(it)f(executes.)150 +4101 y Fs(8.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 4261 y Fu(While)32 b(the)g(Readline)g(library)f(do)s(es)g(not)h(ha)m(v)m(e)h (a)f(full)f(set)h(of)g Ft(vi)f Fu(editing)h(functions,)f(it)h(do)s(es)g -(con)m(tain)150 3335 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f +(con)m(tain)150 4370 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f (the)g(line.)52 b(The)34 b(Readline)g Ft(vi)g Fu(mo)s(de)f(b)s(eha)m(v) -m(es)i(as)f(sp)s(eci\014ed)f(in)150 3445 y(the)e Fm(posix)e -Fu(standard.)275 3578 y(In)35 b(order)g(to)i(switc)m(h)f(in)m(teractiv) +m(es)i(as)f(sp)s(eci\014ed)f(in)150 4480 y(the)e Fm(posix)e +Fu(standard.)275 4636 y(In)35 b(order)g(to)i(switc)m(h)f(in)m(teractiv) m(ely)j(b)s(et)m(w)m(een)d Ft(emacs)f Fu(and)g Ft(vi)g Fu(editing)h(mo)s(des,)h(use)f(the)g(`)p Ft(set)30 b(-o)150 -3688 y(emacs)p Fu(')43 b(and)h(`)p Ft(set)30 b(-o)f(vi)p +4746 y(emacs)p Fu(')43 b(and)h(`)p Ft(set)30 b(-o)f(vi)p Fu(')44 b(commands)g(\(see)i(Section)f(4.3.1)h([The)e(Set)h(Builtin],)j -(page)e(67\).)83 b(The)150 3798 y(Readline)31 b(default)g(is)f -Ft(emacs)f Fu(mo)s(de.)275 3931 y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f +(page)e(69\).)83 b(The)150 4855 y(Readline)31 b(default)g(is)f +Ft(emacs)f Fu(mo)s(de.)275 5011 y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f (in)g Ft(vi)f Fu(mo)s(de,)h(y)m(ou)h(are)f(already)h(placed)f(in)g -(`insertion')g(mo)s(de,)g(as)h(if)f(y)m(ou)150 4041 y(had)f(t)m(yp)s +(`insertion')g(mo)s(de,)g(as)h(if)f(y)m(ou)150 5121 y(had)f(t)m(yp)s (ed)g(an)g(`)p Ft(i)p Fu('.)41 b(Pressing)29 b Ft(ESC)f Fu(switc)m(hes)i(y)m(ou)g(in)m(to)h(`command')e(mo)s(de,)h(where)e(y)m -(ou)i(can)g(edit)g(the)150 4150 y(text)35 b(of)f(the)g(line)g(with)f +(ou)i(can)g(edit)g(the)150 5230 y(text)35 b(of)f(the)g(line)g(with)f (the)h(standard)f Ft(vi)g Fu(mo)m(v)m(emen)m(t)j(k)m(eys,)g(mo)m(v)m(e) -f(to)f(previous)g(history)f(lines)h(with)150 4260 y(`)p +f(to)f(previous)g(history)f(lines)h(with)150 5340 y(`)p Ft(k)p Fu(')d(and)e(subsequen)m(t)h(lines)h(with)f(`)p -Ft(j)p Fu(',)g(and)g(so)h(forth.)150 4499 y Fs(8.6)68 -b(Programmable)47 b(Completion)150 4658 y Fu(When)25 -b(w)m(ord)g(completion)i(is)f(attempted)g(for)g(an)f(argumen)m(t)h(to)g -(a)g(command)f(for)h(whic)m(h)f(a)h(completion)150 4768 -y(sp)s(eci\014cation)40 b(\(a)h Fr(compsp)s(ec)6 b Fu(\))39 +Ft(j)p Fu(',)g(and)g(so)h(forth.)p eop end +%%Page: 150 156 +TeXDict begin 150 155 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(150)150 299 y Fs(8.6)68 +b(Programmable)47 b(Completion)150 458 y Fu(When)25 b(w)m(ord)g +(completion)i(is)f(attempted)g(for)g(an)f(argumen)m(t)h(to)g(a)g +(command)f(for)h(whic)m(h)f(a)h(completion)150 568 y(sp)s +(eci\014cation)40 b(\(a)h Fr(compsp)s(ec)6 b Fu(\))39 b(has)h(b)s(een)f(de\014ned)f(using)h(the)h Ft(complete)d -Fu(builtin)j(\(see)g(Section)h(8.7)150 4878 y([Programmable)h -(Completion)f(Builtins],)k(page)d(146\),)j(the)c(programmable)g -(completion)i(facilities)150 4987 y(are)31 b(in)m(v)m(ok)m(ed.)275 -5121 y(First,)23 b(the)e(command)g(name)g(is)h(iden)m(ti\014ed.)37 +Fu(builtin)j(\(see)g(Section)h(8.7)150 677 y([Programmable)h +(Completion)f(Builtins],)k(page)d(152\),)j(the)c(programmable)g +(completion)i(facilities)150 787 y(are)31 b(in)m(v)m(ok)m(ed.)275 +925 y(First,)23 b(the)e(command)g(name)g(is)h(iden)m(ti\014ed.)37 b(If)21 b(a)g(compsp)s(ec)g(has)g(b)s(een)f(de\014ned)g(for)h(that)h -(command,)150 5230 y(the)44 b(compsp)s(ec)g(is)g(used)f(to)h(generate)i +(command,)150 1034 y(the)44 b(compsp)s(ec)g(is)g(used)f(to)h(generate)i (the)e(list)g(of)g(p)s(ossible)g(completions)h(for)e(the)h(w)m(ord.)81 -b(If)44 b(the)150 5340 y(command)36 b(w)m(ord)g(is)g(the)g(empt)m(y)h +b(If)44 b(the)150 1144 y(command)36 b(w)m(ord)g(is)g(the)g(empt)m(y)h (string)f(\(completion)i(attempted)f(at)g(the)g(b)s(eginning)e(of)h(an) -h(empt)m(y)p eop end -%%Page: 144 150 -TeXDict begin 144 149 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(144)150 299 y(line\),)30 -b(an)m(y)g(compsp)s(ec)f(de\014ned)f(with)h(the)h Ft(-E)e -Fu(option)i(to)g Ft(complete)d Fu(is)i(used.)40 b(If)29 -b(the)g(command)g(w)m(ord)150 408 y(is)e(a)h(full)e(pathname,)i(a)g -(compsp)s(ec)e(for)h(the)g(full)g(pathname)g(is)g(searc)m(hed)h(for)f -(\014rst.)39 b(If)26 b(no)h(compsp)s(ec)g(is)150 518 -y(found)22 b(for)g(the)h(full)g(pathname,)h(an)f(attempt)h(is)f(made)g -(to)g(\014nd)f(a)h(compsp)s(ec)f(for)h(the)g(p)s(ortion)f(follo)m(wing) -150 628 y(the)34 b(\014nal)g(slash.)53 b(If)34 b(those)g(searc)m(hes)i -(do)e(not)g(result)h(in)f(a)g(compsp)s(ec,)h(an)m(y)g(compsp)s(ec)f -(de\014ned)f(with)150 737 y(the)k Ft(-D)g Fu(option)g(to)h -Ft(complete)d Fu(is)i(used)g(as)g(the)g(default.)61 b(If)37 -b(there)g(is)h(no)f(default)g(compsp)s(ec,)i(Bash)150 -847 y(attempts)e(alias)h(expansion)e(on)g(the)h(command)f(w)m(ord)g(as) -h(a)f(\014nal)g(resort,)j(and)c(attempts)j(to)f(\014nd)e(a)150 -956 y(compsp)s(ec)30 b(for)g(the)h(command)f(w)m(ord)g(from)g(an)m(y)h -(successful)f(expansion)275 1113 y(Once)k(a)g(compsp)s(ec)g(has)g(b)s -(een)f(found,)h(it)h(is)f(used)f(to)i(generate)h(the)e(list)h(of)f -(matc)m(hing)h(w)m(ords.)51 b(If)150 1223 y(a)37 b(compsp)s(ec)f(is)g -(not)h(found,)f(the)h(default)f(Bash)h(completion)g(describ)s(ed)e(ab)s -(o)m(v)m(e)j(\(see)f(Section)g(8.4.6)150 1332 y([Commands)30 -b(F)-8 b(or)31 b(Completion],)g(page)g(139\))h(is)f(p)s(erformed.)275 -1489 y(First,)g(the)g(actions)g(sp)s(eci\014ed)f(b)m(y)h(the)f(compsp)s +h(empt)m(y)150 1254 y(line\),)30 b(an)m(y)g(compsp)s(ec)f(de\014ned)f +(with)h(the)h Ft(-E)e Fu(option)i(to)g Ft(complete)d +Fu(is)i(used.)40 b(If)29 b(the)g(command)g(w)m(ord)150 +1363 y(is)e(a)h(full)e(pathname,)i(a)g(compsp)s(ec)e(for)h(the)g(full)g +(pathname)g(is)g(searc)m(hed)h(for)f(\014rst.)39 b(If)26 +b(no)h(compsp)s(ec)g(is)150 1473 y(found)22 b(for)g(the)h(full)g +(pathname,)h(an)f(attempt)h(is)f(made)g(to)g(\014nd)f(a)h(compsp)s(ec)f +(for)h(the)g(p)s(ortion)f(follo)m(wing)150 1582 y(the)34 +b(\014nal)g(slash.)53 b(If)34 b(those)g(searc)m(hes)i(do)e(not)g +(result)h(in)f(a)g(compsp)s(ec,)h(an)m(y)g(compsp)s(ec)f(de\014ned)f +(with)150 1692 y(the)k Ft(-D)g Fu(option)g(to)h Ft(complete)d +Fu(is)i(used)g(as)g(the)g(default.)61 b(If)37 b(there)g(is)h(no)f +(default)g(compsp)s(ec,)i(Bash)150 1802 y(attempts)e(alias)h(expansion) +e(on)g(the)h(command)f(w)m(ord)g(as)h(a)f(\014nal)g(resort,)j(and)c +(attempts)j(to)f(\014nd)e(a)150 1911 y(compsp)s(ec)30 +b(for)g(the)h(command)f(w)m(ord)g(from)g(an)m(y)h(successful)f +(expansion)275 2049 y(Once)k(a)g(compsp)s(ec)g(has)g(b)s(een)f(found,)h +(it)h(is)f(used)f(to)i(generate)h(the)e(list)h(of)f(matc)m(hing)h(w)m +(ords.)51 b(If)150 2159 y(a)37 b(compsp)s(ec)f(is)g(not)h(found,)f(the) +h(default)f(Bash)h(completion)g(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)f +(Section)g(8.4.6)150 2268 y([Commands)30 b(F)-8 b(or)31 +b(Completion],)g(page)g(145\))h(is)f(p)s(erformed.)275 +2406 y(First,)g(the)g(actions)g(sp)s(eci\014ed)f(b)m(y)h(the)f(compsp)s (ec)h(are)g(used.)40 b(Only)30 b(matc)m(hes)i(whic)m(h)e(are)h -(pre\014xed)150 1598 y(b)m(y)h(the)f(w)m(ord)h(b)s(eing)f(completed)h +(pre\014xed)150 2516 y(b)m(y)h(the)f(w)m(ord)h(b)s(eing)f(completed)h (are)g(returned.)44 b(When)31 b(the)h Ft(-f)f Fu(or)h Ft(-d)f Fu(option)h(is)f(used)g(for)h(\014lename)150 -1708 y(or)e(directory)h(name)f(completion,)i(the)e(shell)h(v)-5 +2625 y(or)e(directory)h(name)f(completion,)i(the)e(shell)h(v)-5 b(ariable)31 b Ft(FIGNORE)d Fu(is)i(used)f(to)i(\014lter)g(the)f(matc)m -(hes.)42 b(See)150 1817 y(Section)31 b(5.2)h([Bash)e(V)-8 -b(ariables],)33 b(page)e(78,)g(for)f(a)h(description)g(of)f -Ft(FIGNORE)p Fu(.)275 1974 y(An)m(y)22 b(completions)h(sp)s(eci\014ed)f +(hes.)42 b(See)150 2735 y(Section)31 b(5.2)h([Bash)e(V)-8 +b(ariables],)33 b(page)e(81,)g(for)f(a)h(description)g(of)f +Ft(FIGNORE)p Fu(.)275 2873 y(An)m(y)22 b(completions)h(sp)s(eci\014ed)f (b)m(y)g(a)h(\014lename)f(expansion)h(pattern)f(to)h(the)g -Ft(-G)e Fu(option)i(are)g(generated)150 2084 y(next.)41 +Ft(-G)e Fu(option)i(are)g(generated)150 2982 y(next.)41 b(The)29 b(w)m(ords)g(generated)h(b)m(y)g(the)g(pattern)f(need)h(not)f (matc)m(h)i(the)f(w)m(ord)f(b)s(eing)g(completed.)41 -b(The)150 2193 y Ft(GLOBIGNORE)29 b Fu(shell)i(v)-5 b(ariable)32 +b(The)150 3092 y Ft(GLOBIGNORE)29 b Fu(shell)i(v)-5 b(ariable)32 b(is)g(not)g(used)e(to)i(\014lter)g(the)g(matc)m(hes,)h(but)d(the)i -Ft(FIGNORE)e Fu(shell)h(v)-5 b(ariable)150 2303 y(is)30 -b(used.)275 2459 y(Next,)39 b(the)f(string)f(sp)s(eci\014ed)f(as)h(the) +Ft(FIGNORE)e Fu(shell)h(v)-5 b(ariable)150 3201 y(is)30 +b(used.)275 3339 y(Next,)39 b(the)f(string)f(sp)s(eci\014ed)f(as)h(the) g(argumen)m(t)h(to)g(the)f Ft(-W)f Fu(option)i(is)f(considered.)60 -b(The)37 b(string)150 2569 y(is)c(\014rst)e(split)i(using)f(the)h(c)m +b(The)37 b(string)150 3449 y(is)c(\014rst)e(split)i(using)f(the)h(c)m (haracters)h(in)e(the)h Ft(IFS)e Fu(sp)s(ecial)j(v)-5 b(ariable)33 b(as)g(delimiters.)48 b(Shell)32 b(quoting)h(is)150 -2679 y(honored)f(within)h(the)g(string,)h(in)f(order)f(to)i(pro)m(vide) +3558 y(honored)f(within)h(the)g(string,)h(in)f(order)f(to)i(pro)m(vide) f(a)h(mec)m(hanism)f(for)g(the)g(w)m(ords)g(to)g(con)m(tain)i(shell)150 -2788 y(metac)m(haracters)e(or)e(c)m(haracters)i(in)e(the)g(v)-5 +3668 y(metac)m(haracters)e(or)e(c)m(haracters)i(in)e(the)g(v)-5 b(alue)31 b(of)g Ft(IFS)p Fu(.)42 b(Eac)m(h)32 b(w)m(ord)e(is)h(then)g -(expanded)f(using)h(brace)150 2898 y(expansion,)g(tilde)h(expansion,)f +(expanded)f(using)h(brace)150 3778 y(expansion,)g(tilde)h(expansion,)f (parameter)g(and)g(v)-5 b(ariable)32 b(expansion,)f(command)f -(substitution,)i(and)150 3007 y(arithmetic)c(expansion,)f(as)g(describ) +(substitution,)i(and)150 3887 y(arithmetic)c(expansion,)f(as)g(describ) s(ed)e(ab)s(o)m(v)m(e)i(\(see)h(Section)f(3.5)g([Shell)g(Expansions],)g -(page)g(24\).)40 b(The)150 3117 y(results)23 b(are)h(split)g(using)f +(page)g(24\).)40 b(The)150 3997 y(results)23 b(are)h(split)g(using)f (the)h(rules)f(describ)s(ed)f(ab)s(o)m(v)m(e)j(\(see)g(Section)f(3.5.7) -h([W)-8 b(ord)24 b(Splitting],)i(page)e(35\).)150 3226 +h([W)-8 b(ord)24 b(Splitting],)i(page)e(36\).)150 4106 y(The)j(results)h(of)f(the)h(expansion)g(are)g(pre\014x-matc)m(hed)g (against)h(the)f(w)m(ord)f(b)s(eing)g(completed,)j(and)d(the)150 -3336 y(matc)m(hing)k(w)m(ords)f(b)s(ecome)h(the)g(p)s(ossible)f -(completions.)275 3493 y(After)f(these)g(matc)m(hes)i(ha)m(v)m(e)f(b)s +4216 y(matc)m(hing)k(w)m(ords)f(b)s(ecome)h(the)g(p)s(ossible)f +(completions.)275 4354 y(After)f(these)g(matc)m(hes)i(ha)m(v)m(e)f(b)s (een)f(generated,)h(an)m(y)g(shell)f(function)g(or)g(command)g(sp)s -(eci\014ed)f(with)150 3602 y(the)36 b Ft(-F)f Fu(and)g +(eci\014ed)f(with)150 4463 y(the)36 b Ft(-F)f Fu(and)g Ft(-C)g Fu(options)h(is)g(in)m(v)m(ok)m(ed.)59 b(When)35 b(the)h(command)g(or)f(function)h(is)g(in)m(v)m(ok)m(ed,)i(the)e -Ft(COMP_)150 3712 y(LINE)p Fu(,)42 b Ft(COMP_POINT)p +Ft(COMP_)150 4573 y(LINE)p Fu(,)42 b Ft(COMP_POINT)p Fu(,)d Ft(COMP_KEY)p Fu(,)i(and)e Ft(COMP_TYPE)f Fu(v)-5 b(ariables)41 b(are)f(assigned)g(v)-5 b(alues)41 b(as)f(describ)s(ed) -150 3821 y(ab)s(o)m(v)m(e)34 b(\(see)g(Section)g(5.2)g([Bash)f(V)-8 -b(ariables],)36 b(page)d(78\).)50 b(If)33 b(a)g(shell)g(function)g(is)g -(b)s(eing)f(in)m(v)m(ok)m(ed,)k(the)150 3931 y Ft(COMP_WORDS)j +150 4682 y(ab)s(o)m(v)m(e)34 b(\(see)g(Section)g(5.2)g([Bash)f(V)-8 +b(ariables],)36 b(page)d(81\).)50 b(If)33 b(a)g(shell)g(function)g(is)g +(b)s(eing)f(in)m(v)m(ok)m(ed,)k(the)150 4792 y Ft(COMP_WORDS)j Fu(and)i Ft(COMP_CWORD)d Fu(v)-5 b(ariables)42 b(are)g(also)h(set.)74 -b(When)41 b(the)h(function)f(or)h(command)f(is)150 4041 +b(When)41 b(the)h(function)f(or)h(command)f(is)150 4902 y(in)m(v)m(ok)m(ed,)c(the)e(\014rst)f(argumen)m(t)h(\($1\))h(is)e(the)h (name)g(of)f(the)h(command)f(whose)h(argumen)m(ts)f(are)h(b)s(eing)150 -4150 y(completed,)30 b(the)f(second)f(argumen)m(t)h(\($2\))h(is)f(the)g +5011 y(completed,)30 b(the)f(second)f(argumen)m(t)h(\($2\))h(is)f(the)g (w)m(ord)f(b)s(eing)g(completed,)i(and)e(the)h(third)e(argumen)m(t)150 -4260 y(\($3\))40 b(is)f(the)f(w)m(ord)h(preceding)f(the)h(w)m(ord)f(b)s +5121 y(\($3\))40 b(is)f(the)f(w)m(ord)h(preceding)f(the)h(w)m(ord)f(b)s (eing)g(completed)i(on)e(the)h(curren)m(t)f(command)h(line.)65 -b(No)150 4369 y(\014ltering)33 b(of)h(the)f(generated)h(completions)g +b(No)150 5230 y(\014ltering)33 b(of)h(the)f(generated)h(completions)g (against)h(the)e(w)m(ord)g(b)s(eing)f(completed)i(is)g(p)s(erformed;)f -(the)150 4479 y(function)d(or)g(command)h(has)f(complete)i(freedom)e -(in)g(generating)h(the)g(matc)m(hes.)275 4635 y(An)m(y)j(function)h(sp) -s(eci\014ed)f(with)g Ft(-F)g Fu(is)h(in)m(v)m(ok)m(ed)h(\014rst.)53 -b(The)35 b(function)f(ma)m(y)h(use)g(an)m(y)g(of)g(the)g(shell)150 -4745 y(facilities,)50 b(including)44 b(the)h Ft(compgen)d -Fu(and)i Ft(compopt)e Fu(builtins)i(describ)s(ed)f(b)s(elo)m(w)h(\(see) -i(Section)f(8.7)150 4855 y([Programmable)31 b(Completion)h(Builtins],)f -(page)h(146\),)g(to)g(generate)g(the)f(matc)m(hes.)42 -b(It)31 b(m)m(ust)g(put)f(the)150 4964 y(p)s(ossible)g(completions)h -(in)f(the)h Ft(COMPREPLY)d Fu(arra)m(y)j(v)-5 b(ariable,)31 -b(one)g(p)s(er)e(arra)m(y)i(elemen)m(t.)275 5121 y(Next,)26 -b(an)m(y)f(command)f(sp)s(eci\014ed)g(with)g(the)h Ft(-C)f -Fu(option)h(is)f(in)m(v)m(ok)m(ed)i(in)e(an)g(en)m(vironmen)m(t)h -(equiv)-5 b(alen)m(t)150 5230 y(to)26 b(command)e(substitution.)39 +(the)150 5340 y(function)d(or)g(command)h(has)f(complete)i(freedom)e +(in)g(generating)h(the)g(matc)m(hes.)p eop end +%%Page: 151 157 +TeXDict begin 151 156 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(151)275 299 y(An)m(y)34 +b(function)h(sp)s(eci\014ed)f(with)g Ft(-F)g Fu(is)h(in)m(v)m(ok)m(ed)h +(\014rst.)53 b(The)35 b(function)f(ma)m(y)h(use)g(an)m(y)g(of)g(the)g +(shell)150 408 y(facilities,)50 b(including)44 b(the)h +Ft(compgen)d Fu(and)i Ft(compopt)e Fu(builtins)i(describ)s(ed)f(b)s +(elo)m(w)h(\(see)i(Section)f(8.7)150 518 y([Programmable)31 +b(Completion)h(Builtins],)f(page)h(152\),)g(to)g(generate)g(the)f(matc) +m(hes.)42 b(It)31 b(m)m(ust)g(put)f(the)150 628 y(p)s(ossible)g +(completions)h(in)f(the)h Ft(COMPREPLY)d Fu(arra)m(y)j(v)-5 +b(ariable,)31 b(one)g(p)s(er)e(arra)m(y)i(elemen)m(t.)275 +778 y(Next,)26 b(an)m(y)f(command)f(sp)s(eci\014ed)g(with)g(the)h +Ft(-C)f Fu(option)h(is)f(in)m(v)m(ok)m(ed)i(in)e(an)g(en)m(vironmen)m +(t)h(equiv)-5 b(alen)m(t)150 888 y(to)26 b(command)e(substitution.)39 b(It)25 b(should)f(prin)m(t)h(a)g(list)h(of)f(completions,)i(one)e(p)s -(er)f(line,)j(to)f(the)f(standard)150 5340 y(output.)40 +(er)f(line,)j(to)f(the)f(standard)150 998 y(output.)40 b(Bac)m(kslash)32 b(ma)m(y)f(b)s(e)f(used)g(to)h(escap)s(e)g(a)f -(newline,)h(if)f(necessary)-8 b(.)p eop end -%%Page: 145 151 -TeXDict begin 145 150 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(145)275 299 y(After)24 +(newline,)h(if)f(necessary)-8 b(.)275 1148 y(After)24 b(all)i(of)f(the)f(p)s(ossible)g(completions)i(are)f(generated,)i(an)m (y)e(\014lter)g(sp)s(eci\014ed)e(with)i(the)g Ft(-X)e -Fu(option)150 408 y(is)34 b(applied)g(to)g(the)h(list.)52 +Fu(option)150 1258 y(is)34 b(applied)g(to)g(the)h(list.)52 b(The)33 b(\014lter)h(is)g(a)h(pattern)f(as)g(used)f(for)h(pathname)g -(expansion;)i(a)e(`)p Ft(&)p Fu(')g(in)g(the)150 518 +(expansion;)i(a)e(`)p Ft(&)p Fu(')g(in)g(the)150 1367 y(pattern)28 b(is)f(replaced)h(with)g(the)f(text)i(of)f(the)f(w)m(ord)h (b)s(eing)f(completed.)40 b(A)28 b(literal)h(`)p Ft(&)p -Fu(')f(ma)m(y)g(b)s(e)f(escap)s(ed)150 628 y(with)38 +Fu(')f(ma)m(y)g(b)s(e)f(escap)s(ed)150 1477 y(with)38 b(a)h(bac)m(kslash;)k(the)38 b(bac)m(kslash)h(is)g(remo)m(v)m(ed)g(b)s (efore)f(attempting)h(a)g(matc)m(h.)65 b(An)m(y)39 b(completion)150 -737 y(that)32 b(matc)m(hes)g(the)g(pattern)g(will)f(b)s(e)g(remo)m(v)m +1587 y(that)32 b(matc)m(hes)g(the)g(pattern)g(will)f(b)s(e)g(remo)m(v)m (ed)h(from)f(the)h(list.)44 b(A)32 b(leading)g(`)p Ft(!)p -Fu(')f(negates)i(the)f(pattern;)150 847 y(in)d(this)g(case)h(an)m(y)g +Fu(')f(negates)i(the)f(pattern;)150 1696 y(in)d(this)g(case)h(an)m(y)g (completion)h(not)e(matc)m(hing)h(the)g(pattern)f(will)h(b)s(e)e(remo)m -(v)m(ed.)42 b(If)29 b(the)g Ft(nocasematch)150 956 y +(v)m(ed.)42 b(If)29 b(the)g Ft(nocasematch)150 1806 y Fu(shell)k(option)f(\(see)i(the)e(description)g(of)h Ft(shopt)e Fu(in)h(Section)h(4.3.2)h([The)e(Shopt)g(Builtin],)h(page)g -(71\))h(is)150 1066 y(enabled,)d(the)f(matc)m(h)h(is)g(p)s(erformed)e +(73\))h(is)150 1915 y(enabled,)d(the)f(matc)m(h)h(is)g(p)s(erformed)e (without)h(regard)g(to)h(the)g(case)g(of)g(alphab)s(etic)g(c)m -(haracters.)275 1203 y(Finally)-8 b(,)42 b(an)m(y)c(pre\014x)g(and)f +(haracters.)275 2066 y(Finally)-8 b(,)42 b(an)m(y)c(pre\014x)g(and)f (su\016x)h(sp)s(eci\014ed)f(with)i(the)f Ft(-P)g Fu(and)g -Ft(-S)f Fu(options)i(are)g(added)f(to)h(eac)m(h)150 1313 +Ft(-S)f Fu(options)i(are)g(added)f(to)h(eac)m(h)150 2176 y(mem)m(b)s(er)31 b(of)g(the)h(completion)h(list,)f(and)f(the)h(result) f(is)h(returned)e(to)i(the)g(Readline)g(completion)h(co)s(de)150 -1422 y(as)e(the)f(list)h(of)g(p)s(ossible)f(completions.)275 -1559 y(If)d(the)h(previously-applied)f(actions)i(do)f(not)g(generate)h +2285 y(as)e(the)f(list)h(of)g(p)s(ossible)f(completions.)275 +2436 y(If)d(the)h(previously-applied)f(actions)i(do)f(not)g(generate)h (an)m(y)f(matc)m(hes,)i(and)d(the)h Ft(-o)h(dirnames)d -Fu(op-)150 1669 y(tion)j(w)m(as)f(supplied)f(to)i Ft(complete)d +Fu(op-)150 2545 y(tion)j(w)m(as)f(supplied)f(to)i Ft(complete)d Fu(when)h(the)h(compsp)s(ec)g(w)m(as)g(de\014ned,)g(directory)g(name)h -(completion)150 1778 y(is)h(attempted.)275 1915 y(If)35 +(completion)150 2655 y(is)h(attempted.)275 2806 y(If)35 b(the)g Ft(-o)30 b(plusdirs)j Fu(option)j(w)m(as)g(supplied)e(to)i Ft(complete)e Fu(when)g(the)i(compsp)s(ec)f(w)m(as)h(de\014ned,)150 -2025 y(directory)g(name)f(completion)i(is)e(attempted)h(and)f(an)m(y)h +2915 y(directory)g(name)f(completion)i(is)e(attempted)h(and)f(an)m(y)h (matc)m(hes)g(are)g(added)f(to)h(the)f(results)g(of)h(the)150 -2134 y(other)31 b(actions.)275 2271 y(By)g(default,)i(if)e(a)h(compsp)s +3025 y(other)31 b(actions.)275 3176 y(By)g(default,)i(if)e(a)h(compsp)s (ec)f(is)h(found,)f(whatev)m(er)h(it)g(generates)h(is)e(returned)g(to)h -(the)g(completion)150 2381 y(co)s(de)21 b(as)g(the)g(full)g(set)g(of)g +(the)g(completion)150 3285 y(co)s(de)21 b(as)g(the)g(full)g(set)g(of)g (p)s(ossible)f(completions.)39 b(The)20 b(default)h(Bash)g(completions) -h(are)g(not)f(attempted,)150 2491 y(and)30 b(the)g(Readline)h(default)f +h(are)g(not)f(attempted,)150 3395 y(and)30 b(the)g(Readline)h(default)f (of)g(\014lename)h(completion)g(is)f(disabled.)41 b(If)29 -b(the)i Ft(-o)e(bashdefault)e Fu(option)150 2600 y(w)m(as)d(supplied)e +b(the)i Ft(-o)e(bashdefault)e Fu(option)150 3504 y(w)m(as)d(supplied)e (to)j Ft(complete)c Fu(when)i(the)g(compsp)s(ec)h(w)m(as)g(de\014ned,)g -(the)f(default)h(Bash)g(completions)h(are)150 2710 y(attempted)j(if)f +(the)f(default)h(Bash)g(completions)h(are)150 3614 y(attempted)j(if)f (the)h(compsp)s(ec)f(generates)h(no)f(matc)m(hes.)41 b(If)27 b(the)g Ft(-o)j(default)25 b Fu(option)j(w)m(as)f(supplied)f -(to)150 2819 y Ft(complete)f Fu(when)h(the)h(compsp)s(ec)f(w)m(as)i +(to)150 3724 y Ft(complete)f Fu(when)h(the)h(compsp)s(ec)f(w)m(as)i (de\014ned,)e(Readline's)i(default)f(completion)h(will)f(b)s(e)f(p)s -(erformed)150 2929 y(if)k(the)h(compsp)s(ec)f(\(and,)g(if)h(attempted,) +(erformed)150 3833 y(if)k(the)h(compsp)s(ec)f(\(and,)g(if)h(attempted,) g(the)g(default)f(Bash)h(completions\))h(generate)g(no)e(matc)m(hes.) -275 3066 y(When)20 b(a)i(compsp)s(ec)e(indicates)i(that)g(directory)g +275 3984 y(When)20 b(a)i(compsp)s(ec)e(indicates)i(that)g(directory)g (name)f(completion)h(is)f(desired,)i(the)e(programmable)150 -3176 y(completion)31 b(functions)e(force)i(Readline)f(to)h(app)s(end)d +4093 y(completion)31 b(functions)e(force)i(Readline)f(to)h(app)s(end)d (a)i(slash)g(to)g(completed)h(names)e(whic)m(h)h(are)g(sym-)150 -3285 y(b)s(olic)40 b(links)g(to)h(directories,)j(sub)5 +4203 y(b)s(olic)40 b(links)g(to)h(directories,)j(sub)5 b(ject)40 b(to)h(the)f(v)-5 b(alue)41 b(of)f(the)g Fr(mark-directories) -45 b Fu(Readline)c(v)-5 b(ariable,)150 3395 y(regardless)31 +45 b Fu(Readline)c(v)-5 b(ariable,)150 4313 y(regardless)31 b(of)f(the)h(setting)g(of)g(the)f Fr(mark-symlink)m(ed-directories)36 -b Fu(Readline)31 b(v)-5 b(ariable.)275 3532 y(There)25 +b Fu(Readline)31 b(v)-5 b(ariable.)275 4463 y(There)25 b(is)i(some)g(supp)s(ort)e(for)h(dynamically)h(mo)s(difying)f (completions.)40 b(This)26 b(is)g(most)h(useful)f(when)150 -3641 y(used)40 b(in)h(com)m(bination)i(with)e(a)g(default)h(completion) +4573 y(used)40 b(in)h(com)m(bination)i(with)e(a)g(default)h(completion) g(sp)s(eci\014ed)f(with)g Ft(-D)p Fu(.)72 b(It's)42 b(p)s(ossible)f -(for)g(shell)150 3751 y(functions)28 b(executed)h(as)f(completion)i +(for)g(shell)150 4682 y(functions)28 b(executed)h(as)f(completion)i (handlers)d(to)i(indicate)g(that)g(completion)g(should)e(b)s(e)h -(retried)g(b)m(y)150 3861 y(returning)j(an)i(exit)g(status)f(of)h(124.) +(retried)g(b)m(y)150 4792 y(returning)j(an)i(exit)g(status)f(of)h(124.) 48 b(If)31 b(a)i(shell)f(function)g(returns)f(124,)k(and)c(c)m(hanges)j -(the)e(compsp)s(ec)150 3970 y(asso)s(ciated)43 b(with)e(the)g(command)g +(the)e(compsp)s(ec)150 4902 y(asso)s(ciated)43 b(with)e(the)g(command)g (on)g(whic)m(h)g(completion)i(is)e(b)s(eing)g(attempted)h(\(supplied)e -(as)i(the)150 4080 y(\014rst)29 b(argumen)m(t)h(when)e(the)i(function)f +(as)i(the)150 5011 y(\014rst)29 b(argumen)m(t)h(when)e(the)i(function)f (is)g(executed\),)j(programmable)d(completion)i(restarts)f(from)f(the) -150 4189 y(b)s(eginning,)e(with)g(an)h(attempt)g(to)g(\014nd)e(a)i(new) +150 5121 y(b)s(eginning,)e(with)g(an)h(attempt)g(to)g(\014nd)e(a)i(new) e(compsp)s(ec)i(for)f(that)h(command.)39 b(This)27 b(allo)m(ws)h(a)g -(set)g(of)150 4299 y(completions)33 b(to)f(b)s(e)g(built)f(dynamically) +(set)g(of)150 5230 y(completions)33 b(to)f(b)s(e)g(built)f(dynamically) i(as)f(completion)h(is)f(attempted,)h(rather)f(than)f(b)s(eing)g -(loaded)150 4408 y(all)g(at)g(once.)275 4545 y(F)-8 b(or)38 -b(instance,)h(assuming)e(that)h(there)f(is)h(a)f(library)g(of)g(compsp) -s(ecs,)i(eac)m(h)g(k)m(ept)e(in)g(a)h(\014le)f(corre-)150 -4655 y(sp)s(onding)g(to)j(the)f(name)f(of)h(the)g(command,)i(the)e +(loaded)150 5340 y(all)g(at)g(once.)p eop end +%%Page: 152 158 +TeXDict begin 152 157 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(152)275 299 y(F)-8 +b(or)38 b(instance,)h(assuming)e(that)h(there)f(is)h(a)f(library)g(of)g +(compsp)s(ecs,)i(eac)m(h)g(k)m(ept)e(in)g(a)h(\014le)f(corre-)150 +408 y(sp)s(onding)g(to)j(the)f(name)f(of)h(the)g(command,)i(the)e (follo)m(wing)h(default)f(completion)h(function)e(w)m(ould)150 -4765 y(load)31 b(completions)g(dynamically:)390 4902 -y Ft(_completion_loader\(\))390 5011 y({)581 5121 y(.)47 +518 y(load)31 b(completions)g(dynamically:)390 657 y +Ft(_completion_loader\(\))390 767 y({)581 877 y(.)47 b("/etc/bash_completion.d/$1)o(.sh)o(")42 b(>/dev/null)j(2>&1)i(&&)g -(return)f(124)390 5230 y(})390 5340 y(complete)g(-D)h(-F)g -(_completion_loader)c(-o)k(bashdefault)e(-o)i(default)p -eop end -%%Page: 146 152 -TeXDict begin 146 151 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(146)150 299 y Fs(8.7)68 -b(Programmable)47 b(Completion)f(Builtins)150 458 y Fu(Three)21 -b(builtin)g(commands)f(are)i(a)m(v)-5 b(ailable)24 b(to)e(manipulate)f -(the)h(programmable)f(completion)h(facilities:)150 568 -y(one)34 b(to)g(sp)s(ecify)f(ho)m(w)h(the)f(argumen)m(ts)h(to)g(a)g -(particular)g(command)f(are)h(to)g(b)s(e)f(completed,)j(and)d(t)m(w)m -(o)150 677 y(to)e(mo)s(dify)f(the)g(completion)i(as)e(it)h(is)g(happ)s -(ening.)150 893 y Ft(compgen)870 1046 y(compgen)46 b([)p -Fj(option)p Ft(])f([)p Fj(word)p Ft(])630 1199 y Fu(Generate)27 -b(p)s(ossible)e(completion)i(matc)m(hes)g(for)e Fr(w)m(ord)k -Fu(according)e(to)f(the)g Fr(option)p Fu(s,)h(whic)m(h)630 -1309 y(ma)m(y)32 b(b)s(e)f(an)m(y)h(option)g(accepted)g(b)m(y)g(the)f -Ft(complete)f Fu(builtin)h(with)g(the)g(exception)i(of)f -Ft(-p)630 1418 y Fu(and)39 b Ft(-r)p Fu(,)i(and)e(write)h(the)g(matc)m -(hes)g(to)g(the)g(standard)f(output.)68 b(When)39 b(using)g(the)h -Ft(-F)630 1528 y Fu(or)33 b Ft(-C)f Fu(options,)i(the)e(v)-5 -b(arious)33 b(shell)g(v)-5 b(ariables)33 b(set)g(b)m(y)g(the)g -(programmable)g(completion)630 1638 y(facilities,)g(while)d(a)m(v)-5 -b(ailable,)33 b(will)e(not)g(ha)m(v)m(e)g(useful)f(v)-5 -b(alues.)630 1791 y(The)34 b(matc)m(hes)h(will)g(b)s(e)f(generated)h -(in)f(the)h(same)g(w)m(a)m(y)g(as)g(if)f(the)h(programmable)f(com-)630 -1900 y(pletion)d(co)s(de)g(had)f(generated)i(them)e(directly)i(from)e -(a)h(completion)h(sp)s(eci\014cation)f(with)630 2010 -y(the)e(same)h(\015ags.)40 b(If)29 b Fr(w)m(ord)j Fu(is)d(sp)s -(eci\014ed,)g(only)g(those)h(completions)g(matc)m(hing)g -Fr(w)m(ord)j Fu(will)630 2120 y(b)s(e)d(displa)m(y)m(ed.)630 -2273 y(The)24 b(return)g(v)-5 b(alue)25 b(is)g(true)f(unless)g(an)h(in) +(return)f(124)390 986 y(})390 1096 y(complete)g(-D)h(-F)g +(_completion_loader)c(-o)k(bashdefault)e(-o)i(default)150 +1344 y Fs(8.7)68 b(Programmable)47 b(Completion)f(Builtins)150 +1503 y Fu(Three)21 b(builtin)g(commands)f(are)i(a)m(v)-5 +b(ailable)24 b(to)e(manipulate)f(the)h(programmable)f(completion)h +(facilities:)150 1613 y(one)34 b(to)g(sp)s(ecify)f(ho)m(w)h(the)f +(argumen)m(ts)h(to)g(a)g(particular)g(command)f(are)h(to)g(b)s(e)f +(completed,)j(and)d(t)m(w)m(o)150 1722 y(to)e(mo)s(dify)f(the)g +(completion)i(as)e(it)h(is)g(happ)s(ening.)150 1889 y +Ft(compgen)870 2026 y(compgen)46 b([-V)h Fj(varname)p +Ft(])e([)p Fj(option)p Ft(])h([)p Fj(word)p Ft(])630 +2163 y Fu(Generate)27 b(p)s(ossible)e(completion)i(matc)m(hes)g(for)e +Fr(w)m(ord)k Fu(according)e(to)f(the)g Fr(option)p Fu(s,)h(whic)m(h)630 +2272 y(ma)m(y)g(b)s(e)f(an)m(y)i(option)f(accepted)h(b)m(y)e(the)h +Ft(complete)e Fu(builtin)h(with)h(the)g(exceptions)g(of)g +Ft(-p)p Fu(,)630 2382 y Ft(-r)p Fu(,)j Ft(-D)p Fu(,)g +Ft(-E)p Fu(,)g(and)g Ft(-I)p Fu(,)g(and)g(write)g(the)h(matc)m(hes)g +(to)g(the)g(standard)e(output.)630 2519 y(If)f(the)i +Ft(-V)e Fu(option)h(is)g(supplied,)f Ft(compgen)f Fu(stores)j(the)f +(generated)h(completions)g(in)m(to)g(the)630 2628 y(indexed)24 +b(arra)m(y)g(v)-5 b(ariable)25 b Fr(v)-5 b(arname)29 +b Fu(instead)24 b(of)h(writing)f(them)g(to)h(the)f(standard)f(output.) +630 2765 y(When)38 b(using)g(the)h Ft(-F)e Fu(or)i Ft(-C)f +Fu(options,)j(the)d(v)-5 b(arious)39 b(shell)f(v)-5 b(ariables)39 +b(set)g(b)m(y)g(the)f(pro-)630 2875 y(grammable)31 b(completion)h +(facilities,)g(while)f(a)m(v)-5 b(ailable,)33 b(will)d(not)h(ha)m(v)m +(e)h(useful)d(v)-5 b(alues.)630 3012 y(The)34 b(matc)m(hes)h(will)g(b)s +(e)f(generated)h(in)f(the)h(same)g(w)m(a)m(y)g(as)g(if)f(the)h +(programmable)f(com-)630 3121 y(pletion)d(co)s(de)g(had)f(generated)i +(them)e(directly)i(from)e(a)h(completion)h(sp)s(eci\014cation)f(with) +630 3231 y(the)e(same)h(\015ags.)40 b(If)29 b Fr(w)m(ord)j +Fu(is)d(sp)s(eci\014ed,)g(only)g(those)h(completions)g(matc)m(hing)g +Fr(w)m(ord)j Fu(will)630 3340 y(b)s(e)d(displa)m(y)m(ed.)630 +3477 y(The)24 b(return)g(v)-5 b(alue)25 b(is)g(true)f(unless)g(an)h(in) m(v)-5 b(alid)25 b(option)g(is)g(supplied,)f(or)h(no)g(matc)m(hes)g(w)m -(ere)630 2382 y(generated.)150 2579 y Ft(complete)870 -2732 y(complete)46 b([-abcdefgjksuv])d([-o)k Fj(comp-option)p -Ft(])e([-DEI])h([-A)h Fj(action)p Ft(])e([-)870 2842 -y(G)i Fj(globpat)p Ft(])870 2951 y([-W)g Fj(wordlist)p -Ft(])e([-F)i Fj(function)p Ft(])e([-C)i Fj(command)p -Ft(])f([-X)h Fj(filterpat)p Ft(])870 3061 y([-P)g Fj(prefix)p -Ft(])f([-S)h Fj(suffix)p Ft(])e Fj(name)i Ft([)p Fj(name)f -Ft(...])870 3171 y(complete)g(-pr)g([-DEI])h([)p Fj(name)f -Ft(...)o(])630 3324 y Fu(Sp)s(ecify)37 b(ho)m(w)h(argumen)m(ts)f(to)i -(eac)m(h)g Fr(name)j Fu(should)37 b(b)s(e)g(completed.)63 -b(If)38 b(the)f Ft(-p)g Fu(option)630 3433 y(is)30 b(supplied,)e(or)i -(if)g(no)f(options)h(are)g(supplied,)f(existing)h(completion)h(sp)s -(eci\014cations)g(are)630 3543 y(prin)m(ted)24 b(in)h(a)g(w)m(a)m(y)g -(that)h(allo)m(ws)g(them)e(to)i(b)s(e)e(reused)f(as)i(input.)38 -b(The)24 b Ft(-r)g Fu(option)i(remo)m(v)m(es)630 3653 -y(a)i(completion)h(sp)s(eci\014cation)f(for)g(eac)m(h)h -Fr(name)p Fu(,)f(or,)h(if)e(no)h Fr(name)5 b Fu(s)27 -b(are)h(supplied,)g(all)g(com-)630 3762 y(pletion)i(sp)s -(eci\014cations.)42 b(The)29 b Ft(-D)g Fu(option)h(indicates)h(that)f -(other)g(supplied)e(options)j(and)630 3872 y(actions)c(should)e(apply)g -(to)i(the)f(\\default")h(command)e(completion;)k(that)e(is,)g -(completion)630 3981 y(attempted)g(on)f(a)h(command)f(for)g(whic)m(h)g -(no)g(completion)i(has)d(previously)h(b)s(een)g(de\014ned.)630 -4091 y(The)e Ft(-E)g Fu(option)h(indicates)g(that)g(other)g(supplied)e -(options)h(and)g(actions)i(should)d(apply)h(to)630 4200 -y(\\empt)m(y")33 b(command)e(completion;)i(that)f(is,)g(completion)h -(attempted)f(on)g(a)f(blank)g(line.)630 4310 y(The)24 -b Ft(-I)g Fu(option)h(indicates)g(that)g(other)g(supplied)e(options)h -(and)g(actions)i(should)d(apply)h(to)630 4420 y(completion)29 -b(on)g(the)f(initial)h(non-assignmen)m(t)g(w)m(ord)f(on)g(the)g(line,)i -(or)e(after)h(a)f(command)630 4529 y(delimiter)41 b(suc)m(h)g(as)f(`)p -Ft(;)p Fu(')h(or)g(`)p Ft(|)p Fu(',)i(whic)m(h)e(is)f(usually)h -(command)f(name)h(completion.)72 b(If)630 4639 y(m)m(ultiple)26 -b(options)g(are)g(supplied,)g(the)f Ft(-D)g Fu(option)h(tak)m(es)i -(precedence)e(o)m(v)m(er)g Ft(-E)p Fu(,)h(and)e(b)s(oth)630 -4748 y(tak)m(e)34 b(precedence)f(o)m(v)m(er)h Ft(-I)p -Fu(.)47 b(If)32 b(an)m(y)h(of)g Ft(-D)p Fu(,)g Ft(-E)p -Fu(,)f(or)h Ft(-I)f Fu(are)h(supplied,)f(an)m(y)h(other)g -Fr(name)630 4858 y Fu(argumen)m(ts)k(are)g(ignored;)j(these)d -(completions)h(only)e(apply)g(to)i(the)f(case)g(sp)s(eci\014ed)f(b)m(y) -630 4968 y(the)31 b(option.)630 5121 y(The)e(pro)s(cess)g(of)h -(applying)g(these)g(completion)g(sp)s(eci\014cations)h(when)d(w)m(ord)i -(completion)630 5230 y(is)35 b(attempted)h(is)f(describ)s(ed)f(ab)s(o)m -(v)m(e)j(\(see)f(Section)g(8.6)g([Programmable)g(Completion],)630 -5340 y(page)31 b(143\).)p eop end -%%Page: 147 153 -TeXDict begin 147 152 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(147)630 299 y(Other)28 -b(options,)i(if)f(sp)s(eci\014ed,)g(ha)m(v)m(e)h(the)f(follo)m(wing)i -(meanings.)40 b(The)29 b(argumen)m(ts)g(to)h(the)630 -408 y Ft(-G)p Fu(,)41 b Ft(-W)p Fu(,)h(and)c Ft(-X)h -Fu(options)h(\(and,)h(if)f(necessary)-8 b(,)42 b(the)e -Ft(-P)f Fu(and)f Ft(-S)h Fu(options\))h(should)f(b)s(e)630 -518 y(quoted)28 b(to)h(protect)g(them)f(from)f(expansion)h(b)s(efore)g -(the)g Ft(complete)e Fu(builtin)h(is)h(in)m(v)m(ok)m(ed.)630 -669 y Ft(-o)i Fj(comp-option)1110 778 y Fu(The)c Fr(comp-option)i +(ere)630 3587 y(generated.)150 3751 y Ft(complete)870 +3888 y(complete)46 b([-abcdefgjksuv])d([-o)k Fj(comp-option)p +Ft(])e([-DEI])h([-A)h Fj(action)p Ft(])870 3998 y([-G)g +Fj(globpat)p Ft(])e([-W)i Fj(wordlist)p Ft(])f([-F)h +Fj(function)p Ft(])e([-C)i Fj(command)p Ft(])870 4107 +y([-X)g Fj(filterpat)p Ft(])e([-P)i Fj(prefix)p Ft(])f([-S)h +Fj(suffix)p Ft(])e Fj(name)i Ft([)p Fj(name)f Ft(...])870 +4217 y(complete)g(-pr)g([-DEI])h([)p Fj(name)f Ft(...)o(])630 +4354 y Fu(Sp)s(ecify)30 b(ho)m(w)h(argumen)m(ts)h(to)g(eac)m(h)g +Fr(name)k Fu(should)30 b(b)s(e)g(completed.)44 b(If)31 +b(the)g Ft(-p)f Fu(option)i(is)630 4463 y(supplied,)e(or)g(if)h(no)f +(options)h(or)g Fr(name)5 b Fu(s)30 b(are)h(supplied,)f(existing)i +(completion)f(sp)s(eci\014ca-)630 4573 y(tions)24 b(are)f(prin)m(ted)g +(in)g(a)h(w)m(a)m(y)g(that)g(allo)m(ws)g(them)f(to)h(b)s(e)f(reused)f +(as)i(input.)37 b(The)23 b Ft(-r)f Fu(option)630 4682 +y(remo)m(v)m(es)29 b(a)f(completion)h(sp)s(eci\014cation)f(for)g(eac)m +(h)g Fr(name)p Fu(,)h(or,)f(if)g(no)f Fr(name)5 b Fu(s)28 +b(are)g(supplied,)630 4792 y(all)35 b(completion)g(sp)s +(eci\014cations.)53 b(The)34 b Ft(-D)f Fu(option)i(indicates)g(that)g +(other)f(supplied)f(op-)630 4902 y(tions)g(and)e(actions)j(should)d +(apply)h(to)h(the)g(\\default")g(command)f(completion;)j(that)e(is,)630 +5011 y(completion)j(attempted)g(on)e(a)h(command)g(for)f(whic)m(h)g(no) +h(completion)h(has)e(previously)630 5121 y(b)s(een)d(de\014ned.)43 +b(The)31 b Ft(-E)g Fu(option)g(indicates)i(that)f(other)g(supplied)e +(options)i(and)f(actions)630 5230 y(should)f(apply)i(to)g(\\empt)m(y")g +(command)g(completion;)h(that)f(is,)g(completion)h(attempted)630 +5340 y(on)24 b(a)g(blank)f(line.)39 b(The)23 b Ft(-I)h +Fu(option)g(indicates)h(that)f(other)g(supplied)e(options)j(and)e +(actions)p eop end +%%Page: 153 159 +TeXDict begin 153 158 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(153)630 299 y(should)32 +b(apply)g(to)i(completion)g(on)e(the)h(initial)i(non-assignmen)m(t)e(w) +m(ord)f(on)h(the)g(line,)h(or)630 408 y(after)f(a)g(command)g +(delimiter)h(suc)m(h)e(as)h(`)p Ft(;)p Fu(')g(or)g(`)p +Ft(|)p Fu(',)g(whic)m(h)g(is)g(usually)f(command)h(name)630 +518 y(completion.)64 b(If)38 b(m)m(ultiple)g(options)g(are)g(supplied,) +h(the)f Ft(-D)f Fu(option)h(tak)m(es)h(precedence)630 +628 y(o)m(v)m(er)29 b Ft(-E)p Fu(,)f(and)f(b)s(oth)g(tak)m(e)i +(precedence)f(o)m(v)m(er)h Ft(-I)p Fu(.)39 b(If)27 b(an)m(y)h(of)g +Ft(-D)p Fu(,)g Ft(-E)p Fu(,)f(or)h Ft(-I)f Fu(are)h(supplied,)630 +737 y(an)m(y)39 b(other)h Fr(name)k Fu(argumen)m(ts)39 +b(are)h(ignored;)j(these)d(completions)g(only)f(apply)g(to)h(the)630 +847 y(case)31 b(sp)s(eci\014ed)f(b)m(y)g(the)h(option.)630 +981 y(The)e(pro)s(cess)g(of)h(applying)g(these)g(completion)g(sp)s +(eci\014cations)h(when)d(w)m(ord)i(completion)630 1091 +y(is)35 b(attempted)h(is)f(describ)s(ed)f(ab)s(o)m(v)m(e)j(\(see)f +(Section)g(8.6)g([Programmable)g(Completion],)630 1200 +y(page)31 b(150\).)630 1335 y(Other)d(options,)i(if)f(sp)s(eci\014ed,)g +(ha)m(v)m(e)h(the)f(follo)m(wing)i(meanings.)40 b(The)29 +b(argumen)m(ts)g(to)h(the)630 1445 y Ft(-G)p Fu(,)41 +b Ft(-W)p Fu(,)h(and)c Ft(-X)h Fu(options)h(\(and,)h(if)f(necessary)-8 +b(,)42 b(the)e Ft(-P)f Fu(and)f Ft(-S)h Fu(options\))h(should)f(b)s(e) +630 1554 y(quoted)28 b(to)h(protect)g(them)f(from)f(expansion)h(b)s +(efore)g(the)g Ft(complete)e Fu(builtin)h(is)h(in)m(v)m(ok)m(ed.)630 +1714 y Ft(-o)i Fj(comp-option)1110 1823 y Fu(The)c Fr(comp-option)i Fu(con)m(trols)g(sev)m(eral)h(asp)s(ects)e(of)g(the)g(compsp)s(ec's)g -(b)s(eha)m(v-)1110 888 y(ior)g(b)s(ey)m(ond)f(the)g(simple)h +(b)s(eha)m(v-)1110 1933 y(ior)g(b)s(ey)m(ond)f(the)g(simple)h (generation)h(of)e(completions.)41 b Fr(comp-option)27 -b Fu(ma)m(y)1110 998 y(b)s(e)j(one)g(of:)1110 1148 y -Ft(bashdefault)1590 1258 y Fu(P)m(erform)d(the)h(rest)f(of)h(the)g -(default)f(Bash)h(completions)g(if)g(the)1590 1367 y(compsp)s(ec)i -(generates)i(no)e(matc)m(hes.)1110 1518 y Ft(default)144 +b Fu(ma)m(y)1110 2042 y(b)s(e)j(one)g(of:)1110 2202 y +Ft(bashdefault)1590 2311 y Fu(P)m(erform)d(the)h(rest)f(of)h(the)g +(default)f(Bash)h(completions)g(if)g(the)1590 2421 y(compsp)s(ec)i +(generates)i(no)e(matc)m(hes.)1110 2580 y Ft(default)144 b Fu(Use)22 b(Readline's)g(default)g(\014lename)g(completion)g(if)g -(the)g(comp-)1590 1628 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110 -1778 y Ft(dirnames)96 b Fu(P)m(erform)46 b(directory)g(name)h -(completion)g(if)f(the)g(compsp)s(ec)1590 1888 y(generates)32 -b(no)e(matc)m(hes.)1110 2039 y Ft(filenames)1590 2148 +(the)g(comp-)1590 2690 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110 +2849 y Ft(dirnames)96 b Fu(P)m(erform)46 b(directory)g(name)h +(completion)g(if)f(the)g(compsp)s(ec)1590 2959 y(generates)32 +b(no)e(matc)m(hes.)1110 3118 y Ft(filenames)1590 3228 y Fu(T)-8 b(ell)40 b(Readline)f(that)h(the)f(compsp)s(ec)f(generates)j -(\014lenames,)1590 2258 y(so)29 b(it)h(can)f(p)s(erform)f(an)m(y)h +(\014lenames,)1590 3337 y(so)29 b(it)h(can)f(p)s(erform)f(an)m(y)h (\014lename-sp)s(eci\014c)h(pro)s(cessing)e(\(lik)m(e)1590 -2367 y(adding)22 b(a)g(slash)g(to)h(directory)f(names,)i(quoting)f(sp)s -(ecial)f(c)m(har-)1590 2477 y(acters,)39 b(or)d(suppressing)f(trailing) -i(spaces\).)59 b(This)35 b(option)i(is)1590 2587 y(in)m(tended)30 +3447 y(adding)22 b(a)g(slash)g(to)h(directory)f(names,)i(quoting)f(sp)s +(ecial)f(c)m(har-)1590 3557 y(acters,)39 b(or)d(suppressing)f(trailing) +i(spaces\).)59 b(This)35 b(option)i(is)1590 3666 y(in)m(tended)30 b(to)g(b)s(e)g(used)f(with)g(shell)i(functions)e(sp)s(eci\014ed)g(with) -1590 2696 y Ft(-F)p Fu(.)1110 2847 y Ft(noquote)144 b -Fu(T)-8 b(ell)28 b(Readline)g(not)g(to)g(quote)g(the)g(completed)g(w)m -(ords)f(if)h(they)1590 2956 y(are)j(\014lenames)f(\(quoting)h -(\014lenames)g(is)f(the)h(default\).)1110 3107 y Ft(nosort)192 -b Fu(T)-8 b(ell)23 b(Readline)g(not)f(to)h(sort)g(the)f(list)h(of)f(p)s -(ossible)g(completions)1590 3217 y(alphab)s(etically)-8 -b(.)1110 3367 y Ft(nospace)144 b Fu(T)-8 b(ell)40 b(Readline)g(not)g -(to)g(app)s(end)d(a)j(space)g(\(the)f(default\))h(to)1590 -3477 y(w)m(ords)30 b(completed)h(at)g(the)g(end)f(of)g(the)h(line.)1110 -3628 y Ft(plusdirs)96 b Fu(After)30 b(an)m(y)h(matc)m(hes)g(de\014ned)d -(b)m(y)i(the)g(compsp)s(ec)g(are)g(gener-)1590 3737 y(ated,)g +1590 3776 y Ft(-F)p Fu(.)1110 3935 y Ft(fullquote)1590 +4045 y Fu(T)-8 b(ell)32 b(Readline)g(to)g(quote)f(all)h(the)g +(completed)g(w)m(ords)e(ev)m(en)i(if)1590 4154 y(they)f(are)f(not)h +(\014lenames.)1110 4314 y Ft(noquote)144 b Fu(T)-8 b(ell)28 +b(Readline)g(not)g(to)g(quote)g(the)g(completed)g(w)m(ords)f(if)h(they) +1590 4423 y(are)j(\014lenames)f(\(quoting)h(\014lenames)g(is)f(the)h +(default\).)1110 4583 y Ft(nosort)192 b Fu(T)-8 b(ell)23 +b(Readline)g(not)f(to)h(sort)g(the)f(list)h(of)f(p)s(ossible)g +(completions)1590 4692 y(alphab)s(etically)-8 b(.)1110 +4852 y Ft(nospace)144 b Fu(T)-8 b(ell)40 b(Readline)g(not)g(to)g(app)s +(end)d(a)j(space)g(\(the)f(default\))h(to)1590 4961 y(w)m(ords)30 +b(completed)h(at)g(the)g(end)f(of)g(the)h(line.)1110 +5121 y Ft(plusdirs)96 b Fu(After)30 b(an)m(y)h(matc)m(hes)g(de\014ned)d +(b)m(y)i(the)g(compsp)s(ec)g(are)g(gener-)1590 5230 y(ated,)g (directory)f(name)g(completion)i(is)d(attempted)i(and)f(an)m(y)1590 -3847 y(matc)m(hes)j(are)e(added)g(to)h(the)g(results)f(of)g(the)h -(other)g(actions.)630 3998 y Ft(-A)f Fj(action)66 b Fu(The)25 -b Fr(action)h Fu(ma)m(y)g(b)s(e)e(one)h(of)h(the)f(follo)m(wing)i(to)e -(generate)i(a)e(list)h(of)f(p)s(ossible)1110 4107 y(completions:)1110 -4258 y Ft(alias)240 b Fu(Alias)31 b(names.)41 b(Ma)m(y)31 -b(also)h(b)s(e)e(sp)s(eci\014ed)f(as)i Ft(-a)p Fu(.)1110 -4408 y Ft(arrayvar)96 b Fu(Arra)m(y)31 b(v)-5 b(ariable)31 -b(names.)1110 4559 y Ft(binding)144 b Fu(Readline)30 -b(k)m(ey)f(binding)f(names)h(\(see)h(Section)f(8.4)h([Bindable)1590 -4669 y(Readline)h(Commands],)f(page)h(133\).)1110 4819 -y Ft(builtin)144 b Fu(Names)21 b(of)g(shell)f(builtin)h(commands.)37 -b(Ma)m(y)21 b(also)h(b)s(e)e(sp)s(eci\014ed)1590 4929 -y(as)31 b Ft(-b)p Fu(.)1110 5080 y Ft(command)144 b Fu(Command)29 +5340 y(matc)m(hes)j(are)e(added)g(to)h(the)g(results)f(of)g(the)h +(other)g(actions.)p eop end +%%Page: 154 160 +TeXDict begin 154 159 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(154)630 299 y Ft(-A)30 +b Fj(action)66 b Fu(The)25 b Fr(action)h Fu(ma)m(y)g(b)s(e)e(one)h(of)h +(the)f(follo)m(wing)i(to)e(generate)i(a)e(list)h(of)f(p)s(ossible)1110 +408 y(completions:)1110 570 y Ft(alias)240 b Fu(Alias)31 +b(names.)41 b(Ma)m(y)31 b(also)h(b)s(e)e(sp)s(eci\014ed)f(as)i +Ft(-a)p Fu(.)1110 732 y Ft(arrayvar)96 b Fu(Arra)m(y)31 +b(v)-5 b(ariable)31 b(names.)1110 894 y Ft(binding)144 +b Fu(Readline)30 b(k)m(ey)f(binding)f(names)h(\(see)h(Section)f(8.4)h +([Bindable)1590 1004 y(Readline)h(Commands],)f(page)h(139\).)1110 +1166 y Ft(builtin)144 b Fu(Names)21 b(of)g(shell)f(builtin)h(commands.) +37 b(Ma)m(y)21 b(also)h(b)s(e)e(sp)s(eci\014ed)1590 1276 +y(as)31 b Ft(-b)p Fu(.)1110 1438 y Ft(command)144 b Fu(Command)29 b(names.)41 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f(as)i -Ft(-c)p Fu(.)1110 5230 y Ft(directory)1590 5340 y Fu(Directory)h +Ft(-c)p Fu(.)1110 1600 y Ft(directory)1590 1709 y Fu(Directory)h (names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)g(as)g -Ft(-d)p Fu(.)p eop end -%%Page: 148 154 -TeXDict begin 148 153 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(148)1110 299 y Ft(disabled)96 -b Fu(Names)31 b(of)g(disabled)f(shell)g(builtins.)1110 -455 y Ft(enabled)144 b Fu(Names)31 b(of)g(enabled)f(shell)g(builtins.) -1110 610 y Ft(export)192 b Fu(Names)34 b(of)f(exp)s(orted)f(shell)h(v) --5 b(ariables.)49 b(Ma)m(y)35 b(also)e(b)s(e)g(sp)s(eci-)1590 -720 y(\014ed)d(as)g Ft(-e)p Fu(.)1110 876 y Ft(file)288 +Ft(-d)p Fu(.)1110 1871 y Ft(disabled)96 b Fu(Names)31 +b(of)g(disabled)f(shell)g(builtins.)1110 2033 y Ft(enabled)144 +b Fu(Names)31 b(of)g(enabled)f(shell)g(builtins.)1110 +2195 y Ft(export)192 b Fu(Names)34 b(of)f(exp)s(orted)f(shell)h(v)-5 +b(ariables.)49 b(Ma)m(y)35 b(also)e(b)s(e)g(sp)s(eci-)1590 +2305 y(\014ed)d(as)g Ft(-e)p Fu(.)1110 2467 y Ft(file)288 b Fu(File)32 b(names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f -(as)i Ft(-f)p Fu(.)1110 1031 y Ft(function)96 b Fu(Names)31 -b(of)g(shell)f(functions.)1110 1187 y Ft(group)240 b +(as)i Ft(-f)p Fu(.)1110 2629 y Ft(function)96 b Fu(Names)31 +b(of)g(shell)f(functions.)1110 2791 y Ft(group)240 b Fu(Group)30 b(names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)g -(as)g Ft(-g)p Fu(.)1110 1343 y Ft(helptopic)1590 1452 +(as)g Ft(-g)p Fu(.)1110 2953 y Ft(helptopic)1590 3062 y Fu(Help)37 b(topics)g(as)g(accepted)h(b)m(y)e(the)h -Ft(help)f Fu(builtin)g(\(see)h(Sec-)1590 1562 y(tion)31 -b(4.2)g([Bash)g(Builtins],)g(page)g(55\).)1110 1718 y +Ft(help)f Fu(builtin)g(\(see)h(Sec-)1590 3172 y(tion)31 +b(4.2)g([Bash)g(Builtins],)g(page)g(57\).)1110 3334 y Ft(hostname)96 b Fu(Hostnames,)89 b(as)76 b(tak)m(en)h(from)f(the)g -(\014le)h(sp)s(eci\014ed)e(b)m(y)1590 1827 y(the)55 b +(\014le)h(sp)s(eci\014ed)e(b)m(y)1590 3444 y(the)55 b Ft(HOSTFILE)e Fu(shell)j(v)-5 b(ariable)56 b(\(see)g(Section)g(5.2)h -([Bash)1590 1937 y(V)-8 b(ariables],)32 b(page)f(78\).)1110 -2093 y Ft(job)336 b Fu(Job)31 b(names,)h(if)g(job)f(con)m(trol)i(is)f +([Bash)1590 3553 y(V)-8 b(ariables],)32 b(page)f(81\).)1110 +3715 y Ft(job)336 b Fu(Job)31 b(names,)h(if)g(job)f(con)m(trol)i(is)f (activ)m(e.)46 b(Ma)m(y)33 b(also)g(b)s(e)e(sp)s(eci-)1590 -2202 y(\014ed)f(as)g Ft(-j)p Fu(.)1110 2358 y Ft(keyword)144 +3825 y(\014ed)f(as)g Ft(-j)p Fu(.)1110 3987 y Ft(keyword)144 b Fu(Shell)30 b(reserv)m(ed)h(w)m(ords.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f(as)i Ft(-k)p Fu(.)1110 -2514 y Ft(running)144 b Fu(Names)31 b(of)g(running)d(jobs,)i(if)h(job)f -(con)m(trol)h(is)g(activ)m(e.)1110 2669 y Ft(service)144 +4149 y Ft(running)144 b Fu(Names)31 b(of)g(running)d(jobs,)i(if)h(job)f +(con)m(trol)h(is)g(activ)m(e.)1110 4311 y Ft(service)144 b Fu(Service)31 b(names.)41 b(Ma)m(y)31 b(also)g(b)s(e)f(sp)s -(eci\014ed)g(as)g Ft(-s)p Fu(.)1110 2825 y Ft(setopt)192 +(eci\014ed)g(as)g Ft(-s)p Fu(.)1110 4473 y Ft(setopt)192 b Fu(V)-8 b(alid)39 b(argumen)m(ts)g(for)f(the)h Ft(-o)e -Fu(option)i(to)g(the)g Ft(set)e Fu(builtin)1590 2935 -y(\(see)31 b(Section)h(4.3.1)g([The)e(Set)g(Builtin],)i(page)f(67\).) -1110 3091 y Ft(shopt)240 b Fu(Shell)40 b(option)g(names)g(as)g +Fu(option)i(to)g(the)g Ft(set)e Fu(builtin)1590 4582 +y(\(see)31 b(Section)h(4.3.1)g([The)e(Set)g(Builtin],)i(page)f(69\).) +1110 4744 y Ft(shopt)240 b Fu(Shell)40 b(option)g(names)g(as)g (accepted)i(b)m(y)e(the)g Ft(shopt)e Fu(builtin)1590 -3200 y(\(see)31 b(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(55\).) -1110 3356 y Ft(signal)192 b Fu(Signal)31 b(names.)1110 -3512 y Ft(stopped)144 b Fu(Names)31 b(of)g(stopp)s(ed)e(jobs,)h(if)g -(job)g(con)m(trol)i(is)f(activ)m(e.)1110 3667 y Ft(user)288 +4854 y(\(see)31 b(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(57\).) +1110 5016 y Ft(signal)192 b Fu(Signal)31 b(names.)1110 +5178 y Ft(stopped)144 b Fu(Names)31 b(of)g(stopp)s(ed)e(jobs,)h(if)g +(job)g(con)m(trol)i(is)f(activ)m(e.)1110 5340 y Ft(user)288 b Fu(User)30 b(names.)41 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f -(as)i Ft(-u)p Fu(.)1110 3823 y Ft(variable)96 b Fu(Names)36 -b(of)g(all)g(shell)g(v)-5 b(ariables.)56 b(Ma)m(y)37 -b(also)f(b)s(e)f(sp)s(eci\014ed)g(as)1590 3933 y Ft(-v)p -Fu(.)630 4088 y Ft(-C)30 b Fj(command)1110 4198 y Fr(command)35 -b Fu(is)e(executed)g(in)e(a)i(subshell)e(en)m(vironmen)m(t,)i(and)f -(its)g(output)g(is)1110 4308 y(used)38 b(as)h(the)g(p)s(ossible)f -(completions.)67 b(Argumen)m(ts)39 b(are)g(passed)f(as)h(with)1110 -4417 y(the)31 b Ft(-F)e Fu(option.)630 4573 y Ft(-F)h -Fj(function)1110 4682 y Fu(The)39 b(shell)g(function)g -Fr(function)g Fu(is)g(executed)h(in)f(the)g(curren)m(t)g(shell)g(en)m -(vi-)1110 4792 y(ronmen)m(t.)72 b(When)41 b(it)g(is)g(executed,)k($1)c -(is)g(the)g(name)g(of)g(the)g(command)1110 4902 y(whose)34 -b(argumen)m(ts)h(are)g(b)s(eing)f(completed,)j($2)e(is)f(the)h(w)m(ord) -f(b)s(eing)g(com-)1110 5011 y(pleted,)44 b(and)c($3)i(is)e(the)h(w)m -(ord)g(preceding)f(the)h(w)m(ord)f(b)s(eing)h(completed,)1110 -5121 y(as)g(describ)s(ed)f(ab)s(o)m(v)m(e)i(\(see)g(Section)f(8.6)h -([Programmable)g(Completion],)1110 5230 y(page)30 b(143\).)42 -b(When)29 b(it)h(\014nishes,)e(the)h(p)s(ossible)g(completions)h(are)g -(retriev)m(ed)1110 5340 y(from)g(the)g(v)-5 b(alue)31 -b(of)g(the)f Ft(COMPREPLY)e Fu(arra)m(y)j(v)-5 b(ariable.)p -eop end -%%Page: 149 155 -TeXDict begin 149 154 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(149)630 299 y Ft(-G)30 -b Fj(globpat)1110 408 y Fu(The)39 b(\014lename)h(expansion)g(pattern)g -Fr(globpat)j Fu(is)d(expanded)f(to)h(generate)1110 518 -y(the)31 b(p)s(ossible)e(completions.)630 708 y Ft(-P)h +(as)i Ft(-u)p Fu(.)p eop end +%%Page: 155 161 +TeXDict begin 155 160 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(155)1110 299 y Ft(variable)96 +b Fu(Names)36 b(of)g(all)g(shell)g(v)-5 b(ariables.)56 +b(Ma)m(y)37 b(also)f(b)s(e)f(sp)s(eci\014ed)g(as)1590 +408 y Ft(-v)p Fu(.)630 573 y Ft(-C)30 b Fj(command)1110 +682 y Fr(command)35 b Fu(is)e(executed)g(in)e(a)i(subshell)e(en)m +(vironmen)m(t,)i(and)f(its)g(output)g(is)1110 792 y(used)38 +b(as)h(the)g(p)s(ossible)f(completions.)67 b(Argumen)m(ts)39 +b(are)g(passed)f(as)h(with)1110 902 y(the)31 b Ft(-F)e +Fu(option.)630 1066 y Ft(-F)h Fj(function)1110 1176 y +Fu(The)39 b(shell)g(function)g Fr(function)g Fu(is)g(executed)h(in)f +(the)g(curren)m(t)g(shell)g(en)m(vi-)1110 1285 y(ronmen)m(t.)72 +b(When)41 b(it)g(is)g(executed,)k($1)c(is)g(the)g(name)g(of)g(the)g +(command)1110 1395 y(whose)34 b(argumen)m(ts)h(are)g(b)s(eing)f +(completed,)j($2)e(is)f(the)h(w)m(ord)f(b)s(eing)g(com-)1110 +1504 y(pleted,)44 b(and)c($3)i(is)e(the)h(w)m(ord)g(preceding)f(the)h +(w)m(ord)f(b)s(eing)h(completed,)1110 1614 y(as)g(describ)s(ed)f(ab)s +(o)m(v)m(e)i(\(see)g(Section)f(8.6)h([Programmable)g(Completion],)1110 +1724 y(page)30 b(150\).)42 b(When)29 b(it)h(\014nishes,)e(the)h(p)s +(ossible)g(completions)h(are)g(retriev)m(ed)1110 1833 +y(from)g(the)g(v)-5 b(alue)31 b(of)g(the)f Ft(COMPREPLY)e +Fu(arra)m(y)j(v)-5 b(ariable.)630 1998 y Ft(-G)30 b Fj(globpat)1110 +2107 y Fu(The)39 b(\014lename)h(expansion)g(pattern)g +Fr(globpat)j Fu(is)d(expanded)f(to)h(generate)1110 2217 +y(the)31 b(p)s(ossible)e(completions.)630 2381 y Ft(-P)h Fj(prefix)66 b Fr(pre\014x)39 b Fu(is)34 b(added)f(at)i(the)f(b)s (eginning)f(of)i(eac)m(h)g(p)s(ossible)e(completion)i(after)1110 -817 y(all)c(other)g(options)g(ha)m(v)m(e)g(b)s(een)f(applied.)630 -1007 y Ft(-S)g Fj(suffix)66 b Fr(su\016x)26 b Fu(is)20 +2491 y(all)c(other)g(options)g(ha)m(v)m(e)g(b)s(een)f(applied.)630 +2655 y Ft(-S)g Fj(suffix)66 b Fr(su\016x)26 b Fu(is)20 b(app)s(ended)f(to)i(eac)m(h)h(p)s(ossible)e(completion)i(after)f(all)g -(other)g(options)1110 1116 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)630 -1306 y Ft(-W)h Fj(wordlist)1110 1416 y Fu(The)24 b Fr(w)m(ordlist)k +(other)g(options)1110 2765 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)630 +2929 y Ft(-W)h Fj(wordlist)1110 3039 y Fu(The)24 b Fr(w)m(ordlist)k Fu(is)d(split)g(using)f(the)h(c)m(haracters)i(in)d(the)i -Ft(IFS)e Fu(sp)s(ecial)h(v)-5 b(ariable)1110 1525 y(as)36 +Ft(IFS)e Fu(sp)s(ecial)h(v)-5 b(ariable)1110 3148 y(as)36 b(delimiters,)i(and)e(eac)m(h)h(resultan)m(t)g(w)m(ord)e(is)h -(expanded.)57 b(The)35 b(p)s(ossible)1110 1635 y(completions)c(are)e +(expanded.)57 b(The)35 b(p)s(ossible)1110 3258 y(completions)c(are)e (the)h(mem)m(b)s(ers)f(of)g(the)h(resultan)m(t)g(list)g(whic)m(h)f -(matc)m(h)i(the)1110 1744 y(w)m(ord)f(b)s(eing)g(completed.)630 -1934 y Ft(-X)g Fj(filterpat)1110 2043 y Fr(\014lterpat)d +(matc)m(h)i(the)1110 3367 y(w)m(ord)f(b)s(eing)g(completed.)630 +3532 y Ft(-X)g Fj(filterpat)1110 3641 y Fr(\014lterpat)d Fu(is)e(a)g(pattern)g(as)f(used)g(for)h(\014lename)g(expansion.)38 -b(It)25 b(is)g(applied)f(to)1110 2153 y(the)30 b(list)f(of)h(p)s +b(It)25 b(is)g(applied)f(to)1110 3751 y(the)30 b(list)f(of)h(p)s (ossible)f(completions)h(generated)h(b)m(y)e(the)g(preceding)h(options) -1110 2263 y(and)d(argumen)m(ts,)i(and)e(eac)m(h)i(completion)g(matc)m -(hing)g Fr(\014lterpat)h Fu(is)e(remo)m(v)m(ed)1110 2372 +1110 3861 y(and)d(argumen)m(ts,)i(and)e(eac)m(h)i(completion)g(matc)m +(hing)g Fr(\014lterpat)h Fu(is)e(remo)m(v)m(ed)1110 3970 y(from)i(the)h(list.)42 b(A)30 b(leading)i(`)p Ft(!)p Fu(')e(in)g Fr(\014lterpat)j Fu(negates)f(the)f(pattern;)g(in)f(this) -1110 2482 y(case,)i(an)m(y)e(completion)i(not)f(matc)m(hing)g -Fr(\014lterpat)i Fu(is)d(remo)m(v)m(ed.)630 2671 y(The)35 +1110 4080 y(case,)i(an)m(y)e(completion)i(not)f(matc)m(hing)g +Fr(\014lterpat)i Fu(is)d(remo)m(v)m(ed.)630 4244 y(The)35 b(return)g(v)-5 b(alue)37 b(is)f(true)f(unless)h(an)f(in)m(v)-5 b(alid)37 b(option)f(is)g(supplied,)g(an)g(option)h(other)630 -2781 y(than)h Ft(-p)g Fu(or)g Ft(-r)f Fu(is)h(supplied)f(without)i(a)f -Fr(name)44 b Fu(argumen)m(t,)c(an)e(attempt)i(is)e(made)g(to)630 -2891 y(remo)m(v)m(e)32 b(a)e(completion)i(sp)s(eci\014cation)f(for)f(a) -h Fr(name)k Fu(for)30 b(whic)m(h)g(no)g(sp)s(eci\014cation)h(exists,) -630 3000 y(or)f(an)h(error)f(o)s(ccurs)g(adding)g(a)g(completion)i(sp)s -(eci\014cation.)150 3190 y Ft(compopt)870 3339 y(compopt)46 -b([-o)h Fj(option)p Ft(])f([-DEI])g([+o)h Fj(option)p -Ft(])e([)p Fj(name)p Ft(])630 3489 y Fu(Mo)s(dify)33 -b(completion)h(options)g(for)f(eac)m(h)h Fr(name)39 b -Fu(according)34 b(to)g(the)f Fr(option)p Fu(s,)i(or)e(for)g(the)630 -3598 y(curren)m(tly-executing)46 b(completion)f(if)f(no)f -Fr(name)5 b Fu(s)44 b(are)h(supplied.)80 b(If)43 b(no)h -Fr(option)p Fu(s)h(are)630 3708 y(giv)m(en,)30 b(displa)m(y)e(the)g -(completion)h(options)g(for)e(eac)m(h)i Fr(name)34 b -Fu(or)27 b(the)i(curren)m(t)e(completion.)630 3818 y(The)f(p)s(ossible) -g(v)-5 b(alues)27 b(of)f Fr(option)h Fu(are)g(those)g(v)-5 -b(alid)26 b(for)g(the)h Ft(complete)d Fu(builtin)i(describ)s(ed)630 -3927 y(ab)s(o)m(v)m(e.)41 b(The)27 b Ft(-D)f Fu(option)i(indicates)g -(that)g(other)f(supplied)f(options)i(should)e(apply)h(to)h(the)630 -4037 y(\\default")33 b(command)f(completion;)i(that)f(is,)g(completion) -g(attempted)g(on)f(a)g(command)630 4146 y(for)g(whic)m(h)g(no)g -(completion)i(has)e(previously)g(b)s(een)g(de\014ned.)45 -b(The)32 b Ft(-E)f Fu(option)i(indicates)630 4256 y(that)23 -b(other)f(supplied)e(options)j(should)e(apply)g(to)i(\\empt)m(y")g -(command)f(completion;)k(that)630 4366 y(is,)36 b(completion)g -(attempted)g(on)e(a)h(blank)g(line.)54 b(The)34 b Ft(-I)g -Fu(option)h(indicates)g(that)h(other)630 4475 y(supplied)23 -b(options)i(should)f(apply)g(to)i(completion)g(on)e(the)h(initial)h -(non-assignmen)m(t)f(w)m(ord)630 4585 y(on)37 b(the)f(line,)j(or)e -(after)g(a)g(command)f(delimiter)i(suc)m(h)e(as)h(`)p -Ft(;)p Fu(')g(or)f(`)p Ft(|)p Fu(',)j(whic)m(h)e(is)f(usually)630 -4694 y(command)30 b(name)h(completion.)630 4844 y(If)k(m)m(ultiple)i -(options)f(are)g(supplied,)g(the)g Ft(-D)g Fu(option)g(tak)m(es)h -(precedence)g(o)m(v)m(er)g Ft(-E)p Fu(,)g(and)630 4954 -y(b)s(oth)30 b(tak)m(e)i(precedence)e(o)m(v)m(er)i Ft(-I)630 -5103 y Fu(The)23 b(return)g(v)-5 b(alue)25 b(is)f(true)g(unless)f(an)h -(in)m(v)-5 b(alid)24 b(option)h(is)f(supplied,)g(an)g(attempt)h(is)f -(made)630 5213 y(to)32 b(mo)s(dify)f(the)g(options)h(for)f(a)h +4354 y(than)29 b Ft(-p)p Fu(,)g Ft(-r)p Fu(,)h Ft(-D)p +Fu(,)f Ft(-E)p Fu(,)g(or)h Ft(-I)e Fu(is)i(supplied)e(without)h(a)h +Fr(name)35 b Fu(argumen)m(t,)30 b(an)f(attempt)i(is)630 +4463 y(made)24 b(to)g(remo)m(v)m(e)i(a)e(completion)h(sp)s +(eci\014cation)g(for)e(a)h Fr(name)29 b Fu(for)24 b(whic)m(h)f(no)h(sp) +s(eci\014cation)630 4573 y(exists,)31 b(or)g(an)f(error)g(o)s(ccurs)g +(adding)g(a)h(completion)g(sp)s(eci\014cation.)150 4737 +y Ft(compopt)870 4874 y(compopt)46 b([-o)h Fj(option)p +Ft(])f([-DEI])g([+o)h Fj(option)p Ft(])e([)p Fj(name)p +Ft(])630 5011 y Fu(Mo)s(dify)33 b(completion)h(options)g(for)f(eac)m(h) +h Fr(name)39 b Fu(according)34 b(to)g(the)f Fr(option)p +Fu(s,)i(or)e(for)g(the)630 5121 y(curren)m(tly-executing)46 +b(completion)f(if)f(no)f Fr(name)5 b Fu(s)44 b(are)h(supplied.)80 +b(If)43 b(no)h Fr(option)p Fu(s)h(are)630 5230 y(giv)m(en,)30 +b(displa)m(y)e(the)g(completion)h(options)g(for)e(eac)m(h)i +Fr(name)34 b Fu(or)27 b(the)i(curren)m(t)e(completion.)630 +5340 y(The)f(p)s(ossible)g(v)-5 b(alues)27 b(of)f Fr(option)h +Fu(are)g(those)g(v)-5 b(alid)26 b(for)g(the)h Ft(complete)d +Fu(builtin)i(describ)s(ed)p eop end +%%Page: 156 162 +TeXDict begin 156 161 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(156)630 299 y(ab)s(o)m(v)m(e.)41 +b(The)27 b Ft(-D)f Fu(option)i(indicates)g(that)g(other)f(supplied)f +(options)i(should)e(apply)h(to)h(the)630 408 y(\\default")33 +b(command)f(completion;)i(that)f(is,)g(completion)g(attempted)g(on)f(a) +g(command)630 518 y(for)g(whic)m(h)g(no)g(completion)i(has)e +(previously)g(b)s(een)g(de\014ned.)45 b(The)32 b Ft(-E)f +Fu(option)i(indicates)630 628 y(that)23 b(other)f(supplied)e(options)j +(should)e(apply)g(to)i(\\empt)m(y")g(command)f(completion;)k(that)630 +737 y(is,)36 b(completion)g(attempted)g(on)e(a)h(blank)g(line.)54 +b(The)34 b Ft(-I)g Fu(option)h(indicates)g(that)h(other)630 +847 y(supplied)23 b(options)i(should)f(apply)g(to)i(completion)g(on)e +(the)h(initial)h(non-assignmen)m(t)f(w)m(ord)630 956 +y(on)37 b(the)f(line,)j(or)e(after)g(a)g(command)f(delimiter)i(suc)m(h) +e(as)h(`)p Ft(;)p Fu(')g(or)f(`)p Ft(|)p Fu(',)j(whic)m(h)e(is)f +(usually)630 1066 y(command)30 b(name)h(completion.)630 +1200 y(If)k(m)m(ultiple)i(options)f(are)g(supplied,)g(the)g +Ft(-D)g Fu(option)g(tak)m(es)h(precedence)g(o)m(v)m(er)g +Ft(-E)p Fu(,)g(and)630 1310 y(b)s(oth)30 b(tak)m(e)i(precedence)e(o)m +(v)m(er)i Ft(-I)630 1444 y Fu(The)23 b(return)g(v)-5 +b(alue)25 b(is)f(true)g(unless)f(an)h(in)m(v)-5 b(alid)24 +b(option)h(is)f(supplied,)g(an)g(attempt)h(is)f(made)630 +1554 y(to)32 b(mo)s(dify)f(the)g(options)h(for)f(a)h Fr(name)k Fu(for)31 b(whic)m(h)g(no)g(completion)i(sp)s(eci\014cation)f -(exists,)630 5322 y(or)e(an)h(output)f(error)g(o)s(ccurs.)p -eop end -%%Page: 150 156 -TeXDict begin 150 155 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(150)150 299 y Fs(8.8)68 -b(A)44 b(Programmable)j(Completion)f(Example)150 458 -y Fu(The)37 b(most)g(common)g(w)m(a)m(y)i(to)e(obtain)h(additional)g -(completion)g(functionalit)m(y)h(b)s(ey)m(ond)d(the)i(default)150 -568 y(actions)29 b Ft(complete)d Fu(and)i Ft(compgen)e -Fu(pro)m(vide)i(is)h(to)f(use)g(a)h(shell)f(function)g(and)g(bind)e(it) -j(to)g(a)g(particular)150 677 y(command)h(using)g Ft(complete)e(-F)p -Fu(.)275 829 y(The)j(follo)m(wing)j(function)e(pro)m(vides)g -(completions)i(for)e(the)g Ft(cd)g Fu(builtin.)46 b(It)32 -b(is)h(a)f(reasonably)h(go)s(o)s(d)150 939 y(example)41 +(exists,)630 1663 y(or)e(an)h(output)f(error)g(o)s(ccurs.)150 +1904 y Fs(8.8)68 b(A)44 b(Programmable)j(Completion)f(Example)150 +2063 y Fu(The)37 b(most)g(common)g(w)m(a)m(y)i(to)e(obtain)h +(additional)g(completion)g(functionalit)m(y)h(b)s(ey)m(ond)d(the)i +(default)150 2173 y(actions)29 b Ft(complete)d Fu(and)i +Ft(compgen)e Fu(pro)m(vide)i(is)h(to)f(use)g(a)h(shell)f(function)g +(and)g(bind)e(it)j(to)g(a)g(particular)150 2282 y(command)h(using)g +Ft(complete)e(-F)p Fu(.)275 2417 y(The)j(follo)m(wing)j(function)e(pro) +m(vides)g(completions)i(for)e(the)g Ft(cd)g Fu(builtin.)46 +b(It)32 b(is)h(a)f(reasonably)h(go)s(o)s(d)150 2526 y(example)41 b(of)g(what)f(shell)h(functions)f(m)m(ust)g(do)h(when)e(used)h(for)g -(completion.)73 b(This)39 b(function)h(uses)150 1049 +(completion.)73 b(This)39 b(function)h(uses)150 2636 y(the)32 b(w)m(ord)f(passed)g(as)h Ft($2)f Fu(to)h(determine)g(the)f (directory)h(name)g(to)g(complete.)46 b(Y)-8 b(ou)32 -b(can)g(also)g(use)g(the)150 1158 y Ft(COMP_WORDS)c Fu(arra)m(y)i(v)-5 +b(can)g(also)g(use)g(the)150 2745 y Ft(COMP_WORDS)c Fu(arra)m(y)i(v)-5 b(ariable;)32 b(the)e(curren)m(t)h(w)m(ord)f(is)g(indexed)g(b)m(y)g -(the)h Ft(COMP_CWORD)c Fu(v)-5 b(ariable.)275 1310 y(The)42 +(the)h Ft(COMP_CWORD)c Fu(v)-5 b(ariable.)275 2880 y(The)42 b(function)h(relies)h(on)e(the)i Ft(complete)c Fu(and)j Ft(compgen)e Fu(builtins)h(to)i(do)f(m)m(uc)m(h)g(of)g(the)h(w)m(ork,) -150 1420 y(adding)25 b(only)h(the)g(things)g(that)g(the)g(Bash)g +150 2989 y(adding)25 b(only)h(the)g(things)g(that)g(the)g(Bash)g Ft(cd)f Fu(do)s(es)g(b)s(ey)m(ond)g(accepting)j(basic)e(directory)g -(names:)38 b(tilde)150 1529 y(expansion)22 b(\(see)h(Section)g(3.5.2)g +(names:)38 b(tilde)150 3099 y(expansion)22 b(\(see)h(Section)g(3.5.2)g ([Tilde)g(Expansion],)g(page)g(25\),)i(searc)m(hing)e(directories)g(in) -e Fr($CDP)-8 b(A)g(TH)p Fu(,)150 1639 y(whic)m(h)21 b(is)h(describ)s +e Fr($CDP)-8 b(A)g(TH)p Fu(,)150 3208 y(whic)m(h)21 b(is)h(describ)s (ed)e(ab)s(o)m(v)m(e)j(\(see)f(Section)h(4.1)f([Bourne)g(Shell)f -(Builtins],)j(page)e(48\),)j(and)c(basic)h(supp)s(ort)150 -1748 y(for)31 b(the)h Ft(cdable_vars)d Fu(shell)i(option)h(\(see)h -(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)i(page)f(71\).)46 -b Ft(_comp_)150 1858 y(cd)30 b Fu(mo)s(di\014es)g(the)h(v)-5 +(Builtins],)j(page)e(49\),)j(and)c(basic)h(supp)s(ort)150 +3318 y(for)31 b(the)h Ft(cdable_vars)d Fu(shell)i(option)h(\(see)h +(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)i(page)f(73\).)46 +b Ft(_comp_)150 3428 y(cd)30 b Fu(mo)s(di\014es)g(the)h(v)-5 b(alue)31 b(of)g Fr(IFS)36 b Fu(so)31 b(that)g(it)g(con)m(tains)h(only) f(a)g(newline)g(to)h(accommo)s(date)g(\014le)f(names)150 -1968 y(con)m(taining)i(spaces)g(and)e(tabs)h({)g Ft(compgen)e +3537 y(con)m(taining)i(spaces)g(and)e(tabs)h({)g Ft(compgen)e Fu(prin)m(ts)h(the)h(p)s(ossible)f(completions)i(it)g(generates)g(one)f -(p)s(er)150 2077 y(line.)275 2229 y(P)m(ossible)24 b(completions)h(go)g +(p)s(er)150 3647 y(line.)275 3781 y(P)m(ossible)24 b(completions)h(go)g (in)m(to)g(the)f Fr(COMPREPL)-8 b(Y)36 b Fu(arra)m(y)24 b(v)-5 b(ariable,)26 b(one)e(completion)i(p)s(er)c(arra)m(y)150 -2339 y(elemen)m(t.)42 b(The)30 b(programmable)g(completion)i(system)e +3891 y(elemen)m(t.)42 b(The)30 b(programmable)g(completion)i(system)e (retriev)m(es)h(the)g(completions)g(from)f(there)g(when)150 -2448 y(the)h(function)f(returns.)390 2600 y Ft(#)47 b(A)h(completion)d -(function)g(for)i(the)g(cd)g(builtin)390 2710 y(#)g(based)g(on)g(the)g +4000 y(the)h(function)f(returns.)390 4134 y Ft(#)47 b(A)h(completion)d +(function)g(for)i(the)g(cd)g(builtin)390 4244 y(#)g(based)g(on)g(the)g (cd)g(completion)e(function)h(from)g(the)h(bash_completion)d(package) -390 2819 y(_comp_cd\(\))390 2929 y({)581 3039 y(local)i(IFS=$')g -(\\t\\n')190 b(#)47 b(normalize)f(IFS)581 3148 y(local)g(cur)h -(_skipdot)f(_cdpath)581 3258 y(local)g(i)i(j)f(k)581 -3477 y(#)g(Tilde)g(expansion,)e(which)h(also)h(expands)f(tilde)g(to)h -(full)g(pathname)581 3587 y(case)g("$2")f(in)581 3696 -y(\\~*\))190 b(eval)46 b(cur="$2")g(;;)581 3806 y(*\))286 -b(cur=$2)46 b(;;)581 3915 y(esac)581 4134 y(#)h(no)h(cdpath)e(or)h -(absolute)e(pathname)h(--)h(straight)f(directory)f(completion)581 -4244 y(if)i([[)g(-z)g("${CDPATH:-}")e(]])i(||)g([[)g("$cur")f(==)h -(@\(./*|../*|/*\))d(]];)j(then)772 4354 y(#)g(compgen)f(prints)g(paths) -h(one)f(per)h(line;)g(could)f(also)h(use)g(while)f(loop)772 -4463 y(IFS=$'\\n')772 4573 y(COMPREPLY=\()f($\(compgen)g(-d)i(--)g -("$cur"\))f(\))772 4682 y(IFS=$')g(\\t\\n')581 4792 y(#)h -(CDPATH+directories)c(in)k(the)g(current)f(directory)f(if)j(not)e(in)i -(CDPATH)581 4902 y(else)772 5011 y(IFS=$'\\n')772 5121 -y(_skipdot=false)772 5230 y(#)f(preprocess)e(CDPATH)h(to)i(convert)d -(null)i(directory)e(names)i(to)g(.)772 5340 y(_cdpath=${CDPATH/#:/.:})p +390 4354 y(_comp_cd\(\))390 4463 y({)581 4573 y(local)i(IFS=$')g +(\\t\\n')190 b(#)47 b(normalize)f(IFS)581 4682 y(local)g(cur)h +(_skipdot)f(_cdpath)581 4792 y(local)g(i)i(j)f(k)581 +5011 y(#)g(Tilde)g(expansion,)e(which)h(also)h(expands)f(tilde)g(to)h +(full)g(pathname)581 5121 y(case)g("$2")f(in)581 5230 +y(\\~*\))190 b(eval)46 b(cur="$2")g(;;)581 5340 y(*\))286 +b(cur=$2)46 b(;;)p eop end +%%Page: 157 163 +TeXDict begin 157 162 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(157)581 299 y Ft(esac)581 +518 y(#)47 b(no)h(cdpath)e(or)h(absolute)e(pathname)h(--)h(straight)f +(directory)f(completion)581 628 y(if)i([[)g(-z)g("${CDPATH:-}")e(]])i +(||)g([[)g("$cur")f(==)h(@\(./*|../*|/*\))d(]];)j(then)772 +737 y(#)g(compgen)f(prints)g(paths)h(one)f(per)h(line;)g(could)f(also)h +(use)g(while)f(loop)772 847 y(IFS=$'\\n')772 956 y(COMPREPLY=\()f +($\(compgen)g(-d)i(--)g("$cur"\))f(\))772 1066 y(IFS=$')g(\\t\\n')581 +1176 y(#)h(CDPATH+directories)c(in)k(the)g(current)f(directory)f(if)j +(not)e(in)i(CDPATH)581 1285 y(else)772 1395 y(IFS=$'\\n')772 +1504 y(_skipdot=false)772 1614 y(#)f(preprocess)e(CDPATH)h(to)i +(convert)d(null)i(directory)e(names)i(to)g(.)772 1724 +y(_cdpath=${CDPATH/#:/.:})772 1833 y(_cdpath=${_cdpath//::/:.)o(:})772 +1943 y(_cdpath=${_cdpath/\045:/:.})772 2052 y(for)g(i)g(in)g +(${_cdpath//:/$'\\n'};)c(do)963 2162 y(if)k([[)g($i)g(-ef)g(.)h(]];)f +(then)f(_skipdot=true;)e(fi)963 2271 y(k="${#COMPREPLY[@]}")963 +2381 y(for)j(j)g(in)g($\()g(compgen)f(-d)h(--)h("$i/$cur")d(\);)i(do) +1154 2491 y(COMPREPLY[k++]=${j#$i/})375 b(#)48 b(cut)f(off)f(directory) +963 2600 y(done)772 2710 y(done)772 2819 y($_skipdot)f(||)i +(COMPREPLY+=\()e($\(compgen)g(-d)i(--)g("$cur"\))f(\))772 +2929 y(IFS=$')g(\\t\\n')581 3039 y(fi)581 3258 y(#)h(variable)f(names)g +(if)h(appropriate)e(shell)i(option)f(set)h(and)f(no)i(completions)581 +3367 y(if)f(shopt)f(-q)i(cdable_vars)c(&&)k([[)f(${#COMPREPLY[@]})c +(-eq)k(0)g(]];)g(then)772 3477 y(COMPREPLY=\()e($\(compgen)g(-v)i(--)g +("$cur"\))f(\))581 3587 y(fi)581 3806 y(return)g(0)390 +3915 y(})275 4061 y Fu(W)-8 b(e)31 b(install)g(the)g(completion)h +(function)e(using)f(the)i Ft(-F)f Fu(option)h(to)g Ft(complete)p +Fu(:)390 4208 y Ft(#)47 b(Tell)g(readline)f(to)h(quote)f(appropriate)f +(and)i(append)f(slashes)g(to)h(directories;)390 4317 +y(#)g(use)g(the)g(bash)g(default)f(completion)f(for)i(other)f +(arguments)390 4427 y(complete)g(-o)h(filenames)e(-o)i(nospace)f(-o)h +(bashdefault)e(-F)i(_comp_cd)f(cd)150 4573 y Fu(Since)33 +b(w)m(e'd)g(lik)m(e)i(Bash)e(and)f(Readline)i(to)g(tak)m(e)g(care)g(of) +f(some)h(of)f(the)g(other)h(details)g(for)e(us,)i(w)m(e)f(use)150 +4682 y(sev)m(eral)43 b(other)g(options)f(to)h(tell)g(Bash)f(and)f +(Readline)i(what)f(to)g(do.)76 b(The)41 b Ft(-o)30 b(filenames)39 +b Fu(option)150 4792 y(tells)j(Readline)g(that)g(the)f(p)s(ossible)g +(completions)h(should)f(b)s(e)f(treated)i(as)g(\014lenames,)i(and)d +(quoted)150 4902 y(appropriately)-8 b(.)53 b(That)34 +b(option)h(will)g(also)g(cause)g(Readline)g(to)g(app)s(end)e(a)h(slash) +g(to)h(\014lenames)g(it)g(can)150 5011 y(determine)i(are)g(directories) +h(\(whic)m(h)g(is)f(wh)m(y)f(w)m(e)i(migh)m(t)f(w)m(an)m(t)h(to)g +(extend)f Ft(_comp_cd)e Fu(to)i(app)s(end)f(a)150 5121 +y(slash)22 b(if)g(w)m(e're)h(using)f(directories)h(found)e(via)i +Fr(CDP)-8 b(A)g(TH)10 b Fu(:)37 b(Readline)23 b(can't)g(tell)g(those)g +(completions)h(are)150 5230 y(directories\).)45 b(The)31 +b Ft(-o)f(nospace)f Fu(option)j(tells)g(Readline)g(to)h(not)e(app)s +(end)f(a)i(space)g(c)m(haracter)h(to)f(the)150 5340 y(directory)c +(name,)h(in)f(case)h(w)m(e)f(w)m(an)m(t)h(to)f(app)s(end)f(to)h(it.)41 +b(The)27 b Ft(-o)j(bashdefault)25 b Fu(option)j(brings)f(in)h(the)p eop end -%%Page: 151 157 -TeXDict begin 151 156 bop 150 -116 a Fu(Chapter)30 b(8:)41 -b(Command)29 b(Line)i(Editing)2062 b(151)772 299 y Ft -(_cdpath=${_cdpath//::/:.)o(:})772 408 y(_cdpath=${_cdpath/\045:/:.}) -772 518 y(for)47 b(i)g(in)g(${_cdpath//:/$'\\n'};)c(do)963 -628 y(if)k([[)g($i)g(-ef)g(.)h(]];)f(then)f(_skipdot=true;)e(fi)963 -737 y(k="${#COMPREPLY[@]}")963 847 y(for)j(j)g(in)g($\()g(compgen)f(-d) -h(--)h("$i/$cur")d(\);)i(do)1154 956 y(COMPREPLY[k++]=${j#$i/})375 -b(#)48 b(cut)f(off)f(directory)963 1066 y(done)772 1176 -y(done)772 1285 y($_skipdot)f(||)i(COMPREPLY+=\()e($\(compgen)g(-d)i -(--)g("$cur"\))f(\))772 1395 y(IFS=$')g(\\t\\n')581 1504 -y(fi)581 1724 y(#)h(variable)f(names)g(if)h(appropriate)e(shell)i -(option)f(set)h(and)f(no)i(completions)581 1833 y(if)f(shopt)f(-q)i -(cdable_vars)c(&&)k([[)f(${#COMPREPLY[@]})c(-eq)k(0)g(]];)g(then)772 -1943 y(COMPREPLY=\()e($\(compgen)g(-v)i(--)g("$cur"\))f(\))581 -2052 y(fi)581 2271 y(return)g(0)390 2381 y(})275 2516 -y Fu(W)-8 b(e)31 b(install)g(the)g(completion)h(function)e(using)f(the) -i Ft(-F)f Fu(option)h(to)g Ft(complete)p Fu(:)390 2650 -y Ft(#)47 b(Tell)g(readline)f(to)h(quote)f(appropriate)f(and)i(append)f -(slashes)g(to)h(directories;)390 2760 y(#)g(use)g(the)g(bash)g(default) -f(completion)f(for)i(other)f(arguments)390 2869 y(complete)g(-o)h -(filenames)e(-o)i(nospace)f(-o)h(bashdefault)e(-F)i(_comp_cd)f(cd)150 -3004 y Fu(Since)33 b(w)m(e'd)g(lik)m(e)i(Bash)e(and)f(Readline)i(to)g -(tak)m(e)g(care)g(of)f(some)h(of)f(the)g(other)h(details)g(for)e(us,)i -(w)m(e)f(use)150 3113 y(sev)m(eral)43 b(other)g(options)f(to)h(tell)g -(Bash)f(and)f(Readline)i(what)f(to)g(do.)76 b(The)41 -b Ft(-o)30 b(filenames)39 b Fu(option)150 3223 y(tells)j(Readline)g -(that)g(the)f(p)s(ossible)g(completions)h(should)f(b)s(e)f(treated)i -(as)g(\014lenames,)i(and)d(quoted)150 3333 y(appropriately)-8 -b(.)53 b(That)34 b(option)h(will)g(also)g(cause)g(Readline)g(to)g(app)s -(end)e(a)h(slash)g(to)h(\014lenames)g(it)g(can)150 3442 -y(determine)i(are)g(directories)h(\(whic)m(h)g(is)f(wh)m(y)f(w)m(e)i -(migh)m(t)f(w)m(an)m(t)h(to)g(extend)f Ft(_comp_cd)e -Fu(to)i(app)s(end)f(a)150 3552 y(slash)22 b(if)g(w)m(e're)h(using)f -(directories)h(found)e(via)i Fr(CDP)-8 b(A)g(TH)10 b -Fu(:)37 b(Readline)23 b(can't)g(tell)g(those)g(completions)h(are)150 -3661 y(directories\).)45 b(The)31 b Ft(-o)f(nospace)f -Fu(option)j(tells)g(Readline)g(to)h(not)e(app)s(end)f(a)i(space)g(c)m -(haracter)h(to)f(the)150 3771 y(directory)c(name,)h(in)f(case)h(w)m(e)f -(w)m(an)m(t)h(to)f(app)s(end)f(to)h(it.)41 b(The)27 b -Ft(-o)j(bashdefault)25 b Fu(option)j(brings)f(in)h(the)150 -3880 y(rest)e(of)g(the)g Ft(")p Fu(Bash)g(default)p Ft(")g -Fu(completions)h({)f(p)s(ossible)f(completions)i(that)g(Bash)f(adds)f -(to)i(the)f(default)150 3990 y(Readline)i(set.)40 b(These)28 -b(include)f(things)g(lik)m(e)i(command)e(name)h(completion,)h(v)-5 -b(ariable)28 b(completion)h(for)150 4100 y(w)m(ords)e(b)s(eginning)h -(with)f(`)p Ft($)p Fu(')h(or)g(`)p Ft(${)p Fu(',)h(completions)g(con)m -(taining)g(pathname)f(expansion)g(patterns)g(\(see)150 -4209 y(Section)j(3.5.8)h([Filename)g(Expansion],)e(page)i(35\),)f(and)f -(so)h(on.)275 4344 y(Once)39 b(installed)i(using)e Ft(complete)p -Fu(,)h Ft(_comp_cd)d Fu(will)j(b)s(e)g(called)g(ev)m(ery)h(time)f(w)m -(e)g(attempt)h(w)m(ord)150 4453 y(completion)32 b(for)e(a)h -Ft(cd)e Fu(command.)275 4588 y(Man)m(y)34 b(more)g(examples)g({)g(an)g +%%Page: 158 164 +TeXDict begin 158 163 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(158)150 299 y(rest)26 +b(of)g(the)g Ft(")p Fu(Bash)g(default)p Ft(")g Fu(completions)h({)f(p)s +(ossible)f(completions)i(that)g(Bash)f(adds)f(to)i(the)f(default)150 +408 y(Readline)i(set.)40 b(These)28 b(include)f(things)g(lik)m(e)i +(command)e(name)h(completion,)h(v)-5 b(ariable)28 b(completion)h(for) +150 518 y(w)m(ords)e(b)s(eginning)h(with)f(`)p Ft($)p +Fu(')h(or)g(`)p Ft(${)p Fu(',)h(completions)g(con)m(taining)g(pathname) +f(expansion)g(patterns)g(\(see)150 628 y(Section)j(3.5.8)h([Filename)g +(Expansion],)e(page)i(36\),)f(and)f(so)h(on.)275 762 +y(Once)39 b(installed)i(using)e Ft(complete)p Fu(,)h +Ft(_comp_cd)d Fu(will)j(b)s(e)g(called)g(ev)m(ery)h(time)f(w)m(e)g +(attempt)h(w)m(ord)150 872 y(completion)32 b(for)e(a)h +Ft(cd)e Fu(command.)275 1006 y(Man)m(y)34 b(more)g(examples)g({)g(an)g (extensiv)m(e)h(collection)i(of)c(completions)i(for)f(most)g(of)g(the)g -(common)150 4697 y(GNU,)g(Unix,)h(and)d(Lin)m(ux)h(commands)g({)h(are)g +(common)150 1116 y(GNU,)g(Unix,)h(and)d(Lin)m(ux)h(commands)g({)h(are)g (a)m(v)-5 b(ailable)36 b(as)e(part)f(of)h(the)f(bash)p -2943 4697 28 4 v 39 w(completion)i(pro)5 b(ject.)150 -4807 y(This)33 b(is)h(installed)h(b)m(y)f(default)g(on)g(man)m(y)h +2943 1116 28 4 v 39 w(completion)i(pro)5 b(ject.)150 +1225 y(This)33 b(is)h(installed)h(b)m(y)f(default)g(on)g(man)m(y)h (GNU/Lin)m(ux)f(distributions.)51 b(Originally)35 b(written)f(b)m(y)g -(Ian)150 4917 y(Macdonald,)48 b(the)c(pro)5 b(ject)44 +(Ian)150 1335 y(Macdonald,)48 b(the)c(pro)5 b(ject)44 b(no)m(w)g(liv)m(es)h(at)f Ft(https:)11 b(/)g(/)g(github)g(.)g(com)g(/) g(sc)o(op)g(/)f(bash)o(-co)o(mple)o(tion)g(/)h Fu(.)150 -5026 y(There)30 b(are)h(p)s(orts)e(for)h(other)h(systems)f(suc)m(h)g -(as)h(Solaris)g(and)f(Mac)h(OS)f(X.)275 5161 y(An)54 -b(older)h(v)m(ersion)h(of)f(the)g(bash)p 1532 5161 V +1445 y(There)30 b(are)h(p)s(orts)e(for)h(other)h(systems)f(suc)m(h)g +(as)h(Solaris)g(and)f(Mac)h(OS)f(X.)275 1579 y(An)54 +b(older)h(v)m(ersion)h(of)f(the)g(bash)p 1532 1579 V 40 w(completion)h(pac)m(k)-5 b(age)57 b(is)e(distributed)f(with)h(bash) -f(in)h(the)150 5270 y Ft(examples/complete)26 b Fu(sub)s(directory)-8 +f(in)h(the)150 1689 y Ft(examples/complete)26 b Fu(sub)s(directory)-8 b(.)p eop end -%%Page: 152 158 -TeXDict begin 152 157 bop 3614 -116 a Fu(152)150 299 +%%Page: 159 165 +TeXDict begin 159 164 bop 3614 -116 a Fu(159)150 299 y Fp(9)80 b(Using)53 b(History)g(In)l(teractiv)l(ely)150 554 y Fu(This)42 b(c)m(hapter)h(describ)s(es)f(ho)m(w)g(to)h(use)g(the) f Fm(gnu)h Fu(History)g(Library)e(in)m(teractiv)m(ely)-8 @@ -19099,7 +19597,7 @@ Fm(gnu)f Fu(Readline)h(Library)f(Man)m(ual.)150 1025 y Fs(9.1)68 b(Bash)45 b(History)h(F)-11 b(acilities)150 1184 y Fu(When)44 b(the)g Ft(-o)30 b(history)42 b Fu(option)i(to)h(the) f Ft(set)f Fu(builtin)h(is)g(enabled)g(\(see)g(Section)h(4.3.1)h([The)e -(Set)150 1294 y(Builtin],)32 b(page)g(67\),)h(the)e(shell)h(pro)m +(Set)150 1294 y(Builtin],)32 b(page)g(69\),)h(the)e(shell)h(pro)m (vides)f(access)h(to)g(the)f Fr(command)g(history)p Fu(,)h(the)f(list)h (of)f(commands)150 1404 y(previously)h(t)m(yp)s(ed.)47 b(The)33 b(v)-5 b(alue)33 b(of)f(the)h Ft(HISTSIZE)e @@ -19126,14 +19624,14 @@ h Ft($HISTSIZE)c Fu(lines)150 2422 y(are)35 b(copied)g(from)g(the)g (history)f(list)i(to)f(the)g(\014le)g(named)f(b)m(y)h Ft($HISTFILE)p Fu(.)51 b(If)35 b(the)g Ft(histappend)d Fu(shell)150 2532 y(option)26 b(is)g(set)g(\(see)h(Section)f(4.2)h -([Bash)f(Builtins],)h(page)g(55\),)h(the)e(lines)g(are)g(app)s(ended)e -(to)i(the)g(history)150 2641 y(\014le,)36 b(otherwise)f(the)g(history)f -(\014le)h(is)f(o)m(v)m(erwritten.)55 b(If)34 b Ft(HISTFILE)e -Fu(is)j(unset,)g(or)g(if)f(the)h(history)f(\014le)h(is)150 -2751 y(un)m(writable,)f(the)f(history)g(is)g(not)h(sa)m(v)m(ed.)49 -b(After)34 b(sa)m(ving)g(the)f(history)-8 b(,)34 b(the)g(history)f -(\014le)g(is)g(truncated)150 2860 y(to)g(con)m(tain)h(no)f(more)g(than) -f Ft($HISTFILESIZE)d Fu(lines.)48 b(If)33 b Ft(HISTFILESIZE)c +([Bash)f(Builtins],)h(page)g(57\),)h(the)e(lines)g(are)g(app)s(ended)e +(to)i(the)g(history)150 2641 y(\014le,)f(otherwise)e(the)g(history)f +(\014le)h(is)g(o)m(v)m(erwritten.)39 b(If)23 b Ft(HISTFILE)d +Fu(is)j(unset)f(or)h(n)m(ull,)h(or)f(if)f(the)h(history)g(\014le)150 +2751 y(is)k(un)m(writable,)h(the)f(history)g(is)g(not)g(sa)m(v)m(ed.)41 +b(After)27 b(sa)m(ving)h(the)f(history)-8 b(,)29 b(the)e(history)g +(\014le)g(is)g(truncated)150 2860 y(to)33 b(con)m(tain)h(no)f(more)g +(than)f Ft($HISTFILESIZE)d Fu(lines.)48 b(If)33 b Ft(HISTFILESIZE)c Fu(is)k(unset,)g(or)f(set)i(to)f(n)m(ull,)h(a)150 2970 y(non-n)m(umeric)c(v)-5 b(alue,)31 b(or)f(a)h(n)m(umeric)f(v)-5 b(alue)31 b(less)g(than)f(zero,)h(the)g(history)f(\014le)h(is)f(not)h @@ -19146,7 +19644,7 @@ b(\014le)h(is)g(read,)h(lines)f(b)s(eginning)e(with)i(the)f(history)h (commen)m(t)g(c)m(haracter)h(follo)m(w)m(ed)h(immediately)150 3440 y(b)m(y)30 b(a)h(digit)g(are)g(in)m(terpreted)g(as)f(timestamps)h (for)f(the)h(follo)m(wing)h(history)e(en)m(try)-8 b(.)275 -3582 y(The)19 b(builtin)h(command)g Ft(fc)g Fu(ma)m(y)h(b)s(e)f(used)f +3582 y(The)19 b Ft(fc)h Fu(builtin)g(command)g(ma)m(y)h(b)s(e)f(used)f (to)i(list)g(or)g(edit)g(and)e(re-execute)j(a)f(p)s(ortion)f(of)g(the)h (history)150 3692 y(list.)41 b(The)27 b Ft(history)f Fu(builtin)i(ma)m(y)h(b)s(e)e(used)g(to)i(displa)m(y)g(or)f(mo)s(dify)f @@ -19155,31 +19653,30 @@ Fu(builtin)i(ma)m(y)h(b)s(e)e(used)g(to)i(displa)m(y)g(or)f(mo)s(dify)f (commands)g(are)g(a)m(v)-5 b(ailable)33 b(in)e(eac)m(h)150 3911 y(editing)45 b(mo)s(de)g(that)g(pro)m(vide)g(access)h(to)f(the)g (history)f(list)i(\(see)f(Section)h(8.4.2)g([Commands)e(F)-8 -b(or)150 4020 y(History],)31 b(page)h(134\).)275 4162 +b(or)150 4020 y(History],)31 b(page)h(140\).)275 4162 y(The)47 b(shell)i(allo)m(ws)h(con)m(trol)f(o)m(v)m(er)h(whic)m(h)e (commands)g(are)h(sa)m(v)m(ed)g(on)f(the)h(history)f(list.)95 -b(The)150 4272 y Ft(HISTCONTROL)25 b Fu(and)j Ft(HISTIGNORE)e -Fu(v)-5 b(ariables)29 b(ma)m(y)h(b)s(e)d(set)j(to)f(cause)g(the)g -(shell)f(to)i(sa)m(v)m(e)g(only)f(a)g(subset)150 4381 -y(of)e(the)g(commands)f(en)m(tered.)40 b(The)26 b Ft(cmdhist)f -Fu(shell)i(option,)h(if)f(enabled,)g(causes)h(the)e(shell)h(to)h -(attempt)150 4491 y(to)23 b(sa)m(v)m(e)h(eac)m(h)f(line)g(of)f(a)h(m)m -(ulti-line)g(command)f(in)g(the)h(same)f(history)g(en)m(try)-8 -b(,)25 b(adding)d(semicolons)h(where)150 4600 y(necessary)37 -b(to)f(preserv)m(e)h(syn)m(tactic)h(correctness.)58 b(The)36 -b Ft(lithist)e Fu(shell)i(option)h(causes)g(the)f(shell)g(to)150 -4710 y(sa)m(v)m(e)41 b(the)e(command)g(with)f(em)m(b)s(edded)g -(newlines)h(instead)g(of)g(semicolons.)68 b(The)39 b -Ft(shopt)e Fu(builtin)i(is)150 4820 y(used)30 b(to)i(set)g(these)g -(options.)43 b(See)32 b(Section)g(4.3.2)h([The)e(Shopt)f(Builtin],)j -(page)f(71,)g(for)f(a)h(description)150 4929 y(of)f Ft(shopt)p -Fu(.)150 5181 y Fs(9.2)68 b(Bash)45 b(History)h(Builtins)150 +b(The)150 4272 y Ft(HISTCONTROL)39 b Fu(and)i Ft(HISTIGNORE)d +Fu(v)-5 b(ariables)43 b(are)f(used)e(to)j(cause)f(the)g(shell)g(to)g +(sa)m(v)m(e)h(only)f(a)g(sub-)150 4381 y(set)f(of)f(the)g(commands)g +(en)m(tered.)70 b(The)39 b Ft(cmdhist)f Fu(shell)j(option,)i(if)d +(enabled,)i(causes)f(the)f(shell)g(to)150 4491 y(attempt)32 +b(to)f(sa)m(v)m(e)i(eac)m(h)f(line)f(of)g(a)g(m)m(ulti-line)h(command)f +(in)f(the)h(same)g(history)g(en)m(try)-8 b(,)32 b(adding)e(semi-)150 +4600 y(colons)j(where)e(necessary)h(to)h(preserv)m(e)f(syn)m(tactic)i +(correctness.)46 b(The)31 b Ft(lithist)f Fu(shell)i(option)h(causes)150 +4710 y(the)g(shell)f(to)h(sa)m(v)m(e)h(the)f(command)f(with)g(em)m(b)s +(edded)f(newlines)h(instead)h(of)g(semicolons.)47 b(The)32 +b Ft(shopt)150 4820 y Fu(builtin)j(is)h(used)e(to)j(set)f(these)g +(options.)57 b(See)35 b(Section)i(4.3.2)g([The)e(Shopt)g(Builtin],)j +(page)e(73,)i(for)e(a)150 4929 y(description)30 b(of)h +Ft(shopt)p Fu(.)150 5181 y Fs(9.2)68 b(Bash)45 b(History)h(Builtins)150 5340 y Fu(Bash)31 b(pro)m(vides)f(t)m(w)m(o)i(builtin)e(commands)g (whic)m(h)g(manipulate)g(the)h(history)f(list)h(and)f(history)g (\014le.)p eop end -%%Page: 153 159 -TeXDict begin 153 158 bop 150 -116 a Fu(Chapter)30 b(9:)41 -b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(153)150 +%%Page: 160 166 +TeXDict begin 160 165 bop 150 -116 a Fu(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(160)150 299 y Ft(fc)870 430 y(fc)47 b([-e)g Fj(ename)p Ft(])f([-lnr])g([)p Fj(first)p Ft(])g([)p Fj(last)p Ft(])870 540 y(fc)h(-s)g([)p Fj(pat)p Ft(=)p Fj(rep)p Ft(])f([)p Fj(command)p Ft(])630 @@ -19230,20 +19727,20 @@ Fu(,)h(so)h(that)h(t)m(yping)f(`)p Ft(r)f(cc)p Fu(')630 3061 y(runs)35 b(the)h(last)h(command)f(b)s(eginning)g(with)g Ft(cc)f Fu(and)h(t)m(yping)g(`)p Ft(r)p Fu(')h(re-executes)h(the)e (last)630 3170 y(command)30 b(\(see)h(Section)h(6.6)f([Aliases],)h -(page)g(100\).)150 3324 y Ft(history)870 3455 y(history)46 +(page)g(103\).)150 3324 y Ft(history)870 3455 y(history)46 b([)p Fj(n)p Ft(])870 3565 y(history)g(-c)870 3674 y(history)g(-d)h Fj(offset)870 3784 y Ft(history)f(-d)h Fj(start)p Ft(-)p Fj(end)870 3893 y Ft(history)f([-anrw])g([)p Fj(filename)p Ft(])870 4003 y(history)g(-ps)h Fj(arg)630 4134 y Fu(With)26 b(no)g(options,)h(displa)m(y)f(the)g(history)g(list)g(with)f(line)h(n)m (um)m(b)s(ers.)38 b(Lines)26 b(pre\014xed)e(with)630 -4244 y(a)35 b(`)p Ft(*)p Fu(')g(ha)m(v)m(e)h(b)s(een)e(mo)s(di\014ed.) -53 b(An)34 b(argumen)m(t)h(of)g Fr(n)f Fu(lists)i(only)f(the)g(last)g -Fr(n)f Fu(lines.)54 b(If)35 b(the)630 4354 y(shell)30 -b(v)-5 b(ariable)31 b Ft(HISTTIMEFORMAT)26 b Fu(is)k(set)h(and)e(not)i -(n)m(ull,)f(it)h(is)f(used)f(as)h(a)h(format)f(string)630 -4463 y(for)36 b Fr(strftime)41 b Fu(to)36 b(displa)m(y)g(the)g(time)h -(stamp)f(asso)s(ciated)h(with)f(eac)m(h)h(displa)m(y)m(ed)f(history)630 +4244 y(a)f(`)p Ft(*)p Fu(')g(ha)m(v)m(e)h(b)s(een)e(mo)s(di\014ed.)37 +b(An)22 b(argumen)m(t)h(of)g Fr(n)f Fu(lists)i(only)f(the)f(last)i +Fr(n)e Fu(lines.)39 b(If)22 b(the)h(shell)630 4354 y(v)-5 +b(ariable)36 b Ft(HISTTIMEFORMAT)31 b Fu(is)k(set)g(and)f(not)h(n)m +(ull,)h(it)g(is)f(used)f(as)h(a)g(format)g(string)g(for)630 +4463 y Ft(strftime)p Fu(\(3\))c(to)i(displa)m(y)f(the)h(time)f(stamp)g +(asso)s(ciated)i(with)e(eac)m(h)h(displa)m(y)m(ed)g(history)630 4573 y(en)m(try)-8 b(.)47 b(No)33 b(in)m(terv)m(ening)g(blank)f(is)g (prin)m(ted)g(b)s(et)m(w)m(een)h(the)g(formatted)f(time)h(stamp)g(and) 630 4682 y(the)e(history)f(line.)630 4814 y(Options,)g(if)h(supplied,)e @@ -19257,282 +19754,308 @@ Fr(o\013set)p Fu(.)59 b(If)36 b Fr(o\013set)j Fu(is)d(p)s(ositiv)m(e,)j (it)1110 5340 y(should)32 b(b)s(e)h(sp)s(eci\014ed)f(as)i(it)g(app)s (ears)e(when)g(the)i(history)f(is)g(displa)m(y)m(ed.)50 b(If)p eop end -%%Page: 154 160 -TeXDict begin 154 159 bop 150 -116 a Fu(Chapter)30 b(9:)41 -b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(154)1110 +%%Page: 161 167 +TeXDict begin 161 166 bop 150 -116 a Fu(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(161)1110 299 y Fr(o\013set)26 b Fu(is)d(negativ)m(e,)k(it)c(is)g(in)m(terpreted) h(as)f(relativ)m(e)i(to)f(one)f(greater)h(than)f(the)1110 408 y(last)36 b(history)f(p)s(osition,)h(so)f(negativ)m(e)i(indices)e (coun)m(t)h(bac)m(k)f(from)g(the)g(end)1110 518 y(of)h(the)g(history)-8 b(,)37 b(and)e(an)h(index)f(of)h(`)p Ft(-1)p Fu(')f(refers)g(to)i(the)f (curren)m(t)f Ft(history)1110 628 y(-d)30 b Fu(command.)630 -785 y Ft(-d)g Fj(start)p Ft(-)p Fj(end)1110 895 y Fu(Delete)e(the)e +794 y Ft(-d)g Fj(start)p Ft(-)p Fj(end)1110 903 y Fu(Delete)e(the)e (range)h(of)f(history)g(en)m(tries)h(b)s(et)m(w)m(een)f(p)s(ositions)g -Fr(start)j Fu(and)c Fr(end)p Fu(,)1110 1004 y(inclusiv)m(e.)44 +Fr(start)j Fu(and)c Fr(end)p Fu(,)1110 1013 y(inclusiv)m(e.)44 b(P)m(ositiv)m(e)33 b(and)e(negativ)m(e)i(v)-5 b(alues)31 b(for)g Fr(start)j Fu(and)d Fr(end)j Fu(are)d(in)m(ter-)1110 -1114 y(preted)f(as)h(describ)s(ed)e(ab)s(o)m(v)m(e.)630 -1271 y Ft(-a)384 b Fu(App)s(end)28 b(the)i(new)f(history)g(lines)h(to)h +1123 y(preted)f(as)h(describ)s(ed)e(ab)s(o)m(v)m(e.)630 +1289 y Ft(-a)384 b Fu(App)s(end)28 b(the)i(new)f(history)g(lines)h(to)h (the)e(history)h(\014le.)41 b(These)29 b(are)h(history)1110 -1381 y(lines)36 b(en)m(tered)g(since)f(the)h(b)s(eginning)f(of)g(the)h -(curren)m(t)f(Bash)h(session,)h(but)1110 1490 y(not)31 +1398 y(lines)36 b(en)m(tered)g(since)f(the)h(b)s(eginning)f(of)g(the)h +(curren)m(t)f(Bash)h(session,)h(but)1110 1508 y(not)31 b(already)g(app)s(ended)d(to)j(the)g(history)f(\014le.)630 -1648 y Ft(-n)384 b Fu(App)s(end)32 b(the)i(history)f(lines)h(not)g +1674 y Ft(-n)384 b Fu(App)s(end)32 b(the)i(history)f(lines)h(not)g (already)g(read)g(from)f(the)h(history)f(\014le)h(to)1110 -1758 y(the)26 b(curren)m(t)f(history)g(list.)40 b(These)25 +1784 y(the)26 b(curren)m(t)f(history)g(list.)40 b(These)25 b(are)h(lines)g(app)s(ended)e(to)i(the)f(history)h(\014le)1110 -1867 y(since)31 b(the)f(b)s(eginning)g(of)g(the)h(curren)m(t)f(Bash)h -(session.)630 2025 y Ft(-r)384 b Fu(Read)31 b(the)f(history)g(\014le)h +1893 y(since)31 b(the)f(b)s(eginning)g(of)g(the)h(curren)m(t)f(Bash)h +(session.)630 2059 y Ft(-r)384 b Fu(Read)31 b(the)f(history)g(\014le)h (and)f(app)s(end)e(its)j(con)m(ten)m(ts)h(to)f(the)g(history)f(list.) -630 2182 y Ft(-w)384 b Fu(W)-8 b(rite)32 b(out)e(the)h(curren)m(t)f -(history)g(list)h(to)h(the)e(history)g(\014le.)630 2339 +630 2226 y Ft(-w)384 b Fu(W)-8 b(rite)32 b(out)e(the)h(curren)m(t)f +(history)g(list)h(to)h(the)e(history)g(\014le.)630 2392 y Ft(-p)384 b Fu(P)m(erform)31 b(history)f(substitution)h(on)f(the)h Fr(arg)8 b Fu(s)31 b(and)f(displa)m(y)h(the)f(result)h(on)1110 -2449 y(the)d(standard)f(output,)i(without)f(storing)g(the)g(results)g -(in)g(the)g(history)g(list.)630 2606 y Ft(-s)384 b Fu(The)30 +2501 y(the)d(standard)f(output,)i(without)f(storing)g(the)g(results)g +(in)g(the)g(history)g(list.)630 2668 y Ft(-s)384 b Fu(The)30 b Fr(arg)8 b Fu(s)30 b(are)h(added)f(to)h(the)f(end)g(of)h(the)f (history)h(list)g(as)f(a)h(single)g(en)m(try)-8 b(.)630 -2764 y(If)35 b(a)h Fr(\014lename)41 b Fu(argumen)m(t)c(is)e(supplied)g +2834 y(If)35 b(a)h Fr(\014lename)41 b Fu(argumen)m(t)c(is)e(supplied)g (when)g(an)m(y)h(of)g(the)g Ft(-w)p Fu(,)g Ft(-r)p Fu(,)h -Ft(-a)p Fu(,)g(or)e Ft(-n)h Fu(options)630 2873 y(is)j(used,)i(Bash)e +Ft(-a)p Fu(,)g(or)e Ft(-n)h Fu(options)630 2943 y(is)j(used,)i(Bash)e (uses)f Fr(\014lename)44 b Fu(as)c(the)f(history)g(\014le.)66 b(If)39 b(not,)i(then)e(the)g(v)-5 b(alue)40 b(of)f(the)630 -2983 y Ft(HISTFILE)28 b Fu(v)-5 b(ariable)31 b(is)g(used.)630 -3117 y(The)j(return)g(v)-5 b(alue)35 b(is)g(0)g(unless)f(an)h(in)m(v)-5 +3053 y Ft(HISTFILE)30 b Fu(v)-5 b(ariable)32 b(is)g(used.)44 +b(If)32 b Ft(HISTFILE)d Fu(is)j(unset)f(or)h(n)m(ull,)h(these)f +(options)g(ha)m(v)m(e)h(no)630 3162 y(e\013ect.)630 3300 +y(The)h(return)g(v)-5 b(alue)35 b(is)g(0)g(unless)f(an)h(in)m(v)-5 b(alid)35 b(option)g(is)g(encoun)m(tered,)h(an)f(error)f(o)s(ccurs)630 -3226 y(while)h(reading)g(or)g(writing)f(the)h(history)g(\014le,)h(an)f +3410 y(while)h(reading)g(or)g(writing)f(the)h(history)g(\014le,)h(an)f (in)m(v)-5 b(alid)36 b Fr(o\013set)h Fu(or)e(range)g(is)g(supplied)630 -3336 y(as)c(an)g(argumen)m(t)g(to)h Ft(-d)p Fu(,)e(or)h(the)g(history)g +3520 y(as)c(an)g(argumen)m(t)g(to)h Ft(-d)p Fu(,)e(or)h(the)g(history)g (expansion)f(supplied)g(as)h(an)g(argumen)m(t)g(to)h -Ft(-p)630 3445 y Fu(fails.)150 3684 y Fs(9.3)68 b(History)46 -b(Expansion)150 3844 y Fu(The)f(History)h(library)e(pro)m(vides)i(a)f +Ft(-p)630 3629 y Fu(fails.)150 3880 y Fs(9.3)68 b(History)46 +b(Expansion)150 4039 y Fu(The)f(History)h(library)e(pro)m(vides)i(a)f (history)g(expansion)g(feature)h(that)g(is)f(similar)h(to)g(the)f -(history)150 3953 y(expansion)g(pro)m(vided)f(b)m(y)h +(history)150 4149 y(expansion)g(pro)m(vided)f(b)m(y)h Ft(csh)p Fu(.)83 b(This)44 b(section)i(describ)s(es)e(the)h(syn)m(tax)h -(used)e(to)i(manipulate)f(the)150 4063 y(history)30 b(information.)275 -4196 y(History)h(expansions)f(in)m(tro)s(duce)g(w)m(ords)g(from)g(the)h +(used)e(to)i(manipulate)f(the)150 4259 y(history)30 b(information.)275 +4400 y(History)h(expansions)f(in)m(tro)s(duce)g(w)m(ords)g(from)g(the)h (history)f(list)h(in)m(to)g(the)g(input)f(stream,)h(making)150 -4306 y(it)g(easy)g(to)g(rep)s(eat)g(commands,)f(insert)g(the)h(argumen) +4509 y(it)g(easy)g(to)g(rep)s(eat)g(commands,)f(insert)g(the)h(argumen) m(ts)f(to)h(a)g(previous)f(command)g(in)m(to)i(the)e(curren)m(t)150 -4415 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g -(quic)m(kly)-8 b(.)275 4549 y(History)24 b(expansion)f(is)h(p)s +4619 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g +(quic)m(kly)-8 b(.)275 4760 y(History)24 b(expansion)f(is)h(p)s (erformed)e(immediately)j(after)f(a)g(complete)h(line)f(is)g(read,)h(b) -s(efore)e(the)h(shell)150 4659 y(breaks)32 b(it)i(in)m(to)f(w)m(ords,)g +s(efore)e(the)h(shell)150 4870 y(breaks)32 b(it)i(in)m(to)f(w)m(ords,)g (and)f(is)h(p)s(erformed)e(on)h(eac)m(h)i(line)f(individually)-8 -b(.)48 b(Bash)33 b(attempts)g(to)h(inform)150 4768 y(the)d(history)f +b(.)48 b(Bash)33 b(attempts)g(to)h(inform)150 4980 y(the)d(history)f (expansion)g(functions)g(ab)s(out)g(quoting)h(still)g(in)f(e\013ect)i -(from)e(previous)g(lines.)275 4902 y(History)37 b(expansion)f(tak)m(es) +(from)e(previous)g(lines.)275 5121 y(History)37 b(expansion)f(tak)m(es) i(place)g(in)e(t)m(w)m(o)i(parts.)59 b(The)36 b(\014rst)g(is)h(to)g -(determine)g(whic)m(h)f(line)h(from)150 5011 y(the)42 -b(history)f(list)h(should)e(b)s(e)h(used)f(during)g(substitution.)74 -b(The)40 b(second)i(is)f(to)h(select)h(p)s(ortions)e(of)150 -5121 y(that)31 b(line)g(for)f(inclusion)h(in)m(to)g(the)g(curren)m(t)f -(one.)42 b(The)30 b(line)h(selected)h(from)e(the)h(history)f(is)h -(called)h(the)150 5230 y Fr(ev)m(en)m(t)p Fu(,)e(and)c(the)i(p)s -(ortions)e(of)i(that)f(line)h(that)g(are)f(acted)i(up)s(on)c(are)j -(called)g Fr(w)m(ords)p Fu(.)39 b(V)-8 b(arious)28 b -Fr(mo)s(di\014ers)150 5340 y Fu(are)33 b(a)m(v)-5 b(ailable)36 -b(to)d(manipulate)h(the)f(selected)h(w)m(ords.)48 b(The)32 -b(line)i(is)f(brok)m(en)f(in)m(to)i(w)m(ords)f(in)f(the)i(same)p +(determine)g(whic)m(h)f(line)h(from)150 5230 y(the)29 +b(history)g(list)g(should)f(b)s(e)g(used)g(during)g(substitution.)40 +b(The)28 b(second)h(is)g(to)h(select)g(p)s(ortions)e(of)h(that)150 +5340 y(line)i(for)f(inclusion)g(in)m(to)h(the)g(curren)m(t)f(one.)p eop end -%%Page: 155 161 -TeXDict begin 155 160 bop 150 -116 a Fu(Chapter)30 b(9:)41 -b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(155)150 -299 y(fashion)23 b(that)g(Bash)g(do)s(es,)h(so)f(that)h(sev)m(eral)g(w) -m(ords)e(surrounded)e(b)m(y)j(quotes)g(are)g(considered)g(one)g(w)m -(ord.)150 408 y(History)37 b(expansions)g(are)g(in)m(tro)s(duced)f(b)m -(y)h(the)g(app)s(earance)g(of)g(the)g(history)f(expansion)h(c)m -(haracter,)150 518 y(whic)m(h)30 b(is)h(`)p Ft(!)p Fu(')f(b)m(y)g -(default.)275 655 y(History)c(expansion)g(implemen)m(ts)h(shell-lik)m +%%Page: 162 168 +TeXDict begin 162 167 bop 150 -116 a Fu(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(162)275 +299 y(The)29 b(line)i(selected)h(from)e(the)h(history)f(is)g(called)i +(the)f Fr(ev)m(en)m(t)p Fu(,)h(and)e(the)g(p)s(ortions)g(of)h(that)g +(line)f(that)150 408 y(are)37 b(acted)g(up)s(on)e(are)i(called)h +Fr(w)m(ords)p Fu(.)58 b(The)36 b(line)h(is)f(brok)m(en)g(in)m(to)i(w)m +(ords)e(in)g(the)g(same)h(fashion)f(that)150 518 y(Bash)28 +b(do)s(es,)g(so)g(that)h(sev)m(eral)g(w)m(ords)e(surrounded)e(b)m(y)j +(quotes)h(are)f(considered)f(one)i(w)m(ord.)39 b(The)27 +b Fr(ev)m(en)m(t)150 628 y(designator)33 b Fu(selects)27 +b(the)e(ev)m(en)m(t,)k(the)c(optional)i Fr(w)m(ord)e(designator)33 +b Fu(selects)27 b(w)m(ords)e(from)g(the)g(ev)m(en)m(t,)k(and)150 +737 y(v)-5 b(arious)30 b(optional)i Fr(mo)s(di\014ers)h +Fu(are)e(a)m(v)-5 b(ailable)32 b(to)f(manipulate)g(the)g(selected)h(w)m +(ords.)275 872 y(History)26 b(expansions)f(are)h(in)m(tro)s(duced)f(b)m +(y)g(the)g(app)s(earance)h(of)g(the)f(history)h(expansion)f(c)m +(haracter,)150 982 y(whic)m(h)31 b(is)g(`)p Ft(!)p Fu(')h(b)m(y)f +(default.)43 b(History)32 b(expansions)f(ma)m(y)g(app)s(ear)g(an)m +(ywhere)g(in)g(the)g(input,)g(but)g(do)g(not)150 1091 +y(nest.)275 1226 y(History)26 b(expansion)g(implemen)m(ts)h(shell-lik)m (e)h(quoting)f(con)m(v)m(en)m(tions:)40 b(a)27 b(bac)m(kslash)g(can)f -(b)s(e)g(used)f(to)150 764 y(remo)m(v)m(e)h(the)e(sp)s(ecial)g +(b)s(e)g(used)f(to)150 1336 y(remo)m(v)m(e)h(the)e(sp)s(ecial)g (handling)g(for)g(the)g(next)g(c)m(haracter;)k(single)d(quotes)g -(enclose)g(v)m(erbatim)g(sequences)150 874 y(of)k(c)m(haracters,)i(and) -e(can)g(b)s(e)g(used)f(to)i(inhibit)f(history)g(expansion;)g(and)g(c)m -(haracters)i(enclosed)e(within)150 983 y(double)h(quotes)i(ma)m(y)f(b)s -(e)f(sub)5 b(ject)31 b(to)h(history)f(expansion,)g(since)g(bac)m -(kslash)g(can)h(escap)s(e)f(the)g(history)150 1093 y(expansion)e(c)m +(enclose)g(v)m(erbatim)g(sequences)150 1445 y(of)k(c)m(haracters,)i +(and)e(can)g(b)s(e)g(used)f(to)i(inhibit)f(history)g(expansion;)g(and)g +(c)m(haracters)i(enclosed)e(within)150 1555 y(double)h(quotes)i(ma)m(y) +f(b)s(e)f(sub)5 b(ject)31 b(to)h(history)f(expansion,)g(since)g(bac)m +(kslash)g(can)h(escap)s(e)f(the)g(history)150 1664 y(expansion)e(c)m (haracter,)j(but)d(single)h(quotes)g(ma)m(y)h(not,)f(since)g(they)g -(are)g(not)f(treated)i(sp)s(ecially)f(within)150 1202 -y(double)g(quotes.)275 1339 y(When)41 b(using)g(the)h(shell,)i(only)e +(are)g(not)f(treated)i(sp)s(ecially)f(within)150 1774 +y(double)g(quotes.)275 1909 y(When)41 b(using)g(the)h(shell,)i(only)e (`)p Ft(\\)p Fu(')g(and)e(`)p Ft(')p Fu(')i(ma)m(y)g(b)s(e)f(used)g(to) -h(escap)s(e)g(the)g(history)f(expansion)150 1448 y(c)m(haracter,)e(but) +h(escap)s(e)g(the)g(history)f(expansion)150 2018 y(c)m(haracter,)e(but) 34 b(the)i(history)g(expansion)f(c)m(haracter)i(is)f(also)g(treated)h -(as)e(quoted)h(if)g(it)g(immediately)150 1558 y(precedes)30 +(as)e(quoted)h(if)g(it)g(immediately)150 2128 y(precedes)30 b(the)h(closing)g(double)f(quote)h(in)f(a)h(double-quoted)g(string.)275 -1695 y(Sev)m(eral)48 b(shell)g(options)h(settable)g(with)e(the)h +2263 y(There)25 b(is)h(a)h(sp)s(ecial)f(abbreviation)h(for)f +(substitution,)g(activ)m(e)j(when)c(the)h Fr(quic)m(k)h(substitution)e +Fu(c)m(har-)150 2372 y(acter)k(\(default)f(`)p Ft(^)p +Fu('\))h(is)f(the)g(\014rst)f(c)m(haracter)i(on)f(the)g(line.)40 +b(It)28 b(selects)h(the)f(previous)g(history)g(list)g(en)m(try)-8 +b(,)150 2482 y(using)34 b(an)g(ev)m(en)m(t)h(designator)g(equiv)-5 +b(alen)m(t)36 b(to)f Ft(!!)p Fu(,)f(and)g(substitutes)g(one)g(string)g +(for)g(another)h(in)e(that)150 2591 y(line.)61 b(It)37 +b(is)f(describ)s(ed)g(b)s(elo)m(w)h(\(see)h(Section)g(9.3.1)h([Ev)m(en) +m(t)f(Designators],)i(page)e(162\).)62 b(This)36 b(is)h(the)150 +2701 y(only)30 b(history)h(expansion)f(that)h(do)s(es)f(not)h(b)s(egin) +f(with)g(the)g(history)h(expansion)f(c)m(haracter.)275 +2836 y(Sev)m(eral)48 b(shell)g(options)h(settable)g(with)e(the)h Ft(shopt)f Fu(builtin)g(\(see)i(Section)f(4.3.2)i([The)e(Shopt)150 -1804 y(Builtin],)24 b(page)e(71\))h(ma)m(y)e(b)s(e)g(used)g(to)h +2945 y(Builtin],)24 b(page)e(73\))h(ma)m(y)e(b)s(e)g(used)g(to)h (tailor)g(the)g(b)s(eha)m(vior)f(of)h(history)f(expansion.)37 -b(If)21 b(the)h Ft(histverify)150 1914 y Fu(shell)35 +b(If)21 b(the)h Ft(histverify)150 3055 y Fu(shell)35 b(option)f(is)h(enabled,)g(and)f(Readline)h(is)f(b)s(eing)g(used,)h -(history)g(substitutions)e(are)i(not)g(immedi-)150 2023 +(history)g(substitutions)e(are)i(not)g(immedi-)150 3165 y(ately)i(passed)d(to)i(the)g(shell)f(parser.)55 b(Instead,)37 b(the)e(expanded)g(line)g(is)h(reloaded)g(in)m(to)g(the)f(Readline)150 -2133 y(editing)29 b(bu\013er)f(for)h(further)e(mo)s(di\014cation.)41 +3274 y(editing)29 b(bu\013er)f(for)h(further)e(mo)s(di\014cation.)41 b(If)28 b(Readline)h(is)g(b)s(eing)f(used,)h(and)f(the)h -Ft(histreedit)d Fu(shell)150 2242 y(option)e(is)g(enabled,)h(a)g +Ft(histreedit)d Fu(shell)150 3384 y(option)e(is)g(enabled,)h(a)g (failed)f(history)g(expansion)g(will)g(b)s(e)f(reloaded)h(in)m(to)h -(the)f(Readline)g(editing)h(bu\013er)150 2352 y(for)31 +(the)f(Readline)g(editing)h(bu\013er)150 3493 y(for)31 b(correction.)43 b(The)30 b Ft(-p)g Fu(option)h(to)h(the)f Ft(history)e Fu(builtin)h(command)h(ma)m(y)g(b)s(e)f(used)g(to)i(see)f -(what)g(a)150 2462 y(history)25 b(expansion)g(will)g(do)g(b)s(efore)g +(what)g(a)150 3603 y(history)25 b(expansion)g(will)g(do)g(b)s(efore)g (using)f(it.)40 b(The)24 b Ft(-s)h Fu(option)g(to)h(the)f -Ft(history)e Fu(builtin)i(ma)m(y)g(b)s(e)g(used)150 2571 +Ft(history)e Fu(builtin)i(ma)m(y)g(b)s(e)g(used)150 3713 y(to)36 b(add)f(commands)g(to)h(the)g(end)f(of)g(the)h(history)f(list)i (without)e(actually)i(executing)g(them,)g(so)e(that)150 -2681 y(they)c(are)f(a)m(v)-5 b(ailable)33 b(for)d(subsequen)m(t)g +3822 y(they)c(are)f(a)m(v)-5 b(ailable)33 b(for)d(subsequen)m(t)g (recall.)42 b(This)29 b(is)i(most)g(useful)e(in)h(conjunction)h(with)f -(Readline.)275 2817 y(The)j(shell)h(allo)m(ws)h(con)m(trol)h(of)e(the)g +(Readline.)275 3957 y(The)j(shell)h(allo)m(ws)h(con)m(trol)h(of)e(the)g (v)-5 b(arious)34 b(c)m(haracters)h(used)f(b)m(y)f(the)h(history)g -(expansion)g(mec)m(h-)150 2927 y(anism)h(with)g(the)g +(expansion)g(mec)m(h-)150 4067 y(anism)h(with)g(the)g Ft(histchars)d Fu(v)-5 b(ariable,)38 b(as)d(explained)g(ab)s(o)m(v)m(e) i(\(see)f(Section)f(5.2)i([Bash)e(V)-8 b(ariables],)150 -3036 y(page)32 b(78\).)44 b(The)31 b(shell)g(uses)g(the)g(history)g +4176 y(page)32 b(81\).)44 b(The)31 b(shell)g(uses)g(the)g(history)g (commen)m(t)i(c)m(haracter)f(to)g(mark)f(history)g(timestamps)h(when) -150 3146 y(writing)e(the)h(history)f(\014le.)150 3347 -y Fk(9.3.1)63 b(Ev)m(en)m(t)39 b(Designators)150 3494 +150 4286 y(writing)e(the)h(history)f(\014le.)150 4485 +y Fk(9.3.1)63 b(Ev)m(en)m(t)39 b(Designators)150 4632 y Fu(An)32 b(ev)m(en)m(t)j(designator)e(is)g(a)g(reference)g(to)h(a)f (command)f(line)h(en)m(try)g(in)g(the)g(history)g(list.)48 -b(Unless)33 b(the)150 3604 y(reference)e(is)f(absolute,)i(ev)m(en)m(ts) -f(are)g(relativ)m(e)i(to)e(the)f(curren)m(t)g(p)s(osition)h(in)f(the)h -(history)f(list.)150 3766 y Ft(!)432 b Fu(Start)34 b(a)f(history)h +b(Unless)33 b(the)150 4742 y(reference)40 b(is)f(absolute,)k(ev)m(en)m +(ts)e(are)f(relativ)m(e)i(to)e(the)g(curren)m(t)f(p)s(osition)g(in)h +(the)f(history)h(list.)68 b(The)150 4851 y(ev)m(en)m(t)35 +b(designator)f(consists)g(of)g(the)g(p)s(ortion)f(of)g(the)h(w)m(ord)f +(b)s(eginning)g(with)g(the)h(history)f(expansion)150 +4961 y(c)m(haracter,)f(and)e(ending)g(with)g(the)h(w)m(ord)f +(designator)h(if)f(one)h(is)f(presen)m(t,)h(or)f(the)h(end)e(of)i(the)g +(w)m(ord.)150 5121 y Ft(!)432 b Fu(Start)34 b(a)f(history)h (substitution,)g(except)g(when)f(follo)m(w)m(ed)i(b)m(y)e(a)h(space,)h -(tab,)f(the)g(end)f(of)630 3876 y(the)i(line,)g(`)p Ft(=)p -Fu(')g(or)f(`)p Ft(\()p Fu(')h(\(when)e(the)i Ft(extglob)d -Fu(shell)j(option)f(is)h(enabled)f(using)g(the)g Ft(shopt)630 -3985 y Fu(builtin\).)150 4147 y Ft(!)p Fj(n)384 b Fu(Refer)30 -b(to)i(command)e(line)g Fr(n)p Fu(.)150 4308 y Ft(!-)p -Fj(n)336 b Fu(Refer)30 b(to)i(the)e(command)g Fr(n)g -Fu(lines)h(bac)m(k.)150 4469 y Ft(!!)384 b Fu(Refer)30 -b(to)i(the)e(previous)g(command.)40 b(This)30 b(is)g(a)h(synon)m(ym)f -(for)g(`)p Ft(!-1)p Fu('.)150 4631 y Ft(!)p Fj(string)144 -b Fu(Refer)25 b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding)g -(the)g(curren)m(t)g(p)s(osition)g(in)g(the)g(history)630 -4740 y(list)31 b(starting)g(with)f Fr(string)p Fu(.)150 -4902 y Ft(!?)p Fj(string)p Ft([?])630 5011 y Fu(Refer)25 -b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding)g(the)g(curren)m(t) -g(p)s(osition)g(in)g(the)g(history)630 5121 y(list)32 -b(con)m(taining)i Fr(string)p Fu(.)45 b(The)31 b(trailing)i(`)p -Ft(?)p Fu(')f(ma)m(y)g(b)s(e)f(omitted)i(if)f(the)g Fr(string)39 -b Fu(is)32 b(follo)m(w)m(ed)630 5230 y(immediately)f(b)m(y)e(a)h -(newline.)40 b(If)29 b Fr(string)38 b Fu(is)29 b(missing,)h(the)g -(string)f(from)g(the)h(most)g(recen)m(t)630 5340 y(searc)m(h)h(is)f -(used;)g(it)h(is)g(an)f(error)g(if)g(there)h(is)f(no)g(previous)g -(searc)m(h)h(string.)p eop end -%%Page: 156 162 -TeXDict begin 156 161 bop 150 -116 a Fu(Chapter)30 b(9:)41 -b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(156)150 -299 y Ft(^)p Fj(string1)p Ft(^)p Fj(string2)p Ft(^)630 -408 y Fu(Quic)m(k)32 b(Substitution.)44 b(Rep)s(eat)32 -b(the)g(last)h(command,)f(replacing)g Fr(string1)40 b -Fu(with)31 b Fr(string2)p Fu(.)630 518 y(Equiv)-5 b(alen)m(t)31 -b(to)g Ft(!!:s^)p Fj(string1)p Ft(^)p Fj(string2)p Ft(^)p -Fu(.)150 673 y Ft(!#)384 b Fu(The)30 b(en)m(tire)h(command)f(line)h(t)m -(yp)s(ed)f(so)h(far.)150 867 y Fk(9.3.2)63 b(W)-10 b(ord)41 -b(Designators)150 1014 y Fu(W)-8 b(ord)27 b(designators)h(are)g(used)e -(to)i(select)h(desired)d(w)m(ords)h(from)f(the)i(ev)m(en)m(t.)41 -b(A)27 b(`)p Ft(:)p Fu(')g(separates)h(the)f(ev)m(en)m(t)150 -1124 y(sp)s(eci\014cation)38 b(from)e(the)h(w)m(ord)f(designator.)61 -b(It)37 b(ma)m(y)h(b)s(e)e(omitted)i(if)e(the)h(w)m(ord)g(designator)g -(b)s(egins)150 1233 y(with)30 b(a)g(`)p Ft(^)p Fu(',)g(`)p -Ft($)p Fu(',)g(`)p Ft(*)p Fu(',)h(`)p Ft(-)p Fu(',)f(or)g(`)p -Ft(\045)p Fu('.)41 b(W)-8 b(ords)30 b(are)g(n)m(um)m(b)s(ered)e(from)i -(the)g(b)s(eginning)f(of)h(the)g(line,)g(with)g(the)150 -1343 y(\014rst)f(w)m(ord)f(b)s(eing)h(denoted)h(b)m(y)f(0)h(\(zero\).) -41 b(W)-8 b(ords)30 b(are)g(inserted)f(in)m(to)h(the)g(curren)m(t)f -(line)g(separated)h(b)m(y)150 1452 y(single)h(spaces.)275 -1584 y(F)-8 b(or)31 b(example,)150 1739 y Ft(!!)384 b -Fu(designates)37 b(the)f(preceding)g(command.)57 b(When)35 -b(y)m(ou)i(t)m(yp)s(e)f(this,)h(the)f(preceding)g(com-)630 -1849 y(mand)30 b(is)g(rep)s(eated)g(in)g(toto.)150 2003 -y Ft(!!:$)288 b Fu(designates)23 b(the)g(last)g(argumen)m(t)g(of)f(the) -h(preceding)f(command.)38 b(This)22 b(ma)m(y)h(b)s(e)e(shortened)630 -2113 y(to)31 b Ft(!$)p Fu(.)150 2267 y Ft(!fi:2)240 b -Fu(designates)30 b(the)g(second)f(argumen)m(t)h(of)f(the)h(most)f -(recen)m(t)i(command)e(starting)h(with)f(the)630 2377 -y(letters)j Ft(fi)p Fu(.)275 2531 y(Here)e(are)h(the)g(w)m(ord)f -(designators:)150 2686 y Ft(0)g(\(zero\))114 b Fu(The)30 -b Ft(0)p Fu(th)g(w)m(ord.)40 b(F)-8 b(or)31 b(man)m(y)g(applications,)h -(this)e(is)g(the)h(command)f(w)m(ord.)150 2840 y Fj(n)432 -b Fu(The)30 b Fr(n)p Fu(th)g(w)m(ord.)150 2995 y Ft(^)432 -b Fu(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m(ord)g(1.)150 -3150 y Ft($)432 b Fu(The)30 b(last)h(argumen)m(t.)150 -3304 y Ft(\045)432 b Fu(The)40 b(\014rst)h(w)m(ord)f(matc)m(hed)i(b)m +(tab,)f(the)g(end)f(of)630 5230 y(the)24 b(line,)j(`)p +Ft(=)p Fu(',)f(or)e(the)g(rest)h(of)f(the)h(shell)f(metac)m(haracters)j +(de\014ned)c(ab)s(o)m(v)m(e)j(\(see)f(Chapter)f(2)630 +5340 y([De\014nitions],)32 b(page)f(3\).)p eop end +%%Page: 163 169 +TeXDict begin 163 168 bop 150 -116 a Fu(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(163)150 +299 y Ft(!)p Fj(n)384 b Fu(Refer)30 b(to)i(command)e(line)g +Fr(n)p Fu(.)150 452 y Ft(!-)p Fj(n)336 b Fu(Refer)30 +b(to)i(the)e(command)g Fr(n)g Fu(lines)h(bac)m(k.)150 +604 y Ft(!!)384 b Fu(Refer)30 b(to)i(the)e(previous)g(command.)40 +b(This)30 b(is)g(a)h(synon)m(ym)f(for)g(`)p Ft(!-1)p +Fu('.)150 757 y Ft(!)p Fj(string)144 b Fu(Refer)25 b(to)h(the)f(most)h +(recen)m(t)g(command)f(preceding)g(the)g(curren)m(t)g(p)s(osition)g(in) +g(the)g(history)630 867 y(list)31 b(starting)g(with)f +Fr(string)p Fu(.)150 1020 y Ft(!?)p Fj(string)p Ft([?])630 +1129 y Fu(Refer)25 b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding) +g(the)g(curren)m(t)g(p)s(osition)g(in)g(the)g(history)630 +1239 y(list)32 b(con)m(taining)i Fr(string)p Fu(.)45 +b(The)31 b(trailing)i(`)p Ft(?)p Fu(')f(ma)m(y)g(b)s(e)f(omitted)i(if)f +(the)g Fr(string)39 b Fu(is)32 b(follo)m(w)m(ed)630 1348 +y(immediately)f(b)m(y)e(a)h(newline.)40 b(If)29 b Fr(string)38 +b Fu(is)29 b(missing,)h(the)g(string)f(from)g(the)h(most)g(recen)m(t) +630 1458 y(searc)m(h)h(is)f(used;)g(it)h(is)g(an)f(error)g(if)g(there)h +(is)f(no)g(previous)g(searc)m(h)h(string.)150 1611 y +Ft(^)p Fj(string1)p Ft(^)p Fj(string2)p Ft(^)630 1720 +y Fu(Quic)m(k)h(Substitution.)44 b(Rep)s(eat)32 b(the)g(last)h +(command,)f(replacing)g Fr(string1)40 b Fu(with)31 b +Fr(string2)p Fu(.)630 1830 y(Equiv)-5 b(alen)m(t)31 b(to)g +Ft(!!:s^)p Fj(string1)p Ft(^)p Fj(string2)p Ft(^)p Fu(.)150 +1983 y Ft(!#)384 b Fu(The)30 b(en)m(tire)h(command)f(line)h(t)m(yp)s +(ed)f(so)h(far.)150 2175 y Fk(9.3.2)63 b(W)-10 b(ord)41 +b(Designators)150 2322 y Fu(W)-8 b(ord)28 b(designators)h(are)f(used)f +(to)i(select)h(desired)d(w)m(ords)h(from)f(the)h(ev)m(en)m(t.)42 +b(They)27 b(are)i(optional;)h(if)e(the)150 2432 y(w)m(ord)h(designator) +i(isn't)e(supplied,)g(the)h(history)g(expansion)f(uses)g(the)h(en)m +(tire)h(ev)m(en)m(t.)42 b(A)29 b(`)p Ft(:)p Fu(')h(separates)150 +2542 y(the)f(ev)m(en)m(t)i(sp)s(eci\014cation)e(from)g(the)g(w)m(ord)g +(designator.)41 b(It)29 b(ma)m(y)g(b)s(e)g(omitted)h(if)e(the)i(w)m +(ord)e(designator)150 2651 y(b)s(egins)33 b(with)h(a)h(`)p +Ft(^)p Fu(',)g(`)p Ft($)p Fu(',)g(`)p Ft(*)p Fu(',)h(`)p +Ft(-)p Fu(',)f(or)f(`)p Ft(\045)p Fu('.)52 b(W)-8 b(ords)35 +b(are)f(n)m(um)m(b)s(ered)f(from)g(the)i(b)s(eginning)e(of)h(the)g +(line,)150 2761 y(with)39 b(the)h(\014rst)f(w)m(ord)g(b)s(eing)g +(denoted)h(b)m(y)g(0)g(\(zero\).)70 b(W)-8 b(ords)39 +b(are)h(inserted)g(in)m(to)g(the)g(curren)m(t)g(line)150 +2870 y(separated)31 b(b)m(y)f(single)h(spaces.)275 3002 +y(F)-8 b(or)31 b(example,)150 3154 y Ft(!!)384 b Fu(designates)37 +b(the)f(preceding)g(command.)57 b(When)35 b(y)m(ou)i(t)m(yp)s(e)f +(this,)h(the)f(preceding)g(com-)630 3264 y(mand)30 b(is)g(rep)s(eated)g +(in)g(toto.)150 3417 y Ft(!!:$)288 b Fu(designates)23 +b(the)g(last)g(argumen)m(t)g(of)f(the)h(preceding)f(command.)38 +b(This)22 b(ma)m(y)h(b)s(e)e(shortened)630 3526 y(to)31 +b Ft(!$)p Fu(.)150 3679 y Ft(!fi:2)240 b Fu(designates)30 +b(the)g(second)f(argumen)m(t)h(of)f(the)h(most)f(recen)m(t)i(command)e +(starting)h(with)f(the)630 3789 y(letters)j Ft(fi)p Fu(.)275 +3942 y(Here)e(are)h(the)g(w)m(ord)f(designators:)150 +4094 y Ft(0)g(\(zero\))114 b Fu(The)30 b Ft(0)p Fu(th)g(w)m(ord.)40 +b(F)-8 b(or)31 b(man)m(y)g(applications,)h(this)e(is)g(the)h(command)f +(w)m(ord.)150 4247 y Fj(n)432 b Fu(The)30 b Fr(n)p Fu(th)g(w)m(ord.)150 +4400 y Ft(^)432 b Fu(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m +(ord)g(1.)150 4553 y Ft($)432 b Fu(The)30 b(last)h(argumen)m(t.)150 +4706 y Ft(\045)432 b Fu(The)40 b(\014rst)h(w)m(ord)f(matc)m(hed)i(b)m (y)f(the)g(most)g(recen)m(t)h(`)p Ft(?)p Fj(string)p Ft(?)p Fu(')d(searc)m(h,)44 b(if)d(the)g(searc)m(h)630 -3414 y(string)30 b(b)s(egins)g(with)g(a)h(c)m(haracter)h(that)f(is)f -(part)h(of)f(a)h(w)m(ord.)150 3568 y Fj(x)p Ft(-)p Fj(y)336 +4815 y(string)30 b(b)s(egins)g(with)g(a)h(c)m(haracter)h(that)f(is)f +(part)h(of)f(a)h(w)m(ord.)150 4968 y Fj(x)p Ft(-)p Fj(y)336 b Fu(A)30 b(range)h(of)g(w)m(ords;)f(`)p Ft(-)p Fj(y)p -Fu(')g(abbreviates)h(`)p Ft(0-)p Fj(y)p Fu('.)150 3723 +Fu(')g(abbreviates)h(`)p Ft(0-)p Fj(y)p Fu('.)150 5121 y Ft(*)432 b Fu(All)28 b(of)g(the)g(w)m(ords,)g(except)h(the)e Ft(0)p Fu(th.)40 b(This)27 b(is)g(a)h(synon)m(ym)f(for)h(`)p Ft(1-$)p Fu('.)39 b(It)28 b(is)g(not)g(an)f(error)630 -3832 y(to)j(use)g(`)p Ft(*)p Fu(')f(if)h(there)g(is)g(just)f(one)h(w)m +5230 y(to)j(use)g(`)p Ft(*)p Fu(')f(if)h(there)g(is)g(just)f(one)h(w)m (ord)f(in)g(the)h(ev)m(en)m(t;)i(the)d(empt)m(y)i(string)e(is)h -(returned)e(in)630 3942 y(that)j(case.)150 4097 y Fj(x)p -Ft(*)384 b Fu(Abbreviates)31 b(`)p Fj(x)p Ft(-$)p Fu(')150 -4251 y Fj(x)p Ft(-)384 b Fu(Abbreviates)27 b(`)p Fj(x)p -Ft(-$)p Fu(')g(lik)m(e)h(`)p Fj(x)p Ft(*)p Fu(',)g(but)e(omits)i(the)f -(last)h(w)m(ord.)39 b(If)27 b(`)p Ft(x)p Fu(')g(is)g(missing,)g(it)h -(defaults)630 4361 y(to)j(0.)275 4515 y(If)i(a)h(w)m(ord)g(designator)g -(is)g(supplied)f(without)h(an)g(ev)m(en)m(t)h(sp)s(eci\014cation,)h -(the)e(previous)f(command)150 4625 y(is)d(used)g(as)h(the)f(ev)m(en)m -(t.)150 4819 y Fk(9.3.3)63 b(Mo)s(di\014ers)150 4966 -y Fu(After)29 b(the)g(optional)g(w)m(ord)g(designator,)g(y)m(ou)g(can)g -(add)f(a)h(sequence)g(of)g(one)g(or)f(more)h(of)g(the)f(follo)m(wing) -150 5076 y(mo)s(di\014ers,)33 b(eac)m(h)h(preceded)f(b)m(y)g(a)h(`)p +(returned)e(in)630 5340 y(that)j(case.)p eop end +%%Page: 164 170 +TeXDict begin 164 169 bop 150 -116 a Fu(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(164)150 +299 y Fj(x)p Ft(*)384 b Fu(Abbreviates)31 b(`)p Fj(x)p +Ft(-$)p Fu(')150 458 y Fj(x)p Ft(-)384 b Fu(Abbreviates)27 +b(`)p Fj(x)p Ft(-$)p Fu(')g(lik)m(e)h(`)p Fj(x)p Ft(*)p +Fu(',)g(but)e(omits)i(the)f(last)h(w)m(ord.)39 b(If)27 +b(`)p Ft(x)p Fu(')g(is)g(missing,)g(it)h(defaults)630 +568 y(to)j(0.)275 727 y(If)i(a)h(w)m(ord)g(designator)g(is)g(supplied)f +(without)h(an)g(ev)m(en)m(t)h(sp)s(eci\014cation,)h(the)e(previous)f +(command)150 837 y(is)d(used)g(as)h(the)f(ev)m(en)m(t.)150 +1036 y Fk(9.3.3)63 b(Mo)s(di\014ers)150 1183 y Fu(After)29 +b(the)g(optional)g(w)m(ord)g(designator,)g(y)m(ou)g(can)g(add)f(a)h +(sequence)g(of)g(one)g(or)f(more)h(of)g(the)f(follo)m(wing)150 +1293 y(mo)s(di\014ers,)33 b(eac)m(h)h(preceded)f(b)m(y)g(a)h(`)p Ft(:)p Fu('.)50 b(These)33 b(mo)s(dify)-8 b(,)33 b(or)h(edit,)g(the)g -(w)m(ord)f(or)g(w)m(ords)g(selected)h(from)150 5185 y(the)d(history)f -(ev)m(en)m(t.)150 5340 y Ft(h)432 b Fu(Remo)m(v)m(e)32 +(w)m(ord)f(or)g(w)m(ords)g(selected)h(from)150 1402 y(the)d(history)f +(ev)m(en)m(t.)150 1562 y Ft(h)432 b Fu(Remo)m(v)m(e)32 b(a)f(trailing)g(pathname)g(comp)s(onen)m(t,)g(lea)m(ving)h(only)e(the) -h(head.)p eop end -%%Page: 157 163 -TeXDict begin 157 162 bop 150 -116 a Fu(Chapter)30 b(9:)41 -b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(157)150 -299 y Ft(t)432 b Fu(Remo)m(v)m(e)32 b(all)f(leading)h(pathname)e(comp)s -(onen)m(ts,)h(lea)m(ving)h(the)e(tail.)150 458 y Ft(r)432 -b Fu(Remo)m(v)m(e)32 b(a)f(trailing)g(su\016x)f(of)g(the)h(form)f(`)p -Ft(.)p Fj(suffix)p Fu(',)f(lea)m(ving)j(the)f(basename.)150 -618 y Ft(e)432 b Fu(Remo)m(v)m(e)32 b(all)f(but)f(the)h(trailing)g -(su\016x.)150 777 y Ft(p)432 b Fu(Prin)m(t)30 b(the)h(new)f(command)g -(but)g(do)g(not)g(execute)i(it.)150 936 y Ft(q)432 b -Fu(Quote)31 b(the)f(substituted)g(w)m(ords,)g(escaping)h(further)e -(substitutions.)150 1096 y Ft(x)432 b Fu(Quote)32 b(the)f(substituted)g -(w)m(ords)f(as)i(with)f(`)p Ft(q)p Fu(',)h(but)e(break)h(in)m(to)i(w)m -(ords)d(at)i(spaces,)h(tabs,)630 1205 y(and)38 b(newlines.)66 -b(The)39 b(`)p Ft(q)p Fu(')g(and)f(`)p Ft(x)p Fu(')h(mo)s(di\014ers)f -(are)h(m)m(utually)g(exclusiv)m(e;)45 b(the)39 b(last)h(one)630 -1315 y(supplied)29 b(is)i(used.)150 1474 y Ft(s/)p Fj(old)p -Ft(/)p Fj(new)p Ft(/)630 1584 y Fu(Substitute)g Fr(new)39 -b Fu(for)32 b(the)g(\014rst)f(o)s(ccurrence)h(of)f Fr(old)36 -b Fu(in)31 b(the)h(ev)m(en)m(t)h(line.)46 b(An)m(y)31 -b(c)m(haracter)630 1694 y(ma)m(y)k(b)s(e)e(used)h(as)g(the)h(delimiter) -g(in)f(place)h(of)f(`)p Ft(/)p Fu('.)53 b(The)33 b(delimiter)i(ma)m(y)g -(b)s(e)f(quoted)g(in)630 1803 y Fr(old)40 b Fu(and)c -Fr(new)44 b Fu(with)36 b(a)h(single)g(bac)m(kslash.)60 -b(If)36 b(`)p Ft(&)p Fu(')h(app)s(ears)e(in)i Fr(new)p -Fu(,)g(it)h(is)e(replaced)h(b)m(y)630 1913 y Fr(old)p -Fu(.)k(A)31 b(single)g(bac)m(kslash)g(will)g(quote)g(the)g(`)p -Ft(&)p Fu('.)41 b(If)31 b Fr(old)j Fu(is)c(n)m(ull,)h(it)g(is)g(set)g -(to)g(the)g(last)g Fr(old)630 2022 y Fu(substituted,)j(or,)g(if)f(no)g -(previous)g(history)g(substitutions)g(to)s(ok)h(place,)h(the)e(last)h -Fr(string)630 2132 y Fu(in)d(a)g(!?)p Fr(string)8 b Ft([?])30 -b Fu(searc)m(h.)44 b(If)31 b Fr(new)38 b Fu(is)31 b(n)m(ull,)h(eac)m(h) -g(matc)m(hing)g Fr(old)j Fu(is)c(deleted.)44 b(The)30 -b(\014nal)630 2242 y(delimiter)h(is)g(optional)g(if)f(it)h(is)g(the)f -(last)h(c)m(haracter)h(on)f(the)f(input)g(line.)150 2401 -y Ft(&)432 b Fu(Rep)s(eat)31 b(the)f(previous)g(substitution.)150 -2560 y Ft(g)150 2670 y(a)432 b Fu(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f -(applied)h(o)m(v)m(er)h(the)f(en)m(tire)g(ev)m(en)m(t)h(line.)66 -b(Used)39 b(in)f(conjunction)630 2780 y(with)30 b(`)p -Ft(s)p Fu(',)h(as)f(in)h Ft(gs/)p Fj(old)p Ft(/)p Fj(new)p -Ft(/)p Fu(,)c(or)j(with)h(`)p Ft(&)p Fu('.)150 2939 y -Ft(G)432 b Fu(Apply)30 b(the)g(follo)m(wing)i(`)p Ft(s)p -Fu(')f(or)f(`)p Ft(&)p Fu(')h(mo)s(di\014er)e(once)i(to)g(eac)m(h)h(w)m -(ord)e(in)g(the)g(ev)m(en)m(t.)p eop end -%%Page: 158 164 -TeXDict begin 158 163 bop 3614 -116 a Fu(158)150 299 +h(head.)150 1721 y Ft(t)432 b Fu(Remo)m(v)m(e)32 b(all)f(leading)h +(pathname)e(comp)s(onen)m(ts,)h(lea)m(ving)h(the)e(tail.)150 +1880 y Ft(r)432 b Fu(Remo)m(v)m(e)32 b(a)f(trailing)g(su\016x)f(of)g +(the)h(form)f(`)p Ft(.)p Fj(suffix)p Fu(',)f(lea)m(ving)j(the)f +(basename.)150 2040 y Ft(e)432 b Fu(Remo)m(v)m(e)32 b(all)f(but)f(the)h +(trailing)g(su\016x.)150 2199 y Ft(p)432 b Fu(Prin)m(t)30 +b(the)h(new)f(command)g(but)g(do)g(not)g(execute)i(it.)150 +2359 y Ft(q)432 b Fu(Quote)31 b(the)f(substituted)g(w)m(ords,)g +(escaping)h(further)e(substitutions.)150 2518 y Ft(x)432 +b Fu(Quote)32 b(the)f(substituted)g(w)m(ords)f(as)i(with)f(`)p +Ft(q)p Fu(',)h(but)e(break)h(in)m(to)i(w)m(ords)d(at)i(spaces,)h(tabs,) +630 2628 y(and)38 b(newlines.)66 b(The)39 b(`)p Ft(q)p +Fu(')g(and)f(`)p Ft(x)p Fu(')h(mo)s(di\014ers)f(are)h(m)m(utually)g +(exclusiv)m(e;)45 b(the)39 b(last)h(one)630 2737 y(supplied)29 +b(is)i(used.)150 2897 y Ft(s/)p Fj(old)p Ft(/)p Fj(new)p +Ft(/)630 3006 y Fu(Substitute)g Fr(new)39 b Fu(for)32 +b(the)g(\014rst)f(o)s(ccurrence)h(of)f Fr(old)36 b Fu(in)31 +b(the)h(ev)m(en)m(t)h(line.)46 b(An)m(y)31 b(c)m(haracter)630 +3116 y(ma)m(y)k(b)s(e)e(used)h(as)g(the)h(delimiter)g(in)f(place)h(of)f +(`)p Ft(/)p Fu('.)53 b(The)33 b(delimiter)i(ma)m(y)g(b)s(e)f(quoted)g +(in)630 3225 y Fr(old)40 b Fu(and)c Fr(new)44 b Fu(with)36 +b(a)h(single)g(bac)m(kslash.)60 b(If)36 b(`)p Ft(&)p +Fu(')h(app)s(ears)e(in)i Fr(new)p Fu(,)g(it)h(is)e(replaced)h(b)m(y)630 +3335 y Fr(old)p Fu(.)k(A)31 b(single)g(bac)m(kslash)g(will)g(quote)g +(the)g(`)p Ft(&)p Fu('.)41 b(If)31 b Fr(old)j Fu(is)c(n)m(ull,)h(it)g +(is)g(set)g(to)g(the)g(last)g Fr(old)630 3445 y Fu(substituted,)j(or,)g +(if)f(no)g(previous)g(history)g(substitutions)g(to)s(ok)h(place,)h(the) +e(last)h Fr(string)630 3554 y Fu(in)d(a)g(!?)p Fr(string)8 +b Ft([?])30 b Fu(searc)m(h.)44 b(If)31 b Fr(new)38 b +Fu(is)31 b(n)m(ull,)h(eac)m(h)g(matc)m(hing)g Fr(old)j +Fu(is)c(deleted.)44 b(The)30 b(\014nal)630 3664 y(delimiter)h(is)g +(optional)g(if)f(it)h(is)g(the)f(last)h(c)m(haracter)h(on)f(the)f +(input)g(line.)150 3823 y Ft(&)432 b Fu(Rep)s(eat)31 +b(the)f(previous)g(substitution.)150 3983 y Ft(g)150 +4092 y(a)432 b Fu(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f(applied)h(o)m(v) +m(er)h(the)f(en)m(tire)g(ev)m(en)m(t)h(line.)66 b(Used)39 +b(in)f(conjunction)630 4202 y(with)30 b(`)p Ft(s)p Fu(',)h(as)f(in)h +Ft(gs/)p Fj(old)p Ft(/)p Fj(new)p Ft(/)p Fu(,)c(or)j(with)h(`)p +Ft(&)p Fu('.)150 4361 y Ft(G)432 b Fu(Apply)30 b(the)g(follo)m(wing)i +(`)p Ft(s)p Fu(')f(or)f(`)p Ft(&)p Fu(')h(mo)s(di\014er)e(once)i(to)g +(eac)m(h)h(w)m(ord)e(in)g(the)g(ev)m(en)m(t.)p eop end +%%Page: 165 171 +TeXDict begin 165 170 bop 3614 -116 a Fu(165)150 299 y Fp(10)80 b(Installing)52 b(Bash)150 539 y Fu(This)31 b(c)m(hapter)h(pro)m(vides)g(basic)g(instructions)f(for)g(installing)i (Bash)f(on)f(the)h(v)-5 b(arious)31 b(supp)s(orted)f(plat-)150 @@ -19574,7 +20097,7 @@ Fu(')i(migh)m(t)i(b)s(e)f(required.)47 b(More)33 b(information)g(ab)s (out)f(con-)330 3071 y(trolling)c(the)g(lo)s(cations)g(where)f Ft(bash)f Fu(and)h(other)g(\014les)g(are)h(installed)g(is)f(b)s(elo)m (w)g(\(see)h(Section)g(10.4)330 3181 y([Installation)k(Names],)g(page)f -(160\).)275 3343 y(The)20 b Ft(configure)f Fu(shell)i(script)g +(167\).)275 3343 y(The)20 b Ft(configure)f Fu(shell)i(script)g (attempts)h(to)g(guess)f(correct)i(v)-5 b(alues)21 b(for)g(v)-5 b(arious)21 b(system-dep)s(enden)m(t)150 3453 y(v)-5 b(ariables)38 b(used)f(during)f(compilation.)64 b(It)37 @@ -19605,19 +20128,19 @@ b(t)m(yp)s(e)390 4602 y Ft(bash-4.2$)45 b(./configure)g(--help)150 (Bash)g(in)h(a)g(directory)g(separate)g(from)f(the)h(source)g (directory)g({)g(to)g(build)150 4984 y(for)30 b(m)m(ultiple)i(arc)m (hitectures,)g(for)e(example)h({)g(just)f(use)h(the)f(full)h(path)f(to) -h(the)g(con\014gure)f(script.)41 b(The)150 5094 y(follo)m(wing)24 -b(commands)f(will)g(build)f(bash)g(in)g(a)h(directory)h(under)d -Ft(/usr/local/build)d Fu(from)23 b(the)g(source)150 5204 +h(the)g(con\014gure)f(script.)41 b(The)150 5094 y(follo)m(wing)23 +b(commands)e(will)h(build)f(Bash)h(in)f(a)h(directory)g(under)f +Ft(/usr/local/build)c Fu(from)k(the)h(source)150 5204 y(co)s(de)31 b(in)f Ft(/usr/local/src/bash-4.4)o Fu(:)390 5340 y Ft(mkdir)46 b(/usr/local/build/bash-4.4)p eop end -%%Page: 159 165 -TeXDict begin 159 164 bop 150 -116 a Fu(Chapter)30 b(10:)41 -b(Installing)31 b(Bash)2356 b(159)390 299 y Ft(cd)47 +%%Page: 166 172 +TeXDict begin 166 171 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(166)390 299 y Ft(cd)47 b(/usr/local/build/bash-4.4)390 408 y(bash)g(/usr/local/src/bash-4.4)o (/con)o(fig)o(ure)390 518 y(make)275 652 y Fu(See)27 b(Section)h(10.3)g([Compiling)g(F)-8 b(or)27 b(Multiple)h(Arc)m -(hitectures],)i(page)d(159,)j(for)c(more)i(information)150 +(hitectures],)i(page)d(166,)j(for)c(more)i(information)150 762 y(ab)s(out)i(building)g(in)g(a)g(directory)h(separate)h(from)e(the) g(source.)275 896 y(If)53 b(y)m(ou)h(need)f(to)i(do)e(un)m(usual)g (things)g(to)i(compile)g(Bash,)k(please)c(try)e(to)i(\014gure)e(out)h @@ -19668,7 +20191,7 @@ Ft(make)p Fu(.)55 b Ft(cd)35 b Fu(to)i(the)e(directory)h(where)150 3817 y(y)m(ou)k(w)m(an)m(t)h(the)g(ob)5 b(ject)41 b(\014les)f(and)f (executables)j(to)e(go)h(and)f(run)e(the)j Ft(configure)c Fu(script)j(from)g(the)150 3926 y(source)32 b(directory)h(\(see)g -(Section)f(10.1)i([Basic)f(Installation],)i(page)e(158\).)47 +(Section)f(10.1)i([Basic)f(Installation],)i(page)e(165\).)47 b(Y)-8 b(ou)32 b(ma)m(y)h(need)f(to)g(supply)150 4036 y(the)43 b Ft(--srcdir=PATH)c Fu(argumen)m(t)k(to)h(tell)g Ft(configure)c Fu(where)i(the)h(source)g(\014les)g(are.)78 @@ -19697,9 +20220,9 @@ Fu(:)390 5096 y Ft(bash)47 b(/usr/gnu/src/bash-2.0/s)o(uppo)o(rt/)o h(one)150 5340 y(arc)m(hitecture)32 b(b)s(efore)e(y)m(ou)h(can)f (create)i(build)e(directories)h(for)f(other)h(arc)m(hitectures.)p eop end -%%Page: 160 166 -TeXDict begin 160 165 bop 150 -116 a Fu(Chapter)30 b(10:)41 -b(Installing)31 b(Bash)2356 b(160)150 299 y Fs(10.4)68 +%%Page: 167 173 +TeXDict begin 167 172 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(167)150 299 y Fs(10.4)68 b(Installation)47 b(Names)150 458 y Fu(By)36 b(default,)g(`)p Ft(make)30 b(install)p Fu(')j(will)j(install)g(in)m(to)g Ft(/usr/local/bin)p Fu(,)d Ft(/usr/local/man)p Fu(,)g(etc.;)39 @@ -19715,7 +20238,7 @@ Fu(')i(\(e.g.,)37 b(`)p Ft(make)30 b(install)150 897 y(prefix=)p Fj(PATH)p Fu('\).)35 b(The)21 b Ft(prefix)f Fu(v)-5 b(ariable)22 b(pro)m(vides)g(a)f(default)h(for)f Ft(exec_prefix)e Fu(and)i(other)g(v)-5 b(ariables)150 -1006 y(used)30 b(when)f(installing)i(bash.)275 1159 y(Y)-8 +1006 y(used)30 b(when)f(installing)i(Bash.)275 1159 y(Y)-8 b(ou)71 b(can)h(sp)s(ecify)f(separate)h(installation)h(pre\014xes)d (for)h(arc)m(hitecture-sp)s(eci\014c)i(\014les)f(and)150 1268 y(arc)m(hitecture-indep)s(enden)m(t)44 b(\014les.)80 @@ -19732,8 +20255,8 @@ b(as)h(argumen)m(ts)f(to)h Ft(make)p Fu(:)38 b(`)p Ft(make)29 b(install)g(exec_prefix=/)p Fu(')23 b(will)28 b(install)g Ft(bash)e Fu(and)150 1859 y Ft(bashbug)i Fu(in)m(to)k Ft(/bin)d Fu(instead)i(of)f(the)h(default)f Ft(/usr/local/bin)p -Fu(.)275 2012 y(If)43 b(y)m(ou)i(w)m(an)m(t)g(to)g(see)f(the)h(\014les) -f(bash)f(will)i(install)g(and)e(where)h(it)g(will)h(install)g(them)f +Fu(.)275 2012 y(If)42 b(y)m(ou)i(w)m(an)m(t)g(to)g(see)g(the)f(\014les) +h(Bash)f(will)h(install)g(and)e(where)h(it)h(will)g(install)g(them)f (without)150 2122 y(c)m(hanging)35 b(an)m(ything)f(on)f(y)m(our)h (system,)h(sp)s(ecify)e(the)h(v)-5 b(ariable)35 b Ft(DESTDIR)d Fu(as)i(an)f(argumen)m(t)h(to)h Ft(make)p Fu(.)150 2231 @@ -19786,9 +20309,9 @@ Ft(CONFIG_SITE)c Fu(en)m(vironmen)m(t)k(v)-5 b(ari-)150 b(A)40 b(w)m(arning:)58 b(the)40 b(Bash)g Ft(configure)c Fu(lo)s(oks)k(for)f(a)h(site)150 5340 y(script,)31 b(but)e(not)i(all)g Ft(configure)d Fu(scripts)i(do.)p eop end -%%Page: 161 167 -TeXDict begin 161 166 bop 150 -116 a Fu(Chapter)30 b(10:)41 -b(Installing)31 b(Bash)2356 b(161)150 299 y Fs(10.7)68 +%%Page: 168 174 +TeXDict begin 168 173 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(168)150 299 y Fs(10.7)68 b(Op)t(eration)46 b(Con)l(trols)150 458 y Ft(configure)28 b Fu(recognizes)k(the)e(follo)m(wing)i(options)f(to)g(con)m(trol)h(ho)m (w)e(it)h(op)s(erates.)150 606 y Ft(--cache-file=)p Fj(file)630 @@ -19852,9 +20375,9 @@ g(a)h(lo)s(cally-installed)i(v)m(ersion)e(of)g(Readline)g(rather)630 5340 y(than)f(the)h(v)m(ersion)g(in)f Ft(lib/readline)p Fu(.)36 b(This)25 b(w)m(orks)g(only)h(with)f(Readline)h(5.0)h(and)e (later)p eop end -%%Page: 162 168 -TeXDict begin 162 167 bop 150 -116 a Fu(Chapter)30 b(10:)41 -b(Installing)31 b(Bash)2356 b(162)630 299 y(v)m(ersions.)46 +%%Page: 169 175 +TeXDict begin 169 174 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(169)630 299 y(v)m(ersions.)46 b(If)32 b Fr(PREFIX)41 b Fu(is)32 b Ft(yes)f Fu(or)i(not)f(supplied,)f Ft(configure)f Fu(uses)i(the)g(v)-5 b(alues)32 b(of)h(the)630 408 y(mak)m(e)28 b(v)-5 b(ariables)29 b Ft(includedir)24 @@ -19920,14 +20443,14 @@ m(vide)150 4946 y(the)e(necessary)f(supp)s(ort.)150 5121 y Ft(--enable-alias)630 5230 y Fu(Allo)m(w)41 b(alias)g(expansion)f (and)f(include)g(the)h Ft(alias)f Fu(and)g Ft(unalias)e Fu(builtins)j(\(see)g(Sec-)630 5340 y(tion)31 b(6.6)g([Aliases],)i -(page)e(100\).)p eop end -%%Page: 163 169 -TeXDict begin 163 168 bop 150 -116 a Fu(Chapter)30 b(10:)41 -b(Installing)31 b(Bash)2356 b(163)150 299 y Ft +(page)e(103\).)p eop end +%%Page: 170 176 +TeXDict begin 170 175 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(170)150 299 y Ft (--enable-alt-array-imple)o(ment)o(atio)o(n)630 408 y -Fu(This)33 b(builds)g(bash)g(using)h(an)g(alternate)i(implemen)m -(tation)f(of)g(arra)m(ys)f(\(see)h(Section)g(6.7)630 -518 y([Arra)m(ys],)43 b(page)d(100\))h(that)f(pro)m(vides)g(faster)g +Fu(This)32 b(builds)g(Bash)h(using)f(an)g(alternate)j(implemen)m +(tation)f(of)f(arra)m(ys)h(\(see)f(Section)h(6.7)630 +518 y([Arra)m(ys],)43 b(page)d(103\))h(that)f(pro)m(vides)g(faster)g (access)h(at)f(the)g(exp)s(ense)f(of)h(using)f(more)630 628 y(memory)30 b(\(sometimes)i(man)m(y)e(times)h(more,)g(dep)s(ending) e(on)h(ho)m(w)h(sparse)f(an)g(arra)m(y)h(is\).)150 774 @@ -19938,11 +20461,11 @@ Ft(for)f Fu(command)h(that)h(b)s(eha)m(v)m(es)f(lik)m(e)i(the)630 (3.2.5.1)i([Lo)s(oping)d(Constructs],)h(page)g(11\).)150 1139 y Ft(--enable-array-variables)630 1249 y Fu(Include)h(supp)s(ort)g (for)h(one-dimensional)h(arra)m(y)f(shell)h(v)-5 b(ariables)33 -b(\(see)h(Section)g(6.7)h([Ar-)630 1358 y(ra)m(ys],)c(page)g(100\).)150 +b(\(see)h(Section)g(6.7)h([Ar-)630 1358 y(ra)m(ys],)c(page)g(103\).)150 1504 y Ft(--enable-bang-history)630 1614 y Fu(Include)36 b(supp)s(ort)f(for)h Ft(csh)p Fu(-lik)m(e)h(history)g(substitution)f (\(see)h(Section)g(9.3)h([History)f(In-)630 1724 y(teraction],)c(page)e -(154\).)150 1870 y Ft(--enable-brace-expansion)630 1979 +(161\).)150 1870 y Ft(--enable-brace-expansion)630 1979 y Fu(Include)40 b Ft(csh)p Fu(-lik)m(e)h(brace)f(expansion)g(\()h Ft(b{a,b}c)d Fq(7!)i Ft(bac)30 b(bbc)39 b Fu(\).)71 b(See)40 b(Section)h(3.5.1)630 2089 y([Brace)32 b(Expansion],)e(page)h(24,)h @@ -19977,32 +20500,32 @@ b(supp)s(ort)f(for)i(copro)s(cesses)g(and)f(the)h Ft(coproc)e Fu(reserv)m(ed)i(w)m(ord)g(\(see)h(Section)f(3.2.3)630 4609 y([Pip)s(elines],)31 b(page)g(10\).)150 4756 y Ft (--enable-debugger)630 4865 y Fu(Include)f(supp)s(ort)e(for)i(the)h -(bash)f(debugger)g(\(distributed)g(separately\).)150 -5011 y Ft(--enable-dev-fd-stat-bro)o(ken)630 5121 y Fu(If)c(calling)j +(Bash)g(debugger)f(\(distributed)f(separately\).)150 +5011 y Ft(--enable-dev-fd-stat-bro)o(ken)630 5121 y Fu(If)d(calling)j Ft(stat)d Fu(on)g(/dev/fd/)p Fr(N)38 b Fu(returns)25 b(di\013eren)m(t)j(results)f(than)f(calling)j Ft(fstat)c Fu(on)i(\014le)630 5230 y(descriptor)g Fr(N)p Fu(,)i(supply)c(this)j (option)g(to)g(enable)f(a)h(w)m(ork)-5 b(around.)39 b(This)27 b(has)g(implications)630 5340 y(for)j(conditional)i(commands)e(that)h (test)g(\014le)g(attributes.)p eop end -%%Page: 164 170 -TeXDict begin 164 169 bop 150 -116 a Fu(Chapter)30 b(10:)41 -b(Installing)31 b(Bash)2356 b(164)150 299 y Ft +%%Page: 171 177 +TeXDict begin 171 176 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(171)150 299 y Ft (--enable-direxpand-defau)o(lt)630 408 y Fu(Cause)53 b(the)g Ft(direxpand)d Fu(shell)j(option)h(\(see)g(Section)f(4.3.2)i -([The)e(Shopt)f(Builtin],)630 518 y(page)29 b(71\))g(to)f(b)s(e)f +([The)e(Shopt)f(Builtin],)630 518 y(page)29 b(73\))g(to)f(b)s(e)f (enabled)h(b)m(y)g(default)g(when)e(the)i(shell)g(starts.)41 b(It)27 b(is)h(normally)g(disabled)630 628 y(b)m(y)i(default.)150 807 y Ft(--enable-directory-stack)630 917 y Fu(Include)j(supp)s(ort)g (for)h(a)g Ft(csh)p Fu(-lik)m(e)h(directory)f(stac)m(k)i(and)d(the)i Ft(pushd)p Fu(,)f Ft(popd)p Fu(,)g(and)f Ft(dirs)630 1026 y Fu(builtins)d(\(see)h(Section)g(6.8)h([The)e(Directory)i(Stac)m -(k],)g(page)f(102\).)150 1205 y Ft(--enable-disabled-builti)o(ns)630 +(k],)g(page)f(105\).)150 1205 y Ft(--enable-disabled-builti)o(ns)630 1315 y Fu(Allo)m(w)40 b(builtin)e(commands)g(to)h(b)s(e)f(in)m(v)m(ok)m (ed)i(via)f(`)p Ft(builtin)29 b(xxx)p Fu(')37 b(ev)m(en)j(after)f Ft(xxx)e Fu(has)630 1425 y(b)s(een)31 b(disabled)g(using)g(`)p Ft(enable)d(-n)i(xxx)p Fu('.)43 b(See)32 b(Section)g(4.2)h([Bash)e -(Builtins],)i(page)f(55,)630 1534 y(for)e(details)i(of)e(the)h +(Builtins],)i(page)f(57,)630 1534 y(for)e(details)i(of)e(the)h Ft(builtin)d Fu(and)i Ft(enable)e Fu(builtin)i(commands.)150 1714 y Ft(--enable-dparen-arithmet)o(ic)630 1823 y Fu(Include)42 b(supp)s(ort)f(for)h(the)h Ft(\(\(...)o(\)\))f Fu(command)g(\(see)i @@ -20011,70 +20534,70 @@ b(page)h(12\).)150 2112 y Ft(--enable-extended-glob)630 2222 y Fu(Include)40 b(supp)s(ort)e(for)i(the)h(extended)f(pattern)h (matc)m(hing)g(features)g(describ)s(ed)e(ab)s(o)m(v)m(e)630 2331 y(under)29 b(Section)i(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i -(page)e(36.)150 2511 y Ft(--enable-extended-glob-d)o(efau)o(lt)630 +(page)e(37.)150 2511 y Ft(--enable-extended-glob-d)o(efau)o(lt)630 2620 y Fu(Set)37 b(the)f(default)h(v)-5 b(alue)37 b(of)f(the)h Ft(extglob)d Fu(shell)j(option)g(describ)s(ed)e(ab)s(o)m(v)m(e)j(under) -c(Sec-)630 2730 y(tion)d(4.3.2)h([The)e(Shopt)g(Builtin],)h(page)g(71,) +c(Sec-)630 2730 y(tion)d(4.3.2)h([The)e(Shopt)g(Builtin],)h(page)g(73,) h(to)f(b)s(e)f(enabled.)150 2909 y Ft(--enable-function-import)630 3019 y Fu(Include)23 b(supp)s(ort)g(for)g(imp)s(orting)h(function)g (de\014nitions)f(exp)s(orted)h(b)m(y)g(another)g(instance)630 3128 y(of)31 b(the)f(shell)h(from)f(the)g(en)m(vironmen)m(t.)41 b(This)30 b(option)h(is)f(enabled)h(b)m(y)f(default.)150 -3308 y Ft(--enable-glob-asciirange)o(-def)o(ault)630 +3308 y Ft(--enable-glob-asciirange)o(s-de)o(faul)o(t)630 3417 y Fu(Set)f(the)f(default)h(v)-5 b(alue)29 b(of)f(the)h Ft(globasciiranges)24 b Fu(shell)29 b(option)g(describ)s(ed)e(ab)s(o)m (v)m(e)j(un-)630 3527 y(der)c(Section)i(4.3.2)h([The)d(Shopt)g -(Builtin],)j(page)f(71,)g(to)g(b)s(e)e(enabled.)40 b(This)26 +(Builtin],)j(page)f(73,)g(to)g(b)s(e)e(enabled.)40 b(This)26 b(con)m(trols)i(the)630 3636 y(b)s(eha)m(vior)40 b(of)f(c)m(haracter)i (ranges)f(when)f(used)f(in)i(pattern)f(matc)m(hing)i(brac)m(k)m(et)g (expres-)630 3746 y(sions.)150 3925 y Ft(--enable-help-builtin)630 4035 y Fu(Include)24 b(the)h Ft(help)f Fu(builtin,)h(whic)m(h)g(displa) m(ys)f(help)h(on)f(shell)h(builtins)f(and)h(v)-5 b(ariables)25 b(\(see)630 4144 y(Section)31 b(4.2)h([Bash)e(Builtins],)i(page)f -(55\).)150 4324 y Ft(--enable-history)630 4433 y Fu(Include)e(command)g +(57\).)150 4324 y Ft(--enable-history)630 4433 y Fu(Include)e(command)g (history)h(and)f(the)h Ft(fc)f Fu(and)g Ft(history)e Fu(builtin)j(commands)f(\(see)h(Sec-)630 4543 y(tion)h(9.1)g([Bash)g -(History)g(F)-8 b(acilities],)34 b(page)d(152\).)150 +(History)g(F)-8 b(acilities],)34 b(page)d(159\).)150 4722 y Ft(--enable-job-control)630 4832 y Fu(This)h(enables)i(the)f (job)g(con)m(trol)i(features)e(\(see)i(Chapter)d(7)i([Job)f(Con)m -(trol],)i(page)f(113\),)630 4941 y(if)c(the)h(op)s(erating)g(system)f +(trol],)i(page)f(118\),)630 4941 y(if)c(the)h(op)s(erating)g(system)f (supp)s(orts)f(them.)150 5121 y Ft(--enable-multibyte)630 5230 y Fu(This)g(enables)i(supp)s(ort)d(for)i(m)m(ultib)m(yte)h(c)m (haracters)g(if)f(the)g(op)s(erating)h(system)f(pro)m(vides)630 5340 y(the)h(necessary)f(supp)s(ort.)p eop end -%%Page: 165 171 -TeXDict begin 165 170 bop 150 -116 a Fu(Chapter)30 b(10:)41 -b(Installing)31 b(Bash)2356 b(165)150 299 y Ft +%%Page: 172 178 +TeXDict begin 172 177 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(172)150 299 y Ft (--enable-net-redirection)o(s)630 408 y Fu(This)23 b(enables)h(the)g (sp)s(ecial)h(handling)e(of)h(\014lenames)g(of)g(the)g(form)g Ft(/dev/tcp/)p Fj(host)p Ft(/)p Fj(port)630 518 y Fu(and)31 b Ft(/dev/udp/)p Fj(host)p Ft(/)p Fj(port)26 b Fu(when)31 b(used)g(in)g(redirections)h(\(see)g(Section)g(3.6)h([Redirec-)630 -628 y(tions],)e(page)g(38\).)150 787 y Ft(--enable-process-substit)o +628 y(tions],)e(page)g(39\).)150 787 y Ft(--enable-process-substit)o (utio)o(n)630 897 y Fu(This)49 b(enables)i(pro)s(cess)f(substitution)g (\(see)h(Section)g(3.5.6)h([Pro)s(cess)e(Substitution],)630 -1006 y(page)31 b(34\))h(if)e(the)h(op)s(erating)f(system)h(pro)m(vides) +1006 y(page)31 b(35\))h(if)e(the)h(op)s(erating)f(system)h(pro)m(vides) f(the)h(necessary)g(supp)s(ort.)150 1166 y Ft(--enable-progcomp)630 1275 y Fu(Enable)d(the)g(programmable)g(completion)i(facilities)g (\(see)f(Section)g(8.6)g([Programmable)630 1385 y(Completion],)i(page)h -(143\).)42 b(If)30 b(Readline)h(is)f(not)h(enabled,)f(this)h(option)g +(150\).)42 b(If)30 b(Readline)h(is)f(not)h(enabled,)f(this)h(option)g (has)f(no)g(e\013ect.)150 1544 y Ft(--enable-prompt-string-d)o(ecod)o (ing)630 1654 y Fu(T)-8 b(urn)30 b(on)i(the)f(in)m(terpretation)i(of)f (a)g(n)m(um)m(b)s(er)e(of)i(bac)m(kslash-escap)s(ed)g(c)m(haracters)i (in)d(the)630 1763 y Ft($PS0)p Fu(,)36 b Ft($PS1)p Fu(,)g Ft($PS2)p Fu(,)h(and)e Ft($PS4)f Fu(prompt)h(strings.)57 b(See)36 b(Section)h(6.9)g([Con)m(trolling)g(the)630 -1873 y(Prompt],)30 b(page)h(104,)h(for)f(a)f(complete)i(list)f(of)g +1873 y(Prompt],)30 b(page)h(107,)h(for)f(a)f(complete)i(list)f(of)g (prompt)e(string)i(escap)s(e)f(sequences.)150 2032 y Ft(--enable-readline)630 2142 y Fu(Include)e(supp)s(ort)f(for)h (command-line)h(editing)g(and)f(history)g(with)g(the)h(Bash)g(v)m (ersion)g(of)630 2252 y(the)i(Readline)g(library)f(\(see)h(Chapter)f(8) -g([Command)g(Line)g(Editing],)h(page)g(117\).)150 2411 +g([Command)g(Line)g(Editing],)h(page)g(122\).)150 2411 y Ft(--enable-restricted)630 2521 y Fu(Include)41 b(supp)s(ort)f(for)i (a)g Fr(restricted)g(shell)p Fu(.)75 b(If)42 b(this)f(is)h(enabled,)j (Bash,)g(when)c(called)630 2630 y(as)f Ft(rbash)p Fu(,)h(en)m(ters)f(a) g(restricted)h(mo)s(de.)68 b(See)40 b(Section)h(6.10)g([The)f -(Restricted)h(Shell],)630 2740 y(page)31 b(105,)h(for)e(a)h +(Restricted)h(Shell],)630 2740 y(page)31 b(109,)h(for)e(a)h (description)f(of)h(restricted)g(mo)s(de.)150 2899 y Ft(--enable-select)630 3009 y Fu(Include)25 b(the)h Ft(select)f Fu(comp)s(ound)f(command,)j(whic)m(h)e(allo)m(ws)j(the)e(generation)h @@ -20090,7 +20613,7 @@ g(v)m(ery)h(long)g(string)f(literals.)150 3766 y Ft (--enable-strict-posix-de)o(faul)o(t)630 3875 y Fu(Mak)m(e)c(Bash)f Fm(posix)p Fu(-conforman)m(t)g(b)m(y)f(default)h(\(see)g(Section)h (6.11)g([Bash)f(POSIX)e(Mo)s(de],)630 3985 y(page)31 -b(106\).)150 4144 y Ft(--enable-translatable-st)o(ring)o(s)630 +b(109\).)150 4144 y Ft(--enable-translatable-st)o(ring)o(s)630 4254 y Fu(Enable)h(supp)s(ort)e(for)i Ft($")p Fj(string)p Ft(")e Fu(translatable)j(strings)f(\(see)h(Section)g(3.1.2.5)h([Lo)s (cale)630 4364 y(T)-8 b(ranslation],)32 b(page)f(7\).)150 @@ -20105,12 +20628,12 @@ b(alue)24 b(of)g(the)g Ft(xpg_echo)e Fu(shell)h(option)630 Ft(echo)f Fu(b)s(eha)m(v)m(e)i(more)g(lik)m(e)h(the)e(v)m(ersion)h(sp)s (eci\014ed)f(in)g(the)630 5230 y(Single)35 b(Unix)f(Sp)s (eci\014cation,)i(v)m(ersion)e(3.)53 b(See)35 b(Section)g(4.2)g([Bash)g -(Builtins],)h(page)f(55,)630 5340 y(for)30 b(a)h(description)f(of)h +(Builtins],)h(page)f(57,)630 5340 y(for)30 b(a)h(description)f(of)h (the)f(escap)s(e)h(sequences)g(that)g Ft(echo)e Fu(recognizes.)p eop end -%%Page: 166 172 -TeXDict begin 166 171 bop 150 -116 a Fu(Chapter)30 b(10:)41 -b(Installing)31 b(Bash)2356 b(166)275 299 y(The)28 b(\014le)i +%%Page: 173 179 +TeXDict begin 173 178 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(173)275 299 y(The)28 b(\014le)i Ft(config-top.h)c Fu(con)m(tains)31 b(C)d(Prepro)s(cessor)h(`)p Ft(#define)p Fu(')f(statemen)m(ts)j(for)f(options)f(whic)m(h)150 408 y(are)35 b(not)g(settable)i(from)d Ft(configure)p @@ -20119,8 +20642,8 @@ m(hanged;)k(b)s(ew)m(are)d(of)150 518 y(the)h(consequences)g(if)f(y)m (ou)h(do.)55 b(Read)36 b(the)g(commen)m(ts)g(asso)s(ciated)h(with)e (eac)m(h)i(de\014nition)e(for)g(more)150 628 y(information)c(ab)s(out)f (its)h(e\013ect.)p eop end -%%Page: 167 173 -TeXDict begin 167 172 bop 3614 -116 a Fu(167)150 299 +%%Page: 174 180 +TeXDict begin 174 179 bop 3614 -116 a Fu(174)150 299 y Fp(App)t(endix)52 b(A)81 b(Rep)t(orting)53 b(Bugs)150 533 y Fu(Please)33 b(rep)s(ort)e(all)h(bugs)f(y)m(ou)h(\014nd)e(in)i (Bash.)44 b(But)32 b(\014rst,)g(y)m(ou)g(should)e(mak)m(e)j(sure)e @@ -20133,27 +20656,29 @@ b Fu(and)40 b(from)g Ft(http:)8 b(/)g(/)g(git)g(.)150 862 y(savannah.gnu.org/cgit/ba)o(sh.g)o(it/s)o(nap)o(shot)o(/bas)o(h-m) o(aste)o(r.ta)o(r.g)o(z)p Fu(.)275 996 y(Once)41 b(y)m(ou)g(ha)m(v)m(e) h(determined)f(that)h(a)f(bug)g(actually)h(exists,)j(use)c(the)g -Ft(bashbug)e Fu(command)i(to)150 1106 y(submit)25 b(a)h(bug)g(rep)s -(ort.)38 b(If)26 b(y)m(ou)g(ha)m(v)m(e)h(a)f(\014x,)h(y)m(ou)f(are)g -(encouraged)h(to)f(mail)h(that)f(as)g(w)m(ell!)40 b(Suggestions)150 -1215 y(and)j(`philosophical')i(bug)e(rep)s(orts)f(ma)m(y)j(b)s(e)e -(mailed)h(to)g Ft(bug-bash@gnu)11 b(.)g(org)39 b Fu(or)k(p)s(osted)g -(to)i(the)150 1325 y(Usenet)31 b(newsgroup)e Ft(gnu.bash.bug)p -Fu(.)275 1460 y(All)i(bug)e(rep)s(orts)h(should)f(include:)225 -1594 y Fq(\017)60 b Fu(The)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(of)h -(Bash.)225 1729 y Fq(\017)60 b Fu(The)30 b(hardw)m(are)g(and)g(op)s -(erating)g(system.)225 1863 y Fq(\017)60 b Fu(The)30 -b(compiler)h(used)e(to)i(compile)h(Bash.)225 1998 y Fq(\017)60 +Ft(bashbug)e Fu(command)i(to)150 1106 y(submit)21 b(a)g(bug)g(rep)s +(ort)g(or)g(use)g(the)h(form)e(at)j(the)e(Bash)h(pro)5 +b(ject)21 b(page)h(\()p Ft(https://savannah.gnu.org/)150 +1215 y(projects/bash/)p Fu(\).)35 b(If)24 b(y)m(ou)h(ha)m(v)m(e)h(a)f +(\014x,)g(y)m(ou)g(are)g(encouraged)g(to)g(submit)f(that)h(as)g(w)m +(ell!)39 b(Suggestions)150 1325 y(and)33 b(`philosophical')i(bug)e(rep) +s(orts)g(ma)m(y)h(b)s(e)f(mailed)h(to)g Ft(bug-bash@gnu)s(.)s(org)29 +b Fu(or)k Ft(help-bash@gnu)s(.)150 1435 y(org)p Fu(.)275 +1569 y(All)e(bug)e(rep)s(orts)h(should)f(include:)225 +1704 y Fq(\017)60 b Fu(The)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(of)h +(Bash.)225 1838 y Fq(\017)60 b Fu(The)30 b(hardw)m(are)g(and)g(op)s +(erating)g(system.)225 1973 y Fq(\017)60 b Fu(The)30 +b(compiler)h(used)e(to)i(compile)h(Bash.)225 2107 y Fq(\017)60 b Fu(A)30 b(description)h(of)f(the)h(bug)f(b)s(eha)m(viour.)225 -2132 y Fq(\017)60 b Fu(A)30 b(short)h(script)f(or)g(`recip)s(e')h(whic) +2242 y Fq(\017)60 b Fu(A)30 b(short)h(script)f(or)g(`recip)s(e')h(whic) m(h)f(exercises)i(the)e(bug)g(and)g(ma)m(y)h(b)s(e)f(used)f(to)i(repro) -s(duce)e(it.)150 2291 y Ft(bashbug)d Fu(inserts)i(the)h(\014rst)f +s(duce)e(it.)150 2401 y Ft(bashbug)d Fu(inserts)i(the)h(\014rst)f (three)g(items)h(automatically)i(in)m(to)f(the)e(template)i(it)f(pro)m -(vides)f(for)g(\014ling)h(a)150 2401 y(bug)h(rep)s(ort.)275 -2535 y(Please)h(send)f(all)h(rep)s(orts)f(concerning)g(this)h(man)m +(vides)f(for)g(\014ling)h(a)150 2511 y(bug)h(rep)s(ort.)275 +2645 y(Please)h(send)f(all)h(rep)s(orts)f(concerning)g(this)h(man)m (ual)f(to)h Ft(bug-bash@gnu.org)p Fu(.)p eop end -%%Page: 168 174 -TeXDict begin 168 173 bop 3614 -116 a Fu(168)150 141 +%%Page: 175 181 +TeXDict begin 175 180 bop 3614 -116 a Fu(175)150 141 y Fp(App)t(endix)58 b(B)81 b(Ma)9 b(jor)54 b(Di\013erences)d(F)-13 b(rom)54 b(The)g(Bourne)1088 299 y(Shell)150 530 y Fu(Bash)26 b(implemen)m(ts)h(essen)m(tially)g(the)g(same)f(grammar,)h(parameter)f @@ -20174,20 +20699,20 @@ Ft(sh)f Fu(included)g(in)h(SVR4.2)h(\(the)f(last)h(v)m(ersion)f(of)g Fm(posix)p Fu(-conforman)m(t,)g(ev)m(en)g(where)f(the)g Fm(posix)g Fu(sp)s(eci\014cation)h(di\013ers)f(from)g(traditional)330 1431 y Ft(sh)e Fu(b)s(eha)m(vior)g(\(see)i(Section)f(6.11)h([Bash)e -(POSIX)g(Mo)s(de],)h(page)g(106\).)225 1565 y Fq(\017)60 +(POSIX)g(Mo)s(de],)h(page)g(109\).)225 1565 y Fq(\017)60 b Fu(Bash)26 b(has)g(m)m(ulti-c)m(haracter)i(in)m(v)m(o)s(cation)g (options)f(\(see)f(Section)h(6.1)g([In)m(v)m(oking)g(Bash],)h(page)e -(91\).)225 1699 y Fq(\017)60 b Fu(Bash)40 b(has)f(command-line)h +(94\).)225 1699 y Fq(\017)60 b Fu(Bash)40 b(has)f(command-line)h (editing)g(\(see)h(Chapter)e(8)h([Command)f(Line)g(Editing],)k(page)d -(117\))330 1809 y(and)30 b(the)g Ft(bind)g Fu(builtin.)225 +(122\))330 1809 y(and)30 b(the)g Ft(bind)g Fu(builtin.)225 1943 y Fq(\017)60 b Fu(Bash)46 b(pro)m(vides)g(a)g(programmable)g(w)m (ord)f(completion)i(mec)m(hanism)f(\(see)h(Section)g(8.6)g([Pro-)330 -2052 y(grammable)39 b(Completion],)i(page)e(143\),)i(and)d(builtin)g +2052 y(grammable)39 b(Completion],)i(page)e(150\),)i(and)d(builtin)g (commands)f Ft(complete)p Fu(,)h Ft(compgen)p Fu(,)h(and)330 2162 y Ft(compopt)p Fu(,)29 b(to)i(manipulate)g(it.)225 2296 y Fq(\017)60 b Fu(Bash)26 b(has)f(command)h(history)f(\(see)i (Section)f(9.1)h([Bash)f(History)h(F)-8 b(acilities],)30 -b(page)c(152\))i(and)d(the)330 2405 y Ft(history)k Fu(and)h +b(page)c(159\))i(and)d(the)330 2405 y Ft(history)k Fu(and)h Ft(fc)g Fu(builtins)g(to)h(manipulate)g(it.)42 b(The)30 b(Bash)h(history)g(list)g(main)m(tains)g(timestamp)330 2515 y(information)g(and)e(uses)h(the)h(v)-5 b(alue)31 @@ -20195,9 +20720,9 @@ b(of)f(the)h Ft(HISTTIMEFORMAT)26 b Fu(v)-5 b(ariable)32 b(to)f(displa)m(y)f(it.)225 2649 y Fq(\017)60 b Fu(Bash)48 b(implemen)m(ts)h Ft(csh)p Fu(-lik)m(e)g(history)f(expansion)g(\(see)h (Section)g(9.3)h([History)f(In)m(teraction],)330 2759 -y(page)31 b(154\).)225 2892 y Fq(\017)60 b Fu(Bash)29 +y(page)31 b(161\).)225 2892 y Fq(\017)60 b Fu(Bash)29 b(has)h(one-dimensional)g(arra)m(y)f(v)-5 b(ariables)30 -b(\(see)h(Section)f(6.7)g([Arra)m(ys],)h(page)f(100\),)h(and)e(the)330 +b(\(see)h(Section)f(6.7)g([Arra)m(ys],)h(page)f(103\),)h(and)e(the)330 3002 y(appropriate)39 b(v)-5 b(ariable)40 b(expansions)f(and)g (assignmen)m(t)h(syn)m(tax)g(to)g(use)f(them.)67 b(Sev)m(eral)40 b(of)g(the)330 3112 y(Bash)32 b(builtins)f(tak)m(e)j(options)e(to)h @@ -20239,406 +20764,459 @@ b Fu(Bash)31 b(includes)f(the)g Ft(select)f Fu(comp)s(ound)g(command,)i (whic)m(h)f(allo)m(ws)i(the)f(generation)g(of)g(simple)330 5340 y(men)m(us)f(\(see)h(Section)g(3.2.5.2)i([Conditional)e (Constructs],)g(page)g(12\).)p eop end -%%Page: 169 175 -TeXDict begin 169 174 bop 150 -116 a Fu(App)s(endix)29 +%%Page: 176 182 +TeXDict begin 176 181 bop 150 -116 a Fu(App)s(endix)29 b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 -b(The)f(Bourne)g(Shell)1258 b(169)225 299 y Fq(\017)60 +b(The)f(Bourne)g(Shell)1258 b(176)225 299 y Fq(\017)60 b Fu(Bash)40 b(includes)g(the)g Ft([[)g Fu(comp)s(ound)e(command,)43 b(whic)m(h)c(mak)m(es)i(conditional)h(testing)f(part)f(of)330 408 y(the)f(shell)g(grammar)g(\(see)h(Section)f(3.2.5.2)j([Conditional) d(Constructs],)i(page)f(12\),)i(including)330 518 y(optional)32 -b(regular)e(expression)g(matc)m(hing.)225 653 y Fq(\017)60 +b(regular)e(expression)g(matc)m(hing.)225 660 y Fq(\017)60 b Fu(Bash)31 b(pro)m(vides)f(optional)h(case-insensitiv)m(e)i(matc)m (hing)f(for)e(the)g Ft(case)g Fu(and)f Ft([[)h Fu(constructs.)225 -789 y Fq(\017)60 b Fu(Bash)27 b(includes)g(brace)h(expansion)f(\(see)h +802 y Fq(\017)60 b Fu(Bash)27 b(includes)g(brace)h(expansion)f(\(see)h (Section)g(3.5.1)i([Brace)e(Expansion],)g(page)g(24\))h(and)d(tilde)330 -898 y(expansion)k(\(see)i(Section)f(3.5.2)h([Tilde)f(Expansion],)f -(page)h(25\).)225 1034 y Fq(\017)60 b Fu(Bash)24 b(implemen)m(ts)h +911 y(expansion)k(\(see)i(Section)f(3.5.2)h([Tilde)f(Expansion],)f +(page)h(25\).)225 1053 y Fq(\017)60 b Fu(Bash)24 b(implemen)m(ts)h (command)e(aliases)j(and)d(the)i Ft(alias)d Fu(and)i Ft(unalias)e Fu(builtins)h(\(see)i(Section)g(6.6)330 -1143 y([Aliases],)32 b(page)f(100\).)225 1279 y Fq(\017)60 +1163 y([Aliases],)32 b(page)f(103\).)225 1305 y Fq(\017)60 b Fu(Bash)32 b(pro)m(vides)g(shell)g(arithmetic,)i(the)e Ft(\(\()g Fu(comp)s(ound)e(command)i(\(see)h(Section)f(3.2.5.2)j([Con-) -330 1388 y(ditional)d(Constructs],)e(page)i(12\),)g(and)e(arithmetic)i +330 1414 y(ditional)d(Constructs],)e(page)i(12\),)g(and)e(arithmetic)i (expansion)e(\(see)i(Section)f(6.5)h([Shell)f(Arith-)330 -1498 y(metic],)h(page)f(98\).)225 1633 y Fq(\017)60 b -Fu(V)-8 b(ariables)31 b(presen)m(t)e(in)g(the)g(shell's)h(initial)g(en) -m(vironmen)m(t)g(are)g(automatically)i(exp)s(orted)d(to)h(c)m(hild)330 -1743 y(pro)s(cesses.)38 b(The)23 b(Bourne)g(shell)g(do)s(es)g(not)g +1524 y(metic],)h(page)f(101\).)225 1666 y Fq(\017)60 +b Fu(V)-8 b(ariables)31 b(presen)m(t)e(in)g(the)g(shell's)h(initial)g +(en)m(vironmen)m(t)g(are)g(automatically)i(exp)s(orted)d(to)h(c)m(hild) +330 1775 y(pro)s(cesses.)38 b(The)23 b(Bourne)g(shell)g(do)s(es)g(not)g (normally)g(do)g(this)g(unless)g(the)g(v)-5 b(ariables)24 -b(are)f(explicitly)330 1852 y(mark)m(ed)30 b(using)g(the)h -Ft(export)e Fu(command.)225 1988 y Fq(\017)60 b Fu(Bash)26 +b(are)f(explicitly)330 1885 y(mark)m(ed)30 b(using)g(the)h +Ft(export)e Fu(command.)225 2027 y Fq(\017)60 b Fu(Bash)26 b(supp)s(orts)d(the)j(`)p Ft(+=)p Fu(')f(assignmen)m(t)i(op)s(erator,)g (whic)m(h)e(app)s(ends)f(to)i(the)g(v)-5 b(alue)26 b(of)f(the)h(v)-5 -b(ariable)330 2097 y(named)30 b(on)g(the)h(left)g(hand)e(side.)225 -2233 y Fq(\017)60 b Fu(Bash)36 b(includes)g(the)g Fm(posix)f +b(ariable)330 2136 y(named)30 b(on)g(the)h(left)g(hand)e(side.)225 +2278 y Fq(\017)60 b Fu(Bash)36 b(includes)g(the)g Fm(posix)f Fu(pattern)h(remo)m(v)-5 b(al)37 b(`)p Ft(\045)p Fu(',)h(`)p Ft(#)p Fu(',)g(`)p Ft(\045\045)p Fu(')e(and)f(`)p Ft(##)p -Fu(')h(expansions)g(to)g(remo)m(v)m(e)330 2342 y(leading)f(or)f +Fu(')h(expansions)g(to)g(remo)m(v)m(e)330 2388 y(leading)f(or)f (trailing)h(substrings)e(from)g(v)-5 b(ariable)35 b(v)-5 b(alues)35 b(\(see)g(Section)g(3.5.3)g([Shell)g(P)m(arameter)330 -2452 y(Expansion],)30 b(page)h(26\).)225 2587 y Fq(\017)60 +2497 y(Expansion],)30 b(page)h(26\).)225 2639 y Fq(\017)60 b Fu(The)46 b(expansion)g Ft(${#xx})p Fu(,)j(whic)m(h)d(returns)f(the)i (length)f(of)h Ft(${xx})p Fu(,)i(is)e(supp)s(orted)d(\(see)j(Sec-)330 -2697 y(tion)31 b(3.5.3)h([Shell)f(P)m(arameter)g(Expansion],)f(page)i -(26\).)225 2832 y Fq(\017)60 b Fu(The)30 b(expansion)g +2749 y(tion)31 b(3.5.3)h([Shell)f(P)m(arameter)g(Expansion],)f(page)i +(26\).)225 2890 y Fq(\017)60 b Fu(The)30 b(expansion)g Ft(${var:)p Fr(o\013set)r Ft([:)p Fr(length)p Ft(]})p Fu(,)g(whic)m(h)g(expands)g(to)h(the)g(substring)e(of)i -Ft(var)p Fu('s)e(v)-5 b(alue)330 2942 y(of)43 b(length)g +Ft(var)p Fu('s)e(v)-5 b(alue)330 3000 y(of)43 b(length)g Fr(length)p Fu(,)k(b)s(eginning)42 b(at)i Fr(o\013set)p Fu(,)j(is)c(presen)m(t)g(\(see)g(Section)h(3.5.3)h([Shell)e(P)m -(arameter)330 3051 y(Expansion],)30 b(page)h(26\).)225 -3187 y Fq(\017)60 b Fu(The)21 b(expansion)f Ft(${)p Fj(var)p +(arameter)330 3110 y(Expansion],)30 b(page)h(26\).)225 +3251 y Fq(\017)60 b Fu(The)21 b(expansion)f Ft(${)p Fj(var)p Ft(/[/])p Fr(pattern)p Ft([/)p Fr(replacemen)m(t)r Ft(]})p Fu(,)i(whic)m(h)e(matc)m(hes)j Fr(pattern)e Fu(and)f(replaces)330 -3296 y(it)30 b(with)f Fr(replacemen)m(t)k Fu(in)c(the)h(v)-5 +3361 y(it)30 b(with)f Fr(replacemen)m(t)k Fu(in)c(the)h(v)-5 b(alue)30 b(of)g Fr(v)-5 b(ar)p Fu(,)30 b(is)f(a)m(v)-5 b(ailable)32 b(\(see)e(Section)h(3.5.3)g([Shell)f(P)m(arameter)330 -3406 y(Expansion],)g(page)h(26\).)225 3541 y Fq(\017)60 -b Fu(The)33 b(expansion)g Ft(${!)p Fj(prefix)p Ft(*})d -Fu(expansion,)k(whic)m(h)e(expands)h(to)h(the)f(names)g(of)g(all)h -(shell)f(v)-5 b(ari-)330 3651 y(ables)36 b(whose)g(names)g(b)s(egin)g -(with)g Fr(pre\014x)p Fu(,)g(is)g(a)m(v)-5 b(ailable)39 -b(\(see)e(Section)g(3.5.3)g([Shell)g(P)m(arameter)330 -3761 y(Expansion],)30 b(page)h(26\).)225 3896 y Fq(\017)60 -b Fu(Bash)22 b(has)g(indirect)g(v)-5 b(ariable)22 b(expansion)g(using)f -Ft(${!word})f Fu(\(see)i(Section)h(3.5.3)h([Shell)e(P)m(arameter)330 -4006 y(Expansion],)30 b(page)h(26\).)225 4141 y Fq(\017)60 -b Fu(Bash)31 b(can)f(expand)g(p)s(ositional)h(parameters)g(b)s(ey)m -(ond)e Ft($9)h Fu(using)g Ft(${)p Fj(num)p Ft(})p Fu(.)225 -4276 y Fq(\017)60 b Fu(The)27 b Fm(posix)g Ft($\(\))g -Fu(form)g(of)h(command)g(substitution)f(is)h(implemen)m(ted)g(\(see)h -(Section)f(3.5.4)i([Com-)330 4386 y(mand)38 b(Substitution],)k(page)e -(34\),)j(and)38 b(preferred)g(to)i(the)g(Bourne)f(shell's)h -Ft(``)e Fu(\(whic)m(h)i(is)f(also)330 4495 y(implemen)m(ted)31 -b(for)f(bac)m(kw)m(ards)h(compatibilit)m(y\).)225 4631 -y Fq(\017)60 b Fu(Bash)31 b(has)f(pro)s(cess)g(substitution)g(\(see)h -(Section)g(3.5.6)h([Pro)s(cess)f(Substitution],)f(page)h(34\).)225 -4766 y Fq(\017)60 b Fu(Bash)55 b(automatically)j(assigns)e(v)-5 -b(ariables)55 b(that)h(pro)m(vide)f(information)h(ab)s(out)f(the)g -(curren)m(t)330 4876 y(user)40 b(\()p Ft(UID)p Fu(,)i -Ft(EUID)p Fu(,)g(and)e Ft(GROUPS)p Fu(\),)h(the)g(curren)m(t)f(host)g -(\()p Ft(HOSTTYPE)p Fu(,)h Ft(OSTYPE)p Fu(,)h Ft(MACHTYPE)p -Fu(,)f(and)330 4985 y Ft(HOSTNAME)p Fu(\),)55 b(and)c(the)g(instance)h -(of)g(Bash)f(that)h(is)f(running)f(\()p Ft(BASH)p Fu(,)56 -b Ft(BASH_VERSION)p Fu(,)e(and)330 5095 y Ft(BASH_VERSINFO)p -Fu(\).)37 b(See)31 b(Section)g(5.2)h([Bash)e(V)-8 b(ariables],)33 -b(page)e(78,)g(for)f(details.)225 5230 y Fq(\017)60 b -Fu(The)44 b Ft(IFS)f Fu(v)-5 b(ariable)45 b(is)f(used)f(to)i(split)f -(only)g(the)g(results)g(of)h(expansion,)i(not)d(all)h(w)m(ords)f(\(see) -330 5340 y(Section)29 b(3.5.7)h([W)-8 b(ord)29 b(Splitting],)h(page)f -(35\).)41 b(This)28 b(closes)h(a)g(longstanding)g(shell)f(securit)m(y)h -(hole.)p eop end -%%Page: 170 176 -TeXDict begin 170 175 bop 150 -116 a Fu(App)s(endix)29 +3471 y(Expansion],)g(page)h(26\),)h(with)e(a)h(mec)m(hanism)g(to)g(use) +f(the)g(matc)m(hed)i(text)f(in)f Fr(replacemen)m(t)p +Fu(.)225 3612 y Fq(\017)60 b Fu(The)33 b(expansion)g +Ft(${!)p Fj(prefix)p Ft(*})d Fu(expansion,)k(whic)m(h)e(expands)h(to)h +(the)f(names)g(of)g(all)h(shell)f(v)-5 b(ari-)330 3722 +y(ables)36 b(whose)g(names)g(b)s(egin)g(with)g Fr(pre\014x)p +Fu(,)g(is)g(a)m(v)-5 b(ailable)39 b(\(see)e(Section)g(3.5.3)g([Shell)g +(P)m(arameter)330 3832 y(Expansion],)30 b(page)h(26\).)225 +3973 y Fq(\017)60 b Fu(Bash)22 b(has)g(indirect)g(v)-5 +b(ariable)22 b(expansion)g(using)f Ft(${!word})f Fu(\(see)i(Section)h +(3.5.3)h([Shell)e(P)m(arameter)330 4083 y(Expansion],)44 +b(page)e(26\))h(and)e(implemen)m(ts)g(the)h Ft(nameref)d +Fu(v)-5 b(ariable)43 b(attribute)f(for)f(automatic)330 +4193 y(indirect)31 b(v)-5 b(ariable)31 b(expansion.)225 +4334 y Fq(\017)60 b Fu(Bash)31 b(can)f(expand)g(p)s(ositional)h +(parameters)g(b)s(ey)m(ond)e Ft($9)h Fu(using)g Ft(${)p +Fj(num)p Ft(})p Fu(.)225 4476 y Fq(\017)60 b Fu(Bash)22 +b(includes)g(a)h(set)g(of)g(parameter)f(transformation)h(w)m(ord)f +(expansions)g(of)h(the)f(form)g Ft(${var@X})p Fu(,)330 +4586 y(where)30 b(`)p Ft(X)p Fu(')g(sp)s(eci\014es)g(the)h +(transformation.)225 4728 y Fq(\017)60 b Fu(The)27 b +Fm(posix)g Ft($\(\))g Fu(form)g(of)h(command)g(substitution)f(is)h +(implemen)m(ted)g(\(see)h(Section)f(3.5.4)i([Com-)330 +4837 y(mand)38 b(Substitution],)k(page)e(34\),)j(and)38 +b(preferred)g(to)i(the)g(Bourne)f(shell's)h Ft(``)e Fu(\(whic)m(h)i(is) +f(also)330 4947 y(implemen)m(ted)31 b(for)f(bac)m(kw)m(ards)h +(compatibilit)m(y\).)225 5089 y Fq(\017)60 b Fu(Bash)31 +b(implemen)m(ts)g(a)g(v)-5 b(arian)m(t)32 b(of)f(command)f +(substitution)g(that)i(runs)d(the)i(enclosed)g(command)330 +5198 y(in)f(the)h(curren)m(t)f(shell)g(execution)i(en)m(vironmen)m(t)f +(\()p Ft(${)f Fj(command)p Ft(;})p Fu(\).)225 5340 y +Fq(\017)60 b Fu(Bash)31 b(has)f(pro)s(cess)g(substitution)g(\(see)h +(Section)g(3.5.6)h([Pro)s(cess)f(Substitution],)f(page)h(35\).)p +eop end +%%Page: 177 183 +TeXDict begin 177 182 bop 150 -116 a Fu(App)s(endix)29 b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 -b(The)f(Bourne)g(Shell)1258 b(170)225 299 y Fq(\017)60 -b Fu(The)36 b(\014lename)h(expansion)f(brac)m(k)m(et)i(expression)f(co) -s(de)f(uses)g(`)p Ft(!)p Fu(')h(and)f(`)p Ft(^)p Fu(')h(to)g(negate)h -(the)f(set)g(of)330 408 y(c)m(haracters)32 b(b)s(et)m(w)m(een)f(the)f -(brac)m(k)m(ets.)43 b(The)29 b(Bourne)i(shell)f(uses)g(only)h(`)p -Ft(!)p Fu('.)225 536 y Fq(\017)60 b Fu(Bash)38 b(implemen)m(ts)g(the)g -(full)g(set)g(of)g Fm(posix)f Fu(\014lename)h(expansion)g(op)s -(erators,)i(including)d(c)m(har-)330 646 y(acter)j(classes,)i(equiv)-5 -b(alence)39 b(classes,)j(and)c(collating)j(sym)m(b)s(ols)d(\(see)i -(Section)f(3.5.8)h([Filename)330 756 y(Expansion],)30 -b(page)h(35\).)225 883 y Fq(\017)60 b Fu(Bash)35 b(implemen)m(ts)g -(extended)g(pattern)g(matc)m(hing)h(features)f(when)f(the)h -Ft(extglob)d Fu(shell)j(option)330 993 y(is)30 b(enabled)h(\(see)g -(Section)g(3.5.8.1)i([P)m(attern)f(Matc)m(hing],)g(page)f(36\).)225 -1121 y Fq(\017)60 b Fu(It)22 b(is)g(p)s(ossible)g(to)h(ha)m(v)m(e)g(a)f -(v)-5 b(ariable)23 b(and)f(a)g(function)g(with)g(the)g(same)g(name;)j -Ft(sh)d Fu(do)s(es)g(not)g(separate)330 1230 y(the)31 -b(t)m(w)m(o)g(name)g(spaces.)225 1358 y Fq(\017)60 b +b(The)f(Bourne)g(Shell)1258 b(177)225 299 y Fq(\017)60 +b Fu(Bash)55 b(automatically)j(assigns)e(v)-5 b(ariables)55 +b(that)h(pro)m(vide)f(information)h(ab)s(out)f(the)g(curren)m(t)330 +408 y(user)40 b(\()p Ft(UID)p Fu(,)i Ft(EUID)p Fu(,)g(and)e +Ft(GROUPS)p Fu(\),)h(the)g(curren)m(t)f(host)g(\()p Ft(HOSTTYPE)p +Fu(,)h Ft(OSTYPE)p Fu(,)h Ft(MACHTYPE)p Fu(,)f(and)330 +518 y Ft(HOSTNAME)p Fu(\),)55 b(and)c(the)g(instance)h(of)g(Bash)f +(that)h(is)f(running)f(\()p Ft(BASH)p Fu(,)56 b Ft(BASH_VERSION)p +Fu(,)e(and)330 628 y Ft(BASH_VERSINFO)p Fu(\).)37 b(See)31 +b(Section)g(5.2)h([Bash)e(V)-8 b(ariables],)33 b(page)e(81,)g(for)f +(details.)225 771 y Fq(\017)60 b Fu(Bash)23 b(uses)f(man)m(y)h(v)-5 +b(ariables)24 b(to)g(pro)m(vide)e(functionalit)m(y)j(and)d(customize)i +(shell)f(b)s(eha)m(vior)g(that)h(the)330 881 y(Bourne)30 +b(shell)h(do)s(es)f(not.)41 b(Examples)30 b(include)g +Ft(RANDOM)p Fu(,)f Ft(SRANDOM)p Fu(,)g Ft(EPOCHSECONDS)p +Fu(,)e Ft(GLOBSORT)p Fu(,)330 991 y Ft(TIMEFORMAT)p Fu(,)e +Ft(BASHPID)p Fu(,)g Ft(BASH_XTRACEFD)p Fu(,)f Ft(GLOBIGNORE)p +Fu(,)h Ft(HISTIGNORE)p Fu(,)g(and)h Ft(BASH_VERSION)p +Fu(.)330 1100 y(See)31 b(Section)g(5.2)g([Bash)g(V)-8 +b(ariables],)32 b(page)f(81,)h(for)e(a)h(complete)h(list.)225 +1244 y Fq(\017)60 b Fu(The)44 b Ft(IFS)f Fu(v)-5 b(ariable)45 +b(is)f(used)f(to)i(split)f(only)g(the)g(results)g(of)h(expansion,)i +(not)d(all)h(w)m(ords)f(\(see)330 1354 y(Section)29 b(3.5.7)h([W)-8 +b(ord)29 b(Splitting],)h(page)f(36\).)41 b(This)28 b(closes)h(a)g +(longstanding)g(shell)f(securit)m(y)h(hole.)225 1498 +y Fq(\017)60 b Fu(The)36 b(\014lename)h(expansion)f(brac)m(k)m(et)i +(expression)f(co)s(de)f(uses)g(`)p Ft(!)p Fu(')h(and)f(`)p +Ft(^)p Fu(')h(to)g(negate)h(the)f(set)g(of)330 1607 y(c)m(haracters)32 +b(b)s(et)m(w)m(een)f(the)f(brac)m(k)m(ets.)43 b(The)29 +b(Bourne)i(shell)f(uses)g(only)h(`)p Ft(!)p Fu('.)225 +1751 y Fq(\017)60 b Fu(Bash)38 b(implemen)m(ts)g(the)g(full)g(set)g(of) +g Fm(posix)f Fu(\014lename)h(expansion)g(op)s(erators,)i(including)d(c) +m(har-)330 1861 y(acter)j(classes,)i(equiv)-5 b(alence)39 +b(classes,)j(and)c(collating)j(sym)m(b)s(ols)d(\(see)i(Section)f(3.5.8) +h([Filename)330 1970 y(Expansion],)30 b(page)h(36\).)225 +2114 y Fq(\017)60 b Fu(Bash)35 b(implemen)m(ts)g(extended)g(pattern)g +(matc)m(hing)h(features)f(when)f(the)h Ft(extglob)d Fu(shell)j(option) +330 2224 y(is)30 b(enabled)h(\(see)g(Section)g(3.5.8.1)i([P)m(attern)f +(Matc)m(hing],)g(page)f(37\).)225 2367 y Fq(\017)60 b +Fu(It)22 b(is)g(p)s(ossible)g(to)h(ha)m(v)m(e)g(a)f(v)-5 +b(ariable)23 b(and)f(a)g(function)g(with)g(the)g(same)g(name;)j +Ft(sh)d Fu(do)s(es)g(not)g(separate)330 2477 y(the)31 +b(t)m(w)m(o)g(name)g(spaces.)225 2621 y Fq(\017)60 b Fu(Bash)30 b(functions)e(are)i(p)s(ermitted)f(to)h(ha)m(v)m(e)h(lo)s (cal)g(v)-5 b(ariables)30 b(using)f(the)g Ft(local)f -Fu(builtin,)i(and)e(th)m(us)330 1468 y(useful)i(recursiv)m(e)g +Fu(builtin,)i(and)e(th)m(us)330 2730 y(useful)i(recursiv)m(e)g (functions)g(ma)m(y)h(b)s(e)f(written)g(\(see)i(Section)f(4.2)g([Bash)g -(Builtins],)g(page)h(55\).)225 1596 y Fq(\017)60 b Fu(V)-8 +(Builtins],)g(page)h(57\).)225 2874 y Fq(\017)60 b Fu(V)-8 b(ariable)25 b(assignmen)m(ts)g(preceding)e(commands)h(a\013ect)h(only) -f(that)g(command,)h(ev)m(en)f(builtins)g(and)330 1705 +f(that)g(command,)h(ev)m(en)f(builtins)g(and)330 2984 y(functions)36 b(\(see)h(Section)g(3.7.4)h([En)m(vironmen)m(t],)h(page) -e(44\).)60 b(In)35 b Ft(sh)p Fu(,)j(all)f(v)-5 b(ariable)37 -b(assignmen)m(ts)330 1815 y(preceding)30 b(commands)g(are)h(global)h +e(45\).)60 b(In)35 b Ft(sh)p Fu(,)j(all)f(v)-5 b(ariable)37 +b(assignmen)m(ts)330 3093 y(preceding)30 b(commands)g(are)h(global)h (unless)d(the)i(command)f(is)h(executed)g(from)f(the)g(\014le)h -(system.)225 1943 y Fq(\017)60 b Fu(Bash)44 b(p)s(erforms)e(\014lename) +(system.)225 3237 y Fq(\017)60 b Fu(Bash)44 b(p)s(erforms)e(\014lename) i(expansion)f(on)h(\014lenames)g(sp)s(eci\014ed)f(as)h(op)s(erands)e -(to)j(input)e(and)330 2052 y(output)30 b(redirection)h(op)s(erators)g -(\(see)g(Section)g(3.6)h([Redirections],)g(page)f(38\).)225 -2180 y Fq(\017)60 b Fu(Bash)29 b(con)m(tains)h(the)f(`)p +(to)j(input)e(and)330 3347 y(output)30 b(redirection)h(op)s(erators)g +(\(see)g(Section)g(3.6)h([Redirections],)g(page)f(39\).)225 +3491 y Fq(\017)60 b Fu(Bash)29 b(con)m(tains)h(the)f(`)p Ft(<>)p Fu(')f(redirection)i(op)s(erator,)f(allo)m(wing)i(a)e(\014le)g -(to)g(b)s(e)f(op)s(ened)g(for)h(b)s(oth)f(read-)330 2290 +(to)g(b)s(e)f(op)s(ened)g(for)h(b)s(oth)f(read-)330 3600 y(ing)35 b(and)f(writing,)i(and)e(the)h(`)p Ft(&>)p Fu(')g(redirection) g(op)s(erator,)h(for)f(directing)g(standard)f(output)h(and)330 -2399 y(standard)30 b(error)g(to)h(the)f(same)h(\014le)f(\(see)i -(Section)f(3.6)g([Redirections],)h(page)g(38\).)225 2527 +3710 y(standard)30 b(error)g(to)h(the)f(same)h(\014le)f(\(see)i +(Section)f(3.6)g([Redirections],)h(page)g(39\).)225 3854 y Fq(\017)60 b Fu(Bash)21 b(includes)f(the)h(`)p Ft(<<<)p Fu(')g(redirection)g(op)s(erator,)i(allo)m(wing)g(a)e(string)f(to)i(b)s -(e)e(used)g(as)h(the)g(standard)330 2637 y(input)29 b(to)j(a)e -(command.)225 2765 y Fq(\017)60 b Fu(Bash)32 b(implemen)m(ts)f(the)h(`) -p Ft([n]<&)p Fj(word)p Fu(')d(and)i(`)p Ft([n]>&)p Fj(word)p +(e)e(used)g(as)h(the)g(standard)330 3963 y(input)29 b(to)j(a)e(command) +g(\(see)i(Section)f(3.6)g([Redirections],)h(page)g(39\).)225 +4107 y Fq(\017)60 b Fu(Bash)32 b(implemen)m(ts)f(the)h(`)p +Ft([n]<&)p Fj(word)p Fu(')d(and)i(`)p Ft([n]>&)p Fj(word)p Fu(')e(redirection)j(op)s(erators,)g(whic)m(h)f(mo)m(v)m(e)330 -2874 y(one)g(\014le)f(descriptor)g(to)h(another.)225 -3002 y Fq(\017)60 b Fu(Bash)25 b(treats)h(a)f(n)m(um)m(b)s(er)e(of)i +4217 y(one)g(\014le)f(descriptor)g(to)h(another.)225 +4361 y Fq(\017)60 b Fu(Bash)25 b(treats)h(a)f(n)m(um)m(b)s(er)e(of)i (\014lenames)g(sp)s(ecially)g(when)f(they)h(are)g(used)f(in)g -(redirection)i(op)s(erators)330 3112 y(\(see)31 b(Section)h(3.6)f -([Redirections],)h(page)f(38\).)225 3240 y Fq(\017)60 +(redirection)i(op)s(erators)330 4470 y(\(see)31 b(Section)h(3.6)f +([Redirections],)h(page)f(39\).)225 4614 y Fq(\017)60 b Fu(Bash)33 b(can)f(op)s(en)g(net)m(w)m(ork)i(connections)f(to)h (arbitrary)e(mac)m(hines)h(and)f(services)h(with)f(the)h(redi-)330 -3349 y(rection)e(op)s(erators)g(\(see)g(Section)g(3.6)h -([Redirections],)g(page)f(38\).)225 3477 y Fq(\017)60 +4724 y(rection)e(op)s(erators)g(\(see)g(Section)g(3.6)h +([Redirections],)g(page)f(39\).)225 4867 y Fq(\017)60 b Fu(The)29 b Ft(noclobber)e Fu(option)j(is)g(a)m(v)-5 b(ailable)32 b(to)e(a)m(v)m(oid)h(o)m(v)m(erwriting)g(existing)g -(\014les)e(with)h(output)f(redi-)330 3587 y(rection)39 -b(\(see)h(Section)f(4.3.1)h([The)e(Set)h(Builtin],)i(page)e(67\).)66 +(\014les)e(with)h(output)f(redi-)330 4977 y(rection)39 +b(\(see)h(Section)f(4.3.1)h([The)e(Set)h(Builtin],)i(page)e(69\).)66 b(The)38 b(`)p Ft(>|)p Fu(')h(redirection)g(op)s(erator)330 -3696 y(ma)m(y)31 b(b)s(e)f(used)f(to)i(o)m(v)m(erride)h -Ft(noclobber)p Fu(.)225 3824 y Fq(\017)60 b Fu(The)34 +5087 y(ma)m(y)31 b(b)s(e)f(used)f(to)i(o)m(v)m(erride)h +Ft(noclobber)p Fu(.)225 5230 y Fq(\017)60 b Fu(The)34 b(Bash)g Ft(cd)g Fu(and)f Ft(pwd)g Fu(builtins)h(\(see)h(Section)g(4.1) -g([Bourne)g(Shell)f(Builtins],)h(page)g(48\))h(eac)m(h)330 -3934 y(tak)m(e)c Ft(-L)e Fu(and)f Ft(-P)h Fu(options)h(to)g(switc)m(h)g -(b)s(et)m(w)m(een)g(logical)i(and)c(ph)m(ysical)i(mo)s(des.)225 -4061 y Fq(\017)60 b Fu(Bash)25 b(allo)m(ws)h(a)g(function)e(to)i(o)m(v) -m(erride)g(a)g(builtin)e(with)h(the)g(same)g(name,)i(and)d(pro)m(vides) -h(access)h(to)330 4171 y(that)34 b(builtin's)f(functionalit)m(y)h -(within)f(the)g(function)g(via)h(the)f Ft(builtin)f Fu(and)g -Ft(command)g Fu(builtins)330 4281 y(\(see)f(Section)h(4.2)f([Bash)g -(Builtins],)g(page)g(55\).)225 4408 y Fq(\017)60 b Fu(The)35 -b Ft(command)e Fu(builtin)i(allo)m(ws)i(selectiv)m(e)h(disabling)e(of)f -(functions)g(when)g(command)g(lo)s(okup)g(is)330 4518 -y(p)s(erformed)29 b(\(see)i(Section)g(4.2)h([Bash)f(Builtins],)g(page)g -(55\).)225 4646 y Fq(\017)60 b Fu(Individual)23 b(builtins)g(ma)m(y)i -(b)s(e)e(enabled)h(or)g(disabled)g(using)f(the)h Ft(enable)f -Fu(builtin)g(\(see)i(Section)g(4.2)330 4756 y([Bash)31 -b(Builtins],)g(page)g(55\).)225 4883 y Fq(\017)60 b Fu(The)26 -b(Bash)h Ft(exec)e Fu(builtin)h(tak)m(es)i(additional)f(options)g(that) -g(allo)m(w)h(users)d(to)j(con)m(trol)g(the)e(con)m(ten)m(ts)330 -4993 y(of)35 b(the)f(en)m(vironmen)m(t)h(passed)f(to)h(the)g(executed)g -(command,)h(and)d(what)i(the)f(zeroth)h(argumen)m(t)330 -5103 y(to)c(the)g(command)f(is)g(to)h(b)s(e)f(\(see)h(Section)h(4.1)f -([Bourne)f(Shell)h(Builtins],)g(page)g(48\).)225 5230 +g([Bourne)g(Shell)f(Builtins],)h(page)g(49\))h(eac)m(h)330 +5340 y(tak)m(e)c Ft(-L)e Fu(and)f Ft(-P)h Fu(options)h(to)g(switc)m(h)g +(b)s(et)m(w)m(een)g(logical)i(and)c(ph)m(ysical)i(mo)s(des.)p +eop end +%%Page: 178 184 +TeXDict begin 178 183 bop 150 -116 a Fu(App)s(endix)29 +b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 +b(The)f(Bourne)g(Shell)1258 b(178)225 299 y Fq(\017)60 +b Fu(Bash)25 b(allo)m(ws)h(a)g(function)e(to)i(o)m(v)m(erride)g(a)g +(builtin)e(with)h(the)g(same)g(name,)i(and)d(pro)m(vides)h(access)h(to) +330 408 y(that)34 b(builtin's)f(functionalit)m(y)h(within)f(the)g +(function)g(via)h(the)f Ft(builtin)f Fu(and)g Ft(command)g +Fu(builtins)330 518 y(\(see)f(Section)h(4.2)f([Bash)g(Builtins],)g +(page)g(57\).)225 648 y Fq(\017)60 b Fu(Bash)34 b(implemen)m(ts)g(supp) +s(ort)e(for)i(dynamically)g(loading)h(builtin)e(commands)g(from)h +(shared)f(ob-)330 758 y(jects.)225 888 y Fq(\017)60 b +Fu(The)35 b Ft(command)e Fu(builtin)i(allo)m(ws)i(selectiv)m(e)h +(disabling)e(of)f(functions)g(when)g(command)g(lo)s(okup)g(is)330 +998 y(p)s(erformed)29 b(\(see)i(Section)g(4.2)h([Bash)f(Builtins],)g +(page)g(57\).)225 1128 y Fq(\017)60 b Fu(Individual)23 +b(builtins)g(ma)m(y)i(b)s(e)e(enabled)h(or)g(disabled)g(using)f(the)h +Ft(enable)f Fu(builtin)g(\(see)i(Section)g(4.2)330 1237 +y([Bash)31 b(Builtins],)g(page)g(57\).)225 1367 y Fq(\017)60 +b Fu(The)26 b(Bash)h Ft(exec)e Fu(builtin)h(tak)m(es)i(additional)f +(options)g(that)g(allo)m(w)h(users)d(to)j(con)m(trol)g(the)e(con)m(ten) +m(ts)330 1477 y(of)35 b(the)f(en)m(vironmen)m(t)h(passed)f(to)h(the)g +(executed)g(command,)h(and)d(what)i(the)f(zeroth)h(argumen)m(t)330 +1587 y(to)c(the)g(command)f(is)g(to)h(b)s(e)f(\(see)h(Section)h(4.1)f +([Bourne)f(Shell)h(Builtins],)g(page)g(49\).)225 1717 y Fq(\017)60 b Fu(Shell)29 b(functions)g(ma)m(y)h(b)s(e)f(exp)s(orted)g (to)h(c)m(hildren)f(via)h(the)g(en)m(vironmen)m(t)g(using)f -Ft(export)f(-f)h Fu(\(see)330 5340 y(Section)i(3.3)h([Shell)e(F)-8 -b(unctions],)32 b(page)f(19\).)p eop end -%%Page: 171 177 -TeXDict begin 171 176 bop 150 -116 a Fu(App)s(endix)29 -b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 -b(The)f(Bourne)g(Shell)1258 b(171)225 299 y Fq(\017)60 -b Fu(The)40 b(Bash)h Ft(export)p Fu(,)h Ft(readonly)p -Fu(,)f(and)g Ft(declare)d Fu(builtins)j(can)g(tak)m(e)h(a)f -Ft(-f)f Fu(option)i(to)f(act)h(on)330 408 y(shell)30 +Ft(export)f(-f)h Fu(\(see)330 1826 y(Section)i(3.3)h([Shell)e(F)-8 +b(unctions],)32 b(page)f(19\).)225 1956 y Fq(\017)60 +b Fu(Bash)35 b(deco)s(des)g(a)h(n)m(um)m(b)s(er)e(of)h(bac)m +(kslash-escap)s(e)i(sequences)e(in)g(the)g(prompt)f(string)h(v)-5 +b(ariables)330 2066 y(\()p Ft(PS0)p Fu(,)30 b Ft(PS1)p +Fu(,)g Ft(PS2)p Fu(,)g(and)f Ft(PS4)p Fu(\).)225 2196 +y Fq(\017)60 b Fu(Bash)31 b(expands)e(and)h(displa)m(ys)g(the)h +Ft(PS0)e Fu(prompt)h(string)g(v)-5 b(ariable.)225 2326 +y Fq(\017)60 b Fu(Bash)45 b(runs)e(commands)i(from)f(the)i +Ft(PROMPT_COMMAND)41 b Fu(arra)m(y)k(v)-5 b(ariable)46 +b(b)s(efore)e(issuing)h(eac)m(h)330 2436 y(primary)29 +b(prompt.)225 2566 y Fq(\017)60 b Fu(Bash)31 b(deco)s(des)f(a)h(n)m(um) +m(b)s(er)e(of)h(bac)m(kslash-escap)s(ed)i(c)m(haracters)225 +2696 y Fq(\017)60 b Fu(The)40 b(Bash)h Ft(export)p Fu(,)h +Ft(readonly)p Fu(,)f(and)g Ft(declare)d Fu(builtins)j(can)g(tak)m(e)h +(a)f Ft(-f)f Fu(option)i(to)f(act)h(on)330 2806 y(shell)30 b(functions,)f(a)h Ft(-p)f Fu(option)g(to)i(displa)m(y)e(v)-5 b(ariables)30 b(with)f(v)-5 b(arious)30 b(attributes)g(set)g(in)f(a)h -(format)330 518 y(that)g(can)g(b)s(e)f(used)g(as)g(shell)h(input,)f(a)h -Ft(-n)f Fu(option)h(to)g(remo)m(v)m(e)h(v)-5 b(arious)30 -b(v)-5 b(ariable)30 b(attributes,)h(and)330 628 y(`)p +(format)330 2915 y(that)g(can)g(b)s(e)f(used)g(as)g(shell)h(input,)f(a) +h Ft(-n)f Fu(option)h(to)g(remo)m(v)m(e)h(v)-5 b(arious)30 +b(v)-5 b(ariable)30 b(attributes,)h(and)330 3025 y(`)p Ft(name=value)p Fu(')d(argumen)m(ts)j(to)g(set)g(v)-5 b(ariable)31 b(attributes)g(and)f(v)-5 b(alues)30 b(sim)m(ultaneously) --8 b(.)225 765 y Fq(\017)60 b Fu(The)42 b(Bash)h Ft(hash)f +-8 b(.)225 3155 y Fq(\017)60 b Fu(The)42 b(Bash)h Ft(hash)f Fu(builtin)g(allo)m(ws)j(a)e(name)g(to)g(b)s(e)f(asso)s(ciated)j(with)d -(an)h(arbitrary)f(\014lename,)330 874 y(ev)m(en)30 b(when)e(that)h +(an)h(arbitrary)f(\014lename,)330 3265 y(ev)m(en)30 b(when)e(that)h (\014lename)g(cannot)h(b)s(e)e(found)g(b)m(y)h(searc)m(hing)g(the)g Ft($PATH)p Fu(,)g(using)f(`)p Ft(hash)h(-p)p Fu(')g(\(see)330 -984 y(Section)i(4.1)h([Bourne)e(Shell)g(Builtins],)h(page)h(48\).)225 -1121 y Fq(\017)60 b Fu(Bash)27 b(includes)f(a)i Ft(help)d +3374 y(Section)i(4.1)h([Bourne)e(Shell)g(Builtins],)h(page)h(49\).)225 +3504 y Fq(\017)60 b Fu(Bash)27 b(includes)f(a)i Ft(help)d Fu(builtin)i(for)f(quic)m(k)h(reference)h(to)f(shell)g(facilities)i -(\(see)f(Section)g(4.2)g([Bash)330 1230 y(Builtins],)j(page)g(55\).)225 -1367 y Fq(\017)60 b Fu(The)42 b Ft(printf)g Fu(builtin)g(is)h(a)m(v)-5 -b(ailable)45 b(to)f(displa)m(y)f(formatted)g(output)g(\(see)h(Section)g -(4.2)g([Bash)330 1477 y(Builtins],)31 b(page)g(55\).)225 -1614 y Fq(\017)60 b Fu(The)26 b(Bash)h Ft(read)f Fu(builtin)g(\(see)i -(Section)g(4.2)g([Bash)f(Builtins],)h(page)g(55\))g(will)f(read)g(a)g -(line)g(ending)330 1724 y(in)i(`)p Ft(\\)p Fu(')h(with)f(the)g -Ft(-r)g Fu(option,)i(and)d(will)i(use)f(the)h Ft(REPLY)e -Fu(v)-5 b(ariable)30 b(as)g(a)f(default)h(if)f(no)h(non-option)330 -1833 y(argumen)m(ts)h(are)h(supplied.)42 b(The)30 b(Bash)i -Ft(read)e Fu(builtin)g(also)j(accepts)f(a)g(prompt)e(string)h(with)g -(the)330 1943 y Ft(-p)c Fu(option)h(and)f(will)g(use)h(Readline)g(to)g -(obtain)g(the)g(line)f(when)g(giv)m(en)h(the)g Ft(-e)f -Fu(option.)40 b(The)27 b Ft(read)330 2052 y Fu(builtin)h(also)i(has)e -(additional)i(options)f(to)g(con)m(trol)h(input:)39 b(the)29 -b Ft(-s)f Fu(option)h(will)g(turn)e(o\013)j(ec)m(hoing)330 -2162 y(of)f(input)f(c)m(haracters)j(as)e(they)g(are)h(read,)f(the)g -Ft(-t)g Fu(option)g(will)h(allo)m(w)g Ft(read)e Fu(to)i(time)g(out)f -(if)g(input)330 2271 y(do)s(es)i(not)h(arriv)m(e)g(within)f(a)h(sp)s -(eci\014ed)f(n)m(um)m(b)s(er)f(of)i(seconds,)g(the)f -Ft(-n)g Fu(option)h(will)g(allo)m(w)h(reading)330 2381 -y(only)38 b(a)g(sp)s(eci\014ed)f(n)m(um)m(b)s(er)f(of)i(c)m(haracters)h -(rather)e(than)g(a)h(full)g(line,)i(and)d(the)h Ft(-d)f -Fu(option)h(will)330 2491 y(read)30 b(un)m(til)h(a)g(particular)f(c)m -(haracter)i(rather)f(than)f(newline.)225 2628 y Fq(\017)60 +(\(see)f(Section)g(4.2)g([Bash)330 3614 y(Builtins],)j(page)g(57\).)225 +3744 y Fq(\017)60 b Fu(Bash)27 b(includes)f(the)h Ft(mapfile)e +Fu(builtin)i(to)g(quic)m(kly)h(read)e(the)h(con)m(ten)m(ts)i(of)e(a)g +(\014le)g(in)m(to)h(an)e(indexed)330 3854 y(arra)m(y)31 +b(v)-5 b(ariable.)225 3984 y Fq(\017)60 b Fu(The)42 b +Ft(printf)g Fu(builtin)g(is)h(a)m(v)-5 b(ailable)45 b(to)f(displa)m(y)f +(formatted)g(output)g(\(see)h(Section)g(4.2)g([Bash)330 +4093 y(Builtins],)31 b(page)g(57\).)225 4224 y Fq(\017)60 +b Fu(The)26 b(Bash)h Ft(read)f Fu(builtin)g(\(see)i(Section)g(4.2)g +([Bash)f(Builtins],)h(page)g(57\))g(will)f(read)g(a)g(line)g(ending)330 +4333 y(in)i(`)p Ft(\\)p Fu(')h(with)f(the)g Ft(-r)g Fu(option,)i(and)d +(will)i(use)f(the)h Ft(REPLY)e Fu(v)-5 b(ariable)30 b(as)g(a)f(default) +h(if)f(no)h(non-option)330 4443 y(argumen)m(ts)h(are)h(supplied.)42 +b(The)30 b(Bash)i Ft(read)e Fu(builtin)g(also)j(accepts)f(a)g(prompt)e +(string)h(with)g(the)330 4552 y Ft(-p)36 b Fu(option)h(and)f(will)h +(use)g(Readline)g(to)g(obtain)g(the)g(line)g(when)f(giv)m(en)i(the)f +Ft(-e)f Fu(or)g Ft(-E)g Fu(options.)330 4662 y(The)31 +b Ft(read)g Fu(builtin)h(also)g(has)g(additional)h(options)f(to)h(con)m +(trol)g(input:)43 b(the)32 b Ft(-s)f Fu(option)i(will)f(turn)330 +4771 y(o\013)f(ec)m(hoing)i(of)e(input)f(c)m(haracters)j(as)e(they)g +(are)g(read,)h(the)f Ft(-t)f Fu(option)i(will)f(allo)m(w)i +Ft(read)c Fu(to)j(time)330 4881 y(out)k(if)g(input)f(do)s(es)h(not)h +(arriv)m(e)f(within)g(a)g(sp)s(eci\014ed)g(n)m(um)m(b)s(er)e(of)j +(seconds,)g(the)g Ft(-n)e Fu(option)i(will)330 4991 y(allo)m(w)32 +b(reading)f(only)g(a)g(sp)s(eci\014ed)f(n)m(um)m(b)s(er)g(of)h(c)m +(haracters)h(rather)f(than)f(a)h(full)g(line,)g(and)g(the)g +Ft(-d)330 5100 y Fu(option)g(will)g(read)f(un)m(til)g(a)h(particular)g +(c)m(haracter)h(rather)e(than)g(newline.)225 5230 y Fq(\017)60 b Fu(The)33 b Ft(return)e Fu(builtin)i(ma)m(y)g(b)s(e)g(used)f(to)i(ab) s(ort)f(execution)h(of)f(scripts)g(executed)h(with)f(the)g -Ft(.)g Fu(or)330 2737 y Ft(source)c Fu(builtins)g(\(see)j(Section)f -(4.1)g([Bourne)g(Shell)f(Builtins],)h(page)g(48\).)225 -2874 y Fq(\017)60 b Fu(Bash)43 b(includes)g(the)g Ft(shopt)f -Fu(builtin,)k(for)d(\014ner)f(con)m(trol)j(of)e(shell)h(optional)g -(capabilities)h(\(see)330 2984 y(Section)c(4.3.2)g([The)f(Shopt)f -(Builtin],)k(page)d(71\),)k(and)39 b(allo)m(ws)i(these)f(options)h(to)f -(b)s(e)f(set)i(and)330 3093 y(unset)30 b(at)h(shell)g(in)m(v)m(o)s -(cation)h(\(see)f(Section)h(6.1)f([In)m(v)m(oking)g(Bash],)g(page)h -(91\).)225 3230 y Fq(\017)60 b Fu(Bash)45 b(has)f(m)m(uc)m(h)g(more)h -(optional)h(b)s(eha)m(vior)e(con)m(trollable)j(with)e(the)f -Ft(set)g Fu(builtin)g(\(see)h(Sec-)330 3340 y(tion)31 -b(4.3.1)h([The)e(Set)h(Builtin],)g(page)g(67\).)225 3477 -y Fq(\017)60 b Fu(The)31 b(`)p Ft(-x)p Fu(')g(\()p Ft(xtrace)p -Fu(\))g(option)h(displa)m(ys)f(commands)h(other)f(than)h(simple)f -(commands)g(when)g(p)s(er-)330 3587 y(forming)f(an)g(execution)i(trace) -f(\(see)h(Section)f(4.3.1)h([The)e(Set)h(Builtin],)g(page)g(67\).)225 -3724 y Fq(\017)60 b Fu(The)28 b Ft(test)g Fu(builtin)h(\(see)h(Section) -f(4.1)h([Bourne)f(Shell)g(Builtins],)h(page)g(48\))g(is)f(sligh)m(tly)h -(di\013eren)m(t,)330 3833 y(as)23 b(it)g(implemen)m(ts)f(the)h -Fm(posix)f Fu(algorithm,)j(whic)m(h)d(sp)s(eci\014es)g(the)h(b)s(eha)m -(vior)f(based)g(on)h(the)f(n)m(um)m(b)s(er)330 3943 y(of)31 -b(argumen)m(ts.)225 4080 y Fq(\017)60 b Fu(Bash)31 b(includes)g(the)h +Ft(.)g Fu(or)330 5340 y Ft(source)c Fu(builtins)g(\(see)j(Section)f +(4.1)g([Bourne)g(Shell)f(Builtins],)h(page)g(49\).)p +eop end +%%Page: 179 185 +TeXDict begin 179 184 bop 150 -116 a Fu(App)s(endix)29 +b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 +b(The)f(Bourne)g(Shell)1258 b(179)225 299 y Fq(\017)60 +b Fu(Bash)43 b(includes)g(the)g Ft(shopt)f Fu(builtin,)k(for)d(\014ner) +f(con)m(trol)j(of)e(shell)h(optional)g(capabilities)h(\(see)330 +408 y(Section)c(4.3.2)g([The)f(Shopt)f(Builtin],)k(page)d(73\),)k(and) +39 b(allo)m(ws)i(these)f(options)h(to)f(b)s(e)f(set)i(and)330 +518 y(unset)30 b(at)h(shell)g(in)m(v)m(o)s(cation)h(\(see)f(Section)h +(6.1)f([In)m(v)m(oking)g(Bash],)g(page)h(94\).)225 655 +y Fq(\017)60 b Fu(Bash)45 b(has)f(m)m(uc)m(h)g(more)h(optional)h(b)s +(eha)m(vior)e(con)m(trollable)j(with)e(the)f Ft(set)g +Fu(builtin)g(\(see)h(Sec-)330 765 y(tion)31 b(4.3.1)h([The)e(Set)h +(Builtin],)g(page)g(69\).)225 902 y Fq(\017)60 b Fu(The)36 +b Ft(-x)f Fu(\()p Ft(xtrace)p Fu(\))g(option)i(displa)m(ys)f(commands)g +(other)g(than)g(simple)g(commands)g(when)f(p)s(er-)330 +1011 y(forming)30 b(an)g(execution)i(trace)f(\(see)h(Section)f(4.3.1)h +([The)e(Set)h(Builtin],)g(page)g(69\).)225 1148 y Fq(\017)60 +b Fu(The)28 b Ft(test)g Fu(builtin)h(\(see)h(Section)f(4.1)h([Bourne)f +(Shell)g(Builtins],)h(page)g(49\))g(is)f(sligh)m(tly)h(di\013eren)m(t,) +330 1258 y(as)23 b(it)g(implemen)m(ts)f(the)h Fm(posix)f +Fu(algorithm,)j(whic)m(h)d(sp)s(eci\014es)g(the)h(b)s(eha)m(vior)f +(based)g(on)h(the)f(n)m(um)m(b)s(er)330 1367 y(of)31 +b(argumen)m(ts.)225 1504 y Fq(\017)60 b Fu(The)41 b(Bash)h +Ft(wait)e Fu(builtin)h(has)g(a)h Ft(-n)f Fu(option)h(to)g(w)m(ait)h +(for)e(the)h(next)f(c)m(hild)h(to)g(exit,)k(p)s(ossibly)330 +1614 y(selecting)36 b(from)d(a)i(list)g(of)f(supplied)f(jobs,)h(and)g +(the)g Ft(-p)f Fu(option)i(to)g(store)f(information)h(ab)s(out)f(a)330 +1724 y(terminated)d(c)m(hild)g(pro)s(cess)f(in)g(a)g(shell)h(v)-5 +b(ariable.)225 1861 y Fq(\017)60 b Fu(Bash)31 b(includes)g(the)h Ft(caller)d Fu(builtin,)j(whic)m(h)f(displa)m(ys)g(the)g(con)m(text)i -(of)f(an)m(y)g(activ)m(e)h(subroutine)330 4189 y(call)28 +(of)f(an)m(y)g(activ)m(e)h(subroutine)330 1970 y(call)28 b(\(a)f(shell)f(function)h(or)f(a)h(script)f(executed)h(with)f(the)h Ft(.)f Fu(or)g Ft(source)f Fu(builtins\).)39 b(This)26 -b(supp)s(orts)330 4299 y(the)31 b(Bash)f(debugger.)225 -4436 y Fq(\017)60 b Fu(The)42 b Ft(trap)f Fu(builtin)h(\(see)i(Section) -f(4.1)h([Bourne)e(Shell)g(Builtins],)47 b(page)c(48\))h(allo)m(ws)g(a)e -Ft(DEBUG)330 4545 y Fu(pseudo-signal)c(sp)s(eci\014cation,)i(similar)e +b(supp)s(orts)330 2080 y(the)31 b(Bash)f(debugger.)225 +2217 y Fq(\017)60 b Fu(The)42 b Ft(trap)f Fu(builtin)h(\(see)i(Section) +f(4.1)h([Bourne)e(Shell)g(Builtins],)47 b(page)c(49\))h(allo)m(ws)g(a)e +Ft(DEBUG)330 2326 y Fu(pseudo-signal)c(sp)s(eci\014cation,)i(similar)e (to)g Ft(EXIT)p Fu(.)62 b(Commands)36 b(sp)s(eci\014ed)h(with)g(a)h -Ft(DEBUG)e Fu(trap)330 4655 y(are)k(executed)g(b)s(efore)f(ev)m(ery)h +Ft(DEBUG)e Fu(trap)330 2436 y(are)k(executed)g(b)s(efore)f(ev)m(ery)h (simple)f(command,)j Ft(for)c Fu(command,)k Ft(case)c -Fu(command,)k Ft(select)330 4765 y Fu(command,)35 b(ev)m(ery)g +Fu(command,)k Ft(select)330 2545 y Fu(command,)35 b(ev)m(ery)g (arithmetic)g Ft(for)e Fu(command,)i(and)f(b)s(efore)g(the)g(\014rst)f -(command)h(executes)h(in)330 4874 y(a)29 b(shell)g(function.)40 +(command)h(executes)h(in)330 2655 y(a)29 b(shell)g(function.)40 b(The)28 b Ft(DEBUG)g Fu(trap)g(is)h(not)g(inherited)f(b)m(y)h(shell)g -(functions)f(unless)g(the)h(function)330 4984 y(has)35 +(functions)f(unless)g(the)h(function)330 2765 y(has)35 b(b)s(een)g(giv)m(en)i(the)f Ft(trace)e Fu(attribute)i(or)g(the)g Ft(functrace)d Fu(option)j(has)f(b)s(een)g(enabled)g(using)330 -5093 y(the)28 b Ft(shopt)e Fu(builtin.)39 b(The)27 b +2874 y(the)28 b Ft(shopt)e Fu(builtin.)39 b(The)27 b Ft(extdebug)f Fu(shell)i(option)g(has)f(additional)h(e\013ects)h(on)f -(the)g Ft(DEBUG)e Fu(trap.)330 5230 y(The)21 b Ft(trap)e +(the)g Ft(DEBUG)e Fu(trap.)330 3011 y(The)21 b Ft(trap)e Fu(builtin)i(\(see)h(Section)g(4.1)g([Bourne)f(Shell)g(Builtins],)j -(page)e(48\))g(allo)m(ws)g(an)f Ft(ERR)f Fu(pseudo-)330 -5340 y(signal)30 b(sp)s(eci\014cation,)h(similar)f(to)g +(page)e(49\))g(allo)m(ws)g(an)f Ft(ERR)f Fu(pseudo-)330 +3121 y(signal)30 b(sp)s(eci\014cation,)h(similar)f(to)g Ft(EXIT)f Fu(and)g Ft(DEBUG)p Fu(.)39 b(Commands)28 b(sp)s(eci\014ed)h -(with)g(an)g Ft(ERR)g Fu(trap)p eop end -%%Page: 172 178 -TeXDict begin 172 177 bop 150 -116 a Fu(App)s(endix)29 -b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 -b(The)f(Bourne)g(Shell)1258 b(172)330 299 y(are)40 b(executed)g(after)g -(a)f(simple)h(command)f(fails,)j(with)d(a)h(few)f(exceptions.)68 -b(The)39 b Ft(ERR)g Fu(trap)g(is)330 408 y(not)g(inherited)f(b)m(y)h +(with)g(an)g Ft(ERR)g Fu(trap)330 3230 y(are)40 b(executed)g(after)g(a) +f(simple)h(command)f(fails,)j(with)d(a)h(few)f(exceptions.)68 +b(The)39 b Ft(ERR)g Fu(trap)g(is)330 3340 y(not)g(inherited)f(b)m(y)h (shell)g(functions)f(unless)g(the)h Ft(-o)29 b(errtrace)37 b Fu(option)i(to)g(the)g Ft(set)f Fu(builtin)g(is)330 -518 y(enabled.)330 650 y(The)g Ft(trap)g Fu(builtin)h(\(see)g(Section)h -(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(48\))g(allo)m(ws)g(a)g -Ft(RETURN)330 759 y Fu(pseudo-signal)f(sp)s(eci\014cation,)k(similar)d -(to)g Ft(EXIT)e Fu(and)g Ft(DEBUG)p Fu(.)66 b(Commands)38 -b(sp)s(eci\014ed)h(with)g(a)330 869 y Ft(RETURN)g Fu(trap)i(are)g -(executed)h(b)s(efore)e(execution)i(resumes)e(after)h(a)g(shell)g -(function)g(or)g(a)g(shell)330 978 y(script)36 b(executed)g(with)g -Ft(.)f Fu(or)h Ft(source)e Fu(returns.)56 b(The)35 b -Ft(RETURN)f Fu(trap)i(is)g(not)g(inherited)f(b)m(y)h(shell)330 -1088 y(functions)k(unless)h(the)g(function)f(has)h(b)s(een)f(giv)m(en)i -(the)f Ft(trace)e Fu(attribute)j(or)e(the)h Ft(functrace)330 -1198 y Fu(option)31 b(has)f(b)s(een)g(enabled)g(using)g(the)g -Ft(shopt)f Fu(builtin.)225 1329 y Fq(\017)60 b Fu(The)30 -b(Bash)g Ft(type)f Fu(builtin)h(is)g(more)g(extensiv)m(e)i(and)d(giv)m -(es)j(more)e(information)h(ab)s(out)f(the)g(names)330 -1439 y(it)h(\014nds)e(\(see)i(Section)g(4.2)h([Bash)e(Builtins],)i -(page)f(55\).)225 1570 y Fq(\017)60 b Fu(The)27 b(Bash)h +3450 y(enabled.)330 3587 y(The)g Ft(trap)g Fu(builtin)h(\(see)g +(Section)h(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(49\))g(allo)m +(ws)g(a)g Ft(RETURN)330 3696 y Fu(pseudo-signal)f(sp)s(eci\014cation,)k +(similar)d(to)g Ft(EXIT)e Fu(and)g Ft(DEBUG)p Fu(.)66 +b(Commands)38 b(sp)s(eci\014ed)h(with)g(a)330 3806 y +Ft(RETURN)g Fu(trap)i(are)g(executed)h(b)s(efore)e(execution)i(resumes) +e(after)h(a)g(shell)g(function)g(or)g(a)g(shell)330 3915 +y(script)36 b(executed)g(with)g Ft(.)f Fu(or)h Ft(source)e +Fu(returns.)56 b(The)35 b Ft(RETURN)f Fu(trap)i(is)g(not)g(inherited)f +(b)m(y)h(shell)330 4025 y(functions)k(unless)h(the)g(function)f(has)h +(b)s(een)f(giv)m(en)i(the)f Ft(trace)e Fu(attribute)j(or)e(the)h +Ft(functrace)330 4134 y Fu(option)31 b(has)f(b)s(een)g(enabled)g(using) +g(the)g Ft(shopt)f Fu(builtin.)225 4271 y Fq(\017)60 +b Fu(The)30 b(Bash)g Ft(type)f Fu(builtin)h(is)g(more)g(extensiv)m(e)i +(and)d(giv)m(es)j(more)e(information)h(ab)s(out)f(the)g(names)330 +4381 y(it)h(\014nds)e(\(see)i(Section)g(4.2)h([Bash)e(Builtins],)i +(page)f(57\).)225 4518 y Fq(\017)60 b Fu(The)27 b(Bash)h Ft(umask)e Fu(builtin)h(p)s(ermits)g(a)h Ft(-p)f Fu(option)h(to)h (cause)f(the)g(output)f(to)h(b)s(e)f(displa)m(y)m(ed)h(in)g(the)330 -1680 y(form)i(of)h(a)g Ft(umask)f Fu(command)g(that)i(ma)m(y)f(b)s(e)f +4628 y(form)i(of)h(a)g Ft(umask)f Fu(command)g(that)i(ma)m(y)f(b)s(e)f (reused)g(as)h(input)f(\(see)i(Section)f(4.1)h([Bourne)f(Shell)330 -1789 y(Builtins],)g(page)g(48\).)225 1921 y Fq(\017)60 +4737 y(Builtins],)g(page)g(49\).)225 4874 y Fq(\017)60 b Fu(Bash)34 b(implemen)m(ts)h(a)g Ft(csh)p Fu(-lik)m(e)g(directory)f (stac)m(k,)j(and)d(pro)m(vides)g(the)g Ft(pushd)p Fu(,)g -Ft(popd)p Fu(,)g(and)g Ft(dirs)330 2030 y Fu(builtins)d(to)i +Ft(popd)p Fu(,)g(and)g Ft(dirs)330 4984 y Fu(builtins)d(to)i (manipulate)f(it)h(\(see)g(Section)f(6.8)h([The)f(Directory)h(Stac)m -(k],)h(page)f(102\).)47 b(Bash)32 b(also)330 2140 y(mak)m(es)f(the)g +(k],)h(page)f(105\).)47 b(Bash)32 b(also)330 5093 y(mak)m(es)f(the)g (directory)g(stac)m(k)g(visible)g(as)g(the)f(v)-5 b(alue)31 b(of)g(the)f Ft(DIRSTACK)f Fu(shell)h(v)-5 b(ariable.)225 -2272 y Fq(\017)60 b Fu(Bash)28 b(in)m(terprets)h(sp)s(ecial)g(bac)m +5230 y Fq(\017)60 b Fu(Bash)28 b(in)m(terprets)h(sp)s(ecial)g(bac)m (kslash-escap)s(ed)g(c)m(haracters)g(in)f(the)h(prompt)e(strings)h -(when)f(in)m(ter-)330 2381 y(activ)m(e)33 b(\(see)e(Section)g(6.9)h -([Con)m(trolling)f(the)g(Prompt],)f(page)h(104\).)225 -2513 y Fq(\017)60 b Fu(The)46 b(Bash)h(restricted)g(mo)s(de)f(is)h -(more)f(useful)g(\(see)h(Section)h(6.10)g([The)e(Restricted)i(Shell],) -330 2622 y(page)31 b(105\);)h(the)f(SVR4.2)g(shell)g(restricted)g(mo)s -(de)f(is)g(to)s(o)h(limited.)225 2754 y Fq(\017)60 b -Fu(The)30 b Ft(disown)f Fu(builtin)h(can)h(remo)m(v)m(e)h(a)f(job)f -(from)g(the)h(in)m(ternal)g(shell)g(job)f(table)i(\(see)f(Section)h -(7.2)330 2863 y([Job)e(Con)m(trol)h(Builtins],)g(page)g(114\))g(or)g -(suppress)d(the)i(sending)g(of)g Ft(SIGHUP)e Fu(to)j(a)g(job)f(when)f -(the)330 2973 y(shell)i(exits)g(as)f(the)h(result)f(of)h(a)f -Ft(SIGHUP)p Fu(.)225 3104 y Fq(\017)60 b Fu(Bash)31 b(includes)f(a)g(n) -m(um)m(b)s(er)f(of)i(features)g(to)g(supp)s(ort)d(a)j(separate)g -(debugger)f(for)h(shell)f(scripts.)225 3236 y Fq(\017)60 -b Fu(The)28 b(SVR4.2)h(shell)f(has)g(t)m(w)m(o)i(privilege-related)g -(builtins)e(\()p Ft(mldmode)e Fu(and)i Ft(priv)p Fu(\))f(not)i(presen)m -(t)f(in)330 3346 y(Bash.)225 3477 y Fq(\017)60 b Fu(Bash)31 -b(do)s(es)f(not)g(ha)m(v)m(e)i(the)e Ft(stop)g Fu(or)g -Ft(newgrp)f Fu(builtins.)225 3609 y Fq(\017)60 b Fu(Bash)31 -b(do)s(es)f(not)g(use)g(the)h Ft(SHACCT)d Fu(v)-5 b(ariable)32 -b(or)e(p)s(erform)f(shell)i(accoun)m(ting.)225 3740 y -Fq(\017)60 b Fu(The)30 b(SVR4.2)h Ft(sh)f Fu(uses)g(a)g -Ft(TIMEOUT)f Fu(v)-5 b(ariable)31 b(lik)m(e)h(Bash)e(uses)g -Ft(TMOUT)p Fu(.)150 3894 y(More)h(features)g(unique)e(to)i(Bash)g(ma)m -(y)g(b)s(e)f(found)f(in)h(Chapter)f(6)i([Bash)g(F)-8 -b(eatures],)32 b(page)f(91.)150 4128 y Fs(B.1)67 b(Implemen)l(tation)48 +(when)f(in)m(ter-)330 5340 y(activ)m(e)33 b(\(see)e(Section)g(6.9)h +([Con)m(trolling)f(the)g(Prompt],)f(page)h(107\).)p eop +end +%%Page: 180 186 +TeXDict begin 180 185 bop 150 -116 a Fu(App)s(endix)29 +b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 +b(The)f(Bourne)g(Shell)1258 b(180)225 299 y Fq(\017)60 +b Fu(The)46 b(Bash)h(restricted)g(mo)s(de)f(is)h(more)f(useful)g(\(see) +h(Section)h(6.10)g([The)e(Restricted)i(Shell],)330 408 +y(page)31 b(109\);)h(the)f(SVR4.2)g(shell)g(restricted)g(mo)s(de)f(is)g +(to)s(o)h(limited.)225 543 y Fq(\017)60 b Fu(The)30 b +Ft(disown)f Fu(builtin)h(can)h(remo)m(v)m(e)h(a)f(job)f(from)g(the)h +(in)m(ternal)g(shell)g(job)f(table)i(\(see)f(Section)h(7.2)330 +653 y([Job)e(Con)m(trol)h(Builtins],)g(page)g(119\))g(or)g(suppress)d +(the)i(sending)g(of)g Ft(SIGHUP)e Fu(to)j(a)g(job)f(when)f(the)330 +762 y(shell)i(exits)g(as)f(the)h(result)f(of)h(a)f Ft(SIGHUP)p +Fu(.)225 897 y Fq(\017)60 b Fu(Bash)31 b(includes)f(a)g(n)m(um)m(b)s +(er)f(of)i(features)g(to)g(supp)s(ort)d(a)j(separate)g(debugger)f(for)h +(shell)f(scripts.)225 1031 y Fq(\017)60 b Fu(The)28 b(SVR4.2)h(shell)f +(has)g(t)m(w)m(o)i(privilege-related)g(builtins)e(\()p +Ft(mldmode)e Fu(and)i Ft(priv)p Fu(\))f(not)i(presen)m(t)f(in)330 +1141 y(Bash.)225 1275 y Fq(\017)60 b Fu(Bash)31 b(do)s(es)f(not)g(ha)m +(v)m(e)i(the)e Ft(stop)g Fu(or)g Ft(newgrp)f Fu(builtins.)225 +1410 y Fq(\017)60 b Fu(Bash)31 b(do)s(es)f(not)g(use)g(the)h +Ft(SHACCT)d Fu(v)-5 b(ariable)32 b(or)e(p)s(erform)f(shell)i(accoun)m +(ting.)225 1544 y Fq(\017)60 b Fu(The)30 b(SVR4.2)h Ft(sh)f +Fu(uses)g(a)g Ft(TIMEOUT)f Fu(v)-5 b(ariable)31 b(lik)m(e)h(Bash)e +(uses)g Ft(TMOUT)p Fu(.)150 1704 y(More)h(features)g(unique)e(to)i +(Bash)g(ma)m(y)g(b)s(e)f(found)f(in)h(Chapter)f(6)i([Bash)g(F)-8 +b(eatures],)32 b(page)f(94.)150 1944 y Fs(B.1)67 b(Implemen)l(tation)48 b(Di\013erences)e(F)-11 b(rom)44 b(The)h(SVR4.2)g(Shell)150 -4288 y Fu(Since)33 b(Bash)h(is)f(a)g(completely)i(new)e(implemen)m +2104 y Fu(Since)33 b(Bash)h(is)f(a)g(completely)i(new)e(implemen)m (tation,)j(it)e(do)s(es)e(not)i(su\013er)e(from)h(man)m(y)g(of)h(the)f -(limi-)150 4397 y(tations)f(of)e(the)h(SVR4.2)g(shell.)41 -b(F)-8 b(or)31 b(instance:)225 4529 y Fq(\017)60 b Fu(Bash)32 +(limi-)150 2213 y(tations)f(of)e(the)h(SVR4.2)g(shell.)41 +b(F)-8 b(or)31 b(instance:)225 2348 y Fq(\017)60 b Fu(Bash)32 b(do)s(es)f(not)h(fork)f(a)h(subshell)e(when)h(redirecting)h(in)m(to)h (or)e(out)h(of)g(a)g(shell)f(con)m(trol)i(structure)330 -4639 y(suc)m(h)d(as)h(an)f Ft(if)g Fu(or)g Ft(while)f -Fu(statemen)m(t.)225 4770 y Fq(\017)60 b Fu(Bash)29 b(do)s(es)f(not)h +2457 y(suc)m(h)d(as)h(an)f Ft(if)g Fu(or)g Ft(while)f +Fu(statemen)m(t.)225 2592 y Fq(\017)60 b Fu(Bash)29 b(do)s(es)f(not)h (allo)m(w)h(un)m(balanced)f(quotes.)41 b(The)28 b(SVR4.2)h(shell)g -(will)g(silen)m(tly)i(insert)d(a)h(needed)330 4880 y(closing)g(quote)g +(will)g(silen)m(tly)i(insert)d(a)h(needed)330 2702 y(closing)g(quote)g (at)f Ft(EOF)f Fu(under)g(certain)h(circumstances.)41 b(This)27 b(can)h(b)s(e)g(the)g(cause)g(of)g(some)h(hard-)330 -4989 y(to-\014nd)h(errors.)225 5121 y Fq(\017)60 b Fu(The)45 +2811 y(to-\014nd)h(errors.)225 2946 y Fq(\017)60 b Fu(The)45 b(SVR4.2)h(shell)f(uses)g(a)g(baro)s(que)g(memory)g(managemen)m(t)i(sc) -m(heme)e(based)g(on)g(trapping)330 5230 y Ft(SIGSEGV)p +m(heme)e(based)g(on)g(trapping)330 3055 y Ft(SIGSEGV)p Fu(.)57 b(If)35 b(the)i(shell)f(is)h(started)g(from)e(a)i(pro)s(cess)f (with)g Ft(SIGSEGV)e Fu(blo)s(c)m(k)m(ed)k(\(e.g.,)h(b)m(y)d(using)330 -5340 y(the)31 b Ft(system\(\))d Fu(C)i(library)g(function)g(call\),)i -(it)f(misb)s(eha)m(v)m(es)g(badly)-8 b(.)p eop end -%%Page: 173 179 -TeXDict begin 173 178 bop 150 -116 a Fu(App)s(endix)29 -b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 -b(The)f(Bourne)g(Shell)1258 b(173)225 299 y Fq(\017)60 +3165 y(the)31 b Ft(system\(\))d Fu(C)i(library)g(function)g(call\),)i +(it)f(misb)s(eha)m(v)m(es)g(badly)-8 b(.)225 3299 y Fq(\017)60 b Fu(In)30 b(a)i(questionable)g(attempt)g(at)g(securit)m(y)-8 b(,)33 b(the)e(SVR4.2)h(shell,)g(when)e(in)m(v)m(ok)m(ed)j(without)e -(the)h Ft(-p)330 408 y Fu(option,)39 b(will)d(alter)i(its)e(real)h(and) -f(e\013ectiv)m(e)j Fm(uid)d Fu(and)g Fm(gid)h Fu(if)f(they)h(are)f -(less)h(than)f(some)h(magic)330 518 y(threshold)30 b(v)-5 +(the)h Ft(-p)330 3409 y Fu(option,)39 b(will)d(alter)i(its)e(real)h +(and)f(e\013ectiv)m(e)j Fm(uid)d Fu(and)g Fm(gid)h Fu(if)f(they)h(are)f +(less)h(than)f(some)h(magic)330 3518 y(threshold)30 b(v)-5 b(alue,)31 b(commonly)g(100.)42 b(This)29 b(can)i(lead)g(to)g(unexp)s -(ected)f(results.)225 653 y Fq(\017)60 b Fu(The)30 b(SVR4.2)h(shell)g +(ected)f(results.)225 3653 y Fq(\017)60 b Fu(The)30 b(SVR4.2)h(shell)g (do)s(es)f(not)g(allo)m(w)i(users)e(to)h(trap)f Ft(SIGSEGV)p Fu(,)f Ft(SIGALRM)p Fu(,)f(or)j Ft(SIGCHLD)p Fu(.)225 -787 y Fq(\017)60 b Fu(The)34 b(SVR4.2)h(shell)g(do)s(es)g(not)f(allo)m +3787 y Fq(\017)60 b Fu(The)34 b(SVR4.2)h(shell)g(do)s(es)g(not)f(allo)m (w)j(the)d Ft(IFS)p Fu(,)h Ft(MAILCHECK)p Fu(,)f Ft(PATH)p Fu(,)h Ft(PS1)p Fu(,)g(or)f Ft(PS2)g Fu(v)-5 b(ariables)35 -b(to)330 897 y(b)s(e)30 b(unset.)225 1031 y Fq(\017)60 +b(to)330 3897 y(b)s(e)30 b(unset.)225 4032 y Fq(\017)60 b Fu(The)30 b(SVR4.2)h(shell)g(treats)g(`)p Ft(^)p Fu(')f(as)h(the)g (undo)s(cumen)m(ted)e(equiv)-5 b(alen)m(t)31 b(of)g(`)p -Ft(|)p Fu('.)225 1166 y Fq(\017)60 b Fu(Bash)37 b(allo)m(ws)h(m)m +Ft(|)p Fu('.)225 4166 y Fq(\017)60 b Fu(Bash)37 b(allo)m(ws)h(m)m (ultiple)f(option)g(argumen)m(ts)g(when)e(it)i(is)g(in)m(v)m(ok)m(ed)h (\()p Ft(-x)30 b(-v)p Fu(\);)40 b(the)c(SVR4.2)i(shell)330 -1275 y(allo)m(ws)c(only)f(one)g(option)g(argumen)m(t)g(\()p +4276 y(allo)m(ws)c(only)f(one)g(option)g(argumen)m(t)g(\()p Ft(-xv)p Fu(\).)47 b(In)32 b(fact,)i(some)f(v)m(ersions)g(of)g(the)g -(shell)f(dump)f(core)330 1385 y(if)f(the)h(second)f(argumen)m(t)h(b)s -(egins)f(with)g(a)h(`)p Ft(-)p Fu('.)225 1519 y Fq(\017)60 +(shell)f(dump)f(core)330 4385 y(if)f(the)h(second)f(argumen)m(t)h(b)s +(egins)f(with)g(a)h(`)p Ft(-)p Fu('.)225 4520 y Fq(\017)60 b Fu(The)26 b(SVR4.2)i(shell)f(exits)g(a)g(script)g(if)g(an)m(y)g (builtin)f(fails;)j(Bash)e(exits)g(a)g(script)g(only)g(if)g(one)g(of)g -(the)330 1629 y Fm(posix)34 b Fu(sp)s(ecial)h(builtins)f(fails,)i(and)e +(the)330 4629 y Fm(posix)34 b Fu(sp)s(ecial)h(builtins)f(fails,)i(and)e (only)h(for)f(certain)h(failures,)h(as)f(en)m(umerated)g(in)f(the)h -Fm(posix)330 1738 y Fu(standard.)225 1873 y Fq(\017)60 +Fm(posix)330 4739 y Fu(standard.)225 4873 y Fq(\017)60 b Fu(The)30 b(SVR4.2)h(shell)g(b)s(eha)m(v)m(es)f(di\013eren)m(tly)h (when)f(in)m(v)m(ok)m(ed)i(as)e Ft(jsh)g Fu(\(it)h(turns)e(on)h(job)g -(con)m(trol\).)p eop end -%%Page: 174 180 -TeXDict begin 174 179 bop 3614 -116 a Fu(174)150 299 +(con)m(trol\).)225 5008 y Fq(\017)60 b Fu(If)38 b(the)g +Ft(lastpipe)e Fu(option)j(is)f(enabled,)j(and)c(job)h(con)m(trol)i(is)e +(not)h(activ)m(e,)k(Bash)38 b(runs)f(the)h(last)330 5117 +y(elemen)m(t)32 b(of)e(a)h(pip)s(eline)f(in)g(the)h(curren)m(t)f(shell) +g(execution)i(en)m(vironmen)m(t.)p eop end +%%Page: 181 187 +TeXDict begin 181 186 bop 3614 -116 a Fu(181)150 299 y Fp(App)t(endix)52 b(C)81 b(GNU)54 b(F)-13 b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Fu(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 635 y(Cop)m(yrigh)m(t)842 @@ -20719,10 +21297,10 @@ b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g 5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)p eop end -%%Page: 175 181 -TeXDict begin 175 180 bop 150 -116 a Fu(App)s(endix)29 +%%Page: 182 188 +TeXDict begin 182 187 bop 150 -116 a Fu(App)s(endix)29 b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 -b(175)330 299 y(under)26 b(this)i(License.)40 b(If)27 +b(182)330 299 y(under)26 b(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 @@ -20813,10 +21391,10 @@ b(Disclaimers)f(are)g(considered)e(to)330 4970 y(b)s(e)k(included)g(b)m b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)p eop end -%%Page: 176 182 -TeXDict begin 176 181 bop 150 -116 a Fu(App)s(endix)29 +%%Page: 183 189 +TeXDict begin 183 188 bop 150 -116 a Fu(App)s(endix)29 b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 -b(176)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h +b(183)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h (the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h (or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j @@ -20906,10 +21484,10 @@ b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e 5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)p eop end -%%Page: 177 183 -TeXDict begin 177 182 bop 150 -116 a Fu(App)s(endix)29 +%%Page: 184 190 +TeXDict begin 184 189 bop 150 -116 a Fu(App)s(endix)29 b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 -b(177)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g +b(184)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 @@ -20988,10 +21566,10 @@ b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g (designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p eop end -%%Page: 178 184 -TeXDict begin 178 183 bop 150 -116 a Fu(App)s(endix)29 +%%Page: 185 191 +TeXDict begin 185 190 bop 150 -116 a Fu(App)s(endix)29 b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 -b(178)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 +b(185)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 408 y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g @@ -21076,10 +21654,10 @@ b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end -%%Page: 179 185 -TeXDict begin 179 184 bop 150 -116 a Fu(App)s(endix)29 +%%Page: 186 192 +TeXDict begin 186 191 bop 150 -116 a Fu(App)s(endix)29 b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 -b(179)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h +b(186)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h (W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f (its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h @@ -21164,10 +21742,10 @@ b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f (the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f (an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end -%%Page: 180 186 -TeXDict begin 180 185 bop 150 -116 a Fu(App)s(endix)29 +%%Page: 187 193 +TeXDict begin 187 192 bop 150 -116 a Fu(App)s(endix)29 b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 -b(180)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE) +b(187)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE) 330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g (the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 @@ -21231,10 +21809,10 @@ f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g (time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) 330 4005 y(eligible)h(for)e(relicensing.)p eop end -%%Page: 181 187 -TeXDict begin 181 186 bop 150 -116 a Fu(App)s(endix)29 +%%Page: 188 194 +TeXDict begin 188 193 bop 150 -116 a Fu(App)s(endix)29 b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 -b(181)150 299 y Fs(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f +b(188)150 299 y Fs(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f (for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fu(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 @@ -21269,199 +21847,206 @@ y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s (ermit)e(their)i(use)f(in)g(free)g(soft)m(w)m(are.)p eop end -%%Page: 182 188 -TeXDict begin 182 187 bop 3614 -116 a Fu(182)150 299 +%%Page: 189 195 +TeXDict begin 189 194 bop 3614 -116 a Fu(189)150 299 y Fp(App)t(endix)52 b(D)81 b(Indexes)150 639 y Fs(D.1)68 b(Index)45 b(of)g(Shell)g(Builtin)g(Commands)146 806 -y(.)150 923 y Fe(.)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +y(.)150 922 y Fe(.)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)33 b Fb(48)146 1163 y Fs(:)150 1280 y Fe(:)19 b Fc(:)13 +(:)33 b Fb(49)146 1157 y Fs(:)150 1273 y Fe(:)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(48)146 -1523 y Fs([)150 1640 y Fe([)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(49)146 +1510 y Fs([)150 1626 y Fe([)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)33 b Fb(52)146 1881 y Fs(A)150 1998 y Fe(alias)9 +(:)g(:)g(:)33 b Fb(54)146 1862 y Fs(A)150 1978 y Fe(alias)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(55)146 2239 y -Fs(B)150 2356 y Fe(bg)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(57)146 2213 y +Fs(B)150 2329 y Fe(bg)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)29 -b Fb(114)150 2443 y Fe(bind)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(119)150 2416 y Fe(bind)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 -b Fb(56)150 2531 y Fe(break)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g +b Fb(57)150 2503 y Fe(break)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 -b Fb(49)150 2618 y Fe(builtin)f Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(50)150 2590 y Fe(builtin)f Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 -b Fb(57)146 2859 y Fs(C)150 2976 y Fe(caller)6 b Fc(:)15 +b Fb(59)146 2825 y Fs(C)150 2941 y Fe(caller)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)20 b Fb(57)150 3063 y Fe(cd)c Fc(:)e(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)20 b Fb(59)150 3029 y Fe(cd)c Fc(:)e(:)f(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)31 b Fb(49)150 3151 y Fe(command)22 +g(:)g(:)g(:)g(:)g(:)31 b Fb(50)150 3116 y Fe(command)22 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)35 b Fb(57)150 3238 y Fe(compgen)18 +h(:)f(:)g(:)g(:)g(:)35 b Fb(59)150 3203 y Fe(compgen)18 b Fc(:)d(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)33 b Fb(146)150 3326 y Fe(complete)16 +(:)h(:)f(:)g(:)33 b Fb(152)150 3290 y Fe(complete)16 b Fc(:)f(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)31 b Fb(146)150 3413 y Fe(compopt)18 b Fc(:)d(:)e(:)g(:)h(:) +(:)g(:)g(:)31 b Fb(152)150 3378 y Fe(compopt)18 b Fc(:)d(:)e(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)33 -b Fb(149)150 3501 y Fe(continue)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g +b Fb(155)150 3465 y Fe(continue)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b -Fb(49)146 3741 y Fs(D)150 3858 y Fe(declare)22 b Fc(:)13 +Fb(50)146 3699 y Fs(D)150 3816 y Fe(declare)22 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)35 b Fb(58)150 3946 y Fe(dirs)9 b Fc(:)14 +g(:)g(:)g(:)35 b Fb(60)150 3903 y Fe(dirs)9 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)24 b Fb(102)150 4033 y Fe(disown)e +h(:)f(:)g(:)g(:)g(:)g(:)24 b Fb(106)150 3990 y Fe(disown)e Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)36 b Fb(116)146 4274 y Fs(E)150 4391 +g(:)g(:)g(:)g(:)g(:)36 b Fb(121)146 4225 y Fs(E)150 4341 y Fe(echo)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 b -Fb(59)150 4478 y Fe(enable)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:) +Fb(61)150 4428 y Fe(enable)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20 -b Fb(60)150 4566 y Fe(eval)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(62)150 4515 y Fe(eval)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 -b Fb(49)150 4653 y Fe(exec)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(50)150 4603 y Fe(exec)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 -b Fb(50)150 4741 y Fe(exit)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(51)150 4690 y Fe(exit)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 -b Fb(50)150 4828 y Fe(export)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g +b Fb(51)150 4777 y Fe(export)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20 -b Fb(50)146 5080 y Fs(F)150 5197 y Fe(fc)14 b Fc(:)g(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)29 b Fb(153)150 5284 y Fe(fg)14 b Fc(:)g(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)29 b Fb(114)2021 871 y Fs(G)2025 988 y Fe(getopts)22 -b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)35 b Fb(50)2021 1250 y Fs(H)2025 -1369 y Fe(hash)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 -b Fb(51)2025 1457 y Fe(help)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 -b Fb(61)2025 1544 y Fe(history)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b -Fb(153)2021 1806 y Fs(J)2025 1924 y Fe(jobs)9 b Fc(:)14 -b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(114)2021 2186 y Fs(K)2025 -2303 y Fe(kill)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 -b Fb(115)2021 2554 y Fs(L)2025 2672 y Fe(let)14 b Fc(:)f(:)g(:)h(:)f(:) +b Fb(51)146 5023 y Fs(F)150 5139 y Fe(false)9 b Fc(:)14 +b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(51)150 5227 y Fe(fc)14 +b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)28 b Fb(61)2025 2760 y Fe(local)9 b Fc(:)14 -b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(61)2025 2848 y Fe(logout)6 -b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)29 b Fb(160)150 +5314 y Fe(fg)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)29 +b Fb(119)2021 871 y Fs(G)2025 988 y Fe(getopts)22 b Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(61)2021 3110 y Fs(M)2025 -3227 y Fe(mapfile)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(61)2021 -3489 y Fs(P)2025 3608 y Fe(popd)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h +h(:)f(:)g(:)35 b Fb(51)2021 1250 y Fs(H)2025 1369 y Fe(hash)11 +b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(52)2025 1457 +y Fe(help)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b +Fb(62)2025 1544 y Fe(history)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(160)2021 +1806 y Fs(J)2025 1924 y Fe(jobs)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 -b Fb(103)2025 3696 y Fe(printf)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 -b Fb(62)2025 3784 y Fe(pushd)6 b Fc(:)14 b(:)g(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)21 -b Fb(103)2025 3871 y Fe(pwd)14 b Fc(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +b Fb(119)2021 2186 y Fs(K)2025 2303 y Fe(kill)9 b Fc(:)14 +b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(120)2021 2554 y Fs(L)2025 +2672 y Fe(let)14 b Fc(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28 +b Fb(63)2025 2760 y Fe(local)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 +b Fb(63)2025 2848 y Fe(logout)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 +b Fb(63)2021 3110 y Fs(M)2025 3227 y Fe(mapfile)h Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)35 b Fb(63)2021 3489 y Fs(P)2025 3608 y Fe(popd)9 +b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(106)2025 3696 +y Fe(printf)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(64)2025 +3784 y Fe(pushd)6 b Fc(:)14 b(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)21 b +Fb(106)2025 3871 y Fe(pwd)14 b Fc(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28 -b Fb(51)2021 4133 y Fs(R)2025 4251 y Fe(read)11 b Fc(:)j(:)f(:)g(:)g(:) +b Fb(52)2021 4133 y Fs(R)2025 4251 y Fe(read)11 b Fc(:)j(:)f(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)26 b Fb(63)2025 4339 y Fe(readarray)15 b +g(:)g(:)g(:)26 b Fb(65)2025 4339 y Fe(readarray)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)30 b Fb(64)2025 4427 y Fe(readonly)18 b Fc(:)d(:)e(:)g(:)g(:)g +g(:)g(:)30 b Fb(67)2025 4427 y Fe(readonly)18 b Fc(:)d(:)e(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 -b Fb(52)2025 4515 y Fe(return)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(53)2025 4515 y Fe(return)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 -b Fb(52)2021 4765 y Fs(S)2025 4884 y Fe(set)14 b Fc(:)f(:)g(:)h(:)f(:)g +b Fb(53)2021 4765 y Fs(S)2025 4884 y Fe(set)14 b Fc(:)f(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)28 b Fb(67)2025 4972 y Fe(shift)9 b Fc(:)14 +(:)g(:)h(:)f(:)28 b Fb(69)2025 4972 y Fe(shift)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(52)2025 5060 y Fe(shopt)9 +g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(53)2025 5060 y Fe(shopt)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(71)2025 5148 +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(73)2025 5148 y Fe(source)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(64)2025 +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(67)2025 5235 y Fe(suspend)d Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(116)p eop end -%%Page: 183 189 -TeXDict begin 183 188 bop 150 -116 a Fu(App)s(endix)29 -b(D:)i(Indexes)2623 b(183)146 294 y Fs(T)150 410 y Fe(test)11 +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(121)p eop end +%%Page: 190 196 +TeXDict begin 190 195 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(190)146 294 y Fs(T)150 410 y Fe(test)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 b Fb(52)150 497 +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 b Fb(54)150 497 y Fe(times)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(54)150 +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(55)150 584 y Fe(trap)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 -b Fb(54)150 671 y Fe(type)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(55)150 671 y Fe(true)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 +b Fb(56)150 758 y Fe(type)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 -b Fb(64)150 758 y Fe(typeset)d Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +b Fb(67)150 846 y Fe(typeset)d Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 -b Fb(65)146 1003 y Fs(U)150 1119 y Fe(ulimit)6 b Fc(:)15 +b Fb(67)146 1090 y Fs(U)150 1206 y Fe(ulimit)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)20 b Fb(65)150 1206 y Fe(umask)9 +g(:)g(:)g(:)h(:)f(:)20 b Fb(67)150 1293 y Fe(umask)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(55)150 1293 y +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(56)150 1380 y Fe(unalias)f Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(66)150 1380 y +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(69)150 1467 y Fe(unset)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(55)2021 -294 y Fs(W)2025 433 y Fe(wait)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(57)2021 +294 y Fs(W)2025 434 y Fe(wait)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 -b Fb(115)150 2133 y Fs(D.2)68 b(Index)45 b(of)g(Shell)g(Reserv)l(ed)h +b Fb(120)150 2167 y Fs(D.2)68 b(Index)45 b(of)g(Shell)g(Reserv)l(ed)h (W)-11 b(ords)146 2704 y(!)150 2820 y Fe(!)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) @@ -21533,9 +22118,9 @@ y Fs(W)2025 5552 y Fe(while)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(12)p eop end -%%Page: 184 190 -TeXDict begin 184 189 bop 150 -116 a Fu(App)s(endix)29 -b(D:)i(Indexes)2623 b(184)150 299 y Fs(D.3)68 b(P)l(arameter)47 +%%Page: 191 197 +TeXDict begin 191 196 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(191)150 299 y Fs(D.3)68 b(P)l(arameter)47 b(and)d(V)-11 b(ariable)46 b(Index)146 955 y(!)150 1072 y Fe(!)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) @@ -21572,7 +22157,7 @@ g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)31 b Fb(23)150 2495 y Fe($_)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)31 b Fb(78)150 2582 y Fe($0)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h +(:)g(:)31 b Fb(81)150 2582 y Fe($0)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)31 b Fb(24)146 2834 y Fs(*)150 2950 y Fe(*)19 @@ -21593,847 +22178,869 @@ f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(23)p 156 4272 41 6 v 150 4389 a Fe(_)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)33 b Fb(78)146 4631 y Fs(0)150 4748 y +(:)f(:)g(:)g(:)33 b Fb(81)146 4631 y Fs(0)150 4748 y Fe(0)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(24)146 4991 y Fs(A)150 5108 y Fe(active-region-end-color)12 b Fc(:)18 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)h(:)26 b Fb(121)150 5196 y Fe(active-region-start-color) +(:)g(:)g(:)g(:)h(:)26 b Fb(126)150 5196 y Fe(active-region-start-color) 7 b Fc(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)21 b Fb(121)150 5283 y Fe(auto_resume)8 b +g(:)g(:)h(:)21 b Fb(126)150 5283 y Fe(auto_resume)8 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -23 b Fb(116)2021 954 y Fs(B)2025 1074 y Fe(BASH)11 b +23 b Fb(121)2021 954 y Fs(B)2025 1071 y Fe(BASH)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(79)2025 1163 +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(82)2025 1159 y Fe(BASH_ALIASES)8 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)22 b Fb(79)2025 1251 y Fe(BASH_ARGC)15 +g(:)g(:)g(:)g(:)h(:)22 b Fb(82)2025 1246 y Fe(BASH_ARGC)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)30 b Fb(79)2025 1340 y Fe(BASH_ARGV)15 b Fc(:)g(:)f(:)f(:)g +(:)g(:)g(:)30 b Fb(82)2025 1334 y Fe(BASH_ARGV)15 b Fc(:)g(:)f(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 -b Fb(79)2025 1429 y Fe(BASH_ARGV0)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g +b Fb(82)2025 1421 y Fe(BASH_ARGV0)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(80)2025 -1517 y Fe(BASH_CMDS)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(83)2025 +1509 y Fe(BASH_CMDS)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(80)2025 1606 +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(83)2025 1597 y Fe(BASH_COMMAND)8 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)22 b Fb(80)2025 1695 y Fe(BASH_COMPAT)10 +g(:)g(:)g(:)g(:)h(:)22 b Fb(83)2025 1684 y Fe(BASH_COMPAT)10 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)25 b Fb(80)2025 1783 y Fe(BASH_ENV)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g +g(:)25 b Fb(83)2025 1772 y Fe(BASH_ENV)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 -b Fb(80)2025 1872 y Fe(BASH_EXECUTION_STRING)24 b Fc(:)13 +b Fb(83)2025 1859 y Fe(BASH_EXECUTION_STRING)24 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)34 b Fb(80)2025 1960 y Fe(BASH_LINENO)10 +(:)g(:)g(:)g(:)g(:)34 b Fb(83)2025 1947 y Fe(BASH_LINENO)10 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)25 b Fb(80)2025 2049 y Fe(BASH_LOADABLES_PATH)7 b +g(:)25 b Fb(83)2025 2035 y Fe(BASH_LOADABLES_PATH)7 b Fc(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(81)2025 -2138 y Fe(BASH_REMATCH)8 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(81)2025 2226 y Fe(BASH_SOURCE)10 -b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)25 b Fb(81)2025 2315 y Fe(BASH_SUBSHELL)g Fc(:)13 -b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 -b Fb(81)2025 2403 y Fe(BASH_VERSINFO)25 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(84)2025 +2122 y Fe(BASH_MONOSECONDS)15 b Fc(:)h(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)29 b Fb(84)2025 2210 y Fe(BASH_REMATCH)8 b Fc(:)15 +b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 +b Fb(84)2025 2297 y Fe(BASH_SOURCE)10 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fb(84)2025 +2385 y Fe(BASH_SUBSHELL)g Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)37 b Fb(84)2025 2473 y Fe(BASH_TRAPSIG)8 +b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +22 b Fb(84)2025 2560 y Fe(BASH_VERSINFO)j Fc(:)13 b(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(81)2025 2492 +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(84)2025 2648 y Fe(BASH_VERSION)8 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)22 b Fb(81)2025 2581 y Fe(BASH_XTRACEFD)j +g(:)g(:)g(:)g(:)h(:)22 b Fb(85)2025 2735 y Fe(BASH_XTRACEFD)j Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 -b Fb(81)2025 2669 y Fe(BASHOPTS)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f +b Fb(85)2025 2823 y Fe(BASHOPTS)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b -Fb(79)2025 2758 y Fe(BASHPID)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g +Fb(82)2025 2911 y Fe(BASHPID)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 -b Fb(79)2025 2847 y Fe(bell-style)11 b Fc(:)k(:)e(:)g(:)g(:)g(:)h(:)f +b Fb(82)2025 2998 y Fe(bell-style)11 b Fc(:)k(:)e(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)26 b Fb(121)2025 -2935 y Fe(bind-tty-special-chars)14 b Fc(:)k(:)13 b(:)g(:)h(:)f(:)g(:)g +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)26 b Fb(126)2025 +3086 y Fe(bind-tty-special-chars)14 b Fc(:)k(:)13 b(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)29 -b Fb(121)2025 3022 y Fe(blink-matching-paren)24 b Fc(:)13 +b Fb(126)2025 3173 y Fe(blink-matching-paren)24 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)34 b Fb(122)2021 3297 y Fs(C)2025 -3417 y Fe(CDPATH)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)g(:)g(:)g(:)h(:)34 b Fb(127)2021 3426 y Fs(C)2025 +3543 y Fe(CDPATH)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b -Fb(78)2025 3506 y Fe(CHILD_MAX)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g +Fb(81)2025 3631 y Fe(CHILD_MAX)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(82)2025 -3595 y Fe(colored-completion-prefix)7 b Fc(:)18 b(:)13 +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(85)2025 +3719 y Fe(colored-completion-prefix)7 b Fc(:)18 b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 -b Fb(122)2025 3683 y Fe(colored-stats)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f +b Fb(127)2025 3806 y Fe(colored-stats)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(122)2025 3772 y Fe(COLUMNS)22 +g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(127)2025 3894 y Fe(COLUMNS)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)35 b Fb(82)2025 3860 y Fe(comment-begin)23 +g(:)g(:)h(:)f(:)g(:)35 b Fb(85)2025 3981 y Fe(comment-begin)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 -b Fb(122)2025 3949 y Fe(COMP_CWORD)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g +b Fb(127)2025 4069 y Fe(COMP_CWORD)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(82)2025 -4038 y Fe(COMP_KEY)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(85)2025 +4157 y Fe(COMP_KEY)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(82)2025 4126 +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(86)2025 4244 y Fe(COMP_LINE)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(82)2025 4215 y Fe(COMP_POINT)13 +g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(85)2025 4332 y Fe(COMP_POINT)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)27 b Fb(82)2025 4303 y Fe(COMP_TYPE)15 b Fc(:)g(:)f(:)f(:)g(:)g +(:)h(:)27 b Fb(85)2025 4419 y Fe(COMP_TYPE)15 b Fc(:)g(:)f(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 -b Fb(82)2025 4392 y Fe(COMP_WORDBREAKS)17 b Fc(:)g(:)c(:)g(:)g(:)g(:)g +b Fb(85)2025 4507 y Fe(COMP_WORDBREAKS)17 b Fc(:)g(:)c(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(82)2025 4481 y Fe(COMP_WORDS)13 +h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(86)2025 4595 y Fe(COMP_WORDS)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)27 b Fb(82)2025 4569 y Fe(completion-display-width)9 +(:)h(:)27 b Fb(86)2025 4682 y Fe(completion-display-width)9 b Fc(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)24 b Fb(122)2025 4658 y Fe(completion-ignore-case)14 +(:)h(:)f(:)g(:)24 b Fb(127)2025 4770 y Fe(completion-ignore-case)14 b Fc(:)k(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)29 b Fb(122)2025 4747 y Fe(completion-map-case)d +(:)g(:)g(:)h(:)f(:)29 b Fb(127)2025 4857 y Fe(completion-map-case)d Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(122)2025 4835 +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(127)2025 4945 y Fe(completion-prefix-display-leng)q(th)29 b Fc(:)13 -b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 b Fb(122)2025 4924 +b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 b Fb(127)2025 5033 y Fe(completion-query-items)14 b Fc(:)k(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)29 -b Fb(122)2025 5012 y Fe(COMPREPLY)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g +b Fb(127)2025 5120 y Fe(COMPREPLY)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b -Fb(83)2025 5101 y Fe(convert-meta)25 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:) +Fb(86)2025 5208 y Fe(convert-meta)25 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(123)2025 5188 +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(128)2025 5295 y Fe(COPROC)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(83)p +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(86)p eop end -%%Page: 185 191 -TeXDict begin 185 190 bop 150 -116 a Fu(App)s(endix)29 -b(D:)i(Indexes)2623 b(185)146 294 y Fs(D)150 415 y Fe(DIRSTACK)18 +%%Page: 192 198 +TeXDict begin 192 197 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(192)146 294 y Fs(D)150 414 y Fe(DIRSTACK)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)32 b Fb(83)150 502 y Fe(disable-completion)7 +(:)g(:)h(:)f(:)32 b Fb(86)150 501 y Fe(disable-completion)7 b Fc(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(123)146 -782 y Fs(E)150 903 y Fe(echo-control-characters)12 b +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(128)146 +772 y Fs(E)150 892 y Fe(echo-control-characters)12 b Fc(:)18 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)26 b Fb(123)150 991 y Fe(editing-mode)f +g(:)g(:)g(:)h(:)26 b Fb(128)150 981 y Fe(editing-mode)f Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)37 -b Fb(123)150 1080 y Fe(emacs-mode-string)10 b Fc(:)17 +b Fb(128)150 1069 y Fe(emacs-mode-string)10 b Fc(:)17 b(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)25 b Fb(123)150 1169 +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)25 b Fb(128)150 1158 y Fe(EMACS)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(83)150 -1258 y Fe(enable-active-region)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(86)150 +1246 y Fe(enable-active-region)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 -b Fb(123)150 1347 y Fe(enable-bracketed-paste)14 b Fc(:)k(:)c(:)f(:)g +b Fb(128)150 1335 y Fe(enable-bracketed-paste)14 b Fc(:)k(:)c(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 -b Fb(124)150 1436 y Fe(enable-keypad)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g +b Fb(129)150 1423 y Fe(enable-keypad)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(124)150 1525 y Fe(ENV)14 +g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(129)150 1511 y Fe(ENV)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 b Fb(83)150 -1613 y Fe(EPOCHREALTIME)d Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 b Fb(86)150 +1600 y Fe(EPOCHREALTIME)d Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)37 b Fb(83)150 1702 y Fe(EPOCHSECONDS)8 +g(:)g(:)g(:)g(:)37 b Fb(86)150 1688 y Fe(EPOCHSECONDS)8 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -22 b Fb(83)150 1791 y Fe(EUID)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g +22 b Fb(86)150 1777 y Fe(EUID)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 -b Fb(83)150 1880 y Fe(EXECIGNORE)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:) +b Fb(87)150 1865 y Fe(EXECIGNORE)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(83)150 -1967 y Fe(expand-tilde)e Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(87)150 +1953 y Fe(expand-tilde)e Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)37 b Fb(124)146 2247 y Fs(F)150 2368 +g(:)g(:)g(:)h(:)37 b Fb(129)146 2224 y Fs(F)150 2344 y Fe(FCEDIT)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20 b Fb(84)150 -2457 y Fe(FIGNORE)i Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20 b Fb(87)150 +2432 y Fe(FIGNORE)i Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(84)150 -2545 y Fe(FUNCNAME)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(87)150 +2521 y Fe(FUNCNAME)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(84)150 2633 +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(87)150 2608 y Fe(FUNCNEST)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(84)146 2901 y -Fs(G)150 3022 y Fe(GLOBIGNORE)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(87)146 2868 y +Fs(G)150 2988 y Fe(GLOBIGNORE)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(84)150 -3109 y Fe(GROUPS)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20 b -Fb(84)146 3377 y Fs(H)150 3498 y Fe(histchars)15 b Fc(:)h(:)d(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)30 -b Fb(84)150 3587 y Fe(HISTCMD)22 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 -b Fb(84)150 3676 y Fe(HISTCONTROL)10 b Fc(:)16 b(:)d(:)g(:)g(:)h(:)f(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(87)150 +3076 y Fe(GLOBSORT)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(87)150 3164 +y Fe(GROUPS)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20 b Fb(88)146 +3423 y Fs(H)150 3543 y Fe(histchars)15 b Fc(:)h(:)d(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)30 b +Fb(88)150 3632 y Fe(HISTCMD)22 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 +b Fb(88)150 3720 y Fe(HISTCONTROL)10 b Fc(:)16 b(:)d(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(85)150 -3765 y Fe(HISTFILE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(88)150 +3809 y Fe(HISTFILE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(85)150 3854 +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(88)150 3897 y Fe(HISTFILESIZE)8 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)22 b Fb(85)150 3942 y Fe(HISTIGNORE)13 +g(:)g(:)h(:)f(:)g(:)22 b Fb(89)150 3986 y Fe(HISTIGNORE)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)27 b Fb(85)150 4031 y Fe(history-preserve-point)14 +(:)g(:)27 b Fb(89)150 4074 y Fe(history-preserve-point)14 b Fc(:)k(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)29 b Fb(124)150 4120 y Fe(history-size)c +h(:)f(:)g(:)g(:)29 b Fb(129)150 4163 y Fe(history-size)c Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)37 -b Fb(124)150 4209 y Fe(HISTSIZE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g +b Fb(129)150 4251 y Fe(HISTSIZE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b -Fb(85)150 4298 y Fe(HISTTIMEFORMAT)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f +Fb(89)150 4340 y Fe(HISTTIMEFORMAT)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(85)150 4387 y Fe(HOME)11 +g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(89)150 4428 y Fe(HOME)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 b Fb(78)150 4475 +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 b Fb(81)150 4517 y Fe(horizontal-scroll-mode)14 b Fc(:)k(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fb(124)150 -4564 y Fe(HOSTFILE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fb(129)150 +4605 y Fe(HOSTFILE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(86)150 4653 +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(89)150 4693 y Fe(HOSTNAME)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(86)150 4740 y +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(89)150 4781 y Fe(HOSTTYPE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(86)2021 294 y Fs(I)2025 +g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(89)2021 294 y Fs(I)2025 420 y Fe(IFS)14 b Fc(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28 -b Fb(78)2025 510 y Fe(IGNOREEOF)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g +b Fb(81)2025 510 y Fe(IGNOREEOF)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(86)2025 +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(90)2025 600 y Fe(input-meta)11 b Fc(:)k(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)26 b Fb(124)2025 691 y Fe(INPUTRC)c +h(:)f(:)g(:)g(:)g(:)g(:)26 b Fb(130)2025 691 y Fe(INPUTRC)c Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)35 b Fb(86)2025 781 y Fe(INSIDE_EMACS)8 +g(:)g(:)h(:)f(:)g(:)35 b Fb(90)2025 781 y Fe(INSIDE_EMACS)8 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -22 b Fb(86)2025 868 y Fe(isearch-terminators)k Fc(:)13 +22 b Fb(90)2025 868 y Fe(isearch-terminators)k Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(125)2021 1167 y Fs(K)2025 +(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(130)2021 1167 y Fs(K)2025 1290 y Fe(keymap)22 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)36 b Fb(125)2021 +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)36 b Fb(130)2021 1601 y Fs(L)2025 1727 y Fe(LANG)20 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)35 -b Fb(8,)26 b(86)2025 1817 y Fe(LC_ALL)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g +b Fb(8,)26 b(90)2025 1817 y Fe(LC_ALL)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 -b Fb(86)2025 1907 y Fe(LC_COLLATE)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g +b Fb(90)2025 1907 y Fe(LC_COLLATE)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(86)2025 +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(90)2025 1998 y Fe(LC_CTYPE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(86)2025 2088 +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(90)2025 2088 y Fe(LC_MESSAGES)21 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)34 b Fb(8,)26 b(86)2025 2178 y Fe(LC_NUMERIC)13 +g(:)g(:)g(:)34 b Fb(8,)26 b(90)2025 2178 y Fe(LC_NUMERIC)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)27 b Fb(87)2025 2269 y Fe(LC_TIME)22 b Fc(:)13 +(:)h(:)27 b Fb(90)2025 2269 y Fe(LC_TIME)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)35 b Fb(87)2025 2359 y Fe(LINENO)6 b Fc(:)14 +h(:)f(:)g(:)35 b Fb(90)2025 2359 y Fe(LINENO)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)21 b Fb(87)2025 2446 y Fe(LINES)9 +g(:)g(:)g(:)g(:)g(:)21 b Fb(90)2025 2446 y Fe(LINES)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(87)2021 2746 +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(90)2021 2746 y Fs(M)2025 2872 y Fe(MACHTYPE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b -Fb(87)2025 2962 y Fe(MAIL)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g +Fb(90)2025 2962 y Fe(MAIL)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 -b Fb(78)2025 3052 y Fe(MAILCHECK)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:) +b Fb(81)2025 3052 y Fe(MAILCHECK)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(87)2025 +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(90)2025 3143 y Fe(MAILPATH)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(78)2025 3233 +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(81)2025 3233 y Fe(MAPFILE)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(87)2025 3323 +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(91)2025 3323 y Fe(mark-modified-lines)26 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 -b Fb(125)2025 3414 y Fe(mark-symlinked-directories)27 +b Fb(130)2025 3414 y Fe(mark-symlinked-directories)27 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -36 b Fb(125)2025 3504 y Fe(match-hidden-files)7 b Fc(:)17 +36 b Fb(130)2025 3504 y Fe(match-hidden-files)7 b Fc(:)17 b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(125)2025 3594 +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(131)2025 3594 y Fe(menu-complete-display-prefix)17 b Fc(:)h(:)13 b(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)31 b Fb(126)2025 3681 y Fe(meta-flag)13 +g(:)g(:)g(:)h(:)f(:)g(:)g(:)31 b Fb(131)2025 3681 y Fe(meta-flag)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)28 b Fb(124)2021 3992 y Fs(O)2025 4118 y Fe(OLDPWD)6 +(:)f(:)28 b Fb(130)2021 3992 y Fs(O)2025 4118 y Fe(OLDPWD)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(87)2025 4208 y Fe(OPTARG)6 +h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(91)2025 4208 y Fe(OPTARG)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(78)2025 4299 y Fe(OPTERR)6 +h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(81)2025 4299 y Fe(OPTERR)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(87)2025 4389 y Fe(OPTIND)6 +h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(91)2025 4389 y Fe(OPTIND)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(78)2025 4480 y Fe(OSTYPE)6 +h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(81)2025 4480 y Fe(OSTYPE)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(87)2025 4567 y Fe(output-meta)8 +h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(91)2025 4567 y Fe(output-meta)8 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -23 b Fb(126)p eop end -%%Page: 186 192 -TeXDict begin 186 191 bop 150 -116 a Fu(App)s(endix)29 -b(D:)i(Indexes)2623 b(186)146 294 y Fs(P)150 410 y Fe(page-completions) +23 b Fb(131)p eop end +%%Page: 193 199 +TeXDict begin 193 198 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(193)146 294 y Fs(P)150 410 y Fe(page-completions) 13 b Fc(:)j(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)27 b Fb(126)150 +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)27 b Fb(131)150 497 y Fe(PATH)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 -b Fb(78)150 584 y Fe(PIPESTATUS)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(81)150 584 y Fe(PIPESTATUS)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(87)150 +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(91)150 671 y Fe(POSIXLY_CORRECT)17 b Fc(:)g(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)32 b Fb(87)150 758 y Fe(PPID)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g +(:)g(:)g(:)32 b Fb(91)150 758 y Fe(PPID)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)25 b Fb(87)150 846 y Fe(PROMPT_COMMAND)e Fc(:)13 +(:)h(:)25 b Fb(91)150 846 y Fe(PROMPT_COMMAND)e Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 -b Fb(87)150 933 y Fe(PROMPT_DIRTRIM)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f +b Fb(91)150 933 y Fe(PROMPT_DIRTRIM)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(88)150 1020 y Fe(PS0)14 +g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(91)150 1020 y Fe(PS0)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 b Fb(88)150 +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 b Fb(91)150 1107 y Fe(PS1)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 -b Fb(78)150 1194 y Fe(PS2)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +b Fb(81)150 1194 y Fe(PS2)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 -b Fb(78)150 1281 y Fe(PS3)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +b Fb(81)150 1281 y Fe(PS3)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 -b Fb(88)150 1369 y Fe(PS4)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +b Fb(91)150 1369 y Fe(PS4)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 -b Fb(88)150 1456 y Fe(PWD)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +b Fb(91)150 1456 y Fe(PWD)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 -b Fb(88)146 1689 y Fs(R)150 1804 y Fe(RANDOM)6 b Fc(:)15 +b Fb(91)146 1689 y Fs(R)150 1804 y Fe(RANDOM)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)20 b Fb(88)150 1892 y Fe(READLINE_ARGUMENT)12 +g(:)g(:)g(:)h(:)f(:)20 b Fb(92)150 1892 y Fe(READLINE_ARGUMENT)12 b Fc(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(88)150 +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(92)150 1979 y Fe(READLINE_LINE)f Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)37 b Fb(88)150 2066 y Fe(READLINE_MARK)25 +g(:)g(:)g(:)g(:)37 b Fb(92)150 2066 y Fe(READLINE_MARK)25 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 -b Fb(88)150 2153 y Fe(READLINE_POINT)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f +b Fb(92)150 2153 y Fe(READLINE_POINT)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(88)150 2240 y Fe(REPLY)9 +g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(92)150 2240 y Fe(REPLY)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(88)150 2327 y +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(92)150 2327 y Fe(revert-all-at-newline)17 b Fc(:)h(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)32 -b Fb(126)146 2560 y Fs(S)150 2676 y Fe(SECONDS)22 b Fc(:)13 -b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)35 b Fb(88)150 2763 y Fe(SHELL)9 b Fc(:)14 -b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(88)150 2851 y Fe(SHELLOPTS)15 -b Fc(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)30 b Fb(89)150 2938 y Fe(SHLVL)9 b Fc(:)14 -b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(89)150 3025 y Fe(show-all-if-ambiguous) -17 b Fc(:)h(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(126)150 3112 y Fe -(show-all-if-unmodified)14 b Fc(:)k(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fb(126)150 -3199 y Fe(show-mode-in-prompt)d Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 -b Fb(126)2025 260 y Fe(skip-completed-text)26 b Fc(:)13 -b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(127)2025 347 y Fe(SRANDOM)22 -b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)35 b Fb(89)2021 673 y Fs(T)2025 803 -y Fe(TEXTDOMAIN)15 b Fc(:)g(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)30 b Fb(8)2025 895 y Fe(TEXTDOMAINDIR)7 -b Fc(:)16 b(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -23 b Fb(8)2025 986 y Fe(TIMEFORMAT)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(89)2025 -1078 y Fe(TMOUT)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +b Fb(131)146 2560 y Fs(S)150 2676 y Fe(search-ignore-case)7 +b Fc(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(131)150 +2763 y Fe(SECONDS)g Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(92)150 +2851 y Fe(SHELL)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 +b Fb(92)150 2938 y Fe(SHELLOPTS)15 b Fc(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)30 b Fb(92)150 +3025 y Fe(SHLVL)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 +b Fb(92)150 3112 y Fe(show-all-if-ambiguous)17 b Fc(:)h(:)13 +b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)32 b Fb(131)150 3199 y Fe(show-all-if-unmodified)14 +b Fc(:)k(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)29 b Fb(131)2025 260 y Fe(show-mode-in-prompt)d +Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(132)2025 351 y +Fe(skip-completed-text)26 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 +b Fb(132)2025 438 y Fe(SRANDOM)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 +b Fb(92)2021 758 y Fs(T)2025 887 y Fe(TEXTDOMAIN)15 b +Fc(:)g(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)30 b Fb(8)2025 978 y Fe(TEXTDOMAINDIR)7 b Fc(:)16 +b(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)23 +b Fb(8)2025 1069 y Fe(TIMEFORMAT)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(93)2025 +1161 y Fe(TMOUT)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 -b Fb(89)2025 1165 y Fe(TMPDIR)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(93)2025 1248 y Fe(TMPDIR)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 -b Fb(90)2021 1492 y Fs(U)2025 1617 y Fe(UID)14 b Fc(:)f(:)g(:)h(:)f(:)g +b Fb(93)2021 1567 y Fs(U)2025 1692 y Fe(UID)14 b Fc(:)f(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)28 b Fb(90)2021 1943 y Fs(V)2025 2073 +(:)g(:)h(:)f(:)28 b Fb(93)2021 2012 y Fs(V)2025 2140 y Fe(vi-cmd-mode-string)7 b Fc(:)17 b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 -b Fb(127)2025 2165 y Fe(vi-ins-mode-string)7 b Fc(:)17 +b Fb(132)2025 2232 y Fe(vi-ins-mode-string)7 b Fc(:)17 b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(127)2025 2252 +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(132)2025 2319 y Fe(visible-stats)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)35 b Fb(127)150 3845 y Fs(D.4)68 b(F)-11 b(unction)44 -b(Index)146 4330 y(A)150 4447 y Fe(abort)27 b(\(C-g\))15 +f(:)g(:)35 b Fb(132)150 3838 y Fs(D.4)68 b(F)-11 b(unction)44 +b(Index)146 4324 y(A)150 4441 y Fe(abort)27 b(\(C-g\))15 b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)30 -b Fb(141)150 4535 y Fe(accept-line)e(\(Newline)g(or)e(Return\))12 +b Fb(147)150 4529 y Fe(accept-line)e(\(Newline)g(or)e(Return\))12 b Fc(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)27 -b Fb(134)150 4622 y Fe(alias-expand-line)i(\(\))9 b Fc(:)14 +b Fb(140)150 4616 y Fe(alias-expand-line)i(\(\))9 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(143)146 4873 y Fs(B)150 -4990 y Fe(backward-char)29 b(\(C-b\))12 b Fc(:)i(:)f(:)g(:)g(:)g(:)g(:) +(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(149)146 4872 y Fs(B)150 +4989 y Fe(backward-char)29 b(\(C-b\))12 b Fc(:)i(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)26 b Fb(133)150 5077 y Fe(backward-delete-char)k(\(Rubout\))22 +(:)26 b Fb(139)150 5077 y Fe(backward-delete-char)k(\(Rubout\))22 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 -b Fb(136)150 5165 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))e +b Fb(142)150 5165 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))e Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b -Fb(137)150 5252 y Fe(backward-kill-word)30 b(\(M-DEL\))11 +Fb(143)150 5252 y Fe(backward-kill-word)30 b(\(M-DEL\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -26 b Fb(137)150 5340 y Fe(backward-word)j(\(M-b\))12 +26 b Fb(144)150 5340 y Fe(backward-word)j(\(M-b\))12 b Fc(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(133)2025 4300 +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(139)2025 4294 y Fe(beginning-of-history)k(\(M-<\))11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(134)2025 -4389 y Fe(beginning-of-line)j(\(C-a\))20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:) +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(140)2025 +4383 y Fe(beginning-of-line)j(\(C-a\))20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 -b Fb(133)2025 4477 y Fe(bracketed-paste-begin)c(\(\))16 +b Fb(139)2025 4471 y Fe(bracketed-paste-begin)c(\(\))16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)31 b Fb(136)2021 4769 y Fs(C)2025 4893 y Fe +g(:)g(:)31 b Fb(142)2021 4768 y Fs(C)2025 4891 y Fe (call-last-kbd-macro)f(\(C-x)c(e\))15 b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)30 b Fb(141)2025 4982 +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)30 b Fb(147)2025 4981 y Fe(capitalize-word)f(\(M-c\))7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 -b Fb(137)2025 5072 y Fe(character-search)29 b(\(C-]\))22 +b Fb(143)2025 5071 y Fe(character-search)29 b(\(C-]\))22 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)36 b Fb(141)2025 5161 y Fe +(:)h(:)f(:)g(:)g(:)36 b Fb(147)2025 5161 y Fe (character-search-backward)31 b(\(M-C-]\))10 b Fc(:)15 -b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)25 b Fb(141)2025 5250 +b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)25 b Fb(147)2025 5250 y Fe(clear-display)j(\(M-C-l\))7 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 -b Fb(134)2025 5340 y Fe(clear-screen)28 b(\(C-l\))14 +b Fb(140)2025 5340 y Fe(clear-screen)28 b(\(C-l\))14 b Fc(:)h(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(134)p eop +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(140)p eop end -%%Page: 187 193 -TeXDict begin 187 192 bop 150 -116 a Fu(App)s(endix)29 -b(D:)i(Indexes)2623 b(187)150 264 y Fe(complete)27 b(\(TAB\))7 +%%Page: 194 200 +TeXDict begin 194 199 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(194)150 264 y Fe(complete)27 b(\(TAB\))7 b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 -b Fb(139)150 352 y Fe(complete-command)29 b(\(M-!\))23 +b Fb(145)150 351 y Fe(complete-command)29 b(\(M-!\))23 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)36 b Fb(140)150 440 y Fe(complete-filename)29 +(:)f(:)g(:)g(:)g(:)36 b Fb(146)150 439 y Fe(complete-filename)29 b(\(M-/\))20 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(139)150 528 y Fe(complete-hostname) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(145)150 527 y Fe(complete-hostname) c(\(M-@\))20 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(140)150 616 y Fe +g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(146)150 615 y Fe (complete-into-braces)d(\(M-{\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(140)150 704 +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(146)150 702 y Fe(complete-username)j(\(M-~\))20 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 -b Fb(140)150 792 y Fe(complete-variable)c(\(M-$\))20 +b Fb(146)150 790 y Fe(complete-variable)c(\(M-$\))20 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)33 b Fb(140)150 880 y Fe(copy-backward-word)d(\(\))7 +(:)g(:)h(:)f(:)33 b Fb(146)150 878 y Fe(copy-backward-word)d(\(\))7 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(138)150 968 y Fe(copy-forward-word) +(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(144)150 966 y Fe(copy-forward-word) 29 b(\(\))9 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(138)150 -1056 y Fe(copy-region-as-kill)30 b(\(\))22 b Fc(:)13 +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(144)150 +1053 y Fe(copy-region-as-kill)30 b(\(\))22 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)36 b Fb(138)146 1320 y Fs(D)150 1438 y Fe(dabbrev-expand)29 +(:)g(:)g(:)36 b Fb(144)146 1310 y Fs(D)150 1428 y Fe(dabbrev-expand)29 b(\(\))17 b Fc(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 -b Fb(140)150 1527 y Fe(delete-char)c(\(C-d\))17 b Fc(:)d(:)f(:)g(:)h(:) +b Fb(146)150 1515 y Fe(delete-char)c(\(C-d\))17 b Fc(:)d(:)f(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)32 b Fb(136)150 1615 y Fe(delete-char-or-list)e +(:)g(:)g(:)g(:)g(:)32 b Fb(142)150 1603 y Fe(delete-char-or-list)e (\(\))22 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)36 b Fb(139)150 1703 y Fe +g(:)g(:)h(:)f(:)g(:)g(:)g(:)36 b Fb(145)150 1691 y Fe (delete-horizontal-space)31 b(\(\))11 b Fc(:)i(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(138)150 -1791 y Fe(digit-argument)j(\()p Fd(M-0)p Fe(,)e Fd(M-1)p +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(144)150 +1779 y Fe(digit-argument)j(\()p Fd(M-0)p Fe(,)e Fd(M-1)p Fe(,)f(...)g Fd(M--)p Fe(\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:) -26 b Fb(138)150 1879 y Fe(display-shell-version)k(\(C-x)d(C-v\))c +26 b Fb(144)150 1866 y Fe(display-shell-version)k(\(C-x)d(C-v\))c Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b -Fb(143)150 1958 y Fe(do-lowercase-version)30 b(\(M-A,)227 -2046 y(M-B,)c(M-)p Fd(x)p Fe(,)h(...\))10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g +Fb(149)150 1945 y Fe(do-lowercase-version)30 b(\(M-A,)227 +2033 y(M-B,)c(M-)p Fd(x)p Fe(,)h(...\))10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)25 b Fb(141)150 2134 y Fe(downcase-word)k(\(M-l\)) +g(:)g(:)g(:)g(:)g(:)25 b Fb(147)150 2120 y Fe(downcase-word)k(\(M-l\)) 12 b Fc(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(137)150 2222 +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(143)150 2208 y Fe(dump-functions)j(\(\))17 b Fc(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -32 b Fb(142)150 2310 y Fe(dump-macros)c(\(\))7 b Fc(:)14 +32 b Fb(148)150 2296 y Fe(dump-macros)c(\(\))7 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 -b Fb(142)150 2398 y Fe(dump-variables)29 b(\(\))17 b +b Fb(148)150 2384 y Fe(dump-variables)29 b(\(\))17 b Fc(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(142)150 -2485 y Fe(dynamic-complete-history)f(\(M-TAB\))13 b Fc(:)i(:)e(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(140)146 2749 y Fs(E)150 -2868 y Fe(edit-and-execute-command)k(\(C-x)c(C-e\))14 -b Fc(:)g(:)f(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(143)150 2956 +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(148)150 +2471 y Fe(dynamic-complete-history)f(\(M-TAB\))13 b Fc(:)i(:)e(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(146)146 2728 y Fs(E)150 +2845 y Fe(edit-and-execute-command)k(\(C-x)c(C-e\))14 +b Fc(:)g(:)f(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(149)150 2933 y Fe(end-kbd-macro)g(\(C-x)d(\)\))13 b Fc(:)h(:)f(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)28 -b Fb(140)150 3044 y Fd(end-of-file)g Fe(\(usually)g(C-d\))21 +b Fb(146)150 3021 y Fd(end-of-file)g Fe(\(usually)g(C-d\))21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)35 b Fb(136)150 3132 y Fe(end-of-history)29 b(\(M->\))9 +(:)g(:)35 b Fb(142)150 3109 y Fe(end-of-history)29 b(\(M->\))9 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(134)150 3220 y +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(140)150 3196 y Fe(end-of-line)k(\(C-e\))17 b Fc(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 -b Fb(133)150 3308 y Fe(exchange-point-and-mark)f(\(C-x)26 +b Fb(139)150 3284 y Fe(exchange-point-and-mark)f(\(C-x)26 b(C-x\))17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)32 -b Fb(141)146 3571 y Fs(F)150 3690 y Fe(fetch-history)d(\(\))19 -b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(136)150 -3778 y Fe(forward-backward-delete-char)e(\(\))15 b Fc(:)f(:)f(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(136)150 3867 y Fe(forward-char)e -(\(C-f\))14 b Fc(:)h(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b -Fb(133)150 3955 y Fe(forward-search-history)i(\(C-s\))24 +b Fb(147)150 3371 y Fe(execute-named-command)e(\(M-x\))8 +b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +23 b Fb(149)146 3618 y Fs(F)150 3736 y Fe(fetch-history)29 +b(\(\))19 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 +b Fb(142)150 3823 y Fe(forward-backward-delete-char)e(\(\))15 +b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(142)150 +3911 y Fe(forward-char)e(\(C-f\))14 b Fc(:)h(:)e(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)29 b Fb(139)150 3999 y Fe(forward-search-history)i(\(C-s\))24 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)38 -b Fb(134)150 4042 y Fe(forward-word)28 b(\(M-f\))14 b +b Fb(140)150 4086 y Fe(forward-word)28 b(\(M-f\))14 b Fc(:)h(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fb(133)146 4295 -y Fs(G)150 4414 y Fe(glob-complete-word)h(\(M-g\))16 +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fb(139)146 4333 +y Fs(G)150 4450 y Fe(glob-complete-word)h(\(M-g\))16 b Fc(:)e(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)31 b Fb(142)150 4502 y Fe(glob-expand-word)e(\(C-x)e(*\))c +g(:)g(:)31 b Fb(148)150 4538 y Fe(glob-expand-word)e(\(C-x)e(*\))c Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)38 b Fb(142)150 4590 y Fe(glob-list-expansions)30 +(:)g(:)g(:)38 b Fb(148)150 4625 y Fe(glob-list-expansions)30 b(\(C-x)d(g\))13 b Fc(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)27 b Fb(142)2021 294 y Fs(H)2025 422 y Fe +(:)g(:)h(:)27 b Fb(148)2021 294 y Fs(H)2025 422 y Fe (history-and-alias-expand-line)32 b(\(\))13 b Fc(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)28 b Fb(143)2025 513 y Fe(history-expand-line)i +g(:)g(:)g(:)g(:)28 b Fb(149)2025 513 y Fe(history-expand-line)i (\(M-^\))13 b Fc(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)28 b Fb(143)2025 604 y Fe(history-search-backward)j +g(:)g(:)g(:)h(:)28 b Fb(149)2025 604 y Fe(history-search-backward)j (\(\))11 b Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)26 b Fb(135)2025 695 y Fe(history-search-forward)k(\(\))13 +(:)g(:)g(:)26 b Fb(141)2025 695 y Fe(history-search-forward)k(\(\))13 b Fc(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -h(:)28 b Fb(135)2025 786 y Fe(history-substring-search-backw)q(ard)k -(\(\))20 b Fc(:)13 b(:)g(:)g(:)g(:)35 b Fb(135)2025 874 +h(:)28 b Fb(141)2025 786 y Fe(history-substring-search-backw)q(ard)k +(\(\))20 b Fc(:)13 b(:)g(:)g(:)g(:)35 b Fb(141)2025 874 y Fe(history-substring-search-forwa)q(rd)d(\(\))22 b -Fc(:)13 b(:)h(:)f(:)g(:)g(:)37 b Fb(135)2021 1200 y Fs(I)2025 +Fc(:)13 b(:)h(:)f(:)g(:)g(:)37 b Fb(141)2021 1200 y Fs(I)2025 1329 y Fe(insert-comment)29 b(\(M-#\))9 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -24 b Fb(142)2025 1420 y Fe(insert-completions)29 b(\(M-*\))16 +24 b Fb(148)2025 1420 y Fe(insert-completions)29 b(\(M-*\))16 b Fc(:)f(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)31 b Fb(139)2025 1507 y Fe(insert-last-argument)f(\(M-.)c(or)g +g(:)g(:)31 b Fb(145)2025 1507 y Fe(insert-last-argument)f(\(M-.)c(or)g (M-_\))7 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 -b Fb(143)2021 1834 y Fs(K)2025 1962 y Fe(kill-line)27 +b Fb(149)2021 1834 y Fs(K)2025 1962 y Fe(kill-line)27 b(\(C-k\))c Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 -b Fb(137)2025 2053 y Fe(kill-region)28 b(\(\))7 b Fc(:)14 +b Fb(143)2025 2053 y Fe(kill-region)28 b(\(\))7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)22 -b Fb(138)2025 2144 y Fe(kill-whole-line)29 b(\(\))14 +b Fb(144)2025 2144 y Fe(kill-whole-line)29 b(\(\))14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(137)2025 +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(143)2025 2231 y Fe(kill-word)e(\(M-d\))c Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)37 b Fb(137)2021 2548 y Fs(M)2025 2676 y +g(:)g(:)g(:)37 b Fb(144)2021 2548 y Fs(M)2025 2676 y Fe(magic-space)28 b(\(\))7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)22 b Fb(143)2025 2767 y Fe(menu-complete)28 +g(:)g(:)h(:)f(:)22 b Fb(149)2025 2767 y Fe(menu-complete)28 b(\(\))20 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34 -b Fb(139)2025 2854 y Fe(menu-complete-backward)c(\(\))13 +b Fb(145)2025 2854 y Fe(menu-complete-backward)c(\(\))13 b Fc(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -h(:)28 b Fb(139)2021 3181 y Fs(N)2025 3309 y Fe(next-history)g(\(C-n\)) +h(:)28 b Fb(145)2021 3181 y Fs(N)2025 3309 y Fe(next-history)g(\(C-n\)) 14 b Fc(:)h(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(134)2025 +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(140)2025 3401 y Fe(next-screen-line)g(\(\))12 b Fc(:)h(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -27 b Fb(134)2025 3472 y Fe(non-incremental-forward-)2102 +27 b Fb(140)2025 3472 y Fe(non-incremental-forward-)2102 3560 y(search-history)h(\(M-n\))23 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 -b Fb(135)2025 3647 y Fe(non-incremental-reverse-)2102 +b Fb(141)2025 3647 y Fe(non-incremental-reverse-)2102 3734 y(search-history)28 b(\(M-p\))23 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 -b Fb(134)2021 4070 y Fs(O)2025 4198 y Fe(operate-and-get-next)30 +b Fb(140)2021 4070 y Fs(O)2025 4198 y Fe(operate-and-get-next)30 b(\(C-o\))11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)26 b Fb(135)2025 4285 y Fe(overwrite-mode)j(\(\))17 +(:)g(:)g(:)g(:)26 b Fb(141)2025 4285 y Fe(overwrite-mode)j(\(\))17 b Fc(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(137)p +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(143)p eop end -%%Page: 188 194 -TeXDict begin 188 193 bop 150 -116 a Fu(App)s(endix)29 -b(D:)i(Indexes)2623 b(188)146 294 y Fs(P)150 411 y Fe +%%Page: 195 201 +TeXDict begin 195 200 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(195)146 294 y Fs(P)150 411 y Fe (possible-command-completions)32 b(\(C-x)26 b(!\))9 b -Fc(:)14 b(:)g(:)f(:)g(:)g(:)24 b Fb(140)150 499 y Fe +Fc(:)14 b(:)g(:)f(:)g(:)g(:)24 b Fb(146)150 499 y Fe (possible-completions)30 b(\(M-?\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(139)150 +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(145)150 586 y Fe(possible-filename-completions)32 b(\(C-x)27 -b(/\))7 b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(140)150 674 +b(/\))7 b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(146)150 674 y Fe(possible-hostname-completions)32 b(\(C-x)27 b(@\))7 -b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(140)150 762 y Fe +b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(146)150 762 y Fe (possible-username-completions)32 b(\(C-x)27 b(~\))7 -b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(140)150 849 y Fe +b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(146)150 849 y Fe (possible-variable-completions)32 b(\(C-x)27 b($\))7 -b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(140)150 937 y Fe(prefix-meta)28 +b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(146)150 937 y Fe(prefix-meta)28 b(\(ESC\))17 b Fc(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 -b Fb(141)150 1025 y Fe(previous-history)d(\(C-p\))23 +b Fb(147)150 1025 y Fe(previous-history)d(\(C-p\))23 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)36 b Fb(134)150 1112 y Fe(previous-screen-line)30 +(:)f(:)g(:)g(:)g(:)36 b Fb(140)150 1112 y Fe(previous-screen-line)30 b(\(\))19 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(133)150 1200 y Fe +(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(139)150 1200 y Fe (print-last-kbd-macro)d(\(\))19 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(141)146 +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(147)146 1454 y Fs(Q)150 1571 y Fe(quoted-insert)c(\(C-q)d(or)g(C-v\))8 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)22 b Fb(136)146 1825 y Fs(R)150 1943 y Fe(re-read-init-file)29 +(:)g(:)22 b Fb(142)146 1825 y Fs(R)150 1943 y Fe(re-read-init-file)29 b(\(C-x)e(C-r\))15 b Fc(:)f(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)30 b Fb(141)150 2030 y Fe(redraw-current-line)g(\(\))22 +(:)g(:)g(:)g(:)30 b Fb(147)150 2030 y Fe(redraw-current-line)g(\(\))22 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)36 b Fb(134)150 2118 y Fe(reverse-search-history)31 +(:)f(:)g(:)g(:)g(:)36 b Fb(140)150 2118 y Fe(reverse-search-history)31 b(\(C-r\))24 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)38 b Fb(134)150 2205 y Fe(revert-line)28 b(\(M-r\))17 +g(:)38 b Fb(140)150 2205 y Fe(revert-line)28 b(\(M-r\))17 b Fc(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(141)146 +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(147)146 2449 y Fs(S)150 2567 y Fe(self-insert)c(\(a,)e(b,)g(A,)g(1,)h(!,)f (...\))13 b Fc(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)27 -b Fb(136)150 2654 y Fe(set-mark)g(\(C-@\))7 b Fc(:)15 +b Fb(142)150 2654 y Fe(set-mark)g(\(C-@\))7 b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 -b Fb(141)150 2742 y Fe(shell-backward-kill-word)31 b(\(\))8 +b Fb(147)150 2742 y Fe(shell-backward-kill-word)31 b(\(\))8 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -23 b Fb(138)150 2830 y Fe(shell-backward-word)30 b(\(M-C-b\))8 +23 b Fb(144)150 2830 y Fe(shell-backward-word)30 b(\(M-C-b\))8 b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -23 b Fb(133)150 2917 y Fe(shell-expand-line)29 b(\(M-C-e\))13 +23 b Fb(139)150 2917 y Fe(shell-expand-line)29 b(\(M-C-e\))13 b Fc(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)28 b Fb(143)150 3005 y Fe(shell-forward-word)i(\(M-C-f\))11 +g(:)28 b Fb(149)150 3005 y Fe(shell-forward-word)i(\(M-C-f\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -26 b Fb(133)150 3093 y Fe(shell-kill-word)j(\(M-C-d\))20 +26 b Fb(139)150 3093 y Fe(shell-kill-word)j(\(M-C-d\))20 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)33 b Fb(138)150 3180 y Fe(shell-transpose-words)d +(:)g(:)h(:)f(:)33 b Fb(144)150 3180 y Fe(shell-transpose-words)d (\(M-C-t\))22 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)35 b Fb(138)2025 264 y Fe(skip-csi-sequence)29 b(\(\))9 +(:)35 b Fb(143)2025 264 y Fe(skip-csi-sequence)29 b(\(\))9 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(141)2025 361 y +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(147)2025 361 y Fe(spell-correct-word)29 b(\(C-x)e(s\))18 b Fc(:)13 b(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)33 b Fb(142)2025 +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)33 b Fb(148)2025 448 y Fe(start-kbd-macro)c(\(C-x)d(\(\))8 b Fc(:)14 b(:)f(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)23 -b Fb(140)2021 891 y Fs(T)2025 1038 y Fe(tilde-expand)28 +b Fb(146)2021 891 y Fs(T)2025 1038 y Fe(tilde-expand)28 b(\(M-&\))14 b Fc(:)h(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 -b Fb(141)2025 1135 y Fe(transpose-chars)g(\(C-t\))7 b +b Fb(147)2025 1135 y Fe(transpose-chars)g(\(C-t\))7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(136)2025 1222 y Fe(transpose-words) +(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(142)2025 1222 y Fe(transpose-words) 29 b(\(M-t\))7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(137)2021 +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(143)2021 1676 y Fs(U)2025 1823 y Fe(undo)k(\(C-_)h(or)f(C-x)g(C-u\))10 b Fc(:)k(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fb(141)2025 1920 y Fe +g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fb(147)2025 1920 y Fe (universal-argument)k(\(\))7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 -b Fb(139)2025 2017 y Fe(unix-filename-rubout)30 b(\(\))19 +b Fb(145)2025 2017 y Fe(unix-filename-rubout)30 b(\(\))19 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)34 b Fb(138)2025 2114 y Fe(unix-line-discard)29 +(:)g(:)g(:)g(:)34 b Fb(144)2025 2114 y Fe(unix-line-discard)29 b(\(C-u\))20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(137)2025 2211 y Fe +f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(143)2025 2211 y Fe (unix-word-rubout)29 b(\(C-w\))22 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 -b Fb(138)2025 2298 y Fe(upcase-word)28 b(\(M-u\))17 b +b Fb(144)2025 2298 y Fe(upcase-word)28 b(\(M-u\))17 b Fc(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(137)2021 +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(143)2021 2752 y Fs(Y)2025 2899 y Fe(yank)26 b(\(C-y\))18 b Fc(:)c(:)f(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 -b Fb(138)2025 2996 y Fe(yank-last-arg)28 b(\(M-.)f(or)f(M-_\))8 +b Fb(144)2025 2996 y Fe(yank-last-arg)28 b(\(M-.)f(or)f(M-_\))8 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)22 b Fb(135)2025 3093 y Fe(yank-nth-arg)28 b(\(M-C-y\))9 +(:)h(:)22 b Fb(141)2025 3093 y Fe(yank-nth-arg)28 b(\(M-C-y\))9 b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(135)2025 3180 +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(141)2025 3180 y Fe(yank-pop)j(\(M-y\))7 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)22 b Fb(138)150 3929 y Fs(D.5)68 b(Concept)45 -b(Index)146 4523 y(A)150 4648 y Fb(alias)27 b(expansion)22 +g(:)g(:)h(:)f(:)22 b Fb(144)150 3929 y Fs(D.5)68 b(Concept)45 +b(Index)146 4523 y(A)150 4645 y Fb(alias)27 b(expansion)22 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 -b Fb(100)150 4738 y(arithmetic)26 b(ev)l(aluation)d Fc(:)13 -b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(98)150 4828 y(arithmetic)26 -b(expansion)11 b Fc(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)26 -b Fb(34)150 4919 y(arithmetic,)h(shell)6 b Fc(:)14 b(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)20 b Fb(98)150 5006 -y(arra)n(ys)f Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(100)2021 -4523 y Fs(B)2025 4646 y Fb(bac)n(kground)13 b Fc(:)f(:)h(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)28 b Fb(113)2025 -4735 y(Bash)e(con\014guration)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)26 b Fb(158)2025 4825 y(Bash)g(installation)9 -b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)24 -b Fb(158)2025 4914 y(Bourne)i(shell)20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f +b Fb(103)150 4735 y(arithmetic)26 b(ev)l(aluation)21 +b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(101)150 4824 +y(arithmetic)26 b(expansion)11 b Fc(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +26 b Fb(35)150 4914 y(arithmetic)g(op)r(erators)18 b +Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(101)150 5003 +y(arithmetic,)27 b(shell)21 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)35 b -Fb(5)2025 5004 y(brace)26 b(expansion)9 b Fc(:)k(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)24 b Fb(24)2025 5091 y(builtin)15 -b Fc(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)36 b Fb(101)150 5090 y(arra)n(ys)19 b Fc(:)13 +b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)34 b Fb(103)2021 4523 y Fs(B)2025 4641 +y Fb(bac)n(kground)13 b Fc(:)f(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)28 b Fb(118)2025 4729 y(Bash)e(con\014guration) +11 b Fc(:)j(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(165)2025 +4817 y(Bash)g(installation)9 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(3)p eop end -%%Page: 189 195 -TeXDict begin 189 194 bop 150 -116 a Fu(App)s(endix)29 -b(D:)i(Indexes)2623 b(189)146 294 y Fs(C)150 415 y Fb(command)26 +(:)g(:)g(:)g(:)24 b Fb(165)2025 4905 y(binary)h(arithmetic)h(op)r +(erators)16 b Fc(:)f(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)31 b Fb(101)2025 4993 y(bit)n(wise)26 +b(arithmetic)h(op)r(erators)8 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)23 b Fb(101)2025 +5081 y(Bourne)j(shell)20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)35 b Fb(5)2025 5169 +y(brace)26 b(expansion)9 b Fc(:)k(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)24 b Fb(24)2025 5256 y(builtin)15 b Fc(:)e(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)30 b Fb(3)p eop end +%%Page: 196 202 +TeXDict begin 196 201 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(196)146 294 y Fs(C)150 413 y Fb(command)26 b(editing)19 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)34 -b Fb(118)150 503 y(command)26 b(execution)12 b Fc(:)h(:)g(:)g(:)g(:)g +b Fb(123)150 501 y(command)26 b(execution)12 b Fc(:)h(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)26 b Fb(42)150 592 y(command)g(expansion)c +g(:)h(:)f(:)g(:)g(:)26 b Fb(43)150 590 y(command)g(expansion)c Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)36 b Fb(42)150 -681 y(command)26 b(history)18 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)36 b Fb(43)150 +678 y(command)26 b(history)18 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)33 b Fb(152)150 770 y(command)26 b(searc)n(h)16 +g(:)g(:)g(:)33 b Fb(159)150 766 y(command)26 b(searc)n(h)16 b Fc(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 -b Fb(42)150 859 y(command)c(substitution)21 b Fc(:)13 +b Fb(43)150 855 y(command)c(substitution)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(34)150 947 y(command)26 +(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(34)150 943 y(command)26 b(timing)11 b Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)25 -b Fb(10)150 1036 y(commands,)h(comp)r(ound)c Fc(:)13 +b Fb(10)150 1031 y(commands,)h(comp)r(ound)c Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(11)150 1125 y(commands,)26 +(:)g(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(11)150 1120 y(commands,)26 b(conditional)10 b Fc(:)15 b(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)25 -b Fb(12)150 1214 y(commands,)h(grouping)15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g +b Fb(12)150 1208 y(commands,)h(grouping)15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)29 b Fb(17)150 1302 y(commands,)d(lists)10 +g(:)g(:)g(:)29 b Fb(17)150 1296 y(commands,)d(lists)10 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)24 -b Fb(10)150 1391 y(commands,)i(lo)r(oping)e Fc(:)13 b(:)g(:)g(:)g(:)h +b Fb(10)150 1385 y(commands,)i(lo)r(oping)e Fc(:)13 b(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)37 b Fb(11)150 1480 y(commands,)26 +g(:)g(:)g(:)g(:)g(:)37 b Fb(11)150 1473 y(commands,)26 b(pip)r(elines)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)30 -b Fb(10)150 1569 y(commands,)c(shell)c Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:) +b Fb(10)150 1561 y(commands,)c(shell)c Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(9)150 1657 y(commands,)26 +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(9)150 1649 y(commands,)26 b(simple)e Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 -b Fb(9)150 1746 y(commen)n(ts,)26 b(shell)13 b Fc(:)i(:)e(:)g(:)g(:)g +b Fb(9)150 1738 y(commen)n(ts,)26 b(shell)13 b Fc(:)i(:)e(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28 b Fb(9)150 -1835 y(Compatibilit)n(y)f(Lev)n(el)10 b Fc(:)j(:)g(:)g(:)g(:)g(:)h(:)f +1826 y(Compatibilit)n(y)f(Lev)n(el)10 b Fc(:)j(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)25 b Fb(110)150 1924 y(Compatibilit)n(y)i(Mo)r(de)22 +g(:)g(:)25 b Fb(114)150 1914 y(Compatibilit)n(y)i(Mo)r(de)22 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(110)150 -2013 y(completion)27 b(builtins)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(114)150 +2003 y(completion)27 b(builtins)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)36 b Fb(146)150 2101 y(con\014guration)22 b Fc(:)13 +g(:)g(:)36 b Fb(152)150 2091 y(conditional)27 b(arithmetic)f(op)r +(erator)d Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)37 b Fb(101)150 2179 y(con\014guration)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)36 -b Fb(158)150 2190 y(con)n(trol)26 b(op)r(erator)8 b Fc(:)15 +b Fb(165)150 2268 y(con)n(trol)26 b(op)r(erator)8 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 -b Fb(3)150 2277 y(copro)r(cess)18 b Fc(:)c(:)f(:)h(:)f(:)g(:)g(:)g(:)g +b Fb(3)150 2355 y(copro)r(cess)18 b Fc(:)c(:)f(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)32 b -Fb(18)146 2553 y Fs(D)150 2672 y Fb(directory)26 b(stac)n(k)9 +Fb(18)146 2621 y Fs(D)150 2739 y Fb(directory)26 b(stac)n(k)9 b Fc(:)k(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 -b Fb(102)146 2948 y Fs(E)150 3069 y Fb(editing)i(command)g(lines)17 +b Fb(105)146 3005 y Fs(E)150 3124 y Fb(editing)i(command)g(lines)17 b Fc(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(118)150 3158 y(en)n(vironmen)n(t)18 +f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(123)150 3213 y(en)n(vironmen)n(t)18 b Fc(:)12 b(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)32 b Fb(44)150 3247 y(ev)l(aluation,)26 b(arithmetic)12 -b Fc(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(98)150 3335 -y(ev)n(en)n(t)f(designators)c Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +f(:)32 b Fb(45)150 3301 y(ev)l(aluation,)26 b(arithmetic)9 +b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(101)150 3389 +y(ev)n(en)n(t)h(designators)c Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)34 b Fb(155)150 3424 y(execution)26 b(en)n(vironmen)n(t)17 +g(:)h(:)34 b Fb(162)150 3478 y(execution)26 b(en)n(vironmen)n(t)17 b Fc(:)12 b(:)h(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)31 b Fb(43)150 3513 +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)31 b Fb(44)150 3566 y(exit)25 b(status)7 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(3,)k(44)150 3602 y(expansion)9 +(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(3,)k(45)150 3654 y(expansion)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)24 b Fb(24)150 3691 y(expansion,)i(arithmetic)18 +g(:)g(:)g(:)g(:)24 b Fb(24)150 3743 y(expansion,)i(arithmetic)18 b Fc(:)c(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)32 b Fb(34)150 3779 +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)32 b Fb(35)150 3831 y(expansion,)26 b(brace)16 b Fc(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)30 b Fb(24)150 3868 y(expansion,)c(\014lename)18 +f(:)g(:)g(:)30 b Fb(24)150 3919 y(expansion,)c(\014lename)18 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)32 b Fb(35)150 -3957 y(expansion,)26 b(parameter)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)32 b Fb(36)150 +4008 y(expansion,)26 b(parameter)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)34 b Fb(26)150 4046 y(expansion,)26 b(pathname)7 +g(:)34 b Fb(26)150 4096 y(expansion,)26 b(pathname)7 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(35)150 -4134 y(expansion,)k(tilde)14 b Fc(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(36)150 +4184 y(expansion,)k(tilde)14 b Fc(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)28 b Fb(25)150 4223 y(expressions,)f(arithmetic)13 -b Fc(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)27 b Fb(98)150 4310 y(expressions,)g +h(:)f(:)g(:)g(:)g(:)28 b Fb(25)150 4272 y(expressions,)f(arithmetic)11 +b Fc(:)j(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(101)150 4360 y(expressions,)h (conditional)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(96)2021 +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(99)2021 294 y Fs(F)2025 414 y Fb(\014eld)21 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g @@ -22442,40 +23049,40 @@ g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)36 b Fb(3)2025 591 y(\014lename)26 b(expansion)11 b Fc(:)i(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)26 b Fb(35)2025 680 y(foreground)9 +g(:)g(:)h(:)f(:)g(:)g(:)26 b Fb(36)2025 680 y(foreground)9 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)24 b Fb(113)2025 767 y(functions,)i(shell)9 b +h(:)f(:)24 b Fb(118)2025 767 y(functions,)i(shell)9 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)24 b Fb(19)2021 1038 y Fs(H)2025 1158 y Fb(history)h(builtins)20 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)35 -b Fb(152)2025 1247 y(history)25 b(ev)n(en)n(ts)8 b Fc(:)13 +b Fb(159)2025 1247 y(history)25 b(ev)n(en)n(ts)8 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 -b Fb(155)2025 1335 y(history)i(expansion)14 b Fc(:)g(:)f(:)g(:)g(:)h(:) +b Fb(162)2025 1335 y(history)i(expansion)14 b Fc(:)g(:)f(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)29 b Fb(154)2025 1424 y(history)c(list)9 +(:)g(:)g(:)g(:)h(:)f(:)29 b Fb(161)2025 1424 y(history)c(list)9 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)24 b Fb(152)2025 1511 y(History)-6 b(,)25 b(ho)n(w)h(to)g(use) +g(:)g(:)24 b Fb(159)2025 1511 y(History)-6 b(,)25 b(ho)n(w)h(to)g(use) 19 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(151)2021 +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(158)2021 1782 y Fs(I)2025 1903 y Fb(iden)n(ti\014er)12 b Fc(:)g(:)h(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)27 b Fb(3)2025 1991 y(initialization)h(\014le,)e(readline)17 b Fc(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)32 b Fb(120)2025 2080 y(installation)21 +f(:)g(:)g(:)g(:)32 b Fb(125)2025 2080 y(installation)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)34 b Fb(158)2025 2168 y(in)n(teraction,)26 b(readline)7 +g(:)34 b Fb(165)2025 2168 y(in)n(teraction,)26 b(readline)7 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(117)2025 +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(122)2025 2257 y(in)n(teractiv)n(e)k(shell)20 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)34 b Fb(93,)27 b(94)2025 2346 y(in)n(ternationalization)22 +h(:)f(:)g(:)34 b Fb(96,)27 b(97)2025 2346 y(in)n(ternationalization)22 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(7)2025 2433 y(in)n(ternationalized)27 b(scripts)13 @@ -22486,29 +23093,29 @@ Fs(J)2025 2824 y Fb(job)23 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)38 b Fb(3)2025 2911 y(job)26 b(con)n(trol)17 b Fc(:)d(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)31 b Fb(3,)c(113)2021 +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)31 b Fb(3,)c(118)2021 3183 y Fs(K)2025 3303 y Fb(kill)f(ring)7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)22 -b Fb(119)2025 3390 y(killing)k(text)6 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g +b Fb(124)2025 3390 y(killing)k(text)6 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b -Fb(119)2021 3661 y Fs(L)2025 3782 y Fb(lo)r(calization)i +Fb(124)2021 3661 y Fs(L)2025 3782 y Fb(lo)r(calization)i Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)35 b Fb(7)2025 3869 y(login)26 b(shell)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)21 b Fb(93)2021 4140 y Fs(M)2025 4260 +g(:)g(:)g(:)g(:)21 b Fb(96)2021 4140 y Fs(M)2025 4260 y Fb(matc)n(hing,)26 b(pattern)9 b Fc(:)k(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)24 b Fb(36)2025 4347 y(metac)n(haracter)7 +h(:)f(:)g(:)g(:)24 b Fb(37)2025 4347 y(metac)n(haracter)7 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)22 b Fb(3)p eop end -%%Page: 190 196 -TeXDict begin 190 195 bop 150 -116 a Fu(App)s(endix)29 -b(D:)i(Indexes)2623 b(190)146 294 y Fs(N)150 410 y Fb(name)19 +%%Page: 197 203 +TeXDict begin 197 202 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(197)146 294 y Fs(N)150 410 y Fb(name)19 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(3)150 497 @@ -22517,124 +23124,129 @@ y(nativ)n(e)25 b(languages)c Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g h(:)f(:)g(:)g(:)g(:)34 b Fb(7)150 584 y(notation,)27 b(readline)13 b Fc(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)27 -b Fb(118)146 826 y Fs(O)150 942 y Fb(op)r(erator,)g(shell)c +b Fb(123)146 827 y Fs(O)150 943 y Fb(op)r(erator,)g(shell)c Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -37 b Fb(3)146 1184 y Fs(P)150 1300 y Fb(parameter)26 +37 b Fb(3)146 1186 y Fs(P)150 1302 y Fb(parameter)26 b(expansion)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)28 -b Fb(26)150 1388 y(parameters)c Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g +b Fb(26)150 1389 y(parameters)c Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)37 b Fb(21)150 -1475 y(parameters,)27 b(p)r(ositional)7 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g +1476 y(parameters,)27 b(p)r(ositional)7 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)21 b Fb(23)150 1562 y(parameters,)27 b(sp)r(ecial)7 +f(:)g(:)21 b Fb(23)150 1563 y(parameters,)27 b(sp)r(ecial)7 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)21 -b Fb(23)150 1649 y(pathname)k(expansion)18 b Fc(:)c(:)f(:)g(:)g(:)g(:)g +b Fb(23)150 1650 y(pathname)k(expansion)18 b Fc(:)c(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)32 b Fb(35)150 1736 y(pattern)25 b(matc)n(hing)c +h(:)f(:)g(:)32 b Fb(36)150 1738 y(pattern)25 b(matc)n(hing)c Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)34 -b Fb(36)150 1824 y(pip)r(eline)10 b Fc(:)j(:)g(:)g(:)h(:)f(:)g(:)g(:)g +b Fb(37)150 1825 y(pip)r(eline)10 b Fc(:)j(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 -b Fb(10)150 1911 y(POSIX)e Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +b Fb(10)150 1912 y(POSIX)e Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 -b Fb(3)150 1998 y(POSIX)25 b(Mo)r(de)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(106)150 2085 -y(pro)r(cess)e(group)15 b Fc(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +b Fb(3)150 1999 y(POSIX)25 b(description)10 b Fc(:)j(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)30 b Fb(3)150 2172 y(pro)r(cess)d(group)e -(ID)11 b Fc(:)i(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)26 -b Fb(3)150 2259 y(pro)r(cess)h(substitution)11 b Fc(:)h(:)i(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)25 b Fb(109)150 2086 y(POSIX)g(Mo)r(de)14 +b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 +b Fb(110)150 2174 y(pro)r(cess)e(group)15 b Fc(:)e(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)25 b Fb(34)150 2347 y(programmable)i(completion)8 -b Fc(:)14 b(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)23 b Fb(143)150 2434 y(prompting)15 -b Fc(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)30 b Fb(104)146 2676 y Fs(Q)150 2792 y Fb(quoting)16 -b Fc(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)31 b Fb(6)150 2879 y(quoting,)26 -b(ANSI)18 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)34 b Fb(6)146 3121 y Fs(R)150 3237 y Fb(Readline,)26 -b(ho)n(w)g(to)g(use)11 b Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 -b Fb(116)150 3325 y(redirection)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)27 b Fb(38)150 -3412 y(reserv)n(ed)f(w)n(ord)13 b Fc(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28 b Fb(3)150 3499 -y(reserv)n(ed)e(w)n(ords)15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)30 b Fb(9)150 3586 y(restricted)c(shell)12 -b Fc(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)27 -b Fb(105)150 3673 y(return)e(status)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)g +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)30 b Fb(3)150 +2261 y(pro)r(cess)d(group)e(ID)11 b Fc(:)i(:)g(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(3)150 2348 y(pro)r(cess)h(substitution) +11 b Fc(:)h(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)25 b Fb(35)150 +2435 y(programmable)i(completion)8 b Fc(:)14 b(:)g(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)23 +b Fb(150)150 2522 y(prompting)15 b Fc(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)30 b Fb(107)146 +2765 y Fs(Q)150 2881 y Fb(quoting)16 b Fc(:)d(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)31 +b Fb(6)150 2968 y(quoting,)26 b(ANSI)18 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fb(4)2021 -294 y Fs(S)2025 427 y Fb(shell)h(arithmetic)17 b Fc(:)d(:)f(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)31 b Fb(98)2025 520 -y(shell)26 b(function)18 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(19)2025 613 y(shell)26 -b(script)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(46)2025 706 y(shell)h(v)l(ariable)7 -b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)22 b Fb(21)2025 798 y(shell,)k(in)n(teractiv)n(e)21 -b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)34 -b Fb(94)2025 891 y(signal)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 b Fb(6)146 +3211 y Fs(R)150 3327 y Fb(Readline,)26 b(ho)n(w)g(to)g(use)11 +b Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(121)150 3414 +y(redirection)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)28 -b Fb(4)2025 984 y(signal)f(handling)6 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)21 b Fb(45)2025 1077 -y(sp)r(ecial)27 b(builtin)16 b Fc(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)31 b Fb(4,)26 b(77)2025 1170 y(startup)f(\014les)10 -b Fc(:)k(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)25 b Fb(93)2025 1262 y(string)h(translations)8 -b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 -b Fb(7)2025 1350 y(susp)r(ending)i(jobs)10 b Fc(:)k(:)f(:)g(:)h(:)f(:)g +g(:)g(:)h(:)f(:)g(:)g(:)g(:)27 b Fb(39)150 3501 y(reserv)n(ed)f(w)n +(ord)13 b Fc(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)28 b Fb(3)150 3589 y(reserv)n(ed)e(w)n(ords)15 +b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)30 +b Fb(9)150 3676 y(restricted)c(shell)12 b Fc(:)i(:)f(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)27 b Fb(109)150 3763 y(return)e(status) +10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)25 b Fb(4)2021 294 y Fs(S)2025 418 y Fb(shell)h(arithmetic)15 +b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)30 +b Fb(101)2025 508 y(shell)c(function)18 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(19)2025 +597 y(shell)26 b(script)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fb(113)2021 1710 y Fs(T)2025 -1843 y Fb(tilde)h(expansion)7 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(47)2025 687 +y(shell)h(v)l(ariable)7 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(21)2025 777 y(shell,)k(in)n +(teractiv)n(e)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)34 b Fb(97)2025 867 y(signal)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)28 b Fb(4)2025 956 y(signal)f(handling)6 b Fc(:)13 +b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)21 +b Fb(46)2025 1046 y(sp)r(ecial)27 b(builtin)16 b Fc(:)d(:)g(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)22 b Fb(25)2025 1936 y(tok)n(en)17 -b Fc(:)12 b(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(4,)26 b(80)2025 +1136 y(startup)f(\014les)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(96)2025 1226 +y(string)h(translations)8 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)32 b Fb(4)2025 2023 -y(translation,)27 b(nativ)n(e)e(languages)c Fc(:)13 b(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)34 -b Fb(7)2021 2384 y Fs(V)2025 2517 y Fb(v)l(ariable,)26 -b(shell)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +f(:)g(:)g(:)g(:)23 b Fb(7)2025 1313 y(susp)r(ending)i(jobs)10 +b Fc(:)k(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 +b Fb(118)2021 1610 y Fs(T)2025 1734 y Fb(tilde)h(expansion)7 +b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)22 +b Fb(25)2025 1823 y(tok)n(en)17 b Fc(:)12 b(:)i(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)32 +b Fb(4)2025 1911 y(translation,)27 b(nativ)n(e)e(languages)c +Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)34 b Fb(7)2021 2207 y Fs(U)2025 2329 y +Fb(unary)25 b(arithmetic)h(op)r(erators)10 b Fc(:)15 +b(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)25 b Fb(101)2021 2626 y Fs(V)2025 2750 y Fb(v)l(ariable,)h +(shell)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)28 b Fb(21)2025 2604 y(v)l(ariables,)f(readline)7 +g(:)g(:)28 b Fb(21)2025 2837 y(v)l(ariables,)f(readline)7 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 -b Fb(121)2021 2965 y Fs(W)2025 3098 y Fb(w)n(ord)10 b +b Fb(126)2021 3134 y Fs(W)2025 3258 y Fb(w)n(ord)10 b Fc(:)j(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(4)2025 3185 +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(4)2025 3345 y(w)n(ord)h(splitting)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(35)2021 3545 y Fs(Y)2025 -3673 y Fb(y)n(anking)h(text)13 b Fc(:)f(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g +g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(36)2021 3642 y Fs(Y)2025 +3763 y Fb(y)n(anking)h(text)13 b Fc(:)f(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)28 b Fb(119)p eop end +g(:)h(:)f(:)g(:)g(:)g(:)g(:)28 b Fb(124)p eop end %%Trailer userdict /end-hook known{end-hook}if diff --git a/doc/bashref.texi b/doc/bashref.texi index b0dc2fad1..f3b8e7f6a 100644 --- a/doc/bashref.texi +++ b/doc/bashref.texi @@ -14,7 +14,7 @@ This is Edition @value{EDITION}, last updated @value{UPDATED}, of @cite{The GNU Bash Reference Manual}, for @code{Bash}, Version @value{VERSION}. -Copyright @copyright{} 1988--2022 Free Software Foundation, Inc. +Copyright @copyright{} 1988--2023 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -475,8 +475,8 @@ when in double quotes (@pxref{Shell Parameter Expansion}). @subsubsection ANSI-C Quoting @cindex quoting, ANSI -Character sequences of the form $'@var{string}' are treated as a special -kind of single quotes. +Character sequences of the form @code{$'@var{string}'} are treated as +a special kind of single quotes. The sequence expands to @var{string}, with backslash-escaped characters in @var{string} replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: @@ -547,7 +547,7 @@ and @code{TEXTDOMAIN} shell variables, as explained below. See the gettext documentation for additional details not covered here. If the current locale is @code{C} or @code{POSIX}, if there are no translations available, -of if the string is not translated, +or if the string is not translated, the dollar sign is ignored. Since this is a form of double quoting, the string remains double-quoted by default, whether or not it is translated and replaced. @@ -795,8 +795,7 @@ shell builtins, shell functions, and pipelines. An external When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}), @code{time} may be followed by a newline. In this case, the shell displays the total user and system time consumed by the shell and its children. -The @env{TIMEFORMAT} variable may be used to specify the format of -the time information. +The @env{TIMEFORMAT} variable specifies the format of the time information. If the pipeline is not executed asynchronously (@pxref{Lists}), the shell waits for all commands in the pipeline to complete. @@ -1636,9 +1635,9 @@ are a result of the sequence of function calls that caused execution to reach the current function. The value of a variable that a function sees depends on its value within its caller, if any, whether that caller is -the "global" scope or another shell function. +the global scope or another shell function. This is also the value that a local variable -declaration "shadows", and the value that is restored when the function +declaration shadows, and the value that is restored when the function returns. For example, if a variable @env{var} is declared as local in function @@ -1760,7 +1759,7 @@ When @samp{+=} is applied to an array variable using compound assignment (@pxref{Arrays}), the variable's value is not unset (as it is when using @samp{=}), and new values are appended to the array beginning at one greater than the array's -maximum index (for indexed arrays), or added as additional key-value pairs +maximum index (for indexed arrays), or added as additional key-value pairs in an associative array. When applied to a string-valued variable, @var{value} is expanded and appended to the variable's value. @@ -1912,7 +1911,8 @@ to the filename used to invoke Bash, as given by argument zero. @cindex expansion Expansion is performed on the command line after it has been split into -@code{token}s. There are seven kinds of expansion performed: +@code{token}s. +Bash performs these expansions: @itemize @bullet @item brace expansion @@ -1922,6 +1922,7 @@ Expansion is performed on the command line after it has been split into @item arithmetic expansion @item word splitting @item filename expansion +@item quote removal @end itemize @menu @@ -1944,7 +1945,8 @@ brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; -and filename expansion. +filename expansion; +and quote removal. On systems that can support it, there is an additional expansion available: @dfn{process substitution}. @@ -1952,9 +1954,11 @@ This is performed at the same time as tilde, parameter, variable, and arithmetic expansion and command substitution. -After these expansions are performed, quote characters present in the -original word are removed unless they have been quoted themselves -(@dfn{quote removal}). +@dfn{Quote removal} is always performed last. +It removes quote characters present in the original word, +not ones resulting from one of the other expansions, +unless they have been quoted themselves. +@xref{Quote Removal} for more details. Only brace expansion, word splitting, and filename expansion can increase the number of words of the expansion; other expansions @@ -1964,9 +1968,6 @@ The only exceptions to this are the expansions of @code{"$@{@var{name}[@@]@}"} and @code{$@{@var{name}[*]@}} (@pxref{Arrays}). -After all expansions, @code{quote removal} (@pxref{Quote Removal}) -is performed. - @node Brace Expansion @subsection Brace Expansion @cindex brace expansion @@ -1998,8 +1999,6 @@ where @var{x} and @var{y} are either integers or letters, and @var{incr}, an optional increment, is an integer. When integers are supplied, the expression expands to each number between @var{x} and @var{y}, inclusive. -Supplied integers may be prefixed with @samp{0} to force each term to have the -same width. When either @var{x} or @var{y} begins with a zero, the shell attempts to force all generated terms to contain the same number of digits, zero-padding where necessary. @@ -2163,7 +2162,7 @@ introduce indirection. In each of the cases below, @var{word} is subject to tilde expansion, parameter expansion, command substitution, and arithmetic expansion. -When not performing substring expansion, using the form described +When not performing substring expansion, using the forms described below (e.g., @samp{:-}), Bash tests for a parameter that is unset or null. Omitting the colon results in a test only for a parameter that is unset. Put another way, if the colon is included, @@ -2181,6 +2180,14 @@ If @var{parameter} is unset or null, the expansion of $ v=123 $ echo $@{v-unset@} 123 +$ echo $@{v:-unset-or-null@} +123 +$ unset v +$ echo $@{v-unset@} +unset +$ v= +$ echo $@{v:-unset-or-null@} +unset-or-null @end example @item $@{@var{parameter}:=@var{word}@} @@ -2309,7 +2316,7 @@ If @var{parameter} is @samp{@@} or @samp{*}, the result is @var{length} positional parameters beginning at @var{offset}. A negative @var{offset} is taken relative to one greater than the greatest positional parameter, so an offset of -1 evaluates to the last positional -parameter. +parameter (or 0 if there are no positional parameters). It is an expansion error if @var{length} evaluates to a number less than zero. The following examples illustrate substring expansion using positional @@ -2602,6 +2609,7 @@ Produces a possibly-quoted version of the value of @var{parameter}, except that it prints the values of indexed and associative arrays as a sequence of quoted key-value pairs (@pxref{Arrays}). +The keys and values are quoted in a format that can be reused as input. @item a The expansion is a string consisting of flag values representing @var{parameter}'s attributes. @@ -2628,26 +2636,27 @@ expansion as described below. Command substitution allows the output of a command to replace the command itself. -Command substitution occurs when a command is enclosed as follows: +The standard form of command substitution occurs when a command is +enclosed as follows: @example $(@var{command}) @end example @noindent -or +or (deprecated) @example -`@var{command}` +`@var{command}`. @end example @noindent -Bash performs the expansion by executing @var{command} in a subshell environment -and replacing the command substitution with the standard output of the -command, with any trailing newlines deleted. +Bash performs command substitution by executing @var{command} in a subshell +environment and replacing the command substitution with the standard +output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting. The command substitution @code{$(cat @var{file})} can be replaced by the equivalent but faster @code{$(< @var{file})}. -When the old-style backquote form of substitution is used, +With the old-style backquote form of substitution, backslash retains its literal meaning except when followed by @samp{$}, @samp{`}, or @samp{\}. The first backquote not preceded by a backslash terminates the @@ -2655,11 +2664,73 @@ command substitution. When using the @code{$(@var{command})} form, all characters between the parentheses make up the command; none are treated specially. +There is an alternate form of command substitution: + +@example +$@{@var{c} @var{command}; @} +@end example + +@noindent +which executes @var{command} in the current execution environment +and captures its output, again with trailing newlines removed. + +The character @var{c} following the open brace must be a space, tab, +newline, or @samp{|}, and the close brace must be in a position +where a reserved word may appear (i.e., preceded by a command terminator +such as semicolon). +Bash allows the close brace to be joined to the remaining characters in +the word without being followed by a shell metacharacter as a reserved +word would usually require. + +Any side effects of @var{command} take effect immediately +in the current execution environment and persist in the current +environment after the command completes (e.g., the @code{exit} builtin +will exit the shell). + +This type of command substitution superficially resembles executing an +unnamed shell function: local variables are created as when a shell +function is executing, and the @code{return} builtin forces +@var{command} to complete; +however, the rest of the execution environment, +including the positional parameters, is shared with the caller. + +If the first character following the open brace +is a @samp{|}, the construct expands to the +value of the @code{REPLY} shell variable after @var{command} executes, +without removing any trailing newlines, +and the standard output of @var{command} remains the same as in the +calling shell. +Bash creates @code{REPLY} as an initially-unset local variable when +@var{command} executes, and restores @code{REPLY} to the value it had +before the command substitution after @var{command} completes, +as with any local variable. + +For example, this construct expands to @samp{12345}, and leaves the +shell variable @code{X} unchanged in the current execution environment: + +@example + +$@{ local X=12345 ; echo $X; @} +@end example + +@noindent +(not declaring @code{X} as local would modify its value in the current +environment, as with normal shell function execution), +while this construct does not require any output to expand to +@samp{12345}: + +@example +$@{| REPLY=12345; @} +@end example + +@noindent +and restores @code{REPLY} to the value it had before the command substitution. + Command substitutions may be nested. To nest when using the backquoted form, escape the inner backquotes with backslashes. -If the substitution appears within double quotes, word splitting and -filename expansion are not performed on the results. +If the substitution appears within double quotes, Bash does not perform +word splitting and filename expansion on the results. @node Arithmetic Expansion @subsection Arithmetic Expansion @@ -2733,9 +2804,10 @@ word splitting. The shell treats each character of @env{$IFS} as a delimiter, and splits the results of the other expansions into words using these characters as field terminators. + If @env{IFS} is unset, or its value is exactly @code{<space><tab><newline>}, the default, then sequences of -@code{ <space>}, @code{<tab>}, and @code{<newline>} +@code{space}, @code{tab}, and @code{newline} at the beginning and end of the results of the previous expansions are ignored, and any sequence of @env{IFS} characters not at the beginning or end serves to delimit words. @@ -2748,7 +2820,10 @@ Any character in @env{IFS} that is not @env{IFS} whitespace, along with any adjacent @env{IFS} whitespace characters, delimits a field. A sequence of @env{IFS} whitespace characters is also treated as a delimiter. + If the value of @env{IFS} is null, no word splitting occurs. +If @env{IFS} is unset, word splitting behaves as if it contained +the default value @code{<space><tab><newline>}. Explicit null arguments (@code{""} or @code{''}) are retained and passed to commands as empty strings. @@ -2800,7 +2875,7 @@ In order to match the filenames @samp{.} and @samp{..}, the pattern must begin with @samp{.} (for example, @samp{.?}), even if @code{dotglob} is set. If the @code{globskipdots} shell option is enabled, the filenames -@samp{.} and @samp{..} are never matched, even if the pattern begins +@samp{.} and @samp{..} never match, even if the pattern begins with a @samp{.}. When not matching filenames, the @samp{.} character is not treated specially. @@ -2834,6 +2909,10 @@ To get the old behavior of ignoring filenames beginning with a The @code{dotglob} option is disabled when @env{GLOBIGNORE} is unset. +After the pattern is expanded and matched against filenames, the value of the +@env{GLOBSORT} variable controls how the results are sorted, as described +below (@pxref{Bash Variables}). + @node Pattern Matching @subsubsection Pattern Matching @cindex pattern matching @@ -2860,8 +2939,8 @@ directories and subdirectories. @item ? Matches any single character. @item [@dots{}] -Matches any one of the enclosed characters. A pair of characters -separated by a hyphen denotes a @var{range expression}; +Matches any one of the enclosed characters. +A pair of characters separated by a hyphen denotes a @var{range expression}; any character that falls between those two characters, inclusive, using the current locale's collating sequence and character set, is matched. If the first character following the @@ -3026,7 +3105,7 @@ before the standard output was redirected to @var{dirlist}. Bash handles several filenames specially when they are used in redirections, as described in the following table. If the operating system on which Bash is running provides these -special files, bash will use them; otherwise it will emulate them +special files, Bash will use them; otherwise it will emulate them internally with the behavior described below. @table @code @@ -3152,9 +3231,9 @@ This is semantically equivalent to @subsection Here Documents This type of redirection instructs the shell to read input from the -current source until a line containing only @var{word} -(with no trailing blanks) is seen. All of -the lines read up to that point are then used as the standard +current source until it reads a line containing only @var{delimiter} +(with no trailing blanks). +All of the lines read up to that point are then used as the standard input (or file descriptor @var{n} if @var{n} is specified) for a command. The format of here-documents is: @@ -3166,10 +3245,13 @@ The format of here-documents is: No parameter and variable expansion, command substitution, arithmetic expansion, or filename expansion is performed on -@var{word}. If any part of @var{word} is quoted, the +@var{word}. + +If any part of @var{word} is quoted, the @var{delimiter} is the result of quote removal on @var{word}, and the lines in the here-document are not expanded. If @var{word} is unquoted, +@var{delimiter} is @var{word} itself, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion, the character sequence @code{\newline} is ignored, and @samp{\} @@ -3330,8 +3412,8 @@ were no command substitutions, the command exits with a status of zero. @cindex command search After a command has been split into words, if it results in a -simple command and an optional list of arguments, the following -actions are taken. +simple command and an optional list of arguments, the shell performs +the following actions. @enumerate @item @@ -3470,9 +3552,14 @@ commands that are invoked as part of a pipeline are also executed in a subshell environment. Changes made to the subshell environment cannot affect the shell's execution environment. -Subshells spawned to execute command substitutions inherit the value of -the @option{-e} option from the parent shell. When not in @sc{posix} mode, -Bash clears the @option{-e} option in such subshells. +When the shell is in @sc{posix} mode, +subshells spawned to execute command substitutions inherit the value of +the @option{-e} option from the parent shell. +When not in @sc{posix} mode, +Bash clears the @option{-e} option in such subshells +See the description of the @code{inherit_errexit} shell option +(@pxref{Bash Builtins}) for how to control this behavior when not +in @sc{posix} mode. If a command is followed by a @samp{&} and job control is not active, the default standard input for the command is the empty file @file{/dev/null}. @@ -3809,15 +3896,15 @@ The return status is zero unless @var{n} is not greater than or equal to 1. @item cd @btindex cd @example -cd [-L|[-P [-e]] [-@@] [@var{directory}] +cd [-L|[-P [-e]]] [-@@] [@var{directory}] @end example Change the current working directory to @var{directory}. If @var{directory} is not supplied, the value of the @env{HOME} shell variable is used. If the shell variable -@env{CDPATH} exists, it is used as a search path: -each directory name in @env{CDPATH} is searched for +@env{CDPATH} exists, @code{cd} uses it as a search path: +@code{cd} searches each directory name in @env{CDPATH} for @var{directory}, with alternative directory names in @env{CDPATH} separated by a colon (@samp{:}). If @var{directory} begins with a slash, @env{CDPATH} is not used. @@ -3938,6 +4025,14 @@ The return status is zero unless an invalid option is supplied, one of the names is not a valid shell variable name, or @option{-f} is supplied with a name that is not a shell function. +@item false +@btindex false +@example +false +@end example + +Does nothing, returns a non-zero status. + @item getopts @btindex getopts @example @@ -3981,17 +4076,19 @@ If the variable @env{OPTERR} is set to 0, no error messages will be displayed, even if the first character of @code{optstring} is not a colon. -If an invalid option is seen, -@code{getopts} places @samp{?} into @var{name} and, if not silent, +If @code{getopts} detects an invalid option, it +places @samp{?} into @var{name} and, if not silent, prints an error message and unsets @env{OPTARG}. -If @code{getopts} is silent, the option character found is placed in -@env{OPTARG} and no diagnostic message is printed. +If @code{getopts} is silent, it assigns the option character found +to @env{OPTARG} and does not print a diagnostic message. -If a required argument is not found, and @code{getopts} -is not silent, a question mark (@samp{?}) is placed in @var{name}, -@code{OPTARG} is unset, and a diagnostic message is printed. -If @code{getopts} is silent, then a colon (@samp{:}) is placed in -@var{name} and @env{OPTARG} is set to the option character found. +If a required argument is not found, +and @code{getopts} is not silent, +it sets the value of @var{name} to a question mark (@samp{?}), +unsets @code{OPTARG}, and prints a diagnostic message. +If @code{getopts} is silent, +it sets the value of @var{name} to a colon (@samp{:}), +and sets @env{OPTARG} to the option character found. @item hash @btindex hash @@ -3999,15 +4096,16 @@ If @code{getopts} is silent, then a colon (@samp{:}) is placed in hash [-r] [-p @var{filename}] [-dt] [@var{name}] @end example -Each time @code{hash} is invoked, it remembers the full pathnames of the +Each time @code{hash} is invoked, it remembers the full filenames of the commands specified as @var{name} arguments, so they need not be searched for on subsequent invocations. The commands are found by searching through the directories listed in @env{$PATH}. -Any previously-remembered pathname is discarded. +Any previously-remembered filename is discarded. The @option{-p} option inhibits the path search, and @var{filename} is used as the location of @var{name}. The @option{-r} option causes the shell to forget all remembered locations. +Assigning to the @env{PATH} variable also clears all hashed filenames. The @option{-d} option causes the shell to forget the remembered location of each @var{name}. If the @option{-t} option is supplied, the full pathname to which each @@ -4018,6 +4116,11 @@ The @option{-l} option causes output to be displayed in a format that may be reused as input. If no arguments are given, or if only @option{-l} is supplied, information about remembered commands is printed. +The @option{-t}, @option{-d}, and @option{-p} options (the options that +act on the @var{name} arguments) are mutually exclusive. +Only one will be active. +If more than one is supplied, @option{-t} has higher priority than +@option{-p}, and both are higher priority than @option{-d}. The return status is zero unless a @var{name} is not found or an invalid option is supplied. @@ -4209,8 +4312,32 @@ The expression is parsed and evaluated according to precedence using the rules listed above. @end table -When used with @code{test} or @samp{[}, the @samp{<} and @samp{>} -operators sort lexicographically using ASCII ordering. +If the shell is in @sc{posix} mode, or if the expression is part +of the @code{[[} command, +the @samp{<} and @samp{>} operators sort using the current locale. +If the shell is not in @sc{posix} mode, +the @code{test} and @samp{[} commands +sort lexicographically using ASCII ordering. + +The historical operator-precedence parsing with 4 or more arguments can +lead to ambiguities when it encounters strings that look like primaries. +The @sc{posix} standard has deprecated the @option{-a} and @option{-o} +primaries and enclosing expressions within parentheses. +Scripts should no longer use them. +It's much more reliable to restrict test invocations to a single primary, +and to replace uses of @option{-a} and @option{-o} with the shell's +@code{&&} and @code{||} list operators. For example, use + +@example +test -n string1 && test -n string2 +@end example + +@noindent +instead of + +@example +test -n string1 -a -n string2 +@end example @item times @btindex times @@ -4224,41 +4351,54 @@ The return status is zero. @item trap @btindex trap @example -trap [-lp] [@var{arg}] [@var{sigspec} @dots{}] +trap [-Plp] [@var{action}] [@var{sigspec} @dots{}] @end example -The commands in @var{arg} are to be read and executed when the -shell receives signal @var{sigspec}. If @var{arg} is absent (and +The @var{action} is a command that is read and executed when the +shell receives signal @var{sigspec}. If @var{action} is absent (and there is a single @var{sigspec}) or equal to @samp{-}, each specified signal's disposition is reset to the value it had when the shell was started. -If @var{arg} is the null string, then the signal specified by +If @var{action} is the null string, then the signal specified by each @var{sigspec} is ignored by the shell and commands it invokes. -If @var{arg} is not present and @option{-p} has been supplied, -the shell displays the trap commands associated with each @var{sigspec}. -If no arguments are supplied, or -only @option{-p} is given, @code{trap} prints the list of commands -associated with each signal number in a form that may be reused as -shell input. -The @option{-l} option causes the shell to print a list of signal names + +If no arguments are supplied, @code{trap} prints the actions +associated with each trapped signal +as a set of @code{trap} commands that can be reused as shell input to +restore the current signal dispositions. +If @var{action} is not present and @option{-p} has been supplied, +@code{trap} displays the trap commands associated with each @var{sigspec}, +or, if no @var{sigspec}s are supplied, for all trapped signals, +as a set of @code{trap} commands that can be reused as shell input to +restore the current signal dispositions. +The @option{-P} option behaves similarly, but displays only the actions +associated with each @var{sigspec} argument. +@option{-P} requires at least one @var{sigspec} argument. +The @option{-P} or @option{-p} options to @code{trap} may be +used in a subshell environment (e.g., command substitution) and, +as long as they are used before @code{trap} is used to change a +signal's handling, will display the state of its parent's traps. + +The @option{-l} option causes @code{trap} to print a list of signal names and their corresponding numbers. Each @var{sigspec} is either a signal name or a signal number. Signal names are case insensitive and the @code{SIG} prefix is optional. If a @var{sigspec} -is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits. -If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed +is @code{0} or @code{EXIT}, @var{action} is executed when the shell exits. +If a @var{sigspec} is @code{DEBUG}, @var{action} is executed before every simple command, @code{for} command, @code{case} command, -@code{select} command, every arithmetic @code{for} command, and before -the first command executes in a shell function. +@code{select} command, (( arithmetic command, [[ conditional command, +arithmetic @code{for} command, +and before the first command executes in a shell function. Refer to the description of the @code{extdebug} option to the @code{shopt} builtin (@pxref{The Shopt Builtin}) for details of its effect on the @code{DEBUG} trap. -If a @var{sigspec} is @code{RETURN}, the command @var{arg} is executed +If a @var{sigspec} is @code{RETURN}, @var{action} is executed each time a shell function or a script executed with the @code{.} or @code{source} builtins finishes executing. -If a @var{sigspec} is @code{ERR}, the command @var{arg} +If a @var{sigspec} is @code{ERR}, @var{action} is executed whenever a pipeline (which may consist of a single simple command), a list, or a compound command returns a @@ -4275,13 +4415,23 @@ status is being inverted using @code{!}. These are the same conditions obeyed by the @code{errexit} (@option{-e}) option. -Signals ignored upon entry to the shell cannot be trapped or reset. +Signals ignored upon entry to a non-interactive shell cannot be trapped or +reset. +Interactive shells permit trapping signals ignored on entry. Trapped signals that are not being ignored are reset to their original values in a subshell or subshell environment when one is created. The return status is zero unless a @var{sigspec} does not specify a valid signal. +@item true +@btindex true +@example +true +@end example + +Does nothing, returns a 0 status. + @item umask @btindex umask @example @@ -4357,7 +4507,7 @@ Aliases are described in @ref{Aliases}. bind [-m @var{keymap}] [-lpsvPSVX] bind [-m @var{keymap}] [-q @var{function}] [-u @var{function}] [-r @var{keyseq}] bind [-m @var{keymap}] -f @var{filename} -bind [-m @var{keymap}] -x @var{keyseq:shell-command} +bind [-m @var{keymap}] -x @var{keyseq[: ]shell-command} bind [-m @var{keymap}] @var{keyseq:function-name} bind [-m @var{keymap}] @var{keyseq:readline-command} bind @var{readline-command-line} @@ -4394,23 +4544,28 @@ synonym); @code{emacs} is equivalent to @code{emacs-standard}. List the names of all Readline functions. @item -p -Display Readline function names and bindings in such a way that they -can be used as input or in a Readline initialization file. +Display Readline function names and bindings +in such a way that they can be used as +an argument to a subsequent @code{bind} command +or in a Readline initialization file. @item -P List current Readline function names and bindings. @item -v -Display Readline variable names and values in such a way that they -can be used as input or in a Readline initialization file. +Display Readline variable names and values +in such a way that they can be used as +an argument to a subsequent @code{bind} command +or in a Readline initialization file. @item -V List current Readline variable names and values. @item -s Display Readline key sequences bound to macros and the strings they output -in such a way that they can be used as input or in a Readline -initialization file. +in such a way that they can be used as +an argument to a subsequent @code{bind} command +or in a Readline initialization file. @item -S Display Readline key sequences bound to macros and the strings they output. @@ -4430,6 +4585,15 @@ Remove any current binding for @var{keyseq}. @item -x @var{keyseq:shell-command} Cause @var{shell-command} to be executed whenever @var{keyseq} is entered. +The separator between @var{keyseq} and @var{shell-command} is either +whitespace or a colon optionally followed by whitespace. +If the separator is whitespace, @var{shell-command} +must be enclosed in double quotes and Readline expands any of its +special backslash-escapes in @var{shell-command} before saving it. +If the separator is a colon, any enclosing double quotes are optional, and +Readline does not expand the command string before saving it. +Since the entire key binding expression must be a single argument, it +should be enclosed in quotes. When @var{shell-command} is executed, the shell sets the @code{READLINE_LINE} variable to the contents of the Readline line buffer and the @code{READLINE_POINT} and @code{READLINE_MARK} variables @@ -4444,7 +4608,8 @@ reflected in the editing state. @item -X List all key sequences bound to shell commands and the associated commands -in a format that can be reused as input. +in a format that can be reused as +an argument to a subsequent @code{bind} command. @end table @noindent @@ -4640,8 +4805,9 @@ backslash-escaped characters is enabled. The @option{-E} option disables the interpretation of these escape characters, even on systems where they are interpreted by default. The @code{xpg_echo} shell option may be used to -dynamically determine whether or not @code{echo} expands these -escape characters by default. +dynamically determine whether or not @code{echo} +interprets any options and +expands these escape characters by default. @code{echo} does not interpret @option{--} to mean the end of options. @code{echo} interprets the following escape sequences: @@ -4705,8 +4871,10 @@ each builtin with an indication of whether or not it is enabled. The @option{-f} option means to load the new builtin command @var{name} from shared object @var{filename}, on systems that support dynamic loading. Bash will use the value of the @env{BASH_LOADABLES_PATH} variable as a -colon-separated list of directories in which to search for @var{filename}. -The default is system-dependent. +colon-separated list of directories in which to search for @var{filename}, +if @var{filename} does not contain a slash. +The default is system-dependent, +and may include "." to force a search of the current directory. The @option{-d} option will delete a builtin loaded with @option{-f}. If there are no options, a list of the shell builtins is displayed. @@ -4772,7 +4940,9 @@ The @var{option} can be any of the options accepted by @code{declare}. children. If @var{name} is @samp{-}, the set of shell options is made local to the function in which @code{local} is invoked: shell options changed using -the @code{set} builtin inside the function are restored to their original +the @code{set} builtin inside the function +after the call to @code{local} +are restored to their original values when the function returns. The restore is effected as if a series of @code{set} commands were executed to restore the values that were in place before the function. @@ -4858,8 +5028,9 @@ plain characters, which are simply copied to standard output, character escape sequences, which are converted and copied to the standard output, and format specifications, each of which causes printing of the next successive @var{argument}. -In addition to the standard @code{printf(1)} formats, @code{printf} -interprets the following extensions: +In addition to the standard @code{printf(3)} format characters +@code{csndiouxXeEfFgGaA}, +@code{printf} interprets the following additional format specifiers: @table @code @item %b @@ -4869,9 +5040,16 @@ corresponding @var{argument} in the same way as @code{echo -e} @item %q Causes @code{printf} to output the corresponding @var{argument} in a format that can be reused as shell input. +@code{%q} and @code{%Q}P use the ANSI-C quoting style (@pxref{ANSI-C Quoting}) +if any characters +in the argument string require it, and backslash quoting otherwise. +If the format string uses the @code{printf} @var{alternate form}, these two +formats quote the argument string using single quotes. + @item %Q like @code{%q}, but applies any supplied precision to the @var{argument} before quoting it. + @item %(@var{datefmt})T Causes @code{printf} to output the date-time string resulting from using @var{datefmt} as a format string for @code{strftime}(3). @@ -4884,11 +5062,23 @@ This is an exception to the usual @code{printf} behavior. @end table @noindent -The %b, %q, and %T directives all use the field width and precision +The %b, %q, and %T format specifiers all use the field width and precision arguments from the format specification and write that many bytes from (or use that wide a field for) the expanded argument, which usually contains more characters than the original. +The %n format specifier accepts a corresponding argument that is treated +as a shell variable name. + +The %s and %c format specifiers accept an l (long) modifier, which forces +them to convert the argument string to a wide-character string and apply +any supplied field width and precision in terms of characters, not bytes. + +@ignore +The %s format specifier understands the "altform" flag (#) and behaves +identically to the %b format specifier if it's supplied. +@end ignore + Arguments to non-string format specifiers are treated as C language constants, except that a leading plus or minus sign is allowed, and if the leading character is a single or double quote, the value is the ASCII value of @@ -4897,13 +5087,15 @@ the following character. The @var{format} is reused as necessary to consume all of the @var{arguments}. If the @var{format} requires more @var{arguments} than are supplied, 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. +appropriate, had been supplied. +The return value is zero on success, +non-zero if an invalid option is supplied or a write or assignment error +occurs. @item read @btindex read @example -read [-ers] [-a @var{aname}] [-d @var{delim}] [-i @var{text}] [-n @var{nchars}] +read [-Eers] [-a @var{aname}] [-d @var{delim}] [-i @var{text}] [-n @var{nchars}] [-N @var{nchars}] [-p @var{prompt}] [-t @var{timeout}] [-u @var{fd}] [@var{name} @dots{}] @end example @@ -4944,6 +5136,12 @@ Readline (@pxref{Command Line Editing}) is used to obtain the line. Readline uses the current (or default, if line editing was not previously active) editing settings, but uses Readline's default filename completion. +@item -E +Readline (@pxref{Command Line Editing}) is used to obtain the line. +Readline uses the current (or default, if line editing was not previously +active) editing settings, but uses Bash's default completion, including +programmable completion. + @item -i @var{text} If Readline is being used to read the line, @var{text} is placed into the editing buffer before editing begins. @@ -5001,6 +5199,9 @@ The exit status is greater than 128 if the timeout is exceeded. Read input from file descriptor @var{fd}. @end table +Other than the case where @var{delim} is the empty string, @code{read} +ignores any NUL characters in the input. + If no @var{name}s are supplied, the line read, without the ending delimiter but otherwise unmodified, is assigned to the @@ -5041,27 +5242,32 @@ For each @var{name}, indicate how it would be interpreted if used as a command name. If the @option{-t} option is used, @code{type} prints a single word -which is one of @samp{alias}, @samp{function}, @samp{builtin}, -@samp{file} or @samp{keyword}, -if @var{name} is an alias, shell function, shell builtin, -disk file, or shell reserved word, respectively. +which is one of @samp{alias}, @samp{keyword}, @samp{function}, +@samp{builtin}, or @samp{file}, +if @var{name} is an alias, shell reserved word, shell function, +shell builtin, or executable disk file, respectively. If the @var{name} is not found, then nothing is printed, and @code{type} returns a failure status. If the @option{-p} option is used, @code{type} either returns the name -of the disk file that would be executed, or nothing if @option{-t} -would not return @samp{file}. +of the executable file that would be found by searching @code{$PATH}, +or nothing if @option{-t} would not return @samp{file}. The @option{-P} option forces a path search for each @var{name}, even if @option{-t} would not return @samp{file}. -If a command is hashed, @option{-p} and @option{-P} print the hashed value, -which is not necessarily the file that appears first in @code{$PATH}. +If a @var{name} is present in the table of hashed commands, +options @option{-p} and @option{-P} print the hashed value, which is not +necessarily the file that appears first in @code{$PATH}. If the @option{-a} option is used, @code{type} returns all of the places -that contain an executable named @var{file}. -This includes aliases and functions, if and only if the @option{-p} option -is not also used. +that contain a command named @var{name}. +This includes aliases, reserved words, functions, and builtins, +but the path search options (@option{-p} and @option{-P}) can be supplied +to restrict the output to executable files. +If @option{-a} is supplied with @option{-p}, @code{type} does not look +in the table of hashed commands, and only performs a @code{PATH} +search for @var{name}. If the @option{-f} option is used, @code{type} does not attempt to find shell functions, as with the @code{command} builtin. @@ -5229,6 +5435,8 @@ parameters, or to display the names and values of shell variables. @example set [-abefhkmnptuvxBCEHPT] [-o @var{option-name}] [--] [-] [@var{argument} @dots{}] set [+abefhkmnptuvxBCEHPT] [+o @var{option-name}] [--] [-] [@var{argument} @dots{}] +set -o +set +o @end example If no options or arguments are supplied, @code{set} displays the names @@ -5309,7 +5517,15 @@ This option is ignored by interactive shells. @item -o @var{option-name} -Set the option corresponding to @var{option-name}: +Set the option corresponding to @var{option-name}. +If @option{-o} is supplied with no @var{option-name}, +@code{set} prints the current shell options settings. +If @option{+o} is supplied with no @var{option-name}, +@code{set} prints a series of +@code{set} +commands to recreate the current option settings +on the standard output. +Valid option names are: @table @code @item allexport @@ -5416,7 +5632,7 @@ Turning this option off causes the effective user and group ids to be set to the real user and group ids. @item -r -Enable restricted shell mode. +Enable restricted shell mode (@pxref{The Restricted Shell}). This option cannot be unset once it has been set. @item -t @@ -5436,9 +5652,9 @@ Print shell input lines as they are read. @item -x Print a trace of simple commands, @code{for} commands, @code{case} commands, @code{select} commands, and arithmetic @code{for} commands -and their arguments or associated word lists after they are -expanded and before they are executed. The value of the @env{PS4} -variable is expanded and the resultant value is printed before +and their arguments or associated word lists to standard error +after they are expanded and before they are executed. +The shell prints the expanded value of the @env{PS4} variable before the command and its expanded arguments. @item -B @@ -5572,12 +5788,16 @@ option. The list of @code{shopt} options is: @table @code -@item assoc_expand_once -If set, the shell suppresses multiple evaluation of associative array -subscripts during arithmetic expression evaluation, while executing +@item array_expand_once +If set, the shell suppresses multiple evaluation of +associative and indexed array subscripts +during arithmetic expression evaluation, while executing builtins that can perform variable assignments, and while executing builtins that perform array dereferencing. +@item assoc_expand_once +Deprecated; a synonym for @code{array_expand_once}. + @item autocd If set, a command name that is the name of a directory is executed as if it were the argument to the @code{cd} command. @@ -5645,7 +5865,7 @@ 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 +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. @@ -5852,8 +6072,10 @@ instead of double quotes. If the string is not translated, this has no effect. @item nullglob -If set, Bash allows filename patterns which match no -files to expand to a null string, rather than themselves. +If set, filename expansion patterns which match no files +(@pxref{Filename Expansion}) +expand to nothing and are removed, +rather than expanding to themselves. @item patsub_replacement If set, Bash @@ -5905,6 +6127,9 @@ leaving them open when the command completes. @item xpg_echo If set, the @code{echo} builtin expands backslash-escape sequences by default. +If the @code{posix} shell option (@pxref{The Set Builtin}) is also enabled, +@code{echo} does not +interpret any options. @end table @end table @@ -5936,8 +6161,8 @@ The Bash @sc{posix} mode is described in @ref{Bash POSIX Mode}. These are the @sc{posix} special builtins: @example -@w{break : . continue eval exec exit export readonly return set} -@w{shift trap unset} +@w{break : . source continue eval exec exit export readonly return set} +@w{shift times trap unset} @end example @node Shell Variables @@ -6074,7 +6299,7 @@ subsequently reset. @item BASH_ARGC An array variable whose values are the number of parameters in each -frame of the current bash execution call stack. The number of +frame of the current Bash execution call stack. The number of parameters to the current subroutine (shell function or script executed with @code{.} or @code{source}) is at the top of the stack. When a subroutine is executed, the number of parameters passed is pushed onto @@ -6086,9 +6311,10 @@ builtin). Setting @code{extdebug} after the shell has started to execute a script, or referencing this variable when @code{extdebug} is not set, may result in inconsistent values. +Assignments to @env{BASH_ARGC} have no effect, and it may not be unset. @item BASH_ARGV -An array variable containing all of the parameters in the current bash +An array variable containing all of the parameters in the current Bash execution call stack. The final parameter of the last subroutine call is at the top of the stack; the first parameter of the initial call is at the bottom. When a subroutine is executed, the parameters supplied @@ -6100,6 +6326,7 @@ builtin). Setting @code{extdebug} after the shell has started to execute a script, or referencing this variable when @code{extdebug} is not set, may result in inconsistent values. +Assignments to @env{BASH_ARGV} have no effect, and it may not be unset. @item BASH_ARGV0 When referenced, this variable expands to the name of the shell or shell @@ -6141,7 +6368,7 @@ level is set to the default for the current version. If @env{BASH_COMPAT} is set to a value that is not one of the valid compatibility levels, the shell prints an error message and sets the compatibility level to the default for the current version. -The valid values correspond to the compatibility levels +A subset of the valid values correspond to the compatibility levels described below (@pxref{Shell Compatibility Mode}). For example, 4.2 and 42 are valid values that correspond to the @code{compat42} @code{shopt} option @@ -6164,12 +6391,21 @@ where each corresponding member of @env{FUNCNAME} was invoked. @code{$@{FUNCNAME[$i]@}} was called (or @code{$@{BASH_LINENO[$i-1]@}} if referenced within another shell function). Use @code{LINENO} to obtain the current line number. +Assignments to @env{BASH_LINENO} have no effect, and it may not be unset. @item BASH_LOADABLES_PATH A colon-separated list of directories in which the shell looks for dynamically loadable builtins specified by the @code{enable} command. +@item BASH_MONOSECONDS +Each time this variable is referenced, it expands to the value returned +by the system's monotonic clock, if one is available. +If there is no monotonic clock, this is equivalent to @env{EPOCHSECONDS}. +If @env{BASH_MONOSECONDS} +is unset, it loses its special properties, even if it is +subsequently reset. + @item BASH_REMATCH An array variable whose members are assigned by the @samp{=~} binary operator to the @code{[[} conditional command @@ -6185,6 +6421,7 @@ corresponding shell function names in the @code{FUNCNAME} array variable are defined. The shell function @code{$@{FUNCNAME[$i]@}} is defined in the file @code{$@{BASH_SOURCE[$i]@}} and called from @code{$@{BASH_SOURCE[$i+1]@}} +Assignments to @env{BASH_SOURCE} have no effect, and it may not be unset. @item BASH_SUBSHELL Incremented by one within each subshell or subshell environment when @@ -6194,6 +6431,13 @@ If @env{BASH_SUBSHELL} is unset, it loses its special properties, even if it is subsequently reset. +@item BASH_TRAPSIG +Set to the signal number corresponding to the trap action being executed +during its execution. +See the description of @code{trap} +(@pxref{Bourne Shell Builtins}) +for information about signal numbers and trap execution. + @item BASH_VERSINFO A readonly array variable (@pxref{Arrays}) whose members hold version information for this instance of Bash. @@ -6214,7 +6458,7 @@ The patch level. The build version. @item BASH_VERSINFO[4] -The release status (e.g., @code{beta1}). +The release status (e.g., @code{beta}). @item BASH_VERSINFO[5] The value of @env{MACHTYPE}. @@ -6422,6 +6666,38 @@ of matches. The pattern matching honors the setting of the @code{extglob} shell option. +@item GLOBSORT +Control how the results of filename expansion are sorted. +The value of this variable specifies the sort criteria and sort order for +the results of filename expansion. +If this variable is unset or set to the null string, filename expansion +uses the historical behavior of sorting by name. +If set, a valid value begins with an optional @samp{+}, which is ignored, +or @samp{-}, which reverses the sort order from ascending to descending, +followed by a sort specifier. +The valid sort specifiers are +@samp{name}, +@samp{size}, +@samp{mtime}, +@samp{atime}, +@samp{ctime}, +and +@samp{blocks}, +which sort the files on name, file size, modification time, access time, +inode change time, and number of blocks, respectively. + +For example, a value of @code{-mtime} sorts the results in descending +order by modification time (newest first). + +A sort specifier of @samp{nosort} disables sorting completely; the results +are returned in the order they are read from the file system,. + +If the sort specifier is missing, it defaults to @var{name}, +so a value of @samp{+} is equivalent to the null string, +and a value of @samp{-} sorts by name in descending order. + +Any invalid value restores the historical sorting behavior. + @item GROUPS An array variable containing the list of groups of which the current user is a member. @@ -6435,13 +6711,17 @@ Up to three characters which control history expansion, quick substitution, and tokenization (@pxref{History Interaction}). The first character is the @dfn{history expansion} character, that is, the character which signifies the -start of a history expansion, normally @samp{!}. The second character is the -character which signifies `quick substitution' when seen as the first -character on a line, normally @samp{^}. The optional third character is the +start of a history expansion, normally @samp{!}. +The second character is the +character which signifies "quick substitution" when seen as the first +character on a line, normally @samp{^}. +The optional third character is the character which indicates that the remainder of the line is a comment when -found as the first character of a word, usually @samp{#}. The history +found as the first character of a word, usually @samp{#}. +The history comment character causes history substitution to be skipped for the -remaining words on the line. It does not necessarily cause the shell +remaining words on the line. +It does not necessarily cause the shell parser to treat the rest of the line as a comment. @item HISTCMD @@ -6473,8 +6753,10 @@ not tested, and are added to the history regardless of the value of @env{HISTCONTROL}. @item HISTFILE -The name of the file to which the command history is saved. The -default value is @file{~/.bash_history}. +The name of the file to which the command history is saved. +Bash assigns a default value of @file{~/.bash_history}. +If @env{HISTFILE} is unset or null, +the command history is not saved when a shell exits. @item HISTFILESIZE The maximum number of lines contained in the history file. @@ -6490,9 +6772,13 @@ after reading any startup files. @item HISTIGNORE A colon-separated list of patterns used to decide which command -lines should be saved on the history list. Each pattern is +lines should be saved on the history list. +If a command line matches one of the patterns in the value of +@code{HISTIGNORE}, it is not saved on the history list. +Each pattern is anchored at the beginning of the line and must match the complete -line (no implicit @samp{*} is appended). Each pattern is tested +line (Bash will not implicitly append a @samp{*}). +Each pattern is tested against the line after the checks specified by @env{HISTCONTROL} are applied. In addition to the normal shell pattern matching characters, @samp{&} matches the previous history line. @samp{&} @@ -6519,7 +6805,7 @@ The shell sets the default value to 500 after reading any startup files. @item HISTTIMEFORMAT If this variable is set and not null, its value is used as a format string -for @code{strftime} to print the time stamp associated with each history +for @code{strftime}(3) to print the time stamp associated with each history entry displayed by the @code{history} builtin. If this variable is set, time stamps are written to the history file so they may be preserved across shell sessions. @@ -6772,7 +7058,7 @@ The @samp{%} character introduces an escape sequence that is expanded to a time value or other information. The escape sequences and their meanings are as -follows; the braces denote optional portions. +follows; the brackets denote optional portions. @table @code @@ -6795,8 +7081,8 @@ The CPU percentage, computed as (%U + %S) / %R. The optional @var{p} is a digit specifying the precision, the number of fractional digits after a decimal point. A value of 0 causes no decimal point or fraction to be output. -At most three places after the decimal point may be specified; values -of @var{p} greater than 3 are changed to 3. +At most six places after the decimal point may be specified; +values of @var{p} greater than 6 are changed to 6. If @var{p} is not specified, the value 3 is used. The optional @code{l} specifies a longer format, including minutes, of @@ -6807,7 +7093,7 @@ If this variable is not set, Bash acts as if it had the value @example @code{$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'} @end example -If the value is null, no timing information is displayed. +If the value is null, Bash does not display any timing information. A trailing newline is added when the format string is displayed. @item TMOUT @@ -6925,6 +7211,7 @@ standard. @xref{Bash POSIX Mode}, for a description of the Bash @sc{posix} mode. @item --restricted +Equivalent to @option{-r}. Make the shell a restricted shell (@pxref{The Restricted Shell}). @item --verbose @@ -6994,7 +7281,13 @@ that may be reused as input. @item -- A @code{--} signals the end of options and disables further option processing. -Any arguments after the @code{--} are treated as filenames and arguments. +Any arguments after the @code{--} +are treated as a shell script filename (@pxref{Shell Scripts}) +and arguments passed to that script. + +@item - +Equivalent to @code{--}. + @end table @cindex login shell @@ -7422,6 +7715,12 @@ option to the @code{set} builtin (@pxref{The Set Builtin}). @item -v @var{varname} True if the shell variable @var{varname} is set (has been assigned a value). +If @var{varname} is an indexed +array variable name subscripted by @samp{@@} or @samp{*}, +this returns true if the array has any set elements. +If @var{varname} is an associative +array variable name subscripted by @samp{@@} or @samp{*}, +this returns true if an element with that key is set. @item -R @var{varname} True if the shell variable @var{varname} is set and is a name reference. @@ -7483,6 +7782,11 @@ equal-precedence operators. The levels are listed in order of decreasing precedence. @table @code +@cindex arithmetic operators +@cindex unary arithmetic operators +@cindex binary arithmetic operators +@cindex conditional arithmetic operator +@cindex bitwise arithmetic operators @item @var{id}++ @var{id}-- variable post-increment and post-decrement @@ -7529,7 +7833,7 @@ logical AND @item || logical OR -@item expr ? expr : expr +@item expr ? if-true-expr : if-false-expr conditional operator @item = *= /= %= += -= <<= >>= &= ^= |= @@ -7576,14 +7880,20 @@ rules above. @section Aliases @cindex alias expansion -@dfn{Aliases} allow a string to be substituted for a word when it is used -as the first word of a simple command. -The shell maintains a list of aliases that may be set and unset with -the @code{alias} and @code{unalias} builtin commands. +@dfn{Aliases} allow a string to be substituted for a word that is in +a position in the input where it can be the first word of a simple +command. +Aliases have names and corresponding values that are set +and unset using the @code{alias} and @code{unalias} builtin commands +(@pxref{Shell Builtin Commands}). + +If the shell reads an unquoted word in the right position, it checks +the word to see if it matches an alias name. If it matches, the shell +replaces the word with the alias value, and reads that value as if it +had been read instead of the word. +The shell doesn't look at any characters following the word before +attempting alias substitution. -The first word of each simple command, if unquoted, is checked to see -if it has an alias. -If so, that word is replaced by the text of the alias. The characters @samp{/}, @samp{$}, @samp{`}, @samp{=} and any of the shell metacharacters or quoting characters listed above may not appear in an alias name. @@ -7595,6 +7905,7 @@ is not expanded a second time. This means that one may alias @code{ls} to @code{"ls -F"}, for instance, and Bash does not try to recursively expand the replacement text. + If the last character of the alias value is a @code{blank}, then the next command word following the alias is also checked for alias expansion. @@ -7605,7 +7916,7 @@ command, and removed with the @code{unalias} command. There is no mechanism for using arguments in the replacement text, as in @code{csh}. If arguments are needed, use a shell function -(@pxref{Shell Functions}). +(@pxref{Shell Functions}) instead. Aliases are not expanded when the shell is not interactive, unless the @code{expand_aliases} shell option is set using @@ -7693,8 +8004,12 @@ the optional subscript is supplied, that index is assigned to; otherwise the index of the element assigned is the last index assigned to by the statement plus one. Indexing starts at zero. -Each @var{value} in the list undergoes all the shell expansions -described above (@pxref{Shell Expansions}). +Each @var{value} in the list undergoes the shell expansions +described above (@pxref{Shell Expansions}), +but @var{value}s that are valid variable assignments +including the brackets and subscript do not undergo +brace expansion and word splitting, as with individual +variable assignments. When assigning to an associative array, the words in a compound assignment may be either assignment statements, for which the subscript is required, @@ -7726,7 +8041,9 @@ Any element of an array may be referenced using The braces are required to avoid conflicts with the shell's filename expansion operators. If the @var{subscript} is @samp{@@} or @samp{*}, the word expands to all members -of the array @var{name}. These subscripts differ only when the word +of the array @var{name}, unless otherwise noted in the description of a +builtin or word expansion. +These subscripts differ only when the word appears within double quotes. If the word is double-quoted, @code{$@{@var{name}[*]@}} expands to a single word with @@ -7753,8 +8070,8 @@ and an index of -1 refers to the last element. Referencing an array variable without a subscript is equivalent to referencing with a subscript of 0. -Any reference to a variable using a valid subscript is legal, and -@code{bash} will create an array if necessary. +Any reference to a variable using a valid subscript is valid, and +Bash will create an array if necessary. An array variable is considered set if a subscript has been assigned a value. The null string is a valid value. @@ -8106,9 +8423,62 @@ such as @code{jails}, @code{zones}, or @code{containers}. @node Bash POSIX Mode -@section Bash POSIX Mode +@section Bash and POSIX + +@subsection What is POSIX? +@cindex POSIX description + +@sc{posix} is the name for a family of standards based on Unix. +A number of Unix services, tools, and functions are part of the standard, +ranging from the basic system calls and C library functions to common +applications and tools to system administration and management. + +The @sc{posix} Shell and Utilities standard was originally developed by +IEEE Working Group 1003.2 (POSIX.2). +The first edition of the 1003.2 standard was published in 1992. +It was merged with the original IEEE 1003.1 Working Group and is +currently maintained by the Austin Group (a joint working group of the +IEEE, The Open Group and ISO/IEC SC22/WG15). +Today the Shell and Utilities are a volume within the set of documents that +make up IEEE Std 1003.1-2017, and thus the former POSIX.2 (from 1992) +is now part of the current unified @sc{posix} standard. + +The Shell and Utilities volume concentrates on the command +interpreter interface and utility programs commonly executed from +the command line or by other programs. +The standard is freely available on the web at +@url{https://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html}. + +Bash is concerned with the aspects of the shell's behavior defined +by the @sc{posix} Shell and Utilities volume. The shell command +language has of course been standardized, including the basic flow +control and program execution constructs, I/O redirection and +pipelines, argument handling, variable expansion, and quoting. + +The @i{special} builtins, which must be implemented as part of the +shell to provide the desired functionality, are specified as +being part of the shell; examples of these are @code{eval} and +@code{export}. +Other utilities appear in the sections of POSIX not +devoted to the shell which are commonly (and in some cases must +be) implemented as builtin commands, such as +@code{read} and @code{test}. +POSIX also specifies aspects of the shell's interactive +behavior, including job control and command +line editing. +Only vi-style line editing commands have been +standardized; emacs editing commands were left out due to +objections. + +@subsection Bash POSIX Mode @cindex POSIX Mode +Although Bash is an implementation of the @sc{posix} shell +specification, there are areas where the Bash default behavior +differs from the specification. +The Bash @dfn{posix mode} changes the Bash +behavior in these areas so that it conforms to the standard more closely. + Starting Bash with the @option{--posix} command-line option or executing @samp{set -o posix} while Bash is running will cause Bash to conform more closely to the @sc{posix} standard by changing the behavior to @@ -8172,7 +8542,7 @@ name, rather than on all assignment statements on the line. @item The default history file is @file{~/.sh_history} (this is the -default value of @env{$HISTFILE}). +default value the shell assigns to @env{$HISTFILE}). @item Redirection operators do not perform filename expansion on the word @@ -8192,9 +8562,15 @@ causes a fatal syntax error in non-interactive shells. Function names may not be the same as one of the @sc{posix} special builtins. +@item +Even if a shell function whose name contains a slash was defined before +entering @sc{posix} mode, the shell will not execute a function whose name +contains one or more slashes. + @item @sc{posix} special builtins are found before shell functions -during command lookup. +during command lookup, including output printed by the @code{type} +and @code{command} builtins. @item When printing shell function definitions (e.g., by @code{type}), Bash does @@ -8240,6 +8616,19 @@ the @sc{posix} standard, and include things like passing incorrect options, redirection errors, variable assignment errors for assignments preceding the command name, and so on. +@item +The @code{unset} builtin with the @option{-v} option specified returns a +fatal error if it attempts to unset a @code{readonly} or @code{non-unsettable} +variable, or encounters a variable name argument that is an invalid identifier, +which causes a non-interactive shell to exit. + +@item +When asked to unset a variable that appears in an assignment statement +preceding the command, the @code{unset} builtin attempts to unset a variable +of the same name in the current or previous scope as well. +This implements the required "if an assigned variable is further modified +by the utility, the modifications made by the utility shall persist" behavior. + @item A non-interactive shell exits with an error status if a variable assignment error occurs when no command name follows the assignment @@ -8258,7 +8647,7 @@ command in which the error occurred"). @item A non-interactive shell exits with an error status if the iteration variable in a @code{for} statement or the selection variable in a -@code{select} statement is a readonly variable. +@code{select} statement is a readonly variable or has an invalid name. @item Non-interactive shells exit if @var{filename} in @code{.} @var{filename} @@ -8312,6 +8701,13 @@ prefix. The @code{export} and @code{readonly} builtin commands display their output in the format required by @sc{posix}. +@item +If the @code{export} and @code{readonly} builtin commands get an argument +that is not a valid identifier, and they are not operating on shell +functions, they return an error. +This will cause a non-interactive shell to exit because these are +special builtins. + @item The @code{trap} builtin displays signal names without the leading @code{SIG}. @@ -8325,8 +8721,9 @@ signal to the original disposition, they should use @samp{-} as the first argument. @item -@code{trap -p} displays signals whose dispositions are set to SIG_DFL and -those that were ignored when the shell started. +@code{trap -p} without arguments displays signals whose dispositions are +set to SIG_DFL and those that were ignored when the shell started, not +just trapped signals. @item The @code{.} and @code{source} builtins do not search the current directory @@ -8370,8 +8767,8 @@ falling back to physical mode. When the @code{cd} builtin cannot change a directory because the length of the pathname constructed from @code{$PWD} and the directory name supplied as an argument -exceeds @code{PATH_MAX} when all symbolic links are expanded, @code{cd} will -fail instead of attempting to use only the supplied directory name. +exceeds @code{PATH_MAX} when canonicalized, @code{cd} will +attempt to use the supplied directory name. @item The @code{pwd} builtin verifies that the value it prints is the same as the @@ -8385,6 +8782,13 @@ indication of whether or not a history entry has been modified. @item The default editor used by @code{fc} is @code{ed}. +@item +@code{fc} treats extra arguments as an error instead of ignoring them. + +@item +If there are too many arguments supplied to @code{fc -s}, @code{fc} prints +an error message and returns failure. + @item The @code{type} and @code{command} builtins will not report a non-executable file as having been found, though the shell will attempt to execute such a @@ -8425,6 +8829,29 @@ arguments corresponding to floating point conversion specifiers, instead of Bash removes an exited background process's status from the list of such statuses after the @code{wait} builtin is used to obtain it. +@item +A double quote character (@samp{"}) is treated specially when it appears +in a backquoted command substitution in the body of a here-document that +undergoes expansion. +That means, for example, that a backslash preceding a double quote +character will escape it and the backslash will be removed. + +@item +The @code{test} builtin compares strings using the current locale when +processing the @samp{<} and @samp{>} binary operators. + +@item +The @code{test} builtin's @option{-t} unary primary requires an argument. +Historical versions of @code{test} made the argument optional in certain +cases, and Bash attempts to accommodate those for backwards compatibility. + +@item +Command substitutions don't set the @samp{?} special parameter. The exit +status of a simple command without a command word is still the exit status +of the last command substitution that occurred while evaluating the variable +assignments and redirections in that command, but that does not happen until +after all of the assignments and redirections. + @end enumerate There is other @sc{posix} behavior that Bash does not implement by @@ -8438,6 +8865,10 @@ The @code{fc} builtin checks @code{$EDITOR} as a program to edit history entries if @code{FCEDIT} is unset, rather than defaulting directly to @code{ed}. @code{fc} uses @code{ed} if @code{EDITOR} is unset. +@item +A non-interactive shell does not exit if a variable assignment preceding +the @code{command} builtin or another non-special builtin fails. + @item As noted above, Bash requires the @code{xpg_echo} option to be enabled for the @code{echo} builtin to be fully conformant. @@ -8495,9 +8926,9 @@ Starting with bash-4.4, Bash has begun deprecating older compatibility levels. Eventually, the options will be removed in favor of @env{BASH_COMPAT}. -Bash-5.0 is the final version for which there will be an individual shopt -option for the previous version. Users should use @env{BASH_COMPAT} -on bash-5.0 and later versions. +Bash-5.0 was the final version for which there will be an individual shopt +option for the previous version. +Users should control the compatibility level with @env{BASH_COMPAT}. The following table describes the behavior changes controlled by each compatibility level setting. @@ -8517,16 +8948,6 @@ quoting the rhs of the @code{[[} command's regexp matching operator (=~) has no special effect @end itemize -@item compat32 -@itemize @bullet -@item -interrupting a command list such as "a ; b ; c" causes the execution -of the next command in the list (in bash-4.0 and later versions, -the shell acts as if it received the interrupt, so -interrupting one command in a list aborts the execution of the -entire list) -@end itemize - @item compat40 @itemize @bullet @item @@ -8649,7 +9070,7 @@ the $@{@var{parameter}[:]=@var{value}@} word expansion will return performed (e.g., converting to lowercase). Bash-5.2 will return the final value assigned to the variable. @item -Parsing command substitutions will behave as if extended glob +Parsing command substitutions will behave as if extended globbing (@pxref{The Shopt Builtin}) is enabled, so that parsing a command substitution containing an extglob pattern (say, as part of a shell function) will not fail. @@ -8658,6 +9079,14 @@ and word expansions are performed. It will fail at word expansion time if extglob hasn't been enabled by the time the command is executed. @end itemize + +@item compat52 (set using BASH_COMPAT) +@itemize @bullet +@item +The @code{test} builtin uses its historical algorithm to parse parenthesized +subexpressions when given five or more arguments. +@end itemize + @end table @node Job Control @@ -8714,7 +9143,7 @@ terminal's; such processes are immune to keyboard-generated signals. Only foreground processes are allowed to read from or, if the user so specifies with @code{stty tostop}, write to the terminal. Background processes which attempt to -read from (write to when @code{stty tostop} is in effect) the +read from (write to when @code{tostop} is in effect) the terminal are sent a @code{SIGTTIN} (@code{SIGTTOU}) signal by the kernel's terminal driver, which, unless caught, suspends the process. @@ -9089,7 +9518,7 @@ at the Bash prompt in your Bash source directory. If you want to build Bash in a directory separate from the source directory -- to build for multiple architectures, for example -- just use the full path to the configure script. The following commands -will build bash in a directory under @file{/usr/local/build} from +will build Bash in a directory under @file{/usr/local/build} from the source code in @file{/usr/local/src/bash-4.4}: @example @@ -9191,7 +9620,7 @@ or by specifying a value for the @env{prefix} @samp{make} variable when running @samp{make install} (e.g., @samp{make install prefix=@var{PATH}}). The @env{prefix} variable provides a default for @env{exec_prefix} and -other variables used when installing bash. +other variables used when installing Bash. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. @@ -9205,7 +9634,7 @@ you can specify these variables as arguments to @code{make}: @samp{make install exec_prefix=/} will install @code{bash} and @code{bashbug} into @file{/bin} instead of the default @file{/usr/local/bin}. -If you want to see the files bash will install and where it will install +If you want to see the files Bash will install and where it will install them without changing anything on your system, specify the variable @env{DESTDIR} as an argument to @code{make}. Its value should be the absolute directory path you'd like to use as the root of your sample @@ -9360,7 +9789,7 @@ compiled, linked, and installed, rather than changing run-time features. @table @code @item --enable-largefile -Enable support for @uref{http://www.unix.org/version2/whatsnew/lfs20mar.html, +Enable support for @url{http://www.unix.org/version2/whatsnew/lfs20mar.html, large files} if the operating system requires special compiler options to build programs which can access large files. This is enabled by default, if the operating system provides large file support. @@ -9399,7 +9828,7 @@ Allow alias expansion and include the @code{alias} and @code{unalias} builtins (@pxref{Aliases}). @item --enable-alt-array-implementation -This builds bash using an alternate implementation of arrays +This builds Bash using an alternate implementation of arrays (@pxref{Arrays}) that provides faster access at the expense of using more memory (sometimes many times more, depending on how sparse an array is). @@ -9449,7 +9878,7 @@ Include support for coprocesses and the @code{coproc} reserved word (@pxref{Pipelines}). @item --enable-debugger -Include support for the bash debugger (distributed separately). +Include support for the Bash debugger (distributed separately). @item --enable-dev-fd-stat-broken If calling @code{stat} on /dev/fd/@var{N} returns different results than @@ -9490,7 +9919,7 @@ Include support for importing function definitions exported by another instance of the shell from the environment. This option is enabled by default. -@item --enable-glob-asciirange-default +@item --enable-glob-asciiranges-default Set the default value of the @code{globasciiranges} shell option described above under @ref{The Shopt Builtin} to be enabled. This controls the behavior of character ranges when used in pattern matching @@ -9592,11 +10021,11 @@ The latest version of Bash is always available for FTP from @uref{http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz}. Once you have determined that a bug actually exists, use the -@code{bashbug} command to submit a bug report. -If you have a fix, you are encouraged to mail that as well! +@code{bashbug} command to submit a bug report or use the form at the +@uref{https://savannah.gnu.org/projects/bash/,Bash project page}. +If you have a fix, you are encouraged to submit that as well! Suggestions and `philosophical' bug reports may be mailed -to @email{bug-bash@@gnu.org} or posted to the Usenet -newsgroup @code{gnu.bash.bug}. +to @email{bug-bash@@gnu.org} or @email{help-bash@@gnu.org}. All bug reports should include: @itemize @bullet @@ -9752,7 +10181,8 @@ which expands to the substring of @code{var}'s value of length The expansion @code{$@{@var{var}/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}}, which matches @var{pattern} and replaces it with @var{replacement} in -the value of @var{var}, is available (@pxref{Shell Parameter Expansion}). +the value of @var{var}, is available (@pxref{Shell Parameter Expansion}), +with a mechanism to use the matched text in @var{replacement}. @item The expansion @code{$@{!@var{prefix}*@}} expansion, which expands to @@ -9761,18 +10191,28 @@ is available (@pxref{Shell Parameter Expansion}). @item Bash has indirect variable expansion using @code{$@{!word@}} -(@pxref{Shell Parameter Expansion}). +(@pxref{Shell Parameter Expansion}) and implements the @code{nameref} +variable attribute for automatic indirect variable expansion. @item Bash can expand positional parameters beyond @code{$9} using @code{$@{@var{num}@}}. +@item +Bash includes a set of parameter transformation word expansions of the +form @code{$@{var@@X@}}, where @samp{X} specifies the transformation. + @item The @sc{posix} @code{$()} form of command substitution is implemented (@pxref{Command Substitution}), and preferred to the Bourne shell's @code{``} (which is also implemented for backwards compatibility). +@item +Bash implements a variant of command substitution that runs the enclosed +command in the current shell execution environment +(@code{$@{ @var{command};@}}). + @item Bash has process substitution (@pxref{Process Substitution}). @@ -9781,8 +10221,16 @@ Bash automatically assigns variables that provide information about the current user (@env{UID}, @env{EUID}, and @env{GROUPS}), the current host (@env{HOSTTYPE}, @env{OSTYPE}, @env{MACHTYPE}, and @env{HOSTNAME}), and the instance of Bash that is running (@env{BASH}, -@env{BASH_VERSION}, and @env{BASH_VERSINFO}). @xref{Bash Variables}, -for details. +@env{BASH_VERSION}, and @env{BASH_VERSINFO}). +@xref{Bash Variables}, for details. + +@item +Bash uses many variables to provide functionality and customize shell +behavior that the Bourne shell does not. +Examples include @env{RANDOM}, @env{SRANDOM}, @env{EPOCHSECONDS}, +@env{GLOBSORT}, @env{TIMEFORMAT}, @env{BASHPID}, @env{BASH_XTRACEFD}, +@env{GLOBIGNORE}, @env{HISTIGNORE}, and @env{BASH_VERSION}. +@xref{Bash Variables}, for a complete list. @item The @env{IFS} variable is used to split only the results of expansion, @@ -9831,7 +10279,7 @@ file (@pxref{Redirections}). @item Bash includes the @samp{<<<} redirection operator, allowing a string to -be used as the standard input to a command. +be used as the standard input to a command (@pxref{Redirections}). @item Bash implements the @samp{[n]<&@var{word}} and @samp{[n]>&@var{word}} @@ -9860,6 +10308,10 @@ Bash allows a function to override a builtin with the same name, and provides access to that builtin's functionality within the function via the @code{builtin} and @code{command} builtins (@pxref{Bash Builtins}). +@item +Bash implements support for dynamically loading builtin commands from +shared objects. + @item The @code{command} builtin allows selective disabling of functions when command lookup is performed (@pxref{Bash Builtins}). @@ -9878,6 +10330,19 @@ command, and what the zeroth argument to the command is to be Shell functions may be exported to children via the environment using @code{export -f} (@pxref{Shell Functions}). +@item +Bash decodes a number of backslash-escape sequences in the prompt string +variables (@code{PS0}, @code{PS1}, @code{PS2}, and @code{PS4}). + +@item +Bash expands and displays the @code{PS0} prompt string variable. + +@item +Bash runs commands from the @code{PROMPT_COMMAND} array variable before +issuing each primary prompt. + +@item +Bash decodes a number of backslash-escaped characters @item The Bash @code{export}, @code{readonly}, and @code{declare} builtins can take a @option{-f} option to act on shell functions, a @option{-p} option to @@ -9896,6 +10361,10 @@ searching the @env{$PATH}, using @samp{hash -p} Bash includes a @code{help} builtin for quick reference to shell facilities (@pxref{Bash Builtins}). +@item +Bash includes the @code{mapfile} builtin to quickly read the contents +of a file into an indexed array variable. + @item The @code{printf} builtin is available to display formatted output (@pxref{Bash Builtins}). @@ -9907,7 +10376,8 @@ the @option{-r} option, and will use the @env{REPLY} variable as a default if no non-option arguments are supplied. The Bash @code{read} builtin also accepts a prompt string with the @option{-p} option and will use -Readline to obtain the line when given the @option{-e} option. +Readline to obtain the line when given the @option{-e} or @option{-E} +options. The @code{read} builtin also has additional options to control input: the @option{-s} option will turn off echoing of input characters as they are read, the @option{-t} option will allow @code{read} to time out @@ -9931,7 +10401,7 @@ Bash has much more optional behavior controllable with the @code{set} builtin (@pxref{The Set Builtin}). @item -The @samp{-x} (@option{xtrace}) option displays commands other than +The @option{-x} (@option{xtrace}) option displays commands other than simple commands when performing an execution trace (@pxref{The Set Builtin}). @@ -9940,6 +10410,12 @@ The @code{test} builtin (@pxref{Bourne Shell Builtins}) is slightly different, as it implements the @sc{posix} algorithm, which specifies the behavior based on the number of arguments. +@item +The Bash @code{wait} builtin has a @option{-n} option to wait for the +next child to exit, possibly selecting from a list of supplied jobs, +and the @option{-p} option to store information about a terminated +child process in a shell variable. + @item Bash includes the @code{caller} builtin, which displays the context of any active subroutine call (a shell function or a script executed with @@ -10086,6 +10562,12 @@ only for certain failures, as enumerated in the @sc{posix} standard. @item The SVR4.2 shell behaves differently when invoked as @code{jsh} (it turns on job control). + +@item +If the @code{lastpipe} option is enabled, and job control is not active, +Bash runs the last element of a pipeline in the current shell execution +environment. + @end itemize @node GNU Free Documentation License diff --git a/doc/builtins.0 b/doc/builtins.0 index 1a9b3edee..6cdefaf28 100644 --- a/doc/builtins.0 +++ b/doc/builtins.0 @@ -1,6 +1,4 @@ -BASH_BUILTINS(1) General Commands Manual BASH_BUILTINS(1) - - +_B_A_S_H___B_U_I_L_T_I_N_S(1) General Commands Manual _B_A_S_H___B_U_I_L_T_I_N_S(1) NNAAMMEE :, ., [, alias, bg, bind, break, builtin, caller, cd, command, compgen, @@ -21,38 +19,39 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS are not specified as accepting options interpret arguments beginning with -- as invalid options and require ---- to prevent this interpreta- tion. + :: [_a_r_g_u_m_e_n_t_s] No effect; the command does nothing beyond expanding _a_r_g_u_m_e_n_t_s and performing any specified redirections. The return status is zero. - .. _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] + .. _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] ssoouurrccee _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] Read and execute commands from _f_i_l_e_n_a_m_e in the current shell en- vironment and return the exit status of the last command exe- cuted from _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e does not contain a slash, filenames in PPAATTHH are used to find the directory containing _f_i_l_e_n_a_m_e, but _f_i_l_e_n_a_m_e does not need to be executable. The file - searched for in PPAATTHH need not be executable. When bbaasshh is not - in _p_o_s_i_x _m_o_d_e, it searches the current directory if no file is - found in PPAATTHH. If the ssoouurrcceeppaatthh option to the sshhoopptt builtin - command is turned off, the PPAATTHH is not searched. If any _a_r_g_u_- - _m_e_n_t_s are supplied, they become the positional parameters when - _f_i_l_e_n_a_m_e is executed. Otherwise the positional parameters are - unchanged. If the --TT option is enabled, .. inherits any trap on + searched for in PPAATTHH need not be executable. When bbaasshh is not + in _p_o_s_i_x _m_o_d_e, it searches the current directory if no file is + found in PPAATTHH. If the ssoouurrcceeppaatthh option to the sshhoopptt builtin + command is turned off, the PPAATTHH is not searched. If any _a_r_g_u_- + _m_e_n_t_s are supplied, they become the positional parameters when + _f_i_l_e_n_a_m_e is executed. Otherwise the positional parameters are + unchanged. If the --TT option is enabled, .. inherits any trap on DDEEBBUUGG; if it is not, any DDEEBBUUGG trap string is saved and restored around the call to .., and .. unsets the DDEEBBUUGG trap while it exe- cutes. If --TT is not set, and the sourced file changes the DDEEBBUUGG - trap, the new value is retained when .. completes. The return - status is the status of the last command exited within the + trap, the new value is retained when .. completes. The return + status is the status of the last command exited within the script (0 if no commands are executed), and false if _f_i_l_e_n_a_m_e is not found or cannot be read. aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] AAlliiaass with no arguments or with the --pp option prints the list of - aliases in the form aalliiaass _n_a_m_e=_v_a_l_u_e on standard output. When - arguments are supplied, an alias is defined for each _n_a_m_e whose - _v_a_l_u_e is given. A trailing space in _v_a_l_u_e causes the next word + aliases in the form aalliiaass _n_a_m_e=_v_a_l_u_e on standard output. When + arguments are supplied, an alias is defined for each _n_a_m_e whose + _v_a_l_u_e is given. A trailing space in _v_a_l_u_e causes the next word to be checked for alias substitution when the alias is expanded. For each _n_a_m_e in the argument list for which no _v_a_l_u_e is sup- plied, the name and value of the alias is printed. AAlliiaass re- @@ -62,42 +61,45 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS bbgg [_j_o_b_s_p_e_c ...] Resume each suspended job _j_o_b_s_p_e_c in the background, as if it had been started with &&. 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. bbgg _j_o_b_s_p_e_c returns 0 unless - run when job control is disabled or, when run with job control - enabled, any specified _j_o_b_s_p_e_c was not found or was started + notion of the _c_u_r_r_e_n_t _j_o_b is used. bbgg _j_o_b_s_p_e_c returns 0 unless + run when job control is disabled or, when run with job control + enabled, any specified _j_o_b_s_p_e_c was not found or was started without job control. bbiinndd [--mm _k_e_y_m_a_p] [--llppssvvPPSSVVXX] bbiinndd [--mm _k_e_y_m_a_p] [--qq _f_u_n_c_t_i_o_n] [--uu _f_u_n_c_t_i_o_n] [--rr _k_e_y_s_e_q] bbiinndd [--mm _k_e_y_m_a_p] --ff _f_i_l_e_n_a_m_e - bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q:_s_h_e_l_l_-_c_o_m_m_a_n_d + bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q[:] _s_h_e_l_l_-_c_o_m_m_a_n_d bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d_-_l_i_n_e - Display current rreeaaddlliinnee key and function bindings, bind a key - sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee + Display current rreeaaddlliinnee key and function bindings, bind a key + sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee variable. Each non-option argument is a command as it would ap- pear in a rreeaaddlliinnee initialization file such as _._i_n_p_u_t_r_c, but each binding or command must be passed as a separate argument; - e.g., '"\C-x\C-r": re-read-init-file'. Options, if supplied, - have the following meanings: + e.g., \C-x\C-r: re-read-init-file. In the following descrip- + tions, output available to be re-read is formatted as commands + that would appear in a rreeaaddlliinnee initialization file or that + would be supplied as individual arguments to a bbiinndd command. + Options, if supplied, have the following meanings: --mm _k_e_y_m_a_p Use _k_e_y_m_a_p as the keymap to be affected by the subsequent bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_- - _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, - and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e - is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- + _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, + and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e + is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- _d_a_r_d. --ll List the names of all rreeaaddlliinnee functions. - --pp Display rreeaaddlliinnee function names and bindings in such a + --pp Display rreeaaddlliinnee function names and bindings in such a way that they can be re-read. --PP List current rreeaaddlliinnee function names and bindings. - --ss Display rreeaaddlliinnee key sequences bound to macros and the - strings they output in such a way that they can be re- + --ss Display rreeaaddlliinnee key sequences bound to macros and the + strings they output in such a way that they can be re- read. - --SS Display rreeaaddlliinnee key sequences bound to macros and the + --SS Display rreeaaddlliinnee key sequences bound to macros and the strings they output. - --vv Display rreeaaddlliinnee variable names and values in such a way + --vv Display rreeaaddlliinnee variable names and values in such a way that they can be re-read. --VV List current rreeaaddlliinnee variable names and values. --ff _f_i_l_e_n_a_m_e @@ -108,39 +110,48 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS Unbind all keys bound to the named _f_u_n_c_t_i_o_n. --rr _k_e_y_s_e_q Remove any current binding for _k_e_y_s_e_q. - --xx _k_e_y_s_e_q::_s_h_e_l_l_-_c_o_m_m_a_n_d + --xx _k_e_y_s_e_q[[:: ]]_s_h_e_l_l_-_c_o_m_m_a_n_d Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is en- - tered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets - the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- - lliinnee line buffer and the RREEAADDLLIINNEE__PPOOIINNTT and RREEAADDLLIINNEE__MMAARRKK - variables to the current location of the insertion point - and the saved insertion point (the mark), respectively. - The shell assigns any numeric argument the user supplied - to the RREEAADDLLIINNEE__AARRGGUUMMEENNTT variable. If there was no argu- - ment, that variable is not set. If the executed command - changes the value of any of RREEAADDLLIINNEE__LLIINNEE, RREEAADD-- - LLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, those new values will be - reflected in the editing state. + tered. The separator between _k_e_y_s_e_q and _s_h_e_l_l_-_c_o_m_m_a_n_d is + either whitespace or a colon optionally followed by + whitespace. If the separator is whitespace, _s_h_e_l_l_-_c_o_m_- + _m_a_n_d must be enclosed in double quotes and rreeaaddlliinnee ex- + pands any of its special backslash-escapes in _s_h_e_l_l_-_c_o_m_- + _m_a_n_d before saving it. If the separator is a colon, any + enclosing double quotes are optional, and rreeaaddlliinnee does + not expand the command string before saving it. Since + the entire key binding expression must be a single argu- + ment, it should be enclosed in quotes. When _s_h_e_l_l_-_c_o_m_- + _m_a_n_d is executed, the shell sets the RREEAADDLLIINNEE__LLIINNEE vari- + able to the contents of the rreeaaddlliinnee line buffer and the + RREEAADDLLIINNEE__PPOOIINNTT and RREEAADDLLIINNEE__MMAARRKK variables to the current + location of the insertion point and the saved insertion + point (the mark), respectively. The shell assigns any + numeric argument the user supplied to the RREEAADDLLIINNEE__AARRGGUU-- + MMEENNTT variable. If there was no argument, that variable + is not set. If the executed command changes the value of + any of RREEAADDLLIINNEE__LLIINNEE, RREEAADDLLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, + those new values will be reflected in the editing state. --XX List all key sequences bound to shell commands and the associated commands in a format that can be reused as in- put. - The return value is 0 unless an unrecognized option is given or + The return value is 0 unless an unrecognized option is given or an error occurred. bbrreeaakk [_n] - Exit from within a ffoorr, wwhhiillee, uunnttiill, or sseelleecctt loop. If _n is - specified, break _n levels. _n must be >= 1. If _n is greater - than the number of enclosing loops, all enclosing loops are ex- - ited. The return value is 0 unless _n is not greater than or + Exit from within a ffoorr, wwhhiillee, uunnttiill, or sseelleecctt loop. If _n is + specified, break _n levels. _n must be >= 1. If _n is greater + than the number of enclosing loops, all enclosing loops are ex- + ited. The return value is 0 unless _n is not greater than or equal to 1. bbuuiillttiinn _s_h_e_l_l_-_b_u_i_l_t_i_n [_a_r_g_u_m_e_n_t_s] - Execute the specified shell builtin, passing it _a_r_g_u_m_e_n_t_s, and + Execute the specified shell builtin, passing it _a_r_g_u_m_e_n_t_s, and return its exit status. This is useful when defining a function whose name is the same as a shell builtin, retaining the func- tionality of the builtin within the function. The ccdd builtin is - commonly redefined this way. The return status is false if + commonly redefined this way. The return status is false if _s_h_e_l_l_-_b_u_i_l_t_i_n is not a shell builtin command. ccaalllleerr [_e_x_p_r] @@ -149,67 +160,69 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS out _e_x_p_r, ccaalllleerr displays the line number and source filename of the current subroutine call. If a non-negative integer is sup- plied as _e_x_p_r, ccaalllleerr displays the line number, subroutine name, - and source file corresponding to that position in the current - execution call stack. This extra information may be used, for - example, to print a stack trace. The current frame is frame 0. - The return value is 0 unless the shell is not executing a sub- - routine call or _e_x_p_r does not correspond to a valid position in + and source file corresponding to that position in the current + execution call stack. This extra information may be used, for + example, to print a stack trace. The current frame is frame 0. + The return value is 0 unless the shell is not executing a sub- + routine call or _e_x_p_r does not correspond to a valid position in the call stack. - ccdd [--LL|[--PP [--ee]] [-@]] [_d_i_r] - Change the current directory to _d_i_r. if _d_i_r is not supplied, - the value of the HHOOMMEE shell variable is the default. The vari- + ccdd [--LL|[--PP [--ee]]] [-@] [_d_i_r] + Change the current directory to _d_i_r. if _d_i_r is not supplied, + the value of the HHOOMMEE shell variable is the default. The vari- able CCDDPPAATTHH defines the search path for the directory containing - _d_i_r: each directory name in CCDDPPAATTHH is searched for _d_i_r. Alter- - native directory names in CCDDPPAATTHH are separated by a colon (:). - A null directory name in CCDDPPAATTHH is the same as the current di- - rectory, i.e., ``..''. If _d_i_r begins with a slash (/), then CCDD-- - PPAATTHH is not used. The --PP option causes ccdd to use the physical - directory structure by resolving symbolic links while traversing - _d_i_r and before processing instances of _._. in _d_i_r (see also the - --PP option to the sseett builtin command); the --LL option forces sym- - bolic links to be followed by resolving the link after process- - ing instances of _._. in _d_i_r. If _._. appears in _d_i_r, it is pro- - cessed by removing the immediately previous pathname component - from _d_i_r, back to a slash or the beginning of _d_i_r. If the --ee - option is supplied with --PP, and the current working directory - cannot be successfully determined after a successful directory - change, ccdd will return an unsuccessful status. On systems that - support it, the --@@ option presents the extended attributes asso- - ciated with a file as a directory. An argument of -- is con- - verted to $$OOLLDDPPWWDD before the directory change is attempted. If - a non-empty directory name from CCDDPPAATTHH is used, or if -- is the - first argument, and the directory change is successful, the ab- - solute pathname of the new working directory is written to the - standard output. If the directory change is successful, ccdd sets - the value of the PPWWDD environment variable to the new directory - name, and sets the OOLLDDPPWWDD environment variable to the value of - the current working directory before the change. The return - value is true if the directory was successfully changed; false - otherwise. + _d_i_r: the shell searches each directory name in CCDDPPAATTHH for _d_i_r. + Alternative directory names in CCDDPPAATTHH are separated by a colon + (:). A null directory name in CCDDPPAATTHH is the same as the current + directory, i.e., If _d_i_r begins with a slash (/), then CCDDPPAATTHH is + not used. The --PP option causes ccdd to use the physical directory + structure by resolving symbolic links while traversing _d_i_r and + before processing instances of _._. in _d_i_r (see also the --PP option + to the sseett builtin command); the --LL option forces symbolic links + to be followed by resolving the link after processing instances + of _._. in _d_i_r. If _._. appears in _d_i_r, it is processed by removing + the immediately previous pathname component from _d_i_r, back to a + slash or the beginning of _d_i_r. If the --ee option is supplied + with --PP, and the current working directory cannot be success- + fully determined after a successful directory change, ccdd will + return an unsuccessful status. On systems that support it, the + --@@ option presents the extended attributes associated with a + file as a directory. An argument of -- is converted to $$OOLLDDPPWWDD + before the directory change is attempted. If a non-empty direc- + tory name from CCDDPPAATTHH is used, or if -- is the first argument, + and the directory change is successful, the absolute pathname of + the new working directory is written to the standard output. If + the directory change is successful, ccdd sets the value of the PPWWDD + environment variable to the new directory name, and sets the + OOLLDDPPWWDD environment variable to the value of the current working + directory before the change. The return value is true if the + directory was successfully changed; false otherwise. ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...] Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function lookup. Only builtin commands or commands found in the PPAATTHH are - executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is - performed using a default value for PPAATTHH that is guaranteed to - find all of the standard utilities. If either the --VV or --vv op- - tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv - option causes a single word indicating the command or filename + executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is + performed using a default value for PPAATTHH that is guaranteed to + find all of the standard utilities. If either the --VV or --vv op- + tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv + option causes a single word indicating the command or filename used to invoke _c_o_m_m_a_n_d to be displayed; the --VV option produces a more verbose description. If the --VV or --vv option is supplied, the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If neither option is supplied and an error occurred or _c_o_m_m_a_n_d can- - not be found, the exit status is 127. Otherwise, the exit sta- + not be found, the exit status is 127. Otherwise, the exit sta- tus of the ccoommmmaanndd builtin is the exit status of _c_o_m_m_a_n_d. - ccoommppggeenn [_o_p_t_i_o_n] [_w_o_r_d] - Generate possible completion matches for _w_o_r_d according to the - _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee - builtin with the exception of --pp and --rr, and write the matches - to the standard output. When using the --FF or --CC options, the - various shell variables set by the programmable completion fa- - cilities, while available, will not have useful values. + ccoommppggeenn [--VV _v_a_r_n_a_m_e] [_o_p_t_i_o_n] [_w_o_r_d] + Generate possible completion matches for _w_o_r_d according to the + _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee + builtin with the exceptions of --pp, --rr, --DD, --EE, and --II, and write + the matches to the standard output. If the --VV option is sup- + plied, ccoommppggeenn stores the generated completions into the indexed + array variable _v_a_r_n_a_m_e instead of writing them to the standard + output. When using the --FF or --CC options, the various shell + variables set by the programmable completion facilities, while + available, will not have useful values. The matches will be generated in the same way as if the program- mable completion code had generated them directly from a comple- @@ -219,38 +232,38 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS The return value is true unless an invalid option is supplied, or no matches were generated. - ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- - _p_a_t] [--WW _w_o_r_d_l_i_s_t] - [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_- - _f_i_x] _n_a_m_e [_n_a_m_e _._._.] + ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] + [--GG _g_l_o_b_p_a_t] [--WW _w_o_r_d_l_i_s_t] [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] + [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_f_i_x] _n_a_m_e [_n_a_m_e ...] ccoommpplleettee --pprr [--DDEEII] [_n_a_m_e ...] Specify how arguments to each _n_a_m_e should be completed. If the - --pp option is supplied, or if no options are supplied, existing - completion specifications are printed in a way that allows them - to be reused as input. The --rr option removes a completion spec- - ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- - pletion specifications. The --DD option indicates that other sup- - plied options and actions should apply to the ``default'' com- + --pp option is supplied, or if no options or _n_a_m_es are supplied, + existing completion specifications are printed in a way that al- + lows them to be reused as input. The --rr option removes a com- + pletion specification for each _n_a_m_e, or, if no _n_a_m_es are sup- + plied, all completion specifications. The --DD option indicates + that other supplied options and actions should apply to the com- mand completion; that is, completion attempted on a command for which no completion has previously been defined. The --EE option indicates that other supplied options and actions should apply - to ``empty'' command completion; that is, completion attempted - on a blank line. The --II option indicates that other supplied - options and actions should apply to completion on the initial - non-assignment word on the line, or after a command delimiter - such as ;; or ||, which is usually command name completion. If - multiple options are supplied, the --DD option takes precedence - over --EE, and both take precedence over --II. If any of --DD, --EE, or - --II are supplied, any other _n_a_m_e arguments are ignored; these - completions only apply to the case specified by the option. + to command completion; that is, completion attempted on a blank + line. The --II option indicates that other supplied options and + actions should apply to completion on the initial non-assignment + word on the line, or after a command delimiter such as ;; or ||, + which is usually command name completion. If multiple options + are supplied, the --DD option takes precedence over --EE, and both + take precedence over --II. If any of --DD, --EE, or --II are supplied, + any other _n_a_m_e arguments are ignored; these completions only ap- + ply to the case specified by the option. The process of applying these completion specifications when - word completion is attempted is described in _b_a_s_h_(_1_). + word completion is attempted is described in _b_a_s_h(1). Other options, if specified, have the following meanings. The arguments to the --GG, --WW, and --XX options (and, if necessary, the --PP and --SS options) should be quoted to protect them from expan- sion before the ccoommpplleettee builtin is invoked. + --oo _c_o_m_p_-_o_p_t_i_o_n The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- spec's behavior beyond the simple generation of comple- @@ -258,18 +271,21 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS bbaasshhddeeffaauulltt Perform the rest of the default bbaasshh completions if the compspec generates no matches. - ddeeffaauulltt Use readline's default filename completion if + ddeeffaauulltt Use readline's default filename completion if the compspec generates no matches. ddiirrnnaammeess - Perform directory name completion if the comp- + Perform directory name completion if the comp- spec generates no matches. ffiilleennaammeess - Tell readline that the compspec generates file- - names, so it can perform any filename-specific - processing (like adding a slash to directory - names, quoting special characters, or suppress- - ing trailing spaces). Intended to be used with + Tell readline that the compspec generates file- + names, so it can perform any filename-specific + processing (like adding a slash to directory + names, quoting special characters, or suppress- + ing trailing spaces). Intended to be used with shell functions. + ffuullllqquuoottee + Tell readline to quote all the completed words + even if they are not filenames. nnooqquuoottee Tell readline not to quote the completed words if they are filenames (quoting filenames is the default). @@ -284,13 +300,13 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS tempted and any matches are added to the results of the other actions. --AA _a_c_t_i_o_n - The _a_c_t_i_o_n may be one of the following to generate a + The _a_c_t_i_o_n may be one of the following to generate a list of possible completions: aalliiaass Alias names. May also be specified as --aa. aarrrraayyvvaarr Array variable names. bbiinnddiinngg RReeaaddlliinnee key binding names. - bbuuiillttiinn Names of shell builtin commands. May also be + bbuuiillttiinn Names of shell builtin commands. May also be specified as --bb. ccoommmmaanndd Command names. May also be specified as --cc. ddiirreeccttoorryy @@ -298,7 +314,7 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS ddiissaabblleedd Names of disabled shell builtins. eennaabblleedd Names of enabled shell builtins. - eexxppoorrtt Names of exported shell variables. May also be + eexxppoorrtt Names of exported shell variables. May also be specified as --ee. ffiillee File names. May also be specified as --ff. ffuunnccttiioonn @@ -307,17 +323,17 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS hheellppttooppiicc Help topics as accepted by the hheellpp builtin. hhoossttnnaammee - Hostnames, as taken from the file specified by + Hostnames, as taken from the file specified by the HHOOSSTTFFIILLEE shell variable. - jjoobb Job names, if job control is active. May also + jjoobb Job names, if job control is active. May also be specified as --jj. - kkeeyywwoorrdd Shell reserved words. May also be specified as + kkeeyywwoorrdd Shell reserved words. May also be specified as --kk. rruunnnniinngg Names of running jobs, if job control is active. sseerrvviiccee Service names. May also be specified as --ss. - sseettoopptt Valid arguments for the --oo option to the sseett + sseettoopptt Valid arguments for the --oo option to the sseett builtin. - sshhoopptt Shell option names as accepted by the sshhoopptt + sshhoopptt Shell option names as accepted by the sshhoopptt builtin. ssiiggnnaall Signal names. ssttooppppeedd Names of stopped jobs, if job control is active. @@ -335,15 +351,15 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS first argument ($$11) is the name of the command whose ar- guments are being completed, the second argument ($$22) is the word being completed, and the third argument ($$33) is - the word preceding the word being completed on the cur- - rent command line. When it finishes, the possible com- - pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY + the word preceding the word being completed on the cur- + rent command line. When it finishes, the possible com- + pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY array variable. --GG _g_l_o_b_p_a_t - The pathname expansion pattern _g_l_o_b_p_a_t is expanded to + The pathname expansion pattern _g_l_o_b_p_a_t is expanded to generate the possible completions. --PP _p_r_e_f_i_x - _p_r_e_f_i_x is added at the beginning of each possible com- + _p_r_e_f_i_x is added at the beginning of each possible com- pletion after all other options have been applied. --SS _s_u_f_f_i_x _s_u_f_f_i_x is appended to each possible completion after all @@ -353,11 +369,11 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS special variable as delimiters, and each resultant word is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t, in order to provide a mechanism for the words to contain - shell metacharacters or characters in the value of IIFFSS. - The possible completions are the members of the resul- + shell metacharacters or characters in the value of IIFFSS. + The possible completions are the members of the resul- tant list which match the word being completed. --XX _f_i_l_t_e_r_p_a_t - _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. + _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. It is applied to the list of possible completions gener- ated by the preceding options and arguments, and each completion matching _f_i_l_t_e_r_p_a_t is removed from the list. @@ -365,53 +381,52 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS case, any completion not matching _f_i_l_t_e_r_p_a_t is removed. The return value is true unless an invalid option is supplied, - an option other than --pp or --rr is supplied without a _n_a_m_e argu- - ment, an attempt is made to remove a completion specification - for a _n_a_m_e for which no specification exists, or an error occurs - adding a completion specification. + an option other than --pp, --rr, --DD, --EE, or --II is supplied without a + _n_a_m_e argument, an attempt is made to remove a completion speci- + fication for a _n_a_m_e for which no specification exists, or an er- + ror occurs adding a completion specification. ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEEII] [++oo _o_p_t_i_o_n] [_n_a_m_e] Modify completion options for each _n_a_m_e according to the _o_p_- _t_i_o_ns, or for the currently-executing completion if no _n_a_m_es are - supplied. If no _o_p_t_i_o_ns are given, display the completion op- - tions for each _n_a_m_e or the current completion. The possible - values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- - scribed above. The --DD option indicates that other supplied op- - tions should apply to the ``default'' command completion; that - is, completion attempted on a command for which no completion - has previously been defined. The --EE option indicates that other - supplied options should apply to ``empty'' command completion; - that is, completion attempted on a blank line. The --II option - indicates that other supplied options should apply to completion - on the initial non-assignment word on the line, or after a com- - mand delimiter such as ;; or ||, which is usually command name - completion. - - The return value is true unless an invalid option is supplied, + supplied. If no _o_p_t_i_o_ns are given, display the completion op- + tions for each _n_a_m_e or the current completion. The possible + values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- + scribed above. The --DD option indicates that other supplied op- + tions should apply to the command completion; that is, comple- + tion attempted on a command for which no completion has previ- + ously been defined. The --EE option indicates that other supplied + options should apply to command completion; that is, completion + attempted on a blank line. The --II option indicates that other + supplied options should apply to completion on the initial non- + assignment word on the line, or after a command delimiter such + as ;; or ||, which is usually command name completion. + + The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a _n_a_m_e for which no completion specification exists, or an output error occurs. ccoonnttiinnuuee [_n] Resume the next iteration of the enclosing ffoorr, wwhhiillee, uunnttiill, or - sseelleecctt loop. If _n is specified, resume at the _nth enclosing - loop. _n must be >= 1. If _n is greater than the number of en- - closing loops, the last enclosing loop (the ``top-level'' loop) - is resumed. The return value is 0 unless _n is not greater than - or equal to 1. + sseelleecctt loop. If _n is specified, resume at the _nth enclosing + loop. _n must be >= 1. If _n is greater than the number of en- + closing loops, the shell resumes the last enclosing loop (the + loop). The return value is 0 unless _n is not greater than or + equal to 1. ddeeccllaarree [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] ttyyppeesseett [--aaAAffFFggiiIIllnnrrttuuxx] [--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 + 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 with _n_a_m_e arguments, additional options, other than --ff and --FF, are ignored. When --pp is supplied without _n_a_m_e arguments, it will display the attributes and values of all variables having the attributes specified by the additional options. If no other - options are supplied with --pp, ddeeccllaarree will display the at- - tributes and values of all shell variables. The --ff option will - restrict the display to shell functions. The --FF option inhibits - the display of function definitions; only the function name and + options are supplied with --pp, ddeeccllaarree will display the attrib- + utes and values of all shell variables. The --ff option will re- + strict the display to shell functions. 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 each _n_a_m_e is defined are displayed as well. The --FF option implies @@ -420,17 +435,17 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS tion. It is ignored in all other cases. The --II option causes local variables to inherit the attributes (except the _n_a_m_e_r_e_f attribute) and value of any existing variable with the same _n_a_m_e - at a surrounding scope. If there is no existing variable, the + at a surrounding scope. If there is no existing variable, the local variable is initially unset. The following options can be - used to restrict output to variables with the specified attri- - bute or to give variables attributes: + used to restrict output to variables with the specified at- + tribute or to give variables attributes: --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss in - _b_a_s_h_(_1_)). + _b_a_s_h(1)). --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss in - _b_a_s_h_(_1_)). + _b_a_s_h(1)). --ff Use function names only. --ii The variable is treated as an integer; arithmetic evalua- - tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN in _b_a_s_h_(_1_)) is performed + tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN in _b_a_s_h(1)) is performed when the variable is assigned a value. --ll When the variable is assigned a value, all upper-case characters are converted to lower-case. The upper-case @@ -453,24 +468,24 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS --xx Mark _n_a_m_es for export to subsequent commands via the en- vironment. - Using `+' instead of `-' turns off the attribute instead, with - the exceptions that ++aa and ++AA may not be used to destroy array - variables and ++rr will not remove the readonly attribute. When - used in a function, ddeeccllaarree and ttyyppeesseett make each _n_a_m_e local, as - with the llooccaall command, unless the --gg option is supplied. 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. When using --aa or --AA and the compound assign- - ment syntax to create array variables, additional attributes do - not take effect until subsequent assignments. 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 as- - sign a value to an array variable without using the compound as- - signment syntax (see AArrrraayyss in _b_a_s_h_(_1_)), one of the _n_a_m_e_s is not - a valid shell variable name, an attempt is made to turn off - readonly 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. + Using instead of turns off the attribute instead, with the ex- + ceptions that ++aa and ++AA may not be used to destroy array vari- + ables and ++rr will not remove the readonly attribute. When used + in a function, ddeeccllaarree and ttyyppeesseett make each _n_a_m_e local, as with + the llooccaall command, unless the --gg option is supplied. If a vari- + able name is followed by =_v_a_l_u_e, the value of the variable is + set to _v_a_l_u_e. When using --aa or --AA and the compound assignment + syntax to create array variables, additional attributes do not + take effect until subsequent assignments. The return value is 0 + unless an invalid option is encountered, an attempt is made to + define a function using 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 in _b_a_s_h(1)), one of the _n_a_m_e_s is not a valid shell vari- + able name, an attempt is made to turn off readonly 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 di- @@ -479,17 +494,17 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS list with the ppuusshhdd command; the ppooppdd command removes entries from the list. The current directory is always the first direc- tory in the stack. - --cc Clears the directory stack by deleting all of the en- + --cc Clears the directory stack by deleting all of the en- tries. - --ll Produces a listing using full pathnames; the default + --ll Produces a listing using full pathnames; 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. ++_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. @@ -503,7 +518,7 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 re- ceives a SSIIGGHHUUPP. 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 ar- + to remove or mark all jobs; the --rr option without a _j_o_b_s_p_e_c ar- gument 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. @@ -511,14 +526,14 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS Output the _a_r_gs, separated by spaces, followed by a newline. The return status is 0 unless a write error occurs. If --nn is specified, the trailing newline is suppressed. If the --ee option - is given, interpretation of the following backslash-escaped - characters is enabled. The --EE option disables the interpreta- - tion of these escape characters, 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 es- - cape characters by default. eecchhoo does not interpret ---- to mean - the end of options. eecchhoo interprets the following escape se- - quences: + is given, interpretation of the following backslash-escaped + characters is enabled. The --EE option disables the interpreta- + tion of these escape characters, even on systems where they are + interpreted by default. The xxppgg__eecchhoo shell option may be used + to dynamically determine whether or not eecchhoo interprets any op- + tions and 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 \\cc suppress further output @@ -543,43 +558,44 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...] 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 en- - abled. 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 - shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading. - Bash will use the value of the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a - colon-separated list of directories in which to search for _f_i_l_e_- - _n_a_m_e. The default is system-dependent. The --dd option will - delete a builtin previously loaded with --ff. If no _n_a_m_e argu- - ments are given, or if the --pp option is supplied, a list of - shell builtins is printed. With no other option arguments, the - list consists of all enabled shell builtins. If --nn is supplied, - only disabled builtins are printed. If --aa is supplied, the list - printed includes all builtins, with an indication of whether or - not each is enabled. If --ss is supplied, the output is re- - stricted to the POSIX _s_p_e_c_i_a_l builtins. If no options are sup- - plied and a _n_a_m_e is not a shell builtin, eennaabbllee will attempt to - load _n_a_m_e from a shared object named _n_a_m_e, as if the command - were ``enable -f _n_a_m_e _n_a_m_e . 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. + 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 en- + abled. For example, to use the tteesstt binary found via the PPAATTHH + instead of the shell builtin version, run 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. BBaasshh will use the + value of the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a colon-separated + list of directories in which to search for _f_i_l_e_n_a_m_e, if _f_i_l_e_n_a_m_e + does not contain a slash. The default is system-dependent, and + may include to force a search of the current directory. 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. If no op- + tions are supplied and a _n_a_m_e is not a shell builtin, eennaabbllee + will attempt to load _n_a_m_e from a shared object named _n_a_m_e, as if + the command were 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 argument 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 + _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 can- not be executed for some reason, a non-interactive shell exits, unless the eexxeeccffaaiill shell option is enabled. In that case, it @@ -596,17 +612,19 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 names of all exported - variables is printed. The --nn option causes the export property + 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 names of all exported + variables 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 sup- plied with a _n_a_m_e that is not a function. + ffaallssee Does nothing, returns a non-zero status. + ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t] ffcc --ss [_p_a_t=_r_e_p] [_c_m_d] The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t @@ -618,48 +636,48 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to the current command (usually the ffcc command); otherwise 0 is equivalent to -1 and -0 is invalid. If _l_a_s_t is not specified, - it is set to 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 specified, 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- + it is set to the current command for listing (so that 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 + 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- 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. _C_o_m_m_a_n_d is interpreted the same as - _f_i_r_s_t above. 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 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. _C_o_m_m_a_n_d is interpreted the same as + _f_i_r_s_t above. A useful alias to use with this is so that typing + runs the last command beginning with and typing re-executes the + last command. - If the first form is used, the return value is 0 unless an in- - valid 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 in- + valid 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 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 _._._.] - 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 ex- + ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g ...] + 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 ex- pected 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 @@ -669,56 +687,60 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 1 each time the shell or a shell script is invoked. When an op- tion requires an argument, ggeettooppttss places that argument into the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automatically; - it must be manually reset between multiple calls to ggeettooppttss - within the same shell invocation if a new set of parameters is + it must be manually reset between multiple calls to ggeettooppttss + within the same shell invocation if a new set of parameters is to be used. When the end of options is encountered, ggeettooppttss exits with a re- turn value greater than zero. OOPPTTIINNDD is set to the index of the first non-option argument, and _n_a_m_e is set to ?. - ggeettooppttss normally parses the positional parameters, but if more - arguments are supplied as _a_r_g values, ggeettooppttss parses those in- + ggeettooppttss normally parses the positional parameters, but if more + arguments are supplied as _a_r_g values, ggeettooppttss parses those in- stead. - 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 OOPP-- - TTAARRGG and no diagnostic message is printed. + If ggeettooppttss detects an invalid option, it places ? into _n_a_m_e and, + if not silent, prints an error message and unsets OOPPTTAARRGG. If + ggeettooppttss is silent, it assigns the option character found to OOPP-- + TTAARRGG and does not print a diagnostic message. 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 + it sets the value of _n_a_m_e to a question mark (??), unsets OOPPTTAARRGG, + and prints a diagnostic message. If ggeettooppttss is silent, it sets + the value of _n_a_m_e to a colon (::) and sets OOPPTTAARRGG 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] Each time hhaasshh is invoked, the full pathname of the command _n_a_m_e - is determined by searching the directories in $$PPAATTHH and remem- + is determined by searching the directories in $$PPAATTHH and remem- bered. Any previously-remembered pathname is discarded. 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 filename of the command. The --rr option - causes the shell to forget all remembered locations. The --dd op- - tion 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 - 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 - 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 - or an invalid option is supplied. + --pp option is supplied, hhaasshh uses _f_i_l_e_n_a_m_e as the full filename + of the command. The --rr option causes the shell to forget all + remembered locations. Assigning to the PPAATTHH variable also + clears all hashed filenames. 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 pathname. The --ll option + causes output to be displayed in a format that may be reused as + input. If no arguments are given, or if only --ll is supplied, + information about remembered commands is printed. The --tt, --dd, + and --pp options (the options that act on the _n_a_m_e arguments) are + mutually exclusive. Only one will be active. If more than one + is supplied, --tt has higher priority than --pp, and both are higher + priority than --dd. The return status is true unless a _n_a_m_e is + not found or an invalid option is supplied. hheellpp [--ddmmss] [_p_a_t_t_e_r_n] Display helpful information about builtin commands. If _p_a_t_t_e_r_n @@ -737,18 +759,19 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS hhiissttoorryy --dd _o_f_f_s_e_t hhiissttoorryy --dd _s_t_a_r_t-_e_n_d hhiissttoorryy --aannrrww [_f_i_l_e_n_a_m_e] - hhiissttoorryy --pp _a_r_g [_a_r_g _._._.] - hhiissttoorryy --ss _a_r_g [_a_r_g _._._.] + hhiissttoorryy --pp _a_r_g [_a_r_g ...] + 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 - following meanings: + _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. If _f_i_l_e_n_a_m_e is not supplied and + HHIISSTTFFIILLEE is unset or null, the --aa,, --nn,, --rr,, and --ww options have + no effect. 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. If _o_f_f_s_e_t @@ -760,10 +783,10 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS Delete the range of history entries between positions _s_t_a_r_t and _e_n_d, inclusive. Positive and negative values for _s_t_a_r_t and _e_n_d are interpreted as described above. - --aa Append the ``new'' history lines to the history file. - These are history lines entered since the beginning of - the current bbaasshh session, but not already appended to the - history file. + --aa Append the history lines to the history file. These are + history lines entered since the beginning of the current + bbaasshh session, but not already appended to the history + file. --nn Read the history lines not already read from the history file into the current history list. These are lines ap- pended to the history file since the beginning of the @@ -772,23 +795,23 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS the current history list. --ww Write the current history list to the history file, over- writing 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 variable is set, the time stamp informa- - tion associated with each history entry is written to the his- - tory file, marked with the history comment character. When the - history file is read, lines beginning with the history comment - character followed immediately by a digit are interpreted as + If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa- + tion associated with each history entry is written to the his- + tory file, marked with the history comment character. When the + history file is read, lines beginning with the history comment + character followed immediately by a digit are interpreted as timestamps for the following history entry. 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 or range - is supplied as an argument to --dd, or the history expansion sup- + reading or writing the history file, an invalid _o_f_f_s_e_t or range + is supplied as an argument to --dd, or the history expansion sup- plied as an argument to --pp fails. jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ] @@ -821,46 +844,46 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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. The --LL option is - equivalent to --ll. kkiillll returns true if at least one signal was + --ll is a number specifying either a signal number or the exit + status of a process terminated by a signal. The --LL option is + equivalent to --ll. kkiillll returns true if at least one signal was successfully sent, or false if an error occurs or an invalid op- tion is encountered. lleett _a_r_g [_a_r_g ...] Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH-- - MMEETTIICC EEVVAALLUUAATTIIOONN in _b_a_s_h_(_1_)). If the last _a_r_g evaluates to 0, + MMEETTIICC EEVVAALLUUAATTIIOONN in _b_a_s_h(1)). 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- tion and its children. If _n_a_m_e is -, the set of shell options is made local to the function in which llooccaall is invoked: shell - options changed using the sseett builtin inside the function are - restored to their original values when the function returns. - The restore is effected as if a series of sseett commands were exe- - cuted to restore the values that were in place before the func- - tion. With no operands, llooccaall writes a list of 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, or _n_a_m_e is a - readonly variable. + options changed using the sseett builtin inside the function after + the call to llooccaall are restored to their original values when the + function returns. The restore is effected as if a series of sseett + commands were executed to restore the values that were in place + before the function. With no operands, llooccaall writes a list of + 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, + or _n_a_m_e is a readonly variable. llooggoouutt Exit a login shell. - mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC + mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] rreeaaddaarrrraayy [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] - Read lines from the standard input into the indexed array vari- - able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- - plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if + Read lines from the standard input into the indexed array vari- + able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- + plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if supplied, have the following meanings: - --dd The first character of _d_e_l_i_m is used to terminate each - input line, rather than newline. If _d_e_l_i_m is the empty + --dd The first character of _d_e_l_i_m is used to terminate each + input line, rather than newline. If _d_e_l_i_m is the empty string, mmaappffiillee will terminate a line when it reads a NUL character. --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are @@ -892,28 +915,26 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS ppooppdd [-nn] [+_n] [-_n] Removes entries from the directory stack. The elements are num- - bered from 0 starting at the first directory listed by ddiirrss. - With no arguments, ppooppdd removes the top directory from the + bered from 0 starting at the first directory listed by ddiirrss. + With no arguments, ppooppdd removes the top directory from the stack, and changes to the new top directory. Arguments, if sup- plied, have the following meanings: --nn Suppresses the normal change of directory when removing directories from the stack, so that only the stack is ma- nipulated. - ++_n Removes the _nth entry counting from the left of the list - shown by ddiirrss, starting with zero, from the stack. For - example: ``popd +0'' removes the first directory, ``popd - +1'' the second. + ++_n Removes the _nth entry counting from the left of the list + shown by ddiirrss, starting with zero, from the stack. For + example: removes the first directory, 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 - last. + shown by ddiirrss, starting with zero. For example: removes + the last directory, the next to last. If the top element of the directory stack is modified, and the _-_n option was not supplied, ppooppdd uses the ccdd builtin to change to the directory at the top of the stack. If the ccdd fails, ppooppdd returns a non-zero value. - Otherwise, ppooppdd returns false if an invalid option is encoun- + Otherwise, ppooppdd returns false if an invalid option is encoun- tered, the directory stack is empty, or a non-existent directory stack entry is specified. @@ -932,40 +953,56 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS output, character escape sequences, which are converted and copied to the standard output, and format 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) format specifications, pprriinnttff - interprets the following extensions: + addition to the standard _p_r_i_n_t_f(3) format characters ccssnnddiioouuxxXXee-- + EEffFFggGGaaAA, pprriinnttff interprets the following additional format spec- + ifiers: %%bb causes pprriinnttff to expand backslash escape sequences in the corresponding _a_r_g_u_m_e_n_t in the same way as eecchhoo --ee. %%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. - %%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_- + format that can be reused as shell input. %%qq and %%QQ use + the $$ quoting style if any characters in the argument + string require it, and backslash quoting otherwise. If + the format string uses the _p_r_i_n_t_f alternate form, these + two formats quote the argument string using single + quotes. + %%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_- _m_e_n_t before quoting it. %%((_d_a_t_e_f_m_t))TT - causes pprriinnttff to output the date-time string resulting - from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). + causes pprriinnttff to output the date-time string resulting + from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). The corresponding _a_r_g_u_m_e_n_t is an integer representing the number of seconds since the epoch. Two special argument values may be used: -1 represents the current time, and -2 represents the time the shell was invoked. If no ar- gument is specified, conversion behaves as if -1 had been - given. This is an exception to the usual pprriinnttff behav- + given. This is an exception to the usual pprriinnttff behav- ior. - The %b, %q, and %T directives all use the field width and preci- - sion arguments from the format specification and write that many - bytes from (or use that wide a field for) the expanded argument, - which usually contains more characters than the original. + The %b, %q, and %T format specifiers all use the field width and + precision arguments from the format specification and write that + many bytes from (or use that wide a field for) the expanded ar- + gument, which usually contains more characters than the origi- + nal. - Arguments to non-string format specifiers are treated as C con- + The %n format specifier accepts a corresponding argument that is + treated as a shell variable name. + + The %s and %c format specifiers accept an l (long) modifier, + which forces them to convert the argument string to a wide-char- + acter string and apply any supplied field width and precision in + terms of characters, not bytes. + + Arguments to non-string format specifiers are treated as C con- stants, except that a leading plus or minus sign is allowed, and if the leading character is a single or double quote, the value is the ASCII value of the following character. 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 - value is zero on success, non-zero on failure. + 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 if an invalid option is sup- + plied or a write or assignment error occurs. ppuusshhdd [--nn] [+_n] [-_n] ppuusshhdd [--nn] [_d_i_r] @@ -986,7 +1023,7 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS _d_i_r Adds _d_i_r to the directory stack at the top After the stack has been modified, if the --nn option was not sup- - plied, ppuusshhdd uses the ccdd builtin to change to the directory at + plied, ppuusshhdd uses the ccdd builtin to change to the directory at the top of the stack. If the ccdd fails, ppuusshhdd returns a non-zero value. @@ -1007,11 +1044,11 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS occurs while reading the name of the current directory or an in- valid option is supplied. - rreeaadd [--eerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] [--pp - _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...] + rreeaadd [--EEeerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] + [--pp _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...] One line is read from the standard input, or from the file de- scriptor _f_d supplied as an argument to the --uu option, split into - words as described in _b_a_s_h_(_1_) under WWoorrdd SSpplliittttiinngg, and the + words as described in _b_a_s_h (1) under WWoorrdd SSpplliittttiinngg, 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. If there are more words than names, the remaining words and their intervening delimiters are assigned to @@ -1019,8 +1056,8 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS stream than names, the remaining names are assigned empty val- ues. The characters in IIFFSS are used to split the line into words using the same rules the shell uses for expansion (de- - scribed in _b_a_s_h_(_1_) under WWoorrdd SSpplliittttiinngg). The backslash charac- - ter (\\) may be used to remove any special meaning for the next + scribed in _b_a_s_h (1) under WWoorrdd SSpplliittttiinngg). The backslash char- + acter (\\) may be used to remove any special meaning for the next character read and for line continuation. Options, if supplied, have the following meanings: --aa _a_n_a_m_e @@ -1030,30 +1067,36 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS nored. --dd _d_e_l_i_m The first character of _d_e_l_i_m is used to terminate the in- - put line, rather than newline. If _d_e_l_i_m is the empty - string, rreeaadd will terminate a line when it reads a NUL + put line, rather than newline. If _d_e_l_i_m is the empty + string, rreeaadd will terminate a line when it reads a NUL character. - --ee If the standard input is coming from a terminal, rreeaaddlliinnee - (see RREEAADDLLIINNEE in _b_a_s_h_(_1_)) is used to obtain the line. - Readline uses the current (or default, if line editing - was not previously active) editing settings, but uses - readline's default filename completion. + --ee If the standard input is coming from a terminal, rreeaadd + uses rreeaaddlliinnee (see RREEAADDLLIINNEE in _b_a_s_h(1)) to obtain the + line. Readline uses the current (or default, if line + editing was not previously active) editing settings, but + uses readline's default filename completion. + --EE If the standard input is coming from a terminal, rreeaadd + uses rreeaaddlliinnee (see RREEAADDLLIINNEE in _b_a_s_h(1)) to obtain the + line. Readline uses the current (or default, if line + editing was not previously active) editing settings, but + uses bash's default completion, including programmable + completion. --ii _t_e_x_t If rreeaaddlliinnee is being used to read the line, _t_e_x_t is placed into the editing buffer before editing begins. --nn _n_c_h_a_r_s rreeaadd returns after reading _n_c_h_a_r_s characters rather than waiting for a complete line of input, but honors a delim- - iter if fewer than _n_c_h_a_r_s characters are read before the + iter if fewer than _n_c_h_a_r_s characters are read before the delimiter. --NN _n_c_h_a_r_s - rreeaadd returns after reading exactly _n_c_h_a_r_s characters - rather than waiting for a complete line of input, unless - EOF is encountered or rreeaadd times out. Delimiter charac- - ters encountered in the input are not treated specially - and do not cause rreeaadd to return until _n_c_h_a_r_s characters - are read. The result is not split on the characters in - IIFFSS; the intent is that the variable is assigned exactly + rreeaadd returns after reading exactly _n_c_h_a_r_s characters + rather than waiting for a complete line of input, unless + EOF is encountered or rreeaadd times out. Delimiter charac- + ters encountered in the input are not treated specially + and do not cause rreeaadd to return until _n_c_h_a_r_s characters + are read. The result is not split on the characters in + IIFFSS; the intent is that the variable is assigned exactly the characters read (with the exception of backslash; see the --rr option below). --pp _p_r_o_m_p_t @@ -1061,8 +1104,8 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 then be used as a + slash is considered to be part of the line. In particu- + lar, a backslash-newline pair may not then be used as a line continuation. --ss Silent mode. If input is coming from a terminal, charac- ters are not echoed. @@ -1075,14 +1118,17 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS reading input from a terminal, pipe, or other special file; it has no effect when reading from regular files. If rreeaadd times out, rreeaadd saves any partial input read into - the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- - turns immediately, without trying to read any data. The - exit status is 0 if input is available on the specified - file descriptor, or the read will return EOF, non-zero - otherwise. The exit status is greater than 128 if the + the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- + turns immediately, without trying to read any data. The + exit status is 0 if input is available on the specified + file descriptor, or the read will return EOF, non-zero + otherwise. The exit status is greater than 128 if the timeout is exceeded. --uu _f_d Read input from file descriptor _f_d. + Other than the case where _d_e_l_i_m is the empty string, rreeaadd ig- + nores any NUL characters in the input. + If no _n_a_m_e_s are supplied, the line read, without the ending de- limiter but otherwise unmodified, is assigned to the variable RREEPPLLYY. The exit status is zero, unless end-of-file is encoun- @@ -1092,19 +1138,19 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS as the argument to --uu. rreeaaddoonnllyy [--aaAAff] [--pp] [_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 - marked. The --aa option restricts the variables to indexed ar- - rays; the --AA option restricts the variables to associative ar- + 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 indexed ar- + rays; the --AA option restricts the variables to associative ar- rays. If both options are supplied, --AA takes precedence. 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 other options may be - used to restrict the output to a subset of the set of readonly - names. 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 variable is set to _w_o_r_d. The return - status is 0 unless an invalid option is encountered, one of the + used to restrict the output to a subset of the set of readonly + names. 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 variable 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. @@ -1113,14 +1159,14 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS fied by _n to its caller. If _n is omitted, the return status is that of the last command executed in the function body. If rree-- ttuurrnn is executed by a trap handler, the last command used to de- - termine the status is the last command executed before the trap - handler. If rreettuurrnn is executed during a DDEEBBUUGG trap, the last - command used to determine the status is the last command exe- - cuted by the trap handler before rreettuurrnn was invoked. If rreettuurrnn - is 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 + termine the status is the last command executed before the trap + handler. If rreettuurrnn is executed during a DDEEBBUUGG trap, the last + command used to determine the status is the last command exe- + cuted by the trap handler before rreettuurrnn was invoked. If rreettuurrnn + is 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 _n is supplied, the return value is its least signif- icant 8 bits. The return status is non-zero if rreettuurrnn is sup- plied a non-numeric argument, or is used outside a function and @@ -1130,15 +1176,16 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS sseett [--aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] - Without options, display the name and value of each shell vari- - able in a format that can be reused as input for setting or re- + sseett --oo + sseett ++oo Without options, display the name and value of each shell vari- + able in a format that can be reused as input for setting or re- setting the currently-set variables. Read-only variables cannot be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. The output is sorted according to the current locale. When options are specified, they set or unset shell attributes. Any argu- ments remaining after option processing 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 Each variable or function that is created or modified is given the export attribute and marked for export to the @@ -1146,45 +1193,45 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS --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 _p_i_p_e_l_i_n_e (which may consist of a - single _s_i_m_p_l_e _c_o_m_m_a_n_d), a _l_i_s_t, or a _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d - (see SSHHEELLLL GGRRAAMMMMAARR in _b_a_s_h_(_1_)), exits with a non-zero - status. The shell does not exit if the command that - fails is part of the command list immediately following + --ee Exit immediately if a _p_i_p_e_l_i_n_e (which may consist of a + single _s_i_m_p_l_e _c_o_m_m_a_n_d), a _l_i_s_t, or a _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d + (see SSHHEELLLL GGRRAAMMMMAARR in _b_a_s_h(1)), 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 following the iiff or eelliiff reserved words, part of any command executed in a &&&& or |||| list except the command following the fi- nal &&&& or ||||, any command in a pipeline but the last, or - if the command's return value is being inverted with !!. - If a compound command other than a subshell returns a - non-zero status because a command failed while --ee was - being ignored, the shell does not exit. A trap on EERRRR, + if the command's return value is being inverted with !!. + If a compound command other than a subshell returns a + non-zero status because a command failed while --ee was + being ignored, the shell does not exit. A trap on EERRRR, if set, is executed before the shell exits. This option applies to the shell environment and each subshell envi- ronment separately (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT in - _b_a_s_h_(_1_)), and may cause subshells to exit before execut- + _b_a_s_h(1)), and may cause subshells to exit before execut- ing all the commands in the subshell. - If a compound command or shell function executes in a - context where --ee is being ignored, none of the commands - executed within the compound command or function body - will be affected by the --ee setting, even if --ee is set - and a command returns a failure status. If a compound - command or shell function sets --ee while executing in a - context where --ee is ignored, that setting will not have - any effect until the compound command or the command + If a compound command or shell function executes in a + context where --ee is being ignored, none of the commands + executed within the compound command or function body + will be affected by the --ee setting, even if --ee is set + and a command returns a failure status. If a compound + command or shell function sets --ee while executing in a + context where --ee is ignored, that setting will not have + any effect until the compound command or the command containing the function call completes. --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 in _b_a_s_h_(_1_)). All processes - run in a separate process group. When a background job - completes, the shell prints a line containing its exit + --mm Monitor mode. Job control is enabled. This option is + on by default for interactive shells on systems that + support it (see JJOOBB CCOONNTTRROOLL in _b_a_s_h(1)). All processes + run in a separate process group. When a background job + completes, the shell prints a line containing its exit status. --nn Read commands but do not execute them. This may be used to check a shell script for syntax errors. This is ig- @@ -1208,13 +1255,12 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS hhaasshhaallll Same as --hh. hhiisstteexxppaanndd Same as --HH. - hhiissttoorryy Enable command history, as described in _b_a_s_h_(_1_) + hhiissttoorryy Enable command history, as described in _b_a_s_h(1) under HHIISSTTOORRYY. This option is on by default in interactive shells. iiggnnoorreeeeooff - The effect is as if the shell command ``IG- - NOREEOF=10'' had been executed (see SShheellll VVaarrii-- - aabblleess in _b_a_s_h_(_1_)). + The effect is as if the shell command had been + executed (see SShheellll VVaarriiaabblleess in _b_a_s_h(1)). kkeeyywwoorrdd Same as --kk. mmoonniittoorr Same as --mm. nnoocclloobbbbeerr @@ -1228,27 +1274,27 @@ BBAASSHH 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 - operation differs from the POSIX standard to - match the standard (_p_o_s_i_x _m_o_d_e). See SSEEEE AALLSSOO - in _b_a_s_h_(_1_) for a reference to a document that + ppoossiixx Change the behavior of bbaasshh where the default + operation differs from the POSIX standard to + match the standard (_p_o_s_i_x _m_o_d_e). See SSEEEE AALLSSOO + in _b_a_s_h(1) for a reference to a document that details how posix mode affects bash's behavior. pprriivviilleeggeedd Same as --pp. vveerrbboossee Same as --vv. - vvii Use a vi-style command line editing interface. + vvii Use a vi-style command line editing interface. This also affects the editing interface used for rreeaadd --ee. 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 + If --oo is supplied with no _o_p_t_i_o_n_-_n_a_m_e, sseett prints the + current shell option settings. If ++oo is supplied with + no _o_p_t_i_o_n_-_n_a_m_e, sseett prints a series of sseett commands to + recreate the current option settings 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 @@ -1258,27 +1304,27 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS started with the effective user (group) id not equal to the real user (group) id, and the --pp option is not sup- plied, these actions are taken and the effective user id - is set to the real user id. If the --pp option is sup- - plied at startup, the effective user id is not reset. - Turning this option off causes the effective user and + is set to the real user id. If the --pp option is sup- + plied 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 ids. --rr Enable restricted shell mode. This option cannot be un- set once it has been set. --tt Exit after reading and executing one command. --uu Treat unset variables and parameters other than the spe- - cial parameters "@" and "*", or array variables sub- - scripted with "@" or "*", as an error when performing - parameter expansion. If expansion is attempted on an - unset variable or parameter, the shell prints an error - message, and, if not interactive, exits with a non-zero - status. + cial parameters and or array variables subscripted with + or as an error when performing parameter expansion. If + expansion is attempted on an unset variable or parame- + ter, the shell prints an error message, and, if not in- + teractive, 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 command, sseelleecctt command, or arithmetic ffoorr command, dis- - play the expanded value of PPSS44, followed by the command - and its expanded arguments or associated word list. + play the expanded value of PPSS44, followed by the command + and its expanded arguments or associated word list, to + standard error. --BB The shell performs brace expansion (see BBrraaccee EExxppaannssiioonn - in _b_a_s_h_(_1_)). This is on by default. + in _b_a_s_h(1)). This is on by default. --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- @@ -1289,17 +1335,17 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 resolve symbolic links when - executing commands such as ccdd that change the current + --PP If set, the shell does not resolve 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 change the current directory. --TT If set, any traps on DDEEBBUUGG and RREETTUURRNN are inherited by shell functions, command substitutions, and commands ex- - ecuted in a subshell environment. The DDEEBBUUGG and RREETTUURRNN + ecuted in a subshell environment. The DDEEBBUUGG and RREETTUURRNN traps are 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 with a --. @@ -1311,25 +1357,25 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS The options are off by default unless otherwise noted. Using + rather than - causes these options to be turned off. The op- tions can also be specified as arguments to an invocation of the - shell. The current set of options may be found in $$--. The re- - turn status is always true unless an invalid option is encoun- + shell. The current set of options may be found in $$--. The re- + turn 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 un- - set. _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 param- - eters are not changed. The return status is greater than zero + The positional parameters from _n+1 ... are renamed to $$11 ........ + Parameters represented by the numbers $$## down to $$##-_n+1 are un- + set. _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 para- + meters 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 settings controlling optional shell behav- - ior. The settings can be either those listed below, or, if the + Toggle the values of settings controlling optional shell behav- + ior. The settings can be either those listed below, or, if the --oo option is used, those available with the --oo option to the sseett builtin command. With no options, or with the --pp option, a list - of all settable options is displayed, with an indication of + of all settable options is displayed, with an indication of whether or not each is set; if _o_p_t_n_a_m_e_s are supplied, the output is restricted to those options. The --pp option causes output to be displayed in a form that may be reused as input. Other op- @@ -1338,43 +1384,45 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS --uu Disable (unset) each _o_p_t_n_a_m_e. --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, sshhoopptt - shows only those options which are set or unset, respectively. - Unless otherwise noted, the sshhoopptt options are disabled (unset) + If either --ss or --uu is used with no _o_p_t_n_a_m_e arguments, sshhoopptt + shows only those options which are set or unset, respectively. + 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 op- - tions, 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 op- + tions, 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: + aarrrraayy__eexxppaanndd__oonnccee + If set, the shell suppresses multiple evaluation of as- + sociative and indexed array subscripts during arithmetic + expression evaluation, while executing builtins that can + perform variable assignments, and while executing + builtins that perform array dereferencing. aassssoocc__eexxppaanndd__oonnccee - If set, the shell suppresses multiple evaluation of as- - sociative array subscripts during arithmetic expression - evaluation, while executing builtins that can perform - variable assignments, and while executing builtins that - perform array dereferencing. - aauuttooccdd If set, a command name that is the name of a directory - is executed as if it were the argument to the ccdd com- + Deprecated; a synonym for aarrrraayy__eexxppaanndd__oonnccee. + aauuttooccdd If set, a command name that is the name of a directory + is executed as if it were the argument to the ccdd com- mand. This option is only used by interactive shells. 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 checked for are transposed characters, a missing charac- - ter, and one character too many. If a correction is - found, the corrected filename 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 filename 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- @@ -1383,10 +1431,10 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS formed. cchheecckkjjoobbss If set, bbaasshh lists the status of any stopped and running - jobs before exiting an interactive shell. If any jobs + jobs before exiting an interactive shell. If any jobs are running, this causes the exit to be deferred until a second exit is attempted without an intervening command - (see JJOOBB CCOONNTTRROOLL in _b_a_s_h_(_1_)). The shell always post- + (see JJOOBB CCOONNTTRROOLL in _b_a_s_h(1)). The shell always post- pones exiting if any jobs are stopped. cchheecckkwwiinnssiizzee If set, bbaasshh checks the window size after each external @@ -1397,7 +1445,7 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS line command in the same history entry. This allows easy re-editing of multi-line commands. This option is enabled by default, but only has an effect if command - history is enabled, as described in _b_a_s_h_(_1_) under HHIISS-- + history is enabled, as described in _b_a_s_h(1) under HHIISS-- TTOORRYY. ccoommppaatt3311 ccoommppaatt3322 @@ -1408,76 +1456,75 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS ccoommppaatt4444 ccoommppaatt5500 These control aspects of the shell's compatibility mode - (see SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE in _b_a_s_h_(_1_)). + (see SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE in _b_a_s_h(1)). ccoommpplleettee__ffuullllqquuoottee If set, bbaasshh quotes all shell metacharacters in file- names and directory names when performing completion. If not set, bbaasshh removes metacharacters such as the dol- - lar 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 ex- - pand 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 back- - slashes to quote completed filenames. This variable is - set by default, which is the default bash behavior in + lar 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 ex- + pand 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 back- + slashes to quote completed filenames. This variable is + set by default, which is the default bash behavior in versions through 4.2. ddiirreexxppaanndd - If set, bbaasshh replaces directory names with the results - of word expansion when performing filename completion. - This changes the contents of the readline editing buf- - fer. If not set, bbaasshh attempts to preserve what the + If set, bbaasshh replaces directory names with the results + of word expansion when performing filename completion. + This changes the contents of the readline editing + buffer. If not set, bbaasshh attempts to preserve what the user typed. ddiirrssppeellll - If set, bbaasshh attempts spelling correction on directory - names during word completion if the directory name ini- + If set, bbaasshh attempts spelling correction on directory + names during word completion if the directory name ini- tially supplied does not exist. - ddoottgglloobb If set, bbaasshh includes filenames beginning with a `.' in - the results of pathname expansion. The filenames ````..'''' - and ````....'''' must always be matched explicitly, even if - ddoottgglloobb is set. + ddoottgglloobb If set, bbaasshh includes filenames beginning with a in the + results of pathname expansion. The filenames and must + always be matched explicitly, even if ddoottgglloobb is set. 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 in _b_a_s_h_(_1_) un- + If set, aliases are expanded as described in _b_a_s_h(1) un- der AALLIIAASSEESS. This option is enabled by default for in- teractive shells. eexxttddeebbuugg If set at shell invocation, or in a shell startup file, arrange to execute the debugger profile before the shell - starts, identical to the ----ddeebbuuggggeerr option. If set af- - ter invocation, behavior intended for use by debuggers + starts, identical to the ----ddeebbuuggggeerr option. If set af- + ter invocation, 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), the shell + 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), the shell simulates a call to rreettuurrnn. - 44.. BBAASSHH__AARRGGCC and BBAASSHH__AARRGGVV are updated as described - in their descriptions in _b_a_s_h_(_1_)). + 44.. BBAASSHH__AARRGGCC and BBAASSHH__AARRGGVV are updated as described + in their descriptions in _b_a_s_h(1)). - 55.. Function tracing is enabled: command substitu- + 55.. Function tracing is enabled: command substitu- tion, shell functions, and subshells invoked with (( _c_o_m_m_a_n_d )) inherit the DDEEBBUUGG and RREETTUURRNN traps. @@ -1486,12 +1533,12 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS _c_o_m_m_a_n_d )) inherit the EERRRR trap. eexxttgglloobb If set, the extended pattern matching features described - in _b_a_s_h_(_1_) under PPaatthhnnaammee EExxppaannssiioonn are enabled. + in _b_a_s_h(1) 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 - quotes. This option is enabled by default. + 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 @@ -1501,13 +1548,13 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 in _b_a_s_h_(_1_) for a - description of FFIIGGNNOORREE. This option is enabled by de- + ble completions. See SSHHEELLLL VVAARRIIAABBLLEESS in _b_a_s_h(1) for a + description of FFIIGGNNOORREE. This option is enabled by de- fault. gglloobbaasscciiiirraannggeess - If set, range expressions used in pattern matching - bracket expressions (see PPaatttteerrnn MMaattcchhiinngg in _b_a_s_h_(_1_)) + If set, range expressions used in pattern matching + bracket expressions (see PPaatttteerrnn MMaattcchhiinngg in _b_a_s_h(1)) behave as if in the traditional C locale when performing comparisons. That is, the current locale's collating sequence is not taken into account, so bb will not col- @@ -1516,13 +1563,13 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS gglloobbsskkiippddoottss If set, pathname expansion will never match the file- - names ````..'''' and ````....'''', even if the pattern begins with - a ````..''''. This option is enabled by default. + names and even if the pattern begins with a This option + is enabled by default. gglloobbssttaarr If set, the pattern **** used in a pathname expansion con- - text will match all files and zero or more directories - and subdirectories. If the pattern is followed by a //, + text will match all files and zero or more directories + and subdirectories. If the pattern is followed by a //, only directories and subdirectories match. ggnnuu__eerrrrffmmtt @@ -1535,21 +1582,21 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS its, 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 in - _b_a_s_h_(_1_)). This is enabled by default. + perform hostname completion when a word containing a @@ + is being completed (see CCoommpplleettiinngg under RREEAADDLLIINNEE in + _b_a_s_h(1)). This is enabled by default. hhuuppoonneexxiitt If set, bbaasshh will send SSIIGGHHUUPP to all jobs when an inter- @@ -1563,8 +1610,8 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 in _b_a_s_h_(_1_)). This + and all remaining characters on that line to be ignored + in an interactive shell (see CCOOMMMMEENNTTSS in _b_a_s_h(1)). This option is enabled by default. llaassttppiippee @@ -1572,7 +1619,7 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS the last command of a pipeline not executed in the back- ground in the current shell environment. - 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. @@ -1583,32 +1630,31 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS tribute is not inherited. llooccaallvvaarr__uunnsseett - If set, calling uunnsseett on local variables in previous - function scopes marks them so subsequent lookups find - them unset until that function returns. This is identi- - cal to the behavior of unsetting local variables at the + If set, calling uunnsseett on local variables in previous + function scopes marks them so subsequent lookups find + them unset until that function returns. This is identi- + cal to the behavior of unsetting local variables at the current function scope. llooggiinn__sshheellll - The shell sets this option if it is started as a login - shell (see IINNVVOOCCAATTIIOONN in _b_a_s_h_(_1_)). The value may not be + The shell sets this option if it is started as a login + shell (see IINNVVOOCCAATTIIOONN in _b_a_s_h(1)). 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- - played. + been accessed since the last time it was checked, bbaasshh + displays the message nnoo__eemmppttyy__ccmmdd__ccoommpplleettiioonn - If set, and rreeaaddlliinnee is being used, bbaasshh will not at- - tempt to search the PPAATTHH for possible completions when + If set, and rreeaaddlliinnee is being used, bbaasshh will not at- + tempt 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 in _b_a_s_h_(_1_)). + EExxppaannssiioonn in _b_a_s_h(1)). nnooccaasseemmaattcchh If set, bbaasshh matches patterns in a case-insensitive @@ -1618,42 +1664,42 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS pletions as part of programmable completion. nnooeexxppaanndd__ttrraannssllaattiioonn - If set, bbaasshh encloses the translated results of $"..." + If set, bbaasshh encloses the translated results of $$... quoting in single quotes instead of double quotes. If the string is not translated, this has no effect. nnuullllgglloobb - If set, bbaasshh allows patterns which match no files (see - PPaatthhnnaammee EExxppaannssiioonn in _b_a_s_h_(_1_)) to expand to a null - string, rather than themselves. + If set, pathname expansion patterns which match no files + (see PPaatthhnnaammee EExxppaannssiioonn in _b_a_s_h(1)) expand to nothing + and are removed, rather than expanding to themselves. ppaattssuubb__rreeppllaacceemmeenntt If set, bbaasshh expands occurrences of && in the replacement string of pattern substitution to the text matched by the pattern, as described under PPaarraammeetteerr EExxppaannssiioonn in - _b_a_s_h_(_1_). This option is enabled by default. + _b_a_s_h(1). This option is enabled by default. pprrooggccoommpp If set, the programmable completion facilities (see PPrroo-- - ggrraammmmaabbllee CCoommpplleettiioonn in _b_a_s_h_(_1_)) are enabled. This op- + ggrraammmmaabbllee CCoommpplleettiioonn in _b_a_s_h(1)) are enabled. This op- tion is enabled by default. pprrooggccoommpp__aalliiaass - If set, and programmable completion is enabled, bbaasshh - treats a command name that doesn't have any completions - as a possible alias and attempts alias expansion. If it - has an alias, bbaasshh attempts programmable completion us- + If set, and programmable completion is enabled, bbaasshh + treats a command name that doesn't have any completions + as a possible alias and attempts alias expansion. If it + has an alias, bbaasshh attempts programmable completion us- ing the command word resulting from the expanded alias. pprroommppttvvaarrss If set, prompt strings undergo parameter expansion, com- mand substitution, arithmetic expansion, and quote re- moval after being expanded as described in PPRROOMMPPTTIINNGG in - _b_a_s_h_(_1_). This option is enabled by default. + _b_a_s_h(1). This option is enabled by default. rreessttrriicctteedd__sshheellll The shell sets this option if it is started in re- - stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL in _b_a_s_h_(_1_)). The + stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL in _b_a_s_h(1)). The value may not be changed. This is not reset when the startup files are executed, allowing the startup files to discover whether or not a shell is restricted. @@ -1670,38 +1716,39 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS vvaarrrreeddiirr__cclloossee If set, the shell automatically closes file descriptors - assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see RREE-- - DDIIRREECCTTIIOONN in _b_a_s_h_(_1_)) instead of leaving them open when - the command completes. + assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see + RREEDDIIRREECCTTIIOONN in _b_a_s_h(1)) instead of leaving them open + when the command completes. xxppgg__eecchhoo If set, the eecchhoo builtin expands backslash-escape se- - quences by default. + quences by default. If the ppoossiixx shell option is also + enabled, eecchhoo does not interpret any options. ssuussppeenndd [--ff] - Suspend the execution of this shell until it receives a SSIIGGCCOONNTT - signal. A login shell, or a shell without job control enabled, - cannot be suspended; the --ff option can be used to override this - and force the suspension. The return status is 0 unless the - shell is a login shell or job control is not enabled and --ff is + Suspend the execution of this shell until it receives a SSIIGGCCOONNTT + signal. A login shell, or a shell without job control enabled, + cannot be suspended; the --ff option can be used to override this + and force the suspension. The return status is 0 unless the + shell is a login shell or job control is not enabled and --ff is not supplied. tteesstt _e_x_p_r [[ _e_x_p_r ]] Return a status of 0 (true) or 1 (false) depending on the evalu- - ation of the conditional expression _e_x_p_r. Each operator and op- - erand must be a separate argument. Expressions are composed of - the primaries described in _b_a_s_h_(_1_) under CCOONNDDIITTIIOONNAALL EEXXPPRREESS-- + ation of the conditional expression _e_x_p_r. Each operator and + operand must be a separate argument. Expressions are composed + of the primaries described in _b_a_s_h(1) under CCOONNDDIITTIIOONNAALL EEXXPPRREESS-- SSIIOONNSS. tteesstt does not accept any options, nor does it accept and ignore an argument of ---- as signifying the end of options. - Expressions may be combined using the following operators, - listed in decreasing order of precedence. The evaluation de- - pends on the number of arguments; see below. Operator prece- + Expressions may be combined using the following operators, + listed in decreasing order of precedence. The evaluation de- + pends on the number of arguments; see below. Operator prece- dence is used when there are five or more arguments. !! _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. @@ -1720,137 +1767,159 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 in - _b_a_s_h_(_1_) under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the expression is + _b_a_s_h(1) 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 The following conditions are applied in the order listed. - If the second argument is one of the binary conditional - operators listed in _b_a_s_h_(_1_) under CCOONNDDIITTIIOONNAALL EEXXPPRREESS-- - SSIIOONNSS, the result of the expression is the result of the - binary test using the first and third arguments as oper- - ands. The --aa and --oo operators are considered binary op- - erators when there are three arguments. If the first ar- - gument is !!, the value is the negation of the two-argu- + If the second argument is one of the binary conditional + operators listed in _b_a_s_h(1) under CCOONNDDIITTIIOONNAALL EEXXPPRREESS-- + SSIIOONNSS, the result of the expression is the result of the + binary test using the first and third arguments as + operands. The --aa and --oo operators are considered binary + operators when there are three arguments. If the first + argument is !!, the value is the negation of the two-argu- ment test using the second and third arguments. If the first argument is exactly (( and the third argument is ex- - actly )), the result is the one-argument test of the sec- + actly )), the result is the one-argument test of the sec- ond argument. Otherwise, the expression is false. 4 arguments The following conditions are applied in the order listed. If the first argument is !!, the result is the negation of - the three-argument expression composed of the remaining - arguments. the two-argument test using the second and - third arguments. If the first argument is exactly (( and - the fourth argument is exactly )), the result is the two- - argument test of the second and third arguments. Other- + the three-argument expression composed of the remaining + arguments. the two-argument test using the second and + third arguments. If the first argument is exactly (( and + the fourth argument is exactly )), the result is the two- + argument test of the second and third arguments. Other- wise, the expression is parsed and evaluated according to precedence using the rules listed above. 5 or more arguments The expression is parsed and evaluated according to precedence using the rules listed above. - When used with tteesstt or [[, the << and >> operators sort lexico- - graphically using ASCII ordering. + When the shell is in _p_o_s_i_x _m_o_d_e, or if the expression is part of + the [[[[ command, the << and >> operators sort using the current lo- + cale. If the shell is not in _p_o_s_i_x _m_o_d_e, the tteesstt and [[ com- + mands sort lexicographically using ASCII ordering. 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 re- - ceives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a sin- - gle _s_i_g_s_p_e_c) or --, each specified signal is reset to its origi- - nal 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 com- - mands associated with each signal. The --ll option causes the - shell to print a list of signal names and their corresponding - 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 SSIIGG 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 exe- - cuted 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 in - _b_a_s_h_(_1_)). 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 RREETTUURRNN, the command _a_r_g is executed each time a - shell function or a script executed with the .. or ssoouurrccee - builtins finishes executing. - - If a _s_i_g_s_p_e_c is EERRRR, the command _a_r_g is executed whenever a + ttrraapp [--llpp] [[_a_c_t_i_o_n] _s_i_g_s_p_e_c ...] + The _a_c_t_i_o_n is a command that is read and executed when the shell + receives signal(s) _s_i_g_s_p_e_c. If _a_c_t_i_o_n 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_c_t_i_o_n 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 in- + vokes. + + If no arguments are supplied, ttrraapp displays the actions associ- + ated with each trapped signal as a set of ttrraapp commands that can + be reused as shell input to restore the current signal disposi- + tions. If --pp is given, and _a_c_t_i_o_n is not present, then ttrraapp + displays the actions associated with each _s_i_g_s_p_e_c or, if none + are supplied, for all trapped signals, as a set of ttrraapp commands + that can be reused as shell input to restore the current signal + dispositions. The --PP option behaves similarly, but displays + only the actions associated with each _s_i_g_s_p_e_c argument. --PP re- + quires at least one _s_i_g_s_p_e_c argument. The --PP or --pp options to + ttrraapp may be used in a subshell environment (e.g., command sub- + stitution) and, as long as they are used before ttrraapp is used to + change a signal's handling, will display the state of its par- + ent's traps. + + The --ll option causes ttrraapp to print a list of signal names and + their corresponding 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 SSIIGG prefix is optional. + + If a _s_i_g_s_p_e_c is EEXXIITT (0) the command _a_c_t_i_o_n is executed on exit + from the shell. If a _s_i_g_s_p_e_c is DDEEBBUUGG, the command _a_c_t_i_o_n 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, (( arithmetic command, [[ conditional command, + arithmetic _f_o_r command, and before the first command executes in + a shell function (see SSHHEELLLL GGRRAAMMMMAARR in _b_a_s_h(1)). Refer to the + description of the eexxttddeebbuugg option to the sshhoopptt builtin for de- + tails of its effect on the DDEEBBUUGG trap. If a _s_i_g_s_p_e_c is RREETTUURRNN, + the command _a_c_t_i_o_n is executed each time a shell function or a + script executed with the .. or ssoouurrccee builtins finishes execut- + ing. + + If a _s_i_g_s_p_e_c is EERRRR, the command _a_c_t_i_o_n is executed whenever a pipeline (which may consist of a single simple command), a list, or a compound command returns 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, + a wwhhiillee or uunnttiill keyword, part of the test in an _i_f statement, part of a command executed in a &&&& or |||| list except the command following the final &&&& or ||||, any command in a pipeline but the last, or if the command's return value is being inverted using !!. These are the same conditions obeyed by the eerrrreexxiitt (--ee) op- tion. - Signals ignored upon entry to the shell cannot be trapped or re- - set. Trapped signals that are not being ignored are reset to - their original values in a subshell or subshell environment when - one is created. The return status is false if any _s_i_g_s_p_e_c is - invalid; otherwise ttrraapp returns true. + When the shell is not interactive, signals ignored upon entry to + the shell cannot be trapped or reset. Interactive shells permit + trapping signals ignored on entry. Trapped signals that are not + being ignored are reset to their original values in a subshell + or subshell environment when one is created. The return status + is false if any _s_i_g_s_p_e_c is invalid; otherwise ttrraapp returns true. + + ttrruuee Does nothing, returns a 0 status. 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 re- - turned. 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 specified - as a command name, or nothing if ``type -t name'' would not re- - turn _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 + builtin, or executable disk file, respectively. If the _n_a_m_e is + not found, then nothing is printed, and ttyyppee returns a non-zero + exit status. If the --pp option is used, ttyyppee either returns the + name of the executable file that would be found by searching + $$PPAATTHH if _n_a_m_e were specified as a command name, or nothing if + would not return _f_i_l_e. The --PP option forces a PPAATTHH search for + each _n_a_m_e, even if would not return _f_i_l_e. If a command is hashed, --pp and --PP print the hashed value, which is not necessar- - ily 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 - function lookup, as with the ccoommmmaanndd builtin. ttyyppee returns true - if all of the arguments are found, false if any are not found. + ily the file that appears first in PPAATTHH. If the --aa option is + used, ttyyppee prints all of the places that contain a command named + _n_a_m_e. This includes aliases, reserved words, functions, and + builtins, but the path search options (--pp and --PP) can be sup- + plied to restrict the output to executable files. ttyyppee does not + consult the table of hashed commands when using --aa with --pp, and + only performs a PPAATTHH search for _n_a_m_e. The --ff option suppresses + shell function lookup, as with the ccoommmmaanndd builtin. ttyyppee re- + turns true if all of the arguments are found, false if any are + not found. uulliimmiitt [--HHSS] --aa uulliimmiitt [--HHSS] [--bbccddeeffiikkllmmnnppqqrrssttuuvvxxPPRRTT [_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. The --HH and --SS options specify that the hard or soft limit is set - for the given resource. A hard limit cannot be increased by a - non-root user once it is set; a soft limit may be increased up - to the value of the hard limit. If neither --HH nor --SS is speci- + for the given resource. A hard limit cannot be increased by a + non-root user once it is set; a soft limit may be increased up + to the value of the hard limit. If neither --HH nor --SS is speci- fied, 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, re- spectively. 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, if appropriate, are printed before the value. Other op- + When more than one resource is specified, the limit name and + unit, if appropriate, are printed before the value. Other op- tions are interpreted as follows: --aa All current limits are reported; no limits are set --bb The maximum socket buffer size --cc The maximum size of core files created --dd The maximum size of a process's data segment - --ee The maximum scheduling priority ("nice") - --ff The maximum size of files written by the shell and its + --ee The maximum scheduling priority ( + --ff The maximum size of files written by the shell and its children --ii The maximum number of pending signals --kk The maximum number of kqueues that may be allocated --ll The maximum size that may be locked into memory - --mm The maximum resident set size (many systems do not honor + --mm The maximum resident set size (many systems do not honor this limit) --nn The maximum number of open file descriptors (most systems do not allow this value to be set) @@ -1881,23 +1950,23 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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] [-nn] [_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 the --vv option is given, each _n_a_m_e refers to a shell variable, and that variable is removed. Read-only variables may not be unset. If --ff is specified, each _n_a_m_e refers to a shell func- @@ -1916,16 +1985,16 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS sequently reset. The exit status is true unless a _n_a_m_e is read- only or may not be unset. - wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_i_d _._._.] + wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_i_d ...] Wait for each specified child process and return its termination - status. Each _i_d 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 _i_d is not given, wwaaiitt waits for all running - background jobs and the last-executed process substitution, if + status. Each _i_d 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 _i_d is not given, wwaaiitt waits for all running + background jobs and the last-executed process substitution, if its process id is the same as $$!!, and the return status is zero. If the --nn option is supplied, wwaaiitt waits for a single job from the list of _i_ds or, if no _i_ds are supplied, any job, to complete - and returns its exit status. If none of the supplied arguments + and returns its exit status. If none of the supplied arguments is a child of the shell, or if no arguments are supplied and the shell has no unwaited-for children, the exit status is 127. If the --pp option is supplied, the process or job identifier of the @@ -1935,33 +2004,33 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS only when the --nn option is supplied. Supplying the --ff option, when job control is enabled, forces wwaaiitt to wait for _i_d to ter- minate before returning its status, instead of returning when it - changes status. If _i_d specifies a non-existent process or job, - the return status is 127. If wwaaiitt is interrupted by a signal, - the return status will be greater than 128, as described under - SSIIGGNNAALLSS in _b_a_s_h_(_1_). Otherwise, the return status is the exit + changes status. If _i_d specifies a non-existent process or job, + the return status is 127. If wwaaiitt is interrupted by a signal, + the return status will be greater than 128, as described under + SSIIGGNNAALLSS in _b_a_s_h(1). Otherwise, the return status is the exit status of the last process or job waited for. SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE - Bash-4.0 introduced the concept of a _s_h_e_l_l _c_o_m_p_a_t_i_b_i_l_i_t_y _l_e_v_e_l, speci- - fied as a set of options to the shopt builtin ( ccoommppaatt3311, ccoommppaatt3322, - ccoommppaatt4400, ccoommppaatt4411, and so on). There is only one current compatibil- - ity level -- each option is mutually exclusive. The compatibility - level is intended to allow users to select behavior from previous ver- - sions that is incompatible with newer versions while they migrate - scripts to use current features and behavior. It's intended to be a - temporary solution. - - This section does not mention behavior that is standard for a particu- - lar version (e.g., setting ccoommppaatt3322 means that quoting the rhs of the - regexp matching operator quotes special regexp characters in the word, + Bash-4.0 introduced the concept of a _s_h_e_l_l _c_o_m_p_a_t_i_b_i_l_i_t_y _l_e_v_e_l, speci- + fied as a set of options to the shopt builtin (ccoommppaatt3311, ccoommppaatt3322, ccoomm-- + ppaatt4400, ccoommppaatt4411, and so on). There is only one current compatibility + level -- each option is mutually exclusive. The compatibility level is + intended to allow users to select behavior from previous versions that + is incompatible with newer versions while they migrate scripts to use + current features and behavior. It's intended to be a temporary solu- + tion. + + This section does not mention behavior that is standard for a particu- + lar version (e.g., setting ccoommppaatt3322 means that quoting the rhs of the + regexp matching operator quotes special regexp characters in the word, which is default behavior in bash-3.2 and subsequent versions). - If a user enables, say, ccoommppaatt3322, it may affect the behavior of other - compatibility levels up to and including the current compatibility - level. The idea is that each compatibility level controls behavior - that changed in that version of bbaasshh, but that behavior may have been - present in earlier versions. For instance, the change to use locale- - based comparisons with the [[[[ command came in bash-4.1, and earlier + If a user enables, say, ccoommppaatt3322, it may affect the behavior of other + compatibility levels up to and including the current compatibility + level. The idea is that each compatibility level controls behavior + that changed in that version of bbaasshh, but that behavior may have been + present in earlier versions. For instance, the change to use locale- + based comparisons with the [[[[ command came in bash-4.1, and earlier versions used ASCII-based comparisons, so enabling ccoommppaatt3322 will enable ASCII-based comparisons as well. That granularity may not be suffi- cient for all uses, and as a result users should employ compatibility @@ -1970,16 +2039,16 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE Bash-4.3 introduced a new shell variable: BBAASSHH__CCOOMMPPAATT. The value as- signed to this variable (a decimal version number like 4.2, or an inte- - ger corresponding to the ccoommppaatt_N_N option, like 42) determines the com- + ger corresponding to the ccoommppaatt_N_N option, like 42) determines the com- patibility level. - Starting with bash-4.4, Bash has begun deprecating older compatibility - levels. Eventually, the options will be removed in favor of BBAASSHH__CCOOMM-- + Starting with bash-4.4, bbaasshh has begun deprecating older compatibility + levels. Eventually, the options will be removed in favor of BBAASSHH__CCOOMM-- PPAATT. - Bash-5.0 is the final version for which there will be an individual - shopt option for the previous version. Users should use BBAASSHH__CCOOMMPPAATT on - bash-5.0 and later versions. + Bash-5.0 was the final version for which there will be an individual + shopt option for the previous version. Users should control the compat- + ibility level with BBAASSHH__CCOOMMPPAATT. The following table describes the behavior changes controlled by each compatibility level setting. The ccoommppaatt_N_N tag is used as shorthand for @@ -1991,19 +2060,17 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE ccoommppaatt3311 +o quoting the rhs of the [[[[ command's regexp matching oper- - ator (=~) has no special effect + ator (=) has no special effect ccoommppaatt3322 - +o interrupting a command list such as "a ; b ; c" causes - the execution of the next command in the list (in - bash-4.0 and later versions, the shell acts as if it re- - ceived the interrupt, so interrupting one command in a - list aborts the execution of the entire list) + +o the << and >> operators to the [[[[ command do not consider + the current locale when comparing strings; they use ASCII + ordering. ccoommppaatt4400 +o the << and >> operators to the [[[[ command do not consider the current locale when comparing strings; they use ASCII - ordering. Bash versions prior to bash-4.1 use ASCII col- + ordering. BBaasshh versions prior to bash-4.1 use ASCII col- lation and _s_t_r_c_m_p(3); bash-4.1 and later use the current locale's collation sequence and _s_t_r_c_o_l_l(3). @@ -2019,45 +2086,45 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE ccoommppaatt4422 +o the replacement string in double-quoted pattern substitu- - tion does not undergo quote removal, as it does in ver- + tion does not undergo quote removal, as it does in ver- sions after bash-4.2 - +o in posix mode, single quotes are considered special when - expanding the _w_o_r_d portion of a double-quoted parameter - expansion and can be used to quote a closing brace or - other special character (this is part of POSIX interpre- - tation 221); in later versions, single quotes are not + +o in posix mode, single quotes are considered special when + expanding the _w_o_r_d portion of a double-quoted parameter + expansion and can be used to quote a closing brace or + other special character (this is part of POSIX interpre- + tation 221); in later versions, single quotes are not special within double-quoted word expansions ccoommppaatt4433 - +o the shell does not print a warning message if an attempt - is made to use a quoted compound assignment as an argu- - ment to declare (e.g., declare -a foo='(1 2)'). Later - versions warn that this usage is deprecated - +o word expansion errors are considered non-fatal errors - that cause the current command to fail, even in posix - mode (the default behavior is to make them fatal errors + +o the shell does not print a warning message if an attempt + is made to use a quoted compound assignment as an argu- + ment to declare (e.g., declare -a foo=(1 2)). Later ver- + sions warn that this usage is deprecated + +o word expansion errors are considered non-fatal errors + that cause the current command to fail, even in posix + mode (the default behavior is to make them fatal errors that cause the shell to exit) - +o when executing a shell function, the loop state + +o when executing a shell function, the loop state (while/until/etc.) is not reset, so bbrreeaakk or ccoonnttiinnuuee in that function will break or continue loops in the calling - context. Bash-4.4 and later reset the loop state to pre- + context. Bash-4.4 and later reset the loop state to pre- vent this ccoommppaatt4444 - +o the shell sets up the values used by BBAASSHH__AARRGGVV and - BBAASSHH__AARRGGCC so they can expand to the shell's positional + +o the shell sets up the values used by BBAASSHH__AARRGGVV and + BBAASSHH__AARRGGCC so they can expand to the shell's positional parameters even if extended debugging mode is not enabled - +o a subshell inherits loops from its parent context, so - bbrreeaakk or ccoonnttiinnuuee will cause the subshell to exit. - Bash-5.0 and later reset the loop state to prevent the + +o a subshell inherits loops from its parent context, so + bbrreeaakk or ccoonnttiinnuuee will cause the subshell to exit. + Bash-5.0 and later reset the loop state to prevent the exit - +o variable assignments preceding builtins like eexxppoorrtt and + +o variable assignments preceding builtins like eexxppoorrtt and rreeaaddoonnllyy that set attributes continue to affect variables with the same name in the calling environment even if the shell is not in posix mode ccoommppaatt5500 - +o Bash-5.1 changed the way $$RRAANNDDOOMM is generated to intro- + +o Bash-5.1 changed the way $$RRAANNDDOOMM is generated to intro- duce slightly more randomness. If the shell compatibility level is set to 50 or lower, it reverts to the method from bash-5.0 and previous versions, so seeding the ran- @@ -2074,10 +2141,35 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE scripts @@ and ** differently depending on whether the ar- ray is indexed or associative, and differently than in previous versions. + +o arithmetic commands ( ((((...)))) ) and the expressions in an + arithmetic for statement can be expanded more than once + +o expressions used as arguments to arithmetic operators in + the [[[[ conditional command can be expanded more than once + +o the expressions in substring parameter brace expansion + can be expanded more than once + +o the expressions in the $$((((...)))) word expansion can be ex- + panded more than once + +o arithmetic expressions used as indexed array subscripts + can be expanded more than once + +o tteesstt --vv, when given an argument of AA[[@@]], where AA is an + existing associative array, will return true if the array + has any set elements. Bash-5.2 will look for and report + on a key named @@. + +o the ${_p_a_r_a_m_e_t_e_r[[::]]==_v_a_l_u_e} word expansion will return + _v_a_l_u_e, before any variable-specific transformations have + been performed (e.g., converting to lowercase). Bash-5.2 + will return the final value assigned to the variable. + +o Parsing command substitutions will behave as if extended + globbing (see the description of the sshhoopptt builtin above) + is enabled, so that parsing a command substitution con- + taining an extglob pattern (say, as part of a shell func- + tion) will not fail. This assumes the intent is to en- + able extglob before the command is executed and word ex- + pansions are performed. It will fail at word expansion + time if extglob hasn't been enabled by the time the com- + mand is executed. SSEEEE AALLSSOO bash(1), sh(1) - - -GNU Bash 5.2 2021 November 22 BASH_BUILTINS(1) +GNU Bash 5.2 2023 January 27 _B_A_S_H___B_U_I_L_T_I_N_S(1) diff --git a/doc/builtins.1 b/doc/builtins.1 index 43d92a2fc..dad2dc9b9 100644 --- a/doc/builtins.1 +++ b/doc/builtins.1 @@ -7,7 +7,7 @@ .de FN \fI\|\\$1\|\fP .. -.TH BASH_BUILTINS 1 "2021 November 22" "GNU Bash 5.2" +.TH BASH_BUILTINS 1 "2023 January 27" "GNU Bash 5.2" .SH NAME :, ., [, alias, bg, bind, break, builtin, caller, cd, command, compgen, complete, compopt, diff --git a/doc/builtins.ps b/doc/builtins.ps index 1becc2a28..8efaa9e9d 100644 --- a/doc/builtins.ps +++ b/doc/builtins.ps @@ -1,13 +1,12 @@ %!PS-Adobe-3.0 -%%Creator: groff version 1.22.4 -%%CreationDate: Mon Sep 19 12:02:42 2022 -%%DocumentNeededResources: font Times-Roman +%%Creator: groff version 1.23.0 +%%CreationDate: Thu Apr 4 17:50:31 2024 +%%DocumentNeededResources: font Times-Italic +%%+ font Times-Roman %%+ font Times-Bold -%%+ font Times-Italic %%+ font Symbol -%%+ font Courier -%%DocumentSuppliedResources: procset grops 1.22 4 -%%Pages: 27 +%%DocumentSuppliedResources: procset grops 1.23 0 +%%Pages: 28 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait @@ -16,7 +15,7 @@ %%PageMedia: Default %%EndDefaults %%BeginProlog -%%BeginResource: procset grops 1.22 4 +%%BeginResource: procset grops 1.23 0 %!PS-Adobe-3.0 Resource-ProcSet /setpacking where{ pop @@ -24,6 +23,7 @@ currentpacking true setpacking }if /grops 120 dict dup begin +% The ASCII code of the space character. /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def @@ -45,16 +45,18 @@ true setpacking /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +% name size font SF - /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def +% name a c d font MF - /MF{ findfont [5 2 roll -0 3 1 roll +0 3 1 roll % b neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def @@ -63,13 +65,19 @@ dup setfont /RES 0 def /PL 0 def /LS 0 def +% Enable manual feed. +% MANUAL - /MANUAL{ statusdict begin/manualfeed true store end }bind def +% Guess the page length. +% This assumes that the imageable area is vertically centered on the page. +% PLG - length /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def +% BP - /BP{ /level0 save def 1 setlinecap @@ -87,47 +95,61 @@ LS{ level0 restore showpage }def +% centerx centery radius startangle endangle DA - /DA{ newpath arcn stroke }bind def +% x y SN - x' y' +% round a position to nearest (pixel + (.25,.25)) /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def +% endx endy startx starty DL - +% we round the endpoints of the line, so that parallel horizontal +% and vertical lines will appear even /DL{ SN moveto SN lineto stroke }bind def +% centerx centery radius DC - /DC{ newpath 0 360 arc closepath }bind def /TM matrix def +% width height centerx centery DE - /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def +% these are for splines /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def +% fill the last path +% r g b Fr - /Fr{ setrgbcolor fill }bind def +% c m y k Fk - /setcmykcolor where{ pop /Fk{ setcmykcolor fill }bind def }if +% g Fg - /Fg{ setgray fill }bind def +% fill with the "current color" /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def @@ -136,6 +158,7 @@ pop /Ck/setcmykcolor load def }if /Cg/setgray load def +% new_font_name encoding_vector old_font_name RE - /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin @@ -150,6 +173,7 @@ dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def +% hpos vpos EBEGIN - /EBEGIN{ moveto DEFS begin @@ -157,11 +181,13 @@ DEFS begin /EEND/end load def /CNT 0 def /level1 0 def +% llx lly newwid wid newht ht newllx newlly PBEGIN - /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate +% set the graphics state to default values 0 setgray 0 setlinecap 1 setlinewidth @@ -180,6 +206,10 @@ newpath /CNT countdictstack def userdict begin /showpage{}def +% +% Any included setpagedevice should be ignored. +% See: http://www.w-beer.de/doc/ps/. +% /setpagedevice{}def mark }bind def @@ -199,11 +229,10 @@ setpacking %%BeginFeature: *PageSize Default << /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice %%EndFeature +%%IncludeResource: font Times-Italic %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold -%%IncludeResource: font Times-Italic %%IncludeResource: font Symbol -%%IncludeResource: font Courier grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef @@ -232,18 +261,19 @@ def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash /ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def -/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE /Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE +/Times-Italic@0 ENC0/Times-Italic RE %%EndSetup %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S -(ME).219 E F0 .622(:, ., [, alias, bg, bind, break, b)108 96 R .622 -(uiltin, caller)-.2 F 3.122(,c)-.4 G .622 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 +10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F1 .622 +(:, ., [, alias, bg, bind, break, b)108 96 R .622(uiltin, caller)-.2 F +3.122(,c)-.4 G .622 (d, command, compgen, complete, compopt, continue, declare,)-3.122 F .076(dirs, diso)108 108 R .076(wn, echo, enable, e)-.25 F -.25(va)-.25 G .076(l, e).25 F -.15(xe)-.15 G .076(c, e).15 F .077(xit, e)-.15 F .077 @@ -253,3183 +283,3345 @@ E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S 120 R 2.577(,r)-.65 G(eadonly)-2.577 E 2.577(,r)-.65 G .076 (eturn, set, shift, shopt, source, sus-)-2.577 F .279(pend, test, times\ , trap, true, type, typeset, ulimit, umask, unalias, unset, w)108 132 R -.279(ait \255 bash b)-.1 F .279(uilt-in commands, see)-.2 F/F2 10 -/Times-Bold@0 SF(bash)108 144 Q F0(\(1\))A F1 -.329(BA)72 160.8 S(SH B) -.329 E(UIL)-.11 E(TIN COMMANDS)-1.007 E F0 .063 +.279(ait \255 bash b)-.1 F .279(uilt-in commands, see)-.2 F/F3 10 +/Times-Bold@0 SF(bash)108 144 Q F1(\(1\))A F2 -.329(BA)72 160.8 S(SH B) +.329 E(UIL)-.11 E(TIN COMMANDS)-1.007 E F1 .063 (Unless otherwise noted, each b)108 172.8 R .062(uiltin command documen\ -ted in this section as accepting options preceded by)-.2 F F2<ad>108 -184.8 Q F0(accepts)3.077 E F2<adad>3.077 E F0 .577 -(to signify the end of the options.)3.077 F(The)5.577 E F2(:)3.077 E F0 -(,)A F2(true)3.077 E F0(,)A F2(false)3.077 E F0 3.077(,a)C(nd)-3.077 E -F2(test)3.077 E F0(/)A F2([)A F0 -.2(bu)3.077 G .577 -(iltins do not accept options).2 F .462(and do not treat)108 196.8 R F2 -<adad>2.961 E F0(specially)2.961 E 5.461(.T)-.65 G(he)-5.461 E F2(exit) -2.961 E F0(,)A F2(logout)2.961 E F0(,)A F2 -.18(re)2.961 G(tur).18 E(n) --.15 E F0(,)A F2(br)2.961 E(eak)-.18 E F0(,)A F2(continue)2.961 E F0(,)A -F2(let)2.961 E F0 2.961(,a)C(nd)-2.961 E F2(shift)2.961 E F0 -.2(bu) +ted in this section as accepting options preceded by)-.2 F F3<ad>108 +184.8 Q F1(accepts)3.077 E F3<adad>3.077 E F1 .577 +(to signify the end of the options.)3.077 F(The)5.577 E F3(:)3.077 E F1 +(,)A F3(true)3.077 E F1(,)A F3(false)3.077 E F1 3.077(,a)C(nd)-3.077 E +F3(test)3.077 E F1(/)A F3([)A F1 -.2(bu)3.077 G .577 +(iltins do not accept options).2 F .462(and do not treat)108 196.8 R F3 +<adad>2.961 E F1(specially)2.961 E 5.461(.T)-.65 G(he)-5.461 E F3(exit) +2.961 E F1(,)A F3(logout)2.961 E F1(,)A F3 -.18(re)2.961 G(tur).18 E(n) +-.15 E F1(,)A F3(br)2.961 E(eak)-.18 E F1(,)A F3(continue)2.961 E F1(,)A +F3(let)2.961 E F1 2.961(,a)C(nd)-2.961 E F3(shift)2.961 E F1 -.2(bu) 2.961 G .461(iltins accept and).2 F .26(process ar)108 208.8 R .26 -(guments be)-.18 F .26(ginning with)-.15 F F2<ad>2.76 E F0 .261 -(without requiring)2.76 F F2<adad>2.761 E F0 5.261(.O)C .261(ther b) +(guments be)-.18 F .26(ginning with)-.15 F F3<ad>2.76 E F1 .261 +(without requiring)2.76 F F3<adad>2.761 E F1 5.261(.O)C .261(ther b) -5.261 F .261(uiltins that accept ar)-.2 F .261(guments b)-.18 F .261 (ut are not)-.2 F 1.154(speci\214ed as accepting options interpret ar) -108 220.8 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F2<ad> -3.654 E F0 1.154(as in)3.654 F -.25(va)-.4 G 1.154 -(lid options and require).25 F F2<adad>3.654 E F0(to)3.654 E(pre)108 -232.8 Q -.15(ve)-.25 G(nt this interpretation.).15 E F2(:)108 250.8 Q F0 -([)2.5 E/F3 10/Times-Italic@0 SF(ar)A(guments)-.37 E F0(])A .451(No ef) -144 262.8 R .451(fect; the command does nothing be)-.25 F .452(yond e) --.15 F(xpanding)-.15 E F3(ar)3.282 E(guments)-.37 E F0 .452 -(and performing an)3.222 F 2.952(ys)-.15 G(peci\214ed)-2.952 E 2.5 -(redirections. The)144 274.8 R(return status is zero.)2.5 E F2(.)110.5 -291.6 Q F3(\214lename)6.666 E F0([)2.5 E F3(ar)A(guments)-.37 E F0(])A -F2(sour)108 303.6 Q(ce)-.18 E F3(\214lename)2.5 E F0([)2.5 E F3(ar)A -(guments)-.37 E F0(])A 1.02(Read and e)144 315.6 R -.15(xe)-.15 G 1.02 -(cute commands from).15 F F3(\214lename)5.43 E F0 1.02 -(in the current shell en)3.7 F 1.02(vironment and return the e)-.4 F -(xit)-.15 E 1.33(status of the last command e)144 327.6 R -.15(xe)-.15 G -1.331(cuted from).15 F F3(\214lename)5.741 E F0 6.331(.I).18 G(f)-6.331 -E F3(\214lename)5.741 E F0 1.331(does not contain a slash, \214le-)4.011 -F .023(names in)144 339.6 R/F4 9/Times-Bold@0 SF -.666(PA)2.523 G(TH) --.189 E F0 .022(are used to \214nd the directory containing)2.273 F F3 -(\214lename)4.432 E F0 2.522(,b).18 G(ut)-2.722 E F3(\214lename)2.522 E -F0 .022(does not need to be)2.522 F -.15(exe)144 351.6 S 3.86 +108 220.8 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F3<ad> +3.654 E F1 1.154(as in)3.654 F -.25(va)-.4 G 1.154 +(lid options and require).25 F F3<adad>3.654 E F1(to)3.654 E(pre)108 +232.8 Q -.15(ve)-.25 G(nt this interpretation.).15 E F3(:)108 249.6 Q F1 +([)2.5 E F0(ar)A(guments)-.37 E F1(])A .451(No ef)144 261.6 R .451 +(fect; the command does nothing be)-.25 F .452(yond e)-.15 F(xpanding) +-.15 E F0(ar)3.282 E(guments)-.37 E F1 .452(and performing an)3.222 F +2.952(ys)-.15 G(peci\214ed)-2.952 E 2.5(redirections. The)144 273.6 R +(return status is zero.)2.5 E F3(.)108 290.4 Q F0(\214lename)6.666 E F1 +([)2.5 E F0(ar)A(guments)-.37 E F1(])A F3(sour)108 302.4 Q(ce)-.18 E F0 +(\214lename)2.5 E F1([)2.5 E F0(ar)A(guments)-.37 E F1(])A 1.02 +(Read and e)144 314.4 R -.15(xe)-.15 G 1.02(cute commands from).15 F F0 +(\214lename)5.43 E F1 1.02(in the current shell en)3.7 F 1.02 +(vironment and return the e)-.4 F(xit)-.15 E 1.33 +(status of the last command e)144 326.4 R -.15(xe)-.15 G 1.331 +(cuted from).15 F F0(\214lename)5.741 E F1 6.331(.I).18 G(f)-6.331 E F0 +(\214lename)5.741 E F1 1.331(does not contain a slash, \214le-)4.011 F +.023(names in)144 338.4 R/F4 9/Times-Bold@0 SF -.666(PA)2.523 G(TH)-.189 +E F1 .022(are used to \214nd the directory containing)2.273 F F0 +(\214lename)4.432 E F1 2.522(,b).18 G(ut)-2.722 E F0(\214lename)2.522 E +F1 .022(does not need to be)2.522 F -.15(exe)144 350.4 S 3.86 (cutable. The).15 F 1.36(\214le searched for in)3.86 F F4 -.666(PA)3.86 -G(TH)-.189 E F0 1.361(need not be e)3.61 F -.15(xe)-.15 G 3.861 -(cutable. When).15 F F2(bash)3.861 E F0 1.361(is not in)3.861 F F3 -(posix)3.861 E(mode)144 363.6 Q F0 2.772(,i)C 2.772(ts)-2.772 G .272 +G(TH)-.189 E F1 1.361(need not be e)3.61 F -.15(xe)-.15 G 3.861 +(cutable. When).15 F F3(bash)3.861 E F1 1.361(is not in)3.861 F F0 +(posix)3.861 E(mode)144 362.4 Q F1 2.772(,i)C 2.772(ts)-2.772 G .272 (earches the current directory if no \214le is found in)-2.772 F F4 --.666(PA)2.771 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .271(If the) -4.771 F F2(sour)2.771 E(cepath)-.18 E F0 .271(option to the)2.771 F F2 -(shopt)144 375.6 Q F0 -.2(bu)3.659 G 1.159(iltin command is turned of).2 -F 1.159(f, the)-.25 F F4 -.666(PA)3.659 G(TH)-.189 E F0 1.159 -(is not searched.)3.409 F 1.16(If an)6.159 F(y)-.15 E F3(ar)3.66 E -(guments)-.37 E F0 1.16(are supplied,)3.66 F(the)144 387.6 Q 3.692(yb) --.15 G 1.192(ecome the positional parameters when)-3.692 F F3 -(\214lename)3.692 E F0 1.192(is e)3.692 F -.15(xe)-.15 G 3.691 -(cuted. Otherwise).15 F 1.191(the positional pa-)3.691 F .82 -(rameters are unchanged.)144 399.6 R .82(If the)5.82 F F2<ad54>3.32 E F0 -.82(option is enabled,)3.32 F F2(.)3.32 E F0 .82(inherits an)3.32 F 3.32 -(yt)-.15 G .82(rap on)-3.32 F F2(DEB)3.32 E(UG)-.1 E F0 3.32(;i)C 3.32 -(fi)-3.32 G 3.32(ti)-3.32 G 3.32(sn)-3.32 G(ot,)-3.32 E(an)144 411.6 Q -(y)-.15 E F2(DEB)3.323 E(UG)-.1 E F0 .823(trap string is sa)3.323 F -.15 -(ve)-.2 G 3.322(da).15 G .822(nd restored around the call to)-3.322 F F2 -(.)3.322 E F0 3.322(,a)C(nd)-3.322 E F2(.)3.322 E F0 .822(unsets the) -3.322 F F2(DEB)3.322 E(UG)-.1 E F0(trap)3.322 E .226(while it e)144 -423.6 R -.15(xe)-.15 G 2.726(cutes. If).15 F F2<ad54>2.727 E F0 .227 -(is not set, and the sourced \214le changes the)2.727 F F2(DEB)2.727 E -(UG)-.1 E F0 .227(trap, the ne)2.727 F 2.727(wv)-.25 G .227(alue is) --2.977 F .891(retained when)144 435.6 R F2(.)3.391 E F0 3.391 -(completes. The)3.391 F .891 -(return status is the status of the last command e)3.391 F .89 -(xited within the)-.15 F(script \(0 if no commands are e)144 447.6 Q --.15(xe)-.15 G(cuted\), and f).15 E(alse if)-.1 E F3(\214lename)4.41 E -F0(is not found or cannot be read.)2.68 E F2(alias)108 464.4 Q F0([)2.5 -E F2<ad70>A F0 2.5(][)C F3(name)-2.5 E F0([=)A F3(value)A F0 2.5(].)C -(..])-2.5 E F2(Alias)144 476.4 Q F0 2.724(with no ar)5.224 F 2.724 -(guments or with the)-.18 F F2<ad70>5.224 E F0 2.724 -(option prints the list of aliases in the form)5.224 F F2(alias)5.225 E -F3(name)144 488.4 Q F0(=)A F3(value)A F0 .58(on standard output.)3.08 F +-.666(PA)2.771 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F1 .271(If the) +4.771 F F3(sour)2.771 E(cepath)-.18 E F1 .271(option to the)2.771 F F3 +(shopt)144 374.4 Q F1 -.2(bu)3.659 G 1.159(iltin command is turned of).2 +F 1.159(f, the)-.25 F F4 -.666(PA)3.659 G(TH)-.189 E F1 1.159 +(is not searched.)3.409 F 1.16(If an)6.159 F(y)-.15 E F0(ar)3.66 E +(guments)-.37 E F1 1.16(are supplied,)3.66 F(the)144 386.4 Q 3.045(yb) +-.15 G .544(ecome the positional parameters when)-3.045 F F0(\214lename) +3.044 E F1 .544(is e)3.044 F -.15(xe)-.15 G 3.044(cuted. Otherwise).15 F +.544(the positional para-)3.044 F .302(meters are unchanged.)144 398.4 R +.302(If the)5.302 F F3<ad54>2.802 E F1 .302(option is enabled,)2.802 F +F3(.)2.802 E F1 .302(inherits an)2.802 F 2.802(yt)-.15 G .302(rap on) +-2.802 F F3(DEB)2.802 E(UG)-.1 E F1 2.802(;i)C 2.802(fi)-2.802 G 2.802 +(ti)-2.802 G 2.803(sn)-2.802 G .303(ot, an)-2.803 F(y)-.15 E F3(DEB)144 +410.4 Q(UG)-.1 E F1 .382(trap string is sa)2.882 F -.15(ve)-.2 G 2.882 +(da).15 G .382(nd restored around the call to)-2.882 F F3(.)2.882 E F1 +2.882(,a)C(nd)-2.882 E F3(.)2.881 E F1 .381(unsets the)2.881 F F3(DEB) +2.881 E(UG)-.1 E F1 .381(trap while)2.881 F .812(it e)144 422.4 R -.15 +(xe)-.15 G 3.312(cutes. If).15 F F3<ad54>3.312 E F1 .812 +(is not set, and the sourced \214le changes the)3.312 F F3(DEB)3.312 E +(UG)-.1 E F1 .812(trap, the ne)3.312 F 3.312(wv)-.25 G .813(alue is re-) +-3.562 F 1.377(tained when)144 434.4 R F3(.)3.877 E F1 3.877 +(completes. The)3.877 F 1.376 +(return status is the status of the last command e)3.876 F 1.376 +(xited within the)-.15 F(script \(0 if no commands are e)144 446.4 Q +-.15(xe)-.15 G(cuted\), and f).15 E(alse if)-.1 E F0(\214lename)4.41 E +F1(is not found or cannot be read.)2.68 E F3(alias)108 463.2 Q F1([)2.5 +E F3<ad70>A F1 2.5(][)C F0(name)-2.5 E F1([=)A F0(value)A F1 2.5(].)C +1.666(..)-.834 G(])-1.666 E F3(Alias)144 475.2 Q F1 2.724(with no ar) +5.224 F 2.724(guments or with the)-.18 F F3<ad70>5.224 E F1 2.724 +(option prints the list of aliases in the form)5.224 F F3(alias)5.225 E +F0(name)144 487.2 Q F1(=)A F0(value)A F1 .58(on standard output.)3.08 F .58(When ar)5.58 F .58 -(guments are supplied, an alias is de\214ned for each)-.18 F F3(name) -3.08 E F0(whose)144 500.4 Q F3(value)2.508 E F0 .009(is gi)2.508 F -.15 -(ve)-.25 G 2.509(n. A).15 F .009(trailing space in)2.509 F F3(value) -2.509 E F0 .009(causes the ne)2.509 F .009(xt w)-.15 F .009 +(guments are supplied, an alias is de\214ned for each)-.18 F F0(name) +3.08 E F1(whose)144 499.2 Q F0(value)2.508 E F1 .009(is gi)2.508 F -.15 +(ve)-.25 G 2.509(n. A).15 F .009(trailing space in)2.509 F F0(value) +2.509 E F1 .009(causes the ne)2.509 F .009(xt w)-.15 F .009 (ord to be check)-.1 F .009(ed for alias substi-)-.1 F .579 -(tution when the alias is e)144 512.4 R 3.079(xpanded. F)-.15 F .579 -(or each)-.15 F F3(name)3.079 E F0 .579(in the ar)3.079 F .579 -(gument list for which no)-.18 F F3(value)3.079 E F0 .578(is sup-)3.078 -F 1.313(plied, the name and v)144 524.4 R 1.314 -(alue of the alias is printed.)-.25 F F2(Alias)6.314 E F0 1.314 -(returns true unless a)3.814 F F3(name)3.814 E F0 1.314(is gi)3.814 F +(tution when the alias is e)144 511.2 R 3.079(xpanded. F)-.15 F .579 +(or each)-.15 F F0(name)3.079 E F1 .579(in the ar)3.079 F .579 +(gument list for which no)-.18 F F0(value)3.079 E F1 .578(is sup-)3.078 +F 1.313(plied, the name and v)144 523.2 R 1.314 +(alue of the alias is printed.)-.25 F F3(Alias)6.314 E F1 1.314 +(returns true unless a)3.814 F F0(name)3.814 E F1 1.314(is gi)3.814 F -.15(ve)-.25 G 3.814(nf).15 G(or)-3.814 E -(which no alias has been de\214ned.)144 536.4 Q F2(bg)108 553.2 Q F0([) -2.5 E F3(jobspec)A F0(...])2.5 E .745(Resume each suspended job)144 -565.2 R F3(jobspec)3.245 E F0 .745 -(in the background, as if it had been started with)3.245 F F2(&)3.244 E -F0 5.744(.I)C(f)-5.744 E F3(job-)4.984 E(spec)144 577.2 Q F0 .671 +(which no alias has been de\214ned.)144 535.2 Q F3(bg)108 552 Q F1([)2.5 +E F0(jobspec)A F1 1.666(...)2.5 G(])-1.666 E .745 +(Resume each suspended job)144 564 R F0(jobspec)3.245 E F1 .745 +(in the background, as if it had been started with)3.245 F F3(&)3.244 E +F1 5.744(.I)C(f)-5.744 E F0(job-)4.984 E(spec)144 576 Q F1 .671 (is not present, the shell')3.481 F 3.171(sn)-.55 G .672(otion of the) --3.171 F F3(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F2 -(bg)5.672 E F3(jobspec)4.912 E F0 .672(returns 0 unless run)3.482 F .419 -(when job control is disabled or)144 589.2 R 2.919(,w)-.4 G .419 +-3.171 F F0(curr)3.172 E .672(ent job)-.37 F F1 .672(is used.)3.172 F F3 +(bg)5.672 E F0(jobspec)4.912 E F1 .672(returns 0 unless run)3.482 F .419 +(when job control is disabled or)144 588 R 2.919(,w)-.4 G .419 (hen run with job control enabled, an)-2.919 F 2.918(ys)-.15 G -(peci\214ed)-2.918 E F3(jobspec)2.918 E F0 -.1(wa)2.918 G 2.918(sn).1 G -(ot)-2.918 E(found or w)144 601.2 Q(as started without job control.)-.1 -E F2(bind)108 618 Q F0([)2.5 E F2<ad6d>A F3 -.1(ke)2.5 G(ymap)-.2 E F0 -2.5(][)C F2(\255lpsvPSVX)-2.5 E F0(])A F2(bind)108 630 Q F0([)2.5 E F2 -<ad6d>A F3 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F2<ad71>-2.5 E F3 -(function)2.5 E F0 2.5(][)C F2<ad75>-2.5 E F3(function)2.5 E F0 2.5(][)C -F2<ad72>-2.5 E F3 -.1(ke)2.5 G(yseq)-.2 E F0(])A F2(bind)108 642 Q F0([) -2.5 E F2<ad6d>A F3 -.1(ke)2.5 G(ymap)-.2 E F0(])A F2<ad66>2.5 E F3 -(\214lename)2.5 E F2(bind)108 654 Q F0([)2.5 E F2<ad6d>A F3 -.1(ke)2.5 G -(ymap)-.2 E F0(])A F2<ad78>2.5 E F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3 -(shell\255command)A F2(bind)108 666 Q F0([)2.5 E F2<ad6d>A F3 -.1(ke)2.5 -G(ymap)-.2 E F0(])A F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3 -(function\255name)A F2(bind)108 678 Q F0([)2.5 E F2<ad6d>A F3 -.1(ke)2.5 -G(ymap)-.2 E F0(])A F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3 -.37(re)C -(adline\255command).37 E F2(bind)108 690 Q F3 -.37(re)2.5 G -(adline-command-line).37 E F0 .238(Display current)144 702 R F2 -.18(re) -2.738 G(adline).18 E F0 -.1(ke)2.738 G 2.738(ya)-.05 G .239 +(peci\214ed)-2.918 E F0(jobspec)2.918 E F1 -.1(wa)2.918 G 2.918(sn).1 G +(ot)-2.918 E(found or w)144 600 Q(as started without job control.)-.1 E +F3(bind)108 616.8 Q F1([)2.5 E F3<ad6d>A F0 -.1(ke)2.5 G(ymap)-.2 E F1 +2.5(][)C F3(\255lpsvPSVX)-2.5 E F1(])A F3(bind)108 628.8 Q F1([)2.5 E F3 +<ad6d>A F0 -.1(ke)2.5 G(ymap)-.2 E F1 2.5(][)C F3<ad71>-2.5 E F0 +(function)2.5 E F1 2.5(][)C F3<ad75>-2.5 E F0(function)2.5 E F1 2.5(][)C +F3<ad72>-2.5 E F0 -.1(ke)2.5 G(yseq)-.2 E F1(])A F3(bind)108 640.8 Q F1 +([)2.5 E F3<ad6d>A F0 -.1(ke)2.5 G(ymap)-.2 E F1(])A F3<ad66>2.5 E F0 +(\214lename)2.5 E F3(bind)108 652.8 Q F1([)2.5 E F3<ad6d>A F0 -.1(ke)2.5 +G(ymap)-.2 E F1(])A F3<ad78>2.5 E F0 -.1(ke)2.5 G(yseq)-.2 E F1([:])A F0 +(shell\255command)2.5 E F3(bind)108 664.8 Q F1([)2.5 E F3<ad6d>A F0 -.1 +(ke)2.5 G(ymap)-.2 E F1(])A F0 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F0 +(function\255name)A F3(bind)108 676.8 Q F1([)2.5 E F3<ad6d>A F0 -.1(ke) +2.5 G(ymap)-.2 E F1(])A F0 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F0 -.37(re)C +(adline\255command).37 E F3(bind)108 688.8 Q F0 -.37(re)2.5 G +(adline-command-line).37 E F1 .238(Display current)144 700.8 R F3 -.18 +(re)2.738 G(adline).18 E F1 -.1(ke)2.738 G 2.738(ya)-.05 G .239 (nd function bindings, bind a k)-2.738 F .539 -.15(ey s)-.1 H .239 -(equence to a).15 F F2 -.18(re)2.739 G(adline).18 E F0 .239(function or) -2.739 F .04(macro, or set a)144 714 R F2 -.18(re)2.54 G(adline).18 E F0 --.25(va)2.54 G 2.54(riable. Each).25 F .039(non-option ar)2.54 F .039 -(gument is a command as it w)-.18 F .039(ould appear in a)-.1 F F2 -.18 -(re)144 726 S(adline).18 E F0 1.471(initialization \214le such as)3.971 -F F3(.inputr)4.201 E(c)-.37 E F0 3.971(,b).31 G 1.472 +(equence to a).15 F F3 -.18(re)2.739 G(adline).18 E F1 .239(function or) +2.739 F .04(macro, or set a)144 712.8 R F3 -.18(re)2.54 G(adline).18 E +F1 -.25(va)2.54 G 2.54(riable. Each).25 F .039(non-option ar)2.54 F .039 +(gument is a command as it w)-.18 F .039(ould appear in a)-.1 F F3 -.18 +(re)144 724.8 S(adline).18 E F1 1.471(initialization \214le such as) +3.971 F F0(.inputr)4.201 E(c)-.37 E F1 3.971(,b).31 G 1.472 (ut each binding or command must be passed as a)-4.171 F(GNU Bash 5.2)72 -768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(1)190.545 E 0 Cg EP +768 Q(2023 January 27)141.79 E(1)195.95 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E .574(separate ar)144 84 R .574 -(gument; e.g., '"\\C\255x\\C\255r": re\255read\255init\255\214le'.)-.18 -F .574(Options, if supplied, ha)5.574 F .874 -.15(ve t)-.2 H .574 -(he follo).15 F(wing)-.25 E(meanings:)144 96 Q/F1 10/Times-Bold@0 SF -<ad6d>144 108 Q/F2 10/Times-Italic@0 SF -.1(ke)2.5 G(ymap)-.2 E F0(Use) -180 120 Q F2 -.1(ke)5.158 G(ymap)-.2 E F0 2.658(as the k)5.348 F -.15 -(ey)-.1 G 2.658(map to be af).15 F 2.659 -(fected by the subsequent bindings.)-.25 F(Acceptable)7.659 E F2 -.1(ke) -180 132 S(ymap)-.2 E F0 3.193(names are)5.883 F F2 3.193 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E .872 +(separate ar)144 84 R .872 +(gument; e.g., \\C\255x\\C\255r: re\255read\255init\255\214le.)-.18 F +.872(In the follo)5.872 F .872(wing descriptions, output a)-.25 F -.25 +(va)-.2 G(il-).25 E .709 +(able to be re-read is formatted as commands that w)144 96 R .709 +(ould appear in a)-.1 F/F2 10/Times-Bold@0 SF -.18(re)3.209 G(adline).18 +E F1 .709(initialization \214le or)3.209 F .108(that w)144 108 R .108 +(ould be supplied as indi)-.1 F .107(vidual ar)-.25 F .107(guments to a) +-.18 F F2(bind)2.607 E F1 2.607(command. Options,)2.607 F .107 +(if supplied, ha)2.607 F .407 -.15(ve t)-.2 H(he).15 E(follo)144 120 Q +(wing meanings:)-.25 E F2<ad6d>144 132 Q F0 -.1(ke)2.5 G(ymap)-.2 E F1 +(Use)180 144 Q F0 -.1(ke)5.158 G(ymap)-.2 E F1 2.658(as the k)5.348 F +-.15(ey)-.1 G 2.658(map to be af).15 F 2.659 +(fected by the subsequent bindings.)-.25 F(Acceptable)7.659 E F0 -.1(ke) +180 156 S(ymap)-.2 E F1 3.193(names are)5.883 F F0 3.193 (emacs, emacs\255standar)5.693 F 3.192 (d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E -(vi\255command)180 144 Q F0 4.089(,a)C(nd)-4.089 E F2(vi\255insert)4.379 -E F0(.).68 E F2(vi)6.589 E F0 1.589(is equi)4.089 F -.25(va)-.25 G 1.589 -(lent to).25 F F2(vi\255command)4.089 E F0(\()4.089 E F2(vi\255mo)A(ve) --.1 E F0 1.59(is also a syn-)4.089 F(on)180 156 Q(ym\);)-.15 E F2(emacs) -2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F2(emacs\255standar) -2.5 E(d)-.37 E F0(.)A F1<ad6c>144 168 Q F0(List the names of all)180 168 -Q F1 -.18(re)2.5 G(adline).18 E F0(functions.)2.5 E F1<ad70>144 180 Q F0 -(Display)180 180 Q F1 -.18(re)2.5 G(adline).18 E F0 +(vi\255command)180 168 Q F1 4.089(,a)C(nd)-4.089 E F0(vi\255insert)4.379 +E F1(.).68 E F0(vi)6.589 E F1 1.589(is equi)4.089 F -.25(va)-.25 G 1.589 +(lent to).25 F F0(vi\255command)4.089 E F1(\()4.089 E F0(vi\255mo)A(ve) +-.1 E F1 1.59(is also a syn-)4.089 F(on)180 180 Q(ym\);)-.15 E F0(emacs) +2.5 E F1(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F0(emacs\255standar) +2.5 E(d)-.37 E F1(.)A F2<ad6c>144 192 Q F1(List the names of all)180 192 +Q F2 -.18(re)2.5 G(adline).18 E F1(functions.)2.5 E F2<ad70>144 204 Q F1 +(Display)180 204 Q F2 -.18(re)2.5 G(adline).18 E F1 (function names and bindings in such a w)2.5 E(ay that the)-.1 E 2.5(yc) --.15 G(an be re-read.)-2.5 E F1<ad50>144 192 Q F0(List current)180 192 Q -F1 -.18(re)2.5 G(adline).18 E F0(function names and bindings.)2.5 E F1 -<ad73>144 204 Q F0(Display)180 204 Q F1 -.18(re)3.655 G(adline).18 E F0 +-.15 G(an be re-read.)-2.5 E F2<ad50>144 216 Q F1(List current)180 216 Q +F2 -.18(re)2.5 G(adline).18 E F1(function names and bindings.)2.5 E F2 +<ad73>144 228 Q F1(Display)180 228 Q F2 -.18(re)3.655 G(adline).18 E F1 -.1(ke)3.655 G 3.655(ys)-.05 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 216 S 2.5(yt).1 G(hat the)-2.5 -E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1<ad53>144 228 Q F0(Display)180 -228 Q F1 -.18(re)2.5 G(adline).18 E F0 -.1(ke)2.5 G 2.5(ys)-.05 G +1.155(utput in such a)-3.655 F -.1(wa)180 240 S 2.5(yt).1 G(hat the)-2.5 +E 2.5(yc)-.15 G(an be re-read.)-2.5 E F2<ad53>144 252 Q F1(Display)180 +252 Q F2 -.18(re)2.5 G(adline).18 E F1 -.1(ke)2.5 G 2.5(ys)-.05 G (equences bound to macros and the strings the)-2.5 E 2.5(yo)-.15 G -(utput.)-2.5 E F1<ad76>144 240 Q F0(Display)180 240 Q F1 -.18(re)2.5 G -(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E +(utput.)-2.5 E F2<ad76>144 264 Q F1(Display)180 264 Q F2 -.18(re)2.5 G +(adline).18 E F1 -.25(va)2.5 G(riable names and v).25 E (alues in such a w)-.25 E(ay that the)-.1 E 2.5(yc)-.15 G -(an be re-read.)-2.5 E F1<ad56>144 252 Q F0(List current)180 252 Q F1 --.18(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E -(alues.)-.25 E F1<ad66>144 264 Q F2(\214lename)2.5 E F0(Read k)180 276 Q -.3 -.15(ey b)-.1 H(indings from).15 E F2(\214lename)2.5 E F0(.)A F1 -<ad71>144 288 Q F2(function)2.5 E F0(Query about which k)180 300 Q -.15 +(an be re-read.)-2.5 E F2<ad56>144 276 Q F1(List current)180 276 Q F2 +-.18(re)2.5 G(adline).18 E F1 -.25(va)2.5 G(riable names and v).25 E +(alues.)-.25 E F2<ad66>144 288 Q F0(\214lename)2.5 E F1(Read k)180 300 Q +.3 -.15(ey b)-.1 H(indings from).15 E F0(\214lename)2.5 E F1(.)A F2 +<ad71>144 312 Q F0(function)2.5 E F1(Query about which k)180 324 Q -.15 (ey)-.1 G 2.5(si).15 G -1.9 -.4(nv o)-2.5 H .2 -.1(ke t).4 H(he named).1 -E F2(function)2.5 E F0(.)A F1<ad75>144 312 Q F2(function)2.5 E F0 -(Unbind all k)180 324 Q -.15(ey)-.1 G 2.5(sb).15 G(ound to the named) --2.5 E F2(function)2.5 E F0(.)A F1<ad72>144 336 Q F2 -.1(ke)2.5 G(yseq) --.2 E F0(Remo)180 348 Q .3 -.15(ve a)-.15 H .3 -.15(ny c).15 H -(urrent binding for).15 E F2 -.1(ke)2.5 G(yseq)-.2 E F0(.)A F1<ad78>144 -360 Q F2 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F2(shell\255command)A F0(Cause) -180 372 Q F2(shell\255command)4.325 E F0 1.825(to be e)4.325 F -.15(xe) --.15 G 1.825(cuted whene).15 F -.15(ve)-.25 G(r).15 E F2 -.1(ke)4.325 G -(yseq)-.2 E F0 1.825(is entered.)4.325 F(When)6.825 E F2(shell\255com-) -4.325 E(mand)180 384 Q F0 1.765(is e)4.265 F -.15(xe)-.15 G 1.765 +E F0(function)2.5 E F1(.)A F2<ad75>144 336 Q F0(function)2.5 E F1 +(Unbind all k)180 348 Q -.15(ey)-.1 G 2.5(sb).15 G(ound to the named) +-2.5 E F0(function)2.5 E F1(.)A F2<ad72>144 360 Q F0 -.1(ke)2.5 G(yseq) +-.2 E F1(Remo)180 372 Q .3 -.15(ve a)-.15 H .3 -.15(ny c).15 H +(urrent binding for).15 E F0 -.1(ke)2.5 G(yseq)-.2 E F1(.)A F2<ad78>144 +384 Q F0 -.1(ke)2.5 G(yseq)-.2 E F2([: ])A F0(shell\255command)A F1 +(Cause)180 396 Q F0(shell\255command)4.344 E F1 1.844(to be e)4.344 F +-.15(xe)-.15 G 1.844(cuted whene).15 F -.15(ve)-.25 G(r).15 E F0 -.1(ke) +4.345 G(yseq)-.2 E F1 1.845(is entered.)4.345 F 1.845(The separator be-) +6.845 F(tween)180 408 Q F0 -.1(ke)3.016 G(yseq)-.2 E F1(and)3.016 E F0 +(shell\255command)3.016 E F1 .516 +(is either whitespace or a colon optionally follo)3.016 F .515(wed by) +-.25 F 3.458(whitespace. If)180 420 R .958(the separator is whitespace,) +3.458 F F0(shell\255command)3.458 E F1 .958(must be enclosed in double) +3.458 F .623(quotes and)180 432 R F2 -.18(re)3.123 G(adline).18 E F1 +-.15(ex)3.123 G .623(pands an).15 F 3.123(yo)-.15 G 3.123(fi)-3.123 G +.623(ts special backslash-escapes in)-3.123 F F0(shell\255command)3.122 +E F1(be-)3.122 E .712(fore sa)180 444 R .712(ving it.)-.2 F .713 +(If the separator is a colon, an)5.712 F 3.213(ye)-.15 G .713 +(nclosing double quotes are optional, and)-3.213 F F2 -.18(re)180 456 S +(adline).18 E F1 .099(does not e)2.599 F .099 +(xpand the command string before sa)-.15 F .098(ving it.)-.2 F .098 +(Since the entire k)5.098 F .398 -.15(ey b)-.1 H(ind-).15 E 2.72(ing e) +180 468 R 2.72(xpression must be a single ar)-.15 F 2.72 +(gument, it should be enclosed in quotes.)-.18 F(When)7.72 E F0 +(shell\255command)180 480 Q F1 .563(is e)3.063 F -.15(xe)-.15 G .563 (cuted, the shell sets the).15 F/F3 9/Times-Bold@0 SF(READLINE_LINE) -4.265 E F0 -.25(va)4.015 G 1.765(riable to the contents of the).25 F F1 --.18(re)180 396 S(adline).18 E F0 .375(line b)2.874 F(uf)-.2 E .375 -(fer and the)-.25 F F3(READLINE_POINT)2.875 E F0(and)2.625 E F3 -(READLINE_MARK)2.875 E F0 -.25(va)2.625 G .375(riables to the).25 F -1.186(current location of the insertion point and the sa)180 408 R -.15 -(ve)-.2 G 3.685(di).15 G 1.185(nsertion point \(the mark\), respec-) --3.685 F(ti)180 420 Q -.15(ve)-.25 G(ly).15 E 5.377(.T)-.65 G .377 -(he shell assigns an)-5.377 F 2.877(yn)-.15 G .377(umeric ar)-2.877 F -.377(gument the user supplied to the)-.18 F F3(READLINE_AR-)2.878 E -(GUMENT)180 432 Q F0 -.25(va)3.605 G 3.855(riable. If).25 F 1.355 -(there w)3.855 F 1.354(as no ar)-.1 F 1.354(gument, that v)-.18 F 1.354 -(ariable is not set.)-.25 F 1.354(If the e)6.354 F -.15(xe)-.15 G(cuted) -.15 E .343(command changes the v)180 444 R .343(alue of an)-.25 F 2.843 -(yo)-.15 G(f)-2.843 E F3(READLINE_LINE)2.844 E/F4 9/Times-Roman@0 SF(,)A -F3(READLINE_POINT)2.594 E F4(,)A F0(or)2.594 E F3(READ-)2.844 E -(LINE_MARK)180 456 Q F4(,)A F0(those ne)2.25 E 2.5(wv)-.25 G -(alues will be re\215ected in the editing state.)-2.75 E F1<ad58>144 468 -Q F0 .83(List all k)180 468 R 1.13 -.15(ey s)-.1 H .829 +3.063 E F1 -.25(va)2.813 G .563(riable to the contents).25 F .319 +(of the)180 492 R F2 -.18(re)2.82 G(adline).18 E F1 .32(line b)2.82 F +(uf)-.2 E .32(fer and the)-.25 F F3(READLINE_POINT)2.82 E F1(and)2.57 E +F3(READLINE_MARK)2.82 E F1 -.25(va)2.57 G(riables).25 E .546 +(to the current location of the insertion point and the sa)180 504 R +-.15(ve)-.2 G 3.045(di).15 G .545(nsertion point \(the mark\), re-) +-3.045 F(specti)180 516 Q -.15(ve)-.25 G(ly).15 E 7.188(.T)-.65 G 2.188 +(he shell assigns an)-7.188 F 4.688(yn)-.15 G 2.188(umeric ar)-4.688 F +2.188(gument the user supplied to the)-.18 F F3(READ-)4.688 E +(LINE_ARGUMENT)180 528 Q F1 -.25(va)2.399 G 2.649(riable. If).25 F .149 +(there w)2.649 F .149(as no ar)-.1 F .149(gument, that v)-.18 F .148 +(ariable is not set.)-.25 F .148(If the e)5.148 F(x-)-.15 E .582 +(ecuted command changes the v)180 540 R .583(alue of an)-.25 F 3.083(yo) +-.15 G(f)-3.083 E F3(READLINE_LINE)3.083 E/F4 9/Times-Roman@0 SF(,)A F3 +(READLINE_POINT)2.833 E F4(,)A F1(or)2.833 E F3(READLINE_MARK)180 552 Q +F4(,)A F1(those ne)2.25 E 2.5(wv)-.25 G +(alues will be re\215ected in the editing state.)-2.75 E F2<ad58>144 564 +Q F1 .83(List all k)180 564 R 1.13 -.15(ey s)-.1 H .829 (equences bound to shell commands and the associated commands in a for) -.15 F(-)-.2 E(mat that can be reused as input.)180 480 Q(The return v) -144 496.8 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15 +.15 F(-)-.2 E(mat that can be reused as input.)180 576 Q(The return v) +144 592.8 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15 (ve)-.25 G 2.5(no).15 G 2.5(ra)-2.5 G 2.5(ne)-2.5 G(rror occurred.)-2.5 -E F1(br)108 513.6 Q(eak)-.18 E F0([)2.5 E F2(n)A F0(])A .054 -(Exit from within a)144 525.6 R F1 -.25(fo)2.554 G(r).25 E F0(,)A F1 -(while)2.554 E F0(,)A F1(until)2.555 E F0 2.555(,o)C(r)-2.555 E F1 -(select)2.555 E F0 2.555(loop. If)2.555 F F2(n)2.555 E F0 .055 -(is speci\214ed, break)2.555 F F2(n)2.555 E F0(le)2.555 E -.15(ve)-.25 G -(ls.).15 E F2(n)5.415 E F0 .055(must be)2.795 F/F5 10/Symbol SF<b3>2.555 -E F0(1.)2.555 E(If)144 537.6 Q F2(n)3.075 E F0 .215(is greater than the\ +E F2(br)108 609.6 Q(eak)-.18 E F1([)2.5 E F0(n)A F1(])A .054 +(Exit from within a)144 621.6 R F2 -.25(fo)2.554 G(r).25 E F1(,)A F2 +(while)2.554 E F1(,)A F2(until)2.555 E F1 2.555(,o)C(r)-2.555 E F2 +(select)2.555 E F1 2.555(loop. If)2.555 F F0(n)2.555 E F1 .055 +(is speci\214ed, break)2.555 F F0(n)2.555 E F1(le)2.555 E -.15(ve)-.25 G +(ls.).15 E F0(n)5.415 E F1 .055(must be)2.795 F/F5 10/Symbol SF<b3>2.555 +E F1(1.)2.555 E(If)144 633.6 Q F0(n)3.075 E F1 .215(is greater than the\ number of enclosing loops, all enclosing loops are e)2.955 F 2.714 (xited. The)-.15 F .214(return v)2.714 F(alue)-.25 E(is 0 unless)144 -549.6 Q F2(n)2.5 E F0(is not greater than or equal to 1.)2.5 E F1 -.2 -(bu)108 566.4 S(iltin).2 E F2(shell\255b)2.5 E(uiltin)-.2 E F0([)2.5 E -F2(ar)A(guments)-.37 E F0(])A(Ex)144 578.4 Q .77 -(ecute the speci\214ed shell b)-.15 F .77(uiltin, passing it)-.2 F F2 -(ar)3.601 E(guments)-.37 E F0 3.271(,a).27 G .771(nd return its e)-3.271 +645.6 Q F0(n)2.5 E F1(is not greater than or equal to 1.)2.5 E F2 -.2 +(bu)108 662.4 S(iltin).2 E F0(shell\255b)2.5 E(uiltin)-.2 E F1([)2.5 E +F0(ar)A(guments)-.37 E F1(])A(Ex)144 674.4 Q .77 +(ecute the speci\214ed shell b)-.15 F .77(uiltin, passing it)-.2 F F0 +(ar)3.601 E(guments)-.37 E F1 3.271(,a).27 G .771(nd return its e)-3.271 F .771(xit status.)-.15 F .771(This is useful)5.771 F .616 (when de\214ning a function whose name is the same as a shell b)144 -590.4 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144 -602.4 R .57(uiltin within the function.)-.2 F(The)5.57 E F1(cd)3.07 E F0 +686.4 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144 +698.4 R .57(uiltin within the function.)-.2 F(The)5.57 E F2(cd)3.07 E F1 -.2(bu)3.07 G .57(iltin is commonly rede\214ned this w).2 F(ay)-.1 E -5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 614.4 Q(alse if)-.1 -E F2(shell\255b)2.84 E(uiltin)-.2 E F0(is not a shell b)2.74 E -(uiltin command.)-.2 E F1(caller)108 631.2 Q F0([)2.5 E F2 -.2(ex)C(pr) -.2 E F0(])A .254(Returns the conte)144 643.2 R .254(xt of an)-.15 F -2.754(ya)-.15 G(cti)-2.754 E .554 -.15(ve s)-.25 H .254 +5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 710.4 Q(alse if)-.1 +E F0(shell\255b)2.84 E(uiltin)-.2 E F1(is not a shell b)2.74 E +(uiltin command.)-.2 E(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E(2) +195.95 E 0 Cg EP +%%Page: 3 3 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(caller)108 84 Q F1([)2.5 E F0 -.2(ex)C(pr).2 E F1(])A +.254(Returns the conte)144 96 R .254(xt of an)-.15 F 2.754(ya)-.15 G +(cti)-2.754 E .554 -.15(ve s)-.25 H .254 (ubroutine call \(a shell function or a script e).15 F -.15(xe)-.15 G -.254(cuted with the).15 F F1(.)2.753 E F0(or)2.753 E F1(sour)144 655.2 Q -(ce)-.18 E F0 -.2(bu)2.824 G 2.824(iltins\). W).2 F(ithout)-.4 E F2 -.2 -(ex)2.824 G(pr).2 E F0(,)A F1(caller)2.824 E F0 .324 +.254(cuted with the).15 F F2(.)2.753 E F1(or)2.753 E F2(sour)144 108 Q +(ce)-.18 E F1 -.2(bu)2.824 G 2.824(iltins\). W).2 F(ithout)-.4 E F0 -.2 +(ex)2.824 G(pr).2 E F1(,)A F2(caller)2.824 E F1 .324 (displays the line number and source \214lename of the current)2.824 F -.254(subroutine call.)144 667.2 R .254(If a non-ne)5.254 F -.05(ga)-.15 -G(ti).05 E .554 -.15(ve i)-.25 H(nte).15 E .253(ger is supplied as)-.15 -F F2 -.2(ex)2.753 G(pr).2 E F0(,)A F1(caller)2.753 E F0 .253 +.254(subroutine call.)144 120 R .254(If a non-ne)5.254 F -.05(ga)-.15 G +(ti).05 E .554 -.15(ve i)-.25 H(nte).15 E .253(ger is supplied as)-.15 F +F0 -.2(ex)2.753 G(pr).2 E F1(,)A F2(caller)2.753 E F1 .253 (displays the line number)2.753 F 2.753(,s)-.4 G(ub-)-2.753 E 1.327(rou\ tine name, and source \214le corresponding to that position in the curr\ -ent e)144 679.2 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001 -(This e)144 691.2 R .001(xtra information may be used, for e)-.15 F .001 +ent e)144 132 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001 +(This e)144 144 R .001(xtra information may be used, for e)-.15 F .001 (xample, to print a stack trace.)-.15 F(The current frame is frame)5 E -3.019(0. The)144 703.2 R .519(return v)3.019 F .519 +3.019(0. The)144 156 R .519(return v)3.019 F .519 (alue is 0 unless the shell is not e)-.25 F -.15(xe)-.15 G .52 -(cuting a subroutine call or).15 F F2 -.2(ex)3.02 G(pr).2 E F0 .52 -(does not corre-)3.02 F(spond to a v)144 715.2 Q -(alid position in the call stack.)-.25 E(GNU Bash 5.2)72 768 Q(2021 No) -136.385 E -.15(ve)-.15 G(mber 22).15 E(2)190.545 E 0 Cg EP -%%Page: 3 3 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(cd)108 84 Q F0([)2.5 -E F1<ad4c>A F0(|[)A F1<ad50>A F0([)2.5 E F1<ad65>A F0(]] [\255@]] [)A/F2 -10/Times-Italic@0 SF(dir)A F0(])A .322(Change the current directory to) -144 96 R F2(dir)2.822 E F0 5.322(.i)C(f)-5.322 E F2(dir)2.822 E F0 .321 +(cuting a subroutine call or).15 F F0 -.2(ex)3.02 G(pr).2 E F1 .52 +(does not corre-)3.02 F(spond to a v)144 168 Q +(alid position in the call stack.)-.25 E F2(cd)108 184.8 Q F1([)2.5 E F2 +<ad4c>A F1(|[)A F2<ad50>A F1([)2.5 E F2<ad65>A F1(]]] [\255@] [)A F0 +(dir)A F1(])A .322(Change the current directory to)144 196.8 R F0(dir) +2.822 E F1 5.322(.i)C(f)-5.322 E F0(dir)2.822 E F1 .321 (is not supplied, the v)2.822 F .321(alue of the)-.25 F/F3 9 -/Times-Bold@0 SF(HOME)2.821 E F0 .321(shell v)2.571 F .321(ariable is) --.25 F .929(the def)144 108 R 3.429(ault. The)-.1 F -.25(va)3.429 G -(riable).25 E F3(CDP)3.429 E -.855(AT)-.666 G(H).855 E F0 .93 -(de\214nes the search path for the directory containing)3.179 F F2(dir) -3.78 E F0 3.43(:e).73 G(ach)-3.43 E .407(directory name in)144 120 R F3 -(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0 .407(is searched for)2.657 F -F2(dir)2.907 E F0 5.407(.A)C(lternati)-5.407 E .707 -.15(ve d)-.25 H -.407(irectory names in).15 F F3(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0 -.406(are sepa-)2.656 F .799(rated by a colon \(:\).)144 132 R 3.299(An) -5.799 G .799(ull directory name in)-3.299 F F3(CDP)3.299 E -.855(AT) --.666 G(H).855 E F0 .799(is the same as the current directory)3.049 F -3.3(,i)-.65 G(.e.,)-3.3 E -.74(``)144 144 S F1(.).74 E F0 -.74('')C -5.428(.I).74 G(f)-5.428 E F2(dir)3.278 E F0(be)3.658 E .428 -(gins with a slash \(/\), then)-.15 F F3(CDP)2.928 E -.855(AT)-.666 G(H) -.855 E F0 .428(is not used.)2.678 F(The)5.428 E F1<ad50>2.927 E F0 .427 -(option causes)2.927 F F1(cd)2.927 E F0 .427(to use the)2.927 F(ph)144 -156 Q .167 +/Times-Bold@0 SF(HOME)2.821 E F1 .321(shell v)2.571 F .321(ariable is) +-.25 F 1.365(the def)144 208.8 R 3.865(ault. The)-.1 F -.25(va)3.865 G +(riable).25 E F3(CDP)3.865 E -.855(AT)-.666 G(H).855 E F1 1.365 +(de\214nes the search path for the directory containing)3.615 F F0(dir) +4.216 E F1 3.866(:t).73 G(he)-3.866 E .91 +(shell searches each directory name in)144 220.8 R F3(CDP)3.41 E -.855 +(AT)-.666 G(H).855 E F1(for)3.16 E F0(dir)3.41 E F1 5.91(.A)C(lternati) +-5.91 E 1.209 -.15(ve d)-.25 H .909(irectory names in).15 F F3(CDP)3.409 +E -.855(AT)-.666 G(H).855 E F1 .764(are separated by a colon \(:\).)144 +232.8 R 3.264(An)5.764 G .764(ull directory name in)-3.264 F F3(CDP) +3.264 E -.855(AT)-.666 G(H).855 E F1 .764 +(is the same as the current direc-)3.014 F(tory)144 244.8 Q 2.872(,i) +-.65 G .372(.e., If)-2.872 F F0(dir)3.222 E F1(be)3.602 E .372 +(gins with a slash \(/\), then)-.15 F F3(CDP)2.872 E -.855(AT)-.666 G(H) +.855 E F1 .372(is not used.)2.622 F(The)5.371 E F2<ad50>2.871 E F1 .371 +(option causes)2.871 F F2(cd)2.871 E F1 .371(to use)2.871 F 1.03(the ph) +144 256.8 R 1.031 (ysical directory structure by resolving symbolic links while tra)-.05 F --.15(ve)-.2 G(rsing).15 E F2(dir)2.668 E F0 .168(and before processing) -2.668 F 1.225(instances of)144 168 R F2(..)3.725 E F0(in)3.725 E F2(dir) -3.725 E F0 1.225(\(see also the)3.725 F F1<ad50>3.725 E F0 1.225 -(option to the)3.725 F F1(set)3.725 E F0 -.2(bu)3.725 G 1.225 -(iltin command\); the).2 F F1<ad4c>3.725 E F0 1.225(option forces)3.725 -F .411(symbolic links to be follo)144 180 R .411 -(wed by resolving the link after processing instances of)-.25 F F2(..) -2.911 E F0(in)2.911 E F2(dir)2.911 E F0 5.411(.I)C(f)-5.411 E F2(..) -2.912 E F0(ap-)2.912 E .341(pears in)144 192 R F2(dir)2.841 E F0 2.841 -(,i)C 2.841(ti)-2.841 G 2.841(sp)-2.841 G .341(rocessed by remo)-2.841 F -.341(ving the immediately pre)-.15 F .34(vious pathname component from) --.25 F F2(dir)2.84 E F0(,)A .175(back to a slash or the be)144 204 R -.175(ginning of)-.15 F F2(dir)2.675 E F0 5.175(.I)C 2.675(ft)-5.175 G -(he)-2.675 E F1<ad65>2.676 E F0 .176(option is supplied with)2.676 F F1 -<ad50>2.676 E F0 2.676(,a)C .176(nd the current w)-2.676 F(ork-)-.1 E -.341(ing directory cannot be successfully determined after a successful\ - directory change,)144 216 R F1(cd)2.84 E F0 .34(will return)2.84 F .356 -(an unsuccessful status.)144 228 R .356(On systems that support it, the) -5.356 F F1<ad40>2.857 E F0 .357(option presents the e)2.857 F .357 -(xtended attrib)-.15 F(utes)-.2 E .07 -(associated with a \214le as a directory)144 240 R 5.07(.A)-.65 G 2.569 -(na)-5.07 G -.18(rg)-2.569 G .069(ument of).18 F F1<ad>2.569 E F0 .069 -(is con)2.569 F -.15(ve)-.4 G .069(rted to).15 F F3($OLDPWD)2.569 E F0 -.069(before the direc-)2.319 F .306(tory change is attempted.)144 252 R -.306(If a non-empty directory name from)5.306 F F3(CDP)2.806 E -.855(AT) --.666 G(H).855 E F0 .306(is used, or if)2.556 F F1<ad>2.807 E F0 .307 -(is the \214rst)2.807 F(ar)144 264 Q .116(gument, and the directory cha\ -nge is successful, the absolute pathname of the ne)-.18 F 2.615(ww)-.25 -G .115(orking direc-)-2.715 F .15 -(tory is written to the standard output.)144 276 R .15 -(If the directory change is successful,)5.15 F F1(cd)2.65 E F0 .15 -(sets the v)2.65 F .15(alue of the)-.25 F F1(PWD)144 288 Q F0(en)2.958 E -.458(vironment v)-.4 F .458(ariable to the ne)-.25 F 2.958(wd)-.25 G -.458(irectory name, and sets the)-2.958 F F1(OLDPWD)2.957 E F0(en)2.957 -E .457(vironment v)-.4 F(ari-)-.25 E .125(able to the v)144 300 R .125 -(alue of the current w)-.25 F .126(orking directory before the change.) --.1 F .126(The return v)5.126 F .126(alue is true if the)-.25 F -(directory w)144 312 Q(as successfully changed; f)-.1 E(alse otherwise.) --.1 E F1(command)108 328.8 Q F0([)2.5 E F1(\255pVv)A F0(])A F2(command) -2.5 E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(Run)144 340.8 Q F2 -(command)2.765 E F0(with)3.335 E F2(ar)2.895 E(gs)-.37 E F0 .065 +-.15(ve)-.2 G(rsing).15 E F0(dir)3.531 E F1 1.031(and before pro-)3.531 +F .947(cessing instances of)144 268.8 R F0(..)3.447 E F1(in)3.447 E F0 +(dir)3.447 E F1 .947(\(see also the)3.447 F F2<ad50>3.447 E F1 .947 +(option to the)3.447 F F2(set)3.446 E F1 -.2(bu)3.446 G .946 +(iltin command\); the).2 F F2<ad4c>3.446 E F1(option)3.446 E .19 +(forces symbolic links to be follo)144 280.8 R .191 +(wed by resolving the link after processing instances of)-.25 F F0(..) +2.691 E F1(in)2.691 E F0(dir)2.691 E F1 5.191(.I)C(f)-5.191 E F0(..)144 +292.8 Q F1 .322(appears in)2.822 F F0(dir)2.822 E F1 2.822(,i)C 2.822 +(ti)-2.822 G 2.822(sp)-2.822 G .321(rocessed by remo)-2.822 F .321 +(ving the immediately pre)-.15 F .321(vious pathname component from)-.25 +F F0(dir)144 304.8 Q F1 3.156(,b)C .656(ack to a slash or the be)-3.156 +F .656(ginning of)-.15 F F0(dir)3.156 E F1 5.656(.I)C 3.156(ft)-5.656 G +(he)-3.156 E F2<ad65>3.156 E F1 .656(option is supplied with)3.156 F F2 +<ad50>3.156 E F1 3.156(,a)C .656(nd the current)-3.156 F -.1(wo)144 +316.8 S .863(rking directory cannot be successfully determined after a \ +successful directory change,).1 F F2(cd)3.363 E F1(will)3.363 E .338 +(return an unsuccessful status.)144 328.8 R .339 +(On systems that support it, the)5.338 F F2<ad40>2.839 E F1 .339 +(option presents the e)2.839 F .339(xtended at-)-.15 F(trib)144 340.8 Q +.589(utes associated with a \214le as a directory)-.2 F 5.589(.A)-.65 G +3.089(na)-5.589 G -.18(rg)-3.089 G .589(ument of).18 F F2<ad>3.089 E F1 +.588(is con)3.089 F -.15(ve)-.4 G .588(rted to).15 F F3($OLDPWD)3.088 E +F1(before)2.838 E .21(the directory change is attempted.)144 352.8 R +.211(If a non-empty directory name from)5.211 F F3(CDP)2.711 E -.855(AT) +-.666 G(H).855 E F1 .211(is used, or if)2.461 F F2<ad>2.711 E F1(is) +2.711 E .274(the \214rst ar)144 364.8 R .274(gument, and the directory \ +change is successful, the absolute pathname of the ne)-.18 F 2.774(ww) +-.25 G(ork-)-2.874 E 1.055 +(ing directory is written to the standard output.)144 376.8 R 1.056 +(If the directory change is successful,)6.056 F F2(cd)3.556 E F1 1.056 +(sets the)3.556 F -.25(va)144 388.8 S .508(lue of the).25 F F2(PWD)3.008 +E F1(en)3.008 E .508(vironment v)-.4 F .508(ariable to the ne)-.25 F +3.008(wd)-.25 G .508(irectory name, and sets the)-3.008 F F2(OLDPWD) +3.008 E F1(en)3.008 E(vi-)-.4 E .112(ronment v)144 400.8 R .112 +(ariable to the v)-.25 F .112(alue of the current w)-.25 F .112 +(orking directory before the change.)-.1 F .112(The return v)5.112 F +(alue)-.25 E(is true if the directory w)144 412.8 Q +(as successfully changed; f)-.1 E(alse otherwise.)-.1 E F2(command)108 +429.6 Q F1([)2.5 E F2(\255pVv)A F1(])A F0(command)2.5 E F1([)2.5 E F0 +(ar)A(g)-.37 E F1 1.666(...)2.5 G(])-1.666 E(Run)144 441.6 Q F0(command) +2.765 E F1(with)3.335 E F0(ar)2.895 E(gs)-.37 E F1 .065 (suppressing the normal shell function lookup.)2.835 F .064(Only b)5.064 -F .064(uiltin commands or)-.2 F .501(commands found in the)144 352.8 R -F3 -.666(PA)3.001 G(TH)-.189 E F0 .502(are e)2.751 F -.15(xe)-.15 G -3.002(cuted. If).15 F(the)3.002 E F1<ad70>3.002 E F0 .502(option is gi) -3.002 F -.15(ve)-.25 G .502(n, the search for).15 F F2(command)3.202 E -F0(is)3.772 E .4(performed using a def)144 364.8 R .4(ault v)-.1 F .4 -(alue for)-.25 F F3 -.666(PA)2.9 G(TH)-.189 E F0 .399 +F .064(uiltin commands or)-.2 F .501(commands found in the)144 453.6 R +F3 -.666(PA)3.001 G(TH)-.189 E F1 .502(are e)2.751 F -.15(xe)-.15 G +3.002(cuted. If).15 F(the)3.002 E F2<ad70>3.002 E F1 .502(option is gi) +3.002 F -.15(ve)-.25 G .502(n, the search for).15 F F0(command)3.202 E +F1(is)3.772 E .4(performed using a def)144 465.6 R .4(ault v)-.1 F .4 +(alue for)-.25 F F3 -.666(PA)2.9 G(TH)-.189 E F1 .399 (that is guaranteed to \214nd all of the standard utilities.)2.649 F(If) -5.399 E .174(either the)144 376.8 R F1<ad56>2.674 E F0(or)2.674 E F1 -<ad76>2.674 E F0 .175(option is supplied, a description of)2.674 F F2 -(command)2.875 E F0 .175(is printed.)3.445 F(The)5.175 E F1<ad76>2.675 E -F0 .175(option causes)2.675 F 3.318(as)144 388.8 S .818(ingle w)-3.318 F +5.399 E .174(either the)144 477.6 R F2<ad56>2.674 E F1(or)2.674 E F2 +<ad76>2.674 E F1 .175(option is supplied, a description of)2.674 F F0 +(command)2.875 E F1 .175(is printed.)3.445 F(The)5.175 E F2<ad76>2.675 E +F1 .175(option causes)2.675 F 3.318(as)144 489.6 S .818(ingle w)-3.318 F .817(ord indicating the command or \214lename used to in)-.1 F -.2(vo) --.4 G -.1(ke).2 G F2(command)3.617 E F0 .817(to be displayed; the)4.087 -F F1<ad56>144 400.8 Q F0 .249(option produces a more v)2.749 F .249 -(erbose description.)-.15 F .249(If the)5.249 F F1<ad56>2.749 E F0(or) -2.749 E F1<ad76>2.75 E F0 .25(option is supplied, the e)2.75 F .25 -(xit status)-.15 F 1.005(is 0 if)144 412.8 R F2(command)3.705 E F0 -.1 +-.4 G -.1(ke).2 G F0(command)3.617 E F1 .817(to be displayed; the)4.087 +F F2<ad56>144 501.6 Q F1 .249(option produces a more v)2.749 F .249 +(erbose description.)-.15 F .249(If the)5.249 F F2<ad56>2.749 E F1(or) +2.749 E F2<ad76>2.75 E F1 .25(option is supplied, the e)2.75 F .25 +(xit status)-.15 F 1.005(is 0 if)144 513.6 R F0(command)3.705 E F1 -.1 (wa)4.275 G 3.505(sf).1 G 1.005(ound, and 1 if not.)-3.505 F 1.004 -(If neither option is supplied and an error occurred or)6.005 F F2 -(command)144.2 424.8 Q F0 1.598(cannot be found, the e)4.868 F 1.599 +(If neither option is supplied and an error occurred or)6.005 F F0 +(command)144.2 525.6 Q F1 1.598(cannot be found, the e)4.868 F 1.599 (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 436.8 S -(iltin is the e).2 E(xit status of)-.15 E F2(command)2.7 E F0(.).77 E F1 -(compgen)108 453.6 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(wor)-2.5 E(d) --.37 E F0(])A .013(Generate possible completion matches for)144 465.6 R -F2(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F2(option)2.513 -E F0 .013(s, which may be an)B 2.512(yo)-.15 G(ption)-2.512 E .981 -(accepted by the)144 477.6 R F1(complete)3.481 E F0 -.2(bu)3.481 G .981 -(iltin with the e).2 F .981(xception of)-.15 F F1<ad70>3.481 E F0(and) -3.481 E F1<ad72>3.481 E F0 3.481(,a)C .982(nd write the matches to the) --3.481 F .131(standard output.)144 489.6 R .131(When using the)5.131 F -F1<ad46>2.631 E F0(or)2.631 E F1<ad43>2.631 E F0 .131(options, the v) -2.631 F .13(arious shell v)-.25 F .13(ariables set by the program-)-.25 -F(mable completion f)144 501.6 Q(acilities, while a)-.1 E -.25(va)-.2 G -(ilable, will not ha).25 E .3 -.15(ve u)-.2 H(seful v).15 E(alues.)-.25 -E .352(The matches will be generated in the same w)144 525.6 R .352 +(xit status of the)-.15 F F2(command)4.099 E F1 -.2(bu)144 537.6 S +(iltin is the e).2 E(xit status of)-.15 E F0(command)2.7 E F1(.).77 E F2 +(compgen)108 554.4 Q F1([)2.5 E F2<ad56>A F0(varname)2.5 E F1 2.5(][)C +F0(option)-2.5 E F1 2.5(][)C F0(wor)-2.5 E(d)-.37 E F1(])A .013 +(Generate possible completion matches for)144 566.4 R F0(wor)2.513 E(d) +-.37 E F1 .013(according to the)2.513 F F0(option)2.513 E F1 .013 +(s, which may be an)B 2.512(yo)-.15 G(ption)-2.512 E 1.216 +(accepted by the)144 578.4 R F2(complete)3.716 E F1 -.2(bu)3.716 G 1.216 +(iltin with the e).2 F 1.216(xceptions of)-.15 F F2<ad70>3.716 E F1(,)A +F2<ad72>3.717 E F1(,)A F2<ad44>3.717 E F1(,)A F2<ad45>3.717 E F1 3.717 +(,a)C(nd)-3.717 E F2<ad49>3.717 E F1 3.717(,a)C 1.217(nd write the) +-3.717 F .505(matches to the standard output.)144 590.4 R .505(If the) +5.505 F F2<ad56>3.005 E F1 .505(option is supplied,)3.005 F F2(compgen) +3.004 E F1 .504(stores the generated com-)3.004 F 1.086 +(pletions into the inde)144 602.4 R -.15(xe)-.15 G 3.586(da).15 G 1.086 +(rray v)-3.586 F(ariable)-.25 E F0(varname)3.586 E F1 1.087 +(instead of writing them to the standard output.)3.586 F .195 +(When using the)144 614.4 R F2<ad46>2.695 E F1(or)2.695 E F2<ad43>2.695 +E F1 .195(options, the v)2.695 F .195(arious shell v)-.25 F .194 +(ariables set by the programmable completion)-.25 F -.1(fa)144 626.4 S +(cilities, while a).1 E -.25(va)-.2 G(ilable, will not ha).25 E .3 -.15 +(ve u)-.2 H(seful v).15 E(alues.)-.25 E .352 +(The matches will be generated in the same w)144 643.2 R .352 (ay as if the programmable completion code had gen-)-.1 F .02(erated th\ em directly from a completion speci\214cation with the same \215ags.)144 -537.6 R(If)5.02 E F2(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only) -2.52 F(those completions matching)144 549.6 Q F2(wor)2.5 E(d)-.37 E F0 -(will be displayed.)2.5 E(The return v)144 573.6 Q +655.2 R(If)5.02 E F0(wor)2.52 E(d)-.37 E F1 .02(is speci\214ed, only) +2.52 F(those completions matching)144 667.2 Q F0(wor)2.5 E(d)-.37 E F1 +(will be displayed.)2.5 E(The return v)144 684 Q (alue is true unless an in)-.25 E -.25(va)-.4 G -(lid option is supplied, or no matches were generated.).25 E F1 -(complete)108 590.4 Q F0([)2.5 E F1(\255abcdefgjksuv)A F0 2.5(][)C F1 -<ad6f>-2.5 E F2(comp-option)2.5 E F0 2.5(][)C F1(\255DEI)-2.5 E F0 2.5 -(][)C F1<ad41>-2.5 E F2(action)2.5 E F0 2.5(][)C F1<ad47>-2.5 E F2 -(globpat)2.5 E F0 2.5(][)C F1<ad57>-2.5 E F2(wor)2.5 E(dlist)-.37 E F0 -(])A([)144 602.4 Q F1<ad46>A F2(function)2.5 E F0 2.5(][)C F1<ad43>-2.5 -E F2(command)2.5 E F0 2.5(][)C F1<ad58>-2.5 E F2(\214lterpat)2.5 E F0 -2.5(][)C F1<ad50>-2.5 E F2(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C F1<ad53> --2.5 E F2(suf)2.5 E<8c78>-.18 E F0(])A F2(name)2.5 E F0([)2.5 E F2 -(name ...)A F0(])A F1(complete \255pr)108 614.4 Q F0([)2.5 E F1(\255DEI) -A F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E .633(Specify ho)144 626.4 R -3.133(wa)-.25 G -.18(rg)-3.133 G .633(uments to each).18 F F2(name)3.133 -E F0 .633(should be completed.)3.133 F .634(If the)5.634 F F1<ad70>3.134 -E F0 .634(option is supplied, or if no)3.134 F .14 -(options are supplied, e)144 638.4 R .139 -(xisting completion speci\214cations are printed in a w)-.15 F .139 -(ay that allo)-.1 F .139(ws them to be)-.25 F .31(reused as input.)144 -650.4 R(The)5.31 E F1<ad72>2.81 E F0 .31(option remo)2.81 F -.15(ve)-.15 -G 2.81(sac).15 G .31(ompletion speci\214cation for each)-2.81 F F2(name) -2.81 E F0 2.81(,o)C 1.11 -.4(r, i)-2.81 H 2.81(fn).4 G(o)-2.81 E F2 -(name)2.81 E F0(s)A 1.208 -(are supplied, all completion speci\214cations.)144 662.4 R(The)6.208 E -F1<ad44>3.708 E F0 1.207(option indicates that other supplied options) -3.707 F .5(and actions should apply to the `)144 674.4 R(`def)-.74 E -(ault')-.1 E 3('c)-.74 G .5 -(ommand completion; that is, completion attempted on)-3 F 3.455(ac)144 -686.4 S .955(ommand for which no completion has pre)-3.455 F .955 -(viously been de\214ned.)-.25 F(The)5.955 E F1<ad45>3.455 E F0 .955 -(option indicates that)3.455 F .876 -(other supplied options and actions should apply to `)144 698.4 R -(`empty')-.74 E 3.376('c)-.74 G .876(ommand completion; that is, com-) --3.376 F .448(pletion attempted on a blank line.)144 710.4 R(The)5.447 E -F1<ad49>2.947 E F0 .447 -(option indicates that other supplied options and actions)2.947 F 1.149 -(should apply to completion on the initial non-assignment w)144 722.4 R -1.15(ord on the line, or after a command)-.1 F(GNU Bash 5.2)72 768 Q -(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(3)190.545 E 0 Cg EP +(lid option is supplied, or no matches were generated.).25 E F2 +(complete)108 700.8 Q F1([)2.5 E F2(\255abcdefgjksuv)A F1 2.5(][)C F2 +<ad6f>-2.5 E F0(comp-option)2.5 E F1 2.5(][)C F2(\255DEI)-2.5 E F1 2.5 +(][)C F2<ad41>-2.5 E F0(action)2.5 E F1(])A([)144 712.8 Q F2<ad47>A F0 +(globpat)2.5 E F1 2.5(][)C F2<ad57>-2.5 E F0(wor)2.5 E(dlist)-.37 E F1 +2.5(][)C F2<ad46>-2.5 E F0(function)2.5 E F1 2.5(][)C F2<ad43>-2.5 E F0 +(command)2.5 E F1(])A([)144 724.8 Q F2<ad58>A F0(\214lterpat)2.5 E F1 +2.5(][)C F2<ad50>-2.5 E F0(pr)2.5 E(e\214x)-.37 E F1 2.5(][)C F2<ad53> +-2.5 E F0(suf)2.5 E<8c78>-.18 E F1(])A F0(name)2.5 E F1([)2.5 E F0(name) +A F1 1.666(...)2.5 G(])-1.666 E(GNU Bash 5.2)72 768 Q(2023 January 27) +141.79 E(3)195.95 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E .431(delimiter such as)144 84 R/F1 10 -/Times-Bold@0 SF(;)2.931 E F0(or)2.931 E F1(|)2.931 E F0 2.931(,w)C .431 -(hich is usually command name completion.)-2.931 F .43 -(If multiple options are sup-)5.43 F .707(plied, the)144 96 R F1<ad44> -3.207 E F0 .707(option tak)3.207 F .707(es precedence o)-.1 F -.15(ve) --.15 G(r).15 E F1<ad45>3.208 E F0 3.208(,a)C .708(nd both tak)-3.208 F -3.208(ep)-.1 G .708(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F1<ad49> -3.208 E F0 5.708(.I)C 3.208(fa)-5.708 G 1.008 -.15(ny o)-3.208 H(f).15 E -F1<ad44>3.208 E F0(,)A F1<ad45>144 108 Q F0 2.604(,o)C(r)-2.604 E F1 -<ad49>2.604 E F0 .103(are supplied, an)2.603 F 2.603(yo)-.15 G(ther) --2.603 E/F2 10/Times-Italic@0 SF(name)2.603 E F0(ar)2.603 E .103 -(guments are ignored; these completions only apply to the)-.18 F -(case speci\214ed by the option.)144 120 Q .152 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(complete \255pr)108 84 Q F1([)2.5 E F2(\255DEI)A F1 2.5 +(][)C F0(name)-2.5 E F1 1.666(...)2.5 G(])-1.666 E .633(Specify ho)144 +96 R 3.133(wa)-.25 G -.18(rg)-3.133 G .633(uments to each).18 F F0(name) +3.133 E F1 .633(should be completed.)3.133 F .634(If the)5.634 F F2 +<ad70>3.134 E F1 .634(option is supplied, or if no)3.134 F .567 +(options or)144 108 R F0(name)3.067 E F1 3.067(sa)C .567(re supplied, e) +-3.067 F .566(xisting completion speci\214cations are printed in a w) +-.15 F .566(ay that allo)-.1 F(ws)-.25 E .046 +(them to be reused as input.)144 120 R(The)5.046 E F2<ad72>2.546 E F1 +.046(option remo)2.546 F -.15(ve)-.15 G 2.547(sac).15 G .047 +(ompletion speci\214cation for each)-2.547 F F0(name)2.547 E F1 2.547 +(,o)C .847 -.4(r, i)-2.547 H(f).4 E(no)144 132 Q F0(name)2.954 E F1 +2.953(sa)C .453(re supplied, all completion speci\214cations.)-2.953 F +(The)5.453 E F2<ad44>2.953 E F1 .453 +(option indicates that other supplied)2.953 F .687(options and actions \ +should apply to the command completion; that is, completion attempted o\ +n a)144 144 R 1.563(command for which no completion has pre)144 156 R +1.562(viously been de\214ned.)-.25 F(The)6.562 E F2<ad45>4.062 E F1 +1.562(option indicates that)4.062 F 1.018(other supplied options and ac\ +tions should apply to command completion; that is, completion at-)144 +168 R 1.003(tempted on a blank line.)144 180 R(The)6.003 E F2<ad49>3.503 +E F1 1.002 +(option indicates that other supplied options and actions should)3.503 F +.52(apply to completion on the initial non-assignment w)144 192 R .52 +(ord on the line, or after a command delimiter)-.1 F .726(such as)144 +204 R F2(;)3.226 E F1(or)3.226 E F2(|)3.226 E F1 3.226(,w)C .726 +(hich is usually command name completion.)-3.226 F .725 +(If multiple options are supplied, the)5.725 F F2<ad44>144 216 Q F1 .636 +(option tak)3.136 F .636(es precedence o)-.1 F -.15(ve)-.15 G(r).15 E F2 +<ad45>3.136 E F1 3.136(,a)C .637(nd both tak)-3.136 F 3.137(ep)-.1 G +.637(recedence o)-3.137 F -.15(ve)-.15 G(r).15 E F2<ad49>3.137 E F1 +5.637(.I)C 3.137(fa)-5.637 G .937 -.15(ny o)-3.137 H(f).15 E F2<ad44> +3.137 E F1(,)A F2<ad45>3.137 E F1 3.137(,o)C(r)-3.137 E F2<ad49>3.137 E +F1 1.588(are supplied, an)144 228 R 4.088(yo)-.15 G(ther)-4.088 E F0 +(name)4.088 E F1(ar)4.088 E 1.588 +(guments are ignored; these completions only apply to the case)-.18 F +(speci\214ed by the option.)144 240 Q .152 (The process of applying these completion speci\214cations when w)144 -144 R .153(ord completion is attempted is de-)-.1 F(scribed in)144 156 Q -F2(bash\(1\))2.5 E F0(.)A .556(Other options, if speci\214ed, ha)144 180 -R .856 -.15(ve t)-.2 H .555(he follo).15 F .555(wing meanings.)-.25 F -.555(The ar)5.555 F .555(guments to the)-.18 F F1<ad47>3.055 E F0(,)A F1 -<ad57>3.055 E F0 3.055(,a)C(nd)-3.055 E F1<ad58>3.055 E F0 .722 -(options \(and, if necessary)144 192 R 3.222(,t)-.65 G(he)-3.222 E F1 -<ad50>3.222 E F0(and)3.222 E F1<ad53>3.222 E F0 .723 +256.8 R .153(ord completion is attempted is de-)-.1 F(scribed in)144 +268.8 Q F0(bash)2.5 E F1(\(1\).)A .556 +(Other options, if speci\214ed, ha)144 285.6 R .856 -.15(ve t)-.2 H .555 +(he follo).15 F .555(wing meanings.)-.25 F .555(The ar)5.555 F .555 +(guments to the)-.18 F F2<ad47>3.055 E F1(,)A F2<ad57>3.055 E F1 3.055 +(,a)C(nd)-3.055 E F2<ad58>3.055 E F1 .722(options \(and, if necessary) +144 297.6 R 3.222(,t)-.65 G(he)-3.222 E F2<ad50>3.222 E F1(and)3.222 E +F2<ad53>3.222 E F1 .723 (options\) should be quoted to protect them from e)3.222 F(xpan-)-.15 E -(sion before the)144 204 Q F1(complete)2.5 E F0 -.2(bu)2.5 G -(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F1<ad6f>144 216 Q F2 -(comp-option)2.5 E F0(The)184 228 Q F2(comp-option)2.791 E F0 .291 +(sion before the)144 309.6 Q F2(complete)2.5 E F1 -.2(bu)2.5 G +(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F2<ad6f>144 326.4 Q +F0(comp-option)2.5 E F1(The)184 338.4 Q F0(comp-option)2.791 E F1 .291 (controls se)2.791 F -.15(ve)-.25 G .291(ral aspects of the compspec') .15 F 2.791(sb)-.55 G(eha)-2.791 E .291(vior be)-.2 F .291 -(yond the simple)-.15 F(generation of completions.)184 240 Q F2 -(comp-option)5 E F0(may be one of:)2.5 E F1(bashdefault)184 252 Q F0 -.281(Perform the rest of the def)224 264 R(ault)-.1 E F1(bash)2.781 E F0 -.281(completions if the compspec generates no)2.781 F(matches.)224 276 Q -F1(default)184 288 Q F0 2.876(Use readline')224 288 R 5.376(sd)-.55 G -(ef)-5.376 E 2.875 +(yond the simple)-.15 F(generation of completions.)184 350.4 Q F0 +(comp-option)5 E F1(may be one of:)2.5 E F2(bashdefault)184 362.4 Q F1 +.281(Perform the rest of the def)224 374.4 R(ault)-.1 E F2(bash)2.781 E +F1 .281(completions if the compspec generates no)2.781 F(matches.)224 +386.4 Q F2(default)184 398.4 Q F1 2.876(Use readline')224 398.4 R 5.376 +(sd)-.55 G(ef)-5.376 E 2.875 (ault \214lename completion if the compspec generates no)-.1 F(matches.) -224 300 Q F1(dir)184 312 Q(names)-.15 E F0(Perform directory name compl\ -etion if the compspec generates no matches.)224 324 Q F1(\214lenames)184 -336 Q F0 -.7(Te)224 348 S .137(ll readline that the compspec generates \ -\214lenames, so it can perform an).7 F 2.637<798c>-.15 G(le-)-2.637 E -.134(name\255speci\214c processing \(lik)224 360 R 2.634(ea)-.1 G .134 -(dding a slash to directory names, quoting spe-)-2.634 F .45 -(cial characters, or suppressing trailing spaces\).)224 372 R .45 -(Intended to be used with shell)5.45 F(functions.)224 384 Q F1(noquote) -184 396 Q F0 -.7(Te)224 396 S .814 -(ll readline not to quote the completed w).7 F .814(ords if the)-.1 F -3.314(ya)-.15 G .814(re \214lenames \(quoting)-3.314 F -(\214lenames is the def)224 408 Q(ault\).)-.1 E F1(nosort)184 420 Q F0 --.7(Te)224 420 S(ll readline not to sort the list of possible completio\ -ns alphabetically).7 E(.)-.65 E F1(nospace)184 432 Q F0 -.7(Te)224 432 S -.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 444 Q F1 -(plusdirs)184 456 Q F0 1.985(After an)224 456 R 4.485(ym)-.15 G 1.985 +224 410.4 Q F2(dir)184 422.4 Q(names)-.15 E F1(Perform directory name c\ +ompletion if the compspec generates no matches.)224 434.4 Q F2 +(\214lenames)184 446.4 Q F1 -.7(Te)224 458.4 S .137(ll readline that th\ +e compspec generates \214lenames, so it can perform an).7 F 2.637<798c> +-.15 G(le-)-2.637 E .134(name\255speci\214c processing \(lik)224 470.4 R +2.634(ea)-.1 G .134(dding a slash to directory names, quoting spe-) +-2.634 F .45(cial characters, or suppressing trailing spaces\).)224 +482.4 R .45(Intended to be used with shell)5.45 F(functions.)224 494.4 Q +F2(fullquote)184 506.4 Q F1 -.7(Te)224 518.4 S +(ll readline to quote all the completed w).7 E(ords e)-.1 E -.15(ve)-.25 +G 2.5(ni).15 G 2.5(ft)-2.5 G(he)-2.5 E 2.5(ya)-.15 G +(re not \214lenames.)-2.5 E F2(noquote)184 530.4 Q F1 -.7(Te)224 530.4 S +.814(ll readline not to quote the completed w).7 F .814(ords if the)-.1 +F 3.314(ya)-.15 G .814(re \214lenames \(quoting)-3.314 F +(\214lenames is the def)224 542.4 Q(ault\).)-.1 E F2(nosort)184 554.4 Q +F1 -.7(Te)224 554.4 S(ll readline not to sort the list of possible comp\ +letions alphabetically).7 E(.)-.65 E F2(nospace)184 566.4 Q F1 -.7(Te) +224 566.4 S .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 +578.4 Q F2(plusdirs)184 590.4 Q F1 1.985(After an)224 590.4 R 4.485(ym) +-.15 G 1.985 (atches de\214ned by the compspec are generated, directory name)-4.485 F -.583(completion is attempted and an)224 468 R 3.084(ym)-.15 G .584 -(atches are added to the results of the other)-3.084 F(actions.)224 480 -Q F1<ad41>144 492 Q F2(action)2.5 E F0(The)184 504 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 -516 Q F0(Alias names.)224 516 Q(May also be speci\214ed as)5 E F1<ad61> -2.5 E F0(.)A F1(arrayv)184 528 Q(ar)-.1 E F0(Array v)224 540 Q -(ariable names.)-.25 E F1(binding)184 552 Q(Readline)224 552 Q F0 -.1 -(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 564 S(iltin) -.2 E F0(Names of shell b)224 564 Q(uiltin commands.)-.2 E -(May also be speci\214ed as)5 E F1<ad62>2.5 E F0(.)A F1(command)184 576 -Q F0(Command names.)224 588 Q(May also be speci\214ed as)5 E F1<ad63>2.5 -E F0(.)A F1(dir)184 600 Q(ectory)-.18 E F0(Directory names.)224 612 Q -(May also be speci\214ed as)5 E F1<ad64>2.5 E F0(.)A F1(disabled)184 624 -Q F0(Names of disabled shell b)224 636 Q(uiltins.)-.2 E F1(enabled)184 -648 Q F0(Names of enabled shell b)224 648 Q(uiltins.)-.2 E F1(export)184 -660 Q F0(Names of e)224 660 Q(xported shell v)-.15 E 2.5(ariables. May) --.25 F(also be speci\214ed as)2.5 E F1<ad65>2.5 E F0(.)A F1(\214le)184 -672 Q F0(File names.)224 672 Q(May also be speci\214ed as)5 E F1<ad66> -2.5 E F0(.)A F1(function)184 684 Q F0(Names of shell functions.)224 696 -Q F1(gr)184 708 Q(oup)-.18 E F0(Group names.)224 708 Q -(May also be speci\214ed as)5 E F1<ad67>2.5 E F0(.)A(GNU Bash 5.2)72 768 -Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(4)190.545 E 0 Cg EP +.583(completion is attempted and an)224 602.4 R 3.084(ym)-.15 G .584 +(atches are added to the results of the other)-3.084 F(actions.)224 +614.4 Q F2<ad41>144 626.4 Q F0(action)2.5 E F1(The)184 638.4 Q F0 +(action)2.5 E F1(may be one of the follo)2.5 E +(wing to generate a list of possible completions:)-.25 E F2(alias)184 +650.4 Q F1(Alias names.)224 650.4 Q(May also be speci\214ed as)5 E F2 +<ad61>2.5 E F1(.)A F2(arrayv)184 662.4 Q(ar)-.1 E F1(Array v)224 674.4 Q +(ariable names.)-.25 E F2(binding)184 686.4 Q(Readline)224 686.4 Q F1 +-.1(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F2 -.2(bu)184 698.4 S +(iltin).2 E F1(Names of shell b)224 698.4 Q(uiltin commands.)-.2 E +(May also be speci\214ed as)5 E F2<ad62>2.5 E F1(.)A(GNU Bash 5.2)72 768 +Q(2023 January 27)141.79 E(4)195.95 E 0 Cg EP %%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(helptopic)184 84 Q F0 -(Help topics as accepted by the)224 96 Q F1(help)2.5 E F0 -.2(bu)2.5 G -(iltin.).2 E F1(hostname)184 108 Q F0(Hostnames, as tak)224 120 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 132 Q F0 -(Job names, if job control is acti)224 132 Q -.15(ve)-.25 G 5(.M).15 G -(ay also be speci\214ed as)-5 E F1<ad6a>2.5 E F0(.)A F1 -.1(ke)184 144 S -(yw).1 E(ord)-.1 E F0(Shell reserv)224 156 Q(ed w)-.15 E 2.5(ords. May) --.1 F(also be speci\214ed as)2.5 E F1<ad6b>2.5 E F0(.)A F1(running)184 -168 Q F0(Names of running jobs, if job control is acti)224 168 Q -.15 -(ve)-.25 G(.).15 E F1(ser)184 180 Q(vice)-.1 E F0(Service names.)224 180 -Q(May also be speci\214ed as)5 E F1<ad73>2.5 E F0(.)A F1(setopt)184 192 -Q F0 -1.11(Va)224 192 S(lid ar)1.11 E(guments for the)-.18 E F1<ad6f>2.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 204 Q F0(Shell option names as accepted by the)224 204 Q F1 -(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 216 Q F0 -(Signal names.)224 216 Q F1(stopped)184 228 Q F0 -(Names of stopped jobs, if job control is acti)224 228 Q -.15(ve)-.25 G -(.).15 E F1(user)184 240 Q F0(User names.)224 240 Q -(May also be speci\214ed as)5 E F1<ad75>2.5 E F0(.)A F1 -.1(va)184 252 S -(riable).1 E F0(Names of all shell v)224 252 Q 2.5(ariables. May)-.25 F -(also be speci\214ed as)2.5 E F1<ad76>2.5 E F0(.)A F1<ad43>144 264 Q/F3 -10/Times-Italic@0 SF(command)2.5 E(command)184 276 Q F0 1.056(is e)3.556 -F -.15(xe)-.15 G 1.056(cuted in a subshell en).15 F 1.056 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(command)184 84 Q F1(Command names.)224 96 Q +(May also be speci\214ed as)5 E F2<ad63>2.5 E F1(.)A F2(dir)184 108 Q +(ectory)-.18 E F1(Directory names.)224 120 Q(May also be speci\214ed as) +5 E F2<ad64>2.5 E F1(.)A F2(disabled)184 132 Q F1 +(Names of disabled shell b)224 144 Q(uiltins.)-.2 E F2(enabled)184 156 Q +F1(Names of enabled shell b)224 156 Q(uiltins.)-.2 E F2(export)184 168 Q +F1(Names of e)224 168 Q(xported shell v)-.15 E 2.5(ariables. May)-.25 F +(also be speci\214ed as)2.5 E F2<ad65>2.5 E F1(.)A F2(\214le)184 180 Q +F1(File names.)224 180 Q(May also be speci\214ed as)5 E F2<ad66>2.5 E F1 +(.)A F2(function)184 192 Q F1(Names of shell functions.)224 204 Q F2(gr) +184 216 Q(oup)-.18 E F1(Group names.)224 216 Q +(May also be speci\214ed as)5 E F2<ad67>2.5 E F1(.)A F2(helptopic)184 +228 Q F1(Help topics as accepted by the)224 240 Q F2(help)2.5 E F1 -.2 +(bu)2.5 G(iltin.).2 E F2(hostname)184 252 Q F1(Hostnames, as tak)224 264 +Q(en from the \214le speci\214ed by the)-.1 E/F3 9/Times-Bold@0 SF +(HOSTFILE)2.5 E F1(shell v)2.25 E(ariable.)-.25 E F2(job)184 276 Q F1 +(Job names, if job control is acti)224 276 Q -.15(ve)-.25 G 5(.M).15 G +(ay also be speci\214ed as)-5 E F2<ad6a>2.5 E F1(.)A F2 -.1(ke)184 288 S +(yw).1 E(ord)-.1 E F1(Shell reserv)224 300 Q(ed w)-.15 E 2.5(ords. May) +-.1 F(also be speci\214ed as)2.5 E F2<ad6b>2.5 E F1(.)A F2(running)184 +312 Q F1(Names of running jobs, if job control is acti)224 312 Q -.15 +(ve)-.25 G(.).15 E F2(ser)184 324 Q(vice)-.1 E F1(Service names.)224 324 +Q(May also be speci\214ed as)5 E F2<ad73>2.5 E F1(.)A F2(setopt)184 336 +Q F1 -1.11(Va)224 336 S(lid ar)1.11 E(guments for the)-.18 E F2<ad6f>2.5 +E F1(option to the)2.5 E F2(set)2.5 E F1 -.2(bu)2.5 G(iltin.).2 E F2 +(shopt)184 348 Q F1(Shell option names as accepted by the)224 348 Q F2 +(shopt)2.5 E F1 -.2(bu)2.5 G(iltin.).2 E F2(signal)184 360 Q F1 +(Signal names.)224 360 Q F2(stopped)184 372 Q F1 +(Names of stopped jobs, if job control is acti)224 372 Q -.15(ve)-.25 G +(.).15 E F2(user)184 384 Q F1(User names.)224 384 Q +(May also be speci\214ed as)5 E F2<ad75>2.5 E F1(.)A F2 -.1(va)184 396 S +(riable).1 E F1(Names of all shell v)224 396 Q 2.5(ariables. May)-.25 F +(also be speci\214ed as)2.5 E F2<ad76>2.5 E F1(.)A F2<ad43>144 408 Q F0 +(command)2.5 E(command)184 420 Q F1 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 2.5 -(completions. Ar)184 288 R(guments are passed as with the)-.18 E F1 -<ad46>2.5 E F0(option.)2.5 E F1<ad46>144 300 Q F3(function)2.5 E F0 .113 -(The shell function)184 312 R F3(function)2.614 E F0 .114(is e)2.614 F +(completions. Ar)184 432 R(guments are passed as with the)-.18 E F2 +<ad46>2.5 E F1(option.)2.5 E F2<ad46>144 444 Q F0(function)2.5 E F1 .113 +(The shell function)184 456 R F0(function)2.614 E F1 .114(is e)2.614 F -.15(xe)-.15 G .114(cuted in the current shell en).15 F 2.614 -(vironment. When)-.4 F .114(the func-)2.614 F .817(tion is e)184 324 R --.15(xe)-.15 G .817(cuted, the \214rst ar).15 F .817(gument \()-.18 F F1 -($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .816 +(vironment. When)-.4 F .114(the func-)2.614 F .817(tion is e)184 468 R +-.15(xe)-.15 G .817(cuted, the \214rst ar).15 F .817(gument \()-.18 F F2 +($1)A F1 3.316(\)i)C 3.316(st)-3.316 G .816 (he name of the command whose ar)-3.316 F(guments)-.18 E 1.407 -(are being completed, the second ar)184 336 R 1.407(gument \()-.18 F F1 -($2)A F0 3.907(\)i)C 3.907(st)-3.907 G 1.407(he w)-3.907 F 1.407 -(ord being completed, and the)-.1 F .104(third ar)184 348 R .104 -(gument \()-.18 F F1($3)A F0 2.604(\)i)C 2.604(st)-2.604 G .104(he w) +(are being completed, the second ar)184 480 R 1.407(gument \()-.18 F F2 +($2)A F1 3.907(\)i)C 3.907(st)-3.907 G 1.407(he w)-3.907 F 1.407 +(ord being completed, and the)-.1 F .104(third ar)184 492 R .104 +(gument \()-.18 F F2($3)A F1 2.604(\)i)C 2.604(st)-2.604 G .104(he w) -2.604 F .104(ord preceding the w)-.1 F .103 -(ord being completed on the current com-)-.1 F .101(mand line.)184 360 R +(ord being completed on the current com-)-.1 F .101(mand line.)184 504 R .101(When it \214nishes, the possible completions are retrie)5.101 F -.15(ve)-.25 G 2.602(df).15 G .102(rom the v)-2.602 F .102(alue of the) --.25 F F2(COMPREPL)184 372 Q(Y)-.828 E F0(array v)2.25 E(ariable.)-.25 E -F1<ad47>144 384 Q F3(globpat)2.5 E F0 1.008(The pathname e)184 396 R -1.008(xpansion pattern)-.15 F F3(globpat)3.507 E F0 1.007(is e)3.507 F -1.007(xpanded to generate the possible comple-)-.15 F(tions.)184 408 Q -F1<ad50>144 420 Q F3(pr)2.5 E(e\214x)-.37 E(pr)184 432 Q(e\214x)-.37 E -F0 .534(is added at the be)3.034 F .534 +-.25 F F3(COMPREPL)184 516 Q(Y)-.828 E F1(array v)2.25 E(ariable.)-.25 E +F2<ad47>144 528 Q F0(globpat)2.5 E F1 1.008(The pathname e)184 540 R +1.008(xpansion pattern)-.15 F F0(globpat)3.507 E F1 1.007(is e)3.507 F +1.007(xpanded to generate the possible comple-)-.15 F(tions.)184 552 Q +F2<ad50>144 564 Q F0(pr)2.5 E(e\214x)-.37 E(pr)184 576 Q(e\214x)-.37 E +F1 .534(is added at the be)3.034 F .534 (ginning of each possible completion after all other options ha)-.15 F --.15(ve)-.2 G(been applied.)184 444 Q F1<ad53>144 456 Q F3(suf)2.5 E -<8c78>-.18 E(suf)184 456 Q<8c78>-.18 E F0 +-.15(ve)-.2 G(been applied.)184 588 Q F2<ad53>144 600 Q F0(suf)2.5 E +<8c78>-.18 E(suf)184 600 Q<8c78>-.18 E F1 (is appended to each possible completion after all other options ha)2.5 -E .3 -.15(ve b)-.2 H(een applied.).15 E F1<ad57>144 468 Q F3(wor)2.5 E -(dlist)-.37 E F0(The)184 480 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 +E .3 -.15(ve b)-.2 H(een applied.).15 E F2<ad57>144 612 Q F0(wor)2.5 E +(dlist)-.37 E F1(The)184 624 Q F0(wor)3.64 E(dlist)-.37 E F1 1.14 +(is split using the characters in the)3.64 F F3(IFS)3.64 E F1 1.139 (special v)3.39 F 1.139(ariable as delimiters, and)-.25 F .98 -(each resultant w)184 492 R .98(ord is e)-.1 F 3.481(xpanded. Shell)-.15 -F .981(quoting is honored within)3.481 F F3(wor)3.481 E(dlist)-.37 E F0 -3.481(,i)C 3.481(no)-3.481 G .981(rder to)-3.481 F(pro)184 504 Q .766 +(each resultant w)184 636 R .98(ord is e)-.1 F 3.481(xpanded. Shell)-.15 +F .981(quoting is honored within)3.481 F F0(wor)3.481 E(dlist)-.37 E F1 +3.481(,i)C 3.481(no)-3.481 G .981(rder to)-3.481 F(pro)184 648 Q .766 (vide a mechanism for the w)-.15 F .765 (ords to contain shell metacharacters or characters in the)-.1 F -.25 -(va)184 516 S 1.964(lue of).25 F F2(IFS)4.464 E/F4 9/Times-Roman@0 SF(.) -A F0 1.964 +(va)184 660 S 1.964(lue of).25 F F3(IFS)4.464 E/F4 9/Times-Roman@0 SF(.) +A F1 1.964 (The possible completions are the members of the resultant list which) -6.464 F(match the w)184 528 Q(ord being completed.)-.1 E F1<ad58>144 540 -Q F3(\214lterpat)2.5 E(\214lterpat)184 552 Q F0 .456 +6.464 F(match the w)184 672 Q(ord being completed.)-.1 E F2<ad58>144 684 +Q F0(\214lterpat)2.5 E(\214lterpat)184 696 Q F1 .456 (is a pattern as used for pathname e)2.956 F 2.956(xpansion. It)-.15 F .455(is applied to the list of possible)2.956 F 1.596 -(completions generated by the preceding options and ar)184 564 R 1.596 -(guments, and each completion)-.18 F(matching)184 576 Q F3(\214lterpat) -3.205 E F0 .705(is remo)3.205 F -.15(ve)-.15 G 3.205(df).15 G .704 -(rom the list.)-3.205 F 3.204(Al)5.704 G(eading)-3.204 E F1(!)3.204 E F0 -(in)3.204 E F3(\214lterpat)3.204 E F0(ne)3.204 E -.05(ga)-.15 G .704 -(tes the pattern;).05 F(in this case, an)184 588 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 .466(The return v)144 604.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 F1<ad70>2.967 E F0 -(or)2.967 E F1<ad72>2.967 E F0 .467(is sup-)2.967 F 1.362 -(plied without a)144 616.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 628.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(compopt)108 645.6 Q F0([)2.5 E F1<ad6f>A F3(option)2.5 E F0 2.5(][)C -F1(\255DEI)-2.5 E F0 2.5(][)C F1(+o)-2.5 E F3(option)2.5 E F0 2.5(][)C -F3(name)-2.5 E F0(])A .447(Modify completion options for each)144 657.6 -R F3(name)2.947 E F0 .447(according to the)2.947 F F3(option)2.947 E F0 -.447(s, or for the currently-e)B -.15(xe)-.15 G(cuting).15 E .726 -(completion if no)144 669.6 R F3(name)3.226 E F0 3.226(sa)C .726 -(re supplied.)-3.226 F .725(If no)5.725 F F3(option)3.225 E F0 3.225(sa) -C .725(re gi)-3.225 F -.15(ve)-.25 G .725 -(n, display the completion options for).15 F(each)144 681.6 Q F3(name) -3.223 E F0 .723(or the current completion.)3.223 F .724(The possible v) -5.724 F .724(alues of)-.25 F F3(option)3.224 E F0 .724(are those v)3.224 -F .724(alid for the)-.25 F F1(com-)3.224 E(plete)144 693.6 Q F0 -.2(bu) -2.678 G .178(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he) --5.178 E F1<ad44>2.678 E F0 .178 -(option indicates that other supplied options should apply to)2.678 F -1.227(the `)144 705.6 R(`def)-.74 E(ault')-.1 E 3.727('c)-.74 G 1.228(o\ -mmand completion; that is, completion attempted on a command for which \ -no)-3.727 F 2.039(completion has pre)144 717.6 R 2.039 -(viously been de\214ned.)-.25 F(The)7.038 E F1<ad45>4.538 E F0 2.038 -(option indicates that other supplied options)4.538 F 1.538 -(should apply to `)144 729.6 R(`empty')-.74 E 4.038('c)-.74 G 1.539 -(ommand completion; that is, completion attempted on a blank line.) --4.038 F(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22) -.15 E(5)190.545 E 0 Cg EP +(completions generated by the preceding options and ar)184 708 R 1.596 +(guments, and each completion)-.18 F(matching)184 720 Q F0(\214lterpat) +3.205 E F1 .705(is remo)3.205 F -.15(ve)-.15 G 3.205(df).15 G .704 +(rom the list.)-3.205 F 3.204(Al)5.704 G(eading)-3.204 E F2(!)3.204 E F1 +(in)3.204 E F0(\214lterpat)3.204 E F1(ne)3.204 E -.05(ga)-.15 G .704 +(tes the pattern;).05 F(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E +(5)195.95 E 0 Cg EP %%Page: 6 6 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E(The)144 84 Q/F1 10/Times-Bold@0 SF<ad49> -3.02 E F0 .52(option indicates that other supplied options should apply\ - to completion on the initial non-)3.02 F .867(assignment w)144 96 R -.868(ord on the line, or after a command delimiter such as)-.1 F F1(;) -3.368 E F0(or)3.368 E F1(|)3.368 E F0 3.368(,w)C .868 -(hich is usually com-)-3.368 F(mand name completion.)144 108 Q .432 -(The return v)144 132 R .431(alue is true unless an in)-.25 F -.25(va) --.4 G .431(lid option is supplied, an attempt is made to modify the op-) -.25 F(tions for a)144 144 Q/F2 10/Times-Italic@0 SF(name)2.5 E F0 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E +(in this case, an)184 84 Q 2.5(yc)-.15 G(ompletion not matching)-2.5 E +F0(\214lterpat)2.5 E F1(is remo)2.5 E -.15(ve)-.15 G(d.).15 E .46 +(The return v)144 100.8 R .46(alue is true unless an in)-.25 F -.25(va) +-.4 G .461(lid option is supplied, an option other than).25 F/F2 10 +/Times-Bold@0 SF<ad70>2.961 E F1(,)A F2<ad72>2.961 E F1(,)A F2<ad44> +2.961 E F1(,)A F2<ad45>2.961 E F1(,)A(or)144 112.8 Q F2<ad49>2.986 E F1 +.486(is supplied without a)2.986 F F0(name)2.986 E F1(ar)2.986 E .486 +(gument, an attempt is made to remo)-.18 F .785 -.15(ve a c)-.15 H .485 +(ompletion speci\214ca-).15 F .163(tion for a)144 124.8 R F0(name)2.663 +E F1 .164(for which no speci\214cation e)2.663 F .164 +(xists, or an error occurs adding a completion speci\214ca-)-.15 F +(tion.)144 136.8 Q F2(compopt)108 153.6 Q F1([)2.5 E F2<ad6f>A F0 +(option)2.5 E F1 2.5(][)C F2(\255DEI)-2.5 E F1 2.5(][)C F2(+o)-2.5 E F0 +(option)2.5 E F1 2.5(][)C F0(name)-2.5 E F1(])A .447 +(Modify completion options for each)144 165.6 R F0(name)2.947 E F1 .447 +(according to the)2.947 F F0(option)2.947 E F1 .447 +(s, or for the currently-e)B -.15(xe)-.15 G(cuting).15 E .725 +(completion if no)144 177.6 R F0(name)3.225 E F1 3.225(sa)C .725 +(re supplied.)-3.225 F .725(If no)5.725 F F0(option)3.225 E F1 3.225(sa) +C .725(re gi)-3.225 F -.15(ve)-.25 G .726 +(n, display the completion options for).15 F(each)144 189.6 Q F0(name) +3.224 E F1 .724(or the current completion.)3.224 F .724(The possible v) +5.724 F .724(alues of)-.25 F F0(option)3.224 E F1 .724(are those v)3.224 +F .723(alid for the)-.25 F F2(com-)3.223 E(plete)144 201.6 Q F1 -.2(bu) +2.677 G .177(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he) +-5.178 E F2<ad44>2.678 E F1 .178 +(option indicates that other supplied options should apply to)2.678 F +.805(the command completion; that is, completion attempted on a command\ + for which no completion)144 213.6 R .556(has pre)144 225.6 R .556 +(viously been de\214ned.)-.25 F(The)5.556 E F2<ad45>3.056 E F1 .557 +(option indicates that other supplied options should apply to)3.056 F +.519(command completion; that is, completion attempted on a blank line.) +144 237.6 R(The)5.518 E F2<ad49>3.018 E F1 .518(option indicates that) +3.018 F .456(other supplied options should apply to completion on the i\ +nitial non-assignment w)144 249.6 R .456(ord on the line,)-.1 F +(or after a command delimiter such as)144 261.6 Q F2(;)2.5 E F1(or)2.5 E +F2(|)2.5 E F1 2.5(,w)C(hich is usually command name completion.)-2.5 E +.432(The return v)144 278.4 R .431(alue is true unless an in)-.25 F -.25 +(va)-.4 G .431 +(lid option is supplied, an attempt is made to modify the op-).25 F +(tions for a)144 290.4 Q F0(name)2.5 E F1 (for which no completion speci\214cation e)2.5 E -(xists, or an output error occurs.)-.15 E F1(continue)108 160.8 Q F0([) -2.5 E F2(n)A F0(])A .85(Resume the ne)144 172.8 R .85 -(xt iteration of the enclosing)-.15 F F1 -.25(fo)3.35 G(r).25 E F0(,)A -F1(while)3.351 E F0(,)A F1(until)3.351 E F0 3.351(,o)C(r)-3.351 E F1 -(select)3.351 E F0 3.351(loop. If)3.351 F F2(n)3.711 E F0 .851 -(is speci\214ed, re-)3.591 F .204(sume at the)144 184.8 R F2(n)2.704 E -F0 .204(th enclosing loop.)B F2(n)5.564 E F0 .204(must be)2.944 F/F3 10 -/Symbol SF<b3>2.704 E F0 2.703(1. If)2.704 F F2(n)3.063 E F0 .203 -(is greater than the number of enclosing loops,)2.943 F 1.183 -(the last enclosing loop \(the `)144 196.8 R(`top-le)-.74 E -.15(ve)-.25 -G(l').15 E 3.683('l)-.74 G 1.183(oop\) is resumed.)-3.683 F 1.184 -(The return v)6.184 F 1.184(alue is 0 unless)-.25 F F2(n)3.684 E F0 -1.184(is not)3.684 F(greater than or equal to 1.)144 208.8 Q F1(declar) -108 225.6 Q(e)-.18 E F0([)2.5 E F1(\255aAfFgiIlnrtux)A F0 2.5(][)C F1 -<ad70>-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 237.6 Q F0([)2.5 E F1(\255aAfFgiIlnrtux)A F0 -2.5(][)C F1<ad70>-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 249.6 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 261.6 S 3.46(riables. The).25 -F F1<ad70>3.46 E F0 .96(option will display the attrib)3.46 F .96 -(utes and v)-.2 F .96(alues of each)-.25 F F2(name)3.82 E F0 5.96(.W).18 -G(hen)-5.96 E F1<ad70>3.46 E F0 .96(is used)3.46 F(with)144 273.6 Q F2 -(name)2.775 E F0(ar)2.775 E .275 -(guments, additional options, other than)-.18 F F1<ad66>2.775 E F0(and) -2.775 E F1<ad46>2.775 E F0 2.775(,a)C .274(re ignored.)-2.775 F(When) -5.274 E F1<ad70>2.774 E F0 .274(is supplied)2.774 F(without)144 285.6 Q -F2(name)3.789 E F0(ar)3.789 E 1.289(guments, it will display the attrib) --.18 F 1.289(utes and v)-.2 F 1.29(alues of all v)-.25 F 1.29 -(ariables ha)-.25 F 1.29(ving the at-)-.2 F(trib)144 297.6 Q .38 -(utes speci\214ed by the additional options.)-.2 F .38 -(If no other options are supplied with)5.38 F F1<ad70>2.88 E F0(,)A F1 -(declar)2.88 E(e)-.18 E F0(will)2.88 E 1.106(display the attrib)144 -309.6 R 1.106(utes and v)-.2 F 1.106(alues of all shell v)-.25 F 3.606 -(ariables. The)-.25 F F1<ad66>3.606 E F0 1.107 -(option will restrict the display to)3.606 F .3(shell functions.)144 -321.6 R(The)5.3 E F1<ad46>2.8 E F0 .299(option inhibits the display of \ -function de\214nitions; only the function name)2.8 F 1.54(and attrib)144 -333.6 R 1.54(utes are printed.)-.2 F 1.54(If the)6.54 F F1(extdeb)4.04 E -(ug)-.2 E F0 1.54(shell option is enabled using)4.04 F F1(shopt)4.04 E -F0 4.04(,t)C 1.54(he source \214le)-4.04 F .648 -(name and line number where each)144 345.6 R F2(name)3.148 E F0 .648 -(is de\214ned are displayed as well.)3.148 F(The)5.648 E F1<ad46>3.148 E -F0 .648(option implies)3.148 F F1<ad66>144 357.6 Q F0 5.836(.T)C(he) --5.836 E F1<ad67>3.336 E F0 .836(option forces v)3.336 F .837 +(xists, or an output error occurs.)-.15 E F2(continue)108 307.2 Q F1([) +2.5 E F0(n)A F1(])A .85(Resume the ne)144 319.2 R .85 +(xt iteration of the enclosing)-.15 F F2 -.25(fo)3.35 G(r).25 E F1(,)A +F2(while)3.351 E F1(,)A F2(until)3.351 E F1 3.351(,o)C(r)-3.351 E F2 +(select)3.351 E F1 3.351(loop. If)3.351 F F0(n)3.711 E F1 .851 +(is speci\214ed, re-)3.591 F .204(sume at the)144 331.2 R F0(n)2.704 E +F1 .204(th enclosing loop.)B F0(n)5.564 E F1 .204(must be)2.944 F/F3 10 +/Symbol SF<b3>2.704 E F1 2.703(1. If)2.704 F F0(n)3.063 E F1 .203 +(is greater than the number of enclosing loops,)2.943 F .751 +(the shell resumes the last enclosing loop \(the loop\).)144 343.2 R +.751(The return v)5.751 F .751(alue is 0 unless)-.25 F F0(n)3.251 E F1 +.752(is not greater)3.251 F(than or equal to 1.)144 355.2 Q F2(declar) +108 372 Q(e)-.18 E F1([)2.5 E F2(\255aAfFgiIlnrtux)A F1 2.5(][)C F2 +<ad70>-2.5 E F1 2.5(][)C F0(name)-2.5 E F1([=)A F0(value)A F1 2.5(].)C +1.666(..)-.834 G(])-1.666 E F2(typeset)108 384 Q F1([)2.5 E F2 +(\255aAfFgiIlnrtux)A F1 2.5(][)C F2<ad70>-2.5 E F1 2.5(][)C F0(name)-2.5 +E F1([=)A F0(value)A F1 2.5(].)C 1.666(..)-.834 G(])-1.666 E 1.265 +(Declare v)144 396 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 F0(name) +3.765 E F1 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 408 S +3.46(riables. The).25 F F2<ad70>3.46 E F1 .96 +(option will display the attrib)3.46 F .96(utes and v)-.2 F .96 +(alues of each)-.25 F F0(name)3.82 E F1 5.96(.W).18 G(hen)-5.96 E F2 +<ad70>3.46 E F1 .96(is used)3.46 F(with)144 420 Q F0(name)2.775 E F1(ar) +2.775 E .275(guments, additional options, other than)-.18 F F2<ad66> +2.775 E F1(and)2.775 E F2<ad46>2.775 E F1 2.775(,a)C .274(re ignored.) +-2.775 F(When)5.274 E F2<ad70>2.774 E F1 .274(is supplied)2.774 F +(without)144 432 Q F0(name)2.863 E F1(ar)2.863 E .363 +(guments, it will display the attrib)-.18 F .363(utes and v)-.2 F .364 +(alues of all v)-.25 F .364(ariables ha)-.25 F .364(ving the attrib-)-.2 +F .118(utes speci\214ed by the additional options.)144 444 R .118 +(If no other options are supplied with)5.118 F F2<ad70>2.618 E F1(,)A F2 +(declar)2.618 E(e)-.18 E F1 .118(will dis-)2.618 F .469(play the attrib) +144 456 R .469(utes and v)-.2 F .469(alues of all shell v)-.25 F 2.969 +(ariables. The)-.25 F F2<ad66>2.969 E F1 .47 +(option will restrict the display to shell)2.97 F 3.118(functions. The) +144 468 R F2<ad46>3.118 E F1 .617(option inhibits the display of functi\ +on de\214nitions; only the function name and)3.117 F(attrib)144 480 Q +1.058(utes are printed.)-.2 F 1.058(If the)6.058 F F2(extdeb)3.558 E(ug) +-.2 E F1 1.059(shell option is enabled using)3.559 F F2(shopt)3.559 E F1 +3.559(,t)C 1.059(he source \214le name)-3.559 F 1.282 +(and line number where each)144 492 R F0(name)3.781 E F1 1.281 +(is de\214ned are displayed as well.)3.781 F(The)6.281 E F2<ad46>3.781 E +F1 1.281(option implies)3.781 F F2<ad66>3.781 E F1(.)A(The)144 504 Q F2 +<ad67>2.734 E F1 .234(option forces v)2.734 F .235 (ariables to be created or modi\214ed at the global scope, e)-.25 F -.15 -(ve)-.25 G 3.337(nw).15 G(hen)-3.337 E F1(de-)3.337 E(clar)144 369.6 Q -(e)-.18 E F0 .819(is e)3.319 F -.15(xe)-.15 G .819 -(cuted in a shell function.).15 F .818 -(It is ignored in all other cases.)5.818 F(The)5.818 E F1<ad49>3.318 E -F0 .818(option causes local)3.318 F -.25(va)144 381.6 S .693 -(riables to inherit the attrib).25 F .693(utes \(e)-.2 F .693(xcept the) --.15 F F2(namer)3.194 E(ef)-.37 E F0(attrib)3.194 E .694(ute\) and v)-.2 -F .694(alue of an)-.25 F 3.194(ye)-.15 G .694(xisting v)-3.344 F -(ariable)-.25 E .82(with the same)144 393.6 R F2(name)3.32 E F0 .82 -(at a surrounding scope.)3.32 F .82(If there is no e)5.82 F .82 -(xisting v)-.15 F .82(ariable, the local v)-.25 F .82(ariable is)-.25 F -.379(initially unset.)144 405.6 R .379(The follo)5.379 F .379 -(wing options can be used to restrict output to v)-.25 F .38 -(ariables with the speci\214ed)-.25 F(attrib)144 417.6 Q(ute or to gi) --.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F1<ad61>144 -429.6 Q F0(Each)180 429.6 Q F2(name)2.5 E F0(is an inde)2.5 E -.15(xe) --.15 G 2.5(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F1(Arrays)2.5 E -F0(in)2.5 E F2(bash\(1\))2.5 E F0(\).)A F1<ad41>144 441.6 Q F0(Each)180 -441.6 Q F2(name)2.5 E F0(is an associati)2.5 E .3 -.15(ve a)-.25 H -(rray v).15 E(ariable \(see)-.25 E F1(Arrays)2.5 E F0(in)2.5 E F2 -(bash\(1\))2.5 E F0(\).)A F1<ad66>144 453.6 Q F0 -(Use function names only)180 453.6 Q(.)-.65 E F1<ad69>144 465.6 Q F0 -.558(The v)180 465.6 R .558(ariable is treated as an inte)-.25 F .558 -(ger; arithmetic e)-.15 F -.25(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 477.6 Q F0(in)2.25 E F2(bash\(1\))2.5 E F0 2.5(\)i)C 2.5(sp)-2.5 G -(erformed when the v)-2.5 E(ariable is assigned a v)-.25 E(alue.)-.25 E -F1<ad6c>144 489.6 Q F0 .909(When the v)180 489.6 R .909 -(ariable is assigned a v)-.25 F .909(alue, all upper)-.25 F .909 -(-case characters are con)-.2 F -.15(ve)-.4 G .91(rted to lo).15 F(wer) --.25 E(-)-.2 E 2.5(case. The)180 501.6 R(upper)2.5 E(-case attrib)-.2 E -(ute is disabled.)-.2 E F1<ad6e>144 513.6 Q F0(Gi)180 513.6 Q 1.62 -.15 -(ve e)-.25 H(ach).15 E F2(name)3.82 E F0(the)3.82 E F2(namer)3.819 E(ef) --.37 E F0(attrib)3.819 E 1.319 +(ve)-.25 G 2.735(nw).15 G(hen)-2.735 E F2(declar)2.735 E(e)-.18 E F1(is) +2.735 E -.15(exe)144 516 S .528(cuted in a shell function.).15 F .528 +(It is ignored in all other cases.)5.528 F(The)5.527 E F2<ad49>3.027 E +F1 .527(option causes local v)3.027 F(ariables)-.25 E .87 +(to inherit the attrib)144 528 R .87(utes \(e)-.2 F .87(xcept the)-.15 F +F0(namer)3.371 E(ef)-.37 E F1(attrib)3.371 E .871(ute\) and v)-.2 F .871 +(alue of an)-.25 F 3.371(ye)-.15 G .871(xisting v)-3.521 F .871 +(ariable with the)-.25 F(same)144 540 Q F0(name)3.458 E F1 .958 +(at a surrounding scope.)3.458 F .958(If there is no e)5.958 F .957 +(xisting v)-.15 F .957(ariable, the local v)-.25 F .957 +(ariable is initially)-.25 F 2.745(unset. The)144 552 R(follo)2.745 E +.245(wing options can be used to restrict output to v)-.25 F .246 +(ariables with the speci\214ed attrib)-.25 F(ute)-.2 E(or to gi)144 564 +Q .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F2<ad61>144 576 +Q F1(Each)180 576 Q F0(name)2.5 E F1(is an inde)2.5 E -.15(xe)-.15 G 2.5 +(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F2(Arrays)2.5 E F1(in)2.5 E +F0(bash)2.5 E F1(\(1\)\).)A F2<ad41>144 588 Q F1(Each)180 588 Q F0(name) +2.5 E F1(is an associati)2.5 E .3 -.15(ve a)-.25 H(rray v).15 E +(ariable \(see)-.25 E F2(Arrays)2.5 E F1(in)2.5 E F0(bash)2.5 E F1 +(\(1\)\).)A F2<ad66>144 600 Q F1(Use function names only)180 600 Q(.) +-.65 E F2<ad69>144 612 Q F1 .558(The v)180 612 R .558 +(ariable is treated as an inte)-.25 F .558(ger; arithmetic e)-.15 F -.25 +(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 624 Q F1(in)2.25 +E F0(bash)2.5 E F1(\(1\)\) is performed when the v)A +(ariable is assigned a v)-.25 E(alue.)-.25 E F2<ad6c>144 636 Q F1 .909 +(When the v)180 636 R .909(ariable is assigned a v)-.25 F .909 +(alue, all upper)-.25 F .909(-case characters are con)-.2 F -.15(ve)-.4 +G .91(rted to lo).15 F(wer)-.25 E(-)-.2 E 2.5(case. The)180 648 R(upper) +2.5 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad6e>144 660 Q F1(Gi) +180 660 Q 1.62 -.15(ve e)-.25 H(ach).15 E F0(name)3.82 E F1(the)3.82 E +F0(namer)3.819 E(ef)-.37 E F1(attrib)3.819 E 1.319 (ute, making it a name reference to another v)-.2 F(ariable.)-.25 E .477 -(That other v)180 525.6 R .478(ariable is de\214ned by the v)-.25 F .478 -(alue of)-.25 F F2(name)2.978 E F0 5.478(.A)C .478 -(ll references, assignments, and at-)-5.478 F(trib)180 537.6 Q .782 -(ute modi\214cations to)-.2 F F2(name)3.282 E F0 3.282(,e)C .782 -(xcept those using or changing the)-3.432 F F1<ad6e>3.281 E F0(attrib) -3.281 E .781(ute itself, are)-.2 F .808(performed on the v)180 549.6 R -.808(ariable referenced by)-.25 F F2(name)3.308 E F0 1.908 -.55('s v)D +(That other v)180 672 R .478(ariable is de\214ned by the v)-.25 F .478 +(alue of)-.25 F F0(name)2.978 E F1 5.478(.A)C .478 +(ll references, assignments, and at-)-5.478 F(trib)180 684 Q .782 +(ute modi\214cations to)-.2 F F0(name)3.282 E F1 3.282(,e)C .782 +(xcept those using or changing the)-3.432 F F2<ad6e>3.281 E F1(attrib) +3.281 E .781(ute itself, are)-.2 F .808(performed on the v)180 696 R +.808(ariable referenced by)-.25 F F0(name)3.308 E F1 1.908 -.55('s v)D 3.308(alue. The).3 F .809(nameref attrib)3.309 F .809(ute cannot be)-.2 -F(applied to array v)180 561.6 Q(ariables.)-.25 E F1<ad72>144 573.6 Q F0 -(Mak)180 573.6 Q(e)-.1 E F2(name)3.655 E F0 3.655(sr)C(eadonly)-3.655 E -6.154(.T)-.65 G 1.154(hese names cannot then be assigned v)-6.154 F -1.154(alues by subsequent as-)-.25 F(signment statements or unset.)180 -585.6 Q F1<ad74>144 597.6 Q F0(Gi)180 597.6 Q .729 -.15(ve e)-.25 H(ach) -.15 E F2(name)2.929 E F0(the)2.929 E F2(tr)2.929 E(ace)-.15 E F0(attrib) -2.929 E 2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F1 -(DEB)2.929 E(UG)-.1 E F0(and)2.93 E F1(RETURN)2.93 E F0 -(traps from the calling shell.)180 609.6 Q(The trace attrib)5 E -(ute has no special meaning for v)-.2 E(ariables.)-.25 E F1<ad75>144 -621.6 Q F0 .91(When the v)180 621.6 R .909(ariable is assigned a v)-.25 -F .909(alue, all lo)-.25 F(wer)-.25 E .909(-case characters are con)-.2 -F -.15(ve)-.4 G .909(rted to upper).15 F(-)-.2 E 2.5(case. The)180 633.6 -R(lo)2.5 E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F1<ad78> -144 645.6 Q F0(Mark)180 645.6 Q 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 .143 -(Using `+' instead of `\255' turns of)144 662.4 R 2.643(ft)-.25 G .143 -(he attrib)-2.643 F .143(ute instead, with the e)-.2 F .144 -(xceptions that)-.15 F F1(+a)2.644 E F0(and)2.644 E F1(+A)2.644 E F0 -.144(may not)2.644 F .579(be used to destro)144 674.4 R 3.079(ya)-.1 G -.579(rray v)-3.079 F .579(ariables and)-.25 F F1(+r)3.079 E F0 .579 -(will not remo)3.079 F .879 -.15(ve t)-.15 H .579(he readonly attrib).15 -F 3.079(ute. When)-.2 F .578(used in a)3.078 F(function,)144 686.4 Q F1 -(declar)3.543 E(e)-.18 E F0(and)3.543 E F1(typeset)3.543 E F0(mak)3.543 -E 3.543(ee)-.1 G(ach)-3.543 E F2(name)3.543 E F0 1.043 -(local, as with the)3.543 F F1(local)3.544 E F0 1.044 -(command, unless the)3.544 F F1<ad67>3.544 E F0 1.205 -(option is supplied.)144 698.4 R 1.205(If a v)6.205 F 1.205 -(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F2(value)A F0 3.705 -(,t)C 1.205(he v)-3.705 F 1.205(alue of the v)-.25 F 1.205 -(ariable is set to)-.25 F F2(value)144 710.4 Q F0 5.217(.W)C .217 -(hen using)-5.217 F F1<ad61>2.717 E F0(or)2.717 E F1<ad41>2.717 E F0 -.217(and the compound assignment syntax to create array v)2.717 F .218 -(ariables, addi-)-.25 F .882(tional attrib)144 722.4 R .882 -(utes do not tak)-.2 F 3.382(ee)-.1 G -.25(ff)-3.382 G .882 -(ect until subsequent assignments.).25 F .882(The return v)5.882 F .882 -(alue is 0 unless an)-.25 F(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15 -(ve)-.15 G(mber 22).15 E(6)190.545 E 0 Cg EP +F(applied to array v)180 708 Q(ariables.)-.25 E(GNU Bash 5.2)72 768 Q +(2023 January 27)141.79 E(6)195.95 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E(in)144 84 Q -.25(va)-.4 G .365(lid option \ -is encountered, an attempt is made to de\214ne a function using).25 F/F1 -10/Courier@0 SF .366(\255f foo=bar)2.866 F F0 2.866(,a)C 2.866(na)-2.866 -G(t-)-2.866 E .549(tempt is made to assign a v)144 96 R .549 -(alue to a readonly v)-.25 F .548 -(ariable, an attempt is made to assign a v)-.25 F .548(alue to an)-.25 F -.391(array v)144 108 R .391 -(ariable without using the compound assignment syntax \(see)-.25 F/F2 10 -/Times-Bold@0 SF(Arrays)2.892 E F0(in)2.892 E/F3 10/Times-Italic@0 SF -(bash\(1\))2.892 E F0 .392(\), one of the)B F3(names)144 120 Q F0 .359 -(is not a v)2.859 F .359(alid shell v)-.25 F .359 -(ariable name, an attempt is made to turn of)-.25 F 2.859(fr)-.25 G .359 -(eadonly status for a read-)-2.859 F 1.212(only v)144 132 R 1.213 -(ariable, an attempt is made to turn of)-.25 F 3.713(fa)-.25 G 1.213 -(rray status for an array v)-3.713 F 1.213(ariable, or an attempt is) --.25 F(made to display a non-e)144 144 Q(xistent function with)-.15 E F2 -<ad66>2.5 E F0(.)A F2(dirs [\255clpv] [+)108 160.8 Q F3(n)A F2 2.5(][)C -<ad>-2.5 E F3(n)A F2(])A F0 -.4(Wi)144 172.8 S .329 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF<ad72>144 84 Q F1(Mak)180 84 Q(e)-.1 E F0(name)3.655 E +F1 3.655(sr)C(eadonly)-3.655 E 6.154(.T)-.65 G 1.154 +(hese names cannot then be assigned v)-6.154 F 1.154 +(alues by subsequent as-)-.25 F(signment statements or unset.)180 96 Q +F2<ad74>144 108 Q F1(Gi)180 108 Q .729 -.15(ve e)-.25 H(ach).15 E F0 +(name)2.929 E F1(the)2.929 E F0(tr)2.929 E(ace)-.15 E F1(attrib)2.929 E +2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F2(DEB)2.929 +E(UG)-.1 E F1(and)2.93 E F2(RETURN)2.93 E F1 +(traps from the calling shell.)180 120 Q(The trace attrib)5 E +(ute has no special meaning for v)-.2 E(ariables.)-.25 E F2<ad75>144 132 +Q F1 .91(When the v)180 132 R .909(ariable is assigned a v)-.25 F .909 +(alue, all lo)-.25 F(wer)-.25 E .909(-case characters are con)-.2 F -.15 +(ve)-.4 G .909(rted to upper).15 F(-)-.2 E 2.5(case. The)180 144 R(lo) +2.5 E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad78>144 +156 Q F1(Mark)180 156 Q F0(name)2.5 E F1 2.5(sf)C(or e)-2.5 E +(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E 1.19 +(Using instead of turns of)144 172.8 R 3.69(ft)-.25 G 1.19(he attrib) +-3.69 F 1.191(ute instead, with the e)-.2 F 1.191(xceptions that)-.15 F +F2(+a)3.691 E F1(and)3.691 E F2(+A)3.691 E F1 1.191(may not be)3.691 F +1.362(used to destro)144 184.8 R 3.862(ya)-.1 G 1.362(rray v)-3.862 F +1.361(ariables and)-.25 F F2(+r)3.861 E F1 1.361(will not remo)3.861 F +1.661 -.15(ve t)-.15 H 1.361(he readonly attrib).15 F 3.861(ute. When) +-.2 F 1.361(used in a)3.861 F(function,)144 196.8 Q F2(declar)3.543 E(e) +-.18 E F1(and)3.543 E F2(typeset)3.543 E F1(mak)3.543 E 3.543(ee)-.1 G +(ach)-3.543 E F0(name)3.543 E F1 1.043(local, as with the)3.543 F F2 +(local)3.544 E F1 1.044(command, unless the)3.544 F F2<ad67>3.544 E F1 +1.205(option is supplied.)144 208.8 R 1.205(If a v)6.205 F 1.205 +(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F0(value)A F1 3.705 +(,t)C 1.205(he v)-3.705 F 1.205(alue of the v)-.25 F 1.205 +(ariable is set to)-.25 F F0(value)144 220.8 Q F1 5.217(.W)C .217 +(hen using)-5.217 F F2<ad61>2.717 E F1(or)2.717 E F2<ad41>2.717 E F1 +.217(and the compound assignment syntax to create array v)2.717 F .218 +(ariables, addi-)-.25 F .882(tional attrib)144 232.8 R .882 +(utes do not tak)-.2 F 3.382(ee)-.1 G -.25(ff)-3.382 G .882 +(ect until subsequent assignments.).25 F .882(The return v)5.882 F .882 +(alue is 0 unless an)-.25 F(in)144 244.8 Q -.25(va)-.4 G .458(lid optio\ +n is encountered, an attempt is made to de\214ne a function using an at\ +tempt is made to).25 F 1.243(assign a v)144 256.8 R 1.243 +(alue to a readonly v)-.25 F 1.242 +(ariable, an attempt is made to assign a v)-.25 F 1.242 +(alue to an array v)-.25 F(ariable)-.25 E .221 +(without using the compound assignment syntax \(see)144 268.8 R F2 +(Arrays)2.721 E F1(in)2.721 E F0(bash)2.721 E F1 .221 +(\(1\)\), one of the)B F0(names)2.722 E F1 .222(is not a)2.722 F -.25 +(va)144 280.8 S .172(lid shell v).25 F .171 +(ariable name, an attempt is made to turn of)-.25 F 2.671(fr)-.25 G .171 +(eadonly status for a readonly v)-2.671 F .171(ariable, an)-.25 F .96 +(attempt is made to turn of)144 292.8 R 3.46(fa)-.25 G .96 +(rray status for an array v)-3.46 F .96 +(ariable, or an attempt is made to display a)-.25 F(non-e)144 304.8 Q +(xistent function with)-.15 E F2<ad66>2.5 E F1(.)A F2 +(dirs [\255clpv] [+)108 321.6 Q F0(n)A F2 2.5(][)C<ad>-2.5 E F0(n)A F2 +(])A F1 -.4(Wi)144 333.6 S .329 (thout options, displays the list of currently remembered directories.) .4 F .328(The def)5.328 F .328(ault display is on a)-.1 F 1.238 -(single line with directory names separated by spaces.)144 184.8 R 1.238 -(Directories are added to the list with the)6.238 F F2(pushd)144 196.8 Q -F0 .928(command; the)3.428 F F2(popd)3.428 E F0 .928(command remo)3.428 +(single line with directory names separated by spaces.)144 345.6 R 1.238 +(Directories are added to the list with the)6.238 F F2(pushd)144 357.6 Q +F1 .928(command; the)3.428 F F2(popd)3.428 E F1 .928(command remo)3.428 F -.15(ve)-.15 G 3.428(se).15 G .928(ntries from the list.)-3.428 F .928 -(The current directory is al-)5.928 F -.1(wa)144 208.8 S -(ys the \214rst directory in the stack.).1 E F2<ad63>144 220.8 Q F0 -(Clears the directory stack by deleting all of the entries.)180 220.8 Q -F2<ad6c>144 232.8 Q F0 .881 -(Produces a listing using full pathnames; the def)180 232.8 R .882 +(The current directory is al-)5.928 F -.1(wa)144 369.6 S +(ys the \214rst directory in the stack.).1 E F2<ad63>144 381.6 Q F1 +(Clears the directory stack by deleting all of the entries.)180 381.6 Q +F2<ad6c>144 393.6 Q F1 .881 +(Produces a listing using full pathnames; the def)180 393.6 R .882 (ault listing format uses a tilde to denote)-.1 F(the home directory)180 -244.8 Q(.)-.65 E F2<ad70>144 256.8 Q F0 -(Print the directory stack with one entry per line.)180 256.8 Q F2<ad76> -144 268.8 Q F0 .273(Print the directory stack with one entry per line, \ -pre\214xing each entry with its inde)180 268.8 R 2.772(xi)-.15 G 2.772 -(nt)-2.772 G(he)-2.772 E(stack.)180 280.8 Q F2(+)144 292.8 Q F3(n)A F0 -1.564(Displays the)180 292.8 R F3(n)4.064 E F0 1.565 +405.6 Q(.)-.65 E F2<ad70>144 417.6 Q F1 +(Print the directory stack with one entry per line.)180 417.6 Q F2<ad76> +144 429.6 Q F1 .273(Print the directory stack with one entry per line, \ +pre\214xing each entry with its inde)180 429.6 R 2.772(xi)-.15 G 2.772 +(nt)-2.772 G(he)-2.772 E(stack.)180 441.6 Q F2(+)144 453.6 Q F0(n)A F1 +1.564(Displays the)180 453.6 R F0(n)4.064 E F1 1.565 (th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F2 -(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 304.8 Q F2<ad>144 316.8 Q F3 -(n)A F0 1.194(Displays the)180 316.8 R F3(n)3.694 E F0 1.194 +(dirs)4.065 E F1 1.565(when in)4.065 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 465.6 Q F2<ad>144 477.6 Q F0 +(n)A F1 1.194(Displays the)180 477.6 R F0(n)3.694 E F1 1.194 (th entry counting from the right of the list sho)B 1.194(wn by)-.25 F -F2(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 328.8 Q .257(The return v)144 -345.6 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 -(lid option is supplied or).25 F F3(n)2.758 E F0(inde)2.758 E -.15(xe) +F2(dirs)3.694 E F1 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 489.6 Q .257(The return v)144 +506.4 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 +(lid option is supplied or).25 F F0(n)2.758 E F1(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 357.6 Q F2(diso)108 374.4 Q(wn)-.1 E F0([)2.5 E F2 -(\255ar)A F0 2.5(][)C F2<ad68>-2.5 E F0 2.5(][)C F3(jobspec)-2.5 E F0 -(... |)2.5 E F3(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 386.4 S .122 -(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach).15 E F3(jobspec) -4.362 E F0 .122(from the table of acti)2.932 F .422 -.15(ve j)-.25 H -2.622(obs. If).15 F F3(jobspec)4.362 E F0 .121(is not present, and)2.932 -F .096(neither the)144 398.4 R F2<ad61>2.596 E F0 .096(nor the)2.596 F -F2<ad72>2.596 E F0 .096(option is supplied, the)2.596 F F3(curr)2.596 E -.096(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F2 -<ad68>2.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each) -.15 F F3(jobspec)145.74 410.4 Q F0 .586(is not remo)3.396 F -.15(ve)-.15 -G 3.086(df).15 G .585(rom the table, b)-3.086 F .585(ut is mark)-.2 F -.585(ed so that)-.1 F/F4 9/Times-Bold@0 SF(SIGHUP)3.085 E F0 .585 -(is not sent to the job if the)2.835 F .962(shell recei)144 422.4 R -.15 -(ve)-.25 G 3.462(sa).15 G F4(SIGHUP)A/F5 9/Times-Roman@0 SF(.)A F0 .962 -(If no)5.462 F F3(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F2 -<ad61>3.462 E F0 .962(option means to remo)3.462 F 1.262 -.15(ve o)-.15 -H 3.462(rm).15 G .962(ark all)-3.462 F 1.359(jobs; the)144 434.4 R F2 -<ad72>3.859 E F0 1.359(option without a)3.859 F F3(jobspec)5.599 E F0 +.15 F(tory stack.)144 518.4 Q F2(diso)108 535.2 Q(wn)-.1 E F1([)2.5 E F2 +(\255ar)A F1 2.5(][)C F2<ad68>-2.5 E F1 2.5(][)C F0(jobspec)-2.5 E F1 +-3.332 1.666(... |)2.5 H F0(pid).834 E F1 -3.332 1.666(... ])2.5 H -.4 +(Wi)144 547.2 S .122(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach) +.15 E F0(jobspec)4.362 E F1 .122(from the table of acti)2.932 F .422 +-.15(ve j)-.25 H 2.622(obs. If).15 F F0(jobspec)4.362 E F1 .121 +(is not present, and)2.932 F .096(neither the)144 559.2 R F2<ad61>2.596 +E F1 .096(nor the)2.596 F F2<ad72>2.596 E F1 .096 +(option is supplied, the)2.596 F F0(curr)2.596 E .096(ent job)-.37 F F1 +.096(is used.)2.596 F .096(If the)5.096 F F2<ad68>2.596 E F1 .096 +(option is gi)2.596 F -.15(ve)-.25 G .096(n, each).15 F F0(jobspec) +145.74 571.2 Q F1 .586(is not remo)3.396 F -.15(ve)-.15 G 3.086(df).15 G +.585(rom the table, b)-3.086 F .585(ut is mark)-.2 F .585(ed so that)-.1 +F/F3 9/Times-Bold@0 SF(SIGHUP)3.085 E F1 .585 +(is not sent to the job if the)2.835 F .962(shell recei)144 583.2 R -.15 +(ve)-.25 G 3.462(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0 SF(.)A F1 .962 +(If no)5.462 F F0(jobspec)5.202 E F1 .962(is supplied, the)3.772 F F2 +<ad61>3.462 E F1 .962(option means to remo)3.462 F 1.262 -.15(ve o)-.15 +H 3.462(rm).15 G .962(ark all)-3.462 F 1.359(jobs; the)144 595.2 R F2 +<ad72>3.859 E F1 1.359(option without a)3.859 F F0(jobspec)5.599 E F1 (ar)4.169 E 1.358(gument restricts operation to running jobs.)-.18 F -1.358(The return)6.358 F -.25(va)144 446.4 S(lue is 0 unless a).25 E F3 -(jobspec)4.24 E F0(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E -F2(echo)108 463.2 Q F0([)2.5 E F2(\255neE)A F0 2.5(][)C F3(ar)-2.5 E(g) --.37 E F0(...])2.5 E .424(Output the)144 475.2 R F3(ar)2.924 E(g)-.37 E -F0 .424(s, separated by spaces, follo)B .424(wed by a ne)-.25 F 2.924 -(wline. The)-.25 F .424(return status is 0 unless a write)2.924 F .308 -(error occurs.)144 487.2 R(If)5.308 E F2<ad6e>2.808 E F0 .308 -(is speci\214ed, the trailing ne)2.808 F .308(wline is suppressed.)-.25 -F .307(If the)5.308 F F2<ad65>2.807 E F0 .307(option is gi)2.807 F -.15 -(ve)-.25 G .307(n, inter).15 F(-)-.2 E .197(pretation of the follo)144 -499.2 R .198(wing backslash-escaped characters is enabled.)-.25 F(The) -5.198 E F2<ad45>2.698 E F0 .198(option disables the in-)2.698 F .067 -(terpretation of these escape characters, e)144 511.2 R -.15(ve)-.25 G +1.358(The return)6.358 F -.25(va)144 607.2 S(lue is 0 unless a).25 E F0 +(jobspec)4.24 E F1(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E +F2(echo)108 624 Q F1([)2.5 E F2(\255neE)A F1 2.5(][)C F0(ar)-2.5 E(g) +-.37 E F1 1.666(...)2.5 G(])-1.666 E .424(Output the)144 636 R F0(ar) +2.924 E(g)-.37 E F1 .424(s, separated by spaces, follo)B .424 +(wed by a ne)-.25 F 2.924(wline. The)-.25 F .424 +(return status is 0 unless a write)2.924 F .308(error occurs.)144 648 R +(If)5.308 E F2<ad6e>2.808 E F1 .308(is speci\214ed, the trailing ne) +2.808 F .308(wline is suppressed.)-.25 F .307(If the)5.308 F F2<ad65> +2.807 E F1 .307(option is gi)2.807 F -.15(ve)-.25 G .307(n, inter).15 F +(-)-.2 E .197(pretation of the follo)144 660 R .198 +(wing backslash-escaped characters is enabled.)-.25 F(The)5.198 E F2 +<ad45>2.698 E F1 .198(option disables the in-)2.698 F .067 +(terpretation of these escape characters, e)144 672 R -.15(ve)-.25 G 2.567(no).15 G 2.567(ns)-2.567 G .067(ystems where the)-2.567 F 2.567 (ya)-.15 G .067(re interpreted by def)-2.567 F 2.567(ault. The)-.1 F F2 -(xpg_echo)144 523.2 Q F0 .601 -(shell option may be used to dynamically determine whether or not)3.101 -F F2(echo)3.102 E F0 -.15(ex)3.102 G .602(pands these).15 F .659 -(escape characters by def)144 535.2 R(ault.)-.1 E F2(echo)5.659 E F0 -.659(does not interpret)3.159 F F2<adad>3.159 E F0 .659 -(to mean the end of options.)3.159 F F2(echo)5.658 E F0(inter)3.158 E(-) --.2 E(prets the follo)144 547.2 Q(wing escape sequences:)-.25 E F2(\\a) -144 559.2 Q F0(alert \(bell\))180 559.2 Q F2(\\b)144 571.2 Q F0 -(backspace)180 571.2 Q F2(\\c)144 583.2 Q F0(suppress further output)180 -583.2 Q F2(\\e)144 595.2 Q(\\E)144 607.2 Q F0(an escape character)180 -607.2 Q F2(\\f)144 619.2 Q F0(form feed)180 619.2 Q F2(\\n)144 631.2 Q -F0(ne)180 631.2 Q 2.5(wl)-.25 G(ine)-2.5 E F2(\\r)144 643.2 Q F0 -(carriage return)180 643.2 Q F2(\\t)144 655.2 Q F0(horizontal tab)180 -655.2 Q F2(\\v)144 667.2 Q F0 -.15(ve)180 667.2 S(rtical tab).15 E F2 -(\\\\)144 679.2 Q F0(backslash)180 679.2 Q F2(\\0)144 691.2 Q F3(nnn)A -F0(the eight-bit character whose v)180 691.2 Q(alue is the octal v)-.25 -E(alue)-.25 E F3(nnn)2.5 E F0(\(zero to three octal digits\))2.5 E F2 -(\\x)144 703.2 Q F3(HH)A F0(the eight-bit character whose v)180 703.2 Q -(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F3(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 -(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(7) -190.545 E 0 Cg EP +(xpg_echo)144 684 Q F1 .681 +(shell option may be used to dynamically determine whether or not)3.18 F +F2(echo)3.181 E F1 .681(interprets an)3.181 F(y)-.15 E .94 +(options and e)144 696 R .94(xpands these escape characters by def)-.15 +F(ault.)-.1 E F2(echo)5.94 E F1 .94(does not interpret)3.44 F F2<adad> +3.44 E F1 .94(to mean the)3.44 F(end of options.)144 708 Q F2(echo)5 E +F1(interprets the follo)2.5 E(wing escape sequences:)-.25 E +(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E(7)195.95 E 0 Cg EP %%Page: 8 8 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(\\u)144 84 Q/F2 10 -/Times-Italic@0 SF(HHHH)A F0 1.506 -(the Unicode \(ISO/IEC 10646\) character whose v)180 96 R 1.507 -(alue is the he)-.25 F 1.507(xadecimal v)-.15 F(alue)-.25 E F2(HHHH) -4.007 E F0(\(one to four he)180 108 Q 2.5(xd)-.15 G(igits\))-2.5 E F1 -(\\U)144 120 Q F2(HHHHHHHH)A F0 .548 -(the Unicode \(ISO/IEC 10646\) character whose v)180 132 R .547 -(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-) -3.047 E(HHH)180 144 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\)) --2.5 E F1(enable)108 160.8 Q F0([)2.5 E F1<ad61>A F0 2.5(][)C F1 -(\255dnps)-2.5 E F0 2.5(][)C F1<ad66>-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 172.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 184.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 196.8 R .989 -(uiltins before disk commands.)-.2 F(If)5.989 E F1<ad6e>3.489 E F0 .99 -(is used, each)3.49 F F2(name)3.49 E F0 .99(is dis-)3.49 F .649 -(abled; otherwise,)144 208.8 R F2(names)3.148 E F0 .648(are enabled.) -3.148 F -.15(Fo)5.648 G 3.148(re).15 G .648(xample, to use the)-3.298 F -F1(test)3.148 E F0 .648(binary found via the)3.148 F/F3 9/Times-Bold@0 -SF -.666(PA)3.148 G(TH)-.189 E F0(in-)2.898 E .538(stead of the shell b) -144 220.8 R .538(uiltin v)-.2 F .538(ersion, run)-.15 F/F4 10/Courier@0 -SF .538(enable -n test)3.038 F F0 5.538(.T)C(he)-5.538 E F1<ad66>3.038 E -F0 .539(option means to load the ne)3.038 F(w)-.25 E -.2(bu)144 232.8 S -1.365(iltin command).2 F F2(name)4.225 E F0 1.365(from shared object) -4.045 F F2(\214lename)5.775 E F0 3.865(,o).18 G 3.865(ns)-3.865 G 1.365 -(ystems that support dynamic loading.)-3.865 F .606(Bash will use the v) -144 244.8 R .606(alue of the)-.25 F F1 -.3(BA)3.106 G(SH_LO).3 E(AD)-.4 -E(ABLES_P)-.35 E -.95(AT)-.74 G(H).95 E F0 -.25(va)3.106 G .606 -(riable as a colon-separated list of).25 F .549 -(directories in which to search for)144 256.8 R F2(\214lename)3.049 E F0 -5.549(.T)C .549(he def)-5.549 F .548(ault is system-dependent.)-.1 F -(The)5.548 E F1<ad64>3.048 E F0 .548(option will)3.048 F .546 -(delete a b)144 268.8 R .546(uiltin pre)-.2 F .546(viously loaded with) --.25 F F1<ad66>3.046 E F0 5.547(.I)C 3.047(fn)-5.547 G(o)-3.047 E F2 -(name)3.047 E F0(ar)3.047 E .547(guments are gi)-.18 F -.15(ve)-.25 G -.547(n, or if the).15 F F1<ad70>3.047 E F0 .547(option is)3.047 F .546 -(supplied, a list of shell b)144 280.8 R .545(uiltins is printed.)-.2 F --.4(Wi)5.545 G .545(th no other option ar).4 F .545 -(guments, the list consists of all)-.18 F .695(enabled shell b)144 292.8 -R 3.195(uiltins. If)-.2 F F1<ad6e>3.195 E F0 .695 -(is supplied, only disabled b)3.195 F .695(uiltins are printed.)-.2 F -(If)5.695 E F1<ad61>3.195 E F0 .695(is supplied, the)3.195 F .262 -(list printed includes all b)144 304.8 R .261 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(\\a)144 84 Q F1(alert \(bell\))180 84 Q F2(\\b)144 96 Q +F1(backspace)180 96 Q F2(\\c)144 108 Q F1(suppress further output)180 +108 Q F2(\\e)144 120 Q(\\E)144 132 Q F1(an escape character)180 132 Q F2 +(\\f)144 144 Q F1(form feed)180 144 Q F2(\\n)144 156 Q F1(ne)180 156 Q +2.5(wl)-.25 G(ine)-2.5 E F2(\\r)144 168 Q F1(carriage return)180 168 Q +F2(\\t)144 180 Q F1(horizontal tab)180 180 Q F2(\\v)144 192 Q F1 -.15 +(ve)180 192 S(rtical tab).15 E F2(\\\\)144 204 Q F1(backslash)180 204 Q +F2(\\0)144 216 Q F0(nnn)A F1(the eight-bit character whose v)180 216 Q +(alue is the octal v)-.25 E(alue)-.25 E F0(nnn)2.5 E F1 +(\(zero to three octal digits\))2.5 E F2(\\x)144 228 Q F0(HH)A F1 +(the eight-bit character whose v)180 228 Q(alue is the he)-.25 E +(xadecimal v)-.15 E(alue)-.25 E F0(HH)2.5 E F1(\(one or tw)2.5 E 2.5(oh) +-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F2(\\u)144 240 Q F0(HHHH)A F1 +1.506(the Unicode \(ISO/IEC 10646\) character whose v)180 252 R 1.507 +(alue is the he)-.25 F 1.507(xadecimal v)-.15 F(alue)-.25 E F0(HHHH) +4.007 E F1(\(one to four he)180 264 Q 2.5(xd)-.15 G(igits\))-2.5 E F2 +(\\U)144 276 Q F0(HHHHHHHH)A F1 .548 +(the Unicode \(ISO/IEC 10646\) character whose v)180 288 R .547 +(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F0(HHHHH-) +3.047 E(HHH)180 300 Q F1(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\)) +-2.5 E F2(enable)108 316.8 Q F1([)2.5 E F2<ad61>A F1 2.5(][)C F2 +(\255dnps)-2.5 E F1 2.5(][)C F2<ad66>-2.5 E F0(\214lename)2.5 E F1 2.5 +(][)C F0(name)-2.5 E F1 1.666(...)2.5 G(])-1.666 E .277 +(Enable and disable b)144 328.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 +340.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 +352.8 R .989(uiltins before disk commands.)-.2 F(If)5.989 E F2<ad6e> +3.489 E F1 .99(is used, each)3.49 F F0(name)3.49 E F1 .99(is dis-)3.49 F +.649(abled; otherwise,)144 364.8 R F0(names)3.148 E F1 .648 +(are enabled.)3.148 F -.15(Fo)5.648 G 3.148(re).15 G .648 +(xample, to use the)-3.298 F F2(test)3.148 E F1 .648 +(binary found via the)3.148 F/F3 9/Times-Bold@0 SF -.666(PA)3.148 G(TH) +-.189 E F1(in-)2.898 E .328(stead of the shell b)144 376.8 R .329 +(uiltin v)-.2 F .329(ersion, run The)-.15 F F2<ad66>2.829 E F1 .329 +(option means to load the ne)2.829 F 2.829(wb)-.25 G .329 +(uiltin command)-3.029 F F0(name)3.189 E F1 .132(from shared object)144 +388.8 R F0(\214lename)4.542 E F1 2.632(,o).18 G 2.632(ns)-2.632 G .131 +(ystems that support dynamic loading.)-2.632 F F2(Bash)5.131 E F1 .131 +(will use the v)2.631 F .131(alue of)-.25 F(the)144 400.8 Q F2 -.3(BA) +4.456 G(SH_LO).3 E(AD)-.4 E(ABLES_P)-.35 E -.95(AT)-.74 G(H).95 E F1 +-.25(va)4.456 G 1.956 +(riable as a colon-separated list of directories in which to).25 F 1.315 +(search for)144 412.8 R F0(\214lename)3.815 E F1 3.815(,i)C(f)-3.815 E +F0(\214lename)3.815 E F1 1.314(does not contain a slash.)3.814 F 1.314 +(The def)6.314 F 1.314(ault is system-dependent, and)-.1 F .789 +(may include to force a search of the current directory)144 424.8 R +5.789(.T)-.65 G(he)-5.789 E F2<ad64>3.29 E F1 .79 +(option will delete a b)3.29 F .79(uiltin pre)-.2 F(vi-)-.25 E 1.079 +(ously loaded with)144 436.8 R F2<ad66>3.579 E F1 6.079(.I)C 3.579(fn) +-6.079 G(o)-3.579 E F0(name)3.579 E F1(ar)3.579 E 1.079(guments are gi) +-.18 F -.15(ve)-.25 G 1.078(n, or if the).15 F F2<ad70>3.578 E F1 1.078 +(option is supplied, a list of)3.578 F 1.711(shell b)144 448.8 R 1.711 +(uiltins is printed.)-.2 F -.4(Wi)6.711 G 1.711(th no other option ar).4 +F 1.712(guments, the list consists of all enabled shell)-.18 F -.2(bu) +144 460.8 S 2.909(iltins. If).2 F F2<ad6e>2.909 E F1 .408 +(is supplied, only disabled b)2.909 F .408(uiltins are printed.)-.2 F +(If)5.408 E F2<ad61>2.908 E F1 .408(is supplied, the list printed in-) +2.908 F .307(cludes all b)144 472.8 R .308 (uiltins, with an indication of whether or not each is enabled.)-.2 F -(If)5.261 E F1<ad73>2.761 E F0 .261(is sup-)2.761 F .268 -(plied, the output is restricted to the POSIX)144 316.8 R F2(special) -2.768 E F0 -.2(bu)2.768 G 2.768(iltins. If).2 F .269 -(no options are supplied and a)2.768 F F2(name)2.769 E F0 .285 -(is not a shell b)144 328.8 R(uiltin,)-.2 E F1(enable)2.784 E F0 .284 -(will attempt to load)2.784 F F2(name)2.784 E F0 .284 -(from a shared object named)2.784 F F2(name)2.784 E F0 2.784(,a)C 2.784 -(si)-2.784 G 2.784(ft)-2.784 G(he)-2.784 E 1.41(command were)144 340.8 R -F4 1.41(enable \255f)3.91 F F2 1.41(name name)3.91 F F0 6.41(.T)3.91 G -1.41(he return v)-6.41 F 1.41(alue is 0 unless a)-.25 F F2(name)4.27 E -F0 1.41(is not a shell)4.09 F -.2(bu)144 352.8 S -(iltin or there is an error loading a ne).2 E 2.5(wb)-.25 G -(uiltin from a shared object.)-2.7 E F1 -2.3 -.15(ev a)108 369.6 T(l).15 -E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 381.6 Q F2(ar)3.171 -E(g)-.37 E F0 3.171(sa)C .671 -(re read and concatenated together into a single command.)-3.171 F .67 -(This command is then read)5.67 F .478(and e)144 393.6 R -.15(xe)-.15 G -.478(cuted by the shell, and its e).15 F .478 -(xit status is returned as the v)-.15 F .479(alue of)-.25 F F1 -2.3 -.15 -(ev a)2.979 H(l).15 E F0 5.479(.I)C 2.979(ft)-5.479 G .479(here are no) --2.979 F F2(ar)3.309 E(gs)-.37 E F0(,).27 E(or only null ar)144 405.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 422.4 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-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 434.4 Q F2(command)3.006 E F0 .306 -(is speci\214ed, it replaces the shell.)3.576 F .305(No ne)5.305 F 2.805 -(wp)-.25 G .305(rocess is created.)-2.805 F(The)5.305 E F2(ar)3.135 E -(guments)-.37 E F0(become)3.075 E .176(the ar)144 446.4 R .176 -(guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G -(he)-2.676 E F1<ad6c>2.676 E F0 .176 -(option is supplied, the shell places a dash at the be)2.676 F .177 -(ginning of)-.15 F .48(the zeroth ar)144 458.4 R .48(gument passed to) --.18 F F2(command)3.18 E F0 5.48(.T).77 G .48(his is what)-5.48 F F2(lo) -3.07 E(gin)-.1 E F0 .48(\(1\) does.).24 F(The)5.48 E F1<ad63>2.98 E F0 -.48(option causes)2.98 F F2(com-)3.18 E(mand)144 470.4 Q F0 .638 -(to be e)3.908 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138 -(vironment. If)-.4 F F1<ad61>3.138 E F0 .638 -(is supplied, the shell passes)3.138 F F2(name)3.499 E F0 .639(as the) -3.319 F 1.078(zeroth ar)144 482.4 R 1.077(gument to the e)-.18 F -.15 -(xe)-.15 G 1.077(cuted command.).15 F(If)6.077 E F2(command)3.777 E F0 +(If)5.308 E F2<ad73>2.808 E F1 .308(is supplied, the out-)2.808 F .226 +(put is restricted to the POSIX)144 484.8 R F0(special)2.725 E F1 -.2 +(bu)2.725 G 2.725(iltins. If).2 F .225(no options are supplied and a) +2.725 F F0(name)2.725 E F1 .225(is not a shell)2.725 F -.2(bu)144 496.8 +S(iltin,).2 E F2(enable)3.515 E F1 1.015(will attempt to load)3.515 F F0 +(name)3.515 E F1 1.015(from a shared object named)3.515 F F0(name)3.515 +E F1 3.515(,a)C 3.515(si)-3.515 G 3.515(ft)-3.515 G 1.015(he command) +-3.515 F .787(were The return v)144 508.8 R .786(alue is 0 unless a)-.25 +F F0(name)3.646 E F1 .786(is not a shell b)3.466 F .786 +(uiltin or there is an error loading a ne)-.2 F(w)-.25 E -.2(bu)144 +520.8 S(iltin from a shared object.).2 E F2 -2.3 -.15(ev a)108 537.6 T +(l).15 E F1([)2.5 E F0(ar)A(g)-.37 E F1 1.666(...)2.5 G(])-1.666 E(The) +144 549.6 Q F0(ar)3.17 E(g)-.37 E F1 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 .479(and e)144 561.6 R -.15(xe)-.15 G +.479(cuted by the shell, and its e).15 F .479 +(xit status is returned as the v)-.15 F .478(alue of)-.25 F F2 -2.3 -.15 +(ev a)2.978 H(l).15 E F1 5.478(.I)C 2.978(ft)-5.478 G .478(here are no) +-2.978 F F0(ar)3.308 E(gs)-.37 E F1(,).27 E(or only null ar)144 573.6 Q +(guments,)-.18 E F2 -2.3 -.15(ev a)2.5 H(l).15 E F1(returns 0.)2.5 E F2 +(exec)108 590.4 Q F1([)2.5 E F2(\255cl)A F1 2.5(][)C F2<ad61>-2.5 E F0 +(name)2.5 E F1 2.5(][)C F0(command)-2.5 E F1([)2.5 E F0(ar)A(guments) +-.37 E F1(]])A(If)144 602.4 Q F0(command)3.005 E F1 .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 F0(ar)3.136 E +(guments)-.37 E F1(become)3.076 E .177(the ar)144 614.4 R .177 +(guments to)-.18 F F0(command)2.676 E F1 5.176(.I)C 2.676(ft)-5.176 G +(he)-2.676 E F2<ad6c>2.676 E F1 .176 +(option is supplied, the shell places a dash at the be)2.676 F .176 +(ginning of)-.15 F .48(the zeroth ar)144 626.4 R .48(gument passed to) +-.18 F F0(command)3.18 E F1 5.48(.T).77 G .48(his is what)-5.48 F F0(lo) +3.07 E(gin)-.1 E F1 .48(\(1\) does.).24 F(The)5.48 E F2<ad63>2.98 E F1 +.48(option causes)2.98 F F0(com-)3.18 E(mand)144 638.4 Q F1 .639 +(to be e)3.909 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138 +(vironment. If)-.4 F F2<ad61>3.138 E F1 .638 +(is supplied, the shell passes)3.138 F F0(name)3.498 E F1 .638(as the) +3.318 F 1.077(zeroth ar)144 650.4 R 1.077(gument to the e)-.18 F -.15 +(xe)-.15 G 1.077(cuted command.).15 F(If)6.077 E F0(command)3.777 E F1 1.077(cannot be e)4.347 F -.15(xe)-.15 G 1.077(cuted for some reason, a) -.15 F(non-interacti)144 494.4 Q .876 -.15(ve s)-.25 H .576(hell e).15 F -.576(xits, unless the)-.15 F F1(execfail)3.076 E F0 .577 -(shell option is enabled.)3.077 F .577(In that case, it returns f)5.577 -F(ail-)-.1 E 3.32(ure. An)144 506.4 R(interacti)3.32 E 1.12 -.15(ve s) +.15 F(non-interacti)144 662.4 Q .877 -.15(ve s)-.25 H .577(hell e).15 F +.577(xits, unless the)-.15 F F2(execfail)3.077 E F1 .577 +(shell option is enabled.)3.077 F .576(In that case, it returns f)5.577 +F(ail-)-.1 E 3.32(ure. An)144 674.4 R(interacti)3.32 E 1.12 -.15(ve s) -.25 H .82(hell returns f).15 F .82(ailure if the \214le cannot be e)-.1 F -.15(xe)-.15 G 3.32(cuted. A).15 F .82(subshell e)3.32 F .82 -(xits uncondi-)-.15 F .287(tionally if)144 518.4 R F1(exec)2.787 E F0 --.1(fa)2.787 G 2.787(ils. If).1 F F2(command)2.987 E F0 .287 -(is not speci\214ed, an)3.557 F 2.788(yr)-.15 G .288(edirections tak) --2.788 F 2.788(ee)-.1 G -.25(ff)-2.788 G .288(ect in the current shell,) -.25 F(and the return status is 0.)144 530.4 Q +(xits uncondi-)-.15 F .288(tionally if)144 686.4 R F2(exec)2.788 E F1 +-.1(fa)2.788 G 2.788(ils. If).1 F F0(command)2.988 E F1 .288 +(is not speci\214ed, an)3.558 F 2.787(yr)-.15 G .287(edirections tak) +-2.787 F 2.787(ee)-.1 G -.25(ff)-2.787 G .287(ect in the current shell,) +.25 F(and the return status is 0.)144 698.4 Q (If there is a redirection error)5 E 2.5(,t)-.4 G -(he return status is 1.)-2.5 E F1(exit)108 547.2 Q F0([)2.5 E F2(n)A F0 -(])A .096(Cause the shell to e)144 547.2 R .096(xit with a status of) --.15 F F2(n)2.596 E F0 5.096(.I)C(f)-5.096 E F2(n)2.955 E F0 .095 -(is omitted, the e)2.835 F .095(xit status is that of the last command) --.15 F -.15(exe)144 559.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 -F1(export)108 576 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 588 Q F0 -.256(The supplied)144 600 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.627 -(commands. If)144 612 R(the)2.627 E F1<ad66>2.627 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 .126(n, or if the).15 F F1<ad70> -144 624 Q F0 .048(option is supplied, a list of names of all e)2.547 F -.048(xported v)-.15 F .048(ariables is printed.)-.25 F(The)5.048 E F1 -<ad6e>2.548 E F0 .048(option causes the)2.548 F -.15(ex)144 636 S 1.447 -(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447 -(rom each)-3.947 F F2(name)3.947 E F0 6.447(.I)C 3.947(fav)-6.447 G -1.447(ariable name is follo)-4.197 F 1.447(wed by =)-.25 F F2(wor)A(d) --.37 E F0 3.946(,t)C(he)-3.946 E -.25(va)144 648 S .741(lue of the v).25 -F .741(ariable is set to)-.25 F F2(wor)3.241 E(d)-.37 E F0(.)A F1 -(export)5.741 E F0 .742(returns an e)3.242 F .742 -(xit status of 0 unless an in)-.15 F -.25(va)-.4 G .742(lid option is) -.25 F .032(encountered, one of the)144 660 R F2(names)2.532 E F0 .032 -(is not a v)2.532 F .032(alid shell v)-.25 F .032(ariable name, or)-.25 -F F1<ad66>2.531 E F0 .031(is supplied with a)2.531 F F2(name)2.891 E F0 -(that)2.711 E(is not a function.)144 672 Q F1(fc)108 688.8 Q F0([)2.5 E -F1<ad65>A F2(ename)2.5 E F0 2.5(][)C F1(\255lnr)-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 -700.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 .431 -(The \214rst form selects a range of commands from)144 712.8 R F2<8c72> -4.842 E(st)-.1 E F0(to)3.612 E F2(last)3.022 E F0 .432 -(from the history list and displays or)3.612 F .142(edits and re-e)144 -724.8 R -.15(xe)-.15 G .142(cutes them.).15 F F2 -.45(Fi)5.141 G -.1(rs) -.45 G(t).1 E F0(and)3.321 E F2(last)2.731 E F0 .141 -(may be speci\214ed as a string \(to locate the last command)3.321 F -(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(8) -190.545 E 0 Cg EP +(he return status is 1.)-2.5 E(GNU Bash 5.2)72 768 Q(2023 January 27) +141.79 E(8)195.95 E 0 Cg EP %%Page: 9 9 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E(be)144 84 Q .31 -(ginning with that string\) or as a number \(an inde)-.15 F 2.811(xi) --.15 G .311(nto the history list, where a ne)-2.811 F -.05(ga)-.15 G(ti) -.05 E .611 -.15(ve n)-.25 H(umber).15 E .071(is used as an of)144 96 R -.071(fset from the current command number\).)-.25 F .071 -(When listing, a)5.071 F/F1 10/Times-Italic@0 SF<8c72>2.571 E(st)-.1 E -F0(or)2.571 E F1(last)2.571 E F0 .071(of 0 is equi)2.571 F -.25(va)-.25 -G(-).25 E .653(lent to \2551 and \2550 is equi)144 108 R -.25(va)-.25 G -.653(lent to the current command \(usually the).25 F/F2 10/Times-Bold@0 -SF(fc)3.153 E F0 .653(command\); otherwise 0 is)3.153 F(equi)144 120 Q --.25(va)-.25 G .242(lent to \2551 and \2550 is in).25 F -.25(va)-.4 G -2.742(lid. If).25 F F1(last)2.832 E F0 .242 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(exit)108 84 Q F1([)2.5 E F0(n)A F1(])A .095 +(Cause the shell to e)144 84 R .095(xit with a status of)-.15 F F0(n) +2.595 E F1 5.095(.I)C(f)-5.095 E F0(n)2.955 E F1 .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 F1 +(is e)2.25 E -.15(xe)-.15 G(cuted before the shell terminates.).15 E F2 +(export)108 112.8 Q F1([)2.5 E F2(\255fn)A F1 2.5(][).833 G F0(name)-2.5 +E F1([=)A F0(wor)A(d)-.37 E F1(]] .)A 1.666(..)1.666 G F2(export \255p) +108 124.8 Q F1 .257(The supplied)144 136.8 R F0(names)3.117 E F1 .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 F2<ad66>2.626 E F1 .127 +(option is gi)2.627 F -.15(ve)-.25 G .127(n, the).15 F F0(names)2.987 E +F1 .127(refer to functions.)2.897 F .127(If no)5.127 F F0(names)2.987 E +F1 .127(are gi)2.897 F -.15(ve)-.25 G .127(n, or if the).15 F F2<ad70> +144 160.8 Q F1 .048(option is supplied, a list of names of all e)2.548 F +.048(xported v)-.15 F .048(ariables is printed.)-.25 F(The)5.048 E F2 +<ad6e>2.547 E F1 .047(option causes the)2.547 F -.15(ex)144 172.8 S +1.446(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447 +(rom each)-3.947 F F0(name)3.947 E F1 6.447(.I)C 3.947(fav)-6.447 G +1.447(ariable name is follo)-4.197 F 1.447(wed by =)-.25 F F0(wor)A(d) +-.37 E F1 3.947(,t)C(he)-3.947 E -.25(va)144 184.8 S .742(lue of the v) +.25 F .742(ariable is set to)-.25 F F0(wor)3.242 E(d)-.37 E F1(.)A F2 +(export)5.742 E F1 .742(returns an e)3.242 F .741 +(xit status of 0 unless an in)-.15 F -.25(va)-.4 G .741(lid option is) +.25 F .031(encountered, one of the)144 196.8 R F0(names)2.531 E F1 .031 +(is not a v)2.531 F .032(alid shell v)-.25 F .032(ariable name, or)-.25 +F F2<ad66>2.532 E F1 .032(is supplied with a)2.532 F F0(name)2.892 E F1 +(that)2.712 E(is not a function.)144 208.8 Q F2(false)108 225.6 Q F1 +(Does nothing, returns a non-zero status.)144 225.6 Q F2(fc)108 242.4 Q +F1([)2.5 E F2<ad65>A F0(ename)2.5 E F1 2.5(][)C F2(\255lnr)-2.5 E F1 2.5 +(][)C F0<8c72>-2.5 E(st)-.1 E F1 2.5(][)C F0(last)-2.5 E F1(])A F2 +(fc \255s)108 254.4 Q F1([)2.5 E F0(pat)A F1(=)A F0 -.37(re)C(p).37 E F1 +2.5(][)C F0(cmd)-2.5 E F1(])A .432 +(The \214rst form selects a range of commands from)144 266.4 R F0<8c72> +4.842 E(st)-.1 E F1(to)3.612 E F0(last)3.022 E F1 .431 +(from the history list and displays or)3.612 F .141(edits and re-e)144 +278.4 R -.15(xe)-.15 G .141(cutes them.).15 F F0 -.45(Fi)5.141 G -.1(rs) +.45 G(t).1 E F1(and)3.321 E F0(last)2.731 E F1 .141 +(may be speci\214ed as a string \(to locate the last command)3.321 F(be) +144 290.4 Q .311(ginning with that string\) or as a number \(an inde) +-.15 F 2.811(xi)-.15 G .31(nto the history list, where a ne)-2.811 F +-.05(ga)-.15 G(ti).05 E .61 -.15(ve n)-.25 H(umber).15 E .071 +(is used as an of)144 302.4 R .071 +(fset from the current command number\).)-.25 F .071(When listing, a) +5.071 F F0<8c72>2.571 E(st)-.1 E F1(or)2.571 E F0(last)2.571 E F1 .071 +(of 0 is equi)2.571 F -.25(va)-.25 G(-).25 E .653 +(lent to \2551 and \2550 is equi)144 314.4 R -.25(va)-.25 G .653 +(lent to the current command \(usually the).25 F F2(fc)3.153 E F1 .653 +(command\); otherwise 0 is)3.153 F(equi)144 326.4 Q -.25(va)-.25 G .242 +(lent to \2551 and \2550 is in).25 F -.25(va)-.4 G 2.742(lid. If).25 F +F0(last)2.832 E F1 .242 (is not speci\214ed, it is set to the current command for list-)3.422 F -.092(ing \(so that)144 132 R/F3 10/Courier@0 SF .092(fc \255l \25510) -2.592 F F0 .093(prints the last 10 commands\) and to)2.592 F F1<8c72> -4.503 E(st)-.1 E F0 2.593(otherwise. If)3.273 F F1<8c72>4.503 E(st)-.1 E -F0 .093(is not speci-)3.273 F(\214ed, it is set to the pre)144 144 Q -(vious command for editing and \25516 for listing.)-.25 E(The)144 168 Q -F2<ad6e>2.522 E F0 .022 +.149(ing \(so that prints the last 10 commands\) and to)144 338.4 R F0 +<8c72>4.559 E(st)-.1 E F1 2.648(otherwise. If)3.328 F F0<8c72>4.558 E +(st)-.1 E F1 .148(is not speci\214ed, it is set to)3.328 F(the pre)144 +350.4 Q(vious command for editing and \25516 for listing.)-.25 E(The)144 +367.2 Q F2<ad6e>2.522 E F1 .022 (option suppresses the command numbers when listing.)2.522 F(The)5.022 E -F2<ad72>2.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022 -(rses the order of).15 F .438(the commands.)144 180 R .438(If the)5.438 -F F2<ad6c>2.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438 +F2<ad72>2.522 E F1 .022(option re)2.522 F -.15(ve)-.25 G .022 +(rses the order of).15 F .438(the commands.)144 379.2 R .438(If the) +5.438 F F2<ad6c>2.938 E F1 .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 -.335(the editor gi)144 192 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E F1 -(ename)3.025 E F0 .335(is in)3.015 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.334 E F1(ename)3.024 E F0 .334(is not gi)3.014 F -.15(ve)-.25 G -(n,).15 E .63(the v)144 204 R .63(alue of the)-.25 F/F4 9/Times-Bold@0 -SF(FCEDIT)3.13 E F0 -.25(va)2.88 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.131 E F0 .631(is not set.)2.881 F .631(If nei-)5.631 F .006(ther v)144 -216 R .006(ariable is set,)-.25 F F1(vi)4.171 E F0 .005(is used.)4.171 F -.005(When editing is complete, the edited commands are echoed and e) -5.005 F(x-)-.15 E(ecuted.)144 228 Q .788(In the second form,)144 252 R -F1(command)3.288 E F0 .788(is re-e)3.288 F -.15(xe)-.15 G .788 -(cuted after each instance of).15 F F1(pat)3.288 E F0 .788 -(is replaced by)3.288 F F1 -.37(re)3.289 G(p).37 E F0(.)A F1(Com-)5.789 -E(mand)144 264 Q F0 .172(is interpreted the same as)2.672 F F1<8c72> -2.672 E(st)-.1 E F0(abo)2.672 E -.15(ve)-.15 G 5.172(.A).15 G .171 -(useful alias to use with this is)-2.5 F F3 .171(r='fc \255s')2.671 F F0 -2.671(,s)C 2.671(ot)-2.671 G(hat)-2.671 E(typing)144 276 Q F3 7.165(rc) -3.665 G(c)-7.165 E F0 1.165(runs the last command be)3.665 F 1.166 -(ginning with)-.15 F F3(cc)3.666 E F0 1.166(and typing)3.666 F F3(r) -3.666 E F0(re-e)3.666 E -.15(xe)-.15 G 1.166(cutes the last com-).15 F -(mand.)144 288 Q .142(If the \214rst form is used, the return v)144 312 -R .142(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142 -(lid option is encountered or).25 F F1<8c72>4.552 E(st)-.1 E F0(or)3.322 -E F1(last)2.732 E F0 .454(specify history lines out of range.)144 324 R -.454(If the)5.454 F F2<ad65>2.954 E F0 .454 +.334(the editor gi)144 391.2 R -.15(ve)-.25 G 2.834(nb).15 G(y)-2.834 E +F0(ename)3.024 E F1 .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 F0(ename)3.025 E F1 .335(is not gi)3.015 F -.15(ve)-.25 G +(n,).15 E .631(the v)144 403.2 R .631(alue of the)-.25 F F3(FCEDIT)3.131 +E F1 -.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 F1(if)2.881 E F3(FCEDIT)3.13 E F1 .63 +(is not set.)2.88 F .63(If nei-)5.63 F .005(ther v)144 415.2 R .005 +(ariable is set,)-.25 F F0(vi)4.171 E F1 .005(is used.)4.171 F .005 +(When editing is complete, the edited commands are echoed and e)5.005 F +(x-)-.15 E(ecuted.)144 427.2 Q .789(In the second form,)144 444 R F0 +(command)3.288 E F1 .788(is re-e)3.288 F -.15(xe)-.15 G .788 +(cuted after each instance of).15 F F0(pat)3.288 E F1 .788 +(is replaced by)3.288 F F0 -.37(re)3.288 G(p).37 E F1(.)A F0(Com-)5.788 +E(mand)144 456 Q F1 .762(is interpreted the same as)3.262 F F0<8c72> +3.262 E(st)-.1 E F1(abo)3.262 E -.15(ve)-.15 G 5.762(.A).15 G .762 +(useful alias to use with this is so that typing runs)-2.5 F +(the last command be)144 468 Q(ginning with and typing re-e)-.15 E -.15 +(xe)-.15 G(cutes the last command.).15 E .142 +(If the \214rst form is used, the return v)144 484.8 R .142 +(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142 +(lid option is encountered or).25 F F0<8c72>4.552 E(st)-.1 E F1(or)3.322 +E F0(last)2.732 E F1 .454(specify history lines out of range.)144 496.8 +R .454(If the)5.454 F F2<ad65>2.954 E F1 .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 336 R -.15(xe)-.15 G .788 +(alue of the)-.25 F .788(last command e)144 508.8 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 -348 R -.15(xe)-.15 G 1.136(cuted, unless).15 F F1(cmd)3.836 E F0 1.136 -(does not)4.406 F(specify a v)144 360 Q -(alid history line, in which case)-.25 E F2(fc)2.5 E F0(returns f)2.5 E -(ailure.)-.1 E F2(fg)108 376.8 Q F0([)2.5 E F1(jobspec)A F0(])A(Resume) -144 388.8 Q F1(jobspec)5.654 E F0 1.413(in the fore)4.224 F 1.413 +520.8 R -.15(xe)-.15 G 1.136(cuted, unless).15 F F0(cmd)3.836 E F1 1.136 +(does not)4.406 F(specify a v)144 532.8 Q +(alid history line, in which case)-.25 E F2(fc)2.5 E F1(returns f)2.5 E +(ailure.)-.1 E F2(fg)108 549.6 Q F1([)2.5 E F0(jobspec)A F1(])A(Resume) +144 561.6 Q F0(jobspec)5.654 E F1 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 F1(jobspec)5.653 E F0 -1.413(is not present, the)4.223 F(shell')144 400.8 Q 3.116(sn)-.55 G -.616(otion of the)-3.116 F F1(curr)3.116 E .616(ent job)-.37 F F0 .617 +(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F0(jobspec)5.653 E F1 +1.413(is not present, the)4.223 F(shell')144 573.6 Q 3.116(sn)-.55 G +.616(otion of the)-3.116 F F0(curr)3.116 E .616(ent job)-.37 F F1 .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 412.8 Q +(alue is that of the command placed into the)-.25 F(fore)144 585.6 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 F1(jobspec)145.74 424.8 Q -F0(does not specify a v)2.81 E(alid job or)-.25 E F1(jobspec)4.24 E F0 +(hen run with job control enabled, if)-2.862 F F0(jobspec)145.74 597.6 Q +F1(does not specify a v)2.81 E(alid job or)-.25 E F0(jobspec)4.24 E F1 (speci\214es a job that w)2.81 E(as started without job control.)-.1 E -F2(getopts)108 441.6 Q F1(optstring name)2.5 E F0([)2.5 E F1(ar)A 2.5 -(g.)-.37 G(..)-2.5 E F0(])A F2(getopts)144 453.6 Q F0 .793 -(is used by shell procedures to parse positional parameters.)3.293 F F1 -(optstring)6.023 E F0 .793(contains the option)3.513 F .15 -(characters to be recognized; if a character is follo)144 465.6 R .149 +F2(getopts)108 614.4 Q F0(optstring name)2.5 E F1([)2.5 E F0(ar)A(g)-.37 +E F1 1.666(...)2.5 G(])-1.666 E F2(getopts)144 626.4 Q F1 .793 +(is used by shell procedures to parse positional parameters.)3.293 F F0 +(optstring)6.023 E F1 .793(contains the option)3.513 F .15 +(characters to be recognized; if a character is follo)144 638.4 R .149 (wed by a colon, the option is e)-.25 F .149(xpected to ha)-.15 F .449 --.15(ve a)-.2 H(n).15 E(ar)144 477.6 Q .578 +-.15(ve a)-.2 H(n).15 E(ar)144 650.4 Q .578 (gument, which should be separated from it by white space.)-.18 F .579 (The colon and question mark char)5.579 F(-)-.2 E .636 -(acters may not be used as option characters.)144 489.6 R .636 +(acters may not be used as option characters.)144 662.4 R .636 (Each time it is in)5.636 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F2(getopts) -3.136 E F0 .636(places the ne)3.136 F .635(xt op-)-.15 F .029 -(tion in the shell v)144 501.6 R(ariable)-.25 E F1(name)2.889 E F0 2.529 -(,i).18 G(nitializing)-2.529 E F1(name)2.889 E F0 .029(if it does not e) +3.136 E F1 .636(places the ne)3.136 F .635(xt op-)-.15 F .029 +(tion in the shell v)144 674.4 R(ariable)-.25 E F0(name)2.889 E F1 2.529 +(,i).18 G(nitializing)-2.529 E F0(name)2.889 E F1 .029(if it does not e) 2.709 F .03(xist, and the inde)-.15 F 2.53(xo)-.15 G 2.53(ft)-2.53 G .03 (he ne)-2.53 F .03(xt ar)-.15 F(gu-)-.18 E .066 -(ment to be processed into the v)144 513.6 R(ariable)-.25 E F4(OPTIND) -2.566 E/F5 9/Times-Roman@0 SF(.)A F4(OPTIND)4.566 E F0 .065 +(ment to be processed into the v)144 686.4 R(ariable)-.25 E F3(OPTIND) +2.566 E/F4 9/Times-Roman@0 SF(.)A F3(OPTIND)4.566 E F1 .065 (is initialized to 1 each time the shell or a)2.315 F .885 -(shell script is in)144 525.6 R -.2(vo)-.4 G -.1(ke).2 G 3.385(d. When) +(shell script is in)144 698.4 R -.2(vo)-.4 G -.1(ke).2 G 3.385(d. When) .1 F .885(an option requires an ar)3.385 F(gument,)-.18 E F2(getopts) -3.385 E F0 .885(places that ar)3.385 F .885(gument into)-.18 F .567 -(the v)144 537.6 R(ariable)-.25 E F4(OPT)3.067 E(ARG)-.81 E F5(.)A F0 -.566(The shell does not reset)5.067 F F4(OPTIND)3.066 E F0 .566 +3.385 E F1 .885(places that ar)3.385 F .885(gument into)-.18 F .567 +(the v)144 710.4 R(ariable)-.25 E F3(OPT)3.067 E(ARG)-.81 E F4(.)A F1 +.566(The shell does not reset)5.067 F F3(OPTIND)3.066 E F1 .566 (automatically; it must be manually reset)2.816 F .389 -(between multiple calls to)144 549.6 R F2(getopts)2.889 E F0 .389 +(between multiple calls to)144 722.4 R F2(getopts)2.889 E F1 .389 (within the same shell in)2.889 F -.2(vo)-.4 G .39(cation if a ne).2 F -2.89(ws)-.25 G .39(et of parameters is to)-2.89 F(be used.)144 561.6 Q -2.044(When the end of options is encountered,)144 585.6 R F2(getopts) -4.543 E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.043 -(alue greater than zero.)-.25 F F4(OPTIND)144 597.6 Q F0 -(is set to the inde)2.25 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 F2(getopts)144 621.6 Q F0 .485 +2.89(ws)-.25 G .39(et of parameters is to)-2.89 F(GNU Bash 5.2)72 768 Q +(2023 January 27)141.79 E(9)195.95 E 0 Cg EP +%%Page: 10 10 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E +(be used.)144 84 Q 2.044(When the end of options is encountered,)144 +100.8 R/F2 10/Times-Bold@0 SF(getopts)4.543 E F1 -.15(ex)4.543 G 2.043 +(its with a return v).15 F 2.043(alue greater than zero.)-.25 F/F3 9 +/Times-Bold@0 SF(OPTIND)144 112.8 Q F1(is set to the inde)2.25 E 2.5(xo) +-.15 G 2.5(ft)-2.5 G(he \214rst non-option ar)-2.5 E(gument, and)-.18 E +F0(name)2.5 E F1(is set to ?.)2.5 E F2(getopts)144 129.6 Q F1 .485 (normally parses the positional parameters, b)2.985 F .485 -(ut if more ar)-.2 F .485(guments are supplied as)-.18 F F1(ar)3.315 E -(g)-.37 E F0 -.25(va)3.205 G(l-).25 E(ues,)144 633.6 Q F2(getopts)2.5 E -F0(parses those instead.)2.5 E F2(getopts)144 657.6 Q F0 .345 +(ut if more ar)-.2 F .485(guments are supplied as)-.18 F F0(ar)3.315 E +(g)-.37 E F1 -.25(va)3.205 G(l-).25 E(ues,)144 141.6 Q F2(getopts)2.5 E +F1(parses those instead.)2.5 E F2(getopts)144 158.4 Q F1 .345 (can report errors in tw)2.845 F 2.845(ow)-.1 G 2.845(ays. If)-2.945 F -.345(the \214rst character of)2.845 F F1(optstring)3.075 E F0 .345 -(is a colon,)3.065 F F1(silent)3.185 E F0 .345(error re-)3.525 F 1.668 -(porting is used.)144 669.6 R 1.668 +.345(the \214rst character of)2.845 F F0(optstring)3.075 E F1 .345 +(is a colon,)3.065 F F0(silent)3.185 E F1 .345(error re-)3.525 F 1.668 +(porting is used.)144 170.4 R 1.668 (In normal operation, diagnostic messages are printed when in)6.668 F -.25(va)-.4 G 1.669(lid options or).25 F .394(missing option ar)144 -681.6 R .394(guments are encountered.)-.18 F .394(If the v)5.394 F -(ariable)-.25 E F4(OPTERR)2.894 E F0 .394 -(is set to 0, no error messages)2.644 F(will be displayed, e)144 693.6 Q +182.4 R .394(guments are encountered.)-.18 F .394(If the v)5.394 F +(ariable)-.25 E F3(OPTERR)2.894 E F1 .394 +(is set to 0, no error messages)2.644 F(will be displayed, e)144 194.4 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214rst character of)-2.5 E -F1(optstring)2.73 E F0(is not a colon.)2.72 E .666(If an in)144 717.6 R --.25(va)-.4 G .666(lid option is seen,).25 F F2(getopts)3.166 E F0 .667 -(places ? into)3.167 F F1(name)3.527 E F0 .667 -(and, if not silent, prints an error message)3.347 F .4(and unsets)144 -729.6 R F4(OPT)2.9 E(ARG)-.81 E F5(.)A F0(If)4.899 E F2(getopts)2.899 E -F0 .399(is silent, the option character found is placed in)2.899 F F4 -(OPT)2.899 E(ARG)-.81 E F0 .399(and no)2.649 F(GNU Bash 5.2)72 768 Q -(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(9)190.545 E 0 Cg EP -%%Page: 10 10 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E(diagnostic message is printed.)144 84 Q -1.241(If a required ar)144 108 R 1.241(gument is not found, and)-.18 F -/F1 10/Times-Bold@0 SF(getopts)3.741 E F0 1.241 -(is not silent, a question mark \()3.741 F F1(?).833 E F0 3.742(\)i).833 -G 3.742(sp)-3.742 G 1.242(laced in)-3.742 F/F2 10/Times-Italic@0 SF -(name)144.36 120 Q F0(,).18 E/F3 9/Times-Bold@0 SF(OPT)2.714 E(ARG)-.81 -E F0 .213(is unset, and a diagnostic message is printed.)2.463 F(If) -5.213 E F1(getopts)2.713 E F0 .213(is silent, then a colon \()2.713 F F1 -(:).833 E F0(\)).833 E(is placed in)144 132 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 156 Q F0 .902 +F0(optstring)2.73 E F1(is not a colon.)2.72 E(If)144 211.2 Q F2(getopts) +2.672 E F1 .172(detects an in)2.672 F -.25(va)-.4 G .173 +(lid option, it places ? into).25 F F0(name)3.033 E F1 .173 +(and, if not silent, prints an error message)2.853 F 1.148(and unsets) +144 223.2 R F3(OPT)3.647 E(ARG)-.81 E/F4 9/Times-Roman@0 SF(.)A F1(If) +5.647 E F2(getopts)3.647 E F1 1.147 +(is silent, it assigns the option character found to)3.647 F F3(OPT) +3.647 E(ARG)-.81 E F1(and)3.397 E(does not print a diagnostic message.) +144 235.2 Q .602(If a required ar)144 252 R .602 +(gument is not found, and)-.18 F F2(getopts)3.102 E F1 .602 +(is not silent, it sets the v)3.102 F .602(alue of)-.25 F F0(name)3.102 +E F1 .602(to a ques-)3.102 F 1.056(tion mark \()144 264 R F2(?).833 E F1 +1.056(\), unsets).833 F F3(OPT)3.556 E(ARG)-.81 E F4(,)A F1 1.056 +(and prints a diagnostic message.)3.306 F(If)6.056 E F2(getopts)3.556 E +F1 1.055(is silent, it sets the)3.556 F -.25(va)144 276 S(lue of).25 E +F0(name)2.5 E F1(to a colon \()2.5 E F2(:).833 E F1 2.5(\)a).833 G +(nd sets)-2.5 E F3(OPT)2.5 E(ARG)-.81 E F1 +(to the option character found.)2.25 E F2(getopts)144 292.8 Q F1 .902 (returns true if an option, speci\214ed or unspeci\214ed, is found.) 3.401 F .902(It returns f)5.902 F .902(alse if the end of)-.1 F -(options is encountered or an error occurs.)144 168 Q F1(hash)108 184.8 -Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1<ad70>-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 .858 -(Each time)144 196.8 R F1(hash)3.358 E F0 .858(is in)3.358 F -.2(vo)-.4 -G -.1(ke).2 G .858(d, the full pathname of the command).1 F F2(name) -3.718 E F0 .858(is determined by searching)3.538 F .956 -(the directories in)144 208.8 R F1($P)3.456 E -.95(AT)-.74 G(H).95 E F0 +(options is encountered or an error occurs.)144 304.8 Q F2(hash)108 +321.6 Q F1([)2.5 E F2(\255lr)A F1 2.5(][)C F2<ad70>-2.5 E F0(\214lename) +2.5 E F1 2.5(][)C F2(\255dt)-2.5 E F1 2.5(][)C F0(name)-2.5 E F1(])A +.858(Each time)144 333.6 R F2(hash)3.358 E F1 .858(is in)3.358 F -.2(vo) +-.4 G -.1(ke).2 G .858(d, the full pathname of the command).1 F F0(name) +3.718 E F1 .858(is determined by searching)3.538 F .956 +(the directories in)144 345.6 R F2($P)3.456 E -.95(AT)-.74 G(H).95 E F1 .956(and remembered.)3.456 F(An)5.956 E 3.456(yp)-.15 G(re)-3.456 E .956 -(viously-remembered pathname is discarded.)-.25 F .243(If the)144 220.8 -R F1<ad70>2.743 E F0 .243 -(option is supplied, no path search is performed, and)2.743 F F2 -(\214lename)4.653 E F0 .242(is used as the full \214lename)2.923 F .615 -(of the command.)144 232.8 R(The)5.615 E F1<ad72>3.115 E F0 .615 -(option causes the shell to for)3.115 F .615 -(get all remembered locations.)-.18 F(The)5.615 E F1<ad64>3.115 E F0 -(op-)3.115 E .294(tion causes the shell to for)144 244.8 R .294 -(get the remembered location of each)-.18 F F2(name)2.793 E F0 5.293(.I) -C 2.793(ft)-5.293 G(he)-2.793 E F1<ad74>2.793 E F0 .293 -(option is supplied,)2.793 F .028(the full pathname to which each)144 -256.8 R F2(name)2.528 E F0 .028(corresponds is printed.)2.528 F .028 -(If multiple)5.028 F F2(name)2.528 E F0(ar)2.528 E .028 -(guments are sup-)-.18 F .176(plied with)144 268.8 R F1<ad74>2.676 E F0 -2.676(,t)C(he)-2.676 E F2(name)2.676 E F0 .175 -(is printed before the hashed full pathname.)2.676 F(The)5.175 E F1 -<ad6c>2.675 E F0 .175(option causes output to)2.675 F .783 -(be displayed in a format that may be reused as input.)144 280.8 R .783 -(If no ar)5.783 F .783(guments are gi)-.18 F -.15(ve)-.25 G .783 -(n, or if only).15 F F1<ad6c>3.283 E F0(is)3.283 E .807 -(supplied, information about remembered commands is printed.)144 292.8 R -.807(The return status is true unless a)5.807 F F2(name)144.36 304.8 Q -F0(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.) -.25 E F1(help)108 321.6 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C F2 -(pattern)-2.5 E F0(])A .866(Display helpful information about b)144 -333.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 .224(help on all commands matching)144 -345.6 R F2(pattern)3.974 E F0 2.723(;o).24 G .223 -(therwise help for all the b)-2.723 F .223 -(uiltins and shell control struc-)-.2 F(tures is printed.)144 357.6 Q F1 -<ad64>144 369.6 Q F0(Display a short description of each)180 369.6 Q F2 -(pattern)2.5 E F1<ad6d>144 381.6 Q F0(Display the description of each) -180 381.6 Q F2(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G -(ormat)-2.5 E F1<ad73>144 393.6 Q F0 -(Display only a short usage synopsis for each)180 393.6 Q F2(pattern)2.5 -E F0(The return status is 0 unless no command matches)144 410.4 Q F2 -(pattern)3.75 E F0(.).24 E F1(history [)108 427.2 Q F2(n)A F1(])A -(history \255c)108 439.2 Q(history \255d)108 451.2 Q F2(of)2.5 E(fset) --.18 E F1(history \255d)108 463.2 Q F2(start)2.5 E F0<ad>A F2(end)A F1 -(history \255anrw)108 475.2 Q F0([)2.5 E F2(\214lename)A F0(])A F1 -(history \255p)108 487.2 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 499.2 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 -511.2 S .752 +(viously-remembered pathname is discarded.)-.25 F .342(If the)144 357.6 +R F2<ad70>2.842 E F1 .342(option is supplied,)2.842 F F2(hash)2.842 E F1 +(uses)2.842 E F0(\214lename)4.752 E F1 .342 +(as the full \214lename of the command.)3.022 F(The)5.341 E F2<ad72> +2.841 E F1(op-)2.841 E 1.495(tion causes the shell to for)144 369.6 R +1.496(get all remembered locations.)-.18 F 1.496(Assigning to the)6.496 +F F2 -.74(PA)3.996 G(TH)-.21 E F1 -.25(va)3.996 G 1.496(riable also).25 +F .685(clears all hashed \214lenames.)144 381.6 R(The)5.685 E F2<ad64> +3.185 E F1 .685(option causes the shell to for)3.185 F .684 +(get the remembered location of)-.18 F(each)144 393.6 Q F0(name)3.894 E +F1 6.394(.I)C 3.894(ft)-6.394 G(he)-3.894 E F2<ad74>3.894 E F1 1.394 +(option is supplied, the full pathname to which each)3.894 F F0(name) +3.895 E F1 1.395(corresponds is)3.895 F 3.314(printed. If)144 405.6 R +(multiple)3.314 E F0(name)3.314 E F1(ar)3.314 E .814 +(guments are supplied with)-.18 F F2<ad74>3.314 E F1 3.314(,t)C(he) +-3.314 E F0(name)3.314 E F1 .814(is printed before the hashed)3.314 F +.575(full pathname.)144 417.6 R(The)5.575 E F2<ad6c>3.075 E F1 .575(opt\ +ion causes output to be displayed in a format that may be reused as in-) +3.075 F 3.988(put. If)144 429.6 R 1.488(no ar)3.988 F 1.488 +(guments are gi)-.18 F -.15(ve)-.25 G 1.488(n, or if only).15 F F2<ad6c> +3.988 E F1 1.488(is supplied, information about remembered com-)3.988 F +.012(mands is printed.)144 441.6 R(The)5.012 E F2<ad74>2.512 E F1(,)A F2 +<ad64>2.513 E F1 2.513(,a)C(nd)-2.513 E F2<ad70>2.513 E F1 .013 +(options \(the options that act on the)2.513 F F0(name)2.513 E F1(ar) +2.513 E .013(guments\) are mu-)-.18 F .208(tually e)144 453.6 R(xclusi) +-.15 E -.15(ve)-.25 G 5.207(.O).15 G .207(nly one will be acti)-5.207 F +-.15(ve)-.25 G 5.207(.I).15 G 2.707(fm)-5.207 G .207 +(ore than one is supplied,)-2.707 F F2<ad74>2.707 E F1 .207 +(has higher priority than)2.707 F F2<ad70>144 465.6 Q F1 2.608(,a)C .108 +(nd both are higher priority than)-2.608 F F2<ad64>2.608 E F1 5.108(.T)C +.108(he return status is true unless a)-5.108 F F0(name)2.968 E F1 .108 +(is not found or an)2.788 F(in)144 477.6 Q -.25(va)-.4 G +(lid option is supplied.).25 E F2(help)108 494.4 Q F1([)2.5 E F2 +(\255dms)A F1 2.5(][)C F0(pattern)-2.5 E F1(])A .867 +(Display helpful information about b)144 506.4 R .867(uiltin commands.) +-.2 F(If)5.867 E F0(pattern)4.617 E F1 .866(is speci\214ed,)3.607 F F2 +(help)3.366 E F1(gi)3.366 E -.15(ve)-.25 G 3.366(sd).15 G(etailed)-3.366 +E .223(help on all commands matching)144 518.4 R F0(pattern)3.973 E F1 +2.723(;o).24 G .223(therwise help for all the b)-2.723 F .224 +(uiltins and shell control struc-)-.2 F(tures is printed.)144 530.4 Q F2 +<ad64>144 542.4 Q F1(Display a short description of each)180 542.4 Q F0 +(pattern)2.5 E F2<ad6d>144 554.4 Q F1(Display the description of each) +180 554.4 Q F0(pattern)2.5 E F1(in a manpage-lik)2.5 E 2.5(ef)-.1 G +(ormat)-2.5 E F2<ad73>144 566.4 Q F1 +(Display only a short usage synopsis for each)180 566.4 Q F0(pattern)2.5 +E F1(The return status is 0 unless no command matches)144 583.2 Q F0 +(pattern)3.75 E F1(.).24 E F2(history [)108 600 Q F0(n)A F2(])A +(history \255c)108 612 Q(history \255d)108 624 Q F0(of)2.5 E(fset)-.18 E +F2(history \255d)108 636 Q F0(start)2.5 E F1(-)A F0(end)A F2 +(history \255anrw)108 648 Q F1([)2.5 E F0(\214lename)A F1(])A F2 +(history \255p)108 660 Q F0(ar)2.5 E(g)-.37 E F1([)2.5 E F0(ar)A(g)-.37 +E F1 1.666(...)2.5 G(])-1.666 E F2(history \255s)108 672 Q F0(ar)2.5 E +(g)-.37 E F1([)2.5 E F0(ar)A(g)-.37 E F1 1.666(...)2.5 G(])-1.666 E -.4 +(Wi)144 684 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.252 E F0(ha)3.252 E -.15(ve)-.2 -G .381(been modi\214ed.)144 523.2 R .38(An ar)5.38 F .38(gument of)-.18 -F F2(n)3.24 E F0 .38(lists only the last)3.12 F F2(n)3.24 E F0 2.88 +.752(Lines listed with a)5.752 F F2(*)3.251 E F1(ha)3.251 E -.15(ve)-.2 +G .38(been modi\214ed.)144 696 R .38(An ar)5.38 F .38(gument of)-.18 F +F0(n)3.24 E F1 .38(lists only the last)3.12 F F0(n)3.24 E F1 2.88 (lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E F3(HISTTIMEFOR-) -2.88 E(MA)144 535.2 Q(T)-.855 E F0 .264 -(is set and not null, it is used as a format string for)2.514 F F2 -(strftime)2.765 E F0 .265(\(3\) to display the time stamp asso-)B 1.02 -(ciated with each displayed history entry)144 547.2 R 6.019(.N)-.65 G +2.881 E(MA)144 708 Q(T)-.855 E F1 .239 +(is set and not null, it is used as a format string for)2.489 F F0 +(strftime)3.078 E F1 .238(\(3\) to display the time stamp asso-).18 F +1.019(ciated with each displayed history entry)144 720 R 6.019(.N)-.65 G 3.519(oi)-6.019 G(nterv)-3.519 E 1.019 -(ening blank is printed between the formatted)-.15 F .176 -(time stamp and the history line.)144 559.2 R(If)5.176 E F2(\214lename) -2.676 E F0 .176 -(is supplied, it is used as the name of the history \214le; if)2.676 F -(not, the v)144 571.2 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 F1<ad63>144 583.2 Q F0 -(Clear the history list by deleting all the entries.)180 583.2 Q F1 -<ad64>144 595.2 Q F2(of)2.5 E(fset)-.18 E F0 .39 -(Delete the history entry at position)180 607.2 R F2(of)2.889 E(fset) --.18 E F0 5.389(.I)C(f)-5.389 E F2(of)2.889 E(fset)-.18 E F0 .389(is ne) -2.889 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G 2.889(,i).15 G 2.889(ti) --2.889 G 2.889(si)-2.889 G .389(nterpreted as relati)-2.889 F -.15(ve) --.25 G .598(to one greater than the last history position, so ne)180 -619.2 R -.05(ga)-.15 G(ti).05 E .899 -.15(ve i)-.25 H .599 -(ndices count back from the end).15 F(of the history)180 631.2 Q 2.5(,a) --.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G -(efers to the current)-2.5 E F1(history -d)2.5 E F0(command.)2.5 E F1 -<ad64>144 643.2 Q F2(start)2.5 E F0<ad>A F2(end)A F0 1.25 -(Delete the range of history entries between positions)180 655.2 R F2 -(start)3.75 E F0(and)3.75 E F2(end)3.75 E F0 3.75(,i)C(nclusi)-3.75 E --.15(ve)-.25 G 6.25(.P).15 G(ositi)-6.25 E -.15(ve)-.25 G(and ne)180 -667.2 Q -.05(ga)-.15 G(ti).05 E .3 -.15(ve v)-.25 H(alues for)-.1 E F2 -(start)2.5 E F0(and)2.5 E F2(end)2.5 E F0 -(are interpreted as described abo)2.5 E -.15(ve)-.15 G(.).15 E F1<ad61> -144 679.2 Q F0 .564(Append the `)180 679.2 R(`ne)-.74 E(w')-.25 E 3.064 -('h)-.74 G .564(istory lines to the history \214le.)-3.064 F .565 -(These are history lines entered since)5.564 F(the be)180 691.2 Q -(ginning of the current)-.15 E F1(bash)2.5 E F0(session, b)2.5 E -(ut not already appended to the history \214le.)-.2 E F1<ad6e>144 703.2 -Q F0 .854(Read the history lines not already read from the history \214\ -le into the current history list.)180 703.2 R .772 -(These are lines appended to the history \214le since the be)180 715.2 R -.773(ginning of the current)-.15 F F1(bash)3.273 E F0(ses-)3.273 E -(sion.)180 727.2 Q(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 -G(mber 22).15 E(10)185.545 E 0 Cg EP +(ening blank is printed between the formatted)-.15 F(GNU Bash 5.2)72 768 +Q(2023 January 27)141.79 E(10)190.95 E 0 Cg EP %%Page: 11 11 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF<ad72>144 84 Q F0(Rea\ -d the contents of the history \214le and append them to the current his\ -tory list.)180 84 Q F1<ad77>144 96 Q F0 -(Write the current history list to the history \214le, o)180 96 Q -.15 -(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G(ontents.) --2.5 E F1<ad70>144 108 Q F0 .626 -(Perform history substitution on the follo)180 108 R(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 -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 F1<ad73>144 144 Q F0 .363 -(Store the)180 144 R F2(ar)3.193 E(gs)-.37 E F0 .363 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E .176 +(time stamp and the history line.)144 84 R(If)5.176 E F0(\214lename) +2.676 E F1 .176 +(is supplied, it is used as the name of the history \214le; if)2.676 F +.251(not, the v)144 96 R .251(alue of)-.25 F/F2 9/Times-Bold@0 SF +(HISTFILE)2.751 E F1 .251(is used.)2.501 F(If)5.251 E F0(\214lename) +2.751 E F1 .251(is not supplied and)2.751 F F2(HISTFILE)2.751 E F1 .251 +(is unset or null, the)2.501 F/F3 10/Times-Bold@0 SF +(\255a, \255n, \255r)144 108 Q(,)-.92 E F1(and)2.5 E F3<ad77>2.5 E F1 +(options ha)2.5 E .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G 2.5 +(ect. Options,).25 F(if supplied, ha)2.5 E .3 -.15(ve t)-.2 H(he follo) +.15 E(wing meanings:)-.25 E F3<ad63>144 120 Q F1 +(Clear the history list by deleting all the entries.)180 120 Q F3<ad64> +144 132 Q F0(of)2.5 E(fset)-.18 E F1 .39 +(Delete the history entry at position)180 144 R F0(of)2.889 E(fset)-.18 +E F1 5.389(.I)C(f)-5.389 E F0(of)2.889 E(fset)-.18 E F1 .389(is ne)2.889 +F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G 2.889(,i).15 G 2.889(ti)-2.889 +G 2.889(si)-2.889 G .389(nterpreted as relati)-2.889 F -.15(ve)-.25 G +.598(to one greater than the last history position, so ne)180 156 R -.05 +(ga)-.15 G(ti).05 E .899 -.15(ve i)-.25 H .599 +(ndices count back from the end).15 F(of the history)180 168 Q 2.5(,a) +-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G +(efers to the current)-2.5 E F3(history \255d)2.5 E F1(command.)2.5 E F3 +<ad64>144 180 Q F0(start)2.5 E F1<ad>A F0(end)A F1 1.25 +(Delete the range of history entries between positions)180 192 R F0 +(start)3.75 E F1(and)3.75 E F0(end)3.75 E F1 3.75(,i)C(nclusi)-3.75 E +-.15(ve)-.25 G 6.25(.P).15 G(ositi)-6.25 E -.15(ve)-.25 G(and ne)180 204 +Q -.05(ga)-.15 G(ti).05 E .3 -.15(ve v)-.25 H(alues for)-.1 E F0(start) +2.5 E F1(and)2.5 E F0(end)2.5 E F1(are interpreted as described abo)2.5 +E -.15(ve)-.15 G(.).15 E F3<ad61>144 216 Q F1 .577 +(Append the history lines to the history \214le.)180 216 R .578 +(These are history lines entered since the be-)5.577 F +(ginning of the current)180 228 Q F3(bash)2.5 E F1(session, b)2.5 E +(ut not already appended to the history \214le.)-.2 E F3<ad6e>144 240 Q +F1 .854(Read the history lines not already read from the history \214le\ + into the current history list.)180 240 R .772 +(These are lines appended to the history \214le since the be)180 252 R +.773(ginning of the current)-.15 F F3(bash)3.273 E F1(ses-)3.273 E +(sion.)180 264 Q F3<ad72>144 276 Q F1(Read the contents of the history \ +\214le and append them to the current history list.)180 276 Q F3<ad77> +144 288 Q F1(Write the current history list to the history \214le, o)180 +288 Q -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G +(ontents.)-2.5 E F3<ad70>144 300 Q F1 .626 +(Perform history substitution on the follo)180 300 R(wing)-.25 E F0(ar) +3.125 E(gs)-.37 E F1 .625(and display the result on the standard)3.125 F +2.975(output. Does)180 312 R .475 +(not store the results in the history list.)2.975 F(Each)5.475 E F0(ar) +2.975 E(g)-.37 E F1 .475(must be quoted to disable)2.975 F +(normal history e)180 324 Q(xpansion.)-.15 E F3<ad73>144 336 Q F1 .363 +(Store the)180 336 R F0(ar)3.193 E(gs)-.37 E F1 .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) --.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 .145(If the)144 172.8 R/F3 9/Times-Bold@0 SF -(HISTTIMEFORMA)2.645 E(T)-.855 E F0 -.25(va)2.395 G .145 +(he last command in the history list is)-5.363 F(remo)180 348 Q -.15(ve) +-.15 G 2.5(db).15 G(efore the)-2.5 E F0(ar)2.83 E(gs)-.37 E F1 +(are added.)2.77 E .145(If the)144 364.8 R F2(HISTTIMEFORMA)2.645 E(T) +-.855 E F1 -.25(va)2.395 G .145 (riable is set, the time stamp information associated with each history) -.25 F .669(entry is written to the history \214le, mark)144 184.8 R .669 +.25 F .669(entry is written to the history \214le, mark)144 376.8 R .669 (ed with the history comment character)-.1 F 5.668(.W)-.55 G .668 -(hen the history)-5.668 F .955(\214le is read, lines be)144 196.8 R .956 +(hen the history)-5.668 F .955(\214le is read, lines be)144 388.8 R .956 (ginning with the history comment character follo)-.15 F .956 (wed immediately by a digit)-.25 F .833 -(are interpreted as timestamps for the follo)144 208.8 R .833 +(are interpreted as timestamps for the follo)144 400.8 R .833 (wing history entry)-.25 F 5.832(.T)-.65 G .832(he return v)-5.832 F -.832(alue is 0 unless an in-)-.25 F -.25(va)144 220.8 S .168(lid option\ +.832(alue is 0 unless an in-)-.25 F -.25(va)144 412.8 S .168(lid option\ is encountered, an error occurs while reading or writing the history \ -\214le, an in).25 F -.25(va)-.4 G(lid).25 E F2(of)2.669 E(f-)-.18 E(set) -144 232.8 Q F0 .341(or range is supplied as an ar)2.841 F .341 -(gument to)-.18 F F1<ad64>2.841 E F0 2.841(,o)C 2.84(rt)-2.841 G .34 +\214le, an in).25 F -.25(va)-.4 G(lid).25 E F0(of)2.669 E(f-)-.18 E(set) +144 424.8 Q F1 .341(or range is supplied as an ar)2.841 F .341 +(gument to)-.18 F F3<ad64>2.841 E F1 2.841(,o)C 2.84(rt)-2.841 G .34 (he history e)-2.84 F .34(xpansion supplied as an ar)-.15 F .34 -(gument to)-.18 F F1<ad70>144 244.8 Q F0 -.1(fa)2.5 G(ils.).1 E F1(jobs) -108 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 F1<ad6c>144 297.6 Q F0 -(List process IDs in addition to the normal information.)180 297.6 Q F1 -<ad6e>144 309.6 Q F0 .193(Display information only about jobs that ha) -180 309.6 R .494 -.15(ve c)-.2 H .194(hanged status since the user w).15 -F .194(as last noti-)-.1 F(\214ed of their status.)180 321.6 Q F1<ad70> -144 333.6 Q F0(List only the process ID of the job')180 333.6 Q 2.5(sp) --.55 G(rocess group leader)-2.5 E(.)-.55 E F1<ad72>144 345.6 Q F0 -(Display only running jobs.)180 345.6 Q F1<ad73>144 357.6 Q F0 -(Display only stopped jobs.)180 357.6 Q(If)144 374.4 Q F2(jobspec)4.554 -E F0 .314(is gi)3.124 F -.15(ve)-.25 G .314 +(gument to)-.18 F F3<ad70>144 436.8 Q F1 -.1(fa)2.5 G(ils.).1 E F3(jobs) +108 453.6 Q F1([)2.5 E F3(\255lnprs)A F1 2.5(][)C F0(jobspec)A F1 -3.332 +1.666(... ])2.5 H F3(jobs \255x)108 465.6 Q F0(command)2.5 E F1([)2.5 E +F0(ar)2.5 E(gs)-.37 E F1 -3.332 1.666(... ])2.5 H +(The \214rst form lists the acti)144 477.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 F3<ad6c>144 489.6 Q F1 +(List process IDs in addition to the normal information.)180 489.6 Q F3 +<ad6e>144 501.6 Q F1 .193(Display information only about jobs that ha) +180 501.6 R .494 -.15(ve c)-.2 H .194(hanged status since the user w).15 +F .194(as last noti-)-.1 F(\214ed of their status.)180 513.6 Q F3<ad70> +144 525.6 Q F1(List only the process ID of the job')180 525.6 Q 2.5(sp) +-.55 G(rocess group leader)-2.5 E(.)-.55 E F3<ad72>144 537.6 Q F1 +(Display only running jobs.)180 537.6 Q F3<ad73>144 549.6 Q F1 +(Display only stopped jobs.)180 549.6 Q(If)144 566.4 Q F0(jobspec)4.554 +E F1 .314(is gi)3.124 F -.15(ve)-.25 G .314 (n, output is restricted to information about that job).15 F 5.313(.T) --.4 G .313(he return status is 0 unless)-5.313 F(an in)144 386.4 Q -.25 +-.4 G .313(he return status is 0 unless)-5.313 F(an in)144 578.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 .394(If the)144 403.2 R F1 -<ad78>2.894 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 .395 -(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.83 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 -E F1(kill)108 432 Q F0([)2.5 E F1<ad73>A F2(sigspec)2.5 E F0(|)2.5 E F1 -<ad6e>2.5 E F2(signum)2.5 E F0(|)2.5 E F1<ad>2.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 444 Q F0(|)A F1<ad4c>A F0([)2.5 E F2(sigspec)A F0(|)2.5 -E F2 -.2(ex)2.5 G(it_status).2 E F0(])A .017(Send the signal named by) -144 456 R F2(sigspec)2.857 E F0(or)2.827 E F2(signum)2.857 E F0 .017 -(to the processes named by)2.837 F F2(pid)3.767 E F0(or)3.287 E F2 -(jobspec)4.257 E F0(.).31 E F2(sigspec)5.357 E F0(is)2.827 E .318 -(either a case-insensiti)144 468 R .618 -.15(ve s)-.25 H .318 -(ignal name such as).15 F F3(SIGKILL)2.818 E F0 .319 -(\(with or without the)2.569 F F3(SIG)2.819 E F0 .319 -(pre\214x\) or a signal)2.569 F(number;)144 480 Q F2(signum)3.268 E F0 -.427(is a signal number)3.247 F 5.427(.I)-.55 G(f)-5.427 E F2(sigspec) -3.267 E F0 .427(is not present, then)3.237 F F3(SIGTERM)2.927 E F0 .427 -(is assumed.)2.677 F .427(An ar)5.427 F(-)-.2 E .313(gument of)144 492 R -F1<ad6c>2.813 E F0 .314(lists the signal names.)2.814 F .314(If an)5.314 +E F0(jobspec)4.24 E F1(is supplied.)2.81 E .394(If the)144 595.2 R F3 +<ad78>2.894 E F1 .394(option is supplied,)2.894 F F3(jobs)2.894 E F1 +.394(replaces an)2.894 F(y)-.15 E F0(jobspec)4.634 E F1 .394(found in) +3.204 F F0(command)3.094 E F1(or)3.664 E F0(ar)3.224 E(gs)-.37 E F1 .395 +(with the corre-)3.164 F(sponding process group ID, and e)144 607.2 Q +-.15(xe)-.15 G(cutes).15 E F0(command)2.7 E F1(passing it)3.27 E F0(ar) +2.83 E(gs)-.37 E F1 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 +E F3(kill)108 624 Q F1([)2.5 E F3<ad73>A F0(sigspec)2.5 E F1(|)2.5 E F3 +<ad6e>2.5 E F0(signum)2.5 E F1(|)2.5 E F3<ad>2.5 E F0(sigspec)A F1 2.5 +(][)C F0(pid)-2.5 E F1(|)2.5 E F0(jobspec)2.5 E F1 2.5(].)C 1.666(..) +-.834 G F3(kill \255l)108 636 Q F1(|)A F3<ad4c>A F1([)2.5 E F0(sigspec)A +F1(|)2.5 E F0 -.2(ex)2.5 G(it_status).2 E F1(])A .017 +(Send the signal named by)144 648 R F0(sigspec)2.857 E F1(or)2.827 E F0 +(signum)2.857 E F1 .017(to the processes named by)2.837 F F0(pid)3.767 E +F1(or)3.287 E F0(jobspec)4.257 E F1(.).31 E F0(sigspec)5.357 E F1(is) +2.827 E .318(either a case-insensiti)144 660 R .618 -.15(ve s)-.25 H +.318(ignal name such as).15 F F2(SIGKILL)2.818 E F1 .319 +(\(with or without the)2.569 F F2(SIG)2.819 E F1 .319 +(pre\214x\) or a signal)2.569 F(number;)144 672 Q F0(signum)3.268 E F1 +.427(is a signal number)3.247 F 5.427(.I)-.55 G(f)-5.427 E F0(sigspec) +3.267 E F1 .427(is not present, then)3.237 F F2(SIGTERM)2.927 E F1 .427 +(is assumed.)2.677 F .427(An ar)5.427 F(-)-.2 E .313(gument of)144 684 R +F3<ad6c>2.813 E F1 .314(lists the signal names.)2.814 F .314(If an)5.314 F 2.814(ya)-.15 G -.18(rg)-2.814 G .314(uments are supplied when).18 F -F1<ad6c>2.814 E F0 .314(is gi)2.814 F -.15(ve)-.25 G .314 -(n, the names of).15 F .12(the signals corresponding to the ar)144 504 R +F3<ad6c>2.814 E F1 .314(is gi)2.814 F -.15(ve)-.25 G .314 +(n, the names of).15 F .12(the signals corresponding to the ar)144 696 R .119(guments are listed, and the return status is 0.)-.18 F(The)5.119 E -F2 -.2(ex)2.619 G(it_status).2 E F0(ar)2.619 E(-)-.2 E .799(gument to) -144 516 R F1<ad6c>3.299 E F0 .799 +F0 -.2(ex)2.619 G(it_status).2 E F1(ar)2.619 E(-)-.2 E .799(gument to) +144 708 R F3<ad6c>3.299 E F1 .799 (is a number specifying either a signal number or the e)3.299 F .8 -(xit status of a process termi-)-.15 F .963(nated by a signal.)144 528 R -(The)5.962 E F1<ad4c>3.462 E F0 .962(option is equi)3.462 F -.25(va)-.25 -G .962(lent to).25 F F1<ad6c>3.462 E F0(.)A F1(kill)5.962 E F0 .962 -(returns true if at least one signal w)3.462 F(as)-.1 E -(successfully sent, or f)144 540 Q(alse if an error occurs or an in)-.1 -E -.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)5.817 E(g)-.37 E F0 2.987(is an arithmetic e)5.707 F 2.987 -(xpression to be e)-.15 F -.25(va)-.25 G 2.987(luated \(see).25 F F3 -2.987(ARITHMETIC EV)5.487 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0 -(in)5.238 E F2(bash\(1\))144 580.8 Q F0 2.5(\). If)B(the last)2.5 E 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 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(.. | \255 ])-2.5 E -.15(Fo)144 609.6 S 2.542(re).15 G .042(ach ar) --2.542 F .042(gument, a local v)-.18 F .042(ariable named)-.25 F F2 -(name)2.902 E F0 .042(is created, and assigned)2.722 F F2(value)2.832 E -F0 5.042(.T).18 G(he)-5.042 E F2(option)2.542 E F0 .041(can be)2.541 F -(an)144 621.6 Q 3.152(yo)-.15 G 3.152(ft)-3.152 G .652 -(he options accepted by)-3.152 F F1(declar)3.152 E(e)-.18 E F0 5.652(.W) -C(hen)-5.652 E F1(local)3.152 E F0 .653 -(is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144 -633.6 Q F2(name)3.282 E F0 .422(to ha)3.102 F .722 -.15(ve a v)-.2 H -.422(isible scope restricted to that function and its children.).15 F -(If)5.421 E F2(name)2.921 E F0 .421(is \255, the set)2.921 F .509 -(of shell options is made local to the function in which)144 645.6 R F1 -(local)3.01 E F0 .51(is in)3.01 F -.2(vo)-.4 G -.1(ke).2 G .51 -(d: shell options changed us-).1 F 1.171(ing the)144 657.6 R F1(set) -3.671 E F0 -.2(bu)3.671 G 1.171 -(iltin inside the function are restored to their original v).2 F 1.17 -(alues when the function re-)-.25 F 3.38(turns. The)144 669.6 R .88 -(restore is ef)3.38 F .88(fected as if a series of)-.25 F F1(set)3.381 E -F0 .881(commands were e)3.381 F -.15(xe)-.15 G .881 -(cuted to restore the v).15 F(alues)-.25 E .788 -(that were in place before the function.)144 681.6 R -.4(Wi)5.788 G .788 -(th no operands,).4 F F1(local)3.288 E F0 .787(writes a list of local v) -3.288 F .787(ariables to)-.25 F .654(the standard output.)144 693.6 R -.654(It is an error to use)5.654 F F1(local)3.154 E F0 .654 -(when not within a function.)3.154 F .655(The return status is 0)5.654 F -(unless)144 705.6 Q F1(local)2.5 E F0(is used outside a function, an in) -2.5 E -.25(va)-.4 G(lid).25 E F2(name)2.86 E F0(is supplied, or)2.68 E -F2(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E(GNU Bash 5.2)72 -768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(11)185.545 E 0 Cg -EP +(xit status of a process termi-)-.15 F .963(nated by a signal.)144 720 R +(The)5.962 E F3<ad4c>3.462 E F1 .962(option is equi)3.462 F -.25(va)-.25 +G .962(lent to).25 F F3<ad6c>3.462 E F1(.)A F3(kill)5.962 E F1 .962 +(returns true if at least one signal w)3.462 F(as)-.1 E(GNU Bash 5.2)72 +768 Q(2023 January 27)141.79 E(11)190.95 E 0 Cg EP %%Page: 12 12 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(logout)108 84 Q F0 -(Exit a login shell.)144 84 Q F1(map\214le)108 100.8 Q F0([)2.5 E F1 -<ad64>A/F2 10/Times-Italic@0 SF(delim)2.5 E F0 2.5(][)C F1<ad6e>-2.5 E -F2(count)2.5 E F0 2.5(][)C F1<ad4f>-2.5 E F2(origin)2.5 E F0 2.5(][)C F1 -<ad73>-2.5 E F2(count)2.5 E F0 2.5(][)C F1<ad74>-2.5 E F0 2.5(][)C F1 -<ad75>-2.5 E F2(fd)2.5 E F0 2.5(][)C F1<ad43>-2.5 E F2(callbac)2.5 E(k) --.2 E F0 2.5(][)C F1<ad63>-2.5 E F2(quantum)2.5 E F0 2.5(][)C F2(arr) --2.5 E(ay)-.15 E F0(])A F1 -.18(re)108 112.8 S(adarray).18 E F0([)2.5 E -F1<ad64>A F2(delim)2.5 E F0 2.5(][)C F1<ad6e>-2.5 E F2(count)2.5 E F0 -2.5(][)C F1<ad4f>-2.5 E F2(origin)2.5 E F0 2.5(][)C F1<ad73>-2.5 E F2 -(count)2.5 E F0 2.5(][)C F1<ad74>-2.5 E F0 2.5(][)C F1<ad75>-2.5 E F2 -(fd)2.5 E F0 2.5(][)C F1<ad43>-2.5 E F2(callbac)2.5 E(k)-.2 E F0 2.5(][) -C F1<ad63>-2.5 E F2(quantum)2.5 E F0 2.5(][)C F2(arr)-2.5 E(ay)-.15 E F0 -(])A .159(Read lines from the standard input into the inde)144 124.8 R --.15(xe)-.15 G 2.659(da).15 G .159(rray v)-2.659 F(ariable)-.25 E F2 -(arr)2.989 E(ay)-.15 E F0 2.659(,o).32 G 2.658(rf)-2.659 G .158 -(rom \214le descriptor)-2.658 F F2(fd)4.628 E F0 1.248(if the)144 136.8 -R F1<ad75>3.748 E F0 1.248(option is supplied.)3.748 F 1.249(The v)6.249 -F(ariable)-.25 E/F3 9/Times-Bold@0 SF(MAPFILE)3.749 E F0 1.249 -(is the def)3.499 F(ault)-.1 E F2(arr)3.749 E(ay)-.15 E F0 6.249(.O)C -1.249(ptions, if supplied,)-6.249 F(ha)144 148.8 Q .3 -.15(ve t)-.2 H -(he follo).15 E(wing meanings:)-.25 E F1<ad64>144 160.8 Q F0 .911 -(The \214rst character of)180 160.8 R F2(delim)3.411 E F0 .911 -(is used to terminate each input line, rather than ne)3.411 F 3.41 -(wline. If)-.25 F F2(delim)180 172.8 Q F0(is the empty string,)2.5 E F1 -(map\214le)2.5 E F0(will terminate a line when it reads a NUL character) -2.5 E(.)-.55 E F1<ad6e>144 184.8 Q F0(Cop)180 184.8 Q 2.5(ya)-.1 G 2.5 -(tm)-2.5 G(ost)-2.5 E F2(count)2.7 E F0 2.5(lines. If)3.18 F F2(count) -2.5 E F0(is 0, all lines are copied.)2.5 E F1<ad4f>144 196.8 Q F0(Be)180 -196.8 Q(gin assigning to)-.15 E F2(arr)2.83 E(ay)-.15 E F0(at inde)2.82 -E(x)-.15 E F2(origin)2.73 E F0 5(.T).24 G(he def)-5 E(ault inde)-.1 E -2.5(xi)-.15 G 2.5(s0)-2.5 G(.)-2.5 E F1<ad73>144 208.8 Q F0 -(Discard the \214rst)180 208.8 Q F2(count)2.5 E F0(lines read.)2.5 E F1 -<ad74>144 220.8 Q F0(Remo)180 220.8 Q .3 -.15(ve a t)-.15 H(railing).15 -E F2(delim)2.5 E F0(\(def)2.5 E(ault ne)-.1 E -(wline\) from each line read.)-.25 E F1<ad75>144 232.8 Q F0 -(Read lines from \214le descriptor)180 232.8 Q F2(fd)2.5 E F0 -(instead of the standard input.)2.5 E F1<ad43>144 244.8 Q F0(Ev)180 -244.8 Q(aluate)-.25 E F2(callbac)2.7 E(k)-.2 E F0(each time)3.17 E F2 -(quantum)2.5 E F0(lines are read.)2.5 E(The)5 E F1<ad63>2.5 E F0 -(option speci\214es)2.5 E F2(quantum)2.75 E F0(.).32 E F1<ad63>144 256.8 -Q F0(Specify the number of lines read between each call to)180 256.8 Q -F2(callbac)2.7 E(k)-.2 E F0(.).67 E(If)144 273.6 Q F1<ad43>2.967 E F0 -.467(is speci\214ed without)2.967 F F1<ad63>2.967 E F0 2.967(,t)C .467 -(he def)-2.967 F .467(ault quantum is 5000.)-.1 F(When)5.467 E F2 -(callbac)2.967 E(k)-.2 E F0 .467(is e)2.967 F -.25(va)-.25 G .467 -(luated, it is sup-).25 F .262(plied the inde)144 285.6 R 2.762(xo)-.15 -G 2.762(ft)-2.762 G .262(he ne)-2.762 F .261(xt array element to be ass\ -igned and the line to be assigned to that element)-.15 F .274 -(as additional ar)144 297.6 R(guments.)-.18 E F2(callbac)5.274 E(k)-.2 E -F0 .274(is e)2.774 F -.25(va)-.25 G .274 -(luated after the line is read b).25 F .275 -(ut before the array element is)-.2 F(assigned.)144 309.6 Q -(If not supplied with an e)144 326.4 Q(xplicit origin,)-.15 E F1 -(map\214le)2.5 E F0(will clear)2.5 E F2(arr)2.5 E(ay)-.15 E F0 -(before assigning to it.)2.5 E F1(map\214le)144 343.2 Q F0 .797 -(returns successfully unless an in)3.298 F -.25(va)-.4 G .797 -(lid option or option ar).25 F .797(gument is supplied,)-.18 F F2(arr) -3.297 E(ay)-.15 E F0 .797(is in-)3.297 F -.25(va)144 355.2 S -(lid or unassignable, or if).25 E F2(arr)2.5 E(ay)-.15 E F0 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E +(successfully sent, or f)144 84 Q(alse if an error occurs or an in)-.1 E +-.25(va)-.4 G(lid option is encountered.).25 E/F2 10/Times-Bold@0 SF +(let)108 100.8 Q F0(ar)2.5 E(g)-.37 E F1([)2.5 E F0(ar)A(g)-.37 E F1 +1.666(...)2.5 G(])-1.666 E(Each)144 112.8 Q F0(ar)5.817 E(g)-.37 E F1 +2.987(is an arithmetic e)5.707 F 2.987(xpression to be e)-.15 F -.25(va) +-.25 G 2.987(luated \(see).25 F/F3 9/Times-Bold@0 SF 2.987 +(ARITHMETIC EV)5.487 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F1(in) +5.238 E F0(bash)144 124.8 Q F1 2.5(\(1\)\). If)B(the last)2.5 E F0(ar) +2.83 E(g)-.37 E F1 -.25(eva)2.72 G(luates to 0,).25 E F2(let)2.5 E F1 +(returns 1; 0 is returned otherwise.)2.5 E F2(local)108 141.6 Q F1([)2.5 +E F0(option)A F1 2.5(][)C F0(name)-2.5 E F1([=)A F0(value)A F1 2.5(].)C +-3.332 1.666(.. | \255 ])-.834 H -.15(Fo)144 153.6 S 2.542(re).15 G .042 +(ach ar)-2.542 F .042(gument, a local v)-.18 F .042(ariable named)-.25 F +F0(name)2.902 E F1 .042(is created, and assigned)2.722 F F0(value)2.832 +E F1 5.042(.T).18 G(he)-5.042 E F0(option)2.542 E F1 .041(can be)2.541 F +(an)144 165.6 Q 3.152(yo)-.15 G 3.152(ft)-3.152 G .652 +(he options accepted by)-3.152 F F2(declar)3.152 E(e)-.18 E F1 5.652(.W) +C(hen)-5.652 E F2(local)3.152 E F1 .653 +(is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144 +177.6 Q F0(name)3.282 E F1 .422(to ha)3.102 F .722 -.15(ve a v)-.2 H +.422(isible scope restricted to that function and its children.).15 F +(If)5.421 E F0(name)2.921 E F1 .421(is \255, the set)2.921 F .509 +(of shell options is made local to the function in which)144 189.6 R F2 +(local)3.01 E F1 .51(is in)3.01 F -.2(vo)-.4 G -.1(ke).2 G .51 +(d: shell options changed us-).1 F 1.282(ing the)144 201.6 R F2(set) +3.782 E F1 -.2(bu)3.782 G 1.281 +(iltin inside the function after the call to).2 F F2(local)3.781 E F1 +1.281(are restored to their original v)3.781 F(alues)-.25 E .277 +(when the function returns.)144 213.6 R .277(The restore is ef)5.277 F +.278(fected as if a series of)-.25 F F2(set)2.778 E F1 .278 +(commands were e)2.778 F -.15(xe)-.15 G .278(cuted to).15 F .69 +(restore the v)144 225.6 R .69 +(alues that were in place before the function.)-.25 F -.4(Wi)5.69 G .69 +(th no operands,).4 F F2(local)3.19 E F1 .69(writes a list of)3.19 F +.566(local v)144 237.6 R .566(ariables to the standard output.)-.25 F +.566(It is an error to use)5.566 F F2(local)3.066 E F1 .566 +(when not within a function.)3.066 F(The)5.567 E .426 +(return status is 0 unless)144 249.6 R F2(local)2.926 E F1 .425 +(is used outside a function, an in)2.925 F -.25(va)-.4 G(lid).25 E F0 +(name)3.285 E F1 .425(is supplied, or)3.105 F F0(name)2.925 E F1 .425 +(is a)2.925 F(readonly v)144 261.6 Q(ariable.)-.25 E F2(logout)108 278.4 +Q F1(Exit a login shell.)144 278.4 Q F2(map\214le)108 295.2 Q F1([)2.5 E +F2<ad64>A F0(delim)2.5 E F1 2.5(][)C F2<ad6e>-2.5 E F0(count)2.5 E F1 +2.5(][)C F2<ad4f>-2.5 E F0(origin)2.5 E F1 2.5(][)C F2<ad73>-2.5 E F0 +(count)2.5 E F1 2.5(][)C F2<ad74>-2.5 E F1 2.5(][)C F2<ad75>-2.5 E F0 +(fd)2.5 E F1 2.5(][)C F2<ad43>-2.5 E F0(callbac)2.5 E(k)-.2 E F1 2.5(][) +C F2<ad63>-2.5 E F0(quantum)2.5 E F1 2.5(][)C F0(arr)-2.5 E(ay)-.15 E F1 +(])A F2 -.18(re)108 307.2 S(adarray).18 E F1([)2.5 E F2<ad64>A F0(delim) +2.5 E F1 2.5(][)C F2<ad6e>-2.5 E F0(count)2.5 E F1 2.5(][)C F2<ad4f>-2.5 +E F0(origin)2.5 E F1 2.5(][)C F2<ad73>-2.5 E F0(count)2.5 E F1 2.5(][)C +F2<ad74>-2.5 E F1 2.5(][)C F2<ad75>-2.5 E F0(fd)2.5 E F1 2.5(][)C F2 +<ad43>-2.5 E F0(callbac)2.5 E(k)-.2 E F1 2.5(][)C F2<ad63>-2.5 E F0 +(quantum)2.5 E F1 2.5(][)C F0(arr)-2.5 E(ay)-.15 E F1(])A .158 +(Read lines from the standard input into the inde)144 319.2 R -.15(xe) +-.15 G 2.659(da).15 G .159(rray v)-2.659 F(ariable)-.25 E F0(arr)2.989 E +(ay)-.15 E F1 2.659(,o).32 G 2.659(rf)-2.659 G .159 +(rom \214le descriptor)-2.659 F F0(fd)4.629 E F1 1.249(if the)144 331.2 +R F2<ad75>3.749 E F1 1.249(option is supplied.)3.749 F 1.249(The v)6.249 +F(ariable)-.25 E F3(MAPFILE)3.749 E F1 1.249(is the def)3.499 F(ault)-.1 +E F0(arr)3.748 E(ay)-.15 E F1 6.248(.O)C 1.248(ptions, if supplied,) +-6.248 F(ha)144 343.2 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F2<ad64>144 355.2 Q F1 .91 +(The \214rst character of)180 355.2 R F0(delim)3.41 E F1 .911 +(is used to terminate each input line, rather than ne)3.41 F 3.411 +(wline. If)-.25 F F0(delim)180 367.2 Q F1(is the empty string,)2.5 E F2 +(map\214le)2.5 E F1(will terminate a line when it reads a NUL character) +2.5 E(.)-.55 E F2<ad6e>144 379.2 Q F1(Cop)180 379.2 Q 2.5(ya)-.1 G 2.5 +(tm)-2.5 G(ost)-2.5 E F0(count)2.7 E F1 2.5(lines. If)3.18 F F0(count) +2.5 E F1(is 0, all lines are copied.)2.5 E F2<ad4f>144 391.2 Q F1(Be)180 +391.2 Q(gin assigning to)-.15 E F0(arr)2.83 E(ay)-.15 E F1(at inde)2.82 +E(x)-.15 E F0(origin)2.73 E F1 5(.T).24 G(he def)-5 E(ault inde)-.1 E +2.5(xi)-.15 G 2.5(s0)-2.5 G(.)-2.5 E F2<ad73>144 403.2 Q F1 +(Discard the \214rst)180 403.2 Q F0(count)2.5 E F1(lines read.)2.5 E F2 +<ad74>144 415.2 Q F1(Remo)180 415.2 Q .3 -.15(ve a t)-.15 H(railing).15 +E F0(delim)2.5 E F1(\(def)2.5 E(ault ne)-.1 E +(wline\) from each line read.)-.25 E F2<ad75>144 427.2 Q F1 +(Read lines from \214le descriptor)180 427.2 Q F0(fd)2.5 E F1 +(instead of the standard input.)2.5 E F2<ad43>144 439.2 Q F1(Ev)180 +439.2 Q(aluate)-.25 E F0(callbac)2.7 E(k)-.2 E F1(each time)3.17 E F0 +(quantum)2.5 E F1(lines are read.)2.5 E(The)5 E F2<ad63>2.5 E F1 +(option speci\214es)2.5 E F0(quantum)2.75 E F1(.).32 E F2<ad63>144 451.2 +Q F1(Specify the number of lines read between each call to)180 451.2 Q +F0(callbac)2.7 E(k)-.2 E F1(.).67 E(If)144 468 Q F2<ad43>2.968 E F1 .467 +(is speci\214ed without)2.967 F F2<ad63>2.967 E F1 2.967(,t)C .467 +(he def)-2.967 F .467(ault quantum is 5000.)-.1 F(When)5.467 E F0 +(callbac)2.967 E(k)-.2 E F1 .467(is e)2.967 F -.25(va)-.25 G .467 +(luated, it is sup-).25 F .261(plied the inde)144 480 R 2.761(xo)-.15 G +2.761(ft)-2.761 G .261(he ne)-2.761 F .262(xt array element to be assig\ +ned and the line to be assigned to that element)-.15 F .275 +(as additional ar)144 492 R(guments.)-.18 E F0(callbac)5.275 E(k)-.2 E +F1 .275(is e)2.775 F -.25(va)-.25 G .274 +(luated after the line is read b).25 F .274 +(ut before the array element is)-.2 F(assigned.)144 504 Q +(If not supplied with an e)144 520.8 Q(xplicit origin,)-.15 E F2 +(map\214le)2.5 E F1(will clear)2.5 E F0(arr)2.5 E(ay)-.15 E F1 +(before assigning to it.)2.5 E F2(map\214le)144 537.6 Q F1 .797 +(returns successfully unless an in)3.297 F -.25(va)-.4 G .797 +(lid option or option ar).25 F .797(gument is supplied,)-.18 F F0(arr) +3.297 E(ay)-.15 E F1 .798(is in-)3.298 F -.25(va)144 549.6 S +(lid or unassignable, or if).25 E F0(arr)2.5 E(ay)-.15 E F1 (is not an inde)2.5 E -.15(xe)-.15 G 2.5(da).15 G(rray)-2.5 E(.)-.65 E -F1(popd)108 372 Q F0<5bad>2.5 E F1(n)A F0 2.5(][)C(+)-2.5 E F2(n)A F0 -2.5(][)C<ad>-2.5 E F2(n)A F0(])A(Remo)144 384 Q -.15(ve)-.15 G 3.091(se) -.15 G .591(ntries from the directory stack.)-3.091 F .592 -(The elements are numbered from 0 starting at the \214rst)5.591 F .665 -(directory listed by)144 396 R F1(dirs)3.165 E F0 5.665(.W)C .665 -(ith no ar)-6.065 F(guments,)-.18 E F1(popd)3.165 E F0(remo)3.165 E -.15 -(ve)-.15 G 3.165(st).15 G .664(he top directory from the stack, and) --3.165 F(changes to the ne)144 408 Q 2.5(wt)-.25 G(op directory)-2.5 E 5 -(.A)-.65 G -.18(rg)-5 G(uments, if supplied, ha).18 E .3 -.15(ve t)-.2 H -(he follo).15 E(wing meanings:)-.25 E F1<ad6e>144 420 Q F0 .551 -(Suppresses the normal change of directory when remo)180 420 R .551 +F2(popd)108 566.4 Q F1<5bad>2.5 E F2(n)A F1 2.5(][)C(+)-2.5 E F0(n)A F1 +2.5(][)C<ad>-2.5 E F0(n)A F1(])A(Remo)144 578.4 Q -.15(ve)-.15 G 3.092 +(se).15 G .592(ntries from the directory stack.)-3.092 F .591 +(The elements are numbered from 0 starting at the \214rst)5.591 F .664 +(directory listed by)144 590.4 R F2(dirs)3.164 E F1 5.664(.W)C .664 +(ith no ar)-6.064 F(guments,)-.18 E F2(popd)3.165 E F1(remo)3.165 E -.15 +(ve)-.15 G 3.165(st).15 G .665(he top directory from the stack, and) +-3.165 F(changes to the ne)144 602.4 Q 2.5(wt)-.25 G(op directory)-2.5 E +5(.A)-.65 G -.18(rg)-5 G(uments, if supplied, ha).18 E .3 -.15(ve t)-.2 +H(he follo).15 E(wing meanings:)-.25 E F2<ad6e>144 614.4 Q F1 .551 +(Suppresses the normal change of directory when remo)180 614.4 R .551 (ving directories from the stack, so)-.15 F -(that only the stack is manipulated.)180 432 Q F1(+)144 444 Q F2(n)A F0 -(Remo)180 444 Q -.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 .779 -(from the stack.)180 456 R -.15(Fo)5.779 G 3.279(re).15 G(xample:)-3.429 -E/F4 10/Courier@0 SF .779(popd +0)3.279 F F0(remo)3.279 E -.15(ve)-.15 G -3.279(st).15 G .779(he \214rst directory)-3.279 F(,)-.65 E F4 .78 -(popd +1)3.28 F F0 .78(the sec-)3.28 F(ond.)180 468 Q F1<ad>144 480 Q F2 -(n)A F0(Remo)180 480 Q -.15(ve)-.15 G 3.76(st).15 G(he)-3.76 E F2(n)3.76 -E F0 1.259(th entry counting from the right of the list sho)B 1.259 -(wn by)-.25 F F1(dirs)3.759 E F0 3.759(,s)C 1.259(tarting with)-3.759 F -2.5(zero. F)180 492 R(or e)-.15 E(xample:)-.15 E F4(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 F4(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E .093 -(If the top element of the directory stack is modi\214ed, and the)144 -508.8 R F2(-n)2.593 E F0 .094(option w)2.594 F .094(as not supplied,)-.1 -F F1(popd)2.594 E F0(uses)2.594 E(the)144 520.8 Q F1(cd)2.697 E F0 -.2 -(bu)2.697 G .196 -(iltin to change to the directory at the top of the stack.).2 F .196 -(If the)5.196 F F1(cd)2.696 E F0 -.1(fa)2.696 G(ils,).1 E F1(popd)2.696 -E F0 .196(returns a non-)2.696 F(zero v)144 532.8 Q(alue.)-.25 E -(Otherwise,)144 549.6 Q F1(popd)2.67 E F0 .17(returns f)2.67 F .17 -(alse if an in)-.1 F -.25(va)-.4 G .171 +(that only the stack is manipulated.)180 626.4 Q F2(+)144 638.4 Q F0(n)A +F1(Remo)180 638.4 Q -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F0(n)2.64 E +F1 .14(th entry counting from the left of the list sho)B .14(wn by)-.25 +F F2(dirs)2.64 E F1 2.64(,s)C .14(tarting with zero,)-2.64 F +(from the stack.)180 650.4 Q -.15(Fo)5 G 2.5(re).15 G(xample: remo)-2.65 +E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E 2.5(,t)-.65 G +(he second.)-2.5 E F2<ad>144 662.4 Q F0(n)A F1(Remo)180 662.4 Q -.15(ve) +-.15 G 3.76(st).15 G(he)-3.76 E F0(n)3.76 E F1 1.259 +(th entry counting from the right of the list sho)B 1.259(wn by)-.25 F +F2(dirs)3.759 E F1 3.759(,s)C 1.259(tarting with)-3.759 F 2.5(zero. F) +180 674.4 R(or e)-.15 E(xample: remo)-.15 E -.15(ve)-.15 G 2.5(st).15 G +(he last directory)-2.5 E 2.5(,t)-.65 G(he ne)-2.5 E(xt to last.)-.15 E +1.057(If the top element of the directory stack is modi\214ed, and the) +144 691.2 R F0<ad6e>3.558 E F1 1.058(option w)3.558 F 1.058 +(as not supplied,)-.1 F F2(popd)3.558 E F1 .25(uses the)144 703.2 R F2 +(cd)2.749 E F1 -.2(bu)2.749 G .249 +(iltin to change to the directory at the top of the stack.).2 F .249 +(If the)5.249 F F2(cd)2.749 E F1 -.1(fa)2.749 G(ils,).1 E F2(popd)2.749 +E F1 .249(returns a)2.749 F(non-zero v)144 715.2 Q(alue.)-.25 E +(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E(12)190.95 E 0 Cg EP +%%Page: 13 13 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E +(Otherwise,)144 84 Q/F2 10/Times-Bold@0 SF(popd)2.67 E F1 .17(returns f) +2.67 F .17(alse if an in)-.1 F -.25(va)-.4 G .171 (lid option is encountered, the directory stack is empty).25 F 2.671(,o) --.65 G 2.671(ra)-2.671 G(non-e)144 561.6 Q +-.65 G 2.671(ra)-2.671 G(non-e)144 96 Q (xistent directory stack entry is speci\214ed.)-.15 E 1.556(If the)144 -578.4 R F1(popd)4.056 E F0 1.556(command is successful, bash runs)4.056 -F F1(dirs)4.056 E F0 1.556(to sho)4.056 F 4.055(wt)-.25 G 1.555 +112.8 R F2(popd)4.056 E F1 1.556(command is successful, bash runs)4.056 +F F2(dirs)4.056 E F1 1.556(to sho)4.056 F 4.055(wt)-.25 G 1.555 (he \214nal contents of the directory)-4.055 F -(stack, and the return status is 0.)144 590.4 Q F1(printf)108 607.2 Q F0 -([)2.5 E F1<ad76>A F2(var)2.5 E F0(])A F2(format)2.5 E F0([)2.5 E F2(ar) -A(guments)-.37 E F0(])A .357(Write the formatted)144 619.2 R F2(ar)2.857 -E(guments)-.37 E F0 .357 -(to the standard output under the control of the)2.857 F F2(format)2.858 -E F0 5.358(.T)C(he)-5.358 E F1<ad76>2.858 E F0(op-)2.858 E .714 -(tion causes the output to be assigned to the v)144 631.2 R(ariable)-.25 -E F2(var)3.214 E F0 .714(rather than being printed to the standard)3.214 -F(output.)144 643.2 Q(The)144 667.2 Q F2(format)3.017 E F0 .517(is a ch\ +(stack, and the return status is 0.)144 124.8 Q F2(printf)108 141.6 Q F1 +([)2.5 E F2<ad76>A F0(var)2.5 E F1(])A F0(format)2.5 E F1([)2.5 E F0(ar) +A(guments)-.37 E F1(])A .357(Write the formatted)144 153.6 R F0(ar)2.857 +E(guments)-.37 E F1 .357 +(to the standard output under the control of the)2.857 F F0(format)2.858 +E F1 5.358(.T)C(he)-5.358 E F2<ad76>2.858 E F1(op-)2.858 E .714 +(tion causes the output to be assigned to the v)144 165.6 R(ariable)-.25 +E F0(var)3.214 E F1 .714(rather than being printed to the standard)3.214 +F(output.)144 177.6 Q(The)144 194.4 Q F0(format)3.017 E F1 .517(is a ch\ aracter string which contains three types of objects: plain characters,\ which are)3.017 F .704(simply copied to standard output, character esc\ -ape sequences, which are con)144 679.2 R -.15(ve)-.4 G .703 +ape sequences, which are con)144 206.4 R -.15(ve)-.4 G .703 (rted and copied to).15 F .036(the standard output, and format speci\ -\214cations, each of which causes printing of the ne)144 691.2 R .037 -(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 703.2 Q(gument)-.37 E F0 -5.532(.I)C 3.032(na)-5.532 G .532(ddition to the standard)-3.032 F F2 -(printf)3.032 E F0 .532(\(1\) format speci\214cations,)B F1(printf)3.031 -E F0 .531(interprets the follo)3.031 F(w-)-.25 E(ing e)144 715.2 Q -(xtensions:)-.15 E(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 -G(mber 22).15 E(12)185.545 E 0 Cg EP -%%Page: 13 13 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(%b)144 84 Q F0 -(causes)180 84 Q F1(printf)2.595 E F0 .096(to e)2.595 F .096 -(xpand backslash escape sequences in the corresponding)-.15 F/F2 10 -/Times-Italic@0 SF(ar)2.596 E(gument)-.37 E F0 .096(in the)2.596 F -(same w)180 96 Q(ay as)-.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 108 Q -F0(causes)180 108 Q F1(printf)2.51 E F0 .01(to output the corresponding) -2.51 F F2(ar)2.51 E(gument)-.37 E F0 .01 -(in a format that can be reused as shell)2.51 F(input.)180 120 Q F1(%Q) -144 132 Q F0(lik)180 132 Q(e)-.1 E F1(%q)2.5 E F0 2.5(,b)C -(ut applies an)-2.7 E 2.5(ys)-.15 G(upplied precision to the)-2.5 E F2 -(ar)2.5 E(gument)-.37 E F0(before quoting it.)2.5 E F1(%\()144 144 Q F2 -(datefmt)A F1(\)T)A F0(causes)180 156 Q F1(printf)4.403 E F0 1.904 -(to output the date-time string resulting from using)4.403 F F2(datefmt) -4.404 E F0 1.904(as a format)4.404 F .381(string for)180 168 R F2 -(strftime)2.881 E F0 2.881(\(3\). The)B(corresponding)2.881 E F2(ar) -2.881 E(gument)-.37 E F0 .381(is an inte)2.881 F .381 +\214cations, each of which causes printing of the ne)144 218.4 R .037 +(xt successi)-.15 F -.15(ve)-.25 G F0(ar)144 230.4 Q(gument)-.37 E F1 +6.07(.I)C 3.57(na)-6.07 G 1.07(ddition to the standard)-3.57 F F0 +(printf)4.82 E F1 1.07(\(3\) format characters)1.96 F F2 +(csndiouxXeEfFgGaA)3.57 E F1(,)A F2(printf)3.57 E F1 +(interprets the follo)144 242.4 Q(wing additional format speci\214ers:) +-.25 E F2(%b)144 254.4 Q F1(causes)180 254.4 Q F2(printf)2.595 E F1 .096 +(to e)2.595 F .096 +(xpand backslash escape sequences in the corresponding)-.15 F F0(ar) +2.596 E(gument)-.37 E F1 .096(in the)2.596 F(same w)180 266.4 Q(ay as) +-.1 E F2(echo \255e)2.5 E F1(.)A F2(%q)144 278.4 Q F1(causes)180 278.4 Q +F2(printf)2.51 E F1 .01(to output the corresponding)2.51 F F0(ar)2.51 E +(gument)-.37 E F1 .01(in a format that can be reused as shell)2.51 F +(input.)180 290.4 Q F2(%q)5.891 E F1(and)3.391 E F2(%Q)3.391 E F1 .891 +(use the)3.391 F F2($)3.391 E F1 .891(quoting style if an)3.391 F 3.391 +(yc)-.15 G .892(haracters in the ar)-3.391 F .892(gument string re-)-.18 +F 1.286(quire it, and backslash quoting otherwise.)180 302.4 R 1.285 +(If the format string uses the)6.285 F F0(printf)3.785 E F1(alternate) +3.785 E(form, these tw)180 314.4 Q 2.5(of)-.1 G(ormats quote the ar)-2.5 +E(gument string using single quotes.)-.18 E F2(%Q)144 326.4 Q F1(lik)180 +326.4 Q(e)-.1 E F2(%q)2.5 E F1 2.5(,b)C(ut applies an)-2.7 E 2.5(ys)-.15 +G(upplied precision to the)-2.5 E F0(ar)2.5 E(gument)-.37 E F1 +(before quoting it.)2.5 E F2(%\()144 338.4 Q F0(datefmt)A F2(\)T)A F1 +(causes)180 350.4 Q F2(printf)4.403 E F1 1.904 +(to output the date-time string resulting from using)4.403 F F0(datefmt) +4.404 E F1 1.904(as a format)4.404 F .334(string for)180 362.4 R F0 +(strftime)3.174 E F1 2.834(\(3\). The).18 F(corresponding)2.834 E F0(ar) +2.834 E(gument)-.37 E F1 .334(is an inte)2.834 F .333 (ger representing the number)-.15 F .292(of seconds since the epoch.)180 -180 R -1 -.8(Tw o)5.293 H .293(special ar)3.593 F .293(gument v)-.18 F +374.4 R -1 -.8(Tw o)5.293 H .293(special ar)3.593 F .293(gument v)-.18 F .293(alues may be used: \2551 represents the)-.25 F .694 -(current time, and \2552 represents the time the shell w)180 192 R .693 -(as in)-.1 F -.2(vo)-.4 G -.1(ke).2 G 3.193(d. If).1 F .693(no ar)3.193 -F .693(gument is speci-)-.18 F .21(\214ed, con)180 204 R -.15(ve)-.4 G -.21(rsion beha).15 F -.15(ve)-.2 G 2.71(sa).15 G 2.71(si)-2.71 G 2.71 -<66ad>-2.71 G 2.71(1h)-2.71 G .21(ad been gi)-2.71 F -.15(ve)-.25 G 2.71 -(n. This).15 F .21(is an e)2.71 F .21(xception to the usual)-.15 F F1 -(printf)2.71 E F0(beha)180 216 Q(vior)-.2 E(.)-.55 E .902 -(The %b, %q, and %T directi)144 232.8 R -.15(ve)-.25 G 3.401(sa).15 G -.901(ll use the \214eld width and precision ar)-3.401 F .901 -(guments from the format)-.18 F .357(speci\214cation and write that man) -144 244.8 R 2.857(yb)-.15 G .358 -(ytes from \(or use that wide a \214eld for\) the e)-2.857 F .358 -(xpanded ar)-.15 F(gument,)-.18 E -(which usually contains more characters than the original.)144 256.8 Q -(Ar)144 273.6 Q .464(guments to non-string format speci\214ers are trea\ -ted as C constants, e)-.18 F .463(xcept that a leading plus or)-.15 F -1.258(minus sign is allo)144 285.6 R 1.259 +(current time, and \2552 represents the time the shell w)180 386.4 R +.693(as in)-.1 F -.2(vo)-.4 G -.1(ke).2 G 3.193(d. If).1 F .693(no ar) +3.193 F .693(gument is speci-)-.18 F .21(\214ed, con)180 398.4 R -.15 +(ve)-.4 G .21(rsion beha).15 F -.15(ve)-.2 G 2.71(sa).15 G 2.71(si)-2.71 +G 2.71<66ad>-2.71 G 2.71(1h)-2.71 G .21(ad been gi)-2.71 F -.15(ve)-.25 +G 2.71(n. This).15 F .21(is an e)2.71 F .21(xception to the usual)-.15 F +F2(printf)2.71 E F1(beha)180 410.4 Q(vior)-.2 E(.)-.55 E .946(The %b, %\ +q, and %T format speci\214ers all use the \214eld width and precision a\ +r)144 427.2 R .945(guments from the)-.18 F .338 +(format speci\214cation and write that man)144 439.2 R 2.838(yb)-.15 G +.338(ytes from \(or use that wide a \214eld for\) the e)-2.838 F .339 +(xpanded ar)-.15 F(-)-.2 E +(gument, which usually contains more characters than the original.)144 +451.2 Q(The %n format speci\214er accepts a corresponding ar)144 468 Q +(gument that is treated as a shell v)-.18 E(ariable name.)-.25 E .394 +(The %s and %c format speci\214ers accept an l \(long\) modi\214er)144 +484.8 R 2.893(,w)-.4 G .393(hich forces them to con)-2.893 F -.15(ve)-.4 +G .393(rt the ar).15 F(-)-.2 E .32 +(gument string to a wide-character string and apply an)144 496.8 R 2.821 +(ys)-.15 G .321(upplied \214eld width and precision in terms)-2.821 F +(of characters, not bytes.)144 508.8 Q(Ar)144 525.6 Q .464(guments to n\ +on-string format speci\214ers are treated as C constants, e)-.18 F .463 +(xcept that a leading plus or)-.15 F 1.258(minus sign is allo)144 537.6 +R 1.259 (wed, and if the leading character is a single or double quote, the v) --.25 F 1.259(alue is the)-.25 F(ASCII v)144 297.6 Q(alue of the follo) --.25 E(wing character)-.25 E(.)-.55 E(The)144 314.4 Q F2(format)2.515 E -F0 .015(is reused as necessary to consume all of the)2.515 F F2(ar)2.515 -E(guments)-.37 E F0 5.015(.I)C 2.514(ft)-5.015 G(he)-2.514 E F2(format) -2.514 E F0 .014(requires more)2.514 F F2(ar)2.514 E(-)-.2 E(guments)144 -326.4 Q F0 .565(than are supplied, the e)3.065 F .566 +-.25 F 1.259(alue is the)-.25 F(ASCII v)144 549.6 Q(alue of the follo) +-.25 E(wing character)-.25 E(.)-.55 E(The)144 566.4 Q F0(format)2.515 E +F1 .015(is reused as necessary to consume all of the)2.515 F F0(ar)2.515 +E(guments)-.37 E F1 5.015(.I)C 2.514(ft)-5.015 G(he)-2.514 E F0(format) +2.514 E F1 .014(requires more)2.514 F F0(ar)2.514 E(-)-.2 E(guments)144 +578.4 Q F1 .565(than are supplied, the e)3.065 F .566 (xtra format speci\214cations beha)-.15 F .866 -.15(ve a)-.2 H 3.066(si) .15 G 3.066(faz)-3.066 G .566(ero v)-3.066 F .566(alue or null string,) --.25 F(as appropriate, had been supplied.)144 338.4 Q(The return v)5 E -(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd) -108 355.2 Q F0([)2.5 E F1<ad6e>A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C -<ad>-2.5 E F2(n)A F0(])A F1(pushd)108 367.2 Q F0([)2.5 E F1<ad6e>A F0 -2.5(][)C F2(dir)-2.5 E F0(])A .64(Adds a directory to the top of the di\ -rectory stack, or rotates the stack, making the ne)144 379.2 R 3.139(wt) --.25 G .639(op of the)-3.139 F .088(stack the current w)144 391.2 R .088 -(orking directory)-.1 F 5.088(.W)-.65 G .088(ith no ar)-5.488 F -(guments,)-.18 E F1(pushd)2.589 E F0 -.15(ex)2.589 G .089 -(changes the top tw).15 F 2.589(oe)-.1 G .089(lements of)-2.589 F -(the directory stack.)144 403.2 Q(Ar)5 E(guments, if supplied, ha)-.18 E -.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad6e>144 -415.2 Q F0 1.811(Suppresses the normal change of directory when rotatin\ -g or adding directories to the)180 415.2 R -(stack, so that only the stack is manipulated.)180 427.2 Q F1(+)144 -439.2 Q F2(n)A F0 1.267(Rotates the stack so that the)180 439.2 R F2(n) -3.767 E F0 1.268(th directory \(counting from the left of the list sho)B -1.268(wn by)-.25 F F1(dirs)180 451.2 Q F0 2.5(,s)C -(tarting with zero\) is at the top.)-2.5 E F1<ad>144 463.2 Q F2(n)A F0 -.92(Rotates the stack so that the)180 463.2 R 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 475.2 Q F0 2.5(,s)C(tarting with zero\) is at the top.) --2.5 E F2(dir)144.35 487.2 Q F0(Adds)180 487.2 Q F2(dir)2.85 E F0 -(to the directory stack at the top)3.23 E .434 -(After the stack has been modi\214ed, if the)144 504 R F1<ad6e>2.934 E -F0 .434(option w)2.934 F .435(as not supplied,)-.1 F F1(pushd)2.935 E F0 -.435(uses the)2.935 F F1(cd)2.935 E F0 -.2(bu)2.935 G .435(iltin to).2 F -(change to the directory at the top of the stack.)144 516 Q(If the)5 E -F1(cd)2.5 E F0 -.1(fa)2.5 G(ils,).1 E F1(pushd)2.5 E F0 -(returns a non-zero v)2.5 E(alue.)-.25 E 1.78(Otherwise, if no ar)144 -532.8 R 1.78(guments are supplied,)-.18 F F1(pushd)4.28 E F0 1.78 -(returns 0 unless the directory stack is empty)4.28 F(.)-.65 E .092 -(When rotating the directory stack,)144 544.8 R F1(pushd)2.592 E F0 .093 -(returns 0 unless the directory stack is empty or a non-e)2.592 F(x-) --.15 E(istent directory stack element is speci\214ed.)144 556.8 Q 1.278 -(If the)144 573.6 R F1(pushd)3.778 E F0 1.278 -(command is successful, bash runs)3.778 F F1(dirs)3.778 E F0 1.277 -(to sho)3.777 F 3.777(wt)-.25 G 1.277 -(he \214nal contents of the directory)-3.777 F(stack.)144 585.6 Q F1 -(pwd)108 602.4 Q F0([)2.5 E F1(\255LP)A F0(])A .844 -(Print the absolute pathname of the current w)144 614.4 R .845 -(orking directory)-.1 F 5.845(.T)-.65 G .845 -(he pathname printed contains no)-5.845 F .182(symbolic links if the)144 -626.4 R F1<ad50>2.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 .181(iltin command is).2 F 3.263 -(enabled. If)144 638.4 R(the)3.263 E F1<ad4c>3.263 E F0 .763 -(option is used, the pathname printed may contain symbolic links.)3.263 -F .764(The return)5.764 F .405(status is 0 unless an error occurs while\ - reading the name of the current directory or an in)144 650.4 R -.25(va) --.4 G .405(lid op-).25 F(tion is supplied.)144 662.4 Q F1 -.18(re)108 -679.2 S(ad).18 E F0([)3.816 E F1(\255ers)A F0 3.816(][)C F1<ad61>-3.816 -E F2(aname)3.816 E F0 3.816(][)C F1<ad64>-3.816 E F2(delim)3.816 E F0 -3.816(][)C F1<ad69>-3.816 E F2(te)3.816 E(xt)-.2 E F0 3.816(][)C F1 -<ad6e>-3.816 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.817(][)C F1<ad4e> --3.817 E F2(nc)3.817 E(har)-.15 E(s)-.1 E F0 3.817(][)C F1<ad70>-3.817 E -F2(pr)3.817 E(ompt)-.45 E F0 3.817(][)C F1<ad74>-3.817 E F2(timeout) -3.817 E F0 3.817(][)C F1<ad75>-3.817 E F2(fd)3.817 E F0(])A([)108 691.2 -Q F2(name)A F0(...])2.5 E .516(One line is read from the standard input\ -, or from the \214le descriptor)144 703.2 R F2(fd)3.016 E F0 .516 -(supplied as an ar)3.016 F .516(gument to)-.18 F(the)144 715.2 Q F1 -<ad75>2.753 E F0 .253(option, split into w)2.753 F .253 -(ords as described in)-.1 F F2(bash\(1\))2.754 E F0(under)2.754 E F1 --.75(Wo)2.754 G .254(rd Splitting).75 F F0 2.754(,a)C .254 -(nd the \214rst w)-2.754 F .254(ord is)-.1 F 1.425 -(assigned to the \214rst)144 727.2 R F2(name)4.285 E F0 3.925(,t).18 G -1.425(he second w)-3.925 F 1.425(ord to the second)-.1 F F2(name)4.285 E -F0 3.925(,a).18 G 1.425(nd so on.)-3.925 F 1.425(If there are more)6.425 -F(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E -(13)185.545 E 0 Cg EP +-.25 F .542(as appropriate, had been supplied.)144 590.4 R .541 +(The return v)5.541 F .541(alue is zero on success, non-zero if an in) +-.25 F -.25(va)-.4 G .541(lid op-).25 F +(tion is supplied or a write or assignment error occurs.)144 602.4 Q F2 +(pushd)108 619.2 Q F1([)2.5 E F2<ad6e>A F1 2.5(][)C(+)-2.5 E F0(n)A F1 +2.5(][)C<ad>-2.5 E F0(n)A F1(])A F2(pushd)108 631.2 Q F1([)2.5 E F2 +<ad6e>A F1 2.5(][)C F0(dir)-2.5 E F1(])A .639(Adds a directory to the t\ +op of the directory stack, or rotates the stack, making the ne)144 643.2 +R 3.14(wt)-.25 G .64(op of the)-3.14 F .089(stack the current w)144 +655.2 R .089(orking directory)-.1 F 5.089(.W)-.65 G .089(ith no ar) +-5.489 F(guments,)-.18 E F2(pushd)2.589 E F1 -.15(ex)2.588 G .088 +(changes the top tw).15 F 2.588(oe)-.1 G .088(lements of)-2.588 F +(the directory stack.)144 667.2 Q(Ar)5 E(guments, if supplied, ha)-.18 E +.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F2<ad6e>144 +679.2 Q F1 1.811(Suppresses the normal change of directory when rotatin\ +g or adding directories to the)180 679.2 R +(stack, so that only the stack is manipulated.)180 691.2 Q F2(+)144 +703.2 Q F0(n)A F1 1.268(Rotates the stack so that the)180 703.2 R F0(n) +3.768 E F1 1.267(th directory \(counting from the left of the list sho)B +1.267(wn by)-.25 F F2(dirs)180 715.2 Q F1 2.5(,s)C +(tarting with zero\) is at the top.)-2.5 E(GNU Bash 5.2)72 768 Q +(2023 January 27)141.79 E(13)190.95 E 0 Cg EP %%Page: 14 14 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E -.1(wo)144 84 S 1.112 -(rds than names, the remaining w).1 F 1.112(ords and their interv)-.1 F -1.112(ening delimiters are assigned to the last)-.15 F/F1 10 -/Times-Italic@0 SF(name)144.36 96 Q F0 5.7(.I).18 G 3.2(ft)-5.7 G .7 -(here are fe)-3.2 F .7(wer w)-.25 F .7 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF<ad>144 84 Q F0(n)A F1 .92 +(Rotates the stack so that the)180 84 R F0(n)3.42 E F1 .92 +(th directory \(counting from the right of the list sho)B .92(wn by)-.25 +F F2(dirs)180 96 Q F1 2.5(,s)C(tarting with zero\) is at the top.)-2.5 E +F0(dir)144.35 108 Q F1(Adds)180 108 Q F0(dir)2.85 E F1 +(to the directory stack at the top)3.23 E .435 +(After the stack has been modi\214ed, if the)144 124.8 R F2<ad6e>2.935 E +F1 .434(option w)2.934 F .434(as not supplied,)-.1 F F2(pushd)2.934 E F1 +.434(uses the)2.934 F F2(cd)2.934 E F1 -.2(bu)2.934 G .434(iltin to).2 F +(change to the directory at the top of the stack.)144 136.8 Q(If the)5 E +F2(cd)2.5 E F1 -.1(fa)2.5 G(ils,).1 E F2(pushd)2.5 E F1 +(returns a non-zero v)2.5 E(alue.)-.25 E 1.78(Otherwise, if no ar)144 +153.6 R 1.78(guments are supplied,)-.18 F F2(pushd)4.28 E F1 1.78 +(returns 0 unless the directory stack is empty)4.28 F(.)-.65 E .093 +(When rotating the directory stack,)144 165.6 R F2(pushd)2.593 E F1 .092 +(returns 0 unless the directory stack is empty or a non-e)2.593 F(x-) +-.15 E(istent directory stack element is speci\214ed.)144 177.6 Q 1.277 +(If the)144 194.4 R F2(pushd)3.777 E F1 1.277 +(command is successful, bash runs)3.777 F F2(dirs)3.777 E F1 1.278 +(to sho)3.778 F 3.778(wt)-.25 G 1.278 +(he \214nal contents of the directory)-3.778 F(stack.)144 206.4 Q F2 +(pwd)108 223.2 Q F1([)2.5 E F2(\255LP)A F1(])A .845 +(Print the absolute pathname of the current w)144 235.2 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 +247.2 R F2<ad50>2.681 E F1 .181(option is supplied or the)2.681 F F2 +.181(\255o ph)2.681 F(ysical)-.15 E F1 .181(option to the)2.681 F F2 +(set)2.681 E F1 -.2(bu)2.681 G .182(iltin command is).2 F 3.264 +(enabled. If)144 259.2 R(the)3.264 E F2<ad4c>3.264 E F1 .763 +(option is used, the pathname printed may contain symbolic links.)3.264 +F .763(The return)5.763 F .405(status is 0 unless an error occurs while\ + reading the name of the current directory or an in)144 271.2 R -.25(va) +-.4 G .405(lid op-).25 F(tion is supplied.)144 283.2 Q F2 -.18(re)108 +300 S(ad).18 E F1([)2.5 E F2(\255Eers)A F1 2.5(][)C F2<ad61>-2.5 E F0 +(aname)2.5 E F1 2.5(][)C F2<ad64>-2.5 E F0(delim)2.5 E F1 2.5(][)C F2 +<ad69>-2.5 E F0(te)2.5 E(xt)-.2 E F1 2.5(][)C F2<ad6e>-2.5 E F0(nc)2.5 E +(har)-.15 E(s)-.1 E F1 2.5(][)C F2<ad4e>-2.5 E F0(nc)2.5 E(har)-.15 E(s) +-.1 E F1 2.5(][)C F2<ad70>-2.5 E F0(pr)2.5 E(ompt)-.45 E F1 2.5(][)C F2 +<ad74>-2.5 E F0(timeout)2.5 E F1 2.5(][)C F2<ad75>-2.5 E F0(fd)2.5 E F1 +(])A([)108 312 Q F0(name)A F1 1.666(...)2.5 G(])-1.666 E .516(One line \ +is read from the standard input, or from the \214le descriptor)144 324 R +F0(fd)3.016 E F1 .516(supplied as an ar)3.016 F .516(gument to)-.18 F +(the)144 336 Q F2<ad75>2.6 E F1 .1(option, split into w)2.6 F .1 +(ords as described in)-.1 F F0(bash)2.601 E F1 .101(\(1\) under)2.601 F +F2 -.75(Wo)2.601 G .101(rd Splitting).75 F F1 2.601(,a)C .101 +(nd the \214rst w)-2.601 F .101(ord is)-.1 F 1.425 +(assigned to the \214rst)144 348 R F0(name)4.285 E F1 3.925(,t).18 G +1.425(he second w)-3.925 F 1.425(ord to the second)-.1 F F0(name)4.285 E +F1 3.925(,a).18 G 1.425(nd so on.)-3.925 F 1.425(If there are more)6.425 +F -.1(wo)144 360 S 1.112(rds than names, the remaining w).1 F 1.112 +(ords and their interv)-.1 F 1.112 +(ening delimiters are assigned to the last)-.15 F F0(name)144.36 372 Q +F1 5.7(.I).18 G 3.2(ft)-5.7 G .7(here are fe)-3.2 F .7(wer w)-.25 F .7 (ords read from the input stream than names, the remaining names are)-.1 -F .531(assigned empty v)144 108 R 3.031(alues. The)-.25 F .531 -(characters in)3.031 F/F2 9/Times-Bold@0 SF(IFS)3.031 E F0 .532 +F .531(assigned empty v)144 384 R 3.031(alues. The)-.25 F .531 +(characters in)3.031 F/F3 9/Times-Bold@0 SF(IFS)3.031 E F1 .532 (are used to split the line into w)2.781 F .532(ords using the same)-.1 -F 1.326(rules the shell uses for e)144 120 R 1.325 -(xpansion \(described in)-.15 F F1(bash\(1\))3.825 E F0(under)3.825 E/F3 -10/Times-Bold@0 SF -.75(Wo)3.825 G 1.325(rd Splitting).75 F F0 3.825 -(\). The)B(backslash)3.825 E .738(character \()144 132 R F3(\\)A F0 -3.238(\)m)C .739(ay be used to remo)-3.238 F 1.039 -.15(ve a)-.15 H -1.039 -.15(ny s).15 H .739(pecial meaning for the ne).15 F .739 +F 1.052(rules the shell uses for e)144 396 R 1.052 +(xpansion \(described in)-.15 F F0(bash)3.552 E F1 1.052(\(1\) under) +3.552 F F2 -.75(Wo)3.552 G 1.052(rd Splitting).75 F F1 3.552(\). The)B +(backslash)3.552 E .738(character \()144 408 R F2(\\)A F1 3.238(\)m)C +.739(ay be used to remo)-3.238 F 1.039 -.15(ve a)-.15 H 1.039 -.15(ny s) +.15 H .739(pecial meaning for the ne).15 F .739 (xt character read and for line)-.15 F 2.5(continuation. Options,)144 -144 R(if supplied, ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F3<ad61>144 156 Q F1(aname)2.5 E F0 1.026(The w) -180 168 R 1.026(ords are assigned to sequential indices of the array v) --.1 F(ariable)-.25 E F1(aname)3.855 E F0 3.525(,s).18 G 1.025 -(tarting at 0.)-3.525 F F1(aname)180.33 180 Q F0(is unset before an)2.68 +420 R(if supplied, ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F2<ad61>144 432 Q F0(aname)2.5 E F1 1.026(The w) +180 444 R 1.026(ords are assigned to sequential indices of the array v) +-.1 F(ariable)-.25 E F0(aname)3.855 E F1 3.525(,s).18 G 1.025 +(tarting at 0.)-3.525 F F0(aname)180.33 456 Q F1(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 -F1(name)2.5 E F0(ar)2.5 E(guments are ignored.)-.18 E F3<ad64>144 192 Q -F1(delim)2.5 E F0 .28(The \214rst character of)180 204 R F1(delim)2.78 E -F0 .281(is used to terminate the input line, rather than ne)2.78 F 2.781 -(wline. If)-.25 F F1(de-)2.781 E(lim)180 216 Q F0(is the empty string,) -2.5 E F3 -.18(re)2.5 G(ad).18 E F0 -(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F3 -<ad65>144 228 Q F0 .629 -(If the standard input is coming from a terminal,)180 228 R F3 -.18(re) -3.128 G(adline).18 E F0(\(see)3.128 E F2(READLINE)3.128 E F0(in)2.878 E -F1(bash\(1\))3.128 E F0 3.128(\)i)C(s)-3.128 E .048 -(used to obtain the line.)180 240 R .049 -(Readline uses the current \(or def)5.049 F .049 -(ault, if line editing w)-.1 F .049(as not pre)-.1 F(vi-)-.25 E -(ously acti)180 252 Q -.15(ve)-.25 G 2.5(\)e).15 G(diting settings, b) +F0(name)2.5 E F1(ar)2.5 E(guments are ignored.)-.18 E F2<ad64>144 468 Q +F0(delim)2.5 E F1 .28(The \214rst character of)180 480 R F0(delim)2.78 E +F1 .281(is used to terminate the input line, rather than ne)2.78 F 2.781 +(wline. If)-.25 F F0(de-)2.781 E(lim)180 492 Q F1(is the empty string,) +2.5 E F2 -.18(re)2.5 G(ad).18 E F1 +(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F2 +<ad65>144 504 Q F1 .919 +(If the standard input is coming from a terminal,)180 504 R F2 -.18(re) +3.419 G(ad).18 E F1(uses)3.419 E F2 -.18(re)3.419 G(adline).18 E F1 +(\(see)3.419 E F3(READLINE)3.419 E F1(in)3.169 E F0(bash)180 516 Q F1 +.757(\(1\)\) to obtain the line.)B .757 +(Readline uses the current \(or def)5.757 F .758 +(ault, if line editing w)-.1 F .758(as not)-.1 F(pre)180 528 Q +(viously acti)-.25 E -.15(ve)-.25 G 2.5(\)e).15 G(diting settings, b) -2.5 E(ut uses readline')-.2 E 2.5(sd)-.55 G(ef)-2.5 E -(ault \214lename completion.)-.1 E F3<ad69>144 264 Q F1(te)2.5 E(xt)-.2 -E F0(If)180 264 Q F3 -.18(re)2.716 G(adline).18 E F0 .216 -(is being used to read the line,)2.716 F F1(te)2.716 E(xt)-.2 E F0 .216 -(is placed into the editing b)2.716 F(uf)-.2 E .215(fer before edit-) --.25 F(ing be)180 276 Q(gins.)-.15 E F3<ad6e>144 288 Q F1(nc)2.5 E(har) --.15 E(s)-.1 E F3 -.18(re)180 300 S(ad).18 E F0 .322 -(returns after reading)2.822 F F1(nc)2.823 E(har)-.15 E(s)-.1 E F0 .323 +(ault \214lename completion.)-.1 E F2<ad45>144 540 Q F1 .919 +(If the standard input is coming from a terminal,)180 540 R F2 -.18(re) +3.419 G(ad).18 E F1(uses)3.419 E F2 -.18(re)3.419 G(adline).18 E F1 +(\(see)3.419 E F3(READLINE)3.419 E F1(in)3.169 E F0(bash)180 552 Q F1 +.757(\(1\)\) to obtain the line.)B .757 +(Readline uses the current \(or def)5.757 F .758 +(ault, if line editing w)-.1 F .758(as not)-.1 F(pre)180 564 Q .042 +(viously acti)-.25 F -.15(ve)-.25 G 2.542(\)e).15 G .042 +(diting settings, b)-2.542 F .042(ut uses bash')-.2 F 2.542(sd)-.55 G +(ef)-2.542 E .042(ault completion, including program-)-.1 F +(mable completion.)180 576 Q F2<ad69>144 588 Q F0(te)2.5 E(xt)-.2 E F1 +(If)180 588 Q F2 -.18(re)2.715 G(adline).18 E F1 .216 +(is being used to read the line,)2.715 F F0(te)2.716 E(xt)-.2 E F1 .216 +(is placed into the editing b)2.716 F(uf)-.2 E .216(fer before edit-) +-.25 F(ing be)180 600 Q(gins.)-.15 E F2<ad6e>144 612 Q F0(nc)2.5 E(har) +-.15 E(s)-.1 E F2 -.18(re)180 624 S(ad).18 E F1 .323 +(returns after reading)2.823 F F0(nc)2.823 E(har)-.15 E(s)-.1 E F1 .323 (characters rather than w)2.823 F .323 -(aiting for a complete line of in-)-.1 F(put, b)180 312 Q -(ut honors a delimiter if fe)-.2 E(wer than)-.25 E F1(nc)2.5 E(har)-.15 -E(s)-.1 E F0(characters are read before the delimiter)2.5 E(.)-.55 E F3 -<ad4e>144 324 Q F1(nc)2.5 E(har)-.15 E(s)-.1 E F3 -.18(re)180 336 S(ad) -.18 E F0 1.269(returns after reading e)3.77 F(xactly)-.15 E F1(nc)3.769 -E(har)-.15 E(s)-.1 E F0 1.269(characters rather than w)3.769 F 1.269 -(aiting for a complete)-.1 F .274 -(line of input, unless EOF is encountered or)180 348 R F3 -.18(re)2.775 -G(ad).18 E F0 .275(times out.)2.775 F .275(Delimiter characters encoun-) -5.275 F 1.003 -(tered in the input are not treated specially and do not cause)180 360 R -F3 -.18(re)3.502 G(ad).18 E F0 1.002(to return until)3.502 F F1(nc)3.502 -E(har)-.15 E(s)-.1 E F0 .608(characters are read.)180 372 R .608 -(The result is not split on the characters in)5.608 F F3(IFS)3.108 E F0 -3.108(;t)C .609(he intent is that the)-3.108 F -.25(va)180 384 S .67 +(aiting for a complete line of in-)-.1 F(put, b)180 636 Q +(ut honors a delimiter if fe)-.2 E(wer than)-.25 E F0(nc)2.5 E(har)-.15 +E(s)-.1 E F1(characters are read before the delimiter)2.5 E(.)-.55 E F2 +<ad4e>144 648 Q F0(nc)2.5 E(har)-.15 E(s)-.1 E F2 -.18(re)180 660 S(ad) +.18 E F1 1.269(returns after reading e)3.769 F(xactly)-.15 E F0(nc)3.769 +E(har)-.15 E(s)-.1 E F1 1.269(characters rather than w)3.769 F 1.27 +(aiting for a complete)-.1 F .275 +(line of input, unless EOF is encountered or)180 672 R F2 -.18(re)2.775 +G(ad).18 E F1 .274(times out.)2.774 F .274(Delimiter characters encoun-) +5.274 F 1.002 +(tered in the input are not treated specially and do not cause)180 684 R +F2 -.18(re)3.503 G(ad).18 E F1 1.003(to return until)3.503 F F0(nc)3.503 +E(har)-.15 E(s)-.1 E F1 .609(characters are read.)180 696 R .608 +(The result is not split on the characters in)5.609 F F2(IFS)3.108 E F1 +3.108(;t)C .608(he intent is that the)-3.108 F -.25(va)180 708 S .669 (riable is assigned e).25 F .669 -(xactly the characters read \(with the e)-.15 F .669 -(xception of backslash; see the)-.15 F F3<ad72>180 396 Q F0(option belo) -2.5 E(w\).)-.25 E F3<ad70>144 408 Q F1(pr)2.5 E(ompt)-.45 E F0(Display) -180 420 Q F1(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 432 Q 2.5(yi)-.15 G 2.5 +(xactly the characters read \(with the e)-.15 F .67 +(xception of backslash; see the)-.15 F F2<ad72>180 720 Q F1(option belo) +2.5 E(w\).)-.25 E(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E(14) +190.95 E 0 Cg EP +%%Page: 15 15 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF<ad70>144 84 Q F0(pr)2.5 E(ompt)-.45 E F1(Display)180 96 +Q F0(pr)3.661 E(ompt)-.45 E F1 1.161(on standard error)3.661 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 108 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 F3 -<ad72>144 444 Q F0 .544(Backslash does not act as an escape character) -180 444 R 5.543(.T)-.55 G .543(he backslash is considered to be part of) --5.543 F .492(the line.)180 456 R .492(In particular)5.492 F 2.992(,ab) --.4 G(ackslash-ne)-2.992 E .493 +(prompt is displayed only if input is coming from a terminal.)2.5 E F2 +<ad72>144 120 Q F1 .543(Backslash does not act as an escape character) +180 120 R 5.543(.T)-.55 G .544(he backslash is considered to be part of) +-5.543 F .493(the line.)180 132 R .493(In particular)5.493 F 2.993(,ab) +-.4 G(ackslash-ne)-2.993 E .493 (wline pair may not then be used as a line continua-)-.25 F(tion.)180 -468 Q F3<ad73>144 480 Q F0(Silent mode.)180 480 Q -(If input is coming from a terminal, characters are not echoed.)5 E F3 -<ad74>144 492 Q F1(timeout)2.5 E F0(Cause)180 504 Q F3 -.18(re)2.929 G -(ad).18 E F0 .428(to time out and return f)2.929 F .428 -(ailure if a complete line of input \(or a speci\214ed num-)-.1 F .56 -(ber of characters\) is not read within)180 516 R F1(timeout)3.061 E F0 -(seconds.)3.061 E F1(timeout)5.561 E F0 .561(may be a decimal number) -3.061 F(with a fractional portion follo)180 528 Q +144 Q F2<ad73>144 156 Q F1(Silent mode.)180 156 Q +(If input is coming from a terminal, characters are not echoed.)5 E F2 +<ad74>144 168 Q F0(timeout)2.5 E F1(Cause)180 180 Q F2 -.18(re)2.928 G +(ad).18 E F1 .428(to time out and return f)2.928 F .428 +(ailure if a complete line of input \(or a speci\214ed num-)-.1 F .561 +(ber of characters\) is not read within)180 192 R F0(timeout)3.061 E F1 +(seconds.)3.061 E F0(timeout)5.561 E F1 .56(may be a decimal number) +3.061 F(with a fractional portion follo)180 204 Q (wing the decimal point.)-.25 E(This option is only ef)5 E(fecti)-.25 E -.3 -.15(ve i)-.25 H(f).15 E F3 -.18(re)2.5 G(ad).18 E F0 .506(is readin\ +.3 -.15(ve i)-.25 H(f).15 E F2 -.18(re)2.5 G(ad).18 E F1 .506(is readin\ g input from a terminal, pipe, or other special \214le; it has no ef)180 -540 R .506(fect when reading)-.25 F .59(from re)180 552 R .59 -(gular \214les.)-.15 F(If)5.59 E F3 -.18(re)3.09 G(ad).18 E F0 .589 -(times out,)3.09 F F3 -.18(re)3.089 G(ad).18 E F0(sa)3.089 E -.15(ve)-.2 +216 R .506(fect when reading)-.25 F .59(from re)180 228 R .59 +(gular \214les.)-.15 F(If)5.59 E F2 -.18(re)3.09 G(ad).18 E F1 .589 +(times out,)3.09 F F2 -.18(re)3.089 G(ad).18 E F1(sa)3.089 E -.15(ve)-.2 G 3.089(sa).15 G .889 -.15(ny p)-3.089 H .589 -(artial input read into the speci\214ed).15 F -.25(va)180 564 S(riable) -.25 E F1(name)2.77 E F0 5.27(.I)C(f)-5.27 E F1(timeout)2.77 E F0 .27 -(is 0,)2.77 F F3 -.18(re)2.77 G(ad).18 E F0 .27(returns immediately)2.77 +(artial input read into the speci\214ed).15 F -.25(va)180 240 S(riable) +.25 E F0(name)2.77 E F1 5.27(.I)C(f)-5.27 E F0(timeout)2.77 E F1 .27 +(is 0,)2.77 F F2 -.18(re)2.77 G(ad).18 E F1 .27(returns immediately)2.77 F 2.77(,w)-.65 G .27(ithout trying to read an)-2.77 F 2.77(yd)-.15 G -(ata.)-2.77 E .228(The e)180 576 R .228(xit status is 0 if input is a) +(ata.)-2.77 E .228(The e)180 252 R .228(xit status is 0 if input is a) -.15 F -.25(va)-.2 G .228(ilable on the speci\214ed \214le descriptor) .25 F 2.728(,o)-.4 G 2.727(rt)-2.728 G .227(he read will re-)-2.727 F -1.224(turn EOF)180 588 R 3.724(,n)-.8 G 1.224(on-zero otherwise.)-3.724 +1.224(turn EOF)180 264 R 3.724(,n)-.8 G 1.224(on-zero otherwise.)-3.724 F 1.224(The e)6.224 F 1.225 (xit status is greater than 128 if the timeout is e)-.15 F(x-)-.15 E -(ceeded.)180 600 Q F3<ad75>144 612 Q F1(fd)2.5 E F0 -(Read input from \214le descriptor)180 612 Q F1(fd)2.5 E F0(.)A .522 -(If no)144 628.8 R F1(names)3.382 E F0 .522 +(ceeded.)180 276 Q F2<ad75>144 288 Q F0(fd)2.5 E F1 +(Read input from \214le descriptor)180 288 Q F0(fd)2.5 E F1(.)A +(Other than the case where)144 304.8 Q F0(delim)2.5 E F1 +(is the empty string,)2.5 E F2 -.18(re)2.5 G(ad).18 E F1(ignores an)2.5 +E 2.5(yN)-.15 G(UL characters in the input.)-2.5 E .522(If no)144 321.6 +R F0(names)3.382 E F1 .522 (are supplied, the line read, without the ending delimiter b)3.292 F .522(ut otherwise unmodi\214ed, is)-.2 F 1.186(assigned to the v)144 -640.8 R(ariable)-.25 E F2(REPL)3.686 E(Y)-.828 E/F4 9/Times-Roman@0 SF -(.)A F0 1.186(The e)5.686 F 1.186 -(xit status is zero, unless end-of-\214le is encountered,)-.15 F F3 -.18 -(re)3.687 G(ad).18 E F0 .961 +333.6 R(ariable)-.25 E/F3 9/Times-Bold@0 SF(REPL)3.686 E(Y)-.828 E/F4 9 +/Times-Roman@0 SF(.)A F1 1.186(The e)5.686 F 1.186 +(xit status is zero, unless end-of-\214le is encountered,)-.15 F F2 -.18 +(re)3.687 G(ad).18 E F1 .961 (times out \(in which case the status is greater than 128\), a v)144 -652.8 R .96(ariable assignment error \(such as as-)-.25 F .706 -(signing to a readonly v)144 664.8 R .706(ariable\) occurs, or an in) +345.6 R .96(ariable assignment error \(such as as-)-.25 F .706 +(signing to a readonly v)144 357.6 R .706(ariable\) occurs, or an in) -.25 F -.25(va)-.4 G .706(lid \214le descriptor is supplied as the ar) -.25 F .707(gument to)-.18 F F3<ad75>144 676.8 Q F0(.)A F3 -.18(re)108 -693.6 S(adonly).18 E F0([)2.5 E F3(\255aAf)A F0 2.5(][)C F3<ad70>-2.5 E -F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(wor)A(d)-.37 E F0 2.5(].)C(..]) --2.5 E .77(The gi)144 705.6 R -.15(ve)-.25 G(n).15 E F1(names)3.27 E F0 -.77(are mark)3.27 F .77(ed readonly; the v)-.1 F .77(alues of these)-.25 -F F1(names)3.63 E F0 .77(may not be changed by subse-)3.54 F 1.096 -(quent assignment.)144 717.6 R 1.096(If the)6.096 F F3<ad66>3.596 E F0 -1.097(option is supplied, the functions corresponding to the)3.596 F F1 -(names)3.597 E F0 1.097(are so)3.597 F(mark)144 729.6 Q 4.903(ed. The) --.1 F F3<ad61>4.903 E F0 2.403(option restricts the v)4.903 F 2.403 -(ariables to inde)-.25 F -.15(xe)-.15 G 4.903(da).15 G 2.403(rrays; the) --4.903 F F3<ad41>4.903 E F0 2.402(option restricts the)4.903 F -(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E -(14)185.545 E 0 Cg EP -%%Page: 15 15 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E -.25(va)144 84 S .424(riables to associati) -.25 F .724 -.15(ve a)-.25 H 2.924(rrays. If).15 F .425 -(both options are supplied,)2.924 F/F1 10/Times-Bold@0 SF<ad41>2.925 E -F0(tak)2.925 E .425(es precedence.)-.1 F .425(If no)5.425 F/F2 10 -/Times-Italic@0 SF(name)3.285 E F0(ar)3.105 E(-)-.2 E 1.275 -(guments are gi)144 96 R -.15(ve)-.25 G 1.275(n, or if the).15 F F1 -<ad70>3.775 E F0 1.275 -(option is supplied, a list of all readonly names is printed.)3.775 F -(The)6.275 E .559(other options may be used to restrict the output to a\ - subset of the set of readonly names.)144 108 R(The)5.559 E F1<ad70> -3.059 E F0 .201(option causes output to be displayed in a format that m\ -ay be reused as input.)144 120 R .2(If a v)5.2 F .2(ariable name is)-.25 -F(follo)144 132 Q .133(wed by =)-.25 F F2(wor)A(d)-.37 E F0 2.633(,t)C -.133(he v)-2.633 F .133(alue of the v)-.25 F .133(ariable is set to)-.25 -F F2(wor)2.633 E(d)-.37 E F0 5.133(.T)C .133 -(he return status is 0 unless an in)-5.133 F -.25(va)-.4 G(lid).25 E .26 -(option is encountered, one of the)144 144 R F2(names)3.12 E F0 .26 -(is not a v)3.03 F .26(alid shell v)-.25 F .26(ariable name, or)-.25 F -F1<ad66>2.76 E F0 .26(is supplied with a)2.76 F F2(name)144.36 156 Q F0 -(that is not a function.)2.68 E F1 -.18(re)108 172.8 S(tur).18 E(n)-.15 -E F0([)2.5 E F2(n)A F0(])A .02(Causes a function to stop e)144 184.8 R +.25 F .707(gument to)-.18 F F2<ad75>144 369.6 Q F1(.)A F2 -.18(re)108 +386.4 S(adonly).18 E F1([)2.5 E F2(\255aAf)A F1 2.5(][)C F2<ad70>-2.5 E +F1 2.5(][)C F0(name)-2.5 E F1([=)A F0(wor)A(d)-.37 E F1 2.5(].)C 1.666 +(..)-.834 G(])-1.666 E .77(The gi)144 398.4 R -.15(ve)-.25 G(n).15 E F0 +(names)3.27 E F1 .77(are mark)3.27 F .77(ed readonly; the v)-.1 F .77 +(alues of these)-.25 F F0(names)3.63 E F1 .77 +(may not be changed by subse-)3.54 F 1.096(quent assignment.)144 410.4 R +1.096(If the)6.096 F F2<ad66>3.596 E F1 1.097 +(option is supplied, the functions corresponding to the)3.596 F F0 +(names)3.597 E F1 1.097(are so)3.597 F(mark)144 422.4 Q 3.334(ed. The) +-.1 F F2<ad61>3.334 E F1 .834(option restricts the v)3.334 F .834 +(ariables to inde)-.25 F -.15(xe)-.15 G 3.334(da).15 G .834(rrays; the) +-3.334 F F2<ad41>3.334 E F1 .834(option restricts the v)3.334 F(ari-) +-.25 E .776(ables to associati)144 434.4 R 1.076 -.15(ve a)-.25 H 3.276 +(rrays. If).15 F .777(both options are supplied,)3.276 F F2<ad41>3.277 E +F1(tak)3.277 E .777(es precedence.)-.1 F .777(If no)5.777 F F0(name) +3.637 E F1(ar)3.457 E(gu-)-.18 E .522(ments are gi)144 446.4 R -.15(ve) +-.25 G .521(n, or if the).15 F F2<ad70>3.021 E F1 .521 +(option is supplied, a list of all readonly names is printed.)3.021 F +.521(The other)5.521 F .295(options may be used to restrict the output \ +to a subset of the set of readonly names.)144 458.4 R(The)5.296 E F2 +<ad70>2.796 E F1(option)2.796 E .786 +(causes output to be displayed in a format that may be reused as input.) +144 470.4 R .786(If a v)5.786 F .785(ariable name is fol-)-.25 F(lo)144 +482.4 Q .717(wed by =)-.25 F F0(wor)A(d)-.37 E F1 3.218(,t)C .718(he v) +-3.218 F .718(alue of the v)-.25 F .718(ariable is set to)-.25 F F0(wor) +3.218 E(d)-.37 E F1 5.718(.T)C .718(he return status is 0 unless an in) +-5.718 F -.25(va)-.4 G(lid).25 E .26(option is encountered, one of the) +144 494.4 R F0(names)3.12 E F1 .26(is not a v)3.03 F .26(alid shell v) +-.25 F .26(ariable name, or)-.25 F F2<ad66>2.76 E F1 .26 +(is supplied with a)2.76 F F0(name)144.36 506.4 Q F1 +(that is not a function.)2.68 E F2 -.18(re)108 523.2 S(tur).18 E(n)-.15 +E F1([)2.5 E F0(n)A F1(])A .02(Causes a function to stop e)144 535.2 R -.15(xe)-.15 G .02(cuting and return the v).15 F .021 -(alue speci\214ed by)-.25 F F2(n)2.881 E F0 .021(to its caller)2.761 F -5.021(.I)-.55 G(f)-5.021 E F2(n)2.881 E F0 .021(is omitted,)2.761 F .597 -(the return status is that of the last command e)144 196.8 R -.15(xe) +(alue speci\214ed by)-.25 F F0(n)2.881 E F1 .021(to its caller)2.761 F +5.021(.I)-.55 G(f)-5.021 E F0(n)2.881 E F1 .021(is omitted,)2.761 F .597 +(the return status is that of the last command e)144 547.2 R -.15(xe) -.15 G .596(cuted in the function body).15 F 5.596(.I)-.65 G(f)-5.596 E -F1 -.18(re)3.096 G(tur).18 E(n)-.15 E F0 .596(is e)3.096 F -.15(xe)-.15 -G(cuted).15 E .267(by a trap handler)144 208.8 R 2.767(,t)-.4 G .267 +F2 -.18(re)3.096 G(tur).18 E(n)-.15 E F1 .596(is e)3.096 F -.15(xe)-.15 +G(cuted).15 E .267(by a trap handler)144 559.2 R 2.767(,t)-.4 G .267 (he last command used to determine the status is the last command e) -2.767 F -.15(xe)-.15 G .268(cuted be-).15 F .02(fore the trap handler) -144 220.8 R 5.02(.I)-.55 G(f)-5.02 E F1 -.18(re)2.52 G(tur).18 E(n)-.15 -E F0 .02(is e)2.52 F -.15(xe)-.15 G .02(cuted during a).15 F F1(DEB)2.52 -E(UG)-.1 E F0 .02(trap, the last command used to deter)2.52 F(-)-.2 E -.885(mine the status is the last command e)144 232.8 R -.15(xe)-.15 G -.886(cuted by the trap handler before).15 F F1 -.18(re)3.386 G(tur).18 E -(n)-.15 E F0 -.1(wa)3.386 G 3.386(si).1 G -1.9 -.4(nv o)-3.386 H -.1(ke) -.4 G 3.386(d. If).1 F F1 -.18(re)144 244.8 S(tur).18 E(n)-.15 E F0 .628 +144 571.2 R 5.02(.I)-.55 G(f)-5.02 E F2 -.18(re)2.52 G(tur).18 E(n)-.15 +E F1 .02(is e)2.52 F -.15(xe)-.15 G .02(cuted during a).15 F F2(DEB)2.52 +E(UG)-.1 E F1 .02(trap, the last command used to deter)2.52 F(-)-.2 E +.885(mine the status is the last command e)144 583.2 R -.15(xe)-.15 G +.886(cuted by the trap handler before).15 F F2 -.18(re)3.386 G(tur).18 E +(n)-.15 E F1 -.1(wa)3.386 G 3.386(si).1 G -1.9 -.4(nv o)-3.386 H -.1(ke) +.4 G 3.386(d. If).1 F F2 -.18(re)144 595.2 S(tur).18 E(n)-.15 E F1 .628 (is used outside a function, b)3.128 F .628(ut during e)-.2 F -.15(xe) --.15 G .628(cution of a script by the).15 F F1(.)3.127 E F0(\()5.627 E -F1(sour)A(ce)-.18 E F0 3.127(\)c)C .627(ommand, it)-3.127 F .588 -(causes the shell to stop e)144 256.8 R -.15(xe)-.15 G .588 -(cuting that script and return either).15 F F2(n)3.448 E F0 .589 +-.15 G .628(cution of a script by the).15 F F2(.)3.127 E F1(\()5.627 E +F2(sour)A(ce)-.18 E F1 3.127(\)c)C .627(ommand, it)-3.127 F .588 +(causes the shell to stop e)144 607.2 R -.15(xe)-.15 G .588 +(cuting that script and return either).15 F F0(n)3.448 E F1 .589 (or the e)3.329 F .589(xit status of the last com-)-.15 F .326(mand e) -144 268.8 R -.15(xe)-.15 G .326(cuted within the script as the e).15 F -.326(xit status of the script.)-.15 F(If)5.326 E F2(n)2.826 E F0 .325 +144 619.2 R -.15(xe)-.15 G .326(cuted within the script as the e).15 F +.326(xit status of the script.)-.15 F(If)5.326 E F0(n)2.826 E F1 .325 (is supplied, the return v)2.826 F .325(alue is)-.25 F .444 -(its least signi\214cant 8 bits.)144 280.8 R .444 -(The return status is non-zero if)5.444 F F1 -.18(re)2.945 G(tur).18 E -(n)-.15 E F0 .445(is supplied a non-numeric ar)2.945 F(gu-)-.18 E .381 -(ment, or is used outside a function and not during e)144 292.8 R -.15 -(xe)-.15 G .381(cution of a script by).15 F F1(.)2.881 E F0(or)3.714 E -F1(sour)2.881 E(ce)-.18 E F0 5.38(.A)C .68 -.15(ny c)-5.38 H(om-).15 E -.749(mand associated with the)144 304.8 R F1(RETURN)3.249 E F0 .749 +(its least signi\214cant 8 bits.)144 631.2 R .444 +(The return status is non-zero if)5.444 F F2 -.18(re)2.945 G(tur).18 E +(n)-.15 E F1 .445(is supplied a non-numeric ar)2.945 F(gu-)-.18 E .381 +(ment, or is used outside a function and not during e)144 643.2 R -.15 +(xe)-.15 G .381(cution of a script by).15 F F2(.)2.881 E F1(or)3.714 E +F2(sour)2.881 E(ce)-.18 E F1 5.38(.A)C .68 -.15(ny c)-5.38 H(om-).15 E +.749(mand associated with the)144 655.2 R F2(RETURN)3.249 E F1 .749 (trap is e)3.249 F -.15(xe)-.15 G .749(cuted before e).15 F -.15(xe)-.15 -G .75(cution resumes after the function).15 F(or script.)144 316.8 Q F1 -(set)108 333.6 Q F0([)2.5 E F1(\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1 -<ad6f>-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1<adad>-2.5 E F0 2.5 -(][)C F1<ad>-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E F1 -(set)108 345.6 Q F0([)2.5 E F1(+abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1(+o) --2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1<adad>-2.5 E F0 2.5(][)C F1 -<ad>-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E -.4(Wi)144 -357.6 S .574(thout options, display the name and v).4 F .574 +G .75(cution resumes after the function).15 F(or script.)144 667.2 Q F2 +(set)108 684 Q F1([)2.5 E F2(\255abefhkmnptuvxBCEHPT)A F1 2.5(][)C F2 +<ad6f>-2.5 E F0(option\255name)2.5 E F1 2.5(][)C F2<adad>-2.5 E F1 2.5 +(][)C F2<ad>-2.5 E F1 2.5(][)C F0(ar)-2.5 E(g)-.37 E F1 1.666(...)2.5 G +(])-1.666 E F2(set)108 696 Q F1([)2.5 E F2(+abefhkmnptuvxBCEHPT)A F1 2.5 +(][)C F2(+o)-2.5 E F0(option\255name)2.5 E F1 2.5(][)C F2<adad>-2.5 E F1 +2.5(][)C F2<ad>-2.5 E F1 2.5(][)C F0(ar)-2.5 E(g)-.37 E F1 1.666(...)2.5 +G(])-1.666 E(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E(15)190.95 E +0 Cg EP +%%Page: 16 16 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(set \255o)108 84 Q(set +o)108 96 Q F1 -.4(Wi)144 96 S +.574(thout options, display the name and v).4 F .574 (alue of each shell v)-.25 F .573 (ariable in a format that can be reused)-.25 F .113 -(as input for setting or resetting the currently-set v)144 369.6 R 2.613 +(as input for setting or resetting the currently-set v)144 108 R 2.613 (ariables. Read-only)-.25 F -.25(va)2.613 G .113 -(riables cannot be reset.).25 F(In)5.113 E F2 1.032(posix mode)144 381.6 -R F0 3.532(,o)C 1.032(nly shell v)-3.532 F 1.032(ariables are listed.) --.25 F 1.032(The output is sorted according to the current locale.)6.032 -F .58(When options are speci\214ed, the)144 393.6 R 3.081(ys)-.15 G .581 +(riables cannot be reset.).25 F(In)5.113 E F0 1.032(posix mode)144 120 R +F1 3.532(,o)C 1.032(nly shell v)-3.532 F 1.032(ariables are listed.)-.25 +F 1.032(The output is sorted according to the current locale.)6.032 F +.58(When options are speci\214ed, the)144 132 R 3.081(ys)-.15 G .581 (et or unset shell attrib)-3.081 F 3.081(utes. An)-.2 F 3.081(ya)-.15 G -.18(rg)-3.081 G .581(uments remaining after op-).18 F .161 -(tion processing are treated as v)144 405.6 R .161 +(tion processing are treated as v)144 144 R .161 (alues for the positional parameters and are assigned, in order)-.25 F -2.66(,t)-.4 G(o)-2.66 E F1($1)2.66 E F0(,)A F1($2)144 417.6 Q F0(,)A F1 -2.5(... $)2.5 F F2(n)A F0 5(.O)C(ptions, if speci\214ed, ha)-5 E .3 -.15 -(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad61>144 429.6 Q F0 -1.377(Each v)184 429.6 R 1.377 +2.66(,t)-.4 G(o)-2.66 E F2($1)2.66 E F1(,)A F2($2)144 156 Q F1 2.5(,.)C +1.666(..)-.834 G(,)-1.666 E F2($)2.5 E F0(n)A F1 5(.O)C +(ptions, if speci\214ed, ha)-5 E .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F2<ad61>144 168 Q F1 1.377(Each v)184 168 R 1.377 (ariable or function that is created or modi\214ed is gi)-.25 F -.15(ve) -.25 G 3.877(nt).15 G 1.377(he e)-3.877 F 1.378(xport attrib)-.15 F -1.378(ute and)-.2 F(mark)184 441.6 Q(ed for e)-.1 E(xport to the en)-.15 -E(vironment of subsequent commands.)-.4 E F1<ad62>144 453.6 Q F0 .132 -(Report the status of terminated background jobs immediately)184 453.6 R +1.378(ute and)-.2 F(mark)184 180 Q(ed for e)-.1 E(xport to the en)-.15 E +(vironment of subsequent commands.)-.4 E F2<ad62>144 192 Q F1 .132 +(Report the status of terminated background jobs immediately)184 192 R 2.632(,r)-.65 G .131(ather than before the ne)-2.632 F(xt)-.15 E -(primary prompt.)184 465.6 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o) --.25 H(nly when job control is enabled.).15 E F1<ad65>144 477.6 Q F0 -.087(Exit immediately if a)184 477.6 R F2(pipeline)2.587 E F0 .087 -(\(which may consist of a single)2.587 F F2 .088(simple command)2.588 F -F0 .088(\), a)B F2(list)2.588 E F0 2.588(,o)C(r)-2.588 E(a)184 489.6 Q -F2 .86(compound command)3.36 F F0(\(see)3.36 E/F3 9/Times-Bold@0 SF .86 -(SHELL GRAMMAR)3.36 F F0(in)3.11 E F2(bash\(1\))3.36 E F0 .86(\), e)B -.86(xits with a non-zero sta-)-.15 F 2.852(tus. The)184 501.6 R .352 +(primary prompt.)184 204 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o)-.25 +H(nly when job control is enabled.).15 E F2<ad65>144 216 Q F1 .087 +(Exit immediately if a)184 216 R F0(pipeline)2.587 E F1 .087 +(\(which may consist of a single)2.587 F F0 .088(simple command)2.588 F +F1 .088(\), a)B F0(list)2.588 E F1 2.588(,o)C(r)-2.588 E(a)184 228 Q F0 +.86(compound command)3.36 F F1(\(see)3.36 E/F3 9/Times-Bold@0 SF .86 +(SHELL GRAMMAR)3.36 F F1(in)3.11 E F0(bash)3.36 E F1 .86(\(1\)\), e)B +.86(xits with a non-zero sta-)-.15 F 2.852(tus. The)184 240 R .352 (shell does not e)2.852 F .352(xit if the command that f)-.15 F .353 (ails is part of the command list imme-)-.1 F 1.108(diately follo)184 -513.6 R 1.108(wing a)-.25 F F1(while)3.608 E F0(or)3.608 E F1(until) -3.608 E F0 -.1(ke)3.608 G(yw)-.05 E 1.107(ord, part of the test follo) --.1 F 1.107(wing the)-.25 F F1(if)3.607 E F0(or)3.607 E F1(elif)3.607 E -F0(re-)3.607 E(serv)184 525.6 Q .279(ed w)-.15 F .279(ords, part of an) --.1 F 2.779(yc)-.15 G .279(ommand e)-2.779 F -.15(xe)-.15 G .279 -(cuted in a).15 F F1(&&)2.779 E F0(or)2.779 E F1(||)2.78 E F0 .28 -(list e)2.78 F .28(xcept the command fol-)-.15 F(lo)184 537.6 Q .703 -(wing the \214nal)-.25 F F1(&&)3.203 E F0(or)3.203 E F1(||)3.203 E F0 -3.203(,a)C 1.003 -.15(ny c)-3.203 H .703(ommand in a pipeline b).15 F -.703(ut the last, or if the command')-.2 F(s)-.55 E .476(return v)184 -549.6 R .476(alue is being in)-.25 F -.15(ve)-.4 G .476(rted with).15 F -F1(!)2.976 E F0 5.476(.I)C 2.976(fac)-5.476 G .476 +252 R 1.108(wing a)-.25 F F2(while)3.608 E F1(or)3.608 E F2(until)3.608 +E F1 -.1(ke)3.608 G(yw)-.05 E 1.107(ord, part of the test follo)-.1 F +1.107(wing the)-.25 F F2(if)3.607 E F1(or)3.607 E F2(elif)3.607 E F1 +(re-)3.607 E(serv)184 264 Q .279(ed w)-.15 F .279(ords, part of an)-.1 F +2.779(yc)-.15 G .279(ommand e)-2.779 F -.15(xe)-.15 G .279(cuted in a) +.15 F F2(&&)2.779 E F1(or)2.779 E F2(||)2.78 E F1 .28(list e)2.78 F .28 +(xcept the command fol-)-.15 F(lo)184 276 Q .703(wing the \214nal)-.25 F +F2(&&)3.203 E F1(or)3.203 E F2(||)3.203 E F1 3.203(,a)C 1.003 -.15(ny c) +-3.203 H .703(ommand in a pipeline b).15 F .703 +(ut the last, or if the command')-.2 F(s)-.55 E .476(return v)184 288 R +.476(alue is being in)-.25 F -.15(ve)-.4 G .476(rted with).15 F F2(!) +2.976 E F1 5.476(.I)C 2.976(fac)-5.476 G .476 (ompound command other than a subshell re-)-2.976 F .418 -(turns a non-zero status because a command f)184 561.6 R .418 -(ailed while)-.1 F F1<ad65>2.918 E F0 -.1(wa)2.918 G 2.918(sb).1 G .417 -(eing ignored, the shell)-2.918 F .472(does not e)184 573.6 R 2.972 -(xit. A)-.15 F .472(trap on)2.972 F F1(ERR)2.972 E F0 2.972(,i)C 2.972 +(turns a non-zero status because a command f)184 300 R .418(ailed while) +-.1 F F2<ad65>2.918 E F1 -.1(wa)2.918 G 2.918(sb).1 G .417 +(eing ignored, the shell)-2.918 F .472(does not e)184 312 R 2.972 +(xit. A)-.15 F .472(trap on)2.972 F F2(ERR)2.972 E F1 2.972(,i)C 2.972 (fs)-2.972 G .472(et, is e)-2.972 F -.15(xe)-.15 G .473 (cuted before the shell e).15 F 2.973(xits. This)-.15 F .473(option ap-) -2.973 F 2.114(plies to the shell en)184 585.6 R 2.113 +2.973 F 2.114(plies to the shell en)184 324 R 2.113 (vironment and each subshell en)-.4 F 2.113(vironment separately \(see) --.4 F F3(COM-)4.613 E .675(MAND EXECUTION ENVIR)184 597.6 R(ONMENT)-.27 -E F0(in)2.925 E F2(bash\(1\))3.175 E F0 .675 -(\), and may cause subshells to e)B .676(xit be-)-.15 F(fore e)184 609.6 -Q -.15(xe)-.15 G(cuting all the commands in the subshell.).15 E .999 -(If a compound command or shell function e)184 627.6 R -.15(xe)-.15 G -.999(cutes in a conte).15 F .998(xt where)-.15 F F1<ad65>3.498 E F0 .998 -(is being ig-)3.498 F .089(nored, none of the commands e)184 639.6 R +-.4 F F3(COM-)4.613 E .675(MAND EXECUTION ENVIR)184 336 R(ONMENT)-.27 E +F1(in)2.925 E F0(bash)3.175 E F1 .675 +(\(1\)\), and may cause subshells to e)B .676(xit be-)-.15 F(fore e)184 +348 Q -.15(xe)-.15 G(cuting all the commands in the subshell.).15 E .999 +(If a compound command or shell function e)184 364.8 R -.15(xe)-.15 G +.999(cutes in a conte).15 F .998(xt where)-.15 F F2<ad65>3.498 E F1 .998 +(is being ig-)3.498 F .089(nored, none of the commands e)184 376.8 R -.15(xe)-.15 G .089(cuted within the compound command or function body) -.15 F .503(will be af)184 651.6 R .503(fected by the)-.25 F F1<ad65> -3.002 E F0 .502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f) --3.002 E F1<ad65>3.002 E F0 .502(is set and a command returns a f)3.002 -F .502(ailure sta-)-.1 F 4.183(tus. If)184 663.6 R 4.183(ac)4.183 G -1.683(ompound command or shell function sets)-4.183 F F1<ad65>4.184 E F0 +.15 F .503(will be af)184 388.8 R .503(fected by the)-.25 F F2<ad65> +3.002 E F1 .502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f) +-3.002 E F2<ad65>3.002 E F1 .502(is set and a command returns a f)3.002 +F .502(ailure sta-)-.1 F 4.183(tus. If)184 400.8 R 4.183(ac)4.183 G +1.683(ompound command or shell function sets)-4.183 F F2<ad65>4.184 E F1 1.684(while e)4.184 F -.15(xe)-.15 G 1.684(cuting in a conte).15 F(xt) --.15 E(where)184 675.6 Q F1<ad65>3.154 E F0 .654 +-.15 E(where)184 412.8 Q F2<ad65>3.154 E F1 .654 (is ignored, that setting will not ha)3.154 F .953 -.15(ve a)-.2 H .953 -.15(ny e).15 H -.25(ff).15 G .653(ect until the compound command).25 F -(or the command containing the function call completes.)184 687.6 Q F1 -<ad66>144 699.6 Q F0(Disable pathname e)184 699.6 Q(xpansion.)-.15 E F1 -<ad68>144 711.6 Q F0 .988(Remember the location of commands as the)184 -711.6 R 3.488(ya)-.15 G .988(re look)-3.488 F .988(ed up for e)-.1 F +(or the command containing the function call completes.)184 424.8 Q F2 +<ad66>144 436.8 Q F1(Disable pathname e)184 436.8 Q(xpansion.)-.15 E F2 +<ad68>144 448.8 Q F1 .988(Remember the location of commands as the)184 +448.8 R 3.488(ya)-.15 G .988(re look)-3.488 F .988(ed up for e)-.1 F -.15(xe)-.15 G 3.488(cution. This).15 F .988(is en-)3.488 F -(abled by def)184 723.6 Q(ault.)-.1 E(GNU Bash 5.2)72 768 Q(2021 No) -136.385 E -.15(ve)-.15 G(mber 22).15 E(15)185.545 E 0 Cg EP -%%Page: 16 16 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF<ad6b>144 84 Q F0 .514 -(All ar)184 84 R .514 +(abled by def)184 460.8 Q(ault.)-.1 E F2<ad6b>144 472.8 Q F1 .514 +(All ar)184 472.8 R .514 (guments in the form of assignment statements are placed in the en)-.18 F .513(vironment for a)-.4 F -(command, not just those that precede the command name.)184 96 Q F1 -<ad6d>144 108 Q F0 .148(Monitor mode.)184 108 R .148 +(command, not just those that precede the command name.)184 484.8 Q F2 +<ad6d>144 496.8 Q F1 .148(Monitor mode.)184 496.8 R .148 (Job control is enabled.)5.148 F .149(This option is on by def)5.148 F .149(ault for interacti)-.1 F .449 -.15(ve s)-.25 H(hells).15 E .235 -(on systems that support it \(see)184 120 R/F2 9/Times-Bold@0 SF .235 -(JOB CONTR)2.735 F(OL)-.27 E F0(in)2.485 E/F3 10/Times-Italic@0 SF -(bash\(1\))2.735 E F0 2.735(\). All)B .234(processes run in a sepa-) -2.735 F .252(rate process group.)184 132 R .252 +(on systems that support it \(see)184 508.8 R F3 .235(JOB CONTR)2.735 F +(OL)-.27 E F1(in)2.485 E F0(bash)2.735 E F1 2.735(\(1\)\). All)B .234 +(processes run in a sepa-)2.735 F .252(rate process group.)184 520.8 R +.252 (When a background job completes, the shell prints a line containing) -5.252 F(its e)184 144 Q(xit status.)-.15 E F1<ad6e>144 156 Q F0 .653 -(Read commands b)184 156 R .653(ut do not e)-.2 F -.15(xe)-.15 G .653 +5.252 F(its e)184 532.8 Q(xit status.)-.15 E F2<ad6e>144 544.8 Q F1 .653 +(Read commands b)184 544.8 R .653(ut do not e)-.2 F -.15(xe)-.15 G .653 (cute them.).15 F .652(This may be used to check a shell script for) -5.653 F(syntax errors.)184 168 Q(This is ignored by interacti)5 E .3 --.15(ve s)-.25 H(hells.).15 E F1<ad6f>144 180 Q F3(option\255name)2.5 E -F0(The)184 192 Q F3(option\255name)2.5 E F0(can be one of the follo)2.5 -E(wing:)-.25 E F1(allexport)184 204 Q F0(Same as)224 216 Q F1<ad61>2.5 E -F0(.)A F1(braceexpand)184 228 Q F0(Same as)224 240 Q F1<ad42>2.5 E F0(.) -A F1(emacs)184 252 Q F0 .089 -(Use an emacs-style command line editing interf)224 252 R 2.589 +5.653 F(syntax errors.)184 556.8 Q(This is ignored by interacti)5 E .3 +-.15(ve s)-.25 H(hells.).15 E F2<ad6f>144 568.8 Q F0(option\255name)2.5 +E F1(The)184 580.8 Q F0(option\255name)2.5 E F1(can be one of the follo) +2.5 E(wing:)-.25 E F2(allexport)184 592.8 Q F1(Same as)224 604.8 Q F2 +<ad61>2.5 E F1(.)A F2(braceexpand)184 616.8 Q F1(Same as)224 628.8 Q F2 +<ad42>2.5 E F1(.)A F2(emacs)184 640.8 Q F1 .089 +(Use an emacs-style command line editing interf)224 640.8 R 2.589 (ace. This)-.1 F .089(is enabled by def)2.589 F(ault)-.1 E .95 -(when the shell is interacti)224 264 R -.15(ve)-.25 G 3.45(,u).15 G .95 -(nless the shell is started with the)-3.45 F F1(\255\255noediting)3.45 E -F0 2.5(option. This)224 276 R(also af)2.5 E(fects the editing interf) --.25 E(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(err) -184 288 Q(exit)-.18 E F0(Same as)224 288 Q F1<ad65>2.5 E F0(.)A F1 -(errtrace)184 300 Q F0(Same as)224 300 Q F1<ad45>2.5 E F0(.)A F1 -(functrace)184 312 Q F0(Same as)224 324 Q F1<ad54>2.5 E F0(.)A F1 -(hashall)184 336 Q F0(Same as)224 336 Q F1<ad68>2.5 E F0(.)A F1 -(histexpand)184 348 Q F0(Same as)224 360 Q F1<ad48>2.5 E F0(.)A F1 -(history)184 372 Q F0 1.001(Enable command history)224 372 R 3.502(,a) --.65 G 3.502(sd)-3.502 G 1.002(escribed in)-3.502 F F3(bash\(1\))3.502 E -F0(under)3.502 E F2(HIST)3.502 E(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0 -SF(.)A F0 1.002(This op-)5.502 F(tion is on by def)224 384 Q -(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184 -396 Q(eeof)-.18 E F0 1.657(The ef)224 408 R 1.657 -(fect is as if the shell command)-.25 F/F5 10/Courier@0 SF(IGNOREEOF=10) -4.156 E F0 1.656(had been e)4.156 F -.15(xe)-.15 G(cuted).15 E(\(see)224 -420 Q F1(Shell V)2.5 E(ariables)-.92 E F0(in)2.5 E F3(bash\(1\))2.5 E F0 -(\).)A F1 -.1(ke)184 432 S(yw).1 E(ord)-.1 E F0(Same as)224 444 Q F1 -<ad6b>2.5 E F0(.)A F1(monitor)184 456 Q F0(Same as)224 456 Q F1<ad6d>2.5 -E F0(.)A F1(noclob)184 468 Q(ber)-.1 E F0(Same as)224 480 Q F1<ad43>2.5 -E F0(.)A F1(noexec)184 492 Q F0(Same as)224 492 Q F1<ad6e>2.5 E F0(.)A -F1(noglob)184 504 Q F0(Same as)224 504 Q F1<ad66>2.5 E F0(.)A F1(nolog) -184 516 Q F0(Currently ignored.)224 516 Q F1(notify)184 528 Q F0 -(Same as)224 528 Q F1<ad62>2.5 E F0(.)A F1(nounset)184 540 Q F0(Same as) -224 540 Q F1<ad75>2.5 E F0(.)A F1(onecmd)184 552 Q F0(Same as)224 552 Q -F1<ad74>2.5 E F0(.)A F1(ph)184 564 Q(ysical)-.15 E F0(Same as)224 564 Q -F1<ad50>2.5 E F0(.)A F1(pipefail)184 576 Q F0 1.029 -(If set, the return v)224 576 R 1.029(alue of a pipeline is the v)-.25 F -1.03(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 588 +(when the shell is interacti)224 652.8 R -.15(ve)-.25 G 3.45(,u).15 G +.95(nless the shell is started with the)-3.45 F F2(\255\255noediting) +3.45 E F1 2.5(option. This)224 664.8 R(also af)2.5 E +(fects the editing interf)-.25 E(ace used for)-.1 E F2 -.18(re)2.5 G +(ad \255e).18 E F1(.)A F2(err)184 676.8 Q(exit)-.18 E F1(Same as)224 +676.8 Q F2<ad65>2.5 E F1(.)A F2(errtrace)184 688.8 Q F1(Same as)224 +688.8 Q F2<ad45>2.5 E F1(.)A F2(functrace)184 700.8 Q F1(Same as)224 +712.8 Q F2<ad54>2.5 E F1(.)A(GNU Bash 5.2)72 768 Q(2023 January 27) +141.79 E(16)190.95 E 0 Cg EP +%%Page: 17 17 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(hashall)184 84 Q F1(Same as)224 84 Q F2<ad68>2.5 E F1 +(.)A F2(histexpand)184 96 Q F1(Same as)224 108 Q F2<ad48>2.5 E F1(.)A F2 +(history)184 120 Q F1 1.001(Enable command history)224 120 R 3.502(,a) +-.65 G 3.502(sd)-3.502 G 1.002(escribed in)-3.502 F F0(bash)3.502 E F1 +1.002(\(1\) under)B/F3 9/Times-Bold@0 SF(HIST)3.502 E(OR)-.162 E(Y)-.315 +E/F4 9/Times-Roman@0 SF(.)A F1 1.002(This op-)5.502 F(tion is on by def) +224 132 Q(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F2 +(ignor)184 144 Q(eeof)-.18 E F1 .601(The ef)224 156 R .601 +(fect is as if the shell command had been e)-.25 F -.15(xe)-.15 G .6 +(cuted \(see).15 F F2 .6(Shell V)3.1 F(ariables)-.92 E F1(in)224 168 Q +F0(bash)2.5 E F1(\(1\)\).)A F2 -.1(ke)184 180 S(yw).1 E(ord)-.1 E F1 +(Same as)224 192 Q F2<ad6b>2.5 E F1(.)A F2(monitor)184 204 Q F1(Same as) +224 204 Q F2<ad6d>2.5 E F1(.)A F2(noclob)184 216 Q(ber)-.1 E F1(Same as) +224 228 Q F2<ad43>2.5 E F1(.)A F2(noexec)184 240 Q F1(Same as)224 240 Q +F2<ad6e>2.5 E F1(.)A F2(noglob)184 252 Q F1(Same as)224 252 Q F2<ad66> +2.5 E F1(.)A F2(nolog)184 264 Q F1(Currently ignored.)224 264 Q F2 +(notify)184 276 Q F1(Same as)224 276 Q F2<ad62>2.5 E F1(.)A F2(nounset) +184 288 Q F1(Same as)224 288 Q F2<ad75>2.5 E F1(.)A F2(onecmd)184 300 Q +F1(Same as)224 300 Q F2<ad74>2.5 E F1(.)A F2(ph)184 312 Q(ysical)-.15 E +F1(Same as)224 312 Q F2<ad50>2.5 E F1(.)A F2(pipefail)184 324 Q F1 1.029 +(If set, the return v)224 324 R 1.029(alue of a pipeline is the v)-.25 F +1.03(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 336 R 1.136 (xit with a non-zero status, or zero if all commands in the pipeline) --.15 F -.15(ex)224 600 S(it successfully).15 E 5(.T)-.65 G -(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 612 Q F0 -2.09(Change the beha)224 612 R 2.091(vior of)-.2 F F1(bash)4.591 E F0 +-.15 F -.15(ex)224 348 S(it successfully).15 E 5(.T)-.65 G +(his option is disabled by def)-5 E(ault.)-.1 E F2(posix)184 360 Q F1 +2.09(Change the beha)224 360 R 2.091(vior of)-.2 F F2(bash)4.591 E F1 2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091 (fers from the)-.25 F 2.704(POSIX standard to match the standard \()224 -624 R F3 2.704(posix mode)B F0 5.204(\). See)B F2 2.704(SEE ALSO)5.204 F -F0(in)4.953 E F3(bash\(1\))224 636 Q F0 1.844 -(for a reference to a document that details ho)4.344 F 4.344(wp)-.25 G -1.845(osix mode af)-4.344 F(fects)-.25 E(bash')224 648 Q 2.5(sb)-.55 G -(eha)-2.5 E(vior)-.2 E(.)-.55 E F1(pri)184 660 Q(vileged)-.1 E F0 -(Same as)224 672 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 684 S(rbose).1 E -F0(Same as)224 684 Q F1<ad76>2.5 E F0(.)A F1(vi)184 696 Q F0 .209 -(Use a vi-style command line editing interf)224 696 R 2.709(ace. This) +372 R F0 2.704(posix mode)B F1 5.204(\). See)B F3 2.704(SEE ALSO)5.204 F +F1(in)4.953 E F0(bash)224 384 Q F1 1.844 +(\(1\) for a reference to a document that details ho)B 4.344(wp)-.25 G +1.845(osix mode af)-4.344 F(fects)-.25 E(bash')224 396 Q 2.5(sb)-.55 G +(eha)-2.5 E(vior)-.2 E(.)-.55 E F2(pri)184 408 Q(vileged)-.1 E F1 +(Same as)224 420 Q F2<ad70>2.5 E F1(.)A F2 -.1(ve)184 432 S(rbose).1 E +F1(Same as)224 432 Q F2<ad76>2.5 E F1(.)A F2(vi)184 444 Q F1 .209 +(Use a vi-style command line editing interf)224 444 R 2.709(ace. This) -.1 F .209(also af)2.709 F .209(fects the editing in-)-.25 F(terf)224 -708 Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A -(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E -(16)185.545 E 0 Cg EP -%%Page: 17 17 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(xtrace)184 84 Q F0 -(Same as)224 84 Q F1<ad78>2.5 E F0(.)A(If)184 102 Q F1<ad6f>3.052 E F0 -.552(is supplied with no)3.052 F/F2 10/Times-Italic@0 SF(option\255name) -3.053 E F0 3.053(,t)C .553(he v)-3.053 F .553 -(alues of the current options are printed.)-.25 F(If)5.553 E F1(+o)184 -114 Q F0 1.072(is supplied with no)3.572 F F2(option\255name)3.572 E F0 -3.572(,a)C 1.071(series of)-.001 F F1(set)3.571 E F0 1.071 -(commands to recreate the current)3.571 F -(option settings is displayed on the standard output.)184 126 Q F1<ad70> -144 138 Q F0 -.45(Tu)184 138 S 1.071(rn on).45 F F2(privile)4.821 E -.1 -(ge)-.4 G(d).1 E F0 3.572(mode. In)4.341 F 1.072(this mode, the)3.572 F -/F3 9/Times-Bold@0 SF($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV) --.27 E F0 1.072(\214les are not pro-)3.322 F 1.501 -(cessed, shell functions are not inherited from the en)184 150 R 1.5 -(vironment, and the)-.4 F F3(SHELLOPTS)4 E/F4 9/Times-Roman@0 SF(,)A F3 --.27(BA)184 162 S(SHOPTS).27 E F4(,)A F3(CDP)2.774 E -.855(AT)-.666 G(H) -.855 E F4(,)A F0(and)2.774 E F3(GLOBIGNORE)3.024 E F0 -.25(va)2.774 G -.524(riables, if the).25 F 3.025(ya)-.15 G .525(ppear in the en)-3.025 F -(vironment,)-.4 E .38(are ignored.)184 174 R .38 +456 Q(ace used for)-.1 E F2 -.18(re)2.5 G(ad \255e).18 E F1(.)A F2 +(xtrace)184 468 Q F1(Same as)224 468 Q F2<ad78>2.5 E F1(.)A(If)184 480 Q +F2<ad6f>2.765 E F1 .265(is supplied with no)2.765 F F0(option\255name) +2.765 E F1(,)A F2(set)2.765 E F1 .266 +(prints the current shell option settings.)2.765 F(If)5.266 E F2(+o) +2.766 E F1 .079(is supplied with no)184 492 R F0(option\255name)2.579 E +F1(,)A F2(set)2.579 E F1 .079(prints a series of)2.579 F F2(set)2.579 E +F1 .078(commands to recreate the cur)2.578 F(-)-.2 E +(rent option settings on the standard output.)184 504 Q F2<ad70>144 516 +Q F1 -.45(Tu)184 516 S 2.628(rn on).45 F F0(privile)6.378 E -.1(ge)-.4 G +(d).1 E F1 5.128(mode. In)5.898 F 2.628(this mode, the)5.128 F F3($ENV) +5.128 E F1(and)4.878 E F3($B)5.128 E(ASH_ENV)-.27 E F1 2.628 +(\214les are not)4.878 F .289 +(processed, shell functions are not inherited from the en)184 528 R .289 +(vironment, and the)-.4 F F3(SHELLOPTS)2.788 E F4(,)A F3 -.27(BA)184 540 +S(SHOPTS).27 E F4(,)A F3(CDP)2.774 E -.855(AT)-.666 G(H).855 E F4(,)A F1 +(and)2.774 E F3(GLOBIGNORE)3.024 E F1 -.25(va)2.774 G .524 +(riables, if the).25 F 3.025(ya)-.15 G .525(ppear in the en)-3.025 F +(vironment,)-.4 E .38(are ignored.)184 552 R .38 (If the shell is started with the ef)5.38 F(fecti)-.25 E .679 -.15(ve u) -.25 H .379(ser \(group\) id not equal to the real).15 F .461 -(user \(group\) id, and the)184 186 R F1<ad70>2.961 E F0 .461 +(user \(group\) id, and the)184 564 R F2<ad70>2.961 E F1 .461 (option is not supplied, these actions are tak)2.961 F .462 -(en and the ef)-.1 F(fec-)-.25 E(ti)184 198 Q .695 -.15(ve u)-.25 H .395 -(ser id is set to the real user id.).15 F .395(If the)5.395 F F1<ad70> -2.895 E F0 .394(option is supplied at startup, the ef)2.895 F(fecti)-.25 -E -.15(ve)-.25 G .386(user id is not reset.)184 210 R -.45(Tu)5.386 G +(en and the ef)-.1 F(fec-)-.25 E(ti)184 576 Q .695 -.15(ve u)-.25 H .395 +(ser id is set to the real user id.).15 F .395(If the)5.395 F F2<ad70> +2.895 E F1 .394(option is supplied at startup, the ef)2.895 F(fecti)-.25 +E -.15(ve)-.25 G .386(user id is not reset.)184 588 R -.45(Tu)5.386 G .386(rning this option of).45 F 2.886(fc)-.25 G .387(auses the ef)-2.886 F(fecti)-.25 E .687 -.15(ve u)-.25 H .387(ser and group ids to be).15 F -(set to the real user and group ids.)184 222 Q F1<ad72>144 234 Q F0 -(Enable restricted shell mode.)184 234 Q -(This option cannot be unset once it has been set.)5 E F1<ad74>144 246 Q -F0(Exit after reading and e)184 246 Q -.15(xe)-.15 G -(cuting one command.).15 E F1<ad75>144 258 Q F0 -.35(Tr)184 258 S .774 -(eat unset v).35 F .773(ariables and parameters other than the special \ -parameters "@" and "*", or)-.25 F .459(array v)184 270 R .459(ariables \ -subscripted with "@" or "*", as an error when performing parameter e) --.25 F(x-)-.15 E 2.891(pansion. If)184 282 R -.15(ex)2.891 G .391 -(pansion is attempted on an unset v).15 F .391(ariable or parameter)-.25 -F 2.89(,t)-.4 G .39(he shell prints an)-2.89 F -(error message, and, if not interacti)184 294 Q -.15(ve)-.25 G 2.5(,e) -.15 G(xits with a non-zero status.)-2.65 E F1<ad76>144 306 Q F0 -(Print shell input lines as the)184 306 Q 2.5(ya)-.15 G(re read.)-2.5 E -F1<ad78>144 318 Q F0 .315(After e)184 318 R .315(xpanding each)-.15 F F2 -.315(simple command)2.815 F F0(,)A F1 -.25(fo)2.815 G(r).25 E F0 -(command,)2.815 E F1(case)2.815 E F0(command,)2.815 E F1(select)2.815 E -F0(command,)2.815 E 1.236(or arithmetic)184 330 R F1 -.25(fo)3.736 G(r) -.25 E F0 1.236(command, display the e)3.736 F 1.236(xpanded v)-.15 F -1.236(alue of)-.25 F F3(PS4)3.736 E F4(,)A F0(follo)3.486 E 1.236 -(wed by the com-)-.25 F(mand and its e)184 342 Q(xpanded ar)-.15 E -(guments or associated w)-.18 E(ord list.)-.1 E F1<ad42>144 354 Q F0 -1.053(The shell performs brace e)184 354 R 1.053(xpansion \(see)-.15 F -F1 1.053(Brace Expansion)3.553 F F0(in)3.553 E F2(bash\(1\))3.553 E F0 -3.553(\). This)B 1.053(is on by)3.553 F(def)184 366 Q(ault.)-.1 E F1 -<ad43>144 378 Q F0 .214(If set,)184 378 R F1(bash)2.714 E F0 .214 -(does not o)2.714 F -.15(ve)-.15 G .214(rwrite an e).15 F .214 -(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0 -2.713(,a)C(nd)-2.713 E F1(<>)2.713 E F0 .213(redirection opera-)2.713 F -3.053(tors. This)184 390 R .553(may be o)3.053 F -.15(ve)-.15 G .553 +(set to the real user and group ids.)184 600 Q F2<ad72>144 612 Q F1 +(Enable restricted shell mode.)184 612 Q +(This option cannot be unset once it has been set.)5 E F2<ad74>144 624 Q +F1(Exit after reading and e)184 624 Q -.15(xe)-.15 G +(cuting one command.).15 E F2<ad75>144 636 Q F1 -.35(Tr)184 636 S .301 +(eat unset v).35 F .301(ariables and parameters other than the special \ +parameters and or array v)-.25 F(ari-)-.25 E .903 +(ables subscripted with or as an error when performing parameter e)184 +648 R 3.404(xpansion. If)-.15 F -.15(ex)3.404 G(pan-).15 E 1.155 +(sion is attempted on an unset v)184 660 R 1.154(ariable or parameter) +-.25 F 3.654(,t)-.4 G 1.154(he shell prints an error message,)-3.654 F +(and, if not interacti)184 672 Q -.15(ve)-.25 G 2.5(,e).15 G +(xits with a non-zero status.)-2.65 E F2<ad76>144 684 Q F1 +(Print shell input lines as the)184 684 Q 2.5(ya)-.15 G(re read.)-2.5 E +F2<ad78>144 696 Q F1 .315(After e)184 696 R .315(xpanding each)-.15 F F0 +.315(simple command)2.815 F F1(,)A F2 -.25(fo)2.815 G(r).25 E F1 +(command,)2.815 E F2(case)2.815 E F1(command,)2.815 E F2(select)2.815 E +F1(command,)2.815 E 1.236(or arithmetic)184 708 R F2 -.25(fo)3.736 G(r) +.25 E F1 1.236(command, display the e)3.736 F 1.236(xpanded v)-.15 F +1.236(alue of)-.25 F F3(PS4)3.736 E F4(,)A F1(follo)3.486 E 1.236 +(wed by the com-)-.25 F(mand and its e)184 720 Q(xpanded ar)-.15 E +(guments or associated w)-.18 E(ord list, to standard error)-.1 E(.)-.55 +E(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E(17)190.95 E 0 Cg EP +%%Page: 18 18 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF<ad42>144 84 Q F1 1.053(The shell performs brace e)184 +84 R 1.053(xpansion \(see)-.15 F F2 1.053(Brace Expansion)3.553 F F1(in) +3.553 E F0(bash)3.553 E F1 3.553(\(1\)\). This)B 1.053(is on by)3.553 F +(def)184 96 Q(ault.)-.1 E F2<ad43>144 108 Q F1 .214(If set,)184 108 R F2 +(bash)2.714 E F1 .214(does not o)2.714 F -.15(ve)-.15 G .214 +(rwrite an e).15 F .214(xisting \214le with the)-.15 F F2(>)2.714 E F1 +(,)A F2(>&)2.714 E F1 2.713(,a)C(nd)-2.713 E F2(<>)2.713 E F1 .213 +(redirection opera-)2.713 F 3.053(tors. This)184 120 R .553(may be o) +3.053 F -.15(ve)-.15 G .553 (rridden when creating output \214les by using the redirection opera-) -.15 F(tor)184 402 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1 -<ad45>144 414 Q F0 .104(If set, an)184 414 R 2.604(yt)-.15 G .104 -(rap on)-2.604 F F1(ERR)2.604 E F0 .103 +.15 F(tor)184 132 Q F2(>|)2.5 E F1(instead of)2.5 E F2(>)2.5 E F1(.)A F2 +<ad45>144 144 Q F1 .104(If set, an)184 144 R 2.604(yt)-.15 G .104 +(rap on)-2.604 F F2(ERR)2.604 E F1 .103 (is inherited by shell functions, command substitutions, and com-)2.604 -F .838(mands e)184 426 R -.15(xe)-.15 G .838(cuted in a subshell en).15 -F 3.338(vironment. The)-.4 F F1(ERR)3.338 E F0 .839 -(trap is normally not inherited in)3.339 F(such cases.)184 438 Q F1 -<ad48>144 450 Q F0(Enable)184 450 Q F1(!)3.032 E F0 .532 +F .838(mands e)184 156 R -.15(xe)-.15 G .838(cuted in a subshell en).15 +F 3.338(vironment. The)-.4 F F2(ERR)3.338 E F1 .839 +(trap is normally not inherited in)3.339 F(such cases.)184 168 Q F2 +<ad48>144 180 Q F1(Enable)184 180 Q F2(!)3.032 E F1 .532 (style history substitution.)5.532 F .531(This option is on by def)5.532 -F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 462 Q -.15 -(ve)-.25 G(.).15 E F1<ad50>144 474 Q F0 .959 -(If set, the shell does not resolv)184 474 R 3.459(es)-.15 G .959 +F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 192 Q -.15 +(ve)-.25 G(.).15 E F2<ad50>144 204 Q F1 .959 +(If set, the shell does not resolv)184 204 R 3.459(es)-.15 G .959 (ymbolic links when e)-3.459 F -.15(xe)-.15 G .96 -(cuting commands such as).15 F F1(cd)3.46 E F0 1.453 -(that change the current w)184 486 R 1.453(orking directory)-.1 F 6.453 +(cuting commands such as).15 F F2(cd)3.46 E F1 1.453 +(that change the current w)184 216 R 1.453(orking directory)-.1 F 6.453 (.I)-.65 G 3.952(tu)-6.453 G 1.452(ses the ph)-3.952 F 1.452 -(ysical directory structure in-)-.05 F 3.334(stead. By)184 498 R(def) -3.334 E(ault,)-.1 E F1(bash)3.334 E F0(follo)3.334 E .834 +(ysical directory structure in-)-.05 F 3.334(stead. By)184 228 R(def) +3.334 E(ault,)-.1 E F2(bash)3.334 E F1(follo)3.334 E .834 (ws the logical chain of directories when performing com-)-.25 F -(mands which change the current directory)184 510 Q(.)-.65 E F1<ad54>144 -522 Q F0 .89(If set, an)184 522 R 3.39(yt)-.15 G .89(raps on)-3.39 F F1 -(DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89 +(mands which change the current directory)184 240 Q(.)-.65 E F2<ad54>144 +252 Q F1 .89(If set, an)184 252 R 3.39(yt)-.15 G .89(raps on)-3.39 F F2 +(DEB)3.39 E(UG)-.1 E F1(and)3.39 E F2(RETURN)3.39 E F1 .89 (are inherited by shell functions, command)3.39 F 1.932 -(substitutions, and commands e)184 534 R -.15(xe)-.15 G 1.932 -(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E -(UG)-.1 E F0(and)4.432 E F1(RETURN)184 546 Q F0 -(traps are normally not inherited in such cases.)2.5 E F1<adad>144 558 Q -F0 .401(If no ar)184 558 R .401(guments follo)-.18 F 2.901(wt)-.25 G +(substitutions, and commands e)184 264 R -.15(xe)-.15 G 1.932 +(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F2(DEB)4.432 E +(UG)-.1 E F1(and)4.432 E F2(RETURN)184 276 Q F1 +(traps are normally not inherited in such cases.)2.5 E F2<adad>144 288 Q +F1 .401(If no ar)184 288 R .401(guments follo)-.18 F 2.901(wt)-.25 G .401(his option, then the positional parameters are unset.)-2.901 F -(Otherwise,)5.4 E(the positional parameters are set to the)184 570 Q F2 -(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G -(ome of them be)-2.5 E(gin with a)-.15 E F1<ad>2.5 E F0(.)A F1<ad>144 -582 Q F0 .796(Signal the end of options, cause all remaining)184 582 R -F2(ar)3.297 E(g)-.37 E F0 3.297(st)C 3.297(ob)-3.297 G 3.297(ea)-3.297 G -.797(ssigned to the positional pa-)-3.297 F 3.022(rameters. The)184 594 -R F1<ad78>3.022 E F0(and)3.022 E F1<ad76>3.022 E F0 .522 +(Otherwise,)5.4 E(the positional parameters are set to the)184 300 Q F0 +(ar)2.5 E(g)-.37 E F1(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G +(ome of them be)-2.5 E(gin with a)-.15 E F2<ad>2.5 E F1(.)A F2<ad>144 +312 Q F1 .278(Signal the end of options, cause all remaining)184 312 R +F0(ar)2.779 E(g)-.37 E F1 2.779(st)C 2.779(ob)-2.779 G 2.779(ea)-2.779 G +.279(ssigned to the positional para-)-2.779 F 3.022(meters. The)184 324 +R F2<ad78>3.022 E F1(and)3.022 E F2<ad76>3.022 E F1 .522 (options are turned of)3.022 F 3.022(f. If)-.25 F .522(there are no) -3.022 F F2(ar)3.022 E(g)-.37 E F0 .521(s, the positional pa-)B -(rameters remain unchanged.)184 606 Q .425(The options are of)144 622.8 -R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425 +3.022 F F0(ar)3.022 E(g)-.37 E F1 .521(s, the positional para-)B +(meters remain unchanged.)184 336 Q .425(The options are of)144 352.8 R +2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425 (ault unless otherwise noted.)-.1 F .425 (Using + rather than \255 causes these options)5.425 F .178 -(to be turned of)144 634.8 R 2.678(f. The)-.25 F .178 +(to be turned of)144 364.8 R 2.678(f. The)-.25 F .178 (options can also be speci\214ed as ar)2.678 F .178(guments to an in) -.18 F -.2(vo)-.4 G .177(cation of the shell.).2 F(The)5.177 E .066 -(current set of options may be found in)144 646.8 R F1<24ad>2.566 E F0 +(current set of options may be found in)144 376.8 R F2<24ad>2.566 E F1 5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066 (ys true unless an in).1 F -.25(va)-.4 G .067(lid option).25 F -(is encountered.)144 658.8 Q F1(shift)108 675.6 Q F0([)2.5 E F2(n)A F0 -(])A .429(The positional parameters from)144 687.6 R F2(n)2.929 E F0 -.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.428 G -.428(rameters represented by the num-).15 F(bers)144 699.6 Q F1($#)2.582 -E F0(do)2.582 E .082(wn to)-.25 F F1($#)2.582 E F0<ad>A F2(n)A F0 .082 -(+1 are unset.)B F2(n)5.442 E F0 .082(must be a non-ne)2.822 F -.05(ga) --.15 G(ti).05 E .383 -.15(ve n)-.25 H .083(umber less than or equal to) -.15 F F1($#)2.583 E F0 5.083(.I)C(f)-5.083 E F2(n)2.943 E F0 .06 -(is 0, no parameters are changed.)144 711.6 R(If)5.06 E F2(n)2.92 E F0 -.06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F -(If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56 -(,t)C(he)-2.56 E .143(positional parameters are not changed.)144 723.6 R -.144(The return status is greater than zero if)5.143 F F2(n)3.004 E F0 -.144(is greater than)2.884 F F1($#)2.644 E F0(GNU Bash 5.2)72 768 Q -(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(17)185.545 E 0 Cg EP -%%Page: 18 18 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E(or less than zero; otherwise 0.)144 84 Q/F1 -10/Times-Bold@0 SF(shopt)108 100.8 Q F0([)2.5 E F1(\255pqsu)A F0 2.5(][) -C F1<ad6f>-2.5 E F0 2.5(][)C/F2 10/Times-Italic@0 SF(optname)-2.5 E F0 -(...])2.5 E -.8(To)144 112.8 S .64(ggle the v).8 F .639 -(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E +(is encountered.)144 388.8 Q F2(shift)108 405.6 Q F1([)2.5 E F0(n)A F1 +(])A 1.67(The positional parameters from)144 417.6 R F0(n)4.17 E F1 1.67 +(+1 .)B -1.662 1.666(.. a)1.666 H 1.67(re renamed to)-1.666 F F2 1.67 +($1 .)4.17 F 1.666(..)1.666 G(.)-1.666 E F1 -.15(Pa)6.669 G 1.669 +(rameters represented by the).15 F(numbers)144 429.6 Q F2($#)2.701 E F1 +(do)2.701 E .201(wn to)-.25 F F2($#)2.701 E F1<ad>A F0(n)A F1 .201 +(+1 are unset.)B F0(n)5.562 E F1 .202(must be a non-ne)2.942 F -.05(ga) +-.15 G(ti).05 E .502 -.15(ve n)-.25 H .202(umber less than or equal to) +.15 F F2($#)2.702 E F1(.)A(If)144 441.6 Q F0(n)3.462 E F1 .602 +(is 0, no parameters are changed.)3.342 F(If)5.602 E F0(n)3.462 E F1 +.602(is not gi)3.342 F -.15(ve)-.25 G .602(n, it is assumed to be 1.).15 +F(If)5.601 E F0(n)3.461 E F1 .601(is greater than)3.341 F F2($#)144 +453.6 Q F1 2.79(,t)C .29(he positional parameters are not changed.)-2.79 +F .291(The return status is greater than zero if)5.29 F F0(n)3.151 E F1 +.291(is greater)3.031 F(than)144 465.6 Q F2($#)2.5 E F1 +(or less than zero; otherwise 0.)2.5 E F2(shopt)108 482.4 Q F1([)2.5 E +F2(\255pqsu)A F1 2.5(][)C F2<ad6f>-2.5 E F1 2.5(][)C F0(optname)-2.5 E +F1 1.666(...)2.5 G(])-1.666 E -.8(To)144 494.4 S .64(ggle the v).8 F +.639(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E 5.639(.T)-.55 G .639(he settings can be either those)-5.639 F .374 -(listed belo)144 124.8 R 1.674 -.65(w, o)-.25 H 1.174 -.4(r, i).65 H -2.874(ft).4 G(he)-2.874 E F1<ad6f>2.874 E F0 .375 +(listed belo)144 506.4 R 1.674 -.65(w, o)-.25 H 1.174 -.4(r, i).65 H +2.874(ft).4 G(he)-2.874 E F2<ad6f>2.874 E F1 .375 (option is used, those a)2.875 F -.25(va)-.2 G .375(ilable with the).25 -F F1<ad6f>2.875 E F0 .375(option to the)2.875 F F1(set)2.875 E F0 -.2 -(bu)2.875 G .375(iltin com-).2 F 2.566(mand. W)144 136.8 R .066 -(ith no options, or with the)-.4 F F1<ad70>2.566 E F0 .066 +F F2<ad6f>2.875 E F1 .375(option to the)2.875 F F2(set)2.875 E F1 -.2 +(bu)2.875 G .375(iltin com-).2 F 2.566(mand. W)144 518.4 R .066 +(ith no options, or with the)-.4 F F2<ad70>2.566 E F1 .066 (option, a list of all settable options is displayed, with an in-)2.566 -F .074(dication of whether or not each is set; if)144 148.8 R F2 -(optnames)2.574 E F0 .074 +F .074(dication of whether or not each is set; if)144 530.4 R F0 +(optnames)2.574 E F1 .074 (are supplied, the output is restricted to those op-)2.574 F 3.105 -(tions. The)144 160.8 R F1<ad70>3.105 E F0 .605(option causes output to\ +(tions. The)144 542.4 R F2<ad70>3.105 E F1 .605(option causes output to\ be displayed in a form that may be reused as input.)3.105 F(Other)5.605 -E(options ha)144 172.8 Q .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F1<ad73>144 184.8 Q F0(Enable \(set\) each)180 -184.8 Q F2(optname)2.5 E F0(.)A F1<ad75>144 196.8 Q F0 -(Disable \(unset\) each)180 196.8 Q F2(optname)2.5 E F0(.)A F1<ad71>144 -208.8 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\ -tus indicates whether the)180 208.8 R F2(optname)2.504 E F0(is)2.504 E -.256(set or unset.)180 220.8 R .256(If multiple)5.256 F F2(optname)2.756 -E F0(ar)2.756 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G -(ith)-2.756 E F1<ad71>2.756 E F0 2.755(,t)C .255 -(he return status is zero if)-2.755 F(all)180 232.8 Q F2(optnames)2.5 E -F0(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 244.8 Q F0 -(Restricts the v)180 244.8 Q(alues of)-.25 E F2(optname)2.5 E F0 -(to be those de\214ned for the)2.5 E F1<ad6f>2.5 E F0(option to the)2.5 -E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .624(If either)144 261.6 R F1 -<ad73>3.124 E F0(or)3.124 E F1<ad75>3.124 E F0 .624(is used with no) -3.124 F F2(optname)3.124 E F0(ar)3.124 E(guments,)-.18 E F1(shopt)3.124 -E F0(sho)3.124 E .624(ws only those options which are)-.25 F .984 -(set or unset, respecti)144 273.6 R -.15(ve)-.25 G(ly).15 E 5.984(.U) --.65 G .984(nless otherwise noted, the)-5.984 F F1(shopt)3.484 E F0 .983 -(options are disabled \(unset\) by de-)3.483 F -.1(fa)144 285.6 S(ult.) -.1 E 1.544(The return status when listing options is zero if all)144 -302.4 R F2(optnames)4.044 E F0 1.545(are enabled, non-zero otherwise.) -4.045 F .696 +E(options ha)144 554.4 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F2<ad73>144 566.4 Q F1(Enable \(set\) each)180 +566.4 Q F0(optname)2.5 E F1(.)A F2<ad75>144 578.4 Q F1 +(Disable \(unset\) each)180 578.4 Q F0(optname)2.5 E F1(.)A F2<ad71>144 +590.4 Q F1 .003(Suppresses normal output \(quiet mode\); the return sta\ +tus indicates whether the)180 590.4 R F0(optname)2.504 E F1(is)2.504 E +.256(set or unset.)180 602.4 R .256(If multiple)5.256 F F0(optname)2.756 +E F1(ar)2.756 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G +(ith)-2.756 E F2<ad71>2.756 E F1 2.755(,t)C .255 +(he return status is zero if)-2.755 F(all)180 614.4 Q F0(optnames)2.5 E +F1(are enabled; non-zero otherwise.)2.5 E F2<ad6f>144 626.4 Q F1 +(Restricts the v)180 626.4 Q(alues of)-.25 E F0(optname)2.5 E F1 +(to be those de\214ned for the)2.5 E F2<ad6f>2.5 E F1(option to the)2.5 +E F2(set)2.5 E F1 -.2(bu)2.5 G(iltin.).2 E .624(If either)144 643.2 R F2 +<ad73>3.124 E F1(or)3.124 E F2<ad75>3.124 E F1 .624(is used with no) +3.124 F F0(optname)3.124 E F1(ar)3.124 E(guments,)-.18 E F2(shopt)3.124 +E F1(sho)3.124 E .624(ws only those options which are)-.25 F .984 +(set or unset, respecti)144 655.2 R -.15(ve)-.25 G(ly).15 E 5.984(.U) +-.65 G .984(nless otherwise noted, the)-5.984 F F2(shopt)3.484 E F1 .983 +(options are disabled \(unset\) by de-)3.483 F -.1(fa)144 667.2 S(ult.) +.1 E 1.544(The return status when listing options is zero if all)144 684 +R F0(optnames)4.044 E F1 1.545(are enabled, non-zero otherwise.)4.045 F +.696 (When setting or unsetting options, the return status is zero unless an) -144 314.4 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .695 -(alid shell)-.25 F(option.)144 326.4 Q(The list of)144 343.2 Q F1(shopt) -2.5 E F0(options is:)2.5 E F1(assoc_expand_once)144 361.2 Q F0 1.944 -(If set, the shell suppresses multiple e)184 373.2 R -.25(va)-.25 G -1.945(luation of associati).25 F 2.245 -.15(ve a)-.25 H 1.945 -(rray subscripts during).15 F .885(arithmetic e)184 385.2 R .885 -(xpression e)-.15 F -.25(va)-.25 G .885(luation, while e).25 F -.15(xe) --.15 G .885(cuting b).15 F .885(uiltins that can perform v)-.2 F .885 -(ariable as-)-.25 F(signments, and while e)184 397.2 Q -.15(xe)-.15 G -(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E F1 -(autocd)144 409.2 Q F0 .199 -(If set, a command name that is the name of a directory is e)184 409.2 R +144 696 R F0(optname)3.196 E F1 .696(is not a v)3.196 F .695(alid shell) +-.25 F(option.)144 708 Q(The list of)144 724.8 Q F2(shopt)2.5 E F1 +(options is:)2.5 E(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E(18) +190.95 E 0 Cg EP +%%Page: 19 19 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(array_expand_once)144 84 Q F1 1.831 +(If set, the shell suppresses multiple e)184 96 R -.25(va)-.25 G 1.832 +(luation of associati).25 F 2.132 -.15(ve a)-.25 H 1.832(nd inde).15 F +-.15(xe)-.15 G 4.332(da).15 G 1.832(rray sub-)-4.332 F .025 +(scripts during arithmetic e)184 108 R .025(xpression e)-.15 F -.25(va) +-.25 G .025(luation, while e).25 F -.15(xe)-.15 G .025(cuting b).15 F +.025(uiltins that can perform)-.2 F -.25(va)184 120 S +(riable assignments, and while e).25 E -.15(xe)-.15 G(cuting b).15 E +(uiltins that perform array dereferencing.)-.2 E F2(assoc_expand_once) +144 132 Q F1(Deprecated; a synon)184 144 Q(ym for)-.15 E F2 +(array_expand_once)2.5 E F1(.)A F2(autocd)144 156 Q F1 .199 +(If set, a command name that is the name of a directory is e)184 156 R -.15(xe)-.15 G .2(cuted as if it were the ar).15 F(gu-)-.18 E -(ment to the)184 421.2 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F +(ment to the)184 168 Q F2(cd)2.5 E F1 2.5(command. This)2.5 F (option is only used by interacti)2.5 E .3 -.15(ve s)-.25 H(hells.).15 E -F1(cdable_v)144 433.2 Q(ars)-.1 E F0 .156(If set, an ar)184 445.2 R .156 -(gument to the)-.18 F F1(cd)2.656 E F0 -.2(bu)2.656 G .155 +F2(cdable_v)144 180 Q(ars)-.1 E F1 .156(If set, an ar)184 192 R .156 +(gument to the)-.18 F F2(cd)2.656 E F1 -.2(bu)2.656 G .155 (iltin command that is not a directory is assumed to be the).2 F -(name of a v)184 457.2 Q(ariable whose v)-.25 E -(alue is the directory to change to.)-.25 E F1(cdspell)144 469.2 Q F0 +(name of a v)184 204 Q(ariable whose v)-.25 E +(alue is the directory to change to.)-.25 E F2(cdspell)144 216 Q F1 1.055 (If set, minor errors in the spelling of a directory component in a)184 -469.2 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.988 -(corrected. The)184 481.2 R 1.488(errors check)3.988 F 1.487 +216 R F2(cd)3.555 E F1 1.055(command will be)3.555 F 3.988 +(corrected. The)184 228 R 1.488(errors check)3.988 F 1.487 (ed for are transposed characters, a missing character)-.1 F 3.987(,a) --.4 G(nd)-3.987 E .77(one character too man)184 493.2 R 4.57 -.65(y. I) +-.4 G(nd)-3.987 E .77(one character too man)184 240 R 4.57 -.65(y. I) -.15 H 3.27(fac).65 G .77 (orrection is found, the corrected \214lename is printed, and)-3.27 F -(the command proceeds.)184 505.2 Q -(This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.) -.15 E F1(checkhash)144 517.2 Q F0 .737(If set,)184 529.2 R F1(bash)3.237 -E F0 .736(checks that a command found in the hash table e)3.237 F .736 -(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184 -541.2 Q(If a hashed command no longer e)5 E -(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 553.2 -Q F0 .448(If set,)184 565.2 R F1(bash)2.948 E F0 .448 +(the command proceeds.)184 252 Q(This option is only used by interacti)5 +E .3 -.15(ve s)-.25 H(hells.).15 E F2(checkhash)144 264 Q F1 .737 +(If set,)184 276 R F2(bash)3.237 E F1 .736 +(checks that a command found in the hash table e)3.237 F .736 +(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184 288 +Q(If a hashed command no longer e)5 E +(xists, a normal path search is performed.)-.15 E F2(checkjobs)144 300 Q +F1 .448(If set,)184 312 R F2(bash)2.948 E F1 .448 (lists the status of an)2.948 F 2.949(ys)-.15 G .449 (topped and running jobs before e)-2.949 F .449(xiting an interacti)-.15 -F -.15(ve)-.25 G 2.662(shell. If)184 577.2 R(an)2.662 E 2.661(yj)-.15 G +F -.15(ve)-.25 G 2.662(shell. If)184 324 R(an)2.662 E 2.661(yj)-.15 G .161(obs are running, this causes the e)-2.661 F .161 (xit to be deferred until a second e)-.15 F .161(xit is at-)-.15 F 1.091 -(tempted without an interv)184 589.2 R 1.091(ening command \(see)-.15 F -/F3 9/Times-Bold@0 SF 1.091(JOB CONTR)3.591 F(OL)-.27 E F0(in)3.341 E F2 -(bash\(1\))3.591 E F0 3.591(\). The)B(shell)3.591 E(al)184 601.2 Q -.1 -(wa)-.1 G(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G -(obs are stopped.)-2.5 E F1(checkwinsize)144 613.2 Q F0 1.09(If set,)184 -625.2 R F1(bash)3.59 E F0 1.09(checks the windo)3.59 F 3.59(ws)-.25 G -1.09(ize after each e)-3.59 F 1.09(xternal \(non-b)-.15 F 1.09 -(uiltin\) command and, if)-.2 F(necessary)184 637.2 Q 3.35(,u)-.65 G .85 -(pdates the v)-3.35 F .85(alues of)-.25 F F3(LINES)3.35 E F0(and)3.1 E -F3(COLUMNS)3.35 E/F4 9/Times-Roman@0 SF(.)A F0 .85 -(This option is enabled by de-)5.35 F -.1(fa)184 649.2 S(ult.).1 E F1 -(cmdhist)144 661.2 Q F0 .173(If set,)184 661.2 R F1(bash)2.673 E F0 .173 +(tempted without an interv)184 336 R 1.091(ening command \(see)-.15 F/F3 +9/Times-Bold@0 SF 1.091(JOB CONTR)3.591 F(OL)-.27 E F1(in)3.341 E F0 +(bash)3.591 E F1 3.591(\(1\)\). The)B(shell)3.591 E(al)184 348 Q -.1(wa) +-.1 G(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G +(obs are stopped.)-2.5 E F2(checkwinsize)144 360 Q F1 1.09(If set,)184 +372 R F2(bash)3.59 E F1 1.09(checks the windo)3.59 F 3.59(ws)-.25 G 1.09 +(ize after each e)-3.59 F 1.09(xternal \(non-b)-.15 F 1.09 +(uiltin\) command and, if)-.2 F(necessary)184 384 Q 3.35(,u)-.65 G .85 +(pdates the v)-3.35 F .85(alues of)-.25 F F3(LINES)3.35 E F1(and)3.1 E +F3(COLUMNS)3.35 E/F4 9/Times-Roman@0 SF(.)A F1 .85 +(This option is enabled by de-)5.35 F -.1(fa)184 396 S(ult.).1 E F2 +(cmdhist)144 408 Q F1 .173(If set,)184 408 R F2(bash)2.673 E F1 .173 (attempts to sa)2.673 F .473 -.15(ve a)-.2 H .172 (ll lines of a multiple-line command in the same history en-).15 F(try) -184 673.2 Q 5.596(.T)-.65 G .597(his allo)-5.596 F .597 +184 420 Q 5.596(.T)-.65 G .597(his allo)-5.596 F .597 (ws easy re-editing of multi-line commands.)-.25 F .597 -(This option is enabled by de-)5.597 F -.1(fa)184 685.2 S .052(ult, b).1 -F .052(ut only has an ef)-.2 F .052 -(fect if command history is enabled, as described in)-.25 F F2 -(bash\(1\))2.552 E F0(under)2.552 E F3(HIST)184 697.2 Q(OR)-.162 E(Y) --.315 E F4(.)A F0(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G -(mber 22).15 E(18)185.545 E 0 Cg EP -%%Page: 19 19 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(compat31)144 84 Q -(compat32)144 96 Q(compat40)144 108 Q(compat41)144 120 Q(compat42)144 -132 Q(compat43)144 144 Q(compat44)144 156 Q(compat50)144 168 Q F0 .889 -(These control aspects of the shell')184 180 R 3.389(sc)-.55 G .889 -(ompatibility mode \(see)-3.389 F/F2 9/Times-Bold@0 SF .889(SHELL COMP) -3.389 F -.855(AT)-.666 G(IBILITY).855 E(MODE)184 192 Q F0(in)2.25 E/F3 -10/Times-Italic@0 SF(bash\(1\))2.5 E F0(\).)A F1(complete_fullquote)144 -208.8 Q F0 .654(If set,)184 220.8 R F1(bash)3.153 E F0 .653(quotes all \ -shell metacharacters in \214lenames and directory names when per)3.153 F -(-)-.2 E 1.524(forming completion.)184 232.8 R 1.524(If not set,)6.524 F -F1(bash)4.024 E F0(remo)4.024 E -.15(ve)-.15 G 4.024(sm).15 G 1.524 +(This option is enabled by de-)5.597 F -.1(fa)184 432 S .052(ult, b).1 F +.052(ut only has an ef)-.2 F .052 +(fect if command history is enabled, as described in)-.25 F F0(bash) +2.552 E F1 .052(\(1\) under)B F3(HIST)184 444 Q(OR)-.162 E(Y)-.315 E F4 +(.)A F2(compat31)144 456 Q(compat32)144 468 Q(compat40)144 480 Q +(compat41)144 492 Q(compat42)144 504 Q(compat43)144 516 Q(compat44)144 +528 Q(compat50)144 540 Q F1 .889(These control aspects of the shell')184 +552 R 3.389(sc)-.55 G .889(ompatibility mode \(see)-3.389 F F3 .889 +(SHELL COMP)3.389 F -.855(AT)-.666 G(IBILITY).855 E(MODE)184 564 Q F1 +(in)2.25 E F0(bash)2.5 E F1(\(1\)\).)A F2(complete_fullquote)144 580.8 Q +F1 .654(If set,)184 592.8 R F2(bash)3.153 E F1 .653(quotes all shell me\ +tacharacters in \214lenames and directory names when per)3.153 F(-)-.2 E +1.524(forming completion.)184 604.8 R 1.524(If not set,)6.524 F F2(bash) +4.024 E F1(remo)4.024 E -.15(ve)-.15 G 4.024(sm).15 G 1.524 (etacharacters such as the dollar sign)-4.024 F 2.667(from the set of c\ haracters that will be quoted in completed \214lenames when these)184 -244.8 R .028(metacharacters appear in shell v)184 256.8 R .028 +616.8 R .028(metacharacters appear in shell v)184 628.8 R .028 (ariable references in w)-.25 F .029(ords to be completed.)-.1 F .029 -(This means)5.029 F 1.073(that dollar signs in v)184 268.8 R 1.073 +(This means)5.029 F 1.073(that dollar signs in v)184 640.8 R 1.073 (ariable names that e)-.25 F 1.073 (xpand to directories will not be quoted; ho)-.15 F(w-)-.25 E -2.15 -.25 -(ev e)184 280.8 T 1.922 -.4(r, a).25 H 1.422 -.15(ny d).4 H 1.123 +(ev e)184 652.8 T 1.922 -.4(r, a).25 H 1.422 -.15(ny d).4 H 1.123 (ollar signs appearing in \214lenames will not be quoted, either).15 F 6.123(.T)-.55 G 1.123(his is acti)-6.123 F -.15(ve)-.25 G .59 (only when bash is using backslashes to quote completed \214lenames.)184 -292.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 304.8 Q +664.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 676.8 Q (ault, which is the def)-.1 E(ault bash beha)-.1 E(vior in v)-.2 E -(ersions through 4.2.)-.15 E F1(dir)144 321.6 Q(expand)-.18 E F0 .486 -(If set,)184 333.6 R F1(bash)2.986 E F0 .486 +(ersions through 4.2.)-.15 E F2(dir)144 693.6 Q(expand)-.18 E F1 .486 +(If set,)184 705.6 R F2(bash)2.986 E F1 .486 (replaces directory names with the results of w)2.986 F .486(ord e)-.1 F .487(xpansion when perform-)-.15 F .18(ing \214lename completion.)184 -345.6 R .179(This changes the contents of the readline editing b)5.18 F +717.6 R .179(This changes the contents of the readline editing b)5.18 F (uf)-.2 E(fer)-.25 E 5.179(.I)-.55 G 2.679(fn)-5.179 G(ot)-2.679 E(set,) -184 357.6 Q F1(bash)2.5 E F0(attempts to preserv)2.5 E 2.5(ew)-.15 G -(hat the user typed.)-2.5 E F1(dirspell)144 374.4 Q F0 .858(If set,)184 -374.4 R F1(bash)3.358 E F0 .858 +184 729.6 Q F2(bash)2.5 E F1(attempts to preserv)2.5 E 2.5(ew)-.15 G +(hat the user typed.)-2.5 E(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 +E(19)190.95 E 0 Cg EP +%%Page: 20 20 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(dirspell)144 84 Q F1 .858(If set,)184 84 R F2(bash) +3.358 E F1 .858 (attempts spelling correction on directory names during w)3.358 F .859 (ord completion if)-.1 F -(the directory name initially supplied does not e)184 386.4 Q(xist.)-.15 -E F1(dotglob)144 403.2 Q F0 .165(If set,)184 403.2 R F1(bash)2.665 E F0 -.165(includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665 -('i)-.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F -(xpansion.)-.15 E(The \214lenames)184 415.2 Q F1 -.63(``)2.5 G -.55(.') -.63 G(')-.08 E F0(and)5 E F1 -.63(``)2.5 G(..).63 E -.63('')-.55 G F0 -(must al)5.63 E -.1(wa)-.1 G(ys be matched e).1 E(xplicitly)-.15 E 2.5 -(,e)-.65 G -.15(ve)-2.75 G 2.5(ni).15 G(f)-2.5 E F1(dotglob)2.5 E F0 -(is set.)2.5 E F1(execfail)144 432 Q F0 .516(If set, a non-interacti)184 -432 R .816 -.15(ve s)-.25 H .516(hell will not e).15 F .516 -(xit if it cannot e)-.15 F -.15(xe)-.15 G .517 -(cute the \214le speci\214ed as an ar).15 F(-)-.2 E(gument to the)184 -444 Q F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E(An interacti)5 E -.3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 E F1(exec)2.5 E F0 --.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 460.8 Q F0 .743 -(If set, aliases are e)184 472.8 R .743(xpanded as described in)-.15 F -F3(bash\(1\))3.243 E F0(under)3.243 E F2(ALIASES)3.243 E/F4 9 -/Times-Roman@0 SF(.)A F0 .742(This option is en-)5.243 F(abled by def) -184 484.8 Q(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1 -(extdeb)144 501.6 Q(ug)-.2 E F0 .17(If set at shell in)184 513.6 R -.2 -(vo)-.4 G .17(cation, or in a shell startup \214le, arrange to e).2 F --.15(xe)-.15 G .17(cute the deb).15 F .17(ugger pro\214le)-.2 F 1.082 -(before the shell starts, identical to the)184 525.6 R F1<adad646562> -3.582 E(ugger)-.2 E F0 3.581(option. If)3.581 F 1.081(set after in)3.581 -F -.2(vo)-.4 G 1.081(cation, be-).2 F(ha)184 537.6 Q -(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184 -554.4 Q F0(The)220 554.4 Q F1<ad46>4.25 E F0 1.75(option to the)4.25 F -F1(declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751 +(the directory name initially supplied does not e)184 96 Q(xist.)-.15 E +F2(dotglob)144 112.8 Q F1 1.021(If set,)184 112.8 R F2(bash)3.521 E F1 +1.021(includes \214lenames be)3.521 F 1.021 +(ginning with a in the results of pathname e)-.15 F(xpansion.)-.15 E +(The \214lenames and must al)184 124.8 Q -.1(wa)-.1 G(ys be matched e).1 +E(xplicitly)-.15 E 2.5(,e)-.65 G -.15(ve)-2.75 G 2.5(ni).15 G(f)-2.5 E +F2(dotglob)2.5 E F1(is set.)2.5 E F2(execfail)144 141.6 Q F1 .516 +(If set, a non-interacti)184 141.6 R .816 -.15(ve s)-.25 H .516 +(hell will not e).15 F .516(xit if it cannot e)-.15 F -.15(xe)-.15 G +.517(cute the \214le speci\214ed as an ar).15 F(-)-.2 E(gument to the) +184 153.6 Q F2(exec)2.5 E F1 -.2(bu)2.5 G(iltin command.).2 E +(An interacti)5 E .3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 +E F2(exec)2.5 E F1 -.1(fa)2.5 G(ils.).1 E F2(expand_aliases)144 170.4 Q +F1 .743(If set, aliases are e)184 182.4 R .743(xpanded as described in) +-.15 F F0(bash)3.243 E F1 .743(\(1\) under)B/F3 9/Times-Bold@0 SF +(ALIASES)3.243 E/F4 9/Times-Roman@0 SF(.)A F1 .742(This option is en-) +5.243 F(abled by def)184 194.4 Q(ault for interacti)-.1 E .3 -.15(ve s) +-.25 H(hells.).15 E F2(extdeb)144 211.2 Q(ug)-.2 E F1 .17 +(If set at shell in)184 223.2 R -.2(vo)-.4 G .17 +(cation, or in a shell startup \214le, arrange to e).2 F -.15(xe)-.15 G +.17(cute the deb).15 F .17(ugger pro\214le)-.2 F 1.082 +(before the shell starts, identical to the)184 235.2 R F2<adad646562> +3.582 E(ugger)-.2 E F1 3.581(option. If)3.581 F 1.081(set after in)3.581 +F -.2(vo)-.4 G 1.081(cation, be-).2 F(ha)184 247.2 Q +(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F2(1.)184 +264 Q F1(The)220 264 Q F2<ad46>4.25 E F1 1.75(option to the)4.25 F F2 +(declar)4.251 E(e)-.18 E F1 -.2(bu)4.251 G 1.751 (iltin displays the source \214le name and line).2 F -(number corresponding to each function name supplied as an ar)220 566.4 -Q(gument.)-.18 E F1(2.)184 583.2 Q F0 1.667(If the command run by the) -220 583.2 R F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v) -4.167 F 1.667(alue, the ne)-.25 F(xt)-.15 E -(command is skipped and not e)220 595.2 Q -.15(xe)-.15 G(cuted.).15 E F1 -(3.)184 612 Q F0 .84(If the command run by the)220 612 R F1(DEB)3.34 E -(UG)-.1 E F0 .841(trap returns a v)3.341 F .841 -(alue of 2, and the shell is)-.25 F -.15(exe)220 624 S .488 +(number corresponding to each function name supplied as an ar)220 276 Q +(gument.)-.18 E F2(2.)184 292.8 Q F1 1.667(If the command run by the)220 +292.8 R F2(DEB)4.167 E(UG)-.1 E F1 1.667(trap returns a non-zero v)4.167 +F 1.667(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220 +304.8 Q -.15(xe)-.15 G(cuted.).15 E F2(3.)184 321.6 Q F1 .84 +(If the command run by the)220 321.6 R F2(DEB)3.34 E(UG)-.1 E F1 .841 +(trap returns a v)3.341 F .841(alue of 2, and the shell is)-.25 F -.15 +(exe)220 333.6 S .488 (cuting in a subroutine \(a shell function or a shell script e).15 F --.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1 -(sour)220 636 Q(ce)-.18 E F0 -.2(bu)2.5 G -(iltins\), the shell simulates a call to).2 E F1 -.18(re)2.5 G(tur).18 E -(n)-.15 E F0(.)A F1(4.)184 652.8 Q F2 -.27(BA)220 652.8 S(SH_ARGC).27 E -F0(and)3.153 E F2 -.27(BA)3.403 G(SH_ARGV).27 E F0 .904 -(are updated as described in their descriptions)3.154 F(in)220 664.8 Q -F3(bash\(1\))2.5 E F0(\).)A F1(5.)184 681.6 Q F0 1.637(Function tracing\ - is enabled: command substitution, shell functions, and sub-)220 681.6 R -(shells in)220 693.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E -F1(\()2.5 E F3(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(DEB)2.5 -E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0(traps.)2.5 E F1(6.)184 710.4 -Q F0 1.082(Error tracing is enabled: command substitution, shell functi\ -ons, and subshells)220 710.4 R(in)220 722.4 Q -.2(vo)-.4 G -.1(ke).2 G -2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F3(command)2.5 E F1(\))2.5 E F0 -(inherit the)2.5 E F1(ERR)2.5 E F0(trap.)2.5 E(GNU Bash 5.2)72 768 Q -(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(19)185.545 E 0 Cg EP -%%Page: 20 20 +-.15(xe)-.15 G .488(cuted by the).15 F F2(.)2.988 E F1(or)2.988 E F2 +(sour)220 345.6 Q(ce)-.18 E F1 -.2(bu)2.5 G +(iltins\), the shell simulates a call to).2 E F2 -.18(re)2.5 G(tur).18 E +(n)-.15 E F1(.)A F2(4.)184 362.4 Q F3 -.27(BA)220 362.4 S(SH_ARGC).27 E +F1(and)3.153 E F3 -.27(BA)3.403 G(SH_ARGV).27 E F1 .904 +(are updated as described in their descriptions)3.154 F(in)220 374.4 Q +F0(bash)2.5 E F1(\(1\)\).)A F2(5.)184 391.2 Q F1 1.637(Function tracing\ + is enabled: command substitution, shell functions, and sub-)220 391.2 R +(shells in)220 403.2 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E +F2(\()2.5 E F0(command)2.5 E F2(\))2.5 E F1(inherit the)2.5 E F2(DEB)2.5 +E(UG)-.1 E F1(and)2.5 E F2(RETURN)2.5 E F1(traps.)2.5 E F2(6.)184 420 Q +F1 1.082(Error tracing is enabled: command substitution, shell function\ +s, and subshells)220 420 R(in)220 432 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw) +.1 G(ith)-2.5 E F2(\()2.5 E F0(command)2.5 E F2(\))2.5 E F1(inherit the) +2.5 E F2(ERR)2.5 E F1(trap.)2.5 E F2(extglob)144 448.8 Q F1 .273 +(If set, the e)184 448.8 R .273 +(xtended pattern matching features described in)-.15 F F0(bash)2.772 E +F1 .272(\(1\) under)B F2 -.1(Pa)2.772 G .272(thname Ex-).1 F(pansion)184 +460.8 Q F1(are enabled.)2.5 E F2(extquote)144 477.6 Q F1 1.929(If set,) +184 489.6 R F2($)4.429 E F0(string)A F1(and)4.429 E F2($)4.429 E F0 +(string)A F1 1.929(quoting is performed within)4.429 F F2(${)4.429 E F0 +(par)A(ameter)-.15 E F2(})A F1 -.15(ex)4.429 G 1.93(pansions en-).15 F +(closed in double quotes.)184 501.6 Q(This option is enabled by def)5 E +(ault.)-.1 E F2(failglob)144 518.4 Q F1 .243(If set, patterns which f) +184 518.4 R .243(ail to match \214lenames during pathname e)-.1 F .243 +(xpansion result in an e)-.15 F(x-)-.15 E(pansion error)184 530.4 Q(.) +-.55 E F2 -.25(fo)144 547.2 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F1 +.936(If set, the suf)184 559.2 R<8c78>-.25 E .936(es speci\214ed by the) +-.15 F F3(FIGNORE)3.436 E F1 .936(shell v)3.186 F .936(ariable cause w) +-.25 F .937(ords to be ignored)-.1 F .32(when performing w)184 571.2 R +.32(ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G +.32(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 3.293 +(pletions. See)184 583.2 R F3 .793(SHELL V)3.293 F(ARIABLES)-1.215 E F1 +(in)3.043 E F0(bash)3.293 E F1 .793(\(1\) for a description of)B F3 +(FIGNORE)3.294 E F4(.)A F1 .794(This op-)5.294 F(tion is enabled by def) +184 595.2 Q(ault.)-.1 E F2(globasciiranges)144 612 Q F1 2.519 +(If set, range e)184 624 R 2.519 +(xpressions used in pattern matching brack)-.15 F 2.518(et e)-.1 F 2.518 +(xpressions \(see)-.15 F F3 -.09(Pa)5.018 G(tter).09 E(n)-.135 E +(Matching)184 636 Q F1(in)3.115 E F0(bash)3.365 E F1 .865(\(1\)\) beha)B +1.165 -.15(ve a)-.2 H 3.365(si).15 G 3.365(fi)-3.365 G 3.365(nt)-3.365 G +.866(he traditional C locale when performing compar)-3.365 F(-)-.2 E +2.668(isons. That)184 648 R .168(is, the current locale')2.668 F 2.668 +(sc)-.55 G .168(ollating sequence is not tak)-2.668 F .168 +(en into account, so)-.1 F F2(b)2.668 E F1(will)2.668 E .562 +(not collate between)184 660 R F2(A)3.062 E F1(and)3.062 E F2(B)3.062 E +F1 3.062(,a)C .562(nd upper)-3.062 F .562(-case and lo)-.2 F(wer)-.25 E +.563(-case ASCII characters will col-)-.2 F(late together)184 672 Q(.) +-.55 E F2(globskipdots)144 688.8 Q F1 .294(If set, pathname e)184 700.8 +R .294(xpansion will ne)-.15 F -.15(ve)-.25 G 2.794(rm).15 G .294 +(atch the \214lenames and e)-2.794 F -.15(ve)-.25 G 2.793(ni).15 G 2.793 +(ft)-2.793 G .293(he pattern be)-2.793 F(gins)-.15 E +(with a This option is enabled by def)184 712.8 Q(ault.)-.1 E +(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E(20)190.95 E 0 Cg EP +%%Page: 21 21 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(extglob)144 84 Q F0 -.273(If set, the e)184 84 R .273 -(xtended pattern matching features described in)-.15 F/F2 10 -/Times-Italic@0 SF(bash\(1\))2.772 E F0(under)2.772 E F1 -.1(Pa)2.772 G -.272(thname Ex-).1 F(pansion)184 96 Q F0(are enabled.)2.5 E F1(extquote) -144 112.8 Q F0 .86(If set,)184 124.8 R F1($)3.36 E F0<08>A F2(string)A -F0 3.36<0861>C(nd)-3.36 E F1($)3.36 E F0(")A F2(string)A F0 3.36("q)C -.86(uoting is performed within)-3.36 F F1(${)3.36 E F2(par)A(ameter)-.15 -E F1(})A F0 -.15(ex)3.36 G .86(pansions en-).15 F -(closed in double quotes.)184 136.8 Q(This option is enabled by def)5 E -(ault.)-.1 E F1(failglob)144 153.6 Q F0 .243(If set, patterns which f) -184 153.6 R .243(ail to match \214lenames during pathname e)-.1 F .243 -(xpansion result in an e)-.15 F(x-)-.15 E(pansion error)184 165.6 Q(.) --.55 E F1 -.25(fo)144 182.4 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0 -.936(If set, the suf)184 194.4 R<8c78>-.25 E .936(es speci\214ed by the) --.15 F/F3 9/Times-Bold@0 SF(FIGNORE)3.436 E F0 .936(shell v)3.186 F .936 -(ariable cause w)-.25 F .937(ords to be ignored)-.1 F .32 -(when performing w)184 206.4 R .32(ord completion e)-.1 F -.15(ve)-.25 G -2.82(ni).15 G 2.82(ft)-2.82 G .32(he ignored w)-2.82 F .32 -(ords are the only possible com-)-.1 F 3.293(pletions. See)184 218.4 R -F3 .793(SHELL V)3.293 F(ARIABLES)-1.215 E F0(in)3.043 E F2(bash\(1\)) -3.293 E F0 .794(for a description of)3.293 F F3(FIGNORE)3.294 E/F4 9 -/Times-Roman@0 SF(.)A F0 .794(This op-)5.294 F(tion is enabled by def) -184 230.4 Q(ault.)-.1 E F1(globasciiranges)144 247.2 Q F0 2.519 -(If set, range e)184 259.2 R 2.519 -(xpressions used in pattern matching brack)-.15 F 2.518(et e)-.1 F 2.518 -(xpressions \(see)-.15 F F3 -.09(Pa)5.018 G(tter).09 E(n)-.135 E -(Matching)184 271.2 Q F0(in)3.115 E F2(bash\(1\))3.365 E F0 3.365(\)b)C -(eha)-3.365 E 1.165 -.15(ve a)-.2 H 3.365(si).15 G 3.365(fi)-3.365 G -3.365(nt)-3.365 G .866(he traditional C locale when performing compar) --3.365 F(-)-.2 E 2.668(isons. That)184 283.2 R .168 -(is, the current locale')2.668 F 2.668(sc)-.55 G .168 -(ollating sequence is not tak)-2.668 F .168(en into account, so)-.1 F F1 -(b)2.668 E F0(will)2.668 E .562(not collate between)184 295.2 R F1(A) -3.062 E F0(and)3.062 E F1(B)3.062 E F0 3.062(,a)C .562(nd upper)-3.062 F -.562(-case and lo)-.2 F(wer)-.25 E .563 -(-case ASCII characters will col-)-.2 F(late together)184 307.2 Q(.)-.55 -E F1(globskipdots)144 324 Q F0 .285(If set, pathname e)184 336 R .285 -(xpansion will ne)-.15 F -.15(ve)-.25 G 2.785(rm).15 G .285 -(atch the \214lenames)-2.785 F F1 -.63(``)2.785 G -.55(.').63 G(')-.08 E -F0(and)5.285 E F1 -.63(``)2.784 G(..).63 E -.63('')-.55 G F0 2.784(,e) -.63 G -.15(ve)-3.034 G 2.784(ni).15 G 2.784(ft)-2.784 G .284(he pat-) --2.784 F(tern be)184 348 Q(gins with a)-.15 E F1 -.63(``)2.5 G -.55(.') -.63 G(')-.08 E F0 5(.T)C(his option is enabled by def)-5 E(ault.)-.1 E -F1(globstar)144 364.8 Q F0 .518(If set, the pattern)184 364.8 R F1(**) -3.018 E F0 .519(used in a pathname e)3.019 F .519(xpansion conte)-.15 F -.519(xt will match all \214les and zero)-.15 F .432 -(or more directories and subdirectories.)184 376.8 R .431 -(If the pattern is follo)5.432 F .431(wed by a)-.25 F F1(/)2.931 E F0 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(globstar)144 84 Q F1 .518(If set, the pattern)184 84 R +F2(**)3.018 E F1 .519(used in a pathname e)3.019 F .519(xpansion conte) +-.15 F .519(xt will match all \214les and zero)-.15 F .432 +(or more directories and subdirectories.)184 96 R .431 +(If the pattern is follo)5.432 F .431(wed by a)-.25 F F2(/)2.931 E F1 2.931(,o)C .431(nly directories)-2.931 F(and subdirectories match.)184 -388.8 Q F1(gnu_errfmt)144 405.6 Q F0(If set, shell error messages are w\ -ritten in the standard GNU error message format.)184 417.6 Q F1 -(histappend)144 434.4 Q F0 .676 +108 Q F2(gnu_errfmt)144 124.8 Q F1(If set, shell error messages are wri\ +tten in the standard GNU error message format.)184 136.8 Q F2 +(histappend)144 153.6 Q F1 .676 (If set, the history list is appended to the \214le named by the v)184 -446.4 R .676(alue of the)-.25 F F3(HISTFILE)3.177 E F0 -.25(va)2.927 G -(ri-).25 E(able when the shell e)184 458.4 Q(xits, rather than o)-.15 E --.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 475.2 Q(eedit) --.18 E F0 .576(If set, and)184 487.2 R F1 -.18(re)3.076 G(adline).18 E -F0 .575(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15 -G .575(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F -(tory substitution.)184 499.2 Q F1(histv)144 516 Q(erify)-.1 E F0 .402 -(If set, and)184 528 R F1 -.18(re)2.903 G(adline).18 E F0 .403 +165.6 R .676(alue of the)-.25 F/F3 9/Times-Bold@0 SF(HISTFILE)3.177 E F1 +-.25(va)2.927 G(ri-).25 E(able when the shell e)184 177.6 Q +(xits, rather than o)-.15 E -.15(ve)-.15 G(rwriting the \214le.).15 E F2 +(histr)144 194.4 Q(eedit)-.18 E F1 .576(If set, and)184 206.4 R F2 -.18 +(re)3.076 G(adline).18 E F1 .575(is being used, a user is gi)3.076 F +-.15(ve)-.25 G 3.075(nt).15 G .575(he opportunity to re-edit a f)-3.075 +F .575(ailed his-)-.1 F(tory substitution.)184 218.4 Q F2(histv)144 +235.2 Q(erify)-.1 E F1 .402(If set, and)184 247.2 R F2 -.18(re)2.903 G +(adline).18 E F1 .403 (is being used, the results of history substitution are not immediately) -2.903 F .662(passed to the shell parser)184 540 R 5.662(.I)-.55 G .661 -(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161 -G(adline).18 E F0(editing)3.161 E -.2(bu)184 552 S -.25(ff).2 G(er).25 E -2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1 -(hostcomplete)144 568.8 Q F0 1.181(If set, and)184 580.8 R F1 -.18(re) -3.681 G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 -1.182(will attempt to perform hostname completion)3.682 F .503(when a w) -184 592.8 R .503(ord containing a)-.1 F F1(@)3.003 E F0 .503 -(is being completed \(see)3.003 F F1(Completing)3.003 E F0(under)3.003 E -F3(READLINE)3.003 E F0(in)2.752 E F2(bash\(1\))184 604.8 Q F0 2.5 -(\). This)B(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 621.6 Q -F0(If set,)184 633.6 Q F1(bash)2.5 E F0(will send)2.5 E F3(SIGHUP)2.5 E -F0(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H -(ogin shell e).15 E(xits.)-.15 E F1(inherit_err)144 650.4 Q(exit)-.18 E -F0 .219(If set, command substitution inherits the v)184 662.4 R .219 -(alue of the)-.25 F F1(err)2.719 E(exit)-.18 E F0 .22 -(option, instead of unsetting)2.719 F(it in the subshell en)184 674.4 Q -2.5(vironment. This)-.4 F(option is enabled when)2.5 E F2(posix mode)2.5 -E F0(is enabled.)2.5 E F1(interacti)144 691.2 Q -.1(ve)-.1 G(_comments) -.1 E F0 .33(If set, allo)184 703.2 R 2.83(waw)-.25 G .33(ord be)-2.93 F -.33(ginning with)-.15 F F1(#)2.83 E F0 .33(to cause that w)2.83 F .33 +2.903 F .662(passed to the shell parser)184 259.2 R 5.662(.I)-.55 G .661 +(nstead, the resulting line is loaded into the)-5.662 F F2 -.18(re)3.161 +G(adline).18 E F1(editing)3.161 E -.2(bu)184 271.2 S -.25(ff).2 G(er).25 +E 2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F2 +(hostcomplete)144 288 Q F1 1.181(If set, and)184 300 R F2 -.18(re)3.681 +G(adline).18 E F1 1.181(is being used,)3.681 F F2(bash)3.682 E F1 1.182 +(will attempt to perform hostname completion)3.682 F .503(when a w)184 +312 R .503(ord containing a)-.1 F F2(@)3.003 E F1 .503 +(is being completed \(see)3.003 F F2(Completing)3.003 E F1(under)3.003 E +F3(READLINE)3.003 E F1(in)2.752 E F0(bash)184 324 Q F1 2.5 +(\(1\)\). This)B(is enabled by def)2.5 E(ault.)-.1 E F2(huponexit)144 +340.8 Q F1(If set,)184 352.8 Q F2(bash)2.5 E F1(will send)2.5 E F3 +(SIGHUP)2.5 E F1(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 +H(ogin shell e).15 E(xits.)-.15 E F2(inherit_err)144 369.6 Q(exit)-.18 E +F1 .219(If set, command substitution inherits the v)184 381.6 R .219 +(alue of the)-.25 F F2(err)2.719 E(exit)-.18 E F1 .22 +(option, instead of unsetting)2.719 F(it in the subshell en)184 393.6 Q +2.5(vironment. This)-.4 F(option is enabled when)2.5 E F0(posix mode)2.5 +E F1(is enabled.)2.5 E F2(interacti)144 410.4 Q -.1(ve)-.1 G(_comments) +.1 E F1 .33(If set, allo)184 422.4 R 2.83(waw)-.25 G .33(ord be)-2.93 F +.33(ginning with)-.15 F F2(#)2.83 E F1 .33(to cause that w)2.83 F .33 (ord and all remaining characters on)-.1 F .39 -(that line to be ignored in an interacti)184 715.2 R .69 -.15(ve s)-.25 -H .39(hell \(see).15 F F3(COMMENTS)2.89 E F0(in)2.64 E F2(bash\(1\))2.89 -E F0 2.89(\). This)B(option)2.89 E(is enabled by def)184 727.2 Q(ault.) --.1 E(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 -E(20)185.545 E 0 Cg EP -%%Page: 21 21 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(lastpipe)144 84 Q F0 -.066(If set, and job control is not acti)184 84 R -.15(ve)-.25 G 2.566 +(that line to be ignored in an interacti)184 434.4 R .69 -.15(ve s)-.25 +H .39(hell \(see).15 F F3(COMMENTS)2.89 E F1(in)2.64 E F0(bash)2.89 E F1 +2.89(\(1\)\). This)B(option)2.89 E(is enabled by def)184 446.4 Q(ault.) +-.1 E F2(lastpipe)144 463.2 Q F1 .066 +(If set, and job control is not acti)184 463.2 R -.15(ve)-.25 G 2.566 (,t).15 G .066(he shell runs the last command of a pipeline not e)-2.566 F -.15(xe)-.15 G(-).15 E -(cuted in the background in the current shell en)184 96 Q(vironment.)-.4 -E F1(lithist)144 112.8 Q F0 .654(If set, and the)184 112.8 R F1(cmdhist) -3.154 E F0 .654(option is enabled, multi-line commands are sa)3.154 F +(cuted in the background in the current shell en)184 475.2 Q(vironment.) +-.4 E F2(lithist)144 492 Q F1 .654(If set, and the)184 492 R F2(cmdhist) +3.154 E F1 .654(option is enabled, multi-line commands are sa)3.154 F -.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history)-3.155 F -(with embedded ne)184 124.8 Q -(wlines rather than using semicolon separators where possible.)-.25 E F1 -(localv)144 141.6 Q(ar_inherit)-.1 E F0 .422(If set, local v)184 153.6 R +(with embedded ne)184 504 Q +(wlines rather than using semicolon separators where possible.)-.25 E F2 +(localv)144 520.8 Q(ar_inherit)-.1 E F1 .422(If set, local v)184 532.8 R .422(ariables inherit the v)-.25 F .422(alue and attrib)-.25 F .422 (utes of a v)-.2 F .422(ariable of the same name that)-.25 F -.15(ex)184 -165.6 S .173(ists at a pre).15 F .173(vious scope before an)-.25 F 2.673 +544.8 S .173(ists at a pre).15 F .173(vious scope before an)-.25 F 2.673 (yn)-.15 G .673 -.25(ew va)-2.673 H .173(lue is assigned.).25 F .174 -(The nameref attrib)5.174 F .174(ute is not)-.2 F(inherited.)184 177.6 Q -F1(localv)144 194.4 Q(ar_unset)-.1 E F0 .329(If set, calling)184 206.4 R -F1(unset)2.829 E F0 .329(on local v)2.829 F .329(ariables in pre)-.25 F +(The nameref attrib)5.174 F .174(ute is not)-.2 F(inherited.)184 556.8 Q +F2(localv)144 573.6 Q(ar_unset)-.1 E F1 .329(If set, calling)184 585.6 R +F2(unset)2.829 E F1 .329(on local v)2.829 F .329(ariables in pre)-.25 F .328(vious function scopes marks them so subse-)-.25 F .543(quent looku\ ps \214nd them unset until that function returns. This is identical to \ -the beha)184 218.4 R(v-)-.2 E(ior of unsetting local v)184 230.4 Q -(ariables at the current function scope.)-.25 E F1(login_shell)144 247.2 -Q F0 .693 +the beha)184 597.6 R(v-)-.2 E(ior of unsetting local v)184 609.6 Q +(ariables at the current function scope.)-.25 E F2(login_shell)144 626.4 +Q F1 .693 (The shell sets this option if it is started as a login shell \(see)184 -259.2 R/F2 9/Times-Bold@0 SF(INV)3.192 E(OCA)-.405 E(TION)-.855 E F0(in) -2.942 E/F3 10/Times-Italic@0 SF(bash\(1\))3.192 E F0(\).)A(The v)184 -271.2 Q(alue may not be changed.)-.25 E F1(mailwar)144 288 Q(n)-.15 E F0 -.814(If set, and a \214le that)184 300 R F1(bash)3.314 E F0 .815 +638.4 R F3(INV)3.192 E(OCA)-.405 E(TION)-.855 E F1(in)2.942 E F0(bash) +3.192 E F1(\(1\)\).)A(The v)184 650.4 Q(alue may not be changed.)-.25 E +F2(mailwar)144 667.2 Q(n)-.15 E F1 .814(If set, and a \214le that)184 +679.2 R F2(bash)3.314 E F1 .815 (is checking for mail has been accessed since the last time it)3.314 F --.1(wa)184 312 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E -(`The mail in)-.74 E F3(mail\214le)2.5 E F0(has been read')2.5 E 2.5('i) --.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1(no_empty_cmd_completion)144 -328.8 Q F0 .325(If set, and)184 340.8 R F1 -.18(re)2.825 G(adline).18 E -F0 .325(is being used,)2.825 F F1(bash)2.824 E F0 .324 -(will not attempt to search the)2.824 F F2 -.666(PA)2.824 G(TH)-.189 E -F0 .324(for possible)2.574 F -(completions when completion is attempted on an empty line.)184 352.8 Q -F1(nocaseglob)144 369.6 Q F0 .436(If set,)184 381.6 R F1(bash)2.936 E F0 +-.1(wa)184 691.2 S 2.5(sc).1 G(heck)-2.5 E(ed,)-.1 E F2(bash)2.5 E F1 +(displays the message)2.5 E(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 +E(21)190.95 E 0 Cg EP +%%Page: 22 22 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(no_empty_cmd_completion)144 84 Q F1 .325(If set, and) +184 96 R F2 -.18(re)2.825 G(adline).18 E F1 .325(is being used,)2.825 F +F2(bash)2.824 E F1 .324(will not attempt to search the)2.824 F/F3 9 +/Times-Bold@0 SF -.666(PA)2.824 G(TH)-.189 E F1 .324(for possible)2.574 +F(completions when completion is attempted on an empty line.)184 108 Q +F2(nocaseglob)144 124.8 Q F1 .436(If set,)184 136.8 R F2(bash)2.936 E F1 .436(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f) --.25 H .437(ashion when performing pathname).05 F -.15(ex)184 393.6 S -(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(in)2.5 E -F3(bash\(1\))2.5 E F0(\).)A F1(nocasematch)144 410.4 Q F0 1.194(If set,) -184 422.4 R F1(bash)3.694 E F0 1.194 +-.25 H .437(ashion when performing pathname).05 F -.15(ex)184 148.8 S +(pansion \(see).15 E F2 -.1(Pa)2.5 G(thname Expansion).1 E F1(in)2.5 E +F0(bash)2.5 E F1(\(1\)\).)A F2(nocasematch)144 165.6 Q F1 1.194(If set,) +184 177.6 R F2(bash)3.694 E F1 1.194 (matches patterns in a case\255insensiti)3.694 F 1.493 -.15(ve f)-.25 H -1.193(ashion when performing matching).05 F .551(while e)184 434.4 R --.15(xe)-.15 G(cuting).15 E F1(case)3.051 E F0(or)3.051 E F1([[)3.051 E -F0 .551(conditional commands, when performing pattern substitution)3.051 -F -.1(wo)184 446.4 S .623(rd e).1 F .623(xpansions, or when \214ltering\ +1.193(ashion when performing matching).05 F .551(while e)184 189.6 R +-.15(xe)-.15 G(cuting).15 E F2(case)3.051 E F1(or)3.051 E F2([[)3.051 E +F1 .551(conditional commands, when performing pattern substitution)3.051 +F -.1(wo)184 201.6 S .623(rd e).1 F .623(xpansions, or when \214ltering\ possible completions as part of programmable com-)-.15 F(pletion.)184 -458.4 Q F1(noexpand_translation)144 475.2 Q F0 1.117(If set,)184 487.2 R -F1(bash)3.617 E F0 1.117(encloses the translated results of $"..." quot\ -ing in single quotes instead of)3.617 F(double quotes.)184 499.2 Q -(If the string is not translated, this has no ef)5 E(fect.)-.25 E F1 -(nullglob)144 516 Q F0 .319(If set,)184 528 R F1(bash)2.819 E F0(allo) -2.819 E .319(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa) -2.818 G .318(thname Expansion).1 F F0(in)2.818 E F3(bash\(1\))2.818 E F0 -(\))A(to e)184 540 Q(xpand to a null string, rather than themselv)-.15 E -(es.)-.15 E F1(patsub_r)144 556.8 Q(eplacement)-.18 E F0 .105(If set,) -184 568.8 R F1(bash)2.605 E F0 -.15(ex)2.605 G .105 -(pands occurrences of).15 F F1(&)2.606 E F0 .106 -(in the replacement string of pattern substitution to)2.606 F .989 -(the te)184 580.8 R .988(xt matched by the pattern, as described under) --.15 F F1 -.1(Pa)3.488 G .988(rameter Expansion).1 F F0(in)3.488 E F3 -(bash\(1\))3.488 E F0(.)A(This option is enabled by def)184 592.8 Q -(ault.)-.1 E F1(pr)144 609.6 Q(ogcomp)-.18 E F0 2.802 -(If set, the programmable completion f)184 621.6 R 2.802 -(acilities \(see)-.1 F F1(Pr)5.302 E 2.803(ogrammable Completion)-.18 F -F0(in)5.303 E F3(bash\(1\))184 633.6 Q F0 2.5(\)a)C(re enabled.)-2.5 E -(This option is enabled by def)5 E(ault.)-.1 E F1(pr)144 650.4 Q -(ogcomp_alias)-.18 E F0 2.124 -(If set, and programmable completion is enabled,)184 662.4 R F1(bash) -4.624 E F0 2.124(treats a command name that)4.624 F(doesn')184 674.4 Q +213.6 Q F2(noexpand_translation)144 230.4 Q F1 1.462(If set,)184 242.4 R +F2(bash)3.962 E F1 1.462(encloses the translated results of)3.962 F F2 +($)3.962 E F1 -1.87 1.666(... q)D 1.462 +(uoting in single quotes instead of)-1.666 F(double quotes.)184 254.4 Q +(If the string is not translated, this has no ef)5 E(fect.)-.25 E F2 +(nullglob)144 271.2 Q F1 .593(If set, pathname e)184 283.2 R .593 +(xpansion patterns which match no \214les \(see)-.15 F F2 -.1(Pa)3.092 G +.592(thname Expansion).1 F F1(in)3.092 E F0(bash)184 295.2 Q F1 +(\(1\)\) e)A(xpand to nothing and are remo)-.15 E -.15(ve)-.15 G +(d, rather than e).15 E(xpanding to themselv)-.15 E(es.)-.15 E F2 +(patsub_r)144 312 Q(eplacement)-.18 E F1 .105(If set,)184 324 R F2(bash) +2.605 E F1 -.15(ex)2.605 G .105(pands occurrences of).15 F F2(&)2.606 E +F1 .106(in the replacement string of pattern substitution to)2.606 F +.989(the te)184 336 R .988 +(xt matched by the pattern, as described under)-.15 F F2 -.1(Pa)3.488 G +.988(rameter Expansion).1 F F1(in)3.488 E F0(bash)3.488 E F1(\(1\).)A +(This option is enabled by def)184 348 Q(ault.)-.1 E F2(pr)144 364.8 Q +(ogcomp)-.18 E F1 2.802(If set, the programmable completion f)184 376.8 +R 2.802(acilities \(see)-.1 F F2(Pr)5.302 E 2.803(ogrammable Completion) +-.18 F F1(in)5.303 E F0(bash)184 388.8 Q F1(\(1\)\) are enabled.)A +(This option is enabled by def)5 E(ault.)-.1 E F2(pr)144 405.6 Q +(ogcomp_alias)-.18 E F1 2.124 +(If set, and programmable completion is enabled,)184 417.6 R F2(bash) +4.624 E F1 2.124(treats a command name that)4.624 F(doesn')184 429.6 Q 3.288(th)-.18 G -2.25 -.2(av e)-3.288 H(an)3.488 E 3.288(yc)-.15 G .789 (ompletions as a possible alias and attempts alias e)-3.288 F .789 -(xpansion. If it has)-.15 F 1.473(an alias,)184 686.4 R F1(bash)3.973 E -F0 1.473(attempts programmable completion using the command w)3.973 F -1.473(ord resulting)-.1 F(from the e)184 698.4 Q(xpanded alias.)-.15 E -(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E -(21)185.545 E 0 Cg EP -%%Page: 22 22 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(pr)144 84 Q(omptv) --.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)184 96 R 1.448 -(go parameter e)-.18 F 1.448(xpansion, command substitution, arithmetic) --.15 F -.15(ex)184 108 S 1.834(pansion, and quote remo).15 F -.25(va) --.15 G 4.334(la).25 G 1.834(fter being e)-4.334 F 1.834 -(xpanded as described in)-.15 F/F2 9/Times-Bold@0 SF(PR)4.333 E(OMPTING) --.27 E F0(in)4.083 E/F3 10/Times-Italic@0 SF(bash\(1\))184 120 Q F0 5 -(.T)C(his option is enabled by def)-5 E(ault.)-.1 E F1 -.18(re)144 136.8 -S(stricted_shell).18 E F0 .329 +(xpansion. If it has)-.15 F 1.473(an alias,)184 441.6 R F2(bash)3.973 E +F1 1.473(attempts programmable completion using the command w)3.973 F +1.473(ord resulting)-.1 F(from the e)184 453.6 Q(xpanded alias.)-.15 E +F2(pr)144 470.4 Q(omptv)-.18 E(ars)-.1 E F1 1.447 +(If set, prompt strings under)184 482.4 R 1.448(go parameter e)-.18 F +1.448(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184 +494.4 S 1.834(pansion, and quote remo).15 F -.25(va)-.15 G 4.334(la).25 +G 1.834(fter being e)-4.334 F 1.834(xpanded as described in)-.15 F F3 +(PR)4.333 E(OMPTING)-.27 E F1(in)4.083 E F0(bash)184 506.4 Q F1 2.5 +(\(1\). This)B(option is enabled by def)2.5 E(ault.)-.1 E F2 -.18(re)144 +523.2 S(stricted_shell).18 E F1 .329 (The shell sets this option if it is started in restricted mode \(see) -184 148.8 R F2 .329(RESTRICTED SHELL)2.829 F F0(in)2.58 E F3(bash\(1\)) -184 160.8 Q F0 2.731(\). The)B -.25(va)2.731 G .231 +184 535.2 R F3 .329(RESTRICTED SHELL)2.829 F F1(in)2.58 E F0(bash)184 +547.2 Q F1 2.731(\(1\)\). The)B -.25(va)2.731 G .231 (lue may not be changed.).25 F .23 (This is not reset when the startup \214les are e)5.231 F(x-)-.15 E -(ecuted, allo)184 172.8 Q(wing the startup \214les to disco)-.25 E -.15 -(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 E F1 -(shift_v)144 189.6 Q(erbose)-.1 E F0 .501(If set, the)184 201.6 R F1 -(shift)3.001 E F0 -.2(bu)3.001 G .501 +(ecuted, allo)184 559.2 Q(wing the startup \214les to disco)-.25 E -.15 +(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 E F2 +(shift_v)144 576 Q(erbose)-.1 E F1 .501(If set, the)184 588 R F2(shift) +3.001 E F1 -.2(bu)3.001 G .501 (iltin prints an error message when the shift count e).2 F .502 -(xceeds the number)-.15 F(of positional parameters.)184 213.6 Q F1(sour) -144 230.4 Q(cepath)-.18 E F0 .771(If set, the)184 242.4 R F1(.)3.271 E -F0(\()3.271 E F1(sour)A(ce)-.18 E F0 3.271(\)b)C .771(uiltin uses the v) --3.471 F .771(alue of)-.25 F F2 -.666(PA)3.27 G(TH)-.189 E F0 .77 +(xceeds the number)-.15 F(of positional parameters.)184 600 Q F2(sour) +144 616.8 Q(cepath)-.18 E F1 .771(If set, the)184 628.8 R F2(.)3.271 E +F1(\()3.271 E F2(sour)A(ce)-.18 E F1 3.271(\)b)C .771(uiltin uses the v) +-3.471 F .771(alue of)-.25 F F3 -.666(PA)3.27 G(TH)-.189 E F1 .77 (to \214nd the directory containing the)3.02 F(\214le supplied as an ar) -184 254.4 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E -(ault.)-.1 E F1 -.1(va)144 271.2 S(rr).1 E(edir_close)-.18 E F0 .74(If \ +184 640.8 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E +(ault.)-.1 E F2 -.1(va)144 657.6 S(rr).1 E(edir_close)-.18 E F1 .74(If \ set, the shell automatically closes \214le descriptors assigned using t\ -he)184 283.2 R F3({varname})3.24 E F0(redi-)3.24 E .908 -(rection syntax \(see)184 295.2 R F2(REDIRECTION)3.408 E F0(in)3.157 E -F3(bash\(1\))3.407 E F0 3.407(\)i)C .907(nstead of lea)-3.407 F .907 -(ving them open when the)-.2 F(command completes.)184 307.2 Q F1 -(xpg_echo)144 324 Q F0(If set, the)184 336 Q F1(echo)2.5 E F0 -.2(bu)2.5 -G(iltin e).2 E(xpands backslash-escape sequences by def)-.15 E(ault.)-.1 -E F1(suspend)108 352.8 Q F0([)2.5 E F1<ad66>A F0(])A .909(Suspend the e) -144 364.8 R -.15(xe)-.15 G .909(cution of this shell until it recei).15 -F -.15(ve)-.25 G 3.41(sa).15 G F2(SIGCONT)A F0 3.41(signal. A)3.16 F .91 -(login shell, or a shell)3.41 F .753 -(without job control enabled, cannot be suspended; the)144 376.8 R F1 -<ad66>3.253 E F0 .752(option can be used to o)3.252 F -.15(ve)-.15 G -.752(rride this and).15 F .107(force the suspension.)144 388.8 R .107(T\ -he return status is 0 unless the shell is a login shell or job control \ -is not en-)5.107 F(abled and)144 400.8 Q F1<ad66>2.5 E F0 -(is not supplied.)2.5 E F1(test)108 417.6 Q F3 -.2(ex)2.5 G(pr).2 E F1 -([)108 429.6 Q F3 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 .878 -(Return a status of 0 \(true\) or 1 \(f)144 429.6 R .877 -(alse\) depending on the e)-.1 F -.25(va)-.25 G .877 -(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)144 441.6 -S(pr).2 E F0 5.53(.E).73 G .53 -(ach operator and operand must be a separate ar)-5.53 F 3.03 -(gument. Expressions)-.18 F .53(are composed of the)3.03 F 1.232 -(primaries described in)144 453.6 R F3(bash\(1\))3.732 E F0(under)3.731 -E F2(CONDITION)3.731 E 1.231(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF -(.)A F1(test)5.731 E F0 1.231(does not accept an)3.731 F(y)-.15 E -(options, nor does it accept and ignore an ar)144 465.6 Q(gument of)-.18 -E F1<adad>2.5 E F0(as signifying the end of options.)2.5 E .785 -(Expressions may be combined using the follo)144 483.6 R .786 -(wing operators, listed in decreasing order of prece-)-.25 F 3.412 -(dence. The)144 495.6 R -.25(eva)3.412 G .912 -(luation depends on the number of ar).25 F .911(guments; see belo)-.18 F -4.711 -.65(w. O)-.25 H .911(perator precedence is).65 F -(used when there are \214v)144 507.6 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G -(ore ar)-2.5 E(guments.)-.18 E F1(!)144 519.6 Q F3 -.2(ex)2.5 G(pr).2 E -F0 -.35(Tr)180 519.6 S(ue if).35 E F3 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 -E(alse.)-.1 E F1(\()144 531.6 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 -.26(Returns the v)180 531.6 R .26(alue of)-.25 F F3 -.2(ex)2.76 G(pr).2 -E F0 5.26(.T)C .26(his may be used to o)-5.26 F -.15(ve)-.15 G .26 -(rride the normal precedence of opera-).15 F(tors.)180 543.6 Q F3 -.2 -(ex)144 555.6 S(pr1).2 E F0<ad>2.5 E F1(a)A F3 -.2(ex)2.5 G(pr2).2 E F0 --.35(Tr)180 567.6 S(ue if both).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 -E F3 -.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E F3 -.2(ex)144 579.6 S -(pr1).2 E F0<ad>2.5 E F1(o)A F3 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 -591.6 S(ue if either).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F3 -.2 -(ex)2.5 G(pr2).2 E F0(is true.)2.52 E F1(test)144 608.4 Q F0(and)2.5 E -F1([)2.5 E F0 -.25(eva)2.5 G(luate conditional e).25 E -(xpressions using a set of rules based on the number of ar)-.15 E -(guments.)-.18 E 2.5(0a)144 626.4 S -.18(rg)-2.5 G(uments).18 E(The e) -180 638.4 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 650.4 S -.18 -(rg)-2.5 G(ument).18 E(The e)180 662.4 Q -(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18 -E 2.5(2a)144 674.4 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar) -180 686.4 R .37(gument is)-.18 F F1(!)2.87 E F0 2.87(,t)C .37(he e)-2.87 -F .37(xpression is true if and only if the second ar)-.15 F .37 -(gument is null.)-.18 F 1.682(If the \214rst ar)180 698.4 R 1.683 -(gument is one of the unary conditional operators listed in)-.18 F F3 -(bash\(1\))4.183 E F0(under)4.183 E F2(CONDITION)180 710.4 Q .122 -(AL EXPRESSIONS)-.18 F F4(,)A F0 .122(the e)2.372 F .122 -(xpression is true if the unary test is true.)-.15 F .121 -(If the \214rst)5.121 F(ar)180 722.4 Q(gument is not a v)-.18 E -(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E -(xpression is f)-.15 E(alse.)-.1 E(GNU Bash 5.2)72 768 Q(2021 No)136.385 -E -.15(ve)-.15 G(mber 22).15 E(22)185.545 E 0 Cg EP +he)184 669.6 R F0({varname})3.24 E F1(redi-)3.24 E .908 +(rection syntax \(see)184 681.6 R F3(REDIRECTION)3.408 E F1(in)3.157 E +F0(bash)3.407 E F1 .907(\(1\)\) instead of lea)B .907 +(ving them open when the)-.2 F(command completes.)184 693.6 Q +(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E(22)190.95 E 0 Cg EP %%Page: 23 23 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E 2.5(3a)144 84 S -.18(rg)-2.5 G(uments).18 E -.236(The follo)180 96 R .236 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(xpg_echo)144 84 Q F1 .073(If set, the)184 96 R F2(echo) +2.574 E F1 -.2(bu)2.574 G .074(iltin e).2 F .074 +(xpands backslash-escape sequences by def)-.15 F 2.574(ault. If)-.1 F +(the)2.574 E F2(posix)2.574 E F1(shell)2.574 E(option is also enabled,) +184 108 Q F2(echo)2.5 E F1(does not interpret an)2.5 E 2.5(yo)-.15 G +(ptions.)-2.5 E F2(suspend)108 124.8 Q F1([)2.5 E F2<ad66>A F1(])A .91 +(Suspend the e)144 136.8 R -.15(xe)-.15 G .91 +(cution of this shell until it recei).15 F -.15(ve)-.25 G 3.41(sa).15 G +/F3 9/Times-Bold@0 SF(SIGCONT)-.001 E F1 3.409(signal. A)3.159 F .909 +(login shell, or a shell)3.409 F .752 +(without job control enabled, cannot be suspended; the)144 148.8 R F2 +<ad66>3.252 E F1 .753(option can be used to o)3.253 F -.15(ve)-.15 G +.753(rride this and).15 F .107(force the suspension.)144 160.8 R .107(T\ +he return status is 0 unless the shell is a login shell or job control \ +is not en-)5.107 F(abled and)144 172.8 Q F2<ad66>2.5 E F1 +(is not supplied.)2.5 E F2(test)108 189.6 Q F0 -.2(ex)2.5 G(pr).2 E F2 +([)108 201.6 Q F0 -.2(ex)2.5 G(pr).2 E F2(])2.5 E F1 .877 +(Return a status of 0 \(true\) or 1 \(f)144 201.6 R .878 +(alse\) depending on the e)-.1 F -.25(va)-.25 G .878 +(luation of the conditional e).25 F(xpression)-.15 E F0 -.2(ex)144 213.6 +S(pr).2 E F1 5.53(.E).73 G .53 +(ach operator and operand must be a separate ar)-5.53 F 3.03 +(gument. Expressions)-.18 F .53(are composed of the)3.03 F 1.231 +(primaries described in)144 225.6 R F0(bash)3.731 E F1 1.231 +(\(1\) under)B F3(CONDITION)3.731 E 1.231(AL EXPRESSIONS)-.18 F/F4 9 +/Times-Roman@0 SF(.)A F2(test)5.731 E F1 1.232(does not accept an)3.731 +F(y)-.15 E(options, nor does it accept and ignore an ar)144 237.6 Q +(gument of)-.18 E F2<adad>2.5 E F1(as signifying the end of options.)2.5 +E .786(Expressions may be combined using the follo)144 254.4 R .785 +(wing operators, listed in decreasing order of prece-)-.25 F 3.411 +(dence. The)144 266.4 R -.25(eva)3.411 G .911 +(luation depends on the number of ar).25 F .912(guments; see belo)-.18 F +4.712 -.65(w. O)-.25 H .912(perator precedence is).65 F +(used when there are \214v)144 278.4 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G +(ore ar)-2.5 E(guments.)-.18 E F2(!)144 290.4 Q F0 -.2(ex)2.5 G(pr).2 E +F1 -.35(Tr)180 290.4 S(ue if).35 E F0 -.2(ex)2.5 G(pr).2 E F1(is f)3.23 +E(alse.)-.1 E F2(\()144 302.4 Q F0 -.2(ex)2.5 G(pr).2 E F2(\))2.5 E F1 +.26(Returns the v)180 302.4 R .26(alue of)-.25 F F0 -.2(ex)2.76 G(pr).2 +E F1 5.26(.T)C .26(his may be used to o)-5.26 F -.15(ve)-.15 G .26 +(rride the normal precedence of opera-).15 F(tors.)180 314.4 Q F0 -.2 +(ex)144 326.4 S(pr1).2 E F1<ad>2.5 E F2(a)A F0 -.2(ex)2.5 G(pr2).2 E F1 +-.35(Tr)180 338.4 S(ue if both).35 E F0 -.2(ex)2.5 G(pr1).2 E F1(and)2.5 +E F0 -.2(ex)2.5 G(pr2).2 E F1(are true.)2.52 E F0 -.2(ex)144 350.4 S +(pr1).2 E F1<ad>2.5 E F2(o)A F0 -.2(ex)2.5 G(pr2).2 E F1 -.35(Tr)180 +362.4 S(ue if either).35 E F0 -.2(ex)2.5 G(pr1).2 E F1(or)2.5 E F0 -.2 +(ex)2.5 G(pr2).2 E F1(is true.)2.52 E F2(test)144 379.2 Q F1(and)2.5 E +F2([)2.5 E F1 -.25(eva)2.5 G(luate conditional e).25 E +(xpressions using a set of rules based on the number of ar)-.15 E +(guments.)-.18 E 2.5(0a)144 396 S -.18(rg)-2.5 G(uments).18 E(The e)180 +408 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 420 S -.18(rg)-2.5 G +(ument).18 E(The e)180 432 Q(xpression is true if and only if the ar) +-.15 E(gument is not null.)-.18 E 2.5(2a)144 444 S -.18(rg)-2.5 G +(uments).18 E .37(If the \214rst ar)180 456 R .37(gument is)-.18 F F2(!) +2.87 E F1 2.87(,t)C .37(he e)-2.87 F .37 +(xpression is true if and only if the second ar)-.15 F .37 +(gument is null.)-.18 F 1.683(If the \214rst ar)180 468 R 1.683 +(gument is one of the unary conditional operators listed in)-.18 F F0 +(bash)4.182 E F1 1.682(\(1\) under)B F3(CONDITION)180 480 Q .121 +(AL EXPRESSIONS)-.18 F F4(,)A F1 .121(the e)2.371 F .122 +(xpression is true if the unary test is true.)-.15 F .122 +(If the \214rst)5.122 F(ar)180 492 Q(gument is not a v)-.18 E +(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E +(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 504 S -.18(rg)-2.5 G +(uments).18 E .236(The follo)180 516 R .236 (wing conditions are applied in the order listed.)-.25 F .236 (If the second ar)5.236 F .236(gument is one of)-.18 F .546 -(the binary conditional operators listed in)180 108 R/F1 10 -/Times-Italic@0 SF(bash\(1\))3.046 E F0(under)3.046 E/F2 9/Times-Bold@0 -SF(CONDITION)3.046 E .546(AL EXPRESSIONS)-.18 F/F3 9/Times-Roman@0 SF(,) -A F0 .887(the result of the e)180 120 R .888(xpression is the result of\ - the binary test using the \214rst and third ar)-.15 F(gu-)-.18 E .434 -(ments as operands.)180 132 R(The)5.434 E/F4 10/Times-Bold@0 SF<ad61> -2.934 E F0(and)2.934 E F4<ad6f>2.934 E F0 .434 -(operators are considered binary operators when there)2.934 F .645 -(are three ar)180 144 R 3.145(guments. If)-.18 F .645(the \214rst ar) -3.145 F .646(gument is)-.18 F F4(!)3.146 E F0 3.146(,t)C .646(he v) --3.146 F .646(alue is the ne)-.25 F -.05(ga)-.15 G .646(tion of the tw) -.05 F(o-ar)-.1 E(gu-)-.18 E .452 -(ment test using the second and third ar)180 156 R 2.951(guments. If) +(the binary conditional operators listed in)180 528 R F0(bash)3.046 E F1 +.546(\(1\) under)B F3(CONDITION)3.046 E .546(AL EXPRESSIONS)-.18 F F4(,) +A F1 .888(the result of the e)180 540 R .888(xpression is the result of\ + the binary test using the \214rst and third ar)-.15 F(gu-)-.18 E .433 +(ments as operands.)180 552 R(The)5.434 E F2<ad61>2.934 E F1(and)2.934 E +F2<ad6f>2.934 E F1 .434 +(operators are considered binary operators when there)2.934 F .646 +(are three ar)180 564 R 3.146(guments. If)-.18 F .646(the \214rst ar) +3.146 F .646(gument is)-.18 F F2(!)3.146 E F1 3.146(,t)C .646(he v) +-3.146 F .645(alue is the ne)-.25 F -.05(ga)-.15 G .645(tion of the tw) +.05 F(o-ar)-.1 E(gu-)-.18 E .451 +(ment test using the second and third ar)180 576 R 2.951(guments. If) -.18 F .451(the \214rst ar)2.951 F .451(gument is e)-.18 F(xactly)-.15 E -F4(\()2.951 E F0 .451(and the)2.951 F 1.164(third ar)180 168 R 1.164 -(gument is e)-.18 F(xactly)-.15 E F4(\))3.664 E F0 3.664(,t)C 1.164 -(he result is the one-ar)-3.664 F 1.165(gument test of the second ar) --.18 F(gument.)-.18 E(Otherwise, the e)180 180 Q(xpression is f)-.15 E -(alse.)-.1 E 2.5(4a)144 192 S -.18(rg)-2.5 G(uments).18 E .43(The follo) -180 204 R .43(wing conditions are applied in the order listed.)-.25 F -.429(If the \214rst ar)5.429 F .429(gument is)-.18 F F4(!)2.929 E F0 -2.929(,t)C .429(he re-)-2.929 F 1.314(sult is the ne)180 216 R -.05(ga) --.15 G 1.314(tion of the three-ar).05 F 1.314(gument e)-.18 F 1.314 -(xpression composed of the remaining ar)-.15 F(gu-)-.18 E 2.745 -(ments. the)180 228 R(tw)2.745 E(o-ar)-.1 E .245 -(gument test using the second and third ar)-.18 F 2.744(guments. If)-.18 -F .244(the \214rst ar)2.744 F(gument)-.18 E .309(is e)180 240 R(xactly) --.15 E F4(\()2.809 E F0 .309(and the fourth ar)2.809 F .309(gument is e) --.18 F(xactly)-.15 E F4(\))2.809 E F0 2.809(,t)C .31 -(he result is the tw)-2.809 F(o-ar)-.1 E .31(gument test of the)-.18 F -.184(second and third ar)180 252 R 2.684(guments. Otherwise,)-.18 F .184 -(the e)2.684 F .183(xpression is parsed and e)-.15 F -.25(va)-.25 G .183 -(luated according).25 F(to precedence using the rules listed abo)180 264 -Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 276 S 2.5(rm)-2.5 G(ore ar)-2.5 E -(guments)-.18 E 1.635(The e)180 288 R 1.635(xpression is parsed and e) +F2(\()2.952 E F1 .452(and the)2.952 F 1.165(third ar)180 588 R 1.165 +(gument is e)-.18 F(xactly)-.15 E F2(\))3.665 E F1 3.664(,t)C 1.164 +(he result is the one-ar)-3.664 F 1.164(gument test of the second ar) +-.18 F(gument.)-.18 E(Otherwise, the e)180 600 Q(xpression is f)-.15 E +(alse.)-.1 E 2.5(4a)144 612 S -.18(rg)-2.5 G(uments).18 E .429 +(The follo)180 624 R .429 +(wing conditions are applied in the order listed.)-.25 F .43 +(If the \214rst ar)5.429 F .43(gument is)-.18 F F2(!)2.93 E F1 2.93(,t)C +.43(he re-)-2.93 F 1.315(sult is the ne)180 636 R -.05(ga)-.15 G 1.314 +(tion of the three-ar).05 F 1.314(gument e)-.18 F 1.314 +(xpression composed of the remaining ar)-.15 F(gu-)-.18 E 2.744 +(ments. the)180 648 R(tw)2.744 E(o-ar)-.1 E .245 +(gument test using the second and third ar)-.18 F 2.745(guments. If)-.18 +F .245(the \214rst ar)2.745 F(gument)-.18 E .31(is e)180 660 R(xactly) +-.15 E F2(\()2.81 E F1 .31(and the fourth ar)2.81 F .31(gument is e)-.18 +F(xactly)-.15 E F2(\))2.809 E F1 2.809(,t)C .309(he result is the tw) +-2.809 F(o-ar)-.1 E .309(gument test of the)-.18 F .183 +(second and third ar)180 672 R 2.683(guments. Otherwise,)-.18 F .184 +(the e)2.684 F .184(xpression is parsed and e)-.15 F -.25(va)-.25 G .184 +(luated according).25 F(to precedence using the rules listed abo)180 684 +Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 696 S 2.5(rm)-2.5 G(ore ar)-2.5 E +(guments)-.18 E 1.635(The e)180 708 R 1.635(xpression is parsed and e) -.15 F -.25(va)-.25 G 1.635 -(luated according to precedence using the rules listed).25 F(abo)180 300 -Q -.15(ve)-.15 G(.).15 E(When used with)144 318 Q F4(test)2.5 E F0(or) -2.5 E F4([)2.5 E F0 2.5(,t)C(he)-2.5 E F4(<)2.5 E F0(and)2.5 E F4(>)2.5 -E F0(operators sort le)2.5 E(xicographically using ASCII ordering.)-.15 -E F4(times)108 334.8 Q F0 1.229(Print the accumulated user and system t\ -imes for the shell and for processes run from the shell.)144 334.8 R -(The return status is 0.)144 346.8 Q F4(trap)108 363.6 Q F0([)2.5 E F4 -(\255lp)A F0 2.5(][)C([)-2.5 E F1(ar)A(g)-.37 E F0(])A F1(sigspec)2.5 E -F0(...])2.5 E .682(The command)144 375.6 R F1(ar)3.512 E(g)-.37 E F0 -.682(is to be read and e)3.402 F -.15(xe)-.15 G .682 -(cuted when the shell recei).15 F -.15(ve)-.25 G 3.183(ss).15 G -(ignal\(s\))-3.183 E F1(sigspec)3.523 E F0 5.683(.I).31 G(f)-5.683 E F1 -(ar)3.513 E(g)-.37 E F0(is)3.403 E .609(absent \(and there is a single) -144 387.6 R F1(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F4<ad>3.108 E -F0 3.108(,e)C .608 -(ach speci\214ed signal is reset to its original disposition)-3.108 F -.658(\(the v)144 399.6 R .658(alue it had upon entrance to the shell\).) --.25 F(If)5.658 E F1(ar)3.488 E(g)-.37 E F0 .659 -(is the null string the signal speci\214ed by each)3.378 F F1(sigspec) -144.34 411.6 Q F0 .581 -(is ignored by the shell and by the commands it in)3.391 F -.2(vo)-.4 G --.1(ke).2 G 3.08(s. If).1 F F1(ar)3.41 E(g)-.37 E F0 .58 -(is not present and)3.3 F F4<ad70>3.08 E F0(has)3.08 E 1.214 -(been supplied, then the trap commands associated with each)144 423.6 R -F1(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215 -F(gu-)-.18 E .86(ments are supplied or if only)144 435.6 R F4<ad70>3.36 -E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F4(trap)3.36 E F0 .86 -(prints the list of commands associated with each)3.36 F 2.83 -(signal. The)144 447.6 R F4<ad6c>2.83 E F0 .33(option causes the shell \ -to print a list of signal names and their corresponding num-)2.83 F -4.311(bers. Each)144 459.6 R F1(sigspec)4.651 E F0 1.811 -(is either a signal name de\214ned in <)4.621 F F1(signal.h)A F0 1.81 -(>, or a signal number)B 6.81(.S)-.55 G(ignal)-6.81 E -(names are case insensiti)144 471.6 Q .3 -.15(ve a)-.25 H(nd the).15 E -F2(SIG)2.5 E F0(pre\214x is optional.)2.25 E .666(If a)144 489.6 R F1 -(sigspec)3.506 E F0(is)3.476 E F2(EXIT)3.166 E F0 .666 -(\(0\) the command)2.916 F F1(ar)3.496 E(g)-.37 E F0 .666(is e)3.386 F --.15(xe)-.15 G .666(cuted on e).15 F .667(xit from the shell.)-.15 F -.667(If a)5.667 F F1(sigspec)3.507 E F0(is)3.477 E F2(DE-)3.167 E -.09 -(BU)144 501.6 S(G).09 E F3(,)A F0 .484(the command)2.734 F F1(ar)3.314 E -(g)-.37 E F0 .484(is e)3.204 F -.15(xe)-.15 G .484(cuted before e).15 F --.15(ve)-.25 G(ry).15 E F1 .483(simple command)2.984 F F0(,)A F1(for) -2.983 E F0(command,)2.983 E F1(case)2.983 E F0(command,)2.983 E F1 -(select)144 513.6 Q F0 .562(command, e)3.062 F -.15(ve)-.25 G .563 -(ry arithmetic).15 F F1(for)3.063 E F0 .563 -(command, and before the \214rst command e)3.063 F -.15(xe)-.15 G .563 -(cutes in a shell).15 F .442(function \(see)144 525.6 R F2 .442 -(SHELL GRAMMAR)2.942 F F0(in)2.692 E F1(bash\(1\))2.942 E F0 2.941 -(\). Refer)B .441(to the description of the)2.941 F F4(extdeb)2.941 E -(ug)-.2 E F0 .441(option to)2.941 F(the)144 537.6 Q F4(shopt)3.2 E F0 --.2(bu)3.2 G .7(iltin for details of its ef).2 F .7(fect on the)-.25 F -F4(DEB)3.2 E(UG)-.1 E F0 3.2(trap. If)3.2 F(a)3.2 E F1(sigspec)3.54 E F0 -(is)3.51 E F2(RETURN)3.2 E F3(,)A F0 .701(the com-)2.951 F(mand)144 -549.6 Q F1(ar)3.474 E(g)-.37 E F0 .644(is e)3.364 F -.15(xe)-.15 G .643 -(cuted each time a shell function or a script e).15 F -.15(xe)-.15 G -.643(cuted with the).15 F F4(.)3.143 E F0(or)3.143 E F4(sour)3.143 E(ce) --.18 E F0 -.2(bu)3.143 G(iltins).2 E(\214nishes e)144 561.6 Q -.15(xe) --.15 G(cuting.).15 E .96(If a)144 579.6 R F1(sigspec)3.8 E F0(is)3.77 E -F2(ERR)3.46 E F3(,)A F0 .96(the command)3.21 F F1(ar)3.791 E(g)-.37 E F0 -.961(is e)3.681 F -.15(xe)-.15 G .961(cuted whene).15 F -.15(ve)-.25 G -3.461(rap).15 G .961(ipeline \(which may consist of a)-3.461 F .185(sin\ -gle simple command\), a list, or a compound command returns a non\255ze\ -ro e)144 591.6 R .184(xit status, subject to)-.15 F .451(the follo)144 -603.6 R .451(wing conditions.)-.25 F(The)5.451 E F2(ERR)2.951 E F0 .451 +(luated according to precedence using the rules listed).25 F(abo)180 720 +Q -.15(ve)-.15 G(.).15 E(GNU Bash 5.2)72 768 Q(2023 January 27)141.79 E +(23)190.95 E 0 Cg EP +%%Page: 24 24 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E .216 +(When the shell is in)144 84 R F0 .216(posix mode)2.716 F F1 2.716(,o)C +2.716(ri)-2.716 G 2.716(ft)-2.716 G .216(he e)-2.716 F .216 +(xpression is part of the)-.15 F/F2 10/Times-Bold@0 SF([[)2.716 E F1 +.216(command, the)2.716 F F2(<)2.717 E F1(and)2.717 E F2(>)2.717 E F1 +(opera-)2.717 E .728(tors sort using the current locale.)144 96 R .728 +(If the shell is not in)5.728 F F0 .728(posix mode)3.228 F F1 3.228(,t)C +(he)-3.228 E F2(test)3.228 E F1(and)3.228 E F2([)3.228 E F1 .727 +(commands sort)3.227 F(le)144 108 Q +(xicographically using ASCII ordering.)-.15 E F2(times)108 124.8 Q F1 +1.229(Print the accumulated user and system times for the shell and for\ + processes run from the shell.)144 124.8 R(The return status is 0.)144 +136.8 Q F2(trap)108 153.6 Q F1([)2.5 E F2(\255lp)A F1 2.5(][)C([)-2.5 E +F0(action)A F1(])A F0(sigspec)2.5 E F1 1.666(...)2.5 G(])-1.666 E(The) +144 165.6 Q F0(action)3.734 E F1 .903(is a command that is read and e) +3.644 F -.15(xe)-.15 G .903(cuted when the shell recei).15 F -.15(ve) +-.25 G 3.403(ss).15 G(ignal\(s\))-3.403 E F0(sigspec)3.743 E F1 5.903 +(.I).31 G(f)-5.903 E F0(action)144.33 177.6 Q F1 .105 +(is absent \(and there is a single)2.845 F F0(sigspec)2.605 E F1 2.605 +(\)o)C(r)-2.605 E F2<ad>2.605 E F1 2.605(,e)C .106 +(ach speci\214ed signal is reset to its original dis-)-2.605 F .627 +(position \(the v)144 189.6 R .626 +(alue it had upon entrance to the shell\).)-.25 F(If)5.626 E F0(action) +3.456 E F1 .626(is the null string the signal speci-)3.366 F +(\214ed by each)144 201.6 Q F0(sigspec)2.84 E F1 +(is ignored by the shell and by the commands it in)2.81 E -.2(vo)-.4 G +-.1(ke).2 G(s.).1 E .165(If no ar)144 218.4 R .165 +(guments are supplied,)-.18 F F2(trap)2.665 E F1 .165 +(displays the actions associated with each trapped signal as a set)2.665 +F(of)144 230.4 Q F2(trap)2.57 E F1 .069(commands that can be reused as \ +shell input to restore the current signal dispositions.)2.57 F(If)5.069 +E F2<ad70>2.569 E F1 .473(is gi)144 242.4 R -.15(ve)-.25 G .473(n, and) +.15 F F0(action)3.303 E F1 .473(is not present, then)3.213 F F2(trap) +2.973 E F1 .473(displays the actions associated with each)2.973 F F0 +(sigspec)3.314 E F1(or)3.284 E(,)-.4 E .364 +(if none are supplied, for all trapped signals, as a set of)144 254.4 R +F2(trap)2.864 E F1 .363(commands that can be reused as shell)2.864 F +.207(input to restore the current signal dispositions.)144 266.4 R(The) +5.207 E F2<ad50>2.707 E F1 .207(option beha)2.707 F -.15(ve)-.2 G 2.707 +(ss).15 G(imilarly)-2.707 E 2.707(,b)-.65 G .208(ut displays only)-2.907 +F 1.553(the actions associated with each)144 278.4 R F0(sigspec)4.052 E +F1(ar)4.052 E(gument.)-.18 E F2<ad50>6.552 E F1 1.552 +(requires at least one)4.052 F F0(sigspec)4.052 E F1(ar)4.052 E(gument.) +-.18 E(The)144 290.4 Q F2<ad50>2.726 E F1(or)2.726 E F2<ad70>2.727 E F1 +.227(options to)2.727 F F2(trap)2.727 E F1 .227 +(may be used in a subshell en)2.727 F .227 +(vironment \(e.g., command substitution\))-.4 F .993 +(and, as long as the)144 302.4 R 3.493(ya)-.15 G .993(re used before) +-3.493 F F2(trap)3.493 E F1 .993(is used to change a signal')3.493 F +3.492(sh)-.55 G .992(andling, will display the)-3.492 F +(state of its parent')144 314.4 Q 2.5(st)-.55 G(raps.)-2.5 E(The)144 +331.2 Q F2<ad6c>3.216 E F1 .716(option causes)3.216 F F2(trap)3.216 E F1 +.716(to print a list of signal names and their corresponding numbers.) +3.216 F(Each)5.717 E F0(sigspec)144.34 343.2 Q F1 .709 +(is either a signal name de\214ned in <)3.519 F F0(signal.h)A F1 .709 +(>, or a signal number)B 5.708(.S)-.55 G .708(ignal names are case) +-5.708 F(insensiti)144 355.2 Q .3 -.15(ve a)-.25 H(nd the).15 E/F3 9 +/Times-Bold@0 SF(SIG)2.5 E F1(pre\214x is optional.)2.25 E .091(If a)144 +372 R F0(sigspec)2.931 E F1(is)2.901 E F3(EXIT)2.591 E F1 .091 +(\(0\) the command)2.341 F F0(action)2.921 E F1 .091(is e)2.831 F -.15 +(xe)-.15 G .091(cuted on e).15 F .092(xit from the shell.)-.15 F .092 +(If a)5.092 F F0(sigspec)2.932 E F1(is)2.902 E F3(DE-)2.592 E -.09(BU) +144 384 S(G).09 E/F4 9/Times-Roman@0 SF(,)A F1 1.245(the command)3.495 F +F0(action)4.075 E F1 1.245(is e)3.985 F -.15(xe)-.15 G 1.244 +(cuted before e).15 F -.15(ve)-.25 G(ry).15 E F0 1.244(simple command) +3.744 F F1(,)A F0(for)3.744 E F1(command,)3.744 E F0(case)3.744 E F1 +(com-)3.744 E(mand,)144 396 Q F0(select)2.696 E F1 .196 +(command, \(\( arithmetic command, [[ conditional command, arithmetic) +2.696 F F0(for)2.697 E F1(command,)2.697 E 1.105 +(and before the \214rst command e)144 408 R -.15(xe)-.15 G 1.105 +(cutes in a shell function \(see).15 F F3 1.105(SHELL GRAMMAR)3.605 F F1 +(in)3.355 E F0(bash)3.604 E F1(\(1\)\).)A .556 +(Refer to the description of the)144 420 R F2(extdeb)3.056 E(ug)-.2 E F1 +.556(option to the)3.056 F F2(shopt)3.056 E F1 -.2(bu)3.056 G .556 +(iltin for details of its ef).2 F .557(fect on the)-.25 F F2(DEB)144 432 +Q(UG)-.1 E F1 2.515(trap. If)2.515 F(a)2.515 E F0(sigspec)2.855 E F1(is) +2.825 E F3(RETURN)2.515 E F4(,)A F1 .015(the command)2.265 F F0(action) +2.844 E F1 .014(is e)2.754 F -.15(xe)-.15 G .014 +(cuted each time a shell function).15 F(or a script e)144 444 Q -.15(xe) +-.15 G(cuted with the).15 E F2(.)2.5 E F1(or)2.5 E F2(sour)2.5 E(ce)-.18 +E F1 -.2(bu)2.5 G(iltins \214nishes e).2 E -.15(xe)-.15 G(cuting.).15 E +.284(If a)144 460.8 R F0(sigspec)3.124 E F1(is)3.094 E F3(ERR)2.784 E F4 +(,)A F1 .284(the command)2.534 F F0(action)3.114 E F1 .284(is e)3.024 F +-.15(xe)-.15 G .284(cuted whene).15 F -.15(ve)-.25 G 2.784(rap).15 G +.285(ipeline \(which may consist of a)-2.784 F .185(single simple comma\ +nd\), a list, or a compound command returns a non\255zero e)144 472.8 R +.184(xit status, subject to)-.15 F .451(the follo)144 484.8 R .451 +(wing conditions.)-.25 F(The)5.451 E F3(ERR)2.951 E F1 .451 (trap is not e)2.701 F -.15(xe)-.15 G .451(cuted if the f).15 F .452 (ailed command is part of the com-)-.1 F .388 -(mand list immediately follo)144 615.6 R .388(wing a)-.25 F F4(while) -2.888 E F0(or)2.888 E F4(until)2.888 E F0 -.1(ke)2.888 G(yw)-.05 E .388 -(ord, part of the test in an)-.1 F F1(if)2.897 E F0 .387 -(statement, part)4.847 F .777(of a command e)144 627.6 R -.15(xe)-.15 G -.778(cuted in a).15 F F4(&&)3.278 E F0(or)3.278 E F4(||)3.278 E F0 .778 +(mand list immediately follo)144 496.8 R .388(wing a)-.25 F F2(while) +2.888 E F1(or)2.888 E F2(until)2.888 E F1 -.1(ke)2.888 G(yw)-.05 E .388 +(ord, part of the test in an)-.1 F F0(if)2.897 E F1 .387 +(statement, part)4.847 F .777(of a command e)144 508.8 R -.15(xe)-.15 G +.778(cuted in a).15 F F2(&&)3.278 E F1(or)3.278 E F2(||)3.278 E F1 .778 (list e)3.278 F .778(xcept the command follo)-.15 F .778 -(wing the \214nal)-.25 F F4(&&)3.278 E F0(or)3.278 E F4(||)3.278 E F0 -3.278(,a)C -.15(ny)-3.278 G 1.28(command in a pipeline b)144 639.6 R +(wing the \214nal)-.25 F F2(&&)3.278 E F1(or)3.278 E F2(||)3.278 E F1 +3.278(,a)C -.15(ny)-3.278 G 1.28(command in a pipeline b)144 520.8 R 1.28(ut the last, or if the command')-.2 F 3.78(sr)-.55 G 1.28(eturn v) -3.78 F 1.28(alue is being in)-.25 F -.15(ve)-.4 G 1.28(rted using).15 F -F4(!)3.78 E F0(.)A(These are the same conditions obe)144 651.6 Q -(yed by the)-.15 E F4(err)2.5 E(exit)-.18 E F0(\()2.5 E F4<ad65>A F0 2.5 -(\)o)C(ption.)-2.5 E .132 -(Signals ignored upon entry to the shell cannot be trapped or reset.)144 -669.6 R -.35(Tr)5.133 G .133(apped signals that are not be-).35 F .117 -(ing ignored are reset to their original v)144 681.6 R .117 -(alues in a subshell or subshell en)-.25 F .117 -(vironment when one is cre-)-.4 F 2.5(ated. The)144 693.6 R -(return status is f)2.5 E(alse if an)-.1 E(y)-.15 E F1(sigspec)2.84 E F0 -(is in)2.81 E -.25(va)-.4 G(lid; otherwise).25 E F4(trap)2.5 E F0 -(returns true.)2.5 E(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve) --.15 G(mber 22).15 E(23)185.545 E 0 Cg EP -%%Page: 24 24 +F2(!)3.78 E F1(.)A(These are the same conditions obe)144 532.8 Q +(yed by the)-.15 E F2(err)2.5 E(exit)-.18 E F1(\()2.5 E F2<ad65>A F1 2.5 +(\)o)C(ption.)-2.5 E .069(When the shell is not interacti)144 549.6 R +-.15(ve)-.25 G 2.569(,s).15 G .07 +(ignals ignored upon entry to the shell cannot be trapped or reset.) +-2.569 F(Interacti)144 561.6 Q .952 -.15(ve s)-.25 H .652 +(hells permit trapping signals ignored on entry).15 F 5.651(.T)-.65 G +.651(rapped signals that are not being ig-)-6.001 F .576 +(nored are reset to their original v)144 573.6 R .576 +(alues in a subshell or subshell en)-.25 F .577 +(vironment when one is created.)-.4 F(The return status is f)144 585.6 Q +(alse if an)-.1 E(y)-.15 E F0(sigspec)2.84 E F1(is in)2.81 E -.25(va)-.4 +G(lid; otherwise).25 E F2(trap)2.5 E F1(returns true.)2.5 E F2(true)108 +602.4 Q F1(Does nothing, returns a 0 status.)144 602.4 Q F2(type)108 +619.2 Q F1([)2.5 E F2(\255aftpP)A F1(])A F0(name)2.5 E F1([)2.5 E F0 +(name)A F1 1.666(...)2.5 G(])-1.666 E -.4(Wi)144 631.2 S .174 +(th no options, indicate ho).4 F 2.674(we)-.25 G(ach)-2.674 E F0(name) +3.034 E F1 -.1(wo)2.854 G .173 +(uld be interpreted if used as a command name.).1 F .173(If the)5.173 F +F2<ad74>144 643.2 Q F1 .715(option is used,)3.215 F F2(type)3.215 E F1 +.715(prints a string which is one of)3.215 F F0(alias)3.545 E F1(,).27 E +F0 -.1(ke)3.215 G(ywor)-.2 E(d)-.37 E F1(,).77 E F0(function)5.185 E F1 +(,).24 E F0 -.2(bu)3.215 G(iltin).2 E F1 3.215(,o).24 G(r)-3.215 E F0 +(\214le)5.125 E F1(if)3.395 E F0(name)144.36 655.2 Q F1 .378 +(is an alias, shell reserv)3.058 F .377(ed w)-.15 F .377 +(ord, function, b)-.1 F .377(uiltin, or e)-.2 F -.15(xe)-.15 G .377 +(cutable disk \214le, respecti).15 F -.15(ve)-.25 G(ly).15 E 5.377(.I) +-.65 G 2.877(ft)-5.377 G(he)-2.877 E F0(name)144.36 667.2 Q F1 .645 +(is not found, then nothing is printed, and)3.325 F F2(type)3.146 E F1 +.646(returns a non-zero e)3.146 F .646(xit status.)-.15 F .646(If the) +5.646 F F2<ad70>3.146 E F1(op-)3.146 E .642(tion is used,)144 679.2 R F2 +(type)3.142 E F1 .642(either returns the name of the e)3.142 F -.15(xe) +-.15 G .642(cutable \214le that w).15 F .641(ould be found by searching) +-.1 F F2($P)144 691.2 Q -.95(AT)-.74 G(H).95 E F1(if)3.06 E F0(name)3.42 +E F1 .56(were speci\214ed as a command name, or nothing if w)3.24 F .56 +(ould not return)-.1 F F0(\214le)4.97 E F1 5.56(.T).18 G(he)-5.56 E F2 +<ad50>3.06 E F1 .04(option forces a)144 703.2 R F3 -.666(PA)2.54 G(TH) +-.189 E F1 .04(search for each)2.29 F F0(name)2.54 E F1 2.54(,e)C -.15 +(ve)-2.79 G 2.54(ni).15 G 2.54(fw)-2.54 G .04(ould not return)-2.64 F F0 +(\214le)4.45 E F1 5.04(.I).18 G 2.54(fac)-5.04 G .04(ommand is hashed,) +-2.54 F F2<ad70>144 715.2 Q F1(and)3.283 E F2<ad50>3.283 E F1 .784 +(print the hashed v)3.283 F .784 +(alue, which is not necessarily the \214le that appears \214rst in)-.25 +F F3 -.666(PA)3.284 G(TH)-.189 E F4(.)A F1(If)5.284 E(the)144 727.2 Q F2 +<ad61>3.73 E F1 1.23(option is used,)3.73 F F2(type)3.73 E F1 1.23 +(prints all of the places that contain a command named)3.73 F F0(name) +4.09 E F1 6.23(.T).18 G(his)-6.23 E(GNU Bash 5.2)72 768 Q +(2023 January 27)141.79 E(24)190.95 E 0 Cg EP +%%Page: 25 25 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(type)108 84 Q F0([) -2.5 E F1(\255aftpP)A F0(])A/F2 10/Times-Italic@0 SF(name)2.5 E F0([)2.5 -E F2(name)A F0(...])2.5 E -.4(Wi)144 96 S .173 -(th no options, indicate ho).4 F 2.673(we)-.25 G(ach)-2.673 E F2(name) -3.033 E F0 -.1(wo)2.853 G .174 -(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F -F1<ad74>144 108 Q F0 .715(option is used,)3.215 F F1(type)3.215 E F0 -.715(prints a string which is one of)3.215 F F2(alias)3.545 E F0(,).27 E -F2 -.1(ke)3.215 G(ywor)-.2 E(d)-.37 E F0(,).77 E F2(function)5.185 E F0 -(,).24 E F2 -.2(bu)3.215 G(iltin).2 E F0 3.215(,o).24 G(r)-3.215 E F2 -(\214le)5.125 E F0(if)3.395 E F2(name)144.36 120 Q F0 .086 -(is an alias, shell reserv)2.766 F .086(ed w)-.15 F .086 -(ord, function, b)-.1 F .087(uiltin, or disk \214le, respecti)-.2 F -.15 -(ve)-.25 G(ly).15 E 5.087(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F2 -(name)2.947 E F0 .087(is not)2.767 F .119 -(found, then nothing is printed, and an e)144 132 R .118 -(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F -F1<ad70>2.618 E F0 .118(option is used,)2.618 F F1(type)2.618 E F0 .855 -(either returns the name of the disk \214le that w)144 144 R .855 -(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F2(name)3.715 E F0 -.855(were speci\214ed as a com-)3.535 F .529(mand name, or nothing if) -144 156 R/F3 10/Courier@0 SF .528(type -t name)3.028 F F0 -.1(wo)3.028 G -.528(uld not return).1 F F2(\214le)4.938 E F0 5.528(.T).18 G(he)-5.528 E -F1<ad50>3.028 E F0 .528(option forces a)3.028 F/F4 9/Times-Bold@0 SF --.666(PA)3.028 G(TH)-.189 E F0 .006(search for each)144 168 R F2(name) -2.506 E F0 2.506(,e)C -.15(ve)-2.756 G 2.506(ni).15 G(f)-2.506 E F3 .007 -(type -t name)2.506 F F0 -.1(wo)2.507 G .007(uld not return).1 F F2 -(\214le)4.417 E F0 5.007(.I).18 G 2.507(fac)-5.007 G .007 -(ommand is hashed,)-2.507 F F1<ad70>2.507 E F0(and)144 180 Q F1<ad50> -3.231 E F0 .731(print the hashed v)3.231 F .73 -(alue, which is not necessarily the \214le that appears \214rst in)-.25 -F F4 -.666(PA)3.23 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .73(If the) -5.23 F F1<ad61>144 192 Q F0 .823(option is used,)3.323 F F1(type)3.323 E -F0 .824(prints all of the places that contain an e)3.323 F -.15(xe)-.15 -G .824(cutable named).15 F F2(name)3.684 E F0 5.824(.T).18 G .824 -(his in-)-5.824 F 1.176 -(cludes aliases and functions, if and only if the)144 204 R F1<ad70> -3.676 E F0 1.176(option is not also used.)3.676 F 1.176 -(The table of hashed)6.176 F 1.223(commands is not consulted when using) -144 216 R F1<ad61>3.723 E F0 6.223(.T)C(he)-6.223 E F1<ad66>3.723 E F0 -1.223(option suppresses shell function lookup, as)3.723 F .326(with the) -144 228 R F1(command)2.826 E F0 -.2(bu)2.826 G(iltin.).2 E F1(type)5.326 -E F0 .326(returns true if all of the ar)2.826 F .325 -(guments are found, f)-.18 F .325(alse if an)-.1 F 2.825(ya)-.15 G .325 -(re not)-2.825 F(found.)144 240 Q F1(ulimit)108 256.8 Q F0([)2.5 E F1 -(\255HS)A F0(])A F1<ad61>2.5 E(ulimit)108 268.8 Q F0([)2.5 E F1(\255HS)A -F0 2.5(][)C F1(\255bcde\214klmnpqrstuvxPR)-2.5 E(T)-.4 E F0([)2.5 E F2 -(limit)A F0(]])A(Pro)144 280.8 Q .243(vides control o)-.15 F -.15(ve) --.15 G 2.743(rt).15 G .243(he resources a)-2.743 F -.25(va)-.2 G .244 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E .735 +(includes aliases, reserv)144 84 R .735(ed w)-.15 F .736 +(ords, functions, and b)-.1 F .736(uiltins, b)-.2 F .736 +(ut the path search options \()-.2 F/F2 10/Times-Bold@0 SF<ad70>A F1 +(and)3.236 E F2<ad50>3.236 E F1(\))A .292 +(can be supplied to restrict the output to e)144 96 R -.15(xe)-.15 G +.292(cutable \214les.).15 F F2(type)5.292 E F1 .291 +(does not consult the table of hashed)2.792 F 1.069(commands when using) +144 108 R F2<ad61>3.569 E F1(with)3.569 E F2<ad70>3.569 E F1 3.569(,a)C +1.069(nd only performs a)-3.569 F/F3 9/Times-Bold@0 SF -.666(PA)3.569 G +(TH)-.189 E F1 1.07(search for)3.319 F F0(name)3.57 E F1 6.07(.T)C(he) +-6.07 E F2<ad66>3.57 E F1(option)3.57 E .002 +(suppresses shell function lookup, as with the)144 120 R F2(command) +2.502 E F1 -.2(bu)2.502 G(iltin.).2 E F2(type)5.002 E F1 .002 +(returns true if all of the ar)2.502 F(gu-)-.18 E(ments are found, f)144 +132 Q(alse if an)-.1 E 2.5(ya)-.15 G(re not found.)-2.5 E F2(ulimit)108 +148.8 Q F1([)2.5 E F2(\255HS)A F1(])A F2<ad61>2.5 E(ulimit)108 160.8 Q +F1([)2.5 E F2(\255HS)A F1 2.5(][)C F2(\255bcde\214klmnpqrstuvxPR)-2.5 E +(T)-.4 E F1([)2.5 E F0(limit)A F1(]])A(Pro)144 172.8 Q .243 +(vides control o)-.15 F -.15(ve)-.15 G 2.743(rt).15 G .243 +(he resources a)-2.743 F -.25(va)-.2 G .244 (ilable to the shell and to processes started by it, on systems).25 F -.944(that allo)144 292.8 R 3.444(ws)-.25 G .944(uch control.)-3.444 F -(The)5.944 E F1<ad48>3.444 E F0(and)3.444 E F1<ad53>3.444 E F0 .943 +.944(that allo)144 184.8 R 3.444(ws)-.25 G .944(uch control.)-3.444 F +(The)5.944 E F2<ad48>3.444 E F1(and)3.444 E F2<ad53>3.444 E F1 .943 (options specify that the hard or soft limit is set for the)3.444 F(gi) -144 304.8 Q -.15(ve)-.25 G 2.708(nr).15 G 2.708(esource. A)-2.708 F .208 +144 196.8 Q -.15(ve)-.25 G 2.708(nr).15 G 2.708(esource. A)-2.708 F .208 (hard limit cannot be increased by a non-root user once it is set; a so\ -ft limit may)2.708 F .426(be increased up to the v)144 316.8 R .426 -(alue of the hard limit.)-.25 F .425(If neither)5.426 F F1<ad48>2.925 E -F0(nor)2.925 E F1<ad53>2.925 E F0 .425 +ft limit may)2.708 F .426(be increased up to the v)144 208.8 R .426 +(alue of the hard limit.)-.25 F .425(If neither)5.426 F F2<ad48>2.925 E +F1(nor)2.925 E F2<ad53>2.925 E F1 .425 (is speci\214ed, both the soft and)2.925 F .139(hard limits are set.)144 -328.8 R .139(The v)5.139 F .139(alue of)-.25 F F2(limit)2.729 E F0 .139 +220.8 R .139(The v)5.139 F .139(alue of)-.25 F F0(limit)2.729 E F1 .139 (can be a number in the unit speci\214ed for the resource or one)3.319 F -.742(of the special v)144 340.8 R(alues)-.25 E F1(hard)3.242 E F0(,)A F1 -(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F1(unlimited)3.241 E F0 3.241(,w) +.742(of the special v)144 232.8 R(alues)-.25 E F2(hard)3.242 E F1(,)A F2 +(soft)3.241 E F1 3.241(,o)C(r)-3.241 E F2(unlimited)3.241 E F1 3.241(,w) C .741(hich stand for the current hard limit, the current)-3.241 F .023 -(soft limit, and no limit, respecti)144 352.8 R -.15(ve)-.25 G(ly).15 E -5.023(.I)-.65 G(f)-5.023 E F2(limit)2.613 E F0 .023 +(soft limit, and no limit, respecti)144 244.8 R -.15(ve)-.25 G(ly).15 E +5.023(.I)-.65 G(f)-5.023 E F0(limit)2.613 E F1 .023 (is omitted, the current v)3.203 F .023 (alue of the soft limit of the re-)-.25 F .985 -(source is printed, unless the)144 364.8 R F1<ad48>3.485 E F0 .984 +(source is printed, unless the)144 256.8 R F2<ad48>3.485 E F1 .984 (option is gi)3.485 F -.15(ve)-.25 G 3.484(n. When).15 F .984 (more than one resource is speci\214ed, the)3.484 F .7 -(limit name and unit, if appropriate, are printed before the v)144 376.8 +(limit name and unit, if appropriate, are printed before the v)144 268.8 R 3.2(alue. Other)-.25 F .7(options are interpreted as)3.2 F(follo)144 -388.8 Q(ws:)-.25 E F1<ad61>144 400.8 Q F0 -(All current limits are reported; no limits are set)180 400.8 Q F1<ad62> -144 412.8 Q F0(The maximum sock)180 412.8 Q(et b)-.1 E(uf)-.2 E -(fer size)-.25 E F1<ad63>144 424.8 Q F0 -(The maximum size of core \214les created)180 424.8 Q F1<ad64>144 436.8 -Q F0(The maximum size of a process')180 436.8 Q 2.5(sd)-.55 G(ata se) --2.5 E(gment)-.15 E F1<ad65>144 448.8 Q F0 -(The maximum scheduling priority \("nice"\))180 448.8 Q F1<ad66>144 -460.8 Q F0 +280.8 Q(ws:)-.25 E F2<ad61>144 292.8 Q F1 +(All current limits are reported; no limits are set)180 292.8 Q F2<ad62> +144 304.8 Q F1(The maximum sock)180 304.8 Q(et b)-.1 E(uf)-.2 E +(fer size)-.25 E F2<ad63>144 316.8 Q F1 +(The maximum size of core \214les created)180 316.8 Q F2<ad64>144 328.8 +Q F1(The maximum size of a process')180 328.8 Q 2.5(sd)-.55 G(ata se) +-2.5 E(gment)-.15 E F2<ad65>144 340.8 Q F1 +(The maximum scheduling priority \()180 340.8 Q F2<ad66>144 352.8 Q F1 (The maximum size of \214les written by the shell and its children)180 -460.8 Q F1<ad69>144 472.8 Q F0(The maximum number of pending signals)180 -472.8 Q F1<ad6b>144 484.8 Q F0 -(The maximum number of kqueues that may be allocated)180 484.8 Q F1 -<ad6c>144 496.8 Q F0(The maximum size that may be lock)180 496.8 Q -(ed into memory)-.1 E F1<ad6d>144 508.8 Q F0 -(The maximum resident set size \(man)180 508.8 Q 2.5(ys)-.15 G -(ystems do not honor this limit\))-2.5 E F1<ad6e>144 520.8 Q F0 .791(Th\ +352.8 Q F2<ad69>144 364.8 Q F1(The maximum number of pending signals)180 +364.8 Q F2<ad6b>144 376.8 Q F1 +(The maximum number of kqueues that may be allocated)180 376.8 Q F2 +<ad6c>144 388.8 Q F1(The maximum size that may be lock)180 388.8 Q +(ed into memory)-.1 E F2<ad6d>144 400.8 Q F1 +(The maximum resident set size \(man)180 400.8 Q 2.5(ys)-.15 G +(ystems do not honor this limit\))-2.5 E F2<ad6e>144 412.8 Q F1 .791(Th\ e maximum number of open \214le descriptors \(most systems do not allo) -180 520.8 R 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F -(be set\))180 532.8 Q F1<ad70>144 544.8 Q F0 -(The pipe size in 512-byte blocks \(this may not be set\))180 544.8 Q F1 -<ad71>144 556.8 Q F0 -(The maximum number of bytes in POSIX message queues)180 556.8 Q F1 -<ad72>144 568.8 Q F0(The maximum real-time scheduling priority)180 568.8 -Q F1<ad73>144 580.8 Q F0(The maximum stack size)180 580.8 Q F1<ad74>144 -592.8 Q F0(The maximum amount of cpu time in seconds)180 592.8 Q F1 -<ad75>144 604.8 Q F0(The maximum number of processes a)180 604.8 Q -.25 -(va)-.2 G(ilable to a single user).25 E F1<ad76>144 616.8 Q F0 .47 -(The maximum amount of virtual memory a)180 616.8 R -.25(va)-.2 G .47 +180 412.8 R 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F +(be set\))180 424.8 Q F2<ad70>144 436.8 Q F1 +(The pipe size in 512-byte blocks \(this may not be set\))180 436.8 Q F2 +<ad71>144 448.8 Q F1 +(The maximum number of bytes in POSIX message queues)180 448.8 Q F2 +<ad72>144 460.8 Q F1(The maximum real-time scheduling priority)180 460.8 +Q F2<ad73>144 472.8 Q F1(The maximum stack size)180 472.8 Q F2<ad74>144 +484.8 Q F1(The maximum amount of cpu time in seconds)180 484.8 Q F2 +<ad75>144 496.8 Q F1(The maximum number of processes a)180 496.8 Q -.25 +(va)-.2 G(ilable to a single user).25 E F2<ad76>144 508.8 Q F1 .47 +(The maximum amount of virtual memory a)180 508.8 R -.25(va)-.2 G .47 (ilable to the shell and, on some systems, to).25 F(its children)180 -628.8 Q F1<ad78>144 640.8 Q F0(The maximum number of \214le locks)180 -640.8 Q F1<ad50>144 652.8 Q F0(The maximum number of pseudoterminals)180 -652.8 Q F1<ad52>144 664.8 Q F0(The maximum time a real-time process can\ - run before blocking, in microseconds)180 664.8 Q F1<ad54>144 676.8 Q F0 -(The maximum number of threads)180 676.8 Q(If)144 693.6 Q F2(limit)3.058 -E F0 .468(is gi)3.648 F -.15(ve)-.25 G .468(n, and the).15 F F1<ad61> -2.968 E F0 .468(option is not used,)2.968 F F2(limit)2.968 E F0 .468 +520.8 Q F2<ad78>144 532.8 Q F1(The maximum number of \214le locks)180 +532.8 Q F2<ad50>144 544.8 Q F1(The maximum number of pseudoterminals)180 +544.8 Q F2<ad52>144 556.8 Q F1(The maximum time a real-time process can\ + run before blocking, in microseconds)180 556.8 Q F2<ad54>144 568.8 Q F1 +(The maximum number of threads)180 568.8 Q(If)144 585.6 Q F0(limit)3.058 +E F1 .468(is gi)3.648 F -.15(ve)-.25 G .468(n, and the).15 F F2<ad61> +2.968 E F1 .468(option is not used,)2.968 F F0(limit)2.968 E F1 .468 (is the ne)2.968 F 2.968(wv)-.25 G .468 (alue of the speci\214ed resource.)-3.218 F(If)5.468 E .044 -(no option is gi)144 705.6 R -.15(ve)-.25 G .044(n, then).15 F F1<ad66> -2.544 E F0 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045 -(lues are in 1024-byte increments, e)1.11 F .045(xcept for)-.15 F F1 -<ad74>2.545 E F0 2.545(,w)C .045(hich is)-2.545 F .67(in seconds;)144 -717.6 R F1<ad52>3.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F -F1<ad70>3.17 E F0 3.17(,w)C .67(hich is in units of 512-byte blocks;) --3.17 F F1<ad50>3.17 E F0(,)A F1<ad54>3.17 E F0(,)A F1<ad62>3.17 E F0(,) -A F1<ad6b>144 729.6 Q F0(,)A F1<ad6e>3.736 E F0 3.736(,a)C(nd)-3.736 E -F1<ad75>3.736 E F0 3.736(,w)C 1.236(hich are unscaled v)-3.736 F 1.236 -(alues; and, when in posix mode,)-.25 F F1<ad63>3.736 E F0(and)3.736 E -F1<ad66>3.736 E F0 3.736(,w)C 1.237(hich are in)-3.736 F(GNU Bash 5.2)72 -768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(24)185.545 E 0 Cg -EP -%%Page: 25 25 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E .239(512-byte increments.)144 84 R .238 +(no option is gi)144 597.6 R -.15(ve)-.25 G .044(n, then).15 F F2<ad66> +2.544 E F1 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045 +(lues are in 1024-byte increments, e)1.11 F .045(xcept for)-.15 F F2 +<ad74>2.545 E F1 2.545(,w)C .045(hich is)-2.545 F .67(in seconds;)144 +609.6 R F2<ad52>3.17 E F1 3.17(,w)C .67(hich is in microseconds;)-3.17 F +F2<ad70>3.17 E F1 3.17(,w)C .67(hich is in units of 512-byte blocks;) +-3.17 F F2<ad50>3.17 E F1(,)A F2<ad54>3.17 E F1(,)A F2<ad62>3.17 E F1(,) +A F2<ad6b>144 621.6 Q F1(,)A F2<ad6e>3.736 E F1 3.736(,a)C(nd)-3.736 E +F2<ad75>3.736 E F1 3.736(,w)C 1.236(hich are unscaled v)-3.736 F 1.236 +(alues; and, when in posix mode,)-.25 F F2<ad63>3.736 E F1(and)3.736 E +F2<ad66>3.736 E F1 3.736(,w)C 1.237(hich are in)-3.736 F .239 +(512-byte increments.)144 633.6 R .238 (The return status is 0 unless an in)5.239 F -.25(va)-.4 G .238 (lid option or ar).25 F .238(gument is supplied, or an)-.18 F -(error occurs while setting a ne)144 96 Q 2.5(wl)-.25 G(imit.)-2.5 E/F1 -10/Times-Bold@0 SF(umask)108 112.8 Q F0([)2.5 E F1<ad70>A F0 2.5(][)C F1 -<ad53>-2.5 E F0 2.5(][)C/F2 10/Times-Italic@0 SF(mode)-2.5 E F0(])A .18 -(The user \214le-creation mask is set to)144 124.8 R F2(mode)3.06 E F0 -5.18(.I).18 G(f)-5.18 E F2(mode)3.06 E F0(be)2.86 E .18 +(error occurs while setting a ne)144 645.6 Q 2.5(wl)-.25 G(imit.)-2.5 E +F2(umask)108 662.4 Q F1([)2.5 E F2<ad70>A F1 2.5(][)C F2<ad53>-2.5 E F1 +2.5(][)C F0(mode)-2.5 E F1(])A .18 +(The user \214le-creation mask is set to)144 674.4 R F0(mode)3.06 E F1 +5.18(.I).18 G(f)-5.18 E F0(mode)3.06 E F1(be)2.86 E .18 (gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\ therwise it is interpreted as a symbolic mode mask similar to that acce\ -pted by)144 136.8 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144 -148.8 Q F2(mode)3.262 E F0 .382(is omitted, the current v)3.062 F .382 -(alue of the mask is printed.)-.25 F(The)5.382 E F1<ad53>2.882 E F0 .382 +pted by)144 686.4 R F0 -.15(ch)2.566 G(mod).15 E F1(\(1\).).77 E(If)144 +698.4 Q F0(mode)3.262 E F1 .382(is omitted, the current v)3.062 F .382 +(alue of the mask is printed.)-.25 F(The)5.382 E F2<ad53>2.882 E F1 .382 (option causes the mask to be)2.882 F .547 -(printed in symbolic form; the def)144 160.8 R .547 +(printed in symbolic form; the def)144 710.4 R .547 (ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G -(he)-3.047 E F1<ad70>3.047 E F0 .547(option is supplied, and)3.047 F F2 -(mode)144.38 172.8 Q F0 .551 +(he)-3.047 E F2<ad70>3.047 E F1 .547(option is supplied, and)3.047 F F0 +(mode)144.38 722.4 Q F1 .551 (is omitted, the output is in a form that may be reused as input.)3.231 -F .552(The return status is 0 if the)5.552 F(mode w)144 184.8 Q -(as successfully changed or if no)-.1 E F2(mode)2.5 E F0(ar)2.5 E -(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F1 -(unalias)108 201.6 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C F2(name)-2.5 E F0 -(...])2.5 E(Remo)144 213.6 Q 1.058 -.15(ve e)-.15 H(ach).15 E F2(name) -3.258 E F0 .758(from the list of de\214ned aliases.)3.258 F(If)5.758 E -F1<ad61>3.258 E F0 .757(is supplied, all alias de\214nitions are re-) -3.258 F(mo)144 225.6 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E -(alue is true unless a supplied)-.25 E F2(name)2.86 E F0 -(is not a de\214ned alias.)2.68 E F1(unset)108 242.4 Q F0<5bad>2.5 E F1 -(fv)A F0 2.5(][)C<ad>-2.5 E F1(n)A F0 2.5(][)C F2(name)-2.5 E F0(...]) -2.5 E -.15(Fo)144 254.4 S 3.803(re).15 G(ach)-3.803 E F2(name)4.163 E F0 -3.803(,r).18 G(emo)-3.803 E 1.603 -.15(ve t)-.15 H 1.303 -(he corresponding v).15 F 1.303(ariable or function.)-.25 F 1.303 -(If the)6.303 F F1<ad76>3.804 E F0 1.304(option is gi)3.804 F -.15(ve) --.25 G 1.304(n, each).15 F F2(name)144.36 266.4 Q F0 .465 +F .552(The return status is 0 if the)5.552 F(GNU Bash 5.2)72 768 Q +(2023 January 27)141.79 E(25)190.95 E 0 Cg EP +%%Page: 26 26 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E +(mode w)144 84 Q(as successfully changed or if no)-.1 E F0(mode)2.5 E F1 +(ar)2.5 E(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E +/F2 10/Times-Bold@0 SF(unalias)108 100.8 Q F1<5bad>2.5 E F2(a)A F1 2.5 +(][)C F0(name)-2.5 E F1 1.666(...)2.5 G(])-1.666 E(Remo)144 112.8 Q +1.058 -.15(ve e)-.15 H(ach).15 E F0(name)3.258 E F1 .758 +(from the list of de\214ned aliases.)3.258 F(If)5.758 E F2<ad61>3.258 E +F1 .757(is supplied, all alias de\214nitions are re-)3.258 F(mo)144 +124.8 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E +(alue is true unless a supplied)-.25 E F0(name)2.86 E F1 +(is not a de\214ned alias.)2.68 E F2(unset)108 141.6 Q F1<5bad>2.5 E F2 +(fv)A F1 2.5(][)C<ad>-2.5 E F2(n)A F1 2.5(][)C F0(name)-2.5 E F1 1.666 +(...)2.5 G(])-1.666 E -.15(Fo)144 153.6 S 3.803(re).15 G(ach)-3.803 E F0 +(name)4.163 E F1 3.803(,r).18 G(emo)-3.803 E 1.603 -.15(ve t)-.15 H +1.303(he corresponding v).15 F 1.303(ariable or function.)-.25 F 1.303 +(If the)6.303 F F2<ad76>3.804 E F1 1.304(option is gi)3.804 F -.15(ve) +-.25 G 1.304(n, each).15 F F0(name)144.36 165.6 Q F1 .465 (refers to a shell v)3.145 F .464(ariable, and that v)-.25 F .464 (ariable is remo)-.25 F -.15(ve)-.15 G 2.964(d. Read-only).15 F -.25(va) -2.964 G .464(riables may not be un-).25 F 2.768(set. If)144 278.4 R F1 -<ad66>2.768 E F0 .269(is speci\214ed, each)2.768 F F2(name)3.129 E F0 +2.964 G .464(riables may not be un-).25 F 2.768(set. If)144 177.6 R F2 +<ad66>2.768 E F1 .269(is speci\214ed, each)2.768 F F0(name)3.129 E F1 .269(refers to a shell function, and the function de\214nition is remo) -2.949 F -.15(ve)-.15 G(d.).15 E .404(If the)144 290.4 R F1<ad6e>2.904 E -F0 .404(option is supplied, and)2.904 F F2(name)2.904 E F0 .404(is a v) -2.904 F .404(ariable with the)-.25 F F2(namer)2.904 E(ef)-.37 E F0 -(attrib)2.904 E(ute,)-.2 E F2(name)2.904 E F0 .403(will be unset)2.904 F -.719(rather than the v)144 302.4 R .719(ariable it references.)-.25 F F1 -<ad6e>5.719 E F0 .719(has no ef)3.219 F .719(fect if the)-.25 F F1<ad66> -3.22 E F0 .72(option is supplied.)3.22 F .72(If no options)5.72 F .737 -(are supplied, each)144 314.4 R F2(name)3.237 E F0 .737(refers to a v) +2.949 F -.15(ve)-.15 G(d.).15 E .404(If the)144 189.6 R F2<ad6e>2.904 E +F1 .404(option is supplied, and)2.904 F F0(name)2.904 E F1 .404(is a v) +2.904 F .404(ariable with the)-.25 F F0(namer)2.904 E(ef)-.37 E F1 +(attrib)2.904 E(ute,)-.2 E F0(name)2.904 E F1 .403(will be unset)2.904 F +.719(rather than the v)144 201.6 R .719(ariable it references.)-.25 F F2 +<ad6e>5.719 E F1 .719(has no ef)3.219 F .719(fect if the)-.25 F F2<ad66> +3.22 E F1 .72(option is supplied.)3.22 F .72(If no options)5.72 F .737 +(are supplied, each)144 213.6 R F0(name)3.237 E F1 .737(refers to a v) 3.237 F .737(ariable; if there is no v)-.25 F .736 (ariable by that name, a function with)-.25 F 1.761(that name, if an)144 -326.4 R 3.061 -.65(y, i)-.15 H 4.261(su).65 G 4.261(nset. Each)-4.261 F +225.6 R 3.061 -.65(y, i)-.15 H 4.261(su).65 G 4.261(nset. Each)-4.261 F 1.761(unset v)4.261 F 1.761(ariable or function is remo)-.25 F -.15(ve) -.15 G 4.262(df).15 G 1.762(rom the en)-4.262 F(vironment)-.4 E 3.172 -(passed to subsequent commands.)144 338.4 R 3.172(If an)8.172 F 5.672 +(passed to subsequent commands.)144 237.6 R 3.172(If an)8.172 F 5.672 (yo)-.15 G(f)-5.672 E/F3 9/Times-Bold@0 SF -.27(BA)5.672 G(SH_ALIASES) .27 E/F4 9/Times-Roman@0 SF(,)A F3 -.27(BA)5.421 G(SH_ARGV0).27 E F4(,)A -F3 -.27(BA)5.421 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 350.4 S +F3 -.27(BA)5.421 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 249.6 S (SH_COMMAND).27 E F4(,)A F3 -.27(BA)11.481 G(SH_SUBSHELL).27 E F4(,)A F3 -.27(BA)11.482 G(SHPID).27 E F4(,)A F3(COMP_W)11.482 E(ORDBREAKS)-.09 E F4(,)A F3(DIRST)11.482 E -.495(AC)-.81 G(K).495 E F4(,)A F3(EPOCHREAL) -144 362.4 Q(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN) +144 261.6 Q(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN) 2.67 E(AME)-.18 E F4(,)A F3(GR)2.67 E(OUPS)-.27 E F4(,)A F3(HISTCMD)2.67 E F4(,)A F3(LINENO)2.67 E F4(,)A F3(RANDOM)2.67 E F4(,)A F3(SECONDS)144 -374.4 Q F4(,)A F0(or)4.029 E F3(SRANDOM)4.279 E F0 1.779(are unset, the) +273.6 Q F4(,)A F1(or)4.029 E F3(SRANDOM)4.279 E F1 1.779(are unset, the) 4.029 F 4.279(yl)-.15 G 1.779(ose their special properties, e)-4.279 F -.15(ve)-.25 G 4.279(ni).15 G 4.28(ft)-4.279 G(he)-4.28 E 4.28(ya)-.15 G -1.78(re subse-)-4.28 F(quently reset.)144 386.4 Q(The e)5 E -(xit status is true unless a)-.15 E F2(name)2.86 E F0 -(is readonly or may not be unset.)2.68 E F1(wait)108 403.2 Q F0([)2.5 E -F1(\255fn)A F0 2.5(][)C F1<ad70>-2.5 E F2(varname)2.5 E F0 2.5(][)C F2 -(id ...)-2.5 E F0(])A -.8(Wa)144 415.2 S .659(it for each speci\214ed c\ -hild process and return its termination status.).8 F(Each)5.659 E F2(id) -3.169 E F0 .658(may be a process)3.928 F .008 -(ID or a job speci\214cation; if a job spec is gi)144 427.2 R -.15(ve) +1.78(re subse-)-4.28 F(quently reset.)144 285.6 Q(The e)5 E +(xit status is true unless a)-.15 E F0(name)2.86 E F1 +(is readonly or may not be unset.)2.68 E F2(wait)108 302.4 Q F1([)2.5 E +F2(\255fn)A F1 2.5(][)C F2<ad70>-2.5 E F0(varname)2.5 E F1 2.5(][)C F0 +(id)-2.5 E F1 1.666(...)2.5 G(])-1.666 E -.8(Wa)144 314.4 S .659(it for\ + each speci\214ed child process and return its termination status.).8 F +(Each)5.659 E F0(id)3.169 E F1 .658(may be a process)3.928 F .008 +(ID or a job speci\214cation; if a job spec is gi)144 326.4 R -.15(ve) -.25 G .009(n, all processes in that job').15 F 2.509(sp)-.55 G .009 (ipeline are w)-2.509 F .009(aited for)-.1 F 5.009(.I)-.55 G(f)-5.009 E -F2(id)144.01 439.2 Q F0 .442(is not gi)3.712 F -.15(ve)-.25 G(n,).15 E -F1(wait)2.942 E F0 -.1(wa)2.942 G .441 +F0(id)144.01 338.4 Q F1 .442(is not gi)3.712 F -.15(ve)-.25 G(n,).15 E +F2(wait)2.942 E F1 -.1(wa)2.942 G .441 (its for all running background jobs and the last-e).1 F -.15(xe)-.15 G .441(cuted process substitu-).15 F .597 -(tion, if its process id is the same as)144 451.2 R F1($!)3.098 E F0 +(tion, if its process id is the same as)144 350.4 R F2($!)3.098 E F1 3.098(,a)C .598(nd the return status is zero.)-3.098 F .598(If the)5.598 -F F1<ad6e>3.098 E F0 .598(option is supplied,)3.098 F F1(wait)144 463.2 -Q F0 -.1(wa)3.083 G .583(its for a single job from the list of).1 F F2 -(id)3.083 E F0 3.083(so)C 1.383 -.4(r, i)-3.083 H 3.083(fn).4 G(o)-3.083 -E F2(id)3.083 E F0 3.083(sa)C .583(re supplied, an)-3.083 F 3.083(yj) --.15 G .582(ob, to complete and)-3.083 F .403(returns its e)144 475.2 R +F F2<ad6e>3.098 E F1 .598(option is supplied,)3.098 F F2(wait)144 362.4 +Q F1 -.1(wa)3.083 G .583(its for a single job from the list of).1 F F0 +(id)3.083 E F1 3.083(so)C 1.383 -.4(r, i)-3.083 H 3.083(fn).4 G(o)-3.083 +E F0(id)3.083 E F1 3.083(sa)C .583(re supplied, an)-3.083 F 3.083(yj) +-.15 G .582(ob, to complete and)-3.083 F .403(returns its e)144 374.4 R .403(xit status.)-.15 F .403(If none of the supplied ar)5.403 F .403 (guments is a child of the shell, or if no ar)-.18 F(guments)-.18 E .573 -(are supplied and the shell has no unw)144 487.2 R .573 +(are supplied and the shell has no unw)144 386.4 R .573 (aited-for children, the e)-.1 F .573(xit status is 127.)-.15 F .572 -(If the)5.573 F F1<ad70>3.072 E F0 .572(option is)3.072 F .39 +(If the)5.573 F F2<ad70>3.072 E F1 .572(option is)3.072 F .39 (supplied, the process or job identi\214er of the job for which the e) -144 499.2 R .39(xit status is returned is assigned to)-.15 F .905(the v) -144 511.2 R(ariable)-.25 E F2(varname)3.405 E F0 .905 +144 398.4 R .39(xit status is returned is assigned to)-.15 F .905(the v) +144 410.4 R(ariable)-.25 E F0(varname)3.405 E F1 .905 (named by the option ar)3.405 F 3.405(gument. The)-.18 F -.25(va)3.405 G .905(riable will be unset initially).25 F 3.405(,b)-.65 G(efore)-3.405 E -(an)144 523.2 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39 -(is useful only when the)3.89 F F1<ad6e>3.89 E F0 1.39 -(option is supplied.)3.89 F 1.39(Supplying the)6.39 F F1<ad66>3.89 E F0 -(option,)3.89 E .575(when job control is enabled, forces)144 535.2 R F1 -(wait)3.075 E F0 .575(to w)3.075 F .575(ait for)-.1 F F2(id)3.075 E F0 +(an)144 422.4 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39 +(is useful only when the)3.89 F F2<ad6e>3.89 E F1 1.39 +(option is supplied.)3.89 F 1.39(Supplying the)6.39 F F2<ad66>3.89 E F1 +(option,)3.89 E .575(when job control is enabled, forces)144 434.4 R F2 +(wait)3.075 E F1 .575(to w)3.075 F .575(ait for)-.1 F F0(id)3.075 E F1 .574(to terminate before returning its status, in-)3.075 F .635 -(stead of returning when it changes status.)144 547.2 R(If)5.635 E F2 -(id)3.145 E F0 .635(speci\214es a non-e)3.905 F .635 -(xistent process or job, the return)-.15 F .802(status is 127.)144 559.2 -R(If)5.801 E F1(wait)3.301 E F0 .801(is interrupted by a signal, the re\ +(stead of returning when it changes status.)144 446.4 R(If)5.635 E F0 +(id)3.145 E F1 .635(speci\214es a non-e)3.905 F .635 +(xistent process or job, the return)-.15 F .802(status is 127.)144 458.4 +R(If)5.801 E F2(wait)3.301 E F1 .801(is interrupted by a signal, the re\ turn status will be greater than 128, as de-)3.301 F 1.758 -(scribed under)144 571.2 R F1(SIGN)4.258 E(ALS)-.2 E F0(in)4.258 E F2 -(bash\(1\))4.258 E F0 6.758(.O)C 1.759 -(therwise, the return status is the e)-6.758 F 1.759 -(xit status of the last)-.15 F(process or job w)144 583.2 Q(aited for) --.1 E(.)-.55 E/F5 10.95/Times-Bold@0 SF(SHELL COMP)72 600 Q -1.04(AT) --.81 G(IBILITY MODE)1.04 E F0 1.355 -(Bash-4.0 introduced the concept of a)108 612 R F2 1.355 -(shell compatibility le)3.855 F(vel)-.15 E F0 3.855(,s)C 1.354 -(peci\214ed as a set of options to the shopt)-3.855 F -.2(bu)108 624 S -.398(iltin \().2 F F1(compat31)2.898 E F0(,)A F1(compat32)2.898 E F0(,)A -F1(compat40)2.898 E F0(,)A F1(compat41)2.898 E F0 2.898(,a)C .399 -(nd so on\).)-2.898 F .399(There is only one current compatibility)5.399 -F(le)108 636 Q -.15(ve)-.25 G 3.254(l-).15 G 3.254(-e)-3.254 G .754 -(ach option is mutually e)-3.254 F(xclusi)-.15 E -.15(ve)-.25 G 5.754 -(.T).15 G .754(he compatibility le)-5.754 F -.15(ve)-.25 G 3.253(li).15 -G 3.253(si)-3.253 G .753(ntended to allo)-3.253 F 3.253(wu)-.25 G .753 -(sers to select be-)-3.253 F(ha)108 648 Q 1.083(vior from pre)-.2 F +(scribed under)144 470.4 R F2(SIGN)4.258 E(ALS)-.2 E F1(in)4.258 E F0 +(bash)4.258 E F1 4.258(\(1\). Otherwise,)B 1.759 +(the return status is the e)4.259 F 1.759(xit status of the last)-.15 F +(process or job w)144 482.4 Q(aited for)-.1 E(.)-.55 E/F5 10.95 +/Times-Bold@0 SF(SHELL COMP)72 499.2 Q -1.04(AT)-.81 G(IBILITY MODE)1.04 +E F1 1.355(Bash-4.0 introduced the concept of a)108 511.2 R F0 1.355 +(shell compatibility le)3.855 F(vel)-.15 E F1 3.855(,s)C 1.354 +(peci\214ed as a set of options to the shopt)-3.855 F -.2(bu)108 523.2 S +.621(iltin \().2 F F2(compat31)A F1(,)A F2(compat32)3.121 E F1(,)A F2 +(compat40)3.121 E F1(,)A F2(compat41)3.121 E F1 3.121(,a)C .621 +(nd so on\).)-3.121 F .622(There is only one current compatibility)5.622 +F(le)108 535.2 Q -.15(ve)-.25 G 3.058<6c8a>.15 G .557 +(each option is mutually e)-.001 F(xclusi)-.15 E -.15(ve)-.25 G 5.557 +(.T).15 G .557(he compatibility le)-5.557 F -.15(ve)-.25 G 3.057(li).15 +G 3.057(si)-3.057 G .557(ntended to allo)-3.057 F 3.057(wu)-.25 G .557 +(sers to select be-)-3.057 F(ha)108 547.2 Q 1.083(vior from pre)-.2 F 1.083(vious v)-.25 F 1.083(ersions that is incompatible with ne)-.15 F 1.083(wer v)-.25 F 1.083(ersions while the)-.15 F 3.584(ym)-.15 G 1.084 -(igrate scripts to use)-3.584 F(current features and beha)108 660 Q +(igrate scripts to use)-3.584 F(current features and beha)108 559.2 Q (vior)-.2 E 2.5(.I)-.55 G(t')-2.5 E 2.5(si)-.55 G (ntended to be a temporary solution.)-2.5 E 1.457 -(This section does not mention beha)108 676.8 R 1.457 +(This section does not mention beha)108 576 R 1.457 (vior that is standard for a particular v)-.2 F 1.456 -(ersion \(e.g., setting)-.15 F F1(compat32)3.956 E F0 .886 -(means that quoting the rhs of the re)108 688.8 R(ge)-.15 E .886 +(ersion \(e.g., setting)-.15 F F2(compat32)3.956 E F1 .886 +(means that quoting the rhs of the re)108 588 R(ge)-.15 E .886 (xp matching operator quotes special re)-.15 F(ge)-.15 E .887 -(xp characters in the w)-.15 F(ord,)-.1 E(which is def)108 700.8 Q +(xp characters in the w)-.15 F(ord,)-.1 E(which is def)108 600 Q (ault beha)-.1 E(vior in bash-3.2 and subsequent v)-.2 E(ersions\).)-.15 -E .523(If a user enables, say)108 717.6 R(,)-.65 E F1(compat32)3.023 E -F0 3.023(,i)C 3.023(tm)-3.023 G .523(ay af)-3.023 F .523(fect the beha) +E .523(If a user enables, say)108 616.8 R(,)-.65 E F2(compat32)3.023 E +F1 3.023(,i)C 3.023(tm)-3.023 G .523(ay af)-3.023 F .523(fect the beha) -.25 F .523(vior of other compatibility le)-.2 F -.15(ve)-.25 G .522 (ls up to and includ-).15 F .259(ing the current compatibility le)108 -729.6 R -.15(ve)-.25 G 2.759(l. The).15 F .259 +628.8 R -.15(ve)-.25 G 2.759(l. The).15 F .259 (idea is that each compatibility le)2.759 F -.15(ve)-.25 G 2.76(lc).15 G -.26(ontrols beha)-2.76 F .26(vior that changed)-.2 F(GNU Bash 5.2)72 768 -Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(25)185.545 E 0 Cg EP -%%Page: 26 26 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E 1.646(in that v)108 84 R 1.646(ersion of) --.15 F/F1 10/Times-Bold@0 SF(bash)4.146 E F0 4.146(,b)C 1.646 +.26(ontrols beha)-2.76 F .26(vior that changed)-.2 F 1.646(in that v)108 +640.8 R 1.646(ersion of)-.15 F F2(bash)4.146 E F1 4.146(,b)C 1.646 (ut that beha)-4.346 F 1.646(vior may ha)-.2 F 1.946 -.15(ve b)-.2 H 1.646(een present in earlier v).15 F 4.146(ersions. F)-.15 F 1.645 (or instance, the)-.15 F .76 -(change to use locale-based comparisons with the)108 96 R F1([[)3.261 E -F0 .761(command came in bash-4.1, and earlier v)3.261 F .761 -(ersions used)-.15 F 1.905(ASCII-based comparisons, so enabling)108 108 -R F1(compat32)4.405 E F0 1.904 +(change to use locale-based comparisons with the)108 652.8 R F2([[)3.261 +E F1 .761(command came in bash-4.1, and earlier v)3.261 F .761 +(ersions used)-.15 F 1.905(ASCII-based comparisons, so enabling)108 +664.8 R F2(compat32)4.405 E F1 1.904 (will enable ASCII-based comparisons as well.)4.405 F(That)6.904 E .295 -(granularity may not be suf)108 120 R .296 +(granularity may not be suf)108 676.8 R .296 (\214cient for all uses, and as a result users should emplo)-.25 F 2.796 (yc)-.1 G .296(ompatibility le)-2.796 F -.15(ve)-.25 G .296(ls care-).15 -F(fully)108 132 Q 5(.R)-.65 G(ead the documentation for a particular fe\ -ature to \214nd out the current beha)-5 E(vior)-.2 E(.)-.55 E .532 -(Bash-4.3 introduced a ne)108 148.8 R 3.032(ws)-.25 G .531(hell v)-3.032 -F(ariable:)-.25 E/F2 9/Times-Bold@0 SF -.27(BA)3.031 G(SH_COMP).27 E --.855(AT)-.666 G/F3 9/Times-Roman@0 SF(.).855 E F0 .531(The v)5.031 F -.531(alue assigned to this v)-.25 F .531(ariable \(a decimal)-.25 F -.15 -(ve)108 160.8 S .107(rsion number lik).15 F 2.607(e4)-.1 G .107 -(.2, or an inte)-2.607 F .107(ger corresponding to the)-.15 F F1(compat) -2.608 E/F4 10/Times-Italic@0 SF(NN)A F0 .108(option, lik)2.608 F 2.608 -(e4)-.1 G .108(2\) determines the com-)-2.608 F(patibility le)108 172.8 -Q -.15(ve)-.25 G(l.).15 E .388(Starting with bash-4.4, Bash has be)108 -189.6 R .388(gun deprecating older compatibility le)-.15 F -.15(ve)-.25 -G 2.887(ls. Ev).15 F(entually)-.15 E 2.887(,t)-.65 G .387 -(he options will)-2.887 F(be remo)108 201.6 Q -.15(ve)-.15 G 2.5(di).15 -G 2.5(nf)-2.5 G -.2(avo)-2.6 G 2.5(ro).2 G(f)-2.5 E F2 -.27(BA)2.5 G -(SH_COMP).27 E -.855(AT)-.666 G F3(.).855 E F0 1.163 -(Bash-5.0 is the \214nal v)108 218.4 R 1.163 -(ersion for which there will be an indi)-.15 F 1.164 -(vidual shopt option for the pre)-.25 F 1.164(vious v)-.25 F(ersion.) --.15 E(Users should use)108 230.4 Q F2 -.27(BA)2.5 G(SH_COMP).27 E -.855 -(AT)-.666 G F0(on bash-5.0 and later v)3.105 E(ersions.)-.15 E 1.614 -(The follo)108 247.2 R 1.613(wing table describes the beha)-.25 F 1.613 +F(fully)108 688.8 Q 5(.R)-.65 G(ead the documentation for a particular \ +feature to \214nd out the current beha)-5 E(vior)-.2 E(.)-.55 E .532 +(Bash-4.3 introduced a ne)108 705.6 R 3.032(ws)-.25 G .531(hell v)-3.032 +F(ariable:)-.25 E F3 -.27(BA)3.031 G(SH_COMP).27 E -.855(AT)-.666 G F4 +(.).855 E F1 .531(The v)5.031 F .531(alue assigned to this v)-.25 F .531 +(ariable \(a decimal)-.25 F -.15(ve)108 717.6 S .107(rsion number lik) +.15 F 2.607(e4)-.1 G .107(.2, or an inte)-2.607 F .107 +(ger corresponding to the)-.15 F F2(compat)2.608 E F0(NN)A F1 .108 +(option, lik)2.608 F 2.608(e4)-.1 G .108(2\) determines the com-)-2.608 +F(patibility le)108 729.6 Q -.15(ve)-.25 G(l.).15 E(GNU Bash 5.2)72 768 +Q(2023 January 27)141.79 E(26)190.95 E 0 Cg EP +%%Page: 27 27 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E .387 +(Starting with bash-4.4,)108 84 R/F2 10/Times-Bold@0 SF(bash)2.887 E F1 +.387(has be)2.887 F .387(gun deprecating older compatibility le)-.15 F +-.15(ve)-.25 G 2.887(ls. Ev).15 F(entually)-.15 E 2.887(,t)-.65 G .387 +(he options will)-2.887 F(be remo)108 96 Q -.15(ve)-.15 G 2.5(di).15 G +2.5(nf)-2.5 G -.2(avo)-2.6 G 2.5(ro).2 G(f)-2.5 E/F3 9/Times-Bold@0 SF +-.27(BA)2.5 G(SH_COMP).27 E -.855(AT)-.666 G/F4 9/Times-Roman@0 SF(.) +.855 E F1 .647(Bash-5.0 w)108 112.8 R .647(as the \214nal v)-.1 F .647 +(ersion for which there will be an indi)-.15 F .647 +(vidual shopt option for the pre)-.25 F .648(vious v)-.25 F(ersion.)-.15 +E(Users should control the compatibility le)108 124.8 Q -.15(ve)-.25 G +2.5(lw).15 G(ith)-2.5 E F3 -.27(BA)2.5 G(SH_COMP).27 E -.855(AT)-.666 G +F4(.).855 E F1 1.614(The follo)108 141.6 R 1.613 +(wing table describes the beha)-.25 F 1.613 (vior changes controlled by each compatibility le)-.2 F -.15(ve)-.25 G -4.113(ls).15 G 4.113(etting. The)-4.113 F F1(compat)108 259.2 Q F4(NN)A -F0 1.186(tag is used as shorthand for setting the compatibility le)3.685 -F -.15(ve)-.25 G 3.686(lt).15 G(o)-3.686 E F4(NN)3.686 E F0 1.186 +4.113(ls).15 G 4.113(etting. The)-4.113 F F2(compat)108 153.6 Q F0(NN)A +F1 1.186(tag is used as shorthand for setting the compatibility le)3.685 +F -.15(ve)-.25 G 3.686(lt).15 G(o)-3.686 E F0(NN)3.686 E F1 1.186 (using one of the follo)3.686 F(wing)-.25 E 3.807(mechanisms. F)108 -271.2 R 1.307(or v)-.15 F 1.307 +165.6 R 1.307(or v)-.15 F 1.307 (ersions prior to bash-5.0, the compatibility le)-.15 F -.15(ve)-.25 G -3.806(lm).15 G 1.306(ay be set using the corresponding)-3.806 F F1 -(compat)108 283.2 Q F4(NN)A F0 .502(shopt option.)3.002 F -.15(Fo)5.502 +3.806(lm).15 G 1.306(ay be set using the corresponding)-3.806 F F2 +(compat)108 177.6 Q F0(NN)A F1 .502(shopt option.)3.002 F -.15(Fo)5.502 G 3.002(rb).15 G .502(ash-4.3 and later v)-3.002 F .502(ersions, the) --.15 F F2 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va) +-.15 F F3 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F1 -.25(va) 3.607 G .502(riable is preferred, and it).25 F -(is required for bash-5.1 and later v)108 295.2 Q(ersions.)-.15 E F1 -(compat31)108 312 Q F0<83>144 324 Q(quoting the rhs of the)180 324 Q F1 -([[)2.5 E F0(command')2.5 E 2.5(sr)-.55 G -.15(eg)-2.5 G -.15(ex).15 G -2.5(pm).15 G(atching operator \(=~\) has no special ef)-2.5 E(fect)-.25 -E F1(compat32)108 340.8 Q F0<83>144 352.8 Q .35 -(interrupting a command list such as "a ; b ; c" causes the e)180 352.8 -R -.15(xe)-.15 G .35(cution of the ne).15 F .35(xt command)-.15 F .017 -(in the list \(in bash-4.0 and later v)180 364.8 R .018 -(ersions, the shell acts as if it recei)-.15 F -.15(ve)-.25 G 2.518(dt) -.15 G .018(he interrupt, so in-)-2.518 F -(terrupting one command in a list aborts the e)180 376.8 Q -.15(xe)-.15 -G(cution of the entire list\)).15 E F1(compat40)108 393.6 Q F0<83>144 -405.6 Q(the)180 405.6 Q F1(<)2.674 E F0(and)2.674 E F1(>)2.673 E F0 .173 -(operators to the)2.673 F F1([[)2.673 E F0 .173 -(command do not consider the current locale when compar)2.673 F(-)-.2 E -.067(ing strings; the)180 417.6 R 2.567(yu)-.15 G .067 -(se ASCII ordering.)-2.567 F .068(Bash v)5.068 F .068 -(ersions prior to bash-4.1 use ASCII collation)-.15 F(and)180 429.6 Q F4 -(str)4.743 E(cmp)-.37 E F0 1.903 -(\(3\); bash-4.1 and later use the current locale').19 F 4.402(sc)-.55 G -1.902(ollation sequence and)-4.402 F F4(str)4.742 E(-)-.2 E(coll)180 -441.6 Q F0(\(3\).).51 E F1(compat41)108 458.4 Q F0<83>144 470.4 Q(in)180 -470.4 Q F4(posix)3.79 E F0(mode,)3.79 E F1(time)3.79 E F0 1.29 -(may be follo)3.79 F 1.29 -(wed by options and still be recognized as a reserv)-.25 F(ed)-.15 E -.1 -(wo)180 482.4 S(rd \(this is POSIX interpretation 267\)).1 E<83>144 -494.4 Q(in)180 494.4 Q F4(posix)2.709 E F0 .208 -(mode, the parser requires that an e)2.709 F -.15(ve)-.25 G 2.708(nn).15 -G .208(umber of single quotes occur in the)-2.708 F F4(wor)2.708 E(d) --.37 E F0 .281(portion of a double-quoted parameter e)180 506.4 R .282 -(xpansion and treats them specially)-.15 F 2.782(,s)-.65 G 2.782(ot) --2.782 G .282(hat charac-)-2.782 F(ters within the single quotes are co\ -nsidered quoted \(this is POSIX interpretation 221\))180 518.4 Q F1 -(compat42)108 535.2 Q F0<83>144 547.2 Q 1.056(the replacement string in\ - double-quoted pattern substitution does not under)180 547.2 R 1.055 -(go quote re-)-.18 F(mo)180 559.2 Q -.25(va)-.15 G(l, as it does in v) -.25 E(ersions after bash-4.2)-.15 E<83>144 571.2 Q .021 -(in posix mode, single quotes are considered special when e)180 571.2 R -.021(xpanding the)-.15 F F4(wor)2.521 E(d)-.37 E F0 .021(portion of a) -2.521 F .018(double-quoted parameter e)180 583.2 R .017 +(is required for bash-5.1 and later v)108 189.6 Q(ersions.)-.15 E F2 +(compat31)108 206.4 Q F1<83>144 218.4 Q(quoting the rhs of the)180 218.4 +Q F2([[)2.5 E F1(command')2.5 E 2.5(sr)-.55 G -.15(eg)-2.5 G -.15(ex).15 +G 2.5(pm).15 G(atching operator \(=\) has no special ef)-2.5 E(fect)-.25 +E F2(compat32)108 235.2 Q F1<83>144 247.2 Q(the)180 247.2 Q F2(<)2.674 E +F1(and)2.674 E F2(>)2.673 E F1 .173(operators to the)2.673 F F2([[)2.673 +E F1 .173(command do not consider the current locale when compar)2.673 F +(-)-.2 E(ing strings; the)180 259.2 Q 2.5(yu)-.15 G(se ASCII ordering.) +-2.5 E F2(compat40)108 276 Q F1<83>144 288 Q(the)180 288 Q F2(<)2.673 E +F1(and)2.673 E F2(>)2.673 E F1 .173(operators to the)2.673 F F2([[)2.673 +E F1 .173(command do not consider the current locale when compar)2.673 F +(-)-.2 E .923(ing strings; the)180 300 R 3.423(yu)-.15 G .923 +(se ASCII ordering.)-3.423 F F2(Bash)5.922 E F1 -.15(ve)3.422 G .922 +(rsions prior to bash-4.1 use ASCII colla-).15 F .366(tion and)180 312 R +F0(str)3.207 E(cmp)-.37 E F1 .367 +(\(3\); bash-4.1 and later use the current locale').19 F 2.867(sc)-.55 G +.367(ollation sequence and)-2.867 F F0(str)3.207 E(-)-.2 E(coll)180 324 +Q F1(\(3\).).51 E F2(compat41)108 340.8 Q F1<83>144 352.8 Q(in)180 352.8 +Q F0(posix)3.79 E F1(mode,)3.79 E F2(time)3.79 E F1 1.29(may be follo) +3.79 F 1.29(wed by options and still be recognized as a reserv)-.25 F +(ed)-.15 E -.1(wo)180 364.8 S(rd \(this is POSIX interpretation 267\)).1 +E<83>144 376.8 Q(in)180 376.8 Q F0(posix)2.708 E F1 .208 +(mode, the parser requires that an e)2.708 F -.15(ve)-.25 G 2.708(nn).15 +G .208(umber of single quotes occur in the)-2.708 F F0(wor)2.709 E(d) +-.37 E F1 .282(portion of a double-quoted parameter e)180 388.8 R .282 +(xpansion and treats them specially)-.15 F 2.781(,s)-.65 G 2.781(ot) +-2.781 G .281(hat charac-)-2.781 F(ters within the single quotes are co\ +nsidered quoted \(this is POSIX interpretation 221\))180 400.8 Q F2 +(compat42)108 417.6 Q F1<83>144 429.6 Q 1.055(the replacement string in\ + double-quoted pattern substitution does not under)180 429.6 R 1.056 +(go quote re-)-.18 F(mo)180 441.6 Q -.25(va)-.15 G(l, as it does in v) +.25 E(ersions after bash-4.2)-.15 E<83>144 453.6 Q .021 +(in posix mode, single quotes are considered special when e)180 453.6 R +.021(xpanding the)-.15 F F0(wor)2.52 E(d)-.37 E F1 .02(portion of a)2.52 +F .017(double-quoted parameter e)180 465.6 R .017 (xpansion and can be used to quote a closing brace or other spe-)-.15 F -.998(cial character \(this is part of POSIX interpretation 221\); in la\ -ter v)180 595.2 R .999(ersions, single quotes)-.15 F -(are not special within double-quoted w)180 607.2 Q(ord e)-.1 E -(xpansions)-.15 E F1(compat43)108 624 Q F0<83>144 636 Q 1.071 -(the shell does not print a w)180 636 R 1.07 -(arning message if an attempt is made to use a quoted com-)-.1 F .71 -(pound assignment as an ar)180 648 R .711 -(gument to declare \(e.g., declare -a foo=\010\(1 2\)\010\). Later v) --.18 F(ersions)-.15 E -.1(wa)180 660 S(rn that this usage is deprecated) -.1 E<83>144 672 Q -.1(wo)180 672 S .501(rd e).1 F .501 +.999(cial character \(this is part of POSIX interpretation 221\); in la\ +ter v)180 477.6 R .998(ersions, single quotes)-.15 F +(are not special within double-quoted w)180 489.6 Q(ord e)-.1 E +(xpansions)-.15 E F2(compat43)108 506.4 Q F1<83>144 518.4 Q 1.07 +(the shell does not print a w)180 518.4 R 1.071 +(arning message if an attempt is made to use a quoted com-)-.1 F .81 +(pound assignment as an ar)180 530.4 R .81 +(gument to declare \(e.g., declare \255a foo=\(1 2\)\). Later v)-.18 F +(ersions)-.15 E -.1(wa)180 542.4 S(rn that this usage is deprecated).1 E +<83>144 554.4 Q -.1(wo)180 554.4 S .5(rd e).1 F .501 (xpansion errors are considered non-f)-.15 F .501 -(atal errors that cause the current command to)-.1 F -.1(fa)180 684 S +(atal errors that cause the current command to)-.1 F -.1(fa)180 566.4 S .605(il, e).1 F -.15(ve)-.25 G 3.105(ni).15 G 3.105(np)-3.105 G .605 (osix mode \(the def)-3.105 F .605(ault beha)-.1 F .605(vior is to mak) -.2 F 3.105(et)-.1 G .605(hem f)-3.105 F .605 -(atal errors that cause the)-.1 F(shell to e)180 696 Q(xit\))-.15 E<83> -144 708 Q .355(when e)180 708 R -.15(xe)-.15 G .354 -(cuting a shell function, the loop state \(while/until/etc.\)).15 F .354 -(is not reset, so)5.354 F F1(br)2.854 E(eak)-.18 E F0(or)2.854 E F1 -(continue)180 720 Q F0 .052 +(atal errors that cause the)-.1 F(shell to e)180 578.4 Q(xit\))-.15 E +<83>144 590.4 Q .354(when e)180 590.4 R -.15(xe)-.15 G .354 +(cuting a shell function, the loop state \(while/until/etc.\)).15 F .355 +(is not reset, so)5.354 F F2(br)2.855 E(eak)-.18 E F1(or)2.855 E F2 +(continue)180 602.4 Q F1 .052 (in that function will break or continue loops in the calling conte) -2.552 F .053(xt. Bash-4.4 and)-.15 F(GNU Bash 5.2)72 768 Q(2021 No) -136.385 E -.15(ve)-.15 G(mber 22).15 E(26)185.545 E 0 Cg EP -%%Page: 27 27 +2.553 F .052(xt. Bash-4.4 and)-.15 F(later reset the loop state to pre) +180 614.4 Q -.15(ve)-.25 G(nt this).15 E F2(compat44)108 631.2 Q F1<83> +144 643.2 Q .719(the shell sets up the v)180 643.2 R .719(alues used by) +-.25 F F3 -.27(BA)3.219 G(SH_ARGV).27 E F1(and)2.969 E F3 -.27(BA)3.219 +G(SH_ARGC).27 E F1 .719(so the)2.969 F 3.219(yc)-.15 G .719(an e)-3.219 +F(xpand)-.15 E(to the shell')180 655.2 Q 2.5(sp)-.55 G +(ositional parameters e)-2.5 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(fe)-2.5 G +(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83>144 667.2 Q +2.635(as)180 667.2 S .135(ubshell inherits loops from its parent conte) +-2.635 F .135(xt, so)-.15 F F2(br)2.635 E(eak)-.18 E F1(or)2.635 E F2 +(continue)2.634 E F1 .134(will cause the sub-)2.634 F(shell to e)180 +679.2 Q 2.5(xit. Bash-5.0)-.15 F(and later reset the loop state to pre) +2.5 E -.15(ve)-.25 G(nt the e).15 E(xit)-.15 E<83>144 691.2 Q -.25(va) +180 691.2 S .618(riable assignments preceding b).25 F .618(uiltins lik) +-.2 F(e)-.1 E F2(export)3.118 E F1(and)3.118 E F2 -.18(re)3.118 G +(adonly).18 E F1 .618(that set attrib)3.118 F .619(utes con-)-.2 F .12 +(tinue to af)180 703.2 R .12(fect v)-.25 F .119 +(ariables with the same name in the calling en)-.25 F .119(vironment e) +-.4 F -.15(ve)-.25 G 2.619(ni).15 G 2.619(ft)-2.619 G .119(he shell is) +-2.619 F(not in posix mode)180 715.2 Q(GNU Bash 5.2)72 768 Q +(2023 January 27)141.79 E(27)190.95 E 0 Cg EP +%%Page: 28 28 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 -(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 -E(UIL)-.1 E(TINS\(1\))-.92 E(later reset the loop state to pre)180 84 Q --.15(ve)-.25 G(nt this).15 E/F1 10/Times-Bold@0 SF(compat44)108 100.8 Q -F0<83>144 112.8 Q .719(the shell sets up the v)180 112.8 R .719 -(alues used by)-.25 F/F2 9/Times-Bold@0 SF -.27(BA)3.219 G(SH_ARGV).27 E -F0(and)2.969 E F2 -.27(BA)3.219 G(SH_ARGC).27 E F0 .719(so the)2.969 F -3.218(yc)-.15 G .718(an e)-3.218 F(xpand)-.15 E(to the shell')180 124.8 -Q 2.5(sp)-.55 G(ositional parameters e)-2.5 E -.15(ve)-.25 G 2.5(ni).15 -G 2.5(fe)-2.5 G(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83> -144 136.8 Q 2.634(as)180 136.8 S .134 -(ubshell inherits loops from its parent conte)-2.634 F .135(xt, so)-.15 -F F1(br)2.635 E(eak)-.18 E F0(or)2.635 E F1(continue)2.635 E F0 .135 -(will cause the sub-)2.635 F(shell to e)180 148.8 Q 2.5(xit. Bash-5.0) --.15 F(and later reset the loop state to pre)2.5 E -.15(ve)-.25 G -(nt the e).15 E(xit)-.15 E<83>144 160.8 Q -.25(va)180 160.8 S .619 -(riable assignments preceding b).25 F .618(uiltins lik)-.2 F(e)-.1 E F1 -(export)3.118 E F0(and)3.118 E F1 -.18(re)3.118 G(adonly).18 E F0 .618 -(that set attrib)3.118 F .618(utes con-)-.2 F .119(tinue to af)180 172.8 -R .119(fect v)-.25 F .119(ariables with the same name in the calling en) --.25 F .12(vironment e)-.4 F -.15(ve)-.25 G 2.62(ni).15 G 2.62(ft)-2.62 -G .12(he shell is)-2.62 F(not in posix mode)180 184.8 Q F1(compat50)108 -201.6 Q F0<83>144 213.6 Q 1.209(Bash-5.1 changed the w)180 213.6 R(ay) --.1 E F2($RANDOM)3.709 E F0 1.209 -(is generated to introduce slightly more random-)3.459 F 1.018 -(ness. If the shell compatibility le)180 225.6 R -.15(ve)-.25 G 3.518 +/F0 10/Times-Italic@0 SF -.25(BA)72 48 S(SH_B).25 E(UIL)-.1 E(TINS)-.2 E +/F1 10/Times-Roman@0 SF 91.21(\(1\) General).58 F(Commands Manual)2.5 E +F0 -.25(BA)93.71 G(SH_B).25 E(UIL)-.1 E(TINS)-.2 E F1(\(1\)).58 E/F2 10 +/Times-Bold@0 SF(compat50)108 84 Q F1<83>144 96 Q 1.209 +(Bash-5.1 changed the w)180 96 R(ay)-.1 E/F3 9/Times-Bold@0 SF($RANDOM) +3.709 E F1 1.209(is generated to introduce slightly more random-)3.459 F +1.019(ness. If the shell compatibility le)180 108 R -.15(ve)-.25 G 3.518 (li).15 G 3.518(ss)-3.518 G 1.018(et to 50 or lo)-3.518 F(wer)-.25 E -3.518(,i)-.4 G 3.518(tr)-3.518 G -2.15 -.25(ev e)-3.518 H 1.019 -(rts to the method from).25 F .733(bash-5.0 and pre)180 237.6 R .733 -(vious v)-.25 F .732 +3.518(,i)-.4 G 3.518(tr)-3.518 G -2.15 -.25(ev e)-3.518 H 1.018 +(rts to the method from).25 F .732(bash-5.0 and pre)180 120 R .732 +(vious v)-.25 F .733 (ersions, so seeding the random number generator by assigning a)-.15 F --.25(va)180 249.6 S(lue to).25 E F2(RANDOM)2.5 E F0 -(will produce the same sequence as in bash-5.0)2.25 E<83>144 261.6 Q -.695(If the command hash table is empty)180 261.6 R 3.196(,b)-.65 G .696 -(ash v)-3.196 F .696(ersions prior to bash-5.1 printed an informa-)-.15 -F 1.321(tional message to that ef)180 273.6 R 1.321(fect, e)-.25 F -.15 -(ve)-.25 G 3.821(nw).15 G 1.321 +-.25(va)180 132 S(lue to).25 E F3(RANDOM)2.5 E F1 +(will produce the same sequence as in bash-5.0)2.25 E<83>144 144 Q .696 +(If the command hash table is empty)180 144 R 3.196(,b)-.65 G .696 +(ash v)-3.196 F .695(ersions prior to bash-5.1 printed an informa-)-.15 +F 1.32(tional message to that ef)180 156 R 1.321(fect, e)-.25 F -.15(ve) +-.25 G 3.821(nw).15 G 1.321 (hen producing output that can be reused as input.)-3.821 F -(Bash-5.1 suppresses that message when the)180 285.6 Q F1<ad6c>2.5 E F0 -(option is supplied.)2.5 E F1(compat51)108 302.4 Q F0<83>144 314.4 Q -(The)180 314.4 Q F1(unset)2.954 E F0 -.2(bu)2.954 G .454 -(iltin treats attempts to unset array subscripts).2 F F1(@)2.955 E F0 -(and)2.955 E F1(*)2.955 E F0(dif)2.955 E .455(ferently depending)-.25 F -(on whether the array is inde)180 326.4 Q -.15(xe)-.15 G 2.5(do).15 G +(Bash-5.1 suppresses that message when the)180 168 Q F2<ad6c>2.5 E F1 +(option is supplied.)2.5 E F2(compat51)108 184.8 Q F1<83>144 196.8 Q +(The)180 196.8 Q F2(unset)2.955 E F1 -.2(bu)2.955 G .455 +(iltin treats attempts to unset array subscripts).2 F F2(@)2.954 E F1 +(and)2.954 E F2(*)2.954 E F1(dif)2.954 E .454(ferently depending)-.25 F +(on whether the array is inde)180 208.8 Q -.15(xe)-.15 G 2.5(do).15 G 2.5(ra)-2.5 G(ssociati)-2.5 E -.15(ve)-.25 G 2.5(,a).15 G(nd dif)-2.5 E -(ferently than in pre)-.25 E(vious v)-.25 E(ersions.)-.15 E/F3 10.95 -/Times-Bold@0 SF(SEE ALSO)72 343.2 Q F0(bash\(1\), sh\(1\))108 355.2 Q -(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E -(27)185.545 E 0 Cg EP +(ferently than in pre)-.25 E(vious v)-.25 E(ersions.)-.15 E<83>144 220.8 +Q .432(arithmetic commands \()180 220.8 R F2(\(\()2.932 E F1 1.666(...)C +F2(\)\))-1.666 E F1 2.933(\)a)2.932 G .433(nd the e)-2.933 F .433 +(xpressions in an arithmetic for statement can be)-.15 F -.15(ex)180 +232.8 S(panded more than once).15 E<83>144 244.8 Q -.15(ex)180 244.8 S +.403(pressions used as ar).15 F .403 +(guments to arithmetic operators in the)-.18 F F2([[)2.902 E F1 .402 +(conditional command can)2.902 F(be e)180 256.8 Q +(xpanded more than once)-.15 E<83>144 268.8 Q(the e)180 268.8 Q +(xpressions in substring parameter brace e)-.15 E(xpansion can be e)-.15 +E(xpanded more than once)-.15 E<83>144 280.8 Q(the e)180 280.8 Q +(xpressions in the)-.15 E F2($\(\()2.5 E F1 1.666(...)C F2(\)\))-1.666 E +F1 -.1(wo)2.5 G(rd e).1 E(xpansion can be e)-.15 E +(xpanded more than once)-.15 E<83>144 292.8 Q(arithmetic e)180 292.8 Q +(xpressions used as inde)-.15 E -.15(xe)-.15 G 2.5(da).15 G +(rray subscripts can be e)-2.5 E(xpanded more than once)-.15 E<83>144 +304.8 Q F2 .605(test \255v)180 304.8 R F1 3.105(,w)C .605(hen gi)-3.105 +F -.15(ve)-.25 G 3.105(na).15 G 3.105(na)-3.105 G -.18(rg)-3.105 G .605 +(ument of).18 F F2(A[@])3.105 E F1 3.105(,w)C(here)-3.105 E F2(A)3.105 E +F1 .606(is an e)3.105 F .606(xisting associati)-.15 F .906 -.15(ve a) +-.25 H(rray).15 E 3.106(,w)-.65 G(ill)-3.106 E .714 +(return true if the array has an)180 316.8 R 3.214(ys)-.15 G .714 +(et elements.)-3.214 F .714(Bash-5.2 will look for and report on a k) +5.714 F -.15(ey)-.1 G(named)180 328.8 Q F2(@)2.5 E F1(.)A<83>144 340.8 Q +.188(the ${)180 340.8 R F0(par)A(ameter)-.15 E F2([:]=)A F0(value)A F1 +2.689(}w)C .189(ord e)-2.789 F .189(xpansion will return)-.15 F F0 +(value)2.689 E F1 2.689(,b)C .189(efore an)-2.689 F 2.689(yv)-.15 G +(ariable-speci\214c)-2.939 E 1.235(transformations ha)180 352.8 R 1.535 +-.15(ve b)-.2 H 1.235(een performed \(e.g., con).15 F -.15(ve)-.4 G +1.235(rting to lo).15 F 3.735(wercase\). Bash-5.2)-.25 F 1.235(will re-) +3.735 F(turn the \214nal v)180 364.8 Q(alue assigned to the v)-.25 E +(ariable.)-.25 E<83>144 376.8 Q -.15(Pa)180 376.8 S .945 +(rsing command substitutions will beha).15 F 1.245 -.15(ve a)-.2 H 3.445 +(si).15 G 3.446(fe)-3.445 G .946(xtended globbing \(see the description) +-3.596 F .339(of the)180 388.8 R F2(shopt)2.839 E F1 -.2(bu)2.839 G .339 +(iltin abo).2 F -.15(ve)-.15 G 2.839(\)i).15 G 2.839(se)-2.839 G .338 +(nabled, so that parsing a command substitution containing)-2.839 F .022 +(an e)180 400.8 R .022(xtglob pattern \(say)-.15 F 2.522(,a)-.65 G 2.522 +(sp)-2.522 G .022(art of a shell function\) will not f)-2.522 F 2.523 +(ail. This)-.1 F .023(assumes the intent is)2.523 F .04(to enable e)180 +412.8 R .039(xtglob before the command is e)-.15 F -.15(xe)-.15 G .039 +(cuted and w).15 F .039(ord e)-.1 F .039(xpansions are performed.)-.15 F +(It)5.039 E .4(will f)180 424.8 R .4(ail at w)-.1 F .4(ord e)-.1 F .4 +(xpansion time if e)-.15 F .4(xtglob hasn')-.15 F 2.9(tb)-.18 G .4 +(een enabled by the time the command)-2.9 F(is e)180 436.8 Q -.15(xe) +-.15 G(cuted.).15 E/F4 10.95/Times-Bold@0 SF(SEE ALSO)72 453.6 Q F1 +(bash\(1\), sh\(1\))108 465.6 Q(GNU Bash 5.2)72 768 Q(2023 January 27) +141.79 E(28)190.95 E 0 Cg EP %%Trailer end %%EOF diff --git a/doc/rbash.0 b/doc/rbash.0 index 96845d0c2..230b358b1 100644 --- a/doc/rbash.0 +++ b/doc/rbash.0 @@ -1,41 +1,39 @@ -RBASH(1) General Commands Manual RBASH(1) - - +_R_B_A_S_H(1) General Commands Manual _R_B_A_S_H(1) NNAAMMEE rbash - restricted bash, see bbaasshh(1) 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 - +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, HHIISSTTFFIILLEE, EENNVV, + +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, HHIISSTTFFIILLEE, EENNVV, or BBAASSHH__EENNVV +o specifying command names containing // - +o specifying a filename containing a // as an argument to the .. + +o specifying a filename 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 hhiissttoorryy 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 >> redirect- - ion operators + +o redirecting output using the >, >|, <>, >&, &>, and >> redirec- + tion operators +o using the eexxeecc builtin command to replace the shell with another command @@ -59,6 +57,4 @@ RREESSTTRRIICCTTEEDD SSHHEELLLL SSEEEE AALLSSOO bash(1) - - -Bash-5.2 2021 November 22 RBASH(1) +Bash-5.2 2021 November 22 _R_B_A_S_H(1) diff --git a/doc/rbash.ps b/doc/rbash.ps index 06fe883dc..f32c8b145 100644 --- a/doc/rbash.ps +++ b/doc/rbash.ps @@ -1,9 +1,10 @@ %!PS-Adobe-3.0 -%%Creator: groff version 1.22.4 -%%CreationDate: Mon Sep 19 12:02:42 2022 -%%DocumentNeededResources: font Times-Roman +%%Creator: groff version 1.23.0 +%%CreationDate: Thu Apr 4 17:50:31 2024 +%%DocumentNeededResources: font Times-Italic +%%+ font Times-Roman %%+ font Times-Bold -%%DocumentSuppliedResources: procset grops 1.22 4 +%%DocumentSuppliedResources: procset grops 1.23 0 %%Pages: 1 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () @@ -13,7 +14,7 @@ %%PageMedia: Default %%EndDefaults %%BeginProlog -%%BeginResource: procset grops 1.22 4 +%%BeginResource: procset grops 1.23 0 %!PS-Adobe-3.0 Resource-ProcSet /setpacking where{ pop @@ -21,6 +22,7 @@ currentpacking true setpacking }if /grops 120 dict dup begin +% The ASCII code of the space character. /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def @@ -42,16 +44,18 @@ true setpacking /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +% name size font SF - /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def +% name a c d font MF - /MF{ findfont [5 2 roll -0 3 1 roll +0 3 1 roll % b neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def @@ -60,13 +64,19 @@ dup setfont /RES 0 def /PL 0 def /LS 0 def +% Enable manual feed. +% MANUAL - /MANUAL{ statusdict begin/manualfeed true store end }bind def +% Guess the page length. +% This assumes that the imageable area is vertically centered on the page. +% PLG - length /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def +% BP - /BP{ /level0 save def 1 setlinecap @@ -84,47 +94,61 @@ LS{ level0 restore showpage }def +% centerx centery radius startangle endangle DA - /DA{ newpath arcn stroke }bind def +% x y SN - x' y' +% round a position to nearest (pixel + (.25,.25)) /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def +% endx endy startx starty DL - +% we round the endpoints of the line, so that parallel horizontal +% and vertical lines will appear even /DL{ SN moveto SN lineto stroke }bind def +% centerx centery radius DC - /DC{ newpath 0 360 arc closepath }bind def /TM matrix def +% width height centerx centery DE - /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def +% these are for splines /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def +% fill the last path +% r g b Fr - /Fr{ setrgbcolor fill }bind def +% c m y k Fk - /setcmykcolor where{ pop /Fk{ setcmykcolor fill }bind def }if +% g Fg - /Fg{ setgray fill }bind def +% fill with the "current color" /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def @@ -133,6 +157,7 @@ pop /Ck/setcmykcolor load def }if /Cg/setgray load def +% new_font_name encoding_vector old_font_name RE - /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin @@ -147,6 +172,7 @@ dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def +% hpos vpos EBEGIN - /EBEGIN{ moveto DEFS begin @@ -154,11 +180,13 @@ DEFS begin /EEND/end load def /CNT 0 def /level1 0 def +% llx lly newwid wid newht ht newllx newlly PBEGIN - /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate +% set the graphics state to default values 0 setgray 0 setlinecap 1 setlinewidth @@ -177,6 +205,10 @@ newpath /CNT countdictstack def userdict begin /showpage{}def +% +% Any included setpagedevice should be ignored. +% See: http://www.w-beer.de/doc/ps/. +% /setpagedevice{}def mark }bind def @@ -196,6 +228,7 @@ setpacking %%BeginFeature: *PageSize Default << /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice %%EndFeature +%%IncludeResource: font Times-Italic %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 @@ -227,63 +260,64 @@ def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash /ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def /Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE +/Times-Italic@0 ENC0/Times-Italic RE %%EndSetup %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF(RB)72 48 Q 130.47(ASH\(1\) General)-.35 F -(Commands Manual)2.5 E(RB)132.97 E(ASH\(1\))-.35 E/F1 10.95/Times-Bold@0 -SF -.219(NA)72 84 S(ME).219 E F0(rbash \255 restricted bash, see)108 96 -Q/F2 10/Times-Bold@0 SF(bash)2.5 E F0(\(1\))A F1(RESTRICTED SHELL)72 -112.8 Q F0(If)108 124.8 Q F2(bash)3.582 E F0 1.081 -(is started with the name)3.581 F F2(rbash)3.581 E F0 3.581(,o)C 3.581 -(rt)-3.581 G(he)-3.581 E F2<ad72>3.581 E F0 1.081 +/F0 10/Times-Italic@0 SF(RB)72.63 48 Q(ASH)-.25 E/F1 10/Times-Roman@0 SF +131.58(\(1\) General).95 F(Commands Manual)2.5 E F0(RB)134.71 E(ASH)-.25 +E F1(\(1\)).95 E/F2 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F1 +(rbash \255 restricted bash, see)108 96 Q/F3 10/Times-Bold@0 SF(bash)2.5 +E F1(\(1\))A F2(RESTRICTED SHELL)72 112.8 Q F1(If)108 124.8 Q F3(bash) +3.582 E F1 1.081(is started with the name)3.581 F F3(rbash)3.581 E F1 +3.581(,o)C 3.581(rt)-3.581 G(he)-3.581 E F3<ad72>3.581 E F1 1.081 (option is supplied at in)3.581 F -.2(vo)-.4 G 1.081 (cation, the shell becomes re-).2 F 2.976(stricted. A)108 136.8 R .476 (restricted shell is used to set up an en)2.976 F .476 (vironment more controlled than the standard shell.)-.4 F .477(It be-) 5.477 F(ha)108 148.8 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E -F2(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E +F3(bash)2.5 E F1(with the e)2.5 E(xception that the follo)-.15 E (wing are disallo)-.25 E(wed or not performed:)-.25 E<83>108 165.6 Q -(changing directories with)144 165.6 Q F2(cd)2.5 E F0<83>108 182.4 Q -(setting or unsetting the v)144 182.4 Q(alues of)-.25 E/F3 9 -/Times-Bold@0 SF(SHELL)2.5 E/F4 9/Times-Roman@0 SF(,)A F3 -.666(PA)2.25 -G(TH)-.189 E F4(,)A F3(HISTFILE)2.25 E F4(,)A F3(ENV)2.25 E F4(,)A F0 -(or)2.25 E F3 -.27(BA)2.5 G(SH_ENV).27 E F0<83>108 199.2 Q -(specifying command names containing)144 199.2 Q F2(/)2.5 E F0<83>108 -216 Q(specifying a \214lename containing a)144 216 Q F2(/)2.5 E F0 -(as an ar)2.5 E(gument to the)-.18 E F2(.)2.5 E F0 -.2(bu)5 G +(changing directories with)144 165.6 Q F3(cd)2.5 E F1<83>108 182.4 Q +(setting or unsetting the v)144 182.4 Q(alues of)-.25 E/F4 9 +/Times-Bold@0 SF(SHELL)2.5 E/F5 9/Times-Roman@0 SF(,)A F4 -.666(PA)2.25 +G(TH)-.189 E F5(,)A F4(HISTFILE)2.25 E F5(,)A F4(ENV)2.25 E F5(,)A F1 +(or)2.25 E F4 -.27(BA)2.5 G(SH_ENV).27 E F1<83>108 199.2 Q +(specifying command names containing)144 199.2 Q F3(/)2.5 E F1<83>108 +216 Q(specifying a \214lename containing a)144 216 Q F3(/)2.5 E F1 +(as an ar)2.5 E(gument to the)-.18 E F3(.)2.5 E F1 -.2(bu)5 G (iltin command).2 E<83>108 232.8 Q (specifying a \214lename containing a slash as an ar)144 232.8 Q -(gument to the)-.18 E F2(history)2.5 E F0 -.2(bu)2.5 G(iltin command).2 +(gument to the)-.18 E F3(history)2.5 E F1 -.2(bu)2.5 G(iltin command).2 E<83>108 249.6 Q .45 (specifying a \214lename containing a slash as an ar)144 249.6 R .449 -(gument to the)-.18 F F2<ad70>2.949 E F0 .449(option to the)2.949 F F2 -(hash)2.949 E F0 -.2(bu)2.949 G .449(iltin com-).2 F(mand)144 261.6 Q +(gument to the)-.18 F F3<ad70>2.949 E F1 .449(option to the)2.949 F F3 +(hash)2.949 E F1 -.2(bu)2.949 G .449(iltin com-).2 F(mand)144 261.6 Q <83>108 278.4 Q(importing function de\214nitions from the shell en)144 278.4 Q(vironment at startup)-.4 E<83>108 295.2 Q(parsing the v)144 -295.2 Q(alue of)-.25 E F3(SHELLOPTS)2.5 E F0(from the shell en)2.25 E +295.2 Q(alue of)-.25 E F4(SHELLOPTS)2.5 E F1(from the shell en)2.25 E (vironment at startup)-.4 E<83>108 312 Q(redirecting output using the >\ , >|, <>, >&, &>, and >> redirection operators)144 312 Q<83>108 328.8 Q -(using the)144 328.8 Q F2(exec)2.5 E F0 -.2(bu)2.5 G +(using the)144 328.8 Q F3(exec)2.5 E F1 -.2(bu)2.5 G (iltin command to replace the shell with another command).2 E<83>108 345.6 Q(adding or deleting b)144 345.6 Q(uiltin commands with the)-.2 E -F2<ad66>2.5 E F0(and)2.5 E F2<ad64>2.5 E F0(options to the)2.5 E F2 -(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 362.4 Q -(using the)144 362.4 Q F2(enable)2.5 E F0 -.2(bu)2.5 G +F3<ad66>2.5 E F1(and)2.5 E F3<ad64>2.5 E F1(options to the)2.5 E F3 +(enable)2.5 E F1 -.2(bu)2.5 G(iltin command).2 E<83>108 362.4 Q +(using the)144 362.4 Q F3(enable)2.5 E F1 -.2(bu)2.5 G (iltin command to enable disabled shell b).2 E(uiltins)-.2 E<83>108 -379.2 Q(specifying the)144 379.2 Q F2<ad70>2.5 E F0(option to the)2.5 E -F2(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 396 Q -(turning of)144 396 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F2 -(set +r)2.5 E F0(or)2.5 E F2(shopt -u r)2.5 E(estricted_shell)-.18 E F0 -(.)A(These restrictions are enforced after an)108 412.8 Q 2.5(ys)-.15 G -(tartup \214les are read.)-2.5 E .429 +379.2 Q(specifying the)144 379.2 Q F3<ad70>2.5 E F1(option to the)2.5 E +F3(command)2.5 E F1 -.2(bu)2.5 G(iltin command).2 E<83>108 396 Q +(turning of)144 396 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F3 +(set +r)2.5 E F1(or)2.5 E F3(shopt \255u r)2.5 E(estricted_shell)-.18 E +F1(.)A(These restrictions are enforced after an)108 412.8 Q 2.5(ys)-.15 +G(tartup \214les are read.)-2.5 E .429 (When a command that is found to be a shell script is e)108 429.6 R -.15 -(xe)-.15 G(cuted,).15 E F2(rbash)2.929 E F0 .429(turns of)2.929 F 2.929 +(xe)-.15 G(cuted,).15 E F3(rbash)2.929 E F1 .429(turns of)2.929 F 2.929 (fa)-.25 G .729 -.15(ny r)-2.929 H .429(estrictions in the shell).15 F (spa)108 441.6 Q(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E -F1(SEE ALSO)72 458.4 Q F0(bash\(1\))108 470.4 Q 157.215(Bash-5.2 2021)72 +F2(SEE ALSO)72 458.4 Q F1(bash\(1\))108 470.4 Q 157.215(Bash-5.2 2021)72 768 R(No)2.5 E -.15(ve)-.15 G(mber 22).15 E(1)190.545 E 0 Cg EP %%Trailer end diff --git a/doc/version.texi b/doc/version.texi index 175aa07a9..ce81c29f8 100644 --- a/doc/version.texi +++ b/doc/version.texi @@ -1,11 +1,11 @@ @ignore -Copyright (C) 1988-2022 Free Software Foundation, Inc. +Copyright (C) 1988-2024 Free Software Foundation, Inc. @end ignore -@set LASTCHANGE Mon Sep 19 11:13:51 EDT 2022 +@set LASTCHANGE Fri Apr 5 12:10:00 EDT 2024 -@set EDITION 5.2 -@set VERSION 5.2 +@set EDITION 5.3 +@set VERSION 5.3 -@set UPDATED 19 September 2022 -@set UPDATED-MONTH September 2022 +@set UPDATED 5 April 2024 +@set UPDATED-MONTH April 2024 diff --git a/error.c b/error.c index 3e7a2d617..366d012f5 100644 --- a/error.c +++ b/error.c @@ -1,6 +1,6 @@ /* error.c -- Functions for handling errors. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -27,12 +27,7 @@ # include <unistd.h> #endif -#if defined (PREFER_STDARG) -# include <stdarg.h> -#else -# include <varargs.h> -#endif - +#include <stdarg.h> #include <stdio.h> #include <errno.h> @@ -52,18 +47,18 @@ extern int errno; # include "bashhist.h" #endif -extern int executing_line_number PARAMS((void)); +extern int executing_line_number (void); #if defined (JOB_CONTROL) extern pid_t shell_pgrp; -extern int give_terminal_to PARAMS((pid_t, int)); +extern int give_terminal_to (pid_t, int); #endif /* JOB_CONTROL */ #if defined (ARRAY_VARS) extern const char * const bash_badsub_errmsg; #endif -static void error_prolog PARAMS((int)); +static void error_prolog (int); /* The current maintainer of the shell. You change this in the Makefile. */ @@ -76,8 +71,7 @@ const char * const the_current_maintainer = MAINTAINER; int gnu_error_format = 0; static void -error_prolog (print_lineno) - int print_lineno; +error_prolog (int print_lineno) { char *ename; int line; @@ -93,7 +87,7 @@ error_prolog (print_lineno) /* Return the name of the shell or the shell script for error reporting. */ char * -get_name_for_error () +get_name_for_error (void) { char *name; #if defined (ARRAY_VARS) @@ -129,20 +123,13 @@ get_name_for_error () sys_error so the filename is not interpreted as a printf-style format string. */ void -file_error (filename) - const char *filename; +file_error (const char *filename) { report_error ("%s: %s", filename, strerror (errno)); } void -#if defined (PREFER_STDARG) programming_error (const char *format, ...) -#else -programming_error (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; char *h; @@ -151,7 +138,7 @@ programming_error (format, va_alist) give_terminal_to (shell_pgrp, 0); #endif /* JOB_CONTROL */ - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, "\n"); @@ -180,19 +167,13 @@ programming_error (format, va_alist) outside this file mostly to report substitution and expansion errors, and for bad invocation options. */ void -#if defined (PREFER_STDARG) report_error (const char *format, ...) -#else -report_error (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; error_prolog (1); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, "\n"); @@ -207,19 +188,13 @@ report_error (format, va_alist) } void -#if defined (PREFER_STDARG) fatal_error (const char *format, ...) -#else -fatal_error (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; error_prolog (0); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, "\n"); @@ -229,19 +204,13 @@ fatal_error (format, va_alist) } void -#if defined (PREFER_STDARG) internal_error (const char *format, ...) -#else -internal_error (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; error_prolog (1); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, "\n"); @@ -250,20 +219,14 @@ internal_error (format, va_alist) } void -#if defined (PREFER_STDARG) internal_warning (const char *format, ...) -#else -internal_warning (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; error_prolog (1); fprintf (stderr, _("warning: ")); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, "\n"); @@ -272,13 +235,7 @@ internal_warning (format, va_alist) } void -#if defined (PREFER_STDARG) internal_inform (const char *format, ...) -#else -internal_inform (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; @@ -286,7 +243,7 @@ internal_inform (format, va_alist) /* TRANSLATORS: this is a prefix for informational messages. */ fprintf (stderr, _("INFORM: ")); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, "\n"); @@ -295,13 +252,7 @@ internal_inform (format, va_alist) } void -#if defined (PREFER_STDARG) internal_debug (const char *format, ...) -#else -internal_debug (format, va_alist) - const char *format; - va_dcl -#endif { #ifdef DEBUG va_list args; @@ -309,7 +260,7 @@ internal_debug (format, va_alist) error_prolog (1); fprintf (stderr, _("DEBUG warning: ")); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, "\n"); @@ -321,13 +272,7 @@ internal_debug (format, va_alist) } void -#if defined (PREFER_STDARG) sys_error (const char *format, ...) -#else -sys_error (format, va_alist) - const char *format; - va_dcl -#endif { int e; va_list args; @@ -335,7 +280,7 @@ sys_error (format, va_alist) e = errno; error_prolog (0); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, ": %s\n", strerror (e)); @@ -352,14 +297,7 @@ sys_error (format, va_alist) the input file name is inserted only if it is different from the shell name. */ void -#if defined (PREFER_STDARG) parser_error (int lineno, const char *format, ...) -#else -parser_error (lineno, format, va_alist) - int lineno; - const char *format; - va_dcl -#endif { va_list args; char *ename, *iname; @@ -376,7 +314,7 @@ parser_error (lineno, format, va_alist) else fprintf (stderr, "%s: %s:%s%d: ", ename, iname, gnu_error_format ? "" : _(" line "), lineno); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, "\n"); @@ -390,8 +328,7 @@ parser_error (lineno, format, va_alist) #ifdef DEBUG /* This assumes ASCII and is suitable only for debugging */ char * -strescape (str) - const char *str; +strescape (const char *str) { char *r, *result; unsigned char *s; @@ -419,19 +356,13 @@ strescape (str) } void -#if defined (PREFER_STDARG) itrace (const char *format, ...) -#else -itrace (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; fprintf(stderr, "TRACE: pid %ld: ", (long)getpid()); - SH_VA_START (args, format); + va_start (args, format); vfprintf (stderr, format, args); fprintf (stderr, "\n"); @@ -444,13 +375,7 @@ itrace (format, va_alist) /* A trace function for silent debugging -- doesn't require a control terminal. */ void -#if defined (PREFER_STDARG) trace (const char *format, ...) -#else -trace (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; static FILE *tracefp = (FILE *)NULL; @@ -465,7 +390,7 @@ trace (format, va_alist) fprintf(tracefp, "TRACE: pid %ld: ", (long)getpid()); - SH_VA_START (args, format); + va_start (args, format); vfprintf (tracefp, format, args); fprintf (tracefp, "\n"); @@ -493,9 +418,7 @@ static const char * const cmd_error_table[] = { }; void -command_error (func, code, e, flags) - const char *func; - int code, e, flags; /* flags currently unused */ +command_error (const char *func, int code, int e, int flags) { if (code > CMDERR_LAST) code = CMDERR_DEFAULT; @@ -504,8 +427,7 @@ command_error (func, code, e, flags) } char * -command_errstr (code) - int code; +command_errstr (int code) { if (code > CMDERR_LAST) code = CMDERR_DEFAULT; @@ -515,23 +437,20 @@ command_errstr (code) #ifdef ARRAY_VARS void -err_badarraysub (s) - const char *s; +err_badarraysub (const char *s) { report_error ("%s: %s", s, _(bash_badsub_errmsg)); } #endif void -err_unboundvar (s) - const char *s; +err_unboundvar (const char *s) { report_error (_("%s: unbound variable"), s); } void -err_readonly (s) - const char *s; +err_readonly (const char *s) { report_error (_("%s: readonly variable"), s); } diff --git a/error.h b/error.h index 785c1deb5..9a3127726 100644 --- a/error.h +++ b/error.h @@ -1,6 +1,6 @@ /* error.h -- External declarations of functions appearing in error.c. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -24,54 +24,54 @@ #include "stdc.h" /* Get the name of the shell or shell script for an error message. */ -extern char *get_name_for_error PARAMS((void)); +extern char *get_name_for_error (void); /* Report an error having to do with FILENAME. */ -extern void file_error PARAMS((const char *)); +extern void file_error (const char *); /* Report a programmer's error, and abort. Pass REASON, and ARG1 ... ARG5. */ -extern void programming_error PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); +extern void programming_error (const char *, ...) __attribute__((__format__ (printf, 1, 2))); /* General error reporting. Pass FORMAT and ARG1 ... ARG5. */ -extern void report_error PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); +extern void report_error (const char *, ...) __attribute__((__format__ (printf, 1, 2))); /* Error messages for parts of the parser that don't call report_syntax_error */ -extern void parser_error PARAMS((int, const char *, ...)) __attribute__((__format__ (printf, 2, 3))); +extern void parser_error (int, const char *, ...) __attribute__((__format__ (printf, 2, 3))); /* Report an unrecoverable error and exit. Pass FORMAT and ARG1 ... ARG5. */ -extern void fatal_error PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); +extern void fatal_error (const char *, ...) __attribute__((__format__ (printf, 1, 2))); /* Report a system error, like BSD warn(3). */ -extern void sys_error PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); +extern void sys_error (const char *, ...) __attribute__((__format__ (printf, 1, 2))); /* Report an internal error. */ -extern void internal_error PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); +extern void internal_error (const char *, ...) __attribute__((__format__ (printf, 1, 2))); /* Report an internal warning. */ -extern void internal_warning PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); +extern void internal_warning (const char *, ...) __attribute__((__format__ (printf, 1, 2))); /* Report an internal warning for debugging purposes. */ -extern void internal_debug PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); +extern void internal_debug (const char *, ...) __attribute__((__format__ (printf, 1, 2))); /* Report an internal informational notice. */ -extern void internal_inform PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); +extern void internal_inform (const char *, ...) __attribute__((__format__ (printf, 1, 2))); /* Debugging functions, not enabled in released version. */ -extern char *strescape PARAMS((const char *)); -extern void itrace PARAMS((const char *, ...)) __attribute__ ((__format__ (printf, 1, 2))); -extern void trace PARAMS((const char *, ...)) __attribute__ ((__format__ (printf, 1, 2))); +extern char *strescape (const char *); +extern void itrace (const char *, ...) __attribute__ ((__format__ (printf, 1, 2))); +extern void trace (const char *, ...) __attribute__ ((__format__ (printf, 1, 2))); /* Report an error having to do with command parsing or execution. */ -extern void command_error PARAMS((const char *, int, int, int)); +extern void command_error (const char *, int, int, int); -extern char *command_errstr PARAMS((int)); +extern char *command_errstr (int); /* Specific error message functions that eventually call report_error or internal_error. */ -extern void err_badarraysub PARAMS((const char *)); -extern void err_unboundvar PARAMS((const char *)); -extern void err_readonly PARAMS((const char *)); +extern void err_badarraysub (const char *); +extern void err_unboundvar (const char *); +extern void err_readonly (const char *); #ifdef DEBUG # define INTERNAL_DEBUG(x) internal_debug x diff --git a/eval.c b/eval.c index 17fbf7366..cbf408f0f 100644 --- a/eval.c +++ b/eval.c @@ -1,6 +1,6 @@ /* eval.c -- reading and evaluating commands. */ -/* Copyright (C) 1996-2022 Free Software Foundation, Inc. +/* Copyright (C) 1996-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -48,13 +48,13 @@ # include "bashhist.h" #endif -static void send_pwd_to_eterm PARAMS((void)); -static sighandler alrm_catcher PARAMS((int)); +static void send_pwd_to_eterm (void); +static sighandler alrm_catcher (int); /* Read and execute commands until EOF is reached. This assumes that the input source has already been initialized. */ int -reader_loop () +reader_loop (void) { int our_indirection_level; COMMAND * volatile current_command; @@ -153,14 +153,18 @@ reader_loop () if (interactive && ps0_prompt) { char *ps0_string; + int old_eof; - ps0_string = decode_prompt_string (ps0_prompt); + old_eof = EOF_Reached; + EOF_Reached = 0; + ps0_string = decode_prompt_string (ps0_prompt, 1); if (ps0_string && *ps0_string) { fprintf (stderr, "%s", ps0_string); fflush (stderr); } free (ps0_string); + EOF_Reached = old_eof; } current_command_number++; @@ -179,6 +183,11 @@ reader_loop () current_command = (COMMAND *)NULL; } } + if (EOF_Reached && interactive && ignoreeof && parse_and_execute_level == 0 && code != EXITBLTIN) + { + if (handle_ignoreeof (1)) + EOF_Reached = 0; + } } else { @@ -195,7 +204,7 @@ reader_loop () /* Pretty print shell scripts */ int -pretty_print_loop () +pretty_print_loop (void) { COMMAND *current_command; char *command_to_print; @@ -204,6 +213,7 @@ pretty_print_loop () global_posix_mode = posixly_correct; last_was_newline = 0; + unset_readahead_token (); while (EOF_Reached == 0) { code = setjmp_nosigs (top_level); @@ -235,8 +245,7 @@ pretty_print_loop () } static sighandler -alrm_catcher(i) - int i; +alrm_catcher(int i) { char *msg; @@ -251,7 +260,7 @@ alrm_catcher(i) /* Send an escape sequence to emacs term mode to tell it the current working directory. */ static void -send_pwd_to_eterm () +send_pwd_to_eterm (void) { char *pwd, *f; @@ -266,9 +275,7 @@ send_pwd_to_eterm () #if defined (ARRAY_VARS) /* Caller ensures that A has a non-zero number of elements */ int -execute_array_command (a, v) - ARRAY *a; - void *v; +execute_array_command (ARRAY *a, void *v) { char *tag; char **argv; @@ -288,7 +295,7 @@ execute_array_command (a, v) #endif static void -execute_prompt_command () +execute_prompt_command (void) { char *command_to_execute; SHELL_VAR *pcv; @@ -320,12 +327,13 @@ execute_prompt_command () leaves the parsed command in the global variable GLOBAL_COMMAND. This is where PROMPT_COMMAND is executed. */ int -parse_command () +parse_command (void) { - int r; + int r, old_parsing; need_here_doc = 0; - run_pending_traps (); + if ((parser_state & (PST_CMDSUBST|PST_FUNSUBST)) == 0) + run_pending_traps (); /* Allow the execution of a random command just before the printing of each primary prompt. If the shell variable PROMPT_COMMAND @@ -344,11 +352,14 @@ parse_command () send_pwd_to_eterm (); /* Yuck */ } + old_parsing = parsing_command; + parsing_command = 1; current_command_line_count = 0; r = yyparse (); if (need_here_doc) gather_here_documents (); + parsing_command = old_parsing; return (r); } @@ -357,7 +368,7 @@ parse_command () is left in the globval variable GLOBAL_COMMAND for use by reader_loop. This is where the shell timeout code is executed. */ int -read_command () +read_command (void) { SHELL_VAR *tmout_var; int tmout_len, result; diff --git a/examples/loadables/Makefile.in b/examples/loadables/Makefile.in index 956f01893..d709a569c 100644 --- a/examples/loadables/Makefile.in +++ b/examples/loadables/Makefile.in @@ -100,13 +100,14 @@ INC = -I. -I.. -I$(topdir) -I$(topdir)/lib -I$(topdir)/builtins -I${srcdir} \ .c.o: $(SHOBJ_CC) $(SHOBJ_CFLAGS) $(CCFLAGS) $(INC) -c -o $@ $< - ALLPROG = print truefalse sleep finfo logname basename dirname fdflags \ tty pathchk tee head mkdir rmdir mkfifo mktemp printenv id whoami \ uname sync push ln unlink realpath strftime mypid setpgid seq rm \ - accept csv dsv cut stat getconf + accept csv dsv cut stat getconf kv strptime OTHERPROG = necho hello cat pushd asort +SUBDIRS = perl + all: $(SHOBJ_STATUS) supported: $(ALLPROG) @@ -225,12 +226,18 @@ csv: csv.o dsv: dsv.o $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ dsv.o $(SHOBJ_LIBS) +kv: kv.o + $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ kv.o $(SHOBJ_LIBS) + cut: cut.o $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ cut.o $(SHOBJ_LIBS) strftime: strftime.o $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ strftime.o $(SHOBJ_LIBS) +strptime: strptime.o + $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ strptime.o $(SHOBJ_LIBS) + mypid: mypid.o $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ mypid.o $(SHOBJ_LIBS) @@ -259,14 +266,20 @@ pushd: pushd.o clean: $(RM) $(ALLPROG) $(OTHERPROG) *.o - -( cd perl && ${MAKE} ${MFLAGS} $@ ) + -for subdir in $(SUBDIRS); do \ + ( cd $$subdir && test -f Makefile && ${MAKE} ${MFLAGS} $@ ) ; \ + done mostlyclean: clean - -( cd perl && ${MAKE} ${MFLAGS} $@ ) + -for subdir in $(SUBDIRS); do \ + ( cd $$subdir && test -f Makefile && ${MAKE} ${MFLAGS} $@ ) ; \ + done distclean maintainer-clean: clean $(RM) Makefile Makefile.inc Makefile.sample pushd.c - -( cd perl && ${MAKE} ${MFLAGS} $@ ) + -for subdir in $(SUBDIRS); do \ + ( cd $$subdir && test -f Makefile && ${MAKE} ${MFLAGS} $@ ) ; \ + done installdirs: @${SHELL} $(SUPPORT_SRC)mkinstalldirs $(DESTDIR)$(loadablesdir) @@ -298,6 +311,14 @@ uninstall-unsupported: install: install-$(SHOBJ_STATUS) uninstall: uninstall-$(SHOBJ_STATUS) +OBJS = print.o truefalse.o accept.o sleep.o finfo.o getconf.o logname.o \ + basename.o dirname.o tty.o pathchk.o tee.o head.o rmdir.o necho.o \ + hello.o cat.o csv.o dsv.o kv.o cut.o printenv.o id.o whoami.o uname.o \ + sync.o push.o mkdir.o mktemp.o realpath.o strftime.o setpgid.o stat.o \ + fdflags.o seq.o asort.o strptime.o + +${OBJS}: ${BUILD_DIR}/config.h + print.o: print.c truefalse.o: truefalse.c accept.o: accept.c @@ -317,6 +338,7 @@ hello.o: hello.c cat.o: cat.c csv.o: csv.c dsv.o: dsv.c +kv.o: kv.c cut.o: cut.c printenv.o: printenv.c id.o: id.c @@ -333,3 +355,4 @@ stat.o: stat.c fdflags.o: fdflags.c seq.o: seq.c asort.o: asort.c +strptime.o: strptime.c diff --git a/examples/loadables/accept.c b/examples/loadables/accept.c index ff98423dd..ece445356 100644 --- a/examples/loadables/accept.c +++ b/examples/loadables/accept.c @@ -1,7 +1,6 @@ /* accept - listen for and accept a remote network connection on a given port */ - /* - Copyright (C) 2020 Free Software Foundation, Inc. + Copyright (C) 2020,2022,2023 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -42,8 +41,7 @@ static int accept_bind_variable (char *, int); int -accept_builtin (list) - WORD_LIST *list; +accept_builtin (WORD_LIST *list) { SHELL_VAR *v; intmax_t iport; @@ -105,7 +103,7 @@ accept_builtin (list) return (EX_USAGE); } - if (legal_number (list->word->word, &iport) == 0 || iport < 0 || iport > TYPE_MAXIMUM (unsigned short)) + if (valid_number (list->word->word, &iport) == 0 || iport < 0 || iport > TYPE_MAXIMUM (unsigned short)) { builtin_error ("%s: invalid port number", list->word->word); return (EXECUTION_FAILURE); @@ -194,9 +192,7 @@ accept_builtin (list) } static int -accept_bind_variable (varname, intval) - char *varname; - int intval; +accept_bind_variable (char *varname, int intval) { SHELL_VAR *v; char ibuf[INT_STRLEN_BOUND (int) + 1], *p; diff --git a/examples/loadables/asort.c b/examples/loadables/asort.c index e847ef868..100036776 100644 --- a/examples/loadables/asort.c +++ b/examples/loadables/asort.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2020 Free Software Foundation, Inc. + Copyright (C) 2020,2022,2023 Free Software Foundation, Inc. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -14,6 +14,8 @@ You should have received a copy of the GNU General Public License along with Bash. If not, see <http://www.gnu.org/licenses/>. */ +/* Contributed by Geir Hauge <geir.hauge@gmail.com> */ + #include <stdlib.h> #include <string.h> #include <inttypes.h> @@ -36,7 +38,8 @@ static int reverse_flag; static int numeric_flag; static int -compare(const void *p1, const void *p2) { +compare(const void *p1, const void *p2) +{ const sort_element e1 = *(sort_element *) p1; const sort_element e2 = *(sort_element *) p2; @@ -55,7 +58,8 @@ compare(const void *p1, const void *p2) { } static int -sort_index(SHELL_VAR *dest, SHELL_VAR *source) { +sort_index(SHELL_VAR *dest, SHELL_VAR *source) +{ HASH_TABLE *hash; BUCKET_CONTENTS *bucket; sort_element *sa; @@ -70,7 +74,7 @@ sort_index(SHELL_VAR *dest, SHELL_VAR *source) { if (assoc_p(source)) { hash = assoc_cell(source); n = hash->nentries; - sa = xmalloc(n * sizeof(sort_element)); + sa = n ? xmalloc(n * sizeof(sort_element)) : 0; i = 0; for ( j = 0; j < hash->nbuckets; ++j ) { bucket = hash->bucket_array[j]; @@ -89,7 +93,7 @@ sort_index(SHELL_VAR *dest, SHELL_VAR *source) { else { array = array_cell(source); n = array_num_elements(array); - sa = xmalloc(n * sizeof(sort_element)); + sa = n ? xmalloc(n * sizeof(sort_element)) : 0; i = 0; for (ae = element_forw(array->head); ae != array->head; ae = element_forw(ae)) { @@ -105,12 +109,12 @@ sort_index(SHELL_VAR *dest, SHELL_VAR *source) { // sanity check if ( i != n ) { builtin_error("%s: corrupt array", source->name); + xfree (sa); return EXECUTION_FAILURE; } - qsort(sa, n, sizeof(sort_element), compare); - - array_flush(dest_array); + if (n) + qsort(sa, n, sizeof(sort_element), compare); for ( i = 0; i < n; ++i ) { if ( assoc_p(source) ) @@ -121,11 +125,13 @@ sort_index(SHELL_VAR *dest, SHELL_VAR *source) { array_insert(dest_array, i, key); } + xfree (sa); return EXECUTION_SUCCESS; } static int -sort_inplace(SHELL_VAR *var) { +sort_inplace(SHELL_VAR *var) +{ size_t i, n; ARRAY *a; ARRAY_ELEMENT *ae; @@ -152,6 +158,7 @@ sort_inplace(SHELL_VAR *var) { // sanity check if ( i != n ) { builtin_error("%s: corrupt array", var->name); + xfree (sa); return EXECUTION_FAILURE; } @@ -174,7 +181,8 @@ sort_inplace(SHELL_VAR *var) { } int -asort_builtin(WORD_LIST *list) { +asort_builtin(WORD_LIST *list) +{ SHELL_VAR *var, *var2; char *word; int opt, ret; @@ -202,7 +210,7 @@ asort_builtin(WORD_LIST *list) { return EX_USAGE; } - if (legal_identifier (list->word->word) == 0) { + if (valid_identifier (list->word->word) == 0) { sh_invalidid (list->word->word); return EXECUTION_FAILURE; } @@ -212,18 +220,18 @@ asort_builtin(WORD_LIST *list) { builtin_usage(); return EX_USAGE; } - if (legal_identifier (list->next->word->word) == 0) { + if (valid_identifier (list->next->word->word) == 0) { sh_invalidid (list->next->word->word); return EXECUTION_FAILURE; } - var = find_or_make_array_variable(list->word->word, 1); - if (var == 0) - return EXECUTION_FAILURE; var2 = find_variable(list->next->word->word); if ( !var2 || ( !array_p(var2) && !assoc_p(var2) ) ) { builtin_error("%s: Not an array", list->next->word->word); return EXECUTION_FAILURE; } + var = builtin_find_indexed_array(list->word->word, 1); + if (var == 0) + return EXECUTION_FAILURE; return sort_index(var, var2); } diff --git a/examples/loadables/basename.c b/examples/loadables/basename.c index 29dd1a6db..432d2922b 100644 --- a/examples/loadables/basename.c +++ b/examples/loadables/basename.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -33,8 +33,7 @@ #include "bashgetopt.h" int -basename_builtin (list) - WORD_LIST *list; +basename_builtin (WORD_LIST *list) { int slen, sufflen, off; char *string, *suffix, *fn; diff --git a/examples/loadables/cat.c b/examples/loadables/cat.c index 71685f33b..b476a0ee5 100644 --- a/examples/loadables/cat.c +++ b/examples/loadables/cat.c @@ -32,13 +32,11 @@ extern int errno; #endif -extern char *strerror (); -extern char **make_builtin_argv (); +extern char *strerror (int); +extern char **make_builtin_argv (WORD_LIST *, int *); static int -fcopy(fd, fn) -int fd; -char *fn; +fcopy(int fd, char *fn) { char buf[4096], *s; int n, w, e; @@ -70,9 +68,7 @@ char *fn; } int -cat_main (argc, argv) -int argc; -char **argv; +cat_main (int argc, char **argv) { int i, fd, r; char *s; @@ -105,8 +101,7 @@ char **argv; } int -cat_builtin(list) -WORD_LIST *list; +cat_builtin(WORD_LIST *list) { char **v; int c, r; diff --git a/examples/loadables/csv.c b/examples/loadables/csv.c index 75b377257..099fa8342 100644 --- a/examples/loadables/csv.c +++ b/examples/loadables/csv.c @@ -2,7 +2,7 @@ fields */ /* - Copyright (C) 2020 Free Software Foundation, Inc. + Copyright (C) 2020,2022 Free Software Foundation, Inc. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -39,9 +39,7 @@ element of array variable CSV, starting at index 0. The format of LINE is as described in RFC 4180. */ static int -csvsplit (csv, line, dstring) - SHELL_VAR *csv; - char *line, *dstring; +csvsplit (SHELL_VAR *csv, char *line, char *dstring) { arrayind_t ind; char *field, *prev, *buf, *xbuf; @@ -103,8 +101,7 @@ csvsplit (csv, line, dstring) } int -csv_builtin (list) - WORD_LIST *list; +csv_builtin (WORD_LIST *list) { int opt, rval; char *array_name, *csvstring; @@ -132,7 +129,7 @@ csv_builtin (list) if (array_name == 0) array_name = CSV_ARRAY_DEFAULT; - if (legal_identifier (array_name) == 0) + if (valid_identifier (array_name) == 0) { sh_invalidid (array_name); return (EXECUTION_FAILURE); @@ -174,16 +171,14 @@ csv_builtin (list) /* Called when builtin is enabled and loaded from the shared object. If this function returns 0, the load fails. */ int -csv_builtin_load (name) - char *name; +csv_builtin_load (char *name) { return (1); } /* Called when builtin is disabled. */ void -csv_builtin_unload (name) - char *name; +csv_builtin_unload (char *name) { } diff --git a/examples/loadables/cut.c b/examples/loadables/cut.c index 48f80047d..df9129d2f 100644 --- a/examples/loadables/cut.c +++ b/examples/loadables/cut.c @@ -2,7 +2,7 @@ or print them to the standard output */ /* - Copyright (C) 2020 Free Software Foundation, Inc. + Copyright (C) 2020,2022,2023 Free Software Foundation, Inc. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -61,8 +61,7 @@ struct cutop }; static int -poscmp (a, b) - void *a, *b; +poscmp (const void *a, const void *b) { struct cutpos *p1, *p2; @@ -72,9 +71,7 @@ poscmp (a, b) } static int -getlist (arg, opp) - char *arg; - struct cutpos **opp; +getlist (char *arg, struct cutpos **opp) { char *ntok, *ltok, *larg; int s, e; @@ -96,7 +93,7 @@ getlist (arg, opp) s = BOL; else { - if (legal_number (ntok, &num) == 0 || (int)num != num || num <= 0) + if (valid_number (ntok, &num) == 0 || (int)num != num || num <= 0) { builtin_error ("%s: invalid list value", ntok); *opp = poslist; @@ -111,7 +108,7 @@ getlist (arg, opp) e = EOL; else { - if (legal_number (ltok, &num) == 0 || (int)num != num || num <= 0) + if (valid_number (ltok, &num) == 0 || (int)num != num || num <= 0) { builtin_error ("%s: invalid list value", ltok); *opp = poslist; @@ -146,10 +143,7 @@ getlist (arg, opp) } static int -cutbytes (v, line, ops) - SHELL_VAR *v; - char *line; - struct cutop *ops; +cutbytes (SHELL_VAR *v, char *line, struct cutop *ops) { arrayind_t ind; char *buf, *bmap; @@ -197,10 +191,7 @@ cutbytes (v, line, ops) } static int -cutchars (v, line, ops) - SHELL_VAR *v; - char *line; - struct cutop *ops; +cutchars (SHELL_VAR *v, char *line, struct cutop *ops) { arrayind_t ind; char *buf, *bmap; @@ -272,10 +263,7 @@ cutchars (v, line, ops) bitmap approach as cut{bytes,chars} and assign them to the array variable V or print them on stdout. This function obeys SFLAG. */ static int -cutfields (v, line, ops) - SHELL_VAR *v; - char *line; - struct cutop *ops; +cutfields (SHELL_VAR *v, char *line, struct cutop *ops) { arrayind_t ind; char *buf, *bmap, *field, **fields, delim[2]; @@ -362,10 +350,7 @@ cutfields (v, line, ops) } static int -cutline (v, line, ops) - SHELL_VAR *v; - char *line; - struct cutop *ops; +cutline (SHELL_VAR *v, char *line, struct cutop *ops) { int rval; @@ -380,10 +365,7 @@ cutline (v, line, ops) } static int -cutfile (v, list, ops) - SHELL_VAR *v; - WORD_LIST *list; - struct cutop *ops; +cutfile (SHELL_VAR *v, WORD_LIST *list, struct cutop *ops) { int fd, unbuffered_read; char *line, *b; @@ -437,9 +419,7 @@ cutfile (v, list, ops) #define OPTSET(x) ((cutflags & (x)) ? 1 : 0) static int -cut_internal (which, list) - int which; /* not used yet */ - WORD_LIST *list; +cut_internal (int which, WORD_LIST *list) { int opt, rval, cutflags, delim, npos; char *array_name, *cutstring, *list_arg; @@ -497,7 +477,7 @@ cut_internal (which, list) } list = loptend; - if (array_name && (legal_identifier (array_name) == 0)) + if (array_name && (valid_identifier (array_name) == 0)) { sh_invalidid (array_name); return (EXECUTION_FAILURE); @@ -523,22 +503,13 @@ cut_internal (which, list) } if (array_name) - { - v = find_or_make_array_variable (array_name, 1); - if (v == 0 || readonly_p (v) || noassign_p (v)) - { - if (v && readonly_p (v)) - err_readonly (array_name); - return (EXECUTION_FAILURE); - } - else if (array_p (v) == 0) + { + v = builtin_find_indexed_array (array_name, 1); + if (v == 0) { - builtin_error ("%s: not an indexed array", array_name); + free (poslist); return (EXECUTION_FAILURE); } - if (invisible_p (v)) - VUNSETATTR (v, att_invisible); - array_flush (array_cell (v)); } op.flags = cutflags; @@ -562,19 +533,18 @@ cut_internal (which, list) else rval = cutfile (v, list, &op); + free (poslist); return (rval); } int -lcut_builtin (list) - WORD_LIST *list; +lcut_builtin (WORD_LIST *list) { return (cut_internal (0, list)); } int -cut_builtin (list) - WORD_LIST *list; +cut_builtin (WORD_LIST *list) { return (cut_internal (1, list)); } diff --git a/examples/loadables/dirname.c b/examples/loadables/dirname.c index d802ca77c..bc69ed8b7 100644 --- a/examples/loadables/dirname.c +++ b/examples/loadables/dirname.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -33,8 +33,7 @@ #include "bashgetopt.h" int -dirname_builtin (list) - WORD_LIST *list; +dirname_builtin (WORD_LIST *list) { int slen; char *string; diff --git a/examples/loadables/dsv.c b/examples/loadables/dsv.c index 70e59cbc6..3b8122503 100644 --- a/examples/loadables/dsv.c +++ b/examples/loadables/dsv.c @@ -2,7 +2,7 @@ array with the fields */ /* - Copyright (C) 2022 Free Software Foundation, Inc. + Copyright (C) 2022,2023 Free Software Foundation, Inc. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -52,10 +52,7 @@ null fields. If you want to preserve the quote characters in the generated fields, pass F_PRESERVE; by default, this removes them. */ static int -dsvsplit (dsv, line, dstring, flags) - SHELL_VAR *dsv; - char *line, *dstring; - int flags; +dsvsplit (SHELL_VAR *dsv, char *line, char *dstring, int flags) { arrayind_t ind; char *field, *prev, *buf, *xbuf; @@ -163,8 +160,7 @@ dsvsplit (dsv, line, dstring, flags) } int -dsv_builtin (list) - WORD_LIST *list; +dsv_builtin (WORD_LIST *list) { int opt, rval, flags; char *array_name, *dsvstring, *delims; @@ -207,7 +203,7 @@ dsv_builtin (list) if (array_name == 0) array_name = DSV_ARRAY_DEFAULT; - if (legal_identifier (array_name) == 0) + if (valid_identifier (array_name) == 0) { sh_invalidid (array_name); return (EXECUTION_FAILURE); @@ -249,16 +245,14 @@ dsv_builtin (list) /* Called when builtin is enabled and loaded from the shared object. If this function returns 0, the load fails. */ int -dsv_builtin_load (name) - char *name; +dsv_builtin_load (char *name) { return (1); } /* Called when builtin is disabled. */ void -dsv_builtin_unload (name) - char *name; +dsv_builtin_unload (char *name) { } diff --git a/examples/loadables/fdflags.c b/examples/loadables/fdflags.c index 9f2d089f9..1b1b22fab 100644 --- a/examples/loadables/fdflags.c +++ b/examples/loadables/fdflags.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 2017-2022 Free Software Foundation, Inc. + Copyright (C) 2017-2023 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -98,9 +98,21 @@ static const struct # define O_NOSIGPIPE 0 #endif +#ifndef O_NDELAY +/* Solaris has this */ +# define O_NDELAY 0 +#endif + +#ifndef O_LARGEFILE +/* HP-UX has this */ +# define O_LARGEFILE 0 +#endif + #ifndef O_CLOEXEC +# define IGNOREFLAGS (O_RDONLY|O_WRONLY|O_RDWR) # define ALLFLAGS (O_APPEND|O_ASYNC|O_SYNC|O_NONBLOCK|O_FSYNC|O_DSYNC|\ - O_RSYNC|O_ALT_IO|O_DIRECT|O_NOATIME|O_NOSIGPIPE) + O_RSYNC|O_ALT_IO|O_DIRECT|O_NOATIME|O_NOSIGPIPE|O_NDELAY|O_LARGEFILE|\ + IGNOREFLAGS) /* An unused bit in the file status flags word we can use to pass around the state of close-on-exec. */ @@ -120,7 +132,7 @@ extern int errno; /* FIX THIS */ static int -getallflags () +getallflags (void) { int i, allflags; @@ -164,6 +176,7 @@ printone(int fd, int p, int verbose) if ((f = getflags(fd, p)) == -1) return; + /* maybe make the file descriptor printing optional if only one argument */ printf ("%d:", fd); for (i = 0; i < N_FLAGS; i++) @@ -224,16 +237,14 @@ parseflags(char *s, int *p, int *n) } static void -setone(int fd, char *v, int verbose) +setone(int fd, int pos, int neg, int verbose) { - int f, n, pos, neg, cloexec; + int f, n, cloexec; f = getflags(fd, 1); if (f == -1) return; - parseflags(v, &pos, &neg); - cloexec = -1; if ((pos & O_CLOEXEC) && (f & O_CLOEXEC) == 0) @@ -257,7 +268,7 @@ setone(int fd, char *v, int verbose) } static int -getmaxfd () +getmaxfd (void) { int maxfd, ignore; @@ -281,6 +292,7 @@ int fdflags_builtin (WORD_LIST *list) { int opt, maxfd, i, num, verbose, setflag; + int pos, neg; char *setspec; WORD_LIST *l; intmax_t inum; @@ -311,6 +323,9 @@ fdflags_builtin (WORD_LIST *list) if (list == 0 && setflag) return (EXECUTION_SUCCESS); + if (setflag) + parseflags (setspec, &pos, &neg); + if (list == 0) { maxfd = getmaxfd (); @@ -327,7 +342,7 @@ fdflags_builtin (WORD_LIST *list) opt = EXECUTION_SUCCESS; for (l = list; l; l = l->next) { - if (legal_number (l->word->word, &inum) == 0 || inum < 0) + if (valid_number (l->word->word, &inum) == 0 || inum < 0) { builtin_error ("%s: invalid file descriptor", l->word->word); opt = EXECUTION_FAILURE; @@ -335,12 +350,12 @@ fdflags_builtin (WORD_LIST *list) } num = inum; /* truncate to int */ if (setflag) - setone (num, setspec, verbose); + setone (num, pos, neg, verbose); else printone (num, 1, verbose); } - return (opt); + return (sh_chkwrite (opt)); } char *fdflags_doc[] = diff --git a/examples/loadables/finfo.c b/examples/loadables/finfo.c index 8c278c357..0445849ef 100644 --- a/examples/loadables/finfo.c +++ b/examples/loadables/finfo.c @@ -6,7 +6,7 @@ */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022,2023 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -51,14 +51,18 @@ extern int errno; #endif -extern char **make_builtin_argv (); +extern char **make_builtin_argv (WORD_LIST *, int *); -static void perms(); -static int printst(); -static int printsome(); -static void printmode(); -static int printfinfo(); -static int finfo_main(); +static struct stat *getstat(char *); +static int printinfo(char *); +static int getperm(int); + +static void perms(int); +static int printst(struct stat *); +static int printsome(char *, int); +static void printmode(int); +static int printfinfo(char *); +static int finfo_main(int, char **); extern int sh_optind; extern char *sh_optarg; @@ -91,21 +95,7 @@ static int pmask; #define OPTIONS "acdgiflmnopsuACGMP:U" static int -octal(s) -char *s; -{ - int r; - - r = *s - '0'; - while (*++s >= '0' && *s <= '7') - r = (r * 8) + (*s - '0'); - return r; -} - -static int -finfo_main(argc, argv) -int argc; -char **argv; +finfo_main(int argc, char **argv) { register int i; int mode, flags, opt; @@ -134,7 +124,14 @@ char **argv; case 'n': flags |= OPT_NLINK; break; case 'o': flags |= OPT_OPERM; break; case 'p': flags |= OPT_PERM; break; - case 'P': flags |= OPT_PMASK; pmask = octal(sh_optarg); break; + case 'P': + flags |= OPT_PMASK; + pmask = read_octal(sh_optarg); + if (pmask < 0) { + builtin_error ("invalid mode: %s", sh_optarg); + return(1); + } + break; case 's': flags |= OPT_SIZE; break; case 'u': flags |= OPT_UID; break; case 'U': flags |= OPT_UID|OPT_ASCII; break; @@ -157,15 +154,14 @@ char **argv; } static struct stat * -getstat(f) -char *f; +getstat(char *f) { static struct stat st; int fd, r; intmax_t lfd; if (strncmp(f, "/dev/fd/", 8) == 0) { - if ((legal_number(f + 8, &lfd) == 0) || (int)lfd != lfd) { + if ((valid_number(f + 8, &lfd) == 0) || (int)lfd != lfd) { builtin_error("%s: invalid fd", f + 8); return ((struct stat *)0); } @@ -185,8 +181,7 @@ char *f; } static int -printfinfo(f) -char *f; +printfinfo(char *f) { struct stat *st; @@ -195,15 +190,13 @@ char *f; } static int -getperm(m) -int m; +getperm(int m) { return (m & (S_IRWXU|S_IRWXG|S_IRWXO|S_ISUID|S_ISGID)); } static void -perms(m) -int m; +perms(int m) { char ubits[4], gbits[4], obits[4]; /* u=rwx,g=rwx,o=rwx */ int i; @@ -246,8 +239,7 @@ int m; } static void -printmode(mode) -int mode; +printmode(int mode) { if (S_ISBLK(mode)) printf("S_IFBLK "); @@ -272,8 +264,7 @@ int mode; } static int -printst(st) -struct stat *st; +printst(struct stat *st) { struct passwd *pw; struct group *gr; @@ -309,15 +300,14 @@ struct stat *st; } static int -printsome(f, flags) -char *f; -int flags; +printsome(char *f, int flags) { struct stat *st; struct passwd *pw; struct group *gr; int p; char *b; + intmax_t xtime; st = getstat(f); if (st == NULL) @@ -325,20 +315,23 @@ int flags; /* Print requested info */ if (flags & OPT_ATIME) { + xtime = st->st_atime; if (flags & OPT_ASCII) printf("%s", ctime(&st->st_atime)); else - printf("%ld\n", st->st_atime); + printf("%jd\n", xtime); } else if (flags & OPT_MTIME) { + xtime = st->st_mtime; if (flags & OPT_ASCII) printf("%s", ctime(&st->st_mtime)); else - printf("%ld\n", st->st_mtime); + printf("%jd\n", xtime); } else if (flags & OPT_CTIME) { + xtime = st->st_ctime; if (flags & OPT_ASCII) printf("%s", ctime(&st->st_ctime)); else - printf("%ld\n", st->st_ctime); + printf("%jd\n", xtime); } else if (flags & OPT_DEV) printf("%lu\n", (unsigned long)st->st_dev); else if (flags & OPT_INO) @@ -391,8 +384,7 @@ int flags; #ifndef NOBUILTIN int -finfo_builtin(list) - WORD_LIST *list; +finfo_builtin(WORD_LIST *list) { int c, r; char **v; @@ -447,34 +439,26 @@ struct builtin finfo_struct = { #endif #ifdef NOBUILTIN -#if defined (PREFER_STDARG) -# include <stdarg.h> -#else -# if defined (PREFER_VARARGS) -# include <varargs.h> -# endif -#endif +#include <stdarg.h> char *this_command_name; -main(argc, argv) -int argc; -char **argv; +int +main(int argc, char **argv) { this_command_name = argv[0]; exit(finfo_main(argc, argv)); } void -builtin_usage() +builtin_usage(void) { fprintf(stderr, "%s: usage: %s [-%s] [file ...]\n", prog, prog, OPTIONS); } #ifndef HAVE_STRERROR char * -strerror(e) -int e; +strerror(int e) { static char ebuf[40]; extern int sys_nerr; @@ -488,23 +472,20 @@ int e; } #endif -char * -xmalloc(s) -size_t s; +PTR_T +xmalloc(size_t s) { char *ret; - extern char *malloc(); ret = malloc(s); if (ret) return (ret); - fprintf(stderr, "%s: cannot malloc %d bytes\n", prog, s); + fprintf(stderr, "%s: cannot malloc %zu bytes\n", prog, s); exit(1); } char * -base_pathname(p) -char *p; +base_pathname(char *p) { char *t; @@ -514,9 +495,7 @@ char *p; } int -legal_number (string, result) - char *string; - long *result; +valid_number (char *string, long result) { int sign; long value; @@ -575,9 +554,7 @@ extern int optind; extern char *optarg; int -sh_getopt(c, v, o) -int c; -char **v, *o; +sh_getopt(int c, char **v, char *o) { int r; @@ -587,43 +564,18 @@ char **v, *o; return r; } -#if defined (USE_VARARGS) void -#if defined (PREFER_STDARG) builtin_error (const char *format, ...) -#else -builtin_error (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; if (this_command_name && *this_command_name) fprintf (stderr, "%s: ", this_command_name); -#if defined (PREFER_STDARG) va_start (args, format); -#else - va_start (args); -#endif vfprintf (stderr, format, args); va_end (args); fprintf (stderr, "\n"); } -#else -void -builtin_error (format, arg1, arg2, arg3, arg4, arg5) - char *format, *arg1, *arg2, *arg3, *arg4, *arg5; -{ - if (this_command_name && *this_command_name) - fprintf (stderr, "%s: ", this_command_name); - - fprintf (stderr, format, arg1, arg2, arg3, arg4, arg5); - fprintf (stderr, "\n"); - fflush (stderr); -} -#endif /* !USE_VARARGS */ - #endif diff --git a/examples/loadables/getconf.c b/examples/loadables/getconf.c index 75a0a5679..56ef257aa 100644 --- a/examples/loadables/getconf.c +++ b/examples/loadables/getconf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2021 Free Software Foundation, Inc. +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify @@ -21,7 +21,7 @@ #include <unistd.h> #include <errno.h> #include <error.h> -#include <libintl.h> +#include <gettext.h> #include <locale.h> #include <string.h> #include <stdlib.h> @@ -43,6 +43,11 @@ extern int errno; #define VAL_SSIZE_MAX -1004 #define VAL_SIZE_MAX -1005 +/* We don't want to collide with anything else. */ +#ifndef _CS_PATH +#define _CS_PATH -1001 +#endif + struct conf { const char *name; @@ -120,7 +125,7 @@ static const struct conf vars[] = #ifdef _SC_CHAR_MAX { "CHAR_MAX", _SC_CHAR_MAX, SYSCONF }, #else - { "CHAR_BIT", CHAR_MAX, CONSTANT }, + { "CHAR_MAX", CHAR_MAX, CONSTANT }, #endif #ifdef _SC_CHAR_MIN { "CHAR_MIN", _SC_CHAR_MIN, SYSCONF }, @@ -269,9 +274,15 @@ static const struct conf vars[] = #ifdef _SC_AVPHYS_PAGES { "_AVPHYS_PAGES", _SC_AVPHYS_PAGES, SYSCONF }, #endif +#ifdef _SC_NPROCESSORS_CONF { "_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF, SYSCONF }, +#endif +#ifdef _SC_NPROCESSORS_ONLN { "_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN, SYSCONF }, +#endif +#ifdef _SC_PHYS_PAGES { "_PHYS_PAGES", _SC_PHYS_PAGES, SYSCONF }, +#endif #ifdef _SC_ARG_MAX { "_POSIX_ARG_MAX", _SC_ARG_MAX, SYSCONF }, #else @@ -329,7 +340,9 @@ static const struct conf vars[] = { "_POSIX_PRIORITIZED_IO", _SC_PRIORITIZED_IO, SYSCONF }, #endif { "_POSIX_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING, SYSCONF }, +#ifdef _SC_REALTIME_SIGNALS { "_POSIX_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS, SYSCONF }, +#endif { "_POSIX_SAVED_IDS", _SC_SAVED_IDS, SYSCONF }, #ifdef _SC_SELECT { "_POSIX_SELECT", _SC_SELECT, SYSCONF }, @@ -366,7 +379,9 @@ static const struct conf vars[] = { "_POSIX_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED, SYSCONF }, { "_POSIX_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS, SYSCONF }, { "_POSIX_TIMERS", _SC_TIMERS, SYSCONF }, +#ifdef _SC_TIMER_MAX { "TIMER_MAX", _SC_TIMER_MAX, SYSCONF }, +#endif #ifdef _POSIX_TZNAME_MAX { "_POSIX_TZNAME_MAX", _SC_TZNAME_MAX, SYSCONF }, #else @@ -743,8 +758,12 @@ static const struct conf vars[] = { "_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R, SYSCONF }, #endif { "_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION, SYSCONF }, +#ifdef _SC_CPUTIME { "_POSIX_CPUTIME", _SC_CPUTIME, SYSCONF }, +#endif +#ifdef _SC_THREAD_CPUTIME { "_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME, SYSCONF }, +#endif #ifdef _SC_DEVICE_SPECIFIC { "_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC, SYSCONF }, #endif @@ -826,7 +845,9 @@ static const struct conf vars[] = #ifdef _SC_AIO_PRIO_DELTA_MAX { "AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX, SYSCONF }, #endif +#ifdef _SC_DELAYTIMER_MAX { "DELAYTIMER_MAX", _SC_DELAYTIMER_MAX, SYSCONF }, +#endif { "HOST_NAME_MAX", _SC_HOST_NAME_MAX, SYSCONF }, { "LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX, SYSCONF }, { "MQ_OPEN_MAX", _SC_MQ_OPEN_MAX, SYSCONF }, @@ -846,15 +867,21 @@ static const struct conf vars[] = #ifdef _SC_TRACE_LOG { "_POSIX_TRACE_LOG", _SC_TRACE_LOG, SYSCONF }, #endif +#ifdef _SC_RTSIG_MAX { "RTSIG_MAX", _SC_RTSIG_MAX, SYSCONF }, +#endif #ifdef _SC_SEM_NSEMS_MAX { "SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX, SYSCONF }, #endif #ifdef _SC_SEM_VALUE_MAX { "SEM_VALUE_MAX", _SC_SEM_VALUE_MAX, SYSCONF }, #endif +#ifdef _SC_SIGQUEUE_MAX { "SIGQUEUE_MAX", _SC_SIGQUEUE_MAX, SYSCONF }, +#endif +#ifdef _PC_FILESIZEBITS { "FILESIZEBITS", _PC_FILESIZEBITS, PATHCONF }, +#endif #ifdef _PC_ALLOC_SIZE_MIN { "POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN, PATHCONF }, #endif @@ -870,7 +897,9 @@ static const struct conf vars[] = #ifdef _PC_REC_XFER_ALIGN { "POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN, PATHCONF }, #endif +#ifdef _PC_SYMLINK_MAX { "SYMLINK_MAX", _PC_SYMLINK_MAX, PATHCONF }, +#endif #ifdef _PC_2_SYMLINKS { "POSIX2_SYMLINKS", _PC_2_SYMLINKS, PATHCONF }, #endif @@ -912,10 +941,35 @@ static const struct conf vars[] = }; static int getconf_print (const struct conf *, const char *, int); -static int getconf_all (void); +static int getconf_all (WORD_LIST *); static int getconf_one (WORD_LIST *); static int getconf_internal (const struct conf *, int); +#ifndef HAVE_CONFSTR +/* If we don't have confstr, this will only support `getconf PATH'. */ + +static size_t +confstr (int name, char *buf, size_t len) +{ + char *p; + size_t n; + + switch (name) + { + case _CS_PATH: + p = conf_standard_path (); + n = STRLEN (p) + 1; + if (len != 0 && buf != 0) + strlcpy (buf, p, len); + free (p); + return n; + default: + errno = EINVAL; + return 0; + } +} +#endif /* !HAVE_CONFSTR */ + static int getconf_internal (const struct conf *c, int all) { @@ -981,17 +1035,23 @@ getconf_internal (const struct conf *c, int all) } static int -getconf_all (void) +getconf_all (WORD_LIST *list) { const struct conf *c; char *path; int r; r = EXECUTION_SUCCESS; + path = list ? list->word->word : 0; for (c = vars; c->name != NULL; ++c) { + if (c->call == PATHCONF && path == 0) + continue; /* Don't print pathconf vars if no path supplied */ +#if 0 + if (c->call != PATHCONF && path) + continue; /* Only print pathconf vars if path supplied */ +#endif printf("%-35s", c->name); - path = "/"; /* XXX for now */ if (getconf_print (c, path, 1) == EXECUTION_FAILURE) r = EXECUTION_FAILURE; } @@ -1019,12 +1079,12 @@ getconf_one (WORD_LIST *list) return (EXECUTION_FAILURE); } - if (c->call_name == PATHCONF && list->next == 0) + if (c->call == PATHCONF && list->next == 0) { builtin_usage (); return (EX_USAGE); } - else if (c->call_name != PATHCONF && list->next) + else if (c->call != PATHCONF && list->next) { builtin_usage (); return (EX_USAGE); @@ -1135,13 +1195,19 @@ getconf_builtin (WORD_LIST *list) } list = loptend; - if ((aflag == 0 && list == 0) || (aflag && list) || list_length(list) > 2) + if ((aflag == 0 && list == 0) || (list && list_length((GENERIC_LIST *)list) > 2)) + { + builtin_usage(); + return (EX_USAGE); + } + else if (aflag && list && (list->word == 0 || list->word->word == 0 || *list->word->word == 0)) { + /* No null pathnames with -a */ builtin_usage(); return (EX_USAGE); } - r = aflag ? getconf_all () : getconf_one (list); + r = aflag ? getconf_all (list) : getconf_one (list); return r; } @@ -1158,6 +1224,6 @@ struct builtin getconf_struct = { getconf_builtin, BUILTIN_ENABLED, getconf_doc, - "getconf -[ah] or getconf [-v spec] sysvar or getconf [-v spec] pathvar pathname", + "getconf -[ah] [file] or getconf [-v spec] sysvar or getconf [-v spec] pathvar pathname", 0 }; diff --git a/examples/loadables/getconf.h b/examples/loadables/getconf.h index b8b9f1026..98cc05e6d 100644 --- a/examples/loadables/getconf.h +++ b/examples/loadables/getconf.h @@ -125,12 +125,4 @@ # define WORD_BIT (sizeof (int) * CHAR_BIT) #endif -#if !defined (PRIdMAX) -# if HAVE_LONG_LONG -# define PRIdMAX "lld" -# else -# define PRIdMAX "ld" -# endif -#endif - #endif /* _GETCONF_H */ diff --git a/examples/loadables/head.c b/examples/loadables/head.c index f9f022a60..9a4b97def 100644 --- a/examples/loadables/head.c +++ b/examples/loadables/head.c @@ -46,8 +46,7 @@ extern int errno; #endif static void -munge_list (list) - WORD_LIST *list; +munge_list (WORD_LIST *list) { WORD_LIST *l, *nl; WORD_DESC *wd; @@ -69,9 +68,7 @@ munge_list (list) } static int -file_head (fp, cnt) - FILE *fp; - int cnt; +file_head (FILE *fp, int cnt) { int ch; @@ -94,8 +91,7 @@ file_head (fp, cnt) } int -head_builtin (list) - WORD_LIST *list; +head_builtin (WORD_LIST *list) { int nline, opt, rval; WORD_LIST *l; diff --git a/examples/loadables/hello.c b/examples/loadables/hello.c index b09362bf3..786e4cd8d 100644 --- a/examples/loadables/hello.c +++ b/examples/loadables/hello.c @@ -4,7 +4,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -48,8 +48,7 @@ A builtin command returns EXECUTION_SUCCESS for success and EXECUTION_FAILURE to indicate failure. */ int -hello_builtin (list) - WORD_LIST *list; +hello_builtin (WORD_LIST *list) { printf("hello world\n"); fflush (stdout); @@ -57,8 +56,7 @@ hello_builtin (list) } int -hello_builtin_load (s) - char *s; +hello_builtin_load (char *s) { printf ("hello builtin loaded\n"); fflush (stdout); @@ -66,8 +64,7 @@ hello_builtin_load (s) } void -hello_builtin_unload (s) - char *s; +hello_builtin_unload (char *s) { printf ("hello builtin unloaded\n"); fflush (stdout); diff --git a/examples/loadables/id.c b/examples/loadables/id.c index f857b5475..98c37ea3b 100644 --- a/examples/loadables/id.c +++ b/examples/loadables/id.c @@ -10,7 +10,7 @@ */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -41,9 +41,9 @@ #endif #if !defined (HAVE_GETPW_DECLS) -extern struct passwd *getpwuid (); +extern struct passwd *getpwuid (uid_t); #endif -extern struct group *getgrgid (); +extern struct group *getgrgid (gid_t); #include "shell.h" #include "builtins.h" @@ -66,16 +66,15 @@ static gid_t rgid, egid; static char *id_user; -static int inituser (); +static int inituser (char *); -static int id_pruser (); -static int id_prgrp (); -static int id_prgroups (); -static int id_prall (); +static int id_pruser (int); +static int id_prgrp (int); +static int id_prgroups (char *); +static int id_prall (char *); int -id_builtin (list) - WORD_LIST *list; +id_builtin (WORD_LIST *list) { int opt; char *user; @@ -134,8 +133,7 @@ id_builtin (list) } static int -inituser (uname) - char *uname; +inituser (char *uname) { struct passwd *pwd; @@ -162,8 +160,7 @@ inituser (uname) /* Print the name or value of user ID UID. */ static int -id_pruser (uid) - int uid; +id_pruser (int uid) { struct passwd *pwd = NULL; int r; @@ -186,8 +183,7 @@ id_pruser (uid) /* Print the name or value of group ID GID. */ static int -id_prgrp (gid) - int gid; +id_prgrp (int gid) { struct group *grp = NULL; int r; @@ -209,8 +205,7 @@ id_prgrp (gid) } static int -id_prgroups (uname) - char *uname; +id_prgroups (char *uname) { int *glist, ng, i, r; @@ -243,8 +238,7 @@ id_prgroups (uname) } static int -id_prall (uname) - char *uname; +id_prall (char *uname) { int r, i, ng, *glist; struct passwd *pwd; diff --git a/examples/loadables/ln.c b/examples/loadables/ln.c index 874e9db88..c0905d6ae 100644 --- a/examples/loadables/ln.c +++ b/examples/loadables/ln.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -42,18 +42,19 @@ extern int errno; #endif -typedef int unix_link_syscall_t PARAMS((const char *, const char *)); +typedef int unix_link_syscall_t (const char *, const char *); #define LN_SYMLINK 0x01 #define LN_UNLINK 0x02 #define LN_NOFOLLOW 0x04 static unix_link_syscall_t *linkfn; -static int dolink (); + +static char *mkdirpath (char *, char *); +static int dolink (char *, char *, int); int -ln_builtin (list) - WORD_LIST *list; +ln_builtin (WORD_LIST *list) { int rval, opt, flags; WORD_LIST *l; @@ -125,8 +126,7 @@ ln_builtin (list) } static char * -mkdirpath (dir, file) - char *dir, *file; +mkdirpath (char *dir, char *file) { int dlen, flen; char *ret; @@ -152,9 +152,7 @@ mkdirpath (dir, file) #endif static int -dolink (src, dst, flags) - char *src, *dst; - int flags; +dolink (char *src, char *dst, int flags) { struct stat ssb, dsb; int exists; diff --git a/examples/loadables/logname.c b/examples/loadables/logname.c index 27e6591be..ab4eb1811 100644 --- a/examples/loadables/logname.c +++ b/examples/loadables/logname.c @@ -1,7 +1,7 @@ /* logname - print login name of current user */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -36,8 +36,7 @@ extern int errno; #endif int -logname_builtin (list) - WORD_LIST *list; +logname_builtin (WORD_LIST *list) { char *np; diff --git a/examples/loadables/mkdir.c b/examples/loadables/mkdir.c index a5b49309e..55ffbd07d 100644 --- a/examples/loadables/mkdir.c +++ b/examples/loadables/mkdir.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -42,15 +42,14 @@ extern int errno; #define ISOCTAL(c) ((c) >= '0' && (c) <= '7') -extern int parse_symbolic_mode (); +extern int parse_symbolic_mode (char *, mode_t); -static int make_path (); +static int make_path (char *, int, int, int); static int original_umask; int -mkdir_builtin (list) - WORD_LIST *list; +mkdir_builtin (WORD_LIST *list) { int opt, pflag, mflag, omode, rval, nmode, parent_mode; char *mode; @@ -134,15 +133,14 @@ mkdir_builtin (list) this changes the process's umask; make sure that all paths leading to a return reset it to ORIGINAL_UMASK */ static int -make_path (path, user_mode, nmode, parent_mode) - char *path; - int user_mode; - int nmode, parent_mode; +make_path (char *path, int user_mode, int nmode, int parent_mode) { - int oumask; + mode_t oumask; struct stat sb; char *p, *npath; + int tail; + /* If we don't have to do any work, don't do any work. */ if (stat (path, &sb) == 0) { if (S_ISDIR (sb.st_mode) == 0) @@ -170,48 +168,64 @@ make_path (path, user_mode, nmode, parent_mode) while (*p == '/') p++; - while (p = strchr (p, '/')) + tail = 0; + while (tail == 0) { - *p = '\0'; - if (stat (npath, &sb) != 0) + if (*p == '\0') + tail = 1; + else + p = strchr (p, '/'); + if (p) + *p = '\0'; + else + tail = 1; + if (mkdir (npath, 0) < 0) { - if (mkdir (npath, 0)) + /* "Each dir operand that names an existing directory shall be + ignored without error." */ + if (errno == EEXIST || errno == EISDIR) { - builtin_error ("cannot create directory `%s': %s", npath, strerror (errno)); - umask (original_umask); - free (npath); - return 1; + int e = errno; + int fail = 0; + + if (stat (npath, &sb) != 0) + { + fail = 1; + builtin_error ("cannot create directory `%s': %s", npath, strerror (e)); + } + else if (e == EEXIST && S_ISDIR (sb.st_mode) == 0) + { + fail = 1; + builtin_error ("`%s': file exists but is not a directory", npath); + } + if (fail) + { + umask (original_umask); + free (npath); + return 1; + } } - if (chmod (npath, parent_mode) != 0) + else { - builtin_error ("cannot chmod directory `%s': %s", npath, strerror (errno)); + builtin_error ("cannot create directory `%s': %s", npath, strerror (errno)); umask (original_umask); free (npath); return 1; } } - else if (S_ISDIR (sb.st_mode) == 0) - { - builtin_error ("`%s': file exists but is not a directory", npath); - umask (original_umask); - free (npath); - return 1; - } - - *p++ = '/'; /* restore slash */ - while (*p == '/') + if (chmod (npath, (tail == 0) ? parent_mode : nmode) != 0) + { + builtin_error ("cannot chmod directory `%s': %s", npath, strerror (errno)); + umask (original_umask); + free (npath); + return 1; + } + if (tail == 0) + *p++ = '/'; /* restore slash */ + while (p && *p == '/') /* skip consecutive slashes or trailing slash */ p++; } - /* Create the final directory component. */ - if (stat (npath, &sb) && mkdir (npath, nmode)) - { - builtin_error ("cannot create directory `%s': %s", npath, strerror (errno)); - umask (original_umask); - free (npath); - return 1; - } - umask (original_umask); free (npath); return 0; diff --git a/examples/loadables/mkfifo.c b/examples/loadables/mkfifo.c index 2bc4e98ac..c01bfe6d3 100644 --- a/examples/loadables/mkfifo.c +++ b/examples/loadables/mkfifo.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -42,13 +42,12 @@ extern int errno; #define ISOCTAL(c) ((c) >= '0' && (c) <= '7') -extern int parse_symbolic_mode (); +extern int parse_symbolic_mode (char *, mode_t); static int original_umask; int -mkfifo_builtin (list) - WORD_LIST *list; +mkfifo_builtin (WORD_LIST *list) { int opt, mflag, omode, rval, nmode, basemode; char *mode; diff --git a/examples/loadables/mktemp.c b/examples/loadables/mktemp.c index 1f7c9ad39..287eaa363 100644 --- a/examples/loadables/mktemp.c +++ b/examples/loadables/mktemp.c @@ -1,7 +1,7 @@ /* mktemp - create temporary file or directory */ /* - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -32,8 +32,7 @@ #define DEFAULT_PREFIX "shtmp" int -mktemp_builtin (list) - WORD_LIST *list; +mktemp_builtin (WORD_LIST *list) { WORD_LIST *l; int rval, opt, fd, mflags, base_mflags; @@ -76,7 +75,7 @@ mktemp_builtin (list) if (varname) /* check for validity, not readonly */ { - if (legal_identifier (varname) == 0) + if (valid_identifier (varname) == 0) { if (qflag == 0) sh_invalidid (varname); diff --git a/examples/loadables/mypid.c b/examples/loadables/mypid.c index fc1b267af..dcbc84a00 100644 --- a/examples/loadables/mypid.c +++ b/examples/loadables/mypid.c @@ -32,11 +32,7 @@ while (0) static SHELL_VAR * -assign_mypid ( - SHELL_VAR *self, - char *value, - arrayind_t unused, - char *key ) +assign_mypid (SHELL_VAR *self, char *value, arrayind_t unused, char *key) { return (self); } diff --git a/examples/loadables/necho.c b/examples/loadables/necho.c index dd2092b07..3ad677c4f 100644 --- a/examples/loadables/necho.c +++ b/examples/loadables/necho.c @@ -4,7 +4,7 @@ existing builtin. */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -20,14 +20,14 @@ You should have received a copy of the GNU General Public License along with Bash. If not, see <http://www.gnu.org/licenses/>. */ +#include <config.h> -#include <stdio.h> #include "builtins.h" #include "shell.h" +#include <stdio.h> int -necho_builtin (list) -WORD_LIST *list; +necho_builtin (WORD_LIST *list) { print_word_list (list, " "); printf("\n"); diff --git a/examples/loadables/pathchk.c b/examples/loadables/pathchk.c index c1151db42..01cfc10f4 100644 --- a/examples/loadables/pathchk.c +++ b/examples/loadables/pathchk.c @@ -23,7 +23,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022,2023 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -94,13 +94,12 @@ extern int errno; # define NAME_MAX_FOR(p) NAME_MAX #endif -extern char *strerror (); +extern char *strerror (int); -static int validate_path (); +static int validate_path (char *, int); int -pathchk_builtin (list) - WORD_LIST *list; +pathchk_builtin (WORD_LIST *list) { int retval, pflag, opt; @@ -185,8 +184,7 @@ static char const portable_chars[256] = /* If PATH contains only portable characters, return 1, else 0. */ static int -portable_chars_only (path) - const char *path; +portable_chars_only (const char *path) { const char *p; @@ -206,9 +204,7 @@ portable_chars_only (path) #else # define SAFE_STAT(name, buf) safe_stat (name, buf) static inline int -safe_stat (name, buf) - const char *name; - struct stat *buf; +safe_stat (const char *name, struct stat *buf) { int ret; @@ -224,8 +220,7 @@ safe_stat (name, buf) 2 if it doesn't exist. */ static int -dir_ok (path) - const char *path; +dir_ok (const char *path) { struct stat stats; @@ -255,8 +250,7 @@ dir_ok (path) } static char * -xstrdup (s) - char *s; +xstrdup (char *s) { return (savestring (s)); } @@ -276,9 +270,7 @@ xstrdup (s) Return 0 if all of these tests are successful, 1 if any fail. */ static int -validate_path (path, portability) - char *path; - int portability; +validate_path (char *path, int portability) { int path_max; int last_elem; /* Nonzero if checking last element of path. */ diff --git a/examples/loadables/print.c b/examples/loadables/print.c index d6c590352..79278e496 100644 --- a/examples/loadables/print.c +++ b/examples/loadables/print.c @@ -3,7 +3,7 @@ */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022,2023 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -42,8 +42,8 @@ extern int errno; #endif -int print_builtin (); -static int printargs (); +int print_builtin (WORD_LIST *); +static int printargs (WORD_LIST *, FILE *); static FILE *ofp; @@ -72,8 +72,7 @@ struct builtin print_struct = { #endif int -print_builtin (list) - WORD_LIST *list; +print_builtin (WORD_LIST *list) { int c, r, nflag, raw, ofd, sflag; intmax_t lfd; @@ -110,7 +109,7 @@ print_builtin (list) case 'p': break; /* NOP */ case 'u': - if (all_digits (list_optarg) && legal_number (list_optarg, &lfd) && lfd == (int)lfd) + if (all_digits (list_optarg) && valid_number (list_optarg, &lfd) && lfd == (int)lfd) ofd = lfd; else { @@ -170,9 +169,7 @@ opt_end: } static int -printargs (list, ofp) - WORD_LIST *list; - FILE *ofp; +printargs (WORD_LIST *list, FILE *ofp) { WORD_LIST *l; char *ostr; @@ -180,7 +177,7 @@ printargs (list, ofp) for (sawc = 0, l = list; l; l = l->next) { - ostr = ansicstr (l->word->word, strlen (l->word->word), 0, &sawc, (int *)0); + ostr = ansicstr (l->word->word, strlen (l->word->word), 0, &sawc, 0); if (ostr) fprintf (ofp, "%s", ostr); free (ostr); diff --git a/examples/loadables/printenv.c b/examples/loadables/printenv.c index 8c7f72019..97ae5e6d6 100644 --- a/examples/loadables/printenv.c +++ b/examples/loadables/printenv.c @@ -6,7 +6,7 @@ */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009, 2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -34,8 +34,7 @@ extern char **export_env; int -printenv_builtin (list) - WORD_LIST *list; +printenv_builtin (WORD_LIST *list) { register char **envp; int opt; diff --git a/examples/loadables/push.c b/examples/loadables/push.c index b27455b45..a1e785005 100644 --- a/examples/loadables/push.c +++ b/examples/loadables/push.c @@ -4,7 +4,7 @@ */ /* - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -39,8 +39,7 @@ extern pid_t dollar_dollar_pid; extern int last_command_exit_value; int -push_builtin (list) - WORD_LIST *list; +push_builtin (WORD_LIST *list) { pid_t pid; int xstatus, opt; diff --git a/examples/loadables/realpath.c b/examples/loadables/realpath.c index ef8367138..d52739c9d 100644 --- a/examples/loadables/realpath.c +++ b/examples/loadables/realpath.c @@ -22,7 +22,7 @@ */ /* - Copyright (C) 1999-2009,2021,2022 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2021,2022,2023 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -61,7 +61,7 @@ extern int errno; #endif -extern char *sh_realpath(); +extern char *sh_realpath(const char *, char *); int realpath_builtin(WORD_LIST *list) @@ -122,7 +122,7 @@ realpath_builtin(WORD_LIST *list) } #if defined (ARRAY_VARS) - if (aflag && legal_identifier (aname) == 0) { + if (aflag && valid_identifier (aname) == 0) { sh_invalidid(aname); return (EXECUTION_FAILURE); } diff --git a/examples/loadables/rm.c b/examples/loadables/rm.c index d8d1522b8..02e74e745 100644 --- a/examples/loadables/rm.c +++ b/examples/loadables/rm.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 2016 Free Software Foundation, Inc. + Copyright (C) 2016,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -114,8 +114,7 @@ rm_file(const char *fname) } int -rm_builtin (list) - WORD_LIST *list; +rm_builtin (WORD_LIST *list) { const char *name; WORD_LIST *l; diff --git a/examples/loadables/rmdir.c b/examples/loadables/rmdir.c index 001c2bd9b..5a284448f 100644 --- a/examples/loadables/rmdir.c +++ b/examples/loadables/rmdir.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -33,8 +33,7 @@ extern int errno; #endif int -rmdir_builtin (list) - WORD_LIST *list; +rmdir_builtin (WORD_LIST *list) { int rval; WORD_LIST *l; diff --git a/examples/loadables/seq.c b/examples/loadables/seq.c index f8eec5bba..13834b8d7 100644 --- a/examples/loadables/seq.c +++ b/examples/loadables/seq.c @@ -1,5 +1,5 @@ /* seq - print sequence of numbers to standard output. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -35,18 +35,6 @@ extern int errno; #endif -#if defined (PRI_MACROS_BROKEN) -# undef PRIdMAX -#endif - -#if !defined (PRIdMAX) -# if HAVE_LONG_LONG -# define PRIdMAX "lld" -# else -# define PRIdMAX "ld" -# endif -#endif - #if defined (HAVE_LONG_DOUBLE) && HAVE_DECL_STRTOLD && !defined(STRTOLD_BROKEN) typedef long double floatmax_t; # define FLOATMAX_CONV "L" @@ -61,8 +49,8 @@ typedef double floatmax_t; # define FLOATMAX_FMT "%g" # define FLOATMAX_WFMT "%0.f" #endif -static floatmax_t getfloatmax PARAMS((const char *)); -static char *genformat PARAMS((floatmax_t, floatmax_t, floatmax_t)); +static floatmax_t getfloatmax (const char *); +static char *genformat (floatmax_t, floatmax_t, floatmax_t); #define MAX(a, b) (((a) < (b))? (b) : (a)) @@ -81,8 +69,7 @@ static char decimal_point; /* Pretty much the same as the version in builtins/printf.def */ static floatmax_t -getfloatmax (arg) - const char *arg; +getfloatmax (const char *arg) { floatmax_t ret; char *ep; @@ -181,8 +168,7 @@ long_double_format (char const *fmt) /* Return the number of digits following the decimal point in NUMBUF */ static int -getprec (numbuf) - const char *numbuf; +getprec (const char *numbuf) { int p; char *dp; @@ -196,8 +182,7 @@ getprec (numbuf) /* Return the default format given FIRST, INCR, and LAST. */ static char * -genformat (first, incr, last) - floatmax_t first, incr, last; +genformat (floatmax_t first, floatmax_t incr, floatmax_t last) { static char buf[6 + 2 * INT_STRLEN_BOUND (int)]; int wfirst, wlast, width; @@ -242,9 +227,7 @@ genformat (first, incr, last) } int -print_fltseq (fmt, first, last, incr) - const char *fmt; - floatmax_t first, last, incr; +print_fltseq (const char *fmt, floatmax_t first, floatmax_t last, floatmax_t incr) { int n; floatmax_t next; @@ -270,8 +253,7 @@ print_fltseq (fmt, first, last, incr) /* must be <= INT_STRLEN_BOUND(intmax_t) */ int -width_needed (num) - intmax_t num; +width_needed (intmax_t num) { int ret; @@ -285,8 +267,7 @@ width_needed (num) } int -print_intseq (ifirst, ilast, iincr) - intmax_t ifirst, ilast, iincr; +print_intseq (intmax_t ifirst, intmax_t ilast, intmax_t iincr) { char intwfmt[6 + INT_STRLEN_BOUND(int) + sizeof (PRIdMAX)]; const char *s; @@ -323,8 +304,7 @@ print_intseq (ifirst, ilast, iincr) } int -seq_builtin (list) - WORD_LIST *list; +seq_builtin (WORD_LIST *list) { floatmax_t first, last, incr; intmax_t ifirst, ilast, iincr; diff --git a/examples/loadables/setpgid.c b/examples/loadables/setpgid.c index e56fd51ed..0dfd184b8 100644 --- a/examples/loadables/setpgid.c +++ b/examples/loadables/setpgid.c @@ -4,6 +4,8 @@ Originally contributed by Jason Vas Dias <jason.vas.dias@gmail.com> + Copyright (C) 2018-2023 Free Software Foundation, Inc. + Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -42,8 +44,7 @@ #endif int -setpgid_builtin (list) - WORD_LIST *list; +setpgid_builtin (WORD_LIST *list) { register WORD_LIST *wl; intmax_t pid_arg, pgid_arg; @@ -68,7 +69,7 @@ setpgid_builtin (list) return (EX_USAGE); } - if (legal_number (pidstr, &pid_arg) == 0) + if (valid_number (pidstr, &pid_arg) == 0) { builtin_error ("%s: pid argument must be numeric", pidstr); return (EXECUTION_FAILURE); @@ -80,7 +81,7 @@ setpgid_builtin (list) } pid = pid_arg; - if (legal_number (pgidstr, &pgid_arg) == 0) + if (valid_number (pgidstr, &pgid_arg) == 0) { builtin_error ("%s: pgrp argument must be numeric", pgidstr); return (EXECUTION_FAILURE); diff --git a/examples/loadables/sleep.c b/examples/loadables/sleep.c index 204601f52..91872d8d1 100644 --- a/examples/loadables/sleep.c +++ b/examples/loadables/sleep.c @@ -7,7 +7,7 @@ */ /* - Copyright (C) 1999-2021 Free Software Foundation, Inc. + Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -135,6 +135,7 @@ sleep_builtin (WORD_LIST *list) if (list->word && ISOPTION (list->word->word, '-')) list = list->next; + /* Reject options and negative arguments */ if (*list->word->word == '-' || list->next) { builtin_usage (); return (EX_USAGE); @@ -146,8 +147,7 @@ sleep_builtin (WORD_LIST *list) * * A heuristic: if the conversion failed, but the argument appears to * contain a GNU-like interval specifier (e.g. "1m30s"), try to parse - * it. If we can't, return the right exit code to tell - * execute_builtin to try and execute a disk command instead. + * it. If we can't, it's an error. */ if (r == 0 && (strchr ("dhms", *ep) || strpbrk (list->word->word, "dhms"))) r = parse_gnutimefmt (list->word->word, &sec, &usec); diff --git a/examples/loadables/stat.c b/examples/loadables/stat.c index 1e60e7b6d..7229938d6 100644 --- a/examples/loadables/stat.c +++ b/examples/loadables/stat.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 2016,2022 Free Software Foundation, Inc. + Copyright (C) 2016,2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -80,17 +80,14 @@ static char *arraysubs[] = static char *stattime (time_t, const char *); static int -getstat (fname, flags, sp) - const char *fname; - int flags; - struct stat *sp; +getstat (const char *fname, int flags, struct stat *sp) { intmax_t lfd; int fd, r; if (strncmp (fname, "/dev/fd/", 8) == 0) { - if ((legal_number(fname + 8, &lfd) == 0) || (int)lfd != lfd) + if ((valid_number(fname + 8, &lfd) == 0) || (int)lfd != lfd) { errno = EINVAL; return -1; @@ -109,9 +106,7 @@ getstat (fname, flags, sp) } static char * -statlink (fname, sp) - char *fname; - struct stat *sp; +statlink (char *fname, struct stat *sp) { #if defined (HAVE_READLINK) char linkbuf[PATH_MAX]; @@ -128,8 +123,7 @@ statlink (fname, sp) } static char * -octalperms (m) - int m; +octalperms (int m) { int operms; char *ret; @@ -170,8 +164,7 @@ octalperms (m) } static char * -statperms (m) - int m; +statperms (int m) { char ubits[4], gbits[4], obits[4]; /* u=rwx,g=rwx,o=rwx */ int i; @@ -217,8 +210,7 @@ statperms (m) } static char * -statmode(mode) - int mode; +statmode(int mode) { char *modestr, *m; @@ -260,9 +252,7 @@ statmode(mode) } static char * -stattime (t, timefmt) - time_t t; - const char *timefmt; +stattime (time_t t, const char *timefmt) { char *tbuf, *ret; const char *fmt; @@ -271,6 +261,8 @@ stattime (t, timefmt) fmt = timefmt ? timefmt : DEFTIMEFMT; tm = localtime (&t); + if (tm == 0) + return (itos (t)); ret = xmalloc (TIMELEN_MAX); @@ -282,12 +274,7 @@ stattime (t, timefmt) } static char * -statval (which, fname, flags, fmt, sp) - int which; - char *fname; - int flags; - char *fmt; - struct stat *sp; +statval (int which, char *fname, int flags, char *fmt, struct stat *sp) { int temp; @@ -332,13 +319,7 @@ statval (which, fname, flags, fmt, sp) } static int -loadstat (vname, var, fname, flags, fmt, sp) - char *vname; - SHELL_VAR *var; - char *fname; - int flags; - char *fmt; - struct stat *sp; +loadstat (char *vname, SHELL_VAR *var, char *fname, int flags, char *fmt, struct stat *sp) { int i; char *key, *value; @@ -349,13 +330,13 @@ loadstat (vname, var, fname, flags, fmt, sp) key = savestring (arraysubs[i]); value = statval (i, fname, flags, fmt, sp); v = bind_assoc_variable (var, vname, key, value, ASS_FORCE); + free (value); } return 0; } int -stat_builtin (list) - WORD_LIST *list; +stat_builtin (WORD_LIST *list) { int opt, flags; char *aname, *fname, *timefmt; @@ -390,7 +371,7 @@ stat_builtin (list) } } - if (legal_identifier (aname) == 0) + if (valid_identifier (aname) == 0) { sh_invalidid (aname); return (EXECUTION_FAILURE); diff --git a/examples/loadables/strftime.c b/examples/loadables/strftime.c index f4e194e6b..178f8ec13 100644 --- a/examples/loadables/strftime.c +++ b/examples/loadables/strftime.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -37,8 +37,7 @@ #include "bashgetopt.h" int -strftime_builtin (list) - WORD_LIST *list; +strftime_builtin (WORD_LIST *list) { char *format, *tbuf; size_t tbsize, tsize; @@ -68,7 +67,7 @@ strftime_builtin (list) if (list && list->word->word) { - n = legal_number (list->word->word, &i); + n = valid_number (list->word->word, &i); if (n == 0 || i < 0 || i != (time_t)i) { sh_invalidnum (list->word->word); @@ -81,6 +80,12 @@ strftime_builtin (list) secs = NOW; t = localtime (&secs); + if (t == 0) + { + builtin_error ("%s: timestamp out of range", list && list->word->word ? list->word->word : "now"); + return (EXECUTION_FAILURE); + } + tbsize = strlen (format) * 4; tbuf = 0; diff --git a/examples/loadables/sync.c b/examples/loadables/sync.c index 4fbeee1c4..e8463877d 100644 --- a/examples/loadables/sync.c +++ b/examples/loadables/sync.c @@ -1,7 +1,7 @@ /* sync - sync the disks by forcing pending filesystem writes to complete */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -23,23 +23,69 @@ #ifdef HAVE_UNISTD_H #include <unistd.h> #endif +#include <errno.h> +#include <fcntl.h> #include "builtins.h" #include "shell.h" +#include "common.h" #include "bashgetopt.h" +#ifndef errno +extern int errno; +#endif + int -sync_builtin (list) - WORD_LIST *list; +sync_builtin (WORD_LIST *list) { - sync(); - return (EXECUTION_SUCCESS); + int fd, status; + WORD_LIST *l; + char *fn; + + if (no_options (list)) + return (EX_USAGE); + list = loptend; + + if (list == 0) + { + sync(); + return (EXECUTION_SUCCESS); + } + + status = EXECUTION_SUCCESS; + for (l = list; l; l = l->next) + { + fn = l->word->word; + fd = open (fn, O_WRONLY); + if (fd < 0) + fd = open (fn, O_RDONLY); + + if (fd < 0) + { + file_error (fn); + status = EXECUTION_FAILURE; + continue; + } + + if (fsync (fd) < 0) + { + builtin_error ("%s: cannot sync: %s", fn, strerror (errno)); + status = EXECUTION_FAILURE; + } + close (fd); + } + + return (status); } char *sync_doc[] = { - "Sync disks.", - "" - "Force completion of pending disk writes", + "Sync disks or specified files.", + "", + "If one or more FILEs is supplied, force completion of pending writes", + "to those files. Otherwise, force completion of any pending disk", + "writes.", + "", + "Exit Status: zero unless any FILE could not be synced.", (char *)NULL }; @@ -48,6 +94,6 @@ struct builtin sync_struct = { sync_builtin, /* function implementing the builtin */ BUILTIN_ENABLED, /* initial flags for builtin */ sync_doc, /* array of long documentation strings. */ - "sync", /* usage synopsis; becomes short_doc */ + "sync [file ...]", /* usage synopsis; becomes short_doc */ 0 /* reserved for internal use */ }; diff --git a/examples/loadables/tee.c b/examples/loadables/tee.c index 0365aa9a4..c74cb6473 100644 --- a/examples/loadables/tee.c +++ b/examples/loadables/tee.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2021 Free Software Foundation, Inc. + Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -58,11 +58,10 @@ static FLIST *tee_flist; extern int interrupt_immediately; -extern char *strerror (); +extern char *strerror (int); int -tee_builtin (list) - WORD_LIST *list; +tee_builtin (WORD_LIST *list) { int opt, append, nointr, rval, fd, fflags; int n, nr, nw; diff --git a/examples/loadables/template.c b/examples/loadables/template.c index 094b80ce9..ca9e16f97 100644 --- a/examples/loadables/template.c +++ b/examples/loadables/template.c @@ -17,11 +17,10 @@ extern int errno; #endif -extern char *strerror (); +extern char *strerror (int); int -template_builtin (list) - WORD_LIST *list; +template_builtin (WORD_LIST *list) { int opt, rval; @@ -45,16 +44,14 @@ template_builtin (list) /* Called when `template' is enabled and loaded from the shared object. If this function returns 0, the load fails. */ int -template_builtin_load (name) - char *name; +template_builtin_load (char *name) { return (1); } /* Called when `template' is disabled. */ void -template_builtin_unload (name) - char *name; +template_builtin_unload (char *name) { } diff --git a/examples/loadables/truefalse.c b/examples/loadables/truefalse.c index e011fa1f9..c29c0b334 100644 --- a/examples/loadables/truefalse.c +++ b/examples/loadables/truefalse.c @@ -1,7 +1,7 @@ /* true and false builtins */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -26,15 +26,13 @@ #include "common.h" int -true_builtin (list) - WORD_LIST *list; +true_builtin (WORD_LIST *list) { return EXECUTION_SUCCESS; } int -false_builtin (list) - WORD_LIST *list; +false_builtin (WORD_LIST *list) { return EXECUTION_FAILURE; } diff --git a/examples/loadables/tty.c b/examples/loadables/tty.c index 381df2578..27a851bf4 100644 --- a/examples/loadables/tty.c +++ b/examples/loadables/tty.c @@ -3,7 +3,7 @@ /* See Makefile for compilation details. */ /* - Copyright (C) 1999-2021 Free Software Foundation, Inc. + Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -28,11 +28,10 @@ #include "bashgetopt.h" #include "common.h" -extern char *ttyname (); +extern char *ttyname (int); int -tty_builtin (list) - WORD_LIST *list; +tty_builtin (WORD_LIST *list) { int opt, sflag; char *t; diff --git a/examples/loadables/uname.c b/examples/loadables/uname.c index 106a1c8db..81ea2b0ef 100644 --- a/examples/loadables/uname.c +++ b/examples/loadables/uname.c @@ -6,7 +6,7 @@ */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -59,13 +59,12 @@ struct utsname { extern int errno; #endif -static void uprint(); +static void uprint(int, char *); static int uname_flags; int -uname_builtin (list) - WORD_LIST *list; +uname_builtin (WORD_LIST *list) { int opt, r; struct utsname uninfo; @@ -134,9 +133,7 @@ uname_builtin (list) } static void -uprint (flag, info) - int flag; - char *info; +uprint (int flag, char *info) { if (uname_flags & flag) { diff --git a/examples/loadables/unlink.c b/examples/loadables/unlink.c index ff2a78a03..8431b61bb 100644 --- a/examples/loadables/unlink.c +++ b/examples/loadables/unlink.c @@ -4,7 +4,7 @@ fsck clean up the file system. */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -39,8 +39,7 @@ extern int errno; #endif int -unlink_builtin (list) - WORD_LIST *list; +unlink_builtin (WORD_LIST *list) { if (list == 0) { diff --git a/examples/loadables/whoami.c b/examples/loadables/whoami.c index 3e7e36e4b..7e11ba2ef 100644 --- a/examples/loadables/whoami.c +++ b/examples/loadables/whoami.c @@ -3,7 +3,7 @@ */ /* - Copyright (C) 1999-2009 Free Software Foundation, Inc. + Copyright (C) 1999-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -29,8 +29,7 @@ #include "common.h" int -whoami_builtin (list) - WORD_LIST *list; +whoami_builtin (WORD_LIST *list) { int opt; diff --git a/execute_cmd.c b/execute_cmd.c index ed1063e6b..aac84267f 100644 --- a/execute_cmd.c +++ b/execute_cmd.c @@ -1,6 +1,6 @@ /* execute_cmd.c -- Execute a COMMAND structure. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -59,6 +59,8 @@ extern int errno; #define NEED_FPURGE_DECL #define NEED_SH_SETLINEBUF_DECL +#define NEED_CLOCK_FUNCS_DECL +#define NEED_TIMEVAL_FUNCS_DECL #include "bashansi.h" #include "bashintl.h" @@ -90,9 +92,7 @@ extern int errno; #include <glob/strmatch.h> #include <tilde/tilde.h> -#if defined (BUFFERED_INPUT) -# include "input.h" -#endif +#include "input.h" #if defined (ALIAS) # include "alias.h" @@ -116,84 +116,83 @@ extern struct timeval shellstart; extern char *glob_argv_flags; #endif -extern int close PARAMS((int)); +extern int close (int); /* Static functions defined and used in this file. */ -static void close_pipes PARAMS((int, int)); -static void do_piping PARAMS((int, int)); -static void bind_lastarg PARAMS((char *)); -static int shell_control_structure PARAMS((enum command_type)); -static void cleanup_redirects PARAMS((REDIRECT *)); +static void close_pipes (int, int); +static void do_piping (int, int); +static int shell_control_structure (enum command_type); +static void cleanup_redirects (REDIRECT *); #if defined (JOB_CONTROL) -static int restore_signal_mask PARAMS((sigset_t *)); +static void uw_restore_signal_mask (void *); #endif -static int builtin_status PARAMS((int)); +static int builtin_status (int); -static int execute_for_command PARAMS((FOR_COM *)); +static int execute_for_command (FOR_COM *); #if defined (SELECT_COMMAND) -static int displen PARAMS((const char *)); -static int print_index_and_element PARAMS((int, int, WORD_LIST *)); -static void indent PARAMS((int, int)); -static void print_select_list PARAMS((WORD_LIST *, int, int, int)); -static char *select_query PARAMS((WORD_LIST *, int, char *, int)); -static int execute_select_command PARAMS((SELECT_COM *)); +static int displen (const char *); +static int print_index_and_element (int, int, WORD_LIST *); +static void indent (int, int); +static void print_select_list (WORD_LIST *, int, int, int); +static char *select_query (WORD_LIST *, int, char *, int); +static int execute_select_command (SELECT_COM *); #endif #if defined (DPAREN_ARITHMETIC) -static int execute_arith_command PARAMS((ARITH_COM *)); +static int execute_arith_command (ARITH_COM *); #endif #if defined (COND_COMMAND) -static int execute_cond_node PARAMS((COND_COM *)); -static int execute_cond_command PARAMS((COND_COM *)); +static int execute_cond_node (COND_COM *); +static int execute_cond_command (COND_COM *); #endif #if defined (COMMAND_TIMING) -static int mkfmt PARAMS((char *, int, int, time_t, int)); -static void print_formatted_time PARAMS((FILE *, char *, - time_t, int, time_t, int, - time_t, int, int)); -static int time_command PARAMS((COMMAND *, int, int, int, struct fd_bitmap *)); +static int mkfmt (char *, int, int, time_t, long); +static void print_formatted_time (FILE *, char *, + time_t, long, time_t, long, + time_t, long, int); +static int time_command (COMMAND *, int, int, int, struct fd_bitmap *); #endif #if defined (ARITH_FOR_COMMAND) -static intmax_t eval_arith_for_expr PARAMS((WORD_LIST *, int *)); -static int execute_arith_for_command PARAMS((ARITH_FOR_COM *)); -#endif -static int execute_case_command PARAMS((CASE_COM *)); -static int execute_while_command PARAMS((WHILE_COM *)); -static int execute_until_command PARAMS((WHILE_COM *)); -static int execute_while_or_until PARAMS((WHILE_COM *, int)); -static int execute_if_command PARAMS((IF_COM *)); -static int execute_null_command PARAMS((REDIRECT *, int, int, int)); -static void fix_assignment_words PARAMS((WORD_LIST *)); -static void fix_arrayref_words PARAMS((WORD_LIST *)); -static int execute_simple_command PARAMS((SIMPLE_COM *, int, int, int, struct fd_bitmap *)); -static int execute_builtin PARAMS((sh_builtin_func_t *, WORD_LIST *, int, int)); -static int execute_function PARAMS((SHELL_VAR *, WORD_LIST *, int, struct fd_bitmap *, int, int)); -static int execute_builtin_or_function PARAMS((WORD_LIST *, sh_builtin_func_t *, +static intmax_t eval_arith_for_expr (WORD_LIST *, int *); +static int execute_arith_for_command (ARITH_FOR_COM *); +#endif +static int execute_case_command (CASE_COM *); +static int execute_while_command (WHILE_COM *); +static int execute_until_command (WHILE_COM *); +static int execute_while_or_until (WHILE_COM *, int); +static int execute_if_command (IF_COM *); +static int execute_null_command (REDIRECT *, int, int, int); +static void fix_assignment_words (WORD_LIST *); +static void fix_arrayref_words (WORD_LIST *); +static int execute_simple_command (SIMPLE_COM *, int, int, int, struct fd_bitmap *); +static int execute_builtin (sh_builtin_func_t *, WORD_LIST *, int, int); +static int execute_function (SHELL_VAR *, WORD_LIST *, int, struct fd_bitmap *, int, int); +static int execute_builtin_or_function (WORD_LIST *, sh_builtin_func_t *, SHELL_VAR *, - REDIRECT *, struct fd_bitmap *, int)); -static void execute_subshell_builtin_or_function PARAMS((WORD_LIST *, REDIRECT *, + REDIRECT *, struct fd_bitmap *, int); +static void execute_subshell_builtin_or_function (WORD_LIST *, REDIRECT *, sh_builtin_func_t *, SHELL_VAR *, int, int, int, struct fd_bitmap *, - int)); -static int execute_disk_command PARAMS((WORD_LIST *, REDIRECT *, char *, - int, int, int, struct fd_bitmap *, int)); + int); +static int execute_disk_command (WORD_LIST *, REDIRECT *, char *, + int, int, int, struct fd_bitmap *, int); -static char *getinterp PARAMS((char *, int, int *)); -static void initialize_subshell PARAMS((void)); -static int execute_in_subshell PARAMS((COMMAND *, int, int, int, struct fd_bitmap *)); +static char *getinterp (char *, int, int *); +static void initialize_subshell (void); +static int execute_in_subshell (COMMAND *, int, int, int, struct fd_bitmap *); #if defined (COPROCESS_SUPPORT) -static void coproc_setstatus PARAMS((struct coproc *, int)); -static int execute_coproc PARAMS((COMMAND *, int, int, struct fd_bitmap *)); +static void coproc_setstatus (struct coproc *, WAIT); +static int execute_coproc (COMMAND *, int, int, struct fd_bitmap *); #endif -static int execute_pipeline PARAMS((COMMAND *, int, int, int, struct fd_bitmap *)); +static int execute_pipeline (COMMAND *, int, int, int, struct fd_bitmap *); -static int execute_connection PARAMS((COMMAND *, int, int, int, struct fd_bitmap *)); +static int execute_connection (COMMAND *, int, int, int, struct fd_bitmap *); -static int execute_intern_function PARAMS((WORD_DESC *, FUNCTION_DEF *)); +static int execute_intern_function (WORD_DESC *, FUNCTION_DEF *); /* Set to 1 if fd 0 was the subject of redirection to a subshell. Global so that reader_loop can set it to zero before executing a command. */ @@ -208,6 +207,9 @@ char *this_command_name; a debugger to know where exactly the program is currently executing. */ char *the_printed_command_except_trap; +/* Used to compute the correct line number. */ +COMMAND *currently_executing_command; + /* For catching RETURN in a function. */ int return_catch_flag; int return_catch_value; @@ -237,8 +239,12 @@ REDIRECT *exec_redirection_undo_list = (REDIRECT *)NULL; currently executing (e.g. `eval echo a' would have it set to 2). */ int executing_builtin = 0; -/* Non-zero if we are executing a command list (a;b;c, etc.) */ -int executing_list = 0; +/* Non-zero if we are executing a command list (a;b;c, etc.) or a loop and we + should break out of it on a SIGINT. */ +int interrupt_execution = 0; + +/* Non-zero if we should defer closing process substitution FDs. */ +int retain_fifos = 0; /* Non-zero if failing commands in a command substitution should not exit the shell even if -e is set. Used to pass the CMD_IGNORE_RETURN flag down to @@ -264,8 +270,6 @@ struct stat SB; /* used for debugging */ static int special_builtin_failed; -static COMMAND *currently_executing_command; - /* The line number that the currently executing function starts on. */ static int function_line_number; @@ -319,8 +323,7 @@ struct fd_bitmap *current_fds_to_close = (struct fd_bitmap *)NULL; information from the shell to its children about file descriptors to close. */ struct fd_bitmap * -new_fd_bitmap (size) - int size; +new_fd_bitmap (int size) { struct fd_bitmap *ret; @@ -339,18 +342,22 @@ new_fd_bitmap (size) } void -dispose_fd_bitmap (fdbp) - struct fd_bitmap *fdbp; +dispose_fd_bitmap (struct fd_bitmap *fdbp) { FREE (fdbp->bitmap); free (fdbp); } void -close_fd_bitmap (fdbp) - struct fd_bitmap *fdbp; +uw_dispose_fd_bitmap (void *fdbp) +{ + dispose_fd_bitmap (fdbp); +} + +void +close_fd_bitmap (struct fd_bitmap *fdbp) { - register int i; + int i; if (fdbp) { @@ -363,9 +370,27 @@ close_fd_bitmap (fdbp) } } +static void +uw_close_fd_bitmap (void *fdbp) +{ + close_fd_bitmap (fdbp); +} + +void +uw_close (void *fd) +{ + close ((intptr_t) fd); /* XXX */ +} + +static void +uw_restore_lineno (void *line) +{ + line_number = (intptr_t) line; +} + /* Return the line number of the currently executing command. */ int -executing_line_number () +executing_line_number (void) { if (executing && showing_function_line == 0 && (variable_context == 0 || interactive_shell == 0) && @@ -398,8 +423,7 @@ executing_line_number () return values. Executing a command with nothing in it returns EXECUTION_SUCCESS. */ int -execute_command (command) - COMMAND *command; +execute_command (COMMAND *command) { struct fd_bitmap *bitmap; int result; @@ -407,7 +431,7 @@ execute_command (command) current_fds_to_close = (struct fd_bitmap *)NULL; bitmap = new_fd_bitmap (FD_BITMAP_DEFAULT_SIZE); begin_unwind_frame ("execute-command"); - add_unwind_protect (dispose_fd_bitmap, (char *)bitmap); + add_unwind_protect (uw_dispose_fd_bitmap, (char *)bitmap); /* Just do the command, but not asynchronously. */ result = execute_command_internal (command, 0, NO_PIPE, NO_PIPE, bitmap); @@ -418,7 +442,7 @@ execute_command (command) #if defined (PROCESS_SUBSTITUTION) /* don't unlink fifos if we're in a shell function; wait until the function returns. */ - if (variable_context == 0 && executing_list == 0) + if (variable_context == 0 && retain_fifos == 0) unlink_fifo_list (); #endif /* PROCESS_SUBSTITUTION */ @@ -428,8 +452,7 @@ execute_command (command) /* Return 1 if TYPE is a shell control structure type. */ static int -shell_control_structure (type) - enum command_type type; +shell_control_structure (enum command_type type) { switch (type) { @@ -462,15 +485,26 @@ shell_control_structure (type) /* A function to use to unwind_protect the redirection undo list for loops. */ static void -cleanup_redirects (list) - REDIRECT *list; +cleanup_redirects (REDIRECT *list) { do_redirections (list, RX_ACTIVE); dispose_redirects (list); } +static void +uw_cleanup_redirects (void *list) +{ + cleanup_redirects (list); +} + +static void +uw_dispose_redirects (void *list) +{ + dispose_redirects (list); +} + void -undo_partial_redirects () +undo_partial_redirects (void) { if (redirection_undo_list) { @@ -482,15 +516,14 @@ undo_partial_redirects () #if 0 /* Function to unwind_protect the redirections for functions and builtins. */ static void -cleanup_func_redirects (list) - REDIRECT *list; +cleanup_func_redirects (REDIRECT *list) { do_redirections (list, RX_ACTIVE); } #endif void -dispose_exec_redirects () +dispose_exec_redirects (void) { if (exec_redirection_undo_list) { @@ -500,7 +533,7 @@ dispose_exec_redirects () } void -dispose_partial_redirects () +dispose_partial_redirects (void) { if (redirection_undo_list) { @@ -512,11 +545,10 @@ dispose_partial_redirects () #if defined (JOB_CONTROL) /* A function to restore the signal mask to its proper value when the shell is interrupted or errors occur while creating a pipeline. */ -static int -restore_signal_mask (set) - sigset_t *set; +static void +uw_restore_signal_mask (void *set) { - return (sigprocmask (SIG_SETMASK, set, (sigset_t *)NULL)); + sigprocmask (SIG_SETMASK, set, NULL); } #endif /* JOB_CONTROL */ @@ -525,7 +557,7 @@ restore_signal_mask (set) void open_files (void) { - register int i; + int i; int f, fd_table_size; fd_table_size = getdtablesize (); @@ -541,7 +573,7 @@ open_files (void) #endif void -async_redirect_stdin () +async_redirect_stdin (void) { int fd; @@ -570,12 +602,7 @@ async_redirect_stdin () return values. Executing a command with nothing in it returns EXECUTION_SUCCESS. */ int -execute_command_internal (command, asynchronous, pipe_in, pipe_out, - fds_to_close) - COMMAND *command; - int asynchronous; - int pipe_in, pipe_out; - struct fd_bitmap *fds_to_close; +execute_command_internal (COMMAND *command, int asynchronous, int pipe_in, int pipe_out, struct fd_bitmap *fds_to_close) { int exec_result, user_subshell, invert, ignore_return, was_error_trap, fork_flags; REDIRECT *my_undo_list, *exec_undo_list; @@ -583,7 +610,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, volatile int save_line_number; #if defined (PROCESS_SUBSTITUTION) volatile int ofifo, nfifo, osize, saved_fifo; - volatile void *ofifo_list; + void *ofifo_list; /* void * volatile ofifo_list; */ #endif if (breaking || continuing) @@ -648,6 +675,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, save_line_number = line_number; if (command->type == cm_subshell) SET_LINE_NUMBER (command->value.Subshell->line); /* XXX - save value? */ + /* Otherwise we defer setting line_number */ tcmd = make_command_string (command); fork_flags = asynchronous ? FORK_ASYNC : 0; @@ -690,6 +718,10 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, if (variable_context == 0) /* wait until shell function completes */ unlink_fifo_list (); #endif + + /* Restore any saved state here before possible early return. */ + line_number = save_line_number; + /* If we are part of a pipeline, and not the end of the pipeline, then we should simply return and let the last command in the pipe be waited for. If we are not in a pipeline, or are the @@ -700,8 +732,6 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, stop_pipeline (asynchronous, (COMMAND *)NULL); - line_number = save_line_number; - if (asynchronous == 0) { was_error_trap = signal_is_trapped (ERROR_TRAP) && signal_is_ignored (ERROR_TRAP) == 0; @@ -776,7 +806,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, # endif /* XXX - also if sourcelevel != 0? */ - if (variable_context != 0 || executing_list) + if (variable_context != 0 || retain_fifos) { ofifo = num_fifos (); ofifo_list = copy_fifo_list ((int *)&osize); @@ -801,7 +831,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, #if defined (PROCESS_SUBSTITUTION) if (saved_fifo) { - free ((void *)ofifo_list); + free (ofifo_list); discard_unwind_frame ("internal_fifos"); } #endif @@ -836,10 +866,10 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, begin_unwind_frame ("loop_redirections"); if (my_undo_list) - add_unwind_protect ((Function *)cleanup_redirects, my_undo_list); + add_unwind_protect (uw_cleanup_redirects, my_undo_list); if (exec_undo_list) - add_unwind_protect ((Function *)dispose_redirects, exec_undo_list); + add_unwind_protect (uw_dispose_redirects, exec_undo_list); QUIT; @@ -861,11 +891,15 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, if (command->flags & CMD_STDIN_REDIR) command->value.Simple->flags |= CMD_STDIN_REDIR; + begin_unwind_frame ("simple_lineno"); + add_unwind_protect (uw_restore_lineno, (void *) (intptr_t) save_line_number); + SET_LINE_NUMBER (command->value.Simple->line); exec_result = execute_simple_command (command->value.Simple, pipe_in, pipe_out, asynchronous, fds_to_close); line_number = save_line_number; + discard_unwind_frame ("simple_lineno"); /* The temporary environment should be used for only the simple command immediately following its definition. */ @@ -1062,6 +1096,9 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, #endif line_number_for_err_trap = save_line_number = line_number; /* XXX */ + begin_unwind_frame ("misc_compound"); + add_unwind_protect (uw_restore_lineno, (void *) (intptr_t) save_line_number); + #if defined (DPAREN_ARITHMETIC) if (command->type == cm_arith) exec_result = execute_arith_command (command->value.Arith); @@ -1076,6 +1113,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, exec_result = execute_intern_function (command->value.Function_def->name, command->value.Function_def); line_number = save_line_number; + discard_unwind_frame ("misc_compound"); if (was_error_trap && ignore_return == 0 && invert == 0 && exec_result != EXECUTION_SUCCESS) { @@ -1113,8 +1151,8 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, { nfifo = num_fifos (); if (nfifo > ofifo) - close_new_fifos ((void *)ofifo_list, osize); - free ((void *)ofifo_list); + close_new_fifos (ofifo_list, osize); + free (ofifo_list); discard_unwind_frame ("internal_fifos"); } #endif @@ -1155,23 +1193,22 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, #if defined (COMMAND_TIMING) #if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY) -extern struct timeval *difftimeval PARAMS((struct timeval *, struct timeval *, struct timeval *)); -extern struct timeval *addtimeval PARAMS((struct timeval *, struct timeval *, struct timeval *)); -extern int timeval_to_cpu PARAMS((struct timeval *, struct timeval *, struct timeval *)); +extern struct timeval *difftimeval (struct timeval *, struct timeval *, struct timeval *); +extern struct timeval *addtimeval (struct timeval *, struct timeval *, struct timeval *); +extern int timeval_to_cpu (struct timeval *, struct timeval *, struct timeval *); #endif #define POSIX_TIMEFORMAT "real %2R\nuser %2U\nsys %2S" #define BASH_TIMEFORMAT "\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS" -static const int precs[] = { 0, 100, 10, 1 }; +static const int precs[] = { 0, 100000, 10000, 1000, 100, 10, 1 }; +static const int maxvals[] = { 1, 10, 100, 1000, 10000, 100000, 10000000 }; /* Expand one `%'-prefixed escape sequence from a time format string. */ -static int -mkfmt (buf, prec, lng, sec, sec_fraction) - char *buf; - int prec, lng; - time_t sec; - int sec_fraction; +/* SEC_FRACTION is in usecs. We normalize and round that based on the + precision. */ +int +mkfmt (char *buf, int prec, int lng, time_t sec, long sec_fraction) { time_t min; char abuf[INT_STRLEN_BOUND(time_t) + 1]; @@ -1205,10 +1242,31 @@ mkfmt (buf, prec, lng, sec, sec_fraction) buf[ind++] = abuf[aind++]; /* We want to add a decimal point and PREC places after it if PREC is - nonzero. PREC is not greater than 3. SEC_FRACTION is between 0 - and 999. */ + nonzero. PREC is not greater than 6. SEC_FRACTION is between 0 + and 999999 (microseconds). */ if (prec != 0) { + /* We round here because we changed timeval_to_secs to return + microseconds and normalized clock_t_to_secs's fractional return + value to microseconds, deferring the work to be done to now. + + sec_fraction is in microseconds. Take the value, cut off what we + don't want, round up if necessary, then convert back to + microseconds. */ + if (prec != 6) + { + int frac, rest, maxval; + + maxval = maxvals[6 - prec]; + frac = sec_fraction / maxval; + rest = sec_fraction % maxval; + + if (rest >= maxval/2) + frac++; + + sec_fraction = frac * (1000000 / maxvals[prec]); + } + buf[ind++] = locale_decpoint (); for (aind = 1; aind <= prec; aind++) { @@ -1242,20 +1300,14 @@ mkfmt (buf, prec, lng, sec, sec_fraction) the seconds and thousandths of a second of real, user, and system time, resectively. */ static void -print_formatted_time (fp, format, rs, rsf, us, usf, ss, ssf, cpu) - FILE *fp; - char *format; - time_t rs; - int rsf; - time_t us; - int usf; - time_t ss; - int ssf, cpu; +print_formatted_time (FILE *fp, char *format, + time_t rs, long rsf, time_t us, long usf, time_t ss, long ssf, + int cpu) { int prec, lng, len; char *str, *s, ts[INT_STRLEN_BOUND (time_t) + sizeof ("mSS.FFFF")]; time_t sum; - int sum_frac; + long sum_frac; int sindex, ssize; len = strlen (format); @@ -1299,7 +1351,7 @@ print_formatted_time (fp, format, rs, rsf, us, usf, ss, ssf, cpu) if (DIGIT (*s)) /* `precision' */ { prec = *s++ - '0'; - if (prec > 3) prec = 3; + if (prec > 6) prec = 6; } if (*s == 'l') /* `length extender' */ { @@ -1332,14 +1384,11 @@ print_formatted_time (fp, format, rs, rsf, us, usf, ss, ssf, cpu) } static int -time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close) - COMMAND *command; - int asynchronous, pipe_in, pipe_out; - struct fd_bitmap *fds_to_close; +time_command (COMMAND *command, int asynchronous, int pipe_in, int pipe_out, struct fd_bitmap *fds_to_close) { int rv, posix_time, old_flags, nullcmd, code; - time_t rs, us, ss; - int rsf, usf, ssf; + time_t rs, us, ss; /* seconds */ + long rsf, usf, ssf; /* microseconds */ int cpu; char *time_format; volatile procenv_t save_top_level; @@ -1363,7 +1412,7 @@ time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close) # if defined (HAVE_STRUCT_TIMEZONE) gettimeofday (&before, &dtz); # else - gettimeofday (&before, (void *)NULL); + gettimeofday (&before, NULL); # endif /* !HAVE_STRUCT_TIMEZONE */ getrusage (RUSAGE_SELF, &selfb); getrusage (RUSAGE_CHILDREN, &kidsb); @@ -1389,6 +1438,7 @@ time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close) #endif } + rv = EXECUTION_SUCCESS; /* suppress uninitialized use warnings */ old_flags = command->flags; COPY_PROCENV (top_level, save_top_level); command->flags &= ~(CMD_TIME_PIPELINE|CMD_TIME_POSIX); @@ -1406,27 +1456,28 @@ time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close) sh_longjmp (top_level, code); rs = us = ss = 0; - rsf = usf = ssf = cpu = 0; + rsf = usf = ssf = 0; + cpu = 0; #if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY) # if defined (HAVE_STRUCT_TIMEZONE) gettimeofday (&after, &dtz); # else - gettimeofday (&after, (void *)NULL); + gettimeofday (&after, NULL); # endif /* !HAVE_STRUCT_TIMEZONE */ getrusage (RUSAGE_SELF, &selfa); getrusage (RUSAGE_CHILDREN, &kidsa); difftimeval (&real, &before, &after); - timeval_to_secs (&real, &rs, &rsf); + timeval_to_secs (&real, &rs, &rsf, 1000000); addtimeval (&user, difftimeval(&after, &selfb.ru_utime, &selfa.ru_utime), difftimeval(&before, &kidsb.ru_utime, &kidsa.ru_utime)); - timeval_to_secs (&user, &us, &usf); + timeval_to_secs (&user, &us, &usf, 1000000); addtimeval (&sys, difftimeval(&after, &selfb.ru_stime, &selfa.ru_stime), difftimeval(&before, &kidsb.ru_stime, &kidsa.ru_stime)); - timeval_to_secs (&sys, &ss, &ssf); + timeval_to_secs (&sys, &ss, &ssf, 1000000); cpu = timeval_to_cpu (&real, &user, &sys); #else @@ -1435,12 +1486,16 @@ time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close) real = tafter - tbefore; clock_t_to_secs (real, &rs, &rsf); + /* clock_t_to_secs returns RSF in milliseconds; multipy by 1000 to get microseconds. */ + rsf *= 1000; user = (after.tms_utime - before.tms_utime) + (after.tms_cutime - before.tms_cutime); clock_t_to_secs (user, &us, &usf); + usf *= 1000; sys = (after.tms_stime - before.tms_stime) + (after.tms_cstime - before.tms_cstime); clock_t_to_secs (sys, &ss, &ssf); + ssf *= 1000; cpu = (real == 0) ? 0 : ((user + sys) * 10000) / real; @@ -1474,11 +1529,7 @@ time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close) called after make_child and we must be running in the child process. The caller will return or exit() immediately with the value this returns. */ static int -execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close) - COMMAND *command; - int asynchronous; - int pipe_in, pipe_out; - struct fd_bitmap *fds_to_close; +execute_in_subshell (COMMAND *command, int asynchronous, int pipe_in, int pipe_out, struct fd_bitmap *fds_to_close) { volatile int user_subshell, user_coproc, invert; int return_code, function_value, should_redir_stdin, ois, result; @@ -1503,8 +1554,7 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close) /* If a command is asynchronous in a subshell (like ( foo ) & or the special case of an asynchronous GROUP command where the - - the subshell bit is turned on down in case cm_group: below), + subshell bit is turned on down in case cm_group: below), turn off `asynchronous', so that two subshells aren't spawned. XXX - asynchronous used to be set to 0 in this block, but that means that setup_async_signals was never run. Now it's set to @@ -1599,6 +1649,8 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close) asynchronous = 0; } else + /* XXX - restore if old handler is SIG_IGN like we do in + execute_subshell_builtin_or_function? */ set_sigint_handler (); #if defined (JOB_CONTROL) @@ -1619,6 +1671,10 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close) #endif #if defined (PROCESS_SUBSTITUTION) +# if defined (JOB_CONTROL) + procsub_clear (); + last_procsub_child = 0; +# endif clear_fifo_list (); /* XXX- we haven't created any FIFOs */ #endif @@ -1645,10 +1701,8 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close) if (should_redir_stdin && stdin_redir == 0) async_redirect_stdin (); -#if defined (BUFFERED_INPUT) /* In any case, we are not reading our command input from stdin. */ default_buffered_input = -1; -#endif /* We can't optimize away forks if one of the commands executed by the subshell sets an exit trap, so we set CMD_NO_FORK for simple commands @@ -1666,6 +1720,15 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close) dispose_redirects (command->redirects); command->redirects = (REDIRECT *)NULL; +#if 1 +#if defined (PROCESS_SUBSTITUTION) && defined (JOB_CONTROL) + if (user_subshell && command->type == cm_subshell) + { + procsub_clear (); + last_procsub_child = 0; + } +#endif +#endif } if (command->type == cm_subshell) @@ -1763,18 +1826,18 @@ typedef struct cplist } cplist_t; -static struct cpelement *cpe_alloc PARAMS((struct coproc *)); -static void cpe_dispose PARAMS((struct cpelement *)); -static struct cpelement *cpl_add PARAMS((struct coproc *)); -static struct cpelement *cpl_delete PARAMS((pid_t)); -static void cpl_reap PARAMS((void)); -static void cpl_flush PARAMS((void)); -static void cpl_closeall PARAMS((void)); -static struct cpelement *cpl_search PARAMS((pid_t)); -static struct cpelement *cpl_searchbyname PARAMS((const char *)); -static void cpl_prune PARAMS((void)); +static struct cpelement *cpe_alloc (struct coproc *); +static void cpe_dispose (struct cpelement *); +static struct cpelement *cpl_add (struct coproc *); +static struct cpelement *cpl_delete (pid_t); +static void cpl_reap (void); +static void cpl_flush (void); +static void cpl_closeall (void); +static struct cpelement *cpl_search (pid_t); +static struct cpelement *cpl_searchbyname (const char *); +static void cpl_prune (void); -static void coproc_free PARAMS((struct coproc *)); +static void coproc_free (struct coproc *); /* Will go away when there is fully-implemented support for multiple coprocs. */ Coproc sh_coproc = { 0, NO_PID, -1, -1, 0, 0, 0, 0, 0 }; @@ -1784,8 +1847,7 @@ cplist_t coproc_list = {0, 0, 0}; /* Functions to manage the list of coprocs */ static struct cpelement * -cpe_alloc (cp) - Coproc *cp; +cpe_alloc (Coproc *cp) { struct cpelement *cpe; @@ -1796,15 +1858,13 @@ cpe_alloc (cp) } static void -cpe_dispose (cpe) - struct cpelement *cpe; +cpe_dispose (struct cpelement *cpe) { free (cpe); } static struct cpelement * -cpl_add (cp) - Coproc *cp; +cpl_add (Coproc *cp) { struct cpelement *cpe; @@ -1826,8 +1886,7 @@ cpl_add (cp) } static struct cpelement * -cpl_delete (pid) - pid_t pid; +cpl_delete (pid_t pid) { struct cpelement *prev, *p; @@ -1859,7 +1918,7 @@ cpl_delete (pid) } static void -cpl_reap () +cpl_reap (void) { struct cpelement *p, *next, *nh, *nt; @@ -1900,7 +1959,7 @@ cpl_reap () /* Clear out the list of saved statuses */ static void -cpl_flush () +cpl_flush (void) { struct cpelement *cpe, *p; @@ -1918,7 +1977,7 @@ cpl_flush () } static void -cpl_closeall () +cpl_closeall (void) { struct cpelement *cpe; @@ -1927,8 +1986,7 @@ cpl_closeall () } static void -cpl_fdchk (fd) - int fd; +cpl_fdchk (int fd) { struct cpelement *cpe; @@ -1939,8 +1997,7 @@ cpl_fdchk (fd) /* Search for PID in the list of coprocs; return the cpelement struct if found. If not found, return NULL. */ static struct cpelement * -cpl_search (pid) - pid_t pid; +cpl_search (pid_t pid) { struct cpelement *cpe; @@ -1953,8 +2010,7 @@ cpl_search (pid) /* Search for the coproc named NAME in the list of coprocs; return the cpelement struct if found. If not found, return NULL. */ static struct cpelement * -cpl_searchbyname (name) - const char *name; +cpl_searchbyname (const char *name) { struct cpelement *cp; @@ -1965,7 +2021,7 @@ cpl_searchbyname (name) } static pid_t -cpl_firstactive () +cpl_firstactive (void) { struct cpelement *cpe; @@ -1977,7 +2033,7 @@ cpl_firstactive () #if 0 static void -cpl_prune () +cpl_prune (void) { struct cpelement *cp; @@ -1997,8 +2053,7 @@ cpl_prune () package above). */ struct coproc * -getcoprocbypid (pid) - pid_t pid; +getcoprocbypid (pid_t pid) { #if MULTIPLE_COPROCS struct cpelement *p; @@ -2011,8 +2066,7 @@ getcoprocbypid (pid) } struct coproc * -getcoprocbyname (name) - const char *name; +getcoprocbyname (const char *name) { #if MULTIPLE_COPROCS struct cpelement *p; @@ -2025,8 +2079,7 @@ getcoprocbyname (name) } void -coproc_init (cp) - struct coproc *cp; +coproc_init (struct coproc *cp) { cp->c_name = 0; cp->c_pid = NO_PID; @@ -2036,9 +2089,7 @@ coproc_init (cp) } struct coproc * -coproc_alloc (name, pid) - char *name; - pid_t pid; +coproc_alloc (char *name, pid_t pid) { struct coproc *cp; @@ -2060,15 +2111,13 @@ coproc_alloc (name, pid) } static void -coproc_free (cp) - struct coproc *cp; +coproc_free (struct coproc *cp) { free (cp); } void -coproc_dispose (cp) - struct coproc *cp; +coproc_dispose (struct coproc *cp) { sigset_t set, oset; @@ -2091,7 +2140,7 @@ coproc_dispose (cp) /* Placeholder for now. Will require changes for multiple coprocs */ void -coproc_flush () +coproc_flush (void) { #if MULTIPLE_COPROCS cpl_flush (); @@ -2101,8 +2150,7 @@ coproc_flush () } void -coproc_close (cp) - struct coproc *cp; +coproc_close (struct coproc *cp) { if (cp->c_rfd >= 0) { @@ -2118,7 +2166,7 @@ coproc_close (cp) } void -coproc_closeall () +coproc_closeall (void) { #if MULTIPLE_COPROCS cpl_closeall (); @@ -2128,7 +2176,7 @@ coproc_closeall () } void -coproc_reap () +coproc_reap (void) { #if MULTIPLE_COPROCS cpl_reap (); @@ -2142,9 +2190,7 @@ coproc_reap () } void -coproc_rclose (cp, fd) - struct coproc *cp; - int fd; +coproc_rclose (struct coproc *cp, int fd) { if (cp->c_rfd >= 0 && cp->c_rfd == fd) { @@ -2154,9 +2200,7 @@ coproc_rclose (cp, fd) } void -coproc_wclose (cp, fd) - struct coproc *cp; - int fd; +coproc_wclose (struct coproc *cp, int fd) { if (cp->c_wfd >= 0 && cp->c_wfd == fd) { @@ -2166,9 +2210,7 @@ coproc_wclose (cp, fd) } void -coproc_checkfd (cp, fd) - struct coproc *cp; - int fd; +coproc_checkfd (struct coproc *cp, int fd) { int update; @@ -2182,8 +2224,7 @@ coproc_checkfd (cp, fd) } void -coproc_fdchk (fd) - int fd; +coproc_fdchk (int fd) { #if MULTIPLE_COPROCS cpl_fdchk (fd); @@ -2193,9 +2234,7 @@ coproc_fdchk (fd) } void -coproc_fdclose (cp, fd) - struct coproc *cp; - int fd; +coproc_fdclose (struct coproc *cp, int fd) { coproc_rclose (cp, fd); coproc_wclose (cp, fd); @@ -2203,30 +2242,40 @@ coproc_fdclose (cp, fd) } void -coproc_fdsave (cp) - struct coproc *cp; +coproc_fdsave (struct coproc *cp) { cp->c_rsave = cp->c_rfd; cp->c_wsave = cp->c_wfd; } void -coproc_fdrestore (cp) - struct coproc *cp; +coproc_fdrestore (struct coproc *cp) { cp->c_rfd = cp->c_rsave; cp->c_wfd = cp->c_wsave; } +/* Translate an exit status encoded in WAIT into a coproc state */ +static inline int +coproc_getstate (WAIT status) +{ + if (WIFEXITED (status) || WIFSIGNALED (status)) + return COPROC_DEAD; + else if (WIFSTOPPED (status)) + return (COPROC_STOPPED|COPROC_RUNNING); + else if (WIFCONTINUED (status)) + return COPROC_RUNNING; + else + return COPROC_DEAD; /* defaults to terminated */ +} + static void -coproc_setstatus (cp, status) - struct coproc *cp; - int status; +coproc_setstatus (struct coproc *cp, WAIT status) { cp->c_lock = 4; - cp->c_status = status; - cp->c_flags |= COPROC_DEAD; - cp->c_flags &= ~COPROC_RUNNING; + cp->c_status = process_exit_status (status); + cp->c_flags &= ~(COPROC_DEAD|COPROC_STOPPED|COPROC_FOREGROUND|COPROC_RUNNING); + cp->c_flags |= coproc_getstate (status); /* Don't dispose the coproc or unset the COPROC_XXX variables because this is executed in a signal handler context. Wait until coproc_reap takes care of it. */ @@ -2234,9 +2283,7 @@ coproc_setstatus (cp, status) } void -coproc_pidchk (pid, status) - pid_t pid; - int status; +coproc_pidchk (pid_t pid, WAIT status) { struct coproc *cp; @@ -2255,7 +2302,7 @@ coproc_pidchk (pid, status) } pid_t -coproc_active () +coproc_active (void) { #if MULTIPLE_COPROCS return (cpl_firstactive ()); @@ -2263,9 +2310,9 @@ coproc_active () return ((sh_coproc.c_flags & COPROC_DEAD) ? NO_PID : sh_coproc.c_pid); #endif } + void -coproc_setvars (cp) - struct coproc *cp; +coproc_setvars (struct coproc *cp) { SHELL_VAR *v; char *namevar, *t; @@ -2350,10 +2397,9 @@ coproc_setvars (cp) } void -coproc_unsetvars (cp) - struct coproc *cp; +coproc_unsetvars (struct coproc *cp) { - int l; + size_t l; char *namevar; if (cp->c_name == 0) @@ -2378,21 +2424,26 @@ coproc_unsetvars (cp) } static int -execute_coproc (command, pipe_in, pipe_out, fds_to_close) - COMMAND *command; - int pipe_in, pipe_out; - struct fd_bitmap *fds_to_close; +execute_coproc (COMMAND *command, int pipe_in, int pipe_out, struct fd_bitmap *fds_to_close) { int rpipe[2], wpipe[2], estat, invert; pid_t coproc_pid; Coproc *cp; char *tcmd, *p, *name; sigset_t set, oset; +#if !MULTIPLE_COPROCS + int oldrfd, oldwfd; +#endif /* XXX -- can be removed after changes to handle multiple coprocs */ #if !MULTIPLE_COPROCS + oldrfd = oldwfd = -1; if (sh_coproc.c_pid != NO_PID && (sh_coproc.c_rfd >= 0 || sh_coproc.c_wfd >= 0)) - internal_warning (_("execute_coproc: coproc [%d:%s] still exists"), sh_coproc.c_pid, sh_coproc.c_name); + { + internal_warning (_("execute_coproc: coproc [%d:%s] still exists"), sh_coproc.c_pid, sh_coproc.c_name); + oldrfd = sh_coproc.c_rfd; + oldwfd = sh_coproc.c_wfd; + } coproc_init (&sh_coproc); #endif @@ -2401,7 +2452,7 @@ execute_coproc (command, pipe_in, pipe_out, fds_to_close) /* expand name without splitting - could make this dependent on a shopt option */ name = expand_string_unsplit_to_string (command->value.Coproc->name, 0); /* Optional check -- could be relaxed */ - if (legal_identifier (name) == 0) + if (valid_identifier (name) == 0) { internal_error (_("`%s': not a valid identifier"), name); free (name); @@ -2428,6 +2479,15 @@ execute_coproc (command, pipe_in, pipe_out, fds_to_close) close (rpipe[0]); close (wpipe[1]); +#if !MULTIPLE_COPROCS + /* Do this here instead of letting execute_in_subshell call + coproc_closeall since we've already overwritten sh_coproc */ + if (oldrfd != -1) + close (oldrfd); + if (oldwfd != -1) + close (oldwfd); +#endif + #if defined (JOB_CONTROL) FREE (p); #endif @@ -2463,7 +2523,8 @@ execute_coproc (command, pipe_in, pipe_out, fds_to_close) close_pipes (pipe_in, pipe_out); #if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD) - unlink_fifo_list (); + if (variable_context == 0) + unlink_fifo_list (); #endif stop_pipeline (1, (COMMAND *)NULL); DESCRIBE_PID (coproc_pid); @@ -2475,8 +2536,7 @@ execute_coproc (command, pipe_in, pipe_out, fds_to_close) /* If S == -1, it's a special value saying to close stdin */ static void -restore_stdin (s) - int s; +restore_stdin (int s) { if (s == -1) close (0); @@ -2487,19 +2547,27 @@ restore_stdin (s) } } -/* Catch-all cleanup function for lastpipe code for unwind-protects */ static void -lastpipe_cleanup (s) - int s; +uw_restore_stdin (void *s) +{ + restore_stdin ((intptr_t)s); +} + +static void +uw_merge_temporary_env (void *ignore) { - set_jobs_list_frozen (s); + merge_temporary_env (); +} + +/* Catch-all cleanup function for lastpipe code for unwind-protects */ +void +uw_lastpipe_cleanup (void *s) +{ + set_jobs_list_frozen ((intptr_t) s); } static int -execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close) - COMMAND *command; - int asynchronous, pipe_in, pipe_out; - struct fd_bitmap *fds_to_close; +execute_pipeline (COMMAND *command, int asynchronous, int pipe_in, int pipe_out, struct fd_bitmap *fds_to_close) { int prev, fildes[2], new_bitmap_size, dummyfd, ignore_return, exec_result; int lstdin, lastpipe_flag, lastpipe_jid, old_frozen, stdin_valid; @@ -2569,15 +2637,15 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close) unwind-protects are run, and the storage used for the bitmaps freed up. */ begin_unwind_frame ("pipe-file-descriptors"); - add_unwind_protect (dispose_fd_bitmap, fd_bitmap); - add_unwind_protect (close_fd_bitmap, fd_bitmap); + add_unwind_protect (uw_dispose_fd_bitmap, fd_bitmap); + add_unwind_protect (uw_close_fd_bitmap, fd_bitmap); if (prev >= 0) - add_unwind_protect (close, prev); + add_unwind_protect (uw_close, (void *) (intptr_t) prev); dummyfd = fildes[1]; - add_unwind_protect (close, dummyfd); + add_unwind_protect (uw_close, (void *) (intptr_t) dummyfd); #if defined (JOB_CONTROL) - add_unwind_protect (restore_signal_mask, &oset); + add_unwind_protect (uw_restore_signal_mask, &oset); #endif /* JOB_CONTROL */ if (ignore_return && cmd->value.Connection->first) @@ -2621,11 +2689,11 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close) { do_piping (prev, pipe_out); prev = NO_PIPE; - add_unwind_protect (restore_stdin, lstdin); + add_unwind_protect (uw_restore_stdin, (void *) (intptr_t) lstdin); lastpipe_flag = 1; old_frozen = freeze_jobs_list (); lastpipe_jid = stop_pipeline (0, (COMMAND *)NULL); /* XXX */ - add_unwind_protect (lastpipe_cleanup, old_frozen); + add_unwind_protect (uw_lastpipe_cleanup, (void *) (intptr_t) old_frozen); #if defined (JOB_CONTROL) UNBLOCK_CHILD (oset); /* XXX */ #endif @@ -2634,7 +2702,7 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close) cmd->flags |= CMD_LASTPIPE; } if (prev >= 0) - add_unwind_protect (close, prev); + add_unwind_protect (uw_close, (void *) (intptr_t) prev); exec_result = execute_command_internal (cmd, asynchronous, prev, pipe_out, fds_to_close); @@ -2689,10 +2757,7 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close) } static int -execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close) - COMMAND *command; - int asynchronous, pipe_in, pipe_out; - struct fd_bitmap *fds_to_close; +execute_connection (COMMAND *command, int asynchronous, int pipe_in, int pipe_out, struct fd_bitmap *fds_to_close) { COMMAND *tc, *second; int ignore_return, exec_result, was_error_trap, invert; @@ -2750,7 +2815,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close) if (command->value.Connection->second) command->value.Connection->second->flags |= CMD_IGNORE_RETURN; } - executing_list++; + interrupt_execution++; retain_fifos++; QUIT; #if 1 @@ -2766,7 +2831,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close) exec_result = execute_command_internal (command->value.Connection->second, asynchronous, pipe_in, pipe_out, fds_to_close); - executing_list--; + interrupt_execution--; retain_fifos--; break; case '|': @@ -2820,7 +2885,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close) and the connector is OR_OR, then execute the second command, otherwise return. */ - executing_list++; + interrupt_execution++; retain_fifos++; if (command->value.Connection->first) command->value.Connection->first->flags |= CMD_IGNORE_RETURN; @@ -2843,7 +2908,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close) exec_result = execute_command (second); } - executing_list--; + interrupt_execution--; retain_fifos--; break; default: @@ -2869,10 +2934,9 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close) /* Execute a FOR command. The syntax is: FOR word_desc IN word_list; DO command; DONE */ static int -execute_for_command (for_command) - FOR_COM *for_command; +execute_for_command (FOR_COM *for_command) { - register WORD_LIST *releaser, *list; + WORD_LIST *releaser, *list; SHELL_VAR *v; char *identifier; int retval, save_line_number; @@ -2881,8 +2945,11 @@ execute_for_command (for_command) #endif save_line_number = line_number; + line_number = for_command->line; /* for expansion error messages */ + if (check_identifier (for_command->name, 1) == 0) { + line_number = save_line_number; if (posixly_correct && interactive_shell == 0) { last_command_exit_value = EX_BADUSAGE; @@ -2891,21 +2958,21 @@ execute_for_command (for_command) return (EXECUTION_FAILURE); } - loop_level++; + loop_level++; interrupt_execution++; retain_fifos++; identifier = for_command->name->word; - line_number = for_command->line; /* for expansion error messages */ list = releaser = expand_words_no_vars (for_command->map_list); begin_unwind_frame ("for"); - add_unwind_protect (dispose_words, releaser); + add_unwind_protect (uw_dispose_words, releaser); + add_unwind_protect (uw_restore_lineno, (void *) (intptr_t) save_line_number); #if 0 if (lexical_scoping) { old_value = copy_variable (find_variable (identifier)); if (old_value) - add_unwind_protect (dispose_variable, old_value); + add_unwind_protect (uw_dispose_variable, old_value); } #endif @@ -2922,9 +2989,6 @@ execute_for_command (for_command) command_string_index = 0; print_for_command_head (for_command); - if (echo_command_at_execute) - xtrace_print_for_command_head (for_command); - /* Save this command unless it's a trap command and we're not running a debug trap. */ if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0) @@ -2941,6 +3005,9 @@ execute_for_command (for_command) continue; #endif + if (echo_command_at_execute) + xtrace_print_for_command_head (for_command); + this_command_name = (char *)NULL; /* XXX - special ksh93 for command index variable handling */ v = find_variable_last_nameref (identifier, 1); @@ -2971,7 +3038,7 @@ execute_for_command (for_command) { dispose_words (releaser); discard_unwind_frame ("for"); - loop_level--; + loop_level--; interrupt_execution--; retain_fifos--; return (EXECUTION_FAILURE); } } @@ -2999,7 +3066,7 @@ execute_for_command (for_command) } } - loop_level--; + loop_level--; interrupt_execution--; retain_fifos--; line_number = save_line_number; #if 0 @@ -3040,9 +3107,7 @@ execute_for_command (for_command) done */ static intmax_t -eval_arith_for_expr (l, okp) - WORD_LIST *l; - int *okp; +eval_arith_for_expr (WORD_LIST *l, int *okp) { WORD_LIST *new; intmax_t expresult; @@ -3058,9 +3123,6 @@ eval_arith_for_expr (l, okp) if (new) { - if (echo_command_at_execute) - xtrace_print_arith_cmd (new); - command_string_index = 0; print_arith_command (new); if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0) @@ -3070,23 +3132,25 @@ eval_arith_for_expr (l, okp) } r = run_debug_trap (); +#if defined (DEBUGGER) /* In debugging mode, if the DEBUG trap returns a non-zero status, we skip the command. */ - eflag = (shell_compatibility_level > 51) ? 0 : EXP_EXPANDED; - this_command_name = "(("; /* )) for expression error messages */ - -#if defined (DEBUGGER) - if (debugging_mode == 0 || r == EXECUTION_SUCCESS) - expresult = evalexp (new->word->word, eflag, okp); - else + if (debugging_mode && r != EXECUTION_SUCCESS) { expresult = 0; if (okp) *okp = 1; + return (expresult); } -#else - expresult = evalexp (new->word->word, eflag, okp); #endif + + if (echo_command_at_execute) + xtrace_print_arith_cmd (new); + + eflag = (shell_compatibility_level > 51) ? 0 : EXP_EXPANDED; + this_command_name = "(("; /* )) for expression error messages */ + + expresult = evalexp (new->word->word, eflag, okp); dispose_words (new); } else @@ -3099,14 +3163,13 @@ eval_arith_for_expr (l, okp) } static int -execute_arith_for_command (arith_for_command) - ARITH_FOR_COM *arith_for_command; +execute_arith_for_command (ARITH_FOR_COM *arith_for_command) { intmax_t expresult; int expok, body_status, arith_lineno, save_lineno; body_status = EXECUTION_SUCCESS; - loop_level++; + loop_level++; interrupt_execution++; save_lineno = line_number; if (arith_for_command->flags & CMD_IGNORE_RETURN) @@ -3128,13 +3191,8 @@ execute_arith_for_command (arith_for_command) /* Evaluate the initialization expression. */ expresult = eval_arith_for_expr (arith_for_command->init, &expok); - if (expok == 0) - { - line_number = save_lineno; - return (EXECUTION_FAILURE); - } - while (1) + while (expok) { /* Evaluate the test expression. */ line_number = arith_lineno; @@ -3142,10 +3200,8 @@ execute_arith_for_command (arith_for_command) line_number = save_lineno; if (expok == 0) - { - body_status = EXECUTION_FAILURE; - break; - } + break; + REAP (); if (expresult == 0) break; @@ -3173,18 +3229,12 @@ execute_arith_for_command (arith_for_command) line_number = arith_lineno; expresult = eval_arith_for_expr (arith_for_command->step, &expok); line_number = save_lineno; - - if (expok == 0) - { - body_status = EXECUTION_FAILURE; - break; - } } - loop_level--; + loop_level--; interrupt_execution--; line_number = save_lineno; - return (body_status); + return (expok ? body_status : EXECUTION_FAILURE); } #endif @@ -3204,8 +3254,7 @@ static int LINES, COLS, tabsize; : 6))))) static int -displen (s) - const char *s; +displen (const char *s) { #if defined (HANDLE_MULTIBYTE) wchar_t *wcstr; @@ -3227,12 +3276,10 @@ displen (s) } static int -print_index_and_element (len, ind, list) - int len, ind; - WORD_LIST *list; +print_index_and_element (int len, int ind, WORD_LIST *list) { - register WORD_LIST *l; - register int i; + WORD_LIST *l; + int i; if (list == 0) return (0); @@ -3245,8 +3292,7 @@ print_index_and_element (len, ind, list) } static void -indent (from, to) - int from, to; +indent (int from, int to) { while (from < to) { @@ -3264,9 +3310,7 @@ indent (from, to) } static void -print_select_list (list, list_len, max_elem_len, indices_len) - WORD_LIST *list; - int list_len, max_elem_len, indices_len; +print_select_list (WORD_LIST *list, int list_len, int max_elem_len, int indices_len) { int ind, row, elem_len, pos, cols, rows; int first_column_indices_len, other_indices_len; @@ -3317,11 +3361,7 @@ print_select_list (list, list_len, max_elem_len, indices_len) is read, return a null string. If a blank line is entered, or an invalid number is entered, the loop is executed again. */ static char * -select_query (list, list_len, prompt, print_menu) - WORD_LIST *list; - int list_len; - char *prompt; - int print_menu; +select_query (WORD_LIST *list, int list_len, char *prompt, int print_menu) { int max_elem_len, indices_len, len, r, oe; intmax_t reply; @@ -3374,7 +3414,7 @@ select_query (list, list_len, prompt, print_menu) print_menu = 1; continue; } - if (legal_number (repl_string, &reply) == 0) + if (valid_number (repl_string, &reply) == 0) return ""; if (reply < 1 || reply > list_len) return ""; @@ -3390,8 +3430,7 @@ select_query (list, list_len, prompt, print_menu) Only `break' or `return' in command_list will terminate the command. */ static int -execute_select_command (select_command) - SELECT_COM *select_command; +execute_select_command (SELECT_COM *select_command) { WORD_LIST *releaser, *list; SHELL_VAR *v; @@ -3399,7 +3438,14 @@ execute_select_command (select_command) int retval, list_len, show_menu, save_line_number; if (check_identifier (select_command->name, 1) == 0) - return (EXECUTION_FAILURE); + { + if (posixly_correct && interactive_shell == 0) + { + last_command_exit_value = EX_BADUSAGE; + jump_to_top_level (ERREXIT); + } + return (EXECUTION_FAILURE); + } save_line_number = line_number; line_number = select_command->line; @@ -3407,9 +3453,6 @@ execute_select_command (select_command) command_string_index = 0; print_select_command_head (select_command); - if (echo_command_at_execute) - xtrace_print_select_command_head (select_command); - #if 0 if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0))) #else @@ -3428,15 +3471,18 @@ execute_select_command (select_command) return (EXECUTION_SUCCESS); #endif + if (echo_command_at_execute) + xtrace_print_select_command_head (select_command); + this_command_name = (char *)0; - loop_level++; + loop_level++; interrupt_execution++; identifier = select_command->name->word; /* command and arithmetic substitution, parameter and variable expansion, word splitting, pathname expansion, and quote removal. */ list = releaser = expand_words_no_vars (select_command->map_list); - list_len = list_length (list); + list_len = list_length ((GENERIC_LIST *)list); if (list == 0 || list_len == 0) { if (list) @@ -3446,7 +3492,8 @@ execute_select_command (select_command) } begin_unwind_frame ("select"); - add_unwind_protect (dispose_words, releaser); + add_unwind_protect (uw_dispose_words, releaser); + add_unwind_protect (uw_restore_lineno, (void *) (intptr_t) save_line_number); if (select_command->flags & CMD_IGNORE_RETURN) select_command->action->flags |= CMD_IGNORE_RETURN; @@ -3484,7 +3531,7 @@ execute_select_command (select_command) { dispose_words (releaser); discard_unwind_frame ("select"); - loop_level--; + loop_level--; interrupt_execution--; line_number = save_line_number; return (EXECUTION_FAILURE); } @@ -3518,7 +3565,7 @@ execute_select_command (select_command) #endif } - loop_level--; + loop_level--; interrupt_execution--; line_number = save_line_number; dispose_words (releaser); @@ -3532,10 +3579,9 @@ execute_select_command (select_command) some patterns to compare word_desc against, and an associated command to execute. */ static int -execute_case_command (case_command) - CASE_COM *case_command; +execute_case_command (CASE_COM *case_command) { - register WORD_LIST *list; + WORD_LIST *list; WORD_LIST *wlist, *es; PATTERN_LIST *clauses; char *word, *pattern; @@ -3547,9 +3593,6 @@ execute_case_command (case_command) command_string_index = 0; print_case_command_head (case_command); - if (echo_command_at_execute) - xtrace_print_case_command_head (case_command); - #if 0 if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0))) #else @@ -3571,6 +3614,9 @@ execute_case_command (case_command) } #endif + if (echo_command_at_execute) + xtrace_print_case_command_head (case_command); + /* Use the same expansions (the ones POSIX specifies) as the patterns; dequote the resulting string (as POSIX specifies) since the quotes in patterns are handled specially below. We have to do it in this order @@ -3592,6 +3638,7 @@ execute_case_command (case_command) begin_unwind_frame ("case"); add_unwind_protect (xfree, word); + add_unwind_protect (uw_restore_lineno, (void *) (intptr_t) save_line_number); #define EXIT_CASE() goto exit_case_command @@ -3628,6 +3675,9 @@ execute_case_command (case_command) free (pattern); dispose_words (es); + + /* sm_loop.c:GMATCH returns failure on interrupt_state or + terminating_signal, so we check for those here. */ QUIT; if (match) @@ -3663,16 +3713,14 @@ exit_case_command: Repeatedly execute action while executing test produces EXECUTION_SUCCESS. */ static int -execute_while_command (while_command) - WHILE_COM *while_command; +execute_while_command (WHILE_COM *while_command) { return (execute_while_or_until (while_command, CMD_WHILE)); } /* UNTIL is just like WHILE except that the test result is negated. */ static int -execute_until_command (while_command) - WHILE_COM *while_command; +execute_until_command (WHILE_COM *while_command) { return (execute_while_or_until (while_command, CMD_UNTIL)); } @@ -3683,14 +3731,12 @@ execute_until_command (while_command) be EXECUTION_SUCCESS if no commands in the body are executed, and the status of the last command executed in the body otherwise. */ static int -execute_while_or_until (while_command, type) - WHILE_COM *while_command; - int type; +execute_while_or_until (WHILE_COM *while_command, int type) { int return_value, body_status; body_status = EXECUTION_SUCCESS; - loop_level++; + loop_level++; interrupt_execution++; while_command->test->flags |= CMD_IGNORE_RETURN; if (while_command->flags & CMD_IGNORE_RETURN) @@ -3699,7 +3745,6 @@ execute_while_or_until (while_command, type) while (1) { return_value = execute_command (while_command->test); - REAP (); /* Need to handle `break' in the test when we would break out of the loop. The job control code will set `breaking' to loop_level @@ -3728,6 +3773,8 @@ execute_while_or_until (while_command, type) body_status = execute_command (while_command->action); QUIT; + REAP (); + if (breaking) { breaking--; @@ -3741,7 +3788,7 @@ execute_while_or_until (while_command, type) break; } } - loop_level--; + loop_level--; interrupt_execution--; return (body_status); } @@ -3750,8 +3797,7 @@ execute_while_or_until (while_command, type) IF also allows ELIF in the place of ELSE IF, but the parser makes *that* stupidity transparent. */ static int -execute_if_command (if_command) - IF_COM *if_command; +execute_if_command (IF_COM *if_command) { int return_value, save_line_number; @@ -3782,8 +3828,7 @@ execute_if_command (if_command) #if defined (DPAREN_ARITHMETIC) static int -execute_arith_command (arith_command) - ARITH_COM *arith_command; +execute_arith_command (ARITH_COM *arith_command) { int expok, save_line_number, retval, eflag; intmax_t expresult; @@ -3871,8 +3916,7 @@ static char * const nullstr = ""; /* XXX - can COND ever be NULL when this is called? */ static int -execute_cond_node (cond) - COND_COM *cond; +execute_cond_node (COND_COM *cond) { int result, invert, patmatch, rmatch, arith, mode, mflags, ignore; char *arg1, *arg2, *op; @@ -3927,10 +3971,10 @@ execute_cond_node (cond) if (varop) oa = set_expand_once (0, 0); /* no-op for compatibility levels <= 51 */ #endif - result = unary_test (cond->op->word, arg1, varflag) ? EXECUTION_SUCCESS : EXECUTION_FAILURE; + result = cond_test (cond->op->word, arg1, NULL, varflag); #if defined (ARRAY_VARS) if (varop) - assoc_expand_once = oa; + array_expand_once = oa; #endif if (arg1 != nullstr) free (arg1); @@ -3977,6 +4021,8 @@ execute_cond_node (cond) #if defined (COND_REGEXP) if (rmatch) { + char *errstr; + mflags = SHMAT_PWARN; #if defined (ARRAY_VARS) mflags |= SHMAT_SUBEXP; @@ -3990,15 +4036,22 @@ execute_cond_node (cond) free(t2); #endif - result = sh_regmatch (arg1, arg2, mflags); + errstr = NULL; + result = sh_regmatch (arg1, arg2, mflags, &errstr); + if (result == 2) + { + if (errstr && *errstr) + builtin_error (_("invalid regular expression `%s': %s"), arg2, errstr); + else + builtin_error (_("invalid regular expression `%s'"), arg2); + free (errstr); + } } else #endif /* COND_REGEXP */ { extended_glob = 1; - result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP|TEST_LOCALE) - ? EXECUTION_SUCCESS - : EXECUTION_FAILURE; + result = cond_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP|TEST_LOCALE); extended_glob = extglob_flag; } if (arg1 != nullstr) @@ -4020,8 +4073,7 @@ execute_cond_node (cond) } static int -execute_cond_command (cond_command) - COND_COM *cond_command; +execute_cond_command (COND_COM *cond_command) { int retval, save_line_number; @@ -4070,9 +4122,19 @@ execute_cond_command (cond_command) } #endif /* COND_COMMAND */ -static void -bind_lastarg (arg) - char *arg; +char * +save_lastarg (void) +{ + char *v; + + v = get_string_value ("_"); + if (v) + v = savestring (v); + return v; +} + +void +bind_lastarg (char *arg) { SHELL_VAR *var; @@ -4087,9 +4149,7 @@ bind_lastarg (arg) to be run asynchronously. This handles all the side effects that are supposed to take place. */ static int -execute_null_command (redirects, pipe_in, pipe_out, async) - REDIRECT *redirects; - int pipe_in, pipe_out, async; +execute_null_command (REDIRECT *redirects, int pipe_in, int pipe_out, int async) { int r; int forcefork, fork_flags; @@ -4157,7 +4217,7 @@ execute_null_command (redirects, pipe_in, pipe_out, async) if (r != 0) return (EXECUTION_FAILURE); else if (last_command_subst_pid != NO_PID) - return (last_command_exit_value); + return (last_command_subst_status); else return (EXECUTION_SUCCESS); } @@ -4166,8 +4226,7 @@ execute_null_command (redirects, pipe_in, pipe_out, async) /* This is a hack to suppress word splitting for assignment statements given as arguments to builtins with the ASSIGNMENT_BUILTIN flag set. */ static void -fix_assignment_words (words) - WORD_LIST *words; +fix_assignment_words (WORD_LIST *words) { WORD_LIST *w, *wcmd; struct builtin *b; @@ -4250,11 +4309,10 @@ fix_assignment_words (words) #if defined (ARRAY_VARS) /* Set W_ARRAYREF on words that are valid array references to a builtin that - accepts them. This is intended to completely replace assoc_expand_once in + accepts them. This is intended to completely replace array_expand_once in time. */ static void -fix_arrayref_words (words) - WORD_LIST *words; +fix_arrayref_words (WORD_LIST *words) { WORD_LIST *w, *wcmd; struct builtin *b; @@ -4303,9 +4361,7 @@ fix_arrayref_words (words) any other options are supplied, or there is not a command_name, we punt and return a zero value in *TYPEP without updating WORDS. */ static WORD_LIST * -check_command_builtin (words, typep) - WORD_LIST *words; - int *typep; +check_command_builtin (WORD_LIST *words, int *typep) { int type; WORD_LIST *w; @@ -4339,8 +4395,7 @@ check_command_builtin (words, typep) /* Return 1 if the file found by searching $PATH for PATHNAME, defaulting to PATHNAME, is a directory. Used by the autocd code below. */ static int -is_dirname (pathname) - char *pathname; +is_dirname (char *pathname) { char *temp; int ret; @@ -4355,10 +4410,7 @@ is_dirname (pathname) real execution of commands here. Fork a process, set things up, execute the command. */ static int -execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close) - SIMPLE_COM *simple_command; - int pipe_in, pipe_out, async; - struct fd_bitmap *fds_to_close; +execute_simple_command (SIMPLE_COM *simple_command, int pipe_in, int pipe_out, int async, struct fd_bitmap *fds_to_close) { WORD_LIST *words, *lastword; char *command_line, *lastarg, *temp; @@ -4386,6 +4438,8 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close) /* Remember what this command line looks like at invocation. */ command_string_index = 0; + if (the_printed_command) + the_printed_command[0] = '\0'; print_simple_command (simple_command); #if 0 @@ -4434,7 +4488,7 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close) if (dofork) { - char *p; + char *p, *xc; /* Do this now, because execute_disk_command will do it anyway in the vast majority of cases. */ @@ -4443,7 +4497,8 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close) /* Don't let a DEBUG trap overwrite the command string to be saved with the process/job associated with this child. */ fork_flags = async ? FORK_ASYNC : 0; - if (make_child (p = savestring (the_printed_command_except_trap), fork_flags) == 0) + xc = the_printed_command_except_trap; + if (make_child (p = xc ? savestring (xc) : savestring (""), fork_flags) == 0) { already_forked = 1; cmdflags |= CMD_NO_FORK; @@ -4471,6 +4526,10 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close) coproc_closeall (); #endif +#if defined (PROCESS_SUBSTITUTION) + clear_fifo_list (); /* subshells don't inherit fifos */ +#endif + last_asynchronous_pid = old_last_async_pid; if (async) @@ -4561,7 +4620,7 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close) builtin_is_special = 1; } if (builtin == 0) - func = find_function (words->word->word); + func = (posixly_correct == 0 || absolute_program (words->word->word) == 0) ? find_function (words->word->word) : 0; } /* What happens in posix mode when an assignment preceding a command name @@ -4625,7 +4684,7 @@ itrace("execute_simple_command: posix mode tempenv assignment error"); builtin = 0; } - add_unwind_protect (dispose_words, words); + add_unwind_protect (uw_dispose_words, words); QUIT; /* Bind the last word in this command to "$_" after execution. */ @@ -4679,6 +4738,10 @@ itrace("execute_simple_command: posix mode tempenv assignment error"); } #endif /* JOB_CONTROL */ + /* unwind-protect this since we will call dispose_words on words if we run + the unwind-protects. */ + unwind_protect_string (this_command_name); + run_builtin: /* Remember the name of this command globally. */ this_command_name = words->word->word; @@ -4710,7 +4773,7 @@ run_builtin: } if (already_forked) { - /* reset_terminating_signals (); */ /* XXX */ + reset_terminating_signals (); /* XXX */ /* Reset the signal handlers in the child, but don't free the trap strings. Set a flag noting that we have to free the trap strings if we run trap to change a signal disposition. */ @@ -4727,7 +4790,7 @@ run_builtin: setup_async_signals (); } - if (async == 0) + if (async == 0) /* XXX why async == 0? */ subshell_level++; execute_subshell_builtin_or_function (words, simple_command->redirects, builtin, func, @@ -4808,13 +4871,38 @@ execute_from_filesystem: /* The old code did not test already_forked and only did this if subshell_environment&SUBSHELL_COMSUB != 0 (comsubs and procsubs). Other uses of the no-fork optimization left FIFOs in $TMPDIR */ - if (already_forked == 0 && (cmdflags & CMD_NO_FORK) && fifos_pending() > 0) + if (already_forked == 0 && (cmdflags & CMD_NO_FORK) && fifos_pending () > 0) + cmdflags &= ~CMD_NO_FORK; + + if (dofork && already_forked && (subshell_environment & SUBSHELL_PIPE) && + (cmdflags & CMD_NO_FORK) && fifos_pending () > 0) +#if 0 cmdflags &= ~CMD_NO_FORK; +#else + ; /* can't turn off nofork here, too many processes have the FIFOs open */ +#endif #endif result = execute_disk_command (words, simple_command->redirects, command_line, pipe_in, pipe_out, async, fds_to_close, cmdflags); +#if 0 +/* If we forked but still have to fork again to run the disk command, we + did so because we created FIFOs. We can't just execve the command in case + it dies of a signal without a chance to clean up the FIFOs, so we fork + again, then make sure we wait for the child from execute_disk_command(), + unlink the FIFOs we created, and exit ourselves. */ +if (dofork && already_forked && (cmdflags & CMD_NO_FORK) == 0) + { + result = wait_for (last_made_pid, 0); +#if defined (PROCESS_SUBSTITUTION) + if (fifos_pending ()) + unlink_fifo_list (); +#endif + sh_exit (result & 0xFF); + } +#endif + return_result: bind_lastarg (lastarg); FREE (command_line); @@ -4832,8 +4920,7 @@ execute_from_filesystem: /* Translate the special builtin exit statuses. We don't really need a function for this; it's a placeholder for future work. */ static int -builtin_status (result) - int result; +builtin_status (int result) { int r; @@ -4846,6 +4933,7 @@ builtin_status (result) case EX_REDIRFAIL: case EX_BADASSIGN: case EX_EXPFAIL: + case EX_UTILERROR: r = EXECUTION_FAILURE; break; default: @@ -4857,10 +4945,7 @@ builtin_status (result) } static int -execute_builtin (builtin, words, flags, subshell) - sh_builtin_func_t *builtin; - WORD_LIST *words; - int flags, subshell; +execute_builtin (sh_builtin_func_t *builtin, WORD_LIST *words, int flags, int subshell) { int result, eval_unwind, ignexit_flag; int isbltinenv, should_keep; @@ -4887,7 +4972,7 @@ execute_builtin (builtin, words, flags, subshell) { error_trap = savestring (error_trap); add_unwind_protect (xfree, error_trap); - add_unwind_protect (set_error_trap, error_trap); + add_unwind_protect (uw_set_error_trap, error_trap); restore_default_signal (ERROR_TRAP); } exit_immediately_on_error = 0; @@ -4927,7 +5012,7 @@ execute_builtin (builtin, words, flags, subshell) if (flags & CMD_COMMAND_BUILTIN) should_keep = 0; if (subshell == 0) - add_unwind_protect (pop_scope, should_keep ? "1" : 0); + add_unwind_protect (pop_scope, (void *) (intptr_t) should_keep); temporary_env = (HASH_TABLE *)NULL; } } @@ -4937,8 +5022,9 @@ execute_builtin (builtin, words, flags, subshell) if (evalnest_max > 0 && evalnest >= evalnest_max) { internal_error (_("eval: maximum eval nesting level exceeded (%d)"), evalnest); + run_unwind_protects (); /* XXX */ evalnest = 0; - jump_to_top_level (DISCARD); + jump_to_top_level (DISCARD); /* XXX - cleanup? */ } unwind_protect_int (evalnest); /* The test for subshell == 0 above doesn't make a difference */ @@ -4949,8 +5035,9 @@ execute_builtin (builtin, words, flags, subshell) if (sourcenest_max > 0 && sourcenest >= sourcenest_max) { internal_error (_("%s: maximum source nesting level exceeded (%d)"), this_command_name, sourcenest); + run_unwind_protects (); /* XXX */ sourcenest = 0; - jump_to_top_level (DISCARD); + jump_to_top_level (DISCARD); /* XXX - cleanup? */ } unwind_protect_int (sourcenest); /* The test for subshell == 0 above doesn't make a difference */ @@ -4966,7 +5053,7 @@ execute_builtin (builtin, words, flags, subshell) if (posixly_correct && subshell == 0 && builtin == return_builtin && (flags & CMD_COMMAND_BUILTIN) == 0 && temporary_env) { begin_unwind_frame ("return_temp_env"); - add_unwind_protect (merge_temporary_env, (char *)NULL); + add_unwind_protect (uw_merge_temporary_env, NULL); } executing_builtin++; @@ -4996,10 +5083,12 @@ execute_builtin (builtin, words, flags, subshell) return (result); } -static void -maybe_restore_getopt_state (gs) - sh_getopt_state_t *gs; +void +uw_maybe_restore_getopt_state (void *arg) { + sh_getopt_state_t *gs; + + gs = arg; /* If we have a local copy of OPTIND and it's at the right (current) context, then we restore getopt's internal state. If not, we just let it go. We know there is a local OPTIND if gs->gs_flags & 1. @@ -5012,8 +5101,7 @@ maybe_restore_getopt_state (gs) #if defined (ARRAY_VARS) void -restore_funcarray_state (fa) - struct func_array_state *fa; +restore_funcarray_state (struct func_array_state *fa) { SHELL_VAR *nfv; ARRAY *funcname_a; @@ -5027,15 +5115,34 @@ restore_funcarray_state (fa) free (fa); } + +void +uw_restore_funcarray_state (void *fa) +{ + restore_funcarray_state (fa); +} +#endif + +static void +function_misc_cleanup (void) +{ + if (variable_context == 0 || this_shell_function == 0) + { + make_funcname_visible (0); +#if defined (PROCESS_SUBSTITUTION) + unlink_fifo_list (); #endif + } +} + +static void +uw_function_misc_cleanup (void *ignore) +{ + function_misc_cleanup (); +} static int -execute_function (var, words, flags, fds_to_close, async, subshell) - SHELL_VAR *var; - WORD_LIST *words; - int flags; - struct fd_bitmap *fds_to_close; - int async, subshell; +execute_function (SHELL_VAR *var, WORD_LIST *words, int flags, struct fd_bitmap *fds_to_close, int async, int subshell) { int return_val, result, lineno; COMMAND *tc, *fc, *save_current; @@ -5057,6 +5164,7 @@ execute_function (var, words, flags, fds_to_close, async, subshell) if (funcnest_max > 0 && funcnest >= funcnest_max) { internal_error (_("%s: maximum function nesting level exceeded (%d)"), var->name, funcnest); + run_unwind_protects (); /* XXX */ funcnest = 0; /* XXX - should we reset it somewhere else? */ jump_to_top_level (DISCARD); } @@ -5090,14 +5198,16 @@ execute_function (var, words, flags, fds_to_close, async, subshell) /* This has to be before the pop_context(), because the unwinding of local variables may cause the restore of a local declaration of OPTIND to force a getopts state reset. */ - add_unwind_protect (maybe_restore_getopt_state, gs); - add_unwind_protect (pop_context, (char *)NULL); + add_unwind_protect (uw_maybe_restore_getopt_state, gs); + /* This also, because pop_context has to decrement variable_context */ + add_unwind_protect (uw_function_misc_cleanup, NULL); + add_unwind_protect (pop_context, NULL); unwind_protect_int (line_number); unwind_protect_int (line_number_for_err_trap); unwind_protect_int (function_line_number); unwind_protect_int (return_catch_flag); unwind_protect_jmp_buf (return_catch); - add_unwind_protect (dispose_command, (char *)tc); + add_unwind_protect (uw_dispose_command, (char *)tc); unwind_protect_pointer (this_shell_function); unwind_protect_int (funcnest); unwind_protect_int (loop_level); @@ -5127,7 +5237,7 @@ execute_function (var, words, flags, fds_to_close, async, subshell) { debug_trap = savestring (debug_trap); add_unwind_protect (xfree, debug_trap); - add_unwind_protect (maybe_set_debug_trap, debug_trap); + add_unwind_protect (uw_maybe_set_debug_trap, debug_trap); } restore_default_signal (DEBUG_TRAP); } @@ -5139,7 +5249,7 @@ execute_function (var, words, flags, fds_to_close, async, subshell) { error_trap = savestring (error_trap); add_unwind_protect (xfree, error_trap); - add_unwind_protect (maybe_set_error_trap, error_trap); + add_unwind_protect (uw_maybe_set_error_trap, error_trap); } restore_default_signal (ERROR_TRAP); } @@ -5152,7 +5262,7 @@ execute_function (var, words, flags, fds_to_close, async, subshell) { return_trap = savestring (return_trap); add_unwind_protect (xfree, return_trap); - add_unwind_protect (maybe_set_return_trap, return_trap); + add_unwind_protect (uw_maybe_set_return_trap, return_trap); } restore_default_signal (RETURN_TRAP); } @@ -5180,7 +5290,7 @@ execute_function (var, words, flags, fds_to_close, async, subshell) fa->funcname_a = (ARRAY *)funcname_a; fa->funcname_v = funcname_v; if (subshell == 0) - add_unwind_protect (restore_funcarray_state, fa); + add_unwind_protect (uw_restore_funcarray_state, fa); #endif /* The temporary environment for a function is supposed to apply to @@ -5198,7 +5308,7 @@ execute_function (var, words, flags, fds_to_close, async, subshell) { push_args (words->next); if (subshell == 0) - add_unwind_protect (pop_args, 0); + add_unwind_protect (uw_pop_args, 0); } /* Number of the line on which the function body starts. */ @@ -5212,6 +5322,10 @@ execute_function (var, words, flags, fds_to_close, async, subshell) if (shell_compatibility_level > 43) loop_level = 0; + /* unwind-protect this because execute_command_internal will overwrite it + with something we will free if unwind-protects are run */ + if (subshell == 0) + unwind_protect_pointer (currently_executing_command); fc = tc; from_return_trap = 0; @@ -5250,6 +5364,7 @@ execute_function (var, words, flags, fds_to_close, async, subshell) currently_executing_command = save_current; } #else + currently_executing_command = save_current; result = execute_command_internal (fc, 0, NO_PIPE, NO_PIPE, fds_to_close); save_current = currently_executing_command; @@ -5276,30 +5391,21 @@ execute_function (var, words, flags, fds_to_close, async, subshell) } #endif - if (variable_context == 0 || this_shell_function == 0) - { - make_funcname_visible (0); -#if defined (PROCESS_SUBSTITUTION) - unlink_fifo_list (); -#endif - } - + function_misc_cleanup (); return (result); } /* A convenience routine for use by other parts of the shell to execute a particular shell function. */ int -execute_shell_function (var, words) - SHELL_VAR *var; - WORD_LIST *words; +execute_shell_function (SHELL_VAR *var, WORD_LIST *words) { int ret; struct fd_bitmap *bitmap; bitmap = new_fd_bitmap (FD_BITMAP_DEFAULT_SIZE); begin_unwind_frame ("execute-shell-function"); - add_unwind_protect (dispose_fd_bitmap, (char *)bitmap); + add_unwind_protect (uw_dispose_fd_bitmap, (char *)bitmap); ret = execute_function (var, words, 0, bitmap, 0, 0); @@ -5316,16 +5422,10 @@ execute_shell_function (var, words) to the command, REDIRECTS specifies redirections to perform before the command is executed. */ static void -execute_subshell_builtin_or_function (words, redirects, builtin, var, - pipe_in, pipe_out, async, fds_to_close, - flags) - WORD_LIST *words; - REDIRECT *redirects; - sh_builtin_func_t *builtin; - SHELL_VAR *var; - int pipe_in, pipe_out, async; - struct fd_bitmap *fds_to_close; - int flags; +execute_subshell_builtin_or_function (WORD_LIST *words, REDIRECT *redirects, + sh_builtin_func_t *builtin, SHELL_VAR *var, + int pipe_in, int pipe_out, int async, + struct fd_bitmap *fds_to_close, int flags) { int result, r, funcvalue; #if defined (JOB_CONTROL) @@ -5365,7 +5465,18 @@ execute_subshell_builtin_or_function (words, redirects, builtin, var, without_job_control (); #endif /* JOB_CONTROL */ - set_sigint_handler (); + /* We don't call set_sigint_handler if async is 1 so we don't undo the work + done by setup_async_signals() in the caller. This is similar to what + execute_in_subshell() does. */ + if (async == 0) + { + SigHandler *handler; + + handler = set_sigint_handler (); + if (handler == SIG_IGN && signal_is_async_ignored (SIGINT) && + signal_is_trapped (SIGINT) == 0 && signal_is_hard_ignored (SIGINT) == 0) + set_signal_handler (SIGINT, SIG_IGN); + } if (fds_to_close) close_fd_bitmap (fds_to_close); @@ -5428,14 +5539,10 @@ execute_subshell_builtin_or_function (words, redirects, builtin, var, If BUILTIN is exec_builtin, the redirections specified in REDIRECTS are not undone before this function returns. */ static int -execute_builtin_or_function (words, builtin, var, redirects, - fds_to_close, flags) - WORD_LIST *words; - sh_builtin_func_t *builtin; - SHELL_VAR *var; - REDIRECT *redirects; - struct fd_bitmap *fds_to_close; - int flags; +execute_builtin_or_function (WORD_LIST *words, + sh_builtin_func_t *builtin, SHELL_VAR *var, + REDIRECT *redirects, struct fd_bitmap *fds_to_close, + int flags) { int result; REDIRECT *saved_undo_list; @@ -5479,7 +5586,7 @@ execute_builtin_or_function (words, builtin, var, redirects, if (saved_undo_list) { begin_unwind_frame ("saved-redirects"); - add_unwind_protect (cleanup_redirects, (char *)saved_undo_list); + add_unwind_protect (uw_cleanup_redirects, (char *)saved_undo_list); } redirection_undo_list = (REDIRECT *)NULL; @@ -5539,25 +5646,32 @@ execute_builtin_or_function (words, builtin, var, redirects, } void -setup_async_signals () +setup_async_signals (void) { #if defined (__BEOS__) set_signal_handler (SIGHUP, SIG_IGN); /* they want csh-like behavior */ #endif -#if defined (JOB_CONTROL) if (job_control == 0) -#endif { /* Make sure we get the original signal dispositions now so we don't confuse the trap builtin later if the subshell tries to use it to - reset SIGINT/SIGQUIT. Don't call set_signal_ignored; that sets - the value of original_signals to SIG_IGN. Posix interpretation 751. */ + reset SIGINT/SIGQUIT. Don't call set_signal_ignored; we use + set_signal_async_ignored to set the value of original_signals to + SIG_IGN and set additional flags to satisfy Posix interpretation 751. */ get_original_signal (SIGINT); set_signal_handler (SIGINT, SIG_IGN); + /* We use set_signal_async_ignored here to make sure that restore_signal + doesn't undo this work. We want processes that are created by this + asynchronous subshell to ignore SIGINT as well. We can't set the + hard ignored flag because that would prevent the trap builtin from + setting a trap. We also have to special-case set_signal so we can + set a trap for one of these signals. */ + set_signal_async_ignored (SIGINT); get_original_signal (SIGQUIT); set_signal_handler (SIGQUIT, SIG_IGN); + set_signal_async_ignored (SIGQUIT); } } @@ -5586,14 +5700,9 @@ setup_async_signals () #endif static int -execute_disk_command (words, redirects, command_line, pipe_in, pipe_out, - async, fds_to_close, cmdflags) - WORD_LIST *words; - REDIRECT *redirects; - char *command_line; - int pipe_in, pipe_out, async; - struct fd_bitmap *fds_to_close; - int cmdflags; +execute_disk_command (WORD_LIST *words, REDIRECT *redirects, char *command_line, + int pipe_in, int pipe_out, int async, + struct fd_bitmap *fds_to_close, int cmdflags) { char *pathname, *command, **args, *p; int nofork, stdpath, result, fork_flags; @@ -5758,8 +5867,8 @@ parent_return: /* Make sure that the pipes are closed in the parent. */ close_pipes (pipe_in, pipe_out); -#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD) #if 0 +#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD) if (variable_context == 0) unlink_fifo_list (); #endif @@ -5787,11 +5896,9 @@ parent_return: #endif /* MSDOS */ static char * -getinterp (sample, sample_len, endp) - char *sample; - int sample_len, *endp; +getinterp (char *sample, int sample_len, int *endp) { - register int i; + int i; char *execname; int start; @@ -5821,11 +5928,8 @@ getinterp (sample, sample_len, endp) A single argument to the interpreter is allowed. */ static int -execute_shell_script (sample, sample_len, command, args, env) - char *sample; - int sample_len; - char *command; - char **args, **env; +execute_shell_script (char *sample, int sample_len, + char *command, char **args, char **env) { char *execname, *firstarg; int i, start, size_increment, larry; @@ -5835,7 +5939,7 @@ execute_shell_script (sample, sample_len, command, args, env) size_increment = 1; /* Now the argument, if any. */ - for (firstarg = (char *)NULL, start = i; WHITECHAR(i); i++) + for (firstarg = NULL, start = i; WHITECHAR(i); i++) ; /* If there is more text on the line, then it is an argument for the @@ -5874,7 +5978,7 @@ execute_shell_script (sample, sample_len, command, args, env) #endif /* !HAVE_HASH_BANG_EXEC */ static void -initialize_subshell () +initialize_subshell (void) { #if defined (ALIAS) /* Forget about any aliases that we knew of. We are in a subshell. */ @@ -5915,7 +6019,8 @@ initialize_subshell () /* We're no longer inside a shell function. */ variable_context = return_catch_flag = funcnest = evalnest = sourcenest = 0; - executing_list = 0; /* XXX */ + interrupt_execution = retain_fifos = 0; /* XXX */ + executing_funsub = 0; /* XXX */ /* If we're not interactive, close the file descriptor from which we're reading the current shell script. */ @@ -5948,13 +6053,11 @@ initialize_subshell () /* Call execve (), handling interpreting shell scripts, and handling exec failures. */ int -shell_execve (command, args, env) - char *command; - char **args, **env; +shell_execve (char *command, char **args, char **env) { - int larray, i, fd; + int i, fd, sample_len; char sample[HASH_BANG_BUFSIZ]; - int sample_len; + size_t larray; SETOSTYPE (0); /* Some systems use for USG/POSIX semantics */ execve (command, args, env); @@ -5985,11 +6088,6 @@ shell_execve (command, args, env) errno = i; file_error (command); } - else if (i == ENOENT) - { - errno = i; - internal_error (_("%s: cannot execute: required file not found"), command); - } else { /* The file has the execute bits set, but the kernel refuses to @@ -6001,25 +6099,34 @@ shell_execve (command, args, env) if (sample_len > 2 && sample[0] == '#' && sample[1] == '!') { char *interp; - int ilen; + size_t ilen; interp = getinterp (sample, sample_len, (int *)NULL); ilen = strlen (interp); errno = i; - if (interp[ilen - 1] == '\r') + if (interp > 0 && interp[ilen - 1] == '\r') { interp = xrealloc (interp, ilen + 2); interp[ilen - 1] = '^'; interp[ilen] = 'M'; interp[ilen + 1] = '\0'; } - sys_error (_("%s: %s: bad interpreter"), command, interp ? interp : ""); + sys_error (_("%s: %s: bad interpreter"), command, interp); FREE (interp); return (EX_NOEXEC); } + else #endif - errno = i; - file_error (command); + if (i == ENOENT) + { + errno = i; + internal_error (_("%s: cannot execute: required file not found"), command); + } + else + { + errno = i; + file_error (command); + } } return (last_command_exit_value); } @@ -6109,19 +6216,17 @@ shell_execve (command, args, env) } static int -execute_intern_function (name, funcdef) - WORD_DESC *name; - FUNCTION_DEF *funcdef; +execute_intern_function (WORD_DESC *name, FUNCTION_DEF *funcdef) { SHELL_VAR *var; char *t; - if (check_identifier (name, posixly_correct) == 0) + if (valid_function_word (name, posixly_correct) == 0) { - if (posixly_correct && interactive_shell == 0) + if (posixly_correct) { last_command_exit_value = EX_BADUSAGE; - jump_to_top_level (ERREXIT); + jump_to_top_level (interactive_shell ? DISCARD : ERREXIT); } return (EXECUTION_FAILURE); } @@ -6133,14 +6238,6 @@ execute_intern_function (name, funcdef) name->word = t; } - /* Posix interpretation 383 */ - if (posixly_correct && find_special_builtin (name->word)) - { - internal_error (_("`%s': is a special builtin"), name->word); - last_command_exit_value = EX_BADUSAGE; - jump_to_top_level (interactive_shell ? DISCARD : ERREXIT); - } - var = find_function (name->word); if (var && (readonly_p (var) || noassign_p (var))) { @@ -6160,9 +6257,9 @@ execute_intern_function (name, funcdef) #if defined (INCLUDE_UNUSED) #if defined (PROCESS_SUBSTITUTION) void -close_all_files () +close_all_files (void) { - register int i, fd_table_size; + int i, fd_table_size; fd_table_size = getdtablesize (); if (fd_table_size > 256) /* clamp to a reasonable value */ @@ -6175,8 +6272,7 @@ close_all_files () #endif static void -close_pipes (in, out) - int in, out; +close_pipes (int in, int out) { if (in >= 0) close (in); @@ -6185,8 +6281,7 @@ close_pipes (in, out) } static void -dup_error (oldd, newd) - int oldd, newd; +dup_error (int oldd, int newd) { sys_error (_("cannot duplicate fd %d to fd %d"), oldd, newd); } @@ -6194,8 +6289,7 @@ dup_error (oldd, newd) /* Redirect input and output to be from and to the specified pipes. NO_PIPE and REDIRECT_BOTH are handled correctly. */ static void -do_piping (pipe_in, pipe_out) - int pipe_in, pipe_out; +do_piping (int pipe_in, int pipe_out) { if (pipe_in != NO_PIPE) { diff --git a/execute_cmd.h b/execute_cmd.h index 465030aef..981e94a11 100644 --- a/execute_cmd.h +++ b/execute_cmd.h @@ -1,6 +1,6 @@ /* execute_cmd.h - functions from execute_cmd.c. */ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. +/* Copyright (C) 1993-2017,2022-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -42,7 +42,6 @@ struct execstate pid_t pid; int subshell_env; }; - /* Variables declared in execute_cmd.c, used by many other files */ extern int return_catch_flag; @@ -51,7 +50,8 @@ extern volatile int last_command_exit_value; extern int last_command_exit_signal; extern int builtin_ignoring_errexit; extern int executing_builtin; -extern int executing_list; +extern int interrupt_execution; +extern int retain_fifos; extern int comsub_ignore_return; extern int subshell_level; extern int match_ignore_case; @@ -63,61 +63,75 @@ extern int stdin_redir; extern int line_number_for_err_trap; extern char *the_printed_command_except_trap; +extern COMMAND *currently_executing_command; extern char *this_command_name; extern SHELL_VAR *this_shell_function; /* Functions declared in execute_cmd.c, used by many other files */ -extern struct fd_bitmap *new_fd_bitmap PARAMS((int)); -extern void dispose_fd_bitmap PARAMS((struct fd_bitmap *)); -extern void close_fd_bitmap PARAMS((struct fd_bitmap *)); -extern int executing_line_number PARAMS((void)); -extern int execute_command PARAMS((COMMAND *)); -extern int execute_command_internal PARAMS((COMMAND *, int, int, int, struct fd_bitmap *)); -extern int shell_execve PARAMS((char *, char **, char **)); -extern void setup_async_signals PARAMS((void)); -extern void async_redirect_stdin PARAMS((void)); - -extern void undo_partial_redirects PARAMS((void)); -extern void dispose_partial_redirects PARAMS((void)); -extern void dispose_exec_redirects PARAMS((void)); - -extern int execute_shell_function PARAMS((SHELL_VAR *, WORD_LIST *)); - -extern struct coproc *getcoprocbypid PARAMS((pid_t)); -extern struct coproc *getcoprocbyname PARAMS((const char *)); - -extern void coproc_init PARAMS((struct coproc *)); -extern struct coproc *coproc_alloc PARAMS((char *, pid_t)); -extern void coproc_dispose PARAMS((struct coproc *)); -extern void coproc_flush PARAMS((void)); -extern void coproc_close PARAMS((struct coproc *)); -extern void coproc_closeall PARAMS((void)); -extern void coproc_reap PARAMS((void)); -extern pid_t coproc_active PARAMS((void)); - -extern void coproc_rclose PARAMS((struct coproc *, int)); -extern void coproc_wclose PARAMS((struct coproc *, int)); -extern void coproc_fdclose PARAMS((struct coproc *, int)); - -extern void coproc_checkfd PARAMS((struct coproc *, int)); -extern void coproc_fdchk PARAMS((int)); - -extern void coproc_pidchk PARAMS((pid_t, int)); +extern struct fd_bitmap *new_fd_bitmap (int); +extern void dispose_fd_bitmap (struct fd_bitmap *); +extern void close_fd_bitmap (struct fd_bitmap *); +extern int executing_line_number (void); +extern int execute_command (COMMAND *); +extern int execute_command_internal (COMMAND *, int, int, int, struct fd_bitmap *); +extern int shell_execve (char *, char **, char **); +extern void setup_async_signals (void); +extern void async_redirect_stdin (void); + +extern void undo_partial_redirects (void); +extern void dispose_partial_redirects (void); +extern void dispose_exec_redirects (void); + +extern int execute_shell_function (SHELL_VAR *, WORD_LIST *); + +extern struct coproc *getcoprocbypid (pid_t); +extern struct coproc *getcoprocbyname (const char *); + +extern void coproc_init (struct coproc *); +extern struct coproc *coproc_alloc (char *, pid_t); +extern void coproc_dispose (struct coproc *); +extern void coproc_flush (void); +extern void coproc_close (struct coproc *); +extern void coproc_closeall (void); +extern void coproc_reap (void); +extern pid_t coproc_active (void); + +extern void coproc_rclose (struct coproc *, int); +extern void coproc_wclose (struct coproc *, int); +extern void coproc_fdclose (struct coproc *, int); + +extern void coproc_checkfd (struct coproc *, int); +extern void coproc_fdchk (int); + +#if defined _POSIXWAIT_H_ +extern void coproc_pidchk (pid_t, WAIT); +extern void coproc_setstate (pid_t, WAIT); +#endif -extern void coproc_fdsave PARAMS((struct coproc *)); -extern void coproc_fdrestore PARAMS((struct coproc *)); +extern void coproc_fdsave (struct coproc *); +extern void coproc_fdrestore (struct coproc *); -extern void coproc_setvars PARAMS((struct coproc *)); -extern void coproc_unsetvars PARAMS((struct coproc *)); +extern void coproc_setvars (struct coproc *); +extern void coproc_unsetvars (struct coproc *); #if defined (PROCESS_SUBSTITUTION) -extern void close_all_files PARAMS((void)); +extern void close_all_files (void); #endif #if defined (ARRAY_VARS) -extern void restore_funcarray_state PARAMS((struct func_array_state *)); +extern void restore_funcarray_state (struct func_array_state *); +extern void uw_restore_funcarray_state (void *); #endif +extern void uw_maybe_restore_getopt_state (void *); +extern void uw_lastpipe_cleanup (void *); + +extern char *save_lastarg (void); +extern void bind_lastarg (char *); + +extern void uw_dispose_fd_bitmap (void *); +extern void uw_close (void *); + #endif /* _EXECUTE_CMD_H_ */ diff --git a/expr.c b/expr.c index 66e120d95..b50b11005 100644 --- a/expr.c +++ b/expr.c @@ -1,6 +1,6 @@ /* expr.c -- arithmetic expression evaluation. */ -/* Copyright (C) 1990-2021 Free Software Foundation, Inc. +/* Copyright (C) 1990-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -155,7 +155,8 @@ struct lvalue }; /* A structure defining a single expression context. */ -typedef struct { +typedef struct +{ int curtok, lasttok; char *expression, *tp, *lasttp; intmax_t tokval; @@ -181,48 +182,49 @@ static int already_expanded; static struct lvalue curlval = {0, 0, 0, -1}; static struct lvalue lastlval = {0, 0, 0, -1}; -static int _is_arithop PARAMS((int)); -static void readtok PARAMS((void)); /* lexical analyzer */ +static int is_arithop (int); +static int is_multiop (int); +static void readtok (void); /* lexical analyzer */ -static void init_lvalue PARAMS((struct lvalue *)); -static struct lvalue *alloc_lvalue PARAMS((void)); -static void free_lvalue PARAMS((struct lvalue *)); +static void init_lvalue (struct lvalue *); +static struct lvalue *alloc_lvalue (void); +static void free_lvalue (struct lvalue *); -static intmax_t expr_streval PARAMS((char *, int, struct lvalue *)); -static intmax_t strlong PARAMS((char *)); -static void evalerror PARAMS((const char *)); +static intmax_t expr_streval (char *, int, struct lvalue *); +static intmax_t strlong (char *); +static void evalerror (const char *); -static void pushexp PARAMS((void)); -static void popexp PARAMS((void)); -static void expr_unwind PARAMS((void)); -static void expr_bind_variable PARAMS((char *, char *)); +static void pushexp (void); +static void popexp (void); +static void expr_unwind (void); +static void expr_bind_variable (const char *, const char *); #if defined (ARRAY_VARS) -static void expr_bind_array_element PARAMS((char *, arrayind_t, char *)); +static void expr_bind_array_element (const char *, arrayind_t, const char *); #endif -static intmax_t subexpr PARAMS((char *)); - -static intmax_t expcomma PARAMS((void)); -static intmax_t expassign PARAMS((void)); -static intmax_t expcond PARAMS((void)); -static intmax_t explor PARAMS((void)); -static intmax_t expland PARAMS((void)); -static intmax_t expbor PARAMS((void)); -static intmax_t expbxor PARAMS((void)); -static intmax_t expband PARAMS((void)); -static intmax_t exp5 PARAMS((void)); -static intmax_t exp4 PARAMS((void)); -static intmax_t expshift PARAMS((void)); -static intmax_t exp3 PARAMS((void)); -static intmax_t expmuldiv PARAMS((void)); -static intmax_t exppower PARAMS((void)); -static intmax_t exp1 PARAMS((void)); -static intmax_t exp0 PARAMS((void)); +static intmax_t subexpr (const char *); + +static intmax_t expcomma (void); +static intmax_t expassign (void); +static intmax_t expcond (void); +static intmax_t explor (void); +static intmax_t expland (void); +static intmax_t expbor (void); +static intmax_t expbxor (void); +static intmax_t expband (void); +static intmax_t expeq (void); +static intmax_t expcompare (void); +static intmax_t expshift (void); +static intmax_t expaddsub (void); +static intmax_t expmuldiv (void); +static intmax_t exppower (void); +static intmax_t expunary (void); +static intmax_t exp0 (void); /* Global var which contains the stack of expression contexts. */ static EXPR_CONTEXT **expr_stack; static int expr_depth; /* Location in the stack. */ -static int expr_stack_size; /* Number of slots already allocated. */ +static size_t expr_stack_size; /* Number of slots already allocated. */ #if defined (ARRAY_VARS) extern const char * const bash_badsub_errmsg; @@ -255,7 +257,7 @@ extern const char * const bash_badsub_errmsg; /* Push and save away the contents of the globals describing the current expression context. */ static void -pushexp () +pushexp (void) { EXPR_CONTEXT *context; @@ -279,7 +281,7 @@ pushexp () /* Pop the the contents of the expression context stack into the globals describing the current expression context. */ static void -popexp () +popexp (void) { EXPR_CONTEXT *context; @@ -300,7 +302,7 @@ popexp () } static void -expr_unwind () +expr_unwind (void) { while (--expr_depth > 0) { @@ -319,8 +321,7 @@ expr_unwind () } static void -expr_bind_variable (lhs, rhs) - char *lhs, *rhs; +expr_bind_variable (const char *lhs, const char *rhs) { SHELL_VAR *v; int aflags; @@ -329,7 +330,7 @@ expr_bind_variable (lhs, rhs) return; /* XXX */ #if defined (ARRAY_VARS) - aflags = (assoc_expand_once && already_expanded) ? ASS_NOEXPAND : 0; + aflags = (array_expand_once && already_expanded) ? ASS_NOEXPAND : 0; aflags |= ASS_ALLOWALLSUB; /* allow assoc[@]=value */ #else aflags = 0; @@ -344,31 +345,27 @@ expr_bind_variable (lhs, rhs) /* This is similar to the logic in arrayfunc.c:valid_array_reference when you pass VA_NOEXPAND. */ static int -expr_skipsubscript (vp, cp) - char *vp, *cp; +expr_skipsubscript (char *vp, char *cp) { int flags, isassoc; SHELL_VAR *entry; isassoc = 0; entry = 0; - if (assoc_expand_once & already_expanded) + if (array_expand_once & already_expanded) { *cp = '\0'; - isassoc = legal_identifier (vp) && (entry = find_variable (vp)) && assoc_p (entry); + isassoc = valid_identifier (vp) && (entry = find_variable (vp)) && assoc_p (entry); *cp = '['; /* ] */ } - flags = (isassoc && assoc_expand_once && already_expanded) ? VA_NOEXPAND : 0; + flags = (isassoc && array_expand_once && already_expanded) ? VA_NOEXPAND : 0; return (skipsubscript (cp, 0, flags)); } /* Rewrite tok, which is of the form vname[expression], to vname[ind], where IND is the already-calculated value of expression. */ static void -expr_bind_array_element (tok, ind, rhs) - char *tok; - arrayind_t ind; - char *rhs; +expr_bind_array_element (const char *tok, arrayind_t ind, const char *rhs) { char *lhs, *vname; size_t llen; @@ -403,10 +400,7 @@ expr_bind_array_element (tok, ind, rhs) safe to let the loop terminate when expr_depth == 0, without freeing up any of the expr_depth[0] stuff. */ intmax_t -evalexp (expr, flags, validp) - char *expr; - int flags; - int *validp; +evalexp (const char *expr, int flags, int *validp) { intmax_t val; int c; @@ -448,11 +442,10 @@ evalexp (expr, flags, validp) } static intmax_t -subexpr (expr) - char *expr; +subexpr (const char *expr) { intmax_t val; - char *p; + const char *p; for (p = expr; p && *p && cr_whitespace (*p); p++) ; @@ -476,7 +469,7 @@ subexpr (expr) /*TAG:bash-5.3 make it clear that these are arithmetic syntax errors */ if (curtok != 0) - evalerror (_("syntax error in expression")); + evalerror (_("arithmetic syntax error in expression")); FREE (tokstr); FREE (expression); @@ -487,7 +480,7 @@ subexpr (expr) } static intmax_t -expcomma () +expcomma (void) { register intmax_t value; @@ -502,7 +495,7 @@ expcomma () } static intmax_t -expassign () +expassign (void) { register intmax_t value; char *lhs, *rhs; @@ -529,7 +522,7 @@ expassign () } if (tokstr == 0) - evalerror (_("syntax error in variable assignment")); + evalerror (_("arithmetic syntax error in variable assignment")); /* XXX - watch out for pointer aliasing issues here */ lhs = savestring (tokstr); @@ -621,7 +614,7 @@ expassign () /* Conditional expression (expr?expr:expr) */ static intmax_t -expcond () +expcond (void) { intmax_t cval, val1, val2, rval; int set_noeval; @@ -669,7 +662,7 @@ expcond () /* Logical OR. */ static intmax_t -explor () +explor (void) { register intmax_t val1, val2; int set_noeval; @@ -697,7 +690,7 @@ explor () /* Logical AND. */ static intmax_t -expland () +expland (void) { register intmax_t val1, val2; int set_noeval; @@ -725,7 +718,7 @@ expland () /* Bitwise OR. */ static intmax_t -expbor () +expbor (void) { register intmax_t val1, val2; @@ -744,7 +737,7 @@ expbor () /* Bitwise XOR. */ static intmax_t -expbxor () +expbxor (void) { register intmax_t val1, val2; @@ -763,16 +756,16 @@ expbxor () /* Bitwise AND. */ static intmax_t -expband () +expband (void) { register intmax_t val1, val2; - val1 = exp5 (); + val1 = expeq (); while (curtok == BAND) { readtok (); - val2 = exp5 (); + val2 = expeq (); val1 = val1 & val2; lasttok = NUM; } @@ -781,18 +774,18 @@ expband () } static intmax_t -exp5 () +expeq (void) { register intmax_t val1, val2; - val1 = exp4 (); + val1 = expcompare (); while ((curtok == EQEQ) || (curtok == NEQ)) { int op = curtok; readtok (); - val2 = exp4 (); + val2 = expcompare (); if (op == EQEQ) val1 = (val1 == val2); else if (op == NEQ) @@ -803,7 +796,7 @@ exp5 () } static intmax_t -exp4 () +expcompare (void) { register intmax_t val1, val2; @@ -833,18 +826,18 @@ exp4 () /* Left and right shifts. */ static intmax_t -expshift () +expshift (void) { register intmax_t val1, val2; - val1 = exp3 (); + val1 = expaddsub (); while ((curtok == LSH) || (curtok == RSH)) { int op = curtok; readtok (); - val2 = exp3 (); + val2 = expaddsub (); if (op == LSH) val1 = val1 << val2; @@ -857,7 +850,7 @@ expshift () } static intmax_t -exp3 () +expaddsub (void) { register intmax_t val1, val2; @@ -880,7 +873,7 @@ exp3 () } static intmax_t -expmuldiv () +expmuldiv (void) { register intmax_t val1, val2; #if defined (HAVE_IMAXDIV) @@ -941,8 +934,7 @@ expmuldiv () } static intmax_t -ipow (base, exp) - intmax_t base, exp; +ipow (intmax_t base, intmax_t exp) { intmax_t result; @@ -958,52 +950,57 @@ ipow (base, exp) } static intmax_t -exppower () +exppower (void) { - register intmax_t val1, val2, c; + register intmax_t val1, val2; - val1 = exp1 (); + val1 = expunary (); while (curtok == POWER) { readtok (); val2 = exppower (); /* exponentiation is right-associative */ lasttok = NUM; - if (val2 == 0) - return (1); - if (val2 < 0) - evalerror (_("exponent less than 0")); - val1 = ipow (val1, val2); + if (noeval == 0) + { + if (val2 == 0) + return (1); + if (val2 < 0) + evalerror (_("exponent less than 0")); + val1 = ipow (val1, val2); + } + else + val1 = 1; } return (val1); } static intmax_t -exp1 () +expunary (void) { register intmax_t val; if (curtok == NOT) { readtok (); - val = !exp1 (); + val = !expunary (); lasttok = NUM; } else if (curtok == BNOT) { readtok (); - val = ~exp1 (); + val = ~expunary (); lasttok = NUM; } else if (curtok == MINUS) { readtok (); - val = - exp1 (); + val = - expunary (); lasttok = NUM; } else if (curtok == PLUS) { readtok (); - val = exp1 (); + val = expunary (); lasttok = NUM; } else @@ -1013,13 +1010,14 @@ exp1 () } static intmax_t -exp0 () +exp0 (void) { - register intmax_t val = 0, v2; + intmax_t val, v2; char *vincdec; int stok; EXPR_CONTEXT ec; + val = 0; /* XXX - might need additional logic here to decide whether or not pre-increment or pre-decrement is legal at this point. */ if (curtok == PREINC || curtok == PREDEC) @@ -1106,14 +1104,13 @@ exp0 () readtok (); } else - evalerror (_("syntax error: operand expected")); + evalerror (_("arithmetic syntax error: operand expected")); return (val); } static void -init_lvalue (lv) - struct lvalue *lv; +init_lvalue (struct lvalue *lv) { lv->tokstr = 0; lv->tokvar = 0; @@ -1121,7 +1118,7 @@ init_lvalue (lv) } static struct lvalue * -alloc_lvalue () +alloc_lvalue (void) { struct lvalue *lv; @@ -1131,17 +1128,13 @@ alloc_lvalue () } static void -free_lvalue (lv) - struct lvalue *lv; +free_lvalue (struct lvalue *lv) { free (lv); /* should be inlined */ } static intmax_t -expr_streval (tok, e, lvalue) - char *tok; - int e; - struct lvalue *lvalue; +expr_streval (char *tok, int e, struct lvalue *lvalue) { SHELL_VAR *v; char *value; @@ -1162,7 +1155,7 @@ expr_streval (tok, e, lvalue) initial_depth = expr_depth; #if defined (ARRAY_VARS) - tflag = (assoc_expand_once && already_expanded) ? AV_NOEXPAND : 0; /* for a start */ + tflag = (array_expand_once && already_expanded) ? AV_NOEXPAND : 0; /* for a start */ #endif /* [[[[[ */ @@ -1245,9 +1238,8 @@ expr_streval (tok, e, lvalue) return (tval); } -static int -_is_multiop (c) - int c; +static inline int +is_multiop (int c) { switch (c) { @@ -1272,9 +1264,8 @@ _is_multiop (c) } } -static int -_is_arithop (c) - int c; +static inline int +is_arithop (int c) { switch (c) { @@ -1308,16 +1299,16 @@ _is_arithop (c) Updates value of tp. May also set tokval (for number) or tokstr (for string). */ static void -readtok () +readtok (void) { - register char *cp, *xp; - register unsigned char c, c1; - register int e; - struct lvalue lval; + char *cp, *xp; + unsigned char c, c1; + int e; /* Skip leading whitespace. */ cp = tp; - c = e = 0; + c = 0; + e = 0; while (cp && (c = *cp) && (cr_whitespace (c))) cp++; @@ -1356,7 +1347,7 @@ readtok () e = ']'; } else - evalerror (bash_badsub_errmsg); + evalerror (_(bash_badsub_errmsg)); } #endif /* ARRAY_VARS */ @@ -1456,11 +1447,10 @@ readtok () #endif { /* This catches something like --FOO++ */ - /* TAG:bash-5.3 add gettext calls here or make this a separate function */ if (c == '-') - evalerror ("--: assignment requires lvalue"); + evalerror (_("--: assignment requires lvalue")); else - evalerror ("++: assignment requires lvalue"); + evalerror (_("++: assignment requires lvalue")); } else if ((c == '-' || c == '+') && c1 == c) { @@ -1479,9 +1469,9 @@ readtok () preinc and predec. */ /* This catches something like --4++ */ if (c == '-') - evalerror ("--: assignment requires lvalue"); + evalerror (_("--: assignment requires lvalue")); else - evalerror ("++: assignment requires lvalue"); + evalerror (_("++: assignment requires lvalue")); } #else cp--; /* not preinc or predec, so unget the character */ @@ -1492,14 +1482,14 @@ readtok () assigntok = c; /* a OP= b */ c = OP_ASSIGN; } - else if (_is_arithop (c) == 0) + else if (is_arithop (c) == 0) { cp--; /* use curtok, since it hasn't been copied to lasttok yet */ - if (curtok == 0 || _is_arithop (curtok) || _is_multiop (curtok)) - evalerror (_("syntax error: operand expected")); + if (curtok == 0 || is_arithop (curtok) || is_multiop (curtok)) + evalerror (_("arithmetic syntax error: operand expected")); else - evalerror (_("syntax error: invalid arithmetic operator")); + evalerror (_("arithmetic syntax error: invalid arithmetic operator")); } else cp--; /* `unget' the character */ @@ -1515,8 +1505,7 @@ readtok () } static void -evalerror (msg) - const char *msg; +evalerror (const char *msg) { char *name, *t; @@ -1543,8 +1532,7 @@ evalerror (msg) #define VALID_NUMCHAR(c) (ISALNUM(c) || ((c) == '_') || ((c) == '@')) static intmax_t -strlong (num) - char *num; +strlong (char *num) { register char *s; register unsigned char c; @@ -1632,16 +1620,13 @@ strlong (num) #if defined (EXPR_TEST) void * -xmalloc (n) - int n; +xmalloc (size_t n) { return (malloc (n)); } void * -xrealloc (s, n) - char *s; - int n; +xrealloc (void *s, size_t n) { return (realloc (s, n)); } @@ -1653,9 +1638,7 @@ char *get_string_value () { return 0; } procenv_t top_level; -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { register int i; intmax_t v; @@ -1686,8 +1669,7 @@ builtin_error (format, arg1, arg2, arg3, arg4, arg5) } char * -itos (n) - intmax_t n; +itos (intmax_t n) { return ("42"); } diff --git a/externs.h b/externs.h index 931dba9cd..a7c41928a 100644 --- a/externs.h +++ b/externs.h @@ -1,7 +1,7 @@ /* externs.h -- extern function declarations which do not appear in their own header file. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,155 +29,164 @@ /* Functions from expr.c. */ #define EXP_EXPANDED 0x01 -extern intmax_t evalexp PARAMS((char *, int, int *)); +extern intmax_t evalexp (const char *, int, int *); /* Functions from print_cmd.c. */ #define FUNC_MULTILINE 0x01 #define FUNC_EXTERNAL 0x02 -extern char *make_command_string PARAMS((COMMAND *)); -extern char *print_comsub PARAMS((COMMAND *)); -extern char *named_function_string PARAMS((char *, COMMAND *, int)); +extern char *make_command_string (COMMAND *); +extern char *print_comsub (COMMAND *); +extern char *named_function_string (char *, COMMAND *, int); -extern void print_command PARAMS((COMMAND *)); -extern void print_simple_command PARAMS((SIMPLE_COM *)); -extern void print_word_list PARAMS((WORD_LIST *, char *)); +extern void print_command (COMMAND *); +extern void print_simple_command (SIMPLE_COM *); +extern void print_word_list (WORD_LIST *, char *); /* debugger support */ -extern void print_for_command_head PARAMS((FOR_COM *)); +extern void print_for_command_head (FOR_COM *); #if defined (SELECT_COMMAND) -extern void print_select_command_head PARAMS((SELECT_COM *)); +extern void print_select_command_head (SELECT_COM *); #endif -extern void print_case_command_head PARAMS((CASE_COM *)); +extern void print_case_command_head (CASE_COM *); #if defined (DPAREN_ARITHMETIC) -extern void print_arith_command PARAMS((WORD_LIST *)); +extern void print_arith_command (WORD_LIST *); #endif #if defined (COND_COMMAND) -extern void print_cond_command PARAMS((COND_COM *)); +extern void print_cond_command (COND_COM *); #endif /* set -x support */ -extern void xtrace_init PARAMS((void)); +extern void xtrace_init (void); #ifdef NEED_XTRACE_SET_DECL -extern void xtrace_set PARAMS((int, FILE *)); -#endif -extern void xtrace_fdchk PARAMS((int)); -extern void xtrace_reset PARAMS((void)); -extern char *indirection_level_string PARAMS((void)); -extern void xtrace_print_assignment PARAMS((char *, char *, int, int)); -extern void xtrace_print_word_list PARAMS((WORD_LIST *, int)); -extern void xtrace_print_for_command_head PARAMS((FOR_COM *)); +extern void xtrace_set (int, FILE *); +#endif +extern void xtrace_fdchk (int); +extern void xtrace_reset (void); +extern char *indirection_level_string (void); +extern void xtrace_print_assignment (char *, char *, int, int); +extern void xtrace_print_word_list (WORD_LIST *, int); +extern void xtrace_print_for_command_head (FOR_COM *); #if defined (SELECT_COMMAND) -extern void xtrace_print_select_command_head PARAMS((SELECT_COM *)); +extern void xtrace_print_select_command_head (SELECT_COM *); #endif -extern void xtrace_print_case_command_head PARAMS((CASE_COM *)); +extern void xtrace_print_case_command_head (CASE_COM *); #if defined (DPAREN_ARITHMETIC) -extern void xtrace_print_arith_cmd PARAMS((WORD_LIST *)); +extern void xtrace_print_arith_cmd (WORD_LIST *); #endif #if defined (COND_COMMAND) -extern void xtrace_print_cond_term PARAMS((int, int, WORD_DESC *, char *, char *)); +extern void xtrace_print_cond_term (int, int, WORD_DESC *, char *, char *); #endif /* Functions from shell.c. */ -extern void exit_shell PARAMS((int)) __attribute__((__noreturn__)); -extern void sh_exit PARAMS((int)) __attribute__((__noreturn__)); -extern void subshell_exit PARAMS((int)) __attribute__((__noreturn__)); -extern void set_exit_status PARAMS((int)); -extern void disable_priv_mode PARAMS((void)); -extern void unbind_args PARAMS((void)); +extern void exit_shell (int) __attribute__((__noreturn__)); +extern void sh_exit (int) __attribute__((__noreturn__)); +extern void subshell_exit (int) __attribute__((__noreturn__)); +extern void set_exit_status (int); +extern void disable_priv_mode (void); +extern void unbind_args (void); #if defined (RESTRICTED_SHELL) -extern int shell_is_restricted PARAMS((char *)); -extern int maybe_make_restricted PARAMS((char *)); +extern int shell_is_restricted (char *); +extern int maybe_make_restricted (char *); #endif -extern void unset_bash_input PARAMS((int)); -extern void get_current_user_info PARAMS((void)); +extern void unset_bash_input (int); +extern void get_current_user_info (void); /* Functions from eval.c. */ -extern int reader_loop PARAMS((void)); -extern int pretty_print_loop PARAMS((void)); -extern int parse_command PARAMS((void)); -extern int read_command PARAMS((void)); +extern int reader_loop (void); +extern int pretty_print_loop (void); +extern int parse_command (void); +extern int read_command (void); /* Functions from braces.c. */ #if defined (BRACE_EXPANSION) -extern char **brace_expand PARAMS((char *)); +extern char **brace_expand (char *); #endif /* Miscellaneous functions from parse.y */ -extern int yyparse PARAMS((void)); -extern int return_EOF PARAMS((void)); -extern void push_token PARAMS((int)); -extern char *xparse_dolparen PARAMS((char *, char *, int *, int)); -extern COMMAND *parse_string_to_command PARAMS((char *, int)); -extern void reset_parser PARAMS((void)); -extern void reset_readahead_token PARAMS((void)); -extern WORD_LIST *parse_string_to_word_list PARAMS((char *, int, const char *)); +extern int yyparse (void); +extern int return_EOF (void); +extern void push_token (int); +extern char *xparse_dolparen (const char *, char *, size_t *, int); +extern COMMAND *parse_string_to_command (char *, int); +extern void reset_parser (void); +extern void reset_readahead_token (void); +extern void unset_readahead_token (void); +extern WORD_LIST *parse_string_to_word_list (char *, int, const char *); -extern int parser_will_prompt PARAMS((void)); -extern int parser_in_command_position PARAMS((void)); +extern int parser_will_prompt (void); +extern int parser_in_command_position (void); -extern void free_pushed_string_input PARAMS((void)); +extern void free_pushed_string_input (void); -extern int parser_expanding_alias PARAMS((void)); -extern void parser_save_alias PARAMS((void)); -extern void parser_restore_alias PARAMS((void)); +extern int parser_expanding_alias (void); +extern void parser_save_alias (void); +extern void parser_restore_alias (void); +extern void clear_shell_input_line (void); -extern void clear_shell_input_line PARAMS((void)); +extern int handle_ignoreeof (int); -extern char *decode_prompt_string PARAMS((char *)); +extern char *decode_prompt_string (char *, int); -extern int get_current_prompt_level PARAMS((void)); -extern void set_current_prompt_level PARAMS((int)); +extern int get_current_prompt_level (void); +extern void set_current_prompt_level (int); #if defined (HISTORY) -extern char *history_delimiting_chars PARAMS((const char *)); +extern char *history_delimiting_chars (const char *); #endif /* Declarations for functions defined in locale.c */ -extern void set_default_locale PARAMS((void)); -extern void set_default_locale_vars PARAMS((void)); -extern int set_locale_var PARAMS((char *, char *)); -extern int set_lang PARAMS((char *, char *)); -extern void set_default_lang PARAMS((void)); -extern char *get_locale_var PARAMS((char *)); -extern char *localetrans PARAMS((char *, int, int *)); -extern char *mk_msgstr PARAMS((char *, int *)); -extern char *locale_expand PARAMS((char *, int, int, int, int *)); +extern void set_default_locale (void); +extern void set_default_locale_vars (void); +extern int set_locale_var (const char *, const char *); +extern int set_lang (const char *, const char *); +extern void set_default_lang (void); +extern char *get_locale_var (const char *); +extern char *localetrans (const char *, int, size_t *); +extern char *mk_msgstr (char *, int *); +extern char *locale_expand (const char *, int, int, int, size_t *); #ifndef locale_decpoint -extern int locale_decpoint PARAMS((void)); +extern int locale_decpoint (void); #endif /* Declarations for functions defined in list.c. */ -extern void list_walk PARAMS((GENERIC_LIST *, sh_glist_func_t *)); -extern void wlist_walk PARAMS((WORD_LIST *, sh_icpfunc_t *)); -extern GENERIC_LIST *list_reverse (); -extern int list_length (); -extern GENERIC_LIST *list_append (); -extern GENERIC_LIST *list_remove (); +extern void list_walk (GENERIC_LIST *, sh_glist_func_t *); +extern void wlist_walk (WORD_LIST *, sh_icpfunc_t *); +extern GENERIC_LIST *list_reverse (GENERIC_LIST *); +extern int list_length (GENERIC_LIST *); +extern GENERIC_LIST *list_append (GENERIC_LIST *, GENERIC_LIST *); +extern GENERIC_LIST *list_emove (GENERIC_LIST **, sh_gcp_func_t *, char *); /* unused */ /* Declarations for functions defined in stringlib.c */ -extern int find_string_in_alist PARAMS((char *, STRING_INT_ALIST *, int)); -extern char *find_token_in_alist PARAMS((int, STRING_INT_ALIST *, int)); -extern int find_index_in_alist PARAMS((char *, STRING_INT_ALIST *, int)); +extern int find_string_in_alist (char *, STRING_INT_ALIST *, int); +extern char *find_token_in_alist (int, STRING_INT_ALIST *, int); +extern int find_index_in_alist (char *, STRING_INT_ALIST *, int); -extern char *substring PARAMS((const char *, int, int)); -extern char *strsub PARAMS((char *, char *, char *, int)); -extern char *strcreplace PARAMS((char *, int, const char *, int)); -extern void strip_leading PARAMS((char *)); -extern void strip_trailing PARAMS((char *, int, int)); -extern void xbcopy PARAMS((char *, char *, int)); +extern char *substring (const char *, size_t, size_t); +extern char *strsub (const char *, const char *, const char *, int); +extern char *strcreplace (const char *, int, const char *, int); +extern void strip_leading (char *); +extern void strip_trailing (char *, int, int); +extern int str_firstdiff (const char *, const char *); +extern int str_lastsame (const char *, const char *); + +extern void xbcopy (const void *, void *, size_t); /* Functions from version.c. */ -extern char *shell_version_string PARAMS((void)); -extern void show_shell_version PARAMS((int)); +extern char *shell_version_string (void); +extern void show_shell_version (int); /* Functions from the bash library, lib/sh/libsh.a. These should really go into a separate include file. */ +/* declarations for functions defined in lib/sh/anonfile.c */ +extern int anonopen (const char *, int, char **); +extern int anonclose (int, const char *); + /* declarations for functions defined in lib/sh/casemod.c */ -extern char *sh_modcase PARAMS((const char *, char *, int)); +extern char *sh_modcase (const char *, char *, int); /* Defines for flags argument to sh_modcase. These need to agree with what's in lib/sh/casemode.c */ @@ -193,15 +202,22 @@ extern char *sh_modcase PARAMS((const char *, char *, int)); #define CASE_USEWORDS 0x1000 /* declarations for functions defined in lib/sh/clktck.c */ -extern long get_clk_tck PARAMS((void)); +extern long get_clk_tck (void); /* declarations for functions defined in lib/sh/clock.c */ -extern void clock_t_to_secs (); -extern void print_clock_t (); +/* No prototypes so we don't have to have clock_t defined when this file + is included. */ +#ifdef NEED_CLOCK_FUNCS_DECL +extern void clock_t_to_secs (clock_t, time_t *, long *); +extern void print_clock_t (FILE *, clock_t); +#endif + +/* Declarations for functions defined in lib/sh/compat.c */ +extern int compat_init (void); /* Declarations for functions defined in lib/sh/dprintf.c */ #if !defined (HAVE_DPRINTF) -extern void dprintf PARAMS((int, const char *, ...)) __attribute__((__format__ (printf, 2, 3))); +extern void dprintf (int, const char *, ...) __attribute__((__format__ (printf, 2, 3))); #endif /* Declarations for functions defined in lib/sh/fmtulong.c */ @@ -210,19 +226,19 @@ extern void dprintf PARAMS((int, const char *, ...)) __attribute__((__format__ #define FL_HEXUPPER 0x04 /* use uppercase when converting to hex */ #define FL_UNSIGNED 0x08 /* don't add any sign */ -extern char *fmtulong PARAMS((unsigned long int, int, char *, size_t, int)); +extern char *fmtulong (unsigned long int, int, char *, size_t, int); /* Declarations for functions defined in lib/sh/fmtulong.c */ #if defined (HAVE_LONG_LONG_INT) -extern char *fmtullong PARAMS((unsigned long long int, int, char *, size_t, int)); +extern char *fmtullong (unsigned long long int, int, char *, size_t, int); #endif /* Declarations for functions defined in lib/sh/fmtumax.c */ -extern char *fmtumax PARAMS((uintmax_t, int, char *, size_t, int)); +extern char *fmtumax (uintmax_t, int, char *, size_t, int); /* Declarations for functions defined in lib/sh/fnxform.c */ -extern char *fnx_fromfs PARAMS((char *, size_t)); -extern char *fnx_tofs PARAMS((char *, size_t)); +extern char *fnx_fromfs (char *, size_t); +extern char *fnx_tofs (char *, size_t); /* Declarations for functions defined in lib/sh/fpurge.c */ @@ -232,25 +248,25 @@ extern char *fnx_tofs PARAMS((char *, size_t)); #if HAVE_FPURGE # define fpurge _bash_fpurge #endif -extern int fpurge PARAMS((FILE *stream)); +extern int fpurge (FILE *stream); #endif /* HAVE_DECL_FPURGE */ #endif /* NEED_FPURGE_DECL */ /* Declarations for functions defined in lib/sh/getcwd.c */ #if !defined (HAVE_GETCWD) -extern char *getcwd PARAMS((char *, size_t)); +extern char *getcwd (char *, size_t); #endif /* Declarations for functions defined in lib/sh/input_avail.c */ -extern int input_avail PARAMS((int)); +extern int input_avail (int); /* Declarations for functions defined in lib/sh/itos.c */ -extern char *inttostr PARAMS((intmax_t, char *, size_t)); -extern char *itos PARAMS((intmax_t)); -extern char *mitos PARAMS((intmax_t)); -extern char *uinttostr PARAMS((uintmax_t, char *, size_t)); -extern char *uitos PARAMS((uintmax_t)); +extern char *inttostr (intmax_t, char *, size_t); +extern char *itos (intmax_t); +extern char *mitos (intmax_t); +extern char *uinttostr (uintmax_t, char *, size_t); +extern char *uitos (uintmax_t); /* declarations for functions defined in lib/sh/makepath.c */ #define MP_DOTILDE 0x01 @@ -258,45 +274,45 @@ extern char *uitos PARAMS((uintmax_t)); #define MP_RMDOT 0x04 #define MP_IGNDOT 0x08 -extern char *sh_makepath PARAMS((const char *, const char *, int)); +extern char *sh_makepath (const char *, const char *, int); /* declarations for functions defined in lib/sh/mbscasecmp.c */ #if !defined (HAVE_MBSCASECMP) -extern char *mbscasecmp PARAMS((const char *, const char *)); +extern char *mbscasecmp (const char *, const char *); #endif /* declarations for functions defined in lib/sh/mbschr.c */ #if !defined (HAVE_MBSCHR) -extern char *mbschr PARAMS((const char *, int)); +extern char *mbschr (const char *, int); #endif /* declarations for functions defined in lib/sh/mbscmp.c */ #if !defined (HAVE_MBSCMP) -extern char *mbscmp PARAMS((const char *, const char *)); +extern char *mbscmp (const char *, const char *); #endif /* declarations for functions defined in lib/sh/netconn.c */ -extern int isnetconn PARAMS((int)); +extern int isnetconn (int); /* declarations for functions defined in lib/sh/netopen.c */ -extern int netopen PARAMS((char *)); +extern int netopen (char *); /* Declarations for functions defined in lib/sh/oslib.c */ #if !defined (HAVE_DUP2) || defined (DUP2_BROKEN) -extern int dup2 PARAMS((int, int)); +extern int dup2 (int, int); #endif #if !defined (HAVE_GETDTABLESIZE) -extern int getdtablesize PARAMS((void)); +extern int getdtablesize (void); #endif /* !HAVE_GETDTABLESIZE */ #if !defined (HAVE_GETHOSTNAME) -extern int gethostname PARAMS((char *, int)); +extern int gethostname (char *, int); #endif /* !HAVE_GETHOSTNAME */ -extern int getmaxgroups PARAMS((void)); -extern long getmaxchild PARAMS((void)); +extern int getmaxgroups (void); +extern long getmaxchild (void); /* declarations for functions defined in lib/sh/pathcanon.c */ #define PATH_CHECKDOTDOT 0x0001 @@ -304,78 +320,81 @@ extern long getmaxchild PARAMS((void)); #define PATH_HARDPATH 0x0004 #define PATH_NOALLOC 0x0008 -extern char *sh_canonpath PARAMS((char *, int)); +extern char *sh_canonpath (char *, int); /* declarations for functions defined in lib/sh/pathphys.c */ -extern char *sh_physpath PARAMS((char *, int)); -extern char *sh_realpath PARAMS((const char *, char *)); +extern char *sh_physpath (char *, int); +extern char *sh_realpath (const char *, char *); /* declarations for functions defined in lib/sh/random.c */ -extern int brand PARAMS((void)); -extern void sbrand PARAMS((unsigned long)); /* set bash random number generator. */ -extern void seedrand PARAMS((void)); /* seed generator randomly */ -extern void seedrand32 PARAMS((void)); -extern u_bits32_t get_urandom32 PARAMS((void)); +extern int brand (void); +extern void sbrand (unsigned long); /* set bash random number generator. */ +extern void seedrand (void); /* seed generator randomly */ +extern void seedrand32 (void); +extern u_bits32_t get_urandom32 (void); + +/* declarations for functions defined in lib/sh/reallocarray.c */ +extern void *reallocarray (void *, size_t, size_t); /* declarations for functions defined in lib/sh/setlinebuf.c */ #ifdef NEED_SH_SETLINEBUF_DECL -extern int sh_setlinebuf PARAMS((FILE *)); +extern int sh_setlinebuf (FILE *); #endif /* declarations for functions defined in lib/sh/shaccess.c */ -extern int sh_eaccess PARAMS((const char *, int)); +extern int sh_eaccess (const char *, int); /* declarations for functions defined in lib/sh/shmatch.c */ -extern int sh_regmatch PARAMS((const char *, const char *, int)); +extern int sh_regmatch (const char *, const char *, int, char **); /* defines for flags argument to sh_regmatch. */ #define SHMAT_SUBEXP 0x001 /* save subexpressions in SH_REMATCH */ #define SHMAT_PWARN 0x002 /* print a warning message on invalid regexp */ /* declarations for functions defined in lib/sh/shmbchar.c */ -extern size_t mbstrlen PARAMS((const char *)); -extern char *mbsmbchar PARAMS((const char *)); -extern int sh_mbsnlen PARAMS((const char *, size_t, int)); +extern size_t mbstrlen (const char *); +extern char *mbsmbchar (const char *); +extern int sh_mbsnlen (const char *, size_t, int); /* declarations for functions defined in lib/sh/shquote.c */ -extern char *sh_single_quote PARAMS((const char *)); -extern char *sh_double_quote PARAMS((const char *)); -extern char *sh_mkdoublequoted PARAMS((const char *, int, int)); -extern char *sh_un_double_quote PARAMS((char *)); -extern char *sh_backslash_quote PARAMS((char *, const char *, int)); -extern char *sh_backslash_quote_for_double_quotes PARAMS((char *, int)); -extern char *sh_quote_reusable PARAMS((char *, int)); -extern int sh_contains_shell_metas PARAMS((const char *)); -extern int sh_contains_quotes PARAMS((const char *)); +extern char *sh_single_quote (const char *); +extern char *sh_double_quote (const char *); +extern char *sh_mkdoublequoted (const char *, size_t, int); +extern char *sh_un_double_quote (char *); +extern char *sh_backslash_quote (char *, const char *, int); +extern char *sh_backslash_quote_for_double_quotes (char *, int); +extern char *sh_quote_reusable (char *, int); +extern int sh_contains_shell_metas (const char *); +extern int sh_contains_quotes (const char *); /* declarations for functions defined in lib/sh/spell.c */ -extern int spname PARAMS((char *, char *)); -extern char *dirspell PARAMS((char *)); +extern int spname (char *, char *); +extern char *dirspell (char *); /* declarations for functions defined in lib/sh/strcasecmp.c */ #if !defined (HAVE_STRCASECMP) -extern int strncasecmp PARAMS((const char *, const char *, size_t)); -extern int strcasecmp PARAMS((const char *, const char *)); +extern int strncasecmp (const char *, const char *, size_t); +extern int strcasecmp (const char *, const char *); #endif /* HAVE_STRCASECMP */ /* declarations for functions defined in lib/sh/strcasestr.c */ #if ! HAVE_STRCASESTR -extern char *strcasestr PARAMS((const char *, const char *)); +extern char *strcasestr (const char *, const char *); #endif /* declarations for functions defined in lib/sh/strchrnul.c */ #if ! HAVE_STRCHRNUL -extern char *strchrnul PARAMS((const char *, int)); +extern char *strchrnul (const char *, int); #endif /* declarations for functions defined in lib/sh/strerror.c */ #if !defined (HAVE_STRERROR) && !defined (strerror) -extern char *strerror PARAMS((int)); +extern char *strerror (int); #endif /* declarations for functions defined in lib/sh/strftime.c */ #if !defined (HAVE_STRFTIME) && defined (NEED_STRFTIME_DECL) -extern size_t strftime PARAMS((char *, size_t, const char *, const struct tm *)); +extern size_t strftime (char *, size_t, const char *, const struct tm *); #endif /* declarations for functions and structures defined in lib/sh/stringlist.c */ @@ -383,172 +402,181 @@ extern size_t strftime PARAMS((char *, size_t, const char *, const struct tm *)) /* This is a general-purpose argv-style array struct. */ typedef struct _list_of_strings { char **list; - int list_size; - int list_len; + size_t list_size; + size_t list_len; } STRINGLIST; -typedef int sh_strlist_map_func_t PARAMS((char *)); - -extern STRINGLIST *strlist_create PARAMS((int)); -extern STRINGLIST *strlist_resize PARAMS((STRINGLIST *, int)); -extern void strlist_flush PARAMS((STRINGLIST *)); -extern void strlist_dispose PARAMS((STRINGLIST *)); -extern int strlist_remove PARAMS((STRINGLIST *, char *)); -extern STRINGLIST *strlist_copy PARAMS((STRINGLIST *)); -extern STRINGLIST *strlist_merge PARAMS((STRINGLIST *, STRINGLIST *)); -extern STRINGLIST *strlist_append PARAMS((STRINGLIST *, STRINGLIST *)); -extern STRINGLIST *strlist_prefix_suffix PARAMS((STRINGLIST *, char *, char *)); -extern void strlist_print PARAMS((STRINGLIST *, char *)); -extern void strlist_walk PARAMS((STRINGLIST *, sh_strlist_map_func_t *)); -extern void strlist_sort PARAMS((STRINGLIST *)); +typedef int sh_strlist_map_func_t (char *); + +extern STRINGLIST *strlist_create (size_t); +extern STRINGLIST *strlist_resize (STRINGLIST *, size_t); +extern void strlist_flush (STRINGLIST *); +extern void strlist_dispose (STRINGLIST *); +extern int strlist_remove (STRINGLIST *, const char *); +extern STRINGLIST *strlist_copy (STRINGLIST *); +extern STRINGLIST *strlist_merge (STRINGLIST *, STRINGLIST *); +extern STRINGLIST *strlist_append (STRINGLIST *, STRINGLIST *); +extern STRINGLIST *strlist_prefix_suffix (STRINGLIST *, const char *, const char *); +extern void strlist_print (STRINGLIST *, const char *); +extern void strlist_walk (STRINGLIST *, sh_strlist_map_func_t *); +extern void strlist_sort (STRINGLIST *); +extern WORD_LIST *strlist_to_word_list (STRINGLIST *, int, int); /* declarations for functions defined in lib/sh/stringvec.c */ -extern char **strvec_create PARAMS((int)); -extern char **strvec_resize PARAMS((char **, int)); -extern char **strvec_mcreate PARAMS((int)); -extern char **strvec_mresize PARAMS((char **, int)); -extern void strvec_flush PARAMS((char **)); -extern void strvec_dispose PARAMS((char **)); -extern int strvec_remove PARAMS((char **, char *)); -extern int strvec_len PARAMS((char **)); -extern int strvec_search PARAMS((char **, char *)); -extern char **strvec_copy PARAMS((char **)); -extern int strvec_posixcmp PARAMS((char **, char **)); -extern int strvec_strcmp PARAMS((char **, char **)); -extern void strvec_sort PARAMS((char **, int)); - -extern char **strvec_from_word_list PARAMS((WORD_LIST *, int, int, int *)); -extern WORD_LIST *strvec_to_word_list PARAMS((char **, int, int)); +extern char **strvec_create (size_t); +extern char **strvec_resize (char **, size_t); +extern char **strvec_mcreate (size_t); +extern char **strvec_mresize (char **, size_t); +extern void strvec_flush (char **); +extern void strvec_dispose (char **); +extern int strvec_remove (char **, const char *); +extern size_t strvec_len (char * const *); +extern ptrdiff_t strvec_search (char **, const char *); +extern char **strvec_copy (char * const *); +extern int strvec_posixcmp (char **, char **); +extern int strvec_strcmp (char **, char **); +extern void strvec_sort (char **, int); + +extern char **strvec_from_word_list (WORD_LIST *, int, int, int *); +extern WORD_LIST *strvec_to_word_list (char **, int, int); /* declarations for functions defined in lib/sh/strnlen.c */ #if !defined (HAVE_STRNLEN) -extern size_t strnlen PARAMS((const char *, size_t)); +extern size_t strnlen (const char *, size_t); #endif /* declarations for functions defined in lib/sh/strpbrk.c */ #if !defined (HAVE_STRPBRK) -extern char *strpbrk PARAMS((const char *, const char *)); +extern char *strpbrk (const char *, const char *); #endif /* declarations for functions defined in lib/sh/strtod.c */ #if !defined (HAVE_STRTOD) -extern double strtod PARAMS((const char *, char **)); +extern double strtod (const char *, char **); #endif /* declarations for functions defined in lib/sh/strtol.c */ #if !HAVE_DECL_STRTOL -extern long strtol PARAMS((const char *, char **, int)); +extern long strtol (const char *, char **, int); #endif /* declarations for functions defined in lib/sh/strtoll.c */ #if defined (HAVE_LONG_LONG_INT) && !HAVE_DECL_STRTOLL -extern long long strtoll PARAMS((const char *, char **, int)); +extern long long strtoll (const char *, char **, int); #endif /* declarations for functions defined in lib/sh/strtoul.c */ #if !HAVE_DECL_STRTOUL -extern unsigned long strtoul PARAMS((const char *, char **, int)); +extern unsigned long strtoul (const char *, char **, int); #endif /* declarations for functions defined in lib/sh/strtoull.c */ #if defined (HAVE_UNSIGNED_LONG_LONG_INT) && !HAVE_DECL_STRTOULL -extern unsigned long long strtoull PARAMS((const char *, char **, int)); +extern unsigned long long strtoull (const char *, char **, int); #endif /* declarations for functions defined in lib/sh/strimax.c */ #if !HAVE_DECL_STRTOIMAX -extern intmax_t strtoimax PARAMS((const char *, char **, int)); +extern intmax_t strtoimax (const char *, char **, int); #endif /* declarations for functions defined in lib/sh/strumax.c */ #if !HAVE_DECL_STRTOUMAX -extern uintmax_t strtoumax PARAMS((const char *, char **, int)); +extern uintmax_t strtoumax (const char *, char **, int); #endif /* declarations for functions defined in lib/sh/strtrans.c */ -extern char *ansicstr PARAMS((char *, int, int, int *, int *)); -extern char *ansic_quote PARAMS((char *, int, int *)); -extern int ansic_shouldquote PARAMS((const char *)); -extern char *ansiexpand PARAMS((char *, int, int, int *)); +extern char *ansicstr (const char *, size_t, int, int *, size_t *); +extern char *ansic_quote (const char *, int, int *); +extern int ansic_shouldquote (const char *); +extern char *ansiexpand (const char *, int, int, size_t *); /* declarations for functions defined in lib/sh/strvis.c */ -extern int sh_charvis PARAMS((const char *, size_t *, size_t, char *, size_t *)); -extern char *sh_strvis PARAMS((const char *)); +extern int sh_charvis (const char *, size_t *, size_t, char *, size_t *); +extern char *sh_strvis (const char *); /* declarations for functions defined in lib/sh/timeval.c. No prototypes so we don't have to count on having a definition of struct timeval in scope when this file is included. */ -extern void timeval_to_secs (); -extern void print_timeval (); +#ifdef NEED_TIMEVAL_FUNCS_DECL +extern void timeval_to_secs (struct timeval *, time_t *, long *, int); +extern void print_timeval (FILE *, struct timeval *); +#endif /* declarations for functions defined in lib/sh/tmpfile.c */ #define MT_USETMPDIR 0x0001 #define MT_READWRITE 0x0002 #define MT_USERANDOM 0x0004 #define MT_TEMPLATE 0x0008 +#define MT_UNLINK 0x0010 /* unlink after opening */ -extern char *sh_mktmpname PARAMS((char *, int)); -extern int sh_mktmpfd PARAMS((char *, int, char **)); -/* extern FILE *sh_mktmpfp PARAMS((char *, int, char **)); */ -extern char *sh_mktmpdir PARAMS((char *, int)); +extern char *sh_mktmpname (const char *, int); +extern int sh_mktmpfd (const char *, int, char **); +/* extern FILE *sh_mktmpfp (const char *, int, char **); */ +extern char *sh_mktmpdir (const char *, int); /* declarations for functions defined in lib/sh/uconvert.c */ -extern int uconvert PARAMS((char *, long *, long *, char **)); +extern int uconvert (const char *, long *, long *, char **); /* declarations for functions defined in lib/sh/ufuncs.c */ -extern unsigned int falarm PARAMS((unsigned int, unsigned int)); -extern unsigned int fsleep PARAMS((unsigned int, unsigned int)); +extern unsigned int falarm (unsigned int, unsigned int); +extern unsigned int fsleep (unsigned int, unsigned int); /* declarations for functions defined in lib/sh/unicode.c */ -extern int u32cconv PARAMS((unsigned long, char *)); -extern void u32reset PARAMS((void)); +extern int u32cconv (unsigned long, char *); +extern void u32reset (void); /* declarations for functions defined in lib/sh/utf8.c */ -extern char *utf8_mbschr PARAMS((const char *, int)); -extern int utf8_mbscmp PARAMS((const char *, const char *)); -extern char *utf8_mbsmbchar PARAMS((const char *)); -extern int utf8_mbsnlen PARAMS((const char *, size_t, int)); -extern int utf8_mblen PARAMS((const char *, size_t)); -extern size_t utf8_mbstrlen PARAMS((const char *)); +extern char *utf8_mbschr (const char *, int); +extern int utf8_mbscmp (const char *, const char *); +extern char *utf8_mbsmbchar (const char *); +extern int utf8_mbsnlen (const char *, size_t, int); +extern int utf8_mblen (const char *, size_t); +extern size_t utf8_mbstrlen (const char *); /* declarations for functions defined in lib/sh/wcsnwidth.c */ #if defined (HANDLE_MULTIBYTE) -extern int wcsnwidth PARAMS((const wchar_t *, size_t, int)); +extern int wcsnwidth (const wchar_t *, size_t, int); #endif /* declarations for functions defined in lib/sh/winsize.c */ -extern void get_new_window_size PARAMS((int, int *, int *)); +extern void get_new_window_size (int, int *, int *); /* declarations for functions defined in lib/sh/zcatfd.c */ -extern int zcatfd PARAMS((int, int, char *)); +extern int zcatfd (int, int, const char *); /* declarations for functions defined in lib/sh/zgetline.c */ -extern ssize_t zgetline PARAMS((int, char **, size_t *, int, int)); +extern ssize_t zgetline (int, char **, size_t *, int, int); /* declarations for functions defined in lib/sh/zmapfd.c */ -extern int zmapfd PARAMS((int, char **, char *)); +extern int zmapfd (int, char **, const char *); /* declarations for functions defined in lib/sh/zread.c */ -extern ssize_t zread PARAMS((int, char *, size_t)); -extern ssize_t zreadretry PARAMS((int, char *, size_t)); -extern ssize_t zreadintr PARAMS((int, char *, size_t)); -extern ssize_t zreadc PARAMS((int, char *)); -extern ssize_t zreadcintr PARAMS((int, char *)); -extern ssize_t zreadn PARAMS((int, char *, size_t)); -extern void zreset PARAMS((void)); -extern void zsyncfd PARAMS((int)); +extern ssize_t zread (int, char *, size_t); +extern ssize_t zreadretry (int, char *, size_t); +extern ssize_t zreadintr (int, char *, size_t); +extern ssize_t zreadc (int, char *); +extern ssize_t zreadcintr (int, char *); +extern ssize_t zreadn (int, char *, size_t); +extern void zreset (void); +extern void zsyncfd (int); /* declarations for functions defined in lib/sh/zwrite.c */ -extern int zwrite PARAMS((int, char *, size_t)); +extern int zwrite (int, char *, size_t); + +/* compatibility functions for existing loadable builtins, from compat.c */ +extern int legal_number (const char *, intmax_t *); +extern int legal_identifier (const char *); +extern int legal_alias_name (const char *, int); /* declarations for functions defined in lib/glob/gmisc.c */ -extern int match_pattern_char PARAMS((char *, char *, int)); -extern int umatchlen PARAMS((char *, size_t)); +extern int match_pattern_char (char *, char *, int); +extern int umatchlen (char *, size_t); #if defined (HANDLE_MULTIBYTE) -extern int match_pattern_wchar PARAMS((wchar_t *, wchar_t *, int)); -extern int wmatchlen PARAMS((wchar_t *, size_t)); +extern int match_pattern_wchar (wchar_t *, wchar_t *, int); +extern int wmatchlen (wchar_t *, size_t); #endif #endif /* _EXTERNS_H_ */ diff --git a/findcmd.c b/findcmd.c index 95f231e5c..73c07bd80 100644 --- a/findcmd.c +++ b/findcmd.c @@ -1,6 +1,6 @@ /* findcmd.c -- Functions to search for commands by name. */ -/* Copyright (C) 1997-2022 Free Software Foundation, Inc. +/* Copyright (C) 1997-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -52,13 +52,13 @@ extern int errno; #endif /* Static functions defined and used in this file. */ -static char *_find_user_command_internal PARAMS((const char *, int)); -static char *find_user_command_internal PARAMS((const char *, int)); -static char *find_user_command_in_path PARAMS((const char *, char *, int, int *)); -static char *find_in_path_element PARAMS((const char *, char *, int, int, struct stat *, int *)); -static char *find_absolute_program PARAMS((const char *, int)); +static char *_find_user_command_internal (const char *, int); +static char *find_user_command_internal (const char *, int); +static char *find_user_command_in_path (const char *, char *, int, int *); +static char *find_in_path_element (const char *, char *, int, size_t, struct stat *, int *); +static char *find_absolute_program (const char *, int); -static char *get_next_path_element PARAMS((char *, int *)); +static char *get_next_path_element (char *, int *); /* The file name which we would try to execute, except that it isn't possible to execute it. This is the first file that matches the @@ -89,15 +89,13 @@ static struct ignorevar execignore = }; void -setup_exec_ignore (varname) - char *varname; +setup_exec_ignore (const char *varname) { setup_ignore_patterns (&execignore); } static int -exec_name_should_ignore (name) - const char *name; +exec_name_should_ignore (const char *name) { struct ign *p; @@ -112,15 +110,26 @@ exec_name_should_ignore (name) The EXECABLE bit is non-zero the file is executable. Zero is returned if the file is not found. */ int -file_status (name) - const char *name; +file_status (const char *name) { struct stat finfo; int r; /* Determine whether this file exists or not. */ if (stat (name, &finfo) < 0) +#if defined (__MVS__) && defined (S_ISEXTL) + { + /* Workaround for z/OS not supporting stat on external links */ + int old_errno = errno; + if (!(errno == ENOENT && lstat(name, &finfo) == 0 && S_ISEXTL(finfo.st_mode,finfo.st_genvalue))) + { + errno = old_errno; /* lstat may reset errno */ + return (0); + } + } +#else return (0); +#endif /* If the file is a directory, then it is not "executable" in the sense of the shell. */ @@ -202,8 +211,7 @@ file_status (name) executable file is; do not change this unless YOU know what an executable file is. */ int -executable_file (file) - const char *file; +executable_file (const char *file) { int s; @@ -216,15 +224,13 @@ executable_file (file) } int -is_directory (file) - const char *file; +is_directory (const char *file) { return (file_status (file) & FS_DIRECTORY); } int -executable_or_directory (file) - const char *file; +executable_or_directory (const char *file) { int s; @@ -238,8 +244,7 @@ executable_or_directory (file) couldn't be found. If a file is found that isn't executable, and that is the only match, then return that. */ char * -find_user_command (name) - const char *name; +find_user_command (const char *name) { return (find_user_command_internal (name, FS_EXEC_PREFERRED|FS_NODIRS)); } @@ -250,28 +255,39 @@ find_user_command (name) returns the first readable file found; designed to be used to look for shell scripts or files to source. */ char * -find_path_file (name) - const char *name; +find_path_file (const char *name) { return (find_user_command_internal (name, FS_READABLE)); } +/* Get $PATH and normalize it. USE_TEMPENV, if non-zero, says to look in the + temporary environment first. Normalizing means converting PATH= into ".". */ +char * +path_value (const char *pathvar, int use_tempenv) +{ + SHELL_VAR *var; + char *path; + + var = use_tempenv ? find_variable_tempenv (pathvar) : find_variable (pathvar); + path = var ? value_cell (var) : (char *)NULL; + + if (path == 0 || *path) + return (path); + else /* *path == '\0' */ + return "."; +} + static char * -_find_user_command_internal (name, flags) - const char *name; - int flags; +_find_user_command_internal (const char *name, int flags) { char *path_list, *cmd; SHELL_VAR *var; /* Search for the value of PATH in both the temporary environments and in the regular list of variables. */ - if (var = find_variable_tempenv ("PATH")) /* XXX could be array? */ - path_list = value_cell (var); - else - path_list = (char *)NULL; + path_list = path_value ("PATH", 1); - if (path_list == 0 || *path_list == '\0') + if (path_list == 0) return (savestring (name)); cmd = find_user_command_in_path (name, path_list, flags, (int *)0); @@ -280,9 +296,7 @@ _find_user_command_internal (name, flags) } static char * -find_user_command_internal (name, flags) - const char *name; - int flags; +find_user_command_internal (const char *name, int flags) { #ifdef __WIN32__ char *res, *dotexe; @@ -305,9 +319,7 @@ find_user_command_internal (name, flags) the index is modified by this function. Return the next element of PATH_LIST or NULL if there are no more. */ static char * -get_next_path_element (path_list, path_index_pointer) - char *path_list; - int *path_index_pointer; +get_next_path_element (char *path_list, int *path_index_pointer) { char *path; @@ -333,9 +345,7 @@ get_next_path_element (path_list, path_index_pointer) environment and should use the Posix standard path. Returns a newly-allocated string. */ char * -search_for_command (pathname, flags) - const char *pathname; - int flags; +search_for_command (const char *pathname, int flags) { char *hashed_file, *command, *path_list; int temp_path, st; @@ -380,7 +390,11 @@ search_for_command (pathname, flags) if (flags & CMDSRCH_STDPATH) path_list = conf_standard_path (); else if (temp_path || path) - path_list = value_cell (path); + { + path_list = value_cell (path); + if (path_list && *path_list == '\0') + path_list = "."; + } else path_list = 0; @@ -393,6 +407,11 @@ search_for_command (pathname, flags) table unless it's an executable file in the current directory. */ if (STREQ (command, pathname)) { + if (path_list == 0) + { + dot_found_in_search = 1; + st = file_status (pathname); + } if (st & FS_EXECABLE) phash_insert ((char *)pathname, command, dot_found_in_search, 1); } @@ -415,17 +434,16 @@ search_for_command (pathname, flags) } char * -user_command_matches (name, flags, state) - const char *name; - int flags, state; +user_command_matches (const char *name, int flags, int state) { register int i; - int path_index, name_len; + int path_index; + size_t name_len; char *path_list, *path_element, *match; struct stat dotinfo; static char **match_list = NULL; - static int match_list_size = 0; - static int match_index = 0; + static size_t match_list_size = 0; + static size_t match_index = 0; if (state == 0) { @@ -456,8 +474,8 @@ user_command_matches (name, flags, state) dot_found_in_search = 0; if (stat (".", &dotinfo) < 0) dotinfo.st_dev = dotinfo.st_ino = 0; /* so same_file won't match */ - path_list = get_string_value ("PATH"); - path_index = 0; + path_list = path_value ("PATH", 0); + path_index = 0; } while (path_list && path_list[path_index]) @@ -498,9 +516,7 @@ user_command_matches (name, flags, state) } static char * -find_absolute_program (name, flags) - const char *name; - int flags; +find_absolute_program (const char *name, int flags) { int st; @@ -520,12 +536,7 @@ find_absolute_program (name, flags) } static char * -find_in_path_element (name, path, flags, name_len, dotinfop, rflagsp) - const char *name; - char *path; - int flags, name_len; - struct stat *dotinfop; - int *rflagsp; +find_in_path_element (const char *name, char *path, int flags, size_t name_len, struct stat *dotinfop, int *rflagsp) { int status; char *full_path, *xpath; @@ -597,7 +608,9 @@ find_in_path_element (name, path, flags, name_len, dotinfop, rflagsp) /* This does the dirty work for find_user_command_internal () and user_command_matches (). NAME is the name of the file to search for. - PATH_LIST is a colon separated list of directories to search. + PATH_LIST is a colon separated list of directories to search. It is the + caller's responsibility to pass a non-empty path if they want an empty + path to be treated specially. FLAGS contains bit fields which control the files which are eligible. Some values are: FS_EXEC_ONLY: The file must be an executable to be found. @@ -607,13 +620,11 @@ find_in_path_element (name, path, flags, name_len, dotinfop, rflagsp) FS_NODIRS: Don't find any directories. */ static char * -find_user_command_in_path (name, path_list, flags, rflagsp) - const char *name; - char *path_list; - int flags, *rflagsp; +find_user_command_in_path (const char *name, char *path_list, int flags, int *rflagsp) { char *full_path, *path; - int path_index, name_len, rflags; + int path_index, rflags; + size_t name_len; struct stat dotinfo; /* We haven't started looking, so we certainly haven't seen @@ -687,10 +698,7 @@ find_user_command_in_path (name, path_list, flags, rflagsp) /* External interface to find a command given a $PATH. Separate from find_user_command_in_path to allow future customization. */ char * -find_in_path (name, path_list, flags) - const char *name; - char *path_list; - int flags; +find_in_path (const char *name, char *path_list, int flags) { return (find_user_command_in_path (name, path_list, flags, (int *)0)); } diff --git a/findcmd.h b/findcmd.h index bf457814e..6dbded4c1 100644 --- a/findcmd.h +++ b/findcmd.h @@ -1,6 +1,6 @@ /* findcmd.h - functions from findcmd.c. */ -/* Copyright (C) 1997-2015,2020 Free Software Foundation, Inc. +/* Copyright (C) 1997-2015,2020-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -28,16 +28,17 @@ #define CMDSRCH_STDPATH 0x02 #define CMDSRCH_TEMPENV 0x04 -extern int file_status PARAMS((const char *)); -extern int executable_file PARAMS((const char *)); -extern int is_directory PARAMS((const char *)); -extern int executable_or_directory PARAMS((const char *)); -extern char *find_user_command PARAMS((const char *)); -extern char *find_in_path PARAMS((const char *, char *, int)); -extern char *find_path_file PARAMS((const char *)); -extern char *search_for_command PARAMS((const char *, int)); -extern char *user_command_matches PARAMS((const char *, int, int)); -extern void setup_exec_ignore PARAMS((char *)); +extern int file_status (const char *); +extern int executable_file (const char *); +extern int is_directory (const char *); +extern int executable_or_directory (const char *); +extern char *find_user_command (const char *); +extern char *find_in_path (const char *, char *, int); +extern char *find_path_file (const char *); +extern char *path_value (const char *, int); +extern char *search_for_command (const char *, int); +extern char *user_command_matches (const char *, int, int); +extern void setup_exec_ignore (const char *); extern int dot_found_in_search; diff --git a/flags.c b/flags.c index 30f6c13d4..b7829db02 100644 --- a/flags.c +++ b/flags.c @@ -1,7 +1,7 @@ /* flags.c -- Everything about flags except the `set' command. That is in builtins.c */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -33,7 +33,7 @@ #endif #if defined (JOB_CONTROL) -extern int set_job_control PARAMS((int)); +extern int set_job_control (int); #endif /* **************************************************************** */ @@ -208,8 +208,7 @@ const struct flags_alist shell_flags[] = { char optflags[NUM_SHELL_FLAGS+4] = { '+' }; int * -find_flag (name) - int name; +find_flag (int name) { int i; for (i = 0; shell_flags[i].name; i++) @@ -224,9 +223,7 @@ find_flag (name) FLAG_ERROR if there is no flag FLAG. ON_OR_OFF must be either FLAG_ON or FLAG_OFF. */ int -change_flag (flag, on_or_off) - int flag; - int on_or_off; +change_flag (int flag, int on_or_off) { int *value, old_value; @@ -294,7 +291,7 @@ change_flag (flag, on_or_off) /* Return a string which is the names of all the currently set shell flags. */ char * -which_set_flags () +which_set_flags (void) { char *temp; int i, string_index; @@ -314,7 +311,7 @@ which_set_flags () } char * -get_current_flags () +get_current_flags (void) { char *temp; int i; @@ -327,8 +324,7 @@ get_current_flags () } void -set_current_flags (bitmap) - const char *bitmap; +set_current_flags (const char *bitmap) { int i; @@ -339,7 +335,7 @@ set_current_flags (bitmap) } void -reset_shell_flags () +reset_shell_flags (void) { mark_modified_vars = disallow_filename_globbing = 0; place_keywords_in_env = read_but_dont_execute = just_one_command = 0; @@ -373,7 +369,7 @@ reset_shell_flags () } void -initialize_flags () +initialize_flags (void) { register int i; diff --git a/flags.h b/flags.h index a3b5daa94..66da65030 100644 --- a/flags.h +++ b/flags.h @@ -1,7 +1,7 @@ /* flags.h -- a list of all the flags that the shell knows about. You add a flag to this program by adding the name here, and in flags.c. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -71,15 +71,15 @@ extern int restricted; extern int restricted_shell; #endif /* RESTRICTED_SHELL */ -extern int *find_flag PARAMS((int)); -extern int change_flag PARAMS((int, int)); -extern char *which_set_flags PARAMS((void)); -extern void reset_shell_flags PARAMS((void)); +extern int *find_flag (int); +extern int change_flag (int, int); +extern char *which_set_flags (void); +extern void reset_shell_flags (void); -extern char *get_current_flags PARAMS((void)); -extern void set_current_flags PARAMS((const char *)); +extern char *get_current_flags (void); +extern void set_current_flags (const char *); -extern void initialize_flags PARAMS((void)); +extern void initialize_flags (void); /* A macro for efficiency. */ #define change_flag_char(flag, on_or_off) change_flag (flag, on_or_off) diff --git a/general.c b/general.c index bda39f413..5c26ae38e 100644 --- a/general.c +++ b/general.c @@ -1,6 +1,6 @@ /* general.c -- Stuff that is used by all files. */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -62,9 +62,9 @@ extern int errno; # include <sys/cygwin.h> #endif -static char *bash_special_tilde_expansions PARAMS((char *)); -static int unquoted_tilde_word PARAMS((const char *)); -static void initialize_group_array PARAMS((void)); +static char *bash_special_tilde_expansions (char *); +static int unquoted_tilde_word (const char *); +static void initialize_group_array (void); /* A standard error message to use when getcwd() returns NULL. */ const char * const bash_getcwd_errstr = N_("getcwd: cannot access parent directories"); @@ -100,8 +100,7 @@ static struct { static char *saved_posix_vars = 0; void -posix_initialize (on) - int on; +posix_initialize (int on) { /* Things that should be turned on when posix mode is enabled. */ if (on != 0) @@ -129,15 +128,14 @@ posix_initialize (on) } } -int -num_posix_options () +size_t +num_posix_options (void) { return ((sizeof (posix_vars) / sizeof (posix_vars[0])) - 1); } char * -get_posix_options (bitmap) - char *bitmap; +get_posix_options (char *bitmap) { register int i; @@ -150,14 +148,13 @@ get_posix_options (bitmap) #undef save_posix_options void -save_posix_options () +save_posix_options (void) { saved_posix_vars = get_posix_options (saved_posix_vars); } void -set_posix_options (bitmap) - const char *bitmap; +set_posix_options (const char *bitmap) { register int i; @@ -173,14 +170,17 @@ set_posix_options (bitmap) #if defined (RLIMTYPE) RLIMTYPE -string_to_rlimtype (s) - char *s; +string_to_rlimtype (const char *string, char **ep) { RLIMTYPE ret; int neg; + const char *s; ret = 0; neg = 0; + s = string; + /* ulimit_builtin doesn't allow leading whitespace or an optional + leading `+' or `-', so the caller has to check. */ while (s && *s && whitespace (*s)) s++; if (s && (*s == '-' || *s == '+')) @@ -190,13 +190,13 @@ string_to_rlimtype (s) } for ( ; s && *s && DIGIT (*s); s++) ret = (ret * 10) + TODIGIT (*s); + if (ep) + *ep = (char *)s; return (neg ? -ret : ret); } void -print_rlimtype (n, addnl) - RLIMTYPE n; - int addnl; +print_rlimtype (RLIMTYPE n, int addnl) { char s[INT_STRLEN_BOUND (RLIMTYPE) + 1], *p; @@ -230,8 +230,7 @@ print_rlimtype (n, addnl) /* Return non-zero if all of the characters in STRING are digits. */ int -all_digits (string) - const char *string; +all_digits (const char *string) { register const char *s; @@ -246,9 +245,7 @@ all_digits (string) valid number. Stuff the converted number into RESULT if RESULT is not null. */ int -legal_number (string, result) - const char *string; - intmax_t *result; +valid_number (const char *string, intmax_t *result) { intmax_t value; char *ep; @@ -264,8 +261,9 @@ legal_number (string, result) if (errno || ep == string) return 0; /* errno is set on overflow or underflow */ - /* Skip any trailing whitespace, since strtoimax does not. */ - while (whitespace (*ep)) + /* Skip any trailing whitespace, since strtoimax does not, using the same + test that strtoimax uses for leading whitespace. */ + while (isspace ((unsigned char) *ep)) ep++; /* If *string is not '\0' but *ep is '\0' on return, the entire string @@ -283,12 +281,11 @@ legal_number (string, result) return (0); } -/* Return 1 if this token is a legal shell `identifier'; that is, it consists +/* Return 1 if this token is a valid shell `identifier'; that is, it consists solely of letters, digits, and underscores, and does not begin with a digit. */ int -legal_identifier (name) - const char *name; +valid_identifier (const char *name) { register const char *s; unsigned char c; @@ -310,18 +307,16 @@ legal_identifier (name) be used to allow values to be stored and indirectly referenced, but not used in assignments. */ int -valid_nameref_value (name, flags) - const char *name; - int flags; +valid_nameref_value (const char *name, int flags) { if (name == 0 || *name == 0) return 0; /* valid identifier */ #if defined (ARRAY_VARS) - if (legal_identifier (name) || (flags != 2 && valid_array_reference (name, 0))) + if (valid_identifier (name) || (flags != 2 && valid_array_reference (name, 0))) #else - if (legal_identifier (name)) + if (valid_identifier (name)) #endif return 1; @@ -329,10 +324,7 @@ valid_nameref_value (name, flags) } int -check_selfref (name, value, flags) - const char *name; - char *value; - int flags; +check_selfref (const char *name, char *value, int flags) { char *t; @@ -361,16 +353,14 @@ check_selfref (name, value, flags) the word is checked to ensure that it consists of only letters, digits, and underscores, and does not consist of all digits. */ int -check_identifier (word, check_word) - WORD_DESC *word; - int check_word; +check_identifier (WORD_DESC *word, int check_word) { if (word->flags & (W_HASDOLLAR|W_QUOTED)) /* XXX - HASDOLLAR? */ { internal_error (_("`%s': not a valid identifier"), word->word); return (0); } - else if (check_word && (all_digits (word->word) || legal_identifier (word->word) == 0)) + else if (check_word && (all_digits (word->word) || valid_identifier (word->word) == 0)) { internal_error (_("`%s': not a valid identifier"), word->word); return (0); @@ -385,9 +375,7 @@ check_identifier (word, check_word) Posix mode, we require that STRING be a valid shell identifier. Not used yet. */ int -importable_function_name (string, len) - const char *string; - size_t len; +importable_function_name (const char *string, size_t len) { if (absolute_program (string)) /* don't allow slash */ return 0; @@ -395,12 +383,11 @@ importable_function_name (string, len) return 0; if (shellblank (*string) || shellblank(string[len-1])) return 0; - return (posixly_correct ? legal_identifier (string) : 1); + return (posixly_correct ? valid_identifier (string) : 1); } int -exportable_function_name (string) - const char *string; +exportable_function_name (const char *string) { if (absolute_program (string)) return 0; @@ -413,9 +400,7 @@ exportable_function_name (string) essentially all characters except those which must be quoted to the parser (which disqualifies them from alias expansion anyway) and `/'. */ int -legal_alias_name (string, flags) - const char *string; - int flags; +valid_alias_name (const char *string, int flags) { register const char *s; @@ -425,17 +410,65 @@ legal_alias_name (string, flags) return 1; } +/* Return 1 if this is a valid identifer that can be used to declare a function + without the `function' reserved word. FLAGS&1 means to reject POSIX + non-identifiers and reserved words; FLAGS&2 means to suppress the check + for ASSIGNMENT_WORD. So you can pass posixly_correct as FLAGS and get + POSIX checks. */ +int +valid_function_name (const char *name, int flags) +{ + if ((flags & 1) && find_reserved_word (name) >= 0) + return 0; + if ((flags & 1) && (all_digits (name) || valid_identifier (name) == 0)) + return 0; + /* pass flags & 2 to suppress this check */ + if ((flags & 2) == 0 && assignment (name, 0)) /* difference between WORD and ASSIGNMENT_WORD */ + return 0; + return 1; +} + +/* Return 1 if this is an identifier that can be used as a function name + when declaring a function. We don't allow `$' for historical reasons. + We allow quotes (for now), slashes, and pretty much everything else. + If FLAGS is non-zero (it's usually posixly_correct), we check the name + for additional posix restrictions using valid_function_name(). We pass + flags|2 to valid_function_name to suppress the check for an assignment + word, since we want to allow those here. */ +int +valid_function_word (WORD_DESC *word, int flags) +{ + char *name; + + name = word->word; + if ((word->flags & W_HASDOLLAR)) /* allow quotes for now */ + { + internal_error (_("`%s': not a valid identifier"), name); + return (0); + } + /* POSIX interpretation 383 */ + if (flags && find_special_builtin (name)) + { + internal_error (_("`%s': is a special builtin"), name); + return (0); + } + if (flags && valid_function_name (name, flags|2) == 0) + { + internal_error (_("`%s': not a valid identifier"), name); + return (0); + } + return 1; +} + /* Returns non-zero if STRING is an assignment statement. The returned value is the index of the `=' sign. If FLAGS&1 we are expecting a compound assignment and require an array subscript before the `=' to denote an assignment statement. */ int -assignment (string, flags) - const char *string; - int flags; +assignment (const char *string, int flags) { - register unsigned char c; - register int newi, indx; + unsigned char c; + int newi, indx; c = string[indx = 0]; @@ -492,8 +525,7 @@ assignment (string, flags) } int -line_isblank (line) - const char *line; +line_isblank (const char *line) { register int i; @@ -523,8 +555,7 @@ line_isblank (line) /* Make sure no-delay mode is not set on file descriptor FD. */ int -sh_unset_nodelay_mode (fd) - int fd; +sh_unset_nodelay_mode (int fd) { int flags, bflags; @@ -554,23 +585,20 @@ sh_unset_nodelay_mode (fd) /* Just a wrapper for the define in include/filecntl.h */ int -sh_setclexec (fd) - int fd; +sh_setclexec (int fd) { return (SET_CLOSE_ON_EXEC (fd)); } /* Return 1 if file descriptor FD is valid; 0 otherwise. */ int -sh_validfd (fd) - int fd; +sh_validfd (int fd) { return (fcntl (fd, F_GETFD, 0) >= 0); } int -fd_ispipe (fd) - int fd; +fd_ispipe (int fd) { errno = 0; return ((lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE)); @@ -587,7 +615,7 @@ fd_ispipe (fd) #endif /* __BEOS__ */ void -check_dev_tty () +check_dev_tty (void) { int tty_fd; char *tty; @@ -609,9 +637,7 @@ check_dev_tty () expensive. If non-NULL STP1 and STP2 point to stat structures corresponding to PATH1 and PATH2, respectively. */ int -same_file (path1, path2, stp1, stp2) - const char *path1, *path2; - struct stat *stp1, *stp2; +same_file (const char *path1, const char *path2, struct stat *stp1, struct stat *stp2) { struct stat st1, st2; @@ -640,8 +666,7 @@ same_file (path1, path2, stp1, stp2) file descriptors. If it's less than 20, we get the maximum value available from getdtablesize(2). */ int -move_to_high_fd (fd, check_new, maxfd) - int fd, check_new, maxfd; +move_to_high_fd (int fd, int check_new, int maxfd) { int script_fd, nfds, ignore; @@ -678,9 +703,7 @@ move_to_high_fd (fd, check_new, maxfd) All of the characters must be printable or whitespace. */ int -check_binary_file (sample, sample_len) - const char *sample; - int sample_len; +check_binary_file (const char *sample, int sample_len) { register int i; int nline; @@ -712,8 +735,7 @@ check_binary_file (sample, sample_len) /* **************************************************************** */ int -sh_openpipe (pv) - int *pv; +sh_openpipe (int *pv) { int r; @@ -727,8 +749,7 @@ sh_openpipe (pv) } int -sh_closepipe (pv) - int *pv; +sh_closepipe (int *pv) { if (pv[0] >= 0) close (pv[0]); @@ -747,8 +768,7 @@ sh_closepipe (pv) /* **************************************************************** */ int -file_exists (fn) - const char *fn; +file_exists (const char *fn) { struct stat sb; @@ -756,8 +776,7 @@ file_exists (fn) } int -file_isdir (fn) - const char *fn; +file_isdir (const char *fn) { struct stat sb; @@ -765,8 +784,7 @@ file_isdir (fn) } int -file_iswdir (fn) - const char *fn; +file_iswdir (const char *fn) { return (file_isdir (fn) && sh_eaccess (fn, W_OK) == 0); } @@ -774,8 +792,7 @@ file_iswdir (fn) /* Return 1 if STRING is "." or "..", optionally followed by a directory separator */ int -path_dot_or_dotdot (string) - const char *string; +path_dot_or_dotdot (const char *string) { if (string == 0 || *string == '\0' || *string != '.') return (0); @@ -790,8 +807,7 @@ path_dot_or_dotdot (string) /* Return 1 if STRING contains an absolute pathname, else 0. Used by `cd' to decide whether or not to look up a directory name in $CDPATH. */ int -absolute_pathname (string) - const char *string; +absolute_pathname (const char *string) { if (string == 0 || *string == '\0') return (0); @@ -812,10 +828,14 @@ absolute_pathname (string) contains any slashes. This is used to decide whether or not to look up through $PATH. */ int -absolute_program (string) - const char *string; +absolute_program (const char *string) { +#ifndef __MSYS__ return ((char *)mbschr (string, '/') != (char *)NULL); +#else + return ((char *)mbschr (string, '/') != (char *)NULL || + (char *)mbschr (string, '\\') != (char *)NULL) +#endif } /* **************************************************************** */ @@ -829,8 +849,7 @@ absolute_program (string) returns a new string, even if STRING was an absolute pathname to begin with. */ char * -make_absolute (string, dot_path) - const char *string, *dot_path; +make_absolute (const char *string, const char *dot_path) { char *result; @@ -840,7 +859,7 @@ make_absolute (string, dot_path) char pathbuf[PATH_MAX + 1]; /* WAS cygwin_conv_to_full_posix_path (string, pathbuf); */ - cygwin_conv_path (CCP_WIN_A_TO_POSIX, string, pathbuf, PATH_MAX); + cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_ABSOLUTE, string, pathbuf, PATH_MAX); result = savestring (pathbuf); } #else @@ -855,8 +874,7 @@ make_absolute (string, dot_path) /* Return the `basename' of the pathname in STRING (the stuff after the last '/'). If STRING is `/', just return it. */ char * -base_pathname (string) - char *string; +base_pathname (char *string) { char *p; @@ -877,8 +895,7 @@ base_pathname (string) the current working directory prepended. A new string is returned in either case. */ char * -full_pathname (file) - char *file; +full_pathname (char *file) { char *ret; @@ -900,8 +917,7 @@ static char tdir[PATH_MAX]; /* Return a pretty pathname. If the first part of the pathname is the same as $HOME, then replace that with `~'. */ char * -polite_directory_format (name) - char *name; +polite_directory_format (char *name) { char *home; int l; @@ -923,9 +939,7 @@ polite_directory_format (name) keep any tilde prefix and PROMPT_DIRTRIM trailing directory components and replace the intervening characters with `...' */ char * -trim_pathname (name, maxlen) - char *name; - int maxlen; +trim_pathname (char *name, int maxlen) { int nlen, ndirs; intmax_t nskip; @@ -938,7 +952,7 @@ trim_pathname (name, maxlen) v = get_string_value ("PROMPT_DIRTRIM"); if (v == 0 || *v == 0) return name; - if (legal_number (v, &nskip) == 0 || nskip <= 0) + if (valid_number (v, &nskip) == 0 || nskip <= 0) return name; /* Skip over tilde prefix */ @@ -990,9 +1004,7 @@ trim_pathname (name, maxlen) than its argument. If FLAGS is non-zero, we are printing for portable re-input and should single-quote filenames appropriately. */ char * -printable_filename (fn, flags) - char *fn; - int flags; +printable_filename (char *fn, int flags) { char *newf; @@ -1010,9 +1022,7 @@ printable_filename (fn, flags) return the next one pointed to by (P_INDEX), or NULL if there are no more. Advance (P_INDEX) to the character after the colon. */ char * -extract_colon_unit (string, p_index) - char *string; - int *p_index; +extract_colon_unit (char *string, int *p_index) { int i, start, len; char *value; @@ -1060,7 +1070,7 @@ extract_colon_unit (string, p_index) /* **************************************************************** */ #if defined (PUSHD_AND_POPD) -extern char *get_dirstack_from_string PARAMS((char *)); +extern char *get_dirstack_from_string (char *); #endif static char **bash_tilde_prefixes; @@ -1074,8 +1084,7 @@ static char **bash_tilde_suffixes2; If PUSHD_AND_POPD is defined, ~[+-]N expands to directories from the directory stack. */ static char * -bash_special_tilde_expansions (text) - char *text; +bash_special_tilde_expansions (char *text) { char *result; @@ -1097,7 +1106,7 @@ bash_special_tilde_expansions (text) well as handling special tilde prefixes; `:~" and `=~' are indications that we should do tilde expansion. */ void -tilde_initialize () +tilde_initialize (void) { static int times_called = 0; @@ -1143,8 +1152,7 @@ tilde_initialize () #define TILDE_END(c) ((c) == '\0' || (c) == '/' || (c) == ':') static int -unquoted_tilde_word (s) - const char *s; +unquoted_tilde_word (const char *s) { const char *r; @@ -1166,13 +1174,11 @@ unquoted_tilde_word (s) *LENP. FLAGS tells whether or not we're in an assignment context -- if so, `:' delimits the end of the tilde prefix as well. */ char * -bash_tilde_find_word (s, flags, lenp) - const char *s; - int flags, *lenp; +bash_tilde_find_word (const char *s, int flags, size_t *lenp) { const char *r; char *ret; - int l; + size_t l; for (r = s; *r && *r != '/'; r++) { @@ -1205,9 +1211,7 @@ bash_tilde_find_word (s, flags, lenp) ASSIGN_P is 2, we are expanding the rhs of an assignment statement, so `=~' is not valid. */ char * -bash_tilde_expand (s, assign_p) - const char *s; - int assign_p; +bash_tilde_expand (const char *s, int assign_p) { int r; char *ret; @@ -1241,7 +1245,7 @@ static GETGROUPS_T *group_array = (GETGROUPS_T *)NULL; #endif static void -initialize_group_array () +initialize_group_array (void) { register int i; @@ -1294,12 +1298,7 @@ initialize_group_array () /* Return non-zero if GID is one that we have in our groups list. */ int -#if defined (__STDC__) || defined ( _MINIX) group_member (gid_t gid) -#else -group_member (gid) - gid_t gid; -#endif /* !__STDC__ && !_MINIX */ { #if defined (HAVE_GETGROUPS) register int i; @@ -1327,8 +1326,7 @@ group_member (gid) } char ** -get_group_list (ngp) - int *ngp; +get_group_list (int *ngp) { static char **group_vector = (char **)NULL; register int i; @@ -1360,8 +1358,7 @@ get_group_list (ngp) } int * -get_group_array (ngp) - int *ngp; +get_group_array (int *ngp) { int i; static int *group_iarray = (int *)NULL; @@ -1402,7 +1399,7 @@ get_group_array (ngp) utilities. This uses Posix.2 configuration variables, if present. It uses a value defined in config.h as a last resort. */ char * -conf_standard_path () +conf_standard_path (void) { #if defined (_CS_PATH) && defined (HAVE_CONFSTR) char *p; @@ -1428,7 +1425,7 @@ conf_standard_path () } int -default_columns () +default_columns (void) { char *v; int c; @@ -1447,5 +1444,3 @@ default_columns () return (c > 0 ? c : 80); } - - diff --git a/general.h b/general.h index 8064c50eb..0528bbf1d 100644 --- a/general.h +++ b/general.h @@ -1,6 +1,6 @@ /* general.h -- defines that everybody likes to use. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -43,26 +43,14 @@ # include <limits.h> #endif +#include "unlocked-io.h" #include "xmalloc.h" -/* NULL pointer type. */ -#if !defined (NULL) -# if defined (__STDC__) -# define NULL ((void *) 0) -# else -# define NULL 0x0 -# endif /* !__STDC__ */ -#endif /* !NULL */ - /* Hardly used anymore */ #define pointer_to_int(x) (int)((char *)x - (char *)0) -#if defined (alpha) && defined (__GNUC__) && !defined (strchr) && !defined (__STDC__) -extern char *strchr (), *strrchr (); -#endif - #if !defined (strcpy) && (defined (HAVE_DECL_STRCPY) && !HAVE_DECL_STRCPY) -extern char *strcpy PARAMS((char *, const char *)); +extern char *strcpy (char *, const char *); #endif #if !defined (savestring) @@ -163,9 +151,19 @@ typedef struct { #endif /* !__GNUC__ */ /* String comparisons that possibly save a function call each. */ -#define STREQ(a, b) ((a)[0] == (b)[0] && strcmp(a, b) == 0) -#define STREQN(a, b, n) ((n == 0) ? (1) \ - : ((a)[0] == (b)[0] && strncmp(a, b, n) == 0)) +static inline int +STREQ(const char *a, const char *b) +{ + return ((a)[0] == (b)[0] && strcmp(a, b) == 0); +} + +static inline int +STREQN(const char *a, const char *b, size_t n) +{ + return ((n == 0) || + (n == 1 && a[0] == b[0]) || + ((a)[0] == (b)[0] && strncmp(a, b, n) == 0)); +} /* More convenience definitions that possibly save system or libc calls. */ #define STRLEN(s) (((s) && (s)[0]) ? ((s)[1] ? ((s)[2] ? strlen(s) : 2) : 1) : 0) @@ -190,62 +188,54 @@ typedef struct { } \ } while (0) -/* Function pointers can be declared as (Function *)foo. */ -#if !defined (_FUNCTION_DEF) -# define _FUNCTION_DEF -typedef int Function (); -typedef void VFunction (); -typedef char *CPFunction (); /* no longer used */ -typedef char **CPPFunction (); /* no longer used */ -#endif /* _FUNCTION_DEF */ - #ifndef SH_FUNCTION_TYPEDEF # define SH_FUNCTION_TYPEDEF /* Shell function typedefs with prototypes */ /* `Generic' function pointer typedefs */ -typedef int sh_intfunc_t PARAMS((int)); -typedef int sh_ivoidfunc_t PARAMS((void)); -typedef int sh_icpfunc_t PARAMS((char *)); -typedef int sh_icppfunc_t PARAMS((char **)); -typedef int sh_iptrfunc_t PARAMS((PTR_T)); +typedef int sh_intfunc_t (int); +typedef int sh_ivoidfunc_t (void); +typedef int sh_icpfunc_t (char *); +typedef int sh_icppfunc_t (char **); +typedef int sh_iptrfunc_t (PTR_T); -typedef void sh_voidfunc_t PARAMS((void)); -typedef void sh_vintfunc_t PARAMS((int)); -typedef void sh_vcpfunc_t PARAMS((char *)); -typedef void sh_vcppfunc_t PARAMS((char **)); -typedef void sh_vptrfunc_t PARAMS((PTR_T)); +typedef void sh_voidfunc_t (void); +typedef void sh_vintfunc_t (int); +typedef void sh_vcpfunc_t (char *); +typedef void sh_vcppfunc_t (char **); +typedef void sh_vptrfunc_t (PTR_T); -typedef int sh_wdesc_func_t PARAMS((WORD_DESC *)); -typedef int sh_wlist_func_t PARAMS((WORD_LIST *)); +typedef int sh_wdesc_func_t (WORD_DESC *); +typedef int sh_wlist_func_t (WORD_LIST *); -typedef int sh_glist_func_t PARAMS((GENERIC_LIST *)); +typedef int sh_glist_func_t (GENERIC_LIST *); +typedef int sh_gcp_func_t (GENERIC_LIST *, char *); -typedef char *sh_string_func_t PARAMS((char *)); /* like savestring, et al. */ +typedef char *sh_string_func_t (char *); /* like savestring, et al. */ -typedef int sh_msg_func_t PARAMS((const char *, ...)); /* printf(3)-like */ -typedef void sh_vmsg_func_t PARAMS((const char *, ...)); /* printf(3)-like */ +typedef int sh_msg_func_t (const char *, ...); /* printf(3)-like */ +typedef void sh_vmsg_func_t (const char *, ...); /* printf(3)-like */ /* Specific function pointer typedefs. Most of these could be done with #defines. */ -typedef void sh_sv_func_t PARAMS((char *)); /* sh_vcpfunc_t */ -typedef void sh_free_func_t PARAMS((PTR_T)); /* sh_vptrfunc_t */ -typedef void sh_resetsig_func_t PARAMS((int)); /* sh_vintfunc_t */ +typedef void sh_sv_func_t (const char *); +typedef void sh_free_func_t (PTR_T); /* sh_vptrfunc_t */ +typedef void sh_resetsig_func_t (int); /* sh_vintfunc_t */ -typedef int sh_ignore_func_t PARAMS((const char *)); /* sh_icpfunc_t */ +typedef int sh_ignore_func_t (const char *); /* sh_icpfunc_t */ -typedef int sh_assign_func_t PARAMS((const char *)); -typedef int sh_wassign_func_t PARAMS((WORD_DESC *, int)); +typedef int sh_assign_func_t (const char *); +typedef int sh_wassign_func_t (const WORD_DESC *, int); -typedef int sh_load_func_t PARAMS((char *)); -typedef void sh_unload_func_t PARAMS((char *)); +typedef int sh_load_func_t (char *); +typedef void sh_unload_func_t (char *); -typedef int sh_builtin_func_t PARAMS((WORD_LIST *)); /* sh_wlist_func_t */ +typedef int sh_builtin_func_t (WORD_LIST *); /* sh_wlist_func_t */ #endif /* SH_FUNCTION_TYPEDEF */ -#define NOW ((time_t) time ((time_t *) 0)) +#define NOW getnow() #define GETTIME(tv) gettimeofday(&(tv), NULL) /* Some defines for calling file status functions. */ @@ -261,11 +251,7 @@ typedef int sh_builtin_func_t PARAMS((WORD_LIST *)); /* sh_wlist_func_t */ #define HIGH_FD_MAX 256 /* The type of function passed as the fourth argument to qsort(3). */ -#ifdef __STDC__ typedef int QSFUNC (const void *, const void *); -#else -typedef int QSFUNC (); -#endif /* Some useful definitions for Unix pathnames. Argument convention: x == string, c == character */ @@ -296,77 +282,79 @@ typedef int QSFUNC (); #if 0 /* Declarations for functions defined in xmalloc.c */ -extern PTR_T xmalloc PARAMS((size_t)); -extern PTR_T xrealloc PARAMS((void *, size_t)); -extern void xfree PARAMS((void *)); +extern PTR_T xmalloc (size_t); +extern PTR_T xrealloc (void *, size_t); +extern void xfree (void *); #endif /* Declarations for functions defined in general.c */ -extern void posix_initialize PARAMS((int)); +extern void posix_initialize (int); -extern int num_posix_options PARAMS((void)); -extern char *get_posix_options PARAMS((char *)); -extern void set_posix_options PARAMS((const char *)); +extern size_t num_posix_options (void); +extern char *get_posix_options (char *); +extern void set_posix_options (const char *); -extern void save_posix_options PARAMS((void)); +extern void save_posix_options (void); #if defined (RLIMTYPE) -extern RLIMTYPE string_to_rlimtype PARAMS((char *)); -extern void print_rlimtype PARAMS((RLIMTYPE, int)); +extern RLIMTYPE string_to_rlimtype (const char *, char **); +extern void print_rlimtype (RLIMTYPE, int); #endif -extern int all_digits PARAMS((const char *)); -extern int legal_number PARAMS((const char *, intmax_t *)); -extern int legal_identifier PARAMS((const char *)); -extern int importable_function_name PARAMS((const char *, size_t)); -extern int exportable_function_name PARAMS((const char *)); -extern int check_identifier PARAMS((WORD_DESC *, int)); -extern int valid_nameref_value PARAMS((const char *, int)); -extern int check_selfref PARAMS((const char *, char *, int)); -extern int legal_alias_name PARAMS((const char *, int)); -extern int line_isblank PARAMS((const char *)); -extern int assignment PARAMS((const char *, int)); - -extern int sh_unset_nodelay_mode PARAMS((int)); -extern int sh_setclexec PARAMS((int)); -extern int sh_validfd PARAMS((int)); -extern int fd_ispipe PARAMS((int)); -extern void check_dev_tty PARAMS((void)); -extern int move_to_high_fd PARAMS((int, int, int)); -extern int check_binary_file PARAMS((const char *, int)); +extern int all_digits (const char *); +extern int valid_number (const char *, intmax_t *); +extern int valid_identifier (const char *); +extern int importable_function_name (const char *, size_t); +extern int exportable_function_name (const char *); +extern int check_identifier (WORD_DESC *, int); +extern int valid_nameref_value (const char *, int); +extern int check_selfref (const char *, char *, int); +extern int valid_alias_name (const char *, int); +extern int valid_function_name (const char *, int); +extern int valid_function_word (WORD_DESC *, int); +extern int line_isblank (const char *); +extern int assignment (const char *, int); + +extern int sh_unset_nodelay_mode (int); +extern int sh_setclexec (int); +extern int sh_validfd (int); +extern int fd_ispipe (int); +extern void check_dev_tty (void); +extern int move_to_high_fd (int, int, int); +extern int check_binary_file (const char *, int); #ifdef _POSIXSTAT_H_ -extern int same_file PARAMS((const char *, const char *, struct stat *, struct stat *)); +extern int same_file (const char *, const char *, struct stat *, struct stat *); #endif -extern int sh_openpipe PARAMS((int *)); -extern int sh_closepipe PARAMS((int *)); +extern int sh_openpipe (int *); +extern int sh_closepipe (int *); -extern int file_exists PARAMS((const char *)); -extern int file_isdir PARAMS((const char *)); -extern int file_iswdir PARAMS((const char *)); -extern int path_dot_or_dotdot PARAMS((const char *)); -extern int absolute_pathname PARAMS((const char *)); -extern int absolute_program PARAMS((const char *)); +extern int file_exists (const char *); +extern int file_isdir (const char *); +extern int file_iswdir (const char *); +extern int path_dot_or_dotdot (const char *); +extern int absolute_pathname (const char *); +extern int absolute_program (const char *); -extern char *make_absolute PARAMS((const char *, const char *)); -extern char *base_pathname PARAMS((char *)); -extern char *full_pathname PARAMS((char *)); -extern char *polite_directory_format PARAMS((char *)); -extern char *trim_pathname PARAMS((char *, int)); -extern char *printable_filename PARAMS((char *, int)); +extern char *make_absolute (const char *, const char *); +extern char *base_pathname (char *); +extern char *full_pathname (char *); +extern char *polite_directory_format (char *); +extern char *trim_pathname (char *, int); +extern char *printable_filename (char *, int); -extern char *extract_colon_unit PARAMS((char *, int *)); +extern char *extract_colon_unit (char *, int *); -extern void tilde_initialize PARAMS((void)); -extern char *bash_tilde_find_word PARAMS((const char *, int, int *)); -extern char *bash_tilde_expand PARAMS((const char *, int)); +extern void tilde_initialize (void); +extern char *bash_tilde_find_word (const char *, int, size_t *); +extern char *bash_tilde_expand (const char *, int); -extern int group_member PARAMS((gid_t)); -extern char **get_group_list PARAMS((int *)); -extern int *get_group_array PARAMS((int *)); +extern int group_member (gid_t); +extern char **get_group_list (int *); +extern int *get_group_array (int *); -extern char *conf_standard_path PARAMS((void)); -extern int default_columns PARAMS((void)); +extern char *conf_standard_path (void); +extern int default_columns (void); #endif /* _GENERAL_H_ */ diff --git a/hashcmd.c b/hashcmd.c index 891f967a5..62e080be7 100644 --- a/hashcmd.c +++ b/hashcmd.c @@ -1,7 +1,7 @@ /* hashcmd.c - functions for managing a hash table mapping command names to full pathnames. */ -/* Copyright (C) 1997-2021 Free Software Foundation, Inc. +/* Copyright (C) 1997-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -37,25 +37,24 @@ HASH_TABLE *hashed_filenames = (HASH_TABLE *)NULL; -static void phash_freedata PARAMS((PTR_T)); +static void phash_freedata (PTR_T); void -phash_create () +phash_create (void) { if (hashed_filenames == 0) hashed_filenames = hash_create (FILENAME_HASH_BUCKETS); } static void -phash_freedata (data) - PTR_T data; +phash_freedata (PTR_T data) { free (((PATH_DATA *)data)->path); free (data); } void -phash_flush () +phash_flush (void) { if (hashed_filenames) hash_flush (hashed_filenames, phash_freedata); @@ -63,14 +62,16 @@ phash_flush () /* Remove FILENAME from the table of hashed commands. */ int -phash_remove (filename) - const char *filename; +phash_remove (const char *filename) { register BUCKET_CONTENTS *item; - if (hashing_enabled == 0 || hashed_filenames == 0) + if (hashing_enabled == 0) return 0; + if (hashed_filenames == 0) + return 1; + item = hash_remove (filename, hashed_filenames, 0); if (item) { @@ -89,9 +90,7 @@ phash_remove (filename) in a directory in $PATH that is not an absolute pathname. FOUND is the initial value for times_found. */ void -phash_insert (filename, full_path, check_dot, found) - char *filename, *full_path; - int check_dot, found; +phash_insert (char *filename, char *full_path, int check_dot, int found) { register BUCKET_CONTENTS *item; @@ -124,8 +123,7 @@ phash_insert (filename, full_path, check_dot, found) returns a newly-allocated string; the caller is responsible for freeing it. */ char * -phash_search (filename) - const char *filename; +phash_search (const char *filename) { register BUCKET_CONTENTS *item; char *path, *dotted_filename, *tail; diff --git a/hashcmd.h b/hashcmd.h index 2459f2004..9b9e882a1 100644 --- a/hashcmd.h +++ b/hashcmd.h @@ -1,6 +1,6 @@ /* hashcmd.h - Common defines for hashing filenames. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,9 +35,9 @@ typedef struct _pathdata { #define pathdata(x) ((PATH_DATA *)(x)->data) -extern void phash_create PARAMS((void)); -extern void phash_flush PARAMS((void)); +extern void phash_create (void); +extern void phash_flush (void); -extern void phash_insert PARAMS((char *, char *, int, int)); -extern int phash_remove PARAMS((const char *)); -extern char *phash_search PARAMS((const char *)); +extern void phash_insert (char *, char *, int, int); +extern int phash_remove (const char *); +extern char *phash_search (const char *); diff --git a/hashlib.c b/hashlib.c index 4a7e8132b..a9df3ed60 100644 --- a/hashlib.c +++ b/hashlib.c @@ -1,6 +1,6 @@ /* hashlib.c -- functions to manage and access hash tables for bash. */ -/* Copyright (C) 1987,1989,1991,1995,1998,2001,2003,2005,2006,2008,2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-1991,1995,1998,2001-2009,2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -50,17 +50,16 @@ don't discard the upper 32 bits of the value, if present. */ #define HASH_BUCKET(s, t, h) (((h) = hash_string (s)) & ((t)->nbuckets - 1)) -static BUCKET_CONTENTS *copy_bucket_array PARAMS((BUCKET_CONTENTS *, sh_string_func_t *)); +static BUCKET_CONTENTS *copy_bucket_array (BUCKET_CONTENTS *, sh_string_func_t *); -static void hash_rehash PARAMS((HASH_TABLE *, int)); -static void hash_grow PARAMS((HASH_TABLE *)); -static void hash_shrink PARAMS((HASH_TABLE *)); +static void hash_rehash (HASH_TABLE *, int); +static void hash_grow (HASH_TABLE *); +static void hash_shrink (HASH_TABLE *); /* Make a new hash table with BUCKETS number of buckets. Initialize each slot in the table to NULL. */ HASH_TABLE * -hash_create (buckets) - int buckets; +hash_create (int buckets) { HASH_TABLE *new_table; register int i; @@ -81,16 +80,15 @@ hash_create (buckets) } int -hash_size (table) - HASH_TABLE *table; +hash_size (HASH_TABLE *table) { return (HASH_ENTRIES(table)); } +/* Copy a hash table bucket array. Call (*cpdata) to copy the data from + each element. */ static BUCKET_CONTENTS * -copy_bucket_array (ba, cpdata) - BUCKET_CONTENTS *ba; - sh_string_func_t *cpdata; /* data copy function */ +copy_bucket_array (BUCKET_CONTENTS *ba, sh_string_func_t *cpdata) { BUCKET_CONTENTS *new_bucket, *n, *e; @@ -122,9 +120,7 @@ copy_bucket_array (ba, cpdata) } static void -hash_rehash (table, nsize) - HASH_TABLE *table; - int nsize; +hash_rehash (HASH_TABLE *table, int nsize) { int osize, i, j; BUCKET_CONTENTS **old_bucket_array, *item, *next; @@ -155,8 +151,7 @@ hash_rehash (table, nsize) } static void -hash_grow (table) - HASH_TABLE *table; +hash_grow (HASH_TABLE *table) { int nsize; @@ -166,8 +161,7 @@ hash_grow (table) } static void -hash_shrink (table) - HASH_TABLE *table; +hash_shrink (HASH_TABLE *table) { int nsize; @@ -175,10 +169,9 @@ hash_shrink (table) hash_rehash (table, nsize); } +/* Copy an entire hash table. (*cpdata) copies the data in each element. */ HASH_TABLE * -hash_copy (table, cpdata) - HASH_TABLE *table; - sh_string_func_t *cpdata; +hash_copy (HASH_TABLE *table, sh_string_func_t *cpdata) { HASH_TABLE *new_table; int i; @@ -212,8 +205,7 @@ FNV_PRIME 1099511628211 /* The `khash' check below requires that strings that compare equally with strcmp hash to the same value. */ unsigned int -hash_string (s) - const char *s; +hash_string (const char *s) { register unsigned int i; @@ -233,9 +225,7 @@ hash_string (s) for STRING. TABLE is a pointer to a HASH_TABLE. */ int -hash_bucket (string, table) - const char *string; - HASH_TABLE *table; +hash_bucket (const char *string, HASH_TABLE *table) { unsigned int h; @@ -245,10 +235,7 @@ hash_bucket (string, table) /* Return a pointer to the hashed item. If the HASH_CREATE flag is passed, create a new hash table entry for STRING, otherwise return NULL. */ BUCKET_CONTENTS * -hash_search (string, table, flags) - const char *string; - HASH_TABLE *table; - int flags; +hash_search (const char *string, HASH_TABLE *table, int flags) { BUCKET_CONTENTS *list; int bucket; @@ -297,10 +284,7 @@ hash_search (string, table, flags) The item removed is returned, so you can free its contents. If the item isn't in this table NULL is returned. */ BUCKET_CONTENTS * -hash_remove (string, table, flags) - const char *string; - HASH_TABLE *table; - int flags; +hash_remove (const char *string, HASH_TABLE *table, int flags) { int bucket; BUCKET_CONTENTS *prev, *temp; @@ -331,10 +315,7 @@ hash_remove (string, table, flags) /* Create an entry for STRING, in TABLE. If the entry already exists, then return it (unless the HASH_NOSRCH flag is set). */ BUCKET_CONTENTS * -hash_insert (string, table, flags) - char *string; - HASH_TABLE *table; - int flags; +hash_insert (char *string, HASH_TABLE *table, int flags) { BUCKET_CONTENTS *item; int bucket; @@ -372,9 +353,7 @@ hash_insert (string, table, flags) is a function to call to dispose of a hash item's data. Otherwise, free() is called. */ void -hash_flush (table, free_data) - HASH_TABLE *table; - sh_free_func_t *free_data; +hash_flush (HASH_TABLE *table, sh_free_func_t *free_data) { int i; register BUCKET_CONTENTS *bucket, *item; @@ -406,17 +385,16 @@ hash_flush (table, free_data) /* Free the hash table pointed to by TABLE. */ void -hash_dispose (table) - HASH_TABLE *table; +hash_dispose (HASH_TABLE *table) { free (table->bucket_array); free (table); } +/* Call (*FUNC) for each element in TABLE. If FUNC returns < 0, abort the + walk. */ void -hash_walk (table, func) - HASH_TABLE *table; - hash_wfunc *func; +hash_walk (HASH_TABLE *table, hash_wfunc *func) { register int i; BUCKET_CONTENTS *item; @@ -434,9 +412,7 @@ hash_walk (table, func) #if defined (DEBUG) || defined (TEST_HASHING) void -hash_pstats (table, name) - HASH_TABLE *table; - char *name; +hash_pstats (HASH_TABLE *table, char *name) { register int slot, bcount; register BUCKET_CONTENTS *bc; @@ -477,8 +453,7 @@ int interrupt_immediately = 0; int running_trap = 0; int -signal_is_trapped (s) - int s; +signal_is_trapped (int s) { return (0); } @@ -501,7 +476,7 @@ internal_warning (const char *format, ...) } int -main () +main (int c, char **v) { char string[256]; int count = 0; diff --git a/hashlib.h b/hashlib.h index cf2de9884..0351ae9d1 100644 --- a/hashlib.h +++ b/hashlib.h @@ -1,6 +1,6 @@ /* hashlib.h -- the data structures used in hashing in Bash. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -24,11 +24,7 @@ #include "stdc.h" #ifndef PTR_T -# ifdef __STDC__ -# define PTR_T void * -# else -# define PTR_T char * -# endif +# define PTR_T void * #endif typedef struct bucket_contents { @@ -45,26 +41,26 @@ typedef struct hash_table { int nentries; /* How many entries does this table have. */ } HASH_TABLE; -typedef int hash_wfunc PARAMS((BUCKET_CONTENTS *)); +typedef int hash_wfunc (BUCKET_CONTENTS *); /* Operations on tables as a whole */ -extern HASH_TABLE *hash_create PARAMS((int)); -extern HASH_TABLE *hash_copy PARAMS((HASH_TABLE *, sh_string_func_t *)); -extern void hash_flush PARAMS((HASH_TABLE *, sh_free_func_t *)); -extern void hash_dispose PARAMS((HASH_TABLE *)); -extern void hash_walk PARAMS((HASH_TABLE *, hash_wfunc *)); +extern HASH_TABLE *hash_create (int); +extern HASH_TABLE *hash_copy (HASH_TABLE *, sh_string_func_t *); +extern void hash_flush (HASH_TABLE *, sh_free_func_t *); +extern void hash_dispose (HASH_TABLE *); +extern void hash_walk (HASH_TABLE *, hash_wfunc *); /* Operations to extract information from or pieces of tables */ -extern int hash_bucket PARAMS((const char *, HASH_TABLE *)); -extern int hash_size PARAMS((HASH_TABLE *)); +extern int hash_bucket (const char *, HASH_TABLE *); +extern int hash_size (HASH_TABLE *); /* Operations on hash table entries */ -extern BUCKET_CONTENTS *hash_search PARAMS((const char *, HASH_TABLE *, int)); -extern BUCKET_CONTENTS *hash_insert PARAMS((char *, HASH_TABLE *, int)); -extern BUCKET_CONTENTS *hash_remove PARAMS((const char *, HASH_TABLE *, int)); +extern BUCKET_CONTENTS *hash_search (const char *, HASH_TABLE *, int); +extern BUCKET_CONTENTS *hash_insert (char *, HASH_TABLE *, int); +extern BUCKET_CONTENTS *hash_remove (const char *, HASH_TABLE *, int); /* Miscellaneous */ -extern unsigned int hash_string PARAMS((const char *)); +extern unsigned int hash_string (const char *); /* Redefine the function as a macro for speed. */ #define hash_items(bucket, table) \ @@ -81,12 +77,4 @@ extern unsigned int hash_string PARAMS((const char *)); #define HASH_NOSRCH 0x01 #define HASH_CREATE 0x02 -#if !defined (NULL) -# if defined (__STDC__) -# define NULL ((void *) 0) -# else -# define NULL 0x0 -# endif /* !__STDC__ */ -#endif /* !NULL */ - #endif /* _HASHLIB_H */ diff --git a/include/ansi_stdlib.h b/include/ansi_stdlib.h index 7dc2ee0cf..3cb3e0717 100644 --- a/include/ansi_stdlib.h +++ b/include/ansi_stdlib.h @@ -2,7 +2,7 @@ /* A minimal stdlib.h containing extern declarations for those functions that bash uses. */ -/* Copyright (C) 1993 Free Software Foundation, Inc. +/* Copyright (C) 1993,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -32,13 +32,7 @@ extern double strtod (); /* Memory allocation functions. */ /* Generic pointer type. */ #ifndef PTR_T - -#if defined (__STDC__) # define PTR_T void * -#else -# define PTR_T char * -#endif - #endif /* PTR_T */ extern PTR_T malloc (); diff --git a/include/memalloc.h b/include/memalloc.h index 57318b9d3..e850e8a11 100644 --- a/include/memalloc.h +++ b/include/memalloc.h @@ -1,7 +1,7 @@ /* memalloc.h -- consolidate code for including alloca.h or malloc.h and defining alloca. */ -/* Copyright (C) 1993 Free Software Foundation, Inc. +/* Copyright (C) 1993,2003 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -45,17 +45,9 @@ # include <alloca.h> # endif /* !IBMESA */ # else /* !HAVE_ALLOCA_H || C_ALLOCA */ -# if defined (__hpux) && defined (__STDC__) && !defined (alloca) -extern void *alloca (); -# else -# if !defined (alloca) -# if defined (__STDC__) +# if !defined (alloca) extern void *alloca (size_t); -# else -extern char *alloca (); -# endif /* !__STDC__ */ -# endif /* !alloca */ -# endif /* !__hpux || !__STDC__ && !alloca */ +# endif /* !alloca */ # endif /* !HAVE_ALLOCA_H || C_ALLOCA */ #endif /* !__GNUC__ || C_ALLOCA */ diff --git a/include/ocache.h b/include/ocache.h index c596c2725..b25c9baa0 100644 --- a/include/ocache.h +++ b/include/ocache.h @@ -1,6 +1,6 @@ /* ocache.h -- a minimal object caching implementation. */ -/* Copyright (C) 2002 Free Software Foundation, Inc. +/* Copyright (C) 2002,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -22,13 +22,7 @@ #define _OCACHE_H_ 1 #ifndef PTR_T - -#if defined (__STDC__) # define PTR_T void * -#else -# define PTR_T char * -#endif - #endif /* PTR_T */ #define OC_MEMSET(memp, xch, nbytes) \ diff --git a/include/posixselect.h b/include/posixselect.h index da6a1ace0..9d54e1889 100644 --- a/include/posixselect.h +++ b/include/posixselect.h @@ -21,13 +21,13 @@ #ifndef _POSIXSELECT_H_ #define _POSIXSELECT_H_ -#if defined (FD_SET) && !defined (HAVE_SELECT) +#if defined (FD_SET) && !defined (HAVE_SELECT) && !defined (_WIN32) # define HAVE_SELECT 1 #endif #if defined (HAVE_SELECT) # if !defined (HAVE_SYS_SELECT_H) || !defined (M_UNIX) -# include <sys/time.h> +# include "posixtime.h" # endif #endif /* HAVE_SELECT */ #if defined (HAVE_SYS_SELECT_H) diff --git a/include/posixtime.h b/include/posixtime.h index e70ebec67..a731b006a 100644 --- a/include/posixtime.h +++ b/include/posixtime.h @@ -1,6 +1,6 @@ /* posixtime.h -- wrapper for time.h, sys/times.h mess. */ -/* Copyright (C) 1999-2021 Free Software Foundation, Inc. +/* Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -49,9 +49,18 @@ struct timeval #endif #if !HAVE_GETTIMEOFDAY -extern int gettimeofday PARAMS((struct timeval *, void *)); +extern int gettimeofday (struct timeval * restrict, void * restrict); #endif +/* consistently use gettimeofday for time information */ +static inline time_t +getnow(void) +{ + struct timeval now; + gettimeofday (&now, 0); + return now.tv_sec; +} + /* These exist on BSD systems, at least. */ #if !defined (timerclear) # define timerclear(tvp) do { (tvp)->tv_sec = 0; (tvp)->tv_usec = 0; } while (0) diff --git a/include/shmbchar.h b/include/shmbchar.h index 27b0024fb..bb4c1d311 100644 --- a/include/shmbchar.h +++ b/include/shmbchar.h @@ -71,6 +71,21 @@ is_basic (char c) & 1; } +#if 0 +/* XXX - FUTURE */ +/* All locale encodings (see localcharset.h) map the characters 0x00..0x7F + to U+0000..U+007F, like ASCII, except for + CP864 different mapping of '%' + SHIFT_JIS different mappings of 0x5C, 0x7E + JOHAB different mapping of 0x5C + However, these characters in the range 0x20..0x7E are in the ISO C + "basic character set" and in the POSIX "portable character set", which + ISO C and POSIX guarantee to be single-byte. Thus, locales with these + encodings are not POSIX compliant. And they are most likely not in use + any more (as of 2023). */ +#define is_basic(c) ((unsigned char) (c) < 0x80) +#endif + #else static inline int diff --git a/include/shmbutil.h b/include/shmbutil.h index 0f711eab7..a8a59bf1a 100644 --- a/include/shmbutil.h +++ b/include/shmbutil.h @@ -1,6 +1,6 @@ /* shmbutil.h -- utility functions for multibyte characters. */ -/* Copyright (C) 2002-2019 Free Software Foundation, Inc. +/* Copyright (C) 2002-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,13 +29,13 @@ #if defined (HANDLE_MULTIBYTE) #include "shmbchar.h" -extern size_t xwcsrtombs PARAMS((char *, const wchar_t **, size_t, mbstate_t *)); -extern size_t xmbsrtowcs PARAMS((wchar_t *, const char **, size_t, mbstate_t *)); -extern size_t xdupmbstowcs PARAMS((wchar_t **, char ***, const char *)); +extern size_t xwcsrtombs (char *, const wchar_t **, size_t, mbstate_t *); +extern size_t xmbsrtowcs (wchar_t *, const char **, size_t, mbstate_t *); +extern size_t xdupmbstowcs (wchar_t **, char ***, const char *); -extern size_t mbstrlen PARAMS((const char *)); +extern size_t mbstrlen (const char *); -extern char *xstrchr PARAMS((const char *, int)); +extern char *xstrchr (const char *, int); extern int locale_mb_cur_max; /* XXX */ extern int locale_utf8locale; /* XXX */ @@ -55,6 +55,9 @@ extern int locale_utf8locale; /* XXX */ #define UTF8_MBFIRSTCHAR(c) (((c) & 0xc0) == 0xc0) #define UTF8_MBCHAR(c) (((c) & 0xc0) == 0x80) +/* Is an eight-bit quantity a valid character in the current locale? */ +#define VALID_SINGLEBYTE_CHAR(c) (locale_utf8locale == 0 || ((c) & 0x80) == 0) + #else /* !HANDLE_MULTIBYTE */ #undef MB_LEN_MAX @@ -83,6 +86,8 @@ extern int locale_utf8locale; /* XXX */ #define UTF8_SINGLEBYTE(c) (1) #define UTF8_MBFIRSTCHAR(c) (0) +#defined VALID_SINGLEBYTE_CHAR(c) (1) + #endif /* !HANDLE_MULTIBYTE */ /* Declare and initialize a multibyte state. Call must be terminated @@ -556,4 +561,25 @@ extern int locale_utf8locale; /* XXX */ goto add_string #endif /* HANDLE_MULTIBYTE */ + +#if defined (HANDLE_MULTIBYTE) +static inline size_t +mbcharlen(char *s, size_t maxlen) +{ + size_t l; + DECLARE_MBSTATE; + + if (maxlen == 1 || is_basic (*s)) + return 1; + else if (locale_utf8locale && UTF8_SINGLEBYTE (*s)) + return (*s != 0); + else + l = mbrlen (s, maxlen, &state); + if (MB_INVALIDCH (l)) + return (1); + return l; +} +#else +#define mbcharlen(s, n) (1) +#endif /* HANDLE_MULTIBYTE */ #endif /* _SH_MBUTIL_H_ */ diff --git a/include/shtty.h b/include/shtty.h index fdf379b89..d1fac33af 100644 --- a/include/shtty.h +++ b/include/shtty.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1999-2020 Free Software Foundation, Inc. */ +/* Copyright (C) 1999-2020,2022 Free Software Foundation, Inc. */ /* This file is part of GNU Bash, the Bourne Again SHell. @@ -67,24 +67,24 @@ /* Get and set terminal attributes for the file descriptor passed as an argument. */ -extern int ttgetattr PARAMS((int, TTYSTRUCT *)); -extern int ttsetattr PARAMS((int, TTYSTRUCT *)); +extern int ttgetattr (int, TTYSTRUCT *); +extern int ttsetattr (int, TTYSTRUCT *); /* Save and restore the terminal's attributes from static storage. */ -extern void ttsave PARAMS((void)); -extern void ttrestore PARAMS((void)); +extern void ttsave (void); +extern void ttrestore (void); /* Return the attributes corresponding to the file descriptor (0 or 1) passed as an argument. */ -extern TTYSTRUCT *ttattr PARAMS((int)); +extern TTYSTRUCT *ttattr (int); /* These functions only operate on the passed TTYSTRUCT; they don't actually change anything with the kernel's current tty settings. */ -extern int tt_setonechar PARAMS((TTYSTRUCT *)); -extern int tt_setnoecho PARAMS((TTYSTRUCT *)); -extern int tt_seteightbit PARAMS((TTYSTRUCT *)); -extern int tt_setnocanon PARAMS((TTYSTRUCT *)); -extern int tt_setcbreak PARAMS((TTYSTRUCT *)); +extern int tt_setonechar (TTYSTRUCT *); +extern int tt_setnoecho (TTYSTRUCT *); +extern int tt_seteightbit (TTYSTRUCT *); +extern int tt_setnocanon (TTYSTRUCT *); +extern int tt_setcbreak (TTYSTRUCT *); /* These functions are all generally mutually exclusive. If you call more than one (bracketed with calls to ttsave and ttrestore, of @@ -94,19 +94,19 @@ extern int tt_setcbreak PARAMS((TTYSTRUCT *)); /* These functions work with a given file descriptor and set terminal attributes */ -extern int ttfd_onechar PARAMS((int, TTYSTRUCT *)); -extern int ttfd_noecho PARAMS((int, TTYSTRUCT *)); -extern int ttfd_eightbit PARAMS((int, TTYSTRUCT *)); -extern int ttfd_nocanon PARAMS((int, TTYSTRUCT *)); +extern int ttfd_onechar (int, TTYSTRUCT *); +extern int ttfd_noecho (int, TTYSTRUCT *); +extern int ttfd_eightbit (int, TTYSTRUCT *); +extern int ttfd_nocanon (int, TTYSTRUCT *); -extern int ttfd_cbreak PARAMS((int, TTYSTRUCT *)); +extern int ttfd_cbreak (int, TTYSTRUCT *); /* These functions work with fd 0 and the TTYSTRUCT saved with ttsave () */ -extern int ttonechar PARAMS((void)); -extern int ttnoecho PARAMS((void)); -extern int tteightbit PARAMS((void)); -extern int ttnocanon PARAMS((void)); +extern int ttonechar (void); +extern int ttnoecho (void); +extern int tteightbit (void); +extern int ttnocanon (void); -extern int ttcbreak PARAMS((void)); +extern int ttcbreak (void); #endif diff --git a/include/stdc.h b/include/stdc.h index 38516ae5d..7948b4f8b 100644 --- a/include/stdc.h +++ b/include/stdc.h @@ -1,7 +1,7 @@ /* stdc.h -- macros to make source compile on both ANSI C and K&R C compilers. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2021,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -52,6 +52,9 @@ # if !defined (volatile) # define volatile __volatile # endif +# if !defined (restrict) +# define restrict __restrict +# endif #else /* !__GNUC__ */ # if !defined (inline) # define inline @@ -62,6 +65,9 @@ # if !defined (volatile) # define volatile # endif +# if !defined (restrict) +# define restrict +# endif #endif /* !__GNUC__ */ #endif /* !__STDC__ */ @@ -80,10 +86,4 @@ # define INLINE #endif -#if defined (PREFER_STDARG) -# define SH_VA_START(va, arg) va_start(va, arg) -#else -# define SH_VA_START(va, arg) va_start(va) -#endif - #endif /* !_STDC_H_ */ diff --git a/include/systimes.h b/include/systimes.h index aefcab7f2..f5bc3831b 100644 --- a/include/systimes.h +++ b/include/systimes.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2020 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -49,7 +49,7 @@ struct tms Return the elapsed real time from an arbitrary point in the past (the bash emulation uses the epoch), or (clock_t) -1 for errors. All times are in CLK_TCKths of a second. */ -extern clock_t times PARAMS((struct tms *buffer)); +extern clock_t times (struct tms *buffer); #endif /* !HAVE_SYS_TIMES_H */ #endif /* _BASH_SYSTIMES_H */ diff --git a/input.c b/input.c index 7b439f8c8..ad1ebefdb 100644 --- a/input.c +++ b/input.c @@ -1,6 +1,6 @@ /* input.c -- functions to perform buffered input with synchronization. */ -/* Copyright (C) 1992-2021 Free Software Foundation, Inc. +/* Copyright (C) 1992-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -57,7 +57,7 @@ extern int errno; # define X_EWOULDBLOCK -99 #endif -extern void termsig_handler PARAMS((int)); +extern void termsig_handler (int); /* Functions to handle reading input on systems that don't restart read(2) if a signal is received. */ @@ -69,8 +69,7 @@ static int local_index = 0, local_bufused = 0; interrupted by a signal. We do the read ourselves, and restart it if it returns EINTR. */ int -getc_with_restart (stream) - FILE *stream; +getc_with_restart (FILE *stream) { unsigned char uc; @@ -117,9 +116,7 @@ getc_with_restart (stream) } int -ungetc_with_restart (c, stream) - int c; - FILE *stream; +ungetc_with_restart (int c, FILE *stream) { if (local_index == 0 || c == EOF) return EOF; @@ -127,8 +124,6 @@ ungetc_with_restart (c, stream) return c; } -#if defined (BUFFERED_INPUT) - /* A facility similar to stdio, but input-only. */ #if defined (USING_BASH_MALLOC) @@ -165,8 +160,7 @@ static int nbuffers; /* Make sure `buffers' has at least N elements. */ static void -allocate_buffers (n) - int n; +allocate_buffers (int n) { register int i, orig_nbuffers; @@ -183,10 +177,7 @@ allocate_buffers (n) /* Construct and return a BUFFERED_STREAM corresponding to file descriptor FD, using BUFFER. */ static BUFFERED_STREAM * -make_buffered_stream (fd, buffer, bufsize) - int fd; - char *buffer; - size_t bufsize; +make_buffered_stream (int fd, char *buffer, size_t bufsize) { BUFFERED_STREAM *bp; @@ -196,7 +187,8 @@ make_buffered_stream (fd, buffer, bufsize) bp->b_fd = fd; bp->b_buffer = buffer; bp->b_size = bufsize; - bp->b_used = bp->b_inputp = bp->b_flag = 0; + bp->b_used = 0; + bp->b_inputp = bp->b_flag = 0; if (bufsize == 1) bp->b_flag |= B_UNBUFF; if (O_TEXT && (fcntl (fd, F_GETFL) & O_TEXT) != 0) @@ -206,8 +198,7 @@ make_buffered_stream (fd, buffer, bufsize) /* Allocate a new BUFFERED_STREAM, copy BP to it, and return the new copy. */ static BUFFERED_STREAM * -copy_buffered_stream (bp) - BUFFERED_STREAM *bp; +copy_buffered_stream (BUFFERED_STREAM *bp) { BUFFERED_STREAM *nbp; @@ -220,8 +211,7 @@ copy_buffered_stream (bp) } int -set_bash_input_fd (fd) - int fd; +set_bash_input_fd (int fd) { if (bash_input.type == st_bstream) bash_input.location.buffered_fd = fd; @@ -231,8 +221,7 @@ set_bash_input_fd (fd) } int -fd_is_bash_input (fd) - int fd; +fd_is_bash_input (int fd) { if (bash_input.type == st_bstream && bash_input.location.buffered_fd == fd) return 1; @@ -246,8 +235,7 @@ fd_is_bash_input (fd) NEW_FD is -1, a new file descriptor is allocated with fcntl. The new file descriptor is returned on success, -1 on error. */ int -save_bash_input (fd, new_fd) - int fd, new_fd; +save_bash_input (int fd, int new_fd) { int nfd; @@ -312,8 +300,7 @@ save_bash_input (fd, new_fd) fd 0, sync_buffered_stream is used instead, to cooperate with input redirection (look at redir.c:add_undo_redirect()). */ int -check_bash_input (fd) - int fd; +check_bash_input (int fd) { if (fd_is_bash_input (fd)) { @@ -330,8 +317,7 @@ check_bash_input (fd) BUFFERS[fd1] is copied to BUFFERS[fd2]. This is called by the redirect code for constructs like 4<&0 and 3</etc/rc.local. */ int -duplicate_buffered_stream (fd1, fd2) - int fd1, fd2; +duplicate_buffered_stream (int fd1, int fd2) { int is_bash_input, m; @@ -373,7 +359,7 @@ duplicate_buffered_stream (fd1, fd2) buffers[fd2]->b_flag |= B_WASBASHINPUT; } - if (fd_is_bash_input (fd1) || (buffers[fd1] && (buffers[fd1]->b_flag & B_SHAREDBUF))) + if (buffers[fd2] && (fd_is_bash_input (fd1) || (buffers[fd1] && (buffers[fd1]->b_flag & B_SHAREDBUF)))) buffers[fd2]->b_flag |= B_SHAREDBUF; return (fd2); @@ -386,8 +372,7 @@ duplicate_buffered_stream (fd1, fd2) corresponding to it. If something is wrong and the file descriptor is invalid, return a NULL stream. */ BUFFERED_STREAM * -fd_to_buffered_stream (fd) - int fd; +fd_to_buffered_stream (int fd) { char *buffer; size_t size; @@ -409,8 +394,7 @@ fd_to_buffered_stream (fd) /* Return a buffered stream corresponding to FILE, a file name. */ BUFFERED_STREAM * -open_buffered_stream (file) - char *file; +open_buffered_stream (char *file) { int fd; @@ -421,8 +405,7 @@ open_buffered_stream (file) /* Deallocate a buffered stream and free up its resources. Make sure we zero out the slot in BUFFERS that points to BP. */ void -free_buffered_stream (bp) - BUFFERED_STREAM *bp; +free_buffered_stream (BUFFERED_STREAM *bp) { int n; @@ -439,8 +422,7 @@ free_buffered_stream (bp) /* Close the file descriptor associated with BP, a buffered stream, and free up the stream. Return the status of closing BP's file descriptor. */ int -close_buffered_stream (bp) - BUFFERED_STREAM *bp; +close_buffered_stream (BUFFERED_STREAM *bp) { int fd; @@ -456,8 +438,7 @@ close_buffered_stream (bp) /* Deallocate the buffered stream associated with file descriptor FD, and close FD. Return the status of the close on FD. */ int -close_buffered_fd (fd) - int fd; +close_buffered_fd (int fd) { if (fd < 0) { @@ -472,9 +453,7 @@ close_buffered_fd (fd) /* Make the BUFFERED_STREAM associated with buffers[FD] be BP, and return the old BUFFERED_STREAM. */ BUFFERED_STREAM * -set_buffered_stream (fd, bp) - int fd; - BUFFERED_STREAM *bp; +set_buffered_stream (int fd, BUFFERED_STREAM *bp) { BUFFERED_STREAM *ret; @@ -483,15 +462,34 @@ set_buffered_stream (fd, bp) return ret; } +/* Return the BUFFERED_STREAM associated with FD, if any. */ +BUFFERED_STREAM * +get_buffered_stream (int fd) +{ + return (buffers && fd < nbuffers) ? buffers[fd] : (BUFFERED_STREAM *)0; +} + +int +fd_berror (int fd) +{ + BUFFERED_STREAM *bp; + + bp = get_buffered_stream (default_buffered_input); + return (bp && berror (bp)); +} + /* Read a buffer full of characters from BP, a buffered stream. */ static int -b_fill_buffer (bp) - BUFFERED_STREAM *bp; +b_fill_buffer (BUFFERED_STREAM *bp) { ssize_t nr; off_t o; CHECK_TERMSIG; + + if (bp->b_flag & B_ERROR) /* try making read errors `sticky' */ + return EOF; + /* In an environment where text and binary files are treated differently, compensate for lseek() on text files returning an offset different from the count of characters read() returns. Text-mode streams have to be @@ -534,9 +532,7 @@ b_fill_buffer (bp) /* Push C back onto buffered stream BP. */ static int -bufstream_ungetc(c, bp) - int c; - BUFFERED_STREAM *bp; +bufstream_ungetc(int c, BUFFERED_STREAM *bp) { if (c == EOF || bp == 0 || bp->b_inputp == 0) return (EOF); @@ -548,8 +544,7 @@ bufstream_ungetc(c, bp) /* Seek backwards on file BFD to synchronize what we've read so far with the underlying file pointer. */ int -sync_buffered_stream (bfd) - int bfd; +sync_buffered_stream (int bfd) { BUFFERED_STREAM *bp; off_t chars_left; @@ -565,7 +560,7 @@ sync_buffered_stream (bfd) } int -buffered_getchar () +buffered_getchar (void) { CHECK_TERMSIG; @@ -584,17 +579,14 @@ buffered_getchar () } int -buffered_ungetchar (c) - int c; +buffered_ungetchar (int c) { return (bufstream_ungetc (c, buffers[bash_input.location.buffered_fd])); } /* Make input come from file descriptor BFD through a buffered stream. */ void -with_input_from_buffered_stream (bfd, name) - int bfd; - char *name; +with_input_from_buffered_stream (int bfd, char *name) { INPUT_STREAM location; BUFFERED_STREAM *bp; @@ -605,73 +597,3 @@ with_input_from_buffered_stream (bfd, name) init_yy_io (bp == 0 ? return_EOF : buffered_getchar, buffered_ungetchar, st_bstream, name, location); } - -#if defined (TEST) -void * -xmalloc(s) -int s; -{ - return (malloc (s)); -} - -void * -xrealloc(s, size) -char *s; -int size; -{ - if (!s) - return(malloc (size)); - else - return(realloc (s, size)); -} - -void -init_yy_io () -{ -} - -process(bp) -BUFFERED_STREAM *bp; -{ - int c; - - while ((c = bufstream_getc(bp)) != EOF) - putchar(c); -} - -BASH_INPUT bash_input; - -struct stat dsb; /* can be used from gdb */ - -/* imitate /bin/cat */ -main(argc, argv) -int argc; -char **argv; -{ - register int i; - BUFFERED_STREAM *bp; - - if (argc == 1) { - bp = fd_to_buffered_stream (0); - process(bp); - exit(0); - } - for (i = 1; i < argc; i++) { - if (argv[i][0] == '-' && argv[i][1] == '\0') { - bp = fd_to_buffered_stream (0); - if (!bp) - continue; - process(bp); - free_buffered_stream (bp); - } else { - bp = open_buffered_stream (argv[i]); - if (!bp) - continue; - process(bp); - close_buffered_stream (bp); - } - } - exit(0); -} -#endif /* TEST */ -#endif /* BUFFERED_INPUT */ diff --git a/input.h b/input.h index cb3eee425..592b6cb97 100644 --- a/input.h +++ b/input.h @@ -1,6 +1,6 @@ /* input.h -- Structures and unions used for reading input. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -23,22 +23,11 @@ #include "stdc.h" -/* Function pointers can be declared as (Function *)foo. */ -#if !defined (_FUNCTION_DEF) -# define _FUNCTION_DEF -typedef int Function (); -typedef void VFunction (); -typedef char *CPFunction (); /* no longer used */ -typedef char **CPPFunction (); /* no longer used */ -#endif /* _FUNCTION_DEF */ - -typedef int sh_cget_func_t PARAMS((void)); /* sh_ivoidfunc_t */ -typedef int sh_cunget_func_t PARAMS((int)); /* sh_intfunc_t */ +typedef int sh_cget_func_t (void); /* sh_ivoidfunc_t */ +typedef int sh_cunget_func_t (int); /* sh_intfunc_t */ enum stream_type {st_none, st_stdin, st_stream, st_string, st_bstream}; -#if defined (BUFFERED_INPUT) - /* Possible values for b_flag. */ #undef B_EOF #undef B_ERROR /* There are some systems with this define */ @@ -70,14 +59,20 @@ extern BUFFERED_STREAM **buffers; extern int default_buffered_input; extern int bash_input_fd_changed; -#endif /* BUFFERED_INPUT */ +#undef beof +#undef berror + +#define beof(bp) (((bp)->b_flag & B_EOF) != 0) +#define berror(bp) (((bp)->b_flag & B_ERROR) != 0) + +#undef bclearerror + +#define bclearerror(bp) ((bp)->b_flag &= ~(B_ERROR|B_EOF)) typedef union { FILE *file; char *string; -#if defined (BUFFERED_INPUT) int buffered_fd; -#endif } INPUT_STREAM; typedef struct { @@ -92,44 +87,44 @@ extern BASH_INPUT bash_input; /* Functions from parse.y whose use directly or indirectly depends on the definitions in this file. */ -extern void initialize_bash_input PARAMS((void)); -extern void init_yy_io PARAMS((sh_cget_func_t *, sh_cunget_func_t *, enum stream_type, const char *, INPUT_STREAM)); -extern char *yy_input_name PARAMS((void)); -extern void with_input_from_stdin PARAMS((void)); -extern void with_input_from_string PARAMS((char *, const char *)); -extern void with_input_from_stream PARAMS((FILE *, const char *)); -extern void push_stream PARAMS((int)); -extern void pop_stream PARAMS((void)); -extern int stream_on_stack PARAMS((enum stream_type)); -extern char *read_secondary_line PARAMS((int)); -extern int find_reserved_word PARAMS((char *)); -extern void gather_here_documents PARAMS((void)); -extern void execute_variable_command PARAMS((char *, char *)); - -extern int *save_token_state PARAMS((void)); -extern void restore_token_state PARAMS((int *)); +extern void initialize_bash_input (void); +extern void init_yy_io (sh_cget_func_t *, sh_cunget_func_t *, enum stream_type, const char *, INPUT_STREAM); +extern char *yy_input_name (void); +extern void with_input_from_stdin (void); +extern void with_input_from_string (char *, const char *); +extern void with_input_from_stream (FILE *, const char *); +extern void push_stream (int); +extern void pop_stream (void); +extern int stream_on_stack (enum stream_type); +extern char *read_secondary_line (int); +extern int find_reserved_word (const char *); +extern void gather_here_documents (void); +extern void execute_variable_command (const char *, const char *); + +extern int *save_token_state (void); +extern void restore_token_state (int *); /* Functions from input.c */ -extern int getc_with_restart PARAMS((FILE *)); -extern int ungetc_with_restart PARAMS((int, FILE *)); +extern int getc_with_restart (FILE *); +extern int ungetc_with_restart (int, FILE *); -#if defined (BUFFERED_INPUT) /* Functions from input.c. */ -extern int fd_is_bash_input PARAMS((int)); -extern int set_bash_input_fd PARAMS((int)); -extern int save_bash_input PARAMS((int, int)); -extern int check_bash_input PARAMS((int)); -extern int duplicate_buffered_stream PARAMS((int, int)); -extern BUFFERED_STREAM *fd_to_buffered_stream PARAMS((int)); -extern BUFFERED_STREAM *set_buffered_stream PARAMS((int, BUFFERED_STREAM *)); -extern BUFFERED_STREAM *open_buffered_stream PARAMS((char *)); -extern void free_buffered_stream PARAMS((BUFFERED_STREAM *)); -extern int close_buffered_stream PARAMS((BUFFERED_STREAM *)); -extern int close_buffered_fd PARAMS((int)); -extern int sync_buffered_stream PARAMS((int)); -extern int buffered_getchar PARAMS((void)); -extern int buffered_ungetchar PARAMS((int)); -extern void with_input_from_buffered_stream PARAMS((int, char *)); -#endif /* BUFFERED_INPUT */ +extern int fd_is_bash_input (int); +extern int set_bash_input_fd (int); +extern int save_bash_input (int, int); +extern int check_bash_input (int); +extern int duplicate_buffered_stream (int, int); +extern BUFFERED_STREAM *fd_to_buffered_stream (int); +extern BUFFERED_STREAM *set_buffered_stream (int, BUFFERED_STREAM *); +extern BUFFERED_STREAM *get_buffered_stream (int); +extern BUFFERED_STREAM *open_buffered_stream (char *); +extern void free_buffered_stream (BUFFERED_STREAM *); +extern int close_buffered_stream (BUFFERED_STREAM *); +extern int close_buffered_fd (int); +extern int sync_buffered_stream (int); +extern int fd_berror (int); +extern int buffered_getchar (void); +extern int buffered_ungetchar (int); +extern void with_input_from_buffered_stream (int, char *); #endif /* _INPUT_H_ */ diff --git a/jobs.c b/jobs.c index b96230fa7..54ae39eca 100644 --- a/jobs.c +++ b/jobs.c @@ -3,7 +3,7 @@ /* This file works with both POSIX and BSD systems. It implements job control. */ -/* Copyright (C) 1989-2022 Free Software Foundation, Inc. +/* Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -49,9 +49,7 @@ #include <sys/param.h> #endif -#if defined (BUFFERED_INPUT) -# include "input.h" -#endif +#include "input.h" /* Need to include this up here for *_TTY_DRIVER definitions. */ #include "shtty.h" @@ -87,7 +85,7 @@ extern int errno; #endif /* !errno */ #if !defined (HAVE_KILLPG) -extern int killpg PARAMS((pid_t, int)); +extern int killpg (pid_t, int); #endif #if !DEFAULT_CHILD_MAX @@ -162,14 +160,14 @@ extern int killpg PARAMS((pid_t, int)); /* The number of additional slots to allocate when we run out. */ #define JOB_SLOTS 8 -typedef int sh_job_map_func_t PARAMS((JOB *, int, int, int)); +typedef int sh_job_map_func_t (JOB *, int, int, int); /* Variables used here but defined in other files. */ extern WORD_LIST *subst_assign_varlist; extern SigHandler **original_signals; -extern void set_original_signal PARAMS((int, SigHandler *)); +extern void set_original_signal (int, SigHandler *); static struct jobstats zerojs = { -1L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NO_JOB, NO_JOB, 0, 0 }; struct jobstats js = { -1L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NO_JOB, NO_JOB, 0, 0 }; @@ -237,75 +235,76 @@ PROCESS *last_procsub_child = (PROCESS *)NULL; void debug_print_pgrps (void); -static sighandler wait_sigint_handler PARAMS((int)); -static sighandler sigchld_handler PARAMS((int)); -static sighandler sigcont_sighandler PARAMS((int)); -static sighandler sigstop_sighandler PARAMS((int)); - -static int waitchld PARAMS((pid_t, int)); - -static PROCESS *find_pid_in_pipeline PARAMS((pid_t, PROCESS *, int)); -static PROCESS *find_pipeline PARAMS((pid_t, int, int *)); -static PROCESS *find_process PARAMS((pid_t, int, int *)); - -static char *current_working_directory PARAMS((void)); -static char *job_working_directory PARAMS((void)); -static char *j_strsignal PARAMS((int)); -static char *printable_job_status PARAMS((int, PROCESS *, int)); - -static PROCESS *find_last_proc PARAMS((int, int)); -static pid_t find_last_pid PARAMS((int, int)); - -static int set_new_line_discipline PARAMS((int)); -static int map_over_jobs PARAMS((sh_job_map_func_t *, int, int)); -static int job_last_stopped PARAMS((int)); -static int job_last_running PARAMS((int)); -static int most_recent_job_in_state PARAMS((int, JOB_STATE)); -static int find_job PARAMS((pid_t, int, PROCESS **)); -static int print_job PARAMS((JOB *, int, int, int)); -static int process_exit_status PARAMS((WAIT)); -static int process_exit_signal PARAMS((WAIT)); -static int set_job_status_and_cleanup PARAMS((int)); - -static WAIT job_signal_status PARAMS((int)); -static WAIT raw_job_exit_status PARAMS((int)); - -static void notify_of_job_status PARAMS((void)); -static void reset_job_indices PARAMS((void)); -static void cleanup_dead_jobs PARAMS((void)); -static int processes_in_job PARAMS((int)); -static void realloc_jobs_list PARAMS((void)); -static int compact_jobs_list PARAMS((int)); -static void add_process PARAMS((char *, pid_t)); -static void print_pipeline PARAMS((PROCESS *, int, int, FILE *)); -static void pretty_print_job PARAMS((int, int, FILE *)); -static void set_current_job PARAMS((int)); -static void reset_current PARAMS((void)); -static void set_job_running PARAMS((int)); -static void setjstatus PARAMS((int)); -static int maybe_give_terminal_to PARAMS((pid_t, pid_t, int)); -static void mark_all_jobs_as_dead PARAMS((void)); -static void mark_dead_jobs_as_notified PARAMS((int)); -static void restore_sigint_handler PARAMS((void)); +static sighandler wait_sigint_handler (int); +static sighandler sigchld_handler (int); +static sighandler sigcont_sighandler (int); +static sighandler sigstop_sighandler (int); + +static int waitchld (pid_t, int); + +static PROCESS *find_pid_in_pipeline (pid_t, PROCESS *, int); +static PROCESS *find_pipeline (pid_t, int, int *); +static PROCESS *find_process (pid_t, int, int *); + +static char *current_working_directory (void); +static char *job_working_directory (void); +static char *j_strsignal (int); +static char *printable_job_status (int, PROCESS *, int); + +static PROCESS *find_last_proc (int, int); +static pid_t find_last_pid (int, int); + +static int set_new_line_discipline (int); +static int map_over_jobs (sh_job_map_func_t *, int, int); +static int job_last_stopped (int); +static int job_last_running (int); +static int most_recent_job_in_state (int, JOB_STATE); +static int find_job (pid_t, int, PROCESS **); +static int print_job (JOB *, int, int, int); +static int process_exit_signal (WAIT); +static int set_job_status_and_cleanup (int); + +static WAIT job_signal_status (int); +static WAIT raw_job_exit_status (int); + +static int job_killed_by_signal (int); + +static void notify_of_job_status (void); +static void reset_job_indices (void); +static void cleanup_dead_jobs (void); +static int processes_in_job (int); +static void realloc_jobs_list (void); +static int compact_jobs_list (int); +static void add_process (char *, pid_t); +static void print_pipeline (PROCESS *, int, int, FILE *); +static void pretty_print_job (int, int, FILE *); +static void set_current_job (int); +static void reset_current (void); +static void set_job_running (int); +static void setjstatus (int); +static int maybe_give_terminal_to (pid_t, pid_t, int); +static void mark_all_jobs_as_dead (void); +static void mark_dead_jobs_as_notified (int); +static void restore_sigint_handler (void); #if defined (PGRP_PIPE) -static void pipe_read PARAMS((int *)); +static void pipe_read (int *); #endif /* Hash table manipulation */ -static ps_index_t *pshash_getbucket PARAMS((pid_t)); -static void pshash_delindex PARAMS((ps_index_t)); +static ps_index_t *pshash_getbucket (pid_t); +static void pshash_delindex (ps_index_t); /* Saved background process status management */ -static struct pidstat *bgp_add PARAMS((pid_t, int)); -static int bgp_delete PARAMS((pid_t)); -static void bgp_clear PARAMS((void)); -static int bgp_search PARAMS((pid_t)); +static struct pidstat *bgp_add (pid_t, int); +static int bgp_delete (pid_t); +static void bgp_clear (void); +static int bgp_search (pid_t); -static struct pipeline_saver *alloc_pipeline_saver PARAMS((void)); +static struct pipeline_saver *alloc_pipeline_saver (void); -static ps_index_t bgp_getindex PARAMS((void)); -static void bgp_resize PARAMS((void)); /* XXX */ +static ps_index_t bgp_getindex (void); +static void bgp_resize (void); /* XXX */ #if defined (ARRAY_VARS) static int *pstatuses; /* list of pipeline statuses */ @@ -337,7 +336,6 @@ static SigHandler *old_cont = (SigHandler *)SIG_DFL; /* A place to temporarily save the current pipeline. */ static struct pipeline_saver *saved_pipeline; -static int saved_already_making_children; /* Set this to non-zero whenever you don't want the jobs list to change at all: no jobs deleted and no status change notifications. This is used, @@ -355,8 +353,7 @@ static char retcode_name_buffer[64]; #define tcsetpgrp(fd, pgrp) ioctl ((fd), TIOCSPGRP, &(pgrp)) pid_t -tcgetpgrp (fd) - int fd; +tcgetpgrp (int fd) { pid_t pgrp; @@ -370,7 +367,7 @@ tcgetpgrp (fd) /* Initialize the global job stats structure and other bookkeeping variables */ void -init_job_stats () +init_job_stats (void) { js = zerojs; } @@ -380,7 +377,7 @@ init_job_stats () of the functions it calls. This is so that it can safely be called from a signal handler. */ static char * -current_working_directory () +current_working_directory (void) { char *dir; static char d[PATH_MAX]; @@ -402,7 +399,7 @@ current_working_directory () /* Return the working directory for the current process. */ static char * -job_working_directory () +job_working_directory (void) { char *dir; @@ -418,7 +415,7 @@ job_working_directory () } void -making_children () +making_children (void) { if (already_making_children) return; @@ -428,13 +425,13 @@ making_children () } void -stop_making_children () +stop_making_children (void) { already_making_children = 0; } void -cleanup_the_pipeline () +cleanup_the_pipeline (void) { PROCESS *disposer; sigset_t set, oset; @@ -450,7 +447,7 @@ cleanup_the_pipeline () /* Not used right now */ void -discard_last_procsub_child () +discard_last_procsub_child (void) { PROCESS *disposer; sigset_t set, oset; @@ -465,19 +462,19 @@ discard_last_procsub_child () } static struct pipeline_saver * -alloc_pipeline_saver () +alloc_pipeline_saver (void) { struct pipeline_saver *ret; ret = (struct pipeline_saver *)xmalloc (sizeof (struct pipeline_saver)); ret->pipeline = 0; + ret->already_making_children = 0; ret->next = 0; return ret; } void -save_pipeline (clear) - int clear; +save_pipeline (int clear) { sigset_t set, oset; struct pipeline_saver *saver; @@ -485,17 +482,16 @@ save_pipeline (clear) BLOCK_CHILD (set, oset); saver = alloc_pipeline_saver (); saver->pipeline = the_pipeline; + saver->already_making_children = already_making_children; saver->next = saved_pipeline; saved_pipeline = saver; if (clear) the_pipeline = (PROCESS *)NULL; - saved_already_making_children = already_making_children; UNBLOCK_CHILD (oset); } PROCESS * -restore_pipeline (discard) - int discard; +restore_pipeline (int discard) { PROCESS *old_pipeline; sigset_t set, oset; @@ -504,10 +500,10 @@ restore_pipeline (discard) BLOCK_CHILD (set, oset); old_pipeline = the_pipeline; the_pipeline = saved_pipeline->pipeline; + already_making_children = saved_pipeline->already_making_children; saver = saved_pipeline; saved_pipeline = saved_pipeline->next; free (saver); - already_making_children = saved_already_making_children; UNBLOCK_CHILD (oset); if (discard && old_pipeline) @@ -520,7 +516,7 @@ restore_pipeline (discard) /* Start building a pipeline. */ void -start_pipeline () +start_pipeline (void) { if (the_pipeline) { @@ -550,9 +546,7 @@ start_pipeline () DEFERRED is a command structure to be executed upon satisfactory execution exit of this pipeline. */ int -stop_pipeline (async, deferred) - int async; - COMMAND *deferred; +stop_pipeline (int async, COMMAND *deferred) { register int i, j; JOB *newjob; @@ -722,8 +716,11 @@ stop_pipeline (async, deferred) * in the background. * */ + /* 09/08/2023 - rely on child processes to set the terminal pgrp */ +#if 0 if (job_control && newjob->pgrp && (subshell_environment&SUBSHELL_ASYNC) == 0 && running_in_background == 0) maybe_give_terminal_to (shell_pgrp, newjob->pgrp, 0); +#endif } } @@ -756,7 +753,7 @@ stop_pipeline (async, deferred) /* The number of elements in bgpids.storage always has to be > js.c_childmax for the circular buffer to work right. */ static void -bgp_resize () +bgp_resize (void) { ps_index_t nsize, nsize_cur, nsize_max; ps_index_t psi; @@ -799,7 +796,7 @@ bgp_resize () } static ps_index_t -bgp_getindex () +bgp_getindex (void) { if (bgpids.nalloc < (ps_index_t)js.c_childmax || bgpids.head >= bgpids.nalloc) bgp_resize (); @@ -809,8 +806,7 @@ bgp_getindex () } static ps_index_t * -pshash_getbucket (pid) - pid_t pid; +pshash_getbucket (pid_t pid) { unsigned long hash; /* XXX - u_bits32_t */ @@ -819,9 +815,7 @@ pshash_getbucket (pid) } static struct pidstat * -bgp_add (pid, status) - pid_t pid; - int status; +bgp_add (pid_t pid, int status) { ps_index_t *bucket, psi; struct pidstat *ps; @@ -863,8 +857,7 @@ bgp_add (pid, status) } static void -pshash_delindex (psi) - ps_index_t psi; +pshash_delindex (ps_index_t psi) { struct pidstat *ps; ps_index_t *bucket; @@ -889,8 +882,7 @@ pshash_delindex (psi) } static int -bgp_delete (pid) - pid_t pid; +bgp_delete (pid_t pid) { ps_index_t psi, orig_psi; @@ -924,7 +916,7 @@ bgp_delete (pid) /* Clear out the list of saved statuses */ static void -bgp_clear () +bgp_clear (void) { if (bgpids.storage == 0 || bgpids.nalloc == 0) return; @@ -942,8 +934,7 @@ bgp_clear () found. If not found, return -1. We hash to the right spot in pidstat_table and follow the bucket chain to the end. */ static int -bgp_search (pid) - pid_t pid; +bgp_search (pid_t pid) { ps_index_t psi, orig_psi; @@ -967,18 +958,18 @@ bgp_search (pid) #if 0 static void -bgp_prune () +bgp_prune (void) { return; } #endif -/* External interface to bgp_add; takes care of blocking and unblocking - SIGCHLD. Not really used. */ +/* External interface to bgp_add/bgp_search/bgp_delete; takes care of blocking + and unblocking SIGCHLD if needed. If retrieve_proc_status or delete_proc_status + is called with BLOCK non-zero, the caller must block and unblock SIGCHLD. */ + void -save_proc_status (pid, status) - pid_t pid; - int status; +save_proc_status (pid_t pid, int status) { sigset_t set, oset; @@ -987,6 +978,32 @@ save_proc_status (pid, status) UNBLOCK_CHILD (oset); } +int +retrieve_proc_status (pid_t pid, int block) +{ + int r; + sigset_t set, oset; + + if (block) + BLOCK_CHILD (set, oset); + r = bgp_search (pid); + if (block) + UNBLOCK_CHILD (oset); + return r; +} + +void +delete_proc_status (pid_t pid, int block) +{ + sigset_t set, oset; + + if (block) + BLOCK_CHILD (set, oset); + bgp_delete (pid); + if (block) + UNBLOCK_CHILD (oset); +} + #if defined (PROCESS_SUBSTITUTION) /* Functions to add and remove PROCESS * children from the list of running asynchronous process substitutions. The list is currently a simple singly @@ -996,16 +1013,14 @@ save_proc_status (pid, status) eventually removed from the list and added to the bgpids table. */ static void -procsub_free (p) - PROCESS *p; +procsub_free (PROCESS *p) { FREE (p->command); free (p); } PROCESS * -procsub_add (p) - PROCESS *p; +procsub_add (PROCESS *p) { sigset_t set, oset; @@ -1027,8 +1042,7 @@ procsub_add (p) } PROCESS * -procsub_search (pid) - pid_t pid; +procsub_search (pid_t pid) { PROCESS *p; sigset_t set, oset; @@ -1043,8 +1057,7 @@ procsub_search (pid) } PROCESS * -procsub_delete (pid) - pid_t pid; +procsub_delete (pid_t pid) { PROCESS *p, *prev; sigset_t set, oset; @@ -1081,8 +1094,7 @@ procsub_delete (pid) } int -procsub_waitpid (pid) - pid_t pid; +procsub_waitpid (pid_t pid) { PROCESS *p; int r; @@ -1097,7 +1109,7 @@ procsub_waitpid (pid) } void -procsub_waitall () +procsub_waitall (void) { PROCESS *p; int r; @@ -1111,7 +1123,7 @@ procsub_waitall () } void -procsub_clear () +procsub_clear (void) { PROCESS *p, *ps; sigset_t set, oset; @@ -1131,7 +1143,7 @@ procsub_clear () /* Must be called with SIGCHLD blocked. */ void -procsub_prune () +procsub_prune (void) { PROCESS *ohead, *oend, *ps, *p; int onproc; @@ -1167,7 +1179,7 @@ procsub_prune () calling this. This wraps around, but the rest of the code does not. At this point, it should not matter. */ static void -reset_job_indices () +reset_job_indices (void) { int old; @@ -1207,11 +1219,10 @@ reset_job_indices () /* Delete all DEAD jobs that the user had received notification about. */ static void -cleanup_dead_jobs () +cleanup_dead_jobs (void) { register int i; int os; - PROCESS *discard; if (js.j_jobslots == 0 || jobs_list_frozen) return; @@ -1226,8 +1237,12 @@ cleanup_dead_jobs () if (i > js.j_lastj && jobs[i]) INTERNAL_DEBUG(("cleanup_dead_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj)); - if (jobs[i] && DEADJOB (i) && IS_NOTIFIED (i)) - delete_job (i, 0); + if (jobs[i] == 0 || DEADJOB (i) == 0) + continue; /* not a candidate */ + else if (IS_NOTIFIED (i)) + delete_job (i, 0); /* already notified */ + else if (IS_FOREGROUND (i) && job_killed_by_signal (i) == 0) + delete_job (i, 0); /* we won't notify about this */ } #if defined (PROCESS_SUBSTITUTION) @@ -1243,8 +1258,7 @@ cleanup_dead_jobs () } static int -processes_in_job (job) - int job; +processes_in_job (int job) { int nproc; register PROCESS *p; @@ -1262,8 +1276,7 @@ processes_in_job (job) } static void -delete_old_job (pid) - pid_t pid; +delete_old_job (pid_t pid) { PROCESS *p; int job; @@ -1287,7 +1300,7 @@ delete_old_job (pid) whose size is a multiple of JOB_SLOTS and can hold the current number of jobs. Heuristics are used to minimize the number of new reallocs. */ static void -realloc_jobs_list () +realloc_jobs_list (void) { sigset_t set, oset; int nsize, i, j, ncur, nprev; @@ -1364,8 +1377,7 @@ realloc_jobs_list () the list needs to be reallocated. The jobs array may be in new memory if this returns > 0 and < js.j_jobslots. FLAGS is reserved for future use. */ static int -compact_jobs_list (flags) - int flags; +compact_jobs_list (int flags) { if (js.j_jobslots == 0 || jobs_list_frozen) return js.j_jobslots; @@ -1383,8 +1395,7 @@ compact_jobs_list (flags) /* Delete the job at INDEX from the job list. Must be called with SIGCHLD blocked. */ void -delete_job (job_index, dflags) - int job_index, dflags; +delete_job (int job_index, int dflags) { register JOB *temp; PROCESS *proc; @@ -1446,8 +1457,7 @@ delete_job (job_index, dflags) /* Must be called with SIGCHLD blocked. */ void -nohup_job (job_index) - int job_index; +nohup_job (int job_index) { register JOB *temp; @@ -1460,8 +1470,7 @@ nohup_job (job_index) /* Get rid of the data structure associated with a process chain. */ int -discard_pipeline (chain) - register PROCESS *chain; +discard_pipeline (PROCESS *chain) { register PROCESS *this, *next; int n; @@ -1485,9 +1494,7 @@ discard_pipeline (chain) NAME is the command string that will be exec'ed later. PID is the process id of the child. */ static void -add_process (name, pid) - char *name; - pid_t pid; +add_process (char *name, pid_t pid) { PROCESS *t, *p; @@ -1526,11 +1533,7 @@ add_process (name, pid) /* Create a (dummy) PROCESS with NAME, PID, and STATUS, and make it the last process in jobs[JID]->pipe. Used by the lastpipe code. */ void -append_process (name, pid, status, jid) - char *name; - pid_t pid; - int status; - int jid; +append_process (char *name, pid_t pid, int status, int jid) { PROCESS *t, *p; @@ -1554,7 +1557,7 @@ append_process (name, pid, status, jid) /* Take the last job and make it the first job. Must be called with SIGCHLD blocked. */ int -rotate_the_pipeline () +rotate_the_pipeline (void) { PROCESS *p; @@ -1568,7 +1571,7 @@ rotate_the_pipeline () /* Reverse the order of the processes in the_pipeline. Must be called with SIGCHLD blocked. */ int -reverse_the_pipeline () +reverse_the_pipeline (void) { PROCESS *p, *n; @@ -1593,9 +1596,7 @@ reverse_the_pipeline () for map_over_jobs. FUNC is called with a JOB, arg1, arg2, and INDEX. */ static int -map_over_jobs (func, arg1, arg2) - sh_job_map_func_t *func; - int arg1, arg2; +map_over_jobs (sh_job_map_func_t *func, int arg1, int arg2) { register int i; int result; @@ -1629,18 +1630,32 @@ map_over_jobs (func, arg1, arg2) /* Cause all the jobs in the current pipeline to exit. */ void -terminate_current_pipeline () +terminate_current_pipeline (void) { + PROCESS *p; + if (pipeline_pgrp && pipeline_pgrp != shell_pgrp) { killpg (pipeline_pgrp, SIGTERM); killpg (pipeline_pgrp, SIGCONT); + killpg (pipeline_pgrp, SIGKILL); + } + else if (pipeline_pgrp && pipeline_pgrp == shell_pgrp && (p = the_pipeline)) + { + do + { + kill (p->pid, SIGTERM); + kill (p->pid, SIGCONT); + kill (p->pid, SIGKILL); + p = p->next; + } + while (p != the_pipeline); } } /* Cause all stopped jobs to exit. */ void -terminate_stopped_jobs () +terminate_stopped_jobs (void) { register int i; @@ -1658,7 +1673,7 @@ terminate_stopped_jobs () /* Cause all jobs, running or stopped, to receive a hangup signal. If a job is marked J_NOHUP, don't send the SIGHUP. */ void -hangup_all_jobs () +hangup_all_jobs (void) { register int i; @@ -1677,17 +1692,14 @@ hangup_all_jobs () } void -kill_current_pipeline () +kill_current_pipeline (void) { stop_making_children (); start_pipeline (); } static PROCESS * -find_pid_in_pipeline (pid, pipeline, alive_only) - pid_t pid; - PROCESS *pipeline; - int alive_only; +find_pid_in_pipeline (pid_t pid, PROCESS *pipeline, int alive_only) { PROCESS *p; @@ -1706,12 +1718,10 @@ find_pid_in_pipeline (pid, pipeline, alive_only) /* Return the pipeline that PID belongs to. Note that the pipeline doesn't have to belong to a job. Must be called with SIGCHLD blocked. - If JOBP is non-null, return the index of the job containing PID. */ + If JOBP is non-null, return the index of the job containing PID, or + NO_JOB if PID doesn't belong to an existing job. */ static PROCESS * -find_pipeline (pid, alive_only, jobp) - pid_t pid; - int alive_only; - int *jobp; /* index into jobs list or NO_JOB */ +find_pipeline (pid_t pid, int alive_only, int *jobp) { int job; PROCESS *p; @@ -1742,13 +1752,10 @@ find_pipeline (pid, alive_only, jobp) } /* Return the PROCESS * describing PID. If JOBP is non-null return the index - into the jobs array of the job containing PID. Must be called with - SIGCHLD blocked. */ + into the jobs array of the job containing PID or NO_JOB. Must be called + with SIGCHLD blocked. */ static PROCESS * -find_process (pid, alive_only, jobp) - pid_t pid; - int alive_only; - int *jobp; /* index into jobs list or NO_JOB */ +find_process (pid_t pid, int alive_only, int *jobp) { PROCESS *p; @@ -1761,10 +1768,7 @@ find_process (pid, alive_only, jobp) /* Return the job index that PID belongs to, or NO_JOB if it doesn't belong to any job. Must be called with SIGCHLD blocked. */ static int -find_job (pid, alive_only, procp) - pid_t pid; - int alive_only; - PROCESS **procp; +find_job (pid_t pid, int alive_only, PROCESS **procp) { register int i; PROCESS *p; @@ -1802,10 +1806,7 @@ find_job (pid, alive_only, procp) /* Find a job given a PID. If BLOCK is non-zero, block SIGCHLD as required by find_job. */ int -get_job_by_pid (pid, block, procp) - pid_t pid; - int block; - PROCESS **procp; +get_job_by_pid (pid_t pid, int block, PROCESS **procp) { int job; sigset_t set, oset; @@ -1823,8 +1824,7 @@ get_job_by_pid (pid, block, procp) /* Print descriptive information about the job with leader pid PID. */ void -describe_pid (pid) - pid_t pid; +describe_pid (pid_t pid) { int job; sigset_t set, oset; @@ -1842,8 +1842,7 @@ describe_pid (pid) } static char * -j_strsignal (s) - int s; +j_strsignal (int s) { char *x; @@ -1857,10 +1856,7 @@ j_strsignal (s) } static char * -printable_job_status (j, p, format) - int j; - PROCESS *p; - int format; +printable_job_status (int j, PROCESS *p, int format) { static char *temp; int es; @@ -1930,10 +1926,7 @@ printable_job_status (j, p, format) If you're printing a pipeline that's not in the jobs array, like the current pipeline as it's being created, pass -1 for JOB_INDEX */ static void -print_pipeline (p, job_index, format, stream) - PROCESS *p; - int job_index, format; - FILE *stream; +print_pipeline (PROCESS *p, int job_index, int format, FILE *stream) { PROCESS *first, *last, *show; int es, name_padding; @@ -2031,9 +2024,7 @@ print_pipeline (p, job_index, format, stream) /* Print information to STREAM about jobs[JOB_INDEX] according to FORMAT. Must be called with SIGCHLD blocked or queued with queue_sigchld */ static void -pretty_print_job (job_index, format, stream) - int job_index, format; - FILE *stream; +pretty_print_job (int job_index, int format, FILE *stream) { register PROCESS *p; @@ -2069,9 +2060,7 @@ pretty_print_job (job_index, format, stream) } static int -print_job (job, format, state, job_index) - JOB *job; - int format, state, job_index; +print_job (JOB *job, int format, int state, int job_index) { if (state == -1 || (JOB_STATE)state == job->state) pretty_print_job (job_index, format, stdout); @@ -2079,25 +2068,21 @@ print_job (job, format, state, job_index) } void -list_one_job (job, format, ignore, job_index) - JOB *job; - int format, ignore, job_index; +list_one_job (JOB *job, int format, int ignore, int job_index) { pretty_print_job (job_index, format, stdout); cleanup_dead_jobs (); } void -list_stopped_jobs (format) - int format; +list_stopped_jobs (int format) { cleanup_dead_jobs (); map_over_jobs (print_job, format, (int)JSTOPPED); } void -list_running_jobs (format) - int format; +list_running_jobs (int format) { cleanup_dead_jobs (); map_over_jobs (print_job, format, (int)JRUNNING); @@ -2106,8 +2091,7 @@ list_running_jobs (format) /* List jobs. If FORMAT is non-zero, then the long form of the information is printed, else just a short version. */ void -list_all_jobs (format) - int format; +list_all_jobs (int format) { cleanup_dead_jobs (); map_over_jobs (print_job, format, -1); @@ -2118,12 +2102,11 @@ list_all_jobs (format) anything else with it. ASYNC_P says what to do with the tty. If non-zero, then don't give it away. */ pid_t -make_child (command, flags) - char *command; - int flags; +make_child (char *command, int flags) { - int async_p, forksleep; - sigset_t set, oset, termset, chldset, oset_copy; + int async_p; + unsigned int forksleep; + sigset_t set, oset, oset_copy; pid_t pid; SigHandler *oterm; @@ -2150,15 +2133,12 @@ make_child (command, flags) async_p = (flags & FORK_ASYNC); forksleep = 1; -#if defined (BUFFERED_INPUT) /* If default_buffered_input is active, we are reading a script. If the command is asynchronous, we have already duplicated /dev/null as fd 0, but have not changed the buffered stream corresponding to the old fd 0. We don't want to sync the stream in this case. */ - if (default_buffered_input != -1 && - (!async_p || default_buffered_input > 0)) + if (default_buffered_input != -1 && (!async_p || default_buffered_input > 0)) sync_buffered_stream (default_buffered_input); -#endif /* BUFFERED_INPUT */ /* Create the child, handle severe errors. Retry on EAGAIN. */ while ((pid = fork ()) < 0 && errno == EAGAIN && forksleep < FORKSLEEP_MAX) @@ -2212,12 +2192,11 @@ make_child (command, flags) child process, go back and change callers who free `command' in the child process when this returns. */ mypid = getpid (); -#if defined (BUFFERED_INPUT) + /* Close default_buffered_input if it's > 0. We don't close it if it's 0 because that's the file descriptor used when redirecting input, and it's wrong to close the file in that case. */ unset_bash_input (0); -#endif /* BUFFERED_INPUT */ CLRINTERRUPT; /* XXX - children have their own interrupt state */ @@ -2355,7 +2334,7 @@ make_child (command, flags) /* These two functions are called only in child processes. */ void -ignore_tty_job_signals () +ignore_tty_job_signals (void) { set_signal_handler (SIGTSTP, SIG_IGN); set_signal_handler (SIGTTIN, SIG_IGN); @@ -2367,7 +2346,7 @@ ignore_tty_job_signals () SIG_IGN in the child. We can't rely on resetting traps, since the hard ignored signals can't be trapped. */ void -default_tty_job_signals () +default_tty_job_signals (void) { if (signal_is_trapped (SIGTSTP) == 0 && signal_is_hard_ignored (SIGTSTP)) set_signal_handler (SIGTSTP, SIG_IGN); @@ -2387,7 +2366,7 @@ default_tty_job_signals () /* Called once in a parent process. */ void -get_original_tty_job_signals () +get_original_tty_job_signals (void) { static int fetched = 0; @@ -2437,8 +2416,7 @@ static int ttspeeds[] = }; static void -draino (fd, ospeed) - int fd, ospeed; +draino (int fd, int ospeed) { register int delay = ttspeeds[ospeed]; int n; @@ -2468,7 +2446,7 @@ draino (fd, ospeed) /* Fill the contents of shell_tty_info with the current tty info. */ int -get_tty_state () +get_tty_state (void) { int tty; @@ -2505,7 +2483,7 @@ get_tty_state () /* Make the current tty use the state in shell_tty_info. */ int -set_tty_state () +set_tty_state (void) { int tty; @@ -2543,9 +2521,7 @@ set_tty_state () process in that job's pipeline. This is the one whose exit status counts. Must be called with SIGCHLD blocked or queued. */ static PROCESS * -find_last_proc (job, block) - int job; - int block; +find_last_proc (int job, int block) { register PROCESS *p; sigset_t set, oset; @@ -2564,9 +2540,7 @@ find_last_proc (job, block) } static pid_t -find_last_pid (job, block) - int job; - int block; +find_last_pid (int job, int block) { PROCESS *p; @@ -2583,9 +2557,7 @@ find_last_pid (job, block) we suppress the error message if PID isn't found. */ int -wait_for_single_pid (pid, flags) - pid_t pid; - int flags; +wait_for_single_pid (pid_t pid, int flags) { register PROCESS *child; sigset_t set, oset; @@ -2645,8 +2617,7 @@ wait_for_single_pid (pid, flags) /* Wait for all of the background processes started by this shell to finish. */ int -wait_for_background_pids (ps) - struct procstat *ps; +wait_for_background_pids (struct procstat *ps) { register int i, r; int any_stopped, check_async, njobs; @@ -2702,13 +2673,15 @@ wait_for_background_pids (ps) } #if defined (PROCESS_SUBSTITUTION) - procsub_waitall (); + if (last_procsub_child && last_procsub_child->pid != NO_PID && last_procsub_child->pid == last_asynchronous_pid) + procsub_waitpid (last_procsub_child->pid); + reap_procsubs (); /* closes fd */ #endif - + /* POSIX.2 says the shell can discard the statuses of all completed jobs if `wait' is called with no arguments. */ mark_dead_jobs_as_notified (1); - cleanup_dead_jobs (); + cleanup_dead_jobs (); /* calls procsub_prune */ bgp_clear (); return njobs; @@ -2718,6 +2691,10 @@ wait_for_background_pids (ps) #define INVALID_SIGNAL_HANDLER (SigHandler *)wait_for_background_pids static SigHandler *old_sigint_handler = INVALID_SIGNAL_HANDLER; +/* The current SIGINT handler as set by restore_sigint_handler. Only valid + immediately after restore_sigint_handler, used for continuations. */ +static SigHandler *cur_sigint_handler = INVALID_SIGNAL_HANDLER; + static int wait_sigint_received; static int child_caught_sigint; @@ -2725,7 +2702,7 @@ int waiting_for_child; /* Clean up state after longjmp to wait_intr_buf */ void -wait_sigint_cleanup () +wait_sigint_cleanup (void) { queue_sigchld = 0; waiting_for_child = 0; @@ -2733,8 +2710,9 @@ wait_sigint_cleanup () } static void -restore_sigint_handler () +restore_sigint_handler (void) { + cur_sigint_handler = old_sigint_handler; if (old_sigint_handler != INVALID_SIGNAL_HANDLER) { set_signal_handler (SIGINT, old_sigint_handler); @@ -2747,8 +2725,7 @@ restore_sigint_handler () The `wait' builtin should be interruptible, but all others should be effectively ignored (i.e. not cause the shell to exit). */ static sighandler -wait_sigint_handler (sig) - int sig; +wait_sigint_handler (int sig) { SigHandler *sigint_handler; @@ -2758,8 +2735,7 @@ wait_sigint_handler (sig) restore_sigint_handler (); /* If we got a SIGINT while in `wait', and SIGINT is trapped, do what POSIX.2 says (see builtins/wait.def for more info). */ - if (this_shell_builtin && this_shell_builtin == wait_builtin && - signal_is_trapped (SIGINT) && + if (signal_is_trapped (SIGINT) && ((sigint_handler = trap_to_sighandler (SIGINT)) == trap_handler)) { trap_handler (SIGINT); /* set pending_traps[SIGINT] */ @@ -2782,6 +2758,8 @@ wait_sigint_handler (sig) { set_exit_status (128+SIGINT); restore_sigint_handler (); + if (cur_sigint_handler == INVALID_SIGNAL_HANDLER) + set_sigint_handler (); /* XXX - only do this in one place */ kill (getpid (), SIGINT); } @@ -2791,15 +2769,13 @@ wait_sigint_handler (sig) } static int -process_exit_signal (status) - WAIT status; +process_exit_signal (WAIT status) { return (WIFSIGNALED (status) ? WTERMSIG (status) : 0); } -static int -process_exit_status (status) - WAIT status; +int +process_exit_status (WAIT status) { if (WIFSIGNALED (status)) return (128 + WTERMSIG (status)); @@ -2810,8 +2786,7 @@ process_exit_status (status) } static WAIT -job_signal_status (job) - int job; +job_signal_status (int job) { register PROCESS *p; WAIT s; @@ -2832,8 +2807,7 @@ job_signal_status (job) /* Return the exit status of the last process in the pipeline for job JOB. This is the exit status of the entire job. */ static WAIT -raw_job_exit_status (job) - int job; +raw_job_exit_status (int job) { register PROCESS *p; int fail; @@ -2846,7 +2820,7 @@ raw_job_exit_status (job) do { if (WSTATUS (p->status) != EXECUTION_SUCCESS) - fail = WSTATUS(p->status); + fail = WSTATUS (p->status); p = p->next; } while (p != jobs[job]->pipe); @@ -2863,19 +2837,30 @@ raw_job_exit_status (job) (rightmost) process in the job's pipeline, modified if the job was killed by a signal or stopped. */ int -job_exit_status (job) - int job; +job_exit_status (int job) { return (process_exit_status (raw_job_exit_status (job))); } int -job_exit_signal (job) - int job; +job_exit_signal (int job) { return (process_exit_signal (raw_job_exit_status (job))); } +static int +job_killed_by_signal (int job) +{ + int termsig; + + termsig = job_exit_signal (job); +#if !defined (DONT_REPORT_SIGPIPE) + return (termsig && termsig != SIGINT); +#else + return (termsig && termsig != SIGINT && termsig != SIGPIPE); +#endif +} + #define FIND_CHILD(pid, child) \ do \ { \ @@ -2896,9 +2881,7 @@ job_exit_signal (job) the jobs table. Returns -1 if waitchld() returns -1, indicating that there are no unwaited-for child processes. */ int -wait_for (pid, flags) - pid_t pid; - int flags; +wait_for (pid_t pid, int flags) { int job, termination_state, r; WAIT s; @@ -2926,11 +2909,13 @@ wait_for (pid, flags) { SigHandler *temp_sigint_handler; - temp_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); - if (temp_sigint_handler == wait_sigint_handler) - internal_debug ("wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = %d", running_trap); - else - old_sigint_handler = temp_sigint_handler; + temp_sigint_handler = old_sigint_handler; + old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); + if (old_sigint_handler == wait_sigint_handler) + { + internal_debug ("wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = %d", running_trap); + old_sigint_handler = temp_sigint_handler; + } waiting_for_child = 0; if (old_sigint_handler == SIG_IGN) set_signal_handler (SIGINT, old_sigint_handler); @@ -3120,9 +3105,17 @@ if (job == NO_JOB) } else #if defined (READLINE) - /* We don't want to do this if we are running a process during - programmable completion or a command bound to `bind -x'. */ - if (RL_ISSTATE (RL_STATE_COMPLETING|RL_STATE_DISPATCHING|RL_STATE_TERMPREPPED) == 0) + /* We don't want to get the entire tty state if we are running + while readline is active or has changed the terminal, but we + can handle window size changes during programmable completion, + traps while readline is active, or a command bound using + `bind -x'. */ + if (RL_ISSTATE(RL_STATE_COMPLETING|RL_STATE_DISPATCHING|RL_STATE_TERMPREPPED) != 0) + { + if (check_window_size) + get_new_window_size (0, (int *)0, (int *)0); + } + else #endif get_tty_state (); @@ -3134,10 +3127,11 @@ if (job == NO_JOB) WIFSIGNALED (s) && WTERMSIG (s) == SIGINT) { /* If SIGINT is not trapped and the shell is in a for, while, - or until loop, act as if the shell received SIGINT as - well, so the loop can be broken. This doesn't call the - SIGINT signal handler; maybe it should. */ - if (signal_is_trapped (SIGINT) == 0 && (loop_level || (shell_compatibility_level > 32 && executing_list))) + until, or arithmetic for loop, or is executing a compound list, + act as if the shell received SIGINT as well, so the loop or + list can be broken. This doesn't call the SIGINT signal + handler; maybe it should. */ + if (signal_is_trapped (SIGINT) == 0 && interrupt_execution) ADDINTERRUPT; /* Call any SIGINT trap handler if the shell is running a loop, so the loop can be broken. This seems more useful and matches the @@ -3189,6 +3183,12 @@ if (job == NO_JOB) if (check_window_size) get_new_window_size (0, (int *)0, (int *)0); } + else if (interactive_shell && interactive == 0 && check_window_size && + (subshell_environment & (SUBSHELL_PAREN|SUBSHELL_ASYNC)) == SUBSHELL_PAREN && + IS_FOREGROUND (job)) + /* Make checkwinsize work in foreground subshells started from + interactive shells. */ + get_new_window_size (0, (int *)0, (int *)0); /* Moved here from set_job_status_and_cleanup, which is in the SIGCHLD signal handler path */ @@ -3216,9 +3216,7 @@ wait_for_return: includes JWAIT_FORCE, we wait for the job to terminate, no just change state */ int -wait_for_job (job, flags, ps) - int job, flags; - struct procstat *ps; +wait_for_job (int job, int flags, struct procstat *ps) { pid_t pid; int r, state; @@ -3270,15 +3268,14 @@ wait_for_job (job, flags, ps) is responsible for translating -1 into the right return value. RPID, if non-null, gets the pid of the job's process leader. */ int -wait_for_any_job (flags, ps) - int flags; - struct procstat *ps; +wait_for_any_job (int flags, struct procstat *ps) { pid_t pid; int i, r; sigset_t set, oset; - if (jobs_list_frozen) + /* Allow funsubs to run this, but don't remove jobs from the jobs table. */ + if (jobs_list_frozen && executing_funsub == 0) return -1; /* First see if there are any unnotified dead jobs that we can report on */ @@ -3287,7 +3284,7 @@ wait_for_any_job (flags, ps) { if ((flags & JWAIT_WAITING) && jobs[i] && IS_WAITING (i) == 0) continue; /* if we don't want it, skip it */ - if (jobs[i] && DEADJOB (i) && IS_NOTIFIED (i) == 0) + if (jobs[i] && DEADJOB (i) && IS_NOTIFIED (i) == 0 && IS_FOREGROUND (i) == 0) { return_job: r = job_exit_status (i); @@ -3297,8 +3294,17 @@ return_job: ps->pid = pid; ps->status = r; } - notify_of_job_status (); /* XXX */ - delete_job (i, 0); + if (jobs_list_frozen == 0) /* must be running a funsub to get here */ + { + notify_of_job_status (); /* XXX */ +#if 1 /* TAG: bash-5.3 kre@munnari.oz.au 01/30/2024 */ + delete_job (i, posixly_correct ? DEL_NOBGPID : 0); +#else + delete_job (i, 0); +#endif + } + else + jobs[i]->flags |= J_NOTIFIED; /* clean up later */ #if defined (COPROCESS_SUPPORT) coproc_reap (); #endif @@ -3315,8 +3321,17 @@ return_job: /* Make sure there is a background job to wait for */ BLOCK_CHILD (set, oset); for (i = 0; i < js.j_jobslots; i++) - if (jobs[i] && RUNNING (i) && IS_FOREGROUND (i) == 0) - break; + { + if (jobs[i] && RUNNING (i) && IS_FOREGROUND (i) == 0) + break; + /* It's possible for there to be a dead job that was reaped when + SIGCHLD was unblocked before this loop started. */ + else if ((flags & JWAIT_WAITING) && jobs[i] && IS_WAITING (i) == 0) + continue; + else if (jobs[i] && DEADJOB (i) && IS_NOTIFIED (i) == 0 && IS_FOREGROUND (i) == 0) + goto return_job; + } + if (i == js.j_jobslots) { UNBLOCK_CHILD (oset); @@ -3354,7 +3369,7 @@ return_job: shell is not interactive, because the dead jobs are not marked as notified. */ void -notify_and_cleanup () +notify_and_cleanup (void) { if (jobs_list_frozen) return; @@ -3368,7 +3383,7 @@ notify_and_cleanup () /* Make dead jobs disappear from the jobs array without notification. This is used when the shell is not interactive. */ void -reap_dead_jobs () +reap_dead_jobs (void) { mark_dead_jobs_as_notified (0); cleanup_dead_jobs (); @@ -3378,9 +3393,7 @@ reap_dead_jobs () STATE. STATE can be JSTOPPED, JRUNNING. NO_JOB is returned if there is no next recent job. */ static int -most_recent_job_in_state (job, state) - int job; - JOB_STATE state; +most_recent_job_in_state (int job, JOB_STATE state) { register int i, result; sigset_t set, oset; @@ -3404,8 +3417,7 @@ most_recent_job_in_state (job, state) /* Return the newest *stopped* job older than JOB, or NO_JOB if not found. */ static int -job_last_stopped (job) - int job; +job_last_stopped (int job) { return (most_recent_job_in_state (job, JSTOPPED)); } @@ -3413,8 +3425,7 @@ job_last_stopped (job) /* Return the newest *running* job older than JOB, or NO_JOB if not found. */ static int -job_last_running (job) - int job; +job_last_running (int job) { return (most_recent_job_in_state (job, JRUNNING)); } @@ -3422,8 +3433,7 @@ job_last_running (job) /* Make JOB be the current job, and make previous be useful. Must be called with SIGCHLD blocked. */ static void -set_current_job (job) - int job; +set_current_job (int job) { int candidate; @@ -3483,7 +3493,7 @@ set_current_job (job) next-newest running job is `-'. Must be called with SIGCHLD blocked. */ static void -reset_current () +reset_current (void) { int candidate; @@ -3517,8 +3527,7 @@ reset_current () /* Set up the job structures so we know the job and its processes are all running. */ static void -set_job_running (job) - int job; +set_job_running (int job) { register PROCESS *p; @@ -3542,8 +3551,7 @@ set_job_running (job) JOBS. Returns -1 if it is unable to start a job, and the return status of the job otherwise. */ int -start_job (job, foreground) - int job, foreground; +start_job (int job, int foreground) { register PROCESS *p; int already_running; @@ -3620,7 +3628,7 @@ start_job (job, foreground) /* Run the job. */ if (already_running == 0) - set_job_running (job); + jobs[job]->flags |= J_NOTIFIED; /* Save the tty settings before we start the job in the foreground. */ if (foreground) @@ -3633,15 +3641,16 @@ start_job (job, foreground) give_terminal_to (jobs[job]->pgrp, 0); } else - jobs[job]->flags &= ~J_FOREGROUND; - - /* If the job is already running, then don't bother jump-starting it. */ - if (already_running == 0) { - jobs[job]->flags |= J_NOTIFIED; - killpg (jobs[job]->pgrp, SIGCONT); + jobs[job]->flags &= ~J_FOREGROUND; + jobs[job]->flags |= J_ASYNC; /* running in background now */ } + /* Change job state to running only if the kill SIGCONT succeeds or if kill + says the process has terminated so we clean it up later. */ + if (killpg (jobs[job]->pgrp, SIGCONT) >= 0 || errno == ESRCH) + set_job_running (job); + if (foreground) { pid_t pid; @@ -3667,9 +3676,7 @@ start_job (job, foreground) job after giving it SIGNAL. Returns -1 on failure. If GROUP is non-null, then kill the process group associated with PID. */ int -kill_pid (pid, sig, group) - pid_t pid; - int sig, group; +kill_pid (pid_t pid, int sig, int group) { register PROCESS *p; int job, result, negative; @@ -3743,8 +3750,7 @@ kill_pid (pid, sig, group) /* sigchld_handler () flushes at least one of the children that we are waiting for. It gets run when we have gotten a SIGCHLD signal. */ static sighandler -sigchld_handler (sig) - int sig; +sigchld_handler (int sig) { int n, oerrno; @@ -3766,14 +3772,12 @@ sigchld_handler (sig) the number of children reaped, or -1 if there are no unwaited-for child processes. */ static int -waitchld (wpid, block) - pid_t wpid; - int block; +waitchld (pid_t wpid, int block) { WAIT status; PROCESS *child; pid_t pid; - int ind; + int ind, sighandler_context; int call_set_current, last_stopped_job, job, children_exited, waitpid_flags; static int wcontinued = WCONTINUED; /* run-time fix for glibc problem */ @@ -3781,6 +3785,9 @@ waitchld (wpid, block) call_set_current = children_exited = 0; last_stopped_job = NO_JOB; + /* We save this because we modify sigchld below */ + sighandler_context = sigchld != 0; + do { /* We don't want to be notified about jobs stopping if job control @@ -3792,6 +3799,8 @@ waitchld (wpid, block) waitpid_flags |= WNOHANG; /* Check for terminating signals and exit the shell if we receive one */ + if (sighandler_context && terminating_signal) + break; CHECK_TERMSIG; /* Check for a trapped signal interrupting the wait builtin and jump out */ CHECK_WAIT_INTR; @@ -3839,6 +3848,8 @@ itrace("waitchld: waitpid returns %d block = %d children_exited = %d", pid, bloc #endif /* If waitpid returns 0, there are running children. If it returns -1, the only other error POSIX says it can return is EINTR. */ + if (sighandler_context && terminating_signal) + break; CHECK_TERMSIG; CHECK_WAIT_INTR; @@ -3877,7 +3888,7 @@ itrace("waitchld: waitpid returns %d block = %d children_exited = %d", pid, bloc child = find_process (pid, 1, &job); /* want living procs only */ #if defined (COPROCESS_SUPPORT) - coproc_pidchk (pid, WSTATUS(status)); + coproc_pidchk (pid, status); #endif #if defined (PROCESS_SUBSTITUTION) @@ -3961,7 +3972,13 @@ itrace("waitchld: waitpid returns %d block = %d children_exited = %d", pid, bloc else if (running_trap) queue_sigchld_trap (children_exited); else if (this_shell_builtin == wait_builtin) - run_sigchld_trap (children_exited); /* XXX */ + { + int o; + o = jobs_list_frozen; + jobs_list_frozen = 1; + run_sigchld_trap (children_exited); /* XXX */ + jobs_list_frozen = o; + } else queue_sigchld_trap (children_exited); } @@ -3970,7 +3987,7 @@ itrace("waitchld: waitpid returns %d block = %d children_exited = %d", pid, bloc that has just changed state. If we notify asynchronously, and the job that this process belongs to is no longer running, then notify the user of that fact now. */ - if (asynchronous_notification && interactive && executing_builtin == 0) + if (children_exited && asynchronous_notification && interactive && executing_builtin == 0) notify_of_job_status (); return (children_exited); @@ -3982,8 +3999,7 @@ itrace("waitchld: waitpid returns %d block = %d children_exited = %d", pid, bloc Currently, the cleanup activity is restricted to handling any SIGINT received while waiting for a foreground job to finish. */ static int -set_job_status_and_cleanup (job) - int job; +set_job_status_and_cleanup (int job) { PROCESS *child; int tstatus, job_state, any_stopped, any_tstped, call_set_current; @@ -4141,7 +4157,7 @@ set_job_status_and_cleanup (job) SIGINT (if we reset the sighandler to the default). In this case, we have to fix things up. What a crock. */ if (temp_handler == trap_handler && signal_is_trapped (SIGINT) == 0) - temp_handler = trap_to_sighandler (SIGINT); + temp_handler = trap_to_sighandler (SIGINT); restore_sigint_handler (); if (temp_handler == SIG_DFL) termsig_handler (SIGINT); /* XXX */ @@ -4157,8 +4173,7 @@ set_job_status_and_cleanup (job) /* Build the array of values for the $PIPESTATUS variable from the set of exit statuses of all processes in the job J. */ static void -setjstatus (j) - int j; +setjstatus (int j) { #if defined (ARRAY_VARS) register int i; @@ -4187,8 +4202,7 @@ setjstatus (j) } void -run_sigchld_trap (nchild) - int nchild; +run_sigchld_trap (int nchild) { char *trap_command; int i; @@ -4213,7 +4227,7 @@ run_sigchld_trap (nchild) in reverse order of adding. We don't want maybe_set_sigchld_trap () to reference freed memory. */ add_unwind_protect (xfree, trap_command); - add_unwind_protect (maybe_set_sigchld_trap, trap_command); + add_unwind_protect (uw_maybe_set_sigchld_trap, trap_command); subst_assign_varlist = (WORD_LIST *)NULL; the_pipeline = (PROCESS *)NULL; @@ -4222,7 +4236,6 @@ run_sigchld_trap (nchild) running_trap = SIGCHLD + 1; set_impossible_sigchld_trap (); - jobs_list_frozen = 1; for (i = 0; i < nchild; i++) { parse_and_execute (savestring (trap_command), "trap", SEVAL_NOHIST|SEVAL_RESETLINE|SEVAL_NOOPTIMIZE); @@ -4237,7 +4250,7 @@ run_sigchld_trap (nchild) notification to stderr, and marks those printed as already notified, thus making them candidates for cleanup. */ static void -notify_of_job_status () +notify_of_job_status (void) { register int job, termsig; char *dir; @@ -4259,7 +4272,7 @@ notify_of_job_status () queue_sigchld++; /* XXX could use js.j_firstj here */ - for (job = 0, dir = (char *)NULL; job < js.j_jobslots; job++) + for (job = 0, dir = NULL; job < js.j_jobslots; job++) { if (jobs[job] && IS_NOTIFIED (job) == 0) { @@ -4274,7 +4287,27 @@ notify_of_job_status () if (startup_state == 0 && WIFSIGNALED (s) == 0 && ((DEADJOB (job) && IS_FOREGROUND (job) == 0) || STOPPED (job))) continue; - + + /* Do the same thing and don't print anything or mark as notified + for the signals we're not going to report on. This is the opposite + of the first two cases under case JDEAD below. */ + else if (interactive_shell == 0 && DEADJOB (job) && IS_FOREGROUND (job) == 0 && + WIFSIGNALED (s) && (termsig == SIGINT +#if defined (DONT_REPORT_SIGTERM) + || termsig == SIGTERM +#endif +#if defined (DONT_REPORT_SIGPIPE) + || termsig == SIGPIPE +#endif + || signal_is_trapped (termsig))) + continue; + + /* hang onto the status if the shell is running -c command */ + else if (startup_state == 2 && subshell_environment == 0 && + WIFSIGNALED (s) == 0 && + ((DEADJOB (job) && IS_FOREGROUND (job) == 0) || STOPPED (job))) + continue; + /* If job control is disabled, don't print the status messages. Mark dead jobs as notified so that they get cleaned up. If startup_state == 2 and subshell_environment has the @@ -4297,7 +4330,7 @@ notify_of_job_status () /* Print info on jobs that are running in the background, and on foreground jobs that were killed by anything - except SIGINT (and possibly SIGPIPE). */ + except SIGINT (and possibly SIGTERM and SIGPIPE). */ switch (JOBSTATE (job)) { case JDEAD: @@ -4317,6 +4350,7 @@ notify_of_job_status () } else if (IS_FOREGROUND (job)) { + /* foreground jobs, interactive and non-interactive shells */ #if !defined (DONT_REPORT_SIGPIPE) if (termsig && WIFSIGNALED (s) && termsig != SIGINT) #else @@ -4330,9 +4364,13 @@ notify_of_job_status () fprintf (stderr, "\n"); } + /* foreground jobs that exit cleanly */ + jobs[job]->flags |= J_NOTIFIED; } - else if (job_control) /* XXX job control test added */ + else if (job_control) { + /* background jobs with job control, interactive and + non-interactive shells */ if (dir == 0) dir = current_working_directory (); pretty_print_job (job, JLIST_STANDARD, stderr); @@ -4341,7 +4379,14 @@ notify_of_job_status () _("(wd now: %s)\n"), polite_directory_format (dir)); } - jobs[job]->flags |= J_NOTIFIED; + /* Interactive shells without job control enabled are handled + above. */ + /* XXX - this is a catch-all in case we missed a state */ + else +{ +internal_debug("notify_of_job_status: catch-all setting J_NOTIFIED on job %d (%d), startup state = %d", job, jobs[job]->flags, startup_state); + jobs[job]->flags |= J_NOTIFIED; +} break; case JSTOPPED: @@ -4372,8 +4417,7 @@ notify_of_job_status () /* Initialize the job control mechanism, and set up the tty stuff. */ int -initialize_job_control (force) - int force; +initialize_job_control (int force) { pid_t t; int t_errno, tty_sigs; @@ -4523,7 +4567,7 @@ just_bail: #ifdef DEBUG void -debug_print_pgrps () +debug_print_pgrps (void) { itrace("original_pgrp = %ld shell_pgrp = %ld terminal_pgrp = %ld", (long)original_pgrp, (long)shell_pgrp, (long)terminal_pgrp); @@ -4536,8 +4580,7 @@ debug_print_pgrps () /* Set the line discipline to the best this system has to offer. Return -1 if this is not possible. */ static int -set_new_line_discipline (tty) - int tty; +set_new_line_discipline (int tty) { #if defined (NEW_TTY_DRIVER) int ldisc; @@ -4592,7 +4635,7 @@ set_new_line_discipline (tty) /* Setup this shell to handle C-C, etc. */ void -initialize_job_signals () +initialize_job_signals (void) { if (interactive) { @@ -4613,8 +4656,7 @@ initialize_job_signals () /* Here we handle CONT signals. */ static sighandler -sigcont_sighandler (sig) - int sig; +sigcont_sighandler (int sig) { initialize_job_signals (); set_signal_handler (SIGCONT, old_cont); @@ -4625,8 +4667,7 @@ sigcont_sighandler (sig) /* Here we handle stop signals while we are running not as a login shell. */ static sighandler -sigstop_sighandler (sig) - int sig; +sigstop_sighandler (int sig) { set_signal_handler (SIGTSTP, old_tstp); set_signal_handler (SIGTTOU, old_ttou); @@ -4643,9 +4684,7 @@ sigstop_sighandler (sig) /* Give the terminal to PGRP. */ int -give_terminal_to (pgrp, force) - pid_t pgrp; - int force; +give_terminal_to (pid_t pgrp, int force) { sigset_t set, oset; int r, e; @@ -4685,9 +4724,7 @@ give_terminal_to (pgrp, force) /* Give terminal to NPGRP iff it's currently owned by OPGRP. FLAGS are the flags to pass to give_terminal_to(). */ static int -maybe_give_terminal_to (opgrp, npgrp, flags) - pid_t opgrp, npgrp; - int flags; +maybe_give_terminal_to (pid_t opgrp, pid_t npgrp, int flags) { int tpgrp; @@ -4714,8 +4751,7 @@ maybe_give_terminal_to (opgrp, npgrp, flags) and functions with pipes are the two that spring to mind). If RUNNING_ONLY is nonzero, only running jobs are removed from the table. */ void -delete_all_jobs (running_only) - int running_only; +delete_all_jobs (int running_only) { register int i; sigset_t set, oset; @@ -4747,7 +4783,8 @@ delete_all_jobs (running_only) { free ((char *)jobs); js.j_jobslots = 0; - js.j_firstj = js.j_lastj = js.j_njobs = 0; + js.j_firstj = js.j_lastj = js.j_njobs = js.j_ndead = 0; + js.c_reaped = js.c_injobs = js.c_living = 0; } } @@ -4760,8 +4797,7 @@ delete_all_jobs (running_only) /* Mark all jobs in the job array so that they don't get a SIGHUP when the shell gets one. If RUNNING_ONLY is nonzero, mark only running jobs. */ void -nohup_all_jobs (running_only) - int running_only; +nohup_all_jobs (int running_only) { register int i; sigset_t set, oset; @@ -4780,7 +4816,7 @@ nohup_all_jobs (running_only) } int -count_all_jobs () +count_all_jobs (void) { int i, n; sigset_t set, oset; @@ -4803,7 +4839,7 @@ count_all_jobs () } static void -mark_all_jobs_as_dead () +mark_all_jobs_as_dead (void) { register int i; sigset_t set, oset; @@ -4814,7 +4850,7 @@ mark_all_jobs_as_dead () BLOCK_CHILD (set, oset); /* XXX could use js.j_firstj here */ - for (i = 0; i < js.j_jobslots; i++) + for (i = js.j_ndead = 0; i < js.j_jobslots; i++) if (jobs[i]) { jobs[i]->state = JDEAD; @@ -4829,8 +4865,7 @@ mark_all_jobs_as_dead () status of the last CHILD_MAX jobs, so we count the number of dead jobs and mark only enough as notified to save CHILD_MAX statuses. */ static void -mark_dead_jobs_as_notified (force) - int force; +mark_dead_jobs_as_notified (int force) { register int i, ndead, ndeadproc; sigset_t set, oset; @@ -4935,7 +4970,7 @@ itrace("mark_dead_jobs_as_notified: child_max = %d ndead = %d ndeadproc = %d", j /* Here to allow other parts of the shell (like the trap stuff) to freeze and unfreeze the jobs list. */ int -freeze_jobs_list () +freeze_jobs_list (void) { int o; @@ -4944,24 +4979,32 @@ freeze_jobs_list () return o; } -void -unfreeze_jobs_list () +int +unfreeze_jobs_list (void) { + int o; + + o = jobs_list_frozen; jobs_list_frozen = 0; + return 0; } void -set_jobs_list_frozen (s) - int s; +set_jobs_list_frozen (int s) { jobs_list_frozen = s; } -/* Allow or disallow job control to take place. Returns the old value +int +jobs_list_frozen_status (void) +{ + return jobs_list_frozen; +} + +/* Allow or disallow job control to take place. Returns the old value of job_control. */ int -set_job_control (arg) - int arg; +set_job_control (int arg) { int old; @@ -4999,7 +5042,7 @@ set_job_control (arg) /* Turn off all traces of job control. This is run by children of the shell which are going to do shellsy things, like wait (), etc. */ void -without_job_control () +without_job_control (void) { stop_making_children (); start_pipeline (); @@ -5008,13 +5051,14 @@ without_job_control () #endif delete_all_jobs (0); set_job_control (0); + original_pgrp = NO_PID; } /* If this shell is interactive, terminate all stopped jobs and restore the original terminal process group. This is done before the `exec' builtin calls shell_execve. */ void -end_job_control () +end_job_control (void) { if (job_control) terminate_stopped_jobs (); @@ -5026,10 +5070,16 @@ end_job_control () shell_pgrp = original_pgrp; } +int +job_control_active_p (void) +{ + return (job_control && original_pgrp != shell_pgrp && shell_pgrp == terminal_pgrp); +} + /* Restart job control by closing shell tty and reinitializing. This is called after an exec fails in an interactive shell and we do not exit. */ void -restart_job_control () +restart_job_control (void) { if (shell_tty != -1) close (shell_tty); @@ -5040,8 +5090,7 @@ restart_job_control () If the caller passes NCHILD as 0 or -1, this ends up setting it to LMAXCHILD, which is initialized the first time through. */ void -set_maxchild (nchild) - int nchild; +set_maxchild (int nchild) { static int lmaxchild = -1; @@ -5068,7 +5117,7 @@ set_maxchild (nchild) /* Set the handler to run when the shell receives a SIGCHLD signal. */ void -set_sigchld_handler () +set_sigchld_handler (void) { set_signal_handler (SIGCHLD, sigchld_handler); } @@ -5077,8 +5126,7 @@ set_sigchld_handler () /* Read from the read end of a pipe. This is how the process group leader blocks until all of the processes in a pipeline have been made. */ static void -pipe_read (pp) - int *pp; +pipe_read (int *pp) { char ch; @@ -5097,15 +5145,13 @@ pipe_read (pp) /* Functional interface closes our local-to-job-control pipes. */ void -close_pgrp_pipe () +close_pgrp_pipe (void) { sh_closepipe (pgrp_pipe); } void -save_pgrp_pipe (p, clear) - int *p; - int clear; +save_pgrp_pipe (int *p, int clear) { p[0] = pgrp_pipe[0]; p[1] = pgrp_pipe[1]; @@ -5114,8 +5160,7 @@ save_pgrp_pipe (p, clear) } void -restore_pgrp_pipe (p) - int *p; +restore_pgrp_pipe (int *p) { pgrp_pipe[0] = p[0]; pgrp_pipe[1] = p[1]; diff --git a/jobs.h b/jobs.h index 276204f0c..2ec52f59c 100644 --- a/jobs.h +++ b/jobs.h @@ -1,6 +1,6 @@ /* jobs.h -- structures and definitions used by the jobs.c file. */ -/* Copyright (C) 1993-2022 Free Software Foundation, Inc. +/* Copyright (C) 1993-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -72,6 +72,7 @@ typedef struct process { struct pipeline_saver { struct process *pipeline; + int already_making_children; struct pipeline_saver *next; }; @@ -207,7 +208,7 @@ struct procchain { /* System calls. */ #if !defined (HAVE_UNISTD_H) -extern pid_t fork (), getpid (), getpgrp (); +extern pid_t fork (void), getpid (void), getpgrp (void); #endif /* !HAVE_UNISTD_H */ /* Stuff from the jobs.c file. */ @@ -224,97 +225,103 @@ extern PROCESS *last_procsub_child; extern JOB **jobs; -extern void making_children PARAMS((void)); -extern void stop_making_children PARAMS((void)); -extern void cleanup_the_pipeline PARAMS((void)); -extern void discard_last_procsub_child PARAMS((void)); -extern void save_pipeline PARAMS((int)); -extern PROCESS *restore_pipeline PARAMS((int)); -extern void start_pipeline PARAMS((void)); -extern int stop_pipeline PARAMS((int, COMMAND *)); -extern int discard_pipeline PARAMS((PROCESS *)); -extern void append_process PARAMS((char *, pid_t, int, int)); - -extern void save_proc_status PARAMS((pid_t, int)); - -extern PROCESS *procsub_add PARAMS((PROCESS *)); -extern PROCESS *procsub_search PARAMS((pid_t)); -extern PROCESS *procsub_delete PARAMS((pid_t)); -extern int procsub_waitpid PARAMS((pid_t)); -extern void procsub_waitall PARAMS((void)); -extern void procsub_clear PARAMS((void)); -extern void procsub_prune PARAMS((void)); - -extern void delete_job PARAMS((int, int)); -extern void nohup_job PARAMS((int)); -extern void delete_all_jobs PARAMS((int)); -extern void nohup_all_jobs PARAMS((int)); - -extern int count_all_jobs PARAMS((void)); - -extern void terminate_current_pipeline PARAMS((void)); -extern void terminate_stopped_jobs PARAMS((void)); -extern void hangup_all_jobs PARAMS((void)); -extern void kill_current_pipeline PARAMS((void)); - -#if defined (__STDC__) && defined (pid_t) -extern int get_job_by_pid PARAMS((int, int, PROCESS **)); -extern void describe_pid PARAMS((int)); +extern void making_children (void); +extern void stop_making_children (void); +extern void cleanup_the_pipeline (void); +extern void discard_last_procsub_child (void); +extern void save_pipeline (int); +extern PROCESS *restore_pipeline (int); +extern void start_pipeline (void); +extern int stop_pipeline (int, COMMAND *); +extern int discard_pipeline (PROCESS *); +extern void append_process (char *, pid_t, int, int); + +extern void save_proc_status (pid_t, int); +extern int retrieve_proc_status (pid_t, int); +extern void delete_proc_status (pid_t, int); + +extern PROCESS *procsub_add (PROCESS *); +extern PROCESS *procsub_search (pid_t); +extern PROCESS *procsub_delete (pid_t); +extern int procsub_waitpid (pid_t); +extern void procsub_waitall (void); +extern void procsub_clear (void); +extern void procsub_prune (void); + +extern void delete_job (int, int); +extern void nohup_job (int); +extern void delete_all_jobs (int); +extern void nohup_all_jobs (int); + +extern int count_all_jobs (void); + +extern void terminate_current_pipeline (void); +extern void terminate_stopped_jobs (void); +extern void hangup_all_jobs (void); +extern void kill_current_pipeline (void); + +#if defined (pid_t) +extern int get_job_by_pid (int, int, PROCESS **); +extern void describe_pid (int); #else -extern int get_job_by_pid PARAMS((pid_t, int, PROCESS **)); -extern void describe_pid PARAMS((pid_t)); +extern int get_job_by_pid (pid_t, int, PROCESS **); +extern void describe_pid (pid_t); #endif -extern void list_one_job PARAMS((JOB *, int, int, int)); -extern void list_all_jobs PARAMS((int)); -extern void list_stopped_jobs PARAMS((int)); -extern void list_running_jobs PARAMS((int)); +extern void list_one_job (JOB *, int, int, int); +extern void list_all_jobs (int); +extern void list_stopped_jobs (int); +extern void list_running_jobs (int); -extern pid_t make_child PARAMS((char *, int)); +extern pid_t make_child (char *, int); -extern int get_tty_state PARAMS((void)); -extern int set_tty_state PARAMS((void)); +extern int get_tty_state (void); +extern int set_tty_state (void); -extern int job_exit_status PARAMS((int)); -extern int job_exit_signal PARAMS((int)); +extern int job_exit_status (int); +extern int job_exit_signal (int); -extern int wait_for_single_pid PARAMS((pid_t, int)); -extern int wait_for_background_pids PARAMS((struct procstat *)); -extern int wait_for PARAMS((pid_t, int)); -extern int wait_for_job PARAMS((int, int, struct procstat *)); -extern int wait_for_any_job PARAMS((int, struct procstat *)); +extern int process_exit_status (WAIT); -extern void wait_sigint_cleanup PARAMS((void)); +extern int wait_for_single_pid (pid_t, int); +extern int wait_for_background_pids (struct procstat *); +extern int wait_for (pid_t, int); +extern int wait_for_job (int, int, struct procstat *); +extern int wait_for_any_job (int, struct procstat *); -extern void notify_and_cleanup PARAMS((void)); -extern void reap_dead_jobs PARAMS((void)); -extern int start_job PARAMS((int, int)); -extern int kill_pid PARAMS((pid_t, int, int)); -extern int initialize_job_control PARAMS((int)); -extern void initialize_job_signals PARAMS((void)); -extern int give_terminal_to PARAMS((pid_t, int)); +extern void wait_sigint_cleanup (void); -extern void run_sigchld_trap PARAMS((int)); +extern void notify_and_cleanup (void); +extern void reap_dead_jobs (void); +extern int start_job (int, int); +extern int kill_pid (pid_t, int, int); +extern int initialize_job_control (int); +extern void initialize_job_signals (void); +extern int give_terminal_to (pid_t, int); -extern int freeze_jobs_list PARAMS((void)); -extern void unfreeze_jobs_list PARAMS((void)); -extern void set_jobs_list_frozen PARAMS((int)); -extern int set_job_control PARAMS((int)); -extern void without_job_control PARAMS((void)); -extern void end_job_control PARAMS((void)); -extern void restart_job_control PARAMS((void)); -extern void set_sigchld_handler PARAMS((void)); -extern void ignore_tty_job_signals PARAMS((void)); -extern void default_tty_job_signals PARAMS((void)); -extern void get_original_tty_job_signals PARAMS((void)); +extern void run_sigchld_trap (int); -extern void init_job_stats PARAMS((void)); +extern int freeze_jobs_list (void); +extern int unfreeze_jobs_list (void); +extern void set_jobs_list_frozen (int); +extern int jobs_list_frozen_status (void); +extern int set_job_control (int); +extern void without_job_control (void); +extern void end_job_control (void); +extern void restart_job_control (void); +extern void set_sigchld_handler (void); +extern void ignore_tty_job_signals (void); +extern void default_tty_job_signals (void); +extern void get_original_tty_job_signals (void); +extern int job_control_active_p (void); -extern void close_pgrp_pipe PARAMS((void)); -extern void save_pgrp_pipe PARAMS((int *, int)); -extern void restore_pgrp_pipe PARAMS((int *)); +extern void init_job_stats (void); -extern void set_maxchild PARAMS((int)); +extern void close_pgrp_pipe (void); +extern void save_pgrp_pipe (int *, int); +extern void restore_pgrp_pipe (int *); + +extern void set_maxchild (int); #ifdef DEBUG extern void debug_print_pgrps (void); diff --git a/lib/glob/collsyms.h b/lib/glob/collsyms.h index d56df6113..def15655d 100644 --- a/lib/glob/collsyms.h +++ b/lib/glob/collsyms.h @@ -1,7 +1,7 @@ /* collsyms.h -- collating symbol names and their corresponding characters (in ascii) as given by POSIX.2 in table 2.8. */ -/* Copyright (C) 1997-2002 Free Software Foundation, Inc. +/* Copyright (C) 1997-2002,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -38,11 +38,7 @@ static __COLLSYM POSIXCOLL [] = { L("EOT"), L('\004') }, { L("ENQ"), L('\005') }, { L("ACK"), L('\006') }, -#ifdef __STDC__ { L("alert"), L('\a') }, -#else - { L("alert"), L('\007') }, -#endif { L("BS"), L('\010') }, { L("backspace"), L('\b') }, { L("HT"), L('\011') }, diff --git a/lib/glob/glob.c b/lib/glob/glob.c index b66af85c6..4681f58e2 100644 --- a/lib/glob/glob.c +++ b/lib/glob/glob.c @@ -1,6 +1,6 @@ /* glob.c -- file-name wildcard pattern matching for Bash. - Copyright (C) 1985-2021 Free Software Foundation, Inc. + Copyright (C) 1985-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -60,14 +60,6 @@ # define bcopy(s, d, n) ((void) memcpy ((d), (s), (n))) #endif /* !HAVE_BCOPY && !bcopy */ -#if !defined (NULL) -# if defined (__STDC__) -# define NULL ((void *) 0) -# else -# define NULL 0x0 -# endif /* __STDC__ */ -#endif /* !NULL */ - #if !defined (FREE) # define FREE(x) if (x) free (x) #endif @@ -84,11 +76,11 @@ struct globval char *name; }; -extern void throw_to_top_level PARAMS((void)); -extern int sh_eaccess PARAMS((const char *, int)); -extern char *sh_makepath PARAMS((const char *, const char *, int)); -extern int signal_is_pending PARAMS((int)); -extern void run_pending_traps PARAMS((void)); +extern void throw_to_top_level (void); +extern int sh_eaccess (const char *, int); +extern char *sh_makepath (const char *, const char *, int); +extern int signal_is_pending (int); +extern void run_pending_traps (void); extern int extended_glob; @@ -111,29 +103,29 @@ char *glob_error_return; static struct globval finddirs_error_return; /* Some forward declarations. */ -static int skipname PARAMS((char *, char *, int)); +static int skipname (char *, char *, int); #if HANDLE_MULTIBYTE -static int mbskipname PARAMS((char *, char *, int)); +static int mbskipname (char *, char *, int); #endif -void udequote_pathname PARAMS((char *)); +void udequote_pathname (char *); #if HANDLE_MULTIBYTE -void wcdequote_pathname PARAMS((wchar_t *)); -static void wdequote_pathname PARAMS((char *)); -static void dequote_pathname PARAMS((char *)); +void wcdequote_pathname (wchar_t *); +static void wdequote_pathname (char *); +static void dequote_pathname (char *); #else # define dequote_pathname(p) udequote_pathname(p) #endif -static int glob_testdir PARAMS((char *, int)); -static char **glob_dir_to_array PARAMS((char *, char **, int)); +static int glob_testdir (char *, int); +static char **glob_dir_to_array (char *, char **, int); /* Make sure these names continue to agree with what's in smatch.c */ -extern char *glob_patscan PARAMS((char *, char *, int)); -extern wchar_t *glob_patscan_wc PARAMS((wchar_t *, wchar_t *, int)); +extern char *glob_patscan (char *, char *, int, int); +extern wchar_t *glob_patscan_wc (wchar_t *, wchar_t *, wint_t, int); /* And this from gmisc.c/gm_loop.c */ -extern int wextglob_pattern_p PARAMS((wchar_t *)); +extern int wextglob_pattern_p (wchar_t *); -extern char *glob_dirscan PARAMS((char *, int)); +extern char *glob_dirscan (char *, int); /* Compile `glob_loop.c' for single-byte characters. */ #define GCHAR unsigned char @@ -158,8 +150,7 @@ extern char *glob_dirscan PARAMS((char *, int)); /* And now a function that calls either the single-byte or multibyte version of internal_glob_pattern_p. */ int -glob_pattern_p (pattern) - const char *pattern; +glob_pattern_p (const char *pattern) { #if HANDLE_MULTIBYTE size_t n; @@ -196,9 +187,7 @@ glob_pattern_p (pattern) that the name should be skipped. XXX - doesn't handle pattern negation, not sure if it should */ static int -extglob_skipname (pat, dname, flags) - char *pat, *dname; - int flags; +extglob_skipname (char *pat, char *dname, int flags) { char *pp, *pe, *t, *se; int n, r, negate, wild, nullpat, xflags; @@ -207,7 +196,7 @@ extglob_skipname (pat, dname, flags) wild = *pat == '*' || *pat == '?'; pp = pat + 2; se = pp + strlen (pp); /* end of pattern string */ - pe = glob_patscan (pp, se, 0); /* end of extglob pattern */ + pe = glob_patscan (pp, se, 0, 0); /* end of extglob pattern */ /* if pe == 0, this is an invalid extglob pattern */ if (pe == 0) @@ -234,7 +223,7 @@ extglob_skipname (pat, dname, flags) nullpat = pe >= (pat + 2) && pe[-2] == '(' && pe[-1] == ')'; /* check every subpattern */ - while (t = glob_patscan (pp, pe, '|')) + while (t = glob_patscan (pp, pe, '|', 0)) { /* If T == PE and *T == 0 (&& PE[-1] == RPAREN), we have hit the end of a pattern with no trailing characters. */ @@ -267,13 +256,8 @@ extglob_skipname (pat, dname, flags) /* Return 1 if DNAME should be skipped according to PAT. Mostly concerned with matching leading `.'. */ static int -skipname (pat, dname, flags) - char *pat; - char *dname; - int flags; +skipname (char *pat, char *dname, int flags) { - int i; - #if EXTENDED_GLOB if (extglob_pattern_p (pat)) /* XXX */ return (extglob_skipname (pat, dname, flags)); @@ -310,12 +294,8 @@ skipname (pat, dname, flags) #if HANDLE_MULTIBYTE static int -wskipname (pat, dname, flags) - wchar_t *pat, *dname; - int flags; +wskipname (wchar_t *pat, wchar_t *dname, int flags) { - int i; - if (glob_always_skip_dot_and_dotdot && WDOT_OR_DOTDOT (dname)) return 1; @@ -346,9 +326,7 @@ wskipname (pat, dname, flags) } static int -wextglob_skipname (pat, dname, flags) - wchar_t *pat, *dname; - int flags; +wextglob_skipname (wchar_t *pat, wchar_t *dname, int flags) { #if EXTENDED_GLOB wchar_t *pp, *pe, *t, *se, n; @@ -358,7 +336,7 @@ wextglob_skipname (pat, dname, flags) wild = *pat == L'*' || *pat == L'?'; pp = pat + 2; se = pp + wcslen (pp); - pe = glob_patscan_wc (pp, se, 0); + pe = glob_patscan_wc (pp, se, 0, 0); /* if pe == 0, this is an invalid extglob pattern */ if (pe == 0) @@ -382,7 +360,7 @@ wextglob_skipname (pat, dname, flags) nullpat = pe >= (pat + 2) && pe[-2] == L'(' && pe[-1] == L')'; /* check every subpattern */ - while (t = glob_patscan_wc (pp, pe, '|')) + while (t = glob_patscan_wc (pp, pe, '|', 0)) { n = t[-1]; /* ( */ if (wextglob_pattern_p (pp) && n == L')') /* nested extglob? */ @@ -415,9 +393,7 @@ wextglob_skipname (pat, dname, flags) /* Return 1 if DNAME should be skipped according to PAT. Handles multibyte characters in PAT and DNAME. Mostly concerned with matching leading `.'. */ static int -mbskipname (pat, dname, flags) - char *pat, *dname; - int flags; +mbskipname (char *pat, char *dname, int flags) { int ret, ext; wchar_t *pat_wc, *dn_wc; @@ -452,8 +428,7 @@ mbskipname (pat, dname, flags) /* Remove backslashes quoting characters in PATHNAME by modifying PATHNAME. */ void -udequote_pathname (pathname) - char *pathname; +udequote_pathname (char *pathname) { register int i, j; @@ -474,8 +449,7 @@ udequote_pathname (pathname) #if HANDLE_MULTIBYTE /* Remove backslashes quoting characters in PATHNAME by modifying PATHNAME. */ void -wcdequote_pathname (wpathname) - wchar_t *wpathname; +wcdequote_pathname (wchar_t *wpathname) { int i, j; @@ -494,13 +468,11 @@ wcdequote_pathname (wpathname) } static void -wdequote_pathname (pathname) - char *pathname; +wdequote_pathname (char *pathname) { mbstate_t ps; size_t len, n; wchar_t *wpathname; - int i, j; wchar_t *orig_wpathname; if (mbsmbchar (pathname) == 0) @@ -538,8 +510,7 @@ wdequote_pathname (pathname) } static void -dequote_pathname (pathname) - char *pathname; +dequote_pathname (char *pathname) { if (MB_CUR_MAX > 1) wdequote_pathname (pathname); @@ -562,9 +533,7 @@ dequote_pathname (pathname) /* Return 0 if DIR is a directory, -2 if DIR is a symlink, -1 otherwise. */ static int -glob_testdir (dir, flags) - char *dir; - int flags; +glob_testdir (char *dir, int flags) { struct stat finfo; int r; @@ -596,14 +565,9 @@ glob_testdir (dir, flags) directories in the returned list. These two variables exist for the convenience of the caller (always glob_vector). */ static struct globval * -finddirs (pat, sdir, flags, ep, np) - char *pat; - char *sdir; - int flags; - struct globval **ep; - int *np; +finddirs (char *pat, char *sdir, int flags, struct globval **ep, int *np) { - char **r, *n; + char **r; int ndirs; struct globval *ret, *e, *g; @@ -674,29 +638,26 @@ finddirs (pat, sdir, flags, ep, np) Look in errno for more information. */ char ** -glob_vector (pat, dir, flags) - char *pat; - char *dir; - int flags; +glob_vector (char *pat, char *dir, int flags) { DIR *d; - register struct dirent *dp; - struct globval *lastlink, *e, *dirlist; - register struct globval *nextlink; - register char *nextname, *npat, *subdir; - unsigned int count; - int lose, skip, ndirs, isdir, sdlen, add_current, patlen; - register char **name_vector; - register unsigned int i; + struct dirent *dp; + struct globval *nextlink, *lastlink, *e, *dirlist; + char *nextname, *npat, *subdir; + unsigned int count, i; + int lose, skip, ndirs, isdir, add_current; + size_t patlen, sdlen; + char **name_vector; int mflags; /* Flags passed to strmatch (). */ int pflags; /* flags passed to sh_makepath () */ int hasglob; /* return value from glob_pattern_p */ int nalloca; struct globval *firstmalloc, *tmplink; - char *convfn; + char *convfn, *convpat; lastlink = 0; - count = lose = skip = add_current = 0; + count = 0; + lose = skip = add_current = 0; firstmalloc = 0; nalloca = 0; @@ -739,7 +700,7 @@ glob_vector (pat, dir, flags) hasglob = 0; if (skip == 0 && ((hasglob = glob_pattern_p (pat)) == 0 || hasglob == 2)) { - int dirlen; + size_t dirlen; struct stat finfo; if (glob_testdir (dir, 0) < 0) @@ -804,6 +765,10 @@ glob_vector (pat, dir, flags) if (d == NULL) return ((char **) &glob_error_return); + convpat = fnx_fromfs (pat, patlen); + if (convpat != pat) + convpat = savestring (convpat); + /* Compute the flags that will be passed to strmatch(). We don't need to do this every time through the loop. */ mflags = (noglob_dot_filenames ? FNM_PERIOD : FNM_DOTDOT) | FNM_PATHNAME; @@ -921,7 +886,7 @@ glob_vector (pat, dir, flags) free (subdir); convfn = fnx_fromfs (dp->d_name, D_NAMLEN (dp)); - if (strmatch (pat, convfn, mflags) != FNM_NOMATCH) + if (strmatch (convpat, convfn, mflags) != FNM_NOMATCH) { if (nalloca < ALLOCA_MAX) { @@ -963,6 +928,9 @@ glob_vector (pat, dir, flags) } (void) closedir (d); + + if (convpat != pat) + free (convpat); } /* compat: if GX_ADDCURDIR, add the passed directory also. Add an empty @@ -1059,11 +1027,10 @@ glob_vector (pat, dir, flags) it takes care of free()ing that array. Thus, you might think of this function as side-effecting ARRAY. This should handle GX_MARKDIRS. */ static char ** -glob_dir_to_array (dir, array, flags) - char *dir, **array; - int flags; +glob_dir_to_array (char *dir, char **array, int flags) { - register unsigned int i, l; + unsigned int i; + size_t l; int add_slash; char **result, *new; struct stat sb; @@ -1148,14 +1115,12 @@ glob_dir_to_array (dir, array, flags) If there isn't enough memory, then return NULL. If a file system error occurs, return -1; `errno' has the error code. */ char ** -glob_filename (pathname, flags) - char *pathname; - int flags; +glob_filename (char *pathname, int flags) { char **result, **new_result; unsigned int result_size; char *directory_name, *filename, *dname, *fn; - unsigned int directory_len; + size_t directory_len; int free_dirname; /* flag */ int dflags, hasglob; @@ -1214,7 +1179,7 @@ glob_filename (pathname, flags) if (directory_len > 0 && (hasglob = glob_pattern_p (directory_name)) == 1) { char **directories, *d, *p; - register unsigned int i; + unsigned int i; int all_starstar, last_starstar; all_starstar = last_starstar = 0; @@ -1250,7 +1215,7 @@ glob_filename (pathname, flags) so we can compensate if filename is [star][star] */ if ((flags & GX_GLOBSTAR) && all_starstar == 0) { - int dl, prev; + size_t dl, prev; prev = dl = directory_len; while (dl >= 4 && d[dl - 1] == '/' && d[dl - 2] == '*' && @@ -1336,8 +1301,6 @@ glob_filename (pathname, flags) /* Special handling for symlinks to directories with globstar on */ if (all_starstar && (dflags & GX_NULLDIR) == 0) { - int dlen; - /* If we have a directory name that is not null (GX_NULLDIR above) and is a symlink to a directory, we return the symlink if we're not `descending' into it (filename[0] == 0) and return @@ -1380,7 +1343,7 @@ glob_filename (pathname, flags) else { char **array; - register unsigned int l; + unsigned int l; /* If we're expanding **, we don't need to glue the directory name to the results; we've already done it in glob_vector */ @@ -1404,7 +1367,7 @@ glob_filename (pathname, flags) NULL_PLACEHOLDER (temp_results)) #undef NULL_PLACEHOLDER { - register int i, n; + int i, n; for (n = 0; temp_results[n] && *temp_results[n] == 0; n++) ; i = n; @@ -1446,6 +1409,12 @@ glob_filename (pathname, flags) free ((char *) array); else if ((dflags & GX_ALLDIRS) && filename[0] == '*' && filename[1] == '*' && filename[2] == '\0') free (temp_results); /* expanding ** case above */ + else if (array == temp_results) + /* If array == temp_results, either we assigned it above or + glob_dir_to_array returned temp_results because the dirname + was the empty string. In any case, we assume temp_results + has not been freed, and free it here. */ + free (temp_results); if (shouldbreak) break; @@ -1561,6 +1530,7 @@ only_filename: if (free_dirname) free (directory_name); + return (result); } diff --git a/lib/glob/glob.h b/lib/glob/glob.h index 47410577c..f5304e849 100644 --- a/lib/glob/glob.h +++ b/lib/glob/glob.h @@ -1,5 +1,5 @@ /* File-name wildcard pattern matching for GNU. - Copyright (C) 1985-2021 Free Software Foundation, Inc. + Copyright (C) 1985-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -34,11 +34,11 @@ #define GX_SYMLINK 0x1000 /* internal -- symlink to a directory */ #define GX_NEGATE 0x2000 /* internal -- extglob pattern being negated */ -extern int glob_pattern_p PARAMS((const char *)); -extern char **glob_vector PARAMS((char *, char *, int)); -extern char **glob_filename PARAMS((char *, int)); +extern int glob_pattern_p (const char *); +extern char **glob_vector (char *, char *, int); +extern char **glob_filename (char *, int); -extern int extglob_pattern_p PARAMS((const char *)); +extern int extglob_pattern_p (const char *); extern char *glob_error_return; extern int noglob_dot_filenames; diff --git a/lib/glob/glob_loop.c b/lib/glob/glob_loop.c index 467e7ae33..e776e7997 100644 --- a/lib/glob/glob_loop.c +++ b/lib/glob/glob_loop.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2020 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -16,13 +16,12 @@ along with Bash. If not, see <http://www.gnu.org/licenses/>. */ -static int INTERNAL_GLOB_PATTERN_P PARAMS((const GCHAR *)); +static int INTERNAL_GLOB_PATTERN_P (const GCHAR *); /* Return nonzero if PATTERN has any special globbing chars in it. Compiled twice, once each for single-byte and multibyte characters. */ static int -INTERNAL_GLOB_PATTERN_P (pattern) - const GCHAR *pattern; +INTERNAL_GLOB_PATTERN_P (const GCHAR *pattern) { register const GCHAR *p; register GCHAR c; diff --git a/lib/glob/gm_loop.c b/lib/glob/gm_loop.c index ac516f82c..583ba2f40 100644 --- a/lib/glob/gm_loop.c +++ b/lib/glob/gm_loop.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. +/* Copyright (C) 1991-2017,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -18,8 +18,7 @@ #if EXTENDED_GLOB int -EXTGLOB_PATTERN_P (pat) - const CHAR *pat; +EXTGLOB_PATTERN_P (const CHAR *pat) { switch (pat[0]) { @@ -42,9 +41,7 @@ EXTGLOB_PATTERN_P (pat) versions. FLAGS is a subset of strmatch flags; used to do case-insensitive matching for now. */ int -MATCH_PATTERN_CHAR (pat, string, flags) - CHAR *pat, *string; - int flags; +MATCH_PATTERN_CHAR (CHAR *pat, CHAR *string, int flags) { CHAR c; @@ -71,12 +68,10 @@ MATCH_PATTERN_CHAR (pat, string, flags) } int -MATCHLEN (pat, max) - CHAR *pat; - size_t max; +MATCHLEN (CHAR *pat, size_t max) { CHAR c; - int matlen, bracklen, t, in_cclass, in_collsym, in_equiv; + int matlen, bracklen, in_cclass, in_collsym, in_equiv; if (*pat == 0) return (0); diff --git a/lib/glob/gmisc.c b/lib/glob/gmisc.c index f3d74cea5..45ea4f4ea 100644 --- a/lib/glob/gmisc.c +++ b/lib/glob/gmisc.c @@ -1,6 +1,6 @@ /* gmisc.c -- miscellaneous pattern matching utility functions for Bash. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -38,7 +38,7 @@ #include "glob.h" /* Make sure these names continue to agree with what's in smatch.c */ -extern char *glob_patscan PARAMS((char *, char *, int)); +extern char *glob_patscan (char *, char *, int, int); /* Compile `gm_loop.c' for single-byte characters. */ #define CHAR char @@ -79,9 +79,7 @@ extern char *glob_patscan PARAMS((char *, char *, int)); is only called when extended_glob is set, so we have to skip over extglob patterns x(...) */ char * -glob_dirscan (pat, dirsep) - char *pat; - int dirsep; +glob_dirscan (char *pat, int dirsep) { char *p, *d, *pe, *se; @@ -92,7 +90,7 @@ glob_dirscan (pat, dirsep) { if (se == 0) se = p + strlen (p) - 1; - pe = glob_patscan (p + 2, se, 0); + pe = glob_patscan (p + 2, se, 0, 0); if (pe == 0) continue; else if (*pe == 0) diff --git a/lib/glob/sm_loop.c b/lib/glob/sm_loop.c index 247ba28aa..303e1f0c5 100644 --- a/lib/glob/sm_loop.c +++ b/lib/glob/sm_loop.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2021 Free Software Foundation, Inc. +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -24,22 +24,19 @@ struct STRUCT CHAR *string; }; -int FCT PARAMS((CHAR *, CHAR *, int)); +int FCT (CHAR *, CHAR *, int); -static int GMATCH PARAMS((CHAR *, CHAR *, CHAR *, CHAR *, struct STRUCT *, int)); -static CHAR *PARSE_COLLSYM PARAMS((CHAR *, INT *)); -static CHAR *BRACKMATCH PARAMS((CHAR *, U_CHAR, int)); -static int EXTMATCH PARAMS((INT, CHAR *, CHAR *, CHAR *, CHAR *, int)); +static int GMATCH (CHAR *, CHAR *, CHAR *, CHAR *, struct STRUCT *, int); +static inline CHAR *PARSE_SUBBRACKET (CHAR *, int); +static CHAR *BRACKMATCH (CHAR *, U_CHAR, int); +static int EXTMATCH (INT, CHAR *, CHAR *, CHAR *, CHAR *, int); -extern void DEQUOTE_PATHNAME PARAMS((CHAR *)); +extern void DEQUOTE_PATHNAME (CHAR *); -/*static*/ CHAR *PATSCAN PARAMS((CHAR *, CHAR *, INT)); +/*static*/ CHAR *PATSCAN (CHAR *, CHAR *, INT, int); int -FCT (pattern, string, flags) - CHAR *pattern; - CHAR *string; - int flags; +FCT (CHAR *pattern, CHAR *string, int flags) { CHAR *se, *pe; @@ -55,11 +52,7 @@ FCT (pattern, string, flags) /* Match STRING against the filename pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ static int -GMATCH (string, se, pattern, pe, ends, flags) - CHAR *string, *se; - CHAR *pattern, *pe; - struct STRUCT *ends; - int flags; +GMATCH (CHAR *string, CHAR *se, CHAR *pattern, CHAR *pe, struct STRUCT *ends, int flags) { CHAR *p, *n; /* pattern, string */ INT c; /* current pattern character - XXX U_CHAR? */ @@ -120,7 +113,7 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe); we are matching a pathname. */ if ((flags & FNM_DOTDOT) && ((n == string && SDOT_OR_DOTDOT(n)) || - ((flags & FNM_PATHNAME) && n[-1] == L('/') && PDOT_OR_DOTDOT(n)))) + ((flags & FNM_PATHNAME) && n > string && n[-1] == L('/') && PDOT_OR_DOTDOT(n)))) return FNM_NOMATCH; break; @@ -166,7 +159,7 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe); we are matching a pathname. */ if ((flags & FNM_DOTDOT) && ((n == string && SDOT_OR_DOTDOT(n)) || - ((flags & FNM_PATHNAME) && n[-1] == L('/') && PDOT_OR_DOTDOT(n)))) + ((flags & FNM_PATHNAME) && n > string && n[-1] == L('/') && PDOT_OR_DOTDOT(n)))) return FNM_NOMATCH; if (p == pe) @@ -192,7 +185,7 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe); that's OK, since we can match 0 or 1 occurrences. We need to skip the glob pattern and see if we match the rest of the string. */ - newn = PATSCAN (p + 1, pe, 0); + newn = PATSCAN (p + 1, pe, 0, flags); /* If NEWN is 0, we have an ill-formed pattern. */ p = newn ? newn : pe; } @@ -225,7 +218,7 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe); that's OK, since we can match 0 or more occurrences. We need to skip the glob pattern and see if we match the rest of the string. */ - newn = PATSCAN (p + 1, pe, 0); + newn = PATSCAN (p + 1, pe, 0, flags); /* If NEWN is 0, we have an ill-formed pattern. */ p = newn ? newn : pe; } @@ -343,12 +336,17 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe); (n == string || ((flags & FNM_PATHNAME) && n[-1] == L('/')))) return (FNM_NOMATCH); + /* If we are matching pathnames, we can't match a slash with a + bracket expression. */ + if (sc == L('/') && (flags & FNM_PATHNAME)) + return (FNM_NOMATCH); + /* `?' cannot match `.' or `..' if it is the first character of the string or if it is the first character following a slash and we are matching a pathname. */ if ((flags & FNM_DOTDOT) && ((n == string && SDOT_OR_DOTDOT(n)) || - ((flags & FNM_PATHNAME) && n[-1] == L('/') && PDOT_OR_DOTDOT(n)))) + ((flags & FNM_PATHNAME) && n > string && n[-1] == L('/') && PDOT_OR_DOTDOT(n)))) return FNM_NOMATCH; p = BRACKMATCH (p, sc, flags); @@ -375,51 +373,36 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe); return (FNM_NOMATCH); } -/* Parse a bracket expression collating symbol ([.sym.]) starting at P, find - the value of the symbol, and move P past the collating symbol expression. - The value is returned in *VP, if VP is not null. */ -static CHAR * -PARSE_COLLSYM (p, vp) - CHAR *p; - INT *vp; +#define SLASH_PATHNAME(c) (c == L('/') && (flags & FNM_PATHNAME)) + +/* Parse a special bracket expression symbol ([.sym.], [=char=], [:cclass:]), + starting at P, and return the position of the terminating .], =], or :]. + P points to the character after the opening bracket. Returns NULL if the + symbol isn't correctly terminated. */ +static inline CHAR * +PARSE_SUBBRACKET (CHAR *p, int flags) { - register int pc; - INT val; + CHAR type; /* the type of special bracket expression symbol */ - p++; /* move past the `.' */ - - for (pc = 0; p[pc]; pc++) - if (p[pc] == L('.') && p[pc+1] == L(']')) - break; - if (p[pc] == 0) - { - if (vp) - *vp = INVALID; - return (p + pc); - } - val = COLLSYM (p, pc); - if (vp) - *vp = val; - return (p + pc + 2); + type = *p; + + /* POSIX allows a right bracket to appear in a collating symbol. */ + while (*++p != L('\0') && SLASH_PATHNAME (*p) == 0 && (type != L('.') && *p == L(']')) == 0) + if (*p == type && p[1] == L(']')) + return p; + return NULL; } /* Use prototype definition here because of type promotion. */ static CHAR * -#if defined (PROTOTYPES) BRACKMATCH (CHAR *p, U_CHAR test, int flags) -#else -BRACKMATCH (p, test, flags) - CHAR *p; - U_CHAR test; - int flags; -#endif { register CHAR cstart, cend, c; register int not; /* Nonzero if the sense of the character class is inverted. */ - int brcnt, forcecoll, isrange; + int forcecoll, isrange; INT pc; CHAR *savep; - CHAR *brchrp; + CHAR *close; U_CHAR orig_test; orig_test = test; @@ -444,13 +427,14 @@ BRACKMATCH (p, test, flags) /* POSIX.2 equivalence class: [=c=]. See POSIX.2 2.8.3.2. Find the end of the equivalence class, move the pattern pointer past - it, and check for equivalence. XXX - this handles only - single-character equivalence classes, which is wrong, or at - least incomplete. */ - if (c == L('[') && *p == L('=') && p[2] == L('=') && p[3] == L(']')) + it, and check for equivalence. */ + if (c == L('[') && *p == L('=') && (close = PARSE_SUBBRACKET (p, flags)) != NULL) { - pc = FOLD (p[1]); - p += 4; + p++; + pc = COLLSYM (p, close - p); + pc = FOLD (pc); + p = close + 2; + if (COLLEQUIV (test, pc)) { /*[*/ /* Move past the closing `]', since the first thing we do at @@ -463,36 +447,31 @@ BRACKMATCH (p, test, flags) c = *p++; if (c == L('\0')) return ((test == L('[')) ? savep : (CHAR *)0); /*]*/ + else if (c == L('/') && (flags & FNM_PATHNAME)) + return ((test == L('[')) ? savep : (CHAR *)0); /*]*/ + else if (c == L(']')) + break; c = FOLD (c); continue; } } /* POSIX.2 character class expression. See POSIX.2 2.8.3.2. */ - if (c == L('[') && *p == L(':')) + if (c == L('[') && *p == L(':') && (close = PARSE_SUBBRACKET (p, flags)) != NULL) { - CHAR *close, *ccname; + CHAR *ccname; pc = 0; /* make sure invalid char classes don't match. */ - /* Find end of character class name */ - for (close = p + 1; *close != '\0'; close++) - if (*close == L(':') && *(close+1) == L(']')) - break; - if (*close != L('\0')) + ccname = (CHAR *)malloc ((close - p) * sizeof (CHAR)); + if (ccname) { - ccname = (CHAR *)malloc ((close - p) * sizeof (CHAR)); - if (ccname == 0) - pc = 0; - else - { - bcopy (p + 1, ccname, (close - p - 1) * sizeof (CHAR)); - *(ccname + (close - p - 1)) = L('\0'); - /* As a result of a POSIX discussion, char class names are - allowed to be quoted (?) */ - DEQUOTE_PATHNAME (ccname); - pc = IS_CCLASS (orig_test, (XCHAR *)ccname); - } + bcopy (p + 1, ccname, (close - p - 1) * sizeof (CHAR)); + *(ccname + (close - p - 1)) = L('\0'); + /* As a result of a POSIX discussion, char class names are + allowed to be quoted (?) */ + DEQUOTE_PATHNAME (ccname); + pc = IS_CCLASS (orig_test, (XCHAR *)ccname); if (pc == -1) { /* CCNAME is not a valid character class in the current @@ -504,14 +483,12 @@ BRACKMATCH (p, test, flags) string. If we don't want to do that, take out the update of P. */ pc = 0; - p = close + 2; } - else - p = close + 2; /* move past the closing `]' */ - - free (ccname); } - + free (ccname); + + p = close + 2; + if (pc) { /*[*/ /* Move past the closing `]', since the first thing we do at @@ -526,6 +503,8 @@ BRACKMATCH (p, test, flags) c = *p++; if (c == L('\0')) return ((test == L('[')) ? savep : (CHAR *)0); + else if (c == L('/') && (flags & FNM_PATHNAME)) + return ((test == L('[')) ? savep : (CHAR *)0); /*]*/ else if (c == L(']')) break; c = FOLD (c); @@ -537,20 +516,20 @@ BRACKMATCH (p, test, flags) the symbol name, make sure it is terminated by `.]', translate the name to a character using the external table, and do the comparison. */ - if (c == L('[') && *p == L('.')) + if (c == L('[') && *p == L('.') && (close = PARSE_SUBBRACKET (p, flags)) != NULL) { - p = PARSE_COLLSYM (p, &pc); - /* An invalid collating symbol cannot be the first point of a - range. If it is, we set cstart to one greater than `test', - so any comparisons later will fail. */ - cstart = (pc == INVALID) ? test + 1 : pc; + p++; + cstart = COLLSYM (p, close - p); + p = close + 2; forcecoll = 1; } if (!(flags & FNM_NOESCAPE) && c == L('\\')) { if (*p == '\0') - return (CHAR *)0; + return ((test == L('[')) ? savep : (CHAR *)0); + else if (*p == L('/') && (flags & FNM_PATHNAME)) + return ((test == L('[')) ? savep : (CHAR *)0); cstart = cend = *p++; } @@ -565,15 +544,23 @@ BRACKMATCH (p, test, flags) if (c == L('\0')) return ((test == L('[')) ? savep : (CHAR *)0); + /* POSIX.2 2.13.3 says: `If a <slash> character is found following an + unescaped <left-square-bracket> character before a corresponding + <right-square-bracket> is found, the open bracket shall be treated + as an ordinary character.' If we find a slash in a bracket + expression and the flags indicate we're supposed to be treating the + string like a pathname, we have to treat the `[' as just a character + to be matched. */ + if (c == L('/') && (flags & FNM_PATHNAME)) + return ((test == L('[')) ? savep : (CHAR *)0); + c = *p++; c = FOLD (c); if (c == L('\0')) return ((test == L('[')) ? savep : (CHAR *)0); - - if ((flags & FNM_PATHNAME) && c == L('/')) - /* [/] can never match when matching a pathname. */ - return (CHAR *)0; + else if (c == L('/') && (flags & FNM_PATHNAME)) + return ((test == L('[')) ? savep : (CHAR *)0); /* This introduces a range, unless the `-' is the last character of the class. Find the end of the range @@ -584,14 +571,14 @@ BRACKMATCH (p, test, flags) if (!(flags & FNM_NOESCAPE) && cend == L('\\')) cend = *p++; if (cend == L('\0')) - return (CHAR *)0; - if (cend == L('[') && *p == L('.')) + return ((test == L('[')) ? savep : (CHAR *)0); + else if (cend == L('/') && (flags & FNM_PATHNAME)) + return ((test == L('[')) ? savep : (CHAR *)0); + if (cend == L('[') && *p == L('.') && (close = PARSE_SUBBRACKET (p, flags)) != NULL) { - p = PARSE_COLLSYM (p, &pc); - /* An invalid collating symbol cannot be the second part of a - range expression. If we get one, we set cend to one fewer - than the test character to make sure the range test fails. */ - cend = (pc == INVALID) ? test - 1 : pc; + p++; + cend = COLLSYM (p, close - p); + p = close + 2; forcecoll = 1; } cend = FOLD (cend); @@ -627,46 +614,37 @@ BRACKMATCH (p, test, flags) matched: /* Skip the rest of the [...] that already matched. */ c = *--p; - brcnt = 1; - brchrp = 0; - while (brcnt > 0) + while (1) { - int oc; - /* A `[' without a matching `]' is just another character to match. */ if (c == L('\0')) return ((test == L('[')) ? savep : (CHAR *)0); + else if (c == L('/') && (flags & FNM_PATHNAME)) + return ((test == L('[')) ? savep : (CHAR *)0); - oc = c; c = *p++; if (c == L('[') && (*p == L('=') || *p == L(':') || *p == L('.'))) { - brcnt++; - brchrp = p++; /* skip over the char after the left bracket */ - if ((c = *p) == L('\0')) - return ((test == L('[')) ? savep : (CHAR *)0); - /* If *brchrp == ':' we should check that the rest of the characters - form a valid character class name. We don't do that yet, but we - keep BRCHRP in case we want to. */ - } - /* We only want to check brchrp if we set it above. */ - else if (c == L(']') && brcnt > 1 && brchrp != 0 && oc == *brchrp) - { - brcnt--; - brchrp = 0; /* just in case */ + if ((close = PARSE_SUBBRACKET (p, flags)) != NULL) + p = close + 2; } /* Left bracket loses its special meaning inside a bracket expression. It is only valid when followed by a `.', `=', or `:', which we check for above. Technically the right bracket can appear in a collating - symbol, so we check for that here. Otherwise, it terminates the - bracket expression. */ - else if (c == L(']') && (brchrp == 0 || *brchrp != L('.')) && brcnt >= 1) - brcnt = 0; + symbol, so we check for that as well. The right brackets terminating + collating symbols, equivalence classes, or character classes are + processed by PARSE_SUBBRACKET. Otherwise, a right bracket terminates + the bracket expression. */ + else if (c == L(']')) + break; else if (!(flags & FNM_NOESCAPE) && c == L('\\')) { if (*p == '\0') - return (CHAR *)0; - /* XXX 1003.2d11 is unclear if this is right. */ + return ((test == L('[')) ? savep : (CHAR *)0); + /* We don't allow backslash to quote slash if we're matching pathnames */ + else if (*p == L('/') && (flags & FNM_PATHNAME)) + return ((test == L('[')) ? savep : (CHAR *)0); + /* Posix issue 8 leaves this unspecified for the shell. */ ++p; } } @@ -695,16 +673,12 @@ matched: first character after the matching DELIM or NULL if the pattern is empty or invalid. */ /*static*/ CHAR * -PATSCAN (string, end, delim) - CHAR *string, *end; - INT delim; +PATSCAN (CHAR *string, CHAR *end, INT delim, int flags) { int pnest, bnest, skip; - INT cchar; - CHAR *s, c, *bfirst; + CHAR *s, c, *bfirst, *t; pnest = bnest = skip = 0; - cchar = 0; bfirst = NULL; if (string == end) @@ -722,7 +696,8 @@ PATSCAN (string, end, delim) switch (c) { case L('\\'): - skip = 1; + if ((flags & FNM_NOESCAPE) == 0) + skip = 1; break; case L('\0'): @@ -740,7 +715,11 @@ PATSCAN (string, end, delim) bnest++; } else if (s[1] == L(':') || s[1] == L('.') || s[1] == L('=')) - cchar = s[1]; + { + t = PARSE_SUBBRACKET (s + 1, flags); + if (t) + s = t + 2 - 1; /* -1 to cancel s++ in loop above */ + } break; /* `]' is not special if it's the first char (after a leading `!' @@ -749,9 +728,7 @@ PATSCAN (string, end, delim) case L(']'): if (bnest) { - if (cchar && s[-1] == cchar) - cchar = 0; - else if (s != bfirst) + if (s != bfirst) { bnest--; bfirst = 0; @@ -781,8 +758,7 @@ PATSCAN (string, end, delim) /* Return 0 if dequoted pattern matches S in the current locale. */ static int -STRCOMPARE (p, pe, s, se) - CHAR *p, *pe, *s, *se; +STRCOMPARE (CHAR *p, CHAR *pe, CHAR *s, CHAR *se) { int ret; CHAR c1, c2; @@ -821,11 +797,7 @@ STRCOMPARE (p, pe, s, se) the first time an extended pattern specifier is encountered, so it calls gmatch recursively. */ static int -EXTMATCH (xc, s, se, p, pe, flags) - INT xc; /* select which operation */ - CHAR *s, *se; - CHAR *p, *pe; - int flags; +EXTMATCH (INT xc, CHAR *s, CHAR *se, CHAR *p, CHAR *pe, int flags) { CHAR *prest; /* pointer to rest of pattern */ CHAR *psub; /* pointer to sub-pattern */ @@ -840,12 +812,14 @@ fprintf(stderr, "extmatch: p = %s; pe = %s\n", p, pe); fprintf(stderr, "extmatch: flags = %d\n", flags); #endif - prest = PATSCAN (p + (*p == L('(')), pe, 0); /* ) */ + prest = PATSCAN (p + (*p == L('(')), pe, 0, flags); /* ) */ if (prest == 0) /* If PREST is 0, we failed to scan a valid pattern. In this case, we just want to compare the two as strings. */ return (STRCOMPARE (p - 1, pe, s, se)); + glob_recursion_depth++; + switch (xc) { case L('+'): /* match one or more occurrences */ @@ -861,7 +835,7 @@ fprintf(stderr, "extmatch: flags = %d\n", flags); string. */ for (psub = p + 1; ; psub = pnext) { - pnext = PATSCAN (psub, pe, L('|')); + pnext = PATSCAN (psub, pe, L('|'), flags); for (srest = s; srest <= se; srest++) { /* Match this substring (S -> SREST) against this @@ -898,7 +872,7 @@ fprintf(stderr, "extmatch: flags = %d\n", flags); rest of the string. */ for (psub = p + 1; ; psub = pnext) { - pnext = PATSCAN (psub, pe, L('|')); + pnext = PATSCAN (psub, pe, L('|'), flags); srest = (prest == pe) ? se : s; for ( ; srest <= se; srest++) { @@ -919,7 +893,7 @@ fprintf(stderr, "extmatch: flags = %d\n", flags); m1 = 0; for (psub = p + 1; ; psub = pnext) { - pnext = PATSCAN (psub, pe, L('|')); + pnext = PATSCAN (psub, pe, L('|'), flags); /* If one of the patterns matches, just bail immediately. */ if (m1 = (GMATCH (s, srest, psub, pnext - 1, NULL, flags) == 0)) break; @@ -933,9 +907,7 @@ fprintf(stderr, "extmatch: flags = %d\n", flags); if (m1 == 0 && (flags & FNM_PERIOD) && *s == '.') return (FNM_NOMATCH); - if (m1 == 0 && (flags & FNM_DOTDOT) && - (SDOT_OR_DOTDOT (s) || - ((flags & FNM_PATHNAME) && s[-1] == L('/') && PDOT_OR_DOTDOT(s)))) + if (m1 == 0 && (flags & FNM_DOTDOT) && (SDOT_OR_DOTDOT (s))) return (FNM_NOMATCH); /* if srest > s, we are not at start of string */ @@ -960,7 +932,7 @@ fprintf(stderr, "extmatch: flags = %d\n", flags); #undef FCT #undef GMATCH #undef COLLSYM -#undef PARSE_COLLSYM +#undef PARSE_SUBBRACKET #undef PATSCAN #undef STRCOMPARE #undef EXTMATCH diff --git a/lib/glob/smatch.c b/lib/glob/smatch.c index 379c2d2e6..e42b8fc1d 100644 --- a/lib/glob/smatch.c +++ b/lib/glob/smatch.c @@ -1,7 +1,7 @@ /* strmatch.c -- ksh-like extended pattern matching for the shell and filename globbing. */ -/* Copyright (C) 1991-2021 Free Software Foundation, Inc. +/* Copyright (C) 1991-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -60,14 +60,14 @@ extern int fnmatch (const char *, const char *, int); #endif int glob_asciirange = GLOBASCII_DEFAULT; +int glob_recursion_depth; #if FNMATCH_EQUIV_FALLBACK /* Construct a string w1 = "c1" and a pattern w2 = "[[=c2=]]" and pass them to fnmatch to see if wide characters c1 and c2 collate as members of the same equivalence class. We can't really do this portably any other way */ static int -_fnmatch_fallback (s, p) - int s, p; /* string char, patchar */ +_fnmatch_fallback (int s, int p) { char s1[2]; /* string */ char s2[8]; /* constructed pattern */ @@ -99,13 +99,10 @@ _fnmatch_fallback (s, p) /* Return 0 if C1 == C2 or collates equally if FORCECOLL is non-zero. */ static int -charcmp (c1, c2, forcecoll) - int c1, c2; - int forcecoll; +charcmp (int c1, int c2, int forcecoll) { static char s1[2] = { ' ', '\0' }; static char s2[2] = { ' ', '\0' }; - int ret; /* Eight bits only. Period. */ c1 &= 0xFF; @@ -124,9 +121,7 @@ charcmp (c1, c2, forcecoll) } static int -rangecmp (c1, c2, forcecoll) - int c1, c2; - int forcecoll; +rangecmp (int c1, int c2, int forcecoll) { int r; @@ -144,9 +139,12 @@ rangecmp (c1, c2, forcecoll) #if defined (HAVE_STRCOLL) /* Returns 1 if chars C and EQUIV collate equally in the current locale. */ static int -collequiv (c, equiv) - int c, equiv; +collseqcmp (int c, int equiv) { + /* Make sure characters >= 0x80 are compared as bytes in a UTF-8 locale. */ + if (locale_utf8locale && (UTF8_SINGLEBYTE (c) == 0 || UTF8_SINGLEBYTE (equiv) == 0)) + return (c == equiv); + if (charcmp (c, equiv, 1) == 0) return 1; @@ -158,7 +156,7 @@ collequiv (c, equiv) } #else -# define collequiv(c, equiv) ((c) == (equiv)) +# define collseqcmp(c, equiv) ((c) == (equiv)) #endif #define _COLLSYM _collsym @@ -167,9 +165,7 @@ collequiv (c, equiv) #include "collsyms.h" static int -collsym (s, len) - CHAR *s; - int len; +collsym (CHAR *s, int len) { register struct _collsym *csp; char *x; @@ -207,8 +203,7 @@ static char const *const cclass_name[] = #define N_CHAR_CLASS (sizeof(cclass_name) / sizeof (cclass_name[0])) static enum char_class -is_valid_cclass (name) - const char *name; +is_valid_cclass (const char *name) { enum char_class ret; int i; @@ -228,9 +223,7 @@ is_valid_cclass (name) } static int -cclass_test (c, char_class) - int c; - enum char_class char_class; +cclass_test (int c, enum char_class char_class) { int result; @@ -287,13 +280,14 @@ cclass_test (c, char_class) } static int -is_cclass (c, name) - int c; - const char *name; +is_cclass (int c, const char *name) { enum char_class char_class; int result; + if (locale_utf8locale && UTF8_SINGLEBYTE (c) == 0) + return -1; + char_class = is_valid_cclass (name); if (char_class == CC_NO_CLASS) return -1; @@ -304,9 +298,10 @@ is_cclass (c, name) /* Now include `sm_loop.c' for single-byte characters. */ /* The result of FOLD is an `unsigned char' */ -# define FOLD(c) ((flags & FNM_CASEFOLD) \ - ? TOLOWER ((unsigned char)c) \ - : ((unsigned char)c)) +# define FOLD(c) \ + (((flags & FNM_CASEFOLD) && (locale_utf8locale == 0 || UTF8_SINGLEBYTE (c))) \ + ? TOLOWER ((unsigned char)c) \ + : ((unsigned char)c)) #if !defined (__CYGWIN__) # define ISDIRSEP(c) ((c) == '/') @@ -321,7 +316,7 @@ is_cclass (c, name) #define FCT internal_strmatch #define GMATCH gmatch #define COLLSYM collsym -#define PARSE_COLLSYM parse_collsym +#define PARSE_SUBBRACKET parse_subbracket #define BRACKMATCH brackmatch #define PATSCAN glob_patscan #define STRCOMPARE strcompare @@ -334,7 +329,7 @@ is_cclass (c, name) #define STRLEN(S) strlen(S) #define STRCMP(S1, S2) strcmp((S1), (S2)) #define RANGECMP(C1, C2, F) rangecmp((C1), (C2), (F)) -#define COLLEQUIV(C1, C2) collequiv((C1), (C2)) +#define COLLEQUIV(C1, C2) collseqcmp((C1), (C2)) #define CTYPE_T enum char_class #define IS_CCLASS(C, S) is_cclass((C), (S)) #include "sm_loop.c" @@ -353,15 +348,15 @@ is_cclass (c, name) # define STREQ(s1, s2) ((wcscmp (s1, s2) == 0)) # define STREQN(a, b, n) ((a)[0] == (b)[0] && wcsncmp(a, b, n) == 0) -extern char *mbsmbchar PARAMS((const char *)); +extern char *mbsmbchar (const char *); #if FNMATCH_EQUIV_FALLBACK /* Construct a string w1 = "c1" and a pattern w2 = "[[=c2=]]" and pass them to fnmatch to see if wide characters c1 and c2 collate as members of the - same equivalence class. We can't really do this portably any other way */ + same equivalence class. We can't really do this portably any other way + c1 == string char, c2 == patchar */ static int -_fnmatch_fallback_wc (c1, c2) - wchar_t c1, c2; /* string char, patchar */ +_fnmatch_fallback_wc (wchar_t c1, wchar_t c2) { char w1[MB_LEN_MAX+1]; /* string */ char w2[MB_LEN_MAX+8]; /* constructed pattern */ @@ -387,13 +382,10 @@ _fnmatch_fallback_wc (c1, c2) #endif static int -charcmp_wc (c1, c2, forcecoll) - wint_t c1, c2; - int forcecoll; +charcmp_wc (wint_t c1, wint_t c2, int forcecoll) { static wchar_t s1[2] = { L' ', L'\0' }; static wchar_t s2[2] = { L' ', L'\0' }; - int r; if (c1 == c2) return 0; @@ -408,9 +400,7 @@ charcmp_wc (c1, c2, forcecoll) } static int -rangecmp_wc (c1, c2, forcecoll) - wint_t c1, c2; - int forcecoll; +rangecmp_wc (wint_t c1, wint_t c2, int forcecoll) { int r; @@ -425,8 +415,7 @@ rangecmp_wc (c1, c2, forcecoll) /* Returns 1 if wide chars C and EQUIV collate equally in the current locale. */ static int -collequiv_wc (c, equiv) - wint_t c, equiv; +collseqcmp_wc (wint_t c, wint_t equiv) { wchar_t s, p; @@ -453,9 +442,7 @@ collequiv_wc (c, equiv) # include "collsyms.h" static wint_t -collwcsym (s, len) - wchar_t *s; - int len; +collwcsym (wchar_t *s, int len) { register struct _collwcsym *csp; @@ -470,9 +457,7 @@ collwcsym (s, len) } static int -is_wcclass (wc, name) - wint_t wc; - wchar_t *name; +is_wcclass (wint_t wc, wchar_t *name) { char *mbs; mbstate_t state; @@ -524,8 +509,7 @@ is_wcclass (wc, name) This only uses single-byte code, but is only needed to support multibyte locales. */ static int -posix_cclass_only (pattern) - char *pattern; +posix_cclass_only (char *pattern) { char *p, *p1; char cc[16]; /* sufficient for all valid posix char class names */ @@ -577,7 +561,7 @@ posix_cclass_only (pattern) #define FCT internal_wstrmatch #define GMATCH gmatch_wc #define COLLSYM collwcsym -#define PARSE_COLLSYM parse_collwcsym +#define PARSE_SUBBRACKET parse_subbracket_wc #define BRACKMATCH brackmatch_wc #define PATSCAN glob_patscan_wc #define STRCOMPARE wscompare @@ -590,7 +574,7 @@ posix_cclass_only (pattern) #define STRLEN(S) wcslen(S) #define STRCMP(S1, S2) wcscmp((S1), (S2)) #define RANGECMP(C1, C2, F) rangecmp_wc((C1), (C2), (F)) -#define COLLEQUIV(C1, C2) collequiv_wc((C1), (C2)) +#define COLLEQUIV(C1, C2) collseqcmp_wc((C1), (C2)) #define CTYPE_T enum char_class #define IS_CCLASS(C, S) is_wcclass((C), (S)) #include "sm_loop.c" @@ -598,16 +582,14 @@ posix_cclass_only (pattern) #endif /* HAVE_MULTIBYTE */ int -xstrmatch (pattern, string, flags) - char *pattern; - char *string; - int flags; +xstrmatch (char *pattern, char *string, int flags) { #if HANDLE_MULTIBYTE int ret; size_t n; wchar_t *wpattern, *wstring; - size_t plen, slen, mplen, mslen; + + glob_recursion_depth = 0; if (MB_CUR_MAX == 1) return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags)); @@ -633,6 +615,8 @@ xstrmatch (pattern, string, flags) return ret; #else + glob_recursion_depth = 0; + return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags)); #endif /* !HANDLE_MULTIBYTE */ } diff --git a/lib/glob/strmatch.c b/lib/glob/strmatch.c index 5b7b49fb2..5a2c15f95 100644 --- a/lib/glob/strmatch.c +++ b/lib/glob/strmatch.c @@ -1,7 +1,7 @@ /* strmatch.c -- ksh-like extended pattern matching for the shell and filename globbing. */ -/* Copyright (C) 1991-2020 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -24,16 +24,13 @@ #include "stdc.h" #include "strmatch.h" -extern int xstrmatch PARAMS((char *, char *, int)); +extern int xstrmatch (char *, char *, int); #if defined (HANDLE_MULTIBYTE) -extern int internal_wstrmatch PARAMS((wchar_t *, wchar_t *, int)); +extern int internal_wstrmatch (wchar_t *, wchar_t *, int); #endif int -strmatch (pattern, string, flags) - char *pattern; - char *string; - int flags; +strmatch (char *pattern, char *string, int flags) { if (string == 0 || pattern == 0) return FNM_NOMATCH; @@ -43,10 +40,7 @@ strmatch (pattern, string, flags) #if defined (HANDLE_MULTIBYTE) int -wcsmatch (wpattern, wstring, flags) - wchar_t *wpattern; - wchar_t *wstring; - int flags; +wcsmatch (wchar_t *wpattern, wchar_t *wstring, int flags) { if (wstring == 0 || wpattern == 0) return (FNM_NOMATCH); diff --git a/lib/glob/strmatch.h b/lib/glob/strmatch.h index d6a6b0fb3..8cca1bd75 100644 --- a/lib/glob/strmatch.h +++ b/lib/glob/strmatch.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2021 Free Software Foundation, Inc. +/* Copyright (C) 1991-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -56,10 +56,10 @@ /* Match STRING against the filename pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ -extern int strmatch PARAMS((char *, char *, int)); +extern int strmatch (char *, char *, int); #if HANDLE_MULTIBYTE -extern int wcsmatch PARAMS((wchar_t *, wchar_t *, int)); +extern int wcsmatch (wchar_t *, wchar_t *, int); #endif #endif /* _STRMATCH_H */ diff --git a/lib/glob/xmbsrtowcs.c b/lib/glob/xmbsrtowcs.c index 17250c303..d81aafb95 100644 --- a/lib/glob/xmbsrtowcs.c +++ b/lib/glob/xmbsrtowcs.c @@ -1,6 +1,6 @@ /* xmbsrtowcs.c -- replacement function for mbsrtowcs */ -/* Copyright (C) 2002-2020 Free Software Foundation, Inc. +/* Copyright (C) 2002-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -47,7 +47,7 @@ extern int errno; #endif #if ! HAVE_STRCHRNUL -extern char *strchrnul PARAMS((const char *, int)); +extern char *strchrnul (const char *, int); #endif /* On some locales (ex. ja_JP.sjis), mbsrtowc doesn't convert 0x5c to U<0x5c>. @@ -57,11 +57,7 @@ static mbstate_t local_state; static int local_state_use = 0; size_t -xmbsrtowcs (dest, src, len, pstate) - wchar_t *dest; - const char **src; - size_t len; - mbstate_t *pstate; +xmbsrtowcs (wchar_t *dest, const char **src, size_t len, mbstate_t *pstate) { mbstate_t *ps; size_t mblength, wclength, n; @@ -139,16 +135,15 @@ xmbsrtowcs (dest, src, len, pstate) } #if HAVE_MBSNRTOWCS -/* Convert a multibyte string to a wide character string. Memory for the - new wide character string is obtained with malloc. +/* Convert a multibyte string SRC to a wide character string and store the + result in *DESTP. Memory for the new wide character string is obtained + with malloc. Fast multiple-character version of xdupmbstowcs used when the indices are not required and mbsnrtowcs is available. */ static size_t -xdupmbstowcs2 (destp, src) - wchar_t **destp; /* Store the pointer to the wide character string */ - const char *src; /* Multibyte character string */ +xdupmbstowcs2 (wchar_t **destp, const char *src) { const char *p; /* Conversion start position of src */ wchar_t *wsbuf; /* Buffer for wide characters. */ @@ -258,11 +253,12 @@ xdupmbstowcs2 (destp, src) } #endif /* HAVE_MBSNRTOWCS */ -/* Convert a multibyte string to a wide character string. Memory for the - new wide character string is obtained with malloc. +/* Convert a multibyte string SRC to a wide character string and store the + result in *DESTP. Memory for the new wide character string is obtained + with malloc. The return value is the length of the wide character string. Returns a - pointer to the wide character string in DESTP. If INDICESP is not NULL, + pointer to the wide character string in *DESTP. If INDICESP is not NULL, INDICESP stores the pointer to the pointer array. Each pointer is to the first byte of each multibyte character. Memory for the pointer array is obtained with malloc, too. @@ -270,10 +266,7 @@ xdupmbstowcs2 (destp, src) of DESTP and INDICESP are NULL. */ size_t -xdupmbstowcs (destp, indicesp, src) - wchar_t **destp; /* Store the pointer to the wide character string */ - char ***indicesp; /* Store the pointer to the pointer array. */ - const char *src; /* Multibyte character string */ +xdupmbstowcs (wchar_t **destp, char ***indicesp, const char *src) { const char *p; /* Conversion start position of src */ wchar_t wc; /* Created wide character by conversion */ @@ -426,7 +419,6 @@ xwcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) size_t cur_max; /* XXX - locale_cur_max */ char buf[64], *destptr, *tmp_dest; unsigned char uc; - mbstate_t prev_state; cur_max = MB_CUR_MAX; if (cur_max > sizeof (buf)) /* Holy cow. */ diff --git a/lib/intl/Makefile.in b/lib/intl/Makefile.in index 00fdb6126..a2fbd0ff4 100644 --- a/lib/intl/Makefile.in +++ b/lib/intl/Makefile.in @@ -47,12 +47,14 @@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) -l = @INTL_LIBTOOL_SUFFIX_PREFIX@ +l = AR = @AR@ CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ +BISON = @INTLBISON@ +BISONFLAGS = --name-prefix=__gettext YACC = @INTLBISON@ -y -d YFLAGS = --name-prefix=__gettext @@ -61,113 +63,68 @@ ARFLAGS = @ARFLAGS@ LOCAL_DEFS = @LOCAL_DEFS@ DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ --DLIBDIR=\"$(prefix)/libdata\" -DIN_LIBINTL \ --DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \ --Dset_relocation_prefix=libintl_set_relocation_prefix \ --Drelocate=libintl_relocate \ --DDEPENDS_ON_LIBICONV=1 @DEFS@ ${LOCAL_DEFS} + -DLIBDIR=\"$(libdir)\" -DIN_LIBINTL -DBUILDING_LIBINTL @DEFS@ + +# XXX - use this? +RELOCATABLE_DEFS = -DENABLE_RELOCATABLE=1 -DIN_LIBRARY \ + -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \ + -Dset_relocation_prefix=libintl_set_relocation_prefix \ + -Drelocate=libintl_relocate \ + -DDEPENDS_ON_LIBICONV=1 + CPPFLAGS = @CPPFLAGS@ -CFLAGS = @CFLAGS@ +CFLAGS = @CFLAGS@ ${DEFS} @DEFS@ ${LOCAL_DEFS} LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) -HEADERS = \ - gmo.h \ - gettextP.h \ - hash-string.h \ - loadinfo.h \ - plural-exp.h \ - eval-plural.h \ - localcharset.h \ - relocatable.h \ - os2compat.h \ - libgnuintl.h.in -SOURCES = \ - bindtextdom.c \ - dcgettext.c \ - dgettext.c \ - gettext.c \ - finddomain.c \ - loadmsgcat.c \ - localealias.c \ - textdomain.c \ - l10nflist.c \ - explodename.c \ - dcigettext.c \ - dcngettext.c \ - dngettext.c \ - ngettext.c \ - plural.y \ - plural-exp.c \ - localcharset.c \ - relocatable.c \ - localename.c \ - log.c \ - osdep.c \ - os2compat.c \ - intl-compat.c -OBJECTS = \ - bindtextdom.$lo \ - dcgettext.$lo \ - dgettext.$lo \ - gettext.$lo \ - finddomain.$lo \ - loadmsgcat.$lo \ - localealias.$lo \ - textdomain.$lo \ - l10nflist.$lo \ - explodename.$lo \ - dcigettext.$lo \ - dcngettext.$lo \ - dngettext.$lo \ - ngettext.$lo \ - plural.$lo \ - plural-exp.$lo \ - localcharset.$lo \ - relocatable.$lo \ - localename.$lo \ - log.$lo \ - osdep.$lo \ - intl-compat.$lo -DISTFILES.common = Makefile.in \ -config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES) -DISTFILES.generated = plural.c -DISTFILES.normal = VERSION -DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \ -Makefile.vms libgnuintl.h.msvc-shared README.woe32 Makefile.msvc -DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \ -COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h - -all: all-@USE_INCLUDED_LIBINTL@ -all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed -all-no: all-no-@BUILD_INCLUDED_LIBINTL@ -all-no-yes: libgnuintl.$la -all-no-no: +HEADERS = gmo.h gettextP.h hash-string.h loadinfo.h plural-exp.h \ + eval-plural.h localcharset.h lock.h \ + relocatable.h arg-nonnull.h attribute.h \ + filename.h flexmember.h localename-table.in.h setlocale_null.h \ + thread-optim.h tsearch.h verify.h xsize.h \ + printf-args.h printf-parse.h wprintf-parse.h \ + export.h os2compat.h plural-exp.h vasnprintf.h vasnwprintf.h \ + libgnuintl.in.h + +SOURCES = bindtextdom.c dcgettext.c dgettext.c gettext.c \ + finddomain.c hash-string.c loadmsgcat.c localealias.c \ + textdomain.c l10nflist.c explodename.c dcigettext.c \ + dcngettext.c dngettext.c ngettext.c plural.y plural-exp.c \ + localcharset.c threadlib.c lock.c relocatable.c langprefs.c \ + localename.c localename-table.c log.c printf.c setlocale.c \ + setlocale-lock.c setlocale_null.c version.c xsize.c osdep.c \ + intl-compat.c + +EXTRASOURCES = tsearch.c printf-args.c printf-parse.c vasnprintf.c \ + intl-exports.c os2compat.c + +OBJECTS = bindtextdom.o dcgettext.o dgettext.o gettext.o \ + finddomain.o hash-string.o loadmsgcat.o localealias.o \ + textdomain.o l10nflist.o explodename.o dcigettext.o \ + dcngettext.o dngettext.o ngettext.o plural.o plural-exp.o \ + localcharset.o threadlib.o lock.o relocatable.o langprefs.o \ + localename.o localename-table.o log.o printf.o setlocale.o \ + setlocale-lock.o setlocale_null.o version.o xsize.o osdep.o \ + intl-compat.o + +CREATED_HEADERS = libintl.h libgnuintl.h localename-table.h +CREATED_SOURCES = plural.c plural.h + +OTHERS = Makefile.in locale.alias ref-add.sin ref-del.sin +CREATED_OTHERS = Makefile ref-add.sed ref-del.sed + +TARGETS = libintl.a libgnuintl.a + +all: libintl.a libintl.h +rest: charset.alias ref-add.sed ref-del.sed libintl.a libgnuintl.a: $(OBJECTS) rm -f $@ $(AR) $(ARFLAGS) $@ $(OBJECTS) $(RANLIB) $@ -libintl.la libgnuintl.la: $(OBJECTS) - $(LIBTOOL) --mode=link \ - $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ - $(OBJECTS) @LTLIBICONV@ $(LIBS) \ - -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ - -rpath $(libdir) \ - -no-undefined - -# Libtool's library version information for libintl. -# Before making a gettext release, the gettext maintainer must change this -# according to the libtool documentation, section "Library interface versions". -# Maintainers of other packages that include the intl directory must *not* -# change these values. -LTV_CURRENT=5 -LTV_REVISION=0 -LTV_AGE=3 - .SUFFIXES: .SUFFIXES: .c .y .o .lo .sin .sed @@ -178,51 +135,6 @@ LTV_AGE=3 $(YACC) $(YFLAGS) --output $@ $< rm -f $*.h -bindtextdom.lo: $(srcdir)/bindtextdom.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c -dcgettext.lo: $(srcdir)/dcgettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c -dgettext.lo: $(srcdir)/dgettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c -gettext.lo: $(srcdir)/gettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c -finddomain.lo: $(srcdir)/finddomain.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c -loadmsgcat.lo: $(srcdir)/loadmsgcat.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c -localealias.lo: $(srcdir)/localealias.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c -textdomain.lo: $(srcdir)/textdomain.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c -l10nflist.lo: $(srcdir)/l10nflist.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c -explodename.lo: $(srcdir)/explodename.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c -dcigettext.lo: $(srcdir)/dcigettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c -dcngettext.lo: $(srcdir)/dcngettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c -dngettext.lo: $(srcdir)/dngettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c -ngettext.lo: $(srcdir)/ngettext.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c -plural.lo: $(srcdir)/plural.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c -plural-exp.lo: $(srcdir)/plural-exp.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c -localcharset.lo: $(srcdir)/localcharset.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c -relocatable.lo: $(srcdir)/relocatable.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c -localename.lo: $(srcdir)/localename.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c -log.lo: $(srcdir)/log.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c -osdep.lo: $(srcdir)/osdep.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c -intl-compat.lo: $(srcdir)/intl-compat.c - $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c - ref-add.sed: $(srcdir)/ref-add.sin sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed mv t-ref-add.sed ref-add.sed @@ -232,240 +144,93 @@ ref-del.sed: $(srcdir)/ref-del.sin INCLUDES = -I. -I$(srcdir) -I${top_builddir} -I${top_srcdir} -libgnuintl.h: $(srcdir)/libgnuintl.h.in - cp $(srcdir)/libgnuintl.h.in libgnuintl.h - -libintl.h: libgnuintl.h - cmp libgnuintl.h libintl.h || cp libgnuintl.h libintl.h - -charset.alias: $(srcdir)/config.charset - $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ - mv t-$@ $@ +libgnuintl.h: $(srcdir)/libgnuintl.in.h $(srcdir)/export.h + sed -e '/IN_LIBGLOCALE/d' \ + -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \ + -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \ + -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \ + -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \ + -e 's,@''HAVE_NEWLOCALE''@,@HAVE_NEWLOCALE@,g' \ + -e 's,@''ENHANCE_LOCALE_FUNCS''@,@ENHANCE_LOCALE_FUNCS@,g' \ + < $(srcdir)/libgnuintl.in.h \ + | if test '@WOE32DLL@' = yes; then \ + sed -e 's/extern \([^()]*\);/extern __declspec (dllimport) \1;/'; \ + else \ + cat; \ + fi \ + | sed -e 's/extern \([^"]\)/extern LIBINTL_DLL_EXPORTED \1/' \ + -e "/#define _LIBINTL_H/r $(srcdir)/export.h" \ + | sed -e 's,@''HAVE_VISIBILITY''@,@HAVE_VISIBILITY@,g' \ + > libgnuintl.h + +libintl.h: $(srcdir)/libgnuintl.in.h + sed -e '/IN_LIBGLOCALE/d' \ + -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \ + -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \ + -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \ + -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \ + -e 's,@''HAVE_NEWLOCALE''@,@HAVE_NEWLOCALE@,g' \ + -e 's,@''ENHANCE_LOCALE_FUNCS''@,@ENHANCE_LOCALE_FUNCS@,g' \ + < $(srcdir)/libgnuintl.in.h > libintl.h + +localename-table.h: $(srcdir)/localename-table.in.h $(srcdir)/export.h + sed -e 's/extern \([^"]\)/extern LIBINTL_DLL_EXPORTED \1/' \ + -e 's/extern,/extern LIBINTL_DLL_EXPORTED,/' \ + -e "/#if HAVE_WORKING_USELOCALE/r $(srcdir)/export.h" \ + < $(srcdir)/localename-table.in.h \ + | sed -e 's,@''HAVE_VISIBILITY''@,@HAVE_VISIBILITY@,g' \ + > localename-table.h + +$(srcdir)/plural.c: $(srcdir)/plural.y + $(BISON) -d $(BISONFLAGS) $(srcdir)/plural.y \ + && test ':' = '$(BISON)' || { \ + sed -e 's|".*/plural.y"|"plural.y"|' \ + -e 's|"plural\.tab\.c"|"plural.c"|' \ + -e 's|"plural\.tab\.h"|"plural.h"|' \ + < plural.tab.c > plural.c-tmp \ + && sed -e 's|".*/plural.y"|"plural.y"|' \ + -e 's|"plural\.tab\.h"|"plural.h"|' \ + < plural.tab.h > plural.h-tmp \ + && rm -f plural.tab.c plural.tab.h \ + && mv plural.c-tmp $(srcdir)/plural.c \ + && mv plural.h-tmp $(srcdir)/plural.h; \ + } check: all -# We must not install the libintl.h/libintl.a files if we are on a -# system which has the GNU gettext() function in its C library or in a -# separate library. -# If you want to use the one which comes with this version of the -# package, you have to use `configure --with-included-gettext'. -install: install-exec install-data -install-exec: all - if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ - && test '@USE_INCLUDED_LIBINTL@' = yes; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ - $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ - $(LIBTOOL) --mode=install \ - $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ - if test "@RELOCATABLE@" = yes; then \ - dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \ - if test -n "$dependencies"; then \ - rm -f $(DESTDIR)$(libdir)/libintl.la; \ - fi; \ - fi; \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools" \ - && test '@USE_INCLUDED_LIBINTL@' = no; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir); \ - $(LIBTOOL) --mode=install \ - $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \ - rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ - $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \ - $(LIBTOOL) --mode=uninstall \ - rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \ - else \ - : ; \ - fi - if test '@USE_INCLUDED_LIBINTL@' = yes; then \ - $(mkinstalldirs) $(DESTDIR)$(localedir); \ - test -f $(DESTDIR)$(localedir)/locale.alias \ - && orig=$(DESTDIR)$(localedir)/locale.alias \ - || orig=$(srcdir)/locale.alias; \ - temp=$(DESTDIR)$(localedir)/t-locale.alias; \ - dest=$(DESTDIR)$(localedir)/locale.alias; \ - sed -f ref-add.sed $$orig > $$temp; \ - $(INSTALL_DATA) $$temp $$dest; \ - rm -f $$temp; \ - else \ - : ; \ - fi -install-data: all - if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ - $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ - $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ - dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \ - for file in $$dists; do \ - $(INSTALL_DATA) $(srcdir)/$$file \ - $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ - dists="$(DISTFILES.generated)"; \ - for file in $$dists; do \ - if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ - $(INSTALL_DATA) $$dir/$$file \ - $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - dists="$(DISTFILES.obsolete)"; \ - for file in $$dists; do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi - -install-strip: install - +# We don't install anything +install install-exec install-data install-strip: installdirs: - if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ - && test '@USE_INCLUDED_LIBINTL@' = yes; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools" \ - && test '@USE_INCLUDED_LIBINTL@' = no; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir); \ - else \ - : ; \ - fi - if test '@USE_INCLUDED_LIBINTL@' = yes; then \ - test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \ - $(mkinstalldirs) $(DESTDIR)$(localedir); \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ - else \ - : ; \ - fi - -# Define this as empty until I found a useful application. installcheck: - uninstall: - if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ - && test '@USE_INCLUDED_LIBINTL@' = yes; then \ - rm -f $(DESTDIR)$(includedir)/libintl.h; \ - $(LIBTOOL) --mode=uninstall \ - rm -f $(DESTDIR)$(libdir)/libintl.$la; \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools" \ - && test '@USE_INCLUDED_LIBINTL@' = no; then \ - rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ - else \ - : ; \ - fi - if test '@USE_INCLUDED_LIBINTL@' = yes; then \ - if test -f $(DESTDIR)$(prefix)/libdata/charset.alias; then \ - temp=$(DESTDIR)$(prefix)/libdata/t-charset.alias; \ - dest=$(DESTDIR)$(prefix)/libdata/charset.alias; \ - sed -f ref-del.sed $$dest > $$temp; \ - if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ - rm -f $$dest; \ - else \ - $(INSTALL_DATA) $$temp $$dest; \ - fi; \ - rm -f $$temp; \ - fi; \ - if test -f $(DESTDIR)$(localedir)/locale.alias; then \ - temp=$(DESTDIR)$(localedir)/t-locale.alias; \ - dest=$(DESTDIR)$(localedir)/locale.alias; \ - sed -f ref-del.sed $$dest > $$temp; \ - if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ - rm -f $$dest; \ - else \ - $(INSTALL_DATA) $$temp $$dest; \ - fi; \ - rm -f $$temp; \ - fi; \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext-tools"; then \ - for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi info dvi ps pdf html: -$(OBJECTS): ${top_builddir}/config.h libgnuintl.h -bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h -dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h -explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h -dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h -dcigettext.$lo: $(srcdir)/eval-plural.h -localcharset.$lo: $(srcdir)/localcharset.h -localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h - -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) - here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) - -ctags: CTAGS +# update these someday -CTAGS: $(HEADERS) $(SOURCES) - here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES) - -id: ID - -ID: $(HEADERS) $(SOURCES) - here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) +$(OBJECTS): ${top_builddir}/config.h libgnuintl.h libintl.h +bindtextdom.o dcgettext.o dcigettext.o dcngettext.o dgettext.o dngettext.o finddomain.o gettext.o intl-compat.o loadmsgcat.o localealias.o ngettext.o textdomain.o: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h +dcigettext.o loadmsgcat.o: $(srcdir)/hash-string.h +explodename.o l10nflist.o: $(srcdir)/loadinfo.h +dcigettext.o loadmsgcat.o plural.o plural-exp.o: $(srcdir)/plural-exp.h +dcigettext.o: $(srcdir)/eval-plural.h +localcharset.o: $(srcdir)/localcharset.h +localealias.o localcharset.o relocatable.o: $(srcdir)/relocatable.h +localcharset.o: $(srcdir)/localcharset.c mostlyclean: - rm -f *.a *.la *.o *.obj *.lo core core.* - rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed - rm -f -r .libs _libs + rm -f ${TARGETS} + rm -f ${OBJECTS} ${CREATED_HEADERS} clean: mostlyclean distclean: clean - rm -f Makefile ID TAGS - if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \ - rm -f ChangeLog.inst $(DISTFILES.normal); \ - else \ - : ; \ - fi + rm -f ${CREATED_OTHERS} maintainer-clean: distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - - -# GNU gettext needs not contain the file `VERSION' but contains some -# other files which should not be distributed in other packages. -distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) -dist distdir: Makefile - if test "$(PACKAGE)" = "gettext-tools"; then \ - : ; \ - else \ - if test "$(PACKAGE)" = "gettext-runtime"; then \ - additional="$(DISTFILES.gettext)"; \ - else \ - additional="$(DISTFILES.normal)"; \ - fi; \ - $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ - for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ - if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ - cp -p $$dir/$$file $(distdir); \ - done; \ - fi - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && $(SHELL) ./config.status -# This would be more efficient, but doesn't work any more with autoconf-2.57, -# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used. -# cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + rm -f ${CREATED_SOURCES} + # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/lib/intl/VERSION b/lib/intl/VERSION index f49e0dd82..c4217ec33 100644 --- a/lib/intl/VERSION +++ b/lib/intl/VERSION @@ -1,3 +1,3 @@ -GNU gettext library from gettext-0.12.1 +GNU gettext library from gettext-0.21.1 This is here only in the case the system doesn't provide it diff --git a/lib/intl/bindtextdom.c b/lib/intl/bindtextdom.c index ef5479e32..7eaf47072 100644 --- a/lib/intl/bindtextdom.c +++ b/lib/intl/bindtextdom.c @@ -1,22 +1,18 @@ -/* bindtextdom.c - Implementation of the bindtextdomain(3) function */ +/* Implementation of the bindtextdomain(3) function + Copyright (C) 1995-2020 Free Software Foundation, Inc. -/* Copyright (C) 1995-1998, 2000, 2001, 2002, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -26,29 +22,21 @@ #include <stdlib.h> #include <string.h> +#include "gettextP.h" #ifdef _LIBC # include <libintl.h> #else # include "libgnuintl.h" #endif -#include "gettextP.h" +/* Handle multi-threaded applications. */ #ifdef _LIBC -/* We have to handle multi-threaded applications. */ # include <bits/libc-lock.h> +# define gl_rwlock_define __libc_rwlock_define +# define gl_rwlock_wrlock __libc_rwlock_wrlock +# define gl_rwlock_unlock __libc_rwlock_unlock #else -/* Provide dummy implementation if this is outside glibc. */ -# define __libc_rwlock_define(CLASS, NAME) -# define __libc_rwlock_wrlock(NAME) -# define __libc_rwlock_unlock(NAME) -#endif - -/* The internal variables in the standalone libintl.a must have different - names than the internal variables in GNU libc, otherwise programs - using libintl.a cannot be linked statically. */ -#if !defined _LIBC -# define _nl_default_dirname libintl_nl_default_dirname -# define _nl_domain_bindings libintl_nl_domain_bindings +# include "lock.h" #endif /* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */ @@ -58,19 +46,8 @@ /* @@ end of prolog @@ */ -/* Contains the default location of the message catalogs. */ -extern const char _nl_default_dirname[]; -#ifdef _LIBC -extern const char _nl_default_dirname_internal[] attribute_hidden; -#else -# define INTUSE(name) name -#endif - -/* List with bindings of specific domains. */ -extern struct binding *_nl_domain_bindings; - /* Lock variable to protect the global data in the gettext implementation. */ -__libc_rwlock_define (extern, _nl_state_lock attribute_hidden) +gl_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Names for the libintl functions are a problem. They must not clash @@ -88,22 +65,18 @@ __libc_rwlock_define (extern, _nl_state_lock attribute_hidden) # define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset #endif -/* Prototypes for local functions. */ -static void set_binding_values PARAMS ((const char *domainname, - const char **dirnamep, - const char **codesetp)); - -/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP - to be used for the DOMAINNAME message catalog. - If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not - modified, only the current value is returned. - If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither - modified nor returned. */ +/* Specifies the directory name *DIRNAMEP, the directory name *WDIRNAMEP + (only on native Windows), and the output codeset *CODESETP to be used + for the DOMAINNAME message catalog. + If *DIRNAMEP or *WDIRNAMEP or *CODESETP is NULL, the corresponding attribute + is not modified, only the current value is returned. + If DIRNAMEP or WDIRNAMEP or CODESETP is NULL, the corresponding attribute is + neither modified nor returned, except that setting WDIRNAME erases DIRNAME + and vice versa. */ static void -set_binding_values (domainname, dirnamep, codesetp) - const char *domainname; - const char **dirnamep; - const char **codesetp; +set_binding_values (const char *domainname, + const char **dirnamep, const wchar_t **wdirnamep, + const char **codesetp) { struct binding *binding; int modified; @@ -113,12 +86,16 @@ set_binding_values (domainname, dirnamep, codesetp) { if (dirnamep) *dirnamep = NULL; +#if defined _WIN32 && !defined __CYGWIN__ + if (wdirnamep) + *wdirnamep = NULL; +#endif if (codesetp) *codesetp = NULL; return; } - __libc_rwlock_wrlock (_nl_state_lock); + gl_rwlock_wrlock (_nl_state_lock); modified = 0; @@ -151,34 +128,65 @@ set_binding_values (domainname, dirnamep, codesetp) one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->dirname; - if (strcmp (dirname, result) != 0) + if (result == NULL || strcmp (dirname, result) != 0) { - if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0) - result = (char *) INTUSE(_nl_default_dirname); + if (strcmp (dirname, _nl_default_dirname) == 0) + result = (char *) _nl_default_dirname; else + result = strdup (dirname); + + if (__builtin_expect (result != NULL, 1)) { -#if defined _LIBC || defined HAVE_STRDUP - result = strdup (dirname); -#else - size_t len = strlen (dirname) + 1; - result = (char *) malloc (len); - if (__builtin_expect (result != NULL, 1)) - memcpy (result, dirname, len); + if (binding->dirname != _nl_default_dirname) + free (binding->dirname); + binding->dirname = result; + +#if defined _WIN32 && !defined __CYGWIN__ + free (binding->wdirname); + binding->wdirname = NULL; #endif + + modified = 1; } + } + *dirnamep = result; + } + } + +#if defined _WIN32 && !defined __CYGWIN__ + if (wdirnamep) + { + const wchar_t *wdirname = *wdirnamep; + + if (wdirname == NULL) + /* The current binding has be to returned. */ + *wdirnamep = binding->wdirname; + else + { + /* The domain is already bound. If the new value and the old + one are equal we simply do nothing. Otherwise replace the + old binding. */ + wchar_t *result = binding->wdirname; + if (result == NULL || wcscmp (wdirname, result) != 0) + { + result = _wcsdup (wdirname); if (__builtin_expect (result != NULL, 1)) { - if (binding->dirname != INTUSE(_nl_default_dirname)) + if (binding->dirname != _nl_default_dirname) free (binding->dirname); + binding->dirname = NULL; + + free (binding->wdirname); + binding->wdirname = result; - binding->dirname = result; modified = 1; } } - *dirnamep = result; + *wdirnamep = result; } } +#endif if (codesetp) { @@ -195,22 +203,12 @@ set_binding_values (domainname, dirnamep, codesetp) char *result = binding->codeset; if (result == NULL || strcmp (codeset, result) != 0) { -#if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); -#else - size_t len = strlen (codeset) + 1; - result = (char *) malloc (len); - if (__builtin_expect (result != NULL, 1)) - memcpy (result, codeset, len); -#endif - if (__builtin_expect (result != NULL, 1)) { - if (binding->codeset != NULL) - free (binding->codeset); + free (binding->codeset); binding->codeset = result; - binding->codeset_cntr++; modified = 1; } } @@ -219,11 +217,18 @@ set_binding_values (domainname, dirnamep, codesetp) } } else if ((dirnamep == NULL || *dirnamep == NULL) +#if defined _WIN32 && !defined __CYGWIN__ + && (wdirnamep == NULL || *wdirnamep == NULL) +#endif && (codesetp == NULL || *codesetp == NULL)) { /* Simply return the default values. */ if (dirnamep) - *dirnamep = INTUSE(_nl_default_dirname); + *dirnamep = _nl_default_dirname; +#if defined _WIN32 && !defined __CYGWIN__ + if (wdirnamep) + *wdirnamep = NULL; +#endif if (codesetp) *codesetp = NULL; } @@ -244,26 +249,24 @@ set_binding_values (domainname, dirnamep, codesetp) const char *dirname = *dirnamep; if (dirname == NULL) - /* The default value. */ - dirname = INTUSE(_nl_default_dirname); + { +#if defined _WIN32 && !defined __CYGWIN__ + if (wdirnamep && *wdirnamep != NULL) + dirname = NULL; + else +#endif + /* The default value. */ + dirname = _nl_default_dirname; + } else { - if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0) - dirname = INTUSE(_nl_default_dirname); + if (strcmp (dirname, _nl_default_dirname) == 0) + dirname = _nl_default_dirname; else { - char *result; -#if defined _LIBC || defined HAVE_STRDUP - result = strdup (dirname); + char *result = strdup (dirname); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; -#else - size_t len = strlen (dirname) + 1; - result = (char *) malloc (len); - if (__builtin_expect (result == NULL, 0)) - goto failed_dirname; - memcpy (result, dirname, len); -#endif dirname = result; } } @@ -271,10 +274,34 @@ set_binding_values (domainname, dirnamep, codesetp) new_binding->dirname = (char *) dirname; } else - /* The default value. */ - new_binding->dirname = (char *) INTUSE(_nl_default_dirname); + { +#if defined _WIN32 && !defined __CYGWIN__ + if (wdirnamep && *wdirnamep != NULL) + new_binding->dirname = NULL; + else +#endif + /* The default value. */ + new_binding->dirname = (char *) _nl_default_dirname; + } - new_binding->codeset_cntr = 0; +#if defined _WIN32 && !defined __CYGWIN__ + if (wdirnamep) + { + const wchar_t *wdirname = *wdirnamep; + + if (wdirname != NULL) + { + wchar_t *result = _wcsdup (wdirname); + if (__builtin_expect (result == NULL, 0)) + goto failed_wdirname; + wdirname = result; + } + *wdirnamep = wdirname; + new_binding->wdirname = (wchar_t *) wdirname; + } + else + new_binding->wdirname = NULL; +#endif if (codesetp) { @@ -282,21 +309,10 @@ set_binding_values (domainname, dirnamep, codesetp) if (codeset != NULL) { - char *result; - -#if defined _LIBC || defined HAVE_STRDUP - result = strdup (codeset); + char *result = strdup (codeset); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; -#else - size_t len = strlen (codeset) + 1; - result = (char *) malloc (len); - if (__builtin_expect (result == NULL, 0)) - goto failed_codeset; - memcpy (result, codeset, len); -#endif codeset = result; - new_binding->codeset_cntr++; } *codesetp = codeset; new_binding->codeset = (char *) codeset; @@ -328,13 +344,21 @@ set_binding_values (domainname, dirnamep, codesetp) if (0) { failed_codeset: - if (new_binding->dirname != INTUSE(_nl_default_dirname)) +#if defined _WIN32 && !defined __CYGWIN__ + free (new_binding->wdirname); + failed_wdirname: +#endif + if (new_binding->dirname != _nl_default_dirname) free (new_binding->dirname); failed_dirname: free (new_binding); failed: if (dirnamep) *dirnamep = NULL; +#if defined _WIN32 && !defined __CYGWIN__ + if (wdirnamep) + *wdirnamep = NULL; +#endif if (codesetp) *codesetp = NULL; } @@ -344,28 +368,67 @@ set_binding_values (domainname, dirnamep, codesetp) if (modified) ++_nl_msg_cat_cntr; - __libc_rwlock_unlock (_nl_state_lock); + gl_rwlock_unlock (_nl_state_lock); } /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ char * -BINDTEXTDOMAIN (domainname, dirname) - const char *domainname; - const char *dirname; +BINDTEXTDOMAIN (const char *domainname, const char *dirname) { - set_binding_values (domainname, &dirname, NULL); +#ifdef __EMX__ + const char *saved_dirname = dirname; + char dirname_with_drive[_MAX_PATH]; + +# ifdef __KLIBC__ + if (dirname && strncmp (dirname, "/@unixroot", 10) == 0 + && (dirname[10] == '\0' || dirname[10] == '/' || dirname[10] == '\\')) + /* kLIBC itself processes /@unixroot prefix */; + else +# endif + /* Resolve UNIXROOT into dirname if it is not resolved by os2compat.[ch]. */ + if (dirname && (dirname[0] == '/' || dirname[0] == '\\' )) + { + const char *unixroot = getenv ("UNIXROOT"); + size_t len = strlen (dirname) + 1; + + if (unixroot + && unixroot[0] != '\0' + && unixroot[1] == ':' + && unixroot[2] == '\0' + && 2 + len <= _MAX_PATH) + { + memcpy (dirname_with_drive, unixroot, 2); + memcpy (dirname_with_drive + 2, dirname, len); + + dirname = dirname_with_drive; + } + } +#endif + set_binding_values (domainname, &dirname, NULL, NULL); +#ifdef __EMX__ + dirname = saved_dirname; +#endif return (char *) dirname; } +#if defined _WIN32 && !defined __CYGWIN__ +/* Specify that the DOMAINNAME message catalog will be found + in WDIRNAME rather than in the system locale data base. */ +wchar_t * +libintl_wbindtextdomain (const char *domainname, const wchar_t *wdirname) +{ + set_binding_values (domainname, NULL, &wdirname, NULL); + return (wchar_t *) wdirname; +} +#endif + /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ char * -BIND_TEXTDOMAIN_CODESET (domainname, codeset) - const char *domainname; - const char *codeset; +BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset) { - set_binding_values (domainname, NULL, &codeset); + set_binding_values (domainname, NULL, NULL, &codeset); return (char *) codeset; } diff --git a/lib/intl/dcgettext.c b/lib/intl/dcgettext.c index c156ca24e..e4e1688a4 100644 --- a/lib/intl/dcgettext.c +++ b/lib/intl/dcgettext.c @@ -1,22 +1,18 @@ -/* dcgettext.c - Implementation of the dcgettext(3) function. */ +/* Implementation of the dcgettext(3) function. + Copyright (C) 1995-2016 Free Software Foundation, Inc. -/* Copyright (C) 1995-1999, 2000, 2001, 2002, 2006-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -46,16 +42,13 @@ /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * -DCGETTEXT (domainname, msgid, category) - const char *domainname; - const char *msgid; - int category; +DCGETTEXT (const char *domainname, const char *msgid, int category) { return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ -INTDEF(__dcgettext) weak_alias (__dcgettext, dcgettext); +libc_hidden_def (__dcgettext) #endif diff --git a/lib/intl/dcigettext.c b/lib/intl/dcigettext.c index c0f347e39..b83149140 100644 --- a/lib/intl/dcigettext.c +++ b/lib/intl/dcigettext.c @@ -1,22 +1,18 @@ -/* dcigettext.c - Implementation of the internal dcigettext function. */ +/* Implementation of the internal dcigettext function. + Copyright (C) 1995-2020 Free Software Foundation, Inc. -/* Copyright (C) 1995-1999, 2000-2003, 2006-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <string.h> to provide a prototype for mempcpy(). This must come before <config.h> because <config.h> may include @@ -89,26 +85,31 @@ extern int errno; # include <sys/param.h> #endif +#if !defined _LIBC +# include "localcharset.h" +#endif + #include "gettextP.h" #include "plural-exp.h" #ifdef _LIBC # include <libintl.h> #else +# ifdef IN_LIBGLOCALE +# include <libintl.h> +# endif # include "libgnuintl.h" #endif #include "hash-string.h" -/* Thread safetyness. */ +/* Handle multi-threaded applications. */ #ifdef _LIBC # include <bits/libc-lock.h> +# define gl_rwlock_define_initialized __libc_rwlock_define_initialized +# define gl_rwlock_rdlock __libc_rwlock_rdlock +# define gl_rwlock_wrlock __libc_rwlock_wrlock +# define gl_rwlock_unlock __libc_rwlock_unlock #else -/* Provide dummy implementation if this is outside glibc. */ -# define __libc_lock_define_initialized(CLASS, NAME) -# define __libc_lock_lock(NAME) -# define __libc_lock_unlock(NAME) -# define __libc_rwlock_define_initialized(CLASS, NAME) -# define __libc_rwlock_rdlock(NAME) -# define __libc_rwlock_unlock(NAME) +# include "lock.h" #endif /* Alignment of types. */ @@ -119,16 +120,6 @@ extern int errno; ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2) #endif -/* The internal variables in the standalone libintl.a must have different - names than the internal variables in GNU libc, otherwise programs - using libintl.a cannot be linked statically. */ -#if !defined _LIBC -# define _nl_default_default_domain libintl_nl_default_default_domain -# define _nl_current_default_domain libintl_nl_current_default_domain -# define _nl_default_dirname libintl_nl_default_dirname -# define _nl_domain_bindings libintl_nl_domain_bindings -#endif - /* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) @@ -136,10 +127,6 @@ extern int errno; /* @@ end of prolog @@ */ -#if defined (SHELL) && !defined (HAVE_GETCWD) -# define HAVE_GETCWD -#endif - #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object @@ -154,26 +141,41 @@ extern int errno; char *getwd (); # define getcwd(buf, max) getwd (buf) # else -char *getcwd (); +# if VMS +# define getcwd(buf, max) (getcwd) (buf, max, 0) +# else +char *getcwd (char *, size_t); +# endif # endif # ifndef HAVE_STPCPY -static char *stpcpy PARAMS ((char *dest, const char *src)); +static char *stpcpy (char *dest, const char *src); # endif # ifndef HAVE_MEMPCPY -static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); +static void *mempcpy (void *dest, const void *src, size_t n); # endif #endif +/* Use a replacement if the system does not provide the `tsearch' function + family. */ +#if defined HAVE_TSEARCH || defined _LIBC +# include <search.h> +#else +# define tsearch libintl_tsearch +# define tfind libintl_tfind +# define tdelete libintl_tdelete +# define twalk libintl_twalk +# include "tsearch.h" +#endif + +#ifdef _LIBC +# define tsearch __tsearch +#endif + /* Amount to increase buffer size by in each try. */ #define PATH_INCR 32 /* The following is from pathmax.h. */ -/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define - PATH_MAX but might cause redefinition warnings when sys/param.h is - later included (as on MORE/BSD 4.3). */ -#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__) -# include <limits.h> -#endif +#include <limits.h> #ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 255 @@ -196,26 +198,17 @@ static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); # define PATH_MAX _POSIX_PATH_MAX #endif -/* Pathname support. - ISSLASH(C) tests whether C is a directory separator character. - IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, - it may be concatenated to a directory pathname. - IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. - */ -#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ - /* Win32, OS/2, DOS */ -# define ISSLASH(C) ((C) == '/' || (C) == '\\') -# define HAS_DEVICE(P) \ - ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ - && (P)[1] == ':') -# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) -# define IS_PATH_WITH_DIR(P) \ - (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) +#ifdef _LIBC +# define IS_ABSOLUTE_FILE_NAME(P) ((P)[0] == '/') +# define IS_RELATIVE_FILE_NAME(P) (! IS_ABSOLUTE_FILE_NAME (P)) +# define IS_FILE_NAME_WITH_DIR(P) (strchr ((P), '/') != NULL) #else - /* Unix */ -# define ISSLASH(C) ((C) == '/') -# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) -# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) +# include "filename.h" +#endif + +/* Whether to support different locales in different threads. */ +#if defined _LIBC || HAVE_USELOCALE || defined IN_LIBGLOCALE +# define HAVE_PER_THREAD_LOCALE #endif /* This is the type used for the search tree where known translations @@ -223,11 +216,21 @@ static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); struct known_translation_t { /* Domain in which to search. */ - char *domainname; + const char *domainname; /* The category. */ int category; +#ifdef HAVE_PER_THREAD_LOCALE + /* Name of the relevant locale category, or "" for the global locale. */ + const char *localename; +#endif + +#ifdef IN_LIBGLOCALE + /* The character encoding. */ + const char *encoding; +#endif + /* State of the catalog counter at the point the string was found. */ int counter; @@ -239,26 +242,22 @@ struct known_translation_t size_t translation_length; /* Pointer to the string in question. */ - char msgid[ZERO]; + union + { + char appended[ZERO]; /* used if domain != NULL */ + const char *ptr; /* used if domain == NULL */ + } + msgid; }; -/* Root of the search tree with known translations. We can use this - only if the system provides the `tsearch' function family. */ -#if defined HAVE_TSEARCH || defined _LIBC -# include <search.h> +gl_rwlock_define_initialized (static, tree_lock) +/* Root of the search tree with known translations. */ static void *root; -# ifdef _LIBC -# define tsearch __tsearch -# endif - /* Function to compare two entries in the table of known translations. */ -static int transcmp PARAMS ((const void *p1, const void *p2)); static int -transcmp (p1, p2) - const void *p1; - const void *p2; +transcmp (const void *p1, const void *p2) { const struct known_translation_t *s1; const struct known_translation_t *s2; @@ -267,66 +266,94 @@ transcmp (p1, p2) s1 = (const struct known_translation_t *) p1; s2 = (const struct known_translation_t *) p2; - result = strcmp (s1->msgid, s2->msgid); + result = strcmp (s1->domain != NULL ? s1->msgid.appended : s1->msgid.ptr, + s2->domain != NULL ? s2->msgid.appended : s2->msgid.ptr); if (result == 0) { result = strcmp (s1->domainname, s2->domainname); if (result == 0) - /* We compare the category last (though this is the cheapest - operation) since it is hopefully always the same (namely - LC_MESSAGES). */ - result = s1->category - s2->category; + { +#ifdef HAVE_PER_THREAD_LOCALE + result = strcmp (s1->localename, s2->localename); + if (result == 0) +#endif + { +#ifdef IN_LIBGLOCALE + result = strcmp (s1->encoding, s2->encoding); + if (result == 0) +#endif + /* We compare the category last (though this is the cheapest + operation) since it is hopefully always the same (namely + LC_MESSAGES). */ + result = s1->category - s2->category; + } + } } return result; } -#endif - -#ifndef INTVARDEF -# define INTVARDEF(name) -#endif -#ifndef INTUSE -# define INTUSE(name) name -#endif /* Name of the default domain used for gettext(3) prior any call to textdomain(3). The default value for this is "messages". */ const char _nl_default_default_domain[] attribute_hidden = "messages"; +#ifndef IN_LIBGLOCALE /* Value used as the default domain for gettext(3). */ const char *_nl_current_default_domain attribute_hidden = _nl_default_default_domain; +#endif /* Contains the default location of the message catalogs. */ -#if defined __EMX__ +#if defined __EMX__ && !defined __KLIBC__ extern const char _nl_default_dirname[]; #else +# ifdef _LIBC +extern const char _nl_default_dirname[]; +libc_hidden_proto (_nl_default_dirname) +# endif const char _nl_default_dirname[] = LOCALEDIR; -INTVARDEF (_nl_default_dirname) +# ifdef _LIBC +libc_hidden_data_def (_nl_default_dirname) +# endif #endif +#ifndef IN_LIBGLOCALE /* List with bindings of specific domains created by bindtextdomain() calls. */ struct binding *_nl_domain_bindings; +#endif /* Prototypes for local functions. */ -static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain, - unsigned long int n, - const char *translation, - size_t translation_len)) +static char *plural_lookup (struct loaded_l10nfile *domain, + unsigned long int n, + const char *translation, size_t translation_len) internal_function; -static const char *guess_category_value PARAMS ((int category, - const char *categoryname)) + +#ifdef IN_LIBGLOCALE +static const char *guess_category_value (int category, + const char *categoryname, + const char *localename) + internal_function; +#else +static const char *guess_category_value (int category, + const char *categoryname) internal_function; +#endif + #ifdef _LIBC # include "../locale/localeinfo.h" -# define category_to_name(category) _nl_category_names[category] +# define category_to_name(category) \ + _nl_category_names.str + _nl_category_name_idxs[category] #else -static const char *category_to_name PARAMS ((int category)) internal_function; +static const char *category_to_name (int category) internal_function; +#endif +#if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE +static const char *get_output_charset (struct binding *domainbinding) + internal_function; #endif -/* For those loosing systems which don't have `alloca' we have to add +/* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ @@ -389,9 +416,7 @@ typedef unsigned char transmem_block_t; #endif /* Lock variable to protect the global data in the gettext implementation. */ -#ifdef _LIBC -__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden) -#endif +gl_rwlock_define_initialized (, _nl_state_lock attribute_hidden) /* Checking whether the binaries runs SUID must be done and glibc provides easier methods therefore we make a difference here. */ @@ -423,24 +448,24 @@ static int enable_secure; } #endif -#ifndef HAVE_RAISE -# define raise(x) kill (getpid (), (x)) -#endif - /* Get the function to evaluate the plural expression. */ #include "eval-plural.h" /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale and, if PLURAL is nonzero, search over string depending on the plural form determined by N. */ +#ifdef IN_LIBGLOCALE +char * +gl_dcigettext (const char *domainname, + const char *msgid1, const char *msgid2, + int plural, unsigned long int n, + int category, + const char *localename, const char *encoding) +#else char * -DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) - const char *domainname; - const char *msgid1; - const char *msgid2; - int plural; - unsigned long int n; - int category; +DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, + int plural, unsigned long int n, int category) +#endif { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; @@ -449,15 +474,19 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) struct binding *binding; const char *categoryname; const char *categoryvalue; - char *dirname, *xdomainname; + const char *dirname; +#if defined _WIN32 && !defined __CYGWIN__ + const wchar_t *wdirname; +#endif + char *xdomainname; char *single_locale; char *retval; size_t retlen; int saved_errno; -#if defined HAVE_TSEARCH || defined _LIBC - struct known_translation_t *search; + struct known_translation_t search; struct known_translation_t **foundp = NULL; - size_t msgid_len; +#if defined HAVE_PER_THREAD_LOCALE && !defined IN_LIBGLOCALE + const char *localename; #endif size_t domainname_len; @@ -474,7 +503,15 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) : n == 1 ? (char *) msgid1 : (char *) msgid2); #endif - __libc_rwlock_rdlock (_nl_state_lock); + /* Preserve the `errno' value. */ + saved_errno = errno; + +#ifdef _LIBC + __libc_rwlock_define (extern, __libc_setlocale_lock attribute_hidden) + __libc_rwlock_rdlock (__libc_setlocale_lock); +#endif + + gl_rwlock_rdlock (_nl_state_lock); /* If DOMAINNAME is NULL, we are interested in the default domain. If CATEGORY is not LC_MESSAGES this might not make much sense but the @@ -488,19 +525,38 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) category = LC_MESSAGES; #endif -#if defined HAVE_TSEARCH || defined _LIBC - msgid_len = strlen (msgid1) + 1; - /* Try to find the translation among those which we found at some time. */ - search = (struct known_translation_t *) - alloca (offsetof (struct known_translation_t, msgid) + msgid_len); - memcpy (search->msgid, msgid1, msgid_len); - search->domainname = (char *) domainname; - search->category = category; - - foundp = (struct known_translation_t **) tfind (search, &root, transcmp); - freea (search); + search.domain = NULL; + search.msgid.ptr = msgid1; + search.domainname = domainname; + search.category = category; +#ifdef HAVE_PER_THREAD_LOCALE +# ifndef IN_LIBGLOCALE +# ifdef _LIBC + localename = strdupa (__current_locale_name (category)); +# else + categoryname = category_to_name (category); +# define CATEGORYNAME_INITIALIZED + localename = _nl_locale_name_thread_unsafe (category, categoryname); + if (localename == NULL) + localename = ""; +# endif +# endif + search.localename = localename; +#endif +#ifdef IN_LIBGLOCALE + search.encoding = encoding; +#endif + + /* Since tfind/tsearch manage a balanced tree, concurrent tfind and + tsearch calls can be fatal. */ + gl_rwlock_rdlock (tree_lock); + + foundp = (struct known_translation_t **) tfind (&search, &root, transcmp); + + gl_rwlock_unlock (tree_lock); + if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr) { /* Now deal with plural. */ @@ -510,18 +566,27 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) else retval = (char *) (*foundp)->translation; - __libc_rwlock_unlock (_nl_state_lock); + gl_rwlock_unlock (_nl_state_lock); +# ifdef _LIBC + __libc_rwlock_unlock (__libc_setlocale_lock); +# endif + __set_errno (saved_errno); return retval; } -#endif - - /* Preserve the `errno' value. */ - saved_errno = errno; /* See whether this is a SUID binary or not. */ DETERMINE_SECURE; /* First find matching binding. */ +#ifdef IN_LIBGLOCALE + /* We can use a trivial binding, since _nl_find_msg will ignore it anyway, + and _nl_load_domain and _nl_find_domain just pass it through. */ + binding = NULL; + dirname = bindtextdomain (domainname, NULL); +# if defined _WIN32 && !defined __CYGWIN__ + wdirname = wbindtextdomain (domainname, NULL); +# endif +#else for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); @@ -537,52 +602,134 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) } if (binding == NULL) - dirname = (char *) INTUSE(_nl_default_dirname); - else if (IS_ABSOLUTE_PATH (binding->dirname)) - dirname = binding->dirname; + { + dirname = _nl_default_dirname; +# if defined _WIN32 && !defined __CYGWIN__ + wdirname = NULL; +# endif + } else { - /* We have a relative path. Make it absolute now. */ - size_t dirname_len = strlen (binding->dirname) + 1; - size_t path_max; - char *ret; + dirname = binding->dirname; +# if defined _WIN32 && !defined __CYGWIN__ + wdirname = binding->wdirname; +# endif +#endif +#if defined _WIN32 && !defined __CYGWIN__ + if (wdirname != NULL + ? IS_RELATIVE_FILE_NAME (wdirname) + : IS_RELATIVE_FILE_NAME (dirname)) + { + /* We have a relative path. Make it absolute now. */ + size_t wdirname_len; + size_t path_max; + wchar_t *resolved_wdirname; + wchar_t *ret; + wchar_t *p; + + if (wdirname != NULL) + wdirname_len = wcslen (wdirname); + else + { + wdirname_len = mbstowcs (NULL, dirname, 0); - path_max = (unsigned int) PATH_MAX; - path_max += 2; /* The getcwd docs say to do this. */ + if (wdirname_len == (size_t)(-1)) + /* dirname contains invalid multibyte characters. Don't signal + an error but simply return the default string. */ + goto return_untranslated; + } + wdirname_len++; - for (;;) - { - dirname = (char *) alloca (path_max + dirname_len); - ADD_BLOCK (block_list, dirname); + path_max = (unsigned int) PATH_MAX; + path_max += 2; /* The getcwd docs say to do this. */ - __set_errno (0); - ret = getcwd (dirname, path_max); - if (ret != NULL || errno != ERANGE) - break; + for (;;) + { + resolved_wdirname = + (wchar_t *) + alloca ((path_max + wdirname_len) * sizeof (wchar_t)); + ADD_BLOCK (block_list, resolved_wdirname); + + __set_errno (0); + ret = _wgetcwd (resolved_wdirname, path_max); + if (ret != NULL || errno != ERANGE) + break; + + path_max += path_max / 2; + path_max += PATH_INCR; + } + + if (ret == NULL) + /* We cannot get the current working directory. Don't signal an + error but simply return the default string. */ + goto return_untranslated; + + p = wcschr (resolved_wdirname, L'\0'); + *p++ = L'/'; + if (wdirname != NULL) + wcscpy (p, wdirname); + else + mbstowcs (p, dirname, wdirname_len); - path_max += path_max / 2; - path_max += PATH_INCR; + wdirname = resolved_wdirname; + dirname = NULL; } +#else + if (IS_RELATIVE_FILE_NAME (dirname)) + { + /* We have a relative path. Make it absolute now. */ + size_t dirname_len = strlen (dirname) + 1; + size_t path_max; + char *resolved_dirname; + char *ret; + + path_max = (unsigned int) PATH_MAX; + path_max += 2; /* The getcwd docs say to do this. */ + + for (;;) + { + resolved_dirname = (char *) alloca (path_max + dirname_len); + ADD_BLOCK (block_list, resolved_dirname); + + __set_errno (0); + ret = getcwd (resolved_dirname, path_max); + if (ret != NULL || errno != ERANGE) + break; + + path_max += path_max / 2; + path_max += PATH_INCR; + } - if (ret == NULL) - /* We cannot get the current working directory. Don't signal an - error but simply return the default string. */ - goto return_untranslated; + if (ret == NULL) + /* We cannot get the current working directory. Don't signal an + error but simply return the default string. */ + goto return_untranslated; - stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); + stpcpy (stpcpy (strchr (resolved_dirname, '\0'), "/"), dirname); + dirname = resolved_dirname; + } +#endif +#ifndef IN_LIBGLOCALE } +#endif /* Now determine the symbolic name of CATEGORY and its value. */ +#ifndef CATEGORYNAME_INITIALIZED categoryname = category_to_name (category); +#endif +#ifdef IN_LIBGLOCALE + categoryvalue = guess_category_value (category, categoryname, localename); +#else categoryvalue = guess_category_value (category, categoryname); +#endif domainname_len = strlen (domainname); xdomainname = (char *) alloca (strlen (categoryname) + domainname_len + 5); ADD_BLOCK (block_list, xdomainname); - stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), - domainname, domainname_len), + stpcpy ((char *) mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), + domainname, domainname_len), ".mo"); /* Creating working area. */ @@ -615,7 +762,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) /* When this is a SUID binary we must not allow accessing files outside the dedicated directories. */ - if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale)) + if (ENABLE_SECURE && IS_FILE_NAME_WITH_DIR (single_locale)) /* Ingore this entry. */ continue; } @@ -628,11 +775,19 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) /* Find structure describing the message catalog matching the DOMAINNAME and CATEGORY. */ - domain = _nl_find_domain (dirname, single_locale, xdomainname, binding); + domain = _nl_find_domain (dirname, +#if defined _WIN32 && !defined __CYGWIN__ + wdirname, +#endif + single_locale, xdomainname, binding); if (domain != NULL) { - retval = _nl_find_msg (domain, binding, msgid1, &retlen); +#if defined IN_LIBGLOCALE + retval = _nl_find_msg (domain, binding, encoding, msgid1, &retlen); +#else + retval = _nl_find_msg (domain, binding, msgid1, 1, &retlen); +#endif if (retval == NULL) { @@ -640,8 +795,18 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { +#if defined IN_LIBGLOCALE + retval = _nl_find_msg (domain->successor[cnt], binding, + encoding, msgid1, &retlen); +#else retval = _nl_find_msg (domain->successor[cnt], binding, - msgid1, &retlen); + msgid1, 1, &retlen); +#endif + + /* Resource problems are not fatal, instead we return no + translation. */ + if (__builtin_expect (retval == (char *) -1, 0)) + goto return_untranslated; if (retval != NULL) { @@ -651,34 +816,67 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) } } + /* Returning -1 means that some resource problem exists + (likely memory) and that the strings could not be + converted. Return the original strings. */ + if (__builtin_expect (retval == (char *) -1, 0)) + break; + if (retval != NULL) { /* Found the translation of MSGID1 in domain DOMAIN: starting at RETVAL, RETLEN bytes. */ FREE_BLOCKS (block_list); -#if defined HAVE_TSEARCH || defined _LIBC if (foundp == NULL) { /* Create a new entry and add it to the search tree. */ + size_t msgid_len; + size_t size; struct known_translation_t *newp; - newp = (struct known_translation_t *) - malloc (offsetof (struct known_translation_t, msgid) - + msgid_len + domainname_len + 1); + msgid_len = strlen (msgid1) + 1; + size = offsetof (struct known_translation_t, msgid) + + msgid_len + domainname_len + 1; +#ifdef HAVE_PER_THREAD_LOCALE + size += strlen (localename) + 1; +#endif + newp = (struct known_translation_t *) malloc (size); if (newp != NULL) { - newp->domainname = - mempcpy (newp->msgid, msgid1, msgid_len); - memcpy (newp->domainname, domainname, domainname_len + 1); + char *new_domainname; +#ifdef HAVE_PER_THREAD_LOCALE + char *new_localename; +#endif + + new_domainname = + (char *) mempcpy (newp->msgid.appended, msgid1, + msgid_len); + memcpy (new_domainname, domainname, domainname_len + 1); +#ifdef HAVE_PER_THREAD_LOCALE + new_localename = new_domainname + domainname_len + 1; + strcpy (new_localename, localename); +#endif + newp->domainname = new_domainname; newp->category = category; +#ifdef HAVE_PER_THREAD_LOCALE + newp->localename = new_localename; +#endif +#ifdef IN_LIBGLOCALE + newp->encoding = encoding; +#endif newp->counter = _nl_msg_cat_cntr; newp->domain = domain; newp->translation = retval; newp->translation_length = retlen; + gl_rwlock_wrlock (tree_lock); + /* Insert the entry in the search tree. */ foundp = (struct known_translation_t **) tsearch (newp, &root, transcmp); + + gl_rwlock_unlock (tree_lock); + if (foundp == NULL || __builtin_expect (*foundp != newp, 0)) /* The insert failed. */ @@ -693,14 +891,17 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) (*foundp)->translation = retval; (*foundp)->translation_length = retlen; } -#endif + __set_errno (saved_errno); /* Now deal with plural. */ if (plural) retval = plural_lookup (domain, n, retval, retlen); - __libc_rwlock_unlock (_nl_state_lock); + gl_rwlock_unlock (_nl_state_lock); +#ifdef _LIBC + __libc_rwlock_unlock (__libc_setlocale_lock); +#endif return retval; } } @@ -709,15 +910,17 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) return_untranslated: /* Return the untranslated MSGID. */ FREE_BLOCKS (block_list); - __libc_rwlock_unlock (_nl_state_lock); + gl_rwlock_unlock (_nl_state_lock); +#ifdef _LIBC + __libc_rwlock_unlock (__libc_setlocale_lock); +#endif #ifndef _LIBC if (!ENABLE_SECURE) { - extern void _nl_log_untranslated PARAMS ((const char *logfilename, - const char *domainname, - const char *msgid1, - const char *msgid2, - int plural)); + extern void _nl_log_untranslated (const char *logfilename, + const char *domainname, + const char *msgid1, const char *msgid2, + int plural); const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED"); if (logfilename != NULL && logfilename[0] != '\0') @@ -732,13 +935,33 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) } +/* This lock primarily protects the memory management variables freemem, + freemem_size. It also protects write accesses to convd->conv_tab. + It's not worth using a separate lock (such as domain->conversions_lock) + for this purpose, because when modifying convd->conv_tab, we also need + to lock freemem, freemem_size for most of the time. */ +#ifdef _LIBC +__libc_lock_define_initialized (static, lock) +#endif + +/* Look up the translation of msgid within DOMAIN_FILE and DOMAINBINDING. + Return it if found. Return NULL if not found or in case of a conversion + failure (problem in the particular message catalog). Return (char *) -1 + in case of a memory allocation failure during conversion (only if + ENCODING != NULL resp. CONVERT == true). */ char * internal_function -_nl_find_msg (domain_file, domainbinding, msgid, lengthp) - struct loaded_l10nfile *domain_file; - struct binding *domainbinding; - const char *msgid; - size_t *lengthp; +#ifdef IN_LIBGLOCALE +_nl_find_msg (struct loaded_l10nfile *domain_file, + struct binding *domainbinding, const char *encoding, + const char *msgid, + size_t *lengthp) +#else +_nl_find_msg (struct loaded_l10nfile *domain_file, + struct binding *domainbinding, + const char *msgid, int convert, + size_t *lengthp) +#endif { struct loaded_domain *domain; nls_uint32 nstrings; @@ -746,7 +969,7 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp) char *result; size_t resultlen; - if (domain_file->decided == 0) + if (domain_file->decided <= 0) _nl_load_domain (domain_file, domainbinding); if (domain_file->data == NULL) @@ -761,7 +984,7 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp) { /* Use the hashing table. */ nls_uint32 len = strlen (msgid); - nls_uint32 hash_val = hash_string (msgid); + nls_uint32 hash_val = __hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); @@ -844,195 +1067,422 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp) } #if defined _LIBC || HAVE_ICONV - if (domain->codeset_cntr - != (domainbinding != NULL ? domainbinding->codeset_cntr : 0)) +# ifdef IN_LIBGLOCALE + if (encoding != NULL) +# else + if (convert) +# endif { - /* The domain's codeset has changed through bind_textdomain_codeset() - since the message catalog was initialized or last accessed. We - have to reinitialize the converter. */ - _nl_free_domain_conv (domain); - _nl_init_domain_conv (domain_file, domain, domainbinding); - } + /* We are supposed to do a conversion. */ +# ifndef IN_LIBGLOCALE + const char *encoding = get_output_charset (domainbinding); +# endif + size_t nconversions; + struct converted_domain *convd; + size_t i; - if ( + /* Protect against reallocation of the table. */ + gl_rwlock_rdlock (domain->conversions_lock); + + /* Search whether a table with converted translations for this + encoding has already been allocated. */ + nconversions = domain->nconversions; + convd = NULL; + + for (i = nconversions; i > 0; ) + { + i--; + if (strcmp (domain->conversions[i].encoding, encoding) == 0) + { + convd = &domain->conversions[i]; + break; + } + } + + gl_rwlock_unlock (domain->conversions_lock); + + if (convd == NULL) + { + /* We have to allocate a new conversions table. */ + gl_rwlock_wrlock (domain->conversions_lock); + nconversions = domain->nconversions; + + /* Maybe in the meantime somebody added the translation. + Recheck. */ + for (i = nconversions; i > 0; ) + { + i--; + if (strcmp (domain->conversions[i].encoding, encoding) == 0) + { + convd = &domain->conversions[i]; + goto found_convd; + } + } + + { + /* Allocate a table for the converted translations for this + encoding. */ + struct converted_domain *new_conversions = + (struct converted_domain *) + (domain->conversions != NULL + ? realloc (domain->conversions, + (nconversions + 1) * sizeof (struct converted_domain)) + : malloc ((nconversions + 1) * sizeof (struct converted_domain))); + + if (__builtin_expect (new_conversions == NULL, 0)) + { + /* Nothing we can do, no more memory. We cannot use the + translation because it might be encoded incorrectly. */ + unlock_fail: + gl_rwlock_unlock (domain->conversions_lock); + return (char *) -1; + } + + domain->conversions = new_conversions; + + /* Copy the 'encoding' string to permanent storage. */ + encoding = strdup (encoding); + if (__builtin_expect (encoding == NULL, 0)) + /* Nothing we can do, no more memory. We cannot use the + translation because it might be encoded incorrectly. */ + goto unlock_fail; + + convd = &new_conversions[nconversions]; + convd->encoding = encoding; + + /* Find out about the character set the file is encoded with. + This can be found (in textual form) in the entry "". If this + entry does not exist or if this does not contain the 'charset=' + information, we will assume the charset matches the one the + current locale and we don't have to perform any conversion. */ # ifdef _LIBC - domain->conv != (__gconv_t) -1 + convd->conv = (__gconv_t) -1; # else # if HAVE_ICONV - domain->conv != (iconv_t) -1 + convd->conv = (iconv_t) -1; # endif # endif - ) - { - /* We are supposed to do a conversion. First allocate an - appropriate table with the same structure as the table - of translations in the file, where we can put the pointers - to the converted strings in. - There is a slight complication with plural entries. They - are represented by consecutive NUL terminated strings. We - handle this case by converting RESULTLEN bytes, including - NULs. */ - - if (domain->conv_tab == NULL - && ((domain->conv_tab = - (char **) calloc (nstrings + domain->n_sysdep_strings, - sizeof (char *))) - == NULL)) - /* Mark that we didn't succeed allocating a table. */ - domain->conv_tab = (char **) -1; - - if (__builtin_expect (domain->conv_tab == (char **) -1, 0)) - /* Nothing we can do, no more memory. */ - goto converted; - - if (domain->conv_tab[act] == NULL) - { - /* We haven't used this string so far, so it is not - translated yet. Do this now. */ - /* We use a bit more efficient memory handling. - We allocate always larger blocks which get used over - time. This is faster than many small allocations. */ - __libc_lock_define_initialized (static, lock) -# define INITIAL_BLOCK_SIZE 4080 - static unsigned char *freemem; - static size_t freemem_size; + { + char *nullentry; + size_t nullentrylen; + + /* Get the header entry. This is a recursion, but it doesn't + reallocate domain->conversions because we pass + encoding = NULL or convert = 0, respectively. */ + nullentry = +# ifdef IN_LIBGLOCALE + _nl_find_msg (domain_file, domainbinding, NULL, "", + &nullentrylen); +# else + _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen); +# endif - const unsigned char *inbuf; - unsigned char *outbuf; - int malloc_count; -# ifndef _LIBC - transmem_block_t *transmem_list = NULL; + /* Resource problems are fatal. If we continue onwards we will + only attempt to calloc a new conv_tab and fail later. */ + if (__builtin_expect (nullentry == (char *) -1, 0)) + { +# ifndef IN_LIBGLOCALE + free ((char *) encoding); # endif + goto unlock_fail; + } - __libc_lock_lock (lock); + if (nullentry != NULL) + { + const char *charsetstr; - inbuf = (const unsigned char *) result; - outbuf = freemem + sizeof (size_t); + charsetstr = strstr (nullentry, "charset="); + if (charsetstr != NULL) + { + size_t len; + char *charset; + const char *outcharset; - malloc_count = 0; - while (1) - { - transmem_block_t *newmem; -# ifdef _LIBC - size_t non_reversible; - int res; + charsetstr += strlen ("charset="); + len = strcspn (charsetstr, " \t\n"); - if (freemem_size < sizeof (size_t)) - goto resize_freemem; + charset = (char *) alloca (len + 1); +# if defined _LIBC || HAVE_MEMPCPY + *((char *) mempcpy (charset, charsetstr, len)) = '\0'; +# else + memcpy (charset, charsetstr, len); + charset[len] = '\0'; +# endif - res = __gconv (domain->conv, - &inbuf, inbuf + resultlen, - &outbuf, - outbuf + freemem_size - sizeof (size_t), - &non_reversible); + outcharset = encoding; - if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) - break; +# ifdef _LIBC + /* We always want to use transliteration. */ + outcharset = norm_add_slashes (outcharset, "TRANSLIT"); + charset = norm_add_slashes (charset, ""); + int r = __gconv_open (outcharset, charset, &convd->conv, + GCONV_AVOID_NOCONV); + if (__builtin_expect (r != __GCONV_OK, 0)) + { + /* If the output encoding is the same there is + nothing to do. Otherwise do not use the + translation at all. */ + if (__builtin_expect (r != __GCONV_NULCONV, 1)) + { + gl_rwlock_unlock (domain->conversions_lock); + free ((char *) encoding); + return NULL; + } + + convd->conv = (__gconv_t) -1; + } +# else +# if HAVE_ICONV + /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, + we want to use transliteration. */ +# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) \ + && !defined __UCLIBC__) \ + || _LIBICONV_VERSION >= 0x0105 + if (strchr (outcharset, '/') == NULL) + { + char *tmp; + + len = strlen (outcharset); + tmp = (char *) alloca (len + 10 + 1); + memcpy (tmp, outcharset, len); + memcpy (tmp + len, "//TRANSLIT", 10 + 1); + outcharset = tmp; + + convd->conv = iconv_open (outcharset, charset); + + freea (outcharset); + } + else +# endif + convd->conv = iconv_open (outcharset, charset); +# endif +# endif - if (res != __GCONV_FULL_OUTPUT) - { - __libc_lock_unlock (lock); - goto converted; + freea (charset); + } } + } + convd->conv_tab = NULL; + /* Here domain->conversions is still == new_conversions. */ + domain->nconversions++; + } - inbuf = result; + found_convd: + gl_rwlock_unlock (domain->conversions_lock); + } + + if ( +# ifdef _LIBC + convd->conv != (__gconv_t) -1 # else # if HAVE_ICONV - const char *inptr = (const char *) inbuf; - size_t inleft = resultlen; - char *outptr = (char *) outbuf; - size_t outleft; - - if (freemem_size < sizeof (size_t)) - goto resize_freemem; - - outleft = freemem_size - sizeof (size_t); - if (iconv (domain->conv, - (ICONV_CONST char **) &inptr, &inleft, - &outptr, &outleft) - != (size_t) (-1)) - { - outbuf = (unsigned char *) outptr; - break; - } - if (errno != E2BIG) + convd->conv != (iconv_t) -1 +# endif +# endif + ) + { + /* We are supposed to do a conversion. First allocate an + appropriate table with the same structure as the table + of translations in the file, where we can put the pointers + to the converted strings in. + There is a slight complication with plural entries. They + are represented by consecutive NUL terminated strings. We + handle this case by converting RESULTLEN bytes, including + NULs. */ + + if (__builtin_expect (convd->conv_tab == NULL, 0)) + { +#ifdef _LIBC + __libc_lock_lock (lock); +#endif + if (convd->conv_tab == NULL) { - __libc_lock_unlock (lock); - goto converted; + convd->conv_tab = + (char **) calloc (nstrings + domain->n_sysdep_strings, + sizeof (char *)); + if (convd->conv_tab != NULL) + goto not_translated_yet; + /* Mark that we didn't succeed allocating a table. */ + convd->conv_tab = (char **) -1; } -# endif +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif + } + + if (__builtin_expect (convd->conv_tab == (char **) -1, 0)) + /* Nothing we can do, no more memory. We cannot use the + translation because it might be encoded incorrectly. */ + return (char *) -1; + + if (convd->conv_tab[act] == NULL) + { + /* We haven't used this string so far, so it is not + translated yet. Do this now. */ + /* We use a bit more efficient memory handling. + We allocate always larger blocks which get used over + time. This is faster than many small allocations. */ +# define INITIAL_BLOCK_SIZE 4080 + static unsigned char *freemem; + static size_t freemem_size; + + const unsigned char *inbuf; + unsigned char *outbuf; + int malloc_count; +# ifndef _LIBC + transmem_block_t *transmem_list; # endif - resize_freemem: - /* We must allocate a new buffer or resize the old one. */ - if (malloc_count > 0) +#ifdef _LIBC + __libc_lock_lock (lock); +#endif + not_translated_yet: + + inbuf = (const unsigned char *) result; + outbuf = freemem + sizeof (size_t); +# ifndef _LIBC + transmem_list = NULL; +# endif + + malloc_count = 0; + while (1) { - ++malloc_count; - freemem_size = malloc_count * INITIAL_BLOCK_SIZE; - newmem = (transmem_block_t *) realloc (transmem_list, - freemem_size); + transmem_block_t *newmem; # ifdef _LIBC - if (newmem != NULL) - transmem_list = transmem_list->next; - else + size_t non_reversible; + int res; + + if (freemem_size < sizeof (size_t)) + goto resize_freemem; + + res = __gconv (convd->conv, + &inbuf, inbuf + resultlen, + &outbuf, + outbuf + freemem_size - sizeof (size_t), + &non_reversible); + + if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) + break; + + if (res != __GCONV_FULL_OUTPUT) { - struct transmem_list *old = transmem_list; + /* We should not use the translation at all, it + is incorrectly encoded. */ +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif + return NULL; + } - transmem_list = transmem_list->next; - free (old); + inbuf = (const unsigned char *) result; +# else +# if HAVE_ICONV + const char *inptr = (const char *) inbuf; + size_t inleft = resultlen; + char *outptr = (char *) outbuf; + size_t outleft; + + if (freemem_size < sizeof (size_t)) + goto resize_freemem; + + outleft = freemem_size - sizeof (size_t); + if (iconv (convd->conv, + (ICONV_CONST char **) &inptr, &inleft, + &outptr, &outleft) + != (size_t) (-1)) + { + outbuf = (unsigned char *) outptr; + break; + } + if (errno != E2BIG) + { +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif + return NULL; } +# endif # endif - } - else - { - malloc_count = 1; - freemem_size = INITIAL_BLOCK_SIZE; - newmem = (transmem_block_t *) malloc (freemem_size); - } - if (__builtin_expect (newmem == NULL, 0)) - { - freemem = NULL; - freemem_size = 0; - __libc_lock_unlock (lock); - goto converted; - } + resize_freemem: + /* We must allocate a new buffer or resize the old one. */ + if (malloc_count > 0) + { + ++malloc_count; + freemem_size = malloc_count * INITIAL_BLOCK_SIZE; + newmem = (transmem_block_t *) realloc (transmem_list, + freemem_size); # ifdef _LIBC - /* Add the block to the list of blocks we have to free - at some point. */ - newmem->next = transmem_list; - transmem_list = newmem; + if (newmem != NULL) + transmem_list = newmem; + else + { + struct transmem_list *old = transmem_list; + + transmem_list = transmem_list->next; + free (old); + } +# endif + } + else + { + malloc_count = 1; + freemem_size = INITIAL_BLOCK_SIZE; + newmem = (transmem_block_t *) malloc (freemem_size); +# ifdef _LIBC + if (newmem != NULL) + { + /* Add the block to the list of blocks we have to free + at some point. */ + newmem->next = transmem_list; + transmem_list = newmem; + } + /* Fall through and return -1. */ +# endif + } + if (__builtin_expect (newmem == NULL, 0)) + { + freemem = NULL; + freemem_size = 0; +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif + return (char *) -1; + } - freemem = newmem->data; - freemem_size -= offsetof (struct transmem_list, data); +# ifdef _LIBC + freemem = (unsigned char *) newmem->data; + freemem_size -= offsetof (struct transmem_list, data); # else - transmem_list = newmem; - freemem = newmem; + transmem_list = newmem; + freemem = newmem; # endif - outbuf = freemem + sizeof (size_t); + outbuf = freemem + sizeof (size_t); + } + + /* We have now in our buffer a converted string. Put this + into the table of conversions. */ + *(size_t *) freemem = outbuf - freemem - sizeof (size_t); + convd->conv_tab[act] = (char *) freemem; + /* Shrink freemem, but keep it aligned. */ + freemem_size -= outbuf - freemem; + freemem = outbuf; + freemem += freemem_size & (alignof (size_t) - 1); + freemem_size = freemem_size & ~ (alignof (size_t) - 1); + +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif } - /* We have now in our buffer a converted string. Put this - into the table of conversions. */ - *(size_t *) freemem = outbuf - freemem - sizeof (size_t); - domain->conv_tab[act] = (char *) freemem; - /* Shrink freemem, but keep it aligned. */ - freemem_size -= outbuf - freemem; - freemem = outbuf; - freemem += freemem_size & (alignof (size_t) - 1); - freemem_size = freemem_size & ~ (alignof (size_t) - 1); - - __libc_lock_unlock (lock); + /* Now convd->conv_tab[act] contains the translation of all + the plural variants. */ + result = convd->conv_tab[act] + sizeof (size_t); + resultlen = *(size_t *) convd->conv_tab[act]; } - - /* Now domain->conv_tab[act] contains the translation of all - the plural variants. */ - result = domain->conv_tab[act] + sizeof (size_t); - resultlen = *(size_t *) domain->conv_tab[act]; } - converted: /* The result string is converted. */ #endif /* _LIBC || HAVE_ICONV */ @@ -1045,11 +1495,8 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp) /* Look up a plural variant. */ static char * internal_function -plural_lookup (domain, n, translation, translation_len) - struct loaded_l10nfile *domain; - unsigned long int n; - const char *translation; - size_t translation_len; +plural_lookup (struct loaded_l10nfile *domain, unsigned long int n, + const char *translation, size_t translation_len) { struct loaded_domain *domaindata = (struct loaded_domain *) domain->data; unsigned long int index; @@ -1086,8 +1533,7 @@ plural_lookup (domain, n, translation, translation_len) /* Return string representation of locale CATEGORY. */ static const char * internal_function -category_to_name (category) - int category; +category_to_name (int category) { const char *retval; @@ -1144,33 +1590,67 @@ category_to_name (category) } #endif -/* Guess value of current locale from value of the environment variables. */ +/* Lookup or infer the value of specified category in the current locale. + This uses values of the environment variables LC_ALL, LC_*, LANG, LANGUAGE, + and/or system-dependent defaults. */ static const char * internal_function -guess_category_value (category, categoryname) - int category; - const char *categoryname; +#ifdef IN_LIBGLOCALE +guess_category_value (int category, const char *categoryname, + const char *locale) + +#else +guess_category_value (int category, const char *categoryname) +#endif { const char *language; - const char *retval; - - /* The highest priority value is the `LANGUAGE' environment - variable. But we don't use the value if the currently selected - locale is the C locale. This is a GNU extension. */ - language = getenv ("LANGUAGE"); - if (language != NULL && language[0] == '\0') - language = NULL; +#ifndef IN_LIBGLOCALE + const char *locale; +# ifndef _LIBC + const char *language_default; + int locale_defaulted; +# endif +#endif - /* We have to proceed with the POSIX methods of looking to `LC_ALL', + /* We use the settings in the following order: + 1. The value of the environment variable 'LANGUAGE'. This is a GNU + extension. Its value can be a colon-separated list of locale names. + 2. The value of the environment variable 'LC_ALL', 'LC_xxx', or 'LANG'. + More precisely, the first among these that is set to a non-empty value. + This is how POSIX specifies it. The value is a single locale name. + 3. A system-dependent preference list of languages. Its value can be a + colon-separated list of locale names. + 4. A system-dependent default locale name. + This way: + - System-dependent settings can be overridden by environment variables. + - If the system provides both a list of languages and a default locale, + the former is used. */ + +#ifndef IN_LIBGLOCALE + /* Fetch the locale name, through the POSIX method of looking to `LC_ALL', `LC_xxx', and `LANG'. On some systems this can be done by the `setlocale' function itself. */ -#ifdef _LIBC - retval = __current_locale_name (category); -#else - retval = _nl_locale_name (category, categoryname); +# ifdef _LIBC + locale = __current_locale_name (category); +# else + locale_defaulted = 0; +# if HAVE_USELOCALE + locale = _nl_locale_name_thread_unsafe (category, categoryname); + if (locale == NULL) +# endif + { + locale = _nl_locale_name_posix (category, categoryname); + if (locale == NULL) + { + locale = _nl_locale_name_default (); + locale_defaulted = 1; + } + } +# endif #endif - /* Ignore LANGUAGE if the locale is set to "C" because + /* Ignore LANGUAGE and its system-dependent analogon if the locale is set + to "C" because 1. "C" locale usually uses the ASCII encoding, and most international messages use non-ASCII characters. These characters get displayed as question marks (if using glibc's iconv()) or as invalid 8-bit @@ -1178,9 +1658,82 @@ guess_category_value (category, categoryname) characters to ASCII). In any case, the output is ugly. 2. The precise output of some programs in the "C" locale is specified by POSIX and should not depend on environment variables like - "LANGUAGE". We allow such programs to use gettext(). */ - return language != NULL && strcmp (retval, "C") != 0 ? language : retval; + "LANGUAGE" or system-dependent information. We allow such programs + to use gettext(). */ + if (strcmp (locale, "C") == 0) + return locale; + + /* The highest priority value is the value of the 'LANGUAGE' environment + variable. */ + language = getenv ("LANGUAGE"); + if (language != NULL && language[0] != '\0') + return language; +#if !defined IN_LIBGLOCALE && !defined _LIBC + /* The next priority value is the locale name, if not defaulted. */ + if (locale_defaulted) + { + /* The next priority value is the default language preferences list. */ + language_default = _nl_language_preferences_default (); + if (language_default != NULL) + return language_default; + } + /* The least priority value is the locale name, if defaulted. */ +#endif + return locale; +} + +#if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE +/* Returns the output charset. */ +static const char * +internal_function +get_output_charset (struct binding *domainbinding) +{ + /* The output charset should normally be determined by the locale. But + sometimes the locale is not used or not correctly set up, so we provide + a possibility for the user to override this: the OUTPUT_CHARSET + environment variable. Moreover, the value specified through + bind_textdomain_codeset overrides both. */ + if (domainbinding != NULL && domainbinding->codeset != NULL) + return domainbinding->codeset; + else + { + /* For speed reasons, we look at the value of OUTPUT_CHARSET only + once. This is a user variable that is not supposed to change + during a program run. */ + static char *output_charset_cache; + static int output_charset_cached; + + if (!output_charset_cached) + { + const char *value = getenv ("OUTPUT_CHARSET"); + + if (value != NULL && value[0] != '\0') + { + size_t len = strlen (value) + 1; + char *value_copy = (char *) malloc (len); + + if (value_copy != NULL) + memcpy (value_copy, value, len); + output_charset_cache = value_copy; + } + output_charset_cached = 1; + } + + if (output_charset_cache != NULL) + return output_charset_cache; + else + { +# ifdef _LIBC + return _NL_CURRENT (LC_CTYPE, CODESET); +# else +# if HAVE_ICONV + return locale_charset (); +# endif +# endif + } + } } +#endif /* @@ begin of epilog @@ */ @@ -1190,9 +1743,7 @@ guess_category_value (category, categoryname) to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * -stpcpy (dest, src) - char *dest; - const char *src; +stpcpy (char *dest, const char *src) { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; @@ -1202,15 +1753,16 @@ stpcpy (dest, src) #if !_LIBC && !HAVE_MEMPCPY static void * -mempcpy (dest, src, n) - void *dest; - const void *src; - size_t n; +mempcpy (void *dest, const void *src, size_t n) { return (void *) ((char *) memcpy (dest, src, n) + n); } #endif +#if !_LIBC && !HAVE_TSEARCH +# include "tsearch.c" +#endif + #ifdef _LIBC /* If we want to free all resources we have to do some work at @@ -1223,7 +1775,7 @@ libc_freeres_fn (free_mem) { struct binding *oldp = _nl_domain_bindings; _nl_domain_bindings = _nl_domain_bindings->next; - if (oldp->dirname != INTUSE(_nl_default_dirname)) + if (oldp->dirname != _nl_default_dirname) /* Yes, this is a pointer comparison. */ free (oldp->dirname); free (oldp->codeset); diff --git a/lib/intl/dcngettext.c b/lib/intl/dcngettext.c index 3d70b18fe..50e4d602c 100644 --- a/lib/intl/dcngettext.c +++ b/lib/intl/dcngettext.c @@ -1,22 +1,18 @@ -/* dcngettext.c - Implementation of the dcngettext(3) function. */ +/* Implementation of the dcngettext(3) function. + Copyright (C) 1995-2016 Free Software Foundation, Inc. -/* Copyright (C) 1995-1999, 2000, 2001, 2002, 2006-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -46,12 +42,9 @@ /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * -DCNGETTEXT (domainname, msgid1, msgid2, n, category) - const char *domainname; - const char *msgid1; - const char *msgid2; - unsigned long int n; - int category; +DCNGETTEXT (const char *domainname, + const char *msgid1, const char *msgid2, unsigned long int n, + int category) { return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); } diff --git a/lib/intl/dgettext.c b/lib/intl/dgettext.c index 53516314f..d6dd135be 100644 --- a/lib/intl/dgettext.c +++ b/lib/intl/dgettext.c @@ -1,30 +1,27 @@ -/* dgettext.c - Implementation of the dgettext(3) function. */ +/* Implementation of the dgettext(3) function. + Copyright (C) 1995-2016 Free Software Foundation, Inc. -/* Copyright (C) 1995-1997, 2000, 2001, 2002, 2006-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif +#include "gettextP.h" + #include <locale.h> -#include "gettextP.h" #ifdef _LIBC # include <libintl.h> #else @@ -39,7 +36,7 @@ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DGETTEXT __dgettext -# define DCGETTEXT INTUSE(__dcgettext) +# define DCGETTEXT __dcgettext #else # define DGETTEXT libintl_dgettext # define DCGETTEXT libintl_dcgettext @@ -48,9 +45,7 @@ /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale. */ char * -DGETTEXT (domainname, msgid) - const char *domainname; - const char *msgid; +DGETTEXT (const char *domainname, const char *msgid) { return DCGETTEXT (domainname, msgid, LC_MESSAGES); } diff --git a/lib/intl/dngettext.c b/lib/intl/dngettext.c index 4276f3b24..6634f98f7 100644 --- a/lib/intl/dngettext.c +++ b/lib/intl/dngettext.c @@ -1,30 +1,27 @@ -/* dngettext.c - Implementation of the dngettext(3) function. */ +/* Implementation of the dngettext(3) function. + Copyright (C) 1995-2016 Free Software Foundation, Inc. -/* Copyright (C) 1995-1997, 2000, 2001, 2002, 2005, 2006, 2008,2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif +#include "gettextP.h" + #include <locale.h> -#include "gettextP.h" #ifdef _LIBC # include <libintl.h> #else @@ -48,11 +45,8 @@ /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale and skip message according to the plural form. */ char * -DNGETTEXT (domainname, msgid1, msgid2, n) - const char *domainname; - const char *msgid1; - const char *msgid2; - unsigned long int n; +DNGETTEXT (const char *domainname, + const char *msgid1, const char *msgid2, unsigned long int n) { return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); } diff --git a/lib/intl/eval-plural.h b/lib/intl/eval-plural.h index 3441c74e5..df35866c7 100644 --- a/lib/intl/eval-plural.h +++ b/lib/intl/eval-plural.h @@ -1,38 +1,28 @@ -/* eval-plural.c - Plural expression evaluation. */ +/* Plural expression evaluation. + Copyright (C) 2000-2003, 2007 Free Software Foundation, Inc. -/* Copyright (C) 2000-2002, 2006-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef STATIC #define STATIC static #endif /* Evaluate the plural expression and return an index value. */ -STATIC unsigned long int plural_eval PARAMS ((struct expression *pexp, - unsigned long int n)) - internal_function; - STATIC unsigned long int internal_function -plural_eval (pexp, n) - struct expression *pexp; - unsigned long int n; +plural_eval (const struct expression *pexp, unsigned long int n) { switch (pexp->nargs) { diff --git a/lib/intl/explodename.c b/lib/intl/explodename.c index adc36402b..661266ea3 100644 --- a/lib/intl/explodename.c +++ b/lib/intl/explodename.c @@ -1,23 +1,18 @@ -/* explodename.c */ - -/* Copyright (C) 1995-1998, 2000, 2001, 2005-2009 Free Software Foundation, Inc. +/* Copyright (C) 1995-2016, 2020 Free Software Foundation, Inc. Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -40,32 +35,13 @@ /* @@ end of prolog @@ */ -char * -_nl_find_language (name) - const char *name; -{ - while (name[0] != '\0' && name[0] != '_' && name[0] != '@' - && name[0] != '+' && name[0] != ',') - ++name; - - return (char *) name; -} - int -_nl_explode_name (name, language, modifier, territory, codeset, - normalized_codeset, special, sponsor, revision) - char *name; - const char **language; - const char **modifier; - const char **territory; - const char **codeset; - const char **normalized_codeset; - const char **special; - const char **sponsor; - const char **revision; +_nl_explode_name (char *name, + const char **language, const char **modifier, + const char **territory, const char **codeset, + const char **normalized_codeset) { - enum { undecided, xpg, cen } syntax; char *cp; int mask; @@ -73,40 +49,97 @@ _nl_explode_name (name, language, modifier, territory, codeset, *territory = NULL; *codeset = NULL; *normalized_codeset = NULL; - *special = NULL; - *sponsor = NULL; - *revision = NULL; - /* Now we determine the single parts of the locale name. First - look for the language. Termination symbols are `_' and `@' if - we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ + /* Determine the individual parts of the locale name. + Accept the XPG syntax + + language[_territory][.codeset][@modifier] + + On AIX systems, also accept the same syntax with an uppercased language, + and a syntax similar to RFC 5646: + + language[_script]_territory[.codeset] + + where script is a four-letter code for a script, per ISO 15924. + */ + mask = 0; - syntax = undecided; - *language = cp = name; - cp = _nl_find_language (*language); - if (*language == cp) + /* First look for the language. Termination symbols are `_', '.', and `@'. */ + *language = name; + + cp = name; + while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@' && cp[0] != '.') + ++cp; + + if (cp == name) /* This does not make sense: language has to be specified. Use this entry as it is without exploding. Perhaps it is an alias. */ - cp = strchr (*language, '\0'); - else if (cp[0] == '_') + cp = strchr (name, '\0'); + else { - /* Next is the territory. */ - cp[0] = '\0'; - *territory = ++cp; + if (cp[0] == '_') + { + *cp++ = '\0'; +#if defined _AIX + /* Lowercase the language. */ + { + char *lcp; + + for (lcp = name; lcp < cp; lcp++) + if (*lcp >= 'A' && *lcp <= 'Z') + *lcp += 'a' - 'A'; + } + + /* Next is the script or the territory. It depends on whether + there is another '_'. */ + char *next = cp; + + while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@' && cp[0] != '.') + ++cp; + + if (cp[0] == '_') + { + *cp++ = '\0'; + + /* Next is the script. Translate the script to a modifier. + We don't need to support all of ISO 15924 here, only those + scripts that actually occur: + Latn -> latin + Cyrl -> cyrillic + Guru -> gurmukhi + Hans -> (omitted, redundant with the territory CN or SG) + Hant -> (omitted, redundant with the territory TW or HK) */ + if (strcmp (next, "Latn") == 0) + *modifier = "latin"; + else if (strcmp (next, "Cyrl") == 0) + *modifier = "cyrillic"; + else if (strcmp (next, "Guru") == 0) + *modifier = "gurmukhi"; + else if (!(strcmp (next, "Hans") == 0 + || strcmp (next, "Hant") == 0)) + *modifier = next; + if (*modifier != NULL && (*modifier)[0] != '\0') + mask |= XPG_MODIFIER; + } + else + cp = next; +#endif + + /* Next is the territory. */ + *territory = cp; - while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@' - && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') - ++cp; + while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@') + ++cp; - mask |= TERRITORY; + mask |= XPG_TERRITORY; + } if (cp[0] == '.') { /* Next is the codeset. */ - syntax = xpg; - cp[0] = '\0'; - *codeset = ++cp; + *cp++ = '\0'; + *codeset = cp; while (cp[0] != '\0' && cp[0] != '@') ++cp; @@ -117,79 +150,31 @@ _nl_explode_name (name, language, modifier, territory, codeset, { *normalized_codeset = _nl_normalize_codeset (*codeset, cp - *codeset); - if (strcmp (*codeset, *normalized_codeset) == 0) + if (*normalized_codeset == NULL) + return -1; + else if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else mask |= XPG_NORM_CODESET; } } - } - if (cp[0] == '@' || (syntax != xpg && cp[0] == '+')) - { - /* Next is the modifier. */ - syntax = cp[0] == '@' ? xpg : cen; - cp[0] = '\0'; - *modifier = ++cp; - - while (syntax == cen && cp[0] != '\0' && cp[0] != '+' - && cp[0] != ',' && cp[0] != '_') - ++cp; - - mask |= XPG_MODIFIER | CEN_AUDIENCE; - } - - if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_')) - { - syntax = cen; - - if (cp[0] == '+') + if (cp[0] == '@') { - /* Next is special application (CEN syntax). */ - cp[0] = '\0'; - *special = ++cp; - - while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_') - ++cp; + /* Next is the modifier. */ + *cp++ = '\0'; + *modifier = cp; - mask |= CEN_SPECIAL; - } - - if (cp[0] == ',') - { - /* Next is sponsor (CEN syntax). */ - cp[0] = '\0'; - *sponsor = ++cp; - - while (cp[0] != '\0' && cp[0] != '_') - ++cp; - - mask |= CEN_SPONSOR; - } - - if (cp[0] == '_') - { - /* Next is revision (CEN syntax). */ - cp[0] = '\0'; - *revision = ++cp; - - mask |= CEN_REVISION; + if (cp[0] != '\0') + mask |= XPG_MODIFIER; } } - /* For CEN syntax values it might be important to have the - separator character in the file name, not for XPG syntax. */ - if (syntax == xpg) - { - if (*territory != NULL && (*territory)[0] == '\0') - mask &= ~TERRITORY; + if (*territory != NULL && (*territory)[0] == '\0') + mask &= ~XPG_TERRITORY; - if (*codeset != NULL && (*codeset)[0] == '\0') - mask &= ~XPG_CODESET; - - if (*modifier != NULL && (*modifier)[0] == '\0') - mask &= ~XPG_MODIFIER; - } + if (*codeset != NULL && (*codeset)[0] == '\0') + mask &= ~XPG_CODESET; return mask; } diff --git a/lib/intl/finddomain.c b/lib/intl/finddomain.c index 69a3586e0..e4cab2246 100644 --- a/lib/intl/finddomain.c +++ b/lib/intl/finddomain.c @@ -1,23 +1,19 @@ -/* finddomain.c - Handle list of needed message catalogs */ - -/* Copyright (C) 1995-1999, 2000, 2001, 2005-2009 Free Software Foundation, Inc. +/* Handle list of needed message catalogs + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@gnu.org>, 1995. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -39,21 +35,36 @@ # include "libgnuintl.h" #endif +/* Handle multi-threaded applications. */ +#ifdef _LIBC +# include <bits/libc-lock.h> +# define gl_rwlock_define_initialized __libc_rwlock_define_initialized +# define gl_rwlock_rdlock __libc_rwlock_rdlock +# define gl_rwlock_wrlock __libc_rwlock_wrlock +# define gl_rwlock_unlock __libc_rwlock_unlock +#else +# include "lock.h" +#endif + /* @@ end of prolog @@ */ /* List of already loaded domains. */ static struct loaded_l10nfile *_nl_loaded_domains; +/* Lock that protects the access to _NL_LOADED_DOMAINS. */ +gl_rwlock_define_initialized (static, lock); + /* Return a data structure describing the message catalog described by - the DOMAINNAME and CATEGORY parameters with respect to the currently - established bindings. */ + the DIRNAME or WDIRNAME, LOCALE, and DOMAINNAME parameters with respect + to the currently established bindings. */ struct loaded_l10nfile * internal_function -_nl_find_domain (dirname, locale, domainname, domainbinding) - const char *dirname; - char *locale; - const char *domainname; - struct binding *domainbinding; +_nl_find_domain (const char *dirname, +#if defined _WIN32 && !defined __CYGWIN__ + const wchar_t *wdirname, +#endif + char *locale, + const char *domainname, struct binding *domainbinding) { struct loaded_l10nfile *retval; const char *language; @@ -61,44 +72,46 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) const char *territory; const char *codeset; const char *normalized_codeset; - const char *special; - const char *sponsor; - const char *revision; const char *alias_value; int mask; /* LOCALE can consist of up to four recognized parts for the XPG syntax: - language[_territory[.codeset]][@modifier] - - and six parts for the CEN syntax: - - language[_territory][+audience][+special][,[sponsor][_revision]] + language[_territory][.codeset][@modifier] Beside the first part all of them are allowed to be missing. If the full specified locale is not found, the less specific one are looked for. The various parts will be stripped off according to the following order: - (1) revision - (2) sponsor - (3) special - (4) codeset - (5) normalized codeset - (6) territory - (7) audience/modifier + (1) codeset + (2) normalized codeset + (3) territory + (4) modifier */ + /* We need to protect modifying the _NL_LOADED_DOMAINS data. */ + gl_rwlock_rdlock (lock); + /* If we have already tested for this locale entry there has to be one data set in the list of loaded domains. */ - retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, - strlen (dirname) + 1, 0, locale, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, domainname, 0); + retval = _nl_make_l10nflist (&_nl_loaded_domains, + dirname, + dirname != NULL ? strlen (dirname) + 1 : 0, +#if defined _WIN32 && !defined __CYGWIN__ + wdirname, + wdirname != NULL ? wcslen (wdirname) + 1 : 0, +#endif + 0, locale, NULL, NULL, NULL, NULL, + domainname, 0); + + gl_rwlock_unlock (lock); + if (retval != NULL) { /* We know something about this locale. */ int cnt; - if (retval->decided == 0) + if (retval->decided <= 0) _nl_load_domain (retval, domainbinding); if (retval->data != NULL) @@ -106,13 +119,14 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { - if (retval->successor[cnt]->decided == 0) + if (retval->successor[cnt]->decided <= 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } - return cnt >= 0 ? retval : NULL; + + return retval; /* NOTREACHED */ } @@ -122,45 +136,49 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) alias_value = _nl_expand_alias (locale); if (alias_value != NULL) { -#if defined _LIBC || defined HAVE_STRDUP locale = strdup (alias_value); if (locale == NULL) return NULL; -#else - size_t len = strlen (alias_value) + 1; - locale = (char *) malloc (len); - if (locale == NULL) - return NULL; - - memcpy (locale, alias_value, len); -#endif } /* Now we determine the single parts of the locale name. First - look for the language. Termination symbols are `_' and `@' if - we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ + look for the language. Termination symbols are `_', '.', and `@'. */ mask = _nl_explode_name (locale, &language, &modifier, &territory, - &codeset, &normalized_codeset, &special, - &sponsor, &revision); + &codeset, &normalized_codeset); + if (mask == -1) + /* This means we are out of core. */ + return NULL; + + /* We need to protect modifying the _NL_LOADED_DOMAINS data. */ + gl_rwlock_wrlock (lock); /* Create all possible locale entries which might be interested in generalization. */ - retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, - strlen (dirname) + 1, mask, language, territory, - codeset, normalized_codeset, modifier, special, - sponsor, revision, domainname, 1); + retval = _nl_make_l10nflist (&_nl_loaded_domains, + dirname, + dirname != NULL ? strlen (dirname) + 1 : 0, +#if defined _WIN32 && !defined __CYGWIN__ + wdirname, + wdirname != NULL ? wcslen (wdirname) + 1 : 0, +#endif + mask, language, territory, + codeset, normalized_codeset, modifier, + domainname, 1); + + gl_rwlock_unlock (lock); + if (retval == NULL) /* This means we are out of core. */ - return NULL; + goto out; - if (retval->decided == 0) + if (retval->decided <= 0) _nl_load_domain (retval, domainbinding); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { - if (retval->successor[cnt]->decided == 0) + if (retval->successor[cnt]->decided <= 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; @@ -171,6 +189,7 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) if (alias_value != NULL) free (locale); +out: /* The space for normalized_codeset is dynamically allocated. Free it. */ if (mask & XPG_NORM_CODESET) free ((void *) normalized_codeset); @@ -180,7 +199,10 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) #ifdef _LIBC -libc_freeres_fn (free_mem) +/* This is called from iconv/gconv_db.c's free_mem, as locales must + be freed before freeing gconv steps arrays. */ +void __libc_freeres_fn_section +_nl_finddomain_subfreeres (void) { struct loaded_l10nfile *runp = _nl_loaded_domains; diff --git a/lib/intl/gettext.c b/lib/intl/gettext.c index fd3fa0fff..5707f8bd1 100644 --- a/lib/intl/gettext.c +++ b/lib/intl/gettext.c @@ -1,22 +1,18 @@ -/* gettext.c - Implementation of gettext(3) function. */ +/* Implementation of gettext(3) function. + Copyright (C) 1995-2016 Free Software Foundation, Inc. -/* Copyright (C) 1995, 1997, 2000, 2001, 2002, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -44,7 +40,7 @@ prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext -# define DCGETTEXT INTUSE(__dcgettext) +# define DCGETTEXT __dcgettext #else # define GETTEXT libintl_gettext # define DCGETTEXT libintl_dcgettext @@ -54,8 +50,7 @@ LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * -GETTEXT (msgid) - const char *msgid; +GETTEXT (const char *msgid) { return DCGETTEXT (NULL, msgid, LC_MESSAGES); } diff --git a/lib/intl/gettextP.h b/lib/intl/gettextP.h index 5c137e514..fc2158255 100644 --- a/lib/intl/gettextP.h +++ b/lib/intl/gettextP.h @@ -1,23 +1,19 @@ -/* gettextP.h - Header describing internals of libintl library. */ - -/* Copyright (C) 1995-1999, 2000-2003, 2005-2009 Free Software Foundation, Inc. +/* Header describing internals of libintl library. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 1995. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETTEXTP_H #define _GETTEXTP_H @@ -32,20 +28,67 @@ # endif #endif +/* Handle multi-threaded applications. */ +#ifdef _LIBC +# include <bits/libc-lock.h> +# define gl_rwlock_define __libc_rwlock_define +#else +# include "lock.h" +#endif + +#ifdef _LIBC +struct loaded_domain; +extern char *__gettext (const char *__msgid); +extern char *__dgettext (const char *__domainname, const char *__msgid); +extern char *__dcgettext (const char *__domainname, const char *__msgid, + int __category); +extern char *__ngettext (const char *__msgid1, const char *__msgid2, + unsigned long int __n); +extern char *__dngettext (const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int n); +extern char *__dcngettext (const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n, int __category); +extern char *__dcigettext (const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category); +extern char *__textdomain (const char *__domainname); +extern char *__bindtextdomain (const char *__domainname, + const char *__dirname); +extern char *__bind_textdomain_codeset (const char *__domainname, + const char *__codeset); +extern void _nl_finddomain_subfreeres (void) attribute_hidden; +extern void _nl_unload_domain (struct loaded_domain *__domain) + internal_function attribute_hidden; +#else +/* Declare the exported libintl_* functions, in a way that allows us to + call them under their real name. */ +# undef _INTL_REDIRECT_INLINE +# undef _INTL_REDIRECT_MACROS +# define _INTL_REDIRECT_MACROS +# include "libgnuintl.h" +# ifdef IN_LIBGLOCALE +extern char *gl_dcigettext (const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category, + const char *__localename, const char *__encoding); +# else +extern char *libintl_dcigettext (const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category); +# endif +#endif + #include "loadinfo.h" #include "gmo.h" /* Get nls_uint32. */ /* @@ end of prolog @@ */ -#ifndef PARAMS -# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES -# define PARAMS(args) args -# else -# define PARAMS(args) () -# endif -#endif - #ifndef internal_function # define internal_function #endif @@ -70,8 +113,7 @@ # define SWAP(i) bswap_32 (i) #else static inline nls_uint32 -SWAP (i) - nls_uint32 i; +SWAP (nls_uint32 i) { return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); } @@ -87,6 +129,26 @@ struct sysdep_string_desc const char *pointer; }; +/* Cache of translated strings after charset conversion. + Note: The strings are converted to the target encoding only on an as-needed + basis. */ +struct converted_domain +{ + /* The target encoding name. */ + const char *encoding; + /* The descriptor for conversion from the message catalog's encoding to + this target encoding. */ +#ifdef _LIBC + __gconv_t conv; +#else +# if HAVE_ICONV + iconv_t conv; +# endif +#endif + /* The table of translated strings after charset conversion. */ + char **conv_tab; +}; + /* The representation of an opened message catalog. */ struct loaded_domain { @@ -122,17 +184,12 @@ struct loaded_domain /* 1 if the hash table uses a different endianness than this machine. */ int must_swap_hash_tab; - int codeset_cntr; -#ifdef _LIBC - __gconv_t conv; -#else -# if HAVE_ICONV - iconv_t conv; -# endif -#endif - char **conv_tab; + /* Cache of charset conversions of the translated strings. */ + struct converted_domain *conversions; + size_t nconversions; + gl_rwlock_define (, conversions_lock) - struct expression *plural; + const struct expression *plural; unsigned long int nplurals; }; @@ -150,7 +207,9 @@ struct binding { struct binding *next; char *dirname; - int codeset_cntr; /* Incremented each time codeset changes. */ +#if defined _WIN32 && !defined __CYGWIN__ + wchar_t *wdirname; +#endif char *codeset; char domainname[ZERO]; }; @@ -158,69 +217,99 @@ struct binding /* A counter which is incremented each time some previous translations become invalid. This variable is part of the external ABI of the GNU libintl. */ -extern int _nl_msg_cat_cntr; +#if defined __KLIBC__ && !defined _LIBC +# define _nl_msg_cat_cntr libintl_nl_msg_cat_cntr +#endif +#ifdef IN_LIBGLOCALE +# include <glocale/config.h> +extern LIBGLOCALE_DLL_EXPORTED int _nl_msg_cat_cntr; +#else +extern LIBINTL_DLL_EXPORTED int _nl_msg_cat_cntr; +#endif #ifndef _LIBC -const char *_nl_locale_name PARAMS ((int category, const char *categoryname)); +extern const char *_nl_language_preferences_default (void); +# define gl_locale_name_canonicalize _nl_locale_name_canonicalize +extern void _nl_locale_name_canonicalize (char *name); +# define gl_locale_name_from_win32_LANGID _nl_locale_name_from_win32_LANGID +/* extern const char *_nl_locale_name_from_win32_LANGID (LANGID langid); */ +# define gl_locale_name_from_win32_LCID _nl_locale_name_from_win32_LCID +/* extern const char *_nl_locale_name_from_win32_LCID (LCID lcid); */ +# define gl_locale_name_thread_unsafe _nl_locale_name_thread_unsafe +extern const char *_nl_locale_name_thread_unsafe (int category, + const char *categoryname); +# define gl_locale_name_thread _nl_locale_name_thread +/* extern const char *_nl_locale_name_thread (int category, + const char *categoryname); */ +# define gl_locale_name_posix _nl_locale_name_posix +extern const char *_nl_locale_name_posix (int category, + const char *categoryname); +# define gl_locale_name_environ _nl_locale_name_environ +extern const char *_nl_locale_name_environ (int category, + const char *categoryname); +# define gl_locale_name_default _nl_locale_name_default +extern const char *_nl_locale_name_default (void); +# define gl_locale_name _nl_locale_name +/* extern const char *_nl_locale_name (int category, + const char *categoryname); */ #endif -struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, - char *__locale, - const char *__domainname, - struct binding *__domainbinding)) - internal_function; -void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain, - struct binding *__domainbinding)) +struct loaded_l10nfile *_nl_find_domain (const char *__dirname, +#if defined _WIN32 && !defined __CYGWIN__ + const wchar_t *__wdirname, +#endif + char *__locale, + const char *__domainname, + struct binding *__domainbinding) internal_function; -void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) +void _nl_load_domain (struct loaded_l10nfile *__domain, + struct binding *__domainbinding) internal_function; -const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file, - struct loaded_domain *__domain, - struct binding *__domainbinding)) + +#ifdef IN_LIBGLOCALE +char *_nl_find_msg (struct loaded_l10nfile *domain_file, + struct binding *domainbinding, const char *encoding, + const char *msgid, + size_t *lengthp) internal_function; -void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain)) +#else +char *_nl_find_msg (struct loaded_l10nfile *domain_file, + struct binding *domainbinding, const char *msgid, + int convert, size_t *lengthp) internal_function; +#endif -char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, - struct binding *domainbinding, - const char *msgid, size_t *lengthp)) - internal_function; +/* The internal variables in the standalone libintl.a must have different + names than the internal variables in GNU libc, otherwise programs + using libintl.a cannot be linked statically. */ +#if !defined _LIBC +# define _nl_default_dirname libintl_nl_default_dirname +# define _nl_domain_bindings libintl_nl_domain_bindings +#endif +/* Contains the default location of the message catalogs. */ +extern const char _nl_default_dirname[]; #ifdef _LIBC -extern char *__gettext PARAMS ((const char *__msgid)); -extern char *__dgettext PARAMS ((const char *__domainname, - const char *__msgid)); -extern char *__dcgettext PARAMS ((const char *__domainname, - const char *__msgid, int __category)); -extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2, - unsigned long int __n)); -extern char *__dngettext PARAMS ((const char *__domainname, - const char *__msgid1, const char *__msgid2, - unsigned long int n)); -extern char *__dcngettext PARAMS ((const char *__domainname, - const char *__msgid1, const char *__msgid2, - unsigned long int __n, int __category)); -extern char *__dcigettext PARAMS ((const char *__domainname, - const char *__msgid1, const char *__msgid2, - int __plural, unsigned long int __n, - int __category)); -extern char *__textdomain PARAMS ((const char *__domainname)); -extern char *__bindtextdomain PARAMS ((const char *__domainname, - const char *__dirname)); -extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname, - const char *__codeset)); -#else -/* Declare the exported libintl_* functions, in a way that allows us to - call them under their real name. */ -# define _INTL_REDIRECT_MACROS -# include "libgnuintl.h" -extern char *libintl_dcigettext PARAMS ((const char *__domainname, - const char *__msgid1, - const char *__msgid2, - int __plural, unsigned long int __n, - int __category)); +libc_hidden_proto (_nl_default_dirname) #endif +/* List with bindings of specific domains. */ +extern struct binding *_nl_domain_bindings; + +/* The internal variables in the standalone libintl.a must have different + names than the internal variables in GNU libc, otherwise programs + using libintl.a cannot be linked statically. */ +#if !defined _LIBC +# define _nl_default_default_domain libintl_nl_default_default_domain +# define _nl_current_default_domain libintl_nl_current_default_domain +#endif + +/* Name of the default text domain. */ +extern const char _nl_default_default_domain[] attribute_hidden; + +/* Default text domain in which entries for gettext(3) are to be found. */ +extern const char *_nl_current_default_domain attribute_hidden; + /* @@ begin of epilog @@ */ #endif /* gettextP.h */ diff --git a/lib/intl/gmo.h b/lib/intl/gmo.h index 2c5785123..8bde0bf4f 100644 --- a/lib/intl/gmo.h +++ b/lib/intl/gmo.h @@ -1,22 +1,18 @@ -/* gmo.h - Description of GNU message catalog format: general file layout. */ +/* Description of GNU message catalog format: general file layout. + Copyright (C) 1995-2016 Free Software Foundation, Inc. -/* Copyright (C) 1995, 1997, 2000-2002, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 @@ -31,6 +27,7 @@ /* Revision number of the currently used .mo (binary) file format. */ #define MO_REVISION_NUMBER 0 +#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1 /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An @@ -78,7 +75,7 @@ struct mo_file_header /* The revision number of the file format. */ nls_uint32 revision; - /* The following are only used in .mo files with major revision 0. */ + /* The following are only used in .mo files with major revision 0 or 1. */ /* The number of strings pairs. */ nls_uint32 nstrings; @@ -125,6 +122,15 @@ struct sysdep_segment nls_uint32 offset; }; +/* Pair of a static and a system dependent segment, in struct sysdep_string. */ +struct segment_pair +{ + /* Size of static segment. */ + nls_uint32 segsize; + /* Reference to system dependent string segment, or ~0 at the end. */ + nls_uint32 sysdepref; +}; + /* Descriptor for system dependent string. */ struct sysdep_string { @@ -132,13 +138,7 @@ struct sysdep_string nls_uint32 offset; /* Alternating sequence of static and system dependent segments. The last segment is a static segment, including the trailing NUL. */ - struct segment_pair - { - /* Size of static segment. */ - nls_uint32 segsize; - /* Reference to system dependent string segment, or ~0 at the end. */ - nls_uint32 sysdepref; - } segments[1]; + struct segment_pair segments[1]; }; /* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF, diff --git a/lib/intl/hash-string.h b/lib/intl/hash-string.h index b5a7d4132..911fc14cf 100644 --- a/lib/intl/hash-string.h +++ b/lib/intl/hash-string.h @@ -1,61 +1,34 @@ -/* hash-string.h - Description of GNU message catalog format: string hashing function. */ +/* Description of GNU message catalog format: string hashing function. + Copyright (C) 1995-2016 Free Software Foundation, Inc. -/* Copyright (C) 1995, 1997, 1998, 2000, 2001, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* @@ end of prolog @@ */ -#ifndef PARAMS -# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES -# define PARAMS(Args) Args -# else -# define PARAMS(Args) () -# endif -#endif - /* We assume to have `unsigned long int' value with at least 32 bits. */ #define HASHWORDBITS 32 +#ifndef _LIBC +# ifdef IN_LIBINTL +# define __hash_string libintl_hash_string +# else +# define __hash_string hash_string +# endif +#endif + /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ -static unsigned long int hash_string PARAMS ((const char *__str_param)); - -static inline unsigned long int -hash_string (str_param) - const char *str_param; -{ - unsigned long int hval, g; - const char *str = str_param; - - /* Compute the hash value for the given string. */ - hval = 0; - while (*str != '\0') - { - hval <<= 4; - hval += (unsigned long int) *str++; - g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); - if (g != 0) - { - hval ^= g >> (HASHWORDBITS - 8); - hval ^= g; - } - } - return hval; -} +extern unsigned long int __hash_string (const char *str_param); diff --git a/lib/intl/intl-compat.c b/lib/intl/intl-compat.c index 7f3234991..e2b8d6c37 100644 --- a/lib/intl/intl-compat.c +++ b/lib/intl/intl-compat.c @@ -1,22 +1,19 @@ -/* intl-compat.c - Stub functions to call gettext functions from GNU gettext library. */ +/* intl-compat.c - Stub functions to call gettext functions from GNU gettext + Library. + Copyright (C) 1995, 2000-2003, 2005 Free Software Foundation, Inc. -/* Copyright (C) 1995, 2000-2003, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -50,7 +47,9 @@ /* When building a DLL, we must export some functions. Note that because the functions are only defined for binary backward compatibility, we don't need to use __declspec(dllimport) in any case. */ -#if defined _MSC_VER && BUILDING_DLL +#if HAVE_VISIBILITY && BUILDING_DLL +# define DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_DLL # define DLL_EXPORTED __declspec(dllexport) #else # define DLL_EXPORTED @@ -59,8 +58,7 @@ DLL_EXPORTED char * -gettext (msgid) - const char *msgid; +gettext (const char *msgid) { return libintl_gettext (msgid); } @@ -68,9 +66,7 @@ gettext (msgid) DLL_EXPORTED char * -dgettext (domainname, msgid) - const char *domainname; - const char *msgid; +dgettext (const char *domainname, const char *msgid) { return libintl_dgettext (domainname, msgid); } @@ -78,10 +74,7 @@ dgettext (domainname, msgid) DLL_EXPORTED char * -dcgettext (domainname, msgid, category) - const char *domainname; - const char *msgid; - int category; +dcgettext (const char *domainname, const char *msgid, int category) { return libintl_dcgettext (domainname, msgid, category); } @@ -89,10 +82,7 @@ dcgettext (domainname, msgid, category) DLL_EXPORTED char * -ngettext (msgid1, msgid2, n) - const char *msgid1; - const char *msgid2; - unsigned long int n; +ngettext (const char *msgid1, const char *msgid2, unsigned long int n) { return libintl_ngettext (msgid1, msgid2, n); } @@ -100,11 +90,8 @@ ngettext (msgid1, msgid2, n) DLL_EXPORTED char * -dngettext (domainname, msgid1, msgid2, n) - const char *domainname; - const char *msgid1; - const char *msgid2; - unsigned long int n; +dngettext (const char *domainname, + const char *msgid1, const char *msgid2, unsigned long int n) { return libintl_dngettext (domainname, msgid1, msgid2, n); } @@ -112,12 +99,9 @@ dngettext (domainname, msgid1, msgid2, n) DLL_EXPORTED char * -dcngettext (domainname, msgid1, msgid2, n, category) - const char *domainname; - const char *msgid1; - const char *msgid2; - unsigned long int n; - int category; +dcngettext (const char *domainname, + const char *msgid1, const char *msgid2, unsigned long int n, + int category) { return libintl_dcngettext (domainname, msgid1, msgid2, n, category); } @@ -125,8 +109,7 @@ dcngettext (domainname, msgid1, msgid2, n, category) DLL_EXPORTED char * -textdomain (domainname) - const char *domainname; +textdomain (const char *domainname) { return libintl_textdomain (domainname); } @@ -134,9 +117,7 @@ textdomain (domainname) DLL_EXPORTED char * -bindtextdomain (domainname, dirname) - const char *domainname; - const char *dirname; +bindtextdomain (const char *domainname, const char *dirname) { return libintl_bindtextdomain (domainname, dirname); } @@ -144,9 +125,7 @@ bindtextdomain (domainname, dirname) DLL_EXPORTED char * -bind_textdomain_codeset (domainname, codeset) - const char *domainname; - const char *codeset; +bind_textdomain_codeset (const char *domainname, const char *codeset) { return libintl_bind_textdomain_codeset (domainname, codeset); } diff --git a/lib/intl/l10nflist.c b/lib/intl/l10nflist.c index 4ce284a2b..d97060628 100644 --- a/lib/intl/l10nflist.c +++ b/lib/intl/l10nflist.c @@ -1,23 +1,18 @@ -/* l10nflist.c - make localization file list. */ - -/* Copyright (C) 1995-1999, 2000, 2001, 2002, 2005-2009 Free Software Foundation, Inc. +/* Copyright (C) 1995-2020 Free Software Foundation, Inc. Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <string.h> to provide a prototype for stpcpy(). This must come before <config.h> because <config.h> may include @@ -32,12 +27,15 @@ #include <string.h> -#if defined _LIBC || defined HAVE_ARGZ_H +#if defined _LIBC # include <argz.h> #endif #include <ctype.h> #include <sys/types.h> #include <stdlib.h> +#if defined _WIN32 && !defined __CYGWIN__ +# include <wchar.h> +#endif #include "loadinfo.h" @@ -61,120 +59,21 @@ # endif #else # ifndef HAVE_STPCPY -static char *stpcpy PARAMS ((char *dest, const char *src)); +static char *stpcpy (char *dest, const char *src); # endif #endif -/* Pathname support. - ISSLASH(C) tests whether C is a directory separator character. - IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, - it may be concatenated to a directory pathname. - */ -#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ - /* Win32, OS/2, DOS */ -# define ISSLASH(C) ((C) == '/' || (C) == '\\') -# define HAS_DEVICE(P) \ - ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ - && (P)[1] == ':') -# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) +#ifdef _LIBC +# define IS_ABSOLUTE_FILE_NAME(P) ((P)[0] == '/') +# define IS_RELATIVE_FILE_NAME(P) (! IS_ABSOLUTE_FILE_NAME (P)) #else - /* Unix */ -# define ISSLASH(C) ((C) == '/') -# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) +# include "filename.h" #endif -/* Define function which are usually not available. */ - -#if !defined _LIBC && !defined HAVE___ARGZ_COUNT -/* Returns the number of strings in ARGZ. */ -static size_t argz_count__ PARAMS ((const char *argz, size_t len)); - -static size_t -argz_count__ (argz, len) - const char *argz; - size_t len; -{ - size_t count = 0; - while (len > 0) - { - size_t part_len = strlen (argz); - argz += part_len + 1; - len -= part_len + 1; - count++; - } - return count; -} -# undef __argz_count -# define __argz_count(argz, len) argz_count__ (argz, len) -#else -# ifdef _LIBC -# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len) -# endif -#endif /* !_LIBC && !HAVE___ARGZ_COUNT */ - -#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY -/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's - except the last into the character SEP. */ -static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep)); - -static void -argz_stringify__ (argz, len, sep) - char *argz; - size_t len; - int sep; -{ - while (len > 0) - { - size_t part_len = strlen (argz); - argz += part_len; - len -= part_len + 1; - if (len > 0) - *argz++ = sep; - } -} -# undef __argz_stringify -# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) -#else -# ifdef _LIBC -# define __argz_stringify(argz, len, sep) \ - INTUSE(__argz_stringify) (argz, len, sep) -# endif -#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */ - -#if !defined _LIBC && !defined HAVE___ARGZ_NEXT -static char *argz_next__ PARAMS ((char *argz, size_t argz_len, - const char *entry)); - -static char * -argz_next__ (argz, argz_len, entry) - char *argz; - size_t argz_len; - const char *entry; -{ - if (entry) - { - if (entry < argz + argz_len) - entry = strchr (entry, '\0') + 1; - - return entry >= argz + argz_len ? NULL : (char *) entry; - } - else - if (argz_len > 0) - return argz; - else - return 0; -} -# undef __argz_next -# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) -#endif /* !_LIBC && !HAVE___ARGZ_NEXT */ - - /* Return number of bits set in X. */ -static int pop PARAMS ((int x)); - +#ifndef ARCH_POP static inline int -pop (x) - int x; +pop (int x) { /* We assume that no more than 16 bits are used. */ x = ((x & ~0x5555) >> 1) + (x & 0x5555); @@ -184,126 +83,156 @@ pop (x) return x; } +#endif struct loaded_l10nfile * -_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, - territory, codeset, normalized_codeset, modifier, special, - sponsor, revision, filename, do_allocate) - struct loaded_l10nfile **l10nfile_list; - const char *dirlist; - size_t dirlist_len; - int mask; - const char *language; - const char *territory; - const char *codeset; - const char *normalized_codeset; - const char *modifier; - const char *special; - const char *sponsor; - const char *revision; - const char *filename; - int do_allocate; +_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, + const char *dirlist, size_t dirlist_len, +#if defined _WIN32 && !defined __CYGWIN__ + const wchar_t *wdirlist, size_t wdirlist_len, +#endif + int mask, const char *language, const char *territory, + const char *codeset, const char *normalized_codeset, + const char *modifier, + const char *filename, int do_allocate) { char *abs_filename; +#if defined _WIN32 && !defined __CYGWIN__ + wchar_t *abs_wfilename; +#endif struct loaded_l10nfile **lastp; struct loaded_l10nfile *retval; - char *cp; size_t dirlist_count; size_t entries; int cnt; /* If LANGUAGE contains an absolute directory specification, we ignore - DIRLIST. */ - if (IS_ABSOLUTE_PATH (language)) - dirlist_len = 0; + DIRLIST and WDIRLIST. */ + if (!IS_RELATIVE_FILE_NAME (language)) + { + dirlist_len = 0; +#if defined _WIN32 && !defined __CYGWIN__ + wdirlist_len = 0; +#endif + } /* Allocate room for the full file name. */ abs_filename = (char *) malloc (dirlist_len + strlen (language) - + ((mask & TERRITORY) != 0 + + ((mask & XPG_TERRITORY) != 0 ? strlen (territory) + 1 : 0) + ((mask & XPG_CODESET) != 0 ? strlen (codeset) + 1 : 0) + ((mask & XPG_NORM_CODESET) != 0 ? strlen (normalized_codeset) + 1 : 0) - + (((mask & XPG_MODIFIER) != 0 - || (mask & CEN_AUDIENCE) != 0) + + ((mask & XPG_MODIFIER) != 0 ? strlen (modifier) + 1 : 0) - + ((mask & CEN_SPECIAL) != 0 - ? strlen (special) + 1 : 0) - + (((mask & CEN_SPONSOR) != 0 - || (mask & CEN_REVISION) != 0) - ? (1 + ((mask & CEN_SPONSOR) != 0 - ? strlen (sponsor) : 0) - + ((mask & CEN_REVISION) != 0 - ? strlen (revision) + 1 : 0)) : 0) + 1 + strlen (filename) + 1); if (abs_filename == NULL) return NULL; /* Construct file name. */ - cp = abs_filename; - if (dirlist_len > 0) - { - memcpy (cp, dirlist, dirlist_len); - __argz_stringify (cp, dirlist_len, PATH_SEPARATOR); - cp += dirlist_len; - cp[-1] = '/'; - } + { + char *cp; - cp = stpcpy (cp, language); + cp = abs_filename; + if (dirlist_len > 0) + { + memcpy (cp, dirlist, dirlist_len); +#ifdef _LIBC + __argz_stringify (cp, dirlist_len, PATH_SEPARATOR); +#endif + cp += dirlist_len; + cp[-1] = '/'; + } - if ((mask & TERRITORY) != 0) - { - *cp++ = '_'; - cp = stpcpy (cp, territory); - } - if ((mask & XPG_CODESET) != 0) - { - *cp++ = '.'; - cp = stpcpy (cp, codeset); - } - if ((mask & XPG_NORM_CODESET) != 0) - { - *cp++ = '.'; - cp = stpcpy (cp, normalized_codeset); - } - if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0) - { - /* This component can be part of both syntaxes but has different - leading characters. For CEN we use `+', else `@'. */ - *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@'; - cp = stpcpy (cp, modifier); - } - if ((mask & CEN_SPECIAL) != 0) - { - *cp++ = '+'; - cp = stpcpy (cp, special); - } - if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0) + cp = stpcpy (cp, language); + + if ((mask & XPG_TERRITORY) != 0) + { + *cp++ = '_'; + cp = stpcpy (cp, territory); + } + if ((mask & XPG_CODESET) != 0) + { + *cp++ = '.'; + cp = stpcpy (cp, codeset); + } + if ((mask & XPG_NORM_CODESET) != 0) + { + *cp++ = '.'; + cp = stpcpy (cp, normalized_codeset); + } + if ((mask & XPG_MODIFIER) != 0) + { + *cp++ = '@'; + cp = stpcpy (cp, modifier); + } + + *cp++ = '/'; + stpcpy (cp, filename); + } + +#if defined _WIN32 && !defined __CYGWIN__ + /* Construct wide-char file name. */ + if (wdirlist_len > 0) { - *cp++ = ','; - if ((mask & CEN_SPONSOR) != 0) - cp = stpcpy (cp, sponsor); - if ((mask & CEN_REVISION) != 0) + /* Since dirlist_len == 0, just concatenate wdirlist and abs_filename. */ + /* An upper bound for wcslen (mbstowcs (abs_filename)). */ + size_t abs_filename_bound = mbstowcs (NULL, abs_filename, 0); + if (abs_filename_bound == (size_t)-1) { - *cp++ = '_'; - cp = stpcpy (cp, revision); + free (abs_filename); + return NULL; } - } - *cp++ = '/'; - stpcpy (cp, filename); + /* Allocate and fill abs_wfilename. */ + abs_wfilename = + (wchar_t *) + malloc ((wdirlist_len + abs_filename_bound + 1) * sizeof (wchar_t)); + if (abs_wfilename == NULL) + { + free (abs_filename); + return NULL; + } + wmemcpy (abs_wfilename, wdirlist, wdirlist_len - 1); + abs_wfilename[wdirlist_len - 1] = L'/'; + if (mbstowcs (abs_wfilename + wdirlist_len, abs_filename, + abs_filename_bound + 1) + > abs_filename_bound) + { + free (abs_filename); + free (abs_wfilename); + return NULL; + } + + free (abs_filename); + abs_filename = NULL; + } + else + abs_wfilename = NULL; +#endif /* Look in list of already loaded domains whether it is already available. */ lastp = l10nfile_list; for (retval = *l10nfile_list; retval != NULL; retval = retval->next) - if (retval->filename != NULL) + if (retval->filename != NULL +#if defined _WIN32 && !defined __CYGWIN__ + || retval->wfilename != NULL +#endif + ) { - int compare = strcmp (retval->filename, abs_filename); + int compare = +#if defined _WIN32 && !defined __CYGWIN__ + abs_wfilename != NULL + ? retval->wfilename != NULL && wcscmp (retval->wfilename, abs_wfilename) + : retval->filename != NULL && strcmp (retval->filename, abs_filename); +#else + strcmp (retval->filename, abs_filename); +#endif if (compare == 0) /* We found it! */ break; @@ -320,10 +249,17 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, if (retval != NULL || do_allocate == 0) { free (abs_filename); +#if defined _WIN32 && !defined __CYGWIN__ + free (abs_wfilename); +#endif return retval; } +#ifdef _LIBC dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1); +#else + dirlist_count = 1; +#endif /* Allocate a new loaded_l10nfile. */ retval = @@ -334,10 +270,16 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, if (retval == NULL) { free (abs_filename); +#if defined _WIN32 && !defined __CYGWIN__ + free (abs_wfilename); +#endif return NULL; } retval->filename = abs_filename; +#if defined _WIN32 && !defined __CYGWIN__ + retval->wfilename = abs_wfilename; +#endif /* We set retval->data to NULL here; it is filled in later. Setting retval->decided to 1 here means that retval does not @@ -366,9 +308,9 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, normalized_codeset. */ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt) if ((cnt & ~mask) == 0 - && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0) - && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0)) + && !((cnt & XPG_CODESET) != 0 && (cnt & XPG_NORM_CODESET) != 0)) { +#ifdef _LIBC if (dirlist_count > 1) { /* Iterate over all elements of the DIRLIST. */ @@ -379,15 +321,19 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, - normalized_codeset, modifier, special, - sponsor, revision, filename, 1); + normalized_codeset, modifier, filename, + 1); } else +#endif retval->successor[entries++] - = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, + = _nl_make_l10nflist (l10nfile_list, + dirlist, dirlist_len, +#if defined _WIN32 && !defined __CYGWIN__ + wdirlist, wdirlist_len, +#endif cnt, language, territory, codeset, - normalized_codeset, modifier, special, - sponsor, revision, filename, 1); + normalized_codeset, modifier, filename, 1); } retval->successor[entries] = NULL; @@ -399,11 +345,9 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, names. The return value is dynamically allocated and has to be freed by the caller. */ const char * -_nl_normalize_codeset (codeset, name_len) - const char *codeset; - size_t name_len; +_nl_normalize_codeset (const char *codeset, size_t name_len) { - int len = 0; + size_t len = 0; int only_digit = 1; char *retval; char *wp; @@ -448,9 +392,7 @@ _nl_normalize_codeset (codeset, name_len) to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * -stpcpy (dest, src) - char *dest; - const char *src; +stpcpy (char *dest, const char *src) { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; diff --git a/lib/intl/loadinfo.h b/lib/intl/loadinfo.h index d06a2773f..c0a31d23b 100644 --- a/lib/intl/loadinfo.h +++ b/lib/intl/loadinfo.h @@ -1,24 +1,19 @@ -/* loadinfo.c */ - -/* Copyright (C) 1996-1999, 2000-2002, 2005-2009 Free Software Foundation, Inc. +/* Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LOADINFO_H #define _LOADINFO_H 1 @@ -35,18 +30,14 @@ in gettextP.h. */ -#ifndef PARAMS -# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES -# define PARAMS(args) args -# else -# define PARAMS(args) () -# endif -#endif - #ifndef internal_function # define internal_function #endif +#ifndef LIBINTL_DLL_EXPORTED +# define LIBINTL_DLL_EXPORTED +#endif + /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT @@ -54,7 +45,7 @@ #endif /* Separator in PATH like lists of pathnames. */ -#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ +#if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define PATH_SEPARATOR ';' #else @@ -63,22 +54,18 @@ #endif /* Encoding of locale name parts. */ -#define CEN_REVISION 1 -#define CEN_SPONSOR 2 -#define CEN_SPECIAL 4 -#define XPG_NORM_CODESET 8 -#define XPG_CODESET 16 -#define TERRITORY 32 -#define CEN_AUDIENCE 64 -#define XPG_MODIFIER 128 - -#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) -#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) +#define XPG_NORM_CODESET 1 +#define XPG_CODESET 2 +#define XPG_TERRITORY 4 +#define XPG_MODIFIER 8 struct loaded_l10nfile { const char *filename; +#if defined _WIN32 && !defined __CYGWIN__ + const wchar_t *wfilename; +#endif int decided; const void *data; @@ -92,17 +79,28 @@ struct loaded_l10nfile names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ -extern const char *_nl_normalize_codeset PARAMS ((const char *codeset, - size_t name_len)); +extern const char *_nl_normalize_codeset (const char *codeset, + size_t name_len); /* Lookup a locale dependent file. *L10NFILE_LIST denotes a pool of lookup results of locale dependent files of the same kind, sorted in decreasing order of ->filename. + DIRLIST and DIRLIST_LEN are an argz list of directories in which to - look, containing at least one directory (i.e. DIRLIST_LEN > 0). - MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER, - SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as - produced by _nl_explode_name(). FILENAME is the filename suffix. + look. + Likewise, on native Windows, WDIRLIST and WDIRLIST_LEN are wide-char + list of directories in which to look. Only one of DIRLIST, WDIRLIST + is non-NULL. + DIRLIST and WDIRLIST contain at least one directory, i.e. + DIRLIST_LEN + WDIRLIST_LEN > 0. + Outside glibc, only one directory is used, i.e. + DIRLIST_LEN == strlen (DIRLIST) + 1, WDIRLIST_LEN == 0, or + DIRLIST_LEN == 0, WDIRLIST_LEN == wcslen (WDIRLIST) + 1. + + MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER + are the pieces of the locale name, as produced by _nl_explode_name(). + FILENAME is the filename suffix. + The return value is the lookup result, either found in *L10NFILE_LIST, or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL. If the return value is non-NULL, it is added to *L10NFILE_LIST, and @@ -110,50 +108,41 @@ extern const char *_nl_normalize_codeset PARAMS ((const char *codeset, furthermore its ->successor[] field contains a list of other lookup results from which this lookup result inherits. */ extern struct loaded_l10nfile * -_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list, - const char *dirlist, size_t dirlist_len, int mask, - const char *language, const char *territory, - const char *codeset, - const char *normalized_codeset, - const char *modifier, const char *special, - const char *sponsor, const char *revision, - const char *filename, int do_allocate)); +_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, + const char *dirlist, size_t dirlist_len, +#if defined _WIN32 && !defined __CYGWIN__ + const wchar_t *wdirlist, size_t wdirlist_len, +#endif + int mask, + const char *language, const char *territory, + const char *codeset, const char *normalized_codeset, + const char *modifier, + const char *filename, int do_allocate); /* Lookup the real locale name for a locale alias NAME, or NULL if NAME is not a locale alias (but possibly a real locale name). The return value is statically allocated and must not be freed. */ -extern const char *_nl_expand_alias PARAMS ((const char *name)); +/* Part of the libintl ABI only for the sake of the gettext.m4 macro. */ +extern LIBINTL_DLL_EXPORTED const char *_nl_expand_alias (const char *name); /* Split a locale name NAME into its pieces: language, modifier, - territory, codeset, special, sponsor, revision. + territory, codeset. NAME gets destructively modified: NUL bytes are inserted here and there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY, - *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a - pointer into the old NAME string, or NULL. *NORMALIZED_CODESET - gets assigned the expanded *CODESET, if it is different from *CODESET; - this one is dynamically allocated and has to be freed by the caller. + *CODESET gets assigned either a pointer into the old NAME string, or + NULL. *NORMALIZED_CODESET gets assigned the expanded *CODESET, if it + is different from *CODESET; this one is dynamically allocated and has + to be freed by the caller. The return value is a bitmask, where each bit corresponds to one filled-in value: - XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER, - TERRITORY for *TERRITORY, + XPG_MODIFIER for *MODIFIER, + XPG_TERRITORY for *TERRITORY, XPG_CODESET for *CODESET, - XPG_NORM_CODESET for *NORMALIZED_CODESET, - CEN_SPECIAL for *SPECIAL, - CEN_SPONSOR for *SPONSOR, - CEN_REVISION for *REVISION. + XPG_NORM_CODESET for *NORMALIZED_CODESET. */ -extern int _nl_explode_name PARAMS ((char *name, const char **language, - const char **modifier, - const char **territory, - const char **codeset, - const char **normalized_codeset, - const char **special, - const char **sponsor, - const char **revision)); - -/* Split a locale name NAME into a leading language part and all the - rest. Return a pointer to the first character after the language, - i.e. to the first byte of the rest. */ -extern char *_nl_find_language PARAMS ((const char *name)); +extern int _nl_explode_name (char *name, const char **language, + const char **modifier, const char **territory, + const char **codeset, + const char **normalized_codeset); #endif /* loadinfo.h */ diff --git a/lib/intl/loadmsgcat.c b/lib/intl/loadmsgcat.c index adbd7b4fe..7fb5a0f37 100644 --- a/lib/intl/loadmsgcat.c +++ b/lib/intl/loadmsgcat.c @@ -1,22 +1,18 @@ -/* loadmsgcat.c - Load needed message catalogs. */ +/* Load needed message catalogs. + Copyright (C) 1995-2020 Free Software Foundation, Inc. -/* Copyright (C) 1995-1999, 2000-2003, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <string.h> to provide a prototype for mempcpy(). This must come before <config.h> because <config.h> may include @@ -29,6 +25,7 @@ # include <config.h> #endif +#include <assert.h> #include <ctype.h> #include <errno.h> #include <fcntl.h> @@ -63,6 +60,8 @@ char *alloca (); #if defined HAVE_UNISTD_H || defined _LIBC # include <unistd.h> +#elif defined _WIN32 && !defined __CYGWIN__ +# include <io.h> #endif #ifdef _LIBC @@ -93,360 +92,284 @@ char *alloca (); #ifdef _LIBC # include "../locale/localeinfo.h" +# include <not-cancel.h> +#endif + +/* Handle multi-threaded applications. */ +#ifdef _LIBC +# include <bits/libc-lock.h> +#else +# include "lock.h" #endif /* Provide fallback values for macros that ought to be defined in <inttypes.h>. Note that our fallback values need not be literal strings, because we don't use them with preprocessor string concatenation. */ -#if !defined PRId8 || PRI_MACROS_BROKEN -# undef PRId8 +#if !defined PRId8 # define PRId8 "d" #endif -#if !defined PRIi8 || PRI_MACROS_BROKEN -# undef PRIi8 +#if !defined PRIi8 # define PRIi8 "i" #endif -#if !defined PRIo8 || PRI_MACROS_BROKEN -# undef PRIo8 +#if !defined PRIo8 # define PRIo8 "o" #endif -#if !defined PRIu8 || PRI_MACROS_BROKEN -# undef PRIu8 +#if !defined PRIu8 # define PRIu8 "u" #endif -#if !defined PRIx8 || PRI_MACROS_BROKEN -# undef PRIx8 +#if !defined PRIx8 # define PRIx8 "x" #endif -#if !defined PRIX8 || PRI_MACROS_BROKEN -# undef PRIX8 +#if !defined PRIX8 # define PRIX8 "X" #endif -#if !defined PRId16 || PRI_MACROS_BROKEN -# undef PRId16 +#if !defined PRId16 # define PRId16 "d" #endif -#if !defined PRIi16 || PRI_MACROS_BROKEN -# undef PRIi16 +#if !defined PRIi16 # define PRIi16 "i" #endif -#if !defined PRIo16 || PRI_MACROS_BROKEN -# undef PRIo16 +#if !defined PRIo16 # define PRIo16 "o" #endif -#if !defined PRIu16 || PRI_MACROS_BROKEN -# undef PRIu16 +#if !defined PRIu16 # define PRIu16 "u" #endif -#if !defined PRIx16 || PRI_MACROS_BROKEN -# undef PRIx16 +#if !defined PRIx16 # define PRIx16 "x" #endif -#if !defined PRIX16 || PRI_MACROS_BROKEN -# undef PRIX16 +#if !defined PRIX16 # define PRIX16 "X" #endif -#if !defined PRId32 || PRI_MACROS_BROKEN -# undef PRId32 +#if !defined PRId32 # define PRId32 "d" #endif -#if !defined PRIi32 || PRI_MACROS_BROKEN -# undef PRIi32 +#if !defined PRIi32 # define PRIi32 "i" #endif -#if !defined PRIo32 || PRI_MACROS_BROKEN -# undef PRIo32 +#if !defined PRIo32 # define PRIo32 "o" #endif -#if !defined PRIu32 || PRI_MACROS_BROKEN -# undef PRIu32 +#if !defined PRIu32 # define PRIu32 "u" #endif -#if !defined PRIx32 || PRI_MACROS_BROKEN -# undef PRIx32 +#if !defined PRIx32 # define PRIx32 "x" #endif -#if !defined PRIX32 || PRI_MACROS_BROKEN -# undef PRIX32 +#if !defined PRIX32 # define PRIX32 "X" #endif -#if !defined PRId64 || PRI_MACROS_BROKEN -# undef PRId64 +#if !defined PRId64 # define PRId64 (sizeof (long) == 8 ? "ld" : "lld") #endif -#if !defined PRIi64 || PRI_MACROS_BROKEN -# undef PRIi64 +#if !defined PRIi64 # define PRIi64 (sizeof (long) == 8 ? "li" : "lli") #endif -#if !defined PRIo64 || PRI_MACROS_BROKEN -# undef PRIo64 +#if !defined PRIo64 # define PRIo64 (sizeof (long) == 8 ? "lo" : "llo") #endif -#if !defined PRIu64 || PRI_MACROS_BROKEN -# undef PRIu64 +#if !defined PRIu64 # define PRIu64 (sizeof (long) == 8 ? "lu" : "llu") #endif -#if !defined PRIx64 || PRI_MACROS_BROKEN -# undef PRIx64 +#if !defined PRIx64 # define PRIx64 (sizeof (long) == 8 ? "lx" : "llx") #endif -#if !defined PRIX64 || PRI_MACROS_BROKEN -# undef PRIX64 +#if !defined PRIX64 # define PRIX64 (sizeof (long) == 8 ? "lX" : "llX") #endif -#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN -# undef PRIdLEAST8 +#if !defined PRIdLEAST8 # define PRIdLEAST8 "d" #endif -#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN -# undef PRIiLEAST8 +#if !defined PRIiLEAST8 # define PRIiLEAST8 "i" #endif -#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN -# undef PRIoLEAST8 +#if !defined PRIoLEAST8 # define PRIoLEAST8 "o" #endif -#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN -# undef PRIuLEAST8 +#if !defined PRIuLEAST8 # define PRIuLEAST8 "u" #endif -#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN -# undef PRIxLEAST8 +#if !defined PRIxLEAST8 # define PRIxLEAST8 "x" #endif -#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN -# undef PRIXLEAST8 +#if !defined PRIXLEAST8 # define PRIXLEAST8 "X" #endif -#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN -# undef PRIdLEAST16 +#if !defined PRIdLEAST16 # define PRIdLEAST16 "d" #endif -#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN -# undef PRIiLEAST16 +#if !defined PRIiLEAST16 # define PRIiLEAST16 "i" #endif -#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN -# undef PRIoLEAST16 +#if !defined PRIoLEAST16 # define PRIoLEAST16 "o" #endif -#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN -# undef PRIuLEAST16 +#if !defined PRIuLEAST16 # define PRIuLEAST16 "u" #endif -#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN -# undef PRIxLEAST16 +#if !defined PRIxLEAST16 # define PRIxLEAST16 "x" #endif -#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN -# undef PRIXLEAST16 +#if !defined PRIXLEAST16 # define PRIXLEAST16 "X" #endif -#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN -# undef PRIdLEAST32 +#if !defined PRIdLEAST32 # define PRIdLEAST32 "d" #endif -#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN -# undef PRIiLEAST32 +#if !defined PRIiLEAST32 # define PRIiLEAST32 "i" #endif -#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN -# undef PRIoLEAST32 +#if !defined PRIoLEAST32 # define PRIoLEAST32 "o" #endif -#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN -# undef PRIuLEAST32 +#if !defined PRIuLEAST32 # define PRIuLEAST32 "u" #endif -#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN -# undef PRIxLEAST32 +#if !defined PRIxLEAST32 # define PRIxLEAST32 "x" #endif -#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN -# undef PRIXLEAST32 +#if !defined PRIXLEAST32 # define PRIXLEAST32 "X" #endif -#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN -# undef PRIdLEAST64 +#if !defined PRIdLEAST64 # define PRIdLEAST64 PRId64 #endif -#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN -# undef PRIiLEAST64 +#if !defined PRIiLEAST64 # define PRIiLEAST64 PRIi64 #endif -#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN -# undef PRIoLEAST64 +#if !defined PRIoLEAST64 # define PRIoLEAST64 PRIo64 #endif -#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN -# undef PRIuLEAST64 +#if !defined PRIuLEAST64 # define PRIuLEAST64 PRIu64 #endif -#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN -# undef PRIxLEAST64 +#if !defined PRIxLEAST64 # define PRIxLEAST64 PRIx64 #endif -#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN -# undef PRIXLEAST64 +#if !defined PRIXLEAST64 # define PRIXLEAST64 PRIX64 #endif -#if !defined PRIdFAST8 || PRI_MACROS_BROKEN -# undef PRIdFAST8 +#if !defined PRIdFAST8 # define PRIdFAST8 "d" #endif -#if !defined PRIiFAST8 || PRI_MACROS_BROKEN -# undef PRIiFAST8 +#if !defined PRIiFAST8 # define PRIiFAST8 "i" #endif -#if !defined PRIoFAST8 || PRI_MACROS_BROKEN -# undef PRIoFAST8 +#if !defined PRIoFAST8 # define PRIoFAST8 "o" #endif -#if !defined PRIuFAST8 || PRI_MACROS_BROKEN -# undef PRIuFAST8 +#if !defined PRIuFAST8 # define PRIuFAST8 "u" #endif -#if !defined PRIxFAST8 || PRI_MACROS_BROKEN -# undef PRIxFAST8 +#if !defined PRIxFAST8 # define PRIxFAST8 "x" #endif -#if !defined PRIXFAST8 || PRI_MACROS_BROKEN -# undef PRIXFAST8 +#if !defined PRIXFAST8 # define PRIXFAST8 "X" #endif -#if !defined PRIdFAST16 || PRI_MACROS_BROKEN -# undef PRIdFAST16 +#if !defined PRIdFAST16 # define PRIdFAST16 "d" #endif -#if !defined PRIiFAST16 || PRI_MACROS_BROKEN -# undef PRIiFAST16 +#if !defined PRIiFAST16 # define PRIiFAST16 "i" #endif -#if !defined PRIoFAST16 || PRI_MACROS_BROKEN -# undef PRIoFAST16 +#if !defined PRIoFAST16 # define PRIoFAST16 "o" #endif -#if !defined PRIuFAST16 || PRI_MACROS_BROKEN -# undef PRIuFAST16 +#if !defined PRIuFAST16 # define PRIuFAST16 "u" #endif -#if !defined PRIxFAST16 || PRI_MACROS_BROKEN -# undef PRIxFAST16 +#if !defined PRIxFAST16 # define PRIxFAST16 "x" #endif -#if !defined PRIXFAST16 || PRI_MACROS_BROKEN -# undef PRIXFAST16 +#if !defined PRIXFAST16 # define PRIXFAST16 "X" #endif -#if !defined PRIdFAST32 || PRI_MACROS_BROKEN -# undef PRIdFAST32 +#if !defined PRIdFAST32 # define PRIdFAST32 "d" #endif -#if !defined PRIiFAST32 || PRI_MACROS_BROKEN -# undef PRIiFAST32 +#if !defined PRIiFAST32 # define PRIiFAST32 "i" #endif -#if !defined PRIoFAST32 || PRI_MACROS_BROKEN -# undef PRIoFAST32 +#if !defined PRIoFAST32 # define PRIoFAST32 "o" #endif -#if !defined PRIuFAST32 || PRI_MACROS_BROKEN -# undef PRIuFAST32 +#if !defined PRIuFAST32 # define PRIuFAST32 "u" #endif -#if !defined PRIxFAST32 || PRI_MACROS_BROKEN -# undef PRIxFAST32 +#if !defined PRIxFAST32 # define PRIxFAST32 "x" #endif -#if !defined PRIXFAST32 || PRI_MACROS_BROKEN -# undef PRIXFAST32 +#if !defined PRIXFAST32 # define PRIXFAST32 "X" #endif -#if !defined PRIdFAST64 || PRI_MACROS_BROKEN -# undef PRIdFAST64 +#if !defined PRIdFAST64 # define PRIdFAST64 PRId64 #endif -#if !defined PRIiFAST64 || PRI_MACROS_BROKEN -# undef PRIiFAST64 +#if !defined PRIiFAST64 # define PRIiFAST64 PRIi64 #endif -#if !defined PRIoFAST64 || PRI_MACROS_BROKEN -# undef PRIoFAST64 +#if !defined PRIoFAST64 # define PRIoFAST64 PRIo64 #endif -#if !defined PRIuFAST64 || PRI_MACROS_BROKEN -# undef PRIuFAST64 +#if !defined PRIuFAST64 # define PRIuFAST64 PRIu64 #endif -#if !defined PRIxFAST64 || PRI_MACROS_BROKEN -# undef PRIxFAST64 +#if !defined PRIxFAST64 # define PRIxFAST64 PRIx64 #endif -#if !defined PRIXFAST64 || PRI_MACROS_BROKEN -# undef PRIXFAST64 +#if !defined PRIXFAST64 # define PRIXFAST64 PRIX64 #endif -#if !defined PRIdMAX || PRI_MACROS_BROKEN -# undef PRIdMAX +#if !defined PRIdMAX # define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld") #endif -#if !defined PRIiMAX || PRI_MACROS_BROKEN -# undef PRIiMAX +#if !defined PRIiMAX # define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli") #endif -#if !defined PRIoMAX || PRI_MACROS_BROKEN -# undef PRIoMAX +#if !defined PRIoMAX # define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo") #endif -#if !defined PRIuMAX || PRI_MACROS_BROKEN -# undef PRIuMAX +#if !defined PRIuMAX # define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu") #endif -#if !defined PRIxMAX || PRI_MACROS_BROKEN -# undef PRIxMAX +#if !defined PRIxMAX # define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx") #endif -#if !defined PRIXMAX || PRI_MACROS_BROKEN -# undef PRIXMAX +#if !defined PRIXMAX # define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX") #endif -#if !defined PRIdPTR || PRI_MACROS_BROKEN -# undef PRIdPTR +#if !defined PRIdPTR # define PRIdPTR \ (sizeof (void *) == sizeof (long) ? "ld" : \ sizeof (void *) == sizeof (int) ? "d" : \ "lld") #endif -#if !defined PRIiPTR || PRI_MACROS_BROKEN -# undef PRIiPTR +#if !defined PRIiPTR # define PRIiPTR \ (sizeof (void *) == sizeof (long) ? "li" : \ sizeof (void *) == sizeof (int) ? "i" : \ "lli") #endif -#if !defined PRIoPTR || PRI_MACROS_BROKEN -# undef PRIoPTR +#if !defined PRIoPTR # define PRIoPTR \ (sizeof (void *) == sizeof (long) ? "lo" : \ sizeof (void *) == sizeof (int) ? "o" : \ "llo") #endif -#if !defined PRIuPTR || PRI_MACROS_BROKEN -# undef PRIuPTR +#if !defined PRIuPTR # define PRIuPTR \ (sizeof (void *) == sizeof (long) ? "lu" : \ sizeof (void *) == sizeof (int) ? "u" : \ "llu") #endif -#if !defined PRIxPTR || PRI_MACROS_BROKEN -# undef PRIxPTR +#if !defined PRIxPTR # define PRIxPTR \ (sizeof (void *) == sizeof (long) ? "lx" : \ sizeof (void *) == sizeof (int) ? "x" : \ "llx") #endif -#if !defined PRIXPTR || PRI_MACROS_BROKEN -# undef PRIXPTR +#if !defined PRIXPTR # define PRIXPTR \ (sizeof (void *) == sizeof (long) ? "lX" : \ sizeof (void *) == sizeof (int) ? "X" : \ @@ -459,11 +382,17 @@ char *alloca (); /* Rename the non ISO C functions. This is required by the standard because some ISO C functions will require linking with this object file and the name space must not be polluted. */ -# define open __open -# define close __close -# define read __read -# define mmap __mmap -# define munmap __munmap +# define open(name, flags) open_not_cancel_2 (name, flags) +# define close(fd) close_not_cancel_no_status (fd) +# define read(fd, buf, n) read_not_cancel (fd, buf, n) +# define mmap(addr, len, prot, flags, fd, offset) \ + __mmap (addr, len, prot, flags, fd, offset) +# define munmap(addr, len) __munmap (addr, len) +#elif defined _WIN32 && !defined __CYGWIN__ +/* On native Windows, don't require linking with '-loldnames'. */ +# define open _open +# define read _read +# define close _close #endif /* For those losing systems which don't have `alloca' we have to add @@ -493,21 +422,23 @@ char *alloca (); #endif -/* Prototypes for local functions. Needed to ensure compiler checking of - function argument counts despite of K&R C function definition syntax. */ -static const char *get_sysdep_segment_value PARAMS ((const char *name)); - - /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ +#if defined __APPLE__ && defined __MACH__ +/* On macOS 10.13 with Apple clang-902.0.39.1 and cctools-895, when linking + statically, we need an explicit zero-initialization, in order to avoid a + link-time error that __nl_msg_cat_cntr is an undefined symbol. It could + be a compiler bug or a ranlib bug. */ +int _nl_msg_cat_cntr = 0; +#else int _nl_msg_cat_cntr; +#endif /* Expand a system dependent string segment. Return NULL if unsupported. */ static const char * -get_sysdep_segment_value (name) - const char *name; +get_sysdep_segment_value (const char *name) { /* Test for an ISO C 99 section 7.8.1 format string directive. Syntax: @@ -756,159 +687,37 @@ get_sysdep_segment_value (name) } } } - /* Other system dependent strings are not valid. */ - return NULL; -} - -/* Initialize the codeset dependent parts of an opened message catalog. - Return the header entry. */ -const char * -internal_function -_nl_init_domain_conv (domain_file, domain, domainbinding) - struct loaded_l10nfile *domain_file; - struct loaded_domain *domain; - struct binding *domainbinding; -{ - /* Find out about the character set the file is encoded with. - This can be found (in textual form) in the entry "". If this - entry does not exist or if this does not contain the `charset=' - information, we will assume the charset matches the one the - current locale and we don't have to perform any conversion. */ - char *nullentry; - size_t nullentrylen; - - /* Preinitialize fields, to avoid recursion during _nl_find_msg. */ - domain->codeset_cntr = - (domainbinding != NULL ? domainbinding->codeset_cntr : 0); -#ifdef _LIBC - domain->conv = (__gconv_t) -1; + /* Test for a glibc specific printf() format directive flag. */ + if (name[0] == 'I' && name[1] == '\0') + { +#if defined _LIBC \ + || ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) \ + && !defined __UCLIBC__) + /* The 'I' flag, in numeric format directives, replaces ASCII digits + with the 'outdigits' defined in the LC_CTYPE locale facet. This is + used for Farsi (Persian), some Indic languages, and maybe Arabic. */ + return "I"; #else -# if HAVE_ICONV - domain->conv = (iconv_t) -1; -# endif + return ""; #endif - domain->conv_tab = NULL; - - /* Get the header entry. */ - nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); - - if (nullentry != NULL) - { -#if defined _LIBC || HAVE_ICONV - const char *charsetstr; - - charsetstr = strstr (nullentry, "charset="); - if (charsetstr != NULL) - { - size_t len; - char *charset; - const char *outcharset; - - charsetstr += strlen ("charset="); - len = strcspn (charsetstr, " \t\n"); - - charset = (char *) alloca (len + 1); -# if defined _LIBC || HAVE_MEMPCPY - *((char *) mempcpy (charset, charsetstr, len)) = '\0'; -# else - memcpy (charset, charsetstr, len); - charset[len] = '\0'; -# endif - - /* The output charset should normally be determined by the - locale. But sometimes the locale is not used or not correctly - set up, so we provide a possibility for the user to override - this. Moreover, the value specified through - bind_textdomain_codeset overrides both. */ - if (domainbinding != NULL && domainbinding->codeset != NULL) - outcharset = domainbinding->codeset; - else - { - outcharset = getenv ("OUTPUT_CHARSET"); - if (outcharset == NULL || outcharset[0] == '\0') - { -# ifdef _LIBC - outcharset = _NL_CURRENT (LC_CTYPE, CODESET); -# else -# if HAVE_ICONV - extern const char *locale_charset PARAMS ((void)); - outcharset = locale_charset (); -# endif -# endif - } - } - -# ifdef _LIBC - /* We always want to use transliteration. */ - outcharset = norm_add_slashes (outcharset, "TRANSLIT"); - charset = norm_add_slashes (charset, NULL); - if (__gconv_open (outcharset, charset, &domain->conv, - GCONV_AVOID_NOCONV) - != __GCONV_OK) - domain->conv = (__gconv_t) -1; -# else -# if HAVE_ICONV - /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, - we want to use transliteration. */ -# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \ - || _LIBICONV_VERSION >= 0x0105 - if (strchr (outcharset, '/') == NULL) - { - char *tmp; - - len = strlen (outcharset); - tmp = (char *) alloca (len + 10 + 1); - memcpy (tmp, outcharset, len); - memcpy (tmp + len, "//TRANSLIT", 10 + 1); - outcharset = tmp; - - domain->conv = iconv_open (outcharset, charset); - - freea (outcharset); - } - else -# endif - domain->conv = iconv_open (outcharset, charset); -# endif -# endif - - freea (charset); - } -#endif /* _LIBC || HAVE_ICONV */ } - - return nullentry; + /* Other system dependent strings are not valid. */ + return NULL; } -/* Frees the codeset dependent parts of an opened message catalog. */ -void -internal_function -_nl_free_domain_conv (domain) - struct loaded_domain *domain; -{ - if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) - free (domain->conv_tab); - #ifdef _LIBC - if (domain->conv != (__gconv_t) -1) - __gconv_close (domain->conv); -#else -# if HAVE_ICONV - if (domain->conv != (iconv_t) -1) - iconv_close (domain->conv); -# endif +/* Lock that protects the various 'struct loaded_l10nfile' objects. */ +__libc_lock_define_initialized_recursive (static, lock); #endif -} /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function -_nl_load_domain (domain_file, domainbinding) - struct loaded_l10nfile *domain_file; - struct binding *domainbinding; +_nl_load_domain (struct loaded_l10nfile *domain_file, + struct binding *domainbinding) { - int fd; + int fd = -1; size_t size; #ifdef _LIBC struct stat64 st; @@ -920,8 +729,26 @@ _nl_load_domain (domain_file, domainbinding) struct loaded_domain *domain; int revision; const char *nullentry; + size_t nullentrylen; - domain_file->decided = 1; +#ifdef _LIBC + __libc_lock_lock_recursive (lock); +#endif + if (domain_file->decided != 0) + { + /* There are two possibilities: + + + this is the same thread calling again during this initialization + via _nl_find_msg. We have initialized everything this call needs. + + + this is another thread which tried to initialize this object. + Not necessary anymore since if the lock is available this + is finished. + */ + goto done; + } + + domain_file->decided = -1; domain_file->data = NULL; /* Note that it would be useless to store domainbinding in domain_file @@ -932,13 +759,24 @@ _nl_load_domain (domain_file, domainbinding) might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN syntax. */ - if (domain_file->filename == NULL) - return; - - /* Try to open the addressed file. */ - fd = open (domain_file->filename, O_RDONLY | O_BINARY); - if (fd == -1) - return; + if (domain_file->filename != NULL) + { + /* Try to open the addressed file. */ + fd = open (domain_file->filename, O_RDONLY | O_BINARY); + if (fd == -1) + goto out; + } +#if defined _WIN32 && !defined __CYGWIN__ + else if (domain_file->wfilename != NULL) + { + /* Try to open the addressed file. */ + fd = _wopen (domain_file->wfilename, O_RDONLY | O_BINARY); + if (fd == -1) + goto out; + } +#endif + else + goto out; /* We must know about the size of the file. */ if ( @@ -949,11 +787,8 @@ _nl_load_domain (domain_file, domainbinding) #endif || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) || __builtin_expect (size < sizeof (struct mo_file_header), 0)) - { - /* Something went wrong. */ - close (fd); - return; - } + /* Something went wrong. */ + goto out; #ifdef HAVE_MMAP /* Now we are ready to load the file. If mmap() is available we try @@ -961,12 +796,15 @@ _nl_load_domain (domain_file, domainbinding) data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); - if (__builtin_expect (data != (struct mo_file_header *) -1, 1)) + if (__builtin_expect (data != MAP_FAILED, 1)) { /* mmap() call was successful. */ close (fd); + fd = -1; use_mmap = 1; } + + assert (MAP_FAILED == (void *) -1); #endif /* If the data is not yet available (i.e. mmap'ed) we try to load @@ -978,11 +816,7 @@ _nl_load_domain (domain_file, domainbinding) data = (struct mo_file_header *) malloc (size); if (data == NULL) - { - if (use_mmap == 0) - close (fd); - return; - } + goto out; to_read = size; read_ptr = (char *) data; @@ -995,8 +829,8 @@ _nl_load_domain (domain_file, domainbinding) if (nb == -1 && errno == EINTR) continue; #endif - close (fd); - return; + free (data); + goto out; } read_ptr += nb; to_read -= nb; @@ -1004,6 +838,7 @@ _nl_load_domain (domain_file, domainbinding) while (to_read > 0); close (fd); + fd = -1; } /* Using the magic number we can test whether it really is a message @@ -1018,7 +853,7 @@ _nl_load_domain (domain_file, domainbinding) else #endif free (data); - return; + goto out; } domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); @@ -1030,7 +865,7 @@ _nl_load_domain (domain_file, domainbinding) else #endif free (data); - return; + goto out; } domain_file->data = domain; @@ -1042,10 +877,11 @@ _nl_load_domain (domain_file, domainbinding) /* Fill in the information about the available tables. */ revision = W (domain->must_swap, data->revision); - /* We support only the major revision 0. */ + /* We support only the major revisions 0 and 1. */ switch (revision >> 16) { case 0: + case 1: domain->nstrings = W (domain->must_swap, data->nstrings); domain->orig_tab = (const struct string_desc *) ((char *) data + W (domain->must_swap, data->orig_tab_offset)); @@ -1085,12 +921,13 @@ _nl_load_domain (domain_file, domainbinding) const char **sysdep_segment_values; const nls_uint32 *orig_sysdep_tab; const nls_uint32 *trans_sysdep_tab; + nls_uint32 n_inmem_sysdep_strings; size_t memneed; char *mem; struct sysdep_string_desc *inmem_orig_sysdep_tab; struct sysdep_string_desc *inmem_trans_sysdep_tab; nls_uint32 *inmem_hash_tab; - unsigned int i; + unsigned int i, j; /* Get the values of the system dependent segments. */ n_sysdep_segments = @@ -1099,6 +936,7 @@ _nl_load_domain (domain_file, domainbinding) ((char *) data + W (domain->must_swap, data->sysdep_segments_offset)); sysdep_segment_values = + (const char **) alloca (n_sysdep_segments * sizeof (const char *)); for (i = 0; i < n_sysdep_segments; i++) { @@ -1125,153 +963,267 @@ _nl_load_domain (domain_file, domainbinding) + W (domain->must_swap, data->trans_sysdep_tab_offset)); /* Compute the amount of additional memory needed for the - system dependent strings and the augmented hash table. */ - memneed = 2 * n_sysdep_strings - * sizeof (struct sysdep_string_desc) - + domain->hash_size * sizeof (nls_uint32); - for (i = 0; i < 2 * n_sysdep_strings; i++) + system dependent strings and the augmented hash table. + At the same time, also drop string pairs which refer to + an undefined system dependent segment. */ + n_inmem_sysdep_strings = 0; + memneed = domain->hash_size * sizeof (nls_uint32); + for (i = 0; i < n_sysdep_strings; i++) { - const struct sysdep_string *sysdep_string = - (const struct sysdep_string *) - ((char *) data - + W (domain->must_swap, - i < n_sysdep_strings - ? orig_sysdep_tab[i] - : trans_sysdep_tab[i - n_sysdep_strings])); - size_t need = 0; - const struct segment_pair *p = sysdep_string->segments; - - if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END) - for (p = sysdep_string->segments;; p++) - { - nls_uint32 sysdepref; + int valid = 1; + size_t needs[2]; - need += W (domain->must_swap, p->segsize); + for (j = 0; j < 2; j++) + { + const struct sysdep_string *sysdep_string = + (const struct sysdep_string *) + ((char *) data + + W (domain->must_swap, + j == 0 + ? orig_sysdep_tab[i] + : trans_sysdep_tab[i])); + size_t need = 0; + const char *static_segments = + (char *) data + + W (domain->must_swap, sysdep_string->offset); + const struct segment_pair *p = sysdep_string->segments; + + if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END) + for (;; p++) + { + nls_uint32 segsize; + nls_uint32 sysdepref; + + segsize = W (domain->must_swap, p->segsize); + need += segsize; + + sysdepref = W (domain->must_swap, p->sysdepref); + if (sysdepref == SEGMENTS_END) + break; + + static_segments += segsize; - sysdepref = W (domain->must_swap, p->sysdepref); - if (sysdepref == SEGMENTS_END) - break; + if (sysdepref >= n_sysdep_segments) + { + /* Invalid. */ + freea (sysdep_segment_values); + goto invalid; + } - if (sysdepref >= n_sysdep_segments) + if (sysdep_segment_values[sysdepref] == NULL) + { + /* This particular string pair is invalid. */ + valid = 0; + } + + need += strlen (sysdep_segment_values[sysdepref]); + } + + /* The last static segment must end in a NUL. */ + { + nls_uint32 segsize = + W (domain->must_swap, p->segsize); + + if (!(segsize > 0 + && static_segments[segsize - 1] == '\0')) { /* Invalid. */ freea (sysdep_segment_values); goto invalid; } - - need += strlen (sysdep_segment_values[sysdepref]); } - memneed += need; - } - - /* Allocate additional memory. */ - mem = (char *) malloc (memneed); - if (mem == NULL) - goto invalid; - - domain->malloced = mem; - inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem; - mem += n_sysdep_strings * sizeof (struct sysdep_string_desc); - inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem; - mem += n_sysdep_strings * sizeof (struct sysdep_string_desc); - inmem_hash_tab = (nls_uint32 *) mem; - mem += domain->hash_size * sizeof (nls_uint32); - - /* Compute the system dependent strings. */ - for (i = 0; i < 2 * n_sysdep_strings; i++) - { - const struct sysdep_string *sysdep_string = - (const struct sysdep_string *) - ((char *) data - + W (domain->must_swap, - i < n_sysdep_strings - ? orig_sysdep_tab[i] - : trans_sysdep_tab[i - n_sysdep_strings])); - const char *static_segments = - (char *) data - + W (domain->must_swap, sysdep_string->offset); - const struct segment_pair *p = sysdep_string->segments; - - /* Concatenate the segments, and fill - inmem_orig_sysdep_tab[i] (for i < n_sysdep_strings) and - inmem_trans_sysdep_tab[i-n_sysdep_strings] (for - i >= n_sysdep_strings). */ + needs[j] = need; + if (!valid) + break; + } - if (W (domain->must_swap, p->sysdepref) == SEGMENTS_END) + if (valid) { - /* Only one static segment. */ - inmem_orig_sysdep_tab[i].length = - W (domain->must_swap, p->segsize); - inmem_orig_sysdep_tab[i].pointer = static_segments; + n_inmem_sysdep_strings++; + memneed += needs[0] + needs[1]; } - else + } + memneed += 2 * n_inmem_sysdep_strings + * sizeof (struct sysdep_string_desc); + + if (n_inmem_sysdep_strings > 0) + { + unsigned int k; + + /* Allocate additional memory. */ + mem = (char *) malloc (memneed); + if (mem == NULL) + goto invalid; + + domain->malloced = mem; + inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem; + mem += n_inmem_sysdep_strings + * sizeof (struct sysdep_string_desc); + inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem; + mem += n_inmem_sysdep_strings + * sizeof (struct sysdep_string_desc); + inmem_hash_tab = (nls_uint32 *) mem; + mem += domain->hash_size * sizeof (nls_uint32); + + /* Compute the system dependent strings. */ + k = 0; + for (i = 0; i < n_sysdep_strings; i++) { - inmem_orig_sysdep_tab[i].pointer = mem; + int valid = 1; - for (p = sysdep_string->segments;; p++) + for (j = 0; j < 2; j++) { - nls_uint32 segsize = - W (domain->must_swap, p->segsize); - nls_uint32 sysdepref = - W (domain->must_swap, p->sysdepref); - size_t n; + const struct sysdep_string *sysdep_string = + (const struct sysdep_string *) + ((char *) data + + W (domain->must_swap, + j == 0 + ? orig_sysdep_tab[i] + : trans_sysdep_tab[i])); + const struct segment_pair *p = + sysdep_string->segments; + + if (W (domain->must_swap, p->sysdepref) + != SEGMENTS_END) + for (;; p++) + { + nls_uint32 sysdepref; + + sysdepref = + W (domain->must_swap, p->sysdepref); + if (sysdepref == SEGMENTS_END) + break; + + if (sysdep_segment_values[sysdepref] == NULL) + { + /* This particular string pair is + invalid. */ + valid = 0; + break; + } + } + + if (!valid) + break; + } - if (segsize > 0) + if (valid) + { + for (j = 0; j < 2; j++) { - memcpy (mem, static_segments, segsize); - mem += segsize; - static_segments += segsize; + const struct sysdep_string *sysdep_string = + (const struct sysdep_string *) + ((char *) data + + W (domain->must_swap, + j == 0 + ? orig_sysdep_tab[i] + : trans_sysdep_tab[i])); + const char *static_segments = + (char *) data + + W (domain->must_swap, sysdep_string->offset); + const struct segment_pair *p = + sysdep_string->segments; + + /* Concatenate the segments, and fill + inmem_orig_sysdep_tab[k] (for j == 0) and + inmem_trans_sysdep_tab[k] (for j == 1). */ + + struct sysdep_string_desc *inmem_tab_entry = + (j == 0 + ? inmem_orig_sysdep_tab + : inmem_trans_sysdep_tab) + + k; + + if (W (domain->must_swap, p->sysdepref) + == SEGMENTS_END) + { + /* Only one static segment. */ + inmem_tab_entry->length = + W (domain->must_swap, p->segsize); + inmem_tab_entry->pointer = static_segments; + } + else + { + inmem_tab_entry->pointer = mem; + + for (;; p++) + { + nls_uint32 segsize = + W (domain->must_swap, p->segsize); + nls_uint32 sysdepref = + W (domain->must_swap, p->sysdepref); + size_t n; + + if (segsize > 0) + { + memcpy (mem, static_segments, segsize); + mem += segsize; + static_segments += segsize; + } + + if (sysdepref == SEGMENTS_END) + break; + + n = strlen (sysdep_segment_values[sysdepref]); + memcpy (mem, sysdep_segment_values[sysdepref], n); + mem += n; + } + + inmem_tab_entry->length = + mem - inmem_tab_entry->pointer; + } } - if (sysdepref == SEGMENTS_END) - break; - - n = strlen (sysdep_segment_values[sysdepref]); - memcpy (mem, sysdep_segment_values[sysdepref], n); - mem += n; + k++; } - - inmem_orig_sysdep_tab[i].length = - mem - inmem_orig_sysdep_tab[i].pointer; } - } - - /* Compute the augmented hash table. */ - for (i = 0; i < domain->hash_size; i++) - inmem_hash_tab[i] = - W (domain->must_swap_hash_tab, domain->hash_tab[i]); - for (i = 0; i < n_sysdep_strings; i++) - { - const char *msgid = inmem_orig_sysdep_tab[i].pointer; - nls_uint32 hash_val = hash_string (msgid); - nls_uint32 idx = hash_val % domain->hash_size; - nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); - - for (;;) + if (k != n_inmem_sysdep_strings) + abort (); + + /* Compute the augmented hash table. */ + for (i = 0; i < domain->hash_size; i++) + inmem_hash_tab[i] = + W (domain->must_swap_hash_tab, domain->hash_tab[i]); + for (i = 0; i < n_inmem_sysdep_strings; i++) { - if (inmem_hash_tab[idx] == 0) + const char *msgid = inmem_orig_sysdep_tab[i].pointer; + nls_uint32 hash_val = __hash_string (msgid); + nls_uint32 idx = hash_val % domain->hash_size; + nls_uint32 incr = + 1 + (hash_val % (domain->hash_size - 2)); + + for (;;) { - /* Hash table entry is empty. Use it. */ - inmem_hash_tab[idx] = 1 + domain->nstrings + i; - break; - } + if (inmem_hash_tab[idx] == 0) + { + /* Hash table entry is empty. Use it. */ + inmem_hash_tab[idx] = 1 + domain->nstrings + i; + break; + } - if (idx >= domain->hash_size - incr) - idx -= domain->hash_size - incr; - else - idx += incr; + if (idx >= domain->hash_size - incr) + idx -= domain->hash_size - incr; + else + idx += incr; + } } - } - freea (sysdep_segment_values); + domain->n_sysdep_strings = n_inmem_sysdep_strings; + domain->orig_sysdep_tab = inmem_orig_sysdep_tab; + domain->trans_sysdep_tab = inmem_trans_sysdep_tab; - domain->n_sysdep_strings = n_sysdep_strings; - domain->orig_sysdep_tab = inmem_orig_sysdep_tab; - domain->trans_sysdep_tab = inmem_trans_sysdep_tab; + domain->hash_tab = inmem_hash_tab; + domain->must_swap_hash_tab = 0; + } + else + { + domain->n_sysdep_strings = 0; + domain->orig_sysdep_tab = NULL; + domain->trans_sysdep_tab = NULL; + } - domain->hash_tab = inmem_hash_tab; - domain->must_swap_hash_tab = 0; + freea (sysdep_segment_values); } else { @@ -1286,9 +1238,8 @@ _nl_load_domain (domain_file, domainbinding) default: /* This is an invalid revision. */ invalid: - /* This is an invalid .mo file. */ - if (domain->malloced) - free (domain->malloced); + /* This is an invalid .mo file or we ran out of resources. */ + free (domain->malloced); #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); @@ -1297,32 +1248,75 @@ _nl_load_domain (domain_file, domainbinding) free (data); free (domain); domain_file->data = NULL; - return; + goto out; } - /* Now initialize the character set converter from the character set - the file is encoded with (found in the header entry) to the domain's - specified character set or the locale's character set. */ - nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding); + /* No caches of converted translations so far. */ + domain->conversions = NULL; + domain->nconversions = 0; +#ifdef _LIBC + __libc_rwlock_init (domain->conversions_lock); +#else + gl_rwlock_init (domain->conversions_lock); +#endif - /* Also look for a plural specification. */ + /* Get the header entry and look for a plural specification. */ +#ifdef IN_LIBGLOCALE + nullentry = + _nl_find_msg (domain_file, domainbinding, NULL, "", &nullentrylen); +#else + nullentry = _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen); +#endif + if (__builtin_expect (nullentry == (char *) -1, 0)) + { +#ifdef _LIBC + __libc_rwlock_fini (domain->conversions_lock); +#else + gl_rwlock_destroy (domain->conversions_lock); +#endif + goto invalid; + } EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals); + + out: + if (fd != -1) + close (fd); + + domain_file->decided = 1; + + done: +#ifdef _LIBC + __libc_lock_unlock_recursive (lock); +#else + ; +#endif } #ifdef _LIBC void -internal_function -_nl_unload_domain (domain) - struct loaded_domain *domain; +internal_function __libc_freeres_fn_section +_nl_unload_domain (struct loaded_domain *domain) { + size_t i; + if (domain->plural != &__gettext_germanic_plural) - __gettext_free_exp (domain->plural); + __gettext_free_exp ((struct expression *) domain->plural); + + for (i = 0; i < domain->nconversions; i++) + { + struct converted_domain *convd = &domain->conversions[i]; - _nl_free_domain_conv (domain); + free ((char *) convd->encoding); + if (convd->conv_tab != NULL && convd->conv_tab != (char **) -1) + free (convd->conv_tab); + if (convd->conv != (__gconv_t) -1) + __gconv_close (convd->conv); + } + free (domain->conversions); + __libc_rwlock_fini (domain->conversions_lock); - if (domain->malloced) - free (domain->malloced); + free (domain->malloced); # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) diff --git a/lib/intl/localcharset.c b/lib/intl/localcharset.c index 6983d0bf0..ec7542769 100644 --- a/lib/intl/localcharset.c +++ b/lib/intl/localcharset.c @@ -1,267 +1,826 @@ -/* localcharset.c - Determine a canonical name for the current locale's character encoding. */ +/* Determine a canonical name for the current locale's character encoding. -/* Copyright (C) 2000-2003, 2005-2009 Free Software Foundation, Inc. + Copyright (C) 2000-2006, 2008-2019 Free Software Foundation, Inc. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif +#include <config.h> /* Specification. */ #include "localcharset.h" -#if HAVE_STDDEF_H -# include <stddef.h> -#endif - +#include <stddef.h> #include <stdio.h> -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> +#include <string.h> +#include <stdlib.h> + +#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET +# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ #endif -#if defined _WIN32 || defined __WIN32__ -# undef WIN32 /* avoid warning on mingw32 */ -# define WIN32 +#if defined _WIN32 && !defined __CYGWIN__ +# define WINDOWS_NATIVE +# include <locale.h> #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ -# define OS2 +# ifndef OS2 +# define OS2 +# endif #endif -#if !defined WIN32 +#if !defined WINDOWS_NATIVE # if HAVE_LANGINFO_CODESET # include <langinfo.h> # else -# if HAVE_SETLOCALE +# if 0 /* see comment regarding use of setlocale(), below */ # include <locale.h> # endif # endif -#elif defined WIN32 +# ifdef __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# endif +#elif defined WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> + /* For the use of setlocale() below, the Gnulib override in setlocale.c is + not needed; see the platform lists in setlocale_null.m4. */ +# undef setlocale #endif #if defined OS2 # define INCL_DOS # include <os2.h> #endif -#if ENABLE_RELOCATABLE -# include "relocatable.h" -#else -# define relocate(pathname) (pathname) +/* For MB_CUR_MAX_L */ +#if defined DARWIN7 +# include <xlocale.h> #endif -#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ - /* Win32, OS/2, DOS */ -# define ISSLASH(C) ((C) == '/' || (C) == '\\') -#endif -#ifndef DIRECTORY_SEPARATOR -# define DIRECTORY_SEPARATOR '/' -#endif +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 -#ifndef ISSLASH -# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) -#endif +/* On these platforms, we use a mapping from non-canonical encoding name + to GNU canonical encoding name. */ -#ifdef HAVE_GETC_UNLOCKED -# undef getc -# define getc getc_unlocked -#endif +/* With glibc-2.1 or newer, we don't need any canonicalization, + because glibc has iconv and both glibc and libiconv support all + GNU canonical names directly. */ +# if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__) -/* The following static variable is declared 'volatile' to avoid a - possible multithread problem in the function get_charset_aliases. If we - are running in a threaded environment, and if two threads initialize - 'charset_aliases' simultaneously, both will produce the same value, - and everything will be ok if the two assignments to 'charset_aliases' - are atomic. But I don't know what will happen if the two assignments mix. */ -#if __STDC__ != 1 -# define volatile /* empty */ -#endif -/* Pointer to the contents of the charset.alias file, if it has already been - read, else NULL. Its format is: - ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ -static const char * volatile charset_aliases; - -/* Return a pointer to the contents of the charset.alias file. */ -static const char * -get_charset_aliases () +struct table_entry { - const char *cp; + const char alias[11+1]; + const char canonical[11+1]; +}; - cp = charset_aliases; - if (cp == NULL) - { -#if !(defined VMS || defined WIN32) - FILE *fp; - const char *dir = relocate (LIBDIR); - const char *base = "charset.alias"; - char *file_name; - - /* Concatenate dir and base into freshly allocated file_name. */ - { - size_t dir_len = strlen (dir); - size_t base_len = strlen (base); - int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); - file_name = (char *) malloc (dir_len + add_slash + base_len + 1); - if (file_name != NULL) - { - memcpy (file_name, dir, dir_len); - if (add_slash) - file_name[dir_len] = DIRECTORY_SEPARATOR; - memcpy (file_name + dir_len + add_slash, base, base_len + 1); - } - } +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry alias_table[] = + { +# if defined __FreeBSD__ /* FreeBSD */ + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + { "Big5", "BIG5" }, + { "C", "ASCII" }, + /*{ "CP1131", "CP1131" },*/ + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + /*{ "GBK", "GBK" },*/ + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + { "SJIS", "SHIFT_JIS" }, + { "US-ASCII", "ASCII" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined __NetBSD__ /* NetBSD */ + { "646", "ASCII" }, + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + /*{ "PT154", "PT154" },*/ + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __OpenBSD__ /* OpenBSD */ + { "646", "ASCII" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "US-ASCII", "ASCII" } +# define alias_table_defined +# endif +# if defined __APPLE__ && defined __MACH__ /* Mac OS X */ + /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is + useless: + - It returns the empty string when LANG is set to a locale of the + form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 + LC_CTYPE file. + - The environment variables LANG, LC_CTYPE, LC_ALL are not set by + the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. + - The documentation says: + "... all code that calls BSD system routines should ensure + that the const *char parameters of these routines are in UTF-8 + encoding. All BSD system functions expect their string + parameters to be in UTF-8 encoding and nothing else." + It also says + "An additional caveat is that string parameters for files, + paths, and other file-system entities must be in canonical + UTF-8. In a canonical UTF-8 Unicode string, all decomposable + characters are decomposed ..." + but this is not true: You can pass non-decomposed UTF-8 strings + to file system functions, and it is the OS which will convert + them to decomposed UTF-8 before accessing the file system. + - The Apple Terminal application displays UTF-8 by default. + - However, other applications are free to use different encodings: + - xterm uses ISO-8859-1 by default. + - TextEdit uses MacRoman by default. + We prefer UTF-8 over decomposed UTF-8-MAC because one should + minimize the use of decomposed Unicode. Unfortunately, through the + Darwin file system, decomposed UTF-8 strings are leaked into user + space nevertheless. + Then there are also the locales with encodings other than US-ASCII + and UTF-8. These locales can be occasionally useful to users (e.g. + when grepping through ISO-8859-1 encoded text files), when all their + file names are in US-ASCII. + */ + { "ARMSCII-8", "ARMSCII-8" }, + { "Big5", "BIG5" }, + { "Big5HKSCS", "BIG5-HKSCS" }, + { "CP1131", "CP1131" }, + { "CP1251", "CP1251" }, + { "CP866", "CP866" }, + { "CP949", "CP949" }, + { "GB18030", "GB18030" }, + { "GB2312", "GB2312" }, + { "GBK", "GBK" }, + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KOI8-R", "KOI8-R" }, + { "KOI8-U", "KOI8-U" }, + { "PT154", "PT154" }, + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined _AIX /* AIX */ + /*{ "GBK", "GBK" },*/ + { "IBM-1046", "CP1046" }, + { "IBM-1124", "CP1124" }, + { "IBM-1129", "CP1129" }, + { "IBM-1252", "CP1252" }, + { "IBM-850", "CP850" }, + { "IBM-856", "CP856" }, + { "IBM-921", "ISO-8859-13" }, + { "IBM-922", "CP922" }, + { "IBM-932", "CP932" }, + { "IBM-943", "CP943" }, + { "IBM-eucCN", "GB2312" }, + { "IBM-eucJP", "EUC-JP" }, + { "IBM-eucKR", "EUC-KR" }, + { "IBM-eucTW", "EUC-TW" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "TIS-620", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" } +# define alias_table_defined +# endif +# if defined __hpux /* HP-UX */ + { "SJIS", "SHIFT_JIS" }, + { "arabic8", "HP-ARABIC8" }, + { "big5", "BIG5" }, + { "cp1251", "CP1251" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "gb18030", "GB18030" }, + { "greek8", "HP-GREEK8" }, + { "hebrew8", "HP-HEBREW8" }, + { "hkbig5", "BIG5-HKSCS" }, + { "hp15CN", "GB2312" }, + { "iso88591", "ISO-8859-1" }, + { "iso885913", "ISO-8859-13" }, + { "iso885915", "ISO-8859-15" }, + { "iso88592", "ISO-8859-2" }, + { "iso88594", "ISO-8859-4" }, + { "iso88595", "ISO-8859-5" }, + { "iso88596", "ISO-8859-6" }, + { "iso88597", "ISO-8859-7" }, + { "iso88598", "ISO-8859-8" }, + { "iso88599", "ISO-8859-9" }, + { "kana8", "HP-KANA8" }, + { "koi8r", "KOI8-R" }, + { "roman8", "HP-ROMAN8" }, + { "tis620", "TIS-620" }, + { "turkish8", "HP-TURKISH8" }, + { "utf8", "UTF-8" } +# define alias_table_defined +# endif +# if defined __sgi /* IRIX */ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __osf__ /* OSF/1 */ + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KSC5601", "CP949" }, + { "SJIS", "SHIFT_JIS" }, + { "TACTIS", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" }, + { "cp850", "CP850" }, + { "dechanyu", "DEC-HANYU" }, + { "dechanzi", "GB2312" }, + { "deckanji", "DEC-KANJI" }, + { "deckorean", "EUC-KR" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "sdeckanji", "EUC-JP" } +# define alias_table_defined +# endif +# if defined __sun /* Solaris */ + { "5601", "EUC-KR" }, + { "646", "ASCII" }, + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + { "GB18030", "GB18030" }, + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-11", "TIS-620" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-3", "ISO-8859-3" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "PCK", "SHIFT_JIS" }, + { "TIS620.2533", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "ansi-1251", "CP1251" }, + { "cns11643", "EUC-TW" }, + { "eucJP", "EUC-JP" }, + { "gb2312", "GB2312" }, + { "koi8-r", "KOI8-R" } +# define alias_table_defined +# endif +# if defined __minix /* Minix */ + { "646", "ASCII" } +# define alias_table_defined +# endif +# if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */ + { "CP1361", "JOHAB" }, + { "CP20127", "ASCII" }, + { "CP20866", "KOI8-R" }, + { "CP20936", "GB2312" }, + { "CP21866", "KOI8-RU" }, + { "CP28591", "ISO-8859-1" }, + { "CP28592", "ISO-8859-2" }, + { "CP28593", "ISO-8859-3" }, + { "CP28594", "ISO-8859-4" }, + { "CP28595", "ISO-8859-5" }, + { "CP28596", "ISO-8859-6" }, + { "CP28597", "ISO-8859-7" }, + { "CP28598", "ISO-8859-8" }, + { "CP28599", "ISO-8859-9" }, + { "CP28605", "ISO-8859-15" }, + { "CP38598", "ISO-8859-8" }, + { "CP51932", "EUC-JP" }, + { "CP51936", "GB2312" }, + { "CP51949", "EUC-KR" }, + { "CP51950", "EUC-TW" }, + { "CP54936", "GB18030" }, + { "CP65001", "UTF-8" }, + { "CP936", "GBK" } +# define alias_table_defined +# endif +# if defined OS2 /* OS/2 */ + /* The list of encodings is taken from "List of OS/2 Codepages" + by Alex Taylor: + <http://altsan.org/os2/toolkits/uls/index.html#codepages>. + See also "__convcp() of kLIBC": + <https://github.com/bitwiseworks/libc/blob/master/src/emx/src/lib/locale/__convcp.c>. */ + { "CP1004", "CP1252" }, + /*{ "CP1041", "CP943" },*/ + /*{ "CP1088", "CP949" },*/ + { "CP1089", "ISO-8859-6" }, + /*{ "CP1114", "CP950" },*/ + /*{ "CP1115", "GB2312" },*/ + { "CP1208", "UTF-8" }, + /*{ "CP1380", "GB2312" },*/ + { "CP1381", "GB2312" }, + { "CP1383", "GB2312" }, + { "CP1386", "GBK" }, + /*{ "CP301", "CP943" },*/ + { "CP3372", "EUC-JP" }, + { "CP4946", "CP850" }, + /*{ "CP5048", "JIS_X0208-1990" },*/ + /*{ "CP5049", "JIS_X0212-1990" },*/ + /*{ "CP5067", "KS_C_5601-1987" },*/ + { "CP813", "ISO-8859-7" }, + { "CP819", "ISO-8859-1" }, + { "CP878", "KOI8-R" }, + /*{ "CP897", "CP943" },*/ + { "CP912", "ISO-8859-2" }, + { "CP913", "ISO-8859-3" }, + { "CP914", "ISO-8859-4" }, + { "CP915", "ISO-8859-5" }, + { "CP916", "ISO-8859-8" }, + { "CP920", "ISO-8859-9" }, + { "CP921", "ISO-8859-13" }, + { "CP923", "ISO-8859-15" }, + /*{ "CP941", "CP943" },*/ + /*{ "CP947", "CP950" },*/ + /*{ "CP951", "CP949" },*/ + /*{ "CP952", "JIS_X0208-1990" },*/ + /*{ "CP953", "JIS_X0212-1990" },*/ + { "CP954", "EUC-JP" }, + { "CP964", "EUC-TW" }, + { "CP970", "EUC-KR" }, + /*{ "CP971", "KS_C_5601-1987" },*/ + { "IBM-1004", "CP1252" }, + /*{ "IBM-1006", "?" },*/ + /*{ "IBM-1008", "?" },*/ + /*{ "IBM-1041", "CP943" },*/ + /*{ "IBM-1051", "?" },*/ + /*{ "IBM-1088", "CP949" },*/ + { "IBM-1089", "ISO-8859-6" }, + /*{ "IBM-1098", "?" },*/ + /*{ "IBM-1114", "CP950" },*/ + /*{ "IBM-1115", "GB2312" },*/ + /*{ "IBM-1116", "?" },*/ + /*{ "IBM-1117", "?" },*/ + /*{ "IBM-1118", "?" },*/ + /*{ "IBM-1119", "?" },*/ + { "IBM-1124", "CP1124" }, + { "IBM-1125", "CP1125" }, + { "IBM-1131", "CP1131" }, + { "IBM-1208", "UTF-8" }, + { "IBM-1250", "CP1250" }, + { "IBM-1251", "CP1251" }, + { "IBM-1252", "CP1252" }, + { "IBM-1253", "CP1253" }, + { "IBM-1254", "CP1254" }, + { "IBM-1255", "CP1255" }, + { "IBM-1256", "CP1256" }, + { "IBM-1257", "CP1257" }, + /*{ "IBM-1275", "?" },*/ + /*{ "IBM-1276", "?" },*/ + /*{ "IBM-1277", "?" },*/ + /*{ "IBM-1280", "?" },*/ + /*{ "IBM-1281", "?" },*/ + /*{ "IBM-1282", "?" },*/ + /*{ "IBM-1283", "?" },*/ + /*{ "IBM-1380", "GB2312" },*/ + { "IBM-1381", "GB2312" }, + { "IBM-1383", "GB2312" }, + { "IBM-1386", "GBK" }, + /*{ "IBM-301", "CP943" },*/ + { "IBM-3372", "EUC-JP" }, + { "IBM-367", "ASCII" }, + { "IBM-437", "CP437" }, + { "IBM-4946", "CP850" }, + /*{ "IBM-5048", "JIS_X0208-1990" },*/ + /*{ "IBM-5049", "JIS_X0212-1990" },*/ + /*{ "IBM-5067", "KS_C_5601-1987" },*/ + { "IBM-813", "ISO-8859-7" }, + { "IBM-819", "ISO-8859-1" }, + { "IBM-850", "CP850" }, + /*{ "IBM-851", "?" },*/ + { "IBM-852", "CP852" }, + { "IBM-855", "CP855" }, + { "IBM-856", "CP856" }, + { "IBM-857", "CP857" }, + /*{ "IBM-859", "?" },*/ + { "IBM-860", "CP860" }, + { "IBM-861", "CP861" }, + { "IBM-862", "CP862" }, + { "IBM-863", "CP863" }, + { "IBM-864", "CP864" }, + { "IBM-865", "CP865" }, + { "IBM-866", "CP866" }, + /*{ "IBM-868", "?" },*/ + { "IBM-869", "CP869" }, + { "IBM-874", "CP874" }, + { "IBM-878", "KOI8-R" }, + /*{ "IBM-895", "?" },*/ + /*{ "IBM-897", "CP943" },*/ + /*{ "IBM-907", "?" },*/ + /*{ "IBM-909", "?" },*/ + { "IBM-912", "ISO-8859-2" }, + { "IBM-913", "ISO-8859-3" }, + { "IBM-914", "ISO-8859-4" }, + { "IBM-915", "ISO-8859-5" }, + { "IBM-916", "ISO-8859-8" }, + { "IBM-920", "ISO-8859-9" }, + { "IBM-921", "ISO-8859-13" }, + { "IBM-922", "CP922" }, + { "IBM-923", "ISO-8859-15" }, + { "IBM-932", "CP932" }, + /*{ "IBM-941", "CP943" },*/ + /*{ "IBM-942", "?" },*/ + { "IBM-943", "CP943" }, + /*{ "IBM-947", "CP950" },*/ + { "IBM-949", "CP949" }, + { "IBM-950", "CP950" }, + /*{ "IBM-951", "CP949" },*/ + /*{ "IBM-952", "JIS_X0208-1990" },*/ + /*{ "IBM-953", "JIS_X0212-1990" },*/ + { "IBM-954", "EUC-JP" }, + /*{ "IBM-955", "?" },*/ + { "IBM-964", "EUC-TW" }, + { "IBM-970", "EUC-KR" }, + /*{ "IBM-971", "KS_C_5601-1987" },*/ + { "IBM-eucCN", "GB2312" }, + { "IBM-eucJP", "EUC-JP" }, + { "IBM-eucKR", "EUC-KR" }, + { "IBM-eucTW", "EUC-TW" }, + { "IBM33722", "EUC-JP" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-3", "ISO-8859-3" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + /*{ "JISX0201-1976", "JISX0201-1976" },*/ + /*{ "JISX0208-1978", "?" },*/ + /*{ "JISX0208-1983", "JIS_X0208-1983" },*/ + /*{ "JISX0208-1990", "JIS_X0208-1990" },*/ + /*{ "JISX0212-1990", "JIS_X0212-1990" },*/ + /*{ "KSC5601-1987", "KS_C_5601-1987" },*/ + { "SJIS-1", "CP943" }, + { "SJIS-2", "CP943" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW-1993", "EUC-TW" } +# define alias_table_defined +# endif +# if defined VMS /* OpenVMS */ + /* The list of encodings is taken from the OpenVMS 7.3-1 documentation + "Compaq C Run-Time Library Reference Manual for OpenVMS systems" + section 10.7 "Handling Different Character Sets". */ + { "DECHANYU", "DEC-HANYU" }, + { "DECHANZI", "GB2312" }, + { "DECKANJI", "DEC-KANJI" }, + { "DECKOREAN", "EUC-KR" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "SDECKANJI", "EUC-JP" }, + { "SJIS", "SHIFT_JIS" }, + { "eucJP", "EUC-JP" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# ifndef alias_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; - if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) - /* Out of memory or file not found, treat it as empty. */ - cp = ""; - else - { - /* Parse the file's contents. */ - int c; - char buf1[50+1]; - char buf2[50+1]; - char *res_ptr = NULL; - size_t res_size = 0; - size_t l1, l2; - - for (;;) - { - c = getc (fp); - if (c == EOF) - break; - if (c == '\n' || c == ' ' || c == '\t') - continue; - if (c == '#') - { - /* Skip comment, to end of line. */ - do - c = getc (fp); - while (!(c == EOF || c == '\n')); - if (c == EOF) - break; - continue; - } - ungetc (c, fp); - if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) - break; - l1 = strlen (buf1); - l2 = strlen (buf2); - if (res_size == 0) - { - res_size = l1 + 1 + l2 + 1; - res_ptr = (char *) malloc (res_size + 1); - } - else - { - res_size += l1 + 1 + l2 + 1; - res_ptr = (char *) realloc (res_ptr, res_size + 1); - } - if (res_ptr == NULL) - { - /* Out of memory. */ - res_size = 0; - break; - } - strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); - strcpy (res_ptr + res_size - (l2 + 1), buf2); - } - fclose (fp); - if (res_size == 0) - cp = ""; - else - { - *(res_ptr + res_size) = '\0'; - cp = res_ptr; - } - } - - if (file_name != NULL) - free (file_name); +# endif #else -# if defined VMS - /* To avoid the troubles of an extra file charset.alias_vms in the - sources of many GNU packages, simply inline the aliases here. */ - /* The list of encodings is taken from the OpenVMS 7.3-1 documentation - "Compaq C Run-Time Library Reference Manual for OpenVMS systems" - section 10.7 "Handling Different Character Sets". */ - cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" - "ISO8859-2" "\0" "ISO-8859-2" "\0" - "ISO8859-5" "\0" "ISO-8859-5" "\0" - "ISO8859-7" "\0" "ISO-8859-7" "\0" - "ISO8859-8" "\0" "ISO-8859-8" "\0" - "ISO8859-9" "\0" "ISO-8859-9" "\0" - /* Japanese */ - "eucJP" "\0" "EUC-JP" "\0" - "SJIS" "\0" "SHIFT_JIS" "\0" - "DECKANJI" "\0" "DEC-KANJI" "\0" - "SDECKANJI" "\0" "EUC-JP" "\0" - /* Chinese */ - "eucTW" "\0" "EUC-TW" "\0" - "DECHANYU" "\0" "DEC-HANYU" "\0" - "DECHANZI" "\0" "GB2312" "\0" - /* Korean */ - "DECKOREAN" "\0" "EUC-KR" "\0"; -# endif +/* On these platforms, we use a mapping from locale name to GNU canonical + encoding name. */ + +struct table_entry +{ + const char locale[17+1]; + const char canonical[11+1]; +}; -# if defined WIN32 - /* To avoid the troubles of installing a separate file in the same - directory as the DLL and of retrieving the DLL's directory at - runtime, simply inline the aliases here. */ - - cp = "CP936" "\0" "GBK" "\0" - "CP1361" "\0" "JOHAB" "\0" - "CP20127" "\0" "ASCII" "\0" - "CP20866" "\0" "KOI8-R" "\0" - "CP21866" "\0" "KOI8-RU" "\0" - "CP28591" "\0" "ISO-8859-1" "\0" - "CP28592" "\0" "ISO-8859-2" "\0" - "CP28593" "\0" "ISO-8859-3" "\0" - "CP28594" "\0" "ISO-8859-4" "\0" - "CP28595" "\0" "ISO-8859-5" "\0" - "CP28596" "\0" "ISO-8859-6" "\0" - "CP28597" "\0" "ISO-8859-7" "\0" - "CP28598" "\0" "ISO-8859-8" "\0" - "CP28599" "\0" "ISO-8859-9" "\0" - "CP28605" "\0" "ISO-8859-15" "\0"; +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry locale_table[] = + { +# if defined __FreeBSD__ /* FreeBSD 4.2 */ + { "cs_CZ.ISO_8859-2", "ISO-8859-2" }, + { "da_DK.DIS_8859-15", "ISO-8859-15" }, + { "da_DK.ISO_8859-1", "ISO-8859-1" }, + { "de_AT.DIS_8859-15", "ISO-8859-15" }, + { "de_AT.ISO_8859-1", "ISO-8859-1" }, + { "de_CH.DIS_8859-15", "ISO-8859-15" }, + { "de_CH.ISO_8859-1", "ISO-8859-1" }, + { "de_DE.DIS_8859-15", "ISO-8859-15" }, + { "de_DE.ISO_8859-1", "ISO-8859-1" }, + { "en_AU.DIS_8859-15", "ISO-8859-15" }, + { "en_AU.ISO_8859-1", "ISO-8859-1" }, + { "en_CA.DIS_8859-15", "ISO-8859-15" }, + { "en_CA.ISO_8859-1", "ISO-8859-1" }, + { "en_GB.DIS_8859-15", "ISO-8859-15" }, + { "en_GB.ISO_8859-1", "ISO-8859-1" }, + { "en_US.DIS_8859-15", "ISO-8859-15" }, + { "en_US.ISO_8859-1", "ISO-8859-1" }, + { "es_ES.DIS_8859-15", "ISO-8859-15" }, + { "es_ES.ISO_8859-1", "ISO-8859-1" }, + { "fi_FI.DIS_8859-15", "ISO-8859-15" }, + { "fi_FI.ISO_8859-1", "ISO-8859-1" }, + { "fr_BE.DIS_8859-15", "ISO-8859-15" }, + { "fr_BE.ISO_8859-1", "ISO-8859-1" }, + { "fr_CA.DIS_8859-15", "ISO-8859-15" }, + { "fr_CA.ISO_8859-1", "ISO-8859-1" }, + { "fr_CH.DIS_8859-15", "ISO-8859-15" }, + { "fr_CH.ISO_8859-1", "ISO-8859-1" }, + { "fr_FR.DIS_8859-15", "ISO-8859-15" }, + { "fr_FR.ISO_8859-1", "ISO-8859-1" }, + { "hr_HR.ISO_8859-2", "ISO-8859-2" }, + { "hu_HU.ISO_8859-2", "ISO-8859-2" }, + { "is_IS.DIS_8859-15", "ISO-8859-15" }, + { "is_IS.ISO_8859-1", "ISO-8859-1" }, + { "it_CH.DIS_8859-15", "ISO-8859-15" }, + { "it_CH.ISO_8859-1", "ISO-8859-1" }, + { "it_IT.DIS_8859-15", "ISO-8859-15" }, + { "it_IT.ISO_8859-1", "ISO-8859-1" }, + { "ja_JP.EUC", "EUC-JP" }, + { "ja_JP.SJIS", "SHIFT_JIS" }, + { "ja_JP.Shift_JIS", "SHIFT_JIS" }, + { "ko_KR.EUC", "EUC-KR" }, + { "la_LN.ASCII", "ASCII" }, + { "la_LN.DIS_8859-15", "ISO-8859-15" }, + { "la_LN.ISO_8859-1", "ISO-8859-1" }, + { "la_LN.ISO_8859-2", "ISO-8859-2" }, + { "la_LN.ISO_8859-4", "ISO-8859-4" }, + { "lt_LN.ASCII", "ASCII" }, + { "lt_LN.DIS_8859-15", "ISO-8859-15" }, + { "lt_LN.ISO_8859-1", "ISO-8859-1" }, + { "lt_LN.ISO_8859-2", "ISO-8859-2" }, + { "lt_LT.ISO_8859-4", "ISO-8859-4" }, + { "nl_BE.DIS_8859-15", "ISO-8859-15" }, + { "nl_BE.ISO_8859-1", "ISO-8859-1" }, + { "nl_NL.DIS_8859-15", "ISO-8859-15" }, + { "nl_NL.ISO_8859-1", "ISO-8859-1" }, + { "no_NO.DIS_8859-15", "ISO-8859-15" }, + { "no_NO.ISO_8859-1", "ISO-8859-1" }, + { "pl_PL.ISO_8859-2", "ISO-8859-2" }, + { "pt_PT.DIS_8859-15", "ISO-8859-15" }, + { "pt_PT.ISO_8859-1", "ISO-8859-1" }, + { "ru_RU.CP866", "CP866" }, + { "ru_RU.ISO_8859-5", "ISO-8859-5" }, + { "ru_RU.KOI8-R", "KOI8-R" }, + { "ru_SU.CP866", "CP866" }, + { "ru_SU.ISO_8859-5", "ISO-8859-5" }, + { "ru_SU.KOI8-R", "KOI8-R" }, + { "sl_SI.ISO_8859-2", "ISO-8859-2" }, + { "sv_SE.DIS_8859-15", "ISO-8859-15" }, + { "sv_SE.ISO_8859-1", "ISO-8859-1" }, + { "uk_UA.KOI8-U", "KOI8-U" }, + { "zh_CN.EUC", "GB2312" }, + { "zh_TW.BIG5", "BIG5" }, + { "zh_TW.Big5", "BIG5" } +# define locale_table_defined # endif -#endif +# if defined __DJGPP__ /* DOS / DJGPP 2.03 */ + /* The encodings given here may not all be correct. + If you find that the encoding given for your language and + country is not the one your DOS machine actually uses, just + correct it in this file, and send a mail to + Juan Manuel Guerrero <juan.guerrero@gmx.de> + and <bug-gnulib@gnu.org>. */ + { "C", "ASCII" }, + { "ar", "CP864" }, + { "ar_AE", "CP864" }, + { "ar_DZ", "CP864" }, + { "ar_EG", "CP864" }, + { "ar_IQ", "CP864" }, + { "ar_IR", "CP864" }, + { "ar_JO", "CP864" }, + { "ar_KW", "CP864" }, + { "ar_MA", "CP864" }, + { "ar_OM", "CP864" }, + { "ar_QA", "CP864" }, + { "ar_SA", "CP864" }, + { "ar_SY", "CP864" }, + { "be", "CP866" }, + { "be_BE", "CP866" }, + { "bg", "CP866" }, /* not CP855 ?? */ + { "bg_BG", "CP866" }, /* not CP855 ?? */ + { "ca", "CP850" }, + { "ca_ES", "CP850" }, + { "cs", "CP852" }, + { "cs_CZ", "CP852" }, + { "da", "CP865" }, /* not CP850 ?? */ + { "da_DK", "CP865" }, /* not CP850 ?? */ + { "de", "CP850" }, + { "de_AT", "CP850" }, + { "de_CH", "CP850" }, + { "de_DE", "CP850" }, + { "el", "CP869" }, + { "el_GR", "CP869" }, + { "en", "CP850" }, + { "en_AU", "CP850" }, /* not CP437 ?? */ + { "en_CA", "CP850" }, + { "en_GB", "CP850" }, + { "en_NZ", "CP437" }, + { "en_US", "CP437" }, + { "en_ZA", "CP850" }, /* not CP437 ?? */ + { "eo", "CP850" }, + { "eo_EO", "CP850" }, + { "es", "CP850" }, + { "es_AR", "CP850" }, + { "es_BO", "CP850" }, + { "es_CL", "CP850" }, + { "es_CO", "CP850" }, + { "es_CR", "CP850" }, + { "es_CU", "CP850" }, + { "es_DO", "CP850" }, + { "es_EC", "CP850" }, + { "es_ES", "CP850" }, + { "es_GT", "CP850" }, + { "es_HN", "CP850" }, + { "es_MX", "CP850" }, + { "es_NI", "CP850" }, + { "es_PA", "CP850" }, + { "es_PE", "CP850" }, + { "es_PY", "CP850" }, + { "es_SV", "CP850" }, + { "es_UY", "CP850" }, + { "es_VE", "CP850" }, + { "et", "CP850" }, + { "et_EE", "CP850" }, + { "eu", "CP850" }, + { "eu_ES", "CP850" }, + { "fi", "CP850" }, + { "fi_FI", "CP850" }, + { "fr", "CP850" }, + { "fr_BE", "CP850" }, + { "fr_CA", "CP850" }, + { "fr_CH", "CP850" }, + { "fr_FR", "CP850" }, + { "ga", "CP850" }, + { "ga_IE", "CP850" }, + { "gd", "CP850" }, + { "gd_GB", "CP850" }, + { "gl", "CP850" }, + { "gl_ES", "CP850" }, + { "he", "CP862" }, + { "he_IL", "CP862" }, + { "hr", "CP852" }, + { "hr_HR", "CP852" }, + { "hu", "CP852" }, + { "hu_HU", "CP852" }, + { "id", "CP850" }, /* not CP437 ?? */ + { "id_ID", "CP850" }, /* not CP437 ?? */ + { "is", "CP861" }, /* not CP850 ?? */ + { "is_IS", "CP861" }, /* not CP850 ?? */ + { "it", "CP850" }, + { "it_CH", "CP850" }, + { "it_IT", "CP850" }, + { "ja", "CP932" }, + { "ja_JP", "CP932" }, + { "kr", "CP949" }, /* not CP934 ?? */ + { "kr_KR", "CP949" }, /* not CP934 ?? */ + { "lt", "CP775" }, + { "lt_LT", "CP775" }, + { "lv", "CP775" }, + { "lv_LV", "CP775" }, + { "mk", "CP866" }, /* not CP855 ?? */ + { "mk_MK", "CP866" }, /* not CP855 ?? */ + { "mt", "CP850" }, + { "mt_MT", "CP850" }, + { "nb", "CP865" }, /* not CP850 ?? */ + { "nb_NO", "CP865" }, /* not CP850 ?? */ + { "nl", "CP850" }, + { "nl_BE", "CP850" }, + { "nl_NL", "CP850" }, + { "nn", "CP865" }, /* not CP850 ?? */ + { "nn_NO", "CP865" }, /* not CP850 ?? */ + { "no", "CP865" }, /* not CP850 ?? */ + { "no_NO", "CP865" }, /* not CP850 ?? */ + { "pl", "CP852" }, + { "pl_PL", "CP852" }, + { "pt", "CP850" }, + { "pt_BR", "CP850" }, + { "pt_PT", "CP850" }, + { "ro", "CP852" }, + { "ro_RO", "CP852" }, + { "ru", "CP866" }, + { "ru_RU", "CP866" }, + { "sk", "CP852" }, + { "sk_SK", "CP852" }, + { "sl", "CP852" }, + { "sl_SI", "CP852" }, + { "sq", "CP852" }, + { "sq_AL", "CP852" }, + { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sv", "CP850" }, + { "sv_SE", "CP850" }, + { "th", "CP874" }, + { "th_TH", "CP874" }, + { "tr", "CP857" }, + { "tr_TR", "CP857" }, + { "uk", "CP1125" }, + { "uk_UA", "CP1125" }, + { "zh_CN", "GBK" }, + { "zh_TW", "CP950" } /* not CP938 ?? */ +# define locale_table_defined +# endif +# ifndef locale_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; - charset_aliases = cp; - } +#endif - return cp; -} /* Determine the current locale's character encoding, and canonicalize it - into one of the canonical names listed in config.charset. - The result must not be freed; it is statically allocated. + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ @@ -269,63 +828,135 @@ get_charset_aliases () STATIC #endif const char * -locale_charset () +locale_charset (void) { const char *codeset; - const char *aliases; -#if !(defined WIN32 || defined OS2) + /* This function must be multithread-safe. To achieve this without using + thread-local storage, we use a simple strcpy or memcpy to fill this static + buffer. Filling it through, for example, strcpy + strcat would not be + guaranteed to leave the buffer's contents intact if another thread is + currently accessing it. If necessary, the contents is first assembled in + a stack-allocated buffer. */ + +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); -# else - - /* On old systems which lack it, use setlocale or getenv. */ - const char *locale = NULL; - - /* But most old systems don't have a complete set of locales. Some - (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't - use setlocale here; it would return "C" when it doesn't support the - locale name the user has set. */ -# if HAVE_SETLOCALE && 0 - locale = setlocale (LC_CTYPE, NULL); -# endif - if (locale == NULL || locale[0] == '\0') +# ifdef __CYGWIN__ + /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always + returns "US-ASCII". Return the suffix of the locale name from the + environment variables (if present) or the codepage as a number. */ + if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) { + const char *locale; + static char resultbuf[2 + 10 + 1]; + locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') - { - locale = getenv ("LC_CTYPE"); - if (locale == NULL || locale[0] == '\0') - locale = getenv ("LANG"); - } + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return + it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (resultbuf)) + { + /* This way of filling resultbuf is multithread-safe. */ + memcpy (resultbuf, dot, modifier - dot); + resultbuf [modifier - dot] = '\0'; + return resultbuf; + } + } + } + + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). This encoding is used by Cygwin, unless the user + has set the environment variable CYGWIN=codepage:oem (which very few + people do). + Output directed to console windows needs to be converted (to + GetOEMCP() if the console is using a raster font, or to + GetConsoleOutputCP() if it is using a TrueType font). Cygwin does + this conversion transparently (see winsup/cygwin/fhandler_console.cc), + converting to GetConsoleOutputCP(). This leads to correct results, + except when SetConsoleOutputCP has been called and a raster font is + in use. */ + { + char buf[2 + 10 + 1]; + + sprintf (buf, "CP%u", GetACP ()); + strcpy (resultbuf, buf); + codeset = resultbuf; + } } +# endif - /* On some old systems, one used to set locale = "iso8859_1". On others, - you set it to "language_COUNTRY.charset". In any case, we resolve it - through the charset.alias file. */ - codeset = locale; + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; -# endif +# elif defined WINDOWS_NATIVE -#elif defined WIN32 + char buf[2 + 10 + 1]; + static char resultbuf[2 + 10 + 1]; - static char buf[2 + 10 + 1]; + /* The Windows API has a function returning the locale's codepage as + a number, but the value doesn't change according to what the + 'setlocale' call specified. So we use it as a last resort, in + case the string returned by 'setlocale' doesn't specify the + codepage. */ + char *current_locale = setlocale (LC_CTYPE, NULL); + char *pdot = strrchr (current_locale, '.'); - /* Woe32 has a function returning the locale's codepage as a number. */ - sprintf (buf, "CP%u", GetACP ()); - codeset = buf; + if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) + sprintf (buf, "CP%s", pdot + 1); + else + { + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). + When the output goes to a console window, it needs to be provided in + GetOEMCP() encoding if the console is using a raster font, or in + GetConsoleOutputCP() encoding if it is using a TrueType font. + But in GUI programs and for output sent to files and pipes, GetACP() + encoding is the best bet. */ + sprintf (buf, "CP%u", GetACP ()); + } + /* For a locale name such as "French_France.65001", in Windows 10, + setlocale now returns "French_France.utf8" instead. */ + if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) + codeset = "UTF-8"; + else + { + strcpy (resultbuf, buf); + codeset = resultbuf; + } -#elif defined OS2 +# elif defined OS2 const char *locale; - static char buf[2 + 10 + 1]; + static char resultbuf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; + codeset = NULL; + /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); @@ -333,7 +964,7 @@ locale_charset () { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') - locale = getenv ("LANG"); + locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { @@ -341,59 +972,188 @@ locale_charset () const char *dot = strchr (locale, '.'); if (dot != NULL) - { - const char *modifier; - - dot++; - /* Look for the possible @... trailer and remove it, if any. */ - modifier = strchr (dot, '@'); - if (modifier == NULL) - return dot; - if (modifier - dot < sizeof (buf)) - { - memcpy (buf, dot, modifier - dot); - buf [modifier - dot] = '\0'; - return buf; - } - } - - /* Resolve through the charset.alias file. */ - codeset = locale; + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (resultbuf)) + { + /* This way of filling resultbuf is multithread-safe. */ + memcpy (resultbuf, dot, modifier - dot); + resultbuf [modifier - dot] = '\0'; + return resultbuf; + } + } + + /* For the POSIX locale, don't use the system's codepage. */ + if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) + codeset = ""; } - else + + if (codeset == NULL) { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) - codeset = ""; + codeset = ""; else - { - sprintf (buf, "CP%u", cp[0]); - codeset = buf; - } + { + char buf[2 + 10 + 1]; + + sprintf (buf, "CP%u", cp[0]); + strcpy (resultbuf, buf); + codeset = resultbuf; + } } -#endif +# else - if (codeset == NULL) - /* The canonical name cannot be determined. */ - codeset = ""; +# error "Add code for other platforms here." + +# endif + + /* Resolve alias. */ + { +# ifdef alias_table_defined + /* On some platforms, UTF-8 locales are the most frequently used ones. + Speed up the common case and slow down the less common cases by + testing for this case first. */ +# if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__ + if (strcmp (codeset, "UTF-8") == 0) + goto done_table_lookup; + else +# endif + { + const struct table_entry * const table = alias_table; + size_t const table_size = + sizeof (alias_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) + { + /* Invariant: + for i < lo, strcmp (table[i].alias, codeset) < 0, + for i >= hi, strcmp (table[i].alias, codeset) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].alias, codeset); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].alias, codeset) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + } + if (0) + done_table_lookup: ; + else +# endif + { + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + if (codeset[0] == '\0') + codeset = "ASCII"; +# endif + } + } - /* Resolve alias. */ - for (aliases = get_charset_aliases (); - *aliases != '\0'; - aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) - if (strcmp (codeset, aliases) == 0 - || (aliases[0] == '*' && aliases[1] == '\0')) +#else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like DJGPP) have only the C locale. Therefore we don't use setlocale + here; it would return "C" when it doesn't support the locale name the + user has set. */ +# if 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + if (locale == NULL) + locale = ""; + } + } + + /* Map locale name to canonical encoding name. */ + { +# ifdef locale_table_defined + const struct table_entry * const table = locale_table; + size_t const table_size = + sizeof (locale_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) + { + /* Invariant: + for i < lo, strcmp (table[i].locale, locale) < 0, + for i >= hi, strcmp (table[i].locale, locale) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].locale, locale); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].locale, locale) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + if (0) + done_table_lookup: ; + else +# endif { - codeset = aliases + strlen (aliases) + 1; - break; + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* The canonical name cannot be determined. */ + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + codeset = "ASCII"; +# endif } + } - /* Don't return an empty string. GNU libc and GNU libiconv interpret - the empty string as denoting "the locale's character encoding", - thus GNU libiconv would call this function a second time. */ - if (codeset[0] == '\0') +#endif + +#ifdef DARWIN7 + /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" + (the default codeset) does not work when MB_CUR_MAX is 1. */ + if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) codeset = "ASCII"; +#endif return codeset; } diff --git a/lib/intl/localcharset.h b/lib/intl/localcharset.h index e5299589b..98a7eff98 100644 --- a/lib/intl/localcharset.h +++ b/lib/intl/localcharset.h @@ -1,22 +1,19 @@ -/* localcharset.h - Determine a canonical name for the current locale's character encoding. */ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003, 2018-2019 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. -/* Copyright (C) 2000-2003, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LOCALCHARSET_H #define _LOCALCHARSET_H @@ -28,12 +25,109 @@ extern "C" { /* Determine the current locale's character encoding, and canonicalize it - into one of the canonical names listed in config.charset. - The result must not be freed; it is statically allocated. + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); +/* About GNU canonical names for character encodings: + + Every canonical name must be supported by GNU libiconv. Support by GNU libc + is also desirable. + + The name is case insensitive. Usually an upper case MIME charset name is + preferred. + + The current list of these GNU canonical names is: + + name MIME? used by which systems + (darwin = Mac OS X, windows = native Windows) + + ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin + ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-3 Y glibc solaris cygwin + ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin + ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-6 Y glibc aix hpux solaris cygwin + ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos + ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos + ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-14 glibc cygwin + ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin + KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin + KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin + KOI8-T glibc + CP437 dos + CP775 dos + CP850 aix osf dos + CP852 dos + CP855 dos + CP856 aix + CP857 dos + CP861 dos + CP862 dos + CP864 dos + CP865 dos + CP866 freebsd netbsd openbsd darwin dos + CP869 dos + CP874 windows dos + CP922 aix + CP932 aix cygwin windows dos + CP943 aix zos + CP949 osf darwin windows dos + CP950 windows dos + CP1046 aix + CP1124 aix + CP1125 dos + CP1129 aix + CP1131 freebsd darwin + CP1250 windows + CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows + CP1252 aix windows + CP1253 windows + CP1254 windows + CP1255 glibc windows + CP1256 windows + CP1257 windows + GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos + EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin + EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos + EUC-TW glibc aix hpux irix osf solaris netbsd + BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos + BIG5-HKSCS glibc hpux solaris netbsd darwin + GBK glibc aix osf solaris freebsd darwin cygwin windows dos + GB18030 glibc hpux solaris freebsd netbsd darwin + SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin + JOHAB glibc solaris windows + TIS-620 glibc aix hpux osf solaris cygwin zos + VISCII Y glibc + TCVN5712-1 glibc + ARMSCII-8 glibc freebsd netbsd darwin + GEORGIAN-PS glibc cygwin + PT154 glibc netbsd cygwin + HP-ROMAN8 hpux + HP-ARABIC8 hpux + HP-GREEK8 hpux + HP-HEBREW8 hpux + HP-TURKISH8 hpux + HP-KANA8 hpux + DEC-KANJI osf + DEC-HANYU osf + UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos + + Note: Names which are not marked as being a MIME name should not be used in + Internet protocols for information interchange (mail, news, etc.). + + Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications + must understand both names and treat them as equivalent. + */ + #ifdef __cplusplus } diff --git a/lib/intl/localealias.c b/lib/intl/localealias.c index 7a730dbf3..7a1d9fe5e 100644 --- a/lib/intl/localealias.c +++ b/lib/intl/localealias.c @@ -1,22 +1,18 @@ -/* localealias.c - Handle aliases for locale names. */ +/* Handle aliases for locale names. + Copyright (C) 1995-2017 Free Software Foundation, Inc. -/* Copyright (C) 1995-1999, 2000-2001, 2003, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <string.h> to provide a prototype for mempcpy(). This must come before <config.h> because <config.h> may include @@ -64,10 +60,11 @@ char *alloca (); #include "gettextP.h" -#if ENABLE_RELOCATABLE +#ifdef ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) +# define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname)) #endif /* @@ end of prolog @@ */ @@ -76,18 +73,20 @@ char *alloca (); /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ -# define strcasecmp __strcasecmp +# define strcasecmp(s1, s2) __strcasecmp_l (s1, s2, _nl_C_locobj_ptr) # ifndef mempcpy # define mempcpy __mempcpy # endif # define HAVE_MEMPCPY 1 # define HAVE___FSETLOCKING 1 +#endif -/* We need locking here since we can be called from different places. */ +/* Handle multi-threaded applications. */ +#ifdef _LIBC # include <bits/libc-lock.h> - -__libc_lock_define_initialized (static, lock); +#else +# include "lock.h" #endif #ifndef internal_function @@ -97,7 +96,7 @@ __libc_lock_define_initialized (static, lock); /* Some optimizations for glibc. */ #ifdef _LIBC # define FEOF(fp) feof_unlocked (fp) -# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp) +# define FGETS(buf, n, fp) __fgets_unlocked (buf, n, fp) #else # define FEOF(fp) feof (fp) # define FGETS(buf, n, fp) fgets (buf, n, fp) @@ -112,15 +111,20 @@ __libc_lock_define_initialized (static, lock); # define freea(p) free (p) #endif -#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED +#if defined _LIBC_REENTRANT \ + || (defined HAVE_DECL_FGETS_UNLOCKED && HAVE_DECL_FGETS_UNLOCKED) # undef fgets # define fgets(buf, len, s) fgets_unlocked (buf, len, s) #endif -#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED +#if defined _LIBC_REENTRANT \ + || (defined HAVE_DECL_FEOF_UNLOCKED && HAVE_DECL_FEOF_UNLOCKED) # undef feof # define feof(s) feof_unlocked (s) #endif +#ifdef _LIBC +__libc_lock_define_initialized (static, lock) +#endif struct alias_map { @@ -142,16 +146,15 @@ static size_t maxmap; /* Prototypes for local functions. */ -static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) +static size_t read_alias_file (const char *fname, int fname_len) internal_function; -static int extend_alias_table PARAMS ((void)); -static int alias_compare PARAMS ((const struct alias_map *map1, - const struct alias_map *map2)); +static int extend_alias_table (void); +static int alias_compare (const struct alias_map *map1, + const struct alias_map *map2); const char * -_nl_expand_alias (name) - const char *name; +_nl_expand_alias (const char *name) { static const char *locale_alias_path; struct alias_map *retval; @@ -174,8 +177,8 @@ _nl_expand_alias (name) if (nmap > 0) retval = (struct alias_map *) bsearch (&item, map, nmap, sizeof (struct alias_map), - (int (*) PARAMS ((const void *, - const void *)) + (int (*) (const void *, + const void *) ) alias_compare); else retval = NULL; @@ -217,12 +220,11 @@ _nl_expand_alias (name) static size_t internal_function -read_alias_file (fname, fname_len) - const char *fname; - int fname_len; +read_alias_file (const char *fname, int fname_len) { FILE *fp; char *full_fname; + char *malloc_full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; @@ -235,7 +237,14 @@ read_alias_file (fname, fname_len) memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); #endif - fp = fopen (relocate (full_fname), "r"); +#ifdef _LIBC + /* Note the file is opened with cancellation in the I/O functions + disabled. */ + fp = fopen (relocate2 (full_fname, &malloc_full_fname), "rce"); +#else + fp = fopen (relocate2 (full_fname, &malloc_full_fname), "r"); +#endif + free (malloc_full_fname); freea (full_fname); if (fp == NULL) return 0; @@ -259,11 +268,15 @@ read_alias_file (fname, fname_len) char *alias; char *value; char *cp; + int complete_line; if (FGETS (buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; + /* Determine whether the line is complete. */ + complete_line = strchr (buf, '\n') != NULL; + cp = buf; /* Ignore leading white space. */ while (isspace ((unsigned char) cp[0])) @@ -285,9 +298,6 @@ read_alias_file (fname, fname_len) if (cp[0] != '\0') { - size_t alias_len; - size_t value_len; - value = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; @@ -303,80 +313,91 @@ read_alias_file (fname, fname_len) else if (cp[0] != '\0') *cp++ = '\0'; - if (nmap >= maxmap) - if (__builtin_expect (extend_alias_table (), 0)) - { - fclose (fp); - return added; - } +#ifdef IN_LIBGLOCALE + /* glibc's locale.alias contains entries for ja_JP and ko_KR + that make it impossible to use a Japanese or Korean UTF-8 + locale under the name "ja_JP" or "ko_KR". Ignore these + entries. */ + if (strchr (alias, '_') == NULL) +#endif + { + size_t alias_len; + size_t value_len; - alias_len = strlen (alias) + 1; - value_len = strlen (value) + 1; + if (nmap >= maxmap) + if (__builtin_expect (extend_alias_table (), 0)) + goto out; - if (string_space_act + alias_len + value_len > string_space_max) - { - /* Increase size of memory pool. */ - size_t new_size = (string_space_max - + (alias_len + value_len > 1024 - ? alias_len + value_len : 1024)); - char *new_pool = (char *) realloc (string_space, new_size); - if (new_pool == NULL) - { - fclose (fp); - return added; - } + alias_len = strlen (alias) + 1; + value_len = strlen (value) + 1; - if (__builtin_expect (string_space != new_pool, 0)) + if (string_space_act + alias_len + value_len > string_space_max) { - size_t i; - - for (i = 0; i < nmap; i++) + /* Increase size of memory pool. */ + size_t new_size = (string_space_max + + (alias_len + value_len > 1024 + ? alias_len + value_len : 1024)); + char *new_pool = (char *) realloc (string_space, new_size); + if (new_pool == NULL) + goto out; + + if (__builtin_expect (string_space != new_pool, 0)) { - map[i].alias += new_pool - string_space; - map[i].value += new_pool - string_space; + size_t i; + + for (i = 0; i < nmap; i++) + { + map[i].alias += new_pool - string_space; + map[i].value += new_pool - string_space; + } } - } - string_space = new_pool; - string_space_max = new_size; - } + string_space = new_pool; + string_space_max = new_size; + } - map[nmap].alias = memcpy (&string_space[string_space_act], - alias, alias_len); - string_space_act += alias_len; + map[nmap].alias = + (const char *) memcpy (&string_space[string_space_act], + alias, alias_len); + string_space_act += alias_len; - map[nmap].value = memcpy (&string_space[string_space_act], - value, value_len); - string_space_act += value_len; + map[nmap].value = + (const char *) memcpy (&string_space[string_space_act], + value, value_len); + string_space_act += value_len; - ++nmap; - ++added; + ++nmap; + ++added; + } } } /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ - while (strchr (buf, '\n') == NULL) - if (FGETS (buf, sizeof buf, fp) == NULL) - /* Make sure the inner loop will be left. The outer loop - will exit at the `feof' test. */ - break; + if (! complete_line) + do + if (FGETS (buf, sizeof buf, fp) == NULL) + /* Make sure the inner loop will be left. The outer loop + will exit at the `feof' test. */ + break; + while (strchr (buf, '\n') == NULL); } + out: /* Should we test for ferror()? I think we have to silently ignore errors. --drepper */ fclose (fp); if (added > 0) qsort (map, nmap, sizeof (struct alias_map), - (int (*) PARAMS ((const void *, const void *))) alias_compare); + (int (*) (const void *, const void *)) alias_compare); return added; } static int -extend_alias_table () +extend_alias_table (void) { size_t new_size; struct alias_map *new_map; @@ -395,9 +416,7 @@ extend_alias_table () static int -alias_compare (map1, map2) - const struct alias_map *map1; - const struct alias_map *map2; +alias_compare (const struct alias_map *map1, const struct alias_map *map2) { #if defined _LIBC || defined HAVE_STRCASECMP return strcasecmp (map1->alias, map2->alias); diff --git a/lib/intl/localename.c b/lib/intl/localename.c index 795a34fb9..d77bb8178 100644 --- a/lib/intl/localename.c +++ b/lib/intl/localename.c @@ -1,41 +1,216 @@ -/* localename.c - Determine the current selected locale. */ +/* Determine name of the currently selected locale. + Copyright (C) 1995-2022 Free Software Foundation, Inc. -/* Copyright (C) 1995-1999, 2000-2002, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Ulrich Drepper <drepper@gnu.org>, 1995. */ -/* Win32 code written by Tor Lillqvist <tml@iki.fi>. */ +/* Native Windows code written by Tor Lillqvist <tml@iki.fi>. */ +/* Mac OS X code written by Bruno Haible <bruno@clisp.org>. */ + +#include <config.h> -#ifdef HAVE_CONFIG_H -# include <config.h> +/* Specification. */ +#ifdef IN_LIBINTL +# include "gettextP.h" +#else +# include "localename.h" #endif +#include <limits.h> +#include <stdbool.h> +#include <stddef.h> #include <stdlib.h> #include <locale.h> +#include <string.h> + +#include "flexmember.h" +#include "setlocale_null.h" +#include "thread-optim.h" + +#if HAVE_GOOD_USELOCALE +/* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ +# if defined __APPLE__ && defined __MACH__ +# include <xlocale.h> +# endif +# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || (defined __linux__ && HAVE_LANGINFO_H) || defined __CYGWIN__ +# include <langinfo.h> +# endif +# if !defined IN_LIBINTL +# include "glthread/lock.h" +# endif +# if defined __sun +# if HAVE_GETLOCALENAME_L +/* Solaris >= 12. */ +extern char * getlocalename_l(int, locale_t); +# elif HAVE_SOLARIS114_LOCALES +# include <sys/localedef.h> +# endif +# endif +# if HAVE_NAMELESS_LOCALES +# include "localename-table.h" +# endif +#endif + +#if HAVE_CFPREFERENCESCOPYAPPVALUE +# include <CoreFoundation/CFString.h> +# include <CoreFoundation/CFPreferences.h> +#endif -#if defined _WIN32 || defined __WIN32__ -# undef WIN32 /* avoid warning on mingw32 */ -# define WIN32 +#if defined _WIN32 && !defined __CYGWIN__ +# define WINDOWS_NATIVE +# if !defined IN_LIBINTL +# include "glthread/lock.h" +# endif #endif -#ifdef WIN32 +#if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ # define WIN32_LEAN_AND_MEAN # include <windows.h> +# include <winnls.h> +/* List of language codes, sorted by value: + 0x01 LANG_ARABIC + 0x02 LANG_BULGARIAN + 0x03 LANG_CATALAN + 0x04 LANG_CHINESE + 0x05 LANG_CZECH + 0x06 LANG_DANISH + 0x07 LANG_GERMAN + 0x08 LANG_GREEK + 0x09 LANG_ENGLISH + 0x0a LANG_SPANISH + 0x0b LANG_FINNISH + 0x0c LANG_FRENCH + 0x0d LANG_HEBREW + 0x0e LANG_HUNGARIAN + 0x0f LANG_ICELANDIC + 0x10 LANG_ITALIAN + 0x11 LANG_JAPANESE + 0x12 LANG_KOREAN + 0x13 LANG_DUTCH + 0x14 LANG_NORWEGIAN + 0x15 LANG_POLISH + 0x16 LANG_PORTUGUESE + 0x17 LANG_ROMANSH + 0x18 LANG_ROMANIAN + 0x19 LANG_RUSSIAN + 0x1a LANG_CROATIAN == LANG_SERBIAN + 0x1b LANG_SLOVAK + 0x1c LANG_ALBANIAN + 0x1d LANG_SWEDISH + 0x1e LANG_THAI + 0x1f LANG_TURKISH + 0x20 LANG_URDU + 0x21 LANG_INDONESIAN + 0x22 LANG_UKRAINIAN + 0x23 LANG_BELARUSIAN + 0x24 LANG_SLOVENIAN + 0x25 LANG_ESTONIAN + 0x26 LANG_LATVIAN + 0x27 LANG_LITHUANIAN + 0x28 LANG_TAJIK + 0x29 LANG_FARSI + 0x2a LANG_VIETNAMESE + 0x2b LANG_ARMENIAN + 0x2c LANG_AZERI + 0x2d LANG_BASQUE + 0x2e LANG_SORBIAN + 0x2f LANG_MACEDONIAN + 0x30 LANG_SUTU + 0x31 LANG_TSONGA + 0x32 LANG_TSWANA + 0x33 LANG_VENDA + 0x34 LANG_XHOSA + 0x35 LANG_ZULU + 0x36 LANG_AFRIKAANS + 0x37 LANG_GEORGIAN + 0x38 LANG_FAEROESE + 0x39 LANG_HINDI + 0x3a LANG_MALTESE + 0x3b LANG_SAMI + 0x3c LANG_GAELIC + 0x3d LANG_YIDDISH + 0x3e LANG_MALAY + 0x3f LANG_KAZAK + 0x40 LANG_KYRGYZ + 0x41 LANG_SWAHILI + 0x42 LANG_TURKMEN + 0x43 LANG_UZBEK + 0x44 LANG_TATAR + 0x45 LANG_BENGALI + 0x46 LANG_PUNJABI + 0x47 LANG_GUJARATI + 0x48 LANG_ORIYA + 0x49 LANG_TAMIL + 0x4a LANG_TELUGU + 0x4b LANG_KANNADA + 0x4c LANG_MALAYALAM + 0x4d LANG_ASSAMESE + 0x4e LANG_MARATHI + 0x4f LANG_SANSKRIT + 0x50 LANG_MONGOLIAN + 0x51 LANG_TIBETAN + 0x52 LANG_WELSH + 0x53 LANG_CAMBODIAN + 0x54 LANG_LAO + 0x55 LANG_BURMESE + 0x56 LANG_GALICIAN + 0x57 LANG_KONKANI + 0x58 LANG_MANIPURI + 0x59 LANG_SINDHI + 0x5a LANG_SYRIAC + 0x5b LANG_SINHALESE + 0x5c LANG_CHEROKEE + 0x5d LANG_INUKTITUT + 0x5e LANG_AMHARIC + 0x5f LANG_TAMAZIGHT + 0x60 LANG_KASHMIRI + 0x61 LANG_NEPALI + 0x62 LANG_FRISIAN + 0x63 LANG_PASHTO + 0x64 LANG_TAGALOG + 0x65 LANG_DIVEHI + 0x66 LANG_EDO + 0x67 LANG_FULFULDE + 0x68 LANG_HAUSA + 0x69 LANG_IBIBIO + 0x6a LANG_YORUBA + 0x6d LANG_BASHKIR + 0x6e LANG_LUXEMBOURGISH + 0x6f LANG_GREENLANDIC + 0x70 LANG_IGBO + 0x71 LANG_KANURI + 0x72 LANG_OROMO + 0x73 LANG_TIGRINYA + 0x74 LANG_GUARANI + 0x75 LANG_HAWAIIAN + 0x76 LANG_LATIN + 0x77 LANG_SOMALI + 0x78 LANG_YI + 0x79 LANG_PAPIAMENTU + 0x7a LANG_MAPUDUNGUN + 0x7c LANG_MOHAWK + 0x7e LANG_BRETON + 0x82 LANG_OCCITAN + 0x83 LANG_CORSICAN + 0x84 LANG_ALSATIAN + 0x85 LANG_YAKUT + 0x86 LANG_KICHE + 0x87 LANG_KINYARWANDA + 0x88 LANG_WOLOF + 0x8c LANG_DARI + 0x91 LANG_SCOTTISH_GAELIC +*/ /* Mingw headers don't have latest language and sublanguage codes. */ # ifndef LANG_AFRIKAANS # define LANG_AFRIKAANS 0x36 @@ -43,6 +218,12 @@ # ifndef LANG_ALBANIAN # define LANG_ALBANIAN 0x1c # endif +# ifndef LANG_ALSATIAN +# define LANG_ALSATIAN 0x84 +# endif +# ifndef LANG_AMHARIC +# define LANG_AMHARIC 0x5e +# endif # ifndef LANG_ARABIC # define LANG_ARABIC 0x01 # endif @@ -55,6 +236,9 @@ # ifndef LANG_AZERI # define LANG_AZERI 0x2c # endif +# ifndef LANG_BASHKIR +# define LANG_BASHKIR 0x6d +# endif # ifndef LANG_BASQUE # define LANG_BASQUE 0x2d # endif @@ -64,12 +248,33 @@ # ifndef LANG_BENGALI # define LANG_BENGALI 0x45 # endif +# ifndef LANG_BRETON +# define LANG_BRETON 0x7e +# endif +# ifndef LANG_BURMESE +# define LANG_BURMESE 0x55 +# endif +# ifndef LANG_CAMBODIAN +# define LANG_CAMBODIAN 0x53 +# endif # ifndef LANG_CATALAN # define LANG_CATALAN 0x03 # endif +# ifndef LANG_CHEROKEE +# define LANG_CHEROKEE 0x5c +# endif +# ifndef LANG_CORSICAN +# define LANG_CORSICAN 0x83 +# endif +# ifndef LANG_DARI +# define LANG_DARI 0x8c +# endif # ifndef LANG_DIVEHI # define LANG_DIVEHI 0x65 # endif +# ifndef LANG_EDO +# define LANG_EDO 0x66 +# endif # ifndef LANG_ESTONIAN # define LANG_ESTONIAN 0x25 # endif @@ -79,45 +284,93 @@ # ifndef LANG_FARSI # define LANG_FARSI 0x29 # endif +# ifndef LANG_FRISIAN +# define LANG_FRISIAN 0x62 +# endif +# ifndef LANG_FULFULDE +# define LANG_FULFULDE 0x67 +# endif +# ifndef LANG_GAELIC +# define LANG_GAELIC 0x3c +# endif # ifndef LANG_GALICIAN # define LANG_GALICIAN 0x56 # endif # ifndef LANG_GEORGIAN # define LANG_GEORGIAN 0x37 # endif +# ifndef LANG_GREENLANDIC +# define LANG_GREENLANDIC 0x6f +# endif +# ifndef LANG_GUARANI +# define LANG_GUARANI 0x74 +# endif # ifndef LANG_GUJARATI # define LANG_GUJARATI 0x47 # endif +# ifndef LANG_HAUSA +# define LANG_HAUSA 0x68 +# endif +# ifndef LANG_HAWAIIAN +# define LANG_HAWAIIAN 0x75 +# endif # ifndef LANG_HEBREW # define LANG_HEBREW 0x0d # endif # ifndef LANG_HINDI # define LANG_HINDI 0x39 # endif +# ifndef LANG_IBIBIO +# define LANG_IBIBIO 0x69 +# endif +# ifndef LANG_IGBO +# define LANG_IGBO 0x70 +# endif # ifndef LANG_INDONESIAN # define LANG_INDONESIAN 0x21 # endif +# ifndef LANG_INUKTITUT +# define LANG_INUKTITUT 0x5d +# endif # ifndef LANG_KANNADA # define LANG_KANNADA 0x4b # endif +# ifndef LANG_KANURI +# define LANG_KANURI 0x71 +# endif # ifndef LANG_KASHMIRI # define LANG_KASHMIRI 0x60 # endif # ifndef LANG_KAZAK # define LANG_KAZAK 0x3f # endif +# ifndef LANG_KICHE +# define LANG_KICHE 0x86 +# endif +# ifndef LANG_KINYARWANDA +# define LANG_KINYARWANDA 0x87 +# endif # ifndef LANG_KONKANI # define LANG_KONKANI 0x57 # endif # ifndef LANG_KYRGYZ # define LANG_KYRGYZ 0x40 # endif +# ifndef LANG_LAO +# define LANG_LAO 0x54 +# endif +# ifndef LANG_LATIN +# define LANG_LATIN 0x76 +# endif # ifndef LANG_LATVIAN # define LANG_LATVIAN 0x26 # endif # ifndef LANG_LITHUANIAN # define LANG_LITHUANIAN 0x27 # endif +# ifndef LANG_LUXEMBOURGISH +# define LANG_LUXEMBOURGISH 0x6e +# endif # ifndef LANG_MACEDONIAN # define LANG_MACEDONIAN 0x2f # endif @@ -127,45 +380,102 @@ # ifndef LANG_MALAYALAM # define LANG_MALAYALAM 0x4c # endif +# ifndef LANG_MALTESE +# define LANG_MALTESE 0x3a +# endif # ifndef LANG_MANIPURI # define LANG_MANIPURI 0x58 # endif +# ifndef LANG_MAORI +# define LANG_MAORI 0x81 +# endif +# ifndef LANG_MAPUDUNGUN +# define LANG_MAPUDUNGUN 0x7a +# endif # ifndef LANG_MARATHI # define LANG_MARATHI 0x4e # endif +# ifndef LANG_MOHAWK +# define LANG_MOHAWK 0x7c +# endif # ifndef LANG_MONGOLIAN # define LANG_MONGOLIAN 0x50 # endif # ifndef LANG_NEPALI # define LANG_NEPALI 0x61 # endif +# ifndef LANG_OCCITAN +# define LANG_OCCITAN 0x82 +# endif # ifndef LANG_ORIYA # define LANG_ORIYA 0x48 # endif +# ifndef LANG_OROMO +# define LANG_OROMO 0x72 +# endif +# ifndef LANG_PAPIAMENTU +# define LANG_PAPIAMENTU 0x79 +# endif +# ifndef LANG_PASHTO +# define LANG_PASHTO 0x63 +# endif # ifndef LANG_PUNJABI # define LANG_PUNJABI 0x46 # endif +# ifndef LANG_QUECHUA +# define LANG_QUECHUA 0x6b +# endif +# ifndef LANG_ROMANSH +# define LANG_ROMANSH 0x17 +# endif +# ifndef LANG_SAMI +# define LANG_SAMI 0x3b +# endif # ifndef LANG_SANSKRIT # define LANG_SANSKRIT 0x4f # endif +# ifndef LANG_SCOTTISH_GAELIC +# define LANG_SCOTTISH_GAELIC 0x91 +# endif # ifndef LANG_SERBIAN # define LANG_SERBIAN 0x1a # endif # ifndef LANG_SINDHI # define LANG_SINDHI 0x59 # endif +# ifndef LANG_SINHALESE +# define LANG_SINHALESE 0x5b +# endif # ifndef LANG_SLOVAK # define LANG_SLOVAK 0x1b # endif +# ifndef LANG_SOMALI +# define LANG_SOMALI 0x77 +# endif # ifndef LANG_SORBIAN # define LANG_SORBIAN 0x2e # endif +# ifndef LANG_SOTHO +# define LANG_SOTHO 0x6c +# endif +# ifndef LANG_SUTU +# define LANG_SUTU 0x30 +# endif # ifndef LANG_SWAHILI # define LANG_SWAHILI 0x41 # endif # ifndef LANG_SYRIAC # define LANG_SYRIAC 0x5a # endif +# ifndef LANG_TAGALOG +# define LANG_TAGALOG 0x64 +# endif +# ifndef LANG_TAJIK +# define LANG_TAJIK 0x28 +# endif +# ifndef LANG_TAMAZIGHT +# define LANG_TAMAZIGHT 0x5f +# endif # ifndef LANG_TAMIL # define LANG_TAMIL 0x49 # endif @@ -178,6 +488,24 @@ # ifndef LANG_THAI # define LANG_THAI 0x1e # endif +# ifndef LANG_TIBETAN +# define LANG_TIBETAN 0x51 +# endif +# ifndef LANG_TIGRINYA +# define LANG_TIGRINYA 0x73 +# endif +# ifndef LANG_TSONGA +# define LANG_TSONGA 0x31 +# endif +# ifndef LANG_TSWANA +# define LANG_TSWANA 0x32 +# endif +# ifndef LANG_TURKMEN +# define LANG_TURKMEN 0x42 +# endif +# ifndef LANG_UIGHUR +# define LANG_UIGHUR 0x80 +# endif # ifndef LANG_UKRAINIAN # define LANG_UKRAINIAN 0x22 # endif @@ -187,9 +515,48 @@ # ifndef LANG_UZBEK # define LANG_UZBEK 0x43 # endif +# ifndef LANG_VENDA +# define LANG_VENDA 0x33 +# endif # ifndef LANG_VIETNAMESE # define LANG_VIETNAMESE 0x2a # endif +# ifndef LANG_WELSH +# define LANG_WELSH 0x52 +# endif +# ifndef LANG_WOLOF +# define LANG_WOLOF 0x88 +# endif +# ifndef LANG_XHOSA +# define LANG_XHOSA 0x34 +# endif +# ifndef LANG_YAKUT +# define LANG_YAKUT 0x85 +# endif +# ifndef LANG_YI +# define LANG_YI 0x78 +# endif +# ifndef LANG_YIDDISH +# define LANG_YIDDISH 0x3d +# endif +# ifndef LANG_YORUBA +# define LANG_YORUBA 0x6a +# endif +# ifndef LANG_ZULU +# define LANG_ZULU 0x35 +# endif +# ifndef SUBLANG_AFRIKAANS_SOUTH_AFRICA +# define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01 +# endif +# ifndef SUBLANG_ALBANIAN_ALBANIA +# define SUBLANG_ALBANIAN_ALBANIA 0x01 +# endif +# ifndef SUBLANG_ALSATIAN_FRANCE +# define SUBLANG_ALSATIAN_FRANCE 0x01 +# endif +# ifndef SUBLANG_AMHARIC_ETHIOPIA +# define SUBLANG_AMHARIC_ETHIOPIA 0x01 +# endif # ifndef SUBLANG_ARABIC_SAUDI_ARABIA # define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 # endif @@ -238,15 +605,78 @@ # ifndef SUBLANG_ARABIC_QATAR # define SUBLANG_ARABIC_QATAR 0x10 # endif +# ifndef SUBLANG_ARMENIAN_ARMENIA +# define SUBLANG_ARMENIAN_ARMENIA 0x01 +# endif +# ifndef SUBLANG_ASSAMESE_INDIA +# define SUBLANG_ASSAMESE_INDIA 0x01 +# endif # ifndef SUBLANG_AZERI_LATIN # define SUBLANG_AZERI_LATIN 0x01 # endif # ifndef SUBLANG_AZERI_CYRILLIC # define SUBLANG_AZERI_CYRILLIC 0x02 # endif +# ifndef SUBLANG_BASHKIR_RUSSIA +# define SUBLANG_BASHKIR_RUSSIA 0x01 +# endif +# ifndef SUBLANG_BASQUE_BASQUE +# define SUBLANG_BASQUE_BASQUE 0x01 +# endif +# ifndef SUBLANG_BELARUSIAN_BELARUS +# define SUBLANG_BELARUSIAN_BELARUS 0x01 +# endif +# ifndef SUBLANG_BENGALI_INDIA +# define SUBLANG_BENGALI_INDIA 0x01 +# endif +# ifndef SUBLANG_BENGALI_BANGLADESH +# define SUBLANG_BENGALI_BANGLADESH 0x02 +# endif +# ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN +# define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05 +# endif +# ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC +# define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08 +# endif +# ifndef SUBLANG_BRETON_FRANCE +# define SUBLANG_BRETON_FRANCE 0x01 +# endif +# ifndef SUBLANG_BULGARIAN_BULGARIA +# define SUBLANG_BULGARIAN_BULGARIA 0x01 +# endif +# ifndef SUBLANG_CAMBODIAN_CAMBODIA +# define SUBLANG_CAMBODIAN_CAMBODIA 0x01 +# endif +# ifndef SUBLANG_CATALAN_SPAIN +# define SUBLANG_CATALAN_SPAIN 0x01 +# endif +# ifndef SUBLANG_CORSICAN_FRANCE +# define SUBLANG_CORSICAN_FRANCE 0x01 +# endif +# ifndef SUBLANG_CROATIAN_CROATIA +# define SUBLANG_CROATIAN_CROATIA 0x01 +# endif +# ifndef SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN +# define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04 +# endif # ifndef SUBLANG_CHINESE_MACAU # define SUBLANG_CHINESE_MACAU 0x05 # endif +# ifndef SUBLANG_CZECH_CZECH_REPUBLIC +# define SUBLANG_CZECH_CZECH_REPUBLIC 0x01 +# endif +# ifndef SUBLANG_DANISH_DENMARK +# define SUBLANG_DANISH_DENMARK 0x01 +# endif +# ifndef SUBLANG_DARI_AFGHANISTAN +# define SUBLANG_DARI_AFGHANISTAN 0x01 +# endif +# ifndef SUBLANG_DIVEHI_MALDIVES +# define SUBLANG_DIVEHI_MALDIVES 0x01 +# endif +# ifndef SUBLANG_DUTCH_SURINAM +# define SUBLANG_DUTCH_SURINAM 0x03 +# endif # ifndef SUBLANG_ENGLISH_SOUTH_AFRICA # define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 # endif @@ -268,36 +698,291 @@ # ifndef SUBLANG_ENGLISH_PHILIPPINES # define SUBLANG_ENGLISH_PHILIPPINES 0x0d # endif +# ifndef SUBLANG_ENGLISH_INDONESIA +# define SUBLANG_ENGLISH_INDONESIA 0x0e +# endif +# ifndef SUBLANG_ENGLISH_HONGKONG +# define SUBLANG_ENGLISH_HONGKONG 0x0f +# endif +# ifndef SUBLANG_ENGLISH_INDIA +# define SUBLANG_ENGLISH_INDIA 0x10 +# endif +# ifndef SUBLANG_ENGLISH_MALAYSIA +# define SUBLANG_ENGLISH_MALAYSIA 0x11 +# endif +# ifndef SUBLANG_ENGLISH_SINGAPORE +# define SUBLANG_ENGLISH_SINGAPORE 0x12 +# endif +# ifndef SUBLANG_ESTONIAN_ESTONIA +# define SUBLANG_ESTONIAN_ESTONIA 0x01 +# endif +# ifndef SUBLANG_FAEROESE_FAROE_ISLANDS +# define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01 +# endif +# ifndef SUBLANG_FARSI_IRAN +# define SUBLANG_FARSI_IRAN 0x01 +# endif +# ifndef SUBLANG_FINNISH_FINLAND +# define SUBLANG_FINNISH_FINLAND 0x01 +# endif # ifndef SUBLANG_FRENCH_LUXEMBOURG # define SUBLANG_FRENCH_LUXEMBOURG 0x05 # endif # ifndef SUBLANG_FRENCH_MONACO # define SUBLANG_FRENCH_MONACO 0x06 # endif +# ifndef SUBLANG_FRENCH_WESTINDIES +# define SUBLANG_FRENCH_WESTINDIES 0x07 +# endif +# ifndef SUBLANG_FRENCH_REUNION +# define SUBLANG_FRENCH_REUNION 0x08 +# endif +# ifndef SUBLANG_FRENCH_CONGO +# define SUBLANG_FRENCH_CONGO 0x09 +# endif +# ifndef SUBLANG_FRENCH_SENEGAL +# define SUBLANG_FRENCH_SENEGAL 0x0a +# endif +# ifndef SUBLANG_FRENCH_CAMEROON +# define SUBLANG_FRENCH_CAMEROON 0x0b +# endif +# ifndef SUBLANG_FRENCH_COTEDIVOIRE +# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c +# endif +# ifndef SUBLANG_FRENCH_MALI +# define SUBLANG_FRENCH_MALI 0x0d +# endif +# ifndef SUBLANG_FRENCH_MOROCCO +# define SUBLANG_FRENCH_MOROCCO 0x0e +# endif +# ifndef SUBLANG_FRENCH_HAITI +# define SUBLANG_FRENCH_HAITI 0x0f +# endif +# ifndef SUBLANG_FRISIAN_NETHERLANDS +# define SUBLANG_FRISIAN_NETHERLANDS 0x01 +# endif +# ifndef SUBLANG_GALICIAN_SPAIN +# define SUBLANG_GALICIAN_SPAIN 0x01 +# endif +# ifndef SUBLANG_GEORGIAN_GEORGIA +# define SUBLANG_GEORGIAN_GEORGIA 0x01 +# endif # ifndef SUBLANG_GERMAN_LUXEMBOURG # define SUBLANG_GERMAN_LUXEMBOURG 0x04 # endif # ifndef SUBLANG_GERMAN_LIECHTENSTEIN # define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 # endif +# ifndef SUBLANG_GREEK_GREECE +# define SUBLANG_GREEK_GREECE 0x01 +# endif +# ifndef SUBLANG_GREENLANDIC_GREENLAND +# define SUBLANG_GREENLANDIC_GREENLAND 0x01 +# endif +# ifndef SUBLANG_GUJARATI_INDIA +# define SUBLANG_GUJARATI_INDIA 0x01 +# endif +# ifndef SUBLANG_HAUSA_NIGERIA_LATIN +# define SUBLANG_HAUSA_NIGERIA_LATIN 0x01 +# endif +# ifndef SUBLANG_HEBREW_ISRAEL +# define SUBLANG_HEBREW_ISRAEL 0x01 +# endif +# ifndef SUBLANG_HINDI_INDIA +# define SUBLANG_HINDI_INDIA 0x01 +# endif +# ifndef SUBLANG_HUNGARIAN_HUNGARY +# define SUBLANG_HUNGARIAN_HUNGARY 0x01 +# endif +# ifndef SUBLANG_ICELANDIC_ICELAND +# define SUBLANG_ICELANDIC_ICELAND 0x01 +# endif +# ifndef SUBLANG_IGBO_NIGERIA +# define SUBLANG_IGBO_NIGERIA 0x01 +# endif +# ifndef SUBLANG_INDONESIAN_INDONESIA +# define SUBLANG_INDONESIAN_INDONESIA 0x01 +# endif +# ifndef SUBLANG_INUKTITUT_CANADA +# define SUBLANG_INUKTITUT_CANADA 0x01 +# endif +# undef SUBLANG_INUKTITUT_CANADA_LATIN +# define SUBLANG_INUKTITUT_CANADA_LATIN 0x02 +# undef SUBLANG_IRISH_IRELAND +# define SUBLANG_IRISH_IRELAND 0x02 +# ifndef SUBLANG_JAPANESE_JAPAN +# define SUBLANG_JAPANESE_JAPAN 0x01 +# endif +# ifndef SUBLANG_KANNADA_INDIA +# define SUBLANG_KANNADA_INDIA 0x01 +# endif # ifndef SUBLANG_KASHMIRI_INDIA # define SUBLANG_KASHMIRI_INDIA 0x02 # endif +# ifndef SUBLANG_KAZAK_KAZAKHSTAN +# define SUBLANG_KAZAK_KAZAKHSTAN 0x01 +# endif +# ifndef SUBLANG_KICHE_GUATEMALA +# define SUBLANG_KICHE_GUATEMALA 0x01 +# endif +# ifndef SUBLANG_KINYARWANDA_RWANDA +# define SUBLANG_KINYARWANDA_RWANDA 0x01 +# endif +# ifndef SUBLANG_KONKANI_INDIA +# define SUBLANG_KONKANI_INDIA 0x01 +# endif +# ifndef SUBLANG_KYRGYZ_KYRGYZSTAN +# define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01 +# endif +# ifndef SUBLANG_LAO_LAOS +# define SUBLANG_LAO_LAOS 0x01 +# endif +# ifndef SUBLANG_LATVIAN_LATVIA +# define SUBLANG_LATVIAN_LATVIA 0x01 +# endif +# ifndef SUBLANG_LITHUANIAN_LITHUANIA +# define SUBLANG_LITHUANIAN_LITHUANIA 0x01 +# endif +# undef SUBLANG_LOWER_SORBIAN_GERMANY +# define SUBLANG_LOWER_SORBIAN_GERMANY 0x02 +# ifndef SUBLANG_LUXEMBOURGISH_LUXEMBOURG +# define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01 +# endif +# ifndef SUBLANG_MACEDONIAN_MACEDONIA +# define SUBLANG_MACEDONIAN_MACEDONIA 0x01 +# endif # ifndef SUBLANG_MALAY_MALAYSIA # define SUBLANG_MALAY_MALAYSIA 0x01 # endif # ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM # define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 # endif +# ifndef SUBLANG_MALAYALAM_INDIA +# define SUBLANG_MALAYALAM_INDIA 0x01 +# endif +# ifndef SUBLANG_MALTESE_MALTA +# define SUBLANG_MALTESE_MALTA 0x01 +# endif +# ifndef SUBLANG_MAORI_NEW_ZEALAND +# define SUBLANG_MAORI_NEW_ZEALAND 0x01 +# endif +# ifndef SUBLANG_MAPUDUNGUN_CHILE +# define SUBLANG_MAPUDUNGUN_CHILE 0x01 +# endif +# ifndef SUBLANG_MARATHI_INDIA +# define SUBLANG_MARATHI_INDIA 0x01 +# endif +# ifndef SUBLANG_MOHAWK_CANADA +# define SUBLANG_MOHAWK_CANADA 0x01 +# endif +# ifndef SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA +# define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01 +# endif +# ifndef SUBLANG_MONGOLIAN_PRC +# define SUBLANG_MONGOLIAN_PRC 0x02 +# endif +# ifndef SUBLANG_NEPALI_NEPAL +# define SUBLANG_NEPALI_NEPAL 0x01 +# endif # ifndef SUBLANG_NEPALI_INDIA # define SUBLANG_NEPALI_INDIA 0x02 # endif +# ifndef SUBLANG_OCCITAN_FRANCE +# define SUBLANG_OCCITAN_FRANCE 0x01 +# endif +# ifndef SUBLANG_ORIYA_INDIA +# define SUBLANG_ORIYA_INDIA 0x01 +# endif +# ifndef SUBLANG_PASHTO_AFGHANISTAN +# define SUBLANG_PASHTO_AFGHANISTAN 0x01 +# endif +# ifndef SUBLANG_POLISH_POLAND +# define SUBLANG_POLISH_POLAND 0x01 +# endif +# ifndef SUBLANG_PUNJABI_INDIA +# define SUBLANG_PUNJABI_INDIA 0x01 +# endif +# ifndef SUBLANG_PUNJABI_PAKISTAN +# define SUBLANG_PUNJABI_PAKISTAN 0x02 +# endif +# ifndef SUBLANG_QUECHUA_BOLIVIA +# define SUBLANG_QUECHUA_BOLIVIA 0x01 +# endif +# ifndef SUBLANG_QUECHUA_ECUADOR +# define SUBLANG_QUECHUA_ECUADOR 0x02 +# endif +# ifndef SUBLANG_QUECHUA_PERU +# define SUBLANG_QUECHUA_PERU 0x03 +# endif +# ifndef SUBLANG_ROMANIAN_ROMANIA +# define SUBLANG_ROMANIAN_ROMANIA 0x01 +# endif +# ifndef SUBLANG_ROMANIAN_MOLDOVA +# define SUBLANG_ROMANIAN_MOLDOVA 0x02 +# endif +# ifndef SUBLANG_ROMANSH_SWITZERLAND +# define SUBLANG_ROMANSH_SWITZERLAND 0x01 +# endif +# ifndef SUBLANG_RUSSIAN_RUSSIA +# define SUBLANG_RUSSIAN_RUSSIA 0x01 +# endif +# ifndef SUBLANG_RUSSIAN_MOLDAVIA +# define SUBLANG_RUSSIAN_MOLDAVIA 0x02 +# endif +# ifndef SUBLANG_SAMI_NORTHERN_NORWAY +# define SUBLANG_SAMI_NORTHERN_NORWAY 0x01 +# endif +# ifndef SUBLANG_SAMI_NORTHERN_SWEDEN +# define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02 +# endif +# ifndef SUBLANG_SAMI_NORTHERN_FINLAND +# define SUBLANG_SAMI_NORTHERN_FINLAND 0x03 +# endif +# ifndef SUBLANG_SAMI_LULE_NORWAY +# define SUBLANG_SAMI_LULE_NORWAY 0x04 +# endif +# ifndef SUBLANG_SAMI_LULE_SWEDEN +# define SUBLANG_SAMI_LULE_SWEDEN 0x05 +# endif +# ifndef SUBLANG_SAMI_SOUTHERN_NORWAY +# define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06 +# endif +# ifndef SUBLANG_SAMI_SOUTHERN_SWEDEN +# define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07 +# endif +# undef SUBLANG_SAMI_SKOLT_FINLAND +# define SUBLANG_SAMI_SKOLT_FINLAND 0x08 +# undef SUBLANG_SAMI_INARI_FINLAND +# define SUBLANG_SAMI_INARI_FINLAND 0x09 +# ifndef SUBLANG_SANSKRIT_INDIA +# define SUBLANG_SANSKRIT_INDIA 0x01 +# endif # ifndef SUBLANG_SERBIAN_LATIN # define SUBLANG_SERBIAN_LATIN 0x02 # endif # ifndef SUBLANG_SERBIAN_CYRILLIC # define SUBLANG_SERBIAN_CYRILLIC 0x03 # endif +# ifndef SUBLANG_SINDHI_INDIA +# define SUBLANG_SINDHI_INDIA 0x01 +# endif +# undef SUBLANG_SINDHI_PAKISTAN +# define SUBLANG_SINDHI_PAKISTAN 0x02 +# ifndef SUBLANG_SINDHI_AFGHANISTAN +# define SUBLANG_SINDHI_AFGHANISTAN 0x02 +# endif +# ifndef SUBLANG_SINHALESE_SRI_LANKA +# define SUBLANG_SINHALESE_SRI_LANKA 0x01 +# endif +# ifndef SUBLANG_SLOVAK_SLOVAKIA +# define SUBLANG_SLOVAK_SLOVAKIA 0x01 +# endif +# ifndef SUBLANG_SLOVENIAN_SLOVENIA +# define SUBLANG_SLOVENIAN_SLOVENIA 0x01 +# endif +# ifndef SUBLANG_SOTHO_SOUTH_AFRICA +# define SUBLANG_SOTHO_SOUTH_AFRICA 0x01 +# endif # ifndef SUBLANG_SPANISH_GUATEMALA # define SUBLANG_SPANISH_GUATEMALA 0x04 # endif @@ -349,9 +1034,74 @@ # ifndef SUBLANG_SPANISH_PUERTO_RICO # define SUBLANG_SPANISH_PUERTO_RICO 0x14 # endif +# ifndef SUBLANG_SPANISH_US +# define SUBLANG_SPANISH_US 0x15 +# endif +# ifndef SUBLANG_SWAHILI_KENYA +# define SUBLANG_SWAHILI_KENYA 0x01 +# endif +# ifndef SUBLANG_SWEDISH_SWEDEN +# define SUBLANG_SWEDISH_SWEDEN 0x01 +# endif # ifndef SUBLANG_SWEDISH_FINLAND # define SUBLANG_SWEDISH_FINLAND 0x02 # endif +# ifndef SUBLANG_SYRIAC_SYRIA +# define SUBLANG_SYRIAC_SYRIA 0x01 +# endif +# ifndef SUBLANG_TAGALOG_PHILIPPINES +# define SUBLANG_TAGALOG_PHILIPPINES 0x01 +# endif +# ifndef SUBLANG_TAJIK_TAJIKISTAN +# define SUBLANG_TAJIK_TAJIKISTAN 0x01 +# endif +# ifndef SUBLANG_TAMAZIGHT_ARABIC +# define SUBLANG_TAMAZIGHT_ARABIC 0x01 +# endif +# ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN +# define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02 +# endif +# ifndef SUBLANG_TAMIL_INDIA +# define SUBLANG_TAMIL_INDIA 0x01 +# endif +# ifndef SUBLANG_TATAR_RUSSIA +# define SUBLANG_TATAR_RUSSIA 0x01 +# endif +# ifndef SUBLANG_TELUGU_INDIA +# define SUBLANG_TELUGU_INDIA 0x01 +# endif +# ifndef SUBLANG_THAI_THAILAND +# define SUBLANG_THAI_THAILAND 0x01 +# endif +# ifndef SUBLANG_TIBETAN_PRC +# define SUBLANG_TIBETAN_PRC 0x01 +# endif +# undef SUBLANG_TIBETAN_BHUTAN +# define SUBLANG_TIBETAN_BHUTAN 0x02 +# ifndef SUBLANG_TIGRINYA_ETHIOPIA +# define SUBLANG_TIGRINYA_ETHIOPIA 0x01 +# endif +# ifndef SUBLANG_TIGRINYA_ERITREA +# define SUBLANG_TIGRINYA_ERITREA 0x02 +# endif +# ifndef SUBLANG_TSWANA_SOUTH_AFRICA +# define SUBLANG_TSWANA_SOUTH_AFRICA 0x01 +# endif +# ifndef SUBLANG_TURKISH_TURKEY +# define SUBLANG_TURKISH_TURKEY 0x01 +# endif +# ifndef SUBLANG_TURKMEN_TURKMENISTAN +# define SUBLANG_TURKMEN_TURKMENISTAN 0x01 +# endif +# ifndef SUBLANG_UIGHUR_PRC +# define SUBLANG_UIGHUR_PRC 0x01 +# endif +# ifndef SUBLANG_UKRAINIAN_UKRAINE +# define SUBLANG_UKRAINIAN_UKRAINE 0x01 +# endif +# ifndef SUBLANG_UPPER_SORBIAN_GERMANY +# define SUBLANG_UPPER_SORBIAN_GERMANY 0x01 +# endif # ifndef SUBLANG_URDU_PAKISTAN # define SUBLANG_URDU_PAKISTAN 0x01 # endif @@ -364,411 +1114,2346 @@ # ifndef SUBLANG_UZBEK_CYRILLIC # define SUBLANG_UZBEK_CYRILLIC 0x02 # endif +# ifndef SUBLANG_VIETNAMESE_VIETNAM +# define SUBLANG_VIETNAMESE_VIETNAM 0x01 +# endif +# ifndef SUBLANG_WELSH_UNITED_KINGDOM +# define SUBLANG_WELSH_UNITED_KINGDOM 0x01 +# endif +# ifndef SUBLANG_WOLOF_SENEGAL +# define SUBLANG_WOLOF_SENEGAL 0x01 +# endif +# ifndef SUBLANG_XHOSA_SOUTH_AFRICA +# define SUBLANG_XHOSA_SOUTH_AFRICA 0x01 +# endif +# ifndef SUBLANG_YAKUT_RUSSIA +# define SUBLANG_YAKUT_RUSSIA 0x01 +# endif +# ifndef SUBLANG_YI_PRC +# define SUBLANG_YI_PRC 0x01 +# endif +# ifndef SUBLANG_YORUBA_NIGERIA +# define SUBLANG_YORUBA_NIGERIA 0x01 +# endif +# ifndef SUBLANG_ZULU_SOUTH_AFRICA +# define SUBLANG_ZULU_SOUTH_AFRICA 0x01 +# endif +/* GetLocaleInfoA operations. */ +# ifndef LOCALE_SNAME +# define LOCALE_SNAME 0x5c +# endif +# ifndef LOCALE_NAME_MAX_LENGTH +# define LOCALE_NAME_MAX_LENGTH 85 +# endif +/* Don't assume that UNICODE is not defined. */ +# undef GetLocaleInfo +# define GetLocaleInfo GetLocaleInfoA +# undef EnumSystemLocales +# define EnumSystemLocales EnumSystemLocalesA +#endif + +/* We want to use the system's setlocale() function here, not the gnulib + override. */ +#undef setlocale + + +#if HAVE_CFPREFERENCESCOPYAPPVALUE +/* Mac OS X 10.4 or newer */ + +/* Canonicalize a Mac OS X locale name to a Unix locale name. + NAME is a sufficiently large buffer. + On input, it contains the Mac OS X locale name. + On output, it contains the Unix locale name. */ +# if !defined IN_LIBINTL +static +# endif +void +gl_locale_name_canonicalize (char *name) +{ + /* This conversion is based on a posting by + Deborah GoldSmith <goldsmit@apple.com> on 2005-03-08, + https://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */ + + /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and + ISO 3166) names. Prior to Mac OS X 10.3, there is no API for doing this. + Therefore we do it ourselves, using a table based on the results of the + Mac OS X 10.3.8 function + CFLocaleCreateCanonicalLocaleIdentifierFromString(). */ + typedef struct { const char legacy[21+1]; const char unixy[5+1]; } + legacy_entry; + static const legacy_entry legacy_table[] = { + { "Afrikaans", "af" }, + { "Albanian", "sq" }, + { "Amharic", "am" }, + { "Arabic", "ar" }, + { "Armenian", "hy" }, + { "Assamese", "as" }, + { "Aymara", "ay" }, + { "Azerbaijani", "az" }, + { "Basque", "eu" }, + { "Belarusian", "be" }, + { "Belorussian", "be" }, + { "Bengali", "bn" }, + { "Brazilian Portugese", "pt_BR" }, + { "Brazilian Portuguese", "pt_BR" }, + { "Breton", "br" }, + { "Bulgarian", "bg" }, + { "Burmese", "my" }, + { "Byelorussian", "be" }, + { "Catalan", "ca" }, + { "Chewa", "ny" }, + { "Chichewa", "ny" }, + { "Chinese", "zh" }, + { "Chinese, Simplified", "zh_CN" }, + { "Chinese, Traditional", "zh_TW" }, + { "Chinese, Tradtional", "zh_TW" }, + { "Croatian", "hr" }, + { "Czech", "cs" }, + { "Danish", "da" }, + { "Dutch", "nl" }, + { "Dzongkha", "dz" }, + { "English", "en" }, + { "Esperanto", "eo" }, + { "Estonian", "et" }, + { "Faroese", "fo" }, + { "Farsi", "fa" }, + { "Finnish", "fi" }, + { "Flemish", "nl_BE" }, + { "French", "fr" }, + { "Galician", "gl" }, + { "Gallegan", "gl" }, + { "Georgian", "ka" }, + { "German", "de" }, + { "Greek", "el" }, + { "Greenlandic", "kl" }, + { "Guarani", "gn" }, + { "Gujarati", "gu" }, + { "Hawaiian", "haw" }, /* Yes, "haw", not "cpe". */ + { "Hebrew", "he" }, + { "Hindi", "hi" }, + { "Hungarian", "hu" }, + { "Icelandic", "is" }, + { "Indonesian", "id" }, + { "Inuktitut", "iu" }, + { "Irish", "ga" }, + { "Italian", "it" }, + { "Japanese", "ja" }, + { "Javanese", "jv" }, + { "Kalaallisut", "kl" }, + { "Kannada", "kn" }, + { "Kashmiri", "ks" }, + { "Kazakh", "kk" }, + { "Khmer", "km" }, + { "Kinyarwanda", "rw" }, + { "Kirghiz", "ky" }, + { "Korean", "ko" }, + { "Kurdish", "ku" }, + { "Latin", "la" }, + { "Latvian", "lv" }, + { "Lithuanian", "lt" }, + { "Macedonian", "mk" }, + { "Malagasy", "mg" }, + { "Malay", "ms" }, + { "Malayalam", "ml" }, + { "Maltese", "mt" }, + { "Manx", "gv" }, + { "Marathi", "mr" }, + { "Moldavian", "mo" }, + { "Mongolian", "mn" }, + { "Nepali", "ne" }, + { "Norwegian", "nb" }, /* Yes, "nb", not the obsolete "no". */ + { "Nyanja", "ny" }, + { "Nynorsk", "nn" }, + { "Oriya", "or" }, + { "Oromo", "om" }, + { "Panjabi", "pa" }, + { "Pashto", "ps" }, + { "Persian", "fa" }, + { "Polish", "pl" }, + { "Portuguese", "pt" }, + { "Portuguese, Brazilian", "pt_BR" }, + { "Punjabi", "pa" }, + { "Pushto", "ps" }, + { "Quechua", "qu" }, + { "Romanian", "ro" }, + { "Ruanda", "rw" }, + { "Rundi", "rn" }, + { "Russian", "ru" }, + { "Sami", "se_NO" }, /* Not just "se". */ + { "Sanskrit", "sa" }, + { "Scottish", "gd" }, + { "Serbian", "sr" }, + { "Simplified Chinese", "zh_CN" }, + { "Sindhi", "sd" }, + { "Sinhalese", "si" }, + { "Slovak", "sk" }, + { "Slovenian", "sl" }, + { "Somali", "so" }, + { "Spanish", "es" }, + { "Sundanese", "su" }, + { "Swahili", "sw" }, + { "Swedish", "sv" }, + { "Tagalog", "tl" }, + { "Tajik", "tg" }, + { "Tajiki", "tg" }, + { "Tamil", "ta" }, + { "Tatar", "tt" }, + { "Telugu", "te" }, + { "Thai", "th" }, + { "Tibetan", "bo" }, + { "Tigrinya", "ti" }, + { "Tongan", "to" }, + { "Traditional Chinese", "zh_TW" }, + { "Turkish", "tr" }, + { "Turkmen", "tk" }, + { "Uighur", "ug" }, + { "Ukrainian", "uk" }, + { "Urdu", "ur" }, + { "Uzbek", "uz" }, + { "Vietnamese", "vi" }, + { "Welsh", "cy" }, + { "Yiddish", "yi" } + }; + + /* Convert new-style locale names with language tags (ISO 639 and ISO 15924) + to Unix (ISO 639 and ISO 3166) names. */ + typedef struct { const char langtag[7+1]; const char unixy[12+1]; } + langtag_entry; + static const langtag_entry langtag_table[] = { + /* Mac OS X has "az-Arab", "az-Cyrl", "az-Latn". + The default script for az on Unix is Latin. */ + { "az-Latn", "az" }, + /* Mac OS X has "bs-Cyrl", "bs-Latn". + The default script for bs on Unix is Latin. */ + { "bs-Latn", "bs" }, + /* Mac OS X has "ga-dots". Does not yet exist on Unix. */ + { "ga-dots", "ga" }, + /* Mac OS X has "kk-Cyrl". + The default script for kk on Unix is Cyrillic. */ + { "kk-Cyrl", "kk" }, + /* Mac OS X has "mn-Cyrl", "mn-Mong". + The default script for mn on Unix is Cyrillic. */ + { "mn-Cyrl", "mn" }, + /* Mac OS X has "ms-Arab", "ms-Latn". + The default script for ms on Unix is Latin. */ + { "ms-Latn", "ms" }, + /* Mac OS X has "pa-Arab", "pa-Guru". + Country codes are used to distinguish these on Unix. */ + { "pa-Arab", "pa_PK" }, + { "pa-Guru", "pa_IN" }, + /* Mac OS X has "shi-Latn", "shi-Tfng". Does not yet exist on Unix. */ + /* Mac OS X has "sr-Cyrl", "sr-Latn". + The default script for sr on Unix is Cyrillic. */ + { "sr-Cyrl", "sr" }, + /* Mac OS X has "tg-Cyrl". + The default script for tg on Unix is Cyrillic. */ + { "tg-Cyrl", "tg" }, + /* Mac OS X has "tk-Cyrl". + The default script for tk on Unix is Cyrillic. */ + { "tk-Cyrl", "tk" }, + /* Mac OS X has "tt-Cyrl". + The default script for tt on Unix is Cyrillic. */ + { "tt-Cyrl", "tt" }, + /* Mac OS X has "uz-Arab", "uz-Cyrl", "uz-Latn". + The default script for uz on Unix is Latin. */ + { "uz-Latn", "uz" }, + /* Mac OS X has "vai-Latn", "vai-Vaii". Does not yet exist on Unix. */ + /* Mac OS X has "yue-Hans", "yue-Hant". + The default script for yue on Unix is Simplified Han. */ + { "yue-Hans", "yue" }, + /* Mac OS X has "zh-Hans", "zh-Hant". + Country codes are used to distinguish these on Unix. */ + { "zh-Hans", "zh_CN" }, + { "zh-Hant", "zh_TW" } + }; + + /* Convert script names (ISO 15924) to Unix conventions. + See https://www.unicode.org/iso15924/iso15924-codes.html */ + typedef struct { const char script[4+1]; const char unixy[9+1]; } + script_entry; + static const script_entry script_table[] = { + { "Arab", "arabic" }, + { "Cyrl", "cyrillic" }, + { "Latn", "latin" }, + { "Mong", "mongolian" } + }; + + /* Step 1: Convert using legacy_table. */ + if (name[0] >= 'A' && name[0] <= 'Z') + { + unsigned int i1, i2; + i1 = 0; + i2 = sizeof (legacy_table) / sizeof (legacy_entry); + while (i2 - i1 > 1) + { + /* At this point we know that if name occurs in legacy_table, + its index must be >= i1 and < i2. */ + unsigned int i = (i1 + i2) >> 1; + const legacy_entry *p = &legacy_table[i]; + if (strcmp (name, p->legacy) < 0) + i2 = i; + else + i1 = i; + } + if (strcmp (name, legacy_table[i1].legacy) == 0) + { + strcpy (name, legacy_table[i1].unixy); + return; + } + } + + /* Step 2: Convert using langtag_table and script_table. */ + if (strlen (name) == 7 && name[2] == '-') + { + unsigned int i1, i2; + i1 = 0; + i2 = sizeof (langtag_table) / sizeof (langtag_entry); + while (i2 - i1 > 1) + { + /* At this point we know that if name occurs in langtag_table, + its index must be >= i1 and < i2. */ + unsigned int i = (i1 + i2) >> 1; + const langtag_entry *p = &langtag_table[i]; + if (strcmp (name, p->langtag) < 0) + i2 = i; + else + i1 = i; + } + if (strcmp (name, langtag_table[i1].langtag) == 0) + { + strcpy (name, langtag_table[i1].unixy); + return; + } + + i1 = 0; + i2 = sizeof (script_table) / sizeof (script_entry); + while (i2 - i1 > 1) + { + /* At this point we know that if (name + 3) occurs in script_table, + its index must be >= i1 and < i2. */ + unsigned int i = (i1 + i2) >> 1; + const script_entry *p = &script_table[i]; + if (strcmp (name + 3, p->script) < 0) + i2 = i; + else + i1 = i; + } + if (strcmp (name + 3, script_table[i1].script) == 0) + { + name[2] = '@'; + strcpy (name + 3, script_table[i1].unixy); + return; + } + } + + /* Step 3: Convert new-style dash to Unix underscore. */ + { + char *p; + for (p = name; *p != '\0'; p++) + if (*p == '-') + *p = '_'; + } +} + +#endif + + +#if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ + +/* Canonicalize a Windows native locale name to a Unix locale name. + NAME is a sufficiently large buffer. + On input, it contains the Windows locale name. + On output, it contains the Unix locale name. */ +# if !defined IN_LIBINTL +static +# endif +void +gl_locale_name_canonicalize (char *name) +{ + /* FIXME: This is probably incomplete: it does not handle "zh-Hans" and + "zh-Hant". */ + char *p; + + for (p = name; *p != '\0'; p++) + if (*p == '-') + { + *p = '_'; + p++; + for (; *p != '\0'; p++) + { + if (*p >= 'a' && *p <= 'z') + *p += 'A' - 'a'; + if (*p == '-') + { + *p = '\0'; + return; + } + } + return; + } +} + +# if !defined IN_LIBINTL +static +# endif +const char * +gl_locale_name_from_win32_LANGID (LANGID langid) +{ + /* Activate the new code only when the GETTEXT_MUI environment variable is + set, for the time being, since the new code is not well tested. */ + if (getenv ("GETTEXT_MUI") != NULL) + { + static char namebuf[256]; + + /* Query the system's notion of locale name. + On Windows95/98/ME, GetLocaleInfoA returns some incorrect results. + But we don't need to support systems that are so old. */ + if (GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT), LOCALE_SNAME, + namebuf, sizeof (namebuf) - 1)) + { + /* Convert it to a Unix locale name. */ + gl_locale_name_canonicalize (namebuf); + return namebuf; + } + } + /* Internet Explorer has an LCID to RFC3066 name mapping stored in + HKEY_CLASSES_ROOT\Mime\Database\Rfc1766. But we better don't use that + since IE's i18n subsystem is known to be inconsistent with the native + Windows base (e.g. they have different character conversion facilities + that produce different results). */ + /* Use our own table. */ + { + int primary, sub; + + /* Split into language and territory part. */ + primary = PRIMARYLANGID (langid); + sub = SUBLANGID (langid); + + /* Dispatch on language. + See also https://www.unicode.org/unicode/onlinedat/languages.html . + For details about languages, see https://www.ethnologue.com/ . */ + switch (primary) + { + case LANG_AFRIKAANS: + switch (sub) + { + case SUBLANG_AFRIKAANS_SOUTH_AFRICA: return "af_ZA"; + } + return "af"; + case LANG_ALBANIAN: + switch (sub) + { + case SUBLANG_ALBANIAN_ALBANIA: return "sq_AL"; + } + return "sq"; + case LANG_ALSATIAN: + switch (sub) + { + case SUBLANG_ALSATIAN_FRANCE: return "gsw_FR"; + } + return "gsw"; + case LANG_AMHARIC: + switch (sub) + { + case SUBLANG_AMHARIC_ETHIOPIA: return "am_ET"; + } + return "am"; + case LANG_ARABIC: + switch (sub) + { + case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; + case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; + case SUBLANG_ARABIC_EGYPT: return "ar_EG"; + case SUBLANG_ARABIC_LIBYA: return "ar_LY"; + case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; + case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; + case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; + case SUBLANG_ARABIC_OMAN: return "ar_OM"; + case SUBLANG_ARABIC_YEMEN: return "ar_YE"; + case SUBLANG_ARABIC_SYRIA: return "ar_SY"; + case SUBLANG_ARABIC_JORDAN: return "ar_JO"; + case SUBLANG_ARABIC_LEBANON: return "ar_LB"; + case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; + case SUBLANG_ARABIC_UAE: return "ar_AE"; + case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; + case SUBLANG_ARABIC_QATAR: return "ar_QA"; + } + return "ar"; + case LANG_ARMENIAN: + switch (sub) + { + case SUBLANG_ARMENIAN_ARMENIA: return "hy_AM"; + } + return "hy"; + case LANG_ASSAMESE: + switch (sub) + { + case SUBLANG_ASSAMESE_INDIA: return "as_IN"; + } + return "as"; + case LANG_AZERI: + switch (sub) + { + /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ + case 0x1e: return "az@latin"; + case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; + case 0x1d: return "az@cyrillic"; + case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; + } + return "az"; + case LANG_BASHKIR: + switch (sub) + { + case SUBLANG_BASHKIR_RUSSIA: return "ba_RU"; + } + return "ba"; + case LANG_BASQUE: + switch (sub) + { + case SUBLANG_BASQUE_BASQUE: return "eu_ES"; + } + return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ + case LANG_BELARUSIAN: + switch (sub) + { + case SUBLANG_BELARUSIAN_BELARUS: return "be_BY"; + } + return "be"; + case LANG_BENGALI: + switch (sub) + { + case SUBLANG_BENGALI_INDIA: return "bn_IN"; + case SUBLANG_BENGALI_BANGLADESH: return "bn_BD"; + } + return "bn"; + case LANG_BRETON: + switch (sub) + { + case SUBLANG_BRETON_FRANCE: return "br_FR"; + } + return "br"; + case LANG_BULGARIAN: + switch (sub) + { + case SUBLANG_BULGARIAN_BULGARIA: return "bg_BG"; + } + return "bg"; + case LANG_BURMESE: + switch (sub) + { + case SUBLANG_DEFAULT: return "my_MM"; + } + return "my"; + case LANG_CAMBODIAN: + switch (sub) + { + case SUBLANG_CAMBODIAN_CAMBODIA: return "km_KH"; + } + return "km"; + case LANG_CATALAN: + switch (sub) + { + case SUBLANG_CATALAN_SPAIN: return "ca_ES"; + } + return "ca"; + case LANG_CHEROKEE: + switch (sub) + { + case SUBLANG_DEFAULT: return "chr_US"; + } + return "chr"; + case LANG_CHINESE: + switch (sub) + { + case SUBLANG_CHINESE_TRADITIONAL: case 0x1f: return "zh_TW"; + case SUBLANG_CHINESE_SIMPLIFIED: case 0x00: return "zh_CN"; + case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; /* traditional */ + case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; /* simplified */ + case SUBLANG_CHINESE_MACAU: return "zh_MO"; /* traditional */ + } + return "zh"; + case LANG_CORSICAN: + switch (sub) + { + case SUBLANG_CORSICAN_FRANCE: return "co_FR"; + } + return "co"; + case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN == LANG_BOSNIAN + * What used to be called Serbo-Croatian + * should really now be two separate + * languages because of political reasons. + * (Says tml, who knows nothing about Serbian + * or Croatian.) + * (I can feel those flames coming already.) + */ + switch (sub) + { + /* Croatian */ + case 0x00: return "hr"; + case SUBLANG_CROATIAN_CROATIA: return "hr_HR"; + case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: return "hr_BA"; + /* Serbian */ + case 0x1f: return "sr"; + case 0x1c: return "sr"; /* latin */ + case SUBLANG_SERBIAN_LATIN: return "sr_CS"; /* latin */ + case 0x09: return "sr_RS"; /* latin */ + case 0x0b: return "sr_ME"; /* latin */ + case 0x06: return "sr_BA"; /* latin */ + case 0x1b: return "sr@cyrillic"; + case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic"; + case 0x0a: return "sr_RS@cyrillic"; + case 0x0c: return "sr_ME@cyrillic"; + case 0x07: return "sr_BA@cyrillic"; + /* Bosnian */ + case 0x1e: return "bs"; + case 0x1a: return "bs"; /* latin */ + case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: return "bs_BA"; /* latin */ + case 0x19: return "bs@cyrillic"; + case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: return "bs_BA@cyrillic"; + } + return "hr"; + case LANG_CZECH: + switch (sub) + { + case SUBLANG_CZECH_CZECH_REPUBLIC: return "cs_CZ"; + } + return "cs"; + case LANG_DANISH: + switch (sub) + { + case SUBLANG_DANISH_DENMARK: return "da_DK"; + } + return "da"; + case LANG_DARI: + /* FIXME: Adjust this when such locales appear on Unix. */ + switch (sub) + { + case SUBLANG_DARI_AFGHANISTAN: return "prs_AF"; + } + return "prs"; + case LANG_DIVEHI: + switch (sub) + { + case SUBLANG_DIVEHI_MALDIVES: return "dv_MV"; + } + return "dv"; + case LANG_DUTCH: + switch (sub) + { + case SUBLANG_DUTCH: return "nl_NL"; + case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; + case SUBLANG_DUTCH_SURINAM: return "nl_SR"; + } + return "nl"; + case LANG_EDO: + switch (sub) + { + case SUBLANG_DEFAULT: return "bin_NG"; + } + return "bin"; + case LANG_ENGLISH: + switch (sub) + { + /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought + * English was the language spoken in England. + * Oh well. + */ + case SUBLANG_ENGLISH_US: return "en_US"; + case SUBLANG_ENGLISH_UK: return "en_GB"; + case SUBLANG_ENGLISH_AUS: return "en_AU"; + case SUBLANG_ENGLISH_CAN: return "en_CA"; + case SUBLANG_ENGLISH_NZ: return "en_NZ"; + case SUBLANG_ENGLISH_EIRE: return "en_IE"; + case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; + case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; + case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ + case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; + case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; + case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; + case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; + case SUBLANG_ENGLISH_INDONESIA: return "en_ID"; + case SUBLANG_ENGLISH_HONGKONG: return "en_HK"; + case SUBLANG_ENGLISH_INDIA: return "en_IN"; + case SUBLANG_ENGLISH_MALAYSIA: return "en_MY"; + case SUBLANG_ENGLISH_SINGAPORE: return "en_SG"; + } + return "en"; + case LANG_ESTONIAN: + switch (sub) + { + case SUBLANG_ESTONIAN_ESTONIA: return "et_EE"; + } + return "et"; + case LANG_FAEROESE: + switch (sub) + { + case SUBLANG_FAEROESE_FAROE_ISLANDS: return "fo_FO"; + } + return "fo"; + case LANG_FARSI: + switch (sub) + { + case SUBLANG_FARSI_IRAN: return "fa_IR"; + } + return "fa"; + case LANG_FINNISH: + switch (sub) + { + case SUBLANG_FINNISH_FINLAND: return "fi_FI"; + } + return "fi"; + case LANG_FRENCH: + switch (sub) + { + case SUBLANG_FRENCH: return "fr_FR"; + case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; + case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; + case SUBLANG_FRENCH_SWISS: return "fr_CH"; + case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; + case SUBLANG_FRENCH_MONACO: return "fr_MC"; + case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */ + case SUBLANG_FRENCH_REUNION: return "fr_RE"; + case SUBLANG_FRENCH_CONGO: return "fr_CG"; + case SUBLANG_FRENCH_SENEGAL: return "fr_SN"; + case SUBLANG_FRENCH_CAMEROON: return "fr_CM"; + case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI"; + case SUBLANG_FRENCH_MALI: return "fr_ML"; + case SUBLANG_FRENCH_MOROCCO: return "fr_MA"; + case SUBLANG_FRENCH_HAITI: return "fr_HT"; + } + return "fr"; + case LANG_FRISIAN: + switch (sub) + { + case SUBLANG_FRISIAN_NETHERLANDS: return "fy_NL"; + } + return "fy"; + case LANG_FULFULDE: + /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */ + switch (sub) + { + case SUBLANG_DEFAULT: return "ff_NG"; + } + return "ff"; + case LANG_GAELIC: + switch (sub) + { + case 0x01: /* SCOTTISH */ + /* old, superseded by LANG_SCOTTISH_GAELIC */ + return "gd_GB"; + case SUBLANG_IRISH_IRELAND: return "ga_IE"; + } + return "ga"; + case LANG_GALICIAN: + switch (sub) + { + case SUBLANG_GALICIAN_SPAIN: return "gl_ES"; + } + return "gl"; + case LANG_GEORGIAN: + switch (sub) + { + case SUBLANG_GEORGIAN_GEORGIA: return "ka_GE"; + } + return "ka"; + case LANG_GERMAN: + switch (sub) + { + case SUBLANG_GERMAN: return "de_DE"; + case SUBLANG_GERMAN_SWISS: return "de_CH"; + case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; + case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; + case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; + } + return "de"; + case LANG_GREEK: + switch (sub) + { + case SUBLANG_GREEK_GREECE: return "el_GR"; + } + return "el"; + case LANG_GREENLANDIC: + switch (sub) + { + case SUBLANG_GREENLANDIC_GREENLAND: return "kl_GL"; + } + return "kl"; + case LANG_GUARANI: + switch (sub) + { + case SUBLANG_DEFAULT: return "gn_PY"; + } + return "gn"; + case LANG_GUJARATI: + switch (sub) + { + case SUBLANG_GUJARATI_INDIA: return "gu_IN"; + } + return "gu"; + case LANG_HAUSA: + switch (sub) + { + case 0x1f: return "ha"; + case SUBLANG_HAUSA_NIGERIA_LATIN: return "ha_NG"; + } + return "ha"; + case LANG_HAWAIIAN: + /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) + or Hawaii Creole English ("cpe_US", 600000 speakers)? */ + switch (sub) + { + case SUBLANG_DEFAULT: return "cpe_US"; + } + return "cpe"; + case LANG_HEBREW: + switch (sub) + { + case SUBLANG_HEBREW_ISRAEL: return "he_IL"; + } + return "he"; + case LANG_HINDI: + switch (sub) + { + case SUBLANG_HINDI_INDIA: return "hi_IN"; + } + return "hi"; + case LANG_HUNGARIAN: + switch (sub) + { + case SUBLANG_HUNGARIAN_HUNGARY: return "hu_HU"; + } + return "hu"; + case LANG_IBIBIO: + switch (sub) + { + case SUBLANG_DEFAULT: return "nic_NG"; + } + return "nic"; + case LANG_ICELANDIC: + switch (sub) + { + case SUBLANG_ICELANDIC_ICELAND: return "is_IS"; + } + return "is"; + case LANG_IGBO: + switch (sub) + { + case SUBLANG_IGBO_NIGERIA: return "ig_NG"; + } + return "ig"; + case LANG_INDONESIAN: + switch (sub) + { + case SUBLANG_INDONESIAN_INDONESIA: return "id_ID"; + } + return "id"; + case LANG_INUKTITUT: + switch (sub) + { + case 0x1e: return "iu"; /* syllabic */ + case SUBLANG_INUKTITUT_CANADA: return "iu_CA"; /* syllabic */ + case 0x1f: return "iu@latin"; + case SUBLANG_INUKTITUT_CANADA_LATIN: return "iu_CA@latin"; + } + return "iu"; + case LANG_ITALIAN: + switch (sub) + { + case SUBLANG_ITALIAN: return "it_IT"; + case SUBLANG_ITALIAN_SWISS: return "it_CH"; + } + return "it"; + case LANG_JAPANESE: + switch (sub) + { + case SUBLANG_JAPANESE_JAPAN: return "ja_JP"; + } + return "ja"; + case LANG_KANNADA: + switch (sub) + { + case SUBLANG_KANNADA_INDIA: return "kn_IN"; + } + return "kn"; + case LANG_KANURI: + switch (sub) + { + case SUBLANG_DEFAULT: return "kr_NG"; + } + return "kr"; + case LANG_KASHMIRI: + switch (sub) + { + case SUBLANG_DEFAULT: return "ks_PK"; + case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; + } + return "ks"; + case LANG_KAZAK: + switch (sub) + { + case SUBLANG_KAZAK_KAZAKHSTAN: return "kk_KZ"; + } + return "kk"; + case LANG_KICHE: + /* FIXME: Adjust this when such locales appear on Unix. */ + switch (sub) + { + case SUBLANG_KICHE_GUATEMALA: return "qut_GT"; + } + return "qut"; + case LANG_KINYARWANDA: + switch (sub) + { + case SUBLANG_KINYARWANDA_RWANDA: return "rw_RW"; + } + return "rw"; + case LANG_KONKANI: + /* FIXME: Adjust this when such locales appear on Unix. */ + switch (sub) + { + case SUBLANG_KONKANI_INDIA: return "kok_IN"; + } + return "kok"; + case LANG_KOREAN: + switch (sub) + { + case SUBLANG_DEFAULT: return "ko_KR"; + } + return "ko"; + case LANG_KYRGYZ: + switch (sub) + { + case SUBLANG_KYRGYZ_KYRGYZSTAN: return "ky_KG"; + } + return "ky"; + case LANG_LAO: + switch (sub) + { + case SUBLANG_LAO_LAOS: return "lo_LA"; + } + return "lo"; + case LANG_LATIN: + switch (sub) + { + case SUBLANG_DEFAULT: return "la_VA"; + } + return "la"; + case LANG_LATVIAN: + switch (sub) + { + case SUBLANG_LATVIAN_LATVIA: return "lv_LV"; + } + return "lv"; + case LANG_LITHUANIAN: + switch (sub) + { + case SUBLANG_LITHUANIAN_LITHUANIA: return "lt_LT"; + } + return "lt"; + case LANG_LUXEMBOURGISH: + switch (sub) + { + case SUBLANG_LUXEMBOURGISH_LUXEMBOURG: return "lb_LU"; + } + return "lb"; + case LANG_MACEDONIAN: + switch (sub) + { + case SUBLANG_MACEDONIAN_MACEDONIA: return "mk_MK"; + } + return "mk"; + case LANG_MALAY: + switch (sub) + { + case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; + case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; + } + return "ms"; + case LANG_MALAYALAM: + switch (sub) + { + case SUBLANG_MALAYALAM_INDIA: return "ml_IN"; + } + return "ml"; + case LANG_MALTESE: + switch (sub) + { + case SUBLANG_MALTESE_MALTA: return "mt_MT"; + } + return "mt"; + case LANG_MANIPURI: + /* FIXME: Adjust this when such locales appear on Unix. */ + switch (sub) + { + case SUBLANG_DEFAULT: return "mni_IN"; + } + return "mni"; + case LANG_MAORI: + switch (sub) + { + case SUBLANG_MAORI_NEW_ZEALAND: return "mi_NZ"; + } + return "mi"; + case LANG_MAPUDUNGUN: + switch (sub) + { + case SUBLANG_MAPUDUNGUN_CHILE: return "arn_CL"; + } + return "arn"; + case LANG_MARATHI: + switch (sub) + { + case SUBLANG_MARATHI_INDIA: return "mr_IN"; + } + return "mr"; + case LANG_MOHAWK: + switch (sub) + { + case SUBLANG_MOHAWK_CANADA: return "moh_CA"; + } + return "moh"; + case LANG_MONGOLIAN: + switch (sub) + { + case SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA: case 0x1e: return "mn_MN"; + case SUBLANG_MONGOLIAN_PRC: case 0x1f: return "mn_CN"; + } + return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ + case LANG_NEPALI: + switch (sub) + { + case SUBLANG_NEPALI_NEPAL: return "ne_NP"; + case SUBLANG_NEPALI_INDIA: return "ne_IN"; + } + return "ne"; + case LANG_NORWEGIAN: + switch (sub) + { + case 0x1f: return "nb"; + case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO"; + case 0x1e: return "nn"; + case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; + } + return "no"; + case LANG_OCCITAN: + switch (sub) + { + case SUBLANG_OCCITAN_FRANCE: return "oc_FR"; + } + return "oc"; + case LANG_ORIYA: + switch (sub) + { + case SUBLANG_ORIYA_INDIA: return "or_IN"; + } + return "or"; + case LANG_OROMO: + switch (sub) + { + case SUBLANG_DEFAULT: return "om_ET"; + } + return "om"; + case LANG_PAPIAMENTU: + switch (sub) + { + case SUBLANG_DEFAULT: return "pap_AN"; + } + return "pap"; + case LANG_PASHTO: + switch (sub) + { + case SUBLANG_PASHTO_AFGHANISTAN: return "ps_AF"; + } + return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ + case LANG_POLISH: + switch (sub) + { + case SUBLANG_POLISH_POLAND: return "pl_PL"; + } + return "pl"; + case LANG_PORTUGUESE: + switch (sub) + { + /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. + Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ + case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; + case SUBLANG_PORTUGUESE: return "pt_PT"; + } + return "pt"; + case LANG_PUNJABI: + switch (sub) + { + case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */ + case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */ + } + return "pa"; + case LANG_QUECHUA: + /* Note: Microsoft uses the non-ISO language code "quz". */ + switch (sub) + { + case SUBLANG_QUECHUA_BOLIVIA: return "qu_BO"; + case SUBLANG_QUECHUA_ECUADOR: return "qu_EC"; + case SUBLANG_QUECHUA_PERU: return "qu_PE"; + } + return "qu"; + case LANG_ROMANIAN: + switch (sub) + { + case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO"; + case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD"; + } + return "ro"; + case LANG_ROMANSH: + switch (sub) + { + case SUBLANG_ROMANSH_SWITZERLAND: return "rm_CH"; + } + return "rm"; + case LANG_RUSSIAN: + switch (sub) + { + case SUBLANG_RUSSIAN_RUSSIA: return "ru_RU"; + case SUBLANG_RUSSIAN_MOLDAVIA: return "ru_MD"; + } + return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */ + case LANG_SAMI: + switch (sub) + { + /* Northern Sami */ + case 0x00: return "se"; + case SUBLANG_SAMI_NORTHERN_NORWAY: return "se_NO"; + case SUBLANG_SAMI_NORTHERN_SWEDEN: return "se_SE"; + case SUBLANG_SAMI_NORTHERN_FINLAND: return "se_FI"; + /* Lule Sami */ + case 0x1f: return "smj"; + case SUBLANG_SAMI_LULE_NORWAY: return "smj_NO"; + case SUBLANG_SAMI_LULE_SWEDEN: return "smj_SE"; + /* Southern Sami */ + case 0x1e: return "sma"; + case SUBLANG_SAMI_SOUTHERN_NORWAY: return "sma_NO"; + case SUBLANG_SAMI_SOUTHERN_SWEDEN: return "sma_SE"; + /* Skolt Sami */ + case 0x1d: return "sms"; + case SUBLANG_SAMI_SKOLT_FINLAND: return "sms_FI"; + /* Inari Sami */ + case 0x1c: return "smn"; + case SUBLANG_SAMI_INARI_FINLAND: return "smn_FI"; + } + return "se"; /* or "smi"? */ + case LANG_SANSKRIT: + switch (sub) + { + case SUBLANG_SANSKRIT_INDIA: return "sa_IN"; + } + return "sa"; + case LANG_SCOTTISH_GAELIC: + switch (sub) + { + case SUBLANG_DEFAULT: return "gd_GB"; + } + return "gd"; + case LANG_SINDHI: + switch (sub) + { + case SUBLANG_SINDHI_INDIA: return "sd_IN"; + case SUBLANG_SINDHI_PAKISTAN: return "sd_PK"; + /*case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF";*/ + } + return "sd"; + case LANG_SINHALESE: + switch (sub) + { + case SUBLANG_SINHALESE_SRI_LANKA: return "si_LK"; + } + return "si"; + case LANG_SLOVAK: + switch (sub) + { + case SUBLANG_SLOVAK_SLOVAKIA: return "sk_SK"; + } + return "sk"; + case LANG_SLOVENIAN: + switch (sub) + { + case SUBLANG_SLOVENIAN_SLOVENIA: return "sl_SI"; + } + return "sl"; + case LANG_SOMALI: + switch (sub) + { + case SUBLANG_DEFAULT: return "so_SO"; + } + return "so"; + case LANG_SORBIAN: + /* FIXME: Adjust this when such locales appear on Unix. */ + switch (sub) + { + /* Upper Sorbian */ + case 0x00: return "hsb"; + case SUBLANG_UPPER_SORBIAN_GERMANY: return "hsb_DE"; + /* Lower Sorbian */ + case 0x1f: return "dsb"; + case SUBLANG_LOWER_SORBIAN_GERMANY: return "dsb_DE"; + } + return "wen"; + case LANG_SOTHO: + /* <https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings> + calls it "Sesotho sa Leboa"; according to + <https://www.ethnologue.com/show_language.asp?code=nso> + <https://www.ethnologue.com/show_language.asp?code=sot> + it's the same as Northern Sotho. */ + switch (sub) + { + case SUBLANG_SOTHO_SOUTH_AFRICA: return "nso_ZA"; + } + return "nso"; + case LANG_SPANISH: + switch (sub) + { + case SUBLANG_SPANISH: return "es_ES"; + case SUBLANG_SPANISH_MEXICAN: return "es_MX"; + case SUBLANG_SPANISH_MODERN: + return "es_ES@modern"; /* not seen on Unix */ + case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; + case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; + case SUBLANG_SPANISH_PANAMA: return "es_PA"; + case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; + case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; + case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; + case SUBLANG_SPANISH_PERU: return "es_PE"; + case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; + case SUBLANG_SPANISH_ECUADOR: return "es_EC"; + case SUBLANG_SPANISH_CHILE: return "es_CL"; + case SUBLANG_SPANISH_URUGUAY: return "es_UY"; + case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; + case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; + case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; + case SUBLANG_SPANISH_HONDURAS: return "es_HN"; + case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; + case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; + case SUBLANG_SPANISH_US: return "es_US"; + } + return "es"; + case LANG_SUTU: + switch (sub) + { + case SUBLANG_DEFAULT: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */ + } + return "bnt"; + case LANG_SWAHILI: + switch (sub) + { + case SUBLANG_SWAHILI_KENYA: return "sw_KE"; + } + return "sw"; + case LANG_SWEDISH: + switch (sub) + { + case SUBLANG_SWEDISH_SWEDEN: return "sv_SE"; + case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; + } + return "sv"; + case LANG_SYRIAC: + switch (sub) + { + case SUBLANG_SYRIAC_SYRIA: return "syr_SY"; /* An extinct language. */ + } + return "syr"; + case LANG_TAGALOG: + switch (sub) + { + case SUBLANG_TAGALOG_PHILIPPINES: return "tl_PH"; /* or "fil_PH"? */ + } + return "tl"; /* or "fil"? */ + case LANG_TAJIK: + switch (sub) + { + case 0x1f: return "tg"; + case SUBLANG_TAJIK_TAJIKISTAN: return "tg_TJ"; + } + return "tg"; + case LANG_TAMAZIGHT: + /* Note: Microsoft uses the non-ISO language code "tmz". */ + switch (sub) + { + /* FIXME: Adjust this when Tamazight locales appear on Unix. */ + case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic"; + case 0x1f: return "ber@latin"; + case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ@latin"; + } + return "ber"; + case LANG_TAMIL: + switch (sub) + { + case SUBLANG_TAMIL_INDIA: return "ta_IN"; + } + return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ + case LANG_TATAR: + switch (sub) + { + case SUBLANG_TATAR_RUSSIA: return "tt_RU"; + } + return "tt"; + case LANG_TELUGU: + switch (sub) + { + case SUBLANG_TELUGU_INDIA: return "te_IN"; + } + return "te"; + case LANG_THAI: + switch (sub) + { + case SUBLANG_THAI_THAILAND: return "th_TH"; + } + return "th"; + case LANG_TIBETAN: + switch (sub) + { + case SUBLANG_TIBETAN_PRC: + /* Most Tibetans would not like "bo_CN". But Tibet does not yet + have a country code of its own. */ + return "bo"; + case SUBLANG_TIBETAN_BHUTAN: return "bo_BT"; + } + return "bo"; + case LANG_TIGRINYA: + switch (sub) + { + case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET"; + case SUBLANG_TIGRINYA_ERITREA: return "ti_ER"; + } + return "ti"; + case LANG_TSONGA: + switch (sub) + { + case SUBLANG_DEFAULT: return "ts_ZA"; + } + return "ts"; + case LANG_TSWANA: + /* Spoken in South Africa, Botswana. */ + switch (sub) + { + case SUBLANG_TSWANA_SOUTH_AFRICA: return "tn_ZA"; + } + return "tn"; + case LANG_TURKISH: + switch (sub) + { + case SUBLANG_TURKISH_TURKEY: return "tr_TR"; + } + return "tr"; + case LANG_TURKMEN: + switch (sub) + { + case SUBLANG_TURKMEN_TURKMENISTAN: return "tk_TM"; + } + return "tk"; + case LANG_UIGHUR: + switch (sub) + { + case SUBLANG_UIGHUR_PRC: return "ug_CN"; + } + return "ug"; + case LANG_UKRAINIAN: + switch (sub) + { + case SUBLANG_UKRAINIAN_UKRAINE: return "uk_UA"; + } + return "uk"; + case LANG_URDU: + switch (sub) + { + case SUBLANG_URDU_PAKISTAN: return "ur_PK"; + case SUBLANG_URDU_INDIA: return "ur_IN"; + } + return "ur"; + case LANG_UZBEK: + switch (sub) + { + case 0x1f: return "uz"; + case SUBLANG_UZBEK_LATIN: return "uz_UZ"; + case 0x1e: return "uz@cyrillic"; + case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; + } + return "uz"; + case LANG_VENDA: + switch (sub) + { + case SUBLANG_DEFAULT: return "ve_ZA"; + } + return "ve"; + case LANG_VIETNAMESE: + switch (sub) + { + case SUBLANG_VIETNAMESE_VIETNAM: return "vi_VN"; + } + return "vi"; + case LANG_WELSH: + switch (sub) + { + case SUBLANG_WELSH_UNITED_KINGDOM: return "cy_GB"; + } + return "cy"; + case LANG_WOLOF: + switch (sub) + { + case SUBLANG_WOLOF_SENEGAL: return "wo_SN"; + } + return "wo"; + case LANG_XHOSA: + switch (sub) + { + case SUBLANG_XHOSA_SOUTH_AFRICA: return "xh_ZA"; + } + return "xh"; + case LANG_YAKUT: + switch (sub) + { + case SUBLANG_YAKUT_RUSSIA: return "sah_RU"; + } + return "sah"; + case LANG_YI: + switch (sub) + { + case SUBLANG_YI_PRC: return "ii_CN"; + } + return "ii"; + case LANG_YIDDISH: + switch (sub) + { + case SUBLANG_DEFAULT: return "yi_IL"; + } + return "yi"; + case LANG_YORUBA: + switch (sub) + { + case SUBLANG_YORUBA_NIGERIA: return "yo_NG"; + } + return "yo"; + case LANG_ZULU: + switch (sub) + { + case SUBLANG_ZULU_SOUTH_AFRICA: return "zu_ZA"; + } + return "zu"; + default: return "C"; + } + } +} + +# if !defined IN_LIBINTL +static +# endif +const char * +gl_locale_name_from_win32_LCID (LCID lcid) +{ + LANGID langid; + + /* Strip off the sorting rules, keep only the language part. */ + langid = LANGIDFROMLCID (lcid); + + return gl_locale_name_from_win32_LANGID (langid); +} + +# ifdef WINDOWS_NATIVE + +/* Two variables to interface between get_lcid and the EnumLocales + callback function below. */ +static LCID found_lcid; +static char lname[LC_MAX * (LOCALE_NAME_MAX_LENGTH + 1) + 1]; + +/* Callback function for EnumLocales. */ +static BOOL CALLBACK +enum_locales_fn (LPSTR locale_num_str) +{ + char *endp; + char locval[2 * LOCALE_NAME_MAX_LENGTH + 1 + 1]; + LCID try_lcid = strtoul (locale_num_str, &endp, 16); + + if (GetLocaleInfo (try_lcid, LOCALE_SENGLANGUAGE, + locval, LOCALE_NAME_MAX_LENGTH)) + { + strcat (locval, "_"); + if (GetLocaleInfo (try_lcid, LOCALE_SENGCOUNTRY, + locval + strlen (locval), LOCALE_NAME_MAX_LENGTH)) + { + size_t locval_len = strlen (locval); + + if (strncmp (locval, lname, locval_len) == 0 + && (lname[locval_len] == '.' + || lname[locval_len] == '\0')) + { + found_lcid = try_lcid; + return FALSE; + } + } + } + return TRUE; +} + +/* This lock protects the get_lcid against multiple simultaneous calls. */ +gl_lock_define_initialized(static, get_lcid_lock) + +/* Return the Locale ID (LCID) number given the locale's name, a + string, in LOCALE_NAME. This works by enumerating all the locales + supported by the system, until we find one whose name matches + LOCALE_NAME. */ +static LCID +get_lcid (const char *locale_name) +{ + /* A simple cache. */ + static LCID last_lcid; + static char last_locale[1000]; + + /* Lock while looking for an LCID, to protect access to static + variables: last_lcid, last_locale, found_lcid, and lname. */ + gl_lock_lock (get_lcid_lock); + if (last_lcid > 0 && strcmp (locale_name, last_locale) == 0) + { + gl_lock_unlock (get_lcid_lock); + return last_lcid; + } + strncpy (lname, locale_name, sizeof (lname) - 1); + lname[sizeof (lname) - 1] = '\0'; + found_lcid = 0; + EnumSystemLocales (enum_locales_fn, LCID_SUPPORTED); + if (found_lcid > 0) + { + last_lcid = found_lcid; + strcpy (last_locale, locale_name); + } + gl_lock_unlock (get_lcid_lock); + return found_lcid; +} + +# endif +#endif + + +#if HAVE_GOOD_USELOCALE /* glibc, Mac OS X, FreeBSD >= 9.1, Cygwin >= 2.6, + Solaris 11 OpenIndiana, or Solaris >= 11.4 */ + +/* Simple hash set of strings. We don't want to drag in lots of hash table + code here. */ + +# define SIZE_BITS (sizeof (size_t) * CHAR_BIT) + +/* A hash function for NUL-terminated char* strings using + the method described by Bruno Haible. + See https://www.haible.de/bruno/hashfunc.html. */ +static size_t _GL_ATTRIBUTE_PURE +string_hash (const void *x) +{ + const char *s = (const char *) x; + size_t h = 0; + + for (; *s; s++) + h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); + + return h; +} + +/* A hash table of fixed size. Multiple threads can access it read-only + simultaneously, but only one thread can insert into it at the same time. */ + +/* A node in a hash bucket collision list. */ +struct struniq_hash_node + { + struct struniq_hash_node * volatile next; + char contents[FLEXIBLE_ARRAY_MEMBER]; + }; + +# define STRUNIQ_HASH_TABLE_SIZE 257 +static struct struniq_hash_node * volatile struniq_hash_table[STRUNIQ_HASH_TABLE_SIZE] + /* = { NULL, ..., NULL } */; + +/* This lock protects the struniq_hash_table against multiple simultaneous + insertions. */ +gl_lock_define_initialized(static, struniq_lock) + +/* Store a copy of the given string in a string pool with indefinite extent. + Return a pointer to this copy. */ +static const char * +struniq (const char *string) +{ + size_t hashcode = string_hash (string); + size_t slot = hashcode % STRUNIQ_HASH_TABLE_SIZE; + size_t size; + struct struniq_hash_node *new_node; + struct struniq_hash_node *p; + for (p = struniq_hash_table[slot]; p != NULL; p = p->next) + if (strcmp (p->contents, string) == 0) + return p->contents; + size = strlen (string) + 1; + new_node = + (struct struniq_hash_node *) + malloc (FLEXSIZEOF (struct struniq_hash_node, contents, size)); + if (new_node == NULL) + /* Out of memory. Return a statically allocated string. */ + return "C"; + memcpy (new_node->contents, string, size); + { + bool mt = gl_multithreaded (); + /* Lock while inserting new_node. */ + if (mt) gl_lock_lock (struniq_lock); + /* Check whether another thread already added the string while we were + waiting on the lock. */ + for (p = struniq_hash_table[slot]; p != NULL; p = p->next) + if (strcmp (p->contents, string) == 0) + { + free (new_node); + new_node = p; + goto done; + } + /* Really insert new_node into the hash table. Fill new_node entirely + first, because other threads may be iterating over the linked list. */ + new_node->next = struniq_hash_table[slot]; + struniq_hash_table[slot] = new_node; + done: + /* Unlock after new_node is inserted. */ + if (mt) gl_lock_unlock (struniq_lock); + } + return new_node->contents; +} + +#endif + + +#if LOCALENAME_ENHANCE_LOCALE_FUNCS + +/* The 'locale_t' object does not contain the names of the locale categories. + We have to associate them with the object through a hash table. + The hash table is defined in localename-table.[hc]. */ + +/* Returns the name of a given locale category in a given locale_t object, + allocated as a string with indefinite extent. */ +static const char * +get_locale_t_name (int category, locale_t locale) +{ + if (locale == LC_GLOBAL_LOCALE) + { + /* Query the global locale. */ + const char *name = setlocale_null (category); + if (name != NULL) + return struniq (name); + else + /* Should normally not happen. */ + return ""; + } + else + { + /* Look up the names in the hash table. */ + size_t hashcode = locale_hash_function (locale); + size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; + /* If the locale was not found in the table, return "". This can + happen if the application uses the original newlocale()/duplocale() + functions instead of the overridden ones. */ + const char *name = ""; + struct locale_hash_node *p; + /* Lock while looking up the hash node. */ + gl_rwlock_rdlock (locale_lock); + for (p = locale_hash_table[slot]; p != NULL; p = p->next) + if (p->locale == locale) + { + name = p->names.category_name[category]; + break; + } + gl_rwlock_unlock (locale_lock); + return name; + } +} + +# if !(defined newlocale && defined duplocale && defined freelocale) +# error "newlocale, duplocale, freelocale not being replaced as expected!" +# endif + +/* newlocale() override. */ +locale_t +newlocale (int category_mask, const char *name, locale_t base) +#undef newlocale +{ + struct locale_categories_names names; + struct locale_hash_node *node; + locale_t result; + + /* Make sure name has indefinite extent. */ + if (((LC_CTYPE_MASK | LC_NUMERIC_MASK | LC_TIME_MASK | LC_COLLATE_MASK + | LC_MONETARY_MASK | LC_MESSAGES_MASK) + & category_mask) != 0) + name = struniq (name); + + /* Determine the category names of the result. */ + if (((LC_CTYPE_MASK | LC_NUMERIC_MASK | LC_TIME_MASK | LC_COLLATE_MASK + | LC_MONETARY_MASK | LC_MESSAGES_MASK) + & ~category_mask) == 0) + { + /* Use name, ignore base. */ + int category; + + name = struniq (name); + for (category = 0; category < 6; category++) + names.category_name[category] = name; + } + else + { + /* Use base, possibly also name. */ + if (base == NULL) + { + int category; + + for (category = 0; category < 6; category++) + { + int mask; + + switch (category) + { + case LC_CTYPE: + mask = LC_CTYPE_MASK; + break; + case LC_NUMERIC: + mask = LC_NUMERIC_MASK; + break; + case LC_TIME: + mask = LC_TIME_MASK; + break; + case LC_COLLATE: + mask = LC_COLLATE_MASK; + break; + case LC_MONETARY: + mask = LC_MONETARY_MASK; + break; + case LC_MESSAGES: + mask = LC_MESSAGES_MASK; + break; + default: + abort (); + } + names.category_name[category] = + ((mask & category_mask) != 0 ? name : "C"); + } + } + else if (base == LC_GLOBAL_LOCALE) + { + int category; + + for (category = 0; category < 6; category++) + { + int mask; + + switch (category) + { + case LC_CTYPE: + mask = LC_CTYPE_MASK; + break; + case LC_NUMERIC: + mask = LC_NUMERIC_MASK; + break; + case LC_TIME: + mask = LC_TIME_MASK; + break; + case LC_COLLATE: + mask = LC_COLLATE_MASK; + break; + case LC_MONETARY: + mask = LC_MONETARY_MASK; + break; + case LC_MESSAGES: + mask = LC_MESSAGES_MASK; + break; + default: + abort (); + } + names.category_name[category] = + ((mask & category_mask) != 0 + ? name + : get_locale_t_name (category, LC_GLOBAL_LOCALE)); + } + } + else + { + /* Look up the names of base in the hash table. Like multiple calls + of get_locale_t_name, but locking only once. */ + struct locale_hash_node *p; + int category; + + /* Lock while looking up the hash node. */ + gl_rwlock_rdlock (locale_lock); + for (p = locale_hash_table[locale_hash_function (base) % LOCALE_HASH_TABLE_SIZE]; + p != NULL; + p = p->next) + if (p->locale == base) + break; + + for (category = 0; category < 6; category++) + { + int mask; + + switch (category) + { + case LC_CTYPE: + mask = LC_CTYPE_MASK; + break; + case LC_NUMERIC: + mask = LC_NUMERIC_MASK; + break; + case LC_TIME: + mask = LC_TIME_MASK; + break; + case LC_COLLATE: + mask = LC_COLLATE_MASK; + break; + case LC_MONETARY: + mask = LC_MONETARY_MASK; + break; + case LC_MESSAGES: + mask = LC_MESSAGES_MASK; + break; + default: + abort (); + } + names.category_name[category] = + ((mask & category_mask) != 0 + ? name + : (p != NULL ? p->names.category_name[category] : "")); + } + + gl_rwlock_unlock (locale_lock); + } + } + + node = (struct locale_hash_node *) malloc (sizeof (struct locale_hash_node)); + if (node == NULL) + /* errno is set to ENOMEM. */ + return NULL; + + result = newlocale (category_mask, name, base); + if (result == NULL) + { + free (node); + return NULL; + } + + /* Fill the hash node. */ + node->locale = result; + node->names = names; + + /* Insert it in the hash table. */ + { + size_t hashcode = locale_hash_function (result); + size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; + struct locale_hash_node *p; + + /* Lock while inserting the new node. */ + gl_rwlock_wrlock (locale_lock); + for (p = locale_hash_table[slot]; p != NULL; p = p->next) + if (p->locale == result) + { + /* This can happen if the application uses the original freelocale() + function instead of the overridden one. */ + p->names = node->names; + break; + } + if (p == NULL) + { + node->next = locale_hash_table[slot]; + locale_hash_table[slot] = node; + } + + gl_rwlock_unlock (locale_lock); + + if (p != NULL) + free (node); + } + + return result; +} + +/* duplocale() override. */ +locale_t +duplocale (locale_t locale) +#undef duplocale +{ + struct locale_hash_node *node; + locale_t result; + + if (locale == NULL) + /* Invalid argument. */ + abort (); + + node = (struct locale_hash_node *) malloc (sizeof (struct locale_hash_node)); + if (node == NULL) + /* errno is set to ENOMEM. */ + return NULL; + + result = duplocale (locale); + if (result == NULL) + { + free (node); + return NULL; + } + + /* Fill the hash node. */ + node->locale = result; + if (locale == LC_GLOBAL_LOCALE) + { + int category; + + for (category = 0; category < 6; category++) + node->names.category_name[category] = + get_locale_t_name (category, LC_GLOBAL_LOCALE); + + /* Lock before inserting the new node. */ + gl_rwlock_wrlock (locale_lock); + } + else + { + struct locale_hash_node *p; + + /* Lock once, for the lookup and the insertion. */ + gl_rwlock_wrlock (locale_lock); + + for (p = locale_hash_table[locale_hash_function (locale) % LOCALE_HASH_TABLE_SIZE]; + p != NULL; + p = p->next) + if (p->locale == locale) + break; + if (p != NULL) + node->names = p->names; + else + { + /* This can happen if the application uses the original + newlocale()/duplocale() functions instead of the overridden + ones. */ + int category; + + for (category = 0; category < 6; category++) + node->names.category_name[category] = ""; + } + } + + /* Insert it in the hash table. */ + { + size_t hashcode = locale_hash_function (result); + size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; + struct locale_hash_node *p; + + for (p = locale_hash_table[slot]; p != NULL; p = p->next) + if (p->locale == result) + { + /* This can happen if the application uses the original freelocale() + function instead of the overridden one. */ + p->names = node->names; + break; + } + if (p == NULL) + { + node->next = locale_hash_table[slot]; + locale_hash_table[slot] = node; + } + + gl_rwlock_unlock (locale_lock); + + if (p != NULL) + free (node); + } + + return result; +} + +/* freelocale() override. */ +void +freelocale (locale_t locale) +#undef freelocale +{ + if (locale == NULL || locale == LC_GLOBAL_LOCALE) + /* Invalid argument. */ + abort (); + + { + size_t hashcode = locale_hash_function (locale); + size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; + struct locale_hash_node *found; + struct locale_hash_node **p; + + found = NULL; + /* Lock while removing the hash node. */ + gl_rwlock_wrlock (locale_lock); + for (p = &locale_hash_table[slot]; *p != NULL; p = &(*p)->next) + if ((*p)->locale == locale) + { + found = *p; + *p = (*p)->next; + break; + } + gl_rwlock_unlock (locale_lock); + free (found); + } + + freelocale (locale); +} + +#endif + + +#if defined IN_LIBINTL || HAVE_GOOD_USELOCALE + +/* Like gl_locale_name_thread, except that the result is not in storage of + indefinite extent. */ +# if !defined IN_LIBINTL +static +# endif +const char * +gl_locale_name_thread_unsafe (int category, _GL_UNUSED const char *categoryname) +{ +# if HAVE_GOOD_USELOCALE + { + locale_t thread_locale = uselocale (NULL); + if (thread_locale != LC_GLOBAL_LOCALE) + { +# if __GLIBC__ >= 2 && !defined __UCLIBC__ + /* Work around an incorrect definition of the _NL_LOCALE_NAME macro in + glibc < 2.12. + See <https://sourceware.org/bugzilla/show_bug.cgi?id=10968>. */ + const char *name = + nl_langinfo (_NL_ITEM ((category), _NL_ITEM_INDEX (-1))); + if (name[0] == '\0') + /* Fallback code for glibc < 2.4, which did not implement + nl_langinfo (_NL_LOCALE_NAME (category)). */ + name = thread_locale->__names[category]; + return name; +# elif defined __linux__ && HAVE_LANGINFO_H && defined NL_LOCALE_NAME + /* musl libc */ + return nl_langinfo_l (NL_LOCALE_NAME (category), thread_locale); +# elif (defined __FreeBSD__ || defined __DragonFly__) || (defined __APPLE__ && defined __MACH__) + /* FreeBSD, Mac OS X */ + int mask; + + switch (category) + { + case LC_CTYPE: + mask = LC_CTYPE_MASK; + break; + case LC_NUMERIC: + mask = LC_NUMERIC_MASK; + break; + case LC_TIME: + mask = LC_TIME_MASK; + break; + case LC_COLLATE: + mask = LC_COLLATE_MASK; + break; + case LC_MONETARY: + mask = LC_MONETARY_MASK; + break; + case LC_MESSAGES: + mask = LC_MESSAGES_MASK; + break; + default: /* We shouldn't get here. */ + return ""; + } + return querylocale (mask, thread_locale); +# elif defined __sun +# if HAVE_GETLOCALENAME_L + /* Solaris >= 12. */ + return getlocalename_l (category, thread_locale); +# elif HAVE_SOLARIS114_LOCALES + /* Solaris >= 11.4. */ + void *lcp = (*thread_locale)->core.data->lcp; + if (lcp != NULL) + switch (category) + { + case LC_CTYPE: + case LC_NUMERIC: + case LC_TIME: + case LC_COLLATE: + case LC_MONETARY: + case LC_MESSAGES: + return ((const char * const *) lcp)[category]; + default: /* We shouldn't get here. */ + return ""; + } +# elif HAVE_NAMELESS_LOCALES + return get_locale_t_name (category, thread_locale); +# else + /* Solaris 11 OpenIndiana. + For the internal structure of locale objects, see + https://github.com/OpenIndiana/illumos-gate/blob/master/usr/src/lib/libc/port/locale/localeimpl.h */ + switch (category) + { + case LC_CTYPE: + case LC_NUMERIC: + case LC_TIME: + case LC_COLLATE: + case LC_MONETARY: + case LC_MESSAGES: + return ((const char * const *) thread_locale)[category]; + default: /* We shouldn't get here. */ + return ""; + } +# endif +# elif defined _AIX && HAVE_NAMELESS_LOCALES + return get_locale_t_name (category, thread_locale); +# elif defined __CYGWIN__ + /* Cygwin < 2.6 lacks uselocale and thread-local locales altogether. + Cygwin <= 2.6.1 lacks NL_LOCALE_NAME, requiring peeking inside + an opaque struct. */ +# ifdef NL_LOCALE_NAME + return nl_langinfo_l (NL_LOCALE_NAME (category), thread_locale); +# else + /* FIXME: Remove when we can assume new-enough Cygwin. */ + struct __locale_t { + char categories[7][32]; + }; + return ((struct __locale_t *) thread_locale)->categories[category]; +# endif +# elif defined __ANDROID__ + return MB_CUR_MAX == 4 ? "C.UTF-8" : "C"; +# endif + } + } +# endif + return NULL; +} + #endif +const char * +gl_locale_name_thread (int category, _GL_UNUSED const char *categoryname) +{ +#if HAVE_GOOD_USELOCALE + const char *name = gl_locale_name_thread_unsafe (category, categoryname); + if (name != NULL) + return struniq (name); +#endif + /* On WINDOWS_NATIVE, don't use GetThreadLocale() here, because when + SetThreadLocale has not been called - which is a very frequent case - + the value of GetThreadLocale() ignores past calls to 'setlocale'. */ + return NULL; +} + /* XPG3 defines the result of 'setlocale (category, NULL)' as: "Directs 'setlocale()' to query 'category' and return the current setting of 'local'." However it does not specify the exact format. Neither do SUSV2 and ISO C 99. So we can use this feature only on selected systems (e.g. those using GNU C Library). */ -#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2) +#if defined _LIBC || ((defined __GLIBC__ && __GLIBC__ >= 2) && !defined __UCLIBC__) # define HAVE_LOCALE_NULL #endif -/* Determine the current locale's name, and canonicalize it into XPG syntax - language[_territory[.codeset]][@modifier] - The codeset part in the result is not reliable; the locale_charset() - should be used for codeset information instead. - The result must not be freed; it is statically allocated. */ - const char * -_nl_locale_name (category, categoryname) - int category; - const char *categoryname; +gl_locale_name_posix (int category, _GL_UNUSED const char *categoryname) { - const char *retval; +#if defined WINDOWS_NATIVE + if (LC_MIN <= category && category <= LC_MAX) + { + const char *locname = + /* setlocale_null (category) is identical to setlocale (category, NULL) + on this platform. */ + setlocale (category, NULL); -#ifndef WIN32 + /* Convert locale name to LCID. We don't want to use + LocaleNameToLCID because (a) it is only available since Vista, + and (b) it doesn't accept locale names returned by 'setlocale'. */ + LCID lcid = get_lcid (locname); - /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. - On some systems this can be done by the 'setlocale' function itself. */ -# if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL - retval = setlocale (category, NULL); -# else - /* Setting of LC_ALL overwrites all other. */ - retval = getenv ("LC_ALL"); - if (retval == NULL || retval[0] == '\0') - { - /* Next comes the name of the desired category. */ - retval = getenv (categoryname); - if (retval == NULL || retval[0] == '\0') - { - /* Last possibility is the LANG environment variable. */ - retval = getenv ("LANG"); - if (retval == NULL || retval[0] == '\0') - /* We use C as the default domain. POSIX says this is - implementation defined. */ - retval = "C"; - } + if (lcid > 0) + return gl_locale_name_from_win32_LCID (lcid); } -# endif - - return retval; +#endif + { + const char *locname; -#else /* WIN32 */ + /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. + On some systems this can be done by the 'setlocale' function itself. */ +#if defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL + locname = setlocale_null (category); +#else + /* On other systems we ignore what setlocale reports and instead look at the + environment variables directly. This is necessary + 1. on systems which have a facility for customizing the default locale + (Mac OS X, native Windows, Cygwin) and where the system's setlocale() + function ignores this default locale (Mac OS X, Cygwin), in two cases: + a. when the user missed to use the setlocale() override from libintl + (for example by not including <libintl.h>), + b. when setlocale supports only the "C" locale, such as on Cygwin + 1.5.x. In this case even the override from libintl cannot help. + 2. on all systems where setlocale supports only the "C" locale. */ + /* Strictly speaking, it is a POSIX violation to look at the environment + variables regardless whether setlocale has been called or not. POSIX + says: + "For C-language programs, the POSIX locale shall be the + default locale when the setlocale() function is not called." + But we assume that all programs that use internationalized APIs call + setlocale (LC_ALL, ""). */ + locname = gl_locale_name_environ (category, categoryname); +#endif + /* Convert the locale name from the format returned by setlocale() or found + in the environment variables to the XPG syntax. */ +#if defined WINDOWS_NATIVE + if (locname != NULL) + { + /* Convert locale name to LCID. We don't want to use + LocaleNameToLCID because (a) it is only available since Vista, + and (b) it doesn't accept locale names returned by 'setlocale'. */ + LCID lcid = get_lcid (locname); - /* Return an XPG style locale name language[_territory][@modifier]. - Don't even bother determining the codeset; it's not useful in this - context, because message catalogs are not specific to a single - codeset. */ + if (lcid > 0) + return gl_locale_name_from_win32_LCID (lcid); + } +#endif + return locname; + } +} - LCID lcid; - LANGID langid; - int primary, sub; +const char * +gl_locale_name_environ (_GL_UNUSED int category, const char *categoryname) +{ + const char *retval; - /* Let the user override the system settings through environment - variables, as on POSIX systems. */ + /* Setting of LC_ALL overrides all other. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; + /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; + /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') - return retval; + { +#if HAVE_CFPREFERENCESCOPYAPPVALUE + /* Mac OS X 10.2 or newer. + Ignore invalid LANG value set by the Terminal application. */ + if (strcmp (retval, "UTF-8") != 0) +#endif +#if defined __CYGWIN__ + /* Cygwin. + Ignore dummy LANG value set by ~/.profile. */ + if (strcmp (retval, "C.UTF-8") != 0) +#endif + return retval; + } - /* Use native Win32 API locale ID. */ - lcid = GetThreadLocale (); + return NULL; +} - /* Strip off the sorting rules, keep only the language part. */ - langid = LANGIDFROMLCID (lcid); +const char * +gl_locale_name_default (void) +{ + /* POSIX:2001 says: + "All implementations shall define a locale as the default locale, to be + invoked when no environment variables are set, or set to the empty + string. This default locale can be the POSIX locale or any other + implementation-defined locale. Some implementations may provide + facilities for local installation administrators to set the default + locale, customizing it for each location. POSIX:2001 does not require + such a facility. - /* Split into language and territory part. */ - primary = PRIMARYLANGID (langid); - sub = SUBLANGID (langid); + The systems with such a facility are Mac OS X and Windows: They provide a + GUI that allows the user to choose a locale. + - On Mac OS X, by default, none of LC_* or LANG are set. Starting with + Mac OS X 10.4 or 10.5, LANG is set for processes launched by the + 'Terminal' application (but sometimes to an incorrect value "UTF-8"). + When no environment variable is set, setlocale (LC_ALL, "") uses the + "C" locale. + - On native Windows, by default, none of LC_* or LANG are set. + When no environment variable is set, setlocale (LC_ALL, "") uses the + locale chosen by the user. + - On Cygwin 1.5.x, by default, none of LC_* or LANG are set. + When no environment variable is set, setlocale (LC_ALL, "") uses the + "C" locale. + - On Cygwin 1.7, by default, LANG is set to "C.UTF-8" when the default + ~/.profile is executed. + When no environment variable is set, setlocale (LC_ALL, "") uses the + "C.UTF-8" locale, which operates in the same way as the "C" locale. + */ - /* Dispatch on language. - See also http://www.unicode.org/unicode/onlinedat/languages.html . - For details about languages, see http://www.ethnologue.com/ . */ - switch (primary) - { - case LANG_AFRIKAANS: return "af_ZA"; - case LANG_ALBANIAN: return "sq_AL"; - case 0x5e: /* AMHARIC */ return "am_ET"; - case LANG_ARABIC: - switch (sub) - { - case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; - case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; - case SUBLANG_ARABIC_EGYPT: return "ar_EG"; - case SUBLANG_ARABIC_LIBYA: return "ar_LY"; - case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; - case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; - case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; - case SUBLANG_ARABIC_OMAN: return "ar_OM"; - case SUBLANG_ARABIC_YEMEN: return "ar_YE"; - case SUBLANG_ARABIC_SYRIA: return "ar_SY"; - case SUBLANG_ARABIC_JORDAN: return "ar_JO"; - case SUBLANG_ARABIC_LEBANON: return "ar_LB"; - case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; - case SUBLANG_ARABIC_UAE: return "ar_AE"; - case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; - case SUBLANG_ARABIC_QATAR: return "ar_QA"; - } - return "ar"; - case LANG_ARMENIAN: return "hy_AM"; - case LANG_ASSAMESE: return "as_IN"; - case LANG_AZERI: - switch (sub) - { - /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ - case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; - case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; - } - return "az"; - case LANG_BASQUE: - return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ - case LANG_BELARUSIAN: return "be_BY"; - case LANG_BENGALI: return "bn_IN"; - case LANG_BULGARIAN: return "bg_BG"; - case 0x55: /* BURMESE */ return "my_MM"; - case 0x53: /* CAMBODIAN */ return "km_KH"; - case LANG_CATALAN: return "ca_ES"; - case 0x5c: /* CHEROKEE */ return "chr_US"; - case LANG_CHINESE: - switch (sub) - { - case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW"; - case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN"; - case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; - case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; - case SUBLANG_CHINESE_MACAU: return "zh_MO"; - } - return "zh"; - case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN - * What used to be called Serbo-Croatian - * should really now be two separate - * languages because of political reasons. - * (Says tml, who knows nothing about Serbian - * or Croatian.) - * (I can feel those flames coming already.) - */ - switch (sub) - { - case SUBLANG_DEFAULT: return "hr_HR"; - case SUBLANG_SERBIAN_LATIN: return "sr_YU"; - case SUBLANG_SERBIAN_CYRILLIC: return "sr_YU@cyrillic"; - } - return "hr"; - case LANG_CZECH: return "cs_CZ"; - case LANG_DANISH: return "da_DK"; - case LANG_DIVEHI: return "div_MV"; - case LANG_DUTCH: - switch (sub) - { - case SUBLANG_DUTCH: return "nl_NL"; - case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; - } - return "nl"; - case 0x66: /* EDO */ return "bin_NG"; - case LANG_ENGLISH: - switch (sub) - { - /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought - * English was the language spoken in England. - * Oh well. - */ - case SUBLANG_ENGLISH_US: return "en_US"; - case SUBLANG_ENGLISH_UK: return "en_GB"; - case SUBLANG_ENGLISH_AUS: return "en_AU"; - case SUBLANG_ENGLISH_CAN: return "en_CA"; - case SUBLANG_ENGLISH_NZ: return "en_NZ"; - case SUBLANG_ENGLISH_EIRE: return "en_IE"; - case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; - case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; - case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ - case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; - case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; - case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; - case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; - } - return "en"; - case LANG_ESTONIAN: return "et_EE"; - case LANG_FAEROESE: return "fo_FO"; - case LANG_FARSI: return "fa_IR"; - case LANG_FINNISH: return "fi_FI"; - case LANG_FRENCH: - switch (sub) - { - case SUBLANG_FRENCH: return "fr_FR"; - case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; - case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; - case SUBLANG_FRENCH_SWISS: return "fr_CH"; - case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; - case SUBLANG_FRENCH_MONACO: return "fr_MC"; - } - return "fr"; - case 0x62: /* FRISIAN */ return "fy_NL"; - case 0x67: /* FULFULDE */ return "ful_NG"; - case 0x3c: /* GAELIC */ - switch (sub) - { - case 0x01: /* SCOTTISH */ return "gd_GB"; - case 0x02: /* IRISH */ return "ga_IE"; - } - return "C"; - case LANG_GALICIAN: return "gl_ES"; - case LANG_GEORGIAN: return "ka_GE"; - case LANG_GERMAN: - switch (sub) - { - case SUBLANG_GERMAN: return "de_DE"; - case SUBLANG_GERMAN_SWISS: return "de_CH"; - case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; - case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; - case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; - } - return "de"; - case LANG_GREEK: return "el_GR"; - case 0x74: /* GUARANI */ return "gn_PY"; - case LANG_GUJARATI: return "gu_IN"; - case 0x68: /* HAUSA */ return "ha_NG"; - case 0x75: /* HAWAIIAN */ - /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) - or Hawaii Creole English ("cpe_US", 600000 speakers)? */ - return "cpe_US"; - case LANG_HEBREW: return "he_IL"; - case LANG_HINDI: return "hi_IN"; - case LANG_HUNGARIAN: return "hu_HU"; - case 0x69: /* IBIBIO */ return "nic_NG"; - case LANG_ICELANDIC: return "is_IS"; - case 0x70: /* IGBO */ return "ibo_NG"; - case LANG_INDONESIAN: return "id_ID"; - case 0x5d: /* INUKTITUT */ return "iu_CA"; - case LANG_ITALIAN: - switch (sub) - { - case SUBLANG_ITALIAN: return "it_IT"; - case SUBLANG_ITALIAN_SWISS: return "it_CH"; - } - return "it"; - case LANG_JAPANESE: return "ja_JP"; - case LANG_KANNADA: return "kn_IN"; - case 0x71: /* KANURI */ return "kau_NG"; - case LANG_KASHMIRI: - switch (sub) - { - case SUBLANG_DEFAULT: return "ks_PK"; - case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; - } - return "ks"; - case LANG_KAZAK: return "kk_KZ"; - case LANG_KONKANI: - /* FIXME: Adjust this when such locales appear on Unix. */ - return "kok_IN"; - case LANG_KOREAN: return "ko_KR"; - case LANG_KYRGYZ: return "ky_KG"; - case 0x54: /* LAO */ return "lo_LA"; - case 0x76: /* LATIN */ return "la_VA"; - case LANG_LATVIAN: return "lv_LV"; - case LANG_LITHUANIAN: return "lt_LT"; - case LANG_MACEDONIAN: return "mk_MK"; - case LANG_MALAY: - switch (sub) - { - case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; - case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; - } - return "ms"; - case LANG_MALAYALAM: return "ml_IN"; - case 0x3a: /* MALTESE */ return "mt_MT"; - case LANG_MANIPURI: - /* FIXME: Adjust this when such locales appear on Unix. */ - return "mni_IN"; - case LANG_MARATHI: return "mr_IN"; - case LANG_MONGOLIAN: - return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ - case LANG_NEPALI: - switch (sub) - { - case SUBLANG_DEFAULT: return "ne_NP"; - case SUBLANG_NEPALI_INDIA: return "ne_IN"; - } - return "ne"; - case LANG_NORWEGIAN: - switch (sub) - { - case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO"; - case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; - } - return "no"; - case LANG_ORIYA: return "or_IN"; - case 0x72: /* OROMO */ return "om_ET"; - case 0x79: /* PAPIAMENTU */ return "pap_AN"; - case 0x63: /* PASHTO */ - return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ - case LANG_POLISH: return "pl_PL"; - case LANG_PORTUGUESE: - switch (sub) - { - case SUBLANG_PORTUGUESE: return "pt_PT"; - /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. - Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ - case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; - } - return "pt"; - case LANG_PUNJABI: return "pa_IN"; - case 0x17: /* RHAETO-ROMANCE */ return "rm_CH"; - case LANG_ROMANIAN: return "ro_RO"; - case LANG_RUSSIAN: - return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA". */ - case 0x3b: /* SAMI */ return "se_NO"; - case LANG_SANSKRIT: return "sa_IN"; - case LANG_SINDHI: return "sd"; - case 0x5b: /* SINHALESE */ return "si_LK"; - case LANG_SLOVAK: return "sk_SK"; - case LANG_SLOVENIAN: return "sl_SI"; - case 0x77: /* SOMALI */ return "so_SO"; - case LANG_SORBIAN: - /* FIXME: Adjust this when such locales appear on Unix. */ - return "wen_DE"; - case LANG_SPANISH: - switch (sub) - { - case SUBLANG_SPANISH: return "es_ES"; - case SUBLANG_SPANISH_MEXICAN: return "es_MX"; - case SUBLANG_SPANISH_MODERN: - return "es_ES@modern"; /* not seen on Unix */ - case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; - case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; - case SUBLANG_SPANISH_PANAMA: return "es_PA"; - case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; - case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; - case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; - case SUBLANG_SPANISH_PERU: return "es_PE"; - case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; - case SUBLANG_SPANISH_ECUADOR: return "es_EC"; - case SUBLANG_SPANISH_CHILE: return "es_CL"; - case SUBLANG_SPANISH_URUGUAY: return "es_UY"; - case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; - case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; - case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; - case SUBLANG_SPANISH_HONDURAS: return "es_HN"; - case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; - case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; - } - return "es"; - case 0x30: /* SUTU */ return "bnt_TZ"; - case LANG_SWAHILI: return "sw_KE"; - case LANG_SWEDISH: - switch (sub) - { - case SUBLANG_DEFAULT: return "sv_SE"; - case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; - } - return "sv"; - case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */ - case 0x64: /* TAGALOG */ return "tl_PH"; - case 0x28: /* TAJIK */ return "tg_TJ"; - case 0x5f: /* TAMAZIGHT */ return "ber_MA"; - case LANG_TAMIL: - return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ - case LANG_TATAR: return "tt_RU"; - case LANG_TELUGU: return "te_IN"; - case LANG_THAI: return "th_TH"; - case 0x51: /* TIBETAN */ return "bo_CN"; - case 0x73: /* TIGRINYA */ return "ti_ET"; - case 0x31: /* TSONGA */ return "ts_ZA"; - case LANG_TURKISH: return "tr_TR"; - case 0x42: /* TURKMEN */ return "tk_TM"; - case LANG_UKRAINIAN: return "uk_UA"; - case LANG_URDU: - switch (sub) - { - case SUBLANG_URDU_PAKISTAN: return "ur_PK"; - case SUBLANG_URDU_INDIA: return "ur_IN"; - } - return "ur"; - case LANG_UZBEK: - switch (sub) - { - /* FIXME: Adjust this when Uzbek locales appear on Unix. */ - case SUBLANG_UZBEK_LATIN: return "uz_UZ@latin"; - case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; - } - return "uz"; - case 0x33: /* VENDA */ return "ven_ZA"; - case LANG_VIETNAMESE: return "vi_VN"; - case 0x52: /* WELSH */ return "cy_GB"; - case 0x34: /* XHOSA */ return "xh_ZA"; - case 0x78: /* YI */ return "sit_CN"; - case 0x3d: /* YIDDISH */ return "yi_IL"; - case 0x6a: /* YORUBA */ return "yo_NG"; - case 0x35: /* ZULU */ return "zu_ZA"; - default: return "C"; - } +#if !(HAVE_CFPREFERENCESCOPYAPPVALUE || defined WINDOWS_NATIVE || defined __CYGWIN__) + + /* The system does not have a way of setting the locale, other than the + POSIX specified environment variables. We use C as default locale. */ + return "C"; + +#else + /* Return an XPG style locale name language[_territory][@modifier]. + Don't even bother determining the codeset; it's not useful in this + context, because message catalogs are not specific to a single + codeset. */ + +# if HAVE_CFPREFERENCESCOPYAPPVALUE + /* Mac OS X 10.4 or newer */ + /* Don't use the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, + because in macOS 10.13.4 it has the following behaviour: + When two or more languages are specified in the + "System Preferences > Language & Region > Preferred Languages" panel, + it returns en_CC where CC is the territory (even when English is not among + the preferred languages!). What we want instead is what + CFLocaleCopyCurrent returned in earlier macOS releases and what + CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the + first among the preferred languages and CC is the territory. */ + { + /* Cache the locale name, since CoreFoundation calls are expensive. */ + static const char *cached_localename; + + if (cached_localename == NULL) + { + char namebuf[256]; + CFTypeRef value = + CFPreferencesCopyAppValue (CFSTR ("AppleLocale"), + kCFPreferencesCurrentApplication); + if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) + { + CFStringRef name = (CFStringRef)value; + + if (CFStringGetCString (name, namebuf, sizeof (namebuf), + kCFStringEncodingASCII)) + { + gl_locale_name_canonicalize (namebuf); + cached_localename = strdup (namebuf); + } + } + if (cached_localename == NULL) + cached_localename = "C"; + } + return cached_localename; + } + +# endif + +# if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ + { + LCID lcid; + + /* Use native Windows API locale ID. */ + lcid = GetThreadLocale (); + + return gl_locale_name_from_win32_LCID (lcid); + } +# endif #endif } + +/* Determine the current locale's name, and canonicalize it into XPG syntax + language[_territory][.codeset][@modifier] + The codeset part in the result is not reliable; the locale_charset() + should be used for codeset information instead. + The result must not be freed; it is statically allocated. */ + +const char * +gl_locale_name (int category, const char *categoryname) +{ + const char *retval; + + retval = gl_locale_name_thread (category, categoryname); + if (retval != NULL) + return retval; + + retval = gl_locale_name_posix (category, categoryname); + if (retval != NULL) + return retval; + + return gl_locale_name_default (); +} diff --git a/lib/intl/log.c b/lib/intl/log.c index e527e879c..a45dd769e 100644 --- a/lib/intl/log.c +++ b/lib/intl/log.c @@ -1,22 +1,18 @@ -/* log.c - Log file output. */ +/* Log file output. + Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc. -/* Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ @@ -28,79 +24,109 @@ #include <stdlib.h> #include <string.h> +/* Handle multi-threaded applications. */ +#ifdef _LIBC +# include <bits/libc-lock.h> +#else +# include "lock.h" +#endif + +/* Separator between msgctxt and msgid in .mo files. */ +#define MSGCTXT_SEPARATOR '\004' /* EOT */ + /* Print an ASCII string with quotes and escape sequences where needed. */ static void -print_escaped (stream, str) - FILE *stream; - const char *str; +print_escaped (FILE *stream, const char *str, const char *str_end) { putc ('"', stream); - for (; *str != '\0'; str++) + for (; str != str_end; str++) if (*str == '\n') { - fputs ("\\n\"", stream); - if (str[1] == '\0') - return; - fputs ("\n\"", stream); + fputs ("\\n\"", stream); + if (str + 1 == str_end) + return; + fputs ("\n\"", stream); } else { - if (*str == '"' || *str == '\\') - putc ('\\', stream); - putc (*str, stream); + if (*str == '"' || *str == '\\') + putc ('\\', stream); + putc (*str, stream); } putc ('"', stream); } -/* Add to the log file an entry denoting a failed translation. */ -void -_nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural) - const char *logfilename; - const char *domainname; - const char *msgid1; - const char *msgid2; - int plural; +static char *last_logfilename = NULL; +static FILE *last_logfile = NULL; +#ifdef _LIBC +__libc_lock_define_initialized (static, lock) +#endif + +static inline void +_nl_log_untranslated_locked (const char *logfilename, const char *domainname, + const char *msgid1, const char *msgid2, int plural) { - static char *last_logfilename = NULL; - static FILE *last_logfile = NULL; FILE *logfile; + const char *separator; /* Can we reuse the last opened logfile? */ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0) { /* Close the last used logfile. */ if (last_logfilename != NULL) - { - if (last_logfile != NULL) - { - fclose (last_logfile); - last_logfile = NULL; - } - free (last_logfilename); - last_logfilename = NULL; - } + { + if (last_logfile != NULL) + { + fclose (last_logfile); + last_logfile = NULL; + } + free (last_logfilename); + last_logfilename = NULL; + } /* Open the logfile. */ last_logfilename = (char *) malloc (strlen (logfilename) + 1); if (last_logfilename == NULL) - return; + return; strcpy (last_logfilename, logfilename); last_logfile = fopen (logfilename, "a"); if (last_logfile == NULL) - return; + return; } logfile = last_logfile; fprintf (logfile, "domain "); - print_escaped (logfile, domainname); + print_escaped (logfile, domainname, domainname + strlen (domainname)); + separator = strchr (msgid1, MSGCTXT_SEPARATOR); + if (separator != NULL) + { + /* The part before the MSGCTXT_SEPARATOR is the msgctxt. */ + fprintf (logfile, "\nmsgctxt "); + print_escaped (logfile, msgid1, separator); + msgid1 = separator + 1; + } fprintf (logfile, "\nmsgid "); - print_escaped (logfile, msgid1); + print_escaped (logfile, msgid1, msgid1 + strlen (msgid1)); if (plural) { fprintf (logfile, "\nmsgid_plural "); - print_escaped (logfile, msgid2); + print_escaped (logfile, msgid2, msgid2 + strlen (msgid2)); fprintf (logfile, "\nmsgstr[0] \"\"\n"); } else fprintf (logfile, "\nmsgstr \"\"\n"); putc ('\n', logfile); } + +/* Add to the log file an entry denoting a failed translation. */ +void +_nl_log_untranslated (const char *logfilename, const char *domainname, + const char *msgid1, const char *msgid2, int plural) +{ +#ifdef _LIBC + __libc_lock_lock (lock); +#endif + _nl_log_untranslated_locked (logfilename, domainname, msgid1, msgid2, plural); +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif +} diff --git a/lib/intl/ngettext.c b/lib/intl/ngettext.c index 95aafccdd..565e47da8 100644 --- a/lib/intl/ngettext.c +++ b/lib/intl/ngettext.c @@ -1,22 +1,18 @@ -/* ngettext.c - Implementation of ngettext(3) function. */ +/* Implementation of ngettext(3) function. + Copyright (C) 1995-2016 Free Software Foundation, Inc. -/* Copyright (C) 1995, 1997, 2000, 2001, 2002, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -56,10 +52,7 @@ LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * -NGETTEXT (msgid1, msgid2, n) - const char *msgid1; - const char *msgid2; - unsigned long int n; +NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n) { return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); } diff --git a/lib/intl/os2compat.c b/lib/intl/os2compat.c index 1aa9dff84..37a59d3c5 100644 --- a/lib/intl/os2compat.c +++ b/lib/intl/os2compat.c @@ -1,22 +1,18 @@ -/* os2compat.c - OS/2 compatibility functions. */ +/* OS/2 compatibility functions. + Copyright (C) 2001-2002 Free Software Foundation, Inc. -/* Copyright (C) 2001-2002, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #define OS2_AWARE #ifdef HAVE_CONFIG_H diff --git a/lib/intl/os2compat.h b/lib/intl/os2compat.h index 8de318307..d762615ce 100644 --- a/lib/intl/os2compat.h +++ b/lib/intl/os2compat.h @@ -1,37 +1,33 @@ -/* os2compat.h - OS/2 compatibility defines. */ +/* OS/2 compatibility defines. + This file is intended to be included from config.h + Copyright (C) 2001-2002 Free Software Foundation, Inc. -/* This file is intended to be included from config.h - Copyright (C) 2001-2002, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* When included from os2compat.h we need all the original definitions */ #ifndef OS2_AWARE #undef LIBDIR -#define LIBDIR _nlos2_libdir +#define LIBDIR _nlos2_libdir extern char *_nlos2_libdir; #undef LOCALEDIR -#define LOCALEDIR _nlos2_localedir +#define LOCALEDIR _nlos2_localedir extern char *_nlos2_localedir; #undef LOCALE_ALIAS_PATH -#define LOCALE_ALIAS_PATH _nlos2_localealiaspath +#define LOCALE_ALIAS_PATH _nlos2_localealiaspath extern char *_nlos2_localealiaspath; #endif diff --git a/lib/intl/osdep.c b/lib/intl/osdep.c index b0300222d..f8f26a765 100644 --- a/lib/intl/osdep.c +++ b/lib/intl/osdep.c @@ -1,24 +1,22 @@ -/* osdep.c - OS dependent parts of libintl. */ +/* OS dependent parts of libintl. + Copyright (C) 2001-2002, 2006, 2012, 2015 Free Software Foundation, Inc. -/* Copyright (C) 2001-2002, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ -#if defined __EMX__ +#if defined __CYGWIN__ || defined __MINGW32__ +# include "intl-exports.c" +#elif defined __EMX__ && !defined __KLIBC__ # include "os2compat.c" #else /* Avoid AIX compiler warning. */ diff --git a/lib/intl/plural-exp.c b/lib/intl/plural-exp.c index 9ed3b16ff..00183dca4 100644 --- a/lib/intl/plural-exp.c +++ b/lib/intl/plural-exp.c @@ -1,23 +1,19 @@ -/* plural-exp.c - Expression parsing for plural form selection. */ - -/* Copyright (C) 2000, 2001, 2005-2009 Free Software Foundation, Inc. +/* Expression parsing for plural form selection. + Copyright (C) 2000-2016, 2021 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -29,8 +25,7 @@ #include "plural-exp.h" -#if (defined __GNUC__ && !defined __APPLE_CC__) \ - || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) +#if HAVE_STRUCT_INITIALIZER /* These structs are the constant expression for the germanic plural form determination. It represents the expression "n != 1". */ @@ -48,7 +43,7 @@ static const struct expression plone = .num = 1 } }; -struct expression GERMANIC_PLURAL = +const struct expression GERMANIC_PLURAL = { .nargs = 2, .operation = not_equal, @@ -74,7 +69,7 @@ static struct expression plone; struct expression GERMANIC_PLURAL; static void -init_germanic_plural () +init_germanic_plural (void) { if (plone.val.num == 0) { @@ -98,10 +93,9 @@ init_germanic_plural () void internal_function -EXTRACT_PLURAL_EXPRESSION (nullentry, pluralp, npluralsp) - const char *nullentry; - struct expression **pluralp; - unsigned long int *npluralsp; +EXTRACT_PLURAL_EXPRESSION (const char *nullentry, + const struct expression **pluralp, + unsigned long int *npluralsp) { if (nullentry != NULL) { @@ -124,12 +118,7 @@ EXTRACT_PLURAL_EXPRESSION (nullentry, pluralp, npluralsp) ++nplurals; if (!(*nplurals >= '0' && *nplurals <= '9')) goto no_plural; -#if defined HAVE_STRTOUL || defined _LIBC n = strtoul (nplurals, &endp, 10); -#else - for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) - n = n * 10 + (*endp - '0'); -#endif if (nplurals == endp) goto no_plural; *npluralsp = n; diff --git a/lib/intl/plural-exp.h b/lib/intl/plural-exp.h index dcb0dae0b..c578bcacd 100644 --- a/lib/intl/plural-exp.h +++ b/lib/intl/plural-exp.h @@ -1,35 +1,23 @@ -/* plural-exp.h - defines for expression parsing and evaluation for plural form selection. */ - -/* Copyright (C) 2000, 2001, 2002, 2005-2009 Free Software Foundation, Inc. +/* Expression parsing and evaluation for plural form selection. + Copyright (C) 2000-2016, 2019 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _PLURAL_EXP_H #define _PLURAL_EXP_H -#ifndef PARAMS -# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES -# define PARAMS(args) args -# else -# define PARAMS(args) () -# endif -#endif - #ifndef internal_function # define internal_function #endif @@ -38,36 +26,42 @@ # define attribute_hidden #endif +#ifdef __cplusplus +extern "C" { +#endif + + +enum expression_operator +{ + /* Without arguments: */ + var, /* The variable "n". */ + num, /* Decimal number. */ + /* Unary operators: */ + lnot, /* Logical NOT. */ + /* Binary operators: */ + mult, /* Multiplication. */ + divide, /* Division. */ + module, /* Modulo operation. */ + plus, /* Addition. */ + minus, /* Subtraction. */ + less_than, /* Comparison. */ + greater_than, /* Comparison. */ + less_or_equal, /* Comparison. */ + greater_or_equal, /* Comparison. */ + equal, /* Comparison for equality. */ + not_equal, /* Comparison for inequality. */ + land, /* Logical AND. */ + lor, /* Logical OR. */ + /* Ternary operators: */ + qmop /* Question mark operator. */ +}; /* This is the representation of the expressions to determine the plural form. */ struct expression { int nargs; /* Number of arguments. */ - enum operator - { - /* Without arguments: */ - var, /* The variable "n". */ - num, /* Decimal number. */ - /* Unary operators: */ - lnot, /* Logical NOT. */ - /* Binary operators: */ - mult, /* Multiplication. */ - divide, /* Division. */ - module, /* Modulo operation. */ - plus, /* Addition. */ - minus, /* Subtraction. */ - less_than, /* Comparison. */ - greater_than, /* Comparison. */ - less_or_equal, /* Comparison. */ - greater_or_equal, /* Comparison. */ - equal, /* Comparison for equality. */ - not_equal, /* Comparison for inequality. */ - land, /* Logical AND. */ - lor, /* Logical OR. */ - /* Ternary operators: */ - qmop /* Question mark operator. */ - } operation; + enum expression_operator operation; union { unsigned long int num; /* Number value for `num'. */ @@ -111,18 +105,38 @@ struct parse_args # define EXTRACT_PLURAL_EXPRESSION extract_plural_expression #endif -extern void FREE_EXPRESSION PARAMS ((struct expression *exp)) +#if (defined __GNUC__ && !(defined __APPLE_CC_ && __APPLE_CC__ > 1) \ + && !defined __cplusplus) \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L \ + && !defined __HP_cc) \ + || (defined __SUNPRO_C && 0x560 <= __SUNPRO_C \ + && !(defined __STDC__ && __STDC__ == 1)) +# define HAVE_STRUCT_INITIALIZER 1 +#else +# define HAVE_STRUCT_INITIALIZER 0 +#endif + +extern void FREE_EXPRESSION (struct expression *exp) internal_function; -extern int PLURAL_PARSE PARAMS ((void *arg)); +extern int PLURAL_PARSE (struct parse_args *arg); +#if HAVE_STRUCT_INITIALIZER +extern const struct expression GERMANIC_PLURAL attribute_hidden; +#else extern struct expression GERMANIC_PLURAL attribute_hidden; -extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry, - struct expression **pluralp, - unsigned long int *npluralsp)) +#endif +extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry, + const struct expression **pluralp, + unsigned long int *npluralsp) internal_function; -#if !defined (_LIBC) && !defined (IN_LIBINTL) -extern unsigned long int plural_eval PARAMS ((struct expression *pexp, - unsigned long int n)); +#if !defined (_LIBC) && !defined (IN_LIBINTL) && !defined (IN_LIBGLOCALE) +extern unsigned long int plural_eval (const struct expression *pexp, + unsigned long int n); +#endif + + +#ifdef __cplusplus +} #endif #endif /* _PLURAL_EXP_H */ diff --git a/lib/intl/plural.c b/lib/intl/plural.c index a0031513c..70afef06a 100644 --- a/lib/intl/plural.c +++ b/lib/intl/plural.c @@ -1,31 +1,42 @@ -/* A Bison parser, made by GNU Bison 2.0. */ +/* A Bison parser, made by GNU Bison 3.8.2. */ -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +/* Bison implementation for Yacc-like parsers in C - This file is part of GNU Bash. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. - Bash is free software: you can redistribute it and/or modify + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. -/* Written by Richard Stallman by simplifying the original so called - ``semantic'' parser. */ + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local @@ -34,81 +45,51 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ -/* Identify Bison output. */ -#define YYBISON 1 +/* Identify Bison output, and Bison version. */ +#define YYBISON 30802 + +/* Bison version string. */ +#define YYBISON_VERSION "3.8.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ -#define YYPURE 1 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* Substitute the variable and function names. */ -#define yyparse __gettextparse -#define yylex __gettextlex -#define yyerror __gettexterror -#define yylval __gettextlval -#define yychar __gettextchar -#define yydebug __gettextdebug -#define yynerrs __gettextnerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - EQUOP2 = 258, - CMPOP2 = 259, - ADDOP2 = 260, - MULOP2 = 261, - NUMBER = 262 - }; -#endif -#define EQUOP2 258 -#define CMPOP2 259 -#define ADDOP2 260 -#define MULOP2 261 -#define NUMBER 262 +#define YYPURE 2 +/* Push parsers. */ +#define YYPUSH 0 +/* Pull parsers. */ +#define YYPULL 1 -/* Copy the first part of user declarations. */ -#line 1 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" +/* Substitute the variable and function names. */ +#define yyparse __gettextparse +#define yylex __gettextlex +#define yyerror __gettexterror +#define yydebug __gettextdebug +#define yynerrs __gettextnerrs -/* plural.y - Expression parsing for plural form selection. */ +/* First part of user prologue. */ +#line 1 "plural.y" -/* Copyright (C) 2000, 2001, 2005-2009 Free Software Foundation, Inc. +/* Expression parsing for plural form selection. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ - -/* The bison generated parser uses alloca. AIX 3 forces us to put this - declaration at the beginning of the file. The declaration in bison's - skeleton file comes too late. This must come before <config.h> - because <config.h> may include arbitrary system headers. */ -#if defined _AIX && !defined __GNUC__ - #pragma alloca -#endif + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -116,7 +97,9 @@ #include <stddef.h> #include <stdlib.h> +#include <string.h> #include "plural-exp.h" +#include "attribute.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ @@ -124,65 +107,70 @@ # define __gettextparse PLURAL_PARSE #endif -#define YYLEX_PARAM &((struct parse_args *) arg)->cp -#define YYPARSE_PARAM arg - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +#line 112 "plural.c" -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 51 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" -typedef union YYSTYPE { - unsigned long int num; - enum operator op; - struct expression *exp; -} YYSTYPE; -/* Line 190 of yacc.c. */ -#line 152 "/usr/src/local/bash/bash-20080814/lib/intl/plural.c" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif +# ifndef YY_NULLPTR +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# else +# define YY_NULLPTR ((void*)0) +# endif +# endif +#include "plural.h" +/* Symbol kind. */ +enum yysymbol_kind_t +{ + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_3_ = 3, /* '?' */ + YYSYMBOL_4_ = 4, /* ':' */ + YYSYMBOL_5_ = 5, /* '|' */ + YYSYMBOL_6_ = 6, /* '&' */ + YYSYMBOL_7_ = 7, /* '!' */ + YYSYMBOL_EQUOP2 = 8, /* EQUOP2 */ + YYSYMBOL_CMPOP2 = 9, /* CMPOP2 */ + YYSYMBOL_ADDOP2 = 10, /* ADDOP2 */ + YYSYMBOL_MULOP2 = 11, /* MULOP2 */ + YYSYMBOL_NUMBER = 12, /* NUMBER */ + YYSYMBOL_13_n_ = 13, /* 'n' */ + YYSYMBOL_14_ = 14, /* '(' */ + YYSYMBOL_15_ = 15, /* ')' */ + YYSYMBOL_YYACCEPT = 16, /* $accept */ + YYSYMBOL_start = 17, /* start */ + YYSYMBOL_exp = 18 /* exp */ +}; +typedef enum yysymbol_kind_t yysymbol_kind_t; -/* Copy the second part of user declarations. */ -#line 57 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" +/* Second part of user prologue. */ +#line 48 "plural.y" /* Prototypes for local functions. */ -static struct expression *new_exp PARAMS ((int nargs, enum operator op, - struct expression * const *args)); -static inline struct expression *new_exp_0 PARAMS ((enum operator op)); -static inline struct expression *new_exp_1 PARAMS ((enum operator op, - struct expression *right)); -static struct expression *new_exp_2 PARAMS ((enum operator op, - struct expression *left, - struct expression *right)); -static inline struct expression *new_exp_3 PARAMS ((enum operator op, - struct expression *bexp, - struct expression *tbranch, - struct expression *fbranch)); -static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); -static void yyerror PARAMS ((const char *str)); +static int yylex (YYSTYPE *lval, struct parse_args *arg); +static void yyerror (struct parse_args *arg, const char *str); /* Allocation of expressions. */ static struct expression * -new_exp (nargs, op, args) - int nargs; - enum operator op; - struct expression * const *args; +new_exp (int nargs, enum expression_operator op, + struct expression * const *args) { int i; struct expression *newp; @@ -211,16 +199,13 @@ new_exp (nargs, op, args) } static inline struct expression * -new_exp_0 (op) - enum operator op; +new_exp_0 (enum expression_operator op) { return new_exp (0, op, NULL); } static inline struct expression * -new_exp_1 (op, right) - enum operator op; - struct expression *right; +new_exp_1 (enum expression_operator op, struct expression *right) { struct expression *args[1]; @@ -229,10 +214,8 @@ new_exp_1 (op, right) } static struct expression * -new_exp_2 (op, left, right) - enum operator op; - struct expression *left; - struct expression *right; +new_exp_2 (enum expression_operator op, struct expression *left, + struct expression *right) { struct expression *args[2]; @@ -242,11 +225,8 @@ new_exp_2 (op, left, right) } static inline struct expression * -new_exp_3 (op, bexp, tbranch, fbranch) - enum operator op; - struct expression *bexp; - struct expression *tbranch; - struct expression *fbranch; +new_exp_3 (enum expression_operator op, struct expression *bexp, + struct expression *tbranch, struct expression *fbranch) { struct expression *args[3]; @@ -257,18 +237,201 @@ new_exp_3 (op, bexp, tbranch, fbranch) } +#line 241 "plural.c" + -/* Line 213 of yacc.c. */ -#line 262 "/usr/src/local/bash/bash-20080814/lib/intl/plural.c" +#ifdef short +# undef short +#endif -#if ! defined (yyoverflow) || YYERROR_VERBOSE +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ -# ifndef YYFREE -# define YYFREE free +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H # endif -# ifndef YYMALLOC -# define YYMALLOC malloc +#endif + +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +/* Work around bug in HP-UX 11.23, which defines these macros + incorrectly for preprocessor constants. This workaround can likely + be removed in 2023, as HPE has promised support for HP-UX 11.23 + (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of + <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */ +#ifdef __hpux +# undef UINT_LEAST8_MAX +# undef UINT_LEAST16_MAX +# define UINT_LEAST8_MAX 255 +# define UINT_LEAST16_MAX 65535 +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned +# endif +#endif + +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef yytype_int8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif # endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + + +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define YY_ATTRIBUTE_PURE +# endif +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YY_USE(E) ((void) (E)) +#else +# define YY_USE(E) /* empty */ +#endif + +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ +# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") +# else +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# endif +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) + +#if !defined yyoverflow /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -276,125 +439,167 @@ new_exp_3 (op, bexp, tbranch, fbranch) # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca # else # define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif # endif # endif # endif # ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ + /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif +# else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif # endif -#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ - +#endif /* !defined yyoverflow */ -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { - short int yyss; - YYSTYPE yyvs; - }; + yy_state_t yyss_alloc; + YYSTYPE yyvs_alloc; +}; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined (__GNUC__) && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif +# define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYPTRDIFF_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ + } \ while (0) #endif -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short int yysigned_char; -#endif +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYPTRDIFF_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ -/* YYFINAL -- State number of the termination state. */ +/* YYFINAL -- State number of the termination state. */ #define YYFINAL 9 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 54 +#define YYLAST 58 -/* YYNTOKENS -- Number of terminals. */ +/* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 16 -/* YYNNTS -- Number of nonterminals. */ +/* YYNNTS -- Number of nonterminals. */ #define YYNNTS 3 -/* YYNRULES -- Number of rules. */ +/* YYNRULES -- Number of rules. */ #define YYNRULES 13 -/* YYNRULES -- Number of states. */ +/* YYNSTATES -- Number of states. */ #define YYNSTATES 27 -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 +/* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 262 -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char yytranslate[] = +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 10, 2, 2, 2, 2, 5, 2, + 2, 2, 2, 7, 2, 2, 2, 2, 6, 2, 14, 15, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 12, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -407,243 +612,165 @@ static const unsigned char yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 6, 7, - 8, 9, 11 + 2, 2, 2, 2, 2, 2, 1, 2, 8, 9, + 10, 11, 12 }; #if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned char yyprhs[] = +/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_uint8 yyrline[] = { - 0, 0, 3, 5, 11, 15, 19, 23, 27, 31, - 35, 38, 40, 42 + 0, 145, 145, 153, 157, 161, 165, 169, 173, 177, + 181, 185, 189, 194 }; +#endif -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yysigned_char yyrhs[] = -{ - 17, 0, -1, 18, -1, 18, 3, 18, 12, 18, - -1, 18, 4, 18, -1, 18, 5, 18, -1, 18, - 6, 18, -1, 18, 7, 18, -1, 18, 8, 18, - -1, 18, 9, 18, -1, 10, 18, -1, 13, -1, - 11, -1, 14, 18, 15, -1 -}; +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned char yyrline[] = -{ - 0, 176, 176, 184, 188, 192, 196, 200, 204, 208, - 212, 216, 220, 225 -}; -#endif +#if YYDEBUG || 0 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; -#if YYDEBUG || YYERROR_VERBOSE -/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { - "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2", - "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'", - "$accept", "start", "exp", 0 + "\"end of file\"", "error", "\"invalid token\"", "'?'", "':'", "'|'", + "'&'", "'!'", "EQUOP2", "CMPOP2", "ADDOP2", "MULOP2", "NUMBER", "'n'", + "'('", "')'", "$accept", "start", "exp", YY_NULLPTR }; -#endif -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short int yytoknum[] = +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) { - 0, 256, 257, 63, 124, 38, 258, 259, 260, 261, - 33, 262, 58, 110, 40, 41 -}; -# endif + return yytname[yysymbol]; +} +#endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 16, 17, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18 -}; +#define YYPACT_NINF (-8) + +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) + +#define YYTABLE_NINF (-1) + +#define yytable_value_is_error(Yyn) \ + 0 -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char yyr2[] = +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int8 yypact[] = { - 0, 2, 1, 5, 3, 3, 3, 3, 3, 3, - 2, 1, 1, 3 + -6, -6, -8, -8, -6, 2, 39, -8, 17, -8, + -6, -6, -6, -6, -6, -6, -6, -8, 30, 45, + 8, 20, 47, -7, -8, -6, 39 }; -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero +/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const unsigned char yydefact[] = +static const yytype_int8 yydefact[] = { 0, 0, 12, 11, 0, 0, 2, 10, 0, 1, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 5, 6, 7, 8, 9, 0, 3 }; -/* YYDEFGOTO[NTERM-NUM]. */ -static const yysigned_char yydefgoto[] = +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = { - -1, 5, 6 + -8, -8, -1 }; -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -10 -static const yysigned_char yypact[] = +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = { - -9, -9, -10, -10, -9, 8, 36, -10, 13, -10, - -9, -9, -9, -9, -9, -9, -9, -10, 26, 41, - 45, 18, -2, 14, -10, -9, 36 + 0, 5, 6 }; -/* YYPGOTO[NTERM-NUM]. */ -static const yysigned_char yypgoto[] = +/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int8 yytable[] = { - -10, -10, -1 + 7, 1, 9, 8, 16, 0, 2, 3, 4, 18, + 19, 20, 21, 22, 23, 24, 13, 14, 15, 16, + 10, 0, 11, 12, 26, 13, 14, 15, 16, 14, + 15, 16, 17, 10, 25, 11, 12, 0, 13, 14, + 15, 16, 10, 0, 11, 12, 0, 13, 14, 15, + 16, 12, 0, 13, 14, 15, 16, 15, 16 }; -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -1 -static const unsigned char yytable[] = +static const yytype_int8 yycheck[] = { - 7, 1, 2, 8, 3, 4, 15, 16, 9, 18, - 19, 20, 21, 22, 23, 24, 10, 11, 12, 13, - 14, 15, 16, 16, 26, 14, 15, 16, 17, 10, - 11, 12, 13, 14, 15, 16, 0, 0, 25, 10, - 11, 12, 13, 14, 15, 16, 12, 13, 14, 15, - 16, 13, 14, 15, 16 + 1, 7, 0, 4, 11, -1, 12, 13, 14, 10, + 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, + 3, -1, 5, 6, 25, 8, 9, 10, 11, 9, + 10, 11, 15, 3, 4, 5, 6, -1, 8, 9, + 10, 11, 3, -1, 5, 6, -1, 8, 9, 10, + 11, 6, -1, 8, 9, 10, 11, 10, 11 }; -static const yysigned_char yycheck[] = +/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of + state STATE-NUM. */ +static const yytype_int8 yystos[] = { - 1, 10, 11, 4, 13, 14, 8, 9, 0, 10, - 11, 12, 13, 14, 15, 16, 3, 4, 5, 6, - 7, 8, 9, 9, 25, 7, 8, 9, 15, 3, - 4, 5, 6, 7, 8, 9, -1, -1, 12, 3, - 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, - 9, 6, 7, 8, 9 + 0, 7, 12, 13, 14, 17, 18, 18, 18, 0, + 3, 5, 6, 8, 9, 10, 11, 15, 18, 18, + 18, 18, 18, 18, 18, 4, 18 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = +/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ +static const yytype_int8 yyr1[] = { - 0, 10, 11, 13, 14, 17, 18, 18, 18, 0, - 3, 4, 5, 6, 7, 8, 9, 15, 18, 18, - 18, 18, 18, 18, 18, 12, 18 + 0, 16, 17, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18 }; -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif +/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ +static const yytype_int8 yyr2[] = +{ + 0, 2, 1, 5, 3, 3, 3, 3, 3, 3, + 2, 1, 1, 3 +}; -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab +enum { YYENOMEM = -2 }; +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYNOMEM goto yyexhaustedlab -#define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror ("syntax error: cannot back up");\ - YYERROR; \ - } \ -while (0) - - -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (0) -#endif - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (arg, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) + +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) -#else -# define YYLEX yylex (&yylval) -#endif /* Enable debugging if requested. */ #if YYDEBUG @@ -653,48 +780,82 @@ while (0) # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ } while (0) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ + + + +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Kind, Value, arg); \ + YYFPRINTF (stderr, "\n"); \ + } \ } while (0) + +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, struct parse_args *arg) +{ + FILE *yyoutput = yyo; + YY_USE (yyoutput); + YY_USE (arg); + if (!yyvaluep) + return; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ + +static void +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, struct parse_args *arg) +{ + YYFPRINTF (yyo, "%s %s (", + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); + + yy_symbol_value_print (yyo, yykind, yyvaluep, arg); + YYFPRINTF (yyo, ")"); +} + /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short int *bottom, short int *top) -#else static void -yy_stack_print (bottom, top) - short int *bottom; - short int *top; -#endif +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ } while (0) @@ -702,44 +863,45 @@ do { \ | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else static void -yy_reduce_print (yyrule) - int yyrule; -#endif +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, + int yyrule, struct parse_args *arg) { + int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; int yyi; - unsigned int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)], arg); + YYFPRINTF (stderr, "\n"); + } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule, arg); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@ -747,154 +909,36 @@ int yydebug; if the built-in stack extension method is used). Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - register const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - register char *yyd = yydest; - register const char *yys = yysrc; - while ((*yyd++ = *yys++) != '\0') - continue; - return yyd - 1; -} -# endif -# endif -#endif /* !YYERROR_VERBOSE */ - - -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else -static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); -} - -#endif /* ! YYDEBUG */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ -#if defined (__STDC__) || defined (__cplusplus) static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep, struct parse_args *arg) { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - + YY_USE (yyvaluep); + YY_USE (arg); if (!yymsg) yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); - default: - break; - } + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END } - - -/* Prevent warnings from -Wmissing-prototypes. */ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ @@ -905,204 +949,193 @@ int yyparse (); | yyparse. | `----------*/ -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) -#else int -yyparse () - -#endif -#endif +yyparse (struct parse_args *arg) { - /* The look-ahead symbol. */ +/* Lookahead token kind. */ int yychar; -/* The semantic value of the look-ahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - register int yystate; - register int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ +/* The semantic value of the lookahead symbol. */ +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +YY_INITIAL_VALUE (static YYSTYPE yyval_default;) +YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); - /* The state stack. */ - short int yyssa[YYINITDEPTH]; - short int *yyss = yyssa; - register short int *yyssp; + /* Number of syntax errors so far. */ + int yynerrs = 0; - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - register YYSTYPE *yyvsp; + yy_state_fast_t yystate = 0; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus = 0; + /* Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + /* Their size. */ + YYPTRDIFF_T yystacksize = YYINITDEPTH; -#define YYPOPSTACK (yyvsp--, yyssp--) + /* The state stack: array, bottom, top. */ + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss = yyssa; + yy_state_t *yyssp = yyss; - YYSIZE_T yystacksize = YYINITDEPTH; + /* The semantic value stack: array, bottom, top. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp = yyvs; + int yyn; + /* The return value of yyparse. */ + int yyresult; + /* Lookahead symbol kind. */ + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - yyssp = yyss; - yyvsp = yyvs; + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + YYDPRINTF ((stderr, "Starting parse\n")); - yyvsp[0] = yylval; + yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ + have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp); if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + YYNOMEM; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short int *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + yy_state_t *yyss1 = yyss; + YYSTYPE *yyvs1 = yyvs; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), + &yystacksize); + yyss = yyss1; + yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyoverflowlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyoverflowlab; + YYNOMEM; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - short int *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - + yy_state_t *yyss1 = yyss; + union yyalloc *yyptr = + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); + if (! yyptr) + YYNOMEM; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + if (yystate == YYFINAL) + YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ -/* Do appropriate processing given the current state. */ -/* Read a look-ahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to look-ahead token. */ - + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yypact_value_is_default (yyn)) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ if (yychar == YYEMPTY) { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; + YYDPRINTF ((stderr, "Reading a token\n")); + yychar = yylex (&yylval, arg); } if (yychar <= YYEOF) { - yychar = yytoken = YYEOF; + yychar = YYEOF; + yytoken = YYSYMBOL_YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } + else if (yychar == YYerror) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = YYUNDEF; + yytoken = YYSYMBOL_YYerror; + goto yyerrlab1; + } else { yytoken = YYTRANSLATE (yychar); @@ -1117,31 +1150,26 @@ yybackup: yyn = yytable[yyn]; if (yyn <= 0) { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; + if (yytable_value_is_error (yyn)) + goto yyerrlab; yyn = -yyn; goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the look-ahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; - - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1156,14 +1184,14 @@ yydefault: /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. + '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison @@ -1176,223 +1204,176 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 2: -#line 177 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 2: /* start: exp */ +#line 146 "plural.y" + { if ((yyvsp[0].exp) == NULL) YYABORT; - ((struct parse_args *) arg)->res = (yyvsp[0].exp); + arg->res = (yyvsp[0].exp); } +#line 1215 "plural.c" break; - case 3: -#line 185 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 3: /* exp: exp '?' exp ':' exp */ +#line 154 "plural.y" + { (yyval.exp) = new_exp_3 (qmop, (yyvsp[-4].exp), (yyvsp[-2].exp), (yyvsp[0].exp)); } +#line 1223 "plural.c" break; - case 4: -#line 189 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 4: /* exp: exp '|' exp */ +#line 158 "plural.y" + { (yyval.exp) = new_exp_2 (lor, (yyvsp[-2].exp), (yyvsp[0].exp)); } +#line 1231 "plural.c" break; - case 5: -#line 193 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 5: /* exp: exp '&' exp */ +#line 162 "plural.y" + { (yyval.exp) = new_exp_2 (land, (yyvsp[-2].exp), (yyvsp[0].exp)); } +#line 1239 "plural.c" break; - case 6: -#line 197 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 6: /* exp: exp EQUOP2 exp */ +#line 166 "plural.y" + { (yyval.exp) = new_exp_2 ((yyvsp[-1].op), (yyvsp[-2].exp), (yyvsp[0].exp)); } +#line 1247 "plural.c" break; - case 7: -#line 201 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 7: /* exp: exp CMPOP2 exp */ +#line 170 "plural.y" + { (yyval.exp) = new_exp_2 ((yyvsp[-1].op), (yyvsp[-2].exp), (yyvsp[0].exp)); } +#line 1255 "plural.c" break; - case 8: -#line 205 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 8: /* exp: exp ADDOP2 exp */ +#line 174 "plural.y" + { (yyval.exp) = new_exp_2 ((yyvsp[-1].op), (yyvsp[-2].exp), (yyvsp[0].exp)); } +#line 1263 "plural.c" break; - case 9: -#line 209 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 9: /* exp: exp MULOP2 exp */ +#line 178 "plural.y" + { (yyval.exp) = new_exp_2 ((yyvsp[-1].op), (yyvsp[-2].exp), (yyvsp[0].exp)); } +#line 1271 "plural.c" break; - case 10: -#line 213 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 10: /* exp: '!' exp */ +#line 182 "plural.y" + { (yyval.exp) = new_exp_1 (lnot, (yyvsp[0].exp)); } +#line 1279 "plural.c" break; - case 11: -#line 217 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 11: /* exp: 'n' */ +#line 186 "plural.y" + { (yyval.exp) = new_exp_0 (var); } +#line 1287 "plural.c" break; - case 12: -#line 221 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 12: /* exp: NUMBER */ +#line 190 "plural.y" + { if (((yyval.exp) = new_exp_0 (num)) != NULL) (yyval.exp)->val.num = (yyvsp[0].num); } +#line 1296 "plural.c" break; - case 13: -#line 226 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" - { + case 13: /* exp: '(' exp ')' */ +#line 195 "plural.y" + { (yyval.exp) = (yyvsp[-1].exp); } +#line 1304 "plural.c" break; - } - -/* Line 1037 of yacc.c. */ -#line 1270 "/usr/src/local/bash/bash-20080814/lib/intl/plural.c" - - yyvsp -= yylen; - yyssp -= yylen; - +#line 1308 "plural.c" - YY_STACK_PRINT (yyss, yyssp); + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; *++yyvsp = yyval; - - /* Now `shift' the result of the reduction. Determine what state + /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; -#if YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (YYPACT_NINF < yyn && yyn < YYLAST) - { - YYSIZE_T yysize = 0; - int yytype = YYTRANSLATE (yychar); - const char* yyprefix; - char *yymsg; - int yyx; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 0; - - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); - yycount += 1; - if (yycount == 5) - { - yysize = 0; - break; - } - } - yysize += (sizeof ("syntax error, unexpected ") - + yystrlen (yytname[yytype])); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) - { - char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); - yyp = yystpcpy (yyp, yytname[yytype]); - - if (yycount < 5) - { - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - yyp = yystpcpy (yyp, yyprefix); - yyp = yystpcpy (yyp, yytname[yyx]); - yyprefix = " or "; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - yyerror ("syntax error; also virtual memory exhausted"); - } - else -#endif /* YYERROR_VERBOSE */ - yyerror ("syntax error"); + yyerror (arg, YY_("syntax error")); } - - if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an - error, discard it. */ + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ if (yychar <= YYEOF) { - /* If at end of input, pop the error token, - then the rest of the stack, then return failure. */ - if (yychar == YYEOF) - for (;;) - { - - YYPOPSTACK; - if (yyssp == yyss) - YYABORT; - yydestruct ("Error: popping", - yystos[*yyssp], yyvsp); - } + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; } else - { - yydestruct ("Error: discarding", yytoken, &yylval); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval, arg); + yychar = YYEMPTY; + } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -1401,16 +1382,17 @@ yyerrlab: | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - -#ifdef __GNUC__ - /* Pacify GCC when the user code never invokes YYERROR and the label - yyerrorlab therefore never appears in user code. */ + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ if (0) - goto yyerrorlab; -#endif + YYERROR; + ++yynerrs; -yyvsp -= yylen; - yyssp -= yylen; + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; @@ -1419,41 +1401,42 @@ yyvsp -= yylen; | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ + /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + if (!yypact_value_is_default (yyn)) + { + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; - yydestruct ("Error: popping", yystos[yystate], yyvsp); - YYPOPSTACK; + yydestruct ("Error: popping", + YY_ACCESSING_SYMBOL (yystate), yyvsp, arg); + YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); yystate = yyn; goto yynewstate; @@ -1464,44 +1447,62 @@ yyerrlab1: `-------------------------------------*/ yyacceptlab: yyresult = 0; - goto yyreturn; + goto yyreturnlab; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: - yydestruct ("Error: discarding lookahead", - yytoken, &yylval); - yychar = YYEMPTY; yyresult = 1; - goto yyreturn; + goto yyreturnlab; -#ifndef yyoverflow -/*----------------------------------------------. -| yyoverflowlab -- parser overflow comes here. | -`----------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); + +/*-----------------------------------------------------------. +| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | +`-----------------------------------------------------------*/ +yyexhaustedlab: + yyerror (arg, YY_("memory exhausted")); yyresult = 2; - /* Fall through. */ -#endif + goto yyreturnlab; + -yyreturn: +/*----------------------------------------------------------. +| yyreturnlab -- parsing is finished, clean up and return. | +`----------------------------------------------------------*/ +yyreturnlab: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, arg); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, arg); + YYPOPSTACK (1); + } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif + return yyresult; } - -#line 231 "/usr/src/local/bash/bash-20080814/lib/intl/plural.y" +#line 200 "plural.y" void internal_function -FREE_EXPRESSION (exp) - struct expression *exp; +FREE_EXPRESSION (struct expression *exp) { if (exp == NULL) return; @@ -1511,13 +1512,13 @@ FREE_EXPRESSION (exp) { case 3: FREE_EXPRESSION (exp->val.args[2]); - /* FALLTHROUGH */ + FALLTHROUGH; case 2: FREE_EXPRESSION (exp->val.args[1]); - /* FALLTHROUGH */ + FALLTHROUGH; case 1: FREE_EXPRESSION (exp->val.args[0]); - /* FALLTHROUGH */ + FALLTHROUGH; default: break; } @@ -1527,18 +1528,16 @@ FREE_EXPRESSION (exp) static int -yylex (lval, pexp) - YYSTYPE *lval; - const char **pexp; +yylex (YYSTYPE *lval, struct parse_args *arg) { - const char *exp = *pexp; + const char *exp = arg->cp; int result; while (1) { if (exp[0] == '\0') { - *pexp = exp; + arg->cp = exp; return YYEOF; } @@ -1665,15 +1664,14 @@ yylex (lval, pexp) break; } - *pexp = exp; + arg->cp = exp; return result; } static void -yyerror (str) - const char *str; +yyerror (struct parse_args *arg, const char *str) { /* Do nothing. We don't print error messages here. */ } diff --git a/lib/intl/plural.y b/lib/intl/plural.y index 8b8cec7e8..be78cebf8 100644 --- a/lib/intl/plural.y +++ b/lib/intl/plural.y @@ -1,32 +1,20 @@ %{ -/* plural.y - Expression parsing for plural form selection. */ - -/* Copyright (C) 2000, 2001, 2005-2009 Free Software Foundation, Inc. +/* Expression parsing for plural form selection. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ - -/* The bison generated parser uses alloca. AIX 3 forces us to put this - declaration at the beginning of the file. The declaration in bison's - skeleton file comes too late. This must come before <config.h> - because <config.h> may include arbitrary system headers. */ -#if defined _AIX && !defined __GNUC__ - #pragma alloca -#endif + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -34,7 +22,9 @@ #include <stddef.h> #include <stdlib.h> +#include <string.h> #include "plural-exp.h" +#include "attribute.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ @@ -42,42 +32,29 @@ # define __gettextparse PLURAL_PARSE #endif -#define YYLEX_PARAM &((struct parse_args *) arg)->cp -#define YYPARSE_PARAM arg %} -%pure_parser -%expect 7 +%require "3.0" +%parse-param {struct parse_args *arg} +%lex-param {struct parse_args *arg} +%define api.pure full +%expect 0 %union { unsigned long int num; - enum operator op; + enum expression_operator op; struct expression *exp; } %{ /* Prototypes for local functions. */ -static struct expression *new_exp PARAMS ((int nargs, enum operator op, - struct expression * const *args)); -static inline struct expression *new_exp_0 PARAMS ((enum operator op)); -static inline struct expression *new_exp_1 PARAMS ((enum operator op, - struct expression *right)); -static struct expression *new_exp_2 PARAMS ((enum operator op, - struct expression *left, - struct expression *right)); -static inline struct expression *new_exp_3 PARAMS ((enum operator op, - struct expression *bexp, - struct expression *tbranch, - struct expression *fbranch)); -static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); -static void yyerror PARAMS ((const char *str)); +static int yylex (YYSTYPE *lval, struct parse_args *arg); +static void yyerror (struct parse_args *arg, const char *str); /* Allocation of expressions. */ static struct expression * -new_exp (nargs, op, args) - int nargs; - enum operator op; - struct expression * const *args; +new_exp (int nargs, enum expression_operator op, + struct expression * const *args) { int i; struct expression *newp; @@ -106,16 +83,13 @@ new_exp (nargs, op, args) } static inline struct expression * -new_exp_0 (op) - enum operator op; +new_exp_0 (enum expression_operator op) { return new_exp (0, op, NULL); } static inline struct expression * -new_exp_1 (op, right) - enum operator op; - struct expression *right; +new_exp_1 (enum expression_operator op, struct expression *right) { struct expression *args[1]; @@ -124,10 +98,8 @@ new_exp_1 (op, right) } static struct expression * -new_exp_2 (op, left, right) - enum operator op; - struct expression *left; - struct expression *right; +new_exp_2 (enum expression_operator op, struct expression *left, + struct expression *right) { struct expression *args[2]; @@ -137,11 +109,8 @@ new_exp_2 (op, left, right) } static inline struct expression * -new_exp_3 (op, bexp, tbranch, fbranch) - enum operator op; - struct expression *bexp; - struct expression *tbranch; - struct expression *fbranch; +new_exp_3 (enum expression_operator op, struct expression *bexp, + struct expression *tbranch, struct expression *fbranch) { struct expression *args[3]; @@ -158,14 +127,14 @@ new_exp_3 (op, bexp, tbranch, fbranch) There is no unary minus and no bitwise operators. Operators with the same syntactic behaviour have been merged into a single token, to save space in the array generated by bison. */ -%right '?' /* ? */ +%right '?' ':' /* ? */ %left '|' /* || */ %left '&' /* && */ %left EQUOP2 /* == != */ %left CMPOP2 /* < > <= >= */ %left ADDOP2 /* + - */ %left MULOP2 /* * / % */ -%right '!' /* ! */ +%precedence '!' /* ! */ %token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2 %token <num> NUMBER @@ -177,7 +146,7 @@ start: exp { if ($1 == NULL) YYABORT; - ((struct parse_args *) arg)->res = $1; + arg->res = $1; } ; @@ -232,8 +201,7 @@ exp: exp '?' exp ':' exp void internal_function -FREE_EXPRESSION (exp) - struct expression *exp; +FREE_EXPRESSION (struct expression *exp) { if (exp == NULL) return; @@ -243,13 +211,13 @@ FREE_EXPRESSION (exp) { case 3: FREE_EXPRESSION (exp->val.args[2]); - /* FALLTHROUGH */ + FALLTHROUGH; case 2: FREE_EXPRESSION (exp->val.args[1]); - /* FALLTHROUGH */ + FALLTHROUGH; case 1: FREE_EXPRESSION (exp->val.args[0]); - /* FALLTHROUGH */ + FALLTHROUGH; default: break; } @@ -259,18 +227,16 @@ FREE_EXPRESSION (exp) static int -yylex (lval, pexp) - YYSTYPE *lval; - const char **pexp; +yylex (YYSTYPE *lval, struct parse_args *arg) { - const char *exp = *pexp; + const char *exp = arg->cp; int result; while (1) { if (exp[0] == '\0') { - *pexp = exp; + arg->cp = exp; return YYEOF; } @@ -397,15 +363,14 @@ yylex (lval, pexp) break; } - *pexp = exp; + arg->cp = exp; return result; } static void -yyerror (str) - const char *str; +yyerror (struct parse_args *arg, const char *str) { /* Do nothing. We don't print error messages here. */ } diff --git a/lib/intl/ref-add.sin b/lib/intl/ref-add.sin index 6fd32ed9b..d986cd968 100644 --- a/lib/intl/ref-add.sin +++ b/lib/intl/ref-add.sin @@ -3,17 +3,17 @@ # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# GNU Lesser General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. # # Written by Bruno Haible <haible@clisp.cons.org>. # diff --git a/lib/intl/ref-del.sin b/lib/intl/ref-del.sin index 65ce9afa1..29aafdf88 100644 --- a/lib/intl/ref-del.sin +++ b/lib/intl/ref-del.sin @@ -3,17 +3,17 @@ # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# GNU Lesser General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. # # Written by Bruno Haible <haible@clisp.cons.org>. # diff --git a/lib/intl/relocatable.c b/lib/intl/relocatable.c index 34b2b183b..ef41214b6 100644 --- a/lib/intl/relocatable.c +++ b/lib/intl/relocatable.c @@ -1,34 +1,30 @@ -/* relocatable.c - Provide relocatable packages. */ - -/* Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. +/* Provide relocatable packages. + Copyright (C) 2003-2006, 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ /* Tell glibc's <stdio.h> to provide a prototype for getline(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 +# define _GNU_SOURCE 1 #endif -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif +#define _GL_USE_STDLIB_ALLOC 1 +#include <config.h> /* Specification. */ #include "relocatable.h" @@ -43,7 +39,20 @@ #ifdef NO_XMALLOC # define xmalloc malloc #else -# include "xmalloc.h" +# include "xalloc.h" +#endif + +#if defined _WIN32 && !defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +#endif + +#ifdef __EMX__ +# define INCL_DOS +# include <os2.h> + +# define strcmp stricmp +# define strncmp strnicmp #endif #if DEPENDS_ON_LIBCHARSET @@ -56,6 +65,12 @@ # include <libintl.h> #endif +#if defined _WIN32 && !defined __CYGWIN__ +/* Don't assume that UNICODE is not defined. */ +# undef GetModuleFileName +# define GetModuleFileName GetModuleFileNameA +#endif + /* Faked cheap 'bool'. */ #undef bool #undef false @@ -65,23 +80,36 @@ #define true 1 /* Pathname support. - ISSLASH(C) tests whether C is a directory separator character. - IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. + ISSLASH(C) tests whether C is a directory separator character. + IS_FILE_NAME_WITH_DIR(P) tests whether P contains a directory specification. */ -#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ - /* Win32, OS/2, DOS */ +#if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ + /* Native Windows, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') -# define IS_PATH_WITH_DIR(P) \ +# define IS_FILE_NAME_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) -# define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) +# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) #else /* Unix */ # define ISSLASH(C) ((C) == '/') -# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) -# define FILESYSTEM_PREFIX_LEN(P) 0 +# define IS_FILE_NAME_WITH_DIR(P) (strchr (P, '/') != NULL) +# define FILE_SYSTEM_PREFIX_LEN(P) 0 +#endif + +/* Whether to enable the more costly support for relocatable libraries. + It allows libraries to be have been installed with a different original + prefix than the program. But it is quite costly, especially on Cygwin + platforms, see below. Therefore we enable it by default only on native + Windows platforms. */ +#ifndef ENABLE_COSTLY_RELOCATABLE +# if defined _WIN32 && !defined __CYGWIN__ +# define ENABLE_COSTLY_RELOCATABLE 1 +# else +# define ENABLE_COSTLY_RELOCATABLE 0 +# endif #endif /* Original installation prefix. */ @@ -100,11 +128,11 @@ static size_t curr_prefix_len; instead of "/"). */ static void set_this_relocation_prefix (const char *orig_prefix_arg, - const char *curr_prefix_arg) + const char *curr_prefix_arg) { if (orig_prefix_arg != NULL && curr_prefix_arg != NULL /* Optimization: if orig_prefix and curr_prefix are equal, the - relocation is a nop. */ + relocation is a nop. */ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0) { /* Duplicate the argument strings. */ @@ -116,14 +144,14 @@ set_this_relocation_prefix (const char *orig_prefix_arg, #ifdef NO_XMALLOC if (memory != NULL) #endif - { - memcpy (memory, orig_prefix_arg, orig_prefix_len + 1); - orig_prefix = memory; - memory += orig_prefix_len + 1; - memcpy (memory, curr_prefix_arg, curr_prefix_len + 1); - curr_prefix = memory; - return; - } + { + memcpy (memory, orig_prefix_arg, orig_prefix_len + 1); + orig_prefix = memory; + memory += orig_prefix_len + 1; + memcpy (memory, curr_prefix_arg, curr_prefix_len + 1); + curr_prefix = memory; + return; + } } orig_prefix = NULL; curr_prefix = NULL; @@ -153,20 +181,23 @@ set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) #endif } +#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE) + /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular - file, and the current pathname of this file. Returns NULL upon failure. */ + file, and the current pathname of this file. + Returns it, freshly allocated. Returns NULL upon failure. */ #ifdef IN_LIBRARY #define compute_curr_prefix local_compute_curr_prefix static #endif -const char * +char * compute_curr_prefix (const char *orig_installprefix, - const char *orig_installdir, - const char *curr_pathname) + const char *orig_installdir, + const char *curr_pathname) { - const char *curr_installdir; + char *curr_installdir; const char *rel_installdir; if (curr_pathname == NULL) @@ -183,15 +214,15 @@ compute_curr_prefix (const char *orig_installprefix, /* Determine the current installation directory. */ { - const char *p_base = curr_pathname + FILESYSTEM_PREFIX_LEN (curr_pathname); + const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname); const char *p = curr_pathname + strlen (curr_pathname); char *q; while (p > p_base) { - p--; - if (ISSLASH (*p)) - break; + p--; + if (ISSLASH (*p)) + break; } q = (char *) xmalloc (p - curr_pathname + 1); @@ -210,71 +241,92 @@ compute_curr_prefix (const char *orig_installprefix, const char *rp = rel_installdir + strlen (rel_installdir); const char *cp = curr_installdir + strlen (curr_installdir); const char *cp_base = - curr_installdir + FILESYSTEM_PREFIX_LEN (curr_installdir); + curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir); while (rp > rel_installdir && cp > cp_base) { - bool same = false; - const char *rpi = rp; - const char *cpi = cp; - - while (rpi > rel_installdir && cpi > cp_base) - { - rpi--; - cpi--; - if (ISSLASH (*rpi) || ISSLASH (*cpi)) - { - if (ISSLASH (*rpi) && ISSLASH (*cpi)) - same = true; - break; - } -#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ - /* Win32, OS/2, DOS - case insignificant filesystem */ - if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi) - != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi)) - break; + bool same = false; + const char *rpi = rp; + const char *cpi = cp; + + while (rpi > rel_installdir && cpi > cp_base) + { + rpi--; + cpi--; + if (ISSLASH (*rpi) || ISSLASH (*cpi)) + { + if (ISSLASH (*rpi) && ISSLASH (*cpi)) + same = true; + break; + } + /* Do case-insensitive comparison if the file system is always or + often case-insensitive. It's better to accept the comparison + if the difference is only in case, rather than to fail. */ +#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Native Windows, Cygwin, OS/2, DOS - case insignificant file system */ + if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi) + != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi)) + break; #else - if (*rpi != *cpi) - break; + if (*rpi != *cpi) + break; #endif - } - if (!same) - break; - /* The last pathname component was the same. opi and cpi now point - to the slash before it. */ - rp = rpi; - cp = cpi; + } + if (!same) + break; + /* The last pathname component was the same. rpi and cpi now point + to the slash before it. */ + rp = rpi; + cp = cpi; } if (rp > rel_installdir) - /* Unexpected: The curr_installdir does not end with rel_installdir. */ - return NULL; + { + /* Unexpected: The curr_installdir does not end with rel_installdir. */ + free (curr_installdir); + return NULL; + } { - size_t curr_prefix_len = cp - curr_installdir; - char *curr_prefix; + size_t computed_curr_prefix_len = cp - curr_installdir; + char *computed_curr_prefix; - curr_prefix = (char *) xmalloc (curr_prefix_len + 1); + computed_curr_prefix = (char *) xmalloc (computed_curr_prefix_len + 1); #ifdef NO_XMALLOC - if (curr_prefix == NULL) - return NULL; + if (computed_curr_prefix == NULL) + { + free (curr_installdir); + return NULL; + } #endif - memcpy (curr_prefix, curr_installdir, curr_prefix_len); - curr_prefix[curr_prefix_len] = '\0'; + memcpy (computed_curr_prefix, curr_installdir, computed_curr_prefix_len); + computed_curr_prefix[computed_curr_prefix_len] = '\0'; - return curr_prefix; + free (curr_installdir); + + return computed_curr_prefix; } } } -#if defined PIC && defined INSTALLDIR +#endif /* !IN_LIBRARY || PIC */ + +#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE /* Full pathname of shared library, or NULL. */ static char *shared_library_fullname; -#if defined _WIN32 || defined __WIN32__ +#if defined _WIN32 && !defined __CYGWIN__ +/* Native Windows only. + On Cygwin, it is better to use the Cygwin provided /proc interface, than + to use native Windows API and cygwin_conv_to_posix_path, because it + supports longer file names + (see <https://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */ + +/* Determine the full pathname of the shared library when it is loaded. -/* Determine the full pathname of the shared library when it is loaded. */ + Documentation: + <https://docs.microsoft.com/en-us/windows/win32/dlls/dllmain> */ BOOL WINAPI DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) @@ -287,17 +339,62 @@ DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) static char location[MAX_PATH]; if (!GetModuleFileName (module_handle, location, sizeof (location))) - /* Shouldn't happen. */ - return FALSE; + /* Shouldn't happen. */ + return FALSE; + + if (!IS_FILE_NAME_WITH_DIR (location)) + /* Shouldn't happen. */ + return FALSE; + + /* Avoid a memory leak when the same DLL get attached, detached, + attached, detached, and so on. This happens e.g. when a spell + checker DLL is used repeatedly by a mail program. */ + if (!(shared_library_fullname != NULL + && strcmp (shared_library_fullname, location) == 0)) + /* Remember the full pathname of the shared library. */ + shared_library_fullname = strdup (location); + } + + return TRUE; +} - if (!IS_PATH_WITH_DIR (location)) - /* Shouldn't happen. */ - return FALSE; +#elif defined __EMX__ + +extern int _CRT_init (void); +extern void _CRT_term (void); +extern void __ctordtorInit (void); +extern void __ctordtorTerm (void); + +unsigned long _System +_DLL_InitTerm (unsigned long hModule, unsigned long ulFlag) +{ + static char location[CCHMAXPATH]; - shared_library_fullname = strdup (location); + switch (ulFlag) + { + case 0: + if (_CRT_init () == -1) + return 0; + + __ctordtorInit(); + + /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html + for specification of DosQueryModuleName(). */ + if (DosQueryModuleName (hModule, sizeof (location), location)) + return 0; + + _fnslashify (location); + shared_library_fullname = strdup (location); + break; + + case 1: + __ctordtorTerm(); + + _CRT_term (); + break; } - return TRUE; + return 1; } #else /* Unix */ @@ -305,7 +402,12 @@ DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) static void find_shared_library_fullname () { -#ifdef __linux__ +#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__ + /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline() + function. + Cygwin >= 1.5 has /proc/self/maps and the getline() function too. + But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on + Cygwin 1.7. */ FILE *fp; /* Open the current process' maps file. It describes one VMA per line. */ @@ -314,51 +416,51 @@ find_shared_library_fullname () { unsigned long address = (unsigned long) &find_shared_library_fullname; for (;;) - { - unsigned long start, end; - int c; - - if (fscanf (fp, "%lx-%lx", &start, &end) != 2) - break; - if (address >= start && address <= end - 1) - { - /* Found it. Now see if this line contains a filename. */ - while (c = getc (fp), c != EOF && c != '\n' && c != '/') - continue; - if (c == '/') - { - size_t size; - int len; - - ungetc (c, fp); - shared_library_fullname = NULL; size = 0; - len = getline (&shared_library_fullname, &size, fp); - if (len >= 0) - { - /* Success: filled shared_library_fullname. */ - if (len > 0 && shared_library_fullname[len - 1] == '\n') - shared_library_fullname[len - 1] = '\0'; - } - } - break; - } - while (c = getc (fp), c != EOF && c != '\n') - continue; - } + { + unsigned long start, end; + int c; + + if (fscanf (fp, "%lx-%lx", &start, &end) != 2) + break; + if (address >= start && address <= end - 1) + { + /* Found it. Now see if this line contains a filename. */ + while (c = getc (fp), c != EOF && c != '\n' && c != '/') + continue; + if (c == '/') + { + size_t size; + int len; + + ungetc (c, fp); + shared_library_fullname = NULL; size = 0; + len = getline (&shared_library_fullname, &size, fp); + if (len >= 0) + { + /* Success: filled shared_library_fullname. */ + if (len > 0 && shared_library_fullname[len - 1] == '\n') + shared_library_fullname[len - 1] = '\0'; + } + } + break; + } + while (c = getc (fp), c != EOF && c != '\n') + continue; + } fclose (fp); } #endif } -#endif /* WIN32 / Unix */ +#endif /* Native Windows / EMX / Unix */ /* Return the full pathname of the current shared library. Return NULL if unknown. - Guaranteed to work only on Linux and Woe32. */ + Guaranteed to work only on Linux, EMX, Cygwin, and native Windows. */ static char * get_shared_library_fullname () { -#if !(defined _WIN32 || defined __WIN32__) +#if !(defined _WIN32 && !defined __CYGWIN__) && !defined __EMX__ static bool tried_find_shared_library_fullname; if (!tried_find_shared_library_fullname) { @@ -372,69 +474,130 @@ get_shared_library_fullname () #endif /* PIC */ /* Returns the pathname, relocated according to the current installation - directory. */ + directory. + The returned string is either PATHNAME unmodified or a freshly allocated + string that you can free with free() after casting it to 'char *'. */ const char * relocate (const char *pathname) { -#if defined PIC && defined INSTALLDIR +#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE static int initialized; /* Initialization code for a shared library. */ if (!initialized) { /* At this point, orig_prefix and curr_prefix likely have already been - set through the main program's set_program_name_and_installdir - function. This is sufficient in the case that the library has - initially been installed in the same orig_prefix. But we can do - better, to also cover the cases that 1. it has been installed - in a different prefix before being moved to orig_prefix and (later) - to curr_prefix, 2. unlike the program, it has not moved away from - orig_prefix. */ + set through the main program's set_program_name_and_installdir + function. This is sufficient in the case that the library has + initially been installed in the same orig_prefix. But we can do + better, to also cover the cases that 1. it has been installed + in a different prefix before being moved to orig_prefix and (later) + to curr_prefix, 2. unlike the program, it has not moved away from + orig_prefix. */ const char *orig_installprefix = INSTALLPREFIX; const char *orig_installdir = INSTALLDIR; - const char *curr_prefix_better; + char *curr_prefix_better; curr_prefix_better = - compute_curr_prefix (orig_installprefix, orig_installdir, - get_shared_library_fullname ()); - if (curr_prefix_better == NULL) - curr_prefix_better = curr_prefix; + compute_curr_prefix (orig_installprefix, orig_installdir, + get_shared_library_fullname ()); - set_relocation_prefix (orig_installprefix, curr_prefix_better); + set_relocation_prefix (orig_installprefix, + curr_prefix_better != NULL + ? curr_prefix_better + : curr_prefix); + + if (curr_prefix_better != NULL) + free (curr_prefix_better); initialized = 1; } #endif /* Note: It is not necessary to perform case insensitive comparison here, - even for DOS-like filesystems, because the pathname argument was + even for DOS-like file systems, because the pathname argument was typically created from the same Makefile variable as orig_prefix came from. */ if (orig_prefix != NULL && curr_prefix != NULL && strncmp (pathname, orig_prefix, orig_prefix_len) == 0) { if (pathname[orig_prefix_len] == '\0') - /* pathname equals orig_prefix. */ - return curr_prefix; - if (ISSLASH (pathname[orig_prefix_len])) - { - /* pathname starts with orig_prefix. */ - const char *pathname_tail = &pathname[orig_prefix_len]; - char *result = - (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1); + { + /* pathname equals orig_prefix. */ + char *result = (char *) xmalloc (strlen (curr_prefix) + 1); + +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + strcpy (result, curr_prefix); + return result; + } + } + else if (ISSLASH (pathname[orig_prefix_len])) + { + /* pathname starts with orig_prefix. */ + const char *pathname_tail = &pathname[orig_prefix_len]; + char *result = + (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1); #ifdef NO_XMALLOC - if (result != NULL) + if (result != NULL) #endif - { - memcpy (result, curr_prefix, curr_prefix_len); - strcpy (result + curr_prefix_len, pathname_tail); - return result; - } - } + { + memcpy (result, curr_prefix, curr_prefix_len); + strcpy (result + curr_prefix_len, pathname_tail); + return result; + } + } } + +#ifdef __EMX__ +# ifdef __KLIBC__ +# undef strncmp + + if (strncmp (pathname, "/@unixroot", 10) == 0 + && (pathname[10] == '\0' || ISSLASH (pathname[10]))) + { + /* kLIBC itself processes /@unixroot prefix */ + return pathname; + } + else +# endif + if (ISSLASH (pathname[0])) + { + const char *unixroot = getenv ("UNIXROOT"); + + if (unixroot && HAS_DEVICE (unixroot) && unixroot[2] == '\0') + { + char *result = (char *) xmalloc (2 + strlen (pathname) + 1); +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + memcpy (result, unixroot, 2); + strcpy (result + 2, pathname); + return result; + } + } + } +#endif + /* Nothing to relocate. */ return pathname; } +/* Returns the pathname, relocated according to the current installation + directory. + This function sets *ALLOCATEDP to the allocated memory, or to NULL if + no memory allocation occurs. So that, after you're done with the return + value, to reclaim allocated memory, you can do: free (*ALLOCATEDP). */ +const char * +relocate2 (const char *pathname, char **allocatedp) +{ + const char *result = relocate (pathname); + *allocatedp = (result != pathname ? (char *) result : NULL); + return result; +} + #endif diff --git a/lib/intl/relocatable.h b/lib/intl/relocatable.h index de57f446d..368e733ee 100644 --- a/lib/intl/relocatable.h +++ b/lib/intl/relocatable.h @@ -1,34 +1,39 @@ -/* relocatable.h - Provide relocatable packages. */ - -/* Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. +/* Provide relocatable packages. + Copyright (C) 2003, 2005, 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _RELOCATABLE_H #define _RELOCATABLE_H +#include <stdlib.h> + +#ifdef __cplusplus +extern "C" { +#endif + + /* This can be enabled through the configure --enable-relocatable option. */ #if ENABLE_RELOCATABLE /* When building a DLL, we must export some functions. Note that because this is a private .h file, we don't need to use __declspec(dllimport) in any case. */ -#if defined _MSC_VER && BUILDING_DLL +#if HAVE_VISIBILITY && BUILDING_DLL +# define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_DLL # define RELOCATABLE_DLL_EXPORTED __declspec(dllexport) #else # define RELOCATABLE_DLL_EXPORTED @@ -41,29 +46,59 @@ instead of "/"). */ extern RELOCATABLE_DLL_EXPORTED void set_relocation_prefix (const char *orig_prefix, - const char *curr_prefix); + const char *curr_prefix); /* Returns the pathname, relocated according to the current installation - directory. */ + directory. + The returned string is either PATHNAME unmodified or a freshly allocated + string that you can free with free() after casting it to 'char *'. */ extern const char * relocate (const char *pathname); -/* Memory management: relocate() leaks memory, because it has to construct - a fresh pathname. If this is a problem because your program calls - relocate() frequently, think about caching the result. */ +/* Returns the pathname, relocated according to the current installation + directory. + This function sets *ALLOCATEDP to the allocated memory, or to NULL if + no memory allocation occurs. So that, after you're done with the return + value, to reclaim allocated memory, you can do: free (*ALLOCATEDP). */ +extern const char * relocate2 (const char *pathname, char **allocatedp); + +/* Memory management: relocate() potentially allocates memory, because it has + to construct a fresh pathname. If this is a problem because your program + calls relocate() frequently or because you want to fix all potential memory + leaks anyway, you have three options: + 1) Use this idiom: + const char *pathname = ...; + const char *rel_pathname = relocate (pathname); + ... + if (rel_pathname != pathname) + free ((char *) rel_pathname); + 2) Use this idiom: + char *allocated; + const char *rel_pathname = relocate2 (..., &allocated); + ... + free (allocated); + 3) Think about caching the result. */ /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular - file, and the current pathname of this file. Returns NULL upon failure. */ -extern const char * compute_curr_prefix (const char *orig_installprefix, - const char *orig_installdir, - const char *curr_pathname); + file, and the current pathname of this file. + Returns it, freshly allocated. Returns NULL upon failure. */ +extern char * compute_curr_prefix (const char *orig_installprefix, + const char *orig_installdir, + const char *curr_pathname) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #else /* By default, we use the hardwired pathnames. */ #define relocate(pathname) (pathname) +#define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname)) + +#endif + +#ifdef __cplusplus +} #endif #endif /* _RELOCATABLE_H */ diff --git a/lib/intl/textdomain.c b/lib/intl/textdomain.c index 4bb0e800a..e17cff10b 100644 --- a/lib/intl/textdomain.c +++ b/lib/intl/textdomain.c @@ -1,22 +1,18 @@ -/* textdomain.c - Implementation of the textdomain(3) function. */ +/* Implementation of the textdomain(3) function. + Copyright (C) 1995-2016 Free Software Foundation, Inc. -/* Copyright (C) 1995-1998, 2000, 2001, 2002, 2005-2009 Free Software Foundation, Inc. - - This file is part of GNU Bash. - - Bash is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - Bash is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with Bash. If not, see <http://www.gnu.org/licenses/>. -*/ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -25,39 +21,25 @@ #include <stdlib.h> #include <string.h> +#include "gettextP.h" #ifdef _LIBC # include <libintl.h> #else # include "libgnuintl.h" #endif -#include "gettextP.h" +/* Handle multi-threaded applications. */ #ifdef _LIBC -/* We have to handle multi-threaded applications. */ # include <bits/libc-lock.h> +# define gl_rwlock_define __libc_rwlock_define +# define gl_rwlock_wrlock __libc_rwlock_wrlock +# define gl_rwlock_unlock __libc_rwlock_unlock #else -/* Provide dummy implementation if this is outside glibc. */ -# define __libc_rwlock_define(CLASS, NAME) -# define __libc_rwlock_wrlock(NAME) -# define __libc_rwlock_unlock(NAME) -#endif - -/* The internal variables in the standalone libintl.a must have different - names than the internal variables in GNU libc, otherwise programs - using libintl.a cannot be linked statically. */ -#if !defined _LIBC -# define _nl_default_default_domain libintl_nl_default_default_domain -# define _nl_current_default_domain libintl_nl_current_default_domain +# include "lock.h" #endif /* @@ end of prolog @@ */ -/* Name of the default text domain. */ -extern const char _nl_default_default_domain[] attribute_hidden; - -/* Default text domain in which entries for gettext(3) are to be found. */ -extern const char *_nl_current_default_domain attribute_hidden; - /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source @@ -73,14 +55,13 @@ extern const char *_nl_current_default_domain attribute_hidden; #endif /* Lock variable to protect the global data in the gettext implementation. */ -__libc_rwlock_define (extern, _nl_state_lock attribute_hidden) +gl_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ char * -TEXTDOMAIN (domainname) - const char *domainname; +TEXTDOMAIN (const char *domainname) { char *new_domain; char *old_domain; @@ -89,7 +70,7 @@ TEXTDOMAIN (domainname) if (domainname == NULL) return (char *) _nl_current_default_domain; - __libc_rwlock_wrlock (_nl_state_lock); + gl_rwlock_wrlock (_nl_state_lock); old_domain = (char *) _nl_current_default_domain; @@ -106,18 +87,10 @@ TEXTDOMAIN (domainname) new_domain = old_domain; else { - /* If the following malloc fails `_nl_current_default_domain' + /* If the following strdup fails '_nl_current_default_domain' will be NULL. This value will be returned and so signals we - are out of core. */ -#if defined _LIBC || defined HAVE_STRDUP + are out of memory. */ new_domain = strdup (domainname); -#else - size_t len = strlen (domainname) + 1; - new_domain = (char *) malloc (len); - if (new_domain != NULL) - memcpy (new_domain, domainname, len); -#endif - if (new_domain != NULL) _nl_current_default_domain = new_domain; } @@ -133,7 +106,7 @@ TEXTDOMAIN (domainname) free (old_domain); } - __libc_rwlock_unlock (_nl_state_lock); + gl_rwlock_unlock (_nl_state_lock); return new_domain; } diff --git a/lib/malloc/alloca.c b/lib/malloc/alloca.c index 26319c2d3..0a12b0630 100644 --- a/lib/malloc/alloca.c +++ b/lib/malloc/alloca.c @@ -57,11 +57,7 @@ long i00afunc (); #define ADDRESS_FUNCTION(arg) &(arg) #endif /* CRAY && CRAY_STACKSEG_END */ -#if __STDC__ typedef void *pointer; -#else -typedef char *pointer; -#endif #define NULL 0 @@ -77,7 +73,7 @@ typedef char *pointer; #ifndef emacs #define malloc xmalloc -extern pointer xmalloc (); +extern pointer xmalloc (size_t); #endif /* Define STACK_DIRECTION if you know the direction of stack @@ -102,7 +98,7 @@ static int stack_dir; /* 1 or -1 once known. */ #define STACK_DIR stack_dir static void -find_stack_direction () +find_stack_direction (void) { static char *addr = NULL; /* Address of first `dummy', once known. */ auto char dummy; /* To get stack address. */ @@ -156,8 +152,7 @@ static header *last_alloca_header = NULL; /* -> last alloca header. */ implementations of C, for example under Gould's UTX/32. */ pointer -alloca (size) - size_t size; +alloca (size_t size) { auto char probe; /* Probes stack depth: */ register char *depth = ADDRESS_FUNCTION (probe); diff --git a/lib/malloc/imalloc.h b/lib/malloc/imalloc.h index bebd13643..00f23a32d 100644 --- a/lib/malloc/imalloc.h +++ b/lib/malloc/imalloc.h @@ -1,6 +1,6 @@ /* imalloc.h -- internal malloc definitions shared by source files. */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -39,11 +39,7 @@ /* Generic pointer type. */ #ifndef PTR_T -# if defined (__STDC__) -# define PTR_T void * -# else -# define PTR_T char * -# endif +# define PTR_T void * #endif #if !defined (NULL) @@ -72,14 +68,6 @@ # endif /* HAVE_BCOPY */ #endif /* !__GNUC__ */ -#if !defined (PARAMS) -# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) || defined (PROTOTYPES) -# define PARAMS(protos) protos -# else -# define PARAMS(protos) () -# endif -#endif - /* Use Duff's device for good zeroing/copying performance. DO NOT call the Duff's device macros with NBYTES == 0. */ @@ -172,7 +160,7 @@ do { \ #include <signal.h> -extern void _malloc_block_signals PARAMS((sigset_t *, sigset_t *)); -extern void _malloc_unblock_signals PARAMS((sigset_t *, sigset_t *)); +extern void _malloc_block_signals (sigset_t *, sigset_t *); +extern void _malloc_unblock_signals (sigset_t *, sigset_t *); #endif /* _IMALLOC_H */ diff --git a/lib/malloc/malloc.c b/lib/malloc/malloc.c index f61f02715..7b2c3f257 100644 --- a/lib/malloc/malloc.c +++ b/lib/malloc/malloc.c @@ -1,6 +1,6 @@ /* malloc.c - dynamic memory allocation for bash. */ -/* Copyright (C) 1985-2021 Free Software Foundation, Inc. +/* Copyright (C) 1985-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -299,7 +299,7 @@ static const unsigned long binsizes[NBUCKETS] = { }; /* binsizes[x] == (1 << ((x) + 5)) */ -#define binsize(x) binsizes[(x)] +#define binsize(x) binsizes[(size_t) (x)] #define MAXALLOC_SIZE binsizes[NBUCKETS-1] @@ -308,33 +308,33 @@ extern int errno; #endif /* Declarations for internal functions */ -static PTR_T internal_malloc PARAMS((size_t, const char *, int, int)); -static PTR_T internal_realloc PARAMS((PTR_T, size_t, const char *, int, int)); -static void internal_free PARAMS((PTR_T, const char *, int, int)); -static PTR_T internal_memalign PARAMS((size_t, size_t, const char *, int, int)); +static PTR_T internal_malloc (size_t, const char *, int, int); +static PTR_T internal_realloc (PTR_T, size_t, const char *, int, int); +static void internal_free (PTR_T, const char *, int, int); +static PTR_T internal_memalign (size_t, size_t, const char *, int, int); #ifndef NO_CALLOC -static PTR_T internal_calloc PARAMS((size_t, size_t, const char *, int, int)); -static void internal_cfree PARAMS((PTR_T, const char *, int, int)); +static PTR_T internal_calloc (size_t, size_t, const char *, int, int); +static void internal_cfree (PTR_T, const char *, int, int); #endif #ifndef NO_VALLOC -static PTR_T internal_valloc PARAMS((size_t, const char *, int, int)); +static PTR_T internal_valloc (size_t, const char *, int, int); #endif -static PTR_T internal_remap PARAMS((PTR_T, size_t, int, int)); +static PTR_T internal_remap (PTR_T, size_t, int, int); #if defined (botch) -extern void botch (); +extern void botch (const char *, ...); #else -static void botch PARAMS((const char *, const char *, int)); +static void botch (const char *, const char *, int); #endif -static void xbotch PARAMS((PTR_T, int, const char *, const char *, int)); +static void xbotch (PTR_T, int, const char *, const char *, int); #if !HAVE_DECL_SBRK -extern char *sbrk (); +extern char *sbrk (int); #endif /* !HAVE_DECL_SBRK */ #ifdef SHELL extern int running_trap; -extern int signal_is_trapped PARAMS((int)); +extern int signal_is_trapped (int); #endif #ifdef MALLOC_STATS @@ -353,16 +353,13 @@ int malloc_mmap_threshold = MMAP_THRESHOLD; char _malloc_trace_buckets[NBUCKETS]; /* These should really go into a header file. */ -extern void mtrace_alloc PARAMS((const char *, PTR_T, size_t, const char *, int)); -extern void mtrace_free PARAMS((PTR_T, int, const char *, int)); +extern void mtrace_alloc (const char *, PTR_T, size_t, const char *, int); +extern void mtrace_free (PTR_T, int, const char *, int); #endif #if !defined (botch) static void -botch (s, file, line) - const char *s; - const char *file; - int line; +botch (const char *s, const char *file, int line) { fprintf (stderr, _("malloc: failed assertion: %s\n"), s); (void)fflush (stderr); @@ -373,12 +370,7 @@ botch (s, file, line) /* print the file and line number that caused the assertion failure and call botch() to do whatever the application wants with the information */ static void -xbotch (mem, e, s, file, line) - PTR_T mem; - int e; - const char *s; - const char *file; - int line; +xbotch (PTR_T mem, int e, const char *s, const char *file, int line) { fprintf (stderr, _("\r\nmalloc: %s:%d: assertion botched\r\n"), file ? file : _("unknown"), line); @@ -395,8 +387,7 @@ xbotch (mem, e, s, file, line) assumed to not be busy; the caller (morecore()) checks for this. BUSY[NU] must be set to 1. */ static void -bcoalesce (nu) - register int nu; +bcoalesce (int nu) { register union mhead *mp, *mp1, *mp2; register int nbuck; @@ -464,8 +455,7 @@ bcoalesce (nu) is assumed to be empty. Must be called with signals blocked (e.g., by morecore()). BUSY[NU] must be set to 1. */ static void -bsplit (nu) - register int nu; +bsplit (int nu) { register union mhead *mp; int nbuck, nblks, split_max; @@ -529,9 +519,7 @@ bsplit (nu) /* Take the memory block MP and add it to a chain < NU. NU is the right bucket, but is busy. This avoids memory orphaning. */ static void -xsplit (mp, nu) - union mhead *mp; - int nu; +xsplit (union mhead *mp, int nu) { union mhead *nh; int nbuck, nblks, split_max; @@ -570,8 +558,7 @@ xsplit (mp, nu) } void -_malloc_block_signals (setp, osetp) - sigset_t *setp, *osetp; +_malloc_block_signals (sigset_t *setp, sigset_t *osetp) { #ifdef HAVE_POSIX_SIGNALS sigfillset (setp); @@ -585,8 +572,7 @@ _malloc_block_signals (setp, osetp) } void -_malloc_unblock_signals (setp, osetp) - sigset_t *setp, *osetp; +_malloc_unblock_signals (sigset_t *setp, sigset_t *osetp) { #ifdef HAVE_POSIX_SIGNALS sigprocmask (SIG_SETMASK, osetp, (sigset_t *)NULL); @@ -600,10 +586,9 @@ _malloc_unblock_signals (setp, osetp) #if defined (USE_LESSCORE) /* Return some memory to the system by reducing the break. This is only called with NU > pagebucket, so we're always assured of giving back - more than one page of memory. */ + more than one page of memory. NU is the size index we're discarding */ static void -lesscore (nu) /* give system back some memory */ - register int nu; /* size index we're discarding */ +lesscore (int nu) { long siz; @@ -622,8 +607,7 @@ lesscore (nu) /* give system back some memory */ /* Ask system for more memory; add to NEXTF[NU]. BUSY[NU] must be set to 1. */ static void -morecore (nu) - register int nu; /* size index to get more of */ +morecore (int nu) { register union mhead *mp; register int nblks; @@ -632,7 +616,7 @@ morecore (nu) sigset_t set, oset; int blocked_sigs; - /* Block all signals in case we are executed from a signal handler. */ + /* Block signals in case we are executed from a signal handler. */ blocked_sigs = 0; #ifdef SHELL # if defined (SIGCHLD) @@ -752,13 +736,13 @@ morecore_done: } static void -malloc_debug_dummy () +malloc_debug_dummy (void) { write (1, "malloc_debug_dummy\n", 19); } static int -pagealign () +pagealign (void) { register int nunits; register union mhead *mp; @@ -823,12 +807,10 @@ pagealign () return 0; } - + +/* allocate a block of memory */ static PTR_T -internal_malloc (n, file, line, flags) /* get a block */ - size_t n; - const char *file; - int line, flags; +internal_malloc (size_t n, const char *file, int line, int flags) { register union mhead *p; register int nunits; @@ -947,10 +929,7 @@ internal_malloc (n, file, line, flags) /* get a block */ } static void -internal_free (mem, file, line, flags) - PTR_T mem; - const char *file; - int line, flags; +internal_free (PTR_T mem, const char *file, int line, int flags) { register union mhead *p; register char *ap, *z; @@ -1018,10 +997,13 @@ internal_free (mem, file, line, flags) #if defined (USE_MMAP) if (nunits > malloc_mmap_threshold) { + int o; + o = errno; munmap (p, binsize (nunits)); #if defined (MALLOC_STATS) _mstats.nlesscore[nunits]++; #endif + errno = o; /* POSIX says free preserves errno */ goto free_return; } #endif @@ -1036,7 +1018,10 @@ internal_free (mem, file, line, flags) there's already a block on the free list. */ if ((nunits >= LESSCORE_FRC) || busy[nunits] || nextf[nunits] != 0) { + int o; + o = errno; lesscore (nunits); + errno = o; /* keeps the tracing and registering code in one place */ goto free_return; } @@ -1096,11 +1081,7 @@ free_return: new size, call mremap with the new size, and add the bookkeeping and guard information back in. */ static PTR_T -internal_remap (mem, n, nunits, flags) - PTR_T mem; - register size_t n; - int nunits; - int flags; +internal_remap (PTR_T mem, register size_t n, int nunits, int flags) { register union mhead *p, *np; char *m, *z; @@ -1143,11 +1124,7 @@ internal_remap (mem, n, nunits, flags) #endif static PTR_T -internal_realloc (mem, n, file, line, flags) - PTR_T mem; - register size_t n; - const char *file; - int line, flags; +internal_realloc (PTR_T mem, size_t n, const char *file, int line, int flags) { register union mhead *p; register MALLOC_SIZE_T tocopy; @@ -1294,11 +1271,7 @@ internal_realloc (mem, n, file, line, flags) } static PTR_T -internal_memalign (alignment, size, file, line, flags) - size_t alignment; - size_t size; - const char *file; - int line, flags; +internal_memalign (size_t alignment, size_t size, const char *file, int line, int flags) { register char *ptr; register char *aligned; @@ -1324,9 +1297,7 @@ internal_memalign (alignment, size, file, line, flags) } int -posix_memalign (memptr, alignment, size) - void **memptr; - size_t alignment, size; +posix_memalign (void **memptr, size_t alignment, size_t size) { void *mem; @@ -1346,8 +1317,7 @@ posix_memalign (memptr, alignment, size) } size_t -malloc_usable_size (mem) - void *mem; +malloc_usable_size (void *mem) { register union mhead *p; register char *ap; @@ -1376,10 +1346,7 @@ malloc_usable_size (mem) /* This runs into trouble with getpagesize on HPUX, and Multimax machines. Patching out seems cleaner than the ugly fix needed. */ static PTR_T -internal_valloc (size, file, line, flags) - size_t size; - const char *file; - int line, flags; +internal_valloc (size_t size, const char *file, int line, int flags) { return internal_memalign (getpagesize (), size, file, line, flags|MALLOC_INTERNAL); } @@ -1387,10 +1354,7 @@ internal_valloc (size, file, line, flags) #ifndef NO_CALLOC static PTR_T -internal_calloc (n, s, file, line, flags) - size_t n, s; - const char *file; - int line, flags; +internal_calloc (size_t n, size_t s, const char *file, int line, int flags) { size_t total; PTR_T result; @@ -1403,10 +1367,7 @@ internal_calloc (n, s, file, line, flags) } static void -internal_cfree (p, file, line, flags) - PTR_T p; - const char *file; - int line, flags; +internal_cfree (PTR_T p, const char *file, int line, int flags) { internal_free (p, file, line, flags|MALLOC_INTERNAL); } @@ -1414,8 +1375,7 @@ internal_cfree (p, file, line, flags) #ifdef MALLOC_STATS int -malloc_free_blocks (size) - int size; +malloc_free_blocks (int size) { int nfree; register union mhead *p; @@ -1430,58 +1390,38 @@ malloc_free_blocks (size) #if defined (MALLOC_WRAPFUNCS) PTR_T -sh_malloc (bytes, file, line) - size_t bytes; - const char *file; - int line; +sh_malloc (size_t bytes, const char *file, int line) { return internal_malloc (bytes, file, line, MALLOC_WRAPPER); } PTR_T -sh_realloc (ptr, size, file, line) - PTR_T ptr; - size_t size; - const char *file; - int line; +sh_realloc (PTR_T ptr, size_t size, const char *file, int line) { return internal_realloc (ptr, size, file, line, MALLOC_WRAPPER); } void -sh_free (mem, file, line) - PTR_T mem; - const char *file; - int line; +sh_free (PTR_T mem, const char *file, int line) { internal_free (mem, file, line, MALLOC_WRAPPER); } PTR_T -sh_memalign (alignment, size, file, line) - size_t alignment; - size_t size; - const char *file; - int line; +sh_memalign (size_t alignment, size_t size, const char *file, int line) { return internal_memalign (alignment, size, file, line, MALLOC_WRAPPER); } #ifndef NO_CALLOC PTR_T -sh_calloc (n, s, file, line) - size_t n, s; - const char *file; - int line; +sh_calloc (size_t n, size_t s, const char *file, int line) { return internal_calloc (n, s, file, line, MALLOC_WRAPPER); } void -sh_cfree (mem, file, line) - PTR_T mem; - const char *file; - int line; +sh_cfree (PTR_T mem, const char *file, int line) { internal_cfree (mem, file, line, MALLOC_WRAPPER); } @@ -1489,10 +1429,7 @@ sh_cfree (mem, file, line) #ifndef NO_VALLOC PTR_T -sh_valloc (size, file, line) - size_t size; - const char *file; - int line; +sh_valloc (size_t size, const char *file, int line) { return internal_valloc (size, file, line, MALLOC_WRAPPER); } @@ -1503,39 +1440,32 @@ sh_valloc (size, file, line) /* Externally-available functions that call their internal counterparts. */ PTR_T -malloc (size) - size_t size; +malloc (size_t size) { return internal_malloc (size, (char *)NULL, 0, 0); } PTR_T -realloc (mem, nbytes) - PTR_T mem; - size_t nbytes; +realloc (PTR_T mem, size_t nbytes) { return internal_realloc (mem, nbytes, (char *)NULL, 0, 0); } void -free (mem) - PTR_T mem; +free (PTR_T mem) { internal_free (mem, (char *)NULL, 0, 0); } PTR_T -memalign (alignment, size) - size_t alignment; - size_t size; +memalign (size_t alignment, size_t size) { return internal_memalign (alignment, size, (char *)NULL, 0, 0); } #ifndef NO_VALLOC PTR_T -valloc (size) - size_t size; +valloc (size_t size) { return internal_valloc (size, (char *)NULL, 0, 0); } @@ -1543,15 +1473,13 @@ valloc (size) #ifndef NO_CALLOC PTR_T -calloc (n, s) - size_t n, s; +calloc (size_t n, size_t s) { return internal_calloc (n, s, (char *)NULL, 0, 0); } void -cfree (mem) - PTR_T mem; +cfree (PTR_T mem) { internal_cfree (mem, (char *)NULL, 0, 0); } diff --git a/lib/malloc/mstats.h b/lib/malloc/mstats.h index aa3fa33b4..234725edb 100644 --- a/lib/malloc/mstats.h +++ b/lib/malloc/mstats.h @@ -1,6 +1,6 @@ /* mstats.h - definitions for malloc statistics */ -/* Copyright (C) 2001-2021 Free Software Foundation, Inc. +/* Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -104,10 +104,10 @@ struct bucket_stats { int nmmap; /* currently unused */ }; -extern struct bucket_stats malloc_bucket_stats PARAMS((int)); -extern struct _malstats malloc_stats PARAMS((void)); -extern void print_malloc_stats PARAMS((char *)); -extern void trace_malloc_stats PARAMS((char *, char *)); +extern struct bucket_stats malloc_bucket_stats (int); +extern struct _malstats malloc_stats (void); +extern void print_malloc_stats (char *); +extern void trace_malloc_stats (char *, char *); #endif /* MALLOC_STATS */ diff --git a/lib/malloc/shmalloc.h b/lib/malloc/shmalloc.h index d51193eb0..5ea2c56e6 100644 --- a/lib/malloc/shmalloc.h +++ b/lib/malloc/shmalloc.h @@ -1,6 +1,7 @@ /* Functions (currently) for use by the shell to do malloc debugging and tracking. */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. + +/* Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -21,50 +22,35 @@ #ifndef _SH_MALLOC_H #define _SH_MALLOC_H -#ifndef PARAMS -# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) -# define PARAMS(protos) protos -# else -# define PARAMS(protos) () -# endif -#endif - /* Generic pointer type. */ #ifndef PTR_T - -#if defined (__STDC__) # define PTR_T void * -#else -# define PTR_T char * -#endif - #endif /* PTR_T */ +extern PTR_T sh_malloc (size_t, const char *, int); +extern PTR_T sh_realloc (PTR_T, size_t, const char *, int); +extern void sh_free (PTR_T, const char *, int); -extern PTR_T sh_malloc PARAMS((size_t, const char *, int)); -extern PTR_T sh_realloc PARAMS((PTR_T, size_t, const char *, int)); -extern void sh_free PARAMS((PTR_T, const char *, int)); - -extern PTR_T sh_memalign PARAMS((size_t, size_t, const char *, int)); +extern PTR_T sh_memalign (size_t, size_t, const char *, int); -extern PTR_T sh_calloc PARAMS((size_t, size_t, const char *, int)); -extern void sh_cfree PARAMS((PTR_T, const char *, int)); +extern PTR_T sh_calloc (size_t, size_t, const char *, int); +extern void sh_cfree (PTR_T, const char *, int); -extern PTR_T sh_valloc PARAMS((size_t, const char *, int)); +extern PTR_T sh_valloc (size_t, const char *, int); /* trace.c */ -extern int malloc_set_trace PARAMS((int)); +extern int malloc_set_trace (int); extern void malloc_set_tracefp (); /* full prototype requires stdio.h */ -extern void malloc_set_tracefn PARAMS((char *, char *)); +extern void malloc_set_tracefn (char *, char *); /* table.c */ -extern void mregister_dump_table PARAMS((void)); -extern void mregister_table_init PARAMS((void)); -extern int malloc_set_register PARAMS((int)); +extern void mregister_dump_table (void); +extern void mregister_table_init (void); +extern int malloc_set_register (int); /* stats.c */ -extern void print_malloc_stats PARAMS((char *)); +extern void print_malloc_stats (char *); extern void fprint_malloc_stats (); /* full prototype requires stdio.h */ -extern void trace_malloc_stats PARAMS((char *, char *)); +extern void trace_malloc_stats (char *, char *); #endif diff --git a/lib/malloc/stats.c b/lib/malloc/stats.c index b38df9f4d..a26d44a7f 100644 --- a/lib/malloc/stats.c +++ b/lib/malloc/stats.c @@ -1,6 +1,6 @@ /* stats.c - malloc statistics */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -34,17 +34,16 @@ #include "mstats.h" -extern int malloc_free_blocks PARAMS((int)); +extern int malloc_free_blocks (int); extern int malloc_mmap_threshold; extern struct _malstats _mstats; -extern FILE *_imalloc_fopen PARAMS((char *, char *, char *, char *, size_t)); +extern FILE *_imalloc_fopen (char *, char *, char *, char *, size_t); struct bucket_stats -malloc_bucket_stats (size) - int size; +malloc_bucket_stats (int size) { struct bucket_stats v; @@ -75,7 +74,7 @@ malloc_bucket_stats (size) is the total number of bytes in use. These two fields are fairly expensive to compute, so we do it only when asked to. */ struct _malstats -malloc_stats () +malloc_stats (void) { struct _malstats result; struct bucket_stats v; @@ -93,9 +92,7 @@ malloc_stats () } static void -_print_malloc_stats (s, fp) - char *s; - FILE *fp; +_print_malloc_stats (char *s, FILE *fp) { register int i; unsigned long totused, totfree; @@ -128,16 +125,13 @@ _print_malloc_stats (s, fp) } void -print_malloc_stats (s) - char *s; +print_malloc_stats (char *s) { _print_malloc_stats (s, stderr); } void -fprint_malloc_stats (s, fp) - char *s; - FILE *fp; +fprint_malloc_stats (char *s, FILE *fp) { _print_malloc_stats (s, fp); } @@ -145,8 +139,7 @@ fprint_malloc_stats (s, fp) #define TRACEROOT "/var/tmp/maltrace/stats." void -trace_malloc_stats (s, fn) - char *s, *fn; +trace_malloc_stats (char *s, char *fn) { FILE *fp; char defname[sizeof (TRACEROOT) + 64]; @@ -166,12 +159,7 @@ trace_malloc_stats (s, fn) #if defined (MALLOC_STATS) || defined (MALLOC_TRACE) FILE * -_imalloc_fopen (s, fn, def, defbuf, defsiz) - char *s; - char *fn; - char *def; - char *defbuf; - size_t defsiz; +_imalloc_fopen (char *s, char *fn, char *def, char *defbuf, size_t defsiz) { char fname[1024]; long l; diff --git a/lib/malloc/table.c b/lib/malloc/table.c index e6acbf4ac..be6a88d91 100644 --- a/lib/malloc/table.c +++ b/lib/malloc/table.c @@ -1,6 +1,6 @@ /* table.c - bookkeeping functions for allocated memory */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -30,14 +30,14 @@ #ifdef SHELL extern int running_trap; -extern int signal_is_trapped PARAMS((int)); +extern int signal_is_trapped (int); #endif extern int malloc_register; #ifdef MALLOC_REGISTER -extern FILE *_imalloc_fopen PARAMS((char *, char *, char *, char *, size_t)); +extern FILE *_imalloc_fopen (char *, char *, char *, char *, size_t); #define FIND_ALLOC 0x01 /* find slot for new allocation */ #define FIND_EXIST 0x02 /* find slot for existing entry for free() or search */ @@ -60,8 +60,7 @@ static ma_table_t mlocation_table[REG_TABLE_SIZE]; * NOTE: taken from dmalloc (http://dmalloc.com) and modified. */ static unsigned int -mt_hash (key) - const PTR_T key; +mt_hash (const PTR_T key) { unsigned int a, b, c; unsigned long x; @@ -78,8 +77,7 @@ mt_hash (key) #if 0 static unsigned int -which_bucket (mem) - PTR_T mem; +which_bucket (PTR_T mem) { return (mt_hash ((unsigned char *)mem) & (REG_TABLE_SIZE-1)); } @@ -95,9 +93,7 @@ which_bucket (mem) #endif static mr_table_t * -find_entry (mem, flags) - PTR_T mem; - int flags; +find_entry (PTR_T mem, int flags) { unsigned int bucket; register mr_table_t *tp; @@ -135,16 +131,13 @@ find_entry (mem, flags) } mr_table_t * -mr_table_entry (mem) - PTR_T mem; +mr_table_entry (PTR_T mem) { return (find_entry (mem, FIND_EXIST)); } void -mregister_describe_mem (mem, fp) - PTR_T mem; - FILE *fp; +mregister_describe_mem (PTR_T mem, FILE *fp) { mr_table_t *entry; @@ -160,12 +153,7 @@ mregister_describe_mem (mem, fp) } void -mregister_alloc (tag, mem, size, file, line) - const char *tag; - PTR_T mem; - size_t size; - const char *file; - int line; +mregister_alloc (const char *tag, PTR_T mem, size_t size, const char *file, int line) { mr_table_t *tentry; sigset_t set, oset; @@ -216,11 +204,7 @@ mregister_alloc (tag, mem, size, file, line) } void -mregister_free (mem, size, file, line) - PTR_T mem; - int size; - const char *file; - int line; +mregister_free (PTR_T mem, int size, const char *file, int line) { mr_table_t *tentry; sigset_t set, oset; @@ -268,8 +252,7 @@ mregister_free (mem, size, file, line) /* If we ever add more flags, this will require changes. */ static char * -_entry_flags(x) - int x; +_entry_flags(int x) { if (x & MT_FREE) return "free"; @@ -280,8 +263,7 @@ _entry_flags(x) } static void -_register_dump_table(fp) - FILE *fp; +_register_dump_table(FILE *fp) { register int i; mr_table_t entry; @@ -303,13 +285,13 @@ _register_dump_table(fp) } void -mregister_dump_table() +mregister_dump_table(void) { _register_dump_table (stderr); } void -mregister_table_init () +mregister_table_init (void) { memset (mem_table, 0, sizeof(mr_table_t) * REG_TABLE_SIZE); memset (&mem_overflow, 0, sizeof (mr_table_t)); @@ -319,9 +301,7 @@ mregister_table_init () /* Simple for now */ static ma_table_t * -find_location_entry (file, line) - const char *file; - int line; +find_location_entry (const char *file, int line) { register ma_table_t *tp, *endp; @@ -335,9 +315,7 @@ find_location_entry (file, line) } void -mlocation_register_alloc (file, line) - const char *file; - int line; +mlocation_register_alloc (const char *file, int line) { ma_table_t *lentry; const char *nfile; @@ -372,8 +350,7 @@ mlocation_register_alloc (file, line) } static void -_location_dump_table (fp) - FILE *fp; +_location_dump_table (FILE *fp) { register ma_table_t *tp, *endp; @@ -385,7 +362,7 @@ _location_dump_table (fp) } void -mlocation_dump_table () +mlocation_dump_table (void) { _location_dump_table (stderr); } @@ -393,7 +370,7 @@ mlocation_dump_table () #define LOCROOT "/var/tmp/maltrace/locations." void -mlocation_write_table () +mlocation_write_table (void) { FILE *fp; char defname[sizeof (LOCROOT) + 64]; @@ -406,7 +383,7 @@ mlocation_write_table () } void -mlocation_table_init () +mlocation_table_init (void) { memset (mlocation_table, 0, sizeof (ma_table_t) * REG_TABLE_SIZE); mlocation_table[0].file = ""; /* reserve slot 0 for unknown locations */ @@ -418,8 +395,7 @@ mlocation_table_init () #endif /* MALLOC_REGISTER */ int -malloc_set_register(n) - int n; +malloc_set_register (int n) { int old; diff --git a/lib/malloc/table.h b/lib/malloc/table.h index 92866cf28..604fefcc1 100644 --- a/lib/malloc/table.h +++ b/lib/malloc/table.h @@ -1,6 +1,6 @@ /* table.h - definitions for tables for keeping track of allocated memory */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -57,12 +57,12 @@ typedef struct mr_table { #define REG_TABLE_SIZE 8192 -extern mr_table_t *mr_table_entry PARAMS((PTR_T)); -extern void mregister_alloc PARAMS((const char *, PTR_T, size_t, const char *, int)); -extern void mregister_free PARAMS((PTR_T, int, const char *, int)); -extern void mregister_describe_mem (); -extern void mregister_dump_table PARAMS((void)); -extern void mregister_table_init PARAMS((void)); +extern mr_table_t *mr_table_entry (PTR_T); +extern void mregister_alloc (const char *, PTR_T, size_t, const char *, int); +extern void mregister_free (PTR_T, int, const char *, int); +extern void mregister_describe_mem (PTR_T, FILE *); /* needs stdio.h */ +extern void mregister_dump_table (void); +extern void mregister_table_init (void); typedef struct ma_table { const char *file; @@ -70,10 +70,10 @@ typedef struct ma_table { int nalloc; } ma_table_t; -extern void mlocation_register_alloc PARAMS((const char *, int)); -extern void mlocation_table_init PARAMS((void)); -extern void mlocation_dump_table PARAMS((void)); -extern void mlocation_write_table PARAMS((void)); +extern void mlocation_register_alloc (const char *, int); +extern void mlocation_table_init (void); +extern void mlocation_dump_table (void); +extern void mlocation_write_table (void); /* NOTE: HASH_MIX taken from dmalloc (http://dmalloc.com) */ diff --git a/lib/malloc/trace.c b/lib/malloc/trace.c index 391ca9d89..e968e620c 100644 --- a/lib/malloc/trace.c +++ b/lib/malloc/trace.c @@ -1,6 +1,6 @@ /* trace.c - tracing functions for malloc */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,18 +35,13 @@ static int _mtrace_verbose = 0; #ifdef MALLOC_TRACE -extern FILE *_imalloc_fopen PARAMS((char *, char *, char *, char *, size_t)); +extern FILE *_imalloc_fopen (char *, char *, char *, char *, size_t); FILE *_mtrace_fp = NULL; extern char _malloc_trace_buckets[]; void -mtrace_alloc (tag, mem, size, file, line) - const char *tag; - PTR_T mem; - size_t size; - const char *file; - int line; +mtrace_alloc (const char *tag, PTR_T mem, size_t size, const char *file, int line) { if (_mtrace_fp == NULL) _mtrace_fp = stderr; @@ -60,11 +55,7 @@ mtrace_alloc (tag, mem, size, file, line) } void -mtrace_free (mem, size, file, line) - PTR_T mem; - int size; - const char *file; - int line; +mtrace_free (PTR_T mem, int size, const char *file, int line) { if (_mtrace_fp == NULL) _mtrace_fp = stderr; @@ -79,8 +70,7 @@ mtrace_free (mem, size, file, line) #endif /* MALLOC_TRACE */ int -malloc_set_trace (n) - int n; +malloc_set_trace (int n) { int old; @@ -91,8 +81,7 @@ malloc_set_trace (n) } void -malloc_set_tracefp (fp) - FILE *fp; +malloc_set_tracefp (FILE *fp) { #ifdef MALLOC_TRACE _mtrace_fp = fp ? fp : stderr; @@ -100,8 +89,7 @@ malloc_set_tracefp (fp) } void -malloc_trace_bin (n) - int n; +malloc_trace_bin (int n) { #ifdef MALLOC_TRACE _malloc_trace_buckets[n] = 1; @@ -111,9 +99,7 @@ malloc_trace_bin (n) #define TRACEROOT "/var/tmp/maltrace/trace." void -malloc_set_tracefn (s, fn) - char *s; - char *fn; +malloc_set_tracefn (char *s, char *fn) { #ifdef MALLOC_TRACE FILE *fp; diff --git a/lib/malloc/watch.c b/lib/malloc/watch.c index 00c8a8248..681b55939 100644 --- a/lib/malloc/watch.c +++ b/lib/malloc/watch.c @@ -1,6 +1,6 @@ /* watch.c - watchpoint functions for malloc */ -/* Copyright (C) 2001-2003 Free Software Foundation, Inc. +/* Copyright (C) 2001-2003, 2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,11 +35,7 @@ int _malloc_nwatch; static PTR_T _malloc_watch_list[WATCH_MAX]; static void -watch_warn (addr, file, line, type, data) - PTR_T addr; - const char *file; - int line, type; - unsigned long data; +watch_warn (PTR_T addr, const char *file, int line, int type, unsigned long data) { char *tag; @@ -61,11 +57,7 @@ watch_warn (addr, file, line, type, data) } void -_malloc_ckwatch (addr, file, line, type, data) - PTR_T addr; - const char *file; - int line, type; - unsigned long data; +_malloc_ckwatch (PTR_T addr, const char *file, int line, int type, unsigned long data) { register int i; @@ -81,8 +73,7 @@ _malloc_ckwatch (addr, file, line, type, data) #endif /* MALLOC_WATCH */ PTR_T -malloc_watch (addr) - PTR_T addr; +malloc_watch (PTR_T addr) { register int i; PTR_T ret; @@ -117,8 +108,7 @@ malloc_watch (addr) watchpoints. Returns ADDR if everything went OK, NULL if ADDR was not being watched. */ PTR_T -malloc_unwatch (addr) - PTR_T addr; +malloc_unwatch (PTR_T addr) { #ifdef MALLOC_WATCH register int i; diff --git a/lib/malloc/watch.h b/lib/malloc/watch.h index 2a0f4970a..81900d3e8 100644 --- a/lib/malloc/watch.h +++ b/lib/malloc/watch.h @@ -1,6 +1,6 @@ /* watch.h - definitions for tables for keeping track of allocated memory */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne-Again SHell. @@ -34,8 +34,8 @@ extern int _malloc_nwatch; -extern void _malloc_ckwatch PARAMS((PTR_T, const char *, int, int, unsigned long)); - +extern void _malloc_ckwatch (PTR_T, const char *, int, int, unsigned long); + #endif /* MALLOC_WATCH */ #endif /* _MWATCH_H */ diff --git a/lib/malloc/xmalloc.c b/lib/malloc/xmalloc.c index f6dec67a8..59759834f 100644 --- a/lib/malloc/xmalloc.c +++ b/lib/malloc/xmalloc.c @@ -1,6 +1,6 @@ /* xmalloc.c -- safe versions of malloc and realloc */ -/* Copyright (C) 1991-2003 Free Software Foundation, Inc. +/* Copyright (C) 1991-2003, 2022 Free Software Foundation, Inc. This file is part of GNU Readline, a library for reading lines of text with interactive input and history editing. @@ -33,13 +33,7 @@ /* Generic pointer type. */ #ifndef PTR_T - -#if defined (__STDC__) # define PTR_T void * -#else -# define PTR_T char * -#endif - #endif /* PTR_T */ /* **************************************************************** */ @@ -49,8 +43,7 @@ /* **************************************************************** */ static void -memory_error_and_abort (fname) - char *fname; +memory_error_and_abort (char *fname) { fprintf (stderr, "%s: out of virtual memory\n", fname); exit (2); @@ -60,8 +53,7 @@ memory_error_and_abort (fname) to hold BYTES number of bytes. If the memory cannot be allocated, print an error message and abort. */ PTR_T -xmalloc (bytes) - size_t bytes; +xmalloc (size_t bytes) { PTR_T temp; @@ -72,9 +64,7 @@ xmalloc (bytes) } PTR_T -xrealloc (pointer, bytes) - PTR_T pointer; - size_t bytes; +xrealloc (PTR_T pointer, size_t bytes) { PTR_T temp; @@ -86,8 +76,7 @@ xrealloc (pointer, bytes) } void -xfree (string) - PTR_T string; +xfree (PTR_T string) { if (string) free (string); diff --git a/lib/readline/Makefile.in b/lib/readline/Makefile.in index 3b16139d5..431cf5349 100644 --- a/lib/readline/Makefile.in +++ b/lib/readline/Makefile.in @@ -282,6 +282,9 @@ parse-colors.o: ${BUILD_DIR}/config.h colors.h parse-colors.h parse-colors.o: rldefs.h rlconf.h parse-colors.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h +input.o: posixselect.h posixtime.h +parens.o: posixselect.h posixtime.h + bind.o: rlshell.h histfile.o: rlshell.h nls.o: rlshell.h diff --git a/lib/readline/ansi_stdlib.h b/lib/readline/ansi_stdlib.h index 7dc2ee0cf..3cb3e0717 100644 --- a/lib/readline/ansi_stdlib.h +++ b/lib/readline/ansi_stdlib.h @@ -2,7 +2,7 @@ /* A minimal stdlib.h containing extern declarations for those functions that bash uses. */ -/* Copyright (C) 1993 Free Software Foundation, Inc. +/* Copyright (C) 1993,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -32,13 +32,7 @@ extern double strtod (); /* Memory allocation functions. */ /* Generic pointer type. */ #ifndef PTR_T - -#if defined (__STDC__) # define PTR_T void * -#else -# define PTR_T char * -#endif - #endif /* PTR_T */ extern PTR_T malloc (); diff --git a/lib/readline/bind.c b/lib/readline/bind.c index 971116a90..af3d70eca 100644 --- a/lib/readline/bind.c +++ b/lib/readline/bind.c @@ -1,6 +1,6 @@ /* bind.c -- key binding and startup file support for the readline library. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -65,20 +65,15 @@ extern int errno; #include "rlshell.h" #include "xmalloc.h" -#if !defined (strchr) && !defined (__STDC__) -extern char *strchr (), *strrchr (); -#endif /* !strchr && !__STDC__ */ - /* Variables exported by this file. */ Keymap rl_binding_keymap; +/* Functions exported by this file. */ +rl_macro_print_func_t *rl_macro_display_hook = (rl_macro_print_func_t *)NULL; + static int _rl_skip_to_delim (char *, int, int); -#if defined (USE_VARARGS) && defined (PREFER_STDARG) static void _rl_init_file_error (const char *, ...) __attribute__((__format__ (printf, 1, 2))); -#else -static void _rl_init_file_error (); -#endif static rl_command_func_t *_rl_function_of_keyseq_internal (const char *, size_t, Keymap, int *); @@ -531,8 +526,7 @@ rl_translate_keyseq (const char *seq, char *array, int *len) /* When there are incomplete prefixes \C- or \M- (has_control || has_meta) without base character at the end of SEQ, they are processed as the - prefixes for '\0'. - */ + prefixes for '\0'. */ for (i = l = 0; (c = seq[i]) || has_control || has_meta; i++) { /* Only backslashes followed by a non-null character are handled @@ -629,11 +623,17 @@ rl_translate_keyseq (const char *seq, char *array, int *len) has_meta = 0; } - /* If convert-meta is turned on, convert a meta char to a key sequence */ + /* If convert-meta is turned on, convert a meta char to a key sequence */ if (META_CHAR (c) && _rl_convert_meta_chars_to_ascii) { - array[l++] = ESC; /* ESC is meta-prefix */ - array[l++] = UNMETA (c); + int x = UNMETA (c); + if (x) + { + array[l++] = ESC; /* ESC is meta-prefix */ + array[l++] = x; + } + else + array[l++] = c; /* just do the best we can without sticking a NUL in there. */ } else array[l++] = (c); @@ -685,7 +685,8 @@ char * rl_untranslate_keyseq (int seq) { static char kseq[16]; - int i, c; + int i; + unsigned char c; i = 0; c = seq; @@ -696,35 +697,22 @@ rl_untranslate_keyseq (int seq) kseq[i++] = '-'; c = UNMETA (c); } - else if (c == ESC) + + if (c == ESC) { kseq[i++] = '\\'; c = 'e'; } - else if (CTRL_CHAR (c)) - { - kseq[i++] = '\\'; - kseq[i++] = 'C'; - kseq[i++] = '-'; - c = _rl_to_lower (UNCTRL (c)); - } - else if (c == RUBOUT) + else if (CTRL_CHAR (c) || c == RUBOUT) { kseq[i++] = '\\'; kseq[i++] = 'C'; kseq[i++] = '-'; - c = '?'; + c = (c == RUBOUT) ? '?' : _rl_to_lower (UNCTRL (c)); } - if (c == ESC) - { - kseq[i++] = '\\'; - c = 'e'; - } - else if (c == '\\' || c == '"') - { - kseq[i++] = '\\'; - } + if (c == '\\' || c == '"') + kseq[i++] = '\\'; kseq[i++] = (unsigned char) c; kseq[i] = '\0'; @@ -735,9 +723,9 @@ char * _rl_untranslate_macro_value (char *seq, int use_escapes) { char *ret, *r, *s; - int c; + unsigned char c; - r = ret = (char *)xmalloc (7 * strlen (seq) + 1); + r = ret = (char *)xmalloc (8 * strlen (seq) + 1); for (s = seq; *s; s++) { c = *s; @@ -748,7 +736,9 @@ _rl_untranslate_macro_value (char *seq, int use_escapes) *r++ = '-'; c = UNMETA (c); } - else if (c == ESC) + + /* We want to keep from printing literal control chars */ + if (c == ESC) { *r++ = '\\'; c = 'e'; @@ -773,15 +763,10 @@ _rl_untranslate_macro_value (char *seq, int use_escapes) c = '?'; } - if (c == ESC) - { - *r++ = '\\'; - c = 'e'; - } - else if (c == '\\' || c == '"') + if (c == '\\' || c == '"') *r++ = '\\'; - *r++ = (unsigned char)c; + *r++ = c; } *r = '\0'; return ret; @@ -889,21 +874,30 @@ int rl_trim_arg_from_keyseq (const char *keyseq, size_t len, Keymap map) { register int i, j, parsing_digits; - unsigned char ic; + unsigned int ic; /* int to handle ANYOTHERKEY */ Keymap map0; if (map == 0) map = _rl_keymap; map0 = map; - /* The digits following the initial one (e.g., the binding to digit-argument) - or the optional `-' in a binding to digit-argument or universal-argument - are not added to rl_executing_keyseq. This is basically everything read by - rl_digit_loop. The parsing_digits logic is here in case they ever are. */ + /* Make sure to add the digits following the initial one (e.g., the binding + to digit-argument) and the optional `-' in a binding to digit-argument + or universal-argument to rl_executing_keyseq. This is basically + everything read by rl_digit_loop. */ for (i = j = parsing_digits = 0; keyseq && i < len; i++) { ic = keyseq[i]; + if (parsing_digits == 2) + { + if (ic == '-') /* skip over runs of minus chars */ + { + j = i + 1; + continue; + } + parsing_digits = 1; + } if (parsing_digits) { if (_rl_digit_p (ic)) @@ -916,10 +910,11 @@ rl_trim_arg_from_keyseq (const char *keyseq, size_t len, Keymap map) if (map[ic].type == ISKMAP) { - if (i + 1 == len) - return -1; map = FUNCTION_TO_KEYMAP (map, ic); - continue; + if (i + 1 == len) + ic = ANYOTHERKEY; + else + continue; } if (map[ic].type == ISFUNC) { @@ -938,16 +933,11 @@ rl_trim_arg_from_keyseq (const char *keyseq, size_t len, Keymap map) /* This logic should be identical to rl_digit_loop */ /* We accept M-- as equivalent to M--1, C-u- as equivalent to C-u-1 - but set parsing_digits to 2 to note that we saw `-' */ - if (map[ic].function == rl_universal_argument && (i + 1 == '-')) - { - i++; - parsing_digits = 2; - } - if (map[ic].function == rl_digit_argument && ic == '-') - { - parsing_digits = 2; - } + but set parsing_digits to 2 to note that we saw `-'. See above + for the check that skips over one or more `-' characters. */ + if (map[ic].function == rl_universal_argument || + (map[ic].function == rl_digit_argument && ic == '-')) + parsing_digits = 2; map = map0; j = i + 1; @@ -978,11 +968,20 @@ _rl_read_file (char *filename, size_t *sizep) char *buffer; int i, file; - file = -1; - if (((file = open (filename, O_RDONLY, 0666)) < 0) || (fstat (file, &finfo) < 0)) + file = open (filename, O_RDONLY, 0666); + /* If the open is interrupted, retry once */ + if (file < 0 && errno == EINTR) { + RL_CHECK_SIGNALS (); + file = open (filename, O_RDONLY, 0666); + } + + if ((file < 0) || (fstat (file, &finfo) < 0)) + { + i = errno; if (file >= 0) close (file); + errno = i; return ((char *)NULL); } @@ -991,10 +990,13 @@ _rl_read_file (char *filename, size_t *sizep) /* check for overflow on very large files */ if (file_size != finfo.st_size || file_size + 1 < file_size) { + i = errno; if (file >= 0) close (file); #if defined (EFBIG) errno = EFBIG; +#else + errno = i; #endif return ((char *)NULL); } @@ -1129,25 +1131,11 @@ _rl_read_init_file (const char *filename, int include_level) } static void -#if defined (PREFER_STDARG) _rl_init_file_error (const char *format, ...) -#else -_rl_init_file_error (va_alist) - va_dcl -#endif { va_list args; -#if defined (PREFER_VARARGS) - char *format; -#endif -#if defined (PREFER_STDARG) va_start (args, format); -#else - va_start (args); - format = va_arg (args, char *); -#endif - fprintf (stderr, "readline: "); if (currently_reading_init_file) fprintf (stderr, "%s: line %d: ", current_readline_init_file, @@ -1167,9 +1155,7 @@ _rl_init_file_error (va_alist) /* **************************************************************** */ static int -parse_comparison_op (s, indp) - const char *s; - int *indp; +parse_comparison_op (const char *s, int *indp) { int i, peekc, op; @@ -1247,7 +1233,7 @@ const char *rl_readline_name = "other"; /* Stack of previous values of parsing_conditionalized_out. */ static unsigned char *if_stack = (unsigned char *)NULL; static int if_stack_depth; -static int if_stack_size; +static size_t if_stack_size; /* Push _rl_parsing_conditionalized_out, and set parser state based on ARGS. */ @@ -1672,7 +1658,6 @@ rl_parse_and_bind (char *string) if (_rl_stricmp (string, "set") == 0) { char *var, *value, *e; - int s; var = string + i; /* Make VAR point to start of variable name. */ @@ -1850,7 +1835,7 @@ rl_parse_and_bind (char *string) if (*funname == '\'' || *funname == '"') { char useq[2]; - int fl = strlen (funname); + size_t fl = strlen (funname); useq[0] = key; useq[1] = '\0'; if (fl && funname[fl - 1] == *funname) @@ -1917,6 +1902,7 @@ static const struct { { "prefer-visible-bell", &_rl_prefer_visible_bell, V_SPECIAL }, { "print-completions-horizontally", &_rl_print_completions_horizontally, 0 }, { "revert-all-at-newline", &_rl_revert_all_at_newline, 0 }, + { "search-ignore-case", &_rl_search_case_fold, 0 }, { "show-all-if-ambiguous", &_rl_complete_show_all, 0 }, { "show-all-if-unmodified", &_rl_complete_show_unmodified, 0 }, { "show-mode-in-prompt", &_rl_show_mode_in_prompt, 0 }, @@ -2595,17 +2581,13 @@ _rl_get_keyname (int key) char *keyname; int i, c; - keyname = (char *)xmalloc (8); + keyname = (char *)xmalloc (9); c = key; /* Since this is going to be used to write out keysequence-function pairs for possible inclusion in an inputrc file, we don't want to do any special meta processing on KEY. */ -#if 1 - /* XXX - Experimental */ - /* We might want to do this, but the old version of the code did not. */ - /* If this is an escape character, we don't want to do any more processing. Just add the special ESC key sequence and return. */ if (c == ESC) @@ -2615,28 +2597,23 @@ _rl_get_keyname (int key) keyname[2] = '\0'; return keyname; } -#endif - /* RUBOUT is translated directly into \C-? */ - if (key == RUBOUT) + if (key == ANYOTHERKEY) { - keyname[0] = '\\'; - keyname[1] = 'C'; - keyname[2] = '-'; - keyname[3] = '?'; - keyname[4] = '\0'; + keyname[0] = '\0'; return keyname; } i = 0; + /* Now add special prefixes needed for control characters. This can potentially change C. */ - if (CTRL_CHAR (c)) + if (CTRL_CHAR (c) || c == RUBOUT) { keyname[i++] = '\\'; keyname[i++] = 'C'; keyname[i++] = '-'; - c = _rl_to_lower (UNCTRL (c)); + c = (c == RUBOUT) ? '?' : _rl_to_lower (UNCTRL (c)); } /* XXX experimental code. Turn the characters that are not ASCII or @@ -2678,7 +2655,7 @@ rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map) { register int key; char **result; - int result_index, result_size; + size_t result_index, result_size; result = (char **)NULL; result_index = result_size = 0; @@ -2714,53 +2691,24 @@ rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map) { char **seqs; register int i; + char *keyname; + size_t knlen; /* Find the list of keyseqs in this map which have FUNCTION as their target. Add the key sequences found to RESULT. */ - if (map[key].function) - seqs = - rl_invoking_keyseqs_in_map (function, FUNCTION_TO_KEYMAP (map, key)); - else + if (map[key].function == 0) break; + seqs = rl_invoking_keyseqs_in_map (function, FUNCTION_TO_KEYMAP (map, key)); if (seqs == 0) break; + keyname = _rl_get_keyname (key); + knlen = RL_STRLEN (keyname); + for (i = 0; seqs[i]; i++) { - char *keyname = (char *)xmalloc (6 + strlen (seqs[i])); - - if (key == ESC) - { - /* If ESC is the meta prefix and we're converting chars - with the eighth bit set to ESC-prefixed sequences, then - we can use \M-. Otherwise we need to use the sequence - for ESC. */ - if (_rl_convert_meta_chars_to_ascii && map[ESC].type == ISKMAP) - sprintf (keyname, "\\M-"); - else - sprintf (keyname, "\\e"); - } - else - { - int c = key, l = 0; - if (CTRL_CHAR (c) || c == RUBOUT) - { - keyname[l++] = '\\'; - keyname[l++] = 'C'; - keyname[l++] = '-'; - c = (c == RUBOUT) ? '?' : _rl_to_lower (UNCTRL (c)); - } - - if (c == '\\' || c == '"') - keyname[l++] = '\\'; - - keyname[l++] = (char) c; - keyname[l++] = '\0'; - } - - strcat (keyname, seqs[i]); - xfree (seqs[i]); + char *x; if (result_index + 2 > result_size) { @@ -2768,10 +2716,16 @@ rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map) result = (char **)xrealloc (result, result_size * sizeof (char *)); } - result[result_index++] = keyname; + x = xmalloc (knlen + RL_STRLEN (seqs[i]) + 1); + strcpy (x, keyname); + strcpy (x + knlen, seqs[i]); + xfree (seqs[i]); + + result[result_index++] = x; result[result_index] = (char *)NULL; } + xfree (keyname); xfree (seqs); } break; @@ -2788,73 +2742,72 @@ rl_invoking_keyseqs (rl_command_func_t *function) return (rl_invoking_keyseqs_in_map (function, _rl_keymap)); } -/* Print all of the functions and their bindings to rl_outstream. If - PRINT_READABLY is non-zero, then print the output in such a way - that it can be read back in. */ void -rl_function_dumper (int print_readably) +rl_print_keybinding (const char *name, Keymap kmap, int print_readably) { - register int i; - const char **names; - const char *name; + rl_command_func_t *function; + char **invokers; - names = rl_funmap_names (); + function = rl_named_function (name); + invokers = rl_invoking_keyseqs_in_map (function, kmap ? kmap : _rl_keymap); - fprintf (rl_outstream, "\n"); - - for (i = 0; name = names[i]; i++) + if (print_readably) { - rl_command_func_t *function; - char **invokers; - - function = rl_named_function (name); - invokers = rl_invoking_keyseqs_in_map (function, _rl_keymap); - - if (print_readably) + if (!invokers) + fprintf (rl_outstream, "# %s (not bound)\n", name); + else { - if (!invokers) - fprintf (rl_outstream, "# %s (not bound)\n", name); - else - { - register int j; + register int j; - for (j = 0; invokers[j]; j++) - { - fprintf (rl_outstream, "\"%s\": %s\n", - invokers[j], name); - xfree (invokers[j]); - } - - xfree (invokers); + for (j = 0; invokers[j]; j++) + { + fprintf (rl_outstream, "\"%s\": %s\n", invokers[j], name); + xfree (invokers[j]); } + + xfree (invokers); } + } + else + { + if (!invokers) + fprintf (rl_outstream, "%s is not bound to any keys\n", name); else { - if (!invokers) - fprintf (rl_outstream, "%s is not bound to any keys\n", - name); - else - { - register int j; + register int j; - fprintf (rl_outstream, "%s can be found on ", name); + fprintf (rl_outstream, "%s can be found on ", name); - for (j = 0; invokers[j] && j < 5; j++) - { - fprintf (rl_outstream, "\"%s\"%s", invokers[j], - invokers[j + 1] ? ", " : ".\n"); - } + for (j = 0; invokers[j] && j < 5; j++) + fprintf (rl_outstream, "\"%s\"%s", invokers[j], invokers[j + 1] ? ", " : ".\n"); - if (j == 5 && invokers[j]) - fprintf (rl_outstream, "...\n"); + if (j == 5 && invokers[j]) + fprintf (rl_outstream, "...\n"); - for (j = 0; invokers[j]; j++) - xfree (invokers[j]); + for (j = 0; invokers[j]; j++) + xfree (invokers[j]); - xfree (invokers); - } + xfree (invokers); } } +} + +/* Print all of the functions and their bindings to rl_outstream. If + PRINT_READABLY is non-zero, then print the output in such a way + that it can be read back in. */ +void +rl_function_dumper (int print_readably) +{ + register int i; + const char **names; + const char *name; + + names = rl_funmap_names (); + + fprintf (rl_outstream, "\n"); + + for (i = 0; name = names[i]; i++) + rl_print_keybinding (name, _rl_keymap, print_readably); xfree (names); } @@ -2875,9 +2828,9 @@ rl_dump_functions (int count, int key) static void _rl_macro_dumper_internal (int print_readably, Keymap map, char *prefix) { - register int key; + int key; char *keyname, *out; - int prefix_len; + size_t prefix_len; for (key = 0; key < KEYMAP_SIZE; key++) { @@ -2887,6 +2840,16 @@ _rl_macro_dumper_internal (int print_readably, Keymap map, char *prefix) keyname = _rl_get_keyname (key); out = _rl_untranslate_macro_value ((char *)map[key].function, 0); + /* If the application wants to print macros, let it. Give it the + ascii-fied value with backslash escapes, so it will have to use + rl_macro_bind (with its call to rl_translate_keyseq) to get the + same value back. */ + if (rl_macro_display_hook) + { + (*rl_macro_display_hook) (keyname, out, print_readably, prefix); + break; + } + if (print_readably) fprintf (rl_outstream, "\"%s%s\": \"%s\"\n", prefix ? prefix : "", keyname, @@ -2950,10 +2913,40 @@ rl_dump_macros (int count, int key) static char * _rl_get_string_variable_value (const char *name) { - static char numbuf[32]; + static char numbuf[64]; /* more than enough for INTMAX_MAX */ char *ret; - if (_rl_stricmp (name, "bell-style") == 0) + if (_rl_stricmp (name, "active-region-start-color") == 0) + { + if (_rl_active_region_start_color == 0) + return 0; + ret = _rl_untranslate_macro_value (_rl_active_region_start_color, 0); + if (ret) + { + strncpy (numbuf, ret, sizeof (numbuf) - 1); + xfree (ret); + numbuf[sizeof(numbuf) - 1] = '\0'; + } + else + numbuf[0] = '\0'; + return numbuf; + } + else if (_rl_stricmp (name, "active-region-end-color") == 0) + { + if (_rl_active_region_end_color == 0) + return 0; + ret = _rl_untranslate_macro_value (_rl_active_region_end_color, 0); + if (ret) + { + strncpy (numbuf, ret, sizeof (numbuf) - 1); + xfree (ret); + numbuf[sizeof(numbuf) - 1] = '\0'; + } + else + numbuf[0] = '\0'; + return numbuf; + } + else if (_rl_stricmp (name, "bell-style") == 0) { switch (_rl_bell_preference) { @@ -2970,24 +2963,40 @@ _rl_get_string_variable_value (const char *name) return (_rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT); else if (_rl_stricmp (name, "completion-display-width") == 0) { +#if defined (HAVE_VSNPRINTF) + snprintf (numbuf, sizeof (numbuf), "%d", _rl_completion_columns); +#else sprintf (numbuf, "%d", _rl_completion_columns); +#endif return (numbuf); } else if (_rl_stricmp (name, "completion-prefix-display-length") == 0) { +#if defined (HAVE_VSNPRINTF) + snprintf (numbuf, sizeof (numbuf), "%d", _rl_completion_prefix_display_length); +#else sprintf (numbuf, "%d", _rl_completion_prefix_display_length); +#endif return (numbuf); } else if (_rl_stricmp (name, "completion-query-items") == 0) { +#if defined (HAVE_VSNPRINTF) + snprintf (numbuf, sizeof (numbuf), "%d", rl_completion_query_items); +#else sprintf (numbuf, "%d", rl_completion_query_items); +#endif return (numbuf); } else if (_rl_stricmp (name, "editing-mode") == 0) return (rl_get_keymap_name_from_edit_mode ()); else if (_rl_stricmp (name, "history-size") == 0) { - sprintf (numbuf, "%d", history_is_stifled() ? history_max_entries : 0); +#if defined (HAVE_VSNPRINTF) + snprintf (numbuf, sizeof (numbuf), "%d", history_is_stifled() ? history_max_entries : -1); +#else + sprintf (numbuf, "%d", history_is_stifled() ? history_max_entries : -1); +#endif return (numbuf); } else if (_rl_stricmp (name, "isearch-terminators") == 0) @@ -3014,7 +3023,11 @@ _rl_get_string_variable_value (const char *name) } else if (_rl_stricmp (name, "keyseq-timeout") == 0) { - sprintf (numbuf, "%d", _rl_keyseq_timeout); +#if defined (HAVE_VSNPRINTF) + snprintf (numbuf, sizeof (numbuf), "%d", _rl_keyseq_timeout); +#else + sprintf (numbuf, "%d", _rl_keyseq_timeout); +#endif return (numbuf); } else if (_rl_stricmp (name, "emacs-mode-string") == 0) diff --git a/lib/readline/callback.c b/lib/readline/callback.c index 69df77df7..180b683f9 100644 --- a/lib/readline/callback.c +++ b/lib/readline/callback.c @@ -1,6 +1,6 @@ /* callback.c -- functions to use readline as an X `callback' mechanism. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -115,7 +115,10 @@ rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *linefunc) #define CALLBACK_READ_RETURN() \ do { \ if (rl_persistent_signal_handlers == 0) \ - rl_clear_signals (); \ + { \ + rl_clear_signals (); \ + if (_rl_caught_signal) _rl_signal_handler (_rl_caught_signal); \ + } \ return; \ } while (0) #else @@ -320,6 +323,15 @@ rl_callback_handler_remove (void) rl_linefunc = NULL; RL_UNSETSTATE (RL_STATE_CALLBACK); RL_CHECK_SIGNALS (); + + /* Do what we need to do to manage the undo list if we haven't already done + it in rl_callback_read_char(). If there's no undo list, we don't need to + do anything. It doesn't matter if we try to revert all previous lines a + second time; none of the history entries will have an undo list. */ + if (rl_undo_list) + readline_common_teardown (); + /* At this point, rl_undo_list == NULL. */ + if (in_handler) { in_handler = 0; @@ -360,7 +372,7 @@ rl_callback_sigcleanup (void) if (RL_ISSTATE (RL_STATE_ISEARCH)) _rl_isearch_cleanup (_rl_iscxt, 0); else if (RL_ISSTATE (RL_STATE_NSEARCH)) - _rl_nsearch_cleanup (_rl_nscxt, 0); + _rl_nsearch_sigcleanup (_rl_nscxt, 0); else if (RL_ISSTATE (RL_STATE_VIMOTION)) RL_UNSETSTATE (RL_STATE_VIMOTION); else if (RL_ISSTATE (RL_STATE_NUMERICARG)) @@ -370,6 +382,9 @@ rl_callback_sigcleanup (void) } else if (RL_ISSTATE (RL_STATE_MULTIKEY)) RL_UNSETSTATE (RL_STATE_MULTIKEY); + else if (RL_ISSTATE (RL_STATE_READSTR)) + _rl_readstr_sigcleanup (_rl_rscxt, 0); + if (RL_ISSTATE (RL_STATE_CHARSEARCH)) RL_UNSETSTATE (RL_STATE_CHARSEARCH); diff --git a/lib/readline/chardefs.h b/lib/readline/chardefs.h index 24a25f1f1..02f7e17e2 100644 --- a/lib/readline/chardefs.h +++ b/lib/readline/chardefs.h @@ -55,7 +55,7 @@ #define largest_char 255 /* Largest character value. */ #define CTRL_CHAR(c) ((c) < control_character_threshold && (((c) & 0x80) == 0)) -#define META_CHAR(c) ((c) > meta_character_threshold && (c) <= largest_char) +#define META_CHAR(c) ((unsigned char)(c) > meta_character_threshold && (unsigned char)(c) <= largest_char) #define CTRL(c) ((c) & control_character_mask) #define META(c) ((c) | meta_character_bit) diff --git a/lib/readline/colors.c b/lib/readline/colors.c index 4212c64c3..28ed7bcde 100644 --- a/lib/readline/colors.c +++ b/lib/readline/colors.c @@ -2,7 +2,7 @@ Modified by Chet Ramey for Readline. - Copyright (C) 1985, 1988, 1990-1991, 1995-2021 + Copyright (C) 1985, 1988, 1990-1991, 1995-2021, 2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify diff --git a/lib/readline/complete.c b/lib/readline/complete.c index e5d224ed0..f564a47f5 100644 --- a/lib/readline/complete.c +++ b/lib/readline/complete.c @@ -1,6 +1,6 @@ /* complete.c -- filename completion for readline. */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -77,11 +77,7 @@ extern int errno; # include "colors.h" #endif -#ifdef __STDC__ typedef int QSFUNC (const void *, const void *); -#else -typedef int QSFUNC (); -#endif #ifdef HAVE_LSTAT # define LSTAT lstat @@ -250,11 +246,24 @@ rl_icppfunc_t *rl_filename_stat_hook = (rl_icppfunc_t *)NULL; either return its first argument (if no conversion takes place) or newly-allocated memory. This can, for instance, convert filenames between character sets for comparison against what's typed at the - keyboard. The returned value is what is added to the list of - matches. The second argument is the length of the filename to be - converted. */ + keyboard (after its potential modification by rl_completion_rewrite_hook). + The returned value is what is added to the list of matches. + The second argument is the length of the filename to be converted. */ rl_dequote_func_t *rl_filename_rewrite_hook = (rl_dequote_func_t *)NULL; +/* If non-zero, this is the address of a function to call before + comparing the filename portion of a word to be completed with directory + entries from the filesystem. This takes the address of the partial word + to be completed, after any rl_filename_dequoting_function has been applied. + The function should either return its first argument (if no conversion + takes place) or newly-allocated memory. This can, for instance, convert + the filename portion of the completion word to a character set suitable + for comparison against directory entries read from the filesystem (after + their potential modification by rl_filename_rewrite_hook). + The returned value is what is added to the list of matches. + The second argument is the length of the filename to be converted. */ +rl_dequote_func_t *rl_completion_rewrite_hook = (rl_dequote_func_t *)NULL; + /* Non-zero means readline completion functions perform tilde expansion. */ int rl_complete_with_tilde_expansion = 0; @@ -340,6 +349,15 @@ int rl_filename_completion_desired = 0; entry finder function. */ int rl_filename_quoting_desired = 1; +/* Non-zero means we should apply filename-type quoting to all completions + even if we are not otherwise treating the matches as filenames. This is + ALWAYS zero on entry, and can only be changed within a completion entry + finder function. */ +int rl_full_quoting_desired = 0; + +#define QUOTING_DESIRED() \ + (rl_full_quoting_desired || (rl_filename_completion_desired && rl_filename_quoting_desired)) + /* This function, if defined, is called by the completer when real filename completion is done, after all the matching names have been generated. It is passed a (char**) known as matches in the code below. @@ -455,6 +473,7 @@ rl_complete (int ignore, int invoking_key) int rl_possible_completions (int ignore, int invoking_key) { + last_completion_failed = 0; rl_completion_invoking_key = invoking_key; return (rl_complete_internal ('?')); } @@ -484,6 +503,32 @@ rl_completion_mode (rl_command_func_t *cfunc) return TAB; } +/********************************************/ +/* */ +/* Completion signal handling and cleanup */ +/* */ +/********************************************/ + +/* State to clean up and free if completion is interrupted by a signal. */ +typedef struct { + char **matches; + char *saved_line; +} complete_sigcleanarg_t; + +static void +_rl_complete_sigcleanup (int sig, void *ptr) +{ + complete_sigcleanarg_t *arg; + + if (sig == SIGINT) /* XXX - for now */ + { + arg = ptr; + _rl_free_match_list (arg->matches); + FREE (arg->saved_line); + _rl_complete_display_matches_interrupt = 1; + } +} + /************************************/ /* */ /* Completion utility functions */ @@ -498,16 +543,6 @@ _rl_reset_completion_state (void) rl_completion_quote_character = 0; } -static void -_rl_complete_sigcleanup (int sig, void *ptr) -{ - if (sig == SIGINT) /* XXX - for now */ - { - _rl_free_match_list ((char **)ptr); - _rl_complete_display_matches_interrupt = 1; - } -} - /* Set default values for readline word completion. These are the variables that application completion functions can change or inspect. */ static void @@ -516,6 +551,7 @@ set_completion_defaults (int what_to_do) /* Only the completion entry function can change these. */ rl_filename_completion_desired = 0; rl_filename_quoting_desired = 1; + rl_full_quoting_desired = 0; rl_completion_type = what_to_do; rl_completion_suppress_append = rl_completion_suppress_quote = 0; rl_completion_append_character = ' '; @@ -1319,6 +1355,7 @@ compute_lcd_of_matches (char **match_list, int matches, const char *text) int low; /* Count of max-matched characters. */ int lx; char *dtext; /* dequoted TEXT, if needed */ + size_t len1, len2; #if defined (HANDLE_MULTIBYTE) int v; size_t v1, v2; @@ -1345,6 +1382,9 @@ compute_lcd_of_matches (char **match_list, int matches, const char *text) memset (&ps2, 0, sizeof (mbstate_t)); } #endif + len1 = strlen (match_list[i]); + len2 = strlen (match_list[i + 1]); + for (si = 0; (c1 = match_list[i][si]) && (c2 = match_list[i + 1][si]); si++) { if (_rl_completion_case_fold) @@ -1355,8 +1395,8 @@ compute_lcd_of_matches (char **match_list, int matches, const char *text) #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { - v1 = MBRTOWC (&wc1, match_list[i]+si, strlen (match_list[i]+si), &ps1); - v2 = MBRTOWC (&wc2, match_list[i+1]+si, strlen (match_list[i+1]+si), &ps2); + v1 = MBRTOWC (&wc1, match_list[i]+si, len1 - si, &ps1); + v2 = MBRTOWC (&wc2, match_list[i+1]+si, len2 - si, &ps2); if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2)) { if (c1 != c2) /* do byte comparison */ @@ -1412,10 +1452,8 @@ compute_lcd_of_matches (char **match_list, int matches, const char *text) check against the list of matches FI */ dtext = (char *)NULL; - if (rl_filename_completion_desired && - rl_filename_dequoting_function && - rl_completion_found_quote && - rl_filename_quoting_desired) + if (QUOTING_DESIRED() && rl_completion_found_quote && + rl_filename_dequoting_function) { dtext = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); text = dtext; @@ -1630,7 +1668,7 @@ rl_display_match_list (char **matches, int len, int max) if (_rl_page_completions && lines >= (_rl_screenheight - 1) && i < count) { lines = _rl_internal_pager (lines); - if (lines < 0) + if (lines < 0 || _rl_complete_display_matches_interrupt) return; } } @@ -1658,7 +1696,7 @@ rl_display_match_list (char **matches, int len, int max) if (_rl_page_completions && lines >= _rl_screenheight - 1) { lines = _rl_internal_pager (lines); - if (lines < 0) + if (lines < 0 || _rl_complete_display_matches_interrupt) return; } } @@ -1745,7 +1783,9 @@ display_matches (char **matches) } } - rl_display_match_list (matches, len, max); + /* We rely on the caller to set MATCHES to 0 when this returns. */ + if (_rl_complete_display_matches_interrupt == 0) + rl_display_match_list (matches, len, max); rl_forced_update_display (); rl_display_fixed = 1; @@ -1768,9 +1808,7 @@ make_quoted_replacement (char *match, int mtype, char *qc) matches don't require a quoted substring. */ replacement = match; - should_quote = match && rl_completer_quote_characters && - rl_filename_completion_desired && - rl_filename_quoting_desired; + should_quote = match && rl_completer_quote_characters && QUOTING_DESIRED(); if (should_quote) should_quote = should_quote && (!qc || !*qc || @@ -1784,6 +1822,11 @@ make_quoted_replacement (char *match, int mtype, char *qc) should_quote = rl_filename_quote_characters ? (_rl_strpbrk (match, rl_filename_quote_characters) != 0) : 0; + /* If we saw a quote in the original word, but readline thinks the + match doesn't need to be quoted, and the application has a filename + quoting function, give the application a chance to quote it if + needed so we don't second-guess the user. */ + should_quote |= *qc == 0 && rl_completion_found_quote && mtype != NO_MATCH && rl_filename_quoting_function; do_replace = should_quote ? mtype : NO_MATCH; /* Quote the replacement, since we found an embedded @@ -1791,6 +1834,7 @@ make_quoted_replacement (char *match, int mtype, char *qc) if (do_replace != NO_MATCH && rl_filename_quoting_function) replacement = (*rl_filename_quoting_function) (match, do_replace, qc); } + return (replacement); } @@ -1976,8 +2020,7 @@ compare_match (char *text, const char *match) char *temp; int r; - if (rl_filename_completion_desired && rl_filename_quoting_desired && - rl_completion_found_quote && rl_filename_dequoting_function) + if (QUOTING_DESIRED() && rl_completion_found_quote && rl_filename_dequoting_function) { temp = (*rl_filename_dequoting_function) (text, rl_completion_quote_character); r = strcmp (temp, match); @@ -2001,10 +2044,11 @@ rl_complete_internal (int what_to_do) { char **matches; rl_compentry_func_t *our_func; - int start, end, delimiter, found_quote, i, nontrivial_lcd; + int start, end, delimiter, found_quote, i, nontrivial_lcd, do_display; char *text, *saved_line_buffer; char quote_char; int tlen, mlen, saved_last_completion_failed; + complete_sigcleanarg_t cleanarg; /* state to clean up on signal */ RL_SETSTATE(RL_STATE_COMPLETING); @@ -2031,9 +2075,24 @@ rl_complete_internal (int what_to_do) text = rl_copy_text (start, end); matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char); + /* If TEXT contains quote characters, it will be dequoted as part of + generating the matches, and the matches will not contain any quote + characters. We need to dequote TEXT before performing the comparison. + Since compare_match performs the dequoting, and we only want to do it + once, we don't call compare_matches after dequoting TEXT; we call + strcmp directly. */ /* nontrivial_lcd is set if the common prefix adds something to the word being completed. */ - nontrivial_lcd = matches && compare_match (text, matches[0]) != 0; + if (QUOTING_DESIRED() && rl_completion_found_quote && rl_filename_dequoting_function) + { + char *t; + t = (*rl_filename_dequoting_function) (text, rl_completion_quote_character); + xfree (text); + text = t; + nontrivial_lcd = matches && strcmp (text, matches[0]) != 0; + } + else + nontrivial_lcd = matches && strcmp (text, matches[0]) != 0; if (what_to_do == '!' || what_to_do == '@') tlen = strlen (text); xfree (text); @@ -2068,6 +2127,8 @@ rl_complete_internal (int what_to_do) if (matches && matches[0] && *matches[0]) last_completion_failed = 0; + do_display = 0; + switch (what_to_do) { case TAB: @@ -2101,13 +2162,13 @@ rl_complete_internal (int what_to_do) { if (what_to_do == '!') { - display_matches (matches); + do_display = 1; break; } else if (what_to_do == '@') { if (nontrivial_lcd == 0) - display_matches (matches); + do_display = 1; break; } else if (rl_editing_mode != vi_mode) @@ -2131,23 +2192,11 @@ rl_complete_internal (int what_to_do) append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd); break; } - - if (rl_completion_display_matches_hook == 0) - { - _rl_sigcleanup = _rl_complete_sigcleanup; - _rl_sigcleanarg = matches; - _rl_complete_display_matches_interrupt = 0; - } - display_matches (matches); - if (_rl_complete_display_matches_interrupt) - { - matches = 0; /* already freed by rl_complete_sigcleanup */ - _rl_complete_display_matches_interrupt = 0; - if (rl_signal_event_hook) - (*rl_signal_event_hook) (); /* XXX */ - } - _rl_sigcleanup = 0; - _rl_sigcleanarg = 0; + /*FALLTHROUGH*/ + + case '%': /* used by menu_complete */ + case '|': /* add this for unconditional display */ + do_display = 1; break; default: @@ -2160,6 +2209,34 @@ rl_complete_internal (int what_to_do) return 1; } + /* If we need to display the match list, set up to clean it up on receipt of + a signal and do it here. If the application has registered a function to + display the matches, let it do the work. */ + if (do_display) + { + if (rl_completion_display_matches_hook == 0) + { + _rl_sigcleanup = _rl_complete_sigcleanup; + cleanarg.matches = matches; + cleanarg.saved_line = saved_line_buffer; + _rl_sigcleanarg = &cleanarg; + _rl_complete_display_matches_interrupt = 0; + } + + display_matches (matches); + + if (_rl_complete_display_matches_interrupt) + { + matches = 0; /* Both already freed by _rl_complete_sigcleanup */ + saved_line_buffer = 0; + _rl_complete_display_matches_interrupt = 0; + if (rl_signal_event_hook) + (*rl_signal_event_hook) (); + } + _rl_sigcleanup = 0; + _rl_sigcleanarg = 0; + } + _rl_free_match_list (matches); /* Check to see if the line has changed through all of this manipulation. */ @@ -2200,7 +2277,7 @@ rl_completion_matches (const char *text, rl_compentry_func_t *entry_function) register int i; /* Number of slots in match_list. */ - int match_list_size; + size_t match_list_size; /* The list of matches. */ char **match_list; @@ -2265,9 +2342,9 @@ rl_completion_matches (const char *text, rl_compentry_func_t *entry_function) char * rl_username_completion_function (const char *text, int state) { -#if defined (__WIN32__) || defined (__OPENNT) +#if defined (_WIN32) || defined (__OPENNT) || !defined (HAVE_GETPWENT) return (char *)NULL; -#else /* !__WIN32__ && !__OPENNT) */ +#else /* !_WIN32 && !__OPENNT) && HAVE_GETPWENT */ static char *username = (char *)NULL; static struct passwd *entry; static int namelen, first_char, first_char_loc; @@ -2282,25 +2359,19 @@ rl_username_completion_function (const char *text, int state) username = savestring (&text[first_char_loc]); namelen = strlen (username); -#if defined (HAVE_GETPWENT) setpwent (); -#endif } -#if defined (HAVE_GETPWENT) while (entry = getpwent ()) { /* Null usernames should result in all users as possible completions. */ if (namelen == 0 || (STREQN (username, entry->pw_name, namelen))) break; } -#endif if (entry == 0) { -#if defined (HAVE_GETPWENT) endpwent (); -#endif return ((char *)NULL); } else @@ -2316,7 +2387,7 @@ rl_username_completion_function (const char *text, int state) return (value); } -#endif /* !__WIN32__ && !__OPENNT */ +#endif /* !_WIN32 && !__OPENNT && HAVE_GETPWENT */ } /* Return non-zero if CONVFN matches FILENAME up to the length of FILENAME @@ -2327,18 +2398,7 @@ rl_username_completion_function (const char *text, int state) static int complete_fncmp (const char *convfn, int convlen, const char *filename, int filename_len) { - register char *s1, *s2; - int d, len; -#if defined (HANDLE_MULTIBYTE) - size_t v1, v2; - mbstate_t ps1, ps2; - WCHAR_T wc1, wc2; -#endif - -#if defined (HANDLE_MULTIBYTE) - memset (&ps1, 0, sizeof (mbstate_t)); - memset (&ps2, 0, sizeof (mbstate_t)); -#endif + size_t len; if (filename_len == 0) return 1; @@ -2346,100 +2406,26 @@ complete_fncmp (const char *convfn, int convlen, const char *filename, int filen return 0; len = filename_len; - s1 = (char *)convfn; - s2 = (char *)filename; /* Otherwise, if these match up to the length of filename, then it is a match. */ - if (_rl_completion_case_fold && _rl_completion_case_map) - { - /* Case-insensitive comparison treating _ and - as equivalent */ -#if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - { - do - { - v1 = MBRTOWC (&wc1, s1, convlen, &ps1); - v2 = MBRTOWC (&wc2, s2, filename_len, &ps2); - if (v1 == 0 && v2 == 0) - return 1; - else if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2)) - { - if (*s1 != *s2) /* do byte comparison */ - return 0; - else if ((*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) - return 0; - s1++; s2++; len--; - continue; - } - wc1 = towlower (wc1); - wc2 = towlower (wc2); - s1 += v1; - s2 += v1; - len -= v1; - if ((wc1 == L'-' || wc1 == L'_') && (wc2 == L'-' || wc2 == L'_')) - continue; - if (wc1 != wc2) - return 0; - } - while (len != 0); - } - else -#endif - { - do - { - d = _rl_to_lower (*s1) - _rl_to_lower (*s2); - /* *s1 == [-_] && *s2 == [-_] */ - if ((*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) - d = 0; - if (d != 0) - return 0; - s1++; s2++; /* already checked convlen >= filename_len */ - } - while (--len != 0); - } - - return 1; - } - else if (_rl_completion_case_fold) + if (_rl_completion_case_fold) { + /* Case-insensitive comparison treating _ and - as equivalent if + _rl_completion_case_map is non-zero */ #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - { - do - { - v1 = MBRTOWC (&wc1, s1, convlen, &ps1); - v2 = MBRTOWC (&wc2, s2, filename_len, &ps2); - if (v1 == 0 && v2 == 0) - return 1; - else if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2)) - { - if (*s1 != *s2) /* do byte comparison */ - return 0; - s1++; s2++; len--; - continue; - } - wc1 = towlower (wc1); - wc2 = towlower (wc2); - if (wc1 != wc2) - return 0; - s1 += v1; - s2 += v1; - len -= v1; - } - while (len != 0); - return 1; - } + return (_rl_mb_strcaseeqn (convfn, convlen, filename, filename_len, len, _rl_completion_case_map)); else #endif if ((_rl_to_lower (convfn[0]) == _rl_to_lower (filename[0])) && - (convlen >= filename_len) && - (_rl_strnicmp (filename, convfn, filename_len) == 0)) - return 1; + (convlen >= filename_len)) + return (_rl_strcaseeqn (convfn, filename, len, _rl_completion_case_map)); } else { + /* XXX - add new _rl_mb_streqn function (like mbsncmp) instead of + relying on byte equivalence? */ if ((convfn[0] == filename[0]) && (convlen >= filename_len) && (strncmp (filename, convfn, filename_len) == 0)) @@ -2461,7 +2447,8 @@ rl_filename_completion_function (const char *text, int state) static char *users_dirname = (char *)NULL; static int filename_len; char *temp, *dentry, *convfn; - int dirlen, dentlen, convlen; + size_t dirlen; + int dentlen, convlen; int tilde_dirname; struct dirent *entry; @@ -2526,7 +2513,8 @@ rl_filename_completion_function (const char *text, int state) temp = tilde_expand (dirname); xfree (dirname); dirname = temp; - tilde_dirname = 1; + if (*dirname != '~') + tilde_dirname = 1; /* indicate successful tilde expansion */ } /* We have saved the possibly-dequoted version of the directory name @@ -2545,11 +2533,16 @@ rl_filename_completion_function (const char *text, int state) xfree (users_dirname); users_dirname = savestring (dirname); } - else if (tilde_dirname == 0 && rl_completion_found_quote && rl_filename_dequoting_function) + else if (rl_completion_found_quote && rl_filename_dequoting_function) { - /* delete single and double quotes */ + /* We already ran users_dirname through the dequoting function. + If tilde_dirname == 1, we successfully performed tilde expansion + on dirname. Now we need to reconcile those results. We either + just copy the already-dequoted users_dirname or tilde expand it + if we tilde-expanded dirname. */ + temp = tilde_dirname ? tilde_expand (users_dirname) : savestring (users_dirname); xfree (dirname); - dirname = savestring (users_dirname); + dirname = temp; } directory = opendir (dirname); @@ -2564,6 +2557,18 @@ rl_filename_completion_function (const char *text, int state) } filename_len = strlen (filename); + /* Normalize the filename if the application has set a rewrite hook. */ + if (*filename && rl_completion_rewrite_hook) + { + temp = (*rl_completion_rewrite_hook) (filename, filename_len); + if (temp != filename) + { + xfree (filename); + filename = temp; + filename_len = strlen (filename); + } + } + rl_filename_completion_desired = 1; } @@ -2576,6 +2581,7 @@ rl_filename_completion_function (const char *text, int state) /* Now that we have some state, we can read the directory. */ entry = (struct dirent *)NULL; + convfn = dentry = 0; while (directory && (entry = readdir (directory))) { convfn = dentry = entry->d_name; @@ -2593,17 +2599,20 @@ rl_filename_completion_function (const char *text, int state) if (filename_len == 0) { if (_rl_match_hidden_files == 0 && HIDDEN_FILE (convfn)) - continue; + { + if (convfn != dentry) + xfree (convfn); + continue; + } if (convfn[0] != '.' || (convfn[1] && (convfn[1] != '.' || convfn[2]))) break; } - else - { - if (complete_fncmp (convfn, convlen, filename, filename_len)) - break; - } + else if (complete_fncmp (convfn, convlen, filename, filename_len)) + break; + else if (convfn != dentry) + xfree (convfn); } if (entry == 0) @@ -2825,7 +2834,7 @@ rl_menu_complete (int count, int ignore) static int full_completion = 0; /* set to 1 if menu completion should reinitialize on next call */ static int orig_start, orig_end; static char quote_char; - static int delimiter, cstate; + static int delimiter; /* The first time through, we generate the list of matches and set things up to insert them. */ @@ -2921,7 +2930,7 @@ rl_menu_complete (int count, int ignore) if (rl_completion_query_items > 0 && match_list_size >= rl_completion_query_items) { rl_ding (); - FREE (matches); + _rl_free_match_list (matches); matches = (char **)0; full_completion = 1; return (0); diff --git a/lib/readline/display.c b/lib/readline/display.c index ad573f9a4..1c486f16a 100644 --- a/lib/readline/display.c +++ b/lib/readline/display.c @@ -1,6 +1,6 @@ /* display.c -- readline redisplay facility. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -59,10 +59,6 @@ #include "rlprivate.h" #include "xmalloc.h" -#if !defined (strchr) && !defined (__STDC__) -extern char *strchr (), *strrchr (); -#endif /* !strchr && !__STDC__ */ - static void putc_face (int, int, char *); static void puts_face (const char *, const char *, int); static void norm_face (char *, int); @@ -282,6 +278,10 @@ static int prompt_physical_chars; characters in the prompt or use heuristics about where they are. */ static int *local_prompt_newlines; +/* An array saying how many invisible characters are in each line of the + prompt. */ +static int *local_prompt_invis_chars; + /* set to a non-zero value by rl_redisplay if we are marking modified history lines and the current line is so marked. */ static int modmark; @@ -295,6 +295,7 @@ static int line_totbytes; static char *saved_local_prompt; static char *saved_local_prefix; static int *saved_local_prompt_newlines; +static int *saved_local_prompt_invis_chars; static int saved_last_invisible; static int saved_visible_length; @@ -356,7 +357,7 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp) { char *r, *ret, *p, *igstart, *nprompt, *ms; int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars; - int mlen, newlines, newlines_guess, bound, can_add_invis; + int mlen, newlines, newlines_guess, bound, can_add_invis, lastinvis; int mb_cur_max; /* We only expand the mode string for the last line of a multiline prompt @@ -399,7 +400,8 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp) *vlp = l; local_prompt_newlines = (int *) xrealloc (local_prompt_newlines, sizeof (int) * 2); - local_prompt_newlines[0] = 0; + local_prompt_invis_chars = (int *) xrealloc (local_prompt_invis_chars, sizeof (int) * 2); + local_prompt_newlines[0] = local_prompt_invis_chars[0] = 0; local_prompt_newlines[1] = -1; return r; @@ -414,15 +416,20 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp) newlines_guess = (_rl_screenwidth > 0) ? APPROX_DIV(l, _rl_screenwidth) : APPROX_DIV(l, 80); local_prompt_newlines = (int *) xrealloc (local_prompt_newlines, sizeof (int) * (newlines_guess + 1)); local_prompt_newlines[newlines = 0] = 0; + local_prompt_invis_chars = (int *) xrealloc (local_prompt_invis_chars, sizeof (int) * (newlines_guess + 1)); + local_prompt_invis_chars[0] = 0; for (rl = 1; rl <= newlines_guess; rl++) - local_prompt_newlines[rl] = -1; + { + local_prompt_newlines[rl] = -1; + local_prompt_invis_chars[rl] = 0; + } rl = physchars = 0; /* mode string now part of nprompt */ invfl = 0; /* invisible chars in first line of prompt */ invflset = 0; /* we only want to set invfl once */ igstart = 0; /* we're not ignoring any characters yet */ - for (ignoring = last = ninvis = 0, p = nprompt; p && *p; p++) + for (ignoring = last = ninvis = lastinvis = 0, p = nprompt; p && *p; p++) { /* This code strips the invisible character string markers RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */ @@ -447,6 +454,8 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp) counter. */ if (invflset && newlines == 1) invfl = ninvis; + local_prompt_invis_chars[newlines - 1] = ninvis - lastinvis; + lastinvis = ninvis; } if (p != (igstart + 1)) last = r - ret - 1; @@ -511,6 +520,8 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp) else new = r - ret; local_prompt_newlines[++newlines] = new; + local_prompt_invis_chars[newlines - 1] = ninvis - lastinvis; + lastinvis = ninvis; } /* What if a physical character of width >= 2 is split? There is @@ -525,6 +536,9 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp) if (rl <= _rl_screenwidth) invfl = ninvis; + /* Make sure we account for invisible characters on the last line. */ + local_prompt_invis_chars[newlines] = ninvis - lastinvis; + *r = '\0'; if (lp) *lp = rl; @@ -591,13 +605,22 @@ rl_expand_prompt (char *prompt) FREE (local_prompt); FREE (local_prompt_prefix); + /* Set default values for variables expand_prompt sets */ local_prompt = local_prompt_prefix = (char *)0; local_prompt_len = 0; prompt_last_invisible = prompt_invis_chars_first_line = 0; prompt_visible_length = prompt_physical_chars = 0; + if (local_prompt_invis_chars == 0) + local_prompt_invis_chars = (int *)xmalloc (sizeof (int)); + local_prompt_invis_chars[0] = 0; + if (prompt == 0 || *prompt == 0) - return (0); + { + local_prompt = xmalloc (sizeof (char)); + local_prompt[0] = '\0'; + return (0); + } p = strrchr (prompt, '\n'); if (p == 0) @@ -641,8 +664,8 @@ rl_expand_prompt (char *prompt) static void realloc_line (int minsize) { - int minimum_size; - int newsize, delta; + size_t minimum_size; + size_t newsize, delta; minimum_size = DEFAULT_LINE_BUFFER_SIZE; if (minsize < minimum_size) @@ -684,7 +707,7 @@ init_line_structures (int minsize) if (line_size > minsize) minsize = line_size; } - realloc_line (minsize); + realloc_line (minsize); if (vis_lbreaks == 0) { @@ -758,16 +781,39 @@ _rl_optimize_redisplay (void) _rl_quick_redisplay = 1; } +/* Useful shorthand used by rl_redisplay, update_line, rl_move_cursor_relative */ +#define INVIS_FIRST() (local_prompt_invis_chars[0]) +#define WRAP_OFFSET(line, offset) ((line <= prompt_last_screen_line) ? local_prompt_invis_chars[line] : 0) + +#define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) +#define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) +#define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l]) +#define VIS_CHARS(line) (visible_line + vis_lbreaks[line]) +#define VIS_FACE(line) (vis_face + vis_lbreaks[line]) +#define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line) +#define VIS_LINE_FACE(line) ((line) > _rl_vis_botlin) ? "" : VIS_FACE(line) +#define INV_LINE(line) (invisible_line + inv_lbreaks[line]) +#define INV_LINE_FACE(line) (inv_face + inv_lbreaks[line]) + +#define INV_CHARS_CURRENT_PROMPT_LINE(line) \ + (local_prompt_invis_chars[line] > 0) + +#define OLD_CPOS_IN_PROMPT() (cpos_adjusted == 0 && \ + _rl_last_c_pos != o_cpos && \ + _rl_last_c_pos > wrap_offset && \ + o_cpos < prompt_last_invisible) + /* Basic redisplay algorithm. See comments inline. */ void rl_redisplay (void) { int in, out, c, linenum, cursor_linenum; int inv_botlin, lb_botlin, lb_linenum, o_cpos; - int newlines, lpos, temp, n0, num, prompt_lines_estimate; + int newlines, lpos, temp, num, prompt_lines_estimate; char *prompt_this_line; char cur_face; int hl_begin, hl_end; + int short_circuit; int mb_cur_max = MB_CUR_MAX; #if defined (HANDLE_MULTIBYTE) WCHAR_T wc; @@ -953,7 +999,7 @@ rl_redisplay (void) the line breaks in the prompt string in expand_prompt, taking invisible characters into account, and if lpos exceeds the screen width, we copy the data in the loop below. */ - lpos = prompt_physical_chars + modmark; + lpos = local_prompt ? prompt_physical_chars + modmark : 0; #if defined (HANDLE_MULTIBYTE) memset (line_state_invisible->wrapped_line, 0, line_state_invisible->wbsize * sizeof (int)); @@ -964,6 +1010,9 @@ rl_redisplay (void) in the first physical line of the prompt. wrap_offset - prompt_invis_chars_first_line is usually the number of invis chars on the second (or, more generally, last) line. */ + /* XXX - There is code that assumes that all the invisible characters occur + on the first and last prompt lines; change that to use + local_prompt_invis_chars */ /* This is zero-based, used to set the newlines */ prompt_lines_estimate = lpos / _rl_screenwidth; @@ -982,6 +1031,7 @@ rl_redisplay (void) } /* Now set lpos from the last newline */ + /* XXX - change to use local_prompt_invis_chars[] */ if (mb_cur_max > 1 && rl_byte_oriented == 0 && prompt_multibyte_chars > 0) lpos = _rl_col_width (local_prompt, temp, local_prompt_len, 1) - (wrap_offset - prompt_invis_chars_first_line); else @@ -1044,6 +1094,8 @@ rl_redisplay (void) wc_width = (temp >= 0) ? temp : 1; } } + else + wc_width = 1; /* make sure it's set for the META_CHAR check */ #endif if (in == rl_point) @@ -1053,31 +1105,32 @@ rl_redisplay (void) } #if defined (HANDLE_MULTIBYTE) - if (META_CHAR (c) && _rl_output_meta_chars == 0) /* XXX - clean up */ + if (META_CHAR (c) && wc_bytes == 1 && wc_width == 1) #else if (META_CHAR (c)) #endif { +#if 0 + /* TAG: readline-8.3 20230227 */ + /* https://savannah.gnu.org/support/index.php?110830 + asking for non-printing meta characters to be printed using an + escape sequence. */ + + /* isprint(c) handles bytes up to UCHAR_MAX */ + if (_rl_output_meta_chars == 0 || isprint (c) == 0) +#else if (_rl_output_meta_chars == 0) +#endif { char obuf[5]; int olen; +#if defined (HAVE_VSNPRINTF) + olen = snprintf (obuf, sizeof (obuf), "\\%o", c); +#else olen = sprintf (obuf, "\\%o", c); - - if (lpos + olen >= _rl_screenwidth) - { - temp = _rl_screenwidth - lpos; - CHECK_INV_LBREAKS (); - inv_lbreaks[++newlines] = out + temp; -#if defined (HANDLE_MULTIBYTE) - line_state_invisible->wrapped_line[newlines] = _rl_wrapped_multicolumn; #endif - lpos = olen - temp; - } - else - lpos += olen; - + for (temp = 0; temp < olen; temp++) { invis_addc (&out, obuf[temp], cur_face); @@ -1249,26 +1302,6 @@ rl_redisplay (void) second and subsequent lines start at inv_lbreaks[N], offset by OFFSET (which has already been calculated above). */ -#define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) -#define WRAP_OFFSET(line, offset) ((line == 0) \ - ? (offset ? INVIS_FIRST() : 0) \ - : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) -#define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) -#define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) -#define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l]) -#define VIS_CHARS(line) (visible_line + vis_lbreaks[line]) -#define VIS_FACE(line) (vis_face + vis_lbreaks[line]) -#define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line) -#define VIS_LINE_FACE(line) ((line) > _rl_vis_botlin) ? "" : VIS_FACE(line) -#define INV_LINE(line) (invisible_line + inv_lbreaks[line]) -#define INV_LINE_FACE(line) (inv_face + inv_lbreaks[line]) - -#define OLD_CPOS_IN_PROMPT() (cpos_adjusted == 0 && \ - _rl_last_c_pos != o_cpos && \ - _rl_last_c_pos > wrap_offset && \ - o_cpos < prompt_last_invisible) - - /* We don't want to highlight anything that's going to be off the top of the display; if the current line takes up more than an entire screen, just mark the lines that won't be displayed as having a @@ -1283,9 +1316,54 @@ rl_redisplay (void) norm_face (INV_LINE_FACE(linenum), INV_LLEN (linenum)); } + /* XXX - experimental new code */ + /* Now that _rl_last_v_pos is a logical count, not bounded by the + number of physical screen lines, this is a start at being able + to redisplay lines that consume more than the number of physical + screen lines in more than a simple `move-to-the-next-line' way. + + If the new line has more lines than there are physical screen + lines, and the cursor would be off the top of the screen if we + displayed all the new lines, clear the screen without killing + the scrollback buffer, clear out the visible line so we do a + complete redraw, and make the loop break when we have displayed + a physical screen full of lines. Do the same if we are going to + move the cursor to a line that's greater than the number of + physical screen lines when we weren't before. + + SHORT_CIRCUIT says where to break the loop. Pretty simple right now. */ + short_circuit = -1; + if (inv_botlin >= _rl_screenheight) + { + int extra; + + extra = inv_botlin - _rl_screenheight; /* lines off the top */ + /* cursor in portion of line that would be off screen or in + the lines that exceed the number of physical screen lines. */ + if (cursor_linenum <= extra || + (cursor_linenum >= _rl_screenheight && _rl_vis_botlin <= _rl_screenheight)) + { + if (cursor_linenum <= extra) + short_circuit = _rl_screenheight; + _rl_clear_screen (0); + if (visible_line) + memset (visible_line, 0, line_size); + rl_on_new_line (); + } + /* The cursor is beyond the number of lines that would be off + the top, but we still want to display only the first + _RL_SCREENHEIGHT lines starting at the beginning of the line. */ + else if (cursor_linenum > extra && cursor_linenum <= _rl_screenheight && + _rl_vis_botlin <= _rl_screenheight) + short_circuit = _rl_screenheight; + } + /* For each line in the buffer, do the updating display. */ for (linenum = 0; linenum <= inv_botlin; linenum++) { + if (short_circuit >= 0 && linenum == short_circuit) + break; + /* This can lead us astray if we execute a program that changes the locale from a non-multibyte to a multibyte one. */ o_cpos = _rl_last_c_pos; @@ -1319,6 +1397,7 @@ rl_redisplay (void) between the first and last lines of the prompt, if the prompt consumes more than two lines. It's usually right */ /* XXX - not sure this is ever executed */ + /* XXX - use local_prompt_invis_chars[linenum] */ _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); /* If this is the line with the prompt, we might need to @@ -1388,7 +1467,7 @@ rl_redisplay (void) ((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth); } } - _rl_vis_botlin = inv_botlin; + _rl_vis_botlin = (short_circuit >= 0) ? short_circuit : inv_botlin; /* CHANGED_SCREEN_LINE is set to 1 if we have moved to a different screen line during this redisplay. */ @@ -1413,6 +1492,7 @@ rl_redisplay (void) only need to reprint it if the cursor is before the last invisible character in the prompt string. */ /* XXX - why not use local_prompt_len? */ + /* XXX - This is right only if the prompt is a single line. */ nleft = prompt_visible_length + wrap_offset; if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 && _rl_last_c_pos < PROMPT_ENDING_INDEX && local_prompt) @@ -1895,6 +1975,8 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l /* See comments at dumb_update: for an explanation of this heuristic */ if (nmax < omax) goto clear_rest_of_line; + /* XXX - need to use WRAP_OFFSET(current_line, wrap_offset) instead of + W_OFFSET - XXX */ else if ((nmax - W_OFFSET(current_line, wrap_offset)) < (omax - W_OFFSET (current_line, visible_wrap_offset))) goto clear_rest_of_line; else @@ -1981,7 +2063,11 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l assume it's a combining character and back one up so the two base characters no longer compare equivalently. */ t = MBRTOWC (&wc, ofd, mb_cur_max, &ps); +#if 0 if (t > 0 && UNICODE_COMBINING_CHAR (wc) && WCWIDTH (wc) == 0) +#else + if (t > 0 && IS_COMBINING_CHAR (wc)) +#endif { old_offset = _rl_find_prev_mbchar (old, ofd - old, MB_FIND_ANY); new_offset = _rl_find_prev_mbchar (new, nfd - new, MB_FIND_ANY); @@ -1998,6 +2084,8 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l #if defined (HANDLE_MULTIBYTE) /* Find the last character that is the same between the two lines. This bounds the region that needs to change. */ + /* In this case, `last character' means the one farthest from the end of + the line. */ if (mb_cur_max > 1 && rl_byte_oriented == 0) { ols = old + _rl_find_prev_mbchar (old, oe - old, MB_FIND_ANY); @@ -2014,7 +2102,7 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l *olsf != *nlsf) break; - if (*ols == ' ') + if (*ols != ' ') wsatend = 0; ols = old + _rl_find_prev_mbchar (old, ols - old, MB_FIND_ANY); @@ -2076,14 +2164,30 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l } /* count of invisible characters in the current invisible line. */ - current_invis_chars = W_OFFSET (current_line, wrap_offset); + current_invis_chars = WRAP_OFFSET (current_line, wrap_offset); if (_rl_last_v_pos != current_line) { _rl_move_vert (current_line); /* We have moved up to a new screen line. This line may or may not have invisible characters on it, but we do our best to recalculate visible_wrap_offset based on what we know. */ - if (current_line == 0) + /* This first clause handles the case where the prompt has been + recalculated (e.g., by rl_message) but the old prompt is still on + the visible line because we haven't overwritten it yet. We want + to somehow use the old prompt information, but we only want to do + this once. */ + if (current_line == 0 && saved_local_prompt && old[0] == saved_local_prompt[0] && memcmp (old, saved_local_prompt, saved_local_length) == 0) + visible_wrap_offset = saved_invis_chars_first_line; + /* This clause handles the opposite: the prompt has been restored (e.g., + by rl_clear_message) but the old saved_local_prompt (now NULL, so we + can't directly check it) is still on the visible line because we + haven't overwritten it yet. We guess that there aren't any invisible + characters in any of the prompts we put in with rl_message */ + else if (current_line == 0 && local_prompt && new[0] == local_prompt[0] && + (memcmp (new, local_prompt, local_prompt_len) == 0) && + (memcmp (old, local_prompt, local_prompt_len) != 0)) + visible_wrap_offset = 0; + else if (current_line == 0) visible_wrap_offset = prompt_invis_chars_first_line; /* XXX */ #if 0 /* XXX - not yet */ else if (current_line == prompt_last_screen_line && wrap_offset > prompt_invis_chars_first_line) @@ -2140,6 +2244,7 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l else /* We take wrap_offset into account here so we can pass correct information to _rl_move_cursor_relative. */ + /* XXX - can use local_prompt_invis_chars[0] instead of wrap_offset */ _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff, 1) - wrap_offset + modmark; cpos_adjusted = 1; } @@ -2183,6 +2288,7 @@ dumb_update: wrap_offset-prompt_invis_chars_first_line on the assumption that this is the number of invisible characters in the last line of the prompt. */ + /* XXX - CHANGE THIS USING local_prompt_invis_chars[current_line] */ if (wrap_offset > prompt_invis_chars_first_line && current_line == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && @@ -2201,6 +2307,20 @@ dumb_update: wrap_offset >= prompt_invis_chars_first_line && _rl_horizontal_scroll_mode == 0) ADJUST_CPOS (prompt_invis_chars_first_line); + /* XXX - This is experimental. It's a start at supporting + prompts where a non-terminal line contains the last + invisible characters. We assume that we can use the + local_prompt_invis_chars array and that the current line + is completely filled with characters to _rl_screenwidth, + so we can either adjust by the number of bytes in the + current line or just go straight to _rl_screenwidth */ + else if (current_line > 0 && current_line < prompt_last_screen_line && + INV_CHARS_CURRENT_PROMPT_LINE(current_line) && + _rl_horizontal_scroll_mode == 0) + { + _rl_last_c_pos = _rl_screenwidth; + cpos_adjusted = 1; + } } else _rl_last_c_pos += temp; @@ -2212,6 +2332,8 @@ dumb_update: know for sure, so we use another heuristic calclulation below. */ if (nmax < omax) goto clear_rest_of_line; /* XXX */ + /* XXX - use WRAP_OFFSET(current_line, wrap_offset) here instead of + W_OFFSET since current_line == 0 */ else if ((nmax - W_OFFSET(current_line, wrap_offset)) < (omax - W_OFFSET (current_line, visible_wrap_offset))) goto clear_rest_of_line; else @@ -2680,8 +2802,6 @@ rl_on_new_line_with_prompt (void) int rl_forced_update_display (void) { - register char *temp; - if (visible_line) memset (visible_line, 0, line_size); @@ -2763,7 +2883,7 @@ _rl_move_cursor_relative (int new, const char *data, const char *dataf) (prompt_last_invisible) in the last line. IN_INVISLINE is the offset of DATA in invisible_line */ in_invisline = 0; - if (data > invisible_line && data < invisible_line+inv_lbreaks[_rl_inv_botlin+1]) + if (data > invisible_line && _rl_inv_botlin < inv_lbsize && data < invisible_line+inv_lbreaks[_rl_inv_botlin+1]) in_invisline = data - invisible_line; /* Use NEW when comparing against the last invisible character in the @@ -2866,9 +2986,25 @@ _rl_move_vert (int to) { register int delta, i; - if (_rl_last_v_pos == to || to > _rl_screenheight) + if (_rl_last_v_pos == to) return; +#if 0 + /* If we're being asked to move to a line beyond the screen height, and + we're currently at the last physical line, issue a newline and let the + terminal take care of scrolling the display. */ + if (to >= _rl_screenheight) + { + if (_rl_last_v_pos == _rl_screenheight) + { + putc ('\n', rl_outstream); + _rl_cr (); + _rl_last_c_pos = 0; + } + return; + } +#endif + if ((delta = to - _rl_last_v_pos) > 0) { for (i = 0; i < delta; i++) @@ -2952,29 +3088,15 @@ rl_character_len (int c, int pos) mini-modeline. */ static int msg_saved_prompt = 0; -#if defined (USE_VARARGS) int -#if defined (PREFER_STDARG) rl_message (const char *format, ...) -#else -rl_message (va_alist) - va_dcl -#endif { va_list args; -#if defined (PREFER_VARARGS) - char *format; -#endif #if defined (HAVE_VSNPRINTF) int bneed; #endif -#if defined (PREFER_STDARG) va_start (args, format); -#else - va_start (args); - format = va_arg (args, char *); -#endif if (msg_buf == 0) msg_buf = xmalloc (msg_bufsiz = 128); @@ -2987,12 +3109,7 @@ rl_message (va_alist) msg_buf = xrealloc (msg_buf, msg_bufsiz); va_end (args); -#if defined (PREFER_STDARG) va_start (args, format); -#else - va_start (args); - format = va_arg (args, char *); -#endif vsnprintf (msg_buf, msg_bufsiz - 1, format, args); } #else @@ -3023,40 +3140,6 @@ rl_message (va_alist) return 0; } -#else /* !USE_VARARGS */ -int -rl_message (format, arg1, arg2) - char *format; -{ - if (msg_buf == 0) - msg_buf = xmalloc (msg_bufsiz = 128); - - sprintf (msg_buf, format, arg1, arg2); - msg_buf[msg_bufsiz - 1] = '\0'; /* overflow? */ - - rl_display_prompt = msg_buf; - if (saved_local_prompt == 0) - { - rl_save_prompt (); - msg_saved_prompt = 1; - } - else if (local_prompt != saved_local_prompt) - { - FREE (local_prompt); - FREE (local_prompt_prefix); - local_prompt = (char *)NULL; - } - local_prompt = expand_prompt (msg_buf, 0, &prompt_visible_length, - &prompt_last_invisible, - &prompt_invis_chars_first_line, - &prompt_physical_chars); - local_prompt_prefix = (char *)NULL; - local_prompt_len = local_prompt ? strlen (local_prompt) : 0; - (*rl_redisplay_function) (); - - return 0; -} -#endif /* !USE_VARARGS */ /* How to clear things from the "echo-area". */ int @@ -3098,10 +3181,12 @@ rl_save_prompt (void) saved_invis_chars_first_line = prompt_invis_chars_first_line; saved_physical_chars = prompt_physical_chars; saved_local_prompt_newlines = local_prompt_newlines; + saved_local_prompt_invis_chars = local_prompt_invis_chars; local_prompt = local_prompt_prefix = (char *)0; local_prompt_len = 0; local_prompt_newlines = (int *)0; + local_prompt_invis_chars = (int *)0; prompt_last_invisible = prompt_visible_length = prompt_prefix_length = 0; prompt_invis_chars_first_line = prompt_physical_chars = 0; @@ -3113,11 +3198,13 @@ rl_restore_prompt (void) FREE (local_prompt); FREE (local_prompt_prefix); FREE (local_prompt_newlines); + FREE (local_prompt_invis_chars); local_prompt = saved_local_prompt; local_prompt_prefix = saved_local_prefix; local_prompt_len = saved_local_length; local_prompt_newlines = saved_local_prompt_newlines; + local_prompt_invis_chars = saved_local_prompt_invis_chars; prompt_prefix_length = saved_prefix_length; prompt_last_invisible = saved_last_invisible; @@ -3130,7 +3217,7 @@ rl_restore_prompt (void) saved_local_length = 0; saved_last_invisible = saved_visible_length = saved_prefix_length = 0; saved_invis_chars_first_line = saved_physical_chars = 0; - saved_local_prompt_newlines = 0; + saved_local_prompt_newlines = saved_local_prompt_invis_chars = 0; } char * @@ -3318,7 +3405,7 @@ _rl_update_final (void) full_lines = 1; } _rl_move_vert (_rl_vis_botlin); - woff = W_OFFSET(_rl_vis_botlin, wrap_offset); + woff = W_OFFSET(_rl_vis_botlin, wrap_offset); /* XXX - WRAP_OFFSET? */ botline_length = VIS_LLEN(_rl_vis_botlin) - woff; /* If we've wrapped lines, remove the final xterm line-wrap flag. */ if (full_lines && _rl_term_autowrap && botline_length == _rl_screenwidth) @@ -3327,7 +3414,7 @@ _rl_update_final (void) /* LAST_LINE includes invisible characters, so if you want to get the last character of the first line, you have to take WOFF into account. - This needs to be done for both calls to _rl_move_cursor_relative, + This needs to be done both for calls to _rl_move_cursor_relative, which takes a buffer position as the first argument, and any direct subscripts of LAST_LINE. */ last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]]; /* = VIS_CHARS(_rl_vis_botlin); */ @@ -3338,9 +3425,9 @@ _rl_update_final (void) puts_face (&last_line[_rl_screenwidth - 1 + woff], &last_face[_rl_screenwidth - 1 + woff], 1); } - _rl_vis_botlin = 0; - if (botline_length > 0 || _rl_last_c_pos > 0) + if ((_rl_vis_botlin == 0 && botline_length == 0) || botline_length > 0 || _rl_last_c_pos > 0) rl_crlf (); + _rl_vis_botlin = 0; fflush (rl_outstream); rl_display_fixed++; } diff --git a/lib/readline/doc/history.texi b/lib/readline/doc/history.texi index 721118bce..c15e95779 100644 --- a/lib/readline/doc/history.texi +++ b/lib/readline/doc/history.texi @@ -12,7 +12,7 @@ This document describes the GNU History library a programming tool that provides a consistent user interface for recalling lines of previously typed input. -Copyright @copyright{} 1988--2022 Free Software Foundation, Inc. +Copyright @copyright{} 1988--2023 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/lib/readline/doc/hstech.texi b/lib/readline/doc/hstech.texi index da6417b48..5d4efe530 100644 --- a/lib/readline/doc/hstech.texi +++ b/lib/readline/doc/hstech.texi @@ -1,7 +1,7 @@ @ignore This file documents the user interface to the GNU History library. -Copyright (C) 1988-2022 Free Software Foundation, Inc. +Copyright (C) 1988-2023 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. Permission is granted to make and distribute verbatim copies of this manual @@ -369,7 +369,7 @@ Returns 0 on success, or @code{errno} on failure. These functions implement history expansion. -@deftypefun int history_expand (char *string, char **output) +@deftypefun int history_expand (const char *string, char **output) Expand @var{string}, placing the result into @var{output}, a pointer to a string (@pxref{History Interaction}). Returns: @table @code @@ -517,9 +517,8 @@ The following program demonstrates simple use of the @sc{gnu} History Library. #include <stdio.h> #include <readline/history.h> -main (argc, argv) - int argc; - char **argv; +int +main (int argc, char **argv) @{ char line[1024], *t; int len, done = 0; diff --git a/lib/readline/doc/hsuser.texi b/lib/readline/doc/hsuser.texi index 9081baf8b..4c5dc84a1 100644 --- a/lib/readline/doc/hsuser.texi +++ b/lib/readline/doc/hsuser.texi @@ -90,8 +90,8 @@ named by @env{$HISTFILE}. If the @code{histappend} shell option is set (@pxref{Bash Builtins}), the lines are appended to the history file, otherwise the history file is overwritten. -If @env{HISTFILE} -is unset, or if the history file is unwritable, the history is not saved. +If @env{HISTFILE} is unset or null, +or if the history file is unwritable, the history is not saved. After saving the history, the history file is truncated to contain no more than @env{$HISTFILESIZE} lines. If @env{HISTFILESIZE} is unset, or set to null, a non-numeric value, or @@ -104,7 +104,7 @@ When the history file is read, lines beginning with the history comment character followed immediately by a digit are interpreted as timestamps for the following history entry. -The builtin command @code{fc} may be used to list or edit and re-execute +The @code{fc} builtin command may be used to list or edit and re-execute a portion of the history list. The @code{history} builtin may be used to display or modify the history list and manipulate the history file. @@ -113,8 +113,9 @@ are available in each editing mode that provide access to the history list (@pxref{Commands For History}). The shell allows control over which commands are saved on the history -list. The @env{HISTCONTROL} and @env{HISTIGNORE} -variables may be set to cause the shell to save only a subset of the +list. +The @env{HISTCONTROL} and @env{HISTIGNORE} +variables are used to cause the shell to save only a subset of the commands entered. The @code{cmdhist} shell option, if enabled, causes the shell to attempt to save each @@ -192,7 +193,7 @@ With no options, display the history list with line numbers. Lines prefixed with a @samp{*} have been modified. An argument of @var{n} lists only the last @var{n} lines. If the shell variable @env{HISTTIMEFORMAT} is set and not null, -it is used as a format string for @var{strftime} to display +it is used as a format string for @code{strftime}(3) to display the time stamp associated with each displayed history entry. No intervening blank is printed between the formatted time stamp and the history line. @@ -250,6 +251,7 @@ If a @var{filename} argument is supplied when any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is used, Bash uses @var{filename} as the history file. If not, then the value of the @env{HISTFILE} variable is used. +If @env{HISTFILE} is unset or null, these options have no effect. The return value is 0 unless an invalid option is encountered, an error occurs while reading or writing the history file, an invalid @@ -282,14 +284,21 @@ expansion functions about quoting still in effect from previous lines. History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for inclusion into the -current one. The line selected from the history is called the -@dfn{event}, and the portions of that line that are acted upon are -called @dfn{words}. Various @dfn{modifiers} are available to manipulate -the selected words. The line is broken into words in the same fashion +current one. + +The line selected from the history is called the @dfn{event}, +and the portions of that line that are acted upon are called @dfn{words}. +The line is broken into words in the same fashion that Bash does, so that several words surrounded by quotes are considered one word. +The @dfn{event designator} selects the event, the optional +@dfn{word designator} selects words from the event, and +various optional @dfn{modifiers} are available to manipulate the +selected words. + History expansions are introduced by the appearance of the history expansion character, which is @samp{!} by default. +History expansions may appear anywhere in the input, but do not nest. History expansion implements shell-like quoting conventions: a backslash can be used to remove the special handling for the next character; @@ -307,6 +316,16 @@ also treated as quoted if it immediately precedes the closing double quote in a double-quoted string. @end ifset +There is a special abbreviation for substitution, active when the +@var{quick substitution} character (default @samp{^}) +is the first character on the line. +It selects the previous history list entry, using an event designator +equivalent to @code{!!}, +and substitutes one string for another in that line. +It is described below (@pxref{Event Designators}). +This is the only history expansion that does not begin with the history +expansion character. + @ifset BashFeatures Several shell options settable with the @code{shopt} builtin (@pxref{The Shopt Builtin}) may be used to tailor @@ -347,6 +366,9 @@ An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list. +The event designator consists of the portion of the word beginning +with the history expansion character, and ending with the word designator +if one is present, or the end of the word. @cindex history events @table @asis @@ -354,8 +376,9 @@ position in the history list. @item @code{!} @ifset BashFeatures Start a history substitution, except when followed by a space, tab, -the end of the line, @samp{=} or @samp{(} (when the -@code{extglob} shell option is enabled using the @code{shopt} builtin). +the end of the line, @samp{=}, +or the rest of the shell metacharacters defined above +(@pxref{Definitions}). @end ifset @ifclear BashFeatures Start a history substitution, except when followed by a space, tab, @@ -400,6 +423,8 @@ The entire command line typed so far. @subsection Word Designators Word designators are used to select desired words from the event. +They are optional; if the word designator isn't supplied, the history +expansion uses the entire event. A @samp{:} separates the event specification from the word designator. It may be omitted if the word designator begins with a @samp{^}, @samp{$}, @samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning diff --git a/lib/readline/doc/rltech.texi b/lib/readline/doc/rltech.texi index a93f77dab..497cd4d1f 100644 --- a/lib/readline/doc/rltech.texi +++ b/lib/readline/doc/rltech.texi @@ -7,7 +7,7 @@ This document describes the GNU Readline Library, a utility for aiding in the consistency of user interface across discrete programs that need to provide a command line interface. -Copyright (C) 1988--2022 Free Software Foundation, Inc. +Copyright (C) 1988--2023 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -67,6 +67,9 @@ the simplest way possible, perhaps to replace calls in your code to The function @code{readline()} prints a prompt @var{prompt} and then reads and returns a single line of text from the user. +Since it's possible to enter characters into the line while quoting +them to disable any Readline editing function they might normally have, +this line may include embedded newlines and other special characters. If @var{prompt} is @code{NULL} or the empty string, no prompt is displayed. The line @code{readline} returns is allocated with @code{malloc()}; the caller should @code{free()} the line when it has finished with it. @@ -476,6 +479,8 @@ The default hook checks @code{rl_instream}; if an application is using a different input source, it should set the hook appropriately. Readline queries for available input when implementing intra-key-sequence timeouts during input and incremental searches. +This function must return zero if there is no input available, and non-zero +if input is available. This may use an application-specific timeout before returning a value; Readline uses the value passed to @code{rl_set_keyboard_input_timeout()} or the value of the user-settable @var{keyseq-timeout} variable. @@ -513,6 +518,15 @@ By default, this is set to @code{rl_deprep_terminal} (@pxref{Terminal Management}). @end deftypevar +@deftypevar {void} rl_macro_display_hook +If set, this points to a function that @code{rl_macro_dumper} will call to +display a key sequence bound to a macro. +It is called with the key sequence, the "untranslated" macro value (i.e., +with backslash escapes included, as when passed to @code{rl_macro_bind}), +the @code{readable} argument passed to @code{rl_macro_dumper}, and any +prefix to display before the key sequence. +@end deftypevar + @deftypevar {Keymap} rl_executing_keymap This variable is set to the keymap (@pxref{Keymaps}) in which the currently executing Readline function was found. @@ -915,9 +929,19 @@ Return an array of strings representing the key sequences used to invoke @var{function} in the keymap @var{map}. @end deftypefun +@deftypefun void rl_print_keybinding (const char *name, Keymap map, int readable) +Print key sequences bound to Readline function name @var{name} in +keymap @var{map}. +If @var{map} is NULL, this uses the current keymap. +If @var{readable} is non-zero, +the list is formatted in such a way that it can be made part of an +@code{inputrc} file and re-read. +@end deftypefun + @deftypefun void rl_function_dumper (int readable) Print the Readline function names and the key sequences currently -bound to them to @code{rl_outstream}. If @var{readable} is non-zero, +bound to them to @code{rl_outstream}. +If @var{readable} is non-zero, the list is formatted in such a way that it can be made part of an @code{inputrc} file and re-read. @end deftypefun @@ -1346,13 +1370,15 @@ If @var{c} is a number, return the value it represents. Bind the key sequence @var{keyseq} to invoke the macro @var{macro}. The binding is performed in @var{map}. When @var{keyseq} is invoked, the @var{macro} will be inserted into the line. This function is deprecated; -use @code{rl_generic_bind()} instead. +use @code{rl_generic_bind} instead. @end deftypefun @deftypefun void rl_macro_dumper (int readable) Print the key sequences bound to macros and their values, using the current keymap, to @code{rl_outstream}. -If @var{readable} is non-zero, the list is formatted in such a way +If the application has assigned a value to @code{rl_macro_display_hook}, +@code{rl_macro_dumper} calls it instead of printing anything. +If @var{readable} is greater than zero, the list is formatted in such a way that it can be made part of an @code{inputrc} file and re-read. @end deftypefun @@ -1389,6 +1415,10 @@ use all of a terminal's capabilities, and this function will return values for only those capabilities Readline uses. @end deftypefun +@deftypefun {void} rl_reparse_colors (void) +Read or re-read color definitions from @env{LS_COLORS}. +@end deftypefun + @deftypefun {void} rl_clear_history (void) Clear the history list by deleting all of the entries, in the same manner as the History library's @code{clear_history()} function. @@ -2138,7 +2168,9 @@ The function should not modify the directory argument if it returns 0. @deftypevar {rl_dequote_func_t *} rl_filename_rewrite_hook If non-zero, this is the address of a function called when reading directory entries from the filesystem for completion and comparing -them to the partial word to be completed. The function should +them to the filename portion of the partial word to be completed +(after its potential modification by @code{rl_completion_rewrite_hook}). +The function should perform any necessary application or system-specific conversion on the filename, such as converting between character sets or converting from a filesystem format to a character input format. @@ -2151,6 +2183,24 @@ matches, is added to the list of matches. Readline will free the allocated string. @end deftypevar +@deftypevar {rl_dequote_func_t *} rl_completion_rewrite_hook +If non-zero, this is the address of a function to call before +comparing the filename portion of a word to be completed with directory +entries from the filesystem. +The function takes two arguments: @var{fname}, the filename to be converted, +after any @code{rl_filename_dequoting_function} has been applied, +and @var{fnlen}, its length in bytes. +It must either return its first argument (if no conversion takes place) +or the converted filename in newly-allocated memory. +The function should perform any necessary application or system-specific +conversion on the filename, such as converting between character sets or +converting from a character input format to some other format. +Readline compares the converted form against directory entries, after +their potential modification by @code{rl_filename_rewrite_hook}, and adds +any matches to the list of matches. +Readline will free the allocated string. +@end deftypevar + @deftypevar {rl_compdisp_func_t *} rl_completion_display_matches_hook If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. @@ -2298,6 +2348,17 @@ The quoting is effected via a call to the function pointed to by @code{rl_filename_quoting_function}. @end deftypevar +@deftypevar int rl_full_quoting_desired +Non-zero means that Readline should apply filename-style quoting, +including any application-specified quoting mechanism, +to all completion matches even if we are not otherwise treating the +matches as filenames. +This is @emph{always} zero when completion is attempted, and can only +be changed within an application-specific completion function. +The quoting is effected via a call to the function pointed to +by @code{rl_filename_quoting_function}. +@end deftypevar + @deftypevar int rl_attempted_completion_over If an application-specific completion function assigned to @code{rl_attempted_completion_function} sets this variable to a non-zero @@ -2423,8 +2484,8 @@ COMMAND commands[] = @{ @}; /* Forward declarations. */ -char *stripwhite (); -COMMAND *find_command (); +char *stripwhite (char *); +COMMAND *find_command (char *); /* The name of this program, as taken from argv[0]. */ char *progname; @@ -2433,8 +2494,7 @@ char *progname; int done; char * -dupstr (s) - char *s; +dupstr (char *s) @{ char *r; @@ -2443,9 +2503,8 @@ dupstr (s) return (r); @} -main (argc, argv) - int argc; - char **argv; +int +main (int argc, char **argv) @{ char *line, *s; @@ -2481,8 +2540,7 @@ main (argc, argv) /* Execute a command line. */ int -execute_line (line) - char *line; +execute_line (char *line) @{ register int i; COMMAND *command; @@ -2521,8 +2579,7 @@ execute_line (line) /* Look up NAME as the name of a command, and return a pointer to that command. Return a NULL pointer if NAME isn't a command name. */ COMMAND * -find_command (name) - char *name; +find_command (char *name) @{ register int i; @@ -2536,8 +2593,7 @@ find_command (name) /* Strip whitespace from the start and end of STRING. Return a pointer into STRING. */ char * -stripwhite (string) - char *string; +stripwhite (char *string) @{ register char *s, *t; @@ -2561,13 +2617,14 @@ stripwhite (string) /* */ /* **************************************************************** */ -char *command_generator PARAMS((const char *, int)); -char **fileman_completion PARAMS((const char *, int, int)); +char *command_generator (const char *, int); +char **fileman_completion (const char *, int, int); /* Tell the GNU Readline library how to complete. We want to try to complete on command names if this is the first word in the line, or on filenames if not. */ -initialize_readline () +void +initialize_readline (void) @{ /* Allow conditional parsing of the ~/.inputrc file. */ rl_readline_name = "FileMan"; @@ -2582,9 +2639,7 @@ initialize_readline () in case we want to do some simple parsing. Return the array of matches, or NULL if there aren't any. */ char ** -fileman_completion (text, start, end) - const char *text; - int start, end; +fileman_completion (const char *text, int start, int end) @{ char **matches; @@ -2603,9 +2658,7 @@ fileman_completion (text, start, end) to start from scratch; without any state (i.e. STATE == 0), then we start at the top of the list. */ char * -command_generator (text, state) - const char *text; - int state; +command_generator (const char *text, int state) @{ static int list_index, len; char *name; @@ -2643,40 +2696,40 @@ command_generator (text, state) static char syscom[1024]; /* List the file(s) named in arg. */ -com_list (arg) - char *arg; +int +com_list (char *arg) @{ if (!arg) arg = ""; - sprintf (syscom, "ls -FClg %s", arg); + snprintf (syscom, sizeof (syscom), "ls -FClg %s", arg); return (system (syscom)); @} -com_view (arg) - char *arg; +int +com_view (char *arg) @{ if (!valid_argument ("view", arg)) return 1; #if defined (__MSDOS__) /* more.com doesn't grok slashes in pathnames */ - sprintf (syscom, "less %s", arg); + snprintf (syscom, sizeof (syscom), "less %s", arg); #else - sprintf (syscom, "more %s", arg); + snprintf (syscom, sizeof (syscom), "more %s", arg); #endif return (system (syscom)); @} -com_rename (arg) - char *arg; +int +com_rename (char *arg) @{ too_dangerous ("rename"); return (1); @} -com_stat (arg) - char *arg; +int +com_stat (char *arg) @{ struct stat finfo; @@ -2703,8 +2756,8 @@ com_stat (arg) return (0); @} -com_delete (arg) - char *arg; +int +com_delete (char *arg) @{ too_dangerous ("delete"); return (1); @@ -2712,8 +2765,8 @@ com_delete (arg) /* Print out help for ARG, or for all of the commands if ARG is not present. */ -com_help (arg) - char *arg; +int +com_help (char *arg) @{ register int i; int printed = 0; @@ -2751,8 +2804,8 @@ com_help (arg) @} /* Change to the directory ARG. */ -com_cd (arg) - char *arg; +int +com_cd (char *arg) @{ if (chdir (arg) == -1) @{ @@ -2765,8 +2818,8 @@ com_cd (arg) @} /* Print out the current working directory. */ -com_pwd (ignore) - char *ignore; +int +com_pwd (char *ignore) @{ char dir[1024], *s; @@ -2782,16 +2835,16 @@ com_pwd (ignore) @} /* The user wishes to quit using this program. Just set DONE non-zero. */ -com_quit (arg) - char *arg; +int +com_quit (char *arg) @{ done = 1; return (0); @} /* Function which tells you that you can't do this. */ -too_dangerous (caller) - char *caller; +void +too_dangerous (char *caller) @{ fprintf (stderr, "%s: Too dangerous for me to distribute. Write it yourself.\n", @@ -2801,8 +2854,7 @@ too_dangerous (caller) /* Return non-zero if ARG is a valid argument for CALLER, else print an error message and return zero. */ int -valid_argument (caller, arg) - char *caller, *arg; +valid_argument (char *caller, char *arg) @{ if (!arg || !*arg) @{ diff --git a/lib/readline/doc/rluser.texi b/lib/readline/doc/rluser.texi index cbcbb45cf..45e8a85dd 100644 --- a/lib/readline/doc/rluser.texi +++ b/lib/readline/doc/rluser.texi @@ -1,5 +1,7 @@ @comment %**start of header (This is for running Texinfo on a region.) +@ifclear BashFeatures @setfilename rluser.info +@end ifclear @comment %**end of header (This is for running Texinfo on a region.) @ignore @@ -9,7 +11,7 @@ use these features. There is a document entitled "readline.texinfo" which contains both end-user and programmer documentation for the GNU Readline Library. -Copyright (C) 1988--2022 Free Software Foundation, Inc. +Copyright (C) 1988--2023 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. @@ -323,13 +325,14 @@ the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. -Readline remembers the last incremental search string. If two -@kbd{C-r}s are typed without any intervening characters defining a new -search string, any remembered search string is used. +Readline remembers the last incremental search string. +If two @kbd{C-r}s are typed without any intervening characters defining +a new search string, Readline uses any remembered search string. Non-incremental searches read the entire search string before starting -to search for matching history lines. The search string may be -typed by the user or be part of the contents of the current line. +to search for matching history lines. +The search string may be typed by the user or be part of the contents of +the current line. @node Readline Init File @section Readline Init File @@ -402,11 +405,12 @@ set editing-mode vi @end example Variable names and values, where appropriate, are recognized without regard -to case. Unrecognized variable names are ignored. +to case. +Unrecognized variable names are ignored. Boolean variables (those that can be set to on or off) are set to on if -the value is null or empty, @var{on} (case-insensitive), or 1. Any other -value results in the variable being set to off. +the value is null or empty, @var{on} (case-insensitive), or 1. +Any other value results in the variable being set to off. @ifset BashFeatures The @w{@code{bind -V}} command lists the current Readline variable names @@ -456,8 +460,12 @@ the terminal's bell. @item bind-tty-special-chars @vindex bind-tty-special-chars If set to @samp{on} (the default), Readline attempts to bind the control -characters treated specially by the kernel's terminal driver to their +characters that are +treated specially by the kernel's terminal driver to their Readline equivalents. +These override the default Readline bindings described here. +Type @samp{stty -a} at a Bash prompt to see your current terminal settings, +including the special control characters (usually @code{cchars}). @item blink-matching-paren @vindex blink-matching-paren @@ -716,11 +724,11 @@ The default is @samp{off}. @item match-hidden-files @vindex match-hidden-files -This variable, when set to @samp{on}, causes Readline to match files whose +This variable, when set to @samp{on}, forces Readline to match files whose names begin with a @samp{.} (hidden files) when performing filename completion. -If set to @samp{off}, the leading @samp{.} must be -supplied by the user in the filename to be completed. +If set to @samp{off}, the user must include the leading @samp{.} +in the filename to be completed. This variable is @samp{on} by default. @item menu-complete-display-prefix @@ -757,6 +765,12 @@ before returning when @code{accept-line} is executed. By default, history lines may be modified and retain individual undo lists across calls to @code{readline()}. The default is @samp{off}. +@item search-ignore-case +@vindex search-ignore-case +If set to @samp{on}, Readline performs incremental and non-incremental +history list searches in a case-insensitive fashion. +The default value is @samp{off}. + @item show-all-if-ambiguous @vindex show-all-if-ambiguous This alters the default behavior of the completion functions. If @@ -1458,6 +1472,16 @@ moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. +@ifset BashFeatures +@item shell-transpose-words (M-C-t) +Drag the word before point past the word after point, +moving point past that word as well. +If the insertion point is at the end of the line, this transposes +the last two words on the line. +Word boundaries are the same as @code{shell-forward-word} and +@code{shell-backward-word}. +@end ifset + @item upcase-word (M-u) Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. @@ -1528,14 +1552,6 @@ Kill the word behind point. Word boundaries are the same as @code{shell-backward-word}. @end ifset -@item shell-transpose-words (M-C-t) -Drag the word before point past the word after point, -moving point past that word as well. -If the insertion point is at the end of the line, this transposes -the last two words on the line. -Word boundaries are the same as @code{shell-forward-word} and -@code{shell-backward-word}. - @item unix-word-rubout (C-w) Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. @@ -1858,9 +1874,13 @@ pathname expansion. Display version information about the current instance of Bash. @item shell-expand-line (M-C-e) -Expand the line as the shell does. -This performs alias and history expansion as well as all of the shell -word expansions (@pxref{Shell Expansions}). +Expand the line by performing shell word expansions. +This performs alias and history expansion, +$'@var{string}' and $"@var{string}" quoting, +tilde expansion, parameter and variable expansion, arithmetic expansion, +command and proces substitution, +word splitting, and quote removal. +An explicit argument suppresses command and process substitution. @item history-expand-line (M-^) Perform history expansion on the current line. @@ -1898,6 +1918,13 @@ editing mode. @end ifclear +@item execute-named-command (M-x) +Read a bindable readline command name from the input and execute the +function to which it's bound, as if the key sequence to which it was +bound appeared in the input. +If this function is supplied with a numeric argument, it passes that +argument to the function it executes. + @end ftable @node Readline vi Mode @@ -2098,14 +2125,25 @@ be completed, and two to modify the completion as it is happening. @item compgen @btindex compgen @example -@code{compgen [@var{option}] [@var{word}]} +@code{compgen [-V @var{varname}] [@var{option}] [@var{word}]} @end example Generate possible completion matches for @var{word} according to the @var{option}s, which may be any option accepted by the @code{complete} -builtin with the exception of @option{-p} and @option{-r}, and write -the matches to the standard output. +builtin with the exceptions of +@option{-p}, +@option{-r}, +@option{-D}, +@option{-E}, +and +@option{-I}, +and write the matches to the standard output. + +If the @option{-V} option is supplied, @code{compgen} stores the generated +completions into the indexed array variable @var{varname} instead of writing +them to the standard output. + When using the @option{-F} or @option{-C} options, the various shell variables set by the programmable completion facilities, while available, will not have useful values. @@ -2122,14 +2160,15 @@ matches were generated. @item complete @btindex complete @example -@code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-DEI] [-A @var{action}] [-G @var{globpat}] -[-W @var{wordlist}] [-F @var{function}] [-C @var{command}] [-X @var{filterpat}] -[-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]} +@code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-DEI] [-A @var{action}] +[-G @var{globpat}] [-W @var{wordlist}] [-F @var{function}] [-C @var{command}] +[-X @var{filterpat}] [-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]} @code{complete -pr [-DEI] [@var{name} @dots{}]} @end example Specify how arguments to each @var{name} should be completed. -If the @option{-p} option is supplied, or if no options are supplied, existing +If the @option{-p} option is supplied, or if no options or @var{name}s +are supplied, existing completion specifications are printed in a way that allows them to be reused as input. The @option{-r} option removes a completion specification for @@ -2187,6 +2226,10 @@ quoting special characters, or suppressing trailing spaces). This option is intended to be used with shell functions specified with @option{-F}. +@item fullquote +Tell Readline to quote all the completed words even if they are not +filenames. + @item noquote Tell Readline not to quote the completed words if they are filenames (quoting filenames is the default). @@ -2330,7 +2373,14 @@ case, any completion not matching @var{filterpat} is removed. @end table The return value is true unless an invalid option is supplied, an option -other than @option{-p} or @option{-r} is supplied without a @var{name} +other than +@option{-p}, +@option{-r}, +@option{-D}, +@option{-E}, +or +@option{-I} +is supplied without a @var{name} argument, an attempt is made to remove a completion specification for a @var{name} for which no specification exists, or an error occurs adding a completion specification. @@ -2458,9 +2508,11 @@ complete -o filenames -o nospace -o bashdefault -F _comp_cd cd @noindent Since we'd like Bash and Readline to take care of some of the other details for us, we use several other options to tell Bash -and Readline what to do. The @option{-o filenames} option tells Readline +and Readline what to do. +The @option{-o filenames} option tells Readline that the possible completions should be treated as filenames, and quoted -appropriately. That option will also cause Readline to append a slash to +appropriately. +That option will also cause Readline to append a slash to filenames it can determine are directories (which is why we might want to extend @code{_comp_cd} to append a slash if we're using directories found via @var{CDPATH}: Readline can't tell those completions are directories). @@ -2468,9 +2520,10 @@ The @option{-o nospace} option tells Readline to not append a space character to the directory name, in case we want to append to it. The @option{-o bashdefault} option brings in the rest of the "Bash default" completions -- possible completions that Bash adds to the default Readline -set. These include things like command name completion, variable completion -for words beginning with @samp{$} or @samp{$@{}, completions containing pathname -expansion patterns (@pxref{Filename Expansion}), and so on. +set. +These include things like command name completion, variable completion +for words beginning with @samp{$} or @samp{$@{}, completions containing +pathname expansion patterns (@pxref{Filename Expansion}), and so on. Once installed using @code{complete}, @code{_comp_cd} will be called every time we attempt word completion for a @code{cd} command. @@ -2479,8 +2532,8 @@ Many more examples -- an extensive collection of completions for most of the common GNU, Unix, and Linux commands -- are available as part of the bash_completion project. This is installed by default on many GNU/Linux distributions. Originally written by Ian Macdonald, the project now lives -at @url{https://github.com/scop/bash-completion/}. There are ports for -other systems such as Solaris and Mac OS X. +at @url{https://github.com/scop/bash-completion/}. +There are ports for other systems such as Solaris and Mac OS X. An older version of the bash_completion package is distributed with bash in the @file{examples/complete} subdirectory. diff --git a/lib/readline/doc/version.texi b/lib/readline/doc/version.texi index d31027340..9c820a91c 100644 --- a/lib/readline/doc/version.texi +++ b/lib/readline/doc/version.texi @@ -1,11 +1,11 @@ @ignore -Copyright (C) 1988-2022 Free Software Foundation, Inc. +Copyright (C) 1988-2024 Free Software Foundation, Inc. @end ignore -@set EDITION 8.2 -@set VERSION 8.2 +@set EDITION 8.3 +@set VERSION 8.3 -@set UPDATED 19 September 2022 -@set UPDATED-MONTH September 2022 +@set UPDATED 19 January 2024 +@set UPDATED-MONTH January 2024 -@set LASTCHANGE Mon Sep 19 11:15:16 EDT 2022 +@set LASTCHANGE Fri Jan 19 11:01:44 EST 2024 diff --git a/lib/readline/emacs_keymap.c b/lib/readline/emacs_keymap.c index 02597dad3..cf2adcc1a 100644 --- a/lib/readline/emacs_keymap.c +++ b/lib/readline/emacs_keymap.c @@ -448,7 +448,7 @@ KEYMAP_ENTRY_ARRAY emacs_meta_keymap = { { ISFUNC, rl_upcase_word }, /* Meta-u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-w */ - { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-x */ + { ISFUNC, rl_execute_named_command }, /* Meta-x */ { ISFUNC, rl_yank_pop }, /* Meta-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-z */ diff --git a/lib/readline/examples/excallback.c b/lib/readline/examples/excallback.c index 923c9238b..04ecb1408 100644 --- a/lib/readline/examples/excallback.c +++ b/lib/readline/examples/excallback.c @@ -102,7 +102,7 @@ cc_t old_vtime; struct termios term; int -main() +main(int c, char **v) { fd_set fds; diff --git a/lib/readline/examples/fileman.c b/lib/readline/examples/fileman.c index 2a8b097ad..c26bccf09 100644 --- a/lib/readline/examples/fileman.c +++ b/lib/readline/examples/fileman.c @@ -1,6 +1,6 @@ /* fileman.c - file manager example for readline library. */ -/* Copyright (C) 1987-2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-2009,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -61,24 +61,24 @@ # include <readline/history.h> #endif -extern char *xmalloc PARAMS((size_t)); +extern char *xmalloc (size_t); -void initialize_readline PARAMS((void)); -void too_dangerous PARAMS((char *)); +void initialize_readline (void); +void too_dangerous (char *); -int execute_line PARAMS((char *)); -int valid_argument PARAMS((char *, char *)); +int execute_line (char *); +int valid_argument (char *, char *); /* The names of functions that actually do the manipulation. */ -int com_list PARAMS((char *)); -int com_view PARAMS((char *)); -int com_rename PARAMS((char *)); -int com_stat PARAMS((char *)); -int com_pwd PARAMS((char *)); -int com_delete PARAMS((char *)); -int com_help PARAMS((char *)); -int com_cd PARAMS((char *)); -int com_quit PARAMS((char *)); +int com_list (char *); +int com_view (char *); +int com_rename (char *); +int com_stat (char *); +int com_pwd (char *); +int com_delete (char *); +int com_help (char *); +int com_cd (char *); +int com_quit (char *); /* A structure which contains information on the commands this program can understand. */ @@ -105,8 +105,11 @@ COMMAND commands[] = { }; /* Forward declarations. */ -char *stripwhite (); -COMMAND *find_command (); +char *dupstr (char *); +int execute_line (char *); +char *stripwhite (char *); + +COMMAND *find_command (char *); /* The name of this program, as taken from argv[0]. */ char *progname; @@ -115,8 +118,7 @@ char *progname; int done; char * -dupstr (s) - char *s; +dupstr (char *s) { char *r; @@ -125,45 +127,9 @@ dupstr (s) return (r); } -int -main (argc, argv) - int argc; - char **argv; -{ - char *line, *s; - - progname = argv[0]; - - initialize_readline (); /* Bind our completer. */ - - /* Loop reading and executing lines until the user quits. */ - for ( ; done == 0; ) - { - line = readline ("FileMan: "); - - if (!line) - break; - - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - s = stripwhite (line); - - if (*s) - { - add_history (s); - execute_line (s); - } - - free (line); - } - exit (0); -} - /* Execute a command line. */ int -execute_line (line) - char *line; +execute_line (char *line) { register int i; COMMAND *command; @@ -202,8 +168,7 @@ execute_line (line) /* Look up NAME as the name of a command, and return a pointer to that command. Return a NULL pointer if NAME isn't a command name. */ COMMAND * -find_command (name) - char *name; +find_command (char *name) { register int i; @@ -217,8 +182,7 @@ find_command (name) /* Strip whitespace from the start and end of STRING. Return a pointer into STRING. */ char * -stripwhite (string) - char *string; +stripwhite (char *string) { register char *s, *t; @@ -242,14 +206,14 @@ stripwhite (string) /* */ /* **************************************************************** */ -char *command_generator PARAMS((const char *, int)); -char **fileman_completion PARAMS((const char *, int, int)); +char *command_generator (const char *, int); +char **fileman_completion (const char *, int, int); /* Tell the GNU Readline library how to complete. We want to try to complete on command names if this is the first word in the line, or on filenames if not. */ void -initialize_readline () +initialize_readline (void) { /* Allow conditional parsing of the ~/.inputrc file. */ rl_readline_name = "FileMan"; @@ -264,9 +228,7 @@ initialize_readline () in case we want to do some simple parsing. Return the array of matches, or NULL if there aren't any. */ char ** -fileman_completion (text, start, end) - const char *text; - int start, end; +fileman_completion (const char *text, int start, int end) { char **matches; @@ -285,9 +247,7 @@ fileman_completion (text, start, end) to start from scratch; without any state (i.e. STATE == 0), then we start at the top of the list. */ char * -command_generator (text, state) - const char *text; - int state; +command_generator (const char *text, int state) { static int list_index, len; char *name; @@ -326,43 +286,39 @@ static char syscom[1024]; /* List the file(s) named in arg. */ int -com_list (arg) - char *arg; +com_list (char *arg) { if (!arg) arg = ""; - sprintf (syscom, "ls -FClg %s", arg); + snprintf (syscom, sizeof (syscom), "ls -FClg %s", arg); return (system (syscom)); } int -com_view (arg) - char *arg; +com_view (char *arg) { if (!valid_argument ("view", arg)) return 1; #if defined (__MSDOS__) /* more.com doesn't grok slashes in pathnames */ - sprintf (syscom, "less %s", arg); + snprintf (syscom, sizeof (syscom), "less %s", arg); #else - sprintf (syscom, "more %s", arg); + snprintf (syscom, sizeof (syscom), "more %s", arg); #endif return (system (syscom)); } int -com_rename (arg) - char *arg; +com_rename (char *arg) { too_dangerous ("rename"); return (1); } int -com_stat (arg) - char *arg; +com_stat (char *arg) { struct stat finfo; @@ -390,8 +346,7 @@ com_stat (arg) } int -com_delete (arg) - char *arg; +com_delete (char *arg) { too_dangerous ("delete"); return (1); @@ -400,8 +355,7 @@ com_delete (arg) /* Print out help for ARG, or for all of the commands if ARG is not present. */ int -com_help (arg) - char *arg; +com_help (char *arg) { register int i; int printed = 0; @@ -440,8 +394,7 @@ com_help (arg) /* Change to the directory ARG. */ int -com_cd (arg) - char *arg; +com_cd (char *arg) { if (chdir (arg) == -1) { @@ -455,8 +408,7 @@ com_cd (arg) /* Print out the current working directory. */ int -com_pwd (ignore) - char *ignore; +com_pwd (char *ignore) { char dir[1024], *s; @@ -473,8 +425,7 @@ com_pwd (ignore) /* The user wishes to quit using this program. Just set DONE non-zero. */ int -com_quit (arg) - char *arg; +com_quit (char *arg) { done = 1; return (0); @@ -482,8 +433,7 @@ com_quit (arg) /* Function which tells you that you can't do this. */ void -too_dangerous (caller) - char *caller; +too_dangerous (char *caller) { fprintf (stderr, "%s: Too dangerous for me to distribute. Write it yourself.\n", @@ -493,8 +443,7 @@ too_dangerous (caller) /* Return non-zero if ARG is a valid argument for CALLER, else print an error message and return zero. */ int -valid_argument (caller, arg) - char *caller, *arg; +valid_argument (char *caller, char *arg) { if (!arg || !*arg) { @@ -504,3 +453,36 @@ valid_argument (caller, arg) return (1); } + +int +main (int argc, char **argv) +{ + char *line, *s; + + progname = argv[0]; + + initialize_readline (); /* Bind our completer. */ + + /* Loop reading and executing lines until the user quits. */ + for ( ; done == 0; ) + { + line = readline ("FileMan: "); + + if (!line) + break; + + /* Remove leading and trailing whitespace from the line. + Then, if there is anything left, add it to the history list + and execute it. */ + s = stripwhite (line); + + if (*s) + { + add_history (s); + execute_line (s); + } + + free (line); + } + exit (0); +} diff --git a/lib/readline/examples/histexamp.c b/lib/readline/examples/histexamp.c index 309d769b3..2e946acac 100644 --- a/lib/readline/examples/histexamp.c +++ b/lib/readline/examples/histexamp.c @@ -32,9 +32,7 @@ #include <string.h> int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { char line[1024], *t; int len, done; @@ -91,6 +89,7 @@ main (argc, argv) register HIST_ENTRY **the_list; register int i; time_t tt; + struct tm *tm; char timestr[128]; the_list = history_list (); @@ -98,8 +97,9 @@ main (argc, argv) for (i = 0; the_list[i]; i++) { tt = history_get_time (the_list[i]); - if (tt) - strftime (timestr, sizeof (timestr), "%a %R", localtime(&tt)); + tm = tt ? localtime (&tt) : 0; + if (tm) + strftime (timestr, sizeof (timestr), "%a %R", tm); else strcpy (timestr, "??"); printf ("%d: %s: %s\n", i + history_base, timestr, the_list[i]->line); diff --git a/lib/readline/examples/manexamp.c b/lib/readline/examples/manexamp.c index 351c6285e..c8e11d5c8 100644 --- a/lib/readline/examples/manexamp.c +++ b/lib/readline/examples/manexamp.c @@ -1,6 +1,6 @@ /* manexamp.c -- The examples which appear in the documentation are here. */ -/* Copyright (C) 1987-2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-2009,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -18,9 +18,35 @@ You should have received a copy of the GNU General Public License along with Readline. If not, see <http://www.gnu.org/licenses/>. */ +#if defined (HAVE_CONFIG_H) +# include <config.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + + +#include <stdlib.h> #include <stdio.h> -#include <readline/readline.h> + +#include <ctype.h> +#include <string.h> +#include <errno.h> + +#include <locale.h> + +#ifndef errno +extern int errno; +#endif + +#if defined (READLINE_LIBRARY) +# include "readline.h" +# include "history.h" +#else +# include <readline/readline.h> +# include <readline/history.h> +#endif /* **************************************************************** */ /* */ @@ -33,7 +59,7 @@ static char *line_read = (char *)NULL; /* Read a string, and return a pointer to it. Returns NULL on EOF. */ char * -rl_gets () +rl_gets (void) { /* If the buffer has already been allocated, return the memory to the free pool. */ @@ -60,10 +86,11 @@ rl_gets () /* **************************************************************** */ /* Invert the case of the COUNT following characters. */ -invert_case_line (count, key) - int count, key; +int +invert_case_line (int count, int key) { - register int start, end; + int start, end; + int direction; start = rl_point; @@ -92,7 +119,7 @@ invert_case_line (count, key) } if (start == end) - return; + return 0; /* Tell readline that we are modifying the line, so save the undo information. */ @@ -108,4 +135,5 @@ invert_case_line (count, key) /* Move point to on top of the last character changed. */ rl_point = end - direction; + return 0; } diff --git a/lib/readline/examples/rl.c b/lib/readline/examples/rl.c index 39e5b8ebb..dd8f88d49 100644 --- a/lib/readline/examples/rl.c +++ b/lib/readline/examples/rl.c @@ -5,7 +5,7 @@ * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars] */ -/* Copyright (C) 1987-2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -55,15 +55,11 @@ extern void exit(); extern int optind; extern char *optarg; -#if !defined (strchr) && !defined (__STDC__) -extern char *strrchr(); -#endif - static char *progname; static char *deftext; static int -set_deftext () +set_deftext (void) { if (deftext) { @@ -75,16 +71,14 @@ set_deftext () } static void -usage() +usage(void) { fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n", progname, progname); } int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { char *temp, *prompt; struct stat sb; diff --git a/lib/readline/examples/rlcat.c b/lib/readline/examples/rlcat.c index aabe0ca3e..419a1973a 100644 --- a/lib/readline/examples/rlcat.c +++ b/lib/readline/examples/rlcat.c @@ -4,7 +4,7 @@ * usage: rlcat */ -/* Copyright (C) 1987-2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-2009,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -64,27 +64,26 @@ extern int errno; extern int optind; extern char *optarg; -static int stdcat(); +static int fcopy(FILE *); +static int stdcat(int, char **); static char *progname; static int vflag; static void -usage() +usage(void) { fprintf (stderr, "%s: usage: %s [-vEVN] [filename]\n", progname, progname); } int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { char *temp; int opt, Vflag, Nflag; #ifdef HAVE_SETLOCALE - setlocale (LC_ALL, ""): + setlocale (LC_ALL, ""); #endif progname = strrchr(argv[0], '/'); @@ -134,8 +133,7 @@ main (argc, argv) } static int -fcopy(fp) - FILE *fp; +fcopy(FILE *fp) { int c; char *x; @@ -155,9 +153,7 @@ fcopy(fp) } int -stdcat (argc, argv) - int argc; - char **argv; +stdcat (int argc, char **argv) { int i, fd, r; char *s; diff --git a/lib/readline/examples/rltest.c b/lib/readline/examples/rltest.c index 8b7c00c8c..feab90f22 100644 --- a/lib/readline/examples/rltest.c +++ b/lib/readline/examples/rltest.c @@ -4,7 +4,7 @@ /* */ /* **************************************************************** */ -/* Copyright (C) 1987-2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-2009,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -48,10 +48,8 @@ extern void exit(); # include <readline/history.h> #endif -extern HIST_ENTRY **history_list (); - int -main () +main (int c, char **v) { char *temp, *prompt; int done; diff --git a/lib/readline/funmap.c b/lib/readline/funmap.c index 8b1cb4028..548cfb572 100644 --- a/lib/readline/funmap.c +++ b/lib/readline/funmap.c @@ -40,16 +40,12 @@ #include "xmalloc.h" -#ifdef __STDC__ typedef int QSFUNC (const void *, const void *); -#else -typedef int QSFUNC (); -#endif extern int _rl_qsort_string_compare (char **, char **); FUNMAP **funmap; -static int funmap_size; +static size_t funmap_size; static int funmap_entry; /* After initializing the function map, this is the index of the first @@ -93,6 +89,7 @@ static const FUNMAP default_funmap[] = { { "end-of-history", rl_end_of_history }, { "end-of-line", rl_end_of_line }, { "exchange-point-and-mark", rl_exchange_point_and_mark }, + { "execute-named-command", rl_execute_named_command }, { "fetch-history", rl_fetch_history }, { "forward-backward-delete-char", rl_rubout_or_delete }, { "forward-byte", rl_forward_byte }, @@ -251,7 +248,7 @@ const char ** rl_funmap_names (void) { const char **result; - int result_size, result_index; + size_t result_size, result_index; /* Make sure that the function map has been initialized. */ rl_initialize_funmap (); diff --git a/lib/readline/histexpand.c b/lib/readline/histexpand.c index 8ab68091e..8a28cbd01 100644 --- a/lib/readline/histexpand.c +++ b/lib/readline/histexpand.c @@ -1,6 +1,6 @@ /* histexpand.c -- history expansion. */ -/* Copyright (C) 1989-2021 Free Software Foundation, Inc. +/* Copyright (C) 1989-2021,2023 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. @@ -70,12 +70,12 @@ static int subst_rhs_len; specifications from word designators. Static for now */ static char *history_event_delimiter_chars = HISTORY_EVENT_DELIMITERS; -static char *get_history_word_specifier (char *, char *, int *); +static char *get_history_word_specifier (const char *, char *, int *); static int history_tokenize_word (const char *, int); static char **history_tokenize_internal (const char *, int, int *); static char *history_substring (const char *, int, int); static void freewords (char **, int); -static char *history_find_word (char *, int); +static char *history_find_word (const char *, int); static char *quote_breaks (char *); @@ -319,7 +319,7 @@ get_history_event (const char *string, int *caller_index, int delimiting_quote) to the closing single quote. FLAGS currently used to allow backslash to escape a single quote (e.g., for bash $'...'). */ static void -hist_string_extract_single_quoted (char *string, int *sindex, int flags) +hist_string_extract_single_quoted (const char *string, int *sindex, int flags) { register int i; @@ -374,7 +374,7 @@ quote_breaks (char *s) } static char * -hist_error(char *s, int start, int current, int errtype) +hist_error(const char *s, int start, int current, int errtype) { char *temp; const char *emsg; @@ -434,7 +434,7 @@ hist_error(char *s, int start, int current, int errtype) subst_rhs is allowed to be set to the empty string. */ static char * -get_subst_pattern (char *str, int *iptr, int delimiter, int is_rhs, int *lenptr) +get_subst_pattern (const char *str, int *iptr, int delimiter, int is_rhs, int *lenptr) { register int si, i, j, k; char *s; @@ -509,7 +509,7 @@ postproc_subst_rhs (void) /* a single backslash protects the `&' from lhs interpolation */ if (subst_rhs[i] == '\\' && subst_rhs[i + 1] == '&') i++; - if (j >= new_size) + if (j + 1 >= new_size) new = (char *)xrealloc (new, new_size *= 2); new[j++] = subst_rhs[i]; } @@ -527,12 +527,12 @@ postproc_subst_rhs (void) *END_INDEX_PTR, and the expanded specifier in *RET_STRING. */ /* need current line for !# */ static int -history_expand_internal (char *string, int start, int qc, int *end_index_ptr, char **ret_string, char *current_line) +history_expand_internal (const char *string, int start, int qc, int *end_index_ptr, char **ret_string, char *current_line) { int i, n, starting_index; int substitute_globally, subst_bywords, want_quotes, print_only; char *event, *temp, *result, *tstr, *t, c, *word_spec; - int result_len; + size_t result_len; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; @@ -730,7 +730,7 @@ history_expand_internal (char *string, int start, int qc, int *end_index_ptr, ch /* If `&' appears in the rhs, it's supposed to be replaced with the lhs. */ - if (member ('&', subst_rhs)) + if (subst_lhs && member ('&', subst_rhs)) postproc_subst_rhs (); } else @@ -881,7 +881,7 @@ history_expand_internal (char *string, int start, int qc, int *end_index_ptr, ch #define ADD_STRING(s) \ do \ { \ - int sl = strlen (s); \ + size_t sl = strlen (s); \ j += sl; \ if (j >= result_len) \ { \ @@ -896,7 +896,7 @@ history_expand_internal (char *string, int start, int qc, int *end_index_ptr, ch #define ADD_CHAR(c) \ do \ { \ - if (j >= result_len - 1) \ + if ((j + 1) >= result_len) \ result = (char *)xrealloc (result, result_len += 64); \ result[j++] = c; \ result[j] = '\0'; \ @@ -904,14 +904,15 @@ history_expand_internal (char *string, int start, int qc, int *end_index_ptr, ch while (0) int -history_expand (char *hstring, char **output) +history_expand (const char *hstring, char **output) { - register int j; - int i, r, l, passc, cc, modified, eindex, only_printing, dquote, squote, flag; + int j; + int i, r, passc, cc, modified, eindex, only_printing, dquote, squote, flag; + size_t l; char *string; /* The output string, and its length. */ - int result_len; + size_t result_len; char *result; #if defined (HANDLE_MULTIBYTE) @@ -949,7 +950,7 @@ history_expand (char *hstring, char **output) /* The quick substitution character is a history expansion all right. That is to say, "^this^that^" is equivalent to "!!:s^this^that^", and in fact, that is the substitution that we do. */ - if (hstring[0] == history_subst_char) + if ((history_quoting_state != '\'' || history_quotes_inhibit_expansion == 0) && hstring[0] == history_subst_char) { string = (char *)xmalloc (l + 5); @@ -965,7 +966,7 @@ history_expand (char *hstring, char **output) memset (&ps, 0, sizeof (mbstate_t)); #endif - string = hstring; + string = (char *)hstring; /* If not quick substitution, still maybe have to do expansion. */ /* `!' followed by one of the characters in history_no_expand_chars @@ -983,6 +984,8 @@ history_expand (char *hstring, char **output) squote = 0; if (string[i]) i++; + if (i >= l) + i = l; } for ( ; string[i]; i++) @@ -1053,6 +1056,11 @@ history_expand (char *hstring, char **output) flag = (i > 0 && string[i - 1] == '$'); i++; hist_string_extract_single_quoted (string, &i, flag); + if (i >= l) + { + i = l; + break; + } } else if (history_quotes_inhibit_expansion && string[i] == '\\') { @@ -1063,7 +1071,7 @@ history_expand (char *hstring, char **output) } } - + if (string[i] != history_expansion_char) { xfree (result); @@ -1113,7 +1121,7 @@ history_expand (char *hstring, char **output) c = tchar; memset (mb, 0, sizeof (mb)); - for (k = 0; k < MB_LEN_MAX; k++) + for (k = 0; k < MB_LEN_MAX && i < l; k++) { mb[k] = (char)c; memset (&ps, 0, sizeof (mbstate_t)); @@ -1303,7 +1311,7 @@ history_expand (char *hstring, char **output) CALLER_INDEX is the offset in SPEC to start looking; it is updated to point to just after the last character parsed. */ static char * -get_history_word_specifier (char *spec, char *from, int *caller_index) +get_history_word_specifier (const char *spec, char *from, int *caller_index) { register int i = *caller_index; int first, last; @@ -1418,7 +1426,7 @@ history_arg_extract (int first, int last, const char *string) { register int i, len; char *result; - int size, offset; + size_t size, offset; char **list; /* XXX - think about making history_tokenize return a struct array, @@ -1475,7 +1483,7 @@ history_arg_extract (int first, int last, const char *string) static int history_tokenize_word (const char *string, int ind) { - register int i, j; + int i, j; int delimiter, nestdelim, delimopen; i = ind; @@ -1562,6 +1570,8 @@ get_word: (delimiter != '"' || member (string[i], slashify_in_quotes))) { i++; + if (string[i] == 0) + break; continue; } @@ -1590,6 +1600,8 @@ get_word: if (nestdelim == 0 && delimiter == 0 && member (string[i], "<>$!@?+*") && string[i+1] == '(') /*)*/ { i += 2; + if (string[i] == 0) + break; /* could just return i here */ delimopen = '('; delimiter = ')'; nestdelim = 1; @@ -1627,7 +1639,8 @@ static char ** history_tokenize_internal (const char *string, int wind, int *indp) { char **result; - register int i, start, result_index, size; + int i, start, result_index; + size_t size; /* If we're searching for a string that's not part of a word (e.g., " "), make sure we set *INDP to a reasonable value. */ @@ -1636,7 +1649,7 @@ history_tokenize_internal (const char *string, int wind, int *indp) /* Get a token, and stuff it into RESULT. The tokens are split exactly where the shell would split them. */ - for (i = result_index = size = 0, result = (char **)NULL; string[i]; ) + for (i = result_index = 0, size = 0, result = (char **)NULL; string[i]; ) { /* Skip leading whitespace. */ for (; string[i] && fielddelim (string[i]); i++) @@ -1696,7 +1709,7 @@ freewords (char **words, int start) in the history line LINE. Used to save the word matched by the last history !?string? search. */ static char * -history_find_word (char *line, int ind) +history_find_word (const char *line, int ind) { char **words, *s; int i, wind; diff --git a/lib/readline/histfile.c b/lib/readline/histfile.c index 3bfec5500..e4d0b37a7 100644 --- a/lib/readline/histfile.c +++ b/lib/readline/histfile.c @@ -1,6 +1,6 @@ /* histfile.c - functions to manipulate the history file. */ -/* Copyright (C) 1989-2019 Free Software Foundation, Inc. +/* Copyright (C) 1989-2019,2023 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. @@ -153,7 +153,7 @@ history_filename (const char *filename) { char *return_val; const char *home; - int home_len; + size_t home_len; return_val = filename ? savestring (filename) : (char *)NULL; @@ -168,9 +168,8 @@ history_filename (const char *filename) if (home == 0) return (NULL); - else - home_len = strlen (home); + home_len = strlen (home); return_val = (char *)xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */ strcpy (return_val, home); return_val[home_len] = '/'; @@ -190,7 +189,6 @@ history_backupfile (const char *filename) char *ret, linkbuf[PATH_MAX+1]; size_t len; ssize_t n; - struct stat fs; fn = filename; #if defined (HAVE_READLINK) @@ -218,7 +216,6 @@ history_tempfile (const char *filename) char *ret, linkbuf[PATH_MAX+1]; size_t len; ssize_t n; - struct stat fs; int pid; fn = filename; @@ -284,7 +281,10 @@ read_history_range (const char *filename, int from, int to) buffer = last_ts = (char *)NULL; input = history_filename (filename); - file = input ? open (input, O_RDONLY|O_BINARY, 0666) : -1; + if (input == 0) + return 0; + errno = 0; + file = open (input, O_RDONLY|O_BINARY, 0666); if ((file < 0) || (fstat (file, &finfo) == -1)) goto error_and_exit; @@ -526,10 +526,14 @@ history_truncate_file (const char *fname, int lines) buffer = (char *)NULL; filename = history_filename (fname); + if (filename == 0) + return 0; tempname = 0; - file = filename ? open (filename, O_RDONLY|O_BINARY, 0666) : -1; + file = open (filename, O_RDONLY|O_BINARY, 0666); rv = exists = 0; + orig_lines = lines; + /* Don't try to truncate non-regular files. */ if (file == -1 || fstat (file, &finfo) == -1) { @@ -578,6 +582,15 @@ history_truncate_file (const char *fname, int lines) goto truncate_exit; } + /* Don't bother with any of this if we're truncating to zero length. */ + if (lines == 0) + { + close (file); + buffer[chars_read = 0] = '\0'; + bp = buffer; + goto truncate_write; + } + chars_read = read (file, buffer, file_size); close (file); @@ -586,31 +599,38 @@ history_truncate_file (const char *fname, int lines) rv = (chars_read < 0) ? errno : 0; goto truncate_exit; } + buffer[chars_read] = '\0'; /* for the initial check of bp1[1] */ - orig_lines = lines; /* Count backwards from the end of buffer until we have passed LINES lines. bp1 is set funny initially. But since bp[1] can't be a comment character (since it's off the end) and *bp can't be - both a newline and the history comment character, it should be OK. */ - for (bp1 = bp = buffer + chars_read - 1; lines && bp > buffer; bp--) + both a newline and the history comment character, it should be OK. + If we are writing history timestamps, we need to add one to LINES + because we decrement it one extra time the first time through the loop + and we need the final timestamp line. */ + lines += history_write_timestamps; + for (bp1 = bp = buffer + chars_read - 1; lines > 0 && bp > buffer; bp--) { if (*bp == '\n' && HIST_TIMESTAMP_START(bp1) == 0) lines--; bp1 = bp; } - /* If this is the first line, then the file contains exactly the + /* This is the right line, so move to its start. If we're writing history + timestamps, we want to go back until *bp == '\n' and bp1 starts a + history timestamp. If we're not, just move back to *bp == '\n'. + If this is the first line, then the file contains exactly the number of lines we want to truncate to, so we don't need to do - anything. It's the first line if we don't find a newline between - the current value of i and 0. Otherwise, write from the start of - this line until the end of the buffer. */ + anything, and we'll end up with bp == buffer. + Otherwise, write from the start of this line until the end of the + buffer. */ for ( ; bp > buffer; bp--) { - if (*bp == '\n' && HIST_TIMESTAMP_START(bp1) == 0) - { + if (*bp == '\n' && (history_write_timestamps == 0 || HIST_TIMESTAMP_START(bp1))) + { bp++; break; - } + } bp1 = bp; } @@ -624,17 +644,24 @@ history_truncate_file (const char *fname, int lines) goto truncate_exit; } +truncate_write: tempname = history_tempfile (filename); if ((file = open (tempname, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0600)) != -1) { if (write (file, bp, chars_read - (bp - buffer)) < 0) - rv = errno; - - if (fstat (file, &nfinfo) < 0 && rv == 0) - rv = errno; - - if (close (file) < 0 && rv == 0) + { + rv = errno; + close (file); + } + + if (rv == 0 && fstat (file, &nfinfo) < 0) + { + rv = errno; + close (file); + } + + if (rv == 0 && close (file) < 0) rv = errno; } else @@ -671,6 +698,38 @@ history_truncate_file (const char *fname, int lines) return rv; } +/* Use stdio to write the history file after mmap or malloc fails, on the + assumption that the stdio library can allocate the smaller buffers it uses. */ +static int +history_write_slow (int fd, HIST_ENTRY **the_history, int nelements, int overwrite) +{ + FILE *fp; + int i, j, e; + + fp = fdopen (fd, overwrite ? "w" : "a"); + if (fp == 0) + return -1; + + for (j = 0, i = history_length - nelements; i < history_length; i++) + { + if (history_write_timestamps && the_history[i]->timestamp && the_history[i]->timestamp[0]) + fprintf (fp, "%s\n", the_history[i]->timestamp); + if (fprintf (fp, "%s\n", the_history[i]->line) < 0) + goto slow_write_error; + } + if (fflush (fp) < 0) + { +slow_write_error: + e = errno; + fclose (fp); + errno = e; + return -1; + } + if (fclose (fp) < 0) + return -1; + return 0; +} + /* Workhorse function for writing history. Writes the last NELEMENT entries from the history list to FILENAME. OVERWRITE is non-zero if you wish to replace FILENAME with the entries. */ @@ -680,7 +739,7 @@ history_do_write (const char *filename, int nelements, int overwrite) register int i; char *output, *tempname, *histname; int file, mode, rv, exists; - struct stat finfo, nfinfo; + struct stat finfo; #ifdef HISTORY_USE_MMAP size_t cursize; @@ -718,8 +777,8 @@ history_do_write (const char *filename, int nelements, int overwrite) Suggested by Peter Ho (peter@robosts.oxford.ac.uk). */ { HIST_ENTRY **the_history; /* local */ - register int j; - int buffer_size; + size_t j; + size_t buffer_size; char *buffer; the_history = history_list (); @@ -739,6 +798,8 @@ history_do_write (const char *filename, int nelements, int overwrite) if ((void *)buffer == MAP_FAILED) { mmap_error: + if ((rv = history_write_slow (file, the_history, nelements, overwrite)) == 0) + goto write_success; rv = errno; close (file); if (tempname) @@ -751,6 +812,8 @@ mmap_error: buffer = (char *)malloc (buffer_size); if (buffer == 0) { + if ((rv = history_write_slow (file, the_history, nelements, overwrite)) == 0) + goto write_success; rv = errno; close (file); if (tempname) @@ -789,6 +852,7 @@ mmap_error: if (close (file) < 0 && rv == 0) rv = errno; +write_success: if (rv == 0 && histname && tempname) rv = histfile_restore (tempname, histname); diff --git a/lib/readline/histlib.h b/lib/readline/histlib.h index 29fc4d2e5..da8e6533d 100644 --- a/lib/readline/histlib.h +++ b/lib/readline/histlib.h @@ -1,6 +1,6 @@ /* histlib.h -- internal definitions for the history library. */ -/* Copyright (C) 1989-2009,2021-2022 Free Software Foundation, Inc. +/* Copyright (C) 1989-2009,2021-2023 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. @@ -34,6 +34,11 @@ : ((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0)) #endif +#if !defined (HAVE_STRCASECMP) +#define strcasecmp(a,b) strcmp ((a), (b)) +#define strncasecmp(a, b, n) strncmp ((a), (b), (n)) +#endif + #ifndef savestring #define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x)) #endif @@ -51,9 +56,6 @@ #endif #ifndef member -# if !defined (strchr) && !defined (__STDC__) -extern char *strchr (); -# endif /* !strchr && !__STDC__ */ #define member(c, s) ((c) ? ((char *)strchr ((s), (c)) != (char *)NULL) : 0) #endif @@ -72,6 +74,7 @@ extern char *strchr (); #define NON_ANCHORED_SEARCH 0 #define ANCHORED_SEARCH 0x01 #define PATTERN_SEARCH 0x02 +#define CASEFOLD_SEARCH 0x04 /* Possible definitions for what style of writing the history file we want. */ #define HISTORY_APPEND 0 @@ -81,9 +84,11 @@ extern char *strchr (); /* histsearch.c */ extern int _hs_history_patsearch (const char *, int, int); +extern int _hs_history_search (const char *, int, int); /* history.c */ extern void _hs_replace_history_data (int, histdata_t *, histdata_t *); +extern int _hs_search_history_data (histdata_t *); extern int _hs_at_end_of_history (void); /* histfile.c */ diff --git a/lib/readline/history.c b/lib/readline/history.c index 81d4c1687..aade5e33a 100644 --- a/lib/readline/history.c +++ b/lib/readline/history.c @@ -1,6 +1,6 @@ /* history.c -- standalone history library */ -/* Copyright (C) 1989-2021 Free Software Foundation, Inc. +/* Copyright (C) 1989-2024 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. @@ -42,6 +42,7 @@ # endif # include <unistd.h> #endif +#include "posixtime.h" #include <errno.h> @@ -60,24 +61,39 @@ extern int errno; #define MAX_HISTORY_INITIAL_SIZE 8192 /* The number of slots to increase the_history by. */ -#define DEFAULT_HISTORY_GROW_SIZE 50 +#define DEFAULT_HISTORY_GROW_SIZE 256 static char *hist_inittime (void); +static int history_list_grow_size (void); +static void history_list_resize (int); /* XXX - size_t? */ +static void advance_history (void); + /* **************************************************************** */ /* */ /* History Functions */ /* */ /* **************************************************************** */ -/* An array of HIST_ENTRY. This is where we store the history. */ +/* An array of HIST_ENTRY. This is where we store the history. the_history is + a roving pointer somewhere into this, so the user-visible history list is + a window into real_history starting at the_history and extending + history_length entries. */ +static HIST_ENTRY **real_history = (HIST_ENTRY **)NULL; + +/* The current number of slots allocated to the input_history. */ +static int real_history_size = 0; + +/* A pointer to somewhere in real_history, where the user-visible history + starts. */ static HIST_ENTRY **the_history = (HIST_ENTRY **)NULL; /* Non-zero means that we have enforced a limit on the amount of history that we save. */ static int history_stifled; -/* The current number of slots allocated to the input_history. */ +/* The number of history entries available for user use, starting at the_history. + real_history_size - history_size == the_history - real_history */ static int history_size; /* If HISTORY_STIFLED is non-zero, then this is the maximum number of @@ -89,12 +105,59 @@ int max_input_history; /* backwards compatibility */ life easier for outside callers. */ int history_offset; -/* The number of strings currently stored in the history list. */ +/* The number of strings currently stored in the history list. This is + always <= real_history_length */ int history_length; /* The logical `base' of the history array. It defaults to 1. */ int history_base = 1; +/* Compute the number of bits required to store a given nonnegative integer. + + NOTE: _bit_length(0) == 0 */ +static inline unsigned +_bit_length(unsigned n) +{ + /* This implementation is for simplicity, not for performance, but it is + fast enough for our purposes here. */ + unsigned count = 0; + while (n) + { + n >>= 1; + count++; + } + return count; +} + +/* Compute a grow size that adjusts to the size of the history. + + We aim to grow by roughly sqrt(history_size) in order to amortize the cost of + realloc() and memmove(). This reduces the total cost of the memmoves from + O(N^2) to O(N*sqrt(N)). */ +static int +history_list_grow_size (void) +{ + int width, r; + /* Handle small positive values and guard against history_length accidentally + being negative. */ + const int MIN_BITS = 10; + if (history_length < (1 << MIN_BITS)) + return DEFAULT_HISTORY_GROW_SIZE; + + /* For other values, we just want something easy to compute that grows roughly + as sqrt(N), where N=history_length. We use approximately 2^((k+1)/2), + where k is the bit length of N. This bounds the value between sqrt(2N) and + 2*sqrt(N). */ + width = MIN_BITS + _bit_length(history_length >> MIN_BITS); + + /* If width is odd then this is 2^((width+1)/2). An even width gives a value + of 3*2^((width-2)/2) ~ 1.06*2^((width+1)/2). */ + r = (1 << (width / 2)) + (1 << ((width - 1) / 2)); + + /* Make sure we always expand the list by at least DEFAULT_HISTORY_GROW_SIZE */ + return ((r < DEFAULT_HISTORY_GROW_SIZE) ? DEFAULT_HISTORY_GROW_SIZE : r); +} + /* Return the current HISTORY_STATE of the history. */ HISTORY_STATE * history_get_history_state (void) @@ -261,7 +324,7 @@ hist_inittime (void) time_t t; char ts[64], *ret; - t = (time_t) time ((time_t *)0); + t = getnow (); #if defined (HAVE_VSNPRINTF) /* assume snprintf if vsnprintf exists */ snprintf (ts, sizeof (ts) - 1, "X%lu", (unsigned long) t); #else @@ -273,6 +336,48 @@ hist_inittime (void) return ret; } +/* Ensure space for new history entries by resetting the start pointer + (the_history) and resizing real_history if necessary. */ +static void +history_list_resize (int new_size) +{ + /* Do nothing there is already enough user space. history_length is always <= + real_history_size */ + if (new_size < history_length) + return; + + /* If we need to, reset the_history to the start of real_history and + start over. */ + if (the_history != real_history) + memmove (real_history, the_history, history_length * sizeof (HIST_ENTRY *)); + + /* Don't bother if real_history_size is already big enough, since at this + point the_history == real_history and we will set history_size to + real_history_size. We don't shrink the history list. */ + if (new_size > real_history_size) + { + real_history = (HIST_ENTRY **) xrealloc (real_history, new_size * sizeof (HIST_ENTRY *)); + real_history_size = new_size; + } + the_history = real_history; + history_size = real_history_size; + + if (history_size > history_length) + memset (real_history + history_length, 0, (history_size - history_length) * sizeof (HIST_ENTRY *)); +} + +static void +advance_history (void) +{ + /* Advance 'the_history' pointer to simulate dropping the first entry. */ + the_history++; + history_size--; + + /* If full, move all the entries (and trailing NULL) to the beginning. */ + if (history_length == history_size) + history_list_resize (history_length + history_list_grow_size ()); +} + /* Place STRING at the end of the history list. The data field is set to NULL. */ void @@ -283,8 +388,6 @@ add_history (const char *string) if (history_stifled && (history_length == history_max_entries)) { - register int i; - /* If the history is stifled, and history_length is zero, and it equals history_max_entries, we don't save items. */ if (history_length == 0) @@ -294,9 +397,8 @@ add_history (const char *string) if (the_history[0]) (void) free_history_entry (the_history[0]); - /* Copy the rest of the entries, moving down one slot. Copy includes - trailing NULL. */ - memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *)); + /* Advance the pointer into real_history, resizing if necessary. */ + advance_history (); new_length = history_length; history_base++; @@ -305,23 +407,20 @@ add_history (const char *string) { if (history_size == 0) { + int initial_size; if (history_stifled && history_max_entries > 0) - history_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE) + initial_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE) ? MAX_HISTORY_INITIAL_SIZE : history_max_entries + 2; else - history_size = DEFAULT_HISTORY_INITIAL_SIZE; - the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); + initial_size = DEFAULT_HISTORY_INITIAL_SIZE; + history_list_resize (initial_size); new_length = 1; } else { if (history_length == (history_size - 1)) - { - history_size += DEFAULT_HISTORY_GROW_SIZE; - the_history = (HIST_ENTRY **) - xrealloc (the_history, history_size * sizeof (HIST_ENTRY *)); - } + history_list_resize (real_history_size + history_list_grow_size ()); new_length = history_length + 1; } } @@ -460,7 +559,7 @@ _hs_replace_history_data (int which, histdata_t *old, histdata_t *new) } last = -1; - for (i = 0; i < history_length; i++) + for (i = history_length - 1; i >= 0; i--) { entry = the_history[i]; if (entry == 0) @@ -477,7 +576,27 @@ _hs_replace_history_data (int which, histdata_t *old, histdata_t *new) entry = the_history[last]; entry->data = new; /* XXX - we don't check entry->old */ } -} +} + +int +_hs_search_history_data (histdata_t *needle) +{ + register int i; + HIST_ENTRY *entry; + + if (history_length == 0 || the_history == 0) + return -1; + + for (i = history_length - 1; i >= 0; i--) + { + entry = the_history[i]; + if (entry == 0) + continue; + if (entry->data == needle) + return i; + } + return -1; +} /* Remove history element WHICH from the history. The removed element is returned to you so you can free the line, data, diff --git a/lib/readline/history.h b/lib/readline/history.h index 5208f9a46..0f275a8d7 100644 --- a/lib/readline/history.h +++ b/lib/readline/history.h @@ -1,6 +1,6 @@ /* history.h -- the names of functions that you can call in history. */ -/* Copyright (C) 1989-2022 Free Software Foundation, Inc. +/* Copyright (C) 1989-2023 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. @@ -36,11 +36,7 @@ extern "C" { # include <readline/rltypedefs.h> #endif -#ifdef __STDC__ typedef void *histdata_t; -#else -typedef char *histdata_t; -#endif /* Let's not step on anyone else's define for now, since we don't use this yet. */ #ifndef HS_HISTORY_VERSION @@ -54,6 +50,10 @@ typedef struct _hist_entry { histdata_t data; } HIST_ENTRY; +#ifndef HIST_ENTRY_DEFINED +# define HIST_ENTRY_DEFINED +#endif + /* Size of the history-library-managed space in history entry HS. */ #define HISTENT_BYTES(hs) (strlen ((hs)->line) + strlen ((hs)->timestamp)) @@ -232,7 +232,7 @@ extern int history_truncate_file (const char *, int); If an error occurred in expansion, then OUTPUT contains a descriptive error message. */ -extern int history_expand (char *, char **); +extern int history_expand (const char *, char **); /* Extract a string segment consisting of the FIRST through LAST arguments present in STRING. Arguments are broken up as in diff --git a/lib/readline/histsearch.c b/lib/readline/histsearch.c index b62c06b7b..b43ead1ff 100644 --- a/lib/readline/histsearch.c +++ b/lib/readline/histsearch.c @@ -1,6 +1,6 @@ /* histsearch.c -- searching the history list. */ -/* Copyright (C) 1989, 1992-2009,2017,2021 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1992-2009,2017,2021,2023 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. @@ -47,6 +47,8 @@ #include "histlib.h" #include "xmalloc.h" +#include "rlmbutil.h" + /* The list of alternate characters that can delimit a history search string. */ char *history_search_delimiter_chars = (char *)NULL; @@ -57,7 +59,10 @@ static int history_search_internal (const char *, int, int); If DIRECTION < 0, then the search is through previous entries, else through subsequent. If ANCHORED is non-zero, the string must appear at the beginning of a history line, otherwise, the string - may appear anywhere in the line. If the string is found, then + may appear anywhere in the line. If PATSEARCH is non-zero, and fnmatch(3) + is available, fnmatch is used to match the string instead of a simple + string comparison. If IGNORECASE is set, the string comparison is + performed case-insensitively. If the string is found, then current_history () is the history entry, and the value of this function is the offset in the line of that history entry that the string was found in. Otherwise, nothing is changed, and a -1 is @@ -66,10 +71,12 @@ static int history_search_internal (const char *, int, int); static int history_search_internal (const char *string, int direction, int flags) { - register int i, reverse; - register char *line; - register int line_index; - int string_len, anchored, patsearch; + int i, reverse; + char *line; + size_t string_len, line_len; + int line_index; /* can't be unsigned */ + int anchored, patsearch, igncase; + int found, mb_cur_max; HIST_ENTRY **the_history; /* local */ i = history_offset; @@ -80,6 +87,7 @@ history_search_internal (const char *string, int direction, int flags) #else patsearch = 0; #endif + igncase = (flags & CASEFOLD_SEARCH); /* Take care of trivial cases first. */ if (string == 0 || *string == '\0') @@ -91,6 +99,8 @@ history_search_internal (const char *string, int direction, int flags) if (reverse && (i >= history_length)) i = history_length - 1; + mb_cur_max = MB_CUR_MAX; + #define NEXT_LINE() do { if (reverse) i--; else i++; } while (0) the_history = history_list (); @@ -104,7 +114,7 @@ history_search_internal (const char *string, int direction, int flags) return (-1); line = the_history[i]->line; - line_index = strlen (line); + line_len = line_index = strlen (line); /* If STRING is longer than line, no match. */ if (patsearch == 0 && (string_len > line_index)) @@ -116,18 +126,27 @@ history_search_internal (const char *string, int direction, int flags) /* Handle anchored searches first. */ if (anchored == ANCHORED_SEARCH) { + found = 0; #if defined (HAVE_FNMATCH) if (patsearch) + found = fnmatch (string, line, 0) == 0; + else +#endif + if (igncase) { - if (fnmatch (string, line, 0) == 0) - { - history_offset = i; - return (0); - } +#if defined (HANDLE_MULTIBYTE) + if (mb_cur_max > 1) /* no rl_byte_oriented equivalent */ + found = _rl_mb_strcaseeqn (string, string_len, + line, line_len, + string_len, 0); + else +#endif + found = strncasecmp (string, line, string_len) == 0; } else -#endif - if (STREQN (string, line, string_len)) + found = STREQN (string, line, string_len); + + if (found) { history_offset = i; return (0); @@ -140,55 +159,80 @@ history_search_internal (const char *string, int direction, int flags) /* Do substring search. */ if (reverse) { - line_index -= (patsearch == 0) ? string_len : 1; + size_t ll; + + ll = (patsearch == 0) ? string_len : 1; + line_index -= ll; + found = 0; while (line_index >= 0) { #if defined (HAVE_FNMATCH) if (patsearch) + found = fnmatch (string, line + line_index, 0) == 0; + else +#endif + if (igncase) { - if (fnmatch (string, line + line_index, 0) == 0) - { - history_offset = i; - return (line_index); - } +#if defined (HANDLE_MULTIBYTE) + if (mb_cur_max > 1) /* no rl_byte_oriented equivalent */ + found = _rl_mb_strcaseeqn (string, string_len, + line + line_index, ll, + string_len, 0); + else +#endif + found = strncasecmp (string, line + line_index, string_len) == 0; } else -#endif - if (STREQN (string, line + line_index, string_len)) + found = STREQN (string, line + line_index, string_len); + + if (found) { history_offset = i; return (line_index); } line_index--; + ll++; } } else { register int limit; + size_t ll; + ll = line_len; limit = line_index - string_len + 1; line_index = 0; + found = 0; while (line_index < limit) { #if defined (HAVE_FNMATCH) if (patsearch) + found = fnmatch (string, line + line_index, 0) == 0; + else +#endif + if (igncase) { - if (fnmatch (string, line + line_index, 0) == 0) - { - history_offset = i; - return (line_index); - } +#if defined (HANDLE_MULTIBYTE) + if (mb_cur_max > 1) /* no rl_byte_oriented equivalent */ + found = _rl_mb_strcaseeqn (string, string_len, + line + line_index, ll, + string_len, 0); + else +#endif + found = strncasecmp (string, line + line_index, string_len) == 0; } else -#endif - if (STREQN (string, line + line_index, string_len)) + found = STREQN (string, line + line_index, string_len); + + if (found) { history_offset = i; return (line_index); } line_index++; + ll--; } } NEXT_LINE (); @@ -266,6 +310,13 @@ history_search_prefix (const char *string, int direction) return (history_search_internal (string, direction, ANCHORED_SEARCH)); } +/* At some point, make this public for users of the history library. */ +int +_hs_history_search (const char *string, int direction, int flags) +{ + return (history_search_internal (string, direction, flags)); +} + /* Search for STRING in the history list. DIR is < 0 for searching backwards. POS is an absolute index into the history list at which point to begin searching. */ diff --git a/lib/readline/input.c b/lib/readline/input.c index 6f038d450..980745306 100644 --- a/lib/readline/input.c +++ b/lib/readline/input.c @@ -1,6 +1,6 @@ /* input.c -- character input functions for readline. */ -/* Copyright (C) 1994-2021 Free Software Foundation, Inc. +/* Copyright (C) 1994-2022 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -138,20 +138,16 @@ win32_isatty (int fd) /* Readline timeouts */ -/* I don't know how to set a timeout for _getch() in MinGW32, so we use - SIGALRM. */ -#if (defined (HAVE_PSELECT) || defined (HAVE_SELECT)) && !defined (__MINGW32__) -# define RL_TIMEOUT_USE_SELECT -#else -# define RL_TIMEOUT_USE_SIGALRM -#endif +/* We now define RL_TIMEOUT_USE_SELECT or RL_TIMEOUT_USE_SIGALRM in rlprivate.h */ int rl_set_timeout (unsigned int, unsigned int); int rl_timeout_remaining (unsigned int *, unsigned int *); int _rl_timeout_init (void); -int _rl_timeout_sigalrm_handler (void); +int _rl_timeout_handle_sigalrm (void); +#if defined (RL_TIMEOUT_USE_SELECT) int _rl_timeout_select (int, fd_set *, fd_set *, fd_set *, const struct timeval *, const sigset_t *); +#endif static void _rl_timeout_handle (void); #if defined (RL_TIMEOUT_USE_SIGALRM) @@ -248,38 +244,53 @@ rl_gather_tyi (void) register int tem, result; int chars_avail, k; char input; -#if defined(HAVE_SELECT) +#if defined (HAVE_PSELECT) || defined (HAVE_SELECT) fd_set readfds, exceptfds; struct timeval timeout; #endif + result = -1; chars_avail = 0; input = 0; tty = fileno (rl_instream); + /* Move this up here to give it first shot, but it can't set chars_avail */ + /* XXX - need rl_chars_available_hook? */ + if (rl_input_available_hook) + { + result = (*rl_input_available_hook) (); + if (result == 0) + result = -1; + } + #if defined (HAVE_PSELECT) || defined (HAVE_SELECT) - FD_ZERO (&readfds); - FD_ZERO (&exceptfds); - FD_SET (tty, &readfds); - FD_SET (tty, &exceptfds); - USEC_TO_TIMEVAL (_keyboard_input_timeout, timeout); + if (result == -1) + { + FD_ZERO (&readfds); + FD_ZERO (&exceptfds); + FD_SET (tty, &readfds); + FD_SET (tty, &exceptfds); + USEC_TO_TIMEVAL (_keyboard_input_timeout, timeout); #if defined (RL_TIMEOUT_USE_SELECT) - result = _rl_timeout_select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout, NULL); + result = _rl_timeout_select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout, NULL); #else - result = select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout); + result = select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout); #endif - if (result <= 0) - return 0; /* Nothing to read. */ + if (result <= 0) + return 0; /* Nothing to read. */ + } #endif - result = -1; - errno = 0; #if defined (FIONREAD) - result = ioctl (tty, FIONREAD, &chars_avail); - if (result == -1 && errno == EIO) - return -1; if (result == -1) - chars_avail = 0; + { + errno = 0; + result = ioctl (tty, FIONREAD, &chars_avail); + if (result == -1 && errno == EIO) + return -1; + if (result == -1) + chars_avail = 0; + } #endif #if defined (O_NDELAY) @@ -306,8 +317,11 @@ rl_gather_tyi (void) #if defined (__MINGW32__) /* Use getch/_kbhit to check for available console input, in the same way that we read it normally. */ - chars_avail = isatty (tty) ? _kbhit () : 0; - result = 0; + if (result == -1) + { + chars_avail = isatty (tty) ? _kbhit () : 0; + result = 0; + } #endif /* If there's nothing available, don't waste time trying to read @@ -649,7 +663,7 @@ rl_timeout_remaining (unsigned int *secs, unsigned int *usecs) /* This should only be called if RL_TIMEOUT_USE_SELECT is defined. */ -#if defined (HAVE_PSELECT) || defined (HAVE_SELECT) +#if defined (RL_TIMEOUT_USE_SELECT) int _rl_timeout_select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout, const sigset_t *sigmask) { @@ -802,10 +816,10 @@ rl_read_key (void) int rl_getc (FILE *stream) { - int result; + int result, ostate, osig; unsigned char c; int fd; -#if defined (HAVE_PSELECT) +#if defined (HAVE_PSELECT) || defined (HAVE_SELECT) sigset_t empty_set; fd_set readfds; #endif @@ -813,12 +827,26 @@ rl_getc (FILE *stream) fd = fileno (stream); while (1) { + osig = _rl_caught_signal; + ostate = rl_readline_state; + RL_CHECK_SIGNALS (); +#if defined (READLINE_CALLBACKS) + /* Do signal handling post-processing here, but just in callback mode + for right now because the signal cleanup can change some of the + callback state, and we need to either let the application have a + chance to react or abort some current operation that gets cleaned + up by rl_callback_sigcleanup(). If not, we'll just run through the + loop again. */ + if (osig != 0 && (ostate & RL_STATE_CALLBACK)) + goto postproc_signal; +#endif + /* We know at this point that _rl_caught_signal == 0 */ #if defined (__MINGW32__) - if (isatty (fd) + if (isatty (fd)) return (_getch ()); /* "There is no error return." */ #endif result = 0; @@ -878,6 +906,9 @@ rl_getc (FILE *stream) /* fprintf(stderr, "rl_getc: result = %d errno = %d\n", result, errno); */ handle_error: + osig = _rl_caught_signal; + ostate = rl_readline_state; + /* If the error that we received was EINTR, then try again, this is simply an interrupted system call to read (). We allow the read to be interrupted if we caught SIGHUP, SIGTERM, or any @@ -918,8 +949,17 @@ handle_error: RL_CHECK_SIGNALS (); #endif /* SIGALRM */ +postproc_signal: + /* POSIX says read(2)/pselect(2)/select(2) don't return EINTR for any + reason other than being interrupted by a signal, so we can safely + call the application's signal event hook. */ if (rl_signal_event_hook) (*rl_signal_event_hook) (); +#if defined (READLINE_CALLBACKS) + else if (osig == SIGINT && (ostate & RL_STATE_CALLBACK) && (ostate & (RL_STATE_ISEARCH|RL_STATE_NSEARCH|RL_STATE_NUMERICARG))) + /* just these cases for now */ + _rl_abort_internal (); +#endif } } diff --git a/lib/readline/isearch.c b/lib/readline/isearch.c index c2d4d236e..9ddf9ce33 100644 --- a/lib/readline/isearch.c +++ b/lib/readline/isearch.c @@ -6,7 +6,7 @@ /* */ /* **************************************************************** */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2021,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -59,6 +59,8 @@ char *_rl_isearch_terminators = (char *)NULL; _rl_search_cxt *_rl_iscxt = 0; +int _rl_search_case_fold = 0; + static int rl_search_history (int, int); static _rl_search_cxt *_rl_isearch_init (int); @@ -150,7 +152,7 @@ static void rl_display_search (char *search_string, int flags, int where) { char *message; - int msglen, searchlen; + size_t msglen, searchlen; searchlen = (search_string && *search_string) ? strlen (search_string) : 0; @@ -340,7 +342,7 @@ _rl_search_getchar (_rl_search_cxt *cxt) int _rl_isearch_dispatch (_rl_search_cxt *cxt, int c) { - int n, wstart, wlen, limit, cval, incr; + int n, wstart, wlen, limit, cval; char *paste; size_t pastelen; int j; @@ -428,7 +430,11 @@ add_character: { f = cxt->keymap[c].function; if (f == rl_do_lowercase_version) - f = cxt->keymap[_rl_to_lower (c)].function; + { + f = cxt->keymap[_rl_to_lower (c)].function; + if (f == rl_do_lowercase_version) + f = rl_insert; + } } if (f == rl_reverse_search_history) @@ -445,6 +451,8 @@ add_character: cxt->lastc = -6; else if (f == rl_bracketed_paste_begin) cxt->lastc = -7; + else if (c == CTRL('V') || f == rl_quoted_insert) + cxt->lastc = -8; } /* If we changed the keymap earlier while translating a key sequence into @@ -463,6 +471,11 @@ add_character: { rl_stuff_char (cxt->lastc); rl_execute_next (cxt->prevc); + + /* We're going to read the last two characters again. */ + _rl_del_executing_keyseq (); + _rl_del_executing_keyseq (); + /* XXX - do we insert everything in cxt->pmb? */ return (0); } @@ -477,6 +490,8 @@ add_character: /* Make lastc be the next character read */ /* XXX - do we insert everything in cxt->mb? */ rl_execute_next (cxt->lastc); + _rl_del_executing_keyseq (); + /* Dispatch on the previous character (insert into search string) */ cxt->lastc = cxt->prevc; #if defined (HANDLE_MULTIBYTE) @@ -524,7 +539,10 @@ add_character: settable keyboard timeout value, this could alternatively use _rl_input_queued(100000) */ if (cxt->lastc == ESC && (_rl_pushed_input_available () || _rl_input_available ())) - rl_execute_next (ESC); + { + rl_execute_next (ESC); + _rl_del_executing_keyseq (); + } return (0); } @@ -536,6 +554,7 @@ add_character: /* This sets rl_pending_input to LASTC; it will be picked up the next time rl_read_key is called. */ rl_execute_next (cxt->lastc); + _rl_del_executing_keyseq (); return (0); } } @@ -546,6 +565,7 @@ add_character: /* This sets rl_pending_input to LASTC; it will be picked up the next time rl_read_key is called. */ rl_execute_next (cxt->lastc); + _rl_del_executing_keyseq (); return (0); } @@ -698,6 +718,27 @@ opcode_dispatch: xfree (paste); break; + case -8: /* quoted insert */ +#if defined (HANDLE_SIGNALS) + if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) + _rl_disable_tty_signals (); +#endif + c = _rl_search_getchar (cxt); +#if defined (HANDLE_SIGNALS) + if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) + _rl_restore_tty_signals (); +#endif + + if (c < 0) + { + cxt->sflags |= SF_FAILED; + cxt->history_pos = cxt->last_found_line; + return -1; + } + + _rl_add_executing_keyseq (c); + + /*FALLTHROUGH*/ /* Add character to search string and continue search. */ default: #if defined (HANDLE_MULTIBYTE) @@ -713,13 +754,13 @@ opcode_dispatch: #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { - int j; + int w; if (cxt->mb[0] == 0 || cxt->mb[1] == 0) cxt->search_string[cxt->search_string_index++] = cxt->mb[0]; else - for (j = 0; j < wlen; ) - cxt->search_string[cxt->search_string_index++] = cxt->mb[j++]; + for (w = 0; w < wlen; ) + cxt->search_string[cxt->search_string_index++] = cxt->mb[w++]; } else #endif @@ -741,7 +782,27 @@ opcode_dispatch: /* Search the current line. */ while ((cxt->sflags & SF_REVERSE) ? (cxt->sline_index >= 0) : (cxt->sline_index < limit)) { - if (STREQN (cxt->search_string, cxt->sline + cxt->sline_index, cxt->search_string_index)) + int found; + + if (_rl_search_case_fold) + { +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + found = _rl_mb_strcaseeqn (cxt->search_string, + cxt->search_string_index, + cxt->sline + cxt->sline_index, + limit, + cxt->search_string_index, 0); + else + found = _rl_strnicmp (cxt->search_string, + cxt->sline + cxt->sline_index, + cxt->search_string_index) == 0; +#endif + } + else + found = STREQN (cxt->search_string, cxt->sline + cxt->sline_index, cxt->search_string_index); + + if (found) { cxt->sflags |= SF_FOUND; break; @@ -749,7 +810,7 @@ opcode_dispatch: else cxt->sline_index += cxt->direction; - if (cxt->sline_index < 0) + if (cxt->sline_index < 0 || cxt->sline_index > cxt->sline_len) { cxt->sline_index = 0; break; @@ -782,8 +843,8 @@ opcode_dispatch: if (cxt->sflags & SF_FAILED) { - /* XXX - reset sline_index if < 0 */ - if (cxt->sline_index < 0) + /* XXX - reset sline_index if < 0 or longer than the history line */ + if (cxt->sline_index < 0 || cxt->sline_index > cxt->sline_len) cxt->sline_index = 0; break; } @@ -885,6 +946,13 @@ _rl_isearch_callback (_rl_search_cxt *cxt) int c, r; c = _rl_search_getchar (cxt); + + if (c < 0) /* EOF */ + return 1; + + if (RL_ISSTATE (RL_STATE_ISEARCH) == 0) /* signal could turn it off */ + return 1; + /* We might want to handle EOF here */ r = _rl_isearch_dispatch (cxt, cxt->lastc); diff --git a/lib/readline/kill.c b/lib/readline/kill.c index 4cf933b20..972c7d9e6 100644 --- a/lib/readline/kill.c +++ b/lib/readline/kill.c @@ -1,6 +1,6 @@ /* kill.c -- kill ring management. */ -/* Copyright (C) 1994-2021 Free Software Foundation, Inc. +/* Copyright (C) 1994-2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -348,15 +348,15 @@ rl_unix_filename_rubout (int count, int key) if (count <= 0) count = 1; - while (count--) + while (rl_point > 0 && count--) { c = rl_line_buffer[rl_point - 1]; /* First move backwards through whitespace */ while (rl_point && whitespace (c)) { - rl_point--; - c = rl_line_buffer[rl_point - 1]; + if (--rl_point) + c = rl_line_buffer[rl_point - 1]; } /* Consume one or more slashes. */ @@ -377,14 +377,14 @@ rl_unix_filename_rubout (int count, int key) while (rl_point && (whitespace (c) || c == '/')) { - rl_point--; - c = rl_line_buffer[rl_point - 1]; + if (--rl_point) + c = rl_line_buffer[rl_point - 1]; } while (rl_point && (whitespace (c) == 0) && c != '/') { - rl_point--; /* XXX - multibyte? */ - c = rl_line_buffer[rl_point - 1]; + if (--rl_point) /* XXX - multibyte? */ + c = rl_line_buffer[rl_point - 1]; } } @@ -569,7 +569,7 @@ rl_vi_yank_pop (int count, int key) } l = strlen (rl_kill_ring[rl_kill_index]); -#if 0 /* TAG:readline-8.3 8/29/2022 matteopaolini1995@gmail.com */ +#if 1 origpoint = rl_point; n = rl_point - l + 1; #else @@ -577,7 +577,7 @@ rl_vi_yank_pop (int count, int key) #endif if (n >= 0 && STREQN (rl_line_buffer + n, rl_kill_ring[rl_kill_index], l)) { -#if 0 /* TAG:readline-8.3 */ +#if 1 rl_delete_text (n, n + l); /* remember vi cursor positioning */ rl_point = origpoint - l; #else @@ -756,8 +756,8 @@ _rl_bracketed_text (size_t *lenp) int rl_bracketed_paste_begin (int count, int key) { - int retval, c; - size_t len, cap; + int retval; + size_t len; char *buf; buf = _rl_bracketed_text (&len); @@ -774,12 +774,12 @@ int _rl_read_bracketed_paste_prefix (int c) { char pbuf[BRACK_PASTE_SLEN+1], *pbpref; - int key, ind, j; + int key, ind; pbpref = BRACK_PASTE_PREF; /* XXX - debugging */ if (c != pbpref[0]) return (0); - pbuf[ind = 0] = c; + pbuf[ind = 0] = key = c; while (ind < BRACK_PASTE_SLEN-1 && (RL_ISSTATE (RL_STATE_INPUTPENDING|RL_STATE_MACROINPUT) == 0) && _rl_pushed_input_available () == 0 && @@ -846,7 +846,7 @@ _rl_bracketed_read_key () int _rl_bracketed_read_mbstring (char *mb, int mlen) { - int c, r; + int c; c = _rl_bracketed_read_key (); if (c < 0) @@ -865,6 +865,8 @@ _rl_bracketed_read_mbstring (char *mb, int mlen) /* A special paste command for Windows users. */ #if defined (_WIN32) +#define WIN32_LEAN_AND_MEAN + #include <windows.h> int diff --git a/lib/readline/macro.c b/lib/readline/macro.c index 231a24bcd..9ac258d51 100644 --- a/lib/readline/macro.c +++ b/lib/readline/macro.c @@ -69,7 +69,7 @@ static int executing_macro_index; static char *current_macro = (char *)NULL; /* The size of the buffer allocated to current_macro. */ -static int current_macro_size; +static size_t current_macro_size; /* The index at which characters are being added to current_macro. */ static int current_macro_index; diff --git a/lib/readline/mbutil.c b/lib/readline/mbutil.c index 47e9100a6..33588cc7a 100644 --- a/lib/readline/mbutil.c +++ b/lib/readline/mbutil.c @@ -1,6 +1,6 @@ /* mbutil.c -- readline multibyte character utility functions */ -/* Copyright (C) 2001-2021 Free Software Foundation, Inc. +/* Copyright (C) 2001-2021,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -148,7 +148,7 @@ _rl_utf8_mblen (const char *s, size_t n) } static int -_rl_find_next_mbchar_internal (char *string, int seed, int count, int find_non_zero) +_rl_find_next_mbchar_internal (const char *string, int seed, int count, int find_non_zero) { size_t tmp, len; mbstate_t ps; @@ -216,11 +216,13 @@ _rl_find_next_mbchar_internal (char *string, int seed, int count, int find_non_z if (find_non_zero) { - tmp = MBRTOWC (&wc, string + point, strlen (string + point), &ps); + len = strlen (string + point); + tmp = MBRTOWC (&wc, string + point, len, &ps); while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && WCWIDTH (wc) == 0) { point += tmp; - tmp = MBRTOWC (&wc, string + point, strlen (string + point), &ps); + len -= tmp; + tmp = MBRTOWC (&wc, string + point, len, &ps); } } @@ -228,7 +230,7 @@ _rl_find_next_mbchar_internal (char *string, int seed, int count, int find_non_z } static inline int -_rl_test_nonzero (char *string, int ind, int len) +_rl_test_nonzero (const char *string, int ind, int len) { size_t tmp; WCHAR_T wc; @@ -242,9 +244,8 @@ _rl_test_nonzero (char *string, int ind, int len) /* experimental -- needs to handle zero-width characters better */ static int -_rl_find_prev_utf8char (char *string, int seed, int find_non_zero) +_rl_find_prev_utf8char (const char *string, int seed, int find_non_zero) { - char *s; unsigned char b; int save, prev; size_t len; @@ -262,11 +263,16 @@ _rl_find_prev_utf8char (char *string, int seed, int find_non_zero) save = prev; /* Move back until we're not in the middle of a multibyte char */ +#if 0 if (UTF8_MBCHAR (b)) { while (prev > 0 && (b = (unsigned char)string[--prev]) && UTF8_MBCHAR (b)) ; } +#else + while (prev > 0 && (b = (unsigned char)string[--prev]) && UTF8_MBFIRSTCHAR (b) == 0) + ; +#endif if (UTF8_MBFIRSTCHAR (b)) { @@ -288,7 +294,7 @@ _rl_find_prev_utf8char (char *string, int seed, int find_non_zero) } /*static*/ int -_rl_find_prev_mbchar_internal (char *string, int seed, int find_non_zero) +_rl_find_prev_mbchar_internal (const char *string, int seed, int find_non_zero) { mbstate_t ps; int prev, non_zero_prev, point, length; @@ -356,19 +362,19 @@ _rl_find_prev_mbchar_internal (char *string, int seed, int find_non_zero) if an invalid multibyte sequence was encountered. It returns (size_t)(-2) if it couldn't parse a complete multibyte character. */ int -_rl_get_char_len (char *src, mbstate_t *ps) +_rl_get_char_len (const char *src, mbstate_t *ps) { size_t tmp, l; int mb_cur_max; /* Look at no more than MB_CUR_MAX characters */ - l = (size_t)strlen (src); - if (_rl_utf8locale && l > 0 && UTF8_SINGLEBYTE(*src)) + l = strlen (src); + if (_rl_utf8locale && l >= 0 && UTF8_SINGLEBYTE(*src)) tmp = (*src != 0) ? 1 : 0; else { mb_cur_max = MB_CUR_MAX; - tmp = mbrlen((const char *)src, (l < mb_cur_max) ? l : mb_cur_max, ps); + tmp = mbrlen(src, (l < mb_cur_max) ? l : mb_cur_max, ps); } if (tmp == (size_t)(-2)) { @@ -394,7 +400,7 @@ _rl_get_char_len (char *src, mbstate_t *ps) /* compare the specified two characters. If the characters matched, return 1. Otherwise return 0. */ int -_rl_compare_chars (char *buf1, int pos1, mbstate_t *ps1, char *buf2, int pos2, mbstate_t *ps2) +_rl_compare_chars (const char *buf1, int pos1, mbstate_t *ps1, const char *buf2, int pos2, mbstate_t *ps2) { int i, w1, w2; @@ -417,7 +423,7 @@ _rl_compare_chars (char *buf1, int pos1, mbstate_t *ps1, char *buf2, int pos2, m if point is invalid (point < 0 || more than string length), it returns -1 */ int -_rl_adjust_point (char *string, int point, mbstate_t *ps) +_rl_adjust_point (const char *string, int point, mbstate_t *ps) { size_t tmp; int length, pos; @@ -457,7 +463,7 @@ _rl_adjust_point (char *string, int point, mbstate_t *ps) } int -_rl_is_mbchar_matched (char *string, int seed, int end, char *mbchar, int length) +_rl_is_mbchar_matched (const char *string, int seed, int end, char *mbchar, int length) { int i; @@ -471,19 +477,19 @@ _rl_is_mbchar_matched (char *string, int seed, int end, char *mbchar, int length } WCHAR_T -_rl_char_value (char *buf, int ind) +_rl_char_value (const char *buf, int ind) { size_t tmp; WCHAR_T wc; mbstate_t ps; - int l; + size_t l; if (MB_LEN_MAX == 1 || rl_byte_oriented) return ((WCHAR_T) buf[ind]); if (_rl_utf8locale && UTF8_SINGLEBYTE(buf[ind])) return ((WCHAR_T) buf[ind]); l = strlen (buf); - if (ind >= l - 1) + if (ind + 1 >= l) return ((WCHAR_T) buf[ind]); if (l < ind) /* Sanity check */ l = strlen (buf+ind); @@ -500,7 +506,7 @@ _rl_char_value (char *buf, int ind) characters. */ #undef _rl_find_next_mbchar int -_rl_find_next_mbchar (char *string, int seed, int count, int flags) +_rl_find_next_mbchar (const char *string, int seed, int count, int flags) { #if defined (HANDLE_MULTIBYTE) return _rl_find_next_mbchar_internal (string, seed, count, flags); @@ -514,7 +520,7 @@ _rl_find_next_mbchar (char *string, int seed, int count, int flags) we look for non-zero-width multibyte characters. */ #undef _rl_find_prev_mbchar int -_rl_find_prev_mbchar (char *string, int seed, int flags) +_rl_find_prev_mbchar (const char *string, int seed, int flags) { #if defined (HANDLE_MULTIBYTE) return _rl_find_prev_mbchar_internal (string, seed, flags); @@ -522,3 +528,78 @@ _rl_find_prev_mbchar (char *string, int seed, int flags) return ((seed == 0) ? seed : seed - 1); #endif } + +/* Compare the first N characters of S1 and S2 without regard to case. If + FLAGS&1, apply the mapping specified by completion-map-case and make + `-' and `_' equivalent. Returns 1 if the strings are equal. */ +int +_rl_mb_strcaseeqn (const char *s1, size_t l1, const char *s2, size_t l2, size_t n, int flags) +{ + size_t v1, v2; + mbstate_t ps1, ps2; + WCHAR_T wc1, wc2; + + memset (&ps1, 0, sizeof (mbstate_t)); + memset (&ps2, 0, sizeof (mbstate_t)); + + do + { + v1 = MBRTOWC(&wc1, s1, l1, &ps1); + v2 = MBRTOWC(&wc2, s2, l2, &ps2); + if (v1 == 0 && v2 == 0) + return 1; + else if (MB_INVALIDCH(v1) || MB_INVALIDCH(v2)) + { + int d; + d = _rl_to_lower (*s1) - _rl_to_lower (*s2); /* do byte comparison */ + if ((flags & 1) && (*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) + d = 0; /* case insensitive character mapping */ + if (d != 0) + return 0; + s1++; + s2++; + n--; + continue; + } + wc1 = towlower(wc1); + wc2 = towlower(wc2); + s1 += v1; + s2 += v1; + n -= v1; + if ((flags & 1) && (wc1 == L'-' || wc1 == L'_') && (wc2 == L'-' || wc2 == L'_')) + continue; + if (wc1 != wc2) + return 0; + } + while (n != 0); + + return 1; +} + +/* Return 1 if the multibyte characters pointed to by S1 and S2 are equal + without regard to case. If FLAGS&1, apply the mapping specified by + completion-map-case and make `-' and `_' equivalent. */ +int +_rl_mb_charcasecmp (const char *s1, mbstate_t *ps1, const char *s2, mbstate_t *ps2, int flags) +{ + int d; + size_t v1, v2; + wchar_t wc1, wc2; + + d = MB_CUR_MAX; + v1 = MBRTOWC(&wc1, s1, d, ps1); + v2 = MBRTOWC(&wc2, s2, d, ps2); + if (v1 == 0 && v2 == 0) + return 1; + else if (MB_INVALIDCH(v1) || MB_INVALIDCH(v2)) + { + if ((flags & 1) && (*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) + return 1; + return (_rl_to_lower (*s1) == _rl_to_lower (*s2)); + } + wc1 = towlower(wc1); + wc2 = towlower(wc2); + if ((flags & 1) && (wc1 == L'-' || wc1 == L'_') && (wc2 == L'-' || wc2 == L'_')) + return 1; + return (wc1 == wc2); +} diff --git a/lib/readline/misc.c b/lib/readline/misc.c index 4bca9c586..96c82b54d 100644 --- a/lib/readline/misc.c +++ b/lib/readline/misc.c @@ -1,6 +1,6 @@ /* misc.c -- miscellaneous bindable readline functions. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -150,6 +150,7 @@ _rl_arg_dispatch (_rl_arg_cxt cxt, int c) if (_rl_digit_p (c)) { + _rl_add_executing_keyseq (key); r = _rl_digit_value (c); rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) + r : r; rl_explicit_arg = 1; @@ -157,6 +158,7 @@ _rl_arg_dispatch (_rl_arg_cxt cxt, int c) } else if (c == '-' && rl_explicit_arg == 0) { + _rl_add_executing_keyseq (key); rl_numeric_arg = 1; _rl_argcxt |= NUM_SAWMINUS; rl_arg_sign = -1; @@ -235,6 +237,7 @@ rl_digit_argument (int ignore, int key) else { rl_execute_next (key); + _rl_del_executing_keyseq (); return (rl_digit_loop ()); } } @@ -306,9 +309,11 @@ void _rl_start_using_history (void) { using_history (); - if (_rl_saved_line_for_history) - _rl_free_saved_history_line (); - _rl_saved_line_for_history = (HIST_ENTRY *)NULL; +#if 1 + if (_rl_saved_line_for_history && _rl_saved_line_for_history->data) + _rl_free_undo_list ((UNDO_LIST *)_rl_saved_line_for_history->data); +#endif + _rl_free_saved_history_line (); _rl_history_search_pos = -99; /* some random invalid history position */ } @@ -339,64 +344,83 @@ rl_maybe_replace_line (void) xfree (temp->line); FREE (temp->timestamp); xfree (temp); + /* What about _rl_saved_line_for_history? if the saved undo list is + rl_undo_list, and we just put that into a history entry, should + we set the saved undo list to NULL? */ + if (_rl_saved_line_for_history && (UNDO_LIST *)_rl_saved_line_for_history->data == rl_undo_list) + _rl_saved_line_for_history->data = 0; + /* Do we want to set rl_undo_list = 0 here since we just saved it into + a history entry? */ + rl_undo_list = 0; } return 0; } +void +_rl_unsave_line (HIST_ENTRY *entry) +{ + /* Can't call with `1' because rl_undo_list might point to an undo + list from a history entry, as in rl_replace_from_history() below. */ + rl_replace_line (entry->line, 0); + rl_undo_list = (UNDO_LIST *)entry->data; + + /* Doesn't free `data'. */ + _rl_free_history_entry (entry); + + rl_point = rl_end; /* rl_replace_line sets rl_end */ +} + /* Restore the _rl_saved_line_for_history if there is one. */ int rl_maybe_unsave_line (void) { if (_rl_saved_line_for_history) { - /* Can't call with `1' because rl_undo_list might point to an undo - list from a history entry, as in rl_replace_from_history() below. */ - rl_replace_line (_rl_saved_line_for_history->line, 0); - rl_undo_list = (UNDO_LIST *)_rl_saved_line_for_history->data; - - /* Doesn't free `data'. */ - _rl_free_history_entry (_rl_saved_line_for_history); + _rl_unsave_line (_rl_saved_line_for_history); _rl_saved_line_for_history = (HIST_ENTRY *)NULL; - rl_point = rl_end; /* rl_replace_line sets rl_end */ } else rl_ding (); return 0; } +HIST_ENTRY * +_rl_alloc_saved_line (void) +{ + HIST_ENTRY *ret; + + ret = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); + + ret->line = savestring (rl_line_buffer); + ret->timestamp = (char *)NULL; + ret->data = (char *)rl_undo_list; + + return ret; +} + /* Save the current line in _rl_saved_line_for_history. */ int rl_maybe_save_line (void) { if (_rl_saved_line_for_history == 0) - { - _rl_saved_line_for_history = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); - _rl_saved_line_for_history->line = savestring (rl_line_buffer); - _rl_saved_line_for_history->timestamp = (char *)NULL; - _rl_saved_line_for_history->data = (char *)rl_undo_list; - } + _rl_saved_line_for_history = _rl_alloc_saved_line (); return 0; } +/* Just a wrapper, any self-respecting compiler will inline it. */ +void +_rl_free_saved_line (HIST_ENTRY *entry) +{ + _rl_free_history_entry (entry); +} + int _rl_free_saved_history_line (void) { - UNDO_LIST *orig; + _rl_free_saved_line (_rl_saved_line_for_history); + _rl_saved_line_for_history = (HIST_ENTRY *)NULL; - if (_rl_saved_line_for_history) - { - if (rl_undo_list && rl_undo_list == (UNDO_LIST *)_rl_saved_line_for_history->data) - rl_undo_list = 0; - /* Have to free this separately because _rl_free_history entry can't: - it doesn't know whether or not this has application data. Only the - callers that know this is _rl_saved_line_for_history can know that - it's an undo list. */ - if (_rl_saved_line_for_history->data) - _rl_free_undo_list ((UNDO_LIST *)_rl_saved_line_for_history->data); - _rl_free_history_entry (_rl_saved_line_for_history); - _rl_saved_line_for_history = (HIST_ENTRY *)NULL; - } return 0; } @@ -554,20 +578,11 @@ rl_end_of_history (int count, int key) return 0; } -/* Move down to the next history line. */ int -rl_get_next_history (int count, int key) +_rl_next_history_internal (int count) { HIST_ENTRY *temp; - if (count < 0) - return (rl_get_previous_history (-count, key)); - - if (count == 0) - return 0; - - rl_maybe_replace_line (); - /* either not saved by rl_newline or at end of line, so set appropriately. */ if (_rl_history_saved_point == -1 && (rl_point || rl_end)) _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; @@ -582,41 +597,48 @@ rl_get_next_history (int count, int key) } if (temp == 0) - rl_maybe_unsave_line (); + return 0; else { rl_replace_from_history (temp, 0); _rl_history_set_point (); + return 1; } - return 0; } -/* Get the previous item out of our interactive history, making it the current - line. If there is no previous history, just ding. */ +/* Move down to the next history line. */ int -rl_get_previous_history (int count, int key) +rl_get_next_history (int count, int key) { - HIST_ENTRY *old_temp, *temp; - int had_saved_line; + int r; if (count < 0) - return (rl_get_next_history (-count, key)); + return (rl_get_previous_history (-count, key)); - if (count == 0 || history_list () == 0) + if (count == 0) return 0; - /* either not saved by rl_newline or at end of line, so set appropriately. */ - if (_rl_history_saved_point == -1 && (rl_point || rl_end)) - _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; + rl_maybe_replace_line (); - /* If we don't have a line saved, then save this one. */ - had_saved_line = _rl_saved_line_for_history != 0; - rl_maybe_save_line (); + r = _rl_next_history_internal (count); - /* If the current line has changed, save the changes. */ - rl_maybe_replace_line (); + if (r == 0) + rl_maybe_unsave_line (); + + return 0; +} + +int +_rl_previous_history_internal (int count) +{ + HIST_ENTRY *old_temp, *temp; temp = old_temp = (HIST_ENTRY *)NULL; + + /* either not saved by rl_newline or at end of line, so set appropriately. */ + if (_rl_history_saved_point == -1 && (rl_point || rl_end)) + _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; + while (count) { temp = previous_history (); @@ -634,15 +656,41 @@ rl_get_previous_history (int count, int key) if (temp == 0) { - if (had_saved_line == 0) - _rl_free_saved_history_line (); rl_ding (); + return 0; } else { rl_replace_from_history (temp, 0); _rl_history_set_point (); + return 1; } +} + +/* Get the previous item out of our interactive history, making it the current + line. If there is no previous history, just ding. */ +int +rl_get_previous_history (int count, int key) +{ + int had_saved_line, r; + + if (count < 0) + return (rl_get_next_history (-count, key)); + + if (count == 0 || history_list () == 0) + return 0; + + /* If we don't have a line saved, then save this one. */ + had_saved_line = _rl_saved_line_for_history != 0; + rl_maybe_save_line (); + + /* If the current line has changed, save the changes. */ + rl_maybe_replace_line (); + + r = _rl_previous_history_internal (count); + + if (r == 0 && had_saved_line == 0) /* failed to find previous history */ + _rl_free_saved_history_line (); return 0; } @@ -693,7 +741,7 @@ static int saved_history_logical_offset = -1; #define HISTORY_FULL() (history_is_stifled () && history_length >= history_max_entries) static int -set_saved_history () +set_saved_history (void) { int absolute_offset, count; @@ -762,7 +810,10 @@ _rl_set_insert_mode (int im, int force) _rl_set_cursor (im, force); #endif + RL_UNSETSTATE (RL_STATE_OVERWRITE); rl_insert_mode = im; + if (rl_insert_mode == RL_IM_OVERWRITE) + RL_SETSTATE (RL_STATE_OVERWRITE); } /* Toggle overwrite mode. A positive explicit argument selects overwrite diff --git a/lib/readline/parens.c b/lib/readline/parens.c index 57ce70458..7f1e93f4f 100644 --- a/lib/readline/parens.c +++ b/lib/readline/parens.c @@ -38,6 +38,7 @@ # include <unistd.h> #endif +#include "rlstdc.h" #include "posixselect.h" #if defined (HAVE_STRING_H) @@ -46,10 +47,6 @@ # include <strings.h> #endif /* !HAVE_STRING_H */ -#if !defined (strchr) && !defined (__STDC__) -extern char *strchr (), *strrchr (); -#endif /* !strchr && !__STDC__ */ - #include "readline.h" #include "rlprivate.h" diff --git a/lib/readline/parse-colors.c b/lib/readline/parse-colors.c index 05ec9bc36..2b58eb9cb 100644 --- a/lib/readline/parse-colors.c +++ b/lib/readline/parse-colors.c @@ -297,6 +297,22 @@ get_funky_string (char **dest, const char **src, bool equals_end, size_t *output } #endif /* COLOR_SUPPORT */ +static void +free_color_ext_list (void) +{ + COLOR_EXT_TYPE *e; + COLOR_EXT_TYPE *e2; + + for (e = _rl_color_ext_list; e != NULL; /* empty */) + { + e2 = e; + e = e->next; + free (e2); + } + + _rl_color_ext_list = 0; +} + void _rl_parse_colors(void) { #if defined (COLOR_SUPPORT) @@ -420,21 +436,32 @@ void _rl_parse_colors(void) if (state < 0) { - COLOR_EXT_TYPE *e; - COLOR_EXT_TYPE *e2; _rl_errmsg ("unparsable value for LS_COLORS environment variable"); free (color_buf); - for (e = _rl_color_ext_list; e != NULL; /* empty */) - { - e2 = e; - e = e->next; - free (e2); - } - _rl_color_ext_list = NULL; + free_color_ext_list (); + _rl_colored_stats = 0; /* can't have colored stats without colors */ + _rl_colored_completion_prefix = 0; /* or colored prefixes */ } #else /* !COLOR_SUPPORT */ ; #endif /* !COLOR_SUPPORT */ } + +void +rl_reparse_colors (void) +{ + char *v; + + v = sh_get_env_value ("LS_COLORS"); + if (v == 0 && color_buf == 0) + return; /* no change */ + if (v && color_buf && STREQ (v, color_buf)) + return; /* no change */ + + free (color_buf); + free_color_ext_list (); + + _rl_parse_colors (); +} diff --git a/lib/readline/posixselect.h b/lib/readline/posixselect.h index da6a1ace0..9d54e1889 100644 --- a/lib/readline/posixselect.h +++ b/lib/readline/posixselect.h @@ -21,13 +21,13 @@ #ifndef _POSIXSELECT_H_ #define _POSIXSELECT_H_ -#if defined (FD_SET) && !defined (HAVE_SELECT) +#if defined (FD_SET) && !defined (HAVE_SELECT) && !defined (_WIN32) # define HAVE_SELECT 1 #endif #if defined (HAVE_SELECT) # if !defined (HAVE_SYS_SELECT_H) || !defined (M_UNIX) -# include <sys/time.h> +# include "posixtime.h" # endif #endif /* HAVE_SELECT */ #if defined (HAVE_SYS_SELECT_H) diff --git a/lib/readline/posixtime.h b/lib/readline/posixtime.h index e70ebec67..a731b006a 100644 --- a/lib/readline/posixtime.h +++ b/lib/readline/posixtime.h @@ -1,6 +1,6 @@ /* posixtime.h -- wrapper for time.h, sys/times.h mess. */ -/* Copyright (C) 1999-2021 Free Software Foundation, Inc. +/* Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -49,9 +49,18 @@ struct timeval #endif #if !HAVE_GETTIMEOFDAY -extern int gettimeofday PARAMS((struct timeval *, void *)); +extern int gettimeofday (struct timeval * restrict, void * restrict); #endif +/* consistently use gettimeofday for time information */ +static inline time_t +getnow(void) +{ + struct timeval now; + gettimeofday (&now, 0); + return now.tv_sec; +} + /* These exist on BSD systems, at least. */ #if !defined (timerclear) # define timerclear(tvp) do { (tvp)->tv_sec = 0; (tvp)->tv_usec = 0; } while (0) diff --git a/lib/readline/readline.c b/lib/readline/readline.c index 9d42a8d6d..979090979 100644 --- a/lib/readline/readline.c +++ b/lib/readline/readline.c @@ -1,7 +1,7 @@ /* readline.c -- a general facility for reading lines of input with emacs style editing and completion. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -262,7 +262,7 @@ _rl_keyseq_cxt *_rl_kscxt = 0; int rl_executing_key; char *rl_executing_keyseq = 0; -int _rl_executing_keyseq_size = 0; +size_t _rl_executing_keyseq_size = 0; struct _rl_cmd _rl_pending_command; struct _rl_cmd *_rl_command_to_execute = (struct _rl_cmd *)NULL; @@ -474,17 +474,12 @@ readline_internal_setup (void) RL_CHECK_SIGNALS (); } -STATIC_CALLBACK char * -readline_internal_teardown (int eof) +STATIC_CALLBACK void +readline_common_teardown (void) { char *temp; HIST_ENTRY *entry; - RL_CHECK_SIGNALS (); - - if (eof) - RL_SETSTATE (RL_STATE_EOF); /* XXX */ - /* Restore the original of this history line, iff the line that we are editing was originally in the history, AND the line has changed. */ entry = current_history (); @@ -510,6 +505,17 @@ readline_internal_teardown (int eof) rid of it now. */ if (rl_undo_list) rl_free_undo_list (); +} + +STATIC_CALLBACK char * +readline_internal_teardown (int eof) +{ + RL_CHECK_SIGNALS (); + + if (eof) + RL_SETSTATE (RL_STATE_EOF); /* XXX */ + + readline_common_teardown (); /* Disable the meta key, if this terminal has one and we were told to use it. The check whether or not we sent the enable string is in @@ -566,6 +572,7 @@ readline_internal_charloop (void) { static int lastc, eof_found; int c, code, lk, r; + static procenv_t olevel; lastc = EOF; @@ -576,6 +583,9 @@ readline_internal_charloop (void) #endif lk = _rl_last_command_was_kill; + /* Save and restore _rl_top_level even though most of the time it + doesn't matter. */ + memcpy ((void *)olevel, (void *)_rl_top_level, sizeof (procenv_t)); #if defined (HAVE_POSIX_SIGSETJMP) code = sigsetjmp (_rl_top_level, 0); #else @@ -586,13 +596,14 @@ readline_internal_charloop (void) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; + if (RL_ISSTATE (RL_STATE_CALLBACK)) + memcpy ((void *)_rl_top_level, (void *)olevel, sizeof (procenv_t)); /* If we longjmped because of a timeout, handle it here. */ if (RL_ISSTATE (RL_STATE_TIMEOUT)) { RL_SETSTATE (RL_STATE_DONE); - rl_done = 1; - return 1; + return (rl_done = 1); } /* If we get here, we're not being called from something dispatched @@ -703,6 +714,7 @@ readline_internal_charloop (void) _rl_internal_char_cleanup (); #if defined (READLINE_CALLBACKS) + memcpy ((void *)_rl_top_level, (void *)olevel, sizeof (procenv_t)); return 0; #else } @@ -899,8 +911,17 @@ _rl_dispatch_subseq (register int key, Keymap map, int got_subseq) { /* Special case rl_do_lowercase_version (). */ if (func == rl_do_lowercase_version) - /* Should we do anything special if key == ANYOTHERKEY? */ - return (_rl_dispatch (_rl_to_lower ((unsigned char)key), map)); + { + /* Should we do anything special if key == ANYOTHERKEY? */ + newkey = _rl_to_lower ((unsigned char)key); + if (newkey != key) + return (_rl_dispatch (newkey, map)); + else + { + rl_ding (); /* gentle failure */ + return 0; + } + } rl_executing_keymap = map; rl_executing_key = key; @@ -1109,7 +1130,11 @@ _rl_subseq_result (int r, Keymap map, int key, int got_subseq) type = m[ANYOTHERKEY].type; func = m[ANYOTHERKEY].function; if (type == ISFUNC && func == rl_do_lowercase_version) - r = _rl_dispatch (_rl_to_lower ((unsigned char)key), map); + { + int newkey = _rl_to_lower ((unsigned char)key); + /* check that there is actually a lowercase version to avoid infinite recursion */ + r = (newkey != key) ? _rl_dispatch (newkey, map) : 1; + } else if (type == ISFUNC) { /* If we shadowed a function, whatever it is, we somehow need a @@ -1322,9 +1347,8 @@ readline_initialize_everything (void) _rl_parse_colors (); #endif - rl_executing_keyseq = malloc (_rl_executing_keyseq_size = 16); - if (rl_executing_keyseq) - rl_executing_keyseq[rl_key_sequence_length = 0] = '\0'; + rl_executing_keyseq = xmalloc (_rl_executing_keyseq_size = 16); + rl_executing_keyseq[rl_key_sequence_length = 0] = '\0'; } /* If this system allows us to look at the values of the regular @@ -1562,7 +1586,7 @@ void _rl_add_executing_keyseq (int key) { RESIZE_KEYSEQ_BUFFER (); - rl_executing_keyseq[rl_key_sequence_length++] = key; + rl_executing_keyseq[rl_key_sequence_length++] = key; } /* `delete' the last character added to the executing key sequence. Use this diff --git a/lib/readline/readline.h b/lib/readline/readline.h index cac269f0b..22b9ca9b6 100644 --- a/lib/readline/readline.h +++ b/lib/readline/readline.h @@ -1,6 +1,6 @@ /* Readline.h -- the names of functions callable from within readline. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -39,9 +39,9 @@ extern "C" { #endif /* Hex-encoded Readline version number. */ -#define RL_READLINE_VERSION 0x0802 /* Readline 8.2 */ +#define RL_READLINE_VERSION 0x0803 /* Readline 8.3 */ #define RL_VERSION_MAJOR 8 -#define RL_VERSION_MINOR 2 +#define RL_VERSION_MINOR 3 /* Readline data structures. */ @@ -209,6 +209,8 @@ extern int rl_stop_output (int, int); extern int rl_abort (int, int); extern int rl_tty_status (int, int); +extern int rl_execute_named_command (int, int); + /* Bindable commands for incremental and non-incremental history searching. */ extern int rl_history_search_forward (int, int); extern int rl_history_search_backward (int, int); @@ -341,7 +343,9 @@ extern int rl_trim_arg_from_keyseq (const char *, size_t, Keymap); extern void rl_list_funmap_names (void); extern char **rl_invoking_keyseqs_in_map (rl_command_func_t *, Keymap); extern char **rl_invoking_keyseqs (rl_command_func_t *); - + +extern void rl_print_keybinding (const char *, Keymap, int); + extern void rl_function_dumper (int); extern void rl_macro_dumper (int); extern void rl_variable_dumper (int); @@ -404,11 +408,7 @@ extern void rl_activate_mark (void); extern void rl_deactivate_mark (void); extern int rl_mark_active_p (void); -#if defined (USE_VARARGS) && defined (PREFER_STDARG) extern int rl_message (const char *, ...) __attribute__((__format__ (printf, 1, 2))); -#else -extern int rl_message (); -#endif extern int rl_show_char (int); @@ -441,6 +441,7 @@ extern void rl_get_screen_size (int *, int *); extern void rl_reset_screen_size (void); extern char *rl_get_termcap (const char *); +extern void rl_reparse_colors (void); /* Functions for character input. */ extern int rl_stuff_char (int); @@ -627,6 +628,8 @@ extern rl_voidfunc_t *rl_redisplay_function; extern rl_vintfunc_t *rl_prep_term_function; extern rl_voidfunc_t *rl_deprep_term_function; +extern rl_macro_print_func_t *rl_macro_display_hook; + /* Dispatch variables. */ extern Keymap rl_executing_keymap; extern Keymap rl_binding_keymap; @@ -770,6 +773,19 @@ extern rl_icppfunc_t *rl_filename_stat_hook; converted. */ extern rl_dequote_func_t *rl_filename_rewrite_hook; +/* If non-zero, this is the address of a function to call before + comparing the filename portion of a word to be completed with directory + entries from the filesystem. This takes the address of the partial word + to be completed, after any rl_filename_dequoting_function has been applied. + The function should either return its first argument (if no conversion + takes place) or newly-allocated memory. This can, for instance, convert + the filename portion of the completion word to a character set suitable + for comparison against directory entries read from the filesystem (after + their potential modification by rl_filename_rewrite_hook). + The returned value is what is added to the list of matches. + The second argument is the length of the filename to be converted. */ +extern rl_dequote_func_t *rl_completion_rewrite_hook; + /* Backwards compatibility with previous versions of readline. */ #define rl_symbolic_link_hook rl_directory_completion_hook @@ -794,6 +810,12 @@ extern int rl_filename_completion_desired; entry finder function. */ extern int rl_filename_quoting_desired; +/* Non-zero means we should apply filename-type quoting to all completions + even if we are not otherwise treating the matches as filenames. This is + ALWAYS zero on entry, and can only be changed within a completion entry + finder function. */ +extern int rl_full_quoting_desired; + /* Set to a function to quote a filename in an application-specific fashion. Called with the text to quote, the type of match found (single or multiple) and a pointer to the quoting character to be used, which the function can @@ -892,37 +914,40 @@ extern int rl_persistent_signal_handlers; #define MULT_MATCH 2 /* Possible state values for rl_readline_state */ -#define RL_STATE_NONE 0x000000 /* no state; before first call */ - -#define RL_STATE_INITIALIZING 0x0000001 /* initializing */ -#define RL_STATE_INITIALIZED 0x0000002 /* initialization done */ -#define RL_STATE_TERMPREPPED 0x0000004 /* terminal is prepped */ -#define RL_STATE_READCMD 0x0000008 /* reading a command key */ -#define RL_STATE_METANEXT 0x0000010 /* reading input after ESC */ -#define RL_STATE_DISPATCHING 0x0000020 /* dispatching to a command */ -#define RL_STATE_MOREINPUT 0x0000040 /* reading more input in a command function */ -#define RL_STATE_ISEARCH 0x0000080 /* doing incremental search */ -#define RL_STATE_NSEARCH 0x0000100 /* doing non-inc search */ -#define RL_STATE_SEARCH 0x0000200 /* doing a history search */ -#define RL_STATE_NUMERICARG 0x0000400 /* reading numeric argument */ -#define RL_STATE_MACROINPUT 0x0000800 /* getting input from a macro */ -#define RL_STATE_MACRODEF 0x0001000 /* defining keyboard macro */ -#define RL_STATE_OVERWRITE 0x0002000 /* overwrite mode */ -#define RL_STATE_COMPLETING 0x0004000 /* doing completion */ -#define RL_STATE_SIGHANDLER 0x0008000 /* in readline sighandler */ -#define RL_STATE_UNDOING 0x0010000 /* doing an undo */ -#define RL_STATE_INPUTPENDING 0x0020000 /* rl_execute_next called */ -#define RL_STATE_TTYCSAVED 0x0040000 /* tty special chars saved */ -#define RL_STATE_CALLBACK 0x0080000 /* using the callback interface */ -#define RL_STATE_VIMOTION 0x0100000 /* reading vi motion arg */ -#define RL_STATE_MULTIKEY 0x0200000 /* reading multiple-key command */ -#define RL_STATE_VICMDONCE 0x0400000 /* entered vi command mode at least once */ -#define RL_STATE_CHARSEARCH 0x0800000 /* vi mode char search */ -#define RL_STATE_REDISPLAYING 0x1000000 /* updating terminal display */ - -#define RL_STATE_DONE 0x2000000 /* done; accepted line */ -#define RL_STATE_TIMEOUT 0x4000000 /* done; timed out */ -#define RL_STATE_EOF 0x8000000 /* done; got eof on read */ +#define RL_STATE_NONE 0x0000000 /* no state; before first call */ + +#define RL_STATE_INITIALIZING 0x00000001 /* initializing */ +#define RL_STATE_INITIALIZED 0x00000002 /* initialization done */ +#define RL_STATE_TERMPREPPED 0x00000004 /* terminal is prepped */ +#define RL_STATE_READCMD 0x00000008 /* reading a command key */ +#define RL_STATE_METANEXT 0x00000010 /* reading input after ESC */ +#define RL_STATE_DISPATCHING 0x00000020 /* dispatching to a command */ +#define RL_STATE_MOREINPUT 0x00000040 /* reading more input in a command function */ +#define RL_STATE_ISEARCH 0x00000080 /* doing incremental search */ +#define RL_STATE_NSEARCH 0x00000100 /* doing non-inc search */ +#define RL_STATE_SEARCH 0x00000200 /* doing a history search */ +#define RL_STATE_NUMERICARG 0x00000400 /* reading numeric argument */ +#define RL_STATE_MACROINPUT 0x00000800 /* getting input from a macro */ +#define RL_STATE_MACRODEF 0x00001000 /* defining keyboard macro */ +#define RL_STATE_OVERWRITE 0x00002000 /* overwrite mode */ +#define RL_STATE_COMPLETING 0x00004000 /* doing completion */ +#define RL_STATE_SIGHANDLER 0x00008000 /* in readline sighandler */ +#define RL_STATE_UNDOING 0x00010000 /* doing an undo */ +#define RL_STATE_INPUTPENDING 0x00020000 /* rl_execute_next called */ +#define RL_STATE_TTYCSAVED 0x00040000 /* tty special chars saved */ +#define RL_STATE_CALLBACK 0x00080000 /* using the callback interface */ +#define RL_STATE_VIMOTION 0x00100000 /* reading vi motion arg */ +#define RL_STATE_MULTIKEY 0x00200000 /* reading multiple-key command */ +#define RL_STATE_VICMDONCE 0x00400000 /* entered vi command mode at least once */ +#define RL_STATE_CHARSEARCH 0x00800000 /* vi mode char search */ +#define RL_STATE_REDISPLAYING 0x01000000 /* updating terminal display */ + +#define RL_STATE_DONE 0x02000000 /* done; accepted line */ +#define RL_STATE_TIMEOUT 0x04000000 /* done; timed out */ +#define RL_STATE_EOF 0x08000000 /* done; got eof on read */ + +/* Rearrange these for next major version */ +#define RL_STATE_READSTR 0x10000000 /* reading a string for M-x */ #define RL_SETSTATE(x) (rl_readline_state |= (x)) #define RL_UNSETSTATE(x) (rl_readline_state &= ~(x)) @@ -939,7 +964,7 @@ struct readline_state { char *prompt; /* global state */ - int rlstate; + int rlstate; /* XXX -- needs to be unsigned long */ int done; Keymap kmap; diff --git a/lib/readline/rlconf.h b/lib/readline/rlconf.h index b6d6a2f12..e0fd735b5 100644 --- a/lib/readline/rlconf.h +++ b/lib/readline/rlconf.h @@ -76,4 +76,9 @@ #define RL_VI_CMD_MODESTR_DEFAULT "(cmd)" #define RL_VI_CMD_MODESTR_DEFLEN 5 +/* Do you want readline to assume it's running in an ANSI-compatible terminal + by default? If set to 0, readline tries to check and verify whether or not + it is. */ +#define RL_ANSI_TERM_DEFAULT 1 /* for now */ + #endif /* _RLCONF_H_ */ diff --git a/lib/readline/rldefs.h b/lib/readline/rldefs.h index 98577a64b..ec3c64a86 100644 --- a/lib/readline/rldefs.h +++ b/lib/readline/rldefs.h @@ -40,7 +40,7 @@ # if defined (HAVE_TERMIO_H) # define TERMIO_TTY_DRIVER # else -# if !defined (__MINGW32__) +# if !defined (__MINGW32__) && !defined (_MSC_VER) # define NEW_TTY_DRIVER # else # define NO_TTY_DRIVER @@ -63,17 +63,7 @@ # include <strings.h> #endif /* !HAVE_STRING_H */ -#if !defined (strchr) && !defined (__STDC__) -extern char *strchr (), *strrchr (); -#endif /* !strchr && !__STDC__ */ - -#if defined (PREFER_STDARG) -# include <stdarg.h> -#else -# if defined (PREFER_VARARGS) -# include <varargs.h> -# endif -#endif +#include <stdarg.h> #if defined (HAVE_STRCASECMP) #define _rl_stricmp strcasecmp @@ -83,7 +73,7 @@ extern int _rl_stricmp (const char *, const char *); extern int _rl_strnicmp (const char *, const char *, int); #endif -#if defined (HAVE_STRPBRK) && !defined (HAVE_MULTIBYTE) +#if defined (HAVE_STRPBRK) && !defined (HANDLE_MULTIBYTE) # define _rl_strpbrk(a,b) strpbrk((a),(b)) #else extern char *_rl_strpbrk (const char *, const char *); diff --git a/lib/readline/rlmbutil.h b/lib/readline/rlmbutil.h index d9060572e..fe6f4dcb2 100644 --- a/lib/readline/rlmbutil.h +++ b/lib/readline/rlmbutil.h @@ -1,6 +1,6 @@ /* rlmbutil.h -- utility functions for multibyte characters. */ -/* Copyright (C) 2001-2021 Free Software Foundation, Inc. +/* Copyright (C) 2001-2021,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -104,23 +104,26 @@ #define MB_FIND_ANY 0x00 #define MB_FIND_NONZERO 0x01 -extern int _rl_find_prev_mbchar (char *, int, int); -extern int _rl_find_next_mbchar (char *, int, int, int); +extern int _rl_find_prev_mbchar (const char *, int, int); +extern int _rl_find_next_mbchar (const char *, int, int, int); #ifdef HANDLE_MULTIBYTE -extern int _rl_compare_chars (char *, int, mbstate_t *, char *, int, mbstate_t *); -extern int _rl_get_char_len (char *, mbstate_t *); -extern int _rl_adjust_point (char *, int, mbstate_t *); +extern int _rl_compare_chars (const char *, int, mbstate_t *, const char *, int, mbstate_t *); +extern int _rl_get_char_len (const char *, mbstate_t *); +extern int _rl_adjust_point (const char *, int, mbstate_t *); extern int _rl_read_mbchar (char *, int); extern int _rl_read_mbstring (int, char *, int); -extern int _rl_is_mbchar_matched (char *, int, int, char *, int); +extern int _rl_is_mbchar_matched (const char *, int, int, char *, int); -extern WCHAR_T _rl_char_value (char *, int); +extern WCHAR_T _rl_char_value (const char *, int); extern int _rl_walphabetic (WCHAR_T); +extern int _rl_mb_strcaseeqn (const char *, size_t, const char *, size_t, size_t, int); +extern int _rl_mb_charcasecmp (const char *, mbstate_t *, const char *, mbstate_t *, int); + #define _rl_to_wupper(wc) (iswlower (wc) ? towupper (wc) : (wc)) #define _rl_to_wlower(wc) (iswupper (wc) ? towlower (wc) : (wc)) @@ -169,11 +172,16 @@ _rl_wcwidth (WCHAR_T wc) } } -/* Unicode combining characters range from U+0300 to U+036F */ -#define UNICODE_COMBINING_CHAR(x) ((x) >= 768 && (x) <= 879) +/* Unicode combining characters as of version 15.1 */ +#define UNICODE_COMBINING_CHAR(x) \ + (((x) >= 0x0300 && (x) <= 0x036F) || \ + ((x) >= 0x1AB0 && (x) <= 0x1AFF) || \ + ((x) >= 0x1DC0 && (x) <= 0x1DFF) || \ + ((x) >= 0x20D0 && (x) <= 0x20FF) || \ + ((x) >= 0xFE20 && (x) <= 0xFE2F)) #if defined (WCWIDTH_BROKEN) -# define WCWIDTH(wc) ((_rl_utf8locale && UNICODE_COMBINING_CHAR(wc)) ? 0 : _rl_wcwidth(wc)) +# define WCWIDTH(wc) ((_rl_utf8locale && UNICODE_COMBINING_CHAR((int)wc)) ? 0 : _rl_wcwidth(wc)) #else # define WCWIDTH(wc) _rl_wcwidth(wc) #endif @@ -184,6 +192,8 @@ _rl_wcwidth (WCHAR_T wc) # define IS_COMBINING_CHAR(x) (WCWIDTH(x) == 0) #endif +#define IS_BASE_CHAR(x) (iswgraph(x) && WCWIDTH(x) > 0) + #define UTF8_SINGLEBYTE(c) (((c) & 0x80) == 0) #define UTF8_MBFIRSTCHAR(c) (((c) & 0xc0) == 0xc0) #define UTF8_MBCHAR(c) (((c) & 0xc0) == 0x80) diff --git a/lib/readline/rlprivate.h b/lib/readline/rlprivate.h index d87d07a72..61d04a459 100644 --- a/lib/readline/rlprivate.h +++ b/lib/readline/rlprivate.h @@ -1,7 +1,7 @@ /* rlprivate.h -- functions and variables global to the readline library, but not intended for use by applications. */ -/* Copyright (C) 1999-2022 Free Software Foundation, Inc. +/* Copyright (C) 1999-2024 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -67,6 +67,7 @@ #define SF_CHGKMAP 0x08 #define SF_PATTERN 0x10 #define SF_NOCASE 0x20 /* unused so far */ +#define SF_FREEPMT 0x40 /* saved prompt separately, need to free it */ typedef struct __rl_search_context { @@ -110,6 +111,28 @@ typedef struct __rl_search_context char *search_terminators; } _rl_search_cxt; +/* readstr flags */ +#define READSTR_NOSPACE 0x01 /* don't insert space, use for completion */ +#define READSTR_FREEPMT 0x02 /* called rl_save_prompt, need to free it ourselves */ + +typedef struct __rl_readstr_context +{ + int flags; + + int prevc; + int lastc; +#if defined (HANDLE_MULTIBYTE) + char mb[MB_LEN_MAX]; + char pmb[MB_LEN_MAX]; +#endif + + int save_point; + int save_mark; + int save_line; + + int (*compfunc) (struct __rl_readstr_context *, int); +} _rl_readstr_cxt; + struct _rl_cmd { Keymap map; int count; @@ -247,10 +270,11 @@ extern char *_rl_savestring (const char *); * Undocumented private functions * *************************************************************************/ -#if defined(READLINE_CALLBACKS) +#if defined (READLINE_CALLBACKS) /* readline.c */ extern void readline_internal_setup (void); +extern void readline_common_teardown (void); extern char *readline_internal_teardown (int); extern int readline_internal_char (void); @@ -303,8 +327,22 @@ extern int _rl_pushed_input_available (void); extern int _rl_timeout_init (void); extern int _rl_timeout_handle_sigalrm (void); + #if defined (_POSIXSELECT_H_) /* use as a sentinel for fd_set, struct timeval, and sigset_t definitions */ + +#if defined (__MINGW32__) +# define RL_TIMEOUT_USE_SIGALRM +#elif defined (HAVE_SELECT) || defined (HAVE_PSELECT) +# define RL_TIMEOUT_USE_SELECT +#elif defined (_MSC_VER) +/* can't use select/pselect or SIGALRM, so no timeouts */ +#else +# define RL_TIMEOUT_USE_SIGALRM +#endif + +#endif +#if defined (RL_TIMEOUT_USE_SELECT) extern int _rl_timeout_select (int, fd_set *, fd_set *, fd_set *, const struct timeval *, const sigset_t *); #endif @@ -355,7 +393,13 @@ extern int _rl_arg_callback (_rl_arg_cxt); extern void _rl_reset_argument (void); extern void _rl_start_using_history (void); +#if defined (HIST_ENTRY_DEFINED) +extern HIST_ENTRY *_rl_alloc_saved_line (void); +extern void _rl_free_saved_line (HIST_ENTRY *); +extern void _rl_unsave_line (HIST_ENTRY *); +#endif extern int _rl_free_saved_history_line (void); + extern void _rl_set_insert_mode (int, int); extern void _rl_revert_previous_lines (void); @@ -391,6 +435,9 @@ extern int _rl_restore_tty_signals (void); /* search.c */ extern int _rl_nsearch_callback (_rl_search_cxt *); extern int _rl_nsearch_cleanup (_rl_search_cxt *, int); +extern int _rl_nsearch_sigcleanup (_rl_search_cxt *, int); + +extern void _rl_free_saved_search_line (void); /* signals.c */ extern void _rl_signal_handler (int); @@ -400,6 +447,8 @@ extern void _rl_release_sigint (void); extern void _rl_block_sigwinch (void); extern void _rl_release_sigwinch (void); +extern void _rl_state_sigcleanup (void); + /* terminal.c */ extern void _rl_get_screen_size (int, int); extern void _rl_sigwinch_resize_terminal (void); @@ -439,21 +488,26 @@ extern int _rl_char_search_internal (int, int, int); #endif extern int _rl_set_mark_at_pos (int); +extern _rl_readstr_cxt *_rl_rscxt_alloc (int); +extern void _rl_rscxt_dispose (_rl_readstr_cxt *, int); +extern void _rl_free_saved_readstr_line (void); +extern void _rl_unsave_saved_readstr_line (void); +extern _rl_readstr_cxt *_rl_readstr_init (int, int); +extern int _rl_readstr_cleanup (_rl_readstr_cxt *, int); +extern int _rl_readstr_sigcleanup (_rl_readstr_cxt *, int); +extern void _rl_readstr_restore (_rl_readstr_cxt *); +extern int _rl_readstr_getchar (_rl_readstr_cxt *); +extern int _rl_readstr_dispatch (_rl_readstr_cxt *, int); + /* undo.c */ extern UNDO_LIST *_rl_copy_undo_entry (UNDO_LIST *); extern UNDO_LIST *_rl_copy_undo_list (UNDO_LIST *); extern void _rl_free_undo_list (UNDO_LIST *); /* util.c */ -#if defined (USE_VARARGS) && defined (PREFER_STDARG) extern void _rl_ttymsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); extern void _rl_errmsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); extern void _rl_trace (const char *, ...) __attribute__((__format__ (printf, 1, 2))); -#else -extern void _rl_ttymsg (); -extern void _rl_errmsg (); -extern void _rl_trace (); -#endif extern void _rl_audit_tty (char *); extern int _rl_tropen (void); @@ -461,6 +515,8 @@ extern int _rl_tropen (void); extern int _rl_abort_internal (void); extern int _rl_null_function (int, int); extern char *_rl_strindex (const char *, const char *); +extern int _rl_strcaseeqn (const char *, const char *, size_t, int); +extern int _rl_charcasecmp (int, int, int); extern int _rl_qsort_string_compare (char **, char **); extern int (_rl_uppercase_p) (int); extern int (_rl_lowercase_p) (int); @@ -516,6 +572,7 @@ extern int _rl_menu_complete_prefix_first; /* display.c */ extern int _rl_vis_botlin; extern int _rl_last_c_pos; +extern int _rl_last_v_pos; extern int _rl_suppress_redisplay; extern int _rl_want_redisplay; @@ -530,6 +587,7 @@ extern int _rl_vi_cmd_modestr_len; extern char *_rl_isearch_terminators; extern _rl_search_cxt *_rl_iscxt; +extern int _rl_search_case_fold; /* macro.c */ extern char *_rl_executing_macro; @@ -570,7 +628,7 @@ extern procenv_t _rl_top_level; extern _rl_keyseq_cxt *_rl_kscxt; extern int _rl_keyseq_timeout; -extern int _rl_executing_keyseq_size; +extern size_t _rl_executing_keyseq_size; extern rl_hook_func_t *_rl_internal_startup_hook; @@ -615,6 +673,8 @@ extern int _rl_term_autowrap; extern int _rl_optimize_typeahead; extern int _rl_keep_mark_active; +extern _rl_readstr_cxt *_rl_rscxt; + /* undo.c */ extern int _rl_doing_an_undo; extern int _rl_undo_group_level; diff --git a/lib/readline/rlstdc.h b/lib/readline/rlstdc.h index 2aaa30bab..0e5c4f47f 100644 --- a/lib/readline/rlstdc.h +++ b/lib/readline/rlstdc.h @@ -1,6 +1,6 @@ /* stdc.h -- macros to make source compile on both ANSI C and K&R C compilers. */ -/* Copyright (C) 1993-2009 Free Software Foundation, Inc. +/* Copyright (C) 1993-2009,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -42,16 +42,4 @@ # endif #endif -/* Moved from config.h.in because readline.h:rl_message depends on these - defines. */ -#if defined (__STDC__) && defined (HAVE_STDARG_H) -# define PREFER_STDARG -# define USE_VARARGS -#else -# if defined (HAVE_VARARGS_H) -# define PREFER_VARARGS -# define USE_VARARGS -# endif -#endif - #endif /* !_RL_STDC_H_ */ diff --git a/lib/readline/rltty.c b/lib/readline/rltty.c index 882a3d46b..a4ad94c93 100644 --- a/lib/readline/rltty.c +++ b/lib/readline/rltty.c @@ -1,7 +1,7 @@ /* rltty.c -- functions to prepare and restore the terminal for readline's use. */ -/* Copyright (C) 1992-2022 Free Software Foundation, Inc. +/* Copyright (C) 1992-2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -49,6 +49,8 @@ extern int errno; #endif /* !errno */ +int _rl_use_tty_xon_xoff = 1; + rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal; rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal; @@ -80,8 +82,7 @@ static int ksrflow; /* Dummy call to force a backgrounded readline to stop before it tries to get the tty settings. */ static void -set_winsize (tty) - int tty; +set_winsize (int tty) { #if defined (TIOCGWINSZ) struct winsize w; @@ -276,15 +277,16 @@ prepare_terminal_settings (int meta_flag, TIOTYPE oldtio, TIOTYPE *tiop) } #if defined (TIOCGETC) -# if defined (USE_XON_XOFF) - /* Get rid of terminal output start and stop characters. */ - tiop->tchars.t_stopc = -1; /* C-s */ - tiop->tchars.t_startc = -1; /* C-q */ + if (_rl_use_tty_xon_xoff == 0) + { + /* Get rid of terminal output start and stop characters. */ + tiop->tchars.t_stopc = -1; /* C-s */ + tiop->tchars.t_startc = -1; /* C-q */ - /* If there is an XON character, bind it to restart the output. */ - if (oldtio.tchars.t_startc != -1) - rl_bind_key (oldtio.tchars.t_startc, rl_restart_output); -# endif /* USE_XON_XOFF */ + /* If there is an XON character, bind it to restart the output. */ + if (oldtio.tchars.t_startc != -1) + rl_bind_key (oldtio.tchars.t_startc, rl_restart_output); + } /* If there is an EOF char, bind _rl_eof_char to it. */ if (oldtio.tchars.t_eofc != -1) @@ -515,14 +517,13 @@ prepare_terminal_settings (int meta_flag, TIOTYPE oldtio, TIOTYPE *tiop) if ((unsigned char) oldtio.c_cc[VEOF] != (unsigned char) _POSIX_VDISABLE) _rl_eof_char = oldtio.c_cc[VEOF]; -#if defined (USE_XON_XOFF) + if (_rl_use_tty_xon_xoff == 0) #if defined (IXANY) - tiop->c_iflag &= ~(IXON | IXANY); + tiop->c_iflag &= ~(IXON | IXANY); #else - /* `strict' Posix systems do not define IXANY. */ - tiop->c_iflag &= ~IXON; + /* `strict' Posix systems do not define IXANY. */ + tiop->c_iflag &= ~IXON; #endif /* IXANY */ -#endif /* USE_XON_XOFF */ /* Only turn this off if we are using all 8 bits. */ if (((tiop->c_cflag & CSIZE) == CS8) || meta_flag) @@ -729,7 +730,7 @@ rl_tty_set_echoing (int u) _rl_echoing_p = u; return o; } - + /* **************************************************************** */ /* */ /* Bogus Flow Control */ diff --git a/lib/readline/rltypedefs.h b/lib/readline/rltypedefs.h index 163654921..61b813165 100644 --- a/lib/readline/rltypedefs.h +++ b/lib/readline/rltypedefs.h @@ -1,6 +1,6 @@ /* rltypedefs.h -- Type declarations for readline functions. */ -/* Copyright (C) 2000-2021 Free Software Foundation, Inc. +/* Copyright (C) 2000-2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -28,22 +28,15 @@ extern "C" { /* Old-style, attempt to mark as deprecated in some way people will notice. */ -#if !defined (_FUNCTION_DEF) +#if !defined (_FUNCTION_DEF) && defined (WANT_OBSOLETE_TYPEDEFS) # define _FUNCTION_DEF -#if defined(__GNUC__) || defined(__clang__) typedef int Function () __attribute__((deprecated)); typedef void VFunction () __attribute__((deprecated)); typedef char *CPFunction () __attribute__((deprecated)); typedef char **CPPFunction () __attribute__((deprecated)); -#else -typedef int Function (); -typedef void VFunction (); -typedef char *CPFunction (); -typedef char **CPPFunction (); -#endif -#endif /* _FUNCTION_DEF */ +#endif /* _FUNCTION_DEF && WANT_OBSOLETE_TYPEDEFS */ /* New style. */ @@ -64,6 +57,9 @@ typedef int rl_compignore_func_t (char **); typedef void rl_compdisp_func_t (char **, int, int); +/* Functions for displaying key bindings. Currently only one. */ +typedef void rl_macro_print_func_t (const char *, const char *, int, const char *); + /* Type for input and pre-read hook functions like rl_event_hook */ typedef int rl_hook_func_t (void); diff --git a/lib/readline/search.c b/lib/readline/search.c index eea230111..a22c43d4f 100644 --- a/lib/readline/search.c +++ b/lib/readline/search.c @@ -1,6 +1,6 @@ /* search.c - code for non-incremental searching in emacs and vi modes. */ -/* Copyright (C) 1992-2022 Free Software Foundation, Inc. +/* Copyright (C) 1992-2024 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -55,6 +55,8 @@ _rl_search_cxt *_rl_nscxt = 0; +static HIST_ENTRY *_rl_saved_line_for_search; + static char *noninc_search_string = (char *) NULL; static int noninc_history_pos; @@ -65,7 +67,7 @@ static int _rl_history_search_len; static int _rl_history_search_flags; static char *history_search_string; -static int history_string_size; +static size_t history_string_size; static void make_history_line_current (HIST_ENTRY *); static int noninc_search_from_pos (char *, int, int, int, int *); @@ -78,21 +80,57 @@ static _rl_search_cxt *_rl_nsearch_init (int, int); static void _rl_nsearch_abort (_rl_search_cxt *); static int _rl_nsearch_dispatch (_rl_search_cxt *, int); +void +_rl_free_saved_search_line (void) +{ + if (_rl_saved_line_for_search) + _rl_free_saved_line (_rl_saved_line_for_search); + _rl_saved_line_for_search = (HIST_ENTRY *)NULL; +} + +static inline void +_rl_unsave_saved_search_line (void) +{ + if (_rl_saved_line_for_search) + _rl_unsave_line (_rl_saved_line_for_search); + _rl_saved_line_for_search = (HIST_ENTRY *)NULL; +} + +/* We're going to replace the undo list with the one created by inserting + the matching line we found, so we want to free rl_undo_list if it's not + from a history entry. We assume the undo list does not come from a + history entry if we are at the end of the history, entering a new line. + + The call to rl_maybe_replace_line() has already ensured that any undo + list pointing to a history entry has already been saved back to the + history and set rl_undo_list to NULL. */ + +static void +dispose_saved_search_line (void) +{ + UNDO_LIST *xlist; + + if (_hs_at_end_of_history () == 0) + _rl_unsave_saved_search_line (); + else if (_rl_saved_line_for_search) + { + xlist = _rl_saved_line_for_search ? (UNDO_LIST *)_rl_saved_line_for_search->data : 0; + if (xlist) + _rl_free_undo_list (xlist); + _rl_saved_line_for_search->data = 0; + _rl_free_saved_search_line (); + } +} + /* Make the data from the history entry ENTRY be the contents of the current line. This doesn't do anything with rl_point; the caller must set it. */ static void make_history_line_current (HIST_ENTRY *entry) { - UNDO_LIST *xlist; - - xlist = _rl_saved_line_for_history ? (UNDO_LIST *)_rl_saved_line_for_history->data : 0; - /* At this point, rl_undo_list points to a private search string list. */ - if (rl_undo_list && rl_undo_list != (UNDO_LIST *)entry->data && rl_undo_list != xlist) - rl_free_undo_list (); - /* Now we create a new undo list with a single insert for this text. WE DON'T CHANGE THE ORIGINAL HISTORY ENTRY UNDO LIST */ + rl_undo_list = 0; /* XXX */ _rl_replace_text (entry->line, 0, rl_end); _rl_fix_point (1); #if defined (VI_MODE) @@ -103,15 +141,6 @@ make_history_line_current (HIST_ENTRY *entry) current editing buffer. */ rl_free_undo_list (); #endif - - /* This will need to free the saved undo list associated with the original - (pre-search) line buffer. - XXX - look at _rl_free_saved_history_line and consider calling it if - rl_undo_list != xlist (or calling rl_free_undo list directly on - _rl_saved_line_for_history->data) */ - if (_rl_saved_line_for_history) - _rl_free_history_entry (_rl_saved_line_for_history); - _rl_saved_line_for_history = (HIST_ENTRY *)NULL; } /* Search the history list for STRING starting at absolute history position @@ -135,21 +164,23 @@ noninc_search_from_pos (char *string, int pos, int dir, int flags, int *ncp) RL_SETSTATE(RL_STATE_SEARCH); /* These functions return the match offset in the line; history_offset gives the matching line in the history list */ - if (flags & SF_PATTERN) + + sflags = 0; /* Non-anchored search */ + s = string; + if (*s == '^') { - s = string; - sflags = 0; /* Non-anchored search */ - if (*s == '^') - { - sflags |= ANCHORED_SEARCH; - s++; - } - ret = _hs_history_patsearch (s, dir, sflags); + sflags |= ANCHORED_SEARCH; + s++; } - else if (*string == '^') - ret = history_search_prefix (string + 1, dir); + + if (flags & SF_PATTERN) + ret = _hs_history_patsearch (s, dir, sflags); else - ret = history_search (string, dir); + { + if (_rl_search_case_fold) + sflags |= CASEFOLD_SEARCH; + ret = _hs_history_search (s, dir, sflags); + } RL_UNSETSTATE(RL_STATE_SEARCH); if (ncp) @@ -181,7 +212,7 @@ noninc_dosearch (char *string, int dir, int flags) if (pos == -1) { /* Search failed, current history position unchanged. */ - rl_maybe_unsave_line (); + _rl_unsave_saved_search_line (); rl_clear_message (); rl_point = 0; rl_ding (); @@ -190,6 +221,10 @@ noninc_dosearch (char *string, int dir, int flags) noninc_history_pos = pos; + /* We're committed to making the line we found the current contents of + rl_line_buffer. We can dispose of _rl_saved_line_for_search. */ + dispose_saved_search_line (); + oldpos = where_history (); history_set_pos (noninc_history_pos); entry = current_history (); /* will never be NULL after successful search */ @@ -201,7 +236,7 @@ noninc_dosearch (char *string, int dir, int flags) make_history_line_current (entry); - if (_rl_enable_active_region && ((flags & SF_PATTERN) == 0) && ind > 0 && ind < rl_end) + if (_rl_enable_active_region && ((flags & SF_PATTERN) == 0) && ind >= 0 && ind < rl_end) { rl_point = ind; rl_mark = ind + strlen (string); @@ -236,7 +271,10 @@ _rl_nsearch_init (int dir, int pchar) cxt->direction = dir; cxt->history_pos = cxt->save_line; - rl_maybe_save_line (); + /* If the current line has changed, put it back into the history if necessary. */ + rl_maybe_replace_line (); + + _rl_saved_line_for_search = _rl_alloc_saved_line (); /* Clear the undo list, since reading the search string should create its own undo list, and the whole list will end up being freed when we @@ -248,6 +286,7 @@ _rl_nsearch_init (int dir, int pchar) rl_end = rl_point = 0; p = _rl_make_prompt_for_search (pchar ? pchar : ':'); + cxt->sflags |= SF_FREEPMT; rl_message ("%s", p); xfree (p); @@ -272,16 +311,27 @@ _rl_nsearch_cleanup (_rl_search_cxt *cxt, int r) static void _rl_nsearch_abort (_rl_search_cxt *cxt) { - rl_maybe_unsave_line (); + _rl_unsave_saved_search_line (); rl_point = cxt->save_point; rl_mark = cxt->save_mark; - rl_restore_prompt (); + if (cxt->sflags & SF_FREEPMT) + rl_restore_prompt (); /* _rl_make_prompt_for_search saved it */ + cxt->sflags &= ~SF_FREEPMT; rl_clear_message (); _rl_fix_point (1); RL_UNSETSTATE (RL_STATE_NSEARCH); } +int +_rl_nsearch_sigcleanup (_rl_search_cxt *cxt, int r) +{ + if (cxt->sflags & SF_FREEPMT) + rl_restore_prompt (); /* _rl_make_prompt_for_search saved it */ + cxt->sflags &= ~SF_FREEPMT; + return (_rl_nsearch_cleanup (cxt, r)); +} + /* Process just-read character C according to search context CXT. Return -1 if the caller should abort the search, 0 if we should break out of the loop, and 1 if we should continue to read characters. */ @@ -303,6 +353,17 @@ _rl_nsearch_dispatch (_rl_search_cxt *cxt, int c) rl_unix_line_discard (1, c); break; + case CTRL('Q'): + case CTRL('V'): + n = rl_quoted_insert (1, c); + if (n < 0) + { + _rl_nsearch_abort (cxt); + return -1; + } + cxt->lastc = (rl_point > 0) ? rl_line_buffer[rl_point - 1] : rl_line_buffer[0]; + break; + case RETURN: case NEWLINE: return 0; @@ -376,8 +437,11 @@ _rl_nsearch_dosearch (_rl_search_cxt *cxt) { if (noninc_search_string == 0) { + _rl_free_saved_search_line (); rl_ding (); - rl_restore_prompt (); + if (cxt->sflags & SF_FREEPMT) + rl_restore_prompt (); + cxt->sflags &= ~SF_FREEPMT; RL_UNSETSTATE (RL_STATE_NSEARCH); return -1; } @@ -389,15 +453,22 @@ _rl_nsearch_dosearch (_rl_search_cxt *cxt) FREE (noninc_search_string); noninc_search_string = savestring (rl_line_buffer); - /* If we don't want the subsequent undo list generated by the search + /* We don't want the subsequent undo list generated by the search matching a history line to include the contents of the search string, - we need to clear rl_line_buffer here. For now, we just clear the - undo list generated by reading the search string. (If the search - fails, the old undo list will be restored by rl_maybe_unsave_line.) */ + so we need to clear rl_line_buffer here. If we don't want that, + change the #if 1 to an #if 0 below. We clear the undo list + generated by reading the search string. (If the search fails, the + old undo list will be restored by _rl_unsave_line.) */ + rl_free_undo_list (); +#if 1 + rl_line_buffer[rl_point = rl_end = 0] = '\0'; +#endif } - rl_restore_prompt (); + if (cxt->sflags & SF_FREEPMT) + rl_restore_prompt (); + cxt->sflags &= ~SF_FREEPMT; return (noninc_dosearch (noninc_search_string, cxt->direction, cxt->sflags&SF_PATTERN)); } @@ -530,11 +601,12 @@ rl_history_search_internal (int count, int dir) { HIST_ENTRY *temp; int ret, oldpos, newcol; - int had_saved_line; char *t; - had_saved_line = _rl_saved_line_for_history != 0; - rl_maybe_save_line (); + /* If the current line has changed, put it back into the history if necessary. */ + rl_maybe_replace_line (); + + _rl_saved_line_for_search = _rl_alloc_saved_line (); temp = (HIST_ENTRY *)NULL; /* Search COUNT times through the history for a line matching @@ -566,8 +638,7 @@ rl_history_search_internal (int count, int dir) /* If we didn't find anything at all, return. */ if (temp == 0) { - /* XXX - check had_saved_line here? */ - rl_maybe_unsave_line (); + _rl_unsave_saved_search_line (); rl_ding (); /* If you don't want the saved history line (last match) to show up in the line buffer after the search fails, change the #if 0 to @@ -580,12 +651,16 @@ rl_history_search_internal (int count, int dir) rl_mark = 0; } #else - rl_point = _rl_history_search_len; /* rl_maybe_unsave_line changes it */ + rl_point = _rl_history_search_len; /* _rl_unsave_line changes it */ rl_mark = rl_end; #endif return 1; } + /* We're committed to making the line we found the current contents of + rl_line_buffer. We can dispose of _rl_saved_line_for_search. */ + dispose_saved_search_line (); + /* Copy the line we found into the current line buffer. */ make_history_line_current (temp); @@ -619,7 +694,7 @@ rl_history_search_reinit (int flags) if (rl_point) { /* Allocate enough space for anchored and non-anchored searches */ - if (_rl_history_search_len >= history_string_size - 2) + if (_rl_history_search_len + 2 >= history_string_size) { history_string_size = _rl_history_search_len + 2; history_search_string = (char *)xrealloc (history_search_string, history_string_size); @@ -630,7 +705,7 @@ rl_history_search_reinit (int flags) strncpy (history_search_string + sind, rl_line_buffer, rl_point); history_search_string[rl_point + sind] = '\0'; } - _rl_free_saved_history_line (); /* XXX rl_undo_list? */ + _rl_free_saved_search_line (); } /* Search forward in the history for the string of characters diff --git a/lib/readline/shell.c b/lib/readline/shell.c index 36c91484c..7c0f9554f 100644 --- a/lib/readline/shell.c +++ b/lib/readline/shell.c @@ -67,10 +67,6 @@ extern struct passwd *getpwuid (uid_t); #endif /* HAVE_GETPWUID && !HAVE_GETPW_DECLS */ -#ifndef NULL -# define NULL 0 -#endif - #ifndef CHAR_BIT # define CHAR_BIT 8 #endif diff --git a/lib/readline/signals.c b/lib/readline/signals.c index 9df365e48..706035e9f 100644 --- a/lib/readline/signals.c +++ b/lib/readline/signals.c @@ -1,6 +1,6 @@ /* signals.c -- signal handling support for readline. */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -267,6 +267,9 @@ _rl_handle_signal (int sig) sigprocmask (SIG_BLOCK, &set, &oset); #endif +#if defined (READLINE_CALLBACKS) + if (RL_ISSTATE (RL_STATE_CALLBACK) == 0 || rl_persistent_signal_handlers) +#endif rl_echo_signal_char (sig); rl_cleanup_after_signal (); @@ -582,6 +585,19 @@ rl_reset_after_signal (void) rl_set_signals (); } +/* Similar to rl_callback_sigcleanup, but cleans up operations that allocate + state even when not in callback mode. */ +void +_rl_state_sigcleanup (void) +{ + if (RL_ISSTATE (RL_STATE_ISEARCH)) /* incremental search */ + _rl_isearch_cleanup (_rl_iscxt, 0); + else if (RL_ISSTATE (RL_STATE_NSEARCH)) /* non-incremental search */ + _rl_nsearch_sigcleanup (_rl_nscxt, 0); + else if (RL_ISSTATE (RL_STATE_READSTR)) /* reading a string */ + _rl_readstr_sigcleanup (_rl_rscxt, 0); +} + /* Free up the readline variable line state for the current line (undo list, any partial history entry, any keyboard macros in progress, and any numeric arguments in process) after catching a signal, before calling @@ -591,6 +607,9 @@ rl_free_line_state (void) { register HIST_ENTRY *entry; + if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) + _rl_state_sigcleanup (); + rl_free_undo_list (); entry = current_history (); @@ -622,7 +641,6 @@ rl_check_signals (void) /* **************************************************************** */ #if defined (HAVE_POSIX_SIGNALS) -static sigset_t sigint_set, sigint_oset; static sigset_t sigwinch_set, sigwinch_oset; #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) diff --git a/lib/readline/tcap.h b/lib/readline/tcap.h index 859e6eed5..467ea60e9 100644 --- a/lib/readline/tcap.h +++ b/lib/readline/tcap.h @@ -1,6 +1,6 @@ /* tcap.h -- termcap library functions and variables. */ -/* Copyright (C) 1996-2015 Free Software Foundation, Inc. +/* Copyright (C) 1996-2015,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -46,14 +46,14 @@ extern char *UP, *BC; extern short ospeed; -extern int tgetent (); -extern int tgetflag (); -extern int tgetnum (); -extern char *tgetstr (); +extern int tgetent (char *, const char *); +extern int tgetflag (const char *); +extern int tgetnum (const char *); +extern char *tgetstr (const char *, char **); -extern int tputs (); +extern int tputs (const char *, int, int (*)(int)); -extern char *tgoto (); +extern char *tgoto (const char *, int, int); #endif /* HAVE_TERMCAP_H */ diff --git a/lib/readline/terminal.c b/lib/readline/terminal.c index 9997161f8..7003d2a97 100644 --- a/lib/readline/terminal.c +++ b/lib/readline/terminal.c @@ -1,6 +1,6 @@ /* terminal.c -- controlling the terminal with termcap. */ -/* Copyright (C) 1996-2022 Free Software Foundation, Inc. +/* Copyright (C) 1996-2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -69,7 +69,7 @@ #include "rlshell.h" #include "xmalloc.h" -#if defined (__MINGW32__) +#if defined (_WIN32) # include <windows.h> # include <wincon.h> @@ -113,6 +113,7 @@ char PC, *BC, *UP; char *_rl_term_clreol; char *_rl_term_clrpag; char *_rl_term_clrscroll; +char *_rl_term_ho; char *_rl_term_cr; char *_rl_term_backspace; char *_rl_term_goto; @@ -185,6 +186,12 @@ static char *_rl_term_kN; static char *_rl_term_vs; /* very visible */ static char *_rl_term_ve; /* normal */ +/* Bracketed paste */ +static char *_rl_term_BE; /* enable */ +static char *_rl_term_BD; /* disable */ +static char *_rl_term_PS; /* paste start */ +static char *_rl_term_PE; /* paste end */ + /* User-settable color sequences to begin and end the active region. Defaults are rl_term_so and rl_term_se on non-dumb terminals. */ char *_rl_active_region_start_color = NULL; @@ -214,6 +221,9 @@ int _rl_enable_keypad; /* Non-zero means the user wants to enable a meta key. */ int _rl_enable_meta = 1; +/* Non-zero means this is an ANSI-compatible terminal; assume it is. */ +int _rl_term_isansi = RL_ANSI_TERM_DEFAULT; + #if defined (__EMX__) static void _emx_get_screensize (int *swp, int *shp) @@ -229,7 +239,7 @@ _emx_get_screensize (int *swp, int *shp) } #endif -#if defined (__MINGW32__) +#if defined (_WIN32) static void _win_get_screensize (int *swp, int *shp) { @@ -272,7 +282,7 @@ _rl_get_screen_size (int tty, int ignore_env) #if defined (__EMX__) _emx_get_screensize (&wc, &wr); -#elif defined (__MINGW32__) +#elif defined (_WIN32) && !defined (__CYGWIN__) _win_get_screensize (&wc, &wr); #endif @@ -415,14 +425,19 @@ struct _tc_string { static const struct _tc_string tc_strings[] = { { "@7", &_rl_term_at7 }, + { "BD", &_rl_term_BD }, + { "BE", &_rl_term_BE }, { "DC", &_rl_term_DC }, { "E3", &_rl_term_clrscroll }, { "IC", &_rl_term_IC }, + { "PE", &_rl_term_PE }, + { "PS", &_rl_term_PS }, { "ce", &_rl_term_clreol }, { "cl", &_rl_term_clrpag }, { "cr", &_rl_term_cr }, { "dc", &_rl_term_dc }, { "ei", &_rl_term_ei }, + { "ho", &_rl_term_ho }, { "ic", &_rl_term_ic }, { "im", &_rl_term_im }, { "kD", &_rl_term_kD }, /* delete */ @@ -466,6 +481,63 @@ get_term_capabilities (char **bp) tcap_initialized = 1; } +struct _term_name { + const char * const name; + size_t len; +}; + +/* Non-exhaustive list of ANSI/ECMA terminals. */ +static const struct _term_name ansiterms[] = +{ + { "xterm", 5 }, + { "rxvt", 4 }, + { "eterm", 5 }, + { "screen", 6 }, + { "tmux", 4 }, + { "vt100", 5 }, + { "vt102", 5 }, + { "vt220", 5 }, + { "vt320", 5 }, + { "ansi", 4 }, + { "scoansi", 7 }, + { "cygwin", 6 }, + { "linux", 5 }, + { "konsole", 7 }, + { "bvterm", 6 }, + { 0, 0 } +}; + +static inline int +iscsi (const char *s) +{ + return ((s[0] == ESC && s[1] == '[') ? 2 + : ((unsigned char)s[0] == 0x9b) ? 1 : 0); +} + +static int +_rl_check_ansi_terminal (const char *terminal_name) +{ + int i; + size_t len; + + for (i = 0; ansiterms[i].name; i++) + if (STREQN (terminal_name, ansiterms[i].name, ansiterms[i].len)) + return 1; + + if (_rl_term_clreol == 0 || _rl_term_forward_char == 0 || + _rl_term_ho == 0 || _rl_term_up == 0) + return 0; + + /* check some common capabilities */ + if (((len = iscsi (_rl_term_clreol)) && _rl_term_clreol[len] == 'K') && /* ce */ + ((len = iscsi (_rl_term_forward_char)) && _rl_term_forward_char[len] == 'C') && /* nd */ + ((len = iscsi (_rl_term_ho)) && _rl_term_ho[len] == 'H') && /* ho */ + ((len = iscsi (_rl_term_up)) && _rl_term_up[len] == 'A')) /* up */ + return 1; + + return 0; +} + int _rl_init_terminal_io (const char *terminal_name) { @@ -480,7 +552,10 @@ _rl_init_terminal_io (const char *terminal_name) if (term == 0) term = "dumb"; - dumbterm = STREQ (term, "dumb"); + _rl_term_isansi = RL_ANSI_TERM_DEFAULT; + dumbterm = STREQ (term, "dumb") || STREQ (term, "vt52") || STREQ (term, "adm3a"); + if (dumbterm) + _rl_term_isansi = 0; reset_region_colors = 1; @@ -492,11 +567,13 @@ _rl_init_terminal_io (const char *terminal_name) _rl_terminal_can_insert = term_has_meta = _rl_term_autowrap = 0; _rl_term_cr = "\r"; _rl_term_backspace = (char *)NULL; + _rl_term_ho = (char *)NULL; _rl_term_goto = _rl_term_pc = _rl_term_ip = (char *)NULL; _rl_term_ks = _rl_term_ke =_rl_term_vs = _rl_term_ve = (char *)NULL; _rl_term_kh = _rl_term_kH = _rl_term_at7 = _rl_term_kI = (char *)NULL; _rl_term_kN = _rl_term_kP = (char *)NULL; _rl_term_so = _rl_term_se = (char *)NULL; + _rl_term_BD = _rl_term_BE = _rl_term_PE = _rl_term_PS = (char *)NULL; #if defined(HACK_TERMCAP_MOTION) _rl_term_forward_char = (char *)NULL; #endif @@ -553,6 +630,7 @@ _rl_init_terminal_io (const char *terminal_name) /* Everything below here is used by the redisplay code (tputs). */ _rl_screenchars = _rl_screenwidth * _rl_screenheight; _rl_term_cr = "\r"; + _rl_term_ho = (char *)NULL; _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL; _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL; _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL; @@ -565,8 +643,11 @@ _rl_init_terminal_io (const char *terminal_name) _rl_term_so = _rl_term_se = (char *)NULL; _rl_terminal_can_insert = term_has_meta = 0; + _rl_term_isansi = 0; /* not an ANSI terminal */ + /* Assume generic unknown terminal can't handle the enable/disable escape sequences */ + _rl_term_BD = _rl_term_BE = _rl_term_PE = _rl_term_PS = (char *)NULL; _rl_enable_bracketed_paste = 0; /* No terminal so/se capabilities. */ @@ -625,9 +706,13 @@ _rl_init_terminal_io (const char *terminal_name) bind_termcap_arrow_keys (vi_insertion_keymap); #endif /* VI_MODE */ + if (dumbterm == 0 && _rl_term_isansi == 0) + _rl_term_isansi = _rl_check_ansi_terminal (terminal_name); + /* There's no way to determine whether or not a given terminal supports - bracketed paste mode, so we assume a terminal named "dumb" does not. */ - if (dumbterm) + bracketed paste mode, so we assume a non-ANSI terminal (as best as we + can determine) does not. */ + if (_rl_term_isansi == 0) _rl_enable_bracketed_paste = _rl_enable_active_region = 0; if (reset_region_colors) diff --git a/lib/readline/text.c b/lib/readline/text.c index 91c3f330d..c5281efe1 100644 --- a/lib/readline/text.c +++ b/lib/readline/text.c @@ -1,6 +1,6 @@ /* text.c -- text handling commands for readline. */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2021,2023-2024 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -85,7 +85,8 @@ int _rl_optimize_typeahead = 1; /* rl_insert tries to read typeahead */ int rl_insert_text (const char *string) { - register int i, l; + register int i; + size_t l; l = (string && *string) ? strlen (string) : 0; if (l == 0) @@ -704,7 +705,11 @@ static mbstate_t ps = {0}; /* Insert the character C at the current location, moving point forward. If C introduces a multibyte sequence, we read the whole sequence and - then insert the multibyte char into the line buffer. */ + then insert the multibyte char into the line buffer. + If C == 0, we immediately insert any pending partial multibyte character, + assuming that we have read a character that doesn't map to self-insert. + This doesn't completely handle characters that are part of a multibyte + character but map to editing functions. */ int _rl_insert_char (int count, int c) { @@ -718,11 +723,28 @@ _rl_insert_char (int count, int c) static int stored_count = 0; #endif +#if !defined (HANDLE_MULTIBYTE) if (count <= 0) return 0; +#else + if (count < 0) + return 0; + if (count == 0) + { + if (pending_bytes_length == 0) + return 0; + if (stored_count <= 0) + stored_count = count; + else + count = stored_count; -#if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX == 1 || rl_byte_oriented) + memcpy (incoming, pending_bytes, pending_bytes_length); + incoming[pending_bytes_length] = '\0'; + incoming_length = pending_bytes_length; + pending_bytes_length = 0; + memset (&ps, 0, sizeof (mbstate_t)); + } + else if (MB_CUR_MAX == 1 || rl_byte_oriented) { incoming[0] = c; incoming[1] = '\0'; @@ -730,6 +752,9 @@ _rl_insert_char (int count, int c) } else if (_rl_utf8locale && (c & 0x80) == 0) { + if (pending_bytes_length) + _rl_insert_char (0, 0); + incoming[0] = c; incoming[1] = '\0'; incoming_length = 1; @@ -764,7 +789,8 @@ _rl_insert_char (int count, int c) incoming[1] = '\0'; incoming_length = 1; pending_bytes_length--; - memmove (pending_bytes, pending_bytes + 1, pending_bytes_length); + if (pending_bytes_length) + memmove (pending_bytes, pending_bytes + 1, pending_bytes_length); /* Clear the state of the byte sequence, because in this case the effect of mbstate is undefined. */ memset (&ps, 0, sizeof (mbstate_t)); @@ -827,7 +853,11 @@ _rl_insert_char (int count, int c) rl_insert_text (string); xfree (string); +#if defined (HANDLE_MULTIBYTE) + return (pending_bytes_length != 0); +#else return 0; +#endif } if (count > TEXT_COUNT_MAX) @@ -860,6 +890,8 @@ _rl_insert_char (int count, int c) xfree (string); incoming_length = 0; stored_count = 0; + + return (pending_bytes_length != 0); #else /* !HANDLE_MULTIBYTE */ char str[TEXT_COUNT_MAX+1]; @@ -873,9 +905,9 @@ _rl_insert_char (int count, int c) rl_insert_text (str); count -= decreaser; } -#endif /* !HANDLE_MULTIBYTE */ return 0; +#endif /* !HANDLE_MULTIBYTE */ } if (MB_CUR_MAX == 1 || rl_byte_oriented) @@ -903,9 +935,11 @@ _rl_insert_char (int count, int c) rl_insert_text (incoming); stored_count = 0; } -#endif - + + return (pending_bytes_length != 0); +#else return 0; +#endif } /* Overwrite the character at point (or next COUNT characters) with C. @@ -983,6 +1017,11 @@ rl_insert (int count, int c) break; } + /* If we didn't insert n and there are pending bytes, we need to insert + them if _rl_insert_char didn't do that on its own. */ + if (r == 1 && rl_insert_mode == RL_IM_INSERT) + r = _rl_insert_char (0, 0); /* flush partial multibyte char */ + if (n != (unsigned short)-2) /* -2 = sentinel value for having inserted N */ { /* setting rl_pending_input inhibits setting rl_last_func so we do it @@ -992,7 +1031,6 @@ rl_insert (int count, int c) rl_executing_keyseq[rl_key_sequence_length = 0] = '\0'; r = rl_execute_next (n); } - return r; } @@ -1054,6 +1092,8 @@ _rl_insert_next_callback (_rl_callback_generic_arg *data) int rl_quoted_insert (int count, int key) { + int r; + /* Let's see...should the callback interface futz with signal handling? */ #if defined (HANDLE_SIGNALS) if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) @@ -1072,15 +1112,17 @@ rl_quoted_insert (int count, int key) /* A negative count means to quote the next -COUNT characters. */ if (count < 0) { - int r; - do r = _rl_insert_next (1); while (r == 0 && ++count < 0); - return r; } + else + r = _rl_insert_next (count); - return _rl_insert_next (count); + if (r == 1) + _rl_insert_char (0, 0); /* insert partial multibyte character */ + + return r; } /* Insert a tab character. */ @@ -1229,11 +1271,12 @@ _rl_rubout_char (int count, int key) c = rl_line_buffer[--rl_point]; rl_delete_text (rl_point, orig_point); /* The erase-at-end-of-line hack is of questionable merit now. */ - if (rl_point == rl_end && ISPRINT ((unsigned char)c) && _rl_last_c_pos) + if (rl_point == rl_end && ISPRINT ((unsigned char)c) && _rl_last_c_pos && _rl_last_v_pos == 0) { int l; l = rl_character_len (c, rl_point); - _rl_erase_at_end_of_line (l); + if (_rl_last_c_pos >= l) + _rl_erase_at_end_of_line (l); } } else @@ -1764,8 +1807,7 @@ _rl_char_search (int count, int fdir, int bdir) #if defined (READLINE_CALLBACKS) static int -_rl_char_search_callback (data) - _rl_callback_generic_arg *data; +_rl_char_search_callback (_rl_callback_generic_arg *data) { _rl_callback_func = 0; _rl_want_redisplay = 1; @@ -1886,3 +1928,453 @@ rl_mark_active_p (void) { return (mark_active); } + +/* **************************************************************** */ +/* */ +/* Reading a string entered from the keyboard */ +/* */ +/* **************************************************************** */ + +/* A very simple set of functions to read a string from the keyboard using + the line buffer as temporary storage. The caller can set a completion + function to perform completion on TAB and SPACE. */ + +/* XXX - this is all very similar to the search stuff but with a different + CXT. */ + +static HIST_ENTRY *_rl_saved_line_for_readstr; +_rl_readstr_cxt *_rl_rscxt; + +_rl_readstr_cxt * +_rl_rscxt_alloc (int flags) +{ + _rl_readstr_cxt *cxt; + + cxt = (_rl_readstr_cxt *)xmalloc (sizeof (_rl_readstr_cxt)); + + cxt->flags = flags; + + cxt->save_point = rl_point; + cxt->save_mark = rl_mark; + cxt->save_line = where_history (); + + cxt->prevc = cxt->lastc = 0; + + cxt->compfunc = NULL; + + return cxt; +} + +void +_rl_rscxt_dispose (_rl_readstr_cxt *cxt, int flags) +{ + xfree (cxt); +} + +/* This isn't used yet */ +void +_rl_free_saved_readstr_line () +{ + if (_rl_saved_line_for_readstr) + /* This doesn't free any saved undo list, if it needs to, + rl_clear_history shows how to do it. */ + _rl_free_saved_line (_rl_saved_line_for_readstr); + _rl_saved_line_for_readstr = (HIST_ENTRY *)NULL; +} + +void +_rl_unsave_saved_readstr_line () +{ + if (_rl_saved_line_for_readstr) + { + _rl_free_undo_list (rl_undo_list); + _rl_unsave_line (_rl_saved_line_for_readstr); /* restores rl_undo_list */ + } + _rl_saved_line_for_readstr = (HIST_ENTRY *)NULL; +} + +_rl_readstr_cxt * +_rl_readstr_init (int pchar, int flags) +{ + _rl_readstr_cxt *cxt; + char *p; + + cxt = _rl_rscxt_alloc (flags); + + rl_maybe_replace_line (); + _rl_saved_line_for_readstr = _rl_alloc_saved_line (); + + rl_undo_list = 0; + + rl_line_buffer[0] = 0; + rl_end = rl_point = 0; + + p = _rl_make_prompt_for_search (pchar ? pchar : '@'); + cxt->flags |= READSTR_FREEPMT; + rl_message ("%s", p); + xfree (p); + + RL_SETSTATE (RL_STATE_READSTR); + + _rl_rscxt = cxt; + + return cxt; +} + +int +_rl_readstr_cleanup (_rl_readstr_cxt *cxt, int r) +{ + _rl_rscxt_dispose (cxt, 0); + _rl_rscxt = 0; + + RL_UNSETSTATE (RL_STATE_READSTR); + + return (r != 1); +} + +void +_rl_readstr_restore (_rl_readstr_cxt *cxt) +{ + _rl_unsave_saved_readstr_line (); /* restores rl_undo_list */ + rl_point = cxt->save_point; + rl_mark = cxt->save_mark; + if (cxt->flags & READSTR_FREEPMT) + rl_restore_prompt (); /* _rl_make_prompt_for_search saved it */ + cxt->flags &= ~READSTR_FREEPMT; + rl_clear_message (); + _rl_fix_point (1); +} + +int +_rl_readstr_sigcleanup (_rl_readstr_cxt *cxt, int r) +{ + if (cxt->flags & READSTR_FREEPMT) + rl_restore_prompt (); /* _rl_make_prompt_for_search saved it */ + cxt->flags &= ~READSTR_FREEPMT; + return (_rl_readstr_cleanup (cxt, r)); +} + +int +_rl_readstr_getchar (_rl_readstr_cxt *cxt) +{ + int c; + + cxt->prevc = cxt->lastc; + + /* Read a key and decide how to proceed. */ + RL_SETSTATE(RL_STATE_MOREINPUT); + c = cxt->lastc = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + +#if defined (HANDLE_MULTIBYTE) + /* This ends up with C (and LASTC) being set to the last byte of the + multibyte character. In most cases c == lastc == mb[0] */ + if (c >= 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0) + c = cxt->lastc = _rl_read_mbstring (cxt->lastc, cxt->mb, MB_LEN_MAX); +#endif + + RL_CHECK_SIGNALS (); + return c; +} + +/* Process just-read character C according to readstr context CXT. Return -1 + if the caller should abort the read, 0 if we should break out of the + loop, and 1 if we should continue to read characters. This can perform + completion on the string read so far (stored in rl_line_buffer) if the + caller has set up a completion function. The completion function can + return -1 to indicate that we should abort the read. If we return -1 + we will call _rl_readstr_restore to clean up the state, leaving the caller + to free the context. */ +int +_rl_readstr_dispatch (_rl_readstr_cxt *cxt, int c) +{ + int n; + + if (c < 0) + c = CTRL ('C'); + + /* could consider looking up the function bound to they key and dispatching + off that, but you want most characters inserted by default without having + to quote. */ + switch (c) + { + case CTRL('W'): + rl_unix_word_rubout (1, c); + break; + + case CTRL('U'): + rl_unix_line_discard (1, c); + break; + + case CTRL('Q'): + case CTRL('V'): + n = rl_quoted_insert (1, c); + if (n < 0) + { + _rl_readstr_restore (cxt); + return -1; + } + cxt->lastc = (rl_point > 0) ? rl_line_buffer[rl_point - 1] : rl_line_buffer[0]; /* preserve prevc */ + break; + + case RETURN: + case NEWLINE: + return 0; + + case CTRL('H'): + case RUBOUT: + if (rl_point == 0) + { + _rl_readstr_restore (cxt); + return -1; + } + _rl_rubout_char (1, c); + break; + + case CTRL('C'): + case CTRL('G'): + rl_ding (); + _rl_readstr_restore (cxt); + return -1; + + case ESC: + /* Allow users to bracketed-paste text into the string. + Similar code is in search.c:_rl_nsearch_dispatch(). */ + if (_rl_enable_bracketed_paste && ((n = _rl_nchars_available ()) >= (BRACK_PASTE_SLEN-1))) + { + if (_rl_read_bracketed_paste_prefix (c) == 1) + rl_bracketed_paste_begin (1, c); + else + { + c = rl_read_key (); /* get the ESC that got pushed back */ + _rl_insert_char (1, c); + } + } + else + _rl_insert_char (1, c); + break; + + case ' ': + if ((cxt->flags & READSTR_NOSPACE) == 0) + { + _rl_insert_char (1, c); + break; + } + /* FALLTHROUGH */ + case TAB: + /* Perform completion if the caller has set a completion function. */ + n = (cxt->compfunc) ? (*cxt->compfunc) (cxt, c) : _rl_insert_char (1, c); + if (n < 0) + { + _rl_readstr_restore (cxt); + return -1; + } + break; + +#if 0 + case CTRL('_'): + rl_do_undo (); + break; +#endif + + default: +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + rl_insert_text (cxt->mb); + else +#endif + _rl_insert_char (1, c); + break; + } + + (*rl_redisplay_function) (); + rl_deactivate_mark (); + return 1; +} + +/* **************************************************************** */ +/* */ +/* Reading and Executing named commands */ +/* */ +/* **************************************************************** */ + +/* A completion generator for bindable readline command names. */ +static char * +readcmd_completion_function (const char *text, int state) +{ + static const char **cmdlist = NULL; + static size_t lind, nlen; + const char *cmdname; + + if (state == 0) + { + if (cmdlist) + free (cmdlist); + + cmdlist = rl_funmap_names (); + lind = 0; + nlen = RL_STRLEN (text); + } + if (cmdlist == 0 || cmdlist[lind] == 0) + return (char *)NULL; + + while (cmdlist[lind]) + { + cmdname = cmdlist[lind++]; + if (STREQN (text, cmdname, nlen)) + return (savestring (cmdname)); + } + return ((char *)NULL); +} + +static void +_rl_display_cmdname_matches (char **matches) +{ + size_t len, max, i; + int old; + + old = rl_filename_completion_desired; + rl_filename_completion_desired = 0; + + /* There is more than one match. Find out how many there are, + and find the maximum printed length of a single entry. */ + for (max = 0, i = 1; matches[i]; i++) + { + len = strlen (matches[i]); + + if (len > max) + max = len; + } + len = i - 1; + + rl_display_match_list (matches, len, max); + rl_filename_completion_desired = old; + + rl_forced_update_display (); + rl_display_fixed = 1; +} + +static int +_rl_readcmd_complete (_rl_readstr_cxt *cxt, int c) +{ + char **matches; + char *prefix; + size_t plen; + + matches = rl_completion_matches (rl_line_buffer, readcmd_completion_function); + + if (RL_SIG_RECEIVED()) + { + _rl_free_match_list (matches); + matches = 0; + RL_CHECK_SIGNALS (); + return -1; + } + else if (matches == 0) + rl_ding (); + + /* Whether or not there are multiple matches, we just want to append the + new characters in matches[0]. We display possible matches if we didn't + append anything. */ + if (matches) + { + prefix = matches[0]; + plen = strlen (prefix); + + if (plen > rl_end) + { + size_t n; + for (n = rl_end; n < plen && prefix[n]; n++) + _rl_insert_char (1, prefix[n]); + } + else if (matches[1]) + _rl_display_cmdname_matches (matches); + _rl_free_match_list (matches); + } + + return 0; +} + +/* Use the readstr functions to read a bindable command name using the + line buffer, with completion. */ +static char * +_rl_read_command_name () +{ + _rl_readstr_cxt *cxt; + char *ret; + int c, r; + + cxt = _rl_readstr_init ('!', READSTR_NOSPACE); + cxt->compfunc = _rl_readcmd_complete; + + /* skip callback stuff for now */ + r = 0; + while (1) + { + c = _rl_readstr_getchar (cxt); + + if (c < 0) + { + _rl_readstr_restore (cxt); + _rl_readstr_cleanup (cxt, r); + return NULL; + } + + if (c == 0) + break; + + r = _rl_readstr_dispatch (cxt, c); + if (r < 0) + { + _rl_readstr_cleanup (cxt, r); + return NULL; /* dispatch function cleans up */ + } + else if (r == 0) + break; + } + + ret = savestring (rl_line_buffer); + + /* Now restore the original line and perform one final redisplay. */ + _rl_readstr_restore (cxt); + (*rl_redisplay_function) (); + + /* And free up the context. */ + _rl_readstr_cleanup (cxt, r); + return ret; +} + +/* Read a command name from the keyboard and execute it as if the bound key + sequence had been entered. */ +int +rl_execute_named_command (int count, int key) +{ + char *command; + rl_command_func_t *func; + int r; + + command = _rl_read_command_name (); + if (command == 0 || *command == '\0') + return 1; + if (func = rl_named_function (command)) + { + int prev, ostate; + + prev = rl_dispatching; + ostate = RL_ISSTATE (RL_STATE_DISPATCHING); + rl_dispatching = 1; + RL_SETSTATE (RL_STATE_DISPATCHING); /* make sure it's set */ + r = (*func) (count, key); + if (ostate == 0) + RL_UNSETSTATE (RL_STATE_DISPATCHING); /* unset it if it wasn't set */ + rl_dispatching = prev; + } + else + { + rl_ding (); + r = 1; + } + + free (command); + return r; +} diff --git a/lib/readline/tilde.c b/lib/readline/tilde.c index d678a31ab..734b20846 100644 --- a/lib/readline/tilde.c +++ b/lib/readline/tilde.c @@ -1,6 +1,6 @@ /* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */ -/* Copyright (C) 1988-2020 Free Software Foundation, Inc. +/* Copyright (C) 1988-2020,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -68,14 +68,6 @@ extern struct passwd *getpwnam (const char *); #define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x)) #endif /* !savestring */ -#if !defined (NULL) -# if defined (__STDC__) -# define NULL ((void *) 0) -# else -# define NULL 0x0 -# endif /* !__STDC__ */ -#endif /* !NULL */ - /* If being compiled as part of bash, these will be satisfied from variables.o. If being compiled as part of readline, they will be satisfied from shell.o. */ @@ -160,8 +152,9 @@ tilde_find_prefix (const char *string, int *len) static int tilde_find_suffix (const char *string) { - register int i, j, string_len; - register char **suffixes; + int i, j; + size_t string_len; + char **suffixes; suffixes = tilde_additional_suffixes; string_len = strlen (string); @@ -189,7 +182,7 @@ char * tilde_expand (const char *string) { char *result; - int result_size, result_index; + size_t result_size, result_index; result_index = result_size = 0; if (result = strchr (string, '~')) @@ -200,7 +193,7 @@ tilde_expand (const char *string) /* Scan through STRING expanding tildes as we come to them. */ while (1) { - register int start, end; + int start, end; char *tilde_word, *expansion; int len; @@ -318,7 +311,7 @@ static char * glue_prefix_and_suffix (char *prefix, const char *suffix, int suffind) { char *ret; - int plen, slen; + size_t plen, slen; plen = (prefix && *prefix) ? strlen (prefix) : 0; slen = strlen (suffix + suffind); diff --git a/lib/readline/undo.c b/lib/readline/undo.c index e4c457dce..492894c33 100644 --- a/lib/readline/undo.c +++ b/lib/readline/undo.c @@ -116,12 +116,14 @@ _rl_free_undo_list (UNDO_LIST *ul) void rl_free_undo_list (void) { - UNDO_LIST *release, *orig_list; + UNDO_LIST *orig_list; orig_list = rl_undo_list; _rl_free_undo_list (rl_undo_list); rl_undo_list = (UNDO_LIST *)NULL; _hs_replace_history_data (-1, (histdata_t *)orig_list, (histdata_t *)NULL); + if (_rl_saved_line_for_history && (UNDO_LIST *)_rl_saved_line_for_history->data == orig_list) + _rl_saved_line_for_history->data = 0; } UNDO_LIST * diff --git a/lib/readline/util.c b/lib/readline/util.c index 2e986db0a..2a247034b 100644 --- a/lib/readline/util.c +++ b/lib/readline/util.c @@ -43,8 +43,8 @@ #include <ctype.h> /* System-specific feature definitions and include files. */ -#include "rldefs.h" #include "rlmbutil.h" +#include "rldefs.h" #if defined (TIOCSTAT_IN_SYS_IOCTL) # include <sys/ioctl.h> @@ -229,26 +229,12 @@ rl_tilde_expand (int ignore, int key) return (0); } -#if defined (USE_VARARGS) void -#if defined (PREFER_STDARG) _rl_ttymsg (const char *format, ...) -#else -_rl_ttymsg (va_alist) - va_dcl -#endif { va_list args; -#if defined (PREFER_VARARGS) - char *format; -#endif -#if defined (PREFER_STDARG) va_start (args, format); -#else - va_start (args); - format = va_arg (args, char *); -#endif fprintf (stderr, "readline: "); vfprintf (stderr, format, args); @@ -261,24 +247,11 @@ _rl_ttymsg (va_alist) } void -#if defined (PREFER_STDARG) _rl_errmsg (const char *format, ...) -#else -_rl_errmsg (va_alist) - va_dcl -#endif { va_list args; -#if defined (PREFER_VARARGS) - char *format; -#endif -#if defined (PREFER_STDARG) va_start (args, format); -#else - va_start (args); - format = va_arg (args, char *); -#endif fprintf (stderr, "readline: "); vfprintf (stderr, format, args); @@ -288,28 +261,6 @@ _rl_errmsg (va_alist) va_end (args); } -#else /* !USE_VARARGS */ -void -_rl_ttymsg (format, arg1, arg2) - char *format; -{ - fprintf (stderr, "readline: "); - fprintf (stderr, format, arg1, arg2); - fprintf (stderr, "\n"); - - rl_forced_update_display (); -} - -void -_rl_errmsg (format, arg1, arg2) - char *format; -{ - fprintf (stderr, "readline: "); - fprintf (stderr, format, arg1, arg2); - fprintf (stderr, "\n"); -} -#endif /* !USE_VARARGS */ - /* **************************************************************** */ /* */ /* String Utility Functions */ @@ -321,7 +272,8 @@ _rl_errmsg (format, arg1, arg2) char * _rl_strindex (const char *s1, const char *s2) { - register int i, l, len; + int i; + size_t l, len; for (i = 0, l = strlen (s2), len = strlen (s1); (len - i) >= l; i++) if (_rl_strnicmp (s1 + i, s2, l) == 0) @@ -329,9 +281,10 @@ _rl_strindex (const char *s1, const char *s2) return ((char *)NULL); } -#ifndef HAVE_STRPBRK +#if !defined (HAVE_STRPBRK) || defined (HANDLE_MULTIBYTE) /* Find the first occurrence in STRING1 of any character from STRING2. - Return a pointer to the character in STRING1. */ + Return a pointer to the character in STRING1. Understands multibyte + characters. */ char * _rl_strpbrk (const char *string1, const char *string2) { @@ -417,6 +370,48 @@ _rl_stricmp (const char *string1, const char *string2) } #endif /* !HAVE_STRCASECMP */ +/* Compare the first N characters of S1 and S2 without regard to case. If + FLAGS&1, apply the mapping specified by completion-map-case and make + `-' and `_' equivalent. Returns 1 if the strings are equal. */ +int +_rl_strcaseeqn(const char *s1, const char *s2, size_t n, int flags) +{ + int c1, c2; + int d; + + if ((flags & 1) == 0) + return (_rl_strnicmp (s1, s2, n) == 0); + + do + { + c1 = _rl_to_lower (*s1); + c2 = _rl_to_lower (*s2); + + d = c1 - c2; + if ((*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) + d = 0; /* case insensitive character mapping */ + if (d != 0) + return 0; + s1++; + s2++; + n--; + } + while (n != 0); + + return 1; +} + +/* Return 1 if the characters C1 and C2 are equal without regard to case. + If FLAGS&1, apply the mapping specified by completion-map-case and make + `-' and `_' equivalent. */ +int +_rl_charcasecmp (int c1, int c2, int flags) +{ + if ((flags & 1) && (c1 == '-' || c1 == '_') && (c2 == '-' || c2 == '_')) + return 1; + return ( _rl_to_lower (c1) == _rl_to_lower (c2)); +} + /* Stupid comparison routine for qsort () ing strings. */ int _rl_qsort_string_compare (char **s1, char **s2) @@ -464,28 +459,14 @@ _rl_savestring (const char *s) } #if defined (DEBUG) -#if defined (USE_VARARGS) static FILE *_rl_tracefp; void -#if defined (PREFER_STDARG) _rl_trace (const char *format, ...) -#else -_rl_trace (va_alist) - va_dcl -#endif { va_list args; -#if defined (PREFER_VARARGS) - char *format; -#endif -#if defined (PREFER_STDARG) va_start (args, format); -#else - va_start (args); - format = va_arg (args, char *); -#endif if (_rl_tracefp == 0) _rl_tropen (); @@ -531,7 +512,6 @@ _rl_settracefp (FILE *fp) { _rl_tracefp = fp; } -#endif #endif /* DEBUG */ diff --git a/lib/readline/vi_mode.c b/lib/readline/vi_mode.c index 3a033bab4..762a214e8 100644 --- a/lib/readline/vi_mode.c +++ b/lib/readline/vi_mode.c @@ -1,7 +1,7 @@ /* vi_mode.c -- A vi emulation mode for Bash. Derived from code written by Jeff Sparkes (jsparkes@bnr.ca). */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2021,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -76,6 +76,10 @@ #define INCREMENT_POS(start) (start)++ #endif /* !HANDLE_MULTIBYTE */ +/* Flags for the motion context */ +#define MOVE_SUCCESS 0 +#define MOVE_FAILED 0x01 + /* This is global so other parts of the code can check whether the last command was a text modification command. */ int _rl_vi_last_command = 'i'; /* default `.' puts you in insert mode */ @@ -101,9 +105,8 @@ static int vi_replace_count; /* If non-zero, we have text inserted after a c[motion] command that put us implicitly into insert mode. Some people want this text to be attached to the command so that it is `redoable' with `.'. */ -static int vi_continued_command; static char *vi_insert_buffer; -static int vi_insert_buffer_size; +static size_t vi_insert_buffer_size; static int _rl_vi_last_repeat = 1; static int _rl_vi_last_arg_sign = 1; @@ -364,12 +367,12 @@ rl_vi_search (int count, int key) switch (key) { case '?': - _rl_free_saved_history_line (); + _rl_free_saved_search_line (); /* just in case */ rl_noninc_forward_search (count, key); break; case '/': - _rl_free_saved_history_line (); + _rl_free_saved_search_line (); rl_noninc_reverse_search (count, key); break; @@ -1087,6 +1090,7 @@ _rl_vi_arg_dispatch (int c) } else { + rl_restore_prompt (); rl_clear_message (); rl_stuff_char (key); return 0; /* done */ @@ -1150,10 +1154,27 @@ _rl_mvcxt_dispose (_rl_vimotion_cxt *m) xfree (m); } +static inline int +vi_charsearch_command (int c) +{ + switch (c) + { + case 'f': + case 'F': + case 't': + case 'T': + case ';': + case ',': + return 1; + default: + return 0; + } +} + static int rl_domove_motion_callback (_rl_vimotion_cxt *m) { - int c; + int c, r, opoint; _rl_vi_last_motion = c = m->motion; @@ -1163,8 +1184,15 @@ rl_domove_motion_callback (_rl_vimotion_cxt *m) rl_extend_line_buffer (rl_end + 1); rl_line_buffer[rl_end++] = ' '; rl_line_buffer[rl_end] = '\0'; + opoint = rl_point; + + r = _rl_dispatch (c, _rl_keymap); - _rl_dispatch (c, _rl_keymap); + /* Note in the context that the motion command failed. Right now we only do + this for unsuccessful searches (ones where _rl_dispatch returns non-zero + and point doesn't move). */ + if (r != 0 && rl_point == opoint && vi_charsearch_command (c)) + m->flags |= MOVE_FAILED; #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) @@ -1199,7 +1227,15 @@ _rl_vi_domove_motion_cleanup (int c, _rl_vimotion_cxt *m) { /* 'c' and 'C' enter insert mode after the delete even if the motion didn't delete anything, as long as the motion command is valid. */ - if (_rl_to_upper (m->key) == 'C' && _rl_vi_motion_command (c)) + if (_rl_to_upper (m->key) == 'C' && _rl_vi_motion_command (c) && (m->flags & MOVE_FAILED) == 0) + return (vidomove_dispatch (m)); + /* 'd' and 'D' must delete at least one character even if the motion + command doesn't move the cursor. */ + if (_rl_to_upper (m->key) == 'D' && _rl_vi_motion_command (c) && (m->flags & MOVE_FAILED) == 0) + return (vidomove_dispatch (m)); + /* 'y' and 'Y' must yank at least one character even if the motion + command doean't move the cursor. */ + if (_rl_to_upper (m->key) == 'Y' && _rl_vi_motion_command (c) && (m->flags & MOVE_FAILED) == 0) return (vidomove_dispatch (m)); RL_UNSETSTATE (RL_STATE_VIMOTION); return (-1); @@ -1285,7 +1321,7 @@ rl_domove_read_callback (_rl_vimotion_cxt *m) /* Readine vi motion char starting numeric argument */ else if (_rl_digit_p (c) && RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_VIMOTION) && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)) { - RL_SETSTATE (RL_STATE_NUMERICARG); + _rl_arg_init (); return (_rl_vi_arg_dispatch (c)); } #endif @@ -1295,7 +1331,7 @@ rl_domove_read_callback (_rl_vimotion_cxt *m) save = rl_numeric_arg; rl_numeric_arg = _rl_digit_value (c); rl_explicit_arg = 1; - RL_SETSTATE (RL_STATE_NUMERICARG); + _rl_arg_init (); rl_digit_loop1 (); rl_numeric_arg *= save; c = rl_vi_domove_getchar (m); @@ -1304,6 +1340,13 @@ rl_domove_read_callback (_rl_vimotion_cxt *m) m->motion = 0; return -1; } + else if (member (c, vi_motion) == 0) + { + m->motion = 0; + RL_UNSETSTATE (RL_STATE_VIMOTION); + RL_UNSETSTATE (RL_STATE_NUMERICARG); + return (1); + } m->motion = c; return (rl_domove_motion_callback (m)); } @@ -1328,6 +1371,7 @@ _rl_vi_domove_callback (_rl_vimotion_cxt *m) int c, r; m->motion = c = rl_vi_domove_getchar (m); + if (c < 0) return 1; /* EOF */ r = rl_domove_read_callback (m); @@ -1340,7 +1384,6 @@ _rl_vi_domove_callback (_rl_vimotion_cxt *m) int rl_vi_domove (int x, int *ignore) { - int r; _rl_vimotion_cxt *m; m = _rl_vimvcxt; @@ -1381,7 +1424,11 @@ rl_vi_delete_to (int count, int key) _rl_vimvcxt = _rl_mvcxt_alloc (VIM_DELETE, key); } else if (_rl_vimvcxt) - _rl_mvcxt_init (_rl_vimvcxt, VIM_DELETE, key); + { + /* are we being called recursively or by `y' or `c'? */ + savecxt = _rl_vimvcxt; + _rl_vimvcxt = _rl_mvcxt_alloc (VIM_DELETE, key); + } else _rl_vimvcxt = _rl_mvcxt_alloc (VIM_DELETE, key); @@ -1480,7 +1527,11 @@ rl_vi_change_to (int count, int key) _rl_vimvcxt = _rl_mvcxt_alloc (VIM_CHANGE, key); } else if (_rl_vimvcxt) - _rl_mvcxt_init (_rl_vimvcxt, VIM_CHANGE, key); + { + /* are we being called recursively or by `y' or `d'? */ + savecxt = _rl_vimvcxt; + _rl_vimvcxt = _rl_mvcxt_alloc (VIM_CHANGE, key); + } else _rl_vimvcxt = _rl_mvcxt_alloc (VIM_CHANGE, key); _rl_vimvcxt->start = rl_point; @@ -1559,7 +1610,11 @@ rl_vi_yank_to (int count, int key) _rl_vimvcxt = _rl_mvcxt_alloc (VIM_YANK, key); } else if (_rl_vimvcxt) - _rl_mvcxt_init (_rl_vimvcxt, VIM_YANK, key); + { + /* are we being called recursively or by `c' or `d'? */ + savecxt = _rl_vimvcxt; + _rl_vimvcxt = _rl_mvcxt_alloc (VIM_YANK, key); + } else _rl_vimvcxt = _rl_mvcxt_alloc (VIM_YANK, key); _rl_vimvcxt->start = rl_point; diff --git a/lib/readline/xmalloc.c b/lib/readline/xmalloc.c index 5d01d75ea..35e46eafe 100644 --- a/lib/readline/xmalloc.c +++ b/lib/readline/xmalloc.c @@ -42,7 +42,7 @@ /* **************************************************************** */ static void -memory_error_and_abort (char *fname) +memory_error_and_abort (const char * const fname) { fprintf (stderr, "%s: out of virtual memory\n", fname); exit (2); diff --git a/lib/readline/xmalloc.h b/lib/readline/xmalloc.h index 0fb9df9c0..c8198044e 100644 --- a/lib/readline/xmalloc.h +++ b/lib/readline/xmalloc.h @@ -1,6 +1,6 @@ /* xmalloc.h -- memory allocation that aborts on errors. */ -/* Copyright (C) 1999-2009,2010-2021 Free Software Foundation, Inc. +/* Copyright (C) 1999-2009,2010-2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -29,13 +29,7 @@ #endif #ifndef PTR_T - -#ifdef __STDC__ -# define PTR_T void * -#else -# define PTR_T char * -#endif - +# define PTR_T void * #endif /* !PTR_T */ extern PTR_T xmalloc (size_t); diff --git a/lib/sh/Makefile.in b/lib/sh/Makefile.in index 8c42c73d0..c57052e75 100644 --- a/lib/sh/Makefile.in +++ b/lib/sh/Makefile.in @@ -91,10 +91,11 @@ CSOURCES = clktck.c clock.c getcwd.c getenv.c oslib.c setlinebuf.c \ fmtulong.c fmtullong.c fmtumax.c shmatch.c strnlen.c \ strtoll.c strtoull.c strtoimax.c strtoumax.c memset.c strstr.c \ mktime.c strftime.c mbschr.c zcatfd.c zmapfd.c winsize.c eaccess.c \ - wcsdup.c fpurge.c zgetline.c mbscmp.c uconvert.c ufuncs.c \ - casemod.c dprintf.c input_avail.c mbscasecmp.c fnxform.c \ + wcsdup.c fpurge.c zgetline.c mbscmp.c mbsncmp.c uconvert.c \ + ufuncs.c casemod.c dprintf.c input_avail.c mbscasecmp.c fnxform.c \ strchrnul.c unicode.c wcswidth.c wcsnwidth.c shmbchar.c strdup.c \ - strvis.c utf8.c random.c gettimeofday.c timers.c + strvis.c strlcpy.c strscpy.c utf8.c random.c gettimeofday.c \ + timers.c anonfile.c reallocarray.c compat.c # The header files for this library. HSOURCES = @@ -107,8 +108,9 @@ OBJECTS = clktck.o clock.o getenv.o oslib.o setlinebuf.o strnlen.o \ pathphys.o tmpfile.o stringlist.o stringvec.o spell.o shquote.o \ strtrans.o snprintf.o mailstat.o fmtulong.o \ fmtullong.o fmtumax.o zcatfd.o zmapfd.o winsize.o wcsdup.o \ - fpurge.o zgetline.o mbscmp.o uconvert.o ufuncs.o casemod.o \ + fpurge.o zgetline.o mbscmp.o mbsncmp.o uconvert.o ufuncs.o casemod.o \ input_avail.o mbscasecmp.o fnxform.o unicode.o shmbchar.o strvis.o \ + strscpy.o anonfile.o compat.o \ utf8.o random.o gettimeofday.o timers.o wcsnwidth.o ${LIBOBJS} SUPPORT = Makefile @@ -144,9 +146,11 @@ ${BUILD_DIR}/pathnames.h: ${BUILD_DIR}/config.h ${BUILD_DIR}/Makefile Makefile -( cd ${BUILD_DIR} && ${MAKE} ${MFLAGS} pathnames.h ) # rules for losing makes, like SunOS +anonfile.o: anonfile.c casemod.o: casemod.c clktck.o: clktck.c clock.o: clock.c +compat.o: compat.c eaccess.o: eaccess.c dprintf.o: dprintf.c fmtullong.o: fmtullong.c @@ -165,6 +169,7 @@ makepath.o: makepath.c mbscasecmp.o: mbscasecmp.c mbschr.o: mbschr.c mbscmp.o: mbscmp.c +mbsncmp.o: mbsncmp.c memset.o: memset.c mktime.o: mktime.c netconn.o: netconn.c @@ -173,6 +178,7 @@ oslib.o: oslib.c pathcanon.o: pathcanon.c pathphys.o: pathphys.c random.o: random.c +reallocarray.o: reallocarray.c rename.o: rename.c setlinebuf.o: setlinebuf.c shmatch.o: shmatch.c @@ -199,6 +205,8 @@ strtoull.o: strtoull.c strtoumax.o: strtoumax.c strtrans.o: strtrans.c strvis.o: strvis.c +strlcpy.o: strlcpy.c +strscpy.o: strscpy.c timers.o: timers.c times.o: times.c timeval.o: timeval.c @@ -226,9 +234,11 @@ strtoul.o: strtol.c strtoull.o: strtol.c # all files in the library depend on config.h +anonfile.o: ${BUILD_DIR}/config.h casemod.o: ${BUILD_DIR}/config.h clktck.o: ${BUILD_DIR}/config.h clock.o: ${BUILD_DIR}/config.h +compat.o: ${BUILD_DIR}/config.h eaccess.o: ${BUILD_DIR}/config.h dprintf.o: ${BUILD_DIR}/config.h fmtullong.o: ${BUILD_DIR}/config.h @@ -247,6 +257,7 @@ makepath.o: ${BUILD_DIR}/config.h mbscasecmp.o: ${BUILD_DIR}/config.h mbschr.o: ${BUILD_DIR}/config.h mbscmp.o: ${BUILD_DIR}/config.h +mbsncmp.o: ${BUILD_DIR}/config.h memset.o: ${BUILD_DIR}/config.h mktime.o: ${BUILD_DIR}/config.h netconn.o: ${BUILD_DIR}/config.h @@ -255,6 +266,7 @@ oslib.o: ${BUILD_DIR}/config.h pathcanon.o: ${BUILD_DIR}/config.h pathphys.o: ${BUILD_DIR}/config.h random.o: ${BUILD_DIR}/config.h +reallocarray.o: ${BUILD_DIR}/config.h rename.o: ${BUILD_DIR}/config.h setlinebuf.o: ${BUILD_DIR}/config.h shmatch.o: ${BUILD_DIR}/config.h @@ -281,6 +293,8 @@ strtoull.o: ${BUILD_DIR}/config.h strtoumax.o: ${BUILD_DIR}/config.h strtrans.o: ${BUILD_DIR}/config.h strvis.o: ${BUILD_DIR}/config.h +strlcpy.o: ${BUILD_DIR}/config.h +strscpy.o: ${BUILD_DIR}/config.h timers.o: ${BUILD_DIR}/config.h times.o: ${BUILD_DIR}/config.h timeval.o: ${BUILD_DIR}/config.h @@ -519,6 +533,14 @@ strvis.o: ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/chartypes.h strvis.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h strvis.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h +strlcpy.o: ${topdir}/bashansi.h +strlcpy.o: ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/chartypes.h +strlcpy.o: ${BASHINCDIR}/typemax.h + +strscpy.o: ${topdir}/bashansi.h +strscpy.o: ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/chartypes.h +strscpy.o: ${BASHINCDIR}/typemax.h + times.o: ${BASHINCDIR}/systimes.h times.o: ${BASHINCDIR}/posixtime.h @@ -537,7 +559,6 @@ tmpfile.o: ${topdir}/unwind_prot.h ${topdir}/dispose_cmd.h tmpfile.o: ${topdir}/make_cmd.h ${topdir}/subst.h ${topdir}/sig.h tmpfile.o: ${BUILD_DIR}/pathnames.h ${topdir}/externs.h -uconvert.o: ${topdir}/bashtypes.h uconvert.o: ${BASHINCDIR}/chartypes.h uconvert.o: ${topdir}/shell.h ${topdir}/syntax.h ${topdir}/bashjmp.h ${BASHINCDIR}/posixjmp.h uconvert.o: ${topdir}/command.h ${BASHINCDIR}/stdc.h ${topdir}/error.h @@ -548,6 +569,7 @@ uconvert.o: ${topdir}/make_cmd.h ${topdir}/subst.h ${topdir}/sig.h uconvert.o: ${BUILD_DIR}/pathnames.h ${topdir}/externs.h ufuncs.o: ${topdir}/bashtypes.h +ufuncs.o: ${BASHINCDIR}/posixtime.h ${BASHINCDIR}/posixselect.h clock.o: ${BASHINCDIR}/posixtime.h @@ -606,6 +628,10 @@ mbscmp.o: ${topdir}/bashansi.h ${BASHINCDIR}/ansi_stdlib.h mbscmp.o: ${BASHINCDIR}/stdc.h mbscmp.o: ${topdir}/xmalloc.h +mbsncmp.o: ${topdir}/bashansi.h ${BASHINCDIR}/ansi_stdlib.h +mbsncmp.o: ${BASHINCDIR}/stdc.h +mbsncmp.o: ${topdir}/xmalloc.h + casemod.o: ${topdir}/bashansi.h ${BASHINCDIR}/ansi_stdlib.h casemod.o: ${BASHINCDIR}/stdc.h casemod.o: ${topdir}/xmalloc.h @@ -655,3 +681,27 @@ zmapfd.o: ${BASHINCDIR}/stdc.h zmapfd.o: ${topdir}/command.h zmapfd.o: ${topdir}/general.h zmapfd.o: ${topdir}/bashtypes.h ${BASHINCDIR}/chartypes.h ${topdir}/xmalloc.h + +anonfile.o: ${topdir}/bashansi.h ${BASHINCDIR}/ansi_stdlib.h +anonfile.o: ${topdir}/bashtypes.h +anonfile.o: ${BASHINCDIR}/filecntl.h +anonfile.o: ${topdir}/shell.h ${topdir}/syntax.h ${topdir}/bashjmp.h ${BASHINCDIR}/posixjmp.h +anonfile.o: ${topdir}/command.h ${BASHINCDIR}/stdc.h ${topdir}/error.h +anonfile.o: ${topdir}/general.h ${topdir}/bashtypes.h ${topdir}/variables.h ${topdir}/conftypes.h +anonfile.o: ${topdir}/array.h ${topdir}/hashlib.h ${topdir}/quit.h +anonfile.o: ${topdir}/unwind_prot.h ${topdir}/dispose_cmd.h +anonfile.o: ${topdir}/make_cmd.h ${topdir}/subst.h ${topdir}/sig.h +anonfile.o: ${BUILD_DIR}/pathnames.h ${topdir}/externs.h + +reallocarray.o: ${topdir}/bashansi.h ${BASHINCDIR}/ansi_stdlib.h + +compat.o: ${topdir}/bashansi.h ${BASHINCDIR}/ansi_stdlib.h +compat.o: ${topdir}/bashtypes.h +compat.o: ${BASHINCDIR}/filecntl.h +compat.o: ${topdir}/shell.h ${topdir}/syntax.h ${topdir}/bashjmp.h ${BASHINCDIR}/posixjmp.h +compat.o: ${topdir}/command.h ${BASHINCDIR}/stdc.h ${topdir}/error.h +compat.o: ${topdir}/general.h ${topdir}/bashtypes.h ${topdir}/variables.h ${topdir}/conftypes.h +compat.o: ${topdir}/array.h ${topdir}/hashlib.h ${topdir}/quit.h +compat.o: ${topdir}/unwind_prot.h ${topdir}/dispose_cmd.h +compat.o: ${topdir}/make_cmd.h ${topdir}/subst.h ${topdir}/sig.h +compat.o: ${BUILD_DIR}/pathnames.h ${topdir}/externs.h diff --git a/lib/sh/casemod.c b/lib/sh/casemod.c index 0403f91cf..8529db3ec 100644 --- a/lib/sh/casemod.c +++ b/lib/sh/casemod.c @@ -1,6 +1,6 @@ /* casemod.c -- functions to change case of strings */ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -67,7 +67,7 @@ #define CASE_USEWORDS 0x1000 /* modify behavior to act on words in passed string */ -extern char *substring PARAMS((char *, int, int)); +extern char *substring (char *, int, int); #ifndef UCHAR_MAX # define UCHAR_MAX TYPE_MAXIMUM(unsigned char) @@ -75,9 +75,7 @@ extern char *substring PARAMS((char *, int, int)); #if defined (HANDLE_MULTIBYTE) static wchar_t -cval (s, i, l) - char *s; - int i, l; +cval (char *s, int i, int l) { size_t tmp; wchar_t wc; @@ -98,10 +96,7 @@ cval (s, i, l) /* Modify the case of characters in STRING matching PAT based on the value of FLAGS. If PAT is null, modify the case of each character */ char * -sh_modcase (string, pat, flags) - const char *string; - char *pat; - int flags; +sh_modcase (const char *string, char *pat, int flags) { int start, next, end, retind; int inword, c, nc, nop, match, usewords; diff --git a/lib/sh/clktck.c b/lib/sh/clktck.c index 8b9b5b325..654647e89 100644 --- a/lib/sh/clktck.c +++ b/lib/sh/clktck.c @@ -1,6 +1,6 @@ /* clktck.c - get the value of CLK_TCK. */ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -44,7 +44,7 @@ #endif /* !HAVE_SYSCONF && !_SC_CLK_TCK */ long -get_clk_tck () +get_clk_tck (void) { static long retval = 0; diff --git a/lib/sh/clock.c b/lib/sh/clock.c index c6c52bf89..7208a3252 100644 --- a/lib/sh/clock.c +++ b/lib/sh/clock.c @@ -1,6 +1,6 @@ /* clock.c - operations on struct tms and clock_t's */ -/* Copyright (C) 1999 Free Software Foundation, Inc. +/* Copyright (C) 1999,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -24,10 +24,7 @@ #include <sys/types.h> #include <posixtime.h> - -#if defined (HAVE_SYS_TIMES_H) -# include <sys/times.h> -#endif +#include <systimes.h> #include <stdio.h> #include <stdc.h> @@ -35,16 +32,13 @@ #include <bashintl.h> #ifndef locale_decpoint -extern int locale_decpoint PARAMS((void)); +extern int locale_decpoint (void); #endif -extern long get_clk_tck PARAMS((void)); +extern long get_clk_tck (void); void -clock_t_to_secs (t, sp, sfp) - clock_t t; - time_t *sp; - int *sfp; +clock_t_to_secs (clock_t t, time_t *sp, long *sfp) { static long clk_tck = -1; @@ -69,19 +63,18 @@ clock_t_to_secs (t, sp, sfp) terms of the value of CLK_TCK, which is what is returned by the `times' call. */ void -print_clock_t (fp, t) - FILE *fp; - clock_t t; +print_clock_t (FILE *fp, clock_t t) { time_t timestamp; long minutes; - int seconds, seconds_fraction; + int seconds; + long seconds_fraction; clock_t_to_secs (t, &timestamp, &seconds_fraction); minutes = timestamp / 60; seconds = timestamp % 60; - fprintf (fp, "%ldm%d%c%03ds", minutes, seconds, locale_decpoint(), seconds_fraction); + fprintf (fp, "%ldm%d%c%03lds", minutes, seconds, locale_decpoint(), seconds_fraction); } #endif /* HAVE_TIMES */ diff --git a/lib/sh/dprintf.c b/lib/sh/dprintf.c index b3b5d6446..1e345a9ff 100644 --- a/lib/sh/dprintf.c +++ b/lib/sh/dprintf.c @@ -1,6 +1,6 @@ /* dprintf -- printf to a file descriptor */ -/* Copyright (C) 2008-2010 Free Software Foundation, Inc. +/* Copyright (C) 2008-2010,2022,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -28,23 +28,11 @@ # include <unistd.h> #endif -#if defined (PREFER_STDARG) -# include <stdarg.h> -#else -# include <varargs.h> -#endif - +#include <stdarg.h> #include <stdio.h> int -#if defined (PREFER_STDARG) dprintf(int fd, const char *format, ...) -#else -dprintf(fd, format, va_alist) - int fd; - const char *format; - va_dcl -#endif { FILE *fp; int fd2, rc, r2; @@ -59,7 +47,7 @@ dprintf(fd, format, va_alist) return -1; } - SH_VA_START (args, format); + va_start (args, format); rc = vfprintf (fp, format, args); fflush (fp); va_end (args); diff --git a/lib/sh/eaccess.c b/lib/sh/eaccess.c index c3043ec13..0d2c44b5c 100644 --- a/lib/sh/eaccess.c +++ b/lib/sh/eaccess.c @@ -1,6 +1,6 @@ /* eaccess.c - eaccess replacement for the shell, plus other access functions. */ -/* Copyright (C) 2006-2020 Free Software Foundation, Inc. +/* Copyright (C) 2006-2020,2022-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -52,15 +52,14 @@ extern int errno; #define F_OK 0 #endif /* R_OK */ -static int path_is_devfd PARAMS((const char *)); -static int sh_stataccess PARAMS((const char *, int)); +static int path_is_devfd (const char *); +static int sh_stataccess (const char *, int); #if HAVE_DECL_SETREGID -static int sh_euidaccess PARAMS((const char *, int)); +static int sh_euidaccess (const char *, int); #endif static int -path_is_devfd (path) - const char *path; +path_is_devfd (const char *path) { if (path[0] == '/' && path[1] == 'd' && strncmp (path, "/dev/fd/", 8) == 0) return 1; @@ -78,9 +77,7 @@ path_is_devfd (path) /* A wrapper for stat () which disallows pathnames that are empty strings and handles /dev/fd emulation on systems that don't have it. */ int -sh_stat (path, finfo) - const char *path; - struct stat *finfo; +sh_stat (const char *path, struct stat *finfo) { static char *pbuf = 0; @@ -97,7 +94,7 @@ sh_stat (path, finfo) intmax_t fd; int r; - if (legal_number (path + 8, &fd) && fd == (int)fd) + if (valid_number (path + 8, &fd) && fd == (int)fd) { r = fstat ((int)fd, finfo); if (r == 0 || errno != EBADF) @@ -112,7 +109,7 @@ sh_stat (path, finfo) effectively a no-op. */ pbuf = xrealloc (pbuf, sizeof (DEV_FD_PREFIX) + strlen (path + 8)); strcpy (pbuf, DEV_FD_PREFIX); - strcat (pbuf, path + 8); + strcpy (pbuf + sizeof (DEV_FD_PREFIX) - 1, path + 8); return (stat (pbuf, finfo)); #endif /* !HAVE_DEV_FD */ } @@ -136,9 +133,7 @@ sh_stat (path, finfo) and don't make the mistake of telling root that any file is executable. This version uses stat(2). */ static int -sh_stataccess (path, mode) - const char *path; - int mode; +sh_stataccess (const char *path, int mode) { struct stat st; @@ -173,9 +168,7 @@ sh_stataccess (path, mode) /* Version to call when uid != euid or gid != egid. We temporarily swap the effective and real uid and gid as appropriate. */ static int -sh_euidaccess (path, mode) - const char *path; - int mode; +sh_euidaccess (const char *path, int mode) { int r, e; @@ -198,9 +191,7 @@ sh_euidaccess (path, mode) #endif int -sh_eaccess (path, mode) - const char *path; - int mode; +sh_eaccess (const char *path, int mode) { int ret; diff --git a/lib/sh/fmtulong.c b/lib/sh/fmtulong.c index 0ccc22b4c..89f0416c8 100644 --- a/lib/sh/fmtulong.c +++ b/lib/sh/fmtulong.c @@ -1,6 +1,6 @@ /* fmtulong.c -- Convert unsigned long int to string. */ -/* Copyright (C) 1998-2011 Free Software Foundation, Inc. +/* Copyright (C) 1998-2011,2023-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -31,9 +31,6 @@ #endif #include <bashansi.h> -#ifdef HAVE_STDDEF_H -# include <stddef.h> -#endif #ifdef HAVE_STDINT_H # include <stdint.h> @@ -54,16 +51,12 @@ extern int errno; #endif -#define x_digs "0123456789abcdef" -#define X_digs "0123456789ABCDEF" +static char const x_digs[16] = "0123456789abcdef"; +static char const X_digs[16] = "0123456789ABCDEF"; + +static char * const all_digs = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_"; -/* XXX -- assumes uppercase letters, lowercase letters, and digits are - contiguous */ -#define FMTCHAR(x) \ - ((x) < 10) ? (x) + '0' \ - : (((x) < 36) ? (x) - 10 + 'a' \ - : (((x) < 62) ? (x) - 36 + 'A' \ - : (((x) == 62) ? '@' : '_'))) +#define FMTCHAR(x) all_digs[(x)] #ifndef FL_PREFIX # define FL_PREFIX 0x01 /* add 0x, 0X, or 0 prefix as appropriate */ @@ -81,12 +74,7 @@ extern int errno; base. The caller passes the output buffer and the size. This should check for buffer underflow, but currently does not. */ char * -fmtulong (ui, base, buf, len, flags) - UNSIGNED_LONG ui; - int base; - char *buf; - size_t len; - int flags; +fmtulong (UNSIGNED_LONG ui, int base, char *buf, size_t len, int flags) { char *p; int sign; diff --git a/lib/sh/fnxform.c b/lib/sh/fnxform.c index 35d7e7378..53db5d68c 100644 --- a/lib/sh/fnxform.c +++ b/lib/sh/fnxform.c @@ -1,6 +1,6 @@ /* fnxform - use iconv(3) to transform strings to and from "filename" format */ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,9 +35,9 @@ #endif #if defined (HAVE_LOCALE_CHARSET) -extern const char *locale_charset PARAMS((void)); +extern const char *locale_charset (void); #else -extern char *get_locale_var PARAMS((char *)); +extern char *get_locale_var (char *); #endif #if defined (HAVE_ICONV) @@ -49,12 +49,12 @@ static iconv_t conv_tofs = (iconv_t)-1; static char *outbuf = 0; static size_t outlen = 0; -static char *curencoding PARAMS((void)); -static void init_tofs PARAMS((void)); -static void init_fromfs PARAMS((void)); +static char *curencoding (void); +static void init_tofs (void); +static void init_fromfs (void); static char * -curencoding () +curencoding (void) { char *loc; #if defined (HAVE_LOCALE_CHARSET) @@ -77,7 +77,7 @@ curencoding () } static void -init_tofs () +init_tofs (void) { char *cur; @@ -86,7 +86,7 @@ init_tofs () } static void -init_fromfs () +init_fromfs (void) { char *cur; @@ -95,9 +95,7 @@ init_fromfs () } char * -fnx_tofs (string, len) - char *string; - size_t len; +fnx_tofs (char *string, size_t len) { #ifdef MACOSX ICONV_CONST char *inbuf; @@ -139,9 +137,7 @@ fnx_tofs (string, len) } char * -fnx_fromfs (string, len) - char *string; - size_t len; +fnx_fromfs (char *string, size_t len) { #ifdef MACOSX ICONV_CONST char *inbuf; @@ -184,15 +180,13 @@ fnx_fromfs (string, len) #else char * -fnx_tofs (string) - char *string; +fnx_tofs (char *string, size_t len) { return string; } char * -fnx_fromfs (string) - char *string; +fnx_fromfs (char *string, size_t len) { return string; } diff --git a/lib/sh/fpurge.c b/lib/sh/fpurge.c index 8cd4e3685..4547b838e 100644 --- a/lib/sh/fpurge.c +++ b/lib/sh/fpurge.c @@ -1,6 +1,6 @@ /* fpurge - Flushing buffers of a FILE stream. */ -/* Copyright (C) 2007-2020 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,7 +29,7 @@ #if HAVE_FPURGE # define fpurge _bash_fpurge #endif -extern int fpurge PARAMS((FILE *stream)); +extern int fpurge (FILE *stream); #if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7 */ # include <stdio_ext.h> diff --git a/lib/sh/getcwd.c b/lib/sh/getcwd.c index d7bd241b1..a3a1f8b5a 100644 --- a/lib/sh/getcwd.c +++ b/lib/sh/getcwd.c @@ -1,6 +1,6 @@ /* getcwd.c -- get pathname of current directory */ -/* Copyright (C) 1991 Free Software Foundation, Inc. +/* Copyright (C) 1991, 2022, 2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -64,19 +64,12 @@ extern int errno; # define lstat stat #endif -#if !defined (NULL) -# define NULL 0 -#endif - /* If the d_fileno member of a struct dirent doesn't return anything useful, we need to check inode number equivalence the hard way. Return 1 if the inode corresponding to PATH/DIR is identical to THISINO. */ #if !defined (D_FILENO_AVAILABLE) static int -_path_checkino (dotp, name, thisino) - char *dotp; - char *name; - ino_t thisino; +_path_checkino (const char *dotp, const char *name, ino_t thisino) { char *fullpath; int r, e; @@ -102,15 +95,8 @@ _path_checkino (dotp, name, thisino) an array is allocated with `malloc'; the array is SIZE bytes long, unless SIZE <= 0, in which case it is as big as necessary. */ -#if defined (__STDC__) char * getcwd (char *buf, size_t size) -#else /* !__STDC__ */ -char * -getcwd (buf, size) - char *buf; - size_t size; -#endif /* !__STDC__ */ { static const char dots[] = "../../../../../../../../../../../../../../../../../../../../../../../\ diff --git a/lib/sh/getenv.c b/lib/sh/getenv.c index 1e682aefb..6917f075a 100644 --- a/lib/sh/getenv.c +++ b/lib/sh/getenv.c @@ -1,7 +1,7 @@ /* getenv.c - get environment variable value from the shell's variable list. */ -/* Copyright (C) 1997-2002 Free Software Foundation, Inc. +/* Copyright (C) 1997-2002,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -47,8 +47,7 @@ extern char **environ; static char *last_tempenv_value = (char *)NULL; char * -getenv (name) - const char *name; +getenv (const char *name) { SHELL_VAR *var; @@ -71,7 +70,8 @@ getenv (name) } else if (environ) { - register int i, len; + int i; + size_t len; /* In some cases, s5r3 invokes getenv() before main(); BSD systems using gprof also exhibit this behavior. This means that @@ -90,20 +90,14 @@ getenv (name) /* Some versions of Unix use _getenv instead. */ char * -_getenv (name) - const char *name; +_getenv (const char *name) { return (getenv (name)); } /* SUSv3 says argument is a `char *'; BSD implementations disagree */ int -putenv (str) -#ifndef HAVE_STD_PUTENV - const char *str; -#else - char *str; -#endif +putenv (char *str) { SHELL_VAR *var; char *name, *value; @@ -142,22 +136,14 @@ putenv (str) #if 0 int -_putenv (name) -#ifndef HAVE_STD_PUTENV - const char *name; -#else - char *name; -#endif +_putenv (char *name) { return putenv (name); } #endif int -setenv (name, value, rewrite) - const char *name; - const char *value; - int rewrite; +setenv (const char *name, const char *value, int rewrite) { SHELL_VAR *var; char *v; @@ -188,33 +174,22 @@ setenv (name, value, rewrite) #if 0 int -_setenv (name, value, rewrite) - const char *name; - const char *value; - int rewrite; +_setenv (const char *name, const char *value, int rewrite) { return setenv (name, value, rewrite); } #endif -/* SUSv3 says unsetenv returns int; existing implementations (BSD) disagree. */ +/* SUSv3 says unsetenv returns int; existing implementations (BSD) disagree. + POSIX says int. */ -#ifdef HAVE_STD_UNSETENV -#define UNSETENV_RETURN(N) return(N) -#define UNSETENV_RETTYPE int -#else -#define UNSETENV_RETURN(N) return -#define UNSETENV_RETTYPE void -#endif - -UNSETENV_RETTYPE -unsetenv (name) - const char *name; +int +unsetenv (const char *name) { if (name == 0 || *name == '\0' || strchr (name, '=') != 0) { errno = EINVAL; - UNSETENV_RETURN(-1); + return (-1); } /* XXX - should we just remove the export attribute here? */ @@ -228,6 +203,6 @@ unsetenv (name) VUNSETATTR (v, att_exported); #endif - UNSETENV_RETURN(0); + return (0); } #endif /* CAN_REDEFINE_GETENV */ diff --git a/lib/sh/gettimeofday.c b/lib/sh/gettimeofday.c index b654c1547..1b78dcb2f 100644 --- a/lib/sh/gettimeofday.c +++ b/lib/sh/gettimeofday.c @@ -1,6 +1,6 @@ /* gettimeofday.c - gettimeofday replacement using time() */ -/* Copyright (C) 2020 Free Software Foundation, Inc. +/* Copyright (C) 2020, 2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -23,13 +23,37 @@ #if !defined (HAVE_GETTIMEOFDAY) #include "posixtime.h" +#if HAVE_STDINT_H +#include <stdint.h> +#endif -/* A version of gettimeofday that just sets tv_sec from time(3) */ +/* A version of gettimeofday that just sets tv_sec from time(3) on Unix-like + systems that don't have it, or a version for Win32 systems. */ int -gettimeofday (struct timeval *tv, void *tz) +gettimeofday (struct timeval *restrict tv, void *restrict tz) { +#if !defined (_WIN32) tv->tv_sec = (time_t) time ((time_t *)0); tv->tv_usec = 0; +#else + /* EPOCH is the number of 100 nanosecond intervals from + January 1, 1601 (UTC) to January 1, 1970. + (the correct value has 9 trailing zeros) */ + static const uint64_t EPOCH = ((uint64_t) 116444736000000000ULL); + + SYSTEMTIME system_time; + FILETIME file_time; + uint64_t time; + + GetSystemTime(&system_time); + SystemTimeToFileTime(&system_time, &file_time); + time = ((uint64_t)file_time.dwLowDateTime); + time += ((uint64_t)file_time.dwHighDateTime) << 32; + + tp->tv_sec = (long) ((time - EPOCH) / 10000000L); + tp->tv_usec = (long) (system_time.wMilliseconds * 1000); +#endif + return 0; } #endif diff --git a/lib/sh/inet_aton.c b/lib/sh/inet_aton.c index e377178e5..3715850c9 100644 --- a/lib/sh/inet_aton.c +++ b/lib/sh/inet_aton.c @@ -94,8 +94,7 @@ static char rcsid[] = "$Id: inet_addr.c,v 1.5 1996/08/14 03:48:37 drepper Exp $" * The value returned is in network order. */ u_long -inet_addr(cp) - register const char *cp; +inet_addr(const char *cp) { struct in_addr val; @@ -113,9 +112,7 @@ inet_addr(cp) * cannot distinguish between failure and a local broadcast address. */ int -inet_aton(cp, addr) - register const char *cp; - struct in_addr *addr; +inet_aton(const char *cp, struct in_addr *addr) { register u_bits32_t val; register int base, n; diff --git a/lib/sh/input_avail.c b/lib/sh/input_avail.c index 2ac446165..9925bd3cb 100644 --- a/lib/sh/input_avail.c +++ b/lib/sh/input_avail.c @@ -1,7 +1,7 @@ /* input_avail.c -- check whether or not data is available for reading on a specified file descriptor. */ -/* Copyright (C) 2008,2009-2019 Free Software Foundation, Inc. +/* Copyright (C) 2008,2009-2019,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -33,9 +33,7 @@ # include <sys/file.h> #endif /* HAVE_SYS_FILE_H */ -#if defined (HAVE_PSELECT) -# include <signal.h> -#endif +#include <signal.h> #if defined (HAVE_UNISTD_H) # include <unistd.h> @@ -63,8 +61,7 @@ extern int errno; /* Return >= 1 if select/FIONREAD indicates data available for reading on file descriptor FD; 0 if no data available. Return -1 on error. */ int -input_avail (fd) - int fd; +input_avail (int fd) { int result, chars_avail; #if defined(HAVE_SELECT) @@ -102,15 +99,11 @@ input_avail (fd) /* Wait until NCHARS are available for reading on file descriptor FD. This can wait indefinitely. Return -1 on error. */ int -nchars_avail (fd, nchars) - int fd; - int nchars; +nchars_avail (int fd, int nchars) { int result, chars_avail; -#if defined(HAVE_SELECT) - fd_set readfds, exceptfds; -#endif #if defined (HAVE_PSELECT) || defined (HAVE_SELECT) + fd_set readfds, exceptfds; sigset_t set, oset; #endif @@ -121,7 +114,7 @@ nchars_avail (fd, nchars) chars_avail = 0; -#if defined (HAVE_SELECT) +#if defined (HAVE_PSELECT) || defined (HAVE_SELECT) FD_ZERO (&readfds); FD_ZERO (&exceptfds); FD_SET (fd, &readfds); diff --git a/lib/sh/itos.c b/lib/sh/itos.c index cd36ef33f..4b137b505 100644 --- a/lib/sh/itos.c +++ b/lib/sh/itos.c @@ -30,10 +30,7 @@ #include "shell.h" char * -inttostr (i, buf, len) - intmax_t i; - char *buf; - size_t len; +inttostr (intmax_t i, char *buf, size_t len) { return (fmtumax (i, 10, buf, len, 0)); } @@ -41,8 +38,7 @@ inttostr (i, buf, len) /* Integer to string conversion. This conses the string; the caller should free it. */ char * -itos (i) - intmax_t i; +itos (intmax_t i) { char *p, lbuf[INT_STRLEN_BOUND(intmax_t) + 1]; @@ -53,8 +49,7 @@ itos (i) /* Integer to string conversion. This conses the string using strdup; caller should free it and be prepared to deal with NULL return. */ char * -mitos (i) - intmax_t i; +mitos (intmax_t i) { char *p, lbuf[INT_STRLEN_BOUND(intmax_t) + 1]; @@ -63,10 +58,7 @@ mitos (i) } char * -uinttostr (i, buf, len) - uintmax_t i; - char *buf; - size_t len; +uinttostr (uintmax_t i, char *buf, size_t len) { return (fmtumax (i, 10, buf, len, FL_UNSIGNED)); } @@ -74,8 +66,7 @@ uinttostr (i, buf, len) /* Integer to string conversion. This conses the string; the caller should free it. */ char * -uitos (i) - uintmax_t i; +uitos (uintmax_t i) { char *p, lbuf[INT_STRLEN_BOUND(uintmax_t) + 1]; diff --git a/lib/sh/mailstat.c b/lib/sh/mailstat.c index bd5c25fb4..1ec646aa1 100644 --- a/lib/sh/mailstat.c +++ b/lib/sh/mailstat.c @@ -1,6 +1,6 @@ /* mailstat.c -- stat a mailbox file, handling maildir-type mail directories */ -/* Copyright (C) 2001 Free Software Foundation, Inc. +/* Copyright (C) 2001,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -52,9 +52,7 @@ */ int -mailstat(path, st) - const char *path; - struct stat *st; +mailstat(const char *path, struct stat *st) { static struct stat st_new_last, st_ret_last; struct stat st_ret, st_tmp; diff --git a/lib/sh/makepath.c b/lib/sh/makepath.c index ab46c9673..145559b42 100644 --- a/lib/sh/makepath.c +++ b/lib/sh/makepath.c @@ -1,6 +1,6 @@ /* makepath.c - glue PATH and DIR together into a full pathname. */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2020,2022-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -32,10 +32,6 @@ #include <tilde/tilde.h> -#ifndef NULL -# define NULL 0 -#endif - /* MAKE SURE THESE AGREE WITH ../../externs.h. */ #ifndef MP_DOTILDE @@ -45,7 +41,7 @@ # define MP_IGNDOT 0x08 #endif -extern char *get_working_directory PARAMS((char *)); +extern char *get_working_directory (char *); static char *nullpath = ""; @@ -67,11 +63,9 @@ static char *nullpath = ""; } while (0) char * -sh_makepath (path, dir, flags) - const char *path, *dir; - int flags; +sh_makepath (const char *path, const char *dir, int flags) { - int dirlen, pathlen; + size_t dirlen, pathlen; char *ret, *xpath, *xdir, *r, *s; if (path == 0 || *path == '\0') diff --git a/lib/sh/mbscasecmp.c b/lib/sh/mbscasecmp.c index 0ab956055..908529cbb 100644 --- a/lib/sh/mbscasecmp.c +++ b/lib/sh/mbscasecmp.c @@ -1,6 +1,6 @@ /* mbscasecmp - case-insensitive multibyte string comparison. */ -/* Copyright (C) 2009-2015 Free Software Foundation, Inc. +/* Copyright (C) 2009-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -31,22 +31,21 @@ /* Compare MBS1 and MBS2 without regard to case. */ int -mbscasecmp (mbs1, mbs2) - const char *mbs1; - const char *mbs2; +mbscasecmp (const char *mbs1, const char *mbs2) { - int len1, len2, mb_cur_max; - wchar_t c1, c2, l1, l2; + size_t len1, len2; + int mb_cur_max; + wchar_t c1, c2; + wint_t l1, l2; + mbstate_t state1 = { 0 }, state2 = { 0 }; len1 = len2 = 0; - /* Reset multibyte characters to their initial state. */ - (void) mblen ((char *) NULL, 0); - mb_cur_max = MB_CUR_MAX; + do { - len1 = mbtowc (&c1, mbs1, mb_cur_max); - len2 = mbtowc (&c2, mbs2, mb_cur_max); + len1 = mbrtowc (&c1, mbs1, mb_cur_max, &state1); + len2 = mbrtowc (&c2, mbs2, mb_cur_max, &state2); if (len1 == 0) return len2 == 0 ? 0 : -1; diff --git a/lib/sh/mbschr.c b/lib/sh/mbschr.c index 639962d46..f86ea0bb1 100644 --- a/lib/sh/mbschr.c +++ b/lib/sh/mbschr.c @@ -39,13 +39,7 @@ extern char *utf8_mbschr (const char *, int); /* XXX */ legacy strchr() might return the wrong value. */ char * -#if defined (PROTOTYPES) mbschr (const char *s, int c) -#else -mbschr (s, c) - const char *s; - int c; -#endif { #if HANDLE_MULTIBYTE char *pos; diff --git a/lib/sh/mbscmp.c b/lib/sh/mbscmp.c index c7c844357..d86dbf171 100644 --- a/lib/sh/mbscmp.c +++ b/lib/sh/mbscmp.c @@ -1,6 +1,6 @@ /* mbscmp - multibyte string comparison. */ -/* Copyright (C) 1995-2018 Free Software Foundation, Inc. +/* Copyright (C) 1995-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -26,28 +26,27 @@ #include <stddef.h> #include <string.h> +#include <wchar.h> + extern int locale_utf8locale; extern int utf8_mbscmp (const char *, const char *); /* Compare MBS1 and MBS2. */ int -mbscmp (mbs1, mbs2) - const char *mbs1; - const char *mbs2; +mbscmp (const char *mbs1, const char *mbs2) { int len1, len2, mb_cur_max; wchar_t c1, c2; + mbstate_t state1 = { 0 }, state2 = { 0 }; len1 = len2 = 0; - /* Reset multibyte characters to their initial state. */ - (void) mblen ((char *) NULL, 0); - mb_cur_max = MB_CUR_MAX; + do { - len1 = mbtowc (&c1, mbs1, mb_cur_max); - len2 = mbtowc (&c2, mbs2, mb_cur_max); + len1 = mbrtowc (&c1, mbs1, mb_cur_max, &state1); + len2 = mbrtowc (&c2, mbs2, mb_cur_max, &state2); if (len1 == 0) return len2 == 0 ? 0 : -1; diff --git a/lib/sh/mktime.c b/lib/sh/mktime.c index 9ee675bef..810b701da 100644 --- a/lib/sh/mktime.c +++ b/lib/sh/mktime.c @@ -1,6 +1,6 @@ /* mktime - convert struct tm to a time_t value */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Contributed by Paul Eggert (eggert@twinsun.com). @@ -56,14 +56,6 @@ #define mktime my_mktime #endif /* DEBUG_MKTIME */ -#ifndef PARAMS -#if defined (__GNUC__) || (defined (__STDC__) && __STDC__) -#define PARAMS(args) args -#else -#define PARAMS(args) () -#endif /* GCC. */ -#endif /* Not PARAMS. */ - #ifndef CHAR_BIT #define CHAR_BIT 8 #endif @@ -117,17 +109,15 @@ const unsigned short int __mon_yday[2][13] = { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } }; -static time_t ydhms_tm_diff PARAMS ((int, int, int, int, int, const struct tm *)); -time_t __mktime_internal PARAMS ((struct tm *, +static time_t ydhms_tm_diff (int, int, int, int, int, const struct tm *); +time_t __mktime_internal (struct tm *, struct tm *(*) (const time_t *, struct tm *), - time_t *)); + time_t *); -static struct tm *my_localtime_r PARAMS ((const time_t *, struct tm *)); +static struct tm *my_localtime_r (const time_t *, struct tm *); static struct tm * -my_localtime_r (t, tp) - const time_t *t; - struct tm *tp; +my_localtime_r (const time_t *t, struct tm *tp) { struct tm *l = localtime (t); if (! l) @@ -136,16 +126,13 @@ my_localtime_r (t, tp) return tp; } - /* Yield the difference between (YEAR-YDAY HOUR:MIN:SEC) and (*TP), measured in seconds, ignoring leap seconds. YEAR uses the same numbering as TM->tm_year. All values are in range, except possibly YEAR. If overflow occurs, yield the low order bits of the correct answer. */ static time_t -ydhms_tm_diff (year, yday, hour, min, sec, tp) - int year, yday, hour, min, sec; - const struct tm *tp; +ydhms_tm_diff (int year, int yday, int hour, int min, int sec, const struct tm *tp) { /* Compute intervening leap days correctly even if year is negative. Take care to avoid int overflow. time_t overflow is OK, since @@ -167,13 +154,11 @@ ydhms_tm_diff (year, yday, hour, min, sec, tp) + (sec - tp->tm_sec)); } - static time_t localtime_offset; /* Convert *TP to a time_t value. */ time_t -mktime (tp) - struct tm *tp; +mktime (struct tm *tp) { #ifdef _LIBC /* POSIX.1 8.1.1 requires that whenever mktime() is called, the @@ -191,10 +176,9 @@ mktime (tp) compared to what the result would be for UTC without leap seconds. If *OFFSET's guess is correct, only one CONVERT call is needed. */ time_t -__mktime_internal (tp, convert, offset) - struct tm *tp; - struct tm *(*convert) PARAMS ((const time_t *, struct tm *)); - time_t *offset; +__mktime_internal (struct tm *tp, + struct tm *(*convert) (const time_t *, struct tm *), + time_t *offset) { time_t t, dt, t0; struct tm tm; @@ -317,122 +301,3 @@ __mktime_internal (tp, convert, offset) #ifdef weak_alias weak_alias (mktime, timelocal) #endif - -#if DEBUG_MKTIME - -static int -not_equal_tm (a, b) - struct tm *a; - struct tm *b; -{ - return ((a->tm_sec ^ b->tm_sec) - | (a->tm_min ^ b->tm_min) - | (a->tm_hour ^ b->tm_hour) - | (a->tm_mday ^ b->tm_mday) - | (a->tm_mon ^ b->tm_mon) - | (a->tm_year ^ b->tm_year) - | (a->tm_mday ^ b->tm_mday) - | (a->tm_yday ^ b->tm_yday) - | (a->tm_isdst ^ b->tm_isdst)); -} - -static void -print_tm (tp) - struct tm *tp; -{ - printf ("%04d-%02d-%02d %02d:%02d:%02d yday %03d wday %d isdst %d", - tp->tm_year + TM_YEAR_BASE, tp->tm_mon + 1, tp->tm_mday, - tp->tm_hour, tp->tm_min, tp->tm_sec, - tp->tm_yday, tp->tm_wday, tp->tm_isdst); -} - -static int -check_result (tk, tmk, tl, tml) - time_t tk; - struct tm tmk; - time_t tl; - struct tm tml; -{ - if (tk != tl || not_equal_tm (&tmk, &tml)) - { - printf ("mktime ("); - print_tm (&tmk); - printf (")\nyields ("); - print_tm (&tml); - printf (") == %ld, should be %ld\n", (long) tl, (long) tk); - return 1; - } - - return 0; -} - -int -main (argc, argv) - int argc; - char **argv; -{ - int status = 0; - struct tm tm, tmk, tml; - time_t tk, tl; - char trailer; - - if ((argc == 3 || argc == 4) - && (sscanf (argv[1], "%d-%d-%d%c", - &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &trailer) - == 3) - && (sscanf (argv[2], "%d:%d:%d%c", - &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &trailer) - == 3)) - { - tm.tm_year -= TM_YEAR_BASE; - tm.tm_mon--; - tm.tm_isdst = argc == 3 ? -1 : atoi (argv[3]); - tmk = tm; - tl = mktime (&tmk); - tml = *localtime (&tl); - printf ("mktime returns %ld == ", (long) tl); - print_tm (&tmk); - printf ("\n"); - status = check_result (tl, tmk, tl, tml); - } - else if (argc == 4 || (argc == 5 && strcmp (argv[4], "-") == 0)) - { - time_t from = atol (argv[1]); - time_t by = atol (argv[2]); - time_t to = atol (argv[3]); - - if (argc == 4) - for (tl = from; tl <= to; tl += by) - { - tml = *localtime (&tl); - tmk = tml; - tk = mktime (&tmk); - status |= check_result (tk, tmk, tl, tml); - } - else - for (tl = from; tl <= to; tl += by) - { - /* Null benchmark. */ - tml = *localtime (&tl); - tmk = tml; - tk = tl; - status |= check_result (tk, tmk, tl, tml); - } - } - else - printf ("Usage:\ -\t%s YYYY-MM-DD HH:MM:SS [ISDST] # Test given time.\n\ -\t%s FROM BY TO # Test values FROM, FROM+BY, ..., TO.\n\ -\t%s FROM BY TO - # Do not test those values (for benchmark).\n", - argv[0], argv[0], argv[0]); - - return status; -} - -#endif /* DEBUG_MKTIME */ - -/* -Local Variables: -compile-command: "gcc -DDEBUG=1 -Wall -O -g mktime.c -o mktime" -End: -*/ diff --git a/lib/sh/netconn.c b/lib/sh/netconn.c index e20f10420..08903acd4 100644 --- a/lib/sh/netconn.c +++ b/lib/sh/netconn.c @@ -1,6 +1,6 @@ /* netconn.c -- is a particular file descriptor a network connection?. */ -/* Copyright (C) 2002-2005 Free Software Foundation, Inc. +/* Copyright (C) 2002-2005,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -41,8 +41,7 @@ /* Is FD a socket or network connection? */ int -isnetconn (fd) - int fd; +isnetconn (int fd) { #if defined (HAVE_SYS_SOCKET_H) && defined (HAVE_GETPEERNAME) && !defined (SVR4_2) && !defined (__BEOS__) int rv; diff --git a/lib/sh/netopen.c b/lib/sh/netopen.c index ee0baf662..02b31a34b 100644 --- a/lib/sh/netopen.c +++ b/lib/sh/netopen.c @@ -5,7 +5,7 @@ * chet@ins.CWRU.Edu */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2020,2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -63,27 +63,25 @@ extern int errno; #endif #if !defined (HAVE_INET_ATON) -extern int inet_aton PARAMS((const char *, struct in_addr *)); +extern int inet_aton (const char *, struct in_addr *); #endif #ifndef HAVE_GETADDRINFO -static int _getaddr PARAMS((char *, struct in_addr *)); -static int _getserv PARAMS((char *, int, unsigned short *)); -static int _netopen4 PARAMS((char *, char *, int)); +static int _getaddr (const char *, struct in_addr *); +static int _getserv (const char *, int, unsigned short *); +static int _netopen4 (const char *, const char *, int); #else /* HAVE_GETADDRINFO */ -static int _netopen6 PARAMS((char *, char *, int)); +static int _netopen6 (const char *, const char *, int); #endif -static int _netopen PARAMS((char *, char *, int)); +static int _netopen (const char *, const char *, int); #ifndef HAVE_GETADDRINFO /* Stuff the internet address corresponding to HOST into AP, in network byte order. Return 1 on success, 0 on failure. */ static int -_getaddr (host, ap) - char *host; - struct in_addr *ap; +_getaddr (const char *host, struct in_addr *ap) { struct hostent *h; int r; @@ -114,15 +112,12 @@ _getaddr (host, ap) /* Return 1 if SERV is a valid port number and stuff the converted value into PP in network byte order. */ static int -_getserv (serv, proto, pp) - char *serv; - int proto; - unsigned short *pp; +_getserv (const char *serv, int proto, unsigned short *pp) { intmax_t l; unsigned short s; - if (legal_number (serv, &l)) + if (valid_number (serv, &l)) { s = (unsigned short)(l & 0xFFFF); if (s != l) @@ -154,9 +149,7 @@ _getserv (serv, proto, pp) * traditional BSD mechanisms. Returns the connected socket or -1 on error. */ static int -_netopen4(host, serv, typ) - char *host, *serv; - int typ; +_netopen4(const char *host, const char *serv, int typ) { struct in_addr ina; struct sockaddr_in sin; @@ -209,9 +202,7 @@ _netopen4(host, serv, typ) * on error. */ static int -_netopen6 (host, serv, typ) - char *host, *serv; - int typ; +_netopen6 (const char *host, const char *serv, int typ) { int s, e; struct addrinfo hints, *res, *res0; @@ -274,9 +265,7 @@ _netopen6 (host, serv, typ) * Returns the connected socket or -1 on error. */ static int -_netopen(host, serv, typ) - char *host, *serv; - int typ; +_netopen(const char *host, const char *serv, int typ) { #ifdef HAVE_GETADDRINFO return (_netopen6 (host, serv, typ)); @@ -290,8 +279,7 @@ _netopen(host, serv, typ) * host `host' on port `port' and return the connected socket. */ int -netopen (path) - char *path; +netopen (char *path) { char *np, *s, *t; int fd; @@ -320,8 +308,7 @@ netopen (path) * `serv' and return the connected socket. */ int -tcpopen (host, serv) - char *host, *serv; +tcpopen (char *host, char *serv) { return (_netopen (host, serv, 't')); } @@ -331,8 +318,7 @@ tcpopen (host, serv) * `serv' and return the connected socket. */ int -udpopen (host, serv) - char *host, *serv; +udpopen (char *host, char *serv) { return _netopen (host, serv, 'u'); } @@ -341,8 +327,7 @@ udpopen (host, serv) #else /* !HAVE_NETWORK */ int -netopen (path) - char *path; +netopen (char *path) { internal_error (_("network operations not supported")); return -1; diff --git a/lib/sh/oslib.c b/lib/sh/oslib.c index edc5c6f20..6c5052d03 100644 --- a/lib/sh/oslib.c +++ b/lib/sh/oslib.c @@ -1,6 +1,6 @@ /* oslib.c - functions present only in some unix versions. */ -/* Copyright (C) 1995,2010 Free Software Foundation, Inc. +/* Copyright (C) 1995,2010,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -54,11 +54,9 @@ extern int errno; /* Make the functions strchr and strrchr if they do not exist. */ #if !defined (HAVE_STRCHR) char * -strchr (string, c) - char *string; - int c; +strchr (const char *string, int c) { - register char *s; + char *s; for (s = string; s && *s; s++) if (*s == c) @@ -68,13 +66,11 @@ strchr (string, c) } char * -strrchr (string, c) - char *string; - int c; +strrchr (const char *string, int c) { - register char *s, *t; + char *s, *t; - for (s = string, t = (char *)NULL; s && *s; s++) + for (s = string, t = NULL; s && *s; s++) if (*s == c) t = s; return (t); @@ -85,8 +81,7 @@ strrchr (string, c) /* Replacement for dup2 (), for those systems which either don't have it, or supply one with broken behaviour. */ int -dup2 (fd1, fd2) - int fd1, fd2; +dup2 (int fd1, int fd2) { int saved_errno, r; @@ -143,7 +138,7 @@ dup2 (fd1, fd2) #if !defined (HAVE_GETDTABLESIZE) int -getdtablesize () +getdtablesize (void) { # if defined (_POSIX_VERSION) && defined (HAVE_SYSCONF) && defined (_SC_OPEN_MAX) return (sysconf(_SC_OPEN_MAX)); /* Posix systems use sysconf */ @@ -166,9 +161,7 @@ getdtablesize () # undef bcopy # endif void -bcopy (s,d,n) - void *d, *s; - size_t n; +bcopy (void *s, void *d, size_t n) { FASTCOPY (s, d, n); } @@ -179,9 +172,7 @@ bcopy (s,d,n) # undef bzero # endif void -bzero (s, n) - void *s; - size_t n; +bzero (void *s, size_t n) { register int i; register char *r; @@ -195,9 +186,7 @@ bzero (s, n) # if defined (HAVE_UNAME) # include <sys/utsname.h> int -gethostname (name, namelen) - char *name; - size_t namelen; +gethostname (char *name, size_t namelen) { int i; struct utsname ut; @@ -212,9 +201,7 @@ gethostname (name, namelen) } # else /* !HAVE_UNAME */ int -gethostname (name, namelen) - char *name; - size_t namelen; +gethostname (char *name, size_t namelen) { strncpy (name, "unknown", namelen); name[namelen] = '\0'; @@ -225,9 +212,7 @@ gethostname (name, namelen) #if !defined (HAVE_KILLPG) int -killpg (pgrp, sig) - pid_t pgrp; - int sig; +killpg (pid_t pgrp, int sig) { return (kill (-pgrp, sig)); } @@ -235,9 +220,7 @@ killpg (pgrp, sig) #if !defined (HAVE_MKFIFO) && defined (PROCESS_SUBSTITUTION) int -mkfifo (path, mode) - char *path; - mode_t mode; +mkfifo (char *path, mode_t mode) { #if defined (S_IFIFO) return (mknod (path, (mode | S_IFIFO), 0)); @@ -248,9 +231,10 @@ mkfifo (path, mode) #endif /* !HAVE_MKFIFO && PROCESS_SUBSTITUTION */ #define DEFAULT_MAXGROUPS 64 +#define MIN_MAXGROUPS 32 /* work around macOS issue */ int -getmaxgroups () +getmaxgroups (void) { static int maxgroups = -1; @@ -274,11 +258,14 @@ getmaxgroups () if (maxgroups <= 0) maxgroups = DEFAULT_MAXGROUPS; + if (maxgroups < MIN_MAXGROUPS) + maxgroups = MIN_MAXGROUPS; + return maxgroups; } long -getmaxchild () +getmaxchild (void) { static long maxchild = -1L; diff --git a/lib/sh/pathcanon.c b/lib/sh/pathcanon.c index 7d0df9f92..2820e310e 100644 --- a/lib/sh/pathcanon.c +++ b/lib/sh/pathcanon.c @@ -1,6 +1,6 @@ /* pathcanon.c -- canonicalize and manipulate pathnames. */ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -45,9 +45,8 @@ extern int errno; #if defined (__CYGWIN__) #include <sys/cygwin.h> -static int -_is_cygdrive (path) - char *path; +static inline int +_is_cygdrive (char *path) { static char user[MAXPATHLEN]; static char system[MAXPATHLEN]; @@ -72,8 +71,7 @@ _is_cygdrive (path) /* Return 1 if PATH corresponds to a directory. A function for debugging. */ static int -_path_isdir (path) - char *path; +_path_isdir (char *path) { int l; struct stat sb; @@ -101,9 +99,7 @@ _path_isdir (path) #define DOUBLE_SLASH(p) ((p[0] == '/') && (p[1] == '/') && p[2] != '/') char * -sh_canonpath (path, flags) - char *path; - int flags; +sh_canonpath (char *path, int flags) { char stub_char; char *result, *p, *q, *base, *dotdot; diff --git a/lib/sh/pathphys.c b/lib/sh/pathphys.c index 95b72f197..94adc8972 100644 --- a/lib/sh/pathphys.c +++ b/lib/sh/pathphys.c @@ -1,6 +1,6 @@ /* pathphys.c -- return pathname with all symlinks expanded. */ -/* Copyright (C) 2000-2020 Free Software Foundation, Inc. +/* Copyright (C) 2000-2020,2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -46,13 +46,10 @@ extern int errno; #endif /* !errno */ -extern char *get_working_directory PARAMS((char *)); +extern char *get_working_directory (char *); -static int -_path_readlink (path, buf, bufsiz) - char *path; - char *buf; - int bufsiz; +static inline ssize_t +_path_readlink (char *path, char *buf, size_t bufsiz) { #ifdef HAVE_READLINK return readlink (path, buf, bufsiz); @@ -72,13 +69,17 @@ _path_readlink (path, buf, bufsiz) */ char * -sh_physpath (path, flags) - char *path; - int flags; +sh_physpath (char *path, int flags) { char tbuf[PATH_MAX+1], linkbuf[PATH_MAX+1]; char *result, *p, *q, *qsave, *qbase, *workpath; - int double_slash_path, linklen, nlink; + int double_slash_path, nlink; + ssize_t r; + size_t linklen; + +#ifdef __CYGWIN__ + return realpath (path, NULL); +#endif linklen = strlen (path); @@ -103,13 +104,8 @@ sh_physpath (path, flags) /* This always gets an absolute pathname. */ - /* POSIX.2 says to leave a leading `//' alone. On cygwin, we skip over any - leading `x:' (dos drive name). */ -#if defined (__CYGWIN__) - qbase = (ISALPHA((unsigned char)workpath[0]) && workpath[1] == ':') ? workpath + 3 : workpath + 1; -#else + /* POSIX.2 says to leave a leading `//' alone. */ qbase = workpath + 1; -#endif double_slash_path = DOUBLE_SLASH (workpath); qbase += double_slash_path; @@ -164,13 +160,14 @@ sh_physpath (path, flags) *q = '\0'; - linklen = _path_readlink (result, linkbuf, PATH_MAX); - if (linklen < 0) /* if errno == EINVAL, it's not a symlink */ + r = _path_readlink (result, linkbuf, PATH_MAX); + if (r < 0) /* if errno == EINVAL, it's not a symlink */ { if (errno != EINVAL) goto error; continue; } + linklen = r; /* It's a symlink, and the value is in LINKBUF. */ nlink++; @@ -214,11 +211,7 @@ error: { q = result; /* Duplicating some code here... */ -#if defined (__CYGWIN__) - qbase = (ISALPHA((unsigned char)workpath[0]) && workpath[1] == ':') ? workpath + 3 : workpath + 1; -#else qbase = workpath + 1; -#endif double_slash_path = DOUBLE_SLASH (workpath); qbase += double_slash_path; @@ -252,9 +245,7 @@ error: } char * -sh_realpath (pathname, resolved) - const char *pathname; - char *resolved; +sh_realpath (const char *pathname, char *resolved) { char *tdir, *wd; diff --git a/lib/sh/random.c b/lib/sh/random.c index 1eaa71aac..16877430b 100644 --- a/lib/sh/random.c +++ b/lib/sh/random.c @@ -1,6 +1,6 @@ /* random.c -- Functions for managing 16-bit and 32-bit random numbers. */ -/* Copyright (C) 2020 Free Software Foundation, Inc. +/* Copyright (C) 2020,2022,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -40,31 +40,32 @@ extern time_t shell_start_time; extern int last_random_value; -static u_bits32_t intrand32 PARAMS((u_bits32_t)); -static u_bits32_t genseed PARAMS((void)); +static u_bits32_t intrand32 (u_bits32_t); +static u_bits32_t genseed (void); -static u_bits32_t brand32 PARAMS((void)); -static void sbrand32 PARAMS((u_bits32_t)); -static void perturb_rand32 PARAMS((void)); +static u_bits32_t brand32 (void); +static void sbrand32 (u_bits32_t); +static void perturb_rand32 (void); /* The random number seed. You can change this by setting RANDOM. */ static u_bits32_t rseed = 1; /* Returns a 32-bit pseudo-random number. */ static u_bits32_t -intrand32 (last) - u_bits32_t last; +intrand32 (u_bits32_t last) { /* Minimal Standard generator from "Random number generators: good ones are hard to find", Park and Miller, Communications of the ACM, vol. 31, no. 10, October 1988, p. 1195. Filtered through FreeBSD. - x(n+1) = 16807 * x(n) mod (m). + x(n+1) = 16807 * x(n) mod (m) + + where 16807 == 7^5. We split up the calculations to avoid overflow. - h = last / q; l = x - h * q; t = a * l - h * r + h = last / q; l = last % q; t = a * l - h * r m = 2147483647, a = 16807, q = 127773, r = 2836 There are lots of other combinations of constants to use; look at @@ -76,7 +77,7 @@ intrand32 (last) /* Can't seed with 0. */ ret = (last == 0) ? 123459876 : last; h = ret / 127773; - l = ret - (127773 * h); + l = ret % 127773; t = 16807 * l - 2836 * h; ret = (t < 0) ? t + 0x7fffffff : t; @@ -84,13 +85,13 @@ intrand32 (last) } static u_bits32_t -genseed () +genseed (void) { struct timeval tv; u_bits32_t iv; gettimeofday (&tv, NULL); - iv = (u_bits32_t)seedrand; /* let the compiler truncate */ + iv = (uintptr_t)seedrand; /* let the compiler truncate */ iv = tv.tv_sec ^ tv.tv_usec ^ getpid () ^ getppid () ^ current_user.uid ^ iv; return (iv); } @@ -99,7 +100,7 @@ genseed () /* Returns a pseudo-random number between 0 and 32767. */ int -brand () +brand (void) { unsigned int ret; @@ -113,15 +114,14 @@ brand () /* Set the random number generator seed to SEED. */ void -sbrand (seed) - unsigned long seed; +sbrand (unsigned long seed) { rseed = seed; last_random_value = 0; } void -seedrand () +seedrand (void) { u_bits32_t iv; @@ -138,7 +138,7 @@ static int urandfd = -1; /* Returns a 32-bit pseudo-random number between 0 and 4294967295. */ static u_bits32_t -brand32 () +brand32 (void) { u_bits32_t ret; @@ -147,14 +147,13 @@ brand32 () } static void -sbrand32 (seed) - u_bits32_t seed; +sbrand32 (u_bits32_t seed) { last_rand32 = rseed32 = seed; } void -seedrand32 () +seedrand32 (void) { u_bits32_t iv; @@ -163,14 +162,14 @@ seedrand32 () } static void -perturb_rand32 () +perturb_rand32 (void) { rseed32 ^= genseed (); } /* Force another attempt to open /dev/urandom on the next call to get_urandom32 */ void -urandom_close () +urandom_close (void) { if (urandfd >= 0) close (urandfd); @@ -185,10 +184,7 @@ urandom_close () #endif static ssize_t -getrandom (buf, len, flags) - void *buf; - size_t len; - unsigned int flags; +getrandom (void *buf, size_t len, unsigned int flags) { int oflags; ssize_t r; @@ -220,7 +216,7 @@ getrandom (buf, len, flags) #endif u_bits32_t -get_urandom32 () +get_urandom32 (void) { u_bits32_t ret; diff --git a/lib/sh/rename.c b/lib/sh/rename.c index e410b5e8d..2bd807f79 100644 --- a/lib/sh/rename.c +++ b/lib/sh/rename.c @@ -2,7 +2,7 @@ * rename - rename a file */ -/* Copyright (C) 1999 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -39,8 +39,7 @@ extern int errno; #endif int -rename (from, to) - const char *from, *to; +rename (const char *from, const char *to) { struct stat fb, tb; diff --git a/lib/sh/setlinebuf.c b/lib/sh/setlinebuf.c index dd76e9fcb..249067b71 100644 --- a/lib/sh/setlinebuf.c +++ b/lib/sh/setlinebuf.c @@ -35,8 +35,7 @@ static char *stderrbuf = 0; /* Cause STREAM to buffer lines as opposed to characters or blocks. */ int -sh_setlinebuf (stream) - FILE *stream; +sh_setlinebuf (FILE *stream) { #if !defined (HAVE_SETLINEBUF) && !defined (HAVE_SETVBUF) return (0); diff --git a/lib/sh/shmatch.c b/lib/sh/shmatch.c index a717d45c9..984eadf36 100644 --- a/lib/sh/shmatch.c +++ b/lib/sh/shmatch.c @@ -39,27 +39,36 @@ #include "variables.h" #include "externs.h" -extern int glob_ignore_case, match_ignore_case; +extern int match_ignore_case; #if defined (ARRAY_VARS) extern SHELL_VAR *builtin_find_indexed_array (char *, int); #endif +static char * +strregerror (int err, const regex_t *regex_p) +{ + char *str; + size_t size; + + size = regerror (err, regex_p, (char *)0, 0); + str = xmalloc (size); + (void)regerror (err, regex_p, str, size); + + return str; +} + int -sh_regmatch (string, pattern, flags) - const char *string; - const char *pattern; - int flags; +sh_regmatch (const char *string, const char *pattern, int flags, char **errbuf) { regex_t regex = { 0 }; regmatch_t *matches; - int rflags; + int rflags, reg_err; #if defined (ARRAY_VARS) SHELL_VAR *rematch; ARRAY *amatch; - int subexp_ind; + size_t subexp_ind, subexp_len; char *subexp_str; - int subexp_len; #endif int result; @@ -74,8 +83,12 @@ sh_regmatch (string, pattern, flags) rflags |= REG_NOSUB; #endif - if (regcomp (&regex, pattern, rflags)) - return 2; /* flag for printing a warning here. */ + if (reg_err = regcomp (&regex, pattern, rflags)) + { + if (errbuf) + *errbuf = strregerror (reg_err, &regex); + return 2; /* flag for printing a warning here. */ + } #if defined (ARRAY_VARS) matches = (regmatch_t *)malloc (sizeof (regmatch_t) * (regex.re_nsub + 1)); @@ -85,6 +98,7 @@ sh_regmatch (string, pattern, flags) /* man regexec: NULL PMATCH ignored if NMATCH == 0 */ if (regexec (&regex, string, matches ? regex.re_nsub + 1 : 0, matches, 0)) + /* XXX - catch errors and fill in *errbuf here? */ result = EXECUTION_FAILURE; else result = EXECUTION_SUCCESS; /* match */ @@ -96,11 +110,11 @@ sh_regmatch (string, pattern, flags) /* Store the parenthesized subexpressions in the array BASH_REMATCH. Element 0 is the portion that matched the entire regexp. Element 1 is the part that matched the first subexpression, and so on. */ -#if 1 +#if 0 + /* This was the pre-bash-5.3 code. */ unbind_global_variable_noref ("BASH_REMATCH"); rematch = make_new_array_variable ("BASH_REMATCH"); #else - /* TAG:bash-5.3 */ rematch = builtin_find_indexed_array ("BASH_REMATCH", 1); #endif amatch = rematch ? array_cell (rematch) : (ARRAY *)0; diff --git a/lib/sh/shmbchar.c b/lib/sh/shmbchar.c index f2f2582b4..22a6de293 100644 --- a/lib/sh/shmbchar.c +++ b/lib/sh/shmbchar.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2006, 2009, 2010, 2012, 2015-2018 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2006, 2009, 2010, 2012, 2015-2018, 2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -51,8 +51,7 @@ extern int utf8_mblen (const char *, size_t); /* Count the number of characters in S, counting multi-byte characters as a single character. */ size_t -mbstrlen (s) - const char *s; +mbstrlen (const char *s) { size_t clen, nc; mbstate_t mbs = { 0 }, mbsbak = { 0 }; @@ -81,8 +80,7 @@ mbstrlen (s) /* XXX - if we know that the locale is UTF-8, we can just check whether or not any byte has the eighth bit turned on */ char * -mbsmbchar (s) - const char *s; +mbsmbchar (const char *s) { char *t; size_t clen; @@ -115,10 +113,7 @@ mbsmbchar (s) } int -sh_mbsnlen(src, srclen, maxlen) - const char *src; - size_t srclen; - int maxlen; +sh_mbsnlen(const char *src, size_t srclen, int maxlen) { int count; int sind; diff --git a/lib/sh/shquote.c b/lib/sh/shquote.c index 26fe01853..98b3d927f 100644 --- a/lib/sh/shquote.c +++ b/lib/sh/shquote.c @@ -1,6 +1,6 @@ /* shquote - functions to quote and dequote strings */ -/* Copyright (C) 1999-2020 Free Software Foundation, Inc. +/* Copyright (C) 1999-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -36,8 +36,8 @@ #include "shmbchar.h" #include "shmbutil.h" -extern char *ansic_quote PARAMS((char *, int, int *)); -extern int ansic_shouldquote PARAMS((const char *)); +extern char *ansic_quote (char *, int, int *); +extern int ansic_shouldquote (const char *); /* Default set of characters that should be backslash-quoted in strings */ static const char bstab[256] = @@ -92,10 +92,9 @@ static const char bstab[256] = /* Return a new string which is the single-quoted version of STRING. Used by alias and trap, among others. */ char * -sh_single_quote (string) - const char *string; +sh_single_quote (const char *string) { - register int c; + int c; char *result, *r; const char *s; @@ -132,10 +131,9 @@ sh_single_quote (string) /* Quote STRING using double quotes. Return a new string. */ char * -sh_double_quote (string) - const char *string; +sh_double_quote (const char *string) { - register unsigned char c; + unsigned char c; int mb_cur_max; char *result, *r; size_t slen; @@ -180,18 +178,17 @@ sh_double_quote (string) /* Turn S into a simple double-quoted string. If FLAGS is non-zero, quote double quote characters in S with backslashes. */ char * -sh_mkdoublequoted (s, slen, flags) - const char *s; - int slen, flags; +sh_mkdoublequoted (const char *s, size_t slen, int flags) { char *r, *ret; const char *send; - int rlen, mb_cur_max; + int mb_cur_max; + size_t rlen; DECLARE_MBSTATE; send = s + slen; mb_cur_max = flags ? MB_CUR_MAX : 1; - rlen = (flags == 0) ? slen + 3 : (2 * slen) + 1; + rlen = (flags == 0) ? slen + 3 : (2 * slen) + 3; ret = r = (char *)xmalloc (rlen); *r++ = '"'; @@ -220,10 +217,9 @@ sh_mkdoublequoted (s, slen, flags) double quotes. Return a new string. XXX - should this handle CTLESC and CTLNUL? */ char * -sh_un_double_quote (string) - char *string; +sh_un_double_quote (char *string) { - register int c, pass_next; + int c, pass_next; char *result, *r, *s; r = result = (char *)xmalloc (strlen (string) + 1); @@ -259,21 +255,19 @@ sh_un_double_quote (string) other shell blank characters. */ char * -sh_backslash_quote (string, table, flags) - char *string; - char *table; - int flags; +sh_backslash_quote (char *string, const char *table, int flags) { int c, mb_cur_max; size_t slen; - char *result, *r, *s, *backslash_table, *send; + char *result, *r, *s, *send; + const char *backslash_table; DECLARE_MBSTATE; slen = strlen (string); send = string + slen; result = (char *)xmalloc (2 * slen + 1); - backslash_table = table ? table : (char *)bstab; + backslash_table = table ? table : bstab; mb_cur_max = MB_CUR_MAX; for (r = result, s = string; s && (c = *s); s++) @@ -315,9 +309,7 @@ sh_backslash_quote (string, table, flags) /* Quote characters that get special treatment when in double quotes in STRING using backslashes. FLAGS is reserved for future use. Return a new string. */ char * -sh_backslash_quote_for_double_quotes (string, flags) - char *string; - int flags; +sh_backslash_quote_for_double_quotes (char *string, int flags) { unsigned char c; char *result, *r, *s, *send; @@ -358,9 +350,7 @@ sh_backslash_quote_for_double_quotes (string, flags) #endif /* PROMPT_STRING_DECODE */ char * -sh_quote_reusable (s, flags) - char *s; - int flags; +sh_quote_reusable (char *s, int flags) { char *ret; @@ -383,8 +373,7 @@ sh_quote_reusable (s, flags) } int -sh_contains_shell_metas (string) - const char *string; +sh_contains_shell_metas (const char *string) { const char *s; @@ -418,8 +407,7 @@ sh_contains_shell_metas (string) } int -sh_contains_quotes (string) - const char *string; +sh_contains_quotes (const char *string) { const char *s; diff --git a/lib/sh/shtty.c b/lib/sh/shtty.c index 0433f5e27..027941ca3 100644 --- a/lib/sh/shtty.c +++ b/lib/sh/shtty.c @@ -2,7 +2,7 @@ * shtty.c -- abstract interface to the terminal, focusing on capabilities. */ -/* Copyright (C) 1999 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -34,9 +34,7 @@ static TTYSTRUCT ttin, ttout; static int ttsaved = 0; int -ttgetattr(fd, ttp) -int fd; -TTYSTRUCT *ttp; +ttgetattr(int fd, TTYSTRUCT *ttp) { #ifdef TERMIOS_TTY_DRIVER return tcgetattr(fd, ttp); @@ -50,9 +48,7 @@ TTYSTRUCT *ttp; } int -ttsetattr(fd, ttp) -int fd; -TTYSTRUCT *ttp; +ttsetattr(int fd, TTYSTRUCT *ttp) { #ifdef TERMIOS_TTY_DRIVER return tcsetattr(fd, TCSADRAIN, ttp); @@ -66,7 +62,7 @@ TTYSTRUCT *ttp; } void -ttsave() +ttsave(void) { if (ttsaved) return; @@ -76,7 +72,7 @@ ttsave() } void -ttrestore() +ttrestore(void) { if (ttsaved == 0) return; @@ -87,8 +83,7 @@ ttrestore() /* Retrieve the internally-saved attributes associated with tty fd FD. */ TTYSTRUCT * -ttattr (fd) - int fd; +ttattr (int fd) { if (ttsaved == 0) return ((TTYSTRUCT *)0); @@ -105,8 +100,7 @@ ttattr (fd) * ttsetattr, the terminal will be in one-char-at-a-time mode. */ int -tt_setonechar(ttp) - TTYSTRUCT *ttp; +tt_setonechar(TTYSTRUCT *ttp) { #if defined (TERMIOS_TTY_DRIVER) || defined (TERMIO_TTY_DRIVER) @@ -151,9 +145,7 @@ tt_setonechar(ttp) /* Set the tty associated with FD and TTP into one-character-at-a-time mode */ int -ttfd_onechar (fd, ttp) - int fd; - TTYSTRUCT *ttp; +ttfd_onechar (int fd, TTYSTRUCT *ttp) { if (tt_setonechar(ttp) < 0) return -1; @@ -162,7 +154,7 @@ ttfd_onechar (fd, ttp) /* Set the terminal into one-character-at-a-time mode */ int -ttonechar () +ttonechar (void) { TTYSTRUCT tt; @@ -177,8 +169,7 @@ ttonechar () * ttsetattr, the terminal will be in no-echo mode. */ int -tt_setnoecho(ttp) - TTYSTRUCT *ttp; +tt_setnoecho(TTYSTRUCT *ttp) { #if defined (TERMIOS_TTY_DRIVER) || defined (TERMIO_TTY_DRIVER) ttp->c_lflag &= ~(ECHO|ECHOK|ECHONL); @@ -191,9 +182,7 @@ tt_setnoecho(ttp) /* Set the tty associated with FD and TTP into no-echo mode */ int -ttfd_noecho (fd, ttp) - int fd; - TTYSTRUCT *ttp; +ttfd_noecho (int fd, TTYSTRUCT *ttp) { if (tt_setnoecho (ttp) < 0) return -1; @@ -202,7 +191,7 @@ ttfd_noecho (fd, ttp) /* Set the terminal into no-echo mode */ int -ttnoecho () +ttnoecho (void) { TTYSTRUCT tt; @@ -217,8 +206,7 @@ ttnoecho () * ttsetattr, the terminal will be in eight-bit mode (pass8). */ int -tt_seteightbit (ttp) - TTYSTRUCT *ttp; +tt_seteightbit (TTYSTRUCT *ttp) { #if defined (TERMIOS_TTY_DRIVER) || defined (TERMIO_TTY_DRIVER) ttp->c_iflag &= ~ISTRIP; @@ -233,9 +221,7 @@ tt_seteightbit (ttp) /* Set the tty associated with FD and TTP into eight-bit mode */ int -ttfd_eightbit (fd, ttp) - int fd; - TTYSTRUCT *ttp; +ttfd_eightbit (int fd, TTYSTRUCT *ttp) { if (tt_seteightbit (ttp) < 0) return -1; @@ -244,7 +230,7 @@ ttfd_eightbit (fd, ttp) /* Set the terminal into eight-bit mode */ int -tteightbit () +tteightbit (void) { TTYSTRUCT tt; @@ -259,8 +245,7 @@ tteightbit () * ttsetattr, the terminal will be in non-canonical input mode. */ int -tt_setnocanon (ttp) - TTYSTRUCT *ttp; +tt_setnocanon (TTYSTRUCT *ttp) { #if defined (TERMIOS_TTY_DRIVER) || defined (TERMIO_TTY_DRIVER) ttp->c_lflag &= ~ICANON; @@ -271,9 +256,7 @@ tt_setnocanon (ttp) /* Set the tty associated with FD and TTP into non-canonical mode */ int -ttfd_nocanon (fd, ttp) - int fd; - TTYSTRUCT *ttp; +ttfd_nocanon (int fd, TTYSTRUCT *ttp) { if (tt_setnocanon (ttp) < 0) return -1; @@ -282,7 +265,7 @@ ttfd_nocanon (fd, ttp) /* Set the terminal into non-canonical mode */ int -ttnocanon () +ttnocanon (void) { TTYSTRUCT tt; @@ -297,8 +280,7 @@ ttnocanon () * ttsetattr, the terminal will be in cbreak, no-echo mode. */ int -tt_setcbreak(ttp) - TTYSTRUCT *ttp; +tt_setcbreak(TTYSTRUCT *ttp) { if (tt_setonechar (ttp) < 0) return -1; @@ -308,9 +290,7 @@ tt_setcbreak(ttp) /* Set the tty associated with FD and TTP into cbreak (no-echo, one-character-at-a-time) mode */ int -ttfd_cbreak (fd, ttp) - int fd; - TTYSTRUCT *ttp; +ttfd_cbreak (int fd, TTYSTRUCT *ttp) { if (tt_setcbreak (ttp) < 0) return -1; @@ -319,7 +299,7 @@ ttfd_cbreak (fd, ttp) /* Set the terminal into cbreak (no-echo, one-character-at-a-time) mode */ int -ttcbreak () +ttcbreak (void) { TTYSTRUCT tt; diff --git a/lib/sh/snprintf.c b/lib/sh/snprintf.c index 1f0f4c736..e8814b958 100644 --- a/lib/sh/snprintf.c +++ b/lib/sh/snprintf.c @@ -9,7 +9,7 @@ Unix snprintf implementation. derived from inetutils/libinetutils/snprintf.c Version 1.1 - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -77,7 +77,6 @@ #endif #define HAVE_ISINF_IN_LIBC #define HAVE_ISNAN_IN_LIBC -#define PREFER_STDARG #define HAVE_STRINGIZE #define HAVE_LIMITS_H #define HAVE_STDDEF_H @@ -89,19 +88,12 @@ #include <bashtypes.h> -#if defined(PREFER_STDARG) -# include <stdarg.h> -#else -# include <varargs.h> -#endif +#include <stdarg.h> #ifdef HAVE_LIMITS_H # include <limits.h> #endif #include <bashansi.h> -#ifdef HAVE_STDDEF_H -# include <stddef.h> -#endif #include <chartypes.h> #ifdef HAVE_STDINT_H @@ -129,8 +121,8 @@ # define FL_ADDBASE 0x02 /* add base# prefix to converted value */ # define FL_HEXUPPER 0x04 /* use uppercase when converting to hex */ # define FL_UNSIGNED 0x08 /* don't add any sign */ -extern char *fmtulong PARAMS((unsigned long int, int, char *, size_t, int)); -extern char *fmtullong PARAMS((unsigned long long int, int, char *, size_t, int)); +extern char *fmtulong (unsigned long int, int, char *, size_t, int); +extern char *fmtullong (unsigned long long int, int, char *, size_t, int); #endif #ifndef FREE @@ -178,9 +170,6 @@ extern char *fmtullong PARAMS((unsigned long long int, int, char *, size_t, int) #define ASBUFSIZE 128 -#define x_digs "0123456789abcdef" -#define X_digs "0123456789ABCDEF" - static char intbuf[INT_STRLEN_BOUND(unsigned long) + 1]; static int decpoint; @@ -271,38 +260,38 @@ struct DATA /* the floating point stuff */ #ifdef FLOATING_POINT -static double pow_10 PARAMS((int)); -static int log_10 PARAMS((double)); -static double integral PARAMS((double, double *)); -static char *numtoa PARAMS((double, int, int, char **)); +static double pow_10 (int); +static int log_10 (double); +static double integral (double, double *); +static char *numtoa (double, int, int, char **); #endif -static void init_data PARAMS((struct DATA *, char *, size_t, const char *, int)); -static void init_conv_flag PARAMS((struct DATA *)); +static void init_data (struct DATA *, char *, size_t, const char *, int); +static void init_conv_flag (struct DATA *); /* for the format */ #ifdef FLOATING_POINT -static void floating PARAMS((struct DATA *, double)); -static void exponent PARAMS((struct DATA *, double)); +static void floating (struct DATA *, double); +static void exponent (struct DATA *, double); #endif -static void number PARAMS((struct DATA *, unsigned long, int)); +static void number (struct DATA *, unsigned long, int); #ifdef HAVE_LONG_LONG_INT -static void lnumber PARAMS((struct DATA *, unsigned long long, int)); +static void lnumber (struct DATA *, unsigned long long, int); #endif -static void pointer PARAMS((struct DATA *, unsigned long)); -static void strings PARAMS((struct DATA *, char *)); +static void pointer (struct DATA *, unsigned long); +static void strings (struct DATA *, char *); #ifdef FLOATING_POINT # define FALLBACK_FMTSIZE 32 # define FALLBACK_BASE 4096 # define LFALLBACK_BASE 5120 # ifdef HAVE_LONG_DOUBLE -static void ldfallback PARAMS((struct DATA *, const char *, const char *, long double)); +static void ldfallback (struct DATA *, const char *, const char *, long double); # endif -static void dfallback PARAMS((struct DATA *, const char *, const char *, double)); +static void dfallback (struct DATA *, const char *, const char *, double); #endif -static char *groupnum PARAMS((char *)); +static char *groupnum (char *); #if defined (HAVE_LONG_DOUBLE) # define LONGDOUBLE long double @@ -331,10 +320,10 @@ static char *groupnum PARAMS((char *)); #endif #ifdef DRIVER -static void memory_error_and_abort (); -static void *xmalloc PARAMS((size_t)); -static void *xrealloc PARAMS((void *, size_t)); -static void xfree PARAMS((void *)); +static void memory_error_and_abort (void); +static void *xmalloc (size_t); +static void *xrealloc (void *, size_t); +static void xfree (void *); #else # include <xmalloc.h> #endif @@ -470,8 +459,7 @@ static void xfree PARAMS((void *)); * Find the nth power of 10 */ static double -pow_10(n) - int n; +pow_10(int n) { double P; @@ -514,8 +502,7 @@ pow_10(n) * NOTE: do not call this with r == 0 -- an infinite loop results. */ static int -log_10(r) - double r; +log_10(double r) { int i = 0; double result = 1.; @@ -549,9 +536,7 @@ log_10(r) * In many ways it resemble the modf() found on most Un*x */ static double -integral(real, ip) - double real; - double *ip; +integral(double real, double *ip) { int j; double i, s, p; @@ -598,10 +583,7 @@ integral(real, ip) * declare with fix size */ static char * -numtoa(number, base, precision, fract) - double number; - int base, precision; - char **fract; +numtoa(double number, int base, int precision, char **fract) { register int i, j; double ip, fp; /* integer and fraction part */ @@ -696,10 +678,7 @@ numtoa(number, base, precision, fract) * the representation with the right padding */ static void -number(p, d, base) - struct DATA *p; - unsigned long d; - int base; +number(struct DATA *p, unsigned long d, int base) { char *tmp, *t; long sd; @@ -772,10 +751,7 @@ number(p, d, base) * identical to number() but works for `long long' */ static void -lnumber(p, d, base) - struct DATA *p; - unsigned long long d; - int base; +lnumber(struct DATA *p, unsigned long long d, int base) { char *tmp, *t; long long sd; @@ -844,9 +820,7 @@ lnumber(p, d, base) #endif static void -pointer(p, d) - struct DATA *p; - unsigned long d; +pointer(struct DATA *p, unsigned long d) { char *tmp; @@ -869,9 +843,7 @@ pointer(p, d) /* %s strings */ static void -strings(p, tmp) - struct DATA *p; - char *tmp; +strings(struct DATA *p, char *tmp) { size_t len; @@ -886,9 +858,7 @@ strings(p, tmp) #if HANDLE_MULTIBYTE /* %ls wide-character strings */ static void -wstrings(p, tmp) - struct DATA *p; - wchar_t *tmp; +wstrings(struct DATA *p, wchar_t *tmp) { size_t len; mbstate_t mbs; @@ -927,9 +897,7 @@ wstrings(p, tmp) } static void -wchars (p, wc) - struct DATA *p; - wint_t wc; +wchars (struct DATA *p, wint_t wc) { char *lbuf, *l; mbstate_t mbs; @@ -956,10 +924,7 @@ wchars (p, wc) (mode == 2) we check for NaN. This does the necessary printing. Returns 1 if Inf or Nan, 0 if not. */ static int -chkinfnan(p, d, mode) - struct DATA *p; - double d; - int mode; /* == 1 for inf, == 2 for nan */ +chkinfnan(struct DATA *p, double d, int mode) { int i; char *tmp; @@ -987,9 +952,7 @@ chkinfnan(p, d, mode) /* %f %F %g %G floating point representation */ static void -floating(p, d) - struct DATA *p; - double d; +floating(struct DATA *p, double d) { char *tmp, *tmp2, *t; int i; @@ -1058,9 +1021,7 @@ floating(p, d) /* %e %E %g %G exponent representation */ static void -exponent(p, d) - struct DATA *p; - double d; +exponent(struct DATA *p, double d) { char *tmp, *tmp2; int j, i; @@ -1160,11 +1121,10 @@ exponent(p, d) grouping info and thousands separator. If no grouping should be performed, this returns NULL; the caller needs to check for it. */ static char * -groupnum (s) - char *s; +groupnum (char *s) { char *se, *ret, *re, *g; - int len, slen; + size_t len, slen; if (grouping == 0 || *grouping <= 0 || *grouping == CHAR_MAX) return ((char *)NULL); @@ -1221,8 +1181,7 @@ groupnum (s) /* initialize the conversion specifiers */ static void -init_conv_flag (p) - struct DATA *p; +init_conv_flag (struct DATA *p) { p->flags &= PF_ALLOCBUF; /* preserve PF_ALLOCBUF flag */ p->precision = p->width = NOT_FOUND; @@ -1231,12 +1190,7 @@ init_conv_flag (p) } static void -init_data (p, string, length, format, mode) - struct DATA *p; - char *string; - size_t length; - const char *format; - int mode; +init_data (struct DATA *p, char *string, size_t length, const char *format, int mode) { p->length = length - 1; /* leave room for '\0' */ p->holder = p->base = string; @@ -1246,16 +1200,7 @@ init_data (p, string, length, format, mode) } static int -#if defined (__STDC__) vsnprintf_internal(struct DATA *data, char *string, size_t length, const char *format, va_list args) -#else -vsnprintf_internal(data, string, length, format, args) - struct DATA *data; - char *string; - size_t length; - const char *format; - va_list args; -#endif { double d; /* temporary holder */ #ifdef HAVE_LONG_DOUBLE @@ -1639,10 +1584,7 @@ conv_break: * at it. Fall back to sprintf for long double formats. */ static void -ldfallback (data, fs, fe, ld) - struct DATA *data; - const char *fs, *fe; - long double ld; +ldfallback (struct DATA *data, const char *fs, const char *fe, long double ld) { register char *x; char fmtbuf[FALLBACK_FMTSIZE], *obuf; @@ -1672,10 +1614,7 @@ ldfallback (data, fs, fe, ld) #ifdef FLOATING_POINT /* Used for %a, %A if the libc printf supports them. */ static void -dfallback (data, fs, fe, d) - struct DATA *data; - const char *fs, *fe; - double d; +dfallback (struct DATA *data, const char *fs, const char *fe, double d) { register char *x; char fmtbuf[FALLBACK_FMTSIZE], obuf[FALLBACK_BASE]; @@ -1702,15 +1641,7 @@ dfallback (data, fs, fe, d) #if !HAVE_SNPRINTF int -#if defined (__STDC__) vsnprintf(char *string, size_t length, const char *format, va_list args) -#else -vsnprintf(string, length, format, args) - char *string; - size_t length; - const char *format; - va_list args; -#endif { struct DATA data; @@ -1721,21 +1652,13 @@ vsnprintf(string, length, format, args) } int -#if defined(PREFER_STDARG) snprintf(char *string, size_t length, const char * format, ...) -#else -snprintf(string, length, format, va_alist) - char *string; - size_t length; - const char *format; - va_dcl -#endif { struct DATA data; int rval; va_list args; - SH_VA_START(args, format); + va_start(args, format); if (string == 0 && length != 0) return 0; @@ -1752,14 +1675,7 @@ snprintf(string, length, format, va_alist) #if !HAVE_ASPRINTF int -#if defined (__STDC__) vasprintf(char **stringp, const char *format, va_list args) -#else -vasprintf(stringp, format, args) - char **stringp; - const char *format; - va_list args; -#endif { struct DATA data; char *string; @@ -1773,19 +1689,12 @@ vasprintf(stringp, format, args) } int -#if defined(PREFER_STDARG) asprintf(char **stringp, const char * format, ...) -#else -asprintf(stringp, format, va_alist) - char **stringp; - const char *format; - va_dcl -#endif { int rval; va_list args; - SH_VA_START(args, format); + va_start(args, format); rval = vasprintf (stringp, format, args); @@ -1801,15 +1710,14 @@ asprintf(stringp, format, va_alist) #ifdef DRIVER static void -memory_error_and_abort () +memory_error_and_abort (void) { write (2, "out of virtual memory\n", 22); abort (); } static void * -xmalloc(bytes) - size_t bytes; +xmalloc(size_t bytes) { void *ret; @@ -1820,9 +1728,7 @@ xmalloc(bytes) } static void * -xrealloc (pointer, bytes) - void *pointer; - size_t bytes; +xrealloc (void *pointer, size_t bytes) { void *ret; @@ -1833,15 +1739,14 @@ xrealloc (pointer, bytes) } static void -xfree(x) - void *x; +xfree(void *x) { if (x) free (x); } /* set of small tests for snprintf() */ -main() +main(int c, char **v) { char holder[100]; char *h; diff --git a/lib/sh/spell.c b/lib/sh/spell.c index cdf465b2d..eb215b84a 100644 --- a/lib/sh/spell.c +++ b/lib/sh/spell.c @@ -1,6 +1,6 @@ /* spell.c -- spelling correction for pathnames. */ -/* Copyright (C) 2000-2020 Free Software Foundation, Inc. +/* Copyright (C) 2000-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -40,8 +40,8 @@ #include <maxpath.h> #include <stdc.h> -static int mindist PARAMS((char *, char *, char *)); -static int spdist PARAMS((char *, char *)); +static int mindist (const char *, char *, char *); +static int spdist (char *, char *); /* * `spname' and its helpers are inspired by the code in "The UNIX @@ -59,9 +59,7 @@ static int spdist PARAMS((char *, char *)); * Stores corrected name in `newname'. */ int -spname(oldname, newname) - char *oldname; - char *newname; +spname(char *oldname, char *newname) { char *op, *np, *p; char guess[PATH_MAX + 1], best[PATH_MAX + 1]; @@ -104,10 +102,7 @@ spname(oldname, newname) * Search directory for a guess */ static int -mindist(dir, guess, best) - char *dir; - char *guess; - char *best; +mindist(const char *dir, char *guess, char *best) { DIR *fd; struct dirent *dp; @@ -155,8 +150,7 @@ mindist(dir, guess, best) * 3 otherwise */ static int -spdist(cur, new) - char *cur, *new; +spdist(char *cur, char *new) { while (*cur == *new) { @@ -188,10 +182,9 @@ spdist(cur, new) } char * -dirspell (dirname) - char *dirname; +dirspell (char *dirname) { - int n; + size_t n; char *guess; n = (strlen (dirname) * 3 + 1) / 2 + 1; diff --git a/lib/sh/strcasecmp.c b/lib/sh/strcasecmp.c index 70d0551a1..e68dffc6f 100644 --- a/lib/sh/strcasecmp.c +++ b/lib/sh/strcasecmp.c @@ -1,6 +1,6 @@ /* strcasecmp.c - functions for case-insensitive string comparison. */ -/* Copyright (C) 1995 Free Software Foundation, Inc. +/* Copyright (C) 1995, 2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,10 +29,7 @@ /* Compare at most COUNT characters from string1 to string2. Case doesn't matter. */ int -strncasecmp (string1, string2, count) - const char *string1; - const char *string2; - size_t count; +strncasecmp (const char *string1, const char *string2, size_t count) { register const char *s1; register const char *s2; @@ -58,9 +55,7 @@ strncasecmp (string1, string2, count) /* strcmp (), but caseless. */ int -strcasecmp (string1, string2) - const char *string1; - const char *string2; +strcasecmp (const char *string1, const char *string2) { register const char *s1; register const char *s2; diff --git a/lib/sh/strcasestr.c b/lib/sh/strcasestr.c index c819b3eb8..7239277ac 100644 --- a/lib/sh/strcasestr.c +++ b/lib/sh/strcasestr.c @@ -1,7 +1,7 @@ /* strcasestr.c - Find if one string appears as a substring of another string, without regard to case. */ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -30,9 +30,7 @@ match in s1. The compare is case insensitive. This is a case-insensitive strstr(3). */ char * -strcasestr (s1, s2) - const char *s1; - const char *s2; +strcasestr (const char *s1, const char *s2) { register int i, l, len, c; diff --git a/lib/sh/strchrnul.c b/lib/sh/strchrnul.c index 00cb88c4e..65273af2b 100644 --- a/lib/sh/strchrnul.c +++ b/lib/sh/strchrnul.c @@ -1,5 +1,5 @@ /* Searching in a string. - Copyright (C) 2012 Free Software Foundation, Inc. + Copyright (C) 2012, 2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,9 +22,7 @@ /* Find the first occurrence of C in S or the final NUL byte. */ char * -strchrnul (s, c_in) - const char *s; - int c_in; +strchrnul (const char *s, int c_in) { char c; register char *s1; diff --git a/lib/sh/strdup.c b/lib/sh/strdup.c index 3d35f7c0a..51f6dea60 100644 --- a/lib/sh/strdup.c +++ b/lib/sh/strdup.c @@ -1,6 +1,6 @@ /* strdup - return a copy of a string in newly-allocated memory. */ -/* Copyright (C) 2013 Free Software Foundation, Inc. +/* Copyright (C) 2013,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -26,8 +26,7 @@ /* Duplicate S, returning an identical malloc'd string. */ char * -strdup (s) - const char *s; +strdup (const char *s) { size_t len; void *new; diff --git a/lib/sh/strerror.c b/lib/sh/strerror.c index bf6392630..0de2f8001 100644 --- a/lib/sh/strerror.c +++ b/lib/sh/strerror.c @@ -1,6 +1,6 @@ /* strerror.c - string corresponding to a particular value of errno. */ -/* Copyright (C) 1995 Free Software Foundation, Inc. +/* Copyright (C) 1995,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -49,8 +49,7 @@ extern int errno; static char *errbase = "Unknown system error "; char * -strerror (e) - int e; +strerror (int e) { static char emsg[40]; #if defined (HAVE_SYS_ERRLIST) diff --git a/lib/sh/stringlist.c b/lib/sh/stringlist.c index 3f28b6319..2e61287f7 100644 --- a/lib/sh/stringlist.c +++ b/lib/sh/stringlist.c @@ -1,6 +1,6 @@ /* stringlist.c - functions to handle a generic `list of strings' structure */ -/* Copyright (C) 2000-2019 Free Software Foundation, Inc. +/* Copyright (C) 2000-2019, 2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -37,11 +37,10 @@ /* Allocate a new STRINGLIST, with room for N strings. */ STRINGLIST * -strlist_create (n) - int n; +strlist_create (size_t n) { STRINGLIST *ret; - register int i; + int i; ret = (STRINGLIST *)xmalloc (sizeof (STRINGLIST)); if (n) @@ -61,11 +60,9 @@ strlist_create (n) } STRINGLIST * -strlist_resize (sl, n) - STRINGLIST *sl; - int n; +strlist_resize (STRINGLIST *sl, size_t n) { - register int i; + size_t i; if (sl == 0) return (sl = strlist_create (n)); @@ -81,8 +78,7 @@ strlist_resize (sl, n) } void -strlist_flush (sl) - STRINGLIST *sl; +strlist_flush (STRINGLIST *sl) { if (sl == 0 || sl->list == 0) return; @@ -91,8 +87,7 @@ strlist_flush (sl) } void -strlist_dispose (sl) - STRINGLIST *sl; +strlist_dispose (STRINGLIST *sl) { if (sl == 0) return; @@ -102,9 +97,7 @@ strlist_dispose (sl) } int -strlist_remove (sl, s) - STRINGLIST *sl; - char *s; +strlist_remove (STRINGLIST *sl, const char *s) { int r; @@ -118,11 +111,10 @@ strlist_remove (sl, s) } STRINGLIST * -strlist_copy (sl) - STRINGLIST *sl; +strlist_copy (STRINGLIST *sl) { STRINGLIST *new; - register int i; + int i; if (sl == 0) return ((STRINGLIST *)0); @@ -144,11 +136,10 @@ strlist_copy (sl) /* Return a new STRINGLIST with everything from M1 and M2. */ STRINGLIST * -strlist_merge (m1, m2) - STRINGLIST *m1, *m2; +strlist_merge (STRINGLIST *m1, STRINGLIST *m2) { STRINGLIST *sl; - int i, n, l1, l2; + size_t i, n, l1, l2; l1 = m1 ? m1->list_len : 0; l2 = m2 ? m2->list_len : 0; @@ -165,10 +156,9 @@ strlist_merge (m1, m2) /* Make STRINGLIST M1 contain everything in M1 and M2. */ STRINGLIST * -strlist_append (m1, m2) - STRINGLIST *m1, *m2; +strlist_append (STRINGLIST *m1, STRINGLIST *m2) { - register int i, n, len1, len2; + size_t i, n, len1, len2; if (m1 == 0) return (m2 ? strlist_copy (m2) : (STRINGLIST *)0); @@ -189,11 +179,9 @@ strlist_append (m1, m2) } STRINGLIST * -strlist_prefix_suffix (sl, prefix, suffix) - STRINGLIST *sl; - char *prefix, *suffix; +strlist_prefix_suffix (STRINGLIST *sl, const char *prefix, const char *suffix) { - int plen, slen, tlen, llen, i; + size_t plen, slen, tlen, llen, i; char *t; if (sl == 0 || sl->list == 0 || sl->list_len == 0) @@ -223,11 +211,9 @@ strlist_prefix_suffix (sl, prefix, suffix) } void -strlist_print (sl, prefix) - STRINGLIST *sl; - char *prefix; +strlist_print (STRINGLIST *sl, const char *prefix) { - register int i; + int i; if (sl == 0) return; @@ -236,11 +222,9 @@ strlist_print (sl, prefix) } void -strlist_walk (sl, func) - STRINGLIST *sl; - sh_strlist_map_func_t *func; +strlist_walk (STRINGLIST *sl, sh_strlist_map_func_t *func) { - register int i; + int i; if (sl == 0) return; @@ -250,8 +234,7 @@ strlist_walk (sl, func) } void -strlist_sort (sl) - STRINGLIST *sl; +strlist_sort (STRINGLIST *sl) { if (sl == 0 || sl->list_len == 0 || sl->list == 0) return; @@ -259,9 +242,7 @@ strlist_sort (sl) } STRINGLIST * -strlist_from_word_list (list, alloc, starting_index, ip) - WORD_LIST *list; - int alloc, starting_index, *ip; +strlist_from_word_list (WORD_LIST *list, int alloc, int starting_index, int *ip) { STRINGLIST *ret; int slen, len; @@ -272,7 +253,7 @@ strlist_from_word_list (list, alloc, starting_index, ip) *ip = 0; return ((STRINGLIST *)0); } - slen = list_length (list); + slen = list_length ((GENERIC_LIST *)list); ret = (STRINGLIST *)xmalloc (sizeof (STRINGLIST)); ret->list = strvec_from_word_list (list, alloc, starting_index, &len); ret->list_size = slen + starting_index; @@ -283,9 +264,7 @@ strlist_from_word_list (list, alloc, starting_index, ip) } WORD_LIST * -strlist_to_word_list (sl, alloc, starting_index) - STRINGLIST *sl; - int alloc, starting_index; +strlist_to_word_list (STRINGLIST *sl, int alloc, int starting_index) { WORD_LIST *list; diff --git a/lib/sh/stringvec.c b/lib/sh/stringvec.c index 860004296..193a26f92 100644 --- a/lib/sh/stringvec.c +++ b/lib/sh/stringvec.c @@ -1,6 +1,6 @@ /* stringvec.c - functions for managing arrays of strings. */ -/* Copyright (C) 2000-2002 Free Software Foundation, Inc. +/* Copyright (C) 2000-2002,2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -27,6 +27,7 @@ #endif #include <bashansi.h> +#include <stdckdint.h> #include <stdio.h> #include <chartypes.h> @@ -34,42 +35,35 @@ /* Allocate an array of strings with room for N members. */ char ** -strvec_create (n) - int n; +strvec_create (size_t n) { - return ((char **)xmalloc ((n) * sizeof (char *))); + return ((char **)xreallocarray (NULL, n, sizeof (char *))); } /* Allocate an array of strings with room for N members. */ char ** -strvec_mcreate (n) - int n; +strvec_mcreate (size_t n) { - return ((char **)malloc ((n) * sizeof (char *))); + return ((char **)reallocarray (NULL, n, sizeof (char *))); } char ** -strvec_resize (array, nsize) - char **array; - int nsize; +strvec_resize (char **array, size_t nsize) { - return ((char **)xrealloc (array, nsize * sizeof (char *))); + return ((char **)xreallocarray (array, nsize, sizeof (char *))); } char ** -strvec_mresize (array, nsize) - char **array; - int nsize; +strvec_mresize (char **array, size_t nsize) { - return ((char **)realloc (array, nsize * sizeof (char *))); + return ((char **)reallocarray (array, nsize, sizeof (char *))); } /* Return the length of ARRAY, a NULL terminated array of char *. */ -int -strvec_len (array) - char **array; +size_t +strvec_len (char * const *array) { - register int i; + register size_t i; for (i = 0; array[i]; i++); return (i); @@ -77,10 +71,9 @@ strvec_len (array) /* Free the contents of ARRAY, a NULL terminated array of char *. */ void -strvec_flush (array) - char **array; +strvec_flush (char **array) { - register int i; + register size_t i; if (array == 0) return; @@ -90,8 +83,7 @@ strvec_flush (array) } void -strvec_dispose (array) - char **array; +strvec_dispose (char **array) { if (array == 0) return; @@ -101,10 +93,9 @@ strvec_dispose (array) } int -strvec_remove (array, name) - char **array, *name; +strvec_remove (char **array, const char *name) { - register int i, j; + size_t i, j; char *x; if (array == 0) @@ -124,11 +115,10 @@ strvec_remove (array, name) /* Find NAME in ARRAY. Return the index of NAME, or -1 if not present. ARRAY should be NULL terminated. */ -int -strvec_search (array, name) - char **array, *name; +ptrdiff_t +strvec_search (char **array, const char *name) { - int i; + size_t i; for (i = 0; array[i]; i++) if (STREQ (name, array[i])) @@ -139,11 +129,9 @@ strvec_search (array, name) /* Allocate and return a new copy of ARRAY and its contents. */ char ** -strvec_copy (array) - char **array; +strvec_copy (char * const *array) { - register int i; - int len; + size_t i, len; char **ret; len = strvec_len (array); @@ -161,8 +149,7 @@ strvec_copy (array) Perform a bytewise comparison if *S1 and *S2 collate equally. */ int -strvec_posixcmp (s1, s2) - register char **s1, **s2; +strvec_posixcmp (char **s1, char **s2) { int result; @@ -181,8 +168,7 @@ strvec_posixcmp (s1, s2) /* Comparison routine for use with qsort() on arrays of strings. Uses strcoll(3) if available, otherwise it uses strcmp(3). */ int -strvec_strcmp (s1, s2) - register char **s1, **s2; +strvec_strcmp (char **s1, char **s2) { #if defined (HAVE_STRCOLL) return (strcoll (*s1, *s2)); @@ -198,9 +184,7 @@ strvec_strcmp (s1, s2) /* Sort ARRAY, a null terminated array of pointers to strings. */ void -strvec_sort (array, posix) - char **array; - int posix; +strvec_sort (char **array, int posix) { if (posix) qsort (array, strvec_len (array), sizeof (char *), (QSFUNC *)strvec_posixcmp); @@ -217,14 +201,12 @@ strvec_sort (array, posix) space at the beginning of the array. */ char ** -strvec_from_word_list (list, alloc, starting_index, ip) - WORD_LIST *list; - int alloc, starting_index, *ip; +strvec_from_word_list (WORD_LIST *list, int alloc, int starting_index, int *ip) { - int count; + size_t count; char **array; - count = list_length (list); + count = list_length ((GENERIC_LIST *)list); array = (char **)xmalloc ((1 + count + starting_index) * sizeof (char *)); for (count = 0; count < starting_index; count++) @@ -244,13 +226,11 @@ strvec_from_word_list (list, alloc, starting_index, ip) in ARRAY to begin. */ WORD_LIST * -strvec_to_word_list (array, alloc, starting_index) - char **array; - int alloc, starting_index; +strvec_to_word_list (char **array, int alloc, int starting_index) { WORD_LIST *list; WORD_DESC *w; - int i, count; + size_t i, count; if (array == 0 || array[0] == 0) return (WORD_LIST *)NULL; diff --git a/lib/sh/strnlen.c b/lib/sh/strnlen.c index 10414d358..e93904e0b 100644 --- a/lib/sh/strnlen.c +++ b/lib/sh/strnlen.c @@ -1,6 +1,6 @@ /* strnlen - return length of passed string, with length limit */ -/* Copyright (C) 2004 Free Software Foundation, Inc. +/* Copyright (C) 2004, 2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,9 +35,7 @@ /* Find the length of S, but scan at most MAXLEN characters. If no '\0' terminator is found within the first MAXLEN characters, return MAXLEN. */ size_t -strnlen (s, maxlen) - register const char *s; - size_t maxlen; +strnlen (const char *s, size_t maxlen) { register const char *e; size_t n; diff --git a/lib/sh/strpbrk.c b/lib/sh/strpbrk.c index 8cce8308e..3ef434017 100644 --- a/lib/sh/strpbrk.c +++ b/lib/sh/strpbrk.c @@ -1,6 +1,6 @@ /* strpbrk.c - locate multiple characters in a string */ -/* Copyright (C) 1991, 1994 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1994, 2022 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. @@ -31,9 +31,7 @@ /* Find the first occurrence in S of any character in ACCEPT. */ char * -strpbrk (s, accept) - register const char *s; - register const char *accept; +strpbrk (const char *s, const char *accept) { while (*s != '\0') { diff --git a/lib/sh/strstr.c b/lib/sh/strstr.c index c43b05e37..fb69f9556 100644 --- a/lib/sh/strstr.c +++ b/lib/sh/strstr.c @@ -36,7 +36,7 @@ #endif #include <sys/types.h> -typedef unsigned chartype; +typedef unsigned int chartype; #undef strstr diff --git a/lib/sh/strtod.c b/lib/sh/strtod.c index 55e115405..fec80d2e2 100644 --- a/lib/sh/strtod.c +++ b/lib/sh/strtod.c @@ -1,6 +1,6 @@ /* strtod.c - convert string to double-precision floating-point value. */ -/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 2022-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -41,24 +41,18 @@ extern int errno; #include <bashansi.h> -#ifndef NULL -# define NULL 0 -#endif - #ifndef HUGE_VAL # define HUGE_VAL HUGE #endif #ifndef locale_decpoint -extern int locale_decpoint PARAMS((void)); +extern int locale_decpoint (void); #endif /* Convert NPTR to a double. If ENDPTR is not NULL, a pointer to the character after the last one used in the number is put in *ENDPTR. */ double -strtod (nptr, endptr) - const char *nptr; - char **endptr; +strtod (const char *nptr, char **endptr) { register const char *s; short sign; diff --git a/lib/sh/strtoimax.c b/lib/sh/strtoimax.c index 584fa0ba2..0e6c1c267 100644 --- a/lib/sh/strtoimax.c +++ b/lib/sh/strtoimax.c @@ -1,6 +1,6 @@ /* strtoimax - convert string representation of a number into an intmax_t value. */ -/* Copyright 1999-2020 Free Software Foundation, Inc. +/* Copyright 1999-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -45,14 +45,14 @@ "this configure-time declaration test was not run" #endif #if !HAVE_DECL_STRTOL -extern long strtol PARAMS((const char *, char **, int)); +extern long strtol (const char *, char **, int); #endif #ifndef HAVE_DECL_STRTOLL "this configure-time declaration test was not run" #endif #if !HAVE_DECL_STRTOLL && HAVE_LONG_LONG_INT -extern long long strtoll PARAMS((const char *, char **, int)); +extern long long strtoll (const char *, char **, int); #endif #ifdef strtoimax @@ -60,10 +60,7 @@ extern long long strtoll PARAMS((const char *, char **, int)); #endif intmax_t -strtoimax (ptr, endptr, base) - const char *ptr; - char **endptr; - int base; +strtoimax (const char *ptr, char **endptr, int base) { #if HAVE_LONG_LONG_INT verify(size_is_that_of_long_or_long_long, diff --git a/lib/sh/strtol.c b/lib/sh/strtol.c index c839a97ca..7b6427ec2 100644 --- a/lib/sh/strtol.c +++ b/lib/sh/strtol.c @@ -1,6 +1,6 @@ /* strtol - convert string representation of a number into a long integer value. */ -/* Copyright (C) 1991,92,94,95,96,97,98,99,2000,2001 Free Software Foundation, Inc. +/* Copyright (C) 1991-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -42,10 +42,6 @@ extern int errno; #include <stdc.h> #include <bashansi.h> -#ifndef NULL -# define NULL 0 -#endif - /* Nonzero if we are defining `strtoul' or `strtoull', operating on unsigned integers. */ #ifndef UNSIGNED @@ -90,10 +86,7 @@ extern int errno; one converted is stored in *ENDPTR. */ INT -strtol (nptr, endptr, base) - const char *nptr; - char **endptr; - int base; +strtol (const char *nptr, char **endptr, int base) { int negative; register unsigned LONG int cutoff; diff --git a/lib/sh/strtoumax.c b/lib/sh/strtoumax.c index 2e26efcf2..8996f69fb 100644 --- a/lib/sh/strtoumax.c +++ b/lib/sh/strtoumax.c @@ -1,6 +1,6 @@ /* strtoumax - convert string representation of a number into an uintmax_t value. */ -/* Copyright 1999-2020 Free Software Foundation, Inc. +/* Copyright 1999-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -45,14 +45,14 @@ "this configure-time declaration test was not run" #endif #if !HAVE_DECL_STRTOUL -extern unsigned long strtoul PARAMS((const char *, char **, int)); +extern unsigned long strtoul (const char *, char **, int); #endif #ifndef HAVE_DECL_STRTOULL "this configure-time declaration test was not run" #endif #if !HAVE_DECL_STRTOULL && HAVE_UNSIGNED_LONG_LONG_INT -extern unsigned long long strtoull PARAMS((const char *, char **, int)); +extern unsigned long long strtoull (const char *, char **, int); #endif #ifdef strtoumax @@ -60,10 +60,7 @@ extern unsigned long long strtoull PARAMS((const char *, char **, int)); #endif uintmax_t -strtoumax (ptr, endptr, base) - const char *ptr; - char **endptr; - int base; +strtoumax (const char *ptr, char **endptr, int base) { #if HAVE_UNSIGNED_LONG_LONG_INT verify (size_is_that_of_unsigned_long_or_unsigned_long_long, diff --git a/lib/sh/strtrans.c b/lib/sh/strtrans.c index b2b1acca3..af75dcfa8 100644 --- a/lib/sh/strtrans.c +++ b/lib/sh/strtrans.c @@ -1,6 +1,6 @@ /* strtrans.c - Translate and untranslate strings with ANSI-C escape sequences. */ -/* Copyright (C) 2000-2015 Free Software Foundation, Inc. +/* Copyright (C) 2000-2015,2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -45,24 +45,23 @@ that we're translating a string for `echo -e', and therefore should not treat a single quote as a character that may be escaped with a backslash. If (FLAGS&2) is non-zero, we're expanding for the parser and want to - quote CTLESC and CTLNUL with CTLESC. If (flags&4) is non-zero, we want + quote CTLESC and CTLNUL with CTLESC. If (FLAGS&4) is non-zero, we want to remove the backslash before any unrecognized escape sequence. */ char * -ansicstr (string, len, flags, sawc, rlen) - char *string; - int len, flags, *sawc, *rlen; +ansicstr (const char *string, size_t len, int flags, int *sawc, size_t *rlen) { int c, temp; - char *ret, *r, *s; + char *ret, *r; + const char *s; unsigned long v; size_t clen; - int b, mb_cur_max; + int mb_cur_max; #if defined (HANDLE_MULTIBYTE) wchar_t wc; #endif if (string == 0 || *string == '\0') - return ((char *)NULL); + return ((char *)0); mb_cur_max = MB_CUR_MAX; #if defined (HANDLE_MULTIBYTE) @@ -96,13 +95,8 @@ ansicstr (string, len, flags, sawc, rlen) { switch (c = *s++) { -#if defined (__STDC__) case 'a': c = '\a'; break; case 'v': c = '\v'; break; -#else - case 'a': c = (int) 0x07; break; - case 'v': c = (int) 0x0B; break; -#endif case 'b': c = '\b'; break; case 'e': case 'E': /* ESC -- non-ANSI */ c = ESC; break; @@ -204,7 +198,9 @@ ansicstr (string, len, flags, sawc, rlen) s++; if ((flags & 2) && c == '\\' && c == *s) s++; /* Posix requires $'\c\\' do backslash escaping */ - c = TOCTRL(c); + else if ((flags & 2) && c == CTLESC && (*s == CTLESC || *s == CTLNUL)) + c = *s++; + c = TOCTRL(c); break; } /*FALLTHROUGH*/ @@ -227,12 +223,11 @@ ansicstr (string, len, flags, sawc, rlen) /* Take a string STR, possibly containing non-printing characters, and turn it into a $'...' ANSI-C style quoted string. Returns a new string. */ char * -ansic_quote (str, flags, rlen) - char *str; - int flags, *rlen; +ansic_quote (const char *str, int flags, int *rlen) { - char *r, *ret, *s; - int l, rsize; + char *r, *ret; + const char *s; + size_t l, rsize; unsigned char c; size_t clen; int b; @@ -252,20 +247,15 @@ ansic_quote (str, flags, rlen) for (s = str; c = *s; s++) { - b = l = 1; /* 1 == add backslash; 0 == no backslash */ + b = 1; /* 1 == add backslash; 0 == no backslash */ + l = 1; clen = 1; switch (c) { case ESC: c = 'E'; break; -#ifdef __STDC__ case '\a': c = 'a'; break; case '\v': c = 'v'; break; -#else - case 0x07: c = 'a'; break; - case 0x0b: c = 'v'; break; -#endif - case '\b': c = 'b'; break; case '\f': c = 'f'; break; case '\n': c = 'n'; break; @@ -318,8 +308,7 @@ ansic_quote (str, flags, rlen) #if defined (HANDLE_MULTIBYTE) int -ansic_wshouldquote (string) - const char *string; +ansic_wshouldquote (const char *string) { const wchar_t *wcs; wchar_t wcc; @@ -348,8 +337,7 @@ ansic_wshouldquote (string) /* return 1 if we need to quote with $'...' because of non-printing chars. */ int -ansic_shouldquote (string) - const char *string; +ansic_shouldquote (const char *string) { const char *s; unsigned char c; @@ -373,12 +361,11 @@ ansic_shouldquote (string) /* $'...' ANSI-C expand the portion of STRING between START and END and return the result. The result cannot be longer than the input string. */ char * -ansiexpand (string, start, end, lenp) - char *string; - int start, end, *lenp; +ansiexpand (const char *string, int start, int end, size_t *lenp) { char *temp, *t; - int len, tlen; + int len; + size_t tlen; temp = (char *)xmalloc (end - start + 1); for (tlen = 0, len = start; len < end; ) diff --git a/lib/sh/strvis.c b/lib/sh/strvis.c index 7a11d5799..a4d5bf04e 100644 --- a/lib/sh/strvis.c +++ b/lib/sh/strvis.c @@ -53,12 +53,7 @@ #endif int -sh_charvis (s, sindp, slen, ret, rindp) - const char *s; - size_t *sindp; - size_t slen; - char *ret; - size_t *rindp; +sh_charvis (const char *s, size_t *sindp, size_t slen, char *ret, size_t *rindp) { unsigned char c; size_t si, ri; @@ -117,8 +112,7 @@ sh_charvis (s, sindp, slen, ret, rindp) /* Return a new string with `unsafe' non-graphical characters in S rendered in a visible way. */ char * -sh_strvis (string) - const char *string; +sh_strvis (const char *string) { size_t slen, sind; char *ret; diff --git a/lib/sh/timers.c b/lib/sh/timers.c index 69b754c97..f04af8bdc 100644 --- a/lib/sh/timers.c +++ b/lib/sh/timers.c @@ -1,6 +1,6 @@ /* timers - functions to manage shell timers */ -/* Copyright (C) 2021 Free Software Foundation, Inc. +/* Copyright (C) 2021,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -47,6 +47,10 @@ extern int errno; #define FREE(s) do { if (s) free (s); } while (0) #endif +#ifndef USEC_PER_SEC +# define USEC_PER_SEC 1000000 +#endif + extern unsigned int falarm (unsigned int, unsigned int); static void shtimer_zero (sh_timer *); diff --git a/lib/sh/times.c b/lib/sh/times.c index 2423078ab..d8a376857 100644 --- a/lib/sh/times.c +++ b/lib/sh/times.c @@ -1,6 +1,6 @@ /* times.c - times(3) library function */ -/* Copyright (C) 1999-2020 Free Software Foundation, Inc. +/* Copyright (C) 1999-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -30,13 +30,12 @@ # include <sys/resource.h> #endif /* HAVE_SYS_RESOURCE_H && HAVE_GETRUSAGE */ -extern long get_clk_tck PARAMS((void)); +extern long get_clk_tck (void); #define CONVTCK(r) (r.tv_sec * clk_tck + r.tv_usec / (1000000 / clk_tck)) clock_t -times(tms) - struct tms *tms; +times(struct tms *tms) { clock_t rv; static long clk_tck = -1; diff --git a/lib/sh/timeval.c b/lib/sh/timeval.c index f2ca7624a..121127768 100644 --- a/lib/sh/timeval.c +++ b/lib/sh/timeval.c @@ -1,6 +1,6 @@ /* timeval.c - functions to perform operations on struct timevals */ -/* Copyright (C) 1999 Free Software Foundation, Inc. +/* Copyright (C) 1999,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,14 +29,13 @@ #include <stdc.h> #ifndef locale_decpoint -extern int locale_decpoint PARAMS((void)); +extern int locale_decpoint (void); #endif #include <stdio.h> struct timeval * -difftimeval (d, t1, t2) - struct timeval *d, *t1, *t2; +difftimeval (struct timeval *d, struct timeval *t1, struct timeval *t2) { d->tv_sec = t2->tv_sec - t1->tv_sec; d->tv_usec = t2->tv_usec - t1->tv_usec; @@ -54,8 +53,7 @@ difftimeval (d, t1, t2) } struct timeval * -addtimeval (d, t1, t2) - struct timeval *d, *t1, *t2; +addtimeval (struct timeval *d, struct timeval *t1, struct timeval *t2) { d->tv_sec = t1->tv_sec + t2->tv_sec; d->tv_usec = t1->tv_usec + t2->tv_usec; @@ -68,9 +66,7 @@ addtimeval (d, t1, t2) } struct timeval * -multimeval (d, m) - struct timeval *d; - int m; +multimeval (struct timeval *d, int m) { time_t t; @@ -81,9 +77,7 @@ multimeval (d, m) } struct timeval * -divtimeval (d, m) - struct timeval *d; - int m; +divtimeval (struct timeval *d, int m) { time_t t; @@ -96,8 +90,7 @@ divtimeval (d, m) /* Do "cpu = ((user + sys) * 10000) / real;" with timevals. Barely-tested code from Deven T. Corzine <deven@ties.org>. */ int -timeval_to_cpu (rt, ut, st) - struct timeval *rt, *ut, *st; /* real, user, sys */ +timeval_to_cpu (struct timeval *rt, struct timeval *ut, struct timeval *st) { struct timeval t1, t2; register int i; @@ -130,50 +123,51 @@ timeval_to_cpu (rt, ut, st) return ((t2.tv_sec == 0) ? 0 : t1.tv_sec / t2.tv_sec); } -/* Convert a pointer to a struct timeval to seconds and thousandths of a - second, returning the values in *SP and *SFP, respectively. This does - rounding on the fractional part, not just truncation to three places. */ +/* Convert a pointer to a struct timeval to seconds and fractions of a + second, returning the values in *SP and *SFP, respectively. The precision + of the fractional part is determined by MAXVAL. For instance, if MAXVAL + is 10000000, this just returns the tv_usec field. This does rounding on + the fractional part, not just truncation to three places. */ void -timeval_to_secs (tvp, sp, sfp) - struct timeval *tvp; - time_t *sp; - int *sfp; +timeval_to_secs (struct timeval *tvp, time_t *sp, long *sfp, int maxval) { int rest; *sp = tvp->tv_sec; *sfp = tvp->tv_usec % 1000000; /* pretty much a no-op */ - rest = *sfp % 1000; - *sfp = (*sfp * 1000) / 1000000; - if (rest >= 500) - *sfp += 1; + if (maxval < 1000000) /* don't bother otherwise */ + { + rest = *sfp % maxval; + *sfp = (*sfp * maxval) / 1000000; + if (rest >= maxval/2) + *sfp += 1; + } /* Sanity check */ - if (*sfp >= 1000) + if (*sfp >= maxval) { *sp += 1; - *sfp -= 1000; + *sfp -= maxval; } } /* Print the contents of a struct timeval * in a standard way to stdio stream FP. */ void -print_timeval (fp, tvp) - FILE *fp; - struct timeval *tvp; +print_timeval (FILE *fp, struct timeval *tvp) { time_t timestamp; long minutes; - int seconds, seconds_fraction; + int seconds; + long seconds_fraction; - timeval_to_secs (tvp, &timestamp, &seconds_fraction); + timeval_to_secs (tvp, &timestamp, &seconds_fraction, 1000); minutes = timestamp / 60; seconds = timestamp % 60; - fprintf (fp, "%ldm%d%c%03ds", minutes, seconds, locale_decpoint (), seconds_fraction); + fprintf (fp, "%ldm%d%c%03lds", minutes, seconds, locale_decpoint (), seconds_fraction); } #endif /* HAVE_TIMEVAL */ diff --git a/lib/sh/tmpfile.c b/lib/sh/tmpfile.c index ef8b067be..006b6b177 100644 --- a/lib/sh/tmpfile.c +++ b/lib/sh/tmpfile.c @@ -2,7 +2,7 @@ * tmpfile.c - functions to create and safely open temp files for the shell. */ -/* Copyright (C) 2000-2020 Free Software Foundation, Inc. +/* Copyright (C) 2000-2020,2022-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -42,6 +42,10 @@ extern int errno; #endif +#if defined (HAVE_GETRANDOM) || defined (HAVE_ARC4RANDOM) || defined (HAVE_GETENTROPY) +# define USE_URANDOM32 +#endif + #define BASEOPENFLAGS (O_CREAT | O_TRUNC | O_EXCL | O_BINARY) #define DEFAULT_TMPDIR "." /* bogus default, should be changed */ @@ -54,8 +58,10 @@ extern int errno; extern pid_t dollar_dollar_pid; -static char *get_sys_tmpdir PARAMS((void)); -static char *get_tmpdir PARAMS((int)); +static int tmpunlink (const char *); + +static char *get_sys_tmpdir (void); +static char *get_tmpdir (int); static char *sys_tmpdir = (char *)NULL; static int ntmpfiles; @@ -63,7 +69,7 @@ static int tmpnamelen = -1; static unsigned long filenum = 1L; static char * -get_sys_tmpdir () +get_sys_tmpdir (void) { if (sys_tmpdir) return sys_tmpdir; @@ -92,8 +98,7 @@ get_sys_tmpdir () } static char * -get_tmpdir (flags) - int flags; +get_tmpdir (int flags) { char *tdir; @@ -115,7 +120,7 @@ get_tmpdir (flags) } static void -sh_seedrand () +sh_seedrand (void) { #if HAVE_RANDOM int d; @@ -131,12 +136,20 @@ sh_seedrand () #endif } +static int +tmpunlink (const char *fn) +{ + int r; + + r = unlink (fn); + return r; +} + char * -sh_mktmpname (nameroot, flags) - char *nameroot; - int flags; +sh_mktmpname (const char *nameroot, int flags) { - char *filename, *tdir, *lroot; + char *filename, *tdir; + const char *lroot; struct stat sb; int r, tdlen; static int seeded = 0; @@ -156,22 +169,30 @@ sh_mktmpname (nameroot, flags) if (flags & MT_TEMPLATE) strcpy (filename, nameroot); else - sprintf (filename, "%s/%s.XXXXXX", tdir, lroot); + snprintf (filename, PATH_MAX, "%s/%s.XXXXXX", tdir, lroot); if (mktemp (filename) == 0) { free (filename); filename = NULL; } #else /* !USE_MKTEMP */ +#ifndef USE_URANDOM32 sh_seedrand (); +#endif while (1) { + unsigned long x; +#ifdef USE_URANDOM32 + x = (unsigned long) ((flags & MT_USERANDOM) ? get_urandom32 () : ntmpfiles++); +#else + x = (unsigned long) ((flags & MT_USERANDOM) ? random () : ntmpfiles++); +#endif filenum = (filenum << 1) ^ (unsigned long) time ((time_t *)0) ^ (unsigned long) dollar_dollar_pid ^ - (unsigned long) ((flags & MT_USERANDOM) ? random () : ntmpfiles++); - sprintf (filename, "%s/%s-%lu", tdir, lroot, filenum); - if (tmpnamelen > 0 && tmpnamelen < 32) + x; + snprintf (filename, PATH_MAX, "%s/%s-%lu", tdir, lroot, filenum); + if (tmpnamelen > 0 && tmpnamelen < 32) /* XXX */ filename[tdlen + 1 + tmpnamelen] = '\0'; # ifdef HAVE_LSTAT r = lstat (filename, &sb); @@ -187,12 +208,10 @@ sh_mktmpname (nameroot, flags) } int -sh_mktmpfd (nameroot, flags, namep) - char *nameroot; - int flags; - char **namep; +sh_mktmpfd (const char *nameroot, int flags, char **namep) { - char *filename, *tdir, *lroot; + char *filename, *tdir; + const char *lroot; int fd, tdlen; filename = (char *)xmalloc (PATH_MAX + 1); @@ -210,8 +229,15 @@ sh_mktmpfd (nameroot, flags, namep) if (flags & MT_TEMPLATE) strcpy (filename, nameroot); else - sprintf (filename, "%s/%s.XXXXXX", tdir, lroot); + snprintf (filename, PATH_MAX, "%s/%s.XXXXXX", tdir, lroot); fd = mkstemp (filename); + if ((flags & MT_UNLINK) && tmpunlink (filename) < 0) + { + int e = errno; + close (fd); + fd = -1; + errno = e; + } if (fd < 0 || namep == 0) { free (filename); @@ -219,36 +245,53 @@ sh_mktmpfd (nameroot, flags, namep) } if (namep) *namep = filename; + return fd; #else /* !USE_MKSTEMP */ +#ifndef USE_URANDOM32 sh_seedrand (); +#endif do { + unsigned long x; +#ifdef USE_URANDOM32 + x = (unsigned long) ((flags & MT_USERANDOM) ? get_urandom32 () : ntmpfiles++); +#else + x = (unsigned long) ((flags & MT_USERANDOM) ? random () : ntmpfiles++); +#endif filenum = (filenum << 1) ^ (unsigned long) time ((time_t *)0) ^ (unsigned long) dollar_dollar_pid ^ - (unsigned long) ((flags & MT_USERANDOM) ? random () : ntmpfiles++); - sprintf (filename, "%s/%s-%lu", tdir, lroot, filenum); - if (tmpnamelen > 0 && tmpnamelen < 32) + x; + snprintf (filename, PATH_MAX, "%s/%s-%lu", tdir, lroot, filenum); + if (tmpnamelen > 0 && tmpnamelen < 32) /* XXX */ filename[tdlen + 1 + tmpnamelen] = '\0'; fd = open (filename, BASEOPENFLAGS | ((flags & MT_READWRITE) ? O_RDWR : O_WRONLY), 0600); } while (fd < 0 && errno == EEXIST); + if ((flags & MT_UNLINK) && (tmpunlink (filename) < 0) + { + int e = errno; + close (fd); + fd = -1; + errno = e; + } + if (fd < 0 || namep == 0) + { + free (filename); + filename = NULL; + } + if (namep) *namep = filename; - else - free (filename); return fd; #endif /* !USE_MKSTEMP */ } FILE * -sh_mktmpfp (nameroot, flags, namep) - char *nameroot; - int flags; - char **namep; +sh_mktmpfp (const char *nameroot, int flags, char **namep) { int fd; FILE *fp; @@ -263,14 +306,15 @@ sh_mktmpfp (nameroot, flags, namep) } char * -sh_mktmpdir (nameroot, flags) - char *nameroot; - int flags; +sh_mktmpdir (const char *nameroot, int flags) { - char *filename, *tdir, *lroot, *dirname; - int fd, tdlen; - + char *filename; + int fd; #ifdef USE_MKDTEMP + char *tdir, *dirname; + const char *lroot; + int tdlen; + filename = (char *)xmalloc (PATH_MAX + 1); tdir = get_tmpdir (flags); tdlen = strlen (tdir); @@ -285,7 +329,7 @@ sh_mktmpdir (nameroot, flags) if (flags & MT_TEMPLATE) strcpy (filename, nameroot); else - sprintf (filename, "%s/%s.XXXXXX", tdir, lroot); + snprintf (filename, PATH_MAX, "%s/%s.XXXXXX", tdir, lroot); dirname = mkdtemp (filename); if (dirname == 0) { diff --git a/lib/sh/uconvert.c b/lib/sh/uconvert.c index 457552eb4..39790f6be 100644 --- a/lib/sh/uconvert.c +++ b/lib/sh/uconvert.c @@ -1,7 +1,7 @@ /* uconvert - convert string representations of decimal numbers into whole number/fractional value pairs. */ -/* Copyright (C) 2008,2009,2020 Free Software Foundation, Inc. +/* Copyright (C) 2008,2009,2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -40,7 +40,7 @@ #define RETURN(x) \ do { \ if (ip) *ip = ipart * mult; \ - if (up) *up = upart; \ + if (up) *up = upart * (ipart == 0 ? mult : 1); \ if (ep) *ep = p; \ return (x); \ } while (0) @@ -57,10 +57,7 @@ static int multiplier[7] = { 1, 100000, 10000, 1000, 100, 10, 1 }; Return 1 if value converted; 0 if invalid integer for either whole or fractional parts. */ int -uconvert(s, ip, up, ep) - char *s; - long *ip, *up; - char **ep; +uconvert(const char *s, long *ip, long *up, char **ep) { int n, mult; long ipart, upart; @@ -72,10 +69,10 @@ uconvert(s, ip, up, ep) if (s && (*s == '-' || *s == '+')) { mult = (*s == '-') ? -1 : 1; - p = s + 1; + p = (char *)s + 1; } else - p = s; + p = (char *)s; for ( ; p && *p; p++) { diff --git a/lib/sh/ufuncs.c b/lib/sh/ufuncs.c index 4dc4853b1..5fc4febb2 100644 --- a/lib/sh/ufuncs.c +++ b/lib/sh/ufuncs.c @@ -1,6 +1,6 @@ /* ufuncs - sleep and alarm functions that understand fractional values */ -/* Copyright (C) 2008,2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008,2009-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -33,19 +33,21 @@ extern int errno; #endif /* !errno */ +#include "quit.h" + #if defined (HAVE_SELECT) # include "posixselect.h" -# include "quit.h" # include "trap.h" # include "stat-time.h" #endif +#include "error.h" + /* A version of `alarm' using setitimer if it's available. */ #if defined (HAVE_SETITIMER) unsigned int -falarm(secs, usecs) - unsigned int secs, usecs; +falarm (unsigned int secs, unsigned int usecs) { struct itimerval it, oit; @@ -65,8 +67,7 @@ falarm(secs, usecs) } #else int -falarm (secs, usecs) - unsigned int secs, usecs; +falarm (unsigned int secs, unsigned int usecs) { if (secs == 0 && usecs == 0) return (alarm (0)); @@ -83,58 +84,93 @@ falarm (secs, usecs) /* A version of sleep using fractional seconds and select. I'd like to use `usleep', but it's already taken */ +#if defined (HAVE_NANOSLEEP) +static int +nsleep (unsigned int sec, unsigned int usec) +{ + int r; + struct timespec req, rem; + + req.tv_sec = sec; + req.tv_nsec = usec * 1000; + + for (;;) + { + QUIT; + r = nanosleep (&req, &rem); + if (r == 0 || errno != EINTR) + return r; + req = rem; + } + return r; +} +#endif + #if defined (HAVE_TIMEVAL) && (defined (HAVE_SELECT) || defined (HAVE_PSELECT)) -int -fsleep(sec, usec) - unsigned int sec, usec; +static int +ssleep (unsigned int sec, unsigned int usec) { int e, r; - sigset_t blocked_sigs, prevmask; -#if defined (HAVE_PSELECT) + sigset_t blocked_sigs; +# if defined (HAVE_PSELECT) struct timespec ts; -#else +# else + sigset_t prevmask; struct timeval tv; -#endif +# endif sigemptyset (&blocked_sigs); # if defined (SIGCHLD) sigaddset (&blocked_sigs, SIGCHLD); # endif -#if defined (HAVE_PSELECT) +# if defined (HAVE_PSELECT) ts.tv_sec = sec; ts.tv_nsec = usec * 1000; -#else +# else sigemptyset (&prevmask); tv.tv_sec = sec; tv.tv_usec = usec; -#endif /* !HAVE_PSELECT */ +# endif /* !HAVE_PSELECT */ do { -#if defined (HAVE_PSELECT) +# if defined (HAVE_PSELECT) r = pselect(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &ts, &blocked_sigs); -#else +# else sigprocmask (SIG_SETMASK, &blocked_sigs, &prevmask); r = select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &tv); sigprocmask (SIG_SETMASK, &prevmask, NULL); -#endif +# endif e = errno; if (r < 0 && errno == EINTR) - return -1; /* caller will handle */ + return -1; /* caller will handle XXX - QUIT;? */ errno = e; } while (r < 0 && errno == EINTR); return r; } -#else /* !HAVE_TIMEVAL || !HAVE_SELECT */ -int -fsleep(sec, usec) - long sec, usec; +#endif + +#if !defined (HAVE_SELECT) +static int +ancientsleep(unsigned int sec, unsigned int usec) { if (usec >= 500000) /* round */ sec++; return (sleep(sec)); } +#endif + +int +fsleep(unsigned int sec, unsigned int usec) +{ +#if defined (HAVE_NANOSLEEP) + return (nsleep (sec, usec)); +#elif defined (HAVE_TIMEVAL) && (defined (HAVE_SELECT) || defined (HAVE_PSELECT)) + return (ssleep (sec, usec)); +#else /* !HAVE_TIMEVAL || !HAVE_SELECT */ + return (ancientsleep (sec, usec)); #endif /* !HAVE_TIMEVAL || !HAVE_SELECT */ +} diff --git a/lib/sh/unicode.c b/lib/sh/unicode.c index d781353b6..071b8635d 100644 --- a/lib/sh/unicode.c +++ b/lib/sh/unicode.c @@ -1,6 +1,6 @@ /* unicode.c - functions to convert unicode characters */ -/* Copyright (C) 2010-2020 Free Software Foundation, Inc. +/* Copyright (C) 2010-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,6 +35,10 @@ # include <iconv.h> #endif +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif + #include <xmalloc.h> #ifndef USHORT_MAX @@ -50,9 +54,9 @@ #endif /* !STREQ */ #if defined (HAVE_LOCALE_CHARSET) -extern const char *locale_charset PARAMS((void)); +extern const char *locale_charset (void); #else -extern char *get_locale_var PARAMS((char *)); +extern char *get_locale_var (const char *); #endif extern int locale_utf8locale; @@ -67,7 +71,7 @@ static iconv_t localconv; static char charsetbuf[40]; static char * -stub_charset () +stub_charset (void) { char *locale, *s, *t; @@ -94,7 +98,7 @@ stub_charset () #endif void -u32reset () +u32reset (void) { #if defined (HAVE_ICONV) if (u32init && localconv != (iconv_t)-1) @@ -109,9 +113,7 @@ u32reset () /* u32toascii ? */ int -u32tochar (x, s) - unsigned long x; - char *s; +u32tochar (unsigned long x, char *s) { int l; @@ -136,9 +138,7 @@ u32tochar (x, s) } int -u32tocesc (wc, s) - u_bits32_t wc; - char *s; +u32tocesc (u_bits32_t wc, char *s) { int l; @@ -151,9 +151,7 @@ u32tocesc (wc, s) /* Convert unsigned 32-bit int to utf-8 character string */ int -u32toutf8 (wc, s) - u_bits32_t wc; - char *s; +u32toutf8 (u_bits32_t wc, char *s) { int l; @@ -214,9 +212,7 @@ u32toutf8 (wc, s) /* Convert a 32-bit unsigned int (unicode) to a UTF-16 string. Rarely used, only if sizeof(wchar_t) == 2. */ int -u32toutf16 (c, s) - u_bits32_t c; - wchar_t *s; +u32toutf16 (u_bits32_t c, wchar_t *s) { int l; @@ -240,9 +236,7 @@ u32toutf16 (c, s) /* convert a single unicode-32 character into a multibyte string and put the result in S, which must be large enough (at least max(10,MB_LEN_MAX) bytes) */ int -u32cconv (c, s) - unsigned long c; - char *s; +u32cconv (unsigned long c, char *s) { wchar_t wc; wchar_t ws[3]; @@ -268,17 +262,18 @@ u32cconv (c, s) #endif #if HAVE_ICONV - /* this is mostly from coreutils-8.5/lib/unicodeio.c */ + /* this is mostly from coreutils-8.5/lib/unicodeio.c but prefers nl_langinfo + to be consistent with locale.c:locale_isutf8() */ if (u32init == 0) { utf8locale = locale_utf8locale; localconv = (iconv_t)-1; if (utf8locale == 0) { -#if HAVE_LOCALE_CHARSET - charset = locale_charset (); -#elif HAVE_NL_LANGINFO +#if HAVE_LANGINFO_CODESET charset = nl_langinfo (CODESET); +#elif HAVE_LOCALE_CHARSET + charset = locale_charset (); #else charset = stub_charset (); #endif @@ -333,7 +328,7 @@ u32cconv (c, s) } #else void -u32reset () +u32reset (void) { } #endif /* HANDLE_MULTIBYTE */ diff --git a/lib/sh/utf8.c b/lib/sh/utf8.c index fed252264..c55033018 100644 --- a/lib/sh/utf8.c +++ b/lib/sh/utf8.c @@ -1,6 +1,6 @@ /* utf8.c - UTF-8 character handling functions */ -/* Copyright (C) 2018 Free Software Foundation, Inc. +/* Copyright (C) 2018, 2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -33,26 +33,22 @@ extern int locale_utf8locale; #if defined (HANDLE_MULTIBYTE) char * -utf8_mbschr (s, c) - const char *s; - int c; +utf8_mbschr (const char *s, int c) { return strchr (s, c); /* for now */ } int -utf8_mbscmp (s1, s2) - const char *s1, *s2; +utf8_mbscmp (const char *s1, const char *s2) { /* Use the fact that the UTF-8 encoding preserves lexicographic order. */ return strcmp (s1, s2); } char * -utf8_mbsmbchar (str) - const char *str; +utf8_mbsmbchar (const char *str) { - register char *s; + char *s; for (s = (char *)str; *s; s++) if ((*s & 0xc0) == 0x80) @@ -61,12 +57,9 @@ utf8_mbsmbchar (str) } int -utf8_mbsnlen(src, srclen, maxlen) - const char *src; - size_t srclen; - int maxlen; +utf8_mbsnlen(const char *src, size_t srclen, int maxlen) { - register int sind, count; + int sind, count; for (sind = count = 0; src[sind] && sind <= maxlen; sind++) { @@ -78,9 +71,7 @@ utf8_mbsnlen(src, srclen, maxlen) /* Adapted from GNU gnulib. Handles UTF-8 characters up to 4 bytes long */ int -utf8_mblen (s, n) - const char *s; - size_t n; +utf8_mblen (const char *s, size_t n) { unsigned char c, c1, c2, c3; @@ -174,8 +165,7 @@ utf8_mblen (s, n) /* We can optimize this if we know the locale is UTF-8, but needs to handle malformed byte sequences. */ size_t -utf8_mbstrlen(s) - const char *s; +utf8_mbstrlen (const char *s) { size_t clen, nc; int mb_cur_max; diff --git a/lib/sh/vprint.c b/lib/sh/vprint.c index 567fba384..1d60e4f2a 100644 --- a/lib/sh/vprint.c +++ b/lib/sh/vprint.c @@ -25,11 +25,7 @@ #include <stdio.h> #if !defined (NULL) -# if defined (__STDC__) -# define NULL ((void *)0) -# else -# define NULL 0x0 -# endif /* __STDC__ */ +# define NULL 0 #endif /* !NULL */ /* @@ -40,10 +36,7 @@ #include <varargs.h> int -vfprintf (iop, fmt, ap) - FILE *iop; - char *fmt; - va_list ap; +vfprintf (FILE *iop, char *fmt, va_list ap) { int len; char localbuf[BUFSIZ]; @@ -68,9 +61,7 @@ vfprintf (iop, fmt, ap) * Ditto for vsprintf */ int -vsprintf (str, fmt, ap) - char *str, *fmt; - va_list ap; +vsprintf (char *str, char *fmt, va_list ap) { FILE f; int len; diff --git a/lib/sh/wcsdup.c b/lib/sh/wcsdup.c index 62a3c8641..a7a6ac53d 100644 --- a/lib/sh/wcsdup.c +++ b/lib/sh/wcsdup.c @@ -1,6 +1,6 @@ /* wcsdup.c - duplicate wide character string */ -/* Copyright (C) 2006 Free Software Foundation, Inc. +/* Copyright (C) 2006,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -28,8 +28,7 @@ #include <xmalloc.h> wchar_t * -wcsdup (ws) - const wchar_t *ws; +wcsdup (const wchar_t *ws) { wchar_t *ret; size_t len; diff --git a/lib/sh/wcsnwidth.c b/lib/sh/wcsnwidth.c index 9c7e7cc55..12197bde6 100644 --- a/lib/sh/wcsnwidth.c +++ b/lib/sh/wcsnwidth.c @@ -1,7 +1,7 @@ /* wcsnwidth.c - compute display width of wide character string, up to max specified width, return length. */ -/* Copyright (C) 2012 Free Software Foundation, Inc. +/* Copyright (C) 2012,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -31,9 +31,7 @@ PWCS. If the display width exceeds MAX, return the number of wide chars from PWCS required to display MAX characters on the screen. */ int -wcsnwidth(pwcs, n, max) - const wchar_t *pwcs; - size_t n, max; +wcsnwidth(const wchar_t *pwcs, size_t n, size_t max) { wchar_t wc, *ws; int len, l; diff --git a/lib/sh/wcswidth.c b/lib/sh/wcswidth.c index 1a30d9fc3..2465e5751 100644 --- a/lib/sh/wcswidth.c +++ b/lib/sh/wcswidth.c @@ -1,6 +1,6 @@ /* wcswidth.c - compute display width of wide character string */ -/* Copyright (C) 2010 Free Software Foundation, Inc. +/* Copyright (C) 2010,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -27,9 +27,7 @@ #include <bashansi.h> int -wcswidth(pwcs, n) - const wchar_t *pwcs; - size_t n; +wcswidth(const wchar_t *pwcs, size_t n) { wchar_t wc; int len, l; diff --git a/lib/sh/winsize.c b/lib/sh/winsize.c index 846fcd58a..42461c8ff 100644 --- a/lib/sh/winsize.c +++ b/lib/sh/winsize.c @@ -1,6 +1,6 @@ /* winsize.c - handle window size changes and information. */ -/* Copyright (C) 2005-2020 Free Software Foundation, Inc. +/* Copyright (C) 2005-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -32,12 +32,6 @@ /* Try to find the definitions of `struct winsize' and TIOGCWINSZ */ -#if 0 -#if defined (GWINSZ_IN_SYS_IOCTL) && !defined (TIOCGWINSZ) -# include <sys/ioctl.h> -#endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */ -#endif - #if defined (STRUCT_WINSIZE_IN_TERMIOS) && !defined (STRUCT_WINSIZE_IN_SYS_IOCTL) # include <termios.h> #endif /* STRUCT_WINSIZE_IN_TERMIOS && !STRUCT_WINSIZE_IN_SYS_IOCTL */ @@ -73,14 +67,12 @@ extern int shell_tty; extern int interactive_shell; extern int no_line_editing; extern int bash_readline_initialized; -extern void rl_set_screen_size PARAMS((int, int)); +extern void rl_set_screen_size (int, int); #endif -extern void sh_set_lines_and_columns PARAMS((int, int)); +extern void sh_set_lines_and_columns (int, int); void -get_new_window_size (from_sig, rp, cp) - int from_sig; - int *rp, *cp; +get_new_window_size (int from_sig, int *rp, int *cp) { #if defined (TIOCGWINSZ) struct winsize win; diff --git a/lib/sh/zcatfd.c b/lib/sh/zcatfd.c index aa8199fdd..d365b193f 100644 --- a/lib/sh/zcatfd.c +++ b/lib/sh/zcatfd.c @@ -1,6 +1,6 @@ /* zcatfd - copy contents of file descriptor to another */ -/* Copyright (C) 2002-2020 Free Software Foundation, Inc. +/* Copyright (C) 2002-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -38,15 +38,13 @@ extern int errno; # define ZBUFSIZ 4096 #endif -extern ssize_t zread PARAMS((int, char *, size_t)); -extern int zwrite PARAMS((int, char *, ssize_t)); +extern ssize_t zread (int, char *, size_t); +extern int zwrite (int, char *, ssize_t); /* Dump contents of file descriptor FD to OFD. FN is the filename for error messages (not used right now). */ int -zcatfd (fd, ofd, fn) - int fd, ofd; - char *fn; +zcatfd (int fd, int ofd, const char *fn) { ssize_t nr; int rval; diff --git a/lib/sh/zgetline.c b/lib/sh/zgetline.c index 5e1ef7242..0bb10dfb5 100644 --- a/lib/sh/zgetline.c +++ b/lib/sh/zgetline.c @@ -1,7 +1,7 @@ /* zgetline - read a line of input from a specified file descriptor and return a pointer to a newly-allocated buffer containing the data. */ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2020,2022-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -34,13 +34,13 @@ extern int errno; #endif -extern ssize_t zread PARAMS((int, char *, size_t)); -extern ssize_t zreadc PARAMS((int, char *)); -extern ssize_t zreadintr PARAMS((int, char *, size_t)); -extern ssize_t zreadcintr PARAMS((int, char *)); +extern ssize_t zread (int, char *, size_t); +extern ssize_t zreadc (int, char *); +extern ssize_t zreadintr (int, char *, size_t); +extern ssize_t zreadcintr (int, char *); -typedef ssize_t breadfunc_t PARAMS((int, char *, size_t)); -typedef ssize_t creadfunc_t PARAMS((int, char *)); +typedef ssize_t breadfunc_t (int, char *, size_t); +typedef ssize_t creadfunc_t (int, char *); /* Initial memory allocation for automatic growing buffer in zreadlinec */ #define GET_LINE_INITIAL_ALLOCATION 16 @@ -61,15 +61,10 @@ typedef ssize_t creadfunc_t PARAMS((int, char *)); Returns number of bytes read or -1 on error. */ ssize_t -zgetline (fd, lineptr, n, delim, unbuffered_read) - int fd; - char **lineptr; - size_t *n; - int delim; - int unbuffered_read; +zgetline (int fd, char **lineptr, size_t *n, int delim, int unbuffered_read) { - int retval; - size_t nr; + ssize_t retval; + ssize_t nr; char *line, c; if (lineptr == 0 || n == 0 || (*lineptr == 0 && *n != 0)) diff --git a/lib/sh/zmapfd.c b/lib/sh/zmapfd.c index 9ff50a474..f2e1ea4da 100644 --- a/lib/sh/zmapfd.c +++ b/lib/sh/zmapfd.c @@ -1,6 +1,6 @@ /* zmapfd - read contents of file descriptor into a newly-allocated buffer */ -/* Copyright (C) 2006-2020 Free Software Foundation, Inc. +/* Copyright (C) 2006-2020,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -40,15 +40,12 @@ extern int errno; # define ZBUFSIZ 4096 #endif -extern ssize_t zread PARAMS((int, char *, size_t)); +extern ssize_t zread (int, char *, size_t); /* Dump contents of file descriptor FD to *OSTR. FN is the filename for error messages (not used right now). */ int -zmapfd (fd, ostr, fn) - int fd; - char **ostr; - char *fn; +zmapfd (int fd, char **ostr, const char *fn) { ssize_t nr; int rval; diff --git a/lib/sh/zread.c b/lib/sh/zread.c index dafb7f60a..acae1b5a3 100644 --- a/lib/sh/zread.c +++ b/lib/sh/zread.c @@ -1,6 +1,6 @@ /* zread - read data from file descriptor into buffer with retries */ -/* Copyright (C) 1999-2020 Free Software Foundation, Inc. +/* Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -51,10 +51,7 @@ extern int read_builtin_timeout (int); /* Read LEN bytes from FD into BUF. Retry the read on EINTR. Any other error causes the loop to break. */ ssize_t -zread (fd, buf, len) - int fd; - char *buf; - size_t len; +zread (int fd, char *buf, size_t len) { ssize_t r; @@ -87,10 +84,7 @@ zread (fd, buf, len) #define NUM_INTR 3 ssize_t -zreadretry (fd, buf, len) - int fd; - char *buf; - size_t len; +zreadretry (int fd, char *buf, size_t len) { ssize_t r; int nintr; @@ -112,10 +106,7 @@ zreadretry (fd, buf, len) /* Call read(2) and allow it to be interrupted. Just a stub for now. */ ssize_t -zreadintr (fd, buf, len) - int fd; - char *buf; - size_t len; +zreadintr (int fd, char *buf, size_t len) { check_signals (); return (read (fd, buf, len)); @@ -129,9 +120,7 @@ static char lbuf[ZBUFSIZ]; static size_t lind, lused; ssize_t -zreadc (fd, cp) - int fd; - char *cp; +zreadc (int fd, char *cp) { ssize_t nr; @@ -154,9 +143,7 @@ zreadc (fd, cp) /* Don't mix calls to zreadc and zreadcintr in the same function, since they use the same local buffer. */ ssize_t -zreadcintr (fd, cp) - int fd; - char *cp; +zreadcintr (int fd, char *cp) { ssize_t nr; @@ -179,10 +166,7 @@ zreadcintr (fd, cp) /* Like zreadc, but read a specified number of characters at a time. Used for `read -N'. */ ssize_t -zreadn (fd, cp, len) - int fd; - char *cp; - size_t len; +zreadn (int fd, char *cp, size_t len) { ssize_t nr; @@ -205,7 +189,7 @@ zreadn (fd, cp, len) } void -zreset () +zreset (void) { lind = lused = 0; } @@ -213,8 +197,7 @@ zreset () /* Sync the seek pointer for FD so that the kernel's idea of the last char read is the last char returned by zreadc. */ void -zsyncfd (fd) - int fd; +zsyncfd (int fd) { off_t off, r; diff --git a/lib/sh/zwrite.c b/lib/sh/zwrite.c index 3240f4f42..54acc651e 100644 --- a/lib/sh/zwrite.c +++ b/lib/sh/zwrite.c @@ -1,6 +1,6 @@ /* zwrite - write contents of buffer to file descriptor, retrying on error */ -/* Copyright (C) 1999-2002 Free Software Foundation, Inc. +/* Copyright (C) 1999-2002, 2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -36,10 +36,7 @@ extern int errno; it is interrupted. We retry three times if we get a zero-length write. Any other signal causes this function to return prematurely. */ int -zwrite (fd, buf, nb) - int fd; - char *buf; - size_t nb; +zwrite (int fd, char *buf, size_t nb) { int n, i, nt; diff --git a/lib/termcap/termcap.h b/lib/termcap/termcap.h index b0e3061fe..a12a5c707 100644 --- a/lib/termcap/termcap.h +++ b/lib/termcap/termcap.h @@ -1,6 +1,6 @@ /* termcap.h - public declarations for termcap library. */ -/* Copyright (C) 1991, 1992, 1995, 2001, 2005, 2006, 2008,2009 Free Software Foundation, Inc. +/* Copyright (C) 1991-2009,2023 Free Software Foundation, Inc. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,8 +19,6 @@ #ifndef _TERMCAP_H #define _TERMCAP_H 1 -#if __STDC__ - extern int tgetent (char *buffer, const char *termtype); extern int tgetnum (const char *name); @@ -38,26 +36,4 @@ extern char *BC; extern char *tgoto (const char *cstring, int hpos, int vpos); -#else /* not __STDC__ */ - -extern int tgetent (); - -extern int tgetnum (); -extern int tgetflag (); -extern char *tgetstr (); - -extern char PC; -extern short ospeed; - -extern void tputs (); - -extern char *tparam (); - -extern char *UP; -extern char *BC; - -extern char *tgoto (); - -#endif /* not __STDC__ */ - #endif /* not _TERMCAP_H */ diff --git a/lib/tilde/shell.c b/lib/tilde/shell.c index 9805a9248..de9743661 100644 --- a/lib/tilde/shell.c +++ b/lib/tilde/shell.c @@ -45,7 +45,7 @@ #include <pwd.h> #if !defined (HAVE_GETPW_DECLS) -extern struct passwd *getpwuid (); +extern struct passwd *getpwuid (uid_t); #endif /* !HAVE_GETPW_DECLS */ char * diff --git a/lib/tilde/tilde.c b/lib/tilde/tilde.c index d678a31ab..734b20846 100644 --- a/lib/tilde/tilde.c +++ b/lib/tilde/tilde.c @@ -1,6 +1,6 @@ /* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */ -/* Copyright (C) 1988-2020 Free Software Foundation, Inc. +/* Copyright (C) 1988-2020,2023 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -68,14 +68,6 @@ extern struct passwd *getpwnam (const char *); #define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x)) #endif /* !savestring */ -#if !defined (NULL) -# if defined (__STDC__) -# define NULL ((void *) 0) -# else -# define NULL 0x0 -# endif /* !__STDC__ */ -#endif /* !NULL */ - /* If being compiled as part of bash, these will be satisfied from variables.o. If being compiled as part of readline, they will be satisfied from shell.o. */ @@ -160,8 +152,9 @@ tilde_find_prefix (const char *string, int *len) static int tilde_find_suffix (const char *string) { - register int i, j, string_len; - register char **suffixes; + int i, j; + size_t string_len; + char **suffixes; suffixes = tilde_additional_suffixes; string_len = strlen (string); @@ -189,7 +182,7 @@ char * tilde_expand (const char *string) { char *result; - int result_size, result_index; + size_t result_size, result_index; result_index = result_size = 0; if (result = strchr (string, '~')) @@ -200,7 +193,7 @@ tilde_expand (const char *string) /* Scan through STRING expanding tildes as we come to them. */ while (1) { - register int start, end; + int start, end; char *tilde_word, *expansion; int len; @@ -318,7 +311,7 @@ static char * glue_prefix_and_suffix (char *prefix, const char *suffix, int suffind) { char *ret; - int plen, slen; + size_t plen, slen; plen = (prefix && *prefix) ? strlen (prefix) : 0; slen = strlen (suffix + suffind); diff --git a/list.c b/list.c index 88835f58e..a470cf7f8 100644 --- a/list.c +++ b/list.c @@ -1,6 +1,6 @@ /* list.c - Functions for manipulating linked lists of objects. */ -/* Copyright (C) 1996-2009 Free Software Foundation, Inc. +/* Copyright (C) 1996-2009,2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,9 +35,7 @@ GENERIC_LIST global_error_list; #ifdef INCLUDE_UNUSED /* Call FUNCTION on every member of LIST, a generic list. */ void -list_walk (list, function) - GENERIC_LIST *list; - sh_glist_func_t *function; +list_walk (GENERIC_LIST *list, sh_glist_func_t *function) { for ( ; list; list = list->next) if ((*function) (list) < 0) @@ -46,9 +44,7 @@ list_walk (list, function) /* Call FUNCTION on every string in WORDS. */ void -wlist_walk (words, function) - WORD_LIST *words; - sh_icpfunc_t *function; +wlist_walk (WORD_LIST *words, sh_icpfunc_t *function) { for ( ; words; words = words->next) if ((*function) (words->word->word) < 0) @@ -60,8 +56,7 @@ wlist_walk (words, function) of the chain. You should always assign the output value of this function to something, or you will lose the chain. */ GENERIC_LIST * -list_reverse (list) - GENERIC_LIST *list; +list_reverse (GENERIC_LIST *list) { register GENERIC_LIST *next, *prev; @@ -77,8 +72,7 @@ list_reverse (list) /* Return the number of elements in LIST, a generic list. */ int -list_length (list) - GENERIC_LIST *list; +list_length (GENERIC_LIST *list) { register int i; @@ -88,8 +82,7 @@ list_length (list) /* Append TAIL to HEAD. Return the header of the list. */ GENERIC_LIST * -list_append (head, tail) - GENERIC_LIST *head, *tail; +list_append (GENERIC_LIST *head, GENERIC_LIST *tail) { register GENERIC_LIST *t_head; @@ -113,10 +106,7 @@ list_append (head, tail) dispose_variable (elt); */ GENERIC_LIST * -list_remove (list, comparer, arg) - GENERIC_LIST **list; - Function *comparer; - char *arg; +list_remove (GENERIC_LIST **list, sh_gcp_func_t *comparer, char *arg) { register GENERIC_LIST *prev, *temp; diff --git a/locale.c b/locale.c index fabf7b125..bf4001d16 100644 --- a/locale.c +++ b/locale.c @@ -1,6 +1,6 @@ /* locale.c - Miscellaneous internationalization functions. */ -/* Copyright (C) 1996-2009,2012,2016-2021 Free Software Foundation, Inc. +/* Copyright (C) 1996-2009,2012,2016-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -43,14 +43,18 @@ extern int errno; #endif +#if defined (HAVE_LOCALE_CHARSET) +extern const char *locale_charset (void); +#endif + +extern int dump_translatable_strings, dump_po_strings; + int locale_utf8locale; int locale_mb_cur_max; /* value of MB_CUR_MAX for current locale (LC_CTYPE) */ int locale_shiftstates = 0; int singlequote_translations = 0; /* single-quote output of $"..." */ -extern int dump_translatable_strings, dump_po_strings; - /* The current locale when the program begins */ static char *default_locale; @@ -68,15 +72,15 @@ static char *lang; /* Called to reset all of the locale variables to their appropriate values if (and only if) LC_ALL has not been assigned a value. */ -static int reset_locale_vars PARAMS((void)); +static int reset_locale_vars (void); -static void locale_setblanks PARAMS((void)); -static int locale_isutf8 PARAMS((char *)); +static void locale_setblanks (void); +static int locale_isutf8 (char *); /* Set the value of default_locale and make the current locale the system default locale. This should be called very early in main(). */ void -set_default_locale () +set_default_locale (void) { #if defined (HAVE_SETLOCALE) default_locale = setlocale (LC_ALL, ""); @@ -101,7 +105,7 @@ set_default_locale () LC_TIME if they are not specified in the environment, but LC_ALL is. This should be called from main() after parsing the environment. */ void -set_default_locale_vars () +set_default_locale_vars (void) { char *val; @@ -112,9 +116,9 @@ set_default_locale_vars () if (val == 0 && lc_all && *lc_all) { setlocale (LC_CTYPE, lc_all); - locale_setblanks (); locale_mb_cur_max = MB_CUR_MAX; locale_utf8locale = locale_isutf8 (lc_all); + locale_setblanks (); # if defined (HANDLE_MULTIBYTE) locale_shiftstates = mblen ((char *)NULL, 0); @@ -174,8 +178,7 @@ set_default_locale_vars () /* Set one of the locale categories (specified by VAR) to VALUE. Returns 1 if successful, 0 otherwise. */ int -set_locale_var (var, value) - char *var, *value; +set_locale_var (const char *var, const char *value) { int r; char *x; @@ -220,11 +223,11 @@ set_locale_var (var, value) else internal_warning(_("setlocale: LC_ALL: cannot change locale (%s): %s"), lc_all, strerror (errno)); } - locale_setblanks (); locale_mb_cur_max = MB_CUR_MAX; /* if LC_ALL == "", reset_locale_vars has already called this */ if (*lc_all && x) locale_utf8locale = locale_isutf8 (lc_all); + locale_setblanks (); # if defined (HANDLE_MULTIBYTE) locale_shiftstates = mblen ((char *)NULL, 0); # else @@ -244,11 +247,11 @@ set_locale_var (var, value) if (lc_all == 0 || *lc_all == '\0') { x = setlocale (LC_CTYPE, get_locale_var ("LC_CTYPE")); - locale_setblanks (); locale_mb_cur_max = MB_CUR_MAX; /* if setlocale() returns NULL, the locale is not changed */ if (x) locale_utf8locale = locale_isutf8 (x); + locale_setblanks (); #if defined (HANDLE_MULTIBYTE) locale_shiftstates = mblen ((char *)NULL, 0); #else @@ -303,8 +306,7 @@ set_locale_var (var, value) reset_locale_vars() to reset any default values if LC_ALL is unset or null. */ int -set_lang (var, value) - char *var, *value; +set_lang (const char *var, const char *value) { FREE (lang); if (value) @@ -321,7 +323,7 @@ set_lang (var, value) /* Set default values for LANG and LC_ALL. Default values for all other locale-related variables depend on these. */ void -set_default_lang () +set_default_lang (void) { char *v; @@ -336,8 +338,7 @@ set_default_lang () The precedence is as POSIX.2 specifies: LC_ALL has precedence over the specific locale variables, and LANG, if set, is used as the default. */ char * -get_locale_var (var) - char *var; +get_locale_var (const char *var) { char *locale; @@ -360,36 +361,49 @@ get_locale_var (var) if (and only if) LC_ALL has not been assigned a value. DO NOT CALL THIS IF LC_ALL HAS BEEN ASSIGNED A VALUE. */ static int -reset_locale_vars () +reset_locale_vars (void) { char *t, *x; + int retval; + #if defined (HAVE_SETLOCALE) if (lang == 0 || *lang == '\0') maybe_make_export_env (); /* trust that this will change environment for setlocale */ if (setlocale (LC_ALL, lang ? lang : "") == 0) return 0; + retval = 1; x = 0; # if defined (LC_CTYPE) x = setlocale (LC_CTYPE, get_locale_var ("LC_CTYPE")); + if (x == 0) + retval = 0; # endif # if defined (LC_COLLATE) t = setlocale (LC_COLLATE, get_locale_var ("LC_COLLATE")); + if (t == 0) + retval = 0; # endif # if defined (LC_MESSAGES) t = setlocale (LC_MESSAGES, get_locale_var ("LC_MESSAGES")); + if (t == 0) + retval = 0; # endif # if defined (LC_NUMERIC) t = setlocale (LC_NUMERIC, get_locale_var ("LC_NUMERIC")); + if (t == 0) + retval = 0; # endif # if defined (LC_TIME) t = setlocale (LC_TIME, get_locale_var ("LC_TIME")); + if (t == 0) + retval = 0; # endif - locale_setblanks (); locale_mb_cur_max = MB_CUR_MAX; if (x) locale_utf8locale = locale_isutf8 (x); + locale_setblanks (); # if defined (HANDLE_MULTIBYTE) locale_shiftstates = mblen ((char *)NULL, 0); # else @@ -397,7 +411,7 @@ reset_locale_vars () # endif u32reset (); #endif - return 1; + return retval; } #if defined (TRANSLATABLE_STRINGS) @@ -406,13 +420,11 @@ reset_locale_vars () is not available, the passed string is returned unchanged. The length of the translated string is returned in LENP, if non-null. */ char * -localetrans (string, len, lenp) - char *string; - int len, *lenp; +localetrans (const char *string, int len, size_t *lenp) { char *locale, *t; char *translated; - int tlen; + size_t tlen; /* Don't try to translate null strings. */ if (string == 0 || *string == 0) @@ -441,7 +453,7 @@ localetrans (string, len, lenp) if (default_domain && *default_domain) translated = dgettext (default_domain, string); else - translated = string; + translated = (char *)string; if (translated == string) /* gettext returns its argument if untranslatable */ { @@ -464,9 +476,7 @@ localetrans (string, len, lenp) /* Change a bash string into a string suitable for inclusion in a `po' file. This backslash-escapes `"' and `\' and changes newlines into \\\n"\n". */ char * -mk_msgstr (string, foundnlp) - char *string; - int *foundnlp; +mk_msgstr (char *string, int *foundnlp) { register int c, len; char *result, *r, *s; @@ -515,12 +525,11 @@ mk_msgstr (string, foundnlp) by the caller. The length of the translated string is returned in LENP, if non-null. */ char * -locale_expand (string, start, end, lineno, lenp) - char *string; - int start, end, lineno, *lenp; +locale_expand (const char *string, int start, int end, int lineno, size_t *lenp) { - int len, tlen, foundnl; + int tlen, foundnl; char *temp, *t, *t2; + size_t len; temp = (char *)xmalloc (end - start + 1); for (tlen = 0, len = start; len < end; ) @@ -570,16 +579,22 @@ locale_expand (string, start, end, lineno, lenp) } #endif +/* Is character C in the [:blank:] class in the current locale? Work around + systems like macOS that treat some characters 0x80-0xff as blanks even in + a UTF-8 locale where they are multibyte characters. */ +#define locale_isblank(c) \ + ((locale_utf8locale == 0 || ((c) & 0x80) == 0) && isblank ((unsigned char)(c))) + /* Set every character in the <blank> character class to be a shell break character for the lexical analyzer when the locale changes. */ static void -locale_setblanks () +locale_setblanks (void) { int x; for (x = 0; x < sh_syntabsiz; x++) { - if (isblank ((unsigned char)x)) + if (locale_isblank (x)) sh_syntaxtab[x] |= CSHBRK|CBLANK; else if (member (x, shell_break_chars)) { @@ -595,15 +610,19 @@ locale_setblanks () language[_territory][.codeset][@modifier][+special][,[sponsor][_revision]] and return TRUE if the codeset is UTF-8 or utf8 */ static int -locale_isutf8 (lspec) - char *lspec; +locale_isutf8 (char *lspec) { +#if HAVE_LOCALE_CHARSET + const char *cp; +#else char *cp, *encoding; +#endif #if HAVE_LANGINFO_CODESET cp = nl_langinfo (CODESET); return (STREQ (cp, "UTF-8") || STREQ (cp, "utf8")); #elif HAVE_LOCALE_CHARSET + /* gettext claims this is superior to nl_langinfo on macOS */ cp = locale_charset (); return (STREQ (cp, "UTF-8") || STREQ (cp, "utf8")); #else @@ -628,7 +647,7 @@ locale_isutf8 (lspec) #if defined (HAVE_LOCALECONV) int -locale_decpoint () +locale_decpoint (void) { struct lconv *lv; @@ -638,7 +657,7 @@ locale_decpoint () #else # undef locale_decpoint int -locale_decpoint () +locale_decpoint (void) { return '.'; } diff --git a/m4/codeset.m4 b/m4/codeset.m4 index 280f556fe..eb7326013 100644 --- a/m4/codeset.m4 +++ b/m4/codeset.m4 @@ -1,5 +1,5 @@ # codeset.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019 Free Software +dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2022 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4 index ec9f2218b..2e914dbc0 100644 --- a/m4/extern-inline.m4 +++ b/m4/extern-inline.m4 @@ -1,6 +1,6 @@ dnl 'extern inline' a la ISO C99. -dnl Copyright 2012-2019 Free Software Foundation, Inc. +dnl Copyright 2012-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -17,7 +17,8 @@ AC_DEFUN([gl_EXTERN_INLINE], mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. - This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. + This bug was observed with Oracle Developer Studio 12.6 + (Sun C 5.15 SunOS_sparc 2017/05/30). Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement @@ -32,7 +33,7 @@ AC_DEFUN([gl_EXTERN_INLINE], https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see - http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log + http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html @@ -83,8 +84,8 @@ AC_DEFUN([gl_EXTERN_INLINE], # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else -# define _GL_INLINE static _GL_UNUSED -# define _GL_EXTERN_INLINE static _GL_UNUSED +# define _GL_INLINE _GL_UNUSED static +# define _GL_EXTERN_INLINE _GL_UNUSED static #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), diff --git a/m4/fcntl-o.m4 b/m4/fcntl-o.m4 index 6ab3387da..4dcde9e06 100644 --- a/m4/fcntl-o.m4 +++ b/m4/fcntl-o.m4 @@ -1,5 +1,5 @@ -# fcntl-o.m4 serial 6 -dnl Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc. +# fcntl-o.m4 serial 7 +dnl Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -32,6 +32,7 @@ AC_DEFUN([gl_FCNTL_O_FLAGS], # defined sleep(n) _sleep ((n) * 1000) #endif #include <fcntl.h> + ]GL_MDA_DEFINES[ #ifndef O_NOATIME #define O_NOATIME 0 #endif diff --git a/m4/gettext.m4 b/m4/gettext.m4 index 8231ce05a..48546abbc 100644 --- a/m4/gettext.m4 +++ b/m4/gettext.m4 @@ -1,36 +1,34 @@ -# gettext.m4 serial 69 (gettext-0.19.9) -dnl Copyright (C) 1995-2014, 2016, 2018-2019, 2021 Free Software Foundation, Inc. +# gettext.m4 serial 72 (gettext-0.21.1) +dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010. -dnl -dnl Modified for bash use by Chet Ramey <chet.ramey@case.edu>, 2021 + +dnl Modified for bash use by Chet Ramey <chet.ramey@case.edu>, 2023 dnl Macro to add for using GNU gettext. dnl Usage: BASH_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). -dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The -dnl default (if it is not specified or empty) is 'no-libtool'. -dnl INTLSYMBOL should be 'external' for packages with no intl directory, -dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl INTLSYMBOL must be one of 'external', 'use-libtool'. +dnl INTLSYMBOL should be 'external' for packages other than GNU gettext, and +dnl 'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of -dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library -dnl $(top_builddir)/intl/libintl.a will be created. +dnl AM-DISABLE-SHARED). dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is @@ -59,22 +57,22 @@ dnl AC_DEFUN([BASH_GNU_GETTEXT], [ dnl Argument checking. - ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + m4_if([$1], [], , [m4_if([$1], [external], , [m4_if([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT -])])])])]) - ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , +])])])]) + m4_if(m4_if([$1], [], [old])[]m4_if([$1], [no-libtool], [old]), [old], + [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported. +])]) + m4_if([$2], [], , [m4_if([$2], [need-ngettext], , [m4_if([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], - ifelse([$1], [external], - ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), - [yes])) - define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + m4_if([$1], [external], [no], [yes])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl - ifelse(gt_included_intl, yes, [ + m4_if(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) @@ -92,7 +90,7 @@ AC_DEFUN([BASH_GNU_GETTEXT], dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it. - ifelse(gt_included_intl, yes, , [ + m4_if(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) @@ -102,7 +100,7 @@ AC_DEFUN([BASH_GNU_GETTEXT], dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) - ifelse(gt_included_intl, yes, [ + m4_if(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) @@ -122,7 +120,7 @@ AC_DEFUN([BASH_GNU_GETTEXT], dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no - ifelse(gt_included_intl, yes, [ + m4_if(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], @@ -178,7 +176,7 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. - ifelse(gt_included_intl, yes, , [ + m4_if(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL @@ -265,7 +263,7 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION INCINTL= fi - ifelse(gt_included_intl, yes, [ + m4_if(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. @@ -277,8 +275,10 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes - LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" - LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" +# LIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD" + # we don't build with libtool + LIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.a $LIBICONV $LIBTHREAD" + LTLIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi @@ -345,44 +345,15 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION POSUB=po fi - ifelse(gt_included_intl, yes, [ - dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL - dnl to 'yes' because some of the testsuite requires it. - if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then - BUILD_INCLUDED_LIBINTL=yes - fi + m4_if(gt_included_intl, yes, [ + dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes' + dnl because some of the testsuite requires it. + BUILD_INCLUDED_LIBINTL=yes dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) - - dnl For backward compatibility. Some configure.ins may be using this. - nls_cv_header_intl= - nls_cv_header_libgt= - - dnl For backward compatibility. Some Makefiles may be using this. - DATADIRNAME=share - AC_SUBST([DATADIRNAME]) - - dnl For backward compatibility. Some Makefiles may be using this. - INSTOBJEXT=.mo - AC_SUBST([INSTOBJEXT]) - - dnl For backward compatibility. Some Makefiles may be using this. - GENCAT=gencat - AC_SUBST([GENCAT]) - - dnl For backward compatibility. Some Makefiles may be using this. - INTLOBJS= - if test "$USE_INCLUDED_LIBINTL" = yes; then - INTLOBJS="\$(GETTOBJS)" - fi - AC_SUBST([INTLOBJS]) - - dnl Enable libtool support if the surrounding package wishes it. - INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix - AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. diff --git a/m4/host-cpu-c-abi.m4 b/m4/host-cpu-c-abi.m4 index 4407296d0..b9223241b 100644 --- a/m4/host-cpu-c-abi.m4 +++ b/m4/host-cpu-c-abi.m4 @@ -1,5 +1,5 @@ -# host-cpu-c-abi.m4 serial 11 -dnl Copyright (C) 2002-2019 Free Software Foundation, Inc. +# host-cpu-c-abi.m4 serial 15 +dnl Copyright (C) 2002-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -55,7 +55,7 @@ AC_DEFUN([gl_HOST_CPU_C_ABI], [case "$host_cpu" in changequote(,)dnl - i[4567]86 ) + i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; @@ -211,7 +211,7 @@ changequote([,])dnl # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( - [[#if defined __powerpc64__ || defined _ARCH_PPC64 + [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail @@ -382,6 +382,9 @@ EOF #ifndef __ia64__ #undef __ia64__ #endif +#ifndef __loongarch64__ +#undef __loongarch64__ +#endif #ifndef __m68k__ #undef __m68k__ #endif @@ -457,7 +460,8 @@ EOF dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI -dnl (application binary interface) is a 32-bit one, or to 'no' otherwise. +dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit +dnl one, or to 'unknown' if unknown. dnl This is a simplified variant of gl_HOST_CPU_C_ABI. AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], [ @@ -467,14 +471,44 @@ AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; - *) + x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; + *) + gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else case "$host_cpu" in + # CPUs that only support a 32-bit ABI. + arc \ + | bfin \ + | cris* \ + | csky \ + | epiphany \ + | ft32 \ + | h8300 \ + | m68k \ + | microblaze | microblazeel \ + | nds32 | nds32le | nds32be \ + | nios2 | nios2eb | nios2el \ + | or1k* \ + | or32 \ + | sh | sh[1234] | sh[1234]e[lb] \ + | tic6x \ + | xtensa* ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; + + # CPUs that only support a 64-bit ABI. changequote(,)dnl - i[4567]86 ) + alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ + | mmix ) +changequote([,])dnl + gl_cv_host_cpu_c_abi_32bit=no + ;; + +changequote(,)dnl + i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi_32bit=yes ;; @@ -574,7 +608,7 @@ changequote([,])dnl # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( - [[#if defined __powerpc64__ || defined _ARCH_PPC64 + [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail @@ -634,7 +668,7 @@ changequote([,])dnl ;; *) - gl_cv_host_cpu_c_abi_32bit=no + gl_cv_host_cpu_c_abi_32bit=unknown ;; esac fi diff --git a/m4/iconv.m4 b/m4/iconv.m4 index a285e9daa..00057953e 100644 --- a/m4/iconv.m4 +++ b/m4/iconv.m4 @@ -1,5 +1,5 @@ -# iconv.m4 serial 21 -dnl Copyright (C) 2000-2002, 2007-2014, 2016-2019 Free Software Foundation, +# iconv.m4 serial 24 +dnl Copyright (C) 2000-2002, 2007-2014, 2016-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -7,6 +7,12 @@ dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. +AC_PREREQ([2.64]) + +dnl Note: AM_ICONV is documented in the GNU gettext manual +dnl <https://www.gnu.org/software/gettext/manual/html_node/AM_005fICONV.html>. +dnl Don't make changes that are incompatible with that documentation! + AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. @@ -86,8 +92,9 @@ AC_DEFUN([AM_ICONV_LINK], #endif ]], [[int result = 0; - /* Test against AIX 5.1 bug: Failures are not distinguishable from successful - returns. */ + /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from + successful returns. This is even documented in + <https://www.ibm.com/support/knowledgecenter/ssw_aix_72/i_bostechref/iconv.html> */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) @@ -225,8 +232,7 @@ AC_DEFUN([AM_ICONV_LINK], AC_SUBST([LTLIBICONV]) ]) -dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to -dnl avoid warnings like +dnl Define AM_ICONV using AC_DEFUN_ONCE, in order to avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. @@ -234,54 +240,43 @@ dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. -m4_define([gl_iconv_AC_DEFUN], - m4_version_prereq([2.64], - [[AC_DEFUN_ONCE( - [$1], [$2])]], - [m4_ifdef([gl_00GNULIB], - [[AC_DEFUN_ONCE( - [$1], [$2])]], - [[AC_DEFUN( - [$1], [$2])]])])) -gl_iconv_AC_DEFUN([AM_ICONV], +AC_DEFUN_ONCE([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then - AC_MSG_CHECKING([for iconv declaration]) - AC_CACHE_VAL([am_cv_proto_iconv], [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ + AC_CACHE_CHECK([whether iconv is compatible with its POSIX signature], + [gl_cv_iconv_nonconst], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif -#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); -#else -size_t iconv(); -#endif - ]], - [[]])], - [am_cv_proto_iconv_arg1=""], - [am_cv_proto_iconv_arg1="const"]) - am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) - am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` - AC_MSG_RESULT([ - $am_cv_proto_iconv]) + ]], + [[]])], + [gl_cv_iconv_nonconst=yes], + [gl_cv_iconv_nonconst=no]) + ]) else dnl When compiling GNU libiconv on a system that does not have iconv yet, dnl pick the POSIX compliant declaration without 'const'. - am_cv_proto_iconv_arg1="" + gl_cv_iconv_nonconst=yes + fi + if test $gl_cv_iconv_nonconst = yes; then + iconv_arg1="" + else + iconv_arg1="const" fi - AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], + AC_DEFINE_UNQUOTED([ICONV_CONST], [$iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>. m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) - if test -n "$am_cv_proto_iconv_arg1"; then + if test $gl_cv_iconv_nonconst != yes; then ICONV_CONST="const" fi ]) diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4 index 40dd43b3d..092a406de 100644 --- a/m4/intdiv0.m4 +++ b/m4/intdiv0.m4 @@ -1,5 +1,5 @@ -# intdiv0.m4 serial 6 (gettext-0.18.2) -dnl Copyright (C) 2002, 2007-2008, 2010-2019 Free Software Foundation, Inc. +# intdiv0.m4 serial 9 (gettext-0.21.1) +dnl Copyright (C) 2002, 2007-2008, 2010-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -12,7 +12,7 @@ AC_DEFUN([gt_INTDIV0], AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], - gt_cv_int_divbyzero_sigfpe, + [gt_cv_int_divbyzero_sigfpe], [ gt_cv_int_divbyzero_sigfpe= changequote(,)dnl @@ -31,20 +31,23 @@ changequote([,])dnl if test -z "$gt_cv_int_divbyzero_sigfpe"; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ -#include <stdlib.h> +#include <stdlib.h> /* for exit() */ #include <signal.h> +#if !(defined _WIN32 && !defined __CYGWIN__) +#include <unistd.h> /* for _exit() */ +#endif static void sigfpe_handler (int sig) { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ - exit (sig != SIGFPE); + _exit (sig != SIGFPE); } int x = 1; int y = 0; int z; -int xnan; +int inan; int main () { @@ -59,7 +62,7 @@ int main () #endif z = x / y; - xnan = y / y; + inan = y / y; exit (2); } ]])], @@ -79,8 +82,8 @@ changequote([,])dnl fi ]) case "$gt_cv_int_divbyzero_sigfpe" in - *yes) value=1;; - *) value=0;; + *yes) value=1 ;; + *) value=0 ;; esac AC_DEFINE_UNQUOTED([INTDIV0_RAISES_SIGFPE], [$value], [Define if integer division by zero raises signal SIGFPE.]) diff --git a/m4/intl-thread-locale.m4 b/m4/intl-thread-locale.m4 index 3ecba86af..d5d5b26ac 100644 --- a/m4/intl-thread-locale.m4 +++ b/m4/intl-thread-locale.m4 @@ -1,15 +1,15 @@ -# intl-thread-locale.m4 serial 4 -dnl Copyright (C) 2015-2019 Free Software Foundation, Inc. +# intl-thread-locale.m4 serial 9 +dnl Copyright (C) 2015-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. @@ -17,7 +17,7 @@ dnl Check how to retrieve the name of a per-thread locale (POSIX locale_t). dnl Sets gt_nameless_locales. AC_DEFUN([gt_INTL_THREAD_LOCALE_NAME], [ - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade Solaris <locale.h> to define 'locale_t'. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) @@ -72,9 +72,13 @@ int main () esac case "$gt_cv_locale_fake" in *yes) + gt_fake_locales=yes AC_DEFINE([HAVE_FAKE_LOCALES], [1], [Define if the locale_t type contains insufficient information, as on OpenBSD.]) ;; + *) + gt_fake_locales=no + ;; esac case "$gt_cv_func_uselocale_works" in @@ -119,33 +123,60 @@ int main () ;; esac - dnl This code is for future use, in case we some day have to port to a - dnl platform where the locale_t type does not provide access to the name of - dnl each locale category. This code has the drawback that it requires the - dnl gnulib overrides of 'newlocale', 'duplocale', 'freelocale', which is a - dnl problem for GNU libunistring. Therefore try hard to avoid enabling this - dnl code! + dnl This code is for platforms where the locale_t type does not provide access + dnl to the name of each locale category. This code has the drawback that it + dnl requires the gnulib overrides of 'newlocale', 'duplocale', 'freelocale', + dnl which is a problem for GNU libunistring. Therefore try hard to avoid + dnl enabling this code! gt_nameless_locales=no - if false; then - gt_nameless_locales=yes - AC_DEFINE([HAVE_NAMELESS_LOCALES], [1], - [Define if the locale_t type does not contain the name of each locale category.]) + case "$host_os" in + dnl It's needed on AIX 7.2. + aix*) + gt_nameless_locales=yes + AC_DEFINE([HAVE_NAMELESS_LOCALES], [1], + [Define if the locale_t type does not contain the name of each locale category.]) + ;; + esac + + dnl We cannot support uselocale() on platforms where the locale_t type is + dnl fake. So, set + dnl gt_good_uselocale = gt_working_uselocale && !gt_fake_locales. + if test $gt_working_uselocale = yes && test $gt_fake_locales = no; then + gt_good_uselocale=yes + AC_DEFINE([HAVE_GOOD_USELOCALE], [1], + [Define if the uselocale exists, may be safely called, and returns sufficient information.]) + else + gt_good_uselocale=no + fi + + dnl Set gt_localename_enhances_locale_funcs to indicate whether localename.c + dnl overrides newlocale(), duplocale(), freelocale() to keep track of locale + dnl names. + if test $gt_good_uselocale = yes && test $gt_nameless_locales = yes; then + gt_localename_enhances_locale_funcs=yes + LOCALENAME_ENHANCE_LOCALE_FUNCS=1 + AC_DEFINE([LOCALENAME_ENHANCE_LOCALE_FUNCS], [1], + [Define if localename.c overrides newlocale(), duplocale(), freelocale().]) + else + gt_localename_enhances_locale_funcs=no fi ]) dnl Tests whether uselocale() exists and is usable. -dnl Sets gt_cv_func_uselocale_works. Defines HAVE_WORKING_USELOCALE. +dnl Sets gt_working_uselocale and defines HAVE_WORKING_USELOCALE. AC_DEFUN([gt_FUNC_USELOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - dnl Persuade Solaris <locale.h> to define 'locale_t'. + dnl Persuade glibc and Solaris <locale.h> to define 'locale_t'. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([uselocale]) dnl On AIX 7.2, the uselocale() function is not documented and leads to dnl crashes in subsequent setlocale() invocations. + dnl In 2019, some versions of z/OS lack the locale_t type and have a broken + dnl uselocale function. if test $ac_cv_func_uselocale = yes; then AC_CHECK_HEADERS_ONCE([xlocale.h]) AC_CACHE_CHECK([whether uselocale works], @@ -156,6 +187,7 @@ AC_DEFUN([gt_FUNC_USELOCALE], #if HAVE_XLOCALE_H # include <xlocale.h> #endif +locale_t loc1; int main () { uselocale (NULL); @@ -164,10 +196,10 @@ int main () }]])], [gt_cv_func_uselocale_works=yes], [gt_cv_func_uselocale_works=no], - [# Guess no on AIX, yes otherwise. + [# Guess no on AIX and z/OS, yes otherwise. case "$host_os" in - aix*) gt_cv_func_uselocale_works="guessing no" ;; - *) gt_cv_func_uselocale_works="guessing yes" ;; + aix* | openedition*) gt_cv_func_uselocale_works="guessing no" ;; + *) gt_cv_func_uselocale_works="guessing yes" ;; esac ]) ]) @@ -176,8 +208,12 @@ int main () fi case "$gt_cv_func_uselocale_works" in *yes) + gt_working_uselocale=yes AC_DEFINE([HAVE_WORKING_USELOCALE], [1], - [Define if the uselocale function exists any may safely be called.]) + [Define if the uselocale function exists and may safely be called.]) + ;; + *) + gt_working_uselocale=no ;; esac ]) diff --git a/m4/intl.m4 b/m4/intl.m4 index b481c5054..cc0fa86ad 100644 --- a/m4/intl.m4 +++ b/m4/intl.m4 @@ -1,15 +1,15 @@ -# intl.m4 serial 34 (gettext-0.19.9) -dnl Copyright (C) 1995-2014, 2016-2019 Free Software Foundation, Inc. +# intl.m4 serial 51 (gettext-0.21.1) +dnl Copyright (C) 1995-2014, 2016-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. @@ -20,8 +20,7 @@ dnl Bruno Haible <haible@clisp.cons.org>, 2000-2009. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the intl subdirectory, -dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, -dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. +dnl except for LIBTOOL, USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl @@ -37,10 +36,14 @@ AC_DEFUN([AM_INTL_SUBDIR], AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gt_TYPE_INTMAX_T]) AC_REQUIRE([gt_PRINTF_POSIX]) - AC_REQUIRE([gl_GLIBC21])dnl AC_REQUIRE([gl_XSIZE])dnl AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl + + dnl Make sure LOCALENAME_ENHANCE_LOCALE_FUNCS gets initialized to 0 before, + dnl not after, it has been set to 1 by gt_INTL_THREAD_LOCALE_NAME. + AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gt_INTL_THREAD_LOCALE_NAME]) + AC_REQUIRE([gt_INTL_MACOSX])dnl AC_REQUIRE([gl_EXTERN_INLINE])dnl AC_REQUIRE([gt_GL_ATTRIBUTE])dnl @@ -74,7 +77,7 @@ AC_DEFUN([AM_INTL_SUBDIR], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_CHECK_HEADERS([features.h stddef.h stdlib.h string.h]) - AC_CHECK_FUNCS([asprintf fwprintf newlocale putenv setenv setlocale \ + AC_CHECK_FUNCS([asprintf wprintf newlocale putenv setenv \ snprintf strnlen uselocale wcslen wcsnlen mbrtowc wcrtomb]) dnl Use the _snprintf function only if it is declared (because on NetBSD it @@ -89,7 +92,7 @@ AC_DEFUN([AM_INTL_SUBDIR], case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; - *) HAVE_POSIX_PRINTF=0 ;; + *) HAVE_POSIX_PRINTF=0 ;; esac AC_SUBST([HAVE_POSIX_PRINTF]) if test "$ac_cv_func_asprintf" = yes; then @@ -120,12 +123,12 @@ AC_DEFUN([AM_INTL_SUBDIR], AM_LANGINFO_CODESET gt_LC_MESSAGES - if test $gt_nameless_locales = yes; then - HAVE_NAMELESS_LOCALES=1 + if test $gt_localename_enhances_locale_funcs = yes; then + ENHANCE_LOCALE_FUNCS=1 else - HAVE_NAMELESS_LOCALES=0 + ENHANCE_LOCALE_FUNCS=0 fi - AC_SUBST([HAVE_NAMELESS_LOCALES]) + AC_SUBST([ENHANCE_LOCALE_FUNCS]) dnl Compilation on mingw and Cygwin needs special Makefile rules, because dnl 1. when we install a shared library, we must arrange to export @@ -228,7 +231,6 @@ AC_DEFUN([gt_INTL_SUBDIR_CORE], AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl - AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_REQUIRE([gl_LOCK])dnl AC_LINK_IFELSE( @@ -238,13 +240,9 @@ AC_DEFUN([gt_INTL_SUBDIR_CORE], [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1], [Define to 1 if the compiler understands __builtin_expect.])]) - AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h]) + AC_CHECK_HEADERS([inttypes.h unistd.h sys/param.h]) AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \ - stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \ - argz_next __fsetlocking]) - - dnl ADDED FOR BASH - AC_CHECK_FUNCS([localeconv]) + stpcpy strcasecmp tsearch __fsetlocking]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris @@ -254,35 +252,20 @@ AC_DEFUN([gt_INTL_SUBDIR_CORE], AM_ICONV + dnl ADDED FOR BASH + AC_CHECK_FUNCS([localeconv]) + dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least - dnl bison-2.7 for %define api.pure. + dnl bison-3.0 for %precedence. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. - AC_CHECK_PROGS([INTLBISON], [bison]) - if test -z "$INTLBISON"; then - ac_verc_fail=yes - else - dnl Found it, now check the version. - AC_MSG_CHECKING([version of bison]) -changequote(<<,>>)dnl - ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` - case $ac_prog_version in - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 2.[7-9]* | [3-9].*) -changequote([,])dnl - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; - esac - AC_MSG_RESULT([$ac_prog_version]) - fi - if test $ac_verc_fail = yes; then - INTLBISON=: - fi + gl_PROG_BISON([INTLBISON], [3.0]) + AC_SUBST(INTLBISON) ]) dnl Copies _GL_UNUSED and _GL_ATTRIBUTE_PURE definitions from diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4 index 7a474270b..ecc88d6e7 100644 --- a/m4/intlmacosx.m4 +++ b/m4/intlmacosx.m4 @@ -1,15 +1,15 @@ -# intlmacosx.m4 serial 6 (gettext-0.19.9) -dnl Copyright (C) 2004-2014, 2016, 2019 Free Software Foundation, Inc. +# intlmacosx.m4 serial 8 (gettext-0.20.2) +dnl Copyright (C) 2004-2014, 2016, 2019-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. @@ -33,21 +33,15 @@ AC_DEFUN([gt_INTL_MACOSX], AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi - dnl Check for API introduced in Mac OS X 10.5. - AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], - [gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include <CoreFoundation/CFLocale.h>]], - [[CFLocaleCopyCurrent();]])], - [gt_cv_func_CFLocaleCopyCurrent=yes], - [gt_cv_func_CFLocaleCopyCurrent=no]) - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then - AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], - [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) - fi + dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, + dnl because in macOS 10.13.4 it has the following behaviour: + dnl When two or more languages are specified in the + dnl "System Preferences > Language & Region > Preferred Languages" panel, + dnl it returns en_CC where CC is the territory (even when English is not among + dnl the preferred languages!). What we want instead is what + dnl CFLocaleCopyCurrent returned in earlier macOS releases and what + dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the + dnl first among the preferred languages and CC is the territory. AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" @@ -64,7 +58,6 @@ AC_DEFUN([gt_INTL_MACOSX], fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ - || test $gt_cv_func_CFLocaleCopyCurrent = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi diff --git a/m4/inttypes.m4 b/m4/inttypes.m4 index c58a1bec4..df25a21eb 100644 --- a/m4/inttypes.m4 +++ b/m4/inttypes.m4 @@ -1,5 +1,5 @@ -# inttypes.m4 serial 27 -dnl Copyright (C) 2006-2019 Free Software Foundation, Inc. +# inttypes.m4 serial 36 +dnl Copyright (C) 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -7,7 +7,7 @@ dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price, Bruno Haible. dnl Test whether <inttypes.h> is supported or must be substituted. -AC_DEFUN([gl_INTTYPES_H], +AC_DEFUN_ONCE([gl_INTTYPES_H], [ AC_REQUIRE([gl_INTTYPES_INCOMPLETE]) gl_INTTYPES_PRI_SCN @@ -28,17 +28,26 @@ AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE], dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <inttypes.h> ]], [imaxabs imaxdiv strtoimax strtoumax]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) # Ensure that the PRI* and SCN* macros are defined appropriately. AC_DEFUN([gl_INTTYPES_PRI_SCN], [ - AC_REQUIRE([gt_INTTYPES_PRI]) - PRIPTR_PREFIX= - if test -n "$STDINT_H"; then - dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'. - PRIPTR_PREFIX='"l"' + if $GL_GENERATE_STDINT_H; then + dnl Using the gnulib <stdint.h>. It defines intptr_t to 'long' or + dnl 'long long', depending on _WIN64. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + #ifdef _WIN64 + LLP64 + #endif + ]]) + ], + [PRIPTR_PREFIX='"l"'], + [PRIPTR_PREFIX='"ll"']) else dnl Using the system's <stdint.h>. for glpfx in '' l ll I64; do @@ -113,10 +122,8 @@ AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], #if $2 #define CONDITION ($3) - #elif HAVE_LONG_LONG_INT - #define CONDITION ($4) #else - #define CONDITION 0 + #define CONDITION ($4) #endif int test[CONDITION ? 1 : -1];]])], [gl_cv_test_$1=yes], @@ -129,19 +136,34 @@ AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], AC_SUBST([$1]) ]) +# gl_INTTYPES_MODULE_INDICATOR([modulename]) +# sets the shell variable that indicates the presence of the given module +# to a C preprocessor expression that will evaluate to 1. +# This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], [ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) + dnl Ensure to expand the default settings once only. + gl_INTTYPES_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) +# Initializes the default values for AC_SUBSTed shell variables. +# This macro must not be AC_REQUIREd. It must only be invoked, and only +# outside of macros or in macros that are not AC_REQUIREd. +AC_DEFUN([gl_INTTYPES_H_REQUIRE_DEFAULTS], +[ + m4_defun(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS], [ + gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXABS]) + gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXDIV]) + gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOIMAX]) + gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUMAX]) + ]) + m4_require(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS]) + AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) +]) + AC_DEFUN([gl_INTTYPES_H_DEFAULTS], [ - GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS]) - GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV]) - GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX]) - GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS]) HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) @@ -152,7 +174,6 @@ AC_DEFUN([gl_INTTYPES_H_DEFAULTS], REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX]) INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX]) - PRI_MACROS_BROKEN=0; AC_SUBST([PRI_MACROS_BROKEN]) PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX]) UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX]) UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX]) diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4 index d20422a44..6e9eebf1b 100644 --- a/m4/inttypes_h.m4 +++ b/m4/inttypes_h.m4 @@ -1,5 +1,5 @@ # inttypes_h.m4 serial 10 -dnl Copyright (C) 1997-2004, 2006, 2008-2019 Free Software Foundation, Inc. +dnl Copyright (C) 1997-2004, 2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4 index 8d32e10f9..1a3eefe79 100644 --- a/m4/lcmessage.m4 +++ b/m4/lcmessage.m4 @@ -1,16 +1,16 @@ -# lcmessage.m4 serial 7 (gettext-0.18.2) -dnl Copyright (C) 1995-2002, 2004-2005, 2008-2014, 2016, 2019 Free Software -dnl Foundation, Inc. +# lcmessage.m4 serial 8 +dnl Copyright (C) 1995-2002, 2004-2005, 2008-2014, 2016, 2019-2022 Free +dnl Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4 index a18719630..934207a76 100644 --- a/m4/lib-ld.m4 +++ b/m4/lib-ld.m4 @@ -1,5 +1,5 @@ -# lib-ld.m4 serial 9 -dnl Copyright (C) 1996-2003, 2009-2019 Free Software Foundation, Inc. +# lib-ld.m4 serial 10 +dnl Copyright (C) 1996-2003, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -122,7 +122,7 @@ else *-*-aix*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( - [[#if defined __powerpc64__ || defined _ARCH_PPC64 + [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail diff --git a/m4/lib-link.m4 b/m4/lib-link.m4 index 0ff10731f..3b75bcd0d 100644 --- a/m4/lib-link.m4 +++ b/m4/lib-link.m4 @@ -1,5 +1,5 @@ -# lib-link.m4 serial 28 -dnl Copyright (C) 2001-2019 Free Software Foundation, Inc. +# lib-link.m4 serial 33 +dnl Copyright (C) 2001-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -192,10 +192,12 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) AC_ARG_WITH(PACK[-prefix], -[[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib - --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[[ --with-]]PACK[[-prefix[=DIR] search for ]]PACKLIBS[[ in DIR/include and DIR/lib + --without-]]PACK[[-prefix don't search for ]]PACKLIBS[[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no @@ -204,17 +206,23 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && test ! -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi + additional_libdir2="$withval/$acl_libdirstem2" + additional_libdir3="$withval/$acl_libdirstem3" fi fi ]) + if test "X$additional_libdir2" = "X$additional_libdir"; then + additional_libdir2= + fi + if test "X$additional_libdir3" = "X$additional_libdir"; then + additional_libdir3= + fi dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= @@ -270,48 +278,54 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], shrext= fi if test $use_additional = yes; then - dir="$additional_libdir" - dnl The same code as in the loop below: - dnl First look for a shared library. - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" + for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do + if test "X$found_dir" = "X"; then + eval dir=\$$additional_libdir_variable + if test -n "$dir"; then + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" - found_so="$dir/$f" - break + found_a="$dir/$libname.$acl_libext" fi - done + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi fi fi - fi - dnl Then look for a static library. - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi + done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do @@ -321,7 +335,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else @@ -331,14 +345,14 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do - if test -f "$dir/$f"; then + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break @@ -349,7 +363,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], fi dnl Then look for a static library. if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi @@ -375,7 +389,8 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else @@ -475,6 +490,13 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], fi additional_includedir="$basedir/include" ;; + */$acl_libdirstem3 | */$acl_libdirstem3/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. @@ -525,19 +547,21 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], for dep in $dependency_libs; do case "$dep" in -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; @@ -548,29 +572,29 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LIBNAME. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + dnl Really add $dependency_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then + if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LTLIBNAME. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + if test -d "$dependency_libdir"; then + dnl Really add $dependency_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir" fi fi fi @@ -607,7 +631,20 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], ;; -l*) dnl Handle this in the next round. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + dnl But on GNU systems, ignore -lc options, because + dnl - linking with libc is the default anyway, + dnl - linking with libc.a may produce an error + dnl "/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie" + dnl or may produce an executable that always crashes, see + dnl <https://lists.gnu.org/archive/html/grep-devel/2020-09/msg00052.html>. + dep=`echo "X$dep" | sed -e 's/^X-l//'` + if test "X$dep" != Xc \ + || case $host_os in + linux* | gnu* | k*bsd*-gnu) false ;; + *) true ;; + esac; then + names_next_round="$names_next_round $dep" + fi ;; *.la) dnl Handle this in the next round. Throw away the .la's @@ -718,7 +755,8 @@ AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then + && test "X$dir" != "X/usr/$acl_libdirstem2" \ + && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= @@ -728,7 +766,8 @@ AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then + && test "X$dir" != "X/usr/$acl_libdirstem2" \ + && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= ;; diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4 index 8adb17bb9..fe7fa0afd 100644 --- a/m4/lib-prefix.m4 +++ b/m4/lib-prefix.m4 @@ -1,5 +1,5 @@ -# lib-prefix.m4 serial 14 -dnl Copyright (C) 2001-2005, 2008-2019 Free Software Foundation, Inc. +# lib-prefix.m4 serial 20 +dnl Copyright (C) 2001-2005, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -147,21 +147,24 @@ AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], ]) dnl AC_LIB_PREPARE_MULTILIB creates -dnl - a variable acl_libdirstem, containing the basename of the libdir, either -dnl "lib" or "lib64" or "lib/64", -dnl - a variable acl_libdirstem2, as a secondary possible value for -dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or -dnl "lib/amd64". +dnl - a function acl_is_expected_elfclass, that tests whether standard input +dnl has a 32-bit or 64-bit ELF header, depending on the host CPU ABI, +dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing +dnl the basename of the libdir to try in turn, either "lib" or "lib64" or +dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar. AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ - dnl There is no formal standard regarding lib and lib64. - dnl On glibc systems, the current practice is that on a system supporting + dnl There is no formal standard regarding lib, lib32, and lib64. + dnl On most glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under - dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine - dnl the compiler's default mode by looking at the compiler's library search - dnl path. If at least one of its elements ends in /lib64 or points to a - dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. - dnl Otherwise we use the default, namely "lib". + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on + dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go + dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib. + dnl We determine the compiler's default mode by looking at the compiler's + dnl library search path. If at least one of its elements ends in /lib64 or + dnl points to a directory whose absolute pathname ends in /lib64, we use that + dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default, + dnl namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or @@ -169,27 +172,75 @@ AC_DEFUN([AC_LIB_PREPARE_MULTILIB], AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) - case "$host_os" in - solaris*) - AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], - [AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#ifdef _LP64 - int ok; - #else - error fail - #endif - ]])], - [gl_cv_solaris_64bit=yes], - [gl_cv_solaris_64bit=no]) - ]);; - esac + AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf], + [AC_EGREP_CPP([Extensible Linking Format], + [#if defined __ELF__ || (defined __linux__ && defined __EDG__) + Extensible Linking Format + #endif + ], + [gl_cv_elf=yes], + [gl_cv_elf=no]) + ]) + if test $gl_cv_elf = yes; then + # Extract the ELF class of a file (5th byte) in decimal. + # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header + if od -A x < /dev/null >/dev/null 2>/dev/null; then + # Use POSIX od. + func_elfclass () + { + od -A n -t d1 -j 4 -N 1 + } + else + # Use BSD hexdump. + func_elfclass () + { + dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' + echo + } + fi + # Use 'expr', not 'test', to compare the values of func_elfclass, because on + # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, + # not 1 or 2. +changequote(,)dnl + case $HOST_CPU_C_ABI_32BIT in + yes) + # 32-bit ABI. + acl_is_expected_elfclass () + { + expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null + } + ;; + no) + # 64-bit ABI. + acl_is_expected_elfclass () + { + expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null + } + ;; + *) + # Unknown. + acl_is_expected_elfclass () + { + : + } + ;; + esac +changequote([,])dnl + else + acl_is_expected_elfclass () + { + : + } + fi dnl Allow the user to override the result by setting acl_cv_libdirstems. AC_CACHE_CHECK([for the common suffixes of directories in the library search path], [acl_cv_libdirstems], - [acl_libdirstem=lib + [dnl Try 'lib' first, because that's the default for libdir in GNU, see + dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>. + acl_libdirstem=lib acl_libdirstem2= + acl_libdirstem3= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment @@ -197,53 +248,76 @@ AC_DEFUN([AC_LIB_PREPARE_MULTILIB], dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. - if test $gl_cv_solaris_64bit = yes; then - acl_libdirstem=lib/64 + if test $HOST_CPU_C_ABI_32BIT = no; then + acl_libdirstem2=lib/64 case "$host_cpu" in - sparc*) acl_libdirstem2=lib/sparcv9 ;; - i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + sparc*) acl_libdirstem3=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) dnl If $CC generates code for a 32-bit ABI, the libraries are - dnl surely under $prefix/lib, not $prefix/lib64. - if test "$HOST_CPU_C_ABI_32BIT" != yes; then - dnl The result is a property of the system. However, non-system - dnl compilers sometimes have odd library search paths. Therefore - dnl prefer asking /usr/bin/gcc, if available, rather than $CC. - searchpath=`(if test -f /usr/bin/gcc \ - && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ - LC_ALL=C /usr/bin/gcc -print-search-dirs; \ - else \ - LC_ALL=C $CC -print-search-dirs; \ - fi) 2>/dev/null \ - | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - */../ | */.. ) - # Better ignore directories of this form. They are misleading. - ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" + dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64. + dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries + dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32. + dnl Find the compiler's search path. However, non-system compilers + dnl sometimes have odd library search paths. But we can't simply invoke + dnl '/usr/bin/gcc -print-search-dirs' because that would not take into + dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS. + searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ + | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test $HOST_CPU_C_ABI_32BIT != no; then + # 32-bit or unknown ABI. + if test -d /usr/lib32; then + acl_libdirstem2=lib32 + fi + fi + if test $HOST_CPU_C_ABI_32BIT != yes; then + # 64-bit or unknown ABI. + if test -d /usr/lib64; then + acl_libdirstem3=lib64 + fi + fi + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; + */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib32 ) acl_libdirstem2=lib32 ;; + */lib64 ) acl_libdirstem3=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + if test $HOST_CPU_C_ABI_32BIT = yes; then + # 32-bit ABI. + acl_libdirstem3= + fi + if test $HOST_CPU_C_ABI_32BIT = no; then + # 64-bit ABI. + acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" - acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" + test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" + acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" ]) - # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. + dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and + dnl acl_libdirstem3. +changequote(,)dnl acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` - acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` + acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` + acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` +changequote([,])dnl ]) diff --git a/m4/lock.m4 b/m4/lock.m4 index 93b76fa44..c4cbf07bd 100644 --- a/m4/lock.m4 +++ b/m4/lock.m4 @@ -1,5 +1,5 @@ # lock.m4 serial 14 -dnl Copyright (C) 2005-2019 Free Software Foundation, Inc. +dnl Copyright (C) 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/nls.m4 b/m4/nls.m4 index b62f61485..7c11c90f5 100644 --- a/m4/nls.m4 +++ b/m4/nls.m4 @@ -1,16 +1,16 @@ -# nls.m4 serial 5 (gettext-0.18) -dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019 Free Software -dnl Foundation, Inc. +# nls.m4 serial 6 (gettext-0.20.2) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019-2022 Free +dnl Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. diff --git a/m4/po.m4 b/m4/po.m4 index ce72d0173..2f14f8e2b 100644 --- a/m4/po.m4 +++ b/m4/po.m4 @@ -1,15 +1,15 @@ -# po.m4 serial 24a -dnl Copyright (C) 1995-2014, 2016, 2018-2019 Free Software Foundation, Inc. +# po.m4 serial 32 (gettext-0.21.1) +dnl Copyright (C) 1995-2014, 2016, 2018-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. @@ -30,7 +30,7 @@ AC_DEFUN([AM_PO_SUBDIRS], dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. - AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) + AC_SUBST([GETTEXT_MACRO_VERSION], [0.20]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. @@ -45,13 +45,6 @@ AC_DEFUN([AM_PO_SUBDIRS], AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. -changequote(,)dnl - case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; - *) MSGFMT_015=$MSGFMT ;; - esac -changequote([,])dnl - AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; @@ -83,6 +76,22 @@ changequote([,])dnl AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + dnl Test whether it is GNU msgmerge >= 0.20. + if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then + MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt' + else + dnl Test whether it is GNU msgmerge >= 0.12. + if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then + MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet' + else + dnl With these old versions, $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) is + dnl slow. But this is not a big problem, as such old gettext versions are + dnl hardly in use any more. + MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet' + fi + fi + AC_SUBST([MSGMERGE_FOR_MSGFMT_OPTION]) + dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) @@ -170,7 +179,9 @@ changequote([,])dnl # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in - "$presentlang"*) useit=yes;; + "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) + useit=yes + ;; esac done if test $useit = yes; then @@ -317,9 +328,9 @@ changequote([,])dnl # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) # Compute PROPERTIESFILES - # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties) + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).properties) # Compute CLASSFILES - # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class) + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).class) # Compute QMFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) # Compute MSGFILES @@ -344,8 +355,8 @@ changequote([,])dnl UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" - PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties" - CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class" + PROPERTIESFILES="$PROPERTIESFILES \$(srcdir)/\$(DOMAIN)_$lang.properties" + CLASSFILES="$CLASSFILES \$(srcdir)/\$(DOMAIN)_$lang.class" QMFILES="$QMFILES $srcdirpre$lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" @@ -370,7 +381,9 @@ changequote([,])dnl # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in - "$presentlang"*) useit=yes;; + "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) + useit=yes + ;; esac done if test $useit = yes; then diff --git a/m4/printf-posix.m4 b/m4/printf-posix.m4 index 2707cf745..12b6cc5ad 100644 --- a/m4/printf-posix.m4 +++ b/m4/printf-posix.m4 @@ -1,5 +1,5 @@ -# printf-posix.m4 serial 6 (gettext-0.18.2) -dnl Copyright (C) 2003, 2007, 2009-2019 Free Software Foundation, Inc. +# printf-posix.m4 serial 7 (gettext-0.21.1) +dnl Copyright (C) 2003, 2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -12,7 +12,7 @@ AC_DEFUN([gt_PRINTF_POSIX], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings], - gt_cv_func_printf_posix, + [gt_cv_func_printf_posix], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ diff --git a/m4/progtest.m4 b/m4/progtest.m4 index 5f186b149..4a5b0b4c6 100644 --- a/m4/progtest.m4 +++ b/m4/progtest.m4 @@ -1,22 +1,22 @@ -# progtest.m4 serial 7 (gettext-0.18.2) -dnl Copyright (C) 1996-2003, 2005, 2008-2019 Free Software Foundation, Inc. +# progtest.m4 serial 9 (gettext-0.21.1) +dnl Copyright (C) 1996-2003, 2005, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public +dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU +dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1996. -AC_PREREQ([2.50]) +AC_PREREQ([2.53]) # Search path for a program which passes the given test. @@ -61,7 +61,7 @@ AC_CACHE_VAL([ac_cv_path_$1], ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in ifelse([$5], , $PATH, [$5]); do + for ac_dir in m4_if([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do @@ -77,12 +77,12 @@ AC_CACHE_VAL([ac_cv_path_$1], IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. -ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +m4_if([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" -if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then +if test m4_if([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) diff --git a/m4/pthread_rwlock_rdlock.m4 b/m4/pthread_rwlock_rdlock.m4 index 3c1d64566..8ad783928 100644 --- a/m4/pthread_rwlock_rdlock.m4 +++ b/m4/pthread_rwlock_rdlock.m4 @@ -1,5 +1,5 @@ -# pthread_rwlock_rdlock.m4 serial 2 -dnl Copyright (C) 2017-2019 Free Software Foundation, Inc. +# pthread_rwlock_rdlock.m4 serial 4 +dnl Copyright (C) 2017-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -26,14 +26,16 @@ dnl dnl POSIX:2017 makes this requirement only for implementations that support TPS dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO dnl and SCHED_RR, see -dnl http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html +dnl https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html dnl but this test verifies the guarantee regardless of TPS and regardless of dnl scheduling policy. -dnl Glibc currently does not provide this guarantee, see +dnl Glibc does not provide this guarantee (and never will on Linux), see dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701 +dnl https://bugzilla.redhat.com/show_bug.cgi?id=1410052 AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [ AC_REQUIRE([gl_THREADLIB_EARLY]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader], [gl_cv_pthread_rwlock_rdlock_prefer_writer], [save_LIBS="$LIBS" @@ -153,7 +155,25 @@ main () ]])], [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes], [gl_cv_pthread_rwlock_rdlock_prefer_writer=no], - [gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"]) + [case "$host_os" in + # Guess no on glibc systems. + *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess no on musl systems. + *-musl*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess no on bionic systems. + *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess yes on native Windows with the mingw-w64 winpthreads library. + # Guess no on native Windows with the gnulib windows-rwlock module. + mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" + else + gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" + fi + ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; + esac + ]) LIBS="$save_LIBS" ]) case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in diff --git a/m4/size_max.m4 b/m4/size_max.m4 index ab79052d6..1d6abaeaa 100644 --- a/m4/size_max.m4 +++ b/m4/size_max.m4 @@ -1,5 +1,5 @@ -# size_max.m4 serial 11 -dnl Copyright (C) 2003, 2005-2006, 2008-2019 Free Software Foundation, Inc. +# size_max.m4 serial 12 +dnl Copyright (C) 2003, 2005-2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -13,7 +13,7 @@ AC_DEFUN([gl_SIZE_MAX], AC_CHECK_HEADERS([stdint.h]) dnl First test whether the system already has SIZE_MAX. AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ - gl_cv_size_max= + gl_cv_size_max=no AC_EGREP_CPP([Found it], [ #include <limits.h> #if HAVE_STDINT_H @@ -23,7 +23,7 @@ AC_DEFUN([gl_SIZE_MAX], Found it #endif ], [gl_cv_size_max=yes]) - if test -z "$gl_cv_size_max"; then + if test $gl_cv_size_max != yes; then dnl Define it ourselves. Here we assume that the type 'size_t' is not wider dnl than the type 'unsigned long'. Try hard to find a definition that can dnl be used in a preprocessor #if, i.e. doesn't contain a cast. diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4 index 6d5f1af0a..b8684b61a 100644 --- a/m4/stdint_h.m4 +++ b/m4/stdint_h.m4 @@ -1,5 +1,5 @@ # stdint_h.m4 serial 9 -dnl Copyright (C) 1997-2004, 2006, 2008-2019 Free Software Foundation, Inc. +dnl Copyright (C) 1997-2004, 2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/strtoimax.m4 b/m4/strtoimax.m4 index 309857235..4d6cb3ba8 100644 --- a/m4/strtoimax.m4 +++ b/m4/strtoimax.m4 @@ -21,7 +21,6 @@ AC_CACHE_VAL(bash_cv_func_strtoimax, if test "$ac_cv_have_decl_strtoimax" = "yes" ; then HAVE_DECL_STRTOIMAX=1 fi - if test "$HAVE_STRTOIMAX" = 0 || test "$HAVE_DECL_STRTOIMAX" = 0 ; then bash_cv_func_strtoimax=no REPLACE_STRTOIMAX=1 else @@ -29,7 +28,10 @@ AC_CACHE_VAL(bash_cv_func_strtoimax, fi ]) AC_MSG_RESULT($bash_cv_func_strtoimax) -if test $bash_cv_func_strtoimax = yes; then +if test "$ac_cv_have_decl_strtoimax" = "yes" ; then +AC_DEFINE([HAVE_DECL_STRTOIMAX], [1]) +fi +if test $bash_cv_func_strtoimax = no; then AC_LIBOBJ(strtoimax) fi ]) diff --git a/m4/threadlib.m4 b/m4/threadlib.m4 index 60e4197b1..ecb4970af 100644 --- a/m4/threadlib.m4 +++ b/m4/threadlib.m4 @@ -1,5 +1,5 @@ -# threadlib.m4 serial 16 -dnl Copyright (C) 2005-2019 Free Software Foundation, Inc. +# threadlib.m4 serial 32 +dnl Copyright (C) 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -8,6 +8,381 @@ dnl From Bruno Haible. AC_PREREQ([2.60]) +dnl The general structure of the multithreading modules in gnulib is that we +dnl have three set of modules: +dnl +dnl * POSIX API: +dnl pthread, which combines +dnl pthread-h +dnl pthread-thread +dnl pthread-once +dnl pthread-mutex +dnl pthread-rwlock +dnl pthread-cond +dnl pthread-tss +dnl pthread-spin +dnl sched_yield +dnl +dnl * ISO C API: +dnl threads, which combines +dnl threads-h +dnl thrd +dnl mtx +dnl cnd +dnl tss +dnl +dnl * Gnulib API, with an implementation that can be chosen at configure +dnl time through the option --enable-threads=... +dnl thread +dnl lock +dnl cond +dnl tls +dnl yield +dnl +dnl They are independent, except for the fact that +dnl - the implementation of the ISO C API may use the POSIX (or some other +dnl platform dependent) API, +dnl - the implementation of the Gnulib API may use the POSIX or ISO C or +dnl some other platform dependent API, depending on the --enable-threads +dnl option. +dnl +dnl This file contains macros for all of these APIs! + +dnl ============================================================================ +dnl Macros for all thread APIs + +AC_DEFUN([gl_ANYTHREADLIB_EARLY], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + if test -z "$gl_anythreadlib_early_done"; then + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks <pthread.h>. cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_LINK_IFELSE test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in <errno.h>. + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + gl_anythreadlib_early_done=done + fi +]) + +dnl Checks whether the compiler and linker support weak declarations of symbols. + +AC_DEFUN([gl_WEAK_SYMBOLS], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CACHE_CHECK([whether imported symbols can be declared weak], + [gl_cv_have_weak], + [case "$host_os" in + cygwin*) + dnl On Cygwin 3.2.0 with gcc 10.2, the test below would succeed, but + dnl programs that use pthread_in_use() with weak symbol references + dnl crash miserably at runtime. + gl_cv_have_weak="guessing no" + ;; + *) + gl_cv_have_weak=no + dnl First, test whether the compiler accepts it syntactically. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[extern void xyzzy (); +#pragma weak xyzzy]], + [[xyzzy();]])], + [gl_cv_have_weak=maybe]) + if test $gl_cv_have_weak = maybe; then + dnl Second, test whether it actually works. On Cygwin 1.7.2, with + dnl gcc 4.3, symbols declared weak always evaluate to the address 0. + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#pragma weak fputs +int main () +{ + return (fputs == NULL); +}]])], + [gl_cv_have_weak=yes], + [gl_cv_have_weak=no], + [dnl When cross-compiling, assume that only ELF platforms support + dnl weak symbols. + AC_EGREP_CPP([Extensible Linking Format], + [#ifdef __ELF__ + Extensible Linking Format + #endif + ], + [gl_cv_have_weak="guessing yes"], + [gl_cv_have_weak="guessing no"]) + ]) + fi + ;; + esac + dnl But when linking statically, weak symbols don't work. + case " $LDFLAGS " in + *" -static "*) gl_cv_have_weak=no ;; + esac + dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak + dnl symbol and linking against a shared library that has a dependency on + dnl the shared library that defines the symbol. + case "$gl_cv_have_weak" in + *yes) + case "$host_os" in + freebsd* | dragonfly* | midnightbsd*) + : > conftest1.c + $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1 + cat <<EOF > conftest2.c +#include <pthread.h> +#pragma weak pthread_mutexattr_gettype +int main () +{ + return (pthread_mutexattr_gettype != NULL); +} +EOF + $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \ + || gl_cv_have_weak=no + rm -f conftest1.c libempty.so conftest2.c conftest + ;; + esac + ;; + esac + ]) + case "$gl_cv_have_weak" in + *yes) + AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], + [Define to 1 if the compiler and linker support weak declarations of symbols.]) + ;; + esac +]) + +dnl ============================================================================ +dnl Macros for the POSIX API + +dnl gl_PTHREADLIB +dnl ------------- +dnl Tests for the libraries needs for using the POSIX threads API. +dnl Sets the variable LIBPTHREAD to the linker options for use in a Makefile. +dnl Sets the variable LIBPMULTITHREAD, for programs that really need +dnl multithread functionality. The difference between LIBPTHREAD and +dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically +dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not. +dnl Sets the variable LIB_SCHED_YIELD to the linker options needed to use the +dnl sched_yield() function. +dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for +dnl multithread-safe programs. +dnl Defines the C macro HAVE_PTHREAD_API if (at least parts of) the POSIX +dnl threads API is available. + +dnl The guts of gl_PTHREADLIB. Needs to be expanded only once. + +AC_DEFUN([gl_PTHREADLIB_BODY], +[ + AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) + if test -z "$gl_pthreadlib_body_done"; then + gl_pthread_api=no + LIBPTHREAD= + LIBPMULTITHREAD= + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. + AC_CHECK_HEADER([pthread.h], + [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + # + # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 + # needs -pthread for some reason. See: + # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html + save_LIBS=$LIBS + for gl_pthread in '' '-pthread'; do + LIBS="$LIBS $gl_pthread" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <pthread.h> + pthread_mutex_t m; + pthread_mutexattr_t ma; + ]], + [[pthread_mutex_lock (&m); + pthread_mutexattr_init (&ma);]])], + [gl_pthread_api=yes + LIBPTHREAD=$gl_pthread + LIBPMULTITHREAD=$gl_pthread]) + LIBS=$save_LIBS + test $gl_pthread_api = yes && break + done + echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: LIBPTHREAD=$LIBPTHREAD" >&AS_MESSAGE_LOG_FD + + gl_pthread_in_glibc=no + # On Linux with glibc >= 2.34, libc contains the fully functional + # pthread functions. + case "$host_os" in + linux*) + AC_EGREP_CPP([Lucky user], + [#include <features.h> + #ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) + Lucky user + #endif + #endif + ], + [gl_pthread_in_glibc=yes], + []) + ;; + esac + echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD + + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + AC_CHECK_LIB([pthread], [pthread_kill], + [if test $gl_pthread_in_glibc = yes; then + LIBPMULTITHREAD= + else + LIBPMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + # On Solaris 10 or newer, this test is no longer needed, because + # libc contains the fully functional pthread functions. + case "$host_os" in + solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) + AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], + [Define if the pthread_in_use() detection is hard.]) + esac + fi + ]) + elif test $gl_pthread_api != yes; then + # Some library is needed. Try libpthread and libc_r. + AC_CHECK_LIB([pthread], [pthread_kill], + [gl_pthread_api=yes + LIBPTHREAD=-lpthread + LIBPMULTITHREAD=-lpthread]) + if test $gl_pthread_api != yes; then + # For FreeBSD 4. + AC_CHECK_LIB([c_r], [pthread_kill], + [gl_pthread_api=yes + LIBPTHREAD=-lc_r + LIBPMULTITHREAD=-lc_r]) + fi + fi + echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD + fi + AC_MSG_CHECKING([whether POSIX threads API is available]) + AC_MSG_RESULT([$gl_pthread_api]) + AC_SUBST([LIBPTHREAD]) + AC_SUBST([LIBPMULTITHREAD]) + if test $gl_pthread_api = yes; then + AC_DEFINE([HAVE_PTHREAD_API], [1], + [Define if you have the <pthread.h> header and the POSIX threads API.]) + fi + + dnl On some systems, sched_yield is in librt, rather than in libpthread. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sched.h>]], + [[sched_yield ();]])], + [LIB_SCHED_YIELD= + ], + [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc. + AC_CHECK_LIB([rt], [sched_yield], [LIB_SCHED_YIELD=-lrt], + [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. + AC_CHECK_LIB([posix4], [sched_yield], [LIB_SCHED_YIELD=-lposix4])]) + ]) + AC_SUBST([LIB_SCHED_YIELD]) + + gl_pthreadlib_body_done=done + fi +]) + +AC_DEFUN([gl_PTHREADLIB], +[ + AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) + gl_PTHREADLIB_BODY +]) + +dnl ============================================================================ +dnl Macros for the ISO C API + +dnl gl_STDTHREADLIB +dnl --------------- +dnl Tests for the libraries needs for using the ISO C threads API. +dnl Sets the variable LIBSTDTHREAD to the linker options for use in a Makefile. +dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for +dnl multithread-safe programs. +dnl Defines the C macro HAVE_THREADS_H if (at least parts of) the ISO C threads +dnl API is available. + +dnl The guts of gl_STDTHREADLIB. Needs to be expanded only once. + +AC_DEFUN([gl_STDTHREADLIB_BODY], +[ + AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) + AC_REQUIRE([AC_CANONICAL_HOST]) + if test -z "$gl_stdthreadlib_body_done"; then + AC_CHECK_HEADERS_ONCE([threads.h]) + + case "$host_os" in + mingw*) + LIBSTDTHREAD= + ;; + *) + gl_PTHREADLIB_BODY + if test $ac_cv_header_threads_h = yes; then + dnl glibc >= 2.29 has thrd_create in libpthread. + dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends + dnl on libpthread (for the symbol 'pthread_mutexattr_gettype'). + dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in + dnl libc. + AC_CHECK_FUNCS([thrd_create]) + if test $ac_cv_func_thrd_create = yes; then + LIBSTDTHREAD= + else + AC_CHECK_LIB([stdthreads], [thrd_create], [ + LIBSTDTHREAD='-lstdthreads -lpthread' + ], [ + dnl Guess that thrd_create is in libpthread. + LIBSTDTHREAD="$LIBPMULTITHREAD" + ]) + fi + else + dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c. + LIBSTDTHREAD="$LIBPMULTITHREAD $LIB_SCHED_YIELD" + fi + ;; + esac + AC_SUBST([LIBSTDTHREAD]) + + AC_MSG_CHECKING([whether ISO C threads API is available]) + AC_MSG_RESULT([$ac_cv_header_threads_h]) + gl_stdthreadlib_body_done=done + fi +]) + +AC_DEFUN([gl_STDTHREADLIB], +[ + AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) + gl_STDTHREADLIB_BODY +]) + +dnl ============================================================================ +dnl Macros for the Gnulib API + dnl gl_THREADLIB dnl ------------ dnl Tests for a multithreading library to be used. @@ -16,8 +391,13 @@ dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the dnl default is 'no', otherwise it is system dependent. In both cases, the user dnl can change the choice through the options --enable-threads=choice or dnl --disable-threads. -dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, -dnl USE_PTH_THREADS, USE_WINDOWS_THREADS +dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS, +dnl USE_ISOC_AND_POSIX_THREADS, USE_WINDOWS_THREADS. +dnl The choice --enable-threads=isoc+posix is available only on platforms that +dnl have both the ISO C and the POSIX threads APIs. It has the effect of using +dnl the ISO C API for most things and the POSIX API only for creating and +dnl controlling threads (because there is no equivalent to pthread_atfork in +dnl the ISO C API). dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). @@ -27,6 +407,9 @@ dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. +dnl Since support for GNU pth was removed, $LTLIBTHREAD and $LIBTHREAD have the +dnl same value, and similarly $LTLIBMULTITHREAD and $LIBMULTITHREAD have the +dnl same value. Only system libraries are needed. AC_DEFUN([gl_THREADLIB_EARLY], [ @@ -50,8 +433,9 @@ AC_DEFUN([gl_THREADLIB_EARLY_BODY], m4_ifdef([gl_THREADLIB_DEFAULT_NO], [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) + m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=]) AC_ARG_ENABLE([threads], -AS_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ +AS_HELP_STRING([--enable-threads={isoc|posix|isoc+posix|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AS_HELP_STRING([--disable-threads], [build without multithread safety])]), [gl_use_threads=$enableval], [if test -n "$gl_use_threads_default"; then @@ -62,41 +446,35 @@ changequote(,)dnl dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its dnl child process gets an endless segmentation fault inside execvp(). + osf*) gl_use_threads=no ;; dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>. - osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; + dnl Obey gl_AVOID_WINPTHREAD on mingw. + mingw*) + case "$gl_use_winpthreads_default" in + yes) gl_use_threads=posix ;; + no) gl_use_threads=windows ;; + *) gl_use_threads=yes ;; + esac + ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) - if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then - # For using <pthread.h>: - case "$host_os" in - osf*) - # On OSF/1, the compiler needs the flag -D_REENTRANT so that it - # groks <pthread.h>. cc also understands the flag -pthread, but - # we don't use it because 1. gcc-2.95 doesn't understand -pthread, - # 2. putting a flag into CPPFLAGS that has an effect on the linker - # causes the AC_LINK_IFELSE test below to succeed unexpectedly, - # leading to wrong values of LIBTHREAD and LTLIBTHREAD. - CPPFLAGS="$CPPFLAGS -D_REENTRANT" - ;; - esac - # Some systems optimize for single-threaded programs by default, and - # need special flags to disable these optimizations. For example, the - # definition of 'errno' in <errno.h>. - case "$host_os" in - aix* | freebsd* | midnightbsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; - solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; - esac + if test "$gl_use_threads" = yes \ + || test "$gl_use_threads" = isoc \ + || test "$gl_use_threads" = posix \ + || test "$gl_use_threads" = isoc+posix; then + # For using <threads.h> or <pthread.h>: + gl_ANYTHREADLIB_EARLY fi ]) @@ -112,190 +490,69 @@ AC_DEFUN([gl_THREADLIB_BODY], LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. - AC_CACHE_CHECK([whether imported symbols can be declared weak], - [gl_cv_have_weak], - [gl_cv_have_weak=no - dnl First, test whether the compiler accepts it syntactically. - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[extern void xyzzy (); -#pragma weak xyzzy]], - [[xyzzy();]])], - [gl_cv_have_weak=maybe]) - if test $gl_cv_have_weak = maybe; then - dnl Second, test whether it actually works. On Cygwin 1.7.2, with - dnl gcc 4.3, symbols declared weak always evaluate to the address 0. - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include <stdio.h> -#pragma weak fputs -int main () -{ - return (fputs == NULL); -}]])], - [gl_cv_have_weak=yes], - [gl_cv_have_weak=no], - [dnl When cross-compiling, assume that only ELF platforms support - dnl weak symbols. - AC_EGREP_CPP([Extensible Linking Format], - [#ifdef __ELF__ - Extensible Linking Format - #endif - ], - [gl_cv_have_weak="guessing yes"], - [gl_cv_have_weak="guessing no"]) - ]) - fi - dnl But when linking statically, weak symbols don't work. - case " $LDFLAGS " in - *" -static "*) gl_cv_have_weak=no ;; - esac - ]) - if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then - # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that - # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY. - AC_CHECK_HEADER([pthread.h], - [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) - if test "$gl_have_pthread_h" = yes; then - # Other possible tests: - # -lpthreads (FSU threads, PCthreads) - # -lgthreads - gl_have_pthread= - # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist - # in libc. IRIX 6.5 has the first one in both libc and libpthread, but - # the second one only in libpthread, and lock.c needs it. - # - # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 - # needs -pthread for some reason. See: - # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html - save_LIBS=$LIBS - for gl_pthread in '' '-pthread'; do - LIBS="$LIBS $gl_pthread" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include <pthread.h> - pthread_mutex_t m; - pthread_mutexattr_t ma; - ]], - [[pthread_mutex_lock (&m); - pthread_mutexattr_init (&ma);]])], - [gl_have_pthread=yes - LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread - LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread]) - LIBS=$save_LIBS - test -n "$gl_have_pthread" && break - done - - # Test for libpthread by looking for pthread_kill. (Not pthread_self, - # since it is defined as a macro on OSF/1.) - if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then - # The program links fine without libpthread. But it may actually - # need to link with libpthread in order to create multiple threads. - AC_CHECK_LIB([pthread], [pthread_kill], - [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread - # On Solaris and HP-UX, most pthread functions exist also in libc. - # Therefore pthread_in_use() needs to actually try to create a - # thread: pthread_create from libc will fail, whereas - # pthread_create will actually create a thread. - # On Solaris 10 or newer, this test is no longer needed, because - # libc contains the fully functional pthread functions. - case "$host_os" in - solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) - AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], - [Define if the pthread_in_use() detection is hard.]) - esac - ]) - elif test -z "$gl_have_pthread"; then - # Some library is needed. Try libpthread and libc_r. - AC_CHECK_LIB([pthread], [pthread_kill], - [gl_have_pthread=yes - LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread - LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) - if test -z "$gl_have_pthread"; then - # For FreeBSD 4. - AC_CHECK_LIB([c_r], [pthread_kill], - [gl_have_pthread=yes - LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r - LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) - fi - fi - if test -n "$gl_have_pthread"; then + gl_WEAK_SYMBOLS + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + dnl If we use weak symbols to implement pthread_in_use / pth_in_use / + dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create + dnl facility is in use. + AC_CHECK_HEADERS_ONCE([threads.h]) + : + fi + if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then + AC_CHECK_HEADERS_ONCE([threads.h]) + gl_have_isoc_threads="$ac_cv_header_threads_h" + fi + if test "$gl_use_threads" = yes \ + || test "$gl_use_threads" = posix \ + || test "$gl_use_threads" = isoc+posix; then + gl_PTHREADLIB_BODY + LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD + LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD + if test $gl_pthread_api = yes; then + if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then + gl_threads_api='isoc+posix' + AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1], + [Define if the combination of the ISO C and POSIX multithreading APIs can be used.]) + LIBTHREAD= LTLIBTHREAD= + else gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) - if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then + AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1], + [Define if references to the POSIX multithreading library are satisfied by libc.]) + else if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], [Define if references to the POSIX multithreading library should be made weak.]) - LIBTHREAD= - LTLIBTHREAD= + LIBTHREAD= LTLIBTHREAD= + else + case "$host_os" in + freebsd* | dragonfly* | midnightbsd*) + if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then + dnl If weak symbols can't tell whether pthread_create(), pthread_key_create() + dnl etc. will succeed, we need a runtime test. + AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], + [Define if the pthread_in_use() detection is hard.]) + fi + ;; + esac fi fi fi fi fi - if test -z "$gl_have_pthread"; then - if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then - gl_have_solaristhread= - gl_save_LIBS="$LIBS" - LIBS="$LIBS -lthread" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include <thread.h> -#include <synch.h> - ]], - [[thr_self();]])], - [gl_have_solaristhread=yes]) - LIBS="$gl_save_LIBS" - if test -n "$gl_have_solaristhread"; then - gl_threads_api=solaris - LIBTHREAD=-lthread - LTLIBTHREAD=-lthread - LIBMULTITHREAD="$LIBTHREAD" - LTLIBMULTITHREAD="$LTLIBTHREAD" - AC_DEFINE([USE_SOLARIS_THREADS], [1], - [Define if the old Solaris multithreading library can be used.]) - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then - AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], - [Define if references to the old Solaris multithreading library should be made weak.]) - LIBTHREAD= - LTLIBTHREAD= - fi - fi - fi - fi - if test "$gl_use_threads" = pth; then - gl_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_LINKFLAGS([pth]) - gl_have_pth= - gl_save_LIBS="$LIBS" - LIBS="$LIBS $LIBPTH" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([[#include <pth.h>]], [[pth_self();]])], - [gl_have_pth=yes]) - LIBS="$gl_save_LIBS" - if test -n "$gl_have_pth"; then - gl_threads_api=pth - LIBTHREAD="$LIBPTH" - LTLIBTHREAD="$LTLIBPTH" - LIBMULTITHREAD="$LIBTHREAD" - LTLIBMULTITHREAD="$LTLIBTHREAD" - AC_DEFINE([USE_PTH_THREADS], [1], - [Define if the GNU Pth multithreading library can be used.]) - if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then - AC_DEFINE([USE_PTH_THREADS_WEAK], [1], - [Define if references to the GNU Pth multithreading library should be made weak.]) - LIBTHREAD= - LTLIBTHREAD= - fi - fi - else - CPPFLAGS="$gl_save_CPPFLAGS" + if test $gl_threads_api = none; then + if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then + gl_STDTHREADLIB_BODY + LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD + LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD + gl_threads_api=isoc + AC_DEFINE([USE_ISOC_THREADS], [1], + [Define if the ISO C multithreading library can be used.]) fi fi - if test -z "$gl_have_pthread"; then + if test $gl_threads_api = none; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in @@ -337,6 +594,21 @@ AC_DEFUN([gl_DISABLE_THREADS], [ ]) +dnl gl_AVOID_WINPTHREAD +dnl ------------------- +dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the +dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided. +dnl The user can still override it at installation time, by using the +dnl configure option '--enable-threads'. + +AC_DEFUN([gl_AVOID_WINPTHREAD], [ + m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no]) +]) + + +dnl ============================================================================ + + dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock @@ -344,7 +616,9 @@ dnl flavours option weak result dnl --------------- --------- --------- -------- --------- dnl Linux 2.4/glibc posix -lpthread Y OK dnl -dnl GNU Hurd/glibc posix +dnl Linux/glibc 2.34 posix Y OK +dnl +dnl GNU Hurd/glibc posix -lpthread Y OK dnl dnl Ubuntu 14.04 posix -pthread Y OK dnl @@ -366,7 +640,6 @@ dnl dnl Mac OS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK -dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) @@ -380,8 +653,6 @@ dnl -lpthread (gcc) Y dnl dnl Cygwin posix -lpthread Y OK dnl -dnl Any of the above pth -lpth 0.0 -dnl dnl Mingw windows N OK dnl dnl BeOS 5 -- diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4 index 5db581520..268e3e515 100644 --- a/m4/wchar_t.m4 +++ b/m4/wchar_t.m4 @@ -1,5 +1,5 @@ # wchar_t.m4 serial 4 (gettext-0.18.2) -dnl Copyright (C) 2002-2003, 2008-2019 Free Software Foundation, Inc. +dnl Copyright (C) 2002-2003, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/wint_t.m4 b/m4/wint_t.m4 index 61e8a23d2..adc586614 100644 --- a/m4/wint_t.m4 +++ b/m4/wint_t.m4 @@ -1,5 +1,5 @@ -# wint_t.m4 serial 7 -dnl Copyright (C) 2003, 2007-2019 Free Software Foundation, Inc. +# wint_t.m4 serial 11 +dnl Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -14,15 +14,7 @@ AC_DEFUN([gt_TYPE_WINT_T], AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( - [[ -/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before - <wchar.h>. - BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included - before <wchar.h>. */ -#include <stddef.h> -#include <stdio.h> -#include <time.h> -#include <wchar.h> + [[#include <wchar.h> wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], @@ -32,33 +24,24 @@ AC_DEFUN([gt_TYPE_WINT_T], dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present, dnl override 'wint_t'. - AC_CACHE_CHECK([whether wint_t is too small], - [gl_cv_type_wint_t_too_small], + AC_CACHE_CHECK([whether wint_t is large enough], + [gl_cv_type_wint_t_large_enough], [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ -/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before - <wchar.h>. - BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include <stddef.h> -# include <stdio.h> -# include <time.h> -#endif -#include <wchar.h> + [AC_LANG_PROGRAM( + [[#include <wchar.h> int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; - ]])], - [gl_cv_type_wint_t_too_small=no], - [gl_cv_type_wint_t_too_small=yes])]) - if test $gl_cv_type_wint_t_too_small = yes; then - GNULIB_OVERRIDES_WINT_T=1 + ]])], + [gl_cv_type_wint_t_large_enough=yes], + [gl_cv_type_wint_t_large_enough=no])]) + if test $gl_cv_type_wint_t_large_enough = no; then + GNULIBHEADERS_OVERRIDE_WINT_T=1 else - GNULIB_OVERRIDES_WINT_T=0 + GNULIBHEADERS_OVERRIDE_WINT_T=0 fi else - GNULIB_OVERRIDES_WINT_T=0 + GNULIBHEADERS_OVERRIDE_WINT_T=0 fi - AC_SUBST([GNULIB_OVERRIDES_WINT_T]) + AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T]) ]) dnl Prerequisites of the 'wint_t' override. diff --git a/m4/xsize.m4 b/m4/xsize.m4 index f2898ba1a..0109049e0 100644 --- a/m4/xsize.m4 +++ b/m4/xsize.m4 @@ -1,5 +1,5 @@ # xsize.m4 serial 5 -dnl Copyright (C) 2003-2004, 2008-2019 Free Software Foundation, Inc. +dnl Copyright (C) 2003-2004, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/mailcheck.c b/mailcheck.c index 4a11143cc..6f632d673 100644 --- a/mailcheck.c +++ b/mailcheck.c @@ -1,6 +1,6 @@ /* mailcheck.c -- The check is in the mail... */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -38,12 +38,16 @@ #include "mailcheck.h" #include <tilde/tilde.h> +#if defined (READLINE) +# include <readline/readline.h> +#endif + /* Values for flags word in struct _fileinfo */ #define MBOX_INITIALIZED 0x01 extern time_t shell_start_time; -extern int mailstat PARAMS((const char *, struct stat *)); +extern int mailstat (const char *, struct stat *); typedef struct _fileinfo { char *name; @@ -65,34 +69,38 @@ static time_t last_time_mail_checked = 0; /* Non-zero means warn if a mail file has been read since last checked. */ int mail_warning; +static int find_mail_file (const char *); +static void init_mail_file (int); +static void update_mail_file (int); +static int add_mail_file (char *, const char *); -static int find_mail_file PARAMS((char *)); -static void init_mail_file PARAMS((int)); -static void update_mail_file PARAMS((int)); -static int add_mail_file PARAMS((char *, char *)); +static FILEINFO *alloc_mail_file (char *, const char *); +static void dispose_mail_file (FILEINFO *); -static FILEINFO *alloc_mail_file PARAMS((char *, char *)); -static void dispose_mail_file PARAMS((FILEINFO *)); +static int file_mod_date_changed (int); +static int file_access_date_changed (int); +static int file_has_grown (int); -static int file_mod_date_changed PARAMS((int)); -static int file_access_date_changed PARAMS((int)); -static int file_has_grown PARAMS((int)); - -static char *parse_mailpath_spec PARAMS((char *)); +static char *parse_mailpath_spec (char *); /* Returns non-zero if it is time to check mail. */ int -time_to_check_mail () +time_to_check_mail (void) { char *temp; time_t now; intmax_t seconds; +#if defined (READLINE) + if (RL_ISSTATE (RL_STATE_COMPLETING|RL_STATE_DISPATCHING)) + return (0); +#endif + temp = get_string_value ("MAILCHECK"); /* Negative number, or non-numbers (such as empty string) cause no checking to take place. */ - if (temp == 0 || legal_number (temp, &seconds) == 0 || seconds < 0) + if (temp == 0 || valid_number (temp, &seconds) == 0 || seconds < 0) return (0); now = NOW; @@ -104,7 +112,7 @@ time_to_check_mail () /* Okay, we have checked the mail. Perhaps I should make this function go away. */ void -reset_mail_timer () +reset_mail_timer (void) { last_time_mail_checked = NOW; } @@ -112,8 +120,7 @@ reset_mail_timer () /* Locate a file in the list. Return index of entry, or -1 if not found. */ static int -find_mail_file (file) - char *file; +find_mail_file (const char *file) { register int i; @@ -144,8 +151,7 @@ find_mail_file (file) while (0) static void -init_mail_file (i) - int i; +init_mail_file (int i) { mailfiles[i]->access_time = mailfiles[i]->mod_time = last_time_mail_checked ? last_time_mail_checked : shell_start_time; mailfiles[i]->file_size = 0; @@ -153,8 +159,7 @@ init_mail_file (i) } static void -update_mail_file (i) - int i; +update_mail_file (int i) { char *file; struct stat finfo; @@ -169,8 +174,7 @@ update_mail_file (i) /* Add this file to the list of remembered files and return its index in the list of mail files. */ static int -add_mail_file (file, msg) - char *file, *msg; +add_mail_file (char *file, const char *msg) { struct stat finfo; char *filename; @@ -199,7 +203,7 @@ add_mail_file (file, msg) /* Reset the existing mail files access and modification times to zero. */ void -reset_mail_files () +reset_mail_files (void) { register int i; @@ -208,8 +212,7 @@ reset_mail_files () } static FILEINFO * -alloc_mail_file (filename, msg) - char *filename, *msg; +alloc_mail_file (char *filename, const char *msg) { FILEINFO *mf; @@ -222,8 +225,7 @@ alloc_mail_file (filename, msg) } static void -dispose_mail_file (mf) - FILEINFO *mf; +dispose_mail_file (FILEINFO *mf) { free (mf->name); FREE (mf->msg); @@ -232,7 +234,7 @@ dispose_mail_file (mf) /* Free the information that we have about the remembered mail files. */ void -free_mail_files () +free_mail_files (void) { register int i; @@ -247,7 +249,7 @@ free_mail_files () } void -init_mail_dates () +init_mail_dates (void) { if (mailfiles == 0) remember_mail_dates (); @@ -257,8 +259,7 @@ init_mail_dates () accessed since modified. If the size has dropped to zero, reset the cached mail file info. */ static int -file_mod_date_changed (i) - int i; +file_mod_date_changed (int i) { time_t mtime; struct stat finfo; @@ -281,8 +282,7 @@ file_mod_date_changed (i) /* Return non-zero if FILE's access date has changed. */ static int -file_access_date_changed (i) - int i; +file_access_date_changed (int i) { time_t atime; struct stat finfo; @@ -302,8 +302,7 @@ file_access_date_changed (i) /* Return non-zero if FILE's size has increased. */ static int -file_has_grown (i) - int i; +file_has_grown (int i) { off_t size; struct stat finfo; @@ -319,8 +318,7 @@ file_has_grown (i) the first unquoted `?' or `%' to the end of the string. This is the message to be printed when the file contents change. */ static char * -parse_mailpath_spec (str) - char *str; +parse_mailpath_spec (char *str) { char *s; int pass_next; @@ -344,7 +342,7 @@ parse_mailpath_spec (str) } char * -make_default_mailpath () +make_default_mailpath (void) { #if defined (DEFAULT_MAIL_DIRECTORY) char *mp; @@ -365,7 +363,7 @@ make_default_mailpath () default value, which we randomly concoct from using Unix. */ void -remember_mail_dates () +remember_mail_dates (void) { char *mailpaths; char *mailfile, *mp; @@ -414,15 +412,13 @@ remember_mail_dates () mail file has been accessed since the last time we remembered, then the message "The mail in <mailfile> has been read" is printed. */ void -check_mail () +check_mail (void) { char *current_mail_file, *message; int i, use_user_notification; char *dollar_underscore, *temp; - dollar_underscore = get_string_value ("_"); - if (dollar_underscore) - dollar_underscore = savestring (dollar_underscore); + dollar_underscore = save_lastarg (); for (i = 0; i < mailfiles_count; i++) { @@ -483,7 +479,7 @@ check_mail () if (dollar_underscore) { - bind_variable ("_", dollar_underscore, 0); + bind_lastarg (dollar_underscore); free (dollar_underscore); } else diff --git a/mailcheck.h b/mailcheck.h index e930124c3..a82da7583 100644 --- a/mailcheck.h +++ b/mailcheck.h @@ -1,6 +1,6 @@ /* mailcheck.h -- variables and function declarations for mail checking. */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -22,13 +22,13 @@ #define _MAILCHECK_H_ /* Functions from mailcheck.c */ -extern int time_to_check_mail PARAMS((void)); -extern void reset_mail_timer PARAMS((void)); -extern void reset_mail_files PARAMS((void)); -extern void free_mail_files PARAMS((void)); -extern char *make_default_mailpath PARAMS((void)); -extern void remember_mail_dates PARAMS((void)); -extern void init_mail_dates PARAMS((void)); -extern void check_mail PARAMS((void)); +extern int time_to_check_mail (void); +extern void reset_mail_timer (void); +extern void reset_mail_files (void); +extern void free_mail_files (void); +extern char *make_default_mailpath (void); +extern void remember_mail_dates (void); +extern void init_mail_dates (void); +extern void check_mail (void); #endif /* _MAILCHECK_H */ diff --git a/make_cmd.c b/make_cmd.c index 98151a41a..3830a3b22 100644 --- a/make_cmd.c +++ b/make_cmd.c @@ -1,7 +1,7 @@ /* make_cmd.c -- Functions for making instances of the various parser constructs. */ -/* Copyright (C) 1989-2022 Free Software Foundation, Inc. +/* Copyright (C) 1989-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -55,21 +55,21 @@ sh_obj_cache_t wlcache = {0, 0, 0}; #define WDCACHESIZE 128 #define WLCACHESIZE 128 -static COMMAND *make_for_or_select PARAMS((enum command_type, WORD_DESC *, WORD_LIST *, COMMAND *, int)); +static COMMAND *make_for_or_select (enum command_type, WORD_DESC *, WORD_LIST *, COMMAND *, int); #if defined (ARITH_FOR_COMMAND) -static WORD_LIST *make_arith_for_expr PARAMS((char *)); +static WORD_LIST *make_arith_for_expr (char *); #endif -static COMMAND *make_until_or_while PARAMS((enum command_type, COMMAND *, COMMAND *)); +static COMMAND *make_until_or_while (enum command_type, COMMAND *, COMMAND *); void -cmd_init () +cmd_init (void) { ocache_create (wdcache, WORD_DESC, WDCACHESIZE); ocache_create (wlcache, WORD_LIST, WLCACHESIZE); } WORD_DESC * -alloc_word_desc () +alloc_word_desc (void) { WORD_DESC *temp; @@ -80,8 +80,7 @@ alloc_word_desc () } WORD_DESC * -make_bare_word (string) - const char *string; +make_bare_word (const char *string) { WORD_DESC *temp; @@ -99,9 +98,7 @@ make_bare_word (string) } WORD_DESC * -make_word_flags (w, string) - WORD_DESC *w; - const char *string; +make_word_flags (WORD_DESC *w, const char *string) { register int i; size_t slen; @@ -132,8 +129,7 @@ make_word_flags (w, string) } WORD_DESC * -make_word (string) - const char *string; +make_word (const char *string) { WORD_DESC *temp; @@ -142,8 +138,7 @@ make_word (string) } WORD_DESC * -make_word_from_token (token) - int token; +make_word_from_token (int token) { char tokenizer[2]; @@ -154,9 +149,7 @@ make_word_from_token (token) } WORD_LIST * -make_word_list (word, wlink) - WORD_DESC *word; - WORD_LIST *wlink; +make_word_list (WORD_DESC *word, WORD_LIST *wlink) { WORD_LIST *temp; @@ -168,9 +161,7 @@ make_word_list (word, wlink) } COMMAND * -make_command (type, pointer) - enum command_type type; - SIMPLE_COM *pointer; +make_command (enum command_type type, SIMPLE_COM *pointer) { COMMAND *temp; @@ -183,9 +174,7 @@ make_command (type, pointer) } COMMAND * -command_connect (com1, com2, connector) - COMMAND *com1, *com2; - int connector; +command_connect (COMMAND *com1, COMMAND *com2, int connector) { CONNECTION *temp; @@ -197,12 +186,7 @@ command_connect (com1, com2, connector) } static COMMAND * -make_for_or_select (type, name, map_list, action, lineno) - enum command_type type; - WORD_DESC *name; - WORD_LIST *map_list; - COMMAND *action; - int lineno; +make_for_or_select (enum command_type type, WORD_DESC *name, WORD_LIST *map_list, COMMAND *action, int lineno) { FOR_COM *temp; @@ -216,21 +200,13 @@ make_for_or_select (type, name, map_list, action, lineno) } COMMAND * -make_for_command (name, map_list, action, lineno) - WORD_DESC *name; - WORD_LIST *map_list; - COMMAND *action; - int lineno; +make_for_command (WORD_DESC *name, WORD_LIST *map_list, COMMAND *action, int lineno) { return (make_for_or_select (cm_for, name, map_list, action, lineno)); } COMMAND * -make_select_command (name, map_list, action, lineno) - WORD_DESC *name; - WORD_LIST *map_list; - COMMAND *action; - int lineno; +make_select_command (WORD_DESC *name, WORD_LIST *map_list, COMMAND *action, int lineno) { #if defined (SELECT_COMMAND) return (make_for_or_select (cm_select, name, map_list, action, lineno)); @@ -242,8 +218,7 @@ make_select_command (name, map_list, action, lineno) #if defined (ARITH_FOR_COMMAND) static WORD_LIST * -make_arith_for_expr (s) - char *s; +make_arith_for_expr (char *s) { WORD_LIST *result; WORD_DESC *wd; @@ -262,10 +237,7 @@ make_arith_for_expr (s) because no other function in this file requires that the caller free any arguments. */ COMMAND * -make_arith_for_command (exprs, action, lineno) - WORD_LIST *exprs; - COMMAND *action; - int lineno; +make_arith_for_command (WORD_LIST *exprs, COMMAND *action, int lineno) { #if defined (ARITH_FOR_COMMAND) ARITH_FOR_COM *temp; @@ -340,8 +312,7 @@ make_arith_for_command (exprs, action, lineno) } COMMAND * -make_group_command (command) - COMMAND *command; +make_group_command (COMMAND *command) { GROUP_COM *temp; @@ -351,10 +322,7 @@ make_group_command (command) } COMMAND * -make_case_command (word, clauses, lineno) - WORD_DESC *word; - PATTERN_LIST *clauses; - int lineno; +make_case_command (WORD_DESC *word, PATTERN_LIST *clauses, int lineno) { CASE_COM *temp; @@ -367,9 +335,7 @@ make_case_command (word, clauses, lineno) } PATTERN_LIST * -make_pattern_list (patterns, action) - WORD_LIST *patterns; - COMMAND *action; +make_pattern_list (WORD_LIST *patterns, COMMAND *action) { PATTERN_LIST *temp; @@ -382,8 +348,7 @@ make_pattern_list (patterns, action) } COMMAND * -make_if_command (test, true_case, false_case) - COMMAND *test, *true_case, *false_case; +make_if_command (COMMAND *test, COMMAND *true_case, COMMAND *false_case) { IF_COM *temp; @@ -396,9 +361,7 @@ make_if_command (test, true_case, false_case) } static COMMAND * -make_until_or_while (which, test, action) - enum command_type which; - COMMAND *test, *action; +make_until_or_while (enum command_type which, COMMAND *test, COMMAND *action) { WHILE_COM *temp; @@ -410,22 +373,19 @@ make_until_or_while (which, test, action) } COMMAND * -make_while_command (test, action) - COMMAND *test, *action; +make_while_command (COMMAND *test, COMMAND *action) { return (make_until_or_while (cm_while, test, action)); } COMMAND * -make_until_command (test, action) - COMMAND *test, *action; +make_until_command (COMMAND *test, COMMAND *action) { return (make_until_or_while (cm_until, test, action)); } COMMAND * -make_arith_command (exp) - WORD_LIST *exp; +make_arith_command (WORD_LIST *exp) { #if defined (DPAREN_ARITHMETIC) COMMAND *command; @@ -451,10 +411,7 @@ make_arith_command (exp) #if defined (COND_COMMAND) struct cond_com * -make_cond_node (type, op, left, right) - int type; - WORD_DESC *op; - struct cond_com *left, *right; +make_cond_node (int type, WORD_DESC *op, struct cond_com *left, struct cond_com *right) { COND_COM *temp; @@ -471,8 +428,7 @@ make_cond_node (type, op, left, right) #endif COMMAND * -make_cond_command (cond_node) - COND_COM *cond_node; +make_cond_command (COND_COM *cond_node) { #if defined (COND_COMMAND) COMMAND *command; @@ -493,7 +449,7 @@ make_cond_command (cond_node) } COMMAND * -make_bare_simple_command () +make_bare_simple_command (int line) { COMMAND *command; SIMPLE_COM *temp; @@ -502,7 +458,7 @@ make_bare_simple_command () command->value.Simple = temp = (SIMPLE_COM *)xmalloc (sizeof (SIMPLE_COM)); temp->flags = 0; - temp->line = line_number; + temp->line = line; temp->words = (WORD_LIST *)NULL; temp->redirects = (REDIRECT *)NULL; @@ -516,16 +472,14 @@ make_bare_simple_command () /* Return a command which is the connection of the word or redirection in ELEMENT, and the command * or NULL in COMMAND. */ COMMAND * -make_simple_command (element, command) - ELEMENT element; - COMMAND *command; +make_simple_command (ELEMENT element, COMMAND *command, int line) { /* If we are starting from scratch, then make the initial command structure. Also note that we have to fill in all the slots, since malloc doesn't return zeroed space. */ if (command == 0) { - command = make_bare_simple_command (); + command = make_bare_simple_command (line); parser_state |= PST_REDIRLIST; } @@ -555,13 +509,13 @@ make_simple_command (element, command) the redirectee.word with the new input text. If <<- is on, then remove leading TABS from each line. */ void -make_here_document (temp, lineno) - REDIRECT *temp; - int lineno; +make_here_document (REDIRECT *temp, int lineno) { - int kill_leading, redir_len; + int kill_leading; + size_t redir_len; char *redir_word, *document, *full_line; - int document_index, document_size, delim_unquoted; + int document_index, delim_unquoted; + size_t document_size; if (temp->instruction != r_deblank_reading_until && temp->instruction != r_reading_until) @@ -573,7 +527,8 @@ make_here_document (temp, lineno) kill_leading = temp->instruction == r_deblank_reading_until; full_line = document = (char *)NULL; - document_index = document_size = 0; + document_index = 0; + document_size = 0; delim_unquoted = (temp->redirectee.filename->flags & W_QUOTED) == 0; @@ -614,11 +569,15 @@ make_here_document (temp, lineno) while (full_line = read_secondary_line (delim_unquoted)) { register char *line; - int len; + size_t len; here_doc_first_line = 0; line = full_line; - line_number++; + + /* if read_secondary_line uses shell_getc, that handles incrementing + line_number where necessary. */ + if (heredoc_string == 0) + line_number++; /* If set -v is in effect, echo the line read. read_secondary_line/ read_a_line leaves the newline at the end, so don't print another. */ @@ -683,15 +642,11 @@ document_done: INSTRUCTION is the instruction type, SOURCE is a file descriptor, and DEST is a file descriptor or a WORD_DESC *. */ REDIRECT * -make_redirection (source, instruction, dest_and_filename, flags) - REDIRECTEE source; - enum r_instruction instruction; - REDIRECTEE dest_and_filename; - int flags; +make_redirection (REDIRECTEE source, enum r_instruction instruction, REDIRECTEE dest_and_filename, int flags) { REDIRECT *temp; WORD_DESC *w; - int wlen; + size_t wlen; intmax_t lfd; temp = (REDIRECT *)xmalloc (sizeof (REDIRECT)); @@ -751,7 +706,7 @@ make_redirection (source, instruction, dest_and_filename, flags) if (w->word[wlen] == '-') /* Yuck */ { w->word[wlen] = '\0'; - if (all_digits (w->word) && legal_number (w->word, &lfd) && lfd == (int)lfd) + if (all_digits (w->word) && valid_number (w->word, &lfd) && lfd == (int)lfd) { dispose_word (w); temp->instruction = (instruction == r_duplicating_input_word) ? r_move_input : r_move_output; @@ -772,10 +727,7 @@ make_redirection (source, instruction, dest_and_filename, flags) } COMMAND * -make_function_def (name, command, lineno, lstart) - WORD_DESC *name; - COMMAND *command; - int lineno, lstart; +make_function_def (WORD_DESC *name, COMMAND *command, int lineno, int lstart) { FUNCTION_DEF *temp; #if defined (ARRAY_VARS) @@ -790,7 +742,7 @@ make_function_def (name, command, lineno, lstart) temp->flags = 0; command->line = lstart; - /* Information used primarily for debugging. */ + /* Information used primarily for debugging and error messages. */ temp->source_file = 0; #if defined (ARRAY_VARS) GET_ARRAY_FROM_VAR ("BASH_SOURCE", bash_source_v, bash_source_a); @@ -801,7 +753,16 @@ make_function_def (name, command, lineno, lstart) initialized come from the environment. Otherwise default to "main" (usually functions being defined interactively) */ if (temp->source_file == 0) - temp->source_file = shell_initialized ? "main" : "environment"; + { + if (shell_initialized == 0) + temp->source_file = "environment"; + else if (interactive_shell) + temp->source_file = "main"; + else if (interactive == 0) /* assume -c command */ + temp->source_file = dollar_vars[0]; + else + temp->source_file = shell_name; /* this clause is never hit */ + } #if defined (DEBUGGER) bind_function_def (name->word, temp, 0); @@ -813,8 +774,7 @@ make_function_def (name, command, lineno, lstart) } COMMAND * -make_subshell_command (command) - COMMAND *command; +make_subshell_command (COMMAND *command) { SUBSHELL_COM *temp; @@ -826,9 +786,7 @@ make_subshell_command (command) } COMMAND * -make_coproc_command (name, command) - char *name; - COMMAND *command; +make_coproc_command (char *name, COMMAND *command) { COPROC_COM *temp; @@ -843,8 +801,7 @@ make_coproc_command (name, command) has just been parsed. It seems simpler to do this here the one time then by any other method that I can think of. */ COMMAND * -clean_simple_command (command) - COMMAND *command; +clean_simple_command (COMMAND *command) { if (command->type != cm_simple) command_error ("clean_simple_command", CMDERR_BADTYPE, command->type, 0); @@ -870,9 +827,7 @@ clean_simple_command (command) in the list. This is done only for lists connected by `;'; it makes `;' bind `tighter' than `&'. */ COMMAND * -connect_async_list (command, command2, connector) - COMMAND *command, *command2; - int connector; +connect_async_list (COMMAND *command, COMMAND *command2, int connector) { COMMAND *t, *t1, *t2; diff --git a/make_cmd.h b/make_cmd.h index bf1fb008d..8b1354f60 100644 --- a/make_cmd.h +++ b/make_cmd.h @@ -1,6 +1,6 @@ /* make_cmd.h -- Declarations of functions found in make_cmd.c */ -/* Copyright (C) 1993-2009,2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2009,2020-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -25,48 +25,48 @@ extern int here_doc_first_line; -extern void cmd_init PARAMS((void)); +extern void cmd_init (void); -extern WORD_DESC *alloc_word_desc PARAMS((void)); -extern WORD_DESC *make_bare_word PARAMS((const char *)); -extern WORD_DESC *make_word_flags PARAMS((WORD_DESC *, const char *)); -extern WORD_DESC *make_word PARAMS((const char *)); -extern WORD_DESC *make_word_from_token PARAMS((int)); +extern WORD_DESC *alloc_word_desc (void); +extern WORD_DESC *make_bare_word (const char *); +extern WORD_DESC *make_word_flags (WORD_DESC *, const char *); +extern WORD_DESC *make_word (const char *); +extern WORD_DESC *make_word_from_token (int); -extern WORD_LIST *make_word_list PARAMS((WORD_DESC *, WORD_LIST *)); +extern WORD_LIST *make_word_list (WORD_DESC *, WORD_LIST *); #define add_string_to_list(s, l) make_word_list (make_word(s), (l)) -extern COMMAND *make_command PARAMS((enum command_type, SIMPLE_COM *)); -extern COMMAND *command_connect PARAMS((COMMAND *, COMMAND *, int)); -extern COMMAND *make_for_command PARAMS((WORD_DESC *, WORD_LIST *, COMMAND *, int)); -extern COMMAND *make_group_command PARAMS((COMMAND *)); -extern COMMAND *make_case_command PARAMS((WORD_DESC *, PATTERN_LIST *, int)); -extern PATTERN_LIST *make_pattern_list PARAMS((WORD_LIST *, COMMAND *)); -extern COMMAND *make_if_command PARAMS((COMMAND *, COMMAND *, COMMAND *)); -extern COMMAND *make_while_command PARAMS((COMMAND *, COMMAND *)); -extern COMMAND *make_until_command PARAMS((COMMAND *, COMMAND *)); -extern COMMAND *make_bare_simple_command PARAMS((void)); -extern COMMAND *make_simple_command PARAMS((ELEMENT, COMMAND *)); -extern void make_here_document PARAMS((REDIRECT *, int)); -extern REDIRECT *make_redirection PARAMS((REDIRECTEE, enum r_instruction, REDIRECTEE, int)); -extern COMMAND *make_function_def PARAMS((WORD_DESC *, COMMAND *, int, int)); -extern COMMAND *clean_simple_command PARAMS((COMMAND *)); - -extern COMMAND *make_arith_command PARAMS((WORD_LIST *)); - -extern COMMAND *make_select_command PARAMS((WORD_DESC *, WORD_LIST *, COMMAND *, int)); +extern COMMAND *make_command (enum command_type, SIMPLE_COM *); +extern COMMAND *command_connect (COMMAND *, COMMAND *, int); +extern COMMAND *make_for_command (WORD_DESC *, WORD_LIST *, COMMAND *, int); +extern COMMAND *make_group_command (COMMAND *); +extern COMMAND *make_case_command (WORD_DESC *, PATTERN_LIST *, int); +extern PATTERN_LIST *make_pattern_list (WORD_LIST *, COMMAND *); +extern COMMAND *make_if_command (COMMAND *, COMMAND *, COMMAND *); +extern COMMAND *make_while_command (COMMAND *, COMMAND *); +extern COMMAND *make_until_command (COMMAND *, COMMAND *); +extern COMMAND *make_bare_simple_command (int); +extern COMMAND *make_simple_command (ELEMENT, COMMAND *, int); +extern void make_here_document (REDIRECT *, int); +extern REDIRECT *make_redirection (REDIRECTEE, enum r_instruction, REDIRECTEE, int); +extern COMMAND *make_function_def (WORD_DESC *, COMMAND *, int, int); +extern COMMAND *clean_simple_command (COMMAND *); + +extern COMMAND *make_arith_command (WORD_LIST *); + +extern COMMAND *make_select_command (WORD_DESC *, WORD_LIST *, COMMAND *, int); #if defined (COND_COMMAND) -extern COND_COM *make_cond_node PARAMS((int, WORD_DESC *, COND_COM *, COND_COM *)); -extern COMMAND *make_cond_command PARAMS((COND_COM *)); +extern COND_COM *make_cond_node (int, WORD_DESC *, COND_COM *, COND_COM *); +extern COMMAND *make_cond_command (COND_COM *); #endif -extern COMMAND *make_arith_for_command PARAMS((WORD_LIST *, COMMAND *, int)); +extern COMMAND *make_arith_for_command (WORD_LIST *, COMMAND *, int); -extern COMMAND *make_subshell_command PARAMS((COMMAND *)); -extern COMMAND *make_coproc_command PARAMS((char *, COMMAND *)); +extern COMMAND *make_subshell_command (COMMAND *); +extern COMMAND *make_coproc_command (char *, COMMAND *); -extern COMMAND *connect_async_list PARAMS((COMMAND *, COMMAND *, int)); +extern COMMAND *connect_async_list (COMMAND *, COMMAND *, int); #endif /* !_MAKE_CMD_H */ diff --git a/mksyntax.c b/mksyntax.c index 03856866a..348d632d6 100644 --- a/mksyntax.c +++ b/mksyntax.c @@ -2,7 +2,7 @@ * mksyntax.c - construct shell syntax table for fast char attribute lookup. */ -/* Copyright (C) 2000-2009 Free Software Foundation, Inc. +/* Copyright (C) 2000-2009,2012,2022-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,13 +29,13 @@ #ifdef HAVE_UNISTD_H # include <unistd.h> +#else +extern int optind; +extern char *optarg; #endif #include "syntax.h" -extern int optind; -extern char *optarg; - #ifndef errno extern int errno; #endif @@ -84,7 +84,7 @@ char includes[] = "\ #include \"syntax.h\"\n\n"; static void -usage() +usage(void) { fprintf (stderr, "%s: usage: %s [-d] [-o filename]\n", progname, progname); exit (2); @@ -92,8 +92,7 @@ usage() #ifdef INCLUDE_UNUSED static int -getcflag (s) - char *s; +getcflag (char *s) { int i; @@ -105,8 +104,7 @@ getcflag (s) #endif static char * -cdesc (i) - int i; +cdesc (int i) { static char xbuf[16]; @@ -130,13 +128,8 @@ cdesc (i) switch (i) { -#ifdef __STDC__ case '\a': xbuf[1] = 'a'; break; case '\v': xbuf[1] = 'v'; break; -#else - case '\007': xbuf[1] = 'a'; break; - case 0x0B: xbuf[1] = 'v'; break; -#endif case '\b': xbuf[1] = 'b'; break; case '\f': xbuf[1] = 'f'; break; case '\n': xbuf[1] = 'n'; break; @@ -149,8 +142,7 @@ cdesc (i) } static char * -getcstr (f) - int f; +getcstr (int f) { int i; @@ -161,9 +153,7 @@ getcstr (f) } static void -addcstr (str, flag) - char *str; - int flag; +addcstr (char *str, int flag) { char *s, *fstr; unsigned char uc; @@ -183,9 +173,7 @@ addcstr (str, flag) } static void -addcchar (c, flag) - unsigned char c; - int flag; +addcchar (unsigned char c, int flag) { char *fstr; @@ -198,7 +186,7 @@ addcchar (c, flag) } static void -addblanks () +addblanks (void) { register int i; unsigned char uc; @@ -215,7 +203,7 @@ addblanks () /* load up the correct flag values in lsyntax */ static void -load_lsyntax () +load_lsyntax (void) { /* shell metacharacters */ addcstr (shell_meta_chars, CSHMETA); @@ -252,9 +240,7 @@ load_lsyntax () } static void -dump_lflags (fp, ind) - FILE *fp; - int ind; +dump_lflags (FILE *fp, int ind) { int xflags, first, i; @@ -278,9 +264,7 @@ dump_lflags (fp, ind) } static void -wcomment (fp, i) - FILE *fp; - int i; +wcomment (FILE *fp, int i) { fputs ("\t\t/* ", fp); @@ -290,8 +274,7 @@ wcomment (fp, i) } static void -dump_lsyntax (fp) - FILE *fp; +dump_lsyntax (FILE *fp) { int i; @@ -311,9 +294,7 @@ dump_lsyntax (fp) } int -main(argc, argv) - int argc; - char **argv; +main(int argc, char **argv) { int opt, i; char *filename; @@ -395,8 +376,7 @@ main(argc, argv) #endif char * -strerror (e) - int e; +strerror (int e) { static char emsg[40]; #if defined (HAVE_SYS_ERRLIST) diff --git a/nojobs.c b/nojobs.c index b7504cd80..ad10b0622 100644 --- a/nojobs.c +++ b/nojobs.c @@ -3,7 +3,7 @@ /* This file works under BSD, System V, minix, and Posix systems. It does not implement job control. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -34,9 +34,7 @@ #include <signal.h> #include <errno.h> -#if defined (BUFFERED_INPUT) -# include "input.h" -#endif +#include "input.h" /* Need to include this up here for *_TTY_DRIVER definitions. */ #include "shtty.h" @@ -74,7 +72,7 @@ extern int errno; #endif /* !errno */ -extern void set_original_signal PARAMS((int, SigHandler *)); +extern void set_original_signal (int, SigHandler *); volatile pid_t last_made_pid = NO_PID; volatile pid_t last_asynchronous_pid = NO_PID; @@ -121,36 +119,35 @@ static int wait_sigint_received; static long child_max = -1L; -static void alloc_pid_list PARAMS((void)); -static int find_proc_slot PARAMS((pid_t)); -static int find_index_by_pid PARAMS((pid_t)); -static int find_status_by_pid PARAMS((pid_t)); -static int process_exit_status PARAMS((WAIT)); -static int find_termsig_by_pid PARAMS((pid_t)); -static int get_termsig PARAMS((WAIT)); -static void set_pid_status PARAMS((pid_t, WAIT)); -static void set_pid_flags PARAMS((pid_t, int)); -static void unset_pid_flags PARAMS((pid_t, int)); -static int get_pid_flags PARAMS((pid_t)); -static void add_pid PARAMS((pid_t, int)); -static void mark_dead_jobs_as_notified PARAMS((int)); - -static sighandler wait_sigint_handler PARAMS((int)); -static char *j_strsignal PARAMS((int)); +static void alloc_pid_list (void); +static int find_proc_slot (pid_t); +static int find_index_by_pid (pid_t); +static int find_status_by_pid (pid_t); +static int find_termsig_by_pid (pid_t); +static int get_termsig (WAIT); +static void set_pid_status (pid_t, WAIT); +static void set_pid_flags (pid_t, int); +static void unset_pid_flags (pid_t, int); +static int get_pid_flags (pid_t); +static void add_pid (pid_t, int); +static void mark_dead_jobs_as_notified (int); + +static sighandler wait_sigint_handler (int); +static char *j_strsignal (int); #if defined (HAVE_WAITPID) -static void reap_zombie_children PARAMS((void)); +static void reap_zombie_children (void); #endif #if !defined (HAVE_SIGINTERRUPT) && defined (HAVE_POSIX_SIGNALS) -static int siginterrupt PARAMS((int, int)); +static int siginterrupt (int, int); #endif -static void restore_sigint_handler PARAMS((void)); +static void restore_sigint_handler (void); /* Allocate new, or grow existing PID_LIST. */ static void -alloc_pid_list () +alloc_pid_list (void) { register int i; int old = pid_list_size; @@ -169,8 +166,7 @@ alloc_pid_list () /* Return the offset within the PID_LIST array of an empty slot. This can create new slots if all of the existing slots are taken. */ static int -find_proc_slot (pid) - pid_t pid; +find_proc_slot (pid_t pid) { register int i; @@ -187,8 +183,7 @@ find_proc_slot (pid) /* Return the offset within the PID_LIST array of a slot containing PID, or the value NO_PID if the pid wasn't found. */ static int -find_index_by_pid (pid) - pid_t pid; +find_index_by_pid (pid_t pid) { register int i; @@ -202,8 +197,7 @@ find_index_by_pid (pid) /* Return the status of PID as looked up in the PID_LIST array. A return value of PROC_BAD indicates that PID wasn't found. */ static int -find_status_by_pid (pid) - pid_t pid; +find_status_by_pid (pid_t pid) { int i; @@ -215,9 +209,8 @@ find_status_by_pid (pid) return (pid_list[i].status); } -static int -process_exit_status (status) - WAIT status; +int +process_exit_status (WAIT status) { if (WIFSIGNALED (status)) return (128 + WTERMSIG (status)); @@ -228,8 +221,7 @@ process_exit_status (status) /* Return the status of PID as looked up in the PID_LIST array. A return value of PROC_BAD indicates that PID wasn't found. */ static int -find_termsig_by_pid (pid) - pid_t pid; +find_termsig_by_pid (pid_t pid) { int i; @@ -245,8 +237,7 @@ find_termsig_by_pid (pid) up PID in the pid array and set LAST_COMMAND_EXIT_SIGNAL appropriately depending on its flags and exit status. */ static int -get_termsig (status) - WAIT status; +get_termsig (WAIT status) { if (WIFSTOPPED (status) == 0 && WIFSIGNALED (status)) return (WTERMSIG (status)); @@ -256,9 +247,7 @@ get_termsig (status) /* Give PID the status value STATUS in the PID_LIST array. */ static void -set_pid_status (pid, status) - pid_t pid; - WAIT status; +set_pid_status (pid_t pid, WAIT status) { int slot; @@ -288,9 +277,7 @@ set_pid_status (pid, status) /* Give PID the flags FLAGS in the PID_LIST array. */ static void -set_pid_flags (pid, flags) - pid_t pid; - int flags; +set_pid_flags (pid_t pid, int flags) { int slot; @@ -303,9 +290,7 @@ set_pid_flags (pid, flags) /* Unset FLAGS for PID in the pid list */ static void -unset_pid_flags (pid, flags) - pid_t pid; - int flags; +unset_pid_flags (pid_t pid, int flags) { int slot; @@ -318,8 +303,7 @@ unset_pid_flags (pid, flags) /* Return the flags corresponding to PID in the PID_LIST array. */ static int -get_pid_flags (pid) - pid_t pid; +get_pid_flags (pid_t pid) { int slot; @@ -331,9 +315,7 @@ get_pid_flags (pid) } static void -add_pid (pid, async) - pid_t pid; - int async; +add_pid (pid_t pid, int async) { int slot; @@ -347,8 +329,7 @@ add_pid (pid, async) } static void -mark_dead_jobs_as_notified (force) - int force; +mark_dead_jobs_as_notified (int force) { register int i, ndead; @@ -388,7 +369,7 @@ mark_dead_jobs_as_notified (force) /* Remove all dead, notified jobs from the pid_list. */ int -cleanup_dead_jobs () +cleanup_dead_jobs (void) { register int i; @@ -412,7 +393,7 @@ cleanup_dead_jobs () } void -reap_dead_jobs () +reap_dead_jobs (void) { mark_dead_jobs_as_notified (0); cleanup_dead_jobs (); @@ -420,8 +401,7 @@ reap_dead_jobs () /* Initialize the job control mechanism, and set up the tty stuff. */ int -initialize_job_control (force) - int force; +initialize_job_control (int force) { shell_tty = fileno (stderr); @@ -432,7 +412,7 @@ initialize_job_control (force) /* Setup this shell to handle C-C, etc. */ void -initialize_job_signals () +initialize_job_signals (void) { set_signal_handler (SIGINT, sigint_sighandler); @@ -446,7 +426,7 @@ initialize_job_signals () /* Collect the status of all zombie children so that their system resources can be deallocated. */ static void -reap_zombie_children () +reap_zombie_children (void) { # if defined (WNOHANG) pid_t pid; @@ -469,8 +449,7 @@ reap_zombie_children () #endif static int -siginterrupt (sig, flag) - int sig, flag; +siginterrupt (int sig, int flag) { struct sigaction act; @@ -490,9 +469,7 @@ siginterrupt (sig, flag) anything else with it. ASYNC_P says what to do with the tty. If non-zero, then don't give it away. */ pid_t -make_child (command, flags) - char *command; - int flags; +make_child (char *command, int flags) { pid_t pid; int async_p, forksleep; @@ -505,14 +482,12 @@ make_child (command, flags) async_p = (flags & FORK_ASYNC); start_pipeline (); -#if defined (BUFFERED_INPUT) /* If default_buffered_input is active, we are reading a script. If the command is asynchronous, we have already duplicated /dev/null as fd 0, but have not changed the buffered stream corresponding to the old fd 0. We don't want to sync the stream in this case. */ if (default_buffered_input != -1 && (!async_p || default_buffered_input > 0)) sync_buffered_stream (default_buffered_input); -#endif /* BUFFERED_INPUT */ /* Block SIGTERM here and unblock in child after fork resets the set of pending signals */ @@ -560,9 +535,7 @@ make_child (command, flags) if (pid == 0) { -#if defined (BUFFERED_INPUT) unset_bash_input (0); -#endif /* BUFFERED_INPUT */ CLRINTERRUPT; /* XXX - children have their own interrupt state */ @@ -594,7 +567,7 @@ make_child (command, flags) } void -ignore_tty_job_signals () +ignore_tty_job_signals (void) { #if defined (SIGTSTP) set_signal_handler (SIGTSTP, SIG_IGN); @@ -604,7 +577,7 @@ ignore_tty_job_signals () } void -default_tty_job_signals () +default_tty_job_signals (void) { #if defined (SIGTSTP) if (signal_is_trapped (SIGTSTP) == 0 && signal_is_hard_ignored (SIGTSTP)) @@ -624,7 +597,7 @@ default_tty_job_signals () /* Called once in a parent process. */ void -get_original_tty_job_signals () +get_original_tty_job_signals (void) { static int fetched = 0; @@ -651,9 +624,7 @@ get_original_tty_job_signals () /* Wait for a single pid (PID) and return its exit status. Called by the wait builtin. */ int -wait_for_single_pid (pid, flags) - pid_t pid; - int flags; +wait_for_single_pid (pid_t pid, int flags) { pid_t got_pid; WAIT status; @@ -708,8 +679,7 @@ wait_for_single_pid (pid, flags) /* Wait for all of the shell's children to exit. Called by the `wait' builtin. */ int -wait_for_background_pids (ps) - struct procstat *ps; +wait_for_background_pids (struct procstat *ps) { pid_t got_pid; WAIT status; @@ -757,7 +727,7 @@ wait_for_background_pids (ps) } void -wait_sigint_cleanup () +wait_sigint_cleanup (void) { } @@ -766,7 +736,7 @@ wait_sigint_cleanup () static SigHandler *old_sigint_handler = INVALID_SIGNAL_HANDLER; static void -restore_sigint_handler () +restore_sigint_handler (void) { if (old_sigint_handler != INVALID_SIGNAL_HANDLER) { @@ -779,8 +749,7 @@ restore_sigint_handler () All interrupts are effectively ignored by the shell, but allowed to kill a running job. */ static sighandler -wait_sigint_handler (sig) - int sig; +wait_sigint_handler (int sig) { SigHandler *sigint_handler; @@ -803,8 +772,7 @@ wait_sigint_handler (sig) } static char * -j_strsignal (s) - int s; +j_strsignal (int s) { static char retcode_name_buffer[64] = { '\0' }; char *x; @@ -821,9 +789,7 @@ j_strsignal (s) /* Wait for pid (one of our children) to terminate. This is called only by the execution code in execute_cmd.c. */ int -wait_for (pid, flags) - pid_t pid; - int flags; +wait_for (pid_t pid, int flags) { int return_val, pstatus; pid_t got_pid; @@ -943,9 +909,7 @@ wait_for (pid, flags) /* Send PID SIGNAL. Returns -1 on failure, 0 on success. If GROUP is non-zero, or PID is less than -1, then kill the process group associated with PID. */ int -kill_pid (pid, signal, group) - pid_t pid; - int signal, group; +kill_pid (pid_t pid, int signal, int group) { int result; @@ -963,7 +927,7 @@ static int got_tty_state; /* Fill the contents of shell_tty_info with the current tty info. */ int -get_tty_state () +get_tty_state (void) { int tty; @@ -980,7 +944,7 @@ get_tty_state () /* Make the current tty use the state in shell_tty_info. */ int -set_tty_state () +set_tty_state (void) { int tty; @@ -996,48 +960,41 @@ set_tty_state () /* Give the terminal to PGRP. */ int -give_terminal_to (pgrp, force) - pid_t pgrp; - int force; +give_terminal_to (pid_t pgrp, int force) { return 0; } /* Stop a pipeline. */ int -stop_pipeline (async, ignore) - int async; - COMMAND *ignore; +stop_pipeline (int async, COMMAND *ignore) { already_making_children = 0; return 0; } void -start_pipeline () +start_pipeline (void) { already_making_children = 1; } void -stop_making_children () +stop_making_children (void) { already_making_children = 0; } /* The name is kind of a misnomer, but it's what the job control code uses. */ void -without_job_control () +without_job_control (void) { stop_making_children (); last_made_pid = NO_PID; /* XXX */ } int -get_job_by_pid (pid, block, ignore) - pid_t pid; - int block; - PROCESS **ignore; +get_job_by_pid (pid_t pid, int block, PROCESS **ignore) { int i; @@ -1047,31 +1004,42 @@ get_job_by_pid (pid, block, ignore) /* Print descriptive information about the job with leader pid PID. */ void -describe_pid (pid) - pid_t pid; +describe_pid (pid_t pid) { fprintf (stderr, "%ld\n", (long) pid); } int -freeze_jobs_list () +freeze_jobs_list (void) { return 0; } -void -unfreeze_jobs_list () +int +unfreeze_jobs_list (void) { + return 0; } void -set_jobs_list_frozen (s) - int s; +set_jobs_list_frozen (int s) +{ +} + +int +jobs_list_frozen_status (void) +{ + return 0; +} + +int +count_all_jobs (void) { + return 0; } int -count_all_jobs () +job_control_active_p (void) { return 0; } diff --git a/parse.y b/parse.y index 8fd24a1c7..d129dd284 100644 --- a/parse.y +++ b/parse.y @@ -1,6 +1,6 @@ /* parse.y - Yacc grammar for bash. */ -/* Copyright (C) 1989-2022 Free Software Foundation, Inc. +/* Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -37,6 +37,7 @@ #include <stdio.h> #include "chartypes.h" #include <signal.h> +#include <errno.h> #include "memalloc.h" @@ -71,7 +72,8 @@ #if defined (JOB_CONTROL) # include "jobs.h" #else -extern int cleanup_dead_jobs PARAMS((void)); +extern int cleanup_dead_jobs (void); +extern int count_all_jobs (void); #endif /* JOB_CONTROL */ #if defined (ALIAS) @@ -81,10 +83,10 @@ typedef void *alias_t; #endif /* ALIAS */ #if defined (PROMPT_STRING_DECODE) -# ifndef _MINIX +# if !defined (_MINIX) || !defined (__MVS__) # include <sys/param.h> # endif -# include <time.h> +# include "posixtime.h" # if defined (TM_IN_SYS_TIME) # include <sys/types.h> # include <sys/time.h> @@ -97,6 +99,10 @@ typedef void *alias_t; #define END_ALIAS -2 +#ifndef READERR +# define READERR -2 +#endif + #ifdef DEBUG # define YYDEBUG 1 #else @@ -114,6 +120,7 @@ typedef void *alias_t; # define MBTEST(x) ((x)) #endif +#if defined (HANDLE_MULTIBYTE) #define EXTEND_SHELL_INPUT_LINE_PROPERTY() \ do { \ if (shell_input_line_len + 2 > shell_input_line_propsize) \ @@ -123,6 +130,9 @@ do { \ shell_input_line_propsize); \ } \ } while (0) +#else +#define EXTEND_SHELL_INPUT_LINE_PROPERTY() +#endif #if defined (EXTENDED_GLOB) extern int extended_glob, extglob_flag; @@ -144,87 +154,93 @@ extern int errno; /* **************************************************************** */ #ifdef DEBUG -static void debug_parser PARAMS((int)); +static void debug_parser (int); #endif -static int yy_getc PARAMS((void)); -static int yy_ungetc PARAMS((int)); - -#if defined (READLINE) -static int yy_readline_get PARAMS((void)); -static int yy_readline_unget PARAMS((int)); +#if defined (DEBUG) +static void dump_tflags (int); +static void dump_pflags (int); #endif -static int yy_string_get PARAMS((void)); -static int yy_string_unget PARAMS((int)); -static int yy_stream_get PARAMS((void)); -static int yy_stream_unget PARAMS((int)); - -static int shell_getc PARAMS((int)); -static void shell_ungetc PARAMS((int)); -static void discard_until PARAMS((int)); - -static void push_string PARAMS((char *, int, alias_t *)); -static void pop_string PARAMS((void)); -static void free_string_list PARAMS((void)); - -static char *read_a_line PARAMS((int)); +static int yy_getc (void); +static int yy_ungetc (int); -static int reserved_word_acceptable PARAMS((int)); -static int yylex PARAMS((void)); +#if defined (READLINE) +static int yy_readline_get (void); +static int yy_readline_unget (int); +#endif -static void push_heredoc PARAMS((REDIRECT *)); -static char *mk_alexpansion PARAMS((char *)); -static int alias_expand_token PARAMS((char *)); -static int time_command_acceptable PARAMS((void)); -static int special_case_tokens PARAMS((char *)); -static int read_token PARAMS((int)); -static char *parse_matched_pair PARAMS((int, int, int, int *, int)); -static char *parse_comsub PARAMS((int, int, int, int *, int)); +static int yy_string_get (void); +static int yy_string_unget (int); +static int yy_stream_get (void); +static int yy_stream_unget (int); + +static int shell_getc (int); +static void shell_ungetc (int); +static int discard_until (int); + +static void push_string (char *, int, alias_t *); +static void pop_string (void); +static void free_string_list (void); + +static char *read_a_line (int); + +static int set_word_top (int); +static int reserved_word_acceptable (int); +static int yylex (void); + +static void push_heredoc (REDIRECT *); +static char *mk_alexpansion (const char *); +static int alias_expand_token (const char *); +static int time_command_acceptable (void); +static int special_case_tokens (const char *); +static int read_token (int); +static char *parse_matched_pair (int, int, int, size_t *, int); +static char *parse_comsub (int, int, int, size_t *, int); #if defined (ARRAY_VARS) -static char *parse_compound_assignment PARAMS((int *)); +static char *parse_compound_assignment (size_t *); #endif #if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND) -static int parse_dparen PARAMS((int)); -static int parse_arith_cmd PARAMS((char **, int)); +static int parse_dparen (int); +static int parse_arith_cmd (char **, int); #endif #if defined (COND_COMMAND) -static void cond_error PARAMS((void)); -static COND_COM *cond_expr PARAMS((void)); -static COND_COM *cond_or PARAMS((void)); -static COND_COM *cond_and PARAMS((void)); -static COND_COM *cond_term PARAMS((void)); -static int cond_skip_newlines PARAMS((void)); -static COMMAND *parse_cond_command PARAMS((void)); +static void cond_error (void); +static COND_COM *cond_expr (void); +static COND_COM *cond_or (void); +static COND_COM *cond_and (void); +static COND_COM *cond_term (void); +static int cond_skip_newlines (void); +static COMMAND *parse_cond_command (void); #endif #if defined (ARRAY_VARS) -static int token_is_assignment PARAMS((char *, int)); -static int token_is_ident PARAMS((char *, int)); +static int token_is_assignment (const char *, int); +static int token_is_ident (char *, int); #endif -static int read_token_word PARAMS((int)); -static void discard_parser_constructs PARAMS((int)); +static int read_token_word (int); +static void discard_parser_constructs (int); -static char *error_token_from_token PARAMS((int)); -static char *error_token_from_text PARAMS((void)); -static void print_offending_line PARAMS((void)); -static void report_syntax_error PARAMS((char *)); +static char *error_token_from_token (int); +static char *error_token_from_text (void); +static void print_offending_line (void); +static void report_syntax_error (const char *); -static void handle_eof_input_unit PARAMS((void)); -static void prompt_again PARAMS((int)); +static void handle_eof_input_unit (void); +static void prompt_again (int); #if 0 -static void reset_readline_prompt PARAMS((void)); +static void reset_readline_prompt (void); #endif -static void print_prompt PARAMS((void)); +static void print_prompt (void); #if defined (HANDLE_MULTIBYTE) -static void set_line_mbstate PARAMS((void)); +static void set_line_mbstate (void); static char *shell_input_line_property = NULL; static size_t shell_input_line_propsize = 0; #else # define set_line_mbstate() #endif -extern int yyerror PARAMS((const char *)); +extern int yyerror (const char *); #ifdef DEBUG extern int yydebug; @@ -279,6 +295,9 @@ int parser_state; static REDIRECT *redir_stack[HEREDOC_MAX]; int need_here_doc; +/* Are we reading a here-document from a string? (alias) */ +int heredoc_string; + /* Where shell input comes from. History expansion is performed on each line when the shell is interactive. */ static char *shell_input_line = (char *)NULL; @@ -289,11 +308,21 @@ static size_t shell_input_line_len; /* strlen (shell_input_line) */ /* Either zero or EOF. */ static int shell_input_line_terminator; +/* This implements one-character lookahead/lookbehind across physical input + lines, to avoid something being lost because it's pushed back with + shell_ungetc when we're at the start of a line. */ +static int eol_ungetc_lookahead = 0; + +static int simplecmd_lineno = -1; +static int save_simple_lineno = -1; + /* The line number in a script on which a function definition starts. */ static int function_dstart; +static int save_dstart = -1; /* The line number in a script on which a function body starts. */ static int function_bstart; +static int save_bstart = -1; /* The line number in a script at which an arithmetic for command starts. */ static int arith_for_lineno; @@ -312,13 +341,11 @@ static int token_before_that; /* The token read prior to token_before_that. */ static int two_tokens_ago; -static int global_extglob; - /* The line number in a script where the word in a `case WORD', `select WORD' or `for WORD' begins. This is a nested command maximum, since the array index is decremented after a case, select, or for command is parsed. */ -#define MAX_CASE_NEST 128 -static int word_lineno[MAX_CASE_NEST+1]; +#define MAX_COMPOUND_NEST 256 +static int word_lineno[MAX_COMPOUND_NEST+1]; static int word_top = -1; /* If non-zero, it is the token that we want read_token to return @@ -365,6 +392,8 @@ static FILE *yyerrstream; /* Special; never created by yylex; only set by parse_comsub and xparse_dolparen */ %token DOLPAREN +/* Special; never created by yylex; only set by parse_matched_pair/parse_comsub/xparse_dolparen */ +%token DOLBRACE /* The types that the various syntactical units return. */ @@ -376,14 +405,15 @@ static FILE *yyerrstream; %type <command> cond_command %type <command> arith_for_command %type <command> coproc -%type <command> comsub +%type <command> comsub funsub %type <command> function_def function_body if_command elif_clause subshell %type <redirect> redirection redirection_list %type <element> simple_command_element %type <word_list> word_list pattern %type <pattern> pattern_list case_clause_sequence case_clause %type <number> timespec -%type <number> list_terminator +%type <number> list_terminator simple_list_terminator +%type <number> nullcmd_terminator %start inputunit @@ -408,7 +438,13 @@ inputunit: simple_list simple_list_terminator /* This is special; look at the production and how parse_comsub sets token_to_read */ global_command = $1; - eof_encountered = 0; + YYACCEPT; + } + | funsub + { + /* This is special; look at the production and how + parse_comsub/parse_valsub sets token_to_read */ + global_command = $1; YYACCEPT; } | '\n' @@ -760,7 +796,11 @@ simple_command_element: WORD | ASSIGNMENT_WORD { $$.word = $1; $$.redirect = 0; } | redirection - { $$.redirect = $1; $$.word = 0; } + { + if (simplecmd_lineno == -1) + simplecmd_lineno = line_number; /* XXX */ + $$.redirect = $1; $$.word = 0; + } ; redirection_list: redirection @@ -779,13 +819,13 @@ redirection_list: redirection ; simple_command: simple_command_element - { $$ = make_simple_command ($1, (COMMAND *)NULL); } + { $$ = make_simple_command ($1, (COMMAND *)NULL, simplecmd_lineno); } | simple_command simple_command_element - { $$ = make_simple_command ($2, $1); } + { $$ = make_simple_command ($2, $1, line_number); } ; command: simple_command - { $$ = clean_simple_command ($1); } + { $$ = clean_simple_command ($1); simplecmd_lineno = -1; } | shell_command { $$ = $1; } | shell_command redirection_list @@ -815,9 +855,15 @@ shell_command: for_command | case_command { $$ = $1; } | WHILE compound_list DO compound_list DONE - { $$ = make_while_command ($2, $4); } + { + $$ = make_while_command ($2, $4); + if (word_top >= 0) word_top--; + } | UNTIL compound_list DO compound_list DONE - { $$ = make_until_command ($2, $4); } + { + $$ = make_until_command ($2, $4); + if (word_top >= 0) word_top--; + } | select_command { $$ = $1; } | if_command @@ -837,42 +883,42 @@ shell_command: for_command for_command: FOR WORD newline_list DO compound_list DONE { $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR WORD newline_list '{' compound_list '}' { $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR WORD ';' newline_list DO compound_list DONE { $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR WORD ';' newline_list '{' compound_list '}' { $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE { $$ = make_for_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}' { $$ = make_for_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR WORD newline_list IN list_terminator newline_list DO compound_list DONE { $$ = make_for_command ($2, (WORD_LIST *)NULL, $8, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR WORD newline_list IN list_terminator newline_list '{' compound_list '}' { $$ = make_for_command ($2, (WORD_LIST *)NULL, $8, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } ; @@ -880,95 +926,95 @@ arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_ { $$ = make_arith_for_command ($2, $6, arith_for_lineno); if ($$ == 0) YYERROR; - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR ARITH_FOR_EXPRS list_terminator newline_list '{' compound_list '}' { $$ = make_arith_for_command ($2, $6, arith_for_lineno); if ($$ == 0) YYERROR; - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR ARITH_FOR_EXPRS DO compound_list DONE { $$ = make_arith_for_command ($2, $4, arith_for_lineno); if ($$ == 0) YYERROR; - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | FOR ARITH_FOR_EXPRS '{' compound_list '}' { $$ = make_arith_for_command ($2, $4, arith_for_lineno); if ($$ == 0) YYERROR; - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } ; select_command: SELECT WORD newline_list DO compound_list DONE { $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | SELECT WORD newline_list '{' compound_list '}' { $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | SELECT WORD ';' newline_list DO compound_list DONE { $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | SELECT WORD ';' newline_list '{' compound_list '}' { $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | SELECT WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE { $$ = make_select_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | SELECT WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}' { $$ = make_select_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | SELECT WORD newline_list IN list_terminator newline_list DO compound_list DONE { $$ = make_select_command ($2, (WORD_LIST *)NULL, $8, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | SELECT WORD newline_list IN list_terminator newline_list '{' compound_list '}' { $$ = make_select_command ($2, (WORD_LIST *)NULL, $8, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } ; case_command: CASE WORD newline_list IN newline_list ESAC { $$ = make_case_command ($2, (PATTERN_LIST *)NULL, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | CASE WORD newline_list IN case_clause_sequence newline_list ESAC { $$ = make_case_command ($2, $5, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } | CASE WORD newline_list IN case_clause ESAC { $$ = make_case_command ($2, $5, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } ; function_def: WORD '(' ')' newline_list function_body - { $$ = make_function_def ($1, $5, function_dstart, function_bstart); } + { $$ = make_function_def ($1, $5, function_dstart, function_bstart); function_dstart = save_dstart; simplecmd_lineno = -1; } | FUNCTION WORD '(' ')' newline_list function_body - { $$ = make_function_def ($2, $6, function_dstart, function_bstart); } + { $$ = make_function_def ($2, $6, function_dstart, function_bstart); function_dstart = save_dstart; } | FUNCTION WORD function_body - { $$ = make_function_def ($2, $3, function_dstart, function_bstart); } + { $$ = make_function_def ($2, $3, function_dstart, function_bstart); function_dstart = save_dstart; } | FUNCTION WORD '\n' newline_list function_body - { $$ = make_function_def ($2, $5, function_dstart, function_bstart); } + { $$ = make_function_def ($2, $5, function_dstart, function_bstart); function_dstart = save_dstart; } ; function_body: shell_command @@ -1020,6 +1066,16 @@ comsub: DOLPAREN compound_list ')' $$ = (COMMAND *)NULL; } ; + +funsub: DOLBRACE compound_list '}' + { + $$ = $2; + } + | DOLBRACE newline_list '}' + { + $$ = (COMMAND *)NULL; + } + ; coproc: COPROC shell_command { @@ -1073,11 +1129,20 @@ coproc: COPROC shell_command ; if_command: IF compound_list THEN compound_list FI - { $$ = make_if_command ($2, $4, (COMMAND *)NULL); } + { + $$ = make_if_command ($2, $4, (COMMAND *)NULL); + if (word_top >= 0) word_top--; + } | IF compound_list THEN compound_list ELSE compound_list FI - { $$ = make_if_command ($2, $4, $6); } + { + $$ = make_if_command ($2, $4, $6); + if (word_top >= 0) word_top--; + } | IF compound_list THEN compound_list elif_clause FI - { $$ = make_if_command ($2, $4, $5); } + { + $$ = make_if_command ($2, $4, $5); + if (word_top >= 0) word_top--; + } ; @@ -1190,7 +1255,9 @@ list1: list1 AND_AND newline_list list1 ; simple_list_terminator: '\n' + { $$ = '\n'; } | yacc_EOF + { $$ = yacc_EOF; } ; list_terminator:'\n' @@ -1201,6 +1268,12 @@ list_terminator:'\n' { $$ = yacc_EOF; } ; +nullcmd_terminator: list_terminator + { $$ = $1; } + | '&' + { $$ = '&'; } + ; + newline_list: | newline_list '\n' ; @@ -1293,45 +1366,51 @@ pipeline_command: pipeline $2->flags |= $1; $$ = $2; } - | timespec list_terminator + | timespec nullcmd_terminator { ELEMENT x; + /* POSIX interp 267 */ /* Boy, this is unclean. `time' by itself can time a null command. We cheat and push a - newline back if the list_terminator was a newline - to avoid the double-newline problem (one to - terminate this, one to terminate the command) */ + newline back if the nullcmd_terminator was a + newline to avoid the double-newline problem (one + to terminate this, one to terminate the command) */ x.word = 0; x.redirect = 0; - $$ = make_simple_command (x, (COMMAND *)NULL); + $$ = make_simple_command (x, (COMMAND *)NULL, line_number); $$->flags |= $1; /* XXX - let's cheat and push a newline back */ if ($2 == '\n') token_to_read = '\n'; else if ($2 == ';') token_to_read = ';'; + else if ($2 == '&') + token_to_read = '&'; parser_state &= ~PST_REDIRLIST; /* make_simple_command sets this */ } - | BANG list_terminator + | BANG nullcmd_terminator { ELEMENT x; + /* POSIX interp 267 */ /* This is just as unclean. Posix says that `!' by itself should be equivalent to `false'. - We cheat and push a - newline back if the list_terminator was a newline - to avoid the double-newline problem (one to - terminate this, one to terminate the command) */ + We cheat and push a newline back if the + nullcmd_terminator was a newline to avoid the + double-newline problem (one to terminate this, + one to terminate the command) */ x.word = 0; x.redirect = 0; - $$ = make_simple_command (x, (COMMAND *)NULL); + $$ = make_simple_command (x, (COMMAND *)NULL, line_number); $$->flags |= CMD_INVERT_RETURN; /* XXX - let's cheat and push a newline back */ if ($2 == '\n') token_to_read = '\n'; - if ($2 == ';') + else if ($2 == ';') token_to_read = ';'; + else if ($2 == '&') + token_to_read = '&'; parser_state &= ~PST_REDIRLIST; /* make_simple_command sets this */ } ; @@ -1391,13 +1470,18 @@ timespec: TIME # define expanding_alias() 0 #endif +#if defined (DPAREN_ARITHMETIC) +# define parsing_dparen() (pushed_string_list && (pushed_string_list->flags & PSH_DPAREN)) +#else +# define parsing_dparen() 0 +#endif + /* Global var is non-zero when end of file has been reached. */ int EOF_Reached = 0; #ifdef DEBUG static void -debug_parser (i) - int i; +debug_parser (int i) { #if YYDEBUG != 0 yydebug = i; @@ -1417,7 +1501,7 @@ debug_parser (i) /* Unconditionally returns end-of-file. */ int -return_EOF () +return_EOF (void) { return (EOF); } @@ -1429,7 +1513,7 @@ BASH_INPUT bash_input; /* Set all of the fields in BASH_INPUT to NULL. Free bash_input.name if it is non-null, avoiding a memory leak. */ void -initialize_bash_input () +initialize_bash_input (void) { bash_input.type = st_none; FREE (bash_input.name); @@ -1443,12 +1527,7 @@ initialize_bash_input () /* Set the contents of the current bash input stream from GET, UNGET, TYPE, NAME, and LOCATION. */ void -init_yy_io (get, unget, type, name, location) - sh_cget_func_t *get; - sh_cunget_func_t *unget; - enum stream_type type; - const char *name; - INPUT_STREAM location; +init_yy_io (sh_cget_func_t *get, sh_cunget_func_t *unget, enum stream_type type, const char *name, INPUT_STREAM location) { bash_input.type = type; FREE (bash_input.name); @@ -1465,31 +1544,36 @@ init_yy_io (get, unget, type, name, location) } char * -yy_input_name () +yy_input_name (void) { return (bash_input.name ? bash_input.name : "stdin"); } /* Call this to get the next character of input. */ static int -yy_getc () +yy_getc (void) { +#ifndef __MSYS__ return (*(bash_input.getter)) (); +#else + int c; + /* skip \r entirely on MSYS */ + while ((c = (*(bash_input.getter)) ()) == '\r'); + return c; +#endif } /* Call this to unget C. That is, to make C the next character to be read. */ static int -yy_ungetc (c) - int c; +yy_ungetc (int c) { return (*(bash_input.ungetter)) (c); } -#if defined (BUFFERED_INPUT) #ifdef INCLUDE_UNUSED int -input_file_descriptor () +input_file_descriptor (void) { switch (bash_input.type) { @@ -1503,7 +1587,6 @@ input_file_descriptor () } } #endif -#endif /* BUFFERED_INPUT */ /* **************************************************************** */ /* */ @@ -1517,10 +1600,10 @@ char *current_readline_line = (char *)NULL; int current_readline_line_index = 0; static int -yy_readline_get () +yy_readline_get (void) { SigHandler *old_sigint; - int line_len; + size_t line_len; unsigned char c; if (current_readline_line == 0) @@ -1580,8 +1663,7 @@ yy_readline_get () } static int -yy_readline_unget (c) - int c; +yy_readline_unget (int c) { if (current_readline_line_index && current_readline_line) current_readline_line[--current_readline_line_index] = c; @@ -1589,7 +1671,7 @@ yy_readline_unget (c) } void -with_input_from_stdin () +with_input_from_stdin (void) { INPUT_STREAM location; @@ -1606,7 +1688,7 @@ with_input_from_stdin () embed a newline in the middle of the line it collects, which the parser will interpret as a line break and command delimiter. */ int -parser_will_prompt () +parser_will_prompt (void) { return (current_readline_line == 0 || current_readline_line[current_readline_line_index] == 0); } @@ -1614,7 +1696,7 @@ parser_will_prompt () #else /* !READLINE */ void -with_input_from_stdin () +with_input_from_stdin (void) { with_input_from_stream (stdin, "stdin"); } @@ -1627,10 +1709,10 @@ with_input_from_stdin () /* **************************************************************** */ static int -yy_string_get () +yy_string_get (void) { - register char *string; - register unsigned char c; + char *string; + unsigned char c; string = bash_input.location.string; @@ -1646,17 +1728,17 @@ yy_string_get () } static int -yy_string_unget (c) - int c; +yy_string_unget (int c) { + if (c == EOF && *bash_input.location.string == '\0') + return EOF; + *(--bash_input.location.string) = c; return (c); } void -with_input_from_string (string, name) - char *string; - const char *name; +with_input_from_string (char *string, const char *name) { INPUT_STREAM location; @@ -1670,7 +1752,7 @@ with_input_from_string (string, name) that number of characters, so it points to the last character actually consumed by the parser. */ void -rewind_input_string () +rewind_input_string (void) { int xchars; @@ -1704,7 +1786,7 @@ rewind_input_string () We will need to restart it ourselves. */ static int -yy_stream_get () +yy_stream_get (void) { int result; @@ -1719,16 +1801,13 @@ yy_stream_get () } static int -yy_stream_unget (c) - int c; +yy_stream_unget (int c) { return (ungetc_with_restart (c, bash_input.location.file)); } void -with_input_from_stream (stream, name) - FILE *stream; - const char *name; +with_input_from_stream (FILE *stream, const char *name) { INPUT_STREAM location; @@ -1740,9 +1819,7 @@ typedef struct stream_saver { struct stream_saver *next; BASH_INPUT bash_input; int line; -#if defined (BUFFERED_INPUT) BUFFERED_STREAM *bstream; -#endif /* BUFFERED_INPUT */ } STREAM_SAVER; /* The globally known line number. */ @@ -1759,20 +1836,17 @@ static int cond_token; STREAM_SAVER *stream_list = (STREAM_SAVER *)NULL; void -push_stream (reset_lineno) - int reset_lineno; +push_stream (int reset_lineno) { STREAM_SAVER *saver = (STREAM_SAVER *)xmalloc (sizeof (STREAM_SAVER)); xbcopy ((char *)&bash_input, (char *)&(saver->bash_input), sizeof (BASH_INPUT)); -#if defined (BUFFERED_INPUT) saver->bstream = (BUFFERED_STREAM *)NULL; /* If we have a buffered stream, clear out buffers[fd]. */ if (bash_input.type == st_bstream && bash_input.location.buffered_fd >= 0) saver->bstream = set_buffered_stream (bash_input.location.buffered_fd, (BUFFERED_STREAM *)NULL); -#endif /* BUFFERED_INPUT */ saver->line = line_number; bash_input.name = (char *)NULL; @@ -1784,7 +1858,7 @@ push_stream (reset_lineno) } void -pop_stream () +pop_stream (void) { if (!stream_list) EOF_Reached = 1; @@ -1801,7 +1875,6 @@ pop_stream () saver->bash_input.name, saver->bash_input.location); -#if defined (BUFFERED_INPUT) /* If we have a buffered stream, restore buffers[fd]. */ /* If the input file descriptor was changed while this was on the save stack, update the buffered fd to the new file descriptor and @@ -1821,7 +1894,6 @@ pop_stream () /* XXX could free buffered stream returned as result here. */ set_buffered_stream (bash_input.location.buffered_fd, saver->bstream); } -#endif /* BUFFERED_INPUT */ line_number = saver->line; @@ -1832,8 +1904,7 @@ pop_stream () /* Return 1 if a stream of type TYPE is saved on the stack. */ int -stream_on_stack (type) - enum stream_type type; +stream_on_stack (enum stream_type type) { register STREAM_SAVER *s; @@ -1845,21 +1916,21 @@ stream_on_stack (type) /* Save the current token state and return it in a malloced array. */ int * -save_token_state () +save_token_state (void) { int *ret; - ret = (int *)xmalloc (4 * sizeof (int)); + ret = (int *)xmalloc (5 * sizeof (int)); ret[0] = last_read_token; ret[1] = token_before_that; ret[2] = two_tokens_ago; ret[3] = current_token; + ret[4] = token_to_read; return ret; } void -restore_token_state (ts) - int *ts; +restore_token_state (int *ts) { if (ts == 0) return; @@ -1867,6 +1938,7 @@ restore_token_state (ts) token_before_that = ts[1]; two_tokens_ago = ts[2]; current_token = ts[3]; + token_to_read = ts[4]; } /* @@ -1917,10 +1989,7 @@ STRING_SAVER *pushed_string_list = (STRING_SAVER *)NULL; * into S; it is saved and used to prevent infinite recursive expansion. */ static void -push_string (s, expand, ap) - char *s; - int expand; - alias_t *ap; +push_string (char *s, int expand, alias_t *ap) { STRING_SAVER *temp = (STRING_SAVER *)xmalloc (sizeof (STRING_SAVER)); @@ -1948,9 +2017,6 @@ push_string (s, expand, ap) shell_input_line_size = shell_input_line_len = STRLEN (s); shell_input_line_index = 0; shell_input_line_terminator = '\0'; -#if 0 - parser_state &= ~PST_ALEXPNEXT; /* XXX */ -#endif set_line_mbstate (); } @@ -1962,7 +2028,7 @@ push_string (s, expand, ap) * and needs to return to the original input line. */ static void -pop_string () +pop_string (void) { STRING_SAVER *t; @@ -1976,8 +2042,6 @@ pop_string () #if defined (ALIAS) if (pushed_string_list->expand_alias) parser_state |= PST_ALEXPNEXT; - else - parser_state &= ~PST_ALEXPNEXT; #endif t = pushed_string_list; @@ -1994,7 +2058,7 @@ pop_string () } static void -free_string_list () +free_string_list (void) { register STRING_SAVER *t, *t1; @@ -2013,7 +2077,7 @@ free_string_list () } void -free_pushed_string_input () +free_pushed_string_input (void) { #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) free_string_list (); @@ -2021,13 +2085,13 @@ free_pushed_string_input () } int -parser_expanding_alias () +parser_expanding_alias (void) { return (expanding_alias ()); } void -parser_save_alias () +parser_save_alias (void) { #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) push_string ((char *)NULL, 0, (alias_t *)NULL); @@ -2038,7 +2102,7 @@ parser_save_alias () } void -parser_restore_alias () +parser_restore_alias (void) { #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) if (pushed_string_list) @@ -2052,8 +2116,7 @@ parser_restore_alias () /* Before freeing AP, make sure that there aren't any cases of pointer aliasing that could cause us to reference freed memory later on. */ void -clear_string_list_expander (ap) - alias_t *ap; +clear_string_list_expander (alias_t *ap) { register STRING_SAVER *t; @@ -2066,7 +2129,7 @@ clear_string_list_expander (ap) #endif void -clear_shell_input_line () +clear_shell_input_line (void) { if (shell_input_line) shell_input_line[shell_input_line_index = 0] = '\0'; @@ -2077,11 +2140,10 @@ clear_shell_input_line () is non-zero, we remove unquoted \<newline> pairs. This is used by read_secondary_line to read here documents. */ static char * -read_a_line (remove_quoted_newline) - int remove_quoted_newline; +read_a_line (int remove_quoted_newline) { static char *line_buffer = (char *)NULL; - static int buffer_size = 0; + static size_t buffer_size = 0; int indx, c, peekc, pass_next; #if defined (READLINE) @@ -2097,7 +2159,8 @@ read_a_line (remove_quoted_newline) /* Allow immediate exit if interrupted during input. */ QUIT; - c = yy_getc (); + /* If we're reading the here-document from an alias, use shell_getc */ + c = heredoc_string ? shell_getc (0) : yy_getc (); /* Ignore null bytes in input. */ if (c == 0) @@ -2109,7 +2172,13 @@ read_a_line (remove_quoted_newline) if (interactive && bash_input.type == st_stream) clearerr (stdin); if (indx == 0) - return ((char *)NULL); + { + /* if we use shell_getc, that increments line_number on eof */ + if (heredoc_string) + line_number--; + + return ((char *)NULL); + } c = '\n'; } @@ -2131,15 +2200,36 @@ read_a_line (remove_quoted_newline) else if (c == '\\' && remove_quoted_newline) { QUIT; - peekc = yy_getc (); + /* If we're reading the here-document from an alias, use shell_getc */ + peekc = heredoc_string ? shell_getc (0) : yy_getc (); if (peekc == '\n') { - line_number++; + if (heredoc_string == 0) + line_number++; continue; /* Make the unquoted \<newline> pair disappear. */ } + else if (peekc == EOF) + { + /* Don't push EOF back. */ +#if 1 + /* Leave this in for now, relies on how the expansion code + treats an unescaped backslash at the end of a word. */ + RESIZE_MALLOCED_BUFFER (line_buffer, indx, 2, buffer_size, 128); + if (expanding_alias() == 0 && + (bash_input.type == st_string || bash_input.type == st_bstream || + (interactive == 0 && bash_input.type == st_stream))) + line_buffer[indx++] = '\\'; /* like below in shell_getc */ +#endif + line_buffer[indx++] = c; + c = '\n'; /* force break below */ + } else { - yy_ungetc (peekc); + if (heredoc_string) + shell_ungetc (peekc); + else + yy_ungetc (peekc); + pass_next = 1; line_buffer[indx++] = c; /* Preserve the backslash. */ } @@ -2168,11 +2258,9 @@ read_a_line (remove_quoted_newline) newlines quoted with backslashes while reading the line. It is non-zero unless the delimiter of the here document was quoted. */ char * -read_secondary_line (remove_quoted_newline) - int remove_quoted_newline; +read_secondary_line (int remove_quoted_newline) { char *ret; - int n, c; prompt_string_pointer = &ps2_prompt; if (SHOULD_PROMPT ()) @@ -2316,29 +2404,19 @@ static struct dstack temp_dstack = { (char *)NULL, 0, 0 }; read the next line. This is called by read_token when the shell is processing normal command input. */ -/* This implements one-character lookahead/lookbehind across physical input - lines, to avoid something being lost because it's pushed back with - shell_ungetc when we're at the start of a line. */ -static int eol_ungetc_lookahead = 0; - static int unquoted_backslash = 0; static int -shell_getc (remove_quoted_newline) - int remove_quoted_newline; +shell_getc (int remove_quoted_newline) { - register int i; + int i; int c, truncating, last_was_backslash; unsigned char uc; QUIT; last_was_backslash = 0; - if (sigwinch_received) - { - sigwinch_received = 0; - get_new_window_size (0, (int *)0, (int *)0); - } + CHECK_WINCH; if (eol_ungetc_lookahead) { @@ -2450,14 +2528,32 @@ shell_getc (remove_quoted_newline) else RESIZE_MALLOCED_BUFFER (shell_input_line, i, 2, shell_input_line_size, 256); +#ifdef __MSYS__ + if (c == '\r') + continue; +#endif + if (c == EOF) { - if (bash_input.type == st_stream) + if (interactive && bash_input.type == st_stream) clearerr (stdin); if (i == 0) shell_input_line_terminator = EOF; + if (bash_input.type == st_bstream && fd_berror (default_buffered_input)) + shell_input_line_terminator = READERR; + else if (interactive_shell == 0 && bash_input.type == st_stream && ferror (stdin)) + shell_input_line_terminator = READERR; + + /* We want to make read errors cancel execution of any partial + line, so we set i = 0 if shell_input_line_terminator == READERR. */ + /* XXX TAG: bash-5.3 austingroup interp 1629 */ +#if defined (FATAL_READERROR) + if (shell_input_line_terminator == READERR) + i = 0; /* no-op for now */ +#endif + shell_input_line[i] = '\0'; break; } @@ -2549,7 +2645,8 @@ shell_getc (remove_quoted_newline) reason for the test against shell_eof_token, which is set to a right paren when parsing the contents of command substitutions. */ if (echo_input_at_read && (shell_input_line[0] || - shell_input_line_terminator != EOF) && + (shell_input_line_terminator != EOF && + shell_input_line_terminator != READERR)) && shell_eof_token == 0) fprintf (stderr, "%s\n", shell_input_line); } @@ -2564,9 +2661,9 @@ shell_getc (remove_quoted_newline) /* Add the newline to the end of this string, iff the string does not already end in an EOF character. */ - if (shell_input_line_terminator != EOF) + if (shell_input_line_terminator != EOF && shell_input_line_terminator != READERR) { - if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) + if (shell_input_line_size + 3 < SIZE_MAX && (shell_input_line_len+3 > shell_input_line_size)) shell_input_line = (char *)xrealloc (shell_input_line, 1 + (shell_input_line_size += 2)); @@ -2576,6 +2673,10 @@ shell_getc (remove_quoted_newline) word expansion). */ if (bash_input.type == st_string && expanding_alias() == 0 && last_was_backslash && c == EOF && remove_quoted_newline) shell_input_line[shell_input_line_len] = '\\'; + else if (bash_input.type == st_bstream && expanding_alias() == 0 && last_was_backslash && c == EOF && remove_quoted_newline) + shell_input_line[shell_input_line_len] = '\\'; + else if (interactive == 0 && bash_input.type == st_stream && expanding_alias() == 0 && last_was_backslash && c == EOF && remove_quoted_newline) + shell_input_line[shell_input_line_len] = '\\'; else shell_input_line[shell_input_line_len] = '\n'; shell_input_line[shell_input_line_len + 1] = '\0'; @@ -2624,12 +2725,13 @@ next_alias_char: return the space that will delimit the token and postpone the pop_string. This set of conditions duplicates what used to be in mk_alexpansion () below, with the addition that we don't add a space if we're currently - reading a quoted string or in a shell comment. */ + reading a quoted string or in a shell comment or here-document. */ #ifndef OLD_ALIAS_HACK if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE && pushed_string_list->flags != PSH_DPAREN && (parser_state & PST_COMMENT) == 0 && (parser_state & PST_ENDALIAS) == 0 && /* only once */ + heredoc_string == 0 && shell_input_line_index > 0 && shellblank (shell_input_line[shell_input_line_index-1]) == 0 && shell_input_line[shell_input_line_index-1] != '\n' && @@ -2640,6 +2742,7 @@ next_alias_char: parser_state |= PST_ENDALIAS; /* We need to do this to make sure last_shell_getc_is_singlebyte returns true, since we are returning a single-byte space. */ +#if defined (HANDLE_MULTIBYTE) if (shell_input_line_index == shell_input_line_len && last_shell_getc_is_singlebyte == 0) { #if 0 @@ -2653,6 +2756,7 @@ next_alias_char: shell_input_line_property[shell_input_line_index - 1] = 1; #endif } +#endif return ' '; /* END_ALIAS */ } #endif @@ -2700,6 +2804,16 @@ pop_alias: if (uc == 0 && shell_input_line_terminator == EOF) return ((shell_input_line_index != 0) ? '\n' : EOF); + else if (uc == 0 && shell_input_line_terminator == READERR) + { +#if defined (FATAL_READERROR) + report_error (_("script file read error: %s"), strerror (errno)); + exit_shell (128); /* POSIX mandated error status */ +#else + /* Treat read errors like EOF here. */ + return ((shell_input_line_index != 0) ? '\n' : EOF); +#endif + } #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) /* We already know that we are not parsing an alias expansion because of the @@ -2732,8 +2846,7 @@ pop_alias: to change when manipulating shell_input_line. The define for last_shell_getc_is_singlebyte should take care of it, though. */ static void -shell_ungetc (c) - int c; +shell_ungetc (int c) { if (shell_input_line && shell_input_line_index) shell_input_line[--shell_input_line_index] = c; @@ -2743,8 +2856,7 @@ shell_ungetc (c) /* Push S back into shell_input_line; updating shell_input_line_index */ void -shell_ungets (s) - char *s; +shell_ungets (char *s) { size_t slen, chars_left; @@ -2796,7 +2908,7 @@ shell_ungets (s) } char * -parser_remaining_input () +parser_remaining_input (void) { if (shell_input_line == 0) return 0; @@ -2808,7 +2920,7 @@ parser_remaining_input () #ifdef INCLUDE_UNUSED /* Back the input pointer up by one, effectively `ungetting' a character. */ static void -shell_ungetchar () +shell_ungetchar (void) { if (shell_input_line && shell_input_line_index) shell_input_line_index--; @@ -2817,9 +2929,8 @@ shell_ungetchar () /* Discard input until CHARACTER is seen, then push that character back onto the input stream. */ -static void -discard_until (character) - int character; +static int +discard_until (int character) { int c; @@ -2828,24 +2939,22 @@ discard_until (character) if (c != EOF) shell_ungetc (c); + return (c); } void -execute_variable_command (command, vname) - char *command, *vname; +execute_variable_command (const char *command, const char *vname) { char *last_lastarg; sh_parser_state_t ps; save_parser_state (&ps); - last_lastarg = get_string_value ("_"); - if (last_lastarg) - last_lastarg = savestring (last_lastarg); + last_lastarg = save_lastarg (); parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE); restore_parser_state (&ps); - bind_variable ("_", last_lastarg, 0); + bind_lastarg (last_lastarg); FREE (last_lastarg); if (token_to_read == '\n') /* reset_parser was called */ @@ -2853,8 +2962,7 @@ execute_variable_command (command, vname) } void -push_token (x) - int x; +push_token (int x) { two_tokens_ago = token_before_that; token_before_that = last_read_token; @@ -2879,7 +2987,7 @@ static size_t token_buffer_size; /* Function for yyparse to call. yylex keeps track of the last two tokens read, and calls read_token. */ static int -yylex () +yylex (void) { if (interactive && (current_token == 0 || current_token == '\n')) { @@ -2929,8 +3037,7 @@ static int esacs_needed_count; static int expecting_in_token; static void -push_heredoc (r) - REDIRECT *r; +push_heredoc (REDIRECT *r) { if (need_here_doc >= HEREDOC_MAX) { @@ -2944,7 +3051,7 @@ push_heredoc (r) } void -gather_here_documents () +gather_here_documents (void) { int r; @@ -2953,6 +3060,7 @@ gather_here_documents () while (need_here_doc > 0) { parser_state |= PST_HEREDOC; + heredoc_string = expanding_alias () && (shell_input_line_index < shell_input_line_len); make_here_document (redir_stack[r++], line_number); parser_state &= ~PST_HEREDOC; need_here_doc--; @@ -3021,6 +3129,12 @@ static int open_brace_count; open_brace_count++; \ else if (word_token_alist[i].token == '}' && open_brace_count) \ open_brace_count--; \ +\ + if (last_read_token == IF || last_read_token == WHILE || last_read_token == UNTIL) \ + set_word_top (last_read_token); \ +\ + if (posixly_correct) \ + parser_state &= ~PST_ALEXPNEXT; \ return (word_token_alist[i].token); \ } \ } \ @@ -3042,10 +3156,9 @@ static int open_brace_count; In a pattern list in a case statement (parser_state & PST_CASEPAT). */ static char * -mk_alexpansion (s) - char *s; +mk_alexpansion (const char *s) { - int l; + size_t l; char *r; l = strlen (s); @@ -3065,18 +3178,12 @@ mk_alexpansion (s) } static int -alias_expand_token (tokstr) - char *tokstr; +alias_expand_token (const char *tokstr) { char *expanded; alias_t *ap; -#if 0 - if (((parser_state & PST_ALEXPNEXT) || command_token_position (last_read_token)) && - (parser_state & PST_CASEPAT) == 0) -#else if ((parser_state & PST_ALEXPNEXT) || assignment_acceptable (last_read_token)) -#endif { ap = find_alias (tokstr); @@ -3108,7 +3215,7 @@ alias_expand_token (tokstr) #endif /* ALIAS */ static int -time_command_acceptable () +time_command_acceptable (void) { #if defined (COMMAND_TIMING) int i; @@ -3151,6 +3258,7 @@ time_command_acceptable () case TIMEOPT: /* time -p time pipeline */ case TIMEIGN: /* time -p -- ... */ case DOLPAREN: + case DOLBRACE: return 1; default: return 0; @@ -3187,8 +3295,7 @@ time_command_acceptable () */ static int -special_case_tokens (tokstr) - char *tokstr; +special_case_tokens (const char *tokstr) { /* Posix grammar rule 6 */ if ((last_read_token == WORD) && @@ -3312,7 +3419,7 @@ special_case_tokens (tokstr) /* Called from shell.c when Control-C is typed at top level. Or by the error rule at top level. */ void -reset_parser () +reset_parser (void) { dstack.delimiter_depth = 0; /* No delimiters found so far. */ open_brace_count = 0; @@ -3351,23 +3458,30 @@ reset_parser () redir_stack[0] = 0; esacs_needed_count = expecting_in_token = 0; + simplecmd_lineno = line_number; + current_token = '\n'; /* XXX */ last_read_token = '\n'; token_to_read = '\n'; } void -reset_readahead_token () +reset_readahead_token (void) { if (token_to_read == '\n') token_to_read = 0; } +void +unset_readahead_token (void) +{ + token_to_read = 0; +} + /* Read the next token. Command can be READ (normal operation) or RESET (to normalize state). */ static int -read_token (command) - int command; +read_token (int command) { int character; /* Current character. */ int peek_char; /* Temporary look-ahead character. */ @@ -3388,12 +3502,14 @@ read_token (command) word_desc_to_read = (WORD_DESC *)NULL; } token_to_read = 0; + /* XXX - PST_ALEXPNEXT? */ return (result); } #if defined (COND_COMMAND) if ((parser_state & (PST_CONDCMD|PST_CONDEXPR)) == PST_CONDCMD) { + parser_state &= ~PST_CMDBLTIN; cond_lineno = line_number; parser_state |= PST_CONDEXPR; yylval.command = parse_cond_command (); @@ -3437,7 +3553,13 @@ read_token (command) { /* A comment. Discard until EOL or EOF, and then return a newline. */ parser_state |= PST_COMMENT; - discard_until ('\n'); + character = discard_until ('\n'); + if (character == EOF) + { + parser_state &= ~PST_COMMENT; + EOF_Reached = 1; + return (yacc_EOF); /* XXX */ + } shell_getc (0); parser_state &= ~PST_COMMENT; character = '\n'; /* this will take the next if statement and return. */ @@ -3455,6 +3577,10 @@ read_token (command) #endif /* ALIAS */ parser_state &= ~PST_ASSIGNOK; + parser_state &= ~PST_CMDBLTIN; + + if (last_read_token == IF || last_read_token == WHILE || last_read_token == UNTIL) + set_word_top (last_read_token); return (character); } @@ -3466,13 +3592,13 @@ read_token (command) if MBTEST(shellmeta (character)) { #if defined (ALIAS) - /* Turn off alias tokenization iff this character sequence would - not leave us ready to read a command. */ - if (character == '<' || character == '>') - parser_state &= ~PST_ALEXPNEXT; + /* Turn off alias tokenization, we will perform alias expansion on the + next command word if it's one where a command word is acceptable. */ + parser_state &= ~PST_ALEXPNEXT; #endif /* ALIAS */ parser_state &= ~PST_ASSIGNOK; + parser_state &= ~PST_CMDBLTIN; /* If we are parsing a command substitution and we have read a character that marks the end of it, don't bother to skip over quoted newlines @@ -3507,10 +3633,6 @@ read_token (command) case ';': parser_state |= PST_CASEPAT; -#if defined (ALIAS) - parser_state &= ~PST_ALEXPNEXT; -#endif /* ALIAS */ - peek_char = shell_getc (1); if MBTEST(peek_char == '&') return (SEMI_SEMI_AND); @@ -3560,9 +3682,6 @@ read_token (command) else if MBTEST(character == ';' && peek_char == '&') { parser_state |= PST_CASEPAT; -#if defined (ALIAS) - parser_state &= ~PST_ALEXPNEXT; -#endif /* ALIAS */ return (SEMI_AND); } @@ -3574,9 +3693,7 @@ read_token (command) if MBTEST(character == ')' && last_read_token == '(' && token_before_that == WORD) { parser_state |= PST_ALLOWOPNBRC; -#if defined (ALIAS) - parser_state &= ~PST_ALEXPNEXT; -#endif /* ALIAS */ + save_dstart = function_dstart; function_dstart = line_number; } @@ -3602,7 +3719,10 @@ read_token (command) /* Hack <&- (close stdin) case. Also <&N- (dup and close). */ if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND)) - return (character); + { + parser_state &= ~PST_CMDBLTIN; + return (character); + } tokword: /* Okay, if we got this far, we have to read a word. Read one, @@ -3671,16 +3791,15 @@ tokword: static char matched_pair_error; +/* QC == `"' if this construct is within double quotes */ static char * -parse_matched_pair (qc, open, close, lenp, flags) - int qc; /* `"' if this construct is within double quotes */ - int open, close; - int *lenp, flags; +parse_matched_pair (int qc, int open, int close, size_t *lenp, int flags) { - int count, ch, prevch, tflags; - int nestlen, ttranslen, start_lineno; + int count, ch, prevch, tflags, start_lineno; + size_t nestlen, ttranslen; char *ret, *nestret, *ttrans; - int retind, retsize, rflags; + int rflags; + size_t retsize, retind; int dolbrace_state; dolbrace_state = (flags & P_DOLBRACE) ? DOLBRACE_PARAM : 0; @@ -3708,9 +3827,10 @@ parse_matched_pair (qc, open, close, lenp, flags) if (ch == EOF) { free (ret); - parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close); + if ((parser_state & PST_NOERROR) == 0) + parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close); EOF_Reached = 1; /* XXX */ - parser_state |= PST_NOERROR; /* avoid redundant error message */ + parser_state |= PST_NOERROR; /* avoid redundant error message */ return (&matched_pair_error); } @@ -3749,9 +3869,7 @@ parse_matched_pair (qc, open, close, lenp, flags) continue; } - RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64); - if MBTEST(ch == CTLESC) - ret[retind++] = CTLESC; + RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64); ret[retind++] = ch; continue; } @@ -3776,7 +3894,7 @@ parse_matched_pair (qc, open, close, lenp, flags) count--; /* handle nested ${...} specially. */ else if MBTEST(open != close && (tflags & LEX_WASDOL) && open == '{' && ch == open) /* } */ - count++; + count++; /* XXX */ else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && ch == open) /* nested begin */ count++; @@ -3899,7 +4017,6 @@ parse_matched_pair (qc, open, close, lenp, flags) /* Locale expand $"..." here. */ /* PST_NOEXPAND */ ttrans = locale_expand (nestret, 0, nestlen - 1, start_lineno, &ttranslen); - free (nestret); /* If we're supposed to single-quote translated strings, check whether the translated result is different from @@ -3907,6 +4024,7 @@ parse_matched_pair (qc, open, close, lenp, flags) if (singlequote_translations && ((nestlen - 1) != ttranslen || STREQN (nestret, ttrans, ttranslen) == 0)) { + free (nestret); if ((rflags & P_DQUOTE) == 0) nestret = sh_single_quote (ttrans); else if ((rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2) && (flags & P_DOLBRACE)) @@ -3916,7 +4034,10 @@ parse_matched_pair (qc, open, close, lenp, flags) nestret = sh_backslash_quote_for_double_quotes (ttrans, 0); } else - nestret = sh_mkdoublequoted (ttrans, ttranslen, 0); + { + free (nestret); + nestret = sh_mkdoublequoted (ttrans, ttranslen, 0); + } free (ttrans); nestlen = strlen (nestret); retind -= 2; /* back up before the $" */ @@ -3927,10 +4048,21 @@ parse_matched_pair (qc, open, close, lenp, flags) FREE (nestret); } else if ((flags & (P_ARRAYSUB|P_DOLBRACE)) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */ + /* This also handles ${ command; } */ goto parse_dollar_word; else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '(') /*)*/ /* $() inside $(( ))/$[ ] */ goto parse_dollar_word; + else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '{') /*)*/ + /* ${} inside $(( ))/$[ ] */ + { + int npeek; + npeek = shell_getc (1); + shell_ungetc (npeek); + if (FUNSUB_CHAR (npeek)) + goto parse_dollar_word; + } + #if defined (PROCESS_SUBSTITUTION) /* XXX - technically this should only be recognized at the start of a word */ @@ -3959,7 +4091,16 @@ parse_dollar_word: if (ch == '(') /* ) */ nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE); else if (ch == '{') /* } */ - nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags); + { + int npeek; + + npeek = shell_getc (1); + shell_ungetc (npeek); + if (FUNSUB_CHAR (npeek)) + nestret = parse_comsub (0, '{', '}', &nestlen, rflags|P_COMMAND); + else + nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags); + } else if (ch == '[') /* ] */ nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags|P_ARITH); @@ -3989,8 +4130,7 @@ parse_dollar_word: #if defined (DEBUG) static void -dump_tflags (flags) - int flags; +dump_tflags (int flags) { int f; @@ -4075,20 +4215,166 @@ dump_tflags (flags) fprintf (stderr, "\n"); fflush (stderr); } + +static void +dump_pflags (int flags) +{ + int f; + + f = flags; + fprintf (stderr, "%d -> ", f); + if (f & PST_CASEPAT) + { + f &= ~PST_CASEPAT; + fprintf (stderr, "PST_CASEPAT%s", f ? "|" : ""); + } + if (f & PST_ALEXPNEXT) + { + f &= ~PST_ALEXPNEXT; + fprintf (stderr, "PST_ALEXPNEXT%s", f ? "|" : ""); + } + if (f & PST_ALLOWOPNBRC) + { + f &= ~PST_ALLOWOPNBRC; + fprintf (stderr, "PST_ALLOWOPNBRC%s", f ? "|" : ""); + } + if (f & PST_NEEDCLOSBRC) + { + f &= ~PST_NEEDCLOSBRC; + fprintf (stderr, "PST_NEEDCLOSBRC%s", f ? "|" : ""); + } + if (f & PST_DBLPAREN) + { + f &= ~PST_DBLPAREN; + fprintf (stderr, "PST_DBLPAREN%s", f ? "|" : ""); + } + if (f & PST_SUBSHELL) + { + f &= ~PST_SUBSHELL; + fprintf (stderr, "PST_SUBSHELL%s", f ? "|" : ""); + } + if (f & PST_CMDSUBST) + { + f &= ~PST_CMDSUBST; + fprintf (stderr, "PST_CMDSUBST%s", f ? "|" : ""); + } + if (f & PST_FUNSUBST) + { + f &= ~PST_FUNSUBST; + fprintf (stderr, "PST_FUNSUBST%s", f ? "|" : ""); + } + if (f & PST_CASESTMT) + { + f &= ~PST_CASESTMT; + fprintf (stderr, "PST_CASESTMT%s", f ? "|" : ""); + } + if (f & PST_CONDCMD) + { + f &= ~PST_CONDCMD; + fprintf (stderr, "PST_CONDCMD%s", f ? "|" : ""); + } + if (f & PST_CONDEXPR) + { + f &= ~PST_CONDEXPR; + fprintf (stderr, "PST_CONDEXPR%s", f ? "|" : ""); + } + if (f & PST_ARITHFOR) + { + f &= ~PST_ARITHFOR; + fprintf (stderr, "PST_ARITHFOR%s", f ? "|" : ""); + } + if (f & PST_ALEXPAND) + { + f &= ~PST_ALEXPAND; + fprintf (stderr, "PST_ALEXPAND%s", f ? "|" : ""); + } + if (f & PST_EXTPAT) + { + f &= ~PST_EXTPAT; + fprintf (stderr, "PST_EXTPAT%s", f ? "|" : ""); + } + if (f & PST_COMPASSIGN) + { + f &= ~PST_COMPASSIGN; + fprintf (stderr, "PST_COMPASSIGN%s", f ? "|" : ""); + } + if (f & PST_ASSIGNOK) + { + f &= ~PST_ASSIGNOK; + fprintf (stderr, "PST_ASSIGNOK%s", f ? "|" : ""); + } + if (f & PST_EOFTOKEN) + { + f &= ~PST_EOFTOKEN; + fprintf (stderr, "PST_EOFTOKEN%s", f ? "|" : ""); + } + if (f & PST_REGEXP) + { + f &= ~PST_REGEXP; + fprintf (stderr, "PST_REGEXP%s", f ? "|" : ""); + } + if (f & PST_HEREDOC) + { + f &= ~PST_HEREDOC; + fprintf (stderr, "PST_HEREDOC%s", f ? "|" : ""); + } + if (f & PST_REPARSE) + { + f &= ~PST_REPARSE; + fprintf (stderr, "PST_REPARSE%s", f ? "|" : ""); + } + if (f & PST_REDIRLIST) + { + f &= ~PST_REDIRLIST; + fprintf (stderr, "PST_REDIRLIST%s", f ? "|" : ""); + } + if (f & PST_COMMENT) + { + f &= ~PST_COMMENT; + fprintf (stderr, "PST_COMMENT%s", f ? "|" : ""); + } + if (f & PST_ENDALIAS) + { + f &= ~PST_ENDALIAS; + fprintf (stderr, "PST_ENDALIAS%s", f ? "|" : ""); + } + if (f & PST_NOEXPAND) + { + f &= ~PST_NOEXPAND; + fprintf (stderr, "PST_NOEXPAND%s", f ? "|" : ""); + } + if (f & PST_NOERROR) + { + f &= ~PST_NOERROR; + fprintf (stderr, "PST_NOERROR%s", f ? "|" : ""); + } + if (f & PST_STRING) + { + f &= ~PST_STRING; + fprintf (stderr, "PST_STRING%s", f ? "|" : ""); + } + if (f & PST_CMDBLTIN) + { + f &= ~PST_CMDBLTIN; + fprintf (stderr, "PST_CMDBLTIN%s", f ? "|" : ""); + } + + fprintf (stderr, "\n"); + fflush (stderr); +} #endif /* Parse a $(...) command substitution. This reads input from the current - input stream. */ + input stream. QC == `"' if this construct is within double quotes */ static char * -parse_comsub (qc, open, close, lenp, flags) - int qc; /* `"' if this construct is within double quotes */ - int open, close; - int *lenp, flags; +parse_comsub (int qc, int open, int close, size_t *lenp, int flags) { int peekc, r; - int start_lineno, local_extglob, was_extpat; + int dolbrace_spec, local_extglob, was_extpat; + int start_lineno, save_lineno; + int was_word, was_newline, was_semi, was_amp; char *ret, *tcmd; - int retlen; + size_t retlen; sh_parser_state_t ps; STRING_SAVER *saved_strings; COMMAND *saved_global, *parsed_command; @@ -4099,18 +4385,40 @@ parse_comsub (qc, open, close, lenp, flags) { peekc = shell_getc (1); shell_ungetc (peekc); - if (peekc == '(') /*)*/ + if (peekc == '(') /* ) */ return (parse_matched_pair (qc, open, close, lenp, P_ARITH)); } + else if (open == '{') /* } */ + { + peekc = shell_getc (1); + if (FUNSUB_CHAR (peekc)) + { + dolbrace_spec = peekc; +#if 0 + if (dolbrace_spec == '(') /* ksh93 compatibility ) */ + shell_ungetc (peekc); +#else + if (dolbrace_spec == '\n') + shell_ungetc (peekc); /* get PS2 prompting right */ +#endif + } + else + { + shell_ungetc (peekc); + return parse_matched_pair (qc, open, close, lenp, flags); + } + } /*itrace("parse_comsub: qc = `%c' open = %c close = %c", qc, open, close);*/ /*debug_parser(1);*/ start_lineno = line_number; + save_lineno = simplecmd_lineno; save_parser_state (&ps); was_extpat = (parser_state & PST_EXTPAT); + was_word = was_newline = was_semi = was_amp = 0; /* State flags we don't want to persist into command substitutions. */ parser_state &= ~(PST_REGEXP|PST_EXTPAT|PST_CONDCMD|PST_CONDEXPR|PST_COMPASSIGN); @@ -4121,6 +4429,8 @@ parse_comsub (qc, open, close, lenp, flags) parser_state &= ~(PST_CASEPAT|PST_ALEXPNEXT|PST_SUBSHELL|PST_REDIRLIST); /* State flags we want to set for this run through the parser. */ parser_state |= PST_CMDSUBST|PST_EOFTOKEN|PST_NOEXPAND; + if (open == '{') /* } */ + parser_state |= PST_FUNSUBST; /* leave pushed_string_list alone, since we might need to consume characters from it to satisfy this command substitution (in some perverse case). */ @@ -4150,10 +4460,23 @@ parse_comsub (qc, open, close, lenp, flags) #endif current_token = '\n'; /* XXX */ - token_to_read = DOLPAREN; /* let's trick the parser */ + token_to_read = (open == '(') ? DOLPAREN : DOLBRACE; /* let's trick the parser ) */ + parsing_command = 1; /* saved as part of sh_parser_state_t */ r = yyparse (); + if (open == '{') + { + if (current_token == shell_eof_token) + { + was_semi = last_read_token == ';'; + was_newline = last_read_token == '\n'; + was_amp = last_read_token == '&'; + + was_word = (was_semi || was_newline) && (token_before_that == WORD || token_before_that == ASSIGNMENT_WORD); + } + } + if (need_here_doc > 0) { internal_warning ("command substitution: %d unterminated here-document%s", need_here_doc, (need_here_doc == 1) ? "" : "s"); @@ -4172,8 +4495,11 @@ parse_comsub (qc, open, close, lenp, flags) shell_eof_token = ps.eof_token; expand_aliases = ps.expand_aliases; - /* yyparse() has already called yyerror() and reset_parser() */ + /* yyparse() has already called yyerror() and reset_parser(), so we set + PST_NOERROR to avoid a redundant error message. */ parser_state |= PST_NOERROR; + + flush_parser_state (&ps); return (&matched_pair_error); } else if (r != 0) @@ -4190,6 +4516,7 @@ parse_comsub (qc, open, close, lenp, flags) shell_eof_token = ps.eof_token; expand_aliases = ps.expand_aliases; + flush_parser_state (&ps); jump_to_top_level (DISCARD); /* XXX - return (&matched_pair_error)? */ } } @@ -4206,6 +4533,7 @@ INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, she shell_eof_token = ps.eof_token; expand_aliases = ps.expand_aliases; + flush_parser_state (&ps); return (&matched_pair_error); } @@ -4216,19 +4544,46 @@ INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, she restore_parser_state (&ps); pushed_string_list = saved_strings; + simplecmd_lineno = save_lineno; + tcmd = print_comsub (parsed_command); /* returns static memory */ retlen = strlen (tcmd); - if (tcmd[0] == '(') /* ) need a space to prevent arithmetic expansion */ - retlen++; - ret = xmalloc (retlen + 2); - if (tcmd[0] == '(') /* ) */ + if (open == '(') /* ) */ { - ret[0] = ' '; - strcpy (ret + 1, tcmd); + if (tcmd[0] == '(') /* ) need a space to prevent arithmetic expansion */ + retlen++; + ret = xmalloc (retlen + 2); + if (tcmd[0] == '(') /* ) */ + { + ret[0] = ' '; + strcpy (ret + 1, tcmd); + } + else + strcpy (ret, tcmd); } - else - strcpy (ret, tcmd); - ret[retlen++] = ')'; + else if (retlen == 0) /* open == '{' }, empty command */ + { + ret = xmalloc (3); + ret[retlen++] = ' '; + } + else /* open == '{' } */ + { + int lastc; + + lastc = tcmd[retlen - 1]; + retlen++; + ret = xmalloc (retlen + 4); + ret[0] = (dolbrace_spec == '|') ? '|' : ' '; + strcpy (ret + 1, tcmd); /* ( */ + if (was_newline) + ret[retlen++] = '\n'; + else if (was_word || was_semi) + ret[retlen++] = ';'; + else if (lastc != '\n' && lastc != ';' && lastc != '&') + ret[retlen++] = ';'; + ret[retlen++] = ' '; + } + ret[retlen++] = close; ret[retlen] = '\0'; dispose_command (parsed_command); @@ -4241,25 +4596,24 @@ INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, she return ret; } -/* Recursively call the parser to parse a $(...) command substitution. This is +/* Recursively call the parser to parse a command substitution. This is called by the word expansion code and so does not have to reset as much parser state before calling yyparse(). */ char * -xparse_dolparen (base, string, indp, flags) - char *base; - char *string; - int *indp; - int flags; +xparse_dolparen (const char *base, char *string, size_t *indp, int flags) { sh_parser_state_t ps; sh_input_line_state_t ls; - int orig_ind, nc, sflags, start_lineno, local_extglob; + size_t orig_ind; + int nc, sflags, start_lineno, local_extglob, funsub, closer; + int save_lineno; char *ret, *ep, *ostring; /*debug_parser(1);*/ orig_ind = *indp; ostring = string; start_lineno = line_number; + save_lineno = simplecmd_lineno; if (*string == 0) { @@ -4273,6 +4627,8 @@ xparse_dolparen (base, string, indp, flags) /*itrace("xparse_dolparen: size = %d shell_input_line = `%s' string=`%s'", shell_input_line_size, shell_input_line, string);*/ + funsub = flags & SX_FUNSUB; + sflags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE; if (flags & SX_NOLONGJMP) sflags |= SEVAL_NOLONGJMP; @@ -4284,10 +4640,12 @@ xparse_dolparen (base, string, indp, flags) pushed_string_list = (STRING_SAVER *)NULL; #endif /*(*/ - parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*(*/ - shell_eof_token = ')'; - if (flags & SX_COMPLETE) + parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*{(*/ + closer = shell_eof_token = funsub ? '}' : ')'; + if (flags & (SX_COMPLETE|SX_NOERROR)) parser_state |= PST_NOERROR; + if (funsub) + parser_state |= PST_FUNSUBST; /* Don't expand aliases on this pass at all. Either parse_comsub() does it at parse time, in which case this string already has aliases expanded, @@ -4299,7 +4657,10 @@ xparse_dolparen (base, string, indp, flags) local_extglob = extended_glob; #endif - token_to_read = DOLPAREN; /* let's trick the parser */ + if (funsub && FUNSUB_CHAR (*string) && *string == '|') + string++; + + token_to_read = funsub ? DOLBRACE : DOLPAREN; /* let's trick the parser */ nc = parse_string (string, "command substitution", sflags, (COMMAND **)NULL, &ep); @@ -4312,13 +4673,15 @@ xparse_dolparen (base, string, indp, flags) /* reset_parser() clears shell_input_line and associated variables, including parser_state, so we want to reset things, then restore what we need. */ restore_input_line_state (&ls); - restore_parser_state (&ps); + restore_parser_state (&ps); /* restores shell_eof_token */ #if defined (EXTENDED_GLOB) extended_glob = local_extglob; #endif token_to_read = 0; + simplecmd_lineno = save_lineno; + /* If parse_string returns < 0, we need to jump to top level with the negative of the return value. We abandon the rest of this input line first */ @@ -4326,7 +4689,7 @@ xparse_dolparen (base, string, indp, flags) { clear_shell_input_line (); /* XXX */ if (bash_input.type != st_string) /* paranoia */ - parser_state &= ~(PST_CMDSUBST|PST_EOFTOKEN); + parser_state &= ~(PST_CMDSUBST|PST_EOFTOKEN|PST_FUNSUBST); if ((flags & SX_NOLONGJMP) == 0) jump_to_top_level (-nc); /* XXX */ } @@ -4336,7 +4699,7 @@ xparse_dolparen (base, string, indp, flags) and return it. If flags & 1 (SX_NOALLOC) we can return NULL. */ /*(*/ - if (ep[-1] != ')') + if (ep[-1] != closer) { #if 0 if (ep[-1] != '\n') @@ -4357,11 +4720,11 @@ xparse_dolparen (base, string, indp, flags) itrace("xparse_dolparen:%d: *indp (%d) < orig_ind (%d), orig_string = `%s'", line_number, *indp, orig_ind, ostring); #endif - if (base[*indp] != ')' && (flags & SX_NOLONGJMP) == 0) + if (base[*indp] != closer && (flags & SX_NOLONGJMP) == 0) { /*(*/ if ((flags & SX_NOERROR) == 0) - parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), ')'); + parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), closer); jump_to_top_level (DISCARD); } @@ -4383,15 +4746,13 @@ xparse_dolparen (base, string, indp, flags) substitution to a COMMAND *. This is called from command_substitute() and has the same parser state constraints as xparse_dolparen(). */ COMMAND * -parse_string_to_command (string, flags) - char *string; - int flags; +parse_string_to_command (char *string, int flags) { sh_parser_state_t ps; sh_input_line_state_t ls; int nc, sflags; size_t slen; - char *ret, *ep; + char *ep; COMMAND *cmd; if (*string == 0) @@ -4412,7 +4773,7 @@ parse_string_to_command (string, flags) #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) pushed_string_list = (STRING_SAVER *)NULL; #endif - if (flags & SX_COMPLETE) + if (flags & (SX_COMPLETE|SX_NOERROR)) parser_state |= PST_NOERROR; parser_state |= PST_STRING; @@ -4454,8 +4815,7 @@ parse_string_to_command (string, flags) the parsed token, -1 on error, or -2 if we didn't do anything and should just go on. */ static int -parse_dparen (c) - int c; +parse_dparen (int c) { int cmdtyp, sline; char *wval; @@ -4464,9 +4824,8 @@ parse_dparen (c) #if defined (ARITH_FOR_COMMAND) if (last_read_token == FOR) { - if (word_top < MAX_CASE_NEST) - word_top++; - arith_for_lineno = word_lineno[word_top] = line_number; + set_word_top (last_read_token); + arith_for_lineno = line_number; cmdtyp = parse_arith_cmd (&wval, 0); if (cmdtyp == 1) { @@ -4485,6 +4844,8 @@ parse_dparen (c) { sline = line_number; + if (last_read_token == IF || last_read_token == WHILE || last_read_token == UNTIL) + set_word_top (last_read_token); cmdtyp = parse_arith_cmd (&wval, 0); if (cmdtyp == 1) /* arithmetic command */ { @@ -4516,13 +4877,11 @@ parse_dparen (c) allocated buffer and make *ep point to that buffer. Return -1 on an error, for example EOF. */ static int -parse_arith_cmd (ep, adddq) - char **ep; - int adddq; +parse_arith_cmd (char **ep, int adddq) { int exp_lineno, rval, c; char *ttok, *tokstr; - int ttoklen; + size_t ttoklen; exp_lineno = line_number; ttok = parse_matched_pair (0, '(', ')', &ttoklen, P_ARITH); @@ -4567,7 +4926,7 @@ parse_arith_cmd (ep, adddq) #if defined (COND_COMMAND) static void -cond_error () +cond_error (void) { char *etext; @@ -4586,13 +4945,13 @@ cond_error () } static COND_COM * -cond_expr () +cond_expr (void) { return (cond_or ()); } static COND_COM * -cond_or () +cond_or (void) { COND_COM *l, *r; @@ -4606,7 +4965,7 @@ cond_or () } static COND_COM * -cond_and () +cond_and (void) { COND_COM *l, *r; @@ -4620,7 +4979,7 @@ cond_and () } static int -cond_skip_newlines () +cond_skip_newlines (void) { while ((cond_token = read_token (READ)) == '\n') { @@ -4634,7 +4993,7 @@ cond_skip_newlines () do { cond_token = COND_ERROR; return ((COND_COM *)NULL); } while (0) static COND_COM * -cond_term () +cond_term (void) { WORD_DESC *op; COND_COM *term, *tleft, *tright; @@ -4804,7 +5163,7 @@ cond_term () /* This is kind of bogus -- we slip a mini recursive-descent parser in here to handle the conditional statement syntax. */ static COMMAND * -parse_cond_command () +parse_cond_command (void) { COND_COM *cexp; @@ -4820,9 +5179,7 @@ parse_cond_command () substitution that will reallocate atoken. We don't want to write beyond the end of an allocated buffer. */ static int -token_is_assignment (t, i) - char *t; - int i; +token_is_assignment (const char *t, int i) { int r; char *atoken; @@ -4843,24 +5200,21 @@ token_is_assignment (t, i) /* XXX - possible changes here for `+=' */ static int -token_is_ident (t, i) - char *t; - int i; +token_is_ident (char *t, int i) { unsigned char c; int r; c = t[i]; t[i] = '\0'; - r = legal_identifier (t); + r = valid_identifier (t); t[i] = c; return r; } #endif static int -read_token_word (character) - int character; +read_token_word (int character) { /* The value for YYLVAL when a WORD is read. */ WORD_DESC *the_word; @@ -4889,7 +5243,7 @@ read_token_word (character) int cd; int result, peek_char; char *ttok, *ttrans; - int ttoklen, ttranslen; + size_t ttoklen, ttranslen; intmax_t lvalue; if (token_buffer_size < TOKEN_DEFAULT_INITIAL_SIZE) @@ -4902,7 +5256,16 @@ read_token_word (character) for (;;) { if (character == EOF) - goto got_token; + { + /* delimit the current token, then return EOF if the shell is + interactive. */ + if (interactive) + { + EOF_Reached = 1; + token_to_read = yacc_EOF; + } + goto got_token; + } if (pass_next_character) { @@ -4946,6 +5309,24 @@ read_token_word (character) } } + /* Just an awful special case. We want '}' to delimit the foreground + command substitution construct ${Ccommand; } but since it's a word + expansion, we need to join it with any potential following + characters. We fake things out here and treat a word beginning with + a close brace as the '}' reserved word, treat it as a separate + token, terminate the command substitution, and go on reading + characters into the same upper-layer token. */ + if ((parser_state & PST_FUNSUBST) && token_index == 0 && quoted == 0 && + reserved_word_acceptable (last_read_token) && + MBTEST(character == '}')) + { + RESIZE_MALLOCED_BUFFER (token, token_index, 2, + token_buffer_size, TOKEN_DEFAULT_GROW_SIZE); + token[token_index++] = character; + all_digit_token = dollar_present = 0; + goto got_token; + } + /* Parse a matched pair of quote characters. */ if MBTEST(shellquote (character)) { @@ -5030,7 +5411,19 @@ read_token_word (character) ((peek_char == '{' || peek_char == '[') && character == '$')) /* ) ] } */ { if (peek_char == '{') /* } */ - ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE|P_DOLBRACE); + { + int npeek; + npeek = shell_getc (1); + shell_ungetc (npeek); + if (FUNSUB_CHAR (npeek)) + { + push_delimiter (dstack, peek_char); + ttok = parse_comsub (cd, '{', '}', &ttoklen, P_COMMAND); + pop_delimiter (dstack); + } + else + ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE|P_DOLBRACE); + } else if (peek_char == '(') /* ) */ { /* XXX - push and pop the `(' as a delimiter for use by @@ -5054,7 +5447,7 @@ read_token_word (character) strcpy (token + token_index, ttok); token_index += ttoklen; FREE (ttok); - dollar_present = 1; + dollar_present |= character == '$'; all_digit_token = 0; goto next_character; } @@ -5095,15 +5488,20 @@ read_token_word (character) /* PST_NOEXPAND */ /* Try to locale-expand the converted string. */ ttrans = locale_expand (ttok, 0, ttoklen - 1, first_line, &ttranslen); - free (ttok); /* Add the double quotes back (or single quotes if the user has set that option). */ if (singlequote_translations && ((ttoklen - 1) != ttranslen || STREQN (ttok, ttrans, ttranslen) == 0)) - ttok = sh_single_quote (ttrans); + { + free (ttok); + ttok = sh_single_quote (ttrans); + } else - ttok = sh_mkdoublequoted (ttrans, ttranslen, 0); + { + free (ttok); + ttok = sh_mkdoublequoted (ttrans, ttranslen, 0); + } free (ttrans); ttrans = ttok; @@ -5242,7 +5640,7 @@ got_token: last_read_token == LESS_AND || last_read_token == GREATER_AND)) { - if (legal_number (token, &lvalue) && (int)lvalue == lvalue) + if (valid_number (token, &lvalue) && (int)lvalue == lvalue) { yylval.number = lvalue; return (NUMBER); @@ -5252,7 +5650,7 @@ got_token: /* Check for special case tokens. */ result = (last_shell_getc_is_singlebyte) ? special_case_tokens (token) : -1; if (result >= 0) - return result; + return result; /* don't need to set word_top in any of these cases */ #if defined (ALIAS) /* Posix.2 does not allow reserved words to be aliased, so check for all @@ -5299,11 +5697,11 @@ got_token: { the_word->flags |= W_NOSPLIT; if (parser_state & PST_COMPASSIGN) - the_word->flags |= W_NOGLOB; /* XXX - W_NOBRACE? */ + the_word->flags |= W_NOGLOB|W_NOBRACE; } } - if (command_token_position (last_read_token)) + if (command_token_position (last_read_token) || (parser_state & PST_CMDBLTIN)) { struct builtin *b; b = builtin_address_internal (token, 0); @@ -5311,7 +5709,18 @@ got_token: parser_state |= PST_ASSIGNOK; else if (STREQ (token, "eval") || STREQ (token, "let")) parser_state |= PST_ASSIGNOK; + /* If we don't want to allow multiple instances of `command' to act as + declaration utilities as long as the last one is followed by a + declaration utility, add back a check for command_token_position. + subst.c:fix_assignment_words allows multiple instances of "command" + but I don't think that POSIX requires this. */ + else if (posixly_correct && STREQ (token, "command")) + parser_state |= PST_CMDBLTIN; + else + parser_state &= ~PST_CMDBLTIN; } + else + parser_state &= ~PST_CMDBLTIN; yylval.word = the_word; @@ -5322,9 +5731,9 @@ got_token: /* can use token; already copied to the_word */ token[token_index-1] = '\0'; #if defined (ARRAY_VARS) - if (legal_identifier (token+1) || valid_array_reference (token+1, 0)) + if (valid_identifier (token+1) || valid_array_reference (token+1, 0)) #else - if (legal_identifier (token+1)) + if (valid_identifier (token+1)) #endif { strcpy (the_word->word, token+1); @@ -5342,30 +5751,53 @@ got_token: result = ((the_word->flags & (W_ASSIGNMENT|W_NOSPLIT)) == (W_ASSIGNMENT|W_NOSPLIT)) ? ASSIGNMENT_WORD : WORD; + /* Are we potentially starting a simple command? */ + if (command_token_position (last_read_token)) + simplecmd_lineno = line_number; + switch (last_read_token) { case FUNCTION: parser_state |= PST_ALLOWOPNBRC; + save_dstart = function_dstart; function_dstart = line_number; break; case CASE: case SELECT: case FOR: - if (word_top < MAX_CASE_NEST) - word_top++; - word_lineno[word_top] = line_number; expecting_in_token++; break; } + set_word_top (last_read_token); return (result); } +static inline int +set_word_top (int t) +{ + switch (t) + { + case CASE: + case SELECT: + case FOR: + case IF: + case WHILE: + case UNTIL: + if (word_top < MAX_COMPOUND_NEST) + word_top++; + word_lineno[word_top] = line_number; + break; + default: + break; + } + return word_top; +} + /* Return 1 if TOKSYM is a token that after being read would allow a reserved word to be seen, else 0. */ -static int -reserved_word_acceptable (toksym) - int toksym; +static inline int +reserved_word_acceptable (int toksym) { switch (toksym) { @@ -5402,6 +5834,7 @@ reserved_word_acceptable (toksym) case WHILE: case 0: case DOLPAREN: + case DOLBRACE: return 1; default: #if defined (COPROCESS_SUPPORT) @@ -5417,8 +5850,7 @@ reserved_word_acceptable (toksym) /* Return the index of TOKEN in the alist of reserved words, or -1 if TOKEN is not a shell reserved word. */ int -find_reserved_word (tokstr) - char *tokstr; +find_reserved_word (const char *tokstr) { int i; for (i = 0; word_token_alist[i].word; i++) @@ -5430,7 +5862,7 @@ find_reserved_word (tokstr) /* An interface to let the rest of the shell (primarily the completion system) know what the parser is expecting. */ int -parser_in_command_position () +parser_in_command_position (void) { return (command_token_position (last_read_token)); } @@ -5441,14 +5873,14 @@ parser_in_command_position () the new prompt string is gets propagated to readline's local prompt variable. */ static void -reset_readline_prompt () +reset_readline_prompt (void) { char *temp_prompt; if (prompt_string_pointer) { temp_prompt = (*prompt_string_pointer) - ? decode_prompt_string (*prompt_string_pointer) + ? decode_prompt_string (*prompt_string_pointer, 1) : (char *)NULL; if (temp_prompt == 0) @@ -5471,7 +5903,7 @@ reset_readline_prompt () static const int no_semi_successors[] = { '\n', '{', '(', ')', ';', '&', '|', CASE, DO, ELSE, IF, SEMI_SEMI, SEMI_AND, SEMI_SEMI_AND, THEN, UNTIL, - WHILE, AND_AND, OR_OR, IN, + WHILE, AND_AND, OR_OR, IN, DOLPAREN, DOLBRACE, 0 }; @@ -5481,8 +5913,7 @@ static const int no_semi_successors[] = { history entry. LINE is the line we're about to add; it helps make some more intelligent decisions in certain cases. */ char * -history_delimiting_chars (line) - const char *line; +history_delimiting_chars (const char *line) { static int last_was_heredoc = 0; /* was the last entry the start of a here document? */ register int i; @@ -5491,7 +5922,27 @@ history_delimiting_chars (line) last_was_heredoc = 0; if (dstack.delimiter_depth != 0) - return ("\n"); + { + char ch; + HIST_ENTRY *current; + size_t curlen; + + ch = current_delimiter(dstack); + if (shellquote(ch)) + return ("\n"); + else if (ch == '(') /* ) and maybe for other non-quote-char delimiters */ + { + using_history (); + current = previous_history (); + curlen = current ? strlen (current->line) : 0; + /* If we're not reading some kind of quoted string, don't bother + adding a newline if the current history entry already ends in a + newline. It's just extra. */ + return ((curlen > 0 && current->line[curlen - 1] == '\n') ? "" : "\n"); + } + else + return ("\n"); + } /* We look for current_command_line_count == 2 because we are looking to add the first line of the body of the here document (the second line @@ -5574,8 +6025,7 @@ history_delimiting_chars (line) /* Issue a prompt, or prepare to issue a prompt when the next character is read. */ static void -prompt_again (force) - int force; +prompt_again (int force) { char *temp_prompt; @@ -5591,7 +6041,7 @@ prompt_again (force) prompt_string_pointer = &ps1_prompt; temp_prompt = *prompt_string_pointer - ? decode_prompt_string (*prompt_string_pointer) + ? decode_prompt_string (*prompt_string_pointer, 1) : (char *)NULL; if (temp_prompt == 0) @@ -5618,21 +6068,20 @@ prompt_again (force) } int -get_current_prompt_level () +get_current_prompt_level (void) { return ((current_prompt_string && current_prompt_string == ps2_prompt) ? 2 : 1); } void -set_current_prompt_level (x) - int x; +set_current_prompt_level (int x) { prompt_string_pointer = (x == 2) ? &ps2_prompt : &ps1_prompt; current_prompt_string = *prompt_string_pointer; } static void -print_prompt () +print_prompt (void) { fprintf (stderr, "%s", current_decoded_prompt); fflush (stderr); @@ -5643,8 +6092,7 @@ print_prompt () the first line of a potentially multi-line command, so we compensate here by returning one fewer when appropriate. */ static int -prompt_history_number (pmt) - char *pmt; +prompt_history_number (char *pmt) { int ret; @@ -5693,16 +6141,18 @@ prompt_history_number (pmt) \\ a backslash \[ begin a sequence of non-printing chars \] end a sequence of non-printing chars + + IS_PROMPT is non-zero if we are decoding one of the PS[0124] prompt strings + instead of an arbitrary string applying the @P transformation. */ #define PROMPT_GROWTH 48 char * -decode_prompt_string (string) - char *string; +decode_prompt_string (char *string, int is_prompt) { WORD_LIST *list; - char *result, *t, *orig_string; + char *result, *t, *last_lastarg; struct dstack save_dstack; - int last_exit_value, last_comsub_pid; + int last_exit_value, last_comsub_pid, last_comsub_status; #if defined (PROMPT_STRING_DECODE) size_t result_size; size_t result_index; @@ -5712,11 +6162,17 @@ decode_prompt_string (string) time_t the_time; char timebuf[128]; char *timefmt; + size_t tslen; + static char *decoding_prompt; result = (char *)xmalloc (result_size = PROMPT_GROWTH); result[result_index = 0] = 0; temp = (char *)NULL; - orig_string = string; + + /* Keep track of which (real) prompt string is being decoded so that we can + process embedded ${var@P} expansions correctly. */ + if (is_prompt) + decoding_prompt = string; while (c = *string++) { @@ -5732,7 +6188,7 @@ decode_prompt_string (string) #if !defined (HISTORY) temp = savestring ("1"); #else /* HISTORY */ - temp = itos (prompt_history_number (orig_string)); + temp = itos (prompt_history_number (decoding_prompt)); #endif /* HISTORY */ string--; /* add_string increments string again. */ goto add_string; @@ -5787,24 +6243,28 @@ decode_prompt_string (string) case '@': case 'A': /* Make the current time/date into a string. */ - (void) time (&the_time); + the_time = getnow (); #if defined (HAVE_TZSET) sv_tz ("TZ"); /* XXX -- just make sure */ #endif tm = localtime (&the_time); - - if (c == 'd') - n = strftime (timebuf, sizeof (timebuf), "%a %b %d", tm); + if (tm == 0) + { + strcpy (timebuf, "??"); + tslen = 2; + } + else if (c == 'd') + tslen = strftime (timebuf, sizeof (timebuf), "%a %b %d", tm); else if (c == 't') - n = strftime (timebuf, sizeof (timebuf), "%H:%M:%S", tm); + tslen = strftime (timebuf, sizeof (timebuf), "%H:%M:%S", tm); else if (c == 'T') - n = strftime (timebuf, sizeof (timebuf), "%I:%M:%S", tm); + tslen = strftime (timebuf, sizeof (timebuf), "%I:%M:%S", tm); else if (c == '@') - n = strftime (timebuf, sizeof (timebuf), "%I:%M %p", tm); + tslen = strftime (timebuf, sizeof (timebuf), "%I:%M %p", tm); else if (c == 'A') - n = strftime (timebuf, sizeof (timebuf), "%H:%M", tm); + tslen = strftime (timebuf, sizeof (timebuf), "%H:%M", tm); - if (n == 0) + if (tslen == 0) timebuf[0] = '\0'; else timebuf[sizeof(timebuf) - 1] = '\0'; @@ -5816,24 +6276,38 @@ decode_prompt_string (string) if (string[1] != '{') /* } */ goto not_escape; - (void) time (&the_time); + the_time = getnow (); tm = localtime (&the_time); string += 2; /* skip { */ - timefmt = xmalloc (strlen (string) + 3); - for (t = timefmt; *string && *string != '}'; ) - *t++ = *string++; - *t = '\0'; + t = string; + while (*string && *string != '}') + string++; c = *string; /* tested at add_string */ - if (timefmt[0] == '\0') + if (tm) + { + size_t tflen; + tflen = string - t; + timefmt = xmalloc (tflen + 3); + memcpy (timefmt, t, tflen); + timefmt[tflen] = '\0'; + + if (timefmt[0] == '\0') + { + timefmt[0] = '%'; + timefmt[1] = 'X'; /* locale-specific current time */ + timefmt[2] = '\0'; + } + + tslen = strftime (timebuf, sizeof (timebuf), timefmt, tm); + free (timefmt); + } + else { - timefmt[0] = '%'; - timefmt[1] = 'X'; /* locale-specific current time */ - timefmt[2] = '\0'; + strcpy (timebuf, "??"); + tslen = 2; } - n = strftime (timebuf, sizeof (timebuf), timefmt, tm); - free (timefmt); - if (n == 0) + if (tslen == 0) timebuf[0] = '\0'; else timebuf[sizeof(timebuf) - 1] = '\0'; @@ -5859,7 +6333,6 @@ decode_prompt_string (string) /* Try to quote anything the user can set in the file system */ if (promptvars || posixly_correct) { - char *t; t = sh_strvis (temp); temp = sh_backslash_quote_for_double_quotes (t, 0); free (t); @@ -5941,7 +6414,6 @@ decode_prompt_string (string) second argument of Q_DOUBLE_QUOTES if we use this function here. */ { - char *t; t = sh_strvis (t_string); temp = sh_backslash_quote_for_double_quotes (t, 0); free (t); @@ -5977,7 +6449,7 @@ decode_prompt_string (string) n = current_command_number; /* If we have already incremented current_command_number (PS4, ${var@P}), compensate */ - if (orig_string != ps0_prompt && orig_string != ps1_prompt && orig_string != ps2_prompt) + if (decoding_prompt != ps0_prompt && decoding_prompt != ps1_prompt && decoding_prompt != ps2_prompt) n--; temp = itos (n); goto add_string; @@ -5986,7 +6458,7 @@ decode_prompt_string (string) #if !defined (HISTORY) temp = savestring ("1"); #else /* HISTORY */ - temp = itos (prompt_history_number (orig_string)); + temp = itos (prompt_history_number (decoding_prompt)); #endif /* HISTORY */ goto add_string; @@ -6091,12 +6563,17 @@ not_escape: { last_exit_value = last_command_exit_value; last_comsub_pid = last_command_subst_pid; + last_comsub_status = last_command_subst_status; + last_lastarg = save_lastarg (); list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0); free (result); result = string_list (list); dispose_words (list); + bind_lastarg (last_lastarg); + free (last_lastarg); last_command_exit_value = last_exit_value; last_command_subst_pid = last_comsub_pid; + last_command_subst_status = last_comsub_status; } else { @@ -6106,6 +6583,10 @@ not_escape: } dstack = save_dstack; +#if defined (PROMPT_STRING_DECODE) + if (is_prompt) + decoding_prompt = (char *)NULL; +#endif return (result); } @@ -6119,8 +6600,7 @@ not_escape: /* Report a syntax error, and restart the parser. Call here for fatal errors. */ int -yyerror (msg) - const char *msg; +yyerror (const char *msg) { if ((parser_state & PST_NOERROR) == 0) report_syntax_error ((char *)NULL); @@ -6129,8 +6609,7 @@ yyerror (msg) } static char * -error_token_from_token (tok) - int tok; +error_token_from_token (int tok) { char *t; @@ -6169,7 +6648,7 @@ error_token_from_token (tok) } static char * -error_token_from_text () +error_token_from_text (void) { char *msg, *t; int token_end, i; @@ -6211,7 +6690,7 @@ error_token_from_text () } static void -print_offending_line () +print_offending_line (void) { char *msg; int token_end; @@ -6230,8 +6709,7 @@ print_offending_line () then place it in MESSAGE, otherwise pass NULL and this will figure out an appropriate message for you. */ static void -report_syntax_error (message) - char *message; +report_syntax_error (const char *message) { char *msg, *p; @@ -6287,6 +6765,8 @@ report_syntax_error (message) { if (EOF_Reached && shell_eof_token && current_token != shell_eof_token) parser_error (line_number, _("unexpected EOF while looking for matching `%c'"), shell_eof_token); + else if (EOF_Reached && word_top >= 0) + parser_error (line_number, _("syntax error: unexpected end of file from command on line %d"), word_lineno[word_top]); else { msg = EOF_Reached ? _("syntax error: unexpected end of file") : _("syntax error"); @@ -6310,8 +6790,7 @@ report_syntax_error (message) to throw away the information about where the allocated objects live. (dispose_command () will actually free the command.) */ static void -discard_parser_constructs (error_p) - int error_p; +discard_parser_constructs (int error_p) { } @@ -6334,12 +6813,31 @@ int eof_encountered = 0; /* The limit for eof_encountered. */ int eof_encountered_limit = 10; +int +handle_ignoreeof (int reset_prompt) +{ + if (eof_encountered < eof_encountered_limit) + { + fprintf (stderr, _("Use \"%s\" to leave the shell.\n"), + login_shell ? "logout" : "exit"); + eof_encountered++; + /* Reset the parsing state. */ + last_read_token = current_token = '\n'; + if (reset_prompt) + /* Reset the prompt string to be $PS1. */ + prompt_string_pointer = (char **)NULL; + prompt_again (0); + return 1; + } + return 0; +} + /* If we have EOF as the only input unit, this user wants to leave the shell. If the shell is not interactive, then just leave. Otherwise, if ignoreeof is set, and we haven't done this the required number of times in a row, print a message. */ static void -handle_eof_input_unit () +handle_eof_input_unit (void) { if (interactive) { @@ -6350,21 +6848,8 @@ handle_eof_input_unit () EOF_Reached = 0; /* If the user wants to "ignore" eof, then let her do so, kind of. */ - if (ignoreeof) - { - if (eof_encountered < eof_encountered_limit) - { - fprintf (stderr, _("Use \"%s\" to leave the shell.\n"), - login_shell ? "logout" : "exit"); - eof_encountered++; - /* Reset the parsing state. */ - last_read_token = current_token = '\n'; - /* Reset the prompt string to be $PS1. */ - prompt_string_pointer = (char **)NULL; - prompt_again (0); - return; - } - } + if (ignoreeof && handle_ignoreeof (1)) + return; /* In this case EOF should exit the shell. Do it now. */ reset_parser (); @@ -6394,10 +6879,7 @@ static WORD_LIST parse_string_error; /* Take a string and run it through the shell parser, returning the resultant word list. Used by compound array assignment. */ WORD_LIST * -parse_string_to_word_list (s, flags, whom) - char *s; - int flags; - const char *whom; +parse_string_to_word_list (char *s, int flags, const char *whom) { WORD_LIST *wl; int tok, orig_current_token, orig_line_number; @@ -6447,6 +6929,7 @@ parse_string_to_word_list (s, flags, whom) orig_current_token = current_token; current_token = tok; yyerror (NULL); /* does the right thing */ + ps.pushed_strings = NULL; /* freed by reset_parser */ current_token = orig_current_token; if (wl) dispose_words (wl); @@ -6470,23 +6953,28 @@ parse_string_to_word_list (s, flags, whom) if (wl == &parse_string_error) { set_exit_status (EXECUTION_FAILURE); + current_token = '\n'; /* XXX */ if (interactive_shell == 0 && posixly_correct) jump_to_top_level (FORCE_EOF); else - jump_to_top_level (DISCARD); + { + if (executing && parse_and_execute_level == 0) + top_level_cleanup (); + jump_to_top_level (DISCARD); + } } return (REVERSE_LIST (wl, WORD_LIST *)); } static char * -parse_compound_assignment (retlenp) - int *retlenp; +parse_compound_assignment (size_t *retlenp) { WORD_LIST *wl, *rl; - int tok, orig_line_number, assignok; + int tok, orig_line_number, assignok, ea, restore_pushed_strings; sh_parser_state_t ps; char *ret; + STRING_SAVER *ss; orig_line_number = line_number; save_parser_state (&ps); @@ -6509,6 +6997,12 @@ parse_compound_assignment (retlenp) esacs_needed_count = expecting_in_token = 0; + /* We're not pushing any new input here, we're reading from the current input + source. If that's an alias, we have to be prepared for the alias to get + popped out from underneath us. */ + ss = (ea = (expanding_alias () || parsing_dparen ())) ? pushed_string_list : (STRING_SAVER *)NULL; + restore_pushed_strings = 0; + while ((tok = read_token (READ)) != ')') { if (tok == '\n') /* Allow newlines in compound assignments */ @@ -6522,8 +7016,12 @@ parse_compound_assignment (retlenp) current_token = tok; /* for error reporting */ if (tok == yacc_EOF) /* ( */ parser_error (orig_line_number, _("unexpected EOF while looking for matching `)'")); + /* XXX - reset_parser here, even at EOF? */ else - yyerror(NULL); /* does the right thing */ + { + yyerror(NULL); /* does the right thing */ + ps.pushed_strings = NULL; /* freed by reset_parser */ + } if (wl) dispose_words (wl); wl = &parse_string_error; @@ -6532,17 +7030,34 @@ parse_compound_assignment (retlenp) wl = make_word_list (yylval.word, wl); } - restore_parser_state (&ps); - if (wl == &parse_string_error) { set_exit_status (EXECUTION_FAILURE); - last_read_token = '\n'; /* XXX */ + last_read_token = current_token = '\n'; /* XXX */ + /* This will eventually call reset_parser */ if (interactive_shell == 0 && posixly_correct) jump_to_top_level (FORCE_EOF); else - jump_to_top_level (DISCARD); + { + if (executing && parse_and_execute_level == 0) + top_level_cleanup (); + jump_to_top_level (DISCARD); + } + } + + /* Check whether or not an alias got popped out from underneath us and + fix up after restore_parser_state. */ + if (ea && ss && ss != pushed_string_list) + { + restore_pushed_strings = 1; + ss = pushed_string_list; + /* Don't bother with restoring the pushed string list from ps if we're + just going to overwrite it. */ + ps.pushed_strings = NULL; } + restore_parser_state (&ps); + if (restore_pushed_strings) + pushed_string_list = ss; if (wl) { @@ -6569,8 +7084,7 @@ parse_compound_assignment (retlenp) ************************************************/ sh_parser_state_t * -save_parser_state (ps) - sh_parser_state_t *ps; +save_parser_state (sh_parser_state_t *ps) { if (ps == 0) ps = (sh_parser_state_t *)xmalloc (sizeof (sh_parser_state_t)); @@ -6580,6 +7094,8 @@ save_parser_state (ps) ps->parser_state = parser_state; ps->token_state = save_token_state (); + ps->parsing_command = parsing_command; + ps->input_line_terminator = shell_input_line_terminator; ps->eof_encountered = eof_encountered; ps->eol_lookahead = eol_ungetc_lookahead; @@ -6631,11 +7147,8 @@ save_parser_state (ps) } void -restore_parser_state (ps) - sh_parser_state_t *ps; +restore_parser_state (sh_parser_state_t *ps) { - int i; - if (ps == 0) return; @@ -6645,6 +7158,7 @@ restore_parser_state (ps) restore_token_state (ps->token_state); free (ps->token_state); } + parsing_command = ps->parsing_command; shell_input_line_terminator = ps->input_line_terminator; eof_encountered = ps->eof_encountered; @@ -6697,9 +7211,35 @@ restore_parser_state (ps) shell_eof_token = ps->eof_token; } +void +uw_restore_parser_state (void *ps) +{ + restore_parser_state (ps); +} + +/* Free the parts of a parser state struct that have allocated memory. */ +void +flush_parser_state (sh_parser_state_t *ps) +{ + if (ps == 0) + return; + + FREE (ps->token_state); + ps->token_state = 0; + + if (ps->pipestatus) + array_dispose (ps->pipestatus); + ps->pipestatus = 0; + + /* We want to free the saved token and leave the current token for error + reporting and cleanup. */ + FREE (ps->token); + ps->token = 0; + ps->token_buffer_size = 0; +} + sh_input_line_state_t * -save_input_line_state (ls) - sh_input_line_state_t *ls; +save_input_line_state (sh_input_line_state_t *ls) { if (ls == 0) ls = (sh_input_line_state_t *)xmalloc (sizeof (sh_input_line_state_t)); @@ -6729,8 +7269,7 @@ save_input_line_state (ls) } void -restore_input_line_state (ls) - sh_input_line_state_t *ls; +restore_input_line_state (sh_input_line_state_t *ls) { FREE (shell_input_line); shell_input_line = ls->input_line; @@ -6761,7 +7300,7 @@ restore_input_line_state (ls) #define MAX_PROPSIZE 32768 static void -set_line_mbstate () +set_line_mbstate (void) { int c; size_t i, previ, len; diff --git a/parser-built b/parser-built index e69de29bb..b1689c0ab 100644 --- a/parser-built +++ b/parser-built @@ -0,0 +1,193 @@ +/* A Bison parser, made by GNU Bison 3.8.2. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +#ifndef YY_YY_Y_TAB_H_INCLUDED +# define YY_YY_Y_TAB_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int yydebug; +#endif + +/* Token kinds. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + IF = 258, /* IF */ + THEN = 259, /* THEN */ + ELSE = 260, /* ELSE */ + ELIF = 261, /* ELIF */ + FI = 262, /* FI */ + CASE = 263, /* CASE */ + ESAC = 264, /* ESAC */ + FOR = 265, /* FOR */ + SELECT = 266, /* SELECT */ + WHILE = 267, /* WHILE */ + UNTIL = 268, /* UNTIL */ + DO = 269, /* DO */ + DONE = 270, /* DONE */ + FUNCTION = 271, /* FUNCTION */ + COPROC = 272, /* COPROC */ + COND_START = 273, /* COND_START */ + COND_END = 274, /* COND_END */ + COND_ERROR = 275, /* COND_ERROR */ + IN = 276, /* IN */ + BANG = 277, /* BANG */ + TIME = 278, /* TIME */ + TIMEOPT = 279, /* TIMEOPT */ + TIMEIGN = 280, /* TIMEIGN */ + WORD = 281, /* WORD */ + ASSIGNMENT_WORD = 282, /* ASSIGNMENT_WORD */ + REDIR_WORD = 283, /* REDIR_WORD */ + NUMBER = 284, /* NUMBER */ + ARITH_CMD = 285, /* ARITH_CMD */ + ARITH_FOR_EXPRS = 286, /* ARITH_FOR_EXPRS */ + COND_CMD = 287, /* COND_CMD */ + AND_AND = 288, /* AND_AND */ + OR_OR = 289, /* OR_OR */ + GREATER_GREATER = 290, /* GREATER_GREATER */ + LESS_LESS = 291, /* LESS_LESS */ + LESS_AND = 292, /* LESS_AND */ + LESS_LESS_LESS = 293, /* LESS_LESS_LESS */ + GREATER_AND = 294, /* GREATER_AND */ + SEMI_SEMI = 295, /* SEMI_SEMI */ + SEMI_AND = 296, /* SEMI_AND */ + SEMI_SEMI_AND = 297, /* SEMI_SEMI_AND */ + LESS_LESS_MINUS = 298, /* LESS_LESS_MINUS */ + AND_GREATER = 299, /* AND_GREATER */ + AND_GREATER_GREATER = 300, /* AND_GREATER_GREATER */ + LESS_GREATER = 301, /* LESS_GREATER */ + GREATER_BAR = 302, /* GREATER_BAR */ + BAR_AND = 303, /* BAR_AND */ + DOLPAREN = 304, /* DOLPAREN */ + DOLBRACE = 305, /* DOLBRACE */ + yacc_EOF = 306 /* yacc_EOF */ + }; + typedef enum yytokentype yytoken_kind_t; +#endif +/* Token kinds. */ +#define YYEMPTY -2 +#define YYEOF 0 +#define YYerror 256 +#define YYUNDEF 257 +#define IF 258 +#define THEN 259 +#define ELSE 260 +#define ELIF 261 +#define FI 262 +#define CASE 263 +#define ESAC 264 +#define FOR 265 +#define SELECT 266 +#define WHILE 267 +#define UNTIL 268 +#define DO 269 +#define DONE 270 +#define FUNCTION 271 +#define COPROC 272 +#define COND_START 273 +#define COND_END 274 +#define COND_ERROR 275 +#define IN 276 +#define BANG 277 +#define TIME 278 +#define TIMEOPT 279 +#define TIMEIGN 280 +#define WORD 281 +#define ASSIGNMENT_WORD 282 +#define REDIR_WORD 283 +#define NUMBER 284 +#define ARITH_CMD 285 +#define ARITH_FOR_EXPRS 286 +#define COND_CMD 287 +#define AND_AND 288 +#define OR_OR 289 +#define GREATER_GREATER 290 +#define LESS_LESS 291 +#define LESS_AND 292 +#define LESS_LESS_LESS 293 +#define GREATER_AND 294 +#define SEMI_SEMI 295 +#define SEMI_AND 296 +#define SEMI_SEMI_AND 297 +#define LESS_LESS_MINUS 298 +#define AND_GREATER 299 +#define AND_GREATER_GREATER 300 +#define LESS_GREATER 301 +#define GREATER_BAR 302 +#define BAR_AND 303 +#define DOLPAREN 304 +#define DOLBRACE 305 +#define yacc_EOF 306 + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +union YYSTYPE +{ +#line 365 "/usr/local/src/chet/src/bash/src/parse.y" + + WORD_DESC *word; /* the word that we read. */ + int number; /* the number that we read. */ + WORD_LIST *word_list; + COMMAND *command; + REDIRECT *redirect; + ELEMENT element; + PATTERN_LIST *pattern; + +#line 179 "y.tab.h" + +}; +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + +extern YYSTYPE yylval; + + +int yyparse (void); + + +#endif /* !YY_YY_Y_TAB_H_INCLUDED */ diff --git a/parser.h b/parser.h index cae3a35f7..bef71707f 100644 --- a/parser.h +++ b/parser.h @@ -1,7 +1,7 @@ /* parser.h -- Everything you wanted to know about the parser, but were afraid to ask. */ -/* Copyright (C) 1995-2021 Free Software Foundation, Inc. +/* Copyright (C) 1995-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,7 +29,7 @@ #define PST_CASEPAT 0x000001 /* in a case pattern list */ #define PST_ALEXPNEXT 0x000002 /* expand next word for aliases */ #define PST_ALLOWOPNBRC 0x000004 /* allow open brace for function def */ -#define PST_NEEDCLOSBRC 0x000008 /* need close brace */ +#define PST_NEEDCLOSBRC 0x000008 /* need close brace -- unused */ #define PST_DBLPAREN 0x000010 /* double-paren parsing - unused */ #define PST_SUBSHELL 0x000020 /* ( ... ) subshell */ #define PST_CMDSUBST 0x000040 /* $( ... ) command substitution */ @@ -51,6 +51,8 @@ #define PST_NOEXPAND 0x400000 /* don't expand anything in read_token_word; for command substitution */ #define PST_NOERROR 0x800000 /* don't print error messages in yyerror */ #define PST_STRING 0x1000000 /* parsing a string to a command or word list */ +#define PST_CMDBLTIN 0x2000000 /* last token was the `command' builtin */ +#define PST_FUNSUBST 0x4000000 /* parsing a foreground command substitution */ /* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */ struct dstack { @@ -74,6 +76,14 @@ struct dstack { #define DOLBRACE_QUOTE 0x40 /* single quote is special in double quotes */ #define DOLBRACE_QUOTE2 0x80 /* single quote is semi-special in double quotes */ +/* characters that can appear following ${ to introduce a nofork command + substitution. */ +#if 0 +#define FUNSUB_CHAR(n) ((n) == ' ' || (n) == '\t' || (n) == '\n' || (n) == '|' || (n) == '(') /* ) */ +#else +#define FUNSUB_CHAR(n) ((n) == ' ' || (n) == '\t' || (n) == '\n' || (n) == '|') +#endif + /* variable declarations from parse.y */ extern struct dstack dstack; @@ -93,6 +103,7 @@ extern int shell_eof_token; extern int current_token; extern int parser_state; extern int need_here_doc; +extern int heredoc_string; extern int ignoreeof; extern int eof_encountered; diff --git a/patchlevel.h b/patchlevel.h index e48142124..ac3c2d29c 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -1,6 +1,6 @@ /* patchlevel.h -- current bash patch level */ -/* Copyright (C) 2001-2021 Free Software Foundation, Inc. +/* Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -25,6 +25,6 @@ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh looks for to find the patch level (for the sccs version string). */ -#define PATCHLEVEL 26 +#define PATCHLEVEL 0 #endif /* _PATCHLEVEL_H_ */ diff --git a/pathexp.c b/pathexp.c index 379128e79..f62efafb6 100644 --- a/pathexp.c +++ b/pathexp.c @@ -1,6 +1,6 @@ /* pathexp.c -- The shell interface to the globbing library. */ -/* Copyright (C) 1995-2020 Free Software Foundation, Inc. +/* Copyright (C) 1995-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -27,6 +27,9 @@ # include <unistd.h> #endif +#include "posixstat.h" +#include "stat-time.h" + #include "bashansi.h" #include "shell.h" @@ -36,11 +39,13 @@ #include "shmbutil.h" #include "bashintl.h" + #include <glob/strmatch.h> -static int glob_name_is_acceptable PARAMS((const char *)); -static void ignore_globbed_names PARAMS((char **, sh_ignore_func_t *)); -static char *split_ignorespec PARAMS((char *, int *)); +static int glob_name_is_acceptable (const char *); +static void ignore_globbed_names (char **, sh_ignore_func_t *); +static char *split_ignorespec (char *, int *); +static void sh_sortglob (char **); #include <glob/glob.h> @@ -58,16 +63,15 @@ int glob_star = 0; it implements the rules in Posix 2.13.3, specifically that an unquoted slash cannot appear in a bracket expression. */ int -unquoted_glob_pattern_p (string) - register char *string; +unquoted_glob_pattern_p (char *string) { register int c; char *send; - int open, bsquote; + int open; DECLARE_MBSTATE; - open = bsquote = 0; + open = 0; send = string + strlen (string); while (c = *string++) @@ -90,33 +94,27 @@ unquoted_glob_pattern_p (string) case '/': if (open) open = 0; + continue; case '+': case '@': case '!': - if (*string == '(') /*)*/ + if (extended_glob && *string == '(') /*)*/ return (1); continue; - /* A pattern can't end with a backslash, but a backslash in the pattern - can be special to the matching engine, so we note it in case we - need it later. */ case '\\': - if (*string != '\0' && *string != '/') + if (*string == CTLESC) { - bsquote = 1; string++; - continue; + /* If the CTLESC was quoting a CTLESC, skip it so that it's not + treated as a quoting character */ + if (*string == CTLESC) + string++; } - else if (open && *string == '/') - { - string++; /* quoted slashes in bracket expressions are ok */ - continue; - } - else if (*string == 0) - return (0); - - case CTLESC: + else + /*FALLTHROUGH*/ + case CTLESC: if (*string++ == '\0') return (0); } @@ -132,18 +130,13 @@ unquoted_glob_pattern_p (string) #endif } -#if 0 - return (bsquote ? 2 : 0); -#else return (0); -#endif } /* Return 1 if C is a character that is `special' in a POSIX ERE and needs to be quoted to match itself. */ static inline int -ere_char (c) - int c; +ere_char (int c) { switch (c) { @@ -168,23 +161,30 @@ ere_char (c) /* This is only used to determine whether to backslash-quote a character. */ int -glob_char_p (s) - const char *s; +glob_char_p (const char *s) { switch (*s) { +#if defined (EXTENDED_GLOB) + case '+': + case '@': + return (s[1] == '('); /*)*/ + case '(': + case '|': + case ')': +#endif + case '!': + case '^': + case '-': + case '.': + case ':': + case '=': case '*': case '[': case ']': case '?': case '\\': return 1; - case '+': - case '@': - case '!': - if (s[1] == '(') /*(*/ - return 1; - break; } return 0; } @@ -203,14 +203,13 @@ glob_char_p (s) performed. QGLOB_REGEXP means we're quoting for a Posix ERE (for [[ string =~ pat ]]) and that requires some special handling. */ char * -quote_string_for_globbing (pathname, qflags) - const char *pathname; - int qflags; +quote_string_for_globbing (const char *pathname, int qflags) { char *temp; register int i, j; int cclass, collsym, equiv, c, last_was_backslash; int savei, savej; + unsigned char cc; temp = (char *)xmalloc (2 * strlen (pathname) + 1); @@ -240,11 +239,29 @@ quote_string_for_globbing (pathname, qflags) else if (pathname[i] == CTLESC) { convert_to_backslash: + cc = pathname[i+1]; + if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/') continue; + /* What to do if preceding char is backslash? */ - if (pathname[i+1] != CTLESC && (qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0) + + /* We don't have to backslash-quote non-special ERE characters if + we're quoting a regexp. */ + if (cc != CTLESC && (qflags & QGLOB_REGEXP) && ere_char (cc) == 0) + continue; + + /* We don't have to backslash-quote non-special BRE characters if + we're quoting a glob pattern. */ + if (cc != CTLESC && (qflags & QGLOB_REGEXP) == 0 && glob_char_p (pathname+i+1) == 0) continue; + + /* If we're in a multibyte locale, don't bother quoting multibyte + characters. It matters if we're going to convert NFD to NFC on + macOS, and doesn't make a difference on other systems. */ + if (cc != CTLESC && locale_utf8locale && UTF8_SINGLEBYTE (cc) == 0) + continue; /* probably don't need to check for UTF-8 locale */ + temp[j++] = '\\'; i++; if (pathname[i] == '\0') @@ -377,8 +394,7 @@ endpat: } char * -quote_globbing_chars (string) - const char *string; +quote_globbing_chars (const char *string) { size_t slen; char *temp, *t; @@ -402,11 +418,10 @@ quote_globbing_chars (string) return temp; } -/* Call the glob library to do globbing on PATHNAME. */ +/* Call the glob library to do globbing on PATHNAME, honoring all the shell + variables that control globbing. */ char ** -shell_glob_filename (pathname, qflags) - const char *pathname; - int qflags; +shell_glob_filename (const char *pathname, int qflags) { char *temp, **results; int gflags, quoted_pattern; @@ -423,7 +438,7 @@ shell_glob_filename (pathname, qflags) if (should_ignore_glob_matches ()) ignore_glob_matches (results); if (results && results[0]) - strvec_sort (results, 1); /* posix sort */ + sh_sortglob (results); else { FREE (results); @@ -434,6 +449,28 @@ shell_glob_filename (pathname, qflags) return (results); } +#if defined (READLINE) && defined (PROGRAMMABLE_COMPLETION) +char ** +noquote_glob_filename (char *pathname) +{ + char **results; + int gflags; + + noglob_dot_filenames = glob_dot_filenames == 0; + gflags = glob_star ? GX_GLOBSTAR : 0; + + results = glob_filename (pathname, gflags); + + if (results && GLOB_FAILED (results)) + results = (char **)NULL; + + if (results && results[0]) + sh_sortglob (results); + + return (results); +} +#endif + /* Stuff for GLOBIGNORE. */ static struct ignorevar globignore = @@ -449,8 +486,7 @@ static struct ignorevar globignore = has changed. If GLOBIGNORE is being unset, we also need to disable the globbing of filenames beginning with a `.'. */ void -setup_glob_ignore (name) - char *name; +setup_glob_ignore (const char *name) { char *v; @@ -464,15 +500,14 @@ setup_glob_ignore (name) } int -should_ignore_glob_matches () +should_ignore_glob_matches (void) { return globignore.num_ignores; } /* Return 0 if NAME matches a pattern in the globignore.ignores list. */ static int -glob_name_is_acceptable (name) - const char *name; +glob_name_is_acceptable (const char *name) { struct ign *p; char *n; @@ -505,12 +540,10 @@ glob_name_is_acceptable (name) be removed from NAMES. */ static void -ignore_globbed_names (names, name_func) - char **names; - sh_ignore_func_t *name_func; +ignore_globbed_names (char **names, sh_ignore_func_t *name_func) { char **newnames; - int n, i; + size_t n, i; for (i = 0; names[i]; i++) ; @@ -542,8 +575,7 @@ ignore_globbed_names (names, name_func) } void -ignore_glob_matches (names) - char **names; +ignore_glob_matches (char **names) { if (globignore.num_ignores == 0) return; @@ -552,9 +584,7 @@ ignore_glob_matches (names) } static char * -split_ignorespec (s, ip) - char *s; - int *ip; +split_ignorespec (char *s, int *ip) { char *t; int n, i; @@ -576,8 +606,7 @@ split_ignorespec (s, ip) } void -setup_ignore_patterns (ivp) - struct ignorevar *ivp; +setup_ignore_patterns (struct ignorevar *ivp) { int numitems, maxitems, ptr; char *colon_bit, *this_ignoreval; @@ -614,11 +643,7 @@ setup_ignore_patterns (ivp) numitems = maxitems = ptr = 0; -#if 0 - while (colon_bit = extract_colon_unit (this_ignoreval, &ptr)) -#else while (colon_bit = split_ignorespec (this_ignoreval, &ptr)) -#endif { if (numitems + 1 >= maxitems) { @@ -635,3 +660,214 @@ setup_ignore_patterns (ivp) ivp->ignores[numitems].val = (char *)NULL; ivp->num_ignores = numitems; } + +/* Functions to handle sorting glob results in different ways depending on + the value of the GLOBSORT variable. */ + +static int glob_sorttype = SORT_NONE; + +static STRING_INT_ALIST sorttypes[] = { + { "name", SORT_NAME }, + { "size", SORT_SIZE }, + { "mtime", SORT_MTIME }, + { "atime", SORT_ATIME }, + { "ctime", SORT_CTIME }, + { "blocks", SORT_BLOCKS }, + { "nosort", SORT_NOSORT }, + { (char *)NULL, -1 } +}; + +/* A subset of the fields in the posix stat struct -- the ones we need -- + normalized to using struct timespec. */ +struct globstat { + off_t size; + struct timespec mtime; + struct timespec atime; + struct timespec ctime; + int blocks; +}; + +struct globsort_t { + char *name; + struct globstat st; +}; + +static struct globstat glob_nullstat = { -1, { -1, -1 }, { -1, -1 }, { -1, -1 }, -1 }; + +static inline int +glob_findtype (char *t) +{ + int type; + + type = find_string_in_alist (t, sorttypes, 0); + return (type == -1 ? SORT_NONE : type); +} + +void +setup_globsort (const char *varname) +{ + char *val; + int r, t; + + glob_sorttype = SORT_NONE; + val = get_string_value (varname); + if (val == 0 || *val == 0) + return; + + t = r = 0; + while (*val && whitespace (*val)) + val++; /* why not? */ + if (*val == '+') + val++; /* allow leading `+' but ignore it */ + else if (*val == '-') + { + r = SORT_REVERSE; /* leading `-' reverses sort order */ + val++; + } + + if (*val == 0) + { + /* A bare `+' means the default sort by name in ascending order; a bare + `-' means to sort by name in descending order. */ + glob_sorttype = SORT_NAME | r; + return; + } + + t = glob_findtype (val); + /* any other value is equivalent to the historical behavior */ + glob_sorttype = (t == SORT_NONE) ? t : t | r; +} + +static int +globsort_namecmp (char **s1, char **s2) +{ + return ((glob_sorttype < SORT_REVERSE) ? strvec_posixcmp (s1, s2) : strvec_posixcmp (s2, s1)); +} + +static int +globsort_sizecmp (struct globsort_t *g1, struct globsort_t *g2) +{ + return ((glob_sorttype < SORT_REVERSE) ? g1->st.size - g2->st.size : g2->st.size - g1->st.size); +} + +static int +globsort_timecmp (struct globsort_t *g1, struct globsort_t *g2) +{ + int t; + struct timespec t1, t2; + + t = (glob_sorttype < SORT_REVERSE) ? glob_sorttype : glob_sorttype - SORT_REVERSE; + if (t == SORT_MTIME) + { + t1 = g1->st.mtime; + t2 = g2->st.mtime; + } + else if (t == SORT_ATIME) + { + t1 = g1->st.atime; + t2 = g2->st.atime; + } + else + { + t1 = g1->st.ctime; + t2 = g2->st.ctime; + } + + return ((glob_sorttype < SORT_REVERSE) ? timespec_cmp (t1, t2) : timespec_cmp (t2, t1)); +} + +static int +globsort_blockscmp (struct globsort_t *g1, struct globsort_t *g2) +{ + return ((glob_sorttype < SORT_REVERSE) ? g1->st.blocks - g2->st.blocks : g2->st.blocks - g1->st.blocks); +} + +static struct globsort_t * +globsort_buildarray (char **array, size_t len) +{ + struct globsort_t *ret; + int i; + struct stat st; + + ret = (struct globsort_t *)xmalloc (len * sizeof (struct globsort_t)); + + for (i = 0; i < len; i++) + { + ret[i].name = array[i]; + if (stat (array[i], &st) != 0) + ret[i].st = glob_nullstat; + else + { + ret[i].st.size = st.st_size; + ret[i].st.mtime = get_stat_mtime (&st); + ret[i].st.atime = get_stat_atime (&st); + ret[i].st.ctime = get_stat_ctime (&st); + ret[i].st.blocks = st.st_blocks; + } + } + + return ret; +} + +static inline void +globsort_sortbyname (char **results) +{ + qsort (results, strvec_len (results), sizeof (char *), (QSFUNC *)globsort_namecmp); +} + +static void +globsort_sortarray (struct globsort_t *garray, size_t len) +{ + int t; + QSFUNC *sortfunc; + + t = (glob_sorttype < SORT_REVERSE) ? glob_sorttype : glob_sorttype - SORT_REVERSE; + + switch (t) + { + case SORT_SIZE: + sortfunc = (QSFUNC *)globsort_sizecmp; + break; + case SORT_ATIME: + case SORT_MTIME: + case SORT_CTIME: + sortfunc = (QSFUNC *)globsort_timecmp; + break; + case SORT_BLOCKS: + sortfunc = (QSFUNC *)globsort_blockscmp; + break; + default: + internal_error (_("invalid glob sort type")); + break; + } + + qsort (garray, len, sizeof (struct globsort_t), sortfunc); +} + +static void +sh_sortglob (char **results) +{ + size_t rlen; + struct globsort_t *garray; + + if (glob_sorttype == SORT_NOSORT || glob_sorttype == (SORT_NOSORT|SORT_REVERSE)) + return; + + if (glob_sorttype == SORT_NONE || glob_sorttype == SORT_NAME) + globsort_sortbyname (results); /* posix sort */ + else if (glob_sorttype == (SORT_NAME|SORT_REVERSE)) + globsort_sortbyname (results); /* posix sort reverse order */ + else + { + int i; + + rlen = strvec_len (results); + /* populate an array of name/statinfo, sort it appropriately, copy the + names from the sorted array back to RESULTS, and free the array */ + garray = globsort_buildarray (results, rlen); + globsort_sortarray (garray, rlen); + for (i = 0; i < rlen; i++) + results[i] = garray[i].name; + free (garray); + } +} diff --git a/pathexp.h b/pathexp.h index b96f92af4..6f80ca086 100644 --- a/pathexp.h +++ b/pathexp.h @@ -1,6 +1,6 @@ /* pathexp.h -- The shell interface to the globbing library. */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -49,7 +49,7 @@ extern int extended_glob; extern int glob_star; extern int match_ignore_case; /* doesn't really belong here */ -extern int unquoted_glob_pattern_p PARAMS((char *)); +extern int unquoted_glob_pattern_p (char *); /* PATHNAME can contain characters prefixed by CTLESC; this indicates that the character is to be quoted. We quote it here in the style @@ -61,15 +61,17 @@ extern int unquoted_glob_pattern_p PARAMS((char *)); pattern while executing a case statement), flags should include QGLOB_CVTNULL. If flags includes QGLOB_FILENAME, appropriate quoting to match a filename should be performed. */ -extern char *quote_string_for_globbing PARAMS((const char *, int)); +extern char *quote_string_for_globbing (const char *, int); -extern int glob_char_p PARAMS((const char *)); -extern char *quote_globbing_chars PARAMS((const char *)); +extern int glob_char_p (const char *); +extern char *quote_globbing_chars (const char *); /* Call the glob library to do globbing on PATHNAME. FLAGS is additional flags to pass to QUOTE_STRING_FOR_GLOBBING, mostly having to do with whether or not we've already performed quote removal. */ -extern char **shell_glob_filename PARAMS((const char *, int)); +extern char **shell_glob_filename (const char *, int); + +extern char **noquote_glob_filename (char *); /* Filename completion ignore. Used to implement the "fignore" facility of tcsh, GLOBIGNORE (like ksh-93 FIGNORE), and EXECIGNORE. @@ -82,10 +84,11 @@ extern char **shell_glob_filename PARAMS((const char *, int)); struct ign { char *val; - int len, flags; + size_t len; + int flags; }; -typedef int sh_iv_item_func_t PARAMS((struct ign *)); +typedef int sh_iv_item_func_t (struct ign *); struct ignorevar { char *varname; /* FIGNORE, GLOBIGNORE, or EXECIGNORE */ @@ -95,10 +98,24 @@ struct ignorevar { sh_iv_item_func_t *item_func; /* Called when each item is parsed from $`varname' */ }; -extern void setup_ignore_patterns PARAMS((struct ignorevar *)); +extern void setup_ignore_patterns (struct ignorevar *); + +extern void setup_glob_ignore (const char *); +extern int should_ignore_glob_matches (void); +extern void ignore_glob_matches (char **); + +/* Definitions for glob sorting */ +#define SORT_NONE 0 +#define SORT_NAME 1 +#define SORT_SIZE 2 +#define SORT_MTIME 3 +#define SORT_ATIME 4 +#define SORT_CTIME 5 +#define SORT_BLOCKS 6 +#define SORT_NOSORT 7 + +#define SORT_REVERSE 128 -extern void setup_glob_ignore PARAMS((char *)); -extern int should_ignore_glob_matches PARAMS((void)); -extern void ignore_glob_matches PARAMS((char **)); +extern void setup_globsort (const char *); #endif diff --git a/pcomplete.c b/pcomplete.c index 9612406d9..aa6a0440b 100644 --- a/pcomplete.c +++ b/pcomplete.c @@ -1,6 +1,6 @@ /* pcomplete.c - functions to generate lists of matches for programmable completion. */ -/* Copyright (C) 1999-2021 Free Software Foundation, Inc. +/* Copyright (C) 1999-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -31,11 +31,7 @@ #include <signal.h> -#if defined (PREFER_STDARG) -# include <stdarg.h> -#else -# include <varargs.h> -#endif +#include <stdarg.h> #include "posixtime.h" @@ -76,74 +72,74 @@ #endif #define STRDUP(x) ((x) ? savestring (x) : (char *)NULL) -typedef SHELL_VAR **SVFUNC (); +typedef SHELL_VAR **SVFUNC (void); #ifndef HAVE_STRPBRK -extern char *strpbrk PARAMS((char *, char *)); +extern char *strpbrk (char *, char *); #endif extern STRING_INT_ALIST word_token_alist[]; extern char *signal_names[]; #if defined (DEBUG) -#if defined (PREFER_STDARG) static void debug_printf (const char *, ...) __attribute__((__format__ (printf, 1, 2))); -#endif #endif /* DEBUG */ -static int it_init_joblist PARAMS((ITEMLIST *, int)); - -static int it_init_aliases PARAMS((ITEMLIST *)); -static int it_init_arrayvars PARAMS((ITEMLIST *)); -static int it_init_bindings PARAMS((ITEMLIST *)); -static int it_init_builtins PARAMS((ITEMLIST *)); -static int it_init_disabled PARAMS((ITEMLIST *)); -static int it_init_enabled PARAMS((ITEMLIST *)); -static int it_init_exported PARAMS((ITEMLIST *)); -static int it_init_functions PARAMS((ITEMLIST *)); -static int it_init_helptopics PARAMS((ITEMLIST *)); -static int it_init_hostnames PARAMS((ITEMLIST *)); -static int it_init_jobs PARAMS((ITEMLIST *)); -static int it_init_running PARAMS((ITEMLIST *)); -static int it_init_stopped PARAMS((ITEMLIST *)); -static int it_init_keywords PARAMS((ITEMLIST *)); -static int it_init_signals PARAMS((ITEMLIST *)); -static int it_init_variables PARAMS((ITEMLIST *)); -static int it_init_setopts PARAMS((ITEMLIST *)); -static int it_init_shopts PARAMS((ITEMLIST *)); - -static int shouldexp_filterpat PARAMS((char *)); -static char *preproc_filterpat PARAMS((char *, const char *)); - -static void init_itemlist_from_varlist PARAMS((ITEMLIST *, SVFUNC *)); - -static STRINGLIST *gen_matches_from_itemlist PARAMS((ITEMLIST *, const char *)); -static STRINGLIST *gen_action_completions PARAMS((COMPSPEC *, const char *)); -static STRINGLIST *gen_globpat_matches PARAMS((COMPSPEC *, const char *)); -static STRINGLIST *gen_wordlist_matches PARAMS((COMPSPEC *, const char *)); -static STRINGLIST *gen_shell_function_matches PARAMS((COMPSPEC *, const char *, +static int it_init_joblist (ITEMLIST *, int); + +static int it_init_aliases (ITEMLIST *); +static int it_init_arrayvars (ITEMLIST *); +static int it_init_bindings (ITEMLIST *); +static int it_init_builtins (ITEMLIST *); +static int it_init_disabled (ITEMLIST *); +static int it_init_enabled (ITEMLIST *); +static int it_init_exported (ITEMLIST *); +static int it_init_functions (ITEMLIST *); +static int it_init_helptopics (ITEMLIST *); +static int it_init_hostnames (ITEMLIST *); +static int it_init_jobs (ITEMLIST *); +static int it_init_running (ITEMLIST *); +static int it_init_stopped (ITEMLIST *); +static int it_init_keywords (ITEMLIST *); +static int it_init_signals (ITEMLIST *); +static int it_init_variables (ITEMLIST *); +static int it_init_setopts (ITEMLIST *); +static int it_init_shopts (ITEMLIST *); + +static int shouldexp_filterpat (char *); +static char *preproc_filterpat (const char *, const char *); + +static void init_itemlist_from_varlist (ITEMLIST *, SVFUNC *); + +static STRINGLIST *gen_matches_from_itemlist (ITEMLIST *, const char *); +static STRINGLIST *gen_action_completions (COMPSPEC *, const char *); +static STRINGLIST *gen_globpat_matches (COMPSPEC *, const char *); +static STRINGLIST *gen_wordlist_matches (COMPSPEC *, const char *); +static STRINGLIST *gen_shell_function_matches (COMPSPEC *, const char *, const char *, char *, int, WORD_LIST *, - int, int, int *)); -static STRINGLIST *gen_command_matches PARAMS((COMPSPEC *, const char *, + int, int, int *); +static STRINGLIST *gen_command_matches (COMPSPEC *, const char *, const char *, char *, int, WORD_LIST *, - int, int)); + int, int); -static STRINGLIST *gen_progcomp_completions PARAMS((const char *, const char *, +static STRINGLIST *gen_progcomp_completions (const char *, const char *, const char *, int, int, int *, int *, - COMPSPEC **)); + COMPSPEC **); -static char *pcomp_filename_completion_function PARAMS((const char *, int)); +static char *pcomp_filename_completion_function (const char *, int); #if defined (ARRAY_VARS) -static SHELL_VAR *bind_comp_words PARAMS((WORD_LIST *)); +static SHELL_VAR *bind_comp_words (WORD_LIST *); #endif -static void bind_compfunc_variables PARAMS((char *, int, WORD_LIST *, int, int)); -static void unbind_compfunc_variables PARAMS((int)); -static WORD_LIST *build_arg_list PARAMS((char *, const char *, const char *, WORD_LIST *, int)); -static WORD_LIST *command_line_to_word_list PARAMS((char *, int, int, int *, int *)); +static void bind_compfunc_variables (char *, int, WORD_LIST *, int, int); +static void unbind_compfunc_variables (void *); /* XXX uw_ */ +static WORD_LIST *build_arg_list (const char *, const char *, const char *, WORD_LIST *, int); +static WORD_LIST *command_line_to_word_list (char *, int, int, int *, int *); + +static int compgen_compspec = 0; /* are we generating completions for compgen? */ #ifdef DEBUG static int progcomp_debug = 0; @@ -191,20 +187,14 @@ int pcomp_ind; #ifdef DEBUG /* Debugging code */ static void -#if defined (PREFER_STDARG) debug_printf (const char *format, ...) -#else -debug_printf (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; if (progcomp_debug == 0) return; - SH_VA_START (args, format); + va_start (args, format); fprintf (stdout, "DEBUG: "); vfprintf (stdout, format, args); @@ -219,15 +209,13 @@ debug_printf (format, va_alist) /* Functions to manage the item lists */ void -set_itemlist_dirty (it) - ITEMLIST *it; +set_itemlist_dirty (ITEMLIST *it) { it->flags |= LIST_DIRTY; } void -initialize_itemlist (itp) - ITEMLIST *itp; +initialize_itemlist (ITEMLIST *itp) { (*itp->list_getter) (itp); itp->flags |= LIST_INITIALIZED; @@ -235,8 +223,7 @@ initialize_itemlist (itp) } void -clean_itemlist (itp) - ITEMLIST *itp; +clean_itemlist (ITEMLIST *itp) { STRINGLIST *sl; @@ -253,12 +240,10 @@ clean_itemlist (itp) itp->flags &= ~(LIST_DONTFREE|LIST_DONTFREEMEMBERS|LIST_INITIALIZED|LIST_DIRTY); } - static int -shouldexp_filterpat (s) - char *s; +shouldexp_filterpat (char *s) { - register char *p; + char *p; for (p = s; p && *p; p++) { @@ -274,9 +259,7 @@ shouldexp_filterpat (s) quote a `&' and inhibit substitution. Returns a new string. This just calls stringlib.c:strcreplace(). */ static char * -preproc_filterpat (pat, text) - char *pat; - const char *text; +preproc_filterpat (const char *pat, const char *text) { char *ret; @@ -290,10 +273,7 @@ preproc_filterpat (pat, text) a new STRINGLIST with the matching members of SL *copied*. Any non-matching members of SL->list are *freed*. */ STRINGLIST * -filter_stringlist (sl, filterpat, text) - STRINGLIST *sl; - char *filterpat; - const char *text; +filter_stringlist (STRINGLIST *sl, char *filterpat, const char *text) { int i, m, not; STRINGLIST *ret; @@ -332,11 +312,11 @@ filter_stringlist (sl, filterpat, text) This understands how rl_completion_matches sets matches[0] (the lcd of the strings in the list, unless it's the only match). */ STRINGLIST * -completions_to_stringlist (matches) - char **matches; +completions_to_stringlist (char **matches) { STRINGLIST *sl; - int mlen, i, n; + int i, n; + size_t mlen; mlen = (matches == 0) ? 0 : strvec_len (matches); sl = strlist_create (mlen + 1); @@ -363,12 +343,12 @@ completions_to_stringlist (matches) The caller is responsible for setting ITP->flags correctly. */ static int -it_init_aliases (itp) - ITEMLIST *itp; +it_init_aliases (ITEMLIST *itp) { #ifdef ALIAS alias_t **alias_list; - register int i, n; + int i; + size_t n; STRINGLIST *sl; alias_list = all_aliases (); @@ -385,21 +365,20 @@ it_init_aliases (itp) sl->list[n] = (char *)NULL; sl->list_size = sl->list_len = n; itp->slist = sl; + free (alias_list); #else itp->slist = (STRINGLIST *)NULL; #endif - free (alias_list); return 1; } static void -init_itemlist_from_varlist (itp, svfunc) - ITEMLIST *itp; - SVFUNC *svfunc; +init_itemlist_from_varlist (ITEMLIST *itp, SVFUNC *svfunc) { SHELL_VAR **vlist; STRINGLIST *sl; - register int i, n; + int i; + size_t n; vlist = (*svfunc) (); if (vlist == 0) @@ -418,8 +397,7 @@ init_itemlist_from_varlist (itp, svfunc) } static int -it_init_arrayvars (itp) - ITEMLIST *itp; +it_init_arrayvars (ITEMLIST *itp) { #if defined (ARRAY_VARS) init_itemlist_from_varlist (itp, all_array_variables); @@ -430,8 +408,7 @@ it_init_arrayvars (itp) } static int -it_init_bindings (itp) - ITEMLIST *itp; +it_init_bindings (ITEMLIST *itp) { char **blist; STRINGLIST *sl; @@ -449,11 +426,11 @@ it_init_bindings (itp) } static int -it_init_builtins (itp) - ITEMLIST *itp; +it_init_builtins (ITEMLIST *itp) { STRINGLIST *sl; - register int i, n; + int i; + size_t n; sl = strlist_create (num_shell_builtins); for (i = n = 0; i < num_shell_builtins; i++) @@ -466,11 +443,11 @@ it_init_builtins (itp) } static int -it_init_enabled (itp) - ITEMLIST *itp; +it_init_enabled (ITEMLIST *itp) { STRINGLIST *sl; - register int i, n; + int i; + size_t n; sl = strlist_create (num_shell_builtins); for (i = n = 0; i < num_shell_builtins; i++) @@ -485,11 +462,11 @@ it_init_enabled (itp) } static int -it_init_disabled (itp) - ITEMLIST *itp; +it_init_disabled (ITEMLIST *itp) { STRINGLIST *sl; - register int i, n; + int i; + size_t n; sl = strlist_create (num_shell_builtins); for (i = n = 0; i < num_shell_builtins; i++) @@ -504,16 +481,14 @@ it_init_disabled (itp) } static int -it_init_exported (itp) - ITEMLIST *itp; +it_init_exported (ITEMLIST *itp) { init_itemlist_from_varlist (itp, all_exported_variables); return 0; } static int -it_init_functions (itp) - ITEMLIST *itp; +it_init_functions (ITEMLIST *itp) { init_itemlist_from_varlist (itp, all_visible_functions); return 0; @@ -522,11 +497,11 @@ it_init_functions (itp) /* Like it_init_builtins, but includes everything the help builtin looks at, not just builtins with an active implementing function. */ static int -it_init_helptopics (itp) - ITEMLIST *itp; +it_init_helptopics (ITEMLIST *itp) { STRINGLIST *sl; - register int i, n; + int i; + size_t n; sl = strlist_create (num_shell_builtins); for (i = n = 0; i < num_shell_builtins; i++) @@ -538,8 +513,7 @@ it_init_helptopics (itp) } static int -it_init_hostnames (itp) - ITEMLIST *itp; +it_init_hostnames (ITEMLIST *itp) { STRINGLIST *sl; @@ -553,14 +527,12 @@ it_init_hostnames (itp) } static int -it_init_joblist (itp, jstate) - ITEMLIST *itp; - int jstate; +it_init_joblist (ITEMLIST *itp, int jstate) { #if defined (JOB_CONTROL) STRINGLIST *sl; - register int i; - register PROCESS *p; + int i; + PROCESS *p; char *s, *t; JOB *j; JOB_STATE ws; /* wanted state */ @@ -595,32 +567,29 @@ it_init_joblist (itp, jstate) } static int -it_init_jobs (itp) - ITEMLIST *itp; +it_init_jobs (ITEMLIST *itp) { return (it_init_joblist (itp, -1)); } static int -it_init_running (itp) - ITEMLIST *itp; +it_init_running (ITEMLIST *itp) { return (it_init_joblist (itp, 0)); } static int -it_init_stopped (itp) - ITEMLIST *itp; +it_init_stopped (ITEMLIST *itp) { return (it_init_joblist (itp, 1)); } static int -it_init_keywords (itp) - ITEMLIST *itp; +it_init_keywords (ITEMLIST *itp) { STRINGLIST *sl; - register int i, n; + int i; + size_t n; for (n = 0; word_token_alist[n].word; n++) ; @@ -634,8 +603,7 @@ it_init_keywords (itp) } static int -it_init_signals (itp) - ITEMLIST *itp; +it_init_signals (ITEMLIST *itp) { STRINGLIST *sl; @@ -648,16 +616,14 @@ it_init_signals (itp) } static int -it_init_variables (itp) - ITEMLIST *itp; +it_init_variables (ITEMLIST *itp) { init_itemlist_from_varlist (itp, all_visible_variables); return 0; } static int -it_init_setopts (itp) - ITEMLIST *itp; +it_init_setopts (ITEMLIST *itp) { STRINGLIST *sl; @@ -670,8 +636,7 @@ it_init_setopts (itp) } static int -it_init_shopts (itp) - ITEMLIST *itp; +it_init_shopts (ITEMLIST *itp) { STRINGLIST *sl; @@ -689,12 +654,10 @@ it_init_shopts (itp) new one before trying the match. TEXT is dequoted before attempting a match. */ static STRINGLIST * -gen_matches_from_itemlist (itp, text) - ITEMLIST *itp; - const char *text; +gen_matches_from_itemlist (ITEMLIST *itp, const char *text) { STRINGLIST *ret, *sl; - int tlen, i, n; + size_t tlen, i, n; char *ntxt; if ((itp->flags & (LIST_DIRTY|LIST_DYNAMIC)) || @@ -727,9 +690,7 @@ gen_matches_from_itemlist (itp, text) /* A wrapper for rl_filename_completion_function that dequotes the filename before attempting completions. */ static char * -pcomp_filename_completion_function (text, state) - const char *text; - int state; +pcomp_filename_completion_function (const char *text, int state) { static char *dfn; /* dequoted filename */ int iscompgen, iscompleting; @@ -823,9 +784,7 @@ pcomp_filename_completion_function (text, state) /* Functions to generate lists of matches from the actions member of CS. */ static STRINGLIST * -gen_action_completions (cs, text) - COMPSPEC *cs; - const char *text; +gen_action_completions (COMPSPEC *cs, const char *text) { STRINGLIST *ret, *tmatches; char **cmatches; /* from rl_completion_matches ... */ @@ -885,20 +844,14 @@ gen_action_completions (cs, text) TEXT as a match prefix, or just go without? Currently, the code does not use TEXT, just globs CS->globpat and returns the results. If we do decide to use TEXT, we should call quote_string_for_globbing before the call to - glob_filename (in which case we could use shell_glob_filename). */ + glob_filename (in which case we would use shell_glob_filename). */ static STRINGLIST * -gen_globpat_matches (cs, text) - COMPSPEC *cs; - const char *text; +gen_globpat_matches (COMPSPEC *cs, const char *text) { STRINGLIST *sl; - int gflags; sl = strlist_create (0); - gflags = glob_star ? GX_GLOBSTAR : 0; - sl->list = glob_filename (cs->globpat, gflags); - if (GLOB_FAILED (sl->list)) - sl->list = (char **)NULL; + sl->list = noquote_glob_filename (cs->globpat); if (sl->list) sl->list_len = sl->list_size = strvec_len (sl->list); return sl; @@ -907,13 +860,11 @@ gen_globpat_matches (cs, text) /* Perform the shell word expansions on CS->words and return the results. Again, this ignores TEXT. */ static STRINGLIST * -gen_wordlist_matches (cs, text) - COMPSPEC *cs; - const char *text; +gen_wordlist_matches (COMPSPEC *cs, const char *text) { WORD_LIST *l, *l2; STRINGLIST *sl; - int nw, tlen; + size_t nw, tlen; char *ntxt; /* dequoted TEXT to use in comparisons */ if (cs->words == 0 || cs->words[0] == '\0') @@ -933,7 +884,7 @@ gen_wordlist_matches (cs, text) l2 = expand_words_shellexp (l); dispose_words (l); - nw = list_length (l2); + nw = list_length ((GENERIC_LIST *)l2); sl = strlist_create (nw + 1); ntxt = bash_dequote_text (text); @@ -954,8 +905,7 @@ gen_wordlist_matches (cs, text) #ifdef ARRAY_VARS static SHELL_VAR * -bind_comp_words (lwords) - WORD_LIST *lwords; +bind_comp_words (WORD_LIST *lwords) { SHELL_VAR *v; @@ -978,11 +928,7 @@ bind_comp_words (lwords) #endif /* ARRAY_VARS */ static void -bind_compfunc_variables (line, ind, lwords, cw, exported) - char *line; - int ind; - WORD_LIST *lwords; - int cw, exported; +bind_compfunc_variables (char *line, int ind, WORD_LIST *lwords, int cw, int exported) { char ibuf[INT_STRLEN_BOUND(int) + 1]; char *value; @@ -1031,8 +977,7 @@ bind_compfunc_variables (line, ind, lwords, cw, exported) } static void -unbind_compfunc_variables (exported) - int exported; +unbind_compfunc_variables (void *exported) { unbind_variable_noref ("COMP_LINE"); unbind_variable_noref ("COMP_POINT"); @@ -1059,12 +1004,7 @@ unbind_compfunc_variables (exported) make do with the COMP_LINE and COMP_POINT variables. */ static WORD_LIST * -build_arg_list (cmd, cname, text, lwords, ind) - char *cmd; - const char *cname; - const char *text; - WORD_LIST *lwords; - int ind; +build_arg_list (const char *cmd, const char *cname, const char *text, WORD_LIST *lwords, int ind) { WORD_LIST *ret, *cl, *l; WORD_DESC *w; @@ -1103,27 +1043,22 @@ build_arg_list (cmd, cname, text, lwords, ind) variable, this does nothing if arrays are not compiled into the shell. */ static STRINGLIST * -gen_shell_function_matches (cs, cmd, text, line, ind, lwords, nw, cw, foundp) - COMPSPEC *cs; - const char *cmd; - const char *text; - char *line; - int ind; - WORD_LIST *lwords; - int nw, cw; - int *foundp; +gen_shell_function_matches (COMPSPEC *cs, const char *cmd, const char *text, + char *line, int ind, WORD_LIST *lwords, + int nw, int cw, int *foundp) { char *funcname; STRINGLIST *sl; SHELL_VAR *f, *v; WORD_LIST *cmdlist; - int fval, found; + int fval, found, local_compgen; sh_parser_state_t ps; sh_parser_state_t * restrict pps; #if defined (ARRAY_VARS) ARRAY *a; #endif + local_compgen = compgen_compspec; found = 0; if (foundp) *foundp = found; @@ -1151,14 +1086,24 @@ gen_shell_function_matches (cs, cmd, text, line, ind, lwords, nw, cw, foundp) pps = &ps; save_parser_state (pps); begin_unwind_frame ("gen-shell-function-matches"); - add_unwind_protect (restore_parser_state, (char *)pps); - add_unwind_protect (dispose_words, (char *)cmdlist); - add_unwind_protect (unbind_compfunc_variables, (char *)0); + add_unwind_protect (uw_restore_parser_state, pps); + add_unwind_protect (uw_dispose_words, cmdlist); + add_unwind_protect (unbind_compfunc_variables, NULL); + if (local_compgen == 0) + { + add_unwind_protect (uw_rl_set_signals, (char *)NULL); + rl_clear_signals (); + } fval = execute_shell_function (f, cmdlist); discard_unwind_frame ("gen-shell-function-matches"); restore_parser_state (pps); + if (local_compgen == 0) + { + QUIT; + rl_set_signals (); + } found = fval != EX_NOTFOUND; if (fval == EX_RETRYFAIL) @@ -1208,17 +1153,13 @@ gen_shell_function_matches (cs, cmd, text, line, ind, lwords, nw, cw, foundp) STRINGLIST from the results and return it. */ static STRINGLIST * -gen_command_matches (cs, cmd, text, line, ind, lwords, nw, cw) - COMPSPEC *cs; - const char *cmd; - const char *text; - char *line; - int ind; - WORD_LIST *lwords; - int nw, cw; +gen_command_matches (COMPSPEC *cs, const char *cmd, const char *text, + char *line, int ind, WORD_LIST *lwords, + int nw, int cw) { char *csbuf, *cscmd, *t; - int cmdlen, cmdsize, n, ws, we; + int ws, we; + size_t cmdlen, cmdsize, n; WORD_LIST *cmdlist, *cl; WORD_DESC *tw; STRINGLIST *sl; @@ -1260,7 +1201,7 @@ gen_command_matches (cs, cmd, text, line, ind, lwords, nw, cw) /* Now clean up and destroy everything. */ dispose_words (cmdlist); free (cscmd); - unbind_compfunc_variables (1); + unbind_compfunc_variables (""); if (csbuf == 0 || *csbuf == '\0') { @@ -1281,7 +1222,7 @@ gen_command_matches (cs, cmd, text, line, ind, lwords, nw, cw) we++; } t = substring (csbuf, ws, we); - if (sl->list_len >= sl->list_size - 1) + if (sl->list_len + 1 >= sl->list_size) strlist_resize (sl, sl->list_size + 16); sl->list[sl->list_len++] = t; while (csbuf[we] == '\n') we++; @@ -1294,18 +1235,12 @@ gen_command_matches (cs, cmd, text, line, ind, lwords, nw, cw) } static WORD_LIST * -command_line_to_word_list (line, llen, sentinel, nwp, cwp) - char *line; - int llen, sentinel, *nwp, *cwp; +command_line_to_word_list (char *line, int llen, int sentinel, int *nwp, int *cwp) { WORD_LIST *ret; const char *delims; -#if 0 - delims = "()<>;&| \t\n"; /* shell metacharacters break words */ -#else delims = rl_completer_word_break_characters; -#endif ret = split_at_delims (line, llen, delims, sentinel, SD_NOQUOTEDELIM|SD_COMPLETE, nwp, cwp); return (ret); } @@ -1313,12 +1248,8 @@ command_line_to_word_list (line, llen, sentinel, nwp, cwp) /* Evaluate COMPSPEC *cs and return all matches for WORD. */ STRINGLIST * -gen_compspec_completions (cs, cmd, word, start, end, foundp) - COMPSPEC *cs; - const char *cmd; - const char *word; - int start, end; - int *foundp; +gen_compspec_completions (COMPSPEC *cs, const char *cmd, const char *word, + int start, int end, int *foundp) { STRINGLIST *ret, *tmatches; char *line; @@ -1328,6 +1259,7 @@ gen_compspec_completions (cs, cmd, word, start, end, foundp) COMPSPEC *tcs; found = 1; + compgen_compspec = this_shell_builtin == compgen_builtin; #ifdef DEBUG debug_printf ("gen_compspec_completions (%s, %s, %d, %d)", cmd, word, start, end); @@ -1522,13 +1454,15 @@ gen_compspec_completions (cs, cmd, word, start, end, foundp) } void -pcomp_set_readline_variables (flags, nval) - int flags, nval; +pcomp_set_readline_variables (int flags, int nval) { /* If the user specified that the compspec returns filenames, make sure that readline knows it. */ if (flags & COPT_FILENAMES) rl_filename_completion_desired = nval; + /* If we want to quote everything, not just filenames, tell readline. */ + if (flags & COPT_FULLQUOTE) + rl_full_quoting_desired = nval; /* If the user doesn't want a space appended, tell readline. */ if (flags & COPT_NOSPACE) rl_completion_suppress_append = nval; @@ -1536,6 +1470,7 @@ pcomp_set_readline_variables (flags, nval) option is supposed to turn it off */ if (flags & COPT_NOQUOTE) rl_filename_quoting_desired = 1 - nval; + /* Ditto */ if (flags & COPT_NOSORT) rl_sort_completion_matches = 1 - nval; } @@ -1543,9 +1478,7 @@ pcomp_set_readline_variables (flags, nval) /* Set or unset FLAGS in the options word of the current compspec. SET_OR_UNSET is 1 for setting, 0 for unsetting. */ void -pcomp_set_compspec_options (cs, flags, set_or_unset) - COMPSPEC *cs; - int flags, set_or_unset; +pcomp_set_compspec_options (COMPSPEC *cs, int flags, int set_or_unset) { if (cs == 0 && ((cs = pcomp_curcs) == 0)) return; @@ -1556,18 +1489,16 @@ pcomp_set_compspec_options (cs, flags, set_or_unset) } static STRINGLIST * -gen_progcomp_completions (ocmd, cmd, word, start, end, foundp, retryp, lastcs) - const char *ocmd; - const char *cmd; - const char *word; - int start, end; - int *foundp, *retryp; - COMPSPEC **lastcs; +gen_progcomp_completions (const char *ocmd, const char *cmd, const char *word, + int start, int end, int *foundp, int *retryp, + COMPSPEC **lastcs) { COMPSPEC *cs, *oldcs; const char *oldcmd, *oldtxt; STRINGLIST *ret; + compgen_compspec = 0; + cs = progcomp_search (ocmd); if (cs == 0 || cs == *lastcs) @@ -1591,7 +1522,7 @@ gen_progcomp_completions (ocmd, cmd, word, start, end, foundp, retryp, lastcs) oldtxt = pcomp_curtxt; pcomp_curcs = cs; - pcomp_curcmd = cmd; + pcomp_curcmd = ocmd; pcomp_curtxt = word; ret = gen_compspec_completions (cs, cmd, word, start, end, foundp); @@ -1619,10 +1550,8 @@ gen_progcomp_completions (ocmd, cmd, word, start, end, foundp, retryp, lastcs) bound the command currently being completed in pcomp_line (usually rl_line_buffer). */ char ** -programmable_completions (cmd, word, start, end, foundp) - const char *cmd; - const char *word; - int start, end, *foundp; +programmable_completions (const char *cmd, const char *word, + int start, int end, int *foundp) { COMPSPEC *lastcs; STRINGLIST *ret; diff --git a/pcomplete.h b/pcomplete.h index 2a68e6a3f..6c0a0fbfe 100644 --- a/pcomplete.h +++ b/pcomplete.h @@ -1,7 +1,7 @@ /* pcomplete.h - structure definitions and other stuff for programmable completion. */ -/* Copyright (C) 1999-2020 Free Software Foundation, Inc. +/* Copyright (C) 1999-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -76,8 +76,9 @@ typedef struct compspec { #define COPT_BASHDEFAULT (1<<6) #define COPT_PLUSDIRS (1<<7) #define COPT_NOSORT (1<<8) +#define COPT_FULLQUOTE (1<<9) -#define COPT_LASTUSER COPT_NOSORT +#define COPT_LASTUSER COPT_FULLQUOTE #define PCOMP_RETRYFAIL (COPT_LASTUSER << 1) #define PCOMP_NOTFOUND (COPT_LASTUSER << 2) @@ -87,7 +88,7 @@ typedef struct compspec { completions. */ typedef struct _list_of_items { int flags; - int (*list_getter) PARAMS((struct _list_of_items *)); /* function to call to get the list */ + int (*list_getter) (struct _list_of_items *); /* function to call to get the list */ STRINGLIST *slist; @@ -147,31 +148,31 @@ extern COMPSPEC *pcomp_curcs; extern const char *pcomp_curcmd; /* Functions from pcomplib.c */ -extern COMPSPEC *compspec_create PARAMS((void)); -extern void compspec_dispose PARAMS((COMPSPEC *)); -extern COMPSPEC *compspec_copy PARAMS((COMPSPEC *)); +extern COMPSPEC *compspec_create (void); +extern void compspec_dispose (COMPSPEC *); +extern COMPSPEC *compspec_copy (COMPSPEC *); -extern void progcomp_create PARAMS((void)); -extern void progcomp_flush PARAMS((void)); -extern void progcomp_dispose PARAMS((void)); +extern void progcomp_create (void); +extern void progcomp_flush (void); +extern void progcomp_dispose (void); -extern int progcomp_size PARAMS((void)); +extern int progcomp_size (void); -extern int progcomp_insert PARAMS((char *, COMPSPEC *)); -extern int progcomp_remove PARAMS((char *)); +extern int progcomp_insert (char *, COMPSPEC *); +extern int progcomp_remove (const char *); -extern COMPSPEC *progcomp_search PARAMS((const char *)); +extern COMPSPEC *progcomp_search (const char *); -extern void progcomp_walk PARAMS((hash_wfunc *)); +extern void progcomp_walk (hash_wfunc *); /* Functions from pcomplete.c */ -extern void set_itemlist_dirty PARAMS((ITEMLIST *)); +extern void set_itemlist_dirty (ITEMLIST *); -extern STRINGLIST *completions_to_stringlist PARAMS((char **)); +extern STRINGLIST *completions_to_stringlist (char **); -extern STRINGLIST *gen_compspec_completions PARAMS((COMPSPEC *, const char *, const char *, int, int, int *)); -extern char **programmable_completions PARAMS((const char *, const char *, int, int, int *)); +extern STRINGLIST *gen_compspec_completions (COMPSPEC *, const char *, const char *, int, int, int *); +extern char **programmable_completions (const char *, const char *, int, int, int *); -extern void pcomp_set_readline_variables PARAMS((int, int)); -extern void pcomp_set_compspec_options PARAMS((COMPSPEC *, int, int)); +extern void pcomp_set_readline_variables (int, int); +extern void pcomp_set_compspec_options (COMPSPEC *, int, int); #endif /* _PCOMPLETE_H_ */ diff --git a/pcomplib.c b/pcomplib.c index e8df62ece..671c3e387 100644 --- a/pcomplib.c +++ b/pcomplib.c @@ -1,6 +1,6 @@ /* pcomplib.c - library functions for programmable completion. */ -/* Copyright (C) 1999-2021 Free Software Foundation, Inc. +/* Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -43,10 +43,10 @@ HASH_TABLE *prog_completes = (HASH_TABLE *)NULL; -static void free_progcomp PARAMS((PTR_T)); +static void free_progcomp (PTR_T); COMPSPEC * -compspec_create () +compspec_create (void) { COMPSPEC *ret; @@ -69,8 +69,7 @@ compspec_create () } void -compspec_dispose (cs) - COMPSPEC *cs; +compspec_dispose (COMPSPEC *cs) { cs->refcount--; if (cs->refcount == 0) @@ -89,8 +88,7 @@ compspec_dispose (cs) } COMPSPEC * -compspec_copy (cs) - COMPSPEC *cs; +compspec_copy (COMPSPEC *cs) { COMPSPEC *new; @@ -113,21 +111,20 @@ compspec_copy (cs) } void -progcomp_create () +progcomp_create (void) { if (prog_completes == 0) prog_completes = hash_create (COMPLETE_HASH_BUCKETS); } int -progcomp_size () +progcomp_size (void) { return (HASH_ENTRIES (prog_completes)); } static void -free_progcomp (data) - PTR_T data; +free_progcomp (PTR_T data) { COMPSPEC *cs; @@ -136,14 +133,14 @@ free_progcomp (data) } void -progcomp_flush () +progcomp_flush (void) { if (prog_completes) hash_flush (prog_completes, free_progcomp); } void -progcomp_dispose () +progcomp_dispose (void) { if (prog_completes) hash_dispose (prog_completes); @@ -151,8 +148,7 @@ progcomp_dispose () } int -progcomp_remove (cmd) - char *cmd; +progcomp_remove (const char *cmd) { register BUCKET_CONTENTS *item; @@ -172,9 +168,7 @@ progcomp_remove (cmd) } int -progcomp_insert (cmd, cs) - char *cmd; - COMPSPEC *cs; +progcomp_insert (char *cmd, COMPSPEC *cs) { register BUCKET_CONTENTS *item; @@ -196,8 +190,7 @@ progcomp_insert (cmd, cs) } COMPSPEC * -progcomp_search (cmd) - const char *cmd; +progcomp_search (const char *cmd) { register BUCKET_CONTENTS *item; COMPSPEC *cs; @@ -216,8 +209,7 @@ progcomp_search (cmd) } void -progcomp_walk (pfunc) - hash_wfunc *pfunc; +progcomp_walk (hash_wfunc *pfunc) { if (prog_completes == 0 || pfunc == 0 || HASH_ENTRIES (prog_completes) == 0) return; diff --git a/po/POTFILES.in b/po/POTFILES.in index 2a8f36947..a900e6c1b 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -73,7 +73,7 @@ test.c trap.c variables.c version.c -version2.c +#version2.c xmalloc.c # Apparently gettext's defaults cannot handle files that exist outside of the diff --git a/po/af.gmo b/po/af.gmo index 56f6b5aab324daa15127accf18f6cd0040d6abc9..10f73ae6923e494e01149dbb784d32faf72ccb90 100644 GIT binary patch delta 162 zc-m{=`pY?CPJJ9B149)P1A{mN1H(;b1_liv{Sin@0BI=}1_nMLZ49KvfV2~k<^|G` zK$;aurvqtDAe{@Oxqx&z3&flzAT0o-X8~y?AiWw$a|7vfK$-(c-vZK-K>9HY!)9s5 ea3<E!5I0?m$u-P99EVpGr7GkcUNxDI<r4rIoENYF delta 165 zc-s5R*}yenPJJ>X149)P1A{mN1H(OL1_m`C{S8P<0BKnk1_nMLZ3d*pfV3-+<^|F* zK$;auX8~zWAYA~Yxqx&P3&fmOAT0o-=K^UZAiWMqa|7v%K$-(c-v!c=K>8UA!)9s5 ha3(I#V1Hc;3sXy7!^!2$J#4RvQWbJuP3C6#1OQ?27uf&+ diff --git a/po/af.po b/po/af.po index d9e5f0845..dc7fc2d67 100644 --- a/po/af.po +++ b/po/af.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 2.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2004-03-17 13:48+0200\n" "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n" "Language-Team: Afrikaans <i18n@af.org.za>\n" @@ -16,124 +16,124 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 #, fuzzy msgid "bad array subscript" msgstr "Os/2 Biskaart Skikking" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: kan nie %s skep nie" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" -msgstr "" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" +msgstr "Pypfout.\n" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "%s: bevel nie gevind nie" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, fuzzy, c-format msgid "%s: cannot read: %s" msgstr "%s: kan nie %s skep nie" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, fuzzy, c-format msgid "`%s': unknown function name" msgstr "%s: leesalleen-funksie" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "" -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, fuzzy, c-format msgid "`%s': cannot unbind" msgstr "%s: bevel nie gevind nie" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "" -#: builtins/caller.def:136 +#: builtins/caller.def:135 msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -142,360 +142,374 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 #, fuzzy msgid "too many arguments" msgstr "te veel parameters" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "boonste lêergids." -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "" -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "" -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "" -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, fuzzy, c-format msgid "%s: option requires an argument" msgstr "%s: option `%s' requires an argument\n" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "" -#: builtins/common.c:207 +#: builtins/common.c:190 #, fuzzy, c-format msgid "%s: not found" msgstr "%s: bevel nie gevind nie" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, fuzzy, c-format msgid "%s: invalid option" msgstr "%s: illegal option -- %c\n" -#: builtins/common.c:223 +#: builtins/common.c:204 #, fuzzy, c-format msgid "%s: invalid option name" msgstr "%s: illegal option -- %c\n" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, fuzzy, c-format msgid "`%s': not a valid identifier" msgstr "Die datum is nie geldige!" -#: builtins/common.c:240 +#: builtins/common.c:219 #, fuzzy msgid "invalid octal number" msgstr "Die sein nommer wat was gevang het" -#: builtins/common.c:242 +#: builtins/common.c:221 #, fuzzy msgid "invalid hex number" msgstr "Die sein nommer wat was gevang het" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 #, fuzzy msgid "invalid number" msgstr "Die sein nommer wat was gevang het" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, fuzzy, c-format msgid "%s: readonly variable" msgstr "Veranderlike boom" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: kan nie %s skep nie" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 #, fuzzy msgid "argument" msgstr "argument verwag\n" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "" -#: builtins/common.c:299 +#: builtins/common.c:271 #, fuzzy, c-format msgid "%s: no job control" msgstr "geen taakbeheer in hierdie dop nie" -#: builtins/common.c:301 +#: builtins/common.c:273 #, fuzzy msgid "no job control" msgstr "geen taakbeheer in hierdie dop nie" -#: builtins/common.c:311 +#: builtins/common.c:282 #, fuzzy, c-format msgid "%s: restricted" msgstr "Die bediener beëindig Die verbinding." -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "" -#: builtins/common.c:330 +#: builtins/common.c:300 #, fuzzy, c-format msgid "write error: %s" msgstr "pypfout: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, fuzzy, c-format msgid "%s: ambiguous job spec" msgstr "%s: dubbelsinnige herroetering" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, fuzzy, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: kan nie %s skep nie" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, fuzzy, c-format msgid "%s: cannot unset" msgstr "%s: kan nie %s skep nie" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: leesalleen-funksie" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, fuzzy, c-format msgid "%s: cannot destroy array variables in this way" msgstr "Kan nie soek 'n handtekening in hierdie boodskap!" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, fuzzy, c-format msgid "cannot open shared object %s: %s" msgstr "Kan nie oopmaak vir skrip-afvoer nie: \"" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, fuzzy, c-format msgid "%s: cannot delete: %s" msgstr "%s: kan nie %s skep nie" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: is 'n gids" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, fuzzy, c-format msgid "%s: not a regular file" msgstr "%s: kan nie 'n binêre lêer uitvoer nie" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: kan nie 'n binêre lêer uitvoer nie" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, fuzzy, c-format msgid "%s: cannot execute: %s" msgstr "%s: kan nie %s skep nie" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, fuzzy, c-format msgid "logout\n" msgstr "Afteken" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 #, fuzzy msgid "no command found" msgstr "%s: bevel nie gevind nie" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, fuzzy, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: kan nie %s skep nie" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "" @@ -510,11 +524,11 @@ msgstr "%s: illegal option -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: option `%s' requires an argument\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "" @@ -542,12 +556,12 @@ msgid "" "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." msgstr "" -#: builtins/help.def:223 +#: builtins/help.def:214 #, fuzzy, c-format msgid "%s: cannot open: %s" msgstr "%s: kan nie %s skep nie" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -559,21 +573,30 @@ msgid "" "\n" msgstr "" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "" -#: builtins/history.def:338 +#: builtins/history.def:278 +msgid "empty filename" +msgstr "" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "" -#: builtins/history.def:449 +#: builtins/history.def:457 #, fuzzy, c-format msgid "%s: history expansion failed" msgstr "%s: heelgetal-uitdrukking is verwag\n" @@ -587,117 +610,117 @@ msgstr "Veranderlike boom" msgid "no other options allowed with `-x'" msgstr "" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "" -#: builtins/kill.def:274 +#: builtins/kill.def:271 #, fuzzy msgid "Unknown error" msgstr "Onbekende fout %d" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 #, fuzzy msgid "expression expected" msgstr "Bools uitdrukking verwag" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, fuzzy, c-format msgid "%s: invalid array origin" msgstr "Os/2 Biskaart Skikking" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" +msgid "%s: %s" msgstr "" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 #, fuzzy msgid "no other directory" msgstr "boonste lêergids." -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, fuzzy, c-format msgid "%s: invalid argument" msgstr "%s: option `%s' requires an argument\n" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 #, fuzzy msgid "<no current directory>" msgstr "Nuutste gebruik word werksaam gids" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -721,7 +744,7 @@ msgid "" "\tdirs when invoked without options, starting with zero." msgstr "" -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -746,7 +769,7 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -767,335 +790,344 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "" -#: builtins/read.def:827 +#: builtins/read.def:868 #, fuzzy, c-format msgid "read error: %d: %s" msgstr "pypfout: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "" -#: builtins/set.def:969 +#: builtins/set.def:981 #, fuzzy, c-format msgid "%s: not an array variable" msgstr "Veranderlike boom" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, fuzzy, c-format msgid "%s: not a function" msgstr "%s: leesalleen-funksie" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, fuzzy, c-format msgid "%s: cannot export" msgstr "%s: kan nie %s skep nie" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 #, fuzzy msgid "shift count" msgstr "Shift" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "" -#: builtins/source.def:154 +#: builtins/source.def:153 #, fuzzy, c-format msgid "%s: file not found" msgstr "%s: bevel nie gevind nie" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 #, fuzzy msgid "cannot suspend a login shell" msgstr "Begin aanteken tolk" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "" -#: builtins/type.def:275 -#, fuzzy, c-format -msgid "%s is a function\n" -msgstr "%s: leesalleen-funksie" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, fuzzy, c-format +msgid "%s is a function\n" +msgstr "%s: leesalleen-funksie" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, fuzzy, c-format msgid "`%c': bad command" msgstr "%s: illegal option -- %c\n" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, fuzzy, c-format msgid "%s: cannot get limit: %s" msgstr "%s: kan nie %s skep nie" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 #, fuzzy msgid "limit" msgstr "Filter beperk:" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, fuzzy, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: kan nie %s skep nie" -#: builtins/umask.def:115 +#: builtins/umask.def:114 #, fuzzy msgid "octal number" msgstr "Die sein nommer wat was gevang het" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr "" -#: error.c:164 +#: error.c:151 #, fuzzy, c-format msgid "last command: %s\n" msgstr "Bevelreël" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "" #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "" -#: error.c:488 +#: error.c:413 #, fuzzy msgid "unknown command error" msgstr "Onbekende fout %d" -#: error.c:489 +#: error.c:414 #, fuzzy msgid "bad command type" msgstr "bevelnaam" -#: error.c:490 +#: error.c:415 #, fuzzy msgid "bad connector" msgstr "foutiewe verbinder`%d'" -#: error.c:491 +#: error.c:416 #, fuzzy msgid "bad jump" msgstr "Spring na:" -#: error.c:529 +#: error.c:449 #, fuzzy, c-format msgid "%s: unbound variable" msgstr "Veranderlike boom" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 #, fuzzy msgid "pipe error" msgstr "pypfout: %s" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: bevel nie gevind nie" -#: execute_cmd.c:5957 -#, c-format -msgid "%s: %s" -msgstr "" +#: execute_cmd.c:6118 +#, fuzzy, c-format +msgid "%s: %s: bad interpreter" +msgstr "%s: is 'n gids" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: kan nie 'n binêre lêer uitvoer nie" -#: execute_cmd.c:6000 -#, fuzzy, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: is 'n gids" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, fuzzy, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: kan nie 'n binêre lêer uitvoer nie" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, fuzzy, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "kan nie fd %d na fd 0 dupliseer nie: %s" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "" -#: expr.c:291 +#: expr.c:293 #, fuzzy msgid "recursion stack underflow" msgstr "Stapel grootte verhoog" -#: expr.c:478 +#: expr.c:472 #, fuzzy -msgid "syntax error in expression" +msgid "arithmetic syntax error in expression" msgstr "Sintaks fout in patroon" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "Sintaks fout in patroon" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 #, fuzzy msgid "division by 0" msgstr "devisie by nul." -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "" -#: expr.c:647 +#: expr.c:641 #, fuzzy msgid "`:' expected for conditional expression" msgstr "Soek die lêer vir 'n uitdrukking" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "" -#: expr.c:1057 +#: expr.c:1056 #, fuzzy msgid "missing `)'" msgstr "Ontbrekende '>'" -#: expr.c:1108 expr.c:1492 +#: expr.c:1107 expr.c:1490 #, fuzzy -msgid "syntax error: operand expected" +msgid "arithmetic syntax error: operand expected" msgstr "Onverwagte einde van lêer tydens inlees van hulpbron." -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" msgstr "" -#: expr.c:1518 +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" +msgstr "Sintaks fout in patroon" + +#: expr.c:1515 #, fuzzy, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "" @@ -1114,7 +1146,7 @@ msgstr "" msgid "value too great for base" msgstr "waarde te groot vir basis" -#: expr.c:1652 +#: expr.c:1654 #, fuzzy, c-format msgid "%s: expression error\n" msgstr "Pypfout.\n" @@ -1124,46 +1156,51 @@ msgstr "Pypfout.\n" msgid "getcwd: cannot access parent directories" msgstr "Kan nie die program uitvoer nie:" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "" @@ -1173,581 +1210,591 @@ msgstr "" msgid "describe_pid: %ld: no such pid" msgstr "E108: Geen veranderlike: \"%s\"" -#: jobs.c:1854 +#: jobs.c:1853 #, fuzzy, c-format msgid "Signal %d" msgstr "Sein kwaliteit:" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Klaar" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 #, fuzzy msgid "Stopped" msgstr "Op gehou" -#: jobs.c:1877 +#: jobs.c:1873 #, fuzzy, c-format msgid "Stopped(%s)" msgstr "Op gehou" -#: jobs.c:1881 +#: jobs.c:1877 #, fuzzy msgid "Running" msgstr "aktief" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Klaar(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Verlaat %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Onbekende status" -#: jobs.c:1990 +#: jobs.c:1983 #, fuzzy, c-format msgid "(core dumped) " msgstr "Kern Ontwikkelaar" -#: jobs.c:2009 +#: jobs.c:2002 #, fuzzy, c-format msgid " (wd: %s)" msgstr "Aktiveer nou dadelik" -#: jobs.c:2250 +#: jobs.c:2229 #, fuzzy, c-format msgid "child setpgid (%ld to %ld)" msgstr "Fout in die skryf van %s" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: kan nie %s skep nie" -#: jobs.c:3558 +#: jobs.c:3573 #, fuzzy, c-format msgid "%s: job has terminated" msgstr "Die bediener beëindig Die verbinding." -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "" -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, fuzzy, c-format msgid " (core dumped)" msgstr "Kern Ontwikkelaar" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, fuzzy, c-format msgid "(wd now: %s)\n" msgstr "Aktiveer nou dadelik" -#: jobs.c:4378 +#: jobs.c:4430 #, fuzzy msgid "initialize_job_control: getpgrp failed" msgstr "Inisialisering van OpenGL het misluk." -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "" -#: jobs.c:4460 +#: jobs.c:4512 #, fuzzy msgid "initialize_job_control: setpgid" msgstr "Inisialisering van OpenGL het misluk." -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "geen taakbeheer in hierdie dop nie" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" "malloc: %s:%d: assertion botched\r\n" msgstr "" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "onbekend" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, fuzzy, c-format msgid "%s: host unknown" msgstr "onbekend" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "" -#: mailcheck.c:439 +#: mailcheck.c:435 #, fuzzy msgid "You have mail in $_" msgstr "Bevestig Pos In" -#: mailcheck.c:464 +#: mailcheck.c:460 #, fuzzy msgid "You have new mail in $_" msgstr "Wanneer nuwe pos arriveer in" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "" -#: make_cmd.c:314 +#: make_cmd.c:286 #, fuzzy msgid "syntax error: arithmetic expression required" msgstr "Sintaks fout in patroon" -#: make_cmd.c:316 +#: make_cmd.c:288 #, fuzzy msgid "syntax error: `;' unexpected" msgstr "Onverwagte einde van lêer tydens inlees van hulpbron." -#: make_cmd.c:317 +#: make_cmd.c:289 #, fuzzy, c-format msgid "syntax error: `((%s))'" msgstr "sintaksfout" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "pypfout: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "" -#: parse.y:4461 +#: parse.y:4943 #, fuzzy msgid "syntax error in conditional expression" msgstr "Sintaks fout in patroon" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "" -#: parse.y:4543 +#: parse.y:5025 #, fuzzy msgid "expected `)'" msgstr "')' is verwag\n" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "" -#: parse.y:4621 +#: parse.y:5104 #, fuzzy, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "%s: binêre operator is verwag\n" -#: parse.y:4625 +#: parse.y:5108 #, fuzzy msgid "conditional binary operator expected" msgstr "%s: binêre operator is verwag\n" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "" -#: parse.y:4662 +#: parse.y:5150 #, fuzzy, c-format msgid "unexpected token `%c' in conditional command" msgstr "Soek die lêer vir 'n uitdrukking" -#: parse.y:4665 +#: parse.y:5153 #, fuzzy, c-format msgid "unexpected token `%s' in conditional command" msgstr "Soek die lêer vir 'n uitdrukking" -#: parse.y:4669 +#: parse.y:5157 #, fuzzy, c-format msgid "unexpected token %d in conditional command" msgstr "Soek die lêer vir 'n uitdrukking" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "" -#: parse.y:6137 +#: parse.y:6756 #, fuzzy, c-format msgid "syntax error near `%s'" msgstr "Sintaks fout in patroon" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "Onverwagte einde van lêer tydens inlees van hulpbron." + +#: parse.y:6772 #, fuzzy msgid "syntax error: unexpected end of file" msgstr "Onverwagte einde van lêer tydens inlees van hulpbron." -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "sintaksfout" -#: parse.y:6216 +#: parse.y:6821 #, fuzzy, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Gebruik Kaart na Los Tronk" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "" -#: redir.c:205 +#: redir.c:200 #, fuzzy, c-format msgid "%s: ambiguous redirect" msgstr "%s: dubbelsinnige herroetering" -#: redir.c:209 +#: redir.c:204 #, fuzzy, c-format msgid "%s: cannot overwrite existing file" msgstr "Jy het gespesifiseer 'n bestaande lêer" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "" -#: redir.c:223 +#: redir.c:218 #, fuzzy, c-format msgid "%s: cannot assign fd to variable" msgstr "Kan nie soek 'n handtekening in hierdie boodskap!" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 #, fuzzy msgid "redirection error: cannot duplicate fd" msgstr "Pypfout.\n" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, fuzzy, c-format msgid "%c%c: invalid option" msgstr "%s: illegal option -- %c\n" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, fuzzy, c-format msgid "%s: Is a directory" msgstr "%s: is 'n gids" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Ek het nie 'n naam nie!" -#: shell.c:2061 +#: shell.c:2053 #, fuzzy, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "bedryfstelselkernweergawe" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" "\t%s [GNU long option] [option] script-file ...\n" msgstr "" -#: shell.c:2064 +#: shell.c:2056 #, fuzzy msgid "GNU long options:\n" msgstr "Gnu C Saamsteller Opsies" -#: shell.c:2068 +#: shell.c:2060 #, fuzzy msgid "Shell options:\n" msgstr "opneem opsies" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "" -#: shell.c:2088 +#: shell.c:2080 #, fuzzy, c-format msgid "\t-%s or -o option\n" msgstr "" "Gebruik so: %s LÊER \n" " of: %s OPSIE\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "" @@ -1950,296 +1997,307 @@ msgstr "" msgid "Unknown Signal #%d" msgstr "Sein kwaliteit:" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, fuzzy, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "--Geen reëls in buffer--" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 #, fuzzy msgid "cannot make pipe for process substitution" msgstr "Woord Substitusie" -#: subst.c:6124 +#: subst.c:6496 #, fuzzy msgid "cannot make child for process substitution" msgstr "Woord Substitusie" -#: subst.c:6198 +#: subst.c:6570 #, fuzzy, c-format msgid "cannot open named pipe %s for reading" msgstr "Kan nie oopmaak vir skrip-afvoer nie: \"" -#: subst.c:6200 +#: subst.c:6572 #, fuzzy, c-format msgid "cannot open named pipe %s for writing" msgstr "Kan nie oopmaak vir skrip-afvoer nie: \"" -#: subst.c:6223 +#: subst.c:6595 #, fuzzy, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "Kan nie oopmaak vir skrip-afvoer nie: \"" -#: subst.c:6370 +#: subst.c:6761 #, fuzzy msgid "command substitution: ignored null byte in input" msgstr "--Geen reëls in buffer--" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" + +#: subst.c:7236 subst.c:7257 #, fuzzy msgid "cannot make pipe for command substitution" msgstr "Woord Substitusie" -#: subst.c:6580 +#: subst.c:7305 #, fuzzy msgid "cannot make child for command substitution" msgstr "Woord Substitusie" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, fuzzy, c-format msgid "%s: invalid variable name" msgstr "Veranderlike boom" -#: subst.c:7478 -#, c-format -msgid "%s: parameter not set" -msgstr "" +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, fuzzy, c-format +msgid "%s: bad substitution" +msgstr "Woord Substitusie" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" +msgid "%s: parameter not set" msgstr "" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, fuzzy, c-format msgid "%s: substring expression < 0" msgstr "ongeldige uitdrukking" -#: subst.c:9560 subst.c:9587 -#, fuzzy, c-format -msgid "%s: bad substitution" -msgstr "Woord Substitusie" - -#: subst.c:9678 +#: subst.c:10404 #, fuzzy, c-format msgid "$%s: cannot assign in this way" msgstr "Kan nie soek 'n handtekening in hierdie boodskap!" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" msgstr "" -#: subst.c:10795 +#: subst.c:11542 #, fuzzy, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "--Geen reëls in buffer--" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "" -#: test.c:147 +#: test.c:156 #, fuzzy msgid "argument expected" msgstr "argument verwag\n" -#: test.c:156 +#: test.c:164 #, fuzzy, c-format -msgid "%s: integer expression expected" +msgid "%s: integer expected" msgstr "%s: heelgetal-uitdrukking is verwag\n" -#: test.c:265 +#: test.c:292 #, fuzzy msgid "`)' expected" msgstr "')' is verwag\n" -#: test.c:267 +#: test.c:294 #, fuzzy, c-format msgid "`)' expected, found %s" msgstr "')' is verwag, maar %s gevind\n" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, fuzzy, c-format msgid "%s: binary operator expected" msgstr "%s: binêre operator is verwag\n" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, fuzzy, c-format msgid "%s: unary operator expected" msgstr "%s: unitêre operator is verwag\n" -#: test.c:896 +#: test.c:926 #, fuzzy msgid "missing `]'" msgstr "Ontbrekende '>'" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "Onverwagte einde van lêer tydens inlees van hulpbron." -#: trap.c:220 +#: trap.c:225 #, fuzzy msgid "invalid signal number" msgstr "Die sein nommer wat was gevang het" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "" -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" msgstr "" -#: version.c:86 version2.c:86 +#: version.c:85 #, fuzzy, c-format msgid "GNU bash, version %s (%s)\n" msgstr "bedryfstelselkernweergawe" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "" -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "" -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "" -#: xmalloc.c:95 +#: xmalloc.c:86 #, fuzzy, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: kan nie %s skep nie" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "" -#: xmalloc.c:167 +#: xmalloc.c:166 #, fuzzy, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: kan nie %s skep nie" @@ -2282,7 +2340,7 @@ msgstr "/Opsies/Toets" #: builtins.c:66 #, fuzzy -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "init_cache_dir %s... " #: builtins.c:68 @@ -2404,7 +2462,7 @@ msgstr "Kom ons begin!" #: builtins.c:138 msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" @@ -2464,7 +2522,7 @@ msgid "[ arg... ]" msgstr "Arg %1" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "" #: builtins.c:168 @@ -2493,126 +2551,131 @@ msgid "wait [pid ...]" msgstr "Wag:" #: builtins.c:184 -msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" +msgid "! PIPELINE" msgstr "" #: builtins.c:186 -msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" +msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "" #: builtins.c:188 -msgid "select NAME [in WORDS ... ;] do COMMANDS; done" +msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "" #: builtins.c:190 -msgid "time [-p] pipeline" +msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "" #: builtins.c:192 -msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" +msgid "time [-p] pipeline" msgstr "" #: builtins.c:194 +msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" +msgstr "" + +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" msgstr "" -#: builtins.c:196 +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "Bediener of domein naam:" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "" -#: builtins.c:202 +#: builtins.c:204 #, fuzzy msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "Bediener of domein naam:" -#: builtins.c:204 +#: builtins.c:206 #, fuzzy msgid "{ COMMANDS ; }" msgstr "Opdragte" -#: builtins.c:206 +#: builtins.c:208 #, fuzzy msgid "job_spec [&]" msgstr "Kort Spesifikasie werkvoorbeeld" -#: builtins.c:208 +#: builtins.c:210 #, fuzzy msgid "(( expression ))" msgstr "Bools uitdrukking verwag" -#: builtins.c:210 +#: builtins.c:212 #, fuzzy msgid "[[ expression ]]" msgstr "Bools uitdrukking verwag" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "" -#: builtins.c:215 +#: builtins.c:217 #, fuzzy msgid "pushd [-n] [+N | -N | dir]" msgstr "Tydelike gids:" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "" -#: builtins.c:226 +#: builtins.c:228 #, fuzzy msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "Volle Naam:" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " "suffix] [name ...]" msgstr "" -#: builtins.c:235 +#: builtins.c:237 msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" -#: builtins.c:239 +#: builtins.c:241 #, fuzzy msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "Volle Naam:" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" msgstr "" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" msgstr "" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2632,7 +2695,7 @@ msgid "" " defined." msgstr "" -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2642,7 +2705,7 @@ msgid "" " Return success unless a NAME is not an existing alias." msgstr "" -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2684,7 +2747,7 @@ msgid "" " bind returns 0 unless an unrecognized option is given or an error occurs." msgstr "" -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2695,7 +2758,7 @@ msgid "" " The exit status is 0 unless N is not greater than or equal to 1." msgstr "" -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2706,7 +2769,7 @@ msgid "" " The exit status is 0 unless N is not greater than or equal to 1." msgstr "" -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2720,7 +2783,7 @@ msgid "" " not a shell builtin." msgstr "" -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2736,13 +2799,13 @@ msgid "" " is invalid." msgstr "" -#: builtins.c:387 +#: builtins.c:389 msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2781,7 +2844,7 @@ msgid "" " -P is used; non-zero otherwise." msgstr "" -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2797,7 +2860,7 @@ msgid "" " cannot be read." msgstr "" -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2807,7 +2870,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2815,7 +2878,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2823,7 +2886,7 @@ msgid "" " Always fails." msgstr "" -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -2842,7 +2905,7 @@ msgid "" " Returns exit status of COMMAND, or failure if COMMAND is not found." msgstr "" -#: builtins.c:490 +#: builtins.c:492 msgid "" "Set variable values and attributes.\n" " \n" @@ -2870,7 +2933,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -2884,14 +2948,14 @@ msgid "" " assignment error occurs." msgstr "" -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" " A synonym for `declare'. See `help declare'." msgstr "" -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2906,7 +2970,7 @@ msgid "" " assignment error occurs, or the shell is not executing a function." msgstr "" -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2946,7 +3010,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2959,7 +3023,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:612 +#: builtins.c:615 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -2979,6 +3043,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -2986,7 +3056,7 @@ msgid "" " Returns success unless NAME is not a shell builtin or an error occurs." msgstr "" -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -2998,7 +3068,7 @@ msgid "" " Returns exit status of command or success if command is null." msgstr "" -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3039,7 +3109,7 @@ msgid "" " encountered or an error occurs." msgstr "" -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3062,7 +3132,7 @@ msgid "" "occurs." msgstr "" -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3070,7 +3140,7 @@ msgid "" " is that of the last command executed." msgstr "" -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3079,7 +3149,7 @@ msgid "" " in a login shell." msgstr "" -#: builtins.c:734 +#: builtins.c:742 msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3104,12 +3174,14 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." msgstr "" -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3121,7 +3193,7 @@ msgid "" " Status of command placed in foreground, or failure if an error occurs." msgstr "" -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3135,7 +3207,7 @@ msgid "" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3159,7 +3231,7 @@ msgid "" " Returns success unless NAME is not found or an invalid option is given." msgstr "" -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3181,7 +3253,7 @@ msgid "" "given." msgstr "" -#: builtins.c:842 +#: builtins.c:852 msgid "" "Display or manipulate the history list.\n" " \n" @@ -3205,7 +3277,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3216,7 +3292,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3240,7 +3316,7 @@ msgid "" " If -x is used, returns the exit status of COMMAND." msgstr "" -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3257,7 +3333,7 @@ msgid "" " Returns success unless an invalid option or JOBSPEC is given." msgstr "" -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3280,7 +3356,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3325,7 +3401,7 @@ msgid "" " If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise." msgstr "" -#: builtins.c:994 +#: builtins.c:1008 msgid "" "Read a line from the standard input and split it into fields.\n" " \n" @@ -3349,6 +3425,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3379,7 +3457,7 @@ msgid "" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3391,7 +3469,7 @@ msgid "" " Returns N, or failure if the shell is not executing a function or script." msgstr "" -#: builtins.c:1055 +#: builtins.c:1071 msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3467,6 +3545,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3477,7 +3559,7 @@ msgid "" " Returns success unless an invalid option is given." msgstr "" -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3499,7 +3581,7 @@ msgid "" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -3518,7 +3600,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -3539,7 +3621,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -3550,7 +3632,7 @@ msgid "" " Returns success unless N is negative or greater than $#." msgstr "" -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -3564,21 +3646,23 @@ msgid "" " FILENAME cannot be read." msgstr "" -#: builtins.c:1246 +#: builtins.c:1266 msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3661,7 +3745,7 @@ msgid "" " false or an invalid argument is given." msgstr "" -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3669,7 +3753,7 @@ msgid "" " be a literal `]', to match the opening `['." msgstr "" -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -3681,7 +3765,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -3689,31 +3773,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -3725,7 +3814,7 @@ msgid "" "given." msgstr "" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -3755,7 +3844,7 @@ msgid "" "found." msgstr "" -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -3797,15 +3886,16 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -3823,7 +3913,7 @@ msgid "" " Returns success unless MODE is invalid or an invalid option is given." msgstr "" -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -3855,7 +3945,7 @@ msgid "" " children." msgstr "" -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -3870,7 +3960,16 @@ msgid "" " option is given." msgstr "" -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -3883,7 +3982,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -3900,7 +3999,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -3920,7 +4019,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -3936,7 +4035,7 @@ msgid "" " The return status is the return status of PIPELINE." msgstr "" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -3947,7 +4046,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -3968,7 +4067,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" @@ -3980,7 +4079,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" @@ -3992,7 +4091,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4005,7 +4104,7 @@ msgid "" " The coproc command returns an exit status of 0." msgstr "" -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -4019,7 +4118,7 @@ msgid "" " Returns success unless NAME is readonly." msgstr "" -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4030,7 +4129,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4044,7 +4143,7 @@ msgid "" " Returns the status of the resumed job." msgstr "" -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4055,7 +4154,7 @@ msgid "" " Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise." msgstr "" -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -4083,7 +4182,7 @@ msgid "" " 0 or 1 depending on value of EXPRESSION." msgstr "" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -4137,7 +4236,7 @@ msgid "" " \t\tcommands should be saved on the history list.\n" msgstr "" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -4168,7 +4267,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -4195,7 +4294,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -4224,7 +4323,7 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -4244,7 +4343,7 @@ msgid "" " given or OPTNAME is disabled." msgstr "" -#: builtins.c:1938 +#: builtins.c:1978 msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -4261,9 +4360,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -4285,15 +4384,15 @@ msgid "" " error occurs." msgstr "" -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -4316,20 +4415,24 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2004 +#: builtins.c:2044 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -4361,7 +4464,7 @@ msgid "" " have a completion specification defined." msgstr "" -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -4403,7 +4506,7 @@ msgid "" " not an indexed array." msgstr "" -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" diff --git a/po/bash.pot b/po/bash.pot index 767b0af94..6d865097c 100644 --- a/po/bash.pot +++ b/po/bash.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,123 +18,123 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "" -#: bashline.c:4697 +#: bashline.c:4785 #, c-format -msgid "%s: missing colon separator" +msgid "%s: missing separator" msgstr "" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "" -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "" -#: builtins/caller.def:136 +#: builtins/caller.def:135 msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -143,352 +143,366 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "" -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "" -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "" -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "" @@ -503,11 +517,11 @@ msgstr "" msgid "%s: option requires an argument -- %c\n" msgstr "" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "" @@ -535,12 +549,12 @@ msgid "" "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." msgstr "" -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -552,21 +566,30 @@ msgid "" "\n" msgstr "" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "" -#: builtins/history.def:338 +#: builtins/history.def:278 +msgid "empty filename" +msgstr "" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "" @@ -580,113 +603,113 @@ msgstr "" msgid "no other options allowed with `-x'" msgstr "" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" +msgid "%s: %s" msgstr "" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -710,7 +733,7 @@ msgid "" "\tdirs when invoked without options, starting with zero." msgstr "" -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -735,7 +758,7 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -756,319 +779,327 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "" -#: builtins/type.def:275 +#: builtins/type.def:270 builtins/type.def:314 #, c-format -msgid "%s is a function\n" +msgid "%s is a special shell builtin\n" msgstr "" -#: builtins/type.def:299 +#: builtins/type.def:289 #, c-format -msgid "%s is a special shell builtin\n" +msgid "%s is a function\n" msgstr "" -#: builtins/type.def:301 +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr "" -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "" #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "" -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 #, c-format -msgid "eval: maximum eval nesting level exceeded (%d)" +msgid "invalid regular expression `%s': %s" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:4050 #, c-format -msgid "%s: maximum source nesting level exceeded (%d)" +msgid "invalid regular expression `%s'" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5028 #, c-format -msgid "%s: maximum function nesting level exceeded (%d)" +msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5041 #, c-format -msgid "%s: restricted: cannot specify `/' in command names" +msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5715 +#: execute_cmd.c:5170 #, c-format -msgid "%s: command not found" +msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5957 +#: execute_cmd.c:5727 #, c-format -msgid "%s: %s" +msgid "%s: restricted: cannot specify `/' in command names" msgstr "" -#: execute_cmd.c:5975 +#: execute_cmd.c:5844 #, c-format -msgid "%s: cannot execute: required file not found" +msgid "%s: command not found" msgstr "" -#: execute_cmd.c:6000 +#: execute_cmd.c:6118 #, c-format msgid "%s: %s: bad interpreter" msgstr "" -#: execute_cmd.c:6037 +#: execute_cmd.c:6127 #, c-format -msgid "%s: cannot execute binary file: %s" +msgid "%s: cannot execute: required file not found" msgstr "" -#: execute_cmd.c:6123 +#: execute_cmd.c:6164 #, c-format -msgid "`%s': is a special builtin" +msgid "%s: cannot execute binary file: %s" msgstr "" -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +msgid "arithmetic syntax error in expression" msgstr "" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +msgid "arithmetic syntax error in variable assignment" msgstr "" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +msgid "arithmetic syntax error: operand expected" +msgstr "" + +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" msgstr "" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1492 +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "" @@ -1085,7 +1116,7 @@ msgstr "" msgid "value too great for base" msgstr "" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "" @@ -1094,46 +1125,51 @@ msgstr "" msgid "getcwd: cannot access parent directories" msgstr "" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "" @@ -1143,564 +1179,574 @@ msgstr "" msgid "describe_pid: %ld: no such pid" msgstr "" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr "" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "" -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr "" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" "malloc: %s:%d: assertion botched\r\n" msgstr "" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, c-format +msgid "script file read error: %s" +msgstr "" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "" -#: parse.y:6151 +#: parse.y:6769 +#, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" "\t%s [GNU long option] [option] script-file ...\n" msgstr "" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "" @@ -1870,287 +1916,298 @@ msgstr "" msgid "Unknown Signal #%d" msgstr "" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" +msgid "%s: bad substitution" msgstr "" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" +msgid "%s: parameter not set" msgstr "" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" msgstr "" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "" -#: test.c:156 +#: test.c:164 #, c-format -msgid "%s: integer expression expected" +msgid "%s: integer expected" msgstr "" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "" -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" msgstr "" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "" -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "" -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "" @@ -2186,7 +2243,7 @@ msgid "caller [expr]" msgstr "" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "" #: builtins.c:68 @@ -2291,7 +2348,7 @@ msgstr "" #: builtins.c:138 msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" @@ -2340,7 +2397,7 @@ msgid "[ arg... ]" msgstr "" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "" #: builtins.c:168 @@ -2364,117 +2421,122 @@ msgid "wait [pid ...]" msgstr "" #: builtins.c:184 -msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" +msgid "! PIPELINE" msgstr "" #: builtins.c:186 -msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" +msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "" #: builtins.c:188 -msgid "select NAME [in WORDS ... ;] do COMMANDS; done" +msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "" #: builtins.c:190 -msgid "time [-p] pipeline" +msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "" #: builtins.c:192 -msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" +msgid "time [-p] pipeline" msgstr "" #: builtins.c:194 +msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" +msgstr "" + +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" msgstr "" -#: builtins.c:196 +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " "suffix] [name ...]" msgstr "" -#: builtins.c:235 +#: builtins.c:237 msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" msgstr "" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" msgstr "" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2494,7 +2556,7 @@ msgid "" " defined." msgstr "" -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2504,7 +2566,7 @@ msgid "" " Return success unless a NAME is not an existing alias." msgstr "" -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2546,7 +2608,7 @@ msgid "" " bind returns 0 unless an unrecognized option is given or an error occurs." msgstr "" -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2557,7 +2619,7 @@ msgid "" " The exit status is 0 unless N is not greater than or equal to 1." msgstr "" -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2568,7 +2630,7 @@ msgid "" " The exit status is 0 unless N is not greater than or equal to 1." msgstr "" -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2582,7 +2644,7 @@ msgid "" " not a shell builtin." msgstr "" -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2598,13 +2660,13 @@ msgid "" " is invalid." msgstr "" -#: builtins.c:387 +#: builtins.c:389 msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2643,7 +2705,7 @@ msgid "" " -P is used; non-zero otherwise." msgstr "" -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2659,7 +2721,7 @@ msgid "" " cannot be read." msgstr "" -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2669,7 +2731,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2677,7 +2739,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2685,7 +2747,7 @@ msgid "" " Always fails." msgstr "" -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -2704,7 +2766,7 @@ msgid "" " Returns exit status of COMMAND, or failure if COMMAND is not found." msgstr "" -#: builtins.c:490 +#: builtins.c:492 msgid "" "Set variable values and attributes.\n" " \n" @@ -2732,7 +2794,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -2746,14 +2809,14 @@ msgid "" " assignment error occurs." msgstr "" -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" " A synonym for `declare'. See `help declare'." msgstr "" -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2768,7 +2831,7 @@ msgid "" " assignment error occurs, or the shell is not executing a function." msgstr "" -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2808,7 +2871,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2821,7 +2884,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:612 +#: builtins.c:615 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -2841,6 +2904,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -2848,7 +2917,7 @@ msgid "" " Returns success unless NAME is not a shell builtin or an error occurs." msgstr "" -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -2860,7 +2929,7 @@ msgid "" " Returns exit status of command or success if command is null." msgstr "" -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -2901,7 +2970,7 @@ msgid "" " encountered or an error occurs." msgstr "" -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -2924,7 +2993,7 @@ msgid "" "occurs." msgstr "" -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -2932,7 +3001,7 @@ msgid "" " is that of the last command executed." msgstr "" -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -2941,7 +3010,7 @@ msgid "" " in a login shell." msgstr "" -#: builtins.c:734 +#: builtins.c:742 msgid "" "Display or execute commands from the history list.\n" " \n" @@ -2966,12 +3035,14 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." msgstr "" -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -2983,7 +3054,7 @@ msgid "" " Status of command placed in foreground, or failure if an error occurs." msgstr "" -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -2997,7 +3068,7 @@ msgid "" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3021,7 +3092,7 @@ msgid "" " Returns success unless NAME is not found or an invalid option is given." msgstr "" -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3043,7 +3114,7 @@ msgid "" "given." msgstr "" -#: builtins.c:842 +#: builtins.c:852 msgid "" "Display or manipulate the history list.\n" " \n" @@ -3067,7 +3138,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3078,7 +3153,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3102,7 +3177,7 @@ msgid "" " If -x is used, returns the exit status of COMMAND." msgstr "" -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3119,7 +3194,7 @@ msgid "" " Returns success unless an invalid option or JOBSPEC is given." msgstr "" -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3142,7 +3217,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3187,7 +3262,7 @@ msgid "" " If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise." msgstr "" -#: builtins.c:994 +#: builtins.c:1008 msgid "" "Read a line from the standard input and split it into fields.\n" " \n" @@ -3211,6 +3286,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3241,7 +3318,7 @@ msgid "" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3253,7 +3330,7 @@ msgid "" " Returns N, or failure if the shell is not executing a function or script." msgstr "" -#: builtins.c:1055 +#: builtins.c:1071 msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3329,6 +3406,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3339,7 +3420,7 @@ msgid "" " Returns success unless an invalid option is given." msgstr "" -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3361,7 +3442,7 @@ msgid "" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -3380,7 +3461,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -3401,7 +3482,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -3412,7 +3493,7 @@ msgid "" " Returns success unless N is negative or greater than $#." msgstr "" -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -3426,21 +3507,23 @@ msgid "" " FILENAME cannot be read." msgstr "" -#: builtins.c:1246 +#: builtins.c:1266 msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3523,7 +3606,7 @@ msgid "" " false or an invalid argument is given." msgstr "" -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3531,7 +3614,7 @@ msgid "" " be a literal `]', to match the opening `['." msgstr "" -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -3543,7 +3626,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -3551,31 +3634,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -3587,7 +3675,7 @@ msgid "" "given." msgstr "" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -3617,7 +3705,7 @@ msgid "" "found." msgstr "" -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -3659,15 +3747,16 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -3685,7 +3774,7 @@ msgid "" " Returns success unless MODE is invalid or an invalid option is given." msgstr "" -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -3717,7 +3806,7 @@ msgid "" " children." msgstr "" -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -3732,7 +3821,16 @@ msgid "" " option is given." msgstr "" -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -3745,7 +3843,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -3762,7 +3860,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -3782,7 +3880,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -3798,7 +3896,7 @@ msgid "" " The return status is the return status of PIPELINE." msgstr "" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -3809,7 +3907,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -3830,7 +3928,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" @@ -3842,7 +3940,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" @@ -3854,7 +3952,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -3867,7 +3965,7 @@ msgid "" " The coproc command returns an exit status of 0." msgstr "" -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -3881,7 +3979,7 @@ msgid "" " Returns success unless NAME is readonly." msgstr "" -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -3892,7 +3990,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -3906,7 +4004,7 @@ msgid "" " Returns the status of the resumed job." msgstr "" -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -3917,7 +4015,7 @@ msgid "" " Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise." msgstr "" -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -3945,7 +4043,7 @@ msgid "" " 0 or 1 depending on value of EXPRESSION." msgstr "" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -3999,7 +4097,7 @@ msgid "" " \t\tcommands should be saved on the history list.\n" msgstr "" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -4030,7 +4128,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -4057,7 +4155,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -4086,7 +4184,7 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -4106,7 +4204,7 @@ msgid "" " given or OPTNAME is disabled." msgstr "" -#: builtins.c:1938 +#: builtins.c:1978 msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -4123,9 +4221,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -4147,15 +4245,15 @@ msgid "" " error occurs." msgstr "" -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -4178,20 +4276,24 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2004 +#: builtins.c:2044 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -4223,7 +4325,7 @@ msgid "" " have a completion specification defined." msgstr "" -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -4265,7 +4367,7 @@ msgid "" " not an indexed array." msgstr "" -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" diff --git a/po/bg.gmo b/po/bg.gmo index 8638773e11f4f409518252d786f787db6c67f7e6..689b4e6e93237dd931fbc461bb179c88d0ab555e 100644 GIT binary patch delta 12700 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 delta 56063 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%0A^y$@lZu{QO zWcfv|=py$w>g|%xS~pVC>Bk`F-e<fwi_FMHT$7b4pR!pDFICq@t28hF9|I_d{hKbu zdc}fM`o6Z;absc{x@s%ECh=sfDbc(7be(aEecv2k*n&(;8PF8wO}vhj-e74Lu&<Gd zbpidX7wG+ZC%A=DeszUN%OZXvUDE9M<8>ZqlQia<m%&4!dwIIuCOXP7#bT%&I!8~J z{eGf%?Wpv-9Q&r;cZlPrpZ8><oVsIro7ZeDZSnU=HO1c})s~36RrY~zpuiA4Wy7AF zs`oWjU8QsQh^(Rhj|G@ntan42U2iDbD$TMj>IJkTDtYf5d-J}Z=Td5X@xc@6H}zGo z>c?eAu%4GvewjbfyRGJz6XNbPwobn+mIOb<zQo+V3aypVue0Bjvr)&p9r||Xt6*wW zy5)it>mUYvbC$^H9`}E0U^`+Iigw3p%hVxmQrIN3ot#`PCgqy7`elu87V2O6dJnH^ zbzfrRl70G1U2}@s_`gC(be;IB#`GilEh54HJAyoURL{zUhu1jQl^%^9S!D%p^0TA* zoFN9z5_?cxjf>Zm?vEWnwsG36eo*h*NnOdcsy65IQH_m9_1}%?N5#Uf|IY>IC74z6 zwHNjOH`#jR9UqWu7qILnfZ7v{eFp>NRtC%k_mCSJaA+u103U~^H52UPN%7$0ib0w| zAvPZpb}(z9+ouwjFiCFTc$6uPXZo(oOuEx~P6Auk;?sdmXuk<e?2u)9^%t2mrbk_3 z64|bGiRl32^vl{n>E)N1g!%V@%N9to0c}{8zs#gQJxPI42%C)6^uL#xc58!g2Z3GY nfL?;eDj;Xq>9dzI<!qO~%Cv+NdbPv!)_Y9y+YjGkdddg@EMMij diff --git a/po/bg.po b/po/bg.po index 68331a587..cbcd8c644 100644 --- a/po/bg.po +++ b/po/bg.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-06-18 14:33+0200\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@ludost.net>\n" @@ -18,125 +18,132 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "грешен индекс на масив" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: изтриване на атрибута за указател от променливата" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: масивът не може да бъде преобразуван към речник" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: не може да се присвоява на нецифров индекс" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: при присвояване към речник трябва да се използва индекс" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: не може да се създаде: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "изпълнение на команда на Юникс от bash: не може да се открие подредбата на\n" "функциите на клавишите за командата" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: първият непразен знак не е „\"“" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "в %2$s липсва затварящ знак „%1$c“" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: разделителят „:“ липсва" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" -msgstr "„%s“: неуспешно премахне на присвояване в подредбата на функциите на клавишите" +msgstr "" +"„%s“: неуспешно премахне на присвояване в подредбата на функциите на " +"клавишите" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" -msgstr "заместване на изразите с фигурни скоби: неуспешно заделяне на памет за „%s“" +msgstr "" +"заместване на изразите с фигурни скоби: неуспешно заделяне на памет за „%s“" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" -msgstr "заместване на изразите с фигурни скоби: неуспешно заделяне на памет за %u елемента" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" +msgstr "" +"заместване на изразите с фигурни скоби: неуспешно заделяне на памет за %u " +"елемента" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" -msgstr "заместване на изразите с фигурни скоби: неуспешно заделяне на памет за „%s“" +msgstr "" +"заместване на изразите с фигурни скоби: неуспешно заделяне на памет за „%s“" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "„%s“: грешно име на синоним" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "редактирането на командния ред не е включено" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "„%s“: грешно име на подредбата на функциите на клавишите" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: не може да се прочете: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "„%s“: име на непозната функция" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s не е зададена на никой клавиш.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s може да се извика чрез " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "„%s“: не може да се премахне присвояване" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "брой цикли" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "валидно само за циклите с „for“, „while“ и „until“" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -145,7 +152,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Връщане на контекста на текущото извикване на подпрограма.\n" " \n" @@ -153,352 +164,368 @@ msgstr "" " „$line $subroutine $filename“. Допълнителната информация може да се\n" " използва за получаване на информация за състоянието на стека.\n" " \n" -" Стойността на ИЗРАЗа показва за колко рамки спрямо текущата да се изведе\n" -" информация. Най-горната рамка е 0." +" Стойността на ИЗРАЗа показва за колко рамки спрямо текущата да се " +"изведе\n" +" информация. Най-горната рамка е 0.\n" +" \n" +" Изходен код:\n" +" Връща 0, освен ако обвивката изпълнява функция дефинирана в обвивката " +"или\n" +" ИЗРАЗът е грешен." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "Променливата „HOME“ не е зададена" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "прекалено много аргументи" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "нулева директория" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "Променливата „OLDPWD“ не е зададена" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "ред %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "предупреждение: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: употреба: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: опцията изисква аргумент" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: изисква се числов аргумент" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: не е открит" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: грешна опция" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: грешно име на опция" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "„%s“: грешен идентификатор" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "грешно осмично число" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "грешно шестнайсетично число" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "грешно число" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: грешно указване на сигнал" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "„%s“: грешен идентификатор на процес или задача" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: променлива с права само за четене" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: не може да се присвои" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s е извън допустимия диапазон" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "аргументът" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s е извън допустимия диапазон" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: няма такава задача" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: няма управление на задачите" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "няма управление на задачите" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: ограничена обвивка" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "ограничена обвивка" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: не е команда вградена в обвивката" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "грешка при запис: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "грешка при задаване на атрибутите на терминала: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "грешка при получаване на атрибутите на терминала: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: грешка при получаване на текущата директория: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: нееднозначно указана задача" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "помощта не е включена в тази версия" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: не е масив" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: не може да се премахне: %s е само за четене" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: не може да се премахне" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: грешно име на действие" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: не е указано дописване" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "предупреждение: опцията „-F“ може да не работи според очакванията ви" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "предупреждение: опцията „-C“ може да не работи според очакванията ви" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "в момента не се изпълнява функция за дописване" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "може да се използва само във функция" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "„-f“ не може да се използва за създаването на функции" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: функция с права само за четене" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: променливата-указател не може да е масив" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: променливата-указател не може да сочи към себе си" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: цикъл в променливите-указатели" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "„%s“: неправилно име за променлива-указател" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: променливите за масиви не могат да се унищожават така" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: речник не може да се преобразува в масив" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: съставното присвояване на масив чрез цитат е остаряло" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "липсва възможност за динамично зареждане" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "споделеният обект „%s“ не може да бъде зареден: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "„%s“ не може да се открие в споделения обект %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: вградената команда вече е динамично заредена" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "зареждащата функция за „%s“ върна грешка (%d): не е зареден" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: не е зареден динамично" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: не може да се изтрие: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: е директория" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: не е обикновен файл" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: файлът е прекалено голям" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: двоичният файл не може да бъде изпълнен" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: не може да се изпълни: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "изход\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "това не е входна обвивка: използвайте „exit“" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Има спрени задачи.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Има изпълнявани задачи.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "не е открита команда" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "указване на историята" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: не може да се отвори временен файл: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "текуща" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "задача %d е стартирана без управление на задачите" @@ -513,11 +540,11 @@ msgstr "%s: непозволена опция — %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: опцията изисква аргумент — %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "хеширането е изключено" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: таблицата с хешове е празна\n" @@ -543,17 +570,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." msgstr "" "няма теми в помощта, които да отговарят на „%s“. Опитайте с\n" "„help help“, „man -k %s“ или „info %s“." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: не може да се отвори: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -568,26 +596,37 @@ msgstr "" "Напишете „help“, за да видите списъка.\n" "Напишете „help ИМЕ_НА_ФУНКЦИЯ“ за повече информация за съответната функция.\n" "Напишете „info bash“ за повече информация за обвивката като цяло.\n" -"Напишете „man -k“ или „info“ за повече информация за командите извън списъка.\n" +"Напишете „man -k“ или „info“ за повече информация за командите извън " +"списъка.\n" "\n" "Знакът звездичка „*“ до името на команда означава, че тя е изключена.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "не може да се ползва едновременно повече от една от опциите „-anrw“" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "позиция в историята" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "празно име на променлива за масив" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: аргументът е „null“ или не е зададен" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: грешна дата с време" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: неуспешно заместване чрез историята" @@ -601,113 +640,113 @@ msgstr "%s: неуспешно извикване на inlib" msgid "no other options allowed with `-x'" msgstr "не е позволена друга опция с „-x“" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: аргументите трябва да са идентификатори на процеси или задачи" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Неизвестна грешка" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "очаква се израз" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: не е масив" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: грешно указване на файловия дескриптор" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: грешен файлов дескриптор: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: грешен номер на ред" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: грешен начален индекс за масив" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: грешно количество редове за обработка" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "празно име на променлива за масив" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "изисква се поддръжка на променливи за масиви" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "„%s“: липсва форматиращ знак" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "„%c“: грешен формат на времето" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "„%c“: грешен форматиращ знак" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "предупреждение: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "неуспешен анализ на форма̀та: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "липсва шестнадесетична цифра за \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "липсва цифра за Уникод за \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "няма друга директория" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: грешен аргумент" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "«няма текуща директория»" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "стекът с директории е празен" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "индекс за стека с директории" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -722,10 +761,12 @@ 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" @@ -741,13 +782,15 @@ msgstr "" " стека.\n" " \n" " Аргументи: \n" -" +N извежда N-тия елемент отляво в списъка отпечатан от командата „dirs“,\n" +" +N извежда N-тия елемент отляво в списъка отпечатан от командата " +"„dirs“,\n" " когато е стартирана без опции. Брои се от 0.\n" " \n" -" -N извежда N-тия елемент отдясно в списъка отпечатан от командата „dirs“,\n" +" -N извежда N-тия елемент отдясно в списъка отпечатан от командата " +"„dirs“,\n" " когато е стартирана без опции. Брои се от 0." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -776,24 +819,30 @@ msgstr "" " аргументи сменя най-горните две директории.\n" " \n" " Опции:\n" -" -n подтискане на нормалното преминаване към директория при добавянето на\n" +" -n подтискане на нормалното преминаване към директория при добавянето " +"на\n" " директории към стека, така че се променя само той.\n" " \n" " Аргументи:\n" -" +N Превърта стека, така че N-тата директория (като се брои от лявата\n" -" страна на списъка, отпечатан от командата „dirs“ като се почва от 0)\n" +" +N Превърта стека, така че N-тата директория (като се брои от " +"лявата\n" +" страна на списъка, отпечатан от командата „dirs“ като се почва от " +"0)\n" " да е най-отгоре.\n" " \n" -" -N Превърта стека, така че N-тата директория (като се брои от дясната\n" -" страна на списъка, отпечатан от командата „dirs“ като се почва от 0)\n" +" -N Превърта стека, така че N-тата директория (като се брои от " +"дясната\n" +" страна на списъка, отпечатан от командата „dirs“ като се почва от " +"0)\n" " да е най-отгоре.\n" " \n" -" dir Добавя ДИР най-отгоре в стека на директориите, като я прави новата\n" +" dir Добавя ДИР най-отгоре в стека на директориите, като я прави " +"новата\n" " текуща работна директория.\n" " \n" " Можете да изведете стека на директорията с командата „dirs“." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -813,11 +862,13 @@ msgid "" " \n" " The `dirs' builtin displays the directory stack." msgstr "" -"Маха директории от стека с тях. Без аргументи премахва последната директория в\n" +"Маха директории от стека с тях. Без аргументи премахва последната директория " +"в\n" " стека и влиза в новата последна директория.\n" " \n" " Опции:\n" -" -n подтискане на нормалното преминаване към директория при махането на\n" +" -n подтискане на нормалното преминаване към директория при махането " +"на\n" " директория от стека — само той се променя.\n" " \n" " Аргументи:\n" @@ -825,325 +876,344 @@ msgstr "" " командата „dirs“, като се брои от 0. Напр.: „popd +0“ премахва\n" " първата директория, „popd +1“ - втората.\n" " \n" -" -N премахва N-тия елемент като се брои отдясно в списъка отпечатан от\n" +" -N премахва N-тия елемент като се брои отдясно в списъка отпечатан " +"от\n" " командата „dirs“, като се брои от 0. Напр.: „popd -0“ премахва\n" " последната директория, „popd -1“ - предпоследната.\n" " \n" " Можете да изведете стека на директорията с командата „dirs“." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: грешно указване на изтичането на времето" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "грешка при четене: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "„return“ е възможен само от функция или изпълнен в текущата обвивка скрипт" +msgstr "" +"„return“ е възможен само от функция или изпълнен в текущата обвивка скрипт" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" -msgstr "не може едновременно да се премахват задаванията на функция и променлива" +msgstr "" +"не може едновременно да се премахват задаванията на функция и променлива" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: не е променлива за масив" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: не е функция" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: не може да се изнесе" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "брой на преместванията" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" -msgstr "не може едновременно да се задават и да се премахват опции на обвивката" +msgstr "" +"не може едновременно да се задават и да се премахват опции на обвивката" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: грешно име на опция на обвивката" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "изисква се аргумент име на файл" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: файлът не е открит" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "не може да бъде временно спряна" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "входната обвивка не може да бъде временно спряна" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s е синоним на „%s“\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s е ключова дума на обвивката\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s е функция\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s е специална, вградена команда в обвивката\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s е функция\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s е вградена команда в обвивката\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s е %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s е хеширан (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: грешен аргумент за ограничение" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "„%c“: грешна команда" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: ограничението не може да бъде получено: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "ограничение" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: ограничението не може да бъде променено: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "осмично число" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "„%c“: неправилен оператор за описателен режим" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "„%c“: неправилен знак за описателен режим" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " ред " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "последна команда: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Преустановяване…" #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "ИНФОРМАЦИЯ: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "ПРЕДУПРЕЖДЕНИЕ: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "неизвестна грешка в команда" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "грешен вид команда" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "грешна връзка" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "грешен преход" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: променлива без стойност" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" -msgstr "\aвремето за изчакване на вход изтече: следва автоматично излизане от системата\n" +msgstr "" +"\aвремето за изчакване на вход изтече: следва автоматично излизане от " +"системата\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "стандартният вход не може да бъде пренасочен от „/dev/null“: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "в променливата $TIMEFORMAT: „%c“: грешен форматиращ знак" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: копроцесът [%d:%s] все още съществува" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "грешка в програмен канал" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: превишено е максималното ниво на влагане на „eval“ (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: превишено е максималното ниво на влагане на код (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: превишено е максималното ниво на влагане на функции (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" -msgstr "%s: ограничение: в имената на командите не може да присъства знакът „/“" +msgstr "" +"%s: ограничение: в имената на командите не може да присъства знакът „/“" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: командата не е открита" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: лош интерпретатор" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: не може да се изпълни — липсва необходим файл " -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: лош интерпретатор" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: двоичният файл не може да бъде изпълнен: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "„%s“ е вградена команда в обвивката" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "файловият дескриптор %d не може да се дублира като дескриптор %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "максималният брой нива за рекурсия в израз бяха преминати" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "отрицателно препълване на стека за рекурсии" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "синтактична грешка в израз" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "опит за присвояване на стойност на нещо, което не е променлива" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "синтактична грешка при присвояване на променлива" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "деление на 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "програмна грешка: неправилна лексема за присвояване на израз" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "за условен израз се изисква „:“" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "степента е по-малка от 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "очаква се идентификатор след предварително увеличаване или намаляване" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "липсва „)“" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "синтактична грешка: очаква се оператор" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "синтактична грешка: грешен аритметичен оператор" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (грешната лексема е „%s“)" @@ -1160,7 +1230,7 @@ msgstr "неправилна целочислена константа" msgid "value too great for base" msgstr "стойността е прекалено голяма за основата" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: грешка в израза\n" @@ -1169,48 +1239,56 @@ msgstr "%s: грешка в израза\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: няма достъп до родителските директории" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "„%s“ е вградена команда в обвивката" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "неуспешно изчистване на режима без забавяне на файловия дескриптор %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "неуспешно заделяне на нов файлов дескриптор за вход на bash от дескриптор %d" +msgstr "" +"неуспешно заделяне на нов файлов дескриптор за вход на bash от дескриптор %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" -msgstr "запазване на входа на bash: вече съществува буфер за новия файлов дескриптор %d" +msgstr "" +"запазване на входа на bash: вече съществува буфер за новия файлов дескриптор " +"%d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "" "стартиране на програмен канал: не може да се комуникира с водача на канала\n" "(pgrp pipe)" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: ЦИКЪЛ: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: ЦИКЪЛ: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "стартираният процес %d е в изпълняваната задача %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "изтриване на спряната задача %d в групата процеси %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "добавяне на процес: процесът %5ld (%s) е отбелязан като още жив" @@ -1218,141 +1296,146 @@ msgstr "добавяне на процес: процесът %5ld (%s) е отб #: jobs.c:1839 #, c-format msgid "describe_pid: %ld: no such pid" -msgstr "описателен идентификатор на процес: %ld: няма такъв идентификатор на процес" +msgstr "" +"описателен идентификатор на процес: %ld: няма такъв идентификатор на процес" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Сигнал %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Завършен" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Спрян" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Спрян (%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Изпълняван" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Завършен (%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Изход %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Непознато състояние" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(паметта е разтоварена)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "дъщерният процес смени групата при изпълнение (от %ld на %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "изчакване: процесът с идентификатор %ld не е дъщерен на тази обвивка" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "изчакване: липсват данни за процес с идентификатор %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "изчакване на задача: задачата %d е спряна" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: няма текуща задача" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: задачата е приключила" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: задача %d вече е във фонов режим" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "" "изчакване на дъщерен процес: включване на незабавното излизане от функцията\n" "чрез WNOHANG, за да се избегне недефиниран блок" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: ред %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (паметта е разтоварена)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(работната директория е: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "инициализация на контрола на задачите: неуспешно изпълнение на getpgrp" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" -msgstr "инициализация на контрола на задачите: няма управление на задачите във фонов режим" +msgstr "" +"инициализация на контрола на задачите: няма управление на задачите във фонов " +"режим" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "инициализация на контрола на задачите: дисциплина на линията" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" -msgstr "инициализация на контрола на задачите: задаване на група при изпълнение (setpgid)" +msgstr "" +"инициализация на контрола на задачите: задаване на група при изпълнение " +"(setpgid)" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "групата на процесите на терминала не може да бъде зададена (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "в тази обвивка няма управление на задачите" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "заделяне на памет: грешно предположение: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1361,386 +1444,411 @@ msgstr "" "\r\n" "заделяне на памет: %s:%d: предположението е отпечатано\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "непознат" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" -msgstr "заделяне на памет: блок в списъка със свободни блокове е зает или неподходящ" +msgstr "" +"заделяне на памет: блок в списъка със свободни блокове е зает или неподходящ" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" -msgstr "изчистване на памет: извикано е с блоков аргумент, който вече е изчистен" +msgstr "" +"изчистване на памет: извикано е с блоков аргумент, който вече е изчистен" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "изчистване на памет: извикано е с незаделен блоков аргумент" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "" "изчистване на памет: открито е отрицателно препълване с mh_nbytes извън\n" "допустимия диапазон" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "" "изчистване на памет: открито е отрицателно препълване, неправилна стойност\n" "за magic8" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" -msgstr "изчистване на памет: късовете на началната и крайната области се различават" +msgstr "" +"изчистване на памет: късовете на началната и крайната области се различават" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "презаделяне: извикано е с аргумент с незаделен блок" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "" "презаделяне: открито е отрицателно препълване с mh_nbytes извън допустимия\n" "диапазон" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" -msgstr "презаделяне: открито е отрицателно препълване, неправилна стойност за magic8" +msgstr "" +"презаделяне: открито е отрицателно препълване, неправилна стойност за magic8" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "презаделяне: късовете на началната и крайната области се различават" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" -msgstr "регистриране на презаделяне: таблицата за заделянията е пълна с FIND_ALLOC?\n" +msgstr "" +"регистриране на презаделяне: таблицата за заделянията е пълна с FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "регистриране на презаделяне: %p вече е в таблицата като заделен?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "регистриране на свободни: %p вече е в таблицата като свободен?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "грешна основа на бройна система" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: непознат хост" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: неправилна услуга" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: неправилно указан мрежов път" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "не се поддържат мрежови операции" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: локалът не може да бъде сменен (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: локалът не може да бъде сменен (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: локалът не може да бъде сменен (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: локалът не може да бъде сменен (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Имате поща в $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Имате нова поща в $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Пощата в %s вече е прочетена\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "синтактична грешка: изисква се аритметичен израз" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "синтактична грешка: неочакван знак „;“" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "синтактична грешка: „((%s))“" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "вътрешен документ с „<<“: неправилен вид инструкция %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "вътрешният документ на ред %d е отделен със знак за нов ред (а трябва да е „%s“)" +msgstr "" +"вътрешният документ на ред %d е отделен със знак за нов ред (а трябва да е " +"„%s“)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" -msgstr "пренасочване: инструкцията за пренасочване „%d“ е извън допустимия диапазон" +msgstr "" +"пренасочване: инструкцията за пренасочване „%d“ е извън допустимия диапазон" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) надвишава SIZE_MAX (%lu): редът е отрязан" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) надвишава SIZE_MAX (%lu): редът е " +"отрязан" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "грешка при запис: %s" -#: parse.y:2921 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "превишен е максималният брой възможни вътрешни документи" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" -msgstr "неочакван знак за край на файл „EOF“, а се очакваше съответстващ знак „%c“" +msgstr "" +"неочакван знак за край на файл „EOF“, а се очакваше съответстващ знак „%c“" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "неочакван знак за край на файл „EOF“, а се очакваше „]]“" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "синтактична грешка в условен израз: неочаквана лексема „%s“" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "синтактична грешка в условен израз" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "неочаквана лексема „%s“, а се очакваше знакът „)“" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "очакваше се „)“" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "неочакван аргумент „%s“ за унарен условен оператор" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "неочакван аргумент за унарен условен оператор" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "неочаквана лексема „%s“, очакваше се бинарен условен оператор" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "очакваше се бинарен условен оператор" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "неочакван аргумент „%s“ за бинарен условен оператор" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "неочакван аргумент за бинарен условен оператор" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "неочаквана лексема „%c“ в условна команда" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "неочаквана лексема „%s“ в условна команда" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "неочаквана лексема %d в условна команда" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "синтактична грешка в близост до неочакваната лексема „%s“" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "синтактична грешка в близост до „%s“" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "синтактична грешка: неочакван край на файл" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "синтактична грешка: неочакван край на файл" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "синтактична грешка" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Използвайте „%s“, за да излезете от обвивката.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "неочакван знак за край на файл „EOF“, очакваше се знакът „)“" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "дописване: функцията „%s“ не е открита" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: възможно зацикляне на повторните опити" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" -msgstr "вмъкване на завършване на команда: %s указване на команда, което е NULL" +msgstr "" +"вмъкване на завършване на команда: %s указване на команда, което е NULL" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "команда за печат: лош конектор „%d“" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: грешен файлов дескриптор" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: указател към файл – NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "отпечатване: „%c“: неправилен форматиращ знак" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "файловият дескриптор е извън допустимия диапазон" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: двусмислено пренасочване" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: не може да се презапише съществуващ файл" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: поради ограничение изходът не може да се пренасочи" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "не може да се създаде временен файл за вътрешен документ: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: на променлива не може да се присвои файлов дескриптор" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" -msgstr "„/dev/(tcp|udp)/host/port“ не се поддържат, ако няма поддръжка на мрежа" +msgstr "" +"„/dev/(tcp|udp)/host/port“ не се поддържат, ако няма поддръжка на мрежа" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "грешка при пренасочване: файловият дескриптор не може да бъде дублиран" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "не е открита директорията „/tmp“. Създайте я!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "„/tmp“ трябва да е директория" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "режимът за красив изход се игнорира при интерактивна работа" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: неправилна опция" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "" "идентификаторът на потребител на процеса не може да се зададе да е %d,\n" "ефективният идентификатор на потребител на процеса е %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "" "идентификаторът на група на процеса не може да се зададе да е %d,\n" "ефективният идентификатор на група на процеса е %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "режимът на изчистване на грешки е недостъпен, защото е изключен" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: е директория" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Не може да се получи името на текущия потребител!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, версия %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1749,49 +1857,53 @@ msgstr "" "Употреба: %s [дълга опция на GNU] [опция]…\n" " %s [дълга опция на GNU] [опция] файл-скрипт…\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Дълги опции на GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Опции на обвивката:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" -msgstr " -ilrsD или -c команда, или -O къса_опция (само при стартиране)\n" +msgstr "" +" -ilrsD или -c команда, или -O къса_опция (само при стартиране)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr " -%s или -o опция\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "За повече информация за опциите на обвивката въведете „%s -c \"help set\"“.\n" +msgstr "" +"За повече информация за опциите на обвивката въведете „%s -c \"help set\"“.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "За повече информация за вградените в обвивката команди въведете „%s -c help“.\n" +msgstr "" +"За повече информация за вградените в обвивката команди въведете „%s -c " +"help“.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "За да докладвате грешки, използвайте командата „bashbug“.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Интернет страница на bash: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Обща помощ за програмите на GNU: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "маска за обработката на сигнали: %d: грешна операция" @@ -1961,300 +2073,322 @@ msgstr "Заявка за информация" msgid "Unknown Signal #%d" msgstr "Непознат сигнал #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "лошо заместване: липсва затварящ знак „%s“ в %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: на член от масив не може да се присвои списък" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "не може да се създаде програмен канал за заместване на процеси" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "не може да се създаде дъщерен процес за заместване на процеси" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "именуваният програмен канал %s не може да се отвори за четене" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "именуваният програмен канал %s не може да се отвори за запис" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "" "именуваният програмен канал %s не може да се\n" "дублира като файловия дескриптор %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "заместване на команди: знакът „null“ във входа е прескочен" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "заместване на команди: каналът не може да се дублира като fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "не може да се създаде програмен канал за заместване на команди" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "не може да се създаде дъщерен процес за заместване на команди" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "заместване на команди: каналът не може да се дублира като fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: неправилно име за променлива-указател" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: грешно непряко заместване" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "„%s“: грешно име на променлива" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: аргументът не е зададен" +msgid "%s: bad substitution" +msgstr "%s: лошо заместване" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: аргументът е „null“ или не е зададен" +msgid "%s: parameter not set" +msgstr "%s: аргументът не е зададен" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: изразът от подниза е < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: лошо заместване" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: не може да се задава по този начин" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" msgstr "" "бъдещите версии на обвивката ще използват изчисляване като аритметично\n" "заместване" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "лошо заместване: липсва затварящ знак „`“ в %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "няма съвпадение: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "очаква се аргумент" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: очаква се целочислен израз" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "очаква се „)“" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "очаква се „)“, а е получено %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: очаква се бинарен оператор" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: очаква се унарен оператор" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "липсва „]“" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "синтактична грешка: неочакван знак/ци „%s“" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "неправилен номер на сигнал" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "eval: превишено е максималното ниво на влагане на „eval“ (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "" "стартиране на предстоящите прихващания: неправилна стойност в\n" "trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "" "стартиране на предстоящите прихващания: обработката на сигнали е SIG_DFL.\n" "%d (%s) е преизпратен на текущата обвивка" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "обработка на прихващания: неправилен сигнал %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "грешка при внасянето на дефиницията на функция за „%s“" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "нивото на обвивката (%d) е прекалено голямо. Задава се да е 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "превишен е максималният брой възможни вътрешни документи" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "" -"създаване на локална променлива: липсва контекст на функция в текущата област\n" +"създаване на локална променлива: липсва контекст на функция в текущата " +"област\n" "на видимост" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: на тази променлива не може да се присвои стойност" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: не може да се наследи стойност от несъвместим вид" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: присвояване на число на променлива-указател" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "" "всички локални променливи: липсва контекст на функция в текущата област на\n" "видимост" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s: аргументът за низа за изнасяне не трябва да е „null“" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "неправилен знак на позиция %d в низа за изнасяне за %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "липсва „=“ в низа за изнасяне за %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" -"изваждане на контекст на променливи: в началото на структурата за променливи на\n" +"изваждане на контекст на променливи: в началото на структурата за променливи " +"на\n" "обвивката (shell_variables) е нещо, което не е контекст на функция" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "" "изваждане на контекст на променливи: липсва контекст за глобални променливи\n" "(global_variables)" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" "изваждане на област: в началото на структурата за променливи на обвивката\n" "(shell_variables) е нещо, което не е временна област в обкръжението" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s не може да се отвори като ФАЙЛ" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: грешен файлов дескриптор за файла за трасиране" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: е извън допустимия диапазон" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Авторски права © 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Лиценз GPLv3+: ОПЛ на GNU, версия 3 или по-висока <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Лиценз GPLv3+: ОПЛ на GNU, версия 3 или по-висока <http://gnu.org/licenses/" +"gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, версия %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Това е свободен софтуер. Можете да го променяте и разпространявате." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Няма НИКАКВИ ГАРАНЦИИ до степента позволена от закона." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: не могат да се заделят %lu байта (заделени са %lu байта)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: не могат да се заделят %lu байта" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: не могат да се заделят %lu байта (заделени са %lu байта)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: не могат да се заделят %lu байта" @@ -2268,12 +2402,15 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] ИМЕ [ИМЕ…]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" msgstr "" "bind [-lpsvPSVX] [-m ПОДРЕДБА_НА_КЛАВИАТУРАТА] [-f ИМЕ_НА_ФАЙЛ]\n" " [-q ИМЕ] [-u ИМЕ] [-r ПОСЛЕДОВАТЕЛНОСТ_ОТ_КЛАВИШИ]\n" " [-x ПОСЛЕДОВАТЕЛНОСТ_ОТ_КЛАВИШИ:КОМАНДА_НА_ОБВИВКАТА]\n" -" [ПОСЛЕДОВАТЕЛНОСТ_ОТ_КЛАВИШИ:КОМАНДА_НА_ОБВИВКАТА или КОМАНДА_НА_READLINE]" +" [ПОСЛЕДОВАТЕЛНОСТ_ОТ_КЛАВИШИ:КОМАНДА_НА_ОБВИВКАТА или " +"КОМАНДА_НА_READLINE]" #: builtins.c:56 msgid "break [n]" @@ -2292,7 +2429,8 @@ msgid "caller [expr]" msgstr "caller [ИЗРАЗ]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [ДИРЕКТОРИЯ]" #: builtins.c:68 @@ -2304,12 +2442,19 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] команда [АРГУМЕНТ…]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [ИМЕ[=СТОЙНОСТ]…] или declare -p [-aAfFilnrtux] [ИМЕ…]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [ИМЕ[=СТОЙНОСТ]…] или declare -p [-aAfFilnrtux] " +"[ИМЕ…]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] ИМЕ[=СТОЙНОСТ]… или typeset -p [-aAfFilnrtux] [ИМЕ…]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] ИМЕ[=СТОЙНОСТ]… или typeset -p [-aAfFilnrtux] [ИМЕ…]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2349,7 +2494,9 @@ msgstr "logout [ЦИФРОВ_КОД]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "fc [-e РЕДАКТОР] [-lnr] [ПЪРВИ] [ПОСЛЕДЕН] или fc -s [ШАБЛОН=ЗАМЕСТИТЕЛ…] [КОМАНДА]" +msgstr "" +"fc [-e РЕДАКТОР] [-lnr] [ПЪРВИ] [ПОСЛЕДЕН] или fc -s [ШАБЛОН=ЗАМЕСТИТЕЛ…] " +"[КОМАНДА]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2368,7 +2515,9 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [ШАБЛОН…]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" msgstr "" "history [-c] [-d ОТМЕСТВАНЕ] [БРОЙ] или \n" "history -anrw [ИМЕ_НА_ФАЙЛ] или\n" @@ -2383,7 +2532,9 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [ИД_ЗАДАЧА… | ИД_ПРОЦЕС…]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" msgstr "" "kill [-s СИГНАЛ | -n НОМЕР_НА_СИГНАЛ | -СИГНАЛ] ИД_ПРОЦЕС | ИД_ЗАДАЧА…\n" "или\n" @@ -2394,7 +2545,10 @@ msgid "let arg [arg ...]" msgstr "let АРГУМЕНТ [АРГУМЕНТ…]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" +#, fuzzy +msgid "" +"read [-Eers] [-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" " [-N БРОЙ_ЗНАЦИ] [-p ПОДСКАЗКА] [-t БРОЙ_ЗНАЦИ] [-u ФАЙЛОВ_ДЕСКРИПТОР]\n" @@ -2445,7 +2599,8 @@ msgid "[ arg... ]" msgstr "[ АРГУМЕНТ…]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[АРГУМЕНТ] СИГНАЛ…]" #: builtins.c:168 @@ -2469,116 +2624,135 @@ msgid "wait [pid ...]" msgstr "wait [ИД_ПР…]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for ИМЕ [in ДУМИ…] ; do КОМАНДИ; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( ИЗРАЗ_1; ИЗРАЗ_2; ИЗРАЗ_3 )); do КОМАНДИ; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select ИМЕ [in ДУМИ…;] do КОМАНДИ; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] ПРОГРАМЕН_КАНАЛ" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case ДУМА in [ШАБЛОН [| ШАБЛОН]…) КОМАНДИ ;;]… esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if КОМАНДИ; then КОМАНДИ; [ elif КОМАНДИ; then КОМАНДИ; ]… [ else КОМАНДИ; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if КОМАНДИ; then КОМАНДИ; [ elif КОМАНДИ; then КОМАНДИ; ]… [ else КОМАНДИ; ] " +"fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while КОМАНДИ; do КОМАНДИ_2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until КОМАНДИ; do КОМАНДИ_2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [ИМЕ] КОМАНДА [ПРЕНАСОЧВАНИЯ]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function name { КОМАНДИ ; } или name () { КОМАНДИ ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ КОМАНДИ ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "%ЗАДАЧА [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( ИЗРАЗ ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ ИЗРАЗ ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables имена и значение на някои от променливите на обвивката" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | ДИР]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [ОПЦИЯ…]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v ПРОМЕНЛИВА] ФОРМАТ [АРГУМЕНТИ]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" msgstr "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o ОПЦИЯ] [-A ДЕЙСТВИЕ]\n" " [-G ШАБЛОН] [-W ДУМИ] [-F ФУНКЦИЯ] [-C КОМАНДА] [-X ФИЛТЪР]\n" " [-P ПРЕДСТАВКА] [-S НАСТАВКА] [ИМЕ…]" -#: builtins.c:235 -msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-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 ШАБЛОН]\n" " [-W ДУМИ] [-F ФУНКЦИЯ] [-C КОМАНДА] [-X ФИЛТЪР] [-P ПРЕДСТАВКА]\n" " [-S НАСТАВКА] [ДУМА]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o ОПЦИЯ] [-DEI] [ИМЕ…]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +#: builtins.c:244 +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" msgstr "" "mapfile [-d РАЗДЕЛИТЕЛ] [-n БРОЙ] [-O НАЧАЛО] [-s БРОЙ] [-t]\n" " [-u ФАЙЛ_ДЕСКР] [-C ФУНКЦИЯ] [-c КВАНТ] [МАСИВ]" -#: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" msgstr "" "readarray [-d РАЗДЕЛИТЕЛ] [-n БРОЙ] [-O НАЧАЛО] [-s БРОЙ] [-t]\n" " [-u ФАЙЛ_ДЕСКР] [-C ФУНКЦИЯ] [-c КВАНТ] [МАСИВ]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2593,7 +2767,8 @@ 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" @@ -2612,7 +2787,7 @@ msgstr "" " alias връща 0, освен в случаите, когато се зададе ИМЕ, за което\n" " не е дефиниран синоним." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2630,7 +2805,7 @@ msgstr "" " Връща 0, освен в случаите, когато се зададе ИМЕ, за което\n" " не е дефиниран синоним." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2642,25 +2817,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2676,40 +2856,49 @@ msgstr "" " \n" " Опции:\n" " -m ПОДРЕДБА \n" -" Използване на ПОДРЕДБАта като подредба на функциите на клавишите\n" +" Използване на ПОДРЕДБАта като подредба на функциите на " +"клавишите\n" " докато командата се изпълнява. Валидни са следните имена:\n" " „emacs“, „emacs-standard“, „emacs-meta“, „emacs-ctlx“, „vi“,\n" " „vi-move“, „vi-command“ и „vi-insert“.\n" " -l Списък с имената на функциите.\n" " -P Списък с имената на функциите и присвояванията.\n" -" -p Списък с имената на функциите и присвояванията във вид, който може\n" +" -p Списък с имената на функциите и присвояванията във вид, който " +"може\n" " да се използва за вход.\n" -" -S Списък с клавишните последователности, които извикват макроси и\n" +" -S Списък с клавишните последователности, които извикват макроси " +"и\n" " стойностите им.\n" -" -s Списък с клавишните последователности, които извикват макроси и\n" +" -s Списък с клавишните последователности, които извикват макроси " +"и\n" " стойностите им във вид, който може да се използва за вход.\n" " -V Списък с имената на променливите и стойностите им.\n" -" -v Списък с имената на променливите и стойностите им във вид, който\n" +" -v Списък с имената на променливите и стойностите им във вид, " +"който\n" " може да се използва за вход.\n" " -q ИМЕ_НА_ФУНКЦИЯ\n" " Проверка кои клавиши извикват функцията с това име.\n" " -u ИМЕ_НА_ФУНКЦИЯ\n" -" Премахване на присвояванията към всички клавиши на функцията с\n" +" Премахване на присвояванията към всички клавиши на функцията " +"с\n" " това име.\n" " -r КЛАВИШНА_ПОСЛЕДОВАТЕЛНОСТ\n" -" Премахване на присвоената функция от КЛАВИШНАта_ПОСЛЕДОВАТЕЛНОСТ.\n" +" Премахване на присвоената функция от " +"КЛАВИШНАта_ПОСЛЕДОВАТЕЛНОСТ.\n" " -f ФАЙЛ\n" " Прочитане на присвояванията на клавиши от ФАЙЛа.\n" " -x КЛАВИШНА_ПОСЛЕДОВАТЕЛНОСТ:КОМАНДА_НА_ОБВИВКАТА\n" " Изпълнение на КОМАНДАта_НА_ОБВИВКАТА при въвеждането на\n" " КЛАВИШНАта_ПОСЛЕДОВАТЕЛНОСТ.\n" -" -X Извеждане на клавишните комбинации зададени с „-x“ и свързаните с тях\n" +" -X Извеждане на клавишните комбинации зададени с „-x“ и свързаните с " +"тях\n" " команди във форма, която може да се ползва и за вход\n" " \n" " Изходен код:\n" -" bind връща 0, освен когато е зададена непозната опция или възникне грешка." +" bind връща 0, освен когато е зададена непозната опция или възникне " +"грешка." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2721,13 +2910,14 @@ msgid "" msgstr "" "Изход от цикли чрез „for“, „while“ или „until“.\n" " \n" -" Изход от цикли организирани чрез „for“, „while“ или „until“. Ако е зададен\n" +" Изход от цикли организирани чрез „for“, „while“ или „until“. Ако е " +"зададен\n" " БРОЙ се излиза от толкова на БРОЙ обхващащи цикли.\n" " \n" " Изходен код:\n" " 0, освен ако е зададен БРОЙ, който е по-малък от 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2739,20 +2929,23 @@ msgid "" msgstr "" "Продължаване на цикъл чрез „for“, „while“ или „until“.\n" " \n" -" Продължаване със следващата итерация от цикъл, организиран с „for“, „while“\n" -" или „until“. Ако е зададен БРОЙ, се продължава със следващата итерация\n" +" Продължаване със следващата итерация от цикъл, организиран с „for“, " +"„while“\n" +" или „until“. Ако е зададен БРОЙ, се продължава със следващата " +"итерация\n" " на обхващащия цикъл зададен с този БРОЙ.\n" " \n" " Изходен код:\n" " 0, освен ако е зададен БРОЙ, който е по-малък от 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2761,7 +2954,8 @@ msgstr "" "Изпълнение на вградени команди.\n" " \n" " Изпълнение на ВГРАДЕНАта_КОМАНДА с АРГУМЕНТи, без да се търси нормална\n" -" команда. Това е полезно в случаите, когато искате да създадете вградена\n" +" команда. Това е полезно в случаите, когато искате да създадете " +"вградена\n" " команда като функция на обвивката, но във функцията искате да изпълните\n" " вградената команда.\n" " \n" @@ -2769,7 +2963,7 @@ msgstr "" " Връща изходния код на ВГРАДЕНАта_КОМАНДА или лъжа, ако извиканата \n" " ВГРАДЕНА_КОМАНДА всъщност не е вградена команда." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2790,27 +2984,36 @@ msgstr "" " „$line $subroutine $filename“. Допълнителната информация може да се\n" " използва за получаване на информация за състоянието на стека.\n" " \n" -" Стойността на ИЗРАЗа показва за колко рамки спрямо текущата да се изведе\n" +" Стойността на ИЗРАЗа показва за колко рамки спрямо текущата да се " +"изведе\n" " информация. Най-горната рамка е 0.\n" " \n" " Изходен код:\n" -" Връща 0, освен ако обвивката изпълнява функция дефинирана в обвивката или\n" +" Връща 0, освен ако обвивката изпълнява функция дефинирана в обвивката " +"или\n" " ИЗРАЗът е грешен." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2826,11 +3029,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Смяна на работната директория на обвивката.\n" @@ -2838,34 +3043,45 @@ msgstr "" " Смяна на текущата директория да е ДИРЕКТОРИЯ. Променливата „HOME“ е\n" " стандартната директория.\n" " \n" -" Променливата „CDPATH“ определя пътя за търсене на директории, които могат да\n" +" Променливата „CDPATH“ определя пътя за търсене на директории, които " +"могат да\n" " съдържат ДИРЕКТОРИЯта. Директориите в „CDPATH“ са разделени с „:“. \n" -" Липсващо име на директория означава текущата директория, т.е. „.“. Ако името\n" +" Липсващо име на директория означава текущата директория, т.е. „.“. Ако " +"името\n" " на ДИРЕКТОРИЯта започва с наклонена черта „/“, „CDPATH“ не се ползва.\n" " \n" " Ако директорията не е открита, но е зададена опцията на обвивката\n" -" „cdable_vars“, то думата се пробва като име на променлива. Ако променливата\n" -" има стойност, то директорията се сменя към стойността на тази променлива.\n" +" „cdable_vars“, то думата се пробва като име на променлива. Ако " +"променливата\n" +" има стойност, то директорията се сменя към стойността на тази " +"променлива.\n" " \n" " Опции:\n" " -L налага следването на символните връзки. Символните връзки в\n" -" ДИРЕКТОРИЯта се обработват след указателите към горна директория „..“.\n" -" -P налага използването на фактическата подредба на директориите, вместо\n" -" да се следват символните връзки. Символните връзки в ДИРЕКТОРИЯта се\n" +" ДИРЕКТОРИЯта се обработват след указателите към горна директория " +"„..“.\n" +" -P налага използването на фактическата подредба на директориите, " +"вместо\n" +" да се следват символните връзки. Символните връзки в ДИРЕКТОРИЯта " +"се\n" " обработват след указателите към горна директория „..“.\n" -" -e ако е използвана опцията „-P“ и текущата директория не може да бъде\n" +" -e ако е използвана опцията „-P“ и текущата директория не може да " +"бъде\n" " определена, командата завършва с ненулев изход.\n" -" -@ на системите с поддръжка на разширени атрибути файлът се представя\n" +" -@ на системите с поддръжка на разширени атрибути файлът се " +"представя\n" " като директория, в която са атрибутите.\n" " \n" -" Стандартно символните връзки се следват, все едно е зададена опцията „-L“\n" +" Стандартно символните връзки се следват, все едно е зададена опцията „-" +"L“\n" " \n" " Изходен код:\n" -" Връща 0 при смяна на директорията. Когато е зададена опцията „-P“, 0 се\n" +" Връща 0 при смяна на директорията. Когато е зададена опцията „-P“, 0 " +"се\n" " връща при успешно задаване на променливата „PWD„. Във всички останали\n" " случаи изходът е ненулев." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2890,10 +3106,11 @@ msgstr "" " Стандартно поведението на „pwd“ без аргументи съответства на „-L“.\n" " \n" " Изходен код:\n" -" 0, освен ако е подадена неправилна опция или текущата директория не може да\n" +" 0, освен ако е подадена неправилна опция или текущата директория не може " +"да\n" " бъде прочетена." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2909,7 +3126,7 @@ msgstr "" " Изходен код:\n" " Винаги завършва успешно." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2921,7 +3138,7 @@ msgstr "" " Изходен код:\n" " Винаги завършва успешно." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2933,12 +3150,13 @@ msgstr "" " Изходен код:\n" " Винаги завършва неуспешно." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2953,20 +3171,25 @@ msgstr "" "Изпълнение на нормална команда или извеждане на информация за команди.\n" " \n" " Изпълнение на КОМАНДАта с АРГументи, без тя да се търси като функция на\n" -" обвивката, или извеждане на информация за указаните КОМАНДи. Може да се\n" -" използва за изпълнението на външни команди, дори когато съществува функция\n" +" обвивката, или извеждане на информация за указаните КОМАНДи. Може да " +"се\n" +" използва за изпълнението на външни команди, дори когато съществува " +"функция\n" " със същото име.\n" " \n" " Опции:\n" -" -p използване на стандартна стойност на PATH. Така могат да се открият\n" +" -p използване на стандартна стойност на PATH. Така могат да се " +"открият\n" " всички стандартни инструменти\n" -" -v извежда описание на КОМАНДАта подобно на вградената команда „type“\n" +" -v извежда описание на КОМАНДАта подобно на вградената команда " +"„type“\n" " -V извежда по пълно описание на всяка КОМАНДА\n" " \n" " Изходен код:\n" " Връща изходния код на КОМАНДАта или грешка, ако такава не е открита." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2994,12 +3217,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -3008,17 +3233,23 @@ msgid "" msgstr "" "Задаване на стойности на променливите и атрибутите.\n" " \n" -" Деклариране на променливи и задаване на атрибутите им. Ако не са дадени\n" +" Деклариране на променливи и задаване на атрибутите им. Ако не са " +"дадени\n" " ИМЕна се изобразяват атрибутите и стойностите на всички променливи.\n" " \n" " Опции:\n" -" -f Ограничаване на действието или извеждането до имената и дефинициите\n" +" -f Ограничаване на действието или извеждането до имената и " +"дефинициите\n" " на функциите\n" -" -F Ограничаване на извеждането само до имената на функциите, заедно с\n" -" номерата на редовете и изходните файлове при изчистване на грешките\n" -" -g Създаване на глобална променлива, когато опцията е употребена във\n" +" -F Ограничаване на извеждането само до имената на функциите, заедно " +"с\n" +" номерата на редовете и изходните файлове при изчистване на " +"грешките\n" +" -g Създаване на глобална променлива, когато опцията е употребена " +"във\n" " функция. В противен случай се пренебрегва\n" -" -I При създаването на локална променлива атрибутите и стойността ѝ да\n" +" -I При създаването на локална променлива атрибутите и стойността ѝ " +"да\n" " се вземат от променливата със същото име в предишната област на\n" " видимост\n" " -p Извеждане на атрибутите и стойността на всяко ИМЕ\n" @@ -3041,15 +3272,18 @@ msgstr "" " число се извършва аритметично изчисляване (вижте командата „let“).\n" " the `let' command).\n" " \n" -" Когато се използва във функция, командата „declare“ прави ИМЕната локални,\n" -" все едно се изпълнява командата „local“. Опцията „-g“ предотвратява това\n" +" Когато се използва във функция, командата „declare“ прави ИМЕната " +"локални,\n" +" все едно се изпълнява командата „local“. Опцията „-g“ предотвратява " +"това\n" " поведение.\n" " \n" " Изходен код:\n" -" 0, освен ако е зададена неправилна опция или възникне грешка при задаването\n" +" 0, освен ако е зададена неправилна опция или възникне грешка при " +"задаването\n" " на стойност на променлива." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3059,7 +3293,7 @@ msgstr "" " \n" " Синоним на „declare“. Виж „help declare“." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3075,21 +3309,25 @@ msgid "" msgstr "" "Дефиниране на локални променливи.\n" " \n" -" Създаване на локална променлива с това ИМЕ и зададената СТОЙНОСТ. ОПЦИЯта\n" +" Създаване на локална променлива с това ИМЕ и зададената СТОЙНОСТ. " +"ОПЦИЯта\n" " може да е всяка приемана от вградената команда „declare“.\n" " \n" -" Локалните променливи могат да се използват само във функция. Те са видими\n" +" Локалните променливи могат да се използват само във функция. Те са " +"видими\n" " само в нея и нейните наследници.\n" " \n" " Изходен код:\n" -" 0, освен ако е зададена неправилна ОПЦИЯ, възникне грешка при задаването на\n" +" 0, освен ако е зададена неправилна ОПЦИЯ, възникне грешка при задаването " +"на\n" " стойност на променлива, или в момента не се изпълнява функция." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3113,9 +3351,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3128,7 +3368,8 @@ msgstr "" " \n" " Опции:\n" " -n не се извежда знак за нов ред.\n" -" -e включва се интерпретирането на знаците, изброени по-долу, екранирани\n" +" -e включва се интерпретирането на знаците, изброени по-долу, " +"екранирани\n" " с обратна наклонена черта — „\\“\n" " -Е изрично се спира интерпретирането на долните знаци\n" " \n" @@ -3154,13 +3395,14 @@ msgstr "" " знакът с код в Unicode HHHH (в шестнайсетична бройна система).\n" " HHHH може да се състои от 1 до 4 шестнайсетични цифри.\n" " \\UHHHHHHHH\n" -" знакът с код в Unicode HHHHHHHH (в шестнайсетична бройна система).\n" +" знакът с код в Unicode HHHHHHHH (в шестнайсетична бройна " +"система).\n" " HHHHHHHH може да се състои от 1 до 8 шестнайсетични цифри.\n" " \n" " Изходен код:\n" " Връща 0, освен ако не възникне грешка при извеждането." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3174,7 +3416,8 @@ msgid "" msgstr "" "Извеждане на аргументите на стандартния изход.\n" " \n" -" Извеждане на АРГументите на стандартния изход последвани от знак за нов ред.\n" +" Извеждане на АРГументите на стандартния изход последвани от знак за нов " +"ред.\n" " \n" " Опции:\n" " -n без извеждане на знак за нов ред\n" @@ -3182,7 +3425,8 @@ msgstr "" " Изходен код:\n" " Връща 0, освен ако възникне грешка при извеждането." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3202,6 +3446,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3211,17 +3461,21 @@ msgstr "" "Включване и изключване на вградените в обвивката команди.\n" " \n" " Включване и изключване на командите вградени в обвивката. Изключването\n" -" позволява извикването на външна команда със същото име като вградена без\n" +" позволява извикването на външна команда със същото име като вградена " +"без\n" " използването на пълното име с пътя.\n" " \n" " Опции:\n" " -a Извеждане на списъка с вградените команди заедно с това дали са\n" " включени или не\n" " -n Изключване на вградените команди с посочените ИМЕна. Ако не са\n" -" дадени ИМЕна, се извежда списъкът с изключените вътрешни команди\n" -" -p Извеждане на списъка с вътрешни команди във формат, който може да\n" +" дадени ИМЕна, се извежда списъкът с изключените вътрешни " +"команди\n" +" -p Извеждане на списъка с вътрешни команди във формат, който може " +"да\n" " се ползва като вход\n" -" -s Извеждане само на имената на специалните вградени команди според\n" +" -s Извеждане само на имената на специалните вградени команди " +"според\n" " POSIX\n" " \n" " Опции за динамичното зареждане:\n" @@ -3232,17 +3486,19 @@ msgstr "" " Ако не са зададени опции, всяка от вътрешните команди с такова ИМЕ бива\n" " включена.\n" " \n" -" За да ползвате командата „test“, която се намира в пътя за изпълнение $PATH,\n" +" За да ползвате командата „test“, която се намира в пътя за изпълнение " +"$PATH,\n" " вместо вградения в обвивката вариант изпълнете: „enable -n test“.\n" " \n" " Изходен код:\n" " 0, освен ако ИМЕто не е на вградена команда или не възникне грешка." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3256,7 +3512,7 @@ msgstr "" " Изходен код:\n" " Връща изходния код на командата или код за успех, ако командата е нулева." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3298,47 +3554,66 @@ msgid "" msgstr "" "Анализиране на опциите и аргументите.\n" " \n" -" getopts се използва от процедурите на обвивката за анализа на позиционните\n" +" getopts се използва от процедурите на обвивката за анализа на " +"позиционните\n" " аргументи и опции.\n" " \n" -" НИЗът_С_ОПЦИИ съдържа знаците, които трябва да се разпознават като опции.\n" -" Ако буквата е следвана от двоеточие, очаква се опцията да получава аргумент,\n" +" НИЗът_С_ОПЦИИ съдържа знаците, които трябва да се разпознават като " +"опции.\n" +" Ако буквата е следвана от двоеточие, очаква се опцията да получава " +"аргумент,\n" " който да е разделен от нея с интервал(и).\n" " \n" -" При всяко извикване „getopts“ поставя следващата опция в променливата на\n" -" обвивката „name“, като я инициализира, ако тя не съществува, а индексът на\n" -" следващия аргумент, който трябва да се обработи, в променливата на обвивката\n" -" „OPTIND“. „OPTIND“ се инициализира да е 1 при всяко извикване на обвивка\n" +" При всяко извикване „getopts“ поставя следващата опция в променливата " +"на\n" +" обвивката „name“, като я инициализира, ако тя не съществува, а индексът " +"на\n" +" следващия аргумент, който трябва да се обработи, в променливата на " +"обвивката\n" +" „OPTIND“. „OPTIND“ се инициализира да е 1 при всяко извикване на " +"обвивка\n" " или скрипт. Когато опцията се нуждае от аргумент, той се поставя в\n" " променливата на обвивката „OPTARG“.\n" " \n" " „getopts“ докладва грешки по един от два начина. Ако първият знак на\n" -" „OPTSTRING“ е двоеточие, „getopts“ използва тихо докладване. В този режим\n" -" не се извеждат никакви съобщения за грешка. Ако се срещне неправилна опция,\n" -" „getopts“ слага срещнатия знак за опция в „OPTARG“. Ако липсва задължителен\n" -" аргумент, „getopts“ слага „:“ в променливата „ИМЕ“, а в „OPTARG“ — срещнатия\n" -" знак за опция. Когато „getopts“ не е в режим на тихо докладване и се срещне\n" -" неправилна опция, в променливата „ИМЕ“ се слага „?“, а „OPTARG“ се премахва,\n" -" а ако липсва задължителен аргумент, допълнително се изписва диагностично\n" +" „OPTSTRING“ е двоеточие, „getopts“ използва тихо докладване. В този " +"режим\n" +" не се извеждат никакви съобщения за грешка. Ако се срещне неправилна " +"опция,\n" +" „getopts“ слага срещнатия знак за опция в „OPTARG“. Ако липсва " +"задължителен\n" +" аргумент, „getopts“ слага „:“ в променливата „ИМЕ“, а в „OPTARG“ — " +"срещнатия\n" +" знак за опция. Когато „getopts“ не е в режим на тихо докладване и се " +"срещне\n" +" неправилна опция, в променливата „ИМЕ“ се слага „?“, а „OPTARG“ се " +"премахва,\n" +" а ако липсва задължителен аргумент, допълнително се изписва " +"диагностично\n" " съобщение.\n" " \n" -" Ако променливата на обвивката „OPTERR“ е със стойност 0, „getopts“ изключва\n" -" извеждането на диагностични съобщения, дори първият знак в „OPTSTRING“ да не\n" +" Ако променливата на обвивката „OPTERR“ е със стойност 0, „getopts“ " +"изключва\n" +" извеждането на диагностични съобщения, дори първият знак в „OPTSTRING“ " +"да не\n" " е двоеточие. По подразбиране „OPTERR“ е със стойност 1.\n" " \n" -" „getopts“ по принцип анализира позиционните аргументи, но ако аргументите са\n" +" „getopts“ по принцип анализира позиционните аргументи, но ако " +"аргументите са\n" " дадени като стойности на АРГУМЕНТИТЕ, те биват анализирани вместо това.\n" " \n" " Изходен код:\n" -" Връща 0 при откриването на опция. Връща друга стойност при стигането на\n" +" Връща 0 при откриването на опция. Връща друга стойност при стигането " +"на\n" " последната опция или при възникването на грешка." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3346,15 +3621,18 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Заместване на обвивката с дадената команда.\n" " \n" -" Изпълняване на КОМАНДАта, като тя замества текущата обвивка. АРГУМЕНТите\n" +" Изпълняване на КОМАНДАта, като тя замества текущата обвивка. " +"АРГУМЕНТите\n" " се подават на КОМАНДАта. Ако не е дадена КОМАНДА, пренасочванията се\n" " извършват в текущата обвивка.\n" " \n" @@ -3363,14 +3641,15 @@ msgstr "" " -c изпълняване на КОМАНДАта в празна среда\n" " -l поставяне на тире в нулевия аргумент на КОМАНДАта\n" " \n" -" Ако КОМАНДАта не може да бъде изпълнена, трябва да съществува неинтерактивна\n" +" Ако КОМАНДАта не може да бъде изпълнена, трябва да съществува " +"неинтерактивна\n" " обвивка, освен ако не е зададена опцията на обвивката „execfail“.\n" " \n" " Изходен код:\n" " 0, освен когато КОМАНДАта не е открита или възникне грешка при\n" " пренасочването." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3379,32 +3658,38 @@ msgid "" msgstr "" "Изход от обвивката.\n" " \n" -" Изход от обвивката с този ЦИФРОВ_КОД. Ако той е изпуснат, то изходният код\n" +" Изход от обвивката с този ЦИФРОВ_КОД. Ако той е изпуснат, то изходният " +"код\n" " е този на последната изпълнена команда." -#: builtins.c:724 +#: builtins.c:732 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 "" "Изход от входната обвивка.\n" " \n" -" Изход от входната обвивка с този ЦИФРОВ_КОД. Връща грешка, ако е изпълнена\n" +" Изход от входната обвивка с този ЦИФРОВ_КОД. Връща грешка, ако е " +"изпълнена\n" " в обвивка, която не е входна." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3417,37 +3702,47 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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" -" fc се използва за изброяването или редактирането и повторното изпълнение на\n" +" fc се използва за изброяването или редактирането и повторното изпълнение " +"на\n" " команди от списъка на историята.\n" -" ПЪРВИ и ПОСЛЕДЕН са номера, които могат да указват допустимия диапазон. Ако\n" +" ПЪРВИ и ПОСЛЕДЕН са номера, които могат да указват допустимия диапазон. " +"Ако\n" " е зададен само ПЪРВИят аргумент, той задава низ, който е началото на\n" " команда.\n" " \n" " Опции:\n" " -e РЕДАКТОР\n" " избор на текстов редактор, който да се използва. Стандартно е\n" -" указаният в променливата „FCEDIT“, след това се проверява „EDITOR“ и\n" +" указаният в променливата „FCEDIT“, след това се проверява „EDITOR“ " +"и\n" " в краен случай е „vi“.\n" " -l редовете да се покажат вместо редактират.\n" " -n номерата на редовете да не се отпечатват.\n" " -r обратна подредба (отпред да е най-новият ред).\n" " \n" -" При варианта „fc -s [ШАБЛОН=ЗАМЕСТИТЕЛ…] [КОМАНДА]“ командата се изпълнява, като\n" +" При варианта „fc -s [ШАБЛОН=ЗАМЕСТИТЕЛ…] [КОМАНДА]“ командата се " +"изпълнява, като\n" " всяка поява на ШАБЛона се заменя със ЗАМЕСТителя.\n" " \n" -" Удобен за използване синоним е „r='fc -s'“. По такъв начин, ако напишете\n" -" „r cc“, ще се изпълни последната команда, която започва с „cc“, а когато\n" +" Удобен за използване синоним е „r='fc -s'“. По такъв начин, ако " +"напишете\n" +" „r cc“, ще се изпълни последната команда, която започва с „cc“, а " +"когато\n" " се въведе само „r“, ще се изпълни последната команда.\n" " \n" " Изходен код:\n" -" Връща 0 или изхода от последната команда, който не е 0 в случай на грешка." +" Връща 0 или изхода от последната команда, който не е 0 в случай на " +"грешка." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3467,12 +3762,14 @@ msgstr "" " Изходът от командата, която е зададена да е текуща или грешка, ако при\n" " поставянето на задачата от фонов към текущ режим възникне такава." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3481,17 +3778,19 @@ msgstr "" "Поставяне на задачи във фонов режим.\n" " \n" " Поставя всяка ЗАДАЧА във фонов режим, все едно е била стартирана с „&“.\n" -" Ако липсва аргумент ЗАДАЧА, се използва текущата задача според обвивката.\n" +" Ако липсва аргумент ЗАДАЧА, се използва текущата задача според " +"обвивката.\n" " \n" " Изходен код:\n" " 0, освен ако управлението на задачи е изключено или възникне грешка." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3510,7 +3809,8 @@ msgid "" msgstr "" "Запомняне или извеждане на местоположенията на програми.\n" " \n" -" Определяне и запомняне на пълното име с пътя на всяко ИМЕ. Ако не са дадени\n" +" Определяне и запомняне на пълното име с пътя на всяко ИМЕ. Ако не са " +"дадени\n" " аргументи, се извежда информация за всички запомнени команди.\n" " \n" " Опции:\n" @@ -3520,16 +3820,18 @@ msgstr "" " Използване на посочения ПЪТ като пълен път за ИМЕто\n" " -r Забравяне на всички запомнени местоположения\n" " -t Извеждане на запомнените местоположения на всички ИМЕна. Ако е\n" -" посочено повече от едно ИМЕ, всяко местоположение се предшества от\n" +" посочено повече от едно ИМЕ, всяко местоположение се предшества " +"от\n" " ИМЕто\n" " Аргументи:\n" -" ИМЕ Всяко име се търси в пътя за изпълнение „PATH“ и при намирането му\n" +" ИМЕ Всяко име се търси в пътя за изпълнение „PATH“ и при намирането " +"му\n" " се добавя в списъка със запомнени команди.\n" " \n" " Изходен код:\n" " 0, освен ако ИМЕто не бъде открито или е дадена неправилна опция." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3547,28 +3849,34 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Извеждане на информация за вградените команди.\n" " \n" -" Извежда кратка информация за вградените команди. Ако е указан ШАБЛОН, се\n" -" извежда информация за напасващите команди. В противен случай се изважда\n" +" Извежда кратка информация за вградените команди. Ако е указан ШАБЛОН, " +"се\n" +" извежда информация за напасващите команди. В противен случай се " +"изважда\n" " информация за всички команди.\n" " \n" " Опции:\n" " -d Извеждане на кратко описание на всяка тема\n" " -m Извеждане във формат наподобяващ страница от ръководствата\n" -" -s Извеждане само на кратко обобщение за използването на всяка команда,\n" +" -s Извеждане само на кратко обобщение за използването на всяка " +"команда,\n" " съвпадаща с ШАБЛОНа\n" " \n" " Аргументи:\n" -" ШАБЛОН Шаблон за имената на командите, за които да се изведе информация\n" +" ШАБЛОН Шаблон за имената на командите, за които да се изведе " +"информация\n" " \n" " Изходен код:\n" " 0, освен ако никоя вградена команда не съвпада с шаблона или е дадена\n" " неправилна опция." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3592,18 +3900,24 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." msgstr "" "Извеждане и управление на списъка на историята.\n" " \n" -" Отпечатване на списъка на историята с номера на ред. Редовете, които са\n" +" Отпечатване на списъка на историята с номера на ред. Редовете, които " +"са\n" " отбелязани със знака „*“, са били променени. Аргументът N указва да се\n" " извеждат само N на брой реда.\n" " \n" @@ -3613,29 +3927,36 @@ msgstr "" " изтрива елемента в историята намиращ се посочената ПОЗИЦИЯ.\n" " Отрицателните позиции се броят от края на историята\n" " -a добавя историята от текущата сесия към файла с историята.\n" -" -n прочитане на непрочетените редове от файла с историята и добавяне към\n" +" -n прочитане на непрочетените редове от файла с историята и добавяне " +"към\n" " текущата история.\n" -" -r прочитане на файла с историята и добавяне на съдържанието към текущата\n" +" -r прочитане на файла с историята и добавяне на съдържанието към " +"текущата\n" " история.\n" " -w записване на текущата история във файла за историята.\n" -" -p извършване на историческо заместване за всеки АРГУМЕНТ, а резултатът да\n" +" -p извършване на историческо заместване за всеки АРГУМЕНТ, а резултатът " +"да\n" " се изведе, без нищо да се записва в историята на командите.\n" -" -s аргументите, които не са опции, се добавят като един елемент към файла с\n" +" -s аргументите, които не са опции, се добавят като един елемент към " +"файла с\n" " историята.\n" " \n" " Ако аргументът ИМЕ_НА_ФАЙЛ е зададен, той се използва като файл за\n" " историята. Ако той липсва, се използва файлът сочен в променливата на\n" " средата „HISTFILE“. В противен случай се ползва „~/.bash_history“.\n" " \n" -" Ако променливата „HISTTIMEFORMAT“ е зададена и не е „null“, стойността ѝ се\n" -" използва като форматиращия низ за функцията „strftime“, за да се отбелязва\n" -" времето свързано с всеки елемент от историята. В противен случай времето не\n" +" Ако променливата „HISTTIMEFORMAT“ е зададена и не е „null“, стойността ѝ " +"се\n" +" използва като форматиращия низ за функцията „strftime“, за да се " +"отбелязва\n" +" времето свързано с всеки елемент от историята. В противен случай " +"времето не\n" " се записва.\n" " \n" " Изходен код:\n" " 0. Ако възникне грешка или е подадена неправилна опция връща грешка." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3673,14 +3994,15 @@ msgstr "" " -s ограничаване на изхода само до спрените задачи.\n" " \n" " Ако е зададена опцията „-x“, КОМАНДАта се изпълнява, след като всички\n" -" ЗАДАЧи, които се появяват като АРГУМЕНТи, се заменят с идентификатора на\n" +" ЗАДАЧи, които се появяват като АРГУМЕНТи, се заменят с идентификатора " +"на\n" " водача на групата процеси.\n" " \n" " Изходен код:\n" " 0, освен ако не е дадена неправилна опция или възникни грешка. Ако се\n" " ползва „-x“, връща изходното състояние на КОМАНДАта." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3698,7 +4020,8 @@ msgid "" msgstr "" "Премахване на ЗАДАЧи от текущата обвивка.\n" " \n" -" Премахва всеки аргумент-задача от таблицата на активните задачи. Ако ЗАДАЧА\n" +" Премахва всеки аргумент-задача от таблицата на активните задачи. Ако " +"ЗАДАЧА\n" " не е указана, се използва тази, която обвивката счита за текуща.\n" " \n" " Опции:\n" @@ -3710,7 +4033,7 @@ msgstr "" " Изходен код:\n" " 0, освен когато е дадена неправилна опция или несъществуваща ЗАДАЧА." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3744,26 +4067,31 @@ msgstr "" " -n СИГНАЛ\n" " СИГНАЛ се интерпретира като номер на сигнал\n" " -l изброява имената на сигналите. Ако към командата са добавени\n" -" аргументи, те се интерпретират като номера на сигналите чиито имена\n" +" аргументи, те се интерпретират като номера на сигналите чиито " +"имена\n" " да се изброят.\n" " -L синоним на „-l“\n" " \n" -" „kill“ е команда вградена в обвивката поради две причини: позволява да се\n" -" използват и идентификатори на задачи освен идентификатори на процеси, а и\n" -" ако сте пуснали максимално разрешения за вас брой процеси, няма да ви се\n" +" „kill“ е команда вградена в обвивката поради две причини: позволява да " +"се\n" +" използват и идентификатори на задачи освен идентификатори на процеси, а " +"и\n" +" ако сте пуснали максимално разрешения за вас брой процеси, няма да ви " +"се\n" " налага да пуснете още един процес, за да убиете друг.\n" " \n" " Изходен код:\n" " 0. Ако възникне грешка или е подадена неправилна опция, връща грешка." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3801,7 +4129,8 @@ msgid "" msgstr "" "Изчисляване на аритметичен израз.\n" " \n" -" Всеки АРГУМЕНТ е аритметичен израз, който се бъде изчислен. Изчисленията\n" +" Всеки АРГУМЕНТ е аритметичен израз, който се бъде изчислен. " +"Изчисленията\n" " се извършват в аритметика с целочислени стойности с постоянна широчина\n" " без проверка за препълване. Делението на 0 се прихваща и се отбелязва\n" " грешка. Следващият списък с оператори е разделен на групи според\n" @@ -3827,31 +4156,39 @@ msgstr "" " =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=\n" " присвояване\n" " \n" -" Разрешено е ползването на променливи на обвивката като операнди. Името на\n" +" Разрешено е ползването на променливи на обвивката като операнди. Името " +"на\n" " променлива се замества с нейната стойност (която се преобразува до цяло\n" -" число с постоянна широчина) в израза. Не е необходимо променливата да е с\n" +" число с постоянна широчина) в израза. Не е необходимо променливата да е " +"с\n" " атрибут за целочисленост, за да се използва в израз.\n" " \n" -" Операторите се изчисляват по приоритет. Подизразите в скоби се изчисляват\n" +" Операторите се изчисляват по приоритет. Подизразите в скоби се " +"изчисляват\n" " първи и могат да променят приоритета.\n" " \n" " Изходен код:\n" " Ако последният АРГУМЕНТ се изчислява като 0, „let“ връща 1. В противен\n" " случай — връща 0." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3859,11 +4196,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3881,35 +4221,46 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Изчитане на ред от стандартния вход и разделянето му по полета.\n" " \n" -" От стандартния вход или от файловия дескриптор ФД, ако е използвана опцията\n" -" „-u“, се прочита един ред. Редът се разделя на полета — думи. Първата дума\n" +" От стандартния вход или от файловия дескриптор ФД, ако е използвана " +"опцията\n" +" „-u“, се прочита един ред. Редът се разделя на полета — думи. Първата " +"дума\n" " се присвоява на първото ИМЕ, втората дума на второто ИМЕ и т.н., а на\n" -" последното ИМЕ се присвояват оставащите думи. Като разделители на думи се\n" -" използват само знаците указани в променливата „IFS“. Стандартно знакът „\\“\n" +" последното ИМЕ се присвояват оставащите думи. Като разделители на думи " +"се\n" +" използват само знаците указани в променливата „IFS“. Стандартно знакът " +"„\\“\n" " екранира разделителите и новите редове.\n" "\n" -" Ако не са дадени ИМЕна, прочетеният ред се запазва в променливата „REPLY“.\n" +" Ако не са дадени ИМЕна, прочетеният ред се запазва в променливата " +"„REPLY“.\n" " \n" " Опции:\n" -" -a прочетените думи се присвояват последователно на елементите на МАСИВа,\n" +" -a прочетените думи се присвояват последователно на елементите на " +"МАСИВа,\n" " като индексът му започва от 0.\n" " -d РАЗДЕЛИТЕЛ\n" -" четенето продължава до прочитането на първия знак, който присъства в\n" +" четенето продължава до прочитането на първия знак, който присъства " +"в\n" " променливата „DELIM“, а не до минаването на нов ред.\n" " -e за четене на реда се използва readline\n" " -i ТЕКСТ\n" " за първоначален текст в readline се ползва ТЕКСТ\n" " -n БРОЙ_ЗНАЦИ\n" -" четенето завършва след прочитането на този БРОЙ_ЗНАЦИ, не се чака за\n" +" четенето завършва след прочитането на този БРОЙ_ЗНАЦИ, не се чака " +"за\n" " нов ред. Разделител в рамките на този БРОЙ_ЗНАЦИ се зачита.\n" " -N БРОЙ_ЗНАЦИ\n" -" четенето завършва с прочитането на точно този БРОЙ_ЗНАЦИ, освен ако\n" +" четенето завършва с прочитането на точно този БРОЙ_ЗНАЦИ, освен " +"ако\n" " не се появи EOF или времето за изчакване на въвеждане не изтече.\n" " Всички разделители се пренебрегват.\n" " -p ПОДСКАЗКА\n" @@ -3918,21 +4269,27 @@ msgstr "" " -r заместването на екранираните с „\\“ знаци се изключва.\n" " -s входът от терминал не се отпечатва на екрана.\n" " -t БРОЙ_СЕКУНДИ\n" -" задава интервал от този БРОЙ_СЕКУНДИ, в който трябва да се въведе цял\n" +" задава интервал от този БРОЙ_СЕКУНДИ, в който трябва да се въведе " +"цял\n" " ред. В противен случай read завършва с грешка. Ако е зададена,\n" -" стойността на променливата „TMOUT“ обозначава времето, за което трябва\n" -" да се въведе редът. За БРОЙ_СЕКУНДИ може да се ползва и нецяло число.\n" -" Ако БРОЙ_СЕКУНДИ e 0, read незабавно завършва работа, без да се опитва\n" -" да чете данни и връща код 0, само ако от указания файлов дескриптор\n" +" стойността на променливата „TMOUT“ обозначава времето, за което " +"трябва\n" +" да се въведе редът. За БРОЙ_СЕКУНДИ може да се ползва и нецяло " +"число.\n" +" Ако БРОЙ_СЕКУНДИ e 0, read незабавно завършва работа, без да се " +"опитва\n" +" да чете данни и връща код 0, само ако от указания файлов " +"дескриптор\n" " могат да се прочетат данни.\n" " \n" " Изходен код:\n" -" 0, освен ако не се срещне знак за край на файл EOF, изтече време повече от\n" +" 0, освен ако не се срещне знак за край на файл EOF, изтече време повече " +"от\n" " указаното в БРОЙ_СЕКУНДИ, при което кодът за изход е над 128, възникне\n" " грешка при задаване на стойност на променлива или е зададен неправилен\n" " файлов дескриптор като аргумент на -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3946,14 +4303,17 @@ msgstr "" "Връщане от функция на обвивката.\n" " \n" " Кара изпълняваната функция или скрипт да завършат работа със зададения\n" -" изходен ЦИФРОВ_КОД. Ако не е зададен ЦИФРОВ_КОД се използва изходния код на\n" +" изходен ЦИФРОВ_КОД. Ако не е зададен ЦИФРОВ_КОД се използва изходния " +"код на\n" " последно изпълнената команда във функцията или скрипта.\n" " \n" " Изходен код:\n" -" Връща ЦИФРОВия_КОД или грешка, ако обвивката в момента не изпълнява функция\n" +" Връща ЦИФРОВия_КОД или грешка, ако обвивката в момента не изпълнява " +"функция\n" " или скрипт." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3996,7 +4356,8 @@ 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" @@ -4020,13 +4381,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4045,10 +4411,13 @@ msgstr "" " -a Отбелязване на променливите, които са създадени или променени, да\n" " бъдат изнесени.\n" " -b Незабавно известяване на спиране на задача.\n" -" -e Незабавен изход, ако команда приключи команда с код, който не е 0.\n" -" -f Изключване на генерирането на имена на файлове (чрез „*“, „?“ и т.н.).\n" +" -e Незабавен изход, ако команда приключи команда с код, който не е " +"0.\n" +" -f Изключване на генерирането на имена на файлове (чрез „*“, „?“ и т." +"н.).\n" " -h Запомняне на местоположението на команди при търсенето им.\n" -" -k Всички аргументи за присвояване се поместват в средата на команда, не\n" +" -k Всички аргументи за присвояване се поместват в средата на команда, " +"не\n" " само тези, които предхождат името на команда.\n" " -m Включване на управлението на задачи.\n" " -n Прочитане на команди, без да се изпълняват.\n" @@ -4063,7 +4432,8 @@ msgstr "" " hashall същото като „-h“\n" " histexpand същото като „-H“\n" " history включване на историята на командите\n" -" ignoreeof обвивката няма да излезе при откриване на знак за край\n" +" ignoreeof обвивката няма да излезе при откриване на знак за " +"край\n" " на файл „EOF“.\n" " interactive-comments\n" " позволяване на коментари в интерактивните команди\n" @@ -4077,49 +4447,66 @@ msgstr "" " nounset същото като „-u“\n" " onecmd същото като „-t“\n" " physical същото като „-P“\n" -" pipefail изходният код на програмния канал е този на последната\n" +" pipefail изходният код на програмния канал е този на " +"последната\n" " команда, която завършва с код различен от 0\n" -" posix промяна на поведението на „bash“ да отговаря по-добре\n" +" posix промяна на поведението на „bash“ да отговаря по-" +"добре\n" " на стандарта POSIX\n" " privileged същото като „-p“\n" " verbose същото като „-v“\n" -" vi използване на интерфейс за редактиране подобен на „vi“\n" +" vi използване на интерфейс за редактиране подобен на " +"„vi“\n" " xtrace същото като „-x“\n" -" -p Опцията e включена, когато реалният и ефективният идентификатори на\n" +" -p Опцията e включена, когато реалният и ефективният идентификатори " +"на\n" " процеси не съвпадат. Изключва обработката на файла посочен в\n" -" променливата „ENV“ и внасянето на функции на обвивката. Изключването\n" -" на тази опция води до това ефективните идентификатори за потребител и\n" +" променливата „ENV“ и внасянето на функции на обвивката. " +"Изключването\n" +" на тази опция води до това ефективните идентификатори за " +"потребител и\n" " група да станат равни на реалните.\n" " -t Изход след прочитането и изпълнението на една команда.\n" -" -u Незададените променливи да се третират като грешки при заместването.\n" +" -u Незададените променливи да се третират като грешки при " +"заместването.\n" " -v Отпечатване на входните редове към обвивката при прочитането им.\n" " -x Отпечатване на командите и аргументите им при изпълнението им.\n" " -B Обвивката ще извършва заместване на изразите с фигурни скоби.\n" -" -C Предотвратяване на презаписването на съществуващите обикновени файлове\n" +" -C Предотвратяване на презаписването на съществуващите обикновени " +"файлове\n" " чрез пренасочване на изхода.\n" " -E Прихващането за „ERR“ да се наследява от функциите на обвивката.\n" -" -H Включване на заместването чрез историята с „!“. Стандартно тази опция\n" +" -H Включване на заместването чрез историята с „!“. Стандартно тази " +"опция\n" " е налична само за интерактивните обвивки.\n" -" -P Да не се следват символните връзки при изпълнението на команди като\n" +" -P Да не се следват символните връзки при изпълнението на команди " +"като\n" " „cd“, които променят текущата директория.\n" -" -T Прихващането за „DEBUG“ и „RETURN“ да се наследява от функциите на\n" +" -T Прихващането за „DEBUG“ и „RETURN“ да се наследява от функциите " +"на\n" " обвивката.\n" -" -- Оставащите аргументи да се тълкуват като позиционни. Ако няма повече\n" +" -- Оставащите аргументи да се тълкуват като позиционни. Ако няма " +"повече\n" " аргументи, се изтриват съответните позиционни.\n" -" - Оставащите аргументи да се тълкуват като позиционни. Опциите „-x“ и\n" +" - Оставащите аргументи да се тълкуват като позиционни. Опциите „-x“ " +"и\n" " „-v“ са изключени.\n" " \n" -" Използването на „+“ вместо „-“ изключва опциите. Тези опции могат да се\n" -" използват и при стартирането на обвивката. Текущото им състояние се намира\n" -" в променливата „-“ (получава се с „$-“). Останалите АРГументи са позиционни\n" -" и се присвояват съответно на променливите с имена „1“, „2“,… „n“ (получават\n" +" Използването на „+“ вместо „-“ изключва опциите. Тези опции могат да " +"се\n" +" използват и при стартирането на обвивката. Текущото им състояние се " +"намира\n" +" в променливата „-“ (получава се с „$-“). Останалите АРГументи са " +"позиционни\n" +" и се присвояват съответно на променливите с имена „1“, „2“,… " +"„n“ (получават\n" " се с „$1“, „$2“,… „${n}“). Ако не са зададени АРГументи, се извеждат\n" " всички променливи на средата.\n" " \n" " Изходен код:\n" " 0, освен ако не е зададена неправилна опция." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4131,7 +4518,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4139,7 +4527,8 @@ msgid "" " Exit Status:\n" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -"Изтриване на стойностите и атрибутите на променливите и функциите на обвивката.\n" +"Изтриване на стойностите и атрибутите на променливите и функциите на " +"обвивката.\n" " \n" " За всяко ИМЕ изтрива съответната променлива или функция.\n" " \n" @@ -4159,12 +4548,13 @@ msgstr "" " 0, освен ако е зададена неправилна опция или някое от ИМЕната е само за\n" " четене." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4179,7 +4569,8 @@ msgstr "" "Задаване на атрибута за изнасяне на променливите на обвивката.\n" " \n" " Обозначава всяко едно от ИМЕната за изнасяне в средата на изпълнение на\n" -" последващо изпълнените команди. Ако е дадена СТОЙНОСТ, тя се присвоява на\n" +" последващо изпълнените команди. Ако е дадена СТОЙНОСТ, тя се присвоява " +"на\n" " ИМЕто преди изнасянето.\n" " \n" " Опции:\n" @@ -4191,9 +4582,10 @@ msgstr "" " Аргументът „--“ прекъсва по нататъшната обработка на опции.\n" " \n" " Изходен код:\n" -" 0, освен ако е зададена неправилна опция или някое от ИМЕната е неправилно." +" 0, освен ако е зададена неправилна опция или някое от ИМЕната е " +"неправилно." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4215,23 +4607,27 @@ msgid "" msgstr "" "Задаване на променливи на обвивката като непроменливи константи.\n" " \n" -" Отбелязване на всяко от ИМЕната само за четене. Тяхната стойност не може да\n" -" бъде променяна чрез последващо присвояване. Ако е дадена СТОЙНОСТ, тя се\n" +" Отбелязване на всяко от ИМЕната само за четене. Тяхната стойност не " +"може да\n" +" бъде променяна чрез последващо присвояване. Ако е дадена СТОЙНОСТ, тя " +"се\n" " задава на името преди задаването му като константно.\n" " \n" " Опции:\n" " -a ИМЕната са на променливи-масиви\n" " -A ИМЕната са на променливи-асоциативни масиви\n" " -f ИМЕната са на функции на обвивката\n" -" -p Извеждане на имената на всички константни променливи или функции, в\n" +" -p Извеждане на имената на всички константни променливи или " +"функции, в\n" " зависимост дали е зададена опцията „-f“\n" " \n" " Аргументът „--“ прекъсва по нататъшната обработка на опции.\n" " \n" " Изходен код:\n" -" 0, освен ако е зададена неправилна опция или някое от ИМЕната е неправилно." +" 0, освен ако е зададена неправилна опция или някое от ИМЕната е " +"неправилно." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4243,14 +4639,15 @@ msgid "" msgstr "" "Изместване на позиционните параметри.\n" " \n" -" Преименуване на позиционните параметри „БРОЙ+1“, „БРОЙ+2“… на 1, 2…. Така\n" +" Преименуване на позиционните параметри „БРОЙ+1“, „БРОЙ+2“… на 1, 2…. " +"Така\n" " те стават достъпни не като ${БРОЙ+1}…, като „$1“…. Ако не е зададена\n" " стойност БРОЙ, се използва 1.\n" " \n" " Изходен код:\n" " 0, освен ако БРОят е отрицателно или по-голямо от стойността „$#“." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4265,24 +4662,30 @@ msgid "" msgstr "" "Изпълняване на команди от файл в текущата обвивка\n" " \n" -" Изчитане и изпълнение на командите от ФАЙЛа и изход. Директориите описани в\n" -" променливата „PATH“ се използват за изпълнението на командите от ФАЙЛа. Ако\n" +" Изчитане и изпълнение на командите от ФАЙЛа и изход. Директориите " +"описани в\n" +" променливата „PATH“ се използват за изпълнението на командите от ФАЙЛа. " +"Ако\n" " са зададени АРГУМЕНТИ, те се превръщат в позиционни аргументи при\n" " изпълнението на ФАЙЛа.\n" " \n" " Изходен код:\n" -" Връща състоянието на последно изпълнената команда във ФАЙЛа. Ако той не\n" +" Връща състоянието на последно изпълнената команда във ФАЙЛа. Ако той " +"не\n" " може да бъде открит, изходът е грешка." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4290,7 +4693,8 @@ msgstr "" "Временно спиране на изпълнението на обвивката.\n" " \n" " Спиране на работата на тази обвивка докато обвивката не получи сигнал\n" -" SIGCONT. Освен ако изрично не се зададе опция, входните обвивки не могат да\n" +" SIGCONT. Освен ако изрично не се зададе опция, входните обвивки не " +"могат да\n" " бъдат спрени по този начин.\n" " \n" " Опции:\n" @@ -4299,7 +4703,7 @@ msgstr "" " Изходен код:\n" " 0, освен ако не възникне грешка или управлението на задачи е изключено." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4333,7 +4737,8 @@ 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" @@ -4354,7 +4759,8 @@ 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" @@ -4381,9 +4787,12 @@ msgid "" msgstr "" "Изчисляване на условен израз.\n" " \n" -" Изход с код 0 (истина) или 1 (лъжа) в зависимост от стойността на ИЗРАЗа.\n" -" Изразите могат да бъдат унарни или бинарни. Унарните най-често се използват\n" -" за проверка на състоянието на файл. Освен тях има и оператори за числови\n" +" Изход с код 0 (истина) или 1 (лъжа) в зависимост от стойността на " +"ИЗРАЗа.\n" +" Изразите могат да бъдат унарни или бинарни. Унарните най-често се " +"използват\n" +" за проверка на състоянието на файл. Освен тях има и оператори за " +"числови\n" " сравнения и низови оператори.\n" " \n" " Поведението на тестовете зависи от броя на аргументите. За цялостно\n" @@ -4407,14 +4816,18 @@ msgstr "" " -s ФАЙЛ Истина, ако ФАЙЛът може да бъде записван от вас.\n" " -S ФАЙЛ Истина, ако ФАЙЛът е програмно гнездо.\n" " -t ФДСК Истина, ако Файловият_ДеСКриптор е отворен на терминал.\n" -" -u ФАЙЛ Истина, ако ФАЙЛът е със зададен бит за смяна на потребител\n" +" -u ФАЙЛ Истина, ако ФАЙЛът е със зададен бит за смяна на " +"потребител\n" " при изпълнение.\n" " -w ФАЙЛ Истина, ако ФАЙЛът може да бъде записван от вас.\n" " -x ФАЙЛ Истина, ако ФАЙЛът може да бъде изпълняван от вас.\n" -" -O ФАЙЛ Истина, ако ФАЙЛът може да бъде ефективно притежаван от вас.\n" -" -G ФАЙЛ Истина, ако ФАЙЛът може да бъде ефективно притежаван от вашата\n" +" -O ФАЙЛ Истина, ако ФАЙЛът може да бъде ефективно притежаван от " +"вас.\n" +" -G ФАЙЛ Истина, ако ФАЙЛът може да бъде ефективно притежаван от " +"вашата\n" " група.\n" -" -N ФАЙЛ Истина, ако ФАЙЛът е бил променян от последното му прочитане.\n" +" -N ФАЙЛ Истина, ако ФАЙЛът е бил променян от последното му " +"прочитане.\n" " \n" " ФАЙЛ_1 -nt ФАЙЛ_2 Истина, ако ФАЙЛ_1 е по-нов от ФАЙЛ_2 (според\n" " датата на промяна).\n" @@ -4436,19 +4849,23 @@ msgstr "" " Други оператори:\n" " \n" " -o ОПЦИЯ Истина, ако ОПЦИЯта на обвивката е зададена.\n" -" -v ПРОМЕНЛИВА Истина, ако ПРОМЕНЛИВАта на обвивката е зададена.\n" -" -R ПРОМЕНЛИВА Истина, ако ПРОМЕНЛИВАта е зададена като променлива-\n" +" -v ПРОМЕНЛИВА Истина, ако ПРОМЕНЛИВАта на обвивката е " +"зададена.\n" +" -R ПРОМЕНЛИВА Истина, ако ПРОМЕНЛИВАта е зададена като " +"променлива-\n" " указател.\n" " ! ИЗРАЗ Истина, ако ИЗРАЗът е лъжа.\n" " ИЗРАЗ_1 -a ИЗРАЗ_2 Истина, ако и двата ИЗРАЗа са истина.\n" " ИЗРАЗ_1 -o ИЗРАЗ_2 Истина, ако поне един от ИЗРАЗите е истина.\n" " АРГ_1 ОПЕР АРГ_2 Аритметични тестове. Те връщат истина, ако се\n" " изпълнява математическото условие на ОПЕРатора,\n" -" който е един от следните (значението е в скоби):\n" +" който е един от следните (значението е в " +"скоби):\n" " „-eq“ (=), „-ne“ (!=), „-lt“ (<), „-le“ (<=),\n" " „-gt“ (>) , „-ge“ (>=).\n" " \n" -" Аритметичните изрази завършват истинно, ако АРГумент_1 е съответно равен,\n" +" Аритметичните изрази завършват истинно, ако АРГумент_1 е съответно " +"равен,\n" " неравен, по-малък, по-малък или равен, по-голям, по-голям или равен на\n" " АРГумент_2.\n" " \n" @@ -4456,7 +4873,7 @@ msgstr "" " 0, ако ИЗРАЗът е верен. Грешка, когато ИЗРАЗът е неверен или е даден\n" " неправилен аргумент." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4465,15 +4882,18 @@ msgid "" msgstr "" "Изчисляване на условен израз.\n" " \n" -" Това е синоним на вградената команда „test“, но последният аргумент трябва\n" -" задължително да е знакът „]“, който да съответства на отварящата квадратна\n" +" Това е синоним на вградената команда „test“, но последният аргумент " +"трябва\n" +" задължително да е знакът „]“, който да съответства на отварящата " +"квадратна\n" " скоба „[“." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4481,62 +4901,84 @@ msgid "" msgstr "" "Извеждане на времето на работа на процесите.\n" " \n" -" Отпечатва общото потребителско и системно време на работа на обвивката и\n" +" Отпечатва общото потребителско и системно време на работа на обвивката " +"и\n" " всичките ѝ дъщерни процеси.\n" " \n" " Изходен код:\n" " Винаги 0." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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" -" Дефинира и задейства функции за обработка, когато обвивката получи сигнал\n" +" Дефинира и задейства функции за обработка, когато обвивката получи " +"сигнал\n" " или възникне друго събитие.\n" " \n" -" Командата АРГУМЕНТ ще бъде прочетена и изпълнена, когато обвивката получи\n" +" Командата АРГУМЕНТ ще бъде прочетена и изпълнена, когато обвивката " +"получи\n" " УКАЗАНия_СИГНАЛ(и). Ако АРГУМЕНТът липсва (и се подава единичен\n" -" УКАЗАН_СИГНАЛ) или е „-“, то всеки УКАЗАН_СИГНАЛ се връща към първоначалната\n" +" УКАЗАН_СИГНАЛ) или е „-“, то всеки УКАЗАН_СИГНАЛ се връща към " +"първоначалната\n" " си стойност. Ако АРГУМЕНТът е нулевият низ, всеки УКАЗАН_СИГНАЛ се\n" " пренебрегва от обвивката и командите, които се стартират през нея.\n" " \n" -" Ако УКАЗАНият_СИГНАЛ е „EXIT (0)“, то командата АРГУМЕНТ се изпълнява от\n" +" Ако УКАЗАНият_СИГНАЛ е „EXIT (0)“, то командата АРГУМЕНТ се изпълнява " +"от\n" " обвивката при изход. Ако УКАЗАНият_СИГНАЛ е „DEBUG“, АРГУМЕНТът се\n" " изпълнява след всяка проста команда. Ако УКАЗАНият_СИГНАЛ е „RETURN“,\n" -" АРГУМЕНТът се изпълнява след всяко изпълнение на функция както и изпълнение\n" -" на скрипт чрез вградените команди „.“ и „source“. Ако УКАЗАНият_СИГНАЛ е\n" +" АРГУМЕНТът се изпълнява след всяко изпълнение на функция както и " +"изпълнение\n" +" на скрипт чрез вградените команди „.“ и „source“. Ако УКАЗАНият_СИГНАЛ " +"е\n" " „ERR“, АРГУМЕНТът се изпълнява след всяка грешка, която би предизвикала\n" " изход от обвивката при стартирането ѝ с опцията „-e“.\n" " \n" @@ -4544,19 +4986,23 @@ msgstr "" " прихващания.\n" " \n" " Опции:\n" -" -l отпечатва списъка с имената на сигналите и съответстващите им номера.\n" +" -l отпечатва списъка с имената на сигналите и съответстващите им " +"номера.\n" " -p извеждат се командите свързани с всеки УКАЗАН_СИГНАЛ.\n" " \n" -" Всеки УКАЗАН_СИГНАЛ е или име на сигнал от файла „signal.h“ или номер на\n" +" Всеки УКАЗАН_СИГНАЛ е или име на сигнал от файла „signal.h“ или номер " +"на\n" " сигнал.\n" -" Няма разлика между главни и малки букви в имената на сигнали, а представката\n" +" Няма разлика между главни и малки букви в имената на сигнали, а " +"представката\n" " „SIG“ не е задължителна.\n" -" Сигнал може да бъде изпратен на обвивката с командата „kill -signal $$“.\n" +" Сигнал може да бъде изпратен на обвивката с командата „kill -signal $" +"$“.\n" " \n" " Изходен код:\n" " 0, освен ако е зададен неправилен сигнал или опция." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4582,7 +5028,8 @@ 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" @@ -4590,31 +5037,39 @@ msgstr "" " команда.\n" " \n" " Опции:\n" -" -a Извеждане на всички местоположения, които съдържат изпълним файл с\n" +" -a Извеждане на всички местоположения, които съдържат изпълним файл " +"с\n" " това ИМЕ. Включва синонимите, вградените команди и функции на\n" " обвивката, само когато не е използвана опцията „-p“\n" " -f Без търсене във функциите дефинирани в обвивката\n" -" -P Търсене в пътя за изпълнение указан в PATH, дори и ако съществува\n" -" синоним, вградена команда или функция дефинирана в обвивката с това\n" +" -P Търсене в пътя за изпълнение указан в PATH, дори и ако " +"съществува\n" +" синоним, вградена команда или функция дефинирана в обвивката с " +"това\n" " ИМЕ\n" " -p Връща или името на файла, който ще бъде изпълнен или нищо в\n" " случаите, когато командата „type -t ИМЕ“ не би върнала „file“\n" " -t Извеждане на една от думите „alias“ (синоним), „keyword“\n" -" (резервирана лексема в обвивката), „function“ (функция дефинирана в\n" -" обвивката), „builtin“ (вградена команда), „file“ (изпълним файл) или\n" +" (резервирана лексема в обвивката), „function“ (функция " +"дефинирана в\n" +" обвивката), „builtin“ (вградена команда), „file“ (изпълним файл) " +"или\n" " „“, ако ИМЕто не е открито\n" " \n" " Аргументи:\n" " ИМЕ Името, за което да се изведе информация.\n" " \n" " Изходен код:\n" -" 0, ако всички подадени ИМЕна са открити, неуспех, ако някое от тях липсва." +" 0, ако всички подадени ИМЕна са открити, неуспех, ако някое от тях " +"липсва." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4651,9 +5106,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4661,7 +5117,8 @@ msgstr "" "Промяна на ресурсите на обвивката.\n" " \n" " Командата осъществява контрол върху ресурсите, които са достъпни на\n" -" процесите стартирани през обвивката върху системите, които поддържат такова\n" +" процесите стартирани през обвивката върху системите, които поддържат " +"такова\n" " управление.\n" " \n" " Опции:\n" @@ -4673,7 +5130,8 @@ msgstr "" " паметта (core)\n" " -d максималният размер на сегмента на процес за данни\n" " -e максималният приоритет (nice)\n" -" -f максималният размер на файловете създадени от обвивката и дъщерните\n" +" -f максималният размер на файловете създадени от обвивката и " +"дъщерните\n" " ѝ процеси\n" " -i максималният брой на изчакващите сигнали\n" " -l максималният размер памет, която процес може да заключи\n" @@ -4693,10 +5151,13 @@ msgstr "" " \n" " Не всички ограничения са налични на всички платформи.\n" " \n" -" Ако е зададено ОГРАНИЧЕНИЕ, то това е новата стойност на указания ресурс.\n" -" Специалните стойности „soft“, „hard“ и „unlimited“ означават текущите меко,\n" +" Ако е зададено ОГРАНИЧЕНИЕ, то това е новата стойност на указания " +"ресурс.\n" +" Специалните стойности „soft“, „hard“ и „unlimited“ означават текущите " +"меко,\n" " твърдо и никакво ограничение съответно. В противен случай се извежда\n" -" текущата стойност на указания ресурс. Ако не е зададена опция, се приема,\n" +" текущата стойност на указания ресурс. Ако не е зададена опция, се " +"приема,\n" " че е зададена „-f“.\n" " \n" " Стойностите са в блокове от по 1024 байта, с изключение на:\n" @@ -4707,7 +5168,7 @@ msgstr "" " Изходен код:\n" " 0, освен ако не възникни грешка или е дадена неправилна опция." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4729,34 +5190,41 @@ msgstr "" " Задава МАСКАта за правата за достъп до новосъздадени файлове. Ако не е\n" " зададена МАСКА, се извежда текущата ѝ стойност.\n" " \n" -" Ако МАСКАта започва с цифра, тя се тълкува като осмично число. В противен\n" +" Ако МАСКАта започва с цифра, тя се тълкува като осмично число. В " +"противен\n" " случай трябва да е низ, който би бил приет от командата chmod(1).\n" " \n" " Опции:\n" -" -p ако не е зададена МАСКА, изведеният низ може да бъде ползван за вход\n" -" -S изведената маска да е във вид на НИЗ. Без опцията изходът е осмично\n" +" -p ако не е зададена МАСКА, изведеният низ може да бъде ползван за " +"вход\n" +" -S изведената маска да е във вид на НИЗ. Без опцията изходът е " +"осмично\n" " число\n" " \n" " Изходен код:\n" " 0, освен ако МАСКАта или някоя от зададените опции са неправилни." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4770,54 +5238,75 @@ msgstr "" "Изчакване на завършването задача и връщане на изходния код.\n" " \n" " Изчакване на всички указани ИДентификатори, които могат да са номера на\n" -" процеси или указатели на задачи, и докладване на изходния код. Ако не е\n" +" процеси или указатели на задачи, и докладване на изходния код. Ако не " +"е\n" " зададен ИДентификатор, се изчакват всички активни дъщерни процеси, а\n" -" изходният код е 0. Ако ИДентификаторът е указател на задача, се изчакват\n" +" изходният код е 0. Ако ИДентификаторът е указател на задача, се " +"изчакват\n" " всички процеси в конвейера на задачата.\n" " \n" " Ако е зададена опцията „-n“, се изчаква края на работата на някоя от\n" -" задачите в списъка от указаните ИДентификатори, а ако такъв липсва — края на\n" +" задачите в списъка от указаните ИДентификатори, а ако такъв липсва — " +"края на\n" " следващата задача и се връща нейния изходен код.\n" " \n" -" Ако е зададена опцията „-p“, номерът на процес или указателят на задача,\n" -" чийто изходени код се връща, се присвоява на ПРОМЕНЛИВАта, зададена като\n" -" аргумент. Преди първоначалното присвояване променливата няма да е зададена.\n" +" Ако е зададена опцията „-p“, номерът на процес или указателят на " +"задача,\n" +" чийто изходени код се връща, се присвоява на ПРОМЕНЛИВАта, зададена " +"като\n" +" аргумент. Преди първоначалното присвояване променливата няма да е " +"зададена.\n" " Това е полезно, само когато е използвана опцията „-n“.\n" " \n" " Ако е зададена опцията „-f“ и управлението на задачите е включено, се\n" -" изчаква завършването на процеса/задачата с указаните ИДентификатори вместо\n" +" изчаква завършването на процеса/задачата с указаните ИДентификатори " +"вместо\n" " да се изчаква смяната на състоянието им.\n" " \n" " Изходен код:\n" " Връща изходния код на последната задача или процес. Ако е зададена\n" " неправилна опция или неправилен ИДентификатор, връща грешка. Грешка се\n" -" връща и при задаването на опцията „-n“, а обвивката няма дъщерни процеси,\n" +" връща и при задаването на опцията „-n“, а обвивката няма дъщерни " +"процеси,\n" " които не се чакат." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Изчакване на указания процес и докладване за изходния код.\n" " \n" -" Изчакване на всички указани процеси и докладване за изходния код. Ако не е\n" +" Изчакване на всички указани процеси и докладване за изходния код. Ако " +"не е\n" " зададен ИДентификатор_ПРоцeс, всички текущо активни дъщерни процеси се\n" -" изчакват и изходният код е 0. ИДентификатор_ПРоцeс трябва да съответства на\n" +" изчакват и изходният код е 0. ИДентификатор_ПРоцeс трябва да " +"съответства на\n" " някой процес.\n" " \n" " Изходен код:\n" " Изходния код на процеса с последния идентификатор. Грешка, ако е даден\n" " неправилен идентификатор или е дадена неправилна опция." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4831,15 +5320,18 @@ msgid "" msgstr "" "Изпълнение на команда за всеки член в списък от елементи\n" " \n" -" Цикълът „for“ изпълнява последователност от команди за всеки член в списък\n" -" от елементи. Ако блокът „в ДУМИ…“ не присъства, използва се „in \"$@\"“.\n" -" За всеки елемент в ДУМИте, ИМЕто се задава да е елементът и се изпълняват\n" +" Цикълът „for“ изпълнява последователност от команди за всеки член в " +"списък\n" +" от елементи. Ако блокът „в ДУМИ…“ не присъства, използва се „in " +"\"$@\"“.\n" +" За всеки елемент в ДУМИте, ИМЕто се задава да е елементът и се " +"изпълняват\n" " КОМАНДИте.\n" " \n" " Изходен код:\n" " Връща изходния код на последно изпълнената команда." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4862,13 +5354,14 @@ msgstr "" " КОМАНДИ\n" " (( EXP_3 ))\n" " done\n" -" ИЗРАЗ_1, ИЗРАЗ_2, и ИЗРАЗ_3 са аритметични изрази. Всеки изпуснат израз се\n" +" ИЗРАЗ_1, ИЗРАЗ_2, и ИЗРАЗ_3 са аритметични изрази. Всеки изпуснат израз " +"се\n" " изчислява да е 1.\n" " \n" " Изходен код:\n" " Връща изходния код на последно изпълнената команда." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4891,12 +5384,18 @@ msgstr "" " \n" " ДУМИте биват замествани, което води до създаването на списък с думи.\n" " Наборът от заместените думи бива отпечатан на изхода за стандартната\n" -" грешка, като всяка от тях се предшества от номер. Ако клаузата „in ДУМИ“\n" -" липсва, използва се „in \"$@\"“. В такива случаи се отпечатва подсказката\n" -" „PS3“ и от стандартния вход се прочита ред. Ако редът се състои от номера,\n" -" който съответства на някоя от изведените думи, ИМЕто се задава да е тази\n" -" дума. Ако редът е празен, отново се отпечатват ДУМИте и подсказката. Ако\n" -" се прочете „EOF“, командата завършва. Всяка друга стойност присвоява „null“\n" +" грешка, като всяка от тях се предшества от номер. Ако клаузата „in " +"ДУМИ“\n" +" липсва, използва се „in \"$@\"“. В такива случаи се отпечатва " +"подсказката\n" +" „PS3“ и от стандартния вход се прочита ред. Ако редът се състои от " +"номера,\n" +" който съответства на някоя от изведените думи, ИМЕто се задава да е " +"тази\n" +" дума. Ако редът е празен, отново се отпечатват ДУМИте и подсказката. " +"Ако\n" +" се прочете „EOF“, командата завършва. Всяка друга стойност присвоява " +"„null“\n" " на ИМЕ. Прочетеният ред се запазва в променливата REPLY. КОМАНДИте се\n" " изпълняват след всеки избор до изпълняването на команда за прекъсване\n" " (break).\n" @@ -4904,7 +5403,7 @@ msgstr "" " Изходен код:\n" " Връща изходния код на последно изпълнената команда." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4934,7 +5433,7 @@ msgstr "" " Изходен код:\n" " Изходният код е този на ПРОГРАМНия_КАНАЛ." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4946,22 +5445,28 @@ msgid "" msgstr "" "Изпълнение на команди на базата на напасване по шаблон.\n" " \n" -" Избирателно се изпълняват КОМАНДИ на база ДУМА, която напасва на ШАБЛОН.\n" +" Избирателно се изпълняват КОМАНДИ на база ДУМА, която напасва на " +"ШАБЛОН.\n" " Шаблоните се разделят със знака „|“.\n" " \n" " Изходен код:\n" " Изходният код е този на последно изпълнената команда." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4969,24 +5474,31 @@ msgid "" msgstr "" "Изпълнение на команда на базата на условие.\n" " \n" -" Първо се изпълняват командите в блока „if КОМАНДИ“. Ако изходният код е 0,\n" -" то се изпълнява блокът „then КОМАНДИ“. В противен случай последователно се\n" -" изпълнява всеки блок „elif КОМАНДИ“ — ако изходният код е 0, то се изпълнява\n" -" съответния блок „then КОМАНДИ“, след което завършва изпълнението на целия\n" +" Първо се изпълняват командите в блока „if КОМАНДИ“. Ако изходният код е " +"0,\n" +" то се изпълнява блокът „then КОМАНДИ“. В противен случай последователно " +"се\n" +" изпълнява всеки блок „elif КОМАНДИ“ — ако изходният код е 0, то се " +"изпълнява\n" +" съответния блок „then КОМАНДИ“, след което завършва изпълнението на " +"целия\n" " блок „if“.\n" " Ако изходният код на никой от блоковете „if“ и „elif“ не е бил 0,\n" -" изпълнява се блока „else КОМАНДИ“, стига такъв да присъства. Изходният код\n" -" от цялата конструкция е този на последната изпълнена команда или е 0, ако\n" +" изпълнява се блока „else КОМАНДИ“, стига такъв да присъства. Изходният " +"код\n" +" от цялата конструкция е този на последната изпълнена команда или е 0, " +"ако\n" " никое тестово условие, не се е оценило като истина.\n" " \n" " Изходен код:\n" " Изходният код е този на последно изпълнената команда." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -5000,11 +5512,12 @@ msgstr "" " Изходен код:\n" " Изходният код е този на последно изпълнената команда." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -5018,7 +5531,7 @@ msgstr "" " Изходен код:\n" " Изходният код е този на последно изпълнената команда." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5033,19 +5546,22 @@ msgstr "" "Създаване на копроцес с даденото ИМЕ.\n" " \n" " Асинхронно изпълнение на КОМАНДАта, като стандартните вход и изход се\n" -" пренасочват от и към файловите дескриптори, които трябва да са с индекси\n" -" съответно 0 и 1 в променливата-масив ИМЕ в изпълняваната обвивка. Ако не е\n" +" пренасочват от и към файловите дескриптори, които трябва да са с " +"индекси\n" +" съответно 0 и 1 в променливата-масив ИМЕ в изпълняваната обвивка. Ако " +"не е\n" " дадено ИМЕ на променлива, стандартно се ползва „COPROC“.\n" " \n" " Изходен код:\n" " Изходният код е 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -5054,15 +5570,18 @@ msgid "" msgstr "" "Дефиниране на функция на обвивката.\n" " \n" -" Създаване на функция на обвивката със зададеното ИМЕ. Когато се извика като\n" +" Създаване на функция на обвивката със зададеното ИМЕ. Когато се извика " +"като\n" " обикновена команда, КОМАНДИте се изпълняват в контекста на извикващата\n" -" обвивка. При извикването на ИМЕто, аргументите подадени на функцията са\n" -" достъпни като $1,… , $9, а името на функцията е достъпно като $FUNCNAME.\n" +" обвивка. При извикването на ИМЕто, аргументите подадени на функцията " +"са\n" +" достъпни като $1,… , $9, а името на функцията е достъпно като " +"$FUNCNAME.\n" " \n" " Изходен код:\n" " 0, освен ако ИМЕто не е само за четене." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5074,13 +5593,14 @@ msgid "" msgstr "" "Изпълнение на група от команди.\n" " \n" -" Изпълняване на цял набор от команди в група. Това е един от начините да се\n" +" Изпълняване на цял набор от команди в група. Това е един от начините да " +"се\n" " пренасочи цял набор от команди.\n" " \n" " Изходен код:\n" " Изходният код е този на последно изпълнената команда." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5104,7 +5624,7 @@ msgstr "" " Изходен код:\n" " Изходният код е този възобновената задача." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5122,13 +5642,16 @@ msgstr "" " Изходен код:\n" " 1, ако резултатът на ИЗРАЗа е 0. В противен случай — 0." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5149,11 +5672,13 @@ msgstr "" "Изпълнение на команда-условие\n" " \n" " Връща състояние 0 или 1 в зависимост от оценката на условния ИЗРАЗ.\n" -" Изразите са съставени от същите примитиви, както вградената команда „test“\n" +" Изразите са съставени от същите примитиви, както вградената команда " +"„test“\n" " и могат да се съчетават чрез следните оператори:\n" " \n" " ( ИЗРАЗ ) Връща стойността на ИЗРАЗа\n" -" ! ИЗРАЗ Истина, ако ИЗРАЗ се оценя на лъжа, в останалите случаи е лъжа\n" +" ! ИЗРАЗ Истина, ако ИЗРАЗ се оценя на лъжа, в останалите случаи е " +"лъжа\n" " ИЗРАЗ_1 && ИЗРАЗ_2\n" " Истина, ако едновременно ИЗРАЗ_1 и ИЗРАЗ_2 са истина, в\n" " останалите случаи е лъжа.\n" @@ -5162,7 +5687,8 @@ msgstr "" " останалите случаи е лъжа.\n" " \n" " Когато се използват операторите „==“ и „!=“, низът от дясната страна на\n" -" оператора се използва като шаблон и се извършва напасване. Когато се ползва\n" +" оператора се използва като шаблон и се извършва напасване. Когато се " +"ползва\n" " операторът „=~“, изразът от дясната му страна се тълкува като регулярен\n" " израз.\n" " \n" @@ -5172,7 +5698,7 @@ msgstr "" " Изходен код:\n" " 0 или едно според стойността на ИЗРАЗа." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5230,22 +5756,30 @@ msgstr "" " BASH_VERSION Информация за версията на bash\n" " CDPATH Списък с директории разделени с двоеточие, които да се\n" " търсят като аргументи за командата „cd“\n" -" GLOBIGNORE Списък с шаблони на файлови имена, разделени с двоеточие,\n" +" GLOBIGNORE Списък с шаблони на файлови имена, разделени с " +"двоеточие,\n" " които да се игнорират от заместването на пътя\n" -" HISTFILE Името на файла, в който се съхранява историята на командите\n" -" HISTFILESIZE Максималният брой редове, които горният файл може да съдържа\n" -" HISTSIZE Максималният брой редове, които една работеща обвивка може\n" +" HISTFILE Името на файла, в който се съхранява историята на " +"командите\n" +" HISTFILESIZE Максималният брой редове, които горният файл може да " +"съдържа\n" +" HISTSIZE Максималният брой редове, които една работеща обвивка " +"може\n" " да достъпи\n" " HOME Пълният път до домашната ви директория\n" " HOSTNAME Името на текущата машина\n" " HOSTTYPE Видът на процесора, под който работи текущата обвивка\n" -" IGNOREEOF Управлява действието на обвивката при срещането на единичен\n" -" знак за край на файл „EOF“. Ако променливата е зададена, тя\n" +" IGNOREEOF Управлява действието на обвивката при срещането на " +"единичен\n" +" знак за край на файл „EOF“. Ако променливата е " +"зададена, тя\n" " указва броя на знаците „EOF“, който могат да се срещнат\n" -" самостоятелно на един ред, преди обвивката да завърши работа\n" +" самостоятелно на един ред, преди обвивката да завърши " +"работа\n" " и излезе (стандартно е 10). Когато променливата не е\n" " зададена, един „EOF“ означава край на входящите данни\n" -" MACHTYPE Низ, който описва текущата система, на която работи bash\n" +" MACHTYPE Низ, който описва текущата система, на която работи " +"bash\n" " MAILCHECK Колко често bash да проверява за нови писма (в секунди)\n" " MAILPATH Списък с файлове, които bash проверява за нови писма\n" " OSTYPE Версията на Юникс, на която работи bash\n" @@ -5258,26 +5792,39 @@ msgstr "" " SHELLOPTS Списък с включените опции на обвивката, разделени с\n" " двоеточие\n" " TERM Името на текущия вид терминал\n" -" TIMEFORMAT Изходният формат за статистиката за времето за изпълнение на\n" +" TIMEFORMAT Изходният формат за статистиката за времето за " +"изпълнение на\n" " команда, който се използва от запазената дума „time“\n" -" auto_resume Стойност, която не е „null“, означава, че командна дума,\n" -" която се появява самостоятелно на ред, първо се проверява в\n" -" списъка с текущо спрените задачи. Ако бъде открита там,\n" +" auto_resume Стойност, която не е „null“, означава, че командна " +"дума,\n" +" която се появява самостоятелно на ред, първо се " +"проверява в\n" +" списъка с текущо спрените задачи. Ако бъде открита " +"там,\n" " задачата се пуска и се слага на преден план. Стойност\n" -" „exact“ (строго съвпадение) означава, че командната дума,\n" -" трябва точно да съвпада с името на команда в списъка със\n" -" спрени задачи. Стойност „substring“ (съвпадение на подниз)\n" -" означава, че командната дума трябва да е подниз на задачата.\n" -" Всяка друга стойност означава, че командата думата трябва да\n" +" „exact“ (строго съвпадение) означава, че командната " +"дума,\n" +" трябва точно да съвпада с името на команда в списъка " +"със\n" +" спрени задачи. Стойност „substring“ (съвпадение на " +"подниз)\n" +" означава, че командната дума трябва да е подниз на " +"задачата.\n" +" Всяка друга стойност означава, че командата думата " +"трябва да\n" " е началото на спряна задача\n" -" histchars Знаци, които определят бързото заместване и това по история.\n" -" Първият знак е за заместването по история, обикновено е „!“.\n" -" Вторият е за бързото заместване, обикновено е „^“. Третият\n" +" histchars Знаци, които определят бързото заместване и това по " +"история.\n" +" Първият знак е за заместването по история, обикновено е " +"„!“.\n" +" Вторият е за бързото заместване, обикновено е „^“. " +"Третият\n" " е за коментарите в историята, обикновено е „#“\n" -" HISTIGNORE Списък с шаблони, разделени с двоеточие, които указват кои\n" +" HISTIGNORE Списък с шаблони, разделени с двоеточие, които указват " +"кои\n" " команди да не се запазват в историята\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5313,29 +5860,36 @@ msgstr "" " като най-горна директория става текущата директория. Без\n" " аргументи сменя най-горните две директории.\n" " \n" -" -n подтискане на нормалното преминаване към директория при изваждането на\n" +" -n подтискане на нормалното преминаване към директория при изваждането " +"на\n" " директория към стека, така че се променя само той.\n" " \n" " Аргументи:\n" -" +N Превърта стека, така че N-тата директория (като се брои от лявата \n" -" страна на списъка, изведен от командата „dirs“ като се почва от 0)\n" +" +N Превърта стека, така че N-тата директория (като се брои от " +"лявата \n" +" страна на списъка, изведен от командата „dirs“ като се почва от " +"0)\n" " да е най-отгоре.\n" " \n" -" -N Превърта стека, така че N-тата директория (като се брои от дясната\n" -" страна на списъка, изведен от командата „dirs“ като се почва от 0)\n" +" -N Превърта стека, така че N-тата директория (като се брои от " +"дясната\n" +" страна на списъка, изведен от командата „dirs“ като се почва от " +"0)\n" " да е най-отгоре.\n" " \n" " \n" -" dir Добавя ДИРекторията най-отгоре в стека, като я прави новата текуща\n" +" dir Добавя ДИРекторията най-отгоре в стека, като я прави новата " +"текуща\n" " работна директория.\n" " \n" " Можете да изведете стека на директорията с командата „dirs“.\n" " \n" " Изходен код:\n" -" 0, освен ако е подаден неправилен аргумент или не може да се премине към\n" +" 0, освен ако е подаден неправилен аргумент или не може да се премине " +"към\n" " съответната директория." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5363,11 +5917,13 @@ msgid "" msgstr "" "Изваждане на директории от стека.\n" " \n" -" Маха директории от стека с тях. Без аргументи премахва последната директория\n" +" Маха директории от стека с тях. Без аргументи премахва последната " +"директория\n" " в стека и влиза в новата последна директория.\n" " \n" " Опции:\n" -" -n подтискане на нормалното преминаване към директория при изваждането на\n" +" -n подтискане на нормалното преминаване към директория при изваждането " +"на\n" " директория към стека, така че се променя само той.\n" " \n" " Аргументи:\n" @@ -5383,10 +5939,11 @@ msgstr "" " Стекът с директориите се визуализира с командата „dirs“.\n" " \n" " Изходен код:\n" -" 0, освен ако е подаден неправилен аргумент или не може да се премине към\n" +" 0, освен ако е подаден неправилен аргумент или не може да се премине " +"към\n" " съответната директория." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5416,27 +5973,31 @@ msgid "" msgstr "" "Извеждане на стека на директориите.\n" " \n" -" Отпечатва списъка с текущо запомнените директории. Списъкът се попълва чрез\n" +" Отпечатва списъка с текущо запомнените директории. Списъкът се попълва " +"чрез\n" " командата „pushd“. Можете да вадите директории от стека с командата\n" " „popd“.\n" " \n" " Опции:\n" " -c изчистване на стека на директориите като изтрива всички елементи\n" -" -l извеждане на пълните имена на директориите, а не съкратените спрямо\n" +" -l извеждане на пълните имена на директориите, а не съкратените " +"спрямо\n" " домашната директория имена („/homes/pesho/bin“, а не „~/bin“)\n" " -p поредово отпечатване без поредния номер в стека\n" " -v поредово отпечатване заедно с поредния номер в стека\n" " \n" " Аргументи: \n" -" +N извежда N-тия елемент отляво в списъка отпечатан от командата „dirs“,\n" +" +N извежда N-тия елемент отляво в списъка отпечатан от командата " +"„dirs“,\n" " когато е стартирана без опции. Брои се от 0.\n" -" -N извежда N-тия елемент отдясно в списъка отпечатан от командата „dirs“,\n" +" -N извежда N-тия елемент отдясно в списъка отпечатан от командата " +"„dirs“,\n" " когато е стартирана без опции. Брои се от 0.\n" " \n" " Изходен код:\n" " 0, освен ако е дадена неправилна опция или възникне грешка." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5457,22 +6018,28 @@ msgid "" msgstr "" "Включване и изключване на опции на обвивката.\n" " \n" -" Превключване на състоянието на всяка от дадените ОПЦИи на обвивката. Ако не\n" -" не са зададени аргументи, се извежда списък от с дадените ОПЦИи или всички,\n" -" ако не са дадени такива, като се указва за всяка дали и включена или не.\n" +" Превключване на състоянието на всяка от дадените ОПЦИи на обвивката. " +"Ако не\n" +" не са зададени аргументи, се извежда списък от с дадените ОПЦИи или " +"всички,\n" +" ако не са дадени такива, като се указва за всяка дали и включена или " +"не.\n" " \n" " Опции:\n" -" -o ограничаване на опциите до определените за използване със „set -o“\n" +" -o ограничаване на опциите до определените за използване със „set -" +"o“\n" " -p извеждане на всяка опция с означение дали е включена или не\n" " -q без извеждане на информация\n" " -s включване на всяка от ОПЦИИте\n" " -u изключване на всяка от ОПЦИИте\n" " \n" " Изходен код:\n" -" 0, ако ОПЦИЯта е включена, грешка, ако е зададена неправилна или изключена\n" +" 0, ако ОПЦИЯта е включена, грешка, ако е зададена неправилна или " +"изключена\n" " ОПЦИЯ." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5480,70 +6047,86 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Форматиране и отпечатване на АРГУМЕНТИте според управлението на ФОРМАТа.\n" " \n" " Опции:\n" -" -v ПРОМЕНЛИВА изходът се поставя в ПРОМЕНЛИВАта на обвивката, вместо да\n" +" -v ПРОМЕНЛИВА изходът се поставя в ПРОМЕНЛИВАта на обвивката, вместо " +"да\n" " се извежда на стандартния изход.\n" " \n" " ФОРМАТът е последователност от знаци, която съдържа три вида обекти:\n" -" ⁃ обикновени знаци, които биват отпечатани директно на стандартния изход;\n" +" ⁃ обикновени знаци, които биват отпечатани директно на стандартния " +"изход;\n" " ⁃ екраниращи знакови последователности, които биват преобразувани и\n" " отпечатани на стандартния изход;\n" " ⁃ форматиращи знакови последователности, всяка от които предизвиква\n" " отпечатването на следващ аргумент.\n" " \n" -" Освен стандартните форматирания описани в ръководството на printf(1), printf\n" +" Освен стандартните форматирания описани в ръководството на printf(1), " +"printf\n" " приема и следните инструкции:\n" " %b предизвиква заместването на екраниранията с обратно наклонени\n" " черти в съответния аргумент\n" " %q предизвиква цитирането на аргумента, така че да може да бъде\n" " използван като вход за обвивката\n" -" %Q подобно на „%q“, но се прилага някаква точност към нецитирания\n" +" %Q подобно на „%q“, но се прилага някаква точност към " +"нецитирания\n" " аргумент преди цитирането му\n" -" %(fmt) отпечатване на низа при третиране на аргумента като дата и време\n" +" %(fmt) отпечатване на низа при третиране на аргумента като дата и " +"време\n" " според strftime(3)\n" " \n" " Форматът се преизползва до приемането на всички аргументи. Ако има по-\n" -" малко аргументи от посочените във форма̀та, поведението на допълнителните е\n" +" малко аргументи от посочените във форма̀та, поведението на допълнителните " +"е\n" " все едно за аргумент да са подадени нулева стойност или празен низ.\n" " \n" " Изходен код:\n" " 0, освен ако не е дадена неправилна опция или възникне грешка при\n" " извеждането на резултата или при присвояването на стойността." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5557,8 +6140,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5570,31 +6155,43 @@ msgstr "" " дописване във формат, който може да се използва за вход.\n" " \n" " Опции:\n" -" -p Извеждане на текущите инструкции за автоматично дописване във формат,\n" +" -p Извеждане на текущите инструкции за автоматично дописване във " +"формат,\n" " който може да се използва за вход\n" -" -r Премахване на инструкциите за автоматично дописване на всяко ИМЕ, а\n" +" -r Премахване на инструкциите за автоматично дописване на всяко ИМЕ, " +"а\n" " когато такова не е указано — всички инструкции\n" -" -D Прилагане на дописванията и действията като стандартните за командите,\n" +" -D Прилагане на дописванията и действията като стандартните за " +"командите,\n" " без никакви специфични инструкции\n" " -E Прилагане на дописванията и действията като тези на „празната“\n" " команда — когато все още нищо не е написано на командния ред\n" -" -I Прилагане на дописванията и действията към първата дума (обикновено\n" +" -I Прилагане на дописванията и действията към първата дума " +"(обикновено\n" " това е командата)\n" " \n" -" При извършване на автоматично дописване, действията се прилагат в реда на\n" -" опциите с главна буква дадени по-горе. Опцията „-D“ е с по-висок приоритет\n" +" При извършване на автоматично дописване, действията се прилагат в реда " +"на\n" +" опциите с главна буква дадени по-горе. Опцията „-D“ е с по-висок " +"приоритет\n" " от „-E“, която има по-висок приоритет от „-I“.\n" " \n" " Изходен код:\n" " 0, освен когато е дадена неправилна опция или възникне грешка." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5608,13 +6205,16 @@ msgstr "" " Изходен код:\n" " 0, освен ако е дадена неправилна опция или възникне грешка." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5654,30 +6254,39 @@ msgstr "" " Аргументи:\n" " \n" " Всяко ИМЕ указва команда, за която трябва предварително да е зададена\n" -" спецификация за дописване чрез вградената команда „complete“. Ако не са\n" -" зададени ИМЕна, командата „compopt“ трябва да бъде изпълнена от функция,\n" -" която генерира спецификациите за дописване. В този случай опциите за текущо\n" +" спецификация за дописване чрез вградената команда „complete“. Ако не " +"са\n" +" зададени ИМЕна, командата „compopt“ трябва да бъде изпълнена от " +"функция,\n" +" която генерира спецификациите за дописване. В този случай опциите за " +"текущо\n" " изпълнявания генератор на дописвания се променят.\n" " \n" " Изходен код:\n" -" 0, освен когато е дадена неправилна опция или липсват инструкции към ИМЕто\n" +" 0, освен когато е дадена неправилна опция или липсват инструкции към " +"ИМЕто\n" " за автоматично дописване." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5690,14 +6299,17 @@ 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" +"Изчитане на редове от стандартния вход и запазване в променлива — " +"индексиран\n" " низ.\n" " \n" " Прочитане на редове от стандартния вход, които след това се запазват в\n" @@ -5714,26 +6326,32 @@ msgstr "" " -t Премахване на последващия знак-РАЗДЕЛител от всеки ред\n" " (стандартно е знакът за нов ред)\n" " -u ФАЙЛов_ДЕСКРиптор\n" -" Изчитане на редовете от ФАЙЛов_ДЕСКРиптор, а не стандартния\n" +" Изчитане на редовете от ФАЙЛов_ДЕСКРиптор, а не " +"стандартния\n" " вход\n" -" -C ФУНКЦИЯ Функция, която се извиква при изчитането на всеки БРОЙ_РЕДА\n" -" -c БРОЙ_РЕДА Редове, които да се изчетат преди да се извика ФУНКЦИЯта\n" +" -C ФУНКЦИЯ Функция, която се извиква при изчитането на всеки " +"БРОЙ_РЕДА\n" +" -c БРОЙ_РЕДА Редове, които да се изчетат преди да се извика " +"ФУНКЦИЯта\n" " \n" " Аргументи:\n" " МАСИВ Име на променливата-масив\n" " \n" -" Ако опцията „-C“ е зададена без „-c“, стандартния БРОЙ_РЕДА е 5000. При\n" +" Ако опцията „-C“ е зададена без „-c“, стандартния БРОЙ_РЕДА е 5000. " +"При\n" " извикването на ФУНКЦИЯта за аргументи ѝ се подават индекса на следващия\n" " елемент от масива и реда, който се счита за стойност.\n" " \n" -" Ако не е дадено изрично НАЧАЛО, командата „mapfile“ изчиства МАСИВа, преди\n" +" Ако не е дадено изрично НАЧАЛО, командата „mapfile“ изчиства МАСИВа, " +"преди\n" " да започне присвояването към него.\n" " \n" " Изходен код:\n" -" Връща 0, освен ако е дадена неправилна опция или ако МАСИВът е променлива\n" +" Връща 0, освен ако е дадена неправилна опция или ако МАСИВът е " +"променлива\n" " само за четене или не е индексиран масив." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5742,3 +6360,29 @@ msgstr "" "Прочитане на редове от файл и поставяне в променлива – масив.\n" " \n" " Синоним на „mapfile“." + +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Връщане на контекста на текущото извикване на подпрограма.\n" +#~ " \n" +#~ " Без ИЗРАЗ връща „$line $filename“. С ИЗРАЗ връща\n" +#~ " „$line $subroutine $filename“. Допълнителната информация може да се\n" +#~ " използва за получаване на информация за състоянието на стека.\n" +#~ " \n" +#~ " Стойността на ИЗРАЗа показва за колко рамки спрямо текущата да се " +#~ "изведе\n" +#~ " информация. Най-горната рамка е 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "предупреждение: %s: %s" diff --git a/po/ca.gmo b/po/ca.gmo index c144d0ed78169904dcca4b2f9e8dca69c82abb56..882fd895dd038f023d0ca36e60e3a2b16311c854 100644 GIT binary patch delta 12611 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 delta 51250 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 F{|881vXKA) diff --git a/po/ca.po b/po/ca.po index eb9791a01..69eeee8a7 100644 --- a/po/ca.po +++ b/po/ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-07-06 20:08+0200\n" "Last-Translator: Ernest Adrogué Calveras <eadrogue@gmx.net>\n" "Language-Team: Catalan <ca@dodds.net>\n" @@ -19,124 +19,126 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "subíndex erroni" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: s'elimina l'atribut «nameref»" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: no és possible convertir un vector indexat en associatiu" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: no es pot assignar a un índex no-numèric" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: l'assignació en vectors associatius requereix un subíndex" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: no es pot crear: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command: no s'ha trobat el mapa de tecles per a l'ordre" +msgstr "" +"bash_execute_unix_command: no s'ha trobat el mapa de tecles per a l'ordre" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: el primer caràcter no-blanc no és «\"»" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "falta un caràcter de tancament «%c» a %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: falta un caràcter «:» de separació" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "«%s»: no es pot desvincular en el mapa de tecles de l'ordre" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "expansió de claus: no es pot assignar memòria per a %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "expansió de claus: ha fallat l'assignació de memòria per a %u elements" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "expansió de claus: ha fallat l'assignació de memòria per a «%s»" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "«%s»: el nom de l'àlies no és valid" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "l'edició de línia no està habilitada" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "«%s»: el nom del mapa de tecles no és vàlid" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: no es pot llegir: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "«%s»: nom de funció desconegut" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s no està vinculat a cap tecla.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s pot ser invocat via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "«%s»: no es pot desvincular" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "nombre d'iteracions" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "només té sentit en una iteració de tipus «for», «while» o «until»" # help caller -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -145,7 +147,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Retorna el context de la subrutina actual.\n" "\n" @@ -154,355 +160,370 @@ msgstr "" " per a proporcionar un traçat de la pila.\n" "\n" " El valor de EXPR indica quants «frames» retrocedir des de l'actual; el\n" -" «frame» superior és el 0." +" «frame» superior és el 0.\n" +"\n" +" Estat de sortida:\n" +" Retorna 0 excepte si l'intèrpret no està executant una funció o si EXPR\n" +" no és una expressió vàlida." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "la variable HOME no està definida" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "sobren arguments" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "directori nul" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "la variable OLDPWD no està definida" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "línia %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "atenció: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: sintaxi: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: l'opció requereix un argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: falta un argument numèric" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: no s'ha trobat" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: l'opció no és vàlida" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: el nom de l'opció no és vàlid" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "«%s»: no és un identificador vàlid" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "nombre octal no vàlid" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "nombre hexadecimal no vàlid" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "nombre no vàlid" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: especificació de senyal no vàlida" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "«%s»: pid o especificació de feina no vàlids" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: variable de només lectura" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: no es pot assignar" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s fora del domini" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s fora del domini" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: no existeix tal feina" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: no hi ha control de feines" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "no hi ha control de feines" # cd .. en un intèrpret restringit -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: restringit" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "restringit" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: no és una ordre interna de l'intèrpret" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "error d'escriptura: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "error en establir els atributs del terminal: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "error en obtenir els atributs del terminal: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: error en obtenir el directori actual: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: l'especificació de feina és ambigua" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "aquesta versió no té ajuda disponible" +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: no és un vector indexat" + # unset UID -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: no es pot suprimir: %s de només lectura" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: no es pot suprimir" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nom d'acció no vàlid" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: no hi ha especificació de compleció" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "atenció: l'opció -F pot no funcionar com us espereu" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "atenció: l'opció -C pot no funcionar com us espereu" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "no s'està executant una funció de compleció" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "només es pot utilitzar en una funció" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "no és possible usar «-f» per convertir en funció" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: funció de només lectura" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: una variable referència no pot ser un vector" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: no es permeten autoreferències en variables referència" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: referència circular" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "«%s»: la variable referència conté un nom de variable no vàlid" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: no és possible destruir variables vector d'aquesta manera" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: no és possible convertir un vector associatiu en indexat" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" -msgstr "%s: es desaconsella l'assignació múltiple en vectors utilitzant cometes" +msgstr "" +"%s: es desaconsella l'assignació múltiple en vectors utilitzant cometes" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "no es poden carregar biblioteques dinàmicament" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "no es pot obrir l'objecte compartit %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "no s'ha trobat %s a l'objecte compartit %s: %s" # help enable -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: ordre interna dinàmica ja carregada" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "l'intent de carregar %s ha fallat (%d): no carregat" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: no s'ha carregat dinàmicament" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: no es pot eliminar: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: és un directori" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: no és un fitxer ordinari" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: el fitxer és massa gran" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: no es poden executar fitxers binaris" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: no es pot executar: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "desconnectat\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "no és una sessió d'entrada: utilitzeu «exit»" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Hi ha feines aturades.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Hi ha feines en funcionament.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "no s'ha trobat cap ordre" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "especificació d'historial" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: no es pot obrir el fitxer temporal: %s" # fg quan no hi ha cap feina en segon pla -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "actual" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "la feina %d es va iniciar sense control de feines" @@ -517,11 +538,11 @@ msgstr "%s: opció il·legal -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: l'opció requereix un argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "el «hashing» està deshabilitat" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: la taula «hash» és buida\n" @@ -548,15 +569,17 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "no hi ha ajuda sobre «%s». Proveu «help help», «man -k %s» o «info %s»." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"no hi ha ajuda sobre «%s». Proveu «help help», «man -k %s» o «info %s»." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: no es pot obrir: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -576,21 +599,31 @@ msgstr "" "Un asterisc (*) significa que l'ordre està deshabilitada.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "no és possible usar més d'una opció d'entre -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "posició a l'historial" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "nom de variable vector en blanc" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: paràmetre nul o no definit" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: la marca horària no és vàlida" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: ha fallat l'expansió de l'historial" @@ -604,114 +637,114 @@ msgstr "%s: inlib ha fallat" msgid "no other options allowed with `-x'" msgstr "no es permeten altres opcions amb «-x»" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: els arguments han de ser ids de processos o feines" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Error desconegut" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "s'esperava una expressió" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: no és un vector indexat" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: l'especificació de descriptor de fitxer no és vàlida" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: el descriptor de fitxer no és vàlid: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: el nombre de línies no és vàlid" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: l'origen del vector no és vàlid" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: el quàntum de retorn no és vàlid" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "nom de variable vector en blanc" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "fa falta suport per a variables vector" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "«%s»: falta un caràcter de format" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "«%c»: l'especificació de format de temps no és vàlida" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "«%c»: el caràcter de format no és vàlid" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "atenció: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "problema en interpretar el format: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "falta un dígit hexadecimal a \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "falta un dígit Unicode a \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "no hi ha més directoris" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: l'argument no és vàlid" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<no hi ha directori actual>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "la pila de directoris està buida" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "índex de la pila de directoris" # còpia parcial d'una altra cadena - l'original es troba més endavant -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -726,13 +759,16 @@ 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 "" -"Mostra la llista actual de directoris recordats. Els directoris són afegits\n" +"Mostra la llista actual de directoris recordats. Els directoris són " +"afegits\n" " a la llista mitjançant l'ordre «pushd»; podeu recórrer la llista de\n" " directoris cap enrere amb l'ordre «popd».\n" "\n" @@ -754,7 +790,7 @@ msgstr "" " començant des de zero." # còpia parcial d'una altra cadena - l'original es troba més endavant -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -780,7 +816,8 @@ msgid "" msgstr "" "Afegeix un directori al capdamunt de la pila de directoris, o fa girar la\n" " llista, de manera que al capdamunt de la pila hi queda el directori de\n" -" treball corrent. Sense arguments, intercanvia els dos directoris de més\n" +" treball corrent. Sense arguments, intercanvia els dos directoris de " +"més\n" " amunt.\n" "\n" " Opcions:\n" @@ -803,7 +840,7 @@ msgstr "" " Podeu veure el contingut de la pila de directoris amb l'ordre «dirs»." # còpia parcial d'una altra cadena - l'original es troba més endavant -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -845,334 +882,346 @@ msgstr "" " Podeu veure el contingut de la pila de directoris amb l'ordre «dirs»." # read -t -5 -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: el límit de temps no és vàlid" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "error de lectura: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "només es permet fer «return» des d'una funció o script" # unset -f -v foo -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "no és possible suprimir una funció i una variable alhora" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: no és una variable vector" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: no és una funció" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: no es pot exportar" # shift -4 -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "nombre de «shifts»" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "no es poden activar i desactivar opcions de forma simultània" # shopt -s foo -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: l'opció de l'intèrpret no és vàlida" # source -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "fa falta un nom de fitxer" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: no s'ha trobat el fitxer" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "no es pot suspendre" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "no és possible suspendre un intèrpret d'entrada" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s és un àlies de «%s»\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s és una paraula clau de l'intèrpret\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s és una funció\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s és una ordre interna especial\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s és una funció\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s és una ordre interna\n" # type dmesg -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s és %s\n" # hash cp; type cp -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s és a la taula «hash» (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: el límit no és vàlid" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "«%c»: ordre errònia" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: no es pot obtenir el límit: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "límit" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: no es pot modificar el límit: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "nombre octal" # umask z=rwx -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "«%c»: l'operador de mode simbòlic no és vàlid" # umask u=rwz -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "«%c»: el mode simbòlic conté caràcters no vàlids" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " línia " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "última ordre: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Avortant..." # prefix afegit als avisos infomatius interns (internal_inform) #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORMACIÓ: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "atenció: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "error no identificat" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "tipus d'ordre erroni" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "connector erroni" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "salt erroni" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: variable no definida" # SIGALRM -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\atemps esgotat mentre s'esperaven dades: autodesconnexió\n" # error intern -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "no s'ha pogut redirigir l'entrada estàndard des de /dev/null: %s" # error intern -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: «%c»: el caràcter de format no és vàlid" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: el coprocés [%d:%s] encara existeix" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "error de canonada" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: excedit el nombre màxim d'avaluacions imbricades (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: excedit el nombre màxim d'imbricacions per a «source» (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: excedit el nombre màxim de funcions imbricades (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restricció: no podeu especificar «/» en noms d'ordres" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: no s'ha trobat l'ordre" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: intèrpret erroni" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: no es pot executar: no s'ha trobat un fitxer necessari" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: intèrpret erroni" - # error intern -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: no es pot executar el fitxer binari: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "«%s»: és una ordre interna especial" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "no s'ha pogut duplicar l'fd %d com a fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "excedit el nivell màxim de recursivitat per a expressions" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "«underflow» a la pila de recursivitat" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "error de sintaxi a l'expressió" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "intent d'assignació a una no-variable" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "error de sintaxi en una assignació de variable" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "divisió per 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bug: el component «expassign» és erroni" # echo $((4 > 5 ? 0)) -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "falta un caràcter «:» a l'expressió condicional" # echo $((4 ** -1)) -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exponent menor que 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "fa falta un identificador després del pre-increment o pre-decrement" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "falta un caràcter «)»" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "error de sintaxi: s'esperava un operand" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "error de sintaxi: l'operador aritmètic no és vàlid" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (l'element erroni és «%s»)" @@ -1189,7 +1238,7 @@ msgstr "nombre enter invàlid" msgid "value too great for base" msgstr "el valor de la base és massa gran" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: expressió errònia\n" @@ -1198,46 +1247,51 @@ msgstr "%s: expressió errònia\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: els directoris superiors són inaccessibles" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "«%s»: és una ordre interna especial" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "no s'ha pogut restablir el mode «nodelay» per a l'fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "error en crear un fd nou a partir de l'fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: ja existia un «buffer» per al nou fd %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp de la canonada" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "el pid bifurcat %d apareix a la feina en execució %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "s'elimina la feina aturada %d amb grup de procés %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: el pid %5ld (%s) està marcat com a viu" @@ -1247,140 +1301,140 @@ msgstr "add_process: el pid %5ld (%s) està marcat com a viu" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: no existeix tal pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Senyal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Fet" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Aturat" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Aturat(%s)" # ha de tenir menys de 10 caràcters o no queda alineat -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Funcionant" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Fet(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Sortida %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Estat desconegut" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(s'ha bolcat la memòria)" # wd = working directory -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (dt: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid (de %ld a %ld) per al procés inferior" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: el pid %ld no és un fill d'aquest intèrpret" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: No hi ha constància del procés %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: la feina %d està aturada" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: no hi ha feines en curs" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: la feina ha acabat" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: la feina %d ja es troba en segon pla" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: s'activa «WNOHANG» per a evitar un bloqueig indefinit" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s línia %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (s'ha bolcat la memòria)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(dt ara: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp ha fallat" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: no s'està executant el control de feines" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: disciplina de línia" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "no s'ha pogut establir el grup de procés del terminal (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "aquesta sessió no té control de feines" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: asserció fallida: %s\n" # error intern i el \r provoca warnings -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1389,380 +1443,394 @@ msgstr "" "\\r\n" "malloc: %s:%d: asserció mal executada\\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "desconegut" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: bloc abatussat a la llista de disponibles" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: cridat amb un argument de bloc ja alliberat" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: cridat amb un argument bloc no assignat" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: underflow detectat; mh_nbytes fora del domini" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: underflow detectat; la variable magic8 està corrompuda" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: les mides inicial i final del fragment difereixen" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: cridat amb un argument de bloc no assignat" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: underflow detectat: mh_nbytes fora del domini" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: underflow detectat: la variable magic8 està corrumpuda" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: les mides inicial i final del fragment difereixen" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: la taula «alloc» està plena de «FIND_ALLOC»?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p ja es troba a la taula com a assignat?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p ja es troba a la taula com a lliure?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "base no vàlida" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: màquina desconeguda" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: el servei no és vàlid" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: la ubicació remota no és vàlida" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "les operacions de xarxa no estan suportades" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: no s'ha pogut canviar el local (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: no s'ha pogut canviar el local (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: no s'ha pogut canviar el local (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: no s'ha pogut canviar el local (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Teniu correu a $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Teniu correu nou a $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "El correu a %s ha estat llegit\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "error de sintaxi: fa falta una expressió aritmètica" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "error de sintaxi: «;» inesperat" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "error de sintaxi: «((%s))»" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: tipus d'instrucció erroni %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "document literal a la línia %d delimitat per EOF (volia «%s»)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: instrucció de redirecció «%d» fora del domini" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) excedeix «SIZE_MAX» (%lu): línia truncada" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) excedeix «SIZE_MAX» (%lu): línia " +"truncada" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "error d'escriptura: %s" -#: parse.y:2921 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "excedit el nombre màxim de documents literals" # "echo $(echo" en un script -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "EOF inesperat mentre es cercava «%c»" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "EOF inesperat mentre es cercava «]]»" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "error de sintaxi a l'expressió condicional: element «%s» inesperat" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "error de sintaxi a l'expressió condicional" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "element «%s» inesperat, s'esperava «)»" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "s'esperava «)»" # [[ -d ]] -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "argument «%s» inesperat a un operador unari condicional" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "argument inesperat a un operador unari condicional" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "element «%s» inesperat, s'esperava un operador binari condicional" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "s'esperava un operador binari condicional" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "argument inesperat «%s» a un operador binari condicional" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "argument inesperat a un operador binari condicional" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "element «%c» inesperat en una ordre condicional" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "element «%s» inesperat en una ordre condicional" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "element %d inesperat en una ordre condicional" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "error de sintaxi a prop de l'element inesperat «%s»" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "error de sintaxi a prop de «%s»" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "error de sintaxi: final de fitxer inesperat" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "error de sintaxi: final de fitxer inesperat" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "error de sintaxi" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Useu \"%s\" per a abandonar l'intèrpret.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "EOF inesperat mentre es cercava un «)»" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: la funció «%s» no s'ha trobat" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: possible reintent cíclic" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: el paràmetre «COMPSPEC» és NUL" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: el connector «%d» és erroni" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: el descriptor de fitxer no és vàlid" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: el punter de fitxer és NUL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: «%c»: el caràcter de format no és vàlid" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "descriptor de fitxer fora del domini" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: redirecció ambigua" # opció noclobber -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: no es pot escriure sobre un fitxer existent" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restricció: no podeu redirigir la sortida" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "no s'ha pogut crear el fitxer temporal per a un document literal: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: no és possible assignar un fd a una variable" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port no està suportat si no hi ha xarxa" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "error de redirecció: no es pot duplicar l'fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "no s'ha trobat el directori /tmp, sis-plau creeu-lo!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp ha de ser un nom de directori vàlid" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "el mode «pretty-printing» s'ignora en sessions interactives" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: l'opció no és vàlida" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "no s'ha pogut establir l'uid com a %d: uid effectiu %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "no s'ha pogut establir el gid com a %d: gid effectiu %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "no es pot iniciar el depurador; mode de depuració desactivat" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: És un directori" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "No teniu nom!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versió %s-(%s)\n" # -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1771,49 +1839,50 @@ msgstr "" "Sintaxi: %s [opció GNU llarga] [opció] ...\n" " %s [opció GNU llarga] [opció] fitxer-script ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Opcions GNU llargues:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Opcions de l'intèrpret:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD, o -c ordre, o bé -O opció_intèrpret\t(només invocació)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s, o bé -o opció\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Feu «%s -c \"help set\"» per a informació sobre les opcions de l'intèrpret.\n" +msgstr "" +"Feu «%s -c \"help set\"» per a informació sobre les opcions de l'intèrpret.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "Feu «%s -c help» per a obtenir informació sobre les ordres internes.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Feu servir l'ordre «bashbug» per a informar de «bugs».\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "pàgina web de bash: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Ajuda general per a programari GNU: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: l'operació no és vàlida" @@ -1985,296 +2054,321 @@ msgid "Unknown Signal #%d" msgstr "Senyal Desconegut #%d" # missatge similar a subst.c:75XX -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "substitució errònia: falta un «%s» a %s" # foo[1]=(1 2 3) -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: no és possible assignar llistes a l'element d'un vector" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "no s'ha pogut crear la canonada per a la substitució de procés" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "no s'ha pogut crear el fill per a la substitució de procés" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "no s'ha pogut obrir la canonada %s per a lectura" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "no s'ha pogut obrir la canonada %s per a escriptura" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "no s'ha pogut duplicar la canonada %s com a fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "substitució d'ordre: s'ignora un octet nul en l'entrada" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: no s'ha pogut duplicar la canonada com a fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "no s'ha pogut crear la canonada per a la substitució d'ordre" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "no s'ha pogut crear un fill per a la substitució d'ordre" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: no s'ha pogut duplicar la canonada com a fd 1" # buscar context -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: el nom de la variable referenciada no és vàlid" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: expansió indirecta no vàlida" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: nom de variable no vàlid" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: paràmetre no definit" +msgid "%s: bad substitution" +msgstr "%s: substitució errònia" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: paràmetre nul o no definit" +msgid "%s: parameter not set" +msgstr "%s: paràmetre no definit" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: expressió de subcadena < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: substitució errònia" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: no és possible assignar d'aquesta manera" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" msgstr "en futures versions de bash s'avaluarà com a substitució aritmètica" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "subtitució errònia: falta un caràcter «`» final a %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "cap coincidència: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "s'esperava un argument" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: s'esperava una expressió amb enters" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "s'esperava «)»" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "s'esperava «)», s'ha trobat %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: s'esperava un operador binari" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: s'esperava un operador unari" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "falta un «]»" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "error de sintaxi: «%s» inesperat" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "el número de senyal no és vàlid" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: excedit el nivell màxim d'interceptació de senyals (%d)" # internal warning -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: valor incorrecte a trap_list[%d]: %p" # internal warning -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: el gestor de senyal és SIG_DFL, em re-envio %d (%s) a mi mateix" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: el gestor de senyal és SIG_DFL, em re-envio %d (%s) a mi " +"mateix" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: senyal erroni %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "error en importar la definició de funció de «%s»" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "el nivell de l'intèrpret (%d) és massa elevat, es restableix a 1" +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "excedit el nombre màxim de documents literals" + # error intern -#: variables.c:2642 +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" -msgstr "make_local_variable: no existeix un context de funció en l'àmbit actual" +msgstr "" +"make_local_variable: no existeix un context de funció en l'àmbit actual" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: no és possible assignar un valor a la variable" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: no es pot heretar un valor de tipus incompatible" # buscar context -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: assignació numèrica a una variable referència" # error intern -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" -msgstr "all_local_variables: no existeix un context de función en l'àmbit actual" +msgstr "" +"all_local_variables: no existeix un context de función en l'àmbit actual" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "el paràmetre «exportstr» de la variable %s és nul" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "el caràcter %d en el paràmetre «exportstr» de %s no és vàlid" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "falta un «=» en el paràmetre «exportstr» de %s" # error intern -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "pop_var_context: la capçalera de shell_variables no és un context de funció" +msgstr "" +"pop_var_context: la capçalera de shell_variables no és un context de funció" # error intern -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: no existeix un context de global_variables" # error intern -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: la capçaleras shell_variables no és un àmbit temporal d'entorn" +msgstr "" +"pop_scope: la capçaleras shell_variables no és un àmbit temporal d'entorn" # error intern -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: no s'ha pogut obrir com a FITXER" # error intern -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: valor invàlid per a una traça de descriptor de fitxer" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: el valor de compatibilitat és fora del domini" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" msgstr "" "Llicència GPLv3+: GNU GPL versió 3 o posterior\n" " <http://gnu.org/licenses/gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versió %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "Aquest programa és lliure; sou lliures de modificar-lo i redistribuir-lo." +msgstr "" +"Aquest programa és lliure; sou lliures de modificar-lo i redistribuir-lo." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "No té CAP GARANTIA, fins a l'extrem permès per la llei." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: no s'han pogut assignar %lu octets (%lu octets assignats)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: no s'han pogut assignar %lu octets" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: no s'han pogut assignar %lu octets (%lu octets assignats)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: no s'han pogut assignar %lu octets" @@ -2291,8 +2385,12 @@ msgstr "unalias [-a] nom [nom ...]" # help bind #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m mapa] [-f fitxer] [-q nom] [-u nom] [-r tecles] [-x tecles:ordre-intèrpret] [tecles:funció-readline o ordre-readline]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m mapa] [-f fitxer] [-q nom] [-u nom] [-r tecles] [-x " +"tecles:ordre-intèrpret] [tecles:funció-readline o ordre-readline]" #: builtins.c:56 msgid "break [n]" @@ -2311,7 +2409,8 @@ msgid "caller [expr]" msgstr "caller [expr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [dir]" #: builtins.c:68 @@ -2323,12 +2422,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] ordre [arg ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [nom[=valor] ...] o declare -p [-aAfFilnrtux] [nom ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [nom[=valor] ...] o declare -p [-aAfFilnrtux] " +"[nom ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] nom[=valor] ... o typeset -p [-aAfFilnrtux] [nom ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] nom[=valor] ... o typeset -p [-aAfFilnrtux] " +"[nom ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2387,8 +2494,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [patró ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d offset] [n] o history -anrw [fitxer] o history -ps arg [arg...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d offset] [n] o history -anrw [fitxer] o history -ps arg " +"[arg...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2399,16 +2510,24 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [feina ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s senyal | -n númsenyal | -senyal] pid | feina ... o kill -l [senyal]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s senyal | -n númsenyal | -senyal] pid | feina ... o kill -l [senyal]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a vector] [-d delim] [-i text] [-n núm] [-N núm] [-p introd] [-t espera] [-u fd] [nom ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a vector] [-d delim] [-i text] [-n núm] [-N núm] [-p introd] [-" +"t espera] [-u fd] [nom ...]" #: builtins.c:140 msgid "return [n]" @@ -2455,7 +2574,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] senyal ...]" #: builtins.c:168 @@ -2479,106 +2599,132 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NOM [in PARAULES ... ] ; do ORDRES; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do ORDRES; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NOM [in PARAULES ... ;] do ORDRES; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] canonada" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case PARAULA in [PATRÓ [| PATRÓ]...) ORDRES ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if ORDRES; then ORDRES; [ elif ORDRES; then ORDRES; ]... [ else ORDRES; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if ORDRES; then ORDRES; [ elif ORDRES; then ORDRES; ]... [ else ORDRES; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while ORDRES; do ORDRES-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until ORDRES; do ORDRES-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NOM] ordre [redireccions]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function nom { ORDRES ; } o bé nom () { ORDRES ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ ORDRES ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "feina [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expressió ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expressió ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Nom i significat d'algunes variables de l'intèrpret" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [opció ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [arguments]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opció] [-A acció] [-G patró] [-W paraules] [-F funció] [-C ordre] [-X patró] [-P prefix] [-S sufix] [nom ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o opció] [-A acció] [-G patró] [-W " +"paraules] [-F funció] [-C ordre] [-X patró] [-P prefix] [-S sufix] [nom ...]" -#: builtins.c:235 -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 opció] [-A acció] [-G patró] [-W paraules] [-F funció] [-C ordre] [-X filtre] [-P prefix] [-S sufix] [paraula]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o opció] [-A acció] [-G patró] [-W paraules] [-F " +"funció] [-C ordre] [-X filtre] [-P prefix] [-S sufix] [paraula]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o opció] [-DEI] [nom ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d delim] [-n nombre] [-O origen] [-s nombre] [-t] [-u fd] [-C callback] [-c quàntum] [vector]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d delim] [-n nombre] [-O origen] [-s nombre] [-t] [-u fd] [-C callback] [-c quàntum] [vector]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d delim] [-n nombre] [-O origen] [-s nombre] [-t] [-u fd] [-C " +"callback] [-c quàntum] [vector]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d delim] [-n nombre] [-O origen] [-s nombre] [-t] [-u fd] [-C " +"callback] [-c quàntum] [vector]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2593,7 +2739,8 @@ 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 "" "Defineix o mostra àlies.\n" @@ -2612,7 +2759,7 @@ msgstr "" " Estat de sortida:\n" " alias torna cert, excepte si NOM no correspon a cap àlies definit." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2628,7 +2775,7 @@ msgstr "" "\n" " Torna cert, excepte si NOM no és un àlies existent." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2640,25 +2787,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2674,7 +2826,8 @@ msgstr "" " Opcions:\n" " -m mapa Usa MAPA com a mapa de tecles mentre duri aquesta\n" " ordre. Els noms de mapes acceptables són emacs, emacs-\n" -" standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command,\n" +" standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-" +"command,\n" " i vi-insert.\n" " -l Mostra els noms de les funcions\n" " -P Mostra els noms de les funcions i els vincles de tecla.\n" @@ -2683,13 +2836,15 @@ msgstr "" " -S Mostra les seqüències de tecles que invoquen macros i els\n" " seus valors respectius.\n" " -s Mostra les seqüències de tecles que invoquen macros i els\n" -" seus valors respectius en un format que es pot reutilitzar\n" +" seus valors respectius en un format que es pot " +"reutilitzar\n" " com a entrada.\n" " -V Mostra els noms de les variables i els seus valors.\n" " -v Mostra els noms de les variables i els seus respectius\n" " valors en un format que es pot reutilitzar com a entrada.\n" " -q funció Consulta quines tecles invoquen la funció especificada.\n" -" -u funció Desvincula les tecles vinculades a la funció especificada.\n" +" -u funció Desvincula les tecles vinculades a la funció " +"especificada.\n" " -r tecles Elimina el vincle associat a TECLES.\n" " -f fitxer Obté els vincles de tecles de FITXER.\n" " -x tecles:ordre Fa que s'executi ORDRE quan es prem TECLES.\n" @@ -2701,7 +2856,7 @@ msgstr "" " un error." # help break -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2720,7 +2875,7 @@ msgstr "" " L'estat de sortida és 0 excepte si N és més petit que 1." # help continue -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2738,13 +2893,14 @@ msgstr "" " Estat de sortida:\n" " L'estat de sortida és 0 excepte si N és més petit que 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2758,11 +2914,12 @@ msgstr "" " pròpia funció.\n" "\n" " Estat de sortida:\n" -" Torna l'estat de sortida de ORDRE-INTERNA, o fals si ORDRE-INTERNA no és\n" +" Torna l'estat de sortida de ORDRE-INTERNA, o fals si ORDRE-INTERNA no " +"és\n" " una ordre interna." # help caller -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2790,20 +2947,27 @@ msgstr "" " Retorna 0 excepte si l'intèrpret no està executant una funció o si EXPR\n" " no és una expressió vàlida." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2819,11 +2983,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Canvia el directori de treball de l'intèrpret.\n" @@ -2836,7 +3002,8 @@ msgstr "" " punts (:). Un nom de directori nul s'interpreta com al directori\n" " actual. Si DIR comença amb una barra, aleshores no s'usa CDPATH.\n" "\n" -" Si no es troba el directori, i l'opció de l'intèrpret «cdable_vars» està\n" +" Si no es troba el directori, i l'opció de l'intèrpret «cdable_vars» " +"està\n" " activada, aleshores la paraula s'interpreta com a un nom de variable.\n" " Si la variable especificada té algun valor, aquest valor s'usa en lloc\n" " de DIR.\n" @@ -2844,7 +3011,8 @@ msgstr "" " Opcions:\n" " -L força el seguiment d'enllaços simbòlics: resol els enllaços\n" " simbòlics que conté DIR després de processar «..»\n" -" -P usa l'estructura de directoris física sense seguir possibles\n" +" -P usa l'estructura de directoris física sense seguir " +"possibles\n" " enllaços simbòlics: resol els enllaços simbòlics que conté\n" " DIR abans de processar «..»\n" " -e amb l'opció -P, si no es pot determinar el directori de\n" @@ -2853,7 +3021,8 @@ msgstr "" " estesos com a directoris que contenen els atributs del\n" " fitxer\n" "\n" -" Per defecte, se segueixen els enllaços simbòlics, com si especifiquéssiu\n" +" Per defecte, se segueixen els enllaços simbòlics, com si " +"especifiquéssiu\n" " l'opció «-L». El component «..» es processa eliminant el component del\n" " camí immediatament previ fins a la primera barra o fins al principi de\n" " DIR.\n" @@ -2862,7 +3031,7 @@ msgstr "" " Torna 0 si s'ha canviat de directori, i si $PWD s'ha establert de forma\n" " satisfactòria quan s'utilitza -P; altrament un valor diferent de zero." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2890,7 +3059,7 @@ msgstr "" " Torna 0 excepte si heu especificat una opció no vàlida o no es pot\n" " llegir el directori actual." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2906,7 +3075,7 @@ msgstr "" " Estat de sortida:\n" " Sempre reïx." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2918,7 +3087,7 @@ msgstr "" " Estat de sortida:\n" " Sempre reïx." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2930,12 +3099,13 @@ msgstr "" " Estat de sortida:\n" " Sempre falla." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2965,7 +3135,8 @@ msgstr "" " Retorna l'estat de sortida de ORDRE, o fracàs si ORDRE no s'ha trobat." # help declare -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2993,12 +3164,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -3016,7 +3189,8 @@ msgstr "" " el nom del fitxer, en mode de depuració)\n" " -g crea variables globals quan s'utilitza dins d'una funció,\n" " altrament s'ignora\n" -" -I en crear una variable local, hereda els atributs i valor de \n" +" -I en crear una variable local, hereda els atributs i valor " +"de \n" " la variable del mateix nom d'un àmbit anterior\n" " -p mostra els atributs i el valor de cada NOM\n" "\n" @@ -3024,12 +3198,14 @@ msgstr "" " -a per a fer NOMs vectors indexats (si estan suportats)\n" " -A per a fer NOMs vectors associatius (si estan suportats)\n" " -i per a assignar l'atribut de nombre enter a NOMs\n" -" -l per a convertir els valors de NOMs a minúscules en l'assignació\n" +" -l per a convertir els valors de NOMs a minúscules en " +"l'assignació\n" " -n per a fer NOM una referència a la variable que té per nom\n" " el seu valor\n" " -r per a fer NOMs variables de només lectura\n" " -t per a assignar l'atribut «traça» a NOMs\n" -" -u per a convertir els valors de NOMs a majúscules en l'assignació\n" +" -u per a convertir els valors de NOMs a majúscules en " +"l'assignació\n" " -x per a exportar NOMs\n" "\n" " Si feu servir «+» en lloc de «-», elimina l'atribut.\n" @@ -3038,13 +3214,14 @@ msgstr "" " aritmèticament (vegeu l'ordre «let») quan s'assigna un valor a la\n" " variable.\n" "\n" -" Quan s'usa en una funció, «declare» converteix NOMs en variables locals,\n" +" Quan s'usa en una funció, «declare» converteix NOMs en variables " +"locals,\n" " igual que l'ordre «local». L'opció «-g» suprimeix aquest comportament.\n" "\n" " Estat de sortida:\n" " Torna èxit, excepte si rep una opció invàlida o es produeix un error." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3055,7 +3232,7 @@ msgstr "" " Sinònim de «declare». Vegeu «help declare»." # help local -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3071,22 +3248,25 @@ msgid "" msgstr "" "Defineix variables locals.\n" "\n" -" Crea una variable local anomenada NOM i li assigna VALOR. OPCIÓ pot ser\n" +" Crea una variable local anomenada NOM i li assigna VALOR. OPCIÓ pot " +"ser\n" " qualsevol opció que «declare» admeti.\n" "\n" " Les variables locals només es poden utilitzar dins d'una funció; només\n" -" són visibles a dins de la funció on són definides i dins de les funcions\n" +" són visibles a dins de la funció on són definides i dins de les " +"funcions\n" " imbricades dins d'aquestes.\n" "\n" " Estat de sortida:\n" " Torna èxit excepte si heu especificat una opció no vàlida, es produeix\n" " un error, o l'intèrpret no està executant una funció." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3110,9 +3290,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3128,7 +3310,8 @@ msgstr "" " -e activa la interpretació de seqüències d'escapada\n" " -E desactiva la interpretació de seqüències d'escapada\n" "\n" -" «echo» interpreta els següents caràcters escapats amb una barra inversa:\n" +" «echo» interpreta els següents caràcters escapats amb una barra " +"inversa:\n" " \\a alerta (campana)\n" " \\b retrocés\n" " \\c suprimeix tota sortida ulterior\n" @@ -3140,19 +3323,22 @@ msgstr "" " \\t tabulació horitzontal\n" " \\v tabulació vertical\n" " \\\\ barra invertida\n" -" \\0nnn caràcter corresponent al codi ASCII número NNN, on NNN és un\n" +" \\0nnn caràcter corresponent al codi ASCII número NNN, on NNN és " +"un\n" " número octal de 0 a 3 dígits.\n" " \\xHH caràcter de 8 bits corresponent al valor HH, on HH és un\n" " número hexadecimal d'1 o 2 dígits.\n" -" \\uHHHH caràcter Unicode corresponent al valor hexadecimal HHHH, on\n" +" \\uHHHH caràcter Unicode corresponent al valor hexadecimal HHHH, " +"on\n" " HHHH pot tenir de 1 a 4 dígits.\n" -" \\uHHHHHHHH caràcter Unicode corresponent al valor hexadecimal HHHHHHHH,\n" +" \\uHHHHHHHH caràcter Unicode corresponent al valor hexadecimal " +"HHHHHHHH,\n" " on HHHHHHHH pot tenir de 1 a 8 dígits.\n" "\n" " Estat de sortida:\n" " Torna èxit, tret que es produeixi un error d'escriptura." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3175,7 +3361,8 @@ msgstr "" " Torna èxit, tret que es produeixi un error d'escriptura." # help enable -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3195,6 +3382,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3204,13 +3397,15 @@ msgstr "" "Habilita o inhabilita ordres internes de l'intèrpret.\n" "\n" " Habilita o inhabilita ordres internes de l'intèrpret. Inhabilitar una\n" -" ordre interna permet executar una ordre que es troba en el disc i que té\n" +" ordre interna permet executar una ordre que es troba en el disc i que " +"té\n" " el mateix nom que l'ordre interna, sense necessitat d'escriure'n la\n" " ubicació completa.\n" "\n" " Opcions:\n" " -a mostra una llista d'ordres internes indicant-ne l'estat\n" -" -n inhabilita NOM o bé mostra una llista de les ordres internes\n" +" -n inhabilita NOM o bé mostra una llista de les ordres " +"internes\n" " que es troben inhabilitades\n" " -p mostra la llista en format reutilitzable\n" " -s mostra només les ordres internes «especials» Posix\n" @@ -3227,11 +3422,12 @@ msgstr "" " Estat de sortida:\n" " Torna èxit, excepte si NOM no és una ordre interna o té lloc un error." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3239,13 +3435,14 @@ msgid "" msgstr "" "Executa els arguments com una ordre.\n" "\n" -" Combina ARGs en una única cadena, utilitza el resultat com a entrada per\n" +" Combina ARGs en una única cadena, utilitza el resultat com a entrada " +"per\n" " a l'intèrpret i executa les ordres resultants.\n" "\n" " Estat de sortida:\n" " Torna l'estat de sortida de l'ordre, o èxit si l'ordre és nul·la." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3291,22 +3488,27 @@ msgstr "" " paràmetres posicionals com a opcions.\n" "\n" " CADENA conté les lletres de les opcions a reconèixer; si una lletra va\n" -" seguida de dos punts, l'opció requereix un argument, que s'ha de separar\n" +" seguida de dos punts, l'opció requereix un argument, que s'ha de " +"separar\n" " de l'opció amb un espai en blanc.\n" "\n" " Cada cop que s'invoca, getopts posa l'opció successiva a la variable\n" " d'entorn $nom, inicialitzant nom si no existeix, i l'índex del següent\n" " argument a la variable OPTIND. La variable OPTIND s'inicialitza a 1\n" -" cada cop que s'invoca l'intèrpret o un script. Quan una opció requereix\n" +" cada cop que s'invoca l'intèrpret o un script. Quan una opció " +"requereix\n" " un argument, getopts col·loca l'argument a la variable OPTARG.\n" "\n" -" getopts pot informar d'errors de dues maneres. Si el primer caràcter de\n" -" CADENA és un caràcter de dos punts (:), getopts entra en mode silenciós.\n" +" getopts pot informar d'errors de dues maneres. Si el primer caràcter " +"de\n" +" CADENA és un caràcter de dos punts (:), getopts entra en mode " +"silenciós.\n" " En aquest mode, no es mostra cap missatge d'error. Si es detecta una\n" " opció no vàlida, getopts col·loca el caràcter de l'opció a OPTARG. Si\n" " no es troba un argument requerit, getopts posa un ':' a NOM, i el\n" " caràcter de l'opció trobada a OPTARG. Si getopts no es troba en mode\n" -" silenciós, i es detecta una opció no vàlida, getopts posa un '?' a NOM i\n" +" silenciós, i es detecta una opció no vàlida, getopts posa un '?' a NOM " +"i\n" " elimina la variable OPTARG. Si no troba un argument requerit, posa un\n" " '?' a NOM, elimina OPTARG, i mostra un missatge de diagnòstic.\n" "\n" @@ -3318,15 +3520,17 @@ msgstr "" " es proporcionen arguments com a valors ARG, s'intepreten aquests.\n" "\n" " Estat de sortida:\n" -" Retorna èxit si es troba alguna opció; falla si s'arriba al final de les\n" +" Retorna èxit si es troba alguna opció; falla si s'arriba al final de " +"les\n" " opcions o si es produeix un error." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3334,11 +3538,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Substitueix el procés de l'intèrpret per l'ordre especificada.\n" "\n" @@ -3351,14 +3557,15 @@ msgstr "" " -c executa ORDRE en un entorn buit\n" " -t passa un guionet a ORDRE com a argument número zero\n" "\n" -" Si l'ordre no es pot executar i la sessió és no-interactiva, l'intèrpret\n" +" Si l'ordre no es pot executar i la sessió és no-interactiva, " +"l'intèrpret\n" " surt, excepte si l'opció «execfail» està habilitada.\n" "\n" " Estat de sortida:\n" " Torna èxit, tret que ORDRE no es trobi o es produeixi un error de\n" " redirecció." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3370,30 +3577,35 @@ msgstr "" " Surt de l'intèrpret amb estat N. Si ometeu N, l'estat de sortida és el\n" " de l'última ordre executada." -#: builtins.c:724 +#: builtins.c:732 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 "" "Abandona una sessió d'entrada.\n" "\n" -" Abandona una sessió d'entrada amb estat de sortida N. Torna un error si\n" +" Abandona una sessió d'entrada amb estat de sortida N. Torna un error " +"si\n" " no s'està executant en una sessió d'entrada." # help fc (hi ha un bug a la cadena original) -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3406,8 +3618,11 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Mostra o executa ordres de l'historial.\n" "\n" @@ -3424,17 +3639,19 @@ msgstr "" " -n omet els números de línia a l'hora de mostrar la llista\n" " -r inverteix l'ordre de les línies (més recents primer)\n" "\n" -" Amb el format «fc -s [pat=sub ...] [ordre]», ORDRE es re-executa després\n" +" Amb el format «fc -s [pat=sub ...] [ordre]», ORDRE es re-executa " +"després\n" " d'haver fet la substitució PAT=SUB.\n" "\n" " Un àlies útil és r='fc -s', de manera que «r cc» executa l'última ordre\n" " que comença per «cc» i «r» re-executa l'última ordre.\n" "\n" " Estat de sortida:\n" -" Torna èxit o l'estat de l'última ordre executada; diferent de zero si es\n" +" Torna èxit o l'estat de l'última ordre executada; diferent de zero si " +"es\n" " produeix un error." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3452,15 +3669,18 @@ msgstr "" " considera com a corrent.\n" "\n" " Estat de sortida:\n" -" L'estat de l'ordre que es mou al primer pla, o fallada si es produeix un\n" +" L'estat de l'ordre que es mou al primer pla, o fallada si es produeix " +"un\n" " error." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3477,12 +3697,13 @@ msgstr "" " produeix un error." # help hash -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3506,7 +3727,8 @@ msgstr "" "\n" " Opcions:\n" " -d oblida la ubicació recordada per a cada NOM\n" -" -l utilitza un format que es pot reciclar com a entrada\n" +" -l utilitza un format que es pot reciclar com a " +"entrada\n" " -p ubicació utilitza UBICACIÓ com a ubicació completa per a NOM\n" " -r oblida totes les ubicacions recordades\n" " -t mostra la ubicació recordada per a cada NOM,\n" @@ -3520,7 +3742,7 @@ msgstr "" " Torna èxit, excepte si NOM no es troba o passeu una opció invàlida." # help help -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3538,7 +3760,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Mostra informació sobre ordres internes.\n" "\n" @@ -3557,7 +3780,8 @@ msgstr "" " Estat de sortida:\n" " Torna èxit, excepte si PATRÓ no es troba o passeu una opció invàlida." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3581,11 +3805,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3613,7 +3842,8 @@ msgstr "" " En cas contrari, si $HISTFILE té algun valor, s'utilitza aquest, si no\n" " s'utilitza ~/.bash_history.\n" "\n" -" Si la variable HISTTIMEFORMAT està definida i no és nul·la, el seu valor\n" +" Si la variable HISTTIMEFORMAT està definida i no és nul·la, el seu " +"valor\n" " s'utilitza com a cadena de format strftime(3) per a mostrar l'hora\n" " associada a cada entrada de l'historial. En cas contrari no es mostra\n" " la marca horària.\n" @@ -3621,7 +3851,7 @@ msgstr "" " Estat de sortida: \n" " Torna èxit, excepte si passeu una opció invàlida o es produeix un error." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3647,7 +3877,8 @@ msgstr "" "Mostra l'estat de feines.\n" "\n" " Mostra les feines actives. Si especifiqueu FEINA, es restringeix la\n" -" sortida a la feina especificada. Sense opcions, mostra l'estat de totes\n" +" sortida a la feina especificada. Sense opcions, mostra l'estat de " +"totes\n" " les feines actives.\n" "\n" " Opcions:\n" @@ -3663,11 +3894,12 @@ msgstr "" " processos d'aquella feina, a ARGS.\n" "\n" " Estat de sortida:\n" -" Torna èxit, excepte si passeu una opció invàlida o es produeix un error.\n" +" Torna èxit, excepte si passeu una opció invàlida o es produeix un " +"error.\n" " Si utilitzeu -x, torna l'estat de sortida d'ORDRE." # help disown -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3698,7 +3930,7 @@ msgstr "" " Torna èxit, excepte si passeu una opció o FEINA invàlida." # help kill -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3722,7 +3954,8 @@ msgid "" msgstr "" "Envia un senyal a una feina.\n" "\n" -" Envia el senyal SENYAL o NÚMSENYAL al procés corresponent a PID o FEINA.\n" +" Envia el senyal SENYAL o NÚMSENYAL al procés corresponent a PID o " +"FEINA.\n" " Si no especifiqueu cap senyal, s'envia un SIGTERM.\n" "\n" " Opcions:\n" @@ -3733,7 +3966,8 @@ msgstr "" " senyals, els noms dels quals s'han de mostrar\n" " -L sinònim de -l\n" "\n" -" kill és una ordre interna per dues raons: perquè això permet usar IDs de\n" +" kill és una ordre interna per dues raons: perquè això permet usar IDs " +"de\n" " feina en lloc de IDs de procés, i perquè permet matar processos encara\n" " que arribeu al límit de processos que se us permet crear.\n" "\n" @@ -3741,14 +3975,15 @@ msgstr "" " Torna èxit, excepte si passeu una opció invàlida o es produeix un error." # help let -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3787,8 +4022,10 @@ msgstr "" "Avalua expressions aritmètiques.\n" "\n" " Avalua cada ARG com a expressió aritmètica. Les operacions es fan amb\n" -" enters d'amplada fixa sense comprovacions de desbordament, tot i que les\n" -" divisions per 0 es detecten i es marquen com a error. La següent llista\n" +" enters d'amplada fixa sense comprovacions de desbordament, tot i que " +"les\n" +" divisions per 0 es detecten i es marquen com a error. La següent " +"llista\n" " mostra els operadors, agrupats en nivells d'igual precedència. Els\n" " nivells apareixen en ordre descendent de precedència.\n" "\n" @@ -3825,19 +4062,24 @@ msgstr "" " Estat de sortida:\n" " Si l'avaluació de l'últim ARG és 0, let torna 1; altrament torna 0." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3845,11 +4087,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3867,8 +4112,10 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Llegeix una línia a l'entrada estàndard i la divideix en camps.\n" @@ -3886,9 +4133,11 @@ msgstr "" " Opcions:\n" " -a vector assigna les paraules llegides a VECTOR, de forma seqüencial\n" " començant des de l'índex número 0.\n" -" -d delim continua llegint fins a trobar el caràcter DELIM, en lloc de\n" +" -d delim continua llegint fins a trobar el caràcter DELIM, en lloc " +"de\n" " fins a trobar un salt de línia\n" -" -e si la sessió és interactiva, utilitza Readline per a obtenir\n" +" -e si la sessió és interactiva, utilitza Readline per a " +"obtenir\n" " la línia\n" " -i text Utilitza TEXT com a text inicial per a Readline\n" " -n núm torna després de llegir exactament NÚM caràcters, o quan es\n" @@ -3899,14 +4148,17 @@ msgstr "" " -p introd mostra la cadena INTROD sense cap caràcter de salt de línia\n" " afegit, abans d'intentar llegir res\n" " -r prohibeix escapar caràcters amb una barra invertida\n" -" -s suprimeix l'eco quan l'entrada està connectada a un terminal\n" +" -s suprimeix l'eco quan l'entrada està connectada a un " +"terminal\n" " -t temps surt si transcorre TEMPS (en segons) abans d'haver\n" " aconseguit llegir una línia sencera. Per defecte, el límit\n" -" de temps és el valor de la variable TMOUT. TEMPS pot ser un\n" +" de temps és el valor de la variable TMOUT. TEMPS pot ser " +"un\n" " número amb decimals. Si TEMPS és 0, read torna\n" " immediatament, sense intentar llegir cap dada, i torna èxit\n" " només si hi ha dades disponibles en el descriptor de fitxer\n" -" FD especificat. Un estat de sortida més gran que 128 indica\n" +" FD especificat. Un estat de sortida més gran que 128 " +"indica\n" " que s'ha esgotat el temps d'espera.\n" " -u fd llegeix dades al descriptor de fitxer FD, en lloc de a\n" " l'entrada estàndard.\n" @@ -3918,7 +4170,7 @@ msgstr "" " especificat un descriptor de fitxer invàlid amb l'opció -u." # help return -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3931,14 +4183,16 @@ msgid "" msgstr "" "Torna des d'una funció de l'intèrpret.\n" "\n" -" Provoca que una funció o script executat amb «source» torni amb el valor\n" +" Provoca que una funció o script executat amb «source» torni amb el " +"valor\n" " de retorn especificat per N. Si s'omet N, l'estat de retorn és aquell\n" " de l'última ordre executada dins la funció o script.\n" "\n" " Estat de sortida:\n" " Torna N, o fallada si l'intèrpret no està executant cap funció o script." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3981,7 +4235,8 @@ 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" @@ -4005,13 +4260,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4023,7 +4283,8 @@ msgid "" msgstr "" "Estableix opcions de l'intèrpret i paràmetres posicionals.\n" "\n" -" Modifica el valor d'atributs de l'intèrpret i de paràmetres posicionals,\n" +" Modifica el valor d'atributs de l'intèrpret i de paràmetres " +"posicionals,\n" " o mostra els noms i valors de les variables de l'intèrpret.\n" "\n" " Opcions:\n" @@ -4064,7 +4325,8 @@ msgstr "" " l'última ordre que ha acabat amb estat no-zero,\n" " o zero si cap ordre ha acabat amb estat diferent\n" " de zero\n" -" posix ajusta el comportament de bash a l'estàndard Posix\n" +" posix ajusta el comportament de bash a l'estàndard " +"Posix\n" " privileged igual que -p\n" " verbose igual que -v\n" " vi usa una interfície d'edició estil vi\n" @@ -4104,7 +4366,7 @@ msgstr "" " Estat de sortida:\n" " Torna èxit, excepte si especifiqueu una opció no vàlida." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4116,7 +4378,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4144,12 +4407,13 @@ msgstr "" " Torna èxit, excepte si especifiqueu una opció no vàlida o NOM és una\n" " variable o funció de només lectura." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4179,7 +4443,7 @@ msgstr "" " Torna èxit, excepte si especifiqueu una opció no vàlida o NOM no és\n" " vàlid." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4219,7 +4483,7 @@ msgstr "" " Torna èxit, excepte si especifiqueu una opció no vàlida o NOM no és\n" " vàlid." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4231,13 +4495,14 @@ msgid "" msgstr "" "Desplaça els paràmetres posicionals.\n" "\n" -" Reanomena els paràmetres posicionals $N+1, $N+2 ... com a $1, $2 ... Si\n" +" Reanomena els paràmetres posicionals $N+1, $N+2 ... com a $1, $2 ... " +"Si\n" " ometeu N, s'assumeix que és 1.\n" "\n" " Estat de sortida:\n" " Torna èxit, excepte si N és negatiu o més gran que $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4261,22 +4526,26 @@ msgstr "" " Torna l'estat de l'última ordre a FITXER executada; falla si FITXER no\n" " es pot llegir." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" "Suspèn l'execució de l'intèrpret.\n" "\n" -" Suspèn l'execució d'aquest intèrpret fins a rebre un senyal SIGCONT. Si\n" +" Suspèn l'execució d'aquest intèrpret fins a rebre un senyal SIGCONT. " +"Si\n" " no es força, les sessions d'entrada no es poden suspendre.\n" "\n" " Opcions:\n" @@ -4285,7 +4554,7 @@ msgstr "" " Estat de sortida:\n" " Torna èxit, excepte si no hi ha control de feines o es produeix un error." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4319,7 +4588,8 @@ 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" @@ -4340,7 +4610,8 @@ 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" @@ -4367,7 +4638,8 @@ msgid "" msgstr "" "Avalua una expressió condicional.\n" "\n" -" Surt amb estat 0 (cert) o 1 (fals) en funció de l'avaluació d'EXPR. Les\n" +" Surt amb estat 0 (cert) o 1 (fals) en funció de l'avaluació d'EXPR. " +"Les\n" " expressions poden ser unàries o binàries. Les expressions unàries\n" " s'utilitzen sovint per a determinar l'estat de fitxers. També podeu\n" " utilitzar operadors de cadenes, i operadors de comparació numèrica.\n" @@ -4399,7 +4671,8 @@ msgstr "" " -G FITXER Cert si el vostre grup és propietari del fitxer.\n" " -N FITXER Cert si el fitxer ha canviat des de l'última lectura.\n" "\n" -" FITXER1 -nt FITXER2 Cert si fitxer1 és més nou que fitxer2 (segons la\n" +" FITXER1 -nt FITXER2 Cert si fitxer1 és més nou que fitxer2 (segons " +"la\n" " data de modificació).\n" "\n" " FITXER1 -ot FITXER2 Cert si fitxer1 és més antic que fitxer2.\n" @@ -4431,7 +4704,8 @@ msgstr "" " EXPR1 -a EXPR2 Cert si tant expr1 com expr2 són cert.\n" " EXPR1 -o EXPR2 Cert si qualsevol de expr1 o expr2 són certes.\n" "\n" -" arg1 OP arg2 Tests aritmètics. OP és un de -eq, -ne, -lt, -le, -gt,\n" +" arg1 OP arg2 Tests aritmètics. OP és un de -eq, -ne, -lt, -le, -" +"gt,\n" " o -ge.\n" "\n" " Els operadors aritmètics binaris tornen cert si ARG1 és igual, no\n" @@ -4442,7 +4716,7 @@ msgstr "" " Torna èxit si EXPR s'avalua com a cert; falla si EXPR s'avalua com a\n" " fals o si especifiqueu un argument no vàlid." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4455,11 +4729,12 @@ msgstr "" " l'últim argument ha de ser un signe «]» que tanqui el «[» inicial." # help times -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4467,52 +4742,69 @@ msgid "" msgstr "" "Mostra els temps d'execució.\n" "\n" -" Mostra el temps d'execució d'usuari i sistema acumulat per l'intèrpret i\n" +" Mostra el temps d'execució d'usuari i sistema acumulat per l'intèrpret " +"i\n" " per tots els seus processos inferiors.\n" "\n" " Estat de sortida:\n" " Sempre reïx." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Intercepta senyals i altres esdeveniments.\n" "\n" " Defineix i activa controladors de senyal, que són executats quan\n" " l'intèrpret rep senyals o en altres circumstàncies.\n" "\n" -" ARG és una ordre que es llegeix i s'executa quan l'intèrpret rep SENYAL.\n" +" ARG és una ordre que es llegeix i s'executa quan l'intèrpret rep " +"SENYAL.\n" " Si ometeu ARG (i especifiqueu un únic SENYAL) o ARG és «-», cada senyal\n" " és restablert al seu valor original. Si ARG és una cadena nul·la,\n" " aleshores SENYAL és ignorat per l'intèrpret i per tots els programes\n" @@ -4542,7 +4834,7 @@ msgstr "" " Torna èxit, excepte si algun SENYAL no és vàlid o especifiqueu una\n" " ordre no vàlida." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4568,7 +4860,8 @@ 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 "" "Mostra informació sobre el tipus d'ordre.\n" "\n" @@ -4597,11 +4890,13 @@ msgstr "" " Torna èxit si es troben tots els NOMs; falla si n'hi ha algun que no es\n" " pot trobar." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4638,9 +4933,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4681,11 +4977,13 @@ msgstr "" "\n" " Si especifiqueu un LÍMIT, aquest s'utilitza com a nou valor per al\n" " recurs indicat; els valors especials de LÍMIT són «soft», «hard» i\n" -" «unlimited», que signifiquen límit tou actual, límit dur actual, i sense\n" +" «unlimited», que signifiquen límit tou actual, límit dur actual, i " +"sense\n" " límit, respectivament. En cas contrari, es mostra el valor actual per\n" " al recurs especificat. Si no especifiqueu cap opció, se suposa -f.\n" "\n" -" Els valors s'indiquen en increments de 1024 octets, excepte en el cas de\n" +" Els valors s'indiquen en increments de 1024 octets, excepte en el cas " +"de\n" " l'opció -t, que és en segons, -p, que és en increments de 512 octets, i\n" " -u, que és en nombre de processos.\n" "\n" @@ -4693,7 +4991,7 @@ msgstr "" " Torna èxit, tret que especifiqueu una opció invàlida o es produeixi un\n" " error." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4727,23 +5025,27 @@ msgstr "" " Estat de sortida:\n" " Torna èxit, excepte si MODE no és vàlid o passeu una opció no vàlida." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4778,19 +5080,22 @@ msgstr "" "\n" " Estat de sortida:\n" " Torna l'estat de sortida de l'última ID; falla si ID no és vàlid o\n" -" passeu una opció no vàlida, o si s'ha especificat -n i l'intèrpret no té\n" +" passeu una opció no vàlida, o si s'ha especificat -n i l'intèrpret no " +"té\n" " processos inferiors que no s'estiguin esperant." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Espera la finalització de processos i en retorna l'estat de sortida.\n" @@ -4804,7 +5109,16 @@ msgstr "" " Torna l'estat de sortida de l'últim PID; falla si PID no és vàlid o es\n" " passa una opció no vàlida." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4820,13 +5134,14 @@ msgstr "" "\n" " Els bucles «for» executen una seqüència d'ordres per a cada un dels\n" " elements d'una llista. Si «in PARAULES ...;» s'omet, aleshores se\n" -" suposa «in \"$@\"». Per a cada element de la llista PARAULES, l'element\n" +" suposa «in \"$@\"». Per a cada element de la llista PARAULES, " +"l'element\n" " s'assigna a NOM, i les ORDRES s'executen.\n" "\n" " Estat de sortida:\n" " Torna l'estat de sortida de l'última ordre executada." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4858,7 +5173,7 @@ msgstr "" " Estat de sortida:\n" " Torna l'estat de sortida de l'última ordre executada." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4881,9 +5196,11 @@ msgstr "" "\n" " Les PARAULES s'expandeixen i generen una llista de paraules. Les\n" " paraules expandides s'envien a la sortida d'errors estàndard, cada una\n" -" precedida per un número. Si «in PARAULES» s'omet, se suposa «in \"$@\"».\n" +" precedida per un número. Si «in PARAULES» s'omet, se suposa «in " +"\"$@\"».\n" " Llavors, es mostra l'introductor PS3 i es llegeix una línia a l'entrada\n" -" estàndard. Si la línia correspon amb el número d'alguna de les paraules\n" +" estàndard. Si la línia correspon amb el número d'alguna de les " +"paraules\n" " mostrades, aleshores aquesta paraula s'assigna a NOM. Si la línia està\n" " buida, les PARAULES i l'introductor es tornen a mostrar. Si es llegeix\n" " EOF, l'ordre finalitza. Qualsevol altre valor llegit, fa que s'assigni\n" @@ -4895,7 +5212,7 @@ msgstr "" " Torna l'estat de sortida de l'última ordre executada." # help time -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4913,7 +5230,8 @@ msgstr "" "Informa del temps transcorregut durant l'execució d'una canonada.\n" "\n" " Executa CANONADA i mostra un resum del temps real, el temps de CPU\n" -" d'usuari i el temps de CPU de sistema transcorregut durant l'execució de\n" +" d'usuari i el temps de CPU de sistema transcorregut durant l'execució " +"de\n" " CANONADA.\n" "\n" " Opcions:\n" @@ -4924,7 +5242,7 @@ msgstr "" " Estat de sortida:\n" " L'estat de sortida és l'estat de sortida de la CANONADA." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4936,22 +5254,28 @@ msgid "" msgstr "" "Executa ordres segons la coincidència amb patrons.\n" "\n" -" Executa ORDRES de forma selectiva en funció de si PARAULA coincideix amb\n" +" Executa ORDRES de forma selectiva en funció de si PARAULA coincideix " +"amb\n" " PATRÓ. El signe «|» serveix per a separar múltiples patrons.\n" "\n" " Estat de sortida:\n" " Torna l'estat de sortida de l'última ordre executada." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4965,17 +5289,19 @@ msgstr "" " sortida zero, també s'executa la corresponent llista «then ORDRES», i\n" " l'ordre if finalitza. En cas contrari, la llista «else ORDRES»\n" " s'executa, si és que existeix. L'estat de sortida la construcció\n" -" sencera és l'estat de sortida de l'última ordre executada, o zero si cap\n" +" sencera és l'estat de sortida de l'última ordre executada, o zero si " +"cap\n" " de les condicions s'avalua com a certa.\n" "\n" " Estat de sortida:\n" " Torna l'estat de l'última ordre executada." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4989,11 +5315,12 @@ msgstr "" " Estat de sortida:\n" " Torna l'estat de l'última ordre executada." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -5008,7 +5335,7 @@ msgstr "" " Torna l'estat de l'última ordre executada." # help coproc -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5022,7 +5349,8 @@ msgid "" msgstr "" "Crea un coprocés anomenat NOM.\n" "\n" -" Executa ORDRE de forma asincrònica, amb la sortida estàndard i l'entrada\n" +" Executa ORDRE de forma asincrònica, amb la sortida estàndard i " +"l'entrada\n" " estàndard de l'ordre connectades via canonada als descriptors de fitxer\n" " assignats als índexs 0 i 1 de la variable vector NOM. Per defecte NOM\n" " és \"COPROC\".\n" @@ -5030,12 +5358,13 @@ msgstr "" " Estat de sortida:\n" " Torna l'estat de sortida d'ORDRE." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -5044,7 +5373,8 @@ msgid "" msgstr "" "Defineix una funció.\n" "\n" -" Crea una funció de l'intèrpret anomenada NOM. Quan s'invoca com a ordre\n" +" Crea una funció de l'intèrpret anomenada NOM. Quan s'invoca com a " +"ordre\n" " simple, NOM executa ORDRES en el context de l'intèrpret de qui fa la\n" " crida. Quan NOM s'invoca, els arguments es passen a la funció com a\n" " $1...$n, i el nom de la funció es troba a $FUNCNAME.\n" @@ -5052,7 +5382,7 @@ msgstr "" " Estat de sortida:\n" " Torna èxit, excepte si NOM és de només lectura." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5070,7 +5400,7 @@ msgstr "" " Estat de sortida:\n" " Torna l'estat de sortida de l'última ordre executada." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5085,7 +5415,8 @@ msgid "" msgstr "" "Reprèn una feina i la porta al primer pla.\n" "\n" -" Equivalent a utilitzar FEINA com a argument en l'ordre «fg». Reprèn una\n" +" Equivalent a utilitzar FEINA com a argument en l'ordre «fg». Reprèn " +"una\n" " feina aturada o en segon pla. FEINA pot ser el nom d'una feina, o el\n" " número d'una feina. Si es troba un «&» després de FEINA, llavors la\n" " feina s'envia en un segon pla, com si l'especificació de feina\n" @@ -5095,7 +5426,7 @@ msgstr "" " Torna l'estat de sortida de la feina represa." # help '((' -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5114,13 +5445,16 @@ msgstr "" " Si el resultat de l'avaluació és 0, torna 1; altrament torna 0." # help '[[' -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5151,8 +5485,10 @@ msgstr "" " EXPR1 || EXPR2 Cert si EXPR1 o EXPR2 és cert; si no, fals.\n" "\n" " Quan s'utilitzen els operadors «==» o «!=», el component de la dreta\n" -" s'interpreta com a un patró i es comprova si coincideix amb la cadena de\n" -" l'esquerra de l'operador. Quan s'utilitza l'operador «=~», el component\n" +" s'interpreta com a un patró i es comprova si coincideix amb la cadena " +"de\n" +" l'esquerra de l'operador. Quan s'utilitza l'operador «=~», el " +"component\n" " de la dreta de l'operador s'interpreta com a expressió regular i es\n" " comprova si coincideix amb la cadena de l'esquerra de l'operador.\n" "\n" @@ -5162,7 +5498,7 @@ msgstr "" " Estat de sortida:\n" " 0 o 1, depenent del valor d'EXPRESSIÓ." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5220,7 +5556,8 @@ msgstr "" " BASH_VERSION Informació de la versió de Bash.\n" " CDPATH Llista de directoris separats per «:» on buscar\n" " directoris passats com a arguments a «cd».\n" -" GLOBIGNORE Llista de patrons separats per «:» que indiquen noms\n" +" GLOBIGNORE Llista de patrons separats per «:» que indiquen " +"noms\n" " que s'ignoren en fer expansions de noms de fitxer.\n" " HISTFILE Nom del fitxer on es desa l'historial d'ordres.\n" " HISTFILESIZE Nombre màxim de línies que pot contenir el\n" @@ -5230,7 +5567,8 @@ msgstr "" " HOME Camí complet cap al vostre directori personal.\n" " HOSTNAME Nom de la màquina actual.\n" " HOSTTYPE Tipus de CPU de la màquina en què corre Bash.\n" -" IGNOREEOF Controla el comportament de l'intèrpret en trobar un\n" +" IGNOREEOF Controla el comportament de l'intèrpret en trobar " +"un\n" " caràcter EOF (final de fitxer) com a únic caràcter.\n" " Si la variable està definida, llavors el seu valor\n" " és el nombre de caràcters EOF seguits que es poden\n" @@ -5238,12 +5576,15 @@ msgstr "" " surti (per defecte: 10). Si no està definida, EOF\n" " s'interpreta com el final de les dades d'entrada.\n" " MACHTYPE Cadena que descriu el sistema en què corre Bash.\n" -" MAILCHECK Amb quina freqüència, en segons, Bash comprova si hi\n" +" MAILCHECK Amb quina freqüència, en segons, Bash comprova si " +"hi\n" " ha correu nou.\n" -" MAILPATH Llista de fitxers separats per «:» que Bash comprova\n" +" MAILPATH Llista de fitxers separats per «:» que Bash " +"comprova\n" " si tenen correu nou.\n" " OSTYPE La versió de Unix en què corre Bash.\n" -" PATH Llista de directoris separats per «:» on buscar quan\n" +" PATH Llista de directoris separats per «:» on buscar " +"quan\n" " se cerquen ordres.\n" " PROMPT_COMMAND Ordre que s'executa cada cop abans de mostrar\n" " l'introductor de l'intèrpret.\n" @@ -5265,8 +5606,10 @@ msgstr "" " valor significa que l'ordre ha de ser el prefix\n" " d'una feina aturada.\n" " histchars Caràcters que controlen l'expansió de l'historial i\n" -" les substitucions ràpides. El primer caràcter és el\n" -" caràcter de substitució de l'historial, habitualment\n" +" les substitucions ràpides. El primer caràcter és " +"el\n" +" caràcter de substitució de l'historial, " +"habitualment\n" " «!». El segon és el caràcter de «substitució\n" " ràpida», normalment «^». El tercer és el caràcter\n" " de «comentari d'historial», normalment «#».\n" @@ -5275,7 +5618,7 @@ msgstr "" # si modifiqueu aquesta cadena cal actualitzar la còpia que es troba més # enrere en aquest fitxer -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5337,7 +5680,7 @@ msgstr "" # si modifiqueu aquesta cadena cal actualitzar la còpia que es troba més # enrere en aquest fitxer -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5392,7 +5735,7 @@ msgstr "" # si modifiqueu aquesta cadena cal actualitzar la còpia que es troba més # enrere en aquest fitxer -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5423,7 +5766,8 @@ msgstr "" "Mostra la pila de directoris.\n" "\n" " Mostra la llista actual de directoris recordats. Els directoris són\n" -" afegits a la llista mitjançant l'ordre «pushd»; podeu recórrer la llista\n" +" afegits a la llista mitjançant l'ordre «pushd»; podeu recórrer la " +"llista\n" " de directoris cap enrere amb l'ordre «popd».\n" "\n" " Opcions:\n" @@ -5447,7 +5791,7 @@ msgstr "" " Retorna èxit, excepte si es rep una opció invàlida o es produeix un\n" " error." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5484,7 +5828,8 @@ msgstr "" " Torna èxit si OPCIÓ està activada; falla si especifiqueu una opció\n" " invàlida o OPCIÓ està desactivada." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5492,29 +5837,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Formata i escriu ARGUMENTS d'acord amb FORMAT.\n" @@ -5549,13 +5901,16 @@ msgstr "" " Retorna èxit, excepte si es rep una opció invàlida o es produeix un\n" " error d'assignació o d'escriptura." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5569,8 +5924,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5593,41 +5950,53 @@ msgstr "" " (normalment una ordre)\n" "\n" " Quan s'intenta una compleció, s'apliquen primer les accions\n" -" especificades amb l'opció -D, seguides de les acciones especificades amb\n" +" especificades amb l'opció -D, seguides de les acciones especificades " +"amb\n" " l'opció -E, i l'opció -I (en aquest ordre). Si es proporcionen\n" -" múltiples opcions, l'opció -D té preferència sobre l'opció -E, i ambdues\n" +" múltiples opcions, l'opció -D té preferència sobre l'opció -E, i " +"ambdues\n" " opcions tenen preferència sobre l'opció -I.\n" "\n" " Estat de sortida:\n" " Torna èxit, excepte si passeu una opció invàlida o es produeix un error." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Mostra possibles complecions en funció de les opcions.\n" "\n" -" Aquesta ordre està pensada per a ser utilitzada en una funció que generi\n" +" Aquesta ordre està pensada per a ser utilitzada en una funció que " +"generi\n" " possibles complecions. Si especifiqueu l'argument opcional PARAULA, es\n" " limiten les complecions a aquelles que coincideixen amb PARAULA.\n" "\n" " Estat de sortida:\n" " Torna èxit, excepte si passeu una opció invàlida o es produeix un error." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5651,16 +6020,19 @@ msgid "" msgstr "" "Modifica o mostra opcions de compleció.\n" "\n" -" Modifica les opcions de compleció de NOM, o, si no especifiqueu cap NOM,\n" +" Modifica les opcions de compleció de NOM, o, si no especifiqueu cap " +"NOM,\n" " la compleció que s'està executant en el moment. Si no s'indica cap\n" " OPCIÓ, mostra les opcions de compleció per a cada NOM o\n" " l'especificació de compleció en ús.\n" "\n" " Opcions:\n" " -o opció Activa OPCIÓ per a NOM\n" -" -D Canvia les opcions de compleció d'ordres per defecte\n" +" -D Canvia les opcions de compleció d'ordres per " +"defecte\n" " -E Canvia les opcions de compleció d'ordres «buides»\n" -" -I Canvia les opcions de compleció de la paraula inicial\n" +" -I Canvia les opcions de compleció de la paraula " +"inicial\n" "\n" " Si utilitzeu «+o» en lloc de «-o», desactiva l'opció especificada.\n" "\n" @@ -5668,7 +6040,8 @@ msgstr "" "\n" " Cada NOM és el nom d'una ordre per la qual s'ha d'haver definit una\n" " especificació de compleció amb l'ordre interna «complete». Si no\n" -" especifiqueu cap NOM, compopt s'ha de cridar des d'una funció generadora\n" +" especifiqueu cap NOM, compopt s'ha de cridar des d'una funció " +"generadora\n" " de complecions, i les opcions que es modifiquen afecten la generació de\n" " complecions que s'està executant en aquell moment.\n" "\n" @@ -5677,21 +6050,26 @@ msgstr "" " definida cap especificació de compleció." # help readarray -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5704,11 +6082,13 @@ 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 "" "Llegeix línies d'un fitxer cap a una variable vector.\n" @@ -5718,7 +6098,8 @@ msgstr "" " per defecte és MAPFILE.\n" "\n" " Opcions:\n" -" -d delim Usa DELIM com delimitador de línies, en lloc del caràcter de\n" +" -d delim Usa DELIM com delimitador de línies, en lloc del caràcter " +"de\n" " salt de línia\n" " -n nombre Copia com a màxim NOMBRE línies. Si NOMBRE és 0, es copien\n" " totes les línies.\n" @@ -5728,13 +6109,15 @@ msgstr "" " -u fd Llegeix el descriptor de fitxer FD, en lloc de l'entrada\n" " estàndard.\n" " -C callback Avalua CALLBACK cada QUÀNTUM línies llegides.\n" -" -c quàntum Nombre de línies llegides abans de cridar CALLBACK\n" +" -c quàntum Nombre de línies llegides abans de cridar " +"CALLBACK\n" "\n" " Arguments:\n" " VECTOR Nom de la variable vector per a les dades.\n" "\n" " Si especifiqueu l'opció -C sense -c, el quàntum per defecte és 5000.\n" -" Quan s'avalua la funció CALLBACK, se li passa l'índex del proper element\n" +" Quan s'avalua la funció CALLBACK, se li passa l'índex del proper " +"element\n" " del vector i la línia que s'assigna a aquest element, com a arguments\n" " addicionals.\n" "\n" @@ -5745,7 +6128,7 @@ msgstr "" " Torna èxit, excepte si passeu una opció no vàlida o VECTOR és de només\n" " lectura o no és una variable vector." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5755,6 +6138,34 @@ msgstr "" "\n" " Un sinònim de «mapfile»." +# help caller +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Retorna el context de la subrutina actual.\n" +#~ "\n" +#~ " Sense EXPR, torna \"$línia $nomfitxer\". Amb EXPR, torna \"$línia\n" +#~ " $subrutina $nomfitxer\"; aquesta informació addicional es pot " +#~ "utilitzar\n" +#~ " per a proporcionar un traçat de la pila.\n" +#~ "\n" +#~ " El valor de EXPR indica quants «frames» retrocedir des de l'actual; " +#~ "el\n" +#~ " «frame» superior és el 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "atenció: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: clau de vector associatiu no vàlida" diff --git a/po/cs.gmo b/po/cs.gmo index ff6a876a75ce394784e2cce9120d5baf120f380f..57f02451d97cb8e12a2ed3d6b7229d31e65616c4 100644 GIT binary patch delta 12616 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 PIb?NkbFMsMwblOzqQiB- delta 51921 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 diff --git a/po/cs.po b/po/cs.po index 81e87a6ba..b82f75556 100644 --- a/po/cs.po +++ b/po/cs.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2023-04-20 19:31+02:00\n" "Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n" "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" @@ -25,124 +25,125 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "chybný podskript pole" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: odstraňuje se atribut odkazu na název" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: číslované pole nelze převést na pole asociativní" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: přes nečíselný indexu nelze dosadit" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: při přiřazovaní asociativního pole se musí použít podskript" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: nelze vytvořit: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: pro příkaz nelze nalézt klávesovou mapu " -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: první nebílý znak není „\"“" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "ne zavírající „%c“ v %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: chybí dvojtečkový oddělovač" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "„%s“: v mapě kláves příkazů nelze zrušit vazbu" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "závorková expanze: nelze alokovat paměť pro %s" # TODO: pluralize -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "závorková expanze: alokace paměti pro %u prvků selhala" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "závorková expanze: alokace paměti pro „%s“ selhala" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "„%s“: chybný název aliasu" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "upravování řádku není povoleno" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "„%s“: chybný název klávesové mapy" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: nelze číst: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "„%s“: neznámé jméno funkce" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s není svázán s žádnou klávesou.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s lze vyvolat přes " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "„%s“: nelze zrušit vazbu" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "počet smyček" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "má smysl jen ve smyčkách „for“, „while“ nebo „until“" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -151,362 +152,379 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" -"Vrátí kontext volání aktuálního podprogramu.\n" +"Vrátí kontext aktuálního podprogramu.\n" " \n" " Bez VÝRAZU vrátí „$řádek $název_souboru“. S VÝRAZEM vrátí\n" -" „$řádek $podprogram $název_souboru“; tuto dodatečnou informaci lze\n" +" „$řádek $podprogram $název_souboru“; tuto zvláštní informaci lze\n" " využít pro výpis zásobníku volání.\n" " \n" " Hodnota VÝRAZU určuje, kolik rámců volání se má zpětně projít od toho\n" -" současného; vrcholový rámec má číslo 0." +" současného; vrcholový rámec má číslo 0.\n" +" \n" +" Návratový kód:\n" +" Vrací 0, pokud shell provádí shellovou funkci a VÝRAZ je platný." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "není nestavena HOME" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "příliš mnoho argumentů" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "adresář s prázdným názvem" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "není nastaveno OLDPWD" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "řádek %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "varování: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: užití: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: přepínač vyžaduje argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: vyžadován číselný argument" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: nenalezeno" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: chybný přepínač" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: chybný název přepínače" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "„%s“: není platným identifikátorem" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "neplatné osmičkové číslo" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "chybné šestnáctkové číslo" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "chybné číslo" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: chybné určení signálu" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "„%s“: není PID ani platným označením úlohy" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: proměnná pouze pro čtení" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: nelze přiřadit" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s mimo rozsah" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s mimo rozsah" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: žádná taková úloha" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: žádné řízení úloh" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "žádné řízení úloh" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: omezeno" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "omezeno" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: není vestavěným příkazem shellu" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "chyba zápisu: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "chyba při nastavování vlastností terminálu: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "chyba při získávání vlastností terminálu: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: chyba při zjišťování současného adresáře: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: nejednoznačné určení úlohy" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "k této verzi není dostupná nápověda" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: není (proměnnou typu) indexované pole" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: nelze zrušit: %s jen pro čtení" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: nelze zrušit" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: neplatný název akce" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: žádné doplňování neurčeno" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "varování: přepínač -F možná nebude dělat, co jste čekali" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "varování: přepínač -C možná nebude dělat, co jste čekali" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "doplňovací funkce se právě nevykonává" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "může být použito jen ve funkci" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "„-f“ nelze použít na výrobu funkce" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: funkce jen pro čtení" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: proměnná s odkazem nemůže být polem" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: proměnná s odkazem na název nemůže odkazovat sama na sebe" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: kruhový odkaz na název" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "„%s“: neplatný název proměnné pro odkaz na název" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: takto nelze likvidovat pole" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: asociativní pole nelze převést na číslované pole" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: přiřazení do složeného pole uzavřeného v uvozovkách je zastaralé" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynamické nahrávání není dostupné" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "sdílený objekt %s nelze otevřít: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "ve sdílením objektu %2$s nelze nalézt %1$s: %3$s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: vestavěné příkazy již dynamicky zavedeny" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "zaváděcí funkce pro %s vrací chybu (%d): nezavedeno" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: není dynamicky nahráno" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: nelze smazat: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: je adresářem" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: není obyčejný soubor" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: soubor je příliš velký" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: binární soubor nelze spustit" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: nelze provést: %s" # XXX: Toto je zpráva interaktivního shellu při příkazu exit informující # o odhlášení -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "odhlášení\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "toto není login shell: použijte „exit“" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Jsou zde pozastavené úlohy.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Jsou zde běžící úlohy.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "žádný příkaz nenalezen" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "určení historie" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: dočasný soubor nelze otevřít: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "současný" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "úloha %d spuštěna bez správy úloh" @@ -521,11 +539,11 @@ msgstr "%s: chybný přepínač – %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: přepínač vyžaduje argument – %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashování zakázáno" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: tabulka hashů je prázdná\n" @@ -552,15 +570,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "žádné téma nápovědy se nehodí pro „%s“. Zkuste „help help“ nebo „man -k %s“ nebo „info %s“." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"žádné téma nápovědy se nehodí pro „%s“. Zkuste „help help“ nebo „man -k %s“ " +"nebo „info %s“." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: nelze otevřít: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -580,21 +601,31 @@ msgstr "" "Hvězdička (*) vedle jména znamená, že příkaz je zakázán.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "nelze použít více jak jeden z -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "místo v historii" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "prázdný název proměnné typu pole" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parametr null nebo nenastaven" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: neplatný časový údaj" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: expanze historie selhala" @@ -608,113 +639,113 @@ msgstr "%s: inlib selhala" msgid "no other options allowed with `-x'" msgstr "s „-x“ nejsou dovoleny další přepínače" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumenty musí být proces nebo identifikátor úlohy" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Neznámá chyba" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "očekáván výraz" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: není (proměnnou typu) indexované pole" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: chybné určení deskriptoru souboru" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: neplatný deskriptor souboru: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: chybný počet řádků" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: chybný počátek pole" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: neplatné množství mezi voláními" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "prázdný název proměnné typu pole" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "je vyžadována podpora proměnných typu pole" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "„%s“: postrádám formátovací znak" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "„%c“: chybné určení časového limitu" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "„%c“: neplatný formátovací znak" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "varování: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "potíže s rozebráním formátovacího řetězce: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "u \\x chybí šestnáctková číslovka" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "u \\%c chybí unikódová číslovka" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "žádný další adresář" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: chybný argument" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<žádný aktuální adresář>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "prázdný zásobník adresářů" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "pořadí v zásobníku adresářů" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -729,10 +760,12 @@ 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 "" "Zobrazí seznam právě zapamatovaných adresářů. Adresáře si najdou svoji\n" @@ -754,7 +787,7 @@ msgstr "" " -N\tZobrazí N. položku počítáno zprava na seznamu, který zobrazuje\n" " \tdirs, když je vyvolán bez přepínačů, počínaje nulou." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -799,7 +832,7 @@ msgstr "" " \n" " Zásobník adresářů si můžete prohlédnout příkazem „dirs“." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -831,325 +864,338 @@ msgstr "" " \t„dirs“, počínaje nulou. Na příklad: „popd +0“ odstraní první\n" " \tadresář, „popd -1“ druhý.\n" " \n" -" -N\tOdstraní N. položku počítáno zprava na seznamu zobrazovaném pomocí\n" +" -N\tOdstraní N. položku počítáno zprava na seznamu zobrazovaném " +"pomocí\n" " \t„dirs“, počínaje nulou. Na příklad: „popd -0“ odstraní poslední\n" " \tadresář, „popd -1“ další vedle posledního.\n" " \n" " Zásobník adresářů si můžete prohlédnout příkazem „dirs“." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: chybné určení časového limitu" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "chyba čtení: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "„return“ lze provést jen z funkce nebo skriptu načteného přes „source“" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "funkci i proměnnou nelze rušit současně" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: není (proměnnou typu) pole" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: není funkcí" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: nelze exportovat" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "počet shiftů" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "přepínač shellu nelze zároveň nastavit a zrušit" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: chybný název přepínače shellu" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "vyžadován argument s názvem souboru" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: soubor nenalezen" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "nelze pozastavit" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "login shell nelze pozastavit" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s je alias na „%s“\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s je klíčové slovo shellu\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s je funkce\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s je zvláštní součást shellu\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s je funkce\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s je součást shellu\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s je %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s je zahashován (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: chybný argument s limitou" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "„%c“: chybný příkaz" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: limit nelze zjistit: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limit" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: limit nelze změnit: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "osmičkové číslo" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "„%c“: chybný operátor symbolických práv" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "„%c“: chybný znak symbolický práv " -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " řádek " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "poslední příkaz: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Ukončuji…" #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORMACE: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "LADICÍ upozornění: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "chyba neznámého příkazu" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "chybný druh příkazu" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "chybný konektor" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "chybný skok" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: nevázaná proměnná" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\ačasový limit pro čekání na vstup vypršel: automatické odhlášení\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "standardní vstup nelze přesměrovat z /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: „%c“: chybný formátovací znak" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: koproces [%d:%s] stále existuje" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "chyba v rouře" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: maximální úroveň zanoření funkce eval byla překročena (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: maximální úroveň zanoření funkce source byla překročena (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: maximální úroveň zanoření funkcí byla překročena (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: omezeno: v názvu příkazu nesmí být „/“" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: příkaz nenalezen" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: chybný interpretr" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: nelze spustit: požadovaný soubor neexistuje" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: chybný interpretr" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: binární soubor nelze spustit: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "„%s“: je zvláštní vestavěný příkaz shellu" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "deskriptor souboru %d nelze duplikovat na deskriptor %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "úroveň rekurze výrazu byla překročena" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "zásobník rekurze podtekl" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "syntaktická chyba ve výrazu" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "pokus o přiřazení do ne-proměnné" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "syntaktická chyba v přiřazení do proměnné" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "dělení nulou" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "chyba: chybný expassing token" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "v podmíněném výrazu očekávána „:“" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "mocnitel menší než 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "po přednostním zvýšení nebo snížení očekáván identifikátor" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "postrádám „)“" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "syntaktická chyba: očekáván operand" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "syntaktická chyba: chybný aritmetický operátor" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (chybný token je „%s“)" @@ -1166,7 +1212,7 @@ msgstr "chybná celočíselná konstanta" msgid "value too great for base" msgstr "hodnot je pro základ příliš velká" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: chyba výrazu\n" @@ -1175,46 +1221,51 @@ msgstr "%s: chyba výrazu\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: rodičovské adresáře nejsou přístupné" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "„%s“: je zvláštní vestavěný příkaz shellu" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "na deskriptoru %d nelze resetovat režim nodelay" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "nový deskriptor souboru pro vstup bashe z deskr. %d nelze alokovat" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: buffer již pro nový deskriptor %d existuje" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp roury" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: SMYČKA: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: SMYČKA: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "forknutý PID %d se objevil v běžící úloze %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "mažu pozastavenou úlohu %d se skupinou procesů %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: PID %5ld (%s) označen za stále živého" @@ -1224,139 +1275,139 @@ msgstr "add_process: PID %5ld (%s) označen za stále živého" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: žádný takový PID" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signál %d" # XXX: (úloha) dokončna. Používat ženský rod i unásledujících. Jedná se # o výpis úloh. -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Dokončena" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Pozastavena" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Pozastavena (%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Běží" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Dokončena (%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Ukončena %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Stav neznámý" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(core dumped [obraz paměti uložen]) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (cwd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid na potomku (z %ld na %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: PID %ld není potomkem tohoto shellu" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Žádný záznam o procesu %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: úloha %d je pozastavena" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: žádné současné úlohy" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: úloha skončila" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: úloha %d je již na pozadí" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: zapíná se WNOHANG, aby se zabránilo neurčitému zablokování" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: řádek %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (core dumped [obraz paměti uložen])" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(cwd nyní: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp selhalo" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: správa úloh nefunguje na pozadí" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: disciplína linky" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "nelze nastavit skupinu procesů terminálu (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "žádná správa úloh v tomto shellu" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: předpoklad nesplněn: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1365,380 +1416,394 @@ msgstr "" "\r\n" "malloc: %s:%d: zbabraný předpoklad\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "není známo" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: blok v seznamu uvolněných zbit" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: zavoláno s argumentem již uvolněného bloku" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: zavoláno s argumentem nenaalokovaného bloku" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: zjištěno podtečení, mh_nbytes mimo rozsah" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: zjištěno podtečení, magic8 poškozeno" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: velikosti počátečního a koncového kusu se liší" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: zavoláno s argumentem nenaalokovaného bloku" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: zjištěno podtečení, mh_nbytes mimo rozsah" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: zjištěno podtečení, magic8 poškozeno" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: velikosti počátečního a koncového kusu se liší" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: tabulka alokací je plná FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p již obsažen v tabulce jako alokovaný?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p již obsažen v tabulce jako volný?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "chybný základ" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: stroj není znám" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: chybná služba" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: chybné určení síťové cesty" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "síťové operace nejsou podporovány" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: národní prostředí nelze změnit (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: národní prostředí nelze změnit (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: národní prostředí nelze změnit (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: národní prostředí nelze změnit (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "V $_ máte poštu" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "V $_ máte novou poštu" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Pošta v %s je přečtená\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "chyba syntaxe: vyžadován aritmetický výraz" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "chyba syntaxe: neočekávaný „;“" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "chyba syntaxe: „((%s))“" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: chybný druh instrukce %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "„here“ dokument na řádku %d ukončen koncem souboru (požadováno „%s“)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: instrukce přesměrování „%d“ mimo rozsah" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) přesahuje SIZE_MAX (%lu): řádek zkrácen" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) přesahuje SIZE_MAX (%lu): řádek " +"zkrácen" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "chyba zápisu: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "maximální počet here dokumentů překročen" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "neočekávaný konec souboru při hledání znaku odpovídajícímu „%c“" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "neočekávaný konec souboru při hledání „]]“" # XXX: Condional means condition (adj.) probably. Can English distinguish # between the condition (podmínkový) and the code branch (podmíněný)? Check # for all "conditional" string occurences. -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "chyba syntaxe ve výrazu podmínky: neočekávaný token „%s“" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "chyba syntaxe ve výrazu podmínky" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "neočekávaný token „%s“, očekávána „)“" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "očekávána „)“" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "neočekávaný argument „%s“ u podmínkového unárního operátoru" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "neočekávaný argument u podmínkového unárního operátoru" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "neočekávaný token „%s“, očekáván podmínkový binární operátor" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "očekáván podmínkový binární operátor" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "neočekávaný argument „%s„ u podmínkového binárního operátoru" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "neočekávaný argument u podmínkového binárního operátoru" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "neočekávaný token „%c“ v podmínkovém příkazu" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "neočekávaný token „%s“ v podmínkovém příkazu" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "neočekávaný token %d v podmínkovém příkazu" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "chyba syntaxe poblíž neočekávaného tokenu „%s“" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "chyba syntaxe poblíž „%s“" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "chyba syntaxe: nenadálý konec souboru" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "chyba syntaxe: nenadálý konec souboru" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "chyba syntaxe" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Shell lze ukončit příkazem „%s“.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "nenadálý konec souboru při hledání odpovídající „)“" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "doplňování: funkce „%s“ nenalezena" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: možná smyčka opakování" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULLOVÝ COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: chybná propojka „%d“" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: neplatný deskriptor souboru" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: nullový ukazatel na soubor" # fd, fp a fileno jsou identifikátory v kódu -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace: fd (%d) != fileno fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: „%c“: chybný formátovací znak" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "deskriptor souboru mimo rozsah" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: nejednoznačné přesměrování" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: existující soubor nelze přepsat" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: omezeno: výstup nelze přesměrovat" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "pro „here“ dokument nelze vytvořit dočasný soubor: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: deskriptor souboru nelze přiřadit do proměnné" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port není bez síťování podporováno" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "chyba přesměrování: deskriptor souboru nelze duplikovat" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "nelze nalézt /tmp, vytvořte jej, prosím!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp musí být platným názvem pro adresář" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "v interaktivních shellech se režim krásného výpisu nepoužije" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: chybný přepínač" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "UID nelze nastavit na %d: efektivní UID je %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "GID nelze nastavit na %d: efektivní GID je %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "debuger nelze spustit, ladicí režim zakázán" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: Je adresářem" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Nemám žádné jméno!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, verze %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1747,51 +1812,53 @@ msgstr "" "Použití:\t%s [Dlouhý GNU přepínač] [přepínač]…\n" "\t%s [Dlouhý GNU přepínač] [přepínač] skriptový_soubor…\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Dlouhé GNU přepínače:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Přepínače shellu:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD nebo -c příkaz nebo -O shopt_přepínač\t(pouze při vyvolání)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s nebo -o přepínač\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Podrobnosti o přepínačích shellu získáte tím, že napíšete „%s -c \"help set\"“.\n" +msgstr "" +"Podrobnosti o přepínačích shellu získáte tím, že napíšete „%s -c \"help " +"set\"“.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Podrobnosti o příkazech vestavěných do shellu získáte tím, že\n" "napište „%s -c help“.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Chyby nahlásíte příkazem „bashbug“.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Domovská stránka bashe: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Obecný návod na použití softwaru GNU: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: neplatná operace" @@ -1965,282 +2032,306 @@ msgstr "Požadavek o informaci" msgid "Unknown Signal #%d" msgstr "Neznámý signál č. %d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "chybná substituce: v %2$s chybí uzavírací „%1$s“" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: seznam nelze přiřadit do prvku pole" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "nelze vyrobit rouru za účelem substituce procesu" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "nelze vytvořit potomka za účelem substituce procesu" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "pojmenovanou rouru %s nelze otevřít pro čtení" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "pojmenovanou rouru %s nelze otevřít pro zápis" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "pojmenovanou rouru %s nelze zdvojit jako deskriptor %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "substituce příkazu: nulový bajt ve vstupu ignorován" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: rouru nelze zdvojit jako deskriptor 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "nelze vytvořit rouru pro substituci příkazu" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "nelze vytvořit potomka pro substituci příkazu" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: rouru nelze zdvojit jako deskriptor 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: neplatný název proměnné pro odkaz na název" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: chybná nepřímá expanze" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: chybný název proměnné" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parametr nenastaven" +msgid "%s: bad substitution" +msgstr "%s: chybná substituce" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parametr null nebo nenastaven" +msgid "%s: parameter not set" +msgstr "%s: parametr nenastaven" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: výraz podřetězce < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: chybná substituce" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: takto nelze přiřazovat" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "budoucá verze tohoto shellu budou vynucovat vyhodnocení jako aritmetickou substituci" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"budoucá verze tohoto shellu budou vynucovat vyhodnocení jako aritmetickou " +"substituci" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "chybná substituce: v %s chybí uzavírací „`“" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "žádná shoda: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "očekáván argument" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: očekáván celočíselný výraz" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "očekávána „)“" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "očekávána „)“, nalezeno %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: očekáván binární operátor" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: očekáván unární operátor" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "postrádám „]“" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "chyba syntaxe: neočekávaný řetězec „%s“" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "neplatné číslo signálu" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "obsluha signálů: maximální úroveň zanoření obsluhy signálů byla překročena (%d)" +msgstr "" +"obsluha signálů: maximální úroveň zanoření obsluhy signálů byla překročena " +"(%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: chybná hodnota v trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "run_pending_traps: obsluha signálu je SIG_DFL, přeposílám %d (%s) sobě" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: chybný signál %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "chyba při importu definice „%s“" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "úroveň shellu (%d) příliš vysoká, resetuji na 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "maximální počet here dokumentů překročen" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: žádný kontext funkce v aktuálním rozsahu" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: hodnotu nelze do proměnné přiřadit" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: z nekompatibilního typu nelze hodnotu zdědit" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: přiřazení čísla odkazu na název" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: žádný kontext funkce v aktuálním rozsahu" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s: má nullový exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "neplatný znak %d v exportstr pro %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "v exportstr pro %s chybí „=“" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: hlava shell_variables není kontextem funkce" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: chybí kontext global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: hlava shell_variables není dočasným rozsahem prostředí" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: nelze otevřít jako SOUBOR" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: neplatná hodnota pro deskriptor trasovacího souboru" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: hodnota kompatibility je mimo rozsah" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright © 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Licence GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Licence GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl." +"html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, verze %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Toto je svobodné programové vybavení: máte právo jej měnit a šířit." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "VEŠKERÉ ZÁRUKY chybí, jak jen zákon dovoluje." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: nelze alokovat %'lu bajtů (alokováno %'lu bajtů)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: nelze alokovat %'lu bajtů" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: nelze alokovat %'lu bajtů (alokováno %'lu bajtů)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: nelze alokovat %'lu bajtů" @@ -2254,8 +2345,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] název [název…]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m klávmapa] [-f soubor] [-q název] [-u název] [-r klávposl] [-x klávposl:příkaz-shellu] [klávposl:readline-funkce nebo readline-příkaz]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m klávmapa] [-f soubor] [-q název] [-u název] [-r " +"klávposl] [-x klávposl:příkaz-shellu] [klávposl:readline-funkce nebo " +"readline-příkaz]" #: builtins.c:56 msgid "break [n]" @@ -2274,7 +2370,8 @@ msgid "caller [expr]" msgstr "caller [výraz]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [adresář]" #: builtins.c:68 @@ -2286,12 +2383,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] příkaz [argument…]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [název[=hodnota]…] nebo declare [-p] [-aAfFilnrtux] [název…]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [název[=hodnota]…] nebo declare [-p] [-aAfFilnrtux] " +"[název…]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] název[=hodnota]… nebo typeset -p [-aAfFilnrtux] [název…]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] název[=hodnota]… nebo typeset -p [-aAfFilnrtux] " +"[název…]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2331,7 +2436,8 @@ msgstr "logout [n]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "fc [-e enázev] [-lnr] [první] [poslední] nebo fc -s [vzor=náhrada] [příkaz]" +msgstr "" +"fc [-e enázev] [-lnr] [první] [poslední] nebo fc -s [vzor=náhrada] [příkaz]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2350,8 +2456,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [vzorek…]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d pozice] [n] nebo history -anrw [jméno_souboru] nebo history -ps argument [argument…]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d pozice] [n] nebo history -anrw [jméno_souboru] nebo history " +"-ps argument [argument…]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2362,16 +2472,24 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [úloha… | PID…]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s sigspec | -n číssig | -sigspec] pid | úloha… nebo kill -l [sigspec]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s sigspec | -n číssig | -sigspec] pid | úloha… nebo kill -l [sigspec]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let argument [argument…]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a pole] [-d oddělovač] [-i text] [-n p_znaků] [-N p_znaků] [-p výzva] [-t limit] [-u fd] [jméno…]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a pole] [-d oddělovač] [-i text] [-n p_znaků] [-N p_znaků] [-p " +"výzva] [-t limit] [-u fd] [jméno…]" #: builtins.c:140 msgid "return [n]" @@ -2418,7 +2536,8 @@ msgid "[ arg... ]" msgstr "[ argument… ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[argument] signal_spec…]" #: builtins.c:168 @@ -2442,107 +2561,136 @@ msgid "wait [pid ...]" msgstr "wait [pid…]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NÁZEV [in SLOVECH…] ; do PŘÍKAZY; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( výr1; výr2; výr3 )); do PŘÍKAZY; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NÁZEV [in SLOVA…;] do PŘÍKAZY; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] kolona" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case SLOVO in [VZOR [| VZOR]…) PŘÍKAZY ;;]… esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if PŘÍKAZY; then PŘÍKAZY; [ elif PŘÍKAZY; then PŘÍKAZY; ]… [ else PŘÍKAZY; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if PŘÍKAZY; then PŘÍKAZY; [ elif PŘÍKAZY; then PŘÍKAZY; ]… [ else PŘÍKAZY; ] " +"fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while PŘÍKAZY; do PŘÍKAZY-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until PŘÍKAZY; do PŘÍKAZY-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NÁZEV] příkaz [přesměrování]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function jméno { PŘÍKAZY ; } nebo jméno () { PŘÍKAZY ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ PŘÍKAZY ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "úloha [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( výraz ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ výraz ]]" # XXX: "variable" je literál na seznamy vestavěných příkazů -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables – názvy a významy některých proměnných shellu" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | adresář]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [název_volby…]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v proměnná] formát [argumenty]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o přepínač] [-A akce] [-G globvzor] [-W seznam_slov] [-F funkce] [-C příkaz] [-X filtrvzor] [-P předpona] [-S přípona] [název…]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o přepínač] [-A akce] [-G globvzor] " +"[-W seznam_slov] [-F funkce] [-C příkaz] [-X filtrvzor] [-P předpona] [-S " +"přípona] [název…]" -#: builtins.c:235 -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 přepínač] [-A akce] [-G globvzor] [-W seznam_slov] [-F funkce] [-C příkaz] [-X filtrvzor] [-P předpona] [-S přípona] [slovo]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o přepínač] [-A akce] [-G globvzor] [-W " +"seznam_slov] [-F funkce] [-C příkaz] [-X filtrvzor] [-P předpona] [-S " +"přípona] [slovo]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o možnost] [-DEI] [název…]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d oddělovač] [-n počet] [-O počátek] [-s počet] [-t] [-u FD] [-C volání] [-c množství] [pole]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d oddělovač] [-n počet] [-O počátek] [-s počet] [-t] [-u FD] [-C volání] [-c množství] [pole]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d oddělovač] [-n počet] [-O počátek] [-s počet] [-t] [-u FD] [-C " +"volání] [-c množství] [pole]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d oddělovač] [-n počet] [-O počátek] [-s počet] [-t] [-u FD] [-C " +"volání] [-c množství] [pole]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2557,16 +2705,19 @@ 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 "" "Definuje nebo zobrazí aliasy.\n" " \n" -" „alias“ bez argumentů vypíše na standardní výstup seznam aliasů ve znovu\n" +" „alias“ bez argumentů vypíše na standardní výstup seznam aliasů ve " +"znovu\n" " použitelném formátu NÁZEV=HODNOTA.\n" " \n" " Jinak bude definován alias pro každý NÁZEV, který má zadanou HODNOTU.\n" -" Závěrečná mezera v HODNOTĚ způsobí, že při expanzi bude následující slovo\n" +" Závěrečná mezera v HODNOTĚ způsobí, že při expanzi bude následující " +"slovo\n" " zkontrolováno na substituci aliasů.\n" " \n" " Přepínače:\n" @@ -2576,7 +2727,7 @@ msgstr "" " alias vrátí pravdu, pokud nebyl zadán NÁZEV, pro který není žádný alias\n" " definován." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2591,7 +2742,7 @@ msgstr "" " -a\todstraní všechny definice aliasů\n" " Vrátí úspěch, pokud NÁZEV není neexistující alias." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2603,25 +2754,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2637,35 +2793,43 @@ msgstr "" " Přepínače:\n" " -m klávmapa Použije KLÁVMAPU jako klávesovou mapu pro trvání\n" " tohoto příkazu. Možné klávesové mapy jsou emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command a vi-insert.\n" " -l Vypíše seznam názvů funkcí.\n" " -P Vypíše seznam názvů funkcí a klávesových vazeb.\n" -" -p Vypíše seznam funkcí a klávesových vazeb ve formátu,\n" +" -p Vypíše seznam funkcí a klávesových vazeb ve " +"formátu,\n" " který lze použít jako vstup.\n" " -S Vypíše seznam posloupností kláves,\n" " které vyvolávají makra, a jejich hodnoty.\n" " -s Vypíše seznam posloupností kláves,\n" -" která vyvolávají makra, a jejich hodnoty ve formátu,\n" +" která vyvolávají makra, a jejich hodnoty ve " +"formátu,\n" " který lze použít jako vstup.\n" " -V Vypíše seznam názvů proměnných a hodnot.\n" -" -v Vypíše seznam názvů proměnných a hodnot ve formátu,\n" +" -v Vypíše seznam názvů proměnných a hodnot ve " +"formátu,\n" " který lze použít jako vstup.\n" " -q název-funkce Dotáže se, které klávesy vyvolají zadanou funkci.\n" -" -u název-funkce Zruší všechny vazby na klávesy, které jsou napojeny\n" +" -u název-funkce Zruší všechny vazby na klávesy, které jsou " +"napojeny\n" " na zadanou funkci.\n" " -r klávposl Odstraní vazbu na KLÁVPOSL.\n" " -f soubor Načte vazby kláves ze SOUBORU.\n" " -x klávposl:příkaz-shellu\n" " Způsobí, že bude vykonán PŘÍKAZ-SHELLU, když bude\n" " zadána KLÁVPOSL.\n" -" -X Vypíše posloupnosti kláves a příkazy přidružené přes\n" -" přepínač -x ve formátu, který lze použít jako vstup.\n" +" -X Vypíše posloupnosti kláves a příkazy přidružené " +"přes\n" +" přepínač -x ve formátu, který lze použít jako " +"vstup.\n" " \n" " Návratový kód:\n" -" bind vrací 0, pokud není zadán nerozpoznaný přepínač nebo nedojde k chybě." +" bind vrací 0, pokud není zadán nerozpoznaný přepínač nebo nedojde " +"k chybě." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2683,7 +2847,7 @@ msgstr "" " Návratový kód:\n" " Návratový kód je 0, pokud N je větší nebo rovno 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2700,13 +2864,14 @@ msgstr "" " Návratový kód:\n" " Návratový kód je 0, pokud N je větší nebo rovno 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2714,7 +2879,8 @@ msgid "" msgstr "" "Provede vestavěný příkaz shellu.\n" " \n" -" Provede VESTAVĚNÝ-PŘÍKAZ-SHELLU s argumenty ARGUMENTY, aniž by se uplatnilo\n" +" Provede VESTAVĚNÝ-PŘÍKAZ-SHELLU s argumenty ARGUMENTY, aniž by se " +"uplatnilo\n" " vyhledávání příkazu. Toto se hodí, když si přejete reimplementovat\n" " vestavěný příkaz shellu jako funkci shellu, avšak potřebujete spustit\n" " vestavěný příkaz uvnitř této funkce.\n" @@ -2723,7 +2889,7 @@ msgstr "" " Vrací návratový kód VESTAVĚNÉHO-PŘÍKAZU-SHELLU, nebo nepravdu, pokud\n" " VESTAVĚNÝ-PŘÍKAZ-SHELLU není vestavěným příkazem shellu." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2750,20 +2916,27 @@ msgstr "" " Návratový kód:\n" " Vrací 0, pokud shell provádí shellovou funkci a VÝRAZ je platný." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2779,24 +2952,29 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Změní pracovní adresář shellu.\n" " \n" -" Změní aktuální adresář na ADR. Implicitní ADR je hodnota proměnné shellu\n" +" Změní aktuální adresář na ADR. Implicitní ADR je hodnota proměnné " +"shellu\n" " HOME.\n" " \n" " Proměnná CDPATH definuje vyhledávací cestu pro adresář obsahující ADR.\n" " Názvy náhradních adresářů v CDPATH se oddělují dvojtečkou (:). Prázdný\n" -" název adresáře je stejný jako aktuální adresář. Začíná-li ADR na lomítko\n" +" název adresáře je stejný jako aktuální adresář. Začíná-li ADR na " +"lomítko\n" " (/), nebude CDPATH použita.\n" " \n" -" Nebude-li adresář nalezen a přepínač shellu „cdable_vars“ bude nastaven,\n" +" Nebude-li adresář nalezen a přepínač shellu „cdable_vars“ bude " +"nastaven,\n" " pak se dané slovo zkusí jakožto název proměnné. Má-li taková proměnná\n" " hodnotu, pak její hodnota se použije jako ADR.\n" " \n" @@ -2804,7 +2982,8 @@ msgstr "" " -L vynutí následování symbolických odkazů: vyhodnotí symbolické\n" " odkazy v ADR po zpracování všech výskytů „..“\n" " -P nařizuje použít fyzickou adresářovou strukturu namísto\n" -" následování symbolických odkazů: vyhodnotí symbolické odkazy v ADR\n" +" následování symbolických odkazů: vyhodnotí symbolické odkazy " +"v ADR\n" " před zpracováním všech výskytů „..“\n" " -e je-li zadán přepínač -P a současný pracovní adresář nelze\n" " zdárně zjistit, skončí s nenulovým návratovým kódem\n" @@ -2819,7 +2998,7 @@ msgstr "" " Vrací 0, byl-li adresář změněn a, byl-li zadán -P, $PWD byla úspěšně\n" " nastavena. Jinak vrací nenulovou hodnotu." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2847,7 +3026,7 @@ msgstr "" " Vrací 0, nebyl-li zadán neplatný přepínač a mohl-li být současný\n" " adresář přečten." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2863,7 +3042,7 @@ msgstr "" " Návratový kód:\n" " Vždy uspěje." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2875,7 +3054,7 @@ msgstr "" " Návratový kód:\n" " Vždy uspěje." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2887,12 +3066,13 @@ msgstr "" " Návratový kód:\n" " Vždy selže." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2906,8 +3086,10 @@ msgid "" msgstr "" "Provede jednoduchý příkaz nebo zobrazí podrobnosti o příkazech.\n" " \n" -" Spustí PŘÍKAZ s ARGUMENTY ignoruje funkce shellu, nebo zobrazí informace\n" -" o zadaných PŘÍKAZECH. Lze využít, když je třeba vyvolat příkazy z disku,\n" +" Spustí PŘÍKAZ s ARGUMENTY ignoruje funkce shellu, nebo zobrazí " +"informace\n" +" o zadaných PŘÍKAZECH. Lze využít, když je třeba vyvolat příkazy " +"z disku,\n" " přičemž existuje funkce stejného jména.\n" " \n" " Přepínače:\n" @@ -2919,7 +3101,8 @@ msgstr "" " Návratový kód:\n" " Vrací návratový kód PŘÍKAZU, nebo selže, nebyl–li příkaz nalezen." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2947,12 +3130,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2990,14 +3175,15 @@ msgstr "" " Proměnné s atributem integer jsou aritmeticky vyhodnoceny (vizte příkaz\n" " „let“), jakmile je do proměnné přiřazeno.\n" " \n" -" Je-li použito uvnitř funkce, učiní „declare“ NÁZVY lokálními stejně jako\n" +" Je-li použito uvnitř funkce, učiní „declare“ NÁZVY lokálními stejně " +"jako\n" " příkaz „local“. Přepínač „-g“ toto chování potlačí.\n" " \n" " Návratový kód:\n" " Vrací úspěch, pokud nebyl zadán neplatný přepínač a nedošlo k chybě při\n" " přiřazování do proměnné." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3007,7 +3193,7 @@ msgstr "" " \n" " Synonymum pro „declare“. Vizte „help declare“." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3023,21 +3209,24 @@ msgid "" msgstr "" "Definuje lokální proměnné.\n" " \n" -" Vytvoří lokální proměnnou pojmenovanou NÁZEV a přiřadí jí HODNOTU. PŘEPÍNAČ\n" +" Vytvoří lokální proměnnou pojmenovanou NÁZEV a přiřadí jí HODNOTU. " +"PŘEPÍNAČ\n" " smí být jakýkoliv přepínač přípustný u „declare“.\n" " \n" -" Lokální proměnné lze použít jen uvnitř funkcí, budou viditelné jen v dané\n" +" Lokální proměnné lze použít jen uvnitř funkcí, budou viditelné jen " +"v dané\n" " funkci a jejich potomcích.\n" " \n" " Návratový kód:\n" " Vrací úspěch, nebyl-li zadán neplatný přepínač, nenastala-li chyba při\n" " přiřazování do proměnné a vykonává-li shell funkci." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3061,9 +3250,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3076,8 +3267,10 @@ msgstr "" " \n" " Přepínače:\n" " -n nepřipojuje nový řádek\n" -" -e zapne interpretování následujících znaků uvozených zpětným lomítkem\n" -" -E explicitně potlačí interpretování znaků uvozených zpětným lomítkem\n" +" -e zapne interpretování následujících znaků uvozených zpětným " +"lomítkem\n" +" -E explicitně potlačí interpretování znaků uvozených zpětným " +"lomítkem\n" " \n" " „echo“ interpretuje následující znaky uvozené zpětným lomítkem:\n" " \\a poplach (zvonek)\n" @@ -3103,7 +3296,7 @@ msgstr "" " Návratový kód:\n" " Vrací úspěch, nedojde-li k chybě zápisu na výstup." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3124,7 +3317,8 @@ msgstr "" " \n" " Vrací úspěch, nedojte-li k chybě zápisu na výstup." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3144,6 +3338,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3157,7 +3357,8 @@ msgstr "" " shellu, aniž byste museli zadávat celou cestu.\n" " \n" " Přepínače:\n" -" -a\tvypíše seznam vestavěných příkazů a vyznačí, který je a který není\n" +" -a\tvypíše seznam vestavěných příkazů a vyznačí, který je a který " +"není\n" " \tpovolen\n" " -n\tzakáže každý NÁZEV nebo zobrazí seznam zakázaných vestavěných\n" " \tpříkazů\n" @@ -3177,11 +3378,12 @@ msgstr "" " Vrací úspěch, je-li NÁZEV vestavěným příkazem shellu a nevyskytne-li\n" " se chyba." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3194,7 +3396,7 @@ msgstr "" " Návratový kód:\n" " Vrátí návratový kód příkazu, nebo úspěch, byl-li příkaz prázdný." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3252,12 +3454,17 @@ msgstr "" " \n" " getopts hlásí chyby jedním ze dvou způsobů. Pokud prvním znakem\n" " ŘETĚZCE_PŘEPÍNAČŮ je dvojtečka, getopts hlásí chyby tichým způsobem.\n" -" V tomto režimu žádné chybové zprávy nejsou vypisovány. Když se narazí na\n" -" neplatný přepínač, getopts umístí tento znak do OPTARG. Pokud není nalezen\n" +" V tomto režimu žádné chybové zprávy nejsou vypisovány. Když se narazí " +"na\n" +" neplatný přepínač, getopts umístí tento znak do OPTARG. Pokud není " +"nalezen\n" " povinný argument, getopts umístí „:“ do NAME a OPTARG nastaví na znak\n" -" nalezeného přepínače. Pokud getopts nepracuje v tomto tichém režimu a je\n" -" nalezen neplatný přepínač, getopts umístí „?“ do NAME a zruší OPTARG. Když\n" -" nenajde povinný argument, je do NAME zapsán „?“, OPTARG zrušen a vytištěna\n" +" nalezeného přepínače. Pokud getopts nepracuje v tomto tichém režimu a " +"je\n" +" nalezen neplatný přepínač, getopts umístí „?“ do NAME a zruší OPTARG. " +"Když\n" +" nenajde povinný argument, je do NAME zapsán „?“, OPTARG zrušen a " +"vytištěna\n" " diagnostická zpráva.\n" " \n" " Pokud proměnná shellu OPTERR má hodnotu 0, getopts vypne vypisování\n" @@ -3268,15 +3475,17 @@ msgstr "" " zadány jako hodnoty ARG, budou rozebrány tyto namísto pozičních.\n" " \n" " Návratový kód:\n" -" Vrátí úspěch, byl-li nalezen nějaký přepínač. Neúspěch vrátí, když dojde\n" +" Vrátí úspěch, byl-li nalezen nějaký přepínač. Neúspěch vrátí, když " +"dojde\n" " na konec přepínačů nebo nastane-li chyba." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3284,16 +3493,20 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Nahradí shell zadaným příkazem.\n" " \n" -" Vykoná PŘÍKAZ, přičemž nahradí tento shell zadaným programem. ARGUMENTY\n" -" se stanou argumenty PŘÍKAZU. Není-li PŘÍKAZ zadán, přesměrování zapůsobí\n" +" Vykoná PŘÍKAZ, přičemž nahradí tento shell zadaným programem. " +"ARGUMENTY\n" +" se stanou argumenty PŘÍKAZU. Není-li PŘÍKAZ zadán, přesměrování " +"zapůsobí\n" " v tomto shellu.\n" " \n" " Přepínače:\n" @@ -3307,7 +3520,7 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud byl PŘÍKAZ nalezen a nedošlo k chybě přesměrování." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3319,11 +3532,12 @@ msgstr "" " Ukončí tento shell se stavem N. Bez N bude návratový kód roven kódu\n" " posledně prováděného příkazu." -#: builtins.c:724 +#: builtins.c:732 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 "" "Ukončí přihlašovací shell.\n" @@ -3331,17 +3545,20 @@ msgstr "" " Ukončí přihlašovací (login) shell se stavem N. Nebyl-li příkaz zavolán\n" " z přihlašovacího shellu, vrátí chybu." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3354,13 +3571,17 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Zobrazí nebo vykoná příkazy ze seznamu historie.\n" " \n" " fc se používá na vypsání, úpravu a znovu provedení příkazů ze seznamu\n" -" historie. PRVNÍ a POSLEDNÍ mohou být čísla určující rozsah nebo PRVNÍ může být\n" +" historie. PRVNÍ a POSLEDNÍ mohou být čísla určující rozsah nebo PRVNÍ " +"může být\n" " řetězec, což určuje nejnovější příkaz začínající na zadaný řetězec.\n" " \n" " Přepínače:\n" @@ -3372,14 +3593,15 @@ msgstr "" " Forma příkazu „fc -s [vzor=náhrada… [příkaz]“ znamená, že PŘÍKAZ bude\n" " po nahrazení STARÝ=NOVÝ znovu vykonán.\n" " \n" -" Užitečný alias je r='fc -s', takže napsání „r cc“ spustí poslední příkaz\n" +" Užitečný alias je r='fc -s', takže napsání „r cc“ spustí poslední " +"příkaz\n" " začínající na „cc“ a zadání „r“ znovu spustí poslední příkaz.\n" " \n" " Návratový kód:\n" " Vrátí úspěch nebo kód provedeného příkazu. Nenulový kód, vyskytne-li se\n" " chyba." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3392,19 +3614,22 @@ msgid "" msgstr "" "Přepne úlohu na popředí.\n" " \n" -" Přesune úlohu určenou pomocí ÚLOHA na popředí a učiní ji aktuální úlohou.\n" +" Přesune úlohu určenou pomocí ÚLOHA na popředí a učiní ji aktuální " +"úlohou.\n" " Není-li ÚLOHA zadána, použije se úloha, o které si shell myslí, že je\n" " aktuální.\n" " \n" " Návratový kód:\n" " Kód úlohy přesunuté do popředí, nebo došlo-li k chybě, kód selhání." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3419,12 +3644,13 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud je správa úloh zapnuta a nedošlo-li k nějaké chybě." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3443,15 +3669,18 @@ msgid "" msgstr "" "Zapamatuje si nebo zobrazí umístění programu.\n" " \n" -" Pro každý NÁZEV je určena plná cesta k příkazu a je zapamatována. Nejsou-li\n" -" zadány žádné argumenty, budou vypsány informace o zapamatovaných příkazech.\n" +" Pro každý NÁZEV je určena plná cesta k příkazu a je zapamatována. Nejsou-" +"li\n" +" zadány žádné argumenty, budou vypsány informace o zapamatovaných " +"příkazech.\n" " \n" " Přepínače:\n" " -d zapomene zapamatovaná umístění každého NÁZVU\n" " -l vypíše v takové podobě, kterou lze opět použít jako vstup\n" " -p cesta použije NÁZEV_CESTY jako plnou cestu k NÁZVU\n" " -r zapomene všechna zapamatovaná umístění\n" -" -t vypíše zapamatované umístění každého NÁZVU a každému umístění\n" +" -t vypíše zapamatované umístění každého NÁZVU a každému " +"umístění\n" " předepíše odpovídající NÁZEV, bylo zadáno více NÁZVŮ\n" " Argumenty:\n" " NÁZEV Každý NÁZEV je vyhledán v $PATH a přidán do seznamu\n" @@ -3460,7 +3689,7 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud byl NÁZEV nalezen a nebyl-li zadán neplatný přepínač." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3478,12 +3707,14 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Zobrazí podrobnosti o vestavěných příkazech.\n" " \n" " Zobrazí stručný souhrn vestavěných příkazů. Je-li zadán VZOREK,\n" -" vrátí podrobnou nápovědu ke všem příkazům odpovídajícím VZORKU, jinak je\n" +" vrátí podrobnou nápovědu ke všem příkazům odpovídajícím VZORKU, jinak " +"je\n" " vytištěn seznam syntaxe vestavěných příkazů.\n" " \n" " Přepínače:\n" @@ -3498,7 +3729,8 @@ msgstr "" " Návratový kód:\n" " Vrací úspěch, pokud byl nalezen VZOREK a nebyl zadán neplatný přepínač." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3522,11 +3754,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3538,7 +3775,8 @@ msgstr "" " \n" " Přepínače:\n" " -c vyprázdní seznam historie smazáním všech položek\n" -" -d pozice smaže položku ze seznamu historie na pozici POZICE. Záporné\n" +" -d pozice smaže položku ze seznamu historie na pozici POZICE. " +"Záporné\n" " pozice se počítají od konce seznamu historie.\n" " \n" " -a připojí řádky historie z této relace do souboru historie\n" @@ -3551,17 +3789,20 @@ msgstr "" " aniž by cokoliv uložil do seznamu historie\n" " -s připojí ARGUMENTY do seznamu historie jako jednu položku\n" " \n" -" Je-li zadán JMÉNO_SOUBORU, tak ten je použit jako soubor historie. Jinak\n" +" Je-li zadán JMÉNO_SOUBORU, tak ten je použit jako soubor historie. " +"Jinak\n" " pokud $HISTFILE má hodnotu, tato je použita, jinak ~/.bash_history.\n" " \n" -" Je-li proměnná $HISTTIMEFORMAT nastavena a není-li prázdná, její hodnota\n" +" Je-li proměnná $HISTTIMEFORMAT nastavena a není-li prázdná, její " +"hodnota\n" " se použije jako formátovací řetězec pro strftime(3) při výpisu časových\n" -" razítek spojených s každou položkou historie. Jinak žádná časová razítka\n" +" razítek spojených s každou položkou historie. Jinak žádná časová " +"razítka\n" " nebudou vypisována. \n" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nedošlo k chybě." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3596,14 +3837,17 @@ msgstr "" " -r zúží výstup jen na běžící úlohy\n" " -s zúží výstup jen na pozastavené úlohy\n" " \n" -" Je-li použito -x, bude spuštěn příkaz, jakmile všechny úlohy uvedené mezi\n" -" ARGUMENTY budou nahrazeny ID procesu, který je vedoucím skupiny dané úlohy.\n" +" Je-li použito -x, bude spuštěn příkaz, jakmile všechny úlohy uvedené " +"mezi\n" +" ARGUMENTY budou nahrazeny ID procesu, který je vedoucím skupiny dané " +"úlohy.\n" " \n" " Návratový kód:\n" -" Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se chyba.\n" +" Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se " +"chyba.\n" " Byl-ly použit přepínač -x, vrátí návratový kód PŘÍKAZU." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3633,7 +3877,7 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač nebo ÚLOHA." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3658,13 +3902,15 @@ msgstr "" "Zašle signál úloze.\n" " \n" " Zašle procesu určeném PID (nebo ÚLOHOU) signál zadaný pomocí SIGSPEC\n" -" nebo ČÍSSIG. Není-li SIGSPEC ani ČÍSSIG zadán, pak se předpokládá SIGTERM.\n" +" nebo ČÍSSIG. Není-li SIGSPEC ani ČÍSSIG zadán, pak se předpokládá " +"SIGTERM.\n" " \n" " Přepínače:\n" " -s sig SIG je název signálu\n" " -n sig SIG je číslo signálu\n" " -l vypíše čísla signálů; pokud „-l“ následují argumenty, má\n" -" se za to, že se jedná o čísla signálů, pro které se mají vyspat\n" +" se za to, že se jedná o čísla signálů, pro které se mají " +"vyspat\n" " jejich názvy.\n" " -L synonymum pro -l\n" " \n" @@ -3675,14 +3921,15 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nedošlo k chybě." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3748,8 +3995,10 @@ msgstr "" " \t&=, ^=, |=\tpřiřazení\n" " \n" " Proměnné shellu jsou povolené operandy. Název proměnné je uvnitř výrazu\n" -" nahrazen její hodnotou (s automatickým převodem na celé číslo pevné šířky).\n" -" Proměnná nemusí mít atribut integer (číslo) zapnutý, aby byla použitelná\n" +" nahrazen její hodnotou (s automatickým převodem na celé číslo pevné " +"šířky).\n" +" Proměnná nemusí mít atribut integer (číslo) zapnutý, aby byla " +"použitelná\n" " ve výrazu.\n" " \n" " Operátory se vyhodnocují v pořadí přednosti. Podvýrazy v závorkách jsou\n" @@ -3759,19 +4008,24 @@ msgstr "" " Pokud poslední ARGUMENT je vyhodnocen na 0, let vrátí 1. Jinak je\n" " navrácena 0." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3779,11 +4033,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3801,21 +4058,25 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Načte ze standardního vstupu jeden řádek a rozdělí jej na položky.\n" " \n" " Ze standardního vstupu, nebo deskriptoru souboru FD, je-li zadán\n" " přepínač -u, je načten jeden řádek. Řádek se rozdělí na části jako při\n" -" dělení na slova a první slovo je přiřazeno do prvního JMÉNA, druhé slovo\n" +" dělení na slova a první slovo je přiřazeno do prvního JMÉNA, druhé " +"slovo\n" " do druhého JMÉNA a tak dále, přičemž přebývající slova se přiřadí do\n" " posledního JMÉNA. Pouze znaky uvedené v $IFS jsou považovány za\n" " oddělovače slov. Ve výchozím nastavení znak zpětného lomítka ruší\n" " zvláštní význam znaků oddělovače a nového řádku.\n" " \n" -" Nejsou-li uvedena žádná JMÉNA, načtený řádek bude uložen do proměnné REPLY.\n" +" Nejsou-li uvedena žádná JMÉNA, načtený řádek bude uložen do proměnné " +"REPLY.\n" " \n" " Přepínače:\n" " -a pole načtená slova budou přiřazena do postupných prvků POLE\n" @@ -3830,26 +4091,34 @@ msgstr "" " -N p_znaků vrátí řízení pouze po načtení přesně P_ZNAKŮ znaků,\n" " pokud se neobjeví konec souboru nebo nevyprší limit,\n" " ignoruje jakýkoliv oddělovač\n" -" -p výzva vypíše řetězec VÝZVA bez závěrečného nového řádku dříve,\n" +" -p výzva vypíše řetězec VÝZVA bez závěrečného nového řádku " +"dříve,\n" " než se zahájí načítání\n" -" -r nepovolí zpětná lomítka pro escapování jakýchkoliv znaků\n" +" -r nepovolí zpětná lomítka pro escapování jakýchkoliv " +"znaků\n" " -s vstup pocházející z terminálu nebude zobrazován\n" " -t limit umožní vypršení časového limitu a vrácení chyby, pokud\n" -" nebude načten celý řádek do LIMIT sekund. Hodnota proměnné\n" -" TMOUT představuje implicitní limit. LIMIT smí být desetinné\n" -" číslo. Je-li LIMIT 0, read okamžitě skončí, aniž by zkusil\n" +" nebude načten celý řádek do LIMIT sekund. Hodnota " +"proměnné\n" +" TMOUT představuje implicitní limit. LIMIT smí být " +"desetinné\n" +" číslo. Je-li LIMIT 0, read okamžitě skončí, aniž by " +"zkusil\n" " načíst jakákoliv data, a vrátí úspěch, jen bude-li na\n" " zadaném deskriptoru souboru připraven vstup. Návratový\n" -" kód bude větší než 128, pokud časový limit bude překročen.\n" -" -u fd čte z deskriptoru souboru FD namísto standardního vstupu\n" +" kód bude větší než 128, pokud časový limit bude " +"překročen.\n" +" -u fd čte z deskriptoru souboru FD namísto standardního " +"vstupu\n" " \n" " Návratový kód:\n" " Návratový kód je nula, pokud se nenarazí na konec souboru, časový limit\n" " pro čtení nevyprší (pak je větší než 128), nedojde k chybě při\n" -" přiřazování do proměnné, nebo není poskytnut neplatný deskriptor souboru\n" +" přiřazování do proměnné, nebo není poskytnut neplatný deskriptor " +"souboru\n" " jako argument -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3862,14 +4131,17 @@ msgid "" msgstr "" "Návrat z shellové funkce.\n" " \n" -" Způsobí ukončení funkce nebo skriptu načteného přes „source“ s návratovou\n" -" hodnotou určenou N. Je-li N vynecháno, návratový kód bude roven poslednímu\n" +" Způsobí ukončení funkce nebo skriptu načteného přes „source“ " +"s návratovou\n" +" hodnotou určenou N. Je-li N vynecháno, návratový kód bude roven " +"poslednímu\n" " příkazu vykonanému uvnitř dotyčné funkce nebo skriptu.\n" " \n" " Návratová hodnota:\n" " Vrátí N, nebo selže, pokud shell neprovádí funkci nebo skript." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3912,7 +4184,8 @@ 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" @@ -3936,13 +4209,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3954,7 +4232,8 @@ msgid "" msgstr "" "Nastaví nebo zruší hodnoty přepínačů shellu a pozičních parametrů.\n" " \n" -" Změní hodnoty atributům shellu a pozičním parametrům, nebo zobrazí názvy\n" +" Změní hodnoty atributům shellu a pozičním parametrům, nebo zobrazí " +"názvy\n" " a hodnoty proměnných shellu.\n" " \n" " Přepínače:\n" @@ -4028,8 +4307,10 @@ msgstr "" " - Přiřadí jakékoliv zbývající argumenty do pozičních parametrů.\n" " Přepínače -x a -v budou vypnuty.\n" " \n" -" Použití + místo - způsobí, že tyto příznaky budou vypnuty. Příznaky lze též\n" -" použít při volání shellu. Aktuální množinu příznaků je možno nalézt v $-.\n" +" Použití + místo - způsobí, že tyto příznaky budou vypnuty. Příznaky lze " +"též\n" +" použít při volání shellu. Aktuální množinu příznaků je možno nalézt " +"v $-.\n" " Přebývajících n ARGUMENTŮ jsou poziční parametry a budou přiřazeny,\n" " v pořadí, do $1, $2, … $n. Nejsou-li zadány žádné ARGUMENTY, budou\n" " vytištěny všechny proměnné shellu.\n" @@ -4037,7 +4318,7 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný argument." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4049,7 +4330,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4067,7 +4349,8 @@ msgstr "" " -n považuje každé JMÉNO za odkaz na název a odstraní proměnnou samu\n" " namísto proměnné, na kterou odkazuje\n" " \n" -" Bez těchto dvou příznaků unset nejprve zkusí zrušit proměnnou a pokud toto\n" +" Bez těchto dvou příznaků unset nejprve zkusí zrušit proměnnou a pokud " +"toto\n" " selže, tak zkusí zrušit funkci.\n" " \n" " Některé proměnné nelze odstranit. Vizte příkaz „readonly“.\n" @@ -4076,12 +4359,13 @@ msgstr "" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač a JMÉNO není jen pro\n" " čtení." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4095,8 +4379,10 @@ msgid "" msgstr "" "Nastaví atribut exportovat proměnné shellu.\n" " \n" -" Každý NÁZEV je označen pro automatické exportování do prostředí následně\n" -" prováděných příkazů. Je-li zadána HODNOTA, před exportem přiřadí HODNOTU.\n" +" Každý NÁZEV je označen pro automatické exportování do prostředí " +"následně\n" +" prováděných příkazů. Je-li zadána HODNOTA, před exportem přiřadí " +"HODNOTU.\n" " \n" " Přepínače:\n" " -f\tvztahuje se na funkce shellu\n" @@ -4108,7 +4394,7 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač nebo NÁZEV." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4130,8 +4416,10 @@ msgid "" msgstr "" "Označí proměnné shellu za nezměnitelné.\n" " \n" -" Označí každý NÁZEV jako jen pro čtení, hodnoty těchto NÁZVŮ nebude možné\n" -" změnit následným přiřazením. Je-li zadána HODNOTA, před označením za jen\n" +" Označí každý NÁZEV jako jen pro čtení, hodnoty těchto NÁZVŮ nebude " +"možné\n" +" změnit následným přiřazením. Je-li zadána HODNOTA, před označením za " +"jen\n" " pro čtení přiřadí HODNOTU.\n" " \n" " Přepínače:\n" @@ -4146,7 +4434,7 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač nebo NÁZEV." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4164,7 +4452,7 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud N není záporný a není větší než $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4188,15 +4476,18 @@ msgstr "" " Vrací návratový kód posledního provedeného příkazu z NÁZVU_SOUBORU.\n" " Selže, pokud NÁZEV_SOUBORU nelze načíst." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4212,7 +4503,7 @@ msgstr "" " Návratový kód:\n" " Vrací úspěch, pokud je správa úloh zapnuta a nevyskytla se chyba." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4246,7 +4537,8 @@ 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" @@ -4267,7 +4559,8 @@ 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" @@ -4329,7 +4622,8 @@ msgstr "" " -N SOUBOR Pravda, pokud soubor byl změněn po posledním čtení.\n" " \n" " SOUBOR1 -nt SOUBOR2\n" -" Pravda, pokud je SOUBOR1 novější než SOUBOR2 (podle času\n" +" Pravda, pokud je SOUBOR1 novější než SOUBOR2 (podle " +"času\n" " změny obsahu).\n" " \n" " SOUBOR1 -ot SOUBOR2\n" @@ -4379,7 +4673,7 @@ msgstr "" " Vrací úspěch, je-li VÝRAZ vyhodnocen jako pravdivý. Selže, je-li VÝRAZ\n" " vyhodnocen jako nepravdivý nebo je-li zadán neplatný argument." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4391,11 +4685,12 @@ msgstr "" " Toto je synonymum pro vestavěný příkaz „test“, až na to, že poslední\n" " argument musí být doslovně „]“, aby se shodoval s otevírající „[“." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4403,45 +4698,61 @@ msgid "" msgstr "" "Zobrazí časy procesu.\n" " \n" -" Vypíše celkovou dobu procesu shellu a všech jeho potomků, kterou strávili\n" +" Vypíše celkovou dobu procesu shellu a všech jeho potomků, kterou " +"strávili\n" " v uživatelském a jaderném (system) prostoru.\n" " \n" " Návratový kód:\n" " Vždy uspěje." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Zachytávání signálů a jiných událostí.\n" " \n" @@ -4449,34 +4760,42 @@ msgstr "" " signály nebo nastanou určité podmínky.\n" " \n" " Příkaz ARGUMENT bude načten a proveden, až shell obdrží signál(y)\n" -" SIGNAL_SPEC. Pokud ARGUMENT chybí (a je zadán jeden SIGNAL_SPEC) nebo je\n" -" „-“, každý určený signál bude přenastaven zpět na svoji původní hodnotu.\n" -" Je-li ARGUMENT prázdný řetězec, každý SIGNAL_SPEC bude shellem a příkazy\n" +" SIGNAL_SPEC. Pokud ARGUMENT chybí (a je zadán jeden SIGNAL_SPEC) nebo " +"je\n" +" „-“, každý určený signál bude přenastaven zpět na svoji původní " +"hodnotu.\n" +" Je-li ARGUMENT prázdný řetězec, každý SIGNAL_SPEC bude shellem a " +"příkazy\n" " z něj spuštěnými ignorován.\n" " \n" -" Je-li SIGNAL_SPEC „EXIT (0)“, bude ARGUMENT proveden při ukončování tohoto\n" +" Je-li SIGNAL_SPEC „EXIT (0)“, bude ARGUMENT proveden při ukončování " +"tohoto\n" " shellu. Je-li SIGNAL_SPEC „DEBUG“, bude ARGUMENT proveden před každým\n" -" jednoduchým příkazem. Je-li SIGNAL_SPEC „RETURN“, bude ARGUMENT proveden\n" +" jednoduchým příkazem. Je-li SIGNAL_SPEC „RETURN“, bude ARGUMENT " +"proveden\n" " vždy, když skončí běh funkce shellu nebo skriptu spuštěného přes\n" " vestavěný příkaz „.“ nebo „source“. SIGNAL_SPEC „ERR“ znamená, že\n" " ARGUMENT bude proveden pokaždé, když by selhání příkazu způsobilo\n" " ukončení shellu (je-li zapnut přepínač -e).\n" " \n" -" Nejsou-li poskytnuty žádné argumenty, trap vypíše seznam příkazů navázaných\n" +" Nejsou-li poskytnuty žádné argumenty, trap vypíše seznam příkazů " +"navázaných\n" " na všechny signály.\n" " \n" " Přepínače:\n" " -l\tvypíše seznam jmen signálů a jim odpovídajících čísel\n" " -p\tzobrazí příkazy navázané na každý SIGNAL_SPEC\n" " \n" -" Každý SIGNAL_SPEC je buďto jméno signálu ze <signal.h>, nebo číslo signálu.\n" -" U jmen signálů nezáleží na velikosti písmen a předpona SIG je nepovinná.\n" +" Každý SIGNAL_SPEC je buďto jméno signálu ze <signal.h>, nebo číslo " +"signálu.\n" +" U jmen signálů nezáleží na velikosti písmen a předpona SIG je " +"nepovinná.\n" " Aktuálnímu shellu lze zaslat signál pomocí „kill -signal $$“.\n" " \n" " Návratový kód:\n" " Vrátí úspěch, pokud SIGSPEC a zadané přepínače jsou platné." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4502,7 +4821,8 @@ 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 "" "Zobrazí informace o typu příkazu.\n" " \n" @@ -4531,11 +4851,13 @@ msgstr "" " Vrátí úspěch, pokud všechny NÁZVY byly nalezeny. Selže, pokud některé\n" " nalezeny nebyly." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4572,9 +4894,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4589,7 +4912,8 @@ msgstr "" " -H použije se „tvrdé“ (hard) omezení zdroje\n" " -a nahlásí všechna současná omezení (limity)\n" " -b velikost vyrovnávací paměti socketů\n" -" -c maximální velikost vytvářených core souborů (výpis paměti programu)\n" +" -c maximální velikost vytvářených core souborů (výpis paměti " +"programu)\n" " -d maximální velikost datového segmentu procesu\n" " -e maximální plánovací priorita („nice“)\n" " -f maximální velikost souborů zapsaných shellem a jeho potomky\n" @@ -4621,12 +4945,13 @@ msgstr "" " přepínač, pak se předpokládá -f.\n" " \n" " Hodnoty jsou v násobcích 1024 bajtů, kromě -t, která je v sekundách,\n" -" -p, která je v násobcích 512 bajtů, a -u, což je absolutní počet procesů.\n" +" -p, která je v násobcích 512 bajtů, a -u, což je absolutní počet " +"procesů.\n" " \n" " Návratová hodnota:\n" " Vrací úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se chyba." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4659,23 +4984,27 @@ msgstr "" " Návratový kód\n" " Vrátí úspěch, pokud nebyl zadán neplatný MÓD nebo přepínač." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4688,8 +5017,10 @@ msgid "" msgstr "" "Počká na dokončení úlohy a vrátí její návratový kód.\n" " \n" -" Počká na každý proces určený ID, což může být ID procesu nebo identifikace\n" -" úlohy, a nahlásí jeho návratový kód. Není-li ID zadáno, počká na všechny\n" +" Počká na každý proces určený ID, což může být ID procesu nebo " +"identifikace\n" +" úlohy, a nahlásí jeho návratový kód. Není-li ID zadáno, počká na " +"všechny\n" " právě aktivní dětské procesy a návratovým kódem bude nula. Je-li ID\n" " identifikátorem úlohy, počká na všechny procesy z kolony dané úlohy.\n" " \n" @@ -4698,7 +5029,8 @@ msgstr "" " její návratový kód.\n" " \n" " Je-li zadán přepínač -p, identifikátor procesu nebo úlohy, jehož\n" -" návratový kód se má vrátit, bude přiřazen do proměnné uvedené v argumentu\n" +" návratový kód se má vrátit, bude přiřazen do proměnné uvedené " +"v argumentu\n" " tohoto přepínače. Na začátku je před jakýmkoliv přiřazením je proměnná\n" " zrušena. To je užitečné pouze spolu s přepínačem -n.\n" " \n" @@ -4710,16 +5042,18 @@ msgstr "" " neplatný přepínač nebo byl použit přepínač -n a shell nemá žádné\n" " nevyhodnocené potomky." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Počká na dokončení procesu a vrátí jeho návratový kód.\n" @@ -4732,7 +5066,16 @@ msgstr "" " Vrátí kód posledního PID. Selže, pokud PID není platný nebo byl zadán\n" " neplatný přepínač." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4746,14 +5089,17 @@ msgid "" msgstr "" "Pro každý prvek seznamu vykoná příkazy.\n" " \n" -" Smyčka „for“ provede posloupnost příkazů pro každý prvek v seznamu položek.\n" -" Pokud „in SLOVECH…;“ není přítomno, pak se předpokládá „in \"$@\"“. NÁZEV\n" -" bude postupně nastaven na každý prvek ve SLOVECH a PŘÍKAZY budou provedeny.\n" +" Smyčka „for“ provede posloupnost příkazů pro každý prvek v seznamu " +"položek.\n" +" Pokud „in SLOVECH…;“ není přítomno, pak se předpokládá „in \"$@\"“. " +"NÁZEV\n" +" bude postupně nastaven na každý prvek ve SLOVECH a PŘÍKAZY budou " +"provedeny.\n" " \n" " Návratový kód:\n" " Vrátí kód naposledy provedeného příkazu." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4782,7 +5128,7 @@ msgstr "" " Návratový kód:\n" " Vrátí kód naposledy vykonaného příkazu." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4803,13 +5149,20 @@ msgid "" msgstr "" "Vybere slova ze seznamu a vykoná příkazy.\n" " \n" -" SLOVA jsou expandována a vytvoří seznam slov. Množina expandovaných slov\n" -" je vytištěna na standardní chybový výstup, každé předchází číslo. Není-li\n" -" „in SLOVA“ přítomno, předpokládá se „in \"$@\"“. Pak je zobrazena výzva PS3\n" -" a jeden řádek načten ze standardního vstupu. Pokud je řádek tvořen číslem\n" -" odpovídajícím jednomu ze zobrazených slov, pak NÁZEV bude nastaven na toto\n" -" slovo. Pokud je řádek prázdný, SLOVA a výzva budou znovu zobrazeny. Je-li\n" -" načten EOF (konec souboru), příkaz končí. Načtení jakékoliv jiné hodnoty\n" +" SLOVA jsou expandována a vytvoří seznam slov. Množina expandovaných " +"slov\n" +" je vytištěna na standardní chybový výstup, každé předchází číslo. Není-" +"li\n" +" „in SLOVA“ přítomno, předpokládá se „in \"$@\"“. Pak je zobrazena výzva " +"PS3\n" +" a jeden řádek načten ze standardního vstupu. Pokud je řádek tvořen " +"číslem\n" +" odpovídajícím jednomu ze zobrazených slov, pak NÁZEV bude nastaven na " +"toto\n" +" slovo. Pokud je řádek prázdný, SLOVA a výzva budou znovu zobrazeny. Je-" +"li\n" +" načten EOF (konec souboru), příkaz končí. Načtení jakékoliv jiné " +"hodnoty\n" " nastaví NÁZEV na prázdný řetězec. Načtený řádek bude uložen do proměnné\n" " REPLY. Po každém výběru budou provedeny PŘÍKAZY, dokud nebude vykonán\n" " příkaz „break“.\n" @@ -4817,7 +5170,7 @@ msgstr "" " Návratový kód:\n" " Vrátí kód naposledy prováděného příkazu." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4835,18 +5188,20 @@ msgstr "" "Nahlásí čas spotřebovaný prováděním kolony.\n" " \n" " Vykoná KOLONU a zobrazí přehled reálného času, uživatelského\n" -" procesorového času a systémového procesorového času stráveného prováděním\n" +" procesorového času a systémového procesorového času stráveného " +"prováděním\n" " KOLONY poté, co skončí.\n" " \n" " Přepínače:\n" " -p\tzobrazí přehled časů v přenositelném posixovém formátu\n" " \n" -" Hodnota proměnné TIMEFORMAT se použije jako specifikace výstupního formátu.\n" +" Hodnota proměnné TIMEFORMAT se použije jako specifikace výstupního " +"formátu.\n" " \n" " Návratový kód:\n" " Návratová hodnota je návratová hodnota KOLONY." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4864,16 +5219,21 @@ msgstr "" " Návratový kód:\n" " Vrátí kód naposledy provedeného příkazu." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4882,21 +5242,24 @@ msgstr "" "Vykoná příkazy na základě splnění podmínky.\n" " \n" " Provede seznam „if PŘÍKAZŮ“. Bude-li jeho návratový kód nula, pak bude\n" -" proveden seznam „then PŘÍKAZŮ“. Jinak bude proveden popořadě každý seznam\n" +" proveden seznam „then PŘÍKAZŮ“. Jinak bude proveden popořadě každý " +"seznam\n" " „elif PŘÍKAZŮ“ a bude-li jeho návratový kód nula, odpovídající seznam\n" " „then PŘÍKAZŮ“ bude proveden a příkaz if skončí. V opačném případě bude\n" " proveden seznam „else PŘÍKAZŮ“, pokud existuje. Návratová hodnota celé\n" -" konstrukce je návratovou hodnotou posledního provedeného příkazu nebo nula,\n" +" konstrukce je návratovou hodnotou posledního provedeného příkazu nebo " +"nula,\n" " pokud žádná z testovaných podmínek není pravdivá.\n" " \n" " Návratový kód:\n" " Vrátí kód naposledy provedeného příkazu." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4904,17 +5267,19 @@ msgid "" msgstr "" "Vykonává příkazy, dokud test úspěšně prochází.\n" " \n" -" Expanduje a provádí PŘÍKAZY-2 tak dlouho, dokud poslední příkaz v PŘÍKAZECH\n" +" Expanduje a provádí PŘÍKAZY-2 tak dlouho, dokud poslední příkaz " +"v PŘÍKAZECH\n" " má nulový návratový kód.\n" " \n" " Návratový kód:\n" " Vrátí kód naposledy provedeného příkazu." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4922,13 +5287,14 @@ msgid "" msgstr "" "Vykonává příkazy, dokud test končí neúspěšně.\n" " \n" -" Expanduje a provádí PŘÍKAZY-2 tak dlouho, dokud poslední příkaz v PŘÍKAZECH\n" +" Expanduje a provádí PŘÍKAZY-2 tak dlouho, dokud poslední příkaz " +"v PŘÍKAZECH\n" " má nenulový návratový kód.\n" " \n" " Návratový kód:\n" " Vrátí kód naposledy provedeného příkazu." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4943,18 +5309,20 @@ msgstr "" "Vytvoří koproces pojmenovaný NÁZEV.\n" " \n" " Vykoná PŘÍKAZ asynchronně, přičemž jeho standardní výstup a standardní\n" -" vstup budou napojeny rourou na souborové deskriptory uvedené v poli NÁZEV\n" +" vstup budou napojeny rourou na souborové deskriptory uvedené v poli " +"NÁZEV\n" " tohoto shellu pod indexem 0 a 1. Implicitní NÁZEV je „COPROC“.\n" " \n" " Návratový kód:\n" " Příkaz coproc vrací návratový kód 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4964,14 +5332,16 @@ msgstr "" "Definuje funkci shellu.\n" " \n" " Vytvoří shellovou funkci pojmenovanou NÁZEV. Volána jakožto jednoduchý\n" -" příkaz spustí PŘÍKAZY v kontextu volajícího shellu. Je-li vyvolán NÁZEV,\n" -" budou funkci předány argumenty jako $1…$n a název funkce bude umístěn do\n" +" příkaz spustí PŘÍKAZY v kontextu volajícího shellu. Je-li vyvolán " +"NÁZEV,\n" +" budou funkci předány argumenty jako $1…$n a název funkce bude umístěn " +"do\n" " $FUNCNAME.\n" " \n" " Návratový kód:\n" " Vrátí úspěch, pokud NÁZEV není jen pro čtení." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4988,7 +5358,7 @@ msgstr "" " Návratový kód:\n" " Vrátí kód naposledy spuštěného příkazu." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5004,14 +5374,16 @@ msgstr "" "Obnoví úlohu do popředí.\n" " \n" " Ekvivalent k argumentu ÚLOHA příkazu „fg“. Obnoví pozastavenou úlohu\n" -" nebo úlohu na pozadí. ÚLOHA může určovat buď název úlohy, nebo číslo úlohy.\n" -" Přidání „&“ za ÚLOHU přesune úlohu na pozadí, jako by identifikátor úlohy\n" +" nebo úlohu na pozadí. ÚLOHA může určovat buď název úlohy, nebo číslo " +"úlohy.\n" +" Přidání „&“ za ÚLOHU přesune úlohu na pozadí, jako by identifikátor " +"úlohy\n" " byl argumentem příkazu „bg“.\n" " \n" " Návratový kód:\n" " Vrátí kód obnovené úlohy." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5033,13 +5405,16 @@ msgstr "" # příkaz, který by byl vykonán na základě splnění jiné podmínky. Tj. překlad # „podmíněný příkaz“ je chybný. # Toto je nápověda k vestavěnému příkazu „[“. -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5067,20 +5442,22 @@ msgstr "" " ! VÝRAZ\t\tPravda, pokud VÝRAZ je nepravdivý; jinak nepravda\n" " VÝR1 && VÝR2\tPravda, pokud oba VÝR1 i VÝR2 jsou pravdivé;\n" " \t\tjinak nepravda\n" -" VÝR1 || VÝR2\tPravda, pokud VÝR1 nebo VÝR2 je pravdivý; jinak nepravda\n" +" VÝR1 || VÝR2\tPravda, pokud VÝR1 nebo VÝR2 je pravdivý; jinak " +"nepravda\n" " \n" " Jsou-li použity operátory „==“ a „!=“, řetězec napravo od operátoru je\n" " použit jako vzor a bude uplatněno porovnávání proti vzoru. Je-li použit\n" " operátor „=~, řetězec napravo do operátoru je uvažován jako regulární\n" " výraz.\n" " \n" -" Operátory && a || nevyhodnocují VÝR2, pokud VÝR1 je dostatečný na určení\n" +" Operátory && a || nevyhodnocují VÝR2, pokud VÝR1 je dostatečný na " +"určení\n" " hodnoty výrazu.\n" " \n" " Návratový kód:\n" " 0 nebo 1 podle hodnoty VÝRAZU." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5138,7 +5515,8 @@ msgstr "" " BASH_VERSION\tInformace o verzi tohoto Bashe.\n" " CDPATH\tDvojtečkou oddělený seznam adresářů, který se prohledává\n" " \t\tna adresáře zadané jako argumenty u „cd“.\n" -" GLOBIGNORE\tDvojtečkou oddělený seznam vzorů popisujících jména souborů,\n" +" GLOBIGNORE\tDvojtečkou oddělený seznam vzorů popisujících jména " +"souborů,\n" " \t\tkterá budou ignorována při expanzi cest.\n" " HISTFILE\tJméno souboru, kde je uložena historie vašich příkazů.\n" " HISTFILESIZE\tMaximální počet řádků, které tento soubor smí obsahovat.\n" @@ -5184,7 +5562,7 @@ msgstr "" " \t\trozlišení, které příkazy by měly být uloženy do seznamu\n" " \t\thistorie.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5241,7 +5619,7 @@ msgstr "" " Vrátí úspěch, pokud nebyl zadán neplatný argument a změna adresáře\n" " neselhala." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5291,7 +5669,7 @@ msgstr "" " Vrátí úspěch, pokud nebyl zadán neplatný argument nebo neselhala změna\n" " adresáře." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5322,7 +5700,8 @@ msgstr "" "Zobrazí zásobník adresářů.\n" " \n" " Zobrazí seznam právě pamatovaných adresářů. Adresáře si najdou cestu\n" -" na seznam příkazem „pushd“ a procházet seznamem zpět lze příkazem „popd“.\n" +" na seznam příkazem „pushd“ a procházet seznamem zpět lze příkazem " +"„popd“.\n" " \n" " Přepínače:\n" " -c vyprázdní zásobník adresářů tím, že smaže všechny jeho prvky\n" @@ -5341,7 +5720,7 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se chyba." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5378,7 +5757,8 @@ msgstr "" " Vrátí úspěch, je-li NÁZEV_VOLBY zapnut. Selže, byl-li zadán neplatný\n" " přepínač nebo je-li NÁZEV_VOLBY vypnut." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5386,29 +5766,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Naformátuje a vypíše ARGUMENTY podle definice FORMÁTU.\n" @@ -5417,10 +5804,13 @@ msgstr "" " -v proměnná výstup umístí do proměnné shellu PROMĚNNÁ namísto\n" " odeslání na standardní výstup.\n" " \n" -" FORMÁT je řetězec znaků, který obsahuje tři druhy objektů: obyčejné znaky,\n" -" které jsou prostě zkopírovány na standardní výstup, posloupnosti escapových\n" +" FORMÁT je řetězec znaků, který obsahuje tři druhy objektů: obyčejné " +"znaky,\n" +" které jsou prostě zkopírovány na standardní výstup, posloupnosti " +"escapových\n" " znaků, které jsou zkonvertovány a zkopírovány na standardní výstup a\n" -" formátovací definice, z nichž každá způsobí vytištění dalšího argumentu.\n" +" formátovací definice, z nichž každá způsobí vytištění dalšího " +"argumentu.\n" " \n" " Tento printf interpretuje vedle standardních formátovacích definic\n" " popsaných v printf(1) též:\n" @@ -5434,22 +5824,27 @@ msgstr "" " %(FORMÁT)T vypíše řetězec data-času tak, jako by to byl výstup\n" " funkce strftime(3) s formátovacím řetězcem FORMÁT\n" " \n" -" FORMÁT lze znovu použít podle potřeby ke zpracování všech argumentů. Je-li\n" +" FORMÁT lze znovu použít podle potřeby ke zpracování všech argumentů. Je-" +"li\n" " zde méně argumentů, než FORMÁT vyžaduje, nadbytečné formátovací znaky\n" -" se budou chovat, jako by nulová hodnota nebo nulový řetězec, jak je třeba,\n" +" se budou chovat, jako by nulová hodnota nebo nulový řetězec, jak je " +"třeba,\n" " byly zadány.\n" " \n" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nedošlo k chybě\n" " zápisu nebo přiřazení." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5463,8 +5858,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5483,23 +5880,32 @@ msgstr "" " které nemají žádné určité pravidlo doplňování definováno\n" " -E použije pravidla doplňování a akce na „prázdné“ příkazy –\n" " pravidla doplňování se uplatní na prázdný řádek\n" -" -I použije pravidla doplňování a akce na první slovo (obvykle příkaz)\n" +" -I použije pravidla doplňování a akce na první slovo (obvykle " +"příkaz)\n" " \n" -" Použije-li se doplňování, akce se uplatní v pořadí, v jakém jsou vypsány\n" +" Použije-li se doplňování, akce se uplatní v pořadí, v jakém jsou " +"vypsány\n" " přepínače psané velkými písmeny výše. Je-li zadáno více přepínačů,\n" -" přepínač -D bude upřednostněn před přepínačem -E. Oba přepínače přebíjejí\n" +" přepínač -D bude upřednostněn před přepínačem -E. Oba přepínače " +"přebíjejí\n" " přepínač -I.\n" " \n" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se chyba." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5513,13 +5919,16 @@ msgstr "" " Návratový kód:\n" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se chyba." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5559,29 +5968,37 @@ msgstr "" " Argumenty:\n" " Každý NÁZEV odkazuje na příkaz, pro který musí být předem definováno\n" " pravidlo (definice) doplňování pomocí vestavěného příkazu „complete“.\n" -" Nejsou-li zadány žádné NÁZVY, musí být compopt volán funkcí, která právě\n" -" generuje doplňování. Změněny pak budou možnosti tohoto právě prováděného\n" +" Nejsou-li zadány žádné NÁZVY, musí být compopt volán funkcí, která " +"právě\n" +" generuje doplňování. Změněny pak budou možnosti tohoto právě " +"prováděného\n" " generátoru doplňování.\n" " \n" " Návratový kód:\n" -" Vrátí úspěch, pokud nebyl zadán neplatný přepínač a NÁZEV měl definováno\n" +" Vrátí úspěch, pokud nebyl zadán neplatný přepínač a NÁZEV měl " +"definováno\n" " pravidlo doplňování." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5594,16 +6011,19 @@ 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 "" "Načte řádky ze standardního vstupu do proměnné typu indexované pole.\n" " \n" -" Načte řádky ze standardního vstupu nebo z deskriptoru souboru FD, byl-li\n" +" Načte řádky ze standardního vstupu nebo z deskriptoru souboru FD, byl-" +"li\n" " zadán přepínač -u, do proměnné POLE, která je typu indexované pole.\n" " Implicitním POLEM je proměnná MAPFILE.\n" " \n" @@ -5637,7 +6057,7 @@ msgstr "" " Vrátí úspěch, pokud nebyl zadán neplatný přepínač, POLE nebylo jen pro\n" " čtení a bylo indexovaným polem." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5647,6 +6067,32 @@ msgstr "" " \n" " Synonymum pro „mapfile“." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Vrátí kontext volání aktuálního podprogramu.\n" +#~ " \n" +#~ " Bez VÝRAZU vrátí „$řádek $název_souboru“. S VÝRAZEM vrátí\n" +#~ " „$řádek $podprogram $název_souboru“; tuto dodatečnou informaci lze\n" +#~ " využít pro výpis zásobníku volání.\n" +#~ " \n" +#~ " Hodnota VÝRAZU určuje, kolik rámců volání se má zpětně projít od " +#~ "toho\n" +#~ " současného; vrcholový rámec má číslo 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "varování: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: neplatný klíč asociativního pole" @@ -5686,8 +6132,12 @@ msgstr "" #~ msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n" #~ msgstr "Copyright © 2009 Free Software Foundation, Inc.\n" -#~ msgid "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>\n" -#~ msgstr "Licence GPLv2+: GNU GPL verze 2 nebo novější <http://gnu.org/licenses/gpl.html>\n" +#~ msgid "" +#~ "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl." +#~ "html>\n" +#~ msgstr "" +#~ "Licence GPLv2+: GNU GPL verze 2 nebo novější <http://gnu.org/licenses/gpl." +#~ "html>\n" #~ msgid "" #~ ". With EXPR, returns\n" @@ -5700,7 +6150,8 @@ 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 "" #~ "; tato dodatečná informace může být\n" @@ -5716,7 +6167,8 @@ msgstr "" #~ msgstr "xrealloc: nelze alokovat %'lu bajtů" #~ msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)" -#~ msgstr "xrealloc: %s:%d: nelze přealokovat %'lu bajtů (%'lu bajtů alokováno)" +#~ msgstr "" +#~ "xrealloc: %s:%d: nelze přealokovat %'lu bajtů (%'lu bajtů alokováno)" #~ msgid " " #~ msgstr " " @@ -5730,7 +6182,8 @@ msgstr "" #~ msgid "can be used used to provide a stack trace." #~ msgstr "lze využít při výpisu zásobníku volání." -#~ msgid "The value of EXPR indicates how many call frames to go back before the" +#~ msgid "" +#~ "The value of EXPR indicates how many call frames to go back before the" #~ msgstr "Hodnota VÝRAZ značí, kolik rámců volání se má jít zpět před" #~ msgid "current one; the top frame is frame 0." @@ -5751,38 +6204,46 @@ msgstr "" #~ msgid "back up through the list with the `popd' command." #~ msgstr "vrátit příkazem „popd“." -#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions" +#~ msgid "" +#~ "The -l flag specifies that `dirs' should not print shorthand versions" #~ msgstr "Příznak -l značí, že „dirs“ nemá vypisovat zkrácené verze adresářů," -#~ msgid "of directories which are relative to your home directory. This means" +#~ msgid "" +#~ "of directories which are relative to your home directory. This means" #~ msgstr "které leží pod vaším domovským adresářem. To znamená, že „~/bin“" #~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" #~ msgstr "smí být zobrazen jako „/homes/bfox/bin“. Příznak -v způsobí, že" #~ msgid "causes `dirs' to print the directory stack with one entry per line," -#~ msgstr "„dirs“ vypíše zásobník adresářů záznam po záznamu na samostatné řádky" +#~ msgstr "" +#~ "„dirs“ vypíše zásobník adresářů záznam po záznamu na samostatné řádky" -#~ msgid "prepending the directory name with its position in the stack. The -p" +#~ msgid "" +#~ "prepending the directory name with its position in the stack. The -p" #~ msgstr "a před název adresáře uvede jeho pořadí v zásobníku. Příznak -p" #~ msgid "flag does the same thing, but the stack position is not prepended." #~ msgstr "dělá to samé, ale bez informace o umístění na zásobníku." -#~ msgid "The -c flag clears the directory stack by deleting all of the elements." +#~ msgid "" +#~ "The -c flag clears the directory stack by deleting all of the elements." #~ msgstr "Příznak -c vyprázdní zásobník smazáním všem prvků." -#~ msgid "+N displays the Nth entry counting from the left of the list shown by" +#~ msgid "" +#~ "+N displays the Nth entry counting from the left of the list shown by" #~ msgstr "+N zobrazí N. položku počítáno zleva na seznamu, který by ukázal" #~ msgid " dirs when invoked without options, starting with zero." #~ msgstr " příkaz dirs bez jakýchkoliv přepínačů, počítáno od nuly." -#~ msgid "-N displays the Nth entry counting from the right of the list shown by" +#~ msgid "" +#~ "-N displays the Nth entry counting from the right of the list shown by" #~ msgstr "-N zobrazí N. položku počítáno zprava na seznamu, který by ukázal" #~ msgid "Adds a directory to the top of the directory stack, or rotates" -#~ msgstr "Přidá adresář na vrchol zásobníku adresářů, nebo rotuje zásobník tak," +#~ msgstr "" +#~ "Přidá adresář na vrchol zásobníku adresářů, nebo rotuje zásobník tak," #~ msgid "the stack, making the new top of the stack the current working" #~ msgstr "že nový vrchol zásobníku se stane pracovním adresářem." @@ -5806,7 +6267,8 @@ msgstr "" #~ msgstr " zprava seznamu, který by ukázal „dirs“, počínaje od" #~ msgid "-n suppress the normal change of directory when adding directories" -#~ msgstr "-n potlačí obvyklou změnu pracovního adresáře při přidávání adresářů" +#~ msgstr "" +#~ "-n potlačí obvyklou změnu pracovního adresáře při přidávání adresářů" #~ msgid " to the stack, so only the stack is manipulated." #~ msgstr " na zásobník, takže se změní jen obsah zásobníku." @@ -5844,8 +6306,10 @@ msgstr "" #~ msgid " removes the last directory, `popd -1' the next to last." #~ msgstr " odstraní poslední adresář, “popd -1“ předposlední." -#~ msgid "-n suppress the normal change of directory when removing directories" -#~ msgstr "-n potlačí obvyklou změnu pracovního adresáře při odebírání adresářů" +#~ msgid "" +#~ "-n suppress the normal change of directory when removing directories" +#~ msgstr "" +#~ "-n potlačí obvyklou změnu pracovního adresáře při odebírání adresářů" #~ msgid " from the stack, so only the stack is manipulated." #~ msgstr " ze zásobníku, takže pouze zásobník dozná změny." @@ -5871,7 +6335,8 @@ msgstr "" #~ msgid "" #~ "Exit from within a FOR, WHILE or UNTIL loop. If N is specified,\n" #~ " break N levels." -#~ msgstr "Ukončí smyčku FOR, WHILE nebo UNTIL. Je-li zadáno N, ukončí N úrovní." +#~ msgstr "" +#~ "Ukončí smyčku FOR, WHILE nebo UNTIL. Je-li zadáno N, ukončí N úrovní." #~ msgid "" #~ "Run a shell builtin. This is useful when you wish to rename a\n" @@ -5897,16 +6362,22 @@ msgstr "" #~ msgid "" #~ "Runs COMMAND with ARGS ignoring shell functions. If you have a shell\n" #~ " function called `ls', and you wish to call the command `ls', you can\n" -#~ " say \"command ls\". If the -p option is given, a default value is used\n" -#~ " for PATH that is guaranteed to find all of the standard utilities. If\n" -#~ " the -V or -v option is given, a string is printed describing COMMAND.\n" +#~ " say \"command ls\". If the -p option is given, a default value is " +#~ "used\n" +#~ " for PATH that is guaranteed to find all of the standard utilities. " +#~ "If\n" +#~ " the -V or -v option is given, a string is printed describing " +#~ "COMMAND.\n" #~ " The -V option produces a more verbose description." #~ msgstr "" #~ "Spustí PŘÍKAZ s ARGUMENTY ignoruje funkce shellu. Máte-li shellovou\n" #~ " funkci pojmenovanou „ls“, a chcete-li zavolat příkaz „ls“, použijte\n" -#~ " „command ls“. Je-li zadán přepínač -p, bude pro PATH použita implicitní\n" -#~ " hodnota, která zaručuje, že budou nalezeny všechny standardní nástroje.\n" -#~ " Je-li zadán přepínač -V nebo -v, bude vytištěn řetězec popisující PŘÍKAZ.\n" +#~ " „command ls“. Je-li zadán přepínač -p, bude pro PATH použita " +#~ "implicitní\n" +#~ " hodnota, která zaručuje, že budou nalezeny všechny standardní " +#~ "nástroje.\n" +#~ " Je-li zadán přepínač -V nebo -v, bude vytištěn řetězec popisující " +#~ "PŘÍKAZ.\n" #~ " Přepínač -V produkuje podrobnější popis." #~ msgid "" @@ -5918,7 +6389,8 @@ msgstr "" #~ " \n" #~ " -a\tto make NAMEs arrays (if supported)\n" #~ " -f\tto select from among function names only\n" -#~ " -F\tto display function names (and line number and source file name if\n" +#~ " -F\tto display function names (and line number and source file name " +#~ "if\n" #~ " \tdebugging) without definitions\n" #~ " -i\tto make NAMEs have the `integer' attribute\n" #~ " -r\tto make NAMEs readonly\n" @@ -5932,28 +6404,33 @@ msgstr "" #~ " and definition. The -F option restricts the display to function\n" #~ " name only.\n" #~ " \n" -#~ " Using `+' instead of `-' turns off the given attribute instead. When\n" +#~ " Using `+' instead of `-' turns off the given attribute instead. " +#~ "When\n" #~ " used in a function, makes NAMEs local, as with the `local' command." #~ msgstr "" #~ "Deklaruje proměnné a/nebo jim nastaví atributy. Nejsou-li zadány NÁZVY,\n" -#~ " tak místo toho zobrazí hodnoty proměnných. Přepínač -p zobrazí atributy\n" +#~ " tak místo toho zobrazí hodnoty proměnných. Přepínač -p zobrazí " +#~ "atributy\n" #~ " a hodnoty pro každý NÁZEV.\n" #~ " \n" #~ " Příznaky jsou:\n" #~ " \n" #~ " -a\tučiní NÁZVY poli (je-li podporováno)\n" #~ " -f\tvybírá pouze mezi názvy funkcí\n" -#~ " -F\tzobrazí názvy funkcí (a číslo řádku a název zdrojového souboru,\n" +#~ " -F\tzobrazí názvy funkcí (a číslo řádku a název zdrojového " +#~ "souboru,\n" #~ " \tje-li zapnuto ladění) bez definic\n" #~ " -i\tpřiřadí NÁZVŮM atribut „integer“ (číslo)\n" #~ " -r\tučiní NÁZVY jen pro čtení\n" #~ " -t\tpřiřadí NÁZVŮM atribut „trace“ (sledování)\n" #~ " -x\tvyexportuje NÁZVY\n" #~ " \n" -#~ " Proměnné s atributem integer jsou aritmeticky vyhodnoceny (vizte „let“),\n" +#~ " Proměnné s atributem integer jsou aritmeticky vyhodnoceny (vizte " +#~ "„let“),\n" #~ " když je do proměnné přiřazováno.\n" #~ " \n" -#~ " Při zobrazování hodnot proměnných -f zobrazí názvy a definice funkcí.\n" +#~ " Při zobrazování hodnot proměnných -f zobrazí názvy a definice " +#~ "funkcí.\n" #~ " Přepínač -F omezí výpis jen na názvy funkcí.\n" #~ " \n" #~ " Pomocí „+“ namísto „-“ daný atribut odeberete. Je-li použito uvnitř\n" @@ -5968,11 +6445,14 @@ msgstr "" #~ " have a visible scope restricted to that function and its children." #~ msgstr "" #~ "Vytvoří lokální proměnnou pojmenovanou NÁZEV a přiřadí jí HODNOTU.\n" -#~ " LOCAL smí být použito jen uvnitř funkcí. Učiní proměnnou NÁZEV viditelnou\n" +#~ " LOCAL smí být použito jen uvnitř funkcí. Učiní proměnnou NÁZEV " +#~ "viditelnou\n" #~ " jen v dané funkci a jejích potomcích." -#~ msgid "Output the ARGs. If -n is specified, the trailing newline is suppressed." -#~ msgstr "Vypíše ARGUMENTY. Je-li zadáni -n, závěrečný konec řádku bude potlačen." +#~ msgid "" +#~ "Output the ARGs. If -n is specified, the trailing newline is suppressed." +#~ msgstr "" +#~ "Vypíše ARGUMENTY. Je-li zadáni -n, závěrečný konec řádku bude potlačen." #~ msgid "" #~ "Enable and disable builtin shell commands. This allows\n" @@ -5986,24 +6466,36 @@ msgstr "" #~ " previously loaded with -f. If no non-option names are given, or\n" #~ " the -p option is supplied, a list of builtins is printed. The\n" #~ " -a option means to print every builtin with an indication of whether\n" -#~ " or not it is enabled. The -s option restricts the output to the POSIX.2\n" -#~ " `special' builtins. The -n option displays a list of all disabled builtins." +#~ " or not it is enabled. The -s option restricts the output to the " +#~ "POSIX.2\n" +#~ " `special' builtins. The -n option displays a list of all disabled " +#~ "builtins." #~ msgstr "" #~ "Povolí nebo zakáže vestavěný příkaz shellu. To vám umožňuje použít\n" -#~ " příkaz z disku, který má stejné jméno jako vestavěný příkaz shellu, aniž\n" +#~ " příkaz z disku, který má stejné jméno jako vestavěný příkaz shellu, " +#~ "aniž\n" #~ " byste museli zadávat celou cestu. Je-li použito -n, NÁZVY se stanou\n" -#~ " zakázanými, jinak budou povoleny. Například „test“ z PATH namísto verze\n" -#~ " vestavěné do shellu lze používat tak, že napíšete „enable -n test“. Na\n" -#~ " systémech podporujících dynamické zavádění přepínač -f může být použit\n" -#~ " pro zavedení nových vestavěných příkazů ze sdíleného objektu NÁZEV_SOUBORU.\n" -#~ " Přepínač -d odstraní vestavěný příkaz zavedený přes -f. Není-li zadán\n" -#~ " žádný přepínač nebo je-li zadán přepínač -p, bude vypsán seznam vestavěných\n" -#~ " příkazů. Přepínač -a znamená, že budou vypsány všechny vestavěné příkazy a\n" -#~ " u každého bude vyznačeno, zda je povolen nebo zakázán. Přepínač -s omezí\n" +#~ " zakázanými, jinak budou povoleny. Například „test“ z PATH namísto " +#~ "verze\n" +#~ " vestavěné do shellu lze používat tak, že napíšete „enable -n test“. " +#~ "Na\n" +#~ " systémech podporujících dynamické zavádění přepínač -f může být " +#~ "použit\n" +#~ " pro zavedení nových vestavěných příkazů ze sdíleného objektu " +#~ "NÁZEV_SOUBORU.\n" +#~ " Přepínač -d odstraní vestavěný příkaz zavedený přes -f. Není-li " +#~ "zadán\n" +#~ " žádný přepínač nebo je-li zadán přepínač -p, bude vypsán seznam " +#~ "vestavěných\n" +#~ " příkazů. Přepínač -a znamená, že budou vypsány všechny vestavěné " +#~ "příkazy a\n" +#~ " u každého bude vyznačeno, zda je povolen nebo zakázán. Přepínač -s " +#~ "omezí\n" #~ " výpis na příkazy uvedené v POSIX.2. Přepínač -n zobrazí seznam všech\n" #~ " zakázaných vestavěných příkazů." -#~ msgid "Read ARGs as input to the shell and execute the resulting command(s)." +#~ msgid "" +#~ "Read ARGs as input to the shell and execute the resulting command(s)." #~ msgstr "Načte ARGUMENTY jako vstup shellu a výsledný příkaz(y) provede." #~ msgid "" @@ -6017,11 +6509,14 @@ msgstr "" #~ " then the shell exits, unless the shell option `execfail' is set." #~ msgstr "" #~ "Provede SOUBOR, přičemž nahradí tento shell zadaným programem.\n" -#~ " Není-li SOUBOR zadán, přesměrování zapůsobí v tomto shellu. Je-li prvním\n" -#~ " argumentem „-l“, bude do nultého argumentu SOUBORU umístěna pomlčka tak,\n" +#~ " Není-li SOUBOR zadán, přesměrování zapůsobí v tomto shellu. Je-li " +#~ "prvním\n" +#~ " argumentem „-l“, bude do nultého argumentu SOUBORU umístěna pomlčka " +#~ "tak,\n" #~ " jak to dělá login. Je-li zadán přepínač „-c“, bude SOUBOR spuštěn\n" #~ " s prázdným prostředím. Přepínač „-a“ znamená, že argv[0] prováděného\n" -#~ " procesu bude nastaven na NÁZEV. Pokud soubor nemůže být proveden a shell\n" +#~ " procesu bude nastaven na NÁZEV. Pokud soubor nemůže být proveden a " +#~ "shell\n" #~ " není interaktivní, pak shell bude ukončen, pokud přepínač shellu\n" #~ " „execfail“ není nastaven." @@ -6033,20 +6528,31 @@ msgstr "" #~ " remembered. If the -p option is supplied, PATHNAME is used as the\n" #~ " full pathname of NAME, and no path search is performed. The -r\n" #~ " option causes the shell to forget all remembered locations. The -d\n" -#~ " option causes the shell to forget the remembered location of each NAME.\n" +#~ " option causes the shell to forget the remembered location of each " +#~ "NAME.\n" #~ " If the -t option is supplied the full pathname to which each NAME\n" -#~ " corresponds is printed. If multiple NAME arguments are supplied with\n" -#~ " -t, the NAME is printed before the hashed full pathname. The -l option\n" -#~ " causes output to be displayed in a format that may be reused as input.\n" -#~ " If no arguments are given, information about remembered commands is displayed." +#~ " corresponds is printed. If multiple NAME arguments are supplied " +#~ "with\n" +#~ " -t, the NAME is printed before the hashed full pathname. The -l " +#~ "option\n" +#~ " causes output to be displayed in a format that may be reused as " +#~ "input.\n" +#~ " If no arguments are given, information about remembered commands is " +#~ "displayed." #~ msgstr "" #~ "Pro každý NÁZEV je určena plná cesta k příkazu a je zapamatována.\n" -#~ " Za použití přepínače -p se vezme NÁZEV_CESTY za plnou cestu k NÁZVU a\n" -#~ " žádné vyhledávání cesty se nekoná. Přepínač -r způsobí, že shell zapomene\n" -#~ " všechny zapamatovaná umístění. Přepínač -d způsobí, že shell zapomene\n" -#~ " zapamatovaná umístění každého NÁZVU. Je-li zadán přepínač -t, bude vypsána\n" -#~ " plná cesta ke každému NÁZVU. Je-li s -t zadáno více NÁZVŮ, NÁZEV bude\n" -#~ " vypsán před uloženou celou cestou. Přepínač -l vytvoří takový výstup,\n" +#~ " Za použití přepínače -p se vezme NÁZEV_CESTY za plnou cestu k NÁZVU " +#~ "a\n" +#~ " žádné vyhledávání cesty se nekoná. Přepínač -r způsobí, že shell " +#~ "zapomene\n" +#~ " všechny zapamatovaná umístění. Přepínač -d způsobí, že shell " +#~ "zapomene\n" +#~ " zapamatovaná umístění každého NÁZVU. Je-li zadán přepínač -t, bude " +#~ "vypsána\n" +#~ " plná cesta ke každému NÁZVU. Je-li s -t zadáno více NÁZVŮ, NÁZEV " +#~ "bude\n" +#~ " vypsán před uloženou celou cestou. Přepínač -l vytvoří takový " +#~ "výstup,\n" #~ " který lze opět použít jako vstup. Nejsou-li zadány žádné argumenty,\n" #~ " budou vypsány informace o zapamatovaných příkazech." @@ -6058,20 +6564,27 @@ msgstr "" #~ " a short usage synopsis." #~ msgstr "" #~ "Zobrazí užitečné informace o vestavěných příkazech. Je-li zadán VZOREK,\n" -#~ " vrátí podrobnou nápovědu ke všem příkazům odpovídajícím VZORKU, jinak je\n" -#~ " vytištěn seznam vestavěných příkazů. Přepínač -s omezí výstup o každém\n" +#~ " vrátí podrobnou nápovědu ke všem příkazům odpovídajícím VZORKU, jinak " +#~ "je\n" +#~ " vytištěn seznam vestavěných příkazů. Přepínač -s omezí výstup " +#~ "o každém\n" #~ " vestavěném příkazu odpovídajícího VZORKU na stručný popis použití." #~ msgid "" #~ "By default, removes each JOBSPEC argument from the table of active jobs.\n" -#~ " If the -h option is given, the job is not removed from the table, but is\n" +#~ " If the -h option is given, the job is not removed from the table, but " +#~ "is\n" #~ " marked so that SIGHUP is not sent to the job if the shell receives a\n" -#~ " SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all\n" -#~ " jobs from the job table; the -r option means to remove only running jobs." +#~ " SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove " +#~ "all\n" +#~ " jobs from the job table; the -r option means to remove only running " +#~ "jobs." #~ msgstr "" #~ "Implicitně odstraní každý argument ÚLOHA z tabulky aktivních úloh. Je-li\n" -#~ " zadán přepínač -h, úloha není odstraněna z tabulky, ale je označena tak.\n" -#~ " že úloze nebude zaslán SIGHUP, když shell obdrží SIGHUP. Přepínač -a,\n" +#~ " zadán přepínač -h, úloha není odstraněna z tabulky, ale je označena " +#~ "tak.\n" +#~ " že úloze nebude zaslán SIGHUP, když shell obdrží SIGHUP. Přepínač -" +#~ "a,\n" #~ " pokud není uvedena ÚLOHA, znamená, že všechny úlohy budou odstraněny\n" #~ " z tabulky úloh. Přepínač -r znamená, že pouze běžící úlohy budou\n" #~ " odstraněny." @@ -6091,9 +6604,12 @@ msgstr "" #~ " function. Some variables cannot be unset; also see readonly." #~ msgstr "" #~ "Pro každé JMÉNO odstraní odpovídající proměnnou nebo funkci.\n" -#~ " Spolu s „-v“ bude unset fungovat jen na proměnné. S příznakem „-f“ bude\n" -#~ " unset fungovat jen na funkce. Bez těchto dvou příznaků unset nejprve zkusí\n" -#~ " zrušit proměnnou a pokud toto selže, tak zkusí zrušit funkci. Některé\n" +#~ " Spolu s „-v“ bude unset fungovat jen na proměnné. S příznakem „-f“ " +#~ "bude\n" +#~ " unset fungovat jen na funkce. Bez těchto dvou příznaků unset nejprve " +#~ "zkusí\n" +#~ " zrušit proměnnou a pokud toto selže, tak zkusí zrušit funkci. " +#~ "Některé\n" #~ " proměnné nelze odstranit. Taktéž vizte příkaz „readonly“." #~ msgid "" @@ -6106,9 +6622,12 @@ msgstr "" #~ " processing." #~ msgstr "" #~ "NÁZVY jsou označeny pro automatické exportování do prostředí následně\n" -#~ " prováděných příkazů. Je-li zadán přepínač -f, NÁZVY se vztahují k funkcím.\n" -#~ " Nejsou-li zadány žádné NÁZVY nebo je-li zadáno „-p“, bude vytištěn seznam\n" -#~ " všech názvů, které jsou v tomto shellu exportovány. Argument „-n“ nařizuje\n" +#~ " prováděných příkazů. Je-li zadán přepínač -f, NÁZVY se vztahují " +#~ "k funkcím.\n" +#~ " Nejsou-li zadány žádné NÁZVY nebo je-li zadáno „-p“, bude vytištěn " +#~ "seznam\n" +#~ " všech názvů, které jsou v tomto shellu exportovány. Argument „-n“ " +#~ "nařizuje\n" #~ " odstranit vlastnost exportovat z následujících NÁZVŮ. Argument „--“\n" #~ " zakazuje zpracování dalších přepínačů." @@ -6116,16 +6635,21 @@ msgstr "" #~ "The given NAMEs are marked readonly and the values of these NAMEs may\n" #~ " not be changed by subsequent assignment. If the -f option is given,\n" #~ " then functions corresponding to the NAMEs are so marked. If no\n" -#~ " arguments are given, or if `-p' is given, a list of all readonly names\n" +#~ " arguments are given, or if `-p' is given, a list of all readonly " +#~ "names\n" #~ " is printed. The `-a' option means to treat each NAME as\n" #~ " an array variable. An argument of `--' disables further option\n" #~ " processing." #~ msgstr "" #~ "Zadané NÁZVY budou označeny jako jen pro čtení a hodnoty těchto NÁZVŮ\n" -#~ " nebude možné změnit následným přiřazením. Je-li zadán přepínač -f, pak\n" -#~ " funkce těchto NÁZVŮ budou takto označeny. Nejsou-li zadány žádné argumenty\n" -#~ " nebo je-li zadáno „-p“, bude vytištěn seznam všech jmen jen pro čtení.\n" -#~ " Přepínač „-a“ znamená, že s každým NÁZVEM bude zacházeno jako s proměnnou\n" +#~ " nebude možné změnit následným přiřazením. Je-li zadán přepínač -f, " +#~ "pak\n" +#~ " funkce těchto NÁZVŮ budou takto označeny. Nejsou-li zadány žádné " +#~ "argumenty\n" +#~ " nebo je-li zadáno „-p“, bude vytištěn seznam všech jmen jen pro " +#~ "čtení.\n" +#~ " Přepínač „-a“ znamená, že s každým NÁZVEM bude zacházeno jako " +#~ "s proměnnou\n" #~ " typu pole. Argument „--“ zakáže zpracování dalších přepínačů." #~ msgid "" @@ -6155,61 +6679,79 @@ msgstr "" #~ "For each NAME, indicate how it would be interpreted if used as a\n" #~ " command name.\n" #~ " \n" -#~ " If the -t option is used, `type' outputs a single word which is one of\n" -#~ " `alias', `keyword', `function', `builtin', `file' or `', if NAME is an\n" -#~ " alias, shell reserved word, shell function, shell builtin, disk file,\n" +#~ " If the -t option is used, `type' outputs a single word which is one " +#~ "of\n" +#~ " `alias', `keyword', `function', `builtin', `file' or `', if NAME is " +#~ "an\n" +#~ " alias, shell reserved word, shell function, shell builtin, disk " +#~ "file,\n" #~ " or unfound, respectively.\n" #~ " \n" #~ " If the -p flag is used, `type' either returns the name of the disk\n" #~ " file that would be executed, or nothing if `type -t NAME' would not\n" #~ " return `file'.\n" #~ " \n" -#~ " If the -a flag is used, `type' displays all of the places that contain\n" +#~ " If the -a flag is used, `type' displays all of the places that " +#~ "contain\n" #~ " an executable named `file'. This includes aliases, builtins, and\n" #~ " functions, if and only if the -p flag is not also used.\n" #~ " \n" #~ " The -f flag suppresses shell function lookup.\n" #~ " \n" -#~ " The -P flag forces a PATH search for each NAME, even if it is an alias,\n" -#~ " builtin, or function, and returns the name of the disk file that would\n" +#~ " The -P flag forces a PATH search for each NAME, even if it is an " +#~ "alias,\n" +#~ " builtin, or function, and returns the name of the disk file that " +#~ "would\n" #~ " be executed." #~ msgstr "" #~ "O každém NÁZVU řekne, jak by byl interpretován, kdyby byl použit jako\n" #~ " název příkazu.\n" #~ " \n" -#~ " Je-li použit přepínač -t, „type“ vypíše jedno slovo z těchto: „alias“,\n" +#~ " Je-li použit přepínač -t, „type“ vypíše jedno slovo z těchto: " +#~ "„alias“,\n" #~ " „keyword“, „function“, „builtin“, „file“ nebo „“, je-li NÁZEV alias,\n" -#~ " klíčové slovo shellu, shellová funkce, vestavěný příkaz shellu, soubor\n" +#~ " klíčové slovo shellu, shellová funkce, vestavěný příkaz shellu, " +#~ "soubor\n" #~ " na disku nebo nenalezený soubor.\n" #~ " \n" -#~ " Je-li použit přepínač -p, „type“ buď vrátí jméno souboru na disku, který\n" +#~ " Je-li použit přepínač -p, „type“ buď vrátí jméno souboru na disku, " +#~ "který\n" #~ " by byl spuštěn, nebo nic, pokud „type -t NÁZEV“ by nevrátil „file“.\n" #~ " \n" -#~ " Je-li použit přepínač -a, „type“ zobrazí všechna místa, kde se nalézá\n" -#~ " spustitelný program pojmenovaný „soubor“. To zahrnuje aliasy, vestavěné\n" -#~ " příkazy a funkce jen a pouze tehdy, když není rovněž použit přepínač -p.\n" +#~ " Je-li použit přepínač -a, „type“ zobrazí všechna místa, kde se " +#~ "nalézá\n" +#~ " spustitelný program pojmenovaný „soubor“. To zahrnuje aliasy, " +#~ "vestavěné\n" +#~ " příkazy a funkce jen a pouze tehdy, když není rovněž použit přepínač -" +#~ "p.\n" #~ " \n" #~ " Přepínač -f potlačí hledání mezi funkcemi shellu.\n" #~ " \n" #~ " Přepínač -P vynutí prohledání PATH na každý NÁZEV, dokonce i když se\n" -#~ " jedná o alias, vestavěný příkaz nebo funkci, a vrátí název souboru na\n" +#~ " jedná o alias, vestavěný příkaz nebo funkci, a vrátí název souboru " +#~ "na\n" #~ " disku, který by byl spuštěn." #~ msgid "" #~ "The user file-creation mask is set to MODE. If MODE is omitted, or if\n" -#~ " `-S' is supplied, the current value of the mask is printed. The `-S'\n" -#~ " option makes the output symbolic; otherwise an octal number is output.\n" +#~ " `-S' is supplied, the current value of the mask is printed. The `-" +#~ "S'\n" +#~ " option makes the output symbolic; otherwise an octal number is " +#~ "output.\n" #~ " If `-p' is supplied, and MODE is omitted, the output is in a form\n" #~ " that may be used as input. If MODE begins with a digit, it is\n" -#~ " interpreted as an octal number, otherwise it is a symbolic mode string\n" +#~ " interpreted as an octal number, otherwise it is a symbolic mode " +#~ "string\n" #~ " like that accepted by chmod(1)." #~ msgstr "" #~ "Uživatelská maska práv vytvářených souborů je nastavena na MÓD. Je-li\n" -#~ " MÓD vynechán nebo je-li uvedeno „-S“, bude vytištěna současná hodnota\n" +#~ " MÓD vynechán nebo je-li uvedeno „-S“, bude vytištěna současná " +#~ "hodnota\n" #~ " masky. Přepínač „-S“ učiní výstup symbolický, jinak bude výstupem\n" #~ " osmičkové číslo. Je-li zadáno „-p“ a MÓD je vynechán, bude výstup ve\n" #~ " formátu, který lze použít jako vstup. Začíná-li MÓD číslicí, bude\n" -#~ " interpretován jako osmičkové číslo, jinak jako řetězec symbolického zápisu\n" +#~ " interpretován jako osmičkové číslo, jinak jako řetězec symbolického " +#~ "zápisu\n" #~ " práv tak, jak jej chápe chmod(1)." #~ msgid "" @@ -6219,7 +6761,8 @@ msgstr "" #~ " all child processes of the shell are waited for." #~ msgstr "" #~ "Počká na zadaný proces a nahlásí jeho návratový kód. Není-li N zadáno,\n" -#~ " bude se čekat na všechny právě aktivní procesy potomků a návratová hodnota\n" +#~ " bude se čekat na všechny právě aktivní procesy potomků a návratová " +#~ "hodnota\n" #~ " bude nula. N je ID procesu. Není-li zadáno, bude se čekat na všechny\n" #~ " procesy potomků tohoto shellu." @@ -6242,22 +6785,30 @@ msgstr "" #~ " not each is set." #~ msgstr "" #~ "Přepne hodnoty proměnných řídící volitelné chování. Přepínač -s znamená,\n" -#~ " že se každý NÁZEV_VOLBY zapne (nastaví). Přepínač -u každý NÁZEV_VOLBY\n" +#~ " že se každý NÁZEV_VOLBY zapne (nastaví). Přepínač -u každý " +#~ "NÁZEV_VOLBY\n" #~ " vypne. Přepínač -q potlačí výstup. Zda je nebo není nastaven každý\n" -#~ " NÁZEV_VOLBY, indikuje návratový kód. Přepínač -o omezí NÁZVY_VOLEB na ty,\n" +#~ " NÁZEV_VOLBY, indikuje návratový kód. Přepínač -o omezí NÁZVY_VOLEB na " +#~ "ty,\n" #~ " které jsou definovány pro použití s „set -o“. Bez přepínačů nebo\n" #~ " s přepínačem -p je zobrazen seznam všech nastavitelných voleb včetně\n" #~ " indikace, zda je každá nastavena." #~ msgid "" #~ "For each NAME, specify how arguments are to be completed.\n" -#~ " If the -p option is supplied, or if no options are supplied, existing\n" -#~ " completion specifications are printed in a way that allows them to be\n" -#~ " reused as input. The -r option removes a completion specification for\n" -#~ " each NAME, or, if no NAMEs are supplied, all completion specifications." +#~ " If the -p option is supplied, or if no options are supplied, " +#~ "existing\n" +#~ " completion specifications are printed in a way that allows them to " +#~ "be\n" +#~ " reused as input. The -r option removes a completion specification " +#~ "for\n" +#~ " each NAME, or, if no NAMEs are supplied, all completion " +#~ "specifications." #~ msgstr "" #~ "U každého NÁZVU sdělí, jak budou argumenty doplněny. Je-li zadán\n" -#~ " přepínač -p nebo není-li zadán přepínač žádný, budou existující definice\n" +#~ " přepínač -p nebo není-li zadán přepínač žádný, budou existující " +#~ "definice\n" #~ " doplňování vytištěny tak. že je bude možné znovu použít jako vstup.\n" -#~ " Přepínač -r odstraní definici doplnění pro každý NÁZEV nebo chybí-li NÁZVY,\n" +#~ " Přepínač -r odstraní definici doplnění pro každý NÁZEV nebo chybí-li " +#~ "NÁZVY,\n" #~ " odstraní všechny definice." diff --git a/po/da.gmo b/po/da.gmo index 46243f38ef63b08ded67fd9806d1cb6c77895f54..d69e37606aa6851ecc7da921e9d53a9304102480 100644 GIT binary patch delta 9532 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 delta 14657 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 diff --git a/po/da.po b/po/da.po index d5334e285..444590bd1 100644 --- a/po/da.po +++ b/po/da.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 4.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2011-03-18 01:36+0100\n" "Last-Translator: Kenneth Nielsen <k.nielsen81@gmail.com>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" @@ -25,125 +25,125 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # Den er jeg altså ikke helt sikker på -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "ugyldigt arrayindeks" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: kan ikke konvertere indekseret til associativt array" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: kan ikke tildele til ikkenumerisk indeks" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: et indeks skal bruges ved tildeling til associativt array" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: kan ikke oprette %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: kan ikke finde tastetildeling for kommando" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: første ikke-blank-tegn er ikke '\"'" # Kønnet her er et gæt, hvis det er parenteser eller anførselstegn passer det # FEJLRAPPORT -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "ingen afsluttende \"%c\" i %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: manglende kolonseparator" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "\"%s\": kan ikke løsne" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, fuzzy, c-format msgid "`%s': invalid alias name" msgstr "\"%s\": ugyldigt tastetildelingsnavn" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "linjeredigering ikke slået til" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "\"%s\": ugyldigt tastetildelingsnavn" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: kan ikke læse: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "\"%s\": ukendt funktionsnavn" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s er ikke bundet til nogen taster.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s kan kaldes via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "\"%s\": kan ikke løsne" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "løkketæller" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "kun meningsfuld i en \"for\"-, \"while\"- eller \"until\"-løkke" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -153,7 +153,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Returnerer konteksten af det nuværende underrutinekald.\n" "\n" @@ -169,350 +173,360 @@ msgstr "" "hvis\n" " UDTRYK er ugyldigt." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME ikke indstillet" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "for mange argumenter" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "ingen anden mappe" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD ikke indstillet" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "linje %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "advarsel: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: brug: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: tilvalg kræver et argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: numerisk argument påkrævet" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: ikke fundet" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: ugyldigt tilvalg" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: ugyldigt tilvalgsnavn" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "\"%s\": ikke et gyldigt identificeringsnavn" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "ugyldigt oktaltal" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "ugyldigt heksadecimalt tal" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "ugyldigt tal" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: ugyldig signalspecifikation" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "\"%s\": ikke en pid eller gyldig job-spec" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: skrivebeskyttet variabel" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: kan ikke fjerne" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s udenfor rækkevidde" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s udenfor rækkevidde" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: intet sådant job" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: ingen jobkontrol" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "ingen jobkontrol" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: begrænset" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "begrænset" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: ikke indbygget i skallen" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "skrivefejl: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "fejl ved indstilling af terminalattribut: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "fejl ved indhentning af terminalattribut: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: fejl ved indhentning af nuværende mappe: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: tvetydig job-spec" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, fuzzy, c-format +msgid "%s: not an indexed array" +msgstr "%s: ikke en arrayvariabel" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: kan ikke fjerne: skrivebeskyttet %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: kan ikke fjerne" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: ugyldigt handlingsnavn" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: ingen fuldførselsspecifikation" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "advarsel: tilvalget -F vil måske ikke virke, som du forventer" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "advarsel: tilvalget -C vil måske ikke virke, som du forventer" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "ikke i gang med at eksekvere fuldførelsesfunktion" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "kan kun bruges i en funktion" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "kan ikke bruge \"-f\" til at lave funktioner" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: skrivebeskyttet funktion" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, fuzzy, c-format msgid "`%s': invalid variable name for name reference" msgstr "\"%s\": ugyldigt tastetildelingsnavn" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: kan ikke destruere arrayvariabel på denne måde" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: kan ikke konvertere associativt til indekseret array" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynamisk indlæsning ikke tilgængelig" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "kan ikke åbne delt objekt %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "kan ikke finde %s i delt objekt %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: ikke dynamisk indlæst" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: ikke dynamisk indlæst" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: kan ikke slette: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: er en mappe" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: ikke en regulær fil" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: fil er for stor" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: kan ikke eksekvere binær fil" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: kan ikke eksekvere: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "log ud\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "ikke en logind-skal: brug \"exit\"" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Der er stoppede job.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Der er kørende job.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "ingen kommando fundet" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "historikspecifikation" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: kan ikke åbne midl. fil: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "nuværende" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "job %d startet uden jobkontrol" @@ -527,11 +541,11 @@ msgstr "%s: ugyldigt tilvalg -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: et argument er påkrævet til tilvalget -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashing slået fra" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: hash-tabel tom\n" @@ -563,12 +577,12 @@ msgstr "" "ingen hjælpeemner matcher \"%s\". Prøv \"help help\" eller \"man -k %s\" " "eller \"info %s\"." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: kan ikke åbne: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -590,21 +604,31 @@ msgstr "" "En stjerne (*) ved siden af et navn betyder at kommandoen er slået fra.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "kan ikke bruge mere end en af -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "historikposition" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "tomt arrayvariabelnavn" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameter null eller ikke indstillet" + +#: builtins/history.def:349 #, fuzzy, c-format msgid "%s: invalid timestamp" msgstr "%s: ugyldigt tilvalgsnavn" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: historikudvidelse fejlede" @@ -618,114 +642,114 @@ msgstr "%s: inlib fejlede" msgid "no other options allowed with `-x'" msgstr "ingen andre tilvalg er tilladt sammen med \"-x\"" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumenter skal være processer eller job-id'er" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Ukendt fejl" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "forventede et udtryk" -#: builtins/mapfile.def:180 -#, fuzzy, c-format -msgid "%s: not an indexed array" -msgstr "%s: ikke en arrayvariabel" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: ugyldig filbeskrivelsesspecifikation" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: ugyldig filbeskrivelse: %s" # -c Specify the number of lines read between each call to callback. -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: ugyldigt antal linjer" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: ugyldig array-startindeks" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: ugyldigt tilbagekaldskvantum" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "tomt arrayvariabelnavn" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "understøttelse af arrayvariabel påkrævet" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "\"%s\": manglende formattegn" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, fuzzy, c-format msgid "`%c': invalid time format specification" msgstr "%s: ugyldig specifikation af tidsudløb" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "\"%c\": ugyldigt formattegn" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "advarsel: %s: %s" +msgid "%s: %s" +msgstr "" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "manglende heksciffer for \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, fuzzy, c-format msgid "missing unicode digit for \\%c" msgstr "manglende heksciffer for \\x" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "ingen anden mappe" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, fuzzy, c-format msgid "%s: invalid argument" msgstr "%s: ugyldigt grænseargument" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<ingen nuværende mappe>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "mappestak tom" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "mappestakindeks" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -768,7 +792,7 @@ msgstr "" " når der ikke angives nogle valgmuligheder, startende fra 0." # Jeg tror der er en fejl i den engelske, fejlrapport -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 #, fuzzy msgid "" "Adds a directory to the top of the directory stack, or rotates\n" @@ -815,7 +839,7 @@ msgstr "" " \n" "Den indbyggede funktion \"dirs\" viser mappestakken." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -853,261 +877,261 @@ msgstr "" " \n" "Den indbyggede funktion \"dirs\" viser mappestakken." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: ugyldig specifikation af tidsudløb" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "læsefejl: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "kan kun udføre \"return\" fra en funktion eller indlæst skript" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "kan ikke fjerne en funktion og en variabel samtidig" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: ikke en arrayvariabel" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: ikke en funktion" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, fuzzy, c-format msgid "%s: cannot export" msgstr "%s: kan ikke fjerne" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "skifttæller" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "kan ikke indstille og fjerne skaltilvalg samtidig" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: ugyldigt navn for skaltilvalg" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "filnavnsargument påkrævet" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: fil ikke fundet" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "kan ikke sætte i hvile" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "kan ikke sætte en logindskal i hvile" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s er aliasset til \"%s\"\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s er et skalnøgleord\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s er en funktion\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, fuzzy, c-format msgid "%s is a special shell builtin\n" msgstr "%s er indbygget i skallen\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s er en funktion\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s er indbygget i skallen\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s er %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s er hashet (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: ugyldigt grænseargument" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "\"%c\": ugyldig kommando" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: kan ikke indhente grænse: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "grænse" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: kan ikke modificere grænse: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "oktalt tal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "\"%c\": ugyldig symbolsk tilstandsoperator" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "\"%c\": ugyldigt symbolsk tilstandstegn" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " linje " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "sidste kommando: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Afbryder..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "advarsel: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "ukendt kommandofejl" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "ugyldig kommandotype" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "dårligt mellemled" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "dårligt hop" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: ubundet variabel" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\atidsudløb mens der ventedes på input: auto-logud\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "kan ikke videresende standardinput fra /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: \"%c\": ugyldigt formateringstegn" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "datakanalfejl (pipe error)" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: begrænset: kan ikke specificere \"/\" i kommandonavne" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: kommando ikke fundet" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: dårlig fortolker" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: kan ikke eksekvere binær fil" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: dårlig fortolker" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, fuzzy, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: kan ikke eksekvere binær fil" -#: execute_cmd.c:6123 -#, fuzzy, c-format -msgid "`%s': is a special builtin" -msgstr "%s er indbygget i skallen\n" - # Process Substitution # Process substitution is supported on systems that support named pipes # (FIFOs) or the /dev/fd method of naming open files. It takes the form @@ -1117,66 +1141,77 @@ msgstr "%s er indbygget i skallen\n" # expansion. If the >(list) form is used, writing to the file will pro‐ # vide input for list. If the <(list) form is used, the file passed as # an argument should be read to obtain the output of list. -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "kan ikke duplikere fd %d til fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "grænse for rekursion af udtryk overskredet" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "underløb i rekursionsstak" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "syntaksfejl i udtryk" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "forsøgte tildeling til ikke-variabel" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "syntaksfejl i udtryk" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "division med 0" # denne her streng er dårlig på så mange måder at det fatter man slet ikke. Skal bug oversætter og hvad er expassign. Jeg laver et bud og har fejlmeldt den -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bug: dårligt expassign-udtryk" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "\":\" forventet for betingede udtryk" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "eksponent mindre end 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "identifikator forventet efter præforøgelse eller -formindskelse" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "manglende \")\"" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "syntaksfejl: operand forventet" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "syntaksfejl: ugyldig aritmetisk operator" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (fejlelement er \"%s\")" @@ -1195,7 +1230,7 @@ msgstr "%s: ugyldigt antal linjer" msgid "value too great for base" msgstr "værdi for stor til grundtal" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: fejl i udtryk\n" @@ -1204,48 +1239,53 @@ msgstr "%s: fejl i udtryk\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: kan ikke tilgå overliggende mapper" +#: general.c:452 +#, fuzzy, c-format +msgid "`%s': is a special builtin" +msgstr "%s er indbygget i skallen\n" + # Har ladet nodelay stå, idet jeg gætter på at det er et navn -#: input.c:99 subst.c:6208 +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "kan ikke nulstille \"nodelay\"-tilstand for fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "kan ikke allokere ny fildeskriptor til bash-input fra fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: buffer eksisterer allerede til ny fd %d" # ?? -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp-datakanal (pipe)" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "forgrenet pid %d figurerer i kørende job %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "sletter stoppet job %d med procesgruppe %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) markeret som stadig i live" @@ -1255,138 +1295,138 @@ msgstr "add_process: pid %5ld (%s) markeret som stadig i live" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: ingen process med det pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Færdig" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Stoppet" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Stoppet(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Kører" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Færdig(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Afslut %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Ukendt status" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(smed kerne) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "underproces setpgid (%ld til %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld er ikke en underproces af denne skal" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Ingen optegnelse af proces %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: job %d er stoppet" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: intet sådant job" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: job er afbrudt" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: job %d er allerede i baggrunden" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: linje %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (smed kerne)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd nu: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp fejlede" -#: jobs.c:4434 +#: jobs.c:4486 #, fuzzy msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: linjedisciplin" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: linjedisciplin" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "kan ikke indstille terminal-procesgruppe (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "ingen jobkontrol i denne skal" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: forfejlet hævdelse: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1395,388 +1435,398 @@ msgstr "" "\r\n" "malloc: %s:%d: hævdelse forkludret\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "ukendt" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: blok i fri liste tværet ud" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: kaldt med blokargument som allerede er fri" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: kaldt med ikke-allokeret blokargument" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: underløb detekteret, mh_nbytes uden for interval" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: underløb detekteret, mh_nbytes uden for interval" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: størrelse på start- og slut-bid afviger" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: kaldt med ikke-allokeret blokargument" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: underløb detekteret, mh_nbytes uden for interval" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: underløb detekteret, mh_nbytes uden for interval" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: størrelse på start- og slut-bid afviger" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: alloc-tabel er fyldt med FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p allerede i tabel som allokeret?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p allerede i tabel som fri?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "ugyldig base" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: vært ukendt" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: ugyldig tjeneste" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: dårlig specifikation for netværkssti" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "netværksoperation ikke understøttet" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "" -#: locale.c:294 +#: locale.c:297 #, fuzzy, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "xrealloc: %s:%d: kan ikke allokere %lu bytes" -#: locale.c:296 +#: locale.c:299 #, fuzzy, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "xrealloc: %s:%d: kan ikke allokere %lu bytes" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Du har post i $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Du har ny post i $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Posten i %s er blevet læst\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "syntaksfejl: aritmetisk udtryk påkrævet" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "syntaksfejl: \";\" uventet" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "syntaksfejl: \"((%s))\"" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: dårlig instruktionstype %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" "here-document ved linje %d er adskilt af slut-på-linje (ønskede \"%s\")" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_direction: videresendelsesinstruktion \"%d\" uden for interval" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "skrivefejl: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "uventet EOF mens der ledtes efter samhørende \"%c\"" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "uventet EOF mens der ledtes efter \"]]\"" # word A sequence of characters considered as a single unit by the # shell. Also known as a token. # Jeg har valgt udtryk -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "syntaksfejl i betingelsesudtryk: uventet element \"%s\"" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "syntaksfejl i betingelsesudtryk" # word A sequence of characters considered as a single unit by the # shell. Also known as a token. -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "uventet element \"%s\", forventede \")\"" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "forventede \")\"" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "uventet argument \"%s\" til unær betingelsesoperator" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "uventet argument til unær betingelsesoperator" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "uventet udtryk \"%s\", ventede binær betingelsesoperator" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "ventedet binær betingelsesoperator" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "uventet argument \"%s\" til binær betingelsesoperator" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "uventet argument til binær betingelsesoperator" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "uventet udtryk \"%c\" i betingelseskommando" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "uventet udtryk \"%s\" i betingelseskommando" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "uventet udtryk \"%d\" i betingelseskommando" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "syntaksfejl nær uventet udtryk \"%s\"" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "syntaksfejl nær \"%s\"" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "syntaksfejl: uventet slutning på fil" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "syntaksfejl: uventet slutning på fil" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "syntaksfejl" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Brug \"%s\" for at forlade skallen.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "uventet EOF mens der ledtes efter samhørende \")\"" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: funktion \"%s\" ikke fundet" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: dårligt mellemled \"%d\"" -#: print_cmd.c:375 +#: print_cmd.c:399 #, fuzzy, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "%d: ugyldig filbeskrivelse: %s" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: \"%c\": ugyldigt formateringstegn" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "fil-deskriptor uden for interval" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: tvetydig videresendelse" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: kan ikke overskrive eksisterende fil" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: begrænset: kan ikke videresende output" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "kan ikke danne midlertidig fil til here-dokument: %s" -#: redir.c:223 +#: redir.c:218 #, fuzzy, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: kan ikke tildele liste til arrayelementer" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/vært/port ikke understøttet uden netværk" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "videresendelsesfejl: kan ikke duplikere fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "kan ikke finde /tmp, opret venligst mappen!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp skal være et gyldigt mappenavn" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: ugyldigt tilvalg" # Har ladet nodelay stå, idet jeg gætter på at det er et navn -#: shell.c:1343 +#: shell.c:1355 #, fuzzy, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "kan ikke nulstille \"nodelay\"-tilstand for fd %d" # Har ladet nodelay stå, idet jeg gætter på at det er et navn -#: shell.c:1354 +#: shell.c:1371 #, fuzzy, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "kan ikke nulstille \"nodelay\"-tilstand for fd %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, fuzzy, c-format msgid "%s: Is a directory" msgstr "%s: er en mappe" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Jeg har ikke noget navn!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, version %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1785,53 +1835,53 @@ msgstr "" "Brug:\t%s [langt GNU-tilvalg] [tilvalg] ...\n" "\t%s [langt GNU-tilvalg] [tilvalg] skript-fil ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Lange GNU-tilvalg:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Skal-tilvalg:\n" -#: shell.c:2069 +#: shell.c:2061 #, fuzzy msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD eller -c kommando eller -O shopt_option\t\t(kun programkald)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\tTilvalg -%s eller -o\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Skriv \"%s -c \"help set\"\" for at få mere information om skaltilvalg.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Skriv \"%s -c help\" for at få mere information om indbyggede " "skalkommandoer.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Brug kommandoen \"bashbug\" til at rapportere fejl.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: ugyldig handling" @@ -2003,165 +2053,169 @@ msgstr "Informationsforespørgsel" msgid "Unknown Signal #%d" msgstr "Ukendt signal #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "dårlig udskiftning: ingen lukkende \"%s\" i %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: kan ikke tildele liste til arrayelementer" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "kan ikke lave datakanal (pipe) til procesudskiftning" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "kan ikke danne underproces til procesudskiftning" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "kan ikke åbne navngiven datakanal (pipe) %s til læsning" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "kan ikke åbne navngiven datakanal (pipe) %s til skrivning" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "kan ikke duplikere navngiven datakanal (pipe) %s som %d" -#: subst.c:6370 +#: subst.c:6761 #, fuzzy msgid "command substitution: ignored null byte in input" msgstr "dårlig udskiftning: ingen lukkende \"`\" i %s" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: kan ikke duplikere datakanal (pipe) som fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "kan ikke danne datakanal (pipe) til kommandoudskiftning" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "kan ikke danne underproces til kommandoudskiftning" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: kan ikke duplikere datakanal (pipe) som fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, fuzzy, c-format msgid "%s: invalid variable name for name reference" msgstr "%d: ugyldig filbeskrivelse: %s" # -c Specify the number of lines read between each call to callback. -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, fuzzy, c-format msgid "%s: invalid indirect expansion" msgstr "%s: ugyldigt antal linjer" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, fuzzy, c-format msgid "%s: invalid variable name" msgstr "\"%s\": ugyldigt tastetildelingsnavn" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: dårlig udskiftning" + +#: subst.c:8231 #, fuzzy, c-format msgid "%s: parameter not set" msgstr "%s: parameter null eller ikke indstillet" -#: subst.c:7480 -#, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parameter null eller ikke indstillet" - -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: understreng-udtryk < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: dårlig udskiftning" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: kan ikke tildele på denne måde" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" msgstr "" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "dårlig udskiftning: ingen lukkende \"`\" i %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "intet match: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argument forventet" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: heltalsudtryk forventet" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "\")\" forventet" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "\")\" forventet, fandt %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: binær operator forventet" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: unær operator forventet" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "manglende \"]\"" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "syntaksfejl: \";\" uventet" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "ugyldigt signalnummer" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: dårlig værdi i trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" @@ -2169,93 +2223,101 @@ msgstr "" "run_pending_traps: signalhåndtering er SIG_DFL, gensender %d (%s) til mig " "selv" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: ugyldigt signal %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "fejl under importering af funktionsdefinition for \"%s\"" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "skalniveau (%d) for højt, genindstiller til 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: ingen funktionskontekst ved nuværende navneområde" -#: variables.c:2661 +#: variables.c:2659 #, fuzzy, c-format msgid "%s: variable may not be assigned value" msgstr "%s: kan ikke tildele liste til arrayelementer" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: ingen funktionskontekst ved nuværende navneområde" -#: variables.c:4757 +#: variables.c:4793 #, fuzzy, c-format msgid "%s has null exportstr" msgstr "%s: parameter null eller ikke indstillet" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "ugyldigt tegn %d i exportstr for %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "intet \"=\" i exportstr for %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: hoved af shell_variables er ikke en funktionskontekst" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: ingen global_variables-kontekst" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" "pop_scope: hoved af shell_variables er ikke et midlertidigt miljønavnerum" -#: variables.c:6400 +#: variables.c:6404 #, fuzzy, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: kan ikke åbne: %s" -#: variables.c:6405 +#: variables.c:6409 #, fuzzy, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%d: ugyldig filbeskrivelse: %s" -#: variables.c:6450 +#: variables.c:6453 #, fuzzy, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s udenfor rækkevidde" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Ophavsret (C) 2009 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2263,37 +2325,37 @@ msgstr "" "Licens GPLv3+: GNU GPL version 3 eller senere <http://gnu.org/licenses/gpl." "html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, version %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 #, fuzzy msgid "This is free software; you are free to change and redistribute it." msgstr "Dette er fri software; du kan frit ændre eller redistribuere det.\n" -#: version.c:92 version2.c:92 +#: version.c:91 #, fuzzy msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Der er INGEN GARANTI i det omfang loven tillader.\n" -#: xmalloc.c:93 +#: xmalloc.c:84 #, fuzzy, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "xmalloc: kan ikke allokere %lu bytes (%lu bytes allokeret)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, fuzzy, c-format msgid "%s: cannot allocate %lu bytes" msgstr "xmalloc: kan ikke allokere %lu bytes" -#: xmalloc.c:165 +#: xmalloc.c:164 #, fuzzy, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "xmalloc: %s:%d: kan ikke allokere %lu bytes (%lu bytes allokeret)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, fuzzy, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "xmalloc: %s:%d: kan ikke allokere %lu bytes" @@ -2334,7 +2396,7 @@ msgstr "caller [expr]" #: builtins.c:66 #, fuzzy -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|-P] [mappe]" #: builtins.c:68 @@ -2452,7 +2514,7 @@ msgstr "let arg [arg ...]" #: builtins.c:138 #, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a array] [-d adskil] [-i tekst] [-n ntegn] [-p prompt] [-t " @@ -2506,7 +2568,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] signal_spec ...]" #: builtins.c:168 @@ -2533,26 +2596,30 @@ msgid "wait [pid ...]" msgstr "wait [pid]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAVN [in ORD ... ] ; do KOMMANDOER; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( udtryk1; udtryk2; udtryk3 )); do KOMMANDOER; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAVN [in ORD ... ;] do KOMMANDOER; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] datakanal" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case ORD in [MØNSTER [| MØNSTER]...) KOMMANDOER ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2560,65 +2627,65 @@ msgstr "" "if KOMMANDOER; then KOMMANDOER; [ elif KOMMANDOER; then KOMMANDOER; ]... " "[ else KOMMANDOER; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while KOMMANDOER; do KOMMANDOER; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until KOMMANDOER; do KOMMANDOER; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAVN] kommando [videresendelser]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function navn { KOMMANDOER ; } eller navn () { KOMMANDOER ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ KOMMANDOER ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( udtryk ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ udtryk ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Navn og betydning af nogle skalvariable" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | mappe]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [indstnavn ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [argumenter]" -#: builtins.c:231 +#: builtins.c:233 #, fuzzy msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" @@ -2629,22 +2696,23 @@ msgstr "" "globmønst] [-W ordliste] [-F funktion] [-C kommando] [-X filtermønst] [-P " "præfiks] [-S suffiks] [navn ...]" -#: builtins.c:235 +#: builtins.c:237 #, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o valgmuligheder] [-A handling] [-G globmønst] [-" "W ordliste] [-F funktion] [-C kommando] [-X filtermønst] [-P præfiks] [-S " "suffiks] [ord]" -#: builtins.c:239 +#: builtins.c:241 #, fuzzy msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o valgmulighed] [navn ...]" -#: builtins.c:242 +#: builtins.c:244 #, fuzzy msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2653,7 +2721,7 @@ msgstr "" "mapfile [-n antal] [-O oprindelse] [-s antal] [-t] [-u fd] [-C tilbagekald] " "[-c kvantum] [array]" -#: builtins.c:244 +#: builtins.c:246 #, fuzzy msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2662,7 +2730,7 @@ msgstr "" "readarray [-n antal] [-O oprindelse] [-s antal] [-t] [-u fd] [-C " "tilbagekald] [-c kvantum] [array]" -#: builtins.c:256 +#: builtins.c:258 #, fuzzy msgid "" "Define or display aliases.\n" @@ -2699,7 +2767,7 @@ msgstr "" " alias returnerer sand med mindre der gives et NAVN som der ikke er\n" " defineret noget alias for." -#: builtins.c:278 +#: builtins.c:280 #, fuzzy msgid "" "Remove each NAME from the list of defined aliases.\n" @@ -2716,7 +2784,7 @@ msgstr "" " \n" " Returner succes med mindre et NAVN ikke er et eksisterende alias." -#: builtins.c:291 +#: builtins.c:293 #, fuzzy msgid "" "Set Readline key bindings and variables.\n" @@ -2799,7 +2867,7 @@ msgstr "" "der\n" " opstår en fejl." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2818,7 +2886,7 @@ msgstr "" " Afslutningsstatussen er 0 med mindre N ikke er større end eller lig med " "1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2838,7 +2906,7 @@ msgstr "" " Afslutningsstatussen er 0 med mindre N ikke er større end eller lig med " "1." -#: builtins.c:354 +#: builtins.c:356 #, fuzzy msgid "" "Execute shell builtins.\n" @@ -2866,7 +2934,7 @@ msgstr "" "hvis\n" " SKAL-INDBYGGET ikke er en skal-indbygget.." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2895,14 +2963,14 @@ msgstr "" "hvis\n" " UDTRYK er ugyldigt." -#: builtins.c:387 +#: builtins.c:389 #, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2966,7 +3034,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer 0 hvis mappen ændres, ellers noget forskellig fra 0." -#: builtins.c:425 +#: builtins.c:427 #, fuzzy msgid "" "Print the name of the current working directory.\n" @@ -2995,7 +3063,7 @@ msgstr "" "den\n" " aktuelle mappe ikke kan læses." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -3011,7 +3079,7 @@ msgstr "" " Afslutningsstatus:\n" " Afsluttes altid succesfuldt." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -3023,7 +3091,7 @@ msgstr "" " Afslutningsstatus:\n" " Afsluttes altid succesfuldt." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -3035,7 +3103,7 @@ msgstr "" " Afslutningsstatus:\n" " Afsluttes altid mislykket." -#: builtins.c:471 +#: builtins.c:473 #, fuzzy msgid "" "Execute a simple command or display information about commands.\n" @@ -3073,7 +3141,7 @@ msgstr "" " Returnerer afslutningsstatus fra KOMMANDO eller mislykket hvis KOMMANDO\n" " ikke findes." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3102,7 +3170,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3152,7 +3221,7 @@ msgstr "" "hvis\n" " der opstår en fejl." -#: builtins.c:532 +#: builtins.c:535 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3163,7 +3232,7 @@ msgstr "" " \n" " Forældet. Læs i \"help declare\"." -#: builtins.c:540 +#: builtins.c:543 #, fuzzy msgid "" "Define local variables.\n" @@ -3192,7 +3261,7 @@ msgstr "" " Returnerer succes med mindre der angives et ugyldigt tilvalg, hvis der\n" " opstår en fejl, eller hvis skallen ikke eksekverer en funktion." -#: builtins.c:557 +#: builtins.c:560 #, fuzzy msgid "" "Write arguments to the standard output.\n" @@ -3262,7 +3331,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer succes med mindre der opstår en skrivefejl." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3284,7 +3353,8 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer succes med mindre der opstår en skrivefejl." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3304,6 +3374,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3339,7 +3415,7 @@ msgstr "" " Returnerer succes med mindre NAVN ikke er en skal-indbygget eller hvis\n" " der opstår en fejl." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3361,7 +3437,7 @@ msgstr "" "er\n" " null." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy msgid "" "Parse option arguments.\n" @@ -3442,7 +3518,7 @@ msgstr "" " Returnerer succes hvis et tilvalg findes, fejler hvis afslutningen\n" " af tilvalgene nås eller hvis der opstår en fejl." -#: builtins.c:694 +#: builtins.c:702 #, fuzzy msgid "" "Replace the shell with the given command.\n" @@ -3486,7 +3562,7 @@ msgstr "" "der\n" " opstår en omdirigeringsfejl." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3498,7 +3574,7 @@ msgstr "" " Afslut skallen med status N. Hvis N udelades vil afslutningsstatus\n" " blive den samme som sidst eksekverede kommando." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3512,7 +3588,8 @@ msgstr "" "hvis\n" " den ikke eksekveres i en logindskal." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3537,6 +3614,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3573,7 +3652,7 @@ msgstr "" "hvis\n" " der opstod en fejl." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3596,7 +3675,7 @@ msgstr "" "der\n" " opstår fejl." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3621,7 +3700,7 @@ msgstr "" "hvis\n" " der opstår en fejl." -#: builtins.c:793 +#: builtins.c:803 #, fuzzy msgid "" "Remember or display program locations.\n" @@ -3666,7 +3745,7 @@ msgstr "" "angives\n" " et ugyldig tilvalg." -#: builtins.c:818 +#: builtins.c:828 #, fuzzy msgid "" "Display information about builtin commands.\n" @@ -3708,7 +3787,7 @@ msgstr "" " Returnerer succes med mindre MØNSTER ikke kan findes, eller hvis der\n" " angives et ugyldigt tilvalg." -#: builtins.c:842 +#: builtins.c:852 #, fuzzy msgid "" "Display or manipulate the history list.\n" @@ -3733,7 +3812,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3778,7 +3861,7 @@ msgstr "" "hvis\n" " der opstår en fejl." -#: builtins.c:879 +#: builtins.c:893 #, fuzzy msgid "" "Display status of jobs.\n" @@ -3828,7 +3911,7 @@ msgstr "" "der\n" " opstår en fejl. Hvis -x bruges returneres afslutningsstatus for KOMMANDO." -#: builtins.c:906 +#: builtins.c:920 #, fuzzy msgid "" "Remove jobs from current shell.\n" @@ -3860,7 +3943,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer succes med mindre et ugyldigt tilvalg eller JOBSPEC angives." -#: builtins.c:925 +#: builtins.c:939 #, fuzzy msgid "" "Send a signal to a job.\n" @@ -3908,7 +3991,7 @@ msgstr "" "der\n" " opstår en fejl." -#: builtins.c:949 +#: builtins.c:963 #, fuzzy msgid "" "Evaluate arithmetic expressions.\n" @@ -3995,7 +4078,7 @@ msgstr "" " Hvis det sidste ARG evalueres til 0, vil \"let\" returnere 1, ellers\n" " returneres 0." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -4020,6 +4103,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -4094,7 +4179,7 @@ msgstr "" "indtræffer,\n" " eller hvis en ugyldig fildeskriptor gives som argument til -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4119,7 +4204,7 @@ msgstr "" "en\n" " funktion eller et skript." -#: builtins.c:1055 +#: builtins.c:1071 #, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" @@ -4196,6 +4281,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4264,8 +4353,8 @@ msgstr "" " standarden følges\n" " privileged samme som -p\n" " verbose samme som -v\n" -" vi brug en linjeredigerings-grænseflade som i \"vi" -"\"\n" +" vi brug en linjeredigerings-grænseflade som i " +"\"vi\"\n" " xtrace samme som -x\n" " -p Slået til når den reelle og den faktiske brugers id'er ikke er " "ens.\n" @@ -4304,7 +4393,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer succes med mindre der angives et ugyldigt tilvalg." -#: builtins.c:1140 +#: builtins.c:1160 #, fuzzy msgid "" "Unset values and attributes of shell variables and functions.\n" @@ -4346,7 +4435,7 @@ msgstr "" "et\n" " givent navn er skrivebeskyttet." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4382,7 +4471,7 @@ msgstr "" " Returnerer succes med mindre der angives et ugyldigt tilvalg eller hvis\n" " NAVN er ugyldig." -#: builtins.c:1181 +#: builtins.c:1201 #, fuzzy msgid "" "Mark shell variables as unchangeable.\n" @@ -4422,7 +4511,7 @@ msgstr "" " Returnerer succes med mindre der angives et ugyldigt tilvalg eller hvis\n" " NAVN er ugyldigt." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4441,7 +4530,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer succes med mindre N er negativ eller større end $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4467,15 +4556,18 @@ msgstr "" "hvis\n" " FILNAVN ikke kan læses." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4494,7 +4586,7 @@ msgstr "" "der\n" " opstår en fejl." -#: builtins.c:1262 +#: builtins.c:1284 #, fuzzy msgid "" "Evaluate conditional expression.\n" @@ -4656,7 +4748,7 @@ msgstr "" " Returnerer succes hvis UDTRYK evalueres til sand, og fejler hvis UDTRYK\n" " evalueres til falsk eller hvis der gives et ugyldigt argument." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4669,7 +4761,7 @@ msgstr "" "sidste\n" " argument skal være \"]\", for at den passer til den åbnende \"[\"." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4689,7 +4781,7 @@ msgstr "" " Afslutningsstatus:\n" " Lykkes altid." -#: builtins.c:1365 +#: builtins.c:1387 #, fuzzy msgid "" "Trap signals and other events.\n" @@ -4698,31 +4790,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4770,7 +4867,7 @@ msgstr "" "angivet\n" " et ugyldigt tilvalg." -#: builtins.c:1401 +#: builtins.c:1430 #, fuzzy msgid "" "Display information about command type.\n" @@ -4818,8 +4915,8 @@ msgstr "" " -p\treturnerer enten navnet på den diskfil, som ville blive\n" " \teksekveret, eller ingenting hvis \"type -t NAVN\" ikke ville have\n" " \treturneret \"file\".\n" -" -t\treturner et enkelt ord, enten \"alias\", \"keyword\", \"function" -"\",\n" +" -t\treturner et enkelt ord, enten \"alias\", \"keyword\", " +"\"function\",\n" " \t\"builtin\", \"file\" eller \"\", hvis NAVN er henholdsvis et alias,\n" " skalreserveret ord, skalfunktion, skalindbygget, diskfil eller ikke " "blev\n" @@ -4833,7 +4930,7 @@ msgstr "" "enkelt\n" " ikke findes." -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy msgid "" "Modify shell resource limits.\n" @@ -4876,9 +4973,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4930,7 +5028,7 @@ msgstr "" "der\n" " opstår en fejl." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4968,7 +5066,7 @@ msgstr "" "ugyldigt\n" " tilvalg angives." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" @@ -5015,7 +5113,7 @@ msgstr "" "angives\n" " et ugyldigt tilvalg." -#: builtins.c:1534 +#: builtins.c:1564 #, fuzzy msgid "" "Wait for process completion and return exit status.\n" @@ -5041,7 +5139,16 @@ msgstr "" " Returnerer statussen for ID, fejler hvis ID er ugyldig eller hvis der\n" " angives et ugyldigt tilvalg." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -5066,7 +5173,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer statussen for den sidst eksekverede kommando." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -5096,7 +5203,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer afslutningsstatussen for den sidst eksekverede kommando." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5134,7 +5241,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer statussen fra den sidst eksekverede kommando." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5163,7 +5270,7 @@ msgstr "" " Afslutningsstatus:\n" " Afslutningsstatus er afslutningsstatus for DATAKANAL." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5182,7 +5289,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer statussen fra den sidst eksekverede kommando." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5221,7 +5328,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer statussen fra den sidst eksekverede kommando." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5241,7 +5348,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer statussen fra den sidst eksekverede kommando." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5261,7 +5368,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer statussen fra den sidst eksekverede kommando." -#: builtins.c:1672 +#: builtins.c:1712 #, fuzzy msgid "" "Create a coprocess named NAME.\n" @@ -5285,7 +5392,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer afslutningsstatussen for KOMMANDO." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5309,7 +5416,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer succes med mindre NAVN er skrivebeskyttet." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5327,7 +5434,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer statussen fra den sidst eksekverede kommando." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5354,7 +5461,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer statussen af det genoptagede job." -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy msgid "" "Evaluate arithmetic expression.\n" @@ -5374,7 +5481,7 @@ msgstr "" " Afslutningsstatus:\n" " Returnerer 1 hvis udtrykket evalueres til 0, ellers returneres 0." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5429,7 +5536,7 @@ msgstr "" " Afslutningsstatus:\n" " 0 eller 1 afhængigt af udtrykkets værdi." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5542,7 +5649,7 @@ msgstr "" " HISTIGNORE\tEn kolonsepareret liste af mønstre som bliver brugt til at\n" " \t\tbestemme hvilke kommandoer der skal gemmes i historikken.\n" -#: builtins.c:1822 +#: builtins.c:1862 #, fuzzy msgid "" "Add directories to stack.\n" @@ -5602,7 +5709,7 @@ msgstr "" "hvis\n" " mappeskiftet mislykkes." -#: builtins.c:1856 +#: builtins.c:1896 #, fuzzy msgid "" "Remove directories from stack.\n" @@ -5657,7 +5764,7 @@ msgstr "" "hvis\n" " mappeskiftet mislykkes." -#: builtins.c:1886 +#: builtins.c:1926 #, fuzzy msgid "" "Display directory stack.\n" @@ -5689,8 +5796,8 @@ msgstr "" "Vis mappestakken.\n" " \n" " Vis listen af huskede mapper. Mapper tilføjes denne liste ved hjælp\n" -" af \"pushd\"-kommandoen. Du kan komme tilbage gennem listen med \"popd" -"\"-\n" +" af \"pushd\"-kommandoen. Du kan komme tilbage gennem listen med " +"\"popd\"-\n" " kommandoen.\n" " \n" " Tilvalg:\n" @@ -5712,7 +5819,7 @@ msgstr "" "der\n" " opstår en fejl." -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy msgid "" "Set and unset shell options.\n" @@ -5740,8 +5847,8 @@ msgstr "" " indstillet.\n" " \n" " Tilvalg:\n" -" -o\tbegræns INDSTNAVN til dem som er defineret til brug med \"set -o" -"\"\n" +" -o\tbegræns INDSTNAVN til dem som er defineret til brug med \"set -" +"o\"\n" " -p\tudskriv alle skalvariable sammen med en indikation af deres\n" " \tstatus\n" " -q\tundertryk output\n" @@ -5753,7 +5860,7 @@ msgstr "" "et\n" " ugyldigt tilvalg eller hvis INDSTNAVN er deaktiveret." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5771,9 +5878,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5822,16 +5929,16 @@ msgstr "" "hvis\n" " der opstår en skrive- eller tildelingsfejl." -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5874,14 +5981,19 @@ msgstr "" "hvis\n" " der opstår en fejl." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5899,7 +6011,7 @@ msgstr "" " der opstår en fejl." # Fejlrapport -#: builtins.c:2019 +#: builtins.c:2062 #, fuzzy msgid "" "Modify or display completion options.\n" @@ -5962,7 +6074,7 @@ msgstr "" "hvis\n" " der ikke er defineret en fuldførselsspecifikation for NAVN." -#: builtins.c:2050 +#: builtins.c:2093 #, fuzzy msgid "" "Read lines from the standard input into an indexed array variable.\n" @@ -6041,7 +6153,7 @@ msgstr "" "hvis\n" " ARRAY er skrivebeskyttet." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -6051,6 +6163,38 @@ msgstr "" " \n" " Et synonym for \"mapfile\"." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Returnerer konteksten af det nuværende underrutinekald.\n" +#~ "\n" +#~ " Uden UDTRYK returneres \"$line $filename\". Med UDTRYK returneres\n" +#~ " \"$line $subroutine $filename\". Den ekstra information\n" +#~ " kan bruges til at give at stakspor.\n" +#~ "\n" +#~ " Værdien af UDTRYK angiver hvor mange kalderammer der skal gås " +#~ "tilbage\n" +#~ " fra den nuværende. Toprammen er ramme 0.\n" +#~ " \n" +#~ " Afslutningsstatus:\n" +#~ " Returnerer 0 med mindre skallen ikke eksekverer en skalfunktion eller " +#~ "hvis\n" +#~ " UDTRYK er ugyldigt." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "advarsel: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: ugyldig nøgle til associativt array" diff --git a/po/de.gmo b/po/de.gmo index 388ad49eb559986846a748a5e6dda019c0ad6d92..24c0baf82c5e0c1ec624c12c25ad385f01f04101 100644 GIT binary patch delta 29225 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 delta 34025 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 diff --git a/po/de.po b/po/de.po index c73aef46f..a0c56bd73 100644 --- a/po/de.po +++ b/po/de.po @@ -1,15 +1,15 @@ -# qerman language file for GNU Bash 5.0 -# Copyright (C) 2019 Free Software Foundation, Inc. +# qerman language file for GNU Bash 5.2-rc1 +# Copyright (C) 2023 Free Software Foundation, Inc. # This file is distributed under the same license as the bash package. # Roland Illig <roland.illig@gmx.de> 2019 -# Nils Naumann <nau@gmx.net>, 1996-2021. +# Nils Naumann <nau@gmx.net>, 1996-2024. # msgid "" msgstr "" -"Project-Id-Version: bash 5.1\n" +"Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" -"PO-Revision-Date: 2021-12-29 22:04+0100\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" +"PO-Revision-Date: 2024-03-24 13:13+0100\n" "Last-Translator: Nils Naumann <nau@gmx.net>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" @@ -19,128 +19,129 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "Falscher Feldindex." -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: Entferne das Nameref Attribut." -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "" "%s: Das indizierte Array kann in kein assoziatives Array umgewandelt werden." -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: Das Zuweisen auf einen nicht-numerischen Index ist nicht möglich." -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "" "%s: %s: Ein Feldindex wird zum Zuweisen eines assoziativen Arrays benötigt." -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: Kann die Datei %s nicht erzeugen." -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "bash_execute_unix_command: Kann nicht die Tastenzuordnung für das Kommando " "finden." -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" -msgstr " %s: Das erste Zeichen ist nicht `\\'." +msgstr " %s: Das erste Zeichen ist nicht `\"'" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "fehlende schließende `%c' in %s." -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: Fehlender Doppelpunkt." -#: bashline.c:4733 -#, fuzzy, c-format +#: bashline.c:4832 +#, c-format msgid "`%s': cannot unbind in command keymap" -msgstr "»%s«: Bindung kann nicht gelöst werden." +msgstr "»%s«: Kommandozurdnung kann nicht aufgehoben werden. " -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "Klammererweiterung: Konnte keinen Speicher für %s zuweisen." -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "Klammererweiterung: Konnte keinen Speicher für %u Elemente zuweisen." -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "Klammererweiterung: Konnte keinen Speicher für »%s« zuweisen." -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "»%s«: Ungültiger Aliasname." -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "Zeileneditierung ist nicht aktiviert." -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "»%s«: Ungültiger Tastenzuordnungs-Name." -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: Nicht lesbar: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "%s: Unbekannter Funktionsname." -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s ist keiner Taste zugeordnet.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s kann aufgerufen werden durch " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "»%s«: Bindung kann nicht gelöst werden." -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "Schleifenzähler" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "nur in einer for-, while- oder until-Schleife sinnvoll." # caller -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -149,7 +150,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Gibt Informationen zum aktuellen Subroutinenaufruf aus.\n" "\n" @@ -158,354 +163,369 @@ msgstr "" " Mit diesen Informationen kann ein Stacktrace erzeugt werden.\n" "\n" " Das Argument gibt die angezeigte Position im Funktionsaufrufstapel an,\n" -" wobei 0 der aktuelle Funktionsaufruf ist." +" wobei 0 der aktuelle Funktionsaufruf ist.\n" +"\n" +" Rückgabewert:\n" +" Ist ungleich 0 wenn keine Shellfunktion ausgeführt wird oder das " +"Argument\n" +" ungültig ist, sonst 0." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME ist nicht zugewiesen." -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "Zu viele Argumente." -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "NULL Verzeichnis" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD ist nicht zugewiesen." # Debug Ausgabe -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "Zeile %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "Warnung: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: Aufruf: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: Die Option erfordert ein Argument." -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: Ein numerischer Parameter ist erforderlich." -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: Nicht gefunden." -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: Ungültige Option." -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: Ungültiger Optionsname." -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "»%s«: Ist kein gültiger Bezeichner." -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "Ungültige Oktalzahl." -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "Ungültige hexadezimale Zahl." -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "Ungültige Zahl." -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: Ungültige Signalbezeichnung." -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "»%s«: Ist keine gültige Prozess-ID oder Jobbezeichnung." -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: Schreibgeschützte Variable." -#: builtins/common.c:273 -#, fuzzy, c-format +#: builtins/common.c:248 +#, c-format msgid "%s: cannot assign" -msgstr "%s: »unset« nicht möglich." +msgstr "%s: Zuweisung nicht möglich." -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s ist außerhalb des Gültigkeitsbereiches." -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "Argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s ist außerhalb des Gültigkeitsbereiches." -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: Kein solcher Job." -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: Keine Jobsteuerung in dieser Shell." -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "Keine Jobsteuerung in dieser Shell." -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: eingeschränkt" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "eingeschränkt" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: Ist kein eingebautes Shellkommando." -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "Schreibfehler: %s." -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "Fehler beim Setzen der Terminalattribute: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "Fehler beim Ermitteln der Terminalattribute: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: Kann das aktuelle Verzeichnis nicht wiederfinden: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: Mehrdeutige Jobbezeichnung." -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "In dieser Version ist keine Hilfe verfügbar." -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: Ist kein indiziertes Array." + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: »unset« nicht möglich: %s ist schreibgeschützt" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: »unset« nicht möglich." -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: Ungültiger Aktionsname." -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: Keine Komplettierung angegeben." -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "Warnung: Die Option -F könnte unerwartete Ergebnisse liefern." -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "Warnung: Die Option -C könnte unerwartete Ergebnisse liefern." -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "Gegenwärtig wird keine Komplettierungsfunktion ausgeführt." -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "Kann nur innerhalb einer Funktion benutzt werden." -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "Mit »-f« können keine Funktionen erzeugt werden." -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: Schreibgeschützte Funktion." -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: Referenzvariable darf kein Array sein." -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" -msgstr "" +msgstr "%s: Selbstreferenz der Nameref Variable ist nicht erlaubt." -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: Zirkularbezug auf indirekte Variable." -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "»%s«: Ungültiger Name für indirekte Variablenreferenz." -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: Kann Feldvariablen nicht auf diese Art löschen." -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "" "%s: Konvertieren von assoziativen in indizierte Arrays ist nicht möglich." -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "Dynamisches Laden ist nicht verfügbar." -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "Kann die dynamische Bibliothek nicht laden %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "Kann %s nicht in der dynamischen Bibliothek finden %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: Ist bereits geladen." -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" "Die Ladefunktion von %s lieferte einen Fehler (%d), daher nicht geladen." -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: Ist nicht dynamisch geladen." -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: Kann nicht löschen: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: ist ein Verzeichnis." -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: Ist keine normale Datei." -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: Die Datei ist zu groß." -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: Kann die Datei nicht ausführen." -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: Kann nicht ausführen: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "Abgemeldet\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "Keine Loginshell: Mit »exit« abmelden!" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Es gibt noch angehaltene Prozesse.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Es gibt noch laufende Prozesse.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "Kein Kommando gefunden." -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: Kann die temporäre Datei nicht öffnen: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "gegenwärtig" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "Job %d wurde ohne Jobsteuerung gestartet." @@ -520,11 +540,11 @@ msgstr "%s: Ungültige Option -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: Diese Option erfordert ein Argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "Hashing deaktiviert." -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: Die Hashtabelle ist leer.\n" @@ -557,12 +577,12 @@ msgstr "" "Kein passendes Hilfethema für »%s«. Probieren Sie »help help«, »man -k %s« " "oder »info %s«." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: Kann die Datei nicht öffnen: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -584,21 +604,31 @@ msgstr "" "Ein Stern (*) neben dem Namen kennzeichnet deaktivierte Kommandos.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "Es darf höchstens eine Option aus -anrw angegeben werden." -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "Kommandostapelposition." -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "Fehlender Name für die Arrayvariable." + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: Parameter ist leer oder nicht gesetzt." + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: Ungültiger Zeitstempel." -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: Kommandoersetzung gescheitert." @@ -612,114 +642,114 @@ msgstr "%s: inlib gescheitert." msgid "no other options allowed with `-x'" msgstr "Keine weiteren Optionen mit `-x' erlaubt." -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: Die Argumente müssen Prozess- oder Job-IDs sein." -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Unbekannter Fehler." -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "Ausdruck erwartet." -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: Ist kein indiziertes Array." - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: Ungültige Dateideskriptor-Angabe." -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: Ungültiger Dateideskriptor: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: Ungültige Zeilenanzahlangabe." -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: Ungültiger Arrayanfang." -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "Fehlender Name für die Arrayvariable." -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "" "Die Unterstützung für Arrayvariablen ist in dieser Shell nicht vorhanden." -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "»%s«: Fehlendes Formatierungszeichen." -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "»%c«: Ungültige Zeitformatangabe." -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "»%c«: Ungültiges Formatierungszeichen." -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "Warnung: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "Formatleseproblem: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "Fehlende hexadezimale Ziffer nach \\x." -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "Fehlende Unicode-Ziffer für \\%c." -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "kein anderes Verzeichnis" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: Ungültiges Argument." -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<kein aktuelles Verzeichnis>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "Der Verzeichnisstapel ist leer." -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "Verzeichnisstapelindex" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -761,7 +791,7 @@ msgstr "" "\t-N\tZeigt den N'ten Eintrag von rechts an, der von »dirs« ausgegeben\n" "\twird, wenn es ohne Optionen aufgerufen wird, beginnend mit Null." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -807,7 +837,7 @@ msgstr "" " \n" " Das Kommando »dirs« Kommando zeigt den Verzeichnisstapel an." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -848,325 +878,337 @@ msgstr "" " \n" " Das Kommando »dirs« zeigt den Verzeichnisstapel an." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: Ungültige Wartezeitangebe." -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "Lesefehler: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "" "»Return« ist nur aus einer Funktion oder einem mit »source« ausgeführten " "Skript möglich." -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "" "Gleichzeitiges »unset« einer Funktion und einer Variable ist nicht möglich." -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: Ist keine Feldvariable." -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: Ist keine Funktion." -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: Exportieren nicht möglich." -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "Verschiebeanzahl" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "Kann nicht Shelloptionen gleichzeitig aktivieren und deaktivieren." -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: Ungültiger Name für Shelloption." -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "Ein Dateiname wird als Argument benötigt." -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: Datei nicht gefunden." -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "Kann die Shell nicht unterbrechen." # logout -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "Kann die Loginshell nicht unterbrechen." -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s ist ein Alias von »%s«.\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s Ist ein reserviertes Schlüsselwort der Shell.\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s ist eine Funktion.\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s ist eine spezielle eingebaute Funktion.\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s ist eine Funktion.\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s ist eine von der Shell mitgelieferte Funktion.\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s ist %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s ist gehasht (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: Ungültiges Grenzwertargument." -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': Falsches Kommando." -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: Kann die nicht Grenze setzen: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "Grenze" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: Kann die Grenze nicht ändern: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "Oktalzahl" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': Ungültiger Operator für den symbolischen Modus." -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': Ungültiges Zeichen im symbolischen Modus." -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " Zeile " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "Letztes Kommando: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Abbruch..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFO: " -#: error.c:310 -#, fuzzy, c-format +#: error.c:261 +#, c-format msgid "DEBUG warning: " -msgstr "Warnung: " +msgstr "DEBUG Warnung: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "Unbekanntes Kommando" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "Falscher Kommandotyp" # Programmierfehler -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "Falscher Sprung" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s ist nicht gesetzt." -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aZu lange keine Eingabe: Automatisch ausgeloggt.\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "Kann nicht die Standardeingabe von /dev/null umleiten: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: »%c«: Ungültiges Formatzeichen." -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "Pipe-Fehler" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: Maximale Schachtelungstiefe überschritten (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: Maximale Quellcode-Schachtelungstiefe überschritten (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: maximale Schachtelungstiefe für Funktionen überschritten (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: eingeschränkt: `/' ist in Kommandonamen unzulässig." -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: Kommando nicht gefunden." -#: execute_cmd.c:5957 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" - -#: execute_cmd.c:5975 -#, fuzzy, c-format -msgid "%s: cannot execute: required file not found" -msgstr "%s: Kann die Datei nicht ausführen." - -#: execute_cmd.c:6000 +#: execute_cmd.c:6118 #, c-format msgid "%s: %s: bad interpreter" msgstr "%s: %s: Defekter Interpreter" -#: execute_cmd.c:6037 +#: execute_cmd.c:6127 #, c-format -msgid "%s: cannot execute binary file: %s" -msgstr "%s: Kann die Binärdatei nicht ausführen: %s" +msgid "%s: cannot execute: required file not found" +msgstr "%s: Kann nicht ausführen. Datei nicht gefunden." -#: execute_cmd.c:6123 +#: execute_cmd.c:6164 #, c-format -msgid "`%s': is a special builtin" -msgstr "»%s« ist eine spezielle eingebaute Funktion." +msgid "%s: cannot execute binary file: %s" +msgstr "%s: Kann die Binärdatei nicht ausführen: %s" -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "Kann fd %d nicht auf fd %d verdoppeln." -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "Zu viele Rekursionen in Ausdruck." -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "Rekursionsstapel leer." -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "Syntaxfehler im Ausdruck." -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "Versuchte Zuweisung zu etwas, das keine Variable ist." -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "Syntaxfehler in der Variablenzuweisung." -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "Division durch 0." -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "Fehler: Falscher Zuweisungsoperator." -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "»:« für ein bedingten Ausdruck erwartet." -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "Der Exponent ist kleiner als 0." -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "" "Nach einem Präinkrement oder Prädekrement wird ein Bezeichner erwartet." -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "Fehlende »)«" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "Syntaxfehler: Operator erwartet." -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "Syntaxfehler: Ungültiger arithmetischer Operator." -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (Fehlerverursachendes Zeichen ist \"%s\")." @@ -1183,7 +1225,7 @@ msgstr "Ungültige Ganzzahlenkonstante." msgid "value too great for base" msgstr "Der Wert ist für die aktuelle Basis zu groß." -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: Fehler im Ausdruck.\n" @@ -1192,48 +1234,53 @@ msgstr "%s: Fehler im Ausdruck.\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: Kann auf die übergeordneten Verzeichnisse nicht zugreifen." -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "»%s« ist eine spezielle eingebaute Funktion." + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "Konnte den No-Delay-Modus für fd %d nicht wiederherstellen." -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "Kann keinen neuen Dateideskriptor für die Eingabe von fd %d zuweisen." # Debug Ausgabe -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: Es existiert bereits ein Puffer für den neuen fd %d." -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "Die geforkte PID %d erscheint im laufenden Prozess %d." -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "Lösche den gestoppten Prozess %d der Prozessgruppe %ld." # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00024.html -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "" @@ -1244,143 +1291,143 @@ msgstr "" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: Prozessnummer existiert nicht." -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Fertig" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Angehalten" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Angehalten(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Läuft" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Fertig(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Exit %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Unbekannter Status" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(Speicherabzug geschrieben) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (Verz.: %s)" # interner Fehler -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: Prozess %ld wurde nicht von dieser Shell gestartet." -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: Der Job %d ist gestoppt." -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: Kein aktueller Job." -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: Der Job ist beendet." -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: Der Job %d läuft bereits im Hintergrund." -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "" # Debug Ausgabe -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: Zeile %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (Speicherabzug geschrieben)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(gegenwärtiges Arbeitsverzeichnis ist: %s)\n" # interner Fehler -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp war nicht erfolgreich." # interner Fehler -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: Keine Jobsteuerung im Hintergrund." # interner Fehler -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: line discipline" # interner Fehler -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "Kann die Prozessgruppe des Terminals nicht setzen (%d)." -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "Keine Jobsteuerung in dieser Shell." -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: Zusicherung gescheitert: %s.\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1389,391 +1436,401 @@ msgstr "" "\r\n" "malloc: %s:%d: Zusicherung verpfuscht\\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "Unbekannt" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "Malloc: Ein internet Speicherbereich (free list) wurde überschrieben." -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: Wurde für bereits freigegebenen Speicherbereich aufgerufen." -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: Wurde für nicht zugeordneten Speicherbereich aufgerufen." -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: Underflow erkannt; mh_nbytes außerhalb des Gültigkeitsbereichs." -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: Underflow erkannt; magic8 beschädigt." -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: Beginn und Ende Segmentgrößen sind unterschiedlich." -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: Mit nicht zugewiesenen Argument aufgerufen." -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "" "realloc: Underflow erkannt; mh_nbytes außerhalb des Gültigkeitsbereichs." -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: Underflow erkannt; magic8 beschädigt." -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: Beginn und Ende Segmentgrößen sind unterschiedlich.<" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "" "register_alloc: Speicherzuordnungstabelle ist mit FIND_ALLOC gefüllt?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "" "register_alloc: %p ist bereits in der Speicherzuordnungstabelle als belegt " "gekennzeichnet?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "" "register_free: %p ist bereits in der Speicherzuordnungstabelle als frei " "gekennzeichnet?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "Ungültige Basis" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: Unbekannter Host." -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: unbekannter Dienst." -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: Fehlerhafte Netzwerkspfadangabe." -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "Der Netzwerkbetrieb ist nicht unterstützt." -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: Kann die Regionseinstellungen nicht ändern (%s)." -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: Kann die Regionseinstellungen nicht ändern (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: Kann die Regionseinstellungen nicht ändern (%s)." -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: Kann die Regionseinstellungen nicht ändern (%s): %s" # Du oder Sie? -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Sie haben Post in $_." -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Sie haben neue Post in $_." -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Die Post in %s wurde bereits gelesen.\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "Syntaxfehler: Es wird ein arithmetischer Ausdruck benötigt." -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "Syntax Fehler: unerwartetes `;'." -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "Syntaxfehler: »((%s))«." # interner Fehler -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: Falscher Befehlstyp %d." -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" "Das in der Zeile %d beginnende Here-Dokument geht bis zum Dateiende " "(erwartet wird »%s«)." -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "Schreibfehler: %s." + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "Dateiende beim Suchen nach »%c« erreicht." -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "Dateiende beim Suchen nach »]]« erreicht." -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "Syntaxfehler im bedingten Ausdruck: Unerwartetes Symbol »%s«." -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "Syntaxfehler im bedingten Ausdruck." -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "Unerwartetes Zeichen: »%s« anstatt von »)«" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "»)« erwartet." -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "Syntaxfehler beim unerwarteten Symbol »%s«" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "Syntaxfehler bei »%s«" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "Syntaxfehler: Unerwartetes Dateiende." + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "Syntaxfehler: Unerwartetes Dateiende." -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "Syntaxfehler" # Du oder Sie? -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Verwenden Sie »%s«, um die Shell zu verlassen.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "Dateiende beim Suchen nach zugehöriger »)« erreicht." -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: Funktion »%s« nicht gefunden." -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: Falsches Verbindungszeichen »%d«." -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: Ungültiger Dateideskriptor." -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: »%c«: Ungültiges Formatsymbol." -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "Dateideskriptor außerhalb des gültigen Bereichs." -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: Mehrdeutige Umlenkung." -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: Kann existierende Datei nicht überschreiben." -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: eingeschränkt: Die Ausgabe darf nicht umgeleitet werden." -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "Kann die temporäre Datei für das Hier-Dokument nicht anlegen: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: Kann fd keiner Variable zuweisen." -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "" "Dateinamen der Form /dev/(tcp|udp)/host/port werden ohne Netzwerk nicht " "unterstützt" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "Umleitungsfehler: Verdoppeln des Dateibezeichners nicht möglich." -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "Konnte das Verzeichnis »/tmp« nicht finden, bitte anlegen." -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp muss ein Verzeichnis sein." -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "Der hübsche Druckmodus wird in interaktiven Schells ignoriert." -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: Ungültige Option" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "Konnte die UID nicht in %d ändern: Die effektive UID ist %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "Konnte die GID nicht in %d ändern: Die effektive GID ist %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "Kann keinen Debugger starten. Der Debugmodus ist gesperrt." -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: Ist ein Verzeichnis." -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Ich habe keinen Benutzernamen!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, Version %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1782,53 +1839,53 @@ msgstr "" "Aufruf:\t%s [Lange GNU-Option] [Option] ...\n" "\t%s [Lange GNU-Option] [Option] Script-Datei ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Lange GNU-Optionen:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Shell-Optionen:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD oder -c Kommando oder -O shopt_option\t\t(Nur Aufruf)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s oder Option -o\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Geben Sie »%s -c \"help set\"« ein, um mehr über Shell-Optionen zu " "erfahren.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Geben Sie »%s -c help« ein, um mehr über eingebaute Shellkommandos zu " "erfahren.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Mit dem Kommando »bashbug« Kommando können Sie Fehler melden.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Bash-Homepage: <https://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Allgemeine Hilfe für GNU-Software: <https://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: Ungültige Operation" @@ -1999,98 +2056,103 @@ msgstr "Informationsanforderung" msgid "Unknown Signal #%d" msgstr "Unbekanntes Signal Nr.: %d." -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "Falsche Ersetzung: Kein schließendes »%s« in »%s« enthalten." -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: Kann einem Feldelement keine Liste zuweisen." -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "Kann keine Pipe für die Prozessersetzung erzeugen." -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "Kann den Kindsprozess für die Prozessersetzung nicht erzeugen." -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "Kann nicht die benannte Pipe %s zum Lesen öffnen." -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "Kann nicht die benannte Pipe %s zum Schreiben öffnen." -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "Kann die benannte Pipe %s nicht auf fd %d duplizieren." -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "Kommandoersetzung: NULL-Byte in der Eingabe ignoriert." -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +# interner Fehler +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: Kann Pipe nicht als Dateideskriptor 1 duplizieren." + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "Kann keine Pipes für Kommandoersetzung erzeugen." -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "Kann keinen Unterprozess für die Kommandoersetzung erzeugen." # interner Fehler -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: Kann Pipe nicht als Dateideskriptor 1 duplizieren." -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: Ungültiger Variablenname für Namensreferenz." -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: Ungültige indirekte Expansion." -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: Ungültiger Variablenname." -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: Der Parameter ist nicht gesetzt." +msgid "%s: bad substitution" +msgstr "%s: Falsche Substitution." -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: Parameter ist leer oder nicht gesetzt." +msgid "%s: parameter not set" +msgstr "%s: Der Parameter ist nicht gesetzt." # interner Fehler -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: Teilstring-Ausdruck < 0." -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: Falsche Substitution." - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: Kann so nicht zuweisen." -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2098,171 +2160,179 @@ msgstr "" "Zukünftige Versionen dieser Shell werden das Auswerten arithmetischer " "Ersetzungen erzwingen." -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "Falsche Ersetzung: Kein schließendes »`« in %s." -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "Keine Entsprechung: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "Argument erwartet." -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: Ganzzahliger Ausdruck erwartet." -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "»)« erwartet." -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "»)« erwartet, %s gefunden." -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: Zweistelliger (binärer) Operator erwartet." -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: Einstelliger (unärer) Operator erwartet." -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "Fehlende »]«" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "Syntax Fehler: »%s« unerwartet." -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "Ungültige Signalnummer." -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "Traphandler: Maximale Traphandler-Ebene überschritten (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: Ungültiger Wert in trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "" # Programmierfehler -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: Falsches Signal %d." -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "Fehler beim Importieren der Funktionsdefinition für »%s«." -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "Der Shell-Level (%d) ist zu hoch und wird auf 1 zurückgesetzt." -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "%s: Maximale Quellcode-Schachtelungstiefe überschritten (%d)" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: no function context at current scope" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: Der Variable darf kein Wert zugewiesen werden." -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" # Interner Fehler -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: assigning integer to name reference" # Interner Fehler -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: no function context at current scope" # Interner Fehler -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s has null exportstr" # Interner Fehler -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "invalid character %d in exportstr for %s" # Interner Fehler -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "no `=' in exportstr for %s" # Interner Fehler -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: head of shell_variables not a function context" # Interner Fehler -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: no global_variables context" # Interner Fehler -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: head of shell_variables not a temporary environment scope" # Interner Fehler -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: cannot open as FILE" # Interner Fehler -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: invalid value for trace file descriptor" # Interner Fehler -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: compatibility value out of range" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." -msgstr "Copyright (C) 2020 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." +msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2270,35 +2340,35 @@ msgstr "" "Lizenz GPLv3+: GNU GPL Version 3 oder jünger <http://gnu.org/licenses/gpl." "html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, Version %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Dies ist freie Software. Sie darf verändert und verteilt werden." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Es wird keine Garantie gewährt, soweit das Gesetz es zulässt." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: Konnte keine %lu Bytes reservieren (%lu bytes reserviert)." -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: Konnte keine %lu Bytes reservieren." -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: Konnte keine %lu Bytes reservieren (%lu bytes reserviert)." -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: Konnte keine %lu Bytes reservieren." @@ -2337,7 +2407,8 @@ msgid "caller [expr]" msgstr "caller [Ausdruck]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [Verzeichnis]" #: builtins.c:68 @@ -2349,19 +2420,21 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] Kommando [Argument ...]" #: builtins.c:78 -#, fuzzy msgid "" "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " "[name ...]" -msgstr "declare [-aAfFgiIlrntux] [-p] [Name[=Wert] ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [name[=Wert] ...] oder declare -p [-aAfFilnrtux] " +"[name ...]" # #: builtins.c:80 -#, fuzzy msgid "" "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " "[name ...]" -msgstr "typeset [-aAfFgiIlnrtux] [-p] Name[=Wert] ..." +msgstr "" +"typeset [-aAfFgiIlnrtux] name[=Wert] ... oder typeset -p [-aAfFilnrtux] " +"[name ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2452,8 +2525,9 @@ msgid "let arg [arg ...]" msgstr "let Argument [Argument ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a Feld] [-d Begrenzer] [-i Text] [-n Zeichenanzahl] [-N " @@ -2464,9 +2538,8 @@ msgid "return [n]" msgstr "return [n]" #: builtins.c:142 -#, fuzzy msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]" -msgstr "set [-abefhkmnptuvxBCHP] [-o Option] [--] [Argument ...]" +msgstr "set [-abefhkmnptuvxBCEHPT] [-o Optionsname] [--] [-] [Argument ...]" #: builtins.c:144 msgid "unset [-f] [-v] [-n] [name ...]" @@ -2505,7 +2578,8 @@ msgid "[ arg... ]" msgstr "[ Argument... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[Argument] Signalbezeichnung ...]" #: builtins.c:168 @@ -2513,9 +2587,8 @@ msgid "type [-afptP] name [name ...]" msgstr "type [-afptP] Name [Name ...]" #: builtins.c:171 -#, fuzzy msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]" -msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [Grenze]" +msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [Grenze]" #: builtins.c:174 msgid "umask [-p] [-S] [mode]" @@ -2530,26 +2603,30 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for Name [in Wort ... ] ; do Kommandos; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( Ausdr1; Ausdr2; Ausdr3 )); do Kommandos; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select Name [in Wort ... ;] do Kommandos; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] Pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case Wort in [Muster [| Muster]...) Kommandos ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2557,66 +2634,64 @@ msgstr "" "if Kommandos; then Kommandos; [ elif Kommandos; then Kommandos; ]... [ else " "Kommandos; ] fi" -#: builtins.c:196 -#, fuzzy +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" -msgstr "while Kommandos; do Kommandos; done" +msgstr "while Kommandos; do Kommandos-2; done" -#: builtins.c:198 -#, fuzzy +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" -msgstr "until Kommandos; do Kommandos; done" +msgstr "until Kommandos; do Kommandos-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [Name] Kommando [Umleitungen]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function Name { Kommandos ; } oder Name () { Kommandos ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ Kommandos ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "Jobbezeichnung [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( Ausdruck ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ Ausdruck ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Namen und Bedeutung einiger Shellvariablen" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | Verzeichnis]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [Optionsname ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] Format [Argumente]" # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00027.html -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " @@ -2628,20 +2703,22 @@ msgstr "" "...]" # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00027.html -#: builtins.c:235 +#: builtins.c:237 +#, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o Option] [-A Aktion] [-G Suchmuster] [-W " "Wortliste] [-F Funktion] [-C Kommando] [-X Filtermuster] [-P Prefix] [-S " "Suffix] [Wort]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o Option] [-DEI] [Name ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2649,7 +2726,7 @@ msgstr "" "mapfile [-d Begrenzer] [-n Anzahl] [-O Quelle] [-s Anzahl] [-t] [-u fd]\n" " [-C Callback] [-c Menge] [Feldvariable]" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2658,7 +2735,7 @@ msgstr "" " [-u fd] [-C Callback] [-c Menge] [Feldvariable]" # alias -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2695,7 +2772,7 @@ msgstr "" " kein Alias definiert wurde." # unalias -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2712,7 +2789,7 @@ msgstr "" " Gibt immer Erfolg zurück, außer wenn der Alias nicht existiert." # bind -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2810,7 +2887,7 @@ msgstr "" " oder ein Fehler eintrat." # break -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2830,7 +2907,7 @@ msgstr "" " Der Rückgabewert ist 0, außer »n« ist nicht größer oder gleich 1." # continue -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2850,7 +2927,7 @@ msgstr "" " Der Rückgabewert ist 0, außer wenn »n« nicht größer oder gleich 1 ist." # builtin -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2875,7 +2952,7 @@ msgstr "" " dieses nicht existiert." # caller -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2905,13 +2982,14 @@ msgstr "" " ungültig ist, sonst 0." # cd -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2991,7 +3069,7 @@ msgstr "" " erfolgreich gesetzt werden konnte. Sonst ist er ungleich 0." # pwd -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -3022,7 +3100,7 @@ msgstr "" " Verzeichnis nicht lesbar ist." # colon -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -3039,7 +3117,7 @@ msgstr "" " Das Kommando ist immer »wahr«." # true -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -3051,7 +3129,7 @@ msgstr "" " Rückgabewert:\n" " Immer »wahr«." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -3064,7 +3142,7 @@ msgstr "" " Immer »falsch«." # command -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3104,7 +3182,8 @@ msgstr "" " das Kommando nicht gefunden wird." # declare -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -3132,7 +3211,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3189,7 +3269,7 @@ msgstr "" " Gibt »Erfolg« zurück, außer eine ungültige Option wurde angegeben,\n" " oder ein Fehler trat auf." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3199,7 +3279,7 @@ msgstr "" "\n" " Synonym für »declare«. Siehe »help declare«." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3228,7 +3308,7 @@ msgstr "" " Funktion." # echo -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3297,7 +3377,7 @@ msgstr "" " Rückgabewert:\n" " Gibt »Erfolg« zurück, außer ein Ausgabefehler tritt auf." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3321,7 +3401,8 @@ msgstr "" " Gibt »Erfolg« zurück, außer nach einem Schreibfehler." # enable -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3341,6 +3422,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3377,7 +3464,7 @@ msgstr "" " Gibt »Erfolg« zurück, außer Name ist kein eingebautes Kommando\n" " oder ein Fehler tritt auf." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3398,7 +3485,7 @@ msgstr "" " Der Status des Kommandos oder Erfolg, wenn das Kommando leer war." # getopts -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3480,7 +3567,7 @@ msgstr "" " aufgetreten ist." # exec -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3522,7 +3609,7 @@ msgstr "" " ein Weiterleitungsfehler trat auf." # exit -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3536,7 +3623,7 @@ msgstr "" " ist, wird der Rückgabewert des letzten ausgeführten Kommandos übernommen." # logout -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3551,7 +3638,8 @@ msgstr "" " zurückgegeben." # fc -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3576,6 +3664,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3606,7 +3696,7 @@ msgstr "" " Gibt den Erfolg oder den Status des ausgeführten Befehls zurück;\n" " ungleich Null, wenn ein Fehler auftritt." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3626,7 +3716,7 @@ msgstr "" " Rückgabewert:\n" " Status des in den Vordergrund geholten Jobs oder Fehler." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3649,7 +3739,7 @@ msgstr "" " oder ein Fehler auftritt." # hash -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3699,7 +3789,7 @@ msgstr "" " wird eine ungültige Option angegeben." # help -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3741,7 +3831,8 @@ msgstr "" " angegeben wurde." # history -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3765,7 +3856,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3811,7 +3906,7 @@ msgstr "" " Option angegeben oder es ist ein Fehler aufgetreten." # jobs -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3858,7 +3953,7 @@ msgstr "" " verwendet wird, wird der Rückgebewert von COMMAND zurückgegeben." # disown -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3891,7 +3986,7 @@ msgstr "" " JOBSPEC angegeben wurde." # kill -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3935,7 +4030,7 @@ msgstr "" " Gibt Erfolg zurück, es sei denn, es wurde eine ungültige Option\n" " angegeben oder es ist ein Fehler aufgetreten." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -4023,7 +4118,7 @@ msgstr "" "zurück." # read -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -4048,6 +4143,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -4079,13 +4176,11 @@ msgid "" msgstr "" "Liest eine Zeile von der Standardeingabe und teilt sie in Felder auf.\n" " \n" -" Liest eine einzelne Zeile aus der Standardeingabe oder vom\n" -" Dateideskriptor FD wenn die Option -u angegeben ist. Die Zeile\n" -" wird wie bei der Wortaufteilung in Felder aufgeteilt aufgeteilt,\n" -" und das erste Wort wird dem ersten NAME zugewiesen, das zweite\n" -" NAME zugewiesen, das zweite Wort dem zweiten NAME usw., wobei alle\n" -" verbleibenden Wörter dem dem letzten NAME zugeordnet werden. Die\n" -" in $IFS enthaltenen Zeichen werden als Worttrennzeichen verwendet.\n" +" Liest eine Zeile von der Standardeingabe oder, mit der Option -u, dem\n" +" Dateideskriptor FD. Die Zeile wird ähnlich der Wortaufteilung in Felder\n" +" geteilt, und in der angegebenen Reihenfolge den Namen zugewiesen.\n" +" Überzählige Felder werden dem letzten Namen zugewiesen. Die in $IFS\n" +" enthaltenen Zeichen werden als Trennzeichen verwendet.\n" " \n" " Wenn keine NAMEn angegeben werden, wird die gelesene Zeile in der\n" " REPLY-Variablen gespeichert.\n" @@ -4123,7 +4218,7 @@ msgstr "" " als 128), ein Variablenzuweisungsfehler tritt auf oder ein\n" " ungültiger Dateideskriptor wurde als Argument von -u übergeben." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4146,7 +4241,8 @@ msgstr "" " oder Skript aufgerufen wird." # set -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -4222,6 +4318,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4323,7 +4423,8 @@ msgstr "" " Rückgabewert:\n" " Gibt Erfolg zurück, es sei denn, eine ungültige Option wurde angegeben." -#: builtins.c:1140 +# unset +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4344,8 +4445,29 @@ msgid "" " Exit Status:\n" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" +"Zurücksetzen der Werte und Attribute von Variablen und Funktionen.\n" +" \n" +" Entfernt für jeden NAMEN die entsprechende Variable oder Funktion.\n" +" \n" +" Optionen:\n" +" -f behandelt jeden NAMEN als Shell-Funktion\n" +" -v behandelt jeden NAMEN als Shell-Variable\n" +" -n behandelt jeden NAMEN als Namensreferenz und setzt diese\n" +" Variable zurück, statt der Variable, auf die es verweist\n" +" \n" +" Ohne Angabe einer Optionen versucht unset zunächst, eine Variable\n" +" zu deaktivieren. Wenn dies fehlschlägt, versucht, eine Funktion zu\n" +" deaktivieren.\n" +" \n" +" Einige Variablen können nicht deaktiviert werden. Siehe auch\n" +" „schreibgeschützt“.\n" +" \n" +" Rückgabewert:\n" +" Gibt Erfolg zurück, wenn keine ungültige Option oder ein\n" +" schreibgeschützter NAME angegeben worden ist." -#: builtins.c:1162 +# export +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4363,8 +4485,25 @@ msgid "" " Exit Status:\n" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" +"Exportattribut für Variablen setzen.\n" +" \n" +" Markiert jeden Namen für den Export in die Umgebung der später\n" +" ausgeführte Befehle. Wenn ein Wert angegeben ist, wird dieser der\n" +" Variablen vor den Exportieren zugewiesen.\n" +" \n" +" Optionen:\n" +" -f bezieht sich auf Shellfunktionen\n" +" -n entfernt die Exporteigenschaft für jeden Namen\n" +" -p zeigt die exportierten Variablen und Funktionen an\n" +" \n" +" Das Argument „--“ beendet die weitere Optionsverarbeitung.\n" +" \n" +" Rückgabewert:\n" +" Gibt Erfolg zurück, wenn keine ungültige Option oder Name angegeben\n" +" worden ist." -#: builtins.c:1181 +# readonly +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4384,8 +4523,28 @@ msgid "" " Exit Status:\n" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" +"Markiert Shellvariablen als unveränderlich.\n" +" \n" +" Mariert jeden angegebenen Namen als schreibgeschützt. Deren Werte\n" +" können nicht mehr geändert werden. Wenn ein Wert angegeben ist,\n" +" wird er den Variablen vor dem Schreibschützen zugewiesen.\n" +" \n" +" Optionen:\n" +" -a bezieht sich auf indizierte Arrayvariablen\n" +" -A bezieht sich auf assoziative Arrayvariablen\n" +" -f bezieht sich auf Shellfunktionen\n" +" -p zeigt eine Liste aller schreibgeschützten Variablen oder\n" +" Funktionen an, abhängig davon, ob die Option -f angegeben ist\n" +" oder nicht\n" +" \n" +" Das Argument „--“ beendet die weitere Optionsverarbeitung.\n" +" \n" +" Rückgabewert:\n" +" Gibt Erfolg zurück, wenn keine ungültige Option angegeben und\n" +" der Name gültig ist." -#: builtins.c:1203 +# shift +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4396,7 +4555,7 @@ msgid "" " Returns success unless N is negative or greater than $#." msgstr "" -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4410,21 +4569,39 @@ msgid "" " FILENAME cannot be read." msgstr "" -#: builtins.c:1246 +# suspend +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" +"Shell-Ausführung aussetzen.\n" +" \n" +" Hält die die Shell so lange an, bis sie wieder ein SIGCONT-Signal " +"empfängt.\n" +" Anmelde-Shells können nur ausgesetzt werden, wenn dies erzwungen wird.\n" +" \n" +" Optionen:\n" +" -f erzwingt das Anhalten für eine Loginshell.\n" +" \n" +" Exit-Status:\n" +" Gibt Erfolg zurück, außer bei inaktiver Jobsteuerung oder einem " +"anderen\n" +" Fehler." -#: builtins.c:1262 +# test +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4506,9 +4683,89 @@ msgid "" " Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n" " false or an invalid argument is given." msgstr "" +"Bedingten Ausdruck auswerten.\n" +" \n" +" Gibt den Status 0 (wahr) oder 1 (falsch) abhängig vom Ergebnis des\n" +" Ausdrucks zurück. Die Ausdrücke können unär oder binär sein. Unäre\n" +" Ausdrücke werden häufig verwendet, um den Dateistatus zu ermitteln.\n" +" Es gibt weiterhin Zeichenketten und numerische Vergeichsoperatoren.\n" +" \n" +" Das Verhalten hängt von der Argumentanzahl ab. Die bash\n" +" Handbuchseite enthält deren vollständige Beschreibung.\n" +" \n" +" Dateioperatoren:\n" +" \n" +" -a Datei Wahr, wenn die Datei vorhanden ist.\n" +" -b Datei Wahr, wenn die Datei ein Blockgerät ist.\n" +" -c Datei Wahr, wenn die Datei ein zeichenorientiertes Gerät ist.\n" +" -d Datei Wahr, wenn die Datei ein Verzeichnis ist.\n" +" -e Datei Wahr, wenn die Datei vorhanden ist.\n" +" -f Datei Wahr, wenn die Datei existiert und eine reguläre Datei ist.\n" +" -g Datei Wahr, wenn das SetGID-Bit der Datei gesetzt ist.\n" +" -h Datei Wahr, wenn die Datei ein symbolischer Link ist.\n" +" -L Datei Wahr, wenn die Datei ein symbolischer Link ist.\n" +" -k Datei Wahr, wenn für die Datei das „Sticky“-Bit gesetzt ist.\n" +" -p Datei Wahr, wenn die Datei eine Named Pipe ist.\n" +" -r Datei Wahr, wenn die Datei für den aktuellen Nutzer lesbar ist.\n" +" -s Datei Wahr, wenn die Datei existiert und nicht leer ist.\n" +" -S Datei Wahr, wenn die Datei ein Socket ist.\n" +" -t FD Wahr, wenn FD auf einem Terminal geöffnet ist.\n" +" -u Datei Wahr, wenn das SetUID-Bit der Datei gesetzt ist.\n" +" -w Datei Wahr, wenn die Datei für den aktuellen Nutzer schreibbar " +"ist.\n" +" -x Datei Wahr, wenn die Datei vom aktuellen Nutzer ausführbar ist.\n" +" -O Datei Wahr, wenn die Datei dem aktuellen Nutzer gehört.\n" +" -G Datei Wahr, wenn die Datei der aktuellen Gruppe gehört.\n" +" -N Datei Wahr, wenn die Datei seit dem letzten Lesen geändert wurde.\n" +" \n" +" Datei1 -nt Datei2 Wahr, wenn Datei1 neuer als Datei2 ist (gemäß\n" +" Änderungsdatum).\n" +" \n" +" Datei1 -ot Datei2 Wahr, wenn Datei1 älter als Datei2 ist.\n" +" \n" +" Datei1 -ef Datei2 Wahr, wenn Datei1 ein harter Link zu Datei2 ist.\n" +" \n" +" Zeichenkettenoperatoren:\n" +" \n" +" -z STRING Wahr, wenn die Zeichenkette leer ist.\n" +" \n" +" -n STRING\n" +" STRING Wahr, wenn die Zeichenkette nicht leer ist.\n" +" \n" +" STRING1 = STRING2\n" +" Wahr, wenn die Zeichenketten gleich sind.\n" +" STRING1 != STRING2\n" +" Wahr, wenn die Zeichenketten nicht gleich sind.\n" +" STRING1 < STRING2\n" +" Wahr, wenn STRING1 lexikografisch vor STRING2\n" +" sortiert wird.\n" +" STRING1 > STRING2\n" +" Wahr, wenn STRING1 lexikografisch nach STRING2\n" +" sortiert wird.\n" +" \n" +" Andere Operatoren:\n" +" \n" +" -o OPTION Wahr, wenn die Shell-Option OPTION aktiviert ist.\n" +" -v VAR Wahr, wenn die Shell-Variable VAR gesetzt ist.\n" +" -R VAR Wahr, wenn die Variable gesetzt ist und ein Nameref ist.\n" +" ! EXPR Wahr, wenn Ausdruck falsch ist.\n" +" EXPR1 -a EXPR2 Wahr, wenn sowohl expr1 als auch expr2 wahr sind.\n" +" EXPR1 -o EXPR2 Wahr, wenn entweder expr1 ODER expr2 wahr ist.\n" +" \n" +" arg1 OP arg2 Arithmetische Tests. OP ist eines von -eq, -ne,\n" +" -lt, -le, -gt oder -ge.\n" +" \n" +" Arithmetische binäre Operatoren geben „Wahr“ zurück, wenn ARG1\n" +" gleich, ungleich oder kleiner als, kleiner als oder gleich,\n" +" größer als oder größer als oder gleich als ARG2 ist.\n" +" \n" +" Rückgabewert:\n" +" Gibt Erfolg zurück, wenn der Ausdruck als wahr ausgewertet wird.\n" +" Er gibt Falsch zurück, wenn der Ausdruck zu Falsch ausgewertet\n" +" oder ein ungültiges Argument angegeben wird." # [ -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4522,7 +4779,7 @@ msgstr "" " schließt." # times -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4541,7 +4798,7 @@ msgstr "" " Rückgabewert:\n" " Immer 0." -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -4549,31 +4806,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4585,7 +4847,7 @@ msgid "" "given." msgstr "" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4615,7 +4877,7 @@ msgid "" "found." msgstr "" -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -4657,15 +4919,16 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4683,7 +4946,7 @@ msgid "" " Returns success unless MODE is invalid or an invalid option is given." msgstr "" -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -4715,7 +4978,7 @@ msgid "" " children." msgstr "" -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -4730,7 +4993,17 @@ msgid "" " option is given." msgstr "" -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +# for +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4742,8 +5015,21 @@ msgid "" " Exit Status:\n" " Returns the status of the last command executed." msgstr "" +"Führt Befehle für jeden Listeneintrag aus.\n" +" \n" +" Die `for' Schleife führt eine Befehlsfolge für jeden Listeneintrag aus. " +"Wenn\n" +" das Schlüsselwort `in Wort ...;' fehlt, wird `in \"$@\"' angenommen. Für " +"jeden\n" +" Eintrag in \"Wort\" wird die Variable \"Name\" gesetzt und die " +"angegebenen\n" +" Kommandos ausgeführt.\n" +" \n" +" Rückgabewert:\n" +" Der Status des zuletzt ausgeführten Kommandos." -#: builtins.c:1563 +# for (( +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4759,8 +5045,21 @@ msgid "" " Exit Status:\n" " Returns the status of the last command executed." msgstr "" +"Arithmetische For Schleife.\n" +"\n" +" Equivalent zu:\n" +" \t(( Ausdr1 ))\n" +" \twhile (( Ausdr2 )); do\n" +" \t\tKommandos\n" +" \t\t(( Ausdr3 ))\n" +" \tdone\n" +" Ausdr1-3 sind arithmethische Ausdrücke. Für fehlende Ausdrücke wird 1\n" +" angenommen.\n" +"\n" +"Rückgabewert:\n" +"Status des zuletzt ausgeführten Kommandos." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4780,7 +5079,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4796,7 +5095,7 @@ msgid "" " The return status is the return status of PIPELINE." msgstr "" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4807,7 +5106,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -4828,7 +5127,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" @@ -4840,7 +5139,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" @@ -4852,7 +5151,8 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1672 +# coproc +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4864,8 +5164,19 @@ msgid "" " Exit Status:\n" " The coproc command returns an exit status of 0." msgstr "" +"Startet einen Koprozess mit dem angegebenen Namen.\n" +" \n" +" Führt das angegebene Kommando asynchron in einem Kindprozess aus.\n" +" Deren Standardaus- und -eingabe werden mit jeweils einer Pipe\n" +" verbunden. Deren Dateideskriptoren sind in den Indexen 0 und 1 der\n" +" Feldvariable mit dem angegebenen Namen verknüpft.\n" +" Der Standardname ist „COPROC“.\n" +" \n" +" Rückgabewert:\n" +" Der Befehl gibt immer 0 zurück." -#: builtins.c:1686 +# function +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -4878,8 +5189,20 @@ msgid "" " Exit Status:\n" " Returns success unless NAME is readonly." msgstr "" +"Erstellt eine Shellfunktion.\n" +" \n" +" Erstellt eine Shellfunktion mt dem angegebenen Namen. Wenn der Name als\n" +" Kommando aufgerufen wird, dann werden die angegebenen Kommandos im " +"Kontext\n" +" der aufrufenden Shell abgearbeitet. Deren Argumente werden der Funktion " +"als\n" +" die Variablen $1...$n übergeben und der Funktionsname als $FUNCNAME.\n" +" \n" +" Rückgabewert:\n" +" Gibt Erfolg zurück, es sein denn, der Name ist schreibgeschützt." -#: builtins.c:1700 +# { ... } +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4889,8 +5212,16 @@ msgid "" " Exit Status:\n" " Returns the status of the last command executed." msgstr "" +"Kommandos als Einheit gruppieren.\n" +" \n" +" Führt eine gruppierte Reihe von Kommandos aus. Dies ist eine " +"Möglichkeit, um\n" +" die Ausgabe von mehreren Kommandos umzuleiten.\n" +" \n" +" Rückgabewert:\n" +" Gibt den Status des zuletzt ausgeführten Befehls zurück." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4903,9 +5234,20 @@ msgid "" " Exit Status:\n" " Returns the status of the resumed job." msgstr "" +"Job im Vordergrund fortsetzen.\n" +" \n" +" Entspricht dem JOB_SPEC-Argument des Befehls „fg“. Er nimmt einen " +"gestoppten\n" +" oder Hintergrundjob wieder auf. JOB_SPEC kann ein Jobname oder eine\n" +" Jobnummer angeben. Ein nachfolgendes „&“ bringt den Job in den " +"Hintergrund,\n" +" ähnlich wie die Jobbezeichnung von „bg“.\n" +" \n" +" Exit-Status:\n" +" Gibt den Status des wiederaufgenommenen Jobs zurück." # (( )) -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4924,7 +5266,7 @@ msgstr "" " Ist »1«, wenn der arithmetische Ausdruck 0 ergibt, sonst »0«." # [[ -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -4975,7 +5317,7 @@ msgstr "" " 0 oder 1 abhängig vom Wert des AUSDRUCKs." # variable_help -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5087,7 +5429,7 @@ msgstr "" " Kommandos angibt.\n" # pushd -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5143,7 +5485,7 @@ msgstr "" " wurde oder der Verzeichniswechsel nicht erfolgreich war." # popd -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5197,7 +5539,7 @@ msgstr "" " wurde oder der Verzeichniswechsel nicht erfolgreich war." # dirs -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5251,7 +5593,7 @@ msgstr "" " Gibt Erfolg zurück, außer bei einer ungültigen Option oder wenn\n" " ein Fehler auftritt." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5290,7 +5632,7 @@ msgstr "" " worden ist, wird ein Fehler zurückgegeben." # printf -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5308,9 +5650,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5334,47 +5676,46 @@ msgstr "" "Formatierte Ausgabe der ARGUMENTE.\n" "\n" " Optionen:\n" -" -v var\tDie formatierte Ausgabe ver Variable var zuweisen statt\n" -" \tsie an die Standardausgebe zu senden.\n" +" -v var\tDie formatierte Ausgabe wird der Variable \"var\" zugewiesen\n" +" und nicht an die Standardausgabe gesendet.\n" "\n" -" Die FORMAT-Zeichenkette kann einfache Zeichen enthalten, die " -"unverändert\n" -" an die Standardausgabe geschickt werden. Escape-Sequenzen werden " +" Die \"Format\" Anweisung kann einfache Zeichen enthalten, die " +"unverändert an\n" +" die Standardausgabe geschickt werden. Escape-Sequenzen werden " "umgewandelt\n" " und an die Standardausgabe geschickt sowie Formatanweisungen, welche " -"das \n" -" nachfolgende ARGUMENT auswerten und ausgeben.\n" +"das\n" +" nachfolgende \"Argument\" auswerten und ausgeben.\n" "\n" -" Gegenüber der in printf(1) beschriebenen Standardverion werden " -"zusätzliche\n" -" Formatanweisungen ausgewertet:\n" +" Zusätzlich zu dem in printf(1) beschriebenen Standard werden " +"ausgewertet:\n" "\n" -" %b\tWertet Escape-Sequenzen des zugehörigen Arguments aus.\n" -" %q\tBettet das Argument so ein, dass es als Shelleingabe\n" -" verwendet werden kann.\n" -" %(fmt)T\tAusgabe der aus FMT entstehende Datum-Zeit Zeichenkette, " -"dass\n" -" sie als Zeichenkette für strftime(3) verwendet werden kann.\n" +" %b\tErlaubt Escapesequenzen im angegebenen Argument.\n" +" %q\tSchützt nicht druckbare Zeicheen, dass sie als Shelleingabe\n" +" verwendet werden können.\n" +" %Q Wie %q, es wird zusätzlich die angegebene Genauigkeit vor dem\n" +" Ausgeben angewendet.\n" +" %(Fmt)T\tAusgabe des in \"Fmt\" angegebenen Zeitausdrucks, dass sie\n" +" als Eingabe für strftime(3) verwendet werden kann.\n" "\n" " Die Formatangabe wird wiederverwendet, bis alle Argumente ausgewertet\n" " sind. Wenn weniger Argumente als Formatangaben vorhanden sind, werden " "für\n" " die Argumente Nullwerte bzw. leere Zeichenketten eingesetzt.\n" "\n" -" Rücgabewert:\n" -" Gibt Erfolg zurück, außer es wird eine ungültige Option angegeben oder " -"ein\n" -" Aus- bzw. Zuweisungsfehler auftritt." +" Rückgabewert:\n" +" Gibt Erfolg zurück, außer es wird eine ungültige Option angegeben\n" +" oder es tritt ein Aus- bzw. Zuweisungsfehler auf." -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5398,14 +5739,19 @@ msgid "" msgstr "" # compgen -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5414,13 +5760,14 @@ msgstr "" "\n" " Wird in Shellfunktionen benutzt, um mögliche Komplettierungen " "anzuzeigen.\n" -" Wenn das optionale Wort-Argument angegeben ist, werden Komplettierungen\n" +" Wenn ein Wort als optionales Argument angegeben ist, werden " +"Komplettierungen\n" " für dieses Wort erzeugt.\n" -" \n" +"\n" " Rückgabewert:\n" " Falsche Optionen oder Fehler führen zu Rückgabewerten ungleich Null." -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -5452,7 +5799,7 @@ msgid "" " have a completion specification defined." msgstr "" -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -5493,9 +5840,46 @@ msgid "" "or\n" " not an indexed array." msgstr "" +"Zeilen von der Standardeingabe in eine indizierte Array-Variable einlesen.\n" +" \n" +" Liest Zeilen von der Standardeingabe in die indizierte Array-Variable " +"ARRAY,\n" +" oder aus dem Dateideskriptor FD, wenn die Option -u angegeben ist. Die\n" +" Variable MAPFILE ist das Standard-ARRAY.\n" +" \n" +" Optionen:\n" +" -d delim Verwenden von DELIM als Zeilenende anstelle von newline\n" +" -n count Kopiert bis zu COUNT Zeilen. Mit COUNT gleich 0 werden alle\n" +" Zeilen kopiert.\n" +" -O origin Mit dem Index ORIGIN beginnen. Der Standardindex ist 0.\n" +" -s count Überspringen der ersten COUNT Zeilen.\n" +" -t Entfernt das letzte Zeichen von jeder gelesenen Zeile\n" +" (standardmäßig newline).\n" +" -u fd Aus dem Dateideskriptor FD statt der Standardeingabe lesen.\n" +" -C callback CALLBACK jedes Mal auswerten, wenn QUANTUM-Zeilen\n" +" gelesen worden sind\n" +" -c quantum Zeilenanzahl vor jedem Aufruf von CALLBACK.\n" +"\n" +" Argumente:\n" +" ARRAY Name der zu verwendenden Array-Variablen.\n" +" \n" +" Wenn -C ohne -c angegeben wird, ist das Standardquantum 5000. Wenn " +"CALLBACK\n" +" ausgewertet wird, erhält es den Index des nächsten zuzuweisenden Array\n" +" Elementes und die Zeile, die diesem Element zugewiesen werden soll als\n" +" zusätzliche Argumente.\n" +" \n" +" Wenn kein expliziter Ursprung angegeben wird, löscht mapfile ARRAY, " +"bevor\n" +" bevor es zugewiesen wird.\n" +" \n" +" Rückgabewert:\n" +" Gibt Erfolg zurück, es sei denn, es wird eine ungültige Option " +"angegeben,\n" +" das ARRAY ist schreibgeschützt oder kein indiziertes Array." # readarray -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5505,10 +5889,30 @@ msgstr "" "\n" " Ist ein Synonym für »mapfile«." -#, c-format -#~ msgid "%s: invalid associative array key" -#~ msgstr "%s: Ungültiger Schlüssel für das assoziative Array." - -# https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00025.html -#~ msgid "Unknown Signal #" -#~ msgstr "Unbekannte Signalnummer" +# caller +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Gibt Informationen zum aktuellen Subroutinenaufruf aus.\n" +#~ "\n" +#~ " Ohne Argument wird die Zeilennummer und der Dateiname angezeigt. Mit\n" +#~ " Argument werden Zeilennummer, Subroutinenname und Dateiname " +#~ "ausgegeben.\n" +#~ " Mit diesen Informationen kann ein Stacktrace erzeugt werden.\n" +#~ "\n" +#~ " Das Argument gibt die angezeigte Position im Funktionsaufrufstapel " +#~ "an,\n" +#~ " wobei 0 der aktuelle Funktionsaufruf ist." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "Warnung: %s: %s" diff --git a/po/el.gmo b/po/el.gmo index 809aac8661be61008ba4ff04c47adf5ab6ccd122..8aa857bd5a7651739258c83bf204dc48fd848100 100644 GIT binary patch delta 11231 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 delta 13143 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 D9dd~? diff --git a/po/el.po b/po/el.po index a84b8f07d..98597b095 100644 --- a/po/el.po +++ b/po/el.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-5.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2021-04-12 10:35+0300\n" "Last-Translator: Lefteris Dimitroulakis <ledimitro@gmail.com>\n" "Language-Team: Greek <team@lists.gnome.gr>\n" @@ -19,123 +19,124 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.3\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "λάθος δείκτης πίνακα" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: αφαίρεση του χαρακτηριστικού nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: αδυναμία μετατροπής indexed πίνακα σε associative πίνακα" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: αδυναμία εκχώρησης σε μη αριθμητικό δείκτη" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: αδυναμία δημιουργίας: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: δεν μπορώ να βρω keymap για εντολή" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: ο πρώτος μη-λευκό διάστημα χαρακτήρας δεν είναι «\"»" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "όχι «%c» κλεισήματος σε %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: απουσιάζει ο διαχωριστής δίστιγμο" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "«%s»: αδυναμία αποσύνδεσης" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "brace expansion: αδυναμία εκχώρησης μνήμης για %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "brace expansion: αδυναμία εκχώρησης μνήμης για %u στοιχεία" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "brace expansion: αδυναμία εκχώρησης μνήμης για «%s»" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "«%s»: μη έγκυρο συνώνυμο" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "μη ενεργοποιημένο line editing" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "«%s»: μη έγκυρο όνομα keymap" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: αδυναμία ανάγνωσης: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "«%s»: άγνωστο όνομα συνάρτησης" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s δεν έχει συνδεθεί με κανένα πλήκτρο.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s μπορεί να κληθεί μέσω " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "«%s»: αδυναμία αποσύνδεσης" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "αριθμός βρόχων" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "έχει μόνο νόημα σε ένα βρόχο «for», «while», ή «until»" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -144,7 +145,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Επιστρέφει το context της κλήσης της τρέχουσας υπορουτίνας.\n" " \n" @@ -156,350 +161,360 @@ msgstr "" " Η τιμή του EXPR δηλώνει πόσα call frames να πας πίσω πριν\n" " από το τρέχον, το ανώτατο είναι το frame 0." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME δεν έχει οριστεί" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "πάρα πολλά ορίσματα" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "κατάλογος nul" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD δεν έχει οριστεί" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "γραμμή %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "προειδοποίηση: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: χρήση: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: η επιλογή απαιτεί όρισμα" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: απαιτείται αριθμητικό όρισμα" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: δεν βρέθηκε" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: μη έγκυρη επιλογή" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: μη έγκυρο όνομα επιλογής" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "«%s»: μή έγκυρο αναγνωριστικό" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "μη έγκυρος οκταδικός αριθμός" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "μη έγκυρος εξαδικός αριθμός" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "μη έγκυρος αριθμός" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: μη έγκυρη προδιαγραφή σήματος" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "«%s»: όχι pid ή έγκυρο job spec" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: μεταβλητή μόνο για ανάγνωση" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: αδυναμία «unset»" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s εκτός ορίων" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "όρισμα" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s εκτός ορίων" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: δεν υπάρχει τέτοια εργασία" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: όχι έλεγχος εγασιών" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "όχι έλεγχος εργασιών" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: περιορισμένο" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "περιορισμένο" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: όχι ένα builtin κελύφους" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "σφάλμα εγγραφής: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "σφάλμα κατά τον ορισμό των χαρακτηριστικών τερματικού: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "σφάλμα κατά την λήψη των χαρακτηριστικών τερματικού: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: σφάλμα κατά την ανάκτηση τρέχοντος καταλόγου: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: ασαφείς προδιαγραφές εργασίας" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "βοήθεια μη διαθέσιμη σ' αυτήν την έκδοση" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: μη δικτοδοτημένος πίνακας" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: αδυναμία unset: %s μόνο για ανάγνωση" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: αδυναμία «unset»" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: μη έγκυρο όνομα ενέργειας" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: δεν υπάρχει προδιαγραφή συμπλήρωσης" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "προειδοποίηση: η επιλογή -F μπορεί να μη δουλέψει όπως περιμένεις" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "προειδοποίηση: η επιλογή -C ίσως δεν δουλέψει όπως αναμένετε" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "η λειτουργία συμπλήρωσης δεν εκτελείται επί του παρόντος" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "μπορεί να χρησιμοποιηθεί μόνο μέσα σε συνάρτηση" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "" "η επιλογή «-f» δεν μπορεί να χρησιμοποιηθεί για τη δημιουργία συναρτήσεων" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: συνάρτηση μόνο για ανάγνωση" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: η μεταβλητή αναφοράς δεν μπορεί να είναι πίνακας" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: nameref αυτοαναφορά μεταβλητής δεν επιτρέπεται" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: κυκλική αναφορά ονόματος" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "«%s»: μη έγκυρο όνομα μεταβλητής για όνομα αναφοράς" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: αδυναμία καταστροφής μεταβλητής πίνακα κατ' αυτόν τον τρόπο" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: αδυναμία μετατροπής associative πίνακα σε indexed πίνακα" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: η σύνθετη εκχώρηση πίνακα απορρίφθηκε" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "δυναμική φόρτωση μη διαθέσημη" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "αδυναμία ανοίγματος κοινόχρηστου αντικειμένου %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "αδυναμία εύρεσης %s στο κοινόχρηστο αντικείμενο %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: δυναμικό builtin ήδη φορτωμένο" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "h συνάρτηση φορτώματος του %s επιστρέφει λάθος (%d): δεν φορτώθηκε" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: δεν φορτώθηκε δυναμικά" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: αδυναμία διαγραφής: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: είναι κατάλογος" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: όχι κανονικό αρχείο" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: αρχείο πολύ μεγάλο" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: αδυναμία εκτέλεσης δυαδικού αρχείου" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: αδυναμία εκτέλεσης: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "logout\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "όχι login shell: χρησιμοποίησε «exit»" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Υπάρχουν σταματημένες εργασίες.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Υπάρχουν εργασίες που τρέχουν.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "δεν βρέθηκε εντολή" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "history specification" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: αδυναμία ανοίγματος προσωρινού αρχείου: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "τρέχων" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "η εργασία %d ξεκίνησε χωρίς έλεγχο εργασιών" @@ -514,11 +529,11 @@ msgstr "%s: μη επιτρεπόμενη επιλογή -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: η επιλογή απαιτεί ένα όρισμα -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashing απενεργοποιημένο" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: πίνακας hash κενός\n" @@ -550,12 +565,12 @@ msgstr "" "ουδεμία βοήθεια ταιριάζει με «%s». Δοκιμάστε «help help» ή «man -k %s» ή " "«info %s»." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: αδυναμία ανοίγματος: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -576,21 +591,31 @@ msgstr "" "απενεργοποιημένη.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "δεν μπορώ να χρησιμοποιήσω περισσότερες της μιας από τις -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "θέση στο ιστορικό" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "όνομα μεταβλητής πίνακα κενό" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: παράμετρος κενή ή δεν έχει οριστεί" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: μη έγκυρη χρονοσήμανση" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: η ανάπτυξη του ιστορικού σταμάτησε" @@ -604,113 +629,113 @@ msgstr "%s: αποτυχία inlib" msgid "no other options allowed with `-x'" msgstr "δεν επιτρέπονται άλλες επιλογές με την «-x»" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: ορίσματα πρέπει να είναι ID διεργασιών ή εργασιών" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Άγνωστο σφάλμα" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "αναμενόταν έκφραση" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: μη δικτοδοτημένος πίνακας" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: μη έγκυρη προδιαγραφή περιγραφέα αρχείου" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: μη έγκυρος περιγραφέας αρχείου: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: μη έγκυρος αριθμός γραμμής" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: μη έγκυρη αρχή πίνακα" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: μη έγκυρο κβάντο του callback" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "όνομα μεταβλητής πίνακα κενό" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "απαιτείται υποστήριξη μεταβλητής πίνακος" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "«%s»: απουσία χαρακτήρα φορμαρίσματος" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "«%c»: μη έγκυρη προδιαγραφή για φορμά χρόνου" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "«%c»: μη έγκυρος χαρακτήρας φορμαρίσματος" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "προειδοποίηση: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "πρόβλημα ανάλυσης του format: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "απουσία hex ψηφίου για \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "απουσία ψηφίου unicode για \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "όχι άλλος κατάλογος" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: μη έγκυρο όρισμα" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<όχι τρέχων κατάλογος>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "κενή στίβα καταλόγου" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "δείκτης στοίβας καταλόγου" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -734,7 +759,7 @@ msgid "" "\tdirs when invoked without options, starting with zero." msgstr "" -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -759,7 +784,7 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -780,321 +805,333 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: μη έγκυρη προδιαγραφή timeout" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "σφάλμα ανάγνωσης: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "«επιστροφή» είναι μόνο δυνατή από συνάρτηση ή sourced script" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "«unset» δεν μπορεί να εφαρμοστεί συγχρόνως σε συνάρτηση και μεταβλητή" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: δεν είναι μεταβλητή πίνακα" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: δεν είναι συνάρτηση" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: αδυναμία εξαγωγής" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "αριθμός του « shift »" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "" "οι επιλογές κελύφους δεν είναι δυνατόν συγχρόνως να ενεργοποιηθούν και " "απενεργοποιηθούν" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: μη έγκυρο όνομα επιλογής" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "απαιτείται όνομα αρχείου για όρισμα" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: αρχείο δεν βρέθηκε" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "αναστολή αδύνατη" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "ένα κέλυφος σύνδεσης δεν μπορεί ν' ανασταλεί" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s είναι συνώνυμο του «%s»\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s αποτελεί δεσμευμένη λέξη του κελύφους\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s είναι συνάρτηση\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s είναι ένα ειδικό builtin\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s είναι συνάρτηση\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s είναι ένα builtin κελύφους\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s είναι %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s is hashed (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: μη έγκυρο όρισμα ορίου" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "«%c»: λάθος διαταγή" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: αδύνατον να πάρω το όριο: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "όριο" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: αδυναμία μεταβολής ορίου: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "οκταδικός αριθμός" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': μη έγκυρος τελεστής συμβολικού mode" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': μη έγκυρος χαρακτήρας συμβολικού mode" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " γραμμή " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "τελευταία εντολή: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Ακύρωση..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORM: " -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "προειδοποίηση: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "σφάλμα άγνωστης εντολής" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "λάθος τύπος εντολής" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "bad connector" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "κακό άλμα" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: μεταβλητή χωρίς σύνδεση" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aη αναμονή για δεδομένα έληξε: αυτόματη αποσύνδεση\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "αδυναμία ανακατεύθυνσης τυπικής εισόδου από /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: «%c»: μη έγκυρος χαρακτήρας μορφοποίησης" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] υφίσταται ακόμη" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "pipe error" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: μέγιστο επίπεδο φωλιάσματος eval ξεπεράστηκε (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: μέγιστο επίπεδο φωλιάσματος source ξεπεράστηκε (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: μέγιστο επίπεδο φωλιάσματος συνάρτησης ξεπεράστηκε (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: περιορισμός: δεν μπορεί να περιέχεται «/» σε όνομα εντολής" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: εντολή δεν βρέθηκε" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: κακός interpreter" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: αδυναμία εκτέλεσης δυαδικού αρχείου" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: κακός interpreter" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: αδυναμία εκτέλεσης δυαδικού αρχείου: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "«%s»: είναι ειδικό builtin" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "αδυναμία αντιγραφής του fd %d στον fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "υπέρβαση του επιπέδου αναδρομικότητας στην έκφραση" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "αρνητική υπερχείλιση στοίβας" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "συντακτικό σφάλμα στην έκφραση" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "απόπειρα ανάθεσης σε μη-μεταβλητή" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "συντακτικό σφάλμα στην ανάθεση μεταβλητής" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "διαίρεση διά του 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bug: κακό σύμβολο για expassign" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "«:» αναμενόταν για μια έκφραση υπό συνθήκη" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "εκθέτης μικρότερος του 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "αναγνωριστικό αναμενόταν μετά από pre-increment ή pre-decrement" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "λείπει «)»" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "syntax error: αναμενόταν τελεστέος" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "syntax error: μη έγκυρος αριθμητικός τελεστής" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (το λανθασμένο σύμβολο είναι \"%s\")" @@ -1111,7 +1148,7 @@ msgstr "μη έγκυρη ακέραιη σταθερά" msgid "value too great for base" msgstr "τιμή πολύ μεγάλη για βάση" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: σφάλμα έκφρασης\n" @@ -1120,47 +1157,52 @@ msgstr "%s: σφάλμα έκφρασης\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: αδυναμία πρόσβασης στο γονικό κατάλογο" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "«%s»: είναι ειδικό builtin" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "αδυναμία επανάταξης nodelay mode για fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" "αδυναμία εκχώρησης νέου περιγραφέα αρχείου για είσοδο του bash από fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: ο buffer υπάρχει ήδη για νέο fd %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "η διεργασία κλώνος %d εμφανίζεται στην εργασία που τρέχει %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "διαγραφή σταματημένης εγασίας %d με ομάδα %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) μαρκαρισμένη ως ακόμα ζωντανή" @@ -1170,137 +1212,137 @@ msgstr "add_process: pid %5ld (%s) μαρκαρισμένη ως ακόμα ζω msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: δεν υπάρχει τέτοιο pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Σήμα %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Done" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Sταματημένο" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Σταματημένο(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Υπό εκτέλεση" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Done(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Έξοδος %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Άγνωστη κατάσταση" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(core dumped) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "child setpgid (%ld to %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: διεργασία %ld δεν αποτελεί θυγατρική αυτού του κελύφους" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Δεν υπάρχουν στοιχεία για διεργασία %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: η εργασία %d είναι σταματημένη" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: δεν υπάρχει τέτοια εργασία" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: η εργασία τερματίστηκε" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: εργασία %d ήδη στο παρασκήνιο" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: ενεργοποίηση WNOHANG ώστε ν' αποφευχθεί οριστικό μπλοκάρισμα" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: γραμμή %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (core dumped)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(τώρα wd: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: αποτυχία getpgrp" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: όχι έλεγχος εργασιών στο παρασκήνιο" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: line discipline" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "αδυναμία ρύθμισης της ομάδας της διεργασίας του τερματικού (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "δεν υπάρχει job control σ'αυτό το κέλυφος" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: αποτυχημένη assertion: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1309,151 +1351,151 @@ msgstr "" "\r\n" "malloc: %s:%d: αποτυχιμένη επιβεβαίωση\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "άγνωστο" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: μπλοκ στην ελεύθερη λίστα clobbered" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: κλήθηκε με όρισμα ήδη ελευθερωμένο μπλοκ" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: εντοπίστηκε αρνητική υπερχείληση, magic8 corrupted" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: τα μεγέθη των κομματιών στην αρχή και το τέλος διαφέρουν" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: εντοπίστηκε αρνητική υπερχείληση, magic8 αλλειωμένο" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: μεγέθη κομματιών σ' αρχή και τέλος διαφέρουν" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: πίνακας alloc γεμάτος με FIND_ALLOC;\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p ήδη στον πίνακα ως εκχωρισμένος;\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p ήδη στον πίνακα ως ελεύθερος;\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "μη έγκυρη βάση" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: άγνωστος host" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: μη έγκυρη υπηρεσία" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: κακιά προδιαγραφή διαδρομής δικτύου" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "μη υποστηριζόμενες δικτιακές υπηρεσίες" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: αδυναμία μεταβολής locale (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: αδυναμία μεταβολής locale (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: αδυναμία μεταβολής locale (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: αδυναμία μεταβολής locale (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Έχεις μήνυμα στο $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Έχεις νέο μήνυμα στο $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Το μήνυμα στο %s διαβάστηκε\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "syntax error: απαιτείται αριθμητική έκφραση" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "συντακτικό σφάλμα: δεν αναμενόταν «;»" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "συντακτικό σφάλμα: «((%s))»" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: ο τύπος οδηγίας δεν είναι σωστός %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" "here-document στη γραμμή %d με όριο το τέλος του αρχείου (αντί του «%s»)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: η οδηγία της ανακατεύθυνσης «%d» εκτός ορίων" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " @@ -1462,230 +1504,240 @@ msgstr "" "shell_getc: shell_input_line_size (%zu) υπερβαίνει το SIZE_MAX (%lu): γραμμή " "κόπηκε" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "σφάλμα εγγραφής: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "ο μέγιστος αριθμός here-document ξεπεράστηκε" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "μη αναμενόμενο EOF κατά την αναζήτηση «%c»" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "μη αναμενόμενο EOF ενώ έψαχνα για «]]»" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "syntax error in conditional expression: μη αναμενόμενο σύμβολο «%s»" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "συντακτικό σφάλμα σ' έκφραση υπό συνθήκη" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "μη αναμενόμενο σύμβολο «%s», αναμενόταν «)»" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "αναμενόταν «)»" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "απροσδόκητο όρισμα «%s» στον υπό αίρεση μοναδιαίο τελεστή" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "απροσδόκητο όρισμα για τον μοναδιαίο τελεστή" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "απροσδόκητο σύμβολο «%s» βρέθηκε αντί για δυαδικό τελεστή υπό αίρεση" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "αναμενόταν δυαδικός τελεστής υπό αίρεση" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "απροσδόκητο όρισμα «%s» για δυαδικό τελεστή υπό αίρεση" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "απροσδόκητο όρισμα για δυαδικό τελεστή υπό αίρεση" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "απροσδόκητο σύμβολο «%c» σε εντολή υπό αίρεση" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "απροσδόκητο σύμβολο «%s» σε εντολή υπό αίρεση" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "απροσδόκητο σύμβολο %d σε εντολή υπό αίρεση" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "συντακτικό σφάλμα κοντά στο μη αναμενόμενο σύμβολο «%s»" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "συντακτικό σφάλμα κοντά σε «%s»" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "syntax error: μη αναμενόμενο τέλος αρχείου" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "syntax error: μη αναμενόμενο τέλος αρχείου" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "συντακτικό σφάλμα" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Χρήση «%s» για έξοδο από το κέλυφος.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "μη αναμενόμενο EOF ενώ έψαχνα «)»" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: η συνάρτηση «%s» δεν βρέθηκε" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: λάθος connector «%d»" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: μη έγκυρος περιγραφέας αρχείου" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: NULL file pointer" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: «%c»: μη έγκυρη μορφή χαρακτήρα" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "περιγραφέας αρχείου εκτός ορίων" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: ασαφής ανακατεύθυνση" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: αδυναμία εγγραφής πάνω σε υπάρχον αρχείο" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restricted: αδυναμία ανακατεύθυνσης εξόδου" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "αδυναμία δημιουργίας προσωρινού αρχείου για here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: αδυναμία ανάθεσης fd σε μεταβλητή" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port δεν υποστηρίζεται χωρίς δικτύωση" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "redirection error: ντουμπλάρισμα fd αδύνατον" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "δεν μπόρεσα να βρω /tmp, παρακαλώ να τον δημιουργήσετε!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp πρέπει να είναι ένα έγκυρο όνομα αρχείου" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" "κατάσταση βελτιωμένης εμφάνισης δεδομένων παρακάμπτεται στο " "αλληλοεπιδραστικό κέλυφος" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: μη έγκυρη επιλογή" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "αδυναμία ρύθμισης uid σε %d: effective uid %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "αδυναμί ρύθμισης gid σε %d: effective gid %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "αδυναμία εκκίνησης του debugger, debugging απενεργοποιημένο" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: είναι κατάλογος" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Δεν έχω όνομα!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, έκδοση %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1694,55 +1746,55 @@ msgstr "" "Χρήση:\t%s [μακρά επιλογή GNU] [επιλογή] ...\n" "\t%s [μακρά επιλογή GNU] [επιλοη] script-file ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Μακρές επιλογές GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Επιλογές κελύφους:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD ή -c εντολή ή -O shopt_option\t\t(invocation only)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s ή επιλογή -o\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Πληκτρολόγησε «%s -c \"help set\"» για πληροφορίες επί των επιλογών " "κελύφους.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Πληκτρολόγησε «%s -c help» για περισσότερες πληροφορίες σχετικά με τις " "ενσωματομένες στο κέλυφος εντολές.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Χρησιμοποίησε την εντολή «bashbug» για αναφορά σφαλμάτων.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "σελίδα του bash: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Γενική βοήθεια για την χρήση του λογισμικού GNU: <http://www.gnu.org/gethelp/" ">\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: μη έγκυρη λειτουργία" @@ -1912,96 +1964,100 @@ msgstr "Αίτηση για πληροφορίες" msgid "Unknown Signal #%d" msgstr "Άγνωστο σήμα #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "κακή αντικατάσταση: όχι «%s» που κλείνει στο %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: αδυναμία εκχώρησης λίστας σε στοιχείο του πίνακα" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση διεργασίας" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση διεργασίας" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "αδυναμία ανοίγματοε επώνυμης σωλήνας %s προς ανάγνωση" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "αδυναμία ανοίγματος επώνυμης σωλήνας %s προς εγγραφή" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "αδυναμία αναπαραγωγής named pipe %s ως fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "αντικατάσταση εντολής: null byte αγνοήθηκε στην είσοδο" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: αδυναμία αναπαραγωγής σωλήνα ως fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση εντολής" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση εντολής" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: αδυναμία αναπαραγωγής σωλήνα ως fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: μη έγκυρο όνομα μεταβλητής ως όνομα αναφοράς" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: μη έγκυρη έμμεση επέκταση" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: μη έγκυρο όνομα μεταβλητής" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: παράμετρος δεν έχει οριστεί" +msgid "%s: bad substitution" +msgstr "%s: κακή αντικατάσταση" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: παράμετρος κενή ή δεν έχει οριστεί" +msgid "%s: parameter not set" +msgstr "%s: παράμετρος δεν έχει οριστεί" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: έκφραση αρνητική < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: κακή αντικατάσταση" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: αδύνατη ανάθεση κατ' αυτόν τον τρόπο" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2009,68 +2065,68 @@ msgstr "" "μελλοντικές εκδόσεις του κελύφους θα επιβάλουν την αποτίμηση ως μια " "αριθμητική αντικατάσταση" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "κακή αντικατάσταση: δεν υπάρχει «`» που κλείνει στο %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "χωρίς ταίριασμα: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "αναμενόταν όρισμα" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: αναμενόταν ως έκφραση ακέραιος αριθμός" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "αναμενόταν «)»" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "σναμενόταν «)», βρέθηκε %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: αναμενόταν δυαδικός τελεστής" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: αναμενόταν μοναδιαίος τελεστής" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "απούσα «]»" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "συντακτικό σφάλμα: δεν αναμενόταν «%s»" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "μη έγκυρος αριθμός σήματος" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: μέγιστο επίπεδο φωλιάσματος ξεπεράστηκε (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: κακή τιμή στην trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" @@ -2078,92 +2134,100 @@ msgstr "" "run_pending_traps: ο διαχειριστής σήματος είναι ο SIG_DFL, στέλνει %d (%s) " "σε μένα" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: κακό σήμα %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "σφάλμα κατά την εισαγωγή του ορισμού της συνάρτησης «%s»" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "επίπεδο κελύφους (%d) πολύ υψηλό, επαναφορά στο 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "ο μέγιστος αριθμός here-document ξεπεράστηκε" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: no function context at current scope" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: η μεταβλητή δεν μπορεί να δεχτεί τιμή" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s έχει κενό exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "ο χαρακτήρας %d δεν έίναι έγκυρος στην exportstr για %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "απουσία «=» στην exportstr για %s" -#: variables.c:5317 +#: variables.c:5331 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:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: no global_variables context" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: head of shell_variables not a temporary environment scope" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: αδυναμία ανοίγματος ως ΑΡΧΕΙΟ" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: μη έγκυρη τιμή για trace file descriptor" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: τιμή συμβατότητας εκτός ορίου" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2020 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2171,35 +2235,35 @@ msgstr "" "License GPLv3+: GNU GPL έκδοση 3 ή νεώτερη <http://gnu.org/licenses/gpl." "html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, έκδοση %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "This is free software; you are free to change and redistribute it." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "There is NO WARRANTY, to the extent permitted by law." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: αδυναμία εκχώρησης %lu bytes (%lu bytes εκχωρήθηκαν)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: αδυναμία εκχώρησης %lu bytes" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: αδυναμία εκχώρησης %lu bytes (%lu bytes εκχωρήθηκαν)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: αδυναμία εκχώρησης %lu bytes" @@ -2237,7 +2301,8 @@ msgid "caller [expr]" msgstr "caller [expr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [dir]" #: builtins.c:68 @@ -2347,8 +2412,9 @@ msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " @@ -2400,7 +2466,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] signal_spec ...]" #: builtins.c:168 @@ -2425,26 +2492,30 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAME [in WORDS ... ] ; do COMMANDS; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do COMMANDS; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAME [in WORDS ... ;] do COMMANDS; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2452,65 +2523,65 @@ msgstr "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while COMMANDS; do COMMANDS; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until COMMANDS; do COMMANDS; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAME] command [redirections]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function name { COMMANDS ; } ή name () { COMMANDS ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ COMMANDS ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expression ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expression ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Ονόματα και σημασία ορισμένων μεταβλητών του κελύφους" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [optname ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [ορίσματα]" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " @@ -2520,19 +2591,21 @@ msgstr "" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " "suffix] [name ...]" -#: builtins.c:235 +#: builtins.c:237 +#, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] " "[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o option] [-DE] [name ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2540,7 +2613,7 @@ msgstr "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2548,7 +2621,7 @@ msgstr "" "readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c " "quantum] [array]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2568,7 +2641,7 @@ msgid "" " defined." msgstr "" -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2584,7 +2657,7 @@ msgstr "" " \n" " Επιστρέφει επιτυχία εκτός αν το ΟΝΟΜΑ δεν είναι υπαρκτό συνώνυμο." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2626,7 +2699,7 @@ msgid "" " bind returns 0 unless an unrecognized option is given or an error occurs." msgstr "" -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2637,7 +2710,7 @@ msgid "" " The exit status is 0 unless N is not greater than or equal to 1." msgstr "" -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2655,7 +2728,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Ο κωδικός εξόδου είναι 0 εκτός αν το N δεν είναι μαγαλύτερο ή ίσον του 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2669,7 +2742,7 @@ msgid "" " not a shell builtin." msgstr "" -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2685,13 +2758,13 @@ msgid "" " is invalid." msgstr "" -#: builtins.c:387 +#: builtins.c:389 msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2730,7 +2803,7 @@ msgid "" " -P is used; non-zero otherwise." msgstr "" -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2758,7 +2831,7 @@ msgstr "" " Επιστρέφει 0 εκτός αν δίνεται μη έγκυρη επιλογή ή ο τρέχων κατάλογος\n" " δεν μπορεί να διαβαστεί." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2774,7 +2847,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Πάντα επιτυχία." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2786,7 +2859,7 @@ msgstr "" " Κατάσταση Εξόδου:\n" " Πάντοτε επιτυχία." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2798,7 +2871,7 @@ msgstr "" " Κατάσταση Εξόδου:\n" " Πάντοτε αποτυχία." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -2817,7 +2890,7 @@ msgid "" " Returns exit status of COMMAND, or failure if COMMAND is not found." msgstr "" -#: builtins.c:490 +#: builtins.c:492 msgid "" "Set variable values and attributes.\n" " \n" @@ -2845,7 +2918,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -2859,7 +2933,7 @@ msgid "" " assignment error occurs." msgstr "" -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2869,7 +2943,7 @@ msgstr "" " \n" " Συνώνημο με «declare». Βλέπε «help declare»." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2884,7 +2958,7 @@ msgid "" " assignment error occurs, or the shell is not executing a function." msgstr "" -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2954,7 +3028,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Επιστρέφει επιτυχία εκτός αν συμβεί λάθος εγγραφής." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2976,7 +3050,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Επιστρέφει επιτυχία εκτός αν συμβεί σφάλμα." -#: builtins.c:612 +#: builtins.c:615 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -2996,6 +3070,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3003,7 +3083,7 @@ msgid "" " Returns success unless NAME is not a shell builtin or an error occurs." msgstr "" -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3024,7 +3104,7 @@ msgstr "" " Επιστρέφει τον ίδιο κωδικό εξόδου με την εντολή ή επιτυχία αν ή εντολή " "είναι κενή." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3065,7 +3145,7 @@ msgid "" " encountered or an error occurs." msgstr "" -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3088,7 +3168,7 @@ msgid "" "occurs." msgstr "" -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3101,7 +3181,7 @@ msgstr "" "εξόδου\n" " είναι αυτή της τελευταίας εκτελεσμένης εντολής." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3115,7 +3195,7 @@ msgstr "" "αν δεν εκτελείται\n" " σ' ένα κέλυφος σύνδεσης." -#: builtins.c:734 +#: builtins.c:742 msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3140,12 +3220,14 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." msgstr "" -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3167,7 +3249,7 @@ msgstr "" " Η κατάσταση της εργασίας που μπήκε στο προσκήνιο, ή κωδικός αποτυχίας " "στην περίπτωση σφάλματος." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3191,7 +3273,7 @@ msgstr "" " Επιστρέφεται επιτυχία εκτός αν δεν έχει ενεργοποιηθεί job control ή έχει " "συμβεί σφάλμα." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3215,7 +3297,7 @@ msgid "" " Returns success unless NAME is not found or an invalid option is given." msgstr "" -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3237,7 +3319,7 @@ msgid "" "given." msgstr "" -#: builtins.c:842 +#: builtins.c:852 msgid "" "Display or manipulate the history list.\n" " \n" @@ -3261,7 +3343,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3272,7 +3358,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3296,7 +3382,7 @@ msgid "" " If -x is used, returns the exit status of COMMAND." msgstr "" -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3329,7 +3415,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Επιστρέφει επιτυχία εκτός αν έχει δοθεί μη έγκυρη επιλογή ή JOBSPEC." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3352,7 +3438,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3397,7 +3483,7 @@ msgid "" " If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise." msgstr "" -#: builtins.c:994 +#: builtins.c:1008 msgid "" "Read a line from the standard input and split it into fields.\n" " \n" @@ -3421,6 +3507,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3451,7 +3539,7 @@ msgid "" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3463,7 +3551,7 @@ msgid "" " Returns N, or failure if the shell is not executing a function or script." msgstr "" -#: builtins.c:1055 +#: builtins.c:1071 msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3539,6 +3627,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3549,7 +3641,7 @@ msgid "" " Returns success unless an invalid option is given." msgstr "" -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3571,7 +3663,7 @@ msgid "" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -3590,7 +3682,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -3611,7 +3703,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -3629,7 +3721,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Επιστρέφει επιτυχία εκτός αν N είναι αρνητικός ή μαγαλύτερο; από $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -3643,21 +3735,23 @@ msgid "" " FILENAME cannot be read." msgstr "" -#: builtins.c:1246 +#: builtins.c:1266 msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3831,7 +3925,7 @@ msgstr "" "αποτιμάται σε\n" " ψευδές ή αν δίδεται ένα μη έγκυρο όρισμα." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3843,7 +3937,7 @@ msgstr "" " Συνώνυμο με το «test» builtin, αλλά το τελευταίο όρισμα πρέπει\n" "να είναι ένα «]», ώστε να κλείνει το αντίστοιχο «[»." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -3863,7 +3957,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Πάντα επιτυχία." -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -3871,31 +3965,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -3907,7 +4006,7 @@ msgid "" "given." msgstr "" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -3937,7 +4036,7 @@ msgid "" "found." msgstr "" -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -3979,15 +4078,16 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4005,7 +4105,7 @@ msgid "" " Returns success unless MODE is invalid or an invalid option is given." msgstr "" -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -4037,7 +4137,7 @@ msgid "" " children." msgstr "" -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -4052,7 +4152,16 @@ msgid "" " option is given." msgstr "" -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4067,15 +4176,15 @@ msgstr "" "Εκτέλεση εντολών για μέλος μιας λίστας.\n" " \n" " Ο βρόχος «for» εκτελεί μια αλληλουχία εντολών για κάθε μέλος\n" -" μιας λίστας. Αν «in ΛΕΞΕΙΣ ...;» δεν δίνεται, τότε υποτίθεται η «in \"$@" -"\"».\n" +" μιας λίστας. Αν «in ΛΕΞΕΙΣ ...;» δεν δίνεται, τότε υποτίθεται η «in " +"\"$@\"».\n" " Για κάθε στοιχείο στις ΛΕΞΕΙΣ, ΟΝΟΜΑ ορίζεται σ' αυτό το στοιχείο, και\n" " οι ΕΝΤΟΛΕΣ εκτελούνται.\n" " \n" " Κατάσταση εξόδου:\n" " Επιστρέφει την κατάσταση της τελευταίας εκτελεσμένης εντολής." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4105,7 +4214,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Επιστρέφει τη κατάσταση της τελευταίας εκτελεσμένης εντολής." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4125,7 +4234,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4141,7 +4250,7 @@ msgid "" " The return status is the return status of PIPELINE." msgstr "" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4152,7 +4261,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -4173,7 +4282,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -4194,7 +4303,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Επιστρέφει την κατάσταση της τελευταίας εντολής που εκτελέστηκε." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -4215,7 +4324,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Επιστρέφει την κατάσταση της τελευταίας εντολής που εκτελέστηκε." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4228,7 +4337,7 @@ msgid "" " The coproc command returns an exit status of 0." msgstr "" -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -4242,7 +4351,7 @@ msgid "" " Returns success unless NAME is readonly." msgstr "" -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4261,7 +4370,7 @@ msgstr "" " Κατάσταση εξόδου:\n" " Επιστρέφει την κατάσταση της τελευταίας εντολής που εκτελέστηκε." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4275,7 +4384,7 @@ msgid "" " Returns the status of the resumed job." msgstr "" -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4293,7 +4402,7 @@ msgstr "" " Κωδικός εξόδου:\n" " Επιστρέφει 1 αν η ΕΚΦΡΑΣΗ αποτιμάται σε 0, αλλιώς επιστρέφει 0." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -4321,7 +4430,7 @@ msgid "" " 0 or 1 depending on value of EXPRESSION." msgstr "" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -4375,7 +4484,7 @@ msgid "" " \t\tcommands should be saved on the history list.\n" msgstr "" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -4406,7 +4515,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -4433,7 +4542,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -4462,7 +4571,7 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -4482,7 +4591,7 @@ msgid "" " given or OPTNAME is disabled." msgstr "" -#: builtins.c:1938 +#: builtins.c:1978 msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -4499,9 +4608,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -4523,15 +4632,15 @@ msgid "" " error occurs." msgstr "" -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -4554,20 +4663,24 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2004 +#: builtins.c:2044 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -4599,7 +4712,7 @@ msgid "" " have a completion specification defined." msgstr "" -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -4641,7 +4754,7 @@ msgid "" " not an indexed array." msgstr "" -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -4651,6 +4764,10 @@ msgstr "" " \n" " Συνώνυμο του «mapfile»." +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "προειδοποίηση: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: μη έγκυρο κλειδί associative πίνακα" diff --git a/po/en@boldquot.gmo b/po/en@boldquot.gmo index 21505e33c7b93b2c2e5bb8b7506a9c7a053eeebe..ccc9b5b8cefd3ae92f6db0614a2bf5fc33817d69 100644 GIT binary patch delta 26794 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 delta 14299 zc-qZcd304pp02tfYym_TQQ01wAS8j1gzO<eLI_I&0TQz3Wg!V<A$x$pO8^ByaS8gA zMG>U|7gQoX7i<&|mqsOSt)i$X+PKpWHqt8d{q9%vWSE}$qvy;ylXGsqx^-*$?e(jA z^~5h-58v3;b+T87I~D%oEu{tk=k-#mx0g~k4_Efz`{R@v4g3IzPpU(JQjx%ZKxr}$ z*cG@G*aNr**b&$Q90c49>;rrTI2iZ_@G9W<z`jbkl=pb0x}c&z@Jir_@oW%cFmXHw zDm3qF#*>gOz=6QMz$<{qfDYhC<4M48z}`Y|AczHC4eSpb2OI^Q2^@?0RV@k;sMr}u zjy?m113LzBqDeuVc%H$<K^$Nea3t_y;85V(LFDx3AWG6Fm;{ajVn{VLm;^2ZUMCC) zVt#cfSSV5IjKOOr*rHJh26KS^z}g9v#Dfz!;o%7+=*tO|+;70Efmei((@`NLAU1@O z$O~b=I`e)H(A5)#M@_>&nvNfZaN_f(Lyu4r77)sMr@{JAO6V4#A8@;=e<PF<_yQ>7 z>o70{>=nj$-!R%jR2bwhy2%Qo=xW2r!TK-`@Br|7;0s~o{A=K~z%JqBe0VqshzO^S z6T`{b!f-OQESw_08#qLaFq{OQ2q!^j!y$iP(NzQo3XNcg84;YI6xbcO8VCnaw?|MF zhaxDcv!=d#Bsq$XBmvox9Iq;p#(9HzzcZ5K?v5nE2VIe*<j;}h{A?sS>>9<1M?{g6 zz$i{ICyK^X8AVR+HsAL~QANj0{jUalMN@*KqA9`TXu4@-G{<o@MbkQWMN{M_qRH9$ zXsV>oL`VmC{X}*M1|mGD%!$-x?nE=-L=xOIksNLWhKW}JhXFq^^<FVF)@x(zab3z6 zh0_=@6gUkyD3&5CiYL~`lYq6rsTzSLo)dmJjo;4zy8(Zh#&#VO7*Bc`900uF4dN51 znjuL_J%@-D4D2lae>P32G7NkHco0~e0o@=Pj>>{z;yoq@Q4oaPn~NBL`uYM4+5w_o z2+u+NnMF!1zy$7crN-d<kJSh+=r^EFsXdsmq#j(OUGD~^CIb5{M^Hk2>PiqG{-3#$ zoD>3U(4ZFhZ({AuN_~rgKUt;JvtaSqIuId}K)|lYMAzM=)Zg%a@7<6V-tW3cslVd= z_bnI$1f1Qf)FZ$mbow*K?Xw-ekN0mMP^uH!<?n?28zrKl@E-6lz;$Ake_%|Xwu?qN zcNdMa)Zp4(wB{W^s8#I;{t0+)7j^vNZuWbBH`|}xO|R;<hpO`1!w?<52l5xrC+(rG z=IjxjD3!5?x+*Z(V7}jMI^G3L1a1R1gY$2J(;?IHN0fROtUdEM+!~zT`ZR(J@W3;O z321-eS=x^CIYdRYTk;&_e<K>~KSZ5G9#Lwx5Cm+1=<hf}qw;wTkLV6~4{+G)N<D=7 z=Z`D(j@V2aJO+eBy$#C;PI!-^f9ZYb9$57uVh6D91dJH{I)6+|a(zr=xeIs{`1wf~ z6Y!x=sUxpb6txd9TD$}J1t!Qk4Gz&@@?Vsy#(TvNup!{*XCZR<<xf8;l`f&XgI2i^ zSqTu1rC#f*ZHZsuqt)l)|ASEw(Ry{$Di0#)4wQ+P^whS0HvmNiHvuIcYy*l!_5qVX z=pTWSAN1&@ZJP-L+KUcQY#`6zav;_>wW$~Ty#|~t{(o&Bt=@&Gv-;Q-D)3sZ;$)Qq z3g-ua5?I~@itauJt`MDHOTrcn)M^26<v>pS=Yb^X+(7no3?ljip9X`G!1W;D+)x=0 z`fnPp)fqIn6}SftmX6@S!$xa6Mu&_hXGx<ek#wL$u*E<LsVjgZfLno*KO6!|Uhvgu zj&sErejhf5l1Knb$j<}%i~l#GAa3&T7!G(8D67?JpoHX3Fl7nJ!-3*HF+g#%S-za8 z04R&l&A#maJWxXKM?mqWtNcjtV4$oa0e&QO4$vhO*7=dM^?nr97C&~}1C*G*&yN#* z0F<>t`*VU|e-2y$MDC%Q4L%KQ0sa7#)pGS%ZD&;b#<Kr+V`+0k#%Y%=k}>1RaqKt} zuy7n3){G-ZyMb8H)XP9gG`s`INnij8n;Sqvmj_VyI}E-Kl-2LN!J*@+ikSwh#=A5V z1XKh_f&i4&>KpTZMIZ;BWU$!at%0=Wrvl00w}CXy{y|jP=pZr_Z?GhY64+qA9}S|) zKX(O@fZv0t!@<Fvcy=&FxC*#abU1;89RN!5`RN4euuBMS!as!X5g}}s8$!vf386bb z5<)_s4536n2TFe6vO-z7I+RA`A4*Zhg;Et2p>(Sip|s{Lru}1~wBnb5l0khEN|AO8 z<NNq9zUPEdGB<>gfK5PIGY$jCi2r+q)7Zv_latVJ2Aa5V4wN3wiPwgcvn{|FS){^A zpo*YKdqhyAV<KoHQzO{FCW4Z<-+X^Hf`oiwe~16|j-*awB55>5kyOPUk+kN+Kv@$m zL{juKqNuW(C`#(iD0<JqC`#lwP_pK)qsVFZXszanyGFC!j%Z4-71&+;|5X%1C2|2% zfITOYprVPSd?PSOjBO&V{+o#mOg=G`*svH9HZFz{GcAUJrZmQgK86zA6vK)4#E`&) zK$i?~Du&kl129RF&Pnv^T7zqW-m+nsM8Can5+~R*iTw^uB4Otz(b%q@%!uhQIA*e~ zYc*jq<3=7(c3fL0!~ex<-=9n)`wdtiZZw6~+%$#Ox^oH_og)U1Pay#xO<})tQ>c>O zvD9%;EICbzrN|3`(<IQvQX&UqX)|xcx+ubLVkx@wu@sF@94YpXW9UtfW5>EUw!a~c zD!C($9KIaK<@K#N>b&1n8ei&E8t<B^^sc*s<HdWXGA^8QP343g;)x^UX?)Y;Df;E{ z<mi@oiheh+LPBXg2_8C4+nG)9G{%jsK-mYpF^$Ig`!ssPs02pTlmr^-`UKjT>%jz4 z^rr;s^7jN%9yFbtISrOh=LGe@1kwF;O5msIbf-}>XoRUV*uTl(qch0Rhcif!53(Ie z-GXP@47t>rnbhgVnbhItnUutHGb#F$GfDA<nG}7WS;Qf;$btVXt_|~NQBp0l7$^45 zqR8KxMK3xti?(uQBJ0N{iVeX3rY4fo{6tcCTOy6_*+d%Q2Z=PM-xEn_pCpRjVK6X> z1W!$3yeLT`;oFlq;ejMh_+b)_?rahxV~^Qp{STT=9pwW<WRp3Y1HC$%s!?+&`oK91 zP=#|y@NEX4pF?;0dJZ|iE}3pPJ(+|jC(}KPlj$|<k~#kUK$lSTelo55Trwx<Fqa&S zoy(5NbJ?M4E{$-{TqcpNb4mDNgJ(_s;CU4JSc9qaC<)g*&a(}O1yemT5B@I`emb9` z^hwe7;nJWKiasNS#@Cd>jvIiI|8GvAitbNgWP2fngua_XQJ+g8=iO3C@X%CxlW!`& zM;n}<>f%79spNP=Dhb(}N{U}hB}bp6Qq(`Bl7ImVOpds~<cJHX^P~mzg2fByhMN{p zHAfbZA(h5FU_=_{$#tcXl4^tN(>TEWX%yXSX(a5gY2>tTx=Aq7Nnm_B{kkxn-g8en zz2aGepQV$K&Kbne3`(ZhplfA@S(h^?iNhJ3@Kgo~^3J5_24vEB{4>dEd?pFV&!i-p zGuiJ>^Zs-uL+>%u?qk#M@0pyqUzXk8rTnr;+3YNSXfk+L7De<(78i|!rv8^KO5loY zPT-r(_z-2@Q?re=XHzxnvMIUk*<@gUwu$}O;_mRjZ?egG-yE}e<dE~E91^fFhXXCm zA!oPekfWVB6#3yC#_}(6NMOfY5;P!}HZviY<K*YEeO)fccjub*e{U{B<bhnO;=5dm zYJijVp-ysC;xt<^CkNc-q;WoO-d}KX;J2M5_-iK#vGU0IfIKo7oX5;*Hqa%UWan{$ z#ylF$);w}@IFFoukVh5$&D4*~Cr0HnV$RJsJE45K>DGLX^Kd>_!?*G&@?HgGY-|Bl zGNS<gFCjIzfE`MKa=6q|KwY{EIN<IAQtT-phc6YF9Zmrw-c^OH4=<##&M9Q5&IfkE zmaYO=ih-AwP-0(}5`Qjrv0=wDZ67Z6D&vG{<!n$~&c&voob7HXXF$2#;1=Kn1caUC zRLw^<a9cF|v4%<Q)lFJ0#kfO&e*$i4h9t3hEn2PZvn99d2CaSsW#?|x_Tkc(*qW{b z#Syn?^)c#?+>VS0xz~<6wSBnMX^Xbc3j()k`*5l0UTq&PjlNH-RG|M3Z69RZxRV5I z*hxk<0q@552Z7k(tEfHNK3j54e@LsNU@_!ztq#d5cR;JvnCQjlwSBl0_kvar$jQcw zTKz5o<uEoR7~s<*+CJg9@hBD>%ozBJwhxygj&bqX_qtYcw)8Ae&Xz*n(DvC<k2e|8 z-EZ1P=~6r1q*Xp=@Vz%_&1c`F@pL$@?Zc(m<J57_Hd^z@Hnxvxqg!RPQB{p?4AD2W zk@MTysH*L4l*mJER8^~u@V}Q$gA=CX={9C4-vVy|=Misdbt5=@^&NNvMwtD9whx!e zKSL%YIz7b{?DXffota-~RSXei0HGaq<Qu9a|2wTR#ioFAw)7IvNBlqfCv6`tO$UAl zO!-;chfA>+w0*er18}C;!mnCww&eKKvPJ)hW!Z;IX&o%JADHEB*@sHKI}y`?Vk`Fp zPXfR1Y^f!{*SlJ_ilVz&$|a(nib5VHNCW<e2@YIgsZg|dv=<tPQC?%I{=kI;Ec<Y2 z)gVh%NdWS<)C&+<Pnfi1ziq*mE%K`-SoY!4bwH79*APpULj-+7IPvNT%XaS#5thr= z#a2{EKzJM|ZuSyT4vE@;l6VY>vTUPS0JIk!px8jO!OcKPUR!}~^g9ETv!v#Umii8& zJ_3}}uzhisnj>4Xsg`YHIa9%&1ePjPi0+zzH-XbzfkN0d36_1h<Oh^UcVhwxdOU&s zzA|_YD2Gd4(=GdO=|CdKi=S=TXG<x-{rDa;hvWV{-?Bq=S62!-8=69q_@$7;XrN?9 znLx??)&gZMcm^oz{ntPV*@IH~JsKzp#uA_;mv;gs(RdChk@e?PjyG_DWv6P>fRbmp z>QInG<GuwH<;y@>$3I=biM-M{aR^Xid@)c$?^>X^(~H0>?L>tHeUwH*eoZ5%L(<7u za5^P5HJ$zD0mqB~XQgwZ+YBB_=LF}|Iq>)liagffa-f`y>;uYbIW?1<)&eD7Jf2CT z`!SOYT>#4R+&hZ|1ZT0`lq_Kg{<j(h*+A^bqG&$NA}2kvDH;E4iZCUcB3xl`cQ$R} zZG*pMQ}iQqh_iqan5uKAqD??qtd5%ZuYvaOe*<zk!4!jwa%s)C=aR#hb7@RJ17#WY zc9PJcPI5NeNeNUr`TbF#M8?;gB;d4@D(slYi9_-z!4jZL4wrsILDu&N@@W)r=NlaY z?X6Y;-~9{7!Q29>s=k2!{BQvYZ7raUoB~RIpbLrpfD*d>3Mr}BLaL&?5dJUL-dIRu z*=#!O1xn^}1Sl!g$wG?MXQ5@Elmsl~`=W)E%xw!vz<mp;+c$u+eeY33V+${$Eleq5 zoXITWxRpgNPJC|>Iok)6!=?9%NMXNXigZLVMLM~dqR%Sk02_*FBTt*}pB9slznkx) zOQ_P+657nl5~^ZP361$f7YcH?bmbz7K5r3qwqX%P^~fT+&wGm~k*^lfJ@sNs&5$!; zpd2nOS<H4XEv5wDTTBMNT}+8x0Ls}?U?~Y&UrNGVPoN<C_zy~r)t50c`Ik}mQ_D!$ z+%ksD#xjcX)-sBIcNs<MDdWV)%1GcT)8D(C#@q`iXG_z{>DG4>UFsne<Z$UgIsNuf zIVU(~I-V{kVf`y;Y!MZVm{SZUR#4Yz6^t7<0OMu9P(h>Zw1g4W7bs^-)0eRRu_ea; z-&sPAe=_J(NdksdvSVZ=Rgzvw(Jil}+wG{N$d3RUWb;``i6mChX0oa%fn`;c+}bMI z#^x##{3>vy`2V>ob{tsE4!+e~bi%61;T_dnUbj`#x=&TpxQ5oyc#~@AUime4NL9;f zXrzzUP!%T({$4}l8&XRZBm-SywFR{ly$dLZOE=Y$;$MK0*>tO8;Ha)+oY+}M<9xS{ z6J4xhJn*Zhkvi**r0Pk~j(V!{-Fg!4(?G^T8{q%8E*m&OB2W&Oni^=7uQgC)7aM4V z{!2MPs=+l&$<Y%_Nzf^vq;B1ok)e!b%qI$$QH7PuD2Y3OvJu(8%teaZmQnQI7(Bm> z9C$A$LB7lB-*w9wCvIQPf%Y#a=kG5k0o@u|KcSHXr!|t$RgL`qSR*6k2aPns^R7m^ z&A=6;G;jq)Kha?F3JzGff&pXQ3Q~S>1&#B>3hMrs6*Rh@D=A68m0S~YR?;gr1E&Dr zS;@@kY8O@G%5bs6Mi(R03oZtXZwwA^qB~^)?OQTUbi>b@Ncfp1y643vdd=Ww5*pe} zf-0J6+&4FK{4LF7=xDRu&!x_o4qaAJXECdoL{48t<4QNU&eT7(ijnK6!S7d55?8I} zL_t6;5fT4R^A3}8Af@}8R{!{Gl~9l8590qrELQG91Gx$%ditAb7>~M6nm?<{U#%HL zeyWW${bWD4N_Mm6Tbt%@zw$TQ^b13qSUl6r`wH`YlBCyHTl`hJT+%I+m&?zirlCgp zN;A=q(gE*xXx?TyD&m**AMc{7LG3t{KkPZxzv1~%eBXSte{GkmK6v-jBL8-O68)Ox z9)M{aWKcE_2NZu$#&%9UZQ9q!3a0r3wfq%|#Y;q#G|TjT-(Zfx@rIdW(q3c!2GjXV zG?<2Gz1RS-_CGVDHW(Bm#HLwcSEU}8UrEfs9?jbgl77dTwj~n(E#8EYpWl)Gt4QEY zcr3Z1f%v1|MPZrd1%uPT-Dbe&WwWSxv*}6TFpD=|*2pR-(lL|d$$+N(faqHDHl4%~ zY?RbC83Q;1_>7zlYTmFZka<M@kBA>@{_Zb-*8@w0Iy_&Pfy>ReiI+)blo6+_Y!9Ff z_NMlxRQ81{<zj<ewXt{`0y}fH2+tG3u<7rbX#K}v&$Kh3-j;ptZ2x_%c=>2E-g}__ zdedhl-m#aoZ_CIHnjqjF;MeNE{@o#-f^Q?y1{-J9nPa%r^K$h@j#k?>mQ(OsWnC~6 zWt#e*G%p|Cqj(wV1)iwdf#>FS{a;kP)bt*{-KKe0M25Oc^R|WjN!IlT4f$WAc~2*) z9rv=_7KydXL4-_%Z(mAgY`#mv;xg@@6GN1JKA!2OZm`9RDt|QXQ#9|1RGRmbLhvR1 zx1ivI4xNEp@jNUmoCKqG1g#X8GG%{*attG9IZMs^t0;$PURaSo$qVl>V`Kxbz|&Xa z4e;Gd`u|BRSd7Fp{7UwCay>%0yey!|!r?Y`56T)Ku8IL4lVn8m!iprNk`?9S{e(yo z_^avP*YthLyzdtNue@xMAMw7OKkM2@a{ib=7NAs#@x~q&nm*sjil%t!=oi#ID|-N0 zP0=n#eo<At)b@?!kEV|-%X{TWU(_P<m(}Qf8KfN{a#m*_6qvfbz+^lXc*eAAmu+x? z!SVQ(Dd89d%m;3k%?EH3p8N33k`)!-o)qI2cNQaBEaEhS4l)DD`A;M2g3<U>%`0>A zmy7a8rtP?PQu|i(nqB)px!80VPdLWVc)pj@G&!&`-vipm|5JF`C1KRO?~~x8dAV?v znJ`YSRB7Jx+hXbt0e{xK#MoVILG$w3Uu5rK@kX5NF)L9YfU*y;gHhvm68}F&#d$gV zH3PmS;*$G5z-CidE%^b;FXNF-#ANYlZSMEVRvP6Uc-FL2&27fJWII=LnT;hI93w3P z4K-1wQMCDZyj_QU+0%(g<);}TRsxFY*CxLSqP#-3Ul?O8o<4ZSnelD`W|;C?IUkfc z@ZJy4d+pa>x50Dx@QUK);<<8p49{^hz-vIsmRd~P3nF?<{;1~VMfsCNb%~rCNP=nV zHfY|gJ0+1*7Nbl4pK;0JFJ&rX#Uc%hclJI($8|Ee`7S4#ui&{3&+n%07K6U%^RwiF zX3}23ZGxzucbN*#;C-+*_V<LTltaZ_Ni<AjNu38uM8tEqaBf8YfocDn#ClmyQGfeo z)-UO`Q;yhVX~*}~X3SqCK%qQE;*7-qH%y1+|76v=K@KPJlqufV3o!MEWmhBW5hBdM z!{z#(oCREpq`)`jL`-q@kuxSa^Oq}}hb~PZ{L2=r*t|bwI{#|$euEojYc5hyyqZ~m zX)QoqeLK;<f$~K=aYQy`>i&xIC^<*IWZ)ns)RbMrP*^RQsw4-dgY0<5nzEePH?@<9 z{BHY}Dc>dM`|T$G9_7&%?+s5t*&F3oB@CN3t#bKP(sA>iCH(*0ybP72c8PYfb5*>8 zU(s&jZbtVV(S9SIYCI!QH{E=nZ*Z0wFXU4Db_vesawSvorsQPHWExIMrzOKR9p45v zi2tI&bCL<6+!JN_9Y>DY&q}+Nfq^f%m(*y7dsmG<(Rwk+ZMo0Z=|L?gLne8SHE5S^ z`6%rA*5L4KtWH&h)zu{x<({*Rdb!o|UG!M*{EE_w^49(nZ}#%sy;?tLwM<Xw@9wcy z4{;Z-*U_zBQ@eEXL~qoYy0s<o>mIF-WtHnzznr#SZoh8Ul`XlAJzI0CCUm&U*HKtn zUFcXj)<4f#U7S-~Qe9I~wX}79y<Z2v>e?ksN=ph0d>v)Zn*8FzYKODPSyEnI)762$ z)THEChqJ2CQB+u7SmktomS@dqxh=PI%kiUqTkdV>?3sN~_wLYor0D@~x9@A(r?q(P zuYFp(Zd>Z*-hNsSYhAZvNB7ps{TV&AuRErz<?HL~aF!Q1{Azt2^~ELm#f}opSMI1S zug-Ut78clZme-c$6;?Sa7PbsnaUGaQ@GS7Lp3<#bUeR4!FP=Csuyyo>I)`Ujf4#q> zXU0%n=G9#&{0AfM%2I3iK&e_%RZ?D4Sl}orcQ_sO&ZUl;VyDfQ$LBho+o4Oov%I{b z#*tU(j;^#aTbhrKcW>`*jdeS!tZtqg#^^s=R&u=C>96wyU-8!~1n1OQ>jY2MS;L1r z90?0;s-2Fx3Gs=OX6DSD9XCbTijA8*Ki=0d2`z_=)1$ihUux<u8>jnwC&#0adrQ4_ zeFwYp`Eh!X`;&3nm#;nn`dXR9KS2AlCKEO8<_4>_V|7VUxwEw8?23WzrAw_QcbDbX z%br(*bVF~?xoP?_OV_%8ZLz{UCuitqJ9s-X{9>})+h*%0JQ;KJXv<T&)f%ncJGWWO zJU7qRJG?wkr0M-$o`<q@=T4ppd#xp2?iZi10z3ixtRTyMYLV{cPMxNExP70rdb*pY z=|1kS7U^T|N2lolS5+@9uW>dw3ahFrs=^%=OJE~Vue)Ng?&n^)-@3;A&VFlFm(nF! zj*JXvRgv5ODQk^;tjC(~d8SOKS)QfOT0y$wi0W|1h-!CkrOtMrs?-mA2l!Rx2f8;^ zX}_N1`~m{}#)mor#)k(7_>Bwpv{mU%+IA@qTxz}7KX)g$b{943jsJsB9kJXuuF~&_ zV^wq&FZ#YG9OxSDuHUYmEq*zxJd5tvBYXeDm0EJD4tbv3ubaI7kNxSxE*`j2QD3;x zQSG_-nLemJaHg^zaHORjJg@(ztGfMf-RYuF%f%Cu+~xUJCyzD6S~sX=^o4Idr(>*> zgT=Ahv<IJjz1?uH1)d%yR@}elV_UUna=CTf`tLl=15XR_y3EPK+`raZv;RMOng^a% z-`5Q%+v+)fyEO)$=7Fd6^S;c<;<UT}7V9^9ng^a1)IpqVhW6}wz^b#v)%seVjk~Q~ f-j_LCvUQoSdFr0DI_rPk**tKz>%9KCpWXcLTu3-1 diff --git a/po/en@boldquot.po b/po/en@boldquot.po index 6b388ff2e..f1cfc3b2a 100644 --- a/po/en@boldquot.po +++ b/po/en@boldquot.po @@ -1,7 +1,7 @@ # English translations for GNU bash package. -# Copyright (C) 2020 Free Software Foundation, Inc. +# Copyright (C) 2024 Free Software Foundation, Inc. # This file is distributed under the same license as the GNU bash package. -# Automatically generated, 2020. +# Automatically generated, 2024. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation @@ -30,10 +30,10 @@ # msgid "" msgstr "" -"Project-Id-Version: GNU bash 5.1-rc3\n" +"Project-Id-Version: GNU bash 5.3-alpha\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" -"PO-Revision-Date: 2020-11-28 12:51-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" +"PO-Revision-Date: 2024-04-05 12:15-0400\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en\n" @@ -42,123 +42,123 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "bad array subscript" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: removing nameref attribute" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: cannot convert indexed to associative array" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: cannot assign to non-numeric index" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: must use subscript when assigning associative array" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: cannot create: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: cannot find keymap for command" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: first non-whitespace character is not ‘\"’" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "no closing ‘%c’ in %s" -#: bashline.c:4697 +#: bashline.c:4785 #, c-format -msgid "%s: missing colon separator" -msgstr "%s: missing colon separator" +msgid "%s: missing separator" +msgstr "%s: missing separator" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "‘%s’: cannot unbind in command keymap" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "brace expansion: cannot allocate memory for %s" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" -msgstr "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" +msgstr "brace expansion: failed to allocate memory for %s elements" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "brace expansion: failed to allocate memory for ‘%s’" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "‘%s’: invalid alias name" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "line editing not enabled" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "‘%s’: invalid keymap name" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: cannot read: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "‘%s’: unknown function name" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s is not bound to any keys.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s can be invoked via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "‘%s’: cannot unbind" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "loop count" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "only meaningful in a ‘for’, ‘while’, or ‘until’ loop" -#: builtins/caller.def:136 +#: builtins/caller.def:135 msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -167,7 +167,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Returns the context of the current subroutine call.\n" " \n" @@ -177,351 +181,365 @@ msgstr "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME not set" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "too many arguments" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "null directory" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD not set" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "line %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "warning: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: usage: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: option requires an argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: numeric argument required" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: not found" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: invalid option" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: invalid option name" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "‘%s’: not a valid identifier" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "invalid octal number" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "invalid hex number" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "invalid number" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: invalid signal specification" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "‘%s’: not a pid or valid job spec" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: readonly variable" -#: builtins/common.c:273 -#, fuzzy, c-format +#: builtins/common.c:248 +#, c-format msgid "%s: cannot assign" -msgstr "%s: cannot unset" +msgstr "%s: cannot assign" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s out of range" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s out of range" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: no such job" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: no job control" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "no job control" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: restricted" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "restricted" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: not a shell builtin" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "write error: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "error setting terminal attributes: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "error getting terminal attributes: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: error retrieving current directory: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: ambiguous job spec" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "help not available in this version" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: not an indexed array" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: cannot unset: readonly %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: cannot unset" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: invalid action name" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: no completion specification" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "warning: -F option may not work as you expect" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "warning: -C option may not work as you expect" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "not currently executing completion function" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "can only be used in a function" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "cannot use ‘-f’ to make functions" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: readonly function" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: reference variable cannot be an array" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: nameref variable self references not allowed" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: circular name reference" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "‘%s’: invalid variable name for name reference" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: cannot destroy array variables in this way" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: cannot convert associative to indexed array" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: quoted compound array assignment deprecated" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynamic loading not available" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "cannot open shared object %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "%s: builtin names may not contain slashes" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "cannot find %s in shared object %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: dynamic builtin already loaded" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "load function for %s returns failure (%d): not loaded" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: not dynamically loaded" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: cannot delete: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: is a directory" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: not a regular file" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: file is too large" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: cannot execute binary file" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: cannot execute: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "logout\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "not login shell: use ‘exit’" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "There are stopped jobs.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "There are running jobs.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "no command found" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "history specification" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: cannot open temp file: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "current" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "job %d started without job control" @@ -536,11 +554,11 @@ msgstr "%s: illegal option -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: option requires an argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashing disabled" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: hash table empty\n" @@ -572,12 +590,12 @@ msgstr "" "no help topics match ‘%s’. Try ‘help help’ or ‘man -k %s’ " "or ‘info %s’." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: cannot open: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -598,21 +616,30 @@ msgstr "" "A star (*) next to a name means that the command is disabled.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "cannot use more than one of -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "history position" -#: builtins/history.def:338 +#: builtins/history.def:278 +msgid "empty filename" +msgstr "empty filename" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameter null or not set" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: invalid timestamp" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: history expansion failed" @@ -626,113 +653,113 @@ msgstr "%s: inlib failed" msgid "no other options allowed with `-x'" msgstr "no other options allowed with ‘-x’" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: arguments must be process or job IDs" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Unknown error" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "expression expected" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: not an indexed array" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: invalid file descriptor specification" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: invalid file descriptor: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: invalid line count" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: invalid array origin" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: invalid callback quantum" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "empty array variable name" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "array variable support required" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "‘%s’: missing format character" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "‘%c’: invalid time format specification" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "%%Q: string length: %s" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "‘%c’: invalid format character" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "warning: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "format parsing problem: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "missing hex digit for \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "missing unicode digit for \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "no other directory" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: invalid argument" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<no current directory>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "directory stack empty" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "directory stack index" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -777,7 +804,7 @@ msgstr "" "by\n" "\tdirs when invoked without options, starting with zero." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -823,7 +850,7 @@ msgstr "" " \n" " The ‘dirs’ builtin displays the directory stack." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -863,319 +890,327 @@ msgstr "" " \n" " The ‘dirs’ builtin displays the directory stack." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: invalid timeout specification" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "read error: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "can only ‘return’ from a function or sourced script" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "cannot simultaneously unset a function and a variable" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: not an array variable" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: not a function" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: cannot export" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "shift count" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "cannot set and unset shell options simultaneously" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: invalid shell option name" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "filename argument required" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: file not found" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "cannot suspend" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "cannot suspend a login shell" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s is aliased to ‘%s’\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s is a shell keyword\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s is a function\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s is a special shell builtin\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s is a function\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s is a shell builtin\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s is %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s is hashed (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: invalid limit argument" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "‘%c’: bad command" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: cannot get limit: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limit" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: cannot modify limit: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "octal number" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "‘%c’: invalid symbolic mode operator" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "‘%c’: invalid symbolic mode character" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " line " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "last command: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Aborting..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORM: " -#: error.c:310 -#, fuzzy, c-format +#: error.c:261 +#, c-format msgid "DEBUG warning: " -msgstr "warning: " +msgstr "DEBUG warning: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "unknown command error" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "bad command type" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "bad connector" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "bad jump" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: unbound variable" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\atimed out waiting for input: auto-logout\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "cannot redirect standard input from /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: ‘%c’: invalid format character" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] still exists" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "pipe error" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "invalid regular expression ‘%s’: %s" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "invalid regular expression ‘%s’" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: maximum eval nesting level exceeded (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: maximum source nesting level exceeded (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: maximum function nesting level exceeded (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restricted: cannot specify ‘/’ in command names" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: command not found" -#: execute_cmd.c:5957 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" - -#: execute_cmd.c:5975 -#, fuzzy, c-format -msgid "%s: cannot execute: required file not found" -msgstr "%s: cannot execute binary file" - -#: execute_cmd.c:6000 +#: execute_cmd.c:6118 #, c-format msgid "%s: %s: bad interpreter" msgstr "%s: %s: bad interpreter" -#: execute_cmd.c:6037 +#: execute_cmd.c:6127 #, c-format -msgid "%s: cannot execute binary file: %s" -msgstr "%s: cannot execute binary file: %s" +msgid "%s: cannot execute: required file not found" +msgstr "%s: cannot execute: required file not found" -#: execute_cmd.c:6123 +#: execute_cmd.c:6164 #, c-format -msgid "`%s': is a special builtin" -msgstr "‘%s’: is a special builtin" +msgid "%s: cannot execute binary file: %s" +msgstr "%s: cannot execute binary file: %s" -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "cannot duplicate fd %d to fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "expression recursion level exceeded" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "recursion stack underflow" -#: expr.c:478 -msgid "syntax error in expression" -msgstr "syntax error in expression" +#: expr.c:472 +msgid "arithmetic syntax error in expression" +msgstr "arithmetic syntax error in expression" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "attempted assignment to non-variable" -#: expr.c:531 -msgid "syntax error in variable assignment" -msgstr "syntax error in variable assignment" +#: expr.c:525 +msgid "arithmetic syntax error in variable assignment" +msgstr "arithmetic syntax error in variable assignment" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "division by 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bug: bad expassign token" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "‘:’ expected for conditional expression" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exponent less than 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "identifier expected after pre-increment or pre-decrement" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "missing ‘)’" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" -msgstr "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +msgid "arithmetic syntax error: operand expected" +msgstr "arithmetic syntax error: operand expected" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" -msgstr "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "--: assignment requires lvalue" -#: expr.c:1518 +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "++: assignment requires lvalue" + +#: expr.c:1492 +msgid "arithmetic syntax error: invalid arithmetic operator" +msgstr "arithmetic syntax error: invalid arithmetic operator" + +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (error token is “%s”)" @@ -1192,7 +1227,7 @@ msgstr "invalid integer constant" msgid "value too great for base" msgstr "value too great for base" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: expression error\n" @@ -1201,46 +1236,51 @@ msgstr "%s: expression error\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: cannot access parent directories" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "‘%s’: is a special builtin" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "cannot reset nodelay mode for fd %d" -#: input.c:266 +#: input.c:254 #, 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:274 +#: input.c:262 #, 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:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "forked pid %d appears in running job %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "deleting stopped job %d with process group %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) marked as still alive" @@ -1250,137 +1290,137 @@ msgstr "add_process: pid %5ld (%s) marked as still alive" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: no such pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Done" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Stopped" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Stopped(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Running" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Done(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Exit %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Unknown status" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(core dumped) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "child setpgid (%ld to %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, 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:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: No record of process %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: job %d is stopped" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: no current jobs" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: job has terminated" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: job %d already in background" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: turning on WNOHANG to avoid indefinite block" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: line %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (core dumped)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd now: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp failed" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: no job control in background" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: line discipline" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "cannot set terminal process group (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "no job control in this shell" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: failed assertion: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1389,150 +1429,150 @@ msgstr "" "\r\n" "malloc: %s:%d: assertion botched\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "unknown" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: block on free list clobbered" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: called with already freed block argument" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: called with unallocated block argument" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: underflow detected; mh_nbytes out of range" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: underflow detected; magic8 corrupted" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: start and end chunk sizes differ" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: called with unallocated block argument" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: underflow detected; mh_nbytes out of range" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: underflow detected; magic8 corrupted" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: start and end chunk sizes differ" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format 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:200 +#: lib/malloc/table.c:188 #, 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:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p already in table as free?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "invalid base" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: host unknown" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: invalid service" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: bad network path specification" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "network operations not supported" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: cannot change locale (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: cannot change locale (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: cannot change locale (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: cannot change locale (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "You have mail in $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "You have new mail in $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "The mail in %s has been read\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "syntax error: arithmetic expression required" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "syntax error: ‘;’ unexpected" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "syntax error: ‘((%s))’" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: bad instruction type %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "here-document at line %d delimited by end-of-file (wanted ‘%s’)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: redirection instruction ‘%d’ out of range" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " @@ -1541,228 +1581,238 @@ msgstr "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" -#: parse.y:2921 +#: parse.y:2810 +#, c-format +msgid "script file read error: %s" +msgstr "script file read error: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "maximum here-document count exceeded" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "unexpected EOF while looking for matching ‘%c’" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "unexpected EOF while looking for ‘]]’" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "syntax error in conditional expression: unexpected token ‘%s’" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "syntax error in conditional expression" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "unexpected token ‘%s’, expected ‘)’" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "expected ‘)’" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "unexpected argument ‘%s’ to conditional unary operator" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "unexpected argument to conditional unary operator" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "unexpected token ‘%s’, conditional binary operator expected" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "conditional binary operator expected" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "unexpected argument ‘%s’ to conditional binary operator" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "unexpected argument to conditional binary operator" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "unexpected token ‘%c’ in conditional command" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "unexpected token ‘%s’ in conditional command" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "unexpected token %d in conditional command" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "syntax error near unexpected token ‘%s’" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "syntax error near ‘%s’" -#: parse.y:6151 +#: parse.y:6769 +#, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "syntax error: unexpected end of file from command on line %d" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "syntax error: unexpected end of file" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "syntax error" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Use “%s” to leave the shell.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "unexpected EOF while looking for matching ‘)’" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: function ‘%s’ not found" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: possible retry loop" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: bad connector ‘%d’" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: invalid file descriptor" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: NULL file pointer" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: ‘%c’: invalid format character" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "file descriptor out of range" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: ambiguous redirect" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: cannot overwrite existing file" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restricted: cannot redirect output" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "cannot create temp file for here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: cannot assign fd to variable" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port not supported without networking" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "redirection error: cannot duplicate fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "could not find /tmp, please create!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp must be a valid directory name" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "pretty-printing mode ignored in interactive shells" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: invalid option" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "cannot set uid to %d: effective uid %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "cannot set gid to %d: effective gid %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "cannot start debugger; debugging mode disabled" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: Is a directory" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "I have no name!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, version %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1771,52 +1821,52 @@ msgstr "" "Usage:\t%s [GNU long option] [option] ...\n" "\t%s [GNU long option] [option] script-file ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU long options:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Shell options:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s or -o option\n" -#: shell.c:2094 +#: shell.c:2086 #, 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:2095 +#: shell.c:2087 #, 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:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Use the ‘bashbug’ command to report bugs.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bash home page: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: invalid operation" @@ -1986,96 +2036,100 @@ msgstr "Information request" msgid "Unknown Signal #%d" msgstr "Unknown Signal #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "bad substitution: no closing ‘%s’ in %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: cannot assign list to array member" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "cannot make pipe for process substitution" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "cannot make child for process substitution" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "cannot open named pipe %s for reading" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "cannot open named pipe %s for writing" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "cannot duplicate named pipe %s as fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "command substitution: ignored null byte in input" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "function_substitute: cannot open anonymous file for output" + +#: subst.c:7064 +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" +"function_substitute: cannot duplicate anonymous file as standard output" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "cannot make pipe for command substitution" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "cannot make child for command substitution" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: cannot duplicate pipe as fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: invalid variable name for name reference" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: invalid indirect expansion" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: invalid variable name" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parameter not set" +msgid "%s: bad substitution" +msgstr "%s: bad substitution" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parameter null or not set" +msgid "%s: parameter not set" +msgstr "%s: parameter not set" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: substring expression < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: bad substitution" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: cannot assign in this way" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2083,160 +2137,167 @@ msgstr "" "future versions of the shell will force evaluation as an arithmetic " "substitution" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "bad substitution: no closing “`” in %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "no match: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argument expected" -#: test.c:156 +#: test.c:164 #, c-format -msgid "%s: integer expression expected" -msgstr "%s: integer expression expected" +msgid "%s: integer expected" +msgstr "%s: integer expected" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "‘)’ expected" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "‘)’ expected, found %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: binary operator expected" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: unary operator expected" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "missing ‘]’" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "syntax error: ‘%s’ unexpected" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "invalid signal number" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: maximum trap handler level exceeded (%d)" -#: trap.c:412 +#: trap.c:450 #, 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:416 +#: trap.c:454 #, 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:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: bad signal %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "error importing function definition for ‘%s’" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "shell level (%d) too high, resetting to 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "%s: maximum nameref depth (%d) exceeded" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: no function context at current scope" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: variable may not be assigned value" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" -msgstr "" +msgstr "%s: cannot inherit value from incompatible type" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: assigning integer to name reference" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: no function context at current scope" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s has null exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "invalid character %d in exportstr for %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "no ‘=’ in exportstr for %s" -#: variables.c:5317 +#: variables.c:5331 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:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: no global_variables context" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: head of shell_variables not a temporary environment scope" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: cannot open as FILE" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: invalid value for trace file descriptor" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: compatibility value out of range" -#: version.c:46 version2.c:46 -#, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." -msgstr "Copyright (C) 2020 Free Software Foundation, Inc." +#: version.c:46 +msgid "Copyright (C) 2024 Free Software Foundation, Inc." +msgstr "Copyright (C) 2024 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2244,35 +2305,35 @@ msgstr "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, version %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "This is free software; you are free to change and redistribute it." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "There is NO WARRANTY, to the extent permitted by law." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: cannot allocate %lu bytes (%lu bytes allocated)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: cannot allocate %lu bytes" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: cannot allocate %lu bytes" @@ -2310,8 +2371,8 @@ msgid "caller [expr]" msgstr "caller [expr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" -msgstr "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" +msgstr "cd [-L|[-P [-e]]] [-@] [dir]" #: builtins.c:68 msgid "pwd [-LP]" @@ -2322,18 +2383,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] command [arg ...]" #: builtins.c:78 -#, fuzzy msgid "" "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " "[name ...]" -msgstr "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" #: builtins.c:80 -#, fuzzy msgid "" "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " "[name ...]" -msgstr "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..." +msgstr "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2421,10 +2484,10 @@ msgstr "let arg [arg ...]" #: builtins.c:138 msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" #: builtins.c:140 @@ -2432,9 +2495,8 @@ msgid "return [n]" msgstr "return [n]" #: builtins.c:142 -#, fuzzy msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]" -msgstr "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]" +msgstr "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]" #: builtins.c:144 msgid "unset [-f] [-v] [-n] [name ...]" @@ -2473,17 +2535,16 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" -msgstr "trap [-lp] [[arg] signal_spec ...]" +msgid "trap [-Plp] [[action] signal_spec ...]" +msgstr "trap [-Plp] [[action] signal_spec ...]" #: builtins.c:168 msgid "type [-afptP] name [name ...]" msgstr "type [-afptP] name [name ...]" #: builtins.c:171 -#, fuzzy msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]" -msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]" +msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]" #: builtins.c:174 msgid "umask [-p] [-S] [mode]" @@ -2498,26 +2559,30 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "! PIPELINE" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAME [in WORDS ... ] ; do COMMANDS; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do COMMANDS; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAME [in WORDS ... ;] do COMMANDS; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2525,65 +2590,63 @@ msgstr "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" -#: builtins.c:196 -#, fuzzy +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" -msgstr "while COMMANDS; do COMMANDS; done" +msgstr "while COMMANDS; do COMMANDS-2; done" -#: builtins.c:198 -#, fuzzy +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" -msgstr "until COMMANDS; do COMMANDS; done" +msgstr "until COMMANDS; do COMMANDS-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAME] command [redirections]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function name { COMMANDS ; } or name () { COMMANDS ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ COMMANDS ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expression ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expression ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Names and meanings of some shell variables" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [optname ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [arguments]" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " @@ -2593,19 +2656,21 @@ msgstr "" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " "suffix] [name ...]" -#: builtins.c:235 +#: builtins.c:237 msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o option] [-DEI] [name ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2613,7 +2678,7 @@ msgstr "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2621,7 +2686,7 @@ msgstr "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2658,7 +2723,7 @@ msgstr "" "been\n" " defined." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2674,7 +2739,7 @@ msgstr "" " \n" " Return success unless a NAME is not an existing alias." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2754,7 +2819,7 @@ msgstr "" " Exit Status:\n" " bind returns 0 unless an unrecognized option is given or an error occurs." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2772,7 +2837,7 @@ msgstr "" " Exit Status:\n" " The exit status is 0 unless N is not greater than or equal to 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2790,7 +2855,7 @@ msgstr "" " Exit Status:\n" " The exit status is 0 unless N is not greater than or equal to 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2814,7 +2879,7 @@ msgstr "" " Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n" " not a shell builtin." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2843,13 +2908,13 @@ msgstr "" " Returns 0 unless the shell is not executing a shell function or EXPR\n" " is invalid." -#: builtins.c:387 +#: builtins.c:389 msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2891,7 +2956,7 @@ msgstr "" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is “-”, it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2930,7 +2995,7 @@ msgstr "" "when\n" " -P is used; non-zero otherwise." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2958,7 +3023,7 @@ msgstr "" " Returns 0 unless an invalid option is given or the current directory\n" " cannot be read." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2974,7 +3039,7 @@ msgstr "" " Exit Status:\n" " Always succeeds." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2986,7 +3051,7 @@ msgstr "" " Exit Status:\n" " Always succeeds." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2998,7 +3063,7 @@ msgstr "" " Exit Status:\n" " Always fails." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3033,7 +3098,7 @@ msgstr "" " Exit Status:\n" " Returns exit status of COMMAND, or failure if COMMAND is not found." -#: builtins.c:490 +#: builtins.c:492 msgid "" "Set variable values and attributes.\n" " \n" @@ -3061,7 +3126,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3100,7 +3166,9 @@ msgstr "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using ‘+’ instead of ‘-’ turns off the given attribute.\n" +" Using ‘+’ instead of ‘-’ turns off the given attribute, " +"except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the ‘let’ command) performed when the variable is assigned a " @@ -3114,7 +3182,7 @@ msgstr "" " Returns success unless an invalid option is supplied or a variable\n" " assignment error occurs." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3124,7 +3192,7 @@ msgstr "" " \n" " A synonym for ‘declare’. See ‘help declare’." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3150,7 +3218,7 @@ msgstr "" " Returns success unless an invalid option is supplied, a variable\n" " assignment error occurs, or the shell is not executing a function." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3226,7 +3294,7 @@ msgstr "" " Exit Status:\n" " Returns success unless a write error occurs." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3248,7 +3316,7 @@ msgstr "" " Exit Status:\n" " Returns success unless a write error occurs." -#: builtins.c:612 +#: builtins.c:615 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3268,6 +3336,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3292,13 +3366,19 @@ msgstr "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include “.” to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the ‘test’ found in $PATH instead of the shell builtin\n" " version, type ‘enable -n test’.\n" " \n" " Exit Status:\n" " Returns success unless NAME is not a shell builtin or an error occurs." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3318,7 +3398,7 @@ msgstr "" " Exit Status:\n" " Returns exit status of command or success if command is null." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3399,7 +3479,7 @@ msgstr "" " Returns success if an option is found; fails if the end of options is\n" " encountered or an error occurs." -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3441,7 +3521,7 @@ msgstr "" " Returns success unless COMMAND is not found or a redirection error " "occurs." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3453,7 +3533,7 @@ msgstr "" " Exits the shell with a status of N. If N is omitted, the exit status\n" " is that of the last command executed." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3467,7 +3547,7 @@ msgstr "" "executed\n" " in a login shell." -#: builtins.c:734 +#: builtins.c:742 msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3492,6 +3572,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3521,11 +3603,13 @@ msgstr "" "executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3545,7 +3629,7 @@ msgstr "" " Exit Status:\n" " Status of command placed in foreground, or failure if an error occurs." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3569,7 +3653,7 @@ msgstr "" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3613,7 +3697,7 @@ msgstr "" " Exit Status:\n" " Returns success unless NAME is not found or an invalid option is given." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3653,7 +3737,7 @@ msgstr "" " Returns success unless PATTERN is not found or an invalid option is " "given." -#: builtins.c:842 +#: builtins.c:852 msgid "" "Display or manipulate the history list.\n" " \n" @@ -3677,7 +3761,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3710,7 +3798,11 @@ msgstr "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3720,7 +3812,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or an error occurs." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3764,7 +3856,7 @@ msgstr "" " Returns success unless an invalid option is given or an error occurs.\n" " If -x is used, returns the exit status of COMMAND." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3794,7 +3886,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option or JOBSPEC is given." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3836,7 +3928,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or an error occurs." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3922,8 +4014,7 @@ msgstr "" " Exit Status:\n" " If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise." -#: builtins.c:994 -#, fuzzy +#: builtins.c:1008 msgid "" "Read a line from the standard input and split it into fields.\n" " \n" @@ -3947,6 +4038,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3985,7 +4078,9 @@ msgstr "" " 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" -" delimiters.\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" +" and newline.\n" " \n" " If no NAMEs are supplied, the line read is stored in the REPLY " "variable.\n" @@ -3996,6 +4091,8 @@ msgstr "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -4025,7 +4122,7 @@ msgstr "" "occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4045,7 +4142,7 @@ msgstr "" " Exit Status:\n" " Returns N, or failure if the shell is not executing a function or script." -#: builtins.c:1055 +#: builtins.c:1071 msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -4121,6 +4218,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4204,6 +4305,10 @@ msgstr "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4213,7 +4318,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4253,7 +4358,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or a NAME is read-only." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4287,7 +4392,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or NAME is invalid." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4325,7 +4430,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or NAME is invalid." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4343,7 +4448,7 @@ msgstr "" " Exit Status:\n" " Returns success unless N is negative or greater than $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4367,15 +4472,17 @@ msgstr "" " Returns the status of the last command executed in FILENAME; fails if\n" " FILENAME cannot be read." -#: builtins.c:1246 +#: builtins.c:1266 msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4383,15 +4490,17 @@ msgstr "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4553,7 +4662,7 @@ msgstr "" " Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n" " false or an invalid argument is given." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4566,7 +4675,7 @@ msgstr "" "must\n" " be a literal ‘]’, to match the opening ‘[’." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4586,7 +4695,7 @@ msgstr "" " Exit Status:\n" " Always succeeds." -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -4594,31 +4703,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4635,32 +4749,37 @@ msgstr "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or ‘-’, each specified signal is reset to its " "original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4671,7 +4790,7 @@ msgstr "" " Returns success unless a SIGSPEC is invalid or an invalid option is " "given." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4729,7 +4848,7 @@ msgstr "" " Returns success if all of the NAMEs are found; fails if any are not " "found." -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -4771,9 +4890,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4819,14 +4939,15 @@ msgstr "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4858,7 +4979,7 @@ msgstr "" " Exit Status:\n" " Returns success unless MODE is invalid or an invalid option is given." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -4918,7 +5039,7 @@ msgstr "" " option is given, or if -n is supplied and the shell has no unwaited-for\n" " children." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -4944,7 +5065,21 @@ msgstr "" "invalid\n" " option is given." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4960,15 +5095,15 @@ msgstr "" " \n" " The ‘for’ loop executes a sequence of commands for each member in " "a\n" -" list of items. If ‘in WORDS ...;’ is not present, then ‘in “" -"$@”’ is\n" +" list of items. If ‘in WORDS ...;’ is not present, then ‘in " +"“$@”’ is\n" " assumed. For each element in WORDS, NAME is set to that element, and\n" " the COMMANDS are executed.\n" " \n" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4998,7 +5133,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5021,8 +5156,8 @@ msgstr "" " \n" " The WORDS are expanded, generating a list of words. The\n" " set of expanded words is printed on the standard error, each\n" -" preceded by a number. If ‘in WORDS’ is not present, ‘in “" -"$@”’\n" +" preceded by a number. If ‘in WORDS’ is not present, ‘in " +"“$@”’\n" " is assumed. The PS3 prompt is then displayed and a line read\n" " from the standard input. If the line consists of the number\n" " corresponding to one of the displayed words, then NAME is set\n" @@ -5035,7 +5170,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5063,7 +5198,7 @@ msgstr "" " Exit Status:\n" " The return status is the return status of PIPELINE." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5081,7 +5216,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5119,8 +5254,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1648 -#, fuzzy +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" @@ -5133,14 +5267,14 @@ msgid "" msgstr "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS as long as the final command in the\n" -" ‘while’ COMMANDS has an exit status of zero.\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" +" an exit status of zero.\n" " \n" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1660 -#, fuzzy +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" @@ -5153,13 +5287,14 @@ msgid "" msgstr "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS as long as the final command in the\n" -" ‘until’ COMMANDS has an exit status which is not zero.\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" +" an exit status which is not zero.\n" " \n" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5181,7 +5316,7 @@ msgstr "" " Exit Status:\n" " The coproc command returns an exit status of 0." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5205,7 +5340,7 @@ msgstr "" " Exit Status:\n" " Returns success unless NAME is readonly." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5223,7 +5358,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5248,7 +5383,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the resumed job." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5266,7 +5401,7 @@ msgstr "" " Exit Status:\n" " Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5320,7 +5455,7 @@ msgstr "" " Exit Status:\n" " 0 or 1 depending on value of EXPRESSION." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5424,7 +5559,7 @@ msgstr "" " HISTIGNORE\tA colon-separated list of patterns used to decide which\n" " \t\tcommands should be saved on the history list.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5482,7 +5617,7 @@ msgstr "" " Returns success unless an invalid argument is supplied or the directory\n" " change fails." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5534,7 +5669,7 @@ msgstr "" " Returns success unless an invalid argument is supplied or the directory\n" " change fails." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5589,7 +5724,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5625,8 +5760,7 @@ msgstr "" " Returns success if OPTNAME is enabled; fails if an invalid option is\n" " given or OPTNAME is disabled." -#: builtins.c:1938 -#, fuzzy +#: builtins.c:1978 msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5643,9 +5777,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5681,12 +5815,14 @@ msgstr "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" +" %Q\tlike %q, but apply any precision to the unquoted argument before\n" +" \t\tquoting\n" " %(fmt)T\toutput the date-time string resulting from using FMT as a " "format\n" " \t string for strftime(3)\n" @@ -5702,15 +5838,15 @@ msgstr "" "assignment\n" " error occurs." -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5736,9 +5872,9 @@ msgstr "" " \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" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5760,14 +5896,18 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." -#: builtins.c:2004 +#: builtins.c:2044 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5775,14 +5915,18 @@ msgstr "" "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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -5843,7 +5987,7 @@ msgstr "" " Returns success unless an invalid option is supplied or NAME does not\n" " have a completion specification defined." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -5923,7 +6067,7 @@ msgstr "" "or\n" " not an indexed array." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5932,7 +6076,3 @@ msgstr "" "Read lines from a file into an array variable.\n" " \n" " A synonym for ‘mapfile’." - -#, c-format -#~ msgid "%s: invalid associative array key" -#~ msgstr "%s: invalid associative array key" diff --git a/po/en@quot.gmo b/po/en@quot.gmo index 710a9d7cd07e07776bd2c11abe4dbd22c4479b04..9142a3d5567a01bd38316f69169e2c3495a328a7 100644 GIT binary patch delta 26594 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 CT}3wl delta 14264 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 diff --git a/po/en@quot.po b/po/en@quot.po index b7668e289..1e7a749e7 100644 --- a/po/en@quot.po +++ b/po/en@quot.po @@ -1,7 +1,7 @@ # English translations for GNU bash package. -# Copyright (C) 2020 Free Software Foundation, Inc. +# Copyright (C) 2024 Free Software Foundation, Inc. # This file is distributed under the same license as the GNU bash package. -# Automatically generated, 2020. +# Automatically generated, 2024. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation @@ -27,10 +27,10 @@ # msgid "" msgstr "" -"Project-Id-Version: GNU bash 5.1-rc3\n" +"Project-Id-Version: GNU bash 5.3-alpha\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" -"PO-Revision-Date: 2020-11-28 12:51-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" +"PO-Revision-Date: 2024-04-05 12:15-0400\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en\n" @@ -39,123 +39,123 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "bad array subscript" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: removing nameref attribute" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: cannot convert indexed to associative array" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: cannot assign to non-numeric index" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: must use subscript when assigning associative array" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: cannot create: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: cannot find keymap for command" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: first non-whitespace character is not ‘\"’" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "no closing ‘%c’ in %s" -#: bashline.c:4697 +#: bashline.c:4785 #, c-format -msgid "%s: missing colon separator" -msgstr "%s: missing colon separator" +msgid "%s: missing separator" +msgstr "%s: missing separator" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "‘%s’: cannot unbind in command keymap" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "brace expansion: cannot allocate memory for %s" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" -msgstr "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" +msgstr "brace expansion: failed to allocate memory for %s elements" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "brace expansion: failed to allocate memory for ‘%s’" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "‘%s’: invalid alias name" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "line editing not enabled" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "‘%s’: invalid keymap name" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: cannot read: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "‘%s’: unknown function name" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s is not bound to any keys.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s can be invoked via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "‘%s’: cannot unbind" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "loop count" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "only meaningful in a ‘for’, ‘while’, or ‘until’ loop" -#: builtins/caller.def:136 +#: builtins/caller.def:135 msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -164,7 +164,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Returns the context of the current subroutine call.\n" " \n" @@ -173,351 +177,365 @@ msgstr "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME not set" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "too many arguments" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "null directory" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD not set" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "line %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "warning: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: usage: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: option requires an argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: numeric argument required" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: not found" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: invalid option" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: invalid option name" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "‘%s’: not a valid identifier" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "invalid octal number" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "invalid hex number" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "invalid number" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: invalid signal specification" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "‘%s’: not a pid or valid job spec" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: readonly variable" -#: builtins/common.c:273 -#, fuzzy, c-format +#: builtins/common.c:248 +#, c-format msgid "%s: cannot assign" -msgstr "%s: cannot unset" +msgstr "%s: cannot assign" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s out of range" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s out of range" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: no such job" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: no job control" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "no job control" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: restricted" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "restricted" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: not a shell builtin" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "write error: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "error setting terminal attributes: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "error getting terminal attributes: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: error retrieving current directory: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: ambiguous job spec" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "help not available in this version" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: not an indexed array" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: cannot unset: readonly %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: cannot unset" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: invalid action name" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: no completion specification" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "warning: -F option may not work as you expect" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "warning: -C option may not work as you expect" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "not currently executing completion function" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "can only be used in a function" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "cannot use ‘-f’ to make functions" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: readonly function" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: reference variable cannot be an array" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: nameref variable self references not allowed" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: circular name reference" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "‘%s’: invalid variable name for name reference" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: cannot destroy array variables in this way" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: cannot convert associative to indexed array" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: quoted compound array assignment deprecated" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynamic loading not available" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "cannot open shared object %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "%s: builtin names may not contain slashes" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "cannot find %s in shared object %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: dynamic builtin already loaded" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "load function for %s returns failure (%d): not loaded" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: not dynamically loaded" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: cannot delete: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: is a directory" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: not a regular file" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: file is too large" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: cannot execute binary file" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: cannot execute: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "logout\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "not login shell: use ‘exit’" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "There are stopped jobs.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "There are running jobs.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "no command found" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "history specification" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: cannot open temp file: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "current" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "job %d started without job control" @@ -532,11 +550,11 @@ msgstr "%s: illegal option -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: option requires an argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashing disabled" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: hash table empty\n" @@ -567,12 +585,12 @@ msgid "" msgstr "" "no help topics match ‘%s’. Try ‘help help’ or ‘man -k %s’ or ‘info %s’." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: cannot open: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -591,21 +609,30 @@ msgstr "" "A star (*) next to a name means that the command is disabled.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "cannot use more than one of -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "history position" -#: builtins/history.def:338 +#: builtins/history.def:278 +msgid "empty filename" +msgstr "empty filename" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameter null or not set" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: invalid timestamp" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: history expansion failed" @@ -619,113 +646,113 @@ msgstr "%s: inlib failed" msgid "no other options allowed with `-x'" msgstr "no other options allowed with ‘-x’" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: arguments must be process or job IDs" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Unknown error" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "expression expected" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: not an indexed array" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: invalid file descriptor specification" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: invalid file descriptor: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: invalid line count" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: invalid array origin" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: invalid callback quantum" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "empty array variable name" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "array variable support required" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "‘%s’: missing format character" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "‘%c’: invalid time format specification" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "%%Q: string length: %s" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "‘%c’: invalid format character" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "warning: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "format parsing problem: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "missing hex digit for \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "missing unicode digit for \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "no other directory" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: invalid argument" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<no current directory>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "directory stack empty" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "directory stack index" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -769,7 +796,7 @@ msgstr "" "by\n" "\tdirs when invoked without options, starting with zero." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -815,7 +842,7 @@ msgstr "" " \n" " The ‘dirs’ builtin displays the directory stack." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -853,319 +880,327 @@ msgstr "" " \n" " The ‘dirs’ builtin displays the directory stack." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: invalid timeout specification" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "read error: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "can only ‘return’ from a function or sourced script" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "cannot simultaneously unset a function and a variable" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: not an array variable" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: not a function" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: cannot export" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "shift count" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "cannot set and unset shell options simultaneously" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: invalid shell option name" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "filename argument required" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: file not found" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "cannot suspend" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "cannot suspend a login shell" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s is aliased to ‘%s’\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s is a shell keyword\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s is a function\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s is a special shell builtin\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s is a function\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s is a shell builtin\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s is %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s is hashed (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: invalid limit argument" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "‘%c’: bad command" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: cannot get limit: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limit" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: cannot modify limit: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "octal number" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "‘%c’: invalid symbolic mode operator" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "‘%c’: invalid symbolic mode character" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " line " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "last command: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Aborting..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORM: " -#: error.c:310 -#, fuzzy, c-format +#: error.c:261 +#, c-format msgid "DEBUG warning: " -msgstr "warning: " +msgstr "DEBUG warning: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "unknown command error" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "bad command type" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "bad connector" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "bad jump" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: unbound variable" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\atimed out waiting for input: auto-logout\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "cannot redirect standard input from /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: ‘%c’: invalid format character" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] still exists" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "pipe error" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "invalid regular expression ‘%s’: %s" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "invalid regular expression ‘%s’" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: maximum eval nesting level exceeded (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: maximum source nesting level exceeded (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: maximum function nesting level exceeded (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restricted: cannot specify ‘/’ in command names" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: command not found" -#: execute_cmd.c:5957 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" - -#: execute_cmd.c:5975 -#, fuzzy, c-format -msgid "%s: cannot execute: required file not found" -msgstr "%s: cannot execute binary file" - -#: execute_cmd.c:6000 +#: execute_cmd.c:6118 #, c-format msgid "%s: %s: bad interpreter" msgstr "%s: %s: bad interpreter" -#: execute_cmd.c:6037 +#: execute_cmd.c:6127 #, c-format -msgid "%s: cannot execute binary file: %s" -msgstr "%s: cannot execute binary file: %s" +msgid "%s: cannot execute: required file not found" +msgstr "%s: cannot execute: required file not found" -#: execute_cmd.c:6123 +#: execute_cmd.c:6164 #, c-format -msgid "`%s': is a special builtin" -msgstr "‘%s’: is a special builtin" +msgid "%s: cannot execute binary file: %s" +msgstr "%s: cannot execute binary file: %s" -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "cannot duplicate fd %d to fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "expression recursion level exceeded" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "recursion stack underflow" -#: expr.c:478 -msgid "syntax error in expression" -msgstr "syntax error in expression" +#: expr.c:472 +msgid "arithmetic syntax error in expression" +msgstr "arithmetic syntax error in expression" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "attempted assignment to non-variable" -#: expr.c:531 -msgid "syntax error in variable assignment" -msgstr "syntax error in variable assignment" +#: expr.c:525 +msgid "arithmetic syntax error in variable assignment" +msgstr "arithmetic syntax error in variable assignment" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "division by 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bug: bad expassign token" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "‘:’ expected for conditional expression" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exponent less than 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "identifier expected after pre-increment or pre-decrement" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "missing ‘)’" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" -msgstr "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +msgid "arithmetic syntax error: operand expected" +msgstr "arithmetic syntax error: operand expected" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" -msgstr "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "--: assignment requires lvalue" -#: expr.c:1518 +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "++: assignment requires lvalue" + +#: expr.c:1492 +msgid "arithmetic syntax error: invalid arithmetic operator" +msgstr "arithmetic syntax error: invalid arithmetic operator" + +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (error token is “%s”)" @@ -1182,7 +1217,7 @@ msgstr "invalid integer constant" msgid "value too great for base" msgstr "value too great for base" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: expression error\n" @@ -1191,46 +1226,51 @@ msgstr "%s: expression error\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: cannot access parent directories" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "‘%s’: is a special builtin" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "cannot reset nodelay mode for fd %d" -#: input.c:266 +#: input.c:254 #, 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:274 +#: input.c:262 #, 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:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "forked pid %d appears in running job %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "deleting stopped job %d with process group %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) marked as still alive" @@ -1240,137 +1280,137 @@ msgstr "add_process: pid %5ld (%s) marked as still alive" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: no such pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Done" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Stopped" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Stopped(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Running" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Done(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Exit %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Unknown status" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(core dumped) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "child setpgid (%ld to %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, 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:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: No record of process %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: job %d is stopped" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: no current jobs" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: job has terminated" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: job %d already in background" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: turning on WNOHANG to avoid indefinite block" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: line %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (core dumped)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd now: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp failed" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: no job control in background" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: line discipline" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "cannot set terminal process group (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "no job control in this shell" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: failed assertion: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1379,150 +1419,150 @@ msgstr "" "\r\n" "malloc: %s:%d: assertion botched\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "unknown" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: block on free list clobbered" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: called with already freed block argument" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: called with unallocated block argument" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: underflow detected; mh_nbytes out of range" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: underflow detected; magic8 corrupted" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: start and end chunk sizes differ" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: called with unallocated block argument" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: underflow detected; mh_nbytes out of range" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: underflow detected; magic8 corrupted" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: start and end chunk sizes differ" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format 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:200 +#: lib/malloc/table.c:188 #, 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:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p already in table as free?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "invalid base" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: host unknown" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: invalid service" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: bad network path specification" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "network operations not supported" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: cannot change locale (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: cannot change locale (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: cannot change locale (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: cannot change locale (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "You have mail in $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "You have new mail in $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "The mail in %s has been read\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "syntax error: arithmetic expression required" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "syntax error: ‘;’ unexpected" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "syntax error: ‘((%s))’" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: bad instruction type %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "here-document at line %d delimited by end-of-file (wanted ‘%s’)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: redirection instruction ‘%d’ out of range" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " @@ -1531,228 +1571,238 @@ msgstr "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" -#: parse.y:2921 +#: parse.y:2810 +#, c-format +msgid "script file read error: %s" +msgstr "script file read error: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "maximum here-document count exceeded" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "unexpected EOF while looking for matching ‘%c’" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "unexpected EOF while looking for ‘]]’" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "syntax error in conditional expression: unexpected token ‘%s’" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "syntax error in conditional expression" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "unexpected token ‘%s’, expected ‘)’" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "expected ‘)’" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "unexpected argument ‘%s’ to conditional unary operator" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "unexpected argument to conditional unary operator" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "unexpected token ‘%s’, conditional binary operator expected" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "conditional binary operator expected" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "unexpected argument ‘%s’ to conditional binary operator" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "unexpected argument to conditional binary operator" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "unexpected token ‘%c’ in conditional command" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "unexpected token ‘%s’ in conditional command" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "unexpected token %d in conditional command" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "syntax error near unexpected token ‘%s’" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "syntax error near ‘%s’" -#: parse.y:6151 +#: parse.y:6769 +#, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "syntax error: unexpected end of file from command on line %d" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "syntax error: unexpected end of file" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "syntax error" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Use “%s” to leave the shell.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "unexpected EOF while looking for matching ‘)’" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: function ‘%s’ not found" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: possible retry loop" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: bad connector ‘%d’" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: invalid file descriptor" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: NULL file pointer" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: ‘%c’: invalid format character" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "file descriptor out of range" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: ambiguous redirect" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: cannot overwrite existing file" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restricted: cannot redirect output" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "cannot create temp file for here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: cannot assign fd to variable" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port not supported without networking" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "redirection error: cannot duplicate fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "could not find /tmp, please create!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp must be a valid directory name" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "pretty-printing mode ignored in interactive shells" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: invalid option" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "cannot set uid to %d: effective uid %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "cannot set gid to %d: effective gid %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "cannot start debugger; debugging mode disabled" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: Is a directory" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "I have no name!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, version %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1761,49 +1811,49 @@ msgstr "" "Usage:\t%s [GNU long option] [option] ...\n" "\t%s [GNU long option] [option] script-file ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU long options:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Shell options:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s or -o option\n" -#: shell.c:2094 +#: shell.c:2086 #, 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:2095 +#: shell.c:2087 #, 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:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Use the ‘bashbug’ command to report bugs.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bash home page: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: invalid operation" @@ -1973,96 +2023,100 @@ msgstr "Information request" msgid "Unknown Signal #%d" msgstr "Unknown Signal #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "bad substitution: no closing ‘%s’ in %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: cannot assign list to array member" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "cannot make pipe for process substitution" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "cannot make child for process substitution" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "cannot open named pipe %s for reading" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "cannot open named pipe %s for writing" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "cannot duplicate named pipe %s as fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "command substitution: ignored null byte in input" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "function_substitute: cannot open anonymous file for output" + +#: subst.c:7064 +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" +"function_substitute: cannot duplicate anonymous file as standard output" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "cannot make pipe for command substitution" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "cannot make child for command substitution" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: cannot duplicate pipe as fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: invalid variable name for name reference" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: invalid indirect expansion" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: invalid variable name" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parameter not set" +msgid "%s: bad substitution" +msgstr "%s: bad substitution" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parameter null or not set" +msgid "%s: parameter not set" +msgstr "%s: parameter not set" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: substring expression < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: bad substitution" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: cannot assign in this way" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2070,160 +2124,167 @@ msgstr "" "future versions of the shell will force evaluation as an arithmetic " "substitution" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "bad substitution: no closing “`” in %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "no match: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argument expected" -#: test.c:156 +#: test.c:164 #, c-format -msgid "%s: integer expression expected" -msgstr "%s: integer expression expected" +msgid "%s: integer expected" +msgstr "%s: integer expected" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "‘)’ expected" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "‘)’ expected, found %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: binary operator expected" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: unary operator expected" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "missing ‘]’" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "syntax error: ‘%s’ unexpected" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "invalid signal number" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: maximum trap handler level exceeded (%d)" -#: trap.c:412 +#: trap.c:450 #, 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:416 +#: trap.c:454 #, 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:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: bad signal %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "error importing function definition for ‘%s’" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "shell level (%d) too high, resetting to 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "%s: maximum nameref depth (%d) exceeded" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: no function context at current scope" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: variable may not be assigned value" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" -msgstr "" +msgstr "%s: cannot inherit value from incompatible type" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: assigning integer to name reference" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: no function context at current scope" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s has null exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "invalid character %d in exportstr for %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "no ‘=’ in exportstr for %s" -#: variables.c:5317 +#: variables.c:5331 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:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: no global_variables context" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: head of shell_variables not a temporary environment scope" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: cannot open as FILE" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: invalid value for trace file descriptor" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: compatibility value out of range" -#: version.c:46 version2.c:46 -#, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." -msgstr "Copyright (C) 2020 Free Software Foundation, Inc." +#: version.c:46 +msgid "Copyright (C) 2024 Free Software Foundation, Inc." +msgstr "Copyright (C) 2024 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2231,35 +2292,35 @@ msgstr "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, version %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "This is free software; you are free to change and redistribute it." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "There is NO WARRANTY, to the extent permitted by law." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: cannot allocate %lu bytes (%lu bytes allocated)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: cannot allocate %lu bytes" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: cannot allocate %lu bytes" @@ -2297,8 +2358,8 @@ msgid "caller [expr]" msgstr "caller [expr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" -msgstr "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" +msgstr "cd [-L|[-P [-e]]] [-@] [dir]" #: builtins.c:68 msgid "pwd [-LP]" @@ -2309,18 +2370,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] command [arg ...]" #: builtins.c:78 -#, fuzzy msgid "" "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " "[name ...]" -msgstr "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" #: builtins.c:80 -#, fuzzy msgid "" "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " "[name ...]" -msgstr "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..." +msgstr "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2408,10 +2471,10 @@ msgstr "let arg [arg ...]" #: builtins.c:138 msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" #: builtins.c:140 @@ -2419,9 +2482,8 @@ msgid "return [n]" msgstr "return [n]" #: builtins.c:142 -#, fuzzy msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]" -msgstr "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]" +msgstr "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]" #: builtins.c:144 msgid "unset [-f] [-v] [-n] [name ...]" @@ -2460,17 +2522,16 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" -msgstr "trap [-lp] [[arg] signal_spec ...]" +msgid "trap [-Plp] [[action] signal_spec ...]" +msgstr "trap [-Plp] [[action] signal_spec ...]" #: builtins.c:168 msgid "type [-afptP] name [name ...]" msgstr "type [-afptP] name [name ...]" #: builtins.c:171 -#, fuzzy msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]" -msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]" +msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]" #: builtins.c:174 msgid "umask [-p] [-S] [mode]" @@ -2485,26 +2546,30 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "! PIPELINE" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAME [in WORDS ... ] ; do COMMANDS; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do COMMANDS; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAME [in WORDS ... ;] do COMMANDS; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2512,65 +2577,63 @@ msgstr "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" -#: builtins.c:196 -#, fuzzy +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" -msgstr "while COMMANDS; do COMMANDS; done" +msgstr "while COMMANDS; do COMMANDS-2; done" -#: builtins.c:198 -#, fuzzy +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" -msgstr "until COMMANDS; do COMMANDS; done" +msgstr "until COMMANDS; do COMMANDS-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAME] command [redirections]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function name { COMMANDS ; } or name () { COMMANDS ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ COMMANDS ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expression ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expression ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Names and meanings of some shell variables" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [optname ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [arguments]" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " @@ -2580,19 +2643,21 @@ msgstr "" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " "suffix] [name ...]" -#: builtins.c:235 +#: builtins.c:237 msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o option] [-DEI] [name ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2600,7 +2665,7 @@ msgstr "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2608,7 +2673,7 @@ msgstr "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2644,7 +2709,7 @@ msgstr "" "been\n" " defined." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2660,7 +2725,7 @@ msgstr "" " \n" " Return success unless a NAME is not an existing alias." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2740,7 +2805,7 @@ msgstr "" " Exit Status:\n" " bind returns 0 unless an unrecognized option is given or an error occurs." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2758,7 +2823,7 @@ msgstr "" " Exit Status:\n" " The exit status is 0 unless N is not greater than or equal to 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2776,7 +2841,7 @@ msgstr "" " Exit Status:\n" " The exit status is 0 unless N is not greater than or equal to 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2800,7 +2865,7 @@ msgstr "" " Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n" " not a shell builtin." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2828,13 +2893,13 @@ msgstr "" " Returns 0 unless the shell is not executing a shell function or EXPR\n" " is invalid." -#: builtins.c:387 +#: builtins.c:389 msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2876,7 +2941,7 @@ msgstr "" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is “-”, it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2914,7 +2979,7 @@ msgstr "" "when\n" " -P is used; non-zero otherwise." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2942,7 +3007,7 @@ msgstr "" " Returns 0 unless an invalid option is given or the current directory\n" " cannot be read." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2958,7 +3023,7 @@ msgstr "" " Exit Status:\n" " Always succeeds." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2970,7 +3035,7 @@ msgstr "" " Exit Status:\n" " Always succeeds." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2982,7 +3047,7 @@ msgstr "" " Exit Status:\n" " Always fails." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3016,7 +3081,7 @@ msgstr "" " Exit Status:\n" " Returns exit status of COMMAND, or failure if COMMAND is not found." -#: builtins.c:490 +#: builtins.c:492 msgid "" "Set variable values and attributes.\n" " \n" @@ -3044,7 +3109,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3083,7 +3149,8 @@ msgstr "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using ‘+’ instead of ‘-’ turns off the given attribute.\n" +" Using ‘+’ instead of ‘-’ turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the ‘let’ command) performed when the variable is assigned a value.\n" @@ -3096,7 +3163,7 @@ msgstr "" " Returns success unless an invalid option is supplied or a variable\n" " assignment error occurs." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3106,7 +3173,7 @@ msgstr "" " \n" " A synonym for ‘declare’. See ‘help declare’." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3132,7 +3199,7 @@ msgstr "" " Returns success unless an invalid option is supplied, a variable\n" " assignment error occurs, or the shell is not executing a function." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3208,7 +3275,7 @@ msgstr "" " Exit Status:\n" " Returns success unless a write error occurs." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3230,7 +3297,7 @@ msgstr "" " Exit Status:\n" " Returns success unless a write error occurs." -#: builtins.c:612 +#: builtins.c:615 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3250,6 +3317,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3274,13 +3347,19 @@ msgstr "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include “.” to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the ‘test’ found in $PATH instead of the shell builtin\n" " version, type ‘enable -n test’.\n" " \n" " Exit Status:\n" " Returns success unless NAME is not a shell builtin or an error occurs." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3300,7 +3379,7 @@ msgstr "" " Exit Status:\n" " Returns exit status of command or success if command is null." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3378,7 +3457,7 @@ msgstr "" " Returns success if an option is found; fails if the end of options is\n" " encountered or an error occurs." -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3420,7 +3499,7 @@ msgstr "" " Returns success unless COMMAND is not found or a redirection error " "occurs." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3432,7 +3511,7 @@ msgstr "" " Exits the shell with a status of N. If N is omitted, the exit status\n" " is that of the last command executed." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3446,7 +3525,7 @@ msgstr "" "executed\n" " in a login shell." -#: builtins.c:734 +#: builtins.c:742 msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3471,6 +3550,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3498,11 +3579,13 @@ msgstr "" " runs the last command beginning with ‘cc’ and typing ‘r’ re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3522,7 +3605,7 @@ msgstr "" " Exit Status:\n" " Status of command placed in foreground, or failure if an error occurs." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3546,7 +3629,7 @@ msgstr "" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3590,7 +3673,7 @@ msgstr "" " Exit Status:\n" " Returns success unless NAME is not found or an invalid option is given." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3630,7 +3713,7 @@ msgstr "" " Returns success unless PATTERN is not found or an invalid option is " "given." -#: builtins.c:842 +#: builtins.c:852 msgid "" "Display or manipulate the history list.\n" " \n" @@ -3654,7 +3737,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3686,7 +3773,11 @@ msgstr "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3696,7 +3787,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or an error occurs." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3740,7 +3831,7 @@ msgstr "" " Returns success unless an invalid option is given or an error occurs.\n" " If -x is used, returns the exit status of COMMAND." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3770,7 +3861,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option or JOBSPEC is given." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3812,7 +3903,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or an error occurs." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3898,8 +3989,7 @@ msgstr "" " Exit Status:\n" " If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise." -#: builtins.c:994 -#, fuzzy +#: builtins.c:1008 msgid "" "Read a line from the standard input and split it into fields.\n" " \n" @@ -3923,6 +4013,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3961,7 +4053,9 @@ msgstr "" " 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" -" delimiters.\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" +" and newline.\n" " \n" " If no NAMEs are supplied, the line read is stored in the REPLY " "variable.\n" @@ -3972,6 +4066,8 @@ msgstr "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -4001,7 +4097,7 @@ msgstr "" "occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4021,7 +4117,7 @@ msgstr "" " Exit Status:\n" " Returns N, or failure if the shell is not executing a function or script." -#: builtins.c:1055 +#: builtins.c:1071 msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -4097,6 +4193,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4180,6 +4280,10 @@ msgstr "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4189,7 +4293,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4229,7 +4333,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or a NAME is read-only." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4263,7 +4367,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or NAME is invalid." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4301,7 +4405,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is given or NAME is invalid." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4319,7 +4423,7 @@ msgstr "" " Exit Status:\n" " Returns success unless N is negative or greater than $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4343,15 +4447,17 @@ msgstr "" " Returns the status of the last command executed in FILENAME; fails if\n" " FILENAME cannot be read." -#: builtins.c:1246 +#: builtins.c:1266 msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4359,15 +4465,17 @@ msgstr "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4529,7 +4637,7 @@ msgstr "" " Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n" " false or an invalid argument is given." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4541,7 +4649,7 @@ msgstr "" " This is a synonym for the “test” builtin, but the last argument must\n" " be a literal ‘]’, to match the opening ‘[’." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4561,7 +4669,7 @@ msgstr "" " Exit Status:\n" " Always succeeds." -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -4569,31 +4677,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4610,31 +4723,36 @@ msgstr "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or ‘-’, each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4645,7 +4763,7 @@ msgstr "" " Returns success unless a SIGSPEC is invalid or an invalid option is " "given." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4701,7 +4819,7 @@ msgstr "" " Returns success if all of the NAMEs are found; fails if any are not " "found." -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -4743,9 +4861,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4790,14 +4909,15 @@ msgstr "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4829,7 +4949,7 @@ msgstr "" " Exit Status:\n" " Returns success unless MODE is invalid or an invalid option is given." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -4889,7 +5009,7 @@ msgstr "" " option is given, or if -n is supplied and the shell has no unwaited-for\n" " children." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -4915,7 +5035,21 @@ msgstr "" "invalid\n" " option is given." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4937,7 +5071,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4967,7 +5101,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5003,7 +5137,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5031,7 +5165,7 @@ msgstr "" " Exit Status:\n" " The return status is the return status of PIPELINE." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5049,7 +5183,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5087,8 +5221,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1648 -#, fuzzy +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" @@ -5101,14 +5234,14 @@ msgid "" msgstr "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS as long as the final command in the\n" -" ‘while’ COMMANDS has an exit status of zero.\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" +" an exit status of zero.\n" " \n" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1660 -#, fuzzy +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" @@ -5121,13 +5254,14 @@ msgid "" msgstr "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS as long as the final command in the\n" -" ‘until’ COMMANDS has an exit status which is not zero.\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" +" an exit status which is not zero.\n" " \n" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5149,7 +5283,7 @@ msgstr "" " Exit Status:\n" " The coproc command returns an exit status of 0." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5173,7 +5307,7 @@ msgstr "" " Exit Status:\n" " Returns success unless NAME is readonly." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5191,7 +5325,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the last command executed." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5215,7 +5349,7 @@ msgstr "" " Exit Status:\n" " Returns the status of the resumed job." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5233,7 +5367,7 @@ msgstr "" " Exit Status:\n" " Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5285,7 +5419,7 @@ msgstr "" " Exit Status:\n" " 0 or 1 depending on value of EXPRESSION." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5389,7 +5523,7 @@ msgstr "" " HISTIGNORE\tA colon-separated list of patterns used to decide which\n" " \t\tcommands should be saved on the history list.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5447,7 +5581,7 @@ msgstr "" " Returns success unless an invalid argument is supplied or the directory\n" " change fails." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5497,7 +5631,7 @@ msgstr "" " Returns success unless an invalid argument is supplied or the directory\n" " change fails." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5551,7 +5685,7 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5587,8 +5721,7 @@ msgstr "" " Returns success if OPTNAME is enabled; fails if an invalid option is\n" " given or OPTNAME is disabled." -#: builtins.c:1938 -#, fuzzy +#: builtins.c:1978 msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5605,9 +5738,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5643,12 +5776,14 @@ msgstr "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" +" %Q\tlike %q, but apply any precision to the unquoted argument before\n" +" \t\tquoting\n" " %(fmt)T\toutput the date-time string resulting from using FMT as a " "format\n" " \t string for strftime(3)\n" @@ -5664,15 +5799,15 @@ msgstr "" "assignment\n" " error occurs." -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5698,9 +5833,9 @@ msgstr "" " \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" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5722,14 +5857,18 @@ msgstr "" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." -#: builtins.c:2004 +#: builtins.c:2044 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5737,14 +5876,18 @@ msgstr "" "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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -5804,7 +5947,7 @@ msgstr "" " Returns success unless an invalid option is supplied or NAME does not\n" " have a completion specification defined." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -5884,7 +6027,7 @@ msgstr "" "or\n" " not an indexed array." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5893,7 +6036,3 @@ msgstr "" "Read lines from a file into an array variable.\n" " \n" " A synonym for ‘mapfile’." - -#, c-format -#~ msgid "%s: invalid associative array key" -#~ msgstr "%s: invalid associative array key" diff --git a/po/eo.gmo b/po/eo.gmo index b0227e55d7238f512891490871f24fc7fc2c9cef..1facc97822d90dc0c5e7d465bb19e65a967e6cf3 100644 GIT binary patch delta 12347 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 aaqrKzIK(-|SjO6x#aM3I#l_6C)cp@yRrM<X delta 42531 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 a=5MUE4|+}bqpzl3jIIg4@z1G4Q~wV#IR!ER diff --git a/po/eo.po b/po/eo.po index 1e781094e..67bc631fe 100644 --- a/po/eo.po +++ b/po/eo.po @@ -30,7 +30,7 @@ msgid "" msgstr "" "Project-Id-Version: GNU bash 5.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2020-12-13 10:53+0700\n" "Last-Translator: Sergio Pokrovskij <sergio.pokrovskij@gmail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" @@ -41,129 +41,130 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "Misa tabel-indico" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: ne plu nomreferenco (la atributo nameref forigitas)" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: Maleblas konverti entjerindican tabelon en asocitabelon" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: Valorizato havu nombran indicon" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: Valorizante per asocitabelo uzu indicon" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: Ne prosperis krei: %s" # XXX: internal_error -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: Mankas klavartabelo por komando" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: La unua ne-blankspaca signo ne estas „\"‟" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "Mankas ferma „%c‟ en %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: Mankas disiga dupunkto" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "«%s»: Ne eblas malligi en komandaj klavaĵoj" # XXX: internal_error -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "vinkulmalvolvo: Maleblas memorhavigo por %s" # XXX: internal_error -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "vinkulmalvolvo: Fiaskis memorhavigo por %u elementoj" # XXX: internal_error -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "vinkulmalvolvo: Fiaskis memorhavigo por %s" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "%s: MaltaÅ­gas por uzi kiel alinomon" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "liniredaktado ne estas ebligita" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "„%s‟: Misa nomo por klavartabelo" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: Ne eblas legi: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "%s: Nekonata funkcinomo" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s malhavas klavligon\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s vokeblas per " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "%s: Ne eblas malligi" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "iteracinombrilo" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "Sencas nur en iteracio „for‟, „while‟ aÅ­ „until‟" # caller [expr] => # caller [ESPRIMO] -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -172,360 +173,378 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" -"Liveras la kuntekston de la kuranta procedurvoko.\n" +"Liveru la kuntekston de la kuranta procedurvoko\n" "\n" " Se ESPRIMO malestas, liveru «$line $filename». Se ESPRIMO\n" " ĉeestas, liveru «$line $subroutine $filename»; ĉi tiu krominformo\n" " uzeblas por vidigi la vok-stakon.\n" "\n" " La valoro de ESPRIMO indikas, kiom da vokkadroj retroiri disde la\n" -" kuranta; la pinta kadro havas la numeron 0." +" kuranta; la pinta kadro havas la numeron 0.\n" +"\n" +" Elirstato:\n" +" Ĝi estas 0, kondiĉe ke la ŝelo plenumas ŝelfunkcion kaj la ESPRIMO\n" +" estas valida." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME malhavas valoron" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "Tro multe da argumentoj" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "NUL-dosierujo" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD malhavas valoron" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "linio %dª: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "Averto: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: Uzmaniero: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: La opcio bezonas argumenton" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: Necesas nombra argumento" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: Ne trovita" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: Misa opcio" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: Misa opcinomo" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "„%s‟ ne estas taÅ­ga nomo" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "Misa okuma nombro" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "Misa 16uma nombro" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "Misa nombro" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: Misa signalindiko" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "„%s‟: Nek proceznumero, nek taÅ­ga laborindiko" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: Nurlega variablo" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: Malaktivigo fiaskis" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s estas ekster sia variejo" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argumento" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s estas ekster sia variejo" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: Ne estas tia laboro" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: Ĉi tiu ŝelo ne disponigas laborregadon" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "Laborregado ne disponeblas" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: Limigita" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "limigita" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "„%s‟ ne estas primitiva komando ŝela" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "Eraro ĉe skribo: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "Eraro ĉe agordado de terminalaj atributoj: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "Eraro ĉe akiro de terminalaj atributoj: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: Eraro ĉe provo determini la kurantan dosierujon: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: Ambigua laborindiko" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "helpilo mankas en ĉi tiu versio" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: ĝi ne estas entjerindica tabelo" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: Malaktivigo fiaskis: nurlega %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: Malaktivigo fiaskis" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: Misa nomo de ago" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: Kompletigo ne estas specifita" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "Averto: La opcio -F povas funkcii alie ol vi eble supozas" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "Averto: La opcio -C povas funkcii alie ol vi eble supozas" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "Ni ne estas en plenumado de kompletiga funkcio" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "Uzeblas nur ene de funkcio" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "„-f‟ ne estas uzebla por fari funkciojn" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: Nurlega funkcio" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: Referenca variablo ne povas esti tabelo" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: Nomreferenca variablo ne referencu sin mem" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: Cikla nomreferenco" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "„%s“: Misa variablonomo por nomreferenco" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: Ĉi tiel ne eblas neniigi tabelvariablojn" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: Ne eblas konverti asocitabelon en entjerindican tabelon" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: Tutopa tabelvalorizo citila estas evitinda" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "Rultempa ŝargo ne disponeblas" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "Ne malfermiĝis dinamika biblioteko %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "Mankas %s en la dinamika biblioteko%s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: primitiva komando dinamika jam ŝargitas" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "Ŝarga funkcio por %s liveris fiaskon (%d): ne ŝargite" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: Ne ŝargita dinamike" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: Ne eblas forigi: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s estas dosierujo" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: Ne ordinara dosiero" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: Tro granda dosiero" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: Neplenumebla duuma dosiero" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: Maleblas plenumi: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "adiaÅ­\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "La ŝelo ne estas saluta; eliru per «exit»" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Restas haltigitaj laboroj.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Restas rulataj laboroj.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "Komando ne trovita" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "Historia indiko" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: Ne malfermiĝis labordosiero: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "kuranta" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "La laboro %d estas lanĉita sen laborregado" @@ -540,11 +559,11 @@ msgstr "%s: Misa opcio -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: La opcio bezonas argumenton -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "Nomkonservado (haketado, «hashing») estas malŝaltita" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: Hakettabelo estas malplena\n" @@ -576,12 +595,12 @@ msgstr "" "Helpaĵo pri „%s‟ malestas.\n" "Provu «help help» aÅ­ «man -k %s» aÅ­ «info %s»." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: Fiaskis malfermo de %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -600,21 +619,31 @@ msgstr "" "Steleto (*) tuj post nomo indikas, ke la komando estas malebligita.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "Ne pli ol unu el -anrw estas uzebla" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "pozicio en la historio" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "Mankas nomo de tabelvariablo" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: Parametro estas NUL aÅ­ malaktiva" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: MaltaÅ­ga tempomarko" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: Historia malvolvo fiaskis" @@ -628,116 +657,117 @@ msgstr "%s: inlib fiaskis" msgid "no other options allowed with `-x'" msgstr "La uzo de „-x‟ malebligas aliajn opciojn" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: Argumento estu proceznumero aÅ­ laborindiko" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Nekonata eraro" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "Mankas esprimo" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: ĝi ne estas entjerindica tabelo" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: Misa indiko de dosiernumero" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: Misa dosiernumero: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: Misa lininombro" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: Misa tabelbazo" # Supozeble callback => retrovoko ?? -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: Misa kvanto ĉe retrovoko" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "Mankas nomo de tabelvariablo" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "necesas subteno de tabelvariabloj" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "„%s‟: Mankas formata signo" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "%c: Misa tempoformato" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "„%c‟: Misa signo formata" -#: builtins/printf.def:734 +# XXX: internal error: +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "Averto: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" # XXX: internal_error -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "Miso ĉe analizado de formato: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "Mankas 16uma cifero por \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "Post „%c‟ mankas unikoda cifero" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "Ne estas alia dosierujo" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: MaltaÅ­ga argumento" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<mankas kuranta dosierujo>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "Dosierujstako malplenas" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "indico de dosierujstako" # dirs [-clpv] [+N] [-N] -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -780,7 +810,7 @@ msgstr "" "\tper „dirs‟ sen opcioj, numerante ekde 0." # pushd [dir | +N | -N] [-n] -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -826,7 +856,7 @@ msgstr "" " Vi povas vidigi la stakon da dosierujoj per la komando „dirs‟." # popd [+N | -N] [-n] -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -865,325 +895,336 @@ msgstr "" "\n" " Vi povas vidigi la stakon da dosierujoj per la komando „dirs‟." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: Misa indiko de atendotempo" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "Lega (read) eraro: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "" "„return‟ sencas nur en funkcio aÅ­ punkte vokita („.‟, „source‟) skripto" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "Ne eblas samtempe malaktivigi funkcion kaj variablon" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: Ne tabela variablo" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: Ne funkcio" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: Ne eblas eksporti" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "Nombrilo de „shift‟" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "Maleblas samtempe ŝalti kaj malŝalti ŝelan opcion" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: Misa nomo de ŝela opcio" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "Necesas dosiernoma argumento" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: Dosiero ne trovita" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "Ne eblas halteti" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "Ne eblas haltetigi salutan ŝelon" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "„%s‟ alinomas jenon: «%s»\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "„%s‟ estas ŝlosilvorto de la ŝelo\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s estas funkcio\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "„%s‟ estas speciala primitiva ŝelkomando\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s estas funkcio\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "„%s‟ estas primitiva komando de la ŝelo\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "„%s‟ estas „%s‟\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "„%s‟ estas metita en hakettabelon (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: MaltaÅ­ga argumento por limo" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "„%c‟: Misa komando" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: Fiaskis provo legi limon: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limo" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: Malprosperis ŝanĝi limon: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "Okuma nombro" # Misa modifilo: «umask Z-w» aÅ­ «umask aZw» -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "„%c‟: MaltaÅ­ga simbolo por atingorajta modifilo" # Misa kategorio: ne [rw] ktp -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "„%c‟: La signo ne estas simbolo de atingorajta kategorio" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " linio " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "La ĵusa komando: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Ĉesigado ..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORMO: " -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "Averto: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "Nekonata komand-eraro" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "Misa komandotipo" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "Misa stir-operacio" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "Misa salto" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: Neligita variablo" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aTro longe sen enigo: AÅ­tomata seancofino\n" # XXX: internal error: -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "Fiaskis provo nomumi la disponaĵon «/dev/null» ĉefenigujo: %s" # XXX: internal error: -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: „%c‟: Misa formatsigno" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: la kunprocezo [%d:%s] ankoraÅ­ ekzistas" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "Eraro en dukto" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: La ingado de „eval“oj superis sian maksimumon (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: La ingado de „source“oj superis sian maksimumon (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: La ingado de funkcioj superis sian maksimumon (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: Malpermesitas uzi „/‟ en komandonomoj" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: Komando ne trovita" -# XXX: internal error: -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: Misa interpretilo" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: Neplenumebla duuma dosiero" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: Misa interpretilo" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: Neplenumebla duuma dosiero: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "„%s‟ estas primitiva komando speciala" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "Ne eblas kunnomumi al dosiernumero %d la dosiernumeron %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "Tro profunda rekursio en esprimo" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "Rekursistako elĉerpita" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "Sintaksa eraro en esprimo" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "Provo valorizi ne-variablon" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "Sintaksa eraro en valorizo de variablo" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "Divido per 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "CIMO: Misa operacisigno en kombinita valorizsimbolo" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "„:‟ mankas kondiĉa esprimo" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "Negativa eksponento" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "Post antaÅ­kremento aperu nomo de variablo" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "Mankas „)‟" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "Sintaksa eraro: Mankas operando" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "Sintaksa eraro: Misa operacisimbolo aritmetika" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (misa simbolo estas „%s‟)" @@ -1200,7 +1241,7 @@ msgstr "MaltaÅ­ga konstanto entjera" msgid "value too great for base" msgstr "Tro granda valoro por bazo de nombrosistemo" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: Misa esprimo\n" @@ -1209,50 +1250,55 @@ msgstr "%s: Misa esprimo\n" msgid "getcwd: cannot access parent directories" msgstr "getwd: Ne eblas atingi patrajn dosierujojn" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "„%s‟ estas primitiva komando speciala" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "Ne eblas reŝalti senprokrastan reĝimon por dosiernumero %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "Maleblas disponigi novan dosiernumeron por Baŝa enigo el n-ro %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: La nova dosiernumero (fd %d) jam havas bufron" # ZZZ: sys_error (_("start_pipeline: pgrp pipe")); -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: procezgrupo dukto" # ZZZ: internal_warning -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" # ZZZ: internal_warning -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "Forke farita proceznumero %d aperas en rulata laboro %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "Haltigita laboro %d kun procezgrupo %ld estas forigata" # ifdef DEBUG ... internal_warning(): -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) marked as still alive" @@ -1262,140 +1308,140 @@ msgstr "add_process: pid %5ld (%s) marked as still alive" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: Ne estas tia proceznumero (%ld)!" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signalo %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Farite" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Haltigita" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Haltigita(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Rulata" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Farite(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Eliro %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Nekonata stato" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(nekropsio elŝutita)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (labordosierujo: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "provo atribui (setpgid) procezgrupon %2$ld de la procezido %1$ld" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: La procezo %ld ne estas ido de ĉi tiu ŝelo" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Malestas informoj pri procezo %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: La laboro %d estas haltigita" # XXX: internal_error -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: no current jobs" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: La laboro finiĝis" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: La laboro %d jam estas fona" # XXX: internal warning: -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: WNOHANG iĝas ŝaltita por eviti nedifintan pendiĝon" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: linio %dª: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr "(nekropsio elŝutita)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(nun labordosierujo estas: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp fiaskis" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: laborregado ne funkcias en la fono" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: liniaranĝo" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid()" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "ne prosperis atribui grupon (%d) de terminala procezo" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "Ĉi tiu ŝelo ne disponigas laborregadon" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: Malveras la aserto: %s\n" # XXX: debug? -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1405,174 +1451,174 @@ msgstr "" "malloc: %s:%d: aserto sufokita\r\n" # XXX: internal error -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "nekonata" # XXX: debug? -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: Skribdifektita bloko en malokupa listo (free list)" # XXX: debug? -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: La argumento montras blokon jam malokupitan" # XXX: debug? -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: La argumento ne montras generitan memoron" # XXX: debug? -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: Okazis maltroo; mh_nbytes estas ekster sia variejo" # XXX: debug? -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: Okazis maltroo; «magic8» difektitas" # XXX: debug? -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: La ĉapa kaj vosta longoj de memorpeco ne estas egalaj" # XXX: debug? -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: La argumento ne montras generitan memoron" # XXX: debug? -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: Okazis maltroo; mh_nbytes estas ekster sia variejo" # XXX: debug? -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: Okazis maltroo; «magic8» difektitas" # XXX: debug? -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: La ĉapa kaj vosta longoj de memorpeco ne estas egalaj" # XXX: debug? -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: „alloc‟-tabelo elĉerpiĝis je FIND_ALLOC?\n" # XXX: debug? -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p jam en la tabelo kvazaÅ­ kreita (?)\n" # XXX: debug? -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p jam en la tabelo kvazaÅ­ malokupita (?)\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "Misa bazo nombrosistema" # XXX: internal error -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: Nekonata retnodo" # XXX: internal error -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: Misa servo-indiko" # XXX: internal error -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: Misa retvojo-indiko" # XXX: internal error -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "Reta funkciado ne disponeblas" # XXX: internal warning: -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: Maleblas ŝanĝi lokaĵaron (%s)" # XXX: internal warning: -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: Maleblas ŝanĝi lokaĵaron (%s): %s" # XXX: fatal_error -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: ne eblas ŝanĝi la lokaĵaron (%s)" # XXX: fatal_error -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: ne eblas ŝanĝi la lokaĵaron (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Vi havas poŝton en $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Nova poŝto en $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "La poŝto en %s estas jam legita\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "Sintaksa eraro: Necesas aritmetika esprimo" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "Sintaksa eraro: Neatendita „;‟" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "Sintaksa eraro: „((%s))‟" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: Misa ordontipo %d" # internal_warning(): -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "Tuj-dokumenton de linio %d limigas dosierfino (mankas „%s‟)" # XXX: programming_error -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: Alidirektada komando „%d‟ ekster sia variejo" # internal_warning(): -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " @@ -1581,240 +1627,250 @@ msgstr "" "shell_getc: shell_input_line_size (%zu) superas SIZE_MAX (%lu): la linio " "tranĉita" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "Eraro ĉe skribo: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "La nombro de tuj-documentoj superis sian maksimumon" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "Neatendita dosierfino dum serĉo de responda „%c‟" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "Neatendita dosierfino dum serĉo de „]]‟" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "Sintaksa eraro en kondiĉa esprimo: Neatendita simbolo „%s‟" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "Sintaksa eraro en kondiĉa esprimo" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "Nekonvena simbolo „%s‟ anstataÅ­ „)‟" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "Mankas „)‟" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "La argumento „%s‟ ne konvenas por unuloka kondiĉa operacisimbolo" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "MaltaÅ­ga argumento por unuloka kondiĉa operacisimbolo" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "Misa simbolo „%s‟ anstataÅ­ duloka kondiĉa operacisigno" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "ĉi tie devas esti duloka kondiĉa operacisigno" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "La argumento „%s‟ ne konvenas por duloka kondiĉa operacisimbolo" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "<maltaÅ­ga argumento por duloka kondiĉa operacisimbolo" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "Misa simbolo „%c‟ en kondiĉa komando" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "Misa simbolo „%s‟ en kondiĉa komando" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "Misa simbolo „%d‟ en kondiĉa komando" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "Sintaksa eraro apud neatendita simbolo „%s‟" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "Sintaksa eraro apud „%s‟" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "Sintaksa eraro: Neatendita dosierfino" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "Sintaksa eraro: Neatendita dosierfino" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "Sintaksa eraro" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Uzu «%s» por eliri el la ŝelo.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "Neatendita dosierfino dum serĉo de responda „)‟" # XXX: internal_error -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "Kompletigo: Funkcio „%s‟ ne trovita" # XXX: internal_warning -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: ĉu ciklo de reprovoj?" # XXX: programming_error -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: Misa stir-operacio „%d‟" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: Misa dosiernumero" # XXX: internal error: -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: dosierreferenco == NULL" # XXX: internal error: -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" # XXX: programming_error -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: „%c‟: Misa formatsigno" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "Ekstervarieja dosiernumero" # XXX: internal_error -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: Ambigua alidirektado" # XXX: internal_error -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: Maleblas surskribi ekzistantan dosieron" # XXX: internal_error -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: Limigita ŝelo: malpermesitas alidirekti eligon" # XXX: internal_error -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "Malprosperis krei labordosieron por tuj-dokumento: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: Maleblas konservi la dosiernumeron en la variablo" # XXX: internal_warning -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "«/dev/(tcp|udp)/host/port» ne disponeblas ekster retumado" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "Alidirektada eraro: Fiaskis kunnomumo al dosiernumero" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "Mankas «/tmp», bv krei ĝin!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "«/tmp» devas esti valida dosierujo" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "La reĝimo de struktura tekstaranĝo ne funkcias en dialogaj ŝeloj" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: Misa opcio" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "Ne eblas ŝanĝi UID-on al %d: la efektiva UID estas %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "Ne eblas ŝanĝi GID-on al %d: la efektiva GID estas %d" # XXX: internal_warning -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "Maleblas lanĉi erarserĉilon: la erarserĉa reĝimo malŝaltitas." -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s : ĉi tio estas dosierujo" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Mi ne havas nomon!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNUa «bash», versio %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1823,53 +1879,53 @@ msgstr "" "Uzo:\t%s [GNUa opcio longforma] [opcio] ...\n" "\t%s [GNUa opcio longforma] [opcio] SKRIPTODOSIERO ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNUaj opcioj longformaj:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Ŝelaj opcioj:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD aÅ­ -c KOMANDO aÅ­ -O SHOPT_OPCIO\t\t(nur ĉe voko)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s aÅ­ -o opcio\n" # bash --help -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "Por pluaj informoj pri la opcioj tajpu: «%s -c \"help set\"»\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "Por scii pli pri la primitivaj ŝelkomandoj tajpu: „%s -c help‟\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Por raporti pri eraroj uzu la komandon „bashbug‟\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" "La hejmpaĝo de Baŝo (anglalingva): <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Ĝenerala helpilo pri uzo de GNUa programaro: <http://www.gnu.org/gethelp/>\n" # XXX: internal_error -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: Misa operacio" @@ -2078,272 +2134,284 @@ msgstr "Informmendo" msgid "Unknown Signal #%d" msgstr "Nekonata signalo n-ro %d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "Misa anstataÅ­igo: Mankas ferma „%s‟ en %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: Maleblas valorizi tabelanon per listo" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "Ne prosperis fari dukton por proceza anstataÅ­igo" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "Ne prosperis krei idon por proceza anstataÅ­igo" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "Ne prosperis malfermi nomitan dukton %s porlegan" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "Ne prosperis malfermi nomitan dukton %s por skribado" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "Ne prosperis kunnomumi nomhavan dukton %s kiel dosiernumeron %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "Komanda anstataÅ­igo: nul-bajto en enigaĵo, ignorita" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: Ne prosperis kunnomumi la dosiernumeron 1 al dukto" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "Ne prosperis fari dukton por komanda anstataÅ­igo" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "Ne prosperis krei procezidon por komanda anstataÅ­igo" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: Ne prosperis kunnomumi la dosiernumeron 1 al dukto" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: Misa variablonomo por nomreferenco" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: Misa malvolvo malrekta" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: MaltaÅ­ga variablonomo" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: Parametro estas malaktiva" +msgid "%s: bad substitution" +msgstr "%s: Misa anstataÅ­igo" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: Parametro estas NUL aÅ­ malaktiva" +msgid "%s: parameter not set" +msgstr "%s: Parametro estas malaktiva" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: subĉeno-esprimo < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: Misa anstataÅ­igo" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: ĉi tiel ne valorizebla" # XXX: internal warning: -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" msgstr "" "Ontaj versioj de la ŝelo plenumos komputon kiel aritmetikan anstataÅ­igon" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "Misa anstataÅ­igo: Mankas ferma „`‟ en %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "Nenio kongrua: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "Mankas argumento" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: Mankas entjera esprimo" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "Mankas „)‟" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "AnstataÅ­ „)‟ troviĝas %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: Tie devas esti duloka operacisigno" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: Tie devas esti unuloka operacisigno" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "Mankas „]‟" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "Sintaksa eraro: Neatendita «%s»" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "Misa signalnumero" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" "trap handler: La nivelo de kaptilotraktiloj superis sian maksimumon (%d)" # XXX: internal_warning -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: Misa valoro en trap_list[%d]: %p" # XXX: internal_warning -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "run_pending_traps: Signaltraktilo SIG_DFL resendas %d (%s) al mi mem" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: Misa signalnumero %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "Eraro ĉe importo de funkcidifino por „%s‟" # XXX: internal_warning -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "%d estas tro granda ŝelnivelo; mallevita ĝis 1" +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "La nombro de tuj-documentoj superis sian maksimumon" + # XXX: internal_error -#: variables.c:2642 +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: Malestas funkcia kunteksto en ĉi-regiono" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: Variablo ne valorizebla" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: Nomreferenco valorizata per entjero" # XXX: internal_error -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: Malestas funkcia kunteksto en ĉi-regiono" # XXX: internal_error -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "«exportstr» de %s estas NUL" # XXX: internal_error -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "Misa signo %d en eksporta signoĉeno por „%s‟" # XXX: internal_error -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "Mankas „=‟ en eksporta signoĉeno por „%s‟" # XXX: internal_error -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" "pop_var_context: La kapo de „shell_variables‟ ne estas funkcia kunteksto" # XXX: internal_error -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: Mankas kunteksto de „global_variables‟" # XXX: internal_error -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: La kapo de „shell_variables‟ ne estas provizora regiono" # XXX: internal_error -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: Ne malfermeblas kiel DOSIERO" # XXX: internal_error -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: Misa valoro por spurada dosiernumero (trace file descriptor)" # # XXX: internal_error -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s kongruo-nivelo estas ekster sia variejo" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2020 ĉe «Free Software Foundation, Inc.»" -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2351,37 +2419,37 @@ msgstr "" "La permesilo estas GPLv3+; t.e. GNU GPL, versio 3ª aÅ­ pli nova.\n" "La tekston vd ĉe <http://gnu.org/licenses/gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNUa «bash», versio %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Ĉi tiu programo estas libera; vi rajtas libere ĝin ŝanĝi kaj pludoni." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "NENIA GARANTIO estas donita, tiom kiom tion permesas la leĝo." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: Malsukcesis okupi %lu bajtojn (%lu bajtoj disponigitaj)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: Malsukcesis okupi %lu bajtojn" # XXX: fatal_error -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: Malsukcesis okupi %lu bajtojn (%lu bajtoj disponigitaj)" # XXX: fatal_error -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: Malsukcesis okupi %lu bajtojn" @@ -2420,7 +2488,8 @@ msgid "caller [expr]" msgstr "caller [ESPRIMO]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [DOSIERUJO]" #: builtins.c:68 @@ -2535,8 +2604,9 @@ msgid "let arg [arg ...]" msgstr "let ARG [ARG ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a TABELO] [-d DISIG] [-i TEKSTO]\n" @@ -2589,7 +2659,8 @@ msgid "[ arg... ]" msgstr "[ ARG... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[ARG] SIGNALINDIKO ...]" #: builtins.c:168 @@ -2614,26 +2685,30 @@ msgid "wait [pid ...]" msgstr "wait [PN ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NOMO [in VORTOJ ... ] ; do KOMANDOJ; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( ESPR1; ESPR2; ESPR3 )); do KOMANDOJ; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NONO [in VORTOJ ... ;] do KOMANDOJ; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] DUKTO" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case VORTO in [ŜABLONO [| ŜABLONO]...) KOMANDOJ ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2641,67 +2716,67 @@ msgstr "" "if KOMANDOJ; then KOMANDOJ; [ elif KOMANDOJ; then KOMANDOJ; ]... [ else " "KOMANDOJ; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while KOMANDOJ; do KOMANDOJ; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until KOMANDOJ; do KOMANDOJ; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NOMO] KOMANDO [ALIDIREKTADOJ]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function NOMO { KOMANDOJ ; } aÅ­ NOMO () { KOMANDOJ ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ KOMANDOJ ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "LABORINDIKO [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( ESPRIMO ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ ESPRIMO ]]" # Ĉu "variables" estas serĉa ŝlosilo ? # T.e. "help var" aÅ­ "help variabl", sed ne "nelp variabloj"? -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "var - Nomoj kaj signifo de kelkaj ŝelvariabloj" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | DOSIERUJO]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [OPCINOMO ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v VAR] FORMATO [ARGUMENTOJ]" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " @@ -2711,20 +2786,22 @@ msgstr "" " [-W VORTLISTO] [-F FUNKCIO] [-C KOMANDO] [-X FILTRILO]\n" " [-P PREFIKSO] [-S SUFIKSO] [NOMO ...]" -#: builtins.c:235 +#: builtins.c:237 +#, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o OPCIO] [-A AGO] [-G ŜABLONO]\n" " [-W VORTLISTO] [-F FUNKCIO] [-C KOMANDO] [-X FILTRILO]\n" " [-P PREFIKSO] [-S SUFIKSO] [VORTO]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o OPCIO] [-DEI] [NOMO ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2732,7 +2809,7 @@ msgstr "" "mapfile [-d DISIG] [-n KIOM] [-O ORIGINO] [-s KIOM] [-t] [-u DN]\n" " [-C RETROVOKO] [-c KVANTO] [TABELO]" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2741,7 +2818,7 @@ msgstr "" " [-u DN] [-C RETROVOKO] [-c KVANTO] [TABELO]" # alias: -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2778,7 +2855,7 @@ msgstr "" # unalias [-a] name [name ...] # unalias [-a] NOMO [NOMO ...] -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2797,7 +2874,7 @@ msgstr "" # bind [-lpvsPVS] [-m KLAVARTABELO] [-f DOSIERNOMO] [-q NOMO] [-u NOMO] # [-r KLAVAÄ´O] [-x KLAVAÄ´O:ŜELKOMANDO] # [KLAVAÄ´O:READLINE-FUNKCIO AŬ READLINE-KOMANDO] -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2872,7 +2949,7 @@ msgstr "" " 0, krom se nekonata opcio estas donita aÅ­ eraro okazis." # exit: -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2891,7 +2968,7 @@ msgstr "" " Ĝi estas 0, kondiĉe ke N estas pli granda ol aÅ­ egala al 1." # continue: -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2912,7 +2989,7 @@ msgstr "" # builtin [shell-builtin [arg ...]] # builtin [ŜELAÄ´O [ARG ...]] -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2938,7 +3015,7 @@ msgstr "" # caller [expr] => # caller [ESPRIMO] -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2967,13 +3044,14 @@ msgstr "" " estas valida." # cd: -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -3044,7 +3122,7 @@ msgstr "" " $PWD sukcese valoriziĝis; nenulo aliokaze." # pwd [-LP] -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -3073,7 +3151,7 @@ msgstr "" " 0, krom se aperas misa opcio aÅ­ la kuranta dosierujo estas\n" " nelegebla." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -3090,7 +3168,7 @@ msgstr "" " Ĉiam sukcesa." # true -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -3103,7 +3181,7 @@ msgstr "" " Ĉiam sukcesa." # false: -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -3117,7 +3195,7 @@ msgstr "" # command [-pVv] command [arg ...] # command [-pVv] KOMANDO [ARG ...] -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3153,7 +3231,8 @@ msgstr "" # declare [-aAfFgilnrtux] [-p] [name[=value] ...] # declare [-aAfFgilnrtux] [-p] [NOMO[=VALORO] ...] -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -3181,7 +3260,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3233,7 +3313,7 @@ msgstr "" "variablo." # typeset [-aAfFgilrtux] [-p] name[=value] ... -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3245,7 +3325,7 @@ msgstr "" # local [option] name[=value] ... # local [OPCIO] NOMO[=VALORO] ... -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3272,7 +3352,7 @@ msgstr "" " ŝelo ne estas plenumanta funkcion." # echo: -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3349,7 +3429,7 @@ msgstr "" " Sukcesa, krom se okazas elig-eraro." # echo [-n] [ARG ...] -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3373,7 +3453,8 @@ msgstr "" # enable [-a] [-dnps] [-f filename] [name ...] # enable [-a] [-dnps] [-f DOSIERNOMO] [NOMO ...] -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3393,6 +3474,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3425,7 +3512,7 @@ msgstr "" " eraro." # eval [ARG ...] -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3446,7 +3533,7 @@ msgstr "" # getopts optstring name [arg] => # getopts OPCIĈENO NOMO [ARG] -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3527,7 +3614,7 @@ msgstr "" # exec [-cl] [-a name] [command [arguments ...]] [redirection ...] # exec [-cl] [-a NOMO] [KOMANDO [ARGUMENTOJ ...]] [ALIDIREKTADO ...] -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3569,7 +3656,7 @@ msgstr "" " alirektado." # exit [n] -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3582,7 +3669,7 @@ msgstr "" " estas tiu de la plej ĵuse plenumita komando." # logout [N] -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3599,7 +3686,8 @@ msgstr "" # fc -s [pat=rep] [command] => # fc [-e REDAKTILO] [-lnr] [UNUA] [LASTA] aÅ­ # fc -s [ŜABLONO=ANST] [KOMANDO] -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3624,6 +3712,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3654,7 +3744,7 @@ msgstr "" " eraro." # fg [job_spec] => fg [LABORINDIKO] -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3675,7 +3765,7 @@ msgstr "" " Tiu de la dialogigita komando; aÅ­ malsukceso, se okazis eraro." # bg [job_spec] => bg [LABORINDIKO] -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3699,7 +3789,7 @@ msgstr "" " eraro." # hash [-lr] [-p VOJNOMO] [-dt] [NOMO ...] -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3745,7 +3835,7 @@ msgstr "" # help [-ds] [pattern ...] # help [-ds] [ŜABLONO ...] -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3790,7 +3880,8 @@ msgstr "" # history [-c] [-d POZICIO] [n] aÅ­ # history -awr [DOSIERNOMO] aÅ­ # history -ps ARG [ARG...] -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3814,7 +3905,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3865,7 +3960,7 @@ msgstr "" # jobs -x command [args] => # jobs [-lnprs] [LABORINDIKO ...] aÅ­ # jobs -x KOMANDO [ARGS] -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3911,7 +4006,7 @@ msgstr "" " Ĉe „-x‟, la elirstato de la KOMANDO." # disown [-h] [-ar] [jobspec ...] -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3947,7 +4042,7 @@ msgstr "" # kill -l [sigspec] => # kill [-s SIGSNOM | -n SIGNUM | -SIGNOM] PN | LABORINDIKO ... aÅ­ # kill -l [SIGNOM] -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3993,7 +4088,7 @@ msgstr "" # let arg [arg ...] # let ARG [ARG ...] -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -4083,7 +4178,7 @@ msgstr "" # [-p prompt] [-t timeout] [-u fd] [name ...] # read [-ers] [-a TABELO] [-d DISIG] [-i TEKSTO] [-n NSIGN] [-N NSIGN] # [-p INVIT] [-t TLIM] [-u DN] [NOMO ...] -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -4108,6 +4203,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -4181,7 +4278,7 @@ msgstr "" # return [n] # return [N] -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4203,7 +4300,8 @@ msgstr "" # set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...] # set [-abefhkmnptuvxBCHP] [-o OPCINOMO] [--] [ARG ...] -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -4279,6 +4377,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4374,7 +4476,7 @@ msgstr "" # unset [-f] [-v] [name ...] # unset [-f] [-v] [NOMO ...] -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4415,7 +4517,7 @@ msgstr "" # export [-fn] [name[=value] ...] or export -p # export [-fn] [NOMO[=VALORO] ...] aÅ­ export -p -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4451,7 +4553,7 @@ msgstr "" # readonly [-aAf] [name[=value] ...] or readonly -p # readonly [-aAf] [NOMO[=VALORO] ...] aÅ­ readonly -p -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4490,7 +4592,7 @@ msgstr "" " Sukceso, krom se aperas nevalida nomo aÅ­ misa opcio." # shift [n] -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4507,7 +4609,7 @@ msgstr "" # source filename [arguments] # source DOSIERNOMO [ARGUMENTOJ] -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4532,15 +4634,18 @@ msgstr "" " DOSIERNOMO ne legeblas." # suspend [-f] -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4558,7 +4663,7 @@ msgstr "" # test [expr] # test [ESPRIMO] -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4715,7 +4820,7 @@ msgstr "" " argumento." # [ arg... ] -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4725,7 +4830,7 @@ msgstr "" "Ĉi tiu estas sinonimo de la primitivo „test‟; tamen la lasta\n" " argumento devas esti „]‟ fermanta la esprimon komencitan per „[‟." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4746,7 +4851,8 @@ msgstr "" # trap [-lp] [[arg] signal_spec ...] # trap [-lp] [[ARG] SIGNALINDIKO ...] -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy msgid "" "Trap signals and other events.\n" " \n" @@ -4754,31 +4860,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4825,7 +4936,7 @@ msgstr "" # type [-afptP] name [name ...] # type [-afptP] NOMO [NOMO ...] -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4883,7 +4994,8 @@ msgstr "" # ulimit [-SHacdefilmnpqrstuvx] [limit] # ulimit [-SHacdefilmnpqrstuvx] [LIMO] -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" @@ -4925,9 +5037,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4981,7 +5094,7 @@ msgstr "" # umask [-p] [-S] [mode] # umask [-p] [-S] [REĜIMO] -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -5016,7 +5129,7 @@ msgstr "" # wait [-fn] [id ...] # wait [-fn] [IND ...] -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -5074,7 +5187,7 @@ msgstr "" # wait [pid ...] # wait [PN ...] -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -5098,9 +5211,18 @@ msgstr "" " Tiu de la lasta PN; malsukceso, se PN estas nevalida aÅ­ se\n" " renkontiĝas nevalida opcio." +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + # for NAME [in WORDS ... ] ; do COMMANDS; done # for NOMO [in VORTOJ ... ] ; do KOMANDOJ; done -#: builtins.c:1549 +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -5124,7 +5246,7 @@ msgstr "" # for (( exp1; exp2; exp3 )); do COMMANDS; done # for (( ESPR1; ESPR2; ESPR3 )); do KOMANDOJ; done -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -5156,7 +5278,7 @@ msgstr "" # select NAME [in WORDS ... ;] do COMMANDS; done # select NONO [in VORTOJ ... ;] do KOMANDOJ; done -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5193,7 +5315,7 @@ msgstr "" # time [-p] PIPELINE # time [-p] DUKTO -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5224,7 +5346,7 @@ msgstr "" # case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac # case VORTO in [ŜABLONO [| ŜABLONO]...) KOMANDOJ ;;]... esac -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5246,7 +5368,7 @@ msgstr "" # [ else COMMANDS; ] fi # if KOMANDOJ; then KOMANDOJ;[ elif KOMANDOJ; then KOMANDOJ; ]... # [ else KOMANDOJ; ] fi -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5278,7 +5400,7 @@ msgstr "" # while COMMANDS; do COMMANDS; done # while KOMANDOJ; do KOMANDOJ; done -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5300,7 +5422,7 @@ msgstr "" # until COMMANDS; do COMMANDS; done # until KOMANDOJ; do KOMANDOJ; done -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5322,7 +5444,7 @@ msgstr "" # coproc [NAME] command [redirections] # coproc [NOMO] KOMANDO [ALIDIREKTADOJ] -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5346,7 +5468,7 @@ msgstr "" # function name { COMMANDS ; } or name () { COMMANDS ; } # function NOMO { KOMANDOJ ; } aÅ­ NOMO () { KOMANDOJ ; } -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5371,7 +5493,7 @@ msgstr "" # grouping_braces: { COMMANDS ; } # { KOMANDOJ ; } -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5391,7 +5513,7 @@ msgstr "" # job_spec [&] # LABORINDIKO [&] -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5416,7 +5538,7 @@ msgstr "" # (( expression )) # (( ESPRIMO )) -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5436,7 +5558,7 @@ msgstr "" # [[ expression ]] # [[ ESPRIMO ]] -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5487,7 +5609,7 @@ msgstr "" # help var # variables - Names and meanings of some shell variables -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5594,7 +5716,7 @@ msgstr "" # pushd [-n] [+N | -N | dir] # pushd [-n] [+N | -N | DOSIERUJO] -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5653,7 +5775,7 @@ msgstr "" " Sukceso, krom se aperas misa argumento aÅ­ se cd malsukcesas." # popd [-n] [+N | -N] -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5702,7 +5824,7 @@ msgstr "" " Sukceso, krom se aperas misa argumento aÅ­ se cd malsukcesas." # dirs [-clpv] [+N] [-N] -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5756,7 +5878,7 @@ msgstr "" # shopt [-pqsu] [-o] [optname ...] # shopt [-pqsu] [-o] [OPCINOMO ...] -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5795,7 +5917,7 @@ msgstr "" # printf [-v var] format [arguments] # printf [-v VAR] FORMATO [ARGUMENTOJ] -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5813,9 +5935,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5865,15 +5987,16 @@ msgstr "" # complete [-abcdefgjksuv] [-pr] [-DEI] [-o OPCIO] [-A AGO] [-G ŜABLONO] # [-W VORTLISTO] [-F FUNKCIO] [-C KOMANDO] [-X FILTRILO] # [-P PREFIKSO] [-S SUFIKSO] [NOMO ...] -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5926,14 +6049,19 @@ msgstr "" # compgen [-abcdefgjksuv] [-o OPCIO] [-A AGO] [-G ŜABLONO] # [-W VORTLISTO] [-F FUNKCIO] [-C KOMANDO] [-X FILTRILO] # [-P PREFIKSO] [-S SUFIKSO] [VORTO] -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5947,7 +6075,7 @@ msgstr "" " Sukceso, krom se aperas misa opcio aÅ­ okazas eraro." # compopt [-o|+o OPCIO] [-DE] [NOMO ...] -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -6008,7 +6136,7 @@ msgstr "" # [-c quantum] [array] # mapfile [-n NOMBRILO] [-O ORIGINO] [-s NOMBRILO] [-t] [-u DN] [-C RETROVOKO] # [-c KVANTO] [TABELO] -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -6085,7 +6213,7 @@ msgstr "" # readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] # [-c quantum] [array] -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -6095,6 +6223,33 @@ msgstr "" "\n" " Sinonimo de „mapfile‟." +# caller [expr] => +# caller [ESPRIMO] +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Liveras la kuntekston de la kuranta procedurvoko.\n" +#~ "\n" +#~ " Se ESPRIMO malestas, liveru «$line $filename». Se ESPRIMO\n" +#~ " ĉeestas, liveru «$line $subroutine $filename»; ĉi tiu krominformo\n" +#~ " uzeblas por vidigi la vok-stakon.\n" +#~ "\n" +#~ " La valoro de ESPRIMO indikas, kiom da vokkadroj retroiri disde la\n" +#~ " kuranta; la pinta kadro havas la numeron 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "Averto: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: Misa asocitabela ŝlosilo" diff --git a/po/es.gmo b/po/es.gmo index 68edd53ccae3d245191c213fe10b810a6e26ca25..4b9323d7e8e583a16c8e8477afcfbfee87e42cd8 100644 GIT binary patch delta 12626 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 V-Tja?-nsse^^L1@z%N#+{y&*+hCToQ delta 50672 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 XML;QIwt95x-d%MWv%v?a8tnfEo@L$n diff --git a/po/es.po b/po/es.po index 66ac8e661..215ef688b 100644 --- a/po/es.po +++ b/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: GNU bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-09-21 08:56+0200\n" "Last-Translator: Antonio Ceballos Roa <aceballos@gmail.com>\n" "Language-Team: Spanish <es@tp.org.es>\n" @@ -20,123 +20,127 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "subíndice de matriz incorrecto" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: se elimina el atributo nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: no se puede convertir la matriz indexada en asociativa" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: no se puede asignar a un índice que no es numérico" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: se debe usar un subíndice al asignar a una matriz asociativa" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: no se puede crear: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command: no se puede encontrar la combinación de teclas para la orden" +msgstr "" +"bash_execute_unix_command: no se puede encontrar la combinación de teclas " +"para la orden" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: el primer carácter que no es espacio en blanco no es «\"»" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "no hay un `%c' que cierre en %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: falta un «:» separador" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" -msgstr "`%s': no se puede borrar la asignación en la combinación de teclas de órdenes" +msgstr "" +"`%s': no se puede borrar la asignación en la combinación de teclas de órdenes" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "expansión de llaves: no se puede asignar memoria a %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "expansión de llaves: fallo al asignar memoria a %u elementos" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "expansión de llaves: fallo al asignar memoria a «%s»" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "`%s': nombre de alias inválido" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "no se activó la edición de línea" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "`%s': nombre de combinación de teclas inválido" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: no se puede leer: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "`%s': nombre de función desconocido" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s no está asignado a ninguna tecla.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s se puede invocar vía " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "`%s': no se puede borrar la asignación" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "cuenta de bucle" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "solo tiene significado en un bucle `for', `while', o `until'" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -145,7 +149,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Devuelve el contexto de la llamada a subrutina actual.\n" " \n" @@ -154,355 +162,370 @@ msgstr "" " se puede usar para proporcionar un volcado de pila.\n" " \n" " El valor de EXPR indica cuántos marcos de llamada hay que retroceder\n" -" antes del actual; el marco superior es el marco 0." +" antes del actual; el marco superior es el marco 0.\n" +" \n" +" Estado de Salida:\n" +" Devuelve 0 a menos que el shell no esté ejecutando una función de shell\n" +" o EXPR sea inválida." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME no está definido" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "demasiados argumentos" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "directorio nulo" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD no está establecido" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "línea %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "aviso: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: modo de empleo: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: la opción requiere un argumento" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: se requiere un argumento numérico" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: no encontrado" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: opción inválida" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: nombre de opción inválido" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': no es un identificador válido" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "número octal inválido" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "número hexadecimal inválido" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "número inválido" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: la especificación de señal no es válida" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "`%s': no es un pid o una especificación válida de trabajo" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: variable de sólo lectura" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: no se puede asignar" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s fuera de rango" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argumento" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s fuera de rango" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: no existe ese trabajo" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: no hay control de trabajos" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "no hay control de trabajos" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: restringido" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "restringido" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: no es una orden interna de shell" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "error de escritura: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "error al establecer los atributos de la terminal: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "error al obtener los atributos de la terminal: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: error al obtener el directorio actual: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: especificación de trabajo ambigua" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "ayuda no disponible en esta versión" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: no es una matriz indexada" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: no se puede borrar: %s es de solo lectura" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: no se puede borrar" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nombre de acción inválido" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: no hay especificación para completado" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "aviso: es posible que la opción -F no funcione como se espera" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "aviso: es posible que la opción -C no funcione como se espera" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "no se está ejecutando la función de completado" # sólo se puede usar. sv # De acuerdo. cfuga -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "sólo se puede usar dentro de una función" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "no se puede usar `-f' para hacer funciones" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: función de sólo lectura" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: referencia variable no puede ser una matriz" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: no se permiten las autoreferencias a variables nameref" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: referencia de nombre circular" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "`%s': nombre variable inválido para referencia de nombre" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: no se pueden destruir variables de matriz de esta forma" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: no se puede convertir una matriz asociativa a indexada" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: asignación obsoleta de matriz compuesta entrecomillada" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "la carga dinámica no está disponible" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "no se puede abrir el objeto compartido %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "no se puede encontrar %s en el objeto compartido %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: la orden interna dinámica ya está cargada" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" -msgstr "función de carga para %s devuelve fallo (%d): no se ha efectuado la carga" +msgstr "" +"función de carga para %s devuelve fallo (%d): no se ha efectuado la carga" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: no cargado dinámicamente" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: no se puede borrar: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: es un directorio" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: no es un fichero regular" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: el fichero es demasiado grande" # file=fichero. archive=archivo. Si no, es imposible traducir tar. sv # De acuerdo. Corregido en todo el fichero. cfuga -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: no se puede ejecutar el fichero binario" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: no se puede ejecutar: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "cerrar sesión\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "no es un shell de inicio de sesión: utilice `exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Hay trabajos detenidos.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Hay trabajos en ejecución.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "no se ha encontrado ninguna orden" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "especificación de historia" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: no se puede abrir el fichero temporal: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "actual" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "trabajo %d iniciado sin control de trabajo" @@ -517,11 +540,11 @@ msgstr "%s: opción ilegal -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: la opción requiere un argumento -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "asociación desactivada" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: tabla de asociación vacía\n" @@ -547,15 +570,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "no hay temas de ayuda que coincidan con `%s'. Pruebe `help help' o `man -k %s' o `info %s'." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"no hay temas de ayuda que coincidan con `%s'. Pruebe `help help' o `man -k " +"%s' o `info %s'." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: no se puede abrir: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -576,21 +602,31 @@ msgstr "" "Un asterisco (*) junto a un nombre significa que la orden está desactivada.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "no se puede usar más de uno de -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "posición en la historia" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "nombre de variable matriz vacío" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parámetro nulo o no establecido" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: marca de tiempo inválida" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: falló la expansión de la historia" @@ -604,113 +640,113 @@ msgstr "%s: falló inlib" msgid "no other options allowed with `-x'" msgstr "no se permiten otras opciones con `-x'" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: los argumentos deben ser IDs de procesos o trabajos" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Error desconocido" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "se esperaba una expresión" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: no es una matriz indexada" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: especificación de descriptor de fichero inválida" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: descriptor de fichero inválido: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: cuenta de líneas inválida" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: origen de matriz inválido" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: quantum de llamada inválido" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "nombre de variable matriz vacío" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "se requiere el soporte de variable de matriz" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "`%s': falta el carácter de formato" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "`%c': especificación de formato de tiempo inválida" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "`%c': carácter de formato inválido" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "aviso: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "problema con el análisis del formato: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "falta el dígito hexadecimal para \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "falta el dígito unicode para \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "no hay otro directorio" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: argumento inválido" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<no hay directorio actual>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "la pila de directorios está vacía" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "índice de pilas de directorios" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -725,10 +761,12 @@ 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 "" "Muestra la lista de directorios actualmente grabados. Los directorios\n" @@ -744,13 +782,14 @@ msgstr "" " \tsu posición en la pila como prefijo\n" " \n" " Argumentos:\n" -" +N\tMuestra la N-ésima entrada contando desde la izquierda de la lista\n" +" +N\tMuestra la N-ésima entrada contando desde la izquierda de la " +"lista\n" " \tmostrada por dirs cuando se llama sin opciones, empezando en cero.\n" " \n" " -N\tMuestra la N-ésima entrada contando desde la derecha de la lista\n" " \tmostrada por dirs cuando se llama sin opciones, empezando en cero." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -796,7 +835,7 @@ msgstr "" " \n" " La orden interna `dirs' muestra la pila de directorios." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -817,7 +856,8 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" "Quita entradas de la pila de directorios. Sin argumentos, borra\n" -" el directorio superior de la pila, y cambia al nuevo directorio superior.\n" +" el directorio superior de la pila, y cambia al nuevo directorio " +"superior.\n" " \n" " Opciones:\n" " -n\tSuprime el cambio normal de directorio cuando se borran\n" @@ -836,328 +876,342 @@ msgstr "" " \n" " La orden interna `dirs' muestra la pila de directorios." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: especificación del tiempo de expiración inválida" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "error de lectura: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "sólo se puede usar `return' desde una función o un script leído con `source'" +msgstr "" +"sólo se puede usar `return' desde una función o un script leído con `source'" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "no se puede borrar al mismo tiempo una función y una variable" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: no es una variable de matriz" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: no es una función" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: no se puede exportar" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "contador de desplazamiento" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "no se pueden activar y desactivar opciones del shell simultáneamente" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: nombre de opción de shell inválido" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "argumento de nombre de fichero requerido" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: no se encontró el fichero" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "no se puede suspender" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "no se puede suspender un shell de entrada" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s es un alias de `%s'\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s es una palabra clave del shell\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s: es una función\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s es una función interna de shell especial\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s: es una función\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s es una orden interna del shell\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s is %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s está asociado (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: límite de argumento inválido" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': orden incorrecta" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: no se puede obtener el límite: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "límite" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: no se puede modificar el límite: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "número octal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': operador de modo simbólico inválido" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': carácter de modo simbólico inválido" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " línea " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "última orden: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Abortando..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORME: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "DEBUG aviso: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "error de orden desconocida" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "tipo de orden incorrecto" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "conector erróneo" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "salto erróneo" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: variable sin asignar" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aha expirado mientras esperaba alguna entrada: auto-logout\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "no se puede redirigir la entrada estándar desde /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': carácter de formato inválido" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] aún existe" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "error de tubería" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: nivel máximo de anidamiento de evaluaciones excedido (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: nivel máximo de anidamiento de lecturas con `source' excedido (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: nivel máximo de anidamiento de funciones excedido (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restringido: no se puede especificar `/' en nombres de órdenes" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: orden no encontrada" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: intérprete erróneo" # file=fichero. archive=archivo. Si no, es imposible traducir tar. sv # De acuerdo. Corregido en todo el fichero. cfuga -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: no se puede ejecutar: no se ha encontrado el fichero requerido" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: intérprete erróneo" - # file=fichero. archive=archivo. Si no, es imposible traducir tar. sv # De acuerdo. Corregido en todo el fichero. cfuga -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: no se puede ejecutar fichero binario: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "`%s': es una orden interna especial" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "no se puede duplicar el df %d al df %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "se ha excedido el nivel de recursión de la expresión" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "desbordamiento de la pila de recursión" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "error sintáctico en la expresión" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "se intentó asignar a algo que no es una variable" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "error sintáctico en asignación de variable" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "división por 0" # token en bison fue traducido como terminal. ¿Lo traducimos igual aquí # o lo dejamos como 'unidad' o 'elemento'? cfuga -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "defecto: elemento de asignación de expresión erróneo" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "se esperaba `:' para la expresión condicional" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exponente menor que 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" -msgstr "se esperaba un identificador después del pre-incremento o pre-decremento" +msgstr "" +"se esperaba un identificador después del pre-incremento o pre-decremento" # falta , singular em+ # mmmh, puede faltar más de un paréntesis cfuga # tiene razón Enrique, es singular. cfuga -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "falta un `)'" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "error sintáctico: se esperaba un operando" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "error sintáctico: operador aritmético inválido" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (el elemento de error es \"%s\")" @@ -1174,7 +1228,7 @@ msgstr "constante entera inválida" msgid "value too great for base" msgstr "valor demasiado grande para la base" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: error de expresión\n" @@ -1183,49 +1237,57 @@ msgstr "%s: error de expresión\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: no se puede acceder a los directorios padre" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "`%s': es una orden interna especial" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "no se puede reestablecer el modo nodelay para el df %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "no se puede asignar un nuevo descriptor de fichero para la entrada de bash desde el df %d" +msgstr "" +"no se puede asignar un nuevo descriptor de fichero para la entrada de bash " +"desde el df %d" # buffer: espacio intermedio , alojamiento intermedio ( me gusta menos ) # em+ # almacenamiento intermedio. cfuga -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" -msgstr "save_bash_input: el almacenamiento intermedio ya existe para el nuevo df %d" +msgstr "" +"save_bash_input: el almacenamiento intermedio ya existe para el nuevo df %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: tubería de pgrp" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: BUCLE: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: BUCLE: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "el pid `forked' %d aparece en el trabajo en ejecución %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "borrando el trabajo detenido %d con grupo de proceso %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) se marca como vivo aún" @@ -1236,137 +1298,137 @@ msgstr "add_process: pid %5ld (%s) se marca como vivo aún" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: no existe tal pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Señal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Hecho" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Detenido" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Detenido(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Ejecutando" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Hecho(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Salida %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Estado desconocido" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(`core' generado) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (da: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid hijo (%ld a %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld no es un proceso hijo de este shell" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: No hay un registro del proceso %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: el trabajo %d está detenido" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: no hay trabajos actuales" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: el trabajo ha terminado" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: el trabajo %d ya está en segundo plano" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: se activa WNOHANG para evitar el bloque indefinido" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: línea %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (`core' generado)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(dir ahora: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: falló getpgrp" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: no hay control de trabajos en segundo plano" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: disciplina de línea" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "no se puede establecer el grupo de proceso de terminal (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "no hay control de trabajos en este shell" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: falló la aserción: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1375,223 +1437,238 @@ msgstr "" "\r\n" "malloc: %s:%d: aserción arruinada\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "desconocido" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: bloque en la lista libre sobreescrito" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: se llamó con un argumento de bloque previamente liberado" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: se llamó con un argumento de bloque sin asignar" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" -msgstr "free: se detectó un desbordamiento por debajo; mh_nbytes fuera de rango" +msgstr "" +"free: se detectó un desbordamiento por debajo; mh_nbytes fuera de rango" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: se detectó un desbordamiento por debajo; magic8 corrupto" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" -msgstr "free: los tamaños de los fragmentos del inicio y del final son diferentes" +msgstr "" +"free: los tamaños de los fragmentos del inicio y del final son diferentes" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: se llamó con un argumento de bloque sin asignar" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" -msgstr "realloc: se detectó un desbordamiento por debajo; mh_nbytes fuera de rango" +msgstr "" +"realloc: se detectó un desbordamiento por debajo; mh_nbytes fuera de rango" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: se detectó un desbordamiento por debajo; magic8 corrupto" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: los tamaños de los pedazos de inicio y fin son diferentes" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: ¿la tabla alloc está llena con FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: ¿%p ya está en la tabla como asignado?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: ¿%p ya está en la tabla como libre?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "base inválida" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: anfitrión desconocido" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: servicio inválido" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: especificación de ruta de red errónea" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "no hay soporte para operaciones de red" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: no se puede cambiar el local (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: no se puede cambiar el local (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: no se puede cambiar el local (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: no se puede cambiar el local (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Tiene correo en $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Tiene correo nuevo en $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "El correo en %s fue leído\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "error sintáctico: se requiere una expresión aritmética" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "error sintáctico: `;' inesperado" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "error sintáctico: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: tipo de instrucción %d erróneo" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "el documento-aquí en la línea %d está delimitado por fin-de-fichero (se esperaba `%s')" +msgstr "" +"el documento-aquí en la línea %d está delimitado por fin-de-fichero (se " +"esperaba `%s')" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" -msgstr "make_redirection: la instrucción de redirección `%d' está fuera de rango" +msgstr "" +"make_redirection: la instrucción de redirección `%d' está fuera de rango" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) excede TAMAÑO_MAX (%lu): línea truncada" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) excede TAMAÑO_MAX (%lu): línea " +"truncada" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "error de escritura: %s" -#: parse.y:2921 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "número máximo de documentos en «here--document» excedido" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "EOF inesperado mientras se buscaba un `%c' coincidente" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "EOF inesperado mientras se buscaba `]]'" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "error sintáctico en la expresión condicional: elemento inesperado `%s'" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "error sintáctico en la expresión condicional" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "elemento inesperado `%s', se esperaba `)'" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "se esperaba `)'" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "argumento inesperado `%s' para el operador unario condicional" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "argumento inesperado para el operador unario condicional" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "elemento inesperado `%s', se esperaba un operador binario condicional" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "se esperaba un operador binario condicional" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "argumento inesperado `%s' para el operador binario condicional" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "argumento inesperado para el operador binario condicional" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "elemento inesperado `%c' en la orden condicional" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "elemento inesperado `%s' en la orden condicional" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "elemento inesperado %d en la orden condicional" @@ -1602,12 +1679,12 @@ msgstr "elemento inesperado %d en la orden condicional" # provocado por el símbolo. Simplemente estar cerca del mismo. cfuga # Por consistencia con el siguiente, yo borraría la coma. sv # Cierto. Coma borrada. cfuga -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "error sintáctico cerca del elemento inesperado `%s'" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "error sintáctico cerca de `%s'" @@ -1616,131 +1693,140 @@ msgstr "error sintáctico cerca de `%s'" # no se esperaba el final de la línea em+ # Ojo, que end of file es fin de fichero, no de línea. sv # Se hicieron ambos cambios. cfuga -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "error sintáctico: no se esperaba el final del fichero" + +# Propongo cambio de orden: +# no se esperaba el final de la línea em+ +# Ojo, que end of file es fin de fichero, no de línea. sv +# Se hicieron ambos cambios. cfuga +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "error sintáctico: no se esperaba el final del fichero" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "error sintáctico" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Utilice \"%s\" para dejar el shell.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "EOF inesperado mientras se buscaba un `)' coincidente" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: función `%s' no encontrada" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: posible bucle de reintento" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: COMPSPEC nulo" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: conector erróneo `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: descriptor de fichero inválido" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: puntero NULL a fichero" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != numfich xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': carácter de formato inválido" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "descriptor de fichero fuera de rango" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: redireccionamiento ambiguo" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: no se puede sobreescribir un fichero existente" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restringido: no se puede redirigir la salida" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "no se puede crear un fichero temporal para el documento-aquí: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: no se puede asignar el fd a la variable" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "no se admite /dev/(tcp|udp)/anfitrion/puerto sin red" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "error de redirección: no se puede duplicar el df" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "¡no se puede encontrar /tmp, crear por favor!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp debe ser un nombre de directorio válido" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "modo de impresión bonita desactivado en shells interactivos" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: opción inválida" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "no se puede establecer el uid %d: uid efectivo %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "no se puede establecer gid a %d: gid efectivo %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "no puede ejecutar el depurador; modo depurado desactivado" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: es un directorio" @@ -1748,11 +1834,11 @@ msgstr "%s: es un directorio" # Yo pondría "no tengo ningún nombre". sv # Revisé el código fuente de bash. Es un mensaje de error cuando no se # encuentra el nombre del usuario que ejecuta el shell. cfuga -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "¡No tengo nombre de usuario!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versión %s-(%s)\n" @@ -1762,7 +1848,7 @@ msgstr "GNU bash, versión %s-(%s)\n" # traducido en otras ocasiones. Sehll script lo henmos traducido # como guión del shell , eso es seguro ... así que puede estar # bien así , ya lo verán otros em+ -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1771,49 +1857,53 @@ msgstr "" "Modo de empleo:\t%s [opción GNU larga] [opción] ...\n" "\t%s [opción GNU larga] [opción] fichero de shell ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Opciones GNU largas:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Opciones del shell:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD o -c orden o -O opción_shopt\t\t(sólo invocación)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s o -o opción\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Teclee `%s -c \"help set\"' para más información sobre las opciones del shell.\n" +msgstr "" +"Teclee `%s -c \"help set\"' para más información sobre las opciones del " +"shell.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "Teclee `%s -c help' para más información sobre las órdenes internas del shell.\n" +msgstr "" +"Teclee `%s -c help' para más información sobre las órdenes internas del " +"shell.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Utilice la orden `bashbug' para reportar defectos.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "página inicial bash: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Ayuda general utilizando software GNU: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: operación inválida" @@ -1994,133 +2084,141 @@ msgstr "Solicitud de información" msgid "Unknown Signal #%d" msgstr "Señal Desconocida #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "sustitución errónea: no hay un `%s' que cierre en %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: no se puede asignar una lista a un miembro de la matriz" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "no se puede crear la tubería para la sustitución del proceso" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "no se puede crear un proceso hijo para la sustitución del proceso" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "no se puede abrir la tubería llamada %s para lectura" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "no se puede abrir la tubería llamada %s para escritura" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "no se puede duplicar la tubería llamada %s como df %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "sustitución de orden: se ignora byte nulo en la entrada" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: no se puede duplicar la tubería como df 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "no se puede crear la tubería para la sustitución de la orden" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "no se puede crear un proceso hijo para la sustitución de la orden" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: no se puede duplicar la tubería como df 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: nombre de variable inválido para referencia de nombre" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: expansión indirecta inválida" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: nombre de variable inválido" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parámetro no establecido" +msgid "%s: bad substitution" +msgstr "%s: sustitución errónea" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parámetro nulo o no establecido" +msgid "%s: parameter not set" +msgstr "%s: parámetro no establecido" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: expresión de subcadena < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: sustitución errónea" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: no se puede asignar de esta forma" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "versiones futuras del intérprete obligarán la evaluación como una sustitución aritmética" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"versiones futuras del intérprete obligarán la evaluación como una " +"sustitución aritmética" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "sustitución errónea: no hay una \"`\" que cierre en %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "no hay coincidencia: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "se esperaba un argumento" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: se esperaba una expresión entera" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "`)' esperado" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "se esperaba `)', se encontró %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: se esperaba un operador binario" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: se esperaba un operador unario" @@ -2132,151 +2230,171 @@ msgstr "%s: se esperaba un operador unario" # Abreviando "falta [al menos] un `]'" saldría: "falta un `]'". # ¿No es mejor "falta algún `]'"? cfuga # Tiene razón Enrique: singular. cfuga -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "falta un `]'" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "error sintáctico: `%s' inesperado" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "número de señal inválido" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "manejador de capturas: se ha excedido el nivel máximo de manejadores de capturas (%d)" +msgstr "" +"manejador de capturas: se ha excedido el nivel máximo de manejadores de " +"capturas (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: valor erróneo en trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: el manejador de señal es SIG_DFL, reenviando %d (%s) a mí mismo" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: el manejador de señal es SIG_DFL, reenviando %d (%s) a mí " +"mismo" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: señal errónea %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "error al importar la definición de la función para `%s'" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "el nivel de shell (%d) es demasiado alto, se reestablece a 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "número máximo de documentos en «here--document» excedido" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: no hay contexto de función en el ámbito actual" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: variable quizá no es valor asignado" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: no se puede heredar un valor de un tipo incompatible" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: asignando entero a nombre referencia" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: no hay contexto de función en el ámbito actual" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s tiene exportstr nulo" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "carácter inválido %d en exportstr para %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "no hay `=' en exportstr para %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "pop_var_context: la cabeza de shell_variables no es un contexto de función" +msgstr "" +"pop_var_context: la cabeza de shell_variables no es un contexto de función" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: no es un contexto global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: la cabeza de shell_variables no es un ámbito de entorno temporal" +msgstr "" +"pop_scope: la cabeza de shell_variables no es un ámbito de entorno temporal" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: no se puede abrir como FICHERO" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: valor inválido para el descriptor de fichero de rastreo" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: valor de compatibilidad fuera del rango" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Licencia GPLv3+: GPL de GNU versión 3 o posterior <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Licencia GPLv3+: GPL de GNU versión 3 o posterior <http://gnu.org/licenses/" +"gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versión %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Esto es software libre, es libre para modificar y redistribuirlo." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "No hay NINGUNA GARANTÍA, a la extensión permitida por la ley." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: no se pueden asignar %lu bytes (%lu bytes asignados)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: no se pueden asignar %lu bytes" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: no se pueden asignar %lu bytes (%lu bytes asignados)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: no se pueden asignar %lu bytes" @@ -2290,8 +2408,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] nombre [nombre ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m comb_teclas] [-f fichero] [-q nombre] [-u nombre] [-r secteclas] [-x secteclas:orden-shell] [secteclas:función-leerlinea o orden-leerlinea]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m comb_teclas] [-f fichero] [-q nombre] [-u nombre] [-r " +"secteclas] [-x secteclas:orden-shell] [secteclas:función-leerlinea o orden-" +"leerlinea]" #: builtins.c:56 msgid "break [n]" @@ -2310,7 +2433,8 @@ msgid "caller [expr]" msgstr "caller [expresión]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]]] [dir]" #: builtins.c:68 @@ -2322,12 +2446,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] orden [arg ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [nombre[=valor] ...] o declare -p [-aAfFilnrtux] [nombre ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [nombre[=valor] ...] o declare -p [-aAfFilnrtux] " +"[nombre ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] nombre[=valor] ... o typeset -p [-aAfFilnrtux] [nombre ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] nombre[=valor] ... o typeset -p [-aAfFilnrtux] " +"[nombre ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2386,8 +2518,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [patrón ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d despl] [n] o history -anrw [fichero] o history -ps arg [arg...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d despl] [n] o history -anrw [fichero] o history -ps arg " +"[arg...]" # jobspec no es sólo el pid del proceso, puede ser tambien # el nombre de la orden que se creo con el proceso em+ @@ -2403,16 +2539,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [idtrabajo ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s id_señal | -n num_señal | -id_señal] pid | idtrabajo ... o kill -l [id_señal]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s id_señal | -n num_señal | -id_señal] pid | idtrabajo ... o kill -l " +"[id_señal]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a matriz] [-d delim] [-i texto] [-n ncars] [-N ncars] [-p prompt] [-t tiempo] [-u df] [nombre ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a matriz] [-d delim] [-i texto] [-n ncars] [-N ncars] [-p " +"prompt] [-t tiempo] [-u df] [nombre ...]" #: builtins.c:140 msgid "return [n]" @@ -2459,7 +2604,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] id_señal ...]" #: builtins.c:168 @@ -2483,110 +2629,139 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NOMBRE [in PALABRAS ... ] ; do ÓRDENES; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do ÓRDENES; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NOMBRE [in PALABRAS ... ;] do ÓRDENES; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] tubería" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case PALABRA in [PATRÓN [| PATRÓN]...) ÓRDENES ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if ÓRDENES; then ÓRDENES; [ elif ÓRDENES; then ÓRDENES; ]...[ else ÓRDENES; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if ÓRDENES; then ÓRDENES; [ elif ÓRDENES; then ÓRDENES; ]...[ else " +"ÓRDENES; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while ÓRDENES; do ÓRDENES-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until ÓRDENES; do ÓRDENES-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NOMBRE] orden [redirecciones]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function nombre { ÓRDENES ; } o nombre () { ÓRDENES ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ ÓRDENES ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "id_trabajo [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expresión ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expresión ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Nombres y significados de algunas variables de shell" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [nombre_opción...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] formato [argumentos]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opción] [-A acción] [-G patglob] [-W listapalabras] [-F función] [-C orden] [-X patfiltro] [-P prefijo] [-S sufijo] [nombre ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o opción] [-A acción] [-G patglob] [-" +"W listapalabras] [-F función] [-C orden] [-X patfiltro] [-P prefijo] [-S " +"sufijo] [nombre ...]" -#: builtins.c:235 -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 opción] [-A acción] [-G patglob] [-W listapalabras] [-F función] [-C orden] [-X patfiltro] [-P prefijo] [-S sufijo] [palabra]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o opción] [-A acción] [-G patglob] [-W " +"listapalabras] [-F función] [-C orden] [-X patfiltro] [-P prefijo] [-S " +"sufijo] [palabra]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o opción] [-DEI] [nombre ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d delim] [-n cuenta] [-O origen] [-s cuenta] [-t] [-u df] [-C llamada] [-c quantum] [matriz]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d delim] [-n cuenta] [-O origen] [-s cuenta] [-t] [-u df] [-C llamada] [-c quantum] [matriz]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d delim] [-n cuenta] [-O origen] [-s cuenta] [-t] [-u df] [-C " +"llamada] [-c quantum] [matriz]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d delim] [-n cuenta] [-O origen] [-s cuenta] [-t] [-u df] [-C " +"llamada] [-c quantum] [matriz]" # Más en español sería: se define un alias por cada NOMBRE cuyo VALOR se da. sv # Lo mismo de antes: el alias es expandido -> el alias se expande. sv # no alias -> ningún alias. sv # De acuerdo. cfuga -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2601,7 +2776,8 @@ msgid "" " -p\tprint all defined aliases in a reusable format\n" " \n" " Exit Status:\n" -" alias returns true unless a NAME is supplied for which no alias has been\n" +" alias returns true unless a NAME is supplied for which no alias has " +"been\n" " defined." msgstr "" "Define o muestra alias.\n" @@ -2621,7 +2797,7 @@ msgstr "" " alias devuelve verdadero a menos que se dé un NOMBRE para el cual\n" " no se haya definido ningún alias." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2639,7 +2815,7 @@ msgstr "" # lee 'la'... em+ # Corregido. Además, es plural: lee las asignaciones... cfuga -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2651,25 +2827,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2684,19 +2865,22 @@ msgstr "" " p.ej., bind '\"\\C-x\\C-r\": re-read-init-file'.\n" " \n" " Opciones:\n" -" -m comb_teclas Usa COMB_TECLAS como la combinación de teclas durante el\n" +" -m comb_teclas Usa COMB_TECLAS como la combinación de teclas " +"durante el\n" " que dure esta orden. Los nombres de combinaciones\n" " de teclas aceptables son emacs, emacs-standard,\n" " emacs-meta, emacs-ctlx, vi, vi-move, vi-command y\n" " vi-insert.\n" " -l Lista los nombres de las funciones.\n" " -P Lista los nombres de las funciones y asignaciones.\n" -" -p Lista las funciones y asignaciones de tal forma que\n" +" -p Lista las funciones y asignaciones de tal forma " +"que\n" " se pueda ruutilizar como entrada.\n" " -S Lista las secuencias de teclas que invocan macros\n" " y sus valores.\n" " -s Lista las secuencias de teclas que invocan macros\n" -" y sus valores en una forma que se pueden reutilizar como\n" +" y sus valores en una forma que se pueden reutilizar " +"como\n" " entrada.\n" " -V Lista los nombres de variables y valores.\n" " -v Lista los nombres de variables y valores en una\n" @@ -2713,7 +2897,7 @@ msgstr "" " bind devuelve 0 a menos que se presente una opción desconocida o suceda\n" " un error." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2731,7 +2915,7 @@ msgstr "" " Estado de Salida:\n" " El estado de salida es 0 a menos que N no sea mayor o igual a 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2744,18 +2928,20 @@ msgstr "" "Reanuda bucles for, while o until\n" " \n" " Reanuda la siguiente iteración del bucle FOR, WHILE o UNTIL\n" -" circundante. Si se especifica N, reanuda en el N-ésimo bucle circundante.\n" +" circundante. Si se especifica N, reanuda en el N-ésimo bucle " +"circundante.\n" " \n" " Estado de Salida:\n" " El estado de salida es 0 a menos que N no sea mayor o igual a 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2764,15 +2950,17 @@ msgstr "" "Ejecuta órdenes internas del shell\n" " \n" " Ejecuta la ORDEN-INTERNA-SHELL con los argumentos ARGs sin realizar la\n" -" búsqueda interna de órdenes. Esto es útil cuando se desea reimplementar\n" -" una orden interna de la shell como una función de shell, pero se necesita\n" +" búsqueda interna de órdenes. Esto es útil cuando se desea " +"reimplementar\n" +" una orden interna de la shell como una función de shell, pero se " +"necesita\n" " ejecutar la orden interna dentro de la función.\n" " \n" " Estado de Salida:\n" " Devuelve el estado de salida de la ORDEN-INTERNA-SHELL, o falso si la\n" " ORDEN-INTERNA-SHELL no es una orden interna de shell." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2803,20 +2991,27 @@ msgstr "" # Slash lo venimos traduciendo por barra inclinada , y backslash # por barra invertida em++ # Corregido en toda la traducción. cfuga -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2832,11 +3027,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Modifica el directorio de trabajo del shell.\n" @@ -2858,21 +3055,24 @@ msgstr "" " -L\tfuerza a seguir los enlaces simbólicos: resuelve los enlaces\n" " \t\tsimbólicos en DIR después de procesar las instancias de `..'\n" " -P\tusa la estructura física de directorios sin seguir los enlaces\n" -" \t\tsimbólicos: resuelve los enlaces simbólicos en DIR antes de procesar\n" +" \t\tsimbólicos: resuelve los enlaces simbólicos en DIR antes de " +"procesar\n" " \t\tlas instancias de `..'\n" " -e\tsi se da la opción -P y el directorio actual de trabajo no se\n" -" \t\tpuede determinar con éxito, termina con un estado diferente de cero.\n" +" \t\tpuede determinar con éxito, termina con un estado diferente de " +"cero.\n" " \n" " La acción por defecto es seguir los enlaces simbólicos, como si se\n" " especificara `-L'.\n" -" `..' se procesa quitando la componente del nombre de la ruta inmediatamente\n" +" `..' se procesa quitando la componente del nombre de la ruta " +"inmediatamente\n" " anterior hasta una barra inclinada o el comienzo de DIR.\n" " \n" " Estado de Salida:\n" " Devuelve 0 si se cambia el directorio, y si $PWD está definido como\n" " correcto cuando se emplee -P; de otra forma es diferente a cero." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2900,7 +3100,7 @@ msgstr "" " Devuelve 0 a menos que se de una opción inválida o no se pueda leer\n" " el directorio actual." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2916,7 +3116,7 @@ msgstr "" " Estado de Salida:\n" " Siempre correcto." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2928,7 +3128,7 @@ msgstr "" " Estado de Salida:\n" " Siempre correcto." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2940,12 +3140,13 @@ msgstr "" " Estado de Salida:\n" " Siempre incorrecto." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2960,8 +3161,10 @@ msgstr "" "Ejecuta una orden simple o muestra información sobre órdenes.\n" " \n" " Ejecuta la ORDEN con ARGumentos, suprimiendo la búsqueda de funciones\n" -" de shell, o muestra información sobre las ORDENes especificadas. Se puede\n" -" usar para invocar órdenes en disco cuando existe una función con el mismo\n" +" de shell, o muestra información sobre las ORDENes especificadas. Se " +"puede\n" +" usar para invocar órdenes en disco cuando existe una función con el " +"mismo\n" " nombre.\n" " \n" " Opciones:\n" @@ -2975,7 +3178,8 @@ msgstr "" " Devuelve el estado de salida de la ORDEN, o fallo si no se encuentra\n" " la ORDEN." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -3003,12 +3207,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -3054,7 +3260,7 @@ msgstr "" " Devuelve correcto a menos que se dé una opción inválida o\n" " suceda un error de asignación de variable." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3064,7 +3270,7 @@ msgstr "" " \n" " Sinónimo de `declare'. Vea `help declare'." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3090,11 +3296,12 @@ msgstr "" " Devuelve correcto a menos que se dé una opción inválida, suceda\n" " un error de asignación, o el shell no esté ejecutando una función." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3118,9 +3325,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3133,12 +3342,14 @@ msgstr "" " \n" " Opciones:\n" " -n\tno agrega un carácter de fin de línea\n" -" -e\tactiva la interpretación de los siguientes caracteres de escape de\n" +" -e\tactiva la interpretación de los siguientes caracteres de escape " +"de\n" " \t\tbarra invertida\n" " -E\tdesactiva explícitamente la interpretación de caracteres de\n" " \t\tescape de barra invertida\n" " \n" -" `echo' interpreta los siguientes caracteres de escape de barra invertida:\n" +" `echo' interpreta los siguientes caracteres de escape de barra " +"invertida:\n" " \\a\talerta (timbre)\n" " \\b\tborrado hacia atrás\n" " \\c\tsuprime toda salida a continuación\n" @@ -3156,13 +3367,14 @@ msgstr "" " \t\tpuede ser de uno o dos dígitos hexadecimales\n" " \\uHHHH\tcarácter Unicode cuyo valor es el valor hexadecimal HHHH.\n" " \t\tHHHH puede tener de uno a cuatro dígitos hexadecimales.\n" -" \\UHHHHHHHH carácter Unicode cuyo valor es el valor hexadecimal HHHHHHHH.\n" +" \\UHHHHHHHH carácter Unicode cuyo valor es el valor hexadecimal " +"HHHHHHHH.\n" " \t\tHHHHHHHH puede tener de uno a ocho dígitos hexadecimales.\n" " \n" " Estado de Salida:\n" " Devuelve correcto a menos que suceda un error de escritura." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3184,7 +3396,8 @@ msgstr "" " Estado de Salida:\n" " Devuelve correcto a menos que suceda un error de escritura." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3204,6 +3417,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3217,30 +3436,35 @@ msgstr "" " la orden interna del shell, sin usar el nombre de ruta completo.\n" " \n" " Opciones:\n" -" -a\tmuestra la lista de órdenes internas indicando si están activas o no\n" +" -a\tmuestra la lista de órdenes internas indicando si están activas o " +"no\n" " -n\tdesactiva cada NOMBRE o muestra la lista de órdenes internas\n" " \t\tdesactivadas\n" " -p\tmuestra la lista de órdenes internas en una forma reusable\n" -" -s\tmuestra solo los nombres de las órdenes internas `especiales' Posix\n" +" -s\tmuestra solo los nombres de las órdenes internas `especiales' " +"Posix\n" " \n" " Opciones que controlan la carga dinámica:\n" -" -f\tCarga la función interna NOMBRE desde el objeto compartido FICHERO\n" +" -f\tCarga la función interna NOMBRE desde el objeto compartido " +"FICHERO\n" " -d\tBorra una orden interna cargada con -f\n" " \n" " Sin opciones, se activa cada NOMBRE.\n" " \n" -" Para usar el `test' que se encuentra en $PATH en lugar de la orden interna\n" +" Para usar el `test' que se encuentra en $PATH en lugar de la orden " +"interna\n" " del shell, ejecute `enable -n test'.\n" " \n" " Estado de Salida:\n" " Devuelve correcto a menos que NOMBRE no sea una orden interna del shell\n" " o suceda un error." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3248,7 +3472,8 @@ msgid "" msgstr "" "Ejecuta argumentos como una orden de shell.\n" " \n" -" Combina los ARGumentos en una sola cadena, usa el resultado como entrada\n" +" Combina los ARGumentos en una sola cadena, usa el resultado como " +"entrada\n" " para el shell, y ejecuta las órdenes resultantes.\n" " \n" " Estado de Salida:\n" @@ -3259,7 +3484,7 @@ msgstr "" # en una de dos formas -> en una de las dos formas siguientes em+ # dar argumentos -> especificar em+ # De acuerdo. cfuga -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3339,12 +3564,13 @@ msgstr "" " Devuelve correcto si se encuentra una opción; falla si se encuentra\n" " el final de las opciones o sucede un error." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3352,17 +3578,20 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Reemplaza el shell con la orden dada.\n" " \n" " Ejecuta la ORDEN, reemplazando este shell con el programa especificado.\n" " Los ARGUMENTOS se vuelven los argumentos de la ORDEN. Si no se\n" -" especifica la ORDEN, cualquier redirección toma efecto en el shell actual.\n" +" especifica la ORDEN, cualquier redirección toma efecto en el shell " +"actual.\n" " \n" " Opciones:\n" " -a nombre\tpasa el NOMBRE como el argumento cero de la ORDEN\n" @@ -3376,7 +3605,7 @@ msgstr "" " Devuelve éxito a menos que no se encuentre la ORDEN o que suceda un\n" " error de redirección." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3385,14 +3614,16 @@ msgid "" msgstr "" "Termina el shell.\n" " \n" -" Termina el shell con un estado de N. Si se omite N, el estado de salida\n" +" Termina el shell con un estado de N. Si se omite N, el estado de " +"salida\n" " es el mismo de la última orden ejecutada." -#: builtins.c:724 +#: builtins.c:732 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 "" "Termina un shell de entrada.\n" @@ -3400,17 +3631,20 @@ msgstr "" " Termina un shell de entrada con un estado de salida de N. Devuelve un\n" " error si no se ejecuta en un shell de entrada." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3423,13 +3657,17 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Muestra o ejecuta órdenes de la lista de la historia.\n" " \n" " fc se usa para listar o editar y reejecutar órdenes de la lista de la\n" -" historia. PRIMERO y ÚLTIMO pueden ser números que especifican el rango,\n" +" historia. PRIMERO y ÚLTIMO pueden ser números que especifican el " +"rango,\n" " o PRIMERO puede ser una cadena, que significa la orden más reciente que\n" " comience con esa cadena.\n" " \n" @@ -3437,7 +3675,8 @@ msgstr "" " \t\tdespués EDITOR, después vi\n" " -l \tlista laslíneas en lugar de editar\n" " -n\tomite los números de línea al listar\n" -" -r\tinvierte el orden de las líneas (muestra primero las más recientes)\n" +" -r\tinvierte el orden de las líneas (muestra primero las más " +"recientes)\n" " \n" " Con el formato `fc -s [pat=rep ...] [orden]', la ORDEN se\n" " ejecuta de nuevo después de realizar la sustitución ANT=NUEVO.\n" @@ -3447,10 +3686,11 @@ msgstr "" " `r' reejecuta la última orden.\n" " \n" " Estado de Salida:\n" -" Devuelve correcto o el estado de la orden ejecutada; si sucede un error,\n" +" Devuelve correcto o el estado de la orden ejecutada; si sucede un " +"error,\n" " es diferente de cero." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3464,18 +3704,22 @@ msgstr "" "Mueve el trabajo al primer plano.\n" " \n" " Ubica el trabajo identificado con IDTRABAJO en primer plano y\n" -" lo convierte en el trabajo actual. Si IDTRABAJO no está presente, se usa\n" +" lo convierte en el trabajo actual. Si IDTRABAJO no está presente, se " +"usa\n" " la noción del shell del trabajo actual.\n" " \n" " Estado de Salida:\n" -" El estado de la orden ubicada en primer plano, o falla si sucede un error." +" El estado de la orden ubicada en primer plano, o falla si sucede un " +"error." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3491,12 +3735,13 @@ msgstr "" " Devuelve correcto a menos que el control de trabajos no esté activado o\n" " suceda un error." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3535,7 +3780,7 @@ msgstr "" " Devuelve correcto a menos que no se encuentre NOMBRE o se proporcione\n" " una opción inválida." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3553,7 +3798,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Muestra información sobre órdenes internas.\n" " \n" @@ -3575,7 +3821,8 @@ msgstr "" " Devuelve correcto a menos que no se encuentre PATRÓN o se proporcione\n" " una opción inválida." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3599,11 +3846,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3620,7 +3872,8 @@ msgstr "" " \t\tdesplazamientos negativos se cuentan hacia atrás desde el final de\n" " \t\tla lista de historia\n" " \n" -" -a\tagrega las líneas de historia de esta sesión al fichero de historia\n" +" -a\tagrega las líneas de historia de esta sesión al fichero de " +"historia\n" " -n\tlee todas las líneas de historia que no se han leído del fichero\n" " \tde historia\n" " -r\tlee el fichero de historia y agrega el contenido al fichero\n" @@ -3642,9 +3895,10 @@ msgstr "" " ninguna marca de tiempo de otra forma.\n" " \n" " Estado de Salida:\n" -" Devuelve correcto a no ser que se dé una opción inválida u ocurra un error." +" Devuelve correcto a no ser que se dé una opción inválida u ocurra un " +"error." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3689,7 +3943,7 @@ msgstr "" " Devuelve correcto a menos que se dé una opción inválida o suceda un\n" " error. Si se usa -x, devuelve el estado de salida de la ORDEN." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3720,7 +3974,7 @@ msgstr "" " Devuelve correcto a menos que se proporcionen una opción o\n" " un IDTRABAJO inválida." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3761,7 +4015,8 @@ msgstr "" " crear.\n" " \n" " Estado de Salida:\n" -" Devuelve correcto a menos que se dé una opción inválida o suceda un error." +" Devuelve correcto a menos que se dé una opción inválida o suceda un " +"error." # "a ser evaluada" no está en español. sv # Cierto. ¿Así está mejor? cfuga @@ -3771,14 +4026,15 @@ msgstr "" # No sé si existe precedencia en español, pero me suena fatal. # Yo pondría simplemente "prioridad". sv # Creo que si existe, pero tu sugerencia es mejor. cfuga -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3857,19 +4113,24 @@ msgstr "" " Si el último ARGumento se evalúa como 0, ‘let’ devuelve 1; de\n" " otra forma, ‘let’ devuelve 0." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3877,11 +4138,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3899,14 +4163,17 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Lee una línea de la salida estándar y la divide en campos.\n" " \n" " Lee una sola línea de la entrada estándar, o del descriptor de\n" -" fichero FD si se proporciona la opción -u. La línea se divide en campos\n" +" fichero FD si se proporciona la opción -u. La línea se divide en " +"campos\n" " con separación de palabras, y la primera palabra se asigna al primer\n" " NOMBRE, la segunda palabra al segundo NOMBRE, y así sucesivamente, con\n" " las palabras restantes asignadas al último NOMBRE. Sólo los caracteres\n" @@ -3949,7 +4216,7 @@ msgstr "" " línea, el tiempo de lectura se agote, o se proporcione un descriptor\n" " de fichero inválido como el argumento de -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3963,13 +4230,16 @@ msgstr "" "Devuelve de una función de shell.\n" " \n" " Causa que una función o un script leído termine con el valor devuelto\n" -" especificado por N. Si se omite N, el estado devuelto es el de la última\n" +" especificado por N. Si se omite N, el estado devuelto es el de la " +"última\n" " orden ejecutada dentro de la función o script.\n" " \n" " Estado de Salida:\n" -" Devuelve N, o falla si el shell no está ejecutando una función o un script." +" Devuelve N, o falla si el shell no está ejecutando una función o un " +"script." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -4012,7 +4282,8 @@ 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" @@ -4036,13 +4307,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4055,7 +4331,8 @@ msgstr "" "Establece o borra los valores de las opciones de shell y los parámetros\n" "posicionales.\n" " \n" -" Modifica el valor de los atributos de shell y los parámetros posicionales,\n" +" Modifica el valor de los atributos de shell y los parámetros " +"posicionales,\n" " o muestra los nombres y valores de las variables de shell.\n" " \n" " Opciones:\n" @@ -4065,7 +4342,8 @@ msgstr "" " diferente a cero.\n" " -f Desactiva la generación de nombres de ficheros (englobamiento).\n" " -h Recuerda la ubicación de las órdenes como se localizaron.\n" -" -k Todos los argumentos de asignación se colocan en el ambiente para una\n" +" -k Todos los argumentos de asignación se colocan en el ambiente para " +"una\n" " orden, no solo aquellos que preceden al nombre de la orden.\n" " -m Activa el control de trabajos.\n" " -n Lee órdenes pero no las ejecuta.\n" @@ -4082,7 +4360,8 @@ msgstr "" " history activa la historia de órdenes\n" " ignoreeof el shell no terminará después de leer EOF\n" " interactive-comments\n" -" permite que haya comentarios en órdenes interactivas\n" +" permite que haya comentarios en órdenes " +"interactivas\n" " keyword igual que -k\n" " monitor igual que -m\n" " noclobber igual que -C\n" @@ -4094,7 +4373,8 @@ msgstr "" " onecmd igual que -t\n" " physical igual que -P\n" " pipefail el valor de retorno de una tubería es el estado\n" -" de la última orden que sale con un estado diferente\n" +" de la última orden que sale con un estado " +"diferente\n" " de cero, o cero si ninguna orden termina con un\n" " estado diferente de cero\n" " posix modifica el comportamiento de bash donde la\n" @@ -4106,7 +4386,8 @@ msgstr "" " xtrace igual que -x\n" " -p Activo cuando los ids real y efectivo del usuario no coinciden.\n" " Desactiva el procesamiento del fichero $ENV y la importación de\n" -" funciones de shell. Si se desactiva esta opción causa que el uid y\n" +" funciones de shell. Si se desactiva esta opción causa que el uid " +"y\n" " el gid efectivos sean iguales al uid y el gid real.\n" " -t Termina después de leer y ejecutar una orden.\n" " -u Trata las variables sin definir como un error al sustituir.\n" @@ -4118,24 +4399,30 @@ msgstr "" " -E Si se activa, las funciones del shell heredan la trampa ERR.\n" " -H Activa el estilo de sustitución de historia ! . Esta opción está\n" " activa por defecto cuando el shell es interactivo.\n" -" -P Si se activa, no sigue enlaces simbólicos cuando se ejecutan órdenes\n" +" -P Si se activa, no sigue enlaces simbólicos cuando se ejecutan " +"órdenes\n" " como cd, que cambian el directorio actual.\n" " -T Si se activa, las funciones del shell heredan la trampa DEBUG.\n" -" -- Asigna cualquier argumento restante a los parámetros posicionales.\n" -" Si no restan argumentos, se desactivan los parámetros posicionales.\n" -" - Asigna cualquier argumento restante a los parámetros posicionales.\n" +" -- Asigna cualquier argumento restante a los parámetros " +"posicionales.\n" +" Si no restan argumentos, se desactivan los parámetros " +"posicionales.\n" +" - Asigna cualquier argumento restante a los parámetros " +"posicionales.\n" " Las opciones -x y -v se desactivan.\n" " \n" " Si se usa + en lugar de - causa que estas opciones se desactiven. Las\n" -" opciones también se pueden usar en la invocación del shell. El conjunto\n" +" opciones también se pueden usar en la invocación del shell. El " +"conjunto\n" " actual de opciones se puede encontrar en $-. Los n ARGs restantes son\n" -" parámetros posicionales que se asignan, en orden, a $1, $2, .. $n. Si no\n" +" parámetros posicionales que se asignan, en orden, a $1, $2, .. $n. Si " +"no\n" " se proporciona ningún ARG, se muestran todas las variables del shell.\n" " \n" " Estado de Salida:\n" " Devuelve correcto a menos que se proporcione una opción inválida." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4147,7 +4434,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4174,12 +4462,13 @@ msgstr "" " Devuelve correcto a menos que se proporcione una opción inválida o\n" " un NOMBRE sea de sólo lectura." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4193,7 +4482,8 @@ msgid "" msgstr "" "Establece el atributo de exportación para las variables de shell.\n" " \n" -" Marca cada NOMBRE para exportación automática al ambiente para las órdenes\n" +" Marca cada NOMBRE para exportación automática al ambiente para las " +"órdenes\n" " ejecutadas subsecuentemente. Si se proporciona un VALOR, se asigna el\n" " VALOR antes de exportar.\n" " \n" @@ -4208,7 +4498,7 @@ msgstr "" " Devuelve correcto a menos que se proporcione una opción inválida o que\n" " NOMBRE sea inválido." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4231,14 +4521,16 @@ msgstr "" "Marca las variables de shell para evitar su modificación.\n" " \n" " Marca cada NOMBRE como de sólo lectura; los valores de esos NOMBREs\n" -" no se pueden modificar por asignaciones subsecuentes. Si se proporciona\n" +" no se pueden modificar por asignaciones subsecuentes. Si se " +"proporciona\n" " un VALOR, se asigna el VALOR antes de marcar como de sólo lectura.\n" " \n" " Opciones:\n" " -a\tse refiere a variables de matriz indexada\n" " -A\tse refiere a variables de matriz asociativa\n" " -f\tse refiere a funciones de shell\n" -" -p\tmuestra una lista de todas las variables y funciones de sólo lectura,\n" +" -p\tmuestra una lista de todas las variables y funciones de sólo " +"lectura,\n" " \t\tdependiendo de si se pone o no la opción -f\n" " \n" " El argumento `--' desactiva el procesamiento posterior de opciones.\n" @@ -4247,7 +4539,7 @@ msgstr "" " Devuelve correcto a menos que se proporcione una opción inválida o\n" " el NOMBRE sea inválido." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4265,7 +4557,7 @@ msgstr "" " Estado de Salida:\n" " Devuelve correcto a menos que N sea negativo o mayor que $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4282,22 +4574,26 @@ msgstr "" " \n" " Lee y ejecuta órdenes del FICHERO en el shell actual. Se utilizan las\n" " entradas en $PATH para encontrar el directorio que contiene el FICHERO.\n" -" Si se proporciona ARGUMENTOS, se convierten en los parámetros posicionales\n" +" Si se proporciona ARGUMENTOS, se convierten en los parámetros " +"posicionales\n" " cuando se ejecuta el FICHERO.\n" " \n" " Estado de Salida:\n" " Devuelve el estado de la última orden ejecutada del FICHERO; falla si\n" " no se puede leer el FICHERO." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4305,7 +4601,8 @@ msgstr "" "Suspende la ejecución del shell.\n" " \n" " Suspende la ejecución de este shell hasta que recibe una señal SIGCONT.\n" -" Los shells de entrada no se pueden suspender, a menos que sean forzados.\n" +" Los shells de entrada no se pueden suspender, a menos que sean " +"forzados.\n" " \n" " Opciones:\n" " -f\tfuerza la suspensión, aún si el shell es un shell de entrada\n" @@ -4314,7 +4611,7 @@ msgstr "" " Devuelve correcto a menos que no esté activo el control de trabajos o\n" " suceda un error." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4348,7 +4645,8 @@ 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" @@ -4369,7 +4667,8 @@ 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" @@ -4402,7 +4701,8 @@ msgstr "" " de un fichero. Hay también operadores de cadenas, y operadores de\n" " comparación numérica.\n" " \n" -" El comportamiento de test depende del número de argumentos. Lea la página\n" +" El comportamiento de test depende del número de argumentos. Lea la " +"página\n" " de manual de bash para la especificación completa.\n" " \n" " Operadores de fichero:\n" @@ -4412,11 +4712,14 @@ msgstr "" " -c FICHERO Verdadero si el fichero es especial de caracteres.\n" " -d FICHERO Verdadero si el fichero es un directorio.\n" " -e FICHERO Verdadero si el fichero existe.\n" -" -f FICHERO Verdadero si el fichero existe y es un fichero regular.\n" -" -g FICHERO Verdadero si el fichero tiene activado el set-group-id.\n" +" -f FICHERO Verdadero si el fichero existe y es un fichero " +"regular.\n" +" -g FICHERO Verdadero si el fichero tiene activado el set-group-" +"id.\n" " -h FICHERO Verdadero si el fichero es un enlace simbólico.\n" " -L FICHERO Verdadero si el fichero es un enlace simbólico.\n" -" -k FICHERO Verdadero si el fichero tiene el bit `sticky' activado.\n" +" -k FICHERO Verdadero si el fichero tiene el bit `sticky' " +"activado.\n" " -p FICHERO Verdadero si el fichero es una tubería nombrada.\n" " -r FICHERO Verdadero si el fichero es legible para usted.\n" " -s FICHERO Verdadero si el fichero existe y no está vacío.\n" @@ -4427,7 +4730,8 @@ msgstr "" " -x FICHERO Verdadero si usted puede ejecutar el fichero.\n" " -O FICHERO Verdadero si usted efectivamente posee el fichero.\n" " -G FICHERO Verdadero si su grupo efectivamente posee el fichero.\n" -" -N FICHERO Verdadero si el fichero se modificó desde la última lectura.\n" +" -N FICHERO Verdadero si el fichero se modificó desde la última " +"lectura.\n" " \n" " FICH1 -nt FICH2 Verdadero si fich1 es más reciente que fich2\n" " (de acuerdo a la fecha de modificación).\n" @@ -4474,7 +4778,7 @@ msgstr "" " Devuelve correcto si EXPR evalúa a verdadero; falla si EXPR evalúa a\n" " falso o se proporciona un argumento inválido." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4486,11 +4790,12 @@ msgstr "" " Este es un sinónimo para la orden interna \"test\", pero el último\n" " argumento debe ser un `]' literal, que concuerde con el `[' inicial." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4498,49 +4803,66 @@ msgid "" msgstr "" "Muestra los tiempos de proceso.\n" " \n" -" Muestra los tiempos de usuario y sistema acumulados por el shell y todos\n" +" Muestra los tiempos de usuario y sistema acumulados por el shell y " +"todos\n" " sus procesos hijos.\n" " \n" " Estado de Salida:\n" " Siempre correcto." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Atrapa señales y otros eventos.\n" " \n" -" Define y activa manejadores para ejecutar cuando el shell recibe señales\n" +" Define y activa manejadores para ejecutar cuando el shell recibe " +"señales\n" " u otras condiciones.\n" " \n" " ARG es una orden para leer y ejecutar cuando el shell recibe la(s)\n" @@ -4561,7 +4883,8 @@ msgstr "" " asociadas con cada señal.\n" " \n" " Opciones:\n" -" -l\tmuestra una lista de nombres de señal con su número correspondiente\n" +" -l\tmuestra una lista de nombres de señal con su número " +"correspondiente\n" " -p\tmuestra las órdenes trap asociadas con cada ID_SEÑAL\n" " \n" " Cada ID_SEÑAL es un nombre de señal en <signal.h> o un número de señal.\n" @@ -4570,12 +4893,13 @@ msgstr "" " \"kill -signal $$\". \n" " \n" " Estado de Salida:\n" -" Devuelve correcto a menos que una ID_SEÑAL sea inválida o se proporcione\n" +" Devuelve correcto a menos que una ID_SEÑAL sea inválida o se " +"proporcione\n" " una opción inválida." # No he visto que este fichero incluya la posibilidad de traducir las # palabras que muestra `type -t'. Por esta razón, se dejan en inglés. cfuga -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4601,7 +4925,8 @@ 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 "" "Muestra información sobre el tipo de orden.\n" " \n" @@ -4630,11 +4955,13 @@ msgstr "" " Devuelve correcto si se encuentran todos los NOMBREs; falla si alguno\n" " no se encuentra." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4671,9 +4998,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4692,7 +5020,8 @@ msgstr "" " -c\tel tamaño máximo de los ficheros `core' creados\n" " -d\tel tamaño máximo del segmento de datos de un proceso\n" " -e\tla prioridad máxima de calendarización (`nice')\n" -" -f\tel tamaño máximo de los ficheros escritos por el shell y sus hijos\n" +" -f\tel tamaño máximo de los ficheros escritos por el shell y sus " +"hijos\n" " -i\tel número máximo de señales pendientes\n" " -k\tel número máximo de kcolas ubicadas para este proceso\n" " -l\tel tamaño máximo que un proceso puede bloquear en memoria\n" @@ -4707,12 +5036,14 @@ msgstr "" " -v\tel tamaño de la memoria virtual\n" " -x\tel número máximo de bloqueos de ficheros\n" " -P\tel número máximo de pseudoterminales\n" -" -R\tel tiempo máximo que un proceso de tiempo real puede correr antes de bloquearse\n" +" -R\tel tiempo máximo que un proceso de tiempo real puede correr antes " +"de bloquearse\n" " -T\tel número máximo de hilos\n" " \n" " No todas las opciones están disponibles en todas las plataformas.\n" " \n" -" Si se establece LÍMITE, éste es el nuevo valor del recurso especificado;\n" +" Si se establece LÍMITE, éste es el nuevo valor del recurso " +"especificado;\n" " los valores especiales de LÍMITE `soft', `hard' y `unlimited'\n" " corresponden al límite suave actual, el límite duro actual, y\n" " sin límite, respectivamente. De otra forma, se muestra el valor actual\n" @@ -4724,10 +5055,11 @@ msgstr "" " cual es un número de procesos sin escala.\n" " \n" " Estado de Salida:\n" -" Devuelve correcto a menos que se proporcione una opción inválida o suceda\n" +" Devuelve correcto a menos que se proporcione una opción inválida o " +"suceda\n" " un error." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4750,7 +5082,8 @@ msgstr "" " omite el MODO, muestra el valor actual de la máscara.\n" " \n" " Si el MODO empieza con un dígito, se interpreta como un número octal;\n" -" de otra forma es una cadena de modo simbólico como la que acepta chmod (1).\n" +" de otra forma es una cadena de modo simbólico como la que acepta chmod " +"(1).\n" " \n" " Opciones:\n" " -p\tsi se omite el MODO, muestra en una forma reusable como entrada\n" @@ -4760,23 +5093,27 @@ msgstr "" " Devuelve correcto a menos que el MODO sea inválido o se proporcione\n" " una opción inválida." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4790,40 +5127,49 @@ msgstr "" "Espera la terminación del trabajo y devuelve el estado de salida.\n" " \n" " Espera al proceso identificado por ID, el cual puede ser un ID de\n" -" proceso o una especificación de trabajo e informa de su estado de salida.\n" +" proceso o una especificación de trabajo e informa de su estado de " +"salida.\n" " Si no se proporciona un ID, espera a todos los procesos hijos activos,\n" " y el estado de devolución es cero. Si ID es una especificación de\n" " trabajo, espera a todos los procesos en la cola de trabajos.\n" " \n" -" Si se proporciona la opción -n, espera por un único trabajo de la lista de\n" +" Si se proporciona la opción -n, espera por un único trabajo de la lista " +"de\n" " IDs o, si no se ha especificado ningún ID, espera a que termine el\n" " siguiente trabajo y devuelve su estado de salida.\n" " \n" -" Si se proporciona la opción -p, el identificador de proceso o trabajo del\n" -" trabajo cuyo estado de salida es devuelto se le asigna a la variable VAR\n" -" designada por el argumento de la opción. La variable se anulará inicialmente\n" +" Si se proporciona la opción -p, el identificador de proceso o trabajo " +"del\n" +" trabajo cuyo estado de salida es devuelto se le asigna a la variable " +"VAR\n" +" designada por el argumento de la opción. La variable se anulará " +"inicialmente\n" " antes de ninguna otra asignación. Esto es útil únicamente cuando se\n" " proporciona la opción -n.\n" " \n" " Si se proporciona la opción -f y el control de trabajos está activado,\n" -" espera a que termine el ID especificado, en vez de esperar a que cambie de\n" +" espera a que termine el ID especificado, en vez de esperar a que cambie " +"de\n" " estado.\n" " \n" " Estado de Salida:\n" " Devuelve el estado de ID; falla si ID es inválido o se proporciona una\n" -" opción inválida o si proporciona -n y la shell no tiene ningún hijo al que\n" +" opción inválida o si proporciona -n y la shell no tiene ningún hijo al " +"que\n" " esperar." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Espera la terminación del proceso y devuelve el estado de salida.\n" @@ -4834,10 +5180,20 @@ msgstr "" " El PID debe ser un ID de proceso.\n" " \n" " Estado de Salida:\n" -" Devuelve el estado del último PID; falla si PID es inválido o se proporciona\n" +" Devuelve el estado del último PID; falla si PID es inválido o se " +"proporciona\n" " una opción inválida." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4859,7 +5215,7 @@ msgstr "" " Estado de Salida:\n" " Devuelve el estado de la última orden ejecutada." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4889,7 +5245,7 @@ msgstr "" " Estado de Salida:\n" " Devuelve el estado de la última orden ejecutada." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4926,7 +5282,7 @@ msgstr "" " Estado de Salida:\n" " Devuelve el estado de la última orden ejecutada." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4953,7 +5309,7 @@ msgstr "" " Estado de Salida:\n" " El estado de devolución es el estado de devolución de la TUBERÍA." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4971,16 +5327,21 @@ msgstr "" " Estado de Salida:\n" " Devuelve el estado de la última orden ejecutada." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4990,7 +5351,8 @@ msgstr "" " \n" " Se ejecuta la lista `if ÓRDENES'. Si su estado de salida es cero,\n" " entonces se ejecuta la lista `then ÓRDENES`. De otra forma, cada lista\n" -" `elif ÓRDENES' se ejecuta en su lugar, y si su estado de salida es cero,\n" +" `elif ÓRDENES' se ejecuta en su lugar, y si su estado de salida es " +"cero,\n" " se ejecuta la lista `then ÓRDENES' correspondiente y se completa la\n" " orden if. De otra forma, se ejecuta la lista `else ÓRDENES', si está\n" " presente. El estado de salida del bloque entero es el estado saliente\n" @@ -5000,11 +5362,12 @@ msgstr "" " Estado de Salida:\n" " Devuelve el estado de la última orden ejecutada." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -5018,11 +5381,12 @@ msgstr "" " Estado de Salida:\n" " Devuelve el estado de la última orden ejecutada." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -5036,7 +5400,7 @@ msgstr "" " Estado de Salida:\n" " Devuelve el estado de la última orden ejecutada." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5059,12 +5423,13 @@ msgstr "" " Estado de Salida:\n" " La orden «coproc» devuelve un estado de salida de 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -5081,7 +5446,7 @@ msgstr "" " Estado de Salida:\n" " Devuelve correcto a menos que NOMBRE sea de sólo lectura." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5099,7 +5464,7 @@ msgstr "" " Estado de Salida:\n" " Devuelve el estado de la última orden ejecutada." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5124,7 +5489,7 @@ msgstr "" " Estado de Salida:\n" " Devuelve el estado del trabajo reiniciado." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5142,13 +5507,16 @@ msgstr "" " Estado de Salida:\n" " Devuelve 1 si la EXPRESIÓN evalúa a 0; devuelve 0 en caso contrario." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5168,13 +5536,15 @@ msgid "" msgstr "" "Ejecuta una orden condicional.\n" " \n" -" Devuelve un estado de 0 ó 1 dependiendo de la evaluación de la expresión\n" +" Devuelve un estado de 0 ó 1 dependiendo de la evaluación de la " +"expresión\n" " condicional EXPRESIÓN. Las expresiones se componen de los mismos\n" " elementos primarios usados por la orden interna `test', y se pueden\n" " combinar usando los siguientes operadores:\n" " \n" " ( EXPRESIÓN )\tDevuelve el valor de la EXPRESIÓN\n" -" ! EXPRESIÓN\t\tVerdadero si la EXPRESIÓN es falsa; de otra forma es falso\n" +" ! EXPRESIÓN\t\tVerdadero si la EXPRESIÓN es falsa; de otra forma es " +"falso\n" " EXPR1 && EXPR2\tVerdadero si EXPR1 y EXPR2 son verdaderos; de\n" " \t\totra forma es falso\n" " \tEXPR1 || EXPR2\tVerdadero si EXPR1 o EXPR2 es verdadero; de\n" @@ -5190,7 +5560,7 @@ msgstr "" " Estado de Salida:\n" " 0 o 1 dependiendo del valor de la EXPRESIÓN." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5305,7 +5675,7 @@ msgstr "" " \t\tutilizados para decidir qué órdenes se deben guardar en\n" " \t\tel listado histórico.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5338,7 +5708,8 @@ msgstr "" "Agrega directorios a la pila.\n" " \n" " Agrega un directorio por la parte superior de la pila de directorios\n" -" o rota la pila, haciendo que el nuevo elemento superior de la pila sea el\n" +" o rota la pila, haciendo que el nuevo elemento superior de la pila sea " +"el\n" " directorio de trabajo actual. Sin argumentos, intercambia\n" " los dos directorios de la parte superior.\n" " \n" @@ -5355,7 +5726,8 @@ msgstr "" " \t\tla derecha de la lista mostrada por `dirs', comenzando\n" " \t\tdesde cero) esté en la parte superior.\n" " \n" -" dir\tAgrega DIR la pila de directorios por la parte superior, haciendo\n" +" dir\tAgrega DIR la pila de directorios por la parte superior, " +"haciendo\n" " \t\tde él el nuevo directorio de trabajo actual.\n" " \n" " La orden interna `dirs' muestra la pila de directorios.\n" @@ -5364,7 +5736,7 @@ msgstr "" " Devuelve correcto a menos que se proporcione un argumento\n" " inválido o falle el cambio de directorio." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5418,7 +5790,7 @@ msgstr "" " Devuelve correcto a menos que se proporcione un\n" " argumento inválido o falle el cambio de directorio." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5473,7 +5845,7 @@ msgstr "" " Devuelve correcto, a menos que se proporcione una opción inválida o\n" " suceda un error." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5511,7 +5883,8 @@ msgstr "" " Devuelve correcto si se activa NOMBRE_OPCIÓN; falla si se proporciona\n" " una opción inválida o NOMBRE_OPCIÓN está desactivado." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5519,29 +5892,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Da formato y muestra ARGUMENTOS bajo el control del FORMATO.\n" @@ -5554,7 +5934,8 @@ msgstr "" " objetos: caracteres simples, los cuales solamente se copian a la salida\n" " salida estándar; secuencias de escape de caracteres, las cuales\n" " se convierten y se copian a la salida estándar; y especificaciones de\n" -" formato, cada una de las cuales causa la muestra del siguiente argumento\n" +" formato, cada una de las cuales causa la muestra del siguiente " +"argumento\n" " consecutivo.\n" " \n" " Además de las especificaciones de formato estándar descritas en\n" @@ -5571,20 +5952,24 @@ msgstr "" " \n" " El formato se reutiliza según sea necesario para consumir todos los\n" " argumentos. Si hay menos argumentos de los que el formato requiere,\n" -" las especificaciones de formato adicionales se comportan como si un valor\n" +" las especificaciones de formato adicionales se comportan como si un " +"valor\n" " cero o una cadena nula, lo que sea apropiado, se hubiera proporcionado.\n" " \n" " Estado de Salida:\n" " Devuelve correcto a menos que se proporcione una opción inválida o\n" " suceda un error de escritura o de asignación." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5598,8 +5983,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5608,7 +5995,8 @@ msgstr "" " \n" " Por cada NOMBRE, especifica cuántos argumentos se deben completar. Si\n" " no se proporcionan opciones, se muestran las especificaciones de\n" -" completado existentes en una forma que permite que se reusen como entrada.\n" +" completado existentes en una forma que permite que se reusen como " +"entrada.\n" " \n" " Opciones:\n" " -p\tmuestra las especificaciones de completado existentes en formato\n" @@ -5620,25 +6008,33 @@ msgstr "" " \t\tsin ninguna especificación de completado definida\n" " -E\taplica los completados y acciones para órdenes \"vacías\" --\n" " \t\tcuando se intenta completar en una línea en blanco\n" -" -I\taplica los completados a acciones a la palabra incial (habitualmente\n" +" -I\taplica los completados a acciones a la palabra incial " +"(habitualmente\n" " \t\tla orden)\n" " \n" " Cuando se intenta el completado, las acciones se aplican en el orden\n" " en que se listan las opciones de letra mayúscula antes indicadas. Si se\n" -" proporcionan varias opciones, la opción -D tiene precedencia sobre -E y,\n" +" proporcionan varias opciones, la opción -D tiene precedencia sobre -E " +"y,\n" " ambas, sobre -I.\n" " \n" " Estado de Salida:\n" " Devuelve correcto a menos que se proporcione una opción inválida o\n" " suceda un error." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5653,13 +6049,16 @@ msgstr "" " Devuelve correcto a menos que se proporcione una opción inválida o\n" " suceda un error." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5708,21 +6107,26 @@ msgstr "" " Devuelve correcto a menos que se proporcione una opción inválida o\n" " NOMBRE no tenga una especificación de completado definida." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5735,11 +6139,13 @@ 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 "" "Lee líneas de un fichero y las guarda en una variable de matriz indexada.\n" @@ -5749,12 +6155,15 @@ msgstr "" " la opción -u. La variable MAPFILE es la MATRIZ por defecto.\n" " \n" " Opciones:\n" -" -d delim\tUtiliza DELIM para finalizar las líneas en lugar de nueva línea\n" -" -n cuenta\tCopia hasta CUENTA líneas. Si CUENTA es 0, se copian todas\n" +" -d delim\tUtiliza DELIM para finalizar las líneas en lugar de nueva " +"línea\n" +" -n cuenta\tCopia hasta CUENTA líneas. Si CUENTA es 0, se copian " +"todas\n" " -O origen\tComienza a asignar a MATRIZ en el índice ORIGEN. El\n" " \t\t\tíndice por defecto es 0.\n" " -s cuenta\tDescarta las primeras CUENTA líneas leídas.\n" -" -t\tBorra el DELIM final de cada línea leída (nueva línea por defecto).\n" +" -t\tBorra el DELIM final de cada línea leída (nueva línea por " +"defecto).\n" " -u df\tLee líneas del descriptor de fichero DF en lugar de la\n" " \t\t\tentrada estándar.\n" " -C llamada\tEvalúa LLAMADA cada vez que se leen QUANTUM líneas.\n" @@ -5775,7 +6184,7 @@ msgstr "" " Devuelve correcto a menos que se proporcione una opción inválida o\n" " la MATRIZ sea de sólo lectura o no sea una matriz indexada." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5785,6 +6194,31 @@ msgstr "" " \n" " Sinónimo de `mapfile'." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Devuelve el contexto de la llamada a subrutina actual.\n" +#~ " \n" +#~ " Sin EXPR, devuelve \"$linea $nombrefichero\". Con EXPR, devuelve\n" +#~ " \"$linea $subrutina $nombrefichero\"; esta información adicional\n" +#~ " se puede usar para proporcionar un volcado de pila.\n" +#~ " \n" +#~ " El valor de EXPR indica cuántos marcos de llamada hay que retroceder\n" +#~ " antes del actual; el marco superior es el marco 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "aviso: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: clave de matriz asociativa no válida" diff --git a/po/et.gmo b/po/et.gmo index ac47880e2d4648bb06fbd2fa9e7623072d53d348..5eb5140f8c7651dc1d1d61e56a3f9a2e44d05c5f 100644 GIT binary patch delta 4393 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 Td%X+XPW1JDN}s(rw7~IS+EwG( delta 4720 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 diff --git a/po/et.po b/po/et.po index 80c092e67..7da64a653 100644 --- a/po/et.po +++ b/po/et.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 3.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2006-11-11 16:38+0200\n" "Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n" "Language-Team: Estonian <et@li.org>\n" @@ -16,123 +16,123 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "vigane massiivi indeks" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: mitte-numbrilisele indeksile ei saa omistada" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: ei saa luua: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: esimine mitte-tühemik sümbol pole `\"'" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "sulgev `%c' puudub %s sees" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: puudub eraldav koolon" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "`%s': ei saa lahti siduda" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, fuzzy, c-format msgid "`%s': invalid alias name" msgstr "%s: vigane tegevuse nimi" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: ei saa lugeda: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "`%s': tundmatu funktsiooni nimi" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s ei ole seotud ühegi klahviga.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s saab kasutada läbi " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "`%s': ei saa lahti siduda" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "omab mõtet ainult `for', `while' või `until' tsüklis" -#: builtins/caller.def:136 +#: builtins/caller.def:135 msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -141,355 +141,369 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME pole seatud" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "liiga palju argumente" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "teist kataloogi pole" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD pole seatud" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "" -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, fuzzy, c-format msgid "warning: " msgstr "%s: hoiatus: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, fuzzy, c-format msgid "%s: usage: " msgstr "%s: hoiatus: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: võti nõuab argumenti" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: nõutakse numbrilist argumenti" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: ei leitud" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: vigane võti" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: vigane võtme nimi" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': ei ole lubatud identifikaator" -#: builtins/common.c:240 +#: builtins/common.c:219 #, fuzzy msgid "invalid octal number" msgstr "vigane signaali number" -#: builtins/common.c:242 +#: builtins/common.c:221 #, fuzzy msgid "invalid hex number" msgstr "vigane number" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "vigane number" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: vigane signaali spetsifikatsioon" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "`%s': ei ole pid ega korrektne töö spetsifikatsioon" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: mittemuudetav muutuja" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: ei saa eemaldada" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s on piiridest väljas" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s on piiridest väljas" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: sellist tööd pole" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: töökontroll puudub" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "töökontroll puudub" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: piiratud" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "piiratud" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: ei ole sisekäsk" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "kirjutamise viga: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: segane töö" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, fuzzy, c-format +msgid "%s: not an indexed array" +msgstr "%s: pole massiiv" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: ei saa eemaldada: %s on ainult lugemiseks" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: ei saa eemaldada" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: vigane tegevuse nimi" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "hoiatus: võti -F ei pruugi töötada nagu te ootate" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "hoiatus: võti -C ei pruugi töötada nagu te ootate" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "saab kasutada ainult funktsioonis" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "võtit `-f' ei saa funktsiooni loomiseks kasutada" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: funktsioon ei ole muudetav" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: masiivi muutujaid ei saa nii kustutada" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dünaamilist laadimist et saa kasutada" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "jagatud objekti %s ei saa avada: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "%s puudub jagatud objektis %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: pole dünaamiliselt laetud" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: pole dünaamiliselt laetud" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: ei saa kustutada: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: on kataloog" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: ei ole tavaline fail" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: fail on liiga suur" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: kahendfaili ei õnnestu käivitada" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: ei saa käivitada: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "pole login shell: kasutage `exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Teil on peatatud töid.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, fuzzy, c-format msgid "There are running jobs.\n" msgstr "Teil on peatatud töid.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "käsku ei ole" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: ajutist faili ei saa avada: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "" @@ -504,11 +518,11 @@ msgstr "%s: lubamatu v msgid "%s: option requires an argument -- %c\n" msgstr "%s: võti nõuab argumenti -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "" @@ -536,12 +550,12 @@ msgid "" "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." msgstr "" -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: ei saa avada: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -553,21 +567,31 @@ msgid "" "\n" msgstr "" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "%s: pole massiiv" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameeter on null või pole seatud" + +#: builtins/history.def:349 #, fuzzy, c-format msgid "%s: invalid timestamp" msgstr "%s: vigane võtme nimi" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "" @@ -581,114 +605,114 @@ msgstr "%s: vigane teenus" msgid "no other options allowed with `-x'" msgstr "" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Tundmatu viga" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "oodati avaldist" -#: builtins/mapfile.def:180 -#, fuzzy, c-format -msgid "%s: not an indexed array" -msgstr "%s: pole massiiv" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, fuzzy, c-format msgid "%s: invalid line count" msgstr "%s: vigane võti" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, fuzzy, c-format msgid "%s: invalid array origin" msgstr "%s: vigane võti" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, fuzzy, c-format msgid "%s: invalid callback quantum" msgstr "%s: vigane tegevuse nimi" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 #, fuzzy msgid "empty array variable name" msgstr "%s: pole massiiv" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, fuzzy, c-format msgid "`%c': invalid time format specification" msgstr "%s: vigane signaali spetsifikatsioon" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "" -#: builtins/printf.def:734 -#, fuzzy, c-format -msgid "warning: %s: %s" -msgstr "%s: hoiatus: " +#: builtins/printf.def:827 execute_cmd.c:6080 +#, c-format +msgid "%s: %s" +msgstr "" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "teist kataloogi pole" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, fuzzy, c-format msgid "%s: invalid argument" msgstr "%s: vigane number" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<jooksev kataloog puudub>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -712,7 +736,7 @@ msgid "" "\tdirs when invoked without options, starting with zero." msgstr "" -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -737,7 +761,7 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -758,321 +782,332 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "viga lugemisel: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: pole massiiv" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: ei ole funktsioon" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, fuzzy, c-format msgid "%s: cannot export" msgstr "%s: ei saa eemaldada" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "shift arv" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: faili ei ole" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "peatamine ei õnnestu" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "login shelli ei saa peatada" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s on shelli võtmesõna\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s: on funktsioon\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, fuzzy, c-format msgid "%s is a special shell builtin\n" msgstr "%s on shelli sisekäsk\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s: on funktsioon\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s on shelli sisekäsk\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s on %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': halb käsklus" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: ei õnnestu lugeda piirangut: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: ei õnnestu muuta piirangut: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "kaheksandnumber" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr "" -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "viimane käsklus: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Katkestan..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "%s: hoiatus: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "tundmatu viga käsus" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: sidumata muutuja" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 #, fuzzy msgid "pipe error" msgstr "kirjutamise viga: %s" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: piiratud: käskudes ei saa kasutada sümboleid `/'" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: käsku ei ole" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: halb interpretaator" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: kahendfaili ei õnnestu käivitada" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: halb interpretaator" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, fuzzy, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: kahendfaili ei õnnestu käivitada" -#: execute_cmd.c:6123 -#, fuzzy, c-format -msgid "`%s': is a special builtin" -msgstr "%s on shelli sisekäsk\n" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "avaldise rekursioon on liiga sügav" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "süntaksi viga avaldises" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "üritati omistada mitte-muutujale" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "süntaksi viga avaldises" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "nulliga jagamine" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "eksponent on väiksem kui 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "puudub `)'" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "süntaksi viga: oodati operandi" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "süntaksi viga: vigane aritmeetiline operaator" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "" @@ -1090,7 +1125,7 @@ msgstr "%s: vigane v msgid "value too great for base" msgstr "väärtus on baasiks liiga suur" -#: expr.c:1652 +#: expr.c:1654 #, fuzzy, c-format msgid "%s: expression error\n" msgstr "%s: oodati täisarvude avaldist" @@ -1099,46 +1134,51 @@ msgstr "%s: oodati t msgid "getcwd: cannot access parent directories" msgstr "getcwd: vanemkataloogidele ei ole juurdepääsu" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, fuzzy, c-format +msgid "`%s': is a special builtin" +msgstr "%s on shelli sisekäsk\n" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "" @@ -1148,516 +1188,526 @@ msgstr "" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: pid puudub" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr "" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: töö %d on peatatud" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: sellist tööd pole" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: töö on lõpetatud" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: töö %d on juba taustal" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "" -#: jobs.c:4307 +#: jobs.c:4348 #, fuzzy, c-format msgid "%s: line %d: " msgstr "%s: hoiatus: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr "" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" "malloc: %s:%d: assertion botched\r\n" msgstr "" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 #, fuzzy msgid "unknown" msgstr "%s: tundmatu masin" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "vigane baas" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: tundmatu masin" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: vigane teenus" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Teil on kiri kaustas $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Teil on uus kiri kaustas $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Kiri kaustas %s on loetud\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "süntaksi viga: nõutakse aritmeetilist avaldist" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "süntaksi viga: ootamatu `;'" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "süntaksi viga: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "kirjutamise viga: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "süntaksi viga tingimuslikus avaldises" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "ootamatu märk `%s', oodati `)'" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "oodati `)'" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "süntaksi viga kohal `%s'" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "süntaksi viga: ootamatu faililõpp" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "süntaksi viga: ootamatu faililõpp" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "süntaksi viga" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Käsuinterpretaatorist väljumiseks kasutage \"%s\".\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "faili deskriptor on piiridest väljas" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: segane ümbersuunamine" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: fail on olemas, ei kirjuta üle" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: piiratud: väljundit ei saa ümber suunata" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "" -#: redir.c:223 +#: redir.c:218 #, fuzzy, c-format msgid "%s: cannot assign fd to variable" msgstr "$%s: sedasi ei saa omistada" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "viga ümbersuunamisel: fd duplikaadi loomine ei õnnestu" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "/tmp puudub, palun looge see!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp peab olema kataloogi nimi" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: vigane võti" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, fuzzy, c-format msgid "%s: Is a directory" msgstr "%s: on kataloog" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Mul ei ole nime!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1666,50 +1716,50 @@ msgstr "" "Kasuta:\t%s [GNU pikk võti] [võti] ...\n" "\t%s [GNU pikk võti] [võti] skript-fail ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU pikad võtmed:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Käsuinterpretaatori võtmed:\n" -#: shell.c:2069 +#: shell.c:2061 #, fuzzy msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD või -c käsklus või -O lühivõti\t\t(ainult käivitamine)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s või -o võti\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Vigadest teatamiseks kasutage käsku `bashbug'.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: vigane operatsioon" @@ -1880,289 +1930,300 @@ msgstr "" msgid "Unknown Signal #%d" msgstr "" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, fuzzy, c-format msgid "%s: invalid indirect expansion" msgstr "%s: vigane võti" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, fuzzy, c-format msgid "%s: invalid variable name" msgstr "%s: vigane tegevuse nimi" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: halb asendus" + +#: subst.c:8231 #, fuzzy, c-format msgid "%s: parameter not set" msgstr "%s: parameeter on null või pole seatud" -#: subst.c:7480 -#, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parameeter on null või pole seatud" - -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: halb asendus" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: sedasi ei saa omistada" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" msgstr "" -#: subst.c:10795 +#: subst.c:11542 #, fuzzy, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "sulgev `%c' puudub %s sees" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "ei leitud: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "oodati argumenti" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: oodati täisarvude avaldist" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "oodati `)'" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "oodati `)', saadi %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: eeldati binaarset operaatorit" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: eeldati unaarset operaatorit" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "puudub `]'" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "süntaksi viga: ootamatu `;'" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "vigane signaali number" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: halb väärtus muutujas trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "" "run_pending_traps: signaali käsitleja on SIG_DFL, saadan %d (%s) iseendale" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: vigane signaal %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "shelli tase (%d) on liiga kõrge, kasutan väärtust 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: praegune skoop pole funktsiooni kontekst" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: praegune skoop pole funktsiooni kontekst" -#: variables.c:4757 +#: variables.c:4793 #, fuzzy, c-format msgid "%s has null exportstr" msgstr "%s: parameeter on null või pole seatud" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: pole global_variables kontekst" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" -#: variables.c:6400 +#: variables.c:6404 #, fuzzy, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: ei saa avada: %s" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "" -#: variables.c:6450 +#: variables.c:6453 #, fuzzy, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s on piiridest väljas" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Autoriõigus © 2006 Free Software Foundation, Inc.\n" -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" msgstr "" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "" -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "" -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "" -#: xmalloc.c:95 +#: xmalloc.c:86 #, fuzzy, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: ei saa luua: %s" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "" -#: xmalloc.c:167 +#: xmalloc.c:166 #, fuzzy, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: ei saa luua: %s" @@ -2198,7 +2259,7 @@ msgid "caller [expr]" msgstr "" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "" #: builtins.c:68 @@ -2303,7 +2364,7 @@ msgstr "" #: builtins.c:138 msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" @@ -2354,7 +2415,7 @@ msgid "[ arg... ]" msgstr "" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "" #: builtins.c:168 @@ -2378,119 +2439,124 @@ msgid "wait [pid ...]" msgstr "" #: builtins.c:184 -msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" +msgid "! PIPELINE" msgstr "" #: builtins.c:186 -msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" +msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "" #: builtins.c:188 -msgid "select NAME [in WORDS ... ;] do COMMANDS; done" +msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "" #: builtins.c:190 -msgid "time [-p] pipeline" +msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "" #: builtins.c:192 -msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" +msgid "time [-p] pipeline" msgstr "" #: builtins.c:194 +msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" +msgstr "" + +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" msgstr "" -#: builtins.c:196 +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "" -#: builtins.c:208 +#: builtins.c:210 #, fuzzy msgid "(( expression ))" msgstr "oodati avaldist" -#: builtins.c:210 +#: builtins.c:212 #, fuzzy msgid "[[ expression ]]" msgstr "oodati avaldist" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " "suffix] [name ...]" msgstr "" -#: builtins.c:235 +#: builtins.c:237 msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" msgstr "" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" msgstr "" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2510,7 +2576,7 @@ msgid "" " defined." msgstr "" -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2520,7 +2586,7 @@ msgid "" " Return success unless a NAME is not an existing alias." msgstr "" -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2562,7 +2628,7 @@ msgid "" " bind returns 0 unless an unrecognized option is given or an error occurs." msgstr "" -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2573,7 +2639,7 @@ msgid "" " The exit status is 0 unless N is not greater than or equal to 1." msgstr "" -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2584,7 +2650,7 @@ msgid "" " The exit status is 0 unless N is not greater than or equal to 1." msgstr "" -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2598,7 +2664,7 @@ msgid "" " not a shell builtin." msgstr "" -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2614,13 +2680,13 @@ msgid "" " is invalid." msgstr "" -#: builtins.c:387 +#: builtins.c:389 msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2659,7 +2725,7 @@ msgid "" " -P is used; non-zero otherwise." msgstr "" -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2675,7 +2741,7 @@ msgid "" " cannot be read." msgstr "" -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2685,7 +2751,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2693,7 +2759,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2701,7 +2767,7 @@ msgid "" " Always fails." msgstr "" -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -2720,7 +2786,7 @@ msgid "" " Returns exit status of COMMAND, or failure if COMMAND is not found." msgstr "" -#: builtins.c:490 +#: builtins.c:492 msgid "" "Set variable values and attributes.\n" " \n" @@ -2748,7 +2814,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -2762,14 +2829,14 @@ msgid "" " assignment error occurs." msgstr "" -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" " A synonym for `declare'. See `help declare'." msgstr "" -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2784,7 +2851,7 @@ msgid "" " assignment error occurs, or the shell is not executing a function." msgstr "" -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2824,7 +2891,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2837,7 +2904,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:612 +#: builtins.c:615 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -2857,6 +2924,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -2864,7 +2937,7 @@ msgid "" " Returns success unless NAME is not a shell builtin or an error occurs." msgstr "" -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -2876,7 +2949,7 @@ msgid "" " Returns exit status of command or success if command is null." msgstr "" -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -2917,7 +2990,7 @@ msgid "" " encountered or an error occurs." msgstr "" -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -2940,7 +3013,7 @@ msgid "" "occurs." msgstr "" -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -2948,7 +3021,7 @@ msgid "" " is that of the last command executed." msgstr "" -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -2957,7 +3030,7 @@ msgid "" " in a login shell." msgstr "" -#: builtins.c:734 +#: builtins.c:742 msgid "" "Display or execute commands from the history list.\n" " \n" @@ -2982,12 +3055,14 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." msgstr "" -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -2999,7 +3074,7 @@ msgid "" " Status of command placed in foreground, or failure if an error occurs." msgstr "" -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3013,7 +3088,7 @@ msgid "" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3037,7 +3112,7 @@ msgid "" " Returns success unless NAME is not found or an invalid option is given." msgstr "" -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3059,7 +3134,7 @@ msgid "" "given." msgstr "" -#: builtins.c:842 +#: builtins.c:852 msgid "" "Display or manipulate the history list.\n" " \n" @@ -3083,7 +3158,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3094,7 +3173,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3118,7 +3197,7 @@ msgid "" " If -x is used, returns the exit status of COMMAND." msgstr "" -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3135,7 +3214,7 @@ msgid "" " Returns success unless an invalid option or JOBSPEC is given." msgstr "" -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3158,7 +3237,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3203,7 +3282,7 @@ msgid "" " If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise." msgstr "" -#: builtins.c:994 +#: builtins.c:1008 msgid "" "Read a line from the standard input and split it into fields.\n" " \n" @@ -3227,6 +3306,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3257,7 +3338,7 @@ msgid "" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3269,7 +3350,7 @@ msgid "" " Returns N, or failure if the shell is not executing a function or script." msgstr "" -#: builtins.c:1055 +#: builtins.c:1071 msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3345,6 +3426,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3355,7 +3440,7 @@ msgid "" " Returns success unless an invalid option is given." msgstr "" -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3377,7 +3462,7 @@ msgid "" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -3396,7 +3481,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -3417,7 +3502,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -3428,7 +3513,7 @@ msgid "" " Returns success unless N is negative or greater than $#." msgstr "" -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -3442,21 +3527,23 @@ msgid "" " FILENAME cannot be read." msgstr "" -#: builtins.c:1246 +#: builtins.c:1266 msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3539,7 +3626,7 @@ msgid "" " false or an invalid argument is given." msgstr "" -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3547,7 +3634,7 @@ msgid "" " be a literal `]', to match the opening `['." msgstr "" -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -3559,7 +3646,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -3567,31 +3654,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -3603,7 +3695,7 @@ msgid "" "given." msgstr "" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -3633,7 +3725,7 @@ msgid "" "found." msgstr "" -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -3675,15 +3767,16 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -3701,7 +3794,7 @@ msgid "" " Returns success unless MODE is invalid or an invalid option is given." msgstr "" -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -3733,7 +3826,7 @@ msgid "" " children." msgstr "" -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -3748,7 +3841,16 @@ msgid "" " option is given." msgstr "" -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -3761,7 +3863,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -3778,7 +3880,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -3798,7 +3900,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -3814,7 +3916,7 @@ msgid "" " The return status is the return status of PIPELINE." msgstr "" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -3825,7 +3927,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -3846,7 +3948,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" @@ -3858,7 +3960,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" @@ -3870,7 +3972,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -3883,7 +3985,7 @@ msgid "" " The coproc command returns an exit status of 0." msgstr "" -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -3897,7 +3999,7 @@ msgid "" " Returns success unless NAME is readonly." msgstr "" -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -3908,7 +4010,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -3922,7 +4024,7 @@ msgid "" " Returns the status of the resumed job." msgstr "" -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -3933,7 +4035,7 @@ msgid "" " Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise." msgstr "" -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -3961,7 +4063,7 @@ msgid "" " 0 or 1 depending on value of EXPRESSION." msgstr "" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -4015,7 +4117,7 @@ msgid "" " \t\tcommands should be saved on the history list.\n" msgstr "" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -4046,7 +4148,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -4073,7 +4175,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -4102,7 +4204,7 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -4122,7 +4224,7 @@ msgid "" " given or OPTNAME is disabled." msgstr "" -#: builtins.c:1938 +#: builtins.c:1978 msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -4139,9 +4241,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -4163,15 +4265,15 @@ msgid "" " error occurs." msgstr "" -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -4194,20 +4296,24 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2004 +#: builtins.c:2044 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -4239,7 +4345,7 @@ msgid "" " have a completion specification defined." msgstr "" -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -4281,13 +4387,17 @@ msgid "" " not an indexed array." msgstr "" -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" " A synonym for `mapfile'." msgstr "" +#, fuzzy, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "%s: hoiatus: " + #, fuzzy, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: vigane tegevuse nimi" diff --git a/po/fi.gmo b/po/fi.gmo index 7f4b31dda156760256a86bd36651737d49353a02..405509a6c7d84e841abd8fa6196fbd01afdb3d04 100644 GIT binary patch delta 9562 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 delta 14515 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 diff --git a/po/fi.po b/po/fi.po index 166fe272d..be862a09d 100644 --- a/po/fi.po +++ b/po/fi.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-4.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2009-05-09 15:13+0300\n" "Last-Translator: Pekka Niemi <pekka.niemi@iki.fi>\n" "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" @@ -21,125 +21,125 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 0.3\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "virheellinen taulukkoindeksi" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: indeksoitua taulukkoa ei voi muuttaa assosiatiiviseksi" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: ei voida sijoittaa epänumeeriseen indeksiin" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "" "%s: %s: assosiatiiviseen taulukkoon sijoitettaessa täytyy käyttää " "avainindeksiä" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: ei voida luoda: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: komennolle ei löydy näppäinkarttaa" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: ensimmäinen ei-tyhjä merkki ei ole ”\"”" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "ei loppumerkkiä ”%c” rivissä %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: puuttuva kaksoispiste-erotin" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "”%s”: ei voida irrottaa" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, fuzzy, c-format msgid "`%s': invalid alias name" msgstr "”%s”: virheellinen näppäinkartan nimi" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "rivieditointi ei ole käytössä" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "”%s”: virheellinen näppäinkartan nimi" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: ei voida lukea: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "”%s”: tuntematon funktio" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s ei ole sidottu mihinkään näppäimeen.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s voidaan käynnistää näppäinkomennolla " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "”%s”: ei voida irrottaa" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "toistolaskuri" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "voidaan käyttää vain ”for”-, ”while”- tai ”until”-silmukoissa" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -149,7 +149,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Palauta tämänhetkisen alirutiinikutsun konteksti.\n" " \n" @@ -165,350 +169,360 @@ msgstr "" " Palauttaa 0 ellei komentotulkki ole funktion ulkopuolella tai parametri\n" " on virheellinen." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME-ympäristömuuttujaa ei ole asetettu" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "liian monta argumenttia" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "ei toista hakemistoa" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD-ympäristömuuttujaa ei ole asetettu" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "rivi %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "varoitus: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: käyttö: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: valitsin vaatii argumentin" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: vaaditaan numeerinen argumentti" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: ei löytynyt" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: virheellinen valitsin" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: virheellinen valitsimen nimi" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "”%s”: virheellinen tunniste" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "virheellinen oktaaliluku" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "virheellinen heksadesimaaliluku" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "virheellinen luku" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: virheellinen signaalimääritys" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "”%s”: ei ole prosessitunnus eikä kelvollinen työtunniste" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: kirjoitussuojattu muuttuja" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: ei voida poistaa" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s rajojen ulkopuolella" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argumentti" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s rajojen ulkopuolella" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: työtä ei löydy" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: ei työnohjausta" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "ei työnohjausta" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: rajoitettu" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "rajoitettu" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: ei ole komentotulkin sisäänrakennettu komento" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "kirjoitusvirhe: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "pääteasetuksia asetettaessa tapahtui virhe: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "pääteasetuksia luettaessa tapahtui virhe: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: nykyhakemistoa luettaessa tapahtui virhe: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: ei ole yksiselitteinen työtunniste" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, fuzzy, c-format +msgid "%s: not an indexed array" +msgstr "%s: ei ole taulukkomuuttuja" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: ei voida poistaa: kirjoitussuojattu %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: ei voida poistaa" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: virheellinen toiminnon nimi" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: ei lavennusmääritystä" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "varoitus: -F -valitsin ei ehkä toimi odotetusti" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "varoitus: -C -valitsin ei ehkä toimi odotetusti" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "tällä hetkellä komennon lavennusfunktiota ei suoriteta" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "voidaan käyttää ainoastaan funktiossa" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "”-f”:ää ei voida käyttää funktioiden luomiseen" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: kirjoitussuojattu funktio" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: taulukkomuuttujia ei voi tuhota näin" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: assosiatiivista taulukkoa ei voi muuttaa indeksoiduksi" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynaaminen lataus ei ole käytettävissä" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "jaettua objektia %s ei voida avata: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "kohdetta %s ei löydy jaetusta objektista %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: ei dynaamisesti ladattu" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: ei dynaamisesti ladattu" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: ei voida poistaa: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: on hakemisto" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: ei tavallinen tiedosto" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: tiedosto on liian iso" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: binääritiedostoa ei voida suorittaa" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: ei voida suorittaa: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "lopetus\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "ei ole sisäänkirjautumiskomentotulkki: käytä komentoa ”exit”" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Töitä on pysäytettynä.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Töitä on ajossa.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "ei löytynyt komentoa" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "komentohistoriamääritys" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: väliaikaistiedostoa ei voitu avata: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "nykyinen" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "työ %d käynnistyi ilman työnohjausta" @@ -523,11 +537,11 @@ msgstr "%s: virheellinen valitsin – %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: valitsin vaatii argumentin – %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hajautus kytketty pois" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: hajautustaulukko on tyhjä\n" @@ -557,12 +571,12 @@ msgstr "" "Ohjeita kohteelle ”%s” ei löydy. Kokeile ”help help”, ”man -k %s” tai \n" "”info %s”." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: ei voida avata: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -583,21 +597,31 @@ msgstr "" "Asteriski (*) nimen vieressä tarkoittaa, että komennon käyttö on estetty.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "valitsimista -anrw voidaan käyttää vain yhtä" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "sijainti komentohistoriassa" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "tyhjä taulukkomuuttujan nimi" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parametria ei ole tai sitä ei ole asetettu" + +#: builtins/history.def:349 #, fuzzy, c-format msgid "%s: invalid timestamp" msgstr "%s: virheellinen valitsimen nimi" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: historiaviittaus epäonnistui" @@ -611,113 +635,113 @@ msgstr "%s: inlib epäonnistui" msgid "no other options allowed with `-x'" msgstr "”-x”:n kanssa ei voida käyttää muita valitsimia" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumenttien pitää olla prosessi- tai työtunnisteita" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Tuntematon virhe" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "odotettiin lauseketta" -#: builtins/mapfile.def:180 -#, fuzzy, c-format -msgid "%s: not an indexed array" -msgstr "%s: ei ole taulukkomuuttuja" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: virheellinen tiedostokahvamääritys" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: virheellinen tiedostokahva: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: virheellinen rivimäärä" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: virheellinen taulukkoindeksi" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: virheellinen paluukutsumäärä" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "tyhjä taulukkomuuttujan nimi" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "vaaditaan tukea taulukkomuuttujille" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "”%s”: puuttuva muotoilumerkki" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, fuzzy, c-format msgid "`%c': invalid time format specification" msgstr "%s: virheellinen aikakatkaisumääritys" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "”%c”: virheellinen muotoilumerkki" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "varoitus: %s: %s" +msgid "%s: %s" +msgstr "" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "\\x:stä puuttuu heksadesimaalinumero" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, fuzzy, c-format msgid "missing unicode digit for \\%c" msgstr "\\x:stä puuttuu heksadesimaalinumero" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "ei toista hakemistoa" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, fuzzy, c-format msgid "%s: invalid argument" msgstr "%s: virheellinen rajoitusargumentti" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<ei nykyhakemistoa>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "hakemistopino on tyhjä" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "hakemistopinon indeksi" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -759,7 +783,7 @@ msgstr "" " -N\tNäyttää listan N:nnen alkion (laskien oikealta dirs-komennon\n" " \tantamasta listasta). Valitsimetta kutsuttaessa aloitetaan nollasta." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -791,17 +815,17 @@ msgstr "" " -n\tjättää hakemiston vaihtamatta, joten vain pinoa muutetaan\n" " \n" " Argumentit:\n" -" +N\tKääntää pinoa niin, että N:s hakemisto (laskien vasemmalta \"dirs" -"\"-\n" +" +N\tKääntää pinoa niin, että N:s hakemisto (laskien vasemmalta " +"\"dirs\"-\n" " komennon antamasta listasta) on päällimmäisenä.\n" " \n" -" -N\tKääntää pinoa niin, että N:s hakemisto (laskien oikealta \"dirs" -"\"-\n" +" -N\tKääntää pinoa niin, että N:s hakemisto (laskien oikealta " +"\"dirs\"-\n" " komennon antamasta listasta) on päällimmäisenä.\n" " \n" " Sisäänrakennettu ”dirs”-komento näyttää hakemistopinon." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -839,322 +863,333 @@ msgstr "" " \n" " Sisäänrakennettu ”dirs”-komento näyttää hakemistopinon sisällön." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: virheellinen aikakatkaisumääritys" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "lukuvirhe: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "”return” on käytettävissä vain funktiossa tai ladatussa skriptissä" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "funktiota ja muuttujaa ei voi poistaa yhtä aikaa" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: ei ole taulukkomuuttuja" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: ei ole funktio" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, fuzzy, c-format msgid "%s: cannot export" msgstr "%s: ei voida poistaa" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "siirtolaskuri" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "" "komentotulkin valitsimia ei voida laittaa päällä ja ottaa pois päältä " "samanaikaisesti" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: virheellinen komentotulkin valitsimen nimi" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "vaaditaan tiedostonimi argumentiksi" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: tiedostoa ei löytynyt" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "ei voida keskeyttää" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "sisäänkirjautumiskomentotulkkia ei voi keskeyttää" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s on aliasioitu ”%s”\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s on komentotulkin avainsana\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s on funktio\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, fuzzy, c-format msgid "%s is a special shell builtin\n" msgstr "%s on komentotulkin sisäänrakennettu komento\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s on funktio\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s on komentotulkin sisäänrakennettu komento\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s on %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s on hajautettu (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: virheellinen rajoitusargumentti" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "”%c”: virheellinen komento" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: rajoitusta ei saada: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "rajoitus" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: rajoitusta ei voida muokata: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "oktaaliluku" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "”%c”: virheellinen symbolisen tilan operaattori" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "”%c”: virheellinen symbolisen tilan merkki" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " rivi " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "viimeinen komento: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Keskeytetään..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "varoitus: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "tuntematon komentovirhe" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "virheellinen komentotyyppi" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "virheellinen liittäjä" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "virheellinen hyppy" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: sitomaton muuttuja" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aaikakatkaisu: automaattinen uloskirjautuminen\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "syötettä ei voida lukea tiedostosta /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "AJAN MUOTOMÄÄRITYS: ”%c”: virheellinen muotoilumerkki" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "putkitusvirhe" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: rajoitettu: komentojen nimissä ei voi käyttää ”/”-merkkiä" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: komentoa ei löydy" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: virheellinen tulkki" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: binääritiedostoa ei voida suorittaa" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: virheellinen tulkki" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, fuzzy, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: binääritiedostoa ei voida suorittaa" -#: execute_cmd.c:6123 -#, fuzzy, c-format -msgid "`%s': is a special builtin" -msgstr "%s on komentotulkin sisäänrakennettu komento\n" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "tiedostokahvaa %d ei voida kopioida kahvaksi %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "lausekkeen rekursiomäärä ylittyi" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "rekursiopinon alivuoto" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "lauseoppivirhe lausekkeessa" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "yritettiin sijoittaa objektiin, joka ei ole muuttuja" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "lauseoppivirhe lausekkeessa" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "jako nollalla" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bugi: virheellinen sijoitusavainsana" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "”:”:ttä odotettiin ehdolliseen lausekkeeseen" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "eksponentti on pienempi kuin 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "odotettiin muuttujaa ++:n tai --:n jälkeen" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "puuttuva ”)”" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "lauseoppivirhe: odotettiin operandia" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "lauseoppivirhe: virheellinen aritmetiikkaoperaattori" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (virheellinen avainsana on ”%s”)" @@ -1172,7 +1207,7 @@ msgstr "%s: virheellinen rivimäärä" msgid "value too great for base" msgstr "liian iso luku lukujärjestelmälle" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: virhe lausekkeessa\n" @@ -1181,46 +1216,51 @@ msgstr "%s: virhe lausekkeessa\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: ylempiin hakemistoihin ei päästä" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, fuzzy, c-format +msgid "`%s': is a special builtin" +msgstr "%s on komentotulkin sisäänrakennettu komento\n" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "nodelay-tilaa ei voida asettaa tiedostokahvalle %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "bashin syötteeksi ei voida avata uutta tiedostokahvaa kahvasta %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: uudella tiedostokahvalla %d on jo puskuri" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp-putki" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "haarautettu prosessi-id %d on ajossa olevalla työllä %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "poistetaan pysäytetty työ %d prosessiryhmästä %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: prosessi %5ld (%s) on merkattu vielä toimivaksi" @@ -1230,138 +1270,138 @@ msgstr "add_process: prosessi %5ld (%s) on merkattu vielä toimivaksi" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: prosessitunnusta ei löydy." -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signaali %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Valmis" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Pysäytetty" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Pysäytetty(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Ajossa" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Valmis(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Poistui %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Tuntematon tila" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(luotiin core-tiedosto)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (työhakemisto: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "lapsiprosessin setpgid (%ld => %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: prosessi %ld ei ole tämän komentotulkin lapsiprosessi" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Prosessista %ld ei ole tietoja" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: työ %d on pysäytetty" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: työtä ei löydy" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: työ on lopetettu" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: työ %d on jo taustalla" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: rivi %d:" -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (luotiin core-tiedosto)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(työhakemisto nyt: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp epäonnistui" -#: jobs.c:4434 +#: jobs.c:4486 #, fuzzy msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: vuonhallinta" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: vuonhallinta" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "päätteen prosessiryhmää ei voitu asettaa (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "tällä komentotulkilla ei ole työnohjausta" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: varmistus epäonnistui: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1370,382 +1410,392 @@ msgstr "" "\r\n" "malloc: %s:%d: varmistus epäonnistui\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "tuntematon" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: vapaitten listan lohko ylikirjoittui" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: kutsuttiin argumenttina jo vapautettu lohko" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: kutsuttuun argumenttina varaamaton lohko" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: havaittiin alivuoto; mh_nbytes rajojen ulkopuolella" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: havaittiin alivuoto; mh_nbytes rajojen ulkopuolella" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: alku- ja loppulohkojen koot eroavat" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: kutsuargumentti on varaamaton lohko" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: havaittiin alivuoto; mh_nbytes rajojen ulkopuolella" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: havaittiin alivuoto; mh_nbytes rajojen ulkopuolella" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: alku- ja loppulohkojen koot eroavat" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: varaustaulukko on täynnä FIND_ALLOCeja?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p on merkitty taulukossa jo varatuksi?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p on jo taulukossa vapaana?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "virheellinen lukujärjestelmä" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: tuntematon palvelin" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: virheellinen palvelu" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: virheellinen verkkopolkumääritys" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "verkko-operaatioita ei ole tuettu" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "" -#: locale.c:294 +#: locale.c:297 #, fuzzy, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "xrealloc: %s:%d: ei voida varata %lu tavua" -#: locale.c:296 +#: locale.c:299 #, fuzzy, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "xrealloc: %s:%d: ei voida varata %lu tavua" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Sinulle on postia laatikossa $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Sinulla on uutta postia laatikossa $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Posti laatikossa %s on luettu\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "lauseoppivirhe: vaaditaan aritmeettinen lauseke" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "lauseoppivirhe: odottamaton ”;”" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "lauseoppivirhe: ”((%s))”" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: virheellinen käskytyyppi %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" "here-dokumentti rivillä %d päättyi tiedoston loppumiseen (haluttiin ”%s”)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: uudelleenohjaus ”%d” rajojen ulkopuolella" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "kirjoitusvirhe: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "odottamaton EOF (tiedostonloppu) odotettaessa sulkevaa ”%c”" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "odottamaton EOF odotettaessa ”]]”" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "lauseoppivirhe ehdollisessa lausekkeessa: odottamaton avainsana ”%s”" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "lauseoppivirhe ehdollisessa lausekkeessa" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "odottamaton avainsana ”%s”, odotettiin ”)”" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "odototettiin ”)”" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "odottamaton argumentti ”%s” ehdolliselle unaariselle operaattorille" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "odottamaton argumentti ehdolliselle unaariselle operaattorille" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "" "odottamaton avainsana ”%s”, odotettiin ehdollista binääristä operaattoria" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "odotettiin ehdollista binääristä operaattoria" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "odottamaton argumentti ”%s” ehdolliselle binääriselle operaattorille" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "odottamaton argumentti ehdolliselle binääriselle operaattorille" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "odottamaton avainsana ”%c” ehdollisessa komennossa" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "odottamaton avainsana ”%s” ehdollisessa komennossa" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "odottamaton avainsana %d ehdollisessa komennossa" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "lauseoppivirhe lähellä odottamatonta avainsanaa ”%s”" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "lauseoppivirhe lähellä ”%s”" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "lauseoppivirhe: odottamaton tiedostonloppu" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "lauseoppivirhe: odottamaton tiedostonloppu" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "lauseoppivirhe" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Kirjoita ”%s” poistuaksesi komentotulkista.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "Odottamaton EOF odotettaessa vastaavaa ”)”" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "täydennys: funktiota ”%s” ei löytynyt" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: tyhjä COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: virheellinen yhdistin ”%d”" -#: print_cmd.c:375 +#: print_cmd.c:399 #, fuzzy, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "%d: virheellinen tiedostokahva: %s" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: ”%c”: virheellinen muotoilumerkki" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "tiedostokahva rajojen ulkopuolella" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: epämääräinen uudelleenohjaus" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: olemassa olevan tiedoston päälle ei voida kirjoittaa" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: rajoitettu: tulostusta ei voida uudelleenohjata" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "here-dokumentille ei voida luoda väliaikaistiedostoa: %s" -#: redir.c:223 +#: redir.c:218 #, fuzzy, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: listaa ei voida sijoittaa taulukon alkioon" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port-muotoa ei tueta ilman tietoliikennettä" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "virhe uudelleenohjauksessa: tiedostokahvaa ei voida kopioida" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "/tmp-hakemistoa ei löytynyt, luo se!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp:n pitää olla kelvollinen hakemiston nimi" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: virheellinen valitsin" -#: shell.c:1343 +#: shell.c:1355 #, fuzzy, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "nodelay-tilaa ei voida asettaa tiedostokahvalle %d" -#: shell.c:1354 +#: shell.c:1371 #, fuzzy, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "nodelay-tilaa ei voida asettaa tiedostokahvalle %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, fuzzy, c-format msgid "%s: Is a directory" msgstr "%s: on hakemisto" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Minulla ei ole nimeä!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versio %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1754,55 +1804,55 @@ msgstr "" "Käyttö:\t%s[GNU:n pitkä valitsin] [valitsin] ...\n" "\t%s [GNU:n pitkä valitsin] [valitsin] komentotiedosto ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU:n pitkät valitsimet:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Komentotulkin valitsimet:\n" -#: shell.c:2069 +#: shell.c:2061 #, fuzzy msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "" "\t-irsD tai -c komento tai -O shopt_option (ainoastaan käynnistettäessä)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s tai -o -valitsin\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Kirjoita ”%s -c 'help set'” saadaksesi lisätietoja komentotulkin " "valitsimista.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Kirjoita ”%s -c help” saadaksesi lisätietoja komentotulkin " "sisäänrakennetuista komennoista.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Raportoi virheet komennolla ”bashbug”.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: virheellinen operaatio" @@ -1972,164 +2022,168 @@ msgstr "Informaatiopyyntö" msgid "Unknown Signal #%d" msgstr "Tuntematon signaali #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "virheellinen korvaus: ei sulkevaa ”%s” jonossa %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: listaa ei voida sijoittaa taulukon alkioon" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "putkea ei voida luoda prosessin korvaamista varten" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "lapsiprosessia ei voida luoda prosessin korvaamista varten" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "nimettyä putkea %s ei voida avata lukemista varten" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "nimettyä putkea %s ei voida avata kirjoitusta varten" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "nimettyä putkea %s ei voida kopioida tiedostokahvaksi %d" -#: subst.c:6370 +#: subst.c:6761 #, fuzzy msgid "command substitution: ignored null byte in input" msgstr "virheellinen korvaus: ei sulkevaa ”`” jonossa %s" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: putkea ei voida kopioida tiedostokahvaksi 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "putkea ei voida luoda komennon korvaamista varten" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "ei voida luoda lapsiprosessia komennon korvaamista varten" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: putkea ei voida kopioida tiedostokahvaksi 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, fuzzy, c-format msgid "%s: invalid indirect expansion" msgstr "%s: virheellinen rivimäärä" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, fuzzy, c-format msgid "%s: invalid variable name" msgstr "%s: virheellinen toiminnon nimi" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: virheellinen korvaus" + +#: subst.c:8231 #, fuzzy, c-format msgid "%s: parameter not set" msgstr "%s: parametria ei ole tai sitä ei ole asetettu" -#: subst.c:7480 -#, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parametria ei ole tai sitä ei ole asetettu" - -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: alimerkkijonolauseke < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: virheellinen korvaus" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: ei voida asettaa näin" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" msgstr "" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "virheellinen korvaus: ei sulkevaa ”`” jonossa %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "ei osumia: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "odotettiin argumenttia" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: odotettiin kokonaislukuilmaisua" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "odotettiin ”)”" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "odotettiin ”)”, löydettiin %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: odotettiin binääristä operaattoria" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: odotettiin unaarista operaattoria" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "puuttuva ”]”" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "lauseoppivirhe: odottamaton ”;”" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "virheellinen signaalinumero" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: virheellinen arvo trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" @@ -2137,94 +2191,102 @@ msgstr "" "run_pending_traps: signaalikäsittelijä on SIG_DFL, lähetän %d (%s) uudelleen " "itselleni" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: virheellinen signaali %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "virhe tuotaessa ”%s”:n funktiomääritystä" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "komentotulkkitaso (%d) liian korkea, palautetaan 1:ksi" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: ei funktiokontekstia nykytilassa" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: ei funktiokontekstia nykytilassa" -#: variables.c:4757 +#: variables.c:4793 #, fuzzy, c-format msgid "%s has null exportstr" msgstr "%s: parametria ei ole tai sitä ei ole asetettu" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "virheellinen merkki %d %s:n exportstr:ssä" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "ei =:ä kohteen %s exportstr:ssä" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: shell_variablesin alku ei ole funktiokonteksti" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: ei global_variables-kontekstia" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" "pop_scope: shell_variablesin alku ei väliaikaisten ympäristömuuttujien " "ympäristössä" -#: variables.c:6400 +#: variables.c:6404 #, fuzzy, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: ei voida avata: %s" -#: variables.c:6405 +#: variables.c:6409 #, fuzzy, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%d: virheellinen tiedostokahva: %s" -#: variables.c:6450 +#: variables.c:6453 #, fuzzy, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s rajojen ulkopuolella" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright © 2009 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2232,37 +2294,37 @@ msgstr "" "Lisenssi GPLv3+: GNU GPL versio 3 tai uudempi <http://gnu.org/licenses/gpl." "html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versio %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 #, fuzzy msgid "This is free software; you are free to change and redistribute it." msgstr "Tämä on vapaa ohjelma; saat muutella ja levittää sitä vapaasti.\n" -#: version.c:92 version2.c:92 +#: version.c:91 #, fuzzy msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Takuuta ei ole lain määräämissä rajoissa.\n" -#: xmalloc.c:93 +#: xmalloc.c:84 #, fuzzy, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "xmalloc: ei voida varata %lu tavua (varattiin %lu tavua)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, fuzzy, c-format msgid "%s: cannot allocate %lu bytes" msgstr "xmalloc: ei voitu varata %lu tavua" -#: xmalloc.c:165 +#: xmalloc.c:164 #, fuzzy, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "xmalloc: %s:%d: ei voida varata %lu tavua (varattiin %lu tavua)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, fuzzy, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "xmalloc: %s:%d: ei voida varata %lu tavua" @@ -2303,7 +2365,7 @@ msgstr "caller [expr]" #: builtins.c:66 #, fuzzy -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|-P] [dir]" #: builtins.c:68 @@ -2420,7 +2482,7 @@ msgstr "let arg [arg ...]" #: builtins.c:138 #, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a taulukko] [-d erotin] [-i teksti] [-n lkm] [-p kehote] [-t " @@ -2474,7 +2536,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] signaalimäärite ...]" #: builtins.c:168 @@ -2501,26 +2564,30 @@ msgid "wait [pid ...]" msgstr "wait [pid]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NIMI [in ARVOT ... ] ; do KOMENNOT; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( lause1; lause2; lause3 )); do KOMENNOT; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NIMI [in ARVOT ... ;] do KOMENNOT; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] komentoputki" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case SANA in [MALLINE [| MALLINE]...) KOMENNOT ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2528,65 +2595,65 @@ msgstr "" "if KOMENNOT; then KOMENNOT; [ elif KOMENNOT; then KOMENNOT; ]... [ else " "KOMENNOT; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while KOMENNOT; do KOMENNOT; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until KOMENNOT; do KOMENNOT; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NIMI] komento [uudelleenohjaukset]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function nimi { KOMENNOT ; } tai nimi () { KOMENNOT ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ KOMENNOT ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "työtunniste [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( lauseke ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ lauseke ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "muuttujat - eräiden komentotulkin muuttujien nimet ja merkitykset" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | hakemisto]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [valitsinnimi ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v muuttuja] muoto [argumentit]" -#: builtins.c:231 +#: builtins.c:233 #, fuzzy msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" @@ -2597,22 +2664,23 @@ msgstr "" "jokerimalline] [-W sanalista] [-F funktio] [-C komento] [-X " "suodatinmalline] [-P prefiksi] [-S suffiksi] [nimi...]" -#: builtins.c:235 +#: builtins.c:237 #, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o valitsin] [-A toimenpide] [-G jokerimalline] [-" "W sanalista] [-F funktio] [-C komento] [-X suodatinmalline] [-P prefiksi] [-" "S suffiksi] [sana]" -#: builtins.c:239 +#: builtins.c:241 #, fuzzy msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o valitsin] [nimi ...]" -#: builtins.c:242 +#: builtins.c:244 #, fuzzy msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2621,7 +2689,7 @@ msgstr "" "mapfile [-n lukumäärä] [-O alkuperä] [-s laskuri] [-t] [-u tiedostokahva] \n" "[-C paluukutsu] [-c määrä] [taulukko]" -#: builtins.c:244 +#: builtins.c:246 #, fuzzy msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2631,7 +2699,7 @@ msgstr "" "tiedostokahva] \n" "[-C paluukutsu] [-c määrä] [taulukko]" -#: builtins.c:256 +#: builtins.c:258 #, fuzzy msgid "" "Define or display aliases.\n" @@ -2668,7 +2736,7 @@ msgstr "" " alias palauttaa arvon tosi, mikäli parametriksi on annettu NIMI jonka\n" " aliasta ei ole määritelty." -#: builtins.c:278 +#: builtins.c:280 #, fuzzy msgid "" "Remove each NAME from the list of defined aliases.\n" @@ -2686,7 +2754,7 @@ msgstr "" " Palauttaa arvon tosi paitsi jos NIMI-nimistä aliasta\n" " ei ole." -#: builtins.c:291 +#: builtins.c:293 #, fuzzy msgid "" "Set Readline key bindings and variables.\n" @@ -2766,7 +2834,7 @@ msgstr "" "tapahtuu \n" " virhe." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2784,7 +2852,7 @@ msgstr "" " Paluuarvo:\n" " Paluuarvo on 0 jollei N ole suurempi tai yhtäsuuri kuin 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2802,7 +2870,7 @@ msgstr "" " Paluuarvo:\n" " Paluuarvo on 0 ellei N ole suurempi tai yhtäsuuri kuin 1." -#: builtins.c:354 +#: builtins.c:356 #, fuzzy msgid "" "Execute shell builtins.\n" @@ -2826,7 +2894,7 @@ msgstr "" " Palauttaa KOMENNON paluuarvon, tai epätoden jos KOMENTO ei ole\n" " sisäänrakennettu komento." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2855,14 +2923,14 @@ msgstr "" " Palauttaa 0 ellei komentotulkki ole funktion ulkopuolella tai parametri\n" " on virheellinen." -#: builtins.c:387 +#: builtins.c:389 #, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2927,7 +2995,7 @@ msgstr "" " Palauttaa 0, jos hakemistoa vaihdettiin, nollasta poikkeavan muussa \n" " tapauksessa." -#: builtins.c:425 +#: builtins.c:427 #, fuzzy msgid "" "Print the name of the current working directory.\n" @@ -2956,7 +3024,7 @@ msgstr "" " Palauttaa 0 ellei ole annettu virheellistä valitsinta tai nykyistä \n" " hakemistoa ei voida lukea." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2972,7 +3040,7 @@ msgstr "" " Paluuarvo:\n" " Onnistuu aina." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2984,7 +3052,7 @@ msgstr "" " Paluuarvo:\n" " Onnistuu aina." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2996,7 +3064,7 @@ msgstr "" " Paluuarvo:\n" " Epäonnistuu aina." -#: builtins.c:471 +#: builtins.c:473 #, fuzzy msgid "" "Execute a simple command or display information about commands.\n" @@ -3032,7 +3100,7 @@ msgstr "" " Palauttaa KOMENNON paluuarvon, tai epäonnistumisen jos KOMENTOA ei \n" " löytynyt." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3061,7 +3129,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3110,7 +3179,7 @@ msgstr "" "tule \n" " virhetilannetta." -#: builtins.c:532 +#: builtins.c:535 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3121,7 +3190,7 @@ msgstr "" " \n" " Vanhentunut. Katso ”help declare”." -#: builtins.c:540 +#: builtins.c:543 #, fuzzy msgid "" "Define local variables.\n" @@ -3149,7 +3218,7 @@ msgstr "" " Palauttaa onnistuneen, ellei ole annettu virheellistä valitsinta,\n" " tapahtuu virhe tai komentotulkki ei ole suorittamassa funktiota." -#: builtins.c:557 +#: builtins.c:560 #, fuzzy msgid "" "Write arguments to the standard output.\n" @@ -3218,7 +3287,7 @@ msgstr "" " Paluuarvo:\n" " Palauttaa onnistuneen ellei tapahdu virhettä." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3240,7 +3309,8 @@ msgstr "" " Paluuarvo:\n" " Palauttaa onnistuneen ellei tapahdu virhettä." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3260,6 +3330,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3294,7 +3370,7 @@ msgstr "" "sisäänrakennettu\n" " komento tai tapahtuu virhe." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3313,7 +3389,7 @@ msgstr "" " Paluuarvo:\n" " Palauttaa komennon paluuarvon tai onnistuneen jos komento on tyhjä." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy msgid "" "Parse option arguments.\n" @@ -3394,7 +3470,7 @@ msgstr "" "valitsimet\n" " loppuvat tai tapahtuu virhe." -#: builtins.c:694 +#: builtins.c:702 #, fuzzy msgid "" "Replace the shell with the given command.\n" @@ -3437,7 +3513,7 @@ msgstr "" "uudelleenohjauksessa\n" " tapahtuu virhe." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3449,7 +3525,7 @@ msgstr "" " Poistuu komentotulkista paluuarvolla N. Jos N:ää ei anneta, paluuarvo\n" " on viimeisen komennon paluuarvo." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3462,7 +3538,8 @@ msgstr "" " Poistuu sisäänkirjautumiskomentotulkista paluuarvolla N. Palauttaa\n" " virheen jos ei olla sisäänkirjautumiskomentotulkissa." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3487,6 +3564,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3516,7 +3595,7 @@ msgstr "" " Palauttaa onnistuneen tai suoritetun komennon paluuarvon; nollasta\n" " poikkeava virhetilanteessa." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3537,7 +3616,7 @@ msgstr "" " Paluuarvo:\n" " Edustalle tuodun työn paluuarvo, tai epäonnistuminen virhetilanteessa." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3563,7 +3642,7 @@ msgstr "" "tapahtuu\n" " virhe." -#: builtins.c:793 +#: builtins.c:803 #, fuzzy msgid "" "Remember or display program locations.\n" @@ -3609,7 +3688,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos NIMEÄ ei löydy tai on annettu " "virheellinen valitsin." -#: builtins.c:818 +#: builtins.c:828 #, fuzzy msgid "" "Display information about builtin commands.\n" @@ -3651,7 +3730,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos MALLINETTA ei löydy tai valitsin on\n" " virheellinen." -#: builtins.c:842 +#: builtins.c:852 #, fuzzy msgid "" "Display or manipulate the history list.\n" @@ -3676,7 +3755,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3718,7 +3801,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin " "tai tapahtuu virhe." -#: builtins.c:879 +#: builtins.c:893 #, fuzzy msgid "" "Display status of jobs.\n" @@ -3763,7 +3846,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai \n" " tapahtuu virhe. Jos -x:ää on käytetty, palauttaa KOMENNON paluuarvon." -#: builtins.c:906 +#: builtins.c:920 #, fuzzy msgid "" "Remove jobs from current shell.\n" @@ -3796,7 +3879,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos jokin valitsin tai TYÖTUNNISTE on " "virheellinen." -#: builtins.c:925 +#: builtins.c:939 #, fuzzy msgid "" "Send a signal to a job.\n" @@ -3840,7 +3923,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai " "tapahtuu virhe." -#: builtins.c:949 +#: builtins.c:963 #, fuzzy msgid "" "Evaluate arithmetic expressions.\n" @@ -3929,7 +4012,7 @@ msgstr "" " Jos viimeinen ARGUMENTTI evaluoituu nollaksi, let palauttaa 1, muussa\n" " tapauksessa 0." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -3954,6 +4037,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -4022,7 +4107,7 @@ msgstr "" " Paluuarvo on nolla, ellei törmätä tiedoston loppumiseen, aikarajan\n" " ylitykseen tai mikäli -u:lle annetaan virheellinen tiedostokahva." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4046,7 +4131,7 @@ msgstr "" "suorittamassa\n" " funktiota tai skriptiä." -#: builtins.c:1055 +#: builtins.c:1071 #, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" @@ -4123,6 +4208,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4217,7 +4306,7 @@ msgstr "" " Paluuarvo:\n" " Palauttaa onnistumisen ellei ole annettu virheellistä valitsinta." -#: builtins.c:1140 +#: builtins.c:1160 #, fuzzy msgid "" "Unset values and attributes of shell variables and functions.\n" @@ -4256,7 +4345,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n" " tai NIMI on kirjoitussuojattu." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4290,7 +4379,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n" " tai NIMI on virheellinen." -#: builtins.c:1181 +#: builtins.c:1201 #, fuzzy msgid "" "Mark shell variables as unchangeable.\n" @@ -4329,7 +4418,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n" " tai NIMI on virheellinen." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4348,7 +4437,7 @@ msgstr "" " Paluuarvo:\n" " Palauttaa onnistuneen ellei N ole negatiivinen tai suurempi kuin $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4373,15 +4462,18 @@ msgstr "" "epäonnistuu\n" " mikäli TIEDOSTOA ei voida lukea." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4400,7 +4492,7 @@ msgstr "" "tapahtuu\n" " virhe." -#: builtins.c:1262 +#: builtins.c:1284 #, fuzzy msgid "" "Evaluate conditional expression.\n" @@ -4563,7 +4655,7 @@ msgstr "" " Palauttaa onnistumisen jos LAUSEKE evaluoituu todeksi; epäonnistuu jos\n" " LAUSEKE evaluoituu vääräksi tai on annettu virheellinen argumentti." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4575,7 +4667,7 @@ msgstr "" " Tämä on sisäänrakennetun ”test”-komennon synonyymi, mutta viimeisen\n" " argumentin pitää olla ”]”, joka sulkee avaavan ”[”:n." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4595,7 +4687,7 @@ msgstr "" " Paluuarvo:\n" " Onnistuu aina." -#: builtins.c:1365 +#: builtins.c:1387 #, fuzzy msgid "" "Trap signals and other events.\n" @@ -4604,31 +4696,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4677,7 +4774,7 @@ msgstr "" "annettu\n" " virheellinen valitsin." -#: builtins.c:1401 +#: builtins.c:1430 #, fuzzy msgid "" "Display information about command type.\n" @@ -4734,7 +4831,7 @@ msgstr "" " Palauttaa onnistuneen mikäli kaikki NIMET löytyivät, muussa tapauksessa\n" " epäonnistuu." -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy msgid "" "Modify shell resource limits.\n" @@ -4777,9 +4874,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4826,7 +4924,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n" " tai tapahtuu virhe." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4861,7 +4959,7 @@ msgstr "" " Palauttaa onnistuneen ellei TILA ole virheellinen tai on annettu \n" " virheellinen valitsin." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" @@ -4907,7 +5005,7 @@ msgstr "" " Palauttaa ID:n tilan; epäonnistuu jos ID on virheellinen tai on annettu\n" " virheellinen valitsin." -#: builtins.c:1534 +#: builtins.c:1564 #, fuzzy msgid "" "Wait for process completion and return exit status.\n" @@ -4933,7 +5031,16 @@ msgstr "" " Palauttaa ID:n tilan; epäonnistuu jos ID on virheellinen tai on annettu\n" " virheellinen valitsin." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4955,7 +5062,7 @@ msgstr "" " Paluuarvo:\n" " Viimeisen suoritetun komennon paluuarvo." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4987,7 +5094,7 @@ msgstr "" " Paluuarvo:\n" " Viimeisen suoritetun komennon paluuarvo." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5024,7 +5131,7 @@ msgstr "" " Paluuarvo:\n" " Viimeisen suoritetun komennon paluuarvo." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5053,7 +5160,7 @@ msgstr "" " Paluuarvo:\n" " KOMENTOKETJUN paluuarvo." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5072,7 +5179,7 @@ msgstr "" " Paluuarvo:\n" " Viimeisen suoritetun komennon paluuarvo." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5106,7 +5213,7 @@ msgstr "" " Paluuarvo:\n" " Viimeisen suoritetun komennon paluuarvo." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5126,7 +5233,7 @@ msgstr "" " Paluuarvo:\n" " Viimeisen komennon paluuarvo." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5146,7 +5253,7 @@ msgstr "" " Paluuarvo:\n" " Viimeisen suoritetun komennon paluuarvo." -#: builtins.c:1672 +#: builtins.c:1712 #, fuzzy msgid "" "Create a coprocess named NAME.\n" @@ -5169,7 +5276,7 @@ msgstr "" " Paluuarvo:\n" " KOMENNON paluuarvo." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5192,7 +5299,7 @@ msgstr "" " Paluuarvo:\n" " Onnistuu, ellei NIMI ole kirjoitussuojattu." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5211,7 +5318,7 @@ msgstr "" " Paluuarvo:\n" " Viimeisen suoritetun komennon paluuarvo." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5237,7 +5344,7 @@ msgstr "" " Paluuarvo:\n" " Työn tila." -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy msgid "" "Evaluate arithmetic expression.\n" @@ -5256,7 +5363,7 @@ msgstr "" " Paluuarvo:\n" " Palauttaa 1, jos LAUSEKKEEN arvo on 0; muuten palauttaa 0." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5310,7 +5417,7 @@ msgstr "" " Paluuarvo:\n" " 0 tai 1 riippuen LAUSEKKEEN arvosta." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5413,7 +5520,7 @@ msgstr "" " HISTIGNORE\tKaksoispistein eroteltu lista mallineista, joita käytetään\n" " \t\tpäätettäessä komentojen tallentamisesta historialistaan.\n" -#: builtins.c:1822 +#: builtins.c:1862 #, fuzzy msgid "" "Add directories to stack.\n" @@ -5472,7 +5579,7 @@ msgstr "" "tai\n" " hakemiston vaihtaminen epäonnistuu." -#: builtins.c:1856 +#: builtins.c:1896 #, fuzzy msgid "" "Remove directories from stack.\n" @@ -5520,7 +5627,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen argumentti tai\n" " hakemiston vaihto epäonnistuu." -#: builtins.c:1886 +#: builtins.c:1926 #, fuzzy msgid "" "Display directory stack.\n" @@ -5575,7 +5682,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n" " tai tapahtuu virhe." -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy msgid "" "Set and unset shell options.\n" @@ -5613,7 +5720,7 @@ msgstr "" " Palauttaa onnistuneen, mikäli VALITSIN on käytössä, epäonnistuu jos on\n" " annettu virheellinen VALITSIN tai VALITSIN ei ole käytössä." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5631,9 +5738,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5675,16 +5782,16 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai\n" " tapahtuu kirjoitus- tai sijoitusvirhe." -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5727,14 +5834,19 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai \n" " tapahtuu virhe." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5750,7 +5862,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai\n" " tapahtuu virhe." -#: builtins.c:2019 +#: builtins.c:2062 #, fuzzy msgid "" "Modify or display completion options.\n" @@ -5805,7 +5917,7 @@ msgstr "" " Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai\n" " NIMELLE ei ole määritetty täydennysmääritystä." -#: builtins.c:2050 +#: builtins.c:2093 #, fuzzy msgid "" "Read lines from the standard input into an indexed array variable.\n" @@ -5879,7 +5991,7 @@ msgstr "" " tai TAULUKKO on kirjoitussuojattu." # Changed " characters into ”... -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5889,6 +6001,39 @@ msgstr "" " \n" " ”mapfile”:n synonyymi." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Palauta tämänhetkisen alirutiinikutsun konteksti.\n" +#~ " \n" +#~ " Ilman parametria, palauttaa ”$line $filename”. Parametrilla " +#~ "palauttaa \n" +#~ " ”$line $subroutine $filename”; saatua lisätietoa voidaan käyttää " +#~ "kutsupinon\n" +#~ " kuvaamiseksi.\n" +#~ " \n" +#~ " Parametrin arvo määrää, montako kutsukehystä taaksepäin siirrytään; \n" +#~ " ylin kehys on numero 0.\n" +#~ " \n" +#~ " Paluuarvo:\n" +#~ " Palauttaa 0 ellei komentotulkki ole funktion ulkopuolella tai " +#~ "parametri\n" +#~ " on virheellinen." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "varoitus: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: virheellinen assosiatiivinen indeksi" diff --git a/po/fr.gmo b/po/fr.gmo index 39d8520c920932198b421ac5af6716f073d85bf6..b47c805412d4551f104452a5ad134a1fe014c49f 100644 GIT binary patch delta 12727 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 delta 52215 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 diff --git a/po/fr.po b/po/fr.po index 2d503ed4c..b0e7b5276 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,15 +1,15 @@ # Messages français pour GNU concernant bash. -# Copyright (C) 2022 Free Software Foundation, Inc. +# Copyright (C) 2024 Free Software Foundation, Inc. # This file is distributed under the same license as the bash package. # Michel Robitaille <robitail@IRO.UMontreal.CA>, 2004 # Christophe Combelles <ccomb@free.fr>, 2008, 2009, 2010, 2011 -# Frédéric Marchal <fmarchal@perso.be>, 2022 +# Frédéric Marchal <fmarchal@perso.be>, 2024 msgid "" msgstr "" "Project-Id-Version: bash-5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" -"PO-Revision-Date: 2022-06-19 10:44+0200\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" +"PO-Revision-Date: 2024-03-11 07:13+0100\n" "Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n" "Language-Team: French <traduc@traduc.org>\n" "Language: fr\n" @@ -19,123 +19,128 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n >= 2);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "mauvais indice de tableau" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: retire l'attribut nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s : impossible de convertir un tableau indexé en associatif" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s : impossible d'assigner à un index non numérique" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" -msgstr "%s : %s : l'assignation d'un tableau associatif doit se faire avec un indice" +msgstr "" +"%s : %s : l'assignation d'un tableau associatif doit se faire avec un indice" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s : impossible de créer : %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command : impossible de trouver le mappage clavier pour la commande" +msgstr "" +"bash_execute_unix_command : impossible de trouver le mappage clavier pour la " +"commande" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s : le premier caractère non vide n'est pas « \" »" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "pas de « %c » de fermeture dans %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s : virgule de séparation manquante" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "« %s » : impossible à délier dans la commande keymap" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "expansion des accolades : impossible d'allouer la mémoire pour %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" -msgstr "expansion des accolades : échec lors de l'allocation mémoire pour %u éléments" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" +msgstr "" +"expansion des accolades : échec lors de l'allocation mémoire pour %u éléments" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "expansion des accolades : échec de l'allocation mémoire pour « %s »" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "« %s » : nom d'alias non valable" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "édition de ligne non activée" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "« %s » : nom du mappage clavier invalide" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s : impossible de lire : %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "« %s » : nom de fonction inconnu" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s n'est lié à aucune touche.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s peut être appelé via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "« %s » : impossible à délier" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "nombre de boucles" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "ceci n'a un sens que dans une boucle « for », « while » ou « until »" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -144,360 +149,388 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Renvoie le contexte de l'appel de sous-routine actuel.\n" " \n" " Sans EXPR, renvoie « $ligne $nomfichier ». Avec EXPR,\n" -" renvoie « $ligne $sousroutine $nomfichier »; ces informations supplémentaires\n" +" renvoie « $ligne $sousroutine $nomfichier »; ces informations " +"supplémentaires\n" " peuvent être utilisées pour fournir une trace de la pile.\n" " \n" -" La valeur de EXPR indique le nombre de cadres d'appels duquel il faut revenir en arrière\n" -" avant le cadre actuel ; le cadre supérieur est le cadre 0." +" La valeur de EXPR indique le nombre de cadres d'appels duquel il faut " +"revenir en arrière\n" +" avant le cadre actuel ; le cadre supérieur est le cadre 0.\n" +" \n" +" Code de sortie :\n" +" Renvoie 0 à moins que le shell ne soit pas en train d'exécuter une " +"fonction ou que EXPR\n" +" ne soit pas valable." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "« HOME » non défini" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "trop d'arguments" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "répertoire nul" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "« OLDPWD » non défini" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "ligne %d : " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "avertissement :" -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s : utilisation :" -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s : l'option nécessite un argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s : argument numérique nécessaire" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s : non trouvé" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s : option non valable" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s : nom d'option non valable" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "« %s » : identifiant non valable" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "nombre octal non valable" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "nombre hexadécimal non valable" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "nombre non valable" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s : indication de signal non valable" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" -msgstr "« %s » : ce n'est pas un n° de processus ou une spécification de tâche valable" +msgstr "" +"« %s » : ce n'est pas un n° de processus ou une spécification de tâche " +"valable" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s : variable en lecture seule" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s : impossible d'assigner" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s : %s hors plage" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s hors plage" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s : tâche inexistante" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s : pas de contrôle de tâche" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "pas de contrôle de tâche" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s : restreint" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "restreint" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s : ceci n'est pas une primitive du shell" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "erreur d'écriture : %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "erreur lors de la définition de l'attribut du terminal : %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "erreur lors de la récupération de l'attribut du terminal : %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s : erreur de détermination du répertoire actuel : %s : %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s : spécification de tâche ambiguë" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "l'aide n'est pas disponible dans cette version" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s : n'est pas un tableau indexé" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s : « unset » impossible : %s est en lecture seule" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s : « unset » impossible" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s : nom d'action non valable" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s : pas d'indication de complètement" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" -msgstr "avertissement : l'option « -F » peut fonctionner différemment de ce à quoi vous vous attendez" +msgstr "" +"avertissement : l'option « -F » peut fonctionner différemment de ce à quoi " +"vous vous attendez" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" -msgstr "avertissement : l'option « -C » peut fonctionner différemment de ce à quoi vous vous attendez" +msgstr "" +"avertissement : l'option « -C » peut fonctionner différemment de ce à quoi " +"vous vous attendez" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "fonction de complétion actuellement non en cours d'exécution" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "utilisable seulement dans une fonction" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "« -f » ne peut pas être utilisé pour fabriquer des fonctions" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s : fonction en lecture seule" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s : la variable de référence ne peut pas être un tableau" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s : références bouclées sur la même variable interdites" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s : référence de nom circulaire" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "« %s » : nom de variable invalide pour une référence de nom" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s : impossible de détruire des variables tableaux de cette façon" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s : impossible de convertir un tableau indexé en tableau associatif" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" -msgstr "%s : l'assignation d'un tableau composé entre apostrophes est dépréciée" +msgstr "" +"%s : l'assignation d'un tableau composé entre apostrophes est dépréciée" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "chargement dynamique non disponible" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "impossible d'ouvrir l'objet partagé %s : %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "impossible de trouver %s dans l'objet partagé %s : %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s : la primitive dynamique a déjà été chargée" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "la fonction de chargement de %s retourne un échec (%d) : pas chargé" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s : non chargé dynamiquement" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s : impossible d'effacer : %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s : ceci est un répertoire" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s : ceci n'est pas un fichier régulier" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s : le fichier est trop grand" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s : ne peut exécuter le fichier binaire" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s : impossible d'exécuter : %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "déconnexion\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "ce n'est pas un shell de connexion : utilisez « exit »" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Il y a des tâches stoppées.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Il y a des tâches en cours d'exécution.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "aucune commande trouvée" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "indication d'historique" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s : impossible d'ouvrir le fichier temporaire : %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "courant" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "tâche %d démarrée sans contrôle de tâche" @@ -512,11 +545,11 @@ msgstr "%s : option non permise -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s : l'option nécessite un argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hachage désactivé" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s : table de hachage vide\n" @@ -542,15 +575,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "Aucune rubrique d'aide ne correspond à « %s ». Essayez « help help », « man -k %s » ou « info %s »." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"Aucune rubrique d'aide ne correspond à « %s ». Essayez « help help », « man -" +"k %s » ou « info %s »." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s : impossible d'ouvrir : %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -561,8 +597,10 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"Ces commandes de shell sont définies de manière interne. Saisissez « help » pour voir cette liste.\n" -"Tapez « help nom » pour en savoir plus sur la fonction qui s'appelle « nom ».\n" +"Ces commandes de shell sont définies de manière interne. Saisissez « help » " +"pour voir cette liste.\n" +"Tapez « help nom » pour en savoir plus sur la fonction qui s'appelle " +"« nom ».\n" "Utilisez « info bash » pour en savoir plus sur le shell en général.\n" "Utilisez « man -k » ou « info » pour en savoir plus sur les commandes qui\n" "ne font pas partie de cette liste.\n" @@ -570,21 +608,31 @@ msgstr "" "Une astérisque (*) à côté d'un nom signifie que la commande est désactivée.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "impossible d'utiliser plus d'une option parmi « -anrw »" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "position dans l'historique" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "nom de variable tableau vide" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s : paramètre vide ou non défini" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s : horodatage non valable" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s : l'expansion de l'historique a échoué" @@ -598,113 +646,114 @@ msgstr "%s : « inlib » a échoué" msgid "no other options allowed with `-x'" msgstr "pas d'autre option permise avec « -x »" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" -msgstr "%s : les arguments doivent être des identifiants de tâche ou de processus" +msgstr "" +"%s : les arguments doivent être des identifiants de tâche ou de processus" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Erreur inconnue" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "une expression est attendue" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s : n'est pas un tableau indexé" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s : spécification de descripteur de fichier non valable" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d : descripteur de fichier non valable : %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s : nombre de lignes non valable" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s : origine de tableau non valable" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s : quantum de callback non valable" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "nom de variable tableau vide" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "nécessité de prise en charge des variables tableaux" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "« %s » : caractère de format manquant" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "« %c » : spécification de format d'heure incorrecte" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "« %c » : caractère de format non permis" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "avertissement : %s: %s" +msgid "%s: %s" +msgstr "%s : %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "problème d'analyse du format : %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "chiffre hexadécimal manquant pour \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "chiffre unicode manquant pour \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "pas d'autre répertoire" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s : argument non valable" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<aucun répertoire courant>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "pile de répertoire vide" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "indice de pile de répertoire" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -719,14 +768,17 @@ 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 "" "Affiche la liste des répertoires actuellement mémorisés. Les répertoires\n" -" sont insérés dans la liste avec la commande « pushd ». Vous pouvez remonter\n" +" sont insérés dans la liste avec la commande « pushd ». Vous pouvez " +"remonter\n" " dans la liste en enlevant des éléments avec la commande « popd ».\n" " \n" " Options :\n" @@ -744,7 +796,7 @@ msgstr "" " -N\tAffiche le Nième élément en comptant de zéro depuis la droite de la\n" " liste affichée par « dirs » lorsque celle-ci est appelée sans option." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -779,17 +831,20 @@ msgstr "" " \n" " Arguments :\n" " +N\tPermute la pile de façon que le Nième répertoire se place en haut,\n" -" \ten comptant de zéro depuis la gauche de la liste fournie par « dirs ».\n" +" \ten comptant de zéro depuis la gauche de la liste fournie par " +"« dirs ».\n" " \n" " -N\tPermute la pile de façon que le Nième répertoire se place en haut,\n" -" \ten comptant de zéro depuis la droite de la liste fournie par « dirs ».\n" +" \ten comptant de zéro depuis la droite de la liste fournie par " +"« dirs ».\n" " \n" -" dir\tAjoute le répertoire DIR en haut de la pile, et en fait le nouveau\n" +" dir\tAjoute le répertoire DIR en haut de la pile, et en fait le " +"nouveau\n" " \trépertoire de travail.\n" " \n" " Vous pouvez voir la pile des répertoires avec la commande « dirs »." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -828,319 +883,341 @@ msgstr "" " \n" " Vous pouvez voir la pile des répertoires avec la commande « dirs »." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s : spécification de délai d'expiration non valable" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "erreur de lecture : %d : %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "« return » n'est possible que depuis une fonction ou depuis un script exécuté par « source »" +msgstr "" +"« return » n'est possible que depuis une fonction ou depuis un script " +"exécuté par « source »" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" -msgstr "« unset » ne peut pas s'appliquer simultanément à une fonction et à une variable" +msgstr "" +"« unset » ne peut pas s'appliquer simultanément à une fonction et à une " +"variable" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s : n'est pas une variable tableau" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s : n'est pas une fonction" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s : impossible d'exporter" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "nombre de « shift »" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" -msgstr "les options du shell ne peuvent pas être simultanément activées et désactivées" +msgstr "" +"les options du shell ne peuvent pas être simultanément activées et " +"désactivées" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s : nom d'option du shell non valable" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "nom de fichier nécessaire en argument" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s : fichier introuvable" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "suspension impossible" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "un shell de connexion ne peut pas être suspendu" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s est un alias vers « %s »\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s est un mot-clé du shell\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s est une fonction\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s est une primitive spéciale du shell\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s est une fonction\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s est une primitive du shell\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s est %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s est haché (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s : argument de limite non valable" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "« %c » : mauvaise commande" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s : impossible d'obtenir la limite : %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limite" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s : impossible de modifier la limite : %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "nombre octal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "« %c » : opérateur de mode symbolique non valable" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "« %c » : caractère de mode symbolique non valable" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " ligne " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "dernière commande : %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Annulation…" #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORM : " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "avertissement de DÉBOGAGE :" -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "erreur de commande inconnue" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "mauvais type de commande" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "mauvais connecteur" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "mauvais saut" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s : variable sans liaison" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aattente de données expirée : déconnexion automatique\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "l'entrée standard ne peut pas être redirigée depuis /dev/null : %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT : « %c » : caractère de format non valable" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] existe encore" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "erreur de tube" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" -msgstr "eval : dépassement de la profondeur maximum d'imbrication d'évaluations (%d)" +msgstr "" +"eval : dépassement de la profondeur maximum d'imbrication d'évaluations (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" -msgstr "%s : dépassement de la profondeur maximum d'imbrication de sources (%d)" +msgstr "" +"%s : dépassement de la profondeur maximum d'imbrication de sources (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" -msgstr "%s : dépassement de la profondeur maximum d'imbrication de fonctions (%d)" +msgstr "" +"%s : dépassement de la profondeur maximum d'imbrication de fonctions (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" -msgstr "%s : restriction : « / » ne peut pas être spécifié dans un nom de commande" +msgstr "" +"%s : restriction : « / » ne peut pas être spécifié dans un nom de commande" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s : commande introuvable" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s : %s" +msgid "%s: %s: bad interpreter" +msgstr "%s : %s : mauvais interpréteur" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s : ne peut exécuter : le fichier requis n'a pas été trouvé" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s : %s : mauvais interpréteur" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s : impossible d'exécuter le fichier binaire : %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "« %s » : est une primitive spéciale" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "impossible de dupliquer le fd %d vers le fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "dépassement du niveau de récursivité dans l'expression" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "débordement négatif de la pile de récursivité" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "erreur de syntaxe dans l'expression" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "tentative d'affectation à une non-variable" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "erreur de syntaxe dans l'affectation d'une variable" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "division par 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bogue : mauvais symbole pour expassign" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "« : » attendu pour une expression conditionnelle" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exposant négatif" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "identifiant attendu après un pré-incrément ou un pré-décrément" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "« ) » manquante" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "erreur de syntaxe : opérande attendu" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "erreur de syntaxe : opérateur arithmétique non valable" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s : %s (le symbole erroné est « %s »)" @@ -1157,7 +1234,7 @@ msgstr "constante entière invalide" msgid "value too great for base" msgstr "valeur trop grande pour la base" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s : erreur d'expression\n" @@ -1166,46 +1243,53 @@ msgstr "%s : erreur d'expression\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd : ne peut accéder aux répertoires parents" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "« %s » : est une primitive spéciale" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "impossible de réinitialiser le mode « nodelay » pour le fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "impossible d'allouer un nouveau descripteur de fichier pour l'entrée de bash depuis le fd %d" +msgstr "" +"impossible d'allouer un nouveau descripteur de fichier pour l'entrée de bash " +"depuis le fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input : le tampon existe déjà pour le nouveau fd %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline : pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "le processus cloné n°%d apparaît dans la tâche en fonctionnement %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "suppression de la tâche stoppée %d avec le groupe de processus %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process : pid %5ld (%s) signalé toujours en vie" @@ -1215,137 +1299,137 @@ msgstr "add_process : pid %5ld (%s) signalé toujours en vie" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid : %ld : n° de processus inexistant" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Fini" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Stoppé" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Stoppé(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "En cours d'exécution" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Fini(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Termine %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "État inconnu" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(core dumped)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd : %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "fils setpgid (%ld à %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait : le processus n°%ld n'est pas un fils de ce shell" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for : Aucun enregistrement du processus n°%ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job : la tâche %d est stoppée" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s : pas de tâche actuelle" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s : la tâche s'est terminée" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s : la tâche %d est déjà en arrière plan" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld : activation de WNOHANG pour éviter un blocage définitif" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s : ligne %d : " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (core dumped)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(maintenant, wd : %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control : getpgrp a échoué" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control : pas de contrôle de tâche en tâche de fond" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control : discipline de ligne" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control : setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "impossible de régler le groupe de processus du terminal (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "pas de contrôle de tâche dans ce shell" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc : échec de l'assertion : %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1354,376 +1438,402 @@ msgstr "" "\r\n" "malloc : %s:%d : assertion manquée\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "inconnu" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc : bloc écrasé sur liste libre" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free : appelé avec un bloc déjà libéré comme argument" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free : appelé avec un bloc non alloué comme argument" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free : débordement négatif détecté ; « mh_nbytes » est hors plage" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free : débordement négatif détecté ; « magic8 » est hors plage" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free : les tailles de fragment au début et à la fin sont différentes" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc : appelé avec un bloc non alloué comme argument" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc : débordement négatif détecté ; « mh_nbytes » est hors plage" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc : débordement négatif détecté ; « magic8 » est hors plage" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" -msgstr "realloc : les tailles de fragment au début et à la fin sont différentes" +msgstr "" +"realloc : les tailles de fragment au début et à la fin sont différentes" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc : la table d'allocation est pleine avec FIND_ALLOC ?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc : %p déjà alloué selon la table ?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free : %p déjà libre selon la table ?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "base non valable" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s : hôte inconnu" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: service non valable" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s : mauvaise spécification de chemin réseau" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "opérations sur le réseau non prises en charge" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale : LC_ALL : impossible de changer le paramètre de langue (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" -msgstr "setlocale : LC_ALL : impossible de changer le paramètre de langue (%s) : %s" +msgstr "" +"setlocale : LC_ALL : impossible de changer le paramètre de langue (%s) : %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale : %s : impossible de changer le paramètre de langue (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" -msgstr "setlocale : %s : impossible de changer le paramètre de langue (%s) : %s" +msgstr "" +"setlocale : %s : impossible de changer le paramètre de langue (%s) : %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Vous avez du courrier dans $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Vous avez du nouveau courrier dans $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Le courrier dans %s a été lu\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "erreur de syntaxe : expression arithmétique nécessaire" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "erreur de syntaxe : « ; » non attendu" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "erreur de syntaxe : « ((%s)) »" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document : le type d'instruction %d est incorrect" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "« here-document » à la ligne %d délimité par la fin du fichier (au lieu de « %s »)" +msgstr "" +"« here-document » à la ligne %d délimité par la fin du fichier (au lieu de " +"« %s »)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection : l'instruction de redirection « %d » est hors plage" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) dépasse SIZE_MAX (%lu): ligne tronquée" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) dépasse SIZE_MAX (%lu): ligne " +"tronquée" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "erreur d'écriture : %s" -#: parse.y:2921 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "nombre maximum de documents en ligne (« here-document ») dépassé" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" -msgstr "fin de fichier (EOF) prématurée lors de la recherche du « %c » correspondant" +msgstr "" +"fin de fichier (EOF) prématurée lors de la recherche du « %c » correspondant" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "fin de fichier (EOF) prématurée lors de la recherche de « ]] »" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" -msgstr "erreur de syntaxe dans une expression conditionnelle : symbole « %s » inattendu" +msgstr "" +"erreur de syntaxe dans une expression conditionnelle : symbole « %s » " +"inattendu" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "erreur de syntaxe dans une expression conditionnelle" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "symbole inattendu « %s » au lieu de « ) »" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "« ) » attendu" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "argument inattendu « %s » pour l'opérateur conditionnel à un argument" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "argument inattendu pour l'opérateur conditionnel à un argument" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "symbole « %s » trouvé à la place d'un opérateur binaire conditionnel" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "opérateur binaire conditionnel attendu" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "argument « %s » inattendu pour l'opérateur binaire conditionnel" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "argument inattendu pour l'opérateur binaire conditionnel" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "symbole « %c » inattendu dans la commande conditionnelle" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "symbole « %s » inattendu dans la commande conditionnelle" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "symbole « %d » inattendu dans la commande conditionnelle" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "erreur de syntaxe près du symbole inattendu « %s »" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "erreur de syntaxe près de « %s »" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "erreur de syntaxe : fin de fichier prématurée" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "erreur de syntaxe : fin de fichier prématurée" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "erreur de syntaxe" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Utilisez « %s » pour quitter le shell.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" -msgstr "fin de fichier (EOF) prématurée lors de la recherche d'une « ) » correspondante" +msgstr "" +"fin de fichier (EOF) prématurée lors de la recherche d'une « ) » " +"correspondante" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "complètement : fonction « %s » non trouvée" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: boucle de ré-essai possible" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert : %s : NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command : mauvais connecteur « %d »" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set : %d : descripteur de fichier non valable" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set : pointeur de fichier NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf : « %c » : caractère de format invalide" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "descripteur de fichier hors plage" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s : redirection ambiguë" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s : impossible d'écraser le fichier existant" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s : restreint : impossible de rediriger la sortie" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" -msgstr "impossible de créer un fichier temporaire pour le « here-document » : %s" +msgstr "" +"impossible de créer un fichier temporaire pour le « here-document » : %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s : impossible d'affecter le descripteur de fichier à la variable" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port non pris en charge sans réseau" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" -msgstr "erreur de redirection : impossible de dupliquer le descripteur de fichier" +msgstr "" +"erreur de redirection : impossible de dupliquer le descripteur de fichier" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "« /tmp » introuvable, veuillez le créer !" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "« /tmp » doit être un nom de répertoire valable" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "le mode d'affichage amélioré est ignoré dans les shells interactifs" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c : option non valable" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "impossible de changer le uid en %d : uid effectif %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "impossible de changer le gid en %d: gid effectif %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "impossible de démarrer le débogueur: mode déboguage désactivé" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s : Ceci est un répertoire" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Je n'ai pas de nom !" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, version %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1732,49 +1842,54 @@ msgstr "" "Utilisation :\t%s [option longue GNU] [option] ...\n" "\t%s [option longue GNU] [option] fichier-script ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Options longues GNU :\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Options du shell :\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD ou -c commande ou -O shopt_option\t\t(invocation seulement)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s ou -o option\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Pour en savoir plus sur les options du shell, saisissez « %s -c \"help set\" ».\n" +msgstr "" +"Pour en savoir plus sur les options du shell, saisissez « %s -c \"help " +"set\" ».\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "Pour en savoir plus sur les primitives du shell, saisissez « %s -c help ».\n" +msgstr "" +"Pour en savoir plus sur les primitives du shell, saisissez « %s -c help ».\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Utilisez la commande « bashbug » pour faire un rapport de bogue.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "page d'accueil de bash : <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "Aide générale sur l'utilisation de logiciels GNU : <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Aide générale sur l'utilisation de logiciels GNU : <http://www.gnu.org/" +"gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask : %d : opération non valable" @@ -1944,282 +2059,319 @@ msgstr "Demande d'information" msgid "Unknown Signal #%d" msgstr "Signal n°%d inconnu" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "Mauvaise substitution : pas de « %s » de fermeture dans %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s : impossible d'affecter une liste à un élément de tableau" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "impossible de fabriquer un tube pour une substitution de processus" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "impossible de fabriquer un fils pour une substitution de processus" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "impossible d'ouvrir le tube nommé « %s » en lecture" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "impossible d'ouvrir le tube nommé « %s » en écriture" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "impossible de dupliquer le tube nommé « %s » vers le fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "substitution de commande: octet nul ignoré en entrée" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute : impossible de dupliquer le tube vers le fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "impossible de fabriquer un tube pour une substitution de commande" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" -msgstr "impossible de fabriquer un processus fils pour une substitution de commande" +msgstr "" +"impossible de fabriquer un processus fils pour une substitution de commande" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute : impossible de dupliquer le tube vers le fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s : nom de variable invalide pour une référence de nom" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s : expansion indirecte invalide" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: nom de variable invalide" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s : paramètre non défini" +msgid "%s: bad substitution" +msgstr "%s : mauvaise substitution" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s : paramètre vide ou non défini" +msgid "%s: parameter not set" +msgstr "%s : paramètre non défini" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s : expression de sous-chaîne négative" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s : mauvaise substitution" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s : affectation impossible de cette façon" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "les versions futures du shell forceront l'évaluation comme une substitution arithmétique" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"les versions futures du shell forceront l'évaluation comme une substitution " +"arithmétique" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "mauvais remplacement : pas de « ` » de fermeture dans %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "pas de correspondance : %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argument attendu" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s : nombre entier attendu comme expression" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "« ) » attendue" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "« ) » attendue au lieu de %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s : opérateur binaire attendu" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s : opérateur unaire attendu" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "« ] » manquant" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "erreur de syntaxe : « %s » non attendu" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "numéro de signal non valable" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "gestionnaire trap : dépassement de la profondeur maximum du gestionnaire « trap » (%d)" +msgstr "" +"gestionnaire trap : dépassement de la profondeur maximum du gestionnaire " +"« trap » (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps : mauvaise valeur dans trap_list[%d] : %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps : le gestionnaire de signal est SIG_DFL, renvoi de %d (%s) à moi-même" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps : le gestionnaire de signal est SIG_DFL, renvoi de %d (%s) " +"à moi-même" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler : mauvais signal %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "erreur lors de l'importation de la définition de fonction pour « %s »" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "niveau de shell trop élevé (%d), initialisation à 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "nombre maximum de documents en ligne (« here-document ») dépassé" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" -msgstr "make_local_variable : aucun contexte de fonction dans le champ d'application actuel" +msgstr "" +"make_local_variable : aucun contexte de fonction dans le champ d'application " +"actuel" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s : la variable ne peut se voir assigner une valeur" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s : impossible d'hériter de la valeur d'un type incompatible" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s : assigne un entier à la référence de nom" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" -msgstr "all_local_variables : aucun contexte de fonction dans le champ d'application actuel" +msgstr "" +"all_local_variables : aucun contexte de fonction dans le champ d'application " +"actuel" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s a un « exportstr » nul" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "caractère %d non valable dans « exportstr » pour %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "pas de « = » dans « exportstr » pour %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "pop_var_context : le début de « shell_variables » n'est pas un contexte de fonction" +msgstr "" +"pop_var_context : le début de « shell_variables » n'est pas un contexte de " +"fonction" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context : aucun contexte à « global_variables »" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope : le début de « shell_variables » n'est pas un champ d'application temporaire d'environnement" +msgstr "" +"pop_scope : le début de « shell_variables » n'est pas un champ d'application " +"temporaire d'environnement" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s : %s : impossible d'ouvrir comme FILE" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s : %s : valeur non valable pour un descripteur de fichier de trace" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s : %s : valeur de compatibilité hors plage" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/" +"gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, version %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "Ceci est un logiciel libre ; vous être libre de le modifier et de le redistribuer." +msgstr "" +"Ceci est un logiciel libre ; vous être libre de le modifier et de le " +"redistribuer." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "AUCUNE GARANTIE n'est fournie, dans les limites permises par la loi." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s : impossible d'allouer %lu octets (%lu octets alloués)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s : impossible d'allouer %lu octets" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s : %s:%d : impossible d'allouer %lu octets (%lu octets alloués)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s : %s:%d : impossible d'allouer %lu octets" @@ -2233,8 +2385,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] nom [nom ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpvsPSVX] [-m keymap] [-f nomfichier] [-q nom] [-u nom] [-r seqtouche] [-x seqtouche:commande-shell] [seqtouche:fonction-readline ou commande-readline]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpvsPSVX] [-m keymap] [-f nomfichier] [-q nom] [-u nom] [-r " +"seqtouche] [-x seqtouche:commande-shell] [seqtouche:fonction-readline ou " +"commande-readline]" #: builtins.c:56 msgid "break [n]" @@ -2253,7 +2410,8 @@ msgid "caller [expr]" msgstr "caller [expr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [rép]" #: builtins.c:68 @@ -2265,12 +2423,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] commande [arg ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [nom[=valeur] ...] ou declare -p [-aAfFilnrtux] [nom ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [nom[=valeur] ...] ou declare -p [-aAfFilnrtux] " +"[nom ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] nom[=valeur] ... ou typeset -p [-aAfFilnrtux] [nom ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] nom[=valeur] ... ou typeset -p [-aAfFilnrtux] " +"[nom ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2310,7 +2476,8 @@ msgstr "logout [n]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "fc [-e ename] [-lnr] [premier] [dernier] ou fc -s [motif=nouveau] [commande]" +msgstr "" +"fc [-e ename] [-lnr] [premier] [dernier] ou fc -s [motif=nouveau] [commande]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2329,8 +2496,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [motif ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d décalage] [n] ou history -anrw [nomfichier] ou history -ps arg [arg...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d décalage] [n] ou history -anrw [nomfichier] ou history -ps " +"arg [arg...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2341,16 +2512,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [jobspec ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... ou kill -l [sigspec]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... ou kill -l " +"[sigspec]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a tableau] [-d delim] [-i texte] [-n ncars] [-N ncars] [-p prompt] [-t timeout] [-u fd] [nom ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a tableau] [-d delim] [-i texte] [-n ncars] [-N ncars] [-p " +"prompt] [-t timeout] [-u fd] [nom ...]" #: builtins.c:140 msgid "return [n]" @@ -2397,7 +2577,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] signal_spec ...]" #: builtins.c:168 @@ -2421,106 +2602,135 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NOM [in MOTS ... ] ; do COMMANDES; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do COMMANDES; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NOM [in MOTS ... ;] do COMMANDES; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case MOT in [MOTIF [| MOTIF]...) COMMANDES ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else " +"COMMANDES; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while COMMANDES; do COMMANDES-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until COMMANDES; do COMMANDES-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NOM] commande [redirections]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function nom { COMMANDES ; } ou nom () { COMMANDES ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ COMMANDES ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expression ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expression ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Noms et significations de certaines variables du shell" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | rép]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [nom_opt ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [arguments]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G motif_glob] [-W liste_mots] [-F fonction] [-C commande] [-X motif_filtre] [-P prefixe] [-S suffixe] [nom ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G " +"motif_glob] [-W liste_mots] [-F fonction] [-C commande] [-X motif_filtre] [-" +"P prefixe] [-S suffixe] [nom ...]" -#: builtins.c:235 -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 option] [-A action] [-G motif_glob] [-W liste_mots] [-F fonction] [-C commande] [-X motif_filtre] [-P prefixe] [-S suffixe] [mot]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o option] [-A action] [-G motif_glob] [-W " +"liste_mots] [-F fonction] [-C commande] [-X motif_filtre] [-P prefixe] [-S " +"suffixe] [mot]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o option] [-DEI] [nom ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d délim] [-n nombre] [-O origine] [-s nombre] [-t] [-u fd] [-C callback] [-c quantum] [tableau]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d delim] [-n nombre] [-O origine] [-s nombre] [-t] [-u fd] [-C callback] [-c quantum] [tableau]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d délim] [-n nombre] [-O origine] [-s nombre] [-t] [-u fd] [-C " +"callback] [-c quantum] [tableau]" -#: builtins.c:256 +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d delim] [-n nombre] [-O origine] [-s nombre] [-t] [-u fd] [-C " +"callback] [-c quantum] [tableau]" + +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2535,26 +2745,31 @@ 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 "" "Définit ou affiche des alias.\n" " \n" -" Sans argument, « alias » affiche la liste des alias dans le format réutilisable\n" +" Sans argument, « alias » affiche la liste des alias dans le format " +"réutilisable\n" " « alias NOM=VALEUR » sur la sortie standard.\n" " \n" " Sinon, un alias est défini pour chaque NOM dont la VALEUR est donnée.\n" -" Une espace à la fin de la VALEUR entraîne la vérification du mot suivant pour\n" -" déterminer si un alias doit être remplacé lorsque l'alias est développé.\n" +" Une espace à la fin de la VALEUR entraîne la vérification du mot suivant " +"pour\n" +" déterminer si un alias doit être remplacé lorsque l'alias est " +"développé.\n" " \n" " Options :\n" " -p\tAffiche tous les alias actuels dans un format réutilisable\n" " \n" " Code de sortie :\n" -" « alias » renvoie la valeur vraie à moins que NOM ne soit fourni et que celui-ci n'aie\n" +" « alias » renvoie la valeur vraie à moins que NOM ne soit fourni et que " +"celui-ci n'aie\n" " pas d'alias." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2570,7 +2785,7 @@ msgstr "" " \n" " Renvoie le code de succès à moins que NOM ne soit pas un alias existant." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2582,25 +2797,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2608,41 +2828,58 @@ msgid "" msgstr "" "Définit les associations de touches et les variables de « Readline ».\n" " \n" -" Associe une séquence de touches à une fonction « Readline » ou une macro, ou définit une\n" -" variable « Readline ». La syntaxe des arguments non-options est équivalente à celle\n" -" du fichier ~/.inputrc, mais doivent être transmis comme arguments uniques :\n" +" Associe une séquence de touches à une fonction « Readline » ou une " +"macro, ou définit une\n" +" variable « Readline ». La syntaxe des arguments non-options est " +"équivalente à celle\n" +" du fichier ~/.inputrc, mais doivent être transmis comme arguments " +"uniques :\n" " ex : bind '\"\\C-x\\C-r\" : re-read-init-file'.\n" " \n" " Options :\n" " -m keymap Utilise KEYMAP comme mappage clavier pendant la\n" -" durée de cette commande. Des noms de mappage valables\n" -" sont « emacs », « emacs-standard », « emacs-meta », \n" -" « emacs-ctlx », « vi », « vi-move », « vi-command » et\n" +" durée de cette commande. Des noms de mappage " +"valables\n" +" sont « emacs », « emacs-standard », « emacs-" +"meta », \n" +" « emacs-ctlx », « vi », « vi-move », « vi-command » " +"et\n" " « vi-insert ».\n" " -l Affiche les noms de fonctions.\n" " -P Affiche les noms et associations des fonctions.\n" -" -p Affiche les fonctions et associations dans une forme qui\n" +" -p Affiche les fonctions et associations dans une " +"forme qui\n" " peut être réutilisée comme entrée.\n" -" -S Affiche les séquences de touches qui invoquent des macros,\n" +" -S Affiche les séquences de touches qui invoquent des " +"macros,\n" " et leurs valeurs.\n" -" -s Affiche les séquences de touches qui invoquent des macros,\n" -" et leurs valeurs sous une forme qui peut être utilisée comme entrée.\n" +" -s Affiche les séquences de touches qui invoquent des " +"macros,\n" +" et leurs valeurs sous une forme qui peut être " +"utilisée comme entrée.\n" " -V Affiche les noms et valeurs des variables\n" -" -v Affiche les noms et valeurs des variables dans une forme qui peut\n" +" -v Affiche les noms et valeurs des variables dans une " +"forme qui peut\n" " être réutilisée comme entrée.\n" -" -q nom-fonction Permet de savoir quelles touches appellent la fonction.\n" -" -u nom-fonction Enlève toutes les associations de touches liée à la fonction.\n" +" -q nom-fonction Permet de savoir quelles touches appellent la " +"fonction.\n" +" -u nom-fonction Enlève toutes les associations de touches liée à la " +"fonction.\n" " -r seqtouche Enlève l'association pour « seqtouche ».\n" " -f nomfichier Lit l'association de touches depuis NOMFICHIER.\n" -" -x seqtouche:commande-shell\tEntraîne l'exécution de la commande-shell\n" +" -x seqtouche:commande-shell\tEntraîne l'exécution de la commande-" +"shell\n" " \t\t\t\tlorsque « seqtouche » est entrée.\n" -" -X Liste les séquences de touches liées à -x et les commandes associées\n" -" sous une forme qui peut être réutilisée comme entrée.\n" +" -X Liste les séquences de touches liées à -x et les " +"commandes associées\n" +" sous une forme qui peut être réutilisée comme " +"entrée.\n" " \n" " Code de sortie :\n" -" « bind » renvoie 0 à moins qu'une option non reconnue ne soit donnée ou qu'une erreur survienne." +" « bind » renvoie 0 à moins qu'une option non reconnue ne soit donnée ou " +"qu'une erreur survienne." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2654,13 +2891,14 @@ msgid "" msgstr "" "Sort des boucles for, while, ou until.\n" " \n" -" Sort d'une boucle FOR, WHILE ou UNTIL. Si N est spécifié, sort de N boucles\n" +" Sort d'une boucle FOR, WHILE ou UNTIL. Si N est spécifié, sort de N " +"boucles\n" " imbriquées.\n" " \n" " Code de retour :\n" " Le code de retour est 0 à moins que N ne soit pas supérieur ou égal à 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2672,19 +2910,21 @@ msgid "" msgstr "" "Reprend l'exécution des boucles for, while ou until.\n" " \n" -" Reprend l'itération suivante de la boucle FOR, WHILE ou UNTIL de niveau supérieur.\n" +" Reprend l'itération suivante de la boucle FOR, WHILE ou UNTIL de niveau " +"supérieur.\n" " Si N est précisé, reprend à la N-ième boucle supérieure.\n" " \n" " Code de sortie :\n" " Le code de sortie est 0 à moins que N ne soit pas supérieur ou égale à 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2692,16 +2932,20 @@ msgid "" msgstr "" "Exécute des commandes shell intégrées.\n" " \n" -" Exécute SHELL-BUILTIN avec les arguments ARGs sans effectuer de recherche\n" -" de commande. Ceci est utile lorsque vous souhaitez remplacer une commande\n" -" intégrée par une fonction shell, mais nécessite d'exécuter la commande intégrée\n" +" Exécute SHELL-BUILTIN avec les arguments ARGs sans effectuer de " +"recherche\n" +" de commande. Ceci est utile lorsque vous souhaitez remplacer une " +"commande\n" +" intégrée par une fonction shell, mais nécessite d'exécuter la commande " +"intégrée\n" " dans la fonction.\n" " \n" " Code de retour :\n" -" Renvoie le code de retour de SHELL-BUILTIN, ou false si SHELL-BUILTIN n'est\n" +" Renvoie le code de retour de SHELL-BUILTIN, ou false si SHELL-BUILTIN " +"n'est\n" " pas une commande intégrée." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2719,30 +2963,40 @@ msgstr "" "Renvoie le contexte de l'appel de sous-routine actuel.\n" " \n" " Sans EXPR, renvoie « $ligne $nomfichier ». Avec EXPR,\n" -" renvoie « $ligne $sousroutine $nomfichier »; ces informations supplémentaires\n" +" renvoie « $ligne $sousroutine $nomfichier »; ces informations " +"supplémentaires\n" " peuvent être utilisées pour fournir une trace de la pile.\n" " \n" -" La valeur de EXPR indique le nombre de cadres d'appels duquel il faut revenir en arrière\n" +" La valeur de EXPR indique le nombre de cadres d'appels duquel il faut " +"revenir en arrière\n" " avant le cadre actuel ; le cadre supérieur est le cadre 0.\n" " \n" " Code de sortie :\n" -" Renvoie 0 à moins que le shell ne soit pas en train d'exécuter une fonction ou que EXPR\n" +" Renvoie 0 à moins que le shell ne soit pas en train d'exécuter une " +"fonction ou que EXPR\n" " ne soit pas valable." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2758,11 +3012,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Change le répertoire de travail du shell.\n" @@ -2770,35 +3026,49 @@ msgstr "" " Change le répertoire actuel vers DIR. Le répertoire DIR par défaut\n" " est donné par la variable « HOME » du shell.\n" " \n" -" La variable CDPATH définit le chemin de recherche du répertoire contenant\n" -" DIR. Les noms de répertoires alternatifs dans CDPATH sont séparés par un deux-point « : ».\n" -" Un nom de répertoire vide est identique au répertoire actuel. Si DIR commence\n" +" La variable CDPATH définit le chemin de recherche du répertoire " +"contenant\n" +" DIR. Les noms de répertoires alternatifs dans CDPATH sont séparés par un " +"deux-point « : ».\n" +" Un nom de répertoire vide est identique au répertoire actuel. Si DIR " +"commence\n" " avec une barre oblique « / », alors CDPATH n'est pas utilisé.\n" " \n" -" Si le répertoire n'est pas trouvé et que l'option « cdable_vars » du shell est définie,\n" -" alors le mot est supposé être un nom de variable. Si la variable possède une valeur,\n" +" Si le répertoire n'est pas trouvé et que l'option « cdable_vars » du " +"shell est définie,\n" +" alors le mot est supposé être un nom de variable. Si la variable possède " +"une valeur,\n" " alors cette valeur est utilisée pour DIR.\n" " \n" " Options :\n" -" -L\tforce le suivi des liens symboliques : résout les liens symboliques dans\n" +" -L\tforce le suivi des liens symboliques : résout les liens " +"symboliques dans\n" " \t\tDIR après le traitement des instances de « .. »\n" -" -P\tutilise la structure physique des répertoires sans suivre les liens\n" -" \t\tsymboliques : résout les liens symboliques dans DIR avant le traitement des\n" +" -P\tutilise la structure physique des répertoires sans suivre les " +"liens\n" +" \t\tsymboliques : résout les liens symboliques dans DIR avant le " +"traitement des\n" " \t\tinstances de « .. »\n" -" -e\tsi l'option -P est fournie et que le répertoire de travail actuel ne peut pas\n" -" \t\têtre déterminé avec succès, alors sort avec un code de retour non nul\n" -" -@ sur les systèmes qui le supporte, présente un fichier avec des attributs\n" +" -e\tsi l'option -P est fournie et que le répertoire de travail actuel " +"ne peut pas\n" +" \t\têtre déterminé avec succès, alors sort avec un code de retour non " +"nul\n" +" -@ sur les systèmes qui le supporte, présente un fichier avec des " +"attributs\n" " \t\tétendus comme un répertoire contenant les attributs du fichier\n" " \n" -" Le comportement par défaut est de suivre les liens symboliques, comme si « -L » était précisé.\n" -" « .. » est traité en retirant le composant immédiatement avant dans le chemin jusqu'à\n" +" Le comportement par défaut est de suivre les liens symboliques, comme si " +"« -L » était précisé.\n" +" « .. » est traité en retirant le composant immédiatement avant dans le " +"chemin jusqu'à\n" " la barre oblique ou le début de DIR.\n" " \n" " Code de sortie :\n" -" Renvoie 0 si le répertoire est changé et si $PWD est correctement défini\n" +" Renvoie 0 si le répertoire est changé et si $PWD est correctement " +"défini\n" " quand -P est utilisé ; sinon autre chose que 0." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2826,7 +3096,7 @@ msgstr "" " Renvoie 0 à moins qu'une option non valable ne soit donnée ou que le\n" " répertoire courant ne peut pas être lu." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2842,7 +3112,7 @@ msgstr "" " Code de retour :\n" " Renvoie toujours le code de succès." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2854,7 +3124,7 @@ msgstr "" " Code de retour :\n" " Succès." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2866,12 +3136,13 @@ msgstr "" " Code de sortie :\n" " Toujours l'échec." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2885,22 +3156,28 @@ msgid "" msgstr "" "Exécute une simple commande ou affiche des informations sur les commandes.\n" " \n" -" Lance la COMMANDE avec des ARGS en court-circuitant la recherche de commande,\n" -" ou affiche des informations sur les COMMANDEs spécifiées. Ceci peut être\n" +" Lance la COMMANDE avec des ARGS en court-circuitant la recherche de " +"commande,\n" +" ou affiche des informations sur les COMMANDEs spécifiées. Ceci peut " +"être\n" " utilisé pour invoquer des commandes sur le disque lorsqu'il y a conflit\n" " avec une fonction portant le même nom.\n" " \n" " Options :\n" -" -p utilise une valeur par défaut pour CHEMIN qui garantit de trouver\n" +" -p utilise une valeur par défaut pour CHEMIN qui garantit de " +"trouver\n" " tous les utilitaires standards\n" -" -v affiche une description de la COMMANDE similaire à la commande intégrée\n" +" -v affiche une description de la COMMANDE similaire à la commande " +"intégrée\n" " « type »\n" " -V affiche une description plus détaillée de chaque COMMANDE\n" " \n" " Code de retour :\n" -" Renvoie le code de sortie de la COMMANDE, ou le code d'échec si la COMMANDE est introuvable." +" Renvoie le code de sortie de la COMMANDE, ou le code d'échec si la " +"COMMANDE est introuvable." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2928,12 +3205,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2942,15 +3221,20 @@ msgid "" msgstr "" "Définit les valeurs et les attributs des variables.\n" " \n" -" Déclare des variables et leur assigne des attributs. Si aucun NOM n'est donné,\n" +" Déclare des variables et leur assigne des attributs. Si aucun NOM n'est " +"donné,\n" " affiche les attributs et les valeurs de toutes les variables.\n" " \n" " Options :\n" -" -f\trestreint l'action ou l'affichage aux noms et définitions de fonctions\n" -" -F\trestreint l'affichage aux noms des fonctions uniquement (avec le numéro de ligne\n" +" -f\trestreint l'action ou l'affichage aux noms et définitions de " +"fonctions\n" +" -F\trestreint l'affichage aux noms des fonctions uniquement (avec le " +"numéro de ligne\n" " \t\tet le fichier source lors du débogage)\n" -" -g\tcrée des variables globales lorsqu'utilisée dans une fonction shell ; ignoré sinon\n" -" -I\tlors de la création d'une variable, hérite des attributs et valeur d'une variable\n" +" -g\tcrée des variables globales lorsqu'utilisée dans une fonction " +"shell ; ignoré sinon\n" +" -I\tlors de la création d'une variable, hérite des attributs et valeur " +"d'une variable\n" " \t\tportant le même nom dans une portée précédente\n" " -p\taffiche les attributs et la valeur de chaque NOM\n" " \n" @@ -2958,8 +3242,10 @@ msgstr "" " -a\tpour faire de NOMs des tableaux indexés (si pris en charge)\n" " -A\tpour faire de NOMs des tableaux associatifs (si pris en charge)\n" " -i\tpour assigner l'attribut « integer » aux NOMs\n" -" -l\tpour convertir la valeur de chaque NOM en minuscules lors de l'affectation\n" -" -n\ttransforme NOM en une référence vers une variable nommée d'après sa valeur\n" +" -l\tpour convertir la valeur de chaque NOM en minuscules lors de " +"l'affectation\n" +" -n\ttransforme NOM en une référence vers une variable nommée d'après " +"sa valeur\n" " -r\tpour mettre les NOMs en lecture seule\n" " -t\tpour permettre aux NOMs d'avoir l'attribut « trace »\n" " -u\tpour convertir les NOMs en majuscules lors de l'affectation\n" @@ -2967,17 +3253,22 @@ msgstr "" " \n" " Utiliser « + » au lieu de « - » pour désactiver l'attribut.\n" " \n" -" Les variables avec l'attribut « integer » ont une évaluation arithmétique (voir\n" -" la commande « let ») effectuée lorsqu'une valeur est affectée à la variable.\n" +" Les variables avec l'attribut « integer » ont une évaluation " +"arithmétique (voir\n" +" la commande « let ») effectuée lorsqu'une valeur est affectée à la " +"variable.\n" " \n" -" Lorsqu'utilisée dans une fonction, « declare » permet aux NOMs d'être locaux,\n" -" comme avec la commande « local ». L'option « -g » supprime ce comportement.\n" +" Lorsqu'utilisée dans une fonction, « declare » permet aux NOMs d'être " +"locaux,\n" +" comme avec la commande « local ». L'option « -g » supprime ce " +"comportement.\n" " \n" " Code de retour :\n" -" Renvoie le code de succès à moins qu'une option non valable soit fournie ou qu'une\n" +" Renvoie le code de succès à moins qu'une option non valable soit fournie " +"ou qu'une\n" " erreur survienne lors de l'assignation d'une variable." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2987,7 +3278,7 @@ msgstr "" " \n" " Un synonyme de « déclare ». Consultez « help declare »." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3003,23 +3294,29 @@ msgid "" msgstr "" "Définit des variables locales.\n" " \n" -" Crée une variable locale nommée NOM, avec une valeur VALEUR. OPTION peut\n" +" Crée une variable locale nommée NOM, avec une valeur VALEUR. OPTION " +"peut\n" " être n'importe quelle option acceptée par « declare ».\n" " \n" -" Les variables locales peuvent seulement être utilisées à l'intérieur d'une\n" -" fonction; elles ne sont visibles que dans les fonctions où elles ont été\n" +" Les variables locales peuvent seulement être utilisées à l'intérieur " +"d'une\n" +" fonction; elles ne sont visibles que dans les fonctions où elles ont " +"été\n" " définies et dans leurs fonctions filles.\n" " \n" " Code de retour :\n" -" Renvoie le code de succès à moins qu'une option non valable ne soit fournie,\n" -" qu'une erreur survienne lors de l'assignation d'une variable, ou que le shell\n" +" Renvoie le code de succès à moins qu'une option non valable ne soit " +"fournie,\n" +" qu'une erreur survienne lors de l'assignation d'une variable, ou que le " +"shell\n" " n'exécute pas une fonction." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3043,9 +3340,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3053,15 +3352,19 @@ msgid "" msgstr "" "Écrit les arguments sur la sortie standard.\n" " \n" -" Affiche les ARGs, séparés par une espace, sur la sortie standard, suivis\n" +" Affiche les ARGs, séparés par une espace, sur la sortie standard, " +"suivis\n" " d'un retour à la ligne.\n" " \n" " Options :\n" " -n\tn'ajoute pas de saut de ligne\n" -" -e\tactive l'interprétation des barres contre-obliques d'échappement ci-dessous\n" -" -E\tsupprime explicitement l'interprétation des barres contre-obliques d'échappement\n" +" -e\tactive l'interprétation des barres contre-obliques d'échappement " +"ci-dessous\n" +" -E\tsupprime explicitement l'interprétation des barres contre-obliques " +"d'échappement\n" " \n" -" « echo » interprète les caractères suivants comme des séquences d'échappement :\n" +" « echo » interprète les caractères suivants comme des séquences " +"d'échappement :\n" " \\a\talerte (cloche)\n" " \\b\tretour arrière\n" " \\c\tsupprime la suite de la sortie\n" @@ -3073,18 +3376,21 @@ msgstr "" " \\t\ttabulation horizontale\n" " \\v\ttabulation verticale\n" " \\\\\tbarre contre-oblique\n" -" \\0nnn\tle caractère dont le code ASCII est NNN (en octal). NNN peut être\n" +" \\0nnn\tle caractère dont le code ASCII est NNN (en octal). NNN peut " +"être\n" " \t\tlong de 0 à 3 chiffres octaux\n" -" \\xHH\tle caractère sur 8 bits dont la valeur est HH (hexadécimal). HH\n" +" \\xHH\tle caractère sur 8 bits dont la valeur est HH (hexadécimal). " +"HH\n" " \t\tpeut être composé de 1 ou 2 chiffres hexadécimaux\n" " \t\tHHHH peut être composé de un à quatre chiffres hexadécimaux.\n" -" \\UHHHHHHHH le caractère Unicode dont la valeur est la valeur hexadécimale\n" +" \\UHHHHHHHH le caractère Unicode dont la valeur est la valeur " +"hexadécimale\n" " \t\tHHHHHHHH. HHHHHHHH peut avoir un à huit chiffres hexadécimaux.\n" " \n" " Code de sortie :\n" " Renvoie le code de succès à moins qu'une erreur d'écriture survienne." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3106,7 +3412,8 @@ msgstr "" " Code de sortie :\n" " Renvoie le code de succès à moins qu'une erreur d'écriture survienne." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3126,6 +3433,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3134,33 +3447,42 @@ msgid "" msgstr "" "Active et désactive les commandes intégrées.\n" " \n" -" Active et désactive les commandes intégrées du shell. Les désactiver vous permet\n" -" d'exécuter une commande du disque ayant le même nom qu'une commande du shell\n" +" Active et désactive les commandes intégrées du shell. Les désactiver " +"vous permet\n" +" d'exécuter une commande du disque ayant le même nom qu'une commande du " +"shell\n" " sans utiliser le chemin complet vers le fichier.\n" " \n" " Options :\n" -" -a\taffiche la liste des commandes intégrées et leur état d'activation\n" -" -n\tdésactive chaque NOM ou affiche la liste des commandes désactivées\n" +" -a\taffiche la liste des commandes intégrées et leur état " +"d'activation\n" +" -n\tdésactive chaque NOM ou affiche la liste des commandes " +"désactivées\n" " -p\taffiche la liste des commandes dans un format réutilisable\n" -" -s\taffiche seulement les noms des commandes Posix de type « special »\n" +" -s\taffiche seulement les noms des commandes Posix de type " +"« special »\n" " \n" " Options contrôlant le chargement dynamique :\n" -" -f\tCharge la commande intégrée NOM depuis la bibliothèque partagée FILENAME\n" +" -f\tCharge la commande intégrée NOM depuis la bibliothèque partagée " +"FILENAME\n" " -d\tDécharge une commande chargée avec « -f »\n" " \n" " S'il n'y a pas d'option, chaque commande NOM est activée.\n" " \n" -" Pour utiliser le « test » trouvé dans $PATH au lieu de celui intégré au shell,\n" +" Pour utiliser le « test » trouvé dans $PATH au lieu de celui intégré au " +"shell,\n" " saisissez « enable -n test ».\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins que NOM ne soit pas une commande intégrée ou qu'une erreur ne survienne." +" Renvoie le code de succès à moins que NOM ne soit pas une commande " +"intégrée ou qu'une erreur ne survienne." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3168,13 +3490,15 @@ msgid "" msgstr "" "Exécute des arguments comme s'ils étaient une commande du shell.\n" " \n" -" Combine des ARGs en une chaîne unique, utilise le résultat comme entrée du shell,\n" +" Combine des ARGs en une chaîne unique, utilise le résultat comme entrée " +"du shell,\n" " puis exécute la commande résultante.\n" " \n" " Code de sortie :\n" -" Renvoie le même code de sortie que la commande, ou le code de succès si la commande est vide." +" Renvoie le même code de sortie que la commande, ou le code de succès si " +"la commande est vide." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3219,45 +3543,63 @@ msgstr "" " « getopts » est utilisé par les procédures du shell pour analyser les \n" " paramètres de position.\n" " \n" -" OPTSTRING contient les lettres d'options qui devront être reconnues ;\n" +" CHAÎNEOPTS contient les lettres d'options qui devront être reconnues ;\n" " si une lettre est suivie par un deux-points, elle devra posséder un\n" " argument séparé d'elle par une espace.\n" " \n" " À chaque fois qu'elle est appelée, « getopts » place l'option suivante\n" -" dans la variable de shell « $nom », en l'initialisant si elle n'existe pas,\n" -" et place l'index de l'argument suivant dans la variable de shell OPTIND.\n" -" OPTIND est initialisé à 1 à chaque fois que le shell ou qu'un script shell\n" -" est appelé. Lorsqu'une option nécessite un argument, « getopts » place cet\n" +" dans la variable de shell « $nom », en l'initialisant si elle n'existe " +"pas,\n" +" et place l'index de l'argument suivant dans la variable de shell " +"OPTIND.\n" +" OPTIND est initialisé à 1 à chaque fois que le shell ou qu'un script " +"shell\n" +" est appelé. Lorsqu'une option nécessite un argument, « getopts » place " +"cet\n" " argument dans la variable de shell OPTARG.\n" " \n" -" « getopts » signale les erreurs de deux manières. Si le premier caractère\n" -" d'OPTSTRING est un deux-points, « getopts » utilise un signalement d'erreur\n" -" silencieux. Dans ce mode aucun message d'erreur n'est affiché. Si une option\n" -" incorrecte est rencontrée, « getopts » place dans OPTARG le caractère d'option\n" -" trouvé. Si un argument nécessaire n'est pas trouvé, « getopts » place un « : »\n" -" dans NOM et place dans OPTARG le caractère d'option trouvé. Si « getopts »\n" -" n'est pas en mode silencieux et qu'une option incorrecte est rencontrée, il\n" -" place « ? » dans NAME et efface OPTARG. Si un argument nécessaire n'est pas\n" -" trouvé, un « ? » est placé dans NAME, OPTARG est effacé et un message de\n" +" « getopts » signale les erreurs de deux manières. Si le premier " +"caractère\n" +" de CHAÎNEOPTS est un deux-points, « getopts » utilise un signalement " +"d'erreur\n" +" silencieux. Dans ce mode aucun message d'erreur n'est affiché. Si une " +"option\n" +" incorrecte est rencontrée, « getopts » place dans OPTARG le caractère " +"d'option\n" +" trouvé. Si un argument nécessaire n'est pas trouvé, « getopts » place un " +"« : »\n" +" dans NOM et place dans OPTARG le caractère d'option trouvé. Si " +"« getopts »\n" +" n'est pas en mode silencieux et qu'une option incorrecte est rencontrée, " +"il\n" +" place « ? » dans NAME et efface OPTARG. Si un argument nécessaire n'est " +"pas\n" +" trouvé, un « ? » est placé dans NAME, OPTARG est effacé et un message " +"de\n" " diagnostic est affiché.\n" " \n" -" Si la variable de shell OPTERR possède la valeur 0, « getopts » désactive\n" -" l'affichage des messages d'erreur, même si le premier caractère d'OPTSTRING\n" +" Si la variable de shell OPTERR possède la valeur 0, « getopts » " +"désactive\n" +" l'affichage des messages d'erreur, même si le premier caractère de " +"CHAÎNEOPTS\n" " n'est pas un deux-points. OPTERR possède la valeur 1 par défaut.\n" " \n" -" « getopts » analyse habituellement les paramètres de position, mais si des arguments\n" +" « getopts » analyse habituellement les paramètres de position, mais si " +"des arguments\n" " sont fournis par des valeurs ARG, ils sont analysés à la place.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès si une option est trouvée, le code d'échec si la fin des options\n" +" Renvoie le code de succès si une option est trouvée, le code d'échec si " +"la fin des options\n" " est rencontrée ou si une erreur survient." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3265,16 +3607,19 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Remplace le shell par la commande fournie.\n" " \n" " Exécute la COMMANDE, en remplaçant ce shell par le programme spécifié.\n" -" Les ARGUMENTS deviennent ceux de la COMMANDE. Si la COMMANDE n'est pas fournie,\n" +" Les ARGUMENTS deviennent ceux de la COMMANDE. Si la COMMANDE n'est pas " +"fournie,\n" " les redirections prennent effet dans le shell courant.\n" " \n" " Options :\n" @@ -3282,14 +3627,16 @@ msgstr "" " -c\texécute la COMMANDE avec un environnement vide\n" " -l\tplace un tiret comme argument numéro 0 de la COMMANDE\n" " \n" -" Si la commande ne peut pas être exécutée, un shell non-interactif se termine,\n" +" Si la commande ne peut pas être exécutée, un shell non-interactif se " +"termine,\n" " à moins que l'option « execfail » ne soit définie.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins que la COMMANDE ne soit pas trouvée ou\n" +" Renvoie le code de succès à moins que la COMMANDE ne soit pas trouvée " +"ou\n" " qu'une erreur de redirection ne survienne." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3301,29 +3648,34 @@ msgstr "" " Termine le shell avec le code de retour « N ». Si N est omis, le code\n" " de retour est celui de la dernière commande exécutée." -#: builtins.c:724 +#: builtins.c:732 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 "" "Termine un shell de connexion.\n" " \n" -" Termine un shell de connexion avec le code de sortie N. Renvoie une erreur\n" +" Termine un shell de connexion avec le code de sortie N. Renvoie une " +"erreur\n" " s'il n'est pas exécuté dans un shell de connexion." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3336,35 +3688,45 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Affiche ou exécute des commandes issues de l'historique.\n" " \n" -" « fc » est utilisé pour afficher ou modifier puis ré-exécuter les commandes\n" -" de l'historique des commandes. PREMIER et DERNIER peuvent être des nombres\n" -" indiquant la plage ou PREMIER peut être une chaîne donnant le début de la\n" +" « fc » est utilisé pour afficher ou modifier puis ré-exécuter les " +"commandes\n" +" de l'historique des commandes. PREMIER et DERNIER peuvent être des " +"nombres\n" +" indiquant la plage ou PREMIER peut être une chaîne donnant le début de " +"la\n" " commande la plus récente recherchée.\n" " \n" " Options :\n" -" -e ENAME\tdéfinit quel éditeur utiliser. Par défaut il s'agit de « FCEDIT »\n" +" -e ENAME\tdéfinit quel éditeur utiliser. Par défaut il s'agit de " +"« FCEDIT »\n" " \t\tpuis « EDITOR », puis « vi »\n" " -l\taffiche les lignes au lieu de les éditer\n" " -n\tn'affiche pas les numéros de ligne\n" " -r\tinverse l'ordre des lignes (les plus récentes en premier)\n" " \n" -" En tapant « fc -s [motif=rempl ...] [commande] », la commande est ré-exécutée\n" +" En tapant « fc -s [motif=rempl ...] [commande] », la commande est ré-" +"exécutée\n" " après avoir effectué le remplacement ANCIEN=NOUVEAU.\n" " \n" " Un alias utile est « r='fc -s' » de sorte qu'en tapant « r cc »,\n" -" la dernière commande commençant par « cc » est ré-exécutée et avec « r », la\n" +" la dernière commande commençant par « cc » est ré-exécutée et avec " +"« r », la\n" " dernière commande est ré-exécutée.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès ou le code de sortie de la commande exécutée ; autre\n" +" Renvoie le code de succès ou le code de sortie de la commande exécutée ; " +"autre\n" " chose que 0 si une erreur survient." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3382,14 +3744,17 @@ msgstr "" " de tâche actuelle.\n" " \n" " Code de sortie :\n" -" Celui de la commande placée au premier plan ou le code d'échec si une erreur survient." +" Celui de la commande placée au premier plan ou le code d'échec si une " +"erreur survient." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3397,20 +3762,23 @@ msgid "" msgstr "" "Déplace des tâches vers l'arrière plan.\n" " \n" -" Place chaque JOB_SPEC en arrière plan comme s'il avait été démarré avec « & ».\n" +" Place chaque JOB_SPEC en arrière plan comme s'il avait été démarré avec " +"« & ».\n" " Si JOB_SPEC n'est pas fourni, le shell utilise sa propre notion\n" " de tâche actuelle.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins que le contrôle de tâche ne soit pas activé\n" +" Renvoie le code de succès à moins que le contrôle de tâche ne soit pas " +"activé\n" " ou qu'une erreur ne survienne." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3430,7 +3798,8 @@ msgstr "" "Mémorise ou affiche l'emplacement des programmes.\n" " \n" " Détermine et mémorise le chemin complet de chaque commande NOM. Si\n" -" aucun argument n'est donné, une information sur les commandes mémorisées est\n" +" aucun argument n'est donné, une information sur les commandes mémorisées " +"est\n" " affichée.\n" " \n" " Options :\n" @@ -3449,7 +3818,7 @@ msgstr "" " Renvoie le code de succès à moins que le NOM ne soit pas trouvé ou\n" " qu'une option non valable ne soit donnée." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3467,7 +3836,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Affiche des informations sur les commandes intégrées.\n" " \n" @@ -3485,10 +3855,12 @@ msgstr "" " MOTIF\tMotif spécifiant un sujet d'aide\n" " \n" " Code de retour :\n" -" Renvoie le code de succès à moins que le MOTIF ne soit pas trouvé ou qu'une\n" +" Renvoie le code de succès à moins que le MOTIF ne soit pas trouvé ou " +"qu'une\n" " option non valable ne soit donnée." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3512,47 +3884,64 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." msgstr "" "Affiche ou manipule l'historique.\n" " \n" -" Affiche l'historique avec les numéros de lignes en préfixant chaque élément\n" -" modifié d'un « * ». Un argument égal à N limite la liste aux N derniers éléments.\n" +" Affiche l'historique avec les numéros de lignes en préfixant chaque " +"élément\n" +" modifié d'un « * ». Un argument égal à N limite la liste aux N derniers " +"éléments.\n" " \n" " Options :\n" " -c\tefface la liste d'historique en supprimant tous les éléments\n" -" -d offset\tefface l'élément d'historique à l'emplacement OFFSET. Un offset négatif\n" +" -d offset\tefface l'élément d'historique à l'emplacement OFFSET. Un " +"offset négatif\n" " \t\tcompte à partir de la fin de la liste de l'historique\n" " \n" -" -a\tajoute les lignes d'historique de cette session au fichier d'historique\n" -" -n\tlit toutes les lignes d'historique non déjà lues depuis le fichier d'historique\n" +" -a\tajoute les lignes d'historique de cette session au fichier " +"d'historique\n" +" -n\tlit toutes les lignes d'historique non déjà lues depuis le fichier " +"d'historique\n" " \t\tet les ajoute à la liste de l'historique\n" -" -r\tlit le fichier d'historique et ajoute le contenu à la liste d'historique\n" +" -r\tlit le fichier d'historique et ajoute le contenu à la liste " +"d'historique\n" " -w\técrit l'historique actuelle dans le fichier d'historique\n" " \n" -" -p\teffectue un développement de l'historique sur chaque ARG et affiche le résultat\n" +" -p\teffectue un développement de l'historique sur chaque ARG et " +"affiche le résultat\n" " \t\tsans le stocker dans la liste d'historique\n" " -s\tajoute les ARGs à la liste d'historique comme entrée unique\n" " \n" -" Si NOMFICHIER est donné, il est utilisé comme fichier d'historique. Sinon,\n" -" si HISTFILE contient une valeur, celle-ci est utilisée, sinon ~/.bash_history.\n" +" Si NOMFICHIER est donné, il est utilisé comme fichier d'historique. " +"Sinon,\n" +" si HISTFILE contient une valeur, celle-ci est utilisée, sinon ~/." +"bash_history.\n" " \n" -" Si la variable HISTTIMEFORMAT est définie et n'est pas vide, sa valeur est utilisée\n" -" comme chaîne de format pour que strftime(3) affiche l'horodatage associé\n" +" Si la variable HISTTIMEFORMAT est définie et n'est pas vide, sa valeur " +"est utilisée\n" +" comme chaîne de format pour que strftime(3) affiche l'horodatage " +"associé\n" " à chaque entrée d'historique. Sinon, aucun horodatage n'est affiché.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins qu'une option non valable soit donnée ou\n" +" Renvoie le code de succès à moins qu'une option non valable soit donnée " +"ou\n" " qu'une erreur ne survienne." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3578,7 +3967,8 @@ msgstr "" "Affiche l'état des tâches.\n" " \n" " Affiche la liste des tâches actives. JOBSPEC restreint l'affichage à\n" -" cette tâche. S'il n'y a pas d'option, l'état de toutes les tâches actives\n" +" cette tâche. S'il n'y a pas d'option, l'état de toutes les tâches " +"actives\n" " est affiché.\n" " \n" " Options :\n" @@ -3590,15 +3980,18 @@ msgstr "" " -s\trestreint l'affichage aux tâches stoppées\n" " \n" " Si « -x » est fournie, la COMMANDE est lancée après que toutes les\n" -" spécifications qui apparaissent dans ARGs ont été remplacées par l'ID de\n" +" spécifications qui apparaissent dans ARGs ont été remplacées par l'ID " +"de\n" " processus du leader de groupe de processus de cette tâche.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins qu'une option non valable ne soit donnée\n" -" ou qu'une erreur ne survienne. Si « -x » est utilisée, le code de sortie de\n" +" Renvoie le code de succès à moins qu'une option non valable ne soit " +"donnée\n" +" ou qu'une erreur ne survienne. Si « -x » est utilisée, le code de sortie " +"de\n" " la COMMANDE est renvoyé." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3621,7 +4014,8 @@ msgstr "" " \n" " Options :\n" " -a\tretire toutes les tâches si JOBSPEC n'est pas fourni\n" -" -h\tmarque chaque JOBSPEC de façon que SIGHUP ne soit pas envoyé à la tâche\n" +" -h\tmarque chaque JOBSPEC de façon que SIGHUP ne soit pas envoyé à la " +"tâche\n" " \t\tsi le shell reçoit un SIGHUP\n" " -r\tretire seulement les tâches en cours de fonctionnement\n" " \n" @@ -3629,7 +4023,7 @@ msgstr "" " Renvoie le code de succès à moins qu'une option ou un JOBSPEC non\n" " valable ne soit donné." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3654,34 +4048,42 @@ msgstr "" "Envoie un signal à une tâche.\n" " \n" " Envoie le signal nommé par SIGSPEC ou SIGNUM au processus identifié par\n" -" PID ou JOBSPEC. Si SIGSPEC et SIGNUM ne sont pas donnés, alors SIGTERM est\n" +" PID ou JOBSPEC. Si SIGSPEC et SIGNUM ne sont pas donnés, alors SIGTERM " +"est\n" " envoyé.\n" " \n" " Options :\n" " -s sig\tSIG est un nom de signal\n" " -n sig\tSIG est un numéro de signal\n" -" -l\taffiche la liste des noms de signaux ; si des arguments suivent « -l »,\n" -" \t\tils sont supposés être des numéros de signaux pour lesquels les noms doivent\n" +" -l\taffiche la liste des noms de signaux ; si des arguments suivent « -" +"l »,\n" +" \t\tils sont supposés être des numéros de signaux pour lesquels les noms " +"doivent\n" " \t\têtre affichés\n" " -L\tsynonyme de -l\n" " \n" -" « kill » est une commande intégrée pour deux raisons : elle permet aux IDs de\n" -" tâches d'être utilisés à la place des IDs de processus et elle permet aux\n" -" processus d'être tués si la limite du nombre de processus que vous pouvez créer\n" +" « kill » est une commande intégrée pour deux raisons : elle permet aux " +"IDs de\n" +" tâches d'être utilisés à la place des IDs de processus et elle permet " +"aux\n" +" processus d'être tués si la limite du nombre de processus que vous " +"pouvez créer\n" " est atteinte.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins qu'une option non valable soit donnée ou qu'une\n" +" Renvoie le code de succès à moins qu'une option non valable soit donnée " +"ou qu'une\n" " erreur ne survienne." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3749,29 +4151,37 @@ msgstr "" " \n" " Les variables de shell sont autorisées comme opérandes. Le nom de la\n" " variable est remplacé par sa valeur (contrainte à un entier de largeur\n" -" fixe) à l'intérieur d'une expression. La variable n'a pas besoin d'avoir\n" +" fixe) à l'intérieur d'une expression. La variable n'a pas besoin " +"d'avoir\n" " son attribut d'entier activé pour être utilisée dans une expression.\n" " \n" -" Les opérateurs sont évalués dans leur ordre de priorité. Les sous-expressions\n" -" entre parenthèses sont évaluées en premier et peuvent être prioritaires sur\n" +" Les opérateurs sont évalués dans leur ordre de priorité. Les sous-" +"expressions\n" +" entre parenthèses sont évaluées en premier et peuvent être prioritaires " +"sur\n" " les règles ci-dessus.\n" " \n" " Code de sortie :\n" " Si le dernier ARG est évalué à 0, « let » renvoie 1, sinon 0 est renvoyé." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3779,11 +4189,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3801,55 +4214,80 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Lit une ligne depuis l'entrée standard et la découper en morceaux.\n" " \n" -" Lit une simple ligne depuis l'entrée standard ou depuis le descripteur de\n" -" fichier FD si l'option « -u » est fournie. La ligne est découpée en morceaux\n" -" comme des mots, et le premier mot est assigné au premier NOM, le deuxième mot\n" -" au deuxième NOM, et ainsi de suite, le dernier NOM récupérant la liste des mots\n" -" restants. Seuls les caractères trouvés dans $IFS sont reconnus comme délimiteurs\n" -" de mots. Par défaut, la barre oblique inverse échappe les caractères délimiteurs\n" +" Lit une simple ligne depuis l'entrée standard ou depuis le descripteur " +"de\n" +" fichier FD si l'option « -u » est fournie. La ligne est découpée en " +"morceaux\n" +" comme des mots, et le premier mot est assigné au premier NOM, le " +"deuxième mot\n" +" au deuxième NOM, et ainsi de suite, le dernier NOM récupérant la liste " +"des mots\n" +" restants. Seuls les caractères trouvés dans $IFS sont reconnus comme " +"délimiteurs\n" +" de mots. Par défaut, la barre oblique inverse échappe les caractères " +"délimiteurs\n" " et les sauts de ligne.\n" " \n" -" Si aucun NOM n'est fourni, la ligne lue est stockée dans la variable REPLY.\n" +" Si aucun NOM n'est fourni, la ligne lue est stockée dans la variable " +"REPLY.\n" " \n" " Options :\n" -" -a tableau\taffecte les mots lus séquentiellement aux indices de la variable\n" +" -a tableau\taffecte les mots lus séquentiellement aux indices de la " +"variable\n" " \t\ttableau ARRAY en commençant à 0\n" -" -d délim\tcontinue jusqu'à ce que le premier caractère de DELIM soit lu,\n" +" -d délim\tcontinue jusqu'à ce que le premier caractère de DELIM soit " +"lu,\n" " \t\tau lieu du retour à la ligne\n" " -e\t\tutilise « Readline » pour obtenir la ligne\n" " -i texte\tUtilise TEXTE comme texte initial pour « Readline »\n" " -n n\ttermine après avoir lu N caractères plutôt que d'attendre\n" -" \t\tun retour à la ligne, mais obéi à un délimiteur si moins de N caractères\n" +" \t\tun retour à la ligne, mais obéi à un délimiteur si moins de N " +"caractères\n" " \t\tsont lus avant le délimiteur\n" -" -N n\ttermine seulement après avoir lu exactement N caractères, à moins\n" -" \t\tque le caractère EOF soit rencontré ou que le délai de lecture n'expire.\n" +" -N n\ttermine seulement après avoir lu exactement N caractères, à " +"moins\n" +" \t\tque le caractère EOF soit rencontré ou que le délai de lecture " +"n'expire.\n" " \t\tLes délimiteurs sont ignorés\n" -" -p prompt\taffiche la chaîne PROMPT sans retour à la ligne final, avant de\n" +" -p prompt\taffiche la chaîne PROMPT sans retour à la ligne final, " +"avant de\n" " \t\ttenter une lecture\n" -" -r\tne pas permettre aux barres obliques inverses de se comporter comme\n" +" -r\tne pas permettre aux barres obliques inverses de se comporter " +"comme\n" " \t\tdes caractères d'échappement\n" " -s\tne pas répéter l'entrée provenant d'un terminal\n" -" -t timeout\texpire et renvoie un code d'échec si une ligne d'entrée complète\n" -" \t\tn'est pas lue en moins de TIMEOUT secondes. La valeur de la variable TIMEOUT\n" -" \t\test le délai d'expiration par défaut. TIMEOUT peut être un nombre décimal.\n" -" \t\tSi TIMEOUT est à zéro, la lecture se termine immédiatement sans essayer de\n" -" \t\tlire la moindre donnée mais elle renvoie un code de succès seulement\n" +" -t timeout\texpire et renvoie un code d'échec si une ligne d'entrée " +"complète\n" +" \t\tn'est pas lue en moins de TIMEOUT secondes. La valeur de la " +"variable TIMEOUT\n" +" \t\test le délai d'expiration par défaut. TIMEOUT peut être un nombre " +"décimal.\n" +" \t\tSi TIMEOUT est à zéro, la lecture se termine immédiatement sans " +"essayer de\n" +" \t\tlire la moindre donnée mais elle renvoie un code de succès " +"seulement\n" " \t\tsi l'entrée est disponible sur le descripteur de fichier. Le code\n" " \t\tde sortie est supérieur à 128 si le délai a expiré\n" -" -u fd\tlit depuis le descripteur de fichier FD plutôt que l'entrée standard\n" +" -u fd\tlit depuis le descripteur de fichier FD plutôt que l'entrée " +"standard\n" " \n" " Code de sortie :\n" -" Le code de retour est 0, à moins qu'une fin de fichier ne survienne, que le délai expire\n" -" (auquel cas, il est plus grand que 128), une erreur d'affectation à une variable survient\n" -" ou qu'un descripteur de fichier non valable ne soit fourni comme argument à « -u »." - -#: builtins.c:1042 +" Le code de retour est 0, à moins qu'une fin de fichier ne survienne, que " +"le délai expire\n" +" (auquel cas, il est plus grand que 128), une erreur d'affectation à une " +"variable survient\n" +" ou qu'un descripteur de fichier non valable ne soit fourni comme " +"argument à « -u »." + +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3871,7 +4309,8 @@ msgstr "" " Renvoie N ou le code d'échec si le shell n'est pas en train d'exécuter\n" " une fonction ou un script." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3914,7 +4353,8 @@ 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" @@ -3938,13 +4378,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3954,18 +4399,23 @@ msgid "" " Exit Status:\n" " Returns success unless an invalid option is given." msgstr "" -"Définit ou invalide des valeurs d'options et des paramètres de position du shell.\n" +"Définit ou invalide des valeurs d'options et des paramètres de position du " +"shell.\n" " \n" -" Change la valeur des attributs du shell et des paramètres de position, ou\n" +" Change la valeur des attributs du shell et des paramètres de position, " +"ou\n" " affiche les noms et valeurs des variables du shell.\n" " \n" " Options :\n" -" -a Marque pour l'export toutes les variables qui sont modifiées ou créées.\n" +" -a Marque pour l'export toutes les variables qui sont modifiées ou " +"créées.\n" " -b Averti immédiatement de la fin d'une tâche.\n" -" -e Termine immédiatement si une commande s'arrête avec un code de retour non nul.\n" +" -e Termine immédiatement si une commande s'arrête avec un code de " +"retour non nul.\n" " -f Désactive la génération de nom de fichier (globbing).\n" " -h Mémorise l'emplacement des commandes après leur recherche.\n" -" -k Place dans l'environnement tous les arguments d'affectation pour une commande,\n" +" -k Place dans l'environnement tous les arguments d'affectation pour " +"une commande,\n" " pas seulement ceux qui précèdent le nom de la commande.\n" " -m Active le contrôle de tâche.\n" " -n Lit les commandes, mais ne les exécute pas.\n" @@ -3980,9 +4430,11 @@ msgstr "" " hashall identique à -h\n" " histexpand identique à -H\n" " history active l'historique des commandes\n" -" ignoreeof ne termine pas le shell à la lecture d'un « EOF »\n" +" ignoreeof ne termine pas le shell à la lecture d'un " +"« EOF »\n" " interactive-comments\n" -" permet aux commentaires d'apparaître dans les commandes interactives\n" +" permet aux commentaires d'apparaître dans les " +"commandes interactives\n" " keyword identique à -k\n" " monitor identique à -m\n" " noclobber identique à -C\n" @@ -3993,49 +4445,69 @@ msgstr "" " nounset identique à -u\n" " onecmd identique à -t\n" " physical identique à -P\n" -" pipefail le code de retour d'un tube est celui de la dernière commande\n" +" pipefail le code de retour d'un tube est celui de la " +"dernière commande\n" " qui s'est terminée avec un code non nul,\n" -" ou zéro si aucune commande ne s'est arrêtée avec un code non nul.\n" -" posix modifie le comportement de « bash » où les opérations par défaut\n" -" sont différentes du standard Posix de manière à correspondre au\n" +" ou zéro si aucune commande ne s'est arrêtée " +"avec un code non nul.\n" +" posix modifie le comportement de « bash » où les " +"opérations par défaut\n" +" sont différentes du standard Posix de manière à " +"correspondre au\n" " standard\n" " privileged identique à -p\n" " verbose identique à -v\n" " vi utiliser une édition de ligne façon « vi »\n" " xtrace identique à -x\n" -" -p Option activée lorsque les n° d'identifiants utilisateurs réels et effectifs ne\n" -" sont pas les mêmes. Désactive le traitement du fichier $ENV et l'importation des\n" -" fonctions du shell. Désactiver cette option permet de définir les uid et gid\n" +" -p Option activée lorsque les n° d'identifiants utilisateurs réels " +"et effectifs ne\n" +" sont pas les mêmes. Désactive le traitement du fichier $ENV et " +"l'importation des\n" +" fonctions du shell. Désactiver cette option permet de définir " +"les uid et gid\n" " effectifs aux valeurs des uid et gid réels.\n" " -t Termine après la lecture et l'exécution d'une commande.\n" -" -u Traite les variables non définies comme des erreurs lors de la substitution.\n" +" -u Traite les variables non définies comme des erreurs lors de la " +"substitution.\n" " -v Affiche les lignes d'entrée du shell à leur lecture.\n" -" -x Affiche les commandes et leurs arguments au moment de leur exécution.\n" +" -x Affiche les commandes et leurs arguments au moment de leur " +"exécution.\n" " -B Effectue l'expansion des accolades\n" -" -C Si défini, empêche les fichiers réguliers existants d'être écrasés par une\n" +" -C Si défini, empêche les fichiers réguliers existants d'être " +"écrasés par une\n" " redirection de la sortie.\n" -" -E Si défini, l'interception ERR est héritée par les fonctions du shell.\n" -" -H Active la substitution d'historique façon « ! ». Ceci est actif par défaut\n" +" -E Si défini, l'interception ERR est héritée par les fonctions du " +"shell.\n" +" -H Active la substitution d'historique façon « ! ». Ceci est actif " +"par défaut\n" " lorsque le shell est interactif.\n" -" -P Si défini, les liens symboliques ne sont pas suivis lors de l'exécution des\n" +" -P Si défini, les liens symboliques ne sont pas suivis lors de " +"l'exécution des\n" " commandes telles que « cd » qui changent le répertoire courant.\n" -" -T Si défini, l'interception de DEBUG et RETURN est héritée par les fonctions du shell.\n" +" -T Si défini, l'interception de DEBUG et RETURN est héritée par les " +"fonctions du shell.\n" " -- Affecte tous les arguments restants aux paramètres de position.\n" " S'il n'y a plus d'argument, les paramètres de position sont\n" " indéfinis.\n" -" - Affecter tous les arguments restants aux paramètres de position.\n" +" - Affecter tous les arguments restants aux paramètres de " +"position.\n" " Les options « -x » et « -v » sont désactivées.\n" " \n" -" Ces indicateurs peuvent être désactivés en utilisant « + » plutôt que « - ». Ils peuvent\n" -" être utilisés lors de l'appel au shell. Le jeu d'indicateurs actuel peut être trouvé\n" -" dans « $- ». Les n ARGs restants sont des paramètres de position et sont affectés,\n" -" dans l'ordre, à $1, $2, .. $n. Si aucun ARG n'est donné, toutes les variables du shell\n" +" Ces indicateurs peuvent être désactivés en utilisant « + » plutôt que « -" +" ». Ils peuvent\n" +" être utilisés lors de l'appel au shell. Le jeu d'indicateurs actuel peut " +"être trouvé\n" +" dans « $- ». Les n ARGs restants sont des paramètres de position et " +"sont affectés,\n" +" dans l'ordre, à $1, $2, .. $n. Si aucun ARG n'est donné, toutes les " +"variables du shell\n" " sont affichées.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins qu'une option non valable ne soit donnée." +" Renvoie le code de succès à moins qu'une option non valable ne soit " +"donnée." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4047,7 +4519,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4062,24 +4535,27 @@ msgstr "" " Options :\n" " -f\ttraite chaque NOM comme une fonction du shell\n" " -v\ttraite chaque NOM comme une variable du shell\n" -" -n\ttraite chaque NOM comme une référence nommée et annule la variable\n" +" -n\ttraite chaque NOM comme une référence nommée et annule la " +"variable\n" " \t\telle-même plutôt que la variable à laquelle elle fait référence\n" " \n" " Sans option, « unset » essaye d'abord d'annuler une variable et, \n" " en cas d'échec, essaye d'annuler la fonction.\n" " \n" -" Certaines variables ne peuvent pas être annulées ; consultez aussi « readonly ».\n" +" Certaines variables ne peuvent pas être annulées ; consultez aussi " +"« readonly ».\n" " \n" " Code de retour :\n" " Renvoie le code de succès à moins qu'une option non valable ne soit\n" " donnée ou que NOM soit en lecture seule." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4094,7 +4570,8 @@ msgstr "" "Définit l'attribut « export » pour des variables du shell.\n" " \n" " Marque chaque NOM pour exportation automatique vers l'environnement des\n" -" commandes exécutées ultérieurement. Si VALEUR est fournie, affecte la VALEUR\n" +" commandes exécutées ultérieurement. Si VALEUR est fournie, affecte la " +"VALEUR\n" " avant l'exportation.\n" " \n" " Options :\n" @@ -4105,10 +4582,11 @@ msgstr "" " L'argument « -- » désactive tout traitement postérieur d'options.\n" " \n" " Code de retour :\n" -" Renvoie le code de succès à moins qu'une option non valable ne soit données\n" +" Renvoie le code de succès à moins qu'une option non valable ne soit " +"données\n" " ou que NOM ne soit pas valable." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4130,15 +4608,18 @@ msgid "" msgstr "" "Marque des variables du shell comme non modifiables.\n" " \n" -" Marque chaque NOM comme étant en lecture seule ; les valeurs de ces NOMs\n" -" ne peuvent plus être modifiées par des affectations ultérieures. Si VALEUR\n" +" Marque chaque NOM comme étant en lecture seule ; les valeurs de ces " +"NOMs\n" +" ne peuvent plus être modifiées par des affectations ultérieures. Si " +"VALEUR\n" " est fournie, lui affecter la VALEUR avant le passage en lecture seule.\n" " \n" " Options :\n" " -a\tse réfère à des variables étant des tableaux indexés\n" " -A\tse réfère à des variables étant des tableaux associatifs\n" " -f\tse réfère à des fonctions du shell\n" -" -p\taffiche une liste des toutes les fonctions et variables en lecture seule\n" +" -p\taffiche une liste des toutes les fonctions et variables en lecture " +"seule\n" " \t\tselon que l'option -f est fournie ou non\n" " \n" " Un argument « -- » désactive tout traitement postérieur d'options.\n" @@ -4147,7 +4628,7 @@ msgstr "" " Renvoie le code de succès à moins qu'une option non valable ne soit\n" " donnée ou que NOM ne soit pas valable." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4159,13 +4640,14 @@ msgid "" msgstr "" "Décale des paramètres de position.\n" " \n" -" Renomme les paramètres de position $N+1,$N+2 ... à $1,$2 ... Si N n'est pas\n" +" Renomme les paramètres de position $N+1,$N+2 ... à $1,$2 ... Si N n'est " +"pas\n" " donné, il est supposé égal à 1.\n" " \n" " Code de retour :\n" " Renvoie le code de succès à moins que N soit négatif ou supérieur à $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4180,41 +4662,51 @@ msgid "" msgstr "" "Exécute des commandes depuis un fichier dans le shell actuel.\n" " \n" -" Lit et exécute des commandes depuis NOMFICHIER dans le shell actuel. Les\n" -" éléments dans $PATH sont utilisés pour trouver le répertoire contenant NOMFICHIER.\n" -" Si des ARGUMENTS sont fournis, ils deviennent les paramètres de position\n" +" Lit et exécute des commandes depuis NOMFICHIER dans le shell actuel. " +"Les\n" +" éléments dans $PATH sont utilisés pour trouver le répertoire contenant " +"NOMFICHIER.\n" +" Si des ARGUMENTS sont fournis, ils deviennent les paramètres de " +"position\n" " lorsque NOMFICHIER est exécuté.\n" " \n" " Code de sortie :\n" -" Renvoie le code de la dernière commande exécutée dans NOMFICHIER, ou le code\n" +" Renvoie le code de la dernière commande exécutée dans NOMFICHIER, ou le " +"code\n" " d'échec si NOMFICHIER ne peut pas être lu." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" "Suspend l'exécution du shell.\n" " \n" -" Suspend l'exécution de ce shell jusqu'à ce qu'il reçoive un signal SIGCONT.\n" -" À moins que ce soit forcé, les shell de connexion ne peuvent pas être suspendus.\n" +" Suspend l'exécution de ce shell jusqu'à ce qu'il reçoive un signal " +"SIGCONT.\n" +" À moins que ce soit forcé, les shell de connexion ne peuvent pas être " +"suspendus.\n" " \n" " Options :\n" " -f\tforce la suspension, même si le shell est un shell de connexion\n" " \n" " Code de retour :\n" -" Renvoie le code de succès à moins que le contrôle de tâche ne soit pas activé\n" +" Renvoie le code de succès à moins que le contrôle de tâche ne soit pas " +"activé\n" " ou qu'une erreur survienne." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4248,7 +4740,8 @@ 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" @@ -4269,7 +4762,8 @@ 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" @@ -4302,14 +4796,16 @@ msgstr "" " pour examiner l'état d'un fichier. Il existe aussi des opérateurs de\n" " chaîne, ainsi que des opérateurs de comparaison numériques.\n" " \n" -" Le comportement de test dépend du nombre d'arguments. Consultez la page\n" +" Le comportement de test dépend du nombre d'arguments. Consultez la " +"page\n" " de manuel de bash pour connaître les spécifications complètes.\n" " \n" " Opérateurs sur des fichiers : \n" " \n" " -a FICHIER Vrai si le fichier existe.\n" " -b FICHIER Vrai si le fichier est un fichier spécial de bloc.\n" -" -c FICHIER Vrai si le fichier est un fichier spécial de caractères.\n" +" -c FICHIER Vrai si le fichier est un fichier spécial de " +"caractères.\n" " -d FICHIER Vrai si le fichier est un répertoire.\n" " -e FICHIER Vrai si le fichier existe.\n" " -f FICHIER Vrai si le fichier existe et est un fichier régulier.\n" @@ -4326,15 +4822,20 @@ msgstr "" " -w FICHIER Vrai si le fichier peut être écrit par vous.\n" " -x FICHIER Vrai si le fichier est exécutable par vous.\n" " -O FICHIER Vrai si le fichier est effectivement possédé par vous.\n" -" -G FICHIER Vrai si le fichier est effectivement possédé par votre groupe.\n" -" -N FICHIER Vrai si le fichier a été modifié depuis la dernière fois qu'il a été lu.\n" +" -G FICHIER Vrai si le fichier est effectivement possédé par votre " +"groupe.\n" +" -N FICHIER Vrai si le fichier a été modifié depuis la dernière " +"fois qu'il a été lu.\n" " \n" -" FICHIER1 -nt FICHIER2 Vrai si le fichier1 est plus récent que le fichier2 (selon la date\n" +" FICHIER1 -nt FICHIER2 Vrai si le fichier1 est plus récent que le " +"fichier2 (selon la date\n" " de modification).\n" " \n" -" FICHIER1 -ot FICHIER2 Vrai si le fichier1 est plus vieux que le fichier2.\n" +" FICHIER1 -ot FICHIER2 Vrai si le fichier1 est plus vieux que le " +"fichier2.\n" " \n" -" FICHIER1 -ef FICHIER2 Vrai si le fichier1 est un lien physique vers le fichier2.\n" +" FICHIER1 -ef FICHIER2 Vrai si le fichier1 est un lien physique vers le " +"fichier2.\n" " \n" " Opérateurs sur des chaînes :\n" " \n" @@ -4348,15 +4849,18 @@ msgstr "" " CHAÎNE1 != CHAÎNE2\n" " Vrai si les chaînes ne sont pas égales.\n" " CHAÎNE1 < CHAÎNE2\n" -" Vrai si le tri lexicographique place la chaîne1 en premier.\n" +" Vrai si le tri lexicographique place la chaîne1 en " +"premier.\n" " CHAÎNE1 > CHAÎNE2\n" -" Vrai si le tri lexicographique place la chaîne1 en deuxième.\n" +" Vrai si le tri lexicographique place la chaîne1 en " +"deuxième.\n" " \n" " Autres opérateurs :\n" " \n" " -o OPTION Vrai si l'OPTION du shell est activée.\n" " -v VAR Vrai si la variable de shell VAR est définie.\n" -" -R VAR Vrai is la variable VAR est définie est une référence nommée.\n" +" -R VAR Vrai is la variable VAR est définie est une référence " +"nommée.\n" " ! EXPR Vrai si l'EXPRession est fausse.\n" " EXPR1 -a EXPR2 Vrai si les deux expressions sont vraies.\n" " EXPR1 -o EXPR2 Vrai si l'une des deux expressions est vraie.\n" @@ -4364,14 +4868,17 @@ msgstr "" " arg1 OP arg2 Tests arithmétiques. OP peut être -eq, -ne,\n" " -lt, -le, -gt ou -ge.\n" " \n" -" Les opérateurs arithmétiques binaires renvoient « vrai » si ARG1 est égal,\n" -" non-égal, inférieur, inférieur ou égal, supérieur, supérieur ou égal à ARG2.\n" +" Les opérateurs arithmétiques binaires renvoient « vrai » si ARG1 est " +"égal,\n" +" non-égal, inférieur, inférieur ou égal, supérieur, supérieur ou égal à " +"ARG2.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès si EXPR est vraie, le code d'échec si EXPR est fausse ou si\n" +" Renvoie le code de succès si EXPR est vraie, le code d'échec si EXPR est " +"fausse ou si\n" " un argument non valable est donné." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4383,11 +4890,12 @@ msgstr "" " Ceci est un synonyme de la primitive « test », mais le dernier argument\n" " doit être le caractère « ] », pour fermer le « [ » correspondant." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4401,59 +4909,80 @@ msgstr "" " Code de retour :\n" " Toujours le code de succès." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Intercepter des signaux et d'autres événements.\n" " \n" -" Définit et active des gestionnaires à lancer lorsque le shell reçoit des signaux\n" +" Définit et active des gestionnaires à lancer lorsque le shell reçoit des " +"signaux\n" " ou sous d'autres conditions.\n" " \n" " La commande ARG doit être lue et exécutée lorsque le shell reçoit le\n" " signal SIGNAL_SPEC. Si ARG est absent (et qu'un unique SIGNAL_SPEC\n" " est fourni) ou égal à « - », tous les signaux spécifiés sont remis\n" -" à leur valeur d'origine. Si ARG est une chaîne vide, tous les SIGNAL_SPEC\n" +" à leur valeur d'origine. Si ARG est une chaîne vide, tous les " +"SIGNAL_SPEC\n" " sont ignorés par le shell et les commandes qu'ils appellent.\n" " \n" -" Si SIGNAL_SPEC est EXIT (0), la commande ARG est exécutée à la sortie du shell. Si un\n" +" Si SIGNAL_SPEC est EXIT (0), la commande ARG est exécutée à la sortie du " +"shell. Si un\n" " SIGNAL_SPEC est DEBUG, ARG est exécuté après chaque commande simple. Si\n" -" un SIGNAL_SPEC est RETURN, ARG est exécuté à chaque fois qu'une fonction shell ou\n" +" un SIGNAL_SPEC est RETURN, ARG est exécuté à chaque fois qu'une fonction " +"shell ou\n" " qu'un script lancé avec . ou source se termine. Un SIGNAL_SPEC\n" -" valant ERR permet d'exécuter ARG à chaque fois qu'un échec d'une commande engendrerait\n" +" valant ERR permet d'exécuter ARG à chaque fois qu'un échec d'une " +"commande engendrerait\n" " la sortie du shell lorsque l'option -e est activée.\n" " \n" -" Si aucun argument n'est fourni, « trap » affiche la liste des commandes associées\n" +" Si aucun argument n'est fourni, « trap » affiche la liste des commandes " +"associées\n" " à chaque signal.\n" " \n" " Options :\n" @@ -4461,15 +4990,17 @@ msgstr "" " -p\taffiche les commandes de « trap » associées à chaque SIGNAL_SPEC\n" " \n" " Chaque SIGNAL_SPEC est soit un nom de signal dans <signal.h>\n" -" ou un numéro de signal. Les noms de signaux sont insensibles à la casse et\n" +" ou un numéro de signal. Les noms de signaux sont insensibles à la casse " +"et\n" " le préfixe « SIG » est facultatif. Un signal peut être envoyé au\n" " shell avec « kill -signal $$ ».\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins que SIGSPEC ne soit pas valable ou qu'une\n" +" Renvoie le code de succès à moins que SIGSPEC ne soit pas valable ou " +"qu'une\n" " option non valable ne soit donnée." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4495,7 +5026,8 @@ 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 "" "Affiche des informations sur le type de commande.\n" " \n" @@ -4504,32 +5036,41 @@ msgstr "" " \n" " Options :\n" " -a\taffiche tous les emplacements contenant un exécutable nommé NOM;\n" -" \t\ty compris les alias, les commandes intégrées et les fonctions si et seulement si\n" +" \t\ty compris les alias, les commandes intégrées et les fonctions si et " +"seulement si\n" " \t\tl'option « -p » n'est pas utilisée\n" " -f\tdésactive la recherche de fonctions du shell\n" -" -P\tforce une recherche de CHEMIN pour chaque NOM, même si c'est un alias,\n" -" \t\tune commande intégrée ou une fonction et renvoie le nom du fichier du disque\n" +" -P\tforce une recherche de CHEMIN pour chaque NOM, même si c'est un " +"alias,\n" +" \t\tune commande intégrée ou une fonction et renvoie le nom du fichier " +"du disque\n" " \t\tqui serait exécuté\n" " -p\trenvoie le nom du fichier du disque qui serait exécuté sauf si\n" -" \t\t« type -t NOM » aurait renvoyé autre chose que « file » auquel cas, rien\n" +" \t\t« type -t NOM » aurait renvoyé autre chose que « file » auquel cas, " +"rien\n" " \t\tn'est renvoyé.\n" " -t\taffiche un mot unique parmi « alias », « keyword »,\n" -" \t\t« function », « builtin », « file » or « », si NOM est respectivement un alias,\n" -" \t\tun mot réservé du shell, une fonction du shell, une commande intégrée,\n" +" \t\t« function », « builtin », « file » or « », si NOM est " +"respectivement un alias,\n" +" \t\tun mot réservé du shell, une fonction du shell, une commande " +"intégrée,\n" " \t\tun fichier du disque ou un nom inconnu\n" " \n" " Arguments :\n" " NOM\tNom de commande à interpréter.\n" " \n" " Code de retour :\n" -" Renvoie le code de succès si tous les NOMs sont trouvés, le code d'échec si l'un\n" +" Renvoie le code de succès si tous les NOMs sont trouvés, le code d'échec " +"si l'un\n" " d'entre eux n'est pas trouvé." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4566,16 +5107,18 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Modifie les limites de ressources du shell.\n" " \n" -" Fournit un contrôle sur les ressources disponibles au shell et aux processus\n" +" Fournit un contrôle sur les ressources disponibles au shell et aux " +"processus\n" " qu'il crée, sur les systèmes qui permettent un tel contrôle. \n" " \n" " Options :\n" @@ -4601,27 +5144,36 @@ msgstr "" " -v\tla taille de la mémoire virtuelle\n" " -x\tle nombre maximal de verrous de fichiers\n" " -P\tle nombre maximal de pseudo terminaux\n" -" -R\tle temps maximum qu'un processus en temps réel est autorisé à fonctionner\n" +" -R\tle temps maximum qu'un processus en temps réel est autorisé à " +"fonctionner\n" " \tavant d'être bloqué\n" " -T\tle nombre maximal de threads\n" " \n" -" Toutes les options ne sont pas disponibles sur toutes les plates-formes.\n" -" \n" -" Si LIMIT est fournie, elle est utilisée comme nouvelle valeur de ressource.\n" -" Les valeurs spéciales de LIMIT « soft », « hard » et « unlimited » correspondent\n" -" respectivement aux valeurs actuelles de la limite souple, de la limite dure,\n" -" ou à une absence de limite. Sinon la valeur actuelle de la limite est affichée\n" +" Toutes les options ne sont pas disponibles sur toutes les plates-" +"formes.\n" +" \n" +" Si LIMIT est fournie, elle est utilisée comme nouvelle valeur de " +"ressource.\n" +" Les valeurs spéciales de LIMIT « soft », « hard » et « unlimited » " +"correspondent\n" +" respectivement aux valeurs actuelles de la limite souple, de la limite " +"dure,\n" +" ou à une absence de limite. Sinon la valeur actuelle de la limite est " +"affichée\n" " Si aucune option n'est donnée, « -f » est supposée.\n" " \n" -" Les valeurs sont des multiples de 1024 octets, sauf pour « -t » qui prend des\n" -" secondes, « -p » qui prend un multiple de 512 octets et « -u » qui prend un nombre\n" +" Les valeurs sont des multiples de 1024 octets, sauf pour « -t » qui " +"prend des\n" +" secondes, « -p » qui prend un multiple de 512 octets et « -u » qui prend " +"un nombre\n" " de processus sans unité.\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins qu'une option non valable ne soit fournie ou\n" +" Renvoie le code de succès à moins qu'une option non valable ne soit " +"fournie ou\n" " qu'une erreur ne survienne." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4640,37 +5192,46 @@ msgid "" msgstr "" "Affiche ou définit le masque de mode de fichier.\n" " \n" -" Définit le masque de création de fichier comme étant MODE. Si MODE est omis,\n" +" Définit le masque de création de fichier comme étant MODE. Si MODE est " +"omis,\n" " affiche la valeur courante du MASQUE.\n" " \n" -" Si MODE commence par un chiffre, il est interprété comme un nombre octal ;\n" -" sinon comme une chaîne de symboles de mode comme ceux acceptés par chmod(1).\n" +" Si MODE commence par un chiffre, il est interprété comme un nombre " +"octal ;\n" +" sinon comme une chaîne de symboles de mode comme ceux acceptés par " +"chmod(1).\n" " \n" " Options :\n" " -p\tsi MODE est omis, affiche sous une forme réutilisable en entrée\n" -" -S\taffiche sous forme symbolique, sinon la sortie octale est utilisée\n" +" -S\taffiche sous forme symbolique, sinon la sortie octale est " +"utilisée\n" " \n" " Code de retour :\n" -" Renvoie le code de succès à moins que MODE ne soit pas valable ou qu'une\n" +" Renvoie le code de succès à moins que MODE ne soit pas valable ou " +"qu'une\n" " option non valable ne soit donnée." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4683,52 +5244,77 @@ msgid "" msgstr "" "Attend la fin d'une tâche et renvoie le code de retour.\n" " \n" -" Attend la fin du processus identifié par ID, qui peut être un ID de processus\n" -" ou une spécification de tâche, et renvoie son code de retour. Si ID n'est\n" -" pas donné, la commande attend la fin de tous les processus actifs en cours et\n" -" le code de retour est zéro. Si ID est une spécification de tâche, la commande\n" +" Attend la fin du processus identifié par ID, qui peut être un ID de " +"processus\n" +" ou une spécification de tâche, et renvoie son code de retour. Si ID " +"n'est\n" +" pas donné, la commande attend la fin de tous les processus actifs en " +"cours et\n" +" le code de retour est zéro. Si ID est une spécification de tâche, la " +"commande\n" " attend tous les processus dans le pipeline de la tâche.\n" " \n" -" Si l'option -n est fournie, attend la fin d'une seule tâche de la liste des ID,\n" -" ou, si aucun ID est fourni, attend la fin de la prochaine tâche et retourne\n" +" Si l'option -n est fournie, attend la fin d'une seule tâche de la liste " +"des ID,\n" +" ou, si aucun ID est fourni, attend la fin de la prochaine tâche et " +"retourne\n" " son code de retour.\n" " \n" -" Si l'option -p est fournie, l'identificateur du processus ou de la tâche de la\n" -" tâche pour laquelle un code de statut est retourné est assigné à la variable VAR\n" -" nommée par l'argument de l'option. La variable est purgée initialement avant\n" +" Si l'option -p est fournie, l'identificateur du processus ou de la tâche " +"de la\n" +" tâche pour laquelle un code de statut est retourné est assigné à la " +"variable VAR\n" +" nommée par l'argument de l'option. La variable est purgée initialement " +"avant\n" " \n" -" Si l'option -f est fournie et que le contrôle de tâche est activé, attends que\n" +" Si l'option -f est fournie et que le contrôle de tâche est activé, " +"attends que\n" " le ID spécifié soit terminé au lieu d'attendre qu'il change de statut.\n" " \n" " Code de retour :\n" " Renvoie le même code que celui d'ID ; ou échoue si ID n'est pas valable\n" -" ou si une option non valable et fournie ou si -n est employé et que le shell\n" +" ou si une option non valable et fournie ou si -n est employé et que le " +"shell\n" " n'a aucun enfant sur lequel attendre." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Attend la fin d'un processus et renvoie le code de sortie.\n" " \n" -" Attend la fin de chaque processus spécifié par un PID et donne son code de\n" +" Attend la fin de chaque processus spécifié par un PID et donne son code " +"de\n" " retour. Si PID n'est pas mentionné, la fin de tous les processus fils\n" -" actuellement actifs est attendue et le code de retour est zéro. PID doit être\n" +" actuellement actifs est attendue et le code de retour est zéro. PID doit " +"être\n" " un ID de processus.\n" " \n" " Code de sortie :\n" -" Renvoie le code de retour du dernier PID. Échoue si PID n'est pas valable ou\n" +" Renvoie le code de retour du dernier PID. Échoue si PID n'est pas " +"valable ou\n" " si une option non valable est donnée." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4742,15 +5328,17 @@ msgid "" msgstr "" "Exécute des commandes pour chaque membre d'une liste.\n" " \n" -" La boucle « for » exécute une suite de commandes pour chaque membre d'une\n" -" liste d'éléments. Si « in MOTS ...; » n'est pas fourni, « in \"$@\" » est\n" +" La boucle « for » exécute une suite de commandes pour chaque membre " +"d'une\n" +" liste d'éléments. Si « in MOTS ...; » n'est pas fourni, « in \"$@\" » " +"est\n" " utilisé. Pour chaque élément dans MOTS, NOM est défini à cet élément,\n" " et les COMMANDES sont exécutées.\n" " \n" " Code de sortie :\n" " Renvoie le code de la dernière commande exécutée." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4774,13 +5362,14 @@ msgstr "" " \t\tCOMMANDS\n" " \t\t(( EXP3 ))\n" " \tdone\n" -" EXP1, EXP2, and EXP3 sont des expressions arithmétiques. Si une expression\n" +" EXP1, EXP2, and EXP3 sont des expressions arithmétiques. Si une " +"expression\n" " est omise, elle se comporte comme si elle était évaluée à 1.\n" " \n" " Code de sortie :\n" " Renvoie le code de la dernière commande exécutée." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4816,7 +5405,7 @@ msgstr "" " Code de sortie :\n" " Renvoie le code de la dernière commande exécutée." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4833,19 +5422,21 @@ msgid "" msgstr "" "Signale le temps passé pendant l'exécution d'un tube de commandes.\n" " \n" -" Exécute PIPELINE et affiche un résumé du temps réel, du temps processeur\n" +" Exécute PIPELINE et affiche un résumé du temps réel, du temps " +"processeur\n" " utilisateur, et du temps processeur système passés à exécuter PIPELINE\n" " lorsque celui-ci se termine.\n" " \n" " Options :\n" " -p\taffiche le résumé dans le format portable Posix.\n" " \n" -" La valeur de la variable TIMEFORMAT est utilisée comme format de sortie.\n" +" La valeur de la variable TIMEFORMAT est utilisée comme format de " +"sortie.\n" " \n" " Code de sortie :\n" " Le code de retour est celui du PIPELINE." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4857,22 +5448,29 @@ msgid "" msgstr "" "Exécute des commandes selon une correspondance de motif.\n" " \n" -" Exécute de manière sélective les COMMANDES selon la correspondance du MOT\n" -" au MOTIF. Le caractère « | » est utilisé pour séparer les différents motifs.\n" +" Exécute de manière sélective les COMMANDES selon la correspondance du " +"MOT\n" +" au MOTIF. Le caractère « | » est utilisé pour séparer les différents " +"motifs.\n" " \n" " Code de sortie :\n" " Renvoie le code de la dernière commande exécutée." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4880,22 +5478,28 @@ msgid "" msgstr "" "Exécute des commandes selon une condition.\n" " \n" -" La liste « if COMMANDES » est exécutée. Si elle se termine avec le code zéro,\n" +" La liste « if COMMANDES » est exécutée. Si elle se termine avec le code " +"zéro,\n" " alors la liste « then COMMANDES » est exécutée. Sinon, chaque liste\n" -" « elif COMMANDES » est exécutée à son tour et si son code de retour est zéro,\n" -" la liste « then COMMANDES » correspondante est exécutée et la commande « if »\n" -" se termine. Sinon, la liste « else COMMANDES » est exécutée si elle existe.\n" -" Le code de retour de l'ensemble est celui de la dernière commande exécutée\n" +" « elif COMMANDES » est exécutée à son tour et si son code de retour est " +"zéro,\n" +" la liste « then COMMANDES » correspondante est exécutée et la commande " +"« if »\n" +" se termine. Sinon, la liste « else COMMANDES » est exécutée si elle " +"existe.\n" +" Le code de retour de l'ensemble est celui de la dernière commande " +"exécutée\n" " ou zéro si aucune condition n'était vraie.\n" " \n" " Code de sortie :\n" " Renvoie le code de la dernière commande exécutée." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4910,11 +5514,12 @@ msgstr "" " Code de sortie :\n" " Renvoie le code de la dernière commande exécutée." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4929,7 +5534,7 @@ msgstr "" " Code de sortie :\n" " Renvoie le code de la dernière commande exécutée." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4944,19 +5549,21 @@ msgstr "" "Crée un coprocessus nommé NOM.\n" " \n" " Exécute la COMMANDE de manière asynchrone, en connectant la sortie et\n" -" l'entrée standard de la commande par un tube aux descripteurs de fichiers\n" +" l'entrée standard de la commande par un tube aux descripteurs de " +"fichiers\n" " affectés aux indices 0 et 1 d'une variable tableau NOM dans le shell en\n" " cours d'exécution. Le NOM par défaut est « COPROC ».\n" " \n" " Code de retour :\n" " La commande coproc renvoie le code de sortie 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4965,15 +5572,18 @@ msgid "" msgstr "" "Définit une fonction du shell.\n" " \n" -" Crée une fonction du shell nommée NOM. Lorsqu'appelée comme une simple commande,\n" -" NOM lance la COMMANDE dans le contexte du shell qui l'appelle. Lorsque NOM est appelé,\n" -" les arguments sont transmis à la fonction comme $1...$n, et le nom de la fonction\n" +" Crée une fonction du shell nommée NOM. Lorsqu'appelée comme une simple " +"commande,\n" +" NOM lance la COMMANDE dans le contexte du shell qui l'appelle. Lorsque " +"NOM est appelé,\n" +" les arguments sont transmis à la fonction comme $1...$n, et le nom de la " +"fonction\n" " est $FUNCNAME.\n" " \n" " Code de retour :\n" " Renvoie le code de succès à moins que NOM ne soit en lecture seule." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4991,7 +5601,7 @@ msgstr "" " Code de sortie :\n" " Renvoie le code de la dernière commande exécutée." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5006,16 +5616,19 @@ msgid "" msgstr "" "Reprend une tâche en arrière plan.\n" " \n" -" Équivalent à l'argument JOB_SPEC de la commande « fg ». Reprend l'exécution\n" +" Équivalent à l'argument JOB_SPEC de la commande « fg ». Reprend " +"l'exécution\n" " d'une tâche stoppée ou en tâche de fond. JOB_SPEC peut spécifier soit\n" -" un nom soit un numéro de tâche. Faire suivre JOB_SPEC de « & » permet de\n" -" placer la tâche en arrière plan, comme si la spécification de tâche avait\n" +" un nom soit un numéro de tâche. Faire suivre JOB_SPEC de « & » permet " +"de\n" +" placer la tâche en arrière plan, comme si la spécification de tâche " +"avait\n" " été fournie comme argument de « bg ».\n" " \n" " Code de sortie :\n" " Renvoie le code de la commande reprise." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5033,13 +5646,16 @@ msgstr "" " Code de sortie :\n" " Renvoie 1 si EXPRESSION est évaluée à 0, sinon renvoie 0." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5059,18 +5675,24 @@ msgid "" msgstr "" "Exécute une commande conditionnelle.\n" " \n" -" Renvoie le code de retour 0 ou 1 dépendant de l'évaluation de l'EXPRESSION\n" -" conditionnelle. Les expressions sont formées de la même façon que pour la\n" -" primitive « test », et peuvent être combinées avec les opérateurs suivants :\n" +" Renvoie le code de retour 0 ou 1 dépendant de l'évaluation de " +"l'EXPRESSION\n" +" conditionnelle. Les expressions sont formées de la même façon que pour " +"la\n" +" primitive « test », et peuvent être combinées avec les opérateurs " +"suivants :\n" " \n" " \t( EXPRESSION )\tRenvoie la valeur de l'EXPRESSION\n" " \t! EXPRESSION\tVrai si l'EXPRESSION est fausse, sinon vrai\n" " \tEXPR1 && EXPR2\tVrai si EXPR1 et EXPR2 sont vraies, faux sinon\n" " \tEXPR1 || EXPR2\tVrai si EXPR1 ou EXPR2 est vraie, faux sinon\n" " \n" -" Lorsque les opérateurs « == » et « != » sont utilisés, la chaîne à droite de\n" -" l'opérateur est utilisée comme motif, et une mise en correspondance est effectuée.\n" -" Lorsque l'opérateur « =~ » est utilisé, la chaîne à droite de l'opérateur\n" +" Lorsque les opérateurs « == » et « != » sont utilisés, la chaîne à " +"droite de\n" +" l'opérateur est utilisée comme motif, et une mise en correspondance est " +"effectuée.\n" +" Lorsque l'opérateur « =~ » est utilisé, la chaîne à droite de " +"l'opérateur\n" " est mise en correspondance comme une expression rationnelle.\n" " \n" " Les opérateurs « && » et « || » n'évaluent pas EXPR2 si\n" @@ -5079,7 +5701,7 @@ msgstr "" " Code de sortie :\n" " 0 ou 1 selon la valeur de l'EXPRESSION." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5137,25 +5759,34 @@ msgstr "" " BASH_VERSION\tNuméro de version de ce Bash.\n" " CDPATH\tUne liste de répertoires, séparés par un deux-points, utilisés\n" " \t\tpar « cd » pour la recherche de répertoires.\n" -" GLOBIGNORE\tUne liste de motifs séparés par un deux-points, décrivant les\n" +" GLOBIGNORE\tUne liste de motifs séparés par un deux-points, décrivant " +"les\n" " \t\tnoms de fichiers à ignorer lors de l'expansion des chemins.\n" -" HISTFILE\tLe nom du fichier où votre historique des commandes est stocké.\n" +" HISTFILE\tLe nom du fichier où votre historique des commandes est " +"stocké.\n" " HISTFILESIZE\tLe nombre maximal de lignes que ce fichier peut contenir.\n" " HISTSIZE\tLe nombre maximal de lignes d'historique auquel un shell en\n" " \t\tfonctionnement peut accéder.\n" " HOME\tLe chemin complet vers votre répertoire de connexion.\n" " HOSTNAME\tLe nom de la machine actuelle.\n" -" HOSTTYPE\tLe type de processeur sur lequel cette version de Bash fonctionne.\n" -" IGNOREEOF\tContrôle l'action du shell à la réception d'un caractère « EOF »\n" -" \t\tcomme seule entrée. Si défini, sa valeur est le nombre de caractères\n" +" HOSTTYPE\tLe type de processeur sur lequel cette version de Bash " +"fonctionne.\n" +" IGNOREEOF\tContrôle l'action du shell à la réception d'un caractère " +"« EOF »\n" +" \t\tcomme seule entrée. Si défini, sa valeur est le nombre de " +"caractères\n" " \t\t« EOF » qui peuvent être rencontrés à la suite sur une ligne vide\n" " \t\tavant que le shell ne se termine (10 par défaut).\n" " \t\tS'il n'est pas défini, « EOF » signifie la fin de l'entrée.\n" -" MACHTYPE\tUne chaîne décrivant le système actuel sur lequel fonctionne Bash.\n" -" MAILCHECK\tLe nombre de secondes séparant deux vérifications du courrier par Bash.\n" -" MAILPATH\tUne liste de fichiers séparés par un deux-points, que Bash utilise\n" +" MACHTYPE\tUne chaîne décrivant le système actuel sur lequel fonctionne " +"Bash.\n" +" MAILCHECK\tLe nombre de secondes séparant deux vérifications du courrier " +"par Bash.\n" +" MAILPATH\tUne liste de fichiers séparés par un deux-points, que Bash " +"utilise\n" " \t\tpour vérifier les nouveaux courriers.\n" -" OSTYPE\tLa version d'Unix sur laquelle cette version de Bash fonctionne.\n" +" OSTYPE\tLa version d'Unix sur laquelle cette version de Bash " +"fonctionne.\n" " PATH\tUne liste de répertoires séparés par un deux-points, utilisés\n" " \t\tpour la recherche des commandes.\n" " PROMPT_COMMAND\tUne commande à exécuter avant d'afficher chaque invite\n" @@ -5163,27 +5794,39 @@ msgstr "" " PS1\t\tL'invite de commande principal.\n" " PS2\t\tL'invite secondaire.\n" " PWD\t\tLe chemin complet vers le répertoire actuel.\n" -" SHELLOPTS\tLa liste des options activées du shell, séparées par un deux-points.\n" +" SHELLOPTS\tLa liste des options activées du shell, séparées par un deux-" +"points.\n" " TERM\tLe nom du type actuel du terminal.\n" -" TIMEFORMAT\tLe format de sortie pour les statistiques de temps affichées\n" +" TIMEFORMAT\tLe format de sortie pour les statistiques de temps " +"affichées\n" " \t\tpar le mot réservé « time ».\n" " auto_resume\tNon-vide signifie qu'un mot de commande apparaissant\n" " \t\tde lui-même sur une ligne est d'abord recherché dans la liste des\n" -" \t\ttâches stoppées. Si elle est trouvée, la tâche est remise en avant-plan.\n" -" \t\tLa valeur « exact » signifie que le mot de commande doit correspondre\n" -" \t\texactement à la commande dans la liste des tâches stoppées. La valeur\n" -" \t\t« substring » signifie que le mot de commande doit correspondre à une\n" -" \t\tsous-chaîne de la tâche. Une autre valeur signifie que la commande doit\n" +" \t\ttâches stoppées. Si elle est trouvée, la tâche est remise en avant-" +"plan.\n" +" \t\tLa valeur « exact » signifie que le mot de commande doit " +"correspondre\n" +" \t\texactement à la commande dans la liste des tâches stoppées. La " +"valeur\n" +" \t\t« substring » signifie que le mot de commande doit correspondre à " +"une\n" +" \t\tsous-chaîne de la tâche. Une autre valeur signifie que la commande " +"doit\n" " \t\têtre un préfixe d'une tâche stoppée.\n" -" histchars\tCaractères contrôlant l'expansion d'historique et la substitution\n" -" \t\trapide. Le premier caractère est le caractère de substitution d'historique,\n" -" \t\thabituellement « ! ». Le deuxième est le caractère de substitution rapide,\n" +" histchars\tCaractères contrôlant l'expansion d'historique et la " +"substitution\n" +" \t\trapide. Le premier caractère est le caractère de substitution " +"d'historique,\n" +" \t\thabituellement « ! ». Le deuxième est le caractère de substitution " +"rapide,\n" " \t\thabituellement « ^ ». Le troisième est le caractère de commentaire\n" " \t\td'historique, habituellement « # ».\n" -" HISTIGNORE\tUne liste de motifs séparés par un deux-points, utilisés pour\n" -" \t\tdécider quelles commandes doivent être conservées dans la liste d'historique.\n" +" HISTIGNORE\tUne liste de motifs séparés par un deux-points, utilisés " +"pour\n" +" \t\tdécider quelles commandes doivent être conservées dans la liste " +"d'historique.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5225,22 +5868,28 @@ msgstr "" " \t\tsont ajoutés à la pile, de façon que seule la pile soit manipulée\n" " \n" " Arguments :\n" -" +N\tPermute la pile de façon que le Nième répertoire se place en haut,\n" -" \t\ten comptant de zéro depuis la gauche de la liste fournie par « dirs ».\n" -" \n" -" -N\tPermute la pile de façon que le Nième répertoire se place en haut,\n" -" \t\ten comptant de zéro depuis la droite de la liste fournie par « dirs ».\n" -" \n" -" dir\tAjoute le répertoire DIR en haut de la pile, et en fait le nouveau\n" +" +N\tPermute la pile de façon que le Nième répertoire se place en " +"haut,\n" +" \t\ten comptant de zéro depuis la gauche de la liste fournie par " +"« dirs ».\n" +" \n" +" -N\tPermute la pile de façon que le Nième répertoire se place en " +"haut,\n" +" \t\ten comptant de zéro depuis la droite de la liste fournie par " +"« dirs ».\n" +" \n" +" dir\tAjoute le répertoire DIR en haut de la pile, et en fait le " +"nouveau\n" " \t\trépertoire de travail.\n" " \n" " Vous pouvez voir la pile des répertoires avec la commande « dirs ».\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins qu'un argument non valable ne soit fourni\n" +" Renvoie le code de succès à moins qu'un argument non valable ne soit " +"fourni\n" " ou que le changement de répertoire n'échoue." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5288,10 +5937,11 @@ msgstr "" " Vous pouvez voir la pile des répertoires avec la commande « dirs ».\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins qu'un argument non valable ne soit donné\n" +" Renvoie le code de succès à moins qu'un argument non valable ne soit " +"donné\n" " ou que le changement de répertoire n'échoue." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5321,8 +5971,10 @@ msgid "" msgstr "" "Affiche la pile de répertoire.\n" " \n" -" Affiche la liste des répertoires actuellement mémorisés. Les répertoires\n" -" sont insérés dans la liste avec la commande « pushd ». Vous pouvez remonter\n" +" Affiche la liste des répertoires actuellement mémorisés. Les " +"répertoires\n" +" sont insérés dans la liste avec la commande « pushd ». Vous pouvez " +"remonter\n" " dans la liste en enlevant des éléments avec la commande « popd ».\n" " \n" " Options:\n" @@ -5334,17 +5986,21 @@ msgstr "" " \t\ten préfixant avec sa position dans la pile\n" " \n" " Arguments :\n" -" +N\tAffiche le Nième élément en comptant de zéro depuis la gauche de la\n" -" \t\tliste affichée par « dirs » lorsque celle-ci est appelée sans option.\n" +" +N\tAffiche le Nième élément en comptant de zéro depuis la gauche de " +"la\n" +" \t\tliste affichée par « dirs » lorsque celle-ci est appelée sans " +"option.\n" " \n" -" -N\tAffiche le Nième élément en comptant de zéro depuis la droite de la\n" -" \t\tliste affichée par « dirs » lorsque celle-ci est appelée sans option.\n" +" -N\tAffiche le Nième élément en comptant de zéro depuis la droite de " +"la\n" +" \t\tliste affichée par « dirs » lorsque celle-ci est appelée sans " +"option.\n" " \n" " Code de sortie :\n" " Renvoie le code de succès à moins qu'une option non valable ne soit\n" " fournie ou qu'une erreur ne survienne." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5365,22 +6021,28 @@ msgid "" msgstr "" "Active ou désactive des options du shell.\n" " \n" -" Change la valeur de chaque option du shell NOMOPT. S'il n'y a pas d'argument\n" -" à l'option, liste chaque NOMOPT fourni ou toutes les options du shell si aucun\n" -" NOMOPT est donné, avec une indication montrant si chacun est actif ou non.\n" +" Change la valeur de chaque option du shell NOMOPT. S'il n'y a pas " +"d'argument\n" +" à l'option, liste chaque NOMOPT fourni ou toutes les options du shell si " +"aucun\n" +" NOMOPT est donné, avec une indication montrant si chacun est actif ou " +"non.\n" " \n" " Options :\n" -" -o\trestreint les NOMOPT à ceux définis pour être utilisés avec « set -o »\n" +" -o\trestreint les NOMOPT à ceux définis pour être utilisés avec « set -" +"o »\n" " -p\taffiche chaque option du shell en indiquant son état\n" " -q\tsupprime l'affichage\n" " -s\tactive (set) chaque NOMOPT\n" " -u\tdésactive (unset) chaque NOMOPT\n" " \n" " Code de retour :\n" -" Renvoie le code de succès si NOMOPT est active ; échec si une option non valable\n" +" Renvoie le code de succès si NOMOPT est active ; échec si une option non " +"valable\n" " est donnée ou si NOMOPT est inactive." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5388,68 +6050,91 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Formate et affiche des ARGUMENTS en contrôlant le FORMAT.\n" " \n" " Options :\n" -" -v var\taffecte la sortie à la variable VAR du shell plutôt que de l'afficher\n" +" -v var\taffecte la sortie à la variable VAR du shell plutôt que de " +"l'afficher\n" " \t\tsur la sortie standard\n" " \n" -" Le FORMAT est une chaîne de caractères qui contient trois types d'objets : des caractères\n" -" normaux qui sont simplement copiés vers la sortie standard ; des séquences d'échappement\n" -" qui sont converties et copiées vers la sortie standard et des spécifications de\n" +" Le FORMAT est une chaîne de caractères qui contient trois types " +"d'objets : des caractères\n" +" normaux qui sont simplement copiés vers la sortie standard ; des " +"séquences d'échappement\n" +" qui sont converties et copiées vers la sortie standard et des " +"spécifications de\n" " format, chacun entraînant l'affichage de l'argument suivant.\n" " \n" -" En plus des formats standards décrits dans printf(1), « printf » interprète :\n" +" En plus des formats standards décrits dans printf(1), « printf » " +"interprète :\n" " \n" -" %b\tdéveloppe les séquences d'échappement à contre-oblique dans l'argument correspondant\n" -" %q\tprotège les arguments avec des guillemets de façon qu'ils puissent être réutilisés\n" +" %b\tdéveloppe les séquences d'échappement à contre-oblique dans " +"l'argument correspondant\n" +" %q\tprotège les arguments avec des guillemets de façon qu'ils puissent " +"être réutilisés\n" " comme entrée du shell.\n" -" %Q\tcomme %q mais applique une éventuelle précision à l'argument sans guillemets avant\n" +" %Q\tcomme %q mais applique une éventuelle précision à l'argument sans " +"guillemets avant\n" " d'ajouter les guillemets.\n" -" %(fmt)T\trenvoie la chaîne date-heure résultant de l'utilisation de FMT comme\n" +" %(fmt)T\trenvoie la chaîne date-heure résultant de l'utilisation de " +"FMT comme\n" " \t chaîne de format pour strftime(3)\n" " \n" -" Le format est réutilisé si nécessaire pour consommer tous les arguments. S'il y a\n" -" moins d'arguments qu'exigé par le format, les spécificateurs de format surnuméraires\n" -" se comportent comme si la valeur zéro ou une chaîne nulle avait été fournies (selon\n" +" Le format est réutilisé si nécessaire pour consommer tous les arguments. " +"S'il y a\n" +" moins d'arguments qu'exigé par le format, les spécificateurs de format " +"surnuméraires\n" +" se comportent comme si la valeur zéro ou une chaîne nulle avait été " +"fournies (selon\n" " ce qui est approprié).\n" " \n" " Code de sortie :\n" -" Renvoie le code de succès à moins qu'une option non valable ne soit donnée ou qu'une\n" +" Renvoie le code de succès à moins qu'une option non valable ne soit " +"donnée ou qu'une\n" " erreur d'écriture ou d'affectation ne survienne." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5463,45 +6148,62 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Spécifie la façon dont Readline complète les arguments.\n" " \n" -" Pour chaque NOM, la commande spécifie la façon dont les arguments sont complétés\n" +" Pour chaque NOM, la commande spécifie la façon dont les arguments sont " +"complétés\n" " S'il n'y a pas d'option, le réglage actuel est affiché d'une manière\n" " réutilisable comme une entrée.\n" " \n" " Options :\n" -" -p\taffiche le réglage d'auto-complètement actuel dans un format réutilisable\n" -" -r\tretire un réglage d'auto-complètement de chaque NOM ou, si aucun NOM\n" +" -p\taffiche le réglage d'auto-complètement actuel dans un format " +"réutilisable\n" +" -r\tretire un réglage d'auto-complètement de chaque NOM ou, si aucun " +"NOM\n" " \t\tn'est fourni, retire tous les réglages\n" -" -D\tapplique les auto-complètements et actions comme valeurs par défaut aux\n" +" -D\tapplique les auto-complètements et actions comme valeurs par " +"défaut aux\n" " \t\tcommandes ne possédant aucun auto-complètement spécifique\n" " -E\tapplique les auto-complètements et actions aux commandes vides\n" " \t\t(auto-complètement tenté sur une ligne vide)\n" -" -I\tapplique les auto-complètements et actions au mot initial (habituellement\n" +" -I\tapplique les auto-complètements et actions au mot initial " +"(habituellement\n" " \t\tla commande)\n" " \n" -" Lorsqu'un auto-complètement est tenté, les actions sont appliquées dans l'ordre\n" -" dans lequel les options en majuscule ci-dessus sont listées. Si plusieurs\n" -" options sont fournies, l'option « -D » est prioritaire sur -E et les deux sont\n" +" Lorsqu'un auto-complètement est tenté, les actions sont appliquées dans " +"l'ordre\n" +" dans lequel les options en majuscule ci-dessus sont listées. Si " +"plusieurs\n" +" options sont fournies, l'option « -D » est prioritaire sur -E et les " +"deux sont\n" " prioritaires sur -I.\n" " \n" " Code de retour :\n" -" Renvoie le code de succès à moins qu'une option non valable ne soit fournie ou\n" +" Renvoie le code de succès à moins qu'une option non valable ne soit " +"fournie ou\n" " qu'une erreur ne survienne." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5516,13 +6218,16 @@ msgstr "" " Renvoie le code de succès à moins qu'une option non valable ne soit\n" " fournie ou qu'une erreur ne survienne." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5546,14 +6251,18 @@ msgid "" msgstr "" "Modifie ou affiche les options d'auto-complètement.\n" " \n" -" Modifie les options d'auto-complètement pour chaque NOM ou, si aucun NOM n'est\n" -" fourni, pour l'auto-complètement actuellement exécuté. Si aucune OPTION n'est\n" -" donnée, affiche les options d'auto-complètement de chaque NOM ou le réglage\n" +" Modifie les options d'auto-complètement pour chaque NOM ou, si aucun NOM " +"n'est\n" +" fourni, pour l'auto-complètement actuellement exécuté. Si aucune OPTION " +"n'est\n" +" donnée, affiche les options d'auto-complètement de chaque NOM ou le " +"réglage\n" " actuel d'auto-complètement.\n" " \n" " Options :\n" " \t-o option\tDéfini l'option d'auto-complètement OPTION pour chaque NOM\n" -" \t-D\t\tChange les options pour l'auto-complètement de commande par défaut\n" +" \t-D\t\tChange les options pour l'auto-complètement de commande par " +"défaut\n" " \t-E\t\tChange les options pour l'auto-complètement de commande vide\n" " \t-I\t\tChange les options pour l'auto-complètement du mot initial\n" " \n" @@ -5561,31 +6270,41 @@ msgstr "" " \n" " Arguments :\n" " \n" -" Chaque NOM correspond à une commande pour laquelle un réglage d'auto-complètement\n" -" doit déjà avoir été défini grâce à la commande intégrée « complete ». Si aucun\n" -" NOM n'est fourni, « compopt » doit être appelée par une fonction générant\n" -" des auto-complètements ; ainsi les options de ce générateur d'auto-complètement\n" +" Chaque NOM correspond à une commande pour laquelle un réglage d'auto-" +"complètement\n" +" doit déjà avoir été défini grâce à la commande intégrée « complete ». " +"Si aucun\n" +" NOM n'est fourni, « compopt » doit être appelée par une fonction " +"générant\n" +" des auto-complètements ; ainsi les options de ce générateur d'auto-" +"complètement\n" " en cours d'exécution seront modifiées.\n" " \n" " Code de retour :\n" -" Renvoie le code de succès à moins qu'une option non valable ne soit fournie\n" +" Renvoie le code de succès à moins qu'une option non valable ne soit " +"fournie\n" " ou que NOM n'ait aucun réglage d'auto-complètement." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5598,44 +6317,58 @@ 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 "" "Lit des lignes depuis l'entrée standard vers une variable tableau indexé.\n" " \n" -" Lit des lignes depuis l'entrée standard vers la variable tableau indexé TABLEAU ou\n" -" depuis le descripteur de fichier FD si l'option « -u » est utilisée. La variable\n" +" Lit des lignes depuis l'entrée standard vers la variable tableau indexé " +"TABLEAU ou\n" +" depuis le descripteur de fichier FD si l'option « -u » est utilisée. La " +"variable\n" " MAPFILE est le TABLEAU par défaut.\n" " \n" " Options :\n" -" -d delim\tUtilise DELIM pour terminer les lignes au lieu du saut de ligne\n" -" -n nombre\tCopie au maximum NOMBRE lignes. Si NOMBRE est 0, toutes les lignes sont copiées.\n" -" -O origine\tCommence l'affectation au TABLEAU à l'indice ORIGINE. L'indice par défaut est 0.\n" +" -d delim\tUtilise DELIM pour terminer les lignes au lieu du saut de " +"ligne\n" +" -n nombre\tCopie au maximum NOMBRE lignes. Si NOMBRE est 0, toutes " +"les lignes sont copiées.\n" +" -O origine\tCommence l'affectation au TABLEAU à l'indice ORIGINE. " +"L'indice par défaut est 0.\n" " -s nombre\tSaute les NOMBRE premières lignes lues.\n" " -t\tRetire les retours à la ligne de chaque ligne lue.\n" -" -u fd\tLit les lignes depuis le descripteur de fichier FD au lieu de l'entrée standard.\n" -" -C callback\tÉvalue CALLBACK à chaque fois que QUANTUM lignes sont lues.\n" -" -c quantum\tIndique le nombre de lignes lues entre chaque appel au CALLBACK.\n" +" -u fd\tLit les lignes depuis le descripteur de fichier FD au lieu de " +"l'entrée standard.\n" +" -C callback\tÉvalue CALLBACK à chaque fois que QUANTUM lignes sont " +"lues.\n" +" -c quantum\tIndique le nombre de lignes lues entre chaque appel au " +"CALLBACK.\n" " \n" " Arguments :\n" " TABLEAU\tNom de la variable tableau à utiliser pour les données.\n" " \n" -" Si l'option « -C » est fournie sans option « -c », le quantum par défaut est 5000.\n" -" Lorsque CALLBACK est évalué, l'indice du prochain élément de tableau qui sera affecté\n" +" Si l'option « -C » est fournie sans option « -c », le quantum par défaut " +"est 5000.\n" +" Lorsque CALLBACK est évalué, l'indice du prochain élément de tableau qui " +"sera affecté\n" " lui est transmis comme argument additionnel.\n" " \n" -" Si la commande « mapfile » n'est pas appelée avec une origine explicite, le tableau est\n" +" Si la commande « mapfile » n'est pas appelée avec une origine explicite, " +"le tableau est\n" " vidé avant affectation.\n" " \n" " code de retour :\n" -" Renvoie le code de succès à moins qu'une option non valable ne soit donnée ou que\n" +" Renvoie le code de succès à moins qu'une option non valable ne soit " +"donnée ou que\n" " le TABLEAU soit en lecture seule ou ne soit pas un tableau indexé." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5645,6 +6378,33 @@ msgstr "" " \n" " Synonyme de « mapfile »." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Renvoie le contexte de l'appel de sous-routine actuel.\n" +#~ " \n" +#~ " Sans EXPR, renvoie « $ligne $nomfichier ». Avec EXPR,\n" +#~ " renvoie « $ligne $sousroutine $nomfichier »; ces informations " +#~ "supplémentaires\n" +#~ " peuvent être utilisées pour fournir une trace de la pile.\n" +#~ " \n" +#~ " La valeur de EXPR indique le nombre de cadres d'appels duquel il faut " +#~ "revenir en arrière\n" +#~ " avant le cadre actuel ; le cadre supérieur est le cadre 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "avertissement : %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s : clé non valable pour le tableau associatif" @@ -5684,8 +6444,12 @@ msgstr "" #~ msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n" #~ msgstr "Copyright (C) 2009 Free Software Foundation, Inc.\n" -#~ msgid "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>\n" -#~ msgstr "Licence GPLv2+ : GNU GPL version 2 ou ultérieure <http://gnu.org/licenses/gpl.html>\n" +#~ msgid "" +#~ "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl." +#~ "html>\n" +#~ msgstr "" +#~ "Licence GPLv2+ : GNU GPL version 2 ou ultérieure <http://gnu.org/licenses/" +#~ "gpl.html>\n" #~ msgid "" #~ ". With EXPR, returns\n" @@ -5698,13 +6462,15 @@ 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 "" #~ "; ces informations supplémentaires peuvent être utilisées pour\n" #~ " fournir une trace d'appels\n" #~ " \n" -#~ " La valeur de EXPR indique le nombre de cadres d'appels duquel il faut revenir en arrière\n" +#~ " La valeur de EXPR indique le nombre de cadres d'appels duquel il faut " +#~ "revenir en arrière\n" #~ " avant le cadre actuel ; le cadre supérieur est le cadre 0." #~ msgid " " @@ -5714,13 +6480,18 @@ msgstr "" #~ msgstr "Sans « EXPR », renvoie « $ligne $nomfichier ». Avec « EXPR »," #~ msgid "returns \"$line $subroutine $filename\"; this extra information" -#~ msgstr "renvoie « $ligne $sousroutine $nomfichier » ; cette information supplémentaire" +#~ msgstr "" +#~ "renvoie « $ligne $sousroutine $nomfichier » ; cette information " +#~ "supplémentaire" #~ msgid "can be used used to provide a stack trace." #~ msgstr "peut être utilisée pour fournir une trace de la pile" -#~ msgid "The value of EXPR indicates how many call frames to go back before the" -#~ msgstr "La valeur de « EXPR » indique le nombre de cadres d'appel dont il faut reculer" +#~ msgid "" +#~ "The value of EXPR indicates how many call frames to go back before the" +#~ msgstr "" +#~ "La valeur de « EXPR » indique le nombre de cadres d'appel dont il faut " +#~ "reculer" #~ msgid "current one; the top frame is frame 0." #~ msgstr "par rapport à l'actuel ; le cadre supérieur est le cadre 0." @@ -5732,82 +6503,117 @@ msgstr "" #~ msgstr "Commandes du shell correspondant aux mots-clés « " #~ msgid "Display the list of currently remembered directories. Directories" -#~ msgstr "Affiche la liste des répertoires actuellement mémorisés. Les répertoires" +#~ msgstr "" +#~ "Affiche la liste des répertoires actuellement mémorisés. Les répertoires" #~ msgid "find their way onto the list with the `pushd' command; you can get" #~ msgstr "sont insérés dans la pile avec la commande « pushd » ; vous pouvez" #~ msgid "back up through the list with the `popd' command." -#~ msgstr "remonter dans la pile en enlevant des éléments avec la commande « popd »." +#~ msgstr "" +#~ "remonter dans la pile en enlevant des éléments avec la commande « popd »." -#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions" -#~ msgstr "L'option « -l » demande à « dirs » de ne pas afficher sous forme abrégée" +#~ msgid "" +#~ "The -l flag specifies that `dirs' should not print shorthand versions" +#~ msgstr "" +#~ "L'option « -l » demande à « dirs » de ne pas afficher sous forme abrégée" -#~ msgid "of directories which are relative to your home directory. This means" -#~ msgstr "les répertoires relatifs à votre répertoire personnel. Cela signifie que" +#~ msgid "" +#~ "of directories which are relative to your home directory. This means" +#~ msgstr "" +#~ "les répertoires relatifs à votre répertoire personnel. Cela signifie que" #~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" -#~ msgstr "le répertoire « ~/bin » pourra être affiché « /homes/bfox/bin ». L'option « -v »" +#~ msgstr "" +#~ "le répertoire « ~/bin » pourra être affiché « /homes/bfox/bin ». L'option " +#~ "« -v »" #~ msgid "causes `dirs' to print the directory stack with one entry per line," #~ msgstr "demande à « dirs » d'afficher un répertoire de la pile par ligne," -#~ msgid "prepending the directory name with its position in the stack. The -p" -#~ msgstr "en le précédant de sa position dans la pile. L'option « -p » fait la même chose" +#~ msgid "" +#~ "prepending the directory name with its position in the stack. The -p" +#~ msgstr "" +#~ "en le précédant de sa position dans la pile. L'option « -p » fait la " +#~ "même chose" #~ msgid "flag does the same thing, but the stack position is not prepended." #~ msgstr "sans afficher le numéro d'emplacement dans la pile." -#~ msgid "The -c flag clears the directory stack by deleting all of the elements." -#~ msgstr "L'option « -c » vide la pile des répertoires en retirant tous ses éléments." +#~ msgid "" +#~ "The -c flag clears the directory stack by deleting all of the elements." +#~ msgstr "" +#~ "L'option « -c » vide la pile des répertoires en retirant tous ses " +#~ "éléments." -#~ msgid "+N displays the Nth entry counting from the left of the list shown by" -#~ msgstr "+N affiche la Nième entrée à partir de la gauche de la liste fournie par" +#~ msgid "" +#~ "+N displays the Nth entry counting from the left of the list shown by" +#~ msgstr "" +#~ "+N affiche la Nième entrée à partir de la gauche de la liste fournie par" #~ msgid " dirs when invoked without options, starting with zero." -#~ msgstr " « dirs » lorsqu'elle est appelée sans option, la première entrée étant zéro." +#~ msgstr "" +#~ " « dirs » lorsqu'elle est appelée sans option, la première entrée " +#~ "étant zéro." -#~ msgid "-N displays the Nth entry counting from the right of the list shown by" -#~ msgstr "+N affiche la Nième entrée à partir de la droite de la liste fournie par" +#~ msgid "" +#~ "-N displays the Nth entry counting from the right of the list shown by" +#~ msgstr "" +#~ "+N affiche la Nième entrée à partir de la droite de la liste fournie par" #~ msgid "Adds a directory to the top of the directory stack, or rotates" -#~ msgstr "Ajoute un répertoire au dessus de la pile des répertoires ou effectue une" +#~ msgstr "" +#~ "Ajoute un répertoire au dessus de la pile des répertoires ou effectue une" #~ msgid "the stack, making the new top of the stack the current working" -#~ msgstr "rotation de la pile en plaçant le répertoire supérieur comme répertoire courant." +#~ msgstr "" +#~ "rotation de la pile en plaçant le répertoire supérieur comme répertoire " +#~ "courant." #~ msgid "directory. With no arguments, exchanges the top two directories." -#~ msgstr "Sans paramètre, les deux répertoires supérieurs de la pile sont échangés." +#~ msgstr "" +#~ "Sans paramètre, les deux répertoires supérieurs de la pile sont échangés." #~ msgid "+N Rotates the stack so that the Nth directory (counting" -#~ msgstr "+N effectue une rotation de la pile de façon que le Nième répertoire soit" +#~ msgstr "" +#~ "+N effectue une rotation de la pile de façon que le Nième répertoire " +#~ "soit" #~ msgid " from the left of the list shown by `dirs', starting with" -#~ msgstr "placé au dessus (N commençant à zéro et en partant à gauche de la liste" +#~ msgstr "" +#~ "placé au dessus (N commençant à zéro et en partant à gauche de la liste" #~ msgid " zero) is at the top." #~ msgstr " fournie par « dirs »)." #~ msgid "-N Rotates the stack so that the Nth directory (counting" -#~ msgstr "+N effectue une rotation de la pile de façon que le Nième répertoire soit" +#~ msgstr "" +#~ "+N effectue une rotation de la pile de façon que le Nième répertoire " +#~ "soit" #~ msgid " from the right of the list shown by `dirs', starting with" -#~ msgstr "placé au dessus (N commençant à zéro et en partant à gauche de la liste" +#~ msgstr "" +#~ "placé au dessus (N commençant à zéro et en partant à gauche de la liste" #~ msgid "-n suppress the normal change of directory when adding directories" -#~ msgstr "-n inhibe le changement de répertoire lors d'un ajout de répertoire " +#~ msgstr "" +#~ "-n inhibe le changement de répertoire lors d'un ajout de répertoire " #~ msgid " to the stack, so only the stack is manipulated." #~ msgstr " à la liste. Seule la pile est manipulée." #~ msgid "dir adds DIR to the directory stack at the top, making it the" -#~ msgstr "dir ajoute « DIR » au dessus de la pile des répertoires, en faisant de lui" +#~ msgstr "" +#~ "dir ajoute « DIR » au dessus de la pile des répertoires, en faisant de " +#~ "lui" #~ msgid " new current working directory." #~ msgstr " le nouveau répertoire courant." #~ msgid "You can see the directory stack with the `dirs' command." -#~ msgstr "Vous pouvez voir le contenu de la pile des répertoires avec la commande « dirs »." +#~ msgstr "" +#~ "Vous pouvez voir le contenu de la pile des répertoires avec la commande " +#~ "« dirs »." #~ msgid "Removes entries from the directory stack. With no arguments," #~ msgstr "Enlève des éléments de la pile des répertoires. Sans paramètre," @@ -5833,8 +6639,11 @@ msgstr "" #~ msgid " removes the last directory, `popd -1' the next to last." #~ msgstr " enlève le dernier répertoire, « popd -1 » l'avant-dernier." -#~ msgid "-n suppress the normal change of directory when removing directories" -#~ msgstr "-n inhibe le changement de répertoire lors de l'enlèvement d'un répertoire" +#~ msgid "" +#~ "-n suppress the normal change of directory when removing directories" +#~ msgstr "" +#~ "-n inhibe le changement de répertoire lors de l'enlèvement d'un " +#~ "répertoire" #~ msgid " from the stack, so only the stack is manipulated." #~ msgstr " de la liste. Seule la pile est manipulée." @@ -5864,7 +6673,8 @@ msgstr "" #~ msgstr "xrealloc : impossible d'allouer %lu octets" #~ msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)" -#~ msgstr "xrealloc : %s:%d : impossible de réallouer %lu octets (%lu octets alloués)" +#~ msgstr "" +#~ "xrealloc : %s:%d : impossible de réallouer %lu octets (%lu octets alloués)" #~ msgid "" #~ "Exit from within a FOR, WHILE or UNTIL loop. If N is specified,\n" @@ -5878,15 +6688,18 @@ msgstr "" #~ " shell builtin to be a function, but need the functionality of the\n" #~ " builtin within the function itself." #~ msgstr "" -#~ "Lance une primitive du shell. Ceci est utile lorsque vous souhaitez nommer une fonction comme\n" -#~ " une primitive, mais que vous avez besoin d'utiliser la primitive dans la fonction elle-même." +#~ "Lance une primitive du shell. Ceci est utile lorsque vous souhaitez " +#~ "nommer une fonction comme\n" +#~ " une primitive, mais que vous avez besoin d'utiliser la primitive dans " +#~ "la fonction elle-même." #~ msgid "" #~ "Print the current working directory. With the -P option, pwd prints\n" #~ " the physical directory, without any symbolic links; the -L option\n" #~ " makes pwd follow symbolic links." #~ msgstr "" -#~ "Affiche le répertoire de travail actuel. Avec l'option « -P », « pwd » affiche\n" +#~ "Affiche le répertoire de travail actuel. Avec l'option « -P », « pwd » " +#~ "affiche\n" #~ " le répertoire physique, sans lien symbolique ; l'option « -L »\n" #~ " demande à « pwd » de suivre les liens symboliques." @@ -5896,17 +6709,26 @@ msgstr "" #~ msgid "" #~ "Runs COMMAND with ARGS ignoring shell functions. If you have a shell\n" #~ " function called `ls', and you wish to call the command `ls', you can\n" -#~ " say \"command ls\". If the -p option is given, a default value is used\n" -#~ " for PATH that is guaranteed to find all of the standard utilities. If\n" -#~ " the -V or -v option is given, a string is printed describing COMMAND.\n" +#~ " say \"command ls\". If the -p option is given, a default value is " +#~ "used\n" +#~ " for PATH that is guaranteed to find all of the standard utilities. " +#~ "If\n" +#~ " the -V or -v option is given, a string is printed describing " +#~ "COMMAND.\n" #~ " The -V option produces a more verbose description." #~ msgstr "" -#~ "Lance la commande COMMAND avec les ARGS en ignorant les fonctions du shell. Si vous\n" -#~ " avez défini une fonction de shell appelée « ls » et que vous voulez appeler\n" -#~ " la commande « ls », vous pouvez faire « command ls ». Si l'option « -p » est\n" -#~ " donnée, une valeur par défaut est utilisée pour le PATH garantissant que tous\n" -#~ " les utilitaires standards seront trouvés. Si l'option « -V » ou « -v » est\n" -#~ " donnée, une description de la commande s'affiche. L'option « -V » fournit plus\n" +#~ "Lance la commande COMMAND avec les ARGS en ignorant les fonctions du " +#~ "shell. Si vous\n" +#~ " avez défini une fonction de shell appelée « ls » et que vous voulez " +#~ "appeler\n" +#~ " la commande « ls », vous pouvez faire « command ls ». Si l'option « -" +#~ "p » est\n" +#~ " donnée, une valeur par défaut est utilisée pour le PATH garantissant " +#~ "que tous\n" +#~ " les utilitaires standards seront trouvés. Si l'option « -V » ou « -" +#~ "v » est\n" +#~ " donnée, une description de la commande s'affiche. L'option « -V » " +#~ "fournit plus\n" #~ " d'informations." #~ msgid "" @@ -5918,7 +6740,8 @@ msgstr "" #~ " \n" #~ " -a\tto make NAMEs arrays (if supported)\n" #~ " -f\tto select from among function names only\n" -#~ " -F\tto display function names (and line number and source file name if\n" +#~ " -F\tto display function names (and line number and source file name " +#~ "if\n" #~ " \tdebugging) without definitions\n" #~ " -i\tto make NAMEs have the `integer' attribute\n" #~ " -r\tto make NAMEs readonly\n" @@ -5932,32 +6755,40 @@ msgstr "" #~ " and definition. The -F option restricts the display to function\n" #~ " name only.\n" #~ " \n" -#~ " Using `+' instead of `-' turns off the given attribute instead. When\n" +#~ " Using `+' instead of `-' turns off the given attribute instead. " +#~ "When\n" #~ " used in a function, makes NAMEs local, as with the `local' command." #~ msgstr "" -#~ "Déclare des variables ou ajoute des attributs aux variables. Si aucun nom\n" -#~ " n'est donné, affiche plutôt les valeurs des variables. L'option « -p »\n" +#~ "Déclare des variables ou ajoute des attributs aux variables. Si aucun " +#~ "nom\n" +#~ " n'est donné, affiche plutôt les valeurs des variables. L'option « -" +#~ "p »\n" #~ " permet d'afficher les attributs et les valeurs de chaque NAME.\n" #~ " \n" #~ " Les options sont :\n" #~ " \n" #~ " -a\tpour faire des tableaux de NAME (si pris en charge)\n" #~ " -f\tpour choisir uniquement parmi les noms de fonctions\n" -#~ " -F\tpour afficher les noms de fonctions (et les numéros de ligne et le\n" +#~ " -F\tpour afficher les noms de fonctions (et les numéros de ligne et " +#~ "le\n" #~ " \tfichier source si le mode de débogage est activé\n" #~ " -i\tpour que les NAME aient l'attribut « integer »\n" #~ " -r\tpour que les NAME soient en lecture seule\n" #~ " -t\tpour que les NAME aient l'attribut « trace »\n" #~ " -x\tpour faire un export des NAME\n" #~ " \n" -#~ " L'évaluation arithmétique des variables ayant l'attribut « integer » est\n" +#~ " L'évaluation arithmétique des variables ayant l'attribut « integer » " +#~ "est\n" #~ " effectuée au moment de l'affectation (voir « let »).\n" #~ " \n" -#~ " Lors de l'affichage des valeurs de variables, -f affiche le nom de la fonction\n" +#~ " Lors de l'affichage des valeurs de variables, -f affiche le nom de la " +#~ "fonction\n" #~ " et sa définition. L'option -F permet de n'afficher que le nom.\n" #~ " \n" -#~ " Un attribut peut être désactivé en utilisant « + » au lieu de « - ». Dans une\n" -#~ " fonction, ceci a pour effet de rendre les NAME locaux, comme avec la commande «local »." +#~ " Un attribut peut être désactivé en utilisant « + » au lieu de « - ». " +#~ "Dans une\n" +#~ " fonction, ceci a pour effet de rendre les NAME locaux, comme avec la " +#~ "commande «local »." #~ msgid "Obsolete. See `declare'." #~ msgstr "Obsolète. Consulter « declare »." @@ -5967,11 +6798,15 @@ msgstr "" #~ " can only be used within a function; it makes the variable NAME\n" #~ " have a visible scope restricted to that function and its children." #~ msgstr "" -#~ "Permet de créer une variable locale appelée NAME, et de lui affecter une VALUE.\n" -#~ " LOCAL peut seulement être utilisé à l'intérieur d'une fonction ; il rend le nom de\n" -#~ " variable NAME visible uniquement à l'intérieur de la fonction et de ses filles." +#~ "Permet de créer une variable locale appelée NAME, et de lui affecter une " +#~ "VALUE.\n" +#~ " LOCAL peut seulement être utilisé à l'intérieur d'une fonction ; il " +#~ "rend le nom de\n" +#~ " variable NAME visible uniquement à l'intérieur de la fonction et de " +#~ "ses filles." -#~ msgid "Output the ARGs. If -n is specified, the trailing newline is suppressed." +#~ msgid "" +#~ "Output the ARGs. If -n is specified, the trailing newline is suppressed." #~ msgstr "Affiche les ARGs. L'option « -n » supprime le saut de ligne final." #~ msgid "" @@ -5986,25 +6821,39 @@ msgstr "" #~ " previously loaded with -f. If no non-option names are given, or\n" #~ " the -p option is supplied, a list of builtins is printed. The\n" #~ " -a option means to print every builtin with an indication of whether\n" -#~ " or not it is enabled. The -s option restricts the output to the POSIX.2\n" -#~ " `special' builtins. The -n option displays a list of all disabled builtins." +#~ " or not it is enabled. The -s option restricts the output to the " +#~ "POSIX.2\n" +#~ " `special' builtins. The -n option displays a list of all disabled " +#~ "builtins." #~ msgstr "" #~ "Active et désactive les primitives du shell. Ceci permet\n" -#~ " d'utiliser une commande du disque qui a le même nom qu'une commande intégrée\n" +#~ " d'utiliser une commande du disque qui a le même nom qu'une commande " +#~ "intégrée\n" #~ " sans devoir spécifier un chemin complet. Si « -n » est utilisé, les\n" -#~ " noms NAME sont désactivés ; sinon, les noms NAME sont activés. Par exemple,\n" +#~ " noms NAME sont désactivés ; sinon, les noms NAME sont activés. Par " +#~ "exemple,\n" #~ " pour utiliser « test » trouvé dans $PATH au lieu de la primitive du\n" -#~ " même nom, tapez « enable -n test ». Sur les systèmes permettant le chargement\n" -#~ " dynamique, l'option « -f » peut être utilisée pour charger de nouvelles primitives\n" -#~ " depuis l'objet partagé FILENAME. L'option « -d » efface une primitive précédemment\n" -#~ " chargée avec « -f ». Si aucun nom (n'étant pas une option) n'est donné, ou si l'option\n" -#~ " « -p » est spécifiée, une liste de primitive est affichée. L'option « -a » permet d'afficher\n" -#~ " toutes les primitives en précisant si elles sont activées ou non. L'option « -s » restreint\n" -#~ " la sortie aux primitives « special » POSIX.2. L'option « -n » affiche une liste de toutes les\n" +#~ " même nom, tapez « enable -n test ». Sur les systèmes permettant le " +#~ "chargement\n" +#~ " dynamique, l'option « -f » peut être utilisée pour charger de " +#~ "nouvelles primitives\n" +#~ " depuis l'objet partagé FILENAME. L'option « -d » efface une " +#~ "primitive précédemment\n" +#~ " chargée avec « -f ». Si aucun nom (n'étant pas une option) n'est " +#~ "donné, ou si l'option\n" +#~ " « -p » est spécifiée, une liste de primitive est affichée. L'option " +#~ "« -a » permet d'afficher\n" +#~ " toutes les primitives en précisant si elles sont activées ou non. " +#~ "L'option « -s » restreint\n" +#~ " la sortie aux primitives « special » POSIX.2. L'option « -n » affiche " +#~ "une liste de toutes les\n" #~ " primitives désactivées." -#~ msgid "Read ARGs as input to the shell and execute the resulting command(s)." -#~ msgstr "Lit les ARGs comme une entrée du shell et exécute les commandes résultantes." +#~ msgid "" +#~ "Read ARGs as input to the shell and execute the resulting command(s)." +#~ msgstr "" +#~ "Lit les ARGs comme une entrée du shell et exécute les commandes " +#~ "résultantes." #~ msgid "" #~ "Exec FILE, replacing this shell with the specified program.\n" @@ -6016,14 +6865,16 @@ msgstr "" #~ " If the file cannot be executed and the shell is not interactive,\n" #~ " then the shell exits, unless the shell option `execfail' is set." #~ msgstr "" -#~ "Exécute le fichier FILE en remplaçant ce shell par le programme spécifié.\n" +#~ "Exécute le fichier FILE en remplaçant ce shell par le programme " +#~ "spécifié.\n" #~ " Si FILE n'est pas spécifié, les redirections prennent effet dans\n" #~ " ce shell. Si le premier argument est « -l », un tiret est placé dans\n" #~ " l'argument n°0 transmis à FILE, comme le fait « login ». Si l'option\n" #~ " « -c » est fournie, FILE est exécuté avec un environnement vide.\n" #~ " L'option « -a » indique de définir « argv[0] » du processus exécuté\n" #~ " à NAME. Si le fichier ne peut pas être exécuté et que le shell n'est\n" -#~ " pas interactif, alors le shell se termine, à moins que l'option « execfail »\n" +#~ " pas interactif, alors le shell se termine, à moins que l'option " +#~ "« execfail »\n" #~ " ne soit définie." #~ msgid "Logout of a login shell." @@ -6034,22 +6885,36 @@ msgstr "" #~ " remembered. If the -p option is supplied, PATHNAME is used as the\n" #~ " full pathname of NAME, and no path search is performed. The -r\n" #~ " option causes the shell to forget all remembered locations. The -d\n" -#~ " option causes the shell to forget the remembered location of each NAME.\n" +#~ " option causes the shell to forget the remembered location of each " +#~ "NAME.\n" #~ " If the -t option is supplied the full pathname to which each NAME\n" -#~ " corresponds is printed. If multiple NAME arguments are supplied with\n" -#~ " -t, the NAME is printed before the hashed full pathname. The -l option\n" -#~ " causes output to be displayed in a format that may be reused as input.\n" -#~ " If no arguments are given, information about remembered commands is displayed." +#~ " corresponds is printed. If multiple NAME arguments are supplied " +#~ "with\n" +#~ " -t, the NAME is printed before the hashed full pathname. The -l " +#~ "option\n" +#~ " causes output to be displayed in a format that may be reused as " +#~ "input.\n" +#~ " If no arguments are given, information about remembered commands is " +#~ "displayed." #~ msgstr "" -#~ "Pour chaque NAME, le chemin complet de la commande est déterminé puis mémorisé.\n" -#~ " Si l'option « -p » est fournie, le CHEMIN est utilisé comme chemin complet\n" -#~ " pour NAME, et aucune recherche n'est effectuée. L'option « -r » demande au shell\n" -#~ " d'oublier tous les chemins mémorisés. L'option « -d » demande au shell d'oublier\n" -#~ " les chemins mémorisés pour le NAME. Si l'option « -t » est fournie, le chemin\n" -#~ " complet auquel correspond chaque NAME est affiché. Si plusieurs NAME sont fournis\n" -#~ " à l'option « -t », le NAME est affiché avant chemin complet haché. L'option\n" -#~ " « -l » permet d'utiliser un format de sortie qui peut être réutilisé comme entrée.\n" -#~ " Si aucun argument n'est donné, des informations sur les commandes mémorisées sont\n" +#~ "Pour chaque NAME, le chemin complet de la commande est déterminé puis " +#~ "mémorisé.\n" +#~ " Si l'option « -p » est fournie, le CHEMIN est utilisé comme chemin " +#~ "complet\n" +#~ " pour NAME, et aucune recherche n'est effectuée. L'option « -r » " +#~ "demande au shell\n" +#~ " d'oublier tous les chemins mémorisés. L'option « -d » demande au " +#~ "shell d'oublier\n" +#~ " les chemins mémorisés pour le NAME. Si l'option « -t » est fournie, " +#~ "le chemin\n" +#~ " complet auquel correspond chaque NAME est affiché. Si plusieurs NAME " +#~ "sont fournis\n" +#~ " à l'option « -t », le NAME est affiché avant chemin complet haché. " +#~ "L'option\n" +#~ " « -l » permet d'utiliser un format de sortie qui peut être réutilisé " +#~ "comme entrée.\n" +#~ " Si aucun argument n'est donné, des informations sur les commandes " +#~ "mémorisées sont\n" #~ " affichées." #~ msgid "" @@ -6060,75 +6925,120 @@ msgstr "" #~ " a short usage synopsis." #~ msgstr "" #~ "Affiche des informations utiles sur les commandes intégrées. Si MOTIF\n" -#~ " est précisé, une aide détaillée sur toutes les commandes correspondant\n" +#~ " est précisé, une aide détaillée sur toutes les commandes " +#~ "correspondant\n" #~ " au MOTIF sont affichées, sinon une liste des commandes intégrées est\n" #~ " fournie. L'option « -s » restreint l'affichage de chaque commande\n" #~ " correspondant au MOTIF à une courte description sur l'utilisation." #~ msgid "" #~ "By default, removes each JOBSPEC argument from the table of active jobs.\n" -#~ " If the -h option is given, the job is not removed from the table, but is\n" +#~ " If the -h option is given, the job is not removed from the table, but " +#~ "is\n" #~ " marked so that SIGHUP is not sent to the job if the shell receives a\n" -#~ " SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all\n" -#~ " jobs from the job table; the -r option means to remove only running jobs." +#~ " SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove " +#~ "all\n" +#~ " jobs from the job table; the -r option means to remove only running " +#~ "jobs." #~ msgstr "" -#~ "Par défaut, enlève tous les arguments JOBSPEC de la table des tâches actives.\n" -#~ " Si l'option « -h » est fournie, la tâche n'est pas retirée de la table mais\n" -#~ " est marquée de telle sorte que le signal SIGHUP ne lui soit pas envoyé quand\n" -#~ " le shell reçoit un SIGHUP. Lorsque JOBSPEC n'est pas fournie, l'option « -a »,\n" -#~ " permet d'enlever toutes les tâches de la table des tâches. L'option « -r »\n" +#~ "Par défaut, enlève tous les arguments JOBSPEC de la table des tâches " +#~ "actives.\n" +#~ " Si l'option « -h » est fournie, la tâche n'est pas retirée de la " +#~ "table mais\n" +#~ " est marquée de telle sorte que le signal SIGHUP ne lui soit pas " +#~ "envoyé quand\n" +#~ " le shell reçoit un SIGHUP. Lorsque JOBSPEC n'est pas fournie, " +#~ "l'option « -a »,\n" +#~ " permet d'enlever toutes les tâches de la table des tâches. L'option " +#~ "« -r »\n" #~ " indique de ne retirer que les tâches en cours de fonctionnement." #~ msgid "" -#~ "One line is read from the standard input, or from file descriptor FD if the\n" -#~ " -u option is supplied, and the first word is assigned to the first NAME,\n" -#~ " the second word to the second NAME, and so on, with leftover words assigned\n" -#~ " to the last NAME. Only the characters found in $IFS are recognized as word\n" -#~ " delimiters. If no NAMEs are supplied, the line read is stored in the REPLY\n" -#~ " variable. If the -r option is given, this signifies `raw' input, and\n" -#~ " backslash escaping is disabled. The -d option causes read to continue\n" -#~ " until the first character of DELIM is read, rather than newline. If the -p\n" -#~ " option is supplied, the string PROMPT is output without a trailing newline\n" -#~ " before attempting to read. If -a is supplied, the words read are assigned\n" -#~ " to sequential indices of ARRAY, starting at zero. If -e is supplied and\n" -#~ " the shell is interactive, readline is used to obtain the line. If -n is\n" +#~ "One line is read from the standard input, or from file descriptor FD if " +#~ "the\n" +#~ " -u option is supplied, and the first word is assigned to the first " +#~ "NAME,\n" +#~ " the second word to the second NAME, and so on, with leftover words " +#~ "assigned\n" +#~ " to the last NAME. Only the characters found in $IFS are recognized " +#~ "as word\n" +#~ " delimiters. If no NAMEs are supplied, the line read is stored in the " +#~ "REPLY\n" +#~ " variable. If the -r option is given, this signifies `raw' input, " +#~ "and\n" +#~ " backslash escaping is disabled. The -d option causes read to " +#~ "continue\n" +#~ " until the first character of DELIM is read, rather than newline. If " +#~ "the -p\n" +#~ " option is supplied, the string PROMPT is output without a trailing " +#~ "newline\n" +#~ " before attempting to read. If -a is supplied, the words read are " +#~ "assigned\n" +#~ " to sequential indices of ARRAY, starting at zero. If -e is supplied " +#~ "and\n" +#~ " the shell is interactive, readline is used to obtain the line. If -n " +#~ "is\n" #~ " supplied with a non-zero NCHARS argument, read returns after NCHARS\n" #~ " characters have been read. The -s option causes input coming from a\n" #~ " terminal to not be echoed.\n" #~ " \n" -#~ " The -t option causes read to time out and return failure if a complete line\n" -#~ " of input is not read within TIMEOUT seconds. If the TMOUT variable is set,\n" -#~ " its value is the default timeout. The return code is zero, unless end-of-file\n" -#~ " is encountered, read times out, or an invalid file descriptor is supplied as\n" +#~ " The -t option causes read to time out and return failure if a " +#~ "complete line\n" +#~ " of input is not read within TIMEOUT seconds. If the TMOUT variable " +#~ "is set,\n" +#~ " its value is the default timeout. The return code is zero, unless " +#~ "end-of-file\n" +#~ " is encountered, read times out, or an invalid file descriptor is " +#~ "supplied as\n" #~ " the argument to -u." #~ msgstr "" -#~ "Une ligne est lue depuis l'entrée standard ou depuis le descripteur de fichier\n" -#~ " FD si l'option « -u » est fournie. Le premier mot est affecté au premier NAME,\n" -#~ " le second mot au second NAME, et ainsi de suite, les mots restants étant affectés\n" -#~ " au dernier NAME. Seuls les caractères situés dans « $IFS » sont reconnus comme\n" -#~ " étant des délimiteurs de mots. Si aucun NAME n'est fourni, la ligne est conservée\n" -#~ " dans la variable REPLY. L'option « -r » signifie « entrée brute » et la neutralisation \n" -#~ " par barre oblique inverse est désactivée. L'option « -d » indique de continuer\" la lecture jusqu'à ce que le premier caractère de DELIM soit lu plutôt que\n" -#~ " le retour à la ligne. Si « -p » est fourni, la chaîne PROMPT est affichée\n" -#~ " sans retour à la ligne final avant la tentative de lecture. Si « -a » est fourni,\n" -#~ " les mots lus sont affectés en séquence aux indices du TABLEAU, en commençant\n" -#~ " à zéro. Si « -e » est fourni et que le shell est interactif, « readline » est\n" -#~ " utilisé pour obtenir la ligne. Si « -n » est fourni avec un argument NCHARS non nul,\n" -#~ " « read » se termine après que NCHARS caractères ont été lus. L'option « -s »\n" +#~ "Une ligne est lue depuis l'entrée standard ou depuis le descripteur de " +#~ "fichier\n" +#~ " FD si l'option « -u » est fournie. Le premier mot est affecté au " +#~ "premier NAME,\n" +#~ " le second mot au second NAME, et ainsi de suite, les mots restants " +#~ "étant affectés\n" +#~ " au dernier NAME. Seuls les caractères situés dans « $IFS » sont " +#~ "reconnus comme\n" +#~ " étant des délimiteurs de mots. Si aucun NAME n'est fourni, la ligne " +#~ "est conservée\n" +#~ " dans la variable REPLY. L'option « -r » signifie « entrée brute » et " +#~ "la neutralisation \n" +#~ " par barre oblique inverse est désactivée. L'option « -d » indique de " +#~ "continuer\" la lecture jusqu'à ce que le premier caractère de DELIM " +#~ "soit lu plutôt que\n" +#~ " le retour à la ligne. Si « -p » est fourni, la chaîne PROMPT est " +#~ "affichée\n" +#~ " sans retour à la ligne final avant la tentative de lecture. Si « -a » " +#~ "est fourni,\n" +#~ " les mots lus sont affectés en séquence aux indices du TABLEAU, en " +#~ "commençant\n" +#~ " à zéro. Si « -e » est fourni et que le shell est interactif, " +#~ "« readline » est\n" +#~ " utilisé pour obtenir la ligne. Si « -n » est fourni avec un argument " +#~ "NCHARS non nul,\n" +#~ " « read » se termine après que NCHARS caractères ont été lus. L'option " +#~ "« -s »\n" #~ " permet aux données venant d'un terminal de ne pas être répétées.\n" #~ " \n" -#~ " L'option « -t » permet à « read » de se terminer avec une erreur si une ligne\n" -#~ " entière de données ne lui a pas été fournie avant le DÉLAI d'expiration. Si la\n" -#~ " variable TMOUT est définie, sa valeur est le délai d'expiration par défaut. Le code\n" -#~ " de retour est zéro à moins qu'une fin de fichier ne soit rencontrée, que « read »\n" -#~ " atteigne le délai d'expiration ou qu'un descripteur de fichier incorrect ne soit\n" +#~ " L'option « -t » permet à « read » de se terminer avec une erreur si " +#~ "une ligne\n" +#~ " entière de données ne lui a pas été fournie avant le DÉLAI " +#~ "d'expiration. Si la\n" +#~ " variable TMOUT est définie, sa valeur est le délai d'expiration par " +#~ "défaut. Le code\n" +#~ " de retour est zéro à moins qu'une fin de fichier ne soit rencontrée, " +#~ "que « read »\n" +#~ " atteigne le délai d'expiration ou qu'un descripteur de fichier " +#~ "incorrect ne soit\n" #~ " fourni pour l'argument « -u »." #~ msgid "" #~ "Causes a function to exit with the return value specified by N. If N\n" #~ " is omitted, the return status is that of the last command." #~ msgstr "" -#~ "Permet à une fonction de se terminer avec le code de retour spécifié par N.\n" +#~ "Permet à une fonction de se terminer avec le code de retour spécifié par " +#~ "N.\n" #~ " Si N est omis, le code de retour est celui de la dernière commande." #~ msgid "" @@ -6140,9 +7050,12 @@ msgstr "" #~ msgstr "" #~ "Pour chaque NAME, supprime la variable ou la fonction correspondante.\n" #~ " En spécifiant « -v », « unset » agira seulement sur les variables.\n" -#~ " Avec l'option « -f », « unset » n'agit que sur les fonctions. Sans option,\n" -#~ " « unset » essaye d'abord de supprimer une variable et, s'il échoue, essaye\n" -#~ " de supprimer une fonction. Certaines variables ne peuvent pas être supprimées.\n" +#~ " Avec l'option « -f », « unset » n'agit que sur les fonctions. Sans " +#~ "option,\n" +#~ " « unset » essaye d'abord de supprimer une variable et, s'il échoue, " +#~ "essaye\n" +#~ " de supprimer une fonction. Certaines variables ne peuvent pas être " +#~ "supprimées.\n" #~ " Consultez aussi « readonly ». " #~ msgid "" @@ -6155,27 +7068,39 @@ msgstr "" #~ " processing." #~ msgstr "" #~ "Les NAME sont marqués pour export automatique vers l'environnement des\n" -#~ " prochaines commandes exécutées. si l'option « -f » est donnée, les NAME\n" -#~ " se rapportent à des fonctions. Si aucun NAME n'est donné ou si « -p »\n" -#~ " est fourni, la liste de tous les NAME exportés dans ce shell s'affiche.\n" -#~ " L'argument « -n » permet de supprimer la propriété d'export des NAME qui\n" -#~ " suivent. L'argument « -- » désactive le traitement des options suivantes." +#~ " prochaines commandes exécutées. si l'option « -f » est donnée, les " +#~ "NAME\n" +#~ " se rapportent à des fonctions. Si aucun NAME n'est donné ou si « -" +#~ "p »\n" +#~ " est fourni, la liste de tous les NAME exportés dans ce shell " +#~ "s'affiche.\n" +#~ " L'argument « -n » permet de supprimer la propriété d'export des NAME " +#~ "qui\n" +#~ " suivent. L'argument « -- » désactive le traitement des options " +#~ "suivantes." #~ msgid "" #~ "The given NAMEs are marked readonly and the values of these NAMEs may\n" #~ " not be changed by subsequent assignment. If the -f option is given,\n" #~ " then functions corresponding to the NAMEs are so marked. If no\n" -#~ " arguments are given, or if `-p' is given, a list of all readonly names\n" +#~ " arguments are given, or if `-p' is given, a list of all readonly " +#~ "names\n" #~ " is printed. The `-a' option means to treat each NAME as\n" #~ " an array variable. An argument of `--' disables further option\n" #~ " processing." #~ msgstr "" -#~ "Les NAME donnés sont marqués pour lecture seule et les valeurs de ces NAME\n" -#~ " ne peuvent plus être changés par affection. Si l'option « -f » est donnée,\n" -#~ " les fonctions correspondant aux NAME sont marquées de la sorte. Si aucun\n" -#~ " argument n'est donné ou si « -p » est fourni, la liste de tous les noms\n" -#~ " en lecture seule est affichée. L'option « -a » indique de traiter tous les\n" -#~ " NAME comme des variables tableaux. L'argument « -- » désactive le traitement\n" +#~ "Les NAME donnés sont marqués pour lecture seule et les valeurs de ces " +#~ "NAME\n" +#~ " ne peuvent plus être changés par affection. Si l'option « -f » est " +#~ "donnée,\n" +#~ " les fonctions correspondant aux NAME sont marquées de la sorte. Si " +#~ "aucun\n" +#~ " argument n'est donné ou si « -p » est fourni, la liste de tous les " +#~ "noms\n" +#~ " en lecture seule est affichée. L'option « -a » indique de traiter " +#~ "tous les\n" +#~ " NAME comme des variables tableaux. L'argument « -- » désactive le " +#~ "traitement\n" #~ " des option suivantes." #~ msgid "" @@ -6190,8 +7115,10 @@ msgstr "" #~ " signal. The `-f' if specified says not to complain about this\n" #~ " being a login shell if it is; just suspend anyway." #~ msgstr "" -#~ "Suspend l'exécution de ce shell jusqu'à ce qu'il reçoive le signal SIGCONT.\n" -#~ " Si « -f » est spécifié, il indique de ne pas se plaindre s'il s'agit d'un \n" +#~ "Suspend l'exécution de ce shell jusqu'à ce qu'il reçoive le signal " +#~ "SIGCONT.\n" +#~ " Si « -f » est spécifié, il indique de ne pas se plaindre s'il s'agit " +#~ "d'un \n" #~ " shell de connexion, mais de suspendre quand-même." #~ msgid "" @@ -6205,60 +7132,85 @@ msgstr "" #~ "For each NAME, indicate how it would be interpreted if used as a\n" #~ " command name.\n" #~ " \n" -#~ " If the -t option is used, `type' outputs a single word which is one of\n" -#~ " `alias', `keyword', `function', `builtin', `file' or `', if NAME is an\n" -#~ " alias, shell reserved word, shell function, shell builtin, disk file,\n" +#~ " If the -t option is used, `type' outputs a single word which is one " +#~ "of\n" +#~ " `alias', `keyword', `function', `builtin', `file' or `', if NAME is " +#~ "an\n" +#~ " alias, shell reserved word, shell function, shell builtin, disk " +#~ "file,\n" #~ " or unfound, respectively.\n" #~ " \n" #~ " If the -p flag is used, `type' either returns the name of the disk\n" #~ " file that would be executed, or nothing if `type -t NAME' would not\n" #~ " return `file'.\n" #~ " \n" -#~ " If the -a flag is used, `type' displays all of the places that contain\n" +#~ " If the -a flag is used, `type' displays all of the places that " +#~ "contain\n" #~ " an executable named `file'. This includes aliases, builtins, and\n" #~ " functions, if and only if the -p flag is not also used.\n" #~ " \n" #~ " The -f flag suppresses shell function lookup.\n" #~ " \n" -#~ " The -P flag forces a PATH search for each NAME, even if it is an alias,\n" -#~ " builtin, or function, and returns the name of the disk file that would\n" +#~ " The -P flag forces a PATH search for each NAME, even if it is an " +#~ "alias,\n" +#~ " builtin, or function, and returns the name of the disk file that " +#~ "would\n" #~ " be executed." #~ msgstr "" -#~ "Indique comment chaque NAME serait interprété s'il était utilisé comme un\n" +#~ "Indique comment chaque NAME serait interprété s'il était utilisé comme " +#~ "un\n" #~ " nom de commande.\n" #~ " \n" -#~ " Si l'option « -t » est utilisée, « type » affiche un simple mot parmi\n" -#~ " « alias », « keyword », « function », « builtin », « file » ou « », si\n" -#~ " NAME est respectivement un alias, un mot réservé du shell, une fonction\n" +#~ " Si l'option « -t » est utilisée, « type » affiche un simple mot " +#~ "parmi\n" +#~ " « alias », « keyword », « function », « builtin », « file » ou « », " +#~ "si\n" +#~ " NAME est respectivement un alias, un mot réservé du shell, une " +#~ "fonction\n" #~ " du shell, une primitive, un fichier du disque, ou s'il est inconnu.\n" #~ " \n" -#~ " Si l'indicateur « -p » est utilisé, « type » renvoie soit le nom du fichier\n" -#~ " du disque qui serait exécuté, soit rien si « type -t NAME » ne retourne pas\n" +#~ " Si l'indicateur « -p » est utilisé, « type » renvoie soit le nom du " +#~ "fichier\n" +#~ " du disque qui serait exécuté, soit rien si « type -t NAME » ne " +#~ "retourne pas\n" #~ " « file ».\n" #~ " \n" -#~ " Si « -a » est utilisé, « type » affiche tous les emplacements qui contiennent\n" -#~ " un exécutable nommé « file ». Ceci inclut les alias, les primitives et les\n" +#~ " Si « -a » est utilisé, « type » affiche tous les emplacements qui " +#~ "contiennent\n" +#~ " un exécutable nommé « file ». Ceci inclut les alias, les primitives " +#~ "et les\n" #~ " fonctions si, et seulement si « -p » n'est pas également utilisé.\n" #~ " \n" -#~ " L'indicateur « -P » force une recherche dans PATH pour chaque NAME même\n" -#~ " si c'est un alias, une primitive ou une fonction et renvoie le nom du\n" +#~ " L'indicateur « -P » force une recherche dans PATH pour chaque NAME " +#~ "même\n" +#~ " si c'est un alias, une primitive ou une fonction et renvoie le nom " +#~ "du\n" #~ " fichier du disque qui serait exécuté." #~ msgid "" #~ "The user file-creation mask is set to MODE. If MODE is omitted, or if\n" -#~ " `-S' is supplied, the current value of the mask is printed. The `-S'\n" -#~ " option makes the output symbolic; otherwise an octal number is output.\n" +#~ " `-S' is supplied, the current value of the mask is printed. The `-" +#~ "S'\n" +#~ " option makes the output symbolic; otherwise an octal number is " +#~ "output.\n" #~ " If `-p' is supplied, and MODE is omitted, the output is in a form\n" #~ " that may be used as input. If MODE begins with a digit, it is\n" -#~ " interpreted as an octal number, otherwise it is a symbolic mode string\n" +#~ " interpreted as an octal number, otherwise it is a symbolic mode " +#~ "string\n" #~ " like that accepted by chmod(1)." #~ msgstr "" -#~ "Le masque de création des fichiers utilisateurs est réglé à MODE. Si MODE\n" -#~ " est omis ou si « -S » est fourni, la valeur actuelle du masque est affichée\n" -#~ " L'option « -S » rend la sortie symbolique, sinon une valeur octale est\n" -#~ " est utilisée. Si « -p » est fourni et que MODE est omis, la sortie se fait\n" -#~ " dans un format qui peut être réutilisé comme entrée. Si MODE commence par\n" -#~ " un chiffre, il est interprété comme un nombre octal, sinon comme une chaîne\n" +#~ "Le masque de création des fichiers utilisateurs est réglé à MODE. Si " +#~ "MODE\n" +#~ " est omis ou si « -S » est fourni, la valeur actuelle du masque est " +#~ "affichée\n" +#~ " L'option « -S » rend la sortie symbolique, sinon une valeur octale " +#~ "est\n" +#~ " est utilisée. Si « -p » est fourni et que MODE est omis, la sortie se " +#~ "fait\n" +#~ " dans un format qui peut être réutilisé comme entrée. Si MODE commence " +#~ "par\n" +#~ " un chiffre, il est interprété comme un nombre octal, sinon comme une " +#~ "chaîne\n" #~ " symbolique de mode comme celle utilisée par « chmod(1) »." #~ msgid "" @@ -6291,23 +7243,38 @@ msgstr "" #~ " settable options is displayed, with an indication of whether or\n" #~ " not each is set." #~ msgstr "" -#~ "Commute la valeur des variables qui contrôlent les comportements optionnels.\n" -#~ " L'option « -s » indique d'activer chaque option nommée OPTNAME. L'option\n" -#~ " « -u » désactive l'option OPTNAME. L'option « -q » rend la sortie silencieuse.\n" -#~ " Le code de retour indique si chaque OPTNAME est activée ou désactivée.\n" -#~ " L'option « -o » restreint les options OPTNAME à celles qui peuvent être utilisées avec\n" -#~ " « set -o ». Sans option ou avec l'option « -p », une liste de toutes les\n" -#~ " options modifiables est affichée, avec une indication sur l'état de chacune." +#~ "Commute la valeur des variables qui contrôlent les comportements " +#~ "optionnels.\n" +#~ " L'option « -s » indique d'activer chaque option nommée OPTNAME. " +#~ "L'option\n" +#~ " « -u » désactive l'option OPTNAME. L'option « -q » rend la sortie " +#~ "silencieuse.\n" +#~ " Le code de retour indique si chaque OPTNAME est activée ou " +#~ "désactivée.\n" +#~ " L'option « -o » restreint les options OPTNAME à celles qui peuvent " +#~ "être utilisées avec\n" +#~ " « set -o ». Sans option ou avec l'option « -p », une liste de toutes " +#~ "les\n" +#~ " options modifiables est affichée, avec une indication sur l'état de " +#~ "chacune." #~ msgid "" #~ "For each NAME, specify how arguments are to be completed.\n" -#~ " If the -p option is supplied, or if no options are supplied, existing\n" -#~ " completion specifications are printed in a way that allows them to be\n" -#~ " reused as input. The -r option removes a completion specification for\n" -#~ " each NAME, or, if no NAMEs are supplied, all completion specifications." +#~ " If the -p option is supplied, or if no options are supplied, " +#~ "existing\n" +#~ " completion specifications are printed in a way that allows them to " +#~ "be\n" +#~ " reused as input. The -r option removes a completion specification " +#~ "for\n" +#~ " each NAME, or, if no NAMEs are supplied, all completion " +#~ "specifications." #~ msgstr "" #~ "Pour chaque NAME, spécifie comment les arguments doivent être complétés.\n" -#~ " Si l'option « -p » est fournie ou si aucune option n'est fournie, les spécifications\n" -#~ " de complètement actuelles sont affichées de manière à pouvoir être réutilisées\n" -#~ " comme entrée. L'option « -r » enlève la spécification de complètement pour chaque\n" -#~ " NAME ou, si aucun NAME n'est fourni, toutes les spécifications de complètement." +#~ " Si l'option « -p » est fournie ou si aucune option n'est fournie, les " +#~ "spécifications\n" +#~ " de complètement actuelles sont affichées de manière à pouvoir être " +#~ "réutilisées\n" +#~ " comme entrée. L'option « -r » enlève la spécification de complètement " +#~ "pour chaque\n" +#~ " NAME ou, si aucun NAME n'est fourni, toutes les spécifications de " +#~ "complètement." diff --git a/po/ga.gmo b/po/ga.gmo index 88309c9d9a07c418e7e4204d96bfb09564458b2d..491d6049e72167205ee45e77557cd80150607f8e 100644 GIT binary patch delta 11694 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 Ml!^+C)1CFd0q@_dn*aa+ delta 18619 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 diff --git a/po/ga.po b/po/ga.po index d62526123..e7cd5756a 100644 --- a/po/ga.po +++ b/po/ga.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2019-01-16 21:05+0000\n" "Last-Translator: Séamus Ó Ciardhuáin <sociardhuain@gmail.com>\n" "Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n" @@ -20,127 +20,127 @@ msgstr "" "Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :" "(n>6 && n<11) ? 3 : 4;\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "droch-fhoscript eagair" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: aitreabúid nameref (tagairt athróga) á baint" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "" "%s: ní féidir eagar innéacsaithe a thiontú go heagar comhthiomsaitheach" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: ní féidir sannadh go hinnéacs neamhuimhriúil." -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "" "%s: %s: caithfear foscript a úsáid le sannadh chuig eagar comhthiomsaitheach" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: ní féidir cruthú: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "bash_execute_unix_command: ní féidir mapa eochrach an ordaithe a aimsiú" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: ní \" an chéad charachtar nach spás bán é." -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "Níl '%c' dúnta i %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: deighilteoir idirstaid ar iarraidh" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "'%s': ní féidir dícheangail" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "fairsingiú lúibíní: ní féidir cuimhne a leithdháileadh le haghaidh %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" "fairsingiú lúibíní: theip ar leithdháileadh cuimhne le haghaidh %u eilimint" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "fairsingiú lúibíní: theip ar leithdháileadh cuimhne le haghaidh '%s'" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "'%s': ainm neamhbhailí ar mhapa eochrach" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "níl eagarthóireacht líne cumasaithe" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "'%s': ainm neamhbhailí ar mhapa eochrach " -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: ní féidir léamh: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "'%s': ainm feidhme neamhaithnid" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "Níl %s ceangailte le heochair ar bith.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "Is féidir %s a ghlaoigh trí " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "'%s': ní féidir dícheangail" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "comhaireamh lúibe" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "Gan chiall ach i lúb 'for', 'while' nó 'until'" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -150,7 +150,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Aischuir comhthéacs an ghlaoigh reatha fhoghnáthaimh.\n" " \n" @@ -167,355 +171,365 @@ msgstr "" "blaoisce, nó\n" " sa chás go bhfuil SLONN neamhbhailí." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "Níl HOME socruithe" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "An iomarca argóintí" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "comhadlann neamhnitheach" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "Níl OLDPWD socruithe" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "líne %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "rabhadh: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: úsáid: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: tá argóint riachtanach don rogha" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: argóint uimhriúil de dhíth" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: gan aimsiú" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: rogha neamhbhailí" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: ainm neamhbhailí rogha" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "'%s': ní aitheantóir bailí é" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "uimhir ochtnártha neamhbhailí" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "uimhir heicsidheachúlach neamhbhailí" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "uimhir neamhbhailí" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: sonrú neamhbhailí comhartha" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "'%s': ní aitheantas próisis nó sonrú taisc bailí é" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: athróg inléite amháin" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: ní féidir díshocrú" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s as raon" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argóint" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s as raon" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: níl a léithéid de tasc ann." -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: gan rialú tascanna." -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "Gan rialú tascanna." -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: srianta" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "srianta" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: ní ordú ionsuite blaoisce é." -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "earráid scríofa: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "earráid agus airíonna teirminéil á socrú: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "earráid agus airíonna teirminéil á fáil: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: earráid ag fáil na comhadlainne reatha: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: sonrú taisc athbhríoch" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "Níl cabhair ar fáil sa leagan seo." -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: ní eagar innéacsaithe é" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: ní féidir díshocrú: %s inléite amháin" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: ní féidir díshocrú" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: ainm neamhbhailí gnímh" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: níl sonrú iomlánaithe ann." -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "" "Rabhadh: b'fhéidir nach n-oibríonn an rogha -F mar a bheifeá ag súil leis." -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "" "Rabhadh: b'fhéidir nach n-oibríonn an rogha -C mar a bheifeá ag súil leis." -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "níl an fheidhm chomhlánaithe á rith faoi láthair" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "Inúsáidte i bhfeidhmeanna amháin. " -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "Ní féidir '-f' a úsáid chun feidhmeanna a dhéanamh" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: feidhm inléite amháin" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: ní féidir le athróg thagartha bheith ina h-eagar" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" "%s: ní cheadaítear tagairtí don athróg féin i nameref (tagairt athróga)" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: tagairt ainm ciorclach" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "'%s': ainm neamhbhailí athróige le haghaidh tagairt ainm" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: ní féidir athróga eagair a scrios mar seo." -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "" "%s: ní féidir eagar comhthiomsaitheach a thiontú go heagar innéacsaithe" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: cáintear sannadh na gcomheagar athfhriotail" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "Níl luchtú dinimiciúil ar fáil" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "Ní féidir an réad comhroinnte %s a oscailt: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "Ní féidir %s a aimsiú sa réad comhroinnte %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: níl sé luchtaithe go dinimiciúil" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" "Theip ar an ngníomh luchtála le haghaidh %s (aiscuireadh %d): níor " "luchtáladh é" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: níl sé luchtaithe go dinimiciúil" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: ní féidir scrios: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: is comhadlann é" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: ní gnáthchomhad é" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: tá an comhad ró-mhór" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: ní féidir comhad dénártha a rith" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: ní féidir rith: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "logout\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "Ní blaosc logála isteach é seo: úsáid 'exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Tá tascanna stoptha ann.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Tá tascanna ag rith.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "Níor aimsíodh ordú" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "Sonrú staire" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: ní féidir comhad sealadach a oscailt: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "reatha" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "Tosaíodh tasc %d gan rialú tascanna." @@ -530,11 +544,11 @@ msgstr "%s: rogha neamhdhleathach -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: tá argóint riachtanach don rogha -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "Tá haiseáil díchumasaithe." -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: tá an tábla haiseála folamh.\n" @@ -567,12 +581,12 @@ msgstr "" "Ní mheaitseálann ábhar cabhrach ar bith \"%s\". Bain triail as \"help help\" " "nó \"man -k %s\" nó \"info %s\"." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: ní féidir oscailt: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -592,21 +606,31 @@ msgstr "" "Ciallaíonn réalt (*) ar ainm go bhfuil an t-ordú díchumasaithe.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "Ní féidir níos mó ná ceann amháin as -anrw a úsáid." -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "suíomh staire" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "ainm folamh athróga eagair" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: paraiméadar neamhnitheach nó gan socrú." + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: stampa ama neamhbhailí" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: theip ar fhairsingiú staire." @@ -620,113 +644,113 @@ msgstr "%s: theip ar inlib" msgid "no other options allowed with `-x'" msgstr "Níl roghanna eile ceadaithe le '-x'" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: is gá le argóintí bheith ina aitheantais phróisis nó taisc" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Earráid neamhaithnid" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "Ag súil le slonn" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: ní eagar innéacsaithe é" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: sonrú neamhbhailí tuairisceora comhaid" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: tuairisceoir comhaid neamhbhailí: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: comhaireamh neamhbhailí línte" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: bunphointe neamhbhailí eagair" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: candam neamhbhailí aisghlaoigh" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "ainm folamh athróga eagair" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "tacaíocht le hathróga eagair de dhíth" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "'%s': carachtar formáide ar iarraidh." -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "'%c': sonrú neamhbhailí formáide ama" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "'%c': carachtar formáide neamhbhailí." -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "rabhadh: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "fadhb i bpársáil formáide: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "digit heicsidheachúlach ar iarraidh le haghaidh \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "digit Unicode ar iarraidh le haghaidh \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "Níl comhadlann eile ann" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: argóint neamhbhailí" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<níl comhadlann reatha ann>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "cruach chomhadlainne fholamh" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "innéacs chruach na gcomhadlann" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -771,7 +795,7 @@ msgstr "" " \tan liosta a thaispeántar le \"dirs\" rite gan argóintí, ag tosú ó " "náid." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -820,7 +844,7 @@ msgstr "" " \n" " Taispeánann an t-ordú ionsuite \"dirs\" cruach na gcomhadlann." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -861,321 +885,333 @@ msgstr "" " \n" " Taispeánann an t-ordú ionsuite \"dirs\" cruach na gcomhadlann." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: sonrú neamhbhailí teorann ama" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "Earráid léite: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "" "Ní féidir \"return\" a dhéanamh ach ó fheidhm nó ó script rite le \"source\"" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "Ní féidir feidhm agus athróg a dhíshocrú ag an am céanna." -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: ní athróg eagair é" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: ní feidhm é." -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: ní féidir easpórtáil" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "comhaireamh iomlaoide" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "Ní féidir roghanna blaoisce a shocrú agus a dhíshocrú ag an am céanna." -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: ainm neamhbhailí ar rogha blaoisce" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "Is gá don argóint bheith ina ainm comhaid." -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: níor aimsíodh an comhad" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "Ní féidir cur ar fionraí." -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "Ní féidir blaosc logála isteach a chur ar fionraí." -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "Tá %s ailiasáilte go '%s'.\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "Is eochairfhocal blaoisce é %s.\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "Is feidhm é %s.\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "Is ordú ionsuite blaoisce speisialta é %s\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "Is feidhm é %s.\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "Is ordú ionsuite blaoisce é %s\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "Tá %s %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "Tá %s haiseáilte (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: argóint teorann neamhbhailí" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "'%c': droch-ordú" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: ní féidir teorainn a fháil: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "teorainn" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: ní féidir teorainn a athrú: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "uimhir ochtnártha" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "'%c': oibreoir neamhbhailí móid shiombalaigh" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "'%c': carachtar neamhbhailí móid shiombalaigh" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " líne " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "Ordú deireanach: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Ag tobscor..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "EOLAS: " -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "rabhadh: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "earráid ordaithe neamhaithnid" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "droch-chineál ordaithe" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "drochnascóir" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "drochléim" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: athróg neamhcheangailte" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aImithe thar am ag feitheamh le hionchur: logáil amach uathoibríoch\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "Ní féidir an ionchur caighdeánach a atreorú ó /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "FORMÁID_AMA: '%c': carachtar formáide neamhbhaií." -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: tá an comhphróiseas [%d:%s] fós ann" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "earráid phíopa" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: imithe thar uasleibhéal neadaithe eval (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: imithe thar uasleibhéal neadaithe foinse (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: imithe thar uasleibhéal neadaithe feidhme (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: srianta: ní féidir \"/\" a shonrú in ainmneacha ordaithe" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: níor aimsíodh an t-ordú" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: drochléirmhínitheoir" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: ní féidir comhad dénártha a rith" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: drochléirmhínitheoir" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: ní féidir comhad dénártha a rith: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "Is ordú ionsuite speisialta é '%s'" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "" "Ní féidir an tuairisceoir comhaid %d a dhúbailt mar thuairisceoir comhaid %d." -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "Imithe thar leibhéal athchursála sloinn" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "Gannsreabhadh na cruaiche athchúrsála" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "Earráid chomhréire sa slonn." -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "Deineadh iarracht sannadh go rud nach athróg é." -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "Earráid chomhréire i sannadh athróige." -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "Roinnt ar 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "Fabht: droch-chomhartha expassign" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "Bhíothas ag súil le \":\" le haghaidh sloinn choinníollaigh." -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "Easpónant níos lú ná 0." -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "Ag súil le aitheantóir tar éis réamhincriminte nó réamhdeicriminte" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "\")\" ar iarraidh" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "Earráid chomhréire: bhíothas ag súil le hoibreann." -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "Earráid chomhréire: oibreoir neamhbhailí uimhríochta" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (comhartha earráide '%s')" @@ -1193,7 +1229,7 @@ msgstr "%s: comhaireamh neamhbhailí línte" msgid "value too great for base" msgstr "Tá an luach rómhór don bhonnuimhir." -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: earráid sloinn\n" @@ -1202,52 +1238,57 @@ msgstr "%s: earráid sloinn\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: ní féidir na máthairchomhadlanna a rochtain." -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "Is ordú ionsuite speisialta é '%s'" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "" "Ní féidir an mód gan mhoill a athshocrú le haghaidh an tuairisceora chomhaid " "%d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" "Ní féidir tuairisceoir comhaid nua a leithdháileadh le haghaidh ionchur bash " "ón tuairisceoir comhaid %d." -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "" "save_bash_input: tá an maolán ann cheana le haghaidh an tuairisceoir comhaid " "nua %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp píopa" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "Tá aitheantas an phróisis ghabhlaithe %d sa tasc %d atá ag rith" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "Tá an tasc stoptha %d leis an ngrúpa próisis %ld á scrios." -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: próiseas %5ld (%s) marcáilte mar fós beo" @@ -1257,137 +1298,137 @@ msgstr "add_process: próiseas %5ld (%s) marcáilte mar fós beo" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: níl an aitheantóir próisis sin ann." -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Comhartha %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Déanta" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Stoptha" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Stoptha(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Ag Rith" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Déanta(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Scoir %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Stádas neamhaithnid" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(cuimhne dumpáilte)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (comhadlann oibre: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid macphróisis (%ld go %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: níl an próiseas %ld ina mhacphróiseas den bhlaosc seo." -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: níl taifead den phróiseas %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: tá an tasc %d stoptha." -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: níl a léithéid de tasc ann." -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: tá an tasc críochnaithe." -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: tá an tasc %d sa chúlra cheana." -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: ag cumasú WNOHANG chun stad éiginnte a sheachaint" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: líne %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (cuimhne dumpáilte)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(comhadlann oibre anois: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: theip ar getpgrp" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: níl rialú jabanna ar fáil sa chúlra" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: araíonacht líne" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "ní féidir an grúpa próisis teirminéil a athrú (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "Níl rialú tascanna sa bhlaosc seo." -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: dearbhú teipthe: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1396,155 +1437,155 @@ msgstr "" "\r\n" "malloc: %s:%d: dearbhú ina phraiseach\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "neamhaithnid" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: bloc ar an liosta saor scriosta" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: glaoite le argóint bhloic á saoradh cheana" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: glaoite le argóint bhloic nár leithdháileadh" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: gannsreabhadh; tá mh_nbytes as raon" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: gannsreabhadh; tá mh_nbytes as raon" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: ní ionann méid na smután túis agus deiridh" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: glaoite le argóint bhloic nár leithdháileadh" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: gannsreabhadh; tá mh_nbytes as raon" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: gannsreabhadh; tá mh_nbytes as raon" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: ní ionann méideanna na smután túis agus deiridh" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: an bhfuil an tábla leithdháilte lán le FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "" "register_alloc: an bhfuil %p sa tábla mar atá sé leithdháilte cheana?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: an bhfuil %p sa tábla cheana mar ceann saor?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "Bonn neamhbhailí" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: óstríomhaire neamhaithnid" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: seirbhís neamhbhailí" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: drochshonrú conaire líonra" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "Ní thacaítear le oibríochtaí líonra." -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: ní féidir an logchaighdeán a athrú (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: ní féidir an logchaighdeán a athrú (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: ní féidir an logchaighdeán a athrú (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: ní féidir an logchaighdeán a athrú (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Tá ríomhphost agat i $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Tá ríomhphost nua agat i $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Tá an ríomhphost i %s léite\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "Earráid chomhréire: tá slonn uimhríochtúil de dhith." -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "Earráid chomhréire: ';' gan súil leis." -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "Earráid chomhréire: '((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: drochchineál ordaithe %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" "Cáipéis leabaithe ag líne %d teormharcáilte le deireadh comhaid (\"%s\" á " "lorg)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: ordú atreoraithe \"%d\" as raon." -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " @@ -1553,237 +1594,247 @@ msgstr "" "shell_getc: tá méid an líne ionchuir blaoisce (%zu) níos mó ná SIZE_MAX " "(%lu): líne giorraithe" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "earráid scríofa: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "Imithe thar uasfhad na cáipéise-anseo" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "Deireadh comhaid gan súil leis agus \"%c\" a mheaitseálann á lorg." -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "Deireadh comhaid gan súil leis agus \"]]\" á lorg." -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "" "Earráid chomhréire i slonn coinníollach: comhartha \"%s\" gan suil leis." -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "Earráid chomhréire i slonn coinníollach." -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "Comhartha '%s' gan súil leis; ag súil le ')'." -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "Ag súil le \")\"" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "Argóint \"%s\" gan súil lei go hoibreoir aonártha coinníollach." -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "Argóint gan súil lei go hoibreoir coinníollach aonártha ." -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "" "Comhartha \"%s\" gan súil leis. Bhíothas ag súil le hoibreoir coinníollach " "dénártha." -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "Bhíothas ag súil le hoibreoir coinníollach dénártha." -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "Argóint '%s' gan súil lei go hoibreoir dénártha coinníollach." -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "Argóint gan súil lei go hoibreoir dénártha coinníollach." -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "Comhartha '%c' gan súil leis in ordú coinníollach." -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "Comhartha \"%s\" gan súil leis in ordú coinníollach." -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "Comhartha %d gan súil leis in ordú coinníollach." -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "Earráid chomhréire in aice comhartha '%s' nach rabhthas ag súil leis." -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "Earráid chomhréire in aice '%s'" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "Earráid chomhréire: deireadh comhaid gan súil leis." + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "Earráid chomhréire: deireadh comhaid gan súil leis." -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "Earráid chomhréire" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Úsáid '%s' le scoir den mblaosc.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "Deireadh comhaid gan súil leis agus ')' á lorg le meaitseáil." -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "Iomlánú: níor aimsíodh an fheidhm '%s'." -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "críochnú in-ríomhchláraithe: %s: d'fhéadfadh lúb atriail a bheith ann" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: tá COMPSPEC neamhnitheach" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: drochnascóir '%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: tuairisceoir comhaid neamhbhailí" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: pointeoir folamh comhaid" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: '%c': carachtar formáide neamhbhailí" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "tuairisceoir comhaid as raon" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: atreorú athbhríoch" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: ní féidir comhad atá ann cheana a fhorscríobh." -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: srianta: ní féidir aschur a atreorú." -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "ní féidir cáipéis shealadach a chruthú don cháipéis leabaithe: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: ní féidir tuairisceoir comhaid a shannadh go hathróg." -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "Ní thacaítear le /dev/(tcp|udp)/óstríomhaire/port gan líonrú." -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "Earráid atreoraithe: ní féidir an tuairisceoir comhaid a dhúbailt." -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "Níorbh fhéidir /tmp a aimsiú. Cruthaigh é le do thoil!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "Caithfidh /tmp bheith ina ainm comhadlainne bailí." -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" "Tabharfar neamhaird ar an mód deaphriontála i mblaoscanna idirghníomhacha." -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: rogha neamhbhailí" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "" "Ní féidir an t-aitheantóir úsáideora (uid) a athrú go %d: aitheantóir " "éifeachtach %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "" "Ní féidir an t-aitheantóir grúpa (gid) a athrú go %d: aitheantóir " "éifeachtach %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" "Ní féidir an dífhabhtóir a thosú; tá an mód dífhabhtaithe díchumasaithe." -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: is comhadlann é" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Níl ainm orm!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, leagan %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1792,52 +1843,52 @@ msgstr "" "Úsáid:\t%s [rogha fada GNU] [rogha] ...\n" "\t%s [rogha fada GNU] [rogha] comhad_scripte ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Roghanna fada GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Roghanna blaoisce:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD nó -c ordú nó -O rogha_shopt\t\t(glaoch amháin)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s nó -o rogha\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Úsáid %s -c 'help set' le haghaidh tuilleadh eolais faoi roghanna blaoisce.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Úsáid '%s -c help' le haghaidh tuilleadh eolais faoi orduithe ionsuite " "blaoisce.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Úsáid an t-ordú 'bashbug' le tuarascáil a sheoladh faoi fhabht.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "leathanach baile bash: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Cabhair ghinearálta le bogearraí GNU: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: oibríocht neamhbhailí" @@ -2007,99 +2058,105 @@ msgstr "Iarratas faisnéise" msgid "Unknown Signal #%d" msgstr "Comhartha neamhaithnid #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "Drochionadú: níl '%s' dúnta i %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: ní féidir liosta a shannadh go ball eagair." -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "Ní féidir píopa a dhéanamh le haghaidh ionadaíocht próisis." -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "Ní féidir macphróiseas a dhéanamh le haghaidh ionadaíocht próisis." -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "Ní féidir píopa ainmnithe %s a oscailt le haghaidh léamh." -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "Ní féidir píopa ainmnithe %s a oscailt le haghaidh scríofa." -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "" "Ní féidir an píopa ainmnithe %s a dhúbailt mar thuairisceoir comhaid %d." -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "ionadú orduithe: tugadh neamhaird ar ghiotán neamhnitheach san ionchur" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" +"command_substitute: ní feidir an píopa a dhúbailt mar thuairisceoir comhaid " +"1." + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "Ní féidir píopa a dhéanamh le haghaidh ionadú ordaithe." -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "Ní féidir macphróiseas a dhéanamh le haghaidh ionadú ordaithe." -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "" "command_substitute: ní feidir an píopa a dhúbailt mar thuairisceoir comhaid " "1." -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "'%s': ainm neamhbhailí athróige le haghaidh tagairt ainm" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: fairsingiú neamhbhailí indíreach" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: ainm neamhbhailí athróige" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: paraiméadar gan socrú." +msgid "%s: bad substitution" +msgstr "%s: drochionadú" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: paraiméadar neamhnitheach nó gan socrú." +msgid "%s: parameter not set" +msgstr "%s: paraiméadar gan socrú." -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: slonn fotheaghráin < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: drochionadú" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: ní féidir sannadh mar seo." -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2107,68 +2164,68 @@ msgstr "" "i leaganacha den bhlaosc amach anseo, beidh luachálú mar ionadú uimhríochta " "éigeantach" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "drochionadú: níl '`' dúnta i %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "gan meaitseáil: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "Bhíothas ag súil le hargóint." -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: ag súil le slonn slánuimhreach." -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "Ag súil le ')'" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "Ag súil le ')', ach fuarthas %s." -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: ag súil le hoibreoir dénártha." -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: ag súil le hoibreoir aonártha." -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "']' ar iarraidh" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "Earráid chomhréire: ';' gan súil leis." -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "Uimhir chomhartha neamhbhailí" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "eval: imithe thar uasleibhéal na láimhseálaithe gaistí (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: drochluach sa liosta_gaistí[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" @@ -2176,92 +2233,100 @@ msgstr "" "run_pending_traps: is SIG_DFL an láimhseálaí comharthaí; %d (%s) á " "athsheoladh chugam féin." -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: droch-chomhartha %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "Earráid agus sainmhíniú na feidhme '%s' á iompórtáil." -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "Tá an leibhéal blaoisce (%d) ró-ard; á athshocrú go 1." -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "Imithe thar uasfhad na cáipéise-anseo" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: níl comhthéacs feidhme sa scóip reatha." -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: ní féidir luach a shannadh ar an athróg" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: slánuimhir a sannadh go tagairt ainm" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: níl comhthéacs feidhme sa scóip reatha" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "Tá teaghrán easpórtála neamhnitheach ag %s" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "Carachtar neamhbhailí %d sa teaghrán easpórtála le haghaidh %s." -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "Níl '=' sa teaghrán easpórtála le haghaidh %s." -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: ní comhthéacs feidhme é ceann shell_variables" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: níl comhthéacs global_variables ann" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: ní scóip shealadach thimpeallachta é ceann shell_variables" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: ní féidir a oscailt mar CHOMHAD" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: luach neamhbhailí le haghaidh tuairisceoir comhaid rianaithe" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: luach comhoiriúnachta as raon" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Cóipcheart © 2012 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2269,37 +2334,37 @@ msgstr "" "Ceadúnas GPLv3+: GNU GPL leagan 3 nó níos déanaí <http://gnu.org/licenses/" "gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, leagan %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Is saorbhogearra é seo; tá cead agat é a athrú agus é a athdháileadh." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "" "Ní ghabhann baránta ar bith leis, sa mhéid is atá sin ceadaithe de réir dlí." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: ní féidir %lu beart a leithdháileadh (%lu beart leithdháilte)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: ní féidir %lu beart a leithdháileadh" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "" "%s: %s:%d: ní féidir %lu beart a leithdháileadh (%lu beart leithdháilte)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: ní féidir %lu beart a leithdháileadh" @@ -2338,7 +2403,8 @@ msgid "caller [expr]" msgstr "caller [SLONN]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [comhadlann]" #: builtins.c:68 @@ -2451,8 +2517,9 @@ msgid "let arg [arg ...]" msgstr "let argóint [argóint ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a eagar] [-d teormharcóir] [-i téacs] [-n líon_carachtar] [-N " @@ -2505,7 +2572,8 @@ msgid "[ arg... ]" msgstr "[ argóint... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[argóint] sonrú_comhartha ...]" #: builtins.c:168 @@ -2531,26 +2599,30 @@ msgid "wait [pid ...]" msgstr "wait [AITHEANTAS_PRÓISIS ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for AINM [in FOCAIL ... ] ; do ORDUITHE; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( slonn1; slonn2; slonn3 )); do ORDUITHE; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select AINM [in FOCAIL ... ;] do ORDUITHE; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] PÍBLÍNE" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case FOCAL in [PATRÚN [| PATRÚN]...) ORDUITHE ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2558,65 +2630,65 @@ msgstr "" "if ORDUITHE; then ORDUITHE; [ elif ORDUITHE; then ORDUITHE; ]... [ else " "ORDUITHE; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while ORDUITHE1; do ORDUITHE2; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until ORDUITHE; do ORDUITHE; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [AINM] ORDÚ [ATREORUITHE]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function AINM { ORDUITHE ; } nó AINM () { ORDUITHE ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ ORDUITHE ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "SONRÚ_TAISC [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( slonn ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ slonn ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "athróga - ainmneacha agus mínithe ar athróga áirithe blaoisce" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | comhadlann]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [AINM_ROGHA ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v athróg] formáid [argóintí]" -#: builtins.c:231 +#: builtins.c:233 #, fuzzy msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" @@ -2627,21 +2699,22 @@ msgstr "" "LIOSTA_FOCAL] [-F FEIDHM] [-C ORDÚ] [-X PATRÚN_SCAGAIRE] [-P RÉIMÍR] [-S " "IARMHÍR] [AINM ...]" -#: builtins.c:235 +#: builtins.c:237 #, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o rogha] [-A gníomh] [-G patrún] [-W " "liosta_focal] [-F feidhm] [-C ordú] [-X patrún_scagaire] [-P réimír] [-S " "iarmhír] [focal]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o ROGHA] [-DEI] [AINM ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2649,7 +2722,7 @@ msgstr "" "mapfile [-d TEORMHARCÓIR] [-n COMHAIREAMH] [-O BUNÚS] [-s COMHAIREAMH] [-t] " "[-u TC] [-C AISGHLAOCH] [-c CANDAM] [EAGAR]" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2657,7 +2730,7 @@ msgstr "" "readarray [-d TEORMHARCÓIR] [-n COMHAIREAMH] [-O BUNÚS] [-s COMHAIREAMH] [-" "t] [-u TUAIRISCEOIR_COMHAID] [-C AISGHLAOCH] [-c CANDAM] [EAGAR]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2691,7 +2764,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear fíor mura dtugtar AINM nach bhfuil ailias sainithe dó." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2707,7 +2780,7 @@ msgstr "" " \n" " Aischuirtear rath ach sa chás nach bhfuil AINM ann." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2749,7 +2822,7 @@ msgid "" " bind returns 0 unless an unrecognized option is given or an error occurs." msgstr "" -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2767,7 +2840,7 @@ msgstr "" " Stádas Scortha:\n" " Is é 0 an stádas scortha mura bhfuil N níos lú ná 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2786,7 +2859,7 @@ msgstr "" " Stádas Scortha:\n" " Is é 0 an stádas scortha mura bhfuil N níos lú ná 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2811,7 +2884,7 @@ msgstr "" "nach\n" " bhfuil ORDÚ-IONSUITE-BLAOISCE ina ordú ionsuite blaoisce." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2841,13 +2914,14 @@ msgstr "" "blaoisce, nó\n" " sa chás go bhfuil SLONN neamhbhailí." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2928,7 +3002,7 @@ msgstr "" "$PWD\n" " nuair a úsáidtear -P; i gcásanna eile aischuirtear luach nach náid é." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2957,7 +3031,7 @@ msgstr "" "féidir\n" " an chomhadlann reatha a léamh." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2973,7 +3047,7 @@ msgstr "" " Stadas Scortha:\n" " Éiríonn leis i gcónaí." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2985,7 +3059,7 @@ msgstr "" " Stádas Scortha:\n" " Éiríonn leis i gcónaí." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2997,7 +3071,7 @@ msgstr "" " Stádas Scortha:\n" " Teipeann air i gcónaí." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3033,7 +3107,7 @@ msgstr "" " Aischuirtear an stádas scortha ó ORDÚ, nó teip sa chás nach n-aimsítear " "ORDÚ." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3062,7 +3136,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3117,7 +3192,7 @@ msgstr "" " Aischuirtear rath ach sa chás go dtugtar rogha neamhbhailí, nó go\n" " dtarlaíonn earráid shannta." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3127,7 +3202,7 @@ msgstr "" " \n" " Comhchiallach le \"declare\". Feic \"help declare\"." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3157,7 +3232,7 @@ msgstr "" "dtarlaíonn earráid,\n" " nó go bhfuil an bhlaosc ag rith feidhme." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3234,7 +3309,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear rath ach i gcás earráide scríofa." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3256,7 +3331,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear rath ach i gcás earráide scríofa." -#: builtins.c:612 +#: builtins.c:615 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3276,6 +3351,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3283,7 +3364,7 @@ msgid "" " Returns success unless NAME is not a shell builtin or an error occurs." msgstr "" -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3303,7 +3384,7 @@ msgstr "" " Aischuirtear stádas scortha an ordaithe, nó rath más ordú neamhnitheach " "é." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3344,7 +3425,7 @@ msgid "" " encountered or an error occurs." msgstr "" -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3386,7 +3467,7 @@ msgstr "" " Aischuirtear rath ach sa chás nach bhfaightear ORDÚ nó go dtarlaíonn\n" " earráid atreoraithe." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3398,7 +3479,7 @@ msgstr "" " Scoireann den bhlaosc le stádas N. Má fhágtar N ar lár, is é stádas\n" " an chéad ordaithe deireanaigh an stádas scortha." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3411,7 +3492,8 @@ msgstr "" " Scoireann de bhlaosc logála isteach le stádas scortha N. Aischuirtear\n" " earráid má ritear é i mblaosc nach blaosc logála isteach í." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3436,6 +3518,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3467,7 +3551,7 @@ msgstr "" " Aischuirtear rath nó stádas an ordaithe rite; neamh-nialas má tharlaíonn " "earráid." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3489,7 +3573,7 @@ msgstr "" " Aischuirtear stádas an ordaithe a cuireadh sa tulra, nó teip má " "tharlaíonn earráid." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3513,7 +3597,7 @@ msgstr "" " Aischuirtear rath ach sa chás go dtarlaíonn earráid nó nach bhfuil\n" " rialú tascanna cumasaithe." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3559,7 +3643,7 @@ msgstr "" " Aischuirtear rath ach sa chás nach n-aimsítear AINM, nó go bhfuil\n" " rogha neamhbhailí ann." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3601,7 +3685,7 @@ msgstr "" " Aischuirtear rath ach sa chás nach n-aimsítear PATRÚN nó go dtugtar\n" " rogha neamhbhailí." -#: builtins.c:842 +#: builtins.c:852 msgid "" "Display or manipulate the history list.\n" " \n" @@ -3625,7 +3709,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3636,7 +3724,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3683,7 +3771,7 @@ msgstr "" "dtarlaíonn earráid.\n" " Má úsáidtear -x, aischuirtear an stádas scortha ó ORDÚ. " -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3715,7 +3803,7 @@ msgstr "" " Aischuirtear rath ach sa chás go dtugtar rogha neamhbhailí nó " "SONRÚ_TAISC neamhbhailí." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3766,7 +3854,7 @@ msgstr "" " Aischuirtear rath muna bhfuil rogha neamhbhailí ann nó muna tharla " "earráid." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3811,7 +3899,7 @@ msgid "" " If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise." msgstr "" -#: builtins.c:994 +#: builtins.c:1008 msgid "" "Read a line from the standard input and split it into fields.\n" " \n" @@ -3835,6 +3923,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3865,7 +3955,7 @@ msgid "" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3887,7 +3977,7 @@ msgstr "" " Aischuirtear N, nó teip sa chás nach bhfuil an bhlaosc ag rith feidhme " "nó scripte." -#: builtins.c:1055 +#: builtins.c:1071 msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3963,6 +4053,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3973,7 +4067,7 @@ msgid "" " Returns success unless an invalid option is given." msgstr "" -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3995,7 +4089,7 @@ msgid "" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4031,7 +4125,7 @@ msgstr "" " Aischuirtear rath ach sa chás go dtugtar rogha neamhbhailí nó go bhfuil " "AINM neamhbhailí." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4052,7 +4146,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4070,7 +4164,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear rath ach sa chás go bhfuil N diúltach, nó níos mó ná $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4095,15 +4189,18 @@ msgstr "" "AINM_COMHAID.\n" " Teipeann air sa chás nach féidir AINM_CHOMHAID a léamh." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4122,7 +4219,7 @@ msgstr "" " Aischuirtear rath ach sa chás nach bhfuil rialú tascanna cumasaithe,\n" " nó go dtarlaíonn earráid." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4205,7 +4302,7 @@ msgid "" " false or an invalid argument is given." msgstr "" -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4218,7 +4315,7 @@ msgstr "" " caithfear \"]\" go díreach a bheith ann mar an argóint\n" " dheireanach, le bheith comhoiriúnach leis an \"[\" ag an tús." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4238,7 +4335,7 @@ msgstr "" " Stádas Scortha:\n" " Éiríonn leis i gcónaí." -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -4246,31 +4343,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4282,7 +4384,7 @@ msgid "" "given." msgstr "" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4312,7 +4414,7 @@ msgid "" "found." msgstr "" -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -4354,15 +4456,16 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4396,7 +4499,7 @@ msgstr "" " Aischuirtear rath ach sa chás go bhfuil MÓD neamhbhailí\n" " nó go sonraítear rogha neamhbhailí." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" @@ -4453,7 +4556,7 @@ msgstr "" "tá\n" " AITHEANTAS neamhbhailí nó má sonraítear rogha neamhbhailí." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -4480,7 +4583,16 @@ msgstr "" " ordú má tá AITHEANTAS_PRÓISIS neamhbhailí nó má shonraítear\n" " rogha neamhbhailí." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4502,7 +4614,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear stádas an ordaithe dheireanaigh a ritheadh." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4533,7 +4645,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear stádas an ordaithe dheireanaigh a ritheadh." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4553,7 +4665,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4582,7 +4694,7 @@ msgstr "" " Stádas Scortha:\n" " Is é stadas aischuir PÍBLÍNE an stádas aischuir ó \"time\"." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4600,7 +4712,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear stádas an ordaithe dheireanaigh a ritheadh." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -4635,7 +4747,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear stádas scortha an ordaithe dheireanaigh a ritheadh." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -4655,7 +4767,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear stádas an ordaithe deireanach a ritheadh." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -4675,7 +4787,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear stádas an ordaithe deireanach a ritheadh." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4697,7 +4809,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuireann an t-ordú \"coproc\" stádas scortha de 0." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -4721,7 +4833,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear rath mura bhfuil AINM inléite amháin." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4739,7 +4851,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear stádas an ordaithe dheireanaigh a ritheadh." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4762,7 +4874,7 @@ msgstr "" " Stádas Scortha:\n" " Aischuirtear stádas an taisc atosaithe." -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy msgid "" "Evaluate arithmetic expression.\n" @@ -4783,7 +4895,7 @@ msgstr "" " Aischuirtear 1 más 0 an luach atá ag SLONN; aischuirtear 0 i gcásanna " "eile." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -4811,7 +4923,7 @@ msgid "" " 0 or 1 depending on value of EXPRESSION." msgstr "" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -4917,7 +5029,7 @@ msgstr "" " HISTIGNORE\tLiosta deighilte le hidirstaid de phatrúin a shonraíonn\n" " \t\tna horduithe a chuirfear leis an liosta staire.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -4976,7 +5088,7 @@ msgstr "" " Aischuirtear rath ach sa chás go sonraítear argóint neamhbhailí, nó\n" " go dteipeann ar an athrú comhadlainne." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5032,7 +5144,7 @@ msgstr "" " Aischuirtear rath ach sa chás go sonraítear argóint neamhbhailí, nó\n" " go dteipeann ar an athrú comhadlainne." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5089,7 +5201,7 @@ msgstr "" " Aischuirtear rath muna bhfuil rogha neamhbhailí ann nó muna tharla " "earráid." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5128,7 +5240,7 @@ msgstr "" "thugtar\n" " rogha neamhbhailí, nó má tá AINM_ROGHA díchumasaithe." -#: builtins.c:1938 +#: builtins.c:1978 msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5145,9 +5257,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5169,15 +5281,15 @@ msgid "" " error occurs." msgstr "" -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5200,14 +5312,19 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5223,7 +5340,7 @@ msgstr "" " Aischuirtear rath ach sa chás go dtugtar rogha neamhbhailí nó go " "dtarlaíonn earráid." -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -5283,7 +5400,7 @@ msgstr "" " Aischuirtear rath ach sa chás go dtugtar rogha neamhbhailí, nó nach\n" " bhfuil sonrú iomlánaithe ann le haghaih AINM." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -5371,7 +5488,7 @@ msgstr "" "bhfuil\n" " EAGAR inléite amháin, nó nach eagar innéacsaithe é EAGAR." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5381,6 +5498,40 @@ msgstr "" " \n" " Comhchiallach le \"mapfile\"." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Aischuir comhthéacs an ghlaoigh reatha fhoghnáthaimh.\n" +#~ " \n" +#~ " Gan SLONN, aischuirtear '$líne $ainm_comhaid'. Le SLONN, " +#~ "aischuirtear\n" +#~ " '$líne $foghnáthamh $ainm_comhaid'; is féidir lorg cruaiche a " +#~ "sholáthar leis an\n" +#~ " fhaisnéis bhreise seo.\n" +#~ " \n" +#~ " Taispeánann an luach atá ag SLONN líon na bhfrámaí glaoigh le dul " +#~ "siar\n" +#~ " roimh an ceann reatha; fráma 0 an ceann atá ar barr.\n" +#~ " \n" +#~ " Stádas Scortha:\n" +#~ " Aischuirtear 0 ach sa chás nach bhfuil an bhlaosc ag rith feidhme " +#~ "blaoisce, nó\n" +#~ " sa chás go bhfuil SLONN neamhbhailí." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "rabhadh: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: eochair neamhbhailí eagair chomhthiomsaithigh" diff --git a/po/gl.gmo b/po/gl.gmo index ba7923dafff6478b97917dbc866a87829c630daa..558cb044b87d1c9a445268f9ca5d2ee23a1f950f 100644 GIT binary patch delta 9737 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 Zo7P@C-LSUpnH8@3Gb38M+MK=D{y(QM`U?O6 delta 11733 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 HXDt5$WEiAB diff --git a/po/gl.po b/po/gl.po index 4f1cd40a3..251a3cdab 100644 --- a/po/gl.po +++ b/po/gl.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 4.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2012-02-23 14:38+0100\n" "Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n" "Language-Team: Galician <proxecto@trasno.net>\n" @@ -24,125 +24,125 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "subíndice de matriz incorrecto" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: non é posíbel converter a matriz de indizada a asociativa" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: non é posíbel asignar a un índice que non é numérico" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: se debe usar un subíndice ao asignar a unha matriz asociativa" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: non foi posíbel crear: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "bash_execute_unix_command: non foi posíbel atopar a combinación de teclas " "para a orde" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: o primeiro carácter que non é espazo en branco non é `\"'" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "no hai un `%c' que peche en %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: falta un `:' separador" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "%s: non se pode borrar a asignación" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "`%s': nome de alias non válido" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "no se activó a edición de liña" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "`%s': nome de combinación de teclas non válido" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: non se pode leer: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "`%s': nome de función descoñecido" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s non está asignado a ningunha tecla.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s pódese invocar a través de " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "%s: non se pode borrar a asignación" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "contía de ciclo" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "só ten significado nun ciclo `for', `while' ou `until'" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -152,7 +152,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Devolve o contexto da chamada a subrutina actual.\n" " \n" @@ -168,350 +172,360 @@ msgstr "" "shell\n" " ou EXPR sexa non válida." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME non está definido" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "demasiados argumentos" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "non hai outro directorio" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD non está definido" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "liña %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "aviso: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: uso: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: a opción require un argumento" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: requírese un argumento numérico" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: non se atopou" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: opción non válida" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: nome de opción non válido" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': non é un identificador válido" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "número octal non válido" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "número hexadecimal non válido" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "número non válido" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: especificación de sinal non válida" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "`%s': no é un pid ou unha especificación válida de traballo" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: variábel de só lectura" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: non é posíbel borrar" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s fóra de rango" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argumento" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s fóra de rango" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: non existe ese traballo" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: no hai control de traballos" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "no ha control de traballos" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: restrinxido" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "restrinxido" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: no é una orde interna do shell" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "erro de escritura: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "erro ao estabelecer os atributos da terminal: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "erro ao obtener os atributos da terminal: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: erro ao obtener o directorio actual: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: especificación de traballo ambigüa" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: non é unha matriz indizada" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: non é posíbel borrar: %s é de só lectura" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: non é posíbel borrar" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nome de acción non válido" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: non hai completado de especificación" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "aviso: é posíbel que a opción -F non funcione como se espera" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "aviso: é posíbel que a opción -C non funcione como se espera" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "non se está executando a función de completado" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "só se pode usar dentro dunha función" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "non se pode use `-f' para facer funcións" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: función de só lectura" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, fuzzy, c-format msgid "`%s': invalid variable name for name reference" msgstr "`%s': nome de alias non válido" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: non é posíbel destruír variábeis de matriz desta forma" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: non é posíbel converter unha matriz asociativa a indizada" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "a carga dinámica non está dispoñíbel" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "non é posíbel abrir o obxecto compartido %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "non é posíbel atopar %s no obxecto compartido %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: non foi cargado dinamicamente" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: non foi cargado dinamicamente" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: non foi posíbel eliminar: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: é un directorio" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: non é un ficheiro regular" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: o ficheiro é demasiado grande" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: non é posíbel executar o ficheiro binario" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: non foi posíbel executar: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "logout\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "non é un shell de entrada: use `exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Hai traballos pendentes.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Hay traballos en execución.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "non foi posíbel atopar a orde" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "especificación de historial" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: non é posíbel abrir o ficheiro temporal: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "actual" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "o traballo %d iniciou sen control de traballo" @@ -526,11 +540,11 @@ msgstr "%s: opción ilegal -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: a opción require un argumento -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "asociación desactivada" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: táboa de asociación baleira\n" @@ -560,12 +574,12 @@ msgstr "" "non hai temas de axuda que coincidan con «%s». Probe «help help» ou «man -k " "%s» ou «info %s»" -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: non foi posíbel abrir: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -586,21 +600,31 @@ msgstr "" "Un asterisco (*) xunto a un nome significa que a orde está desactivada.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "non foi posíbel usar máis dun de -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "posición no historial" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "nome de variábel de matriz baleiro" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parámetro nulo ou non estabelecido" + +#: builtins/history.def:349 #, fuzzy, c-format msgid "%s: invalid timestamp" msgstr "%s: nome de opción non válido" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: fallou a expansión do historial" @@ -614,113 +638,113 @@ msgstr "%s: fallou inlib" msgid "no other options allowed with `-x'" msgstr "non se permiten outras opcións con «-x»" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: os argumentos deben ser procesos ou IDs de traballos" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Erro descoñecido" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "agardábase unha expresión" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: non é unha matriz indizada" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: especificación de descritor de ficheiro non válida" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: descritor de ficheiro non válido: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: conta de liñas non válida" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: orixe de matriz non válido" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: quantum de chamada non válido" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "nome de variábel de matriz baleiro" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "requírese a compatibilidade de variábel de matriz" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "`%s': falta o carácter de formato" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "`%c': especificación de formato de tempo non válida" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "`%c': carácter de formato non válido" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "aviso: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "falta o díxito hexadecimal para \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "falta o díxito unicode para \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "non hai outro directorio" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, fuzzy, c-format msgid "%s: invalid argument" msgstr "%s: límite de argumento non válido" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<non hai directorio actual>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "a pila de directorios está baleira" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "índice da pila de directorios" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -764,7 +788,7 @@ msgstr "" "\tlista mostrada por dirs cando se chama sen opcións,\n" "\tcomezando desde cero." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -806,7 +830,7 @@ msgstr "" " \n" " A orde interna `dirs' mostra a rima de directorios." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -846,321 +870,332 @@ msgstr "" " \n" " A orde interna `dirs' mostra a pila de directorios." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: especificación de tempo de expiración non válida" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "erro de lectura: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "só se pode usar «return» nunha función ou guión lido con «source»" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "non é posíbel borrar ao mesmo tempo unha función e unha variábel" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: non é unha variábel de matriz" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: non é unha función" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, fuzzy, c-format msgid "%s: cannot export" msgstr "%s: non é posíbel borrar" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "conta de shift" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "non é posíbel activar e desactivar opcións do shell simultaneamente" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: nome de opción do shell non válido" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "requírese un argumento de nome de ficheiro" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: non se atopou o ficheiro" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "non é posíbel suspender" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "non é posíbel suspender un shell de entrada" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s é un alias de `%s'\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s é unha palabra chave do shell\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s é unha función\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, fuzzy, c-format msgid "%s is a special shell builtin\n" msgstr "%s é unha orde interna do shell\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s é unha función\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s é unha orde interna do shell\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s é %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s está asociado (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: límite de argumento non válido" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': orde errónea" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: non é posíbel obter o límite: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "límite" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: non é posíbel modificar o límite: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "número octal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': operador de modo simbólico non válido" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': carácter de modo simbólico non válido" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " liña " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "última orde: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Abortando…" #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "aviso: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "erro de orde descoñecido" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "tipo de orde erróneo" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "conector erróneo" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "salto erróneo" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: variable sen asignar" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aexpirou mentres agardaba algunha entrada: auto-logout\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "non é posíbel redirixir a saída estándar desde /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': carácter de formato non válido" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "erro de canalización" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restrinxido: non se pode especificar `/' en nomes de ordes" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: non se atopou a orde" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: intérprete erróneo" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: non é posíbel executar o ficheiro binario" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: intérprete erróneo" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, fuzzy, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: non é posíbel executar o ficheiro binario" -#: execute_cmd.c:6123 -#, fuzzy, c-format -msgid "`%s': is a special builtin" -msgstr "%s é unha orde interna do shell\n" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "no se pode duplicar o df %d ao df %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "excedeuse o nivel de recursión da expresión" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "desbordamento da base da pila de recursión" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "erro de sintaxe na expresión" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "tentouse asignar a algo que non é unha variábel" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "erro de sintaxe na expresión" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "división entre 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "erro: elemento de asignación de expresión erróneo" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "agardábase `:' para a expresión condicional" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "expoñente menor que 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "" "agardábase un identificador despois do pre-incremento ou pre-decremento" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "falta un `)'" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "erro de sintaxe: agardábase un operando" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "erro de sintaxe: operador aritmético non válido" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (o elemento de erro é \"%s\")" @@ -1178,7 +1213,7 @@ msgstr "%s: conta de liñas non válida" msgid "value too great for base" msgstr "valor demasiado grande para a base" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: erro de expresión\n" @@ -1187,49 +1222,54 @@ msgstr "%s: erro de expresión\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: non é posíbel acceder aos directorios pai" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, fuzzy, c-format +msgid "`%s': is a special builtin" +msgstr "%s é unha orde interna do shell\n" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "non é posíbel restabelecer o modo nodelay para o df %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" "non é posíbel asignar un novo descritor de ficheiros para a entrada de bash " "desde o fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "" "save_bash_input: o almacenamento intermedio xa existe para o novo fd %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: tubería de pgrp" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "o pid `forked' %d aparece no traballo en execución %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "borrando o trabajo detido %d con grupo de proceso %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) márcase como vivo aínda" @@ -1239,138 +1279,138 @@ msgstr "add_process: pid %5ld (%s) márcase como vivo aínda" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: non existe tal pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Sinal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Feito" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Detido" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Detido(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "En execución" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Feito(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Saída %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Estado descoñecido" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(«core» xerado) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (dir agora: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid fillo (%ld a %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld non é un proceso fillo desta shell" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Non hai un rexistro do proceso %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: o traballo %d está detido" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: non existe ese traballo" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: o traballo rematou" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: o trabajo %d xa está en segundo plano" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: actívase WNOHANG para evitar o bloque indefinido" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: liña %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " («core» generado)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(dir agora: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_jobs_control: fallou getpgrp" -#: jobs.c:4434 +#: jobs.c:4486 #, fuzzy msgid "initialize_job_control: no job control in background" msgstr "initialize_jobs_control: disciplina de liña" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_jobs_control: disciplina de liña" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_jobs_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "non é posíbel estabelecer o grupo de procesos de terminal (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "non hai control de trabalos nesta shell" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: fallou a aserción: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1379,385 +1419,395 @@ msgstr "" "\r\n" "malloc: %s:%d: aserción arruinada\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "descoñecido" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: bloque na lista libre sobreescrito" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: chamouse cun argumento de bloque previamente liberado" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: chamouse cun argumento de bloque sen asignar" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: os tamaños dos anacos de inicio e fin son diferentes" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: chamouse cun argumento de bloque sen asignar" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "" "realloc: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "" "realloc: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: os tamaños dos anacos de inicio e fin son diferentes" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: a táboa alloc está chea con FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p xa está na táboa como asignado?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p xa está na táboa como libre?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "base non válida" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: anfitrión descoñecido" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: servizo non válido" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: especificación de ruta de rede errónea" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "non hai compatibilidade para operacións de rede" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL non se pode cambiar a configuración rexional (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "" "setlocale: LC_ALL: non se pode cambiar a configuración rexional (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: non se pode cambiar a configuración rexional (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: non se pode cambiar a configuración rexional (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Ten mensaxes en $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Ten unha nova mensaxe en $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "O correo en %s foi lido\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "error de sintaxe: requírese unha expresión aritmética" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "error sintáctico: `;' non esperado" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "erro de sintaxe: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: tipo de instrución %d erróneo" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" -"o documento-aquí na liña %d está delimitado por fin-de-fichero (agardábase `" -"%s')" +"o documento-aquí na liña %d está delimitado por fin-de-fichero (agardábase " +"`%s')" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: a instrucción de redirección `%d' está fóra de rango" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "erro de escritura: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "EOF inesperado mentres se buscaba un `%c' coincidente" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "EOF inesperado mentres se buscaba `]]'" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "error de sintaxe na expresión condicional: elemento inesperado `%s'" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "error sintáctico na expresión condicional" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "elemento inesperado `%s', agardábase `)'" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "agardábase `)'" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "argumento inesperado `%s' para o operador unario condicional" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "argumento inesperado para o operador unario condicional" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "elemento inesperado `%s', agardábase un operador binario condicional" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "agardábase un operador binario condicional" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "argumento inesperado `%s' para o operador binario condicional" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "argumento inesperado para o operador binario condicional" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "elemento inesperado `%c' na orde condicional" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "elemento inesperado `%s' na orde condicional" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "elemento inesperado %d na orde condicional" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "error de sintaxe perto do elemento inesperado `%s'" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "erro de sintaxe cerca de «%s»" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "error de sintaxe: non se agardaba o final do fichero" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "error de sintaxe: non se agardaba o final do fichero" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "erro de sintaxe" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Use «%s» para deixar o shell.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "EOF non agardado mentres se buscaba un «)» coincidente" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: non se atopa a función `%s'" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: COMPSPEC nulo" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: conector erróneo `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: descriptor de fichero non válido" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: punteiro a ficheiro NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != numfich xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': carácter de formato non válido" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "descritor de ficheiro fóra de rango" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: redireccionamento ambigüo" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: non se pode sobreescribir un fichero existente" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restrinxido: no se pode redirixir a saída" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "non se pode crear un fichero temporal para o documento-aquí: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: non é posíbel asignar o gd á variábel" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "non se admite /dev/(tcp|udp)/anfitrion/porto sen rede" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "erro de redirección: non é posíbel duplicar o fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "non é posíbel atopar /tmp, por favor creeo!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp debe ser un nome de directorio válido" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: opción non válida" -#: shell.c:1343 +#: shell.c:1355 #, fuzzy, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "non é posíbel restabelecer o modo nodelay para o df %d" -#: shell.c:1354 +#: shell.c:1371 #, fuzzy, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "non é posíbel restabelecer o modo nodelay para o df %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, fuzzy, c-format msgid "%s: Is a directory" msgstr "%s: é un directorio" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Non teño nome!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versión %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1766,54 +1816,54 @@ msgstr "" "Uso:\t%s [opción GNU longa] [opción] ...\n" "\t%s [opción GNU longa] [opción] guión-do-shell\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Opcións GNU longas:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Opcións do shell:\n" -#: shell.c:2069 +#: shell.c:2061 #, fuzzy msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD o -c orde ou -O opcion_shopt\t\t(só invocación)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s ou -o opción\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Escriba `%s -c \"help set\"' para máis información sobre as opcións do " "shell.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Escriba `%s -c help' para máis información sobre as ordes internas do " "shell.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Use a orden `bashbug' para reportar erros.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: operación non válida" @@ -1983,97 +2033,101 @@ msgstr "Solicitude de información" msgid "Unknown Signal #%d" msgstr "Sinal descoñecido #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "susbtitución errónea: non hai un `%s' que peche en %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: no é posíbel asignar unha lista a un membro da matriz" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "non é posíbel crear a tubería para a sustitución do proceso" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "non é posíbel crear un proceso fillo para a substitución do proceso" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "non é posíbel abrir a tubería chamada %s para lectura" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "non é posíbel abrir a tubería chamada %s para escritura" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "non é posíbel duplicar a tubería chamada %s como df %d" -#: subst.c:6370 +#: subst.c:6761 #, fuzzy msgid "command substitution: ignored null byte in input" msgstr "substitución errónea: non hai unha \"`\" que peche en %s" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: non é posíbel duplicar a tubería como fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "non é posíble crear a tubería para a substitución da orde" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "non é posíbel crear un proceso fillo para a substitución da orde" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: non é posíbel duplicar a tubería como fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, fuzzy, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: %s: valor non válido para o descitor de ficheiro de rastreo" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, fuzzy, c-format msgid "%s: invalid indirect expansion" msgstr "%s: conta de liñas non válida" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, fuzzy, c-format msgid "%s: invalid variable name" msgstr "`%s': nome de alias non válido" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: substitución errónea" + +#: subst.c:8231 #, fuzzy, c-format msgid "%s: parameter not set" msgstr "%s: parámetro nulo ou non estabelecido" -#: subst.c:7480 -#, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parámetro nulo ou non estabelecido" - -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: expresión de subcadea < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: substitución errónea" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: non é posíbel asignar de esta forma" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2081,68 +2135,68 @@ msgstr "" "versiones futuras do intérprete obligarán a evaluación como unha " "substitución aritmética" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "substitución errónea: non hai unha \"`\" que peche en %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "non hai concidencia: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "agardábase un argumento" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: agardábase unha expresión enteira" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "agardábase `)'" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "`)' agardábase, atopouse %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: agardábase un operador binario" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: agardábase un operador unario" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "falta un «]»" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "error sintáctico: `;' non esperado" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "número de sinal non válido" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: valor erróneo en trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" @@ -2150,94 +2204,102 @@ msgstr "" "run_pending_traps: o manexador de sinal é SIG_DFL, reenviando %d (%s) a sí " "mesmo" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: sinal errónea %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "erro ao importar a definición da función para «%s»" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "o nivel de shell (%d) é demasiado alto, restabelécese a 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: non hai contexto de función no ámbito actual" -#: variables.c:2661 +#: variables.c:2659 #, fuzzy, c-format msgid "%s: variable may not be assigned value" msgstr "%s: non é posíbel asignar o gd á variábel" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: non hai contexto de función no ámbito actual" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s ten exportstr nulo" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "carácter non válido %d en exportsrt para %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "non hai «=» en exportstr para %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" "pop_var_context: a cabezak de shell_variables non é un contexto de función" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: non é un contexto global_variables " -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" "pop_scope: a cabeza de shell_variables non é un ámbito de ambiente temporal" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: non é posíbel abrir como FICHEIRO" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: valor non válido para o descitor de ficheiro de rastreo" -#: variables.c:6450 +#: variables.c:6453 #, fuzzy, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s fóra de rango" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2009 Free Software Foundation, Inc.\n" -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2245,37 +2307,37 @@ msgstr "" "Licenza GPLv3+: GPL de GNU versión 3 ou posterior <http://gnu.org/licenses/" "gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versión %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 #, fuzzy msgid "This is free software; you are free to change and redistribute it." msgstr "Isto é software libre; vostede é libre de cambialo e redistribuilo.\n" -#: version.c:92 version2.c:92 +#: version.c:91 #, fuzzy msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Non hai GARANTÍA, á extensión permitida pola ley.\n" -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: non é posíbel asignar %lu bytes (%lu bytes asignados)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: non é posíbel asignar %lu bytes" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: non é posíbel asignar %lu bytes (%lu bytes asignados)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: non é posíbel asignar %lu bytes" @@ -2316,7 +2378,7 @@ msgstr "caller [expresión]" #: builtins.c:66 #, fuzzy -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]]] [directorio]" #: builtins.c:68 @@ -2429,8 +2491,9 @@ msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a matriz] [-d delim] [-i texto] [-n ncars] [-N ncars] [-p " @@ -2483,7 +2546,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] id_sinal ...]" #: builtins.c:168 @@ -2510,90 +2574,94 @@ msgid "wait [pid ...]" msgstr "wait [pid]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NOME [in PALABRAS ... ] ; do ORDES; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do ORDES; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NOME [in PALABRAS ... ;] do ORDES; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case PALABRA in [PATRÓN [| PATRÓN]...) ORDES ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" msgstr "if ORDES; then ORDES; [ elif ORDES; then ORDES; ]...[ else ORDES; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while ORDES; do ORDES; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until ORDES; do ORDES; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NOME] orden [redireccións]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function nome { ORDES ; } ou nome () { ORDES ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ ORDES ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expresión ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expresión ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Nomes e significados de algunhas variábeis de shell" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [nome_opción ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] formato [argumentos]" -#: builtins.c:231 +#: builtins.c:233 #, fuzzy msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" @@ -2604,22 +2672,23 @@ msgstr "" "W listapalabras] [-F función] [-C orde] [-X patfiltro] [-P prefixo] [-S " "sufixo] [nome ...]" -#: builtins.c:235 +#: builtins.c:237 #, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o opción] [-A acción] [-G patglob] [-W " "listapalabras] [-F función] [-C orde] [-X patfiltro] [-P prefixo] [-S " "sufixo] [palabra]" -#: builtins.c:239 +#: builtins.c:241 #, fuzzy msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o opción] [-DE] [nome ...]" -#: builtins.c:242 +#: builtins.c:244 #, fuzzy msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2628,7 +2697,7 @@ msgstr "" "mapfile [-n conta] [-O orixe] [-s conta] [-t] [-u df] [-C chamada] [-c " "quantum] [matriz]" -#: builtins.c:244 +#: builtins.c:246 #, fuzzy msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2637,7 +2706,7 @@ msgstr "" "readarray [-n conta] [-O orixe] [-s conta] [-t] [-u df] [-C chamada] [-c " "quantum] [matriz]" -#: builtins.c:256 +#: builtins.c:258 #, fuzzy msgid "" "Define or display aliases.\n" @@ -2674,7 +2743,7 @@ msgstr "" " alias devuelve verdadero a menos que se de un NOMBRE para el cual\n" " no se haya definido ningún alias." -#: builtins.c:278 +#: builtins.c:280 #, fuzzy msgid "" "Remove each NAME from the list of defined aliases.\n" @@ -2690,7 +2759,7 @@ msgstr "" " -a\telimina todas as definicións de alias.\n" " Devovle verdadero a menos que un NOME non sexa un alias existente." -#: builtins.c:291 +#: builtins.c:293 #, fuzzy msgid "" "Set Readline key bindings and variables.\n" @@ -2773,7 +2842,7 @@ msgstr "" " bind devolve 0 a menos que se presente unha opción descoñecida ou se\n" " se produza un erro." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2791,7 +2860,7 @@ msgstr "" " Estado de saída:\n" " O estado de saída é 0 a menos que N non sexa maior ou igual a 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2809,7 +2878,7 @@ msgstr "" " Estado de Saída:\n" " O estado de salida é 0 a menos que N non sexa maior ou igual a 1." -#: builtins.c:354 +#: builtins.c:356 #, fuzzy msgid "" "Execute shell builtins.\n" @@ -2834,7 +2903,7 @@ msgstr "" " Devolve o estado de saída da ORDE-INTERNA-SHELL, ou falso se a\n" " ORDE-INTERNA-SHELL non é unha orde interna de shell." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2863,13 +2932,13 @@ msgstr "" "shell\n" " ou EXPR sexa non válida." -#: builtins.c:387 +#: builtins.c:389 msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2908,7 +2977,7 @@ msgid "" " -P is used; non-zero otherwise." msgstr "" -#: builtins.c:425 +#: builtins.c:427 #, fuzzy msgid "" "Print the name of the current working directory.\n" @@ -2938,7 +3007,7 @@ msgstr "" "leer\n" " o directorio actual." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2954,7 +3023,7 @@ msgstr "" " Estado de Saída:\n" " Sempre con éxito." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2966,7 +3035,7 @@ msgstr "" " Estado de salida:\n" " Sempre con éxito." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2978,7 +3047,7 @@ msgstr "" " Estado de saída:\n" " Sempre falla." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -2997,7 +3066,7 @@ msgid "" " Returns exit status of COMMAND, or failure if COMMAND is not found." msgstr "" -#: builtins.c:490 +#: builtins.c:492 msgid "" "Set variable values and attributes.\n" " \n" @@ -3025,7 +3094,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3039,7 +3109,7 @@ msgid "" " assignment error occurs." msgstr "" -#: builtins.c:532 +#: builtins.c:535 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3050,7 +3120,7 @@ msgstr "" " \n" " Obsoleto. Consulte `help declare'." -#: builtins.c:540 +#: builtins.c:543 #, fuzzy msgid "" "Define local variables.\n" @@ -3077,7 +3147,7 @@ msgstr "" " Devolve con éxito a menos que se dea unha opción non válida, se produza\n" " un erro, ou o shell non estea executando unha función." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3117,7 +3187,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3130,7 +3200,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:612 +#: builtins.c:615 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3150,6 +3220,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3157,7 +3233,7 @@ msgid "" " Returns success unless NAME is not a shell builtin or an error occurs." msgstr "" -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3176,7 +3252,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado de saida da orde ou éxito se a orde é nula." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3217,7 +3293,7 @@ msgid "" " encountered or an error occurs." msgstr "" -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3240,7 +3316,7 @@ msgid "" "occurs." msgstr "" -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3252,7 +3328,7 @@ msgstr "" " Termina o shell cun estado de N. Se se omite N, o estado de saída\n" " é o mismo da última orde executada." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3265,7 +3341,7 @@ msgstr "" " Termina un shell de entrada cun estado de saída de N. Devolve un\n" " erro se non se executa nunha shell de entrada." -#: builtins.c:734 +#: builtins.c:742 msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3290,12 +3366,14 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." msgstr "" -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3316,7 +3394,7 @@ msgstr "" " O estado da orde localizada en primeiro plano, ou falla se sucede un " "erro." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3330,7 +3408,7 @@ msgid "" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3354,7 +3432,7 @@ msgid "" " Returns success unless NAME is not found or an invalid option is given." msgstr "" -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3376,7 +3454,7 @@ msgid "" "given." msgstr "" -#: builtins.c:842 +#: builtins.c:852 msgid "" "Display or manipulate the history list.\n" " \n" @@ -3400,7 +3478,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3411,7 +3493,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3435,7 +3517,7 @@ msgid "" " If -x is used, returns the exit status of COMMAND." msgstr "" -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3452,7 +3534,7 @@ msgid "" " Returns success unless an invalid option or JOBSPEC is given." msgstr "" -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3475,7 +3557,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3520,7 +3602,7 @@ msgid "" " If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise." msgstr "" -#: builtins.c:994 +#: builtins.c:1008 msgid "" "Read a line from the standard input and split it into fields.\n" " \n" @@ -3544,6 +3626,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3574,7 +3658,7 @@ msgid "" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3586,7 +3670,7 @@ msgid "" " Returns N, or failure if the shell is not executing a function or script." msgstr "" -#: builtins.c:1055 +#: builtins.c:1071 msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3662,6 +3746,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3672,7 +3760,7 @@ msgid "" " Returns success unless an invalid option is given." msgstr "" -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3694,7 +3782,7 @@ msgid "" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -3713,7 +3801,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -3734,7 +3822,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -3745,7 +3833,7 @@ msgid "" " Returns success unless N is negative or greater than $#." msgstr "" -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -3759,15 +3847,18 @@ msgid "" " FILENAME cannot be read." msgstr "" -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -3785,7 +3876,7 @@ msgstr "" " Devolve con éxito a menos que non estea activo o control de traballos o\n" " se produza un erro." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3868,7 +3959,7 @@ msgid "" " false or an invalid argument is given." msgstr "" -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3880,7 +3971,7 @@ msgstr "" " Este é un sinónimo para a orde interna \"test\", pero o último\n" " argumento debe ser un `]' literal, que coincida co `[' inicial." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -3899,7 +3990,7 @@ msgstr "" " Estado de saída:\n" " Sempre con éxito." -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -3907,31 +3998,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -3943,7 +4039,7 @@ msgid "" "given." msgstr "" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -3973,7 +4069,7 @@ msgid "" "found." msgstr "" -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -4015,15 +4111,16 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4041,7 +4138,7 @@ msgid "" " Returns success unless MODE is invalid or an invalid option is given." msgstr "" -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -4073,7 +4170,7 @@ msgid "" " children." msgstr "" -#: builtins.c:1534 +#: builtins.c:1564 #, fuzzy msgid "" "Wait for process completion and return exit status.\n" @@ -4098,7 +4195,16 @@ msgstr "" " Devolve o estado de ID; falla se ID non é válido ou se se fornece unha\n" " opción non válida." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4120,7 +4226,7 @@ msgstr "" " Estado de Saída:\n" " Devuelve o estado da última orden executada." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4150,7 +4256,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado da última orde executada." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4170,7 +4276,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4186,7 +4292,7 @@ msgid "" " The return status is the return status of PIPELINE." msgstr "" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4204,7 +4310,7 @@ msgstr "" " Estado de Saída:\n" " Devolve o estado da última orde executada." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -4225,7 +4331,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -4245,7 +4351,7 @@ msgstr "" " Estado de Saída:\n" " Devolve o estado da última orde executada." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -4265,7 +4371,7 @@ msgstr "" " Estado de Saída:\n" " Devolve o estado da última orde executada." -#: builtins.c:1672 +#: builtins.c:1712 #, fuzzy msgid "" "Create a coprocess named NAME.\n" @@ -4288,7 +4394,7 @@ msgstr "" " Estado de Saída:\n" " Devolve o estado de saída da ORDE." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -4302,7 +4408,7 @@ msgid "" " Returns success unless NAME is readonly." msgstr "" -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4320,7 +4426,7 @@ msgstr "" " Estado de Saída:\n" " Devolve o estado da última orde executada." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4334,7 +4440,7 @@ msgid "" " Returns the status of the resumed job." msgstr "" -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy msgid "" "Evaluate arithmetic expression.\n" @@ -4353,7 +4459,7 @@ msgstr "" " Estado de Saída:\n" " Devolve 1 se a EXPRESIÓN avalía a 0; devovle 0 de outra maneira." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -4381,7 +4487,7 @@ msgid "" " 0 or 1 depending on value of EXPRESSION." msgstr "" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -4435,7 +4541,7 @@ msgid "" " \t\tcommands should be saved on the history list.\n" msgstr "" -#: builtins.c:1822 +#: builtins.c:1862 #, fuzzy msgid "" "Add directories to stack.\n" @@ -4484,7 +4590,7 @@ msgstr "" " \n" " A orde interna `dirs' mostra a rima de directorios." -#: builtins.c:1856 +#: builtins.c:1896 #, fuzzy msgid "" "Remove directories from stack.\n" @@ -4531,7 +4637,7 @@ msgstr "" " \n" " A orde interna `dirs' mostra a pila de directorios." -#: builtins.c:1886 +#: builtins.c:1926 #, fuzzy msgid "" "Display directory stack.\n" @@ -4581,7 +4687,7 @@ msgstr "" "\tlista mostrada por dirs cando se chama sen opcións,\n" "\tcomezando desde cero." -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy msgid "" "Set and unset shell options.\n" @@ -4618,7 +4724,7 @@ msgstr "" " Devolve con éxito se se activa NOME_OPCIÓN; falla se se fornece\n" " unha opción non válida ou NOME_OPCIÓN está desactivado." -#: builtins.c:1938 +#: builtins.c:1978 msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -4635,9 +4741,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -4659,15 +4765,15 @@ msgid "" " error occurs." msgstr "" -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -4690,14 +4796,19 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4712,7 +4823,7 @@ msgstr "" " Devolve con éxito a menos que se forneza unha opción non válida o\n" " se produza un erro." -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -4744,7 +4855,7 @@ msgid "" " have a completion specification defined." msgstr "" -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -4786,7 +4897,7 @@ msgid "" " not an indexed array." msgstr "" -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -4796,6 +4907,37 @@ msgstr "" " \n" " Un sinónimo de `mapfile'." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Devolve o contexto da chamada a subrutina actual.\n" +#~ " \n" +#~ " Sen EXPR, devolve \"$liña $nomeficheiro\". Con EXPR, devolve\n" +#~ " \"$liña $subrutina $nomeficheiro\"; esta información adicional\n" +#~ " pódese usar para fornecer un volcado de pila.\n" +#~ " \n" +#~ " O valor de EXPR indica cantos marcos de chamada se debe retroceder\n" +#~ " antes do actual; o marco inicial é o marco 0.\n" +#~ " \n" +#~ " Estado de Saída:\n" +#~ " Devolve 0 a menos que o shell non estea executando unha función de " +#~ "shell\n" +#~ " ou EXPR sexa non válida." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "aviso: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: índice de matriz asociativa non válido" diff --git a/po/hr.gmo b/po/hr.gmo index ada65a4fe2fe38c959d72647fcbfcd85b5167c9b..60a09dc2fcd37f3a4ecc4f9ebc232fa9b4683e42 100644 GIT binary patch delta 12708 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 P$ep$*XUBUE+d%z)RVwb_ delta 50456 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 NxF1HHyI-o){Qq__UvvNf diff --git a/po/hr.po b/po/hr.po index f16a1b2f4..2f2192646 100644 --- a/po/hr.po +++ b/po/hr.po @@ -8,136 +8,139 @@ msgid "" msgstr "" "Project-Id-Version: bash-5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" -"PO-Revision-Date: 2023-05-23 19:54-0700\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" +"PO-Revision-Date: 2024-03-31 18:43-0700\n" "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n" "Language-Team: Croatian <lokalizacija@linux.hr>\n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 3.2.2\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "loši indeks polja" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: uklanjamo atribut nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: nije moguće pretvoriti indeksirano polje u asocijativno polje" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: nenumerički indeks nije moguć" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: indeks je nužan pri dodjeli asocijativnom polju" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: nije moguće stvoriti: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command: nije moguće pronaći prečac (keymap) za naredbu" +msgstr "" +"bash_execute_unix_command: nije moguće pronaći prečac (keymap) za naredbu" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: prvi ne bijeli znak nije „\"“" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "nema zaključnog „%c“ u %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: nedostaje separator (dvotočka)" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "„%s“: nije moguće razvezati prečac (keymap) za naredbu" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "zamjena vitičastih zagrada: nema dovoljno memorije za %s" # Brace expansion is a mechanism by which arbitrary strings may be generated -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "zamjena vitičastih zagrada: nema dovoljno memorije za %u elemenata" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "zamjena vitičastih zagrada: nema dovoljno memorije za „%s“" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "„%s“: ime aliasa nije valjano" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "nije omogućeno uređivanje redaka" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "„%s“: nevaljano ime za prečac (keymap)" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: nije moguće pročitati: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "„%s“: nepoznato ime funkcije" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s nije vezan na nijednu tipku.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s se može pozvati s prečacem " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "„%s“: nije moguće razvezati" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "broj ponavljanja petlje" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "ima smisla samo u „for“, „while“ ili „until“ petljama" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -146,361 +149,379 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Vrati kontekst trenutnog poziva funkciji.\n" "\n" -" Bez IZRAZA, vrati „$line $filename“. S IZRAZOM, vrati\n" -" „$line $subroutine $filename“; ovi dodatni podaci mogu poslužiti\n" -" za „stack trace“.\n" +" Bez IZRAZA, vrati „$line $filename“. Ako je dan IZRAZ, onda vrati\n" +" „$line $subroutine $filename“; ova dodatna informacija može poslužiti " +"za\n" +" stvaranje „stack trace“.\n" "\n" -" Vrijednost IZRAZA pokazuje koliko se razina poziva treba vratiti unatrag od\n" -" trenutne pozicije, s time da je pozicija 0 trenutna pozicija." +" Vrijednost IZRAZA naznačuje koliko ciklusa se treba vratiti\n" +" unatrag od trenutne pozicije; trenutni ciklus ima vrijednost 0.\n" +"\n" +" Završi s uspjehom osim ako ljuska ne izvršava ljuskinu funkciju\n" +" ili je IZRAZ nevaljan." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME nije definiran" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "previše argumenata" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "null-direktorij" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD nije definiran" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "redak %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "upozorenje: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: uporaba: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: opcija zahtijeva argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: nužan je numerički argument" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: nije nađeno" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: nevaljana opcija" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: nevaljano ime za opciju" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "„%s“: nije valjano ime" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "nevaljan oktalni broj" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "nevaljan heksadecimalni broj" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "nevaljani broj" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: nevaljana specifikacija signala" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "„%s“: nije PID ili nije valjana oznaka posla" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: je samo-za-čitanje varijabla" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: nije moguće pridružiti" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s je izvan raspona" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s je izvan raspona" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: nema takvog posla" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: nema upravljanja poslovima" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "nema upravljanja poslovima" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: ograničeni način rada" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "ograničeni način rada" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: nije ugrađena naredba ljuske" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "greška pisanja: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "greška pri postavljanju svojstava terminala: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "greška pri preuzimanju svojstava terminala: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: greška u određivanju trenutnog direktorija: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: dvosmislena oznaka posla" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "u ovoj inačici pomoć nije dostupna" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: nije indeksirano polje" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: nije moguće izbrisati: %s je samo-za-čitanje" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: nije moguće izbrisati" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nevaljano ime za akciju" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: nema specifikacije za dovršavanje" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "upozorenje: opcija -F možda neće raditi prema očekivanju" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "upozorenje: opcija -C možda neće raditi prema očekivanju" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "funkcija dovršavanja trenutno ne radi" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "može se koristiti samo u funkciji" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "„-f“ se ne može koristiti za definiranje funkcija" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: je samo-za-čitanje funkcija" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: referentna varijabla ne može biti polje (array)" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: nameref varijablu nije dopušteno samoreferencirati" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: kružna referencija imena" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "„%s“: nevaljano ime varijable za referenciju imena" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: nije moguće uništiti varijable polja na ovaj način" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: nije moguće pretvoriti asocijativno u indeksirano polje" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: dodjela vrijednosti u navodnicima složenom polju je zastarjela" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dinamičko učitavanje nije dostupno" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "nije moguće otvoriti dijeljeni objekt %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "nije moguće pronaći %s u dijeljenom objektu %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: dinamički učitljiva ugrađena naredba već je učitana" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "funkcija učitavanja za %s završila je s greškom (%d): nije učitano" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: nije dinamički učitan" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: nije moguće izbrisati: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: je direktorij" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: nije obična datoteka" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: datoteka je prevelika" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: nije moguće izvršiti binarnu datoteku" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: nije moguće izvršiti: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "odjavljen\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "nije prijavna ljuska; koristite „exit“" # stopped > pauzirano ili zaustavljeno -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Ima zaustavljenih poslova.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Ima pokrenutih poslova.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "nijedna naredba nije nađena" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "specifikacija povijesti" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: Nije moguće otvoriti privremenu datoteku: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "trenutno" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "posao %d započet je bez upravljanja poslovima" @@ -515,11 +536,11 @@ msgstr "%s: nelegalna opcija -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: opcija zahtijeva argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hash-iranje (memoriranje) nije omogućeno" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: hash tablica je prazna\n" @@ -546,17 +567,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." msgstr "" "Nema pomoći za „%s“.\n" "Pokušajte s „help help“, „man -k %s“ ili „info %s“." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: Nije moguće otvoriti: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -576,21 +598,31 @@ msgstr "" "Zvjezdica (*) pokraj imena znači da je naredba onemogućena.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "moguć je samo jedan od -a, -n, -r ili -w" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "pozicija u povijesti" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "prazno ime varijable polja" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parametar je prazan ili nedefiniran" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: nevaljan vremenski žig" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: proširenje povijesti nije uspjelo" @@ -604,113 +636,113 @@ msgstr "%s: „inlib” nije uspio" msgid "no other options allowed with `-x'" msgstr "uz „-x“ nije dopuštena nijedna druga opcija" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumenti moraju biti ID-ovi procesa ili ID-ovi posla" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Nepoznata greška" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "očekivan je izraz" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: nije indeksirano polje" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: nevaljana specifikacija deskriptora datoteke" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: nevaljan deskriptor datoteke: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: nevaljan broj (količina) redaka" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: nevaljan početak polja (nevaljan indeks polja)" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: nevaljana količina (redaka između poziva)" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "prazno ime varijable polja" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "nužna je podrška za varijable (vrsta) polje" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "„%s“: nedostaje znak u specifikaciji formata" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "„%c“: nevaljana specifikacija za format vremena" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "„%c“: nevaljan znak u specifikaciji formata" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "upozorenje: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "problem s raščlanjivanjem formata: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "nedostaje heksadecimalna znamenka za \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "nedostaje unikodna (unicode) znamenka za \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "nema drugog direktorija" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: nevaljan argument" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<nema trenutnog direktorija>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "stȏg direktorija je prazan" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "indeks stȏga direktorija" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -725,10 +757,12 @@ 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 "" "Pokaže popis trenutno zapamćenih direktorija. Direktoriji se unose\n" @@ -748,7 +782,7 @@ msgstr "" " -N Pokaže N-ti direktorij iz stȏga, brojeći od nule s\n" " desne strane popisa kad se „dirs“ pokrene bez opcija." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -781,16 +815,20 @@ msgstr "" " direktorije u stȏg, odnosno samo manipulira sa stȏgom\n" "\n" " Argumenti:\n" -" +N Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule s\n" -" lijeve strane popisa pokazanog s „dirs“) postane novi vrh stȏga.\n" -" -N Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule s\n" -" desne strane popisa pokazanog s „dirs“) postane novi vrh stȏga.\n" +" +N Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule " +"s\n" +" lijeve strane popisa pokazanog s „dirs“) postane novi vrh " +"stȏga.\n" +" -N Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule " +"s\n" +" desne strane popisa pokazanog s „dirs“) postane novi vrh " +"stȏga.\n" " DIREKTORIJ Doda DIREKTORIJ na vrh stȏga direktorija i\n" " učini ga novim trenutnim radnim direktorijem.\n" "\n" " Naredba „dirs“ prikaže trenutni sadržaj stȏga direktorija." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -811,7 +849,8 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" "Ukloni zapise iz stȏga direktorija. Bez argumenata, ukloni direktorij na\n" -" vrhu stȏga i učini da je trenutni radni direktorij jednak novom direktoriju\n" +" vrhu stȏga i učini da je trenutni radni direktorij jednak novom " +"direktoriju\n" " na vrhu stȏga.\n" "\n" " Opcije:\n" @@ -828,319 +867,334 @@ msgstr "" "\n" " Naredba „dirs“ prikaže trenutni sadržaj stȏga direktorija." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: nevaljana specifikacija za istek vremena (timeout)" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "greška čitanja: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "„return“ je moguć samo iz funkcije ili iz skripte pokrenute sa „source”" +msgstr "" +"„return“ je moguć samo iz funkcije ili iz skripte pokrenute sa „source”" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "nije moguće istovremeno poništiti funkciju i varijablu" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: nije varijabla (vrste) polja" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: nije funkcija" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: Nije moguće izvesti (export)" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "broj (veličina) pomaka" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "nije moguće istovremeno postaviti i poništiti opcije ljuske" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: nevaljano ime za opciju ljuske" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "ime datoteke je nužno kao argument" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: datoteka nije pronađena" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "obustava nije moguća" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "nije moguće obustaviti prijavnu ljusku" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s je alias za „%s“\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s je ključna riječ ljuske\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s je funkcija\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s je specijalna ugrađena funkcija ljuske\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s je funkcija\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s je ugrađena funkcija ljuske\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s je %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s je zapamćen (hashed) (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: nevaljan argument za ograničenje" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "„%c“: loša naredba" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: nije moguće odrediti vrijednost ograničenja: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "ograničenje" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: nije moguće promijeniti ograničenja: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "oktalni broj" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" -msgstr "„%c“: nevaljan operator u simboličkom načinu" +msgstr "„%c“: nevaljan operator u simboličnom načinu" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" -msgstr "„%c“: nevaljan znak u simboličkom načinu" +msgstr "„%c“: nevaljan znak u simboličnom načinu" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " redak " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "zadnja naredba: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Prekidamo..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "informacija: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "Dijagnostičko upozorenje: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "nepoznata greška naredbe" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "loš tip naredbe" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "loš konektor" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "loš skok" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: nevezana varijabla" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" -msgstr "\atimed out, čekanje na ulaz je isteklo: auto-logout, automatska-odjava\n" +msgstr "" +"\atimed out, čekanje na ulaz je isteklo: auto-logout, automatska-odjava\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "nije moguće preusmjeriti standardni ulaz iz /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: „%c“: nevaljan znak za format" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc(): coproc [%d:%s] još uvijek postoji" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "greška cijevi" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: prekoračena je dopuštena razina (dubina) gniježđenja eval (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: prekoračena je dopuštena razina gniježđenja source (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: prekoračena je dopuštena razina gniježđenja funkcije (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: ograničenje : znak „/“ nije dopušten u imenima naredba" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: naredba nije pronađena" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: loš interpreter" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: nije moguće izvršiti: potrebna datoteka nije nađena" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: loš interpreter" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: binarnu datoteku %s nije moguće pokrenuti/izvršiti" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "„%s“ je specijalna funkcija ugrađena u ljusku" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" -msgstr "nije moguće duplicirati deskriptor datoteke %d u deskriptor datoteke %d" +msgstr "" +"nije moguće duplicirati deskriptor datoteke %d u deskriptor datoteke %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "prekoračena je dopuštena razina rekurzija izraza" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "podlijevanje stȏga rekurzija (prazni stȏg)" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "sintaktička greška u izrazu" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "pokušaj dodjeljivanja ne-varijabli (objektu koji nije varijabla)" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "sintaktička greška u dodjeljivanju varijabli" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "dijeljenje s 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "**interna greška** : loš simbol u izrazu za dodjelu" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "znak „:“ je nužan u uvjetnom izrazu" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "eksponent je manji od 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "očekivalo se ime nakon pre-increment ili pre-decrement" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "nedostaje „)“" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "sintaktička greška: očekivan je operand" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "sintaktička greška: nevaljan aritmetički operator" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (simbol greške je „%s“)" @@ -1157,7 +1211,7 @@ msgstr "%s: nevaljana cijelo brojna (integer) konstanta" msgid "value too great for base" msgstr "vrijednost baze je prevelika" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: greška u izrazu\n" @@ -1166,46 +1220,54 @@ msgstr "%s: greška u izrazu\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd(): nije moguće pristupiti nadređenim direktorijima" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "„%s“ je specijalna funkcija ugrađena u ljusku" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "nije moguće onemogućiti „nodelay” način za deskriptor datoteke %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "nije moguće rezervirati novi datotečni deskriptor za bash ulaz iz datotečnog deskriptora %d" +msgstr "" +"nije moguće rezervirati novi datotečni deskriptor za bash ulaz iz datotečnog " +"deskriptora %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" -msgstr "save_bash_input(): međuspremnik već postoji za novi datotečni deskriptor %d" +msgstr "" +"save_bash_input(): međuspremnik već postoji za novi datotečni deskriptor %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline(): pgrp pipe (procesna skupina cijevi)" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: PETLJA: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: PETLJA: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "račvani PID %d pripada tekućem poslu %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "uklanjamo zaustavljeni posao %d sa skupinom procesa %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process(): PID %5ld (%s) označen kao još uvijek aktivan" @@ -1215,137 +1277,140 @@ msgstr "add_process(): PID %5ld (%s) označen kao još uvijek aktivan" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid(): %ld: PID ne postoji" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Gotovo" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Zaustavljeno" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Zaustavljeno(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Pokrenuto" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Gotovo(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Izlaz %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Nepoznata izlazna vrijednost (izlazni kȏd)Nepoznato" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(ispis memorije je spremljen!) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "promijeni skupinu potomka (% ld u% ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: PID %ld nije potomak ove ljuske" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: proces %ld nije nigdje registriran" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: posao %d je zaustavljen" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: nema tekućih poslova" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: posao je završen" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: posao %d je već u pozadini" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" -msgstr "waitchld(): WNOHANG je omogućen kako bi se izbjeglo neograničeno blokiranje" +msgstr "" +"waitchld(): WNOHANG je omogućen kako bi se izbjeglo neograničeno blokiranje" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: redak %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (ispis memorije je spremljen!)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(radni direktorij je sada: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp() nije uspješna" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: nema upravljanja poslom u pozadini" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" -msgstr "initialize_job_control: disciplina retka (protokol realizacije stringova/redaka)" +msgstr "" +"initialize_job_control: disciplina retka (protokol realizacije stringova/" +"redaka)" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid()" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "nije moguće postaviti procesnu skupinu (%d) terminala" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "nema upravljanja poslom u ovoj ljusci" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc(): neuspješni kontrolni test: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1354,378 +1419,396 @@ msgstr "" "\r\n" "malloc(): %s:%d: loše provedeni kontrolni test\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "nepoznato" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc(): zauzeti blok na popisu slobodnih blokova" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free(): pozvana s argumentom bloka koji je već slobodan" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free(): pozvana s argumentom bloka koji se ne koristi" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free(): otkriveno je podlijevanje, mh_nbytes izvan raspona" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free(): otkriveno je podlijevanje; magic8 je oštećen" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free(): veličine početnog i zaključnog (dijela) bloka su različite" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" -msgstr "realloc(): je pozvana s nekorištenim blokom kao argument (blok još nije odabran)" +msgstr "" +"realloc(): je pozvana s nekorištenim blokom kao argument (blok još nije " +"odabran)" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc(): otkriveno je podlijevanje, mh_nbytes izvan raspona" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc(): otkriveno je podlijevanje; magic8 je oštećen" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc(): veličine početnog i zaključnog (dijela) bloka su različite" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc(): rezervacijska tablica je popunjena s FIND_ALLOC??\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc(): %p je već rezerviran u tablici??\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free(): %p je već slobodan u tablici??\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "nevaljana baza" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: nepoznati host" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: nevaljana usluga" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: loša specifikacija za mrežnu stazu" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "mrežne operacije nisu podržane" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale(): LC_ALL: nije moguće promijeniti jezično područje (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale(): LC_ALL: nije moguće promijeniti jezično područje (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale(): %s: nije moguće promijeniti jezično područje (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale(): %s: nije moguće promijeniti jezično područje (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Imate poštu u $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Imate novu poštu u $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Pošta u %s je već pročitana\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "sintaktička greška: nužan je aritmetički izraz" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "sintaktička greška: neočekivan „;“ znak" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "sintaktička greška: „((%s))“" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document(): loš tip instrukcije %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "here-document u retku %d završava sa znakom kraj datoteke (očekivan je „%s“)" +msgstr "" +"here-document u retku %d završava sa znakom kraj datoteke (očekivan je „%s“)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" -msgstr "make_redirection(): instrukcija za preusmjeravanje „%d“ je izvan raspona" +msgstr "" +"make_redirection(): instrukcija za preusmjeravanje „%d“ je izvan raspona" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" msgstr "" "shell_getc(): shell_input_line_size (%zu) veća je od SIZE_MAX (%lu):\n" " redak je skraćen" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "greška pisanja: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "maksimalna broj (količina) here-document-a je premašena" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "neočekivan kraj-datoteke (EOF) pri traženju odgovarajućeg „%c“" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "neočekivan kraj datoteke (EOF) pri traženju „]]“" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "sintaktička greška u uvjetnom izrazu: neočekivan simbol „%s“" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "sintaktička greška u uvjetnom izrazu" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "neočekivan simbol „%s“; očekivana je „)“" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "očekivana je „)“" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "neočekivan argument „%s“ za uvjetni unarni operator" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "neočekivan argument za uvjetni unarni operator" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "neočekivani simbol „%s“; očekivan je uvjetni binarni operator" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "očekivan je uvjetni binarni operator" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "neočekivan argument „%s“ uvjetnom binarnom operatoru" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "neočekivan argument uvjetnom binarnom operatoru" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "neočekivan simbol „%c“ u uvjetnoj naredbi" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "neočekivan simbol „%s“ u uvjetnoj naredbi" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "neočekivan simbol %d u uvjetnoj naredbi" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "sintaktička greška blizu neočekivanog simbola „%s“" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "sintaktička greška blizu „%s“" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "sintaktička greška: neočekivani kraj datoteke" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "sintaktička greška: neočekivani kraj datoteke" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "sintaktička greška" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Koristite \"%s\" za izlaz iz ljuske.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "neočekivani kraj datoteke pri traženju odgovarajuće „)“" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion(): funkcija „%s“ nije pronađena" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion(): %s: moguća ponovljena petlja" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert(): %s: prazni COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command(): loš konektor „%d“" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set(): %d: nevaljan deskriptor datoteke" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set(): pointer datoteke je NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" -msgstr "deskriptor datoteke xtrace (%d) != broju datoteke u pointeru datoteke xtrace (%d)" +msgstr "" +"deskriptor datoteke xtrace (%d) != broju datoteke u pointeru datoteke " +"xtrace (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf(): „%c“: nevaljan znak za format" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "deskriptor datoteke je izvan raspona" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: dvosmisleno preusmjeravanje" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: nije moguće pisati preko postojeće datoteke" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: ograničeno: nije moguće preusmjeriti izlaz" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "nije moguće stvoriti privremenu datoteku za here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: nije moguće dodijeliti deskriptor datoteke varijabli" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port nije podržan bez umrežavanja" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "greška preusmjeravanja: nije moguće duplicirati deskriptor datoteke" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "nije moguće pronaći /tmp; stvorite taj direktorij!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp mora biti valjano ime direktorija" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "u interaktivnoj ljusci pretty-printing se zanemaruje" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: nevaljana opcija" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "nije moguće postaviti UID na %d: efektivni UID je %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "nije moguće postaviti GID na %d: efektivni GID je %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "nije moguće pokrenuti debugger; dijagnostika je onemogućena" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: Je direktorij" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Nemam ime!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, inačica %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1734,51 +1817,54 @@ msgstr "" "Uporaba: %s [GNU duga opcija] [opcija]...\n" " %s [GNU duga opcija] [opcija] skripta...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU duge opcije:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Kratke opcije:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD ili -c NAREDBA ili -O SHOPT-OPCIJA (samo za pozivanje)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s ili -o opcija (može se promijeniti sa „set”)\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Utipkajte „%s -c \"help set\"“ za dodatne obavijesti o opcijama ljuske.\n" +msgstr "" +"Utipkajte „%s -c \"help set\"“ za dodatne obavijesti o opcijama ljuske.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "Utipkajte „%s -c help set“ za dodatne obavijesti o ugrađenim naredbama ljuske.\n" +msgstr "" +"Utipkajte „%s -c help set“ za dodatne obavijesti o ugrađenim naredbama " +"ljuske.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Koristite naredbu „bashbug“ za prijavljivanje grešaka.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Početna mrežna bash stranica: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Općenita pomoć za korištenje GNU softvera: <http://www.gnu.org/gethelp/>\n" "Prijavite primjedbe i greške u prijevodu na lokalizacija@linux.hr/\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask(): %d: nevaljana operacija" @@ -1948,284 +2034,308 @@ msgstr "Zahtjev za informacijama" msgid "Unknown Signal #%d" msgstr "Nepoznati signal #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "loša supstitucija: nema zaključnog „%s“ u %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: nije moguće dodijeliti popis elementu polja" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "nije moguće napraviti cijev za zamjenu procesa" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "nije moguće napraviti potomka za zamjenu procesa" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "nije moguće otvoriti imenovanu cijev %s za čitanje" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "nije moguće otvoriti imenovanu cijev %s za pisanje" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "nije moguće duplicirati imenovanu cijev %s kao deskriptor datoteke %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "nevaljana supstitucija: zanemaren prazni (nula) bajt u ulazu" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" +"command_substitute(): nije moguće duplicirati cijev kao deskriptor datoteke 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "nije moguće napraviti cijev za zamjenu naredbi" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "nije moguće napraviti potomka za zamjenu naredbi" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" -msgstr "command_substitute(): nije moguće duplicirati cijev kao deskriptor datoteke 1" +msgstr "" +"command_substitute(): nije moguće duplicirati cijev kao deskriptor datoteke 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: nevaljano ime varijable za ime referencije" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: nevaljana neizravna ekspanzija" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "„%s“: nevaljano ime varijable" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parametar nije postavljen" +msgid "%s: bad substitution" +msgstr "%s: loša supstitucija" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parametar je prazan ili nedefiniran" +msgid "%s: parameter not set" +msgstr "%s: parametar nije postavljen" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: rezultat od dijela stringa (substring) < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: loša supstitucija" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: nije moguće dodijeliti na ovaj način" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "buduće inačice ljuske prisilit će vrednovanje kao aritmetičku supstituciju" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"buduće inačice ljuske prisilit će vrednovanje kao aritmetičku supstituciju" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "loša supstitucija: nema zaključnog znaka \"`\" u %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "nema podudaranja: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "očekivan je argument" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: očekivan je cjelobrojni izraz" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "očekivana je „)“" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "očekivana je „)“, a nađen je %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: očekivan je binarni operator" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: očekivan je unarni operator" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "nedostaje „]“" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "sintaktička greška: neočekivan „%s“" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "nevaljani broj za signal" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: prekoračena je dopuštena razina gniježđenja (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps(): loša vrijednost u trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: signalom rukuje SIG_DFL, opet šalje %d (%s) samom sebi" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: signalom rukuje SIG_DFL, opet šalje %d (%s) samom sebi" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler(): loš signal %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "greška pri uvozu definicije funkcije za „%s“" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "razina ljuske (%d) je previsoka, vraćamo ju na 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "maksimalna broj (količina) here-document-a je premašena" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable(): u trenutnom opsegu nema konteksta funkcije" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: varijabli se ne može dodijeliti vrijednost" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: nije moguće naslijediti vrijednost nekompatibilnog tipa" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: nazivu referencije se dodjeljuje cijeli broj" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables(): u trenutnom opsegu nema konteksta funkcije" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "*** %s ima prazni string za izvoz" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "*** nevaljani znak %d u izvoznom stringu za %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "*** nema „=“ u izvoznom stringu za %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context(): glava „shell_variables“ nije funkcijski kontekst" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context(): nije „global_variables“ kontekst" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope(): vrh od „shell_variables“ nije privremeni raspon valjanosti" +msgstr "" +"pop_scope(): vrh od „shell_variables“ nije privremeni raspon valjanosti" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: nije moguće otvoriti kao DATOTEKU" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: nevaljana vrijednost za „trace” deskriptora datoteke" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s vrijednost za kompatibilnost je izvan raspona" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" msgstr "" "Licencija:\n" "GPLv3+: GNU GPL inačica 3 ili novija <http://gnu.org/licenses/gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, inačica %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Ovo je slobodan softver: slobodno ga mijenjajte i dijelite." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "NEMA JAMSTVA do granica dopuštenih zakonom." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: nije moguće rezervirati %lu bajtova (rezervirano je %lu bajtova)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: nije moguće rezervirati %lu bajtova" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" -msgstr "%s: %s:%d: nije moguće rezervirati %lu bajtova (rezervirano je %lu bajtova)" +msgstr "" +"%s: %s:%d: nije moguće rezervirati %lu bajtova (rezervirano je %lu bajtova)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: nije moguće rezervirati %lu bajtova" @@ -2239,7 +2349,9 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] IME [IME...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" msgstr "" "bind [-lpsvPSVX] [-m MAPA_TIPAKA] [-f DATOTEKA] [-q FUNKCIJA]\n" " [-u FUNKCIJA] [-r PREČAC] [-x PREČAC:SHELL-NAREDBA]\n" @@ -2262,7 +2374,8 @@ msgid "caller [expr]" msgstr "caller [IZRAZ]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [DIREKTORIJ]" #: builtins.c:68 @@ -2274,12 +2387,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] NAREDBA [ARGUMENT...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [aAfFgiIlnrtux] [IME[=VRIJEDNOST]...] ili declare -p [-aAfFilnrtux] [IME...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [aAfFgiIlnrtux] [IME[=VRIJEDNOST]...] ili declare -p [-aAfFilnrtux] " +"[IME...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] IME[=VRIJEDNOST]… ili typeset -p [-aAfFilnrtux] [IME...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] IME[=VRIJEDNOST]… ili typeset -p [-aAfFilnrtux] " +"[IME...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2340,7 +2461,9 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [UZORAK...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" msgstr "" "history [-c] [-d POZICIJA] [N]\n" " ili: history -anrw [DATOTEKA]\n" @@ -2357,7 +2480,9 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [SPECIFIKACIJA_POSLA... | PID...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" msgstr "" "kill [-s SIGNAL_IME | -n SIGNAL_BROJ | -SIGNAL] PID | SPECIFIKACIJA_POSLA\n" " ili: kill -l [SIGNAL]" @@ -2367,7 +2492,10 @@ msgid "let arg [arg ...]" msgstr "let ARGUMENT..." #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a POLJE] [-d MEĐA] [-i TEKST] [-p PROMPT]\n" " [-n BROJ_ZNAKOVA] [-N BROJ_ZNAKOVA] [-t SEKUNDA]\n" @@ -2422,7 +2550,8 @@ msgid "[ arg... ]" msgstr "[ ARGUMENT... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[ARGUMENT] SIGNAL_SPEC...]" #: builtins.c:168 @@ -2446,118 +2575,137 @@ msgid "wait [pid ...]" msgstr "wait [PID...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for IME [in RIJEČIMA...].; do NAREDBE; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( IZRAZ1; IZRAZ2; IZRAZ3 )); do NAREDBE; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select IME [in RIJEČI... ;] do NAREDBE; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] CJEVOVOD" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case RIJEČ in [UZORAK [| UZORAK]...) NAREDBE;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if NAREDBE; then NAREDBE; [ elif NAREDBE; then NAREDBE; ]... [ else NAREDBE; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if NAREDBE; then NAREDBE; [ elif NAREDBE; then NAREDBE; ]... [ else " +"NAREDBE; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while NAREDBE; do NAREDBE-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until NAREDBE; do NAREDBE-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [IME] NAREDBA [PREUSMJERAVANJA]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "" "function IME { NAREDBE ; }\n" " ili: IME () { NAREDBE ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ NAREDBE; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "SPECIFIKACIJA_POSLA [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( IZRAZ ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ IZRAZ ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "var — imena i značenje nekih varijabla ljuske" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | DIREKTORIJ]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [IME_OPCIJE...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v VARIJABLA] FORMAT [ARGUMENTI]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" msgstr "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o OPCIJA] [-A AKCIJA] [-C NAREDBA]\n" " [-F FUNKCIJA] [-G GLOB_UZORAK] [-P PREFIKS] [-S SUFIKS]\n" " [-W POPIS_RIJEČI] [-X FILTAR_UZORAKA] [IME...]" -#: builtins.c:235 -msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o OPCIJA] [-A AKCIJA] [-C NAREDBA] [-F FUNCIJA]\n" " [-G GLOB_UZORAK] [-P PREFIKS] [-S SUFIKS]\n" " [-W POPIS_RIJEČI] [-X FILTAR_UZORAKA] [IME...]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o OPCIJA] [-DEI] [IME...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +#: builtins.c:244 +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" msgstr "" "mapfile [-d MEĐA] [-n KOLIČINA [-O POČETAK] [-s BROJ] [-t] [-u FD]\n" " [-C FUNKCIJA] [-c TOLIKO] [POLJE]" -#: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" msgstr "" "readarray [-d MEĐA] [-n KOLIČINA] [-O POČETAK] [-s BROJ] [-t] [-u FD]\n" " [-C FUNKCIJA] [-c TOLIKO] [POLJE]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2572,14 +2720,16 @@ 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 "" "Definira ili prikaže aliase.\n" "\n" " Bez argumenata (ili s opcijom -p), „alias“ ispiše popis aliasa na\n" " standardni izlaz u upotrebljivom formatu: alias IME='ZAMJENA'.\n" -" S argumentima, alias je definiran za svako IME za koje je navedena ZAMJENA.\n" +" S argumentima, alias je definiran za svako IME za koje je navedena " +"ZAMJENA.\n" " Zaostali razmak (bjelina) u ZAMJENI čini da „alias“ prilikom ekspanzije\n" " provjerava je li i sljedeća riječ zamjenska.\n" "\n" @@ -2588,7 +2738,7 @@ msgstr "" "\n" " Završi s uspjehom osim ako alias nije definiran za dano IME." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2603,7 +2753,7 @@ msgstr "" "\n" " Završi s uspjehom osim ako IME nije postojeći alias." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2615,25 +2765,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2643,14 +2798,18 @@ msgstr "" "\n" " Veže sekvenciju tipki (key sequence, prečac) na „Readline“ funkciju\n" " ili na makronaredbe ili na „Readline“ varijablu. Sintaksa za argumente\n" -" koji nisu opcija je ista kao za ~/.inputrc, ali moraju biti proslijeđeni\n" +" koji nisu opcija je ista kao za ~/.inputrc, ali moraju biti " +"proslijeđeni\n" " kao jedan argument; primjer: bind '\"\\C-x\\C-r\": re-read-init-file'\n" "\n" " Opcije:\n" -" -f DATOTEKA pročita prečace (bindings, key sequences) iz DATOTEKE\n" +" -f DATOTEKA pročita prečace (bindings, key sequences) iz " +"DATOTEKE\n" " -l izlista imena svih poznatih funkcija\n" -" -m MAPA_TIPAKA koristi MAPU_TIPAKA (keymap) dok traje ova naredba;\n" -" moguće MAPE_TIPAKA su jedna od emacs, emacs-standard,\n" +" -m MAPA_TIPAKA koristi MAPU_TIPAKA (keymap) dok traje ova " +"naredba;\n" +" moguće MAPE_TIPAKA su jedna od emacs, emacs-" +"standard,\n" " emacs-meta, emacs-ctlx, vi, vi-move, vi-command,\n" " i vi-insert.\n" " -P izlista imena funkcija i prečaca\n" @@ -2660,7 +2819,8 @@ msgstr "" " -q FUNKCIJA ispita i ispiše tipke koje pozivaju tu FUNKCIJU\n" " -S izlista prečace (sekvencije tipki) koje pozivaju\n" " makronaredbe s njihovim vrijednostima\n" -" -s ispiše sekvencije tipki koje pozivaju makronaredbe s\n" +" -s ispiše sekvencije tipki koje pozivaju makronaredbe " +"s\n" " njihovim vrijednostima u obliku koji se može\n" " iskoristiti kao ulaz\n" " -u FUNKCIJA razveže sve prečace vezane na tu FUNKCIJU\n" @@ -2676,7 +2836,7 @@ msgstr "" " Završi s uspjehom osim ako je dana neprepoznata opcija ili se je\n" " dogodila greška." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2692,7 +2852,7 @@ msgstr "" "\n" " Završi s uspjehom osim ako je N manji od 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2707,13 +2867,14 @@ msgstr "" "\n" " Završi s uspjehom osim ako je N manji od 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2723,14 +2884,15 @@ msgstr "" "\n" " Izvrši danu UGRAĐENU_SHELL_FUNKCIJU s navedenim ARGUMENTIMA.\n" " To je korisno ako želite redefinirati implementaciju ugrađene shell\n" -" funkcije kao vlastitu shell funkciju (skriptu s istim imenom kao ugrađena\n" +" funkcije kao vlastitu shell funkciju (skriptu s istim imenom kao " +"ugrađena\n" " shell funkcija), a potrebna vam je funkcionalnost te ugrađene shell\n" " funkcije unutar vaše vlastite skripte.\n" "\n" " Završi s kȏdom UGRAĐENE_SHELL_FUNKCIJE ili s kȏdom 1 ako\n" " UGRAĐENA_SHELL_FUNKCIJA nije ugrađene funkcija ljuske." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2748,7 +2910,8 @@ msgstr "" "Vrati kontekst trenutnog poziva funkciji.\n" "\n" " Bez IZRAZA, vrati „$line $filename“. Ako je dan IZRAZ, onda vrati\n" -" „$line $subroutine $filename“; ova dodatna informacija može poslužiti za\n" +" „$line $subroutine $filename“; ova dodatna informacija može poslužiti " +"za\n" " stvaranje „stack trace“.\n" "\n" " Vrijednost IZRAZA naznačuje koliko ciklusa se treba vratiti\n" @@ -2757,20 +2920,27 @@ msgstr "" " Završi s uspjehom osim ako ljuska ne izvršava ljuskinu funkciju\n" " ili je IZRAZ nevaljan." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2786,16 +2956,19 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Promjeni trenutni direktorij.\n" "\n" -" Promijeni trenutni direktorij u navedeni DIREKTORIJ. Ako DIREKTORIJ nije\n" +" Promijeni trenutni direktorij u navedeni DIREKTORIJ. Ako DIREKTORIJ " +"nije\n" " naveden, za DIREKTORIJ se koristi vrijednost varijable HOME.\n" "\n" " Varijabla CDPATH definira staze (direktorije) po kojima se\n" @@ -2810,10 +2983,13 @@ msgstr "" " naziv, „cd“ prijeđe u direktorij s tim nazivom.\n" "\n" " Opcije:\n" -" -L slijedi simboličke poveznice; simboličke poveznice u DIREKTORIJU razriješi\n" +" -L slijedi simbolične poveznice; simbolične poveznice u DIREKTORIJU " +"razriješi\n" " nakon obrade instance „..“\n" -" -P rabi fizičku strukturu direktorija umjesto da slijedi simboličke\n" -" poveznice; simboličke poveznice u DIREKTORIJU razriješi prije obrade\n" +" -P rabi fizičku strukturu direktorija umjesto da slijedi " +"simbolične\n" +" poveznice; simbolične poveznice u DIREKTORIJU razriješi prije " +"obrade\n" " instance „..“\n" " -e ako je dana s opcijom „-P“, i trenutni radni direktorij nije\n" " moguće uspješno odrediti nakon uspješne promjene direktorija,\n" @@ -2821,16 +2997,17 @@ msgstr "" " -@ opiše proširene atribute povezane s datotekom kao direktorij\n" " koji sadrži atribute datoteke (ako sustav to podržava)\n" "\n" -" Zadano, simboličke poveznice se slijede kao da je navedena opcija -L.\n" +" Zadano, simbolične poveznice se slijede kao da je navedena opcija -L.\n" " „..“ (ako se pojavi u DIREKTORIJU) obradi se uklanjanjem komponente\n" -" staze koja mu neposredno prethodi unatrag do kose crte „/“ ili do početka\n" +" staze koja mu neposredno prethodi unatrag do kose crte „/“ ili do " +"početka\n" " DIREKTORIJA.\n" "\n" " Završi s uspjehom ako je direktorij promijenjen i ako je\n" " varijabla okoline PWD uspješno postavljena kad je dana opcija „-P“;\n" " u suprotnom završi s kȏdom 1." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2849,14 +3026,15 @@ msgstr "" "\n" " Opcije:\n" " -L ispiše vrijednost od $PWD ako sadrži trenutni radni direktorij\n" -" -P ispiše stvarnu fizičku stazu do direktorija bez simboličkih poveznica\n" +" -P ispiše stvarnu fizičku stazu do direktorija bez simboličnih " +"poveznica\n" "\n" " Bez opcija, „pwd“ se ponaša kao da je navedena opcija „-L“\n" "\n" " Završi s uspjehom osim ako nije dana nevaljana opcija\n" " ili se trenutni radni direktorij ne može pročitati." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2866,7 +3044,7 @@ msgid "" " Always succeeds." msgstr "Naredba nema nikakvog efekta, ne radi ništa; uvijek završi uspješno." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2874,7 +3052,7 @@ msgid "" " Always succeeds." msgstr "Uvijek završi uspješno s kȏdom 0." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2882,12 +3060,13 @@ msgid "" " Always fails." msgstr "Uvijek završi neuspješno s kȏdom 1." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2908,13 +3087,15 @@ msgstr "" " Opcije:\n" " -p rabi zadanu vrijednost za PATH kao garanciju\n" " pronalaženja svih standardnih programa\n" -" -v pokaže ime naredbe koja bi se izvršila similar to the „type“ builtin\n" +" -v pokaže ime naredbe koja bi se izvršila similar to the „type“ " +"builtin\n" " -V == kao „-v” ali opširnije\n" "\n" " Završi s izlaznim kȏdom NAREDBE\n" " ili s 1 ako NAREDBA nije pronađena." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2942,12 +3123,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2964,7 +3147,8 @@ msgstr "" " -F prikaže samo imena funkcija bez definicija\n" " -g stvori globalne varijable samo za upotrebu u funkciji ljuske;\n" " inače su zanemarene\n" -" -I ako stvori lokalnu varijablu, neka naslijedi atribute i vrijednost\n" +" -I ako stvori lokalnu varijablu, neka naslijedi atribute i " +"vrijednost\n" " varijable s istim imenom u prethodnom opsegu\n" " -p prikaže atribute i vrijednost za svako dano IME\n" "\n" @@ -2991,7 +3175,7 @@ msgstr "" " Završi s uspjehom osim ako je dana nevaljana opcija\n" " ili se dogodila greška prilikom zadavanja varijabli." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2999,9 +3183,10 @@ msgid "" msgstr "" "Postavi vrijednosti i svojstva varijabli.\n" "\n" -" Sinonim za „declare“. Za detalje utipkajte (bez navodnika) „help declare“." +" Sinonim za „declare“. Za detalje utipkajte (bez navodnika) „help " +"declare“." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3017,20 +3202,23 @@ msgid "" msgstr "" "Definira lokalne varijable.\n" "\n" -" Stvori lokalnu varijablu IME i dodijeli joj vrijednost. OPCIJA može biti\n" +" Stvori lokalnu varijablu IME i dodijeli joj vrijednost. OPCIJA može " +"biti\n" " bilo koja od opcija koju prihvaća naredba „declare“.\n" "\n" " Lokalne varijable mogu se koristiti samo unutar funkcije i vidljive su\n" " samo toj funkciji i njezinim potomcima.\n" "\n" -" Završi s uspjehom osim ako su navedene nevaljane opcije, ili se dogodila\n" +" Završi s uspjehom osim ako su navedene nevaljane opcije, ili se " +"dogodila\n" " greška pri dodijeli ili ljuska ne izvrši funkciju." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3054,9 +3242,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3093,7 +3283,7 @@ msgstr "" "\n" " Završi s uspjehom osim ako se ne dogodi greška pri pisanju." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3107,12 +3297,14 @@ msgid "" msgstr "" "Ispiše argumente na standardni izlaz.\n" "\n" -" Prikaže ARGUMENTE na standardnom izlazu (pripoji im znak za novi redak).\n" +" Prikaže ARGUMENTE na standardnom izlazu (pripoji im znak za novi " +"redak).\n" " Opcijom „-n“ može se isključiti pripajanje znaka za novi redak.\n" "\n" " Završi s uspjehom osim ako se ne dogodi greška pri pisanju." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3132,6 +3324,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3164,11 +3362,12 @@ msgstr "" " Završi s uspjehom osim ako IME nije ugrađena naredba ili se nije\n" " dogodila greška." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3181,7 +3380,7 @@ msgstr "" "\n" " Završi s kȏdom naredbe ili uspješno ako je naredba prazna." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3230,20 +3429,26 @@ msgstr "" " slova slijedi dvotočka, očekuje se da opcija ima argument koji treba\n" " biti bjelinom odvojen od opcije.\n" "\n" -" Svaki put kad se pozove, getopts će smjestiti sljedeću opciju u ljuskinu\n" +" Svaki put kad se pozove, getopts će smjestiti sljedeću opciju u " +"ljuskinu\n" " varijablu IME (ako IME ne postoji, getopts ga inicijalizira), a indeks\n" " sljedećeg argumenta koji treba procesirati u ljuskinu varijablu OPTIND.\n" " OPTIND je inicijaliziran na 1 pri svakom pozivanju ljuske ili ljuskine\n" " skripte. Ako opcija zahtijeva argument, getopts smjesti taj argument u\n" " ljuskinu varijablu OPTARG.\n" "\n" -" getopts javlja greške na jedan od dva načina. Ako je dvotočka prvi znaku\n" +" getopts javlja greške na jedan od dva načina. Ako je dvotočka prvi " +"znaku\n" " u STRINGU_OPCIJA, getopts tiho prijavi grešku, tj. ne ispisuje poruke o\n" -" greškama. Ako naiđe na nevaljanu opciju, getopts smjesti nađeni znak opcije\n" -" u OPTARG. Ako zahtijevani argument nije pronađen, getopts smjesti „:“ u IME\n" -" i postavi OPTARG na pronađeni znak opcije. Ako getopts ne radi tiho i naiđe\n" +" greškama. Ako naiđe na nevaljanu opciju, getopts smjesti nađeni znak " +"opcije\n" +" u OPTARG. Ako zahtijevani argument nije pronađen, getopts smjesti „:“ u " +"IME\n" +" i postavi OPTARG na pronađeni znak opcije. Ako getopts ne radi tiho i " +"naiđe\n" " na nevaljanu opciju, getopts smjesti „?“ u IME i poništi OPTARG.\n" -" Ako zahtijevani argument nije pronađen, getopts smjesti „?“ u IME, poništi\n" +" Ako zahtijevani argument nije pronađen, getopts smjesti „?“ u IME, " +"poništi\n" " OPTARG i ispiše poruku o greškama.\n" "\n" " Ako ljuskina varijabla OPTERR ima vrijednost 0, getopts onemogući ispis\n" @@ -3256,12 +3461,13 @@ msgstr "" " Završi s uspjehom ako pronađe opciju; ako naiđe na kraj opcija\n" " ili ako se dogodi greška, završi s neuspjehom." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3269,13 +3475,15 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" -"Zamjeni ljusku s danom naredbom.\n" +"Zamijeni ljusku s danom naredbom.\n" "\n" " Izvrši danu NAREDBU, zamjenjujući ovu ljusku s ovim programom.\n" " Eventualni ARGUMENTI postanu argumenti NAREDBE. Ako NAREDBA nije\n" @@ -3292,7 +3500,7 @@ msgstr "" " Završi s uspjehom, osim ako NAREDBA nije pronađena ili se dogodila\n" " greška preusmjeravanja." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3303,28 +3511,32 @@ msgstr "" "\n" " Završi s kȏdom N. Bez N završi s kȏdom zadnje izvršene naredbe." -#: builtins.c:724 +#: builtins.c:732 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 "" "Izlaz iz prijavne ljuske.\n" "\n" " Završi s kȏdom N. Završi s greškom ako to nije prijavna ljuska." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3337,8 +3549,11 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Prikaže ili izvrši naredbe iz popisa povijesti.\n" "\n" @@ -3357,13 +3572,14 @@ msgstr "" " U obliku „fc -s [UZORAK=ZAMJENA...] [NAREDBA]”,\n" " „fc” nakon provedenih naznačenih supstitucija ponovno izvrši NAREDBU.\n" "\n" -" Prikladni alias s ovom funkcijom je r='fc -s'. Tako, utipkani „r“ izvrši\n" +" Prikladni alias s ovom funkcijom je r='fc -s'. Tako, utipkani „r“ " +"izvrši\n" " ponovno posljednju naredbu, a utipkani „r cc“ izvrši posljednju naredbu\n" " koja započinje s „cc“.\n" " \n" " Završi s kȏdom izvršene naredbe, a različito od 0 ako se dogodi greška." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3376,19 +3592,23 @@ msgid "" msgstr "" "Premjesti posao u prednji plan.\n" "\n" -" Premjesti specificirani posao u prednji plan i učini ga trenutnim poslom.\n" +" Premjesti specificirani posao u prednji plan i učini ga trenutnim " +"poslom.\n" " Bez navedene specifikacije posla, premjesti u prednji plan posao koji\n" " ljuska smatra trenutnim.\n" "\n" -" Završi s kȏdom trenutne naredbe u prednjem planu ili s neuspjehom ako se\n" +" Završi s kȏdom trenutne naredbe u prednjem planu ili s neuspjehom ako " +"se\n" " dogodi greška." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3403,12 +3623,13 @@ msgstr "" " Završi s uspjehom osim ako upravljanje poslovima nije omogućeno\n" " ili se dogodila greška." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3441,9 +3662,10 @@ msgstr "" " Svako navedeno IME traži se u $PATH i doda se popisu zapamćenih\n" " naredbi.\n" "\n" -" Završi s uspjehom osim ako nije pronađeno IME ili je dana nevaljana opcija." +" Završi s uspjehom osim ako nije pronađeno IME ili je dana nevaljana " +"opcija." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3461,7 +3683,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Prikaže podatke o ugrađenim (builtins) naredbama.\n" "\n" @@ -3472,12 +3695,14 @@ msgstr "" " Opcije:\n" " -d ukratko opisano djelovanje naredbe\n" " -m prikaže uporabu u pseudo manpage formatu\n" -" -s prikaže samo sažetak uporabe za svaku naredbu koja podudara UZORAK\n" +" -s prikaže samo sažetak uporabe za svaku naredbu koja podudara " +"UZORAK\n" "\n" " Završi s uspjehom osim ako UZORAK nije pronađen, ili je dana nevaljana\n" " opcija." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3501,11 +3726,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3532,7 +3762,8 @@ msgstr "" " bez spremanja u povijesni popis\n" " -s doda ARGUMENTE kao jednu stavku popisu povijesti\n" "\n" -" Ako je dana, DATOTEKA se koristi se kao povijesna datoteka; ako nije dana,\n" +" Ako je dana, DATOTEKA se koristi se kao povijesna datoteka; ako nije " +"dana,\n" " koristi se varijabla HISTFILE (ako ima vrijednost). Inače se koristi\n" " ~/.bash_history.\n" "\n" @@ -3543,7 +3774,7 @@ msgstr "" " Završi s uspjehom osim ako nije dana nevaljana opcija ili se dogodila\n" " greška." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3579,13 +3810,15 @@ msgstr "" " -s ograniči izlaz samo na zaustavljene poslove\n" "\n" " Ako je navedena opcija '-x', dana NAREDBA će se izvršiti tek nakon\n" -" zatvaranja svih navedenih poslova u ARGUMENTIMA (tj. njihov ID procesa je\n" +" zatvaranja svih navedenih poslova u ARGUMENTIMA (tj. njihov ID procesa " +"je\n" " zamijenjen s ID-om njima nadređenog procesa).\n" "\n" -" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška.\n" +" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila " +"greška.\n" " Ako je dana opcija -x, završi sa izlaznim kȏdom NAREDBE." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3616,7 +3849,7 @@ msgstr "" " Završi s uspjehom osim ako je dana nevaljana opcija ili nije\n" " navedena SPECIFIKACIJA_POSLA." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3641,13 +3874,15 @@ msgstr "" "Pošalje signal poslu.\n" "\n" " Procesima označenim s PID-om ili sa SPECIFIKACIJOM_POSLA pošalje signal\n" -" naveden brojem ili imenom. Ako nije naveden ni broj ni ime, „kill” pošalje\n" +" naveden brojem ili imenom. Ako nije naveden ni broj ni ime, „kill” " +"pošalje\n" " SIGTERM.\n" "\n" " Opcije:\n" " -s IME IME je ime signala koji se šalje\n" " -n BROJ BROJ je broj signala koji se šalje\n" -" -l izlista imena dostupnih signala; ako su dani argumenti\n" +" -l izlista imena dostupnih signala; ako su dani " +"argumenti\n" " iza „-l“, to su brojevi signala čija odgovarajuća\n" " imena treba ispisati\n" " -L == -l\n" @@ -3657,16 +3892,18 @@ msgstr "" " ste dostigli vaše ograničenje za broj procesa koje možete stvoriti;\n" " tj. ne morate pokrenuti novi proces da ubijete prekobrojne procese.\n" "\n" -" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška." +" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila " +"greška." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3708,7 +3945,8 @@ msgstr "" " obavlja za cijele brojeve fiksne širine bez provjere prelijevanja.\n" " Ipak, dijeljenje s nulom se detektira i prijavi kao greška.\n" "\n" -" Popis koji slijedi opisuje operatore s jednakom prednošću u istom retku,\n" +" Popis koji slijedi opisuje operatore s jednakom prednošću u istom " +"retku,\n" " a redci su poredani po opadajućoj prednosti.\n" "\n" " var++, var-- post-inkrement, post-dekrement varijable\n" @@ -3733,7 +3971,8 @@ msgstr "" "\n" " Varijable ljuske su dopuštene kao parametri. Ime varijable se zamijeni\n" " s njezinom vrijednošću (ako treba, pretvori se u cijeli broj).\n" -" Varijable, za upotrebu u izrazima, ne moraju imati atribut cijelog broja.\n" +" Varijable, za upotrebu u izrazima, ne moraju imati atribut cijelog " +"broja.\n" "\n" " Operatori se vrednuju prema pravilima prednosti. Najprije se\n" " vrednuju pod-izrazi u zagradama i tako mogu redefinirati gore\n" @@ -3742,19 +3981,24 @@ msgstr "" " Ako je vrednovanje zadnjeg ARGUMENTA nula (0), „let“ završi s kȏdom 1;\n" " inače završi s uspjehom." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3762,11 +4006,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3784,48 +4031,58 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Pročita redak iz standardnog ulaza i razdijeli ga na polja.\n" "\n" " Pročita jedan redak iz standardnog ulaza (ili navedenog deskriptora\n" " datoteke FD ako je dana opcija „-u“) i dodijeli prvu riječ prvom IMENU,\n" -" drugu riječ drugom IMENU, i tako dalje; preostale riječi dodijeli zadnjem\n" +" drugu riječ drugom IMENU, i tako dalje; preostale riječi dodijeli " +"zadnjem\n" " IMENU. Samo se znakovi sadržani u varijabli $IFS prepoznaju kao MEĐA\n" -" (separator riječi). Zadano, obratna kosa crta (backslash) maskira znakove\n" +" (separator riječi). Zadano, obratna kosa crta (backslash) maskira " +"znakove\n" " za separator i znak za novi redak.\n" "\n" -" Ako nije navedeno nijedno IME, pročitani redak se spremi u varijablu REPLY.\n" +" Ako nije navedeno nijedno IME, pročitani redak se spremi u varijablu " +"REPLY.\n" "\n" " Opcije:\n" " -a POLJE pročitane riječi dodijeli sekvencijalnim indeksima POLJA\n" " počevši od nule\n" -" -d MEĐA nastavi čitati sve dok ne pročita prvu MEĐU (umjesto LF znaka)\n" +" -d MEĐA nastavi čitati sve dok ne pročita prvu MEĐU (umjesto LF " +"znaka)\n" " -e rabi „Readline“ za dobaviti redak\n" " -i TEKST rabi TEKST kao početni tekst za „Readline“\n" " -n BROJ zaustavi čitanje nakon pročitanih ne više od BROJ znakova\n" " ili nakon LF znaka (umjesto da uvijek čeka na LF znak)\n" " -N BROJ zaustavi čitanje samo nakon pročitanih ne više od BROJ\n" " znakova ili nakon EOF znaka ili nakon isteka „t SEKUNDA\n" -" -p PROMPT ispiše taj string kao prompt (bez LF) prije početka čitanja\n" +" -p PROMPT ispiše taj string kao prompt (bez LF) prije početka " +"čitanja\n" " -r backslash je doslovno kosa crta (nema posebno značenje)\n" " -s ne odjekuje (echo) ulaz koji dolazi iz terminala\n" -" -t BROJ nakon isteka BROJA sekundi prestane čekati na ulaz i završi\n" +" -t BROJ nakon isteka BROJA sekundi prestane čekati na ulaz i " +"završi\n" " s kȏdom većim od 128; zadano, broj sekundi čekanja je\n" -" vrijednost varijable TMOUT; BROJ može biti i realni broj;\n" +" vrijednost varijable TMOUT; BROJ može biti i realni " +"broj;\n" " Ako je BROJ = 0, „read“ završi odmah bez da išta čita, a\n" " samo ako je ulaz dostupni na specificiranom deskriptoru\n" " datoteke Završi s uspjehom\n" "\n" -" -u FD čita iz deskriptora datoteke FD umjesto iz standardnog ulaza\n" +" -u FD čita iz deskriptora datoteke FD umjesto iz standardnog " +"ulaza\n" "\n" " Završi s uspjehom osim ako ne naiđe na konac datoteke (EOF) ili je\n" " isteklo vrijeme čekanja ili se dogodila greška pri dodjeli ili je\n" " naveden nevaljani deskriptor datoteke kao argument opciji „-u“." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3844,7 +4101,8 @@ msgstr "" "\n" " Vrati vrijednost N ili 1 ako ljuska ne izvrši funkciju ili skriptu." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3887,7 +4145,8 @@ 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" @@ -3911,13 +4170,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3930,44 +4194,54 @@ msgstr "" "Postavlja ili uklanja vrijednosti opcija ljuske i pozicijskih parametara.\n" "\n" " Mijenja svojstva ljuske i vrijednosti pozicijskih parametara.\n" -" Bez opcija ili argumenata „set” ispiše imena i vrijednosti svih definiranih\n" +" Bez opcija ili argumenata „set” ispiše imena i vrijednosti svih " +"definiranih\n" " varijabli i funkcija u obliku koji se može iskoristiti kao ulaz.\n" -" Dostupne su sljedeće opcije („+“ umjesto „-“ onemogući navedenu opciju):\n" +" Dostupne su sljedeće opcije („+“ umjesto „-“ onemogući navedenu " +"opciju):\n" "\n" " -a automatski izveze nove ili modificirane varijable i funkcije\n" " -B izvrši zamjenu vitičastih zagrada (brace expansion), zadano;\n" " -b odmah prijavi prekid posla (ne čeka da završi trenutna naredba)\n" " -C onemogući da preusmjereni izvoz piše preko regularnih datoteka\n" -" -E omogući da bilo koji ERR „trap“ naslijede funkcije ljuske i potomci\n" +" -E omogući da bilo koji ERR „trap“ naslijede funkcije ljuske i " +"potomci\n" " -e završi odmah ako naredba završi s kȏdom različitim od nula\n" -" -f onemogući zamjenske znakove za imena datoteka (isključi „globbing“)\n" -" -H omogući upotrebu znaka „!“ za pozivanje naredbi iz povijesti (zadano)\n" +" -f onemogući zamjenske znakove za imena datoteka (isključi " +"„globbing“)\n" +" -H omogući upotrebu znaka „!“ za pozivanje naredbi iz povijesti " +"(zadano)\n" " -h pamti (apsolutne) lokacije izvršenih naredbi (zadano)\n" " -k sve argumente dodijeljene varijablama smjesti u okolinu\n" " (a ne samo one argumente koji prethode imenu naredbe)\n" " -m upravljanje poslovima je omogućeno (zadano)\n" " -n pročita, ali ne izvrši naredbe\n" " -o IME_OPCIJE omogući tu opciju (v. niže duge nazive za IME_OPCIJE)\n" -" -P ne razriješi simboličke poveznice pri izvršavanju naredbi poput „cd“\n" +" -P ne razriješi simbolične poveznice pri izvršavanju naredbi poput " +"„cd“\n" " koje promjene trenutni direktorij\n" " -p uključi privilegirani način: datoteke BASH_ENV i ENV se zanemare,\n" " funkcije ljuske se ne uvoze iz okoline, a zanemari se i\n" -" sve SHELLOPTS; taj način se automatski aktivira kad god se stvarni\n" +" sve SHELLOPTS; taj način se automatski aktivira kad god se " +"stvarni\n" " i efektivni UID i GID ne podudaraju. Isključivanje ove opcije\n" " učini da je efektivni UID i GID isti kao i stvarni UID i GID.\n" " -T DEBUG i RETURN „trap“ naslijede funkcije ljuske i potomci\n" " -t završi nakon čitanja i izvršenja jedne naredbe\n" -" -u tretira korištenje nepostojećih varijabli kao grešku pri supstituciji\n" +" -u tretira korištenje nepostojećih varijabli kao grešku pri " +"supstituciji\n" " -v ispisuje ulaz (odjekuje ih) istovremeno dok čitam\n" " -x ispisuje naredbe s argumentima istovremeno dok izvršava\n" -" -- dodijeli sve preostale argumente pozicijskim parametrima; ako nema\n" +" -- dodijeli sve preostale argumente pozicijskim parametrima; ako " +"nema\n" " preostalih argumenata, postojeći pozicijski argumenti se brišu\n" " - isključi opcije -v i -x; argumenti koji slijede su pozicijski\n" " parametri (ali ako ih nema, postojeći pozicijski argumenti\n" " se ne brišu)\n" "\n" " Opcije se mogu koristiti i pri pokretanju ljuske. Trenutno stanje\n" -" svojstva može se naći u $-. Podrazumijeva se da su svi dodatni argumenti\n" +" svojstva može se naći u $-. Podrazumijeva se da su svi dodatni " +"argumenti\n" " pozicijski i dodijeljeni su u $1, $2, .. $N.\n" "\n" " Dugi nazivi za IME_OPCIJE koji se koriste s opcijom -o (ili +o)\n" @@ -3992,7 +4266,8 @@ msgstr "" " nounset == -u\n" " onecmd == -t\n" " physical == -P\n" -" pipefail cjevovod vrati vrijednost izlaznog koda zadnje neuspješne\n" +" pipefail cjevovod vrati vrijednost izlaznog koda zadnje " +"neuspješne\n" " naredbe ili 0 ako su svi poslovi uspješno završeni\n" " posix striktno poštuje POSIX standard\n" " privileged == -p\n" @@ -4002,7 +4277,7 @@ msgstr "" "\n" " Završi s uspjehom osim ako je dana nevaljana opcija." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4014,7 +4289,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4039,12 +4315,13 @@ msgstr "" " Završi s uspjehom osim ako je dana nevaljana opcija ili IME je\n" " „samo-za-čitanje“. (bez navodnika)" -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4072,7 +4349,7 @@ msgstr "" " Završi s uspjehom osim ako je dana nevaljana opcija ili nije navedeno\n" " valjano IME." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4096,7 +4373,8 @@ msgstr "" "\n" " Označi svako IME kao nepromjenjivo (readonly), tako da se vrijednosti\n" " ovih IMENA ne mogu promijeniti kasnijim operacijama. Ako je dana\n" -" VRIJEDNOST, prvo mu dodijeli VRIJEDNOST, a zatim ga označi nepromjenjivim.\n" +" VRIJEDNOST, prvo mu dodijeli VRIJEDNOST, a zatim ga označi " +"nepromjenjivim.\n" "\n" " Opcije:\n" " -a svako IME se odnosi na varijable indeksiranog polja\n" @@ -4109,7 +4387,7 @@ msgstr "" "\n" " Završi s uspjehom osim ako je dana nevaljana opcija ili je IME nevaljano." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4126,7 +4404,7 @@ msgstr "" "\n" " Završi s uspjehom osim ako je N negativni ili veći od $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4149,15 +4427,18 @@ msgstr "" " Završi s kȏdom zadnje izvršene naredbe iz DATOTEKE ili s kȏdom 1 ako se\n" " DATOTEKA ne može pročitati." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4173,7 +4454,7 @@ msgstr "" " Završi s uspjehom osim ako upravljanje poslovima nije omogućeno\n" " ili se dogodila greška." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4207,7 +4488,8 @@ 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" @@ -4228,7 +4510,8 @@ 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" @@ -4270,18 +4553,22 @@ msgstr "" " -d DATOTEKA istina ako je datoteka direktorij\n" " -e DATOTEKA istina ako datoteka postoji\n" " -f DATOTEKA istina ako je datoteka regularna datoteka\n" -" -G DATOTEKA istina ako je datoteka efektivno vlasništvo vaše skupine\n" +" -G DATOTEKA istina ako je datoteka efektivno vlasništvo vaše " +"skupine\n" " -g DATOTEKA istina ako je datoteka SETGUID\n" -" -h DATOTEKA istina ako je datoteka simbolička poveznica\n" -" -k DATOTEKA istina ako datoteka ima postavljeni \"sticky\" bit\n" -" -L DATOTEKA istina ako je datoteka simbolička poveznica\n" -" -N DATOTEKA istina ako se datoteka promijenila od zadnjeg čitanja\n" +" -h DATOTEKA istina ako je datoteka simbolična poveznica\n" +" -k DATOTEKA istina ako datoteka ima postavljeni \"sticky\" " +"bit\n" +" -L DATOTEKA istina ako je datoteka simbolična poveznica\n" +" -N DATOTEKA istina ako se datoteka promijenila od zadnjeg " +"čitanja\n" " -O DATOTEKA istina ako je datoteka efektivno vaše vlasništvo\n" " -p DATOTEKA istina ako je datoteka imenovana cijev\n" " -r DATOTEKA istina ako vi možete čitati datoteku\n" " -S DATOTEKA istina ako je datoteka utičnica\n" " -s DATOTEKA istina ako datoteka nije prazna\n" -" -t DESKRIPTOR istina ako je deskriptor datoteke otvoren u terminalu\n" +" -t DESKRIPTOR istina ako je deskriptor datoteke otvoren u " +"terminalu\n" " -u DATOTEKA istina ako je datoteka SETUID\n" " -w DATOTEKA istina ako vi možete pisati datoteku\n" " -x DATOTEKA istina ako vi možete izvršiti datoteku\n" @@ -4290,7 +4577,8 @@ msgstr "" " kasnije od druge\n" " DTEKA1 -ot DTEKA2 istina ako je prva datoteka promijenjena\n" " ranije od druge\n" -" DTEKA1 -ef DTEKA2 istina ako je prva datoteka čvrsta poveznica na drugu\n" +" DTEKA1 -ef DTEKA2 istina ako je prva datoteka čvrsta poveznica na " +"drugu\n" "\n" " Operatori za stringove:\n" " -z STRING istina ako je string prazni\n" @@ -4306,19 +4594,21 @@ msgstr "" " Ostali operatori:\n" " -o OPCIJA istina ako je ova OPCIJA ljuske omogućena\n" " -v VARIJABLA istina ako ova VARIJABLA ima vrijednost\n" -" -R VARIJABLA istina ako je ova VARIJABLA referencija (nameref) \n" +" -R VARIJABLA istina ako je ova VARIJABLA referencija " +"(nameref) \n" " ! IZRAZ istina ako IZRAZ neistinit\n" " IZRAZ1 -a IZRAZ2 istina ako su oba izraza istinita\n" " IZRAZ1 -o IZRAZ2 laž ako su oba izraza neistinita\n" " ARG1 OP ARG2 istina ako je aritmetika valjana; operator OP je\n" " jedan od: -eq, -ne, -lt, -le, -gt ili -ge;\n" -" koji znače: jednako, nejednako, manje od, manje,\n" +" koji znače: jednako, nejednako, manje od, " +"manje,\n" " ili jednako, veće od, veće ili jednako.\n" "\n" " Završi s uspjehom ako je IZRAZ istinit, 1 ako je IZRAZ neistinit,\n" " ili 2 ako je dan nevaljan argument." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4330,11 +4620,12 @@ msgstr "" " To je sinonim za ugrađenu funkciju „test“, ali zadnji argument\n" " mora biti zagrada „]“ kao par zagradi „[“ na početku." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4347,39 +4638,54 @@ msgstr "" "\n" " Završi uvijek s kȏdom 0." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Prikupljanje (hvatanje) signala i drugih događaja.\n" "\n" @@ -4389,7 +4695,8 @@ msgstr "" " ARGUMENT je naredba koja se pročita i izvrši kad ljuska primi jedan od\n" " specificiranih signala (SIGNAL_SPEC). Ako nema ARGUMENTA (i dan je samo\n" " jedan signal) ili ARGUMENT je „-“, specificirani signal zadobije svoju\n" -" originalnu vrijednost (koju je imao na startu ove ljuske). Ako je ARGUMENT\n" +" originalnu vrijednost (koju je imao na startu ove ljuske). Ako je " +"ARGUMENT\n" " prazni string, ljuska i njezini potomci zanemare svaki SIGNAL_SPEC.\n" "\n" " Ako je SIGNAL_SPEC 0 ili EXIT, ARGUMENT se izvrši kad zatvorite\n" @@ -4413,7 +4720,7 @@ msgstr "" " Završi s uspjehom osim ako SIGNAL_SPEC nije valjan ili je dana\n" " nevaljana opcija." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4439,11 +4746,13 @@ 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 "" "Prikaže informacije o tipu naredbe.\n" "\n" -" Pokaže, kako bi se interpretiralo svako dano IME kad bi se IME koristilo\n" +" Pokaže, kako bi se interpretiralo svako dano IME kad bi se IME " +"koristilo\n" " kao naredba.\n" "\n" " Opcije:\n" @@ -4463,11 +4772,13 @@ msgstr "" "\n" " Završi s uspjehom ako se pronađu sva IMENA, inače s 1." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4504,9 +4815,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4557,7 +4869,7 @@ msgstr "" " Završi s uspjehom osim ako je dana nevaljana opcija\n" " ili se dogodila greška." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4580,32 +4892,36 @@ msgstr "" " Ako MODE nije naveden, ispiše trenutnu vrijednost maske.\n" "\n" " Ako MODE počinje sa znamenkom, interpretira se kao oktalni broj;\n" -" inače to je simbolički mode string kakav prihvaća chmod(1).\n" +" inače to je simbolični mode string kakav prihvaća chmod(1).\n" "\n" " Opcije:\n" " -p ako nije naveden MODE, generira izlaz u obliku\n" " koji se može iskoristiti kao ulaz\n" -" -S napravi simbolički izlaz; inače izlaz je oktalni broj\n" +" -S napravi simbolični izlaz; inače izlaz je oktalni broj\n" "\n" " Završi s uspjehom osim ako MODE nije valjan ili je dana nevaljana opcija." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4621,7 +4937,8 @@ msgstr "" " Čeka na svaki posao identificirani s ID — to jest indikatorom posla ili\n" " indikatorom procesa — i izvijesti njegov završni status. Ako nije dan\n" " ID, čeka na sve trenutno aktivne potomke, a završni status je nula.\n" -" Ako je ID specifikacija posla, čeka na sve procese u cjevovodu tog posla.\n" +" Ako je ID specifikacija posla, čeka na sve procese u cjevovodu tog " +"posla.\n" "\n" " Ako je dana opcija „-n“, čeka na svršetak jednog posla iz popisa ID-ova\n" " ili ako nije dan nijedan ID, čeka da završi sljedeći posao i vrati\n" @@ -4633,16 +4950,18 @@ msgstr "" " Završi s kȏdom zadnjeg ID-a; s kȏdom 1 ako je ID nevaljan ili je dana\n" " nevaljana opcija ili ako je -n dan, a ljuska nema neočekivane potomke." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Čeka da proces završi i vrati njegov izlazni kȏd.\n" @@ -4654,7 +4973,16 @@ msgstr "" " Završi s kȏdom zadnjeg PID-a, s kȏdom 1 ako je PID nevaljan,\n" " ili s 2 ako je dana nevaljana opcija." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4675,7 +5003,7 @@ msgstr "" "\n" " Završi s kȏdom zadnje izvršene naredbe." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4702,7 +5030,7 @@ msgstr "" "\n" " Završi s kȏdom zadnje izvršene naredbe." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4730,14 +5058,16 @@ msgstr "" " ulaza; ako se redak sastoji od broja koji odgovara jednoj od pokazanih\n" " riječi, onda varijabla IME dobije vrijednost te riječi; ako je redak\n" " prazan, RIJEČI i prompt se ponovno prikažu; ako se pročita EOF (Ctrl-D)\n" -" „select“ naredba završi. Bilo koja druga pročitana vrijednost učini da se\n" +" „select“ naredba završi. Bilo koja druga pročitana vrijednost učini da " +"se\n" " IME isprazni (nulira). Pročitani redak se spremi u varijablu REPLY.\n" -" NAREDBE se izvršavaju nakon svakog izbora, tako dugo dok „break“ naredba\n" +" NAREDBE se izvršavaju nakon svakog izbora, tako dugo dok „break“ " +"naredba\n" " ne prekine posao.\n" "\n" " Završi s kȏdom zadnje izvršene naredbe." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4764,7 +5094,7 @@ msgstr "" "\n" " Završi s izlaznim kȏdom CJEVOVODA." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4781,16 +5111,21 @@ msgstr "" "\n" " Završi s kȏdom zadnje izvršene naredbe." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4806,11 +5141,12 @@ msgstr "" "\n" " „if“ završi s kȏdom zadnje izvršene naredbe." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4823,11 +5159,12 @@ msgstr "" "\n" " Završi s kȏdom zadnje izvršene naredbe." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4840,7 +5177,7 @@ msgstr "" "\n" " Završi s kȏdom zadnje izvršene naredbe." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4861,12 +5198,13 @@ msgstr "" "\n" " Naredba coproc završi s kȏdom 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4882,7 +5220,7 @@ msgstr "" "\n" " Završi s uspjehom osim ako je IME readonly (samo-za-čitanje)." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4899,7 +5237,7 @@ msgstr "" "\n" " Završi s kȏdom zadnje izvršene naredbe." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4921,7 +5259,7 @@ msgstr "" "\n" " Završi s kȏdom nastavljenog posla." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4939,13 +5277,16 @@ msgstr "" " Završi s kȏdom 1 ako je rezultat IZRAZA jednak 0;\n" " inače završi s uspjehom." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -4977,7 +5318,8 @@ msgstr "" "\n" " Ako se rabe operatori „==“ ili „!=“, onda se string desno od operatora\n" " smatra za uzorak i provodi se podudaranje uzoraka.\n" -" Ako se rabi operator „=~“, onda se string na desno od operatora podudara\n" +" Ako se rabi operator „=~“, onda se string na desno od operatora " +"podudara\n" " kao regularni izraz.\n" "\n" " Operatori „&&“ i „|| ne vrednuju IZRAZ2 ako je IZRAZ1 dovoljan za\n" @@ -4985,7 +5327,7 @@ msgstr "" "\n" " Završi s uspjehom ili 1 ovisno o IZRAZU." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5053,7 +5395,8 @@ msgstr "" " HISTFILESIZE maksimalni broj redaka datoteke s povijesti naredba\n" " HISTIGNORE popis uzoraka koji opisuju naredbe koje ne treba zapisati\n" " u datoteku koja sadrži povijest vaših naredbi\n" -" HISTSIZE maksimalni broj redaka koje trenutna ljuska može dosegnuti\n" +" HISTSIZE maksimalni broj redaka koje trenutna ljuska može " +"dosegnuti\n" " HOME puni naziv staze do vašega vlastitog direktorija\n" " HOSTNAME ime računala na kojem se izvršava „bash“\n" " HOSTTYPE tip CPU-a na kojem se izvršava „bash“\n" @@ -5070,22 +5413,25 @@ msgstr "" " SHELLOPTS popis svih omogućenih opcija ljuske\n" " TERM naziv tipa trenutnog terminala\n" " TIMEFORMAT pravilo za format ispisa „time“ statistika\n" -" auto_resume ako nije prazan, učini da se naredbena riječ na naredbenom\n" +" auto_resume ako nije prazan, učini da se naredbena riječ na " +"naredbenom\n" " retku prvo potraži na popisu zaustavljenih poslova,\n" " i ako se tamo pronađe, taj se posao premjesti u\n" -" interaktivni način; vrijednost „exact“ znači da naredbena\n" +" interaktivni način; vrijednost „exact“ znači da " +"naredbena\n" " riječ mora strikno podudariti naredbu iz popisa;\n" " vrijednost „substring“ znači da naredbena riječ mora\n" " podudariti podstring naredbe iz popisa; bilo koja druga\n" " vrijednost znači da naredbena riječ mora biti prefiks\n" " zaustavljene naredbe\n" -" histchars znakovi koje upravljaju s proširenjem i brzom supstitucijom\n" +" histchars znakovi koje upravljaju s proširenjem i brzom " +"supstitucijom\n" " povijesti; prvi znak je znak za „supstituciju\n" " povijesti“, obično „!“; drugi znak je „znak brze\n" " supstitucije“, obično „^“; treći znak je „komentar\n" " povijesti“, obično „#“.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5128,17 +5474,21 @@ msgstr "" " Argumenti:\n" " DIREKTORIJ Doda DIREKTORIJ na vrh stȏga direktorija i\n" " učini ga novim trenutnim radnim direktorijem.\n" -" +N Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule s\n" -" lijeve strane popisa pokazanog s „dirs“) postane novi vrh stȏga.\n" -" -N Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule s\n" -" desne strane popisa pokazanog s „dirs“) postane novi vrh stȏga.\n" +" +N Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule " +"s\n" +" lijeve strane popisa pokazanog s „dirs“) postane novi vrh " +"stȏga.\n" +" -N Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule " +"s\n" +" desne strane popisa pokazanog s „dirs“) postane novi vrh " +"stȏga.\n" "\n" " Naredba „dirs“ prikaže trenutni sadržaj stȏga direktorija.\n" "\n" " Završi s uspjehom osim ako je dana nevaljana opcija ili promjena\n" " direktorija nije uspjela" -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5166,8 +5516,10 @@ msgid "" msgstr "" "Ukloni direktorije iz stȏga.\n" "\n" -" Ukloni zapise iz stȏga direktorija. Bez argumenata, ukloni direktorij na\n" -" vrhu stȏga i učini da je trenutni radni direktorij jednak novom direktoriju\n" +" Ukloni zapise iz stȏga direktorija. Bez argumenata, ukloni direktorij " +"na\n" +" vrhu stȏga i učini da je trenutni radni direktorij jednak novom " +"direktoriju\n" " na vrhu stȏga.\n" "\n" " Opcije:\n" @@ -5187,7 +5539,7 @@ msgstr "" " Završi s uspjehom osim ako je dana nevaljana opcija ili promjena\n" " direktorija nije uspjela." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5234,9 +5586,10 @@ msgstr "" " -N Pokaže N-ti direktorij iz stȏga, brojeći od nule s\n" " desne strane popisa kad se „dirs“ pokrene bez opcija.\n" "\n" -" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška." +" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila " +"greška." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5269,11 +5622,13 @@ msgstr "" " -s omogući (uključi) sve navedene IME_OPCIJE\n" " -u onemogući (isključi) sve navedene IME_OPCIJE\n" "\n" -" Bez opcija (ili samo s opcijom „-q“) završi s uspjehom ako je IME_OPCIJE\n" +" Bez opcija (ili samo s opcijom „-q“) završi s uspjehom ako je " +"IME_OPCIJE\n" " omogućeno, a s 1 ako je onemogućeno. Završi s 1 i ako je dano\n" " nevaljano IME_OPCIJE, a završi s 2 ako je dana nevaljana opcija." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5281,29 +5636,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Oblikuje i ispiše ARGUMENTE po uputama FORMATA.\n" @@ -5319,30 +5681,37 @@ msgstr "" " koji se pretvore i kopiraju na izlaz; specifikacije formata od kojih\n" " svaka uzrokuje ispisivanje sljedećeg sukcesivnog argumenta.\n" "\n" -" Pored standardnih simbola „diouxXfeEgGcs” za format opisanih u printf(1),\n" +" Pored standardnih simbola „diouxXfeEgGcs” za format opisanih u " +"printf(1),\n" " „printf” dodatno interpretira:\n" " %b proširi backslash (\\) kontrolne znakove u odgovarajuće\n" " argumente\n" -" %q citira argument tako, da se može iskoristiti kao ulaz za ljusku\n" +" %q citira argument tako, da se može iskoristiti kao ulaz za " +"ljusku\n" " %Q kao %q, ali primijeni bilo kakvu preciznost na necitirani\n" " argument prije citiranja\n" -" %(fmt)T koristeći FMT, ispiše date-time string u obliku format stringa\n" +" %(fmt)T koristeći FMT, ispiše date-time string u obliku format " +"stringa\n" " za strftime(3)\n" "\n" " Dani format se koristi sve dok se ne potroše svi argumenti. Ako ima\n" " manje argumenata nego što format treba, suvišne format specifikacije\n" " se ponašaju kao da im dana vrijednost nula ili prazni string.\n" "\n" -" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška\n" +" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila " +"greška\n" " u pisanju ili greška pri dodijeli." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5356,8 +5725,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5381,19 +5752,26 @@ msgstr "" " (obično naredbu) riječ\n" "\n" " Redoslijed akcija pri pokušaju kompletiranja slijedi gore dan poredak\n" -" opcija pisanih u verzalu. Ako je navedeno više opcija, opcija „-D“ ima veću\n" +" opcija pisanih u verzalu. Ako je navedeno više opcija, opcija „-D“ ima " +"veću\n" " prednost od opcije „-E“, a obje imaju veću prednost od opcije „-I“\n" "\n" " Završi s uspjehom osim ako je dana nevaljana opcija\n" " ili se dogodila greška." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5404,15 +5782,19 @@ msgstr "" " moguća kompletiranja. Ako je dana neobvezna opcija RIJEČ (word)\n" " generira odgovarajuća kompletiranja podudarna s RIJEČI.\n" "\n" -" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška." +" Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila " +"greška." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5455,24 +5837,30 @@ msgstr "" " pozvati „compopt“; time se onda promjene opcije za taj generator koji\n" " trenutno izvršava kompletiranja.\n" "\n" -" Završi s uspjehom osim ako nije dana nevaljana opcija ili nije definirana\n" +" Završi s uspjehom osim ako nije dana nevaljana opcija ili nije " +"definirana\n" " specifikacija za kompletiranje IMENA." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5485,28 +5873,34 @@ 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 "" "Pročitane retke iz standardnog ulaza upiše u varijablu indeksirano polje.\n" "\n" " Pročitane retke iz standardnog ulaza (ili ako je navedena opcija -u, iz\n" -" deskriptora datoteke FD) upiše u indeksiranu varijablu POLJE. Ako argument\n" +" deskriptora datoteke FD) upiše u indeksiranu varijablu POLJE. Ako " +"argument\n" " POLJE nije dan, za POLJE se (zadano) koristi varijabla MAPFILE\n" "\n" " Opcije:\n" " -d MEĐA prvi znak u MEĐI (umjesto LF) je znak za kraj retka\n" " -n KOLIČINA kopira ne više od KOLIČINE redaka (0 kopira sve retke)\n" -" -O POČETAK upisivanje u POLJE započinje od indeksa POČETAK (zadano 0)\n" +" -O POČETAK upisivanje u POLJE započinje od indeksa POČETAK (zadano " +"0)\n" " -s BROJ preskoči (izostavi) prvih BROJ redaka\n" -" -t ukloni zaostalu MEĐU (zadano LF) iz svakog učitanog retka\n" +" -t ukloni zaostalu MEĐU (zadano LF) iz svakog učitanog " +"retka\n" " -u FD čita retke iz deskriptora datoteke FD umjesto iz\n" " standardnog ulaza\n" -" -C FUNKCIJA vrednuje FUNKCIJU svaki put nakon TOLIKO pročitanih redaka\n" +" -C FUNKCIJA vrednuje FUNKCIJU svaki put nakon TOLIKO pročitanih " +"redaka\n" " -c TOLIKO svaki put nakon TOLIKO pročitanih redaka pozove FUNKCIJU\n" "\n" " Argument:\n" @@ -5514,7 +5908,8 @@ msgstr "" "\n" " Ako je opcija „-C“ navedena bez opcije „-c“, TOLIKO je 5000 (zadano).\n" " Kad FUNKCIJA vrednuje — dobiva indeks sljedećeg elementa polja koji se\n" -" upisuje i redak koji će biti dodijeljen tom elementu kao dodatne argumente.\n" +" upisuje i redak koji će biti dodijeljen tom elementu kao dodatne " +"argumente.\n" "\n" " Ako nije dan eksplicitni POČETAK, „mapfile“ počisti POLJE\n" " prije početka upisivanja.\n" @@ -5522,7 +5917,7 @@ msgstr "" " Završi s uspjehom osim ako je POLJE readonly (samo-za-čitanje) ili nije\n" " polje ili je dana nevaljana opcija." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5532,6 +5927,32 @@ msgstr "" "\n" " Sinonim za „mapfile“." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Vrati kontekst trenutnog poziva funkciji.\n" +#~ "\n" +#~ " Bez IZRAZA, vrati „$line $filename“. S IZRAZOM, vrati\n" +#~ " „$line $subroutine $filename“; ovi dodatni podaci mogu poslužiti\n" +#~ " za „stack trace“.\n" +#~ "\n" +#~ " Vrijednost IZRAZA pokazuje koliko se razina poziva treba vratiti " +#~ "unatrag od\n" +#~ " trenutne pozicije, s time da je pozicija 0 trenutna pozicija." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "upozorenje: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: nevaljan ključ asocijativnog polja" @@ -5553,8 +5974,12 @@ msgstr "" #~ msgid "Copyright (C) 2018 Free Software Foundation, Inc." #~ msgstr "Copyright (C) 2018 Free Software Foundation, Inc." -#~ msgid "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>\n" -#~ msgstr "Licenca GPLv2+: GNU GPL inačica 2 ili novija <http://gnu.org/licenses/gpl.html>\n" +#~ msgid "" +#~ "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl." +#~ "html>\n" +#~ msgstr "" +#~ "Licenca GPLv2+: GNU GPL inačica 2 ili novija <http://gnu.org/licenses/gpl." +#~ "html>\n" #~ msgid ":" #~ msgstr ":" diff --git a/po/hu.gmo b/po/hu.gmo index cfc7843c19751a009a0c8114a72f38bb0d170eb3..4e63a27ecc4daaff3d93d415e3696e5f53e65f18 100644 GIT binary patch delta 11879 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 R*_O-0O;2q0oE~j@`G44h^?CpR delta 33586 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 diff --git a/po/hu.po b/po/hu.po index c6d838829..ec2649e0e 100644 --- a/po/hu.po +++ b/po/hu.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2019-11-16 17:58+0100\n" "Last-Translator: Balázs Úr <ur.balazs@fsf.hu>\n" "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" @@ -21,126 +21,126 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 19.04.3\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "hibás tömbindex" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: névhivatkozás attribútum eltávolítása" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: nem lehetséges az indexelt tömb asszociatívvá alakítása" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: a nem-szám indexnek való értékadás nem lehetséges" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: asszociatív tömbhöz való értékadásnál meg kell adni az indexet" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: nem hozható létre: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "bash_execute_unix_command: nem található billentyűkiosztás a parancshoz" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: az első nem szóközkarakter nem „\"”" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "nincs záró „%c” a következőben: %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: hiányzó kettőspont-elválasztó" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "„%s”: nem lehetséges a kötés megszüntetése" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "szögleteszárójel-kiegészítés: Nem foglalható memória ehhez: %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" "szögleteszárójel-kiegészítés: nem sikerült a memóriafoglalás %u elem számára" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" "szögleteszárójel-kiegészítés: nem sikerült a memóriafoglalás „%s” számára" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "„%s”: érvénytelen alias-név" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "nincs engedélyezve a sorszerkesztés" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "„%s”: érvénytelen billentyűkiosztás-név" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: nem olvasható a következő: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "„%s”: ismeretlen függvénynév" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s nincs kötve egy billentyűhöz sem.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s a következő módon hajtható végre: " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "„%s”: nem lehetséges a kötés megszüntetése" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "ciklusszám" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "csak „for”, „while” és „until” ciklusokban értelmezhető" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -150,7 +150,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Az aktuális szubrutinhívás környezetének visszaadása.\n" " \n" @@ -165,349 +169,359 @@ msgstr "" " 0-val tér vissza, ha érvényes a KIF és valóban függvényt hajt végre a\n" " parancsértelmező." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "Nincs beállítva HOME" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "túl sok argumentum" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "null könyvtár" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "Nincs beállítva OLDPWD" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "%d. sor: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "figyelmeztetés: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: használat: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: a kapcsolónak kötelező argumentuma van" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: a kötelező argumentum egy szám" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: nem található" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: érvénytelen kapcsoló" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: érvénytelen kapcsolónév" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "„%s”: érvénytelen azonosító" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "érvénytelen oktális szám" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "érvénytelen hexadecimális szám" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "érvénytelen szám" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: érvénytelen szignálmegadás" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "„%s”: nem pid vagy munkaazonosító" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: csak olvasható változó" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: nem szüntethető meg" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s kívül esik a tartományon" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argumentum" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s kívül esik a tartományon" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: nincs ilyen munka" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: nincs munkakezelés" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "nincs munkakezelés" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: korlátozott" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "korlátozott" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: nem beépített parancs" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "írási hiba: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "hiba a terminálattribútum beállításakor: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "hiba a terminálattribútum lekérdezésekor: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: hiba a munkakönyvtár lekérdezésekor: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: kétértelmű munkamegadás" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "ebben a verzióban nem érhető el súgó" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: nem egy indexelt tömb" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: nem szüntethető meg: csak olvasható %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: nem szüntethető meg" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: érvénytelen műveletnév" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: nincs kiegészítés meghatározva" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "figyelmeztetés: a -F kapcsoló nem a várt módon működhet" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "figyelmeztetés: a -C kapcsoló nem a várt módon működhet" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "jelenleg nincs kiegészítési függvény végrehajtás alatt" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "csak függvényben használható" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "nem használható a „-f” függvény létrehozására" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: csak olvasható függvény" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: a referenciaváltozó nem lehet tömb" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: a névhivatkozás változó önhivatkozása nem engedélyezett" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: körkörös névhivatkozás" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "„%s”: érvénytelen változónév a névhivatkozáshoz" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: ilyen módon nem lehet tömböt megszüntetni" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: nem lehetséges az asszociatív tömb indexeltté alakítása" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: az idézőjelezett összetett tömb értékadása elavult" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "a dinamikus betöltés nem érhető el" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "megosztott objektumfájl megnyitása sikertelen: %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "%s nem található a(z) %s megosztott objektumfájlban: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: nem dinamikusan van betöltve" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "%s betöltési függvénye hibát ad vissza (%d): nincs betöltve" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: nem dinamikusan van betöltve" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: nem törölhető: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s egy könyvtár" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: nem normál fájl" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: a fájl túl nagy" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: bináris nem hajtható végre" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: nem hajtható végre: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "kijelentkezés\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "nem bejelentkező parancsértelmező: használja az „exit”-et" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Vannak leállított munkák.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Vannak futó munkák.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "nincs ilyen parancs" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "előzményválasztás" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: az átmeneti fájl nem nyitható meg: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "aktuális" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "a(z) %d. munka munkakezelés nélkül indult" @@ -522,11 +536,11 @@ msgstr "%s: érvénytelen kapcsoló – %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: a kapcsolónak kötelező argumentuma van – %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "a hashelés le van tiltva" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: a hashtábla üres\n" @@ -556,12 +570,12 @@ msgstr "" "nem illeszkedik egy szócikk sem a következőre: „%s”.\n" "A „help help”, „man -k '%s'” vagy „info '%s'” parancsok segíthetnek." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: nem nyitható meg: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -580,21 +594,31 @@ msgstr "" "A parancs nevét követő csillag (*) azt jelzi, hogy le van tiltva.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "a következő kapcsolók kizárják egymást: -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "előzménypozíció" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "üres tömbváltozó-név" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: a paraméter null vagy nincs beállítva" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: érvénytelen időbélyeg" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: sikertelen előzményből való kiegészítés" @@ -608,113 +632,113 @@ msgstr "%s: sikertelen inlib" msgid "no other options allowed with `-x'" msgstr "a „-x” mellett nem használható más kapcsoló" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: az argumentumok folyamat- vagy munkaazonosítók lehetnek" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Ismeretlen hiba" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "az értelmező kifejezést várt" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: nem egy indexelt tömb" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: érvénytelen fájlleíró-megadás" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: érvénytelen fájlleíró: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: sorok száma érvénytelen" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: érvénytelen tömbkezdet" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: érvénytelen parancshívási távolság" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "üres tömbváltozó-név" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "a tömbök használata nincs támogatva" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "„%s”: hiányzó formátumkarakter" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "„%c”: érvénytelen időformátum-megadás" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "„%c”: érvénytelen formátumkarakter" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "figyelmeztetés: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "formátumfeldolgozási probléma: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "hiányzó hexadecimális számjegy a következőhöz: \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "hiányzó unicode számjegy a következőhöz: \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "nincs másik könyvtár" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: érvénytelen argumentum" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<nincs munkakönyvtár>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "a könyvtárverem üres" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "könyvtárveremindex" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -754,7 +778,7 @@ msgstr "" " -N\tN darab bejegyzést jelenít meg az argumentum nélkül a dirs\n" " \táltal megjelenített listán jobbról számolva, nullától kezdve." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -800,7 +824,7 @@ msgstr "" " \n" " A „dirs” beépített parancs listázza a könyvtárvermet." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -837,322 +861,334 @@ msgstr "" " \n" " A „dirs” beépített parancs listázza a könyvtárvermet." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: érvénytelen időkorlát-megadás" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "olvasási hiba: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "" "csak függvényből vagy source-olt parancsfájlból lehet „return”-nel " "visszatérni" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "nem lehet egyszerre függvényt és változót megszüntetni" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: nem egy tömbváltozó" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: nem függvény" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: nem exportálható" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "shift-szám" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "" "nem lehet egyszerre beállítani és törölni parancsértelmező-beállításokat" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: érvénytelen parancsértelmezőkapcsoló-név" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "fájlnévargumentum szükséges" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: a fájl nem található" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "nem lehet szüneteltetni" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "nem lehet bejelentkező parancsértelmezőt szüneteltetni" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s egy alias a következőre: „%s”\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s egy parancsértelmező-kulcsszó\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s egy függvény\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s egy speciális beépített parancs\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s egy függvény\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s egy beépített parancs\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s: %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s hashelve van (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: érvénytelen korlátérték" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "„%c”: érvénytelen parancs" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: nem kérdezhető le a korlát: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "korlát" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: nem módosítható a korlát: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "oktális szám" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "„%c”: érvénytelen szimbolikus módoperátor" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "„%c”: érvénytelen szimbolikus módkarakter" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " sor: " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "utolsó parancs: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Megszakítás..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORM: " -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "figyelmeztetés: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "hiba: érvénytelen parancs" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "hibás parancstípus" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "hibás csatlakozó" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "hibás ugrás" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: kötetlen változó" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aidőtúllépés bemenetre várva: automatikus kijelentkezés\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "szabványos bemenet /dev/null-ra állítása sikertelen: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "IDŐFORMÁTUM: „%c”: érvénytelen formátumkarakter" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: a coproc [%d:%s] még mindig létezik" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "hibás csővezeték" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: a maximális eval beágyazási szint túllépve (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: a maximális source beágyazási szint túllépve (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: a maximális függvénybeágyazási szint túllépve (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: korlátozott: nem adható meg „/” a parancsok nevében" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: parancs nem található" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: rossz parancsértelmező" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: bináris nem hajtható végre" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: rossz parancsértelmező" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: a bináris nem hajtható végre: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "„%s”: egy speciális beépített parancs" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "nem lehet duplikálni a(z) %d. fájlleírót a(z) %d. helyre" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "a kifejezés rekurziókorlátot" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "alulcsordult a rekurziós verem" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "szintaktikai hiba a kifejezésben" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "nem változóhoz próbált értéket rendelni" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "szintaktikai hiba a változó-értékadásban" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "0-val osztás" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bug: rossz expassign token" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "„:” egy feltételkifejezés szükséges" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "0-nál kisebb kitevő" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "prefix növelés vagy csökkentés után azonosító kell következzen" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "hiányzó „)”" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "szintaktikai hiba: operandus kell következzen" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "szintaktikai hiba: érvénytelen aritmetikai operátor" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (hibás token: „%s”)" @@ -1170,7 +1206,7 @@ msgstr "%s: sorok száma érvénytelen" msgid "value too great for base" msgstr "túl nagy érték a számrendszerhez" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: hibás kifejezés\n" @@ -1179,47 +1215,52 @@ msgstr "%s: hibás kifejezés\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: nem érhetőek el a szülőkönyvtárak" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "„%s”: egy speciális beépített parancs" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "nem lehet újraindítani a nodelay módot a(z) %d. fájlleíróhoz" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" "nem lehet új fájlleírót foglalni a bash bemenetéhez a(z) %d. fájlleíróból" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: már van puffer a(z) %d. fájlleíróhoz" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp csővezeték" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "a(z) %d számú forkolt pid a(z) %d számú munkában jelent meg" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "%d. számú megállított munka törlése a %ld számú folyamatcsoporttal" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: %5ld. folyamat (%s) még élőként van jelölve" @@ -1229,137 +1270,137 @@ msgstr "add_process: %5ld. folyamat (%s) még élőként van jelölve" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: nincs ilyen pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "%d. szignál" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Kész" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Megállítva" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Megállítva(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Fut" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Kész(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Kilépett(%d)" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Ismeretlen állapot" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(core készült) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (mk: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "gyermek setpgid (innen: %ld ide: %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: %ld. számú folyamat nem gyermeke ennek a parancsértelmezőnek" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Nincs bejegyzés %ld. számú folyamatról" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: %d. számú munka le lett állítva" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: nincs ilyen munka" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: a munka be lett fejezve" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: %d. számú munka már a háttérben van" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: WNOHANG bekapcsolása a korlátlan blokk elkerülésére" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: %d. sor: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (core készült)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(mk most: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp sikertelen" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: nincs munkakezelés a háttérben" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: line discipline" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "nem állítható be a terminál folyamatcsoportja (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "nincsen munkakezelés ebben a parancsértelmezőben" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: nem teljesülő feltételezés: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1368,152 +1409,152 @@ msgstr "" "\r\n" "malloc: %s:%d: téves feltételezés\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "ismeretlen" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: a szabadlistán lévő blokk felülírva" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: már felszabadított blokkal lett hívva" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: nem lefoglalt blokkal lett hívva" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: alulcsordulást érzékelt; mh_nbytes kívül esik a tartományon" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: alulcsordulást érzékelt; mh_nbytes kívül esik a tartományon" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: kezdő- és záródarab mérete eltér" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: nem lefoglalt blokkal lett hívva" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: alulcsordulást érzékelt; mh_nbytes kívül esik a tartományon" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: alulcsordulást érzékelt; mh_nbytes kívül esik a tartományon" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: kezdő- és záródarab mérete eltér" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: foglalótábla tele van FIND_ALLOC-kal?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p már a táblában lefoglaltként?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p már a táblában szabadként?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "érvénytelen számrendszer" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: ismeretlen gépnév" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: érvénytelen szolgáltatás" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: hibás hálózatiútvonal-megadás" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "a hálózati műveletek nincsenek támogatva" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: nem lehet területi beállításokat váltani (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: nem lehet területi beállításokat váltani (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: nem lehet területi beállításokat váltani (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: nem lehet területi beállításokat váltani (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Levél a következőben: $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Új levél a következőben: $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "A(z) „%s” helyen lévő levél el van olvasva\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "szintaktikai hiba: aritmetikai kifejezés szükséges" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "szintaktikai hiba: váratlan „;”" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "szintaktikai hiba: „((%s))”" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: hibás utasítástípus: %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "a(z) %d. sorban kezdett heredocot EOF zárja („%s” helyett)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: %d. átirányító utasítás kívül esik a tartományon" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " @@ -1522,228 +1563,238 @@ msgstr "" "shell_getc: a shell_input_line_size (%zu) meghaladja a MÉRET_MAXIMUM értékét " "(%lu): a sor csonkolva" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "írási hiba: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "a maximális here-document szám túllépve" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "váratlan EOF „%c” helyett" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "váratlan EOF „]]” helyett" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "szintaktikai hiba a feltételben: váratlan token: „%s”" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "szintaktikai hiba a feltételben" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "váratlan token (%s) „)” helyett" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "„)” szükséges" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "váratlan argumentum (%s) feltételes egyoperandusú operátorhoz" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "váratlan argumentum feltételes egyoperandusú operátorhoz" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "váratlan token (%s), feltételes kétoperandusú operátor szükséges" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "feltételes kétoperandusú operátor szükséges" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "váratlan argumentum (%s) feltételes kétoperandusú operátorhoz" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "váratlan argumentum feltételes kétoperandusú operátorhoz" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "váratlan token (%c) feltételes parancsban" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "váratlan token (%s) feltételes parancsban" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "váratlan token (%d) feltételes parancsban" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "szintaktikai hiba „%s” váratlan token közelében" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "szintaktikai hiba „%s” közelében" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "szintaktikai hiba: váratlan fájlvége" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "szintaktikai hiba: váratlan fájlvége" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "szintaktikai hiba" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "„%s” használatával lehet elhagyni a parancsértelmezőt.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "váratlan EOF „)” helyett" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "kiegészítés: nem található „%s” függvény" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: lehetséges újrapróbálási hurok" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: hibás csatlakozó (%d)" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: érvénytelen fájlleíró" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: NULL fájlmutató" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: „%c”: érvénytelen formátumkarakter" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "fájlleíró kívül esik a tartományon" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: kétértelmű átirányítás" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: nem lehet felülírni létező fájlt" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: korlátozott: nem lehet átirányítani a kimenetet" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "nem lehet a heredocnak átmeneti fájlt létrehozni: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: nem lehet változóhoz fájlleírót rendelni" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port nincs támogatva hálózat nélkül" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "átirányítási hiba: nem lehet duplikálni a fájlleírót" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "nem található /tmp, hozza létre!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp érvényes könyvtárnév kell legyen" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "a csinos kiírási mód mellőzve van interaktív az parancsértelmezőkben" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: érvénytelen kapcsoló" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "az uid nem állítható be %d értékre: a hatásos uid %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "a gid nem állítható be %d értékre: a hatásos gid %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "nem indítható el a hibakereső; a hibakeresési mód letiltva" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: ez egy könyvtár" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Nincs nevem!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, %s-(%s) verzió\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1752,53 +1803,53 @@ msgstr "" "Használat:\t%s [GNU hosszú kapcsoló] [kapcsoló] ...\n" "\t%s [GNU hosszú kapcsoló] [kapcsoló] parancsfájl ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU hosszú kapcsolók:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Parancsértelmező-kapcsolók:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD vagy -c parancs vagy -O shopt_option\t\t(csak hívás)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s vagy -o kapcsoló\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "A „%s -c \"help set\"” további információt ad a parancsértelmező-" "beállításokról.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "A „%s -c help” további információt ad a beépített parancsokról.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "A „bashbug” paranccsal jelenthet hibákat.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "a bash honlapja: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Általános segítség a GNU szoftverek használatához: <http://www.gnu.org/" "gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: érvénytelen művelet" @@ -1968,96 +2019,100 @@ msgstr "Információkérés" msgid "Unknown Signal #%d" msgstr "%d. számú ismeretlen szignál" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "hibás helyettesítés: nincs záró „%s” a következőben: %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: lista nem adható tömbelemnek értékül" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "nem hozható létre a csővezeték a folyamatbehelyettesítéshez" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "nem hozható létre a gyermek a folyamatbehelyettesítéshez" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "nem nyitható meg olvasásra a(z) %s csővezeték" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "nem nyitható meg írásra a(z) %s csővezeték" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "nem duplikálható a(z) %s csővezeték %d. fájlleíróként" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "parancshelyettesítés: figyelmen kívül hagyott null bájt a bemeneten" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: nem duplikálható a csővezeték 1. fájlleíróként" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "nem hozható létre csővezeték a parancsbehelyettesítéshez" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "nem hozható létre gyermek a parancsbehelyettesítéshez" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: nem duplikálható a csővezeték 1. fájlleíróként" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: érvénytelen változóérték a névhivatkozáshoz" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: az indirekt kiegészítés érvénytelen" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: érvénytelen változónév" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: a paraméter nincs beállítva" +msgid "%s: bad substitution" +msgstr "%s: rossz helyettesítés" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: a paraméter null vagy nincs beállítva" +msgid "%s: parameter not set" +msgstr "%s: a paraméter nincs beállítva" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: részkarakterlánc-kifejezés < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: rossz helyettesítés" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: nem lehet így értéket adni" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2065,160 +2120,168 @@ msgstr "" "a parancsértelmező későbbi verziói kötelezővé teszik majd az aritmetikai " "kiértékelést" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "hibás helyettesítés: nincs záró „`” a következőben: %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "nincs találat: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argumentum szükséges" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: egész kifejezés szükséges" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "„)” szükséges" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "„)” szükséges %s helyett" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: kétoperandusú operátor szükséges" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: egyoperandusú operátor szükséges" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "hiányzó „]”" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "szintaktikai hiba: váratlan „;”" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "érvénytelen szignálszám" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "elfogáskezelő: a legnagyobb elfogáskezelő-szint túllépve (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: rossz érték a trap_list[%d]-ban: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "" "run_pending_traps: szignálkezelő a SIG_DFL, %d (%s) újraküldése önmagunknak" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: rossz szignál: %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "hiba a függvénydefiníció betöltésekor: „%s”" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "a parancsértelmező szintje (%d) túl magas, visszaállítás 1-re" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "a maximális here-document szám túllépve" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: nincs függvénykörnyezet az aktuális látókörben" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: nem lehet a változóhoz értéket rendelni" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: egész szám hozzárendelése a névhivatkozáshoz" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: nincs függvénykörnyezet az aktuális látókörben" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s exportstr-je null" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "érvénytelen karakter (%d) %s exportstr-jében" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "nincs „=” %s exportstr-jében" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: shell_variables feje nem egy függvénykörnyezet" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: nincs global_variables környezet" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: shell_variables feje nem egy átmeneti környezeti látókör" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: nem nyitható meg FILE-ként" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: érvénytelen érték a trace fájlleíróhoz" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: a kompatibilitási érték kívül esik a tartományon" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2018 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2226,35 +2289,35 @@ msgstr "" "A licenc GPLv3+: a GNU GPL 3. vagy újabb változata\n" "<http://gnu.org/licenses/gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, %s (%s) verzió\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Ez egy szabad szoftver, terjesztheti és/vagy módosíthatja." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "NINCS GARANCIA, a törvény által engedélyezett mértékig." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: nem lehetséges %lu byte foglalása (%lu byte lett foglalva)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: nem lehetséges %lu byte foglalása" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d nem lehetséges %lu byte foglalása (%lu byte lett foglalva)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d nem lehetséges %lu byte foglalása" @@ -2293,7 +2356,8 @@ msgid "caller [expr]" msgstr "caller [kif]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [ktár]" #: builtins.c:68 @@ -2406,8 +2470,9 @@ msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a tömb] [-d elválasztó] [-i szöveg] [-n szám] [-N szám] [-p " @@ -2459,7 +2524,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] szignál ...]" #: builtins.c:168 @@ -2485,26 +2551,30 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NÉV [in SZAVAK ... ] ; do PARANCSOK; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( kif1; kif2; kif3 )); do PARANCSOK; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NÉV [in SZAVAK ... ;] do PARANCSOK; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] csővezeték" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case SZÓ in [MINTA [| MINTA]...) PARANCSOK ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2512,65 +2582,65 @@ msgstr "" "if PARANCSOK; then PARANCSOK; [ elif PARANCSOK; then PARANCSOK; ]... [ else " "PARANCSOK; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while PARANCSOK; do PARANCSOK; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until PARANCSOK; do PARANCSOK; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NÉV] parancs [átirányítások]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function név { PARANCSOK ; } vagy név () { PARANCSOK ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ PARANCSOK ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "munkaszám [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( kifejezés ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ kifejezés ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Néhány parancsértelmező-változó neve és jelentése" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | ktár]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [optnév ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v változó] formátum [argumentumok]" -#: builtins.c:231 +#: builtins.c:233 #, fuzzy msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" @@ -2581,21 +2651,22 @@ msgstr "" "globminta] [-W szólista] [-F függvény] [-C parancs] [-X szűrőminta] [-P " "prefixum] [-S szuffixum] [név ...]" -#: builtins.c:235 +#: builtins.c:237 #, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o beállítás] [-A művelet] [-G globminta] [-W " "szólista] [-F függvény] [-C parancs] [-X szűrőminta] [-P prefixum] [-S " "szuffixum] [szó]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o beállítás] [-DEI] [név ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2603,7 +2674,7 @@ msgstr "" "mapfile [-d elválasztó] [-n szám] [-O kezdet] [-s szám] [-t] [-u fd] [-C " "parancs] [-c távolság] [tömb]" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2611,7 +2682,7 @@ msgstr "" "readarray [-d elválasztó] [-n szám] [-O kezdet] [-s szám] [-t] [-u fd] [-C " "parancs] [-c távolság] [tömb]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2646,7 +2717,7 @@ msgstr "" " Kilépési kód:\n" " igazzal tér vissza, kivéve ha nincs megadott NÉV nevű alias definiálva." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2662,7 +2733,7 @@ msgstr "" " \n" " Sikeresen tér vissza, kivéve ha nincs megadott NÉV nevű alias." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2745,7 +2816,7 @@ msgstr "" " Kilépési kód:\n" " a bind 0-val tér vissza, ha nincs ismeretlen kapcsoló vagy hiba." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2763,7 +2834,7 @@ msgstr "" " Kilépési kód:\n" " A kilépési kód 0, ha N >= 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2781,7 +2852,7 @@ msgstr "" " Kilépési kód:\n" " A kilépési kód 0, ha N >= 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2804,7 +2875,7 @@ msgstr "" " Továbbadja a SHELL-BUILTIN kilépési kódját vagy hamissal tér vissza,\n" " ha nincs ilyen parancs." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2832,13 +2903,14 @@ msgstr "" " 0-val tér vissza, ha érvényes a KIF és valóban függvényt hajt végre a\n" " parancsértelmező." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2913,7 +2985,7 @@ msgstr "" " 0-val tér vissza, ha könyvtárat váltott és ha a -P használatakor a $PWD\n" " sikeresen beállításra kerül; más értéket különben." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2941,7 +3013,7 @@ msgstr "" " 0-val tér vissza, kivéve ha érvénytelen kapcsolót kapott vagy nem lehet\n" " olvasni a munkakönyvtárat." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2957,7 +3029,7 @@ msgstr "" " Kilépési kód:\n" " Mindig sikeres." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2969,7 +3041,7 @@ msgstr "" " Kilépési kód:\n" " Mindig sikeres." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2981,7 +3053,7 @@ msgstr "" " Kilépési kód:\n" " Mindig sikertelen." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3017,7 +3089,7 @@ msgstr "" " A PARANCS kilépési kódjával tér vissza, vagy hibát jelez, ha nem\n" " található a PARANCS." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3046,7 +3118,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3097,7 +3170,7 @@ msgstr "" "értékadási\n" " hiba történik." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3107,7 +3180,7 @@ msgstr "" " \n" " A „declare” szinonimája. Lásd: „help declare”." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3133,7 +3206,7 @@ msgstr "" " Sikerrel tér vissza, kivéve ha érvénytelen kapcsolót kap, értékadási\n" " hiba történik, vagy nem függvényben lett hívva." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3205,7 +3278,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve írási hiba esetén." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3227,7 +3300,8 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve írási hiba esetén." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3247,6 +3321,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3279,7 +3359,7 @@ msgstr "" " Sikerrel tér vissza, kivéve ha a NÉV nem egy beépített parancs, vagy\n" " hiba történt." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3298,7 +3378,7 @@ msgstr "" " Kilépési kód:\n" " A parancs kilépési kódjával tér vissza, vagy sikerrel, ha üres a parancs." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy msgid "" "Parse option arguments.\n" @@ -3377,7 +3457,7 @@ msgstr "" " Sikerrel tér vissza, ha kapcsolót talált, sikertelenül, ha elfogytak a\n" " kapcsolók, vagy hiba történt." -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3419,7 +3499,7 @@ msgstr "" " Sikerrel tér vissza, kivéve, ha a PARANCS nem található vagy sikertelen\n" " az átirányítás." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3432,7 +3512,7 @@ msgstr "" "utolsó\n" " parancs kilépési kódjával lép ki." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3445,7 +3525,8 @@ msgstr "" " Kilép a bejelentkező parancsértelmezőből az N kilépési kóddal. Hibával\n" " tér vissza, ha nem bejelentkező parancsértelmezőből hívják." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3470,6 +3551,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3503,7 +3586,7 @@ msgstr "" "eltérőt\n" " hiba esetén." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3525,7 +3608,7 @@ msgstr "" " Az előtérbe hozott parancs állapota (annak kilépésekor), vagy nem nulla\n" " hiba esetén." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3549,7 +3632,7 @@ msgstr "" " Sikerrel tér vissza, kivéve ha a munkakezelés le van tiltva, vagy\n" " hiba történt." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3592,7 +3675,7 @@ msgstr "" " Sikerrel tér vissza, kivéve, ha a NÉV nem található vagy érvénytelen\n" " kapcsolót kap." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3631,7 +3714,8 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve ha nincs találat vagy hibás kapcsolót kap." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3655,7 +3739,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3700,7 +3788,7 @@ msgstr "" " Sikerrel tér vissza, kivéve ha érvénytelen kapcsolót kap, vagy hiba\n" " történik." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3745,7 +3833,7 @@ msgstr "" " Sikerrel tér vissza, ha nem kap érvénytelen kapcsolót, és nem történik\n" " hiba. -x használata esetén a PARANCS kilépési kódjával tér vissza." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3777,7 +3865,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, ha nem kap érvénytelen kapcsolót vagy MUNKASZÁMOT" -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3822,7 +3910,7 @@ msgstr "" "történik\n" " hiba." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3905,7 +3993,7 @@ msgstr "" " Kilépési kód:\n" " Ha az utolsó argumentum 0, a let 1-gyel tér vissza, különben 0-val." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -3930,6 +4018,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3997,7 +4087,7 @@ msgstr "" " A kilépési kód nulla, kivéve ha EOF-ot ér a beolvasás, időtúllépéskor\n" " (ekkor > 128) vagy érvénytelen fájlleíró megadásakor a -u kapcsolónak." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4019,7 +4109,8 @@ msgstr "" " N-nel tér vissza, kivéve ha nem függvényből vagy parancsfájlból akar\n" " visszatérni – ekkor sikertelenséget jelez." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -4095,6 +4186,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4189,7 +4284,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve ha érvénytelen kapcsolót kap." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4231,7 +4326,7 @@ msgstr "" " Sikerrel tér vissza, kivéve ha hibás kapcsolót kap, vagy egy NÉV csak\n" " olvasható." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4265,7 +4360,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve ha érvénytelen kapcsolót vagy NEVET kap." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4303,7 +4398,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve ha érvénytelen kapcsolót vagy NEVET kap." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4321,7 +4416,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve ha N negatív vagy nagyobb mint $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4346,15 +4441,18 @@ msgstr "" "sikertelenül,\n" " ha a FÁJLNÉV nem olvasható." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4372,7 +4470,7 @@ msgstr "" " Sikerrel tér vissza, kivéve ha a munkakezelés nem támogatott vagy hiba\n" " történt." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4533,7 +4631,7 @@ msgstr "" "vagy\n" " érvénytelen argumentumokat kap." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4545,7 +4643,7 @@ msgstr "" " Ez a „test” beépített parancs szinonimája, de annyiban eltér tőle,\n" " hogy az utolsó argumentuma „]” kell legyen – a nyitó „]”-lel összhangban." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4564,7 +4662,8 @@ msgstr "" " Kilépési kód:\n" " Mindig sikeres." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy msgid "" "Trap signals and other events.\n" " \n" @@ -4572,31 +4671,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4647,7 +4751,7 @@ msgstr "" " Sikerrel tér vissza, kivéve ha a SZIGNÁL érvénytelen, vagy érvénytelen\n" " kapcsolót kap." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4699,7 +4803,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel lép ki, ha minden NÉV megtalálható, sikertelenül, ha nem." -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy msgid "" "Modify shell resource limits.\n" @@ -4742,9 +4846,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4796,7 +4901,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve érvénytelen kapcsoló vagy hiba esetében." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4832,7 +4937,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel lép ki, kivéve ha a MÓD vagy egy kapcsoló érvénytelen." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" @@ -4884,7 +4989,7 @@ msgstr "" " ID kilépési kódjával tér vissza; érvénytelen ID vagy kapcsoló esetén\n" " sikertelenül." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -4909,7 +5014,16 @@ msgstr "" "kapcsoló\n" " esetén sikertelenül." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4931,7 +5045,7 @@ msgstr "" " Kilépési kód:\n" " Az utolsó parancs kilépési kódját adja vissza." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4962,7 +5076,7 @@ msgstr "" " Kilépési kód:\n" " Az utolsó parancs kilépési kódját adja." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4998,7 +5112,7 @@ msgstr "" " Kilépési kód:\n" " Az utolsó parancs kilépési kódját adja vissza." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5028,7 +5142,7 @@ msgstr "" " Kilépési kód:\n" " A kilépési kód a CSŐVEZETÉK kilépési kódja lesz." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5048,7 +5162,7 @@ msgstr "" " Kilépési kód:\n" " Az utolsó parancs kilépési kódját adja vissza." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5081,7 +5195,7 @@ msgstr "" " Kilépési kód:\n" " Az utoljára végrehajtott parancs kilépési kódja." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5102,7 +5216,7 @@ msgstr "" " Kilépési kód:\n" " Az utolsónak végrehajtott parancs kilépési kódja." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5123,7 +5237,7 @@ msgstr "" " Kilépési kód:\n" " Az utolsónak végrehajtott parancs kilépési kódja." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5145,7 +5259,7 @@ msgstr "" " Kilépési kód:\n" " A coproc parancs 0-s kilépési kóddal tér vissza." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5169,7 +5283,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve ha a NÉV csak olvasható." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5187,7 +5301,7 @@ msgstr "" " Kilépési kód:\n" " Az utolsó parancs kilépési kódját adja vissza." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5211,7 +5325,7 @@ msgstr "" " Kilépési kód:\n" " A visszaállított parancs kilépési kódjával lép ki." -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy msgid "" "Evaluate arithmetic expression.\n" @@ -5230,7 +5344,7 @@ msgstr "" " Kilépési kód:\n" " 1-gyel tér vissza, ha KIFEJEZÉS értéke 0, különben 0-val." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5279,7 +5393,7 @@ msgstr "" " Kilépési kód:\n" " 0 vagy 1 a KIFEJEZÉSTŐL függően." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5380,7 +5494,7 @@ msgstr "" " HISTIGNORE\tKettőspontokkal elválasztott mintalista, amely mintákra\n" " \t\tilleszkedő parancsok nem kerülnek az előzmények közé\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5438,7 +5552,7 @@ msgstr "" " Sikerrel tér vissza, kivéve érvénytelen argumentum vagy könyvtárváltás\n" " során történő hiba esetén." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5487,7 +5601,7 @@ msgstr "" " Sikerrel tér vissza, kivéve érvénytelen argumentum vagy könyvtárváltás\n" " során történő hiba esetén." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5537,7 +5651,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve érvénytelen argumentum vagy hiba esetén." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5574,7 +5688,7 @@ msgstr "" " Sikerrel tér vissza, ha az OPTNÉV engedélyezve van; sikertelenül, ha\n" " hibás kapcsolókat kap vagy az OPTNÉV tiltva van." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5592,9 +5706,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5647,16 +5761,16 @@ msgstr "" " Sikerrel tér vissza, kivéve ha hibás kapcsolókat kap, vagy az írás/\n" " értékadás hibával járt." -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5703,14 +5817,19 @@ msgstr "" " Kilépési kód:\n" " Sikerrel tér vissza, kivéve érvénytelen kapcsoló és hiba esetén." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5725,7 +5844,7 @@ msgstr "" " Kilépési kód:\n" " Sikerrel lép ki, kivéve érvénytelen kapcsoló vagy hiba esetén." -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -5784,7 +5903,7 @@ msgstr "" "nincs\n" " még megadva." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -5856,7 +5975,7 @@ msgstr "" " Sikerrel tér vissza, kivéve érvénytelen kapcsoló vagy csak olvasható,\n" " vagy nem indexelt TÖMB megadása esetén." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5866,6 +5985,39 @@ msgstr "" " \n" " A „mapfile” szinonimája." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Az aktuális szubrutinhívás környezetének visszaadása.\n" +#~ " \n" +#~ " KIF nélkül \"$sor $fájlnév\" formátumú eredményt ad. A KIF-fel pedig\n" +#~ " \"$sor $szubrutin $fájlnév\" formátumút; ez hasznos lehet stack " +#~ "trace\n" +#~ " kiírásához.\n" +#~ " \n" +#~ " Az EXPR értéke azt adja meg, hogy a jelenlegihez képest milyen " +#~ "mélyre\n" +#~ " lépjen vissza; a verem tetején a 0-s keret van.\n" +#~ " \n" +#~ " Kilépési kód:\n" +#~ " 0-val tér vissza, ha érvényes a KIF és valóban függvényt hajt végre " +#~ "a\n" +#~ " parancsértelmező." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "figyelmeztetés: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: érvénytelen asszociatívtömb-index" diff --git a/po/id.gmo b/po/id.gmo index ca3c6febf0d08170cca3f5af811b33222e98996d..06e212656d66855a3701c20a5bcf987cd2356957 100644 GIT binary patch delta 11833 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 delta 20018 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 YG@82Pu4RXZn16|F^_LAAZl;+310~QI*8l(j diff --git a/po/id.po b/po/id.po index 272e14310..ad3f217a9 100644 --- a/po/id.po +++ b/po/id.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2021-09-17 19:30+0700\n" "Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n" "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n" @@ -18,123 +18,123 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "array subscript buruk" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: menghapus atribut nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: tidak dapat mengubah index ke array yang berassosiasi" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: tidak dapat mengassign ke index tidak-numeric" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: harus menggunakan subscript ketika memberikan assosiasi array" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: tidak dapat membuat: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: tidak dapat menemukan keymap untuk perintah" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: bukan karakter whitespace (spasi) pertama ditemukan `\"'" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "tidak menutup '%c' dalam %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: hilang pemisah colon" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "'%s': tidak dapat melepaskan dalam peta perintah" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "brace expansion: cannot allocate memory for %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "brace expansion: failed to allocate memory for %u elements" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "brace expansion: failed to allocate memory for `%s'" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "`%s': nama alias tidak valid" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "pengubahan baris tidak aktif" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "'%s': nama keymap tidak valid" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: tidak dapat membaca: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "'%s': nama fungsi tidak dikenal" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s tidak terikat ke kunci apapun.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s dapat dipanggil melalui " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "'%s': tidak dapat melepaskan" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "jumlah loop" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "hanya berarti dalam sebuah `for', `while', atau `until'loop" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -144,7 +144,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Mengembalikan context dari panggilan subroutine saat ini.\n" " \n" @@ -160,351 +164,361 @@ msgstr "" "shell atau EXPR\n" " tidak valid." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME tidak diset" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "terlalu banyak argumen" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "null direktori" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD tidak diset" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "baris %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "peringatan: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: penggunaan: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: pilihan membutuhkan sebuah argumen" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: argumen numeric dibutuhkan" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: tidak ditemukan" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: pilihan tidak valid" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: nama pilihan tidak valid" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': bukan sebuah identifier yang valid" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "nomor oktal tidak valid" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "nomor hexa tidak valid" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "nomor tidak valid" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: spesifikasi sinyal tidak valid" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "`%s': bukan sebuah pid atau spesifikasi pekerjaan yang valid" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: variabel baca-saja" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: tidak dapat unset" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s diluar jangkauan" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argumen" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s diluar jangkauan" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: tidak ada pekerjaan seperti itu" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: tidak ada pengontrol kerja" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "tidak ada pengontrol kerja" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: terbatas" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "terbatas" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: bukan sebuah builtin shell" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "gagal menulis: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "error menentukan atribut terminal: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "error mendapatkan atribut terminal: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: error mengambil direktori saat ini: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: spesifikasi pekerjaan ambigu" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "bantuan tidak tersedia di versi ini" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: bukan sebuah indeks array" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: tidak dapat unset: baca-saja %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: tidak dapat unset" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nama aksi tidak valid" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: tidak ada spesifikasi completion" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "" "peringatan: pilihan -F mungkin tidak bekerja seperti yang anda harapkan" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "" "peringatan: pilihan -C mungkin tidak bekerja seperti yang anda harapkan" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "saat ini sedang tidak menjalankan fungsi completion" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "hanya dapat digunakan dalam sebuah fungsi" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "tidak dapat menggunakan `-f' untuk membuat fungsi" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: fungsi baca-saja" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: reference variable cannot be an array" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: nameref variable self references not allowed" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: circular name reference" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "`%s': nilai dari berkas pendeskripsi penelusur tidak valid" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: tidak dapat menghapus variabel array secara ini" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: tidak dapat mengubah assosiasi ke array index" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: quoted compound array assignment ditinggalkan" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynamic loading tidak tersedia" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "tidak dapat membuka object shared %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "tidak dapat menemukan %s dalam shared object %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: dynamic builtin telah dimuat" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "muat fungsi untuk %s mengembalikan kegagalan (%d): tidak dimuat" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: bukan dinamically loaded" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: tidak dapat menghapus: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: bukan sebuah direktori" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: bukan sebuah file umum" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: file terlalu besar" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: tidak dapat menjalankan berkas binary" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: tidak dapat menjalankan: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "logout\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "bukan sebuah login shell: gunakan `exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Ada pekerjaan yang terhenti.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Ada pekerjaan yang sedang berjalan.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "perintah tidak ditemukan" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "spesifikasi sejarah" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: tidak dapat membuka file sementara: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "sekarang" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "pekerjaan %d dimulai tanpa pengontrol pekerjaan" @@ -519,11 +533,11 @@ msgstr "%s: pilihan tidak legal -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: pilihan membutuhkan sebuah argumen -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashing dinonaktifkan" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: tabel hash kosong\n" @@ -555,12 +569,12 @@ msgstr "" "tidak ada topik bantuan yang cocok dengan `%s'. Coba `help help' atau 'man -" "k %s' atau `info %s'." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: tidak dapat membuka: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -583,21 +597,31 @@ msgstr "" "aktif.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "tidak dapat menggunakan lebih dari satu pilihan dari -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "posisi sejarah" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "nama variabel array kosong" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameter kosong atau tidak diset" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: penanda waktu tidak valid" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: expansi sejarah gagal" @@ -611,113 +635,113 @@ msgstr "%s: inlib gagal" msgid "no other options allowed with `-x'" msgstr "tidak ada pilihan lain yang diperbolehkan dengan `-x'" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumen harus diproses atau ID pekerjaan" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Kesalahan tidak diketahui" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "diduga sebuah ekspresi" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: bukan sebuah indeks array" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: spesifikasi file deskripsi tidak valid" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: file deskriptor %s tidak valid" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: jumlah baris tidak valid" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: asal array tidak valid" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: nama aksi tidak valid" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "nama variabel array kosong" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "bantuan array variabel dibutuhkan" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "`%s': hilang karakter format" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "`%c': spesifikasi timeout tidak valid" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "`%c': karakter format tidak valid" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "peringatan: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "format parsing problem: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "hilang digit hexa untuk \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "hilang digit hexa untuk \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "tidak ada direktori lain" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: argumen limit tidak valid" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<direktori saat ini>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "direktori stack kosong" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "index direktori stack" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -762,7 +786,7 @@ msgstr "" "ditampilkan oleh\n" " \tdirs ketika dipanggil tanpa pilihan, dimulai dari nol." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -809,7 +833,7 @@ msgstr "" " \n" " Builtin `dirs' menampilkan direktori stack." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -845,320 +869,332 @@ msgstr "" " \n" " Builtin `dirs' menampilkan direktori stack." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: spesifikasi timeout tidak valid" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "error baca: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "hanya dapat `return' dari sebuah fungsi atau script yang disource" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "tidak dapat secara simultan unset sebuah fungsi dan sebuah variable" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: bukan sebuah variabel array" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: bukan sebuah fungsi" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: tidak dapat export" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "shift terhitung" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "tidak dapat menset dan menunset pilihan shell secara bersamaan" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: nama pilihan shell tidak valid" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "argumen nama file dibutuhkan" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: berkas tidak ditemukan" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "tidak dapat suspend" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "tidak dapat suspend sebuah login shell" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s sudah dialiasi ke `%s'\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s adalah sebuah shell dengan kata kunci\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s adalah sebuah fungsi\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s adalah sebuah shell builtin spesial\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s adalah sebuah fungsi\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s adalah sebuah shell builtin\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s adalah %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s memiliki hash (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: argumen limit tidak valid" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': perintah buruk" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: tidak dapat get limit: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "batas" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: tidak dapat memodifikasi batas: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "nomor oktal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': operator mode symbolic tidak valid" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': mode karakter symbolic tidak valid" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " baris " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "perintah terakhir: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "membatalkan..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "BERI TAHU: " -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "peringatan: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "perintah error tidak diketahui" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "tipe perintah buruk" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "konektor buruk" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "lompat buruk" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: variabel tidak terikat" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "kehabisan waktu menunggu masukan: otomatis-keluar\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "tidak dapat menyalurkan masukan standar dari /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': karakter format tidak valid" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] masih ada" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "pipe error" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: maximum eval nesting level exceeded (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: maximum source nesting level exceeded (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: maximum function nesting level exceeded (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "" "%s: dibatasi: tidak dapat menspesifikasikan '/' dalam nama nama perintah" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: perintah tidak ditemukan" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: interpreter buruk" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: tidak dapat menjalankan berkas binary" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: interpreter buruk" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: tidak dapat menjalankan berkas binary: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "`%s': adalah sebuah shell builtin" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "tidak dapat menduplikasikan fd %d ke fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "expresi level rekursi terlewati" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "rekursi stack underflow" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "syntax error dalam expresi" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "mencoba menempatkan ke bukan sebuah variabel" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "syntax error dalam menempatkan variabel" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "dibagi oleh 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bug: tanda expassign buruk" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "`:' diharapkan untuk sebuah pernyataan kondisional" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "eksponen kurang dari 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "idenfier diharapkan setelah pre-increment atau pre-decrement" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "hilang `)'" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "syntax error: operand diharapkan" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "syntax error: operator arithmetic tidak valid" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (error token adalah \"%s\")" @@ -1175,7 +1211,7 @@ msgstr "konstanta bulat tidak valid" msgid "value too great for base" msgstr "nilai terlalu besar untuk basis" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: expresi error\n" @@ -1184,48 +1220,53 @@ msgstr "%s: expresi error\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: tidak dapat mengakses direktori orang tua" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "`%s': adalah sebuah shell builtin" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "tidak dapat mereset mode nodelay untuk fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" "tidak dapat mengalokasikan berkas deskripsi bari untuk masukan bash dari fd " "%d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "simpan bash_input: buffer telah ada untuk fd %d baru" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "forked pid %d terlihat dalam pekerjaan yang sedang berjalan %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "menghapus pekerjaan yang terhenti %d dengan proses grup %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) ditandai dengan tetap hidup" @@ -1235,137 +1276,137 @@ msgstr "add_process: pid %5ld (%s) ditandai dengan tetap hidup" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: tidak ada pid seperti itu" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "sinyal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Selesai" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Terhenti" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Terhenti(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Berjalan" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Selesai(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Keluar %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Status tidak diketahui" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(core didump) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "anak setpgid (%ld ke %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld bukan sebuah anak dari shell ini" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Tidak ada catatan untuk proses %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: pekerjaan %d terhenti" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: tidak ada pekerjaan sekarang" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: pekerjaan telah selesai" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: pekerjaan %d sudah berjalan di belakang (background)" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: mengaktifkan WNOHANG untuk menghindari blok tak terhingga" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: baris %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (core didump)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd sekarang: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp gagal" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: tidak ada kontrol pekerjaan di belakang" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: baris disiplin" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "tidak dapat menset terminal proses grup (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "tidak ada pengontrol pekerjaan dalam shell ini" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: gagal assertion: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1374,152 +1415,152 @@ msgstr "" "\r\n" "malloc: %s:%d: assertion rusak\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "tidak diketahui" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: blok dalam daftar bebas clobbered" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: dipanggil dengan argumen blok yang sudah dibebaskan" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: dipanggil dengan argumen blok yang tidak dialokasikan" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: underflow terdeteksi; mh_nbytes diluar dari jangkauan" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: underflow terdeteksi; magic8 terkorupsi" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: awal dan akhir dari ukuran potongan berbeda" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: dipanggil dengan argumen blok yang tidak teralokasikan" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: underflow terdeteksi; my_nbytes diluar dari jangkauan" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: underflow terdeteksi; magic8 terkorupsi" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: awal dan akhir dari ukuran potongan berbeda" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: tabel alokasi penuh dengan FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "" "register_alloc: %p sudah berada dalam tabel sepertinya sudah dialokasikan?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p sudah berada dalam tabel sebagai bebas?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "basis tidak valid" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: host tidak diketahui" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: layanan tidak valid" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: spesifikasi jalur network buruk" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "operasi jaringan tidak dilayani" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: tidak dapat mengubah lokal (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: tidak dapat mengubah local (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: tidak dapat mengubah lokal (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: tidak dapat mengubah lokal (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Anda memiliki surat dalam $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Anda memiliki surat baru dalam $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Surat dalam %s telah dibaca\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "syntax error: membutuhkan ekspresi arithmetic" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "syntax error: `;' tidak terduga" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "syntax error: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: tipe instruksi buruk %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" "dokumen-disini di baris %d dibatasi oleh akhir-dari-berkas (diinginkan `%s')" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: instruksi redireksi `%d' diluar dari jangkauan" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " @@ -1528,228 +1569,238 @@ msgstr "" "shell_getc: shell_input_line_size (%zu) terlampaui SIZE_MAX (%lu): baris " "terpotong" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "gagal menulis: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "jumlah maksimal dokumen disini tercapai" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "EOF tidak terduga ketika mencari untuk pencocokan `%c'" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "EOF tidak terduga ketika mencari untuk `]]'" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "syntax error dalam ekspresi kondisional: tanda `%s' tidak terduga" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "syntax error dalam ekspresi kondisional" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "tanda `%s' tidak terduga, diduga `)'" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "diduga `)'" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "argumen tidak terduga `%s' ke operator kondisional unary" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "argumen tidak terduga untuk operasi unary kondisional" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "tanda `%s' tidak terduga, operator binary kondisional diduga" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "operator binary kondisional diduga" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "argumen `%s' tidak terduga ke operator binary kondisional" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "argumen tidak terduga ke operasi binary kondisional" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "tanda `%c' tidak terduga dalam perintah kondisional" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "tanda `%s' tidak terduga dalam perintah kondisional" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "tanda %d tidak terduga dalam perintah kondisional" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "syntax error didekat tanda `%s' yang tidak terduga" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "syntax error didekat `%s'" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "syntax error: tidak terduga diakhir dari berkas" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "syntax error: tidak terduga diakhir dari berkas" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "syntax error" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Gunakan \"%s\" untuk meninggalkan shell.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "EOF tidak terduga ketika mencari untuk pencocokan ')'" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: fungsi `%s' tidak ditemukan" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: kemungkinan retry loop" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: konektor buruk `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: berkas pendeskripsi tidak valid" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: berkas penunjuk KOSONG" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: '%c': format karakter tidak valid" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "berkas deskripsi diluar dari jangkauan" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: redirect ambigu" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: tidak dapat menulis berkas yang sudah ada" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restricted: tidak dapat meredirect keluaran" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "tidak dapat membuat berkas sementara untuk dokumen disini: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: tidak dapat meng-'assign' fd ke variabel" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port tidak dilayani tanpa jaringan" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "redirection error: tidak dapat menduplikasi fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "tidak dapat menemukan /tmp, tolong buat!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp harus berupa sebuah nama direktori yang valid" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "mode pretty-printing diabaikan dalam shells interactive" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: pilihan tidak valid" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "tidak dapat menset uid ke %d: uid efektif %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "tidak dapat menset gid ke %d: gid efektif %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "tidak dapat menjalankan debugger; mode debugging tidak aktif" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: Direktori" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Aku tidak memiliki nama!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versi %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1758,55 +1809,55 @@ msgstr "" "Penggunaan:\t%s [GNU pilihan panjang] [pilihan] ...\n" "\t%s [GNU pilihan panjang] [pilihan] berkas-script ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU pilihan panjang:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Pilihan shell:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "" "\t-ilrsD atau -c perintah atau -O shopt_option\t\t(hanya pemanggilan)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s atau pilihan -o\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Ketik `%s -c \"help set\"' untuk informasi lebih lanjut mengenai pilihan " "shell.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Ketik `%s -c help' untuk informasi lebih lanjut mengenai perintah builting " "shell.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Gunakan perintah 'bashbug' untuk melaporkan bugs.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bash halaman rumah: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Bantuan umum menggunakan aplikasi GNU: <http:///www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: operasi tidak valid" @@ -1976,96 +2027,100 @@ msgstr "Permintaan informasi" msgid "Unknown Signal #%d" msgstr "Sinyal tidak diketahui #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "substitusi buruk: tidak ada penutupan `%s' dalam %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: tidak dapat meng-assign daftar kedalam anggoya array" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "tidak dapat membuat pipe untuk proses substitusi" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "tidak dapat membuat anak untuk proses substitusi" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "tidak dapat membuka named pipe %s untuk membaca" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "tidak dapat membukan named pipe %s untuk menulis" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "tidak dapat menduplikasi nama pipe %s sebagai fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "substitusi perintah: mengabaikan byte kosong dalam masukan" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: tidak dapat menduplikasikan pipe sebagi fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "tidak dapat membuat pipe untuk perintah substitusi" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "tidak dapat membuat anak untuk perintah substitusi" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: tidak dapat menduplikasikan pipe sebagi fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: nilai dari berkas pendeskripsi penelusur tidak valid" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: ekspansi tidak langsung tidak valid" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "`%s': nama variabel tidak valid" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parameter tidak diset" +msgid "%s: bad substitution" +msgstr "%s: substitusi buruk" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parameter kosong atau tidak diset" +msgid "%s: parameter not set" +msgstr "%s: parameter tidak diset" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: substring expresi < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: substitusi buruk" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: tidak dapat meng-assign dengan cara ini" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2073,68 +2128,68 @@ msgstr "" "versi selanjutnya dari shell akan memaksa evaluasi dari sebuah penggantian " "aritmetika" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "substitusi buruk: tidak ada penutupan \"\" dalam %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "tidak cocok: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argumen diharapkan" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: expresi integer diduga" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "')' diduga" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "`)' diduga, ditemukan %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: operator binary diduga" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: operator unary diduga" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "hilang `]'" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "syntax error: `%s' tidak terduga" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "nomor sinyal tidak valid" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: maximum trap handler level exceeded (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: nilai buruk dalam trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" @@ -2142,95 +2197,103 @@ msgstr "" "run_pending_traps: sinyal handler adalah SIG_DFL, mengirimkan kembali %d " "(%s) kediri sendiri" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: sinyal buruk %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "error mengimpor definisi fungsi untuk `%s'" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "level shell (%d) terlalu tinggi, mereset ke 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "jumlah maksimal dokumen disini tercapai" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: tidak ada context fungsi di scope ini" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: tidak dapat meng-'assign' fd ke variabel" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: memberikan integer ke berkas pendeskripsi penelusur" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: tidak ada context fungsi dalam scope ini" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s memiliki exportstr kosong" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "karakter %d tidak valid dalam exporstr untuk %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "bukan `=' dalam exportstr untuk %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" "pop_var_context: kepala dari shell_variables bukan sebuah fungsi cbntext" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: bukan global_variable context" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" "pop_scope: kepala dari shell_variables bukan sebuah scope lingkungan " "sementara" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: tidak dapat membuka sebagai BERKAS" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: nilai dari berkas pendeskripsi penelusur tidak valid" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: diluar jangkauan" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Hak Cipta (C) 2020 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2238,37 +2301,37 @@ msgstr "" "Lisensi GPLv3+: GNU GPL versi 3 atau sesudahnya <http://gnu.org/licenses/gpl." "html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versi %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "" "Ini adalah perangkat lunak bebas; anda bebas untuk mengubah dan " "mendistribusikannya." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "TIDAK ADA GARANSI, selama masih diijinkan oleh hukum yang berlaku." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: tidak dapat mengalokasikan %lu bytes (%lu bytes teralokasi)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: tidak dapat mengalokasikan %lu bytes" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: tidak dapat mengalokasikan %lu bytes (%lu bytes teralokasi)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s: %d: tidak dapat teralokasi %lu bytes" @@ -2307,7 +2370,8 @@ msgid "caller [expr]" msgstr "pemanggil [expr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [direktori]" #: builtins.c:68 @@ -2418,8 +2482,9 @@ msgid "let arg [arg ...]" msgstr "biarkan arg [argumen ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a array] [-d pembatas] [-i text] [-n nchars] [-N nchars] [-p " @@ -2471,7 +2536,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] spesifikasi sinyal ...]" #: builtins.c:168 @@ -2496,26 +2562,30 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAMA [in WORDS ...] ; do PERINTAH; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do PERINTAH; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAMA [ in WORDS ... ;] do PERINTAH; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case WORD in [POLA [| POLA]...) PERINTAH ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2523,65 +2593,65 @@ msgstr "" "if PERINTAH; then PERINTAH; [ elif PERINTAH; then PERINTAH; ]... [ else " "PERINTAH; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while PERINTAH; do PERINTAH; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until PERINTAH; do PERINTAH; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAMA] perintah [redireksi]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function name { PERINTAH; } atau name () { PERINTAH ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ PERINTAH ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expressi ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expressi ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variabel - Nama dan arti dari beberapa shell variabel" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [optname ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [argumen]" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " @@ -2591,19 +2661,21 @@ msgstr "" "[-W daftar kata] [-F fungsi] [-C perintah] [-X filterpat] [-P prefix] [-S " "suffix] [name ...]" -#: builtins.c:235 +#: builtins.c:237 +#, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o pilihan] [-A aksi] [-G globpat] [-W wordlist] [-" "F fungsi] [-C perintah] [-X filterpat] [-P prefix] [-S suffix] [word]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o pilihan] [-DEI] [nama ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2611,7 +2683,7 @@ msgstr "" "mapfile [-d pembatas] [-n jumlah] [-O asal] [-s jumlah] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2619,7 +2691,7 @@ msgstr "" "readarray [-d pembatas] [-n jumlah] [-O asal] [-s jumlah] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" -#: builtins.c:256 +#: builtins.c:258 #, fuzzy msgid "" "Define or display aliases.\n" @@ -2659,7 +2731,7 @@ msgstr "" "ada alias yang\n" " terdefinisi." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2675,7 +2747,7 @@ msgstr "" " \n" " Mengembalikan sukses kecuali sebuah NAMA bukan alias yang sudah ada." -#: builtins.c:291 +#: builtins.c:293 #, fuzzy msgid "" "Set Readline key bindings and variables.\n" @@ -2760,7 +2832,7 @@ msgstr "" " bind memberikan kembalian 0 kecuali sebuah pilihan tidak dikenal " "diberikan atau sebuah error terjadi." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2779,7 +2851,7 @@ msgstr "" " Status Keluar:\n" " Status keluar adalah 0 kecuali N tidak lebih besar atau sama dengan 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2798,7 +2870,7 @@ msgstr "" " Status Keluar:\n" " Status keluar adalah 0 kecuali N tidak lebih besar atau sama dengan 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2825,7 +2897,7 @@ msgstr "" "BUILTIN adalah\n" " bukan sebuah shell builtin." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2854,14 +2926,14 @@ msgstr "" "shell atau EXPR\n" " tidak valid." -#: builtins.c:387 +#: builtins.c:389 #, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2927,7 +2999,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan 0 jika direktori berubah; bukan nol jika tidak." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2957,7 +3029,7 @@ msgstr "" "direktori sekarang\n" " tidak bisa dibaca." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2973,7 +3045,7 @@ msgstr "" " Status Keluar:\n" " Selalu sukses." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2985,7 +3057,7 @@ msgstr "" " Status Keluar:\n" " Selalu sukses." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2997,7 +3069,7 @@ msgstr "" " Status Keluar:\n" " Selalu gagal." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3035,7 +3107,7 @@ msgstr "" " Mengembalikan status keluar dari PERINTAH, atau gagal jika PERINTAH " "tidak ditemukan." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3064,7 +3136,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3111,7 +3184,7 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " "sebuah error terjadi." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3121,7 +3194,7 @@ msgstr "" " \n" " Sama dengan `declare'. Lihat `help declare'." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3149,7 +3222,7 @@ msgstr "" "sebuah error terjadi.\n" " atau shell tidak menjalankan sebuah fungsi." -#: builtins.c:557 +#: builtins.c:560 #, fuzzy msgid "" "Write arguments to the standard output.\n" @@ -3217,7 +3290,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan sukses kecuali sebuah penulisan error terjadi." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3239,7 +3312,8 @@ msgstr "" " Status Keluar:\n" " Mengembalikan sukses kecuali sebuah penulisan error terjadi." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3259,6 +3333,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3295,7 +3375,7 @@ msgstr "" " Mengembalikan sukses kecuali NAMA bukan sebuah shell builtin atau sebuah " "error terjadi." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3316,7 +3396,7 @@ msgstr "" " Mengembalikan status keluar dari perintah atau sukses jika perintah " "adalah kosong." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy msgid "" "Parse option arguments.\n" @@ -3403,7 +3483,7 @@ msgstr "" "dari pilihan\n" " ditemui atau sebuah error terjadi." -#: builtins.c:694 +#: builtins.c:702 #, fuzzy msgid "" "Replace the shell with the given command.\n" @@ -3447,7 +3527,7 @@ msgstr "" " Mengembalikan sukses kecuali PERINTAH tidak ditemukan atau sebuah " "redireksi error terjadi." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3460,7 +3540,7 @@ msgstr "" "keluaran\n" " adalah status dari perintah terakhir yang dijalankan." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3474,7 +3554,8 @@ msgstr "" "error jika tidak dijalankan\n" " dalam sebuah login shell." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3499,6 +3580,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3533,7 +3616,7 @@ msgstr "" " Mengembalikan sukses atau status dari perintah yang dijalankan; tidak-" "nol jika sebuah error terjadi." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3554,7 +3637,7 @@ msgstr "" " Status dari perintah yang ditempatkan di foreground, atau gagal jika " "sebuah error terjadi." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3578,7 +3661,7 @@ msgstr "" " Mengembalikan sukses kecuali pengontrol pekerjaan tidak aktif atau " "sebuah error terjadi." -#: builtins.c:793 +#: builtins.c:803 #, fuzzy msgid "" "Remember or display program locations.\n" @@ -3625,7 +3708,7 @@ msgstr "" " Mengembalikan sukses kecuali NAMA tidak ditemukan atau sebuah pilihan " "tidak valid telah diberikan." -#: builtins.c:818 +#: builtins.c:828 #, fuzzy msgid "" "Display information about builtin commands.\n" @@ -3667,7 +3750,7 @@ msgstr "" " Mengembalikan sukses kecuali POLA tidak ditemukan atau pilihan tidak " "valid diberikan." -#: builtins.c:842 +#: builtins.c:852 #, fuzzy msgid "" "Display or manipulate the history list.\n" @@ -3692,7 +3775,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3744,7 +3831,7 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " "sebuah error terjadi." -#: builtins.c:879 +#: builtins.c:893 #, fuzzy msgid "" "Display status of jobs.\n" @@ -3793,7 +3880,7 @@ msgstr "" "sebuah error terjadi.\n" " Jika -x digunakan, mengembalikan status keluar dari PERINTAH." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3825,7 +3912,7 @@ msgstr "" " Mengembalikan sukses kecuali ada sebuah pilihan tidak valid atau JOBSPEC " "diberikan." -#: builtins.c:925 +#: builtins.c:939 #, fuzzy msgid "" "Send a signal to a job.\n" @@ -3870,7 +3957,7 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " "sebuah error terjadi." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3958,7 +4045,7 @@ msgstr "" " Jika ARG terakhir dievaluasi ke 0, membiarkan kembali ke 1; 0 " "dikembalikan Jika tidak." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -3983,6 +4070,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -4063,7 +4152,7 @@ msgstr "" " atau sebuah berkas deskripsi disupply sebagai sebuah argumen ke pilihan -" "u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4085,7 +4174,7 @@ msgstr "" " Mengembalikan N, atau gagal jika shell tidak menjalan sebuah fungsi atau " "script." -#: builtins.c:1055 +#: builtins.c:1071 #, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" @@ -4162,6 +4251,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4262,7 +4355,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan." -#: builtins.c:1140 +#: builtins.c:1160 #, fuzzy msgid "" "Unset values and attributes of shell variables and functions.\n" @@ -4302,7 +4395,7 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " "sebuah NAMA adalah baca-saja." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4337,7 +4430,7 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " "NAMA tidak valid." -#: builtins.c:1181 +#: builtins.c:1201 #, fuzzy msgid "" "Mark shell variables as unchangeable.\n" @@ -4378,7 +4471,7 @@ msgstr "" " Mengembalikan sukses kecual sebuah pilihan tidak valid diberikan atau " "NAMA tidak valid." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4396,7 +4489,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan sukses kecuali N adalah negatif atau lebih besar dari $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4422,15 +4515,18 @@ msgstr "" "BERKAS; gagal jika\n" " NAMA BERKAS tidak dapat dibaca." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4448,7 +4544,7 @@ msgstr "" " Mengembalikan sukses kecuali pengontrol pekerjaan tidak aktif atau " "sebuah error terjadi." -#: builtins.c:1262 +#: builtins.c:1284 #, fuzzy msgid "" "Evaluate conditional expression.\n" @@ -4615,7 +4711,7 @@ msgstr "" "EXPR mengevaluasi ke\n" " salah atau sebuah argumen tidak valid diberikan." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4627,7 +4723,7 @@ msgstr "" " Ini sinonim untuk \"test\" builtin, tetapi argumen terakhir\n" " harus berupa sebuah literal `]', untuk mencocokan dengan pembukaan `['." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4647,7 +4743,8 @@ msgstr "" " Status Keluar:\n" " Selalu sukses." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy msgid "" "Trap signals and other events.\n" " \n" @@ -4655,31 +4752,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4728,7 +4830,7 @@ msgstr "" " Mengembalikan sukses kecuali sebuah SIGSPEC adalah tidak valid atau " "sebuah pilihan tidak valid diberikan." -#: builtins.c:1401 +#: builtins.c:1430 #, fuzzy msgid "" "Display information about command type.\n" @@ -4791,7 +4893,7 @@ msgstr "" " Mengembalikan sukses jika seluruh dari NAMA ditemukan; gagal jika ada " "yang tidak ditemukan." -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy msgid "" "Modify shell resource limits.\n" @@ -4834,9 +4936,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4886,7 +4989,7 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " "sebuah error terjadi." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4924,7 +5027,7 @@ msgstr "" " Mengembalikan sukses kecuali MODE tidak valid atau sebuah pilihan tidak " "valid diberikan." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" @@ -4972,7 +5075,7 @@ msgstr "" "pilihan tidak\n" " valid diberikan." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -4998,7 +5101,16 @@ msgstr "" "pilihan tidak valid\n" " diberikan." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -5022,7 +5134,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan status dari perintah terakhir yang dijalankan." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -5052,7 +5164,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan status dari perintah terakhir yang dijalankan." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5075,8 +5187,8 @@ msgstr "" " \n" " WORDS diexpand, menghasilkan daftar dari kata.\n" " set dari kata yang diexpand ditampilkan dalam standar error, setiap\n" -" keluaran diawali dengan sebuah nomor. Jika `in WORDS' tidak ada, `in \"$@" -"\"'\n" +" keluaran diawali dengan sebuah nomor. Jika `in WORDS' tidak ada, `in " +"\"$@\"'\n" " diasumsikan. Kemudian PS3 prompt ditampilkan dan sebuah baris dibaca\n" " dari standar masukan. Jika baris berisi dari nomor yang\n" " berhubungan dengan salah sata kata yang ditampilkan, maka NAMA diset\n" @@ -5089,7 +5201,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan status dari perintah terakhir yang dijalankan." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5117,7 +5229,7 @@ msgstr "" " Status Keluar:\n" " Status kembali adalah status kembali dari PIPELINE." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5135,7 +5247,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan setatus dari perintah terakhir yang dijalankan." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5173,7 +5285,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan status dari perintah terakhir yang dijalankan." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5193,7 +5305,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan status dari perintah terakhir yang dijalankan." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5212,7 +5324,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan status dari perintah terakhir yang dijalankan." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5235,7 +5347,7 @@ msgstr "" " Status Keluar:\n" " Perintah coproc mengembalikan status keluar 0." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5260,7 +5372,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan sukses kecuali NAMA adalah baca-saja." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5279,7 +5391,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan status dari perintah terakhir yang dieksekusi." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5306,7 +5418,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan status dari pekerjaan yang dilanjutkan." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5324,7 +5436,7 @@ msgstr "" " Status Keluar:\n" " Mengembalikan 1 jika EXPRESI dievaluasi ke 0; mengembalikan 0 jika tidak." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5381,7 +5493,7 @@ msgstr "" " Status Keluar:\n" " 0 atau 1 tergantun dari nilai dari EKSPRESI." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5495,7 +5607,7 @@ msgstr "" "digunakan untuk menentukan dimana\n" " \t\tperintah seharusnya disimpan dalam daftar sejarah.\n" -#: builtins.c:1822 +#: builtins.c:1862 #, fuzzy msgid "" "Add directories to stack.\n" @@ -5556,7 +5668,7 @@ msgstr "" "atau pemindahan\n" " direktori gagal." -#: builtins.c:1856 +#: builtins.c:1896 #, fuzzy msgid "" "Remove directories from stack.\n" @@ -5612,7 +5724,7 @@ msgstr "" "atau pemindahan\n" " direktori gagal." -#: builtins.c:1886 +#: builtins.c:1926 #, fuzzy msgid "" "Display directory stack.\n" @@ -5669,7 +5781,7 @@ msgstr "" " Mengembalikan sukses kecuali ada sebuah pilihan tidak valid diberikan " "atau sebuah error terjadi." -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy msgid "" "Set and unset shell options.\n" @@ -5708,7 +5820,7 @@ msgstr "" "tidak valid diberikan\n" " atau OPTNAME dinonaktifkan." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5726,9 +5838,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5775,16 +5887,16 @@ msgstr "" "sebuah penulisan atau penempatan\n" " error terjadi." -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5833,14 +5945,19 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " "sebuah error terjadi." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5856,7 +5973,7 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " "sebuah error terjadi." -#: builtins.c:2019 +#: builtins.c:2062 #, fuzzy msgid "" "Modify or display completion options.\n" @@ -5920,7 +6037,7 @@ msgstr "" "NAMA tidak memiliki\n" " spesifikasi penyelesaian yang terdefinisi." -#: builtins.c:2050 +#: builtins.c:2093 #, fuzzy msgid "" "Read lines from the standard input into an indexed array variable.\n" @@ -5998,7 +6115,7 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " "ARRAY adalah baca-saja." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -6008,6 +6125,37 @@ msgstr "" " \n" " Sebuah sinonim untuk `mapfile'." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Mengembalikan context dari panggilan subroutine saat ini.\n" +#~ " \n" +#~ " Tanpa EXPR, mengembalikan \"$line $filename\". Dengan EXPR,\n" +#~ " mengembalikan \"$line $subroutine $filename\"; informasi extra ini\n" +#~ " dapat digunakan untuk menyediakan jejak stack.\n" +#~ " \n" +#~ " Nilai dari EXPR mengindikasikan bagaimana banyak panggilan frames " +#~ "kembali sebelum\n" +#~ " yang ada; Top frame adalah frame 0. \n" +#~ " Status Keluar:\n" +#~ " Mengembalikan 0 kecuali shell sedang tidak menjalankan sebuah fungsi " +#~ "shell atau EXPR\n" +#~ " tidak valid." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "peringatan: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: kunci array assosiasi tidak valid" diff --git a/po/it.gmo b/po/it.gmo index f23813b05ee1d7a26928f8941d0cca9d72a56891..ceda85a7fccf47da8d630998df56aad2c2f525d1 100644 GIT binary patch delta 10096 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 delta 18566 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 GqxnC22^LHM diff --git a/po/it.po b/po/it.po index ec0ebc4cc..df7da067c 100644 --- a/po/it.po +++ b/po/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-4.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2011-10-17 09:14+0200\n" "Last-Translator: Sergio Zanchetta <primes2h@ubuntu.com>\n" "Language-Team: Italian <tp@lists.linux.it>\n" @@ -18,125 +18,125 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural= (n != 1)\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "indice dell'array errato" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: impossibile convertire un array indicizzato in uno associativo" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: impossibile assegnare a un indice non numerico" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "" "%s: %s: deve essere usato un indice nell'assegnazione di un array associativo" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: impossibile creare: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "bash_execute_unix_command: impossibile trovare una mappatura per il comando" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: il primo carattere non spazio non è \"\"\"" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "carattere di chiusura \"%c\" non presente in %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: separatore di tipo due punti mancante" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "\"%s\": impossibile eliminare l'associazione" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "\"%s\": nome alias non valido" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "modifica delle righe non abilitata" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "\"%s\": nome della mappatura non valido" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: impossibile leggere: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "\"%s\" nome della funzione sconosciuto" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s non è associato ad alcun tasto.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s può essere invocato tramite " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "\"%s\": impossibile eliminare l'associazione" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "numero di cicli" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "significativo solo in un ciclo \"for\", \"while\" o \"until\"" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -146,7 +146,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Restituisce il contesto della chiamata alla subroutine corrente.\n" " \n" @@ -164,350 +168,360 @@ msgstr "" "che l'ESPR\n" " non sia valida." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME non impostata" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "troppi argomenti" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "nessun'altra directory" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD non impostata" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "riga %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "attenzione: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: uso: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: l'opzione richiede un argomento" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: è necessario un argomento numerico" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: non trovata" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: opzione non valida" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: nome dell'opzione non valido" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "\"%s\": non è un identificatore valido" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "numero ottale non valido" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "numero esadecimale non valido" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "numero non valido" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: specifica di segnale non valida" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "\"%s\": non è un pid o un numero di job valido" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: variabile in sola lettura" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: impossibile azzerare" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s fuori dall'intervallo" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argomento" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s fuori dall'intervallo" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: job inesistente" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: nessun controllo dei job" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "nessun controllo dei job" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: limitato" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "limitato" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: non è un comando interno di shell" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "errore in scrittura: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "errore nell'impostazione degli attributi del terminale: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "errore nel recupero degli attributi del terminale: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: errore nel recupero della directory corrente: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: specifica di job ambigua" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: non è un array indicizzato" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: impossibile azzerare: %s in sola lettura" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: impossibile azzerare" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nome azione non valido" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: nessun completamento specificato" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "attenzione: l'opzione -F potrebbe non funzionare come previsto" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "attenzione: l'opzione -C potrebbe non funzionare come previsto" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "funzione di completamento attualmente non in esecuzione" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "può essere usato solo in una funzione" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "impossibile usare \"-f\" per creare funzioni" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: funzione in sola lettura" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, fuzzy, c-format msgid "`%s': invalid variable name for name reference" msgstr "\"%s\": nome alias non valido" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: impossibile eliminare variabili array in questo modo" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: impossibile convertire un array associativo in uno indicizzato" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "caricamento dinamico non disponibile" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "impossibile aprire l'oggetto condiviso %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "impossibile trovare %s nell'oggetto condiviso %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: non caricato dinamicamente" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: non caricato dinamicamente" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: impossibile eliminare: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: è una directory" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: non è un file regolare" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: file troppo grande" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: impossibile eseguire il file binario" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: impossibile eseguire: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "logout\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "non è una shell di login: utilizzare \"exit\"" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Sono presenti job interrotti.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Ci sono job in esecuzione.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "nessun comando trovato" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "specifica della cronologia" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: impossibile aprire il file temp: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "attuale" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "job %d avviato senza controllo dei job" @@ -522,11 +536,11 @@ msgstr "%s: opzione illecita -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: l'opzione richiede un argomento -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashing disabilitato" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s tabella di hash vuota\n" @@ -556,12 +570,12 @@ msgstr "" "nessun argomento della guida corrisponde a \"%s\". Provare \"help help\" o " "\"man -k %s\" o \"info %s\"." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: impossibile aprire: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -582,21 +596,31 @@ msgstr "" "Un asterisco (*) vicino a un nome significa che il comando è disabilitato.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "impossibile usare più di uno tra -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "posizione nella cronologia" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "nome della variabile array vuoto" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parametro nullo o non impostato" + +#: builtins/history.def:349 #, fuzzy, c-format msgid "%s: invalid timestamp" msgstr "%s: nome dell'opzione non valido" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: espansione della cronologia non riuscita" @@ -610,113 +634,113 @@ msgstr "%s: inlib non riuscito" msgid "no other options allowed with `-x'" msgstr "nessuna altra opzione permessa con \"-x\"" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: gli argomenti devono essere ID di processo o di job" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Errore sconosciuto" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "attesa espressione" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: non è un array indicizzato" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: specifica di descrittore di file non valida" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: descrittore di file non valido: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: numero di righe non valido" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: origine dell'array non valida" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: quantum di callback non valido" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "nome della variabile array vuoto" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "necessario il supporto alla variabile array" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "\"%s\": manca il carattere di formato" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "\"%c\": specifica di formato dell'orario non valida" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "\"%c\": carattere di formato non valido" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "attenzione: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "cifra esadecimale mancante in \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "cifra unicode mancante in \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "nessun'altra directory" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, fuzzy, c-format msgid "%s: invalid argument" msgstr "%s: argomento di limite non valido" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<nessuna directory corrente>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "stack delle directory vuoto" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "indice dello stack delle directory" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -759,7 +783,7 @@ msgstr "" " -N\tVisualizza l'N-sima voce contando a partire da destra dell'elenco\n" "\tmostrato da dirs quando invocato senza opzioni, iniziando da zero." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -805,7 +829,7 @@ msgstr "" " \n" " Il comando interno \"dirs\" visualizza lo stack delle directory." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -843,321 +867,332 @@ msgstr "" " \n" " Il comando interno \"dirs\" visualizza lo stack delle directory." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: specifica di timeout non valida" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "errore in lettura: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "" "è possibile eseguire \"return\" solo da una funzione o da uno script chiamato" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "impossibile azzerare contemporaneamente una funzione e una variabile" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: non è una variabile array" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: non è una funzione" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, fuzzy, c-format msgid "%s: cannot export" msgstr "%s: impossibile azzerare" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "numero di scorrimenti" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "impossibile impostare e azzerare opzioni di shell contemporaneamente" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: nome dell'opzione di shell non valido" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "necessario un nome file come argomento" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: file non trovato" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "impossibile sospendere" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "impossibile sospendere una shell di login" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s ha \"%s\" come alias\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s è una parola chiave di shell\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s è una funzione\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, fuzzy, c-format msgid "%s is a special shell builtin\n" msgstr "%s è un comando interno di shell\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s è una funzione\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s è un comando interno di shell\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s è %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "hash effettuato su %s (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: argomento di limite non valido" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "\"%c\": comando errato" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: impossibile recuperare il limite: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limite" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: impossibile modificare il limite: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "numero ottale" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "\"%c\": operatore di modo simbolico non valido" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "\"%c\": carattere di modo simbolico non valido" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " riga " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "ultimo comando: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Interruzione..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "attenzione: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "errore di comando sconosciuto" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "tipo di comando errato" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "connettore errato" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "salto errato" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: variabile non assegnata" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\atempo di attesa scaduto per l'input: auto-logout\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "impossibile redirigere lo standard input da /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: \"%c\": carattere di formato non valido" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "errore della pipe" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: limitato: impossibile specificare \"/\" nei nomi dei comandi" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: comando non trovato" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: interprete errato" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: impossibile eseguire il file binario" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: interprete errato" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, fuzzy, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: impossibile eseguire il file binario" -#: execute_cmd.c:6123 -#, fuzzy, c-format -msgid "`%s': is a special builtin" -msgstr "%s è un comando interno di shell\n" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "impossibile duplicare fd %d su fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "superato il livello di ricorsione dell'espressione" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "underflow dello stack di ricorsione" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "errore di sintassi nell'espressione" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "tentata un'assegnazione a una non variabile" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "errore di sintassi nell'espressione" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "divisione per 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bug: token di expassign errato" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "atteso \":\" per l'espressione condizionale" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "esponente minore di 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "atteso identificatore dopo un pre-incremento o un pre-decremento" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "\")\" mancante" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "errore di sintassi: atteso un operando" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "errore di sintassi: operatore aritmetico non valido" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (il token dell'errore è \"%s\")" @@ -1175,7 +1210,7 @@ msgstr "%s: numero di righe non valido" msgid "value too great for base" msgstr "valore troppo grande per la base" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: errore di espressione\n" @@ -1184,48 +1219,53 @@ msgstr "%s: errore di espressione\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: impossibile accedere alle directory padre" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, fuzzy, c-format +msgid "`%s': is a special builtin" +msgstr "%s è un comando interno di shell\n" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "impossibile reimpostare il modo nodelay per fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" "impossibile allocare un nuovo descrittore di file per l'input della bash da " "fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: buffer già esistente per il nuovo fd %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pipe pgrp" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "il pid %d del fork appare nel job in esecuzione %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "eliminazione del job %d interrotto con il gruppo di processi %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) segnato come ancora in vita" @@ -1235,138 +1275,138 @@ msgstr "add_process: pid %5ld (%s) segnato come ancora in vita" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: pid inesistente" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Segnale %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Completato" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Fermato" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Fermato(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "In esecuzione" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Eseguito(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Uscita %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Stato sconosciuto" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(core dump creato) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (dir: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid del figlio (%ld a %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: il pid %ld non è un figlio di questa shell" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: nessun record del processo %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: il job %d è fermo" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: job inesistente" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: il job è terminato" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: il job %d è già in background" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: attivato WNOHANG per evitare blocchi indefiniti" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: riga %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (core dump creato)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(dir ora: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp non riuscita" -#: jobs.c:4434 +#: jobs.c:4486 #, fuzzy msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: disciplina di linea" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: disciplina di linea" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "impossibile impostare il gruppo di processi del terminale (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "nessun controllo dei job in questa shell" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: asserzione non riuscita: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1375,384 +1415,394 @@ msgstr "" "\r\n" "malloc: %s:%d: asserzione non riuscita\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "sconosciuto" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: blocco eliminato nell'elenco dei disponibili" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: chiamata con un argomento di blocco già liberato" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: chiamata con un argomento di blocco non allocato" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: riscontrato un underflow; mh_nbytes fuori intervallo" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: riscontrato un underflow; mh_nbytes fuori intervallo" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: dimensioni diverse dei blocchi di inizio e di fine" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: chiamata con un argomento di blocco non allocato" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: riscontrato un underflow; mh_nbytes fuori intervallo" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: riscontrato un underflow; mh_nbytes fuori intervallo" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: dimensioni diverse dei blocchi di inizio e di fine" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "" "register_alloc: forse la tavola di allocazione è piena con FIND_ALLOC\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: forse %p è già come allocato nella tabella\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_alloc: forse %p è già come libero nella tabella\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "base non valida" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: host sconosciuto" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: servizio non valido" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: specifica del percorso di rete errata" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "operazione di rete non supportata" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: impossibile cambiare la localizzazione (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: impossibile cambiare la localizzazione (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: impossibile cambiare la localizzazione (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: impossibile cambiare la localizzazione (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "È presente della posta in $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "È presente della nuova posta in $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "La posta in %s è stata letta\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "errore di sintassi: richiesta espressione aritmetica" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "errore di sintassi: \";\" non atteso" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "errore di sintassi: \"((%s))\"" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: tipo di istruzione errata %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" "here-document alla riga %d è delimitato da un EOF (era richiesto \"%s\")" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "" "make_redirection: istruzione di reindirizzamento \"%d\" fuori dell'intervallo" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "errore in scrittura: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "EOF non atteso durante la ricerca di \"%c\"" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "EOF non atteso durante la ricerca di \"]]\"" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "" "errore di sintassi nell'espressione condizionale: token non atteso \"%s\"" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "errore di sintassi nell'espressione condizionale" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "token non atteso \"%s\", era atteso \")\"" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "atteso \")\"" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "argomento non atteso \"%s\" per l'operatore unario condizionale" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "argomento non atteso per l'operatore unario condizionale" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "token non atteso \"%s\", era atteso un operatore binario condizionale" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "atteso operatore binario condizionale" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "argomento non atteso \"%s\" per l'operatore binario condizionale" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "argomento non atteso per l'operatore binario condizionale" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "token non atteso \"%c\" nel comando condizionale" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "token non atteso \"%s\" nel comando condizionale" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "token non atteso %d nel comando condizionale" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "errore di sintassi vicino al token non atteso \"%s\"" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "errore di sintassi vicino a \"%s\"" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "errore di sintassi: EOF non atteso" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "errore di sintassi: EOF non atteso" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "errore di sintassi" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Usare \"%s\" per uscire dalla shell.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "EOF non atteso durante la ricerca di \")\"" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: funzione \"%s\" non trovata" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: COMPSPEC NULL" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: connettore errato \"%d\"" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: descrittore di file non valido" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: puntatore a file NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != numfile xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: \"%c\": carattere di formato non valido" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "descrittore di file fuori dell'intervallo" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: redirezione ambigua" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: impossibile sovrascrivere il file esistente" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: limitato: impossibile redirigere l'output" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "impossibile creare un file temporaneo per here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: impossibile assegnare fd a una variabile" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port non supportata senza rete" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "errore di reindirizzamento: impossibile duplicare fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "impossibile trovare /tmp, è necessario crearla" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp deve essere un nome di directory valido" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: opzione non valida" -#: shell.c:1343 +#: shell.c:1355 #, fuzzy, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "impossibile reimpostare il modo nodelay per fd %d" -#: shell.c:1354 +#: shell.c:1371 #, fuzzy, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "impossibile reimpostare il modo nodelay per fd %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, fuzzy, c-format msgid "%s: Is a directory" msgstr "%s: è una directory" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Manca il nome" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versione %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1761,54 +1811,54 @@ msgstr "" "Uso:\t%s [opzione lunga GNU] [opzione] ...\n" "\t%s [opzione lunga GNU] [opzione] file-script ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Opzioni lunghe GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Opzioni di shell:\n" -#: shell.c:2069 +#: shell.c:2061 #, fuzzy msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD o -c comando o -O opzione_shopt\t\t(solo invocazione)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\topzione -%s oppure -o\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Digitare «%s -c \"help set\"» per ulteriori informazioni sulle opzioni di " "shell.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Digitare \"%s -c help\" per ulteriori informazioni sui comandi interni di " "shell.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Usare il comando \"bashbug\" per segnalare i bug.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: operazione non valida" @@ -1978,97 +2028,101 @@ msgstr "Richiesta di informazioni" msgid "Unknown Signal #%d" msgstr "Segnale sconosciuto n° %d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "sostituzione errata: nessuna chiusura di \"%s\" in %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: impossibile assegnare una lista a un membro di un array" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "impossibile creare una pipe per la sostituzione del processo" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "impossibile creare un figlio per la sostituzione del processo" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "impossibile aprire la pipe con nome %s in lettura" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "impossibile aprire la pipe con nome %s in scrittura" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "impossibile duplicare una pipe con nome %s come fd %d" -#: subst.c:6370 +#: subst.c:6761 #, fuzzy msgid "command substitution: ignored null byte in input" msgstr "sostituzione errata: manca «\"» di chiusura in %s" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: impossibile duplicare la pipe come fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "impossibile creare una pipe per la sostituzione del comando" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "impossibile creare un figlio per la sostituzione del comando" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: impossibile duplicare la pipe come fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, fuzzy, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: %s: valore non valido per il descrittore del file di traccia" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, fuzzy, c-format msgid "%s: invalid indirect expansion" msgstr "%s: numero di righe non valido" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, fuzzy, c-format msgid "%s: invalid variable name" msgstr "\"%s\": nome alias non valido" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: sostituzione errata" + +#: subst.c:8231 #, fuzzy, c-format msgid "%s: parameter not set" msgstr "%s: parametro nullo o non impostato" -#: subst.c:7480 -#, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parametro nullo o non impostato" - -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: expressione di sottostringa < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: sostituzione errata" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: impossibile assegnare in questo modo" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2076,68 +2130,68 @@ msgstr "" "le versioni future della shell forzeranno la valutazione come fosse una " "sostituzione aritmetica" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "sostituzione errata: manca «\"» di chiusura in %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "nessuna corrispondenza: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "atteso argomento" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: attesa espressione intera" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "atteso \")\"" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "atteso \")\", trovato %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: atteso operatore binario" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: atteso operatore unario" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "\"]\" mancante" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "errore di sintassi: \";\" non atteso" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "numero di segnale non valido" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: valore errato in trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" @@ -2145,96 +2199,104 @@ msgstr "" "run_pending_traps: il gestore dei segnali è SIG_DFL, viene inviato " "nuovamente %d (%s)" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: segnale errato %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "errore nell'importazione della definizione di funzione per \"%s\"" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "livello di shell (%d) troppo alto, reimpostato a 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: nessun contesto di funzione nell'ambito corrente" -#: variables.c:2661 +#: variables.c:2659 #, fuzzy, c-format msgid "%s: variable may not be assigned value" msgstr "%s: impossibile assegnare fd a una variabile" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: nessun contesto di funzione nell'ambito corrente" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s ha exportstr null" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "carattere non valido %d in exportstr per %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "nessun \"=\" in exportstr per %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" "pop_var_context: la prima parte di shell_variables non è un contesto di " "funzione" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: nessun contesto global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" "pop_scope: la prima parte di shell_variables non è un ambito temporaneo " "d'ambiente" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: impossibile aprire come FILE" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: valore non valido per il descrittore del file di traccia" -#: variables.c:6450 +#: variables.c:6453 #, fuzzy, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s fuori dall'intervallo" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright © 2009 Free Software Foundation, Inc.\n" -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2242,37 +2304,37 @@ msgstr "" "Licenza GPLv3+: GNU GPL versione 3 o successiva <http://gnu.org/licenses/gpl." "html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versione %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 #, fuzzy msgid "This is free software; you are free to change and redistribute it." msgstr "Questo è software libero; è possibile modificarlo e ridistribuirlo.\n" -#: version.c:92 version2.c:92 +#: version.c:91 #, fuzzy msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Non c'è ALCUNA GARANZIA, nei limiti permessi dalla legge.\n" -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: impossibile allocare %lu byte (%lu byte allocati)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: impossibile allocare %lu byte" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: impossibile allocare %lu byte (%lu byte allocati)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: impossibile allocare %lu byte" @@ -2313,7 +2375,7 @@ msgstr "caller [espr]" #: builtins.c:66 #, fuzzy -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]]] [dir]" #: builtins.c:68 @@ -2426,8 +2488,9 @@ msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a array] [-d delim] [-i testo] [-n ncaratt] [-N ncaratt] [-p " @@ -2480,7 +2543,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] spec_segnale ...]" #: builtins.c:168 @@ -2507,26 +2571,30 @@ msgid "wait [pid ...]" msgstr "wait [pid]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NOME [in PAROLE ... ] ; do COMANDI; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( espr1; espr2; espr3 )); do COMANDI; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NOME [in PAROLE ... ;] do COMANDI; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case PAROLA in [MODELLO [| MODELLO]...) COMANDI ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2534,65 +2602,65 @@ msgstr "" "if COMANDI; then COMANDI; [ elif COMANDI; then COMANDI; ]... [ else " "COMANDI; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while COMANDI; do COMANDI; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until COMANDI; do COMANDI; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NOME] comando [redirezioni]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function name { COMANDI ; } oppure name () { COMANDI ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ COMANDI ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "spec_job [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( espressione ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ espressione ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variabili - nomi e significati di alcune variabili di shell" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [nomeopz ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] formato [argomenti]" -#: builtins.c:231 +#: builtins.c:233 #, fuzzy msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" @@ -2603,22 +2671,23 @@ msgstr "" "W elencoparole] [-F funzione] [-C comando] [-X modfiltro] [-P prefisso] [-S " "suffisso] [nome ...]" -#: builtins.c:235 +#: builtins.c:237 #, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o opzione] [-A azione] [-G modglob] [-W " "elencoparole] [-F funzione] [-C comando] [-X modfiltro] [-P prefisso] [-S " "suffisso] [parola]" -#: builtins.c:239 +#: builtins.c:241 #, fuzzy msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o opzione] [-DE] [nome ...]" -#: builtins.c:242 +#: builtins.c:244 #, fuzzy msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2627,7 +2696,7 @@ msgstr "" "mapfile [-n numero] [-O origine] [-s numero] [-t] [-u fd] [-C callback] [-c " "quantità] [array]" -#: builtins.c:244 +#: builtins.c:246 #, fuzzy msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2636,7 +2705,7 @@ msgstr "" "readarray [-n numero] [-O origine] [-s numero] [-t] [-u fd] [-C callback] [-" "c quantità] [array]" -#: builtins.c:256 +#: builtins.c:258 #, fuzzy msgid "" "Define or display aliases.\n" @@ -2675,7 +2744,7 @@ msgstr "" "quale\n" " non sia stato definito alcun alias." -#: builtins.c:278 +#: builtins.c:280 #, fuzzy msgid "" "Remove each NAME from the list of defined aliases.\n" @@ -2692,7 +2761,7 @@ msgstr "" " \n" " Restituisce successo a meno che NOME non sia un alias esistente." -#: builtins.c:291 +#: builtins.c:293 #, fuzzy msgid "" "Set Readline key bindings and variables.\n" @@ -2779,7 +2848,7 @@ msgstr "" " bind restituisce 0 a meno che non sia fornita una opzione non " "riconosciuta o si riscontri un errore." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2798,7 +2867,7 @@ msgstr "" " Stato di uscita:\n" " Lo stato di uscita è 0 a meno che N non sia maggiore o uguale a 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2816,7 +2885,7 @@ msgstr "" " Stato di uscita:\n" " Lo stato di uscita è 0 a meno che N non sia maggiore o uguale a 1." -#: builtins.c:354 +#: builtins.c:356 #, fuzzy msgid "" "Execute shell builtins.\n" @@ -2844,7 +2913,7 @@ msgstr "" "COMINTERNO-SHELL\n" " non è un comando interno di shell." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2875,14 +2944,14 @@ msgstr "" "che l'ESPR\n" " non sia valida." -#: builtins.c:387 +#: builtins.c:389 #, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2957,7 +3026,7 @@ msgstr "" "successo quando\n" " viene usato -P; altrimenti un valore diverso da zero." -#: builtins.c:425 +#: builtins.c:427 #, fuzzy msgid "" "Print the name of the current working directory.\n" @@ -2980,15 +3049,15 @@ msgstr "" " \tdi lavoro corrente\n" " -P\tStampa la directory fisica senza alcun collegamento simbolico\n" " \n" -" In maniera predefinita \"pwd\" si comporta come se fosse specificato \"-L" -"\".\n" +" In maniera predefinita \"pwd\" si comporta come se fosse specificato \"-" +"L\".\n" " \n" " Stato di uscita:\n" " Restituisce 0 a meno che non venga fornita una opzione non valida o che " "la\n" " directory corrente non possa essere letta." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -3004,7 +3073,7 @@ msgstr "" " Stato di uscita:\n" " ha sempre successo." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -3016,7 +3085,7 @@ msgstr "" " Stato di uscita:\n" " ha sempre successo." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -3028,7 +3097,7 @@ msgstr "" " Stato di uscita:\n" " Sempre un insuccesso." -#: builtins.c:471 +#: builtins.c:473 #, fuzzy msgid "" "Execute a simple command or display information about commands.\n" @@ -3059,15 +3128,15 @@ msgstr "" " -p\tUsa un valore predefinito per il PERCORSO che garantisce che " "vengano trovate tutte\n" " \tle utilità standard\n" -" -v\tStampa una descrizione del COMANDO simile al comando interno \"type" -"\"\n" +" -v\tStampa una descrizione del COMANDO simile al comando interno " +"\"type\"\n" " -V\tStampa una descrizione più prolissa di ciascun COMANDO\n" " \n" " Stato di uscita:\n" " Restituisce lo stato di uscita del COMANDO o insuccesso se il COMANDO " "non viene trovato." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3096,7 +3165,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3150,7 +3220,7 @@ msgstr "" " Restituisce successo a meno che non sia fornita una opzione non valida o " "si riscontri un errore." -#: builtins.c:532 +#: builtins.c:535 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3161,7 +3231,7 @@ msgstr "" " \n" " Obsoleto. Vedere \"help declare\"." -#: builtins.c:540 +#: builtins.c:543 #, fuzzy msgid "" "Define local variables.\n" @@ -3192,7 +3262,7 @@ msgstr "" "non si\n" " riscontri un errore o la shell non stia eseguendo una funzione." -#: builtins.c:557 +#: builtins.c:560 #, fuzzy msgid "" "Write arguments to the standard output.\n" @@ -3265,7 +3335,7 @@ msgstr "" " Restituisce successo a meno che non venga riscontrato un errore di " "scrittura." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3288,7 +3358,8 @@ msgstr "" " Restituisce successo a meno che non venga riscontrato un errore di " "scrittura." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3308,6 +3379,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3344,7 +3421,7 @@ msgstr "" " Restituisce successo a meno che NOME non sia un comando interno di shell " "o si riscontri un errore." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3364,7 +3441,7 @@ msgstr "" " Restituisce lo stato di uscita del comando o successo se il comando è " "nullo." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy msgid "" "Parse option arguments.\n" @@ -3456,7 +3533,7 @@ msgstr "" "raggiunta\n" " la fine delle opzioni o viene riscontrato un errore." -#: builtins.c:694 +#: builtins.c:702 #, fuzzy msgid "" "Replace the shell with the given command.\n" @@ -3500,7 +3577,7 @@ msgstr "" " Restituisce successo a meno che non sia trovato il COMANDO o si " "riscontri un errore di ridirezione." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3512,7 +3589,7 @@ msgstr "" " Esce dalla shell con uno stato N. Se N è omesso lo stato di uscita\n" " è quello dell'ultimo comando eseguito." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3526,7 +3603,8 @@ msgstr "" "se non eseguito\n" " in una shell di login." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3551,6 +3629,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3586,7 +3666,7 @@ msgstr "" " Restituisce successo o lo stato del comando eseguito, non zero se si " "riscontra un errore." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3607,7 +3687,7 @@ msgstr "" " Stato del comando messo in primo piano, o insuccesso se si riscontra un " "errore." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3632,7 +3712,7 @@ msgstr "" " Restituisce successo a meno che il controllo dei job non sia abilitato o " "si riscontri un errore." -#: builtins.c:793 +#: builtins.c:803 #, fuzzy msgid "" "Remember or display program locations.\n" @@ -3680,7 +3760,7 @@ msgstr "" " Restituisce successo a meno che non sia trovato NOME o sia fornita una " "opzione non valida." -#: builtins.c:818 +#: builtins.c:828 #, fuzzy msgid "" "Display information about builtin commands.\n" @@ -3724,7 +3804,7 @@ msgstr "" " Restituisce successo a meno che non venga trovato il MODELLO o sia " "fornita una opzione non valida." -#: builtins.c:842 +#: builtins.c:852 #, fuzzy msgid "" "Display or manipulate the history list.\n" @@ -3749,7 +3829,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3800,7 +3884,7 @@ msgstr "" " Restituisce successo a meno che non sia fornita una opzione non valida o " "si riscontri un errore." -#: builtins.c:879 +#: builtins.c:893 #, fuzzy msgid "" "Display status of jobs.\n" @@ -3848,7 +3932,7 @@ msgstr "" "si riscontri un errore.\n" " Se viene usato -x, restituisce lo stato di uscita del COMANDO." -#: builtins.c:906 +#: builtins.c:920 #, fuzzy msgid "" "Remove jobs from current shell.\n" @@ -3882,7 +3966,7 @@ msgstr "" " Restituisce successo a meno che non venga fornita una opzione non valida " "o uno SPECJOB." -#: builtins.c:925 +#: builtins.c:939 #, fuzzy msgid "" "Send a signal to a job.\n" @@ -3929,7 +4013,7 @@ msgstr "" " Restituisce successo a meno che non sia fornita una opzione non valida o " "si riscontri un errore." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -4024,7 +4108,7 @@ msgstr "" " Se l'ultimo ARG viene valutato pari a 0 restituisce 1, altrimenti " "restituisce 0." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -4049,6 +4133,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -4131,7 +4217,7 @@ msgstr "" "timeout in lettura\n" " o venga fornito un descrittore di file non valido come argomento per -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4153,7 +4239,7 @@ msgstr "" " Restituisce N, oppure insuccesso se la shell non sta eseguendo una " "funzione o uno script." -#: builtins.c:1055 +#: builtins.c:1071 #, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" @@ -4230,6 +4316,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4339,7 +4429,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce successo a meno che non venga fornita una opzione non valida." -#: builtins.c:1140 +#: builtins.c:1160 #, fuzzy msgid "" "Unset values and attributes of shell variables and functions.\n" @@ -4373,14 +4463,14 @@ msgstr "" "insuccesso,\n" " prova ad azzerare una funzione.\n" " \n" -" Alcune variabili non possono essere azzerate; vedere anche \"readonly" -"\".\n" +" Alcune variabili non possono essere azzerate; vedere anche " +"\"readonly\".\n" " \n" " Stato di uscita:\n" " Restituisce successo a meno che non sia fornita una opzione non valida o " "NOME sia in sola lettura." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4416,7 +4506,7 @@ msgstr "" " Restituisce successo a meno che non sia fornita una opzione non valida o " "il NOME non sia valido." -#: builtins.c:1181 +#: builtins.c:1201 #, fuzzy msgid "" "Mark shell variables as unchangeable.\n" @@ -4456,7 +4546,7 @@ msgstr "" " Restituisce successo a meno che non venga fornita una opzione non valida " "o NOME non sia valido." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4474,7 +4564,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce successo a meno che N non sia negativo o maggiore di $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4499,15 +4589,18 @@ msgstr "" "insuccesso se\n" " il NOMEFILE non può essere letto." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4525,7 +4618,7 @@ msgstr "" " Restituisce successo a meno che non sia abilitato il controllo job o si " "riscontri un errore." -#: builtins.c:1262 +#: builtins.c:1284 #, fuzzy msgid "" "Evaluate conditional expression.\n" @@ -4695,7 +4788,7 @@ msgstr "" "viene valutata\n" " falsa o viene fornito un argomento non valido." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4708,7 +4801,7 @@ msgstr "" "deve\n" " essere un \"]\" letterale per corrispondere al \"[\" di apertura." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4728,7 +4821,8 @@ msgstr "" " Stato di uscita:\n" " Sempre successo." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy msgid "" "Trap signals and other events.\n" " \n" @@ -4736,31 +4830,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4814,7 +4913,7 @@ msgstr "" " Restituisce successo a meno che SPEC_SEGNALE non sia valido o si " "fornisca una opzione non valida." -#: builtins.c:1401 +#: builtins.c:1430 #, fuzzy msgid "" "Display information about command type.\n" @@ -4862,8 +4961,8 @@ msgstr "" " \tche sarebbe eseguito\n" " -p\tRestituisce o il nome del file su disco che sarebbe eseguito,\n" " \toppure niente se \"type -t NOME\" non restituisce \"file\".\n" -" -t\tVisualizza una singola parola che è una tra \"alias\", \"keyword" -"\",\n" +" -t\tVisualizza una singola parola che è una tra \"alias\", " +"\"keyword\",\n" " \t\"function\", \"builtin\", \"file\" or \"\", se il NOME è " "rispettivamente un alias,\n" " \tuna parola riservata di shell, una funzione di shell, un comando " @@ -4877,7 +4976,7 @@ msgstr "" " Restituisce successo se tutti i NOMI vengono trovati; insuccesso in caso " "contrario." -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy msgid "" "Modify shell resource limits.\n" @@ -4920,9 +5019,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4974,7 +5074,7 @@ msgstr "" " Restituisce successo a meno che non venga fornita una opzione non valida " "o venga riscontrato un errore." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -5011,7 +5111,7 @@ msgstr "" " Restituisce successo a meno che MODO non sia valido o venga fornita una " "opzione non valida." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" @@ -5059,7 +5159,7 @@ msgstr "" "fornita una\n" " opzione non valida." -#: builtins.c:1534 +#: builtins.c:1564 #, fuzzy msgid "" "Wait for process completion and return exit status.\n" @@ -5087,7 +5187,16 @@ msgstr "" "fornita una opzione non\n" " valida." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -5112,7 +5221,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato dell'ultimo comando eseguito." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -5143,7 +5252,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato dell'ultimo comando eseguito." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5181,7 +5290,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato di uscita dell'ultimo comando eseguito." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5210,7 +5319,7 @@ msgstr "" " Stato di uscita:\n" " Viene restituito lo stato della PIPELINE." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5229,7 +5338,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato dell'ultimo comando eseguito." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5268,7 +5377,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato dell'ultimo comando eseguito." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5288,7 +5397,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato dell'ultimo comando eseguito." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5308,7 +5417,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato dell'ultimo comando eseguito." -#: builtins.c:1672 +#: builtins.c:1712 #, fuzzy msgid "" "Create a coprocess named NAME.\n" @@ -5334,7 +5443,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato di uscita del COMANDO." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5360,7 +5469,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce successo a meno che il NOME non sia in sola lettura." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5379,7 +5488,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato dell'ultimo comando eseguito." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5403,7 +5512,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce lo stato del job ripristinato." -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy msgid "" "Evaluate arithmetic expression.\n" @@ -5422,7 +5531,7 @@ msgstr "" " Stato di uscita:\n" " Restituisce 1 se ESPRESSIONE è valutata 0, altrimenti restituisce 0." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5479,7 +5588,7 @@ msgstr "" " Stato di uscita:\n" " 0 o 1 a seconda del valore dell'ESPRESSIONE." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5607,7 +5716,7 @@ msgstr "" "decidere quale\n" " \t\tcomando dovrebbe essere salvato nell'elenco della cronologia.\n" -#: builtins.c:1822 +#: builtins.c:1862 #, fuzzy msgid "" "Add directories to stack.\n" @@ -5667,7 +5776,7 @@ msgstr "" "non abbia\n" " successo il cambio di directory." -#: builtins.c:1856 +#: builtins.c:1896 #, fuzzy msgid "" "Remove directories from stack.\n" @@ -5719,7 +5828,7 @@ msgstr "" "valido o non\n" " abbia successo il cambio di directory." -#: builtins.c:1886 +#: builtins.c:1926 #, fuzzy msgid "" "Display directory stack.\n" @@ -5773,7 +5882,7 @@ msgstr "" " Restituisce successo a meno che non sia fornita un'opzione non valida o " "si riscontri un errore." -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy msgid "" "Set and unset shell options.\n" @@ -5802,8 +5911,8 @@ msgstr "" " impostate.\n" " \n" " Opzioni:\n" -" -o\tLimita i NOMEOPZ a quelli definiti per essere usati con \"set -o" -"\"\n" +" -o\tLimita i NOMEOPZ a quelli definiti per essere usati con \"set -" +"o\"\n" " -p\tStampa ogni opzione di shell indicando il relativo stato\n" " -q\tNon stampa l'output\n" " -s\tAbilita (imposta) ciascun NOMEOPZ\n" @@ -5814,7 +5923,7 @@ msgstr "" "fornita\n" " una opzione non valida o NOMEOPZ è disabilitato." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5832,9 +5941,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5886,16 +5995,16 @@ msgstr "" "o si riscontri\n" " un errore di scrittura o assegnazione." -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5946,14 +6055,19 @@ msgstr "" " Restituisce successo a meno che non sia fornita una opzione non valida o " "si riscontri un errore." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5970,7 +6084,7 @@ msgstr "" " Restituisce successo a meno che non sia fornita una opzione non valida o " "si riscontri un errore." -#: builtins.c:2019 +#: builtins.c:2062 #, fuzzy msgid "" "Modify or display completion options.\n" @@ -6013,8 +6127,8 @@ msgstr "" " \n" " Opzioni:\n" " \t-o opzione\tImposta l'OPZIONE di completamento per ciascun NOME\n" -" \t-D\t\tCambia le opzioni per il completamento di comando \"predefinito" -"\"\n" +" \t-D\t\tCambia le opzioni per il completamento di comando " +"\"predefinito\"\n" " \t-E\t\tCambia le opzioni per il completamento di comando \"vuoto\"\n" " \n" " Usando \"+o\" al posto di \"-o\" disabilita l'opzione specificata.\n" @@ -6023,8 +6137,8 @@ msgstr "" " \n" " Ciascun NOME si riferisce a un comando per il quale deve essere stata " "precedentemente\n" -" definita una specifica di completamento con il comando interno \"complete" -"\". Se non viene fornito\n" +" definita una specifica di completamento con il comando interno " +"\"complete\". Se non viene fornito\n" " alcun NOME, compopt deve essere richiamato da una funzione che generi " "attualmente\n" " completamenti, e le opzioni per questo generatore di completamenti " @@ -6036,7 +6150,7 @@ msgstr "" "o NOME non\n" " abbia una specifica di completamento definita." -#: builtins.c:2050 +#: builtins.c:2093 #, fuzzy msgid "" "Read lines from the standard input into an indexed array variable.\n" @@ -6117,7 +6231,7 @@ msgstr "" "valida, ARRAY sia\n" " in sola lettura oppure non indicizzato." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -6127,6 +6241,39 @@ msgstr "" " \n" " Sinonimo per \"mapfile\"." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Restituisce il contesto della chiamata alla subroutine corrente.\n" +#~ " \n" +#~ " Senza ESPR, restituisce \"$riga $nomefile\". Con ESPR, restituisce\n" +#~ " \"$riga $subroutine $nomefile\"; questa informazione aggiuntiva può " +#~ "essere usata\n" +#~ " per fornire uno stack trace.\n" +#~ " \n" +#~ " Il valore dell'ESPR indica di quanti frame di chiamata tornare " +#~ "indietro rispetto\n" +#~ " a quello attuale; in cima c'è il frame 0.\n" +#~ " \n" +#~ " Stato di uscita:\n" +#~ " Restituisce 0 a meno che non sia in esecuzione una funzione di shell " +#~ "o che l'ESPR\n" +#~ " non sia valida." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "attenzione: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: chiave dell'array associativo non valida" diff --git a/po/ja.gmo b/po/ja.gmo index 0314f9e81cec8f5c28aa529e5a6af88684222e73..1ea98de9d71e5b5a658598d8577479797369bc33 100644 GIT binary patch delta 11967 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 Zdzz}Ng_TIr!yO?hdPG4-febxG{~x{jrb_?- delta 20298 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 GWBwlix?A}G diff --git a/po/ja.po b/po/ja.po index 332efa3ed..fbb772e32 100644 --- a/po/ja.po +++ b/po/ja.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: GNU bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-06-19 23:10+0900\n" "Last-Translator: Hiroshi Takekawa <sian@big.or.jp>\n" "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" @@ -21,123 +21,124 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 2.0.2\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "誤った配列の添字" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: 名前参照属性を削除します" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: インデックス配列から連想配列に変換することはできません" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: 配列の添字に非数字を設定できません" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: 連想配列を設定するときには添字をつけなければいけません" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: %s を作成できません" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: コマンドのキーマップがありません" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: 最初の非空白類文字が `\"' ではありません" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "閉じる `%c' が %s にありません" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: 区切り文字コロン(:)がありません" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "`%s': コマンドキーマップの割り当てを解除できません" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "中括弧展開: %s へメモリを割り当てられません" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "中括弧展開: %u 個の要素のメモリの割り当てに失敗しました" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "中括弧展開: `%s' へのメモリ割り当てに失敗しました" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "`%s': 無効なエイリアス名です" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "行編集が有効になっていません" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "`%s': 無効なキーマップ名です" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: %s を読み込めません" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "`%s': 不明な関数名です" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s はどのキーにも割り当てられていません。\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s は次を通して起動します " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "`%s': 割り当て解除できません" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "ループ回数" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "`for'、`while' または `until' ループでのみ意味があります" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -146,360 +147,378 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "現在のサブルーチン呼び出しのコンテキストを返します。\n" " \n" " EXPR が無い場合 \"$line $filename\" を返します。 EXPR がある場合、\n" -" \"$line $subroutine $filename\" を返します。この追加の情報はスタックトレース\n" +" \"$line $subroutine $filename\" を返します。この追加の情報はスタックト" +"レース\n" " を提供する時に利用します。\n" " \n" " EXPR の値は現在のフレームに戻るまでに何回フレームが呼び出されているかを\n" -" 意味します。最上位のフレームは 0 です。" +" 意味します。最上位のフレームは 0 です。\n" +" \n" +" 終了ステータス:\n" +" シェルが関数を実行できないか式 EXPR が無効な場合を除き 0 を返します。" -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME が設定されていません" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "引数が多すぎます" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "空のディレクトリ" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD が設定されていません" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "%d 行: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "警告: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: 使用法: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: オプションには引数が必要です" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: 数字の引数が必要です" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: 見つかりません" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: 無効なオプションです" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: 無効なオプション名です" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': 有効な識別子ではありません" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "無効な八進数です" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "無効な十六進数です" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "無効な数字です" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: 無効なシグナル指定です" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "`%s': pid または有効なジョブ指定ではありません" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: 読み取り専用の変数です" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: 割り当てできません" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s が範囲外です" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "引数" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s が範囲外です" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: そのようなジョブはありません" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: ジョブ制御が無効になっています" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "ジョブ制御が無効になっています" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: 制限されています" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "制限されています" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: シェルのビルトイン関数ではありません" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "書き込みエラー: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "ターミナル属性の設定時にエラーが発生しました : %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "ターミナル属性の取得時にエラーが発生しました : %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: カレントディレクトリの取得時にエラーが発生しました : %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: 曖昧なジョブ指定です" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "このバージョンではヘルプが利用できません" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: インデックス配列ではありません" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: 消去できません: %s は読み取り専用です" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: 消去できません" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: 無効なアクション名です" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: 補完指定がありません" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "警告: -F オプションは期待通りに動作しないかもしれません" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "警告: -C オプションは期待通りに動作しないかもしれません" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "補完機能は現在実行されていません" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "関数の中でのみ使用できます" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "関数作成時に `-f' を使用できません" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: 読み取り専用関数です" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: 参照変数は配列であってはいけません" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: 自身を参照する名前参照変数は許可されていません" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: 循環名前参照です" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "`%s': 名前参照として無効な変数です" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: この方法で配列変数を消去することはできません" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: 連想配列からインデックス配列に変換することはできません" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "動的ロードは利用できません" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "共有オブジェクト %s を開くことができません : %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "%s が共有オブジェクト %s に存在しません: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: 動的ビルトインはロード済です" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "関数 %s のロードが失敗を返しました(%d): ロードされませんでした" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: 動的にロードされていません" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: 削除できません: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: ディレクトリです" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: 通常ファイルではありません" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: ファイルが大きすぎます" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: バイナリファイルを実行できません" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: 実行できません: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "ログアウト\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "ログインシェルではありません: `exit' を使用してください" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "停止しているジョブがあります。\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "動作中のジョブがあります。\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "コマンドが見つかりません" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "ヒストリ指定" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: 一時ファイルを開くことができません: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "カレント" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "ジョブ %d がジョブ制御なしで開始されました" @@ -514,11 +533,11 @@ msgstr "%s: 不正なオプションです -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: オプションには引数が必要です -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "ハッシュが無効になっています" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: ハッシュテーブルが空です\n" @@ -543,15 +562,18 @@ msgstr "" #: builtins/help.def:185 #, 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:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: 開くことができません: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -562,29 +584,42 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"これらのシェルコマンドは内部で定義されています。`help' と入力して一覧を参照してください。\n" +"これらのシェルコマンドは内部で定義されています。`help' と入力して一覧を参照し" +"てください。\n" "`help 名前' と入力すると `名前' という関数のより詳しい説明が得られます。\n" "'info bash' を使用するとシェル全般のより詳しい説明が得られます。\n" -"`man -k' または info を使用すると一覧にないコマンドのより詳しい説明が得られます。\n" +"`man -k' または info を使用すると一覧にないコマンドのより詳しい説明が得られま" +"す。\n" "\n" -"名前の後にアスタリスク (*) がある場合はそのコマンドが無効になっていることを意味します。\n" +"名前の後にアスタリスク (*) がある場合はそのコマンドが無効になっていることを意" +"味します。\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "-anrw を2つ以上一緒に使用することはできません" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "ヒストリ位置" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "空の配列変数名です" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: パラメータが null または設定されていません" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: 無効なタイムスタンプです" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: ヒストリの展開に失敗しました" @@ -598,113 +633,113 @@ msgstr "%s: inlib が失敗しました" msgid "no other options allowed with `-x'" msgstr "`-x' は他のオプションを同時に使用できません" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: 引数はプロセスIDかジョブIDでなければいけません" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "不明なエラーです" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "式が予期されます" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: インデックス配列ではありません" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: 無効なファイル記述子指定です" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: 無効なファイル記述子: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: 無効な行数です" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: 無効な配列の原点です" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: コールバックの quantum が無効です" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "空の配列変数名です" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "配列変数のサポートが必要です" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "`%s': 書式指定文字がありません" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "`%c': 無効な時間書式指定です" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "`%c': 無効な書式指定文字です" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "警告: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "書式解析問題です: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "\\x 用の十六進数字がありません" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "\\%c 用のユニコード数値がありません" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "他のディレクトリはありません" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: 無効な引数です" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<カレントディレクトリがありません>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "ディレクトリスタックが空です" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "ディレクトリスタックのインデックス" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -719,10 +754,12 @@ 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 "" "現在記憶されているディレクトリスタックを表示します。ディレクトリは `pushd'\n" @@ -744,7 +781,7 @@ msgstr "" " -N\tオプションなしで起動された場合にリストの末尾から数えて\n" "\tN番目の要素を表示します。開始番号は0です。" -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -788,7 +825,7 @@ msgstr "" " \n" " `dirs' ビルトインコマンドでディレクトリスタックを表示します。" -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -826,319 +863,331 @@ msgstr "" " \n" " `dirs' ビルトインコマンドでディレクトリスタックを表示します。" -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: 無効なタイムアウト指定です" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "読み込みエラー: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "`return' は関数または source されたスクリプト内のみで利用できます" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "変数と関数を同時に消去することはできません" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: 配列変数ではありません" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: 関数ではありません" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: export できません" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "シフト回数" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "シェルオプションを同時に有効かつ無効にできません" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: 無効なシェルオプション名です" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "ファイル名が引数として必要です" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: ファイルが見つかりません" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "中断できません" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "ログインシェルを中断できません" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s は `%s' のエイリアスです\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s はシェルの予約語です\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s は関数です\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s は特殊シェル組み込み関数です\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s は関数です\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s はシェル組み込み関数です\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s は %s です\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s はハッシュされています (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: limit の無効な引数です" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': 誤ったコマンドです" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: limit を取得できません: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limit" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: limit を変更できません : %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "八進数" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': 無効なシンボリックモード演算子です" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': 無効なシンボリックモード文字です" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " 行 " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "最後のコマンド: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "中止しています..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "情報: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "デバッグ 警告: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "不明なコマンドエラーです" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "誤ったコマンドタイプです" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "誤った接続です" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "誤ったジャンプです" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: 未割り当ての変数です" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\a入力待ちがタイムアウトしました: 自動ログアウト\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "/dev/null から標準入力に対してリダイレクトできません: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': 無効な書式文字です" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "パイプエラー" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: eval の入れ子レベルの最大値を超えています (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: source の入れ子レベルの最大値を超えています (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: 関数の入れ子レベルの最大値を超えています (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: 制限されています: `/' をコマンド名の中に指定できません" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: コマンドが見つかりません" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: 誤ったインタプリタです" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: 実行できません: 必要なファイルがありません" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: 誤ったインタプリタです" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: バイナリファイルを実行できません: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "`%s': 特殊シェル組み込み関数です" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "fd %d を fd %d に複製できません" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "式の再帰可能レベルを越えました" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "再帰スタックがアンダーフローしました" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "式に構文エラーがあります" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "非変数に割り当てを行おうとしてます" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "変数の割り当てに構文エラーがあります" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "0 による除算です" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "バグ: 誤った式のトークンです" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "条件式には `:' が予期されます" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "0より小さい指数部です" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "識別子は前置インクリメントまたは前置デクリメントが予期されます" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "`)' がありません" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "構文エラー: オペランドが予期されます" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "構文エラー: 無効な計算演算子です" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (エラーのあるトークンは \"%s\")" @@ -1155,7 +1204,7 @@ msgstr "無効な整数定数です" msgid "value too great for base" msgstr "基底の値が大きすぎます" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: 式のエラー\n" @@ -1164,46 +1213,51 @@ msgstr "%s: 式のエラー\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: 親ディレクトリにアクセスできません" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "`%s': 特殊シェル組み込み関数です" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "ファイル記述子(fd) %d を無遅延モードに再設定できません" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "新規ファイル記述子(fd) %d を bash の入力として割り当てられません" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: 新規 fd %d のバッファはすでに存在します" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "実行中のジョブ %2$d で fork した pid %1$d が出現しました" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "プロセスグループ %2$ld のジョブ %1$d を削除しています" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) はまだ存在しているとマークされています" @@ -1213,137 +1267,138 @@ msgstr "add_process: pid %5ld (%s) はまだ存在しているとマークされ msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: そのような pid は存在しません" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "シグナル %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "終了" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "停止" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "停止 (%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "実行中" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "終了(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "終了 %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "不明なステータス" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(コアダンプ) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "子プロセス setpgid (%ld から %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld はこのシェルの子プロセスではありません" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: プロセス %ld の記録がありません" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: ジョブ %d は停止しています" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: カレントジョブがありません" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: ジョブは終了しました" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: ジョブ %d はすでにバックグラウンドで動作しています" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: 不定のブロックを避けるために WNOHANG をオンにしました。" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: %d 行: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (コアダンプ)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd now: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp が失敗しました" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" -msgstr "initialize_job_control: バックグラウンドにジョブコントロールがありません" +msgstr "" +"initialize_job_control: バックグラウンドにジョブコントロールがありません" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: line discipline" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "端末プロセスグループを設定できません (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "このシェルではジョブ制御が無効になっています" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: 失敗したアサーション: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1352,376 +1407,389 @@ msgstr "" "\r\n" "malloc: %s:%d: アサーション失敗\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "不明" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: free ブロックリストが壊れています" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: 既に free されたブロックを引数として呼び出されました" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: 未割当のブロックを引数として呼び出されました" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: アンダーフローを検出しました。 mh_nbytes が範囲外です" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: アンダーフローを検出しました。magic8 壊れています" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: 開始と終了の塊の大きさが異なっています" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: 未割当のブロックを引数として呼び出されました" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: アンダーフローを検出しました。 mh_nbytes が範囲外です" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: アンダーフローを検出しました。magic8 が壊れています" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: 開始と終了の塊の大きさが異なっています" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: FIND_ALLOC で割り当てテーブルがいっぱいです\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p 既にテーブル上では割り当てられています\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p テーブル上では既に解放されています\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "無効な基底" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: 不明なホストです" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: 無効なサービスです" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: ネットワークパス指定に誤りがあります" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "ネットワーク操作はサポートされていません" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: ロケールを変更できません (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: ロケールを変更できません (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: ロケールを変更できません (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: ロケールを変更できません (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "メールが $_ にあります" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "新しいメールが $_ にあります" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "%s のメールは既読です\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "構文エラー: 数値の式が必要です" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "構文エラー: 予期しない `;' です" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "構文エラー: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: 誤った指定の種類 %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "ヒアドキュメントの %d 行目でファイル終了 (EOF) に達しました (`%s' が必要)" +msgstr "" +"ヒアドキュメントの %d 行目でファイル終了 (EOF) に達しました (`%s' が必要)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: リダイレクト指定 `%d' は範囲外です" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "書き込みエラー: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "ヒアドキュメントの最大数を超えました" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "対応する `%c' を探索中に予期しないファイル終了 (EOF) です" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "`]]' を探索中に予期しないファイル終了 (EOF) です" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "条件式に構文エラー: 予期しないトークン `%s' です" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "条件式に構文エラーがあります" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "予期しないトークン `%s' です。`)' が予期されます" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "`)' が予期されます" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "条件単項演算子に予期しない引数 `%s' です" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "条件単項演算子に予期しない引数です" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "`%s` は予期しないトークンです。条件二項演算子が予期されます" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "条件二項演算子が予期されます" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "条件二項演算子に予期しない引数 `%s' です" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "条件二項演算子に予期しない引数です" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "条件コマンドに予期しないトークン `%c' があります" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "条件コマンドに予期しないトークン `%s' があります" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "条件コマンドに予期しないトークン %d があります" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "予期しないトークン `%s' 周辺に構文エラーがあります" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "`%s' 周辺に構文エラーがあります" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "構文エラー: 予期しないファイル終了 (EOF) です" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "構文エラー: 予期しないファイル終了 (EOF) です" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "構文エラー" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "シェルから脱出するには \"%s\" を使用してください。\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "対応する `)' を探索中に予期しないファイル終了(EOF)です" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: 関数 `%s' が見つかりません" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: 誤った接続 `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: 無効なファイル記述子です" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: NULL ファイルポインタです" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': 無効な書式文字です" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "ファイル記述子が範囲外です" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: 曖昧なリダイレクトです" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: 存在するファイルを上書きできません" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: 制限されています: 出力をリダイレクト出来ません" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "ヒアドキュメント用一時ファイルを作成できません: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: ファイル記述子 (fd) を変数に設定することはできません" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "ネットワークが無効な場合 /dev/(tcp|udp)/host/port はサポートされません" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "リダイレクトエラー: ファイル記述子を複製できません" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "/tmp が見つかりません。作成してください!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp は有効なディレクトリ名でなければいけません" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "pretty-printing モードはインタラクティブシェルでは無視されます" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: 無効なオプション" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "uidを %d に設定できません: 実効uid %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "gidを %d に設定できません: 実効gid %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "デバッガを開始できません。デバッガモードが無効になっています" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: ディレクトリです" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "私は名前がありません!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, バージョン %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1730,49 +1798,51 @@ msgstr "" "使用法:\t%s [GNU long option] [option] ...\n" "\t%s [GNU long option] [option] script-file ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU 形式の長いオプション:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "シェルオプション:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD, -c command または -O shopt_option\t\t(起動時のみ)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s または -o option\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "シェルオプションの詳細については `%s -c \"help set\"'と入力してください。\n" +msgstr "" +"シェルオプションの詳細については `%s -c \"help set\"'と入力してください。\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "シェル組み込みコマンドについては `%s -c help' と入力してください。\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "バグ報告をする場合は `bashbug' コマンドを使用してください。\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bashホームページ: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "GNUソフトウェアを使用する時の一般的なヘルプ : <http://www.gnu.org/gethelp/>\n" +msgstr "" +"GNUソフトウェアを使用する時の一般的なヘルプ : <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: 無効な操作です" @@ -1942,282 +2012,305 @@ msgstr "情報要求" msgid "Unknown Signal #%d" msgstr "不明なシグナル番号 %d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "誤った代入: 閉じる `%s' が %s に存在しません" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: リストを配列要素に割り当てできません" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "プロセス代入ではパイプを作成できません" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "プロセス代入では子プロセスを作成できません" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "名前付きパイプ %s を読み込み用に開けません" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "名前付きパイプ %s を書き込み用に開けません" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "名前付きパイプ %s をファイル記述子(fd) %d として複製できません" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "コマンド代入: 入力のヌルバイトを無視しました" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: パイプを fd 1 として複製できません" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "コマンド代入ではパイプを作成できません" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "コマンド代入では子プロセスを作成できません" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: パイプを fd 1 として複製できません" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: 名前参照として無効な変数です" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: 無効な間接展開です" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: 無効な変数名です" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: パラメータが設定されていません" +msgid "%s: bad substitution" +msgstr "%s: 誤った代入です" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: パラメータが null または設定されていません" +msgid "%s: parameter not set" +msgstr "%s: パラメータが設定されていません" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: substring expression < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: 誤った代入です" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: この方法で割当はできません" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" msgstr "将来のバージョンのシェルでは強制的に数値代入として評価されます" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "誤った代入: %s に閉じる \"`\" がありません" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "一致しません: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "引数が予期されます" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: 整数の式が予期されます" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "`)' が予期されます" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "`)' が予期されますが、見つかったのは %s です" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: 二項演算子が予期されます" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: 単項演算子が予期されます" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "`]'がありません" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "構文エラー: 予期しない `%s' です" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "無効なシグナル番号" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: trap handler の最大レベルを超えています (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: trap_list[%d] に誤った値があります: %p" -#: trap.c:416 +#: trap.c:454 #, 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:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: 誤ったシグナル %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "`%s' の関数定義をインポート中にエラーが発生しました" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "シェルレベル (%d) は高すぎます。1に再設定されました" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "ヒアドキュメントの最大数を超えました" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: 現在のスコープは関数コンテキストではありません" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: 変数が初期化されていないかもしれません" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: 互換性のないタイプからは継承できません" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: 名前参照に整数を代入しようとしています" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: 現在のスコープは関数コンテキストではありません" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s は null の exportstr を持っています" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "%2$s に対する exportstr で %1$d は無効な文字です" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "%s に対する exportstr に `=' がありません" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "pop_var_context: shell_variables の先頭です。関数コンテキストではありません" +msgstr "" +"pop_var_context: shell_variables の先頭です。関数コンテキストではありません" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: global_variables コンテキストではありません" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: shell_variables の先頭です。一時環境スコープではありません" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: ファイルとして開くことができません" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: トレースファイル記述子として無効な値です" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: 値の互換性が範囲外です" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.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" +#: 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" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, バージョン %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "This is free software; you are free to change and redistribute it." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "There is NO WARRANTY, to the extent permitted by law." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %lu バイトを割当できません (%lu バイトを割当済み)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: %lu バイトを割当できません" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: %lu バイトを割当できません (%lu バイトを割当済み)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: %lu バイトを割当できません" @@ -2231,8 +2324,12 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] name [name ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function または readline-command]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function または readline-command]" #: builtins.c:56 msgid "break [n]" @@ -2251,7 +2348,8 @@ msgid "caller [expr]" msgstr "caller [expr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [dir]" #: builtins.c:68 @@ -2263,12 +2361,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] command [arg ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2327,8 +2433,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [pattern ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d offset] [n] または history -anrw [filename] または history -ps arg [arg...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d offset] [n] または history -anrw [filename] または history -" +"ps arg [arg...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2339,16 +2449,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [jobspec ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... または kill -l [sigspec]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... または kill -l " +"[sigspec]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let 引数 [引数 ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" #: builtins.c:140 msgid "return [n]" @@ -2395,7 +2514,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] signal_spec ...]" #: builtins.c:168 @@ -2419,106 +2539,134 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAME [in WORDS ... ] ; do COMMANDS; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do COMMANDS; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAME [in WORDS ... ;] do COMMANDS; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while COMMANDS; do COMMANDS-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until COMMANDS; do COMMANDS-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAME] command [redirections]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function name { COMMANDS ; } または name () { COMMANDS ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ COMMANDS ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expression ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expression ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "変数 - 変数の名前とその意味" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [optname ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [arguments]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" -#: builtins.c:235 -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 option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" +"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o option] [-DEI] [name ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" -#: builtins.c:256 +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" + +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2533,25 +2681,30 @@ 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` はエイリアス一覧を `alias 名前=値' という再使用可能な\n" +" 引数がない場合、`alias` はエイリアス一覧を `alias 名前=値' という再使用可" +"能な\n" " 形式で標準出力に表示します。\n" " \n" -" そうでなければ、与えられた名前と値でエイリアスを定義します。値の後続に空白\n" -" が存在する場合は次の語はエイリアス展開時にエイリアス代入対象として確認され\n" +" そうでなければ、与えられた名前と値でエイリアスを定義します。値の後続に空" +"白\n" +" が存在する場合は次の語はエイリアス展開時にエイリアス代入対象として確認さ" +"れ\n" " ます。\n" "\n" " オプション:\n" " -p\tすべての定義されたエイリアスを再利用可能な形式で表示します\n" " \n" " 終了ステータス:\n" -" alias は与えられた名前でエイリアスが定義されなかった場合を除き true を返します。" +" alias は与えられた名前でエイリアスが定義されなかった場合を除き true を返" +"します。" -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2567,7 +2720,7 @@ msgstr "" " \n" " 名前がエイリアスに存在しない場合を除き true を返します。" -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2579,25 +2732,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2611,14 +2769,19 @@ msgstr "" " 例: bind '\"\\C-x\\C-r\": re-read-init-file'\n" "\n" " オプション:\n" -" -m keymap このコマンドの間のキーマップとして KEYMAP を使用する。\n" -" 利用可能なキーマップ名は emacs, emacs-standard, emacs-meta,\n" -" emacs-ctlx, vi, vi-move, vi-command, および vi-insertです。\n" +" -m keymap このコマンドの間のキーマップとして KEYMAP を使用す" +"る。\n" +" 利用可能なキーマップ名は emacs, emacs-standard, " +"emacs-meta,\n" +" emacs-ctlx, vi, vi-move, vi-command, および vi-" +"insertです。\n" " -l 関数名一覧を表示する。\n" " -P 関数名およびキー割り当て一覧を表示する。\n" -" -p 入力として再利用可能な形式で、関数名とキー割り当てを一覧\n" +" -p 入力として再利用可能な形式で、関数名とキー割り当てを" +"一覧\n" " 表示する\n" -" -S マクロを起動するキーシーケンスとその値を一覧表示する\n" +" -S マクロを起動するキーシーケンスとその値を一覧表示す" +"る\n" " -s 入力として再利用可能な形式で、マクロを起動する\n" " キーシーケンスとその値を一覧表示する\n" " -V 変数名と値の一覧を表示する\n" @@ -2637,7 +2800,7 @@ msgstr "" " bind は解釈できないオプションが渡された場合およびエラーが発生した場合\n" " を除き 0 を返します。" -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2649,13 +2812,14 @@ msgid "" msgstr "" "for、 while、または until ループを脱出します。\n" " \n" -" FOR、 WHILE、または UNTIL ループを脱出します もし N が指定されている場合、\n" +" FOR、 WHILE、または UNTIL ループを脱出します もし N が指定されている場" +"合、\n" " N階層のループを終了します。\n" " \n" " 終了ステータス:\n" " N が1未満の場合を除き、終了ステータスは 0 です。" -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2673,13 +2837,14 @@ msgstr "" " 終了ステータス:\n" " N が1未満の場合を除き、終了ステータスは 0 です。" -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2695,7 +2860,7 @@ msgstr "" " シェル組み込みコマンドの終了ステータスを返します。シェル組み込みコマ\n" " ンドが無い場合は false を返します。" -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2713,7 +2878,8 @@ msgstr "" "現在のサブルーチン呼び出しのコンテキストを返します。\n" " \n" " EXPR が無い場合 \"$line $filename\" を返します。 EXPR がある場合、\n" -" \"$line $subroutine $filename\" を返します。この追加の情報はスタックトレース\n" +" \"$line $subroutine $filename\" を返します。この追加の情報はスタックト" +"レース\n" " を提供する時に利用します。\n" " \n" " EXPR の値は現在のフレームに戻るまでに何回フレームが呼び出されているかを\n" @@ -2722,21 +2888,27 @@ msgstr "" " 終了ステータス:\n" " シェルが関数を実行できないか式 EXPR が無効な場合を除き 0 を返します。" -#: builtins.c:387 +#: builtins.c:389 #, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2752,11 +2924,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "シェルの作業ディレクトリを変更します。\n" @@ -2764,33 +2938,41 @@ msgstr "" " カレントディレクトリを DIR へ変更します。DIR のデフォルトは HOME シェル\n" " 変数の値です。\n" " \n" -" 変数 CDPATH は DIR を含んでいる検索パスを定義します。CDPATH にはコロン(:)\n" +" 変数 CDPATH は DIR を含んでいる検索パスを定義します。CDPATH にはコロン" +"(:)\n" " で区切られた代替ディレクトリ名を指定します。\n" " 値がないディレクトリ名はカレントディレクトリと同義です。 DIR が\n" " スラッシュ (/) から始まる場合は CDPATH は使用されません。\n" " \n" -" ディレクトリが見つからなく、かつ `cdabl_vars' シェルオプションが設定されて\n" -" いる場合、引数は変数名として扱われます。その変数に値がある場合、その値が\n" +" ディレクトリが見つからなく、かつ `cdabl_vars' シェルオプションが設定され" +"て\n" +" いる場合、引数は変数名として扱われます。その変数に値がある場合、その値" +"が\n" " DIR として扱われます。\n" " \n" " オプション:\n" " -L\tシンボリックリンクを強制的にたどります: '..' を処理後、\n" " DIR のシンボリックリンクを解決します。\n" -" -P\tシンボリックリンクをたどらず物理構造を利用します: '..' を処理前に\n" +" -P\tシンボリックリンクをたどらず物理構造を利用します: '..' を処理前" +"に\n" " DIR のシンボリックリンクを解決します。\n" " -e\t-P オプションが与えられ、かつ、現在の作業ディレクトリが正しく\n" " 決定できない場合、終了ステータスが 0 以外で終了します\n" " -@\tサポートしているシステムでは、\n" -" 拡張属性のファイルをファイル属性つきのディレクトリとして表示します。\n" +" 拡張属性のファイルをファイル属性つきのディレクトリとして表示" +"します。\n" " \n" -" デフォルトでは `-L' が指定された場合と同様シンボリックリンクをたどります。\n" -" `..' はその前のパスコンポーネント(ディレクトリ)を'/'か DIRの最初まで削除します。\n" +" デフォルトでは `-L' が指定された場合と同様シンボリックリンクをたどりま" +"す。\n" +" `..' はその前のパスコンポーネント(ディレクトリ)を'/'か DIRの最初まで削除" +"します。\n" " \n" " 終了ステータス:\n" -" ディレクトリを変更した場合、および -P が使用されている時に $PWD が正しく\n" +" ディレクトリを変更した場合、および -P が使用されている時に $PWD が正し" +"く\n" " 設定された場合は 0、それ以外は 0 以外の値です。" -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2818,7 +3000,7 @@ msgstr "" " 無効なオプションまたはカレントディレクトリを読み込めない場合を除き\n" " 0を返します。" -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2834,7 +3016,7 @@ msgstr "" " 終了ステータス:\n" " 常に成功です。" -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2846,7 +3028,7 @@ msgstr "" " 終了ステータス:\n" " 常に成功です。" -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2858,12 +3040,13 @@ msgstr "" " 終了ステータス:\n" " 常に失敗です。" -#: builtins.c:471 +#: builtins.c:473 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" @@ -2888,9 +3071,10 @@ msgstr "" " -V\tCOMMAND に対してより冗長な説明を表示する\n" " \n" " 終了ステータス:\n" -" COMMAND の終了ステータスを返します。または COMMAND が見つからない時に失敗を返します。" +" COMMAND の終了ステータスを返します。または COMMAND が見つからない時に失敗" +"を返します。" -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -2919,12 +3103,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2960,13 +3146,14 @@ msgstr "" " 整数属性を与えられた変数は値を割り当てられた時に、数値として評価され\n" " ます。(`let' コマンド参照してください。)\n" "\n" -" 関数内で使用された場合は `local' コマンドを使用した時と同様に `declare' \n" +" 関数内で使用された場合は `local' コマンドを使用した時と同様に " +"`declare' \n" " は NAME をローカル変数にします。`-g' オプションはこの動作を抑止します。\n" " \n" " 終了ステータス:\n" " 無効なオプションが与えられたかエラーが発生しない限り成功を返します。" -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2976,7 +3163,7 @@ msgstr "" " \n" " declare の同義語です。`help declare'を参照してください。" -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2995,19 +3182,22 @@ msgstr "" " NAME という名前のローカル変数を定義し値を VALUE に設定します。OPTION は\n" " `declare'と同じすべてのオプションを受け付けます。\n" " \n" -" 局所変数はシェル関数の中でのみ使用できます。宣言された関数の中およびその\n" +" 局所変数はシェル関数の中でのみ使用できます。宣言された関数の中およびそ" +"の\n" " 子関数のみで参照できます。\n" " \n" " 終了ステータス:\n" -" 無効なオプションが与えられる、エラーが発生する、またはシェルが関数を実行できない\n" +" 無効なオプションが与えられる、エラーが発生する、またはシェルが関数を実行" +"できない\n" " 場合を除き成功を返します。" -#: builtins.c:557 +#: builtins.c:560 #, fuzzy msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3031,9 +3221,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3041,7 +3233,8 @@ msgid "" msgstr "" "引数を標準出力に書き出します。\n" " \n" -" 引数 ARG を単一空白文字で区切り、最後に改行を加えて標準出力に表示します。\n" +" 引数 ARG を単一空白文字で区切り、最後に改行を加えて標準出力に表示しま" +"す。\n" " \n" " オプション:\n" " -n\t最後に改行を加えない\n" @@ -3066,7 +3259,7 @@ msgstr "" " 終了ステータス:\n" " 書き込みエラーが発生しない限り成功を返します。" -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3088,7 +3281,8 @@ msgstr "" " 終了ステータス:\n" " 書き込みエラーが発生しない限り成功を返します。" -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3108,6 +3302,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3116,8 +3316,10 @@ msgid "" msgstr "" "シェル組み込み関数を有効または無効にします。\n" " \n" -" シェル組み込み関数を有効または無効にします。シェル組み込み関数を無効にすると\n" -" ディスク上に存在するシェル組み込み関数と同じ名前のコマンドをフルパスを指定す\n" +" シェル組み込み関数を有効または無効にします。シェル組み込み関数を無効にす" +"ると\n" +" ディスク上に存在するシェル組み込み関数と同じ名前のコマンドをフルパスを指" +"定す\n" " ることなく実行することが出来ます。\n" " \n" " オプション:\n" @@ -3138,11 +3340,12 @@ msgstr "" " 終了ステータス:\n" " NAME が組み込み関数ではないかエラーが発生しない限り成功を返します。" -#: builtins.c:640 +#: builtins.c:648 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" @@ -3157,7 +3360,7 @@ msgstr "" " コマンドの終了ステータスを返します。コマンドが null の場合は成功を\n" " 返します。" -#: builtins.c:652 +#: builtins.c:660 #, fuzzy msgid "" "Parse option arguments.\n" @@ -3235,13 +3438,14 @@ msgstr "" " オプションが見つかった場合に成功を返します。オプションの終わり\n" " に到達するかエラーが発生した時に失敗を返します。" -#: builtins.c:694 +#: builtins.c:702 #, fuzzy 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" @@ -3249,16 +3453,19 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "シェルを与えられたコマンドで置換します。\n" " \n" " 指定したプログラムでシェルを置換して COMMAND を実行します。ARGUMENTS は\n" -" COMMAND の引数となります。もし COMMAND が指定されない場合は、現在のシェル\n" +" COMMAND の引数となります。もし COMMAND が指定されない場合は、現在のシェ" +"ル\n" " に対する全てのリダイレクトが行われます。\n" " \n" " オプション:\n" @@ -3266,13 +3473,15 @@ msgstr "" " -c\t\tCOMMAND を環境変数なしで実行します\n" " -l\t\tdash(-) を COMMAND の 0 番目の引数とします\n" " \n" -" もしコマンドが実行できない場合、非対話的なシェルは終了し、対話的なシェルは\n" +" もしコマンドが実行できない場合、非対話的なシェルは終了し、対話的なシェル" +"は\n" " オプション `execfail' が設定されます。\n" " \n" " 終了ステータス:\n" -" COMMAND が見つからないかリダイレクトエラーが発生しない限り成功を返します。" +" COMMAND が見つからないかリダイレクトエラーが発生しない限り成功を返しま" +"す。" -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3284,29 +3493,34 @@ msgstr "" " 終了ステータス N でシェルを終了します。 N を指定しない場合は\n" " 最後に実行したコマンドの終了ステータスになります。" -#: builtins.c:724 +#: builtins.c:732 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 "" "ログインシェルを終了します。\n" " \n" -" 終了ステータス N でログインシェルを終了します。実行したのがログインシェル\n" +" 終了ステータス N でログインシェルを終了します。実行したのがログインシェ" +"ル\n" " 内で無い場合はエラーを返します。" -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3319,17 +3533,24 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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" -" fc はヒストリ一覧を表示または編集してコマンドを再実行するために使用します。\n" -" FIRST および LAST は範囲を指定する数値です。FIRST は文字列を指定することも\n" -" できます。その場合はその文字列で始まる直近に実行したコマンドを表します。\n" +" fc はヒストリ一覧を表示または編集してコマンドを再実行するために使用しま" +"す。\n" +" FIRST および LAST は範囲を指定する数値です。FIRST は文字列を指定すること" +"も\n" +" できます。その場合はその文字列で始まる直近に実行したコマンドを表しま" +"す。\n" " \n" " オプション:\n" -" -e ENAME\t使用するエディタを選択します。デフォルトは FCEDIT で、次は EDITOR、\n" +" -e ENAME\t使用するエディタを選択します。デフォルトは FCEDIT で、次は " +"EDITOR、\n" " \t\tそして vi の順です。\n" " -l \t編集ではなく行を一覧表示します\n" " -n\t一覧表示時に行番号を表示しません\n" @@ -3338,15 +3559,18 @@ msgstr "" " `fc -s [pat=rep ...] [command]' 形式を使用すると、COMMAND は\n" " OLD=NEW の置換が行われた後に再実行されます。\n" " \n" -" これを使った使いやすいエイリアスは r='fc -s' です。これで `r cc' を実行する\n" -" と最後に実行した cc で始まるコマンドが実行されます。`r' で直前のコマンドが\n" +" これを使った使いやすいエイリアスは r='fc -s' です。これで `r cc' を実行す" +"る\n" +" と最後に実行した cc で始まるコマンドが実行されます。`r' で直前のコマンド" +"が\n" " 実行されます。\n" " \n" " 終了ステータス:\n" -" 実行したコマンドのステータスまたは成功が帰ります。エラーが発生した場合は 0 \n" +" 実行したコマンドのステータスまたは成功が帰ります。エラーが発生した場合は " +"0 \n" " 以外の値になります。" -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3359,21 +3583,26 @@ msgid "" msgstr "" "ジョブをフォアグランドにします。\n" " \n" -" JOB_SPEC で識別されたジョブをフォアグランドにして、現在のジョブにします。\n" -" もし JOB_SPEC が存在しない場合、シェルが現在のレントジョブとして考えている\n" +" JOB_SPEC で識別されたジョブをフォアグランドにして、現在のジョブにしま" +"す。\n" +" もし JOB_SPEC が存在しない場合、シェルが現在のレントジョブとして考えてい" +"る\n" " ものが利用されます。\n" " \n" " \n" " 終了ステータス:\n" -" フォアグラウンドになったコマンドのステータスを返します。または、エラーが\n" +" フォアグラウンドになったコマンドのステータスを返します。または、エラー" +"が\n" " 発生した時に失敗を返します。" -#: builtins.c:779 +#: builtins.c:789 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" @@ -3381,20 +3610,23 @@ msgid "" msgstr "" "ジョブをバックグラウンドにします。\n" " \n" -" JOB_SPEC で識別されるジョブを `&' と共に始めた時のようにバックグラウンドに\n" -" します。もし JOB_SPEC が存在しない場合、シェルが現在のジョブとして考えてい\n" +" JOB_SPEC で識別されるジョブを `&' と共に始めた時のようにバックグラウンド" +"に\n" +" します。もし JOB_SPEC が存在しない場合、シェルが現在のジョブとして考えて" +"い\n" " るものが利用されます。\n" " \n" " 終了ステータス:\n" " ジョブ制御が有効になっていないかエラーが発生しない限り成功を返します。" -#: builtins.c:793 +#: builtins.c:803 #, fuzzy msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3413,7 +3645,8 @@ msgid "" msgstr "" "プログラムの位置を記憶または表示します。\n" " \n" -" 各コマンド NAME のフルパスを決定し記憶します。もし引数が与えられなかった場合、\n" +" 各コマンド NAME のフルパスを決定し記憶します。もし引数が与えられなかった" +"場合、\n" " 記憶しているコマンドの情報が表示されます。\n" " \n" " オプション:\n" @@ -3430,7 +3663,7 @@ msgstr "" " 終了ステータス:\n" " NAME が見つからないか、無効なオプションが与えられない限り成功を返します。" -#: builtins.c:818 +#: builtins.c:828 #, fuzzy msgid "" "Display information about builtin commands.\n" @@ -3449,7 +3682,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "組み込みコマンドの情報を表示します。\n" " \n" @@ -3467,9 +3701,10 @@ msgstr "" " PATTERN\tヘルプトピックを指定するパターン\n" " \n" " 終了ステータス:\n" -" PATTERN が見つからないか無効なオプションが与えられない限り成功を返します。" +" PATTERN が見つからないか無効なオプションが与えられない限り成功を返しま" +"す。" -#: builtins.c:842 +#: builtins.c:852 #, fuzzy msgid "" "Display or manipulate the history list.\n" @@ -3494,18 +3729,24 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." msgstr "" "ヒストリ一覧を表示または操作します。\n" " \n" -" 行番号をつけてヒストリを表示します。操作した各項目には前に`*'が付きます。\n" +" 行番号をつけてヒストリを表示します。操作した各項目には前に`*'が付きま" +"す。\n" " 引数 N がある場合は最後の N 個の項目のみを表示します。\n" " \n" " オプション:\n" @@ -3522,18 +3763,20 @@ msgstr "" " \tしないで表示します\n" " -s\tARG を単一の項目としてヒストリ一覧に追加します\n" " \n" -" FILENAME を与えた場合、FILENAME がヒストリファイルをして使用されます。それが\n" +" FILENAME を与えた場合、FILENAME がヒストリファイルをして使用されます。そ" +"れが\n" " 無く、$HISTFILE に値がある場合その値が使用されます。そうでなければ \n" " ~/.bash_history が使用されます。\n" "\n" -" もし $HISTTIMEFORMAT 変数が設定され、NULL で無ければ、strftime(3) の書式\n" +" もし $HISTTIMEFORMAT 変数が設定され、NULL で無ければ、strftime(3) の書" +"式\n" " 文字列として各ヒストリ項目の時刻を表示する際に使用されます。それ以外は\n" " 時刻は表示されません。\n" " \n" " 終了ステータス:\n" " 無効なオプションが与えられるかエラーが発生しない限り成功を返します。" -#: builtins.c:879 +#: builtins.c:893 #, fuzzy msgid "" "Display status of jobs.\n" @@ -3559,8 +3802,10 @@ msgid "" msgstr "" "ジョブのステータスを表示します。\n" " \n" -" アクティブなジョブを一覧表示します。JOBSPEC はジョブの出力を制限します。\n" -" オプションがない場合全てのアクティブなジョブのステータスが表示されます。\n" +" アクティブなジョブを一覧表示します。JOBSPEC はジョブの出力を制限しま" +"す。\n" +" オプションがない場合全てのアクティブなジョブのステータスが表示されま" +"す。\n" " \n" " オプション:\n" " -l\t通常の情報に加えてプロセスIDを一覧表示する\n" @@ -3571,13 +3816,14 @@ msgstr "" " -s\t停止中のジョブの出力を制限する\n" " \n" " -x が指定された場合、 COMMAND は ARGS に現れるジョブをプロセスグルー\n" -" プリーダーのプロセス ID に置き換えた全てのジョブ指定の後に実行されます。\n" +" プリーダーのプロセス ID に置き換えた全てのジョブ指定の後に実行されま" +"す。\n" " \n" " 終了ステータス:\n" " 無効なオプションが与えられるかエラーが発生しない限り成功を返します。\n" " もし -x が使用された場合、COMMAND の終了ステータスを返します。" -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3595,19 +3841,21 @@ msgid "" msgstr "" "現在のシェルからジョブを削除します。\n" " \n" -" アクティブなジョブのテーブルから各引数の JOBSPEC を削除します。JOBSPEC が指定\n" +" アクティブなジョブのテーブルから各引数の JOBSPEC を削除します。JOBSPEC が" +"指定\n" " されない場合、シェルが現在のジョブと考えているものが使用されます。\n" " \n" " オプション:\n" " -a\tJOBSPEC が与えられない時に全てのジョブを削除する\n" -" -h\tシェルが SIGHUP を受け取った時に各 JOBSPEC のジョブに対して SIGHUP \n" +" -h\tシェルが SIGHUP を受け取った時に各 JOBSPEC のジョブに対して " +"SIGHUP \n" " \tが送られないようにマークする\n" " -r\t実行中のジョブのみ削除する\n" " \n" " 終了ステータス:\n" " 無効なオプションか JOBSPEC が与えられない限り成功を返します。" -#: builtins.c:925 +#: builtins.c:939 #, fuzzy msgid "" "Send a signal to a job.\n" @@ -3632,8 +3880,10 @@ msgid "" msgstr "" "ジョブにシグナルを送ります。\n" " \n" -" PID または JOBSPEC で識別されるプロセスに SIGSPEC または SIGNUM で名付けら\n" -" れるシグナルを送ります。もし SIGSPEC も SIGNUM も指定されない場合、SIGTERM\n" +" PID または JOBSPEC で識別されるプロセスに SIGSPEC または SIGNUM で名付け" +"ら\n" +" れるシグナルを送ります。もし SIGSPEC も SIGNUM も指定されない場合、" +"SIGTERM\n" " と見なされます。\n" " \n" " オプション:\n" @@ -3642,21 +3892,24 @@ msgstr "" " -l\tシグナル名を一覧表示する。-l の後に引数が続いた場合、\n" " \tそれらは一覧表示されるべきシグナル番号であると見なされる\n" " \n" -" Kill は次の2つの理由からシェル組み込み関数です。一つはプロセスIDの代わりに\n" -" ジョブIDを使用できるようにするためです。もう一つは作成したプロセスが制限に\n" +" Kill は次の2つの理由からシェル組み込み関数です。一つはプロセスIDの代わり" +"に\n" +" ジョブIDを使用できるようにするためです。もう一つは作成したプロセスが制限" +"に\n" " 達した時にプロセスを kill することができるようにするためです。\n" " \n" " 終了ステータス:\n" " 無効なオプションが与えられるかエラーが発生しない限り成功を返します。" -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3720,31 +3973,37 @@ msgstr "" " \t+=, -=, <<=, >>=,\n" " \t&=, ^=, |=\t代入\n" " \n" -" シェル変数は被演算子として使用できます。変数名は数式内で (強制的に固定長\n" +" シェル変数は被演算子として使用できます。変数名は数式内で (強制的に固定" +"長\n" " 整数の) 値に置き換えられます。変数は数式内で使用する時には必ずしも\n" " 整数属性を持っている必要はありません。\n" "\n" -" 演算子は優先順位の順に評価されます。小括弧でくくられた数式は先に評価され、\n" +" 演算子は優先順位の順に評価されます。小括弧でくくられた数式は先に評価さ" +"れ、\n" " 上記の優先順位を上書きするかもしれません。\n" " \n" " 終了ステータス:\n" " ARG の最終的な評価値が 0 の場合 let は 1 を返します。それ以外の場合は\n" " let は 0 を返します。" -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3752,11 +4011,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3774,33 +4036,43 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "標準入力から一行読み込みフィールド毎に分割します。\n" " \n" -" 標準入力から一行読み込みます。または -u が指定されている場合はファイル記述子\n" -" FD から読み込みます。行は単語分割によってフィールドに分割され、最初の単語が\n" -" 最初の NAME に、2番目の単語が2番目に NAME にという順で割り当てられます。残っ\n" -" た単語は全て最後の NAME に割り当てられます。変数 $IFS に設定された文字のみが\n" +" 標準入力から一行読み込みます。または -u が指定されている場合はファイル記" +"述子\n" +" FD から読み込みます。行は単語分割によってフィールドに分割され、最初の単語" +"が\n" +" 最初の NAME に、2番目の単語が2番目に NAME にという順で割り当てられます。" +"残っ\n" +" た単語は全て最後の NAME に割り当てられます。変数 $IFS に設定された文字の" +"みが\n" " 単語の区切りとして認識されます。\n" " \n" " もし NAME を指定しなかった場合、行は REPLY 変数に保存されます。\n" " \n" " オプション:\n" -" -a array\t読み込んだ単語をインデックス型配列 ARRAY に順番に割り当てます。\n" +" -a array\t読み込んだ単語をインデックス型配列 ARRAY に順番に割り当てま" +"す。\n" " \t\t開始番号は 0 です。\n" " -d delim\t改行ではなく文字 DELIM が最初に現れるまで読み込みを続けます\n" " -e\t\t対話的シェルで行を得るのに Readline を使用します\n" " -i text\tReadline の初期テキストとして TEXT を使用します\n" -" -n nchars\t改行が無くても文字数 NCHARS を読み込んだら復帰します。NCHARS\n" +" -n nchars\t改行が無くても文字数 NCHARS を読み込んだら復帰します。" +"NCHARS\n" " \t\tより前に区切り文字 (DELIMITER) が現れた場合は区切り文字が\n" " \t\t優先されます\n" -" -N nchars\t厳密に文字数 NCHARS を読み込み復帰します。ただし、ファイル終\n" +" -N nchars\t厳密に文字数 NCHARS を読み込み復帰します。ただし、ファイル" +"終\n" " \t\t了(EOF) になるか読み込みタイムアウトが発生した場合は除きます。\n" " \t\t区切り文字 (DELIMITER) は無視されます\n" -" -p prompt\t読み込み前に文字列 PROMPT を後ろに改行を付けないで表示します\n" +" -p prompt\t読み込み前に文字列 PROMPT を後ろに改行を付けないで表示しま" +"す\n" " -r\t\tバックスペースで文字をエスケープすることを禁止します\n" " -s\t\t端末から読み込まれる文字をエコーバックしません\n" " -t timeout\tTIMEOUT 秒以内に入力行が完全に読み込まれなかった場合\n" @@ -3813,10 +4085,11 @@ msgstr "" " -u fd\t\t読み込みに標準入力ではなくファイル記述子 FD を使用します\n" " \n" " 終了ステータス:\n" -" ファイル終了(EOF)、読み込みタイムアウト(この場合は128以上)、変数への代入エ\n" +" ファイル終了(EOF)、読み込みタイムアウト(この場合は128以上)、変数への代入" +"エ\n" " ラーが発生、 -u に無効なファイル記述子が与えられた場合を除き0を返します。" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3829,15 +4102,18 @@ msgid "" msgstr "" "シェル関数から復帰します。\n" " \n" -" N で指定した値を戻り値として関数または source されたスクリプトを終了します。\n" -" N が指定されない場合、関数またはスクリプトで最後に実行したコマンドの戻り値\n" +" N で指定した値を戻り値として関数または source されたスクリプトを終了しま" +"す。\n" +" N が指定されない場合、関数またはスクリプトで最後に実行したコマンドの戻り" +"値\n" " が使用されます。\n" " \n" " 終了ステータス:\n" -" 戻り値 N、またはシェルが関数またはスクリプトを実行していない場合は失敗を\n" +" 戻り値 N、またはシェルが関数またはスクリプトを実行していない場合は失敗" +"を\n" " 返します。" -#: builtins.c:1055 +#: builtins.c:1071 #, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" @@ -3881,7 +4157,8 @@ 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" @@ -3905,13 +4182,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3961,7 +4243,8 @@ msgstr "" " nounset -u と同様\n" " onecmd -t と同様\n" " physical -P と同様\n" -" pipefail パイプラインの戻り値を最後に 0 以外で終了したコマ\n" +" pipefail パイプラインの戻り値を最後に 0 以外で終了したコ" +"マ\n" " ンドの終了ステータスにする。0 以外のステータスで\n" " 終了したコマンドが無い場合には 0 にする。\n" " posix Posix 標準とデフォルト動作が異なる bash の動作を\n" @@ -4000,7 +4283,7 @@ msgstr "" " 終了ステータス:\n" " 無効なオプションが与えられない限り成功を返します。" -#: builtins.c:1140 +#: builtins.c:1160 #, fuzzy msgid "" "Unset values and attributes of shell variables and functions.\n" @@ -4013,7 +4296,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4031,20 +4315,23 @@ msgstr "" " -n\t各 NAME を名前参照として扱い、変数自身を消去する。参照として\n" "\t\t評価はしない。 \n" " \n" -" オプションが無い場合、最初に変数を消去しようと試みます。失敗した場合には\n" +" オプションが無い場合、最初に変数を消去しようと試みます。失敗した場合に" +"は\n" " 関数を消去しようと試みます。\n" " \n" " いくつかの変数は消去できません。`readonly' も参照してください。\n" " \n" " 終了ステータス:\n" -" 無効なオプションが与えられるか NAME が読み取り専用の場合を除き成功を返します。" +" 無効なオプションが与えられるか NAME が読み取り専用の場合を除き成功を返し" +"ます。" -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4073,7 +4360,7 @@ msgstr "" " 無効なオプションが与えられるか、無効な NAME が与えられない限り成功\n" " を返します。" -#: builtins.c:1181 +#: builtins.c:1201 #, fuzzy msgid "" "Mark shell variables as unchangeable.\n" @@ -4113,7 +4400,7 @@ msgstr "" " 無効なオプションが与えられるか、与えられた NAME が無効な場合を除き成功\n" " を返します。" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4131,7 +4418,7 @@ msgstr "" " 終了ステータス:\n" " Nが負の値または $# より大きい場合を除き成功を返します。" -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4155,16 +4442,18 @@ msgstr "" " FILENAME で最後に実行したコマンドのステータスを返します。FILENAME が\n" " 読み込めなかった場合は失敗を返します。" -#: builtins.c:1246 +#: builtins.c:1266 #, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4180,7 +4469,7 @@ msgstr "" " 終了ステータス:\n" " ジョブ制御が有効でないかエラーが発生しない限り成功を返します。" -#: builtins.c:1262 +#: builtins.c:1284 #, fuzzy msgid "" "Evaluate conditional expression.\n" @@ -4215,7 +4504,8 @@ 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" @@ -4236,7 +4526,8 @@ 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" @@ -4289,10 +4580,13 @@ msgstr "" " -w FILE ファイルがユーザに対して書き込み可能な時に真(true)\n" " -x FILE ファイルがユーザに対して実行可能な時に真(true)\n" " -O FILE ファイルをユーザが実効的に所有されている時に真(true)\n" -" -G FILE ファイルのグループにユーザが実効的に所属している時に真(true)\n" -" -N FILE ファイルを最後に読み込んだ以降に変更されている時に真(true)\n" +" -G FILE ファイルのグループにユーザが実効的に所属している時に真" +"(true)\n" +" -N FILE ファイルを最後に読み込んだ以降に変更されている時に真" +"(true)\n" " \n" -" FILE1 -nt FILE2 file1 が file2 より新しい時(更新時間に基づく)に真(true)\n" +" FILE1 -nt FILE2 file1 が file2 より新しい時(更新時間に基づく)に真" +"(true)\n" " \n" " \n" " FILE1 -ot FILE2 file1 が file2 より古い時に真(true)\n" @@ -4322,7 +4616,8 @@ msgstr "" " -R VAR シェル変数 VAR が設定され、名前参照の時に真(true)\n" " ! EXPR 式 expr が偽(fales)の時に真(true)\n" " EXPR1 -a EXPR2 式 expr1 および expr2 の両方とも真(true)の時に真(true)\n" -" EXPR1 -o EXPR2 式 expr1 または expr2 のいずれかが真(true)の時に真(true)\n" +" EXPR1 -o EXPR2 式 expr1 または expr2 のいずれかが真(true)の時に真" +"(true)\n" " \n" " arg1 OP arg2 数値比較演算を行なう。OP は -eq, -ne, -lt, -le, -gt,\n" " または -ge のいずれかとなる。\n" @@ -4332,10 +4627,11 @@ msgstr "" " 以上(-ge)の時に真(true)を返します。\n" " \n" " 終了ステータス:\n" -" 式 EXPR の評価値が真(true)の時に成功を返します。EXPR の評価値が偽(false) または\n" +" 式 EXPR の評価値が真(true)の時に成功を返します。EXPR の評価値が偽(false) " +"または\n" " 引数が無効な場合に失敗を返します。" -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4344,14 +4640,16 @@ msgid "" msgstr "" "条件式を評価します。\n" " \n" -" これは test 組み込み関数と同義語です。ただし、最後の引数に開始の`['と一致\n" +" これは test 組み込み関数と同義語です。ただし、最後の引数に開始の`['と一" +"致\n" " するように文字`]'を与えなければいけません。" -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4359,65 +4657,88 @@ msgid "" msgstr "" "プロセスの時間を表示します。\n" " \n" -" シェルとその子プロセスが使用したユーザー時間とシステム時間それぞれの累積を\n" +" シェルとその子プロセスが使用したユーザー時間とシステム時間それぞれの累積" +"を\n" " 表示します。\n" " \n" " 終了ステータス:\n" " 常に成功を返します。" -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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" -" シェルがシグナルを受け取るか他の条件が発生した時に実行されるハンドラーを\n" +" シェルがシグナルを受け取るか他の条件が発生した時に実行されるハンドラー" +"を\n" " 定義および有効化します。\n" " \n" " ARG はシグナル SIGNAL_SPEC を受け取った時に読み込まれ実行されるコマンド\n" -" です。もし ARG が無い (かつシグナル SIGNAL_SPEC が与えられた場合) または\n" +" です。もし ARG が無い (かつシグナル SIGNAL_SPEC が与えられた場合) また" +"は\n" " `-' の場合、各指定したシグナルはオリジナルの値にリセットされます。\n" " ARG が NULL 文字列の場合、各シグナル SIGNAL_SPEC はシェルにおよび起動さ\n" " れたコマンドによって無視されます。\n" " \n" -" もし SIGNAL_SPEC が EXIT (0) の場合、ARG がシェルの終了時に実行されます。\n" -" もし SIGNAL_SPEC が DEBUG の場合 ARG は単に毎回コマンドの前に実行されます。\n" +" もし SIGNAL_SPEC が EXIT (0) の場合、ARG がシェルの終了時に実行されま" +"す。\n" +" もし SIGNAL_SPEC が DEBUG の場合 ARG は単に毎回コマンドの前に実行されま" +"す。\n" " もし SIGNAL_SPEC が RETURN の場合 ARG はシェル関数または . か source に\n" -" よって実行されたスクリプトが終了した時に実行されます。 SIGNAL_SPEC が ERR\n" -" の場合、-e オプションが有効な場合にシェルが終了するようなコマンド失敗が発\n" +" よって実行されたスクリプトが終了した時に実行されます。 SIGNAL_SPEC が " +"ERR\n" +" の場合、-e オプションが有効な場合にシェルが終了するようなコマンド失敗が" +"発\n" " 生するたびに実行されます。\n" " \n" -" もし引数が与えられない場合、 trap は各シグナルに割り当てられたコマンドの\n" +" もし引数が与えられない場合、 trap は各シグナルに割り当てられたコマンド" +"の\n" " 一覧を表示します。\n" " \n" " オプション:\n" @@ -4431,7 +4752,7 @@ msgstr "" " 終了ステータス:\n" " SIGSPEC が無効か、無効なオプションを与えられない限り成功を返します。" -#: builtins.c:1401 +#: builtins.c:1430 #, fuzzy msgid "" "Display information about command type.\n" @@ -4458,7 +4779,8 @@ 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" @@ -4477,22 +4799,25 @@ msgstr "" " \tが `file' を返さない場合、何も返しません。\n" " -t\t次のいずれかの単語を返します。`alias', `keyword', `function',\n" " \t `builtin', `file' or `'。それぞれ NAME がエイリアス、シェル予約語、\n" -" \tシェル関数、シェル組み込み関数、ディスク上のファイル、何も見つからない\n" +" \tシェル関数、シェル組み込み関数、ディスク上のファイル、何も見つからな" +"い\n" " \tに対応します。\n" " \n" " 引数:\n" " NAME\t解釈するコマンドの名前です。\n" " \n" " 終了ステータス:\n" -" 全ての NAME が見つかった場合に成功を返します。どれかが見つからなかった場合\n" +" 全ての NAME が見つかった場合に成功を返します。どれかが見つからなかった場" +"合\n" " は失敗を返します。" -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4529,16 +4854,18 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "シェルの資源制限を変更します。\n" " \n" -" システムがシェルの資源制御を提供している場合、シェル、およびシェルが生成\n" +" システムがシェルの資源制御を提供している場合、シェル、およびシェルが生" +"成\n" " するプロセスに対する資源の制御を行います。\n" " \n" " オプション:\n" @@ -4569,7 +4896,8 @@ msgstr "" " LIMIT を指定した場合、指定した資源に新しい値が設定されます。`soft', \n" " `hard' および `unlimited' という特別な値は現在の緩やかな制限、現在の\n" " 厳しい制限、および無制限を意味します。\n" -" LIMIT を指定しない場合、指定した資源の現在の値を表示します。オプションを\n" +" LIMIT を指定しない場合、指定した資源の現在の値を表示します。オプション" +"を\n" " 指定しない場合、-f と見なされます。\n" " \n" " -t は秒単位、-p は 512バイトごと、-u はプロセス数であり、それ以外は\n" @@ -4578,7 +4906,7 @@ msgstr "" " 終了ステータス:\n" " 無効なオプションを与えるか、エラーが発生しない限り、成功を返します。" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4597,10 +4925,12 @@ msgid "" msgstr "" "ファイルのモードマスクを表示または設定します。\n" " \n" -" ユーザーがファイル作成時のマスクを MODE に設定します。MODE が指定されない場合\n" +" ユーザーがファイル作成時のマスクを MODE に設定します。MODE が指定されない" +"場合\n" " 現在のマスクの値を表示します。\n" " \n" -" MODE が数値で開始した場合8進数として解釈されます。それ以外は chmod(1) で受け\n" +" MODE が数値で開始した場合8進数として解釈されます。それ以外は chmod(1) で" +"受け\n" " 入れられるシンボルモードの文字列として扱われます。\n" " \n" " オプション:\n" @@ -4610,24 +4940,28 @@ msgstr "" " 終了ステータス:\n" " MODE が無効か、無効なオプションが与えられない限り成功を返します。" -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4640,7 +4974,8 @@ msgid "" msgstr "" "ジョブの実行完了を待ち、終了ステータスを返します。\n" " \n" -" ID で識別される各プロセス (プロセスID または ジョブ指定) を待ち、その終了\n" +" ID で識別される各プロセス (プロセスID または ジョブ指定) を待ち、その終" +"了\n" " ステータスを返します。ID が与えられない場合、現在アクティブな全ての子プ\n" " ロセスを待ち 0 を返します。ID がジョブ指定の場合ジョブのパイプラインに\n" " ある全てのプロセスを待ちます。\n" @@ -4649,29 +4984,42 @@ msgstr "" " 最後の ID の終了ステータスを返します。IDが無効であるか、無効なオプ\n" " ションが与えられた場合には失敗を返します。" -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "プロセスの実行完了を待ち、終了ステータスを返します。\n" " \n" -" PIDで指定された各プロレスを待ち、その終了ステータスを返します。PID が与えられ\n" +" PIDで指定された各プロレスを待ち、その終了ステータスを返します。PID が与え" +"られ\n" " ない場合、現在アクティブな全ての子プロセスを待ち、0 を返します。PID は\n" " プロセスIDでなければいけません。\n" " \n" " 終了ステータス:\n" -" 最後の PID の終了ステータスを返します。PIDが無効か、無効なオプションが与えられた\n" +" 最後の PID の終了ステータスを返します。PIDが無効か、無効なオプションが与" +"えられた\n" " 場合は失敗します。" -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4692,7 +5040,7 @@ msgstr "" " 終了ステータス:\n" " 最後に実行したコマンドのステータスを返します。" -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4722,7 +5070,7 @@ msgstr "" " 終了ステータス:\n" " 最後に実行したコマンドのステータスを返します。" -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4757,7 +5105,7 @@ msgstr "" " 終了ステータス:\n" " 最後に実行したコマンドのステータスを返します。" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4785,7 +5133,7 @@ msgstr "" " 終了ステータス:\n" " PIPELINE の戻り値が終了ステータスとなります。" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4797,22 +5145,28 @@ msgid "" msgstr "" "パターン一致の結果に基づいてコマンドを実行します。\n" " \n" -" WORD が PATTERN に一致するかどうかに基づいて選択的に COMMANDS を実行します。\n" +" WORD が PATTERN に一致するかどうかに基づいて選択的に COMMANDS を実行しま" +"す。\n" " 複数のパターンを区切るために `|' が使用されます。\n" " \n" " 終了ステータス:\n" " 最後に実行したコマンドのステータスを返します。" -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4820,22 +5174,25 @@ msgid "" msgstr "" "条件に従ってコマンドを実行します。\n" " \n" -" `if COMMANDS' を実行します。この終了ステータスが 0 の場合、`then COMMANDS'\n" +" `if COMMANDS' を実行します。この終了ステータスが 0 の場合、`then " +"COMMANDS'\n" " を実行します。そうでない場合は、各 `elif COMMANDS' を順番に実行し、その\n" " 終了ステータスが 0 の場合に、関連した `then COMMANDS' を実行し、if 文が\n" " 完了します。それ以外の場合、 `else COMMANDS' が存在する場合には実行され\n" -" ます。文全体の終了ステータスは、最後に実行したコマンドの終了ステータスか、\n" +" ます。文全体の終了ステータスは、最後に実行したコマンドの終了ステータス" +"か、\n" " または、テストした条件に true となるものが無い場合は 0 です。\n" " \n" " 終了ステータス:\n" " 最後に実行したコマンドの終了ステータスを返します。" -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4849,12 +5206,13 @@ msgstr "" " 終了ステータス:\n" " 最後に実行したコマンドのステータスを返します。" -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4868,7 +5226,7 @@ msgstr "" " 終了ステータス:\n" " 最後に実行したコマンドのステータスを返します。" -#: builtins.c:1672 +#: builtins.c:1712 #, fuzzy msgid "" "Create a coprocess named NAME.\n" @@ -4891,12 +5249,13 @@ msgstr "" " 終了ステータス:\n" " COMMAND の終了ステータスを返します。" -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4905,15 +5264,17 @@ msgid "" msgstr "" "シェル関数を定義します。\n" " \n" -" NAME という名前のシェル関数を作成します。単にコマンドとして起動された時は\n" -" NAME は COMMANDs をシェルのコンテキスト内で呼び出します。NAME を起動した\n" +" NAME という名前のシェル関数を作成します。単にコマンドとして起動された時" +"は\n" +" NAME は COMMANDs をシェルのコンテキスト内で呼び出します。NAME を起動し" +"た\n" " 時に引数は関数に $1...$n という位置パラメーターで、関数名は $FUNCNAME\n" " 変数として渡されます。\n" " \n" " 終了ステータス:\n" " NAME が読み取り専用でない限り成功を返します。" -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4931,7 +5292,7 @@ msgstr "" " 終了ステータス:\n" " 最後に実行したコマンドのステータスを返します。" -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4954,7 +5315,7 @@ msgstr "" " 終了ステータス:\n" " 再開されたジョブの終了ステータスを返します。" -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4972,13 +5333,16 @@ msgstr "" " 終了ステータス:\n" " EXPRESSION の評価値が 0 の場合は 1、それ以外は 0 を返します。" -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5005,14 +5369,17 @@ msgstr "" " ( EXPRESSION )\tEXPRESSION の値を返します\n" " ! EXPRESSION\t\tEXPRESSION が true の時 false を返します。それ\n" " \t\t以外は false を返します\n" -" EXPR1 && EXPR2\tEXPR1 および EXPR2 の両方が true の時 true を返します。\n" +" EXPR1 && EXPR2\tEXPR1 および EXPR2 の両方が true の時 true を返しま" +"す。\n" " \tそれ以外は false を返します。\n" " EXPR1 || EXPR2\tEXPR1 および EXPR2 のいずれかが true の時 true を返し\n" " \tます。それ以外は false を返します。\n" " \n" -" `==' および `!=' 演算子が使用された場合、演算子の右側の文字列をパターンと\n" +" `==' および `!=' 演算子が使用された場合、演算子の右側の文字列をパターン" +"と\n" " した左側の文字列に対するパターン一致処理が行われます。\n" -" `=~' 演算子が使用された場合、演算子の右側の文字列が正規表現として扱われま\n" +" `=~' 演算子が使用された場合、演算子の右側の文字列が正規表現として扱われ" +"ま\n" " す。\n" " \n" " && および || 演算子は EXPR1 で式の値を決定するのに十分な場合は EXPR2 を\n" @@ -5021,7 +5388,7 @@ msgstr "" " 終了ステータス:\n" " EXPRESSION の値に基づいて 0 または 1 を返します。" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5122,7 +5489,7 @@ msgstr "" " HISTIGNORE\tヒストリ一覧に保存されるコマンドを決める時に使用される\n" " \t\tコロン (:) で区切られたパターンの一覧。\n" -#: builtins.c:1822 +#: builtins.c:1862 #, fuzzy msgid "" "Add directories to stack.\n" @@ -5182,7 +5549,7 @@ msgstr "" " 無効な引数が与えられるかディレクトリ変更が失敗しない限り成功を\n" " 返します。" -#: builtins.c:1856 +#: builtins.c:1896 #, fuzzy msgid "" "Remove directories from stack.\n" @@ -5212,7 +5579,8 @@ msgstr "" "ディレクトリスタックからディレクトリを削除します。\n" " \n" " ディレクトリスタックから要素を削除します。引数がない場合、ディレクトリ\n" -" スタックの先頭から削除し、新しいスタック先頭のディレクトリに移動します。\n" +" スタックの先頭から削除し、新しいスタック先頭のディレクトリに移動しま" +"す。\n" " \n" " オプション:\n" " -n\tスタックからディレクトリを削除した時、通常のディレクトリ変\n" @@ -5233,7 +5601,7 @@ msgstr "" " 無効な引数が与えられるかディレクトリ変更が失敗しない限り成功を\n" " 返します。" -#: builtins.c:1886 +#: builtins.c:1926 #, fuzzy msgid "" "Display directory stack.\n" @@ -5286,7 +5654,7 @@ msgstr "" " 終了ステータス:\n" " 無効なオプションが与えられるかエラーが発生しない限り成功を返します。" -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy msgid "" "Set and unset shell options.\n" @@ -5322,7 +5690,7 @@ msgstr "" " OPTNAME が有効な場合は成功を返します。無効なオプションが与えられた場合\n" " または OPTNAME が無効な場合は失敗を返します。" -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5331,61 +5699,79 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "ARGUMENTS を FORMAT で書式整形して表示します。\n" " \n" " オプション:\n" -" -v var\t標準出力に表示するのではなく、出力をシェル変数 VAR に代入します\n" +" -v var\t標準出力に表示するのではなく、出力をシェル変数 VAR に代入しま" +"す\n" " \n" -" FORMAT は次の3種類のオブジェクトを含む文字列です。一つ目は普通の文字で単に\n" -" 標準出力にコピーされます。二つ目はエスケープ文字で変換された後標準出力に\n" -" コピーされます。三つ目は書式指定文字で、各文字は後に続く引数を表示します。\n" +" FORMAT は次の3種類のオブジェクトを含む文字列です。一つ目は普通の文字で単" +"に\n" +" 標準出力にコピーされます。二つ目はエスケープ文字で変換された後標準出力" +"に\n" +" コピーされます。三つ目は書式指定文字で、各文字は後に続く引数を表示しま" +"す。\n" " \n" -" printf(1) に記述される標準の書式指定に加えて、printf は次の文字を解釈します。\n" +" printf(1) に記述される標準の書式指定に加えて、printf は次の文字を解釈しま" +"す。\n" " \n" " %b\t対応する引数のバックスラッシュエスケープ文字を展開する\n" " %q\tシェル入力として引数をクオートする\n" -" %(fmt)T FMT を strftime(3) 用の書式文字列として日付と時間の文字列を出力する\n" +" %(fmt)T FMT を strftime(3) 用の書式文字列として日付と時間の文字列を出" +"力する\n" " \n" -" FORMAT はすべての ARGUMENTS を使い切る必要があります。FORMATが必要とする\n" -" ARGUMENTS より少ない場合、残りの書式指定は値が 0 または null 文字列が適切\n" +" FORMAT はすべての ARGUMENTS を使い切る必要があります。FORMATが必要とす" +"る\n" +" ARGUMENTS より少ない場合、残りの書式指定は値が 0 または null 文字列が適" +"切\n" " に与えられているかのように動作します。\n" "\n" " 終了ステータス:\n" -" 無効な引数が与えられるか、書き込み、代入エラーが発生しない限り成功を返します。" +" 無効な引数が与えられるか、書き込み、代入エラーが発生しない限り成功を返し" +"ます。" -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5399,16 +5785,20 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "引数が Readline によってどのように補完されるかを指定します。\n" " \n" -" 各 NAME に対してどのように引数が補完されるかを指定します。オプションが与え\n" -" られない場合、既存の補完指定が入力として再利用可能な形式で表示されます。\n" +" 各 NAME に対してどのように引数が補完されるかを指定します。オプションが与" +"え\n" +" られない場合、既存の補完指定が入力として再利用可能な形式で表示されま" +"す。\n" " \n" " \n" " オプション:\n" @@ -5426,34 +5816,44 @@ msgstr "" " 終了ステータス:\n" " 無効なオプションが与えられるかエラーが発生しない限り成功を返します。" -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "オプションに基づいた補完候補を表示します。\n" " \n" -" シェル関数の中で補完候補を生成するために使用するように意図されています。\n" +" シェル関数の中で補完候補を生成するために使用するように意図されていま" +"す。\n" " オプション引数 WORD が与えられた場合、WORD に対して一致した候補が生成\n" " されます。\n" " \n" " 終了ステータス:\n" " 無効なオプションが与えられるかエラーが発生しない限り成功を返します。" -#: builtins.c:2019 +#: builtins.c:2062 #, fuzzy 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" @@ -5490,31 +5890,38 @@ msgstr "" " \n" " 引数:\n" " \n" -" 各 NAME は `complete' 組み込み関数を使って事前に定義された補完指定をコマ\n" +" 各 NAME は `complete' 組み込み関数を使って事前に定義された補完指定をコ" +"マ\n" " ンドを指し示さなければなりません。NAME が与えられない場合、compopt は\n" " 補完をこれから生成する関数から呼び出されなければいけません。そして\n" " 補完をこれから生成する関数に対するオプションが変更されます。\n" " \n" " 終了ステータス:\n" -" 無効なオプションが与えられるか、 NAME が補完指定として定義されていない場合\n" +" 無効なオプションが与えられるか、 NAME が補完指定として定義されていない場" +"合\n" " を除き、成功を返します。" -#: builtins.c:2050 +#: builtins.c:2093 #, fuzzy msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5527,21 +5934,26 @@ 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" " \n" -" 標準入力、-u オプションが与えられた場合はファイル記述子 FD から行を読み込み、\n" -" インデックス型配列変数 ARRAY に代入します。変数 ARRAY のデフォルトは MAPFILE\n" +" 標準入力、-u オプションが与えられた場合はファイル記述子 FD から行を読み込" +"み、\n" +" インデックス型配列変数 ARRAY に代入します。変数 ARRAY のデフォルトは " +"MAPFILE\n" " です。\n" " \n" " オプション:\n" -" -n count\t最大 COUNT 行をコピーする。COUNT が 0 の場合、全ての行をコピーする\n" +" -n count\t最大 COUNT 行をコピーする。COUNT が 0 の場合、全ての行をコ" +"ピーする\n" " -O origin\t配列の開始番号を ORIGIN にする。デフォルトは 0\n" " -s count \t最初の COUNT 行の読み込みを破棄する\n" " -t\t\t各行を読み込んだ時に最後の改行を削除する\n" @@ -5552,17 +5964,21 @@ msgstr "" " 引数:\n" " ARRAY\t\tデータを保存するために使用する配列変数名\n" " \n" -" もし -c が指定されずに -C が与えられた場合、デフォルトの quantum は 5000 です。\n" -" CALLBACK が評価された時、代入される配列の次要素のインデックスと、要素に代入さ\n" +" もし -c が指定されずに -C が与えられた場合、デフォルトの quantum は 5000 " +"です。\n" +" CALLBACK が評価された時、代入される配列の次要素のインデックスと、要素に代" +"入さ\n" " れる行が追加の引数として渡されます。\n" " \n" -" 明示的に開始番号が与えられない場合、mapfile は代入前に ARRAY を空にします。\n" +" 明示的に開始番号が与えられない場合、mapfile は代入前に ARRAY を空にしま" +"す。\n" " \n" " 終了ステータス:\n" -" 無効なオプションが与えられる、配列が読み取り専用、またはインデックス型配列で無い\n" +" 無効なオプションが与えられる、配列が読み取り専用、またはインデックス型配" +"列で無い\n" " 場合を除き成功を返します。" -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5571,3 +5987,30 @@ msgstr "" "ファイルから行を読み込み配列変数に代入します。\n" " \n" " `mapfile'の別名です。" + +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "現在のサブルーチン呼び出しのコンテキストを返します。\n" +#~ " \n" +#~ " EXPR が無い場合 \"$line $filename\" を返します。 EXPR がある場合、\n" +#~ " \"$line $subroutine $filename\" を返します。この追加の情報はスタックト" +#~ "レース\n" +#~ " を提供する時に利用します。\n" +#~ " \n" +#~ " EXPR の値は現在のフレームに戻るまでに何回フレームが呼び出されているか" +#~ "を\n" +#~ " 意味します。最上位のフレームは 0 です。" + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "警告: %s: %s" diff --git a/po/ko.gmo b/po/ko.gmo index 413987f0a51ae7e1b324b0d14b48cc92f177405a..01558c0b72243f722b872d7a63e1c7dfab862791 100644 GIT binary patch delta 12628 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 Umb+W^+BsVvwVFB8k6Pvb1_(8L-2eap delta 50539 zc-obH349dw_4v#x=;B@EkjoK4K(pcSLXL0-2|~aSK#K^QWD*uOyJ3$&EbRmd8X;C7 zgb9*h5Rk*DfdmKw;#IWXSF6=pYpb@hn|jpN{@Ysr@A!V_*d(^Ud|ck{%=dWT_kH*G z&G_}}=QbZW&-mSs&aP45Z@x!S`T>09M~c$_EJay8SfRf!M=HwI0KWnVx0HUP6lEO1 z;Q$8#3<B&1a1+1_0oDQR3h+^Y0{|WZcqza)0bUO9Gk`q-cD+_ndMJva^oK8AxNt4N zO8}0)mK)3#u<%+Q=%?a$-L;HJGr;};PXoLN;3ohzfZtrp2=us4QMx0-0DA!(0kAK? z=>UfUEC4th=2z~AFJs}t$?JGU{}138fCH}QiEh81Ck_g@_Ie)RL4ZR5J_m3hz{K^u z(hF~3N?v&bBRCNt;H2Dn121s%4UFh+fLFo%$}jK>z~l{x5nz2I!znisiIk{-_W?`? z_|T0^k=JhIiQ8^u#4aAKDAxcSGMXov3$QmpeKe2vv(Zd}$44__F99@=M1LO51O0n6 zlkD=FU@+X0o4DcBo48}%O^nFTZsPV^ZsLKDitB$8@VlFsa@~Q9K7dz^;p@3$m@>=8 z@c8$R0s3DCUuwmLLt~gpo*Tn^_Qx?y(tnNNm0UcQ2N(u$7{F;`nGz)c`v81kEK}mZ zSVrKPu{_Q@V|ii8vAiJUVBCTM<ADBGz?TW*7(+imL}(?zH00`WJkV33!<*xHg0BHy z0MI)g7z<#p@w_$D$1|l?itE+mc|p&QX9PYO&*S}LJTvWiMh0K#o52I8XE4T@8H~uH z3|{%l3|`^J44(MW3|`5x44&ZK4CbM4Gk75bCh-01Ch!*JOyKKx3s^gWDQG-Cfl2t@ z1eV`#C-6XBCo<RiCNjzW6M1Dno5)-8Ai(ngJ~5Ho9|s6(L;1r*-pbD=it#2g!d)lv z0xty!?4eu(@Jf__UEH{D5_4_CBp&z>z)xYsrvOd|xI2?c);68tchkAu1zErcDo`tn zCtNav?}q`Nk1L$P?W$(5o~ae^VSxYa0{h=MgZF0d99RXYvf}{HMUpR66i|9fIly9= z;Lt)ISX-nhr{MPpfW1I#et9Qs6Z}5c4^#w13-f@};rfI^pxoIYB}*0MF}Qv(s3^B} zQIy3cuzI-P8dsE=26X&nrK0SIfk&1B38CQ!04D(aXtko8jpA6&2n{M{1bhHvaDP0& zZ;(=JfwN)Yy%mb`BrJK$dPUiR8q|bEz(jum_$_ME2SK@^BH9k33h=f%piU7qm{<=S z4Hx!3q$qJfXnO-t1>hwQ17qP9>{66c_`P+nqMU;y2W(fPiUs&<)Mx-J0R|4RE%^EX zGwpW(M+0I#A7$p9-NbNN6Epp~CfNT8xF>MoWn{u8=7rq{d4S^wxx+gLS^T~@$a{M6 zA=dHz4>3gs9pXK`?hsQd;}CD@%>phI_rs!J8Nh7Z+C#AaYk&f;!-W|@>st>i%CBIF zb;m&dVa1VWfXo0NdKSnB9X@=HnQZFw@PT%70p0`mYhM;y^(t^aU@!>a9F%V$&nlq6 z9lvHK{M82lfubJ++y=1C_#J2~RE2+lRl-1{{s_te5IW~mMftf0bu(|p180CY0FFz7 zQUW-!4Y(d|zx5Y}mwf@u1lN}UJPq)%FJXTH#=hn)d-bnO@?QbWfQkPM@Dmu{7y_J; z1})D2Cm0&IaFePk7kQ9lRizII^2si$@?+eZ9;&hgXm@Q-Rhf#qzn@B^{|!LES@|3w zlK9pBs*(q!co!f}JZ7Lu`d~6Z+={sXQGXNxJP+l6HGG*3m{tNrN8`OKRbryE2C1aM zE(D0YkS1Uz!0VBV2XVhG04Jkr9jq$90#XmTihqB1jjCj#`GtMNmEQvp711_;xP^NG z{?r5ee<Y1DyKcCu+=e=QI8VHDI3sjwICnfF;6DJi!V0^NP?hz7z^Utaz!^8F%ID}W z0Nj5znr|MrZLCTvT^+{@yKEd&WDvkh(EeW!Ur+_#3=qApLV)OqQ~^W><KQ?R=r`hi z+c>5~ci>F45orL?_)G(c(h?uf<81_p#_b7!sKVa_h${Rq08xs%WvGgQ;?^sJCrSs1 zR%?C+4{$F))YXpwM6vokKvdD614N_quM9@C?*vA0;sjn<?gXZkK7sp10iumqJ%Q)h z1rTk^%M(<CCis2=4}8-^RRJeRxkbRc0al}xo5(AiHAyAcZ1p4_;OHb~y2K==$loUM ziZ7hZ2#lD_?J_3wf+7INqge-tj>+qj4PME2lNq!AQyA0CDZKYV0Zo8tE}s=JIfb{P z=TwH{0HT7*1Bf<bEkLkt%3<;QH&c1s^D-HZ67Y5-lexJ(lUH~olbPw$Oy09^GI>Rp zOk;TMG^W73X?%a<G~V;arZEC9PU9{7d>T*O=VqqhOn`fE3vXt`?wPKV6Kfop&U^Uw zbY_Zwh~HhZxZ%}VOquK~mgiD{bI}jTVuatyV$!NJRB|jd0dD|^yft$MQ!IZ5Z^`{L zSh}{)Af7RlW1_>WGnkwI2oPPb?`AM*ufBzU&$)$v|MV87(5_n;fkOb%hI|YVz27Tl zGSkhP$qSl4lNC<>Ode;|OlH<SGjV|+f5+g<MAYpw8N&gyn6zoLn6z25m{|&D@c^4= zF-1;^`+u6nh<LL3{>W_J+dH$Fch+U|mNaEEQ-2H)Z9{L+UPDp-1G9PWHqT~KHP2=- z`fxT=<Szix-9C2?uk;##xd4~X;dW2YVG6!EhZpcCfTK|w0M19TzLgPLcPk^_2=F?z zssIh-es2zIs9`xwvPn729N9UnI#=efc&*P7q|afJ9?Ic~U&vtuKNS6yxy;lT0Gy41 z%v=`lY615E?1JJu7vvx1_vBoj;04j~_j6e+d*(9J-H^+wGef|vT;A*4Tvkx!05ODn zGMAb6@43umedno40qT``e0|3}X4dECk?~RfFwfvGf0@S!{Bs_6>^`5jWaNC_<DB`t z(&G6{^0fe`qZORb6!~yI^GtF+Q^31`Dc5rWQ)bu#MtJ4|R>7+laKA0a0`9PD0q;rE z0$$;#3)swlxq$cl`rDYf;<qvPK71RC*AalDP<n1-{h-{=6AlzG^LA#wrMENbx82SQ zdh~YIoW^PR5{55t+|C$J{IN=&&fFif0(lZ31`x>~GjsM^$kH%vA*<HdLT1u^3z^BD zUC0Q1zL2-F-yMv2&K<lkL%{WS(D;T@17EUm@9$s=T(U@5Gk_Vm;zi7iEsJ=d4+ZRY zC$H?rI~lR10MV!0d?&B$<2!k46L<1fetRcVr1xUpg0YJcage_Si+KxH2>7$bypj!z z*;pJ}%q07AF>A#0mN4muFJW<-wuE^mB(7I2VP4p^gb{su2_x9Hgqg3GpPBInfIU$D z7y22~6@K1=p9;9q&lvCWv*I}IXUxCz^Mse>smiTLfjm|;_vJAHEqRQ<%XzFZ|D4AZ zy)d7*ZalynQGWn5aNu3}yl3y{^PXQ&zynSw;1w(r&@5mvd%l1vq3A50gLIaTG@ZqE zvd;JObe5`nbY8$iIwSULow@(7I><jx<SFEp`U-h~IfdMzq>%S=Zy`II2Mc)x&j|QM zAy3r5i0@A-;w`yVz_KFY$`$d1rvRP+m+iG8UdV=k!6bVjz|P|D0=)NwmNA#!vW&%T z{xa5B%a$=^N|rI#Z(qhFKD>-6_rWqo=z`_Eg(H_UWu`9Y_CH?E6o@Tn1UDJW8N*}C znaSQ=&QkF8a%PqxK}KjAK#W|9gG{MdkmcPJzmEl($$lGTvFr*F>nwD?i&;u40nWg7 z#k`=iL(EG??+_z!U5MT0oDlOuO^C(r#SrWIuR@G**Dz0%4sZ$vkzwBBx-f6qVF8l@ zURlBp%Z~-DDPan{!O&3J#Eot%c;L(xytm;M+^~KH-+yuillpHfn8bY}ywV8~{vC}l zf@Xxb^i+gb{_6<K|2a|St)T!hfjK>jh=csCi!up!L|J1!6J?eAZIt)!#u%?~R*VNI zjPbzt#2BHY;{Jy*M)>bBCT;gP+lt|F-pYvrE{?Oc{TaY3Q2w`y8?A9B`Mcsb#@q-m zFXag`O1a|#aXnnhJoEEXUcmlR=80EIS;73Jlvmz;CAYtBC9CqeE13t@0yL1>%#}Rw zD=S$8ezKCS)mH-cU&SlRTE(7{zKRigL|i{5;0FSJyNY?Hdl~;8TE>){Dt;FTSY8J5 zkC@h#F{z&^V@%&I<CXlqj49IlF8)2~F6M=NfH&io-NlG}b{7x${awsEeSgBdl=Tz# zh@wAXjko3}EceHL!W8@4PYh<7-mAqPt!72Ccr`Z&1H`P>=GAOIx2|T=?OV+QpIFTk zzqFdA;j`7uTvz{;d7<d1OwkGfHvx=6Y`6p9AsD#3aW}90^g5pSx9fP|B*0yuss6c+ zC*E-{Z&A~|%v3K5_?vr0aC$E*tbYL1K_{P8$rKAb0IC~i-tYkHkJjz1s7?Xg0^=KB zZ5QEjJ;(jq0L}oo{~=Y`4Gq5836uehw*fZKV%BP}s+7U+pBzw?_W=IwaaAdXkzZ?8 zl_%i-xF=NwbeEC@J$oAU!&9nK11r7!6fhgW!_P7z*PkYY4P_jEQEmoU2?OQ;JO>8& z;3Xg-wEW}C5Kg1=eoIw;fw|q^LzoQ{m3$1$3GIITiK={w3;0x3K0{~qGe+djKLOLh z{R_{iltD>Ps7eyYg@1OzJTLx5RgMDxDZ#(8ks0(iRe2OO8^A8m@O^;I=#2iINxbD- z-hzh#J_yF($!}Sw&-;#fAp9L~$%gOP5vc>%6~;+?$Gr9Re;8i!J;M>-3;Cb@J#+Dj z@0l0Yf6vyc;d`dc6W?=0^W^u;e9wK)2)+9~Gu5Zx^8&v9p55(#1AHGSFjMg;zl4<z zIm@GrfC0Wb$D`Z_2o1d0qkv1GG+yFSjJu%2McqB5NY(?afrfhkBJ+*y=b?c=>hDn= z1WY~$h`FGOp&sS0ur(h6L`2>m?oqa5RtuncHXhY@l-DsoINC$mwNC+JwyS8YhZ3CX z1djqkD_tgg45c4pG}WWP_9zoFJ<2?caBgO}2H-Kc{w}~*0dC6jD4zpdd<!F%HOoU= zFc;uMFmN%z(*Q5H)uX%wQt(c$M;Q&jAG*V%=rG}Xi#^JfAWj*19%UsuC{e?s9E6p; zAN7z<ue!@aBs~cb+%@GTfGC#NtoA6cz{<t~MD9HomW5Jt5kTCMfdbwD5VvdwKoBft z9zgV*zPg(c9<bI!DtRbCH0xOgd_mP%0uasbMu5PW%G&^!p*y|KqudB9@!jK5N>KIQ z?@?lC)c~S`x#i~`;+dra{tVy{Sn(Es$gC$ed6eZC>j6X!IB_%2vuZQ9H;#)hZvvbS zT>U42|H15bt%t4GgC6By*b(3*K!I`FdE)Gccm>NJVhU{rh>Ggrhj>d`9^#e01`s`_ zF94!y?$h8QjXND+f0X|c_=3^u&l|Yo3k}@yV}PisJUjXKbvv0!=k4V7CF1&ifT*fp z+Q|sF0YtyxKcfAphdq=bo%Jxc+X4_(_0flMD?$GL^)Pqz?DCMx><$p+`TAW<!dnFl z?BYFMvy0o;07N762tahN-vEdn&-Vb)O5U)W`>ou~*B=n@G{9%jjmO_8|EKnND2o02 z9v*1KBRs+4M;POhN0@}w0MV>I1rQ^qw*jK{?7!DTiOb0VC!tdc@D_AP0AiwH*gg*h zGI#A`1X}m;d|v=G(AOKb-$S0y9RRPRd_Kb$_VXV9dp}Qj<pCyLF+dE>4jy1;`tkq| zc<rMe@}i3$<=@Q!(OkDZ$`l>i$kH&ik;h-r2=b2?9%*Efz1_&nap_|oPOCk}zw;hr z1lI$^i05g5#{mB5aSxpvyz)2?T>Au5@E1?;R(|sYZ&}YKzJ4`8bZBmG;)ShiGFYA) zo0w^un|MWkYT}8nKIkFmGUp&OQ|Un_`6hr!xg!8kRevt-{{tYUW)Jc2v_t&+=0i;S zC5L!R%|pyPPa5LFCx=*k&S_>0F9V4FdS){twy~MT?D=L^x$iXdz<+3FQvR!%#d1W8 zhm6ZCfO(j}Y+(w#-oh05V+&KF%VFLs<GRDVS9cxey=pnk1AhS!U8Qr6@B~wjusD_- zVFVvN!aVTq5vEwrqaMnL+<uf1e)uT2|F!siZmWmf@^P(9nYpdR)P@p*FAFd;0dNJX z%2r-s{xOCt1T>B@kK7Lsvs$km<2@YwB=gG5CmE5*ldMq>Kglcqm4Kf=$twQ4Ct2a8 zA4fz${-z%128)lgctwwsW>PATGesUb&NkuW<17V#0k{s}=o389Qzw|a-#Nj&^d&$H z=f6F{lsxOC2TZY|^gGFj22S#V9so%B|9WxZiIYsSlP6iszBtJwz4j?y>FTE#v0YCw z0?$0f1Kxa!_qO;H8=nUReDD<W#2#_~*;A}XJ~_qXT=X=^KQ{0^%`2GkG;cxS)2zAP zdzwl4<<rcZ7eB*$H}DzeiSf^{6hxk3@!azatK<&=VqW0i&#<aK`&m|K<DX?!oDC2? zq?%_z{;|O)&oYMnpW`i<@Emu{eU8QO{^yu$4?icQ<vF%y=RD6$HQ{+?viZ-mnOzSM zUAZmK^A=6~g-5v;@Bf0C{dd1$P1*aj!7KUkX`bML(|qHp(@Y}e1rG%p172WWD13oc z>CP9J89#b~C)8eKl3)EIQ{sAnm_=LuBJ<2!FS0cC`z4Qm8$b-j9yET*n7<_8e}2g; z8}*Whg3x6zu?|1*5>NE6mzb1YUS^)?`7$e{@h>y!^Im2vy7pye+WME7w+_6_6mET) z$9?~0-eRNAE4=rkUg5pYeuWVTy~3n_<P~oC+ABQaXRolTz2H@bV_sz@EP9pg`~9zS z`{S>&hxGQVJpO0my5}{fbf4E~iwz~~HJ<41*La`<udx)o@fwrJ^SZF(uk%W0z0O+} zd7bxi@9VrZAHU8DsoxvCfQ4`H{pvTENnd?~$5q~BN{=E4@>lpKljOlSS+l+WChPRB zZ?X9Fc#CboC;{ic#Vfz-E#`&2Z!wd7`WA1^zuscR&wra&I__;oeEHjKmNx=KcmB5k zFGTtO^lfIQZv?#l9iFK49TvL>-(d<hzQZJb=N;Zl&#xHKK>$^BR1~iN!9z$0E0s6l z^9Xz(CMB`Mzmuo|#rK^U{~^h*f-h6>a9QOWw~Gdk<G!J06u+<ZF#H(F32g_6_7}qS z>&5q7m_>)rPY^-T&ja_uiv9N*GAg$>lo9YHBsy<Z`7}HTaFxnc3ivk&MjDRs0Y*z6 zt`+bC9Pi;mB=iOP!uJcI4W4#s0Iz@#I<lxiGvMBzR2zW`_+EwLjQdYTWvCt%uJ^z{ z2<?<P@F_xn58&14l8bxY#6YFu_fq)%JICrqz+_|LTAQkn-p9X-Rjvm(4iKU<1%hI# zv>1Z>pY6b`90Nr0`vxp3fx#fCQGSm~NwkTeW)y88l2U#vzGJ`wVZU+*d^W;ojAPtB z@cm)TBdA;vfk_RN7UR#D;Sw8#I{654s_2NtCAV?4lmgMV@`||rfn#7aC~t}H|3Q}u zofk3QWN5blKE-@4K@JHm4DNpgzjIWizxW#n7n<Q?DqKE8Nkql{ht)DyiNRG-u$TeY zAZ#Ry`7_)e4_CVk2DlIIO%{Ds_+BBtFTu<zZV}G^Q*p6Dtm-DmgrAFR5N}d_$3yUY z1A4LoiC@5Ph)I<~(QdAQ=~z`G+F<R_wHUlATtT&$a~bqE5m%%^!>y>P;QLyv-GI*^ zlv&(+g{z|KQPq05yykj<KZ5(^@VQ^%!jcfidhq)TlpM?l0bC<jp}MK~5yl8u)PfY9 z0AKzHpM~Nkrd}{7K;<?VcEMy9z_s5hT-UWh4E9feN8s}j7NcOW;g|%Xb>%lISJvSl zMB~b>;{LAyJ`SIMphV&R<6-g@m?RL5pFpS5G1!v=(m4QJzZBa38sMwq`b>|)hY{j$ z2Hd+37XsHOd+h5y;ri3?=_0OSa_dgq|1F{cI-#ha=RkuK;@af`krrf5acwNzpQm!+ z(O{KpK~IWyXD}s)+l7NW7BL+992LLON1X2A%BeEk|9i!aCWWh=E>pSoFIRMqV^FDZ z9T0l3FQLN%-`~MipkYF5DaOFu0D4fbi{IVR24D=Sa^VvGVZHD9f(pj_q9I14+r;;S zsOufrqqRe4A_t`aRVsY`Chm0?17ThWtsR=?=g?|;xPqzxvmkg3hwdGG9|_mzi@ra> z{htIEF|XGZE7j0Fc1(N+e155LeP0%Q{*AxI{Vk4mL4~WF28rKjjt`6bJ^^18aI}E$ zq5r4a`iGK(eZ*=oW%3^U#`>NtrTrhKV)7L(vAo8?WM#N|F~Nrl7o)wVa&>iIas6Ka zZ^p%_=>I8P_jRopWQ-W7l26x^ZH`HMLz@TTS_5)97AnK{H^jZ?F^_;QxR~Vc=mX$h z!|yN2&Vn&ReF2{rMW0Dn|MjfO)r?a;Tv&$Q?m!RM`>jP~gZf_}hk@l%Bq4@nSX_qb zRLq(IY(YK|?Y@KG+3@{5fLNlnOiB(KFO^ICHVgivMB!qA^<m5dA(OyoKYVV4&kN{< zV+EWTBr4jrs#vV1P=1i)9wxj5KF^?zK=E|&M^CtZ98)oH?MLu^rMSKa=`sv1o(C5X z;y%IW9#lF2H#-JE7y5E&b3o-XJoIESTRs)O{~nDNeENI1#7_QgL>^JOHWcebzY*hM z!V^<`9=LWN%741JG0(#_xu2pt2H&HO!G=rD7H$8GnoNBEE2>p-AL~2o)b<QJ3a;%# zz5p1&GiHDoAsJ2Z<vR3mV8UIZ<5$SlxKg-=(aL)1#lUYJR{(Gks$|iAoq%^aCdRUh zTFi)u-&jSt3_dSo!7JJvx&NtuwJF$RK<a}D{|eXr=+^^0A3meu+97G41>BC}g-)yZ zjRDON!IT)hJdN%>Iy{)5K+Wr%zg6LiXZ(8%GaO=&gn*x5?oQ#dN-|UezNv8OCH}pl zu-ki+nDlEg9-bXzx+N^yT>$roqT_=5zh5-MdXKZ=#sip}$I~fXF?@c8#mAVj6zyg^ zsIwC#M&Wv2toxknaZ?ZDg#mEw4-Tqg>25FaI|u)H34Z)R-24*0&w|f*@%wA|{ye7O z6|QtWS9BZ(gLW0)f9Du%l&AUe;UApaE2bCe5lvrJ649g4Ksbb7_54_K`RMJQUc~{p z7An&6!$G(c)l2*le=Hnn?m4#K1%^LVq-(LIx)xok2ZP$maAY~QEeJ%Qe>hT>-c5r) z`e({gt8soj64663yO|aXYg4mw(lsp?ZWri<{&+BkSF}KsdX)Nuaa{`+;tv{a`s`Vm zTGXIfOZ}06KQE{|Cd;Khd|8_^b<U*R={Rg4r1N-D-5<$cs+IU-OSQsqgs$1x<cC8s ze;@=ap}`olNx_&N3Hf7zQoE^9riJ{)FlHbmXYogLNhG~M%PZ6Tf^tL03}XZ*X`wh^ zZBK_o$c0AnyFc17nE;EdLLy6^UK9vLyBRp%$^b0FuSJ9Y=u&Oy@L_4#*}@0L4TWP` zJgOHs=#y2LvSiV$FdPpRq-p+8fn!(0B{5`*CHVzN&c#62=n(7>)x)tg8V=jS-WT9i ze>55|hNZ)n=II(BX6*y6GhNK>kJ;Ck!g~F@#XMXf78N@V<00m>N3ibd74P&lW_saQ zJ|I_CoEHuT^0i<fv^*;2D+~vN;gx#97!7zi94xh)(a2seH-`N}GWrW)PqmUrIA3Qb z2cpLOA^3&7wj@1$2=&r5-yARCLF+V1mX<{W`F`gPMq`n9ek=}KkDC#W#{?ddgS=ih zvhA_cTzKW_utZ&SO+ioV5I@};;4Ssdss8=Eo}N%a^*#Fr8Ct$Sg!`I@QUz-*1_>z8 zqVaqju@Km>EDeM`5F@<Be171Bknb)%5{7m8WAUh*W1<%oKv^`V7e{#uqw$iGa3lsB zmZqWdKyLMGg@GUwLNoMLF+EhE7s#Pwu}B~<9@CLcpk+rQN2{PA?AC6<mii$;o6eL@ zA!HhkA1JKuvA>UjWWu(Bjx3cCy*OMdXA2Yq!v;WLgJrmk(m*&KCEY-hnIA4L35Q^5 zgg~A@e>qMo1x_dr5=cTnOcH9#TJ_jPeTqhCfes`tpH!ldH)t?u&Vs2dSTWZgX)8gX zyD=Y1kr-?5QWyq~tPDi;^ycByKj=0hTv8SZ6fKQuL#GVWMvWLXN}CqZb!~3AFt!ra z(=-%vKgx8PmKDlRZ$5YKd6%eqb;E`p8HnT3K$I{H0(9t%!hA~{Vf}a$7Y~Gs5&jX~ zM?)AL4>2t(XKpSvoH+@;0AC_ghT_F}dIVMs_9jqRCO0I4bV<YExtnP1r;$L|pj{de zB>*bCSoeomT^5G{qli8<AGr`Vtr#b>_k|b|xmFHR{lu>a7`m33J!w{^H>w9=U&NTW zCfwIBt`;=bRGZ<ZP05^^l`B*%ex03@CYYNpl?J4=1T`<wC`d*JC0F+sAa~&CQZax6 z_l3OS;sCd^=z$wf#FGu7UBnBl2{%~{fwl$J#THS_F*KyF)M>^j+MdEdBpMrL@81F@ zfUYfpo%BVug}~v)_=sMjrKhJa(iRGmEgFK_w%89MJ!ST+S(CDnC20WM;Z=Hm90zC3 zNj4&$2WZCPWFuzJoH{-`a{-B)9>H;3W@i!-6j)mG2Lov2!UkTDTLYcozsUF@gx`=f zEgEJu6Duph9b6L8^7C2aMdD)9K?XbB>?P2eO_}UJ#IXii)5WQSRQv0F2JAg+KH4t1 zWHF0F@IYjNG4)6UI)wAVTu0NDsex!o&|ikU3#|hs@gV3G?FYn4cCecm+=dt7WD8QV zg@IML7~PM|A1(+K284PAwujM$H?ZXDA?UM&z#l0Ba|{vzOUb5jVO61EnZ59A>KV|Z z5~=F4ce+;}Uv|FX#2A%k0SF0lBy3+$vYzNGnG`v^5cHRq+PW9c2*Q4rgrfmwmub`H zX6B}A*?JK<Rzi|^h$vVu&{Q#2xrLE%v6!$x&h5m{CMaOx_xejpu%X=o1w@QN8kQa1 zSlBfXnjJYt$ZJGUVsWkRVbGxZgLo6|2sE*9Yc~#<JitOA11*YEXS7fk0`4!cZyRDH z%{>O$N}y#lWh~3Vu}56#T^R|)+)lTgxwECqz9n8mh_JnZt4cuGBHb`XKn9$Yb2DLA z;9z3#13*~{Y@|Pg1CR$3Lm#Iz3Pin*Wll13ZjN?DFZLbKAqq18mAM?-X<0K#r=v0{ z0;U2h7l>J=OZe8#WrLv1mL^m<poQA>thq)m4&`!BSs#h9z;z0O_WIfI^gQqc7K<U< zd)Y8lZf@4B%xSZ8W=+bq{a#_|k$%Wh7!{;BeP4s8p`i!|*2}^Gl1~g@3uA#|edx8r zkWwXZBSv%LMO0$NCFqcc^U=HEkw`(%=7~+y3)~V4<j4-=00YDbQ3`5kY-nqF8`UEh zO|PEwQMc-`uUy=GZo%~)BMd@?3qy|yHANVdbb*c=N{$ilJ4X{yCz(R*BnlUv9exxk zL>0KjFXE8GcqpILMv)%UA-=*vOT?Tw(3Q@K(=GDzgy63)n4L4V`isduu1W*d9Lryd zUTBdYEi>CkxJ@e+!&fh<pI_Z|-zCl06<%=8#Ua`<!Rzq7`sz*n47wO~T!kNb@jwtz z6F3W_f#^)77D9c7S4Oq6a2%G*x|@v*xx~@smO*28WU1c~8-_%Hh(z(>3}QZOZ&BLf z6fFS5V4x`-Sqh%~Ugi<MaNr7Mf8fQX6tJN0fm@6g4B3)c1z1(5#TMA=QLLC7kibC? zsR-=xMY95$$iSIw4P*0bJ8Wp*BYK?YV9vMI1b4LT7zg3deGXWbRoW7AC;h=8)^L*9 zz~7q9{6|_e0<i<-E6QL5j2*&$WYsZpqC)RXxMFQ7Es{7hx)c}%WFc=EdW}-!SVqvB zgW&~kr|gO&LkEMT&sXU7%5cksSfn|~X%pR<*&wHs{Wx%9VnaA)M|ut7fZz5s?GRov z$v_+eok(*2!7qYQcn;W6jmE3K;?RVP{O*3$YZmoro>*KkWb`!J2xfWOgecm8d9yOJ zbLVP+2k?y`tVDpd9x-1j>OL>%qd<|+1@Tx3tR3V&>dNG3^C#s%5I}4Q8aE`2iDa%o zOezzM)(iZR0x^<JCZTIFAAw<3#GfD2jfhm8ELS4tMB&2t2&q9##JdVXI!q=6OAdiP z7<Z;TPXN>n#;zp+)?O*-jJ5k|dNkkgm#~SA>MP<pM)A(U02|mC@~uM!jxjq}=2&dP zF`2Lk6g~y={Z1Z&m56ovfn&fSH*mj1h)Ple(YcH>rSm1-MVETk`~?N<u%+VD;ryWU zqxlfI>%^7BC51yr4ofp=IR34nF^PaX3v_n69fR|{<Yg3)*T*3?j0TjmsU|&${4jVl zQHagSyhzODKr6f};$h+Y@I50GW3{r9JQcuO#FeOK*fn4_41^>v!8o^qN3~ps@zOvV zV(5p#mit4LDaa2vy~ucoW-PFMZdV>>g#mZ%cy92}!s6JlT(6V?Ob&pN_6f^Pe9EpA z8GF<^tk$Q^%5}N}Jh~?SI`$2i!iG$sh+V^AOZUm8hjiovKYND2jF`o9I{I=^Y*}U6 zFQOCk7DD71v73<4aw3PPioo6lz@G-*1X~x2xR6ibo;-c2zf|W04y=+QEs_6?aOzZM z0FVkLC6O?&6i|*`x234Bb%>rZHx&#xb!T<3J_8(<^9Hk145P6svbe?-$u;lVGRJE` zd{rj60#kNzOgshy5U)EOm^qPfX#kksR(+)+IF@|?(NcdPNV-kR5Dm(DloL}?k^I#1 zAr6Qkt-@ENB;5R*>xv8Q1#^*Nooi($mqf#bu^}nAO1m`OZU%a(ptEKWJ)!3!;sstU z?Q%rNY@h7|<auc!VIzMz__2BM!a`VfG;o&{L*-M0V*jc@alDxBAUA>Ba)vJ|R$5>i z&W_sqC547WQAEHt=|v7n_vwba8+djFakA^c7!Y>E%Cw<NLV<jJ$S~WmcQg^>gxmoR zDF(dmeL^ziFAW3>A|e|H0|js(!y1VLbsS52y~tqxpyl%{cTH?JUk<u0j%)%OoKHsw zd@Nz-Ev>v#d(;h!LU0{oq%g$GpkKpUF}NWjI)a|XuAZ>>z_YNylx=iuTBs8g!>}Zd zM_Ip@K*$iavREb5t0Vx5x&ua7(aD&3Wii(0b7s%Yx()CJ4OFCSObk0NcH`|23MDBw z+OT)pb`f1vieU=DiBQaS-(O6L2IS3>ILA)t!RsJn1r{3dPSy~Q8ulTAjddvthhVMJ zKqMB27{t9Jt2!BysEpefwa*_qZdnr5;{`^TQ~M4+%W<`*75N>clk9>9FcJ?5L#5^6 zoQ{-ZZYQ&%!{je;dezyK6Om^{tS)So2R0IKf<F~Qy&rYQ$TPEMW#zVu*4aZ@={ow8 zra~{URM%LzZs@ih0UGmo)GsO&Vw%u+oN8YZ50O^WK?Ra4BhLWY*At2lJF@mmb0<*H z@e$WKb~oftbVtB-gk=Op9>7j4xW@P|i{j%7inncR8w$&lIGa?IbM_g9j)OM`ZRaxy za4&$JM~)bEoeu>Let_O3Lyf0D`Fcr=2;hrJe>4zv@ITvCUy1vsJ%$#ZSg2h;auf?Q z)5I5dv<4oFhroxE(W8TVh0s)Qsu*0o_%|0-Yftp3K2U!?hTYWz9y+)A|J6TnUROWm z-KzaB^uCb>hado1B*r=p2p24Ha#Rkorkx;?eb2`8gzAk4dY?_cz`g^649cxy7KR73 zM?=qoA~ihJ6ubpZV(fK@{1oNaoyVS_>1~&t?_wO6CQh7@m>i{J7iebK*F{5G9c(k~ zEa!2-%?#>=G4dy{n`<8H=#|sBFal<>WK3*_ERF~<Yua34$@9ZSMhKJ>`F_?i3v?C? z@PD+)W%8trS71BjuBgV3QIplrF)havC?NVuq_kV;ftx2G%FLe9Sxd8yGdQz~n*(Ns zBMH2flR0PR?N*$~DGeAQ;xBW?l}swmriMk}5JS}v0HZ8UPuZu1j>0{+V$VrAIg@Tr zL&Xr`WOs~wP&>m-i}j-a6$r(__=D*P1Ra}hlLyZNGeI4(tL=y7aZqcW7=dUA>evUl z=%XPI6BPjca2`gf7GW&U1H$!HF>l;}=DC@-<;u)vAQYgb;$0GJIhJMLwGd($^+NC! zkA%cg4x)#v&7LxSQqEi__c-Ekh@9-RD=(hIYkotnfa9a3;SgSRa0Gbq93D6#`S!Cg zSCaEirikJpIfg_%I|X%202wI@&{x5TAOr2DNP~?EN=M4;&73`rGc0t-pi??0B6uc1 z>7+O?K5!H#u0a%K7Q&5{0jd!dS#e3s8Ow=4Y);PXS#xr&#GGG)*e5`~si2xWM)ZT{ z2?NnNXqb?(ouGoSIC;Pjz!FB?pd7h~kx^l!NFX^wqOYF6G|bU0rWmcb60j2fgXJC( z4FF>=xeJ6ko$(Uc3t<UZ>_G9EA(E~_Y{P|ODLjp+D<QIqbS|dCXV1%(<|SQL>!eip zc)hu^u$ePm9&?=j3k1`_`H&-`^J^Uw1A8JFIQ7dWhjYTRHH<eRjWOeONzQPT1Eg6y z7mJiRc7+Iyu}GR`aA!xU2WM0`I~gd{EJC>aA(!Eo2)mtYK^dyg5a*F-`6*-)@;GwT z=ur~uLM!nf=K0XH>jidn71s(2=!gldV4v#EjaO8^r}wOGICUOuVFA$>^_&zFJZSTU z3w?x?TTs$c#Dpdo3R^4lO`wtju_5ho9hT;-2eP8?+?Xr$W`_f{2)Y@-7=eP+xPuIX zuo+VESy>m@BVRnd`QiP``*r1wZNBCCTh-?CPXFzaLC_bR5j`gTL*O`Pl@nz)s}H_+ z#ZX7Rn#G$U7IajxK;w~nd*2XdW#Bvp<D4`~P3laN08wGSv|0Yha{H<yCn(Q%kr*OW zCY7$Q!azLTio?nO#!Lmwu`HY?#hIN&o13i;x~63!SHV5Qs(c}7mM0I$bWwSjoKg>D z4O1u&HAKM<olVHY87z4#3WoFYKr)6|U6!JM20>7sNRR}LFz0<ZF~El<Vn@q}2ElN6 zIV?L~VvVsJi}8Yv<c%ZoL?=~2f4=Q8=pl%`!rYDwRyWQ1g9#0sF^!bevUn7AcbIY{ zcuWmm63CCpH8NeOhRq77HEjk^TV{Py^YvtF$^6<YLlY^LF`fAsG=8zwLpu3BoXLUe zTs<auQAm$F`x$ff8{_CmURW^5EJLoWI6?9eB@9QiJW!arNWa?6CZ`Oh7yI+0@&`IA zSObCAe9>5$aJXfW3#WMtVc66`0D0s<p5L0QgJv;AN^`Z!Old_2gR+^`DmSIoQm~d7 zg}TQwmZmnt>KQ=;yV>*(TH%Q)V;K@V!aU+UkGKEGlhAcwbK$kKGMKnB0RJ*S06pTc zp_VHHE=uYkNKQXRm_D2in7aCkH~Jcya0|pWatZJ#-5=pt&FW=wV#>hF^)d=e+{9U) z(yBNdqRJ?DtKx2kyICllkAkm9T+OC*OKpV`prs5JYS#*tNNTG>cPsEg!@+QoCDt5e zW1c=Aqgy(BjENm6Xg2|A&XfuA+O=Y<;cgZ0Cg&G_;gFtRT#!0gEM+jOg4ES&PHL+_ ziH@F@CK*O}UzRoUQxg=oORVx?S+-<;^|sn)l-9mR3VlUc@Y!Cqr%^wHtgkF_3WZ%( zK`-c}Zz}q96f1YcHl~!`4}>}WhtcFpIz@1}cHPXc-&QZXM#GGwuq0px3n`M7l{S3P zE6<^-KfbGPb;Ihj4La9%9Z{uX6$zArsVdT4(p{3$3c~F?Gz0DpDot$_aQq-eXu!4q zixymED>uhHtE>ZZZ~$S)(f)_1Bv7}{75to&)`2c8*nmL9&;np%gnc1eq&sGuDoYd` z6~!VD9+a6q->x+Z6r-&Ww@FQPOHsC>!XlR)U(Qp5{V~{(7s?|?vcEQlfdcE`lK+YV zvgiY4OJq)HZK5r<NVkI$_FCNW9`hxdQc47a1WI;Iw;f+C7riIT^OK&IKWZ27QOTuU z%or-Nx|iY!57rwvP6tIPnA1^#84P>QRkD-q)NtM?;5;XD_Lqf*))14Oc7n`=EXX25 zZI@%o4pR&YaA1vTRCYlo0c4iSNCCg1cn}N%pK>tSF|j1hI~?0W_0e3ZEIcy~Y%R<( z?RgNx%$yvIYfChPa)Thx0rBvIyKu+$9H+xpveCRkV|kGV)mctT0T2vX81xsRh6|@4 zDMLZpI;zbVI}~-AJZsW94(fzOSlVF~K8+`Ns;DEANhffydHJ$NhZUUB$#WZ4KHW{X zshN}Kas6CQX70S4Y$Bq}*ZvPw^noMHNiPgXBYJT!Q9|!Hh$WeVfTrKo+=+{##IbD% zquJurPHEM?y?v^msOmCNc#jdCCC8drOP%-!<`uRPBUum%N)DI0jtOEy#T6DhGKBL; zJ6+>SKKUGK1+*=4h2&$$7&H|ZM^FO;&p7<Ss9jq|J{AO)j>yB3GZAx(Efm!nbTY)F zi4=pKQT2%)HW5Nt5hEfIuu=x6Ah`Cy9|0xL`7W&KjObQAHw{OlqV6<Y)1Z-Q+MrQs zT6(%RD3mTTrd&fU2Ny>G=+dUdmCky-^y>Wjo2%!1)TR2L@7`Jc-MeYVR6Re44IIr$ z(Ux)~;s|f$yqcY;<w@HGyY7(K5%Kz+c+vh=m%h{U@<K0&9(2hEZ7!6IT{{*FSAY51 zr3O8(MP(;eB5Ru6&2DVh1&T5-%)1ON34$NwD4w<~kJl^CSokp&6!ii<FJ4rHajKlC z$eV9ayse@4=?}W1bLc^Q)In+DSi3w@re$1Cr!NchG!)8ng&v;v+M}mQxu-*|4ykID zNINqrD`jcFqeL)9=jP&JmS}#sM7Qhi{@d2!&KXuAnk|*Gc8+x(6|Y*o$Jpfqc=GID zt_!vagbF~H7I3mXstpAKi06j%0*m02Qabsg23M^jTmE3rKuS+49-$fs<o_Z)GQ>vG zafTk21y}A2k6nFd;6pB9%v)1F3y(0})gp9MZcR+btKg$zg_87STu;7{Cbz149cSAv z?9r=12JR+e3OuOpWO?K}cCfhk|FAfGv<1S$A6lESDrIKQAf&43CD#mbmK-ke4IyP5 zB{vXfCyila={laYWJ>a{*fMNxaC=@bw2UnU%?T!2$K{CpQdHNiL$D=5JvKzz>S6Zd zC$@Ls%p_aKXri*)fz|>Ra6?MCl<hQaNdc?QAw-s_pbLp`nssEzxZpK@R7E<YY$lfY ziiXHzT;$~l)eNu$Eh8hwrTWH2v#b9;Z*Z4%WiD9K;dl0E4!@VCUdvBPX-mPibEm!7 z63T2mv70#hslIqg-_g<kwWFo=8O`d0b(fwioyh9!v6rR0>%m<Wb=^d^3Co+s;||r| zzcrwG^*a|=Kegao*EoZIxX2fuhA0kKzf?cq21<EK-o<0wG>%K<VNwUjh=2pmVOXYP zs+TMGL^98+PbWK^FTT4^7;svb?`J>GfNqa0TXPI2o-wwxeWvk0%nIZmh=)F91MOJB z=Mxh;#ujHo91Z%lyr4g{+;t+D)qXOgquHFNghS)exIf69>?v7<tW#lIEF9>d5J`;K zowdk_ZVhk5T$zRC$JOK{q<c{H_+T(PD0TRQ;_)?q9t0=p$cn{S16dN3mHgEgKiGS! zZ>p4{7>T0D)uQsH!*ZWEP0tIXNTL#J*CMNW<RZQL!QW&XbK_BZ>V$2%aQq?suoo{| zP(Um1v*Q?$Rik_i9Kfg|Uk9a!H3)OFZk{qbJ6BYJ@qqLAc!eHf2FeA)eTwAc0#V2F zx>206`k@7v-&iOfc;=_=2$3{UgRmU|XN@=2ItRnnVAao@998XW7~cHn-^}qC7@mn* zG$IW7DKv_!lyRzfNM5o`DHbAv4h|Ir(Q9Q@ffYlRR+Yt(V$IHaH%#)-H2Gm8#1+KO zx$xm3F3`4fQ+c{PUn{Vmyz6W($xb}y(C9FvclM;2i|5YCoWg2M&SB)y!^uNwU9vR9 z(V9yy?L(zuh&&iGQA=%?=<r;8pf8dZXw<`zK#_HT$`-{rf6TxWA-i^!M|I3kF)O=@ zqVSMcW)&ail{wELqFnw`8eXoa6jS+AN6ow~D_0w8j2I?yvB*j<dVq1Pq?(L?M8Q$J zp(tKWYd4NKvB%_88P~+?4y(t58SO{on793KL>f`Cmh#|_b$r9;fLyx9gh|Jn!n3y? zBEbM6iqHAzhK%O%smOL44}y$24Dl>+*m@iXQFEdrRy8DQ9f7Y5$AbkNm!@o*m1rgA z#r^l`jsmXsPj;};b(>~KT?`7ac;dqOz>MR}tdqyQh+|bQ6b`m~{73M!eOk#WD);G< zc>c8G0D>^<01XEUlHP_SIQ^5^feh#YQW$<GUT8zc2@Se5gP6d&&FA{8qg^Y(Co1S1 zIs}4`kDH<wd52KpFsXQyR^!Aah3Lo{4t*kH{irxocIM(>VFQ<AM$RYN4jMEN%*l1< z;?TI3YH#5+U2^gH8uQ>E)b7o*f4j9ux505u4^q)wbIVu1J-cs#w$L|o^+Mkqfcm0E z@b5(Yw;&K%RQ>b6@BUE{aLz)XKQABLilSx9qw&(}oNrfkLA$)D+4t?=F9|@uNEADY zA}IVS3Y73G*9hS^S@eV7vmM`M=?Z?gYAWyt77G9*`lqL-AMNK=Pjwj?2svI8qeRO> zG5;!&KMjOBIN6VxuU@FWI$ECMJKT8A?S~_-LB{Z9(*0OSY2J5{8t=c*7c2o(7J_Ij z5__{46*4`ye)Jy~see1W>)_}ZZE*DHA1_raF1#$+P?M~z)!H`IwbfQ6H`HrwH5JJR zx3tw9^<Sxe<>`5{F0r#gJ9D@(aik)-W22Td?@88I9i4fV`p`vZCD*l@U+q#aH4=MH zXo;pRXHMOh*if0+u-hT3IP8u_EwN=wqT#-_il)RPjo5me^Fl^qXPvvhcBZu{(cGHa zZ2cB~n+;5?C7R0tbAFKFOw;D%j&<$k7VmZ8mPvCX_IHn{VbA&&Em6HYxwYj?Q-upr z?aZO_<l6fHoCFL3ZS(TsYEOfQP1e_HiK_BsO{KdJ43~JMB3WOqC5d>+x)ZoOCShC6 ze!0R##m3G$c1F15wsJtYU|VwiVL3`C>q)L}OzfylZUC}2w!*#*9X<?^fD6eTo7!q> z6Z>1zI-n8mO!Dr=<b(UoXBMg5&By1eUCoV4)h_0f*Qn<kXPU~90nRixq@}##1~(*G zdpNnSHd$YxB`bCVU$t#T6ltc!hJ8R@;u4xiu9ZkbXu#0e#X%mqY4#RP;XNu(?yv@K zt7%DWIL1vXI-&&=zinF`tO+MF*NjwqnqSUPFT8xF_e@hwvZ0O%)0k*Jk$B`WEwOh^ z+Ztq1^VSpUr8&+4amPDoC}IJ6cS^FpHMxFwTSW`}OT;`>3q9LvU>`Q@2El>#n6Ety z7!2I4_83J3+0vBQ(~{f^l&x70l!Y09cy%d!c(^gSvk8&<Xq(z|!GD>o7KBGjHdG+- z+$8zo6_~F-toAsE3M+kc%rAcof=yf9i3lU<s>+#q^@(QS?OI$$;=plcFfr-~;>Vhb z#D*#@xpqz4+B(O^B<`*~)3k~A+<tcs^+0Yin4R{PC%13JK|y|zg<;X_>R@%riaNa1 zR#la(2Yl|iKUs0mCCvf_mka@s9y$RWQIp)U$Ldo-47j&KjD;5fwKj9gZ`EF&nM2H5 zHv=)~YE2bO;Wk3DJuPWN>rcRNfZCZuRZ^2B9@qw=m!hR`8%a~tx4?c0JtKre12vqy zr-~^3$bGQvBBc14gH1?hv(X{qLOmflAE*LK!`#pe@TWOC;sDeF$%c(`6GSiChpIYr z=Nff@;p~NS59&El4*Xk*JPKymA?>6vK-vX;_}x50Bppn`O2KB05wcC9skUufE!}BK z)6N`iO*GtVevqwRc#)HLpt1SP6t&0E#P#a@^G8nkzrMQX=)}otm+oeHqk7Jji39r+ zJL^e<A6S=YIEGk&2?WBR^bqaLO>5M?w-n|hgW(qLtk*i~m1u5(%}DM#!M(J$pSLFW zqJ~8>q0DbU@z~wA^**!zQnmMOyd}VdpbRq3G=m{bKD_SCp{5LEgT$dN$vWouh8itd z`6y^^WCkRQ>_hEHrzg!8VtY{A4^)_!fWFSe#_PAFY01NNXO5n*&}^}LgG%7xNhis1 zoVH<~Is6Z55A(z>wYRzRTu*nyD>k^ML97nRfm~V9(6+YTp|S<5BZl(bKjO7Nnh-?T zTd4@4QE9*u2gjR$ED8#pcp*`eNUtFouV?|o^u;Q*3%?LZZVC(R+VaHRCx{6Xhbr4@ zTM5s#^@$yaEj;a{8H@(ht3xe<a=Upq%xjreZ72{ixdGN(^BBxQ6YM*YY$zY*c$7!J z9%x)!)jrU}8RN&HM{uYmL%b(w9PdEJq9LF}Yd}r1(t_O-H$c|Q1xt_$fDw4w42?&U zdILqNvKBD5ZHd|Tv^vnR-T^ceq?wI;b!%d86}4-wNFIBPP~Tg{N)hjBWP!nmuHTZl zA6ScD7DS|i{b<<ZkWqXuklS%U73|=yJ4gzc!v)tbi437@j<JB})(C?nFSFTCVbqEg zktzQpm`ZJt+HGsO+P!<l!86T=wM6Ykwgc2+_G)#Y`FyR~qeERm(yrMok|N`RpUpSp zXzE--4w%C5HWMX|Y(u3hd5mQe9Tb)%$t30YHX$($XiZ*Y%?=z6M{xLUXuQFn&L;H_ zROkz2;8C>fGfj1{VREvy6}Chg`M~h|64g$&Oy2z%Xjx$uQdE^No@?B!UjXb@ySr^m zMRMJS46oz6*7iUnc34--TUANs)iIO7Q&}R9k}RBXuh$v}*W^M(ORT9+94QBDq5<X4 zJk?4(weCI#TK16`?PEnNs25bVVjN+Y4fF@am96&?PDi!?q1#D!$m{M%az~c+3E=<w zlcYwElw(vw_V=X20}~XM1IXobZU&YKjX{vw@k=L|L{cz8oa;~GJncpRz5+%21FKp& z%qyHR?n{nK$~wgb^W#lw_obA9IMcKS^$YS_hLfb^0=YFy+xChM7S;eR_a4^Ba;uqA zV7S1Bp<nvNV`}f4qFy--icI_EK@?Cgxm@@jyih{c%w4NqY*bkGi4=!xb<{x^Birhb z%vWMKz^^;an#(UEN{Jw>fn`{d5<Kw0!&r$4i)9U+`sO0xiuW~AURczAPU-cK_JEL& zU0{l&cyL%&DlV4V5Yda!T0n2uNf%q@6J4vyY46s;HdUZ=ytWbKko5VHI#RX`WD*^3 zIRG{gK_*%yw<Ey8l1*XriD_!j%Q_uBHBy}T6#Q&jsOB7<I!`_587dq_#FIQ@ja*~2 z09tZe1$f`6{XyQ%kLIYF(cvvpz-Yn9-N#rH+!UrWNwr`J^n;KzusHaJ4ymPYnWDsN zV0$SV%@8V>Rw7w0ouW$Ff|wtK>R7F?d=6g#(Rs|&URQ70+N7Rqp88BZ#~l5xdZ}rA zqxLmdx2YE%J?l2L?HqGWrP`w(VF=VdMtbLoRz{fvHVjF7%tG16fCMuemNn#N!>tZh zh-Zh%?QWsim>)NS_cri|+M_=(GZ2Hvr76Vd6b6}dR;v9*fvb=Ex~9=Nv#{t5OgVNK zEP9$HpQx9O@OuT)vRf_j4s07RJ1SS)Hp^hH-(prxQ~Q`7-3(0f@&{`7!4(~0FD$cl z$J{vzY+v;>U@Gc)5inYh9gWPS(yJmlNojcvJ<Y`r%P(nLe+<?zL~|i50xj4|^Yxq6 zJ_fp44Qs$GR3;v31Y;)s+=e<}2I>2Vu%}!&Vd%nRFeoYGcpuU@sqk@<3=MpjWF3ld zJ-BrgL@+MnM1$lt$W~(R!zl*a>no&4P2ApRUUDBS^PVR4Li76;^<s1Xr)t0Rg`TI; z%!#Yi%ghm*)vjS{=fNkgz%Ua%OK@!I9Y|7ynw}!(g<flfi<U~DHqo%#Qmv`)KXSQ@ z$qkR8mso4=+@NaazAW{8bL0@U`&qz%=CW_p5$3l`)E^yHm#D9%T{DjNEyJM|T$bZ- zBXALGVpE+D^7O?F^`i4iK`=?bW_ZnuzEXSlBd(ImK@OMqDb2D`?R%{?5gPf5RtoaV zCD))Sq}`zSR^|-MP2<2DB&EB%T<ADb=n$8#-9vOpz*gSfC^-TYcvG!Vp=s^=0ZJU* zk_B+~<SrEauiu?KQ4U|)YBr&--DZ@R!!@QlP7E=)h$ri-Fj8Tn0go~UQjb|d2I!|9 z$s<jc0buRL%AS=S^pIh_NWnSjV{pq3a;j$zRlx=9YQ3$9oMm2i>J);#xGAmKB{lVA z_>vWN6e-?tw8VPF(V3R=M8iI@MiQH*gLdk}MY}B(L^~oK^KcFMEp8`j@Cq;Ht;4@o zdl+_PD?=i-Aa*ts2%W5Lfz_p|Ui+O#gI8ciC~*vo<56~!K%=B}(9_DxVGah@V{Byi zswQ!)3TGx|v&LzBQ(l1Nw%{FFZ=2&Q+8M^g-3`gTbv}ws(8;*e@iruD5c8Fr)&7PQ zk#gw`iw%(OMvHY&VC8qDQg&D;tBpW4(cB^zg$pImJH-aGcNRi3EDg4csifC#BLX9V z>xASzRK;0!xfGtrmEJ#dXsyTq%3Wzm?!F)G`1EY{tT3tEfW8<?*PdDu5@Ez-N&@W- z2DKEBN`FmevE<^9zFMX3=++Ap<ABU|+-LCN>S$kfHknVqul6#45m6M9YwOW!qFc4I z4nrT2&vh9dcivNL&$`%%W|Gbw_eYKc+(a@C5O#QW$9Jih^_=S!Z$fh6X=XpJ_U$>{ zD_(!p{+{8Nv54dlx`)}~wr%@GZVa?myC5ddo4ltgd7>K4QQQ3>rgz^Bl(*l5B&ktz zIJu$GO70#;KGVQSk!=mKi%yzpiTj&S4?vWOx(w9jz7uWhTRZ4WIc{-T=#M=uiM?yI z<bzEZcUIP69<KeHki>qWl-EI|;+$M=%Z^QCy6UWOueRg)19E=&kX`_x1dK645CJv4 z0x4w*!J9a~kvzT|o42jmC}(i=40;p$x8TM+(r97UaHh4~g>wh}iY>BWdbmNvFDbZ( zys$WfwxyyjS=oSA409Gu`{jsdnx1eBTH+;QkcO6<?iz4~@Y4Wi<a0DZ_Nu@{Vc+$w z6hOkha9_g?uqDcrJ3=Y%bWiQa{O#RuTU(!kPRyHZsT7lmc2nle(=5HoMW1nN40h&$ z2yWuq1Ss{QWnH^Qvo<AV##M4G$?mvWmChmN$RRK#{{%3Kv9V)f=XevXXw%#7K8B+2 zph|~ZPkz3L$x>FB>mX91p%TI`3n5N_%2d>rs>F^*+a8cv7O4-c69Q=$oVx1FL6NQ7 z*3QKk2kd>OxgtZJW$rowY7EUP8U>jgN8?GV4zy>bbw;?+GCip;GhzqU@irql3->LT zr(E<ZBfgc!?=O-+7>X0{WPLWC8Lff;gq5j<U2$f{tgM8Mvcy>Ca72oL!|3t1t9?gu zP+sFUG->$wc)Qb8PyuHSwwg<hsFxcpl|nYiY#iNpru9ByHheMB6ZICpc_>wy$aFta zPuV8!Q6hSzdY{a(<exWf6$p}Bxn+@?>)Rs{ccKqgX<MsEv(Oaywj~>{<d*#wWe6|x zip}a!^Sg)DZs*lDqQAPQ1uVU};B|GP`Nqo-c0X^bKQb@arVco|(^NNIV7|LY?cbX) zhCQgRb1W1b2lKVK+N+oJ(kXb6DP>>WKIc1g=p^V3OB|(|lN>HGS(Jhl`+w4z-K9I_ z&U5c0736JDCPtn?5_$qJ8M`;78Q_{cnmAOM+}kP#SiglQp+g)yVx+JaJk3oTQ=2=k zxm#1r`w*I&dYN4!i()aJ*=V4@li1fvhq*MMIBLZ-g83MoI9lg8sl!YAWXnPA?j$H- ze4UaM6ycyzikrr_>q~HmV)O|&I1iS@xe|Dc;=s}w0*Jxzn2tv2=J00eq_z$foM?rd z=?=Fj`ELfNL%5oAyV`TGRZ}4H%lsB4JFiE{P_t>5I>_)tyxG(QerASugvf5Y&PnL) zNE$bhBcQ$lOVk7r&D#5Lp_~quY~=OYER#Y?NAjK*YGim_i?ecyRs1F;n(NS`K)rHn z=_kb*?U`d$xV@mylK0%-ZVH``#_CT3;c?9o@meIOF5jOp?|59j;HCg5(slQv8C~C+ z;gu~lFretwShpN!{`dwaS;|0XctA$pE{yEk?H6u7L<EnZ^3gbe;5r_w4<_T<)|_x~ zmRzgM(n#96U3BPXqzSHZ(9rVsU1b!hv(W^mb>^MA6LLm6GNe#qe~Wu6TFPa+J77@q zS4^#l$&>9OPv-1tP8=IKU6v*`OOyT&P`~*EF~p8aX-m+?)zr!V1xp7jYEQf?S;lSg zL`~M%BF@n80DuqLE;VOAuXf3%=dj0-n}IoE;s}XY16a`ZOLf=+`Ti$YAliE}Ie48) zugs)$pb$`kV1Kxjsqb}BuXLQ)X&}w-h$4|Uw(b$eSOkaE(};nN<Is(Wo8isP60b!9 zGLt^NyTv})w9cirVXm!hN2TL%Nyd%fb5-rL>uypbM@{3`IkCzxWCe-vQ^YSPN_L(` zzOhLjE5qQhah0{2t3r-qVqs%PNW0)Tbpdt)6|{9Xo$nZQz(cEmmJPd+$1uHaIVrGr z@>Gb~#yS-e*`<^M58)1VU|Qv_pwqXbQkdb3Q65aR7P3s~lK0iVlf}yGC9}(e=7-lM zc2!xYEJU%9qeipd02k(@?QNPL?NihHbYkIQDdw7`z}R@4VWdc%<(|Qu8+Lanf-b~5 zXg<`1HM>C$G@Hm%X1Wban=i}e+GQrt88s^%NZ76xk+U{&;CN!A3`SYMTT3;E|3&R_ zAt8lGjIc{=M($BR7-(jkR{NX<!eZWbS{-e^a$5D8x8JT_eAd80LG!EA>Oc~D^VDgz zXBTnma9SNj7l(_?4W_o5$sZAM7F?&qkDZGkhsd1xf|}b)P=4!)#NJ9e1K7M9xyO9$ z1$9i9+Ex(Fqo2N@_UmDmSE^@wEw|RZV!L`-caBqKaRB`?FZx97`y(n%q%tpDAJFsx z?9h7z)|)=nYHglXQOeml^l3OtDG%h#@3YjtX82b1;+w!z+E$AmqAX%-!BxV)4ZE$H z0P7$F4~iPZ*m%ZunZd82!c2j=PD}3I1STKYqbl(T9}ZKompGGkzJ|)K<{4p?c{<DL z__&2oSu2k?#b8usw=vy%3typTiJz!7<D82;jH#(?+fh3d90#l`JGRaBPAYL!AdgV$ zDw4<ONIALnu=BN3t|Jy=#+n^q*1)>mfn{x4;uJZ6)*-0XfdW!ab;#r)2b7L?3P?Gy z6W_ca=0-C-PwhFMUpOTxe0(2RqQuVK(tW}FjMTNx*H1|TQ$0XpW364*g2CtdE#}U- zV3NbKc*iF^Uk6^}m?`BQVj#+2b2W}tVk;uJ{q8fP4qrj#^HX;Dfo(#5JADb2Z?d~# zXRo0`-1hFFbXn7Ws`v(z%!M#WP_UA1Kd)so>!_P`yg$f(Ar*6G=hHghNaf4yw4Ljn zRKDC!+tFL84Eb6r-_p(-I^Rp>oBo6CtT$5${u9URED0UFmui9aVk$5S!Z6a=3|Ix! zUh7&#Et)t>A<wJoe||SrNAI8F(hxR1b(9XNs29G?551box4hGZyIxM^D@H!Wc1F8~ zuGdrfrgS=>>jhQ5kQ}gsc8*t6`3h6UGn@?_FR2pw5?(TzOw_Bw4c+%c@2K+S{Q$;} zw^aG!)XwOrq3b<WzF4ONy53afo6~ta=ew$`yeOXL)u*)zlP`TetOa~{o#TAnQRGIi zpBk*WJs!9%Et<3GoIk65&a1O6h<tSwxDQU_?<~gM_e1Zf!k8A#idCD)#uP(&PULca zh1dYb-_z=@g65&kZ{Nm)R;vuFLiDnZFL(dY3#oi1ol@BKN-AGz=j{ScmV;jog~(O8 zsS5Fj-bv+K)ovnuE0rkc&zg#N+aBD9{_WZ|@SFUjdP7u~SgL};Nh}J&Y|DwqoXJuC zqxVla4i_j=!NKji7=D_fl}i|$yR@bzb-d+#KxU`s5^E}`9?8Pg&TjJ>Fd?|>82ljR zN2_yS*Lmxmb!3}|@!P4G6<L-YT2xwGtVA<!U9Vmm;CE8VV~Cm-amwU4p`|)mS>wd6 zF+FetPWY}9&Now$C+H5+z|ODV!UvdGXwcKgucKn@=xEM9pOnsks5y{b41WC-Dt`2G zc5gb<Qqfl1+Ch089Z<GQwoFOg0cW9n8hKVbTV$1iUF9bN)kM?8{S>$EXcUL;C`b1k zmIby#Ua7E9OWglBX7j3>L>||UkEwvmYh?Z~F8JUlx>7s1MzLKT)_NeB;}Ivv8?3I7 zvL%ZGY13q(2{>fiz|q@pII3e?_*kJ98HkI%D8UcG`ZhX3sjfr!HL<nAvCPywp>$_i zHCo}X^DS4d<r*pL?c~81R(6P0eu0BksGxy4zQL(IJ1DARR&Dq2$hjv(IfT6>;oKkI z5_--U1&tpO?r>i)%eVem2R^S4Ib)ye7#?Gz9v)!rTN7&cE1frGxJfw-dwCRnU46H^ zF4*z%s}3hHI?5D-;MqqNAg@lHRMY;sLW?`BXV$E0CG8pwuBJK4H+{$(@_B$QYiveK zWilCmh{8A5$rY(&M-^PU<(SApG*SFK$S3Nj9c=|6sLsiUg-#-=Z@<0@-(N-9VRtIM z4oP<DcxU>CGbplTs{PK$6F4iVH7D#;2Uw+<J+?NfUALZ5yP8dN)PAPtLv_{J*v#~P zsQNOTaY{pSt4z<?k4k~TPMXdlMC%LyZko3~s$O~}r~0V}IRT81$YQXkVP5`~di97x zuP|A5$W2PDmLE()%S9*dR050a)ApX)+nDC=g@L5iLS)7)^t7QUzlSQ$99t(Oj}EOc z4@uSiAUraCbx#!qJscUgJpfDG=XlMPEmzs?YA{HiF;)DS(=t(wXuAVJ;kw$dA~E|< zReKpYMw)yQjGqMJ3bk$G2{C#&)Ot|OBCgEy(X{g53`W`7l4#m)@t=JZZ|{n;UNG5} z=Gts7z7rUw`-kc!XQQDrL$?BhY#acN8ZM?$8!8{hYY<0dj@ME-*&t~)LF6kAKWH!i zTmOKo{}O&Md5Fb!hFEzy8_|7sp@VA~^;VKhlH#5!kr3WlCu;HRGKO(hai(=TVLu&Z zlRVkfn(Vo=$+F=4?9v1C`v+9bV4ZB24_N4c7LYHWN_o^Ubsh2lvJUh(I$6i6#V*px z98iU=Eaee;g#(LJow?*1s^>)iPh9W~5xUh}v0d$Ty?9hy<kAG2qc4<N^DY$^<pf9i z)$Rs4K;nqe5=(vyl}!6IwStlv=2Y+<m3TL>l-O^VvU4`#MN*oxzF9n4mF*zT&bs9B zMv1-TOG`-krBim1FZmqOe`Zo{J#4OdSM6mf(?NZIAUSJpYf%RuUG<^bq~2(qqR9-i z<ym5~{W$W2sCt*BX${DY_{@1<^Se1}ufd&n5pAjc^>3(y&0v~(;YDdybuMRFSN~eQ z>{{kKacr{RJ_nYLW=i2br9Q11+&(4VPTFbaj+@oqW{(Bn5l39SoM^6S-`aYVRfelB z<sr`^T#0l0kz#4yIvLb_bf0?B#lERtd5Y0g2RN9Ut^zIABKgBU`H=@I&e3EjXYV_h zhYm|KeVN{YiDQ)m+mGAPfQEdQ&pj5pVlW6q4;9i|B_@$Gi;?U{0mTta3MyG%aqP;6 z$U{L5Kqw$E8-@rC=wyikA%1A6)9HkrTe}9w=Y`4|W|A2BG$j{=rVj2b3NRZJ4>g)Q zK2>`!AopylL*{&$;)gg5;qy>=dX(6-(b+c3)s`ic&rh$|tlrY!QN!6(m&B)49i=tq zn$7Cv=FpGSS%$;&qemATD7~@2GI?ZAJI_<TsLHC?<CtK(brj5J>lCrnI!A@T4HNsI zM)#JxedSDzUqxW8tc6lDSku6DC_qn`3*?`NEq4!=*hv1V`LV8EM(;MbuF#v(qgITB zCut9);KC(6H4e3Q!Gr3h=kWfunZw^z`_oe`N8=x<<IWmnt($xZaI4p{dvXZR`T3E6 zopg3)a7;|f&Z=${Cp5C3eR2T=tf`eWv?Haqn$|@1Zr~Qzb2?PrLy;qIIS+&8yP?85 zOEuq(s}~y9g9TVLVDA~pfP5UDuZiGE*7&#)a_1)+gi!J9wrB3}$+;lyn9;zMYuZp} z9Y2*1wZkUmK{Ya<>>o+0@u*;#rMHs$rVUiQvfhkFH{`;$Z-f}d`Rav@5YSX59y#e` zaO*Kalx}A!wX=$Pi*vG07D4=v4AM_j7&_@C2;A6WzHyt{Yg)S@P+sv}Tti0;BhK32 zqB(a_=Gc!lBpX^O(_X11wwh}ef*0N4SQI4li%3Ku0vk|S*Fj|Ns`;>=NMW>jA+ES5 zb+QFbb|l`y&yqP1Pq)q|w{PTQIeILoo8$PwRu}llEI;6ak1Krs3w6My?gRp!l5W_I z?<weMjAKQY(ZP05Wt;AdrYm;Yg)3?8sEJua+eJvljp`OammH9pN<!j%C$SKteqG4) zn(x1>UNM?pdnI!b$e*?{Xy*DuS8B~-6ntK6Fu5I92EC5@X!~$hJR3qUN^m?~cF|n5 z%hjDQr|3c+mY54;p8iIM?MZ1^@6&R>Js}k%EB9{SVd`<1=?LH3b;PrWs&Xq-LD2w2 zrOCrra3vcyf#m}?n2)#d%?tD((PQm2kVBo7w}11NCZB%bbS0fz(>o;0E+4BG(X;mE z#1^$*j}92AcB6UmyJ`=!Ym++Y=)pgz4ZW}Cca&&@<KSaSv9?Q`g+okib9B<b)X%zJ z)yaFj+%G9vWDfRtKIq_`UZ!@IXZyM0>C8pdzHhHNdevE;9X$+s5u)P_U$QWdU-C81 zDqzasSA983*7%KIj%p}=?N`c$)Uqai2bfhCbPW{-@w>p}V}G*B0xw%}CcYl*+1{St zcD>eq;}*=6I8-Cz2E`prxbB(tmwWzw6J}q)pK7Qi9=y8=X2ED1zwOwlxH^o{+P0jq z?wN+>sUIfa5GDn7k%Q?M%dMujh4s9`v!}}?{I)O!ya%vcV>I6s^FLR4ZZyBS%JZN9 E4@opc9smFU diff --git a/po/ko.po b/po/ko.po index 93bdff08e..692db52d5 100644 --- a/po/ko.po +++ b/po/ko.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-12-10 01:12+0900\n" "Last-Translator: Seong-ho Cho <darkcircle.0426@gmail.com>\n" "Language-Team: Korean <translation-team-ko@googlegroups.com>\n" @@ -20,123 +20,124 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 2.3.1\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "잘못된 배열 첨자" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: 이름 참조 속성을 지우는 중" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: 색인 배열을 연관 배열로 변환할 수 없음" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: 숫자가 아닌 인덱스에 할당할 수 없음" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: 연관 배열을 할당하려면 반드시 첨자를 사용해야 함" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: 생성할 수 없음: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: 명령의 keymap을 찾을 수 없음" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: 공백이 아닌 첫 문자가 `\"'가 아님" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "%2$s에 닫는 `%1$c' 없음" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: 콜론 구분자 없음" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "`%s': 명령 keymap의 바인딩을 해제할 수 없음" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "괄호 확장: %s의 메모리를 할당할 수 없음" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "괄호 확장: 요소 %u개에서 메모리 할당 실패" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "괄호 확장: `%s'의 메모리 할당 실패" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "`%s': 부적절한 별명" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "줄 편집 기능 꺼짐" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "`%s': 부적절한 keymap 이름" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: %s을(를) 읽을 수 없음" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "`%s': 알 수 없는 함수 이름" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s은(는) 어떤 키에도 바인딩하지 않음.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s은(는) 다음을 통해 호출될 수 있음 " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "`%s': 바인딩 해제 불가" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "반복 횟수" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "'for', 'while', 'until' 반복문에서만 의미 있음" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -145,360 +146,374 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" -"현재 하위루틴 호출의 컨텍스트를 반환합니다.\n" +"현재 하위루틴 호출 컨텍스트를 반환합니다.\n" " \n" -" <표현식>을 지정하지 않으면 \"$line $filename\"을 반환합니다.\n" -" <표현식>을 지정하면 \"$line $subroutine $filename\"을 반환합니다.\n" -" 추가 정보는 스택 추적을 제공할 때 활용할 수 있습니다.\n" +" <표현식>이 없다면 \"$line $filename\"을 반환하며, <표현식>을 지정했다면\n" +" \"$line $subroutine $filename\"을 반환합니다. 추가 정보는 스택 트레이스\n" +" 에 활용할 수 있습니다.\n" " \n" -" <표현식>의 값은 현재 호출 프레임에서 얼마나 뒤로 돌아가야 하는지를\n" -" 나타냅니다. 최상단 호출 프레임은 프레임 0번입니다." +" <표현식>의 값은 현재 호출 프레임으로부터 얼마나 되돌아가야 하는지를\n" +" 나타냅니다. 최상단 프레임은 프레임 0번입니다." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME 설정하지 않음" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "인자가 너무 많음" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "디렉터리 값이 비어있음" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD 설정하지 않음" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "행 %d번: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "경고: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: 사용법: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: 옵션에 인자가 필요함" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: 숫자 인자가 필요함" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: 찾을 수 없음" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: 부적절한 옵션" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: 부적절한 옵션 이름" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': 적절한 식별자 아님" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "부적절한 8진수" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "부적절한 16진수" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "부적절한 숫자" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: 부적절한 시그널 정의" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "`%s': PID가 아니거나 적절한 작업 명세 없음" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: 읽기 전용 변수임" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: 할당할 수 없음" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s이(가) 범위를 벗어남" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "인자" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s이(가) 범위를 벗어남" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: 그런 작업이 없음" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: 작업 컨트롤 없음" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "작업 컨트롤 없음" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: 제한됨" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "제한됨" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: 셸 내장 명령이 아님" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "쓰기 오류: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "터미널 속성 설정 오류: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "터미널 속성 읽기 오류: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: 현재 디렉터리 가져오는 중 오류 발생: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: 모호한 작업 명세" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "이 버전에는 도움말이 없습니다" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: 색인 배열이 아님" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: 설정 해제할 수 없음: %s이(가) 읽기 전용임" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: 설정 해제할 수 없음" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: 부적절한 액션 이름" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: 완성 명세 없음" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "경고: -F 옵션이 예상대로 작동하지 않을 수 있음" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "경고: -C 옵션이 예상대로 작동하지 않을 수 있음" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "완성 함수를 현재 실행하고 있지 않음" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "함수에서만 사용할 수 있음" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "함수 구성에 `-f' 옵션을 사용할 수 없음" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: 읽기 전용 함수" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: 참조 변수로 배열이 올 수 없음" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: 이름 참조 변수의 자가 참조를 허용하지 않음" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: 순환 이름 참조" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "`%s': 이름 참조의 부적절한 변수 이름" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: 이 방법으로 배열 변수를 해체할 수 없음" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: 참조 배열을 색인 배열로 변환할 수 없음" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: 따옴표를 이용한 복합 배열 할당은 향후 제거 예정" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "동적 불러오기 불가" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "%s 공유 객체를 열 수 없음: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "%2$s 공유 객체에서 %1$s을(를) 찾을 수 없음: %3$s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: 동적 내장 명령을 이미 불러왔습니다" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "%s에 대한 함수 불러오기 중 실패 반환 (%d): 불러오지 않음" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: 동적으로 불러오지 않음" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: 삭제할 수 없음: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: 디렉터리임" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: 일반 파일이 아님" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: 파일이 너무 큼" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: 이진 파일을 실행할 수 없음" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: 실행할 수 없음: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "로그아웃\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "로그인 셸이 아님: `exit'를 사용하십시오" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "멈춘 작업이 있습니다.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "실행 중인 작업이 있습니다.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "명령을 찾을 수 없음" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "기록 명세" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: 임시 파일을 열 수 없음: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "현재" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "작업 %d번이 작업 컨트롤 없이 시작했습니다" @@ -513,11 +528,11 @@ msgstr "%s: 잘못된 옵션 -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: 옵션에 인자가 필요함 -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "해싱 비활성화됨" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: 해시 테이블이 비어있음\n" @@ -542,15 +557,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "`%s'에 해당하는 도움말 주제가 없습니다. `man -k %s' 또는 `info %s' 명령을 입력하십시오." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"`%s'에 해당하는 도움말 주제가 없습니다. `man -k %s' 또는 `info %s' 명령을 입" +"력하십시오." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: 열 수 없음: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -564,26 +582,37 @@ msgstr "" "이 셸 명령어는 내부에 지정했습니다. 목록을 보려면 `help'를 입력하십시오.\n" "`help name'을 입력하면 함수 `name'의 정보를 더 확인할 수 있습니다.\n" "셸에 대한 일반적인 정보를 더 확인하려면 `info bash'를 사용하십시오.\n" -"이 목록에 없는 명령어에 대해 더 알아보려면 `man -k' 또는 `info'를 사용하십시오.\n" +"이 목록에 없는 명령어에 대해 더 알아보려면 `man -k' 또는 `info'를 사용하십시" +"오.\n" "\n" "명령어 이름 다음의 별(*) 표시는 해당 명령어를 사용하지 않음을 의미합니다.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "-anrw를 한 개 이상 사용할 수 없음" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "기록 위치" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "빈 배열 변수 이름" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: 매개변수 값이 null 이거나 설정하지 않음" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: 부적절한 타임스탬프" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: 기록 확장 실패" @@ -597,113 +626,113 @@ msgstr "%s: inlib 실패" msgid "no other options allowed with `-x'" msgstr "`-x'와 다른 옵션을 같이 사용할 수 없음" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: 인자는 반드시 프로세스 또는 작업 ID이어야 함" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "알 수 없는 오류" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "표현식이 필요합니다" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: 색인 배열이 아님" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: 부적절한 파일 서술자 명세" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: 부적절한 파일 서술자: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: 부적절한 줄 수" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: 부적절한 배열의 시작" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: 부적절한 콜백 양자" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "빈 배열 변수 이름" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "배열 변수 지원이 필요함" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "`%s': 서식 문자 없음" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "`%c': 부적절한 시간 포맷 사양" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "`%c': 부적절한 서식 문자" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "경고: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "형식 해석 문제: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "\\x에 16진수 숫자 없음" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "\\%c에 유니코드 문자 없음" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "다른 디렉터리 없음" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: 부적절한 인자" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<현재 디렉터리 없음>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "디렉터리 스택이 비어있음" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "디렉터리 스택 색인" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -718,10 +747,12 @@ 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" @@ -741,7 +772,7 @@ msgstr "" " -N\t인자 없이 실행할 때 dirs에서 보여주는 목록의 오른쪽부터 N번째\n" " \t 항목을 보여줍니다. 세는 수는 0부터 시작합니다." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -785,7 +816,7 @@ msgstr "" " \n" " `dirs' 내장 명령은 디렉터리 스택을 보여줍니다." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -823,319 +854,331 @@ msgstr "" " \n" " `dirs' 내장 명령은 디렉터리 스택을 나타냅니다." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: 부적절한 타임아웃 정의" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "읽기 오류: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "함수 또는 원본 참조 스크립트에서만 'return' 할 수 있음" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "함수와 변수를 동시에 설정 해제할 수 없음" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: 배열 변수가 아님" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: 함수가 아님" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: 환경으로 내보낼 수 없음" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "시프트 횟수" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "셸 옵션을 동시에 설정 및 설정 해제할 수 없음" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: 부적절한 셸 옵션 이름" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "인자로 파일 이름이 반드시 필요함" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: 파일을 찾을 수 없음" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "일시 정지할 수 없음" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "로그인 셸을 일시 정지할 수 없음" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s은(는) `%s'의 별칭임\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s은(는) 셸 키워드임\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s은(는) 함수임\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s은(는) 특수 셸 내장 명령임\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s은(는) 함수임\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s은(는) 셸 내장임\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s은(는) %s 임\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s은(는) 해시됨 (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: 부적절한 제한 인자" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': 잘못된 명령어" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: 제한을 읽을 수 없음: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "제한" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: 제한을 바꿀 수 없음: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "8진수" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': 부적절한 심볼릭 모드 연산자" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': 부적절한 심볼릭 모드 문자" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " 줄 " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "마지막 명령: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "취소중..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "정보: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "디버깅 경고: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "알 수 없는 명령 오류" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "잘못된 명령 형식" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "잘못된 커넥터" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "잘못된 점프" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: 바인딩 해제한 변수" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\a입력 대기중 시간 초과: 자동으로 로그아웃\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "표준 입력을 /dev/null에서 방향재지정 처리할 수 없음: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': 부적절한 서식 문자" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] 가 여전히 존재" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "파이프 오류" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: 최대 eval 중첩 레벨 초과 (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: 최대 소스 중첩 레벨 초과 (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: 최대 함수 중첩 레벨 초과 (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: 제한됨: 명령 이름에 '/'를 지정할 수 없음" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: 명령어를 찾을 수 없음" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: 잘못된 인터프리터" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: 실행할 수 없음: 필요한 파일이 없습니다" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: 잘못된 인터프리터" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: 이진 파일을 실행할 수 없음: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "`%s': 특수한 내장 명령임" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "파일 서술자 %d번을 파일 서술자 %d번으로 복제할 수 없음" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "표현식 재귀 레벨 초과" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "재귀 스택 언더플로우" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "표현식 문법 오류" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "비 변수에 할당 시도" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "변수 할당 문법 오류" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "0으로 나눔" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "버그: 잘못된 표현식 토큰" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "조건문에 ':' 필요함" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "지수가 0보다 작음" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "전위 증가 또는 후위 감소 후에 식별자가 필요함" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "')' 빠짐" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "문법 오류: 피연산자 필요함" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "문법 오류: 부적절한 산술 연산자" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (오류 토큰은 \"%s\" 임)" @@ -1152,7 +1195,7 @@ msgstr "부적절한 정수 상수" msgid "value too great for base" msgstr "해당 진법에서 표현할 수 없는 값" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: 표현식 오류\n" @@ -1161,46 +1204,51 @@ msgstr "%s: 표현식 오류\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: 상위 디렉터리에 접근할 수 없음" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "`%s': 특수한 내장 명령임" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "파일 서술자 %d번에 nodelay 모드를 초기화할 수 없음" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "파일 서술자 %d번에서 bash 입력용 새 파일 서술자를 할당할 수 없음" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: 새 파일 서술자 %d번의 버퍼가 이미 존재함" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "포크한 PID %d번이 실행중인 작업 %d에 나타남" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "프로세스 그룹 %2$ld번의 멈춘 작업 %1$d번을 삭제중" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s)이(가) 여전히 살아있다고 나타남" @@ -1210,137 +1258,137 @@ msgstr "add_process: pid %5ld (%s)이(가) 여전히 살아있다고 나타남" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: 그런 pid가 없음" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "시그널 %d번" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "완료" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "멈춤" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "멈춤(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "실행중" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "완료(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "나감 %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "알 수 없는 상태" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(코어 덤프됨) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "child setpgid (%ld에서 %ld(으)로)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld번은 이 셸의 자식이 아님" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: 프로세스 %ld번의 기록 없음" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: 작업 %d번이 멈춤" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: 현재 작업이 없음" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: 작업이 종료됨" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: 작업 %d번은 이미 백그라운드에 있음" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: 미지정 차단 동작 회피 목적으로 WNOHANG를 켜는 중" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: 줄 %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (코어 덤프됨)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd now: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp 실패" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: 백그라운드에 작업 컨트롤 없음" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: 라인 제어" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "터미털 프로세스 그룹(%d)을 설정할 수 없음" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "이 셸에 작업 제어 없음" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: assertion 실패: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1349,376 +1397,389 @@ msgstr "" "\r\n" "malloc: %s:%d: assertion 망가짐\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "알 수 없음" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: 해제 목록 처리중 중단" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: 이미 해제된 블록 인자를 가지고 호출됨" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: 할당되지 않은 블록 인자와 호출됨" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: 언더플로우 감지! mh_nbytes가 범위를 벗어남" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: 언더플로우 감지! magic8 손상" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: 시작과 끝의 청크 사이즈가 다름" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: 할당되지 않은 블록 인자를 가지고 호출됨" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: 언더플로우 감지! mh_nbytes가 범위를 벗어남" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: 언더플로우 감지! magic8 손상" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: 시작과 끝의 청크 사이즈가 다름" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: FIND_ALLOC이 할당 테이블이 가득참?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p이(가) 할당한 테이블에 있음?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p이(가) 이미 해제한 테이블에 있음?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "부적절한 진법" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: 알 수 없는 호스트" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: 부적절한 서비스" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: 잘못된 네트워크 경로 사양" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "네트워크 작업은 지원되지 않음" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: 로캘을 바꿀 수 없음 (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: 로캘을 바꿀 수 없음 (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: 로캘을 바꿀 수 없음 (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: 로캘을 바꿀 수 없음 (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "$_에 메일이 있습니다" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "$_에 새로운 메일이 있습니다" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "%s의 메일을 읽었습니다\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "문법 오류: 산술 표현식이 필요함" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "문법 오류: ';' 필요하지 않음" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "문법 오류: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: 잘못된 명령어 형식 %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "here-document가 %d번 행에서 파일의 끝으로 구분함 (`%s'아(가) 필요함)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: 방향재지정 처리 명령어 `%d' 범위 벗어남" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size(%zu)가 SIZE_MAX(%lu)를 초과함: 줄 잘림" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size(%zu)가 SIZE_MAX(%lu)를 초과함: 줄 잘림" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "쓰기 오류: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "최대 here-document 카운트 초과" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "`%c'을(를) 찾는 도중 예상치 못한 파일의 끝" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "']]'를 찾던 도중 예상치 못한 파일의 끝" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "조건 표현식에 문법 오류: 예상치 못한 토큰 `%s'" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "조건 표현식에 문법 오류" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "예상치 못한 토큰 `%s', ')' 필요함" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "')' 필요함" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "조건 단항 연산자에 예기치 않은 인자 `%s'" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "조건 단항 연산자에 예기치 않은 인자" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "예기치 않은 토큰 `%s', 조건 이항 연산자 필요함" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "조건 이항 연산자 필요함" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "조건 이항 연산자에 대해 예기치 않은 인자 `%s'" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "조건 이항 연산자에 대해 예기치 않은 인자" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "조건 명령어에서 예기치 않은 토큰 `%c'" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "조건 명령어에서 예기치 않은 토큰 `%s'" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "조건 명령어에서 예기치 않은 토큰 %d" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "예기치 않은 `%s' 토큰 주변에서 문법 오류" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "`%s' 주변에서 문법 오류" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "문법 오류: 예기치 않은 파일의 끝" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "문법 오류: 예기치 않은 파일의 끝" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "문법 오류" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "셸을 나가려면 \"%s\" 명령을 사용하십시오.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "맞는 ')'를 찾던 도중 예기치 않은 파일의 끝" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: `%s' 함수를 찾을 수 없음" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: 가능한 재시도 루프" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: 잘못된 커넥터 `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: 부적절한 파일 서술자" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: NULL 파일 포인터" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': 잘못된 서식 문자" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "파일 서술자 범위 벗어남" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: 모호한 리다이렉트" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: 이미 있는 파일을 덮어쓸 수 없음" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: 제한됨: 출력을 방향 재지정할 수 없음" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "here-document를 위한 임시 파일을 생성할 수 없음: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: 파일 서술자를 변수에 할당할 수 없음" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port는 네트워킹 없이 지원하지 않음" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "방향재지정 처리 오류: 파일 서술자를 복제할 수 없음" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "/tmp를 찾을 수 없음, 만드십시오!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp는 반드시 적절한 디렉터리 이름이어야 함" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "대화형 셸에서는 정돈 출력 모드를 무시함" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: 부적절한 옵션" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "uid를 %d번으로 설정할 수 없음: 효력상 사용자 ID %d번" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "gid를 %d번으로 설정할 수 없음: 효력상 그룹 ID %d번" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "디버거를 시작할 수 없음! 디버깅 모드 꺼짐" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: 디렉터리임" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "이름 없음!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU 배시, 버전 %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1727,49 +1788,53 @@ msgstr "" "사용법:\t%s [<GNU_긴_옵션>] [<옵션>] ...\n" "\t%s [<GNU_긴_옵션>] [<옵션>] <스크립트파일> ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU 긴 옵션:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "셸 옵션:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD 또는 -c <명령> 또는 -O <shopt_옵션>\t\t(실행 전용)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s 또는 -o 옵션\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "`%s -c \"help set\"' 명령을 사용하면 셸 옵션에 관해 더 많은 정보를 확인할 수 있습니다.\n" +msgstr "" +"`%s -c \"help set\"' 명령을 사용하면 셸 옵션에 관해 더 많은 정보를 확인할 수 " +"있습니다.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "`%s -c help' 명령을 사용하면 셸 내장 명령어에 관해 더 많은 정보를 확인할 수 있습니다.\n" +msgstr "" +"`%s -c help' 명령을 사용하면 셸 내장 명령어에 관해 더 많은 정보를 확인할 수 " +"있습니다.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "버그를 보고하려면 'bashbug' 명령을 사용하십시오.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bash 홈페이지: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "GNU 소프트웨어 사용자 일반 도움말: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: 부적절한 작업" @@ -1939,282 +2004,304 @@ msgstr "정보 요청" msgid "Unknown Signal #%d" msgstr "알 수 없는 시그널 #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "잘못된 대체: %2$s에 닫는 `%1$s' 없음" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: 리스트를 배열 멤버로 할당할 수 없음" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "프로세스 대체용 파이프를 만들 수 없음" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "프로세스 대체용 하위 요소를 만들 수 없음" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "읽기용 명명 파이프 %s을(를) 열 수 없음" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "쓰기용 명명 파이프 %s을(를) 열 수 없음" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "명명된 파이프 %s을(를) 파일 서술자 %d번으로 복제할 수 없음" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "command substitution: 입력의 null 바이트 무시" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: 파이프를 파일 서술자 1번으로 복제할 수 없음" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "명령어 대체용 파이프를 만들 수 없음" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "명령어 대체용 하위 요소를 만들 수 없음" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: 파이프를 파일 서술자 1번으로 복제할 수 없음" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: 이름 참조에 부적절한 변수 이름" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: 부적절한 간접 확장" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: 부적절한 변수 이름" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: 매개변수값 설정 안함" +msgid "%s: bad substitution" +msgstr "%s: 잘못된 대체" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: 매개변수 값이 null 이거나 설정하지 않음" +msgid "%s: parameter not set" +msgstr "%s: 매개변수값 설정 안함" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: 부분 문자열 표현식 < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: 잘못된 대체" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: 이 방법으로 할당할 수 없음" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" msgstr "향후 버전의 셸에서는 산술 대체로 연산이 강제됩니다" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "잘못된 대체: %s에 닫는 \"`\" 없음" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "일치 없음: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "인자 필요함" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: 정수 표현식 필요함" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "`)'가 필요함" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "`)'가 있어야 하지만, %s이(가) 있습니다" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: 이항 연산자가 필요합니다" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: 단항 연산자가 필요합니다" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "']' 빠짐" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "문법 오류: `%s' 필요하지 않음" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "부적절한 시그널 번호" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: 최대 트랩 핸들러 레벨 초과 (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: trap_list[%d]에 잘못된 값: %p" -#: trap.c:416 +#: trap.c:454 #, 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:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: 잘못된 시그널 %d번" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "`%s'의 함수 정의 가져오기 오류" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "셸 레벨 (%d)이 너무 높습니다, 1로 재설정합니다" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "최대 here-document 카운트 초과" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: 현재 범위에서 함수 컨텍스트 없음" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: 변수는 할당 값이 아님" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: 비호환 형식의 값을 가져올 수 없음" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: 이름 참조에 정수를 할당하고 있음" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: 현재 범위에서 함수 컨텍스트 없음" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s이(가) null exportstr을 가짐" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "%2$s의 exportstr에서 부적절한 문자 %1$d" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "%s의 exportstr에 '=' 없음" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: shell_variables의 시작이 함수의 컨텍스트가 아님" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: 컨텍스트에 global_variables 없음" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: shell_variables의 시작이 임시 환경 범위가 아님" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: <파일>로 열 수 없음" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: 추척 파일 서술자에 부적절한 값" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: 호환 값이 범위를 벗어남" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.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/license/gpl.html>\n" +#: 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/license/gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, 버전 %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "이 프로그램은 자유 소프트웨어입니다. 자유롭게 바꾸고 재배포할 수 있습니다." +msgstr "" +"이 프로그램은 자유 소프트웨어입니다. 자유롭게 바꾸고 재배포할 수 있습니다." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "법률이 허용하는 모든 범위내의 보증은 없습니다." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %lu 바이트를 할당할 수 없음 (%lu 바이트 할당함)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: %lu 바이트를 할당할 수 없음" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: %lu 바이트를 할당할 수 없음 (%lu 바이트 할당함)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: %lu 바이트를 할당할 수 없음" @@ -2228,8 +2315,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] <이름> [<이름> ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m <키매핑>] [-f <파일이름>] [-q <이름>] [-u <이름>] [-r <키시퀀스>] [-x <키시퀀스>:<셸명령>] [<키시퀀스>:<행읽기함수> 또는 <행읽기명령>]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m <키매핑>] [-f <파일이름>] [-q <이름>] [-u <이름>] [-r <" +"키시퀀스>] [-x <키시퀀스>:<셸명령>] [<키시퀀스>:<행읽기함수> 또는 <행읽기명령" +">]" #: builtins.c:56 msgid "break [n]" @@ -2248,7 +2340,8 @@ msgid "caller [expr]" msgstr "caller [<표현식>]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [<디렉터리>]" #: builtins.c:68 @@ -2260,11 +2353,15 @@ msgid "command [-pVv] command [arg ...]" msgstr "<명령> [-pVv] <명령> [<인자> ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" msgstr "declare [-aAfFgilnrtux] [-p] [<이름>[=<값>] ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" msgstr "typeset [-aAfFgilnrtux] [-p] <이름>[=<값>] ..." #: builtins.c:82 @@ -2305,7 +2402,9 @@ msgstr "logout [<번호>]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "fc [-e <편집기이름>] [-lnr] [<처음>] [<종결>] 또는 fc -s [<패턴>=<대체>] [<명령>]" +msgstr "" +"fc [-e <편집기이름>] [-lnr] [<처음>] [<종결>] 또는 fc -s [<패턴>=<대체>] [<명" +"령>]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2324,8 +2423,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [<패턴> ...]" #: builtins.c:123 -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:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2336,16 +2439,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [<작업명세> ... | <PID> ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s <시그널명세> | -n <시그널번호> | -<시그널명세>] <PID> | <작업명세> ... 또는 kill -l [<시그널명세>]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s <시그널명세> | -n <시그널번호> | -<시그널명세>] <PID> | <작업명세" +"> ... 또는 kill -l [<시그널명세>]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let <인자> [<인자> ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a <배열>] [-d <구분자>] [-i <텍스트>] [-n <문자수>] [-N <문자수>] [-p <프롬프트>] [-t <제한시간>] [-u <파일서술자>] [<이름> ...]" +#, fuzzy +msgid "" +"read [-Eers] [-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:140 msgid "return [n]" @@ -2392,7 +2504,8 @@ msgid "[ arg... ]" msgstr "[ <인자>... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[<인자>] <시그널_명세> ...]" #: builtins.c:168 @@ -2416,106 +2529,134 @@ msgid "wait [pid ...]" msgstr "wait [<PID> ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for <이름> [in <여러단어> ... ] ; do <명령>; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( <조건식1>; <조건식2>; <조건식3> )); do <명령>; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select <이름> [in <여러단어> ... ;] do <명령>; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] <파이프라인>" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case <단어> in [<패턴> [| <패턴>]...) <명령> ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if <명령>; then <명령>; [ elif <명령>; then <명령>; ]... [ else <명령>; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if <명령>; then <명령>; [ elif <명령>; then <명령>; ]... [ else <명령>; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while <명령>; do <명령-2>; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until <명령>; do <명령-2>; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [<이름>] <명령> [<방향재지정>]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function <이름> { <명령> ; } 또는 <이름> () { <명령> ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ <명령> ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( <표현식> ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ <표현식> ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - 이름이자 일부 셸 변수를 의미합니다" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+<갯수> | -<갯수> | <디렉터리>]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+<갯수> | -<갯수>]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+<갯수>] [-<갯수>]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [<옵션이름>...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v <변수>] <출력형식> [<인자>]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o <옵션>] [-A <동작>] [-G <글롭패턴>] [-W <단어목록>] [-F <함수>] [-C <명령>] [-X <필터패턴>] [-P <접두어>] [-S <접미어>] [<이름> ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o <옵션>] [-A <동작>] [-G <글롭패턴" +">] [-W <단어목록>] [-F <함수>] [-C <명령>] [-X <필터패턴>] [-P <접두어>] [-" +"S <접미어>] [<이름> ...]" -#: builtins.c:235 -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 +#, fuzzy +msgid "" +"compgen [-V varname] [-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:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o <옵션>] [-DEI] [<이름> ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d <구분자>] [-n <갯수>] [-O <시작>] [-s <갯수>] [-t] [-u <파일서술자>] [-C <콜백>] [-c <양자>] [<배열>]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d <구분자>] [-n <갯수>] [-O <시작>] [-s <갯수>] [-t] [-u <파일서술자>] [-C <콜백>] [-c <양자>] [<배열>]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d <구분자>] [-n <갯수>] [-O <시작>] [-s <갯수>] [-t] [-u <파일서술" +"자>] [-C <콜백>] [-c <양자>] [<배열>]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d <구분자>] [-n <갯수>] [-O <시작>] [-s <갯수>] [-t] [-u <파일서" +"술자>] [-C <콜백>] [-c <양자>] [<배열>]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2530,7 +2671,8 @@ 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" @@ -2548,7 +2690,7 @@ msgstr "" " 종료 상태:\n" " 별칭으로 지정한 <이름>을 확인하면 참을 반환합니다." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2564,7 +2706,7 @@ msgstr "" " \n" " <이름>이 기존 별칭일 경우 성공을 반환합니다." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2576,25 +2718,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2609,14 +2756,18 @@ msgstr "" " \n" " 옵션:\n" " -m <키매핑> <키매핑>을 이 명령 실행동안 사용하는 키매핑\n" -" 으로 활용합니다. 허용할 수 있는 키매핑 이름은 emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" 으로 활용합니다. 허용할 수 있는 키매핑 이름은 " +"emacs,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, vi-insert가 있습니다.\n" " -l 함수 이름 목록.\n" " -P 함수 이름 및 바인딩 목록.\n" -" -p 입력에 다시 활용할 수 있는 형식의 함수 이름과 바인딩 목록.\n" +" -p 입력에 다시 활용할 수 있는 형식의 함수 이름과 바인" +"딩 목록.\n" " -S 매크로와 값을 실행하는 키 시퀀스 목록\n" -" -s 입력으로 다시 활용할 수 있는 매크로와 값을 실행하는\n" +" -s 입력으로 다시 활용할 수 있는 매크로와 값을 실행하" +"는\n" " 키 시퀀스 목록.\n" " -V 변수 이름과 값 목록\n" " -v 입력으로 다시 활용할 수 있는 변수 이름과 값 목록.\n" @@ -2632,7 +2783,7 @@ msgstr "" " 종료 상태:\n" " 알 수 없는 옵션을 지정하지 않았거나 오류가 없으면 0을 반환합니다." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2650,7 +2801,7 @@ msgstr "" " 종료 상태:\n" " <횟수>가 1보다 크거나 같으면 0입니다." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2668,13 +2819,14 @@ msgstr "" " 종료 상태:\n" " <횟수>가 1보다 크거나 같으면 0입니다." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2690,7 +2842,7 @@ msgstr "" " <셸내장명령>의 종료 상태를 반환하거나 <셸내장명령>이 내장\n" " 명령이 아닐 경우 거짓을 반환합니다." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2714,20 +2866,27 @@ msgstr "" " <표현식>의 값은 현재 호출 프레임으로부터 얼마나 되돌아가야 하는지를\n" " 나타냅니다. 최상단 프레임은 프레임 0번입니다." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2743,11 +2902,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "셸 작업 디렉터리를 바꿉니다.\n" @@ -2760,7 +2921,8 @@ msgstr "" " 현재 디렉터리와 같습니다. <디렉터리> 값이 슬래시 문자(/)로 시작하면, \n" " CDPATH 변수를 사용하지 않습니다.\n" " \n" -" 디렉터리가 없고, `cdable_vars' 셸 옵션을 설정했다면, 단어를 변수 이름으로\n" +" 디렉터리가 없고, `cdable_vars' 셸 옵션을 설정했다면, 단어를 변수 이름으" +"로\n" " 가정합니다. 변수에 값이 들어가있다면, 해당 값을 <디렉터리> 값으로 활용\n" " 합니다.\n" " \n" @@ -2775,7 +2937,8 @@ msgstr "" " -@\t이 옵션을 지원하는 시스템에서는 파일 속성이 들어간\n" " \t\t디렉터리처럼 확장 속성을 가진 파일을 나타냅니다\n" " \n" -" `-L' 옵션을 지정했을 때와 같이 심볼릭 링크를 따라가는게 기본 동작입니다.\n" +" `-L' 옵션을 지정했을 때와 같이 심볼릭 링크를 따라가는게 기본 동작입니" +"다.\n" " `..'은 이전 경로 이름 요소를 즉시 제거하여 슬래시 경로로 돌아가거나\n" " <디렉터리>의 시작점으로 돌아갑니댜.\n" " \n" @@ -2783,7 +2946,7 @@ msgstr "" " 디렉터리가 바뀌었고 -P 옵션을 사용했을 때 $PWD 값을 제대로 설정하면\n" " 0 값을 반환하며, 그렇지 않으면 0이 아닌 값을 반환합니다." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2809,7 +2972,7 @@ msgstr "" " 종료 상태:\n" " 적절한 옵션이 붙었거나 현재 디렉터리를 읽을 수 있다면 0을 반환합니다." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2825,7 +2988,7 @@ msgstr "" " 종료 상태:\n" " 항상 성공합니다." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2837,7 +3000,7 @@ msgstr "" " 종료 상태:\n" " 항상 성공합니다." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2849,12 +3012,13 @@ msgstr "" " 종료 상태:\n" " 항상 실패합니다." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2868,8 +3032,10 @@ msgid "" msgstr "" "간단한 명령을 실행하거나 명령 정보를 표시합니다.\n" " \n" -" 셸 함수 탐색을 억제하는 <인자>로 <명령>을 실행하거나, 지정 <명령>의 정보를\n" -" 나타냅니다. 동일한 이름을 가진 함수가 있을 때 디스크의 명령을 실행할 경우\n" +" 셸 함수 탐색을 억제하는 <인자>로 <명령>을 실행하거나, 지정 <명령>의 정보" +"를\n" +" 나타냅니다. 동일한 이름을 가진 함수가 있을 때 디스크의 명령을 실행할 경" +"우\n" " 활용할 수 있습니다.\n" " \n" " 옵션:\n" @@ -2881,7 +3047,8 @@ msgstr "" " 종료 상태:\n" " <명령>의 실행 결과를 반환하거나 <명령>이 없을 경우 오류를 반환합니다." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2909,12 +3076,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2959,7 +3128,7 @@ msgstr "" " 적절한 옵션을 설정했거나 변수 할당 오류가 없다면\n" " 성공을 반환합니다." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2969,7 +3138,7 @@ msgstr "" " \n" " `declare'의 동의어 입니다. `help declare'를 보십시오." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2995,11 +3164,12 @@ msgstr "" " 적절한 옵션을 지정했거나, 변수 할당에 오류가 없거나,\n" " 셸에서 함수를 실행하면 성공을 반환합니다." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3023,9 +3193,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3061,7 +3233,7 @@ msgstr "" " 종료 상태:\n" " 기록 오류가 없으면 성공을 반환합니다." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3083,7 +3255,8 @@ msgstr "" " 종료 상태:\n" " 기록 오류가 없다면 성공을 반환합니다." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3103,6 +3276,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3133,11 +3312,12 @@ msgstr "" " 종료 상태:\n" " <이름>이 셸 내장 명령이고 오류가 없으면 성공을 반환합니다." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3151,7 +3331,7 @@ msgstr "" " 종료 상태:\n" " 명령 값이 있다면 종료 상태를, null 이라면 성공을 반환합니다." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3227,12 +3407,13 @@ msgstr "" " 옵션을 찾으면 성공을 반환합니다.옵션의 끝에 도달했거나, 오류가\n" " 나타나면 실패를 반환합니다." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3240,11 +3421,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "셸을 주어진 명령으로 대체합니다.\n" " \n" @@ -3263,7 +3446,7 @@ msgstr "" " 종료 상태:\n" " <명령>이 있거나 방향재지정 실행시 오류가 없다면 성공을 반환합니다." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3275,11 +3458,12 @@ msgstr "" " <번호> 값 상태로 셸을 나갑니다. <번호>를 지정하지 않으면,\n" " 종료 상태는 최종 명령 실행 상태와 동일합니다." -#: builtins.c:724 +#: builtins.c:732 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 "" "로그인 셸을 나갑니다.\n" @@ -3287,17 +3471,20 @@ msgstr "" " 종료 상태 N으로 로그인 셸을 나갑니다. 로그인 셸에서 실행되지 않는 경우\n" " 에러가 발생합니다." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3310,8 +3497,11 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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" @@ -3334,9 +3524,10 @@ msgstr "" " 최근 명령을 다시 실행할 수 있습니다.\n" " \n" " 종료 상태:\n" -" 성공 또는 실행 명령 상태를 반환합니다. 오류가 있다면 0이 아닌 값을 반환합니다." +" 성공 또는 실행 명령 상태를 반환합니다. 오류가 있다면 0이 아닌 값을 반환합" +"니다." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3354,14 +3545,17 @@ msgstr "" " 활용합니다.\n" " \n" " 종료 상태:\n" -" 포그라운드에 있는 명령의 상태를 반환합니다. 오류가 있다면 실패를 반환합니다." +" 포그라운드에 있는 명령의 상태를 반환합니다. 오류가 있다면 실패를 반환합니" +"다." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3376,12 +3570,13 @@ msgstr "" " 종료 상태:\n" " 작업 컨트롤이 있고 오류가 없다면 성공을 반환합니다." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3417,7 +3612,7 @@ msgstr "" " 종료 상태:\n" " <이름>을 찾았거나 적절한 옵션을 지정했다면 성공을 반환합니다." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3435,7 +3630,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "내장 명령 정보를 표시합니다.\n" " \n" @@ -3452,9 +3648,11 @@ msgstr "" " <패턴>\t도움말 주제를 지정합니다\n" " \n" " 종료 상태:\n" -" <패턴>에 일치하는 주제를 찾았거나 적절한 옵션을 지정하면 성공을 반환합니다." +" <패턴>에 일치하는 주제를 찾았거나 적절한 옵션을 지정하면 성공을 반환합니" +"다." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3478,11 +3676,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3513,12 +3716,13 @@ msgstr "" " \n" " HISTTIMEFORMAT 변수에 값을 설정하여 널 상태가 아니라면 해당 값을\n" " 앞으로 표시할 각 기록 항목에 대한 타임스탬프를 출력할 때 strftime(3)의\n" -" 형식 문자열로 활용합니다. 그렇지 않으면 타임스탬프를 출력하지 않습니다.\n" +" 형식 문자열로 활용합니다. 그렇지 않으면 타임스탬프를 출력하지 않습니" +"다.\n" " \n" " 종료 상태:\n" " 적절한 옵션을 설정했거나 오류가 없다면 성공을 반환합니다." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3561,7 +3765,7 @@ msgstr "" " 적절한 옵션을 설정했거나 오류가 없다면 성공을 반환합니다.\n" " -x 옵션을 사용했다면 <명령>의 종료 상태를 반환합니다." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3589,9 +3793,10 @@ msgstr "" " -r\t실행 작업만 제거합니다\n" " \n" " 종료 상태:\n" -" 적절한 옵션을 지정하고 주어진 <JOBSPEC> 값이 올바를 경우 성공을 반환합니다." +" 적절한 옵션을 지정하고 주어진 <JOBSPEC> 값이 올바를 경우 성공을 반환합니" +"다." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3633,14 +3838,15 @@ msgstr "" " 종료 상태:\n" " 적절한 옵션을 설정했거나 오류가 없다면 성공을 반환합니다." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3714,19 +3920,24 @@ msgstr "" " 종료 상태:\n" " <인자>가 0을 계산하면 1을 반환하고 그렇지 않으면 0을 반환합니다." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3734,11 +3945,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3756,8 +3970,10 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "표준 입력에서 행을 읽고 필드 단위로 분리합니다.\n" @@ -3777,17 +3993,21 @@ msgstr "" " -d <구분>\t개행 문자가 아닌 DELIM의 첫 글자를 읽을 때까지 계속합니다\n" " -e\t행 읽기에 readline을 활용합니다\n" " -i <텍스트>\treadline 초기 텍스트 값으로 TEXT를 활용합니다.\n" -" -n <문자수>\t개행 문자를 기다리기 보다는 <문자수> 만큼의 문자를 읽은 다음\n" -" \t\t반환합니다만, 구분 문자가 나타나기 전에 <문자수> 만큼 읽었을 때 개행 문자가\n" +" -n <문자수>\t개행 문자를 기다리기 보다는 <문자수> 만큼의 문자를 읽은 다" +"음\n" +" \t\t반환합니다만, 구분 문자가 나타나기 전에 <문자수> 만큼 읽었을 때 개행 " +"문자가\n" " \t\t먼저 오면 구분 문자보다 개행 문자를 우선 처리합니다.\n" " -N <문자수>\tEOF가 나타났거나, 읽기 시간 초과가 있지 않은 한,\n" " \t\t<문자수> 만큼 문자를 읽은 다음 구분자를 무시하고 값을 반환합니다.\n" -" -p <프롬프트>\t읽기 전, 개행 문자를 제외하고 PROMPT 문자열을 출력합니다\n" +" -p <프롬프트>\t읽기 전, 개행 문자를 제외하고 PROMPT 문자열을 출력합니" +"다\n" " -r\t문자를 이스케이핑하는 백슬래시 문자를 허용하지 않습니다\n" " -s\t터미널의 입력에 대해 반향 출력 처리하지 않습니다\n" " -t <제한시간>\tTIIMEOUT 초 이내에 입력 행을 완전히 읽지 않으면 실패를\n" " \t\t반환합니다. TMOUT 변수 기본 값은 기본 제한시간입니다. TIMEOUT은\n" -" \t\t분수 값입니다. 이 값을 0으로 지정하면, 어떤 결과를 읽으려 시도하지 않고\n" +" \t\t분수 값입니다. 이 값을 0으로 지정하면, 어떤 결과를 읽으려 시도하지 않" +"고\n" " \t\t읽은 결과를 바로 반환하며, 지정 파일 서술자에 입력이 있을 경우에만\n" " \t\t성공을 반환합니다. 시간을 초과하면 종료 상태값은 128보다 큽니다.\n" " -u <파일서술자>\t표준 입력 대신 파일 서술자에서 읽습니다.\n" @@ -3797,7 +4017,7 @@ msgstr "" " 128보다 큰 수 반환), 변수 할당 오류가 없었다거나, -u 옵션에 잘못된 파일\n" " 서술자를 지정하지 않았다면 0 값을 반환합니다." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3818,7 +4038,8 @@ msgstr "" " <횟수>를 반환하거나, 셸에서 함수 또는 스크립트를\n" " 실행하지 않으면 실패를 반환합니다." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3861,7 +4082,8 @@ 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" @@ -3885,13 +4107,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3941,7 +4168,8 @@ msgstr "" " onecmd -t와 동일\n" " physical -P와 동일\n" " pipefail 파이프라인 반환 값은 최종 명령의 0이 아닌\n" -" 종료 상태이거나, 0이 아닌 종료 상태를 반환한 명령이\n" +" 종료 상태이거나, 0이 아닌 종료 상태를 반환한 명령" +"이\n" " 없다면 0 값을 반환함\n" " posix 배시 동작을 바꾸어 POSIX 표준과 다른 기본 동작\n" " 부분을 표준에 맞춤\n" @@ -3968,7 +4196,8 @@ msgstr "" " -T 이 옵션을 설정하면, DEBUG와 RETURN을 셸 함수에서 계승합니다..\n" " -- 남은 인자를 위치 매개변수로 할당합니다. 남은 인자가 없으면\n" " 위치 매개변수를 삭제합니다.\n" -" - 남은 인자를 위치 매개변수로 할당합니다. -x 옵션과 -v 옵션을 끕니다.\n" +" - 남은 인자를 위치 매개변수로 할당합니다. -x 옵션과 -v 옵션을 끕니" +"다.\n" " \n" " 플래그를 사용하려면 + 를, 아니면 - 기호를 씁니다. 플래그는 셸 실행애\n" " 활용할 수도 있습니다. 현재 플래그 셋은 $-에 있습니다. 남은 <인자>는\n" @@ -3978,7 +4207,7 @@ msgstr "" " 종료 상태:\n" " 적절한 옵션을 지정하면 성공을 반환합니다." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3990,7 +4219,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4016,12 +4246,13 @@ msgstr "" " 종료 상태:\n" " 적절한 옵션을 지정했거나 <이름>이 읽기 전용이 아니면 성공을 반환합니다." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4035,7 +4266,8 @@ msgid "" msgstr "" "셸 변수 속성을 내보내기 설정합니다.\n" " \n" -" 각 <이름>은 명령을 계속 실행해나가면서 환경에 내보내기(export)처리 합니다.\n" +" 각 <이름>은 명령을 계속 실행해나가면서 환경에 내보내기(export)처리 합니" +"다.\n" " <값>을 지정했다면 내보내기(export) 전, <값>을 할당합니다.\n" " \n" " 옵션:\n" @@ -4048,7 +4280,7 @@ msgstr "" " 종료 상태:\n" " 적절한 옵션을 설정했거나 <이름>이 올바르면 성공을 반환합니다." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4086,7 +4318,7 @@ msgstr "" " 종료 상태:\n" " 적절한 옵션을 지정했거나 <이름>이 올바르면 성공을 반환합니다." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4099,12 +4331,13 @@ msgstr "" "위치 매개변수를 이동합니다.\n" " \n" " <초기횟수> 값을 지정하지 않으면 , $<초기횟수>+1, $<초기횟수>+2,\n" -" ... $1, $2 ... 로 위치 매개변수 이름을 바꾸며, <초기횟수> 값은 1로 가정합니다.\n" +" ... $1, $2 ... 로 위치 매개변수 이름을 바꾸며, <초기횟수> 값은 1로 가정" +"합니다.\n" " \n" " 종료 상태:\n" " <횟수>가 양수거나 $# 보다 작거나 같으면 성공을 반환합니다." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4127,15 +4360,18 @@ msgstr "" " <파일이름>의 마지막 명령 실행 상태를 반환합니다. <파일이름>을\n" " 읽지 못하면, 실패를 반환합니다." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4151,7 +4387,7 @@ msgstr "" " 종료 상태:\n" " 작업 컨트롤이 동작하거나 오류가 없으면 성공을 반환합니다." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4185,7 +4421,8 @@ 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" @@ -4206,7 +4443,8 @@ 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" @@ -4296,7 +4534,8 @@ msgstr "" " \n" " ! <표현식> 표현식이 거짓이면 참.\n" " <표현식1> -a <표현식2> <표현식1>, <표현식2>가 모두 참이면 참.\n" -" <표현식1> -o <표현식2> <표현식1> 또는 <표현식2> 둘 중 하나가 참이면 참.\n" +" <표현식1> -o <표현식2> <표현식1> 또는 <표현식2> 둘 중 하나가 참이면 " +"참.\n" " \n" " <변수1> <연산자> <변수2> 산술 시험. <연산자>는 -eq, -ne,\n" " -lt, -le, -gt, or -ge 중 하나.\n" @@ -4308,7 +4547,7 @@ msgstr "" " <표현식>이 참이면 성공을 반환합니다. <표현식>이 거짓을 결과로 냈거나\n" " 부적절한 인자를 대입하면 실패를 반환합니다." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4320,11 +4559,12 @@ msgstr "" " \"test\" 내장 명령의 동의 명령입니다만, 마지막 인자는 반드시\n" " `]' 문자로 마무리하여 열기 괄호 `['와 일치해야합니다." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4338,39 +4578,54 @@ msgstr "" " 종료 상태:\n" " 항상 성공." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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" @@ -4404,7 +4659,7 @@ msgstr "" " 종료 상태:\n" " 적절한 <시그널명세> 또는 옵션을 지정했다면 성공을 반환합니다." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4430,7 +4685,8 @@ 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" @@ -4456,11 +4712,13 @@ msgstr "" " 종료 상태:\n" " 모든 <이름>을 찾으면 성공을 반환, 그렇지 않으면 실패를 반환합니다." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4497,9 +4755,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4549,7 +4808,7 @@ msgstr "" " 종료 상태:\n" " 옵션을 올바르게 설정했거나 오류가 없다면 성공을 반환합니다." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4581,23 +4840,27 @@ msgstr "" " 종료 상태:\n" " <모드>가 올바르거나 옵션을 적절하게 설정하면 성공을 반환합니다." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4631,16 +4894,18 @@ msgstr "" " 했다든지, -n 옵션을 지정하고 셸에서 하위 프로세스를 기다리지 않는\n" " 다면 실패를 반환합니다." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "프로세스 처리 완료를 기다리고 종료 상태를 반환합니다.\n" @@ -4653,7 +4918,16 @@ msgstr "" " 최종 PID의 상태를 반환합니다. PID 값이 잘못되었거나,\n" " 부적절한 옵션을 지정하면 실패를 반환합니다." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4675,7 +4949,7 @@ msgstr "" " 종료 상태:\n" " 최종 명령 실행 상태를 반환합니다." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4699,13 +4973,14 @@ msgstr "" " \t\t <명령>\n" " \t\t (( 표현식3 ))\n" " \tdone\n" -" <표현식1>, <표현식2>, <표현식3> 은 산술 수식입니다. 어떤 수식이든 생략하면\n" +" <표현식1>, <표현식2>, <표현식3> 은 산술 수식입니다. 어떤 수식이든 생략" +"하면\n" " 1 값을 계산한걸로 간주합니다.\n" " \n" " 종료 상태:\n" " 최종 명령 실행 상태를 반환합니다." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4739,7 +5014,7 @@ msgstr "" " 종료 상태:\n" " 마지막 명령 실행 상태를 반환합니다." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4757,7 +5032,8 @@ msgstr "" "파이프라인 실행의 소요 시간을 보고합니다.\n" " \n" " <파이프라인>을 실행한 후 파이프라인이 멈췄을 때, <파이프라인> 실행에\n" -" 걸린 실제 시간, 사용자 CPU 시간, 시스템 CPU 시간 요약 내용을 출력합니다.\n" +" 걸린 실제 시간, 사용자 CPU 시간, 시스템 CPU 시간 요약 내용을 출력합니" +"다.\n" " \n" " 옵션:\n" " -p\t이식성이 있는 POSIX 형식의 타이밍 요약 내용을 출력합니다.\n" @@ -4767,7 +5043,7 @@ msgstr "" " 종료 상태:\n" " <파이프라인>의 반환 상태가 곧 반환 상태 입니다." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4785,16 +5061,21 @@ msgstr "" " 종료 상태:\n" " 최종 명령 실행 상태를 반환합니다." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4812,11 +5093,12 @@ msgstr "" " 종료 상태:\n" " 최종 명령 실행 상태 값을 반환합니다." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4829,11 +5111,12 @@ msgstr "" " 종료 상태:\n" " 최종 명령 상태를 반환합니다." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4846,7 +5129,7 @@ msgstr "" " 종료 상태:\n" " 최종 명령 실행 상태를 반환합니다." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4867,12 +5150,13 @@ msgstr "" " 종료 상태:\n" " coproc 명령이 종료 상태 0을 반환합니다." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4888,7 +5172,7 @@ msgstr "" " 종료 상태:\n" " <이름>이 읽기 전용이 아니라면 참을 반환합니다." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4906,7 +5190,7 @@ msgstr "" " 종료 상태:\n" " 최종 명령 실행 상태를 반환합니다." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4929,7 +5213,7 @@ msgstr "" " 종료 상태:\n" " 재개한 작업의 상태를 반환합니다." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4941,18 +5225,22 @@ msgid "" msgstr "" "산술 연산을 수행합니다.\n" " \n" -" <표현식>은 산술 연산 규칙에 따라 실행합니다. `let \"<표현식>\"'과 동일합니다.\n" +" <표현식>은 산술 연산 규칙에 따라 실행합니다. `let \"<표현식>\"'과 동일합" +"니다.\n" " \n" " 종료 상태:\n" " <표현식> 결과가 0이면 1을 반환하고 그렇지 않으면 0을 반환합니다." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -4972,26 +5260,31 @@ msgid "" msgstr "" "조건 명령을 수행합니다.\n" " \n" -" <표현식>의 조건문 수행의 처리 결과에 따라 상태값을 0 또는 1로 반환합니다.\n" +" <표현식>의 조건문 수행의 처리 결과에 따라 상태값을 0 또는 1로 반환합니" +"다.\n" " 표현식은 `test' 내장 명령에서 활용하는 동일한 규칙에 따라 작성하며,\n" " 다음 연산자로 결합합니다:\n" " ( <표현식> )\t<표현식>의 값을 반환\n" " ! <표현식>\t\t <표현식> 결과가 거짓이면 참을, 그렇지 않으면 거짓을 반환\n" " <표현식1> && <표현식2>\t\t<표현식1>과 <표현식2>가 모두 참이면 참을\n" " \t\t\t\t그렇지 않으면 거짓을 반환\n" -" <표현식1> || <표현식2>\t\t<표현식1> 또는 <표현식2> 둘 중 하나가 참이면 참을\n" +" <표현식1> || <표현식2>\t\t<표현식1> 또는 <표현식2> 둘 중 하나가 참이면 참" +"을\n" " \t\t\t\t그렇지 않으면 거짓을 반환\n" " \n" -" `=='과 `!=' 연산자를 사용한다면 우항의 문자열은 패턴으로 활용하며, 패턴 검사를\n" -" 수행합니다. `=~' 연산자를 사용할 때는 우항의 문자열은 정규표현식으로 간주합니다.\n" +" `=='과 `!=' 연산자를 사용한다면 우항의 문자열은 패턴으로 활용하며, 패턴 " +"검사를\n" +" 수행합니다. `=~' 연산자를 사용할 때는 우항의 문자열은 정규표현식으로 간주" +"합니다.\n" " \n" -" && 연산자와 || 연산자는 <표현식1>이 표현식 값을 내는데 충분하다면 <표현식2>를\n" +" && 연산자와 || 연산자는 <표현식1>이 표현식 값을 내는데 충분하다면 <표현" +"식2>를\n" " 처리하지는 않습니다.\n" " \n" " 종료 상태:\n" " <표현식> 값에 따라 0 또는 1을 반환합니다." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5090,7 +5383,7 @@ msgstr "" " HISTIGNORE\t어떤 명령을 기록 목록에 저장해야 하는지 판단할 때\n" " \t\t활용하는 콜론 구분 패턴 목록입니다.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5146,7 +5439,7 @@ msgstr "" " 적절한 인자를 지정하고 디렉터리 변경에 성공하면 성공을 반환\n" " 합니다." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5197,7 +5490,7 @@ msgstr "" " 적절한 인자를 지정했거나 디렉터리를 제대로 이동했다면\n" " 성공을 반환합니다.전" -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5238,15 +5531,17 @@ msgstr "" " -v\t한 줄에 하나씩 스택의 위치 및 디렉터리 스택을 표시합니다\n" " \n" " 인자:\n" -" +N\t인자 없이 실행될 때 보여지는 목록의 왼쪽부터 N번째 항목을 보여줍니다.\n" +" +N\t인자 없이 실행될 때 보여지는 목록의 왼쪽부터 N번째 항목을 보여줍니" +"다.\n" " \t세는 수는 0부터 시작합니다.\n" " \n" -" -N\t인자 없이 실행될 때 보여지는 목록의 오른쪽부터 N번째 항목을 보여줍니다.\n" +" -N\t인자 없이 실행될 때 보여지는 목록의 오른쪽부터 N번째 항목을 보여줍" +"니다.\n" "\t세는 수는 0부터 시작합니다.\n" " 종료 상태:\n" " 부적절한 옵션이 주어지거나 오류가 발생하지 않는다면 성공을 반환합니다." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5282,7 +5577,8 @@ msgstr "" " <옵션이름>을 활성화했다면 성공을 반환합니다. 부적절한 옵션을\n" " 지정했거나 <옵션이름>을 사용하지 않으면 실패를 반환합니다." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5290,29 +5586,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "<형식>에 따라 <인자>를 구성하고 출력합니다.\n" @@ -5321,11 +5624,13 @@ msgstr "" " -v <변수>\t표준 출력에 나타내는 대신 셸 <변수>에 할당합니다.\n" " \n" " <형식>은 세가지 형식의 객체가 들어간 문자열입니다. 표준 출력에 그냥\n" -" 복사하는 일반 문자, 표준 출력에 변환하여 복사하는 문자 이스케이핑 시퀀스,\n" +" 복사하는 일반 문자, 표준 출력에 변환하여 복사하는 문자 이스케이핑 시퀀" +"스,\n" " 그리고 다음 뒤따라오는 인자를 형식에 맞춰 출력하는 형식 지정자가 바로\n" " 세가지 형식 입니다.\n" " \n" -" 게다가 printf(1)에 표준 형식 지정자에서 printf는 다음과 같이 해석합니다:\n" +" 게다가 printf(1)에 표준 형식 지정자에서 printf는 다음과 같이 해석합니" +"다:\n" " \n" " %b\t관련 인자의 백슬래시 이스케이프 시퀀스를 확장합니다\n" " %q\t셸 입력으로 다시 사용할 수 있도록 변수를 따옴표 처리합니다\n" @@ -5341,13 +5646,16 @@ msgstr "" " 적절한 옵션을 설정했거나 기록, 할당 오류가 나타나지 않으면 성공을\n" " 반환합니다." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5361,8 +5669,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5379,24 +5689,32 @@ msgstr "" " \t\t모든 완성 명세를 제거합니다\n" " -D\t어떤 개별 완성 명세 없이 명령에 대해 기본 완성 명세와 동작을\n" " \t\t적용합니다\n" -" -E\t\"빈\" 명령에 대해 완성 명세와 동작을 적용합니다 -- 빈 줄 상태에서\n" +" -E\t\"빈\" 명령에 대해 완성 명세와 동작을 적용합니다 -- 빈 줄 상태에" +"서\n" " \t\t완성 동작을 시도합니다\n" " -I\t초기 단어(보통 명령) 완성 명세와 동작을 적용합니다\n" " \n" -" 완성 동작을 시도할 때 상단에 대문자 옵션 순서대로 동작을 적용합니다. 여러\n" +" 완성 동작을 시도할 때 상단에 대문자 옵션 순서대로 동작을 적용합니다. 여" +"러\n" " 옵션을 지정하면 -D 옵션은 -E 옵션보다 우선하며, 두 옵션은 -I 옵션보다\n" " 우선합니다.\n" " \n" " 종료 상태:\n" " 적절한 옵션을 지정했거나 오류가 발생하지 않으면 성공을 반환합니다." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5409,13 +5727,16 @@ msgstr "" " 종료 상태:\n" " 적절한 옵션을 지정했거나 오류가 없으면 성공을 반환합니다." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5440,8 +5761,10 @@ msgstr "" "자동 완성 옵션을 수정하거나 표시합니다.\n" "\n" " 각 <이름> 별로 자동 완성 옵션을 수정하거나, 지정 <이름>이 없다면,\n" -" 현재 실행하는 명령의 자동완성 옵션을 수정합니다. 주어진 <옵션>이 없다면\n" -" 각 <이름> 별 자동 완성 옵션을 출력하거나 현재 자동 완성 명세를 출력합니다.\n" +" 현재 실행하는 명령의 자동완성 옵션을 수정합니다. 주어진 <옵션>이 없다" +"면\n" +" 각 <이름> 별 자동 완성 옵션을 출력하거나 현재 자동 완성 명세를 출력합니" +"다.\n" " \n" " 옵션:\n" " \t-o <옵션>\t각 <이름>별 <옵션>을 설정합니다\n" @@ -5462,21 +5785,26 @@ msgstr "" " 부적절한 옵션을 지정하지 않았거나 <이름>에 자동 완성 명세를 지정했다면\n" " 성공을 반환합니다." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5489,11 +5817,13 @@ 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" @@ -5519,7 +5849,8 @@ msgstr "" " <배열>\t파일 데이터에 활용할 배열 변수 이름\n" " \n" " -c 옵션 없이 -C를 지정하면, 기본 양자 수는 5000입니다. <콜백>을\n" -" 실행하면, 다음 배열 요소의 색인 번호를 할당하고, 해당 요소에 할당할 행을\n" +" 실행하면, 다음 배열 요소의 색인 번호를 할당하고, 해당 요소에 할당할 행" +"을\n" " 추가 인자로 지정합니다.\n" " \n" " <시작> 색인 번호를 제대로 지정하지 않으면, mapfile에서 <배열>에\n" @@ -5529,7 +5860,7 @@ msgstr "" " 부적절한 옵션을 주지 않았거나 <배열>을 읽기 전용으로 두지 않았거나\n" " 색인 배열로 올바르게 지정했다면 성공을 반환합니다." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5538,3 +5869,28 @@ msgstr "" "파일에서 줄을 읽어 배열 변수에 넣습니다.\n" " \n" " `mapfile'의 동의어." + +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "현재 하위루틴 호출의 컨텍스트를 반환합니다.\n" +#~ " \n" +#~ " <표현식>을 지정하지 않으면 \"$line $filename\"을 반환합니다.\n" +#~ " <표현식>을 지정하면 \"$line $subroutine $filename\"을 반환합니다.\n" +#~ " 추가 정보는 스택 추적을 제공할 때 활용할 수 있습니다.\n" +#~ " \n" +#~ " <표현식>의 값은 현재 호출 프레임에서 얼마나 뒤로 돌아가야 하는지를\n" +#~ " 나타냅니다. 최상단 호출 프레임은 프레임 0번입니다." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "경고: %s: %s" diff --git a/po/lt.gmo b/po/lt.gmo index 59b429253608117c3e9ddee6107f524f79605045..87efd568cf1651862956ab5b668bf8a65375b5b1 100644 GIT binary patch delta 6874 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 J9S3GF{SOPs?s@<K delta 7336 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 A=>Px# diff --git a/po/lt.po b/po/lt.po index 6bcc068ee..0551b509f 100644 --- a/po/lt.po +++ b/po/lt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-4.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2009-03-25 16:49+0200\n" "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n" "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" @@ -17,126 +17,126 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" -"%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"(n%100<10 || n%100>=20) ? 1 : 2);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "blogas masyvo indeksas" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: nepavyko priskirti prie neskaitinio indekso" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: nepavyko sukurti: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: nepavyko rasti keymapo komandai" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: pirmas ne tarpo simbolis nėra „\"“" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "nėra uždarančiojo „%c“ %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: trūksta dvitaškio skirtuko" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "„%s“: nepavyko atjungti (unbind)" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, fuzzy, c-format msgid "`%s': invalid alias name" msgstr "„%s“: netaisyklingas keymap'o pavadinimas" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "eilutės redagavimas neįgalintas" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "„%s“: netaisyklingas keymap'o pavadinimas" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: nepavyko perskaityti: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "„%s“: nežinomas funkcijos pavadinimas" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s nėra priskirtas jokiam klavišui.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s gali būti iškviestas su " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "„%s“: nepavyko atjungti (unbind)" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "prasminga tik „for“, „while“ arba „until“ cikle" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -146,7 +146,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Grąžina esamos procedūros kontekstą.\n" " \n" @@ -157,350 +161,360 @@ msgstr "" " IŠRAIŠKOS reikšmė nurodo, per kiek kvietimo freimų grįžti nuo\n" " esamo; viršutinis freimas yra 0." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME nenustatytas" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "per daug argumentų" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "steko viršūnėje esančiu." -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD nenustatytas" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "eilutė %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "įspėjimas: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: naudojimas: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: parametrui reikia argumento" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: reikia skaitinio argumento" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: nerasta" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: negalimas parametras" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: netaisyklingas parametro vardas" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': netaisyklingas identifikatorius" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "netaisyklingas aštuonetainis skaičius" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "netaisyklingas šešioliktainis skaičius" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "netaisyklingas skaičius" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: netaisyklinga signalo specifikacija" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "„%s“: ne pid'as ar taisyklinga darbo specifikacija" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: kintamasis tik skaitymui" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: nepavyko ištrinti" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s išėjo už ribų" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argumentas" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s už ribų" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: nėra tokio darbo" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: nėra darbų valdymo" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "nėra darbų valdymo" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: apribota" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "apribota" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: ne vidinė aplinkos komanda" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "rašymo klaida: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: klaida skaitant esamą aplanką: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: dviprasmis darbo aprašymas" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, fuzzy, c-format +msgid "%s: not an indexed array" +msgstr "%s: ne masyvo kintamasis" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: nepavyko ištrinti: %s tik skaitymui" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: nepavyko ištrinti" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: netaisyklingas veiksmo pavadinimas" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: nėra baigimo specifikacijos" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "įspėjimas: parametras -F gali neveikti taip, kaip tikitės" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "įspėjimas: parametras -C gali neveikti taip, kaip tikitės" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "galima naudoti tik funkcijoje" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "negalima naudoti „-f“ funkcijoms kurti" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: funkcija tik skaitymui" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: negalima tokiu būdu sunaikinti masyvų kintamųjų" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dinaminis įkrovimas negalimas" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "nepavyko atverti bendrojo objekto %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "nepavyko rasti %s bendrajame objekte %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: nedinamiškai įkrauta" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: nedinamiškai įkrauta" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: nepavyko ištrinti: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: aplankas" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: ne paprastas failas" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: failas per didelis" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: negalima vykdyti dvejetainių failų" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: nepavyko paleisti: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "ne prisijungimo aplinka: naudokite „exit“" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Yra sustabdytų darbų.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Yra veikiančių darbų.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "komandų nerasta" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "istorijos specifikacija" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: nepavyko atverti laikinojo failo: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "darbas %d pradėtas be darbų valdymo" @@ -515,11 +529,11 @@ msgstr "%s: neleistinas parametras -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: parametrui reikia argumento -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "maiša išjungta" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: maišos lentelė tuščia\n" @@ -551,12 +565,12 @@ msgstr "" "nėra žinyno temų, atitinkančių „%s“. Bandykite „help help“, „man -k %s“ arba " "„info %s“." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: nepavyko atverti: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -577,21 +591,31 @@ msgstr "" "Žvaigždutė (*) prie vardo reiškia, kad komanda išjungta.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "negalima naudoti daugiau negu vieno parametro iš -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "istorijos pozicija" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "%s: ne masyvo kintamasis" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parametras tuščias arba nenustatytas" + +#: builtins/history.def:349 #, fuzzy, c-format msgid "%s: invalid timestamp" msgstr "%s: netaisyklingas parametro vardas" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: istorijos išskleidimas nesėkmingas" @@ -605,115 +629,115 @@ msgstr "%s: istorijos išskleidimas nesėkmingas" msgid "no other options allowed with `-x'" msgstr "su „-x“ neleidžiama naudoti kitų parametrų" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumentai turi būti procesų arba darbų ID" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Nežinoma klaida" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "tikėtasi išraiškos" -#: builtins/mapfile.def:180 -#, fuzzy, c-format -msgid "%s: not an indexed array" -msgstr "%s: ne masyvo kintamasis" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: netaisyklinga failo deskriptoriaus specifikacija" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: netaisyklingas failo deskriptorius: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, fuzzy, c-format msgid "%s: invalid line count" msgstr "%s: nesamas parametras" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, fuzzy, c-format msgid "%s: invalid array origin" msgstr "%s: nesamas parametras" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, fuzzy, c-format msgid "%s: invalid callback quantum" msgstr "%s: netaisyklingas veiksmo pavadinimas" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 #, fuzzy msgid "empty array variable name" msgstr "%s: ne masyvo kintamasis" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "„%s“: trūksta formato simbolio" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, fuzzy, c-format msgid "`%c': invalid time format specification" msgstr "%s: klaidinga laiko ribos (timeout) specifikacija" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "„%c“: netaisyklingas formato simbolis" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "įspėjimas: %s: %s" +msgid "%s: %s" +msgstr "" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "trūksta šešioliktainio skaitmens išraiškoje \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, fuzzy, c-format msgid "missing unicode digit for \\%c" msgstr "trūksta šešioliktainio skaitmens išraiškoje \\x" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "nėra kito aplanko" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, fuzzy, c-format msgid "%s: invalid argument" msgstr "%s: netaisyklingas limito argumentas" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<nėra esamo aplanko>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 #, fuzzy msgid "directory stack index" msgstr "rekursijos steko atvirkštinis perpildymas" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -737,7 +761,7 @@ msgid "" "\tdirs when invoked without options, starting with zero." msgstr "" -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -762,7 +786,7 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -783,322 +807,333 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: klaidinga laiko ribos (timeout) specifikacija" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "skaitymo klaida: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "galima grįžti (return) tik iš funkcijos ar scenarijaus" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "negalima kartu ištrinti funkcijos ir kintamojo" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: ne masyvo kintamasis" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: ne funkcija" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, fuzzy, c-format msgid "%s: cannot export" msgstr "%s: nepavyko ištrinti" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "postūmių skaičius" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "negalima aplinkos nuostatos vienu metu įjungti ir išjungti" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: netaisyklingas aplinkos nuostatos pavadinimas" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "reikia failo pavadinimo argumento" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: failas nerastas" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "nepavyko sustabdyti" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "nepavyko sustabdyti prisijungimo aplinkos" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s yra „%s“ sinonimas\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s yra aplinkos raktinis žodis\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s yra funkcija\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, fuzzy, c-format msgid "%s is a special shell builtin\n" msgstr "%s yra aplinkos vidinė komanda\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s yra funkcija\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s yra aplinkos vidinė komanda\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s yra %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s yra hešuotas (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: netaisyklingas limito argumentas" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': bloga komanda" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: nepavyko gauti limito: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "riba" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: nepavyko pakeisti limito: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "aštuntainis skaičius" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "„%c“: netaisyklingas simbolinės veiksenos operatorius" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "„%c“: netaisyklingas simbolinės veiksenos simbolis" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " eilutė " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "paskutinė komanda: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Nutraukiama..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "įspėjimas: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "nežinoma komandos klaida" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "blogas komandos tipas" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "blogas jungtukas" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "blogas šuolis" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: nepriskirtas kintamasis" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\alaukiant įvedimo baigėsi laikas: automatiškai atsijungta\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "nepavyko peradresuoti standartinio įvedimo iš /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: „%c“: netaisyklingas formato simbolis" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 #, fuzzy msgid "pipe error" msgstr "rašymo klaida: %s" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: apribota: negalima naudoti „/“ komandų pavadinimuose" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: komanda nerasta" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: blogas interpretatorius" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: negalima vykdyti dvejetainių failų" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: blogas interpretatorius" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, fuzzy, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: negalima vykdyti dvejetainių failų" -#: execute_cmd.c:6123 -#, fuzzy, c-format -msgid "`%s': is a special builtin" -msgstr "%s yra aplinkos vidinė komanda\n" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "nepavyko dublikuoti fd %d į fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "viršytas išraiškos rekursijos lygis" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "rekursijos steko atvirkštinis perpildymas" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "sintaksės klaida išraiškoje" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "bandymas priskirti ne kintamajam" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "sintaksės klaida išraiškoje" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "dalyba iš 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "klaida: bloga expassign leksema" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "sąlygos išraiškoje tikėtasi „:“" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "eksponentė mažesnis už 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "" "po prieš-didinimo ar prieš-mažinimo operatoriaus tikėtasi identifikatoriaus" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "Trūksta „)“" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "sintaksės klaida: tikėtasi operando" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "sintaksės klaida: netaisyklingas aritmetinis operatorius" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "" @@ -1116,7 +1151,7 @@ msgstr "%s: nesamas parametras" msgid "value too great for base" msgstr "per didelė pagrindo reikšmė" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: išraiškos klaida\n" @@ -1125,46 +1160,51 @@ msgstr "%s: išraiškos klaida\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: nepavyko pasiekti aukštesnių aplankų" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, fuzzy, c-format +msgid "`%s': is a special builtin" +msgstr "%s yra aplinkos vidinė komanda\n" + +#: input.c:98 subst.c:6580 #, fuzzy, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "nepavyko dublikuoti fd %d į fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "nepavyko išskirti naujo failo deskriptoriaus bash įvedimui iš fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: naujam fd %d buferis jau egzistuoja" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "trinamas sustabdytas darbas %d procesų grupėje %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "" @@ -1174,137 +1214,137 @@ msgstr "" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: tokio pid nėra" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signalas %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Atlikta" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Atlikta(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Nežinoma būsena" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr "" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld nėra šios aplinkos dukterinis procesas" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: nėra proceso %ld įrašo" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: darbas %d yra sustabdytas" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: nėra tokio darbo" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: darbas užsibaigė" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: darbas %d jau fone" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: %d eilutė: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr "" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "šioje aplinkoje nėra darbų valdymo" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: pažeista prielaida: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1313,380 +1353,390 @@ msgstr "" "\r\n" "malloc: %s:%d: prielaida pažeista\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "nežinoma" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: blokas iš laisvų blokų sąrašo sugadintas" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: iškviestas su jau atlaisvintu bloku" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: iškviestas su nerezervuotu bloku" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: atvirkštinis perpildymas (underflow); mh_nbytes už ribos" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: atvirkštinis perpildymas (underflow); mh_nbytes už ribos" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: pradžios ir pabaigos blokų (chunk) dydžiai skiriasi" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: iškviestas su nerezervuotu bloku" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: atvirkštinis perpildymas (underflow); mh_nbytes už ribos" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: atvirkštinis perpildymas (underflow); mh_nbytes už ribos" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: pradžios ir pabaigos blokų (chunk) dydžiai skiriasi" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: alloc lentelė pilna su FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p jau lentelėje kaip rezervuotas?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p jau lentelėje kaip laisvas?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "netaisyklingas pagrindas" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: adresas nežinomas" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: netaisyklinga tarnyba" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: netaisyklingas tinklo kelias" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "tinklo operacijos nepalaikomos" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "" -#: locale.c:294 +#: locale.c:297 #, fuzzy, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "xrealloc: %s:%d: nepavyko išskirti %lu baitų" -#: locale.c:296 +#: locale.c:299 #, fuzzy, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "xrealloc: %s:%d: nepavyko išskirti %lu baitų" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Turite laiškų $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Turite naujų laiškų $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Paštas %s perskaitytas\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "sintaksės klaida: reikia aritmetinės išraiškos" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "sintaksės klaida: netikėtas „;“" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "sintaksės klaida: „((%s))“" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: blogas instrukcijos tipas %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: nukreipimo instrukcija „%d“ už ribų" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "rašymo klaida: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "netikėta failo pabaiga ieškant atitinkamo „%c“" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "netikėta failo pabaiga ieškant „]]“" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "sintaksės klaida sąlygos išraiškoje: netikėta leksema „%s“" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "sintaksės klaida sąlygos išraiškoje" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "netikėta leksema „%s“, tikėtasi „)“" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "tikėtasi „)“" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "netikėtas argumentas „%s“ sąlygos unariniam operatoriui" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "netikėtas argumentas sąlygos unariniam operatoriui" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "netikėta leksema „%s“, tikėtasi sąlyginio binarinio operatoriaus" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "tikėtasi sąlygos binarinio operatoriaus" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "netikėtas argumentas „%s“ sąlygos binariniam operatoriui" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "netikėtas argumentas sąlygos binariniam operatoriui" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "netikėta leksema „%c“ sąlygos komandoje" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "netikėta leksema „%s“ sąlygos komandoje" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "netikėta leksema %d sąlygos komandoje" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "sintaksės klaida prie netikėtos leksemos: „%s“" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "sintaksės klaida prie „%s“" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "sintaksės klaida: netikėta failo pabaiga" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "sintaksės klaida: netikėta failo pabaiga" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "sintaksės klaida" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Naudokite „%s“, jei norite išeiti iš ap.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "netikėta failo pabaiga ieškant atitinkamo „)“" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: funkcija „%s“ nerasta" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: blogas jungtukas  „%d“" -#: print_cmd.c:375 +#: print_cmd.c:399 #, fuzzy, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "%d: netaisyklingas failo deskriptorius: %s" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: „%c“: netaisyklingas formato simbolis" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "failo deskriptorius už ribų" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: ambiguous redirect" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: negalima perrašyti egzistuojančio failo" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: apribota: negalima peradresuoti išvedimo" -#: redir.c:219 +#: redir.c:214 #, fuzzy, c-format msgid "cannot create temp file for here-document: %s" msgstr "nepavyko sukurti laikino failo „here“ dokumentui: %s" -#: redir.c:223 +#: redir.c:218 #, fuzzy, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: negalima priskirti sąrašo masyvo elementui" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/serveris/prievadas nepalaikoma be tinklo" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "nukreipimo klaida: nepavyko dublikuoti fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "nepavyko rasti /tmp, sukurkite šį aplanką!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp turi būti taisyklingas aplanko pavadinimas" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: netaisyklingas parametras" -#: shell.c:1343 +#: shell.c:1355 #, fuzzy, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "nepavyko dublikuoti fd %d į fd %d" -#: shell.c:1354 +#: shell.c:1371 #, fuzzy, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "nepavyko dublikuoti fd %d į fd %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, fuzzy, c-format msgid "%s: Is a directory" msgstr "%s: aplankas" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Neturiu vardo!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versija %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1695,53 +1745,53 @@ msgstr "" "Naudojimas:\t%s [GNU ilgas parametras] [parametras] ...\n" "\t%s [GNU ilgas parametras] [parametras] scenarijaus-failas ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU ilgi parametrai:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Aplinkos parametrai:\n" -#: shell.c:2069 +#: shell.c:2061 #, fuzzy msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "" "\t-irsD arba -c komanda arba -O shopt_nustatymas\t\t(tik iškvietimui)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s arba -o nustatymas\n" -#: shell.c:2094 +#: shell.c:2086 #, fuzzy, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Bandykite „%s --help“ arba „%s --usage“, jei norite gauti daugiau " "informacijos.\n" -#: shell.c:2095 +#: shell.c:2087 #, fuzzy, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "Bandykite „ldd --help“, jei norite daugiau informacijos." -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Naudokite komandą „bashbug“ klaidoms pranešti.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: netaisyklinga operacija" @@ -1912,255 +1962,266 @@ msgstr "Informacijos užklausa" msgid "Unknown Signal #%d" msgstr "Nežinomas signalas #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "blogas keitinys: trūksta „%s“ %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: negalima priskirti sąrašo masyvo elementui" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "" -#: subst.c:6370 +#: subst.c:6761 #, fuzzy msgid "command substitution: ignored null byte in input" msgstr "blogas keitinys: trūksta „%s“ %s" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, fuzzy, c-format msgid "%s: invalid indirect expansion" msgstr "%s: nesamas parametras" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, fuzzy, c-format msgid "%s: invalid variable name" msgstr "%s: netaisyklingas veiksmo pavadinimas" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: blogas keitinys" + +#: subst.c:8231 #, fuzzy, c-format msgid "%s: parameter not set" msgstr "%s: parametras tuščias arba nenustatytas" -#: subst.c:7480 -#, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parametras tuščias arba nenustatytas" - -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: posekio išraiška < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: blogas keitinys" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: negalima tokiu būdu priskirti" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" msgstr "" -#: subst.c:10795 +#: subst.c:11542 #, fuzzy, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "blogas keitinys: trūksta „%s“ %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "nėra atitikmenų: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "tikėtasi argumento" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: tikėtasi skaitinės išraiškos" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "tikėtasi „)“" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "tikėtasi „)“, rasta %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: tikėtasi binarinio operatoriaus" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: tikėtasi unarinio operatoriaus" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "trūksta „]“" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "sintaksės klaida: netikėtas „;“" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "netaisyklingas signalo numeris" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: bloga trap_list[%d] reikšmė: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "run_pending_traps: signalo doroklė yra SIG_DFL, siunčiamas %d (%s) sau" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: blogas signalas %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "klaida importuojant funkcijos apibrėžimą „%s“" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "aplinkos lygmuo (%d) per aukštas, nustatoma į 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "" -#: variables.c:4757 +#: variables.c:4793 #, fuzzy, c-format msgid "%s has null exportstr" msgstr "%s: parametras tuščias arba nenustatytas" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "netaisyklingas simbolis %d %s exportstr'e" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "%s exportstr'e trūksta „=“" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: nėra global_variables konteksto" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" -#: variables.c:6400 +#: variables.c:6404 #, fuzzy, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: nepavyko atverti: %s" -#: variables.c:6405 +#: variables.c:6409 #, fuzzy, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%d: netaisyklingas failo deskriptorius: %s" -#: variables.c:6450 +#: variables.c:6453 #, fuzzy, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s išėjo už ribų" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Autorinės teisės (C) 2009 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2168,38 +2229,38 @@ msgstr "" "Licencija GPLv3+: GNU GPL versija 3 arba naujesnė <http://gnu.org/licenses/" "gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versija %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 #, fuzzy msgid "This is free software; you are free to change and redistribute it." msgstr "" "Tai yra laisva programinė įranga; jūs esate laisvas keisti ir platinti ją.\n" -#: version.c:92 version2.c:92 +#: version.c:91 #, fuzzy msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Nėra JOKIOS GARANTIJOS, kiek tik tą leidžia įstatymas.\n" -#: xmalloc.c:93 +#: xmalloc.c:84 #, fuzzy, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "xmalloc: nepavyko išskirti %lu baitų (%lu baitų išskirta)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, fuzzy, c-format msgid "%s: cannot allocate %lu bytes" msgstr "xmalloc: nepavyko išskirti %lu baitų" -#: xmalloc.c:165 +#: xmalloc.c:164 #, fuzzy, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "xmalloc: %s:%d: nepavyko išskirti %lu baitų (išskirta %lu baitų)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, fuzzy, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "xmalloc: %s:%d: nepavyko išskirti %lu baitų" @@ -2236,7 +2297,7 @@ msgstr "caller [išraiška]" #: builtins.c:66 #, fuzzy -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|-P] [aplankas]" #: builtins.c:68 @@ -2349,7 +2410,7 @@ msgstr "let arg [arg ...]" #: builtins.c:138 msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" @@ -2401,7 +2462,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] signalo_spec ...]" #: builtins.c:168 @@ -2428,26 +2490,30 @@ msgid "wait [pid ...]" msgstr "wait [pid]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for PAVADINIMAS [in ŽODŽIAI ... ] ; do KOMANDOS; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( išrk1; išrk2; išrk3 )); do KOMANDOS; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select PAVADINIMAS [in ŽODŽIAI ... ;] do KOMANDOS; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2455,95 +2521,96 @@ msgstr "" "if KOMANDOS; then KOMANDOS; [ elif KOMANDOS; then KOMANDOS; ]... [ else " "KOMANDOS; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while KOMANDOS; do KOMANDOS; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until KOMANDOS; do KOMANDOS; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "funkcijos pavadinimas { KOMANDOS ; } arba name () { KOMANDOS ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ KOMANDOS ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "darbo_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( išraiška ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ išraiška ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "kintamieji – Kai kurių aplinkos kintamųjų pavadinimai ir reikšmės" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [optvardas ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v kint] formatas [argumentai]" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " "suffix] [name ...]" msgstr "" -#: builtins.c:235 +#: builtins.c:237 msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" -#: builtins.c:239 +#: builtins.c:241 #, fuzzy msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "shopt [-pqsu] [-o] [optvardas ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" msgstr "" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" msgstr "" -#: builtins.c:256 +#: builtins.c:258 #, fuzzy msgid "" "Define or display aliases.\n" @@ -2572,7 +2639,7 @@ msgstr "" " išskleidžiamas. „alias“ grąžina „true“, nebent duotas VARDAS, kuriam\n" " neaprašytas joks alternatyvusis vardas." -#: builtins.c:278 +#: builtins.c:280 #, fuzzy msgid "" "Remove each NAME from the list of defined aliases.\n" @@ -2585,7 +2652,7 @@ msgstr "" "Pašalinti VARDUS iš aprašytų alternatyviųjų vardų sąrašo. Jei nurodyta\n" " nuostata -a, pašalinti visus alternatyviuosius vardus." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2627,7 +2694,7 @@ msgid "" " bind returns 0 unless an unrecognized option is given or an error occurs." msgstr "" -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2638,7 +2705,7 @@ msgid "" " The exit status is 0 unless N is not greater than or equal to 1." msgstr "" -#: builtins.c:342 +#: builtins.c:344 #, fuzzy msgid "" "Resume for, while, or until loops.\n" @@ -2652,7 +2719,7 @@ msgstr "" "Tęsti kitą FOR, WHILE arba UNTIL ciklo iteraciją.\n" " Jei N nurodytas, tęsti ciklą, esantį N lygmenų virš esamo." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2666,7 +2733,7 @@ msgid "" " not a shell builtin." msgstr "" -#: builtins.c:369 +#: builtins.c:371 #, fuzzy msgid "" "Return the context of the current subroutine call.\n" @@ -2691,14 +2758,14 @@ msgstr "" " IŠRAIŠKOS reikšmė nurodo, per kiek kvietimo freimų grįžti nuo\n" " esamo; viršutinis freimas yra 0." -#: builtins.c:387 +#: builtins.c:389 #, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2748,7 +2815,7 @@ msgstr "" " užuot sekus simbolines nuorodas; parametras -L nurodo, kad turi būti\n" " sekama simbolinėmis nuorodomis." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2764,7 +2831,7 @@ msgid "" " cannot be read." msgstr "" -#: builtins.c:442 +#: builtins.c:444 #, fuzzy msgid "" "Null command.\n" @@ -2775,7 +2842,7 @@ msgid "" " Always succeeds." msgstr "Jokio efekto; komanda nieko nedaro. Grąžinamas klaidos kodas 0." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2783,7 +2850,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:462 +#: builtins.c:464 #, fuzzy msgid "" "Return an unsuccessful result.\n" @@ -2792,7 +2859,7 @@ msgid "" " Always fails." msgstr "Grąžinti nesėkmingą rezultatą." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -2811,7 +2878,7 @@ msgid "" " Returns exit status of COMMAND, or failure if COMMAND is not found." msgstr "" -#: builtins.c:490 +#: builtins.c:492 msgid "" "Set variable values and attributes.\n" " \n" @@ -2839,7 +2906,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -2853,14 +2921,14 @@ msgid "" " assignment error occurs." msgstr "" -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" " A synonym for `declare'. See `help declare'." msgstr "" -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2875,7 +2943,7 @@ msgid "" " assignment error occurs, or the shell is not executing a function." msgstr "" -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2915,7 +2983,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2928,7 +2996,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:612 +#: builtins.c:615 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -2948,6 +3016,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -2955,7 +3029,7 @@ msgid "" " Returns success unless NAME is not a shell builtin or an error occurs." msgstr "" -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -2967,7 +3041,7 @@ msgid "" " Returns exit status of command or success if command is null." msgstr "" -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3008,7 +3082,7 @@ msgid "" " encountered or an error occurs." msgstr "" -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3031,7 +3105,7 @@ msgid "" "occurs." msgstr "" -#: builtins.c:715 +#: builtins.c:723 #, fuzzy msgid "" "Exit the shell.\n" @@ -3043,7 +3117,7 @@ msgstr "" "nustatomas\n" " paskutinės vykdytos komandos klaidos kodas." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3052,7 +3126,7 @@ msgid "" " in a login shell." msgstr "" -#: builtins.c:734 +#: builtins.c:742 msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3077,12 +3151,14 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." msgstr "" -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3094,7 +3170,7 @@ msgid "" " Status of command placed in foreground, or failure if an error occurs." msgstr "" -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3108,7 +3184,7 @@ msgid "" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3132,7 +3208,7 @@ msgid "" " Returns success unless NAME is not found or an invalid option is given." msgstr "" -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3154,7 +3230,7 @@ msgid "" "given." msgstr "" -#: builtins.c:842 +#: builtins.c:852 msgid "" "Display or manipulate the history list.\n" " \n" @@ -3178,7 +3254,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3189,7 +3269,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3213,7 +3293,7 @@ msgid "" " If -x is used, returns the exit status of COMMAND." msgstr "" -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3230,7 +3310,7 @@ msgid "" " Returns success unless an invalid option or JOBSPEC is given." msgstr "" -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3253,7 +3333,7 @@ msgid "" " Returns success unless an invalid option is given or an error occurs." msgstr "" -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3298,7 +3378,7 @@ msgid "" " If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise." msgstr "" -#: builtins.c:994 +#: builtins.c:1008 msgid "" "Read a line from the standard input and split it into fields.\n" " \n" @@ -3322,6 +3402,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3352,7 +3434,7 @@ msgid "" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3364,7 +3446,7 @@ msgid "" " Returns N, or failure if the shell is not executing a function or script." msgstr "" -#: builtins.c:1055 +#: builtins.c:1071 msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3440,6 +3522,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3450,7 +3536,7 @@ msgid "" " Returns success unless an invalid option is given." msgstr "" -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3472,7 +3558,7 @@ msgid "" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -3491,7 +3577,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -3512,7 +3598,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -3523,7 +3609,7 @@ msgid "" " Returns success unless N is negative or greater than $#." msgstr "" -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 #, fuzzy msgid "" "Execute commands from a file in the current shell.\n" @@ -3542,21 +3628,23 @@ msgstr "" " Jei nurodyta ARGUMENTŲ, jie tampa poziciniais parametrais iškvietus\n" " FAILĄ." -#: builtins.c:1246 +#: builtins.c:1266 msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3639,7 +3727,7 @@ msgid "" " false or an invalid argument is given." msgstr "" -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3647,7 +3735,7 @@ msgid "" " be a literal `]', to match the opening `['." msgstr "" -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -3659,7 +3747,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:1365 +#: builtins.c:1387 msgid "" "Trap signals and other events.\n" " \n" @@ -3667,31 +3755,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -3703,7 +3796,7 @@ msgid "" "given." msgstr "" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -3733,7 +3826,7 @@ msgid "" "found." msgstr "" -#: builtins.c:1432 +#: builtins.c:1461 msgid "" "Modify shell resource limits.\n" " \n" @@ -3775,15 +3868,16 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -3801,7 +3895,7 @@ msgid "" " Returns success unless MODE is invalid or an invalid option is given." msgstr "" -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -3833,7 +3927,7 @@ msgid "" " children." msgstr "" -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -3848,7 +3942,16 @@ msgid "" " option is given." msgstr "" -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -3861,7 +3964,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -3878,7 +3981,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -3898,7 +4001,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -3914,7 +4017,7 @@ msgid "" " The return status is the return status of PIPELINE." msgstr "" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -3925,7 +4028,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -3946,7 +4049,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -3961,7 +4064,7 @@ msgstr "" "Išskleisti ir vykdyti KOMANDAS tol, kol galutinė komanda iš\n" " „while“ komandų grąžina klaidos kodą 0." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -3976,7 +4079,7 @@ msgstr "" "Išskleisti ir vykdyti KOMANDAS tol, kol galutinė komanda iš\n" " „until“ komandų grąžina klaidos kodą, nelygų 0." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -3989,7 +4092,7 @@ msgid "" " The coproc command returns an exit status of 0." msgstr "" -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -4003,7 +4106,7 @@ msgid "" " Returns success unless NAME is readonly." msgstr "" -#: builtins.c:1700 +#: builtins.c:1740 #, fuzzy msgid "" "Group commands as a unit.\n" @@ -4017,7 +4120,7 @@ msgstr "" "Vykdyti eilę komandų grupėje. Tai yra vienas iš būdų nukreipti\n" " visos eilės komandų įvedimą/išvedimą." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4031,7 +4134,7 @@ msgid "" " Returns the status of the resumed job." msgstr "" -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4042,7 +4145,7 @@ msgid "" " Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise." msgstr "" -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -4070,7 +4173,7 @@ msgid "" " 0 or 1 depending on value of EXPRESSION." msgstr "" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -4124,7 +4227,7 @@ msgid "" " \t\tcommands should be saved on the history list.\n" msgstr "" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -4155,7 +4258,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -4182,7 +4285,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -4211,7 +4314,7 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -4231,7 +4334,7 @@ msgid "" " given or OPTNAME is disabled." msgstr "" -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -4249,9 +4352,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -4284,15 +4387,15 @@ msgstr "" " Jei pateiktas parametras -v, išvedimas įrašomas į aplinkos kintamąjį\n" " KINT, užuot spausdinus į standartinį išvedimą." -#: builtins.c:1974 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -4315,15 +4418,19 @@ msgid "" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2004 +#: builtins.c:2044 #, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4333,7 +4440,7 @@ msgstr "" " Jei pateiktas nebūtinasis ŽODŽIO argumentas, išvedami įrašai,\n" " atitinkantys ŽODĮ." -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -4365,7 +4472,7 @@ msgid "" " have a completion specification defined." msgstr "" -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -4407,13 +4514,39 @@ msgid "" " not an indexed array." msgstr "" -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" " A synonym for `mapfile'." msgstr "" +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Grąžina esamos procedūros kontekstą.\n" +#~ " \n" +#~ " Be IŠRAIŠKOS, grąžina „$eilutė $failo_vardas“. Su IŠRAIŠKA,\n" +#~ " grąžina „$eilutė $procedūra $failo_vardas“; ši papildoma informacija\n" +#~ " gali būti panaudota kuriant steko išrašą (stack trace).\n" +#~ " \n" +#~ " IŠRAIŠKOS reikšmė nurodo, per kiek kvietimo freimų grįžti nuo\n" +#~ " esamo; viršutinis freimas yra 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "įspėjimas: %s: %s" + #, fuzzy, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: netaisyklingas veiksmo pavadinimas" diff --git a/po/nb.gmo b/po/nb.gmo index 8d59f1d2d005776494227ca472a7022f0747d685..b12ec05734bc5e4a267c39650b07bd049d364f56 100644 GIT binary patch delta 12601 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 delta 49119 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 LYo7m)Inn(8x?zfs diff --git a/po/nb.po b/po/nb.po index 1a2da59c4..1e8f0b8ed 100644 --- a/po/nb.po +++ b/po/nb.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-07-03 20:40+0200\n" "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n" "Language-Team: Norwegian Bokmaal <l10n-no@lister.huftis.org>\n" @@ -20,123 +20,124 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.2.3\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "feil i tabell-underskript" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: fjerner navnref-egenskap" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: indeksert tabell kan ikke konverteres til assosiativ tabell" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: kan ikke tildeles ikke-numerisk indeks" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: underskript må brukes ved tildeling av assosiative tabeller" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: klarte ikke å opprette: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: fant ikke tastaturoppsett for kommando" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: første ikke-blanktegn må være «\"»" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "avsluttende «%c» mangler i %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: kolon-skilletegn mangler" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "«%s»: kan ikke oppheve bindingen i kommandotastaturet" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "brace-utvidelse: klarte ikke å tildele minne for %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "brace-utvidelse: klarte ikke å tildele minne for %u elementer" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "brace-utvidelse: klarte ikke å tildele minne for «%s»" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "«%s»: ugyldig alias" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "linjeredigering er ikke slått på" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "«%s»: ugyldig navn på tastaturoppsett" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: klarte ikke å lese: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "«%s»: ukjent funksjonsnavn" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s er ikke tilknyttet en knapp.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s kan startes via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "«%s»: klarte ikke å fjerne tildeling" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "antall sløyfer" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "gir bare mening i «for»-, «while»- og «until»-sløyfer" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -145,359 +146,379 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Vis konteksten for gjeldende underrutine-kall.\n" -" Uten EXPR, returnerer \"$line $filnavn\". Med EXPR, returnerer\n" -" \"$line $subrutine $filename denne ekstra informasjonen kan brukes til å\n" -" gi en stabelsporing.\n" -" \n" -" Verdien til EXPR indikerer hvor mange anropsrammer som skal gå tilbake før\n" -" nåværende; topprammen er ramme 0." - -#: builtins/cd.def:327 +" \n" +" Hvis UTTRykk ikke er valgt, vises «$line $filename». Med UTTRykk vises\n" +" «$line $subroutine $filename». Denne ekstrainformasjonen kan brukes\n" +" til stabelsporing.\n" +" \n" +" Verdien av UTTRykk viser hvor mange kall-rammer programmet skal bevege " +"seg\n" +" gjennom tilbake fra gjeldende ramme. Øverste ramme er 0.\n" +" \n" +" Avslutningsstatus:\n" +" Status er 0, med mindre skallet ikke kjører en skallfunksjon eller\n" +" valgt UTTRykk er ugyldig." + +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME har ingen verdi" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "for mange argumenter" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "null-mappe" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD har ingen verdi" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "linje %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "advarsel: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: bruk: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: valget krever et argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: valget krever et tall-argument" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "fant ikke %s" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: ugyldig valg" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: ugyldig valgnavn" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "«%s»: ugyldig navn" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "ugyldig oktal-tall" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "ugldig heksadesimalt tall" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "ugyldig tall" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: ugyldig signalspesifikasjon" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "«%s» er hverken hverken et PID eller en gyldig jobbspesifikasjon" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: skrivebeskyttet variabel" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: kan ikke tildele" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s er utenfor rekkevidde" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s er utenfor rekkevidde" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: jobben finnes ikke" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: ingen jobbkontroll" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "ingen jobbkontroll" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: begrenset" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "begrenset" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: ikke innebygd i skall" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "skrivefeil: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "feil under endring av terminal-egenskaper: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "feil under henting av terminal-egenskaper: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: feil under henting av gjeldende mappe: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: flertydig jobbspesifikasjon" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "hjelp er ikke tilgjengelig for denne versjonen" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: ikke en indeksert tabell" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: klarte ikke å fjerne verdi fra skrivebeskyttet %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: klarte ikke å fjerne verdi" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: ugyldig handlingsnavn" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: ingen spesifikasjon for fullføring" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "advarsel: valget «-F» virker kanskje ikke slik du forventer" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "advarsel: valget «-C» virker kanskje ikke slik du forventer" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "fullføringsfunksjon kjøres ikke nå" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "kan bare brukes i funksjoner" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "valget«-f» kan ikke brukes til å lage funksjoner" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: skrivebeskyttet funksjon" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: referansevariabler kan ikke være tabeller (arrays)" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: navnref.-variabler kan ikke referere til seg selv" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: sirkulær navnreferanse" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "«%s»: ugyldig variabelnavn for navnreferanse" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: tabellvariabler kan ikke ødelegges på denne måten" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: assosiative tabeller kan ikke konverteres til indekserte tabeller" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: sammensatt tabell-tideling i hermetegn er utgått" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynamisk innlasting er ikke tilgjengelig" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "klarte ikke å åpne delt objekt %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "fant ikke %s i delt objekt %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: dynamisk innebygd allerede lastet" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "innlastingsfunksjon for %s førte til feilkode (%d). Ikke lastet inn" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: ikke dynamisk innlastet" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: klarte ikke å slette: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: er en mappe" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: ikke en vanlig fil" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: fila er for stor" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: klarte ikke å kjøre binærfil" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: klarte ikke å kjøre: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "logg ut\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "ikke innloggingsskall. Bruk «exit»" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Bakgrunnsjobb(er) venter.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Bakgrunnsjobb(er) kjører.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "fant ingen kommando" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "historikk-spesifikasjon" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: klarte ikke å åpne midlertidig fil: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "gjeldende" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "jobb %d startet uten jobbkontroll" @@ -512,11 +533,11 @@ msgstr "%s: -- %c er et ugyldig valg\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: -- %c krever et argument\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "nøkkelsummering er slått av" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: kontrollsum-tabell er tom\n" @@ -542,15 +563,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "ingen hjelpeemner samsvarer med «%s». Prøv «help help», «man -k %s» eller «info %s»." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"ingen hjelpeemner samsvarer med «%s». Prøv «help help», «man -k %s» eller " +"«info %s»." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: klarte ikke å åpne: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -561,29 +585,42 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"Disse skallkommandoene er internt definert. Skriv «help» for å se denne lista.\n" +"Disse skallkommandoene er internt definert. Skriv «help» for å se denne " +"lista.\n" "Skriv «help name» for å finne ut mer om funksjonen «name».\n" "Bruk «info bash» for å finne generell info om skallet.\n" -"Bruk «man -k» eller «info» for å finne ut mer om kommandoer som ikke er på denne lista.\n" +"Bruk «man -k» eller «info» for å finne ut mer om kommandoer som ikke er på " +"denne lista.\n" "\n" -"Stjerne (*) ved siden av et kommandonavn betyr at gjeldende kommando er slått av.\n" +"Stjerne (*) ved siden av et kommandonavn betyr at gjeldende kommando er " +"slått av.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "du kan ikke bruke flere enn ett av valgene -anrw på én gang" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "historikkposisjon" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "tomt navn på tabellvariabel" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameter har null-verdi eller står tomt" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: ugyldig tidsstempel" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: historikk-utvidelse mislyktes" @@ -597,113 +634,113 @@ msgstr "%s: inlib mislyktes" msgid "no other options allowed with `-x'" msgstr "valget «-x» kan ikke brukes i kombinasjon med andre valg" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumenter må være prosess- eller jobb-ID-er" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Ukjent feil" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "forventet uttrykk" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: ikke en indeksert tabell" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: ugyldig spesifikasjon av fildeskriptor" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: ugyldig fildeskriptor: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: ugyldig linjeantall" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: ugyldig tabellopphav" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: ugyldig tilbakekallsmengde" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "tomt navn på tabellvariabel" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "støtte for tabellvariabler kreves" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "«%s»: formattegn mangler" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "«%c»: ugyldig spesifikasjon av tidsformat" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "«%c»: ugyldig formattegn" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "advarsel: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "problem med tolkning av format: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "heks-siffer mangler for \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "unicode-siffer mangler for \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "ingen annen mappe" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: ugyldig argument" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<ingen gjeldende mappe>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "mappestabel er tom" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "mappestabel-indeks" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -718,10 +755,12 @@ 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 "" "Vis liste over mapper som blir husket. Mapper\n" @@ -743,7 +782,7 @@ msgstr "" " -N\tVis N-te mappe talt fra null\n" "\tpå høyre side av lista (gjelder når programmet kjøres uten valg)." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -787,7 +826,7 @@ msgstr "" " \n" " Den innebygde funksjonen «dirs» viser mappestabelen." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -808,7 +847,8 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" "Fjerner mapper fra mappestabelen. Hvis ingen argumenter brukes,\n" -" fjerner programmet øverste mappe fra stabelen og bytter til det som deretter er øverste mappe.\n" +" fjerner programmet øverste mappe fra stabelen og bytter til det som " +"deretter er øverste mappe.\n" " \n" " Valg:\n" " -n\tLar være å bytte mappe når mapper fjernes fra stabelen,\n" @@ -825,319 +865,333 @@ msgstr "" " \n" " Den innebygde funksjonen «dirs» viser mappestabelen." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: ugyldig spesifikasjon av tidsavbrudd" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "lesefeil: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "du kan bare «return» fra en funksjon eller kildeskript" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" -msgstr "du kan ikke utføre «unset» (tømme både en funksjon og en variabel for verdier) samtidig" +msgstr "" +"du kan ikke utføre «unset» (tømme både en funksjon og en variabel for " +"verdier) samtidig" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: ikke en tabellvariabel" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: ikke en funksjon" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: klarte ikke å eksportere" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "shift-antall" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "du kan ikke både definere og fjerne skallvalg samtidig" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: ugyldig navn på skallvalg" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "filnavn-argument kreves" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: fant ikke fil" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "klarte ikke å sette i hvilemodus" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "klarte ikke å sette et innloggingsskall i hvilemodus" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s har alias «%s»\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s er et skall-nøkkelord\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s er en funksjon\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s er en innebygd skallkommando\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s er en funksjon\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s er en innebygget skallfunksjon\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s er %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s er nøkkelsummert («hashed») (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: ugyldig grenseargument" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "«%c»: ugyldig kommando" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: klarte ikke å hente grense: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "grense" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: klarte ikke å endre grense: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "oktalt tall" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "«%c»: ugyldig symbolsk modus-operatør" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "«%c»: ugyldig symbolsk modustegn" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " linje " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "forrige kommando: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Avbryter …" #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORM: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "DEBUG-advarsel: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "ukjent kommandofeil" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "ugyldig kommandotype" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "ugyldig tilkobling" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "ugyldig hopp" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: utildelt variabel" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\atidsavbrudd for inndata: auto-utlogging\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "klarte ikke å videresende standard inndata fra «/dev/null». %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: «%c» er et ugyldig formattegn" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] finnes fremdeles" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "datarør-feil" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: grensa for nivåer av eval-funksjoner (%d) er overskredet" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: grensa for nivåer av kilder i kilder (%d) er overskredet" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: grensa for nivåer av funksjoner i funksjoner (%d) er overskredet" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: ikke tillatt: kommandonavn kan ikke inneholde «/»" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "fant ikke kommando %s" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: ugyldig tolk" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: kan ikke kjøres: den nødvendige filen ble ikke funnet" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: ugyldig tolk" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: klarte ikke å kjøre binærfil: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "«%s» er en innebygd spesialfunksjon" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "klarte ikke å duplisere fd %d til fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "grensa for rekursjonsnivåer i uttrykk er overskredet" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "rekursjonsstabelen er tom" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "uttrykk inneholder syntaksfeil" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "du forsøkte å tilordne en verdi til noe som ikke er en variabel" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "variabeltildeling inneholder syntaksfeil" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "forsøkte å dele på 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "programfeil: ugyldig expassign-symbol" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "forventet «:» for betinget uttrykk" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "eksponent er lavere enn 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "forventet identifikator etter pre-økning eller pre-forminskelse" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "mangler «)»" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "syntaksfeil: forventet operand" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "syntaksfeil: ugyldig aritmetisk operatør" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (feilaktig symbol er «%s»)" @@ -1154,7 +1208,7 @@ msgstr "ugyldig heltallskonstant" msgid "value too great for base" msgstr "verdien er for høy for grunntallet" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: feil i uttrykk\n" @@ -1163,46 +1217,51 @@ msgstr "%s: feil i uttrykk\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: fikk ikke tilgang til foreldermapper" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "«%s» er en innebygd spesialfunksjon" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "klarte ikke å tilbakestille nodelay-modus for fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "klarte ikke å knytte ny fildeskriptor til bash-inndata fra fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: mellomlager for ny fd %d finnes allerede" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp-datarør" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "kopiert pid %d finnes i kjørende jobb %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "sletter ventende bakgrunnsjobb %d med prosessgruppe %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: markert PID %5ld (%s) som levende" @@ -1212,137 +1271,137 @@ msgstr "add_process: markert PID %5ld (%s) som levende" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: pid-en finnes ikke" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Ferdig" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Venter" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Venter(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Kjører" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Ferdig(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Avsluttet %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Ukjent status" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(kjerne lagret i fil) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "underprosess setpgid (%ld til %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld er ikke en underprosess av dette skallet" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Ingen kjennskap til prosess %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: prosess %d venter" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: ingen aktuelle jobber" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: jobben er avsluttet" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: jobb %d kjører allerede i bakgrunnen" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: slår på WNOHANG for å unngå kronisk blokkering" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: linje %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (kjerne lagret i fil)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd nå: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp mislyktes" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: ingen jobbkontroll i bakgrunn" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: linjeregler" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "klarte ikke å velge terminal-prosessgruppe (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "ingen jobbkontroll i dette skallet" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: mislykket premiss: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1351,376 +1410,391 @@ msgstr "" "\r\n" "malloc: %s:%d: urimelig premiss\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "ukjent" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: rotete blokk på befrielsesliste" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: ble bedt om å behandle blokk som allerede er ledig" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: ble bedt om å behandle blokk som ikke er tildelt" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: tomt. mh_nbytes er utenfor rekkevidde" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "fri: underflyt oppdaget; magic8 er skadet" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: start- og sluttdel er av ulik størrelse" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: ble bedt om å behandle blokk som ikke er tildelt" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: tomt. mh_nbytes er utenfor rekkevidde" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: underflyt oppdaget; magic8 er skadet" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: start- og sluttdel er av ulik størrelse" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: tildelingstabell er full med FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: finnes %p allerede i tabellen som tildelt?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: finnes %p allerede i tabellen som ledig?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "ugyldig grunntall" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: ukjent vert" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: ugyldig tjeneste" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: ugyldig spesifikasjon av nettverkssti" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "nettverkshandlinger støttes ikke" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: klarte ikke å bytte region (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: klarte ikke å bytte region (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: klarte ikke å bytte region (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: klarte ikke å bytte region (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Du har e-post i $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Du har ny e-post i $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Posten i %s er lest\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "syntaksfeil: aritmetisk uttrykk kreves" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "syntaksfeil: uforventet «;»" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "syntaksfeil: «((%s))»" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: %d er en ugyldig instrukstype" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "here-dokument ved linje %d adskilt av slutt på fil (forventet «%s»)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" -msgstr "make_redirection: videresendinginstruks «%d» er utenfor tillatt rekkevidde" +msgstr "" +"make_redirection: videresendinginstruks «%d» er utenfor tillatt rekkevidde" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: «shell_input_line_size» (%zu) overskrider SIZE_MAX (%lu): linja er forkortet" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: «shell_input_line_size» (%zu) overskrider SIZE_MAX (%lu): linja " +"er forkortet" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "skrivefeil: %s" -#: parse.y:2921 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "grensa for maksimalt antall here-dokumenter er overskredet" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "uforventet slutt på fil (EOF) under søk etter «%c»" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "uforventet slutt på fil (EOF) under søk etter «]]»" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "syntaksfeil i betinget uttrykk: forventet ikke symbolet «%s»" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "syntaksfeil i betinget uttrykk" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "forventet ikke symbolet «%s», men «)»" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "forventet «)»" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "«%s» er et uforventet argument for betinget unær operatør" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "uforventet argument for betinget unær operatør" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "«%s» er et uforventet symbol. Forventet betinget binær operatør" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "forventet betinget binæroperatør" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "«%s» er et uforventet argument for betinget binæroperatør" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "uforventet argument for betinget binæroperatør" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "«%c» er et uforventet symbol i en betinget kommando" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "«%s» er et uforventet symbol i en betinget kommando" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "«%d» er et uforventet symbol i en betinget kommando" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "syntaksfeil ved «%s», som er et uforventet symbol" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "syntaksfeil ved «%s»" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "syntaksfeil: uforventet slutt på fil" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "syntaksfeil: uforventet slutt på fil" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "syntaksfeil" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Bruk «%s» for å gå ut av skallet.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "uforventet slutt på fil (EOF) under søk etter «)»" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "fullføring: fant ikke funksjonen «%s»" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: mulig løkke av nye forsøk" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: «%d» er en ugyldig tilkobling" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: ugyldig fildeskriptor" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: filpeker er NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: «%c»: ugyldig formattegn" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "fildeskriptor er utenfor tillatt rekkevidde" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: flertydig videresending" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: klarte ikke å overskrive fil" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: ikke tillatt: klarte ikke å videresende utdata" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "klarte ikke å lage midlertidig fil for here-dokument: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: klarte ikke å knytte fd til variabel" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port støttes ikke uten nettverkstilkobling" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "videresendingsfeil: klarte ikke å duplisere fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "fant ikke «/tmp». Opprett denne mappa!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "«/tmp» må være et gyldig mappenavn" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "pen utskriftsmodus blir ignorert i interaktive skall" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: ugyldig valg" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "klarte ikke å velge %d som uid. Effektiv uid: %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "klarte ikke å velge %d som gid. Effektiv gid: %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "klarte ikke å starte feilsøkingsverktøy. Feilsøkingsmodus slått av" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: er en mappe" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Jeg manger navn!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versjon %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1729,49 +1803,51 @@ msgstr "" "Bruk:\t%s [langt GNU-valg] [valg] …\n" "\t%s [langt GNU-valg] [valg] skriptfil …\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Lange GNU-valg:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Skallvalg:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" -msgstr "\t«-ilrsD», «-c kommando» eller «-O kortvalg_valg»\t\t(kun programkall)\n" +msgstr "" +"\t«-ilrsD», «-c kommando» eller «-O kortvalg_valg»\t\t(kun programkall)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t«-%s» eller «-o»\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "Skriv «%s -c \"help set\"» for mer informasjon om skallvalg.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "Skriv «%s -c help» for mer informasjon om innebygde skallkommandoer.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Bruk kommandoen «bashbug» for å rapportere programfeil.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bash-nettside: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "Generell hjelp til bruk av GNU-programvare: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Generell hjelp til bruk av GNU-programvare: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: ugyldig handling" @@ -1941,282 +2017,311 @@ msgstr "Informasjonsforespørsel" msgid "Unknown Signal #%d" msgstr "#%d er et ukjent signal" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "ugyldig substitutt: %2$s mangler avsluttende «%1$s»" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: klarte ikke å knytte liste til tabellmedlem" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "klarte ikke å lage datarør for substitusjon av prosess" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "klarte ikke å lage underprosess for substitusjon av prosess" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "klarte ikke å åpne navngitt datarør %s for lesing" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "klarte ikke å åpne navngitt datarør %s for skriving" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "klarte ikke å duplisere navngitt datarør %s som fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "kommandosubstitusjon: null-byte i inndata ignorert" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: klarte ikke å duplisere datarør som fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "klarte ikke å lage datarør for substitusjon av kommando" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "klarte ikke å lage underprosess for substitusjon av kommando" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: klarte ikke å duplisere datarør som fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: ugyldig variabelnavn for navnreferanse" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: ugyldig indirekte utvidelse" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: ugyldig variabelnavn" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parameter har ingen verdi" +msgid "%s: bad substitution" +msgstr "%s: ugyldig substitusjon" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parameter har null-verdi eller står tomt" +msgid "%s: parameter not set" +msgstr "%s: parameter har ingen verdi" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: understreng-uttrykk < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: ugyldig substitusjon" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: du kan ikke tildele på denne måten" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "fremtidige versjoner av skallet skal tvinge evaluering som en aritmetisk substitusjon" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"fremtidige versjoner av skallet skal tvinge evaluering som en aritmetisk " +"substitusjon" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "ugyldig substitusjon. %s mangler avsluttende «`»" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "ingen treff på %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "forventet argument" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: forventet heltallsuttrykk" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "forventet «)»" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "forventet «)», men fant %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: forventet binær operatør" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: forventet unær operatør" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "«]» mangler" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "syntaksfeil: uforventet «%s»" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "ugyldig signalnummer" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "fellehåndtering: øvre grense for fellehåndteringsnivå (%d) er overskredet" +msgstr "" +"fellehåndtering: øvre grense for fellehåndteringsnivå (%d) er overskredet" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: ugyldig verdi i «trap_list[%d]»: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: SIG_DFL er signalbehandler. Sender %d (%s) til meg selv på nytt" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: SIG_DFL er signalbehandler. Sender %d (%s) til meg selv " +"på nytt" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: %d er et ugyldig signal" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "feil under importering av definisjonen av funksjonen «%s»" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "skallnivået (%d) er for høyt. Tilbakestiller til 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "grensa for maksimalt antall here-dokumenter er overskredet" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: ingen funksjonskontekst i gjeldende virkefelt" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: variabel kan ikke tilknyttes verdi" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: kan ikke arve verdi fra inkompatibel type" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: knytter heltall til navnreferanse" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: ingen funksjonskontekst i gjeldende virkefelt" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s har exportstr som er null" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "%d er et ugyldig tegn i exportstr for %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "exportstr for %s mangler «=»" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "pop_var_context: toppen av «shell_variables» er ikke en funksjonskontekst" +msgstr "" +"pop_var_context: toppen av «shell_variables» er ikke en funksjonskontekst" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: kontekst for «global_variables» mangler" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: toppen av «shell_variables» er ikke et midlertidig miljøfelt" +msgstr "" +"pop_scope: toppen av «shell_variables» er ikke et midlertidig miljøfelt" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: klarte ikke å åpne som FIL" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: ugyldig verdi for sporing av fildeskriptor" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: samspill-verdi er utenfor tillatt rekkevidde" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Opphavsrett (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Lisens GPLv3+: GNU GPL versjon 3 eller nyere <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Lisens GPLv3+: GNU GPL versjon 3 eller nyere <http://gnu.org/licenses/gpl." +"html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versjon %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "Dette er fri programvare. Du står fritt til å endre og dele den videre." +msgstr "" +"Dette er fri programvare. Du står fritt til å endre og dele den videre." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." -msgstr "Det stilles INGEN GARANTI, i den grad dette tillates av gjeldende lovverk." +msgstr "" +"Det stilles INGEN GARANTI, i den grad dette tillates av gjeldende lovverk." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: klarte ikke å tildele %lu byte (%lu byte tildelt)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: klarte ikke å tildele %lu byte" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: klarte ikke å tildele %lu byte (%lu byte tildelt)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: klarte ikke å tildele %lu byte" @@ -2230,8 +2335,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] navn [navn …]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m tastaturoppsett] [-f filnavn] [-q navn] [-u navn] [-r knappesekv] [-x knappesekv:skallkommando] [knappesekv:readline-funksjon eller readline-kommando]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m tastaturoppsett] [-f filnavn] [-q navn] [-u navn] [-r " +"knappesekv] [-x knappesekv:skallkommando] [knappesekv:readline-funksjon " +"eller readline-kommando]" #: builtins.c:56 msgid "break [n]" @@ -2250,7 +2360,8 @@ msgid "caller [expr]" msgstr "caller [uttr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [mappe]" #: builtins.c:68 @@ -2262,12 +2373,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] command [arg …]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [-p] [navn[=verdi] …] eller deklarer -p [-aAfFilnrtux] [navn ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [-p] [navn[=verdi] …] eller deklarer -p [-" +"aAfFilnrtux] [navn ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgilnrtux] [-p] navn[=verdi] … eller typesett -p [-aAfFilnrtux] [navn ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgilnrtux] [-p] navn[=verdi] … eller typesett -p [-aAfFilnrtux] " +"[navn ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2326,8 +2445,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [mønster …]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d posisjon] [n] eller history -anrw [filnavn] eller history -ps arg [arg …]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d posisjon] [n] eller history -anrw [filnavn] eller history -" +"ps arg [arg …]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2338,16 +2461,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [jobbspes … | pid …]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s sigspes | -n signum | -sigspes] pid | jobbspes … eller kill -l [sigspes]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s sigspes | -n signum | -sigspes] pid | jobbspes … eller kill -l " +"[sigspes]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let arg [arg …]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a tabell] [-d adskill] [-i tekst] [-n ntegn] [-N ntegn] [-p ledetekst] [-t tidsavbrudd] [-u fd] [navn …]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a tabell] [-d adskill] [-i tekst] [-n ntegn] [-N ntegn] [-p " +"ledetekst] [-t tidsavbrudd] [-u fd] [navn …]" #: builtins.c:140 msgid "return [n]" @@ -2394,7 +2526,8 @@ msgid "[ arg... ]" msgstr "[ arg … ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] signalspes …]" #: builtins.c:168 @@ -2418,106 +2551,134 @@ msgid "wait [pid ...]" msgstr "wait [pid …]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAVN [in ORD … ] ; do KOMMANDOER; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( uttr1; uttr2; uttr3 )); do KOMMANDOER; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAVN [in ORD … ;] do KOMMANDOER; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] kommandokø" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case ORD in [MØNSTER [| MØNSTER] …) KOMMANDOER ;;] … esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if KOMMANDOER; then KOMMANDOER; [ elif KOMMANDOER; then KOMMANDOER; ] … [ else KOMMANDOER; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if KOMMANDOER; then KOMMANDOER; [ elif KOMMANDOER; then KOMMANDOER; ] … " +"[ else KOMMANDOER; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while KOMMANDOER; do KOMMANDOER-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until KOMMANDOER; do KOMMANDOER-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAVN] kommando [videresendinger]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function navn { KOMAMNDOER ; } eller navn () { KOMMANDOER ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ KOMMANDOER ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( uttrykk ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ uttrykk ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variabler - Navn og betydninger av enkelte skallvariabler" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | mappe]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [valgnavn …]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [argumenter]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o valg] [-A handling] [-G globpat] [-W ordliste] [-F funksjon] [-C kommando] [-X filterpat] [-P prefiks] [-S suffiks] [navn …]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o valg] [-A handling] [-G globpat] [-" +"W ordliste] [-F funksjon] [-C kommando] [-X filterpat] [-P prefiks] [-S " +"suffiks] [navn …]" -#: builtins.c:235 -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 valg] [-A handling] [-G globpat] [-W ordliste] [-F funksjon] [-C kommando] [-X filtersti] [-P prefiks] [-S suffiks] [ord]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o valg] [-A handling] [-G globpat] [-W ordliste] [-" +"F funksjon] [-C kommando] [-X filtersti] [-P prefiks] [-S suffiks] [ord]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o valg] [-DEI] [navn …]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d skilletegn] [-n antall] [-O opphav] [-s antall] [-t] [-u fd] [-C tilbakekall] [-c mengde] [tabell]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d skilletegn] [-n antall] [-O opphav] [-s antall] [-t] [-u fd] [-C tilbakekall] [-c mengde] [tabell]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d skilletegn] [-n antall] [-O opphav] [-s antall] [-t] [-u fd] [-C " +"tilbakekall] [-c mengde] [tabell]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d skilletegn] [-n antall] [-O opphav] [-s antall] [-t] [-u fd] [-" +"C tilbakekall] [-c mengde] [tabell]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2532,7 +2693,8 @@ 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 "" "Definer eller vis alias.\n" @@ -2548,10 +2710,11 @@ msgstr "" " -p\tSkriv ut alle definerte alias i brukbart format\n" " \n" " Avslutningsstatus:\n" -" alias avslutter med positiv verdi («true»), med mindre bruker skriver inn et NAVN\n" +" alias avslutter med positiv verdi («true»), med mindre bruker skriver " +"inn et NAVN\n" " som mangler definert alias." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2565,9 +2728,10 @@ msgstr "" " Valg:\n" " -a\tfjern alle alias-definisjoner.\n" " \n" -" Programmet avslutter som vellykket med mindre bruker velger et aliasNAVN som ikke finnes." +" Programmet avslutter som vellykket med mindre bruker velger et aliasNAVN " +"som ikke finnes." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2579,25 +2743,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2605,37 +2774,47 @@ msgid "" msgstr "" "Velg hurtigtaster og variabler for Readline.\n" " \n" -" Knytt en knappekombinasjon til en Readline-funksjon eller makro, eller gi\n" -" verdi til en Readline-variabel. Argumentsyntaksen tilsvarer det som finnes\n" +" Knytt en knappekombinasjon til en Readline-funksjon eller makro, eller " +"gi\n" +" verdi til en Readline-variabel. Argumentsyntaksen tilsvarer det som " +"finnes\n" " i «~/.inputrc», men må oppgis som ett argument.\n" " F.eks.: bind '\"\\C-x\\C-r\": re-read-init-file'.\n" " \n" " Valg:\n" -" -m OPPSETT Bruk valgt tastaturOPPSETT under kjøring av denne kommandoen.\n" +" -m OPPSETT Bruk valgt tastaturOPPSETT under kjøring av denne " +"kommandoen.\n" " Gyldige oppsettsnavn er «emacs», «emacs-standard»,\n" " «emacs-meta», «emacs-ctlx», «vi», «vi-move»,\n" " «vi-command» og «vi-insert».\n" " -l Vis funksjonsnavn.\n" " -P Vis funksjonsnavn og tildelinger.\n" -" -p Vis funksjoner og tildelinger i et format som kan gjenbrukes\n" +" -p Vis funksjoner og tildelinger i et format som kan " +"gjenbrukes\n" " som inndata.\n" -" -S Vis knappekombinasjoner som kaller makroer og tilhørende verdier\n" -" -s Tilsvarer «-S», men i et format som kan gjenbrukes i inndata.\n" +" -S Vis knappekombinasjoner som kaller makroer og " +"tilhørende verdier\n" +" -s Tilsvarer «-S», men i et format som kan gjenbrukes " +"i inndata.\n" " -V Vis variabelnavn og verdier\n" -" -v Tilsvarer «-V», men i et format som kan gjenbrukes i inndata.\n" +" -v Tilsvarer «-V», men i et format som kan gjenbrukes " +"i inndata.\n" " -q function-name Spør hvilke knapper som kaller aktuell funksjon.\n" -" -u function-name Fjern alle knappekombinasjoner som er tilknyttet aktuell funksjon.\n" +" -u function-name Fjern alle knappekombinasjoner som er tilknyttet " +"aktuell funksjon.\n" " -r KOMB Fjern tildeling av valgt knappeKOMBinasjon.\n" " -f FILNAVN Les knappekombinasjoner fra FILNAVN.\n" " -x KOMB:KOMMANDO\tGjør slik at valgt skallKOMMANDO kjøres når\n" " \t\t\t\tvalgt knappeKOMBinasjon trykkes.\n" -" -X Vis knappekombinasjoner som er tildelt med «-x», og aktuelle kommandoer \n" +" -X Vis knappekombinasjoner som er tildelt med «-x», og " +"aktuelle kommandoer \n" " i et format som kan gjenbrukes i inndata.\n" " \n" " Avslutningsstatus:\n" -" bind avslutter med 0, med mindre bruker tar et ukjent valg eller det oppstår feil." +" bind avslutter med 0, med mindre bruker tar et ukjent valg eller det " +"oppstår feil." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2652,7 +2831,7 @@ msgstr "" " Avslutningsstatus:\n" " Statuskoden er 0, med mindre N er mindre enn 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2669,13 +2848,14 @@ msgstr "" " Avslutningsstatus:\n" " Statuskoden er 0, med mindre N er mindre enn 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2685,13 +2865,14 @@ msgstr "" " \n" " Kjør SKALLFUNKSJON med valgte ARGumenter uten å slå opp\n" " kommandonavn. Dette er nyttig når du vil re-implementere en innebygd\n" -" skallkommando som en funksjon, samtidig som du kjører den innenfor en skallfunksjon.\n" +" skallkommando som en funksjon, samtidig som du kjører den innenfor en " +"skallfunksjon.\n" " \n" " Avslutningsstatus:\n" " Statuskoden er den samme som aktuell SKALLFUNKSJON gir, eller\n" " negativ («false») hvis SKALLFUNKSJON ikke er en innebygd skallkommando." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2712,27 +2893,35 @@ msgstr "" " «$line $subroutine $filename». Denne ekstrainformasjonen kan brukes\n" " til stabelsporing.\n" " \n" -" Verdien av UTTRykk viser hvor mange kall-rammer programmet skal bevege seg\n" +" Verdien av UTTRykk viser hvor mange kall-rammer programmet skal bevege " +"seg\n" " gjennom tilbake fra gjeldende ramme. Øverste ramme er 0.\n" " \n" " Avslutningsstatus:\n" " Status er 0, med mindre skallet ikke kjører en skallfunksjon eller\n" " valgt UTTRykk er ugyldig." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2748,11 +2937,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Bytt arbeidsmappe for skallet.\n" @@ -2765,7 +2956,8 @@ msgstr "" " Et null-mappenavn er det samme som gjeldende mappe. Hvis MAP begynner\n" " med skråstrek (/), brukes ikke CDPATH.\n" " \n" -" Hvis valgt mappe ikke finnes, og skallvalget «cdable_vars» har en verdi,\n" +" Hvis valgt mappe ikke finnes, og skallvalget «cdable_vars» har en " +"verdi,\n" " antas ordet å være et variabelnavn. Hvis den variabelen har en verdi,\n" " brukes denne verdien som MAP.\n" " \n" @@ -2784,10 +2976,11 @@ msgstr "" " én skråstrek tilbake eller til begynnelsen av MAP.\n" " \n" " Avslutningsstatus:\n" -" Status er 0 hvis skallet har byttet mappe, og hvis $PWD er valgt uten problemer\n" +" Status er 0 hvis skallet har byttet mappe, og hvis $PWD er valgt uten " +"problemer\n" " ved bruk av «-P». Ellers er status noe annet enn 0." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2815,7 +3008,7 @@ msgstr "" " Status er 0, med mindre bruker tar et ugyldig valg eller\n" " programmet ikke klarer å lese gjeldende mappe." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2831,7 +3024,7 @@ msgstr "" " Avslutningsstatus:\n" " Alltid vellykket." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2843,7 +3036,7 @@ msgstr "" " Avslutningsstatus:\n" " Alltid vellykket." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2855,12 +3048,13 @@ msgstr "" " Avslutningsstatus:\n" " Alltid mislykket." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2874,8 +3068,10 @@ msgid "" msgstr "" "Kjør en enkel kommando, eller vis informasjon om kommandoer.\n" " \n" -" Kjører valgt KOMMANDO med ARG uten oppslag av skallfunksjoner, eller viser\n" -" informasjon om valgte KOMMANDOer. Dette kan brukes til å kalle kommandoer\n" +" Kjører valgt KOMMANDO med ARG uten oppslag av skallfunksjoner, eller " +"viser\n" +" informasjon om valgte KOMMANDOer. Dette kan brukes til å kalle " +"kommandoer\n" " på disk når det finens en funksjon med samme navn.\n" " \n" " Valg:\n" @@ -2885,9 +3081,11 @@ msgstr "" " -V\tskriv ut en mer detaljert beskrivelse av hver KOMMANDO\n" " \n" " Avslutningsstatus:\n" -" Samme som statuskoden fra KOMMANDO, eller mislykket hvis KOMMANDO ikke finnes." +" Samme som statuskoden fra KOMMANDO, eller mislykket hvis KOMMANDO ikke " +"finnes." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2915,12 +3113,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2946,7 +3146,8 @@ msgstr "" " -A\tgjør valgte NAVN til assosiative tabeller (hvis det støttes)\n" " -i\tgi valgte NAVN attributten «integer» (heltall)\n" " -l\tkonverter valgte NAVN til små bokstaver\n" -" -n\tgjør valgt NAVN til en referanse til variabelen med egen verdi som navn\n" +" -n\tgjør valgt NAVN til en referanse til variabelen med egen verdi som " +"navn\n" " -r\tskrivebeskytt valgte NAVN\n" " -t\tgi valgte NAVN attirbutten «trace»\n" " -u\tkonverter valgte NAVN til store bokstaver\n" @@ -2964,7 +3165,7 @@ msgstr "" " Vellykket, med mindre bruker tar et ugyldig valg eller\n" " det oppstår en variabel-tildelingsfeil." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2974,7 +3175,7 @@ msgstr "" " \n" " Dette er synonymt med «declare» (se «help declare»)." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2993,18 +3194,20 @@ msgstr "" " Lag en lokal variabel med valgt NAVN og VERDI. Du kan foreta\n" " VALG i henhold til kommandoen «declare».\n" " \n" -" Lokale variabler kan bare brukes innenfor en funksjon. De er kun synlige\n" +" Lokale variabler kan bare brukes innenfor en funksjon. De er kun " +"synlige\n" " for funksjonen de lages innenfor, samt underfunksjoner.\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg, det oppstår\n" " en feil under variabeltildeling eller skallet ikke kjører en funksjon." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3028,9 +3231,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3066,7 +3271,7 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre det oppstår en skrivefeil." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3088,7 +3293,8 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre det oppstår en skrivefeil." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3108,6 +3314,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3122,7 +3334,8 @@ msgstr "" " \n" " Valg:\n" " -a\tskriv ut en liste som viser hvilke kommandoer som er slått på\n" -" -n\tslå av hvert valgt NAVN, eller vis en liste over kommandoer som er slått av\n" +" -n\tslå av hvert valgt NAVN, eller vis en liste over kommandoer som er " +"slått av\n" " -p\tskriv ut liste over kommandoer i et gjenbrukbart format\n" " -s\tbare skriv ut navn på innebygde Posix-spesialkommandoer\n" " \n" @@ -3138,11 +3351,12 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre valgt NAVN ikke er innebygd eller det oppstår feil." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3156,7 +3370,7 @@ msgstr "" " Avslutningsstatus:\n" " Samme som valgt kommando, eller vellykket hvis kommando er null." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3209,13 +3423,17 @@ msgstr "" " kalles, laster inn navnet hvis det ikke finnes, og\n" " indeks for neste argument som skal behandles i skallvariabelen OPTIND.\n" " OPTIND lastes inn til 1 hver gang skallet eller et skallskript kjøres.\n" -" Når et valg krever et argument plasseres argumentet i skallvariabelen OPTARG.\n" +" Når et valg krever et argument plasseres argumentet i skallvariabelen " +"OPTARG.\n" " \n" -" getopts rapporterer feil på én av to måter. Hvis første tegn i VALGSTRENG\n" +" getopts rapporterer feil på én av to måter. Hvis første tegn i " +"VALGSTRENG\n" " er kolon, rapporteres feil uten direkte feilmeldinger til bruker.\n" " Hvis getopts ser et ugyldig valg, plasseres aktuelt valgtegn i OPTARG.\n" -" Hvis et obligatorisk argument ikke er gitt, legger getopts et «:» i NAVN og\n" -" bruker oppdaget valgtegn som OPTARG. Hvis getopts ikke er i stillemodus,\n" +" Hvis et obligatorisk argument ikke er gitt, legger getopts et «:» i NAVN " +"og\n" +" bruker oppdaget valgtegn som OPTARG. Hvis getopts ikke er i " +"stillemodus,\n" " og ser et ugyldig valg, brukes «?» som NAVN, og OPTARG tømmes.\n" " Hvis et obligatorisk argument ikke er gitt, legger getopts et «?»\n" " i NAVN, tømmer OPTARG og skriver ut en feilmelding.\n" @@ -3231,12 +3449,13 @@ msgstr "" " Vellykket hvis et valg finnes, og mislykket hvis et valg ikke finnes\n" " eller det oppstår en annen feil." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3244,16 +3463,19 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Erstatt skallet med valgt kommando.\n" " \n" " Kjør KOMMANDO, og erstatt dette skallet med valgt program.\n" -" ARGUMENTER sendes videre til valgt KOMMANDO. Hvis KOMMANDO ikke er valgt,\n" +" ARGUMENTER sendes videre til valgt KOMMANDO. Hvis KOMMANDO ikke er " +"valgt,\n" " blir videresendinger brukt i gjeldende skall.\n" " \n" " Valg:\n" @@ -3261,13 +3483,15 @@ msgstr "" " -c\t\tkjør valgt KOMMANDO med et tomt miljø\n" " -l\t\tbruk bindestrek som argument nummer null for COMMAND\n" " \n" -" Hvis kommandoen ikke kan kjøres, avsluttes ikke-interaktivt skall, med mindre\n" +" Hvis kommandoen ikke kan kjøres, avsluttes ikke-interaktivt skall, med " +"mindre\n" " skallvalget «execfail» er brukt.\n" " \n" " Avslutningsstatus:\n" -" Vellykket, med mindre valgt KOMMANDO ikke finnes eller det oppstår en videresendingsfeil." +" Vellykket, med mindre valgt KOMMANDO ikke finnes eller det oppstår en " +"videresendingsfeil." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3279,29 +3503,34 @@ msgstr "" " Avslutt skallet med status N. Hvis N utelates, er statuskoden\n" " den samme som forrige kjørte kommando." -#: builtins.c:724 +#: builtins.c:732 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 "" "Avslutt et innloggingsskall.\n" " \n" -" Avslutter et innloggingsskall med status N. Dette gir feilmelding hvis det\n" +" Avslutter et innloggingsskall med status N. Dette gir feilmelding hvis " +"det\n" " ikke kjøres i et innloggingsskall." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3314,17 +3543,23 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Vis eller kjør kommandoer fra historikklista.\n" " \n" -" fc brukes til å vise list eller redigere og kjøre kommandoer på nytt fra historikklista.\n" -" FØRSTE og SISTE kan være tall som angir rekkevidde. FØRSTE kan også være en\n" +" fc brukes til å vise list eller redigere og kjøre kommandoer på nytt fra " +"historikklista.\n" +" FØRSTE og SISTE kan være tall som angir rekkevidde. FØRSTE kan også være " +"en\n" " streng, som betyr nyeste kommando som begynner med denne strengen.\n" " \n" " Valg:\n" -" -e ENAME\tvelg hvilket redigeringsprogram som skal brukes. Standard er FCEDIT, evt. EDITOR\n" +" -e ENAME\tvelg hvilket redigeringsprogram som skal brukes. Standard er " +"FCEDIT, evt. EDITOR\n" " \t\teller vi\n" " -l \tvis linjer i stedet for å redigere\n" " -n\tikke vis linjenumre\n" @@ -3338,9 +3573,10 @@ msgstr "" " betyr å kjøre forrige kommando.\n" " \n" " Avslutningsstatus:\n" -" Enten vellykket, samme som kjørt kommando eller noe annet enn null hvis det oppstår feil." +" Enten vellykket, samme som kjørt kommando eller noe annet enn null hvis " +"det oppstår feil." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3358,14 +3594,17 @@ msgstr "" " allerede oppfattes som gjeldende i skallet.\n" " \n" " Avslutningsstatus:\n" -" Samme som kommandoen som legges i forgrunnen, eller mislykket hvis det oppstår feil." +" Samme som kommandoen som legges i forgrunnen, eller mislykket hvis det " +"oppstår feil." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3374,18 +3613,20 @@ msgstr "" "Flytt jobber til bakgrunnen.\n" " \n" " Plasser jobber med id-er JOB_SPEC i bakgrunnen, som om de\n" -" ble startet med «&». Hvis JOB_SPEC ikke er oppgitt, brukes jobben som allerede\n" +" ble startet med «&». Hvis JOB_SPEC ikke er oppgitt, brukes jobben som " +"allerede\n" " som gjeldende i skallet.\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre jobbkontroll er slått av eller det oppstår feil." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3415,13 +3656,14 @@ msgstr "" " -t\t\tskriv ut lagret plassering av valgt(e) NAVN, med\n" " \t\tNAVN foran aktuell plassering hvis flere NAVN er valgt\n" " Argumenter:\n" -" NAVN\t\tProgrammet søker etter hvert NAVN i $PATH og legger det til i lista\n" +" NAVN\t\tProgrammet søker etter hvert NAVN i $PATH og legger det til i " +"lista\n" " \t\tover lagrede kommandoer.\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre NAVN ikke finnes eller bruker tar et ugyldig valg." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3439,7 +3681,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Vis informasjon om innebygde kommandoer.\n" " \n" @@ -3457,9 +3700,11 @@ msgstr "" " MØNSTER\tVelger hjelpeemne\n" " \n" " Avslutningsstatus:\n" -" Vellykket, med mindre et MØNSTER ikke finnes eller bruker tar et ugyldig valg." +" Vellykket, med mindre et MØNSTER ikke finnes eller bruker tar et ugyldig " +"valg." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3483,11 +3728,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3503,7 +3753,8 @@ msgstr "" "\t\tNegativ posisjon teller fra slutten.\n" " \n" " -a\tlegg til linjer fra gjeldende økt i historikkfil\n" -" -n\tles alle historikklinjer som ikke allerede er lest inn fra historikkfil\n" +" -n\tles alle historikklinjer som ikke allerede er lest inn fra " +"historikkfil\n" " -r\tles historikkfil og legg til innhold i historikkliste\n" " -w\tlagre gjeldende historikk i historikkfil\n" " \n" @@ -3521,7 +3772,7 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3561,10 +3812,11 @@ msgstr "" " jobber er erstattet med prosess-ID-en til gjeldende prosessgruppeleder.\n" " \n" " Avslutningsstatus:\n" -" Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil.\n" +" Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår " +"feil.\n" " Hvis «-x» er valgt, hentes statuskode fra aktuell KOMMANDO." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3587,14 +3839,15 @@ msgstr "" " \n" " Valg:\n" " -a\tfjern alle jobber hvis JOBBSPES ikke er angitt\n" -" -h\tmarker hver JOBBSPES slik at SIGHUP ikke sendes til jobben hvis skallet\n" +" -h\tmarker hver JOBBSPES slik at SIGHUP ikke sendes til jobben hvis " +"skallet\n" " \tmottar et SIGHUP\n" " -r\tbare fjern kjørende jobber\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar ugyldig(e) valg eller JOBBSPES." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3619,7 +3872,8 @@ msgstr "" "Send signal til en jobb.\n" " \n" " Gi prosesser (valgt med PID eller JOBBSPES) et signal\n" -" (valgt med SIGSPES eller SIGNUM). Hvis hverken SIGSPES eller SIGNUM er valgt,\n" +" (valgt med SIGSPES eller SIGNUM). Hvis hverken SIGSPES eller SIGNUM er " +"valgt,\n" " brukes SIGTERM.\n" " \n" " Valg:\n" @@ -3629,21 +3883,23 @@ msgstr "" " \tantas disse å være signalnumre som det skal vises navn på\n" " -L\ttilsvarer «-l»\n" " \n" -" Kill er en innebygget skallkommando av to grunner: den tillater bruk av jobb-ID\n" +" Kill er en innebygget skallkommando av to grunner: den tillater bruk av " +"jobb-ID\n" " i stedet for prosess-ID, og lar bruker drepe prosesser hvis grensa for\n" " antall tillatte prosesser er nådd.\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3709,7 +3965,8 @@ msgstr "" " \n" " Skallvariabler tillates som operand. Variabelens navn erstattes med\n" " verdien (tvunget til et breddefast heltall) i et uttrykk.\n" -" Variabelen behøver ikke heltallsattributt for å kunne brukes i et uttrykk.\n" +" Variabelen behøver ikke heltallsattributt for å kunne brukes i et " +"uttrykk.\n" " \n" " Operatører regnes ut etter presedens. Underuttrykk i parentes\n" " regnes ut først, og kan overstyre overnevnte presedensregler.\n" @@ -3717,19 +3974,24 @@ msgstr "" " Avslutningsstatus:\n" " Hvis siste ARGument blir 0, er status 1. Ellers er statuskoden 0." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3737,11 +3999,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3759,8 +4024,10 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Les en linje fra standard inndata og del den opp i felt.\n" @@ -3776,32 +4043,38 @@ msgstr "" " Valg:\n" " -a tabell\tknytt leste ord til sekvens-indekser i \n" " \t\ttabellvariabelen TABELL, talt fra null\n" -" -d skill\tfortsett frem til første SKILLetegn, i stedet for frem til linjeskift\n" +" -d skill\tfortsett frem til første SKILLetegn, i stedet for frem til " +"linjeskift\n" " -e\t\tbruk Readline til å hente linje\n" " -i tekst\tBruk valgt TEKST med Readline\n" -" -n n\tgå tilbake etter å ha lest N antall tegn i stedet for å vente på ny linje,\n" +" -n n\tgå tilbake etter å ha lest N antall tegn i stedet for å vente på " +"ny linje,\n" " \t\tmen bruk skilletegn hvis linja er kortere enn N\n" " \t\tles tegn før skilletegn\n" " -N N\tgå tilbake etter å ha lest nøyaktig N antall tegn, med mindre\n" " \t\tEOF eller tidsavbrudd oppstår (skilletegn ignoreres)\n" -" -p ledet\tskriv ut valgt LEDETekst uten å legge til linjeskift før lesing\n" +" -p ledet\tskriv ut valgt LEDETekst uten å legge til linjeskift før " +"lesing\n" " -r\t\tikke tillat bruk av skråstrek som skiftetegn\n" " -s\t\tikke skriv ut inndata som kommer fra en terminal\n" " -t tidsav\tavbryt og avslutt med feil hvis en hel linje med inndata\n" " \t\tikke blir lest ferdig innen valgt TIDSAVbrudd (i sekunder).\n" -" \t\tStandard avbruddstid hentes fra variabelen TMOUT. TIDSAVbrudd kan være\n" +" \t\tStandard avbruddstid hentes fra variabelen TMOUT. TIDSAVbrudd kan " +"være\n" " \t\tet brøktall. Hvis TIDSAV er 0, går read tilbake umiddelbart,\n" -" \t\tog prøver ikke å lese data. I sistnevnte tilfelle avslutter read bare\n" +" \t\tog prøver ikke å lese data. I sistnevnte tilfelle avslutter read " +"bare\n" " \t\tvellykket hvis inndata er tilgjengelig på valgt fildeskriptor.\n" " \t\tAvslutningsstatus er større enn 128 ved tidsavbrudd\n" " -u fd\t\tles fra fildeskriptor FD i stedet for standard inndata\n" " \n" " Avslutningsstatus:\n" " Null (vellykket), med mindre programmet møter EOF, får tidsavbrudd\n" -" (i så fall er verdien høyere enn 128), det oppstår en variabel-tidelingsfeil,\n" +" (i så fall er verdien høyere enn 128), det oppstår en variabel-" +"tidelingsfeil,\n" " eller valget «-u» argumenteres med en ugyldig fildeskriptor." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3821,7 +4094,8 @@ msgstr "" " Avslutningsstatus:\n" " N, eller mislykket hvis skallet ikke kjører en funksjon eller et skript." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3864,7 +4138,8 @@ 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" @@ -3888,13 +4163,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3944,8 +4224,10 @@ msgstr "" " onecmd tilsvarer «-t»\n" " physical tilsvarer «-P»\n" " pipefail returverdi av en kommandokø er statusen for\n" -" siste kommando som avslutter med en annen status enn null,\n" -" eller null hvis alle kommandoer avsluttet med null\n" +" siste kommando som avslutter med en annen status " +"enn null,\n" +" eller null hvis alle kommandoer avsluttet med " +"null\n" " posix endre bash-oppførsel hvor standardoppførselen er\n" " annerledes enn Posix-standarden, slik at bash\n" " samsvarer med Posix\n" @@ -3955,7 +4237,8 @@ msgstr "" " xtrace tilsvarer «-x»\n" " -p Slått på når virkelig og effektiv bruker-ID ikke er like.\n" " Dette slår av behandling av fila $ENV og importering av\n" -" skallfunksjoner. Hvis du slår av dette valget, blir effektiv uid og\n" +" skallfunksjoner. Hvis du slår av dette valget, blir effektiv uid " +"og\n" " gid det samme som virkelig uid og gid.\n" " -t Avslutt når én kommando er lest og kjørt.\n" " -u Behandle udefinerte variabler som en feil.\n" @@ -3984,7 +4267,7 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3996,7 +4279,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4011,7 +4295,8 @@ msgstr "" " Valg:\n" " -f\tbehandle hvert NAVN som en skallfunksjon\n" " -v\tbehandle hvert NAVN som en skallvariabel\n" -" -n\tbehandle hvert NAVN som en navnreferanse, og tilbakestill selve variabelen\n" +" -n\tbehandle hvert NAVN som en navnreferanse, og tilbakestill selve " +"variabelen\n" " \ti stedet for variabelen den refererer til\n" " \n" " Hvis ingen valg er tatt, prøver programmet først å tømme en variabel.\n" @@ -4020,14 +4305,16 @@ msgstr "" " Enkelte variabler kan ikke tømmes. Se også «readonly».\n" " \n" " Avslutningsstatus:\n" -" Vellykket, med mindre bruker tar et ugyldig valg eller et NAVN er skrivebeskyttet." +" Vellykket, med mindre bruker tar et ugyldig valg eller et NAVN er " +"skrivebeskyttet." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4041,8 +4328,10 @@ msgid "" msgstr "" "Gi skallvariabler eksport-attributt.\n" " \n" -" Markerer hvert valgt NAVN for automatisk eksportering til miljøet ved etterfølgende\n" -" kjørte kommandoer. Hvis VERDI er oppgitt, tildeles VERDI før eksportering.\n" +" Markerer hvert valgt NAVN for automatisk eksportering til miljøet ved " +"etterfølgende\n" +" kjørte kommandoer. Hvis VERDI er oppgitt, tildeles VERDI før " +"eksportering.\n" " \n" " Valg:\n" " -f\thenvis til skallfunksjoner\n" @@ -4052,9 +4341,10 @@ msgstr "" " Bruk argumentet«--» for å slå av videre behandling av valg.\n" " \n" " Avslutningsstatus:\n" -" Vellykket, med mindre bruker tar et ugyldig valg, eller et NAVN er ugyldig." +" Vellykket, med mindre bruker tar et ugyldig valg, eller et NAVN er " +"ugyldig." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4076,7 +4366,8 @@ msgid "" msgstr "" "Marker skallvariabler som skrivebeskyttet.\n" " \n" -" Marker hvert valgt NAVN som skrivebeskyttet. Verdier av NAVN kan ikke endres\n" +" Marker hvert valgt NAVN som skrivebeskyttet. Verdier av NAVN kan ikke " +"endres\n" " av etterfølgende tildeling. Hvis VERDI er oppgitt, tildeles denne før\n" " variabelen markeres som skrivebeskyttet.\n" " \n" @@ -4084,7 +4375,8 @@ msgstr "" " -a\thenvis til indekserte tabellvariabler\n" " -A\thenvis til assosiative tabellvariabler\n" " -f\thenvis til skallfunksjoner\n" -" -p\tvis en liste over alle skrivebeskyttede variabler eller funksjoner,\n" +" -p\tvis en liste over alle skrivebeskyttede variabler eller " +"funksjoner,\n" " avhengig av hvorvidt «-f» er valgt\n" " \n" " Bruk argumentet «--» for å slå av videre behandling av valg.\n" @@ -4092,7 +4384,7 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg eller NAVN." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4110,7 +4402,7 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre N er negativ eller større enn $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4134,23 +4426,28 @@ msgstr "" " Samme som siste kommando som ble kjørt via FILNAVN, eller\n" " mislykket hvis FILNAVN ikke kan leses." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" "Sett skallkjøring på pause.\n" " \n" -" Sett kjøring av dette skallet på pause inntil det mottar et SIGCONT-signal.\n" -" Innloggingsskall kan ikke settes på pause med mindre du tvinger det fram.\n" +" Sett kjøring av dette skallet på pause inntil det mottar et SIGCONT-" +"signal.\n" +" Innloggingsskall kan ikke settes på pause med mindre du tvinger det " +"fram.\n" " \n" " Valg:\n" " -f\ttving skallpause, selv hvis skallet er et innloggingsskall\n" @@ -4158,7 +4455,7 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre jobbkontroll er slått av eller det oppstår feil." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4192,7 +4489,8 @@ 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" @@ -4213,7 +4511,8 @@ 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" @@ -4241,7 +4540,8 @@ msgstr "" "Kontroller betinget uttrykk.\n" " \n" " Avslutter med status 0 (positiv, «true») eller 1 (negativ, «false»)\n" -" i henhold til resultatet av valgt UTTRykk. Uttrykk kan være unære eller binære.\n" +" i henhold til resultatet av valgt UTTRykk. Uttrykk kan være unære eller " +"binære.\n" " Unære uttrykk brukes ofte for å undersøke status for en fil.\n" " Streng- og tallkontroll-valg kan også brukes.\n" " \n" @@ -4269,8 +4569,10 @@ msgstr "" " -w FIL Positiv hvis FIL kan overskrives av deg.\n" " -x FIL Positiv hvis FIL kan kjøres av deg.\n" " -O FIL Positiv hvis FIL har deg som effektiv eier.\n" -" -G FIL Positiv hvis FIL har din gruppe som effektiv gruppetilhørighet.\n" -" -N FIL Positiv hvis FIL er blitt endret siden den ble lest sist.\n" +" -G FIL Positiv hvis FIL har din gruppe som effektiv " +"gruppetilhørighet.\n" +" -N FIL Positiv hvis FIL er blitt endret siden den ble lest " +"sist.\n" " \n" " FIL1 -nt FIL2 Positiv hvis FIL1 er nyere enn FIL2 (i følge\n" " endringsdato).\n" @@ -4291,15 +4593,18 @@ msgstr "" " STRENG1 != STRENG2\n" " Positiv hvis STRENGene ikke er like.\n" " STRENG1 < STRENG2\n" -" Positiv hvis STRENG1 havner over STRENG2 når de sorteres leksikografisk.\n" +" Positiv hvis STRENG1 havner over STRENG2 når de " +"sorteres leksikografisk.\n" " STRENG1 > STRENG2\n" -" Positiv hvis STRENG1 havner under STRENG2 når de sorteres leksikografisk.\n" +" Positiv hvis STRENG1 havner under STRENG2 når de " +"sorteres leksikografisk.\n" " \n" " Andre valg:\n" " \n" " -o VALG Positiv hvis skallvalget OPTION er slått på.\n" " -v VAR\t Positiv hvis skallvariabelen VAR har en verdi\n" -" -R VAR\t Positiv hvis skallvariabelen VAR har en verdi, og er en navnreferanse.\n" +" -R VAR\t Positiv hvis skallvariabelen VAR har en verdi, og er en " +"navnreferanse.\n" " ! UTTR Positiv hvis UTTR er usant.\n" " UTTR1 -a UTTR2 Positiv hvis både UTTR1 og UTTR2 er sanne.\n" " UTTR1 -o UTTR2 Positiv hvis enten UTTR1 eller UTTR2 er sanne.\n" @@ -4307,14 +4612,16 @@ msgstr "" " arg1 OP arg2 Aritmetiske tester. OP må være enten «-eq», «-ne»,\n" " «-lt», «-le», «-gt» eller «-ge».\n" " \n" -" Aritmetiske binærvalg gir positiv verdi hvis ARG1 er lik, ulik, mindre enn,\n" +" Aritmetiske binærvalg gir positiv verdi hvis ARG1 er lik, ulik, mindre " +"enn,\n" " lik-eller-mindre-enn, større enn eller større-enn-eller-lik ARG2.\n" " \n" " Avslutningsstatus:\n" -" Vellykket hvis UTTR gir positiv verdi, og mislykket hvis det gir negativ verdi eller\n" +" Vellykket hvis UTTR gir positiv verdi, og mislykket hvis det gir negativ " +"verdi eller\n" " bruker skriver inn et ugyldig argument." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4326,11 +4633,12 @@ msgstr "" " Dette er synonymt med den innebygde kommandoen «test», men\n" " siste argument må være «]» for å samsvare med «[»." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4338,51 +4646,69 @@ msgid "" msgstr "" "Vis prosesstider.\n" " \n" -" Skriver ut oppsamlet bruker- og systemtid for skallet og alle underprosesser.\n" +" Skriver ut oppsamlet bruker- og systemtid for skallet og alle " +"underprosesser.\n" " \n" " Avslutningsstatus:\n" " Alltid vellykket." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Fang signaler og andre hendelser.\n" " \n" -" Definerer og slår på brytere som skal kjøres når skallet mottar signaler\n" +" Definerer og slår på brytere som skal kjøres når skallet mottar " +"signaler\n" " eller havner i andre tilstander.\n" " \n" -" ARG er en kommando som skal leses og kjøres når skallet mottar signalet/-ene\n" +" ARG er en kommando som skal leses og kjøres når skallet mottar signalet/-" +"ene\n" " i henhold til SIGNALSPES. Hvis ARG er enten utelatt eller «-»,\n" " og én SIGNALSPES er brukt, tilbakestilles valgt(e) signal(er) til\n" " opprinnelig verdi. Hvis ARG er null, ignoreres SIGNALSPES av skallet\n" @@ -4390,26 +4716,31 @@ msgstr "" " \n" " Hvis en SIGNALSPES er EXIT (0), kjøres ARG når skallet avslutter.\n" " Hvis en SIGNALSPES er DEBUG, kjøres ARG før hver kommando.\n" -" Hvis en SIGNALSPES er RETURN, kjøres ARG hver gang en skallfunksjon, skript\n" +" Hvis en SIGNALSPES er RETURN, kjøres ARG hver gang en skallfunksjon, " +"skript\n" " eller innebygd kommando har kjørt ferdig. Hvis en SIGNALSPES\n" -" er ERR, kjøres ARG hver gang en feilkjørt kommando ville ført til at skallet\n" +" er ERR, kjøres ARG hver gang en feilkjørt kommando ville ført til at " +"skallet\n" " avsluttes når «-e» er valgt.\n" " \n" -" Hvis ingen argumenter er brukt, skriver trap ut en liste over kommandoer\n" +" Hvis ingen argumenter er brukt, skriver trap ut en liste over " +"kommandoer\n" " som er tilknyttet hvert signal.\n" " \n" " Valg:\n" " -l\tskriv ut en liste over signalnavn og tilknyttede numre\n" " -p\tvis trap-kommandoer som er tilknyttet hver SIGNALSPESifikasjon\n" " \n" -" Hver SIGNALSPES er enten et signalnavn fra <signal.h> eller et signalnummer.\n" -" Signalnavn skiller mellom små og store bokstaver. Prefikset «SIG» er valgfritt.\n" +" Hver SIGNALSPES er enten et signalnavn fra <signal.h> eller et " +"signalnummer.\n" +" Signalnavn skiller mellom små og store bokstaver. Prefikset «SIG» er " +"valgfritt.\n" " Du kan sende et signal til skallet med «kill -signal $$».\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre en SIGNALSPES eller et valg er ugyldig." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4435,7 +4766,8 @@ 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 "" "Vis informasjon om kommandotype.\n" " \n" @@ -4443,30 +4775,36 @@ msgstr "" " et kommandonavn.\n" " \n" " Valg:\n" -" -a\tvis alle plasseringer som inneholder en kjørbar fil med oppgitt NAVN.\n" +" -a\tvis alle plasseringer som inneholder en kjørbar fil med oppgitt " +"NAVN.\n" " \tHer inngår alle alias, innebygde kommandoer og funksjoner, med mindre\n" " \t«-p» er valgt i tillegg\n" " -f\tikke slå opp skallfunksjoner\n" " -P\ttving et søk i STI etter NAVN, selv hvis det er et alias,\n" " \tinnebygd kommando eller en funksjon, og vis navn på fila\n" " \tsom ville blitt kjørt\n" -" -p\tvis enten navn på fila som ville blitt kjørt, eller ingenting hvis\n" +" -p\tvis enten navn på fila som ville blitt kjørt, eller ingenting " +"hvis\n" " \t«type -t NAVN» ikke fører til «file».\n" " -t\tbeskriv NAVN som enten «alias», «keyword» (nøkkelord),\n" -" \t«function» (funksjon), «builtin» (innebygd kommando), «file» (fil) eller \n" +" \t«function» (funksjon), «builtin» (innebygd kommando), «file» (fil) " +"eller \n" " \t«'» (ikke funnet), if NAME is an alias, shell\n" " \n" " Argumenter:\n" " NAVN\tKommandonavn som skal tolkes.\n" " \n" " Avslutningsstatus:\n" -" Vellykket hvis alle NAVN finnes, og mislykket hvis ett eller flere ikke finnes." +" Vellykket hvis alle NAVN finnes, og mislykket hvis ett eller flere ikke " +"finnes." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4503,16 +4841,18 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Endre grenser for skallressurser.\n" " \n" -" Lar deg kontrollere mengden ressurser som skal være tilgjengelig for skall og\n" +" Lar deg kontrollere mengden ressurser som skal være tilgjengelig for " +"skall og\n" " prosessene det lager på systemer som tillater det.\n" " \n" " Valg:\n" @@ -4523,7 +4863,8 @@ msgstr "" " -c\tmaksimal størrelse på opprettede kjernefiler\n" " -d\tmaksimal størrelse på datasegment av en prosess\n" " -e\tmaksimal prioritet («nice»-verdi)\n" -" -f\tmaksimal størrelse på filer som skrives av skallet og underprosesser\n" +" -f\tmaksimal størrelse på filer som skrives av skallet og " +"underprosesser\n" " -i\tmaksimalt antall ventende signaler\n" " -k\tmaksimalt antall k-køer som er tildelt denne prosessen\n" " -l\tmaksimal minnemengde en prosess kan låse\n" @@ -4544,17 +4885,21 @@ msgstr "" " Det er ikke alle valg som støttes på alle plattformer.\n" " \n" " Hvis GRENSE er oppgitt, brukes denne som ny verdi for valgt ressurs.\n" -" Du kan også bruke spesialverdiene «soft» (myk), «hard», og «unlimited» (ubegrenset).\n" -" Ellers skriver programmet ut gjeldende verdi av valgt ressurs. Hvis ingenting\n" +" Du kan også bruke spesialverdiene «soft» (myk), «hard», og " +"«unlimited» (ubegrenset).\n" +" Ellers skriver programmet ut gjeldende verdi av valgt ressurs. Hvis " +"ingenting\n" " er valgt, brukes «-f».\n" " \n" -" Verdier oppgis i 1024-byte-enheter, bortsett fra «-t» som oppgis i sekunder,\n" -" «-p» som oppgis i 512-byte-enheter og «-u» som er et uskalert antall prosesser.\n" +" Verdier oppgis i 1024-byte-enheter, bortsett fra «-t» som oppgis i " +"sekunder,\n" +" «-p» som oppgis i 512-byte-enheter og «-u» som er et uskalert antall " +"prosesser.\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4580,29 +4925,34 @@ msgstr "" " og ellers som en symbolsk modusstreng av typen som brukes av chmod(1).\n" " \n" " Valg:\n" -" -p\tskriv ut i et format som kan gjenbrukes som inndata hvis ingen MODUS er valgt\n" +" -p\tskriv ut i et format som kan gjenbrukes som inndata hvis ingen " +"MODUS er valgt\n" " -S\tgjør utdata symbolsk (ikke skriv ut oktaltall)\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre MODUS er ugyldig eller bruker tar et ugyldig valg." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4616,14 +4966,17 @@ msgstr "" "Vent på fullføring av jobb, og skriv ut avslutningsstatus.\n" " \n" " \n" -" Vent på valgt(e) prosess(er) (valgt med ID, som kan være prosess-ID eller\n" +" Vent på valgt(e) prosess(er) (valgt med ID, som kan være prosess-ID " +"eller\n" " jobbspesifikasjon), og skriv ut statuskode. Hvis ID ikke er valgt,\n" " venter programmet på alle aktive underprosesser, og avslutter\n" -" med kode null. Hvis ID er en jobbspesifikasjon, venter programmet på alle\n" +" med kode null. Hvis ID er en jobbspesifikasjon, venter programmet på " +"alle\n" " prosesser i kommandokøen for valgt jobb.\n" " \n" " Hvis «-n» er valgt, venter på en enkelt jobb fra listen over IDer,\n" -" eller, hvis ingen IDer er oppgitt skriver programmet ut avslutningsstatus for neste jobb.\n" +" eller, hvis ingen IDer er oppgitt skriver programmet ut " +"avslutningsstatus for neste jobb.\n" " \n" " Hvis «f» er valgt og jobbkontroll er slått på, venter programmet på at\n" " valgt ID skal avslutte i stedet for å vente på statusendring.\n" @@ -4633,29 +4986,42 @@ msgstr "" " bruker tar et ugyldig valg, eller hvis «-n» er oppgitt og \n" " skallet ikke har noen uventede barne-prosesser." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Vent på ferdigstillelse av prosess, og rapporter avslutningsstatus.\n" " \n" -" Venter på hver prosess som er valgt med PID, og rapporterer avsluttende statuskode.\n" -" Hvis PID ikke er valgt, venter kommandoen på alle aktive underprosesser,\n" +" Venter på hver prosess som er valgt med PID, og rapporterer avsluttende " +"statuskode.\n" +" Hvis PID ikke er valgt, venter kommandoen på alle aktive " +"underprosesser,\n" " og avslutter med null-status. PID må være en prosess-ID.\n" " \n" " Avslutningsstatus:\n" " Samme som siste PID. Mislykket hvis PID er ugyldig, eller hvis\n" " bruker tar et ugyldig valg." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4676,7 +5042,7 @@ msgstr "" " Avslutningsstatus:\n" " Samme som sist kjørte kommando." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4706,7 +5072,7 @@ msgstr "" " Avslutningsstatus:\n" " Samme som sist kjørte kommando." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4734,14 +5100,15 @@ msgstr "" " består av et tall som tilsvarer antall ord, endres NAVN slik at det\n" " tilsvarer dette tallet. Hvis linja er tom, vises ORD og ledetekst på\n" " nytt. Hvis programmet møter EOF, avslutter kommandoen. Andre\n" -" verdier fører til at NAVN endres til null. Lest linje lagres i variabelen\n" +" verdier fører til at NAVN endres til null. Lest linje lagres i " +"variabelen\n" " REPLY. KOMMANDOER kjøres etter hvert utvalg frem til programmet\n" " støter på en bruddkommando.\n" " \n" " Avslutningsstatus:\n" " Samme som sist kjørt kommando." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4758,8 +5125,10 @@ msgid "" msgstr "" "Rapporter medgått tid i kommandokø-kjøring.\n" " \n" -" Kjør valgt DATARØR og skriv ut en oppsummering av reell tid, bruker-CPU-tid\n" -" og system-CPU-tid som er medgått ved kjøring av DATARØR idet det avsluttes.\n" +" Kjør valgt DATARØR og skriv ut en oppsummering av reell tid, bruker-CPU-" +"tid\n" +" og system-CPU-tid som er medgått ved kjøring av DATARØR idet det " +"avsluttes.\n" " \n" " Valg:\n" " -p\tkjør tidsoppsummering i gjenbrukbart Posix-format.\n" @@ -4769,7 +5138,7 @@ msgstr "" " Avslutningsstatus:\n" " Samme som statuskoden fra valgt DATARØR." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4787,16 +5156,21 @@ msgstr "" " Avslutningsstatus:\n" " Samme som sist kjørte kommando." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4806,19 +5180,22 @@ msgstr "" " \n" " Kjør lista «if KOMMANDOER». Hvis avslutningsstatus er null, kjøres\n" " «then KOMMANDOER». Ellers kjøres hver «elif KOMMANDOER»-liste\n" -" etter tur. Hvis status er null ved sistnevnte, kjøres tilhørende «then KOMMANDOER»\n" +" etter tur. Hvis status er null ved sistnevnte, kjøres tilhørende «then " +"KOMMANDOER»\n" " og if-kommandoen avslutter. Ellers kjøres evt. lista «else KOMMANDOER».\n" -" Avslutningsstatus for hele betingelsesuttrykket er statuskoden fra sist kjørt kommando,\n" +" Avslutningsstatus for hele betingelsesuttrykket er statuskoden fra sist " +"kjørt kommando,\n" " eller null hvis ingen tilstand er sann.\n" " \n" " Avslutningsstatus:\n" " Samme som sist kjørt kommando." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4832,11 +5209,12 @@ msgstr "" " Avslutningsstatus:\n" " Returnerer statusen til den siste kommandoen som ble kjørt." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4850,7 +5228,7 @@ msgstr "" " Avslutningsstatus:\n" " Returnerer statusen til den siste kommandoen som ble kjørt." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4864,19 +5242,22 @@ msgid "" msgstr "" "Lag medprosess med valgt NAVN.\n" " \n" -" Kjør valgt KOMMANDO synkront, med standard inn- og utdata for kommandoen\n" -" som er tilkoblet via et datarør til fildeskriptorer med indeks 0 og 1 i en tabellvariabel \n" +" Kjør valgt KOMMANDO synkront, med standard inn- og utdata for " +"kommandoen\n" +" som er tilkoblet via et datarør til fildeskriptorer med indeks 0 og 1 i " +"en tabellvariabel \n" " med oppgitt NAVN i kjørende skall.\n" "\v StandardNAVN er «COPROC».\n" " \n" " coproc avslutter med kode 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4885,14 +5266,16 @@ msgid "" msgstr "" "Definer en skallfunksjon.\n" " \n" -" Lag en skallfunksjon med valgt NAVN. NAVN kjører KOMMANDOer i gjeldende skallkontekst\n" -" når det kjøres som en enkel kommando, og argumenter videresendes til funksjonen som\n" +" Lag en skallfunksjon med valgt NAVN. NAVN kjører KOMMANDOer i gjeldende " +"skallkontekst\n" +" når det kjøres som en enkel kommando, og argumenter videresendes til " +"funksjonen som\n" " $1…$n. Funksjonens navn ligger i $FUNCNAME.\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre valgt NAVN er skrivebeskyttet." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4910,7 +5293,7 @@ msgstr "" " Avslutningsstatus:\n" " Samme som sist kjørt kommando." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4928,12 +5311,13 @@ msgstr "" " Tilsvarer argumentet «JOBBSPES» for kommandoen «fg». Gjenoppta\n" " en jobb som venter eller kjører i bakgrunnen. «JOBBSPES» kan\n" " enten være et jobbnavn eller -nummer. Bruk «&» etter JOBBSPES for å\n" -" legge jobben i bakgrunnen, som om jobbspesifikasjonen var et argument for «bg».\n" +" legge jobben i bakgrunnen, som om jobbspesifikasjonen var et argument " +"for «bg».\n" " \n" " Avslutningsstatus:\n" " Samme som statuskoden for gjenopptatt jobb." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4951,13 +5335,16 @@ msgstr "" " Avslutningsstatus:\n" " 1 hvis UTTRYKK blir 0, og ellers 0." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -4983,8 +5370,10 @@ msgstr "" " \n" " ( UTTRYKK )\tViser verdien av UTTRYKK\n" " ! UTTRYKK\t\tPositiv hvis UTTRYKK er usant, ellers negativ\n" -" UTTR1 && UTTR2\tPositiv hvis både UTTR1 og UTTR2 er sant, ellers negativ\n" -" UTTR1 || UTTR2\tPositiv hvis enten UTTR1 eller UTTR2 er sant, ellers negativ\n" +" UTTR1 && UTTR2\tPositiv hvis både UTTR1 og UTTR2 er sant, ellers " +"negativ\n" +" UTTR1 || UTTR2\tPositiv hvis enten UTTR1 eller UTTR2 er sant, ellers " +"negativ\n" " \n" " Ved bruk av «==» og «!=» brukes etterfølgende streng som\n" " et mønster, og programmet utfører mønsterutlikning.\n" @@ -4997,7 +5386,7 @@ msgstr "" " Avslutningsstatus:\n" " 0 eller 1, avhengig av UTTRYKKets verdi." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5057,9 +5446,11 @@ msgstr "" " \t\tfor mapper som er brukt som argumenter for «cd».\n" " GLOBIGNORE\tEn kolondelt liste over mønstre som beskriver filnavn\n" " \t\tsom skal ignoreres av stinavn-utvidelse.\n" -" HISTFILE\tNavn på fil hvor kommandohistorikk for gjeldende bruker er lagret.\n" +" HISTFILE\tNavn på fil hvor kommandohistorikk for gjeldende bruker er " +"lagret.\n" " HISTFILESIZE\tMaksimalt antall linjer denne fila kan inneholde.\n" -" HISTSIZE\tMaksimalt antall historikklinjer et kjørende skall har tilgang til.\n" +" HISTSIZE\tMaksimalt antall historikklinjer et kjørende skall har tilgang " +"til.\n" " HOME\tFullstendig sti til gjeldende brukers hjemmemappe.\n" " HOSTNAME\tNavn på gjeldende vert.\n" " HOSTTYPE\tType prosessor denne versjonen av Bash kjører på.\n" @@ -5085,7 +5476,8 @@ msgstr "" " TIMEFORMAT\tUtdata-format for tidsstatistikk som vises av\n" " \t\tdet reserverte ordet «time».\n" " auto_resume\tEt kommandoord som dukker opp alene på en linje\n" -" \t\tblir kontrollert mot lista over ventende jobber. Hvis kommandoen finnes\n" +" \t\tblir kontrollert mot lista over ventende jobber. Hvis kommandoen " +"finnes\n" " \t\ti lista, flyttes den til forgrunnen.\n" " \t\tVerdien «exact» betyr at kommandoen må være helt lik\n" " \t\tet kommandonavn i lista over ventende jobber.\n" @@ -5099,7 +5491,7 @@ msgstr "" " HISTIGNORE\tEn kolondelt liste over mønstre som bestemmer\n" " \t\thvilke kommandoer som skal lagres i historikklista.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5155,7 +5547,7 @@ msgstr "" " Vellykket, med mindre et ugyldig argument er brukt eller\n" " mappebytte mislykkes." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5184,7 +5576,8 @@ msgstr "" "Fjern mapper fra stabelen.\n" " \n" " Fjern oppføringer fra mappestabelen. Hvis ingen argumenter er gitt,\n" -" fjernes øverste mappe fra stabelen, og tar i bruk ny toppmappe som arbeidsmappe.\n" +" fjernes øverste mappe fra stabelen, og tar i bruk ny toppmappe som " +"arbeidsmappe.\n" " \n" " Valg:\n" " -n\tIkke bytt mappe når mapper fjernes fra stabelen\n" @@ -5195,7 +5588,8 @@ msgstr "" " F.eks.: «popd +0» fjerner første mappe, og «popd +1» mappe nr. 2.\n" " \n" " -N\tFjern N-te mappe (talt fra null til høyre, etter «dirs»).\n" -" F.eks.: «popd -0» fjerner siste mappe, og «popd -1» nest siste mappe.\n" +" F.eks.: «popd -0» fjerner siste mappe, og «popd -1» nest siste " +"mappe.\n" " \n" " Bruk kommandoen «dirs» for å vise mappestabelen.\n" " \n" @@ -5203,7 +5597,7 @@ msgstr "" " Vellykket, med mindre et ugyldig argument er brukt eller\n" " mappebytte mislykkes." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5249,7 +5643,7 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5270,8 +5664,10 @@ msgid "" msgstr "" "Juster og tilbakestill skallvalg.\n" " \n" -" Endre innstilling for hvert VALGNAVN. Hvis ingen valg/argumenter er brukt,\n" -" skriver programmet ut alle oppgitte VALGNAVN og viser hvorvidt de har en verdi.\n" +" Endre innstilling for hvert VALGNAVN. Hvis ingen valg/argumenter er " +"brukt,\n" +" skriver programmet ut alle oppgitte VALGNAVN og viser hvorvidt de har en " +"verdi.\n" " Hvis ingen VALGNAVN er oppgitt, skriver programmet ut alle skallvalg.\n" " \n" " Valg:\n" @@ -5285,7 +5681,8 @@ msgstr "" " Vellykket hvis VALGNAVN er slått på, og mislykket hvis enten bruker \n" " tar et ugyldig valg eller VALGNAVN er slått av." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5293,29 +5690,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Formaterer og skriver ut ARGUMENTER på FORMATets premisser.\n" @@ -5329,30 +5733,39 @@ msgstr "" " - skiftetegn (som konverteres og kopieres til standardutdata), og\n" " - formatspesifikasjoner (som skriver ut påfølgende argument).\n" " \n" -" Printf tolker følgende standard-formatspes. i tillegg til de som står beskrevet i printf(1):\n" +" Printf tolker følgende standard-formatspes. i tillegg til de som " +"står beskrevet i printf(1):\n" " \n" " %b\tutvid omvendt skråstrek-skiftesekvenser i gjeldende argument\n" -" %q\tgi argumentet anførselstegn slik at det kan brukes som skall-inndata\n" -" %Q\tsom %q, men bruk hvilken som helst presisjon på argumentet uten anførselstegn før\n" +" %q\tgi argumentet anførselstegn slik at det kan brukes som skall-" +"inndata\n" +" %Q\tsom %q, men bruk hvilken som helst presisjon på argumentet uten " +"anførselstegn før\n" " \t\tsitering\n" -" %(fmt)T skriv ut «date-time»-streng etter bruk av FMT som formatstreng\n" +" %(fmt)T skriv ut «date-time»-streng etter bruk av FMT som " +"formatstreng\n" " med strftime(3)\n" " \n" -" Formatet gjenbrukes etter nødvendighet for å bruke opp alle argumentene.\n" -" Hvis det finnes færre argumenter enn formatet krever, oppfører overflødige\n" +" Formatet gjenbrukes etter nødvendighet for å bruke opp alle " +"argumentene.\n" +" Hvis det finnes færre argumenter enn formatet krever, oppfører " +"overflødige\n" " formatstrenger seg som om de var 0-verdier eller null-strenger.\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår en\n" " skrive- eller tidelingsfeil." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5366,8 +5779,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5375,11 +5790,13 @@ msgstr "" "Velg hvordan argumenter skal fullføres av Readline.\n" " \n" " Velg hvordan argumenter skal fullføres per NAVN.\n" -" Hvis brukeren ikke tar noen valg, blir gjeldende fullføringsspesifikasjoner\n" +" Hvis brukeren ikke tar noen valg, blir gjeldende " +"fullføringsspesifikasjoner\n" " skrevet ut i et format som egner seg til gjenbruk.\n" " \n" " Valg:\n" -" -p\tskriv ut gjeldende fullføringsoppsett i et gjenbrukbart format (standard)\n" +" -p\tskriv ut gjeldende fullføringsoppsett i et gjenbrukbart format " +"(standard)\n" " -r\tfjern en fullføringsspesifikasjon per NAVN\n" " \t(eller fra alle spesifikasjoner hvis ingen NAVN er valgt)\n" " -D\tbruk fullføringer og handlinger som standard for kommandoer uten\n" @@ -5394,13 +5811,19 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5414,13 +5837,16 @@ msgstr "" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5444,8 +5870,10 @@ msgid "" msgstr "" "Endre eller vis fullføringsvalg.\n" " \n" -" Endre fullføringsvalg per NAVN, eller kjørende fullføringsprosess hvis ingen\n" -" NAVN er valgt. Hvis ingen VALG er brukt, skriv enten ut fullføringsvalg per NAVN,\n" +" Endre fullføringsvalg per NAVN, eller kjørende fullføringsprosess hvis " +"ingen\n" +" NAVN er valgt. Hvis ingen VALG er brukt, skriv enten ut fullføringsvalg " +"per NAVN,\n" " eller gjeldende fullføringsoppsett.\n" " \n" " Valg:\n" @@ -5458,7 +5886,8 @@ msgstr "" " \n" " Argumenter:\n" " \n" -" Hvert NAVN henviser til en kommando som må ha en fullføringsspesifikasjon\n" +" Hvert NAVN henviser til en kommando som må ha en " +"fullføringsspesifikasjon\n" " definert med den innebyde kommandoen «complete». Hvis ingen NAVN\n" " er valgt, må compopt brukes av en funksjon som genererer fullføringer.\n" " Valgene for den aktuelle fullføringsgeneratoren blir i så fall endret.\n" @@ -5467,21 +5896,26 @@ msgstr "" " Vellykket, med mindre bruker tar et ugyldig valg eller NAVN\n" " mangler fullføringsoppsett." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5494,43 +5928,54 @@ 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 "" "Legg linjer fra standard inndata i en indeksert tabellvariabel.\n" " \n" -" Legg linjer fra standard inndata i indeksert tabellvariabel TABELL, eller\n" +" Legg linjer fra standard inndata i indeksert tabellvariabel TABELL, " +"eller\n" " fra fildeskriptor FD ved bruk av «-u». Variabelen MAPFILE er\n" " standard TABELL.\n" " \n" " Valg:\n" -" -d skill\tBruk SKILLetegn til å avslutte linjer (i stedet for linjeskift)\n" -" -n antall\tIkke kopier flere enn valgt ANTALL linjer. Hvis ANTALL er 0, kopieres alle linjer.\n" -" -O oppr\tTildel til TABELL ved indeks-OPPRinnelse. Standard indeks er 0.\n" +" -d skill\tBruk SKILLetegn til å avslutte linjer (i stedet for " +"linjeskift)\n" +" -n antall\tIkke kopier flere enn valgt ANTALL linjer. Hvis ANTALL er " +"0, kopieres alle linjer.\n" +" -O oppr\tTildel til TABELL ved indeks-OPPRinnelse. Standard indeks er " +"0.\n" " -s antall \tForkast valgt ANTALL linjer i starten.\n" " -t\t\tFjern etterfølgende linjeskift fra hver lest linje.\n" -" -u fd\t\tLes linjer fra fildeskriptor FD i stedet for standard inndata.\n" -" -C tilbakekall\tVurder TILBAKEKALL hver gang valgt ANTALL linjer er lest.\n" -" -c antall\tVelg antall linjer som skal leses mellom hvert TILBAKEKALL.\n" +" -u fd\t\tLes linjer fra fildeskriptor FD i stedet for standard " +"inndata.\n" +" -C tilbakekall\tVurder TILBAKEKALL hver gang valgt ANTALL linjer er " +"lest.\n" +" -c antall\tVelg antall linjer som skal leses mellom hvert " +"TILBAKEKALL.\n" " \n" " Argumenter:\n" " ARRAY\t\tTabellvariabel-navn som skal brukes i fildata.\n" " \n" " Hvis «-C» er valgt men ikke «-c», brukes standardantallet 5000. Når\n" -" TILBAKEKALL vurderes, argumenteres det i tillegg med indeks av neste tabellelement\n" +" TILBAKEKALL vurderes, argumenteres det i tillegg med indeks av neste " +"tabellelement\n" " samt linjenummeret som skal tildeles aktuelt element.\n" " \n" -" Hvis ingen eksplisitt opprinnelse er gitt, tømmes TABELL før den får tildelt noe.\n" +" Hvis ingen eksplisitt opprinnelse er gitt, tømmes TABELL før den får " +"tildelt noe.\n" " \n" " Avslutningsstatus:\n" " Vellykket, med mindre bruker tar et ugyldig valg eller TABELL enten er\n" " skrivebeskyttet eller en ikke-indeksert tabell." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5540,6 +5985,32 @@ msgstr "" " \n" " Dette er synonymt med «mapfile»." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Vis konteksten for gjeldende underrutine-kall.\n" +#~ " Uten EXPR, returnerer \"$line $filnavn\". Med EXPR, returnerer\n" +#~ " \"$line $subrutine $filename denne ekstra informasjonen kan brukes " +#~ "til å\n" +#~ " gi en stabelsporing.\n" +#~ " \n" +#~ " Verdien til EXPR indikerer hvor mange anropsrammer som skal gå " +#~ "tilbake før\n" +#~ " nåværende; topprammen er ramme 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "advarsel: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: ugyldig nøkkel for assosiativ tabell" diff --git a/po/nl.gmo b/po/nl.gmo index 86de738c33c04f42f861ea5bc5dbb6f617999e8f..2b079869d7ac2821018a98b4636af4af8283adf3 100644 GIT binary patch delta 12620 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 WdHp-v07u?;Hixrg-;cIY`u_m^#>xi( delta 52051 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 J4oDR2{|lLlq8k7J diff --git a/po/nl.po b/po/nl.po index f80f24709..87917ea0b 100644 --- a/po/nl.po +++ b/po/nl.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-06-23 10:18+0200\n" "Last-Translator: Benno Schulenberg <vertaling@coevern.nl>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" @@ -37,123 +37,125 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "ongeldige array-index" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: 'nameref'-eigenschap wordt verwijderd" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: kan geïndexeerd array niet omzetten naar associatief array" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: niet-numerieke index is niet mogelijk" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: een index is nodig bij toekenning aan associatief array" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "Kan %s niet aanmaken: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command(): kan voor opdracht geen toetsenkaart vinden" +msgstr "" +"bash_execute_unix_command(): kan voor opdracht geen toetsenkaart vinden" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: eerste teken dat geen witruimte is is niet '\"'" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "geen sluit-'%c' in %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: ontbrekend scheidingsteken (dubbele punt)" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "Kan '%s' niet losmaken in toetsenkaart" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "accoladevervanging: onvoldoende geheugen beschikbaar voor %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "accoladevervanging: onvoldoende geheugen beschikbaar voor %u elementen" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "accoladevervanging: onvoldoende geheugen beschikbaar voor '%s'" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "'%s': ongeldige naam voor alias" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "regelbewerking is niet ingeschakeld" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "'%s': ongeldige naam voor toetsenkaart" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "Kan %s niet lezen: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "'%s': onbekende functienaam" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s is aan geen enkele toets gebonden\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s kan worden aangeroepen via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "Kan %s niet losmaken" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "herhalingsaantal" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "heeft alleen betekenis in een 'for'-, 'while'- of 'until'-lus" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -162,360 +164,376 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "De context van de aanroep van de huidige functie tonen.\n" "\n" " Zonder argument produceert het \"$regelnummer $bestandsnaam\"; met\n" " argument \"$regelnummer $functienaam $bestandsnaam\". Deze tweede\n" -" vorm kan gebruikt worden om een 'stack trace' te produceren.\n" +" vorm kan gebruikt worden om een 'stack trace' te produceren. De\n" +" waarde van het argument geeft aan hoeveel frames er teruggegaan\n" +" moet worden; het huidige frame heeft nummer 0.\n" "\n" -" De waarde van het argument geeft aan hoeveel frames er teruggegaan\n" -" moet worden vanaf de huidige; het bovenste frame heeft nummer 0." +" De afsluitwaarde is 0, tenzij de shell momenteel geen functie uitvoert\n" +" of EXPRESSIE ongeldig is." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME is niet gedefinieerd" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "te veel argumenten" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "null-map" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD is niet gedefinieerd" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "regel %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "waarschuwing: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: Gebruik: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: optie vereist een argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: vereist een numeriek argument" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: niet gevonden" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: ongeldige optie" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: ongeldige optienaam" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "'%s': is geen geldige naam" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "ongeldig octaal getal" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "ongeldig hexadecimaal getal" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "ongeldig getal" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: ongeldige signaalaanduiding" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "'%s': is geen PID en geen geldige taakaanduiding" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: is een alleen-lezen variabele" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: kan niet toewijzen" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s valt buiten bereik" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s valt buiten bereik" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: taak bestaat niet" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: geen taakbesturing" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "geen taakbesturing" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: beperkte modus" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "beperkte modus" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: is geen ingebouwde opdracht van de shell" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "schrijffout: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "fout tijdens instellen van terminaleigenschappen: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "fout tijdens verkrijgen van terminaleigenschappen: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: fout tijdens bepalen van huidige map: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: taakaanduiding is niet eenduidig" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "hulp is niet beschikbaar in deze versie" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: is geen geïndexeerd array" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "Kan '%s' niet verwijderen: %s is alleen-lezen" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "Kan '%s' niet verwijderen" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: ongeldige actienaam" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: is geen completerings-aanduiding" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "waarschuwing: optie -F functioneert mogelijk niet zoals verwacht" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "waarschuwing: optie -C functioneert mogelijk niet zoals verwacht" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "er wordt momenteel geen completeringsfunctie uitgevoerd" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "kan alleen worden gebruikt binnen een functie" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "'-f' kan niet gebruikt worden om een functie te definiëren" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: is een alleen-lezen functie" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: verwijzingsvariabele mag geen array zijn" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: zelfverwijzing door naamsverwijzingsvariabele is niet toegestaan" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: circulaire naamsverwijzing" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "'%s': ongeldige variabelenaam voor naamsverwijzing" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: kan array-variabelen niet op deze manier verwijderen" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: kan associatief array niet omzetten naar geïndexeerd array" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: aangehaalde samengesteld-array-toekenning is verouderd" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynamisch-laden is niet beschikbaar" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "kan gedeeld object %s niet openen: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "kan %s niet vinden in gedeeld object %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: dynamische ingebouwde functie is reeds geladen" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "laadfunctie voor %s geeft foutcode (%d): is niet geladen" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: is niet dynamisch geladen" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "Kan %s niet verwijderen: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: is een map" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: is geen normaal bestand" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: bestand is te groot" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: kan binair bestand niet uitvoeren" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "Kan %s niet uitvoeren: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "uitgelogd\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "geen login-shell; gebruik 'exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Er zijn nog gepauzeerde taken.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Er zijn nog draaiende taken.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "geen opdracht gevonden" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "geschiedenisaanduiding" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "Kan tijdelijk bestand '%s' niet openen: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "huidige" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "taak %d is gestart zonder taakbesturing" @@ -530,11 +548,11 @@ msgstr "%s: ongeldige optie -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: optie vereist een argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashen is uitgeschakeld" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: de hash-tabel is leeg\n" @@ -560,17 +578,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." msgstr "" "Er is geen hulptekst voor '%s'.\n" "Probeer 'help help' of 'man -k %s' of 'info %s'." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "Kan %s niet openen: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -584,27 +603,39 @@ msgstr "" "Hieronder staan alle interne shell-opdrachten opgesomd. Typ 'help' om dit\n" "overzicht opnieuw te zien. Typ 'help naam' voor meer informatie over de\n" "opdracht met die naam. Typ 'info bash' voor gedetailleerde informatie over\n" -"de gehele shell. En gebruik 'man -k ...' of 'info ...' voor meer informatie\n" +"de gehele shell. En gebruik 'man -k ...' of 'info ...' voor meer " +"informatie\n" "over andere opdrachten.\n" "\n" -"(Een sterretje (*) naast een naam betekent dat de functie uitgeschakeld is.)\n" +"(Een sterretje (*) naast een naam betekent dat de functie uitgeschakeld " +"is.)\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "slechts één van '-a', '-n', '-r' of '-w' is mogelijk" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "geschiedenispositie" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "lege naam van array-variabele" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: lege parameter, of niet ingesteld" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: ongeldig tijdsstempel" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: geschiedenisexpansie is mislukt" @@ -618,115 +649,115 @@ msgstr "%s: 'inlib' is mislukt" msgid "no other options allowed with `-x'" msgstr "bij '-x' zijn geen andere opties toegestaan" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumenten moeten proces-IDs of taak-IDs zijn" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Onbekende fout" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "uitdrukking werd verwacht" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: is geen geïndexeerd array" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: ongeldige aanduiding van bestandsdescriptor" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: ongeldige bestandsdescriptor: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: ongeldig regelaantal" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: ongeldig array-begin" # Quantum is een hoeveelheid regels, een getal. # Callback is de aan te roepen functie, maar onnodig in de vertaling. -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: ongeldige hoeveelheid" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "lege naam van array-variabele" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "ondersteuning van arrayvariabelen is vereist" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "'%s': ontbrekend opmaakteken" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "'%c': ongeldige aanduiding van tijdsopmaak" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "'%c': ongeldig opmaakteken" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "waarschuwing: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "probleem bij ontleden van opmaak: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "ontbrekend hexadecimaal cijfer bij \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "ontbrekend Unicode-cijfer bij \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "geen andere map" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: ongeldig argument" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<geen huidige map>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "mappenstapel is leeg" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "mappenstapelindex" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -741,10 +772,12 @@ 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 "" "Toont de huidige lijst van onthouden mappen. Mappen worden aan deze\n" @@ -764,7 +797,7 @@ msgstr "" " -N Toont het N-de item, tellend vanaf rechts, van de lijst getoond\n" " door 'dirs' wanneer opgeroepen zonder opties, beginnend bij nul." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -806,7 +839,7 @@ msgstr "" "\n" " De opdracht 'dirs' toont de huidige mappenstapel." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -844,319 +877,333 @@ msgstr "" "\n" " De opdracht 'dirs' toont de huidige mappenstapel." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: ongeldige aanduiding van tijdslimiet" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "leesfout: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "kan alleen een 'return' doen uit een functie of een uit script aangeroepen met 'source'" +msgstr "" +"kan alleen een 'return' doen uit een functie of een uit script aangeroepen " +"met 'source'" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "kan niet tegelijk een functie en een variabele verwijderen" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: is geen array-variabele" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: is geen functie" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "Kan '%s' niet exporteren" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "shift-aantal" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "kan shell-opties niet tegelijk inschakelen en uitschakelen" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: ongeldige shell-optienaam" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "vereist een bestandsnaam als argument" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: bestand niet gevonden" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "kan niet pauzeren" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "kan een inlog-shell niet pauzeren" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s is een alias voor '%s'\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s is een shell-sleutelwoord\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s is een functie\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s is een speciale ingebouwde shell-functie\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s is een functie\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s is een ingebouwde shell-functie\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s is %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s is gehasht (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: ongeldige limietwaarde" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "'%c': ongeldige opdracht" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: kan de limiet niet bepalen: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limiet" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: kan de limiet niet wijzigen: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "octaal getal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "'%c': ongeldige operator in symbolische modus" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "'%c': ongeldig teken in symbolische modus" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " regel " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "laatste opdracht: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Afbreken..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "informatie: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "DEBUG-waarschuwing: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "onbekende opdrachtfout" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "ongeldig opdrachttype" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "ongeldige verbinder" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "ongeldige sprong" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: ongebonden variabele" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\awachten op invoer duurde te lang -- automatisch afgemeld\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "kan standaardinvoer niet omleiden vanaf /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: '%c': ongeldig opmaakteken" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc(): coproc [%d:%s] bestaat nog steeds" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "pijpfout" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: maximum 'eval'-nestingsniveau is overschreden (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: maximum 'source'-nestingsniveau is overschreden (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: maximum functie-nestingsniveau is overschreden (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: beperkte modus: '/' in opdrachtnamen is niet toegestaan" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: opdracht niet gevonden" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: ongeldige interpreter" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: kan niet uitvoeren: vereist bestand is niet gevonden" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: ongeldige interpreter" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: kan binair bestand %s niet uitvoeren" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "'%s' is een speciale ingebouwde shell-functie" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "kan bestandsdescriptor %d niet dupliceren naar bestandsdescriptor %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "recursieniveau van expressies is overschreden" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "recursiestapel-onderloop" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "syntaxfout in expressie" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "poging tot toewijzing aan een niet-variabele" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "syntaxfout in toewijzing aan variabele" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "deling door nul" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "**interne fout**: onjuist symbool in toewijzingsexpressie" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "':' werd verwacht voor een voorwaardelijke expressie" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exponent is kleiner dan 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "naam verwacht na pre-increment of pre-decrement" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "ontbrekend ')'" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "syntaxfout: operator verwacht" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "syntaxfout: ongeldige rekenkundige operator" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (het onjuiste symbool is \"%s\")" @@ -1173,7 +1220,7 @@ msgstr "ongeldige integerconstante" msgid "value too great for base" msgstr "waarde is te groot voor basis" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: expressiefout\n" @@ -1182,46 +1229,54 @@ msgstr "%s: expressiefout\n" msgid "getcwd: cannot access parent directories" msgstr "getwd(): kan geen geen toegang verkrijgen tot bovenliggende mappen" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "'%s' is een speciale ingebouwde shell-functie" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "kan 'nodelay'-modus niet uitschakelen voor bestandsdescriptor %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "kan geen nieuwe bestandsdescriptor reserveren voor bash-invoer vanuit bestandsdescriptor %d" +msgstr "" +"kan geen nieuwe bestandsdescriptor reserveren voor bash-invoer vanuit " +"bestandsdescriptor %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" -msgstr "check_bash_input(): buffer bestaat al voor nieuwe bestandsdescriptor %d" +msgstr "" +"check_bash_input(): buffer bestaat al voor nieuwe bestandsdescriptor %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline(): procesgroep van pijp" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LUS: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LUS: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "afgesplitst PID %d hoort bij draaiende taak %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "verwijderen van gepauzeerde taak %d met procesgroep %ld..." -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process(): PID %5ld (%s) staat gemarkeerd als nog actief" @@ -1231,137 +1286,139 @@ msgstr "add_process(): PID %5ld (%s) staat gemarkeerd als nog actief" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid(): PID %ld bestaat niet" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signaal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Klaar" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Gepauzeerd" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Gepauzeerd(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Wordt uitgevoerd" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Klaar(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Exit %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Onbekende afsluitwaarde" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(geheugendump gemaakt) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (werkmap: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "instellen van procesgroep %2$ld van dochter %1$ld" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait(): PID %ld is geen dochterproces van deze shell" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for(): proces %ld is nergens geregistreerd" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job(): taak %d is gepauzeerd" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: geen lopende taken" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: taak is afgesloten" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: taak %d draait al op de achtergrond" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" -msgstr "waitchld(): WNOHANG wordt ingeschakeld om een onbegrensde blokkering te vermijden" +msgstr "" +"waitchld(): WNOHANG wordt ingeschakeld om een onbegrensde blokkering te " +"vermijden" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: regel %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (geheugendump gemaakt)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(werkmap is nu: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp() is mislukt" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: geen taakbesturing in de achtergrond" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: lijnprotocol" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid()" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "kan procesgroep (%d) van terminal niet instellen" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "er is geen taakbesturing in deze shell" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc(): controletest is mislukt: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1370,376 +1427,395 @@ msgstr "" "\r\n" "malloc(): %s:%d: controletest is mislukt\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "onbekend" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc(): een pointer op de lijst van vrije blokken is overschreven" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free(): aangeroepen met als argument een blok dat al vrijgegeven is" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free(): aangeroepen met als argument een ongebruikt blok" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free(): onderloop: 'mh_nbytes' valt buiten bereik" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free(): onderloop: 'magic8' is beschadigd" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free(): blokgroottes van begin en eind zijn verschillend" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc(): aangeroepen met als argument een ongebruikt blok" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc(): onderloop: 'mh_nbytes' valt buiten bereik" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc(): onderloop: 'magic8' is beschadigd" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc(): blokgroottes van begin en eind zijn verschillend" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc(): reserveringstabel is vol??\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc(): %p staat al als gereserveerd in tabel??\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free(): %p staat al als vrij in tabel??\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "ongeldige basis" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: onbekende host" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: ongeldige service" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: ongeldige aanduiding van netwerkpad" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "netwerkoperaties worden niet ondersteund" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale(): LC_ALL: kan niet van taalregio veranderen (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale(): LC_ALL: kan niet van taalregio veranderen (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale(): %s: kan niet van taalregio veranderen (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale(): %s: kan niet van taalregio veranderen (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "U hebt post in $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "U hebt nieuwe post in $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "De post in %s is gelezen.\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "syntaxfout: een rekenkundige uitdrukking is vereist" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "syntaxfout: onverwachte ';'" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "syntaxfout: '((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document(): ongeldig instructietype %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "regel %d van \"hier\"-document eindigt met einde van bestand (verwachtte '%s')" +msgstr "" +"regel %d van \"hier\"-document eindigt met einde van bestand (verwachtte " +"'%s')" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection(): omleidingsinstructie '%d' valt buiten bereik" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc(): lengte van invoerregel (%zu) overschrijdt SIZE_MAX (%lu): regel is afgekapt" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc(): lengte van invoerregel (%zu) overschrijdt SIZE_MAX (%lu): " +"regel is afgekapt" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "schrijffout: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "maximum aantal \"hier\"-documenten is overschreden" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "onverwacht bestandseinde tijdens zoeken naar bijpassende '%c'" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "onverwacht bestandseinde tijdens zoeken naar ']]'" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "syntaxfout in conditionele expressie: onverwacht symbool '%s'" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "syntaxfout in conditionele expressie" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "onverwacht symbool '%s'; ')' werd verwacht" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "')' werd verwacht" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "onverwacht argument '%s' bij eenzijdige conditionele operator" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "onverwacht argument bij eenzijdige conditionele operator" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" -msgstr "onverwacht symbool '%s'; tweezijdige conditionele operator werd verwacht" +msgstr "" +"onverwacht symbool '%s'; tweezijdige conditionele operator werd verwacht" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "tweezijdige conditionele operator werd verwacht" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "onverwacht argument '%s' bij tweezijdige conditionele operator" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "onverwacht argument bij tweezijdige conditionele operator" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "onverwacht symbool '%c' in conditionele opdracht" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "onverwacht symbool '%s' in conditionele opdracht" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "onverwacht symbool %d in conditionele opdracht" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "syntaxfout nabij onverwacht symbool '%s'" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "syntaxfout nabij '%s'" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "syntaxfout: onverwacht bestandseinde" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "syntaxfout: onverwacht bestandseinde" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "syntaxfout" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Gebruik \"%s\" om de shell te verlaten.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "onverwacht bestandseinde tijdens zoeken naar bijpassende ')'" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion(): functie '%s' niet gevonden" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion(): %s: mogelijke herprobeerlus" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert(): %s: lege COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command(): ongeldige verbinder '%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set(): %d: ongeldige bestandsdescriptor" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set(): bestandspointer is NIL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" -msgstr "xtrace-bestandsdescriptor (%d) != bestandsnummer van xtrace-bestandspointer (%d)" +msgstr "" +"xtrace-bestandsdescriptor (%d) != bestandsnummer van xtrace-bestandspointer " +"(%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf(): '%c': ongeldig opmaakteken" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "bestandsdescriptor valt buiten bereik" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: omleiding is niet eenduidig" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: kan bestaand bestand niet overschrijven" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: beperkte modus: omleiden van uitvoer is niet toegestaan" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "kan geen tijdelijk bestand maken voor \"hier\"-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: kan bestandsdescriptor niet toewijzen aan variabele" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port is niet mogelijk zonder netwerk" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "omleidingsfout: kan bestandsdescriptor niet dupliceren" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "Kan /tmp niet vinden; maak deze aan!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp dient een geldige mapnaam te zijn" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "pretty-printing-modus wordt genegeerd in interactieve shells" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: ongeldige optie" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "kan UID niet op %d instellen; effectieve UID is %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "kan GID niet op %d instellen; effectieve GID is %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "kan debugger niet starten; debugging-modus is uitgeschakeld" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: is een map" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Ik heb geen naam!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versie %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1748,49 +1824,51 @@ msgstr "" "Gebruik: %s [opties]\n" " %s [opties] scriptbestand...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Lange opties:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Korte opties:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD, of -c OPDRACHT, of -O SHOPT-OPTIE (enkel bij aanroep)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s, of -o optie (veranderbaar via 'set')\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "Typ '%s -c \"help set\"' voor meer informatie over shell-opties.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "Typ '%s -c help' voor meer informatie over ingebouwde shell-functies.\n" +msgstr "" +"Typ '%s -c help' voor meer informatie over ingebouwde shell-functies.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Gebruik de opdracht 'bashbug' om fouten in bash te rapporteren.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Webpagina van 'bash': <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "Algemene hulp bij gebruik van GNU-software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Algemene hulp bij gebruik van GNU-software: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask(): %d: ongeldige operatie" @@ -1963,284 +2041,312 @@ msgstr "Verzoek om informatie" msgid "Unknown Signal #%d" msgstr "Onbekend signaal #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "ongeldige vervanging: geen sluit-'%s' in %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: kan geen lijst toewijzen aan een array-element" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "kan geen pijp maken voor procesvervanging" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "kan geen dochterproces maken voor procesvervanging" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "kan pijp genaamd %s niet openen om te lezen" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "kan pijp genaamd %s niet openen om te schrijven" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "kan pijp genaamd %s niet dupliceren als bestandsdescriptor %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "opdrachtsubstitutie: null-byte in invoer is genegeerd" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" +"command_substitute(): kan pijp niet dupliceren als bestandsdescriptor 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "kan geen pijp maken voor opdrachtvervanging" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "kan geen dochterproces maken voor opdrachtvervanging" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" -msgstr "command_substitute(): kan pijp niet dupliceren als bestandsdescriptor 1" +msgstr "" +"command_substitute(): kan pijp niet dupliceren als bestandsdescriptor 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: ongeldige variabelenaam voor naamsverwijzing" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: ongeldige indirecte expansie" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: ongeldige variabelenaam" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parameter is niet ingesteld" +msgid "%s: bad substitution" +msgstr "%s: ongeldige vervanging" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: lege parameter, of niet ingesteld" +msgid "%s: parameter not set" +msgstr "%s: parameter is niet ingesteld" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: resultaat van deeltekenreeks is kleiner dan nul" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: ongeldige vervanging" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: kan niet op deze manier toewijzen" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "toekomstige versies van de shell zullen dit als een rekenkundige vervanging evalueren" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"toekomstige versies van de shell zullen dit als een rekenkundige vervanging " +"evalueren" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "ongeldige vervanging: geen afsluitende '`' in %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "geen overeenkomst: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argument werd verwacht" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: een geheel-getaluitdrukking werd verwacht" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "')' werd verwacht" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "')' werd verwacht; %s gevonden" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "tweezijdige operator werd verwacht, %s gevonden" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "eenzijdige operator werd verwacht, %s gevonden" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "ontbrekende ']'" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "syntaxfout: onverwachte '%s'" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "ongeldig signaalnummer" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: maximum 'trap-handler'-niveau is overschreden (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps(): ongeldige waarde in trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: signaalverwerker is SIG_DFL, herzenden van %d (%s) aan mezelf..." +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: signaalverwerker is SIG_DFL, herzenden van %d (%s) aan " +"mezelf..." -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler(): ongeldig signaal %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "fout tijdens importeren van functiedefinitie voor '%s'" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "shell-niveau is te hoog (%d); teruggezet op 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "maximum aantal \"hier\"-documenten is overschreden" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" -msgstr "make_local_variable(): er is geen functiecontext in huidige geldigheidsbereik" +msgstr "" +"make_local_variable(): er is geen functiecontext in huidige geldigheidsbereik" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: aan variabele mag geen waarde toegewezen worden" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: kan geen waarde overerven van incompatibel type" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: toekenning van geheel getal aan naamsverwijzing" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" -msgstr "all_local_variables(): er is geen functiecontext in huidige geldigheidsbereik" +msgstr "" +"all_local_variables(): er is geen functiecontext in huidige geldigheidsbereik" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "*** %s heeft lege export-tekenreeks" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "*** ongeldig teken '%d' in export-tekenreeks voor %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "*** geen '=' in export-tekenreeks voor %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context(): top van 'shell_variables' is geen functiecontext" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context(): er is geen 'global_variables'-context" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope(): top van 'shell_variables' is geen tijdelijk geldigheidsbereik" +msgstr "" +"pop_scope(): top van 'shell_variables' is geen tijdelijk geldigheidsbereik" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: Kan %s niet openen als BESTAND" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: ongeldige waarde %s voor 'trace'-bestandsdescriptor" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: compatibiliteitswaarde valt buiten bereik" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" msgstr "" "De licentie is GPLv3+: GNU GPL versie 3 of later.\n" "Zie http://gnu.org/licenses/gpl.html voor de volledige tekst.\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versie %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "Dit is vrije software; u mag het vrijelijk wijzigen en verder verspreiden." +msgstr "" +"Dit is vrije software; u mag het vrijelijk wijzigen en verder verspreiden." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Er is GEEN GARANTIE, voor zover de wet dit toestaat." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: kan geen %lu bytes reserveren (%lu bytes gereserveerd)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: kan geen %lu bytes reserveren" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: kan geen %lu bytes reserveren (%lu bytes gereserveerd)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: kan geen %lu bytes reserveren" @@ -2254,7 +2360,9 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] NAAM [NAAM...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" msgstr "" "bind [-lpvsPSVX] [-m TOETSENKAART] [-f BESTANDSNAAM] [-q NAAM] [-u NAAM]\n" " [-r TOETSENREEKS] [-x TOETSENREEKS:SHELL-OPDRACHT]\n" @@ -2279,7 +2387,8 @@ msgstr "caller [EXPRESSIE]" # XXX FIXME is this right? # can -@ only combine with -P, not with -L? #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|(-P [-e])] [-@] [MAP]" #: builtins.c:68 @@ -2291,12 +2400,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] OPDRACHT [ARGUMENT...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [NAAM[=WAARDE] ...] of declare -p [-aAfFilnrtux] [NAAM ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [NAAM[=WAARDE] ...] of declare -p [-aAfFilnrtux] " +"[NAAM ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] NAAM[=WAARDE] ... of typeset -p [-aAfFilnrtux] [NAAM ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] NAAM[=WAARDE] ... of typeset -p [-aAfFilnrtux] " +"[NAAM ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2357,19 +2474,26 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [PATROON...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d POSITIE] [N] of: history -anrw [BESTANDSNAAM] of: history -ps ARGUMENT..." +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d POSITIE] [N] of: history -anrw [BESTANDSNAAM] of: " +"history -ps ARGUMENT..." #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" -msgstr "jobs [-lnprs] [TAAKAANDUIDING...] of: jobs -x OPDRACHT [ARGUMENT...]" +msgstr "" +"jobs [-lnprs] [TAAKAANDUIDING...] of: jobs -x OPDRACHT [ARGUMENT...]" #: builtins.c:131 msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [TAAKAANDUIDING... | PID...] " #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" msgstr "" "kill [-s SIGNAALNAAM | -n SIGNAALNUMMER | -SIGNAAL] PID | TAAKAANDUIDING\n" " of: kill -l [SIGNAAL]" @@ -2379,7 +2503,10 @@ msgid "let arg [arg ...]" msgstr "let ARGUMENT..." #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a ARRAY] [-d SCHEIDINGSTEKEN] [-i TEKST] [-p PROMPT]\n" " [-n AANTAL_TEKENS] [-N AANTAL_TEKENS] [-t TIJDSLIMIET]\n" @@ -2430,7 +2557,8 @@ msgid "[ arg... ]" msgstr "[ EXPRESSIE... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[ARGUMENT] SIGNAALAANDUIDING...]" #: builtins.c:168 @@ -2454,116 +2582,137 @@ msgid "wait [pid ...]" msgstr "wait [-n] [PID ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAAM [in WOORDEN...] ; do OPDRACHTEN; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( EXPR1; EXPR2; EXPR3 )); do OPDRACHTEN; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAAM [in WOORDEN... ;] do OPDRACHTEN; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] PIJPLIJN" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case WOORD in [PATROON [| PATROON]...) OPDRACHTEN ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if OPDRACHTEN; then OPDRACHTEN; [elif OPDRACHTEN; then OPDRACHTEN;]... [else OPDRACHTEN;] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if OPDRACHTEN; then OPDRACHTEN; [elif OPDRACHTEN; then OPDRACHTEN;]... [else " +"OPDRACHTEN;] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while OPDRACHTEN; do OPDRACHTEN2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until OPDRACHTEN; do OPDRACHTEN2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAAM] OPDRACHT [OMLEIDINGEN]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function NAAM { OPDRACHTEN ; } of: NAAM () { OPDRACHTEN ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ OPDRACHTEN ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "TAAKAANDUIDING [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( EXPRESSIE ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ EXPRESSIE ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "var - namen en betekenissen van enkele shell-variabelen" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | MAP]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [OPTIENAAM...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v VARIABELE] OPMAAK [ARGUMENTEN]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" msgstr "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o OPTIE] [-A ACTIE] [-C OPDRACHT]\n" " [-F FUNCTIE] [-G PATROON] [-P PREFIX] [-S SUFFIX]\n" " [-W WOORDENLIJST] [-X FILTERPATROON] [NAAM...]" -#: builtins.c:235 -msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o OPTIE] [-A ACTIE] [-C OPDRACHT] [-F FUNCTIE]\n" " [-G PATROON] [-P PREFIX] [-S SUFFIX]\n" " [-W WOORDENLIJST] [-X FILTERPATROON] [WOORD]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o OPTIE] [-DEI] [NAAM...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +#: builtins.c:244 +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" msgstr "" "mapfile [-d SCHEIDINGSTEKEN] [-n AANTAL] [-O BEGIN] [-s AANTAL] [-t]\n" -" [-u BESTANDSDESCRIPTOR] [-C FUNCTIE] [-c HOEVEELHEID] [ARRAY]" +" [-u BESTANDSDESCRIPTOR] [-C FUNCTIE] [-c HOEVEELHEID] " +"[ARRAY]" -#: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" msgstr "" "readarray [-d SCHEIDINGSTEKEN] [-n AANTAL] [-O BEGIN] [-s AANTAL] [-t]\n" -" [-u BESTANDSDESCRIPTOR] [-C FUNCTIE] [-c HOEVEELHEID] [ARRAY]" +" [-u BESTANDSDESCRIPTOR] [-C FUNCTIE] [-c HOEVEELHEID] " +"[ARRAY]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2578,7 +2727,8 @@ 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 "" "Aliassen definiëren of tonen.\n" @@ -2586,14 +2736,17 @@ msgstr "" " Zonder argumenten, of met optie '-p', toont 'alias' op standaarduitvoer\n" " de huidige lijst van aliassen in de vorm: alias NAAM='VERVANGING'.\n" " Met argumenten, wordt er een alias gedefinieerd voor elke NAAM waarvoor\n" -" een VERVANGING gegeven is. Als de VERVANGING eindigt op een spatie, dan\n" -" wordt bij aliasexpansie ook van het nakomende woord gecontroleerd of het\n" +" een VERVANGING gegeven is. Als de VERVANGING eindigt op een spatie, " +"dan\n" +" wordt bij aliasexpansie ook van het nakomende woord gecontroleerd of " +"het\n" " een alias is.\n" "\n" -" De afsluitwaarde is 0, tenzij er een NAAM gegeven is waarvoor geen alias\n" +" De afsluitwaarde is 0, tenzij er een NAAM gegeven is waarvoor geen " +"alias\n" " gedefinieerd is." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2608,7 +2761,7 @@ msgstr "" "\n" " De afsluitwaarde is 0, tenzij NAAM geen bestaande alias is." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2620,25 +2773,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2647,8 +2805,10 @@ msgstr "" "Toetsbindingen en variabelen van 'readline' instellen.\n" "\n" " Verbindt een toetsenreeks aan een 'readline'-functie of aan een macro,\n" -" of stelt een 'readline'-variabele in. De syntax van argumenten die geen\n" -" opties zijn is gelijkaardig aan die voor ~/.inputrc, maar zij dienen één\n" +" of stelt een 'readline'-variabele in. De syntax van argumenten die " +"geen\n" +" opties zijn is gelijkaardig aan die voor ~/.inputrc, maar zij dienen " +"één\n" " geheel te zijn, bijvoorbeeld: bind '\"\\C-x\\C-r\": re-read-init-file'.\n" "\n" " Opties:\n" @@ -2659,7 +2819,8 @@ msgstr "" " 'emacs-standard', 'emacs-meta', 'emacs-ctlx',\n" " 'vi', 'vi-move', 'vi-insert' en 'vi-command'\n" " -P functienamen en hun bindingen tonen\n" -" -p functienamen en hun bindingen tonen, in een vorm die\n" +" -p functienamen en hun bindingen tonen, in een vorm " +"die\n" " hergebruikt kan worden als invoer\n" " -r TOETSENREEKS de binding voor deze toetsenreeks verwijderen\n" " -q FUNCTIENAAM tonen welke toetsen deze functie aanroepen\n" @@ -2668,17 +2829,22 @@ msgstr "" " vorm die hergebruikt kan worden als invoer\n" " -u FUNCTIENAAM verwijdert alle toetsbindingen aan deze functie\n" " -V variabelenamen en hun waarden tonen\n" -" -v variabelenamen en hun waarden tonen, in een vorm die\n" +" -v variabelenamen en hun waarden tonen, in een vorm " +"die\n" " hergebruikt kan worden als invoer\n" -" -x TOETSENREEKS:SHELL-OPDRACHT deze shell-opdracht uitvoeren als deze\n" +" -x TOETSENREEKS:SHELL-OPDRACHT deze shell-opdracht uitvoeren als " +"deze\n" " toetsenreeks ingevoerd wordt\n" -" -X met '-x' gebonden toetsenreeksen en opdrachten tonen\n" -" in een vorm die hergebruikt kan worden als invoer\n" +" -X met '-x' gebonden toetsenreeksen en opdrachten " +"tonen\n" +" in een vorm die hergebruikt kan worden als " +"invoer\n" "\n" -" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n" +" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er " +"een\n" " fout optrad." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2694,7 +2860,7 @@ msgstr "" "\n" " De afsluitwaarde is 0, tenzij N kleiner dan 1 is." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2709,13 +2875,14 @@ msgstr "" "\n" " De afsluitwaarde is 0, tenzij N kleiner dan 1 is." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2723,7 +2890,8 @@ msgid "" msgstr "" "Een ingebouwde shell-functie uitvoeren.\n" "\n" -" Voert de gegeven ingebouwde shell-functie met de gegeven argumenten uit.\n" +" Voert de gegeven ingebouwde shell-functie met de gegeven argumenten " +"uit.\n" " Dit is handig als u de naam van een ingebouwde functie voor een eigen\n" " functie wilt gebruiken, maar toch de functionaliteit van de ingebouwde\n" " functie nodig hebt.\n" @@ -2731,7 +2899,7 @@ msgstr "" " De afsluitwaarde is die van de uitgevoerde shell-functie, of 1\n" " of 1 als INGEBOUWDE_SHELLFUNCTIE geen ingebouwde shell-functie is." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2757,20 +2925,27 @@ msgstr "" " De afsluitwaarde is 0, tenzij de shell momenteel geen functie uitvoert\n" " of EXPRESSIE ongeldig is." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2786,11 +2961,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "De huidige map wijzigen.\n" @@ -2811,22 +2988,29 @@ msgstr "" " Opties:\n" " -L symbolische koppelingen volgen; symbolische koppelingen in MAP\n" " worden herleid ná verwerking van instantiaties van '..'\n" -" -P de fysieke mappenstructuur gebruiken zonder symbolische koppelingen\n" +" -P de fysieke mappenstructuur gebruiken zonder symbolische " +"koppelingen\n" " te volgen; symbolische koppelingen in MAP worden herleid vóór\n" " verwerking van instantiaties van '..'\n" -" -e als optie '-P' gegeven is en de huidige map kan niet bepaald worden,\n" +" -e als optie '-P' gegeven is en de huidige map kan niet bepaald " +"worden,\n" " dan afsluiten met een niet-nul waarde\n" -" -@ een bestand met uitgebreide kenmerken presenteren als een map die\n" -" deze bestandskenmerken bevat (op systemen die het ondersteunen)\n" +" -@ een bestand met uitgebreide kenmerken presenteren als een map " +"die\n" +" deze bestandskenmerken bevat (op systemen die het " +"ondersteunen)\n" "\n" -" Standaard worden symbolische koppelingen gevolgd, alsof '-L' gegeven is.\n" +" Standaard worden symbolische koppelingen gevolgd, alsof '-L' gegeven " +"is.\n" " Een '..' wordt verwerkt door het verwijderen van de direct voorafgaande\n" " padcomponent terug tot een slash of tot het begin van MAP.\n" "\n" -" De afsluitwaarde is 0 als de gewenste map ingesteld kon worden, en als ook\n" -" omgevingsvariabele PWD ingesteld kon worden als '-P' gegeven is, anders 1." +" De afsluitwaarde is 0 als de gewenste map ingesteld kon worden, en als " +"ook\n" +" omgevingsvariabele PWD ingesteld kon worden als '-P' gegeven is, anders " +"1." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2845,14 +3029,15 @@ msgstr "" "\n" " Opties:\n" " -L de waarde van $PWD tonen (als het de huidige werkmap aangeeft)\n" -" -P het werkelijke, fysieke pad tonen, zonder symbolische koppelingen\n" +" -P het werkelijke, fysieke pad tonen, zonder symbolische " +"koppelingen\n" "\n" " Zonder opties wordt optie '-L' aangenomen.\n" "\n" " De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of de\n" " huidige map niet bepaald kon worden." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2862,7 +3047,7 @@ msgid "" " Always succeeds." msgstr "Doet niets; de opdracht heeft geen effect; de afsluitwaarde is 0." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2870,7 +3055,7 @@ msgid "" " Always succeeds." msgstr "Geeft altijd afsluitwaarde 0, horend bij \"gelukt\"." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2878,12 +3063,13 @@ msgid "" " Always fails." msgstr "Geeft altijd afsluitwaarde 1, horend bij \"mislukt\"." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2911,7 +3097,8 @@ msgstr "" " De afsluitwaarde is die van de uitgevoerde OPDRACHT,\n" " of 1 als de OPDRACHT niet gevonden is." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2939,12 +3126,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2960,17 +3149,22 @@ msgstr "" " Opties:\n" " -f alleen de gedefinieerde functies tonen (geen variabelen)\n" " -F alleen de namen van de functies tonen, zonder de definities\n" -" -g globale variabelen aanmaken wanneer gebruikt in een shell-functie;\n" +" -g globale variabelen aanmaken wanneer gebruikt in een shell-" +"functie;\n" " elders genegeerd\n" -" -I bij aanmaken van lokale variabele, de eigenschappen en waarde van\n" -" variabele met dezelfde naam uit vorig geldigheidsbereik overerven\n" +" -I bij aanmaken van lokale variabele, de eigenschappen en waarde " +"van\n" +" variabele met dezelfde naam uit vorig geldigheidsbereik " +"overerven\n" " -p van elke gegeven variabele de eigenschappen en waarde tonen\n" "\n" " Eigenschappen:\n" " -a van gegeven variabelen arrays maken (indien mogelijk)\n" -" -A van gegeven variabelen associatieve arrays maken (indien mogelijk)\n" +" -A van gegeven variabelen associatieve arrays maken (indien " +"mogelijk)\n" " -i aan gegeven variabelen de 'geheel getal'-eigenschap toekennen\n" -" -l waarde van variabelen bij toekenning omzetten naar kleine letters\n" +" -l waarde van variabelen bij toekenning omzetten naar kleine " +"letters\n" " -n de gegeven variabele een verwijzing maken naar de variabele die\n" " gegeven is als waarde\n" " -r de gegeven variabelen alleen-lezen maken\n" @@ -2987,10 +3181,11 @@ msgstr "" " Als 'declare' wordt gebruikt in een functie, dan maakt het elke gegeven\n" " naam lokaal, net zoals de opdracht 'local'. Optie '-g' onderdrukt dit.\n" "\n" -" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n" +" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er " +"een\n" " toekenningsfout optrad." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3000,7 +3195,7 @@ msgstr "" "\n" " Een synoniem van 'declare'. Zie 'help declare'." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3026,11 +3221,12 @@ msgstr "" " De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd, er een\n" " toekenningsfout optrad, of de shell geen functie aan het uitvoeren is." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3054,9 +3250,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3064,7 +3262,8 @@ msgid "" msgstr "" "De gegeven argumenten naar standaarduitvoer schrijven.\n" "\n" -" Schrijft de gegeven argumenten naar standaarduitvoer, elke twee gescheiden\n" +" Schrijft de gegeven argumenten naar standaarduitvoer, elke twee " +"gescheiden\n" " door een spatie en aan het eind gevolgd door een nieuwe regel.\n" "\n" " Opties:\n" @@ -3093,7 +3292,7 @@ msgstr "" "\n" " De afsluitwaarde is 0, tenzij een schrijffout optrad." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3112,7 +3311,8 @@ msgstr "" "\n" " De afsluitwaarde is 0, tenzij een schrijffout optrad." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3132,6 +3332,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3140,21 +3346,26 @@ msgid "" msgstr "" "Ingebouwde shell-opdrachten in- of uitschakelen.\n" "\n" -" Schakelt ingebouwde opdrachten in of uit. Dit laatste maakt het mogelijk\n" +" Schakelt ingebouwde opdrachten in of uit. Dit laatste maakt het " +"mogelijk\n" " om een bestand op schijf uit te voeren dat dezelfde naam heeft als een\n" " ingebouwde opdracht, zonder het volledige pad op te moeten geven.\n" "\n" " Opties:\n" -" -a de ingebouwde opdrachten tonen en of ze in- of uitgeschakeld zijn\n" -" -n genoemde opdrachten uitschakelen of uitgeschakelde opdrachten tonen\n" -" -p uitvoer produceren die hergebruikt kan worden als invoer (standaard)\n" +" -a de ingebouwde opdrachten tonen en of ze in- of uitgeschakeld " +"zijn\n" +" -n genoemde opdrachten uitschakelen of uitgeschakelde opdrachten " +"tonen\n" +" -p uitvoer produceren die hergebruikt kan worden als invoer " +"(standaard)\n" " -s alleen de speciale POSIX ingebouwde opdrachten tonen\n" "\n" " Opties die het dynamisch laden besturen:\n" " -f ingebouwde opdracht NAAM laden uit gedeeld object BESTANDSNAAM\n" " -d opdracht die geladen is met '-f' verwijderen.\n" "\n" -" Zonder opties wordt elke gegeven NAAM ingeschakeld. Zonder namen worden\n" +" Zonder opties wordt elke gegeven NAAM ingeschakeld. Zonder namen " +"worden\n" " de ingeschakelde opdrachten getoond (of met '-n' de uitgeschakelde).\n" "\n" " Voorbeeld: om in plaats van de ingebouwde 'test' het bestand 'test' te\n" @@ -3163,11 +3374,12 @@ msgstr "" " De afsluitwaarde is 0, tenzij NAAM geen ingebouwde shell-opdracht is of\n" "  er een fout optreedt." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3175,13 +3387,15 @@ msgid "" msgstr "" "Argumenten uitvoeren als een shell-opdracht.\n" "\n" -" Combineert de gegeven argumenten tot een enkele tekenreeks, gebruikt deze\n" +" Combineert de gegeven argumenten tot een enkele tekenreeks, gebruikt " +"deze\n" " als invoer voor de shell, en voert de resulterende opdrachten uit.\n" "\n" -" De afsluitwaarde is die van de uitgevoerde opdracht, of 0 als de opdracht\n" +" De afsluitwaarde is die van de uitgevoerde opdracht, of 0 als de " +"opdracht\n" " leeg is." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3223,7 +3437,8 @@ msgid "" msgstr "" "Opties ontleden.\n" "\n" -" 'getopts' kan door shell-scripts gebruikt worden om positionele parameters\n" +" 'getopts' kan door shell-scripts gebruikt worden om positionele " +"parameters\n" " als opties te ontleden.\n" "\n" " De OPTIETEKENREEKS bevat de te herkennen optieletters; als een letter\n" @@ -3259,12 +3474,13 @@ msgstr "" " De afsluitwaarde is 0 als er een optie gevonden werd, of niet-nul als\n" " het einde van de opties bereikt werd of als er een fout optrad." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3272,11 +3488,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "De shell vervangen door de gegeven opdracht.\n" "\n" @@ -3290,13 +3508,14 @@ msgstr "" " -c de opdracht uitvoeren met een lege omgeving\n" " -l een koppelteken als nulde argument aan OPDRACHT meegeven\n" "\n" -" Als de opdracht niet kan worden uitgevoerd, dan sluit een niet-interactieve\n" +" Als de opdracht niet kan worden uitgevoerd, dan sluit een niet-" +"interactieve\n" " shell af, tenzij de shell-optie 'execfail' aan staat.\n" "\n" " De afsluitwaarde is 0, tenzij OPDRACHT niet gevonden wordt of er een\n" " omleidingsfout optreedt." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3308,11 +3527,12 @@ msgstr "" " Beëindigt de shell met een afsluitwaarde van N. Zonder N is de\n" " afsluitwaarde die van de laatst uitgevoerde opdracht." -#: builtins.c:724 +#: builtins.c:732 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 "" "Een login-shell beëindigen.\n" @@ -3320,17 +3540,20 @@ msgstr "" " Beëindigt een login-shell met een afsluitwaarde van N. Geeft een\n" " foutmelding als de huidige shell geen login-shell is." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3343,14 +3566,19 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Opdrachten uit de geschiedenis tonen of uitvoeren.\n" "\n" " Kan gebruikt worden om oude opdrachten te tonen, of om deze te bewerken\n" -" en opnieuw uit te voeren. EERSTE en LAATSTE kunnen getallen zijn die een\n" -" bereik opgeven, of EERSTE kan een tekenreeksje zijn waarmee de recentste\n" +" en opnieuw uit te voeren. EERSTE en LAATSTE kunnen getallen zijn die " +"een\n" +" bereik opgeven, of EERSTE kan een tekenreeksje zijn waarmee de " +"recentste\n" " opdracht wordt bedoeld die met die letters begint.\n" "\n" " Opties:\n" @@ -3370,7 +3598,7 @@ msgstr "" " De afsluitwaarde is die van de uitgevoerde opdracht, of 0 als er niets\n" " uitgevoerd werd, of niet-nul als er een fout optrad." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3383,19 +3611,24 @@ msgid "" msgstr "" "De gegeven taak in de voorgrond plaatsen.\n" "\n" -" Plaatst de gegeven taak in de voorgrond, en maakt deze tot de huidige taak.\n" -" Als er geen taak gegeven is, dan wordt dat wat volgens de shell de huidige\n" +" Plaatst de gegeven taak in de voorgrond, en maakt deze tot de huidige " +"taak.\n" +" Als er geen taak gegeven is, dan wordt dat wat volgens de shell de " +"huidige\n" " taak is gebruikt.\n" "\n" -" De afsluitwaarde is die van de in voorgrond geplaatste taak, of 1 als er\n" +" De afsluitwaarde is die van de in voorgrond geplaatste taak, of 1 als " +"er\n" " een fout optreedt." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3403,19 +3636,23 @@ msgid "" msgstr "" "De gegeven taken in de achtergrond plaatsen.\n" "\n" -" Plaatst gegeven taken in de achtergrond, alsof deze gestart waren met '&'.\n" -" Als er geen taak gegeven is, dan wordt dat wat volgens de shell de huidige\n" +" Plaatst gegeven taken in de achtergrond, alsof deze gestart waren met " +"'&'.\n" +" Als er geen taak gegeven is, dan wordt dat wat volgens de shell de " +"huidige\n" " taak is gebruikt.\n" "\n" -" De afsluitwaarde is 0, tenzij taakbeheer uitgeschakeld is of er een fout\n" +" De afsluitwaarde is 0, tenzij taakbeheer uitgeschakeld is of er een " +"fout\n" " optreedt." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3451,7 +3688,7 @@ msgstr "" " De afsluitwaarde is 0, tenzij NAAM niet gevonden wordt of een ongeldige\n" " optie gegeven werd." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3469,7 +3706,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Informatie tonen over ingebouwde opdrachten.\n" "\n" @@ -3483,10 +3721,12 @@ msgstr "" " -m gebruiksbericht tonen in pseudo-opmaak van een man-pagina\n" " -s de uitvoer beperken tot een beknopt gebruiksbericht\n" "\n" -" De afsluitwaarde is 0, tenzij niets aan PATROON voldoet of een ongeldige\n" +" De afsluitwaarde is 0, tenzij niets aan PATROON voldoet of een " +"ongeldige\n" " optie gegeven werd." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3510,11 +3750,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3526,9 +3771,11 @@ msgstr "" " argument van N worden alleen de laatste N opdrachten getoond.\n" "\n" " Opties:\n" -" -c huidige geschiedenis wissen: alle uitgevoerde opdrachten vergeten\n" +" -c huidige geschiedenis wissen: alle uitgevoerde opdrachten " +"vergeten\n" " -d POSITIE het geschiedenisitem op deze positie verwijderen; een\n" -" negatieve POSITIE telt terug vanaf het einde van de lijst\n" +" negatieve POSITIE telt terug vanaf het einde van de " +"lijst\n" "\n" " -a huidige geschiedenis aan eind van geschiedenisbestand toevoegen\n" " -n alle nog niet gelezen regels uit het geschiedenisbestand lezen\n" @@ -3537,7 +3784,8 @@ msgstr "" " huidige geschiedenis\n" " -w huidige geschiedenis naar het geschiedenisbestand schrijven\n" "\n" -" -p geschiedenisopzoeking uitvoeren voor elk ARGUMENT en het resultaat\n" +" -p geschiedenisopzoeking uitvoeren voor elk ARGUMENT en het " +"resultaat\n" " tonen zonder dit in de geschiedenis op te slaan\n" " -s de ARGUMENTen als één enkel item aan de geschiedenis toevoegen\n" "\n" @@ -3547,13 +3795,15 @@ msgstr "" "\n" " Als de variabele HISTTIMEFORMAT ingesteld en niet leeg is, dan wordt de\n" " waarde ervan gebruikt als een opmaaktekenreeks for strftime(3), om een\n" -" tijdsstempel bij elk geschiedenisitem weer te geven. Anders worden geen\n" +" tijdsstempel bij elk geschiedenisitem weer te geven. Anders worden " +"geen\n" " tijdsstempels getoond.\n" "\n" -" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n" +" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er " +"een\n" " fout optrad." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3578,12 +3828,15 @@ msgid "" msgstr "" "De status van taken tonen.\n" "\n" -" Toont de actieve taken. Een TAAKAANDUIDING beperkt de uitvoer tot alleen\n" -" die taak. Zonder opties wordt de status van alle actieve taken getoond.\n" +" Toont de actieve taken. Een TAAKAANDUIDING beperkt de uitvoer tot " +"alleen\n" +" die taak. Zonder opties wordt de status van alle actieve taken " +"getoond.\n" "\n" " Opties:\n" " -l ook de proces-ID's tonen, naast de gewone informatie\n" -" -n alleen processen tonen die sinds de vorige melding zijn veranderd\n" +" -n alleen processen tonen die sinds de vorige melding zijn " +"veranderd\n" " -p alleen de proces-ID's tonen\n" " -r uitvoer beperken tot draaiende taken\n" " -s uitvoer beperken tot gepauzeerde taken\n" @@ -3592,10 +3845,11 @@ msgstr "" " alle gegeven taken (in ARGUMENTen) afgesloten zijn (dat wil zeggen: hun\n" " proces-ID is vervangen door dat van hun moederproces).\n" "\n" -" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n" +" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er " +"een\n" " fout optrad. Met optie '-x' is de afsluitwaarde die van OPDRACHT." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3619,14 +3873,15 @@ msgstr "" "\n" " Opties:\n" " -a alle taken verwijderen (als geen TAAKAANDUIDING gegeven is)\n" -" -h taken niet verwijderen maar zodanig markeren dat deze geen SIGHUP\n" +" -h taken niet verwijderen maar zodanig markeren dat deze geen " +"SIGHUP\n" " krijgen wanneer de shell een SIGHUP krijgt\n" " -r alleen draaiende taken verwijderen\n" "\n" " De afsluitwaarde is 0, tenzij een ongeldige optie of TAAKAANDUIDING\n" " gegeven werd." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3656,27 +3911,32 @@ msgstr "" " Opties:\n" " -n NAAM het signaal met deze naam sturen\n" " -s NUMMER het signaal met dit nummer sturen\n" -" -l lijst met beschikbare signalen tonen; als na '-l' argumenten\n" +" -l lijst met beschikbare signalen tonen; als na '-l' " +"argumenten\n" " volgen, dan wordt voor elk nummer de bijbehorende naam\n" " getoond, en voor elke naam het bijbehorende nummer\n" " -L synoniem van '-l'\n" "\n" -" 'kill' is om twee redenen een ingebouwde shell-opdracht: het accepteert\n" -" ook taakaanduidingen in plaats van alleen proces-ID's, en als het maximum\n" +" 'kill' is om twee redenen een ingebouwde shell-opdracht: het " +"accepteert\n" +" ook taakaanduidingen in plaats van alleen proces-ID's, en als het " +"maximum\n" " aantal processen bereikt is hoeft u geen nieuw proces te starten om een\n" " ander proces te elimineren.\n" "\n" -" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n" +" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er " +"een\n" " fout optrad." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3718,7 +3978,8 @@ msgstr "" " De evaluatie gebeurt in gehele getallen zonder controle op overloop;\n" " maar deling door nul wordt gedetecteerd en wordt getoond als een fout.\n" "\n" -" Onderstaande lijst toont de beschikbare operatoren in groepjes van gelijke\n" +" Onderstaande lijst toont de beschikbare operatoren in groepjes van " +"gelijke\n" " voorrang; de groepjes zijn gerangschikt volgens afnemende voorrang.\n" "\n" " var++, var-- post-increment, post-decrement van variabele\n" @@ -3741,9 +4002,12 @@ msgstr "" "\n" " =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= toewijzingen\n" "\n" -" Shell-variabelen zijn toegestaan als parameters. De naam van een variabele\n" -" wordt vervangen door zijn waarde (zonodig omgezet naar een geheel getal).\n" -" Variabelen hoeven geen 'geheel getal'-eigenschap te hebben om gebruikt te\n" +" Shell-variabelen zijn toegestaan als parameters. De naam van een " +"variabele\n" +" wordt vervangen door zijn waarde (zonodig omgezet naar een geheel " +"getal).\n" +" Variabelen hoeven geen 'geheel getal'-eigenschap te hebben om gebruikt " +"te\n" " kunnen worden in een expressie.\n" "\n" " Operatoren worden geëvalueerd in volgorde van voorrang. Subexpressies\n" @@ -3753,19 +4017,24 @@ msgstr "" " Als het laatste ARGUMENT evalueert tot 0, dan is de afsluitwaarde van\n" " 'let' 1; anders 0." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3773,11 +4042,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3795,50 +4067,66 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Een regel van standaardinvoer lezen en in velden opsplitsen.\n" "\n" -" Leest één regel van standaardinvoer (of van de gegeven bestandsdescriptor\n" -" als optie '-u' gegeven is) en wijst het eerste woord aan de eerste NAAM toe,\n" -" het tweede woord aan de tweede NAAM, en zo verder; de resterende woorden\n" -" worden toegewezen aan de laatste NAAM. Alleen de tekens in de variabele\n" +" Leest één regel van standaardinvoer (of van de gegeven " +"bestandsdescriptor\n" +" als optie '-u' gegeven is) en wijst het eerste woord aan de eerste NAAM " +"toe,\n" +" het tweede woord aan de tweede NAAM, en zo verder; de resterende " +"woorden\n" +" worden toegewezen aan de laatste NAAM. Alleen de tekens in de " +"variabele\n" " IFS worden herkend als woordscheidingstekens. Standaard ontdoet een\n" " backslash scheidingstekens en het nieuweregelteken van hun betekenis.\n" "\n" -" Als er geen namen gegeven zijn, dan wordt de gelezen regel opgeslagen in\n" +" Als er geen namen gegeven zijn, dan wordt de gelezen regel opgeslagen " +"in\n" " de variabele REPLY.\n" "\n" " Opties:\n" " -a ARRAY de gelezen woorden toekennen aan de opeenvolgende posities\n" " van het genoemde array, beginnend bij index nul\n" -" -d TEKEN doorgaan met lezen tot TEKEN gelezen wordt (i.p.v. LF-teken)\n" +" -d TEKEN doorgaan met lezen tot TEKEN gelezen wordt (i.p.v. LF-" +"teken)\n" " -e 'readline' gebruiken om de regel in te lezen\n" " -i TEKST door 'readline' te gebruiken begintekst\n" -" -n AANTAL stoppen na maximaal dit aantal tekens gelezen te hebben, of\n" -" na een LF-teken (i.p.v. altijd te wachten op een LF-teken)\n" -" -N AANTAL alleen stoppen na dit aantal tekens gelezen te hebben, of na\n" +" -n AANTAL stoppen na maximaal dit aantal tekens gelezen te hebben, " +"of\n" +" na een LF-teken (i.p.v. altijd te wachten op een LF-" +"teken)\n" +" -N AANTAL alleen stoppen na dit aantal tekens gelezen te hebben, of " +"na\n" " EOF of tijdsoverschrijding, elk scheidingsteken negerend\n" -" -p PROMPT deze tekenreeks tonen als prompt (zonder afsluitende nieuwe\n" +" -p PROMPT deze tekenreeks tonen als prompt (zonder afsluitende " +"nieuwe\n" " regel) alvorens te beginnen met lezen\n" " -r backslash-codes niet omzetten naar hun betekenis\n" " -s invoer die van een terminal komt niet echoën\n" " -t AANTAL na dit aantal seconden stoppen met wachten op invoer en\n" " afsluiten met een code groter dan 128; de waarde van de\n" " variabele TMOUT is de standaardwaarde voor het aantal te\n" -" wachten seconden; het aantal mag drijvendepuntgetal zijn;\n" -" als AANTAl 0 is, dan keert 'read' onmiddellijk terug zonder\n" -" enige data te lezen, maar is alleen succesvol als er op de\n" +" wachten seconden; het aantal mag drijvendepuntgetal " +"zijn;\n" +" als AANTAl 0 is, dan keert 'read' onmiddellijk terug " +"zonder\n" +" enige data te lezen, maar is alleen succesvol als er op " +"de\n" " betreffende bestandsdescriptor invoer beschikbaar is\n" -" -u BS.DS. van deze bestandsdescriptor lezen i.p.v. van standaardinvoer\n" +" -u BS.DS. van deze bestandsdescriptor lezen i.p.v. van " +"standaardinvoer\n" "\n" " De afsluitwaarde is 0, tenzij einde-van-bestand (EOF) bereikt werd,\n" " de tijdslimiet overschreden werd, er een toekenningsfout optrad, of een\n" " ongeldige bestandsdescriptor als argument van '-u' gegeven werd." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3859,7 +4147,8 @@ msgstr "" " uitvoeren is." # Voor de duidelijkheid is de tekstvolgorde veranderd. -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3902,7 +4191,8 @@ 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" @@ -3926,13 +4216,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3944,42 +4239,62 @@ msgid "" msgstr "" "Waarden van shell-opties of positionele parameters instellen.\n" "\n" -" Schakelt shell-eigenschappen in/uit, of verandert waarden van positionele\n" -" parameters. Zonder opties of argumenten toont 'set' de namen en waarden\n" -" van alle gedefinieerde variabelen en functies, in een vorm die als invoer\n" -" hergebruikt kan worden. De volgende opties zijn beschikbaar (een '+' in\n" +" Schakelt shell-eigenschappen in/uit, of verandert waarden van " +"positionele\n" +" parameters. Zonder opties of argumenten toont 'set' de namen en " +"waarden\n" +" van alle gedefinieerde variabelen en functies, in een vorm die als " +"invoer\n" +" hergebruikt kan worden. De volgende opties zijn beschikbaar (een '+' " +"in\n" " plaats van een '-' schakelt de betreffende eigenschap _uit_ i.p.v. in):\n" "\n" -" -a nieuwe of gewijzigde variabelen en functies automatisch exporteren\n" +" -a nieuwe of gewijzigde variabelen en functies automatisch " +"exporteren\n" " -B accoladevervanging uitvoeren (is standaard, b.v. a{b,c} -> ab ac)\n" -" -b beëindiging van een taak direct melden (i.p.v. na huidige opdracht)\n" +" -b beëindiging van een taak direct melden (i.p.v. na huidige " +"opdracht)\n" " -C omleiding van uitvoer mag gewone bestanden niet overschrijven\n" -" -E een 'trap' op ERR door laten werken in functies en dochterprocessen\n" -" -e de shell afsluiten zodra afsluitwaarde van een opdracht niet nul is\n" +" -E een 'trap' op ERR door laten werken in functies en " +"dochterprocessen\n" +" -e de shell afsluiten zodra afsluitwaarde van een opdracht niet nul " +"is\n" " -f jokertekens voor bestandsnamen uitschakelen (geen 'globbing')\n" " -H geschiedenisopdracht '!' beschikbaar stellen (standaard)\n" -" -h het volledige pad van opdrachten onthouden na eerste keer opzoeken\n" +" -h het volledige pad van opdrachten onthouden na eerste keer " +"opzoeken\n" " -k ook nakomende toewijzingen aan variabelen in de omgeving plaatsen\n" " -m taakbesturing beschikbaar stellen (standaard)\n" " -n opdrachten wel lezen maar niet uitvoeren (\"droogzwemmen\")\n" -" -o OPTIENAAM deze optie inschakelen (zie verderop voor de lange namen)\n" -" -P geen symbolische koppelingen herleiden bij opdrachten als 'cd' die\n" +" -o OPTIENAAM deze optie inschakelen (zie verderop voor de lange " +"namen)\n" +" -P geen symbolische koppelingen herleiden bij opdrachten als 'cd' " +"die\n" " de huidige map wijzigen\n" -" -p geprivilegeerde modus: de bestanden aangeduid door ENV en BASH_ENV\n" -" worden genegeerd, functies worden niet uit de omgeving geïmporteerd,\n" -" en ook eventuele SHELLOPTS worden genegeerd; modus wordt automatisch\n" -" ingeschakeld als effectieve en echte UID of GID niet overeenkomen;\n" +" -p geprivilegeerde modus: de bestanden aangeduid door ENV en " +"BASH_ENV\n" +" worden genegeerd, functies worden niet uit de omgeving " +"geïmporteerd,\n" +" en ook eventuele SHELLOPTS worden genegeerd; modus wordt " +"automatisch\n" +" ingeschakeld als effectieve en echte UID of GID niet " +"overeenkomen;\n" " uitschakelen maakt dan effectieve UID en GID gelijk aan de echte\n" " -T een 'trap' op DEBUG of RETURN door laten werken in functies en\n" " dochterprocessen\n" " -t afsluiten na het lezen en uitvoeren van één opdracht\n" " -u het gebruik van niet-bestaande variabelen behandelen als een fout\n" " -v invoerregel weergeven (\"echoën\") zodra deze gelezen is\n" -" -x elke opdracht met argumenten weergeven voordat deze wordt uitgevoerd\n" -" -- nakomende argumenten zijn positionele parameters; als er geen verdere\n" -" argumenten zijn, worden de bestaande positionele parameters gewist\n" -" - opties -v en -x uitschakelen; nakomende argumenten zijn positionele\n" -" parameters; maar zonder argumenten worden de bestaande niet gewist\n" +" -x elke opdracht met argumenten weergeven voordat deze wordt " +"uitgevoerd\n" +" -- nakomende argumenten zijn positionele parameters; als er geen " +"verdere\n" +" argumenten zijn, worden de bestaande positionele parameters " +"gewist\n" +" - opties -v en -x uitschakelen; nakomende argumenten zijn " +"positionele\n" +" parameters; maar zonder argumenten worden de bestaande niet " +"gewist\n" "\n" " De opties kunnen ook gebruikt worden bij het starten van de shell.\n" " De huidige toestand van de eigenschappen is te vinden in $-. Eventuele\n" @@ -3996,7 +4311,8 @@ msgstr "" " hashall == -h (gevonden pad van opdrachten onthouden)\n" " histexpand == -H ('!'-opdracht beschikbaar stellen)\n" " history opdrachtengeschiedenis beschikbaar stellen\n" -" ignoreeof Ctrl-D negeren; de shell niet afsluiten bij lezen van EOF\n" +" ignoreeof Ctrl-D negeren; de shell niet afsluiten bij lezen van " +"EOF\n" " interactive-comments commentaar in interactieve opdrachten toestaan\n" " keyword == -k (nakomende toewijzingen ook meenemen)\n" " monitor == -m (taakbesturing beschikbaar stellen)\n" @@ -4005,11 +4321,14 @@ msgstr "" " noglob == -f (jokertekens uitschakelen)\n" " nolog (herkend maar genegeerd)\n" " notify == -b (beëindiging van een taak direct melden)\n" -" nounset == -u (niet-bestaande variabelen als een fout beschouwen)\n" +" nounset == -u (niet-bestaande variabelen als een fout " +"beschouwen)\n" " onecmd == -t (afsluiten na uitvoeren van één opdracht)\n" " physical == -P (fysieke paden volgen i.p.v. symbolische)\n" -" pipefail de afsluitwaarde van een pijplijn gelijkmaken aan die van\n" -" de laatste niet-succesvolle opdracht in de reeks, of aan\n" +" pipefail de afsluitwaarde van een pijplijn gelijkmaken aan die " +"van\n" +" de laatste niet-succesvolle opdracht in de reeks, of " +"aan\n" " 0 als alle opdrachten succesvol waren\n" " posix de voorschriften van de POSIX-standaard strict volgen\n" " privileged == -p (geprivilegeerde modus)\n" @@ -4019,7 +4338,7 @@ msgstr "" "\n" " De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4031,7 +4350,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4056,12 +4376,13 @@ msgstr "" " De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of een\n" " NAAM alleen-lezen is." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4076,7 +4397,8 @@ msgstr "" "De export-eigenschap van shell-variabelen instellen.\n" "\n" " Markeert elke gegeven naam voor automatische export naar de omgeving\n" -" van latere opdrachten. Als een WAARDE gegeven is, dan wordt deze WAARDE\n" +" van latere opdrachten. Als een WAARDE gegeven is, dan wordt deze " +"WAARDE\n" " toegekend alvorens te exporteren.\n" "\n" " Opties:\n" @@ -4088,7 +4410,7 @@ msgstr "" "\n" " De afsluitwaarde is 0, tenzij een ongeldige optie of NAAM gegeven werd." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4111,7 +4433,8 @@ msgstr "" "Shell-variabelen als onveranderbaar markeren.\n" "\n" " Markeert elke gegeven NAAM als alleen-lezen, zodat de waarde van deze\n" -" NAAM niet meer veranderd kan worden door een latere toewijzing. Als een\n" +" NAAM niet meer veranderd kan worden door een latere toewijzing. Als " +"een\n" " WAARDE gegeven is, dan deze WAARDE toekennen alvorens deze te fixeren.\n" "\n" " Opties:\n" @@ -4125,7 +4448,7 @@ msgstr "" "\n" " De afsluitwaarde is 0, tenzij een ongeldige optie of NAAM gegeven werd." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4142,7 +4465,7 @@ msgstr "" "\n" " De afsluitwaarde is 0 tenzij N negatief is of groter dan $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4157,23 +4480,28 @@ msgid "" msgstr "" "Opdrachten uit bestand in de huidige shell uitvoeren.\n" "\n" -" Leest opdrachten uit het gegeven bestand en voert deze uit in de huidige\n" +" Leest opdrachten uit het gegeven bestand en voert deze uit in de " +"huidige\n" " shell. De mappen in PATH worden nagezocht om het genoemde bestand te\n" " vinden. Als er verder nog argumenten gegeven zijn, dan worden dit de\n" " positionele parameters tijdens de uitvoering van het genoemde bestand.\n" "\n" -" De afsluitwaarde is die van de laatst uitgevoerde opdracht in het gegeven\n" +" De afsluitwaarde is die van de laatst uitgevoerde opdracht in het " +"gegeven\n" " bestand, of 1 als dit bestand niet gelezen kan worden." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4187,10 +4515,11 @@ msgstr "" " Optie:\n" " -f pauzering afdwingen, ook als dit een login-shell is\n" "\n" -" De afsluitwaarde is 0, tenzij taakbeheer uitgeschakeld is of er een fout\n" +" De afsluitwaarde is 0, tenzij taakbeheer uitgeschakeld is of er een " +"fout\n" " optreedt." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4224,7 +4553,8 @@ 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" @@ -4245,7 +4575,8 @@ 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" @@ -4299,14 +4630,18 @@ msgstr "" " -r BESTAND waar als bestand voor u leesbaar is\n" " -S BESTAND waar als bestand een socket is\n" " -s BESTAND waar als bestand niet leeg is\n" -" -t DESCRIPTOR waar als bestandsdescriptor geopend is op een terminal\n" +" -t DESCRIPTOR waar als bestandsdescriptor geopend is op een " +"terminal\n" " -u BESTAND waar als bestand SETUID is\n" " -w BESTAND waar als bestand voor u schrijfbaar is\n" " -x BESTAND waar als bestand door u uitvoerbaar is\n" "\n" -" BEST1 -nt BEST2 waar als eerste bestand later gewijzigd is dan tweede\n" -" BEST1 -ot BEST2 waar als eerste bestand eerder gewijzigd is dan tweede\n" -" BEST1 -ef BEST2 waar als eerste bestand harde koppeling is naar tweede\n" +" BEST1 -nt BEST2 waar als eerste bestand later gewijzigd is dan " +"tweede\n" +" BEST1 -ot BEST2 waar als eerste bestand eerder gewijzigd is dan " +"tweede\n" +" BEST1 -ef BEST2 waar als eerste bestand harde koppeling is naar " +"tweede\n" "\n" " Tekenreeksoperatoren:\n" " -z REEKS waar als tekenreeks leeg is\n" @@ -4314,8 +4649,10 @@ msgstr "" " REEKS waar als tekenreeks niet leeg is\n" " RKS1 = RKS2 waar als de tekenreeksen gelijk zijn\n" " RKS1 != RKS2 waar als de tekenreeksen niet gelijk zijn\n" -" RKS1 < RKS2 waar als eerste reeks lexicografisch voor de tweede komt\n" -" RKS1 > RKS2 waar als eerste reeks lexicografisch na de tweede komt\n" +" RKS1 < RKS2 waar als eerste reeks lexicografisch voor de tweede " +"komt\n" +" RKS1 > RKS2 waar als eerste reeks lexicografisch na de tweede " +"komt\n" "\n" " Andere operatoren:\n" " -o OPTIE waar als deze shell-optie ingeschakeld is\n" @@ -4332,7 +4669,7 @@ msgstr "" " De afsluitwaarde is 0 als EXPRESSIE waar is, 1 als EXPRESSIE onwaar is,\n" " en 2 als een ongeldig argument gegeven werd." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4344,11 +4681,12 @@ msgstr "" " Dit is een synoniem voor de ingebouwde functie 'test', behalve dat\n" " het laatste argument een ']' moet zijn, horend bij de begin-'['." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4362,76 +4700,101 @@ msgstr "" "\n" " De afsluitwaarde is altijd 0." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Signalen en andere gebeurtenissen opvangen.\n" "\n" " Definieert en activeert afhandelingsprocedures die uitgevoerd moeten\n" " worden wanneer de shell een signaal of andere gebeurtenissen ontvangt.\n" "\n" -" ARGUMENT is een opdracht die gelezen en uitgevoerd wordt wanneer de shell\n" -" een van de opgegeven signalen ontvangt. Als ARGUMENT ontbreekt en er één\n" +" ARGUMENT is een opdracht die gelezen en uitgevoerd wordt wanneer de " +"shell\n" +" een van de opgegeven signalen ontvangt. Als ARGUMENT ontbreekt en er " +"één\n" " signaal gegeven is, of wanneer ARGUMENT '-' is, dan worden de opgegeven\n" " signalen teruggezet op de waarde die ze hadden bij het starten van deze\n" " shell. Als ARGUMENT de lege tekenreeks is, dan worden de opgegeven\n" -" signalen genegeerd door zowel deze shell als door alle dochterprocessen.\n" +" signalen genegeerd door zowel deze shell als door alle " +"dochterprocessen.\n" "\n" " Als EXIT (0) als signaal opgegeven wordt, dan wordt ARGUMENT uitgevoerd\n" " bij het afsluiten van de shell. Als DEBUG als signaal opgegeven wordt,\n" -" dan wordt ARGUMENT uitgevoerd vóór elke enkelvoudige opdracht. Als RETURN\n" -" als signaal opgegeven wordt, dan wordt ARGUMENT uitgevoerd elke keer als\n" -" een functie (of een met 'source' aangeroepen script) terugkeert. Als ERR\n" -" als signaal opgegeven wordt, dan wordt ARGUMENT uitgevoerd elke keer als\n" +" dan wordt ARGUMENT uitgevoerd vóór elke enkelvoudige opdracht. Als " +"RETURN\n" +" als signaal opgegeven wordt, dan wordt ARGUMENT uitgevoerd elke keer " +"als\n" +" een functie (of een met 'source' aangeroepen script) terugkeert. Als " +"ERR\n" +" als signaal opgegeven wordt, dan wordt ARGUMENT uitgevoerd elke keer " +"als\n" " de mislukking van een opdracht de shell zou beëindigen als optie '-e'\n" " gegeven was.\n" "\n" -" Als er geen enkel argument gegeven is, dan toont 'trap' welke opdrachten\n" +" Als er geen enkel argument gegeven is, dan toont 'trap' welke " +"opdrachten\n" " er met welke signalen verbonden zijn.\n" "\n" " Opties:\n" " -l een overzicht tonen van signaalnummers en hun namen\n" " -p voor elk gegeven signaal tonen welke opdracht ermee verbonden is\n" "\n" -" Signalen kunnen als naam of als nummer opgegeven worden, in hoofd- of in\n" +" Signalen kunnen als naam of als nummer opgegeven worden, in hoofd- of " +"in\n" " kleine letters, en het voorvoegsel 'SIG' is optioneel. Merk op dat met\n" -" 'kill -signaal $$' een signaal naar de huidige shell gestuurd kan worden.\n" +" 'kill -signaal $$' een signaal naar de huidige shell gestuurd kan " +"worden.\n" "\n" " De afsluitwaarde is 0, tenzij een ongeldige optie of SIGNAALAANDUIDING\n" " gegeven werd." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4457,7 +4820,8 @@ 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 "" "Informatie tonen over een opdracht.\n" "\n" @@ -4471,7 +4835,8 @@ msgstr "" " -f functies negeren, alsof ze niet gedefinieerd zijn\n" " -P naar elke gegeven naam zoeken in het huidige zoekpad (PATH), ook\n" " als het een alias, ingebouwde shell-opdracht of functie is\n" -" -p voor elke gegeven naam het volledige pad tonen van het bestand dat\n" +" -p voor elke gegeven naam het volledige pad tonen van het bestand " +"dat\n" " uitgevoerd zou worden, of niets als er een alias, functie,\n" " ingebouwde shell-opdracht of sleutelwoord met die naam is\n" " -t alleen het type van de opgegeven namen tonen: 'alias', 'builtin',\n" @@ -4482,11 +4847,13 @@ msgstr "" "\n" " De afsluitwaarde is 0 als elke NAAM gevonden werd, anders 1." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4523,16 +4890,18 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Grenzen van hulpbronnen aanpassen.\n" "\n" -" Begrenst de beschikbare hulpbronnen voor processen gestart door deze shell\n" +" Begrenst de beschikbare hulpbronnen voor processen gestart door deze " +"shell\n" " -- op systemen die zulke begrenzing toestaan.\n" "\n" " Opties:\n" @@ -4543,9 +4912,11 @@ msgstr "" " -c de maximum grootte van een core-bestand (in kB)\n" " -d de maximum hoeveelheid gegevensgeheugen van een proces (in kB)\n" " -e de maximum procespriotiteit (de 'nice'-waarde)\n" -" -f de maximum grootte van bestanden geschreven door shell of dochters\n" +" -f de maximum grootte van bestanden geschreven door shell of " +"dochters\n" " -i het maximum aantal nog wachtende signalen\n" -" -l de maximum hoeveelheid geheugen die een proces mag vastpinnen (kB)\n" +" -l de maximum hoeveelheid geheugen die een proces mag vastpinnen " +"(kB)\n" " -k het maximum aantal gereserveerde kqueues voor dit proces\n" " -m de maximum hoeveelheid fysiek geheugen van een proces (in kB)\n" " -n het maximum aantal open bestandsdescriptors\n" @@ -4558,7 +4929,8 @@ msgstr "" " -v de maximum hoeveelheid virtueel geheugen van een proces (in kB)\n" " -x het maximum aantal bestandsvergrendelingen\n" " -P het maximum aantal pseudoterminals\n" -" -R de maximum looptijd van een realtime-proces alvorens te blokkeren\n" +" -R de maximum looptijd van een realtime-proces alvorens te " +"blokkeren\n" " -T het maximum aantal threads\n" "\n" " Niet alle opties zijn beschikbaar op alle platformen.\n" @@ -4570,13 +4942,15 @@ msgstr "" " Als geen optie gegeven is, dan wordt optie '-f' aangenomen.\n" "\n" " De waardes gaan in stappen van 1024 bytes, behalve voor '-t', die in\n" -" seconden is, voor '-p', die in stappen van 512 bytes gaat, en voor '-u',\n" +" seconden is, voor '-p', die in stappen van 512 bytes gaat, en voor '-" +"u',\n" " dat een ongeschaald aantal is.\n" "\n" -" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n" +" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er " +"een\n" " fout optrad." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4595,36 +4969,44 @@ msgid "" msgstr "" "Het bestandsaanmaakmasker tonen of instellen.\n" "\n" -" Stelt het bestandsaanmaakmasker van de gebruiker in op de gegeven MODUS.\n" -" Als MODUS ontbreekt, dan wordt de huidige waarde van het masker getoond.\n" +" Stelt het bestandsaanmaakmasker van de gebruiker in op de gegeven " +"MODUS.\n" +" Als MODUS ontbreekt, dan wordt de huidige waarde van het masker " +"getoond.\n" "\n" -" Als MODUS begint met een cijfer, wordt het begrepen als een octaal getal,\n" +" Als MODUS begint met een cijfer, wordt het begrepen als een octaal " +"getal,\n" " anders als een symbolische modus-tekenreeks zoals chmod (1) die kent.\n" "\n" " Opties:\n" -" -p als invoer herbruikbare uitvoer produceren (indien MODUS ontbreekt)\n" +" -p als invoer herbruikbare uitvoer produceren (indien MODUS " +"ontbreekt)\n" " -S symbolische uitvoer produceren; anders octale getallen\n" "\n" " De afsluitwaarde is 0, tenzij MODUS ongeldig is of een ongeldige optie\n" " gegeven werd." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4638,37 +5020,48 @@ msgstr "" "Op taakafsluiting wachten en de afsluitwaarde rapporteren.\n" "\n" " Wacht op elk proces aangeduid door een ID -- dat een taakaanduiding of\n" -" een proces-ID mag zijn -- en rapporteert diens afsluitwaarde. Als geen ID\n" -" gegeven is, dan wordt er gewacht op alle actieve dochterprocessen, en is\n" -" de afsluitwaarde van 'wait' automatisch 0. Als ID een taakaanduiding is,\n" +" een proces-ID mag zijn -- en rapporteert diens afsluitwaarde. Als geen " +"ID\n" +" gegeven is, dan wordt er gewacht op alle actieve dochterprocessen, en " +"is\n" +" de afsluitwaarde van 'wait' automatisch 0. Als ID een taakaanduiding " +"is,\n" " dan wordt er gewacht op alle processen in de pijplijn van die taak.\n" "\n" -" Als optie '-n' gegeven is, dan wordt gewacht op de eerstvolgende voltooiing\n" +" Als optie '-n' gegeven is, dan wordt gewacht op de eerstvolgende " +"voltooiing\n" " van een taak en wordt diens afsluitwaarde geretourneerd.\n" "\n" -" Als optie '-p' gegeven is, dan wordt het proces- of taaknummer van de taak\n" -" waarop gewacht werd toegekend aan de gegeven variabele VAR. De variabele\n" -" is ongedefinieerd voordat de waarde toegekend wordt. Deze optie is alleen\n" +" Als optie '-p' gegeven is, dan wordt het proces- of taaknummer van de " +"taak\n" +" waarop gewacht werd toegekend aan de gegeven variabele VAR. De " +"variabele\n" +" is ongedefinieerd voordat de waarde toegekend wordt. Deze optie is " +"alleen\n" " nuttig samen met optie '-n'.\n" "\n" " Als optie '-f' gegeven is, en taakbesturing is ingeschakeld, dan wordt\n" " gewacht tot de taak met de gegeven ID beëindigd is, in plaats van te\n" " wachten op een toestandswijziging.\n" "\n" -" De afsluitwaarde is die van de laatste ID; of niet-nul als ID ongeldig is,\n" -" of als een ongeldige optie gegeven werd, of als '-n' gegeven werd maar de\n" +" De afsluitwaarde is die van de laatste ID; of niet-nul als ID ongeldig " +"is,\n" +" of als een ongeldige optie gegeven werd, of als '-n' gegeven werd maar " +"de\n" " shell geen dochters heeft waarop gewacht wordt." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Op procesafsluiting wachten en de afsluitwaarde rapporteren.\n" @@ -4681,7 +5074,16 @@ msgstr "" " De afsluitwaarde is die van de laatste PID, 1 als PID ongeldig is,\n" " of 2 als een ongeldige optie gegeven werd." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4702,7 +5104,7 @@ msgstr "" "\n" " De afsluitwaarde is die van de laatst uitgevoerde opdracht." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4729,7 +5131,7 @@ msgstr "" "\n" " De afsluitwaarde is die van de laatst uitgevoerde opdracht." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4766,7 +5168,7 @@ msgstr "" "\n" " De afsluitwaarde is die van de laatst uitgevoerde opdracht." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4794,7 +5196,7 @@ msgstr "" "\n" " De afsluitwaarde is die van de PIJPLIJN." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4812,16 +5214,21 @@ msgstr "" "\n" " De afsluitwaarde is die van de laatst uitgevoerde opdracht." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4832,19 +5239,22 @@ msgstr "" " Voert eerst de opdrachten na 'if' uit; als de afsluitwaarde daarvan\n" " nul is, dan worden de opdrachten na de eerste 'then' uitgevoerd; anders\n" " de opdrachten na de eerstvolgende 'elif' (indien aanwezig) of de 'else'\n" -" (indien aanwezig). Als de afsluitwaarde van de opdrachten na een 'elif'\n" +" (indien aanwezig). Als de afsluitwaarde van de opdrachten na een " +"'elif'\n" " nul is, dan worden de opdrachten na de bijbehorende 'then' uitgevoerd.\n" " Als er geen verdere 'elif' of 'else' meer is, of zodra de opdrachten na\n" " een 'then' zijn uitgevoerd, is de 'if'-opdracht voltooid.\n" "\n" -" De afsluitwaarde van de gehele opdracht is die van de laatst uitgevoerde\n" +" De afsluitwaarde van de gehele opdracht is die van de laatst " +"uitgevoerde\n" " deelopdracht, of nul als geen enkele 'if' of 'elif' nul opleverde." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4857,11 +5267,12 @@ msgstr "" "\n" " De afsluitwaarde is die van de laatst uitgevoerde opdracht." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4874,7 +5285,7 @@ msgstr "" "\n" " De afsluitwaarde is die van de laatst uitgevoerde opdracht." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4895,12 +5306,13 @@ msgstr "" "\n" " De afsluitwaarde van coproc is 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4916,7 +5328,7 @@ msgstr "" "\n" " De afsluitwaarde is 0, tenzij NAAM onveranderbaar is." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4933,7 +5345,7 @@ msgstr "" "\n" " De afsluitwaarde is die van de laatst uitgevoerde opdracht." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4957,7 +5369,7 @@ msgstr "" "\n" " De afsluitwaarde is die van de hervatte taak." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4974,13 +5386,16 @@ msgstr "" "\n" " De afsluitwaarde is 1 als de EXPRESSIE tot 0 evalueert; anders 0." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5000,27 +5415,33 @@ msgid "" msgstr "" "Een voorwaardelijke opdracht uitvoeren.\n" "\n" -" Evalueert de gegeven conditionele expressie; afhankelijk van het resultaat\n" -" is de afsluitwaarde 0 (\"waar\") of 1 (\"onwaar\"). De expressies bestaan uit\n" -" dezelfde basiscomponenten als die van ingebouwde opdracht 'test', en kunnen\n" +" Evalueert de gegeven conditionele expressie; afhankelijk van het " +"resultaat\n" +" is de afsluitwaarde 0 (\"waar\") of 1 (\"onwaar\"). De expressies " +"bestaan uit\n" +" dezelfde basiscomponenten als die van ingebouwde opdracht 'test', en " +"kunnen\n" " worden gecombineerd met de volgende operatoren:\n" "\n" " ( EXPRESSIE ) de waarde van de gegeven expressie\n" " ! EXPRESSIE waar als EXPRESSIE onwaar is, anders onwaar\n" -" EXPR1 && EXPR2 waar als beide expressies waar zijn, anders onwaar\n" -" EXPR1 || EXPR2 onwaar als beide expressies onwaar zijn, anders waar\n" +" EXPR1 && EXPR2 waar als beide expressies waar zijn, anders " +"onwaar\n" +" EXPR1 || EXPR2 onwaar als beide expressies onwaar zijn, anders " +"waar\n" "\n" " Als '==' of '!=' als operator gebruikt wordt, dan wordt de rechter\n" " tekenreeks als patroon begrepen en wordt patroonherkenning uitgevoerd.\n" " Als '=~' als operator gebruikt wordt, dan wordt de rechter tekenreeks\n" " als een reguliere expressie begrepen.\n" "\n" -" De operatoren '&&' en '||' evalueren de tweede expressie níét als de waarde\n" +" De operatoren '&&' en '||' evalueren de tweede expressie níét als de " +"waarde\n" " van de eerste voldoende is om het eindresulaat te bepalen.\n" "\n" " De afsluitwaarde is 0 of 1, afhankelijk van EXPRESSIE." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5079,46 +5500,62 @@ msgstr "" " lijst worden de elementen van elkaar gescheiden door dubbele punten.)\n" "\n" " BASH_VERSION versie-informatie van deze 'bash'\n" -" CDPATH lijst van mappen om te doorzoeken wanneer het argument van\n" +" CDPATH lijst van mappen om te doorzoeken wanneer het argument " +"van\n" " 'cd' niet in de huidige map voorkomt\n" -" GLOBIGNORE lijst van patronen die de bestandsnamen beschrijven die bij\n" +" GLOBIGNORE lijst van patronen die de bestandsnamen beschrijven die " +"bij\n" " bestandsnaamjokertekenexpansie genegeerd moeten worden\n" " HISTFILE naam van het bestand dat uw opdrachtengeschiedenis bevat\n" -" HISTFILESIZE maximum aantal regels dat geschiedenisbestand mag bevatten\n" +" HISTFILESIZE maximum aantal regels dat geschiedenisbestand mag " +"bevatten\n" " HISTIGNORE lijst van patronen die niet in geschiedenis moeten komen\n" -" HISTSIZE maximum aantal geschiedenisregels dat huidige shell gebruikt\n" +" HISTSIZE maximum aantal geschiedenisregels dat huidige shell " +"gebruikt\n" " HOME het volledige pad naar uw thuismap\n" -" HOSTNAME de naam van de computer waarop deze 'bash' wordt uitgevoerd\n" +" HOSTNAME de naam van de computer waarop deze 'bash' wordt " +"uitgevoerd\n" " HOSTTYPE de soort CPU waarop deze 'bash' wordt uitgevoerd\n" " IGNOREEOF het aantal te negeren Ctrl-D's alvorens de shell afsluit\n" " MACHTYPE de soort machine waarop deze 'bash' wordt uitgevoerd\n" " MAILCHECK hoe vaak (in seconden) 'bash' controleert op nieuwe mail\n" -" MAILPATH lijst van bestandsnamen die 'bash' controleert op nieuwe mail\n" +" MAILPATH lijst van bestandsnamen die 'bash' controleert op nieuwe " +"mail\n" " OSTYPE de soort Unix waarop deze 'bash' wordt uitgevoerd\n" " PATH lijst van mappen waar opdrachten in gezocht moeten worden\n" -" PROMPT_COMMAND uit te voeren opdracht vóór het tonen van primaire prompt\n" +" PROMPT_COMMAND uit te voeren opdracht vóór het tonen van primaire " +"prompt\n" " PS1 tekenreeks die primaire prompt beschrijft\n" -" PS2 tekenreeks die secundaire prompt beschrijft (standaard '> ')\n" +" PS2 tekenreeks die secundaire prompt beschrijft (standaard '> " +"')\n" " PWD het volledige pad van de huidige map\n" " SHELLOPTS lijst van ingeschakelde shell-opties\n" " TERM soortnaam van de huidige terminal\n" " TIMEFORMAT opmaakvoorschrift voor de uitvoer van 'time'\n" -" auto_resume niet-leeg betekent dat één opdrachtwoord op de opdrachtregel\n" -" eerst opgezocht wordt in de lijst van gepauzeerde taken,\n" -" en indien daar gevonden, dan wordt die taak in de voorgrond\n" -" geplaatst; de waarde 'exact' betekent dat het gegeven woord\n" -" exact moet overeenkomen met een opdracht in de lijst van\n" -" gepauzeerde taken; de waarde 'substring' betekent dat een\n" +" auto_resume niet-leeg betekent dat één opdrachtwoord op de " +"opdrachtregel\n" +" eerst opgezocht wordt in de lijst van gepauzeerde " +"taken,\n" +" en indien daar gevonden, dan wordt die taak in de " +"voorgrond\n" +" geplaatst; de waarde 'exact' betekent dat het gegeven " +"woord\n" +" exact moet overeenkomen met een opdracht in de lijst " +"van\n" +" gepauzeerde taken; de waarde 'substring' betekent dat " +"een\n" " overeenkomst met een deeltekenreeks voldoende is; elke\n" -" andere waarde betekent dat het gegeven woord aan het begin\n" +" andere waarde betekent dat het gegeven woord aan het " +"begin\n" " moet staan van de opdracht van een gepauzeerde taak\n" " histchars tekens die geschiedenisexpansie en -vervanging besturen;\n" " het eerste teken is het geschiedenisvervangingsteken,\n" " gewoonlijk '!'; het tweede teken is het snelle\n" -" vervangingsteken, gewoonlijk '^'; het derde teken is het\n" +" vervangingsteken, gewoonlijk '^'; het derde teken is " +"het\n" " geschiedeniscommentaarteken, gewoonlijk '#'\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5171,7 +5608,7 @@ msgstr "" " De afsluitwaarde is 0, tenzij een ongeldig argument gegeven werd of de\n" " mapwijziging mislukte." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5220,7 +5657,7 @@ msgstr "" " De afsluitwaarde is 0, tenzij een ongeldig argument gegeven werd of de\n" " mapwijziging mislukte." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5257,7 +5694,8 @@ msgstr "" " -c de mappenstapel wissen door alle elementen te verwijderen\n" " -l paden volledig tonen, niet afgekort ten opzichte van uw thuismap\n" " -p de mappenstapel tonen met één item per regel\n" -" -v als '-p', maar met elk item voorafgegeaan wordt door zijn positie\n" +" -v als '-p', maar met elk item voorafgegeaan wordt door zijn " +"positie\n" " in de stapel\n" "\n" " Argumenten:\n" @@ -5266,10 +5704,11 @@ msgstr "" " -N Het N-de item tonen, tellend vanaf rechts, van de lijst getoond\n" " door 'dirs' wanneer opgeroepen zonder opties, beginnend bij nul.\n" "\n" -" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n" +" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er " +"een\n" " fout optrad." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5296,19 +5735,22 @@ msgstr "" " met bij elke optie de vermelding of deze al dan niet ingeschakeld is.\n" "\n" " Opties:\n" -" -o de verzameling mogelijke OPTIENAMEN naar diegene die gedefinieerd\n" +" -o de verzameling mogelijke OPTIENAMEN naar diegene die " +"gedefinieerd\n" " zijn voor gebruik met 'set -o'\n" " -p uitvoer produceren die herbruikbaar is als invoer\n" " -q uitvoer onderdrukken\n" " -s elke gegeven OPTIENAAM inschakelen\n" " -u elke gegeven OPTIENAAM uitschakelen\n" "\n" -" Zonder opties (of met alleen '-q') is de afsluitwaarde 0 indien OPTIENAAM\n" +" Zonder opties (of met alleen '-q') is de afsluitwaarde 0 indien " +"OPTIENAAM\n" " ingeschakeld is, 1 indien uitgeschakeld. De afsluitwaarde is ook 1 als\n" " een ongeldige optienaam gegeven werd, en de afsluitwaarde is 2 als een\n" " ongeldige optie gegeven werd." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5316,29 +5758,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Argumenten volgens een opmaakvoorschrift opmaken en printen.\n" @@ -5360,24 +5809,32 @@ msgstr "" " aangehaald moet worden dat het als invoer voor de shell hergebruikt\n" " kan worden. %Q is als %q, maar een precisie wordt toegepast op het\n" " onaangehaalde argument vóór het aanhalen. Verder betekent %(OPMAAK)T\n" -" dat datum-plus-tijd getoond moet worden door deze opmaak aan strftime(3)\n" +" dat datum-plus-tijd getoond moet worden door deze opmaak aan " +"strftime(3)\n" " mee te geven.\n" "\n" -" De gegeven opmaak wordt zo vaak hergebruikt als nodig is om alle argumenten\n" -" te consumeren. Als er minder argumenten zijn dan de opmaak verwacht, dan\n" -" gedragen de overtollige opmaakspecificaties zich alsof (al naar gelang) de\n" +" De gegeven opmaak wordt zo vaak hergebruikt als nodig is om alle " +"argumenten\n" +" te consumeren. Als er minder argumenten zijn dan de opmaak verwacht, " +"dan\n" +" gedragen de overtollige opmaakspecificaties zich alsof (al naar gelang) " +"de\n" " waarde nul of een lege tekenreeks gegeven werd.\n" "\n" -" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n" +" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er " +"een\n" " schrijf- of toekenningsfout optrad." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5391,8 +5848,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5400,7 +5859,8 @@ msgstr "" "Aangeven hoe argumenten door 'readline' gecompleteerd moeten worden.\n" "\n" " Geeft voor elke gegeven NAAM aan hoe de argumenten gecompleteerd dienen\n" -" te worden. Zonder opties worden de bestaande completeringsvoorschriften\n" +" te worden. Zonder opties worden de bestaande " +"completeringsvoorschriften\n" " getoond (in een vorm die als invoer hergebruikt kan worden).\n" "\n" " Opties:\n" @@ -5421,13 +5881,19 @@ msgstr "" " De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er\n" " een fout optrad." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5438,16 +5904,20 @@ msgstr "" " genereert. Als het optionele argument WOORD aanwezig is, worden alleen\n" " de daarbij passende completeringen gegenereerd.\n" "\n" -" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n" +" De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er " +"een\n" " fout optrad." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5472,7 +5942,8 @@ msgstr "" "Completeringsopties wijzigen of tonen.\n" "\n" " Wijzigt de completeringsopties van elke gegeven NAAM, of als geen NAAM\n" -" gegeven is, die van de huidige completering. Als geen OPTIE gegeven is,\n" +" gegeven is, die van de huidige completering. Als geen OPTIE gegeven " +"is,\n" " dan worden de completeringsopties van elke gegeven NAAM getoond, of die\n" " van de huidige completering.\n" "\n" @@ -5486,28 +5957,35 @@ msgstr "" "\n" " Elke NAAM dient te refereren aan een opdracht waarvoor reeds een\n" " completeringsvoorschrift gedefinieerd is via de opdracht 'complete'.\n" -" Als geen NAAM gegeven is, dan dient 'compopt' aangeroepen te worden door\n" -" een functie die momenteel completeringen genereert; dan worden de opties\n" +" Als geen NAAM gegeven is, dan dient 'compopt' aangeroepen te worden " +"door\n" +" een functie die momenteel completeringen genereert; dan worden de " +"opties\n" " voor die draaiende completeringsgenerator gewijzigd.\n" "\n" " De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of voor\n" " NAAM geen completeringsvoorschrift gedefinieerd is." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5520,11 +5998,13 @@ 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 "" "Regels inlezen in een geïndexeerde array-variabele.\n" @@ -5537,13 +6017,17 @@ msgstr "" " -n AANTAL maximaal dit aantal regels kopiëren (0 = alles)\n" " -O BEGIN met toekennen beginnen bij deze index (standaard 0)\n" " -s AANTAL dit aantal regels overslaan\n" -" -t nieuweregelteken aan eind van elke gelezen regel verwijderen\n" -" -u BES.DES. uit deze bestandsdescriptor lezen i.p.v. uit standaardinvoer\n" +" -t nieuweregelteken aan eind van elke gelezen regel " +"verwijderen\n" +" -u BES.DES. uit deze bestandsdescriptor lezen i.p.v. uit " +"standaardinvoer\n" " -C FUNCTIE deze functie evalueren na elke HOEVEELHEID regels\n" -" -c HOEVEELHEID het aantal te lezen regels voor elke aanroep van FUNCTIE\n" +" -c HOEVEELHEID het aantal te lezen regels voor elke aanroep van " +"FUNCTIE\n" "\n" " Argument:\n" -" ARRAY naam van array-variabele waarin regels ingelezen moeten worden\n" +" ARRAY naam van array-variabele waarin regels ingelezen moeten " +"worden\n" "\n" " Als '-C' gegeven is zonder '-c', is de standaard-HOEVEELHEID 5000.\n" " Wanneer FUNCTIE aangeroepen wordt, dan wordt hieraan de index van het\n" @@ -5553,10 +6037,11 @@ msgstr "" " Als geen expliciet BEGIN gegeven is, wordt het array gewist alvorens\n" " met toekennen te beginnen.\n" "\n" -" De afsluitwaarde is 0, tenzij ARRAY alleen-lezen is of geen array is, of\n" +" De afsluitwaarde is 0, tenzij ARRAY alleen-lezen is of geen array is, " +"of\n" " een ongeldige optie gegeven werd." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5566,6 +6051,31 @@ msgstr "" "\n" " Een synoniem voor 'mapfile'." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "De context van de aanroep van de huidige functie tonen.\n" +#~ "\n" +#~ " Zonder argument produceert het \"$regelnummer $bestandsnaam\"; met\n" +#~ " argument \"$regelnummer $functienaam $bestandsnaam\". Deze tweede\n" +#~ " vorm kan gebruikt worden om een 'stack trace' te produceren.\n" +#~ "\n" +#~ " De waarde van het argument geeft aan hoeveel frames er teruggegaan\n" +#~ " moet worden vanaf de huidige; het bovenste frame heeft nummer 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "waarschuwing: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: ongeldige sleutel voor associatief array" @@ -5596,7 +6106,9 @@ msgstr "" #~ msgid "times" #~ msgstr "times" -#~ msgid "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>\n" +#~ msgid "" +#~ "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl." +#~ "html>\n" #~ msgstr "" #~ "De licentie is GPLv2+: GNU GPL versie 2 of later.\n" #~ "Zie http://gnu.org/licenses/gpl.html voor de volledige tekst.\n" diff --git a/po/pl.gmo b/po/pl.gmo index 4adbed0289469416870a1442fdf18d55adce0216..b60a93e7366e85e29a1259884dab282d14ac2e45 100644 GIT binary patch delta 12616 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 L9j%U8srvr_fSi8z delta 51400 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 diff --git a/po/pl.po b/po/pl.po index b8bd94a57..7ab1baabb 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-06-19 22:15+0200\n" "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" @@ -17,128 +17,133 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "nieprawidłowy indeks tablicy" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: usuwanie atrybutu nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: nie można przekształcić tablicy indeksowanej na asocjacyjną" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: nie można przypisać do nienumerycznego indeksu" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: przy przypisaniu do tablicy asocjacyjnej należy użyć nawiasów" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: nie można utworzyć: %s" # ??? -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command: nie można znaleźć mapy klawiszy dla polecenia" +msgstr "" +"bash_execute_unix_command: nie można znaleźć mapy klawiszy dla polecenia" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: pierwszym drukowalnym znakiem nie jest `\"'" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "brak zamykającego `%c' w %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: brak separującego dwukropka" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "`%s': nie można usunąć dowiązania w mapie poleceń" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "rozwijanie nawiasów: nie można przydzielić pamięci dla %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" -msgstr "rozwijanie nawiasów: nie udało się przydzielić pamięci dla elementów w liczbie %u" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" +msgstr "" +"rozwijanie nawiasów: nie udało się przydzielić pamięci dla elementów w " +"liczbie %u" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "rozwijanie nawiasów: nie udało się przydzielić pamięci dla `%s'" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "`%s': błędna nazwa aliasu" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "edycja wiersza nie została włączona" # ??? -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "`%s': nieprawidłowa nazwa mapy klawiszy" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: nie można odczytać: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "`%s': nie znana nazwa funkcji" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s nie jest przypisany do żadnego klawisza.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s może być wywołany przez " # ??? -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "`%s': nie można usunąć dowiązania" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "licznik pętli" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "ma sens tylko w pętli `for', `while' lub `until'" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -147,360 +152,380 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Zwrócenie kontekstu wywołania bieżącej procedury.\n" " \n" -" Bez WYRAŻENIA zwracane jest \"$linia $plik\". Z WYRAŻENIEM zwracane jest\n" -" \"$linia $procedura $plik\"; dodatkowe informacje służą do udostępnienia\n" +" Bez WYRAŻENIA zwracane jest \"$linia $plik\". Z WYRAŻENIEM zwracane " +"jest\n" +" \"$linia $procedura $plik\"; dodatkowe informacje służą do " +"udostępnienia\n" " śladu stosu.\n" " \n" " Wartość WYRAŻENIA określa o ile ramek wywołań względem bieżącej ramki\n" -" należy się cofnąć; numer najwyższej ramki to 0." +" należy się cofnąć; numer najwyższej ramki to 0.\n" +" \n" +" Stan wyjściowy:\n" +" Polecenie zwraca 0, chyba że powłoka nie wykonuje funkcji lub WYRAŻENIE\n" +" jest nieprawidłowe." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "Nie ustawiono HOME" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "za dużo argumentów" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "zerowy katalog" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "Nie ustawiono OLDPWD" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "linia %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "uwaga: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: składnia: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: opcja wymaga argumentu" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: wymagany argument numeryczny" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: nie znaleziono" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: nieprawidłowa opcja" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: nieprawidłowa nazwa opcji" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': nieprawidłowy identyfikator" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "błędna liczba ósemkowa" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "błędna liczba szesnastkowa" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "nieprawidłowa liczba" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: nieprawidłowo określony sygnał" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "`%s': nie jest to nr PID ani prawidłowe określenie zadania" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: zmienna tylko do odczytu" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: nie można przypisać" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s poza zakresem" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s poza zakresem" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: brak takiego zadania" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: brak kontroli zadań" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "brak kontroli zadań" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: ograniczony" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "ograniczony" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: nie jest to polecenie powłoki" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "błąd zapisu: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "błąd podczas ustawiania atrybutów terminala: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "błąd podczas pobierania atrybutów terminala: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: błąd przy określaniu katalogu bieżącego: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: niejednoznaczne określenie zadania" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "pomoc nie jest dostępna w tej wersji" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: nie jest tablicą indeksowaną" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: nie można anulować definicji: %s jest tylko do odczytu" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: nie można anulować definicji" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nieprawidłowa nazwa akcji" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: brak definicji dla uzupełnienia" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "uwaga: opcja -F może działać inaczej niż oczekiwano" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "uwaga: opcja -C może działać inaczej niż oczekiwano" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "aktualnie nie jest wykonywana funkcja dopełniania" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "można używać tylko w funkcji" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "nie można używać `-f' do tworzenia funkcji" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: funkcja tylko do odczytu" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: zmienna referencyjna nie może być tablicą" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: zmienna referencyjna nie może wskazywać na siebie" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: cykliczne odwołanie do nazwy" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "`%s': błędna nazwa zmiennej przy odwołaniu do nazwy" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: nie można w ten sposób unicestwić zmiennej tablicowej" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: nie można przekształcić tablicy asocjacyjnej na indeksowaną" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: przypisanie złożonej tablicy z cytowaniem jest przestarzałe" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "ładowanie dynamiczne nie jest dostępne" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "nie można otworzyć obiektu współdzielonego %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "nie można znaleźć %s w obiekcie współdzielonym %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: dynamiczne polecenie wbudowane już załadowane" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "funkcja ładująca dla %s zwraca niepowodzenie (%d): nie załadowano" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: nie jest ładowany dynamicznie" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: nie można usunąć: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: jest katalogiem" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: nie jest zwykłym plikiem" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: plik jest za duży" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: nie można uruchomić pliku binarnego" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: nie można uruchomić: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "wylogowanie\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "to nie jest powłoka logowania: użyj `exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Istnieją zatrzymane zadania.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Istnieją działające zadania.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "nie znaleziono polecenia" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "specyfikacja historii" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: nie udało się otworzyć pliku tymczasowego: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "bieżące" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "zadanie %d uruchomiono bez kontroli zadań" @@ -515,11 +540,11 @@ msgstr "%s: niedozwolona opcja -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: opcja wymaga argumentu -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "zapamiętywanie ścieżek poleceń w tablicy asocjacyjnej wyłączone" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: tablica asocjacyjna pusta\n" @@ -546,17 +571,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." msgstr "" "żaden temat pomocy nie pasuje do `%s'. Spróbuj `help help', `man -k %s'\n" "lub `info %s'." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: nie można otworzyć: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -571,27 +597,38 @@ msgstr "" "zobaczyć listę.\n" "Napisz `help nazwa', aby otrzymać więcej informacji o funkcji `nazwa'.\n" "Użyj `info bash', aby otrzymać więcej informacji ogólnych o powłoce.\n" -"Użyj `man -k' lub `info', aby otrzymać więcej informacji o poleceniach z tej\n" +"Użyj `man -k' lub `info', aby otrzymać więcej informacji o poleceniach z " +"tej\n" "listy.\n" "\n" "Gwiazdka (*) po nazwie oznacza, że dane polecenie jest wyłączone.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "nie można używać więcej niż jednego spośród -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "pozycja historii" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "pusta nazwa zmiennej tablicowej" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parametr pusty lub nieustawiony" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: nieprawidłowy znacznik czasu" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: rozwinięcie wg historii nie powiodło się" @@ -605,113 +642,113 @@ msgstr "%s: inlib nie powiodło się" msgid "no other options allowed with `-x'" msgstr "nie można używać innych opcji przy `-x'" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumentami muszą być numery procesów lub zadań" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Nieznany błąd" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "spodziewano się wyrażenia" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: nie jest tablicą indeksowaną" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: nieprawidłowo określony deskryptor pliku" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: nieprawidłowy deskryptor pliku: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: błędna liczba linii" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: błędny początek tablicy" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: błędna liczba linii między wywołaniami" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "pusta nazwa zmiennej tablicowej" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "wymagana obsługa zmiennych tablicowych" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "`%s': brak znaku formatującego" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "`%c': błędne określenie formatu czasu" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "`%c': nieprawidłowy znak formatujący" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "uwaga: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "problem z analizą formatu: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "brak cyfry szesnastkowej dla \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "brak cyfry unikodowej dla \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "brak innego katalogu" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: nieprawidłowy argument" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<brak katalogu bieżącego>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "pusty stos katalogów" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "indeks stosu katalogów" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -726,10 +763,12 @@ 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 "" "Wypisanie listy aktualnie pamiętanych katalogów. Katalogi umieszczane są\n" @@ -737,7 +776,8 @@ msgstr "" " za pomocą polecenia `popd'.\n" " \n" " Opcje:\n" -" -c\twyczyszczenie stosu katalogów poprzez usunięcie wszystkich elementów\n" +" -c\twyczyszczenie stosu katalogów poprzez usunięcie wszystkich " +"elementów\n" " -l\tniewypisywanie katalogów względem kat. domowego użytkownika\n" " \tw postaci skróconej z tyldą\n" " -p\twypisanie stosu katalogów po jednym wpisie w linii\n" @@ -751,7 +791,7 @@ msgstr "" " -N\tWypisanie N-tej pozycji licząc od prawej strony listy wypisywanej\n" "\tprzez dirs wywołane bez opcji, począwszy od zera." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -795,7 +835,7 @@ msgstr "" " \n" " Zawartość stosu katalogów można zobaczyć za pomocą polecenia `dirs'." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -834,320 +874,333 @@ msgstr "" " \n" " Zawartość stosu katalogów można zobaczyć za pomocą polecenia `dirs'." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: nieprawidłowo określony limit czasu" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "błąd odczytu: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "wyjście przez `return' możliwe tylko z funkcji lub skryptu" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "nie można jednocześnie anulować definicji funkcji i zmiennej" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: nie jest zmienną tablicową" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: nie jest funkcją" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: nie można wyeksportować" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "licznik przesunięcia" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "nie można opcji powłoki jednocześnie ustawić i unieważnić" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: nieprawidłowa nazwa opcji powłoki" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "wymagany argument w postaci nazwy pliku" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: nie znaleziono pliku" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "nie można wstrzymać" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "nie można wstrzymać powłoki logowania" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s jest aliasem do %s'\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s jest słowem kluczowym powłoki\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s jest funkcją\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s jest specjalnym wewnętrznym poleceniem powłoki\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s jest funkcją\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s jest wewnętrznym poleceniem powłoki\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s jest %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "ścieżka do %s jest zapamiętana (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: nieprawidłowy argument stanowiący ograniczenie" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': złe polecenie" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: nie można odczytać ograniczenia: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "ograniczenie" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: nie można zmienić ograniczenia: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "liczba ósemkowa" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': nieprawidłowy operator trybu symbolicznego" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': nieprawidłowy znak trybu symbolicznego" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " linia " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "ostatnie polecenie: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Przerywanie..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORM: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "DIAGNOSTYCZNE ostrzeżenie: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "nieznany błąd polecenia" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "zły rodzaj polecenia" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "zły łącznik" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "zły skok" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: nieustawiona zmienna" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aprzekroczony czas oczekiwania na dane wejściowe: auto-wylogowanie\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "nie można przekierować standardowego wejścia z /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': nieprawidłowy znak formatujący" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: koproces [%d:%s] nadal istnieje" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "błąd potoku" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: przekroczono maksymalny poziom zagnieżdżenia polecenia eval (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: przekroczono maksymalny poziom zagnieżdżenia polecenia source (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: przekroczono maksymalny poziom zagnieżdżenia funkcji (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: ograniczony: nie można podawać `/' w nazwach poleceń" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: nie znaleziono polecenia" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: zły interpreter" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: nie można uruchomić: nie znaleziono wymaganego pliku" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: zły interpreter" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: nie można uruchomić pliku binarnego: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "`%s' jest specjalnym poleceniem wewnętrznym" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "nie można skopiować deskryptora pliku %d do %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "przekroczone ograniczenie poziomu rekursji dla wyrażenia" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "niedomiar stosu rekursji" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "błąd składniowy w wyrażeniu" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "próba przypisania do nie-zmiennej" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "błąd składniowy w przypisaniu zmiennej" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "dzielenie przez 0" # ??? -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "błąd: zły prefiks operatora przypisującego" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "spodziewano się `:' w wyrażeniu warunkowym" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "wykładnik mniejszy niż 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" -msgstr "spodziewany identyfikator po operatorze preinkrementacji lub predekrementacji" +msgstr "" +"spodziewany identyfikator po operatorze preinkrementacji lub predekrementacji" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "brakujący `)'" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "błąd składni: spodziewany argument" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "błąd składni: nieprawidłowy operator arytmetyczny" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (błędny znacznik to \"%s\")" @@ -1164,7 +1217,7 @@ msgstr "błędna stała całkowita" msgid "value too great for base" msgstr "wartość za duża na podstawę" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: błąd w wyrażeniu\n" @@ -1173,47 +1226,52 @@ msgstr "%s: błąd w wyrażeniu\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: niemożliwy dostęp do katalogów nadrzędnych" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "`%s' jest specjalnym poleceniem wewnętrznym" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "nie można wyłączyć trybu nieblokującego dla deskryptora %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "nie można przydzielić nowego deskryptora pliku dla wejścia basha z %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: bufor dla nowego deskryptora %d już istnieje" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: PĘTLA: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: PĘTLA: psi (%d) == storage[psi].bucket_next" # ??? -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "proces o PID %d występuje w działającym zadaniu %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "usuwanie zatrzymanego zadania %d z grupą procesów %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) oznaczony jako nadal żywy" @@ -1223,137 +1281,138 @@ msgstr "add_process: pid %5ld (%s) oznaczony jako nadal żywy" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: brak takiego PID-u" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Sygnał %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Zakończono" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Zatrzymano" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Zatrzymano(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Działa" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Zakończono(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Kod wyjścia %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Stan nieznany" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(zrzut pamięci) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (katalog: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid potomka (%ld na %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: PID %ld nie jest potomkiem tej powłoki" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Brak rekordu dla procesu %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: zadanie %d jest zatrzymane" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: brak bieżących zadań" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: zadanie zostało przerwane" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: zadanie %d już pracuje w tle" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" -msgstr "waitchld: wyłączanie WNOHANG w celu uniknięcia nieskończonego oczekiwania" +msgstr "" +"waitchld: wyłączanie WNOHANG w celu uniknięcia nieskończonego oczekiwania" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: linia %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (zrzut pamięci)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(katalog: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp nie powiodło się" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: brak kontroli zadań w tle" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: dyscyplina linii" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "nie można ustawić grupy procesów terminala (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "w tej powłoce nie ma kontroli zadań" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: założenie, że %s nie jest spełnione\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1362,377 +1421,392 @@ msgstr "" "\r\n" "malloc: %s:%d: spartaczone założenie\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "nieznany" # ??? -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: nieprawidłowy blok na liście wolnych bloków" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: wywołane dla bloku, który już został zwolniony" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: wywołane dla bloku, który nie został przydzielony" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: wykryto niedomiar; mh_nbytes poza zakresem" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: wykryto niedomiar; uszkodzenie magic8" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: rozmiar początkowy i końcowy fragmentu są różne" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: wywołane dla bloku, który nie został przydzielony" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: wykryto niedomiar; mh_nbytes poza zakresem" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: wykryto niedomiar; uszkodzenie magic8" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: rozmiar początkowy i końcowy fragmentu są różne" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: tablica alokacji jest pełna podczas FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p już znajduje się w tablicy jako przydzielony?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p już znajduje się w tablicy jako wolny?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "nieprawidłowa podstawa" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: nieznany host" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: nieznana usługa" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: źle określona ścieżka sieciowa" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "operacje sieciowe nie są wspierane" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: nie można zmienić lokalizacji (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: nie można zmienić lokalizacji (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: nie można zmienić lokalizacji (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: nie można zmienić lokalizacji (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Masz pocztę w $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Masz nową pocztę w $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Poczta w %s jest przeczytana\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "błąd składni: oczekiwano wyrażenia arytmetycznego" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "błąd składni: oczekiwany `;'" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "błąd składni: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: zły rodzaj instrukcji %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "dokument miejscowy w linii %d ograniczony końcem pliku (oczekiwano `%s')" +msgstr "" +"dokument miejscowy w linii %d ograniczony końcem pliku (oczekiwano `%s')" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: instrukcja przekierowania `%d' poza zakresem" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) przekracza SIZE_MAX (%lu): linia skrócona" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) przekracza SIZE_MAX (%lu): linia " +"skrócona" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "błąd zapisu: %s" -#: parse.y:2921 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "przekroczono maksymalną liczbę dokumentów w miejscu" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "nieoczekiwany EOF podczas poszukiwania pasującego `%c'" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "nieoczekiwany EOF podczas poszukiwania `]]'" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "błąd składni w wyrażeniu warunkowym: nieoczekiwany znacznik `%s'" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "błąd składni w wyrażeniu warunkowym" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "nieoczekiwany znacznik `%s', oczekiwano `)'" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "oczekiwano `)'" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "nieoczekiwany argument `%s' jednoargumentowego operatora warunkowego" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "nieoczekiwany argument jednoargumentowego operatora warunkowego" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "nieoczekiwany argument `%s', oczekiwano dwuarg. operatora warunkowego" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "oczekiwano dwuargumentowego operatora warunkowego" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "nieoczekiwany argument `%s' dwuargumentowego operatora warunkowego" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "nieoczekiwany argument dwuargumentowego operatora warunkowego" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "nieoczekiwany znacznik `%c' w poleceniu warunkowym" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "nieoczekiwany znacznik `%s' w poleceniu warunkowym" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "nieoczekiwany znacznik %d w poleceniu warunkowym" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "błąd składni przy nieoczekiwanym znaczniku `%s'" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "błąd składni przy `%s'" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "błąd składni: nieoczekiwany koniec pliku" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "błąd składni: nieoczekiwany koniec pliku" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "błąd składni" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Użyj \"%s\", aby opuścić tę powłokę.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "nieoczekiwany EOF podczas poszukiwania pasującego `)'" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "uzupełnienie: nie znaleziono funkcji `%s'" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: możliwe zapętlenie wznowień" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: zły łącznik `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: nieprawidłowy deskryptor pliku" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: pusty wskaźnik pliku" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': nieprawidłowy znak formatujący" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "deskryptor pliku poza zakresem" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: niejednoznaczne przekierowanie" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: nie można nadpisać istniejącego pliku" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: ograniczony: nie można przekierować wyjścia" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "nie można utworzyć pliku tymczasowego dla dokumentu miejscowego: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: nie można przypisać deskryptora pliku do zmiennej" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port nie są wspierane bez sieci" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "błąd przekierowania: nie można powielić deskryptora pliku" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "nie można znaleźć /tmp, proszę o utworzenie!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp musi być prawidłową nazwą katalogu" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "tryb ładnego wypisywania jest ignorowany w powłokach interaktywnych" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: nieprawidłowa opcja" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "nie można ustawić uid-a na %d: efektywny uid %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "nie można ustawić gid-a na %d: efektywny gid %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "nie można uruchomić debuggera; tryb diagnostyczny wyłączony" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: jest katalogiem" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Nie mam nazwy!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, wersja %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1741,51 +1815,55 @@ msgstr "" "Użycie:\t%s [długa opcja GNU] [opcja] ...\n" "\t%s [długa opcja GNU] [opcja] plik-skryptu ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Długie opcje GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Opcje powłoki:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD lub -c polecenie lub -O shopt_option\t\t(tylko wywołanie)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s lub -o opcja\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Aby uzyskać więcej informacji o opcjach powłoki, napisz `%s -c \"help set\"'.\n" +msgstr "" +"Aby uzyskać więcej informacji o opcjach powłoki, napisz `%s -c \"help " +"set\"'.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Aby uzyskać więcej informacji o poleceniach wewnętrznych powłoki,\n" "napisz `%s -c help'.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Do zgłaszania błędów należy używać polecenia `bashbug'.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "strona domowa basha: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "Ogólna pomoc przy użytkowaniu oprogramowania GNU: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Ogólna pomoc przy użytkowaniu oprogramowania GNU: <http://www.gnu.org/" +"gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: nieprawidłowa operacja" @@ -1955,282 +2033,309 @@ msgstr "Żądanie informacji" msgid "Unknown Signal #%d" msgstr "Nieznany sygnał #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "złe podstawienie: brak zamykającego `%s' w %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: nie można przypisać listy do elementu tablicy" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "nie można utworzyć potoku dla podstawienia procesu" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "nie można utworzyć procesu potomnego dla podstawienia procesu" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "nie można otworzyć nazwanego potoku %s do odczytu" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "nie można otworzyć nazwanego potoku %s do zapisu" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "nie można powielić nazwanego potoku %s jako deskryptor %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "podstawienie polecenia: zignorowano zerowy bajt na wejściu" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: nie można powielić potoku jako deskryptora 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "nie można utworzyć potoku dla podstawienia polecenia" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "nie można utworzyć procesu potomnego dla podstawienia polecenia" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: nie można powielić potoku jako deskryptora 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: nieprawidłowa nazwa zmiennej przy odwołaniu do nazwy" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: błędne rozwinięcie niebezpośrednie" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "`%s': błędna nazwa zmiennej" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parametr nieustawiony" +msgid "%s: bad substitution" +msgstr "%s: złe podstawienie" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parametr pusty lub nieustawiony" +msgid "%s: parameter not set" +msgstr "%s: parametr nieustawiony" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: wyrażenie dla podłańcucha < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: złe podstawienie" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: nie można przypisywać w ten sposób" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "przyszłe wersje powłoki będą wymuszać obliczenie jako podstawienie arytmetyczne" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"przyszłe wersje powłoki będą wymuszać obliczenie jako podstawienie " +"arytmetyczne" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "złe podstawienie: brak zamykającego \"`\" w %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "brak pasującego: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "oczekiwano argumentu" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: oczekiwano wyrażenia całkowitego" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "oczekiwano `)'" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "oczekiwano `)', znaleziono %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: oczekiwano operatora dwuargumentowego" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: oczekiwano operatora jednoargumentowego" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "brakujący `]'" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "błąd składni: oczekiwano `%s'" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "nieprawidłowy numer sygnału" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "obsługa pułapki: przekroczono maksymalny poziom obsługi pułapek (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: zła wartość trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: obsługa sygnału jest ustawiona na SIG_DFL, wysyłając %d (%s) do siebie" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: obsługa sygnału jest ustawiona na SIG_DFL, wysyłając %d " +"(%s) do siebie" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: zły sygnał %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "błąd importu definicji funkcji dla `%s'" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "poziom powłoki (%d) jest za duży, ustawiono na 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "przekroczono maksymalną liczbę dokumentów w miejscu" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: brak kontekstu funkcji w bieżącym zakresie" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: nie można przypisać wartości do zmiennej" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: nie można odziedziczyć wartości z niezgodnego typu" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: przypisanie wartości całkowitej przy odwołaniu do nazwy" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: brak kontekstu funkcji w bieżącym zakresie" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s ma pusty exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "nieprawidłowy znak %d w exportstr dla %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "brak `=' w exportstr dla %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: nagłówek shell_variables poza kontekstem funkcji" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: brak kontekstu global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: nagłówek shell_variables poza zakresem tymczasowego środowiska" +msgstr "" +"pop_scope: nagłówek shell_variables poza zakresem tymczasowego środowiska" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: nie można otworzyć jako PLIK" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: nieprawidłowa wartość dla deskryptora pliku do śledzenia" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: wartość zgodności poza zakresem" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Licencja GPLv3+: GNU GPL wersja 3 lub późniejsza <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Licencja GPLv3+: GNU GPL wersja 3 lub późniejsza <http://gnu.org/licenses/" +"gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, wersja %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "To oprogramowanie jest wolnodostępne; można je swobodnie zmieniać i rozpowszechniać." +msgstr "" +"To oprogramowanie jest wolnodostępne; można je swobodnie zmieniać i " +"rozpowszechniać." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Nie ma ŻADNEJ GWARANCJI w granicach dopuszczanych przez prawo." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: nie można przydzielić %lu bajtów (przydzielono %lu)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: nie można przydzielić %lu bajtów" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: nie można przydzielić %lu bajtów (przydzielono %lu)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: nie można przydzielić %lu bajtów" @@ -2244,8 +2349,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] nazwa [nazwa ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpvsPVSX] [-m mapa] [-f plik] [-q nazwa] [-u nazwa] [-r sekwencja] [-x sekwencja:polecenie-powłoki] [sekwencja:funkcja-readline lub polecenie-readline]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpvsPVSX] [-m mapa] [-f plik] [-q nazwa] [-u nazwa] [-r sekwencja] [-" +"x sekwencja:polecenie-powłoki] [sekwencja:funkcja-readline lub polecenie-" +"readline]" #: builtins.c:56 msgid "break [n]" @@ -2264,7 +2374,8 @@ msgid "caller [expr]" msgstr "caller [wyrażenie]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [katalog]" #: builtins.c:68 @@ -2276,12 +2387,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] polecenie [arg ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [nazwa[=wartość] ...] lub declare -p [-aAfFilnrtux] [nazwa ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [nazwa[=wartość] ...] lub declare -p [-aAfFilnrtux] " +"[nazwa ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] nazwa[=wartość] ... lub typeset -p [-aAfFilnrtux] [nazwa ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] nazwa[=wartość] ... lub typeset -p [-aAfFilnrtux] " +"[nazwa ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2321,7 +2440,8 @@ msgstr "logout [n]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "fc [-e nazwa-ed] [-lnr] [pierwszy] [ostatni] lub fc -s [wz=zam] [polecenie]" +msgstr "" +"fc [-e nazwa-ed] [-lnr] [pierwszy] [ostatni] lub fc -s [wz=zam] [polecenie]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2340,8 +2460,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [wzorzec ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d offset] [n] lub history -anrw [plik] lub history -ps arg [arg ...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d offset] [n] lub history -anrw [plik] lub history -ps arg " +"[arg ...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2352,16 +2476,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [zadanie ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s sygnał | -n numer-sygnału | -sygnał] pid | zadanie ... lub kill -l [sygnał]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s sygnał | -n numer-sygnału | -sygnał] pid | zadanie ... lub kill -l " +"[sygnał]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a tablica] [-d separator] [-i tekst] [-n liczba] [-N liczba] [-p zachęta] [-t czas] [-u fd] [nazwa ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a tablica] [-d separator] [-i tekst] [-n liczba] [-N liczba] [-" +"p zachęta] [-t czas] [-u fd] [nazwa ...]" #: builtins.c:140 msgid "return [n]" @@ -2408,7 +2541,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] sygnał ...]" #: builtins.c:168 @@ -2432,106 +2566,135 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAZWA [in SŁOWA ... ] ; do POLECENIA; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( wyr1; wyr2; wyr3 )); do POLECENIA; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAZWA [in SŁOWA ... ;] do POLECENIA; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] potok" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case SŁOWO in [WZORZEC [| WZORZEC]...) POLECENIA ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if POLECENIA; then POLECENIA; [ elif POLECENIA; then POLECENIA; ]... [ else POLECENIA; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if POLECENIA; then POLECENIA; [ elif POLECENIA; then POLECENIA; ]... [ else " +"POLECENIA; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while POLECENIA; do POLECENIA-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until POLECENIA; do POLECENIA-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAZWA] polecenie [przekierowania]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function nazwa { POLECENIA ; } lub nazwa () { POLECENIA ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ POLECENIA ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "zadanie [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( wyrażenie ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ wyrażenie ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "zmienne - nazwy i znaczenie niektórych zmiennych powłoki" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | katalog]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [nazwa-opcji ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [argumenty]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opcja] [-A akcja] [-G wzorzec-glob] [-W lista-słów] [-F funkcja] [-C polecenie] [-X wzorzec-filtra] [-P przedrostek] [-S przyrostek] [nazwa ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o opcja] [-A akcja] [-G wzorzec-" +"glob] [-W lista-słów] [-F funkcja] [-C polecenie] [-X wzorzec-filtra] [-P " +"przedrostek] [-S przyrostek] [nazwa ...]" -#: builtins.c:235 -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 opcja] [-A akcja] [-G wzorzec-glob] [-W lista-słów] [-F funkcja] [-C polecenie] [-X wzorzec-filtra] [-P przedrostek ] [-S przyrostek] [słowo]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o opcja] [-A akcja] [-G wzorzec-glob] [-W lista-" +"słów] [-F funkcja] [-C polecenie] [-X wzorzec-filtra] [-P przedrostek ] [-S " +"przyrostek] [słowo]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o opcja] [-DEI] [nazwa ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d separator] [-n liczba] [-O początek] [-s liczba] [-t] [-u fd] [-C wywołanie] [-c co-ile] [tablica]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d ogranicznik] [-n liczba] [-O początek] [-s liczba] [-t] [-u fd] [-C wywołanie] [-c krok] [tablica]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d separator] [-n liczba] [-O początek] [-s liczba] [-t] [-u fd] [-" +"C wywołanie] [-c co-ile] [tablica]" -#: builtins.c:256 +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d ogranicznik] [-n liczba] [-O początek] [-s liczba] [-t] [-u " +"fd] [-C wywołanie] [-c krok] [tablica]" + +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2546,7 +2709,8 @@ 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 "" "Definiowanie i wyświetlanie aliasów.\n" @@ -2554,8 +2718,10 @@ msgstr "" " Bez argumentów `alias' wypisuje na standardowym wyjściu listę aliasów\n" " w postaci alias NAZWA=WARTOŚĆ.\n" " \n" -" W przeciwnym przypadku definiowany jest alias dla każdej NAZWY, dla której\n" -" podano WARTOŚĆ. Spacja na końcu WARTOŚCI powoduje, że podczas rozwijania\n" +" W przeciwnym przypadku definiowany jest alias dla każdej NAZWY, dla " +"której\n" +" podano WARTOŚĆ. Spacja na końcu WARTOŚCI powoduje, że podczas " +"rozwijania\n" " tego aliasu podstawienie aliasów będzie przeprowadzone także dla\n" " następnego słowa.\n" " \n" @@ -2567,7 +2733,7 @@ msgstr "" " Polecenie alias zwraca prawdę, chyba że poda się NAZWĘ, dla której nie\n" " zdefiniowano aliasu." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2583,7 +2749,7 @@ msgstr "" " \n" " Zwracana jest prawda, chyba że NAZWA nie jest istniejącym aliasem." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2595,25 +2761,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2623,41 +2794,52 @@ msgstr "" " \n" " Przypisanie sekwencji klawiszy do funkcji Readline lub makra albo\n" " ustawienie zmiennej Readline. Składnia pozbawiona opcji jest równoważna\n" -" stosowanej w ~/.inputrc, ale musi być przekazana jako jeden argument, np.:\n" +" stosowanej w ~/.inputrc, ale musi być przekazana jako jeden argument, " +"np.:\n" " bind '\"\\C-x\\C-r\": re-read-init-file'.\n" " \n" " Opcje:\n" " -m MAPA Użycie MAPY jako mapy klawiatury na czas tego\n" -" polecenia. Dozwolone nazwy map klawiatury to emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" polecenia. Dozwolone nazwy map klawiatury to " +"emacs,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command i vi-insert.\n" " -l Wypisanie nazw funkcji.\n" " -P Wypisanie nazw funkcji i dowiązań.\n" -" -p Wypisanie funkcji i dowiązań w postaci nadającej się\n" +" -p Wypisanie funkcji i dowiązań w postaci nadającej " +"się\n" " do użycia jako dane wejściowe.\n" -" -S Wypisanie sekwencji klawiszy wywołujących makra oraz\n" +" -S Wypisanie sekwencji klawiszy wywołujących makra " +"oraz\n" " ich wartości.\n" -" -s Wypisanie sekwencji klawiszy wywołujących makra oraz\n" -" ich wartości w postaci nadającej się do użycia jako\n" +" -s Wypisanie sekwencji klawiszy wywołujących makra " +"oraz\n" +" ich wartości w postaci nadającej się do użycia " +"jako\n" " dane wejściowe.\n" " -V Wypisanie nazw zmiennych i ich wartości.\n" " -v Wypisanie nazw zmiennych i ich wartości w postaci\n" " nadającej się do użycia jako dane wejściowe.\n" -" -q nazwa-funkcji Określenie, które klawisze wywołują zadaną funkcję.\n" +" -q nazwa-funkcji Określenie, które klawisze wywołują zadaną " +"funkcję.\n" " -u nazwa-funkcji Anulowanie wszystkich dowiązań dla klawiszy\n" " przypisanych do funkcji o podanej nazwie.\n" " -r sekwencja Usunięcie dowiązania dla SEKWENCJI klawiszy.\n" " -f plik Odczyt dowiązań dla klawiszy z podanego PLIKU.\n" -" -x sekwencja:polecenie-powłoki\tPowoduje uruchomienie POLECENIA-POWŁOKI\n" +" -x sekwencja:polecenie-powłoki\tPowoduje uruchomienie POLECENIA-" +"POWŁOKI\n" " \t\t\t\tgdy wprowadzona zostanie podana SEKWENCJA klawiszy.\n" -" -X Lista sekwencji klawiszy przypisanych przez -x oraz\n" -" powiązane polecenia w postaci nadającej się do użycia\n" +" -X Lista sekwencji klawiszy przypisanych przez -x " +"oraz\n" +" powiązane polecenia w postaci nadającej się do " +"użycia\n" " jako dane wejściowe.\n" " \n" " Stan wyjściowy:\n" " bind zwraca 0, chyba że podano nieznaną opcję lub wystąpi błąd." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2669,13 +2851,14 @@ msgid "" msgstr "" "Wyjście z pętli for, while lub until.\n" " \n" -" Wyjście z pętli FOR, WHILE lub UNTIL. Jeśli podano N, sterowanie wychodzi\n" +" Wyjście z pętli FOR, WHILE lub UNTIL. Jeśli podano N, sterowanie " +"wychodzi\n" " za N-tą zagnieżdżoną pętlę.\n" " \n" " Stan wyjściowy:\n" " Instrukcja zwraca prawdę, chyba że N jest mniejsze niż 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2693,13 +2876,14 @@ msgstr "" " Stan wyjściowy:\n" " Instrukcja zwraca 0, chyba że N jest mniejsze niż 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2709,14 +2893,15 @@ msgstr "" " \n" " Wywołanie POLECENIA-WBUDOWANEGO z argumentami ARG bez wykonywania\n" " wyszukiwania polecenia. Jest to przydatne w przypadku ponownego\n" -" implementowania polecenia wbudowanego jako funkcji powłoki i wywoływania\n" +" implementowania polecenia wbudowanego jako funkcji powłoki i " +"wywoływania\n" " polecenia wbudowanego z wewnątrz tej funkcji.\n" " \n" " Stan wyjściowy:\n" " Instrukcja zwraca stan wyjściowy POLECENIA-WBUDOWANEGO lub fałsz, jeśli\n" " POLECENIE-WBUDOWANE nie jest poleceniem wbudowanym powłoki." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2733,8 +2918,10 @@ msgid "" msgstr "" "Zwrócenie kontekstu wywołania bieżącej procedury.\n" " \n" -" Bez WYRAŻENIA zwracane jest \"$linia $plik\". Z WYRAŻENIEM zwracane jest\n" -" \"$linia $procedura $plik\"; dodatkowe informacje służą do udostępnienia\n" +" Bez WYRAŻENIA zwracane jest \"$linia $plik\". Z WYRAŻENIEM zwracane " +"jest\n" +" \"$linia $procedura $plik\"; dodatkowe informacje służą do " +"udostępnienia\n" " śladu stosu.\n" " \n" " Wartość WYRAŻENIA określa o ile ramek wywołań względem bieżącej ramki\n" @@ -2744,20 +2931,27 @@ msgstr "" " Polecenie zwraca 0, chyba że powłoka nie wykonuje funkcji lub WYRAŻENIE\n" " jest nieprawidłowe." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2773,11 +2967,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Zmiana bieżącego katalogu powłoki.\n" @@ -2786,13 +2982,15 @@ msgstr "" " zmiennej powłoki HOME.\n" " \n" " Zmienna CDPATH określa ścieżkę przeszukiwania w poszukiwaniu katalogu\n" -" zawierającego KATALOG. Alternatywne nazwy katalogów są w CDPATH rozdzielone\n" +" zawierającego KATALOG. Alternatywne nazwy katalogów są w CDPATH " +"rozdzielone\n" " dwukropkami (:). Pusta nazwa katalogu oznacza to samo, co katalog\n" " bieżący. Jeśli KATALOG zaczyna się od ukośnika (/), to CDPATH nie\n" " nie jest używane.\n" " \n" " Gdy katalog nie zostanie znaleziony, a ustawiona jest zmienna powłoki\n" -" `cdable_vars', to następuje próba użycia podanej nazwy jako nazwy zmiennej.\n" +" `cdable_vars', to następuje próba użycia podanej nazwy jako nazwy " +"zmiennej.\n" " Jeśli zmienna ta ma wartość, to jako KATALOG jest używana jej wartość.\n" " \n" " Opcje:\n" @@ -2815,7 +3013,7 @@ msgstr "" " zmienione pomyślnie w przypadku użycia -P; w przeciwnym razie zwraca\n" " wartość niezerową." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2842,7 +3040,7 @@ msgstr "" " Polecenie zwraca 0, chyba że podano nieprawidłową opcję lub katalog\n" " bieżący nie może być odczytany." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2858,7 +3056,7 @@ msgstr "" " Stan wyjściowy:\n" " Zawsze zwracana jest prawda." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2870,7 +3068,7 @@ msgstr "" " Stan wyjściowy:\n" " Zawsze zwracana jest prawda." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2882,12 +3080,13 @@ msgstr "" " Stan wyjściowy:\n" " Zawsze zwracany jest fałsz." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2902,7 +3101,8 @@ msgstr "" "Wywołanie prostego polecenia lub wyświetlenie informacji o poleceniach.\n" " \n" " Uruchomienie POLECENIA z ARGUMENTAMI z pominięciem wyszukiwania funkcji\n" -" powłoki lub wyświetlenie informacji o podanych POLECENIACH. Może być użyte\n" +" powłoki lub wyświetlenie informacji o podanych POLECENIACH. Może być " +"użyte\n" " do wywołania poleceń z dysku jeśli już istnieje funkcja o danej nazwie.\n" " \n" " Opcje:\n" @@ -2915,7 +3115,8 @@ msgstr "" " Polecenie zwraca stan POLECENIA lub fałsz, jeśli POLECENIE nie zostało\n" " znalezione." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2943,12 +3144,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2975,10 +3178,12 @@ msgstr "" " -A\tczyni NAZWĘ tablicą asocjacyjną (jeśli są one obsługiwane)\n" " -i\tnadaje NAZWIE atrybut `integer' (zmiennej całkowitej)\n" " -l\tprzekształca wartość każdej NAZWY na małe litery przy przypisaniu\n" -" -n\tczyni NAZWĘ odwołaniem do zmiennej o nazwie wskazanej przez wartość\n" +" -n\tczyni NAZWĘ odwołaniem do zmiennej o nazwie wskazanej przez " +"wartość\n" " -r\tczyni NAZWĘ tylko do odczytu\n" " -t\tnadaje NAZWIE atrybut `trace'\n" -" -u\tprzekształca wartość każdej NAZWY na wielkie litery przy przypisaniu\n" +" -u\tprzekształca wartość każdej NAZWY na wielkie litery przy " +"przypisaniu\n" " -x\teksportuje NAZWĘ\n" " \n" " Użycie `+' zamiast `-' wyłącza podany atrybut.\n" @@ -2992,7 +3197,7 @@ msgstr "" " Stan wyjściowy:\n" " Polecenie zwraca prawdę, chyba że podano błędną opcję lub wystąpi błąd." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3002,7 +3207,7 @@ msgstr "" " \n" " Synonim `declare' - p. `help declare'." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3028,11 +3233,12 @@ msgstr "" " Zwracana jest prawda, chyba że podano błędną opcję, wystąpi błąd przy\n" " przypisaniu zmiennej lub powłoka nie wykonuje żadnej funkcji." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3056,9 +3262,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3066,7 +3274,8 @@ msgid "" msgstr "" "Wypisanie argumentów na standardowym wyjściu.\n" " \n" -" Wypisanie na standardowym wyjściu argumentów ARG oddzielonych pojedynczymi\n" +" Wypisanie na standardowym wyjściu argumentów ARG oddzielonych " +"pojedynczymi\n" " spacjami oraz znaku końca linii.\n" " \n" " Opcje:\n" @@ -3100,7 +3309,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że wystąpi błąd zapisu." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3122,7 +3331,8 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że wystąpi błąd zapisu." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3142,6 +3352,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3155,13 +3371,16 @@ msgstr "" " wbudowane bez używania pełnej ścieżki.\n" " \n" " Opcje:\n" -" -a\twypisanie listy poleceń wbudowanych z informacją, które są włączone\n" +" -a\twypisanie listy poleceń wbudowanych z informacją, które są " +"włączone\n" " -n\twyłączenie każdej NAZWY lub wypisanie listy wyłączonych poleceń\n" " -p\twypisanie listy poleceń w formacie do ponownego użycia\n" -" -s\twypisanie tylko nazw posiksowych \"specjalnych\" poleceń wbudowanych\n" +" -s\twypisanie tylko nazw posiksowych \"specjalnych\" poleceń " +"wbudowanych\n" " \n" " Opcje sterujące dynamicznym ładowaniem:\n" -" -f\tWczytanie polecenia wbudowanego NAZWA z obiektu współdzielonego PLIK\n" +" -f\tWczytanie polecenia wbudowanego NAZWA z obiektu współdzielonego " +"PLIK\n" " -d\tUsunięcie polecenia wczytanego przez -f\n" " \n" " Bez opcji włączana jest każda NAZWA.\n" @@ -3173,11 +3392,12 @@ msgstr "" " Zwracana jest prawda, chyba że NAZWA nie jest poleceniem wbudowanym lub\n" " wystąpi błąd." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3192,7 +3412,7 @@ msgstr "" " Zwracany jest stan wyjściowy polecenia lub prawdę, jeśli polecenie jest\n" " puste." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3234,14 +3454,16 @@ msgid "" msgstr "" "Analiza opcji z argumentów.\n" " \n" -" Polecenie getopts jest używane przez procedury powłoki przy analizowaniu\n" +" Polecenie getopts jest używane przez procedury powłoki przy " +"analizowaniu\n" " parametrów pozycyjnych jako opcji.\n" " \n" " ŁAŃCUCH-OPCJI zawiera litery opcji, które mają być rozpoznane; jeśli po\n" " literze następuje dwukropek, opcja wymaga argumentu, który powinien być\n" " oddzielony od opcji spacją.\n" " \n" -" Przy każdym wywołaniu getopts umieszcza następną opcję w zmiennej powłoki\n" +" Przy każdym wywołaniu getopts umieszcza następną opcję w zmiennej " +"powłoki\n" " $nazwa, inicjując ją, jeśli nie istnieje; natomiast indeks następnego\n" " argumentu do przetworzenia jest umieszczany w zmiennej powłoki OPTIND\n" " OPTIND jest inicjowany wartością 1 przy każdym wywołaniu powłoki lub\n" @@ -3250,32 +3472,38 @@ msgstr "" " \n" " getopts zgłasza błędy na jeden z dwóch sposobów. Jeśli pierwszy znak\n" " ŁAŃCUCHA-OPCJI jest dwukropkiem, getopts wykorzystuje ciche zgłaszanie\n" -" błędów. W tym trybie komunikaty błędów nie są wypisywane. Jeśli napotkana\n" +" błędów. W tym trybie komunikaty błędów nie są wypisywane. Jeśli " +"napotkana\n" " zostanie błędna opcja, getopts umieszcza znak opcji w OPTARG. Jeśli\n" -" nie znaleziono wymaganego argumentu, getopts umieszcza znak ':' w NAZWIE\n" -" i ustawia OPTARG na napotkany znak opcji. Jeśli getopts nie jest w trybie\n" +" nie znaleziono wymaganego argumentu, getopts umieszcza znak ':' w " +"NAZWIE\n" +" i ustawia OPTARG na napotkany znak opcji. Jeśli getopts nie jest w " +"trybie\n" " cichym i napotkana zostanie błędna opcja, getopts umieszcza znak '?'\n" " w NAZWIE i anuluje OPTARG. Jeśli nie znaleziono wymaganego argumentu,\n" " w NAZWIE umieszczany jest znak '?', OPTARG jest anulowany i wypisywany\n" " jest komunikat diagnostyczny.\n" " \n" " Jeśli zmienna powłoki OPTERR ma wartość 0, getopts wyłącza wypisywanie\n" -" komunikatów błędów, nawet jeśli pierwszym znakiem ŁAŃCUCHA-OPCJI nie jest\n" +" komunikatów błędów, nawet jeśli pierwszym znakiem ŁAŃCUCHA-OPCJI nie " +"jest\n" " dwukropek. OPTERR domyślnie ma wartość 1.\n" " \n" " Polecenie getopts normalnie przetwarza parametry pozycyjne, ale jeśli\n" " podano argumenty jako wartości ARG, są one przetwarzane zamiast nich.\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda, jeśli napotkano opcję; fałsz, jeśli wystąpi koniec\n" +" Zwracana jest prawda, jeśli napotkano opcję; fałsz, jeśli wystąpi " +"koniec\n" " opcji lub błąd." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3283,11 +3511,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Zastąpienie powłoki podanym poleceniem.\n" " \n" @@ -3304,10 +3534,11 @@ msgstr "" " chyba że ustawiona jest opcja powłoki `execfail'.\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda, chyba że nie uda się znaleźć POLECENIA lub wystąpi\n" +" Zwracana jest prawda, chyba że nie uda się znaleźć POLECENIA lub " +"wystąpi\n" " błąd przekierowania." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3319,11 +3550,12 @@ msgstr "" " Opuszczenie powłoki z kodem zakończenia N. Jeśli N pominięto, kodem\n" " zakończenia będzie kod zakończenia ostatniego wykonanego polecenia." -#: builtins.c:724 +#: builtins.c:732 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 "" "Opuszczenie powłoki logowania.\n" @@ -3331,17 +3563,20 @@ msgstr "" " Opuszczenie powłoki logowania z kodem zakończenia N. Zwraca błąd, jeśli\n" " powłoka nie jest powłoką logowania." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3354,14 +3589,19 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Wyświetlanie lub wykonywanie poleceń z listy historii.\n" " \n" -" fc służy do wypisywania, edycji i ponownego uruchamiania poleceń z listy\n" +" fc służy do wypisywania, edycji i ponownego uruchamiania poleceń z " +"listy\n" " historii. PIERWSZY i OSTATNI jako liczby określają zakres lub PIERWSZY\n" -" jako napis oznacza najpóźniej wykonywane polecenie zaczynające się od tego\n" +" jako napis oznacza najpóźniej wykonywane polecenie zaczynające się od " +"tego\n" " napisu.\n" " \n" " Opcje:\n" @@ -3375,15 +3615,17 @@ msgstr "" " Przy wywołaniu polecenia w postaci `fc -s [wz=zam ...] [polecenie]',\n" " jest ono wywoływane ponownie po wykonaniu podstawienia WZ=ZAM.\n" " \n" -" Przydatnym aliasem korzystającym z tego jest r='fc -s' tak, że napisanie\n" -" `r cc' uruchamia ostatnie polecenie zaczynające się od `cc', a napisanie\n" +" Przydatnym aliasem korzystającym z tego jest r='fc -s' tak, że " +"napisanie\n" +" `r cc' uruchamia ostatnie polecenie zaczynające się od `cc', a " +"napisanie\n" " `r' uruchamia ponownie ostatnie polecenie.\n" " \n" " Stan wyjściowy:\n" " Zwracana jest prawda lub stan wykonanego polecenia; wartość niezerowa\n" " w przypadku błędu." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3404,12 +3646,14 @@ msgstr "" " Stan zadania umieszczonego na pierwszym planie lub fałsz, jeśli wystąpi\n" " błąd." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3425,12 +3669,13 @@ msgstr "" " Zwracana jest prawda, chyba że sterowanie zadaniami nie jest włączone\n" " lub wystąpi błąd." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3468,7 +3713,7 @@ msgstr "" " Zwracana jest prawda, chyba że nie znaleziono NAZWY lub podano błędną\n" " opcję." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3486,12 +3731,14 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Wyświetlenie informacji o poleceniach wbudowanych.\n" " \n" " Wyświetlenie krótkiego przeglądu poleceń wbudowanych. Jeśli podano\n" -" WZORZEC, wypisywany jest szczegółowy opis wszystkich poleceń pasujących do\n" +" WZORZEC, wypisywany jest szczegółowy opis wszystkich poleceń pasujących " +"do\n" " WZORCA, w przeciwnym wypadku - lista tematów.\n" " \n" " Opcje:\n" @@ -3507,7 +3754,8 @@ msgstr "" " Zwracana jest prawda, chyba że WZORCA nie znaleziono lub podano błędną\n" " opcję." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3531,11 +3779,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3548,7 +3801,8 @@ msgstr "" " \n" " Opcje:\n" " -c\twyczyszczenie listy historii poprzez usunięcie wszystkich wpisów\n" -" -d offset\tusunięcie wpisu historii o podanym OFFSECIE. Ujemne offsety\n" +" -d offset\tusunięcie wpisu historii o podanym OFFSECIE. Ujemne " +"offsety\n" " \t\tliczą się wstecz od końca listy historii\n" " \n" " -a\tdołączenie linii historii z tej sesji do pliku historii\n" @@ -3562,19 +3816,22 @@ msgstr "" " -s\tdołączenie wszystkich ARG do listy historii jako pojedynczych\n" " \t\twpisów\n" " \n" -" Jeśli podano PLIK, jest używany jako plik historii. W przeciwnym wypadku\n" +" Jeśli podano PLIK, jest używany jako plik historii. W przeciwnym " +"wypadku\n" " używany jest $HISTFILE, a jeśli ta zmienna nie jest ustawiona -\n" " ~/.bash_history.\n" " \n" -" Jeśli zmienna $HISTTIMEFORMAT jest ustawiona i niepusta, jej wartość jest\n" +" Jeśli zmienna $HISTTIMEFORMAT jest ustawiona i niepusta, jej wartość " +"jest\n" " używana jako łańcuch formatujący dla strftime(3) do wypisywania momentu\n" -" czasu powiązanego z każdym wypisywanym wpisem. W przeciwnym wypadku czas\n" +" czasu powiązanego z każdym wypisywanym wpisem. W przeciwnym wypadku " +"czas\n" " nie jest wypisywany.\n" " \n" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3599,7 +3856,8 @@ msgid "" msgstr "" "Wyświetlenie stanu zadań.\n" " \n" -" Wypisanie aktywnych zadań. ZADANIE ogranicza wyjście tylko do tego zadania.\n" +" Wypisanie aktywnych zadań. ZADANIE ogranicza wyjście tylko do tego " +"zadania.\n" " Bez opcji wypisywany jest stan wszystkich aktywnych zadań.\n" " \n" " Opcje:\n" @@ -3618,7 +3876,7 @@ msgstr "" " Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd.\n" " Jeśli użyto -x, zwracany jest stan wyjściowy POLECENIA." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3648,7 +3906,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano błędną opcję lub ZADANIE." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3673,32 +3931,36 @@ msgstr "" "Wysłanie sygnału do zadania.\n" " \n" " Wysłanie do procesów określonych przez PID lub ZADANIE sygnału o nazwie\n" -" SYGNAŁ lub NUMERZE-SYGNAŁU. Jeśli nie podano SYGNAŁU ani NUMERU-SYGNAŁU,\n" +" SYGNAŁ lub NUMERZE-SYGNAŁU. Jeśli nie podano SYGNAŁU ani NUMERU-" +"SYGNAŁU,\n" " przyjmowany jest SIGTERM.\n" " \n" " Opcje:\n" " -s SYG\tSYG jest nazwą sygnału\n" " -n SYG\tSYG jest numerem sygnału\n" " -l\tlista nazw sygnałów; jeśli `-l' występuje z argumentami, są one\n" -" \t\ttraktowane jako numery sygnałów, dla których mają być wypisane nazwy\n" +" \t\ttraktowane jako numery sygnałów, dla których mają być wypisane " +"nazwy\n" " -L\tsynonim -l\n" " \n" " Kill jest poleceniem wewnętrznym z dwóch powodów: umożliwia korzystanie\n" -" z identyfikatorów zadań zamiast numerów PID oraz, w przypadku osiągnięcia\n" +" z identyfikatorów zadań zamiast numerów PID oraz, w przypadku " +"osiągnięcia\n" " ograniczenia na liczbę procesów, nie powoduje potrzeby uruchamiania\n" " dodatkowego procesu, aby jakiś zabić.\n" " \n" " Stan wyjściowy:\n" " Zwracany jest sukces, chyba że podano błędną opcję lub wystąpi błąd." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3736,9 +3998,11 @@ msgid "" msgstr "" "Obliczanie wyrażeń arytmetycznych.\n" " \n" -" Obliczenie każdego argumentu ARG jako wyrażenia arytmetycznego. Obliczenia\n" +" Obliczenie każdego argumentu ARG jako wyrażenia arytmetycznego. " +"Obliczenia\n" " są wykonywane dla liczb całkowitych o stałej długości bez sprawdzania\n" -" przepełnienia, jednakże dzielenie przez 0 jest przechwytywane i oznaczane\n" +" przepełnienia, jednakże dzielenie przez 0 jest przechwytywane i " +"oznaczane\n" " jako błąd. Poniższa lista operatorów jest pogrupowana na poziomy\n" " operatorów o jednakowym priorytecie. Poziomy są wypisane w kolejności\n" " malejącego priorytetu.\n" @@ -3777,19 +4041,24 @@ msgstr "" " Jeśli wartością ostatniego argumentu jest 0, let zwraca 1;\n" " w pozostałych przypadkach zwracane jest 0." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3797,11 +4066,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3819,41 +4091,51 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Odczyt wiersza ze standardowego wejścia i podział go na pola.\n" " \n" " Odczytanie wiersza ze standardowego wejścia lub deskryptora FD (jeśli\n" -" podano opcję -u). Wiersz jest dzielony na pola wg reguł podziału na słowa,\n" -" pierwsze słowo jest przypisywane pierwszej NAZWIE, drugie - drugiej NAZWIE\n" +" podano opcję -u). Wiersz jest dzielony na pola wg reguł podziału na " +"słowa,\n" +" pierwsze słowo jest przypisywane pierwszej NAZWIE, drugie - drugiej " +"NAZWIE\n" " itd.; wszystkie pozostałe słowa są przypisywane ostatniej NAZWIE. Jako\n" -" ograniczniki słów są rozpoznawane tylko znaki ze zmiennej $IFS. Domyślnie\n" +" ograniczniki słów są rozpoznawane tylko znaki ze zmiennej $IFS. " +"Domyślnie\n" " znak odwrotnego ukośnika chroni znaki ograniczników i nowej linii.\n" " \n" -" Jeśli nie podano NAZW, odczytany wiersz jest zapisywany w zmiennej REPLY.\n" +" Jeśli nie podano NAZW, odczytany wiersz jest zapisywany w zmiennej " +"REPLY.\n" " \n" " Opcje:\n" " -a tablica\tprzypisanie odczytanych słów do indeksów sekwencyjnych\n" " \t\tzmiennej tablicowej TABLICA, począwszy od zera\n" -" -d ogr\tkontynuacja do odczytu pierwszego znaku OGR zamiast znaku nowej\n" +" -d ogr\tkontynuacja do odczytu pierwszego znaku OGR zamiast znaku " +"nowej\n" " \t\tlinii\n" " -e\tużycie Readline'a do odczytania wiersza\n" " -o tekst\tużycie TEKSTU jako początkowego tekstu dla Readline'a\n" " -n liczba\tpowrót po odczycie LICZBY znaków zamiast oczekiwania na\n" -" \t\tznak nowej linii; ogranicznik jest honorowany, jeśli odczytano mniej\n" +" \t\tznak nowej linii; ogranicznik jest honorowany, jeśli odczytano " +"mniej\n" " \t\tniż podana LICZBA znaków przed ogranicznikiem\n" " -N liczba\tpowrót tylko po odczycie dokładnie podanej LICZBY znaków,\n" " \t\tchyba że zostanie napotkany EOF lub opłynie czas; ograniczniki są\n" " \t\tignorowane\n" -" -p zachęta\twypisanie łańcucha ZACHĘTY bez końcowego znaku nowej linii\n" +" -p zachęta\twypisanie łańcucha ZACHĘTY bez końcowego znaku nowej " +"linii\n" " \t\tprzed próbą odczytu\n" " -r\twyłączenie interpretowania odwrotnych ukośników jako przedrostka\n" " \t\tznaków specjalnych\n" " -s\tbez wypisywania wejścia pochodzącego z terminala\n" " -t czas\tzakończenie i zwrócenie niepowodzenia, jeśli nie zostanie\n" -" \t\todczytany cały wiersz przed upłynięciem podanego CZASU (w sekundach).\n" +" \t\todczytany cały wiersz przed upłynięciem podanego CZASU (w " +"sekundach).\n" " \t\tWartość zmiennej TMOUT jest domyślnym limitem czasu. CZAS może być\n" " \t\tułamkowy. Przy wartości 0 odczyt powiedzie się tylko wtedy, gdy\n" " \t\twejście jest dostępne na podanym deskryptorze. Kod (stan) wyjściowy\n" @@ -3866,7 +4148,7 @@ msgstr "" " błąd przypisania zmiennej albo podano nieprawidłowy deskryptor dla\n" " argumentu -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3887,7 +4169,8 @@ msgstr "" " Zwracane jest N lub niepowodzenie, jeśli powłoka nie wykonuje żadnej\n" " funkcji ani skryptu." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3930,7 +4213,8 @@ 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" @@ -3954,13 +4238,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4023,10 +4312,12 @@ msgstr "" " POSIX na zgodne ze standardem\n" " privileged to samo, co -p\n" " verbose to samo, co -v\n" -" vi korzystanie z interfejsu edycji wiersza w stylu vi\n" +" vi korzystanie z interfejsu edycji wiersza w stylu " +"vi\n" " xtrace to samo, co -x\n" " -p Włączone, gdy nie zgadzają się rzeczywisty i efektywny ID\n" -" użytkownika. Wyłącza przetwarzanie pliku $ENV oraz import funkcji\n" +" użytkownika. Wyłącza przetwarzanie pliku $ENV oraz import " +"funkcji\n" " powłoki. Wyłączenie tej opcji powoduje, że efektywne UID i GID\n" " zostaną ustawione na rzeczywiste UID i GID.\n" " -t Zakończenie po przeczytaniu i uruchomieniu jednego polecenia.\n" @@ -4043,13 +4334,15 @@ msgstr "" " -P Gdy ustawione, nierozwiązywanie dowiązań symbolicznych podczas\n" " uruchamiania poleceń takich, jak cd, które zmieniają katalog\n" " bieżący.\n" -" -T Gdy ustawione, dziedziczenie pułapek DEBUG i RETURN przez funkcje.\n" +" -T Gdy ustawione, dziedziczenie pułapek DEBUG i RETURN przez " +"funkcje.\n" " -- Przypisanie pozostałych argumentów do parametrów pozycyjnych.\n" " Jeśli nie ma więcej argumentów, parametry pozycyjne są anulowane.\n" " - Przypisanie pozostałych argumentów do argumentów pozycyjnych.\n" " Wyłączenie opcji -x i -v.\n" " \n" -" Użycie + zamiast - powoduje wyłączenie powyższych znaczników. Można z nich\n" +" Użycie + zamiast - powoduje wyłączenie powyższych znaczników. Można z " +"nich\n" " także korzystać przy uruchomieniu powłoki. Aktualny zestaw opcji można\n" " znaleźć w $-. Pozostałe n argumentów staje się parametrami pozycyjnymi\n" " i są one przypisane, kolejno, do $1, $2, .. $n. Gdy nie zostaną podane\n" @@ -4058,7 +4351,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano nieprawidłową opcję." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4070,7 +4363,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4088,21 +4382,24 @@ msgstr "" " -n\tpotraktowanie wszystkich NAZW jako referencji do nazw\n" " \t\ti anulowanie samej zmiennej zamiast tej, do której się odnosi\n" " \n" -" Bez opcji unset próbuje najpierw anulować definicję zmiennej, a jeśli to\n" +" Bez opcji unset próbuje najpierw anulować definicję zmiennej, a jeśli " +"to\n" " się nie powiedzie, próbuje anulować definicję funkcji.\n" " \n" " Niektórych zmiennych nie można usunąć - p. `readonly'.\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda, chyba że podano błędną opcję lub NAZWA jest tylko do\n" +" Zwracana jest prawda, chyba że podano błędną opcję lub NAZWA jest tylko " +"do\n" " odczytu." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4117,7 +4414,8 @@ msgstr "" "Ustawienie atrybutu eksportowania dla zmiennych powłoki.\n" " \n" " Zaznaczenie każdej NAZWY do automatycznego eksportowania do środowiska\n" -" później wywoływanych poleceń. Jeśli podano WARTOŚĆ, jest ona przypisywana\n" +" później wywoływanych poleceń. Jeśli podano WARTOŚĆ, jest ona " +"przypisywana\n" " przed eksportowaniem.\n" " \n" " Opcje:\n" @@ -4130,7 +4428,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano nieprawidłową opcję lub NAZWĘ." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4152,7 +4450,8 @@ msgid "" msgstr "" "Oznaczenie zmiennych powłoki jako niezmiennych.\n" " \n" -" Oznaczenie każdej NAZWY jako tylko do odczytu; wartości tych NAZW nie mogą\n" +" Oznaczenie każdej NAZWY jako tylko do odczytu; wartości tych NAZW nie " +"mogą\n" " być zmieniane przez późniejsze podstawienia. Jeśli podano WARTOŚĆ, jest\n" " ona przypisywana przed oznaczeniem jako tylko do odczytu.\n" " \n" @@ -4160,7 +4459,8 @@ msgstr "" " -a\tdziałanie na zmiennych tablicowych indeksowanych\n" " -A\tdziałanie na zmiennych tablicowych asocjacyjnych\n" " -f\tdziałanie na funkcjach powłoki\n" -" -p\twyświetlenie listy wszystkich zmiennych lub funkcji tylko do odczytu,\n" +" -p\twyświetlenie listy wszystkich zmiennych lub funkcji tylko do " +"odczytu,\n" " \t\tw zależności od tego, czy podano opcję -f\n" " \n" " Argument `--' wyłącza dalsze przetwarzanie opcji.\n" @@ -4168,7 +4468,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano nieprawidłową opcję lub NAZWĘ." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4186,7 +4486,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że N jest ujemne lub większe niż $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4207,18 +4507,22 @@ msgstr "" " parametrami pozycyjnymi podczas uruchomienia PLIKU.\n" " \n" " Stan wyjściowy:\n" -" Zwracany jest stan ostatnio wykonanego polecenia z PLIKU lub błąd, jeśli\n" +" Zwracany jest stan ostatnio wykonanego polecenia z PLIKU lub błąd, " +"jeśli\n" " PLIKU nie udało się odczytać." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4230,13 +4534,15 @@ msgstr "" " wstrzymać.\n" " \n" " Opcje:\n" -" -f\twymuszenie wstrzymania, nawet jeśli powłoka jest powłoką logowania\n" +" -f\twymuszenie wstrzymania, nawet jeśli powłoka jest powłoką " +"logowania\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda, chyba że kontrola zadań jest wyłączona lub wystąpi\n" +" Zwracana jest prawda, chyba że kontrola zadań jest wyłączona lub " +"wystąpi\n" " błąd." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4270,7 +4576,8 @@ 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" @@ -4291,7 +4598,8 @@ 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" @@ -4318,13 +4626,18 @@ msgid "" msgstr "" "Obliczenie wyrażenia warunkowego.\n" " \n" -" Polecenie zwracające kod 0 (prawda) lub 1 (fałsz) w zależności od wyniku\n" -" obliczenia WYRAŻENIA. Wyrażenia mogą mieć postać jedno- lub dwuargumentową.\n" -" Jednoargumentowe wyrażenia służą zwykle do badania stanu pliku. Istnieją\n" -" również operatory działające na łańcuchach tekstowych, jak też operatory\n" +" Polecenie zwracające kod 0 (prawda) lub 1 (fałsz) w zależności od " +"wyniku\n" +" obliczenia WYRAŻENIA. Wyrażenia mogą mieć postać jedno- lub " +"dwuargumentową.\n" +" Jednoargumentowe wyrażenia służą zwykle do badania stanu pliku. " +"Istnieją\n" +" również operatory działające na łańcuchach tekstowych, jak też " +"operatory\n" " numerycznego porównania.\n" " \n" -" Zachowanie polecenia test zależy od liczby argumentów. Pełną specyfikację\n" +" Zachowanie polecenia test zależy od liczby argumentów. Pełną " +"specyfikację\n" " można znaleźć w podręczniku man do basha.\n" " \n" " Operatory plikowe:\n" @@ -4349,7 +4662,8 @@ msgstr "" " -u FILE Prawda, gdy PLIK ma ustawiony bit SUID.\n" " -w FILE Prawda, gdy PLIK jest zapisywalny przez użytkownika.\n" " -x FILE Prawda, gdy PLIK jest uruchamialny przez użytkownika.\n" -" -O FILE Prawda, gdy użytkownik jest efektywnym właścicielem PLIKU.\n" +" -O FILE Prawda, gdy użytkownik jest efektywnym właścicielem " +"PLIKU.\n" " -G FILE Prawda, grupa użytkownika jest efektywnym właścicielem\n" " PLIKU.\n" " -N FILE Prawda, gdy PLIK został zmodyfikowany po ostatnim\n" @@ -4401,7 +4715,7 @@ msgstr "" " Zwracana jest prawda, jeśli wartością WYRAŻENIA jest prawda; fałsz, gdy\n" " wartością WYRAŻENIA jest fałsz lub podano błędny argument." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4413,11 +4727,12 @@ msgstr "" " Jest to synonim dla wbudowanego polecenia \"test\", ale wymagający, by\n" " ostatnim argumentem był `]' pasujący do początkowego `['." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4425,67 +4740,90 @@ msgid "" msgstr "" "Wyświetlenie czasów procesu.\n" " \n" -" Wypisanie łącznych czasów w przestrzeni użytkownika i systemu dla powłoki\n" +" Wypisanie łącznych czasów w przestrzeni użytkownika i systemu dla " +"powłoki\n" " i wszystkich procesów potomnych.\n" " \n" " Stan wyjściowy:\n" " Zawsze prawda." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Przechwytywanie sygnałów i innych zdarzeń.\n" " \n" -" Polecenie definiujące i włączające daną akcję w przypadku, kiedy powłoka\n" +" Polecenie definiujące i włączające daną akcję w przypadku, kiedy " +"powłoka\n" " otrzyma sygnał lub pod innymi warunkami.\n" " \n" -" Gdy powłoka otrzyma podany SYGNAŁ (lub sygnały), odczytywane i uruchamiane\n" -" jest polecenie podane jako argument ARG. W razie braku argumentu (i podaniu\n" +" Gdy powłoka otrzyma podany SYGNAŁ (lub sygnały), odczytywane i " +"uruchamiane\n" +" jest polecenie podane jako argument ARG. W razie braku argumentu (i " +"podaniu\n" " pojedynczego SYGNAŁU) lub gdy argumentem jest `-', każdemu z podanych\n" " sygnałów jest przywracane pierwotne zachowanie. Jeśli ARG jest pustym\n" -" łańcuchem, każdy SYGNAŁ jest ignorowany przez powłokę i wywołane przez nią\n" +" łańcuchem, każdy SYGNAŁ jest ignorowany przez powłokę i wywołane przez " +"nią\n" " polecenia.\n" " \n" " Jeżeli jako SYGNAŁ podano EXIT (0), polecenie ARG jest uruchamiane przy\n" -" opuszczaniu powłoki. Jeśli jako SYGNAŁ podano DEBUG, ARG jest uruchamiane\n" +" opuszczaniu powłoki. Jeśli jako SYGNAŁ podano DEBUG, ARG jest " +"uruchamiane\n" " po każdym poleceniu prostym. Jeśli jako SYGNAŁ podano RETURN, ARG jest\n" " uruchamiane przy każdym zakończeniu funkcji powłoki lub skryptu\n" " uruchamianego przez polecenia wbudowane . lub source. Jeśli jako SYGNAŁ\n" " podano ERR, ARG jest uruchamiane za każdym razem, kiedy niepowodzenie\n" -" polecenia spowodowałoby zakończenie powłoki w przypadku włączenia opcji -e.\n" +" polecenia spowodowałoby zakończenie powłoki w przypadku włączenia opcji -" +"e.\n" " \n" -" Jeśli nie podano argumentów, trap wypisuje listę poleceń przypisanych do\n" +" Jeśli nie podano argumentów, trap wypisuje listę poleceń przypisanych " +"do\n" " każdego sygnału.\n" " \n" " Opcje:\n" @@ -4500,7 +4838,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano błędny SYGNAŁ lub błędną opcję." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4526,7 +4864,8 @@ 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 "" "Wyświetlenie informacji o rodzaju polecenia.\n" " \n" @@ -4545,21 +4884,25 @@ msgstr "" " \t\tnie zwróciłoby `file'.\n" " -t\tzwrócenie pojedynczego słowa: `alias', `keyword', `function',\n" " \t\t`builtin', `file' lub `', jeśli nazwa jest odpowiednio: aliasem,\n" -" \t\tzarezerwowanym słowem kluczowym powłoki, funkcją powłoki, poleceniem\n" +" \t\tzarezerwowanym słowem kluczowym powłoki, funkcją powłoki, " +"poleceniem\n" " \t\twbudowanym powłoki, plikiem na dysku lub nie zostanie znaleziona\n" " \n" " Argumenty:\n" " NAZWA\tNazwa polecenia do zinterpretowania.\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda, jeśli każda NAZWA zostanie znaleziona; fałsz, jeśli\n" +" Zwracana jest prawda, jeśli każda NAZWA zostanie znaleziona; fałsz, " +"jeśli\n" " którakolwiek nie zostanie znaleziona." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4596,16 +4939,18 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Modyfikowanie limitów zasobów powłoki.\n" " \n" -" Ulimit zapewnia kontrolę ilości zasobów udostępnionych powłoce i procesom\n" +" Ulimit zapewnia kontrolę ilości zasobów udostępnionych powłoce i " +"procesom\n" " w systemach, które taką kontrolę umożliwiają.\n" " \n" " Opcje:\n" @@ -4616,22 +4961,26 @@ msgstr "" " -c\tmaksymalny rozmiar tworzonych plików core\n" " -d\tmaksymalny rozmiar segmentu danych procesu\n" " -e\tmaksymalny priorytet szeregowania procesów (`nice')\n" -" -f\tmaksymalny rozmiar plików zapisywanych przez powłokę i jej potomków\n" +" -f\tmaksymalny rozmiar plików zapisywanych przez powłokę i jej " +"potomków\n" " -i\tmaksymalna liczba oczekujących sygnałów\n" -" -k\tmaksymalna liczba kolejek jądra (kqueue) przydzielonych dla procesu\n" +" -k\tmaksymalna liczba kolejek jądra (kqueue) przydzielonych dla " +"procesu\n" " -l\tmaksymalny rozmiar pamięci, którą proces może zablokować\n" " -m\tmaksymalny rozmiar obszaru rezydentnego procesu\n" " -n\tmaksymalna liczba otwartych deskryptorów plików\n" " -p\trozmiar bufora potoku\n" " -q\tmaksymalna liczba bajtów w POSIX-owych kolejkach komunikatów\n" -" -r\tmaksymalny priorytet szeregowania dla procesów czasu rzeczywistego\n" +" -r\tmaksymalny priorytet szeregowania dla procesów czasu " +"rzeczywistego\n" " -s\tmaksymalny rozmiar stosu\n" " -t\tmaksymalna ilość czasu procesora w sekundach\n" " -u\tmaksymalna liczba procesów użytkownika\n" " -v\trozmiar pamięci wirtualnej\n" " -x\tmaksymalna liczba blokad plików\n" " -P\tmaksymalna liczba pseudoterminali\n" -" -R\tmaksymalny czas, jaki proces real-time może działać bez blokowania\n" +" -R\tmaksymalny czas, jaki proces real-time może działać bez " +"blokowania\n" " -T\tmaksymalna liczba wątków\n" " \n" " Nie wszystkie opcje są dostępne na wszystkich platformach.\n" @@ -4640,15 +4989,18 @@ msgstr "" " danego zasobu; specjalne wartości LIMITU: `soft', `hard' i `unlimited'\n" " oznaczają, odpowiednio, aktualne ograniczenie miękkie, sztywne i brak\n" " ograniczenia. W przeciwnym przypadku wypisywana jest aktualna wartość\n" -" podanego ograniczenia. Gdy nie podano opcji, przyjmuje się, że podano -f.\n" +" podanego ograniczenia. Gdy nie podano opcji, przyjmuje się, że podano -" +"f.\n" " \n" -" Wartości są podawane w jednostkach 1024-bajtowych, za wyjątkiem -t, które\n" -" jest w sekundach, -p, które jest w jednostkach 512-bajtowych oraz -u, które\n" +" Wartości są podawane w jednostkach 1024-bajtowych, za wyjątkiem -t, " +"które\n" +" jest w sekundach, -p, które jest w jednostkach 512-bajtowych oraz -u, " +"które\n" " jest bezwymiarową liczbą procesów.\n" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4680,25 +5032,30 @@ msgstr "" " -S\twyjście w postaci symbolicznej; bez tej opcji jest ósemkowe\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda, chyba że podano błędne uprawnienia lub błędną opcję." +" Zwracana jest prawda, chyba że podano błędne uprawnienia lub błędną " +"opcję." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4711,10 +5068,13 @@ msgid "" msgstr "" "Oczekiwanie na zakończenie zadania i zwrócenie stanu (kodu) wyjścia.\n" " \n" -" Oczekiwanie na każdy proces o podanym identyfikatorze ID, który może być\n" +" Oczekiwanie na każdy proces o podanym identyfikatorze ID, który może " +"być\n" " numerem PID lub określeniem zadania i zgłoszenie jego stanu (kodu)\n" -" zakończenia. Jeśli nie podano ID, polecenie oczekuje na wszystkie aktualnie\n" -" aktywne procesy potomne i zwraca prawdę. Jeśli ID jest określeniem zadania,\n" +" zakończenia. Jeśli nie podano ID, polecenie oczekuje na wszystkie " +"aktualnie\n" +" aktywne procesy potomne i zwraca prawdę. Jeśli ID jest określeniem " +"zadania,\n" " oczekuje na wszystkie procesy w potoku przetwarzania danego zadania.\n" " \n" " Jeśli podano opcję -n, oczekiwanie na zakończenie następnego zadania\n" @@ -4732,30 +5092,45 @@ msgstr "" " Zwracany jest stan zakończenia ID; niepowodzenie, jeśli ID jest\n" " nieprawidłowe lub podano błędną opcję." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Oczekiwanie na zakończenie procesu i zwrócenie stanu (kodu) wyjścia.\n" " \n" -" Oczekiwanie na każdy z procesów podany przez PID i zgłoszenie jego statusu\n" -" zakończenia. Gdy nie zostanie podany PID, oczekiwanie dotyczy wszystkich\n" -" aktualnie aktywnych procesów potomnych, a kodem powrotu jest zero. PID musi\n" +" Oczekiwanie na każdy z procesów podany przez PID i zgłoszenie jego " +"statusu\n" +" zakończenia. Gdy nie zostanie podany PID, oczekiwanie dotyczy " +"wszystkich\n" +" aktualnie aktywnych procesów potomnych, a kodem powrotu jest zero. PID " +"musi\n" " być identyfikatorem procesu.\n" " \n" " Stan wyjściowy:\n" -" Zwracany jest status ID lub niepowodzenie, jeśli ID jest błędny lub podano\n" +" Zwracany jest status ID lub niepowodzenie, jeśli ID jest błędny lub " +"podano\n" " nieprawidłową opcję." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4769,14 +5144,16 @@ msgid "" msgstr "" "Wykonanie poleceń dla każdego elementu z listy.\n" " \n" -" Pętla `for' uruchamia ciąg poleceń dla każdego elementu podanej listy. Gdy\n" -" nie zostanie podane `in SŁOWA ...;', zakłada się, że podano `in \"$@\"'.\n" +" Pętla `for' uruchamia ciąg poleceń dla każdego elementu podanej listy. " +"Gdy\n" +" nie zostanie podane `in SŁOWA ...;', zakłada się, że podano `in " +"\"$@\"'.\n" " Dla każdego elementu SŁÓW, NAZWA jest ustawiana na ten element\n" " i uruchamiane są POLECENIA. \n" " Stan wyjściowy:\n" " Zwracany jest status zakończenia ostatniego wykonanego polecenia." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4801,11 +5178,12 @@ msgstr "" " \t\t(( WYR3 ))\n" " \tdone\n" " WYR1, WYR2 i WYR3 są wyrażeniami arytmetycznymi. Jeśli któreś z wyrażeń\n" -" zostanie pominięte, zachowanie jest takie, jakby miało ono wartość 1. \n" +" zostanie pominięte, zachowanie jest takie, jakby miało ono wartość " +"1. \n" " Stan wyjściowy:\n" " Zwracany jest status zakończenia ostatniego wykonanego polecenia." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4826,20 +5204,23 @@ msgid "" msgstr "" "Wybór słów z listy i wykonanie poleceń.\n" " SŁOWA są rozwijane, co tworzy listę słów. Zbiór rozwiniętych słów\n" -" wypisywany jest na standardowym wyjściu diagnostycznym, a każde słowo jest\n" +" wypisywany jest na standardowym wyjściu diagnostycznym, a każde słowo " +"jest\n" " poprzedzone przez liczbę. Gdy nie zostanie podane `in SŁOWA', zakłada\n" " się, że podano `in \"$@\"'. Wyświetlany jest wówczas tekst zachęty PS3\n" -" i odczytywany jest wiersz ze standardowego wejścia. Gdy wiersz ten składa\n" +" i odczytywany jest wiersz ze standardowego wejścia. Gdy wiersz ten " +"składa\n" " się z liczby przypisanej do jednego z wypisanych słów, to NAZWA jest\n" " ustawiana na to słowo. Gdy wiersz jest pusty, SŁOWA i tekst zachęty są\n" " wyświetlane ponownie. Gdy odczytany zostanie EOF, polecenie się kończy.\n" -" Każda inna wartość powoduje przypisanie NAZWIE wartości pustej. Odczytany\n" +" Każda inna wartość powoduje przypisanie NAZWIE wartości pustej. " +"Odczytany\n" " wiersz jest zachowywany w zmiennej REPLY. Po każdym wyborze uruchamiane\n" " są POLECENIA aż do polecenia break. \n" " Stan wyjściowy:\n" " Zwracany jest status zakończenia ostatniego wykonanego polecenia." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4863,12 +5244,13 @@ msgstr "" " Opcje:\n" " -p\twypisanie podsumowania czasów w przenośnym formacie POSIX\n" " \n" -" Jako format danych wyjściowych używana jest wartość zmiennej TIMEFORMAT.\n" +" Jako format danych wyjściowych używana jest wartość zmiennej " +"TIMEFORMAT.\n" " \n" " Stan wyjściowy:\n" " Polecenie zwraca status zakończenia POTOKU poleceń." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4886,16 +5268,21 @@ msgstr "" " Stan wyjściowy:\n" " Zwracany jest status zakończenia ostatniego wykonanego polecenia." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4907,7 +5294,8 @@ msgstr "" " uruchamiana jest lista `then POLECENIA'. W przeciwnym przypadku\n" " uruchamiane są poszczególne listy `elif POLECENIA' i, jeśli kod powrotu\n" " takiej listy jest zerem, uruchamiana jest odpowiednia lista\n" -" `then POLECENIA', po czym polecenie if się kończy. W przeciwnym przypadku\n" +" `then POLECENIA', po czym polecenie if się kończy. W przeciwnym " +"przypadku\n" " uruchamiana jest lista `else POLECENIA', jeśli taka istnieje. Kodem\n" " zakończenia całej konstrukcji jest kod zakończenia ostatniego\n" " uruchomionego polecenia lub zero, gdy żaden ze sprawdzanych warunków\n" @@ -4916,11 +5304,12 @@ msgstr "" " Stan wyjściowy:\n" " Zwracany jest status zakończenia ostatniego wykonanego polecenia." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4934,11 +5323,12 @@ msgstr "" " Stan wyjściowy:\n" " Zwracany jest status zakończenia ostatniego wykonanego polecenia." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4952,7 +5342,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracany jest status zakończenia ostatniego wykonanego polecenia." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4966,19 +5356,21 @@ msgid "" msgstr "" "Utworzenie koprocesu o podanej NAZWIE.\n" " \n" -" Asynchroniczne wykonanie POLECENIA ze standardowym wyjściem i standardowym\n" +" Asynchroniczne wykonanie POLECENIA ze standardowym wyjściem i " +"standardowym\n" " wejściem polecenia połączonych potokiem z deskryptorami plików\n" " przypisanymi do indeksów 0 i 1 zmiennej tablicowej NAZWA w powłoce.\n" " Domyślną NAZWĄ jest \"COPROC\".\n" " Stan wyjściowy:\n" " Polecenie coproc zwraca status wyjścia 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4987,15 +5379,17 @@ msgid "" msgstr "" "Zdefiniowanie funkcji powłoki.\n" " \n" -" Utworzenie funkcji powłoki o podanej NAZWIE. Przy wywołaniu jako zwykłego\n" +" Utworzenie funkcji powłoki o podanej NAZWIE. Przy wywołaniu jako " +"zwykłego\n" " polecenia NAZWA uruchamia POLECENIA w kontekście powłoki wywołującej.\n" -" Przy wywoływaniu NAZWY, argumenty są przekazywane do funkcji jako $1...$n,\n" +" Przy wywoływaniu NAZWY, argumenty są przekazywane do funkcji jako $1..." +"$n,\n" " a nazwa funkcji w $FUNCNAME.\n" " \n" " Stan wyjściowy:\n" " Zwracany jest sukces, chyba że NAZWA jest tylko do odczytu." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5013,7 +5407,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracany jest status zakończenia ostatniego wykonanego polecenia." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5028,15 +5422,18 @@ msgid "" msgstr "" "Wznowienie zadania jako pierwszoplanowego.\n" " \n" -" Równoważne argumentowi ZADANIE polecenia `fg'. Wznowienie zatrzymanego lub\n" -" działającego w tle zadania. ZADANIE może określać nazwę zadania albo jego\n" -" numer. Umieszczenie `&' po ZADANIU umieszcza zadanie w tle tak, jak to się\n" +" Równoważne argumentowi ZADANIE polecenia `fg'. Wznowienie zatrzymanego " +"lub\n" +" działającego w tle zadania. ZADANIE może określać nazwę zadania albo " +"jego\n" +" numer. Umieszczenie `&' po ZADANIU umieszcza zadanie w tle tak, jak to " +"się\n" " dzieje po podaniu specyfikacji zadania jako argumentu dla `bg'.\n" " \n" " Stan wyjściowy:\n" " Zwracany jest stan wznowionego zadania." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5048,19 +5445,24 @@ msgid "" msgstr "" "Obliczenie wyrażenia arytmetycznego.\n" " \n" -" Obliczenie WYRAŻENIA zgodnie z zasadami obliczania wyrażeń arytmetycznych.\n" +" Obliczenie WYRAŻENIA zgodnie z zasadami obliczania wyrażeń " +"arytmetycznych.\n" " Równoważne `let \"WYRAŻENIE\"'.\n" " \n" " Stan wyjściowy:\n" -" Zwracane jest 1, jeśli wartością WYRAŻENIA jest 0; 0 w przeciwnym wypadku." +" Zwracane jest 1, jeśli wartością WYRAŻENIA jest 0; 0 w przeciwnym " +"wypadku." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5081,7 +5483,8 @@ msgstr "" "Wykonanie polecenia warunkowego.\n" " \n" " Zwracany jest status wynoszący 0 lub 1 w zależności od wyniku WYRAŻENIA\n" -" warunkowego. Wyrażenia są tworzone na tych samych zasadach, co w poleceniu\n" +" warunkowego. Wyrażenia są tworzone na tych samych zasadach, co w " +"poleceniu\n" " `test' i mogą być łączone za pomocą następujących operatorów:\n" " \n" " ( WYRAŻENIE )\tzwraca wartość WYRAŻENIA\n" @@ -5093,17 +5496,19 @@ msgstr "" " \t\t\tfałszywe w innym przypadku\n" " \n" " W przypadku użycia operatorów `==' lub `!=' napis po prawej stronie\n" -" operatora jest traktowany jak wzorzec i wykonywane jest dopasowywanie do\n" +" operatora jest traktowany jak wzorzec i wykonywane jest dopasowywanie " +"do\n" " wzorca. W przypadku użycia operatora `=~' łańcuch po prawej stronie\n" " operatora jest dopasowywany jako wyrażenie regularne.\n" " \n" -" Operatory && i || nie obliczają WYR2, jeśli obliczenie WYR1 wystarcza do\n" +" Operatory && i || nie obliczają WYR2, jeśli obliczenie WYR1 wystarcza " +"do\n" " określenia wartości wyrażenia.\n" " \n" " Stan wyjściowy:\n" " 0 lub 1 w zależności od wartości WYRAŻENIA." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5203,14 +5608,15 @@ msgstr "" " \t\tzadania.\n" " histchars\tZnaki sterujące rozwijaniem wg historii i szybkim\n" " \t\tpodstawianiem. Pierwszy znak jest znakiem podstawiania\n" -" \t\thistorii, zwykle `!'. Drugi jest znakiem \"szybkiego podstawienia\",\n" +" \t\thistorii, zwykle `!'. Drugi jest znakiem \"szybkiego " +"podstawienia\",\n" " \t\tzwykle `^'. Trzeci znak jest znakiem \"komentarza historii\",\n" " \t\tzwykle `#'.\n" " HISTIGNORE\tRozdzielona dwukropkami lista wzorców używanych przy\n" " \t\tdecydowaniu, które polecenia powinny być zapisywane na liście\n" " \t\thistorii.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5255,7 +5661,8 @@ msgstr "" " \t\tod lewej strony listy wypisywanej przez `dirs', począwszy od zera).\n" " \n" " -N\tRotacja stosu czyniąca jego wierzchołkiem N-ty katalog (licząc\n" -" \t\tod prawej strony listy wypisywanej przez `dirs', począwszy od zera).\n" +" \t\tod prawej strony listy wypisywanej przez `dirs', począwszy od " +"zera).\n" " \n" " KATALOG\tUmieszczenie KATALOGU na wierzchołku stosu i uczynienie go\n" " \t\tnowym bieżącym katalogiem roboczym.\n" @@ -5263,10 +5670,11 @@ msgstr "" " Zawartość stosu katalogów można zobaczyć za pomocą polecenia `dirs'.\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda, chyba że podano błędny argument lub zmiana katalogu\n" +" Zwracana jest prawda, chyba że podano błędny argument lub zmiana " +"katalogu\n" " się nie powiedzie." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5314,10 +5722,11 @@ msgstr "" " Zawartość stosu katalogów można zobaczyć za pomocą polecenia `dirs'.\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda, chyba że podano błędny argument lub zmiana katalogu\n" +" Zwracana jest prawda, chyba że podano błędny argument lub zmiana " +"katalogu\n" " się nie powiedzie." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5347,7 +5756,8 @@ msgid "" msgstr "" "Wypisanie stosu katalogów.\n" " \n" -" Wypisanie listy aktualnie pamiętanych katalogów. Katalogi umieszczane są\n" +" Wypisanie listy aktualnie pamiętanych katalogów. Katalogi umieszczane " +"są\n" " na liście za pomocą polecenia `pushd'; można cofać się w obrębie listy\n" " za pomocą polecenia `popd'.\n" " \n" @@ -5370,7 +5780,7 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5391,8 +5801,10 @@ msgid "" msgstr "" "Ustawianie i anulowanie opcji powłoki.\n" " \n" -" Zmiana ustawienia każdej z NAZWY-OPCJI. Bez argumentów będących opcjami,\n" -" wypisywane są wszystkie podane NAZWY-OPCJI, lub wszystkie opcje powłoki,\n" +" Zmiana ustawienia każdej z NAZWY-OPCJI. Bez argumentów będących " +"opcjami,\n" +" wypisywane są wszystkie podane NAZWY-OPCJI, lub wszystkie opcje " +"powłoki,\n" " jeśli nie podano NAZW-OPCJI, wraz z zaznaczeniem włączonych.\n" " \n" " Opcje:\n" @@ -5403,10 +5815,12 @@ msgstr "" " -u\twyłączenie (anulowanie) każdej NAZWY-OPCJI\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda jeśli NAZWA-OPCJI jest włączona; niepowodzenie, jeśli\n" +" Zwracana jest prawda jeśli NAZWA-OPCJI jest włączona; niepowodzenie, " +"jeśli\n" " podano błędną opcję lub NAZWA-OPCJI jest wyłączona." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5414,29 +5828,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Formatowanie i wypisanie ARGUMENTÓW zgodnie z FORMATEM.\n" @@ -5446,9 +5867,12 @@ msgstr "" " \t\twypisywania na standardowym wyjściu\n" " \n" " FORMAT jest łańcuchem znakowym zawierającym trzy rodzaje obiektów:\n" -" zwykłe znaki, które są kopiowane na standardowe wyjście; znaki sekwencji\n" -" sterujących, które są przekształcane i kopiowane na standardowe wyjście;\n" -" oraz sekwencje formatujące, z których każda powoduje wypisanie kolejnego\n" +" zwykłe znaki, które są kopiowane na standardowe wyjście; znaki " +"sekwencji\n" +" sterujących, które są przekształcane i kopiowane na standardowe " +"wyjście;\n" +" oraz sekwencje formatujące, z których każda powoduje wypisanie " +"kolejnego\n" " argumentu.\n" " \n" " Poza standardowymi sekwencjami formatującymi opisanymi w printf(1) oraz\n" @@ -5471,13 +5895,16 @@ msgstr "" " Zwracana jest prawda, chyba że podano błędną opcję lub zapis albo\n" " przypisanie zakończy się niepowodzeniem." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5491,8 +5918,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5500,7 +5929,8 @@ msgstr "" "Określenie sposobu dopełniania argumentów przez Readline.\n" " \n" " Określenie dla każdej NAZWY sposobu dopełniania argumentów. Jeśli nie\n" -" podano opcji, wypisywane są istniejące specyfikacje dopełniania w sposób\n" +" podano opcji, wypisywane są istniejące specyfikacje dopełniania w " +"sposób\n" " pozwalający na ich ponowne użycie jako wejście.\n" " \n" " Opcje:\n" @@ -5521,13 +5951,19 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5541,13 +5977,16 @@ msgstr "" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5573,7 +6012,8 @@ msgstr "" " \n" " Zmiana opcji dopełniania dla każdej NAZWY lub, jeśli nie podano NAZW,\n" " aktualnie wykonywanego dopełniania. Jeśli nie podano OPCJI, wypisanie\n" -" opcji dopełniania dla każdej NAZWY lub bieżącej specyfikacji dopełniania.\n" +" opcji dopełniania dla każdej NAZWY lub bieżącej specyfikacji " +"dopełniania.\n" " \n" " Opcje:\n" " \t-o opcja\tUstawienie podanej OPCJI dopełniania dla każdej NAZWY\n" @@ -5585,31 +6025,38 @@ msgstr "" " \n" " Argumenty:\n" " \n" -" Każda NAZWA odnosi się do polecenia, dla którego specyfikacja dopełniania\n" +" Każda NAZWA odnosi się do polecenia, dla którego specyfikacja " +"dopełniania\n" " musi być wcześniej zdefiniowana przy użyciu polecenia wbudowanego\n" " `complete'. Jeśli nie podano NAZW, compopt musi być wywołane z funkcji\n" -" aktualnie generującej dopełnienia, wtedy zmieniane są opcje dla aktualnie\n" +" aktualnie generującej dopełnienia, wtedy zmieniane są opcje dla " +"aktualnie\n" " wykonywanego generatora dopełnień.\n" " \n" " Stan wyjściowy:\n" " Zwracana jest prawda, chyba że podano błędną opcję lub NAZWA nie ma\n" " zdefiniowanej specyfikacji dopełniania." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5622,11 +6069,13 @@ 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 "" "Odczyt linii ze standardowego wejścia do zmiennej tablicowej indeksowanej.\n" @@ -5636,7 +6085,8 @@ msgstr "" " jest domyślną TABLICĄ.\n" " \n" " Opcje:\n" -" -d ogr\tUżycie OGRanicznika do kończenia linii zamiast znaku nowej linii\n" +" -d ogr\tUżycie OGRanicznika do kończenia linii zamiast znaku nowej " +"linii\n" " -n liczba\tSkopiowanie maksymalnie podanej LICZBY linii. Jeśli LICZBA\n" " \t\t\twynosi 0, kopiowane są wszystkie linie.\n" " -O początek\tRozpoczęcie wpisywania do TABLICY od indeksu POCZĄTKU.\n" @@ -5651,17 +6101,19 @@ msgstr "" " TABLICA\tNazwa zmiennej tablicowej do użycia na dane z pliku.\n" " \n" " Jeśli podano -C bez -c, domyślnym krokiem jest 5000. Podczas obliczania\n" -" WYWOŁANIA jest przekazywany indeks do następnego elementu tablicy, który\n" +" WYWOŁANIA jest przekazywany indeks do następnego elementu tablicy, " +"który\n" " ma być przypisany oraz - jako kolejne argumenty - linia do przypisania.\n" " \n" " Jeśli nie podano jawnie początku, mapfile czyści TABLICĘ przed\n" " przypisywaniem.\n" " \n" " Stan wyjściowy:\n" -" Zwracana jest prawda, chyba że podano błędną opcję lub TABLICA jest tylko\n" +" Zwracana jest prawda, chyba że podano błędną opcję lub TABLICA jest " +"tylko\n" " do odczytu, lub nie jest tablicą indeksowaną." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5670,3 +6122,31 @@ msgstr "" "Odczyt linii z pliku do zmiennej tablicowej.\n" " \n" " Synonim polecenia `mapfile'." + +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Zwrócenie kontekstu wywołania bieżącej procedury.\n" +#~ " \n" +#~ " Bez WYRAŻENIA zwracane jest \"$linia $plik\". Z WYRAŻENIEM zwracane " +#~ "jest\n" +#~ " \"$linia $procedura $plik\"; dodatkowe informacje służą do " +#~ "udostępnienia\n" +#~ " śladu stosu.\n" +#~ " \n" +#~ " Wartość WYRAŻENIA określa o ile ramek wywołań względem bieżącej " +#~ "ramki\n" +#~ " należy się cofnąć; numer najwyższej ramki to 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "uwaga: %s: %s" diff --git a/po/pt.gmo b/po/pt.gmo index 0f516eeac9c5cb5158256daeb0a357253b96fc2d..b398e13ea0ea34f89d8ba145809df433ff5208ce 100644 GIT binary patch delta 12358 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 delta 42815 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 diff --git a/po/pt.po b/po/pt.po index d0933599e..86cb7014f 100644 --- a/po/pt.po +++ b/po/pt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-5.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2020-12-08 03:20+0000\n" "Last-Translator: Pedro Albuquerque <pmra@protonmail.com>\n" "Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n" @@ -19,125 +19,126 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Geany / PoHelper 1.37\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "subscrito de matriz inválido" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: a remover atributo nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: impossível converter matriz indexada para associativa" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: impossível atribuir a índice não numérico" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: tem de usar subscrito ao atribuir a matriz associativa" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: impossível criar: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "bash_execute_unix_command: impossível encontrar mapa de teclado para o " "comando" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: o 1º carácter não-espaço não é \"\"\"" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "sem \"%c\" de fecho em %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: separador dois pontos em falta" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "\"%s\": impossível desassociar no mapa de teclado do comando" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "expansão: impossível alocar memória para %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "expansão: falha ao alocar memória para %u elementos" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "expansão: falha ao alocar memória para \"%s\"" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "\"%s\": aliás inválido" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "Edição de linha não activada" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "\"%s\": mapa de teclado inválido" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: impossível ler: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "\"%s\": nome de função desconhecido" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s: não tem associação a qualquer tecla.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s pode ser chamado via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "\"%s\": impossível desassociar" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "total de ciclos" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "só tem significado num ciclo \"for\", \"while\" ou \"until\"" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -146,9 +147,13 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" -"Devolve o contexto da actual chamada a sub-rotina.\n" +"Devolver o contexto da actual chamada a sub-rotina.\n" " \n" " Sem EXPR, devolve \"$linha $nomefich\". Com EXPR, devolve\n" " \"$linha $sub-rotina $nomefich\"; esta informação extra pode ser usada\n" @@ -156,354 +161,365 @@ msgstr "" " \n" " O valor de EXPR indica quantas chamadas deve recuar antes da\n" " actual; a chamada superior é a chamada 0.\n" +" \n" " Estado de saída:\n" " Devolve 0 a não ser que a consola não esteja a executar uma função ou " "EXPR\n" " seja inválida." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME não definida" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "demasiados argumentos" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "pasta nula" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD não definida" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "linha %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "aviso: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: uso: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: a opção requer um argumento" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: requer um argumento numérico" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: não encontrado" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: opção inválida" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: nome de opção inválido" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "\"%s\": identificador inválido" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "número octal inválido" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "número hexadecimal inválido" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "número inválido" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: especificação de sinal inválida" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "\"%s\": especificação de pid ou tarefa inválida" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: variável só de leitura" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: impossível desactivar" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s fora do intervalo" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argumento" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s fora do intervalo" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: tarefa inexistente" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: sem controlo da tarefa" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "sem controlo da tarefa" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: restrita" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "restrita" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: não é interno da consola" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "erro de escrita: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "erro ao definir atributos do terminal: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "erro ao obter atributos do terminal: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: erro ao obter a pasta actual: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: especificação de tarefa ambígua" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "ajuda indisponível nesta versão" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: não é uma matriz indexada" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: impossível desactivar: %s só de leitura" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: impossível desactivar" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nome de acção inválido" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: sem especificação de conclusão" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "aviso: a opção -F pode não resultar como esperado" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "aviso: a opção -C pode não resultar como esperado" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "a função de conclusão não está em execução" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "só pode ser usado numa função" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "impossível usar \"-f\" para fazer funções" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: função só de leitura" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: variável de referência não pode ser uma matriz" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: não são permitidas auto-referências de nameref" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: referência circular de nome" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "\"%s\": nome de variável inválido para referência de nome" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: impossível destruir variáveis de matriz assim" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: impossível converter matriz associativa em indexada" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: atribuição de matriz composta citada obsoleta" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "carregamento dinâmico indisponível" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "impossível abrir objecto partilhado %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "impossível encontrar %s no objecto partilhado %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: interno dinâmico já carregado" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "carregamento da função %s devolve falha (%d): não carregada" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: não carregada dinamicamente" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: impossível eliminar: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: é uma pasta" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: não é um ficheiro normal" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: ficheiro muito grande" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: impossível executar o binário" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: impossível executar: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "logout\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "não é consola de sessão: use \"exit\"" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Há tarefas interrompidas.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Há tarefas em curso.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "sem comando encontrado" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "especificação de histórico" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: impossível abrir ficheiro temporário: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "actual" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "tarefa %d começou sem controlo de tarefa" @@ -518,11 +534,11 @@ msgstr "%s: opção ilegal -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: a opção requer um argumento -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashing desactivado" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: tabela de hash vazia\n" @@ -554,12 +570,12 @@ msgstr "" "nenhum tópico de ajuda para \"%s\". Tente \"help help\", \"man -k %s\" ou " "\"info %s\"." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: impossível abrir: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -579,21 +595,31 @@ msgstr "" "Um asterisco (*) junto a um nome significa que o comando está inactivo.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "impossível usar mais de um -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "posição do histórico" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "nome de variável de matriz vazio" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parâmetro nulo ou não definido" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: datação inválida" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: falha na expansão do histórico" @@ -607,113 +633,113 @@ msgstr "%s: falha inlib" msgid "no other options allowed with `-x'" msgstr "não são permitidas mais opções com \"-x\"" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: os argumentos têm de ser IDs de processos ou tarefas" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Erro desconhecido" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "esperada expressão" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: não é uma matriz indexada" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: especificação de descritor de ficheiro inválida" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: descritor de ficheiro inválido: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: total de linhas inválido" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: origem de matriz inválida" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: callback inválida" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "nome de variável de matriz vazio" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "requerido suporte a variáveis de matriz" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "%s: carácter de formato em falta" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "\"%c\": especificação de formato de hora inválida" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "\"%c\": carácter de formato inválido" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "aviso: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "problema de análise de formato: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "dígito hex em falta para \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "dígito unicode em falta para \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "nenhuma outra pasta" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: argumento inválido" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<sem pasta actual>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "pilha de pastas vazia" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "índice da pilha de pastas" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -755,7 +781,7 @@ msgstr "" " -N\tmostra a N entrada a contar da direita da lista mostrada por\n" " \tpastas quando chamada sem opções, começando com zero." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -801,7 +827,7 @@ msgstr "" " \n" " O \"dirs\" interno mostra a pilha de pastas." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -839,319 +865,331 @@ msgstr "" " \n" " O \"dirs\" interno mostra a pilha de pastas." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: especificação de inacção inválida" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "erro de leitura: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "só pode usar \"return\" a partir de uma função ou script baseado" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "impossível desactivar simultaneamente uma função e uma variável" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: não é variável de matriz" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: não é função" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: impossível exportar" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "total de trocas" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "impossível definir e desactivar opções da consola em simultâneo" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: nome de opção da consola inválido" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "requerido argumento de nome de ficheiro" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: ficheiro não encontrado" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "impossível suspender" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "impossível suspender uma consola de sessão" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s usa o aliás \"%s\"\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s é palavra-chave da consola\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s é uma função\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s é opção interna especial da consola\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s é uma função\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s é opção interna da consola\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s é %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s tem hash (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: argumento de limite inválido" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "\"%c\": comando errado" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: impossível obter limite: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limite" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: impossível modificar limite: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "número octal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "\"%c\": operador de modo simbólico inválido" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "\"%c\": carácter de modo simbólico inválido" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " linha " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "último comando: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "A abortar..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORM.: " -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "aviso: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "erro de comando desconhecido" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "tipo de comando errado" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "conector errado" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "salto errado" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: variável desassociada" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aDemasiada inacção à espera de entrada: sessão terminada\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "impossível redireccionar entrada padrão de /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "FORMATOHORA: \"%c\": carácter de formato inválido" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] ainda existe" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "erro de pipe" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: nível máximo de aninhamento de eval excedido (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: nível máximo de aninhamento de fonte excedido (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: nível máximo de aninhamento de função excedido (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restrito: impossível especificar \"/\" em nomes de comando" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: comando não encontrado" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: interpretador errado" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: impossível executar o binário" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: interpretador errado" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: impossível executar binário: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "%s: é uma opção interna especial" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "impossível duplicar fd %d para fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "nível de recursão da expressão excedido" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "sub-fluxo da pilha de recursividade" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "erro de sintaxe na expressão" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "tentativa de atribuição a não-variável" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "erro de sintaxe na atribuição de variável" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "divisão por 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "problema: símbolo expassign errado" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "\":\" esperados para expressão condicional" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "expoente menor que 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "identificador esperado após pré-incremento ou pré-decremento" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "\")\" em falta" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "erro de sintaxe: operando esperado" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "erro de sintaxe: operador aritmético inválido" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (símbolo de erro é \"%s\")" @@ -1168,7 +1206,7 @@ msgstr "constante inteira inválida" msgid "value too great for base" msgstr "valor muito grande para a base" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: erro de expressão\n" @@ -1177,47 +1215,52 @@ msgstr "%s: erro de expressão\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: impossível aceder a pastas-mãe" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "%s: é uma opção interna especial" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "impossível repor modo nodelay para fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "" "impossível alocar novo descritor de ficheiro para entrada bash de fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: buffer já existe para o novo fd %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pipe pgrp" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "pid %d aparece em tarefa em execução %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "a eliminar tarefa interrompida %d com grupo de processo %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) marcado como ainda activo" @@ -1227,137 +1270,137 @@ msgstr "add_process: pid %5ld (%s) marcado como ainda activo" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: pid não existente" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Sinal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Feito" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Interrompido" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Interrompido(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Em execução" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Feito(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Sair de %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Estado desconhecido" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(núcleo despejado) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid filho (%ld para %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld não é um filho desta consola" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: sem registo do processo %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_tarefa: tarefa %d está interrompida" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: sem tarefas actuais" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: tarefa terminada" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: tarefa %d já em 2º plano" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: a ligar WNOHANG para evitar bloquieo indefinido" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: linha %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (núcleo despejado)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd agora: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp falhou" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: sem controlo de tarefa em 2º plano" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: disciplina de linha" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "impossível definir grupo de processo do terminal (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "não há controlo de tarefa nesta consola" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: asserção falhada: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1366,152 +1409,152 @@ msgstr "" "\r\n" "malloc: %s:%d: asserção frustrada\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "desconhecido" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: bloqueio na lista livre clobbered" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: chamado com argumento de bloco já liberto" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: chamado com argumento de bloco não alocado" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: sub-fluxo detectado; mh_nbytes fora do intervalo" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: sub-fluxo detectado; magic8 corrompido" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: tamanho dos pontos inicial e final difere" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: chamado com argumento de bloco não alocado" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: sub-fluxo detectado; mh_nbytes fora do intervalo" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: sub-fluxo detectado; magic8 corrompido" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: tamanho dos pontos inicial e final difere" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: tabela de alocação cheia com FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p já na tabela como alocado?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p já na tabela como livre?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "base inválida" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: anfitrião desconhecido" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: serviço inválido" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: especificação de caminho de rede errada" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "operações de rede não suportadas" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: não pode alterar o idioma (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: não pode alterar o idioma (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: não pode alterar o idioma (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: não pode alterar o idioma (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Tem correio em $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Tem novo correio em $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "O correio em %s já foi lido\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "erro de sintaxe: requerida expressão aritmética" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "erro de sintaxe: \";\" inesperado" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "erro de sintaxe: \"((%s))\"" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: tipo de instrução %d errado" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" "here-document na linha %d delimitado por fim-de-ficheiro (desejado \"%s\")" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "" "make_redirection: instrução de redireccionamento \"%d\" fora do intervalo" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " @@ -1520,228 +1563,238 @@ msgstr "" "consola_getc: consola_input_line_size (%zu) excede SIZE_MAX (%lu): linha " "truncada" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "erro de escrita: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "total here-document máximo excedido" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "EOF inesperado ao procurar \"%c\" correspondentes" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "EOF inesperado ao procurar \"]]\"" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "erro de sintaxe em expressão condicional: símbolo inesperado \"%s\"" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "erro de sintaxe em expressão condicional" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "símbolo inesperado \"%s\", esperado \")\"" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "esperado \")\"" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "argumento \"%s\" inesperado para operador unário condicional" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "argumento inesperado para operador unário condicional" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "símbolo \"%s\" inesperado, esperado operador binário condicional" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "esperado operador binário condicional" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "argumento \"%s\" inesperado para operador binário condicional" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "argumento inesperado para operador binário condicional" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "símbolo \"%c\" inesperado em comando condicional" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "símbolo \"%s\" inesperado em comando condicional" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "símbolo %d inesperado em comando condicional" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "erro de sintaxe junto a símbolo \"%s\" inesperado" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "erro de sintaxe junto a \"%s\"" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "erro de sintaxe: fim de ficheiro inesperado" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "erro de sintaxe: fim de ficheiro inesperado" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "erro de sintaxe" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Use \"%s\" para sair da consola.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "EOF inesperado ao procurar o \")\" correspondente" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: função \"%s\" não encontrada" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: possível ciclo de repetição" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: conector \"%d\" errado" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: descritor de ficheiro inválido" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: ponteiro de ficheiro NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: \"%c\": carácter de formato inválido" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "descritor de ficheiro fora de alcance" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: redireccionamento ambíguo" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: impossível sobrescrever ficheiro existente" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restricto: impossível redireccionar saída" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "impossível criar ficheiro temporário para here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: impossível atribuir fd a variável" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port não suportado em trabalho de rede" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "erro de redireccionamento: impossível duplicar fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "impossível encontrar /tmp, por favor crie-a!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp tem de ser um nome de pasta válido" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "modo pretty-printing ignorado em consolas interactivas" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: opção inválida" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "impossível definir uid como %d: uid efectiva %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "impossível definir gid como %d: gid efectiva %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "impossível iniciar o depurador; modo de depuração desactivado" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: é uma pasta" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Não tenho nome!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versão %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1750,52 +1803,52 @@ msgstr "" "Uso:\t%s [opção longa GNU] [opção] ...\n" "\t%s [opção longa GNU] [opção] script-file ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Opções longas GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Opções da consola:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\tcomando -ilrsD ou -c ou -O shopt_option\t\t(só chamada)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\topção -%s ou -o\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Insira \"%s -c \"help set\"\" para mais informação sobre opções da consola.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Insira \"%s -c help\" para mais informação sobre comandos internos da " "consola.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Use o comando \"bashbug\" para reportar erros.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Página inicial do bash: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Ajuda geral para usar programas GNU: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: operação inválida" @@ -1965,96 +2018,100 @@ msgstr "Pedido de informação" msgid "Unknown Signal #%d" msgstr "Sinal desconhecido #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "má substituição: sem \"%s\" de fecho em %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: impossível atribuir lista a membro de matriz" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "impossível fazer pipe para substituição de processo" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "impossível fazer filho para substituição de processo" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "impossível abrir pipe chamado %s para leitura" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "impossível abrir pipe chamado %s para escrita" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "imossível duplicar pipe chamado %s como fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "substituição de comando: byte nulo ignorado na entrada" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: impossível duplicar pipe como fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "impossível fazer pipe para substituição de comando" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "impossível fazer filho para substituição de comando" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: impossível duplicar pipe como fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: nome de variável inválido para referência de nome" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: expansão indirecta inválida" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: nome de variável inválido" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parâmetro não definido" +msgid "%s: bad substitution" +msgstr "%s: má substituição" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parâmetro nulo ou não definido" +msgid "%s: parameter not set" +msgstr "%s: parâmetro não definido" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: expressão de sub-cadeia < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: má substituição" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: impossível atribuir desta forma" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2062,68 +2119,68 @@ msgstr "" "futuras versões da consola vão forçar a avaliação como uma substituição " "aritmética" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "má substituição: sem \"\"\" de fecho em %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "sem par:%s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argumento esperado" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: expressão inteira esperada" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "\")\" esperado" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "\")\" esperado, encontrado %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: operador bináro esperado" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: operador unáro esperado" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "\"]\" em falta" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "erro de sintaxe: \"%s\" esperado" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "número de sinal inválido" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "gestor de trap: nível máximo de gestor de captura excedido (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: valor errado em trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" @@ -2131,93 +2188,101 @@ msgstr "" "run_pending_traps: gestor de sinal é SIG_DFL, a reenviar %d (%s) para mim " "próprio" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: sinal errado %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "erro ao importar definição de função para \"%s\"" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "nível da consola (%d) muito alto, a repor para 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "total here-document máximo excedido" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variável: sem contexto de função no âmbito actual" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: não pode atribuir um valor à variável" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: a atribuir inteiro à referência de nome" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: sem contexto de função no âmbito actual" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s tem exportstr nulo" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "carácter %d inválido em exportstr para %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "sem \"=\" em exportstr para %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: cabeça de consola_variables não é contexto de função" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: sem contexto de global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" "pop_scope: cabeça de consola_variables não é âmbito de ambiente temporário" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: impossível abrir como FICHEIRO" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: valor inválido para descritor de ficheiro trace" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: valor de compatibilidade fora do intervalo" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2020 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2225,35 +2290,35 @@ msgstr "" "Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl." "html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versão %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Este é um programa gratuito; pode alterá-lo e distribuí-lo à vontade." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Não há QUALQUER GARANTIA, até aos limites previstos pela Lei." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: impossível alocar %lu bytes (%lu bytes alocados)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: impossível alocar %lu bytes" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: impossível alocar %lu bytes (%lu bytes alocados)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: impossível alocar %lu bytes" @@ -2292,7 +2357,8 @@ msgid "caller [expr]" msgstr "caller [expr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [pst]" #: builtins.c:68 @@ -2402,8 +2468,9 @@ msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a matriz] [-d delim] [-i texto] [-n ncars] [-N ncars] [-p " @@ -2455,7 +2522,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] signal_spec ...]" #: builtins.c:168 @@ -2480,26 +2548,30 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NOME [in PALAVRAS ... ] ; do COMANDOS; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do COMANDOS; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NOME [in PALAVRAS ... ;] do COMANDOS; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] pipeline" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case PALAVRA in [PADRÃO [| PADRÃO]...) COMANDOS ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2507,65 +2579,65 @@ msgstr "" "if COMANDOS; then COMANDOS; [ elif COMANDOS; then COMANDOS; ]... [ else " "COMANDOS; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while COMANDOS; do COMANDOS; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until COMANDOS; do COMANDOS; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NOME] comando [redireccionamentos]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "nome de função { COMANDOS ; } ou nome () { COMANDOS ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ COMANDOS ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expressão ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expressão ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variáveis - nomes e significados de algumas variáveis da consola" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | pasta]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [nomeopção ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] formato [argumentos]" -#: builtins.c:231 +#: builtins.c:233 msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " @@ -2575,20 +2647,22 @@ msgstr "" "padrãoglobal] [-W listapalavras] [-F função] [-C comando] [-X padrãofiltro] " "[-P prefixo] [-S sufixo] [nome ...]" -#: builtins.c:235 +#: builtins.c:237 +#, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o opção] [-A acção] [-G padrãoglobal] [-W " "listapalavras] [-F função] [-C comando] [-X padrãofiltro] [-P prefixo] [-S " "sufixo] [palavra]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o opção] [-DEI] [nome ...]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2596,7 +2670,7 @@ msgstr "" "mapfile [-d delim] [-n total] [-O origem] [-s total] [-t] [-u fd] [-C " "callback] [-c quantia] [matriz]" -#: builtins.c:244 +#: builtins.c:246 msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2604,7 +2678,7 @@ msgstr "" "readarray [-d delim] [-n total] [-O origem] [-s total] [-t] [-u fd] [-C " "callback] [-c quantum] [matriz]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2640,7 +2714,7 @@ msgstr "" "qual\n" "ainda não haja um aliás." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2656,7 +2730,7 @@ msgstr "" " \n" " Devolve sucesso a não ser que NOME seja um aliás inexistente." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2748,7 +2822,7 @@ msgstr "" " bind devolve 0 a não ser que seja dada uma opção desconhecida ou ocorra " "um erro." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2767,7 +2841,7 @@ msgstr "" " Estado de saída:\n" " O estado de saída é 0 a não ser que N não seja maior ou igual que 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2785,7 +2859,7 @@ msgstr "" " Estado de saída:\n" " O estado de saída é 0 a não ser que N não seja maior ou igual que 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \n" @@ -2811,7 +2885,7 @@ msgstr "" "não\n" " for um comando interno da consola." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2840,13 +2914,14 @@ msgstr "" "EXPR\n" " seja inválida." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2927,7 +3002,7 @@ msgstr "" "quando\n" " -P é usada; caso contrário, não-zero." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2957,7 +3032,7 @@ msgstr "" "actual\n" " não possa ser lida." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2973,7 +3048,7 @@ msgstr "" " Estado de saída:\n" " Sempre com sucesso." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2985,7 +3060,7 @@ msgstr "" " Estado de saída:\n" " Sempre com sucesso." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2997,7 +3072,7 @@ msgstr "" " Estado de saída:\n" " Falha sempre." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3027,15 +3102,16 @@ msgstr "" " -p usar valor predefinido para CAMINHO que garanta que se " "encontram\n" " todos os utilitários padrão\n" -" -v imprimir uma descrição de COMANDO similar ao interno \"type" -"\"\n" +" -v imprimir uma descrição de COMANDO similar ao interno " +"\"type\"\n" " -V imprimir uma descrição mais detalhada de COMANDO\n" " \n" " Estado de saída:\n" " Devolve o estado de saída de COMANDO ou falha se COMANDO não for " "encontrado." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -3063,7 +3139,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3117,7 +3194,7 @@ msgstr "" "ocorra um\n" " erro de atribuição da variável." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3127,7 +3204,7 @@ msgstr "" " \n" " Um sinónimo para \"declare\". Veja \"help declare\"." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3155,7 +3232,7 @@ msgstr "" "ocorra \n" " um erro de atribuição ou a consola não esteja a executar uma função." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3230,7 +3307,7 @@ msgstr "" " Estado de saída:\n" " Devolve sucesso a não ser que ocorra um erro de escrita." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3252,7 +3329,8 @@ msgstr "" " Estado de saída:\n" " Devolve sucesso a não ser que ocorra um erro de escrita." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3272,6 +3350,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3304,7 +3388,7 @@ msgstr "" " Devolve sucesso a não ser que NOME não seja um interno da consola ou " "ocorra um erro." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3324,7 +3408,7 @@ msgstr "" " Estado de saída:\n" " Devolve estado de saída do comando ou sucesso se o comando for nulo." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3405,7 +3489,7 @@ msgstr "" " Devolve sucesso se encontrar uma opção; falha se o fim da opção for\n" " encontrado ou se ocorrer um erro." -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3448,7 +3532,7 @@ msgstr "" " Devolve sucesso a não ser que COMANDO não seja encontrado ou ocorra um " "erro de redireccionamento." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3460,7 +3544,7 @@ msgstr "" " Sai da consola com estado N. Se N for omitido, o estado de saída\n" " é o do último comando executado." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3474,7 +3558,8 @@ msgstr "" "se não for\n" " executado numa consola com sessão." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3499,6 +3584,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3532,7 +3619,7 @@ msgstr "" " Devolve sucesso ou estado do comando executado; não-zero se ocorrer um " "erro." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3552,7 +3639,7 @@ msgstr "" " Estado de saída:\n" " Estado do comando colocado em 1º plano ou falha se ocorrer um erro." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3577,7 +3664,7 @@ msgstr "" " Devolve sucesso a não ser que o controlo de tarefas esteja inactivo ou " "ocorra um erro." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3621,7 +3708,7 @@ msgstr "" " Devolve sucesso a não ser que NOME não seja encontrado ou indique uma " "opção inválida." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3662,7 +3749,8 @@ msgstr "" " Devolve sucesso a não ser que PADRÃO não seja encontrado ou indique uma " "opção inválida." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3686,7 +3774,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3735,7 +3827,7 @@ msgstr "" " Devolve sucesso a não ser que indique uma opção inválida ou ocorra um " "erro." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3782,7 +3874,7 @@ msgstr "" "erro.\n" " Se -x for usado, devolve o estado de saída de COMANDO." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3814,7 +3906,7 @@ msgstr "" " Devolve sucesso a não ser que uma opção inválida ou JOBSPEC seja " "indicada." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3858,7 +3950,7 @@ msgstr "" " Devolve sucesso a não ser que indique uma opção inválida ou ocorra um " "erro." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3947,7 +4039,7 @@ msgstr "" " Estado de saída:\n" " Se o último ARG for avaliado como 0, let devolve 1; senão let devolve 0." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -3972,6 +4064,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -4052,7 +4146,7 @@ msgstr "" "variável,\n" " ou seja indicado um descritor de ficheiro inválido como argumento de -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4073,7 +4167,8 @@ msgstr "" " Devolve N, ou falha se a consola não estiver a executar uma função ou " "script." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -4149,6 +4244,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4251,7 +4350,7 @@ msgstr "" " Estado de saída:\n" " Devolve sucesso a não ser que indique uma opção inválida." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4291,7 +4390,7 @@ msgstr "" " Devolve sucesso a não ser que indique uma opção inválida ou NOME seja " "só de leitura." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4326,7 +4425,7 @@ msgstr "" " Devolve sucesso a não ser que indique uma opção inválida ou NOME seja " "inválido." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4366,7 +4465,7 @@ msgstr "" " Devolve sucesso a não ser que indique uma opção inválida ou NOME seja " "inválido." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4384,7 +4483,7 @@ msgstr "" " Estado de saída:\n" " Devolve sucesso a não ser que N seja negativo ou maior que $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4408,15 +4507,18 @@ msgstr "" " Devolve o estado do último comando executado em NOMEFICH; falha se\n" " NOMEFICH não pode ser lido." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4433,7 +4535,7 @@ msgstr "" " Devolve sucesso a não ser que o controlo de tarefa esteja inactivo ou " "ocorra um erro." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4612,7 +4714,7 @@ msgstr "" "for\n" " avaliado como falso ou for indicado um argumento inválido." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4624,7 +4726,7 @@ msgstr "" " Este é um sinónimo para o interno \"test\", mas o último argumento tem\n" " de ser um \"]\" literal, para fechar o \"[\" aberto." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4644,7 +4746,8 @@ msgstr "" " Estado de saída:\n" " Sempre com sucesso." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy msgid "" "Trap signals and other events.\n" " \n" @@ -4652,31 +4755,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4727,7 +4835,7 @@ msgstr "" " Devolve sucesso a não ser que SIGSPEC seja inválido ou indique uma " "opção inválida." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4785,7 +4893,8 @@ msgstr "" " Devolve sucesso se todos os NOMEs forem encontrados; falha se algum não " "for." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" @@ -4827,9 +4936,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4887,7 +4997,7 @@ msgstr "" " Devolve sucesso a não ser que seja indicada uma opção inválida ou " "ocorra um erro." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4924,7 +5034,7 @@ msgstr "" " Devolve sucesso a não ser que MODO seja inválido ou indique uma opção " "inválida." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -4990,7 +5100,7 @@ msgstr "" " uma opção inválida, ou se -n for indicada e a consola não tiver filhos\n" " inesperados." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -5017,7 +5127,16 @@ msgstr "" "indicada\n" " uma opção inválida." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -5033,8 +5152,8 @@ msgstr "" " \n" " O ciclo \"for\" executa uma seqüência de comandos para cada membro " "numa\n" -" lista de itens. Se \"in PALAVRAS ...;\" não estiver presente, \" in \"$@" -"\" \" é\n" +" lista de itens. Se \"in PALAVRAS ...;\" não estiver presente, \" in " +"\"$@\" \" é\n" " assumido. Para cada elemento em PALAVRAS, NOME está definido para " "esseelemento,\n" " e os COMANDOS são executados.\n" @@ -5042,7 +5161,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado do último comando executado." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -5073,7 +5192,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado do último comando executado." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5109,7 +5228,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado do último comando executado." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5138,7 +5257,7 @@ msgstr "" " Estado de saída:\n" " O estado devolvido é o estado de PIPELINE." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5156,7 +5275,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado do último comando executado." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5194,7 +5313,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado do último comando executado." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5214,7 +5333,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado do último comando executado." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5234,7 +5353,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado do último comando executado." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5257,7 +5376,7 @@ msgstr "" " Estado de saída:\n" " O comando coproc devolve um estado de saída 0." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5280,7 +5399,7 @@ msgstr "" " Estado de saída:\n" " Devolve sucesso a não ser que NOME seja só de leitura." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5298,7 +5417,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado do último comando executado." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5322,7 +5441,7 @@ msgstr "" " Estado de saída:\n" " Devolve o estado da tarefa retomada." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5341,7 +5460,7 @@ msgstr "" " Estado de saída:\n" " Devolve 1 se EXPRESSÃO avaliar como 0; senão, devolve 0." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5393,7 +5512,7 @@ msgstr "" " Os operadores && e || não avaliam EXPR2 se EXPR1 for suficiente para\n" " determinar o valor da expressão." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5502,7 +5621,7 @@ msgstr "" "quais\n" " \t\tos comandos que devem ser gravados na lista de histórico.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5560,7 +5679,7 @@ msgstr "" " Devolve sucesso a não ser que indique um argumento inválido ou a\n" " troca de pastas falhe." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5610,7 +5729,7 @@ msgstr "" " Devolve sucesso a não ser que indique um argumento inválido ou a troca\n" " de pastas falhe." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5665,7 +5784,7 @@ msgstr "" " Devolve sucesso a não ser que indique uma opção inválida ou ocorra um " "erro" -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5701,7 +5820,7 @@ msgstr "" " Devolve sucesso se OPTNOME estiver activado; falha se indicar uma opção\n" " inválida ou OPTNOME esteja desactivada." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5719,9 +5838,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5779,15 +5898,16 @@ msgstr "" "erro de\n" " escrita ou atribuição." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5839,14 +5959,19 @@ msgstr "" "devolve sucesso a não ser que seja fornecida uma opção inválida ou ocorra um " "erro." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5861,7 +5986,7 @@ msgstr "" " Devolve sucesso a não ser que indique uma opção inválida ou ocorra um " "erro." -#: builtins.c:2019 +#: builtins.c:2062 msgid "" "Modify or display completion options.\n" " \n" @@ -5925,7 +6050,7 @@ msgstr "" "tenha\n" " uma especificação de conclusão definida." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -6004,7 +6129,7 @@ msgstr "" "só\n" " de leitura ou não seja uma matriz indexada." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -6014,6 +6139,36 @@ msgstr "" " \n" " Um sinónimo para \"mapfile\"." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Devolve o contexto da actual chamada a sub-rotina.\n" +#~ " \n" +#~ " Sem EXPR, devolve \"$linha $nomefich\". Com EXPR, devolve\n" +#~ " \"$linha $sub-rotina $nomefich\"; esta informação extra pode ser " +#~ "usada\n" +#~ " para obter um rasto da pilha.\n" +#~ " \n" +#~ " O valor de EXPR indica quantas chamadas deve recuar antes da\n" +#~ " actual; a chamada superior é a chamada 0.\n" +#~ " Estado de saída:\n" +#~ " Devolve 0 a não ser que a consola não esteja a executar uma função " +#~ "ou EXPR\n" +#~ " seja inválida." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "aviso: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: chave de matriz associativa inválida" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo index 4c968346d17b4f2db53e8b3585ea4a917f3427ed..5a36921fcf896ffe2b1486ebf53a27f71ea5ee17 100644 GIT binary patch delta 12642 zc-n262YePq`p0LMG}0@iCxk!(NC^;HXd+S+MFd3Yc!=1L4pQ!wA{Lrb5~?6Yu^}PI z3rCZF2*;rm1B8x%8VD(b^!$I%{)WFf@AAp}`R>ln&OGz9nc3Y<E4+R^=;62==(1Gd zFU3+S5-bQ%su;&7YAgG1OJk+#gXv%(m<6^4bHI4;u_j7+g1tara3JUgz5zyqW5HnX z6EFt+9IOEz0Yj8>s7pAgj)Hs;eXDX)!7qudo5Y6Nne%~36l5G21<nEezztw5xGjkS zoCSkKV6Y~5AB+G!nktnD#)FN~zj_7-DJYoUlq1>+wgE3UWk+Gn*zseAPc&l#{lNrq z78nP9-HanW*^HXJ(ToDB=1SpEMK|XFpKne<hl6#|zj{v&z;Bw1L`t1Dtd?x6NHsI; z4mJXZBvT^`lG*XM$rS7q*Z{np%#MOuC>09UX~Fi|x1a__wV+@hfeum8rWR~ycMGcQ z3g|B;F%?}}^2WH96r_Di*6-7j4No%VUl{IbNzI)G8-lk?d2lOgrhY57-?bI=ABKY$ zO~Ke!wAHLuROQN69KjZI<1w(FG}ww7@NcbDIM}!~HSknxc08;#+Zo@Q1De;G16kXe zs^1INl7Y5%P%;gJiy$?@$H1gEY-n&B-Y}*OJ6HtzfM0^}Q{`+!liV@qHB;#2-BQ@` z$P~6SErm|H(44PHVS8I0DU|eB3I({9!V#CIaAd)4*<s_h96`Ib>|j7!`pnd}9Kbqr zeMeiG<eVvYYez=5qvo2nqvi&-W4Jn|wqrvdwWF7&x1*|mZAY71?P-c=&`X@LJ?nP> ztAQih({!)5XM<DQQ{a!<bA-!4Xj^>;N=o_7l>2nBoz$V?JFwvv;IC-06W9$*e1a+) z(}kSTh4nrGyJ)3WcVUM&yYhNI=q*vxjrIJyF|R}#*6l`<Gy!)ZV|4~SB>q)zrQSk= z)qAs{Nqv;shx7Nrn#hD*Ur=fg&WF6HR3-%5^AbEC<*9?vxQkMM3_;l8++#TWLc)Cn zgh0K^U<dH}Ylt9;p0}h!<czo2PZO{}`tOK?Y*(d{M=A9W3?Xj3QlFyy(z_4_4Nse) z)I&+lvyhs>?AeHMiGuf(dKK4C&QU5)H29%X6Ch~4kC02iHFK5v1p@S#uhc}G$A6-f zyF}F@v<a>U9p`WmyI83Yz=w;O%imo>C!D*4PPoBv-x7N71rSzJcfsRe!=<!o@lxLB zpUV36QW-s+Q)!x4Qkj~^rcwj%q(c8<n-5c|n#HNK(JI3&skGf8bK^<yS;_6-42(QJ z4KWYhe!d)GixK9oMudRTYv7pT<!k992f@x5`p@7TT(7x_Ci(PB=>IuU1q?SCCMful z&hyrHAXN7bxEy?Mt5RQ~JZ8I6XVAcpU=ajZvjb@uT(*lUPuL6FgJ<@^QNhd~;H(lI z2gr1=2g-}UBjA&cL$rza5vn#AY>y5Tz?*1z#4(Hv6`nqU84u@^PeXNJ_E}6os9*LA zMh5oFq)JzTH)Jl!q~<<8&-PcGXPB-#Pt9hWXIMLqp67_O&U2o>bDlmBbb$#a`T}j* z*03*_ERzV>6C>CFb`s~jNVd$vsK6;%9MBJ0%m=5lXo_p#bPV8rmMw@wjk<#Tj|(%e zu)~X2C`j=Y-WY$CYzppx(K>=3q2uD4Y;g81Bo*-;@Jn2uew!mq$Yy3u$>xB1XHx@% zvpGAyoh_LV_Md@+Ix;zAbN)Y)&3XNgY&H~hm)8^SQUlN2WvU)=m%0DlyY%+&?lQIh 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 delta 51067 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 diff --git a/po/pt_BR.po b/po/pt_BR.po index eaae6b58d..d54909d0e 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,136 +8,139 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" -"PO-Revision-Date: 2023-01-12 14:27-0300\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" +"PO-Revision-Date: 2023-12-04 14:27-0300\n" "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" -"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n" +"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge." +"net>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" -"X-Generator: Gtranslator 42.0\n" +"X-Generator: Gtranslator 45.2\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "subscript de array incorreto" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: removendo o atributo nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: impossível converter array indexado para associativo" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: impossível atribuir a índice não numérico" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: deve-se usar subscript ao atribuir um array associativo" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: impossível criar: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command: impossível localizar mapa de teclas para comando" +msgstr "" +"bash_execute_unix_command: impossível localizar mapa de teclas para comando" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: primeiro caractere não-espaço em branco não é `\"'" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "sem `%c' de fechamento em %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s faltando separador dois-pontos" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "`%s': não foi desassociar no comando keymap" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "expansão de chaves: impossível alocar memória para %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "expansão de chaves: falha ao alocar memória para %u elementos" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "expansão de chaves: falha ao alocar memória para `%s'" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "`%s': nome de apelido (alias) inválido" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "edição de linha não habilitada" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "`%s': nome de mapa de teclas inválido" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: impossível ler: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "`%s': nome de função desconhecida" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s não está associada a qualquer tecla.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s pode ser chamado via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "`%s': impossível desassociar (unbind)" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "número de loops" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "significativo apenas em um loop de `for', `while' ou `until'" # help caller -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -146,360 +149,381 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Retorna o contexto da chamada de sub-rotina atual.\n" " \n" " Sem EXPR, retorna \"$linha $arquivo\". Com EXPR, retorna\n" -" \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada para\n" +" \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada " +"para\n" " fornecer um rastro da pilha.\n" " \n" " O valor de EXPR indica quantos quadros de chamada deve voltar antes do\n" -" atual; o quadro do topo é o quadro 0." +" atual; o quadro do topo é o quadro 0.\n" +" \n" +" Status de saída:\n" +" Retorna 0, a menos que o shell não esteja executando uma função de\n" +" shell ou EXPR seja inválida." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME não definida" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "número excessivo de argumentos" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "diretório nulo" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD não definida" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "linha %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "aviso: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: uso: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: a opção requer um argumento" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: requer argumento numérico" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: não encontrado" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: opção inválida" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: nome de opção inválido" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': não é um identificador válido" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "número octal inválido" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "número do hexa inválido" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "número inválido" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: especificação de sinal inválida" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" -msgstr "`%s': não é um identificador de processo (pid) nem é uma especificação de trabalho válida" +msgstr "" +"`%s': não é um identificador de processo (pid) nem é uma especificação de " +"trabalho válida" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: a variável permite somente leitura" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: impossível atribuir" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s fora dos limites" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argumento" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s fora dos limites" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: trabalho não existe" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: nenhum controle de trabalho" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "nenhum controle de trabalho" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: restrição" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "restrição" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: não é um comando interno do shell" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "erro de escrita: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "erro ao definir atributos do terminal: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "erro ao obter atributos do terminal: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: erro ao obter o diretório atual: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: especificação de trabalho ambígua" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "ajuda não disponível nesta versão" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: não é um array indexado" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: impossível remover definição: %s somente-leitura" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: impossível remover definição" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nome de ação inválido" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: nenhuma especificação de completação" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "aviso: a opção -F pode não funcionar como esperado" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "aviso: a opção -C pode não funcionar como esperado" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "não se está executando atualmente função de completação" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "somente pode ser usado em uma função" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "impossível usar `-f' para criar funções" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: função somente para leitura" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: variável de referência não pode ser um array" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: referência a si próprio da variável nameref não é permitido" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s referência circular de nome" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "\"%s\": nome de variável inválido para referência de nome" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: impossível destruir variáveis de array desta maneira" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: impossível converter array associativo para indexado" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: atribuição de array composto com aspas está obsoleto" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "carregamento dinâmico não está disponível" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "impossível abrir objeto compartilhado %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "impossível localizar %s no objeto compartilhado %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: comando dinâmico já foi carregado" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "função de carregamento para %s retorna falha (%d): não foi carregada" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: não foi carregado dinamicamente" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: impossível excluir: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: é um diretório" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: não é um arquivo irregular" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: arquivo é muito grande" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: impossível executar o arquivo binário" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: impossível executar: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "sair\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "não é um shell de login: use `exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Há trabalhos parados.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Há trabalhos em execução.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "nenhum comando encontrado" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "especificação do histórico" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: impossível abrir arquivo temporário: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "atual" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "o trabalho %d iniciou sem controle de trabalho" @@ -514,11 +538,11 @@ msgstr "%s: opção ilegal -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: a opção requer um argumento: -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashing está desabilitado" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: tabela de hash está vazia\n" @@ -544,15 +568,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "nenhum tópico de ajuda corresponde a `%s'. Tente `help help' ou `man -k %s' ou `info %s'." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"nenhum tópico de ajuda corresponde a `%s'. Tente `help help' ou `man -k %s' " +"ou `info %s'." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: impossível abrir: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -563,30 +590,42 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"Esses comandos shell são definidos internamente. Digite `help' para ver essa\n" +"Esses comandos shell são definidos internamente. Digite `help' para ver " +"essa\n" "lista. Digite `help NOME' para descobrir mais sobre a função `NOME'.\n" "Use `info bash' para descobrir mais sobre o shell em geral.\n" -"Use `man -k' ou `info' para descobrir mais sobre comandos que não estão nesta\n" +"Use `man -k' ou `info' para descobrir mais sobre comandos que não estão " +"nesta\n" "lista.\n" "\n" "Um asterisco (*) próximo ao nome significa que o comando está desabilitado.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "impossível usar mais de um dentre -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "posição no histórico" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "nome de variável array vazio" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parâmetro nulo ou não inicializado" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: marca de tempo inválida" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: expansão do histórico falhou" @@ -600,113 +639,113 @@ msgstr "%s: inlib falhou" msgid "no other options allowed with `-x'" msgstr "nenhuma outra opção permitida com `-x'" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumentos devem ser IDs de trabalhos ou processo" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Erro desconhecido" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "esperava uma expressão" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: não é um array indexado" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: especificação de descritor de arquivo inválida" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: descritor de arquivo inválido: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: número de linhas inválido" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: origem do array inválido" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: quantidade de chamadas inválida" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "nome de variável array vazio" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "requer suporte a variável de array" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "`%s': faltando caractere de formato" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "`%c': especificação de formato de tempo inválida" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "`%c': caractere de formato inválido" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "aviso: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "problema ao analisar formato: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "faltando dígito hexa para \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "faltando dígito unicode para \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "nenhum outro diretório" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s argumento inválido" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<nenhum diretório atual>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "pilha de diretórios está vazia" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "índice de pilha de diretórios" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -721,10 +760,12 @@ msgid "" " \twith its position in the stack\n" " \n" " Arguments:\n" -" +N\tDisplays the Nth entry counting from the left of the list shown by\n" +" +N\tDisplays the Nth entry counting from the left of the list shown " +"by\n" " \tdirs when invoked without options, starting with zero.\n" " \n" -" -N\tDisplays the Nth entry counting from the right of the list shown by\n" +" -N\tDisplays the Nth entry counting from the right of the list shown " +"by\n" "\tdirs when invoked without options, starting with zero." msgstr "" "Exibe a lista de diretórios atualmente memorizados. Diretórios são\n" @@ -746,7 +787,7 @@ msgstr "" " -N\tExibe a n-ésima entrada a partir da esquerda da linha\n" " \t\tmostrada por `dirs' chamado sem opções, iniciando com zero." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -793,7 +834,7 @@ msgstr "" " \n" " O comando interno `dirs' exibe a pilha de diretórios." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -831,319 +872,337 @@ msgstr "" " \n" " O comando interno `dirs' exibe a pilha de diretório." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: especificação de tempo limite inválida" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "erro de leitura: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "possível retornar (`return') apenas de uma função ou script carregado (com `source')" +msgstr "" +"possível retornar (`return') apenas de uma função ou script carregado (com " +"`source')" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" -msgstr "impossível simultaneamente remover definição de uma função e uma variável" +msgstr "" +"impossível simultaneamente remover definição de uma função e uma variável" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: não é uma variável array" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: não é uma função" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: impossível exportar" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "número de shift" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" -msgstr "impossível simultaneamente definir e remover definição de opções do shell" +msgstr "" +"impossível simultaneamente definir e remover definição de opções do shell" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: nome de opção de shell inválido" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "requer argumento arquivo" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: arquivo não encontrado" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "impossível suspender" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "impossível suspender um shell de login." -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s está apelidada para `%s'\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s é uma palavra-chave do shell\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s é uma função\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s é um comando interno especial do shell\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s é uma função\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s é um comando interno do shell\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s é %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s está na tabela hash (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: argumento limite inválido" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': comando incorreto" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: impossível obter limite: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limite" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: impossível modificar limite: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "número octal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': operador de modo simbólico inválido" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': caractere de modo simbólico inválido" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " linha " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "último comando: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Abortando..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORM: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "DEBUG aviso: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "erro de comando desconhecido" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "tipo de comando incorreto" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "conector incorreto" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "desvio incorreto" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: variável não associada" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" -msgstr "\atempo limite de espera excedido aguardando entrada: fim automático da sessão\n" +msgstr "" +"\atempo limite de espera excedido aguardando entrada: fim automático da " +"sessão\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "impossível redirecionar a entrada padrão para /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': caractere de formato inválido" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] ainda existe" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "erro de `pipe'" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: excedido o nível máximo de aninhamento de `eval' (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: excedido o nível máximo de aninhamento de `function' (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: excedido o nível máximo de aninhamento de avaliação (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restrição: não é permitido especificar `/' em nomes de comandos" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: comando não encontrado" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: interpretador incorreto" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: impossível: o arquivo requerido não encontrado" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: interpretador incorreto" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: impossível executar o arquivo binário: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "`%s': é um comando interno especial" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "impossível duplicar fd (descritor de arquivo) %d para fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "excedido o nível de recursividade da expressão" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "esvaziamento de pilha de recursão" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "erro de sintaxe na expressão" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "tentativa de atribuição para algo que não é uma variável" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "erro de sintaxe na atribuição de variável" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "divisão por 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "erro de programação: token incorreto passado para expassign()" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "esperava `:' para expressão condicional" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exponente menor que 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "esperava identificador após pré-acréscimo ou pré-decréscimo" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "faltando `)'" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "erro de sintaxe: esperava operando" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "erro de sintaxe: operador aritmético inválido" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (token de erro é \"%s\")" @@ -1160,7 +1219,7 @@ msgstr "contante inteira inválida" msgid "value too great for base" msgstr "valor muito grande para esta base de numeração" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: erro de expressão\n" @@ -1169,46 +1228,57 @@ msgstr "%s: erro de expressão\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: impossível acessar os diretórios pais (anteriores)" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "`%s': é um comando interno especial" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" -msgstr "impossível redefinir modo `nodelay' para o descritor de arquivo (fd) %d" +msgstr "" +"impossível redefinir modo `nodelay' para o descritor de arquivo (fd) %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "impossível alocar novo descritor de arquivo (fd) para a entrada do `bash' a partir do fd %d" +msgstr "" +"impossível alocar novo descritor de arquivo (fd) para a entrada do `bash' a " +"partir do fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" -msgstr "save_bash_input: buffer já existe para o novo descritor de arquivo (fd) %d" +msgstr "" +"save_bash_input: buffer já existe para o novo descritor de arquivo (fd) %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: `pipe' de pgrp" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" -msgstr "identificador de processo (pid) %d bifurcado (fork) aparece no trabalho em execução %d" +msgstr "" +"identificador de processo (pid) %d bifurcado (fork) aparece no trabalho em " +"execução %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "excluindo trabalho parado %d com grupo de processo %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) marcado como ainda vivo" @@ -1218,137 +1288,137 @@ msgstr "add_process: pid %5ld (%s) marcado como ainda vivo" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: o identificador do processo (pid) não existe" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Sinal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Concluído" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Parado" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Parado(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Executando" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Concluído(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Fim da execução com status %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Status desconhecido" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(imagem do núcleo gravada)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "`setpgid' filho (%ld para %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: o pid %ld não é um processo filho deste shell" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Sem registro do processo %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: trabalho %d está parado" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: nenhum trabalho atual" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: o trabalho terminou" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: o trabalho %d já está em plano de fundo" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: ativando WNOHANG para evitar bloqueio indefinido" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s, linha %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (imagem do núcleo gravada)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd agora: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp falhou" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: nenhum controle de trabalho em plano de fundo" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: disciplina da linha" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "impossível definir grupo do processo do terminal (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "nenhum controle de trabalho neste shell" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: asserção falhou: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1357,377 +1427,391 @@ msgstr "" "\r\n" "malloc: %s:%d: asserção remendada\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "desconhecido" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: bloco socado em lista livre" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: chamado com argumento de bloco já liberado" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: chamado com argumento de bloco não alocado" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: esvaziamento de pilha detectado; mh_nbytes fora do limite" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: esvaziamento de pilha detectado; magic8 corrompido" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: tamanhos de porções do início e do fim são diferentes" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: chamado com argumento de bloco não alocado" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: esvaziamento de pilha detectado; mh_nbytes fora do limite" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: esvaziamento de pilha detectado; magic8 corrompido" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: tamanhos de porções do início e do fim são diferentes" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: tabela de `alloc' está cheia com FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p já na tabela como alocado?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p já na tabela como livre?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "base inválida" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: máquina desconhecida" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: serviço inválido" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: especificação de caminho de rede inválida" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "sem suporte a operações de rede" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: impossível alterar locale (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: impossível alterar locale (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: impossível alterar locale (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: impossível alterar locale (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Você tem mensagem de correio em $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Você tem mensagem nova de correio em $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "As mensagens de correio em %s foram lidas\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "erro de sintaxe: requer expressão aritmética" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "erro de sintaxe: `;' inesperado" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "erro de sintaxe: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: tipo da instrução incorreto %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "here-document na linha %d delimitado pelo fim do arquivo (desejava `%s')" +msgstr "" +"here-document na linha %d delimitado pelo fim do arquivo (desejava `%s')" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: instrução de redirecionamento `%d' fora do limite" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) excede SIZE_MAX (%lu): linha truncada" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) excede SIZE_MAX (%lu): linha truncada" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "erro de escrita: %s" -#: parse.y:2921 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "excedido o número máximo de here-document" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "encontrado EOF inesperado enquanto procurava por `%c' correspondente" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "encontrado EOF inesperado enquanto procurava por `]]'" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "erro de sintaxe na expressão condicional: token inesperado `%s'" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "erro de sintaxe na expressão condicional" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "token inesperado `%s', esperava`)'" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "esperava `)'" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "argumento inesperado `%s' para operador unário condicional" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "argumento inesperado para operador unário condicional" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "token inesperado `%s', esperava operador binário condicional" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "esperava operador binário condicional" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "argumento inesperado `%s' para operador binário condicional" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "argumento inesperado para operador binário condicional" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "token inesperado `%c' em comando condicional" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "token inesperado `%s' em comando condicional" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "token inesperado %d em comando condicional" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "erro de sintaxe próximo ao token inesperado `%s'" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "erro de sintaxe próximo a `%s'" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "erro de sintaxe: fim prematuro do arquivo" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "erro de sintaxe: fim prematuro do arquivo" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "erro de sintaxe" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Use \"%s\" para sair do shell.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "encontrado EOF inesperado enquanto procurava por `)' correspondente" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: função `%s' não encontrada" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: possível loop de nova tentativa" # COMPSPEC é variável no código fonte, manter sem tradução para português. -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: COMPSPEC NULO" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: conector incorreto `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: descritor de arquivo inválido" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: ponteiro de arquivo NULO" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': caractere de formato inválido" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "descritor de arquivo fora dos limites" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: redirecionamento ambíguo" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: impossível sobrescrever arquivo existente" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restrição: impossível redirecionar saída" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "impossível criar arquivo temporário para here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: impossível atribuir fd a variável" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "sem suporte a /dev/(tcp|udp)/máquina/porta sem rede" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "erro de redirecionamento: impossível duplicar fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "impossível localizar /tmp, por favor crie!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp deve ser um nome de diretório válido" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "modo de impressão bonita ignorada em shells interativos" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: opção inválida" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "impossível definir uid para %d: uid efetivo %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "impossível definir gid para %d: gid efetivo %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "possível iniciar o depurador; modo de depuração desabilitado" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: É um diretório" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Eu não tenho nome!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versão %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1736,49 +1820,52 @@ msgstr "" "Utilização:\t%s [opção-longa-GNU] [opção] ...\n" "\t%s [opção-longa-GNU] [opção] arquivo-de-script ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "opções-longas-GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Opções do shell:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD or -c comando ou -O opção-shopt\t\t(somente para chamada)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s ou -o opção\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Digite `%s -c \"help set\"' para mais informações sobre as opções do shell.\n" +msgstr "" +"Digite `%s -c \"help set\"' para mais informações sobre as opções do shell.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "Digite `%s -c help' para mais informações sobre os comandos internos do shell.\n" +msgstr "" +"Digite `%s -c help' para mais informações sobre os comandos internos do " +"shell.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Uso o comando `bashbug' para relatar erros.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "página do bash: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Ajuda geral sobre uso de software GNU: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: operação inválida" @@ -1948,284 +2035,313 @@ msgstr "Requisição de informação" msgid "Unknown Signal #%d" msgstr "Sinal desconhecido #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "substituição incorreta: sem `%s' de fechamento em %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: impossível atribuir uma lista a um membro de um array" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "impossível criar `pipe' para a substituição do processo" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "impossível criar um processo filho para a substituição do processo" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "impossível abrir `pipe' %s para leitura" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "impossível abrir `pipe' %s para escrita" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "impossível duplicar `pipe' %s como descritor de arquivo (fd) %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "substituição de comando: byte nulo ignorado na entrada" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" +"command_substitute: impossível duplicar o `pipe' como descritor de arquivo " +"(fd) 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "impossível criar um `pipe' para substituição do comando" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "impossível criar um processo filho para substituição do comando" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" -msgstr "command_substitute: impossível duplicar o `pipe' como descritor de arquivo (fd) 1" +msgstr "" +"command_substitute: impossível duplicar o `pipe' como descritor de arquivo " +"(fd) 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: nome de variável inválido para referência de nome" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: expansão indireta inválida" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: nome de variável inválido" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parâmetro não inicializado" +msgid "%s: bad substitution" +msgstr "%s: substituição incorreta" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parâmetro nulo ou não inicializado" +msgid "%s: parameter not set" +msgstr "%s: parâmetro não inicializado" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: expressão de substring < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: substituição incorreta" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: impossível atribuir desta maneira" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "versões futuras do shell vão forçar avaliação como um substituto aritmético" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"versões futuras do shell vão forçar avaliação como um substituto aritmético" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "substituição incorreta: sem \"`\" de fechamento em %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "sem correspondência: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "esperava argumento" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: esperava expressão de número inteiro" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "esperava `)'" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "esperava `)', encontrado %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: esperava operador binário" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: esperava operador unário" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "faltando `]'" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "erro de sintaxe: `%s' inesperado" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "número de sinal inválido" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "manipulador de trap: excedido o nível máximo de manipulador de captura (%d)" +msgstr "" +"manipulador de trap: excedido o nível máximo de manipulador de captura (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: valor incorreto em trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: manipulador de sinal é SIG_DFL, enviando novamente %d (%s) para mim mesmo" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: manipulador de sinal é SIG_DFL, enviando novamente %d " +"(%s) para mim mesmo" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: sinal incorreto %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "erro ao importar a definição da função para `%s'" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "nível do shell (%d) muito grande, redefinindo para 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "excedido o número máximo de here-document" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: nenhum contexto de função no atual escopo" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: a variável pode não ter um valor atribuído" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: impossível herdar valor de tipo incompatível" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: atribuindo inteiro para referência de nome" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: nenhum contexto de função no escopo atual" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s possui a string de exportação nula" # exportstr é uma variável no código fonte do bash (arquivo variiables.c) -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "caractere inválido na %d na exportstr para %s" # exportstr é uma variável no código fonte do bash (arquivo variiables.c) -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "Sem `=' na exportstr para %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: cabeça de shell_variables não é um contexto de função" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: nenhum contexto em no global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: cabeça de shell_variables não é um escopo de ambiente temporário" +msgstr "" +"pop_scope: cabeça de shell_variables não é um escopo de ambiente temporário" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: impossível abrir como ARQUIVO" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: valor inválido para rastrear descritor de arquivo" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: valor de compatibilidade fora dos limites" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl.html>.\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl." +"html>.\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versão %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Este é um software livre; você é livre para alterar e redistribuí-lo." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Há NENHUMA GARANTIA, na extensão permitida pela lei." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: impossível alocar %lu bytes (%lu bytes alocados)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: impossível alocar %lu bytes" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: impossível alocar %lu bytes (%lu bytes alocados)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: impossível alocar %lu bytes" @@ -2239,8 +2355,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] nome [nome ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m mapa-teclas] [-f arquivo] [-q nome] [-u nome] [-r seq-teclas] [-x seq-teclas:comando-shell] [seq-teclas:função-de-readline ou comando-readline]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m mapa-teclas] [-f arquivo] [-q nome] [-u nome] [-r seq-" +"teclas] [-x seq-teclas:comando-shell] [seq-teclas:função-de-readline ou " +"comando-readline]" #: builtins.c:56 msgid "break [n]" @@ -2259,7 +2380,8 @@ msgid "caller [expr]" msgstr "caller [EXPR]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [DIR]" #: builtins.c:68 @@ -2271,12 +2393,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] COMANDO [ARG ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [NOME[=VALOR] ...] ou declare -p [-aAfFilnrtux] [NOME ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [NOME[=VALOR] ...] ou declare -p [-aAfFilnrtux] " +"[NOME ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] nome[=valor] ... ou typeset -p [-aAfFilnrtux] [nome ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] nome[=valor] ... ou typeset -p [-aAfFilnrtux] " +"[nome ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2316,7 +2446,8 @@ msgstr "logout [n]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "fc [-e EDITOR] [-lnr] [PRIMEIRO] [ÚLTIMO] ou fc -s [ANTIGO=NOVO] [COMANDO]" +msgstr "" +"fc [-e EDITOR] [-lnr] [PRIMEIRO] [ÚLTIMO] ou fc -s [ANTIGO=NOVO] [COMANDO]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2335,8 +2466,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [PADRÃO ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d POSIÇÃO] [n] ou history -anrw [ARQUIVO] ou history -ps ARG [ARG...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d POSIÇÃO] [n] ou history -anrw [ARQUIVO] ou history -ps ARG " +"[ARG...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2347,16 +2482,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [ESPEC-JOB ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s SIGSPEC | -n SIGNUM | -SIGSPEC] PID | ESPEC-JOB ... ou kill -l [SIGSPEC]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s SIGSPEC | -n SIGNUM | -SIGSPEC] PID | ESPEC-JOB ... ou kill -l " +"[SIGSPEC]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let ARG [ARG ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a ARRAY] [-d DELIM] [-i TEXTO] [-n NCHARS] [-N NCHARS] [-p CONFIRMAR ] [-t TEMPO] [-u FD] [NOME ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a ARRAY] [-d DELIM] [-i TEXTO] [-n NCHARS] [-N NCHARS] [-p " +"CONFIRMAR ] [-t TEMPO] [-u FD] [NOME ...]" #: builtins.c:140 msgid "return [n]" @@ -2403,7 +2547,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] espec-sinal ...]" #: builtins.c:168 @@ -2427,108 +2572,137 @@ msgid "wait [pid ...]" msgstr "wait [PID ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NOME [in PALAVRAs ...] ; do COMANDOS; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do COMANDOS; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NOME [in PALAVRAS ... ;] do COMANDOS; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] linha-comandos" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case PALAVRA in [PADRÃO [| PADRÃO]...) COMANDOS ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if COMANDOS; then COMANDOS; [ elif COMANDOS; then COMANDOS; ]... [ else COMANDOS; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if COMANDOS; then COMANDOS; [ elif COMANDOS; then COMANDOS; ]... [ else " +"COMANDOS; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while COMANDOS; do COMANDOS-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until COMANDOS; do COMANDOS-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NOME] comando [redirecionamentos]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function NOME { COMANDOS ; } ou NOME () { COMANDOS ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ COMANDOS ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "escpec-job [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expressão ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expressão ]]" # Não traduzir "variables", esta é uma opção "builtin" do "bash" que é exibida ao executar "help" e acessível com "help variables". -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Nomes e significados de algumas variáveis do shell" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [nome-opção ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] formato [argumentos]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opção] [-A ação] [-G global] [-W lista-palavras] [-F função] [-C comando] [-X filtro] [-P prefixo] [-S sufixo] [nome ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o opção] [-A ação] [-G global] [-W " +"lista-palavras] [-F função] [-C comando] [-X filtro] [-P prefixo] [-S " +"sufixo] [nome ...]" -#: builtins.c:235 -msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" -msgstr "compgen [-abcdefgjksuv] [-o opção] [-A ação] [-G global] [-W lista-palavras] [-F função] [-C comando] [-X filtro] [-P prefixo] [-S sufixo] [palavra]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o opção] [-A ação] [-G global] [-W lista-" +"palavras] [-F função] [-C comando] [-X filtro] [-P prefixo] [-S sufixo] " +"[palavra]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o opção] [-DEI] [nome ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C chamada] [-c quantidade] [array]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C chamada] [-c quantidade] [array]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C " +"chamada] [-c quantidade] [array]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C " +"chamada] [-c quantidade] [array]" # help alias -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2543,7 +2717,8 @@ msgid "" " -p\tprint all defined aliases in a reusable format\n" " \n" " Exit Status:\n" -" alias returns true unless a NAME is supplied for which no alias has been\n" +" alias returns true unless a NAME is supplied for which no alias has " +"been\n" " defined." msgstr "" "Define ou exibe apelidos (aliases).\n" @@ -2563,7 +2738,7 @@ msgstr "" " o qual não se tenha definido um apelido" # help unalias -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2580,7 +2755,7 @@ msgstr "" " Retorna sucesso, a menos que NOME não seja um apelido existente." # help bind -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2592,25 +2767,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2630,24 +2810,33 @@ msgstr "" " vi, vi-move, vi-command e vi-insert.\n" " -l Lista nomes de funções.\n" " -P Lista nomes e associações de função.\n" -" -p Lista funções e associações em uma forma que pode ser\n" +" -p Lista funções e associações em uma forma que pode " +"ser\n" " usada como entrada.\n" -" -S Lista sequências de teclas que chamam macros e seus\n" +" -S Lista sequências de teclas que chamam macros e " +"seus\n" " valores\n" -" -s Lista sequências de teclas que chamam macros e seus\n" -" valores em uma forma que pode ser usada como entrada.\n" +" -s Lista sequências de teclas que chamam macros e " +"seus\n" +" valores em uma forma que pode ser usada como " +"entrada.\n" " -V Lista nomes e valores de variáveis\n" -" -v Lista nomes e valores de variáveis em uma forma que\n" +" -v Lista nomes e valores de variáveis em uma forma " +"que\n" " pode ser usada como entrada.\n" -" -q nome-função Consulta sobre quais teclas chamam a função informada.\n" -" -u nome-função Desassocia todas teclas que estão associadas à função\n" +" -q nome-função Consulta sobre quais teclas chamam a função " +"informada.\n" +" -u nome-função Desassocia todas teclas que estão associadas à " +"função\n" " informada.\n" " -r seq-teclas Remove a associação para SEQ-TECLAS.\n" " -f arquivo Lê associações de tecla de ARQUIVO.\n" " -x seq-teclas:comando-shell\n" -" Faz com que COMANDO-SHELL seja executado ao inserir\n" +" Faz com que COMANDO-SHELL seja executado ao " +"inserir\n" " SEQ-TECLAS.\n" -" -X Lista sequência de teclas associadas com -x e comandos\n" +" -X Lista sequência de teclas associadas com -x e " +"comandos\n" " associados em uma forma que pode ser usada como\n" " entrada.\n" " \n" @@ -2656,7 +2845,7 @@ msgstr "" " um erro ocorrer." # help break -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2675,7 +2864,7 @@ msgstr "" " O status de saída é 0, a menos que N não seja maior ou igual a 1." # help continue -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2695,13 +2884,14 @@ msgstr "" " O status de saída é 0, a menos que N não seja maior ou igual a 1." # help builtin -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2719,7 +2909,7 @@ msgstr "" " COMANDO-INTERNO-SHELL não for de fato um comando interno de shell." # help caller -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2737,7 +2927,8 @@ msgstr "" "Retorna o contexto da chamada de sub-rotina atual.\n" " \n" " Sem EXPR, retorna \"$linha $arquivo\". Com EXPR, retorna\n" -" \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada para\n" +" \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada " +"para\n" " fornecer um rastro da pilha.\n" " \n" " O valor de EXPR indica quantos quadros de chamada deve voltar antes do\n" @@ -2748,20 +2939,27 @@ msgstr "" " shell ou EXPR seja inválida." # help cd -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2777,11 +2975,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Altera o diretório de trabalho do shell.\n" @@ -2789,17 +2989,20 @@ msgstr "" " Altera o diretório atual para DIR, sendo o padrão de DIR o mesmo valor\n" " da variável HOME.\n" " \n" -" A variável CDPATH define o caminho de pesquisa para o diretório contendo\n" +" A variável CDPATH define o caminho de pesquisa para o diretório " +"contendo\n" " DIR. Nomes de diretórios alternativos em CDPATH são separados por\n" " dois-pontos (:). Um nome de diretório nulo é o mesmo que o diretório\n" " atual. Se DIR inicia com uma barra (/), então CDPATH não é usada.\n" " \n" -" Se o diretório não for encontrado e a opção `cdable_vars` estiver definida\n" +" Se o diretório não for encontrado e a opção `cdable_vars` estiver " +"definida\n" " no shell, a palavra é presumida como sendo o nome de uma variável. Se\n" " tal variável possuir um valor, este valor é usado para DIR.\n" " \n" " Opções:\n" -" -L\tforça links simbólicos a serem seguidos: resolver links simbólicos\n" +" -L\tforça links simbólicos a serem seguidos: resolver links " +"simbólicos\n" " \t\tem DIR após processar instâncias de `..'\n" " -P\tusa a estrutura do diretório físico sem seguir links\n" " \t\tsimbólicos: resolve links simbólicos em DIR antes de processar\n" @@ -2810,16 +3013,19 @@ msgstr "" " \t\tatributos estendidos como um diretório contendo os atributos de\n" " \t\tarquivo\n" " \n" -" O padrão é seguir links simbólicos, como se `-L' tivesse sido especificada.\n" -" `..' é processada removendo o componente de caminho imediatamente anterior\n" +" O padrão é seguir links simbólicos, como se `-L' tivesse sido " +"especificada.\n" +" `..' é processada removendo o componente de caminho imediatamente " +"anterior\n" " de volta para uma barra ou para o início de DIR.\n" " \n" " Status de saída:\n" -" Retorna 0, se o diretório tiver sido alterado e se $PWD está definida com\n" +" Retorna 0, se o diretório tiver sido alterado e se $PWD está definida " +"com\n" " sucesso quando a opção -P for usada; do contrário, retorna não-zero." # help pwd -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2848,7 +3054,7 @@ msgstr "" " atual não possa ser lido." # help : -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2865,7 +3071,7 @@ msgstr "" " Sempre com sucesso." # help true -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2878,7 +3084,7 @@ msgstr "" " Sempre sucesso." # help false -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2891,12 +3097,13 @@ msgstr "" " Sempre falha." # help command -#: builtins.c:471 +#: builtins.c:473 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" @@ -2925,7 +3132,8 @@ msgstr "" " encontrado." # help declare -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2953,12 +3161,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2967,7 +3177,8 @@ msgid "" msgstr "" "Define valores e atributos de variável.\n" " \n" -" Declara variáveis e a elas fornece atributos. Se nenhum NOME for fornecido,\n" +" Declara variáveis e a elas fornece atributos. Se nenhum NOME for " +"fornecido,\n" " exibe os atributos e valores de todas as variáveis.\n" " \n" " Opções:\n" @@ -2982,11 +3193,13 @@ msgstr "" " -a\tpara fazer NOMEs serem arrrays indexados (se houver suporte)\n" " -A\tpara fazer NOMEs serem arrrays associativos (se houver suporte)\n" " -i\tpara fazer NOMEs terem o atributo `integer'\n" -" -l\tpara converter o valor de cada NOME para minúsculo em sua atribuição\n" +" -l\tpara converter o valor de cada NOME para minúsculo em sua " +"atribuição\n" " -n\tfazer de NOME uma referência à variável chamada por seu valor\n" " -r\tpara fazer de NOMEs somente leitura\n" " -t\tpara fazer NOMEs terem o atributo `trace'\n" -" -u\tpara converter o valor de cada NOME para maiúsculo em sua atribuição\n" +" -u\tpara converter o valor de cada NOME para maiúsculo em sua " +"atribuição\n" " -x\tpra fazer NOMEs exportar\n" " \n" " Usar `+' ao invés de `-' desliga o atributo dado.\n" @@ -3001,7 +3214,7 @@ msgstr "" " Retorna sucesso, a menos que uma opção inválida tenha sido fornecida ou\n" " ocorrer um erro de atribuição de variável." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3012,7 +3225,7 @@ msgstr "" " Um sinônimo para `declare'. Veja `help declare'." # help local -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3031,7 +3244,8 @@ msgstr "" " Cria uma variável local chamada NOME e lhe dá VALOR. OPÇÃO pode ser\n" " qualquer opção aceita pelo `declare'.\n" " \n" -" Variáveis locais podem ser usadas apenas em uma função; elas são visíveis\n" +" Variáveis locais podem ser usadas apenas em uma função; elas são " +"visíveis\n" " apenas para a função na qual elas foram definidas, bem como para seus\n" " filhos.\n" " \n" @@ -3041,11 +3255,12 @@ msgstr "" " uma função." # help echo -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3069,9 +3284,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3112,7 +3329,7 @@ msgstr "" " Retorna sucesso, a menos que ocorra um erro de escrita." # help echo -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3135,7 +3352,8 @@ msgstr "" " Retorna sucesso, a menos que ocorra um erro de escrita." # help enable -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3155,6 +3373,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3189,11 +3413,12 @@ msgstr "" " ou ocorrer um erro." # help eval -#: builtins.c:640 +#: builtins.c:648 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" @@ -3208,7 +3433,7 @@ msgstr "" " Retorna status de saída do comando ou sucesso, se o comando for nulo." # help getopts -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3289,12 +3514,13 @@ msgstr "" " for encontrado ou ocorrer um erro." # help exec -#: builtins.c:694 +#: builtins.c:702 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" @@ -3302,11 +3528,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Substitui o shell com o comando fornecido.\n" " \n" @@ -3328,7 +3556,7 @@ msgstr "" " erro no redirecionamento." # help exit -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3341,11 +3569,12 @@ msgstr "" " de saída é o mesmo do último comando executado." # help exit -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" -" Exits a login shell with exit status N. Returns an error if not executed\n" +" Exits a login shell with exit status N. Returns an error if not " +"executed\n" " in a login shell." msgstr "" "Sai de um shell de login.\n" @@ -3354,17 +3583,20 @@ msgstr "" " se não for executada em um shell de login." # help fc -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3377,13 +3609,17 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" -" Returns success or status of executed command; non-zero if an error occurs." +" Returns success or status of executed command; non-zero if an error " +"occurs." msgstr "" "Exibe ou executa comandos da lista do histórico.\n" " \n" " fc é usado para listar ou editar e re-executar comandos da lista de\n" -" histórico. PRIMEIRO e ÚLTIMO podem ser números especificando o intervalo\n" +" histórico. PRIMEIRO e ÚLTIMO podem ser números especificando o " +"intervalo\n" " ou PRIMEIRO pode ser uma string, o que significa o comando mais recente\n" " iniciando com aquela string.\n" " \n" @@ -3406,7 +3642,7 @@ msgstr "" " retorna não-zero." # help fg -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3424,15 +3660,18 @@ msgstr "" " a noção do shell de trabalho atual é usada.\n" " \n" " Status de saída:\n" -" Status do comando colocado em primeiro plano ou falha, se ocorrer um erro." +" Status do comando colocado em primeiro plano ou falha, se ocorrer um " +"erro." # help bg -#: builtins.c:779 +#: builtins.c:789 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" @@ -3449,12 +3688,13 @@ msgstr "" " habilitado ou ocorra um erro." # help hash -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3473,7 +3713,8 @@ msgid "" msgstr "" "Memoriza ou exibe localizações de programas.\n" " \n" -" Determina e memoriza do caminho completo de cada comando NOME. Se nenhum\n" +" Determina e memoriza do caminho completo de cada comando NOME. Se " +"nenhum\n" " argumento for fornecido, exibe informação sobre comandos memorizados.\n" " \n" " Opções:\n" @@ -3493,7 +3734,7 @@ msgstr "" " inválida seja fornecida." # help help -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3511,7 +3752,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Exibe informação sobre comandos internos (builtin).\n" " \n" @@ -3532,7 +3774,8 @@ msgstr "" " Retorna sucesso, a menos que PADRÃO não seja encontrado ou uma opção\n" " inválida seja fornecida." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3556,11 +3799,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3573,7 +3821,8 @@ msgstr "" " \n" " Opções:\n" " -c\t\tlimpa a lista de histórico ao excluir todas as entradas\n" -" -d posição\texclui a entrada de histórico na posição POSIÇÃO. Posições\n" +" -d posição\texclui a entrada de histórico na posição POSIÇÃO. " +"Posições\n" " \t\t\tnegativas contam a partir do fim da lista de histórico\n" " \n" " -a\t\tanexa linhas de histórico desta sessão no arquivo de\n" @@ -3601,7 +3850,7 @@ msgstr "" " ocorra um erro." # help jobs -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3647,7 +3896,7 @@ msgstr "" " ocorra um erro. Se -x for usado, retorna o status de saída do COMANDO." # help disown -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3679,7 +3928,7 @@ msgstr "" " sejam fornecidos." # help kill -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3725,14 +3974,15 @@ msgstr "" " ocorra um erro." # help let -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3810,19 +4060,24 @@ msgstr "" " let retorna 0." # help read -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3830,11 +4085,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3852,18 +4110,23 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Lê uma linha da entrada padrão e separa em campos.\n" "\n" " Lê uma linha da entrada padrão ou do descritor de arquivo FD, caso a\n" -" opção -u seja fornecida. A linha é separada em campos, na mesma forma de\n" -" separação de palavras, e a primeira palavra é atribuída ao primeiro NOME,\n" +" opção -u seja fornecida. A linha é separada em campos, na mesma forma " +"de\n" +" separação de palavras, e a primeira palavra é atribuída ao primeiro " +"NOME,\n" " o segundo ao segundo NOME e por aí vai, com qualquer palavras restantes\n" " atribuídas para o último NOME. Apenas os caracteres encontrados em $IFS\n" -" são reconhecidos como delimitadores de palavras. Por padrão, o caractere\n" +" são reconhecidos como delimitadores de palavras. Por padrão, o " +"caractere\n" " de barra invertida escapa caracteres delimitadores e de nova linha.\n" " \n" " Se nenhum NOME for fornecido, a linha lida é armazenada na variável\n" @@ -3877,11 +4140,13 @@ msgstr "" " -e usa Readline para obter a linha\n" " -i texto usa TEXTO como o texto inicial para Readline\n" " -n nchars retorna após ler NCHARS caracteres, ao invés de esperar\n" -" por uma nova linha, mas respeita um delimitador se número\n" +" por uma nova linha, mas respeita um delimitador se " +"número\n" " de caracteres menor que NCHARS sejam lidos antes do\n" " delimitador\n" " -N nchars retorna apenas após ler exatamente NCHARS caracteres, a\n" -" menos que EOF (fim do arquivo) seja encontrado ou `read'\n" +" menos que EOF (fim do arquivo) seja encontrado ou " +"`read'\n" " esgote o tempo limite, ignorando qualquer delimitador\n" " -p prompt mostra a string PROMPT sem remover nova linha antes de\n" " tentar ler\n" @@ -3890,21 +4155,26 @@ msgstr "" " -s não ecoa entrada vindo de um terminal\n" " -t tempo esgota-se o tempo limite e retorna falha, caso uma toda\n" " uma linha não seja lida em TEMPO segundos. O valor da\n" -" variável TMOUT é o tempo limite padrão. TEMPO pode ser um\n" -" número fracionado. SE TEMPO for 0, `read' retorna sucesso\n" +" variável TMOUT é o tempo limite padrão. TEMPO pode ser " +"um\n" +" número fracionado. SE TEMPO for 0, `read' retorna " +"sucesso\n" " apenas se a entrada estiver disponível no descritor de\n" -" arquivo especificado. O status de saída é maior que 128,\n" +" arquivo especificado. O status de saída é maior que " +"128,\n" " se o tempo limite for excedido\n" -" -u fd lê do descritor de arquivo FD, ao invés da entrada padrão\n" +" -u fd lê do descritor de arquivo FD, ao invés da entrada " +"padrão\n" " \n" " Status de saída:\n" " O código de retorno é zero, a menos que o EOF (fim do arquivo) seja\n" -" encontrado, `read' esgote o tempo limite (caso em que o código de retorno\n" +" encontrado, `read' esgote o tempo limite (caso em que o código de " +"retorno\n" " será 128), ocorra erro de atribuição de uma variável ou um descritor de\n" " arquivo inválido seja fornecido como argumento para -u." # help return -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3926,7 +4196,8 @@ msgstr "" " script." # help set -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3969,7 +4240,8 @@ 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" @@ -3993,13 +4265,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4009,18 +4286,21 @@ msgid "" " Exit Status:\n" " Returns success unless an invalid option is given." msgstr "" -"Define ou remove definição de valores das opções e dos parâmetros posicionais\n" +"Define ou remove definição de valores das opções e dos parâmetros " +"posicionais\n" "do shell:\n" " \n" " Altera o valor de opções e de parâmetros posicionais do shell ou mostra\n" " os nomes ou valores de variáveis shell.\n" " \n" " Opções:\n" -" -a Marca variáveis, que foram modificadas ou criadas, para exportação.\n" +" -a Marca variáveis, que foram modificadas ou criadas, para " +"exportação.\n" " -b Notifica sobre terminação de trabalho imediatamente.\n" " -e Sai imediatamente se um comando sai com um status não-zero.\n" " -f Desabilita a geração de nome de arquivo (\"globbing\").\n" -" -h Memoriza a localização de comandos à medida em que são procurados.\n" +" -h Memoriza a localização de comandos à medida em que são " +"procurados.\n" " -k Todos argumentos de atribuição são colocados no ambiente para um\n" " comando, e não apenas aqueles que precedem o nome do comando.\n" " -m Controle de trabalho está habilitado.\n" @@ -4038,7 +4318,8 @@ msgstr "" " history habilita histórico de comandos\n" " ignoreeof shell não vai sair após leitura de EOF\n" " interactive-comments\n" -" permite mostrar comentários em comandos interativos\n" +" permite mostrar comentários em comandos " +"interativos\n" " keyword mesmo que -k\n" " monitor mesmo que -m\n" " noclobber mesmo que -C\n" @@ -4050,8 +4331,10 @@ msgstr "" " onecmd mesmo que -t\n" " physical mesmo que -P\n" " pipefail o valor de retorno de uma linha de comandos é o\n" -" status do último comando a sair com status não-zero,\n" -" ou zero se nenhum comando saiu com status não zero\n" +" status do último comando a sair com status não-" +"zero,\n" +" ou zero se nenhum comando saiu com status não " +"zero\n" " posix altera o comportamento do bash, onde a operação\n" " padrão diverge dos padrões do Posix para\n" " corresponder a estes padrões\n" @@ -4059,33 +4342,44 @@ msgstr "" " verbose mesmo que -v\n" " vi usa interface de edição de linha estilo vi\n" " xtrace mesmo que -x\n" -" -p Ligado sempre que IDs de usuário real e efetivo não corresponderem.\n" -" Desabilita processamento do arquivo $ENV e importação de funções da\n" +" -p Ligado sempre que IDs de usuário real e efetivo não " +"corresponderem.\n" +" Desabilita processamento do arquivo $ENV e importação de funções " +"da\n" " shell. Ao desligar essa opção, causa o uid e o gid efetivo serem\n" " os uid e gid reais.\n" " -t Sai após a leitura e execução de um comando.\n" -" -u Trata limpeza (unset) de variáveis como um erro quando substituindo.\n" +" -u Trata limpeza (unset) de variáveis como um erro quando " +"substituindo.\n" " -v Mostra linhas de entrada do shell na medida em que forem lidas.\n" -" -x Mostra comandos e seus argumentos na medida em que forem executados.\n" +" -x Mostra comandos e seus argumentos na medida em que forem " +"executados.\n" " -B o shell vai realizar expansão de chaves\n" " -C Se definido, não permite arquivos normais existentes serem\n" " sobrescritos por redirecionamento da saída.\n" " -E Se definido, a armadilha ERR é herdada por funções do shell.\n" -" -H Habilita substituição de histórico estilo \"!\". Essa sinalização está\n" +" -H Habilita substituição de histórico estilo \"!\". Essa sinalização " +"está\n" " habilitada por padrão quando shell é interativa.\n" -" -P Se definida, não resolve links simbólicos ao sair de comandos, tais\n" +" -P Se definida, não resolve links simbólicos ao sair de comandos, " +"tais\n" " como `cd' (que altera o diretório atual).\n" -" -T Se definido, a armadilha DEBUG e RETURN são herdadas por funções do shell.\n" -" -- Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n" +" -T Se definido, a armadilha DEBUG e RETURN são herdadas por funções " +"do shell.\n" +" -- Atribui quaisquer argumentos restantes aos parâmetros " +"posicionais.\n" " Se não houver argumentos restantes, os parâmetros posicionais são\n" " limpos (unset).\n" -" - Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n" +" - Atribui quaisquer argumentos restantes aos parâmetros " +"posicionais.\n" " As opções -x e -v são desligadas.\n" " \n" " Usar +, ao invés de -, causa essas sinalizações serem desligadas. As\n" " sinalizações também podem ser usadas por meio de chamada do shell. As\n" -" sinalizações atualmente definidas podem ser encontradas em $-. Os n ARGs\n" -" restantes são parâmetros posicionais e são atribuídos, em ordem, a $1, $2,\n" +" sinalizações atualmente definidas podem ser encontradas em $-. Os n " +"ARGs\n" +" restantes são parâmetros posicionais e são atribuídos, em ordem, a $1, " +"$2,\n" " .. $n. Se nenhuma ARG for fornecido, todas as variáveis shell são\n" " mostradas.\n" " \n" @@ -4093,7 +4387,7 @@ msgstr "" " Retorna sucesso, a menos que uma opção inválida seja fornecida." # help unset -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4105,7 +4399,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4133,12 +4428,13 @@ msgstr "" " um NOME seja somente-leitura." # help export -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4153,7 +4449,8 @@ msgstr "" "Define atributo de exportação para variáveis shell.\n" " \n" " Marca cada NOME para exportação automática para o ambiente dos comandos\n" -" executados subsequentemente. Se VALOR for fornecido, atribui VALOR antes\n" +" executados subsequentemente. Se VALOR for fornecido, atribui VALOR " +"antes\n" " de exportar.\n" " \n" " Opções:\n" @@ -4168,7 +4465,7 @@ msgstr "" " NOME seja inválido." # help readonly -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4208,7 +4505,7 @@ msgstr "" " NOME seja inválido." # help shift -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4220,14 +4517,15 @@ msgid "" msgstr "" "Desloca parâmetros posicionais.\n" " \n" -" Renomeia os parâmetros posicionais $N+1,$N+2 ... até $1,$2 ... Se N não\n" +" Renomeia os parâmetros posicionais $N+1,$N+2 ... até $1,$2 ... Se N " +"não\n" " for fornecido, presume-se que ele seja 1.\n" " \n" " Status de saída:\n" " Retorna sucesso, a menos que N seja negativo ou maior que $#." # help source -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4252,15 +4550,18 @@ msgstr "" " ARQUIVO não puder ser lido." # help suspend -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4278,7 +4579,7 @@ msgstr "" " ou ocorra um erro." # help test -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4312,7 +4613,8 @@ 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" @@ -4333,7 +4635,8 @@ 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" @@ -4360,8 +4663,10 @@ msgid "" msgstr "" "Avalia expressão condicional.\n" " \n" -" Sai com um status de 0 (verdadeiro) ou 1 (falso) dependendo da avaliação\n" -" de EXPR. As expressões podem ser unárias ou binárias. Expressões unárias\n" +" Sai com um status de 0 (verdadeiro) ou 1 (falso) dependendo da " +"avaliação\n" +" de EXPR. As expressões podem ser unárias ou binárias. Expressões " +"unárias\n" " são normalmente usadas para examinar o status de um arquivo. Há\n" " operadores de strings e também há operadores de comparação numérica.\n" " \n" @@ -4375,7 +4680,8 @@ msgstr "" " -c ARQUIVO Verdadeiro, se arquivo for um caractere especial.\n" " -d ARQUIVO Verdadeiro, se arquivo for um diretório.\n" " -e ARQUIVO Verdadeiro, se arquivo existir.\n" -" -f ARQUIVO Verdadeiro, se arquivo existir e for um arquivo normal.\n" +" -f ARQUIVO Verdadeiro, se arquivo existir e for um arquivo " +"normal.\n" " -g ARQUIVO Verdadeiro, se arquivo for set-group-id.\n" " -h ARQUIVO Verdadeiro, se arquivo for um link simbólico.\n" " -L ARQUIVO Verdadeiro, se arquivo for um link simbólico.\n" @@ -4426,20 +4732,24 @@ msgstr "" " e for uma referência de nome.\n" " ! EXPR Verdadeiro, se a expressão EXPR for falsa.\n" " EXPR1 -a EXPR2 Verdadeiro, se ambas EXPR1 e EXPR2 forem verdadeiras.\n" -" EXPR1 -o EXPR2 Verdadeiro, se ao menos uma das expressões for verdadeira.\n" +" EXPR1 -o EXPR2 Verdadeiro, se ao menos uma das expressões for " +"verdadeira.\n" " \n" -" arg1 OP arg2 Testes aritméticos. OP é um dentre -eq, -ne, -lt, -le,\n" +" arg1 OP arg2 Testes aritméticos. OP é um dentre -eq, -ne, -lt, -" +"le,\n" " -gt, or -ge.\n" " \n" -" Operadores binários de aritmética retornam verdadeiro se ARG1 for igual,\n" +" Operadores binários de aritmética retornam verdadeiro se ARG1 for " +"igual,\n" " não-igual, menor-que, menor-ou-igual-a ou maior-ou-igual-a ARG2.\n" " \n" " Status de saída:\n" -" Retorna sucesso, se EXPR for avaliada como verdadeira; falha, se EXPR for\n" +" Retorna sucesso, se EXPR for avaliada como verdadeira; falha, se EXPR " +"for\n" " avaliada como falsa ou um argumento inválido for informado." # help [ -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4452,11 +4762,12 @@ msgstr "" " argumento deve ser um `]' literal, para corresponder ao `[' que abriu." # help times -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4471,39 +4782,54 @@ msgstr "" " Sempre com sucesso." # help trap -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Tratamento de sinais e outros eventos.\n" " \n" @@ -4543,7 +4869,7 @@ msgstr "" " uma opção inválida seja fornecida." # help type -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4569,7 +4895,8 @@ msgid "" " NAME\tCommand name to be interpreted.\n" " \n" " Exit Status:\n" -" Returns success if all of the NAMEs are found; fails if any are not found." +" Returns success if all of the NAMEs are found; fails if any are not " +"found." msgstr "" "Exibe informação sobre o tipo de comando.\n" " \n" @@ -4599,11 +4926,13 @@ msgstr "" " deles não for encontrado." # help ulimit -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4640,9 +4969,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4696,7 +5026,7 @@ msgstr "" " ocorra um erro." # help umask -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4732,23 +5062,27 @@ msgstr "" " inválida seja fornecida." # help wait -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4782,16 +5116,18 @@ msgstr "" " filho inesperado." # help wait -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Espera por conclusão de processo e retorna o status de saída.\n" @@ -4805,8 +5141,17 @@ msgstr "" " Retorna o status do último ID; falha, se ID for inválido ou uma opção\n" " inválida for fornecida." +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + # help for -#: builtins.c:1549 +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4822,14 +5167,15 @@ msgstr "" " \n" " O loop `for' executa uma sequência de comandos para cada membro em\n" " uma lista de itens. Se `in PALAVRAS ...;' não estiver presente, então\n" -" `in \"$@\"' é presumido. Para cada elemento em PALAVRAS, NOME é definido\n" +" `in \"$@\"' é presumido. Para cada elemento em PALAVRAS, NOME é " +"definido\n" " com aquele elemento e os COMANDOS são executados.\n" " \n" " Status de saída:\n" " Retorna o status do último comando executado." # help for (( (?) -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4860,7 +5206,7 @@ msgstr "" " Retorna o status do último comando executado." # help select -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4898,7 +5244,7 @@ msgstr "" " Retorna o status do último comando executado." # help time -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4928,7 +5274,7 @@ msgstr "" " O status de retorno é o status retornado por LINHA-COMANDOS." # help case -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4947,16 +5293,21 @@ msgstr "" " Retorna o status do último comando executado." # help if -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4977,11 +5328,12 @@ msgstr "" " Retorna o status do último comando executado." # help while -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4996,11 +5348,12 @@ msgstr "" " Retorna o status do último comando executado." # help until -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -5014,7 +5367,7 @@ msgstr "" " Status de saída:\n" " Retorna o status do último comando executado." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5037,12 +5390,13 @@ msgstr "" " O comando coproc retorna um status de saída de 0." # help function -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -5060,7 +5414,7 @@ msgstr "" " Retorna sucesso, a menos que NOME seja somente-leitura." # help -m { -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5078,7 +5432,7 @@ msgstr "" " Status de saída:\n" " Retorna o status do último comando executado." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5104,7 +5458,7 @@ msgstr "" " Retorna o status de um trabalho resumido." # help '((' -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5123,13 +5477,16 @@ msgstr "" " Retorna 1, se EXPRESSÃO for avaliada como 0; do contrário, retorna 0." # help '[' -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5173,7 +5530,7 @@ msgstr "" " 0 ou 1 dependendo do valor de EXPRESSÃO." # help variables -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5257,7 +5614,8 @@ msgstr "" " OSTYPE\t\t\tA versão do Unix no qual Bash está sendo executado.\n" " PATH\t\t\tUma lista separada por dois-pontos de diretórios para\n" " \t\t\tpesquisar ao se procurar por comandos.\n" -" PROMPT_COMMAND\tUm comando a ser executado antes de imprimir cada prompt\n" +" PROMPT_COMMAND\tUm comando a ser executado antes de imprimir cada " +"prompt\n" " \t\t\tprimário.\n" " PS1\t\t\t\tA string de prompt primário.\n" " PS2\t\t\t\tA string de prompt secundária.\n" @@ -5288,7 +5646,7 @@ msgstr "" " \t\t\t\thistórico.\n" # help pushd -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5348,7 +5706,7 @@ msgstr "" " a alteração de diretório falhar." # help popd -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5399,7 +5757,7 @@ msgstr "" " a alteração de diretório falhar." # help dirs -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5453,7 +5811,7 @@ msgstr "" " ocorrer um erro." # help shopt -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5490,7 +5848,8 @@ msgstr "" " opção inválida for fornecida ou NOME-OPÇÃO estiver desabilitado." # help printf -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5498,29 +5857,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Formata e imprime ARGUMENTOS sob controle de FORMATO.\n" @@ -5557,13 +5923,16 @@ msgstr "" " ocorra um erro de escrita ou atribuição." # help complete -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5577,8 +5946,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5590,8 +5961,10 @@ msgstr "" " impressas em uma forma que permite-as serem usadas como entrada.\n" " \n" " Opções:\n" -" -p\timprime especificações existentes de completar em um formato usável\n" -" -r\tremove uma especificação de completar para cada NOME ou, se nenhum\n" +" -p\timprime especificações existentes de completar em um formato " +"usável\n" +" -r\tremove uma especificação de completar para cada NOME ou, se " +"nenhum\n" " \t\tNOME for fornecido, todas as especificações de completar\n" " -D\taplica as completações e ações como sendo o padrão para comandos\n" " \t\tsem qualquer especificação definida\n" @@ -5601,7 +5974,8 @@ msgstr "" " \t\tcomando)\n" " \n" " Ao tentar completar, as ações são fornecidas na ordem em que as opções\n" -" de letras de caixa alta são listadas acima. Se várias opções forem fornecidas,\n" +" de letras de caixa alta são listadas acima. Se várias opções forem " +"fornecidas,\n" " a opção -D tem precedência sobre -E, e ambos têm precedência sobre -I.\n" " sobre -E.\n" " \n" @@ -5610,13 +5984,19 @@ msgstr "" " ocorra um erro." # help compgen -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5632,13 +6012,16 @@ msgstr "" " ocorra um erro." # help compopt -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5689,21 +6072,26 @@ msgstr "" " NOME não tem uma especificação de completação definida." # help mapfile -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5716,11 +6104,13 @@ msgid "" " element to be assigned and the line to be assigned to that element\n" " as additional arguments.\n" " \n" -" If not supplied with an explicit origin, mapfile will clear ARRAY before\n" +" If not supplied with an explicit origin, mapfile will clear ARRAY " +"before\n" " assigning to it.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or ARRAY is readonly or\n" +" Returns success unless an invalid option is given or ARRAY is readonly " +"or\n" " not an indexed array." msgstr "" "Lê linhas da entrada padrão para uma variável array indexado.\n" @@ -5731,23 +6121,28 @@ msgstr "" " \n" " Opções:\n" " -d dlim Usa DELIM para terminar linhas, ao invés de nova linha\n" -" -n número Copia no máximo NÚMERO linhas. Se NÚMERO for 0, todas as\n" +" -n número Copia no máximo NÚMERO linhas. Se NÚMERO for 0, todas " +"as\n" " linhas são copiadas\n" " -O origem Inicia atribuição de ARRAY no índice ORIGEM. O índice\n" " padrão é 0\n" " -s número Descarta as primeiras NÚMERO linhas lidas\n" " -t Remove uma DELIM ao final para cada linha lida\n" " (padrão: nova linha)\n" -" -u fd Lê linhas do descritor de arquivos FD, ao invés da entrada\n" +" -u fd Lê linhas do descritor de arquivos FD, ao invés da " +"entrada\n" " padrão\n" -" -C chamada Avalia CHAMADA a cada vez que QUANTIDADE linhas foram lidas\n" -" -c quantidade Especifica o número de linhas lidas entre cada chamada para\n" +" -C chamada Avalia CHAMADA a cada vez que QUANTIDADE linhas foram " +"lidas\n" +" -c quantidade Especifica o número de linhas lidas entre cada chamada " +"para\n" " CHAMADA\n" " \n" " Argumentos:\n" " ARRAY Nome da variável array para usar para arquivos de dados\n" " \n" -" Se -C for fornecido sem -c, a quantidade padrão é 5000. Quando CHAMADA é\n" +" Se -C for fornecido sem -c, a quantidade padrão é 5000. Quando CHAMADA " +"é\n" " avaliada, é fornecido o índice para o próximo elemento da array ser\n" " atribuído e a linha para ser atribuída àquele elemento como argumentos\n" " adicionais\n" @@ -5760,7 +6155,7 @@ msgstr "" " somente leitura ou não for um array indexado." # help readarray -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5770,6 +6165,34 @@ msgstr "" " \n" " Um sinônimo para `mapfile'." +# help caller +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Retorna o contexto da chamada de sub-rotina atual.\n" +#~ " \n" +#~ " Sem EXPR, retorna \"$linha $arquivo\". Com EXPR, retorna\n" +#~ " \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada " +#~ "para\n" +#~ " fornecer um rastro da pilha.\n" +#~ " \n" +#~ " O valor de EXPR indica quantos quadros de chamada deve voltar antes " +#~ "do\n" +#~ " atual; o quadro do topo é o quadro 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "aviso: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: chave de array associativo inválida" @@ -5847,9 +6270,12 @@ msgstr "" #~ " If FILENAME is given, it is used as the history file. Otherwise,\n" #~ " if HISTFILE has a value, that is used, else ~/.bash_history.\n" #~ " \n" -#~ " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" -#~ " as a format string for strftime(3) to print the time stamp associated\n" -#~ " with each displayed history entry. No time stamps are printed otherwise.\n" +#~ " If the HISTTIMEFORMAT variable is set and not null, its value is " +#~ "used\n" +#~ " as a format string for strftime(3) to print the time stamp " +#~ "associated\n" +#~ " with each displayed history entry. No time stamps are printed " +#~ "otherwise.\n" #~ " \n" #~ " Exit Status:\n" #~ " Returns success unless an invalid option is given or an error occurs." @@ -5875,12 +6301,16 @@ msgstr "" #~ " -s\t\t\tanexa os ARGs à lista de histórico como uma única entrada\n" #~ " \n" #~ " Se ARQUIVO for fornecido, ele é usado como o arquivo de histórico.\n" -#~ " Do contrário, se a variável HISTFILE tiver um valor, este será usado;\n" +#~ " Do contrário, se a variável HISTFILE tiver um valor, este será " +#~ "usado;\n" #~ " senão, usa de ~/.bash_history.\n" #~ " \n" -#~ " Se a variável HISTTIMEFORMAT for definida e não for nula, seu valor é\n" -#~ " usado como uma string de formato para strftime(3) para mostrar a marca\n" -#~ " de tempo associada com cada entrada de histórico exibida. Do contrário,\n" +#~ " Se a variável HISTTIMEFORMAT for definida e não for nula, seu valor " +#~ "é\n" +#~ " usado como uma string de formato para strftime(3) para mostrar a " +#~ "marca\n" +#~ " de tempo associada com cada entrada de histórico exibida. Do " +#~ "contrário,\n" #~ " nenhuma marca de tempo é mostrada.\n" #~ " \n" #~ " Status de saída:\n" @@ -5901,8 +6331,10 @@ msgstr "" #~ " -l\tlist the signal names; if arguments follow `-l' they are\n" #~ " \t\tassumed to be signal numbers for which names should be listed\n" #~ " \n" -#~ " Kill is a shell builtin for two reasons: it allows job IDs to be used\n" -#~ " instead of process IDs, and allows processes to be killed if the limit\n" +#~ " Kill is a shell builtin for two reasons: it allows job IDs to be " +#~ "used\n" +#~ " instead of process IDs, and allows processes to be killed if the " +#~ "limit\n" #~ " on processes that you can create is reached.\n" #~ " \n" #~ " Exit Status:\n" @@ -5960,7 +6392,8 @@ msgstr "" #~ " history enable command history\n" #~ " ignoreeof the shell will not exit upon reading EOF\n" #~ " interactive-comments\n" -#~ " allow comments to appear in interactive commands\n" +#~ " allow comments to appear in interactive " +#~ "commands\n" #~ " keyword same as -k\n" #~ " monitor same as -m\n" #~ " noclobber same as -C\n" @@ -5971,9 +6404,12 @@ msgstr "" #~ " nounset same as -u\n" #~ " onecmd same as -t\n" #~ " physical same as -P\n" -#~ " pipefail the return value of a pipeline is the status of\n" -#~ " the last command to exit with a non-zero status,\n" -#~ " or zero if no command exited with a non-zero status\n" +#~ " pipefail the return value of a pipeline is the status " +#~ "of\n" +#~ " the last command to exit with a non-zero " +#~ "status,\n" +#~ " or zero if no command exited with a non-zero " +#~ "status\n" #~ " posix change the behavior of bash where the default\n" #~ " operation differs from the Posix standard to\n" #~ " match the standard\n" @@ -5981,9 +6417,11 @@ msgstr "" #~ " verbose same as -v\n" #~ " vi use a vi-style line editing interface\n" #~ " xtrace same as -x\n" -#~ " -p Turned on whenever the real and effective user ids do not match.\n" +#~ " -p Turned on whenever the real and effective user ids do not " +#~ "match.\n" #~ " Disables processing of the $ENV file and importing of shell\n" -#~ " functions. Turning this option off causes the effective uid and\n" +#~ " functions. Turning this option off causes the effective uid " +#~ "and\n" #~ " gid to be set to the real uid and gid.\n" #~ " -t Exit after reading and executing one command.\n" #~ " -u Treat unset variables as an error when substituting.\n" @@ -6006,26 +6444,32 @@ msgstr "" #~ " \n" #~ " Using + rather than - causes these flags to be turned off. The\n" #~ " flags can also be used upon invocation of the shell. The current\n" -#~ " set of flags may be found in $-. The remaining n ARGs are positional\n" +#~ " set of flags may be found in $-. The remaining n ARGs are " +#~ "positional\n" #~ " parameters and are assigned, in order, to $1, $2, .. $n. If no\n" #~ " ARGs are given, all shell variables are printed.\n" #~ " \n" #~ " Exit Status:\n" #~ " Returns success unless an invalid option is given." #~ msgstr "" -#~ "Define ou remove definição de valores das opções e dos parâmetros posicionais\n" +#~ "Define ou remove definição de valores das opções e dos parâmetros " +#~ "posicionais\n" #~ "do shell:\n" #~ " \n" -#~ " Altera o valor de opções e de parâmetros posicionais do shell ou mostra\n" +#~ " Altera o valor de opções e de parâmetros posicionais do shell ou " +#~ "mostra\n" #~ " os nomes ou valores de variáveis shell.\n" #~ " \n" #~ " Opções:\n" -#~ " -a Marca variáveis, que foram modificadas ou criadas, para exportação.\n" +#~ " -a Marca variáveis, que foram modificadas ou criadas, para " +#~ "exportação.\n" #~ " -b Notifica sobre terminação de trabalho imediatamente.\n" #~ " -e Sai imediatamente se um comando sai com um status não-zero.\n" #~ " -f Desabilita a geração de nome de arquivo (\"globbing\").\n" -#~ " -h Memoriza a localização de comandos à medida em que são procurados.\n" -#~ " -k Todos argumentos de atribuição são colocados no ambiente para um\n" +#~ " -h Memoriza a localização de comandos à medida em que são " +#~ "procurados.\n" +#~ " -k Todos argumentos de atribuição são colocados no ambiente para " +#~ "um\n" #~ " comando, e não apenas aqueles que precedem o nome do comando.\n" #~ " -m Controle de trabalho está habilitado.\n" #~ " -n Lê comandos, mas não os executa.\n" @@ -6042,7 +6486,8 @@ msgstr "" #~ " history habilita histórico de comandos\n" #~ " ignoreeof shell não vai sair após leitura de EOF\n" #~ " interactive-comments\n" -#~ " permite mostrar comentários em comandos interativos\n" +#~ " permite mostrar comentários em comandos " +#~ "interativos\n" #~ " keyword mesmo que -k\n" #~ " monitor mesmo que -m\n" #~ " noclobber mesmo que -C\n" @@ -6053,43 +6498,61 @@ msgstr "" #~ " nounset mesmo que -u\n" #~ " onecmd mesmo que -t\n" #~ " physical mesmo que -P\n" -#~ " pipefail o valor de retorno de uma linha de comandos é o\n" -#~ " status do último comando a sair com status não-zero,\n" -#~ " ou zero se nenhum comando saiu com status não zero\n" -#~ " posix altera o comportamento do bash, onde a operação\n" +#~ " pipefail o valor de retorno de uma linha de comandos é " +#~ "o\n" +#~ " status do último comando a sair com status não-" +#~ "zero,\n" +#~ " ou zero se nenhum comando saiu com status não " +#~ "zero\n" +#~ " posix altera o comportamento do bash, onde a " +#~ "operação\n" #~ " padrão diverge dos padrões do Posix para\n" #~ " corresponder a estes padrões\n" #~ " privileged mesmo que -p\n" #~ " verbose mesmo que -v\n" #~ " vi usa interface de edição de linha estilo vi\n" #~ " xtrace mesmo que -x\n" -#~ " -p Ligado sempre que IDs de usuário real e efetivo não corresponderem.\n" -#~ " Desabilita processamento do arquivo $ENV e importação de funções da\n" -#~ " shell. Ao desligar essa opção, causa o uid e o gid efetivo serem\n" +#~ " -p Ligado sempre que IDs de usuário real e efetivo não " +#~ "corresponderem.\n" +#~ " Desabilita processamento do arquivo $ENV e importação de " +#~ "funções da\n" +#~ " shell. Ao desligar essa opção, causa o uid e o gid efetivo " +#~ "serem\n" #~ " os uid e gid reais.\n" #~ " -t Sai após a leitura e execução de um comando.\n" -#~ " -u Trata limpeza (unset) de variáveis como um erro quando substituindo.\n" -#~ " -v Mostra linhas de entrada do shell na medida em que forem lidas.\n" -#~ " -x Mostra comandos e seus argumentos na medida em que forme executados.\n" +#~ " -u Trata limpeza (unset) de variáveis como um erro quando " +#~ "substituindo.\n" +#~ " -v Mostra linhas de entrada do shell na medida em que forem " +#~ "lidas.\n" +#~ " -x Mostra comandos e seus argumentos na medida em que forme " +#~ "executados.\n" #~ " -B o shell vai realizar expansão de chaves\n" #~ " -C Se definido, não permite arquivos normais existentes serem\n" #~ " sobrescritos por redirecionamento da saída.\n" #~ " -E Se definido, a armadilha ERR é herdada por funções do shell.\n" -#~ " -H Habilita substituição de histórico estilo \"!\". Essa sinalização está\n" +#~ " -H Habilita substituição de histórico estilo \"!\". Essa " +#~ "sinalização está\n" #~ " habilitada por padrão quando shell é interativa.\n" -#~ " -P Se definida, não resolve links simbólicos ao sair de comandos, tais\n" +#~ " -P Se definida, não resolve links simbólicos ao sair de comandos, " +#~ "tais\n" #~ " como `cd' (que altera o diretório atual).\n" #~ " -T Se definido, a armadilha DEBUG é herdada por funções do shell.\n" -#~ " -- Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n" -#~ " Se não houver argumentos restantes, os parâmetros posicionais são\n" +#~ " -- Atribui quaisquer argumentos restantes aos parâmetros " +#~ "posicionais.\n" +#~ " Se não houver argumentos restantes, os parâmetros posicionais " +#~ "são\n" #~ " limpos (unset).\n" -#~ " - Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n" +#~ " - Atribui quaisquer argumentos restantes aos parâmetros " +#~ "posicionais.\n" #~ " As opções -x e -v são desligadas.\n" #~ " \n" #~ " Usar +, ao invés de -, causa essas sinalizações serem desligadas. As\n" -#~ " sinalizações também podem ser usadas por meio de chamada do shell. As\n" -#~ " sinalizações atualmente definidas podem ser encontradas em $-. Os n ARGs\n" -#~ " restantes são parâmetros posicionais e são atribuídos, em ordem, a $1, $2,\n" +#~ " sinalizações também podem ser usadas por meio de chamada do shell. " +#~ "As\n" +#~ " sinalizações atualmente definidas podem ser encontradas em $-. Os n " +#~ "ARGs\n" +#~ " restantes são parâmetros posicionais e são atribuídos, em ordem, a " +#~ "$1, $2,\n" #~ " .. $n. Se nenhuma ARG for fornecido, todas as variáveis shell são\n" #~ " mostradas.\n" #~ " \n" @@ -6100,8 +6563,10 @@ msgstr "" #~ msgid "" #~ "Create a coprocess named NAME.\n" #~ " \n" -#~ " Execute COMMAND asynchronously, with the standard output and standard\n" -#~ " input of the command connected via a pipe to file descriptors assigned\n" +#~ " Execute COMMAND asynchronously, with the standard output and " +#~ "standard\n" +#~ " input of the command connected via a pipe to file descriptors " +#~ "assigned\n" #~ " to indices 0 and 1 of an array variable NAME in the executing shell.\n" #~ " The default NAME is \"COPROC\".\n" #~ " \n" @@ -6111,7 +6576,8 @@ msgstr "" #~ "Cria um coprocesso chamado NOME.\n" #~ " \n" #~ " Executa COMANDO assincronamente, com a saída padrão e entrada padrão\n" -#~ " do comando conectados via um `pipe' (redirecionamento) para descritores\n" +#~ " do comando conectados via um `pipe' (redirecionamento) para " +#~ "descritores\n" #~ " de arquivo atribuídos para índices 0 e 1 de uma variável array NOME\n" #~ " no shell em execução. O NOME padrão é \"COPROC\".\n" #~ " \n" @@ -6234,7 +6700,8 @@ msgstr "" #~ msgstr "substituição de comando" #~ msgid "Can't reopen pipe to command substitution (fd %d): %s" -#~ msgstr "Impossível reabrir o `pipe' para substituição de comando (fd %d): %s" +#~ msgstr "" +#~ "Impossível reabrir o `pipe' para substituição de comando (fd %d): %s" #~ msgid "$%c: unbound variable" #~ msgstr "$%c: variável não associada" @@ -6318,7 +6785,8 @@ msgstr "" #~ msgstr "de aliases na forma `alias NOME=VALOR' na saída padrão." #~ msgid "Otherwise, an alias is defined for each NAME whose VALUE is given." -#~ msgstr "Ou então, um alias é definido para cada NOME cujo VALOR for fornecido." +#~ msgstr "" +#~ "Ou então, um alias é definido para cada NOME cujo VALOR for fornecido." #~ msgid "A trailing space in VALUE causes the next word to be checked for" #~ msgstr "Um espaço após VALOR faz a próxima palavra ser verificada para" @@ -6327,34 +6795,45 @@ msgstr "" #~ msgstr "substituição do alias quando o alias é expandido. Alias retorna" #~ msgid "true unless a NAME is given for which no alias has been defined." -#~ msgstr "verdadeiro, a não ser que seja fornecido um NOME sem alias definido." +#~ msgstr "" +#~ "verdadeiro, a não ser que seja fornecido um NOME sem alias definido." -#~ msgid "Remove NAMEs from the list of defined aliases. If the -a option is given," -#~ msgstr "Remove NOMEs da lista de aliases definidos. Se a opção -a for fornecida," +#~ msgid "" +#~ "Remove NAMEs from the list of defined aliases. If the -a option is given," +#~ msgstr "" +#~ "Remove NOMEs da lista de aliases definidos. Se a opção -a for fornecida," #~ msgid "then remove all alias definitions." #~ msgstr "então todas as definições de alias são removidas." #~ msgid "Bind a key sequence to a Readline function, or to a macro. The" -#~ msgstr "Víncula uma sequência de teclas a uma função de leitura de linha, ou a uma" +#~ msgstr "" +#~ "Víncula uma sequência de teclas a uma função de leitura de linha, ou a uma" #~ msgid "syntax is equivalent to that found in ~/.inputrc, but must be" -#~ msgstr "macro. A sintaxe é equivalente à encontrada em ~/.inputrc, mas deve ser" +#~ msgstr "" +#~ "macro. A sintaxe é equivalente à encontrada em ~/.inputrc, mas deve ser" -#~ msgid "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'." -#~ msgstr "passada como um único argumento: bind '\"\\C-x\\C-r\": re-read-init-file'." +#~ msgid "" +#~ "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'." +#~ msgstr "" +#~ "passada como um único argumento: bind '\"\\C-x\\C-r\": re-read-init-file'." #~ msgid "Arguments we accept:" #~ msgstr "Argumentos permitidos:" -#~ msgid " -m keymap Use `keymap' as the keymap for the duration of this" -#~ msgstr " -m MAPA-TECLAS Usar `MAPA-TECLAS' como mapa das teclas pela duração" +#~ msgid "" +#~ " -m keymap Use `keymap' as the keymap for the duration of this" +#~ msgstr "" +#~ " -m MAPA-TECLAS Usar `MAPA-TECLAS' como mapa das teclas pela duração" #~ msgid " command. Acceptable keymap names are emacs," #~ msgstr " deste comando. Os nomes aceitos são emacs," -#~ msgid " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," -#~ msgstr " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," +#~ msgid "" +#~ " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," +#~ msgstr "" +#~ " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," #~ msgid " vi-command, and vi-insert." #~ msgstr " vi-command, and vi-insert." @@ -6365,8 +6844,10 @@ msgstr "" #~ msgid " -P List function names and bindings." #~ msgstr " -P Listar nomes e associações das funções." -#~ msgid " -p List functions and bindings in a form that can be" -#~ msgstr " -p Listar nomes e associações das funções de uma forma" +#~ msgid "" +#~ " -p List functions and bindings in a form that can be" +#~ msgstr "" +#~ " -p Listar nomes e associações das funções de uma forma" #~ msgid " reused as input." #~ msgstr " que pode ser reutilizada como entrada." @@ -6377,24 +6858,31 @@ msgstr "" #~ msgid " -f filename Read key bindings from FILENAME." #~ msgstr " -f ARQUIVO Ler os vínculos das teclas em ARQUIVO." -#~ msgid " -q function-name Query about which keys invoke the named function." +#~ msgid "" +#~ " -q function-name Query about which keys invoke the named function." #~ msgstr " -q NOME-FUNÇÃO Consultar quais teclas chamam esta função." #~ msgid " -V List variable names and values" #~ msgstr " -V Listar os nomes e os valores das variáveis." -#~ msgid " -v List variable names and values in a form that can" -#~ msgstr " -v Listar os nomes e os valores das variáveis de uma" +#~ msgid "" +#~ " -v List variable names and values in a form that can" +#~ msgstr "" +#~ " -v Listar os nomes e os valores das variáveis de uma" #~ msgid " be reused as input." #~ msgstr " forma que pode ser reutilizada como entrada." -#~ msgid " -S List key sequences that invoke macros and their values" +#~ msgid "" +#~ " -S List key sequences that invoke macros and their " +#~ "values" #~ msgstr "" #~ " -S Listar as sequências de teclas que chamam macros\n" #~ " e seus valores." -#~ msgid " -s List key sequences that invoke macros and their values in" +#~ msgid "" +#~ " -s List key sequences that invoke macros and their " +#~ "values in" #~ msgstr " -s Listar sequências de teclas que chamam macros" #~ msgid " a form that can be reused as input." @@ -6415,7 +6903,8 @@ msgstr "" #~ msgstr "Se N for especificado, prossegue no N-ésimo laço envolvente." #~ msgid "Run a shell builtin. This is useful when you wish to rename a" -#~ msgstr "Executa um comando interno do shell. Útil quando desejamos substituir" +#~ msgstr "" +#~ "Executa um comando interno do shell. Útil quando desejamos substituir" #~ msgid "shell builtin to be a function, but need the functionality of the" #~ msgstr "um comando interno do shell por uma função, mas necessitamos da" @@ -6430,10 +6919,12 @@ msgstr "" #~ msgstr "para DIR. A variável $CDPATH define o caminho de procura para" #~ msgid "the directory containing DIR. Alternative directory names in CDPATH" -#~ msgstr "o diretório que contém DIR. Nomes de diretórios alternativos em CDPATH" +#~ msgstr "" +#~ "o diretório que contém DIR. Nomes de diretórios alternativos em CDPATH" #~ msgid "are separated by a colon (:). A null directory name is the same as" -#~ msgstr "são separados por dois pontos (:). Um nome de diretório nulo é o mesmo" +#~ msgstr "" +#~ "são separados por dois pontos (:). Um nome de diretório nulo é o mesmo" #~ msgid "the current directory, i.e. `.'. If DIR begins with a slash (/)," #~ msgstr "que o diretório atual, i.e. `.'. Se DIR inicia com uma barra (/)," @@ -6442,15 +6933,20 @@ msgstr "" #~ msgstr "então $CDPATH não é usado. Se o diretório não for encontrado, e a" #~ msgid "shell option `cdable_vars' is set, then try the word as a variable" -#~ msgstr "opção `cdable_vars' estiver definida, tentar usar DIR como um nome de" +#~ msgstr "" +#~ "opção `cdable_vars' estiver definida, tentar usar DIR como um nome de" #~ msgid "name. If that variable has a value, then cd to the value of that" -#~ msgstr "variável. Se esta variável tiver valor, então `cd' para o valor desta" +#~ msgstr "" +#~ "variável. Se esta variável tiver valor, então `cd' para o valor desta" -#~ msgid "variable. The -P option says to use the physical directory structure" -#~ msgstr "variável. A opção -P indica para usar a estrutura física do diretório" +#~ msgid "" +#~ "variable. The -P option says to use the physical directory structure" +#~ msgstr "" +#~ "variável. A opção -P indica para usar a estrutura física do diretório" -#~ msgid "instead of following symbolic links; the -L option forces symbolic links" +#~ msgid "" +#~ "instead of following symbolic links; the -L option forces symbolic links" #~ msgstr "em vez de seguir os vínculos simbólicos; a opção -L força seguir os" #~ msgid "to be followed." @@ -6465,19 +6961,27 @@ msgstr "" #~ msgid "makes pwd follow symbolic links." #~ msgstr "com que `pwd' siga os vínculos simbólicos." -#~ msgid "Runs COMMAND with ARGS ignoring shell functions. If you have a shell" -#~ msgstr "Executa COMANDO com ARGs ignorando as funções da shell. Ex: Havendo" +#~ msgid "" +#~ "Runs COMMAND with ARGS ignoring shell functions. If you have a shell" +#~ msgstr "" +#~ "Executa COMANDO com ARGs ignorando as funções da shell. Ex: Havendo" #~ msgid "function called `ls', and you wish to call the command `ls', you can" -#~ msgstr "uma função `ls', e se for necessário executar o comando `ls', executa-se" - -#~ msgid "say \"command ls\". If the -p option is given, a default value is used" -#~ msgstr "\"command ls\". Se a opção -p for fornecida, o valor padrão é utilizado" +#~ msgstr "" +#~ "uma função `ls', e se for necessário executar o comando `ls', executa-se" -#~ msgid "for PATH that is guaranteed to find all of the standard utilities. If" -#~ msgstr "para PATH, garantindo-se o encontro de todos os utilitários padrão. Se" +#~ msgid "" +#~ "say \"command ls\". If the -p option is given, a default value is used" +#~ msgstr "" +#~ "\"command ls\". Se a opção -p for fornecida, o valor padrão é utilizado" -#~ msgid "the -V or -v option is given, a string is printed describing COMMAND." +#~ msgid "" +#~ "for PATH that is guaranteed to find all of the standard utilities. If" +#~ msgstr "" +#~ "para PATH, garantindo-se o encontro de todos os utilitários padrão. Se" + +#~ msgid "" +#~ "the -V or -v option is given, a string is printed describing COMMAND." #~ msgstr "a opção -V ou -v for fornecida, é exibida a descrição do COMANDO." #~ msgid "The -V option produces a more verbose description." @@ -6528,7 +7032,8 @@ msgstr "" #~ msgid "name only." #~ msgstr "somente." -#~ msgid "Using `+' instead of `-' turns off the given attribute instead. When" +#~ msgid "" +#~ "Using `+' instead of `-' turns off the given attribute instead. When" #~ msgstr "Usando `+' em vez de `-' faz o atributo ser desabilitado. Quando" #~ msgid "used in a function, makes NAMEs local, as with the `local' command." @@ -6547,7 +7052,8 @@ msgstr "" #~ msgstr "Exibe ARGs. Se -n for fornecido, o caracter final de nova linha é" #~ msgid "suppressed. If the -e option is given, interpretation of the" -#~ msgstr "suprimido. Se a opção -e for fornecida, a interpretação dos seguintes" +#~ msgstr "" +#~ "suprimido. Se a opção -e for fornecida, a interpretação dos seguintes" #~ msgid "following backslash-escaped characters is turned on:" #~ msgstr "caracteres após a contrabarra é ativada:" @@ -6585,56 +7091,74 @@ msgstr "" #~ msgid "\t\\num\tthe character whose ASCII code is NUM (octal)." #~ msgstr "\t\\num\to caracter com código ASCII igual a NUM (octal)." -#~ msgid "You can explicitly turn off the interpretation of the above characters" -#~ msgstr "Pode-se explicitamente desabilitar a interpretação dos caracteres acima" +#~ msgid "" +#~ "You can explicitly turn off the interpretation of the above characters" +#~ msgstr "" +#~ "Pode-se explicitamente desabilitar a interpretação dos caracteres acima" #~ msgid "with the -E option." #~ msgstr "através da opção -E." -#~ msgid "Output the ARGs. If -n is specified, the trailing newline is suppressed." -#~ msgstr "Exibe ARGS. Se -n for fornecido, o caracter final de nova linha é suprimido." +#~ msgid "" +#~ "Output the ARGs. If -n is specified, the trailing newline is suppressed." +#~ msgstr "" +#~ "Exibe ARGS. Se -n for fornecido, o caracter final de nova linha é " +#~ "suprimido." #~ msgid "Enable and disable builtin shell commands. This allows" -#~ msgstr "Habilita e desabilita os comandos internos do shell, permitindo usar" +#~ msgstr "" +#~ "Habilita e desabilita os comandos internos do shell, permitindo usar" #~ msgid "you to use a disk command which has the same name as a shell" -#~ msgstr "um comando de disco que tenha o mesmo nome do comando interno do shell." +#~ msgstr "" +#~ "um comando de disco que tenha o mesmo nome do comando interno do shell." #~ msgid "builtin. If -n is used, the NAMEs become disabled; otherwise" -#~ msgstr "Se -n for especificado, os NOMEs são desabilitados, senão os nomes são" +#~ msgstr "" +#~ "Se -n for especificado, os NOMEs são desabilitados, senão os nomes são" #~ msgid "NAMEs are enabled. For example, to use the `test' found on your" -#~ msgstr "habilitados. Por exemplo, para usar `test' encontrado pelo PATH em vez" +#~ msgstr "" +#~ "habilitados. Por exemplo, para usar `test' encontrado pelo PATH em vez" #~ msgid "path instead of the shell builtin version, type `enable -n test'." -#~ msgstr "da versão interna do comando, digite `enable -n test'. Em sistemas que" +#~ msgstr "" +#~ "da versão interna do comando, digite `enable -n test'. Em sistemas que" #~ msgid "On systems supporting dynamic loading, the -f option may be used" -#~ msgstr "suportam carregamento dinâmico, pode-se usar a opção -f para carregar" +#~ msgstr "" +#~ "suportam carregamento dinâmico, pode-se usar a opção -f para carregar" #~ msgid "to load new builtins from the shared object FILENAME. The -d" -#~ msgstr "novos comandos internos do objeto compartilhado ARQUIVO. A opção -d" +#~ msgstr "" +#~ "novos comandos internos do objeto compartilhado ARQUIVO. A opção -d" #~ msgid "option will delete a builtin previously loaded with -f. If no" -#~ msgstr "elimina os comandos internos previamente carregados com -f. Se nenhum" +#~ msgstr "" +#~ "elimina os comandos internos previamente carregados com -f. Se nenhum" #~ msgid "non-option names are given, or the -p option is supplied, a list" -#~ msgstr "nome for fornecido, ou se a opção -p for fornecida, uma lista de comandos" +#~ msgstr "" +#~ "nome for fornecido, ou se a opção -p for fornecida, uma lista de comandos" #~ msgid "of builtins is printed. The -a option means to print every builtin" -#~ msgstr "internos é exibida. A opção -a faz com que todos os comandos internos" +#~ msgstr "" +#~ "internos é exibida. A opção -a faz com que todos os comandos internos" #~ msgid "with an indication of whether or not it is enabled. The -s option" #~ msgstr "sejam exibidos indicando se estão habilitados ou não. A opção -s" #~ msgid "restricts the output to the Posix.2 `special' builtins. The -n" -#~ msgstr "restringe a saída aos comandos internos `especiais' Posix.2. A opção" +#~ msgstr "" +#~ "restringe a saída aos comandos internos `especiais' Posix.2. A opção" #~ msgid "option displays a list of all disabled builtins." #~ msgstr "-n exibe a lista de todos os comandos internos desabilitados." -#~ msgid "Read ARGs as input to the shell and execute the resulting command(s)." -#~ msgstr "Ler ARGs como entrada do shell e executar o(s) comando(s) resultante(s)." +#~ msgid "" +#~ "Read ARGs as input to the shell and execute the resulting command(s)." +#~ msgstr "" +#~ "Ler ARGs como entrada do shell e executar o(s) comando(s) resultante(s)." #~ msgid "Getopts is used by shell procedures to parse positional parameters." #~ msgstr "" @@ -6663,13 +7187,15 @@ msgstr "" #~ msgstr "shell OPTIND. OPTIND é inicializado com 1 cada vez que o script" #~ msgid "a shell script is invoked. When an option requires an argument," -#~ msgstr "do shell é chamado. Quando uma opção requer um argumento, `getopts'" +#~ msgstr "" +#~ "do shell é chamado. Quando uma opção requer um argumento, `getopts'" #~ msgid "getopts places that argument into the shell variable OPTARG." #~ msgstr "coloca este argumento dentro da variável do shell OPTARG." #~ msgid "getopts reports errors in one of two ways. If the first character" -#~ msgstr "`getopts' informa os erros de duas maneiras. Se o primeiro caracter de" +#~ msgstr "" +#~ "`getopts' informa os erros de duas maneiras. Se o primeiro caracter de" #~ msgid "of OPTSTRING is a colon, getopts uses silent error reporting. In" #~ msgstr "OPÇÕES for dois pontos, `getopts' usa o modo silencioso. Neste" @@ -6681,19 +7207,24 @@ msgstr "" #~ msgstr "encontrada, `getopts' coloca o caracter da opção em OPTARG. Se um" #~ msgid "required argument is not found, getopts places a ':' into NAME and" -#~ msgstr "argumento requerido não for encontrado, `getopts' coloca ':' em NOME e" +#~ msgstr "" +#~ "argumento requerido não for encontrado, `getopts' coloca ':' em NOME e" #~ msgid "sets OPTARG to the option character found. If getopts is not in" -#~ msgstr "atribui a OPTARG o caracter de opção encontrado. Se `getopts' não está em" +#~ msgstr "" +#~ "atribui a OPTARG o caracter de opção encontrado. Se `getopts' não está em" #~ msgid "silent mode, and an illegal option is seen, getopts places '?' into" -#~ msgstr "modo silencioso, e uma opção ilegal é encontrada, `getopts' coloca '?' em" +#~ msgstr "" +#~ "modo silencioso, e uma opção ilegal é encontrada, `getopts' coloca '?' em" #~ msgid "NAME and unsets OPTARG. If a required option is not found, a '?'" -#~ msgstr "NOME e desativa OPTARG. Se uma opção requerida não é encontrada, uma '?'" +#~ msgstr "" +#~ "NOME e desativa OPTARG. Se uma opção requerida não é encontrada, uma '?'" #~ msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is" -#~ msgstr "é colocada em NOME, OPTARG é desativado, e uma mensagem de diagnóstico é" +#~ msgstr "" +#~ "é colocada em NOME, OPTARG é desativado, e uma mensagem de diagnóstico é" #~ msgid "printed." #~ msgstr "exibida." @@ -6708,16 +7239,19 @@ msgstr "" #~ msgstr "OPTSTRING não seja dois pontos. OPTERR tem o valor 1 por padrão." #~ msgid "Getopts normally parses the positional parameters ($0 - $9), but if" -#~ msgstr "`getopts' normalmente faz a leitura dos parãmetros posicionais ($0 - $9)," +#~ msgstr "" +#~ "`getopts' normalmente faz a leitura dos parãmetros posicionais ($0 - $9)," #~ msgid "more arguments are given, they are parsed instead." #~ msgstr "mas, se mais argumentos forem fornecidos, então estes são lidos." #~ msgid "Exec FILE, replacing this shell with the specified program." -#~ msgstr "Executa ARQUIVO, substituindo esta shell pelo programa especificado." +#~ msgstr "" +#~ "Executa ARQUIVO, substituindo esta shell pelo programa especificado." #~ msgid "If FILE is not specified, the redirections take effect in this" -#~ msgstr "Se ARQUIVO não for especificado, os redirecionamentos são efetivados" +#~ msgstr "" +#~ "Se ARQUIVO não for especificado, os redirecionamentos são efetivados" #~ msgid "shell. If the first argument is `-l', then place a dash in the" #~ msgstr "neste shell. Se o primeiro argumento for `-l', coloca um hífen no" @@ -6735,7 +7269,8 @@ msgstr "" #~ msgstr "Se o arquivo não puder ser executado e o shell não for interativa," #~ msgid "then the shell exits, unless the variable \"no_exit_on_failed_exec\"" -#~ msgstr "então o shell termina, a menos que a variável \"no_exit_on_failed_exec\"" +#~ msgstr "" +#~ "então o shell termina, a menos que a variável \"no_exit_on_failed_exec\"" #~ msgid "is set." #~ msgstr "esteja inicializada." @@ -6743,7 +7278,8 @@ msgstr "" #~ msgid "is that of the last command executed." #~ msgstr "de saída é igual ao do último comando executado." -#~ msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a" +#~ msgid "" +#~ "FIRST and LAST can be numbers specifying the range, or FIRST can be a" #~ msgstr "PRIMEIRO e ÚLTIMO podem ser números especificando o intervalo, ou" #~ msgid "string, which means the most recent command beginning with that" @@ -6752,11 +7288,16 @@ msgstr "" #~ msgid "string." #~ msgstr "mais recente começado por estes caracteres." -#~ msgid " -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR," -#~ msgstr " -e EDITOR seleciona qual editor usar. O padrão é FCEDIT, depois EDITOR," +#~ msgid "" +#~ " -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR," +#~ msgstr "" +#~ " -e EDITOR seleciona qual editor usar. O padrão é FCEDIT, depois " +#~ "EDITOR," -#~ msgid " then the editor which corresponds to the current readline editing" -#~ msgstr " depois o editor correspondente ao modo de edição atual da leitura" +#~ msgid "" +#~ " then the editor which corresponds to the current readline editing" +#~ msgstr "" +#~ " depois o editor correspondente ao modo de edição atual da leitura" #~ msgid " mode, then vi." #~ msgstr " de linha, e depois o vi." @@ -6767,32 +7308,40 @@ msgstr "" #~ msgid " -n means no line numbers listed." #~ msgstr " -n indica para não listar os números das linhas." -#~ msgid " -r means reverse the order of the lines (making it newest listed first)." -#~ msgstr " -r faz reverter a ordem das linhas (a última torna-se a primeira)." +#~ msgid "" +#~ " -r means reverse the order of the lines (making it newest listed " +#~ "first)." +#~ msgstr "" +#~ " -r faz reverter a ordem das linhas (a última torna-se a primeira)." #~ msgid "With the `fc -s [pat=rep ...] [command]' format, the command is" -#~ msgstr "No formato `fc -s [ANTIGO=NOVO ...] [COMANDO]', o comando é executado" +#~ msgstr "" +#~ "No formato `fc -s [ANTIGO=NOVO ...] [COMANDO]', o comando é executado" #~ msgid "re-executed after the substitution OLD=NEW is performed." #~ msgstr "novamente após a substituição de ANTIGO por NOVO ser realizada." #~ msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'" -#~ msgstr "Um alias útil a ser usado é r='fc -s' para que, ao se digitar `r cc'," +#~ msgstr "" +#~ "Um alias útil a ser usado é r='fc -s' para que, ao se digitar `r cc'," #~ msgid "runs the last command beginning with `cc' and typing `r' re-executes" #~ msgstr "seja executado o último comando começado por `cc' e, ao se digitar" #~ msgid "Place JOB_SPEC in the foreground, and make it the current job. If" -#~ msgstr "Colocar JOB-ESPECIFICADO no primeiro plano, e torná-lo o trabalho atual." +#~ msgstr "" +#~ "Colocar JOB-ESPECIFICADO no primeiro plano, e torná-lo o trabalho atual." #~ msgid "JOB_SPEC is not present, the shell's notion of the current job is" -#~ msgstr "Se JOB-ESPECIFICADO não estiver presente, a noção do shell do trabalho" +#~ msgstr "" +#~ "Se JOB-ESPECIFICADO não estiver presente, a noção do shell do trabalho" #~ msgid "used." #~ msgstr "atual é utilizada." #~ msgid "Place JOB_SPEC in the background, as if it had been started with" -#~ msgstr "Colocar JOB-ESPECIFICADO no segundo plano, como se tivesse sido ativado" +#~ msgstr "" +#~ "Colocar JOB-ESPECIFICADO no segundo plano, como se tivesse sido ativado" #~ msgid "`&'. If JOB_SPEC is not present, the shell's notion of the current" #~ msgstr "com `&'. Se JOB-ESPECIFICADO não estiver presente, a noção do shell" @@ -6801,18 +7350,22 @@ msgstr "" #~ msgstr "do trabalho atual é utilizada." #~ msgid "For each NAME, the full pathname of the command is determined and" -#~ msgstr "Para cada NOME, o caminho completo do comando é determinado e lembrado." +#~ msgstr "" +#~ "Para cada NOME, o caminho completo do comando é determinado e lembrado." #~ msgid "remembered. If the -p option is supplied, PATHNAME is used as the" -#~ msgstr "Se a opção -p for fornecida, CAMINHO é utilizado como o caminho completo" +#~ msgstr "" +#~ "Se a opção -p for fornecida, CAMINHO é utilizado como o caminho completo" #~ msgid "full pathname of NAME, and no path search is performed. The -r" #~ msgstr "para NOME, e nenhuma procura de caminho é realizada. A opção -r" #~ msgid "option causes the shell to forget all remembered locations. If no" -#~ msgstr "faz com que a shell esqueça todas as localizações lembradas. Sem nenhum" +#~ msgstr "" +#~ "faz com que a shell esqueça todas as localizações lembradas. Sem nenhum" -#~ msgid "arguments are given, information about remembered commands is displayed." +#~ msgid "" +#~ "arguments are given, information about remembered commands is displayed." #~ msgstr "argumento, as informações sobre os comandos lembrados são exibidas." #~ msgid "Display helpful information about builtin commands. If PATTERN is" @@ -6822,10 +7375,12 @@ msgstr "" #~ msgstr "especificado, fornece ajuda detalhada para todos os comandos que" #~ msgid "otherwise a list of the builtins is printed." -#~ msgstr "correspondem ao PADRÃO, senão a lista dos comandos internos é exibida." +#~ msgstr "" +#~ "correspondem ao PADRÃO, senão a lista dos comandos internos é exibida." #~ msgid "Display the history list with line numbers. Lines listed with" -#~ msgstr "Exibe a lista histórica com os números das linhas. Linhas contendo um" +#~ msgstr "" +#~ "Exibe a lista histórica com os números das linhas. Linhas contendo um" #~ msgid "with a `*' have been modified. Argument of N says to list only" #~ msgstr "`*' foram modificadas. O argumento N faz listar somente as últimas" @@ -6833,14 +7388,19 @@ msgstr "" #~ msgid "the last N lines. The -c option causes the history list to be" #~ msgstr "N linhas. A opção -c faz com que a lista histórica seja apagada" -#~ msgid "cleared by deleting all of the entries. The `-w' option writes out the" -#~ msgstr "removendo todas as entradas. A opção `-w' escreve o histórico atual no" +#~ msgid "" +#~ "cleared by deleting all of the entries. The `-w' option writes out the" +#~ msgstr "" +#~ "removendo todas as entradas. A opção `-w' escreve o histórico atual no" -#~ msgid "current history to the history file; `-r' means to read the file and" -#~ msgstr "arquivo de histórico; A opção `-r' significa ler o arquivo e apensar seu" +#~ msgid "" +#~ "current history to the history file; `-r' means to read the file and" +#~ msgstr "" +#~ "arquivo de histórico; A opção `-r' significa ler o arquivo e apensar seu" #~ msgid "append the contents to the history list instead. `-a' means" -#~ msgstr "conteúdo à lista histórica. A opção `-a' significa apensar as linhas de" +#~ msgstr "" +#~ "conteúdo à lista histórica. A opção `-a' significa apensar as linhas de" #~ msgid "to append history lines from this session to the history file." #~ msgstr "histórico desta sessão ao arquivo de histórico." @@ -6849,82 +7409,113 @@ msgstr "" #~ msgstr "A opção `-n' faz ler todas as linhas de histórico ainda não lidas" #~ msgid "from the history file and append them to the history list. If" -#~ msgstr "do arquivo histórico, e apensá-las à lista de histórico. Se ARQUIVO" +#~ msgstr "" +#~ "do arquivo histórico, e apensá-las à lista de histórico. Se ARQUIVO" #~ msgid "FILENAME is given, then that is used as the history file else" #~ msgstr "for fornecido, então este é usado como arquivo de histórico, senão" #~ msgid "if $HISTFILE has a value, that is used, else ~/.bash_history." -#~ msgstr "se $HISTFILE possui valor, este é usado, senão ~/.bash_history. Se a" +#~ msgstr "" +#~ "se $HISTFILE possui valor, este é usado, senão ~/.bash_history. Se a" #~ msgid "If the -s option is supplied, the non-option ARGs are appended to" -#~ msgstr "opção -s for fornecida, os ARGs, que não forem opções, são apensados à" +#~ msgstr "" +#~ "opção -s for fornecida, os ARGs, que não forem opções, são apensados à" #~ msgid "the history list as a single entry. The -p option means to perform" -#~ msgstr "lista histórica como uma única entrada. A opção -p significa realizar a" +#~ msgstr "" +#~ "lista histórica como uma única entrada. A opção -p significa realizar a" -#~ msgid "history expansion on each ARG and display the result, without storing" -#~ msgstr "expansão da história em cada ARG e exibir o resultado, sem armazenar" +#~ msgid "" +#~ "history expansion on each ARG and display the result, without storing" +#~ msgstr "" +#~ "expansão da história em cada ARG e exibir o resultado, sem armazenar" #~ msgid "anything in the history list." #~ msgstr "nada na lista de histórico." #~ msgid "Lists the active jobs. The -l option lists process id's in addition" -#~ msgstr "Lista os trabalhos ativos. A opção -l lista os ID's dos processos além" +#~ msgstr "" +#~ "Lista os trabalhos ativos. A opção -l lista os ID's dos processos além" #~ msgid "to the normal information; the -p option lists process id's only." -#~ msgstr "das informações usuais; a opção -p lista somente os ID's dos processos." +#~ msgstr "" +#~ "das informações usuais; a opção -p lista somente os ID's dos processos." -#~ msgid "If -n is given, only processes that have changed status since the last" -#~ msgstr "Se -n for fornecido, somente os processos que mudaram de status desde a" +#~ msgid "" +#~ "If -n is given, only processes that have changed status since the last" +#~ msgstr "" +#~ "Se -n for fornecido, somente os processos que mudaram de status desde a" -#~ msgid "notification are printed. JOBSPEC restricts output to that job. The" -#~ msgstr "última notificação são exibidos. JOB-ESPECIFICADO restringe a saída a este" +#~ msgid "" +#~ "notification are printed. JOBSPEC restricts output to that job. The" +#~ msgstr "" +#~ "última notificação são exibidos. JOB-ESPECIFICADO restringe a saída a " +#~ "este" #~ msgid "-r and -s options restrict output to running and stopped jobs only," -#~ msgstr "trabalho. As opções -r e -s restringem a saída apenas aos trabalhos" +#~ msgstr "" +#~ "trabalho. As opções -r e -s restringem a saída apenas aos trabalhos" #~ msgid "respectively. Without options, the status of all active jobs is" -#~ msgstr "executando e parados, respectivamente. Sem opções, o status de todos os" +#~ msgstr "" +#~ "executando e parados, respectivamente. Sem opções, o status de todos os" -#~ msgid "printed. If -x is given, COMMAND is run after all job specifications" -#~ msgstr "trabalhos ativos são exibidos. Se -x for fornecido, COMANDO é executado" +#~ msgid "" +#~ "printed. If -x is given, COMMAND is run after all job specifications" +#~ msgstr "" +#~ "trabalhos ativos são exibidos. Se -x for fornecido, COMANDO é executado" -#~ msgid "that appear in ARGS have been replaced with the process ID of that job's" -#~ msgstr "após todas as especificações de trabalho que aparecem em ARGS terem sido" +#~ msgid "" +#~ "that appear in ARGS have been replaced with the process ID of that job's" +#~ msgstr "" +#~ "após todas as especificações de trabalho que aparecem em ARGS terem sido" #~ msgid "process group leader." #~ msgstr "substituídas pelo ID do processo líder deste grupo de processos." #~ msgid "Removes each JOBSPEC argument from the table of active jobs." -#~ msgstr "Remove cada argumento JOB-ESPECIFICADO da tabela de trabalhos ativos." +#~ msgstr "" +#~ "Remove cada argumento JOB-ESPECIFICADO da tabela de trabalhos ativos." #~ msgid "Send the processes named by PID (or JOB) the signal SIGSPEC. If" -#~ msgstr "Envia ao processo identificado pelo PID (ou JOB) o sinal SIGSPEC. Se" +#~ msgstr "" +#~ "Envia ao processo identificado pelo PID (ou JOB) o sinal SIGSPEC. Se" -#~ msgid "SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l'" -#~ msgstr "SIGSPEC não estiver presente, então SIGTERM é assumido. A opção `-l'" +#~ msgid "" +#~ "SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l'" +#~ msgstr "" +#~ "SIGSPEC não estiver presente, então SIGTERM é assumido. A opção `-l'" #~ msgid "lists the signal names; if arguments follow `-l' they are assumed to" -#~ msgstr "lista os nomes dos sinais; havendo argumentos após `-l', são assumidos" +#~ msgstr "" +#~ "lista os nomes dos sinais; havendo argumentos após `-l', são assumidos" #~ msgid "be signal numbers for which names should be listed. Kill is a shell" -#~ msgstr "como sendo os números dos sinais cujos nomes devem ser exibidos. Kill" +#~ msgstr "" +#~ "como sendo os números dos sinais cujos nomes devem ser exibidos. Kill" #~ msgid "builtin for two reasons: it allows job IDs to be used instead of" -#~ msgstr "é um comando interno por duas razões: permite o uso do ID do trabalho em" +#~ msgstr "" +#~ "é um comando interno por duas razões: permite o uso do ID do trabalho em" #~ msgid "process IDs, and, if you have reached the limit on processes that" -#~ msgstr "vez do ID do processo e, caso tenha sido atingido o limite de processos que" +#~ msgstr "" +#~ "vez do ID do processo e, caso tenha sido atingido o limite de processos " +#~ "que" -#~ msgid "you can create, you don't have to start a process to kill another one." -#~ msgstr "podem ser criados, não é necessário um novo processo para remover outro." +#~ msgid "" +#~ "you can create, you don't have to start a process to kill another one." +#~ msgstr "" +#~ "podem ser criados, não é necessário um novo processo para remover outro." #~ msgid "Each ARG is an arithmetic expression to be evaluated. Evaluation" #~ msgstr "Cada ARG é uma expressão aritmética a ser avaliada. A avaliação é" #~ msgid "is done in long integers with no check for overflow, though division" -#~ msgstr "feita usando inteiros longos sem verificar estouro, embora a divisão" +#~ msgstr "" +#~ "feita usando inteiros longos sem verificar estouro, embora a divisão" #~ msgid "by 0 is trapped and flagged as an error. The following list of" #~ msgstr "por 0 seja capturada e indicada como erro. A lista abaixo está" @@ -6996,7 +7587,8 @@ msgstr "" #~ msgstr "ativo para ser usada em uma expressão." #~ msgid "Operators are evaluated in order of precedence. Sub-expressions in" -#~ msgstr "Os operadores são avaliados em ordem de precedência. Sub-expressões" +#~ msgstr "" +#~ "Os operadores são avaliados em ordem de precedência. Sub-expressões" #~ msgid "parentheses are evaluated first and may override the precedence" #~ msgstr "entre parênteses são avaliadas primeiro e podem prevalecer sobre as" @@ -7013,53 +7605,76 @@ msgstr "" #~ msgid "One line is read from the standard input, and the first word is" #~ msgstr "Uma linha é lida a partir da entrada padrão, e a primeira palavra é" -#~ msgid "assigned to the first NAME, the second word to the second NAME, and so" -#~ msgstr "atribuída ao primeiro NOME, a segunda ao segundo NOME, e assim por diante," +#~ msgid "" +#~ "assigned to the first NAME, the second word to the second NAME, and so" +#~ msgstr "" +#~ "atribuída ao primeiro NOME, a segunda ao segundo NOME, e assim por diante," -#~ msgid "on, with leftover words assigned to the last NAME. Only the characters" -#~ msgstr "com as palavras restantes atribuídas ao último NOME. Somente os caracteres" +#~ msgid "" +#~ "on, with leftover words assigned to the last NAME. Only the characters" +#~ msgstr "" +#~ "com as palavras restantes atribuídas ao último NOME. Somente os " +#~ "caracteres" #~ msgid "found in $IFS are recognized as word delimiters. The return code is" -#~ msgstr "encontrados em $IFS são reconhecidos como delimitadores. O código de retorno" +#~ msgstr "" +#~ "encontrados em $IFS são reconhecidos como delimitadores. O código de " +#~ "retorno" -#~ msgid "zero, unless end-of-file is encountered. If no NAMEs are supplied, the" -#~ msgstr "é zero, a menos que EOF seja encontrado. Se nenhum NOME for fornecido," +#~ msgid "" +#~ "zero, unless end-of-file is encountered. If no NAMEs are supplied, the" +#~ msgstr "" +#~ "é zero, a menos que EOF seja encontrado. Se nenhum NOME for fornecido," -#~ msgid "line read is stored in the REPLY variable. If the -r option is given," -#~ msgstr "a linha lida é armazenada na variável REPLY. Se a opção -r for fornecida," +#~ msgid "" +#~ "line read is stored in the REPLY variable. If the -r option is given," +#~ msgstr "" +#~ "a linha lida é armazenada na variável REPLY. Se a opção -r for fornecida," #~ msgid "this signifies `raw' input, and backslash escaping is disabled. If" -#~ msgstr "significa entrada `textual', desabilitando a interpretação da contrabarra." +#~ msgstr "" +#~ "significa entrada `textual', desabilitando a interpretação da contrabarra." #~ msgid "the `-p' option is supplied, the string supplied as an argument is" -#~ msgstr "Se a opção `-p' for fornecida a MENSAGEM fornecida como argumento é exibida," +#~ msgstr "" +#~ "Se a opção `-p' for fornecida a MENSAGEM fornecida como argumento é " +#~ "exibida," -#~ msgid "output without a trailing newline before attempting to read. If -a is" -#~ msgstr "sem o caracter de nova linha, antes de efetuar a leitura. Se a opção -a" +#~ msgid "" +#~ "output without a trailing newline before attempting to read. If -a is" +#~ msgstr "" +#~ "sem o caracter de nova linha, antes de efetuar a leitura. Se a opção -a" -#~ msgid "supplied, the words read are assigned to sequential indices of ARRAY," -#~ msgstr "for fornecida, as palavras lidas são atribuídas aos índices sequenciais" +#~ msgid "" +#~ "supplied, the words read are assigned to sequential indices of ARRAY," +#~ msgstr "" +#~ "for fornecida, as palavras lidas são atribuídas aos índices sequenciais" #~ msgid "starting at zero. If -e is supplied and the shell is interactive," -#~ msgstr "do ARRAY, começando por zero. Se a opção -e for fornecida, e a shell for" +#~ msgstr "" +#~ "do ARRAY, começando por zero. Se a opção -e for fornecida, e a shell for" #~ msgid "readline is used to obtain the line." #~ msgstr "interativa, `readline' é utilizado para ler a linha." -#~ msgid "Causes a function to exit with the return value specified by N. If N" +#~ msgid "" +#~ "Causes a function to exit with the return value specified by N. If N" #~ msgstr "Faz a função terminar com o valor de retorno especificado por N." #~ msgid "is omitted, the return status is that of the last command." #~ msgstr "Se N for omitido, retorna o status do último comando executado." #~ msgid " -a Mark variables which are modified or created for export." -#~ msgstr " -a Marcar para exportação as variáveis que são criadas ou modificadas." +#~ msgstr "" +#~ " -a Marcar para exportação as variáveis que são criadas ou " +#~ "modificadas." #~ msgid " -b Notify of job termination immediately." #~ msgstr " -b Notificar imediatamente o término do trabalho." #~ msgid " -e Exit immediately if a command exits with a non-zero status." -#~ msgstr " -e Terminar imediatamente se um comando terminar com status != 0." +#~ msgstr "" +#~ " -e Terminar imediatamente se um comando terminar com status != 0." #~ msgid " -f Disable file name generation (globbing)." #~ msgstr " -f Desabilitar a geração de nome de arquivo (metacaracteres)." @@ -7067,14 +7682,16 @@ msgstr "" #~ msgid " -h Remember the location of commands as they are looked up." #~ msgstr " -h Lembrar da localização dos comandos ao procurá-los." -#~ msgid " -i Force the shell to be an \"interactive\" one. Interactive shells" +#~ msgid "" +#~ " -i Force the shell to be an \"interactive\" one. Interactive shells" #~ msgstr " -i Forçar a shell ser do tipo \"interativa\". `Shells'" #~ msgid " always read `~/.bashrc' on startup." #~ msgstr " interativas sempre lêem `~/.bashrc' ao iniciar." #~ msgid " -k All assignment arguments are placed in the environment for a" -#~ msgstr " -k Todos os argumentos de atribuição são colocados no ambiente," +#~ msgstr "" +#~ " -k Todos os argumentos de atribuição são colocados no ambiente," #~ msgid " command, not just those that precede the command name." #~ msgstr " e não somente os que precedem o nome do comando." @@ -7098,7 +7715,8 @@ msgstr "" #~ msgstr " braceexpand o mesmo que -B" #~ msgid " emacs use an emacs-style line editing interface" -#~ msgstr " emacs usar interface de edição de linha estilo emacs" +#~ msgstr "" +#~ " emacs usar interface de edição de linha estilo emacs" #~ msgid " errexit same as -e" #~ msgstr " errexit o mesmo que -e" @@ -7115,8 +7733,10 @@ msgstr "" #~ msgid " interactive-comments" #~ msgstr " interactive-comments" -#~ msgid " allow comments to appear in interactive commands" -#~ msgstr " permite comentários em comandos interativos" +#~ msgid "" +#~ " allow comments to appear in interactive commands" +#~ msgstr "" +#~ " permite comentários em comandos interativos" #~ msgid " keyword same as -k" #~ msgstr " keyword o mesmo que -k" @@ -7145,11 +7765,15 @@ msgstr "" #~ msgid " physical same as -P" #~ msgstr " physical o mesmo que -P" -#~ msgid " posix change the behavior of bash where the default" -#~ msgstr " posix mudar o comportamento do `bash' onde o padrão" +#~ msgid "" +#~ " posix change the behavior of bash where the default" +#~ msgstr "" +#~ " posix mudar o comportamento do `bash' onde o padrão" -#~ msgid " operation differs from the 1003.2 standard to" -#~ msgstr " for diferente do padrão 1003.2, para tornar" +#~ msgid "" +#~ " operation differs from the 1003.2 standard to" +#~ msgstr "" +#~ " for diferente do padrão 1003.2, para tornar" #~ msgid " match the standard" #~ msgstr " igual ao padrão" @@ -7161,19 +7785,26 @@ msgstr "" #~ msgstr " verbose o mesmo que -v" #~ msgid " vi use a vi-style line editing interface" -#~ msgstr " vi usar interface de edição de linha estilo vi" +#~ msgstr "" +#~ " vi usar interface de edição de linha estilo vi" #~ msgid " xtrace same as -x" #~ msgstr " xtrace o mesmo que -x" -#~ msgid " -p Turned on whenever the real and effective user ids do not match." -#~ msgstr " -p Habilitado sempre que o usuário real e efetivo forem diferentes." +#~ msgid "" +#~ " -p Turned on whenever the real and effective user ids do not match." +#~ msgstr "" +#~ " -p Habilitado sempre que o usuário real e efetivo forem diferentes." #~ msgid " Disables processing of the $ENV file and importing of shell" -#~ msgstr " Desabilita o processamento do arquivo $ENV e importação das funções" +#~ msgstr "" +#~ " Desabilita o processamento do arquivo $ENV e importação das " +#~ "funções" -#~ msgid " functions. Turning this option off causes the effective uid and" -#~ msgstr " da shell. Desabilitando esta opção faz com que o `uid' e `gid'" +#~ msgid "" +#~ " functions. Turning this option off causes the effective uid and" +#~ msgstr "" +#~ " da shell. Desabilitando esta opção faz com que o `uid' e `gid'" #~ msgid " gid to be set to the real uid and gid." #~ msgstr " efetivos sejam feitos o mesmo que o `uid' e `gid' reais." @@ -7182,7 +7813,8 @@ msgstr "" #~ msgstr " -t Sair após ler e executar um comando." #~ msgid " -u Treat unset variables as an error when substituting." -#~ msgstr " -u Tratar como erro as variáveis não inicializadas na substituição." +#~ msgstr "" +#~ " -u Tratar como erro as variáveis não inicializadas na substituição." #~ msgid " -v Print shell input lines as they are read." #~ msgstr " -v Exibir as linhas de entrada da shell ao lê-las." @@ -7215,10 +7847,13 @@ msgstr "" #~ msgstr "Usando + em vez de - faz com que as opções sejam desabilitadas. As" #~ msgid "flags can also be used upon invocation of the shell. The current" -#~ msgstr "opções também podem ser usadas na chamada da shell. O conjunto atual" +#~ msgstr "" +#~ "opções também podem ser usadas na chamada da shell. O conjunto atual" -#~ msgid "set of flags may be found in $-. The remaining n ARGs are positional" -#~ msgstr "de opções pode ser encontrado em $-. Os n ARGs restantes são parâmetros" +#~ msgid "" +#~ "set of flags may be found in $-. The remaining n ARGs are positional" +#~ msgstr "" +#~ "de opções pode ser encontrado em $-. Os n ARGs restantes são parâmetros" #~ msgid "parameters and are assigned, in order, to $1, $2, .. $n. If no" #~ msgstr "posicionais e são atribuídos, em ordem, a $1, $2, .. $n. Se nenhum" @@ -7227,10 +7862,12 @@ msgstr "" #~ msgstr "ARG for fornecido, todas as variáveis da shell são exibidas." #~ msgid "For each NAME, remove the corresponding variable or function. Given" -#~ msgstr "Para cada NOME, remove a variável ou a função correspondente. Usando-se a" +#~ msgstr "" +#~ "Para cada NOME, remove a variável ou a função correspondente. Usando-se a" #~ msgid "the `-v', unset will only act on variables. Given the `-f' flag," -#~ msgstr "opção `-v', `unset' atua somente nas variáveis. Usando-se a opção `-f'" +#~ msgstr "" +#~ "opção `-v', `unset' atua somente nas variáveis. Usando-se a opção `-f'" #~ msgid "unset will only act on functions. With neither flag, unset first" #~ msgstr "`unset' atua somente nas funções. Sem nenhuma opção, inicialmente" @@ -7238,26 +7875,32 @@ msgstr "" #~ msgid "tries to unset a variable, and if that fails, then tries to unset a" #~ msgstr "`unset' tenta remover uma variável e, se falhar, tenta remover uma" -#~ msgid "function. Some variables (such as PATH and IFS) cannot be unset; also" -#~ msgstr "função. Algumas variáveis (como PATH e IFS) não podem ser removidas." +#~ msgid "" +#~ "function. Some variables (such as PATH and IFS) cannot be unset; also" +#~ msgstr "" +#~ "função. Algumas variáveis (como PATH e IFS) não podem ser removidas." #~ msgid "see readonly." #~ msgstr "Veja também o comando `readonly'." #~ msgid "NAMEs are marked for automatic export to the environment of" -#~ msgstr "NOMEs são marcados para serem automaticamente exportados para o ambiente" +#~ msgstr "" +#~ "NOMEs são marcados para serem automaticamente exportados para o ambiente" #~ msgid "subsequently executed commands. If the -f option is given," #~ msgstr "dos comando executados a seguir. Se a opção -f for fornecida," #~ msgid "the NAMEs refer to functions. If no NAMEs are given, or if `-p'" -#~ msgstr "os NOMEs se referem a funções. Se nenhum nome for fornecido, ou se `-p'" +#~ msgstr "" +#~ "os NOMEs se referem a funções. Se nenhum nome for fornecido, ou se `-p'" #~ msgid "is given, a list of all names that are exported in this shell is" -#~ msgstr "for usado, uma lista com todos os nomes que são exportados nesta shell é" +#~ msgstr "" +#~ "for usado, uma lista com todos os nomes que são exportados nesta shell é" #~ msgid "printed. An argument of `-n' says to remove the export property" -#~ msgstr "exibida. O argumento `-n' faz remover a propriedade de exportação dos" +#~ msgstr "" +#~ "exibida. O argumento `-n' faz remover a propriedade de exportação dos" #~ msgid "from subsequent NAMEs. An argument of `--' disables further option" #~ msgstr "NOMEs subsequentes. O argumento `--' desabilita o processamento de" @@ -7265,29 +7908,40 @@ msgstr "" #~ msgid "processing." #~ msgstr "opções posteriores." -#~ msgid "The given NAMEs are marked readonly and the values of these NAMEs may" -#~ msgstr "Os NOMEs são marcados como somente para leitura, e os valores destes" +#~ msgid "" +#~ "The given NAMEs are marked readonly and the values of these NAMEs may" +#~ msgstr "" +#~ "Os NOMEs são marcados como somente para leitura, e os valores destes" #~ msgid "not be changed by subsequent assignment. If the -f option is given," -#~ msgstr "NOMEs não poderão ser alterados por novas atribuições. Se a opção -f for" +#~ msgstr "" +#~ "NOMEs não poderão ser alterados por novas atribuições. Se a opção -f for" #~ msgid "then functions corresponding to the NAMEs are so marked. If no" -#~ msgstr "fornecida, as funções correspondentes a NOMEs também são marcadas. Sem" +#~ msgstr "" +#~ "fornecida, as funções correspondentes a NOMEs também são marcadas. Sem" -#~ msgid "arguments are given, or if `-p' is given, a list of all readonly names" -#~ msgstr "nenhum argumento, ou se `-p' for usado, uma lista com todos os nomes" +#~ msgid "" +#~ "arguments are given, or if `-p' is given, a list of all readonly names" +#~ msgstr "" +#~ "nenhum argumento, ou se `-p' for usado, uma lista com todos os nomes" -#~ msgid "is printed. An argument of `-n' says to remove the readonly property" -#~ msgstr "somente para leitura é exibida. O argumento `-n' remove a propriedade" +#~ msgid "" +#~ "is printed. An argument of `-n' says to remove the readonly property" +#~ msgstr "" +#~ "somente para leitura é exibida. O argumento `-n' remove a propriedade" #~ msgid "from subsequent NAMEs. The `-a' option means to treat each NAME as" #~ msgstr "somente para leitura. A opção `-a' faz tratar cada NOME como uma" #~ msgid "an array variable. An argument of `--' disables further option" -#~ msgstr "variável tipo array. Um argumento `--' desabilita o processamento de" +#~ msgstr "" +#~ "variável tipo array. Um argumento `--' desabilita o processamento de" -#~ msgid "The positional parameters from $N+1 ... are renamed to $1 ... If N is" -#~ msgstr "Os parâmetros posicionais a partir de $N+1 ... são deslocados para $1 ..." +#~ msgid "" +#~ "The positional parameters from $N+1 ... are renamed to $1 ... If N is" +#~ msgstr "" +#~ "Os parâmetros posicionais a partir de $N+1 ... são deslocados para $1 ..." #~ msgid "not given, it is assumed to be 1." #~ msgstr "Se N não for especificado, o valor 1 é assumido ($2 vira $1 ...)." @@ -7299,25 +7953,31 @@ msgstr "" #~ msgstr "$PATH são usados para encontrar o diretório contendo o ARQUIVO." #~ msgid "Suspend the execution of this shell until it receives a SIGCONT" -#~ msgstr "Suspender a execução desta shell até que o sinal SIGCONT seja recebido." +#~ msgstr "" +#~ "Suspender a execução desta shell até que o sinal SIGCONT seja recebido." #~ msgid "signal. The `-f' if specified says not to complain about this" #~ msgstr "Se a opção `-f' for especificada indica para não reclamar sobre ser" #~ msgid "being a login shell if it is; just suspend anyway." -#~ msgstr "uma `shell de login', caso seja; simplesmente suspender de qualquer forma." +#~ msgstr "" +#~ "uma `shell de login', caso seja; simplesmente suspender de qualquer forma." #~ msgid "Exits with a status of 0 (trueness) or 1 (falseness) depending on" -#~ msgstr "Termina com status 0 (verdadeiro) ou 1 (falso) conforme EXPR for avaliada." +#~ msgstr "" +#~ "Termina com status 0 (verdadeiro) ou 1 (falso) conforme EXPR for avaliada." #~ msgid "the evaluation of EXPR. Expressions may be unary or binary. Unary" -#~ msgstr "As expressões podem ser unárias ou binárias. As expressões unárias são" +#~ msgstr "" +#~ "As expressões podem ser unárias ou binárias. As expressões unárias são" #~ msgid "expressions are often used to examine the status of a file. There" -#~ msgstr "muito usadas para examinar o status de um arquivo. Existem, também," +#~ msgstr "" +#~ "muito usadas para examinar o status de um arquivo. Existem, também," #~ msgid "are string operators as well, and numeric comparison operators." -#~ msgstr "operadores para cadeias de caracteres (strings) e comparações numéricas." +#~ msgstr "" +#~ "operadores para cadeias de caracteres (strings) e comparações numéricas." #~ msgid "File operators:" #~ msgstr "Operadores para arquivos:" @@ -7326,7 +7986,8 @@ msgstr "" #~ msgstr " -b ARQUIVO Verdade se o arquivo for do tipo especial de bloco." #~ msgid " -c FILE True if file is character special." -#~ msgstr " -c ARQUIVO Verdade se o arquivo for do tipo especial de caracter." +#~ msgstr "" +#~ " -c ARQUIVO Verdade se o arquivo for do tipo especial de caracter." #~ msgid " -d FILE True if file is a directory." #~ msgstr " -d ARQUIVO Verdade se o arquivo for um diretório." @@ -7338,10 +7999,12 @@ msgstr "" #~ msgstr " -f ARQUIVO Verdade se o arquivo existir e for do tipo regular." #~ msgid " -g FILE True if file is set-group-id." -#~ msgstr " -g ARQUIVO Verdade se o arquivo tiver o bit \"set-group-id\" ativo." +#~ msgstr "" +#~ " -g ARQUIVO Verdade se o arquivo tiver o bit \"set-group-id\" ativo." #~ msgid " -h FILE True if file is a symbolic link. Use \"-L\"." -#~ msgstr " -h ARQUIVO Verdade se arquivo for um vínculo simbólico. Usar \"-L\"." +#~ msgstr "" +#~ " -h ARQUIVO Verdade se arquivo for um vínculo simbólico. Usar \"-L\"." #~ msgid " -L FILE True if file is a symbolic link." #~ msgstr " -L ARQUIVO Verdade se o arquivo for um vínculo simbólico." @@ -7353,7 +8016,8 @@ msgstr "" #~ msgstr " -p ARQUIVO Verdade se o arquivo for um `named pipe'." #~ msgid " -r FILE True if file is readable by you." -#~ msgstr " -r ARQUIVO Verdade se você tiver autorização para ler o arquivo." +#~ msgstr "" +#~ " -r ARQUIVO Verdade se você tiver autorização para ler o arquivo." #~ msgid " -s FILE True if file exists and is not empty." #~ msgstr " -s ARQUIVO Verdade se o arquivo existir e não estiver vazio." @@ -7367,19 +8031,26 @@ msgstr "" #~ " em um terminal." #~ msgid " -u FILE True if the file is set-user-id." -#~ msgstr " -u ARQUIVO Verdade se o arquivo tiver o bit \"set-user-id\" ativo." +#~ msgstr "" +#~ " -u ARQUIVO Verdade se o arquivo tiver o bit \"set-user-id\" ativo." #~ msgid " -w FILE True if the file is writable by you." -#~ msgstr " -w ARQUIVO Verdade se você tiver autorização para escrever no arquivo." +#~ msgstr "" +#~ " -w ARQUIVO Verdade se você tiver autorização para escrever no " +#~ "arquivo." #~ msgid " -x FILE True if the file is executable by you." -#~ msgstr " -x ARQUIVO Verdade se você tiver autorização para executar o arquivo." +#~ msgstr "" +#~ " -x ARQUIVO Verdade se você tiver autorização para executar o arquivo." #~ msgid " -O FILE True if the file is effectively owned by you." -#~ msgstr " -O ARQUIVO Verdade se o arquivo pertencer ao seu usuário efetivo." +#~ msgstr "" +#~ " -O ARQUIVO Verdade se o arquivo pertencer ao seu usuário efetivo." -#~ msgid " -G FILE True if the file is effectively owned by your group." -#~ msgstr " -G ARQUIVO Verdade se o arquivo pertencer ao seu grupo efetivo." +#~ msgid "" +#~ " -G FILE True if the file is effectively owned by your group." +#~ msgstr "" +#~ " -G ARQUIVO Verdade se o arquivo pertencer ao seu grupo efetivo." #~ msgid " FILE1 -nt FILE2 True if file1 is newer than (according to" #~ msgstr " ARQ1 -nt ARQ2 Verdade se ARQ1 for mais novo (conforme a data" @@ -7422,14 +8093,18 @@ msgstr "" #~ msgid " STRING1 < STRING2" #~ msgstr " STRING1 < STRING2" -#~ msgid " True if STRING1 sorts before STRING2 lexicographically" -#~ msgstr " Verdade se STRING1 tiver ordenação anterior à STRING2." +#~ msgid "" +#~ " True if STRING1 sorts before STRING2 lexicographically" +#~ msgstr "" +#~ " Verdade se STRING1 tiver ordenação anterior à STRING2." #~ msgid " STRING1 > STRING2" #~ msgstr " STRING1 > STRING2" -#~ msgid " True if STRING1 sorts after STRING2 lexicographically" -#~ msgstr " Verdade se STRING1 tiver ordenação posterior à STRING2." +#~ msgid "" +#~ " True if STRING1 sorts after STRING2 lexicographically" +#~ msgstr "" +#~ " Verdade se STRING1 tiver ordenação posterior à STRING2." #~ msgid "Other operators:" #~ msgstr "Outros operadores:" @@ -7450,9 +8125,11 @@ msgstr "" #~ msgstr " -lt, -le, -gt, ou -ge." #~ msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal," -#~ msgstr "Operadores aritméticos binários retornam verdadeiro se ARG1 for igual," +#~ msgstr "" +#~ "Operadores aritméticos binários retornam verdadeiro se ARG1 for igual," -#~ msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal" +#~ msgid "" +#~ "less-than, less-than-or-equal, greater-than, or greater-than-or-equal" #~ msgstr "diferente, menor, menor ou igual, maior, ou maior ou igual do que" #~ msgid "than ARG2." @@ -7465,46 +8142,60 @@ msgstr "" #~ msgstr "argumento deve ser o literal `]', para fechar o `[' de abertura." #~ msgid "Print the accumulated user and system times for processes run from" -#~ msgstr "Exibe os tempos acumulados do usuário e do sistema para os processos" +#~ msgstr "" +#~ "Exibe os tempos acumulados do usuário e do sistema para os processos" #~ msgid "the shell." #~ msgstr "executados por esta shell." #~ msgid "The command ARG is to be read and executed when the shell receives" -#~ msgstr "O comando em ARG é para ser lido e executado quando a shell receber o(s)" +#~ msgstr "" +#~ "O comando em ARG é para ser lido e executado quando a shell receber o(s)" #~ msgid "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" -#~ msgstr "sinal(is) SINAL-ESPEC. Se ARG for omitido, todos os sinais especificados" +#~ msgstr "" +#~ "sinal(is) SINAL-ESPEC. Se ARG for omitido, todos os sinais especificados" #~ msgid "reset to their original values. If ARG is the null string each" -#~ msgstr "retornam aos seus valores originais. Se ARG for uma string nula, cada" +#~ msgstr "" +#~ "retornam aos seus valores originais. Se ARG for uma string nula, cada" #~ msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." -#~ msgstr "SINAL-ESPEC é ignorado pela shell e pelos comandos chamados por ela." +#~ msgstr "" +#~ "SINAL-ESPEC é ignorado pela shell e pelos comandos chamados por ela." #~ msgid "If SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" -#~ msgstr "Se SINAL-ESPEC for EXIT (0) o comando em ARG é executado na saída da" +#~ msgstr "" +#~ "Se SINAL-ESPEC for EXIT (0) o comando em ARG é executado na saída da" #~ msgid "the shell. If SIGNAL_SPEC is DEBUG, ARG is executed after every" -#~ msgstr "shell. Se SINAL-ESPEC for DEBUG, o comando em ARG é executado após cada" +#~ msgstr "" +#~ "shell. Se SINAL-ESPEC for DEBUG, o comando em ARG é executado após cada" #~ msgid "command. If ARG is `-p' then the trap commands associated with" -#~ msgstr "comando. Se ARG for `-p' então os comandos de captura associados com cada" +#~ msgstr "" +#~ "comando. Se ARG for `-p' então os comandos de captura associados com cada" #~ msgid "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" #~ msgstr "SINAL-ESPEC são exibidos. Se nenhum argumento for fornecido, ou se" #~ msgid "only `-p' is given, trap prints the list of commands associated with" -#~ msgstr "somente `-p' for fornecido, é exibida a lista dos comandos associados" +#~ msgstr "" +#~ "somente `-p' for fornecido, é exibida a lista dos comandos associados" -#~ msgid "each signal number. SIGNAL_SPEC is either a signal name in <signal.h>" -#~ msgstr "com cada número de sinal. SINAL-ESPEC é um nome de sinal em <signal.h> ou" +#~ msgid "" +#~ "each signal number. SIGNAL_SPEC is either a signal name in <signal.h>" +#~ msgstr "" +#~ "com cada número de sinal. SINAL-ESPEC é um nome de sinal em <signal.h> ou" -#~ msgid "or a signal number. `trap -l' prints a list of signal names and their" -#~ msgstr "um número de sinal. `trap -l' exibe a lista de nomes de sinais com seus" +#~ msgid "" +#~ "or a signal number. `trap -l' prints a list of signal names and their" +#~ msgstr "" +#~ "um número de sinal. `trap -l' exibe a lista de nomes de sinais com seus" #~ msgid "corresponding numbers. Note that a signal can be sent to the shell" -#~ msgstr "números correspondentes. Note que o sinal pode ser enviado para a shell" +#~ msgstr "" +#~ "números correspondentes. Note que o sinal pode ser enviado para a shell" #~ msgid "with \"kill -signal $$\"." #~ msgstr "através do comando \"kill -SINAL $$\"." @@ -7513,13 +8204,19 @@ msgstr "" #~ msgstr "Para cada NOME, indica como este deve ser interpretado caso seja" #~ msgid "If the -t option is used, returns a single word which is one of" -#~ msgstr "Se a opção -t for fornecida, `type' retorna uma única palavra dentre" +#~ msgstr "" +#~ "Se a opção -t for fornecida, `type' retorna uma única palavra dentre" -#~ msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an" -#~ msgstr "`alias', `keyword', `function', `builtin', `file' ou `', se NOME for um" +#~ msgid "" +#~ "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an" +#~ msgstr "" +#~ "`alias', `keyword', `function', `builtin', `file' ou `', se NOME for um" -#~ msgid "alias, shell reserved word, shell function, shell builtin, disk file," -#~ msgstr "alias, uma palavra reservada, função ou comando interno da shell, um arquivo" +#~ msgid "" +#~ "alias, shell reserved word, shell function, shell builtin, disk file," +#~ msgstr "" +#~ "alias, uma palavra reservada, função ou comando interno da shell, um " +#~ "arquivo" #~ msgid "or unfound, respectively." #~ msgstr "em disco, ou não for encontrado, respectivamente." @@ -7533,8 +8230,10 @@ msgstr "" #~ msgid "If the -a flag is used, displays all of the places that contain an" #~ msgstr "Se a opção -a for fornecida, exibe todos os locais que contém um" -#~ msgid "executable named `file'. This includes aliases and functions, if and" -#~ msgstr "arquivo executável chamado `ARQUIVO', incluindo os aliases e funções," +#~ msgid "" +#~ "executable named `file'. This includes aliases and functions, if and" +#~ msgstr "" +#~ "arquivo executável chamado `ARQUIVO', incluindo os aliases e funções," #~ msgid "only if the -p flag is not also used." #~ msgstr "mas somente se a opção -p não for fornecida conjuntamente." @@ -7546,10 +8245,12 @@ msgstr "" #~ msgstr "-a, -p, and -t, respectivamente." #~ msgid "Ulimit provides control over the resources available to processes" -#~ msgstr "Ulimit estabelece controle sobre os recursos disponíveis para os processos" +#~ msgstr "" +#~ "Ulimit estabelece controle sobre os recursos disponíveis para os processos" #~ msgid "started by the shell, on systems that allow such control. If an" -#~ msgstr "iniciados por esta shell, em sistemas que permitem estes controles. Se uma" +#~ msgstr "" +#~ "iniciados por esta shell, em sistemas que permitem estes controles. Se uma" #~ msgid "option is given, it is interpreted as follows:" #~ msgstr "opção for fornecida, é interpretada como mostrado a seguir:" @@ -7564,13 +8265,15 @@ msgstr "" #~ msgstr " -a\ttodos os limites correntes são informados" #~ msgid " -c\tthe maximum size of core files created" -#~ msgstr " -c\to tamanho máximo para os arquivos de imagem do núcleo criados" +#~ msgstr "" +#~ " -c\to tamanho máximo para os arquivos de imagem do núcleo criados" #~ msgid " -d\tthe maximum size of a process's data segment" #~ msgstr " -d\to tamanho máximo do segmento de dados de um processo" #~ msgid " -m\tthe maximum resident set size" -#~ msgstr " -m\to tamanho máximo do conjunto de processos residentes em memória" +#~ msgstr "" +#~ " -m\to tamanho máximo do conjunto de processos residentes em memória" #~ msgid " -s\tthe maximum stack size" #~ msgstr " -s\to tamanho máximo da pilha" @@ -7594,13 +8297,15 @@ msgstr "" #~ msgstr " -v\to tamanho da memória virtual" #~ msgid "If LIMIT is given, it is the new value of the specified resource." -#~ msgstr "Se LIMITE for fornecido, torna-se o novo valor do recurso especificado." +#~ msgstr "" +#~ "Se LIMITE for fornecido, torna-se o novo valor do recurso especificado." #~ msgid "Otherwise, the current value of the specified resource is printed." #~ msgstr "Senão, o valor atual do recurso especificado é exibido." #~ msgid "If no option is given, then -f is assumed. Values are in 1k" -#~ msgstr "Se nenhuma opção for fornecida, então -f é assumido. Os valores são em" +#~ msgstr "" +#~ "Se nenhuma opção for fornecida, então -f é assumido. Os valores são em" #~ msgid "increments, except for -t, which is in seconds, -p, which is in" #~ msgstr "incrementos de 1k, exceto para -t, que é em segundos, -p, que é em" @@ -7611,77 +8316,101 @@ msgstr "" #~ msgid "processes." #~ msgstr "processos." -#~ msgid "The user file-creation mask is set to MODE. If MODE is omitted, or if" -#~ msgstr "MODO é atribuído à máscara de criação de arquivos do usuário. Se omitido," +#~ msgid "" +#~ "The user file-creation mask is set to MODE. If MODE is omitted, or if" +#~ msgstr "" +#~ "MODO é atribuído à máscara de criação de arquivos do usuário. Se omitido," -#~ msgid "`-S' is supplied, the current value of the mask is printed. The `-S'" -#~ msgstr "ou se `-S' for especificado, a máscara em uso é exibida. A opção `-S'" +#~ msgid "" +#~ "`-S' is supplied, the current value of the mask is printed. The `-S'" +#~ msgstr "" +#~ "ou se `-S' for especificado, a máscara em uso é exibida. A opção `-S'" -#~ msgid "option makes the output symbolic; otherwise an octal number is output." +#~ msgid "" +#~ "option makes the output symbolic; otherwise an octal number is output." #~ msgstr "exibe símbolos na saída; sem esta opção um número octal é exibido." #~ msgid "If MODE begins with a digit, it is interpreted as an octal number," -#~ msgstr "Se MODO começar por um dígito, é interpretado como sendo um número octal," +#~ msgstr "" +#~ "Se MODO começar por um dígito, é interpretado como sendo um número octal," -#~ msgid "otherwise it is a symbolic mode string like that accepted by chmod(1)." -#~ msgstr "senão devem ser caracteres simbólicos, como os aceitos por chmod(1)." +#~ msgid "" +#~ "otherwise it is a symbolic mode string like that accepted by chmod(1)." +#~ msgstr "" +#~ "senão devem ser caracteres simbólicos, como os aceitos por chmod(1)." -#~ msgid "Wait for the specified process and report its termination status. If" -#~ msgstr "Aguardar pelo processo especificado e informar seu status de término. Se N" +#~ msgid "" +#~ "Wait for the specified process and report its termination status. If" +#~ msgstr "" +#~ "Aguardar pelo processo especificado e informar seu status de término. Se N" #~ msgid "N is not given, all currently active child processes are waited for," -#~ msgstr "não for especificado, todos os processos filhos ativos são aguardados," +#~ msgstr "" +#~ "não for especificado, todos os processos filhos ativos são aguardados," #~ msgid "and the return code is zero. N may be a process ID or a job" #~ msgstr "e o código de retorno é zero. N pode ser o ID de um processo ou a" #~ msgid "specification; if a job spec is given, all processes in the job's" -#~ msgstr "especificação de um trabalho; Se for a especificação de um trabalho, todos" +#~ msgstr "" +#~ "especificação de um trabalho; Se for a especificação de um trabalho, todos" #~ msgid "pipeline are waited for." #~ msgstr "os processos presentes no `pipeline' do trabalho são aguardados." #~ msgid "and the return code is zero. N is a process ID; if it is not given," -#~ msgstr "e o código de retorno é zero. N é o ID de um processo; se N não for" +#~ msgstr "" +#~ "e o código de retorno é zero. N é o ID de um processo; se N não for" #~ msgid "all child processes of the shell are waited for." #~ msgstr "especificado, todos os processos filhos da shell são aguardados." #~ msgid "The `for' loop executes a sequence of commands for each member in a" -#~ msgstr "O laço `for' executa a sequência de comandos para cada membro na lista de" +#~ msgstr "" +#~ "O laço `for' executa a sequência de comandos para cada membro na lista de" -#~ msgid "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is" -#~ msgstr "items. Se `in PALAVRAS ...;' não estiver presente, então `in \"$@\"'" +#~ msgid "" +#~ "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is" +#~ msgstr "" +#~ "items. Se `in PALAVRAS ...;' não estiver presente, então `in \"$@\"'" -#~ msgid "assumed. For each element in WORDS, NAME is set to that element, and" -#~ msgstr "(parâmetros posicionais) é assumido. Para cada elemento em PALAVRAS, NOME" +#~ msgid "" +#~ "assumed. For each element in WORDS, NAME is set to that element, and" +#~ msgstr "" +#~ "(parâmetros posicionais) é assumido. Para cada elemento em PALAVRAS, NOME" #~ msgid "the COMMANDS are executed." #~ msgstr "assume seu valor, e os COMANDOS são executados." #~ msgid "The WORDS are expanded, generating a list of words. The" -#~ msgstr "As palavras são expandidas, gerando uma lista de palavras. O conjunto" +#~ msgstr "" +#~ "As palavras são expandidas, gerando uma lista de palavras. O conjunto" #~ msgid "set of expanded words is printed on the standard error, each" -#~ msgstr "de palavras expandidas é enviado para a saída de erro padrão, cada uma" +#~ msgstr "" +#~ "de palavras expandidas é enviado para a saída de erro padrão, cada uma" #~ msgid "preceded by a number. If `in WORDS' is not present, `in \"$@\"'" -#~ msgstr "precedida por um número. Se `in PALAVRAS' for omitido, `in \"$@\"' é" +#~ msgstr "" +#~ "precedida por um número. Se `in PALAVRAS' for omitido, `in \"$@\"' é" #~ msgid "is assumed. The PS3 prompt is then displayed and a line read" #~ msgstr "assumido. Em seguida o prompt PS3 é exibido, e uma linha é lida da" #~ msgid "from the standard input. If the line consists of the number" -#~ msgstr "entrada padrão. Se a linha consistir do número correspondente ao número" +#~ msgstr "" +#~ "entrada padrão. Se a linha consistir do número correspondente ao número" #~ msgid "corresponding to one of the displayed words, then NAME is set" #~ msgstr "de uma das palavras exibidas, então NOME é atribuído para esta" #~ msgid "to that word. If the line is empty, WORDS and the prompt are" -#~ msgstr "PALAVRA. Se a linha estiver vazia, PALAVRAS e o prompt são exibidos" +#~ msgstr "" +#~ "PALAVRA. Se a linha estiver vazia, PALAVRAS e o prompt são exibidos" #~ msgid "redisplayed. If EOF is read, the command completes. Any other" -#~ msgstr "novamente. Se EOF for lido, o comando termina. Qualquer outro valor" +#~ msgstr "" +#~ "novamente. Se EOF for lido, o comando termina. Qualquer outro valor" #~ msgid "value read causes NAME to be set to null. The line read is saved" #~ msgstr "lido faz com que NOME seja tornado nulo. A linha lida é salva" @@ -7693,28 +8422,42 @@ msgstr "" #~ msgstr "até que o comando `break' ou `return' seja executado." #~ msgid "Selectively execute COMMANDS based upon WORD matching PATTERN. The" -#~ msgstr "Executar seletivamente COMANDOS tomando por base a correspondência entre" +#~ msgstr "" +#~ "Executar seletivamente COMANDOS tomando por base a correspondência entre" #~ msgid "`|' is used to separate multiple patterns." -#~ msgstr "PALAVRA e PADRÃO. O caracter `|' é usado para separar múltiplos padrões." +#~ msgstr "" +#~ "PALAVRA e PADRÃO. O caracter `|' é usado para separar múltiplos padrões." -#~ msgid "The if COMMANDS are executed. If the exit status is zero, then the then" -#~ msgstr "Os COMANDOS `if' são executados. Se os status de saída for zero, então os" +#~ msgid "" +#~ "The if COMMANDS are executed. If the exit status is zero, then the then" +#~ msgstr "" +#~ "Os COMANDOS `if' são executados. Se os status de saída for zero, então os" -#~ msgid "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" -#~ msgstr "COMANDOS `then' são executados, senão, os COMANDOS `elif' são executados em" +#~ msgid "" +#~ "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" +#~ msgstr "" +#~ "COMANDOS `then' são executados, senão, os COMANDOS `elif' são executados " +#~ "em" -#~ msgid "in turn, and if the exit status is zero, the corresponding then COMMANDS" -#~ msgstr "sequência e, se o status de saída for zero, os COMANDOS `then' associados" +#~ msgid "" +#~ "in turn, and if the exit status is zero, the corresponding then COMMANDS" +#~ msgstr "" +#~ "sequência e, se o status de saída for zero, os COMANDOS `then' associados" -#~ msgid "are executed and the if command completes. Otherwise, the else COMMANDS" -#~ msgstr "são executados e o `if' termina. Senão, os COMANDOS da cláusula `else'" +#~ msgid "" +#~ "are executed and the if command completes. Otherwise, the else COMMANDS" +#~ msgstr "" +#~ "são executados e o `if' termina. Senão, os COMANDOS da cláusula `else'" -#~ msgid "are executed, if present. The exit status is the exit status of the last" -#~ msgstr "são executados, se houver. O status de saída é o status de saída do" +#~ msgid "" +#~ "are executed, if present. The exit status is the exit status of the last" +#~ msgstr "" +#~ "são executados, se houver. O status de saída é o status de saída do" #~ msgid "command executed, or zero if no condition tested true." -#~ msgstr "último comando executado, ou zero, se nenhuma condição for verdadeira." +#~ msgstr "" +#~ "último comando executado, ou zero, se nenhuma condição for verdadeira." #~ msgid "Expand and execute COMMANDS as long as the final command in the" #~ msgstr "Expande e executa COMANDOS enquanto o comando final nos" @@ -7741,16 +8484,22 @@ msgstr "" #~ msgstr "redirecionar todo um conjunto de comandos." #~ msgid "This is similar to the `fg' command. Resume a stopped or background" -#~ msgstr "Semelhante ao comando `fg'. Prossegue a execução de um trabalho parado ou" +#~ msgstr "" +#~ "Semelhante ao comando `fg'. Prossegue a execução de um trabalho parado ou" #~ msgid "job. If you specifiy DIGITS, then that job is used. If you specify" -#~ msgstr "em segundo plano. Se DÍGITOS for especificado, então este trabalho é usado." +#~ msgstr "" +#~ "em segundo plano. Se DÍGITOS for especificado, então este trabalho é " +#~ "usado." -#~ msgid "WORD, then the job whose name begins with WORD is used. Following the" -#~ msgstr "Se for especificado PALAVRA, o trabalho começado por PALAVRA é usado." +#~ msgid "" +#~ "WORD, then the job whose name begins with WORD is used. Following the" +#~ msgstr "" +#~ "Se for especificado PALAVRA, o trabalho começado por PALAVRA é usado." #~ msgid "job specification with a `&' places the job in the background." -#~ msgstr "Seguindo-se a especificação por um `&' põe o trabalho em segundo plano." +#~ msgstr "" +#~ "Seguindo-se a especificação por um `&' põe o trabalho em segundo plano." #~ msgid "BASH_VERSION The version numbers of this Bash." #~ msgstr "BASH_VERSION Os números da versão desta `bash'." @@ -7764,11 +8513,15 @@ msgstr "" #~ msgid "\t\tdirectory." #~ msgstr "\t\tencontrado no diretório atual." -#~ msgid "HISTFILE The name of the file where your command history is stored." -#~ msgstr "HISTFILE O nome do arquivo onde o histórico de comandos é armazenado." +#~ msgid "" +#~ "HISTFILE The name of the file where your command history is stored." +#~ msgstr "" +#~ "HISTFILE O nome do arquivo onde o histórico de comandos é " +#~ "armazenado." #~ msgid "HISTFILESIZE The maximum number of lines this file can contain." -#~ msgstr "HISTFILESIZE O número máximo de linhas que este arquivo pode conter." +#~ msgstr "" +#~ "HISTFILESIZE O número máximo de linhas que este arquivo pode conter." #~ msgid "HISTSIZE The maximum number of history lines that a running" #~ msgstr "HISTSIZE O número máximo de linhas do histórico que uma" @@ -7777,12 +8530,16 @@ msgstr "" #~ msgstr "\t\tshell em execução pode acessar." #~ msgid "HOME The complete pathname to your login directory." -#~ msgstr "HOME O nome completo do caminho do seu diretório de login." +#~ msgstr "" +#~ "HOME O nome completo do caminho do seu diretório de login." -#~ msgid "HOSTTYPE The type of CPU this version of Bash is running under." -#~ msgstr "HOSTTYPE O tipo de CPU sob a qual esta `bash' está executando." +#~ msgid "" +#~ "HOSTTYPE The type of CPU this version of Bash is running under." +#~ msgstr "" +#~ "HOSTTYPE O tipo de CPU sob a qual esta `bash' está executando." -#~ msgid "IGNOREEOF Controls the action of the shell on receipt of an EOF" +#~ msgid "" +#~ "IGNOREEOF Controls the action of the shell on receipt of an EOF" #~ msgstr "IGNOREEOF Controla a ação da shell ao receber um caracter" #~ msgid "\t\tcharacter as the sole input. If set, then the value" @@ -7795,13 +8552,16 @@ msgstr "" #~ msgstr "\t\tde forma seguida em uma linha vazia, antes da shell terminar" #~ msgid "\t\t(default 10). When unset, EOF signifies the end of input." -#~ msgstr "\t\t(padrão 10). Caso contrário, EOF significa o fim da entrada de dados." +#~ msgstr "" +#~ "\t\t(padrão 10). Caso contrário, EOF significa o fim da entrada de dados." #~ msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail." -#~ msgstr "MAILCHECK\tFreqüência, em segundos, para a `bash' verificar novo e-mail." +#~ msgstr "" +#~ "MAILCHECK\tFreqüência, em segundos, para a `bash' verificar novo e-mail." #~ msgid "MAILPATH\tA colon-separated list of filenames which Bash checks" -#~ msgstr "MAILPATH\tUma lista, separada por dois pontos, de nomes de arquivos," +#~ msgstr "" +#~ "MAILPATH\tUma lista, separada por dois pontos, de nomes de arquivos," #~ msgid "\t\tfor new mail." #~ msgstr "\t\tnos quais a `bash' vai verificar se existe novo e-mail." @@ -7810,7 +8570,8 @@ msgstr "" #~ msgstr "OSTYPE\t\tA versão do Unix sob a qual a `bash' está executando." #~ msgid "PATH A colon-separated list of directories to search when" -#~ msgstr "PATH Uma lista, separada por dois pontos, de diretórios a" +#~ msgstr "" +#~ "PATH Uma lista, separada por dois pontos, de diretórios a" #~ msgid "\t\tlooking for commands." #~ msgstr "\t\tserem pesquisados quando os comandos forem procurados." @@ -7831,16 +8592,20 @@ msgstr "" #~ msgstr "TERM O nome do tipo de terminal em uso no momento." #~ msgid "auto_resume Non-null means a command word appearing on a line by" -#~ msgstr "auto_resume Não nulo significa que um comando aparecendo sozinho em" +#~ msgstr "" +#~ "auto_resume Não nulo significa que um comando aparecendo sozinho em" #~ msgid "\t\titself is first looked for in the list of currently" -#~ msgstr "\t\tlinha deve ser procurado primeiro na lista de trabalhos parados." +#~ msgstr "" +#~ "\t\tlinha deve ser procurado primeiro na lista de trabalhos parados." #~ msgid "\t\tstopped jobs. If found there, that job is foregrounded." -#~ msgstr "\t\tSe for encontrado na lista, o trabalho vai para o primeiro plano." +#~ msgstr "" +#~ "\t\tSe for encontrado na lista, o trabalho vai para o primeiro plano." #~ msgid "\t\tA value of `exact' means that the command word must" -#~ msgstr "\t\tO valor `exact' significa que a palavra do comando deve corresponder" +#~ msgstr "" +#~ "\t\tO valor `exact' significa que a palavra do comando deve corresponder" #~ msgid "\t\texactly match a command in the list of stopped jobs. A" #~ msgstr "\t\texatamente a um comando da lista de trabalhos parados." @@ -7852,19 +8617,23 @@ msgstr "" #~ msgstr "\t\tcorresponder a uma parte do trabalho. Qualquer outro valor" #~ msgid "\t\tthe command must be a prefix of a stopped job." -#~ msgstr "\t\tsignifica que o comando deve ser um prefixo de um trabalho parado." +#~ msgstr "" +#~ "\t\tsignifica que o comando deve ser um prefixo de um trabalho parado." #~ msgid "command_oriented_history" #~ msgstr "command_oriented_history" -#~ msgid " Non-null means to save multiple-line commands together on" -#~ msgstr " Se não for nulo significa salvar comandos com múltiplas" +#~ msgid "" +#~ " Non-null means to save multiple-line commands together on" +#~ msgstr "" +#~ " Se não for nulo significa salvar comandos com múltiplas" #~ msgid " a single history line." #~ msgstr " linhas, juntas em uma única linha do histórico." #~ msgid "histchars Characters controlling history expansion and quick" -#~ msgstr "histchars Caracteres que controlam a expansão do histórico e a" +#~ msgstr "" +#~ "histchars Caracteres que controlam a expansão do histórico e a" #~ msgid "\t\tsubstitution. The first character is the history" #~ msgstr "\t\tsubstituição rápida. O primeiro caracter é o de substituição" @@ -7879,10 +8648,12 @@ msgstr "" #~ msgstr "\t\té o de comentário do histórico, geralmente o `#'." #~ msgid "HISTCONTROL\tSet to a value of `ignorespace', it means don't enter" -#~ msgstr "HISTCONTROL\tCom valor igual a `ignorespace', significa não introduzir" +#~ msgstr "" +#~ "HISTCONTROL\tCom valor igual a `ignorespace', significa não introduzir" #~ msgid "\t\tlines which begin with a space or tab on the history" -#~ msgstr "\t\tlinhas que iniciam por espaço ou tabulação na lista de histórico." +#~ msgstr "" +#~ "\t\tlinhas que iniciam por espaço ou tabulação na lista de histórico." #~ msgid "\t\tlist. Set to a value of `ignoredups', it means don't" #~ msgstr "\t\tCom valor igual a `ignoredups', significa não introduzir linhas" @@ -7894,7 +8665,8 @@ msgstr "" #~ msgstr "\t\t`ignoreboth' significa combinar as duas opções. Remover," #~ msgid "\t\tor set to any other value than those above means to save" -#~ msgstr "\t\tou atribuir algum outro valor que não os acima, significa salvar" +#~ msgstr "" +#~ "\t\tou atribuir algum outro valor que não os acima, significa salvar" #~ msgid "\t\tall lines on the history list." #~ msgstr "\t\ttodas as linhas na lista de histórico." @@ -7903,19 +8675,22 @@ msgstr "" #~ msgstr "Adiciona o diretório no topo da pilha de diretórios, ou rotaciona a" #~ msgid "the stack, making the new top of the stack the current working" -#~ msgstr "pilha, fazendo o diretório atual de trabalho ficar no topo da pilha." +#~ msgstr "" +#~ "pilha, fazendo o diretório atual de trabalho ficar no topo da pilha." #~ msgid "directory. With no arguments, exchanges the top two directories." #~ msgstr "Sem nenhum argumento, troca os dois diretórios do topo." #~ msgid "+N\tRotates the stack so that the Nth directory (counting" -#~ msgstr "+N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a" +#~ msgstr "" +#~ "+N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a" #~ msgid "\tfrom the left of the list shown by `dirs') is at the top." #~ msgstr "\tpartir da esquerda da lista exibida por `dirs') fique no topo." #~ msgid "-N\tRotates the stack so that the Nth directory (counting" -#~ msgstr "-N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a" +#~ msgstr "" +#~ "-N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a" #~ msgid "\tfrom the right) is at the top." #~ msgstr "\tpartir da direita) fique no topo." @@ -7956,7 +8731,8 @@ msgstr "" #~ msgid "\tremoves the last directory, `popd -1' the next to last." #~ msgstr "\tremove o último diretório, `popd -1' o penúltimo." -#~ msgid "-n\tsuppress the normal change of directory when removing directories" +#~ msgid "" +#~ "-n\tsuppress the normal change of directory when removing directories" #~ msgstr "-n\tsuprime a troca normal de diretório ao remover-se diretórios" #~ msgid "\tfrom the stack, so only the stack is manipulated." @@ -7971,44 +8747,57 @@ msgstr "" #~ msgid "back up through the list with the `popd' command." #~ msgstr "removidos da lista através do comando `popd'." -#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions" +#~ msgid "" +#~ "The -l flag specifies that `dirs' should not print shorthand versions" #~ msgstr "A opção -l especifica que `dirs' não deve exibir a versão resumida" -#~ msgid "of directories which are relative to your home directory. This means" -#~ msgstr "dos diretórios relativos ao seu diretório `home'. Isto significa que" +#~ msgid "" +#~ "of directories which are relative to your home directory. This means" +#~ msgstr "" +#~ "dos diretórios relativos ao seu diretório `home'. Isto significa que" #~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" -#~ msgstr "`~/bin' deve ser exibido como `/home/você/bin'. A opção -v faz com que" +#~ msgstr "" +#~ "`~/bin' deve ser exibido como `/home/você/bin'. A opção -v faz com que" #~ msgid "causes `dirs' to print the directory stack with one entry per line," #~ msgstr "`dirs' exiba a pilha de diretórios com uma entrada por linha," -#~ msgid "prepending the directory name with its position in the stack. The -p" +#~ msgid "" +#~ "prepending the directory name with its position in the stack. The -p" #~ msgstr "antecedendo o nome do diretório com a sua posição na pilha. A opção" #~ msgid "flag does the same thing, but the stack position is not prepended." #~ msgstr "-p faz a mesma coisa, mas a posição na pilha não é exibida. A opção" -#~ msgid "The -c flag clears the directory stack by deleting all of the elements." +#~ msgid "" +#~ "The -c flag clears the directory stack by deleting all of the elements." #~ msgstr "-c limpa a pilha de diretórios apagando todos os seus elementos." -#~ msgid "+N\tdisplays the Nth entry counting from the left of the list shown by" -#~ msgstr "+N\texibe a n-ésima entrada contada a partir da esquerda da lista exibida" +#~ msgid "" +#~ "+N\tdisplays the Nth entry counting from the left of the list shown by" +#~ msgstr "" +#~ "+N\texibe a n-ésima entrada contada a partir da esquerda da lista exibida" #~ msgid "\tdirs when invoked without options, starting with zero." #~ msgstr "\tpor `dirs', quando este é chamado sem opções, começando por zero." -#~ msgid "-N\tdisplays the Nth entry counting from the right of the list shown by" -#~ msgstr "-N\texibe a n-ésima entrada contada a partir da direita da lista exibida" +#~ msgid "" +#~ "-N\tdisplays the Nth entry counting from the right of the list shown by" +#~ msgstr "" +#~ "-N\texibe a n-ésima entrada contada a partir da direita da lista exibida" #~ msgid "Toggle the values of variables controlling optional behavior." -#~ msgstr "Alterna os valores das variáveis controladoras de comportamentos opcionais." +#~ msgstr "" +#~ "Alterna os valores das variáveis controladoras de comportamentos " +#~ "opcionais." #~ msgid "The -s flag means to enable (set) each OPTNAME; the -u flag" #~ msgstr "A opção -s ativa (set) cada NOME-OPÇÃO; a opção -u desativa cada" #~ msgid "unsets each OPTNAME. The -q flag suppresses output; the exit" -#~ msgstr "NOME-OPÇÃO. A opção -q suprime a saída; o status de término indica se" +#~ msgstr "" +#~ "NOME-OPÇÃO. A opção -q suprime a saída; o status de término indica se" #~ msgid "status indicates whether each OPTNAME is set or unset. The -o" #~ msgstr "cada NOME-OPÇÃO foi ativado ou desativado A opção -o restringe" @@ -8020,7 +8809,8 @@ msgstr "" #~ msgstr "Sem nenhuma opção, ou com a opção -p, uma lista com todas as" #~ msgid "settable options is displayed, with an indication of whether or" -#~ msgstr "opções que podem ser ativadas é exibida, com indicação sobre se cada uma" +#~ msgstr "" +#~ "opções que podem ser ativadas é exibida, com indicação sobre se cada uma" #~ msgid "not each is set." #~ msgstr "das opções está ativa ou não." diff --git a/po/ro.gmo b/po/ro.gmo index f1036a704829574c7a05f337115b134e5ddcbeb7..5fa8b984d2fd1bbf9ee117eb55225a93c11bfca0 100644 GIT binary patch delta 12652 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 U&RG3w<tJRS;+&-yt$zCd02Rq;0ssI2 delta 52619 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 L<}=2nmfQaqCf<R( diff --git a/po/ro.po b/po/ro.po index 9c79e28ce..2745bd11a 100644 --- a/po/ro.po +++ b/po/ro.po @@ -4,7 +4,7 @@ # # Eugen Hoanca <eugenh@urban-grafx.ro>, 2003. # Daniel Șerbănescu <daniel@serbanescu.dk>, 2019. -# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022. +# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022 - 2023. # # Cronologia traducerii fișierului „bash”: # Traducerea inițială, făcută de EH, pentru versiunea bash 3.2 (19% - tradus). @@ -12,143 +12,158 @@ # Actualizare a traducerii pentru versiunea 5.0, făcută de DȘ (29% - tradus). # Actualizare a traducerii pentru versiunea 5.1, făcută de R-GC (100% - tradus). # Actualizare a traducerii pentru versiunea 5.2-rc1, făcută de R-GC. +# Corectare a unei greșeli de dactilografiere prezentă din versiunea 5.1, făcută de R-GC, noi-2023. +# Actualizare a traducerii pentru versiunea Y, făcută de X, Z(luna-anul). # msgid "" msgstr "" "Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" -"PO-Revision-Date: 2022-06-18 01:02+0200\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" +"PO-Revision-Date: 2023-11-14 18:38+0100\n" "Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n" "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || ((n%100) > 0 && (n%100) < 20)) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || ((n%100) > 0 && " +"(n%100) < 20)) ? 1 : 2);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 3.2.2\n" "X-Poedit-SourceCharset: UTF-8\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "indice de matrice greșit" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: se elimină atributul nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: nu se poate converti matricea indexată în asociativă" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: nu se poate atribui la index ne-numeric" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" -msgstr "%s: %s: trebuie să fie folosit un indice atunci când se atribuie unei matrice asociative" +msgstr "" +"%s: %s: trebuie să fie folosit un indice atunci când se atribuie unei " +"matrice asociative" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: nu s-a putut crea: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command: nu se poate găsi combinația de taste pentru comandă" +msgstr "" +"bash_execute_unix_command: nu se poate găsi combinația de taste pentru " +"comandă" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" -msgstr "%s: primul caracter care nu este spațiu în alb nu este «\"» (ghilimele duble)" +msgstr "" +"%s: primul caracter care nu este spațiu în alb nu este «\"» (ghilimele duble)" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "nu se închide „%c” în %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: lipsește separatorul două puncte (:)" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "„%s”: nu se poate înlătura combinația de taste atribuită la comandă" # Aici, trebuie folosit forma de plural, așa cum am făcut-o, sau cea de singular: # extindere (de) acoladă? -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "expansiunea de acolade: nu se poate aloca memorie pentru %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "expansiunea de acolade: a eșuat alocarea memoriei pentru %u elemente" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "expansiunea de acolade: a eșuat alocarea memoriei pentru „%s”" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "„%s”: nume alias nevalid" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "editarea liniilor nu este activată" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "`%s': nume de combinație de taste nevalid" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: nu s-a putut citii: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "„%s”: nume de funcție necunoscut" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s nu este asociat niciunei taste.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s poate fi invocat via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "„%s”: atribuirea nu poate fi ștearsă" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "contor buclă" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "are sens numai într-o buclă „for”, „while” sau „until”" -#: builtins/caller.def:136 +# R-GC, scrie: +# acest mesaj, poate să fie vizualizat, rulînd +# comanda: +# «help caller», din «bash»; +# «bash -c "help caller"», din «bash», sau dintr-un +# shell, diferit de «bash». +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -157,91 +172,101 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Returnează contextul apelului subrutinei curente.\n" " \n" -" Fără EXPR, returnează „$linie $nume_fișier”. Cu EXPR, returnează\n" -" „$linie $subrutină $nume_fișier”; aceste informații suplimentare pot să fie\n" -" folosite pentru a furniza o urmărire a stivei.\n" +" Fără EXPR, returnează „$line $filename”. Cu EXPR, returnează\n" +" „$line $subroutine $filename”; aceste informații suplimentare pot fi\n" +" utilizate pentru a furniza o urmărire a stivei.\n" +" \n" +" Valoarea EXPR indică câte cadre de apel trebuie să se întoarcă înaintea\n" +" celui curent; cadrul superior este cadrul 0.\n" " \n" -" Valoarea EXPR indică cîte cadre de apel trebuie să se întoarcă înaintea celui\n" -" curent; cadrul superior este cadrul 0." +" Starea de ieșire:\n" +" Returnează 0, cu excepția cazului în care shell-ul nu execută o funcție " +"shell\n" +" sau EXPR nu este validă." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "variabila $HOME nu este definită" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "prea mulți parametri" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "director nul" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "variabila $OLDPWD nu este definită" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "linia %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "avertizare: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: utilizare: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: opțiunea necesită un argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: argument numeric necesar" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: nu s-a găsit" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: opțiune nevalidă" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: nume de opțiune nevalid" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "„%s” nu este un identificator valid" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "număr octal nevalid" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "număr hexazecimal nevalid" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "număr nevalid" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: specificație de semnal nevalidă" @@ -268,31 +293,31 @@ msgstr "%s: specificație de semnal nevalidă" # grupate (cel mai adesea un proces părinte # cu fii săi), alteori un grup de procese # interacționate. -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "„%s”: nu este un pid sau o specificație validă de lucru" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: variabilă protejată la scriere" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: nu se poate atribui" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s în afara intervalului" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s în afara intervalului" @@ -307,26 +332,26 @@ msgstr "%s în afara intervalului" # adesea sunt o pleiadă de procese, grupate # (cel mai adesea un proces părinte cu fii săi), # alteori un grup de procese interacționate. -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: nu există această lucrare" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: nu există un control de lucrări" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "nu există un control de lucrări" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: restricționat" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "restricționat" @@ -345,22 +370,22 @@ msgstr "restricționat" # ambalaj; cu toate că unele dintre ele, au # avut oarecare succes, niciuna n-a rezistat # cu trecerea timpului. -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: nu este o comandă internă" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "eroare de scriere: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "eroare la configurarea atributelor terminalului: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "eroare la obținerea atributelor terminalului: %s" @@ -370,20 +395,25 @@ msgstr "eroare la obținerea atributelor terminalului: %s" # - Eroare la recuperarea... # Am ales prima variantă, dar este cea mai bună, # în contextul dat? -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: eroare la preluarea directorului curent: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: specificație de lucrare, ambiguă" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "ajutorul nu este disponibil în această versiune" +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: nu este o matrice indexată" + # R-GC, scrie: # după revizarea fișierului, DȘ, spune: # „→ ce zici de „readonly” = „protejat la scriere” (cam lung dar parcă este mai sugestiv)” @@ -396,17 +426,17 @@ msgstr "ajutorul nu este disponibil în această versiune" # cel puțin de moment, dacă nu definitiv, voi # aplica sugestia făcută, asupra acestui mesaj # și aaltora asemănătoare... -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: nu se poate deconfigura: %s este protejat la scriere" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: nu se poate deconfigura" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: nume de acțiune nevalid" @@ -415,54 +445,57 @@ msgstr "%s: nume de acțiune nevalid" # nicio... # sau # nu există (o)... -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: nicio specificație de completare" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" -msgstr "avertisment: este posibil ca opțiunea „-F” să nu funcționeze așa cum vă așteptați" +msgstr "" +"avertisment: este posibil ca opțiunea „-F” să nu funcționeze așa cum vă " +"așteptați" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" -msgstr "avertisment: este posibil ca opțiunea „-C” să nu funcționeze așa cum vă așteptați" +msgstr "" +"avertisment: este posibil ca opțiunea „-C” să nu funcționeze așa cum vă " +"așteptați" # Întrebare: # - În prezent ... # - În acest moment ... # - În momentul actual ... # este formula adecvată contextului? -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "în prezent funcția de completare nu rulează" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "poate fi folosit doar într-o funcție" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "nu se poate utiliza „-f” pentru a face funcții" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: funcție protejată la scriere" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: variabila de referință nu poate fi o matrice" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: nu sunt permise auto-referințele la variabile nameref" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: referință de nume circulară" @@ -472,7 +505,7 @@ msgstr "%s: referință de nume circulară" # „→ cred că s-ar putea pune ghilimele românești” # === # corecție aplicată -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "„%s”: nume de variabilă nevalid pentru referință la nume" @@ -483,12 +516,12 @@ msgstr "„%s”: nume de variabilă nevalid pentru referință la nume" # in this way = de această formă # Mă refer la această intrare, care dintre cele # 3 opțiuni, este cea mai bună? -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: nu se pot distruge variabilele matrice în acest fel" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: nu se poate converti o matrice asociativă într-o matrice indexată" @@ -496,109 +529,115 @@ msgstr "%s: nu se poate converti o matrice asociativă într-o matrice indexată # Întrebare: # - se poate formula mai bine, de exp.: # alocarea matricei compuse, între ghilimele; este perimată-învechită -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: alocarea de matrice compusă între ghilimele este perimată" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "încărcarea dinamică nu este disponibilă" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "nu poate deschide obiectul partajat %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "nu se poate găsi %s în obiectul partajat %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: comanda internă dinamică a «bash», este deja încărcată" # De revizat... -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" -msgstr "funcția de încărcare pentru %s returnează eroarea (%d): încărcarea a eșuat" +msgstr "" +"funcția de încărcare pentru %s returnează eroarea (%d): încărcarea a eșuat" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: nu este încărcat dinamic" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: nu se poate șterge: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: este un director" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: nu este un fișier normal" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: fișierul este prea mare" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: nu se poate executa fișierul binar" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: nu se poate executa: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "deautentificare\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "nu este un shell de autentificare: utilizați „exit”" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Sunt(există) lucrări oprite.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Sunt(există) lucrări în execuție.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "nu s-a găsit nici-o comandă" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "specificație de istoric" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: nu se poate deschide fișierul temporal: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "actual" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "lucrarea %d a început fără controlul lucrării" @@ -620,11 +659,11 @@ msgstr "%s: opțiunea necesită un parametru: -- %c\n" # asociación desactivada # ce mi s-a părut cea mai apropiată contextului în care apare mesajul: # #: builtins/hash.def:91 -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "asocierea este desactivată" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: tabelul de asociere este gol\n" @@ -651,15 +690,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "niciun subiect de ajutor nu se potrivește cu „%s”. Încercați «help help» sau «man -k %s» sau «info %s»." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"niciun subiect de ajutor nu se potrivește cu „%s”. Încercați «help help» " +"sau «man -k %s» sau «info %s»." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: nu se poate deschide: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -670,11 +712,14 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"Aceste comenzi shell, sunt definite intern. Tastează «help», pentru a vedea\n" +"Aceste comenzi shell, sunt definite intern. Tastează «help», pentru a " +"vedea\n" "această listă.\n" -"Tastează «help nume_funcție» pentru a afla mai multe despre funcția „nume_funcție”.\n" +"Tastează «help nume_funcție» pentru a afla mai multe despre funcția " +"„nume_funcție”.\n" "Utilizați «info bash» pentru a afla mai multe despre shell în general.\n" -"Utilizați «man -k» sau «info» pentru a afla mai multe despre comenzile care nu\n" +"Utilizați «man -k» sau «info» pentru a afla mai multe despre comenzile care " +"nu\n" "sunt în această listă.\n" "\n" "O stea (*) în dreptul unui nume înseamnă că acea comandă este dezactivată.\n" @@ -684,21 +729,31 @@ msgstr "" # Mă gîndesc dacă n-ar suna mai bine fraza, dacă # înlocuiesc „unul” cu „un argument”, așa: # nu se poate folosi mai mult de un argument dintre -anrw -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "nu se poate folosi mai mult de o opțiune dintre „-a, -n, -r sau -w”" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "poziție în registrul istoric al comenzilor" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "nume de variabilă matrice gol" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parametru nul sau nedefinit" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: marcaj de timp nevalid" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: a eșuat expansiunea istoriei" @@ -712,109 +767,109 @@ msgstr "%s: a eșuat inlib" msgid "no other options allowed with `-x'" msgstr "nu sunt permise alte opțiuni cu „-x”" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumentele trebuie să fie ID-uri de proces sau de lucrări" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Eroare necunoscută" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "se așteaptă expresie" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: nu este o matrice indexată" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: specificație de descriptor de fișier nevalidă" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: descriptor de fișier nevalid: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: contorizare de linii nevalidă" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: origine matrice nevalid" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: cuantum de apel invers nevalid" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "nume de variabilă matrice gol" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "este necesar suport pentru variabilă matrice" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "„%s”: lipsește caracterul de format" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "„%c”: specificație a formatului de timp nevalidă" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "„%c”: caracter de format nevalid" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "avertizare: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "problemă cu analizarea formatului: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "lipsește o cifră hexazecimală pentru \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "lipsește o cifră unicode pentru \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "niciun alt director" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s argument nevalid" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<niciun director curent>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "stiva de directoare este goală" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "indexul stivei de directoare" @@ -828,7 +883,7 @@ msgstr "indexul stivei de directoare" # voi face aceasă schimbare, în cazul în care, # autorul numește home folder, în loc de # home directory -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -843,10 +898,12 @@ 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 "" "Afișează lista curentă a directoarelor memorate. Directoarele\n" @@ -855,20 +912,24 @@ msgstr "" " \n" " Opțiuni:\n" " -c\tgolește stiva de directoare prin ștergerea tuturor elementelor\n" -" -l\tnu afișează versiuni scurtate (cu ~) ale directoarelor în raport cu\n" +" -l\tnu afișează versiuni scurtate (cu ~) ale directoarelor în raport " +"cu\n" " \tdirectorul dumneavoastră «acasă»\n" " -p\timprimă stiva de directoare cu o intrare pe linie\n" -" -v\timprimă stiva de directoare cu o intrare pe linie, prefixată cu poziția\n" +" -v\timprimă stiva de directoare cu o intrare pe linie, prefixată cu " +"poziția\n" " \tsa în stivă\n" " \n" " Argumente:\n" -" +N\tAfișează a N-a intrare numărând din stânga listei afișate de «dirs»,\n" +" +N\tAfișează a N-a intrare numărând din stânga listei afișate de " +"«dirs»,\n" " \tatunci când este invocată fără opțiuni, începând cu zero.\n" " \n" -" -N\tAfișează a N-a intrare numărând din dreapta listei afișate de «dirs»,\n" +" -N\tAfișează a N-a intrare numărând din dreapta listei afișate de " +"«dirs»,\n" "\tatunci când este invocată fără opțiuni, începând cu zero." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -893,7 +954,8 @@ msgid "" " The `dirs' builtin displays the directory stack." msgstr "" "Adaugă un director în partea de sus a stivei de directoare sau rotește\n" -" stiva, făcând din noul director din partea de sus a stivei, directorul de\n" +" stiva, făcând din noul director din partea de sus a stivei, directorul " +"de\n" " lucru curent. Fără argumente, interschimbă primele două directoare.\n" " \n" " Opțiuni:\n" @@ -914,7 +976,7 @@ msgstr "" " \n" " Comanda internă «dirs» arată stiva curentă de directoare." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -934,8 +996,10 @@ msgid "" " \n" " The `dirs' builtin displays the directory stack." msgstr "" -"Elimină intrările din stiva de directoare. Fără argumente, elimină directorul\n" -" din partea de sus a stivei, și trece la cel cea devenit noul director de sus\n" +"Elimină intrările din stiva de directoare. Fără argumente, elimină " +"directorul\n" +" din partea de sus a stivei, și trece la cel cea devenit noul director de " +"sus\n" " a stivei.\n" " \n" " Opțiuni:\n" @@ -943,22 +1007,24 @@ msgstr "" " \tdirectoare din stivă, astfel încât numai stiva este manipulată.\n" " \n" " Argumente:\n" -" +N\tElimină intrarea a N-a numărând din stânga listei afișate de «dirs»,\n" +" +N\tElimină intrarea a N-a numărând din stânga listei afișate de " +"«dirs»,\n" " \tîncepând cu zero. De exemplu: «popd +0» elimină primul director,\n" " \t«popd +1» al doilea director, șamd.\n" " \n" -" -N\tElimină intrarea a N-a numărând din dreapta listei afișate de «dirs»,\n" +" -N\tElimină intrarea a N-a numărând din dreapta listei afișate de " +"«dirs»,\n" " \tîncepând cu zero. De exemplu: «popd -0» elimină ultimul director,\n" " \t„popd -1” penultimul director, șamd.\n" " \n" " Comanda internă «dirs» arată stiva curentă de directoare." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: specificație a timpului de expirare nevalidă" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "eroare de citire: %d: %s" @@ -975,35 +1041,37 @@ msgstr "eroare de citire: %d: %s" # msgstr "« return » n'est possible que depuis une fonction ou depuis un script exécuté par « source »" # 3. # msgstr "sólo se puede usar `return' desde una función o un script leído con `source'" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "„return”, se poate utiliza doar de la o funcție sau script executat(ă) de la „source”" +msgstr "" +"„return”, se poate utiliza doar de la o funcție sau script executat(ă) de la " +"„source”" # R-GC, scrie: # după revizarea fișierului, DȘ, spune: # „→ nu se pot anula...” # === # Ok, corecție aplicată -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "nu se pot anula simultan o funcție și o variabilă" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: nu este o variabilă matrice" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: nu este o funcție" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: nu se poate exporta" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "contor deplasare(shift)" @@ -1012,289 +1080,303 @@ msgstr "contor deplasare(shift)" # «→ similar și aici: „nu se pot activa ... ”» # === # Ok, corecție aplicată -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "nu se pot activa și dezactiva simultan opțiunile de shell" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: nume nevalid al opțiunii shell" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "este necesar argumentul nume_de_fișier" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: nu s-a găsit fișierul" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "nu se poate suspenda" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "nu se poate suspenda un shell de autentificare" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s este un alias pentru „%s”\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s este un cuvânt cheie shell\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s este o funcție\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s este o comandă internă specială a shell\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s este o funcție\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s este o comandă internă a shell\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s este %s\n" # sau: este mărunțit/fragmentat ? -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s este asociat(hashed) (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: limită de argument nevalidă" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "„%c”: comandă incorectă" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: nu se poate obține limita: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limită" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: nu se poate modifica limita: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "număr octal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "„%c”: operator de mod simbolic nevalid" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "„%c”: caracter de mod simbolic nevalid" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " linie " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "ultima comandă: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Se abandonează..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "RAPORT: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "Avertisment de DEPANARE: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "eroare de comandă necunoscută" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "tip de comandă greșit" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "conector greșit" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "salt eronat" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: variabilă neasociată" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\atimed expirat așteptând introducerea datelor: auto-logout\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "nu se poate redirecționa intrarea standard de la /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: „%c”: caracter de format nevalid" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] încă există" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "eroare de linie de conectare" +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + # Opinie/Motivație: # am ales să traduc nesting = suprapunere # și nu # nesting = imbricare # pentru că consider că este vorba de efectul procesului (evaluările, ce vin una după alta,suprapunîndu-se) și nu de-a numi procesul în sine # În plus, mi se pare că sună mult mai normal la ureche -#: execute_cmd.c:4923 +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: s-a depășit nivelul maxim de suprapunere de «eval» (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" -msgstr "%s: s-a depășit nivelul maxim de suprapunere de citiri cu «source» (%d)" +msgstr "" +"%s: s-a depășit nivelul maxim de suprapunere de citiri cu «source» (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: s-a depășit nivelul maxim de suprapunere de funcții (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: limitat: nu se poate specifica „/” în numele comenzilor" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: comandă negăsită" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: interpret greșit" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: nu se poate executa: fișierul necesar nu a fost găsit" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: interpret greșit" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: nu se poate executa fișierul binar: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "„%s”: este o comandă internă specială" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" -msgstr "nu se poate duplica descriptorul de fișier %d în descriptorul de fișier %d" +msgstr "" +"nu se poate duplica descriptorul de fișier %d în descriptorul de fișier %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "nivel de recursivitate al expresiei depășit" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "stivă recursivă sub nivelul de depășire" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "eroare de sintaxă în expresie" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "s-a încercat asignare către non-variabilă" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "eroare de sintaxă în atribuirea variabilei" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "împărțire la 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "eroare: simbol de atribuire al expresiei greșit" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "se aștepta „:” după expresia condițională" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exponent mai mic de 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "se aștepta un identificator după pre-increment sau pre-decrement" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "„)” lipsește" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "eroare de sintaxă: se aștepta un operand" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "eroare de sintaxă: operator aritmetic nevalid" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (identificatorul erorii este „%s”)" @@ -1320,7 +1402,7 @@ msgstr "constantă de număr întreg nevalidă" msgid "value too great for base" msgstr "valoare prea mare pentru bază" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: eroare în expresie\n" @@ -1329,46 +1411,54 @@ msgstr "%s: eroare în expresie\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: nu s-au putut accesa directoarele părinte" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "„%s”: este o comandă internă specială" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "nu se poate redefini modul „nodelay” pentru descriptorul de fișier %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "nu se poate aloca un nou descriptor de fișier pentru intrarea bash din fd %d" +msgstr "" +"nu se poate aloca un nou descriptor de fișier pentru intrarea bash din fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" -msgstr "save_bash_input: memorie tampon deja existentă pentru noul descriptor de fișier %d" +msgstr "" +"save_bash_input: memorie tampon deja existentă pentru noul descriptor de " +"fișier %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: linie de conectare pgrp" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: BUCLĂ: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: BUCLĂ: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "pid-ul bifurcat %d apare în lucrarea în execuție %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "se șterge lucrarea oprită %d cu grupul de procese %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) marcat ca încă în viață" @@ -1378,43 +1468,43 @@ msgstr "add_process: pid %5ld (%s) marcat ca încă în viață" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: nu există un asemenea pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Semnal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Finalizat" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Oprit" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Oprit(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "În rulare" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Finalizat(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Ieșire %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Stare necunoscută" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(core dumped) " @@ -1426,12 +1516,12 @@ msgstr "(core dumped) " # pe viitor „istețule” uită-te în fișierul de traducere, # deschis ca text, și vei avea mari șanse să afli # răspunsul; fără a «gonglear» ca bezmeticul în Internet -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (dir.lucru: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid proces-copil (de la %ld la %ld)" @@ -1440,86 +1530,87 @@ msgstr "setpgid proces-copil (de la %ld la %ld)" # «wait», nu se traduce; aici, și în mesajele următoare, # face parte din categoria cuvintelor ce nu se traduc. # Datorită contextului în care se află. -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld nu este un proces-copil al acestui shell" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Nu există nicio înregistrare a procesului %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: lucrarea %d este oprită" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: nu există lucrări actuale" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: lucrarea a fost terminată" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: lucrarea %d se află deja în fundal" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" -msgstr "waitchld: se activează WNOHANG pentru a evita blocarea pe termen nedefinit" +msgstr "" +"waitchld: se activează WNOHANG pentru a evita blocarea pe termen nedefinit" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: linie %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (core dumped)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(dir.lucru actual: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp a eșuat" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: nu există control de lucrări în fundal" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: disciplină linie" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "nu se poate configura grupul de procese din terminal (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "nu există niciun control de lucrări în acest shell" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: a eșuat aserțiunea: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1528,7 +1619,7 @@ msgstr "" "\r\n" "malloc: %s:%d: aserțiune greșită\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "necunoscut" @@ -1537,317 +1628,341 @@ msgstr "necunoscut" # Notă, pentru a decide care dintre aceste traduceri, # rămîne, e nevoie de colaborarea(opinii, sugestii, # comentarii, etc) ale utilizatorilor de «bash»... -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: bloc suprascris pe lista liberă" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: apelat cu un argument bloc deja eliberat" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: apelat cu un argument de bloc nealocat" # Am tradus inițial mesajul, ca: # „free: depășire insuficientă detectată; mh_nbytes în afara intervalului” # formulă actuală mi se pare mai adecvată. contextului, precum și a mesajului din engleză -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" -msgstr "free: s-a detectat o depășire insuficientă; mh_nbytes în afara intervalului" +msgstr "" +"free: s-a detectat o depășire insuficientă; mh_nbytes în afara intervalului" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: s-a detectat o depășire insuficientă; magic8 corupt" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: dimensiunile bucăților de început și de sfârșit sunt diferite" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: apelat cu un argument de bloc nealocat" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" -msgstr "realloc: s-a detectat o depășire insuficientă; mh_nbytes țn afara intervalului" +msgstr "" +"realloc: s-a detectat o depășire insuficientă; mh_nbytes țn afara " +"intervalului" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: s-a detectat o depășire insuficientă; magic8 corupt" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: dimensiunile bucăților de început și de sfârșit, diferă" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: tabelul de alocare este plin cu FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p deja în tabel ca fiind alocat?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_alloc: %p deja în tabel ca liber?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "bază nevalidă" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: gazdă necunoscută" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: serviciu nevalid" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: specificație incorectă pentru ruta rețelei" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "operațiunile de rețea nu sunt acceptate" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: nu se poate schimba parametrul de limbă (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: nu se poate schimba parametrul de limbă (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: nu se poate schimba parametrul de limbă (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: nu se poate schimba parametrul de limbă (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Aveți mail în $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Aveți mail nou în $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Mailul din %s a fost citit\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "eroare de sintaxă: expresie aritmetică necesară" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "eroare de sintaxă: „;” neașteptat" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "eroare de sintaxă: „((%s))”" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: tip de instrucțiune greșit %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "«here-document» la linia %d delimitat de sfârșitul fișierului (se aștepta „%s”)" +msgstr "" +"«here-document» la linia %d delimitat de sfârșitul fișierului (se aștepta " +"„%s”)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" -msgstr "make_redirection: instrucțiunea de redirecționare „%d” este în afara intervalului" +msgstr "" +"make_redirection: instrucțiunea de redirecționare „%d” este în afara " +"intervalului" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) depășește SIZE_MAX (%lu): linie trunchiată" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) depășește SIZE_MAX (%lu): linie " +"trunchiată" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "eroare de scriere: %s" -#: parse.y:2921 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "numărul maxim de «here-document» a fost depășit" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" -msgstr "sfârșit neașteptat al fișierului(EOF) în timp ce se căuta coincidența pentru „%c”" +msgstr "" +"sfârșit neașteptat al fișierului(EOF) în timp ce se căuta coincidența pentru " +"„%c”" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "sfârșit neașteptat al fișierului(EOF) în timp ce se căuta „]]”" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "eroare de sintaxă în expresia condițională: simbol neașteptat „%s”" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "eroare de sintaxă în expresia condițională" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "simbol neașteptat „%s”, așteptat „)”" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "se aștepta „)”" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "argument neașteptat „%s” pentru operatorul unar condițional" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "argument neașteptat pentru operatorul unar condițional" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "identificator neașteptat „%s”, se aștepta operator binar condițional" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "se aștepta operator binar condițional" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "argument neașteptat „%s” pentru operatorul binar condițional" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "argument neașteptat pentru operatorul binar condițional" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "identificator neașteptat „%c” în comanda condițională" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "identificator neașteptat „%s” în comanda condițională" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "identificator neașteptat %d în comanda condițională" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "eroare de sintaxă neașteptată lângă „%s”" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "eroare de sintaxă neașteptată lângă „%s”" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "eroare de sintaxă: sfârșit de fișier neașteptat" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "eroare de sintaxă: sfârșit de fișier neașteptat" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "eroare de sintaxă" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Utilizați „%s” pentru a părăsi shell-ul.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" -msgstr "sfârșit neașteptat al fișierului în timp ce se căuta după perechea lui „)”" +msgstr "" +"sfârșit neașteptat al fișierului în timp ce se căuta după perechea lui „)”" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completare: funcția „%s” nu a fost găsită" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programable_completion: %s: posibilă buclă de reîncercare" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: COMPSPEC null" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: conector greșit „%d”" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: descriptor de fișier nevalid" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: indicatorul pentru fișier este NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != nrfișier xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: „%c”: caracter de format nevalid" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "descriptor de fișier în afara intervalului" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: redirectare ambiguă" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: nu se poate suprascrie fișierul existent" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: restricționat: nu se poate redirecționa ieșirea" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "nu se poate crea un fișier temporar pentru «here-document»: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: nu se poate atribui descriptorul de fișier variabilei" @@ -1861,55 +1976,56 @@ msgstr "%s: nu se poate atribui descriptorul de fișier variabilei" # «→conexiunea trebuie să fie LA rețea în ambele cazuri, „conexiune de rețea” este doar un tip de conexiune (fizică sau virtuală), iar „conexiunea la rețea” reprezintă accesul calculatorului la o rețea anume. (aici se subînțelege o rețea de alte calulatoare fie ea LAN sau WAN)» # === # Ok, corecție aplicată -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" -msgstr "nu se admite «/dev/(tcp|udp)/host/port» fără a avea o conexiune la rețea" +msgstr "" +"nu se admite «/dev/(tcp|udp)/host/port» fără a avea o conexiune la rețea" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "eroare de redirectare: nu se poate duplica descriptorul de fișier" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "nu s-a putut găsi «/tmp», vă rugăm să-l creați!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "«/tmp» trebuie să fie un nume de director valid" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "modul de imprimare „drăguț” este ignorat în shell-urile interactive" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: opțiune nevalidă" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "nu se poate stabili uid la %d: uid efectiv %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "nu se poate stabili gid la %d: gid efectiv %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "nu se poate porni depanatorul; modul de depanare a fost dezactivat" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: Este un director" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Nu am nici un nume!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, versiunea %s-(%s)\n" @@ -1918,7 +2034,7 @@ msgstr "GNU bash, versiunea %s-(%s)\n" # acest mesaj, și următoarele, pot să fie # vizualizate, rulînd comanda: # «bash --help». -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1927,49 +2043,55 @@ msgstr "" "Utilizare:\t%s [GNU opțiune lungă] [opțiune] ...\n" "\t%s [GNU opțiune lungă] [opțiune] fișier-script ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Opțiuni lungi GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Opțiuni ale shell-ului:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD sau -c comandă sau -O shopt_option\t\t(doar invocare)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s sau -o opțiune\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Tastați «%s -c \"help set\"» pentru mai multe informații despre opțiunile shell-ului.\n" +msgstr "" +"Tastați «%s -c \"help set\"» pentru mai multe informații despre opțiunile " +"shell-ului.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "Tastați «%s -c help» pentru mai multe informații despre comenzile interne ale shell-ului.\n" +msgstr "" +"Tastați «%s -c help» pentru mai multe informații despre comenzile interne " +"ale shell-ului.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Utilizați comanda «bashbug» pentru a raporta erori.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Pagina principală a lui „bash”: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "Ajutor general pentru utilizarea software-ului GNU: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Ajutor general pentru utilizarea software-ului GNU: <http://www.gnu.org/" +"gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: operație nevalidă" @@ -2146,282 +2268,318 @@ msgstr "Solicitare de informație" msgid "Unknown Signal #%d" msgstr "Semnal necunoscut #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "înlocuire greșită: nu se închide „%s” în %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: nu se poate atribui o listă unui membru al matricei" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "nu se poate crea linia de conectare pentru substituția procesului" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "nu se poate crea un proces-copil pentru substituirea procesului: %s" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "nu se poate deschide linia de conectare numită %s pentru citire" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "nu se poate deschide linia de conectare numită %s pentru scriere" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "nu se poate duplica linia de conectare numită %s ca fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "substituție de comandă: octetul null din intrare este ignorat" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" +"command_substitute: nu se poate duplica linia de conectare ca descriptor de " +"fișier 1(fd 1)" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "nu se poate crea linia de conectare pentru substituția de comandă" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "nu se poate crea un proces-copil pentru substituția de comandă" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" -msgstr "command_substitute: nu se poate duplica linia de conectare ca descriptor de fișier 1(fd 1)" +msgstr "" +"command_substitute: nu se poate duplica linia de conectare ca descriptor de " +"fișier 1(fd 1)" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: nume de variabilă nevalid pentru referința numelui" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: extindere indirectă nevalidă" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: nume de variabilă nevalid" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parametru nedefinit" +msgid "%s: bad substitution" +msgstr "%s: substituție nevalidă" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parametru nul sau nedefinit" +msgid "%s: parameter not set" +msgstr "%s: parametru nedefinit" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: expresie subșir < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: substituție nevalidă" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: nu se poate asigna în acest mod" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "versiunile viitoare ale shell-ului vor forța evaluarea ca o substituție aritmetică" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"versiunile viitoare ale shell-ului vor forța evaluarea ca o substituție " +"aritmetică" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "înlocuire greșită: fără „`” de închidere în %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "nicio potrivire: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "se aștepta un parametru" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: se aștepta o expresie întreagă (integer)" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "se aștepta „)'”" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "se aștepta „)”, s-a găsit %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: se așteaptă operator binar" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: se așteaptă operator unar" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "lipsește „]”" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "eroare de sintaxă: „%s” neașteptat" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "număr de semnal nevalid" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "gestionarul de capturare: nivelul maxim de gestionări de capturare a fost depășit (%d)" +msgstr "" +"gestionarul de capturare: nivelul maxim de gestionări de capturare a fost " +"depășit (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: valoare greșită în trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: gestionarul de semnal este SIG_DFL, se retrimite %d (%s) către mine" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: gestionarul de semnal este SIG_DFL, se retrimite %d (%s) " +"către mine" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: semnal nevalid %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "eroare în importarea definiției funcției pentru „%s”" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "nivelul shell-ului (%d) prea mare, se reinițializează la 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "numărul maxim de «here-document» a fost depășit" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: nu există context de funcție în domeniul actual" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: nu este posibil ca variabilei să i se atribuie o valoare" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: nu se poate moșteni valoarea de la un tip incompatibil" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: se atribuie un număr întreg referinței de nume" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: nu există context de funcție în domeniul actual" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s are exportstr nul" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "caracter nevalid %d în exportstr pentru %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "nu există „=” în exportstr pentru %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "pop_var_context: partea de sus din shell_variables nu este un context de funcție" +msgstr "" +"pop_var_context: partea de sus din shell_variables nu este un context de " +"funcție" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: nu există un context global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: partea de sus din shell_variables nu este un domeniu de mediu temporar" +msgstr "" +"pop_scope: partea de sus din shell_variables nu este un domeniu de mediu " +"temporar" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: nu se poate deschide ca FIȘIER" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: valoare nevalidă pentru descriptorul fișierului de urmărire" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: valoarea de compatibilitate în afara intervalului" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Drepturi de autor © 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Licență GPLv3+: GNU GPL versiunea 3 sau ulterioară <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Licență GPLv3+: GNU GPL versiunea 3 sau ulterioară <http://gnu.org/licenses/" +"gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, versiunea %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "Acesta este un software liber; sunteți liber să îl modificați și să îl redistribuiți." +msgstr "" +"Acesta este un software liber; sunteți liber să îl modificați și să îl " +"redistribuiți." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "NU EXISTĂ NICIO GARANȚIE, în măsura permisă de lege." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: nu se pot aloca %lu octeți (%lu octeți alocați)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: nu se pot aloca %lu octeți" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: nu se pot aloca %lu octeți (%lu octeți alocați)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: nu se pot aloca %lu octeți" @@ -2440,8 +2598,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] nume [nume ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m comb_taste] [-f nume_fișier] [-q nume] [-u nume] [-r secv_taste] [-x secv_taste:comandă_shell] [secv_taste:funcție-readline sau comandă-readline]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m comb_taste] [-f nume_fișier] [-q nume] [-u nume] [-r " +"secv_taste] [-x secv_taste:comandă_shell] [secv_taste:funcție-readline sau " +"comandă-readline]" #: builtins.c:56 msgid "break [n]" @@ -2460,7 +2623,8 @@ msgid "caller [expr]" msgstr "caller [expr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [dir]" #: builtins.c:68 @@ -2472,12 +2636,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] comandă [arg ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [nume[=valoare] ...] sau declare -p [-aAfFilnrtux] [nume ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [nume[=valoare] ...] sau declare -p [-aAfFilnrtux] " +"[nume ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] nume[=valoare] ... sau typeset -p [-aAfFilnrtux] [nume ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] nume[=valoare] ... sau typeset -p [-aAfFilnrtux] " +"[nume ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2536,8 +2708,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [tipar ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d decalaj] [n] sau history -anrw [nume_fișier] sau history -ps arg [arg...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d decalaj] [n] sau history -anrw [nume_fișier] sau history -" +"ps arg [arg...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2548,16 +2724,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [id_lucrare ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s id_semnal | -n num_semnal | -id_semnal] pid | id_lucrare ... sau kill -l [id_semnal]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s id_semnal | -n num_semnal | -id_semnal] pid | id_lucrare ... sau " +"kill -l [id_semnal]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a matrice] [-d delim] [-i text] [-n nr_carac] [-N nr_carac [-p prompt] [-t timp] [-u fd] [nume ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a matrice] [-d delim] [-i text] [-n nr_carac] [-N nr_carac [-p " +"prompt] [-t timp] [-u fd] [nume ...]" #: builtins.c:140 msgid "return [n]" @@ -2604,7 +2789,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] id_semnal ...]" #: builtins.c:168 @@ -2628,104 +2814,133 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NUME [in CUVINTE ... ] ; do COMENZI; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( exp1; exp2; exp3 )); do COMENZI; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NUME [in CUVINTE ... ;] do COMENZI; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] secvența_de_comenzi(pipeline)" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case CUVÂNT in [MODEL[[MODEL]..) COMENZI ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if COMENZI; then COMENZI; [elif COMENZI; then COMENZI; ]... [ else COMENZI; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if COMENZI; then COMENZI; [elif COMENZI; then COMENZI; ]... [ else " +"COMENZI; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while COMENZI; do COMENZI-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until COMENZI; do COMENZI-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NUME] comanda [redirecționări]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function nume { COMENZI ; } sau nume () { COMENZI ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ COMENZI ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "id_lucrare [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( expresie ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ expresie ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Numele și semnificațiile unor variabile din shell" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dir]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [nume_opțiune ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [argumente]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opțiune] [-A acțiune] [-G tipar_glob] [-W listă_cuvinte] [-F funcție] [-C comandă] [-X tipar_filtru [- P prefix] [-S sufix] [nume ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o opțiune] [-A acțiune] [-G " +"tipar_glob] [-W listă_cuvinte] [-F funcție] [-C comandă] [-X tipar_filtru [- " +"P prefix] [-S sufix] [nume ...]" -#: builtins.c:235 -msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" -msgstr "compgen [-abcdefgjksuv] [-o opțiune] [-A acțiune] [-G tipar_glob] [-W listă_cuvinte] [-F funcție] [-C comandă] [-X tipar_filtru] [-P prefix] [-S sufix] [cuvânt]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o opțiune] [-A acțiune] [-G tipar_glob] [-W " +"listă_cuvinte] [-F funcție] [-C comandă] [-X tipar_filtru] [-P prefix] [-S " +"sufix] [cuvânt]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o opțiune] [-DEI] [nume ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d delim] [-n cont] [-O origin] [-s cont] [-t] [-u fd] [-C apelare] [-c cantitate] [matrice]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d delim] [-n cantitate] [-O origine] [-s cantitate] [-t] [-u fd] [-C apelare] [-c sumă_de] [matrice]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d delim] [-n cont] [-O origin] [-s cont] [-t] [-u fd] [-C apelare] " +"[-c cantitate] [matrice]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d delim] [-n cantitate] [-O origine] [-s cantitate] [-t] [-u fd] " +"[-C apelare] [-c sumă_de] [matrice]" # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -2733,7 +2948,7 @@ msgstr "readarray [-d delim] [-n cantitate] [-O origine] [-s cantitate] [-t] [-u # «help alias», din «bash»; # «bash -c "help alias"», din «bash», sau dintr-un # shell, diferit de «bash». -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2748,7 +2963,8 @@ msgid "" " -p\tprint all defined aliases in a reusable format\n" " \n" " Exit Status:\n" -" alias returns true unless a NAME is supplied for which no alias has been\n" +" alias returns true unless a NAME is supplied for which no alias has " +"been\n" " defined." msgstr "" "Definește sau afișează alias.\n" @@ -2756,7 +2972,8 @@ msgstr "" " Fără argumente, «alias» imprimă lista de alias în forma reutilizabilă\n" " „alias NUME=VALOARE” la ieșirea standard (pe ecran).\n" " \n" -" În caz contrar, un alias este definit pentru fiecare NUME a cărui VALOARE\n" +" În caz contrar, un alias este definit pentru fiecare NUME a cărui " +"VALOARE\n" " este dată. Un spațiu final în VALOARE, face ca următorul cuvânt să fie\n" " verificat pentru înlocuirea aliasului atunci când aliasul este extins.\n" " \n" @@ -2773,7 +2990,7 @@ msgstr "" # «help unalias», din «bash»; # «bash -c "help unalias"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2787,7 +3004,8 @@ msgstr "" " Opțiuni:\n" " -a\telimină toate definițiile de alias\n" " \n" -" Returnează succes, cu excepția cazului în care un NUME nu este un alias existent." +" Returnează succes, cu excepția cazului în care un NUME nu este un alias " +"existent." # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -2795,7 +3013,7 @@ msgstr "" # «help bind», din «bash»; # «bash -c "help bind"», din «bash», sau dintr-un # shell, diferit de «bash». -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2807,25 +3025,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2833,38 +3056,55 @@ msgid "" msgstr "" "Configurează legăturile de taste și variabilele Readline.\n" " \n" -" Asociază o secvență de taste cu o funcție Readline sau cu o macrocomandă\n" -" sau configurează o variabilă Readline. Sintaxa argumentului fără opțiune \n" -" este echivalentă cu cea găsită în ~/.inputrc, dar trebuie transmisă ca un\n" +" Asociază o secvență de taste cu o funcție Readline sau cu o " +"macrocomandă\n" +" sau configurează o variabilă Readline. Sintaxa argumentului fără " +"opțiune \n" +" este echivalentă cu cea găsită în ~/.inputrc, dar trebuie transmisă ca " +"un\n" " singur argument; de exp.: bind '\"\\C-x\\C-r\": re-read-init-file'.\n" " \n" " Opțiuni:\n" -" -m keymap Utilizează KEYMAP ca hartă de taste pe durata acestei\n" -" comenzi. Numele valabile pentru hărți de taste sunt emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" -m keymap Utilizează KEYMAP ca hartă de taste pe durata " +"acestei\n" +" comenzi. Numele valabile pentru hărți de taste " +"sunt emacs,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, și vi-insert.\n" " -l Enumeră numele funcțiilor.\n" " -P Enumeră numele și asocierile funcțiilor.\n" -" -p Enumeră funcțiile și asocierile într-o formă care poate fi\n" +" -p Enumeră funcțiile și asocierile într-o formă care " +"poate fi\n" " reutilizată ca intrare.\n" -" -S Enumeră secvențele de chei care invocă macrocomenzi și\n" +" -S Enumeră secvențele de chei care invocă macrocomenzi " +"și\n" " valorile acestora\n" -" -s Enumeră secvențele de chei care invocă macrocomenzi și\n" -" valorile acestora într-o formă care poate fi reutilizată ca intrare.\n" +" -s Enumeră secvențele de chei care invocă macrocomenzi " +"și\n" +" valorile acestora într-o formă care poate fi " +"reutilizată ca intrare.\n" " -V Enumeră numele și valorile variabilelor\n" -" -v Enumeră numele și valorile variabilelor într-o formă care\n" +" -v Enumeră numele și valorile variabilelor într-o " +"formă care\n" " poate fi reutilizată ca intrare.\n" -" -q nume-funcție Se utilizează pentru a afla care taste invocă funcția numită.\n" -" -u nume-funcție Dezasociază toate tastele care sunt asociate cu funcția numită.\n" +" -q nume-funcție Se utilizează pentru a afla care taste invocă " +"funcția numită.\n" +" -u nume-funcție Dezasociază toate tastele care sunt asociate cu " +"funcția numită.\n" " -r sec-taste Elimină asocierea pentru sec-taste numită.\n" -" -f nume-fișier Citește asocierile de taste din fișierul al cărui nume a fost dat.\n" -" -x sec-taste:comandă-shell\tDetermină executarea comandă-shell când este\n" +" -f nume-fișier Citește asocierile de taste din fișierul al cărui " +"nume a fost dat.\n" +" -x sec-taste:comandă-shell\tDetermină executarea comandă-shell când " +"este\n" " \t\t\t\tintrodusă sec-taste.\n" -" -X Enumeră secvențele de taste asociate cu -x și comenzile asociate într-o\n" +" -X Enumeră secvențele de taste asociate cu -x și " +"comenzile asociate într-o\n" " formă care poate fi reutilizată ca intrare.\n" " \n" " Starea de ieșire:\n" -" «bind» returnează 0, cu excepția cazului în care este dată o opțiune nerecunoscută, sau apare o eroare." +" «bind» returnează 0, cu excepția cazului în care este dată o opțiune " +"nerecunoscută, sau apare o eroare." # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -2872,7 +3112,7 @@ msgstr "" # «help break», din «bash»; # «bash -c "help break"», din «bash», sau dintr-un # shell, diferit de «bash». -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2888,7 +3128,8 @@ msgstr "" " numărul de bucle specificat.\n" " \n" " Starea de ieșire:\n" -" Starea de ieșire este 0, cu excepția cazului în care N nu este mai mare sau egal cu 1." +" Starea de ieșire este 0, cu excepția cazului în care N nu este mai mare " +"sau egal cu 1." # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -2896,7 +3137,7 @@ msgstr "" # «help continue», din «bash»; # «bash -c "help continue"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2909,10 +3150,12 @@ msgstr "" "Reia buclele for, while, sau until.\n" " \n" " Reia următoarea iterație a buclei curente FOR, WHILE sau UNTIL.\n" -" Dacă se specifică N, reia bucla și continuă pentru N niveluri în continuare.\n" +" Dacă se specifică N, reia bucla și continuă pentru N niveluri în " +"continuare.\n" " \n" " Starea de ieșire:\n" -" Starea de ieșire este 0, cu excepția cazului în care N nu este mai mare sau egal cu 1." +" Starea de ieșire este 0, cu excepția cazului în care N nu este mai mare " +"sau egal cu 1." # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -2920,13 +3163,14 @@ msgstr "" # «help builtin», din «bash»; # «bash -c "help builtin"», din «bash», sau dintr-un # shell, diferit de «bash». -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2934,12 +3178,16 @@ msgid "" msgstr "" "Execută comenzile interne de shell.\n" " \n" -" Execută SHELL-BUILTIN cu argumentele ARG fără a efectua căutarea comenzilor.\n" -" Acest lucru este util atunci când doriți să reimplementați o comandă internă de shell\n" -" ca o funcție shell, dar trebuie să executați comanda internă în cadrul funcției.\n" +" Execută SHELL-BUILTIN cu argumentele ARG fără a efectua căutarea " +"comenzilor.\n" +" Acest lucru este util atunci când doriți să reimplementați o comandă " +"internă de shell\n" +" ca o funcție shell, dar trebuie să executați comanda internă în cadrul " +"funcției.\n" " \n" " Starea de ieșire:\n" -" Returnează starea de ieșire a lui SHELL-BUILTIN sau false dacă SHELL-BUILTIN nu\n" +" Returnează starea de ieșire a lui SHELL-BUILTIN sau false dacă SHELL-" +"BUILTIN nu\n" " este o comandă internă de shell." # R-GC, scrie: @@ -2948,7 +3196,7 @@ msgstr "" # «help caller», din «bash»; # «bash -c "help caller"», din «bash», sau dintr-un # shell, diferit de «bash». -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2973,7 +3221,8 @@ msgstr "" " celui curent; cadrul superior este cadrul 0.\n" " \n" " Starea de ieșire:\n" -" Returnează 0, cu excepția cazului în care shell-ul nu execută o funcție shell\n" +" Returnează 0, cu excepția cazului în care shell-ul nu execută o funcție " +"shell\n" " sau EXPR nu este validă." # R-GC, scrie: @@ -2982,20 +3231,27 @@ msgstr "" # «help cd», din «bash»; # «bash -c "help cd"», din «bash», sau dintr-un # shell, diferit de «bash». -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -3011,25 +3267,33 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Schimbă directorul de lucru al shell-ului.\n" " \n" -" Schimbă directorul actual cu DIR. DIR implicit este valoarea variabilei de \n" +" Schimbă directorul actual cu DIR. DIR implicit este valoarea variabilei " +"de \n" " shell HOME.\n" " \n" -" Variabila CDPATH definește calea de căutare pentru directorul care conține\n" -" DIR. Numele alternative ale directoarelor din CDPATH sunt separate prin\n" -" două puncte (:). Numele unui director nul este același cu directorul curent.\n" +" Variabila CDPATH definește calea de căutare pentru directorul care " +"conține\n" +" DIR. Numele alternative ale directoarelor din CDPATH sunt separate " +"prin\n" +" două puncte (:). Numele unui director nul este același cu directorul " +"curent.\n" " Dacă DIR începe cu o bară oblică (/), atunci CDPATH nu este utilizat.\n" " \n" -" Dacă directorul nu este găsit și opțiunea de shell „cdable_vars” este setată,\n" -" cuvântul se presupune a fi un nume de variabilă. Dacă acea variabilă are o\n" +" Dacă directorul nu este găsit și opțiunea de shell „cdable_vars” este " +"setată,\n" +" cuvântul se presupune a fi un nume de variabilă. Dacă acea variabilă " +"are o\n" " valoare, valoarea ei este utilizată pentru DIR.\n" " \n" " Opțiuni:\n" @@ -3044,12 +3308,15 @@ msgstr "" " -@\tpe sistemele care acceptă acest lucru, prezintă un fișier cu\n" " \t\tatribute extinse, ca un director care conține atributele fișierului\n" " \n" -" Modul implicit este să urmeze legături simbolice, ca și cum ar fi fost specificat „-L”.\n" -" „..” este procesat prin eliminarea componentei de cale imediat anterioară până\n" +" Modul implicit este să urmeze legături simbolice, ca și cum ar fi fost " +"specificat „-L”.\n" +" „..” este procesat prin eliminarea componentei de cale imediat " +"anterioară până\n" " la o bară oblică sau la începutul DIR.\n" " \n" " Starea de ieșire:\n" -" Returnează 0 dacă directorul este schimbat și dacă $PWD este stabilit cu succes atunci\n" +" Returnează 0 dacă directorul este schimbat și dacă $PWD este stabilit cu " +"succes atunci\n" " când este utilizat „-P”; diferit de zero, în caz contrar." # R-GC, scrie: @@ -3058,7 +3325,7 @@ msgstr "" # «help pwd», din «bash»; # «bash -c "help pwd"», din «bash», sau dintr-un # shell, diferit de «bash». -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -3080,7 +3347,8 @@ msgstr "" " \t\tlucru curent\n" " -P\timprimă directorul fizic, fără nicio legătură simbolică\n" " \n" -" În mod implicit, „pwd” se comportă ca și cum „-L” ar fi fost specificat.\n" +" În mod implicit, „pwd” se comportă ca și cum „-L” ar fi fost " +"specificat.\n" " \n" " Starea de ieșire:\n" " Returnează 0, cu excepția cazului în care este dată o opțiune nevalidă\n" @@ -3092,7 +3360,7 @@ msgstr "" # «help :», din «bash»; # «bash -c "help :"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -3114,7 +3382,7 @@ msgstr "" # «help true», din «bash»; # «bash -c "help true"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -3132,7 +3400,7 @@ msgstr "" # «help false», din «bash»; # «bash -c "help false"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -3150,12 +3418,13 @@ msgstr "" # «help command», din «bash»; # «bash -c "help command"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:471 +#: builtins.c:473 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" @@ -3169,8 +3438,10 @@ msgid "" msgstr "" "Execută o comandă simplă sau afișează informații despre comenzi.\n" " \n" -" Rulează COMANDA cu ARGumente care suprimă căutarea funcției shell sau afișează\n" -" informații despre COMENZILE specificate. Se poate utiliza pentru a invoca comenzi\n" +" Rulează COMANDA cu ARGumente care suprimă căutarea funcției shell sau " +"afișează\n" +" informații despre COMENZILE specificate. Se poate utiliza pentru a " +"invoca comenzi\n" " de pe disc atunci când există o funcție cu același nume.\n" " \n" " Opțiuni:\n" @@ -3181,7 +3452,8 @@ msgstr "" " -V imprimă o descriere mai detaliată pentru fiecare COMANDĂ\n" " \n" " Starea de ieșire:\n" -" Returnează starea de ieșire a COMENZII sau eșuează dacă COMANDA nu este găsită." +" Returnează starea de ieșire a COMENZII sau eșuează dacă COMANDA nu este " +"găsită." # R-GC, scrie: # am tradus: @@ -3199,7 +3471,8 @@ msgstr "" # «help declare», din «bash»; # «bash -c "help declare"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -3227,12 +3500,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -3245,12 +3520,16 @@ msgstr "" " afișează atributele și valorile tuturor variabilelor.\n" " \n" " Opțiuni:\n" -" -f\trestricționează acțiunea sau afișarea, la numele și definițiile funcțiilor\n" -" -F\trestricționează afișarea numai la numele funcțiilor (plus numărul de\n" +" -f\trestricționează acțiunea sau afișarea, la numele și definițiile " +"funcțiilor\n" +" -F\trestricționează afișarea numai la numele funcțiilor (plus numărul " +"de\n" " \t\tlinie și fișierul sursă, la depanare)\n" -" -g\tcreează variabile globale atunci când sunt utilizate într-o funcție shell;\n" +" -g\tcreează variabile globale atunci când sunt utilizate într-o " +"funcție shell;\n" " \t\taltfel sunt ignorate\n" -" -I\tdacă se creează o variabilă locală, moștenește atributele și valoarea\n" +" -I\tdacă se creează o variabilă locală, moștenește atributele și " +"valoarea\n" " \t\tunei variabile cu același nume dintr-un scop anterior\n" " -p\tafișează atributele și valoarea fiecărui NUME\n" " \n" @@ -3258,11 +3537,14 @@ msgstr "" " -a\tstabilește NUME ca matrice indexată (dacă este acceptat)\n" " -A\tstabilește NUME ca matrice asociativă (dacă este acceptat)\n" " -i\tstabilește ca NUME să aibă atributul „integer”\n" -" -l\tpentru a converti valoarea fiecărui NUME în minuscule, la atribuire\n" -" -n\tface din NUME o referință la variabila numită după valoarea acesteia\n" +" -l\tpentru a converti valoarea fiecărui NUME în minuscule, la " +"atribuire\n" +" -n\tface din NUME o referință la variabila numită după valoarea " +"acesteia\n" " -r\tcreează NUME ca numai-citire\n" " -t\tstabilește ca NUME să aibă atributul „trace”\n" -" -u\tpentru a converti valoarea fiecărui NUME în majuscule, la atribuire\n" +" -u\tpentru a converti valoarea fiecărui NUME în majuscule, la " +"atribuire\n" " -x\tpentru a exporta NUME\n" " \n" " Utilizarea a „+” în loc de „-”, dezactivează atributul dat.\n" @@ -3270,8 +3552,10 @@ msgstr "" " Variabilele cu atributul întreg au o evaluare aritmetică (vezi comanda\n" " «let») efectuată atunci când variabilei i se atribuie o valoare.\n" " \n" -" Când este folosită într-o funcție, «declare» face ca NUME să fie local, ca\n" -" și în cazul comenzii «local». Opțiunea „-g” suprimă acest comportament.\n" +" Când este folosită într-o funcție, «declare» face ca NUME să fie local, " +"ca\n" +" și în cazul comenzii «local». Opțiunea „-g” suprimă acest " +"comportament.\n" " \n" " Starea de ieșire:\n" " Returnează succes, cu excepția cazului în care este furnizată o opțiune\n" @@ -3283,7 +3567,7 @@ msgstr "" # «help typeset», din «bash»; # «bash -c "help typeset"», din «bash», sau dintr-un # shell, diferit de «bash». -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3299,7 +3583,7 @@ msgstr "" # «help local», din «bash»; # «bash -c "help local"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3324,7 +3608,8 @@ msgstr "" " \n" " Starea de ieșire:\n" " Returnează succes cu excepția cazului în care este furnizată o opțiune\n" -" nevalidă, apare o eroare de atribuire a variabilei sau shell-ul nu execută\n" +" nevalidă, apare o eroare de atribuire a variabilei sau shell-ul nu " +"execută\n" " o funcție." # R-GC, scrie: @@ -3333,11 +3618,12 @@ msgstr "" # «help echo», din «bash»; # «bash -c "help echo"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3361,9 +3647,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3371,15 +3659,19 @@ msgid "" msgstr "" "Scrie argumente la ieșirea standard.\n" " \n" -" Afișează ARGumentele, separate printr-un singur caracter de spațiu și urmate\n" +" Afișează ARGumentele, separate printr-un singur caracter de spațiu și " +"urmate\n" " de o nouă linie, în ieșirea standard.\n" " \n" " Opțiuni:\n" " -n\tnu adaugă o nouă linie\n" -" -e\tactivează interpretarea următoarelor eludări de bară oblică inversă\n" -" -E\tsuprimă în mod explicit interpretarea eludărilor de bară oblică inversă\n" +" -e\tactivează interpretarea următoarelor eludări de bară oblică " +"inversă\n" +" -E\tsuprimă în mod explicit interpretarea eludărilor de bară oblică " +"inversă\n" " \n" -" «echo» interpretează următoarele caractere de eludare de bară oblică inversă:\n" +" «echo» interpretează următoarele caractere de eludare de bară oblică " +"inversă:\n" " \a\talertă (clopoțel)\n" " \\b\tmută cursorul înapoi cu unul sau mai multe spații\n" " \\c\tsuprimă ieșirea ulterioară\n" @@ -3393,17 +3685,21 @@ msgstr "" " \\\\\tbară oblică inversă\n" " \\0nnn\tcaracterul al cărui cod ASCII este NNN (octal). NNN poate fi\n" " \t\tde la 0 la 3 digiți octali\n" -" \\xHH\tcaracterul de opt biți a cărui valoare este HH (hexazecimal). HH\n" +" \\xHH\tcaracterul de opt biți a cărui valoare este HH (hexazecimal). " +"HH\n" " \t\tpoate fi unu sau doi digiți hexazecimali\n" -" \\uHHHH\tcaracterul Unicode a cărui valoare este valoarea hexazecimală HHHH.\n" +" \\uHHHH\tcaracterul Unicode a cărui valoare este valoarea hexazecimală " +"HHHH.\n" " \t\tHHHH poate fi de la unu până la patru digiți hexazecimali.\n" -" \\UHHHHHHHH caracterul Unicode a cărui valoare este valoarea hexazecimală\n" -" \t\tHHHHHHHH. HHHHHHHH poate fi de la unu până la opt digiți hexazecimali.\n" +" \\UHHHHHHHH caracterul Unicode a cărui valoare este valoarea " +"hexazecimală\n" +" \t\tHHHHHHHH. HHHHHHHH poate fi de la unu până la opt digiți " +"hexazecimali.\n" " \n" " Starea de ieșire:\n" " Returnează succes cu excepția cazului în care apare o eroare de scriere." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3431,7 +3727,8 @@ msgstr "" # «help enable», din «bash»; # «bash -c "help enable"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3451,6 +3748,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3459,12 +3762,14 @@ msgid "" msgstr "" "Activează și dezactivează comenzile interne ale shell-ului.\n" " \n" -" Activează și dezactivează comenzile interne ale shell-ului. Dezactivarea\n" +" Activează și dezactivează comenzile interne ale shell-ului. " +"Dezactivarea\n" " vă permite să executați o comandă de pe disc care are același nume ca\n" " și comanda internă a shell-ului, fără a utiliza calea completă.\n" " \n" " Opțiuni:\n" -" -a\tafișează lista comenzilor interne indicând dacă sunt activate sau nu\n" +" -a\tafișează lista comenzilor interne indicând dacă sunt activate sau " +"nu\n" " -n\tdezactivează fiecare NUME sau afișează o listă de comenzi interne\n" " \t\tdezactivate\n" " -p\tafișează lista comenzilor interne într-un format reutilizabil\n" @@ -3476,11 +3781,13 @@ msgstr "" " \n" " Fără opțiuni, fiecare NUME este activat.\n" " \n" -" Pentru a utiliza comanda «test» găsită în $PATH în loc de comanda internă\n" +" Pentru a utiliza comanda «test» găsită în $PATH în loc de comanda " +"internă\n" " de shell, tastați «enable -n test».\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care NUME nu este o comandă shell internă sau apare o eroare." +" Returnează succes, cu excepția cazului în care NUME nu este o comandă " +"shell internă sau apare o eroare." # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -3488,11 +3795,12 @@ msgstr "" # «help eval», din «bash»; # «bash -c "help eval"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:640 +#: builtins.c:648 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" @@ -3500,11 +3808,13 @@ msgid "" msgstr "" "Execută argumente ca o comandă de shell.\n" " \n" -" Combină ARGumentele într-un singur șir, folosește rezultatul ca intrare în\n" +" Combină ARGumentele într-un singur șir, folosește rezultatul ca intrare " +"în\n" " shell și execută comenzile rezultate.\n" " \n" " Starea de ieșire:\n" -" Returnează starea de ieșire a comenzii, sau succes dacă comanda este nulă." +" Returnează starea de ieșire a comenzii, sau succes dacă comanda este " +"nulă." # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -3512,7 +3822,7 @@ msgstr "" # «help getopts», din «bash»; # «bash -c "help getopts"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3561,33 +3871,49 @@ msgstr "" " o literă este urmată de două puncte, se așteaptă ca opțiunea să aibă un\n" " argument, care ar trebui să fie separat de aceasta prin spațiu alb.\n" " \n" -" De fiecare dată când este invocată, «getopts» va plasa următoarea opțiune\n" +" De fiecare dată când este invocată, «getopts» va plasa următoarea " +"opțiune\n" " în variabila shell $nume, inițializând nume dacă nu există, iar indexul\n" -" următorului argument va fi procesat în variabila shell OPTIND. OPTIND este\n" -" inițializată la 1 de fiecare dată când shell-ul sau un script shell este\n" +" următorului argument va fi procesat în variabila shell OPTIND. OPTIND " +"este\n" +" inițializată la 1 de fiecare dată când shell-ul sau un script shell " +"este\n" " invocat. Când o opțiune necesită un argument, «getopts» plasează acel\n" " argument în variabila shell OPTARG.\n" " \n" -" «getopts» raportează erorile într-unul dintre următoarele două moduri. Dacă\n" -" primul caracter al lui ȘIR_OPȚIUNI este două puncte, «getopts» utilizează \n" -" raportarea silențioasă a erorilor. În acest mod, nu este afișat niciun mesaj\n" -" de eroare. Dacă se găsește o opțiune nevalidă, «getopts» plasează caracterul\n" -" de opțiune găsit în OPTARG. Dacă nu este găsit un argument necesar, «getopts»\n" -" plasează un „:” în NUME și pune în OPTARG caracterul de opțiune găsit. Dacă\n" -" «getopts» nu este în modul silențios și se găsește o opțiune nevalidă, «getopts»\n" -" plasează „?” în NUME și dezactivează OPTARG. Dacă nu este găsit un argument\n" -" necesar, un „?” este plasat în NUME, OPTARG este dezactivată și este afișat un\n" +" «getopts» raportează erorile într-unul dintre următoarele două moduri. " +"Dacă\n" +" primul caracter al lui ȘIR_OPȚIUNI este două puncte, «getopts» " +"utilizează \n" +" raportarea silențioasă a erorilor. În acest mod, nu este afișat niciun " +"mesaj\n" +" de eroare. Dacă se găsește o opțiune nevalidă, «getopts» plasează " +"caracterul\n" +" de opțiune găsit în OPTARG. Dacă nu este găsit un argument necesar, " +"«getopts»\n" +" plasează un „:” în NUME și pune în OPTARG caracterul de opțiune găsit. " +"Dacă\n" +" «getopts» nu este în modul silențios și se găsește o opțiune nevalidă, " +"«getopts»\n" +" plasează „?” în NUME și dezactivează OPTARG. Dacă nu este găsit un " +"argument\n" +" necesar, un „?” este plasat în NUME, OPTARG este dezactivată și este " +"afișat un\n" " mesaj de diagnosticare.\n" " \n" -" Dacă variabila shell OPTERR are valoarea 0, «getopts» dezactivează afișarea\n" -" mesajelor de eroare, chiar dacă primul caracter al lui ȘIR_OPȚIUNI nu este \n" +" Dacă variabila shell OPTERR are valoarea 0, «getopts» dezactivează " +"afișarea\n" +" mesajelor de eroare, chiar dacă primul caracter al lui ȘIR_OPȚIUNI nu " +"este \n" " două puncte „:”. OPTERR are valoarea 1 implicit.\n" " \n" -" «getopts» analizează în mod normal parametrii de poziție, dar dacă argumentele\n" +" «getopts» analizează în mod normal parametrii de poziție, dar dacă " +"argumentele\n" " sunt furnizate ca valori ARG, acestea sunt analizate în schimb.\n" " \n" " Starea de ieșire:\n" -" Returnează succes dacă este găsită o opțiune; eșuează dacă se întâlnește\n" +" Returnează succes dacă este găsită o opțiune; eșuează dacă se " +"întâlnește\n" " sfârșitul opțiunilor sau apare o eroare." # R-GC, scrie: @@ -3596,12 +3922,13 @@ msgstr "" # «help exec», din «bash»; # «bash -c "help exec"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:694 +#: builtins.c:702 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" @@ -3609,11 +3936,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Înlocuiește shell-ul cu comanda dată.\n" " \n" @@ -3626,11 +3955,13 @@ msgstr "" " -c\texecută COMANDA într-un mediu gol\n" " -l\tplasează o liniuță în argumentul zero la COMANDA\n" " \n" -" Dacă comanda nu poate fi executată, un shell non-interactiv se va închide, \n" +" Dacă comanda nu poate fi executată, un shell non-interactiv se va " +"închide, \n" " cu excepția cazului în care opțiunea shell „execfail” este setată.\n" " \n" " Starea de ieșire\n" -" Returnează succes, cu excepția cazului în care COMANDA nu este găsită sau\n" +" Returnează succes, cu excepția cazului în care COMANDA nu este găsită " +"sau\n" " apare o eroare de redirecționare." # R-GC, scrie: @@ -3639,7 +3970,7 @@ msgstr "" # «help exit», din «bash»; # «bash -c "help exit"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3657,16 +3988,18 @@ msgstr "" # «help logout», din «bash»; # «bash -c "help logout"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:724 +#: builtins.c:732 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 "" "Iese din shell-ul de autentificare.\n" " \n" -" Iese din shell-ul de autentificare cu starea de ieșire N. Returnează o eroare\n" +" Iese din shell-ul de autentificare cu starea de ieșire N. Returnează o " +"eroare\n" " dacă nu este executată într-un shell de autentificare." # R-GC, scrie: @@ -3675,17 +4008,20 @@ msgstr "" # «help fc», din «bash»; # «bash -c "help fc"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3698,15 +4034,21 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Afișează sau execută comenzi din lista istoricului.\n" " \n" -" «fc» se utilizează pentru a lista sau edita și re-executa comenzi din lista\n" +" «fc» se utilizează pentru a lista sau edita și re-executa comenzi din " +"lista\n" " istoricului.\n" -" PRIMA și ULTIMA pot fi numere care specifică intervalul sau PRIMA poate fi\n" -" un șir, ceea ce înseamnă cea mai recentă comandă care începe cu acel șir.\n" +" PRIMA și ULTIMA pot fi numere care specifică intervalul sau PRIMA poate " +"fi\n" +" un șir, ceea ce înseamnă cea mai recentă comandă care începe cu acel " +"șir.\n" " \n" " Opțiuni:\n" " -e NUME_EDIT\n" @@ -3716,11 +4058,14 @@ msgstr "" " -n\tomite numerele de rând la listare\n" " -r\tinversează ordinea liniilor (cele mai noi sunt listate primele)\n" " \n" -" Cu formatul «fc -s [tipar=înloc ...] [comanda]», COMANDA este re-executată\n" +" Cu formatul «fc -s [tipar=înloc ...] [comanda]», COMANDA este re-" +"executată\n" " după ce este efectuată înlocuirea VECHE=NOUĂ.\n" " \n" -" Un alias util de folosit cu aceasta, este «r='fc -s'», astfel încât tastând \n" -" «r cc» se execută ultima comandă ce începe cu „cc” și tastând «r» se execută\n" +" Un alias util de folosit cu aceasta, este «r='fc -s'», astfel încât " +"tastând \n" +" «r cc» se execută ultima comandă ce începe cu „cc” și tastând «r» se " +"execută\n" " din nou ultima comandă folosită.\n" " \n" " Starea de ieșire:\n" @@ -3733,7 +4078,7 @@ msgstr "" # «help fg», din «bash»; # «bash -c "help fg"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3746,8 +4091,10 @@ msgid "" msgstr "" "Mută procesul în primul plan.\n" " \n" -" Plasează procesul identificat de ID_PROC în primul plan, făcându-l procesul\n" -" curent. Dacă ID_PROC nu este prezent, este utilizată noțiunea shell-ului\n" +" Plasează procesul identificat de ID_PROC în primul plan, făcându-l " +"procesul\n" +" curent. Dacă ID_PROC nu este prezent, este utilizată noțiunea shell-" +"ului\n" " despre procesul curent\n" " \n" " Starea de ieșire:\n" @@ -3759,12 +4106,14 @@ msgstr "" # «help bg», din «bash»; # «bash -c "help bg"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:779 +#: builtins.c:789 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" @@ -3772,12 +4121,15 @@ msgid "" msgstr "" "Mută procesul în fundal.\n" " \n" -" Plasează procesele identificate de fiecare ID_PROC în fundal, ca și cum ar fi\n" -" fost pornite cu „&”. Dacă ID_PROC nu este prezent, se folosește noțiunea\n" +" Plasează procesele identificate de fiecare ID_PROC în fundal, ca și cum " +"ar fi\n" +" fost pornite cu „&”. Dacă ID_PROC nu este prezent, se folosește " +"noțiunea\n" " shell-ului despre procesul curent.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care controlul procesului nu este\n" +" Returnează succes, cu excepția cazului în care controlul procesului nu " +"este\n" " activat sau apare o eroare." # R-GC, scrie: @@ -3786,12 +4138,13 @@ msgstr "" # «help hash», din «bash»; # «bash -c "help hash"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3810,7 +4163,8 @@ msgid "" msgstr "" "Memorizează sau afișează locațiile programelor.\n" " \n" -" Determină și memorizează calea completă a fiecărei comenzi NUME. Dacă nu\n" +" Determină și memorizează calea completă a fiecărei comenzi NUME. Dacă " +"nu\n" " sunt date argumente, sunt afișate informații despre comenzile memorate.\n" " \n" " Opțiuni:\n" @@ -3822,7 +4176,8 @@ msgstr "" " -t\tafișează locația reținută a fiecărui NUME, precedând fiecare\n" " \t\tlocație cu NUMELE corespunzător dacă sunt date mai multe NUME\n" " Argumente:\n" -" NUME\tFiecare NUME este căutat în $PATH și adăugat la lista comenzilor\n" +" NUME\tFiecare NUME este căutat în $PATH și adăugat la lista " +"comenzilor\n" " \t\tmemorate.\n" " \n" " Starea de ieșire:\n" @@ -3835,7 +4190,7 @@ msgstr "" # «help help», din «bash»; # «bash -c "help help"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3853,12 +4208,14 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Afișează informații despre comenzile interne.\n" " \n" " Afișează scurte rezumate ale comenzilor interne. Dacă TIPAR, este\n" -" specificat, oferă ajutor detaliat pentru toate comenzile care se potrivesc\n" +" specificat, oferă ajutor detaliat pentru toate comenzile care se " +"potrivesc\n" " cu TIPARul, în caz contrar, este afișată lista temelor de ajutor.\n" " \n" " Opțiuni:\n" @@ -3871,7 +4228,8 @@ msgstr "" " TIPAR \tTIPAR care specifică o temă de ajutor\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care TIPAR nu este găsit sau este\n" +" Returnează succes, cu excepția cazului în care TIPAR nu este găsit sau " +"este\n" " dată o opțiune nevalidă." # R-GC, scrie: @@ -3880,7 +4238,8 @@ msgstr "" # «help history», din «bash»; # «bash -c "help history"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3904,19 +4263,26 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." msgstr "" "Afișează sau manipulează lista istoricului.\n" " \n" -" Afișează lista istoricului cu numere de linie, prefixând fiecare intrare\n" -" modificată cu un „*”. Un argument de N, listează numai ultimele N intrări.\n" +" Afișează lista istoricului cu numere de linie, prefixând fiecare " +"intrare\n" +" modificată cu un „*”. Un argument de N, listează numai ultimele N " +"intrări.\n" " \n" " Opțiuni:\n" " -c\tșterge lista istoricului ștergând toate intrările\n" @@ -3935,17 +4301,23 @@ msgstr "" " \t\trezultatul fără a-l stoca în lista istoricului\n" " -s\tadaugă ARGumentele la lista istoricului ca o singură intrare\n" " \n" -" Dacă NUME_FIȘIER este dat, acesta este utilizat ca fișierul istoricului.\n" -" Altfel, dacă HISTFILE are o valoare, aceasta este folosită, dacă nu are,\n" +" Dacă NUME_FIȘIER este dat, acesta este utilizat ca fișierul " +"istoricului.\n" +" Altfel, dacă HISTFILE are o valoare, aceasta este folosită, dacă nu " +"are,\n" " se folosește ~/.bash_history.\n" " \n" -" Dacă variabila HISTTIMEFORMAT este definită și nu este nulă, valoarea ei este\n" -" utilizată ca șir de format pentru strftime(3) pentru a imprima marcajul de\n" -" timp asociat cu fiecare intrare din istoric afișată. În caz contrar, nu se\n" +" Dacă variabila HISTTIMEFORMAT este definită și nu este nulă, valoarea ei " +"este\n" +" utilizată ca șir de format pentru strftime(3) pentru a imprima marcajul " +"de\n" +" timp asociat cu fiecare intrare din istoric afișată. În caz contrar, nu " +"se\n" " imprimă marcajele de timp.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n" +" Returnează succes, cu excepția cazului în care este dată o opțiune " +"nevalidă\n" " sau apare o eroare." # R-GC, scrie: @@ -3954,7 +4326,7 @@ msgstr "" # «help jobs», din «bash»; # «bash -c "help jobs"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3984,17 +4356,21 @@ msgstr "" " \n" " Opțiuni:\n" " -l\tlistează ID-urile proceselor, pe lângă informațiile normale\n" -" -n\tlistează numai procesele care s-au schimbat de la ultima notificare\n" +" -n\tlistează numai procesele care s-au schimbat de la ultima " +"notificare\n" " -p\tlistează numai ID-urile proceselor\n" " -r\trestrânge afișarea, la procesele în execuție\n" " -s\trestrânge afișarea, la procesele oprite\n" " \n" -" Dacă este furnizată -x, COMANDA este rulată după ce toate specificațiile\n" -" procesului care apar în ARGumente au fost înlocuite cu ID-ul de proces al\n" +" Dacă este furnizată -x, COMANDA este rulată după ce toate " +"specificațiile\n" +" procesului care apar în ARGumente au fost înlocuite cu ID-ul de proces " +"al\n" " liderului grupului de procese, al procesului respectiv.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n" +" Returnează succes, cu excepția cazului în care este dată o opțiune " +"nevalidă\n" " sau apare o eroare.\n" " Dacă se utilizează „-x”, returnează starea de ieșire a COMENZII." @@ -4004,7 +4380,7 @@ msgstr "" # «help disown», din «bash»; # «bash -c "help disown"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -4032,7 +4408,8 @@ msgstr "" " -r\telimină numai procesele care rulează\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n" +" Returnează succes, cu excepția cazului în care este dată o opțiune " +"nevalidă\n" " sau ID_PROC." # R-GC, scrie: @@ -4041,7 +4418,7 @@ msgstr "" # «help kill», din «bash»; # «bash -c "help kill"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -4077,12 +4454,15 @@ msgstr "" " \t\tnume\n" " -L\tsinonim cu -l\n" " \n" -" Kill este o comandă internă de shell din două motive: permite utilizarea\n" -" ID-urilor de job în locul ID-urilor de proces și permite omorârea proceselor\n" +" Kill este o comandă internă de shell din două motive: permite " +"utilizarea\n" +" ID-urilor de job în locul ID-urilor de proces și permite omorârea " +"proceselor\n" " dacă este atinsă limita de procese pe care le puteți crea.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n" +" Returnează succes, cu excepția cazului în care este dată o opțiune " +"nevalidă\n" " sau apare o eroare." # R-GC, scrie: @@ -4091,14 +4471,15 @@ msgstr "" # «help let», din «bash»; # «bash -c "help let"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -4137,9 +4518,12 @@ msgstr "" "Evaluează expresii aritmetice.\n" " \n" " Evaluează fiecare ARGument ca o expresie aritmetică. Evaluarea se face\n" -" în numere întregi cu lățime fixă, fără verificarea depășirii, dar împărțirea\n" -" la 0 este detectată și semnalată ca o eroare. Următoarea listă de operatori\n" -" este grupată în grupuri de operatori cu prioritate egală. Nivelurile sunt\n" +" în numere întregi cu lățime fixă, fără verificarea depășirii, dar " +"împărțirea\n" +" la 0 este detectată și semnalată ca o eroare. Următoarea listă de " +"operatori\n" +" este grupată în grupuri de operatori cu prioritate egală. Nivelurile " +"sunt\n" " listate în ordinea descrescătoare a priorității.\n" " \n" " \tid++, id--\tpost-incrementare, post-decrementare a variabilei\n" @@ -4173,7 +4557,8 @@ msgstr "" " precedență de mai sus.\n" " \n" " Starea de ieșire:\n" -" Dacă ultimul ARGument este evaluat la 0, «let» returnează 1; în caz contrar,\n" +" Dacă ultimul ARGument este evaluat la 0, «let» returnează 1; în caz " +"contrar,\n" " «let» returnează 0." # R-GC, scrie: @@ -4182,19 +4567,24 @@ msgstr "" # «help read», din «bash»; # «bash -c "help read"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -4202,11 +4592,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -4224,37 +4617,49 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Citește o linie din intrarea standard și o împarte în câmpuri.\n" " \n" -" Citește o singură linie din intrarea standard sau din descriptorul de fișier\n" -" FD dacă este furnizată opțiunea -u. Linia este împărțită în câmpuri ca în\n" -" cazul împărțirii cuvintelor, iar primul cuvânt este atribuit primului NUME, \n" -" al doilea cuvânt celui de-al doilea NUME și așa mai departe, ultimul NUME\n" +" Citește o singură linie din intrarea standard sau din descriptorul de " +"fișier\n" +" FD dacă este furnizată opțiunea -u. Linia este împărțită în câmpuri ca " +"în\n" +" cazul împărțirii cuvintelor, iar primul cuvânt este atribuit primului " +"NUME, \n" +" al doilea cuvânt celui de-al doilea NUME și așa mai departe, ultimul " +"NUME\n" " preluând lista cuvintelor rămase. Doar caracterele găsite în $IFS sunt\n" -" recunoscute ca delimitatori de cuvinte. În mod implicit, caracterul bară oblică\n" +" recunoscute ca delimitatori de cuvinte. În mod implicit, caracterul bară " +"oblică\n" " inversă eludează caracterele delimitatoare și linia nouă.\n" " \n" -" Dacă nu sunt furnizate NUME, linia citită este stocată în variabila REPLY.\n" +" Dacă nu sunt furnizate NUME, linia citită este stocată în variabila " +"REPLY.\n" " \n" " Opțiuni:\n" " -a matrice\n" " \t\tatribuie cuvintele citite indicilor secvențiali ai variabilei\n" " \t\tmatrice MATRICE, începând de la zero\n" -" -d delim\tcontinuă până când este citit primul caracter din DELIM, în loc\n" +" -d delim\tcontinuă până când este citit primul caracter din DELIM, în " +"loc\n" " \t\tde linia nouă\n" " -e\tutilizează Readline pentru a obține linia\n" " -i text\tutilizează TEXT ca text inițial pentru Readline\n" -" -n ncarac\treturnează după citirea a NCARAC caractere în loc să aștepte\n" +" -n ncarac\treturnează după citirea a NCARAC caractere în loc să " +"aștepte\n" " \t\to nouă linie, dar respectă delimitatorul dacă sunt citite mai\n" " \t\tpuțin de NCARAC caractere înainte de delimitator\n" -" -N ncarac\treturnează numai după citirea exactă a NCARAC caractere, cu\n" +" -N ncarac\treturnează numai după citirea exactă a NCARAC caractere, " +"cu\n" " \t\texcepția cazului în care se întâlnește sfârșitul fișierului sau \n" " \t\tdacă timpul de citire expiră, eliminând orice delimitatori\n" -" -p prompt\tafișează șirul PROMPT fără un caracter de linie nouă la final,\n" +" -p prompt\tafișează șirul PROMPT fără un caracter de linie nouă la " +"final,\n" " \t\tînainte de a încerca să citească\n" " -r\tnu permite barelor oblice inverse să eludeze niciun caracter\n" " -s\tnu afișează ieșirea ce vine de la un terminal\n" @@ -4267,11 +4672,13 @@ msgstr "" " \t\tsucces numai dacă intrarea este disponibilă pe descriptorul de\n" " \t\tfișier specificat. Starea de ieșire este mai mare de 128 dacă\n" " \t\ttimpul de expirare este depășit\n" -" -u fd\tcitește din descriptorul de fișier FD în loc de intrarea standard\n" +" -u fd\tcitește din descriptorul de fișier FD în loc de intrarea " +"standard\n" " \n" " Starea de ieșire:\n" " Codul de returnare este zero, cu excepția cazului în care se întâlnește\n" -" sfârșitul fișierului, expirarea timpului de citire (caz în care este mai mare\n" +" sfârșitul fișierului, expirarea timpului de citire (caz în care este mai " +"mare\n" " de 128), apare o eroare de atribuire a variabilei sau este furnizat un\n" " descriptor de fișier nevalid ca argument pentru opțiunea „-u”." @@ -4281,7 +4688,7 @@ msgstr "" # «help return», din «bash»; # «bash -c "help return"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4314,7 +4721,8 @@ msgstr "" # «help set», din «bash»; # «bash -c "help set"», din «bash», sau dintr-un # shell, diferit de «bash». -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -4357,7 +4765,8 @@ 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" @@ -4381,13 +4790,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4404,13 +4818,17 @@ msgstr "" " afișează numele și valorile variabilelor shell.\n" " \n" " Opțiuni:\n" -" -a Marchează variabilele care sunt modificate sau create, pentru export.\n" +" -a Marchează variabilele care sunt modificate sau create, pentru " +"export.\n" " -b Notifică imediat când o sarcină este finalizată.\n" -" -e Termină imediat dacă o comandă termină cu o stare diferită de zero.\n" -" -f Dezactivează folosirea metacaracterelor pentru completarea numelor\n" +" -e Termină imediat dacă o comandă termină cu o stare diferită de " +"zero.\n" +" -f Dezactivează folosirea metacaracterelor pentru completarea " +"numelor\n" " fișierelor (fără „globbing”).\n" " -h Memorizează locația comenzilor pe măsură ce sunt căutate.\n" -" -k Toate argumentele de atribuire sunt plasate în mediul(environment)\n" +" -k Toate argumentele de atribuire sunt plasate în " +"mediul(environment)\n" " unei comenzi, nu doar cele care preced numele comenzii.\n" " -m Activează controlul sarcinii.\n" " -n Citește comenzile, dar nu le execută.\n" @@ -4428,7 +4846,8 @@ msgstr "" " history activează istoricul comenzilor\n" " ignoreeof shell-ul nu va termina după citirea „EOF”\n" " interactive-comments\n" -" permite comentariilor să apară în comenzile interactive\n" +" permite comentariilor să apară în comenzile " +"interactive\n" " keyword la fel ca -k\n" " monitor la fel ca -m\n" " noclobber la fel ca -C\n" @@ -4439,50 +4858,71 @@ msgstr "" " nounset la fel ca -u\n" " onecmd la fel ca -t\n" " physical la fel ca -P\n" -" pipefail valoarea returnată a unei linii de conectare este\n" -" starea ultimei comenzi care a ieșit cu o stare diferită\n" -" de zero sau zero dacă nicio comandă nu a ieșit cu o\n" +" pipefail valoarea returnată a unei linii de conectare " +"este\n" +" starea ultimei comenzi care a ieșit cu o stare " +"diferită\n" +" de zero sau zero dacă nicio comandă nu a ieșit cu " +"o\n" " stare diferită de zero\n" -" posix modifică comportamentul lui «bash» în cazul în care\n" -" operația implicită diferă de standardul Posix, pentru\n" +" posix modifică comportamentul lui «bash» în cazul în " +"care\n" +" operația implicită diferă de standardul Posix, " +"pentru\n" " a se potrivi cu standardul Posix\n" " privileged la fel ca -p\n" " verbose la fel ca -v\n" " vi utilizează o interfață de editare a liniilor în\n" " stilul «vi»\n" " xtrace la fel ca -x\n" -" -p Modul cu privilegii: Activat ori de câte ori ID-urile de utilizator\n" +" -p Modul cu privilegii: Activat ori de câte ori ID-urile de " +"utilizator\n" " reale și efective nu se potrivesc. Dezactivează procesarea \n" -" fișierului $ENV și importul funcțiilor shell. Dezactivarea acestei\n" -" opțiuni face ca uid-ul și gid-ul efectiv să fie stabilite la uid-ul și\n" +" fișierului $ENV și importul funcțiilor shell. Dezactivarea " +"acestei\n" +" opțiuni face ca uid-ul și gid-ul efectiv să fie stabilite la uid-" +"ul și\n" " gid-ul real\n" " -t Termină după citirea și executarea unei comenzi.\n" " -u Tratează variabilele nedefinite ca pe o eroare la substituire.\n" -" -v Afișează liniile de intrare ale shell-ului pe măsură ce sunt citite.\n" -" -x Afișează comenzile și argumentele lor pe măsură ce sunt executate.\n" -" -B Shell-ul va efectua înlocuirea acoladelor (de exp.: a{b,c} → ab ac)\n" -" -C Dacă este specificată, nu permite ca fișierele obișnuite existente să\n" +" -v Afișează liniile de intrare ale shell-ului pe măsură ce sunt " +"citite.\n" +" -x Afișează comenzile și argumentele lor pe măsură ce sunt " +"executate.\n" +" -B Shell-ul va efectua înlocuirea acoladelor (de exp.: a{b,c} → ab " +"ac)\n" +" -C Dacă este specificată, nu permite ca fișierele obișnuite existente " +"să\n" " fie suprascrise prin redirecționarea ieșirii.\n" -" -E Dacă este specificată, capturarea ERR este moștenită de funcțiile shell.\n" -" -H Permite înlocuirea istoricului cu un „!”. Această opțiune este activată\n" +" -E Dacă este specificată, capturarea ERR este moștenită de funcțiile " +"shell.\n" +" -H Permite înlocuirea istoricului cu un „!”. Această opțiune este " +"activată\n" " în mod implicit atunci când shell-ul este interactiv.\n" -" -P Dacă este specificată, legăturile simbolice nu sunt urmate la executarea\n" +" -P Dacă este specificată, legăturile simbolice nu sunt urmate la " +"executarea\n" " comenzilor precum «cd» care schimbă directorul curent.\n" -" -T Dacă este specificată, capturile DEBUG și RETURN sunt moștenite de\n" +" -T Dacă este specificată, capturile DEBUG și RETURN sunt moștenite " +"de\n" " funcțiile shell.\n" " -- Atribuie toate argumentele rămase parametrilor de poziție.\n" -" Dacă nu există argumente rămase, parametrii de poziție sunt eliminați.\n" +" Dacă nu există argumente rămase, parametrii de poziție sunt " +"eliminați.\n" " - Atribuie toate argumentele rămase parametrilor de poziție.\n" " Opțiunile -x și -v sunt dezactivate.\n" " \n" -" Utilizarea lui „+” în loc de „-”, face ca aceste opțiuni să fie dezactivate.\n" +" Utilizarea lui „+” în loc de „-”, face ca aceste opțiuni să fie " +"dezactivate.\n" " Opțiunile pot fi folosite și la invocarea shell-ului. Setul actual de \n" -" opțiuni poate fi găsit în $-. Restul de n ARG sunt parametri poziționali și\n" -" sunt alocați, în ordine, la $1, $2, .. $n. Dacă nu sunt date ARG, toate \n" +" opțiuni poate fi găsit în $-. Restul de n ARG sunt parametri " +"poziționali și\n" +" sunt alocați, în ordine, la $1, $2, .. $n. Dacă nu sunt date ARG, " +"toate \n" " variabilele shell sunt afișate.\n" " \n" " Starea de ieșire:\n" -" Returnează succes cu excepția cazului în care este dată o opțiune nevalidă." +" Returnează succes cu excepția cazului în care este dată o opțiune " +"nevalidă." # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -4490,7 +4930,7 @@ msgstr "" # «help unset», din «bash»; # «bash -c "help unset"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4502,7 +4942,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4520,13 +4961,15 @@ msgstr "" " -n\ttratează fiecare NUME ca referință de nume și anulează variabila\n" " \t\tîn sine, în loc de variabila la care face referire\n" " \n" -" Fără opțiuni, „unset” încearcă mai întâi să anuleze o variabilă și, dacă\n" +" Fără opțiuni, „unset” încearcă mai întâi să anuleze o variabilă și, " +"dacă\n" " aceasta nu reușește, încearcă să anuleze o funcție.\n" " \n" " Unele variabile nu pot fi anulate; consultați, de asemenea, «readonly».\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n" +" Returnează succes, cu excepția cazului în care este dată o opțiune " +"nevalidă\n" " sau un NUME este doar pentru citire." # R-GC, scrie: @@ -4535,12 +4978,13 @@ msgstr "" # «help export», din «bash»; # «bash -c "help export"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4566,7 +5010,8 @@ msgstr "" " Un argument de „--” dezactivează procesarea ulterioară a opțiunilor.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n" +" Returnează succes, cu excepția cazului în care este dată o opțiune " +"nevalidă\n" " sau NUME nu este valid." # R-GC, scrie: @@ -4575,7 +5020,7 @@ msgstr "" # «help readonly», din «bash»; # «bash -c "help readonly"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4597,8 +5042,10 @@ msgid "" msgstr "" "Marchează variabilele shell ca neschimbabile.\n" " \n" -" Marchează fiecare NUME ca fiind doar pentru citire; valorile acestor NUME\n" -" nu pot fi modificate prin atribuirea ulterioară. Dacă este furnizată VALOARE,\n" +" Marchează fiecare NUME ca fiind doar pentru citire; valorile acestor " +"NUME\n" +" nu pot fi modificate prin atribuirea ulterioară. Dacă este furnizată " +"VALOARE,\n" " atribuie VALOARE înainte de a marca ca doar pentru citire.\n" " \n" " Opțiuni:\n" @@ -4611,7 +5058,8 @@ msgstr "" " Un argument de „--” dezactivează procesarea ulterioară a opțiunilor.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n" +" Returnează succes, cu excepția cazului în care este dată o opțiune " +"nevalidă\n" " sau NUME nu este valid." # R-GC, scrie: @@ -4620,7 +5068,7 @@ msgstr "" # «help shift», din «bash»; # «bash -c "help shift"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4645,7 +5093,7 @@ msgstr "" # «help source», din «bash»; # «bash -c "help source"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4660,13 +5108,17 @@ msgid "" msgstr "" "Execută comenzi dintr-un fișier în shell-ul curent.\n" " \n" -" Citește și execută comenzi din NUME_FIȘIER în shell-ul curent. Intrările \n" -" din $PATH sunt utilizate pentru a găsi directorul care conține NUME_FIȘIER.\n" -" Dacă sunt furnizate ARGUMENTE, acestea devin parametrii de poziție atunci\n" +" Citește și execută comenzi din NUME_FIȘIER în shell-ul curent. " +"Intrările \n" +" din $PATH sunt utilizate pentru a găsi directorul care conține " +"NUME_FIȘIER.\n" +" Dacă sunt furnizate ARGUMENTE, acestea devin parametrii de poziție " +"atunci\n" " când este executat NUME_FIȘIER.\n" " \n" " Starea de ieșire:\n" -" Returnează starea ultimei comenzi executate în NUME_FIȘIER; eșuează dacă\n" +" Returnează starea ultimei comenzi executate în NUME_FIȘIER; eșuează " +"dacă\n" " NUME_FIȘIER nu poate fi citit." # R-GC, scrie: @@ -4675,15 +5127,18 @@ msgstr "" # «help suspend», din «bash»; # «bash -c "help suspend"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4691,7 +5146,8 @@ msgstr "" "Suspendă execuția shell-ului.\n" " \n" " Suspendă execuția acestui shell până când primește un semnal SIGCONT.\n" -" Cu excepția cazului în care sunt forțate, shell-urile de autentificare nu pot \n" +" Cu excepția cazului în care sunt forțate, shell-urile de autentificare " +"nu pot \n" " fi suspendate.\n" " \n" " Opțiuni:\n" @@ -4699,7 +5155,8 @@ msgstr "" " \tautentificare\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care controlul sarcinii nu este\n" +" Returnează succes, cu excepția cazului în care controlul sarcinii nu " +"este\n" " activat sau apare o eroare." # R-GC, scrie: @@ -4708,7 +5165,7 @@ msgstr "" # «help test», din «bash»; # «bash -c "help test"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4742,7 +5199,8 @@ 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" @@ -4763,7 +5221,8 @@ 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" @@ -4790,9 +5249,12 @@ msgid "" msgstr "" "Evaluează expresia condițională.\n" " \n" -" Termină cu starea 0 (adevărat) sau 1 (fals) în funcție de evaluarea EXPR.\n" -" Expresiile pot fi unare sau binare. Expresiile unare sunt adesea folosite\n" -" pentru a examina starea unui fișier. Există de-asemeni operatori de șir și\n" +" Termină cu starea 0 (adevărat) sau 1 (fals) în funcție de evaluarea " +"EXPR.\n" +" Expresiile pot fi unare sau binare. Expresiile unare sunt adesea " +"folosite\n" +" pentru a examina starea unui fișier. Există de-asemeni operatori de șir " +"și\n" " operatori de comparație numerică.\n" " \n" " Comportamentul testului depinde de numărul de argumente. Citiți pagina\n" @@ -4802,32 +5264,48 @@ msgstr "" " \n" " -a FIȘIER Adevărat dacă fișierul există.\n" " -b FIȘIER Adevărat dacă fișierul este un dispozitiv de blocuri.\n" -" -c FIȘIER Adevărat dacă fișierul este un dispozitiv de caractere.\n" +" -c FIȘIER Adevărat dacă fișierul este un dispozitiv de " +"caractere.\n" " -d FIȘIER Adevărat dacă fișierul este un director.\n" " -e FIȘIER Adevărat dacă fișierul există.\n" -" -f FIȘIER Adevărat dacă fișierul există și este un fișier normal.\n" -" -g FIȘIER Adevărat dacă fișierul are activat bitul „set-group-id”.\n" +" -f FIȘIER Adevărat dacă fișierul există și este un fișier " +"normal.\n" +" -g FIȘIER Adevărat dacă fișierul are activat bitul „set-group-" +"id”.\n" " -h FIȘIER Adevărat dacă fișierul este o legătură simbolică.\n" " -L FIȘIER Adevărat dacă fișierul este o legătură simbolică..\n" -" -k FIȘIER Adevărat dacă fișierul are activat bitul „sticky” (lipicios).\n" -" -p FIȘIER Adevărat dacă fișierul este o linie de conectare numită.\n" -" -r FIȘIER Adevărat dacă fișierul poate fi citit de dumneavoastră.\n" +" -k FIȘIER Adevărat dacă fișierul are activat bitul " +"„sticky” (lipicios).\n" +" -p FIȘIER Adevărat dacă fișierul este o linie de conectare " +"numită.\n" +" -r FIȘIER Adevărat dacă fișierul poate fi citit de " +"dumneavoastră.\n" " -s FIȘIER Adevărat dacă fișierul există și nu este gol.\n" " -S FIȘIER Adevărat dacă fișierul este un soclu.\n" -" -t DF Adevărat dacă DF(descriptorul de fișier) este deschis pe un terminal.\n" -" -u FIȘIER Adevărat dacă fișierul are activat bitul „set-user-id”.\n" -" -w FIȘIER Adevărat dacă fișierul poate fi scris de dumneavoastră.\n" -" -x FIȘIER Adevărat dacă fișierul poate fi executat de dumneavoastră.\n" -" -O FIȘIER Adevărat dacă fișierul este deținut efectiv de dumneavoastră.\n" -" -G FIȘIER Adevărat dacă fișierul este deținut efectiv de grupul dumneavoastră.\n" -" -N FIȘIER Adevărat dacă fișierul a fost modificat de la ultima citire.\n" -" \n" -" FIȘI1 -nt FIȘI2 Adevărat dacă fișierul 1 este mai nou decât fișierul 2 (conform\n" +" -t DF Adevărat dacă DF(descriptorul de fișier) este deschis " +"pe un terminal.\n" +" -u FIȘIER Adevărat dacă fișierul are activat bitul „set-user-" +"id”.\n" +" -w FIȘIER Adevărat dacă fișierul poate fi scris de " +"dumneavoastră.\n" +" -x FIȘIER Adevărat dacă fișierul poate fi executat de " +"dumneavoastră.\n" +" -O FIȘIER Adevărat dacă fișierul este deținut efectiv de " +"dumneavoastră.\n" +" -G FIȘIER Adevărat dacă fișierul este deținut efectiv de grupul " +"dumneavoastră.\n" +" -N FIȘIER Adevărat dacă fișierul a fost modificat de la ultima " +"citire.\n" +" \n" +" FIȘI1 -nt FIȘI2 Adevărat dacă fișierul 1 este mai nou decât fișierul " +"2 (conform\n" " datei modificării).\n" " \n" -" FIȘI1 -ot FIȘI2 Adevărat dacă fișierul1 este mai vechi decât fișierul2.\n" +" FIȘI1 -ot FIȘI2 Adevărat dacă fișierul1 este mai vechi decât " +"fișierul2.\n" " \n" -" FIȘI1 -ef FIȘI2 Adevărat dacă fișierul1 este o legătură dură către fișierul2.\n" +" FIȘI1 -ef FIȘI2 Adevărat dacă fișierul1 este o legătură dură către " +"fișierul2.\n" " \n" " Operatori de șir:\n" " \n" @@ -4838,26 +5316,35 @@ msgstr "" " \n" " ȘIR1 = ȘIR2 Adevărat dacă șirurile sunt egale.\n" " ȘIR1 != ȘIR2 Adevărat dacă șirurile nu sunt egale.\n" -" ȘIR1 < ȘIR2 Adevărat dacă ȘIR1 se ordonează lexicografic înainte de ȘIR2.\n" -" ȘIR1 > ȘIR2 Adevărat dacă ȘIR1 se ordonează lexicografic după ȘIR2.n\n" +" ȘIR1 < ȘIR2 Adevărat dacă ȘIR1 se ordonează lexicografic înainte de " +"ȘIR2.\n" +" ȘIR1 > ȘIR2 Adevărat dacă ȘIR1 se ordonează lexicografic după " +"ȘIR2.\n" " \n" " Alți operatori:\n" " \n" " -o OPȚIUNE Adevărat dacă opțiunea shell OPȚIUNE este activată.\n" " -v VAR Adevărat dacă este definită variabila shell VAR.\n" -" -R VAR Adevărat dacă variabila shell VAR este definită și este o referință\n" +" -R VAR Adevărat dacă variabila shell VAR este definită și este " +"o referință\n" " de nume.\n" " ! EXPR Adevărat dacă expresia EXPR este falsă.\n" -" EXPR1 -a EXPR2 Adevărat dacă amândouă expresiile EXPR1 și EXPR2 sunt adevărate.\n" -" EXPR1 -o EXPR2 Adevărat dacă fie expresia EXPR1, fie expresia EXPR2 este adevărată.\n" +" EXPR1 -a EXPR2 Adevărat dacă amândouă expresiile EXPR1 și EXPR2 sunt " +"adevărate.\n" +" EXPR1 -o EXPR2 Adevărat dacă fie expresia EXPR1, fie expresia EXPR2 " +"este adevărată.\n" " \n" -" ARG1 OP ARG2 Teste aritmetice. OP este unul dintre -eq, -ne, -lt, -le, -gt, sau -ge.\n" +" ARG1 OP ARG2 Teste aritmetice. OP este unul dintre -eq, -ne, -lt, -" +"le, -gt, sau -ge.\n" " \n" -" Operatorii binari aritmetici returnează adevărat dacă ARG1 este egal, inegal, mai mic\n" -" decât, mai mic decât sau egal, mai mare decât, sau mai mare decât sau egal cu ARG2.\n" +" Operatorii binari aritmetici returnează adevărat dacă ARG1 este egal, " +"inegal, mai mic\n" +" decât, mai mic decât sau egal, mai mare decât, sau mai mare decât sau " +"egal cu ARG2.\n" " \n" " Starea de ieșire:\n" -" Returnează succes dacă EXPR este evaluată ca adevărată; eșuează dacă EXPR este\n" +" Returnează succes dacă EXPR este evaluată ca adevărată; eșuează dacă " +"EXPR este\n" " evaluată ca fiind falsă sau este dat un argument nevalid." # R-GC, scrie: @@ -4866,7 +5353,7 @@ msgstr "" # «help [», din «bash»; # «bash -c "help ["», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4875,7 +5362,8 @@ msgid "" msgstr "" "Evaluează expresia condițională.\n" " \n" -" Acesta este un sinonim pentru comanda internă «test», dar ultimul argument\n" +" Acesta este un sinonim pentru comanda internă «test», dar ultimul " +"argument\n" " trebuie să fie un „]” literal, pentru a se potrivi cu „[” de deschidere." # R-GC, scrie: @@ -4884,11 +5372,12 @@ msgstr "" # «help times», din «bash»; # «bash -c "help times"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4896,7 +5385,8 @@ msgid "" msgstr "" "Afișează timpii procesului.\n" " \n" -" Afișează timpii acumulați de utilizator și sistem pentru shell și pentru toate\n" +" Afișează timpii acumulați de utilizator și sistem pentru shell și pentru " +"toate\n" " procesele sale secundare.\n" " \n" " Starea de ieșire:\n" @@ -4908,60 +5398,85 @@ msgstr "" # «help trap», din «bash»; # «bash -c "help trap"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Capturează semnale și alte evenimente.\n" " \n" -" Definește și activează operatorii care urmează să fie rulați atunci când\n" +" Definește și activează operatorii care urmează să fie rulați atunci " +"când\n" " shell-ul primește semnale sau apar alte evenimente.\n" " \n" -" ARG este o comandă care trebuie citită și executată atunci când shell-ul\n" +" ARG este o comandă care trebuie citită și executată atunci când shell-" +"ul\n" " primește semnalul(ele) SIGNAL_SPEC. Dacă ARG este absentă (și este\n" " furnizat un singur SIGNAL_SPEC) sau „-”, fiecare semnal specificat este\n" " restabilit la valoarea sa originală. Dacă ARG este un șir nul, fiecare\n" -" SIGNAL_SPEC este ignorat de către shell și de comenzile pe care le invocă.\n" -" \n" -" Dacă un SIGNAL_SPEC este EXIT (0), ARG este executat la ieșirea din shell.\n" -" Dacă un SIGNAL_SPEC este DEBUG, ARG este executat înainte de fiecare comandă\n" -" simplă. Dacă un SIGNAL_SPEC este RETURN, ARG este executat de fiecare dată \n" -" când o funcție shell sau un script rulat din . sau comanda internă «source»\n" -" se termină de executat. Un SIGNAL_SPEC de ERR face ca ARG să fie executat\n" -" de fiecare dată când eșecul unei comenzi ar determina terminarea shell-ului\n" +" SIGNAL_SPEC este ignorat de către shell și de comenzile pe care le " +"invocă.\n" +" \n" +" Dacă un SIGNAL_SPEC este EXIT (0), ARG este executat la ieșirea din " +"shell.\n" +" Dacă un SIGNAL_SPEC este DEBUG, ARG este executat înainte de fiecare " +"comandă\n" +" simplă. Dacă un SIGNAL_SPEC este RETURN, ARG este executat de fiecare " +"dată \n" +" când o funcție shell sau un script rulat din . sau comanda internă " +"«source»\n" +" se termină de executat. Un SIGNAL_SPEC de ERR face ca ARG să fie " +"executat\n" +" de fiecare dată când eșecul unei comenzi ar determina terminarea shell-" +"ului\n" " atunci când opțiunea „-e” este activată. \n" " \n" -" Dacă nu sunt furnizate argumente, «trap» afișează lista de comenzi asociate\n" +" Dacă nu sunt furnizate argumente, «trap» afișează lista de comenzi " +"asociate\n" " fiecărui semnal.\n" " \n" " Opțiuni:\n" @@ -4969,13 +5484,17 @@ msgstr "" " \tale acestora\n" " -p\tafișează comenzile de captură asociate fiecărui SIGNAL_SPEC\n" " \n" -" Fiecare SIGNAL_SPEC este fie un nume de semnal în <signal.h>, fie un număr\n" -" de semnal. Numele semnalelor nu fac distincție între majuscule și minuscule,\n" -" iar prefixul SIG este opțional. Un semnal poate fi trimis către shell cu\n" +" Fiecare SIGNAL_SPEC este fie un nume de semnal în <signal.h>, fie un " +"număr\n" +" de semnal. Numele semnalelor nu fac distincție între majuscule și " +"minuscule,\n" +" iar prefixul SIG este opțional. Un semnal poate fi trimis către shell " +"cu\n" " «kill -signal $$».\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care un SIGSPEC este nevalid sau \n" +" Returnează succes, cu excepția cazului în care un SIGSPEC este nevalid " +"sau \n" " este dată o opțiune nevalidă." # R-GC, scrie: @@ -4984,7 +5503,7 @@ msgstr "" # «help type», din «bash»; # «bash -c "help type"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -5010,7 +5529,8 @@ 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 "" "Afișează informații despre comanda «type».\n" " \n" @@ -5027,7 +5547,8 @@ msgstr "" " \t\tfișierului din disc care va fi executat\n" " -p\treturnează fie numele fișierului de pe disc care va fi executat,\n" " \t\tfie nimic dacă «type -t NUME» nu va returna „file”\n" -" -t\tafișează un singur cuvânt care este unul dintre „alias”, „keyword”,\n" +" -t\tafișează un singur cuvânt care este unul dintre „alias”, " +"„keyword”,\n" " \t\t„function”, „builtin”, „file” sau „”, dacă NUME este un alias,\n" " \t\tcuvânt rezervat shell, funcție shell, comandă internă shell,\n" " \t\tfișier pe disc, sau, respectiv, negăsit\n" @@ -5036,7 +5557,8 @@ msgstr "" " NUME\tNumele comenzii de interpretat.\n" " \n" " Starea de ieșire:\n" -" Returnează succes dacă toate NUMEle sunt găsite; eșuează dacă nu sunt găsite." +" Returnează succes dacă toate NUMEle sunt găsite; eșuează dacă nu sunt " +"găsite." # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -5044,11 +5566,13 @@ msgstr "" # «help ulimit», din «bash»; # «bash -c "help ulimit"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -5085,16 +5609,18 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Modifică limitele resurselor shell.\n" " \n" -" Oferă control asupra resurselor disponibile shell-ului și proceselor pe care\n" +" Oferă control asupra resurselor disponibile shell-ului și proceselor pe " +"care\n" " acesta le creează, pe sisteme care permit un astfel de control.\n" " \n" " Opțiuni:\n" @@ -5102,10 +5628,12 @@ msgstr "" " -H\tutilizează limita de resurse „hard”\n" " -a\tsunt raportate toate limitele curente\n" " -b\tdimensiunea memoriei tampon a soclului\n" -" -c\tdimensiunea maximă a fișierelor create cu conținutul memoriei (core)\n" +" -c\tdimensiunea maximă a fișierelor create cu conținutul memoriei " +"(core)\n" " -d\tdimensiunea maximă a segmentului de date al unui proces\n" " -e\tprioritatea maximă de planificare („nice”)\n" -" -f\tdimensiunea maximă a fișierelor scrise de shell și subprocesele sale\n" +" -f\tdimensiunea maximă a fișierelor scrise de shell și subprocesele " +"sale\n" " -i\tnumărul maxim de semnale în așteptare\n" " -k\tnumărul maxim de Kcozi alocate pentru acest proces\n" " -l\tdimensiunea maximă pe care un proces o poate bloca în memorie\n" @@ -5128,12 +5656,15 @@ msgstr "" " \n" " Dacă se dă LIMITA, aceasta este noua valoare a resursei specificate;\n" " valorile speciale de LIMITĂ: „soft”, „hard” și „unlimited” reprezintă\n" -" limita curentă maleabilă, limita curentă dură și, respectiv, fără limită.\n" +" limita curentă maleabilă, limita curentă dură și, respectiv, fără " +"limită.\n" " Altminteri, este afișată valoarea curentă a resursei specificate. Dacă\n" " nu este dată nicio opțiune, atunci se presupune „-f”.\n" " \n" -" Valorile sunt în incremente de 1024 de octeți, cu excepția lui „-t”, care\n" -" este în secunde, a lui „-p”, care este în incremente de 512 octeți și a lui\n" +" Valorile sunt în incremente de 1024 de octeți, cu excepția lui „-t”, " +"care\n" +" este în secunde, a lui „-p”, care este în incremente de 512 octeți și a " +"lui\n" " „-u”, care este un număr nescalat de procese.\n" " \n" " Starea de ieșire:\n" @@ -5146,7 +5677,7 @@ msgstr "" # «help umask», din «bash»; # «bash -c "help umask"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -5169,7 +5700,8 @@ msgstr "" " este omis, afișează valoarea curentă a măștii.\n" " \n" " Dacă MOD începe cu o cifră, acesta este interpretat ca un număr octal;\n" -" altminteri este interpretat ca un șir în format simbolic ca cel acceptat\n" +" altminteri este interpretat ca un șir în format simbolic ca cel " +"acceptat\n" " de chmod(1).\n" " \n" " Opșiuni\n" @@ -5187,23 +5719,27 @@ msgstr "" # «help wait», din «bash»; # «bash -c "help wait"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -5216,61 +5752,85 @@ msgid "" msgstr "" "Așteaptă finalizarea lucrării și returnează starea de ieșire.\n" " \n" -" Așteaptă fiecare proces identificat printr-un ID, care poate fi un ID de\n" +" Așteaptă fiecare proces identificat printr-un ID, care poate fi un ID " +"de\n" " proces sau o specificație de lucrare și raportează starea de terminare\n" " a acestuia. Dacă ID-ul nu este dat, așteaptă toate procesele secundare\n" " active în prezent și starea de returnare este zero. Dacă ID-ul este o\n" -" specificație de lucrare, așteaptă toate procesele din secvența de comenzi\n" +" specificație de lucrare, așteaptă toate procesele din secvența de " +"comenzi\n" " respectivă a lucrării.\n" " \n" -" Dacă este furnizată opțiunea „-n”, așteaptă o singură lucrare din lista de\n" -" ID-uri sau, dacă nu sunt furnizate ID-uri, pentru finalizarea următoarei\n" +" Dacă este furnizată opțiunea „-n”, așteaptă o singură lucrare din lista " +"de\n" +" ID-uri sau, dacă nu sunt furnizate ID-uri, pentru finalizarea " +"următoarei\n" " lucrări și returnează starea de ieșire.\n" " \n" -" Dacă este furnizată opțiunea „-p”, identificatorul de proces sau de lucrare al\n" -" lucrării pentru care este returnată starea de ieșire este atribuit variabilei\n" -" VAR numită de argumentul opțiunii. Variabila va fi anulată inițial, înainte\n" -" de orice atribuire. Acest lucru este util numai atunci când este furnizată\n" +" Dacă este furnizată opțiunea „-p”, identificatorul de proces sau de " +"lucrare al\n" +" lucrării pentru care este returnată starea de ieșire este atribuit " +"variabilei\n" +" VAR numită de argumentul opțiunii. Variabila va fi anulată inițial, " +"înainte\n" +" de orice atribuire. Acest lucru este util numai atunci când este " +"furnizată\n" " opțiunea „-n”.\n" " \n" " Dacă este furnizată opțiunea „-f” și controlul lucrării este activat, \n" -" așteaptă ca ID-ul specificat să se termine, în loc să aștepte ca acesta să\n" +" așteaptă ca ID-ul specificat să se termine, în loc să aștepte ca acesta " +"să\n" " își schimbe starea.\n" " \n" " Starea de ieșire:\n" -" Returnează starea ultimului ID; eșuează dacă ID-ul este nevalid sau este\n" +" Returnează starea ultimului ID; eșuează dacă ID-ul este nevalid sau " +"este\n" " dată o opțiune nevalidă sau dacă „-n” este furnizată și shell-ul nu are\n" " niciun copil pe care să-l aștepte." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Așteaptă finalizarea procesului și returnează starea de ieșire.\n" " \n" -" Așteaptă fiecare proces specificat de un PID și raportează starea de terminare a\n" -" acestuia. Dacă nu este dat PID, așteaptă toate procesele copil active în prezent,\n" +" Așteaptă fiecare proces specificat de un PID și raportează starea de " +"terminare a\n" +" acestuia. Dacă nu este dat PID, așteaptă toate procesele copil active " +"în prezent,\n" " iar starea returnată este zero. PID trebuie să fie un ID de proces.\n" " \n" " Starea de ieșire:\n" -" Returnează starea ultimului PID; eșuează dacă PID este nevalid sau este dată\n" +" Returnează starea ultimului PID; eșuează dacă PID este nevalid sau este " +"dată\n" " o opțiune nevalidă." +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd # comanda: # «help for», din «bash»; # «bash -c "help for"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1549 +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -5286,7 +5846,8 @@ msgstr "" " \n" " Bucla „for” execută o secvență de comenzi pentru fiecare membru dintr-o\n" " listă de elemente. Dacă „in CUVINTE ...;” nu este prezent, atunci se\n" -" presupune „in \"$@\"”. Pentru fiecare element din CUVINTE, se definește\n" +" presupune „in \"$@\"”. Pentru fiecare element din CUVINTE, se " +"definește\n" " NUME ca acel element, și se execută COMENZILE.\n" " \n" " Starea de ieșire:\n" @@ -5298,7 +5859,7 @@ msgstr "" # «help 'for (('», din «bash»; # «bash -c "help 'for (('"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -5334,7 +5895,7 @@ msgstr "" # «help select», din «bash»; # «bash -c "help select"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5377,7 +5938,7 @@ msgstr "" # «help time», din «bash»; # «bash -c "help time"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5412,7 +5973,7 @@ msgstr "" # «help case», din «bash»; # «bash -c "help case"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5436,16 +5997,21 @@ msgstr "" # «help if», din «bash»; # «bash -c "help if"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -5454,12 +6020,17 @@ msgstr "" "Execută comenzi bazate pe condițional.\n" " \n" " Lista „if COMENZI” este executată. Dacă starea sa de ieșire este zero,\n" -" atunci este executată lista „then COMENZI”. În caz contrar, fiecare listă \n" -" „elif COMENZI” este executată pe rând, iar dacă starea sa de ieșire este\n" +" atunci este executată lista „then COMENZI”. În caz contrar, fiecare " +"listă \n" +" „elif COMENZI” este executată pe rând, iar dacă starea sa de ieșire " +"este\n" " zero, lista corespunzătoare „then COMENZI” este executată și comanda\n" -" «if» se completează. În caz contrar, lista „else COMENZI” este executată,\n" -" dacă este prezentă. Starea de ieșire a întregii construcții este starea de\n" -" ieșire a ultimei comenzi executate sau zero dacă nicio condiție nu a fost\n" +" «if» se completează. În caz contrar, lista „else COMENZI” este " +"executată,\n" +" dacă este prezentă. Starea de ieșire a întregii construcții este starea " +"de\n" +" ieșire a ultimei comenzi executate sau zero dacă nicio condiție nu a " +"fost\n" " evaluată ca adevărată.\n" " \n" " Starea de ieșire:\n" @@ -5471,11 +6042,12 @@ msgstr "" # «help while», din «bash»; # «bash -c "help while"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -5495,11 +6067,12 @@ msgstr "" # «help until», din «bash»; # «bash -c "help until"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -5519,7 +6092,7 @@ msgstr "" # «help coproc», din «bash»; # «bash -c "help coproc"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5533,9 +6106,11 @@ msgid "" msgstr "" "Creează un coproces numit NUME.\n" " \n" -" Execută COMANDA în mod asincron, cu ieșirea standard și intrarea standard a\n" +" Execută COMANDA în mod asincron, cu ieșirea standard și intrarea " +"standard a\n" " comenzii conectate printr-o conductă la descriptorii de fișiere alocați\n" -" indicilor 0 și 1 ai unei variabile matrice NUME din shell-ul de execuție.\n" +" indicilor 0 și 1 ai unei variabile matrice NUME din shell-ul de " +"execuție.\n" " NUMELE implicit este „COPROC”.\n" " \n" " Starea de ieșire:\n" @@ -5547,12 +6122,13 @@ msgstr "" # «help function», din «bash»; # «bash -c "help function"», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -5561,13 +6137,15 @@ msgid "" msgstr "" "Definește funcția shell.\n" " \n" -" Creează o funcție de shell numită NUME. Când se invocă ca o comandă simplă,\n" +" Creează o funcție de shell numită NUME. Când se invocă ca o comandă " +"simplă,\n" " NUME rulează COMENZI în contextul shell-ului apelant. Când NUME este \n" " invocat, argumentele sunt transmise funcției ca $1...$n, iar numele\n" " funcției este în $FUNCNAME.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care NUME este protejat la scriere" +" Returnează succes, cu excepția cazului în care NUME este protejat la " +"scriere" # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -5575,7 +6153,7 @@ msgstr "" # «help -m {», din «bash»; # «bash -c "help -m {», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5593,7 +6171,7 @@ msgstr "" " Starea de ieșire:\n" " Returnează starea ultimei comenzi executate." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5611,7 +6189,8 @@ msgstr "" " Echivalent cu argumentul JOB_SPEC al comenzii «fg». Reia o lucrare\n" " oprită sau în fundal. JOB_SPEC poate specifica fie un nume de lucrare,\n" " fie un număr de lucrare. JOB_SPEC urmat de un „&” plasează lucrarea\n" -" în fundal, ca și cum specificația lucrării ar fi fost furnizată ca argument\n" +" în fundal, ca și cum specificația lucrării ar fi fost furnizată ca " +"argument\n" " pentru «bg».\n" " \n" " Starea de ieșire:\n" @@ -5623,7 +6202,7 @@ msgstr "" # «help '(('», din «bash»; # «bash -c "help '(('», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5639,7 +6218,8 @@ msgstr "" " Echivalent cu „let \"EXPRESIA\"”.\n" " \n" " Starea de ieșire:\n" -" Returnează 1 dacă EXPRESIA este evaluată la 0; în caz contrar, returnează 0." +" Returnează 1 dacă EXPRESIA este evaluată la 0; în caz contrar, " +"returnează 0." # R-GC, scrie: # acest mesaj, poate să fie vizualizat, rulînd @@ -5647,13 +6227,16 @@ msgstr "" # «help '[['», din «bash»; # «bash -c "help '[['», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5673,9 +6256,12 @@ msgid "" msgstr "" "Execută comanda condițională.\n" " \n" -" Returnează o stare de 0 sau 1, în funcție de evaluarea expresiei condiționale\n" -" EXPRESIA. Expresiile sunt compuse din aceleași elemente primare folosite de\n" -" comanda INTERNĂ «test» și pot fi combinate folosind următorii operatori:\n" +" Returnează o stare de 0 sau 1, în funcție de evaluarea expresiei " +"condiționale\n" +" EXPRESIA. Expresiile sunt compuse din aceleași elemente primare " +"folosite de\n" +" comanda INTERNĂ «test» și pot fi combinate folosind următorii " +"operatori:\n" " \n" " ( EXPRESIA )\tReturnează valoarea EXPRESIEI\n" " ! EXPRESIA\tAdevărat dacă EXPRESIA este falsă; altfel fals\n" @@ -5684,12 +6270,14 @@ msgstr "" " EXPR1 || EXPR2\tAdevărat dacă fie EXPR1, fie EXPR2 este adevărată;\n" " \t\t\taltfel fals\n" " \n" -" Când se utilizează operatorii „==” și „!=”, șirul din dreapta operatorului\n" +" Când se utilizează operatorii „==” și „!=”, șirul din dreapta " +"operatorului\n" " este utilizat ca model și se realizează potrivirea modelului.\n" " Când se utilizează operatorul „=~”, șirul din dreapta operatorului se\n" " potrivește ca expresie regulată.\n" " \n" -" Operatorii „&&” și „||” nu evaluează EXPR2 dacă EXPR1 este suficientă pentru\n" +" Operatorii „&&” și „||” nu evaluează EXPR2 dacă EXPR1 este suficientă " +"pentru\n" " a determina valoarea expresiei.\n" " \n" " Starea de ieșire:\n" @@ -5701,7 +6289,7 @@ msgstr "" # «help variables», din «bash»; # «bash -c "help variables», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5760,7 +6348,8 @@ msgstr "" " \tInformații despre versiunea acestui Bash.\n" " CDPATH\tO listă de directoare separate prin două puncte\n" " \t\tpentru a căuta directoare date ca argumente pentru «cd».\n" -" GLOBIGNORE\tO listă de modele, separate prin două puncte, care descriu nume\n" +" GLOBIGNORE\tO listă de modele, separate prin două puncte, care descriu " +"nume\n" " \t\tde fișiere care trebuie ignorate de extinderea numelui de cale.\n" " HISTFILE\tNumele fișierului în care este stocat istoricul comenzilor.\n" " HISTFILESIZE\n" @@ -5770,14 +6359,17 @@ msgstr "" " HOME\tCalea completă către directorul dumneavoastră de conectare.\n" " HOSTNAME\tNumele gazdei curente.\n" " HOSTTYPE\tTipul de CPU pe care rulează această versiune de Bash.\n" -" IGNOREEOF\tControlează acțiunea shell-ului la primirea unui caracter „EOF”\n" +" IGNOREEOF\tControlează acțiunea shell-ului la primirea unui caracter " +"„EOF”\n" " \t\tca unică intrare. Dacă este definită, atunci valoarea acesteia\n" " \t\teste numărul de caractere „EOF” care pot fi văzute într-un rând\n" " \t\tpe o linie goală înainte ca shell-ul să iasă (implicit 10).\n" " \t\tCând nu este definită, „EOF” înseamnă sfârșitul intrării.\n" " MACHTYPE\tUn șir care descrie sistemul curent pe care rulează Bash.\n" -" MAILCHECK\tCât de des, în secunde, verifică Bash dacă există e-mailuri noi.\n" -" MAILPATH\tO listă de nume de fișiere, separate prin două puncte, pe care\n" +" MAILCHECK\tCât de des, în secunde, verifică Bash dacă există e-mailuri " +"noi.\n" +" MAILPATH\tO listă de nume de fișiere, separate prin două puncte, pe " +"care\n" " \t\tBash le verifică pentru e-mailuri noi.\n" " OSTYPE\tVersiunea de Unix pe care rulează această versiune de Bash.\n" " PATH\tO listă de directoare separate prin două puncte în care se caută,\n" @@ -5788,11 +6380,13 @@ msgstr "" " PS1\t\tȘirul de prompt primar.\n" " PS2\t\tȘirul de prompt secundar.\n" " PWD\t\tCalea completă a directorului curent.\n" -" SHELLOPTS\tO listă separată de două puncte, de opțiuni de shell activate.\n" +" SHELLOPTS\tO listă separată de două puncte, de opțiuni de shell " +"activate.\n" " TERM\tNumele tipului actual de terminal.\n" " TIMEFORMAT\tFormatul de ieșire pentru statisticile de timp afișat de\n" " \t\tcuvântul rezervat „time”.\n" -" auto_resume\tNon-null înseamnă că un cuvânt de comandă care apare singur pe o\n" +" auto_resume\tNon-null înseamnă că un cuvânt de comandă care apare singur " +"pe o\n" " \t\tlinie este căutat mai întâi în lista de lucrări opriteîn prezent.\n" " \t\tDacă se găsește acolo, lucrarea este în prim plan. O valoare\n" " \t\t„exact” înseamnă că cuvântul de comandă trebuie să se potrivească\n" @@ -5805,7 +6399,8 @@ msgstr "" " \t\tde înlocuire a istoricului, de obicei „!”. Al doilea este\n" " \t\tcaracterul „înlocuire rapidă”, de obicei „^”. Al treilea\n" " \t\teste caracterul „comentare istoric”, de obicei „#”.\n" -" HISTIGNORE\tO listă de modele separate prin două puncte, utilizată pentru a\n" +" HISTIGNORE\tO listă de modele separate prin două puncte, utilizată " +"pentru a\n" " \t\tdecide ce comenzi ar trebui salvate în lista istoricului.\n" # R-GC, scrie: @@ -5814,7 +6409,7 @@ msgstr "" # «help pushd», din «bash»; # «bash -c "help pushd», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5869,7 +6464,8 @@ msgstr "" " Comanda internă «dirs» afișează stiva de directoare.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este furnizat un argument\n" +" Returnează succes, cu excepția cazului în care este furnizat un " +"argument\n" " nevalid sau dacă schimbarea directorului eșuează." # R-GC, scrie: @@ -5878,7 +6474,7 @@ msgstr "" # «help popd», din «bash»; # «bash -c "help popd», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5925,7 +6521,8 @@ msgstr "" " Comanda internă «dirs» afișează stiva de directoare.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este furnizat un argument\n" +" Returnează succes, cu excepția cazului în care este furnizat un " +"argument\n" " nevalid sau dacă schimbarea directorului eșuează." # R-GC, scrie: @@ -5934,7 +6531,7 @@ msgstr "" # «help dirs», din «bash»; # «bash -c "help dirs», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5995,7 +6592,7 @@ msgstr "" # «help shopt», din «bash»; # «bash -c "help shopt», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -6024,7 +6621,8 @@ msgstr "" " Opțiuni:\n" " -o\trestricționează NUME_OPȚIUNE la cele definite pentru a fi\n" " \tutilizate cu «set -o»\n" -" -p\tafișează fiecare opțiune de shell cu o indicație a stării acesteia\n" +" -p\tafișează fiecare opțiune de shell cu o indicație a stării " +"acesteia\n" " -q\tsuprimă ieșirea\n" " -s\tactivează (definește) fiecare NUME_OPȚIUNE\n" " -u\tdezactivează (șterge) fiecare NUME_OPȚIUNE\n" @@ -6039,7 +6637,8 @@ msgstr "" # «help printf», din «bash»; # «bash -c "help printf», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -6047,29 +6646,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Formatează și imprimă ARGUMENTELE sub controlul FORMATului.\n" @@ -6084,7 +6690,8 @@ msgstr "" " ieșirea standard; și specificații de format, fiecare dintre acestea \n" " determinând imprimarea următorului argument succesiv.\n" " \n" -" În plus față de specificațiile de format standard descrise în printf(1),\n" +" În plus față de specificațiile de format standard descrise în " +"printf(1),\n" " «printf» interpretează:\n" " \n" " %b\texpandează secvențele de eludare de bară inversată,\n" @@ -6102,7 +6709,8 @@ msgstr "" " furnizată o valoare zero sau un șir nul, după caz.\n" " \n" " Starea de ieșire:\n" -" Returnează succes cu excepția cazului în care este dată o opțiune nevalidă\n" +" Returnează succes cu excepția cazului în care este dată o opțiune " +"nevalidă\n" " sau apare o eroare de scriere sau de atribuire." # R-GC, scrie: @@ -6111,13 +6719,16 @@ msgstr "" # «help complete», din «bash»; # «bash -c "help complete», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -6131,8 +6742,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -6155,9 +6768,12 @@ msgstr "" " -I\taplică completările și acțiunile la cuvântul inițial (de obicei\n" " \t\tcomanda).\n" " \n" -" Când se încearcă completarea, acțiunile sunt aplicate în ordinea în care\n" -" opțiunile cu litere mari sunt listate mai sus. Dacă sunt furnizate mai multe\n" -" opțiuni, opțiunea „-D” are prioritate față de „-E” și ambele au prioritate\n" +" Când se încearcă completarea, acțiunile sunt aplicate în ordinea în " +"care\n" +" opțiunile cu litere mari sunt listate mai sus. Dacă sunt furnizate mai " +"multe\n" +" opțiuni, opțiunea „-D” are prioritate față de „-E” și ambele au " +"prioritate\n" " față de opțiunea „-I”.\n" " \n" " Starea de ieșire:\n" @@ -6170,20 +6786,27 @@ msgstr "" # «help compgen», din «bash»; # «bash -c "help compgen», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Afișează posibilele completări în funcție de opțiuni.\n" " \n" -" Aceasta este destinată să fie utilizată dintr-o funcție shell care generează\n" +" Aceasta este destinată să fie utilizată dintr-o funcție shell care " +"generează\n" " posibile completări. Dacă este furnizat argumentul opțional CUVÂNT, se\n" " generează potriviri cu CUVÂNT.\n" " \n" @@ -6197,13 +6820,16 @@ msgstr "" # «help compopt», din «bash»; # «bash -c "help compopt», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -6243,14 +6869,18 @@ msgstr "" " \n" " Argumente:\n" " \n" -" Fiecare NUME se referă la o comandă pentru care o specificație de completare\n" -" trebuie să fi fost definită anterior folosind comanda internă «complete». \n" -" Dacă nu sunt furnizate NUME, «compopt» trebuie să fie apelată de o funcție \n" +" Fiecare NUME se referă la o comandă pentru care o specificație de " +"completare\n" +" trebuie să fi fost definită anterior folosind comanda internă " +"«complete». \n" +" Dacă nu sunt furnizate NUME, «compopt» trebuie să fie apelată de o " +"funcție \n" " care generează completări în acest moment și opțiunile pentru acest \n" " generator de completare care se execută acum, sunt modificate.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este furnizată o opțiune \n" +" Returnează succes, cu excepția cazului în care este furnizată o " +"opțiune \n" " nevalidă sau NUME nu are o specificație de completare definită." # R-GC, scrie: @@ -6259,21 +6889,26 @@ msgstr "" # «help mapfile», din «bash»; # «bash -c "help mapfile», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -6286,21 +6921,25 @@ 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 "" "Citește linii de la intrarea standard într-o variabilă matrice indexată.\n" " \n" -" Citește linii de la intrarea standard în variabila matrice indexată MATRICE,\n" +" Citește linii de la intrarea standard în variabila matrice indexată " +"MATRICE,\n" " sau din descriptorul de fișier „FD” dacă este furnizată opțiunea „-u”.\n" " Variabila MAPFILE este MATRICEA implicită.\n" " \n" " Opțiuni:\n" -" -d delim Utilizează DELIM pentru a termina liniile, în loc de linie nouă\n" +" -d delim Utilizează DELIM pentru a termina liniile, în loc de linie " +"nouă\n" " -n număr Copiază cel mult NUMĂRul de rânduri. Dacă NUMĂR este 0,\n" " toate liniile sunt copiate\n" " -O origin Începe alocarea către MATRICE la indexul ORIGIN. Indicele\n" @@ -6311,23 +6950,29 @@ msgstr "" " -u fd Citește linii din descriptorul de fișier „FD” în loc de la\n" " intrarea standard\n" " -C apelare\n" -" Evaluează APELARE de fiecare dată când sunt citite linii CANTITATE\n" +" Evaluează APELARE de fiecare dată când sunt citite linii " +"CANTITATE\n" " -c cantitate\n" -" Specifică numărul de linii citite între fiecare apel către APELARE\n" +" Specifică numărul de linii citite între fiecare apel către " +"APELARE\n" " \n" " Argumente:\n" " MATRICE\tNume variabilă matrice de utilizat pentru datele fișierului\n" " \n" -" Dacă „-C” este furnizată fără „-c”, cantitatea implicită este 5000. Când se\n" -" evaluează APELARE, i se furnizează indexul următorului element din matrice\n" +" Dacă „-C” este furnizată fără „-c”, cantitatea implicită este 5000. " +"Când se\n" +" evaluează APELARE, i se furnizează indexul următorului element din " +"matrice\n" " care urmează să fie atribuit și linia care urmează să fie atribuită\n" " acelui element ca argumente suplimentare.\n" " \n" -" Dacă nu este furnizat cu o origine explicită, «mapfile» va șterge MATRICE\n" +" Dacă nu este furnizat cu o origine explicită, «mapfile» va șterge " +"MATRICE\n" " înainte de a-o utiliza pentru asignare.\n" " \n" " Starea de ieșire:\n" -" Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n" +" Returnează succes, cu excepția cazului în care este dată o opțiune " +"nevalidă\n" " sau MATRICE este protejată la scriere sau nu este o matrice indexată." # R-GC, scrie: @@ -6336,7 +6981,7 @@ msgstr "" # «help readarray», din «bash»; # «bash -c "help array», din «bash», sau # dintr-un shell, diferit de «bash». -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -6346,5 +6991,32 @@ msgstr "" " \n" " Un sinonim pentru «mapfile»." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Returnează contextul apelului subrutinei curente.\n" +#~ " \n" +#~ " Fără EXPR, returnează „$linie $nume_fișier”. Cu EXPR, returnează\n" +#~ " „$linie $subrutină $nume_fișier”; aceste informații suplimentare pot " +#~ "să fie\n" +#~ " folosite pentru a furniza o urmărire a stivei.\n" +#~ " \n" +#~ " Valoarea EXPR indică cîte cadre de apel trebuie să se întoarcă " +#~ "înaintea celui\n" +#~ " curent; cadrul superior este cadrul 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "avertizare: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: cheie de matrice asociativă nevalidă" diff --git a/po/ru.gmo b/po/ru.gmo index 9a0ceb5170aacf0f4cf63ab65688807e425c1137..a2a3c70010df3116d11fa1d45cd8e4054b61aba1 100644 GIT binary patch delta 11740 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 LT<G+h&ei_~a6Y)h delta 21594 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 K{cMg(SN{h|%`$WV diff --git a/po/ru.po b/po/ru.po index 7388a6cca..5a8500d3e 100644 --- a/po/ru.po +++ b/po/ru.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2023-08-04 09:34+0300\n" "Last-Translator: Pavlo Marianov <acid@jack.kiev.ua>\n" "Language-Team: Russian <gnu@d07.ru>\n" @@ -16,127 +16,130 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 3.2.2\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "неправильный индекс массива" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: удаляется атрибут nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: не удаётся преобразовать индекс в ассоциативный массив" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: не удаётся присвоить значение нечисловому индексу" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" -msgstr "%s: %s: необходимо использовать индекс при назначении ассоциативному массиву" +msgstr "" +"%s: %s: необходимо использовать индекс при назначении ассоциативному массиву" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: не удаётся создать файл: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: не удаётся найти раскладку для команды" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: первый непробельный символ не является «\"»" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "нет закрывающего «%c» в %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: отсутствует разделитель-двоеточие" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "«%s»: не удаётся отменить привязку в keymap команды" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "расширение скобки: не удаётся выделить память для %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "расширение скобки: не удалось выделить память для %u элементов" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "расширение скобки: не удалось выделить память для «%s»" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "«%s»: недопустимый псевдоним" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "редактирование строки не включено" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "«%s»: недопустимое название раскладки" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: не удаётся прочитать файл: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "«%s»: неизвестное название функции" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s не привязан ни к какой клавише.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s можно вызвать через " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "«%s»: не удаётся отменить привязку" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "счётчик циклов" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "имеет значение только для циклов «for», «while» или «until»" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -145,362 +148,380 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Возвращает контекст вызова текущей подпрограммы.\n" " \n" -" Если выражение не указано, возвращает «$line $filename».\n" -" Если выражение указано, возвращает «$line $subroutine $filename».\n" -" Эти дополнительные данные можно использовать для трассировки\n" -" стека.\n" +" Если выражение не указано, возвращает «$line $filename». Если выражение " +"указано, возвращает\n" +" «$line $subroutine $filename». Эти дополнительные данные можно\n" +" использовать для трассировки стека.\n" " \n" -" Значение выражения означает количество кадров, которое нужно\n" -" вызвать для возврата к текущему кадру. Первый кадр имеет номер 0." +" Значение выражения означает количество кадров, которое нужно вызвать\n" +" для возврата к текущему кадру. Первый кадр имеет номер 0.\n" +" \n" +" Состояние выхода:\n" +" Возвращает 0, если командный процессор не выполняет функцию, или " +"выражение\n" +" является допустимым." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "Не задана переменная HOME" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "слишком много аргументов" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "нулевой каталог" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "Не задана переменная OLDPWD" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "строка %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "предупреждение: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: использование: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: для параметра требуется аргумент" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: требуется числовой аргумент" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: не найден" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: недопустимый параметр" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: недопустимое название параметра" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "«%s»: это недопустимый идентификатор" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "недопустимое восьмеричное число" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "недопустимое шестнадцатеричное число" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "недопустимое число" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: недопустимое указание сигнала" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "«%s»: это не идентификатор процесса и не допустимый указатель задания" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: переменная только для чтения" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format -#| msgid "%s: cannot unset" msgid "%s: cannot assign" msgstr "%s: не удаётся выполнить сброс" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s за пределами диапазона" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "аргумент" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s за пределами диапазона" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: нет такого задания" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: нет управления заданиями" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "нет управления заданиями" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: ограниченный режим" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "ограниченный режим" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: это не не встроенная команда bash" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "ошибка записи: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "ошибка назначения атрибутов терминала: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "ошибка получения атрибутов терминала: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: ошибка определения текущего каталога: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: неоднозначный указатель задания" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "справка отсутствует в этой версии" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: это не индексированный массив" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: не удаётся выполнить сброс: %s доступен только для чтения" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: не удаётся выполнить сброс" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: недопустимое название действия" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: нет определения завершения" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "предупреждение: параметр -F может работать не так, как ожидается" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "предупреждение: параметр -C может работать не так, как ожидается" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "сейчас не выполняет функцию завершения" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "можно использовать только внутри функции" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "«-f» нельзя использовать для создания функций" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: значение функции можно только считать" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: ссылочная переменная не может быть массивом" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: переменные nameref, ссылающиеся сами на себя, не допускаются" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: круговая ссылка на имя" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "«%s»: недопустимое название переменной для ссылки на имя" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: переменные массива нельзя уничтожить таким образом" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: не удаётся преобразовать ассоциативный массив в индексированный" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: присвоение составного массива в кавычках устарело" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "динамическая загрузка недоступна" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "не удаётся открыть общий объект %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "не удаётся найти %s в общем объекте %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: динамически встроенная команда уже загружена" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "загрузка функции %s завершилась ошибкой (%d): не загружена" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: не загружается динамически" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: не удаётся удалить: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: это каталог" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: это не обычный файл" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: файл слишком велик" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: не удаётся запустить бинарный файл" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: не удаётся запустить: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "выход\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "не командный процессор login: используйте «exit»" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Есть остановленные задания.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Есть выполняемые задания.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "команда не найдена" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "указание журнала команд" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: не удаётся открыть временный файл: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "текущий" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "задание %d запущено без возможности управления" @@ -515,11 +536,11 @@ msgstr "%s: недопустимый параметр — %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: для параметра требуется аргумент — %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "хэширование отключено" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: таблица хэшей пустая\n" @@ -546,15 +567,18 @@ msgstr "" #: builtins/help.def:185 #, 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:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: не удаётся открыть файл: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -565,29 +589,42 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"Показанные ниже команды определены внутри командного процессора. Чтобы вывести полный список, введите «help».\n" +"Показанные ниже команды определены внутри командного процессора. Чтобы " +"вывести полный список, введите «help».\n" "Чтобы вывести справку по функции «name», введите «help name».\n" "Чтобы вывести справку по командному процессору, введите «info bash».\n" -"Чтобы вывести справку по командам, которые отсутствуют в этом списке, введите «man -k» или «info».\n" +"Чтобы вывести справку по командам, которые отсутствуют в этом списке, " +"введите «man -k» или «info».\n" "\n" -"Звёздочка (*) рядом с названием команды означает, что эта команда отключена.\n" +"Звёздочка (*) рядом с названием команды означает, что эта команда " +"отключена.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "нельзя использовать больше одного параметра -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "положение журнала команд" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "пустое имя переменной массива" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: параметр не задан или пустой" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: недопустимая метка времени" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: не удалось расширить журнал команд" @@ -601,113 +638,113 @@ msgstr "%s: ошибка inlib" msgid "no other options allowed with `-x'" msgstr "с параметром «-x» нельзя указывать другие параметры" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: аргументами должны быть идентификаторы процессов или заданий" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Неизвестная ошибка" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "ожидается выражение" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: это не индексированный массив" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: недопустимое указание дескриптора файла" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: invalid недопустимый дескриптор файла: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: недопустимое число строк" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: недопустимое начало массива" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: недопустимый квант обратного вызова" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "пустое имя переменной массива" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "требуется поддержка переменных массива" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "«%s»: отсутствует символ форматирования" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "«%c»: недопустимое указание формата времени" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "«%c»: недопустимый символ форматирования" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "предупреждение: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "ошибка анализа формата: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "отсутствует шестнадцатеричная цифра для \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "отсутствует цифра Юникода для \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "отсутствует другой каталог" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: недопустимый аргумент" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<отсутствует текущий каталог>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "стек каталогов пуст" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "индекс стека каталогов" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -722,10 +759,12 @@ 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" @@ -747,7 +786,7 @@ msgstr "" " -N\tпоказать N-ю запись справа в списке каталогов,\n" "\tпоказанного при вызове без параметров, начиная с нуля." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -773,7 +812,8 @@ msgid "" msgstr "" "Добавляет каталог в начало стека каталогов или выполняет\n" " ротацию стека, помещая в начало стека текущий рабочий\n" -" каталог. Если аргументы не указаны, меняет местами два первых каталога.\n" +" каталог. Если аргументы не указаны, меняет местами два первых " +"каталога.\n" " \n" " Параметры:\n" " -n\tпредотвращает обычное изменение каталога при добавлении\n" @@ -793,7 +833,7 @@ msgstr "" " \n" " Встроенная команда dirs показывает стек каталогов." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -831,321 +871,334 @@ msgstr "" " \n" " Встроенная команда dirs показывает стек каталогов." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: недопустимое указание тайм-аута" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "ошибка чтения: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "возврат можно выполнить только из функции или исходного скрипта" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "нельзя одновременно сбросить функцию и переменную" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: это не переменная массива" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: это не функция" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: не удаётся экспортировать" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "счётчик смещений" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "нельзя одновременно задать и сбросить параметры командного процессора" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: недопустимое название параметра командного процессора" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "требуется аргумент с именем файла" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: файл не найден" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "не удаётся приостановить" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "не удаётся приостановить командный процессор login" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s — это псевдонимом для «%s»\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s — это ключевое слово командного процессора\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s — это функция\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s — это специальная встроенная команда bash\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s — это функция\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s — это встроенная команда bash\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s является %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "для %s вычислен хэш (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: недопустимый аргумент ограничения" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "«%c»: недопустимая команда" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: не удаётся получить ограничение: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "ограничение" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: не удаётся изменить ограничение: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "восьмеричное число" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "«%c»: недопустимый оператор символьного режима" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "«%c»: недопустимый знак символьного режима" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " строка " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "последняя команда: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Прерывание..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "ИНФО: " -#: error.c:310 +#: error.c:261 #, fuzzy, c-format -#| msgid "warning: " msgid "DEBUG warning: " msgstr "предупреждение: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "неизвестная ошибка команды" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "неверный тип команды" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "неверный соединитель" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "ошибка перехода" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: не заданы границы переменной" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aпревышено время ожидания ввода: auto-logout\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "не удаётся перенаправить стандартный ввод из /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: «%c»: недопустимый символ форматирования" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] всё ещё существует" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "ошибка конвейера" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: достигнут максимальный уровень вложенности eval (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: достигнут максимальный уровень вложенности source (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: достигнут максимальный уровень вложенности функций (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" -msgstr "%s: ограниченный режим: в названиях команд нельзя использовать косую черту «/»" +msgstr "" +"%s: ограниченный режим: в названиях команд нельзя использовать косую черту " +"«/»" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: команда не найдена" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: неверный интерпретатор" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format -#| msgid "%s: cannot execute binary file" msgid "%s: cannot execute: required file not found" msgstr "%s: не удаётся запустить бинарный файл" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: неверный интерпретатор" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: не удаётся запустить бинарный файл: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "«%s»: это специальная встроенная команда" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "не удаётся скопировать файловый дескриптор %d в %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "слишком много вложенных выражений" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "отрицательное переполнение стека вложенных выражений" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "синтаксическая ошибка в выражении" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "значение можно присвоить только переменной" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "синтаксическая ошибка в назначении переменной" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "деление на 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "ошибка: недопустимый маркер присвоения выражения" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "в условном выражении должен быть символ «:»" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "экспонента меньше нуля" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" -msgstr "после предварительного инкремента или декремента ожидается идентификатор" +msgstr "" +"после предварительного инкремента или декремента ожидается идентификатор" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "отсутствует символ «)»" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "синтаксическая ошибка: ожидается операнд" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "ошибка синтаксиса: недопустимый математический оператор" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (неверный маркер «%s»)" @@ -1162,7 +1215,7 @@ msgstr "недопустимая целочисленная константа" msgid "value too great for base" msgstr "слишком большое значение для основания" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: ошибка выражения\n" @@ -1171,186 +1224,197 @@ msgstr "%s: ошибка выражения\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: нет доступа к родительским каталогам" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "«%s»: это специальная встроенная команда" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "не удаётся сбросить режим nodelay для файлового дескриптора %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "не удаётся выделить новый дескриптор для входных данных bash из файлового дескриптора %d" +msgstr "" +"не удаётся выделить новый дескриптор для входных данных bash из файлового " +"дескриптора %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: у нового файлового дескриптора %d уже есть буфер" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "идентификатор дочернего процесса %d принадлежит запущенному заданию %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "удаление остановленного задания %d с группой процесса %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" -msgstr "add_process: процесс с идентификатором %5ld (%s) помечен как всё ещё активный" +msgstr "" +"add_process: процесс с идентификатором %5ld (%s) помечен как всё ещё активный" #: jobs.c:1839 #, c-format msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: нет процесса с таким идентификатором" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Сигнал %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Завершён" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Остановлен" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Остановлен (%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Запущен" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Завершён (%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Выход %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Состояние неизвестно" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(образ памяти сброшен на диск) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (рабочий каталог: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "дочерний setpgid (%ld к %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" -msgstr "wait: процесс %ld не является дочерним процессом этого командного процессора" +msgstr "" +"wait: процесс %ld не является дочерним процессом этого командного процессора" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: нет записей процесса %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: задание %d остановлено" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: нет текущих заданий" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: выполнение задания прервано" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: задание %d уже выполняется в фоновом режиме" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" -msgstr "waitchld: включается WNOHANG, чтобы предотвратить появление неопределённого блока" +msgstr "" +"waitchld: включается WNOHANG, чтобы предотвратить появление неопределённого " +"блока" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: строка %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (образ памяти сброшен на диск)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(рабочий каталог: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: ошибка вызова getpgrp" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: нельзя управлять заданиями в фоновом режиме" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: дисциплина строки" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "не удаётся задать группу процесса терминала (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "этот командный процессор не может управлять заданиями" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: ошибка утверждения: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1359,376 +1423,396 @@ msgstr "" "\\r\n" "malloc: %s:%d: утверждение не удалось\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "неизвестно" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: блок в списке свободных затёрт" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: вызван с аргументом уже освобождённого блока" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: вызван с аргументом невыделенного блока" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" -msgstr "free: обнаружено отрицательное переполнение; mh_nbytes байт за пределами диапазона" +msgstr "" +"free: обнаружено отрицательное переполнение; mh_nbytes байт за пределами " +"диапазона" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: обнаружено отрицательное переполнение; magic8 повреждён" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: размеры начального и конечного блока отличаются" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: вызван с аргументом невыделенного блока" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" -msgstr "realloc: обнаружено отрицательное переполнение; mh_nbytes байт за пределами диапазона" +msgstr "" +"realloc: обнаружено отрицательное переполнение; mh_nbytes байт за пределами " +"диапазона" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: обнаружено отрицательное переполнение; magic8 повреждён" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: размеры начального и конечного блока отличаются" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: таблица выделения заполнена записями FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p уже есть в таблице как выделенный?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p уже есть в таблице как свободный?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "недопустимое основание" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: узел неизвестен" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: недопустимая служба" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: недопустимое указание сетевого пути" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "сетевые операции не поддерживаются" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: не удаётся изменить язык (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: не удаётся изменить язык (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: не удаётся изменить язык (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: не удаётся изменить язык (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Для вас есть почта в $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Для вас есть почта в $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Сообщения в %s были прочитаны\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "синтаксическая ошибка: требуется математическое выражение" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "синтаксическая ошибка: ожидается «;»" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "синтаксическая ошибка: «((%s))»" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: недопустимый тип инструкции %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" -msgstr "блок here-document в строке %d разделён знаком конца файла (ожидался «%s»)" +msgstr "" +"блок here-document в строке %d разделён знаком конца файла (ожидался «%s»)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" -msgstr "make_redirection: инструкция перенаправления «%d» вышла за пределы диапазона" +msgstr "" +"make_redirection: инструкция перенаправления «%d» вышла за пределы диапазона" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) превысил SIZE_MAX (%lu): строка обрезана" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) превысил SIZE_MAX (%lu): строка " +"обрезана" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "ошибка записи: %s" -#: parse.y:2921 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "достигнуто максимальное число переменных here-document" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "неожиданный конец файла во время поиска «%c»" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "неожиданный конец файла во время поиска «]]»" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "синтаксическая ошибка в условном выражении: неожиданный маркер «%s»" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "синтаксическая ошибка в условном выражении" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "неожиданный маркер «%s», ожидался «)»" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "ожидается символ «)»" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "неожиданный аргумент «%s» для условного унарного оператора" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "неожиданный аргумент для условного унарного оператора" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "неожиданный маркер «%s», ожидается условный бинарный оператор" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "ожидается условный бинарный оператор" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "неожиданный аргумент «%s» для условного бинарного оператора" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "неожиданный аргумент для условного бинарного оператора" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "неожиданный маркер «%c» в условной команде" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "неожиданный маркер «%s» в условной команде" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "неожиданный маркер %d в условной команде" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "синтаксическая ошибка рядом с неожиданным маркером «%s»" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "синтаксическая ошибка рядом с «%s»" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "синтаксическая ошибка: неожиданный конец файла" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "синтаксическая ошибка: неожиданный конец файла" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "синтаксическая ошибка" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Для выхода из командного процессора используйте «%s».\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "неожиданный конец файла во время поиска «)»" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: функция «%s» не найдена" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: возможен бесконечный цикл повторов" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: неверный соединитель «%d»" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: недопустимый идентификатор файла" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: пустой указатель на файл" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: «%c»: недопустимый символ форматирования" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "файловый дескриптор за пределами диапазона" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: неоднозначное перенаправление" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: не удаётся перезаписать существующий файл" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: ограниченный режим: не удаётся перенаправить вывод" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "не удаётся создать временный файл для блока here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: не удаётся присвоить файловый дескриптор переменной" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port не поддерживается без сети" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "ошибка перенаправления: не удаётся создать копию файлового дескриптора" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "не удалось найти /tmp; создайте этот каталог" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp должен быть допустимым названием каталога" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "режим печати игнорируется в интерактивных командных процессорах" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: недопустимый параметр" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "не удаётся установить UID %d: эффективный UID %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "не удаётся установить GID %d: эффективный GID %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "не удаётся запустить отладчик: режим отладки отключён" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: это каталог" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Не удаётся определить название" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, версия %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1737,49 +1821,55 @@ msgstr "" "Использование:\t%s [длинные параметры GNU] [параметры] ...\n" "\t\t%s [длинные параметры GNU] [параметры] файл_скрипта ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Длинные параметры GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Параметры командного процессора:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" -msgstr "\t-irsD или -c команда или -O короткие_параметры\t\t(только при запуске)\n" +msgstr "" +"\t-irsD или -c команда или -O короткие_параметры\t\t(только при запуске)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s или -o параметр\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Для получения дополнительных сведений о параметрах командного процессора введите «%s -c \"help set\"».\n" +msgstr "" +"Для получения дополнительных сведений о параметрах командного процессора " +"введите «%s -c \"help set\"».\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "Для получения дополнительных сведений о встроенных командах введите «%s -c help».\n" +msgstr "" +"Для получения дополнительных сведений о встроенных командах введите «%s -c " +"help».\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Для отправки сообщений об ошибках используйте команду «bashbug».\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Домашняя страница bash: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "Общая справка по использованию программ GNU: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Общая справка по использованию программ GNU: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: недопустимая операция" @@ -1949,284 +2039,316 @@ msgstr "Информационный запрос" msgid "Unknown Signal #%d" msgstr "Неизвестный номер сигнала %d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "неверная подстановка: нет закрывающей «%s» в %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: не удаётся присвоить список элементу массива" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "не удаётся создать конвейер для подстановки процесса" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "не удаётся создать дочерний процесс для подстановки" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "не удаётся открыть именованный конвейер %s для чтения" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "не удаётся открыть именованный конвейер %s для записи" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" -msgstr "не удаётся скопировать именованный конвейер %s в файловый дескриптор %d" +msgstr "" +"не удаётся скопировать именованный конвейер %s в файловый дескриптор %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "подстановка команды: во входных данных проигнорирован нулевой байт" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" +"command_substitute: не удаётся скопировать конвейер в файловый дескриптор 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "не удаётся создать конвейер для подстановки команды" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "не удаётся создать дочерний процесс для подстановки команды" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" -msgstr "command_substitute: не удаётся скопировать конвейер в файловый дескриптор 1" +msgstr "" +"command_substitute: не удаётся скопировать конвейер в файловый дескриптор 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: недопустимое название переменной для ссылки на имя" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: недопустимое непрямое раскрытие" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: недопустимое имя переменной" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: параметр не задан" +msgid "%s: bad substitution" +msgstr "%s: недопустимая подстановка" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: параметр не задан или пустой" +msgid "%s: parameter not set" +msgstr "%s: параметр не задан" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: заданное подстрокой выражение меньше нуля" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: недопустимая подстановка" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: такое присвоение невозможно" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "в будущих версиях командный процессор оценка будет выполняться как математическая подстановка" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"в будущих версиях командный процессор оценка будет выполняться как " +"математическая подстановка" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "неверная подстановка: нет закрывающей «`» в %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "нет совпадений: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "ожидается аргумент" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: ожидается целочисленное выражение" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "ожидается символ «)»" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "ожидается символ «)», обнаружено %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: ожидается бинарный оператор" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: ожидается унарный оператор" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "отсутствует символ «]»" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "синтаксическая ошибка: неожиданный «%s»" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "недопустимый номер сигнала" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "обработка ловушек: достигнут максимальный уровень вложенности обработки ловушек (%d)" +msgstr "" +"обработка ловушек: достигнут максимальный уровень вложенности обработки " +"ловушек (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: неверное значение в trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, 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:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: неверный сигнал %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "ошибка импорта определения функции для «%s»" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "слишком высокий уровень командного процессора (%d); сбрасывается до 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "достигнуто максимальное число переменных here-document" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: в текущей области отсутствует контекст функции" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: переменной не может быть присвоено значение" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: целое числе присваивается ссылке на имя" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: в текущей области отсутствует контекст функции" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s имеет пустую exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "недопустимый символ %d в exportstr для %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "отсутствует «=» в exportstr для %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "pop_var_context: заголовок shell_variables не является контекстом функции" +msgstr "" +"pop_var_context: заголовок shell_variables не является контекстом функции" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: отсутствует контекст global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: заголовок shell_variables не является областью временного окружения" +msgstr "" +"pop_scope: заголовок shell_variables не является областью временного " +"окружения" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: не удаётся открыть как ФАЙЛ" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: недопустимое значение для дескриптора файла трассировки" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: значение совместимости за пределами диапазона" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -#| msgid "Copyright (C) 2020 Free Software Foundation, Inc." -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "© Free Software Foundation, Inc, 2020." -#: version.c:47 version2.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" +#: 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" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, версия %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "Это свободное программное обеспечение. Вы можете изменять и распространять его." +msgstr "" +"Это свободное программное обеспечение. Вы можете изменять и распространять " +"его." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "НИКАКАЯ ГАРАНТИЯ не предоставляется в пределах, допускаемых законом." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: не удаётся выделить %lu байт (выделено %lu байт)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: не удаётся выделить %lu байт" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: не удаётся выделить %lu байт (выделено %lu байт)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: не удаётся выделить %lu байт" @@ -2240,8 +2362,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] имя [имя ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpvsPSVX] [-m раскладка] [-f файл] [-q имя] [-u name] [-r послед_клавиш] [-x послед_клавиш:команда_shell] [послед_клавиш:фнкц_readline или команда_readline]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpvsPSVX] [-m раскладка] [-f файл] [-q имя] [-u name] [-r " +"послед_клавиш] [-x послед_клавиш:команда_shell] [послед_клавиш:фнкц_readline " +"или команда_readline]" #: builtins.c:56 msgid "break [n]" @@ -2260,7 +2387,8 @@ msgid "caller [expr]" msgstr "caller [выражение]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [каталог]" #: builtins.c:68 @@ -2273,14 +2401,16 @@ msgstr "command [-pVv] команда [аргумент ...]" #: builtins.c:78 #, fuzzy -#| msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]" -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" msgstr "declare [-aAfFgiIlnrtux] [-p] [имя[=значение] ...]" #: builtins.c:80 #, fuzzy -#| msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..." -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" msgstr "typeset [-aAfFgiIlnrtux] [-p] имя[=значение] ..." #: builtins.c:82 @@ -2321,7 +2451,9 @@ msgstr "logout [n]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "fc [-e редактор] [-lnr] [первая] [последняя] или fc -s [шаблон=замена] [команда]" +msgstr "" +"fc [-e редактор] [-lnr] [первая] [последняя] или fc -s [шаблон=замена] " +"[команда]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2340,8 +2472,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [шаблон ...]" #: builtins.c:123 -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:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2352,16 +2488,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [задание ... | pid ...]" #: builtins.c:134 -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:136 msgid "let arg [arg ...]" msgstr "let аргумент [аргумент ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a массив] [-d разделитель] [-i текст] [-n число_символов] [-N число_символов] [-p приглашение] [-t тайм-аут] [-u fd] [имя ...]" +#, fuzzy +msgid "" +"read [-Eers] [-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 fd] [имя ...]" #: builtins.c:140 msgid "return [n]" @@ -2369,7 +2514,6 @@ msgstr "return [n]" #: builtins.c:142 #, fuzzy -#| msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]" msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]" msgstr "set [-abefhkmnptuvxBCHP] [-o параметр] [--] [аргумент ...]" @@ -2410,7 +2554,8 @@ msgid "[ arg... ]" msgstr "[ аргумент... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[аргумент] сигнал ...]" #: builtins.c:168 @@ -2419,7 +2564,6 @@ msgstr "type [-afptP] имя [имя ...]" #: builtins.c:171 #, fuzzy -#| msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]" msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]" msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [ограничение]" @@ -2436,110 +2580,138 @@ msgid "wait [pid ...]" msgstr "wait [идентификатор ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for ИМЯ [in СЛОВА... ;] do КОМАНДЫ; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( выраж1; выраж2; выраж3 )); do КОМАНДЫ; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select ИМЯ [in СЛОВА ... ;] do КОМАНДЫ; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] конвейер" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case СЛОВО in [ШАБЛОН [| ШАБЛОН]...) КОМАНДЫ ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if КОМАНДЫ; then КОМАНДЫ; [ elif КОМАНДЫ; then КОМАНДЫ; ]... [ else КОМАНДЫ; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if КОМАНДЫ; then КОМАНДЫ; [ elif КОМАНДЫ; then КОМАНДЫ; ]... [ else " +"КОМАНДЫ; ] fi" + +#: builtins.c:198 #, fuzzy -#| msgid "while COMMANDS; do COMMANDS; done" msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while КОМАНДЫ; do КОМАНДЫ; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy -#| msgid "until COMMANDS; do COMMANDS; done" msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until КОМАНДЫ; do КОМАНДЫ; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [ИМЯ] команда [перенаправления]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function ИМЯ { КОМАНДЫ ; } или ИМЯ () { КОМАНДЫ ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ КОМАНДЫ ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "задание [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( выражение ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ выражение ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" -msgstr "переменные — имена и значения некоторых переменных командного процессора" +msgstr "" +"переменные — имена и значения некоторых переменных командного процессора" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | каталог]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [параметр ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v переменная] формат [аргументы]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o параметр] [-A действие] [-G глоб_шаблон] [-W список_слов] [-F функция] [-C команда] [-X фильтр_шабл] [-P префикс] [-S суффикс] [имя ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o параметр] [-A действие] [-G " +"глоб_шаблон] [-W список_слов] [-F функция] [-C команда] [-X фильтр_шабл] [-P " +"префикс] [-S суффикс] [имя ...]" -#: builtins.c:235 -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 +#, fuzzy +msgid "" +"compgen [-V varname] [-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:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o параметр] [-DEI] [имя ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d разделитель] [-n число] [-O начало] [-s число] [-t] [-u fd] [-C callback] [-c quantum] [массив]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d разделитель] [-n число] [-O начало] [-s число] [-t] [-u fd] [-C callback] [-c quantum] [массив]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d разделитель] [-n число] [-O начало] [-s число] [-t] [-u fd] [-C " +"callback] [-c quantum] [массив]" -#: builtins.c:256 +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d разделитель] [-n число] [-O начало] [-s число] [-t] [-u fd] [-" +"C callback] [-c quantum] [массив]" + +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2554,7 +2726,8 @@ 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" @@ -2574,7 +2747,7 @@ msgstr "" " alias возвращает истину, если для указанного имени был задан\n" " псевдоним." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2590,42 +2763,8 @@ msgstr "" " \n" " Возвращает успех, если имя связано с существующим псевдонимом." -#: builtins.c:291 +#: builtins.c:293 #, fuzzy -#| msgid "" -#| "Set Readline key bindings and variables.\n" -#| " \n" -#| " Bind a key sequence to a Readline function or a macro, or set a\n" -#| " Readline variable. The non-option argument syntax is equivalent to\n" -#| " that found in ~/.inputrc, but must be passed as a single argument:\n" -#| " e.g., bind '\"\\C-x\\C-r\": re-read-init-file'.\n" -#| " \n" -#| " 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" -#| " 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" -#| " 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" -#| " -r keyseq Remove the binding for KEYSEQ.\n" -#| " -f filename Read key bindings from FILENAME.\n" -#| " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" -#| " \t\t\t\tKEYSEQ is entered.\n" -#| " -X\t\t List key sequences bound with -x and associated commands\n" -#| " in a form that can be reused as input.\n" -#| " \n" -#| " Exit Status:\n" -#| " bind returns 0 unless an unrecognized option is given or an error occurs." msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2637,25 +2776,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2664,14 +2808,18 @@ msgstr "" "Определение привязок клавиш и переменных readline.\n" " \n" " Привязывает последовательность клавиш функции readline или макросу\n" -" или задаёт переменную readline. Синтаксис аргументов без параметров аналогичен\n" -" синтаксису файла ~/.inputrc, но всё должно передаваться в одном аргументе,\n" +" или задаёт переменную readline. Синтаксис аргументов без параметров " +"аналогичен\n" +" синтаксису файла ~/.inputrc, но всё должно передаваться в одном " +"аргументе,\n" " например bind '\"\\C-x\\C-r\": перечитать-init-файл'.\n" " \n" " Параметры:\n" -" -m раскладка использовать указанную раскладку во время выполнения\n" +" -m раскладка использовать указанную раскладку во время " +"выполнения\n" " данной команды. Допустимые раскладки: emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command и vi-insert.\n" " -l вывести названия функций\n" " -P вывести названия функций и их привязки\n" @@ -2686,18 +2834,21 @@ msgstr "" " -v вывести имена переменных и их значения\n" " в формате для повторного использования\n" " -q имя_функции\t вывести клавиши, вызывающие указанную функцию\n" -" -u имя_функции отвязать все клавиши, привязанные к указанной функции\n" +" -u имя_функции отвязать все клавиши, привязанные к указанной " +"функции\n" " -r посл-клавиш удалить привязку для последовательности клавиш\n" " -f файл прочитать привязки из файла\n" " -x посл-клавиш:кмнд-shell выполнить команду bash, если введена\n" " \t\t\t\tпоследовательность клавиш\n" -" -X\t\t вывести последовательности клавиш, привязанные с помощью -x, и связанные команды\n" +" -X\t\t вывести последовательности клавиш, привязанные с помощью -" +"x, и связанные команды\n" " в формате для повторного использования\n" " \n" " Состояние выхода:\n" -" bind возвращает 0, если был указан допустимый параметр или не возникла ошибка." +" bind возвращает 0, если был указан допустимый параметр или не возникла " +"ошибка." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2709,13 +2860,14 @@ msgid "" msgstr "" "Прерывание цикла for, while или until.\n" " \n" -" Прерывает цикл for, while или until. Если указано N, прерывает N вложенных\n" +" Прерывает цикл for, while или until. Если указано N, прерывает N " +"вложенных\n" " циклов.\n" " \n" " Состояние выхода:\n" " Возвращает 0, если N не больше или равно 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2733,24 +2885,15 @@ msgstr "" " Состояние выхода:\n" " Возвращает 0, если N не больше или равно 1." -#: builtins.c:354 +#: builtins.c:356 #, fuzzy -#| msgid "" -#| "Execute shell builtins.\n" -#| " \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" -#| " \n" -#| " Exit Status:\n" -#| " Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n" -#| " not a shell builtin.." msgid "" "Execute shell builtins.\n" " \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" @@ -2759,14 +2902,17 @@ msgstr "" "Выполнение встроенных команд.\n" " \n" " Выполняет встроенную команду bash с аргументами\n" -" без поиска команды. Это полезно, если нужно переопределить встроенную команду\n" -" как функцию командного процессора, в этой функции нужно выполнить встроенную команду.\n" +" без поиска команды. Это полезно, если нужно переопределить встроенную " +"команду\n" +" как функцию командного процессора, в этой функции нужно выполнить " +"встроенную команду.\n" " \n" " Состояние выхода:\n" -" Возвращает состояние выхода встроенной команды или ложь, если указанная команда bash\n" +" Возвращает состояние выхода встроенной команды или ложь, если указанная " +"команда bash\n" " не является встроенной." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2783,7 +2929,8 @@ msgid "" msgstr "" "Возвращает контекст вызова текущей подпрограммы.\n" " \n" -" Если выражение не указано, возвращает «$line $filename». Если выражение указано, возвращает\n" +" Если выражение не указано, возвращает «$line $filename». Если выражение " +"указано, возвращает\n" " «$line $subroutine $filename». Эти дополнительные данные можно\n" " использовать для трассировки стека.\n" " \n" @@ -2791,57 +2938,31 @@ msgstr "" " для возврата к текущему кадру. Первый кадр имеет номер 0.\n" " \n" " Состояние выхода:\n" -" Возвращает 0, если командный процессор не выполняет функцию, или выражение\n" +" Возвращает 0, если командный процессор не выполняет функцию, или " +"выражение\n" " является допустимым." -#: builtins.c:387 +#: builtins.c:389 #, fuzzy -#| msgid "" -#| "Change the shell working directory.\n" -#| " \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" -#| " 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" -#| " its value is used for DIR.\n" -#| " \n" -#| " Options:\n" -#| " -L\tforce symbolic links to be followed: resolve symbolic links in\n" -#| " \tDIR after processing instances of `..'\n" -#| " -P\tuse the physical directory structure without following symbolic\n" -#| " \tlinks: resolve symbolic links in DIR before processing instances\n" -#| " \tof `..'\n" -#| " -e\tif the -P option is supplied, and the current working directory\n" -#| " \tcannot be determined successfully, exit with a non-zero status\n" -#| " -@ on systems that support it, present a file with extended attributes\n" -#| " as a directory containing the file attributes\n" -#| " \n" -#| " The default is to follow symbolic links, as if `-L' were specified.\n" -#| " `..' is processed by removing the immediately previous pathname component\n" -#| " back to a slash or the beginning of DIR.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns 0 if the directory is changed, and if $PWD is set successfully when\n" -#| " -P is used; non-zero otherwise." msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2857,25 +2978,31 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Смена рабочего каталога командного процессора.\n" " \n" -" Изменяет текущий каталог на указанный каталог. Каталог по умолчанию хранится в\n" +" Изменяет текущий каталог на указанный каталог. Каталог по умолчанию " +"хранится в\n" " переменной $HOME командного процессора.\n" " \n" " Переменная $CDPATH определяет путь поиска каталога, содержащего\n" -" указанный каталог. Альтернативные каталоги в $CDPATH разделяются двоеточием (:).\n" -" Пустое название каталога соответствует текущему каталогу. Если каталог начинается\n" +" указанный каталог. Альтернативные каталоги в $CDPATH разделяются " +"двоеточием (:).\n" +" Пустое название каталога соответствует текущему каталогу. Если каталог " +"начинается\n" " с косой черты (/), переменная $CDPATH не используется.\n" " \n" " Если каталог не найден и задан параметр «cdable_vars»,\n" -" слово считается названием переменной. Если эта переменная содержит значение,\n" +" слово считается названием переменной. Если эта переменная содержит " +"значение,\n" " оно используется для каталога.\n" " \n" " Параметры:\n" @@ -2886,32 +3013,24 @@ msgstr "" " \tобработки «..»\n" " -e\tесли указан параметр -P, и не удаётся определить текущий\n" " \tрабочий каталог, команда завершается с ненулевым состоянием\n" -" -@ на системах, которые это поддерживают, представляет файл с расширенными\n" +" -@ на системах, которые это поддерживают, представляет файл с " +"расширенными\n" " атрибутами как каталог, содержащий атрибуты файла\n" " \n" -" По умолчанию выполняется переход по символьным ссылкам (как при указании параметра «-L»).\n" -" «..» обрабатывается путём удаления первого компонента пути до косой черты\n" +" По умолчанию выполняется переход по символьным ссылкам (как при указании " +"параметра «-L»).\n" +" «..» обрабатывается путём удаления первого компонента пути до косой " +"черты\n" " или из начала каталога.\n" " \n" " Состояние выхода:\n" -" Возвращает 0, если каталог был изменён, и если $PWD был успешно установлен\n" -" при использовании параметра -P. В противном случае возвращается ненулевое состояние." +" Возвращает 0, если каталог был изменён, и если $PWD был успешно " +"установлен\n" +" при использовании параметра -P. В противном случае возвращается " +"ненулевое состояние." -#: builtins.c:425 +#: builtins.c:427 #, fuzzy -#| msgid "" -#| "Print the name of the current working directory.\n" -#| " \n" -#| " Options:\n" -#| " -L\tprint the value of $PWD if it names the current working\n" -#| " \tdirectory\n" -#| " -P\tprint the physical directory, without any symbolic links\n" -#| " \n" -#| " By default, `pwd' behaves as if `-L' were specified.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns 0 unless an invalid option is given or the current directory\n" -#| " cannot be read." msgid "" "Print the name of the current working directory.\n" " \n" @@ -2939,7 +3058,7 @@ msgstr "" " Возвращает 0, если был указан допустимый параметр или можно прочитать\n" " текущий каталог." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2955,7 +3074,7 @@ msgstr "" " Состояние выхода:\n" " Всегда возвращает успех." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2967,7 +3086,7 @@ msgstr "" " Состояние выхода:\n" " Всегда возвращает успех." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2979,28 +3098,14 @@ msgstr "" " Состояние выхода:\n" " Всегда возвращает ошибку." -#: builtins.c:471 +#: builtins.c:473 #, fuzzy -#| 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" -#| " on disk when a function with the same name exists.\n" -#| " \n" -#| " Options:\n" -#| " -p\tuse a default value for PATH that is guaranteed to find all of\n" -#| " \tthe standard utilities\n" -#| " -v\tprint a description of COMMAND similar to the `type' builtin\n" -#| " -V\tprint a more verbose description of each COMMAND\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns exit status of COMMAND, or failure if COMMAND is not found." 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" @@ -3014,12 +3119,15 @@ msgid "" msgstr "" "Выполнение простой команды или вывод информации о командах.\n" " \n" -" Выполняет команду с аргументами без поиска функции командного процессора\n" -" или выводит информацию об указанных командах. Можно использовать для вызова команд\n" +" Выполняет команду с аргументами без поиска функции командного " +"процессора\n" +" или выводит информацию об указанных командах. Можно использовать для " +"вызова команд\n" " с диска, когда функция с таким именем уже существует.\n" " \n" " Параметры:\n" -" -p\tиспользовать значение по умолчанию для $PATH, чтобы гарантированно\n" +" -p\tиспользовать значение по умолчанию для $PATH, чтобы " +"гарантированно\n" " \tнайти все стандартные команды\n" " -v\tвывести описание команды аналогично встроенной команде «type»\n" " -V\tвывести более подробное описание каждой команды\n" @@ -3027,44 +3135,8 @@ msgstr "" " Состояние выхода:\n" " Возвращает состояние выхода КОМАНДЫ или ошибку, если КОМАНДА не найдена." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy -#| msgid "" -#| "Set variable values and attributes.\n" -#| " \n" -#| " Declare variables and give them attributes. If no NAMEs are given,\n" -#| " display the attributes and values of all variables.\n" -#| " \n" -#| " Options:\n" -#| " -f\trestrict action or display to function names and definitions\n" -#| " -F\trestrict display to function names only (plus line number and\n" -#| " \tsource file when debugging)\n" -#| " -g\tcreate global variables when used in a shell function; otherwise\n" -#| " \tignored\n" -#| " -p\tdisplay the attributes and value of each NAME\n" -#| " \n" -#| " Options which set attributes:\n" -#| " -a\tto make NAMEs indexed arrays (if supported)\n" -#| " -A\tto make NAMEs associative arrays (if supported)\n" -#| " -i\tto make NAMEs have the `integer' attribute\n" -#| " -l\tto convert NAMEs to lower case on assignment\n" -#| " -n\tmake NAME a reference to the variable named by its value\n" -#| " -r\tto make NAMEs readonly\n" -#| " -t\tto make NAMEs have the `trace' attribute\n" -#| " -u\tto convert NAMEs to upper case on assignment\n" -#| " -x\tto make NAMEs export\n" -#| " \n" -#| " Using `+' instead of `-' turns off the given attribute.\n" -#| " \n" -#| " 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" -#| " command. The `-g' option suppresses this behavior.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is supplied or a variable\n" -#| " assignment error occurs." msgid "" "Set variable values and attributes.\n" " \n" @@ -3092,12 +3164,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -3106,14 +3180,16 @@ msgid "" msgstr "" "Указание значений переменных и атрибутов.\n" " \n" -" Объявление переменных и назначение им атрибутов. Если имена не указаны,\n" +" Объявление переменных и назначение им атрибутов. Если имена не " +"указаны,\n" " выводит атрибуты и значения всех переменных.\n" " \n" " Параметры:\n" " -f\tограничить действие или вывести имена функций и их определения\n" " -F\tвывести только имена функций (а также номер строки\n" " \tв исходном файле при отладке)\n" -" -g\tсоздать глобальные переменные при использовании в функции командного процессора; в противном случае\n" +" -g\tсоздать глобальные переменные при использовании в функции " +"командного процессора; в противном случае\n" " \tигнорируется\n" " -p\tвывести атрибуты и значения каждого имени\n" " \n" @@ -3122,7 +3198,8 @@ msgstr "" " -A\tсделать имена ассоциативными массивами (если поддерживается)\n" " -i\tназначить именам атрибут «integer»\n" " -l\tперевести имена в нижний регистр при назначении\n" -" -n\tсделать имя ссылкой на переменную с именем, соответствующим её значению\n" +" -n\tсделать имя ссылкой на переменную с именем, соответствующим её " +"значению\n" " -r\tотключить запись в имена\n" " -t\tназначить именам атрибут «trace»\n" " -l\tперевести имена в верхний регистр при назначении\n" @@ -3131,21 +3208,19 @@ msgstr "" " Знак «+» вместо «-» отключает указанный атрибут.\n" " \n" " Переменные с атрибутом «integer» содержат математическое выражение (см.\n" -" команду «let»), которое рассчитывается при назначении значения переменной.\n" +" команду «let»), которое рассчитывается при назначении значения " +"переменной.\n" " \n" -" При использовании в функции «declare» делает имена локальными как при использовании\n" +" При использовании в функции «declare» делает имена локальными как при " +"использовании\n" " данной команды. Параметр «-g» отключает это поведение.\n" " \n" " Состояние выхода:\n" " Возвращает успех, если был указан допустимый параметр или не возникла\n" " ошибка присвоения." -#: builtins.c:532 +#: builtins.c:535 #, fuzzy -#| msgid "" -#| "Set variable values and attributes.\n" -#| " \n" -#| " Obsolete. See `help declare'." msgid "" "Set variable values and attributes.\n" " \n" @@ -3155,7 +3230,7 @@ msgstr "" " \n" " Устарел. См. «help declare»." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3171,52 +3246,26 @@ msgid "" msgstr "" "Определение локальных переменных.\n" " \n" -" Создаёт локальную переменную с указанным именем и присваивает ей указанное значение. Параметром может быть\n" +" Создаёт локальную переменную с указанным именем и присваивает ей " +"указанное значение. Параметром может быть\n" " любой параметр, принимаемый командой «declare».\n" " \n" -" Локальные переменные можно использовать только внутри функции. Они видны\n" +" Локальные переменные можно использовать только внутри функции. Они " +"видны\n" " только той функции, в которой они определены, и её дочерним функциям.\n" " \n" " Состояние выхода:\n" " Возвращает успех, если был указан допустимый параметр, не возникла\n" -" ошибка присвоения переменной или командный процессор не выполняет функцию." +" ошибка присвоения переменной или командный процессор не выполняет " +"функцию." -#: builtins.c:557 +#: builtins.c:560 #, fuzzy -#| msgid "" -#| "Write arguments to the standard output.\n" -#| " \n" -#| " Display the ARGs, separated by a single space character and followed by a\n" -#| " newline, on the standard output.\n" -#| " \n" -#| " Options:\n" -#| " -n\tdo not append a newline\n" -#| " -e\tenable interpretation of the following backslash escapes\n" -#| " -E\texplicitly suppress interpretation of backslash escapes\n" -#| " \n" -#| " `echo' interprets the following backslash-escaped characters:\n" -#| " \\a\talert (bell)\n" -#| " \\b\tbackspace\n" -#| " \\c\tsuppress further output\n" -#| " \\e\tescape character\n" -#| " \\E\tescape character\n" -#| " \\f\tform feed\n" -#| " \\n\tnew line\n" -#| " \\r\tcarriage return\n" -#| " \\t\thorizontal tab\n" -#| " \\v\tvertical tab\n" -#| " \\\\\tbackslash\n" -#| " \\0nnn\tthe character whose ASCII code is NNN (octal). NNN can be\n" -#| " \t0 to 3 octal digits\n" -#| " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" -#| " \tcan be one or two hex digits\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless a write error occurs." msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3240,9 +3289,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3250,15 +3301,19 @@ msgid "" msgstr "" "Вывод аргументов на стандартный вывод.\n" " \n" -" Выводит аргументы, разделённые пробелом, добавляя в конце символ новой строки,\n" +" Выводит аргументы, разделённые пробелом, добавляя в конце символ новой " +"строки,\n" " на стандартный вывод.\n" " \n" " Параметры:\n" " -n\tне добавлять символ новой строки\n" -" -e\tвключить интерпретацию символов, экранированных обратной косой чертой\n" -" -E\tявно отключить интерпретацию символов, экранированных обратной косой чертой\n" +" -e\tвключить интерпретацию символов, экранированных обратной косой " +"чертой\n" +" -E\tявно отключить интерпретацию символов, экранированных обратной " +"косой чертой\n" " \n" -" echo интерпретирует следующие символы, экранированные обратной косой чертой:\n" +" echo интерпретирует следующие символы, экранированные обратной косой " +"чертой:\n" " \\a\tоповещение (звуковой сигнал)\n" " \\b\tbackspace\n" " \\c\tотключение дальнейшего вывода\n" @@ -3270,15 +3325,17 @@ msgstr "" " \\t\tгоризонтальная табуляция\n" " \\v\tвертикальная табуляция\n" " \\\\\tобратная косая черта\n" -" \\0nnn\tсимвол с ASCII-кодом NNN (восьмеричным) NNN может быть длиной\n" +" \\0nnn\tсимвол с ASCII-кодом NNN (восьмеричным) NNN может быть " +"длиной\n" " \tот 0 до 3 восьмеричных цифр\n" -" \\xHH\tвосьмиразрядный символ, значение которого — HH (шестнадцатеричное) HH\n" +" \\xHH\tвосьмиразрядный символ, значение которого — HH " +"(шестнадцатеричное) HH\n" " \tможет быть одной или двумя шестнадцатеричными цифрами\n" " \n" " Состояние выхода:\n" " Возвращает успех, если не произошла ошибка записи." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3292,7 +3349,8 @@ msgid "" msgstr "" "Вывод аргументов на стандартный вывод.\n" " \n" -" Выводит аргументы на стандартный вывод, добавляя в конце символ новой строки.\n" +" Выводит аргументы на стандартный вывод, добавляя в конце символ новой " +"строки.\n" " \n" " Параметры:\n" " -n\tне добавлять символ новой строки\n" @@ -3300,7 +3358,8 @@ msgstr "" " Состояние выхода:\n" " Возвращает успех, если не произошла ошибка записи." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3320,6 +3379,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3328,13 +3393,16 @@ msgid "" msgstr "" "Включение и отключение встроенных команд командного процессора.\n" " \n" -" Включает и отключает команды, встроенные в командный процессор. Отключение позволит\n" -" выполнить команду с диска, название которой совпадает с названием встроенной команды,\n" +" Включает и отключает команды, встроенные в командный процессор. " +"Отключение позволит\n" +" выполнить команду с диска, название которой совпадает с названием " +"встроенной команды,\n" " без указания полного пути к ней.\n" " \n" " Параметры:\n" " -a\tпоказать список встроенных команд и их состояние\n" -" -n\tотключить все указанные имена или вывести список отключённых команд\n" +" -n\tотключить все указанные имена или вывести список отключённых " +"команд\n" " -p\tпоказать список встроенных команд\n" " -s\tпоказать только названия встроенных команд «special» Posix\n" " \n" @@ -3348,13 +3416,15 @@ msgstr "" " а не встроенную в командный процессор, введите «enable -n test».\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если указанное имя не является встроенной командой или не произошла ошибка." +" Возвращает успех, если указанное имя не является встроенной командой или " +"не произошла ошибка." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3368,46 +3438,8 @@ msgstr "" " Состояние выхода:\n" " Возвращает состояние выхода команды или успех, если команда пустая." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy -#| msgid "" -#| "Parse option arguments.\n" -#| " \n" -#| " Getopts is used by shell procedures to parse positional parameters\n" -#| " as options.\n" -#| " \n" -#| " OPTSTRING contains the option letters to be recognized; if a letter\n" -#| " is followed by a colon, the option is expected to have an argument,\n" -#| " which should be separated from it by white space.\n" -#| " \n" -#| " Each time it is invoked, getopts will place the next option in the\n" -#| " shell variable $name, initializing name if it does not exist, and\n" -#| " the index of the next argument to be processed into the shell\n" -#| " variable OPTIND. OPTIND is initialized to 1 each time the shell or\n" -#| " a shell script is invoked. When an option requires an argument,\n" -#| " getopts places that argument into the shell variable OPTARG.\n" -#| " \n" -#| " getopts reports errors in one of two ways. If the first character\n" -#| " of OPTSTRING is a colon, getopts uses silent error reporting. In\n" -#| " this mode, no error messages are printed. If an invalid option is\n" -#| " seen, getopts places the option character found into OPTARG. If a\n" -#| " required argument is not found, getopts places a ':' into NAME and\n" -#| " sets OPTARG to the option character found. If getopts is not in\n" -#| " silent mode, and an invalid option is seen, getopts places '?' into\n" -#| " NAME and unsets OPTARG. If a required argument is not found, a '?'\n" -#| " is placed in NAME, OPTARG is unset, and a diagnostic message is\n" -#| " printed.\n" -#| " \n" -#| " If the shell variable OPTERR has the value 0, getopts disables the\n" -#| " printing of error messages, even if the first character of\n" -#| " OPTSTRING is not a colon. OPTERR has the value 1 by default.\n" -#| " \n" -#| " Getopts normally parses the positional parameters ($0 - $9), but if\n" -#| " more arguments are given, they are parsed instead.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success if an option is found; fails if the end of options is\n" -#| " encountered or an error occurs." msgid "" "Parse option arguments.\n" " \n" @@ -3452,11 +3484,13 @@ msgstr "" " getopts используется процедурами командного процессора для анализа\n" " позиционных параметров.\n" " \n" -" «строка_параметров» содержит буквы распознаваемых параметров. Если после\n" +" «строка_параметров» содержит буквы распознаваемых параметров. Если " +"после\n" " буквы идёт двоеточие, считается, что у параметра есть аргумент,\n" " который должен быть отделён пробелом.\n" " \n" -" При каждом своём вызове getopts поместит следующий параметр в переменную\n" +" При каждом своём вызове getopts поместит следующий параметр в " +"переменную\n" " $имя, проинициализировав это имя, если оно не существует,\n" " и проиндексирует следующий обрабатываемый аргумент в переменной\n" " $OPTIND. Переменная $OPTIND инициализируется при каждом вызове\n" @@ -3464,51 +3498,40 @@ msgstr "" " getopts помещает этот аргумент в переменную $OPTARG.\n" " \n" " getopts сообщает об ошибках двумя способами. Если первый символ\n" -" в «строке_параметров» является двоеточием, getopts включает режим молчания. В этом\n" +" в «строке_параметров» является двоеточием, getopts включает режим " +"молчания. В этом\n" " режиме сообщения об ошибках не выводятся. Если указан неверный\n" " параметр, getopts помещает символ параметра в переменную $OPTARG. Если\n" " обязательный аргумент не найден, getopts помещает «:» в «имя»\n" -" и задаёт для $OPTARG символ найденного параметра. Если getopts не в режиме\n" +" и задаёт для $OPTARG символ найденного параметра. Если getopts не в " +"режиме\n" " молчания, и был указан неверный параметр, getopts помещает «?»\n" -" в НАЗВАНИЕ и удаляет переменную OPTARG. Если обязательный аргумент не найден, в НАЗВАНИЕ\n" +" в НАЗВАНИЕ и удаляет переменную OPTARG. Если обязательный аргумент не " +"найден, в НАЗВАНИЕ\n" " помещается «?», переменная OPTARG удаляется и выводится диагностическое\n" " сообщение.\n" " \n" " Если переменная OPTERR имеет значение 0, getopts отключает\n" " вывод сообщений об ошибках, даже если первый символ переменной\n" -" OPTSTRING не является двоеточием. По умолчанию переменная OPTERR имеет значение 1.\n" +" OPTSTRING не является двоеточием. По умолчанию переменная OPTERR имеет " +"значение 1.\n" " \n" " Getopts обычно анализирует позиционные параметры ($0–$9), но если\n" " задано больше аргументов, анализируются последние.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если найден параметр. Возвращает ошибку, если достигнут\n" +" Возвращает успех, если найден параметр. Возвращает ошибку, если " +"достигнут\n" " конец параметров или возникла ошибка." -#: builtins.c:694 +#: builtins.c:702 #, fuzzy -#| 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" -#| " any redirections take effect in the current shell.\n" -#| " \n" -#| " Options:\n" -#| " -a name\tpass NAME as the zeroth argument to COMMAND\n" -#| " -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" -#| " the shell option `execfail' is set.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless COMMAND is not found or a redirection error occurs." 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" @@ -3516,16 +3539,20 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Замена командного процессора указанной командой.\n" " \n" -" Выполняет команду, заменяя текущий командный процессор указанной программой.\n" -" Указанные аргументы становятся аргументами для команды. Если команда не указана,\n" +" Выполняет команду, заменяя текущий командный процессор указанной " +"программой.\n" +" Указанные аргументы становятся аргументами для команды. Если команда не " +"указана,\n" " все перенаправления будет выполняться в текущем командном процессоре.\n" " \n" " Параметры:\n" @@ -3537,9 +3564,10 @@ msgstr "" " закроется (если только на задан «execfail»).\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если команда не была найдена или не возникла ошибка перенаправления." +" Возвращает успех, если команда не была найдена или не возникла ошибка " +"перенаправления." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3551,11 +3579,12 @@ msgstr "" " Закрывает командный процессор с состоянием N. Если N не указан,\n" " состоянием выхода будет состояние последней выполненной команды." -#: builtins.c:724 +#: builtins.c:732 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 "" "Выход из командного процессора login.\n" @@ -3563,17 +3592,20 @@ msgstr "" " Закрывает командный процессор login с состоянием выхода N. Возвращает\n" " ошибку, если выполняется не в командном процессоре login." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3586,13 +3618,18 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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" -" fc выводит список команд из журнала или позволяет изменить и повторно выполнить их.\n" -" Аргументы «первая» и «последняя» могут быть числами, определяющими диапазон.\n" +" fc выводит список команд из журнала или позволяет изменить и повторно " +"выполнить их.\n" +" Аргументы «первая» и «последняя» могут быть числами, определяющими " +"диапазон.\n" " Аргумент «первая» также может быть строкой, которая означает\n" " последнюю команду, начинающуюся с этой строки.\n" " \n" @@ -3607,13 +3644,15 @@ msgstr "" " выполняется повторно после замены старая=новая.\n" " \n" " Полезный псевдоним для команды — r='fc -s'. Так если ввести «r cc»,\n" -" будет выполнена последняя команда, начинающаяся с «cc», а если ввести «r»,\n" +" будет выполнена последняя команда, начинающаяся с «cc», а если ввести " +"«r»,\n" " будет выполнена последняя команда.\n" " \n" " Состояние выхода:\n" -" Возвращает успех или состояние выполненной команды. В случае ошибки возвращает ненулевое состояние." +" Возвращает успех или состояние выполненной команды. В случае ошибки " +"возвращает ненулевое состояние." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3631,14 +3670,17 @@ msgstr "" " текущее задание.\n" " \n" " Состояние выхода:\n" -" Возвращает состояние команды, переведённой в интерактивный режим, или ошибку, если возникла ошибка." +" Возвращает состояние команды, переведённой в интерактивный режим, или " +"ошибку, если возникла ошибка." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3651,35 +3693,17 @@ msgstr "" " текущего задания.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если не включено управление заданиями или не произошла ошибка." +" Возвращает успех, если не включено управление заданиями или не произошла " +"ошибка." -#: builtins.c:793 +#: builtins.c:803 #, fuzzy -#| 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" -#| " \n" -#| " Options:\n" -#| " -d\t\tforget the remembered location of each NAME\n" -#| " -l\t\tdisplay in a format that may be reused as input\n" -#| " -p pathname\tuse PATHNAME as the full pathname of NAME\n" -#| " -r\t\tforget all remembered locations\n" -#| " -t\t\tprint the remembered location of each NAME, preceding\n" -#| " \t\teach location with the corresponding NAME if multiple\n" -#| " \t\tNAMEs are given\n" -#| " Arguments:\n" -#| " NAME\t\tEach NAME is searched for in $PATH and added to the list\n" -#| " \t\tof remembered commands.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless NAME is not found or an invalid option is given." msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3714,28 +3738,11 @@ msgstr "" " \t\tзапомненных команд.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если команда была найдена или был указан допустимый параметр." +" Возвращает успех, если команда была найдена или был указан допустимый " +"параметр." -#: builtins.c:818 +#: builtins.c:828 #, fuzzy -#| msgid "" -#| "Display information about builtin commands.\n" -#| " \n" -#| " Displays brief summaries of builtin commands. If PATTERN is\n" -#| " specified, gives detailed help on all commands matching PATTERN,\n" -#| " otherwise the list of help topics is printed.\n" -#| " \n" -#| " Options:\n" -#| " -d\toutput short description for each topic\n" -#| " -m\tdisplay usage in pseudo-manpage format\n" -#| " -s\toutput only a short usage synopsis for each topic matching\n" -#| " \tPATTERN\n" -#| " \n" -#| " Arguments:\n" -#| " PATTERN\tPattern specifiying a help topic\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless PATTERN is not found or an invalid option is given." msgid "" "Display information about builtin commands.\n" " \n" @@ -3753,12 +3760,14 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Вывод информации о встроенных командах.\n" " \n" " Показывает краткую справку о встроенных командах. Если указан\n" -" шаблон, выводит подробную справку по всем командам, удовлетворяющим шаблону.\n" +" шаблон, выводит подробную справку по всем командам, удовлетворяющим " +"шаблону.\n" " В противном случае выводится список разделов справки.\n" " \n" " Параметры:\n" @@ -3771,40 +3780,11 @@ msgstr "" " ШАБЛОН\tшаблон, определяющий раздел справки\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был найден шаблон или был указан допустимый параметр." +" Возвращает успех, если был найден шаблон или был указан допустимый " +"параметр." -#: builtins.c:842 +#: builtins.c:852 #, fuzzy -#| msgid "" -#| "Display or manipulate the history list.\n" -#| " \n" -#| " Display the history list with line numbers, prefixing each modified\n" -#| " entry with a `*'. An argument of N lists only the last N entries.\n" -#| " \n" -#| " Options:\n" -#| " -c\tclear the history list by deleting all of the entries\n" -#| " -d offset\tdelete the history entry at offset OFFSET.\n" -#| " \n" -#| " -a\tappend history lines from this session to the history file\n" -#| " -n\tread all history lines not already read from the history file\n" -#| " -r\tread the history file and append the contents to the history\n" -#| " \tlist\n" -#| " -w\twrite the current history to the history file\n" -#| " \tand append them to the history list\n" -#| " \n" -#| " -p\tperform history expansion on each ARG and display the result\n" -#| " \twithout storing it in the history list\n" -#| " -s\tappend the ARGs to the history list as a single entry\n" -#| " \n" -#| " If FILENAME is given, it is used as the history file. Otherwise,\n" -#| " if $HISTFILE has a value, that is used, else ~/.bash_history.\n" -#| " \n" -#| " If the $HISTTIMEFORMAT variable is set and not null, its value is used\n" -#| " as a format string for strftime(3) to print the time stamp associated\n" -#| " with each displayed history entry. No time stamps are printed otherwise.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or an error occurs." msgid "" "Display or manipulate the history list.\n" " \n" @@ -3828,11 +3808,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3840,14 +3825,16 @@ msgstr "" "Отображение или изменение журнала команд.\n" " \n" " Выводит журнал команд с номерами строк и звёздочками (*) перед всеми\n" -" изменёнными записями. С аргументом N показываются только последние N записей.\n" +" изменёнными записями. С аргументом N показываются только последние N " +"записей.\n" " \n" " Параметры:\n" " -c\tочистить журнал, удалив из него все записи\n" " -d смещение\tудалить запись журнала по указанному смещению\n" " \n" " -a\tдобавить журнал текущего сеанса в файл журнала\n" -" -n\tпрочитать все записи, которые ещё не были прочитаны из файла журнала\n" +" -n\tпрочитать все записи, которые ещё не были прочитаны из файла " +"журнала\n" " -r\tпрочитать файл журнала и добавить его содержимое\n" " \tв журнал\n" " -w\tзаписать текущий журнал в файл журнала\n" @@ -3858,38 +3845,21 @@ msgstr "" " -s\tдобавить аргументы в журнал как одну запись\n" " \n" " Если указан файл, он используется как файл журнала. В противном случае\n" -" если $HISTFILE содержит значение, используется этот файл, иначе — файл ~/.bash_history.\n" +" если $HISTFILE содержит значение, используется этот файл, иначе — файл " +"~/.bash_history.\n" " \n" -" Если переменная $HISTTIMEFORMAT задана и не является пустой, её значение\n" +" Если переменная $HISTTIMEFORMAT задана и не является пустой, её " +"значение\n" " используется как строка форматирования для strftime(3) для вывода метки\n" -" времени для каждой показанной записи журнала. В противном случае метки времени не будут показаны.\n" +" времени для каждой показанной записи журнала. В противном случае метки " +"времени не будут показаны.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или не возникла ошибка." +" Возвращает успех, если был указан допустимый параметр или не возникла " +"ошибка." -#: builtins.c:879 +#: builtins.c:893 #, fuzzy -#| msgid "" -#| "Display status of jobs.\n" -#| " \n" -#| " Lists the active jobs. JOBSPEC restricts output to that job.\n" -#| " Without options, the status of all active jobs is displayed.\n" -#| " \n" -#| " Options:\n" -#| " -l\tlists process IDs in addition to the normal information\n" -#| " -n\tlist only processes that have changed status since the last\n" -#| " \tnotification\n" -#| " -p\tlists process IDs only\n" -#| " -r\trestrict output to running jobs\n" -#| " -s\trestrict output to stopped jobs\n" -#| " \n" -#| " If -x is supplied, COMMAND is run after all job specifications that\n" -#| " appear in ARGS have been replaced with the process ID of that job's\n" -#| " process group leader.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or an error occurs.\n" -#| " If -x is used, returns the exit status of COMMAND." msgid "" "Display status of jobs.\n" " \n" @@ -3914,11 +3884,14 @@ msgid "" msgstr "" "Отображение состояния заданий.\n" " \n" -" Выводит список активных заданий. Если указан номер задания, выводится только это задание.\n" -" Если не указать параметры, будет показано состояние всех активных заданий.\n" +" Выводит список активных заданий. Если указан номер задания, выводится " +"только это задание.\n" +" Если не указать параметры, будет показано состояние всех активных " +"заданий.\n" " \n" " Параметры:\n" -" -l\tпоказать идентификаторы процессов в дополнение к обычной информации\n" +" -l\tпоказать идентификаторы процессов в дополнение к обычной " +"информации\n" " -n\tпоказать только те процессы, у которых изменилось состояние\n" " \tс момента после последнего уведомления\n" " -p\tпоказать только идентификаторы процессов\n" @@ -3930,25 +3903,12 @@ msgstr "" " лидера группы процессов задания.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или не возникла ошибка.\n" +" Возвращает успех, если был указан допустимый параметр или не возникла " +"ошибка.\n" " Если указан параметр -x, возвращает состояние выхода команды." -#: builtins.c:906 +#: builtins.c:920 #, fuzzy -#| msgid "" -#| "Remove jobs from current shell.\n" -#| " \n" -#| " Removes each JOBSPEC argument from the table of active jobs. Without\n" -#| " any JOBSPECs, the shell uses its notion of the current job.\n" -#| " \n" -#| " Options:\n" -#| " -a\tremove all jobs if JOBSPEC is not supplied\n" -#| " -h\tmark each JOBSPEC so that SIGHUP is not sent to the job if the\n" -#| " \tshell receives a SIGHUP\n" -#| " -r\tremove only running jobs\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option or JOBSPEC is given." msgid "" "Remove jobs from current shell.\n" " \n" @@ -3978,27 +3938,8 @@ msgstr "" " Состояние выхода:\n" " Возвращает успех, если был указан допустимый параметр или задание." -#: builtins.c:925 +#: builtins.c:939 #, fuzzy -#| msgid "" -#| "Send a signal to a job.\n" -#| " \n" -#| " Send the processes identified by PID or JOBSPEC the signal named by\n" -#| " SIGSPEC or SIGNUM. If neither SIGSPEC nor SIGNUM is present, then\n" -#| " SIGTERM is assumed.\n" -#| " \n" -#| " Options:\n" -#| " -s sig\tSIG is a signal name\n" -#| " -n sig\tSIG is a signal number\n" -#| " -l\tlist the signal names; if arguments follow `-l' they are\n" -#| " \tassumed to be signal numbers for which names should be listed\n" -#| " \n" -#| " Kill is a shell builtin for two reasons: it allows job IDs to be used\n" -#| " instead of process IDs, and allows processes to be killed if the limit\n" -#| " on processes that you can create is reached.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or an error occurs." msgid "" "Send a signal to a job.\n" " \n" @@ -4029,24 +3970,29 @@ msgstr "" " Параметры:\n" " -s сигнал\tназвание сигнала\n" " -n сигнал\tномер сигнала\n" -" -l\t\tпоказывает названия сигналов; если после аргументов указано «-l»,\n" -" \tони считаются номерами сигналов, для которых необходимо показать названия\n" +" -l\t\tпоказывает названия сигналов; если после аргументов указано «-" +"l»,\n" +" \tони считаются номерами сигналов, для которых необходимо показать " +"названия\n" " \n" -" kill — это встроенная команда, предназначенная для двух задач: использовать\n" +" kill — это встроенная команда, предназначенная для двух задач: " +"использовать\n" " номера заданий вместо номеров процессов и убивать процессы\n" " при достижении предельного числа процессов.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или не возникла ошибка." +" Возвращает успех, если был указан допустимый параметр или не возникла " +"ошибка." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -4084,9 +4030,11 @@ msgid "" msgstr "" "Расчёт математических выражений.\n" " \n" -" Выполняет расчёт всех аргументов в математическом выражении. Расчёт выполняется\n" +" Выполняет расчёт всех аргументов в математическом выражении. Расчёт " +"выполняется\n" " для целых чисел фиксированной ширины с без проверки на переполнение.\n" -" Однако деление на 0 перехватывается и выдаётся ошибка. Указанные ниже операторы объединены\n" +" Однако деление на 0 перехватывается и выдаётся ошибка. Указанные ниже " +"операторы объединены\n" " в группы с одинаковым приоритетом. Группы перечислены\n" " в порядке уменьшения приоритета.\n" " \n" @@ -4111,8 +4059,10 @@ msgstr "" " \t+=, -=, <<=, >>=,\n" " \t&=, ^=, |=\tприсвоение\n" " \n" -" в качестве операндов можно использовать переменные командного процессора. Название переменной\n" -" заменяется её значением (приводится к целому числу фиксированной ширины)\n" +" в качестве операндов можно использовать переменные командного " +"процессора. Название переменной\n" +" заменяется её значением (приводится к целому числу фиксированной " +"ширины)\n" " в выражении. У переменной не должен быть включён атрибут integer,\n" " чтобы её можно было использовать в выражении.\n" " \n" @@ -4121,63 +4071,27 @@ msgstr "" " выше правила старшинства.\n" " \n" " Состояние выхода:\n" -" Если последний АРГУМЕНТ имеет значение 0, let возвращает 1. В противном случае let возвращает 0." +" Если последний АРГУМЕНТ имеет значение 0, let возвращает 1. В противном " +"случае let возвращает 0." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy -#| 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" -#| " 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" -#| " delimiters.\n" -#| " \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" -#| " \t\tvariable ARRAY, starting at zero\n" -#| " -d delim\tcontinue until the first character of DELIM is read, rather\n" -#| " \t\tthan newline\n" -#| " -e\t\tuse Readline to obtain the line in an interactive shell\n" -#| " -i text\tUse TEXT as the initial text for Readline\n" -#| " -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" -#| " \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\tnot read within 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 immediately,\n" -#| " \t\twithout trying to read any data, returning success only if\n" -#| " \t\tinput is available on the specified file descriptor. The\n" -#| " \t\texit status is greater than 128 if the timeout is exceeded\n" -#| " -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" -#| " (in which case it's greater than 128), a variable assignment error occurs,\n" -#| " or an invalid file descriptor is supplied as the argument to -u." 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -4185,11 +4099,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -4207,52 +4124,68 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Чтение строки со стандартного ввода и разделение её на поля.\n" " \n" " Читает одну строку со стандартного ввода или из файлового дескриптора,\n" " если указан параметр -u. Строка разделяется на поля по словам.\n" -" Первое слово присваивается первому указанному имени, второе слово — второму\n" +" Первое слово присваивается первому указанному имени, второе слово — " +"второму\n" " имени и так далее.\n" -" Оставшиеся слова присваиваются последнему указанному имени. В качестве разделителей слов используются только символы\n" +" Оставшиеся слова присваиваются последнему указанному имени. В качестве " +"разделителей слов используются только символы\n" " из переменной $IFS.\n" " \n" -" Если имена не указаны, прочитанная строка сохраняется в переменной $REPLY.\n" +" Если имена не указаны, прочитанная строка сохраняется в переменной " +"$REPLY.\n" " \n" " Параметры:\n" " -a массив\tпоследовательно присвоить прочитанные слова указателям\n" " \t\tмассива, начиная с нуля\n" " -d разделитель\tпродолжить до первого разделителя,\n" " \t\tа не до символа новой строки\n" -" -e\t\tс помощью readline получить строку в интерактивном командном процессоре\n" +" -e\t\tс помощью readline получить строку в интерактивном командном " +"процессоре\n" " -i текст\t\tиспользовать текст в качестве исходного для readline\n" -" -n число_знаков\tвыполнить возврат после прочтения числа знаков, а не ждать\n" -" \t\tсимвола новой строки; учитывать разделитель, если до него было прочитано\n" +" -n число_знаков\tвыполнить возврат после прочтения числа знаков, а не " +"ждать\n" +" \t\tсимвола новой строки; учитывать разделитель, если до него было " +"прочитано\n" " \t\tменьше указанного числа знаков\n" -" -N число_знаков\tвыполнить возврат только после прочтения указанного числа знаков,\n" -" \t\tесли только не был получен конец строки или не истекло время ожидания, игнорируя все разделители\n" +" -N число_знаков\tвыполнить возврат только после прочтения указанного " +"числа знаков,\n" +" \t\tесли только не был получен конец строки или не истекло время " +"ожидания, игнорируя все разделители\n" " -p приглашение\tпоказать приглашение без символа новой строки в конце\n" " \t\tперед тем как читать\n" " -r\t\tне выполнять экранирование символами косой черты\n" " -s\t\tне показывать данные, полученные из терминала\n" -" -t тайм-аут\tпрекратить ожидание и вывести ошибку, если полная входная\n" -" \t\tстрока не была прочитана за указанное число секунд В переменной $TMOUT хранится\n" +" -t тайм-аут\tпрекратить ожидание и вывести ошибку, если полная " +"входная\n" +" \t\tстрока не была прочитана за указанное число секунд В переменной " +"$TMOUT хранится\n" " \t\tзначение тайм-аута по умолчанию. Время ожидания\n" -" \t\tможет быть дробным числом. Если тайм-аут равен 0, read немедленно выполняет возврат,\n" +" \t\tможет быть дробным числом. Если тайм-аут равен 0, read немедленно " +"выполняет возврат,\n" " \t\tне пытаясь прочитать никакие данные. Успех возвращается,\n" -" \t\tтолько если входные данные доступны по указанному файловому дескриптору. \n" +" \t\tтолько если входные данные доступны по указанному файловому " +"дескриптору. \n" " \t\tСостояние выхода больше 128, если время ожидания было превышено.\n" " -u fd\t\tчитать из файлового дескриптора, а не со стандартного входа\n" " \n" " Состояние выхода:\n" -" Состояние выхода будет нулевым, если не был встречен конец файла, не истекло время ожидания\n" -" (в этом случае состояние выхода будет больше 128), не возникла ошибка присвоения переменной\n" +" Состояние выхода будет нулевым, если не был встречен конец файла, не " +"истекло время ожидания\n" +" (в этом случае состояние выхода будет больше 128), не возникла ошибка " +"присвоения переменной\n" " или не был указан недопустимый файловый дескриптор как аргумент для -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4270,91 +4203,11 @@ msgstr "" " последней команды, выполненной в функции или скрипте.\n" " \n" " Состояние выхода:\n" -" Возвращает N или ошибку, если командный процессор не выполняет функцию или скрипт." +" Возвращает N или ошибку, если командный процессор не выполняет функцию " +"или скрипт." -#: builtins.c:1055 +#: builtins.c:1071 #, fuzzy -#| msgid "" -#| "Set or unset values of shell options and positional parameters.\n" -#| " \n" -#| " Change the value of shell attributes and positional parameters, or\n" -#| " display the names and values of shell variables.\n" -#| " \n" -#| " Options:\n" -#| " -a Mark variables which are modified or created for export.\n" -#| " -b Notify of job termination immediately.\n" -#| " -e Exit immediately if a command exits with a non-zero status.\n" -#| " -f Disable file name generation (globbing).\n" -#| " -h Remember the location of commands as they are looked up.\n" -#| " -k All assignment arguments are placed in the environment for a\n" -#| " command, not just those that precede the command name.\n" -#| " -m Job control is enabled.\n" -#| " -n Read commands but do not execute them.\n" -#| " -o option-name\n" -#| " Set the variable corresponding to option-name:\n" -#| " allexport same as -a\n" -#| " braceexpand same as -B\n" -#| " emacs use an emacs-style line editing interface\n" -#| " errexit same as -e\n" -#| " errtrace same as -E\n" -#| " functrace same as -T\n" -#| " hashall same as -h\n" -#| " histexpand same as -H\n" -#| " history enable command history\n" -#| " ignoreeof the shell will not exit upon reading EOF\n" -#| " interactive-comments\n" -#| " allow comments to appear in interactive commands\n" -#| " keyword same as -k\n" -#| " monitor same as -m\n" -#| " noclobber same as -C\n" -#| " noexec same as -n\n" -#| " noglob same as -f\n" -#| " nolog currently accepted but ignored\n" -#| " notify same as -b\n" -#| " nounset same as -u\n" -#| " onecmd same as -t\n" -#| " physical same as -P\n" -#| " pipefail the return value of a pipeline is the status of\n" -#| " the last command to exit with a non-zero status,\n" -#| " or zero if no command exited with a non-zero status\n" -#| " posix change the behavior of bash where the default\n" -#| " operation differs from the Posix standard to\n" -#| " match the standard\n" -#| " privileged same as -p\n" -#| " verbose same as -v\n" -#| " vi use a vi-style line editing interface\n" -#| " xtrace same as -x\n" -#| " -p Turned on whenever the real and effective user ids do not match.\n" -#| " Disables processing of the $ENV file and importing of shell\n" -#| " functions. Turning this option off causes the effective uid and\n" -#| " gid to be set to the real uid and gid.\n" -#| " -t Exit after reading and executing one command.\n" -#| " -u Treat unset variables as an error when substituting.\n" -#| " -v Print shell input lines as they are read.\n" -#| " -x Print commands and their arguments as they are executed.\n" -#| " -B the shell will perform brace expansion\n" -#| " -C If set, disallow existing regular files to be overwritten\n" -#| " by redirection of output.\n" -#| " -E If set, the ERR trap is inherited by shell functions.\n" -#| " -H Enable ! style history substitution. This flag is on\n" -#| " by default when the shell is interactive.\n" -#| " -P If set, do not resolve symbolic links when executing commands\n" -#| " such as cd which change the current directory.\n" -#| " -T If set, the DEBUG trap is inherited by shell functions.\n" -#| " -- Assign any remaining arguments to the positional parameters.\n" -#| " If there are no remaining arguments, the positional parameters\n" -#| " are unset.\n" -#| " - Assign any remaining arguments to the positional parameters.\n" -#| " The -x and -v options are turned off.\n" -#| " \n" -#| " Using + rather than - causes these flags to be turned off. The\n" -#| " flags can also be used upon invocation of the shell. The current\n" -#| " set of flags may be found in $-. The remaining n ARGs are positional\n" -#| " parameters and are assigned, in order, to $1, $2, .. $n. If no\n" -#| " ARGs are given, all shell variables are printed.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given." msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -4397,7 +4250,8 @@ 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" @@ -4421,13 +4275,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4437,15 +4296,19 @@ msgid "" " Exit Status:\n" " Returns success unless an invalid option is given." msgstr "" -"Присвоение или удаление значений параметров командного процессора и позиционных параметров.\n" +"Присвоение или удаление значений параметров командного процессора и " +"позиционных параметров.\n" " \n" -" Изменяет значение атрибутов командного процессора и позиционных параметров или\n" +" Изменяет значение атрибутов командного процессора и позиционных " +"параметров или\n" " выводит названия и значения переменных командного процессора.\n" " \n" " Параметры:\n" -" -a пометить переменные, которые были изменены или созданы для экспорта\n" +" -a пометить переменные, которые были изменены или созданы для " +"экспорта\n" " -b немедленно уведомить о завершении задания\n" -" -e немедленно выйти, если команда выполняет выход с ненулевым состоянием\n" +" -e немедленно выйти, если команда выполняет выход с ненулевым " +"состоянием\n" " -f отключить генерацию имён файлов (подстановка)\n" " -h запомнить расположение команд, как они выглядели ранее\n" " -k поместить в окружение для команды все аргументы присвоения,\n" @@ -4456,16 +4319,19 @@ msgstr "" " Задаёт переменную, соответствующую названию параметра:\n" " allexport эквивалент -a\n" " braceexpand эквивалент -B\n" -" emacs использовать стиль emacs для редактирования строк\n" +" emacs использовать стиль emacs для редактирования " +"строк\n" " errexit эквивалент -e\n" " errtrace эквивалент -E\n" " functrace эквивалент -T\n" " hashall эквивалент -h\n" " histexpand эквивалент -H\n" " history включить журнал команд\n" -" ignoreeof не закрывать командный процессор после получения конца файла\n" +" ignoreeof не закрывать командный процессор после получения " +"конца файла\n" " interactive-comments\n" -" разрешить показ комментариев в интерактивных командах\n" +" разрешить показ комментариев в интерактивных " +"командах\n" " keyword эквивалент -k\n" " monitor эквивалент -m\n" " noclobber эквивалент -C\n" @@ -4476,17 +4342,22 @@ msgstr "" " nounset эквивалент -u\n" " onecmd эквивалент -t\n" " physical эквивалент -P\n" -" pipefail возвращаемое значение конвейера является состоянием\n" -" последней команды, завершившейся с ненулевым состоянием,\n" -" или нулём, если не было команды, завершившейся с ненулевым состоянием\n" +" pipefail возвращаемое значение конвейера является " +"состоянием\n" +" последней команды, завершившейся с ненулевым " +"состоянием,\n" +" или нулём, если не было команды, завершившейся с " +"ненулевым состоянием\n" " posix изменить поведение bash там, где операции\n" -" по умолчанию отличаются от стандарта Posix, чтобы\n" +" по умолчанию отличаются от стандарта Posix, " +"чтобы\n" " соответствовать этому стандарту\n" " privileged эквивалент -p\n" " verbose эквивалент -v\n" " vi использовать стиль vi для редактирования строк\n" " xtrace эквивалент -x\n" -" -p Включён, когда реальный и эффективный идентификаторы пользователя не совпадают.\n" +" -p Включён, когда реальный и эффективный идентификаторы пользователя " +"не совпадают.\n" " Отключает обработку файла $ENV и импорт функций командного\n" " процессора. Если отключить этот параметр, эффективные UID и GID\n" " будут назначены реальным UID и GID.\n" @@ -4497,12 +4368,16 @@ msgstr "" " -B Командный процессор развернёт скобки.\n" " -C Если задано, запретить перезапись существующих обычных файлов\n" " вследствие перенаправления вывода.\n" -" -E Если задано, ловушка ERR наследуется функциями командного процессора.\n" -" -H Включить замену журнала с использованием !. По умолчанию этот флаг\n" +" -E Если задано, ловушка ERR наследуется функциями командного " +"процессора.\n" +" -H Включить замену журнала с использованием !. По умолчанию этот " +"флаг\n" " установлен, если командный процессор интерактивный.\n" -" -P Если задано, не разрешать символьные ссылки при выполнении команд,\n" +" -P Если задано, не разрешать символьные ссылки при выполнении " +"команд,\n" " таких как cd, которые изменяют текущий каталог.\n" -" -T Если задано, ловушка DEBUG наследуется функциями командного процессора.\n" +" -T Если задано, ловушка DEBUG наследуется функциями командного " +"процессора.\n" " -- Назначить все оставшиеся аргументы позиционным параметрам.\n" " Если аргументов не осталось, позиционные параметры\n" " удаляются.\n" @@ -4510,34 +4385,18 @@ msgstr "" " Параметры -x и -v выключены.\n" " \n" " Если вместо - указать +, флаги будут выключены. \n" -" Флаги также можно использовать до вызова командного процессора. Текущий\n" -" набор флагов можно просмотреть в $-. Оставшиеся n аргументов являются позиционными\n" +" Флаги также можно использовать до вызова командного процессора. " +"Текущий\n" +" набор флагов можно просмотреть в $-. Оставшиеся n аргументов являются " +"позиционными\n" " параметрами и назначаются в порядке $1, $2, .. $n. Если\n" " аргументы не указаны, выводятся все переменные командного процессора.\n" " \n" " Состояние выхода:\n" " Возвращает успех, если был указан допустимый параметр." -#: builtins.c:1140 +#: builtins.c:1160 #, fuzzy -#| msgid "" -#| "Unset values and attributes of shell variables and functions.\n" -#| " \n" -#| " For each NAME, remove the corresponding variable or function.\n" -#| " \n" -#| " Options:\n" -#| " -f\ttreat each NAME as a shell function\n" -#| " -v\ttreat each NAME as a shell variable\n" -#| " -n\ttreat each NAME as a name reference and unset the variable itself\n" -#| " \trather than the variable it references\n" -#| " \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" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or a NAME is read-only." msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4549,7 +4408,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4564,23 +4424,27 @@ msgstr "" " Параметры:\n" " -f\tсчитать каждое указанное имя функцией командного процессора\n" " -v\tсчитать каждое указанное имя переменной командного процессора\n" -" -n\tсчитать каждое указанное имя ссылкой на название и удалить саму переменную,\n" +" -n\tсчитать каждое указанное имя ссылкой на название и удалить саму " +"переменную,\n" " \tа не переменную, на которую указывает ссылка\n" " \n" -" Если параметры не указаны, unset сначала пытается удалить переменную. Если это не удаётся,\n" +" Если параметры не указаны, unset сначала пытается удалить переменную. " +"Если это не удаётся,\n" " пытается удалить функцию.\n" " \n" " Некоторые переменные нельзя удалить. См. также «readonly».\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или указанное имя доступно для записи." +" Возвращает успех, если был указан допустимый параметр или указанное имя " +"доступно для записи." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4595,7 +4459,8 @@ msgstr "" "Установка атрибута экспорта для переменных командного процессора.\n" " \n" " Помечает все имена для автоматического экспорта в среду для\n" -" последующих выполняемых команд. Если указано значение, оно присваивается перед экспортом.\n" +" последующих выполняемых команд. Если указано значение, оно " +"присваивается перед экспортом.\n" " \n" " Параметры:\n" " -f\tиспользовать функции командного процессора\n" @@ -4607,26 +4472,8 @@ msgstr "" " Состояние выхода:\n" " Возвращает успех, если был указан допустимый параметр или имя." -#: builtins.c:1181 +#: builtins.c:1201 #, fuzzy -#| msgid "" -#| "Mark shell variables as unchangeable.\n" -#| " \n" -#| " Mark each NAME as read-only; the values of these NAMEs may not be\n" -#| " changed by subsequent assignment. If VALUE is supplied, assign VALUE\n" -#| " before marking as read-only.\n" -#| " \n" -#| " Options:\n" -#| " -a\trefer to indexed array variables\n" -#| " -A\trefer to associative array variables\n" -#| " -f\trefer to shell functions\n" -#| " -p\tdisplay a list of all readonly variables or functions, depending on\n" -#| " whether or not the -f option is given\n" -#| " \n" -#| " An argument of `--' disables further option processing.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or NAME is invalid." msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4649,14 +4496,16 @@ msgstr "" "Запрет изменения переменных командного процессора.\n" " \n" " Делает каждое имя доступным только чтения. Значения этих имён нельзя\n" -" будет изменить в будущем. Если указано значение, присваивает это значение\n" +" будет изменить в будущем. Если указано значение, присваивает это " +"значение\n" " перед тем, как сделать его доступным только для чтения.\n" " \n" " Параметры:\n" " -a\tссылаться на переменные индексированного массива\n" " -A\tссылаться на переменные ассоциативного массива\n" " -f\tиспользовать функции командного процессора\n" -" -p\tвывести список всех переменных или функций, доступных только для чтения,\n" +" -p\tвывести список всех переменных или функций, доступных только для " +"чтения,\n" " в зависимости от того, указан ли параметр -f\n" " \n" " Аргумент «--» отключает дальнейшую обработку параметров.\n" @@ -4664,7 +4513,7 @@ msgstr "" " Состояние выхода:\n" " Возвращает успех, если был указан допустимый параметр или имя." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4682,7 +4531,7 @@ msgstr "" " Состояние выхода:\n" " Возвращает успех, если N положительный или меньше $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4697,118 +4546,50 @@ msgid "" msgstr "" "Выполнение команд из файла в текущем командном процессоре.\n" " \n" -" Читает и выполняет команды из указанного файла в текущем командном процессоре. \n" +" Читает и выполняет команды из указанного файла в текущем командном " +"процессоре. \n" " Файл ищется в каталогах, указанных в переменной $PATH.\n" " Если указаны аргументы, они становятся позиционными параметрами\n" " при выполнении файла.\n" " \n" " Состояние выхода:\n" -" Возвращает состояние последней выполненной команды из файла. Возвращает ошибку,\n" +" Возвращает состояние последней выполненной команды из файла. Возвращает " +"ошибку,\n" " если файл не удаётся прочитать." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" "Приостановка работы командного процессора.\n" " \n" -" Приостанавливает работу текущего командного процессора до получения сигнала SIGCONT.\n" -" Работу командных процессоров login можно приостановить только в принудительном режиме.\n" +" Приостанавливает работу текущего командного процессора до получения " +"сигнала SIGCONT.\n" +" Работу командных процессоров login можно приостановить только в " +"принудительном режиме.\n" " \n" " Параметры:\n" -" -f\tпринудительно приостановить работу, даже если командный процессор — login\n" +" -f\tпринудительно приостановить работу, даже если командный " +"процессор — login\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если не включено управление заданиями или не произошла ошибка." +" Возвращает успех, если не включено управление заданиями или не произошла " +"ошибка." -#: builtins.c:1262 +#: builtins.c:1284 #, fuzzy -#| msgid "" -#| "Evaluate conditional expression.\n" -#| " \n" -#| " Exits with a status of 0 (true) or 1 (false) depending on\n" -#| " the evaluation of EXPR. Expressions may be unary or binary. Unary\n" -#| " expressions are often used to examine the status of a file. There\n" -#| " are string operators and numeric comparison operators as well.\n" -#| " \n" -#| " The behavior of test depends on the number of arguments. Read the\n" -#| " bash manual page for the complete specification.\n" -#| " \n" -#| " File operators:\n" -#| " \n" -#| " -a FILE True if file exists.\n" -#| " -b FILE True if file is block special.\n" -#| " -c FILE True if file is character special.\n" -#| " -d FILE True if file is a directory.\n" -#| " -e FILE True if file exists.\n" -#| " -f FILE True if file exists and is a regular file.\n" -#| " -g FILE True if file is set-group-id.\n" -#| " -h FILE True if file is a symbolic link.\n" -#| " -L FILE True if file is a symbolic link.\n" -#| " -k FILE True if file has its `sticky' bit set.\n" -#| " -p FILE True if file is a named pipe.\n" -#| " -r FILE True if file is readable by you.\n" -#| " -s FILE True if file exists and is not empty.\n" -#| " -S FILE True if file is a socket.\n" -#| " -t FD True if FD is opened on a terminal.\n" -#| " -u FILE True if the file is set-user-id.\n" -#| " -w FILE True if the file is writable by you.\n" -#| " -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" -#| " FILE1 -nt FILE2 True if file1 is newer than file2 (according to\n" -#| " modification date).\n" -#| " \n" -#| " FILE1 -ot FILE2 True if file1 is older than file2.\n" -#| " \n" -#| " FILE1 -ef FILE2 True if file1 is a hard link to file2.\n" -#| " \n" -#| " String operators:\n" -#| " \n" -#| " -z STRING True if string is empty.\n" -#| " \n" -#| " -n STRING\n" -#| " STRING True if string is not empty.\n" -#| " \n" -#| " STRING1 = STRING2\n" -#| " True if the strings are equal.\n" -#| " STRING1 != STRING2\n" -#| " True if the strings are not equal.\n" -#| " STRING1 < STRING2\n" -#| " True if STRING1 sorts before STRING2 lexicographically.\n" -#| " STRING1 > STRING2\n" -#| " True if STRING1 sorts after STRING2 lexicographically.\n" -#| " \n" -#| " Other operators:\n" -#| " \n" -#| " -o OPTION True if the shell option OPTION is enabled.\n" -#| " -v VAR\t True if the shell variable VAR is set\n" -#| " -R VAR\t True if the shell variable VAR is set and is a name reference.\n" -#| " ! EXPR True if expr is false.\n" -#| " EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.\n" -#| " EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.\n" -#| " \n" -#| " arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne,\n" -#| " -lt, -le, -gt, or -ge.\n" -#| " \n" -#| " Arithmetic binary operators return true if ARG1 is equal, not-equal,\n" -#| " less-than, less-than-or-equal, greater-than, or greater-than-or-equal\n" -#| " than ARG2.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n" -#| " false or an invalid argument is given." msgid "" "Evaluate conditional expression.\n" " \n" @@ -4842,7 +4623,8 @@ 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" @@ -4863,7 +4645,8 @@ 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" @@ -4891,7 +4674,8 @@ msgstr "" "Расчёт условного выражения.\n" " \n" " Возвращает состояние 0 (истина) или 1 (ложь) после\n" -" расчёта выражения. Выражения могут быть унарными или бинарными. Унарные\n" +" расчёта выражения. Выражения могут быть унарными или бинарными. " +"Унарные\n" " выражения часто используются для определения состояния файла. Также\n" " доступны стоковые операторы и операторы сравнения чисел.\n" " \n" @@ -4905,7 +4689,8 @@ msgstr "" " -c ФАЙЛ Истина, если файл представляет символьное устройство.\n" " -d ФАЙЛ Истина, если файл является каталогом.\n" " -e ФАЙЛ Истина, если файл существует.\n" -" -f ФАЙЛ Истина, если файл существует и является обычным файлом.\n" +" -f ФАЙЛ Истина, если файл существует и является обычным " +"файлом.\n" " -g ФАЙЛ Истина, если для файла установлен бит SGID.\n" " -h ФАЙЛ Истина, если файл является символьной ссылкой.\n" " -L ФАЙЛ Истина, если файл является символьной ссылкой.\n" @@ -4914,12 +4699,15 @@ msgstr "" " -r ФАЙЛ Истина, если вы можете прочитать файл.\n" " -s ФАЙЛ Истина, если файл существует и не является пустым.\n" " -S ФАЙЛ Истина, если файл является сокетом.\n" -" -t ФД Истина, если файловый дескриптор ФД открыт в терминале.\n" +" -t ФД Истина, если файловый дескриптор ФД открыт в " +"терминале.\n" " -u ФАЙЛ Истина, если для файла установлен бит SUID.\n" " -w ФАЙЛ Истина, если вы можете выполнить запись в файл.\n" " -x ФАЙЛ Истина, если вы можете выполнить файл.\n" -" -O ФАЙЛ Истина, если вы являетесь эффективным владельцем файла.\n" -" -G ФАЙЛ Истина, если ваша группа является эффективным владельцем файла.\n" +" -O ФАЙЛ Истина, если вы являетесь эффективным владельцем " +"файла.\n" +" -G ФАЙЛ Истина, если ваша группа является эффективным " +"владельцем файла.\n" " -N ФАЙЛ Истина, если файл был изменён после последнего чтения.\n" " \n" " ФАЙЛ1 -nt ФАЙЛ2 Истина, если файл1 новее файла2 (согласно\n" @@ -4927,7 +4715,8 @@ msgstr "" " \n" " ФАЙЛ1 -ot ФАЙЛ2 Истина, если файл1 старее файла2.\n" " \n" -" ФАЙЛ1 -ef ФАЙЛ2 Истина, если файл1 является жёсткой ссылкой на файл2.\n" +" ФАЙЛ1 -ef ФАЙЛ2 Истина, если файл1 является жёсткой ссылкой на " +"файл2.\n" " \n" " Строковые операторы:\n" " \n" @@ -4941,31 +4730,38 @@ msgstr "" " СТРОКА1 != СТРОКА2\n" " Истина, если строки не совпадают.\n" " СТРОКА1 < СТРОКА2\n" -" Истина, если СТРОКА1 сортируется до СТРОКИ2 лексикографически.\n" +" Истина, если СТРОКА1 сортируется до СТРОКИ2 " +"лексикографически.\n" " СТРОКА1 > СТРОКА2\n" -" Истина, если СТРОКА1 сортируется после СТРОКИ2 лексикографически.\n" +" Истина, если СТРОКА1 сортируется после СТРОКИ2 " +"лексикографически.\n" " \n" " Остальные операторы:\n" " \n" " -o ПАРАМЕТР Истина, если параметр командного процессора включён.\n" " -v ПЕР\t Истина, если переменная командного процессора задана\n" -" -R ПЕР\t Истина, если переменная командного процессора задана и является именованной ссылкой.\n" +" -R ПЕР\t Истина, если переменная командного процессора задана и " +"является именованной ссылкой.\n" " ! ВЫРАЖ Истина, если выражение возвращает ложь.\n" " ВЫРАЖ1 -a ВЫРАЖ2 Истина, если оба выражения возвращают истину.\n" -" ВЫРАЖ1 -o ВЫРАЖ2 Истина, если хотя бы одно из выражений возвращает истину.\n" +" ВЫРАЖ1 -o ВЫРАЖ2 Истина, если хотя бы одно из выражений возвращает " +"истину.\n" " \n" -" арг1 ОП арг2 Математические проверки. ОП может быть одним из следующих: -eq, -ne,\n" +" арг1 ОП арг2 Математические проверки. ОП может быть одним из " +"следующих: -eq, -ne,\n" " -lt, -le, -gt или -ge.\n" " \n" -" Математические бинарные операторы возвращают истину, если АРГУМЕНТ1 равен, не равен,\n" +" Математические бинарные операторы возвращают истину, если АРГУМЕНТ1 " +"равен, не равен,\n" " меньше, меньше или равен либо больше или равен\n" " АРГУМЕНТУ2.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если выражение истинно, или ошибку, если выражение ложно\n" +" Возвращает успех, если выражение истинно, или ошибку, если выражение " +"ложно\n" " или указан недопустимый аргумент." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4977,11 +4773,12 @@ msgstr "" " Это синоним встроенной команды test, но последним аргументом должна\n" " быть скобка «]», соответствующая открывающей «[»." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4989,45 +4786,61 @@ msgid "" msgstr "" "Отображение времени процесса.\n" " \n" -" Показывает объединённые значения времени пользователя и системы для командного\n" +" Показывает объединённые значения времени пользователя и системы для " +"командного\n" " процессора и всех его дочерних процессов.\n" " \n" " Состояние выхода:\n" " Всегда возвращает успех." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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" @@ -5035,16 +4848,22 @@ msgstr "" " командный процессор получает сигналы или при других условиях.\n" " \n" " Аргумент — это команда, которая считывается и выполняется, когда\n" -" командный процессор получает указанные сигнал(ы). Если аргумент отсутствует (и указан один сигнал)\n" +" командный процессор получает указанные сигнал(ы). Если аргумент " +"отсутствует (и указан один сигнал)\n" " или указано «-», для всех указанных сигналов восстанавливаются\n" -" исходные значения. Если аргумент — пустая строка, все указанные сигналы игнорируются\n" +" исходные значения. Если аргумент — пустая строка, все указанные сигналы " +"игнорируются\n" " командным процессором и вызываемыми им командами.\n" " \n" -" Если сигнал — EXIT (0), аргумент выполняется при выходе из командного процессора. Если\n" -" сигнал — DEBUG, аргумент выполняется перед каждой простой командой. Если\n" +" Если сигнал — EXIT (0), аргумент выполняется при выходе из командного " +"процессора. Если\n" +" сигнал — DEBUG, аргумент выполняется перед каждой простой командой. " +"Если\n" " сигнал — RETURN, аргумент выполняется каждый раз, когда функция\n" -" или скрипт выполняется в . или исходные встроенные команды завершают свою работу. Сигнал\n" -" ERR означает выполнение аргумента каждый раз, когда ошибка команды приведёт\n" +" или скрипт выполняется в . или исходные встроенные команды завершают " +"свою работу. Сигнал\n" +" ERR означает выполнение аргумента каждый раз, когда ошибка команды " +"приведёт\n" " к выходу из командного процессора, когда включён параметр -e.\n" " \n" " Если аргументы не указаны, trap выводит список команд, связанных\n" @@ -5054,41 +4873,18 @@ msgstr "" " -l\tпоказать названия сигналов и их номера\n" " -p\tпоказать команды trap, связанные с каждым сигналом\n" " \n" -" Идентификатор сигнала — это название сигнала в <signal.h> или номер сигнала.\n" -" Названия сигналов не зависят от регистра, а префикс SIG не является обязательным. \n" -" Сигнал можно отправить в командный процессор командой «kill -signal $$».\n" +" Идентификатор сигнала — это название сигнала в <signal.h> или номер " +"сигнала.\n" +" Названия сигналов не зависят от регистра, а префикс SIG не является " +"обязательным. \n" +" Сигнал можно отправить в командный процессор командой «kill -signal $" +"$».\n" " \n" " Состояние выхода:\n" " Возвращает успех, если был указан допустимый сигнал или параметр." -#: builtins.c:1401 +#: builtins.c:1430 #, fuzzy -#| msgid "" -#| "Display information about command type.\n" -#| " \n" -#| " For each NAME, indicate how it would be interpreted if used as a\n" -#| " command name.\n" -#| " \n" -#| " Options:\n" -#| " -a\tdisplay all locations containing an executable named NAME;\n" -#| " \tincludes aliases, builtins, and functions, if and only if\n" -#| " \tthe `-p' option is not also used\n" -#| " -f\tsuppress shell function lookup\n" -#| " -P\tforce a PATH search for each NAME, even if it is an alias,\n" -#| " \tbuiltin, or function, and returns the name of the disk file\n" -#| " \tthat would be executed\n" -#| " -p\treturns either the name of the disk file that would be executed,\n" -#| " \tor nothing if `type -t NAME' would not return `file'.\n" -#| " -t\toutput a single word which is one of `alias', `keyword',\n" -#| " \t`function', `builtin', `file' or `', if NAME is an alias, shell\n" -#| " \treserved word, shell function, shell builtin, disk file, or not\n" -#| " \tfound, respectively\n" -#| " \n" -#| " Arguments:\n" -#| " 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." msgid "" "Display information about command type.\n" " \n" @@ -5114,25 +4910,30 @@ 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" -" Для каждого указанного имени показывает, как оно будет интерпретировано при\n" +" Для каждого указанного имени показывает, как оно будет интерпретировано " +"при\n" " использовании в качестве названия команды.\n" " \n" " Параметры:\n" -" -a\tпоказать все местоположения, где есть исполняемый файл с указанным именем,\n" +" -a\tпоказать все местоположения, где есть исполняемый файл с указанным " +"именем,\n" " \tвключая псевдонимы, встроенные команды и функции, а также при условии\n" " \tчто не используется параметр «-p»\n" " -f\tне искать функции командного процессора\n" -" -P\tпринудительно искать в $PATH все указанные имена, даже если это псевдоним,\n" +" -P\tпринудительно искать в $PATH все указанные имена, даже если это " +"псевдоним,\n" " \tвстроенная команда или функция, и возвращать название файла на диске,\n" " \tкоторый будет запущен\n" " -p\tвозвращает название файла на диске, который будет запущен,\n" " \tили ничего, если «type -t имя» не возвращает «file».\n" " -t\tвывести одно из слов «alias», «keyword»,\n" -" \t«function», «builtin», «file» или «», если указанное имя является, соответственно,\n" +" \t«function», «builtin», «file» или «», если указанное имя является, " +"соответственно,\n" " \tпсевдонимом, зарезервированным словом, функцией, встроенной командой\n" " \tкомандного процессора, файлом на диске или имя не было найдено\n" " \n" @@ -5140,57 +4941,16 @@ msgstr "" " ИМЯ\tназвание интерпретируемой команды\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если все указанные имена были найдены, или ошибку в противном случае." +" Возвращает успех, если все указанные имена были найдены, или ошибку в " +"противном случае." -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy -#| msgid "" -#| "Modify shell resource limits.\n" -#| " \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" -#| " -S\tuse the `soft' resource limit\n" -#| " -H\tuse the `hard' resource limit\n" -#| " -a\tall current limits are reported\n" -#| " -b\tthe socket buffer size\n" -#| " -c\tthe maximum size of core files created\n" -#| " -d\tthe maximum size of a process's data segment\n" -#| " -e\tthe maximum scheduling priority (`nice')\n" -#| " -f\tthe maximum size of files written by the shell and its children\n" -#| " -i\tthe maximum number of pending signals\n" -#| " -l\tthe maximum size a process may lock into memory\n" -#| " -m\tthe maximum resident set size\n" -#| " -n\tthe maximum number of open file descriptors\n" -#| " -p\tthe pipe buffer size\n" -#| " -q\tthe maximum number of bytes in POSIX message queues\n" -#| " -r\tthe maximum real-time scheduling priority\n" -#| " -s\tthe maximum stack size\n" -#| " -t\tthe maximum amount of cpu time in seconds\n" -#| " -u\tthe maximum number of user processes\n" -#| " -v\tthe size of virtual memory\n" -#| " -x\tthe maximum number of file locks\n" -#| " -T the maximum number of threads\n" -#| " \n" -#| " Not all options are available on all platforms.\n" -#| " \n" -#| " If LIMIT is given, it is the new value of the specified resource; the\n" -#| " special LIMIT values `soft', `hard', and `unlimited' stand for the\n" -#| " current soft limit, the current hard limit, and no limit, respectively.\n" -#| " Otherwise, the current value of the specified resource is printed. If\n" -#| " no option is given, then -f is assumed.\n" -#| " \n" -#| " Values are in 1024-byte increments, except for -t, which is in seconds,\n" -#| " -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -#| " number of processes.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is supplied or an error occurs." 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" @@ -5227,16 +4987,18 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Изменение ограничений ресурсов командного процессора.\n" " \n" -" Позволяет контролировать ресурсы, доступные командному процессору и создаваемым\n" +" Позволяет контролировать ресурсы, доступные командному процессору и " +"создаваемым\n" " им процессам, в системах, где возможен такой контроль.\n" " \n" " Параметры:\n" @@ -5247,7 +5009,8 @@ msgstr "" " -c\tмаксимальный размер создаваемых core-файлов\n" " -d\tмаксимальный размер сегмента данных процесса\n" " -e\tмаксимальный приоритет планирования («nice»)\n" -" -f\tмаксимальный размер файлов, записываемых командным процессором и его дочерними процессами\n" +" -f\tмаксимальный размер файлов, записываемых командным процессором и " +"его дочерними процессами\n" " -i\tмаксимальное число ожидающих сигналов\n" " -l\tмаксимальный объём, который процесс может заблокировать в памяти\n" " -m\tмаксимальный объём резидентной памяти\n" @@ -5264,20 +5027,24 @@ msgstr "" " \n" " Не все параметры доступны на всех платформах.\n" " \n" -" Если указано ограничение, оно является новым значением для указанного ресурса.\n" +" Если указано ограничение, оно является новым значением для указанного " +"ресурса.\n" " Специальные значения «soft», «hard» и «unlimited» означают,\n" -" соответственно, текущее мягкое ограничение, текущее жёсткое ограничение и отсутствие ограничения.\n" +" соответственно, текущее мягкое ограничение, текущее жёсткое ограничение " +"и отсутствие ограничения.\n" " В противном случае выводится текущее значение указанного ресурса. Если\n" " параметр не указан, подразумевается использование параметра -f.\n" " \n" -" Значения задаются с шагом 1024 байт, кроме параметра -t с шагом в секундах,\n" +" Значения задаются с шагом 1024 байт, кроме параметра -t с шагом в " +"секундах,\n" " параметра -p с шагом 512 байт и параметра -u, представляющего\n" " количество процессов.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или не возникла ошибка." +" Возвращает успех, если был указан допустимый параметр или не возникла " +"ошибка." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -5296,52 +5063,46 @@ msgid "" msgstr "" "Отображение или указание маски режима для файлов.\n" " \n" -" Задаёт маску РЕЖИМ для файлов, создаваемых пользователем. Если РЕЖИМ не указан,\n" +" Задаёт маску РЕЖИМ для файлов, создаваемых пользователем. Если РЕЖИМ не " +"указан,\n" " выводит текущее значение маски.\n" " \n" -" Если РЕЖИМ начинается с цифры, он интерпретируется как восьмеричное число.\n" -" В противном случае он считается символьной строкой как для команды chmod(1).\n" +" Если РЕЖИМ начинается с цифры, он интерпретируется как восьмеричное " +"число.\n" +" В противном случае он считается символьной строкой как для команды " +"chmod(1).\n" " \n" " Параметры:\n" -" -p\tесли РЕЖИМ не указан, вывести маску, пригодную для повторного использования\n" -" -S\tвывести маску в символьном виде, в противном случае выводится восьмеричное число\n" +" -p\tесли РЕЖИМ не указан, вывести маску, пригодную для повторного " +"использования\n" +" -S\tвывести маску в символьном виде, в противном случае выводится " +"восьмеричное число\n" " \n" " Состояние выхода:\n" " Возвращает успех, если был указан допустимый РЕЖИМ или параметр." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy -#| msgid "" -#| "Wait for job completion and return exit status.\n" -#| " \n" -#| " Waits for each process identified by an ID, which may be a process ID or a\n" -#| " 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" -#| " in that job's pipeline.\n" -#| " \n" -#| " If the -n option is supplied, waits for the next job to terminate and\n" -#| " returns its exit status.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns the status of the last ID; fails if ID is invalid or an invalid\n" -#| " option is given." msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -5355,9 +5116,11 @@ msgstr "" "Ожидание завершения задания и возврат состояния выхода.\n" " \n" " Ожидает завершения всех процессов, заданных идентификаторами\n" -" (идентификатор процесса или номер задания), и возвращает их состояние выхода. Если идентификатор\n" +" (идентификатор процесса или номер задания), и возвращает их состояние " +"выхода. Если идентификатор\n" " не указан, ожидает завершения всех активных дочерних процессов\n" -" и возвращает нулевое состояние выхода. Если идентификатор не является номером задания, ожидает завершения\n" +" и возвращает нулевое состояние выхода. Если идентификатор не является " +"номером задания, ожидает завершения\n" " всех процессов в конвейере данного задания.\n" " \n" " Если указан параметр -n, ожидает завершения следующего задания\n" @@ -5367,29 +5130,42 @@ msgstr "" " Возвращает состояние последнего идентификатора. Возвращает ошибку, если\n" " указан недопустимый идентификатор или параметр." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Ожидание завершения процесса и возврат состояния выхода.\n" " \n" -" Ожидает завершения всех процессов, заданных идентификаторами (PID), и возвращает их состояние выхода.\n" +" Ожидает завершения всех процессов, заданных идентификаторами (PID), и " +"возвращает их состояние выхода.\n" " Если идентификатор процесса не указан, ожидает завершения всех активных\n" -" дочерних процессов и возвращает нулевое состояние выхода. PID должен быть идентификатором процесса.\n" +" дочерних процессов и возвращает нулевое состояние выхода. PID должен " +"быть идентификатором процесса.\n" " \n" " Состояние выхода:\n" " Возвращает состояние последнего идентификатора. Возвращает ошибку, если\n" " указан недопустимый идентификатор или параметр." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -5405,13 +5181,14 @@ msgstr "" " \n" " Цикл «for» выполняет последовательность команд для каждого элемента\n" " списка. Если операнд «in СЛОВА ...;» отсутствует, подразумевается\n" -" операнд «in \"$@\"». Каждому элементу в списке СЛОВА присваивается ИМЯ и для него\n" +" операнд «in \"$@\"». Каждому элементу в списке СЛОВА присваивается ИМЯ " +"и для него\n" " выполняются КОМАНДЫ.\n" " \n" " Состояние выхода:\n" " Возвращает состояние последней выполненной команды." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -5435,13 +5212,14 @@ msgstr "" " \t\tКОМАНДЫ\n" " \t\t(( ВЫРАЖ3 ))\n" " \tdone\n" -" ВЫРАЖ1, ВЫРАЖ2 и ВЫРАЖ3 — это математические выражения. Если любое из выражений\n" +" ВЫРАЖ1, ВЫРАЖ2 и ВЫРАЖ3 — это математические выражения. Если любое из " +"выражений\n" " не указано, считается, что оно возвращает 1.\n" " \n" " Состояние выхода:\n" " Возвращает состояние последней выполненной команды." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -5464,20 +5242,26 @@ msgstr "" " \n" " СЛОВА разворачиваются, формируя список слов. \n" " Набор развёрнутых слов выводится в поток ошибок с номерами\n" -" в начале строк. Если операнд «in СЛОВА ...;» отсутствует, подразумевается\n" -" операнд «in \"$@\"». Затем выводится приглашение $PS3 и со стандартного ввода\n" +" в начале строк. Если операнд «in СЛОВА ...;» отсутствует, " +"подразумевается\n" +" операнд «in \"$@\"». Затем выводится приглашение $PS3 и со стандартного " +"ввода\n" " считывается строка. Если строка состоит из номера,\n" " соответствующего одному из показанных слов, этому слову\n" -" присваивается указанное имя. Если строка пустая, будут повторно показаны указанные слова\n" -" и приглашение. Если прочитан символ конца файла, команда завершает свою работу. Если прочитаны\n" -" любые другие значения, указанному имени присваивается пустое значение. Прочитанная строка\n" -" сохраняется в переменную $REPLY. Команды выполняются после каждой выборки,\n" +" присваивается указанное имя. Если строка пустая, будут повторно " +"показаны указанные слова\n" +" и приглашение. Если прочитан символ конца файла, команда завершает свою " +"работу. Если прочитаны\n" +" любые другие значения, указанному имени присваивается пустое значение. " +"Прочитанная строка\n" +" сохраняется в переменную $REPLY. Команды выполняются после каждой " +"выборки,\n" " пока не будет выполнена команда прерывания.\n" " \n" " Состояние выхода:\n" " Возвращает состояние последней выполненной команды." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5494,18 +5278,20 @@ msgid "" msgstr "" "Вывод времени, потраченного на выполнение конвейера.\n" " \n" -" Выполняет конвейер и выводит значения реального времени, пользовательского времени\n" +" Выполняет конвейер и выводит значения реального времени, " +"пользовательского времени\n" " и системного времени ЦП, потраченного на выполнения конвейера.\n" " \n" " Параметры:\n" " -p\tпоказать значения времени в формате Posix\n" " \n" -" Для форматирования выходных данных используется значение переменной $TIMEFORMAT.\n" +" Для форматирования выходных данных используется значение переменной " +"$TIMEFORMAT.\n" " \n" " Состояние выхода:\n" " Возвращаемое состояние соответствует состоянию выхода конвейера." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5523,16 +5309,21 @@ msgstr "" " Состояние выхода:\n" " Возвращает состояние последней выполненной команды." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -5540,31 +5331,29 @@ msgid "" msgstr "" "Выполнение команд в зависимости от условий.\n" " \n" -" Сначала выполняется список «if КОМАНДЫ». Если состояние выхода нулевое,\n" -" выполняется список «then КОМАНДЫ». В противном случае выполняется по очереди\n" +" Сначала выполняется список «if КОМАНДЫ». Если состояние выхода " +"нулевое,\n" +" выполняется список «then КОМАНДЫ». В противном случае выполняется по " +"очереди\n" " все списки «elif КОМАНДЫ», и если их состояние выхода будет нулевым,\n" -" выполнится список «then КОМАНДЫ», и команда if завершится. В противном случае\n" -" выполнится список «else КОМАНДЫ», если он указан. Состояние выхода всей\n" -" конструкции соответствует состоянию выхода последней выполненной команды или будет нулевым,\n" +" выполнится список «then КОМАНДЫ», и команда if завершится. В противном " +"случае\n" +" выполнится список «else КОМАНДЫ», если он указан. Состояние выхода " +"всей\n" +" конструкции соответствует состоянию выхода последней выполненной команды " +"или будет нулевым,\n" " если ни одна проверка условия не возвратила истину.\n" " \n" " Состояние выхода:\n" " Возвращает состояние последней выполненной команды." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy -#| msgid "" -#| "Execute commands as long as a test succeeds.\n" -#| " \n" -#| " Expand and execute COMMANDS as long as the final command in the\n" -#| " `while' COMMANDS has an exit status of zero.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns the status of the last command executed." msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -5578,20 +5367,13 @@ msgstr "" " Состояние выхода:\n" " Возвращает состояние последней выполненной команды." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy -#| msgid "" -#| "Execute commands as long as a test does not succeed.\n" -#| " \n" -#| " Expand and execute COMMANDS as long as the final command in the\n" -#| " `until' COMMANDS has an exit status which is not zero.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns the status of the last command executed." msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -5605,18 +5387,8 @@ msgstr "" " Состояние выхода:\n" " Возвращает состояние последней выполненной команды." -#: builtins.c:1672 +#: builtins.c:1712 #, fuzzy -#| msgid "" -#| "Create a coprocess named NAME.\n" -#| " \n" -#| " Execute COMMAND asynchronously, with the standard output and standard\n" -#| " input of the command connected via a pipe to file descriptors assigned\n" -#| " to indices 0 and 1 of an array variable NAME in the executing shell.\n" -#| " The default NAME is \"COPROC\".\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns the exit status of COMMAND." msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5631,19 +5403,22 @@ msgstr "" "Создание дополнительного процесса с указанным именем.\n" " \n" " Выполняет команду асинхронно, когда стандартный вывод и стандартный\n" -" вход команды подключены через конвейер к дескрипторам файлов, которые назначены\n" -" указателям 0 и 1 массива переменных ИМЯ в активном командном процессоре.\n" +" вход команды подключены через конвейер к дескрипторам файлов, которые " +"назначены\n" +" указателям 0 и 1 массива переменных ИМЯ в активном командном " +"процессоре.\n" " Имя по умолчанию — «COPROC».\n" " \n" " Состояние выхода:\n" " Возвращает состояние выхода команды." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -5652,15 +5427,17 @@ msgid "" msgstr "" "Определение функции командного процессора.\n" " \n" -" Создаёт функцию командного процессора с указанным именем. При запуске в качестве простой команды\n" -" ИМЯ выполняет КОМАНДЫ в контексте вызывающего их командного процессора. При вызове ИМЕНИ\n" +" Создаёт функцию командного процессора с указанным именем. При запуске в " +"качестве простой команды\n" +" ИМЯ выполняет КОМАНДЫ в контексте вызывающего их командного процессора. " +"При вызове ИМЕНИ\n" " аргументы передаются в функцию как $1...$n, а функция получает\n" " название $FUNCNAME.\n" " \n" " Состояние выхода:\n" " Возвращает успех, если переменная ИМЯ доступно для записи." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5672,13 +5449,14 @@ msgid "" msgstr "" "Группировка команд.\n" " \n" -" Выполняет набор команд, объединённых в группу. Это единственный способ перенаправления\n" +" Выполняет набор команд, объединённых в группу. Это единственный способ " +"перенаправления\n" " всего набора команд.\n" " \n" " Состояние выхода:\n" " Возвращает состояние последней выполненной команды." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5694,24 +5472,18 @@ msgstr "" "Возобновление работы задания в интерактивном режиме.\n" " \n" " Аналогично аргументу JOB_SPEC для команды «fg». Возобновляет\n" -" работу остановленного или фонового задания. Через JOB_SPEC можно задать название\n" -" или номер задания. Если после номера задания указать «&», задание будет переведено\n" +" работу остановленного или фонового задания. Через JOB_SPEC можно задать " +"название\n" +" или номер задания. Если после номера задания указать «&», задание будет " +"переведено\n" " в фоновый режим, как если бы идентификатор задания был указан как\n" " аргумент для команды «bg».\n" " \n" " Состояние выхода:\n" " Возвращает состояние возобновлённого задания." -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy -#| msgid "" -#| "Evaluate arithmetic expression.\n" -#| " \n" -#| " The EXPRESSION is evaluated according to the rules for arithmetic\n" -#| " evaluation. Equivalent to \"let EXPRESSION\".\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise." msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5729,13 +5501,16 @@ msgstr "" " Состояние выхода:\n" " Возвращает 1, если выражение равно 0, в противном случае возвращает 0." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5756,16 +5531,22 @@ msgstr "" "Выполнение условной команды.\n" " \n" " Возвращает состояние 0 или 1 в зависимости от результата расчёта\n" -" условного выражения. Выражения составляются из тех же примитивов, которые используются\n" -" во встроенной команде «test». Их можно объединить с помощью следующих операторов:\n" +" условного выражения. Выражения составляются из тех же примитивов, " +"которые используются\n" +" во встроенной команде «test». Их можно объединить с помощью следующих " +"операторов:\n" " \n" " ( выражение )\tВозвращает значение выражения\n" -" ! выражение\tВозвращает истину, если выражение ложно, в противном случае возвращает ложь\n" -" ВЫРАЖ1 && ВЫРАЖ2\tВозвращает истину, если оба выражения истинны, в противном случае возвращает ложь\n" -" ВЫРАЖ1 || ВЫРАЖ2\tВозвращает истину, если хотя бы одно из выражений истинно, в противном случае возвращает ложь\n" +" ! выражение\tВозвращает истину, если выражение ложно, в противном " +"случае возвращает ложь\n" +" ВЫРАЖ1 && ВЫРАЖ2\tВозвращает истину, если оба выражения истинны, в " +"противном случае возвращает ложь\n" +" ВЫРАЖ1 || ВЫРАЖ2\tВозвращает истину, если хотя бы одно из выражений " +"истинно, в противном случае возвращает ложь\n" " \n" " Если используются операторы «==» и «!=», строка справа от\n" -" оператора используется как шаблон, и выполняется сопоставление по шаблону.\n" +" оператора используется как шаблон, и выполняется сопоставление по " +"шаблону.\n" " Если используется оператор «=~», строка справа от оператора\n" " оценивается как регулярное выражение.\n" " \n" @@ -5775,7 +5556,7 @@ msgstr "" " Состояние выхода:\n" " 0 или 1 в зависимости от значения выражения." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5833,7 +5614,8 @@ msgstr "" " BASH_VERSION\tНомер версии bash.\n" " CDPATH\t\tСписок каталогов, разделённых двоеточиями, для поиска\n" " \t\tв них каталогов, указанных как аргументы для «cd».\n" -" GLOBIGNORE\tСписок шаблонов, разделённых двоеточиями и описывающих имена файлов,\n" +" GLOBIGNORE\tСписок шаблонов, разделённых двоеточиями и описывающих имена " +"файлов,\n" " \t\tкоторые будут игнорироваться при развёртывании пути.\n" " HISTFILE\t\tИмя файла, в котором хранится журнал команд.\n" " HISTFILESIZE\tЧисло строк в файле журнала.\n" @@ -5842,11 +5624,15 @@ msgstr "" " HOME\t\tПолный путь к вашему домашнему каталогу.\n" " HOSTNAME\t\tИмя данной системы.\n" " HOSTTYPE\t\tТип процессора, на котором работает данная версия bash.\n" -" IGNOREEOF\tУправляет действием командного процессора при получении символа\n" -" \t\tсимвола конца файла в качестве единственных входных данных. Если задано, тогда значение\n" +" IGNOREEOF\tУправляет действием командного процессора при получении " +"символа\n" +" \t\tсимвола конца файла в качестве единственных входных данных. Если " +"задано, тогда значение\n" " \t\tявляется числом символов EOF, которые могут быть\n" -" \t\tпрочитаны подряд в пустой строке, после чего командный процессор будет закрыт\n" -" \t\t(по умолчанию — 10). Если не задано, EOF означает конец входных данных.\n" +" \t\tпрочитаны подряд в пустой строке, после чего командный процессор " +"будет закрыт\n" +" \t\t(по умолчанию — 10). Если не задано, EOF означает конец входных " +"данных.\n" " MACHTYPE\t\tСтрока с описанием текущей системы, в которой запущен bash.\n" " MAILCHECK\tКак часто (в секундах) bash проверяет наличие новой почты.\n" " MAILPATH\t\tСписок имён файлов, разделённых двоеточиями, в которых bash\n" @@ -5859,13 +5645,15 @@ msgstr "" " PS1\t\tОсновная строка приглашения.\n" " PS2\t\tДополнительная строка приглашения.\n" " PWD\t\tПолный путь до текущего каталога.\n" -" SHELLOPTS\tСписок включённых параметров командного процессора, разделённых двоеточиями.\n" +" SHELLOPTS\tСписок включённых параметров командного процессора, " +"разделённых двоеточиями.\n" " TERM\t\tНазвание текущего типа терминала.\n" " TIMEFORMAT\tФормат вывода данных о времени, показываемых\n" " \t\tкомандой time.\n" " auto_resume\tНепустое значение означает слово в строке запуска команды,\n" " \t\tкоторое сначала ищется в списке\n" -" \t\tостановленных заданий. Если команда найдена, задание переводится в интерактивный режим.\n" +" \t\tостановленных заданий. Если команда найдена, задание переводится в " +"интерактивный режим.\n" " \t\tЗначение «exact» означает, что слово команды должно\n" " \t\tточно совпадать с командой в списке остановленных заданий. \n" " \t\tЗначение «substring» означает, что слово команды\n" @@ -5876,39 +5664,12 @@ msgstr "" " \t\tподстановку журнала. Обычно это «!». Второй символ\n" " \t\tозначает «быструю подстановку». Обычно это «^». \n" " \t\tТретий символ означает примечание журнала. Обычно это «#».\n" -" HISTIGNORE\tСписок шаблонов, разделённых двоеточиями и описывающих команды,\n" +" HISTIGNORE\tСписок шаблонов, разделённых двоеточиями и описывающих " +"команды,\n" " \t\tкоторые должны быть сохранены в журнале.\n" -#: builtins.c:1822 +#: builtins.c:1862 #, fuzzy -#| msgid "" -#| "Add directories to stack.\n" -#| " \n" -#| " Adds a directory to the top of the directory stack, or rotates\n" -#| " the stack, making the new top of the stack the current working\n" -#| " directory. With no arguments, exchanges the top two directories.\n" -#| " \n" -#| " Options:\n" -#| " -n\tSuppresses the normal change of directory when adding\n" -#| " \tdirectories to the stack, so only the stack is manipulated.\n" -#| " \n" -#| " Arguments:\n" -#| " +N\tRotates the stack so that the Nth directory (counting\n" -#| " \tfrom the left of the list shown by `dirs', starting with\n" -#| " \tzero) is at the top.\n" -#| " \n" -#| " -N\tRotates the stack so that the Nth directory (counting\n" -#| " \tfrom the right of the list shown by `dirs', starting with\n" -#| " \tzero) is at the top.\n" -#| " \n" -#| " dir\tAdds DIR to the directory stack at the top, making it the\n" -#| " \tnew current working directory.\n" -#| " \n" -#| " The `dirs' builtin displays the directory stack.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid argument is supplied or the directory\n" -#| " change fails." msgid "" "Add directories to stack.\n" " \n" @@ -5942,7 +5703,8 @@ msgstr "" " \n" " Добавляет каталог в начало стека каталогов или выполняет\n" " ротацию стека, помещая в начало стека текущий рабочий\n" -" каталог. Если аргументы не указаны, меняет местами два первых каталога.\n" +" каталог. Если аргументы не указаны, меняет местами два первых " +"каталога.\n" " \n" " Параметры:\n" " -n\tпредотвращает обычное изменение каталога при добавлении\n" @@ -5966,32 +5728,8 @@ msgstr "" " Возвращает успех, если был указан допустимый параметр или удалось\n" " перейти в каталог." -#: builtins.c:1856 +#: builtins.c:1896 #, fuzzy -#| msgid "" -#| "Remove directories from stack.\n" -#| " \n" -#| " Removes entries from the directory stack. With no arguments, removes\n" -#| " the top directory from the stack, and changes to the new top directory.\n" -#| " \n" -#| " Options:\n" -#| " -n\tSuppresses the normal change of directory when removing\n" -#| " \tdirectories from the stack, so only the stack is manipulated.\n" -#| " \n" -#| " Arguments:\n" -#| " +N\tRemoves the Nth entry counting from the left of the list\n" -#| " \tshown by `dirs', starting with zero. For example: `popd +0'\n" -#| " \tremoves the first directory, `popd +1' the second.\n" -#| " \n" -#| " -N\tRemoves the Nth entry counting from the right of the list\n" -#| " \tshown by `dirs', starting with zero. For example: `popd -0'\n" -#| " \tremoves the last directory, `popd -1' the next to last.\n" -#| " \n" -#| " The `dirs' builtin displays the directory stack.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid argument is supplied or the directory\n" -#| " change fails." msgid "" "Remove directories from stack.\n" " \n" @@ -6041,32 +5779,8 @@ msgstr "" " Возвращает успех, если был указан допустимый параметр или удалось\n" " перейти в каталог." -#: builtins.c:1886 +#: builtins.c:1926 #, fuzzy -#| msgid "" -#| "Display directory stack.\n" -#| " \n" -#| " Display the list of currently remembered directories. Directories\n" -#| " find their way onto the list with the `pushd' command; you can get\n" -#| " back up through the list with the `popd' command.\n" -#| " \n" -#| " Options:\n" -#| " -c\tclear the directory stack by deleting all of the elements\n" -#| " -l\tdo not print tilde-prefixed versions of directories relative\n" -#| " \tto your home directory\n" -#| " -p\tprint the directory stack with one entry per line\n" -#| " -v\tprint the directory stack with one entry per line prefixed\n" -#| " \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" -#| " \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" -#| " \tdirs when invoked without options, starting with zero.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is supplied or an error occurs." msgid "" "Display directory stack.\n" " \n" @@ -6116,27 +5830,11 @@ msgstr "" " \tпоказанного при вызове без параметров, начиная с нуля.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или не возникла ошибка." +" Возвращает успех, если был указан допустимый параметр или не возникла " +"ошибка." -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy -#| 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" -#| " is set.\n" -#| " \n" -#| " Options:\n" -#| " -o\trestrict OPTNAMEs to those defined for use with `set -o'\n" -#| " -p\tprint each shell option with an indication of its status\n" -#| " -q\tsuppress output\n" -#| " -s\tenable (set) each OPTNAME\n" -#| " -u\tdisable (unset) each OPTNAME\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success if OPTNAME is enabled; fails if an invalid option is\n" -#| " given or OPTNAME is disabled." msgid "" "Set and unset shell options.\n" " \n" @@ -6157,8 +5855,10 @@ msgid "" msgstr "" "Установка и удаление параметров командного процессора.\n" " \n" -" Изменяет настройки указанных параметров командного процессора. Если не указать\n" -" аргумент с параметром, выводит все параметры командного процессора, показывая\n" +" Изменяет настройки указанных параметров командного процессора. Если не " +"указать\n" +" аргумент с параметром, выводит все параметры командного процессора, " +"показывая\n" " какой из них установлен, а какой нет.\n" " \n" " Параметры:\n" @@ -6172,37 +5872,8 @@ msgstr "" " Возвращает успех, если указанный параметр включён. Возвращает ошибку,\n" " если был указан недопустимый параметр или параметр отключён." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy -#| msgid "" -#| "Formats and prints ARGUMENTS under control of the FORMAT.\n" -#| " \n" -#| " Options:\n" -#| " -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" -#| " sequences, which are converted and copied to the standard output; and\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" -#| " 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" -#| " string for strftime(3)\n" -#| " \n" -#| " The format is re-used as necessary to consume all of the arguments. If\n" -#| " there are fewer arguments than the format requires, extra format\n" -#| " specifications behave as if a zero value or null string, as appropriate,\n" -#| " had been supplied.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or a write or assignment\n" -#| " error occurs." msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -6210,29 +5881,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Форматирует и выводит аргументы согласно указанному формату.\n" @@ -6243,57 +5921,44 @@ msgstr "" " \n" " ФОРМАТ — это символьная строка, содержащая три типа объектов: простые\n" " символы, которые копируются на стандартный вывод, экранирующие\n" -" последовательности, которые преобразовываются и копируются на стандартный\n" +" последовательности, которые преобразовываются и копируются на " +"стандартный\n" " вывод, и спецификации, которые активируют вывод следующего успешного\n" " аргумента.\n" " \n" -" В дополнение к стандартным спецификациям формата, описанным в printf(1),\n" +" В дополнение к стандартным спецификациям формата, описанным в " +"printf(1),\n" " printf интерпретирует:\n" " \n" -" %b\tразвёртывание экранирующих последовательностей с обратной косой чертой в соответствующий аргумент;\n" -" %q\tзаключение аргумента в кавычки, чтобы его можно было повторно использовать в качестве входных данных для командного процессора;\n" -" %(fmt)T вывод строки дата-время, полученной после использования FMT в качестве\n" +" %b\tразвёртывание экранирующих последовательностей с обратной косой " +"чертой в соответствующий аргумент;\n" +" %q\tзаключение аргумента в кавычки, чтобы его можно было повторно " +"использовать в качестве входных данных для командного процессора;\n" +" %(fmt)T вывод строки дата-время, полученной после использования FMT в " +"качестве\n" " строки форматирования для strftime(3)\n" " \n" -" Если необходимо задействовать все аргументы, формат используется повторно. Если\n" +" Если необходимо задействовать все аргументы, формат используется " +"повторно. Если\n" " аргументов меньше, чем требуется для форматирования, дополнительные\n" " спецификации форматирования интерпретируются как содержащие нулевое\n" " или пустое значение.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или не возникла ошибка\n" +" Возвращает успех, если был указан допустимый параметр или не возникла " +"ошибка\n" " записи или присвоения." -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy -#| msgid "" -#| "Specify how arguments are to be completed by Readline.\n" -#| " \n" -#| " For each NAME, specify how arguments are to be completed. If no options\n" -#| " are supplied, existing completion specifications are printed in a way that\n" -#| " allows them to be reused as input.\n" -#| " \n" -#| " Options:\n" -#| " -p\tprint existing completion specifications in a reusable format\n" -#| " -r\tremove a completion specification for each NAME, or, if no\n" -#| " \tNAMEs are supplied, all completion specifications\n" -#| " -D\tapply the completions and actions as the default for commands\n" -#| " \twithout any specific completion defined\n" -#| " -E\tapply the completions and actions to \"empty\" commands --\n" -#| " \tcompletion attempted on a blank line\n" -#| " \n" -#| " When completion is attempted, the actions are applied in the order the\n" -#| " uppercase-letter options are listed above. The -D option takes\n" -#| " precedence over -E.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is supplied or an error occurs." 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" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -6307,20 +5972,24 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Определение количества аргументов, завершаемых функцией readline.\n" " \n" -" Для каждого имени нужно указать количество завершаемых аргументов. Если параметры\n" +" Для каждого имени нужно указать количество завершаемых аргументов. Если " +"параметры\n" " не указаны, выводятся существующие спецификации завершения формате\n" " для повторного использования.\n" " \n" " Параметры:\n" -" -p\tвывести существующие спецификации завершения в формате для повторного использования\n" +" -p\tвывести существующие спецификации завершения в формате для " +"повторного использования\n" " -r\tудалить спецификации завершения для каждого имени или,\n" " \tесли имена не указаны, все спецификации\n" " -D\tприменить завершения и действия как стандартные для команд,\n" @@ -6333,15 +6002,22 @@ msgstr "" " высокий приоритет, чем -E.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или не возникла ошибка." +" Возвращает успех, если был указан допустимый параметр или не возникла " +"ошибка." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -6349,45 +6025,25 @@ msgstr "" "Вывод возможных завершений в зависимости от параметров.\n" " \n" " compgen предназначен для использования в функциях bash, генерирующих\n" -" возможные завершения. Если указан необязательный аргумент слово, выполняет\n" +" возможные завершения. Если указан необязательный аргумент слово, " +"выполняет\n" " сопоставление со сгенерированным словом.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или не возникла ошибка." +" Возвращает успех, если был указан допустимый параметр или не возникла " +"ошибка." -#: builtins.c:2019 +#: builtins.c:2062 #, fuzzy -#| 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" -#| " \n" -#| " Options:\n" -#| " \t-o option\tSet completion option OPTION for each NAME\n" -#| " \t-D\t\tChange options for the \"default\" command completion\n" -#| " \t-E\t\tChange options for the \"empty\" command completion\n" -#| " \n" -#| " Using `+o' instead of `-o' turns off the specified option.\n" -#| " \n" -#| " Arguments:\n" -#| " \n" -#| " Each NAME refers to a command for which a completion specification must\n" -#| " have previously been defined using the `complete' builtin. If no NAMEs\n" -#| " are supplied, compopt must be called by a function currently generating\n" -#| " completions, and the options for that currently-executing completion\n" -#| " generator are modified.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is supplied or NAME does not\n" -#| " have a completion specification defined." 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" @@ -6412,8 +6068,10 @@ msgstr "" "Изменение или вывод параметров завершения.\n" " \n" " Изменяет параметры завершения для каждого имени или, если имена\n" -" не указаны, для текущего завершения. Если параметры не указаны, выводит\n" -" параметры завершения для каждого имени или текущую спецификацию завершения.\n" +" не указаны, для текущего завершения. Если параметры не указаны, " +"выводит\n" +" параметры завершения для каждого имени или текущую спецификацию " +"завершения.\n" " \n" " Параметры:\n" " \t-o параметр\tзадать параметр завершения для каждого имени\n" @@ -6425,8 +6083,10 @@ msgstr "" " Аргументы:\n" " \n" " Каждое имя ссылается на команду, для которой уже должна быть определена\n" -" спецификация завершения с помощью встроенной команды «complete». Если имена\n" -" не указаны, функция, которая сейчас генерирует завершения, должна вызвать\n" +" спецификация завершения с помощью встроенной команды «complete». Если " +"имена\n" +" не указаны, функция, которая сейчас генерирует завершения, должна " +"вызвать\n" " compopt, и должны измениться параметры для текущего\n" " генератора завершения.\n" " \n" @@ -6434,52 +6094,27 @@ msgstr "" " Возвращает успех, если был указан допустимый параметр или для имени\n" " определена спецификация завершения." -#: builtins.c:2050 +#: builtins.c:2093 #, fuzzy -#| 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" -#| " 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" -#| " -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" -#| " -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" -#| " \n" -#| " Arguments:\n" -#| " ARRAY\t\tArray variable name to use for file data.\n" -#| " \n" -#| " If -C is supplied without -c, the default quantum is 5000. When\n" -#| " CALLBACK is evaluated, it is supplied the index of the next array\n" -#| " 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" -#| " assigning to it.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or ARRAY is readonly or\n" -#| " not an indexed array." msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -6492,25 +6127,32 @@ 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" " \n" -" Читает строки со стандартного ввода в переменную указанного индексированного массива\n" -" или из указанного файлового дескриптора, если указан параметр -u. Переменная $MAPFILE\n" +" Читает строки со стандартного ввода в переменную указанного " +"индексированного массива\n" +" или из указанного файлового дескриптора, если указан параметр -u. " +"Переменная $MAPFILE\n" " является массивом по умолчанию.\n" " \n" " Параметры:\n" -" -n число\tкопировать указанное число строк Если число равно 0, копируются все строки.\n" -" -O начало\tначать присвоение массиву, начиная с заданного указателя По умолчанию указатель равен 0.\n" +" -n число\tкопировать указанное число строк Если число равно 0, " +"копируются все строки.\n" +" -O начало\tначать присвоение массиву, начиная с заданного указателя " +"По умолчанию указатель равен 0.\n" " -s число \tотбросить указанное число первых строк\n" " -t\t\tудалить завершающие переводы строки изо всех прочитанных строк\n" -" -u fd\t\tчитать строки из файлового дескриптора, а не со стандартного входа\n" +" -u fd\t\tчитать строки из файлового дескриптора, а не со стандартного " +"входа\n" " -C callback\tоценивать callback при чтении каждой строки quantum\n" " -c quantum\tчисло строк, читаемых от каждого вызова до callback\n" " \n" @@ -6518,7 +6160,8 @@ msgstr "" " МАССИВ\t\tназвание переменной массива, используемой для данных файла.\n" " \n" " Если параметр -C указан без -c, quantum по умолчанию равен 5000. Когда\n" -" оценивается callback, он предоставляет указатель на следующий присваиваемый\n" +" оценивается callback, он предоставляет указатель на следующий " +"присваиваемый\n" " элемента массива и на строку, присваиваемую этому элементу,\n" " в качестве дополнительных аргументов.\n" " \n" @@ -6526,10 +6169,11 @@ msgstr "" " операции присвоения.\n" " \n" " Состояние выхода:\n" -" Возвращает успех, если был указан допустимый параметр или массив доступен для записи\n" +" Возвращает успех, если был указан допустимый параметр или массив " +"доступен для записи\n" " и является индексированным." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -6539,6 +6183,32 @@ msgstr "" " \n" " Синоним команды «mapfile»." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Возвращает контекст вызова текущей подпрограммы.\n" +#~ " \n" +#~ " Если выражение не указано, возвращает «$line $filename».\n" +#~ " Если выражение указано, возвращает «$line $subroutine $filename».\n" +#~ " Эти дополнительные данные можно использовать для трассировки\n" +#~ " стека.\n" +#~ " \n" +#~ " Значение выражения означает количество кадров, которое нужно\n" +#~ " вызвать для возврата к текущему кадру. Первый кадр имеет номер 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "предупреждение: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: недопустимый ключ ассоциативного массива" @@ -6579,7 +6249,8 @@ msgstr "" #~ msgstr "brace_expand> " #~ msgid "Attempt to free unknown command type `%d'.\n" -#~ msgstr "Попытка освободить память структуры команды неизвестного типа `%d'.\n" +#~ msgstr "" +#~ "Попытка освободить память структуры команды неизвестного типа `%d'.\n" #~ msgid "Report this to %s\n" #~ msgstr "Сообщите об этом по адресу %s\n" @@ -6688,7 +6359,9 @@ msgstr "" #~ msgstr "подстановка команд" #~ msgid "Can't reopen pipe to command substitution (fd %d): %s" -#~ msgstr "Невозможно вновь открыть канал для подстановки команд (файловый дексриптор %d): %s" +#~ msgstr "" +#~ "Невозможно вновь открыть канал для подстановки команд (файловый " +#~ "дексриптор %d): %s" #~ msgid "$%c: unbound variable" #~ msgstr "$%c: не заданы границы" @@ -6706,7 +6379,8 @@ msgstr "" #~ msgstr "[%s: неверный индекс" #~ msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)" -#~ msgstr "xmalloc: невозможно заново выделить %lu байтов (выделено %lu байтов)" +#~ msgstr "" +#~ "xmalloc: невозможно заново выделить %lu байтов (выделено %lu байтов)" #~ msgid "digits occur in two different argv-elements.\n" #~ msgstr "цифры встречаются в двух разных элементах argv.\n" @@ -6775,40 +6449,50 @@ msgstr "" #~ msgstr "случае, для каждого ИМЕНИ определяется псевдокоманда со ЗНАЧЕНИЕМ." #~ msgid "A trailing space in VALUE causes the next word to be checked for" -#~ msgstr "Если на конце ЗНАЧЕНИЯ есть пробелы, при разворачивании псевдокоманды" +#~ msgstr "" +#~ "Если на конце ЗНАЧЕНИЯ есть пробелы, при разворачивании псевдокоманды" #~ msgid "alias substitution when the alias is expanded. Alias returns" #~ msgstr "следующее слово проверяется на подстановку псевдокоманд. Alias" #~ msgid "true unless a NAME is given for which no alias has been defined." -#~ msgstr "возвращает true, если только не задано ИМЯ, для которого нет псевдокоманд." +#~ msgstr "" +#~ "возвращает true, если только не задано ИМЯ, для которого нет псевдокоманд." -#~ msgid "Remove NAMEs from the list of defined aliases. If the -a option is given," -#~ msgstr "Удаляет ИМЕНА из списка определённых псевдокоманд. Если задан параметр -a," +#~ msgid "" +#~ "Remove NAMEs from the list of defined aliases. If the -a option is given," +#~ msgstr "" +#~ "Удаляет ИМЕНА из списка определённых псевдокоманд. Если задан параметр -a," #~ msgid "then remove all alias definitions." #~ msgstr "удаляет все определения псевдокоманд." #~ msgid "Bind a key sequence to a Readline function, or to a macro. The" -#~ msgstr "Связывает последовательность клавиш с функцией Readline или с макросом." +#~ msgstr "" +#~ "Связывает последовательность клавиш с функцией Readline или с макросом." #~ msgid "syntax is equivalent to that found in ~/.inputrc, but must be" #~ msgstr "Синтаксис тот же, что и в ~/.inputrc, но должен передаваться" -#~ msgid "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'." +#~ msgid "" +#~ "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'." #~ msgstr "одним аргументом: bind '\"\\C-x\\C-r\": re-read-init-file'." #~ msgid "Arguments we accept:" #~ msgstr "Принимаемые аргументы:" -#~ msgid " -m keymap Use `keymap' as the keymap for the duration of this" -#~ msgstr " -m раскладка Использовать во время работы программы указанную" +#~ msgid "" +#~ " -m keymap Use `keymap' as the keymap for the duration of this" +#~ msgstr "" +#~ " -m раскладка Использовать во время работы программы указанную" #~ msgid " command. Acceptable keymap names are emacs," #~ msgstr " раскладку. Допустимые имена раскладок: emacs," -#~ msgid " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," -#~ msgstr " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," +#~ msgid "" +#~ " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," +#~ msgstr "" +#~ " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," #~ msgid " vi-command, and vi-insert." #~ msgstr " vi-command и vi-insert." @@ -6819,7 +6503,8 @@ msgstr "" #~ msgid " -P List function names and bindings." #~ msgstr " -P Вывести список имён функций и связей." -#~ msgid " -p List functions and bindings in a form that can be" +#~ msgid "" +#~ " -p List functions and bindings in a form that can be" #~ msgstr " -p Вывести список имён функций и связей в виде," #~ msgid " reused as input." @@ -6831,26 +6516,40 @@ msgstr "" #~ msgid " -f filename Read key bindings from FILENAME." #~ msgstr " -f имя_файла Прочесть связи из файла." -#~ msgid " -q function-name Query about which keys invoke the named function." -#~ msgstr " -q имя_функции Запрос, какие клавиши вызовут указанную функцию." +#~ msgid "" +#~ " -q function-name Query about which keys invoke the named function." +#~ msgstr "" +#~ " -q имя_функции Запрос, какие клавиши вызовут указанную функцию." #~ msgid " -V List variable names and values" #~ msgstr " -V Вывести список имён и значений переменных." -#~ msgid " -v List variable names and values in a form that can" -#~ msgstr " -v Вывести список имён и значений переменных в виде," +#~ msgid "" +#~ " -v List variable names and values in a form that can" +#~ msgstr "" +#~ " -v Вывести список имён и значений переменных в виде," #~ msgid " be reused as input." #~ msgstr " который можно использовать на входе" -#~ msgid " -S List key sequences that invoke macros and their values" -#~ msgstr " -S Вывести список последовательностей клавиш, вызывающих макросы и их значений." +#~ msgid "" +#~ " -S List key sequences that invoke macros and their " +#~ "values" +#~ msgstr "" +#~ " -S Вывести список последовательностей клавиш, " +#~ "вызывающих макросы и их значений." -#~ msgid " -s List key sequences that invoke macros and their values in" -#~ msgstr " -s Вывести список последовательностей клавиш, вызывающих макросы" +#~ msgid "" +#~ " -s List key sequences that invoke macros and their " +#~ "values in" +#~ msgstr "" +#~ " -s Вывести список последовательностей клавиш, вызывающих " +#~ "макросы" #~ msgid " a form that can be reused as input." -#~ msgstr " и их значений в виде, который можно использовать на входе" +#~ msgstr "" +#~ " и их значений в виде, который можно использовать на " +#~ "входе" #~ msgid "Exit from within a FOR, WHILE or UNTIL loop. If N is specified," #~ msgstr "Выйти из цикла FOR, WHILE или UNTIL. Если указано N," @@ -6877,64 +6576,89 @@ msgstr "" #~ msgstr "Изменить текущий каталог на заданный. Переменная $HOME содержит" #~ msgid "default DIR. The variable $CDPATH defines the search path for" -#~ msgstr "каталог по умолчанию. Переменная $CDPATH определяет путь, в котором" +#~ msgstr "" +#~ "каталог по умолчанию. Переменная $CDPATH определяет путь, в котором" #~ msgid "the directory containing DIR. Alternative directory names in CDPATH" -#~ msgstr "ищется каталог, содержащий КАТАЛОГ. Альтернативные каталоги в CDPATH" +#~ msgstr "" +#~ "ищется каталог, содержащий КАТАЛОГ. Альтернативные каталоги в CDPATH" #~ msgid "are separated by a colon (:). A null directory name is the same as" -#~ msgstr "разделяются точкой с запятой (:). Пустое имя каталога -- то же самое," +#~ msgstr "" +#~ "разделяются точкой с запятой (:). Пустое имя каталога -- то же самое," #~ msgid "the current directory, i.e. `.'. If DIR begins with a slash (/)," -#~ msgstr "что текущий каталог, т.е. `.'. Если КАТАЛОГ начинается с дроби (/)," +#~ msgstr "" +#~ "что текущий каталог, т.е. `.'. Если КАТАЛОГ начинается с дроби (/)," #~ msgid "then $CDPATH is not used. If the directory is not found, and the" -#~ msgstr "$CDPATh не используется. Если каталог не найден, и установлен параметр" +#~ msgstr "" +#~ "$CDPATh не используется. Если каталог не найден, и установлен параметр" #~ msgid "shell option `cdable_vars' is set, then try the word as a variable" -#~ msgstr "оболочки `cdable_vars', делается попытка интерпретировать это слово как имя" +#~ msgstr "" +#~ "оболочки `cdable_vars', делается попытка интерпретировать это слово как " +#~ "имя" #~ msgid "name. If that variable has a value, then cd to the value of that" -#~ msgstr "переменной. Если эта переменная имеет значение, каталог меняется на это" +#~ msgstr "" +#~ "переменной. Если эта переменная имеет значение, каталог меняется на это" -#~ msgid "variable. The -P option says to use the physical directory structure" -#~ msgstr "значение. Параметр -P указывает использовать физическую структуру каталогов," +#~ msgid "" +#~ "variable. The -P option says to use the physical directory structure" +#~ msgstr "" +#~ "значение. Параметр -P указывает использовать физическую структуру " +#~ "каталогов," -#~ msgid "instead of following symbolic links; the -L option forces symbolic links" -#~ msgstr "а не следовать символчиеским ссылкам, параметр -L заставляет следовать" +#~ msgid "" +#~ "instead of following symbolic links; the -L option forces symbolic links" +#~ msgstr "" +#~ "а не следовать символчиеским ссылкам, параметр -L заставляет следовать" #~ msgid "to be followed." #~ msgstr "символическим ссылкам." #~ msgid "Print the current working directory. With the -P option, pwd prints" -#~ msgstr "Вывести имя текущего рабочего каталога. С параметром -P pwd выводит" +#~ msgstr "" +#~ "Вывести имя текущего рабочего каталога. С параметром -P pwd выводит" #~ msgid "the physical directory, without any symbolic links; the -L option" -#~ msgstr "физический каталог, без символических ссылок, параметр -L заставляет" +#~ msgstr "" +#~ "физический каталог, без символических ссылок, параметр -L заставляет" #~ msgid "makes pwd follow symbolic links." #~ msgstr "pwd следовать символическим ссылкам." -#~ msgid "Runs COMMAND with ARGS ignoring shell functions. If you have a shell" -#~ msgstr "Выполняет КОМАНДУ с АРГУМЕНТАМИ, игнорируя функции оболочки. Если у вас есть" +#~ msgid "" +#~ "Runs COMMAND with ARGS ignoring shell functions. If you have a shell" +#~ msgstr "" +#~ "Выполняет КОМАНДУ с АРГУМЕНТАМИ, игнорируя функции оболочки. Если у вас " +#~ "есть" #~ msgid "function called `ls', and you wish to call the command `ls', you can" -#~ msgstr "функция оболочки `ls', а вы хотите вызвать команду `ls', можно использовать" +#~ msgstr "" +#~ "функция оболочки `ls', а вы хотите вызвать команду `ls', можно " +#~ "использовать" -#~ msgid "say \"command ls\". If the -p option is given, a default value is used" -#~ msgstr "\"command ls\". Если задан параметр -p, используется значение $PATH" +#~ msgid "" +#~ "say \"command ls\". If the -p option is given, a default value is used" +#~ msgstr "" +#~ "\"command ls\". Если задан параметр -p, используется значение $PATH" -#~ msgid "for PATH that is guaranteed to find all of the standard utilities. If" +#~ msgid "" +#~ "for PATH that is guaranteed to find all of the standard utilities. If" #~ msgstr "по умолчанию, что гарантирует отыскание стандартных утилит. Если" -#~ msgid "the -V or -v option is given, a string is printed describing COMMAND." +#~ msgid "" +#~ "the -V or -v option is given, a string is printed describing COMMAND." #~ msgstr "задан параметр -V или -v, выводится строка, описывающая КОМАНДУ." #~ msgid "The -V option produces a more verbose description." #~ msgstr "Параметр -V создаёт более подробное описание." #~ msgid "Declare variables and/or give them attributes. If no NAMEs are" -#~ msgstr "Объявляет переменные и/или придаёт им атрибуты. Если не заданы ИМЕНА," +#~ msgstr "" +#~ "Объявляет переменные и/или придаёт им атрибуты. Если не заданы ИМЕНА," #~ msgid "given, then display the values of variables instead. The -p option" #~ msgstr "выводит вместо этого значения переменных. Параметр -p выведет" @@ -6978,11 +6702,13 @@ msgstr "" #~ msgid "name only." #~ msgstr "функции." -#~ msgid "Using `+' instead of `-' turns off the given attribute instead. When" +#~ msgid "" +#~ "Using `+' instead of `-' turns off the given attribute instead. When" #~ msgstr "Использование `+' вместо `-' выключает заданный атрибут. При" #~ msgid "used in a function, makes NAMEs local, as with the `local' command." -#~ msgstr "использовании в функции делает ИМЕНа локальными, как команда `local'." +#~ msgstr "" +#~ "использовании в функции делает ИМЕНа локальными, как команда `local'." #~ msgid "Obsolete. See `declare'." #~ msgstr "Устарела. См. `declare'." @@ -6997,7 +6723,8 @@ msgstr "" #~ msgstr "Выводит АРГУМЕНТЫ. Если задано -n, подавляется завершающий переход" #~ msgid "suppressed. If the -e option is given, interpretation of the" -#~ msgstr "на новую строку. Если задан параметр -e, интерпретируются следующие" +#~ msgstr "" +#~ "на новую строку. Если задан параметр -e, интерпретируются следующие" #~ msgid "following backslash-escaped characters is turned on:" #~ msgstr "экранированные символы:" @@ -7035,14 +6762,18 @@ msgstr "" #~ msgid "\t\\num\tthe character whose ASCII code is NUM (octal)." #~ msgstr "\t\\число\tсимвол, восьмеричный ASCII-код которого равен ЧИСЛУ" -#~ msgid "You can explicitly turn off the interpretation of the above characters" +#~ msgid "" +#~ "You can explicitly turn off the interpretation of the above characters" #~ msgstr "Вы можете явно выключить интерпретацию вышеприведённых символов" #~ msgid "with the -E option." #~ msgstr "параметром -E." -#~ msgid "Output the ARGs. If -n is specified, the trailing newline is suppressed." -#~ msgstr "Выводит АРГУМЕНТЫ. Если задано -n, подавляется завершающий переход на новую строку." +#~ msgid "" +#~ "Output the ARGs. If -n is specified, the trailing newline is suppressed." +#~ msgstr "" +#~ "Выводит АРГУМЕНТЫ. Если задано -n, подавляется завершающий переход на " +#~ "новую строку." #~ msgid "Enable and disable builtin shell commands. This allows" #~ msgstr "Включает и блокирует встроенные команды оболочки. Это позволяет" @@ -7051,10 +6782,12 @@ msgstr "" #~ msgstr "использовать внешние команды с теми же именами, что команды" #~ msgid "builtin. If -n is used, the NAMEs become disabled; otherwise" -#~ msgstr "оболочки. При использовании -n ИМЕНА блокируются, в противном случае" +#~ msgstr "" +#~ "оболочки. При использовании -n ИМЕНА блокируются, в противном случае" #~ msgid "NAMEs are enabled. For example, to use the `test' found on your" -#~ msgstr "включаются. Например, чтобы использовать файл `test', а не встроенную" +#~ msgstr "" +#~ "включаются. Например, чтобы использовать файл `test', а не встроенную" #~ msgid "path instead of the shell builtin version, type `enable -n test'." #~ msgstr "в оболочку версию, введите enable -n test'. На системах," @@ -7063,7 +6796,8 @@ msgstr "" #~ msgstr "поддерживающих динамическую загрузку можно использовать параметр -f" #~ msgid "to load new builtins from the shared object FILENAME. The -d" -#~ msgstr "чтобы загрузить новые встроенные команды из разделяемого объекта ФАЙЛ." +#~ msgstr "" +#~ "чтобы загрузить новые встроенные команды из разделяемого объекта ФАЙЛ." #~ msgid "option will delete a builtin previously loaded with -f. If no" #~ msgstr "Параметр -d удаляет команды, загруженные -f. Если имена, кроме" @@ -7072,7 +6806,8 @@ msgstr "" #~ msgstr "как в параметрах, не заданы, или если задан параметр -p, выводится" #~ msgid "of builtins is printed. The -a option means to print every builtin" -#~ msgstr "список встроенных команд. Параметр -a требует вывести все встроенные" +#~ msgstr "" +#~ "список встроенных команд. Параметр -a требует вывести все встроенные" #~ msgid "with an indication of whether or not it is enabled. The -s option" #~ msgstr "команды с информацией, блокированы ли они. Параметр -s выводит" @@ -7083,17 +6818,22 @@ msgstr "" #~ msgid "option displays a list of all disabled builtins." #~ msgstr "всех блокированных встроенных команд." -#~ msgid "Read ARGs as input to the shell and execute the resulting command(s)." -#~ msgstr "Читает АРГУМЕНТЫ как входной текст оболочки и выполняет полученные команды." +#~ msgid "" +#~ "Read ARGs as input to the shell and execute the resulting command(s)." +#~ msgstr "" +#~ "Читает АРГУМЕНТЫ как входной текст оболочки и выполняет полученные " +#~ "команды." #~ msgid "Getopts is used by shell procedures to parse positional parameters." -#~ msgstr "Getopts используется процедурами оболочки для анализа параметров командной" +#~ msgstr "" +#~ "Getopts используется процедурами оболочки для анализа параметров командной" #~ msgid "OPTSTRING contains the option letters to be recognized; if a letter" #~ msgstr "строки. СТРОКА_ПАРАМЕТРОВ содержит буквы параметров, которые нужно" #~ msgid "is followed by a colon, the option is expected to have an argument," -#~ msgstr "распознать. Если за буквой следует двоеточие, параметр должен иметь" +#~ msgstr "" +#~ "распознать. Если за буквой следует двоеточие, параметр должен иметь" #~ msgid "which should be separated from it by white space." #~ msgstr "аргумент, отделённый от него промежутком." @@ -7108,7 +6848,8 @@ msgstr "" #~ msgstr "следующего аргумента в переменную оболочки OPTIND. OPTIND" #~ msgid "variable OPTIND. OPTIND is initialized to 1 each time the shell or" -#~ msgstr "принимает значение 1 при каждом вызове оболочки или скрипта оболочки." +#~ msgstr "" +#~ "принимает значение 1 при каждом вызове оболочки или скрипта оболочки." #~ msgid "a shell script is invoked. When an option requires an argument," #~ msgstr "Если параметр требует аргумента, getopts помещает этот аргумент" @@ -7117,16 +6858,19 @@ msgstr "" #~ msgstr "в переменную оболочки OPTARG." #~ msgid "getopts reports errors in one of two ways. If the first character" -#~ msgstr "getopts сообщает об ошибках одним из двух способов. Если первый символ" +#~ msgstr "" +#~ "getopts сообщает об ошибках одним из двух способов. Если первый символ" #~ msgid "of OPTSTRING is a colon, getopts uses silent error reporting. In" -#~ msgstr "OPTSTRING -- двоеточие, getopts использует бесшумный способ. В этом" +#~ msgstr "" +#~ "OPTSTRING -- двоеточие, getopts использует бесшумный способ. В этом" #~ msgid "this mode, no error messages are printed. If an illegal option is" #~ msgstr "случае сообщения об ошибках не выводятся. Если найден недопустимый" #~ msgid "seen, getopts places the option character found into OPTARG. If a" -#~ msgstr "параметр, getopts помещает найденный символ в OPTARG. Если не найден" +#~ msgstr "" +#~ "параметр, getopts помещает найденный символ в OPTARG. Если не найден" #~ msgid "required argument is not found, getopts places a ':' into NAME and" #~ msgstr "требуемый аргумент, getopts помещает в ИМЯ ':', а в OPTARG --" @@ -7183,7 +6927,8 @@ msgstr "" #~ msgstr "Если файл не может быть запущен, а оболочка не интерактивна," #~ msgid "then the shell exits, unless the variable \"no_exit_on_failed_exec\"" -#~ msgstr "производится выход из оболочки, если только не установлена переменная" +#~ msgstr "" +#~ "производится выход из оболочки, если только не установлена переменная" #~ msgid "is set." #~ msgstr "\"no_exit_on_failed_exec\"" @@ -7191,8 +6936,10 @@ msgstr "" #~ msgid "is that of the last command executed." #~ msgstr "завершения будет таким же, как у последней выполненной команды." -#~ msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a" -#~ msgstr "ПЕРВАЯ и ПОСЛЕДНЯЯ могут быть числами, ограничивающими диапазон, или" +#~ msgid "" +#~ "FIRST and LAST can be numbers specifying the range, or FIRST can be a" +#~ msgstr "" +#~ "ПЕРВАЯ и ПОСЛЕДНЯЯ могут быть числами, ограничивающими диапазон, или" #~ msgid "string, which means the most recent command beginning with that" #~ msgstr "же ПЕРВАЯ может быть строкой, означающей самую недавнюю команду," @@ -7200,10 +6947,13 @@ msgstr "" #~ msgid "string." #~ msgstr "начинающуюся с этой строки." -#~ msgid " -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR," -#~ msgstr " -e ИМЯ_РЕДАКТОРА выбирает используемый редактор. По умолчанию FCEDIT," +#~ msgid "" +#~ " -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR," +#~ msgstr "" +#~ " -e ИМЯ_РЕДАКТОРА выбирает используемый редактор. По умолчанию FCEDIT," -#~ msgid " then the editor which corresponds to the current readline editing" +#~ msgid "" +#~ " then the editor which corresponds to the current readline editing" #~ msgstr " затем EDITOR, затем редактор, соответствуюший текущему режиму" #~ msgid " mode, then vi." @@ -7215,11 +6965,14 @@ msgstr "" #~ msgid " -n means no line numbers listed." #~ msgstr " -n не выводить номера строк." -#~ msgid " -r means reverse the order of the lines (making it newest listed first)." +#~ msgid "" +#~ " -r means reverse the order of the lines (making it newest listed " +#~ "first)." #~ msgstr " -r вывести строки в обратном порядке (в начале самые новые)." #~ msgid "With the `fc -s [pat=rep ...] [command]' format, the command is" -#~ msgstr "В формате `fc -s [шаблон=замена] [команда] команда выполняется заново" +#~ msgstr "" +#~ "В формате `fc -s [шаблон=замена] [команда] команда выполняется заново" #~ msgid "re-executed after the substitution OLD=NEW is performed." #~ msgstr "после того, как произведена подстановка." @@ -7231,7 +6984,8 @@ msgstr "" #~ msgstr "команду, начинающуюся с `cc', а `r' заново выполняет последнюю" #~ msgid "Place JOB_SPEC in the foreground, and make it the current job. If" -#~ msgstr "Возвращает задачу с указанным номером из фонового режима и делает её" +#~ msgstr "" +#~ "Возвращает задачу с указанным номером из фонового режима и делает её" #~ msgid "JOB_SPEC is not present, the shell's notion of the current job is" #~ msgstr "текущей задачей. Если номер не задан, используется представление" @@ -7240,10 +6994,12 @@ msgstr "" #~ msgstr "оболочки о текущей задаче." #~ msgid "Place JOB_SPEC in the background, as if it had been started with" -#~ msgstr "Переводит задачу с указанным номером в фоновый режим, как если бы она" +#~ msgstr "" +#~ "Переводит задачу с указанным номером в фоновый режим, как если бы она" #~ msgid "`&'. If JOB_SPEC is not present, the shell's notion of the current" -#~ msgstr "была запущена с `&'. Если номер не задан, используется представление" +#~ msgstr "" +#~ "была запущена с `&'. Если номер не задан, используется представление" #~ msgid "job is used." #~ msgstr "оболочки о текущей задаче." @@ -7260,14 +7016,17 @@ msgstr "" #~ msgid "option causes the shell to forget all remembered locations. If no" #~ msgstr "список положений в памяти. Если аргументы не заданы, выводится" -#~ msgid "arguments are given, information about remembered commands is displayed." +#~ msgid "" +#~ "arguments are given, information about remembered commands is displayed." #~ msgstr "информация о запомненных командах." #~ msgid "Display helpful information about builtin commands. If PATTERN is" -#~ msgstr "Вывести полезную информацию о встроенных командах. Если задан ШАБЛОН," +#~ msgstr "" +#~ "Вывести полезную информацию о встроенных командах. Если задан ШАБЛОН," #~ msgid "specified, gives detailed help on all commands matching PATTERN," -#~ msgstr "вывести подробную справку по всем командам, соответствующим ШАБЛОНУ," +#~ msgstr "" +#~ "вывести подробную справку по всем командам, соответствующим ШАБЛОНУ," #~ msgid "otherwise a list of the builtins is printed." #~ msgstr "в противном случае вывести список встроенных команд." @@ -7276,15 +7035,18 @@ msgstr "" #~ msgstr "Вывести историю команд в виде списка с номерами строк. Изменённые" #~ msgid "with a `*' have been modified. Argument of N says to list only" -#~ msgstr "строки помечаются символом `*'. Аргумент N указывает выводить только" +#~ msgstr "" +#~ "строки помечаются символом `*'. Аргумент N указывает выводить только" #~ msgid "the last N lines. The -c option causes the history list to be" #~ msgstr "последние N строк. Параметр -c очищает историю команд, удаляя" -#~ msgid "cleared by deleting all of the entries. The `-w' option writes out the" +#~ msgid "" +#~ "cleared by deleting all of the entries. The `-w' option writes out the" #~ msgstr "все строки. Параметр `-w' записывает текущую историю в указанный" -#~ msgid "current history to the history file; `-r' means to read the file and" +#~ msgid "" +#~ "current history to the history file; `-r' means to read the file and" #~ msgstr "файл; `-r' читает такой файл и дополняет его содержимым историю" #~ msgid "append the contents to the history list instead. `-a' means" @@ -7311,7 +7073,8 @@ msgstr "" #~ msgid "the history list as a single entry. The -p option means to perform" #~ msgstr "Параметр -p выполняет развёртывание каждого АРГУМЕНТА и выводит" -#~ msgid "history expansion on each ARG and display the result, without storing" +#~ msgid "" +#~ "history expansion on each ARG and display the result, without storing" #~ msgstr "результат, не сохраняя ничего в списке истории команд." #~ msgid "anything in the history list." @@ -7323,41 +7086,53 @@ msgstr "" #~ msgid "to the normal information; the -p option lists process id's only." #~ msgstr "идентификаторы процессов: параметр -p выодит только идентификаторы." -#~ msgid "If -n is given, only processes that have changed status since the last" +#~ msgid "" +#~ "If -n is given, only processes that have changed status since the last" #~ msgstr "Если задано -n, выводятся только процессы, статус которых изменился" -#~ msgid "notification are printed. JOBSPEC restricts output to that job. The" -#~ msgstr "со времени последнего уведомления. Если задан номер задачи, выводится" +#~ msgid "" +#~ "notification are printed. JOBSPEC restricts output to that job. The" +#~ msgstr "" +#~ "со времени последнего уведомления. Если задан номер задачи, выводится" #~ msgid "-r and -s options restrict output to running and stopped jobs only," #~ msgstr "только она. Параметры -r и -s выводит только работающие или только" #~ msgid "respectively. Without options, the status of all active jobs is" -#~ msgstr "остановленные задачи соответственно. Без параметров выодится статус" +#~ msgstr "" +#~ "остановленные задачи соответственно. Без параметров выодится статус" -#~ msgid "printed. If -x is given, COMMAND is run after all job specifications" -#~ msgstr "всех активных задач. Если задано -x, в КОМАНДЕ вместо всех АРГУМЕНТОВ" +#~ msgid "" +#~ "printed. If -x is given, COMMAND is run after all job specifications" +#~ msgstr "" +#~ "всех активных задач. Если задано -x, в КОМАНДЕ вместо всех АРГУМЕНТОВ" -#~ msgid "that appear in ARGS have been replaced with the process ID of that job's" +#~ msgid "" +#~ "that appear in ARGS have been replaced with the process ID of that job's" #~ msgstr "(номеров задач) подставляется идентификатор лидера соответствующей" #~ msgid "process group leader." #~ msgstr "группы процессов, и КОМАНДА выполняется." #~ msgid "Removes each JOBSPEC argument from the table of active jobs." -#~ msgstr "Удаляет все задачи, заданные спецификациями в аргументе, из таблицы задач." +#~ msgstr "" +#~ "Удаляет все задачи, заданные спецификациями в аргументе, из таблицы задач." #~ msgid "Send the processes named by PID (or JOB) the signal SIGSPEC. If" -#~ msgstr "Посылает указанным процессам (заданным PID или спецификацией) сигнал" +#~ msgstr "" +#~ "Посылает указанным процессам (заданным PID или спецификацией) сигнал" -#~ msgid "SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l'" +#~ msgid "" +#~ "SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l'" #~ msgstr "SIGSPEC. Если отсутствует SIGSPEC, посылается SIGTERM. Аргументом" #~ msgid "lists the signal names; if arguments follow `-l' they are assumed to" -#~ msgstr "параметра `-l' служит список сигналов. Если он присутствует, выводятся" +#~ msgstr "" +#~ "параметра `-l' служит список сигналов. Если он присутствует, выводятся" #~ msgid "be signal numbers for which names should be listed. Kill is a shell" -#~ msgstr "названия сигналов с этими номерами. Kill является встроенной командой" +#~ msgstr "" +#~ "названия сигналов с этими номерами. Kill является встроенной командой" #~ msgid "builtin for two reasons: it allows job IDs to be used instead of" #~ msgstr "оболочки по двум причинам: она позволяет использовать номера задач," @@ -7365,14 +7140,16 @@ msgstr "" #~ msgid "process IDs, and, if you have reached the limit on processes that" #~ msgstr "а не процессов, и если вы исчерпаете лимит созданных процессов," -#~ msgid "you can create, you don't have to start a process to kill another one." +#~ msgid "" +#~ "you can create, you don't have to start a process to kill another one." #~ msgstr "вы не сможете запустить новый процесс, уничтожающий один из старых." #~ msgid "Each ARG is an arithmetic expression to be evaluated. Evaluation" #~ msgstr "Каждый аргумент рассматривается как арифметическое выражение." #~ msgid "is done in long integers with no check for overflow, though division" -#~ msgstr "Вычисление производится над длинными целыми без контроля переполнения," +#~ msgstr "" +#~ "Вычисление производится над длинными целыми без контроля переполнения," #~ msgid "by 0 is trapped and flagged as an error. The following list of" #~ msgstr "хотя деление на ноль отслеживается и считается ошибкой. Операции в" @@ -7461,47 +7238,61 @@ msgstr "" #~ msgid "One line is read from the standard input, and the first word is" #~ msgstr "Со стандартного ввода считывается одна строка, первое её слово" -#~ msgid "assigned to the first NAME, the second word to the second NAME, and so" +#~ msgid "" +#~ "assigned to the first NAME, the second word to the second NAME, and so" #~ msgstr "становится значением первого ИМЕНИ, второе -- второго ИМЕНИ и т.д." -#~ msgid "on, with leftover words assigned to the last NAME. Only the characters" -#~ msgstr "Последнему ИМЕНИ присваивается весь остаток строки. Разделителями слов" +#~ msgid "" +#~ "on, with leftover words assigned to the last NAME. Only the characters" +#~ msgstr "" +#~ "Последнему ИМЕНИ присваивается весь остаток строки. Разделителями слов" #~ msgid "found in $IFS are recognized as word delimiters. The return code is" #~ msgstr "считаются только символы, входящие в $IFS. Код возврата равен нулю," -#~ msgid "zero, unless end-of-file is encountered. If no NAMEs are supplied, the" +#~ msgid "" +#~ "zero, unless end-of-file is encountered. If no NAMEs are supplied, the" #~ msgstr "за исключением случая, если встретился конец файла. Если ИМЕНА не" -#~ msgid "line read is stored in the REPLY variable. If the -r option is given," -#~ msgstr "заданы, прочитанная строка помещается в переменную REPLY. Если задан" +#~ msgid "" +#~ "line read is stored in the REPLY variable. If the -r option is given," +#~ msgstr "" +#~ "заданы, прочитанная строка помещается в переменную REPLY. Если задан" #~ msgid "this signifies `raw' input, and backslash escaping is disabled. If" -#~ msgstr "параметр -r, это означает `сырой' ввод, т.е. символ \\ не экранирует" +#~ msgstr "" +#~ "параметр -r, это означает `сырой' ввод, т.е. символ \\ не экранирует" #~ msgid "the `-p' option is supplied, the string supplied as an argument is" -#~ msgstr "символы. Если задано `-p', перед чтением на вывод в качестве аргумента" +#~ msgstr "" +#~ "символы. Если задано `-p', перед чтением на вывод в качестве аргумента" -#~ msgid "output without a trailing newline before attempting to read. If -a is" -#~ msgstr "подаётся заданная строка (без завершающего символа перевода строки)." +#~ msgid "" +#~ "output without a trailing newline before attempting to read. If -a is" +#~ msgstr "" +#~ "подаётся заданная строка (без завершающего символа перевода строки)." -#~ msgid "supplied, the words read are assigned to sequential indices of ARRAY," +#~ msgid "" +#~ "supplied, the words read are assigned to sequential indices of ARRAY," #~ msgstr "Если задано -a, прочитанные слова становятся значениями элементов" #~ msgid "starting at zero. If -e is supplied and the shell is interactive," -#~ msgstr "МАССИВА, начиная с нулевого. Если задано -c и оболочка интерактивна," +#~ msgstr "" +#~ "МАССИВА, начиная с нулевого. Если задано -c и оболочка интерактивна," #~ msgid "readline is used to obtain the line." #~ msgstr "чтобы получить строку используется readline." -#~ msgid "Causes a function to exit with the return value specified by N. If N" +#~ msgid "" +#~ "Causes a function to exit with the return value specified by N. If N" #~ msgstr "Заставляет функцию завершить работу с кодом возврата, заданным N." #~ msgid "is omitted, the return status is that of the last command." #~ msgstr "Если N опущено, им становится код возврата последней команды." #~ msgid " -a Mark variables which are modified or created for export." -#~ msgstr " -a Экспортировать переменные, которые изменялись или создавались." +#~ msgstr "" +#~ " -a Экспортировать переменные, которые изменялись или создавались." #~ msgid " -b Notify of job termination immediately." #~ msgstr " -b Немедленно выводить сообщения о завершении задач." @@ -7515,7 +7306,8 @@ msgstr "" #~ msgid " -h Remember the location of commands as they are looked up." #~ msgstr " -h Запоминать расположение обработанных команд." -#~ msgid " -i Force the shell to be an \"interactive\" one. Interactive shells" +#~ msgid "" +#~ " -i Force the shell to be an \"interactive\" one. Interactive shells" #~ msgstr " -i Сделать оболочку \"интерактивной\". Интерактивные оболочки" #~ msgid " always read `~/.bashrc' on startup." @@ -7546,7 +7338,8 @@ msgstr "" #~ msgstr " braceexpand то же, что -B" #~ msgid " emacs use an emacs-style line editing interface" -#~ msgstr " emacs использовать стиль редактирования строк emacs" +#~ msgstr "" +#~ " emacs использовать стиль редактирования строк emacs" #~ msgid " errexit same as -e" #~ msgstr " errexit то же, что -e" @@ -7563,8 +7356,10 @@ msgstr "" #~ msgid " interactive-comments" #~ msgstr " interactive-comments" -#~ msgid " allow comments to appear in interactive commands" -#~ msgstr " допускает комментарии в интерактивных командах" +#~ msgid "" +#~ " allow comments to appear in interactive commands" +#~ msgstr "" +#~ " допускает комментарии в интерактивных командах" #~ msgid " keyword same as -k" #~ msgstr " keyword то же, что -k" @@ -7593,10 +7388,12 @@ msgstr "" #~ msgid " physical same as -P" #~ msgstr " physical то же, что -P" -#~ msgid " posix change the behavior of bash where the default" +#~ msgid "" +#~ " posix change the behavior of bash where the default" #~ msgstr " posix привести поведение bash, по умолчанию не" -#~ msgid " operation differs from the 1003.2 standard to" +#~ msgid "" +#~ " operation differs from the 1003.2 standard to" #~ msgstr " соответствующее стандарту 1003.2, в" #~ msgid " match the standard" @@ -7614,14 +7411,18 @@ msgstr "" #~ msgid " xtrace same as -x" #~ msgstr " xtrace то же, что -x" -#~ msgid " -p Turned on whenever the real and effective user ids do not match." -#~ msgstr " -p Если реальный и эффективный uid не совпадают, включается всегда." +#~ msgid "" +#~ " -p Turned on whenever the real and effective user ids do not match." +#~ msgstr "" +#~ " -p Если реальный и эффективный uid не совпадают, включается всегда." #~ msgid " Disables processing of the $ENV file and importing of shell" #~ msgstr " Отключает обработку файла $ENV и импорт функций оболочки." -#~ msgid " functions. Turning this option off causes the effective uid and" -#~ msgstr " При выключении этого параметра эффективные uid и gid становятся" +#~ msgid "" +#~ " functions. Turning this option off causes the effective uid and" +#~ msgstr "" +#~ " При выключении этого параметра эффективные uid и gid становятся" #~ msgid " gid to be set to the real uid and gid." #~ msgstr " равными реальным." @@ -7630,7 +7431,8 @@ msgstr "" #~ msgstr " -t Завершить работу после чтения и выполнения одной команды." #~ msgid " -u Treat unset variables as an error when substituting." -#~ msgstr " -u При подстановке считать не установленные переменные ошибками." +#~ msgstr "" +#~ " -u При подстановке считать не установленные переменные ошибками." #~ msgid " -v Print shell input lines as they are read." #~ msgstr " -v Выводить прочитанные строки входного текста оболочки." @@ -7654,7 +7456,8 @@ msgstr "" #~ msgstr " обычных файлов при перенаправлении вывода." #~ msgid " -P If set, do not follow symbolic links when executing commands" -#~ msgstr " -P Не следовать символическим ссылкам при выполнении таких команд," +#~ msgstr "" +#~ " -P Не следовать символическим ссылкам при выполнении таких команд," #~ msgid " such as cd which change the current directory." #~ msgstr " как cd, т.е. изменяющих текущий каталог." @@ -7663,9 +7466,11 @@ msgstr "" #~ msgstr "Использование + вместо - отключает флаг. Эти флаги могут также" #~ msgid "flags can also be used upon invocation of the shell. The current" -#~ msgstr "использоваться при запуске оболочки. Текущий набор флагов содержится" +#~ msgstr "" +#~ "использоваться при запуске оболочки. Текущий набор флагов содержится" -#~ msgid "set of flags may be found in $-. The remaining n ARGs are positional" +#~ msgid "" +#~ "set of flags may be found in $-. The remaining n ARGs are positional" #~ msgstr "в $-. Остальные n аргументов -- позиционные параметры, и им, по" #~ msgid "parameters and are assigned, in order, to $1, $2, .. $n. If no" @@ -7678,7 +7483,8 @@ msgstr "" #~ msgstr "Для каждого ИМЕНИ удаляет соответствующую переменную или функцию." #~ msgid "the `-v', unset will only act on variables. Given the `-f' flag," -#~ msgstr "Если задано -v, unset влияет только на переменные, если -f -- только" +#~ msgstr "" +#~ "Если задано -v, unset влияет только на переменные, если -f -- только" #~ msgid "unset will only act on functions. With neither flag, unset first" #~ msgstr "на функции. Без флагов unset в первую очередь пытается удалить" @@ -7686,7 +7492,8 @@ msgstr "" #~ msgid "tries to unset a variable, and if that fails, then tries to unset a" #~ msgstr "переменную, если это не удаётся -- функцию. Некоторые переменные" -#~ msgid "function. Some variables (such as PATH and IFS) cannot be unset; also" +#~ msgid "" +#~ "function. Some variables (such as PATH and IFS) cannot be unset; also" #~ msgstr "(такие как PATH и IFS) не могут быть удалены. См." #~ msgid "see readonly." @@ -7713,19 +7520,24 @@ msgstr "" #~ msgid "processing." #~ msgstr "параметров." -#~ msgid "The given NAMEs are marked readonly and the values of these NAMEs may" -#~ msgstr "Заданные ИМЕНА помечаются только для чтения, и значения этих ИМЁН не" +#~ msgid "" +#~ "The given NAMEs are marked readonly and the values of these NAMEs may" +#~ msgstr "" +#~ "Заданные ИМЕНА помечаются только для чтения, и значения этих ИМЁН не" #~ msgid "not be changed by subsequent assignment. If the -f option is given," -#~ msgstr "могут изменяться в последующих присваиваниях. Если задан параметр -f," +#~ msgstr "" +#~ "могут изменяться в последующих присваиваниях. Если задан параметр -f," #~ msgid "then functions corresponding to the NAMEs are so marked. If no" #~ msgstr "так помечаются функции с соответствующими ИМЕНАМИ. Если аргументы" -#~ msgid "arguments are given, or if `-p' is given, a list of all readonly names" +#~ msgid "" +#~ "arguments are given, or if `-p' is given, a list of all readonly names" #~ msgstr "не заданы, или если задано `-p', выводится список имён только для" -#~ msgid "is printed. An argument of `-n' says to remove the readonly property" +#~ msgid "" +#~ "is printed. An argument of `-n' says to remove the readonly property" #~ msgstr "чтения. Аргумент `-n' указывает снять свойство `только для чтения'" #~ msgid "from subsequent NAMEs. The `-a' option means to treat each NAME as" @@ -7734,8 +7546,10 @@ msgstr "" #~ msgid "an array variable. An argument of `--' disables further option" #~ msgstr "как массив. Аргумент `--' прекращает дальнейшую обработку" -#~ msgid "The positional parameters from $N+1 ... are renamed to $1 ... If N is" -#~ msgstr "Позиционные параметры начиная с $N+1 переобозначаются как $1,... Если" +#~ msgid "" +#~ "The positional parameters from $N+1 ... are renamed to $1 ... If N is" +#~ msgstr "" +#~ "Позиционные параметры начиная с $N+1 переобозначаются как $1,... Если" #~ msgid "not given, it is assumed to be 1." #~ msgstr "N не задано, оно предполагается равным 1." @@ -7774,7 +7588,8 @@ msgstr "" #~ msgstr " -b ФАЙЛ Истина, если файл -- специальный блочный файл." #~ msgid " -c FILE True if file is character special." -#~ msgstr " -c ФАЙл Истина, если файл -- специальный символьный файл." +#~ msgstr "" +#~ " -c ФАЙл Истина, если файл -- специальный символьный файл." #~ msgid " -d FILE True if file is a directory." #~ msgstr " -d ФАЙЛ Истина, если файл -- каталог." @@ -7783,19 +7598,23 @@ msgstr "" #~ msgstr " -e ФАЙЛ Истина, если файл существует." #~ msgid " -f FILE True if file exists and is a regular file." -#~ msgstr " -f ФАЙЛ Истина, если файл существует и является обычным файлом." +#~ msgstr "" +#~ " -f ФАЙЛ Истина, если файл существует и является обычным файлом." #~ msgid " -g FILE True if file is set-group-id." #~ msgstr " -g ФАЙЛ Истина, если у файла установлен атрибут SGID." #~ msgid " -h FILE True if file is a symbolic link. Use \"-L\"." -#~ msgstr " -h ФАЙЛ Истина, если файл -- символическая ссылка. Используйте \"-L\"." +#~ msgstr "" +#~ " -h ФАЙЛ Истина, если файл -- символическая ссылка. Используйте " +#~ "\"-L\"." #~ msgid " -L FILE True if file is a symbolic link." #~ msgstr " -L ФАЙЛ Истина, если файл -- символическая ссылка." #~ msgid " -k FILE True if file has its \"sticky\" bit set." -#~ msgstr " -k ФАЙЛ Истина, если у файла устанолвен \"бит привязчивости\"." +#~ msgstr "" +#~ " -k ФАЙЛ Истина, если у файла устанолвен \"бит привязчивости\"." #~ msgid " -p FILE True if file is a named pipe." #~ msgstr " -p ФАЙЛ Истина, если файл -- именованный канал." @@ -7810,7 +7629,9 @@ msgstr "" #~ msgstr " -S ФАЙЛ Истина, если файл -- сокет." #~ msgid " -t FD True if FD is opened on a terminal." -#~ msgstr " -t FD Истина, если файл с дескриптором FD связан с терминалом." +#~ msgstr "" +#~ " -t FD Истина, если файл с дескриптором FD связан с " +#~ "терминалом." #~ msgid " -u FILE True if the file is set-user-id." #~ msgstr " -u ФАЙЛ Истина, если у файла установлен атрибут SUID." @@ -7824,11 +7645,14 @@ msgstr "" #~ msgid " -O FILE True if the file is effectively owned by you." #~ msgstr " -O ФАЙЛ Истина, если вы -- эффективный владелец файла." -#~ msgid " -G FILE True if the file is effectively owned by your group." -#~ msgstr " -G ФАЙЛ Истина, если ваша группа -- эффективная группа файла." +#~ msgid "" +#~ " -G FILE True if the file is effectively owned by your group." +#~ msgstr "" +#~ " -G ФАЙЛ Истина, если ваша группа -- эффективная группа файла." #~ msgid " FILE1 -nt FILE2 True if file1 is newer than (according to" -#~ msgstr " ФАЙЛ1 -nt ФАЙЛ2 Истина, если файл1 более новый (по дате последнего" +#~ msgstr "" +#~ " ФАЙЛ1 -nt ФАЙЛ2 Истина, если файл1 более новый (по дате последнего" #~ msgid " modification date) file2." #~ msgstr " изменения), чем файл2." @@ -7866,14 +7690,20 @@ msgstr "" #~ msgid " STRING1 < STRING2" #~ msgstr " СТРОКА1 < СТРОКА2" -#~ msgid " True if STRING1 sorts before STRING2 lexicographically" -#~ msgstr " Истина, если СТРОКА1 лексикографически стоит раньше СТРОКИ2" +#~ msgid "" +#~ " True if STRING1 sorts before STRING2 lexicographically" +#~ msgstr "" +#~ " Истина, если СТРОКА1 лексикографически стоит раньше " +#~ "СТРОКИ2" #~ msgid " STRING1 > STRING2" #~ msgstr " СТРОКА1 > СТРОКА2" -#~ msgid " True if STRING1 sorts after STRING2 lexicographically" -#~ msgstr " Истина, если СТРОКА1 лексикографически стоит позже СТРОКИ2" +#~ msgid "" +#~ " True if STRING1 sorts after STRING2 lexicographically" +#~ msgstr "" +#~ " Истина, если СТРОКА1 лексикографически стоит позже " +#~ "СТРОКИ2" #~ msgid "Other operators:" #~ msgstr "Прочие операции:" @@ -7894,9 +7724,11 @@ msgstr "" #~ msgstr " -lt, -le, -gt или -ge." #~ msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal," -#~ msgstr "Бинарные арифметические операции возвращают истину, если АРГ1 равен," +#~ msgstr "" +#~ "Бинарные арифметические операции возвращают истину, если АРГ1 равен," -#~ msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal" +#~ msgid "" +#~ "less-than, less-than-or-equal, greater-than, or greater-than-or-equal" #~ msgstr "не равен, меньше, меньше или равен, больше или больше или равен" #~ msgid "than ARG2." @@ -7915,22 +7747,27 @@ msgstr "" #~ msgstr "запущенных из оболочки." #~ msgid "The command ARG is to be read and executed when the shell receives" -#~ msgstr "Команда АРГ должна быть прочитана и выполнена при получении оболочкой" +#~ msgstr "" +#~ "Команда АРГ должна быть прочитана и выполнена при получении оболочкой" #~ msgid "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" -#~ msgstr "указанного(ых) сигнала(ов). Если АРГ не задан, все указанные сигналы" +#~ msgstr "" +#~ "указанного(ых) сигнала(ов). Если АРГ не задан, все указанные сигналы" #~ msgid "reset to their original values. If ARG is the null string each" -#~ msgstr "обрабатываются обработчиками по умолчанию. Если АРГ -- пустая строка," +#~ msgstr "" +#~ "обрабатываются обработчиками по умолчанию. Если АРГ -- пустая строка," #~ msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." -#~ msgstr "все указанные сигналы будут игнорироваться оболочкой и вызываемыми ей" +#~ msgstr "" +#~ "все указанные сигналы будут игнорироваться оболочкой и вызываемыми ей" #~ msgid "If SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" #~ msgstr "командами. Если задан сигнал EXIT (0), команда АРГ выполняется при" #~ msgid "the shell. If SIGNAL_SPEC is DEBUG, ARG is executed after every" -#~ msgstr "выходе из оболочки, если DEBUG, АРГ выполняется при выполнении каждой" +#~ msgstr "" +#~ "выходе из оболочки, если DEBUG, АРГ выполняется при выполнении каждой" #~ msgid "command. If ARG is `-p' then the trap commands associated with" #~ msgstr "команды. Если АРГ -- `-p', выводятся команды, связанные с заданными" @@ -7941,10 +7778,12 @@ msgstr "" #~ msgid "only `-p' is given, trap prints the list of commands associated with" #~ msgstr "trap выводит список команд, связанных со всеми сигналами. Сигнал" -#~ msgid "each signal number. SIGNAL_SPEC is either a signal name in <signal.h>" +#~ msgid "" +#~ "each signal number. SIGNAL_SPEC is either a signal name in <signal.h>" #~ msgstr "задаётся либо своим именем в <signal.h>, либо номером. `trap -l'" -#~ msgid "or a signal number. `trap -l' prints a list of signal names and their" +#~ msgid "" +#~ "or a signal number. `trap -l' prints a list of signal names and their" #~ msgstr "выводит список имён сигналов и соответствующих им номеров." #~ msgid "corresponding numbers. Note that a signal can be sent to the shell" @@ -7959,26 +7798,33 @@ msgstr "" #~ msgid "If the -t option is used, returns a single word which is one of" #~ msgstr "Если задан параметр -t, возвращает слово -- `alias', `keyword'," -#~ msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an" +#~ msgid "" +#~ "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an" #~ msgstr "`function', `builtin', `file' или `' -- если, соответственно, ИМЯ" -#~ msgid "alias, shell reserved word, shell function, shell builtin, disk file," +#~ msgid "" +#~ "alias, shell reserved word, shell function, shell builtin, disk file," #~ msgstr "является псевдокомандой, зарезервированным словом, функцией, или" #~ msgid "or unfound, respectively." #~ msgstr "встроенной командой оболочки, дисковым файлом или не найдено." #~ msgid "If the -p flag is used, either returns the name of the disk file" -#~ msgstr "При использовании флага -p либо возвращается имя выполняемого дискового файла," +#~ msgstr "" +#~ "При использовании флага -p либо возвращается имя выполняемого дискового " +#~ "файла," #~ msgid "that would be executed, or nothing if -t would not return `file'." #~ msgstr "либо ничего, если -t вернуло бы значение, отличное от `file'" #~ msgid "If the -a flag is used, displays all of the places that contain an" -#~ msgstr "При использовании флага -a выводится расположение всех исполняемых файлов" +#~ msgstr "" +#~ "При использовании флага -a выводится расположение всех исполняемых файлов" -#~ msgid "executable named `file'. This includes aliases and functions, if and" -#~ msgstr "с указанным именем. Если одновременно не используется флаг -p и только" +#~ msgid "" +#~ "executable named `file'. This includes aliases and functions, if and" +#~ msgstr "" +#~ "с указанным именем. Если одновременно не используется флаг -p и только" #~ msgid "only if the -p flag is not also used." #~ msgstr "тогда, выводятся также псевдокоманды и функции." @@ -8038,16 +7884,19 @@ msgstr "" #~ msgstr " -v\tразмер виртуальной памяти" #~ msgid "If LIMIT is given, it is the new value of the specified resource." -#~ msgstr "Если задано ОГРАНИЧЕНИЕ, оно задёт новое значение для указанного ресурса." +#~ msgstr "" +#~ "Если задано ОГРАНИЧЕНИЕ, оно задёт новое значение для указанного ресурса." #~ msgid "Otherwise, the current value of the specified resource is printed." -#~ msgstr "В противном случае выводится текущее значение для указанного ресурса." +#~ msgstr "" +#~ "В противном случае выводится текущее значение для указанного ресурса." #~ msgid "If no option is given, then -f is assumed. Values are in 1k" #~ msgstr "Если параметры не заданы, предполагается, что задано -f. Значения" #~ msgid "increments, except for -t, which is in seconds, -p, which is in" -#~ msgstr "измеряются в КБ, кроме -t, измеряемого в секундах, -p, единица измерения" +#~ msgstr "" +#~ "измеряются в КБ, кроме -t, измеряемого в секундах, -p, единица измерения" #~ msgid "increments of 512 bytes, and -u, which is an unscaled number of" #~ msgstr "которого -- 512 байтов, и -u, задающего безразмерное число" @@ -8055,38 +7904,52 @@ msgstr "" #~ msgid "processes." #~ msgstr "процессов." -#~ msgid "The user file-creation mask is set to MODE. If MODE is omitted, or if" -#~ msgstr "Устанавливает маску создания пользователем файлов в РЕЖИМ. Если опущен" +#~ msgid "" +#~ "The user file-creation mask is set to MODE. If MODE is omitted, or if" +#~ msgstr "" +#~ "Устанавливает маску создания пользователем файлов в РЕЖИМ. Если опущен" -#~ msgid "`-S' is supplied, the current value of the mask is printed. The `-S'" -#~ msgstr "РЕЖИМ или задан параметр -S выводится текущее значение маски. Параметр" +#~ msgid "" +#~ "`-S' is supplied, the current value of the mask is printed. The `-S'" +#~ msgstr "" +#~ "РЕЖИМ или задан параметр -S выводится текущее значение маски. Параметр" -#~ msgid "option makes the output symbolic; otherwise an octal number is output." +#~ msgid "" +#~ "option makes the output symbolic; otherwise an octal number is output." #~ msgstr "-S делает вывод символическим, в противном случае используется" #~ msgid "If MODE begins with a digit, it is interpreted as an octal number," -#~ msgstr "восьмеричое число. Если РЕЖИм начинается с цифры, он интерпретируется" +#~ msgstr "" +#~ "восьмеричое число. Если РЕЖИм начинается с цифры, он интерпретируется" -#~ msgid "otherwise it is a symbolic mode string like that accepted by chmod(1)." -#~ msgstr "как восьмеричное число, в противном случае как строка, принимаемая chmod(1)." +#~ msgid "" +#~ "otherwise it is a symbolic mode string like that accepted by chmod(1)." +#~ msgstr "" +#~ "как восьмеричное число, в противном случае как строка, принимаемая " +#~ "chmod(1)." -#~ msgid "Wait for the specified process and report its termination status. If" -#~ msgstr "Подождать завершения указанного процесса и сообщить код завершения. Если" +#~ msgid "" +#~ "Wait for the specified process and report its termination status. If" +#~ msgstr "" +#~ "Подождать завершения указанного процесса и сообщить код завершения. Если" #~ msgid "N is not given, all currently active child processes are waited for," -#~ msgstr "N не задано, ожидается завершение работы всех активных дочерних процессов" +#~ msgstr "" +#~ "N не задано, ожидается завершение работы всех активных дочерних процессов" #~ msgid "and the return code is zero. N may be a process ID or a job" #~ msgstr "и код возврата равен 0. N может быть идентификатором процесса" #~ msgid "specification; if a job spec is given, all processes in the job's" -#~ msgstr "или спецификацией задачи, если задана спецификация задачи, ожидается" +#~ msgstr "" +#~ "или спецификацией задачи, если задана спецификация задачи, ожидается" #~ msgid "pipeline are waited for." #~ msgstr "завершение работы всех процессов конвейера задачи." #~ msgid "and the return code is zero. N is a process ID; if it is not given," -#~ msgstr "и код возврата равен 0. N -- идентификатор процесса, если он не задан," +#~ msgstr "" +#~ "и код возврата равен 0. N -- идентификатор процесса, если он не задан," #~ msgid "all child processes of the shell are waited for." #~ msgstr "ожидается завершение работы всех дочерних процессов оболочки." @@ -8094,10 +7957,13 @@ msgstr "" #~ msgid "The `for' loop executes a sequence of commands for each member in a" #~ msgstr "Цикл `for' выполняет последовательность команд для каждого члена" -#~ msgid "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is" -#~ msgstr "списка. Если отсутствует `in СЛОВА ...;', предполагается, что задано" +#~ msgid "" +#~ "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is" +#~ msgstr "" +#~ "списка. Если отсутствует `in СЛОВА ...;', предполагается, что задано" -#~ msgid "assumed. For each element in WORDS, NAME is set to that element, and" +#~ msgid "" +#~ "assumed. For each element in WORDS, NAME is set to that element, and" #~ msgstr "`in \"$@\"'. Для каждого из СЛОВ ИМЕНИ присваивается его значение" #~ msgid "the COMMANDS are executed." @@ -8107,13 +7973,15 @@ msgstr "" #~ msgstr "СЛОВА разворачиваются и образуют список слов. Полученный список" #~ msgid "set of expanded words is printed on the standard error, each" -#~ msgstr "выводится на стандартный поток ошибок, каждому приписывается спереди" +#~ msgstr "" +#~ "выводится на стандартный поток ошибок, каждому приписывается спереди" #~ msgid "preceded by a number. If `in WORDS' is not present, `in \"$@\"'" #~ msgstr "число. Если `in СЛОВА' отсутствует, предполагается заданным" #~ msgid "is assumed. The PS3 prompt is then displayed and a line read" -#~ msgstr "`in \"$@\"'. Затем выводится приглашение PS3 и со стандартного ввода" +#~ msgstr "" +#~ "`in \"$@\"'. Затем выводится приглашение PS3 и со стандартного ввода" #~ msgid "from the standard input. If the line consists of the number" #~ msgstr "считывается строка. Если строка состоит из числа, соответствующего" @@ -8134,34 +8002,47 @@ msgstr "" #~ msgstr "сохраняется в переменной REPLY. После каждого выбора выполняются" #~ msgid "until a break or return command is executed." -#~ msgstr "КОМАНДЫ до тех пор, пока не будет выполнена команда break или return." +#~ msgstr "" +#~ "КОМАНДЫ до тех пор, пока не будет выполнена команда break или return." #~ msgid "Selectively execute COMMANDS based upon WORD matching PATTERN. The" -#~ msgstr "Выполняет КОМАНДЫ в зависимости от того, какому ШАБЛОНУ соответствует" +#~ msgstr "" +#~ "Выполняет КОМАНДЫ в зависимости от того, какому ШАБЛОНУ соответствует" #~ msgid "`|' is used to separate multiple patterns." -#~ msgstr "СЛОВО. Для разделения нескольких допустимых шаблонов используется `|'." +#~ msgstr "" +#~ "СЛОВО. Для разделения нескольких допустимых шаблонов используется `|'." -#~ msgid "The if COMMANDS are executed. If the exit status is zero, then the then" -#~ msgstr "Выполняются КОМАНДЫ, заданные в if. Если код возврата нулевой, выполняются" +#~ msgid "" +#~ "The if COMMANDS are executed. If the exit status is zero, then the then" +#~ msgstr "" +#~ "Выполняются КОМАНДЫ, заданные в if. Если код возврата нулевой, выполняются" -#~ msgid "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" +#~ msgid "" +#~ "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" #~ msgstr "КОМАНДЫ then, иначе по очереди выполняются КОМАНДЫ elif, и если код" -#~ msgid "in turn, and if the exit status is zero, the corresponding then COMMANDS" -#~ msgstr "возврата нулевой, выполняются соответствующие КОМАНДЫ then и выполнение" +#~ msgid "" +#~ "in turn, and if the exit status is zero, the corresponding then COMMANDS" +#~ msgstr "" +#~ "возврата нулевой, выполняются соответствующие КОМАНДЫ then и выполнение" -#~ msgid "are executed and the if command completes. Otherwise, the else COMMANDS" -#~ msgstr "команды if завершается. В противном случае выполняются КОМАНДЫ else," +#~ msgid "" +#~ "are executed and the if command completes. Otherwise, the else COMMANDS" +#~ msgstr "" +#~ "команды if завершается. В противном случае выполняются КОМАНДЫ else," -#~ msgid "are executed, if present. The exit status is the exit status of the last" +#~ msgid "" +#~ "are executed, if present. The exit status is the exit status of the last" #~ msgstr "если они присутствуют. Код возврата равен коду возврата последней" #~ msgid "command executed, or zero if no condition tested true." -#~ msgstr "выполненной команды, либо нулю, если ни одно условие не было истинным." +#~ msgstr "" +#~ "выполненной команды, либо нулю, если ни одно условие не было истинным." #~ msgid "Expand and execute COMMANDS as long as the final command in the" -#~ msgstr "Разворачивает и выполняет КОМАНДЫ до тех пор, пока последняя команда" +#~ msgstr "" +#~ "Разворачивает и выполняет КОМАНДЫ до тех пор, пока последняя команда" #~ msgid "`while' COMMANDS has an exit status of zero." #~ msgstr "предложения `while' не завершит работу с нулевым кодом возврата." @@ -8185,12 +8066,15 @@ msgstr "" #~ msgstr "перенаправление для целого набора команд." #~ msgid "This is similar to the `fg' command. Resume a stopped or background" -#~ msgstr "Похоже на команду `fg'. Продолжает выполнение остановленной или фоновой" +#~ msgstr "" +#~ "Похоже на команду `fg'. Продолжает выполнение остановленной или фоновой" #~ msgid "job. If you specifiy DIGITS, then that job is used. If you specify" -#~ msgstr "задачи. Если заданы ЦИФРЫ, использяется задача с этим номером, а если" +#~ msgstr "" +#~ "задачи. Если заданы ЦИФРЫ, использяется задача с этим номером, а если" -#~ msgid "WORD, then the job whose name begins with WORD is used. Following the" +#~ msgid "" +#~ "WORD, then the job whose name begins with WORD is used. Following the" #~ msgstr "СЛОВО -- задача, имя которой начинается с этого слова. Завершение" #~ msgid "job specification with a `&' places the job in the background." @@ -8205,7 +8089,8 @@ msgstr "" #~ msgid "\t\twhen the argument to `cd' is not found in the current" #~ msgstr "\t\tаргумент команды `cd', если он не найден в текущем" -#~ msgid "HISTFILE The name of the file where your command history is stored." +#~ msgid "" +#~ "HISTFILE The name of the file where your command history is stored." #~ msgstr "HISTFILE Имя файла, где сохраняется история команд." #~ msgid "HISTFILESIZE The maximum number of lines this file can contain." @@ -8220,11 +8105,15 @@ msgstr "" #~ msgid "HOME The complete pathname to your login directory." #~ msgstr "HOME Полный путь к домашнему каталогу." -#~ msgid "HOSTTYPE The type of CPU this version of Bash is running under." -#~ msgstr "HOSTTYPE Тип процессора, на котором работает эта версия Bash." +#~ msgid "" +#~ "HOSTTYPE The type of CPU this version of Bash is running under." +#~ msgstr "" +#~ "HOSTTYPE Тип процессора, на котором работает эта версия Bash." -#~ msgid "IGNOREEOF Controls the action of the shell on receipt of an EOF" -#~ msgstr "IGNOREEOF Управляет действиями, совершаемыми оболочкой при вводе" +#~ msgid "" +#~ "IGNOREEOF Controls the action of the shell on receipt of an EOF" +#~ msgstr "" +#~ "IGNOREEOF Управляет действиями, совершаемыми оболочкой при вводе" #~ msgid "\t\tcharacter as the sole input. If set, then the value" #~ msgstr "\t\tсимвола конца файла. Если установлена, её значение -- число" @@ -8236,10 +8125,12 @@ msgstr "" #~ msgstr "\t\tв пустой строке, после чего оболочка завершит работу" #~ msgid "\t\t(default 10). When unset, EOF signifies the end of input." -#~ msgstr "\t\t(по умолчанию 10). Если не установлена, EOF обозначает конец ввода." +#~ msgstr "" +#~ "\t\t(по умолчанию 10). Если не установлена, EOF обозначает конец ввода." #~ msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail." -#~ msgstr "MAILCHECK\tКак часто, в секундах, Bash проверяет наличие новой почты." +#~ msgstr "" +#~ "MAILCHECK\tКак часто, в секундах, Bash проверяет наличие новой почты." #~ msgid "MAILPATH\tA colon-separated list of filenames which Bash checks" #~ msgstr "MAILPATH\tРазделённый запятыми список имён файлов, где Bash" @@ -8272,7 +8163,8 @@ msgstr "" #~ msgstr "TERM Имя типа текущего терминала." #~ msgid "auto_resume Non-null means a command word appearing on a line by" -#~ msgstr "auto_resume Ненулевые значения слов команд, встречающиеся в строке" +#~ msgstr "" +#~ "auto_resume Ненулевые значения слов команд, встречающиеся в строке" #~ msgid "\t\titself is first looked for in the list of currently" #~ msgstr "\t\tотдельно, сначала ищутся в списке остановленных" @@ -8298,8 +8190,10 @@ msgstr "" #~ msgid "command_oriented_history" #~ msgstr "command_oriented_history" -#~ msgid " Non-null means to save multiple-line commands together on" -#~ msgstr " Ненулевое значение означает, что многострочные команды" +#~ msgid "" +#~ " Non-null means to save multiple-line commands together on" +#~ msgstr "" +#~ " Ненулевое значение означает, что многострочные команды" #~ msgid " a single history line." #~ msgstr " будут сохраняться в одной строке истории." @@ -8397,7 +8291,8 @@ msgstr "" #~ msgid "\tremoves the last directory, `popd -1' the next to last." #~ msgstr "\tудаляет последний каталог, `popd -1' -- предпоследний." -#~ msgid "-n\tsuppress the normal change of directory when removing directories" +#~ msgid "" +#~ "-n\tsuppress the normal change of directory when removing directories" #~ msgstr "-n\tподавляет обычную смену каталога при удалении каталогов из" #~ msgid "\tfrom the stack, so only the stack is manipulated." @@ -8407,15 +8302,19 @@ msgstr "" #~ msgstr "Выводит список запомненных на данный момент каталогов. Каталоги" #~ msgid "find their way onto the list with the `pushd' command; you can get" -#~ msgstr "попадают в список при использовании команды `pushd', вы можете забрать" +#~ msgstr "" +#~ "попадают в список при использовании команды `pushd', вы можете забрать" #~ msgid "back up through the list with the `popd' command." #~ msgstr "их из списка командой `popd'." -#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions" -#~ msgstr "Флаг -l указывает, что `dirs' не должна выводит сокращённые варианты" +#~ msgid "" +#~ "The -l flag specifies that `dirs' should not print shorthand versions" +#~ msgstr "" +#~ "Флаг -l указывает, что `dirs' не должна выводит сокращённые варианты" -#~ msgid "of directories which are relative to your home directory. This means" +#~ msgid "" +#~ "of directories which are relative to your home directory. This means" #~ msgstr "каталогов, заданных относительно домашнего. Это означает, что" #~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" @@ -8424,22 +8323,27 @@ msgstr "" #~ msgid "causes `dirs' to print the directory stack with one entry per line," #~ msgstr "заставляет `dirs' выводить каталоги по одному в строке, предваряя" -#~ msgid "prepending the directory name with its position in the stack. The -p" -#~ msgstr "имя каталога номером его позиции в стеке. Флаг -p делает то же самое," +#~ msgid "" +#~ "prepending the directory name with its position in the stack. The -p" +#~ msgstr "" +#~ "имя каталога номером его позиции в стеке. Флаг -p делает то же самое," #~ msgid "flag does the same thing, but the stack position is not prepended." #~ msgstr "но не добавляются номера позиций. Флаг -c очищает стек каталогов," -#~ msgid "The -c flag clears the directory stack by deleting all of the elements." +#~ msgid "" +#~ "The -c flag clears the directory stack by deleting all of the elements." #~ msgstr "удаляя все его элементы." -#~ msgid "+N\tdisplays the Nth entry counting from the left of the list shown by" +#~ msgid "" +#~ "+N\tdisplays the Nth entry counting from the left of the list shown by" #~ msgstr "+N\tвыводит N-й каталог, считая с левой стороны списка, выводимого" #~ msgid "\tdirs when invoked without options, starting with zero." #~ msgstr "\tdirs при вызове без параметров, начиная с нуля." -#~ msgid "-N\tdisplays the Nth entry counting from the right of the list shown by" +#~ msgid "" +#~ "-N\tdisplays the Nth entry counting from the right of the list shown by" #~ msgstr "-N\tвыводит N-й каталог, считая с правой стороны списка, выводимого" #~ msgid "Toggle the values of variables controlling optional behavior." diff --git a/po/sk.gmo b/po/sk.gmo index 22b4af3406770334eb00ac947e23fb48f01b97d5..1fa70176de2885b78b1115c3577dd3abdbd48fb5 100644 GIT binary patch delta 10114 zc-mcB33yJ|*4{@FN|2F6kf@qN5>w5TnnEvCEmhUjR7Gn{Ze((jNFtGuBodlIWR6Qi z+NP9J(^aafrG^-K6-BidxrPw@@A}@I|K|34p7Xr>oU`}ZYu;<`^IeO#IsA>adCAc_ zUE%k=p;Q}SLUX0&H&CipZt&aGNvUqYJfI`+J75RkWndGab!Vk8MA-ow0^Nb`z>Yv? z;7Fhca2l{BFbLQJm;!99l&Ol)aKM9d-C@7Ra~kh-=ERM<DAg9|2DAhA2et!_?ZS!Y z1D$|NfG)r&U~6C&&>Q$Aa1iiD7Yfj!t5O3ozw+(MiJ~-q0z@CR1K1u|)s>Pw>q-qd zbt5A_z}~<K-N;BJ5K2+`8jp74#CJ8m=t;>ZX`Bc2!u%@ClPdd%CmA>fbOm1Vqy$eq zIiX8;O4zqM8S~Zm9|7%w;oaG9ZFf%aX?IS1NZ;SrXxoDteGzElQhj>x#jGBba77Oi zOb50C7U}zaJ*e7~J;>lq-M@jCQc#Za0J;fdUKC`G7bgnw;<zL)GF;?EMt6BZ|Dw9H zc<>^yMh|H1O_h3ilh8z9GvEi_bS8gq_Dl1oFBI$hO5OjcHz)j;HwCEiCc{oXWU#vr z>5cI*$;n$jB)r^*woCQV9Qsf*XEpxmLvOe4$$m~f=>r3MQWJ}M(q!>H=`+PZTj1`V z)Zmex9DlAS8MtBgB*zbc1AxtXDfN<Y){D;<_F{BI_9CG);8-h!WiLv8voEoxFW)zQ zS*g(o<rXh<qIdi8{X$?<F-1T2i|uC#KV_!rMovH4rUdvE0(&>`1@VOuO3eVl2%snO z!sS<$DitRht<*3u@;T62oXeN}ANz7bt8q%*wgF9GjwF)Tm3j!s1<nJVj7dt}llXr= zS*ZX_aPLh-0Pw>pN}U1W7H=cwG2oBsN`=Y<z@LH3-UavKWHXq6ew;zuUYtSOKG5j! z9(|%a@ECB|d(^0{AN#lWlYX%OAU`_W6hEpc(2ofv%8!!7`%y!m_)$ZJ8h7gF$94ZR zzzM)h!0r&F$NNeR0lqU6j*I7+vuKj%v#7D=v!N7;f2Y~B$sFJ#sAkD*YGOV{Spi#q zh?oYt&4+CzPb?r-17E}QfeV#73|##YH8x=pC7%Ku3Qf)j+JSD#Qlw+agv%+|Q=s{) zIGsNwx$92?PyFevRsodMIe^~WC4h_$3E-OG8$c8I2QXU90ID`y;}^h*VC)2Ngye@n zrAA4f2_%ChfzZE%!B>G)&9{M^@GKDKSGNO6c+?6`IC}-dCP`z~3XUrS-V~Fp;Q0I? z#(!lH89Wh0fzAgpntl&r#(f$D{dYv8O)wXQ5x~xpn}bOxIhc~<2Q!iE4(7n0gPE}I z2Q%(nLKydbLg+)UhtSz(gpi&;&_@^!;rQbr4ENh+2*ajRC^_>EWg;3LN`_{Jl98BD zO0Y4Ml5Yv+xSgR)MEgTI(alg2b_gTA@nJOWj4%o^FN}<bhmnrCIgA;sJdB)O1r8D0 zuY?B+BP+?!;+32rc_k;TTuGB$(%9JK8qi1Mds?%x8n>B@vQxmGqB+x&=uFi)oDar_ zlW-Ui$xIc5)3)cssp6aA<h)@7u}g%k-%5>(V7y01aDq({r1wn(Gih}MHR%#b(+rN} zy>Fzv2N#PXDcQP6djBq<m#8$78o3+E+;6{%*l87QJ9rgUIC&MFbml6W%GCW*SJ7um zfmnIffmPJR9ev+23ilHKuSQYQ`B6IMMv>EqD28296bIx-ae^PBDA`ruE5H|`$%t<> zH8nMw8u5>&36rBaeor(7y%kLX9b>?(ycixs)h~*nm!<=;eyGDSmb9&&#;_uqu$s0F zTuo=pTTKaf0EbC!2t*cFO=J0fW-K+aES3z$0{a8k1E)w>#zOxxai=(P_P01XTR<G+ zH$9G;*cwL$cEvGq{2E7%J&2=*Y}Rlhw>7MceAaN><TdoA_kj~-;x&wl>lz=ef&Q^b zsV4CZ6Z?3EiCa7w=^am>m>kbUGF{^bKvZRFX*|O%JD$bmnRq&vQv!XWe*%4IN&+)y zfX0Xf&XZ{BjztOd-h&CW-L(Wtq!OvhmcX&V&WV(KNg{1+CQ{O@L~5oqks8>YNCqz_ zGBMdEv0rCk9|_YW3S!Pr;-cW6L>ul*qO;T_(b+mB)7u9oGwdcMbAsg>*C$hzJCn)y zv1DrUdNLWhlgx0mN?|eDH-$blH^q{7OqHBMCpwTqC%g#kB_-Bc+OFSPGW79Ua=cMv z;aU<d2l`62yq1!6Uq|nrxsE=QvX0|-YP`OVPVST{jKKaQQ_1n7RN7`mDoqiUN(l>7 zslp?vWb|q(RryS#Z5kPOO=IR9mPU<*rO~O=^!@HMn(U`EGI9slLE^t{I&D27oeaF4 zPSwrP7?@55)}(7+NhiUB=_FW{&cyO4oszq+XWah{*iUM{^$h2V_0;UG_0(M34Cr5S z_rwfx6s)m0gWh~9gNepIlTpwolZ+0|r1!p&Nx};=xdv>`q{fbCGJ5Xl_x2m8;V~P? z*d&eS2IyZZk*yo3sy!O7ZJ?yhHqzTYfn`$ZY^0N3`-F^i%wqpRS@en7S)6!L7Bgv5 z7T1W3ENbk>EQaUJENZlQwn;+WvdQ5q*_?1(HobIOHVLlECV_m7yRxauli4h#taIoC z&N-|F2j#Heh#XEdEr$~a<dC6_KorL6w3$PjwaaCEPt2vtGjkbkyL0KSmvX6MyG>O6 zz)d7Lc@s6T0ytb&zfDX?S2mHsHhIK}d34T5jr;QG<mR(HW+;!%d@*!06G!M~N?x*= z6CKg`$7VW@V?N)H%qN3$@@f0@d`kSKets&SsobW3xxa0JE=~(9^O|aY0Xc~+VEmRA zaH2~EBxqGgRdy;Q;UR@gIMWK5a26KQS7Hho?*)aN__%)ltdLRCrig3BfFjbFP$Z^@ z{TCE*qVOV0lwU*%4;0b1_lu|@n_?2^P|W88im7_vV!mHmOu{L}l<*(LoOo|Bz5PNl z8E#U-ejS1BB>sn&kl?HmO1`XwoM-6!&r2xT`4SSeD&>UjO6jb_O7%fRDa-80QciTJ zl)m&!DSgJejQ!h|F>!SVnj-OlGBPl&j1$Z+W0=L1apJ@J`M=Ak`lee*z#TXX8w}4a z9G|p}YevpCM!^o?9E9!8ZJgM>oRaq_Cmr8%=wBMs%h};$jiKfA_ITi0q{J`EIpNsd zSouKkEnpCKG>7*nwOzt?ANGx4<la6`JpCZ^!K{O1>|@|4ya)q+DW*M&ga$gH$Dsd> zAQbf-d;kwTPB77o_yHY(f1Jc15H9+O6-<XS$OXV&z*^bi0E;EHo~7i|&oTTKpVPIU z#slZ*6Bo~M7kuX&o&JV-o~mtJMVof2qRmHD(d!pfF)>9{Q3LT+lqj=`iL0cF;q`SD z*N&g7n5wS;CrPdsdJtsr1<V7Sc@aqn&sScePniF?L{&Ar%-YTMvQ`;z1|$yyR$^e) z6*vws^(rc3;Pz`+V5DyN4Gt^SGH?N&_r1aQn{Lt+vwx@L3xGjF4>%YafA}Y~D)Hav zE+?!4K9IfHT{3j#9`TQR47*47$Z@l3I#H);`pSrEdjF(q_K&V+Do)Y;DytbyKLO*w z*j?ZovMSz(b4vVwf1eZden5g_AJEoQAJC?Afivag@&V($>H!NAtB0ImfX25TQjn#< z7II?pkhafw#JsZo5g9!Bh^D*%Y$fr3^AS0=s^MDDt%ed!t6?Ha)VQ~XYr@?crf8?f zjPGHOxy;UfOa?bTX21Q9=|fi^b1{4JnBzJ=;UY8%XiDZwc*4c!(<fXuA3fnfqn6I- zT1$dMYN-*wT54>0EsN9GT1vD5_^K2rwG7`|wLB4N@s!Rw=P8{z_$i$|>M8Uu9OXZy z>P`UXN!9w4DS6B@)^-b?ai{ayGfHy*8N<xuIg83^&sng<J*Q-cp7T9Kuq-+QfpWhb zD4N;|lr`e2G7U9UI5Z54>fZzomi6A?z<ofmbq!E#?A^eysCYb37OUkA_`XErC7`7a zure(1JqReP>bq8)a3fIGf@46@SdD2#f(@;SUO<s(3Q$xP0~B9K(eDoe#T2)Jk~f;$ z7#34`0>x=Z07XNu1I1LqKv8{?4H+u1A>)T^IFI?*h8%TkNDkiyN)*Ha#TPPx62Ey3 zInieg$<Q&N_`q|Zn9v#d^fgJvKuPI|K=Jxqp!m?<MpXUPMx3wp3x=4~RK72e;2NNK z`PV=>-MRx5TlQ;gSQ5=L;AAmLW17sliD6lsCO4s^p-sqO3Q*#^80aSll0b3NcWezy z{#a;BfuexpB>pqdklpANTdHJ0Q>t)&Q%aBu6mP9)O38j~N>yHMN>kW0<MYlyNi+k1 zviweMM#+~oBLf*gS)NOPf0slDY$@?St2qe-0VP4i10|QQZ%zg_10~M)H>cBF*Zr!S z)8@~b(|McP8I~{}1e97Z3Ml3LVLJ*?ZAS(j?P+2kplK-}?8)f_drG$4o~li==fFKc z3C9ceRP}RUgd`vbN}BG#@#PL==(Gc!?pFtnt8t)a+c=V;*BnVF$k8w@oF+O_;uF9z zl42bx!Ankb%DGM)u-=JbSmwkD4?9sazdLavJ7@Om<xIv#J2Q%AI&<7YXNL7^XGXz3 zXT-lGnETF*(_t;BfiR$y%{eU?*C$)hdmFW+lMZc36D-jf(vt6Efa67DE$P&aUD$t! z#>FnAm*+x_oH1S4v5~7K9Mm9JavTbjbv(wE2_?yu5`XSWr#tUT32R;H6E3Z&`VOtw zzZX!BTBo(5K)J1SLTg1$)Bt7AXtr=8CxhH*n}tAGwKCmEa0gIQ^FICj2R9PD<wizq zTQjVBwC3~CK-qN8YfWd&ZB3KjXibKE+7SQV#*%4GwVMr9(}uQwxh+*WPh(D7CYIA} zslxW|OiXXOlc5>z%#4BVq?7AT=e+=wMaag3lKOaX;wc^!EXzasBmT-fIPf<QdTobx zBsj1gH8M-zC%0qRR00iIEkz16-Z!{f%5OW`HHsye9LY=g9+N`TV2v=#U^$kI>$vQs zCH`IX;JJ8+oT9+ErTmtdUMSvb@Pon`#d2JJ8)bu`_?@8sPc*a=&m_UTtN5wr-}3PS z&&C;CmR|?L-_;mgra0e+n#lW_h@?+RogMZ42)zH3XHk~lOoQKqByw)^(~dfh`}Mf| zaK+-9B}J?5zXtakW&4h6v0^Q;jIT`fPhmi@c$Bh9yjo)VRn3%bJqgEY3^XhskN*D$ zi&)C`f8tt!>uo*eC4+mxx}TKZQ|0tru^NsS`+uNc%2z6>SflZxLO<(j@Z(W?O>mvY zJW;Q1udoyrSa|fk)QStyK4S1}@uHXwZ7->!rH0V`kh4^XSx>qTq->T7Rq->4>`)2~ zRz$uA_jYx^kHwSmY>B@2G57@ptGSA)*DuRpY38Ws=?t8PD__4ivC66o5^jHSq{~vr z89W;-m#<m+eLApQv3~nTKdY8qt!^Kc`cXdNXgZq}4<L>xehZRcfqwUm*gr#drUtiD z+kl5~ZPgvuDsCoD>j5c}0cHPJkJ;;T(uMmVTxkZsh|SUOMxyPn`^L!<j`na|zv=gO zV*hvajUn-h>kIKtJ?JCgGsT^bWU*}B_o$)IgC&O1ek#kYNQ?F;`E-XXK}v2ZZVm4L z<#$kybQG)S26AF9_TQ(t;gGdCO?O1LRJl?t7~CkzFGP;gaQ|4AVEs&TJyuuCp04gE z>HPfvS`!s7w&Cdal_5ng&x-bl{jq+iXx-@*E%o>MJ`wjjaILIIXszzEUrIByC*jJ} z&o)U7fp#gb-njPS`V7|=gXQ=Jsix!%821Ma9si%AF{sWv^(5U4ZWQDvtCoDx-lzM> zS|E8}Hmf@oKO`(QxLyB2@sleGBFkRVN{^AHy|HK%SAP*o|Ka5qv44;h5PGt8iXWNl ze*Y1NleDS{$$GHc;Qp^j@<m-#C~mjqw^yUB#wgvV*x+&Obbaq>Smgij&q<?fnU>1o zg2b|HBn|HG4oG2w_O7}CXb;6zpb4Usu&j)6`o4qimSAw3wn%ZCcSt{<TsQw@J>Y=G zUG>82BaLnbJ73ZF@&!9gKH1{=*Sh~3z*CY9>y6Jr+fE!$--qjW;|<H%5aqw4UrJq` zETy;90S3<l-_rwr)P25{{BPO2VO5h%sNc(n?0B?0;!4teQRJxExTgLkxycU|nhLM4 ze>vS4CZ3AxoK!#(B4{s=#H6@&ZuS>K*zT!L1~;FUbph?evWbypTk($z7B|OpE8Px8 z`(L^}TISD^ZB^ZZQ;+yGjrV15FV%6qce3}BW0|>%2U3?L&B_ui=YP6SD(<rl+063( z9pH<)EvI0M#H3QKmgoWUi7Z&R<(RFH!Tr2!!@d(!=y%OEE*4d5f*JKR6IriaTvr*% z5saJ{)zt)Yv_s``Z$Crvkf2iW+kf3p>Ut?K%cO{uV;1=&BPF@wA)@>O^n|zc{aAzl z5s}{pw696YUU9thz(y6Fz4MHUt3Jz|E3AFHHOLQn&AQ^w<i4I20pVwiiuSRmT`T70 zrCX=E6y>EF#j`6`7k_6}F?-7;!|JU!M^}v8+NVkC=U+NhY_B|JR21!uY+2!d%D+KH z+q1o`D~|ti%B!-qgVC))Wne4gj(g>={f!Ye8Gb{JCK+Rg8iz7w4l|Zj)(kVgwXXbm Iq+w_LA4I-1g#Z8m delta 18658 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 IaDCu^0JZTctpET3 diff --git a/po/sk.po b/po/sk.po index 663505dea..11f89dfd6 100644 --- a/po/sk.po +++ b/po/sk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 4.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2011-03-16 21:22+0100\n" "Last-Translator: Ivan Masár <helix84@centrum.sk>\n" "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" @@ -18,124 +18,124 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "chybný index poľa" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: nie je možné previesť indexované pole na asociatívne" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: nie je možné priradiť nenumerickému indexu" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: pri priraďovaní asociatívnemu poľu je potrebné použiť index" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: nie je možné vytvoriť: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "bash_execute_unix_command: nie je možné nájsť klávesovú mapu pre príkaz" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: prvý znak (okrem bielych znakov) nie je „\"“" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "chýba zatvárajúca „%c“ v %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: chýba oddeľovač dvojbodka" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "„%s“: nie je možné zrušiť väzbu (unbind)" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "„%s“: neplatný názov aliasu" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "úpravy riadka nie sú zapnuté" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "„%s“: neplatný názov klávesovej mapy" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: nie je možné prečítať: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "„%s“: neznámy názov funkcie" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s nie je zviazaný (bind) s žiadnymi klávesmi.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s je možné vyvolať ako " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "„%s“: nie je možné zrušiť väzbu (unbind)" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "počet cyklov" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "dáva zmysel iba v cykle „for“, „while“ alebo „until“" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -145,7 +145,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Vrátiť kontext aktuálneho volania podprocedúry.\n" " \n" @@ -159,350 +163,360 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak shell nevykonáva funkciu shellu a EXPR nie je neplatný." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME nebola nastavená" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "príliš veľa argumentov" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "na nový vrchol zásobníka." -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD nebola nastavená" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "riadok %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "upozornenie: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: použitie " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: voľba vyžaduje argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: vyžaduje sa numerický argument" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: nenájdené" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: neplatná voľba" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: neplatný názov voľby" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "„%s“: nie je platný identifikátor" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "neplatné osmičkové číslo" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "neplatné šestnástkové číslo" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "neplatné číslo" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: neplatné určenie signálu" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "„%s“: nie je pid ani platný špecifikátor úlohy" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: premenná len na čítanie" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: nie je možné zrušiť" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s je mimo rozsahu" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s mimo rozsahu" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: taká úloha neexistuje" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: riadenie úloh nedostupné" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "riadenie úloh nedostupné" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: obmedzené" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "obmedzené" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: nie je vstavaný príkaz (builtin) shellu" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "chyba zapisovania: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "chyba pri nastavovaní atribútov terminálu: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "chyba pri zisťovaní atribútov terminálu: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: chyba pri zisťovaní aktuálneho adresára: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: nejednoznačné určenie úlohy" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: nie je indexované pole" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: nie je možné zrušiť: len na čítanie %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: nie je možné zrušiť" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: neplatný názov akcie" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: chýba špecifikácia dokončovania" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "upozornenie: voľba -F nemusí fungovať tak ako očakávate" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "upozornenie: voľba -C nemusí fungovať tak ako očakávate" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "momentálne sa nevykonáva funkcia doplňovania" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "je možné použiť iba vo funkcii" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "nie je možné použiť „-f“ pre tvorbu funkcií" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: funkcia iba na čítanie" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, fuzzy, c-format msgid "`%s': invalid variable name for name reference" msgstr "„%s“: neplatný názov aliasu" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: nie je možné takto robiť deštrukciu premenných polí" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: nie je možné previesť asociatívne pole na indexované" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynamické načítavanie nie je dostupné" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "nie je možné otvoriť zdieľaný objekt %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "nemožem nájsť %s v zdieľanom objekte %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: nie je dynamicky načítané" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: nie je dynamicky načítané" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: nie je možné zmazať: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: je adresár" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: nie je obyčajný súbor" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: súbor je príliš veľký" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: nie je možné vykonať binárny súbor" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: nie je možné spustiť: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "odhlásenie\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "toto nie je login shell: použite „exit“" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Existujú zastavené úlohy.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Existujú bežiace úlohy.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "prákaz nenájdený" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "špecifikácia histórie" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: nie je možné otvoriť odkladací súbor: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "aktuálny" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "úloha %d začala bez riadenia úloh" @@ -517,11 +531,11 @@ msgstr "%s: neplatná voľba -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: voľba vyžaduje argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hašovanie vypnuté" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: hašovacia tabuľka je prázdna\n" @@ -552,12 +566,12 @@ msgstr "" "pre „%s“ neboli nájdené zodpovedajúce témy pomocníka.\n" "Skúste „help help“ alebo „man -k %s“ alebo „info %s“." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: nie je možné otvoriť: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -578,21 +592,31 @@ msgstr "" "Hviezdička (*) vedľa názvu znamená, že príkaz je vypnutý.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "nie je možné použiť viac ako jednu z volieb -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "poloha histórie" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "názov prázdnej premennej poľa" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameter je null alebo nenastavený" + +#: builtins/history.def:349 #, fuzzy, c-format msgid "%s: invalid timestamp" msgstr "%s: neplatný názov voľby" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: rozšírenie histórie zlyhalo" @@ -606,113 +630,113 @@ msgstr "%s: inlib zlyhalo" msgid "no other options allowed with `-x'" msgstr "iné voľby prípustné s „-x“" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumenty musia byť ID procesov alebo úloh" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Neznáma chyba" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "očakával sa výraz" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: nie je indexované pole" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: neplatná špecifikácia popisovača súboru" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: neplatný popisovač súboru: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: neplatný počet riadkov" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: neplatný začiatok poľa" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: neplatné kvantum spätného volania" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "názov prázdnej premennej poľa" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "vyžaduje sa podpora premennej poľa" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "„%s“: chýba formátovací znak" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "„%c“: neplatná špecifikácia formátu času" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "„%c“: neplatný formátovací znak" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "upozornenie: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "chýba hexadecimálna číslica v \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "chýba číslica Unicode pre \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "žiadny iný adresár" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, fuzzy, c-format msgid "%s: invalid argument" msgstr "%s: neplatný argument limitu" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<žiadny aktuálny adresár>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "zásobník adresárov je prázdny" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "index zásobníka adresárov" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -754,7 +778,7 @@ msgstr "" " -N\tzobrazuje N-tú položku počítajúc sprava zoznamu, ktorý zobrazuje\n" " \tdirs vyvolaný bez volieb, počínajúc nulou." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -798,7 +822,7 @@ msgstr "" " \n" " Zásobník adresárov môžete zobraziť vstavaným príkazom „dirs“." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -837,322 +861,333 @@ msgstr "" " \n" " Zásobník adresárov môžete zobraziť vstavaným príkazom „dirs“." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: neplatná špecifikácia expirácie (timeout)" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "chyba pri čítaní: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "" "návrat („return“) je možné vykonať iba z funkcie alebo skriptu vyvolaného " "pomocou „source“" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "nie je možné zároveň zrušiť funkciu a premennú" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: nie je premenná poľa" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: nie je funkcia" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, fuzzy, c-format msgid "%s: cannot export" msgstr "%s: nie je možné zrušiť" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "posun o" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "nie je možné zároveň nastaviť aj zrušiť voľby shellu" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: neplatný názov voľby shellu" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "vyžaduje sa argument názov súboru" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: súbor sa nepodarilo nájsť" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "nie je možné suspendovať" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "nie je možné suspendovať login shell" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s má alias „%s“\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s je kľúčové slovo shellu\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s je funkcia\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, fuzzy, c-format msgid "%s is a special shell builtin\n" msgstr "%s je vstavaný príkaz (builtin) shellu\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s je funkcia\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s je vstavaný príkaz (builtin) shellu\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s je %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s je hašovaný (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: neplatný argument limitu" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "„%c“: chybný príkaz" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: nie je možné zistiť limit: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "obmedzenie" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: nie je možné zmeniť limit: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "osmičkové číslo" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "„%c“: neplatný operátor symbolického režimu" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "„%c“: neplatný znak symbolického režimu" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " riadok " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "posledný príkaz: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Ruší sa..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "upozornenie: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "chyba neznámeho príkazu" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "chybný typ príkazu" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "chybný konektor" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "chybný skok" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: neviazaná premenná" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\ačas vypršal pri čakaní na vstup: automatické odhlásenie\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "nie je možné presmerovať štandardný vstup z /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: „%c“: neplatný formátovácí znak" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "chyba rúry" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: obmedzené: nie jemožné uviesť „/“ v názvoch príkazov" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: príkaz nenájdený" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: chybný interpreter" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: nie je možné vykonať binárny súbor" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: chybný interpreter" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, fuzzy, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: nie je možné vykonať binárny súbor" -#: execute_cmd.c:6123 -#, fuzzy, c-format -msgid "`%s': is a special builtin" -msgstr "%s je vstavaný príkaz (builtin) shellu\n" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "nie je možné duplikovať fd %d na fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "bola prekročená úroveň rekurzie výrazu" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "podtečenie zásobníka rekurzie" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "chyba syntaxe vo výraze" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "pokus o priradenie mimo premennej" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "chyba syntaxe vo výraze" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "delenie nulou" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "chyba: chybný expassign token" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "pre podmienený výraz sa očakáva „:“" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exponent menší ako 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "po pre-inkrementácii alebo pre-dekrementácii sa očakáva identifikátor" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "chýba „)“" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "chyba syntaxe: očakáva sa operand" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "chyba syntaxe: neplatný aritmetický operátor" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (chybný token je „%s”)" @@ -1170,7 +1205,7 @@ msgstr "%s: neplatný počet riadkov" msgid "value too great for base" msgstr "hodnota je ako základ príliš veľká" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: chyba výrazu\n" @@ -1179,46 +1214,51 @@ msgstr "%s: chyba výrazu\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: nie je možné pristupovať k rodičovským adresárom" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, fuzzy, c-format +msgid "`%s': is a special builtin" +msgstr "%s je vstavaný príkaz (builtin) shellu\n" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "nie j emožné resetovať nodelay režim fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "nie je možné alokovať nový popisovač súboru pre vstup bashu z fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: bufer už existuje pre nový fd %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp rúra" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "pid %d získaný pomocou fork sa vyskytuje v bežiacej úlohe %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "mažem zastavenú úlohu %d so skupinou procesu %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) je stále označený ako živý" @@ -1228,138 +1268,138 @@ msgstr "add_process: pid %5ld (%s) je stále označený ako živý" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: taký pid neexistuje" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signál %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Hotovo" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Zastavené" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Zastavené(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Beží" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Hotovo(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Ukončenie %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Neznámy stav" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(bol uložený výpis pamäte) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid detského procesu (%ld to %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld nie je dieťa tohto shellu" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Neexistuje záznam o procese %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: úloha %d je zastavená" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: taká úloha neexistuje" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: úloha skončila" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: úloha %d už je v pozadí" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: zapína sa WNOHANG aby sme sa vyhli neurčitému blokovaniu" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: riadok %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (bol uložený výpis pamäte)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd teraz: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: funkcia getpgrp zlyhala" -#: jobs.c:4434 +#: jobs.c:4486 #, fuzzy msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: riadkový systém" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: riadkový systém" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "nie je možné nastaviť skupinu procesu terminálu (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "v tomto shelli nie je riadenie úloh" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: zlyhal predpoklad: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1368,381 +1408,391 @@ msgstr "" "\r\n" "malloc: %s:%d: zbabraný predpoklad\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "neznámy" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: blok na zozname voľných zaprataný" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: zavolaný s argumentom už uvoľneného bloku" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: zavolaný s argumentom nealokovaného bloku" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: bolo detekované podtečenie; mh_nbytes mimo rozsahu" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: bolo detekované podtečenie; mh_nbytes mimo rozsahu" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: veľkosti začiatočného a konečného bloku (chunk) sa líšia" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: zavolaný s argumentom nealokovaného bloku" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: bolo detekované podtečenie; mh_nbytes mimo rozsahu" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: bolo detekované podtečenie; mh_nbytes mimo rozsahu" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: veľkosti začiatočného a konečného bloku (chunk) sa líšia" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: alok. tabuľla je plná s FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p už je v tabuľke ako alokovaný?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p už je v tabuľke ako voľný?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "neplatný základ" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: hostiteľ neznámy" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: neplatná služba" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: chybná špecifikácia sieťovej cesty" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "sieťové operácie nie sú podporované" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: nemožno zmeniť locale (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: nemožno zmeniť locale (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: nie je možné zmeniť locale (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: nie je možné zmeniť locale (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Máte poštu v súbore $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Máte novú poštu v súbore $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Pošta v súbore %s bola prečítaná\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "chyba syntaxe: vyžaduje sa aritmetický výraz" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "chyba syntaxe: neočakávaná „;“" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "chyba syntaxe: „((%s))“" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: chybný typ inštrukcie %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "" "here-document na riadku %d oddelený znakom konca riadku (očakávalo sa „%s”)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: inštrukcia presmerovania „%d“ mimo rozsahu" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "chyba zapisovania: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "neočakávaný koniec súboru počas hľadania zodpovedajúceho „%c“" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "neočakávaný koniec súboru počas hľadania „]]“" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "chyba syntaxe v podmienečnom príkaze: neočakávaný token „%s“" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "chyba syntaxe v podmienečnom príkaze" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "neočakávaný token „%s“, očakávalo sa `)'" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "očakávalo sa `)'" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "neočakávaný argument „%s“ podmienečného unárneho operátora" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "neočakávaný argument podmienečného unárneho operátora" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "neočakávaný token „%s“, očakáva sa podmienečný binárny operátor" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "očakáva sa podmienečný binárny operátor" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "neočakávaný argument „%s“ v podmienečnom binárnom operátore" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "neočakávaný argument v podmienečnom binárnom operátore" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "neočakávaný token „%c“ v podmienečnom príkaze" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "neočakávaný token „%s“ v podmienečnom príkaze" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "neočakávaný token %d v podmienečnom príkaze" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "chyba syntaxe neďaleko neočakávaného tokenu „%s“" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "chyba syntaxe neďaleko „%s“" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "chyba syntaxe: neočakávaný koniec súboru" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "chyba syntaxe: neočakávaný koniec súboru" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "chyba syntaxe" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Na opustenie shellu použite „%s“.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "neočakávaný koniec súboru počas hľadania zodpovedajúceho „)“" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "dokončovanie: funkcia „%s“ nebola nájdená" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: chybný konektor `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: neplatný popisovač súboru" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: ukazovateľ súboru je NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: „%c“: neplatný formátovací znak" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "popisovač súboru mimo rozsahu" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: nejednoznačné presmerovanie" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: nie je možné prepísať existujúci súbor" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: ombedzené: nie je možné presmerovať výstup" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "nie je možné vytvoriť odkladací súbor pre here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: nie je možné priradiť popisovač súboru premennej" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port nie je podporovaný bez podpory sietí" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "chyba presmerovania: nie je možné duplikovať fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "nenašiel sa /tmp, vytvorte ho prosím!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp musí byť platný názov adresára" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: neplatná voľba" -#: shell.c:1343 +#: shell.c:1355 #, fuzzy, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "nie j emožné resetovať nodelay režim fd %d" -#: shell.c:1354 +#: shell.c:1371 #, fuzzy, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "nie j emožné resetovať nodelay režim fd %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, fuzzy, c-format msgid "%s: Is a directory" msgstr "%s: je adresár" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Nemám meno!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, verzia %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1751,53 +1801,53 @@ msgstr "" "Použitie:\t%s [GNU dlhá voľba] [voľba] ...\n" "\t%s [GNU dlhá voľba] [voľba] súbor-skriptu ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU dlhé voľby:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Voľby shellu:\n" -#: shell.c:2069 +#: shell.c:2061 #, fuzzy msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD alebo -c príkaz alebo -O krátka_voľba\t\t(iba vyvolanie)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s alebo -o voľba\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Napísaním „%s -c \"help set\"“ získate viac informácií o voľbách shellu.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Napísaním „%s -c help“ získate viac informácií o vstavaných príkazoch " "(builtins) shellu.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Na ohlasovanie chýb použite príkaz „bashbug“.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: neplatná operácia" @@ -1967,97 +2017,101 @@ msgstr "Žiadosť o informácie" msgid "Unknown Signal #%d" msgstr "Neznámy signál #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "chybná substitúcia: chýba „%s“ v %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: nie je možné priradiť zoznam položke poľa" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "nie je možné vytvoriť rúru pre substitúciu procesov" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "nie je možné vytvoriť potomka pre substitúciu procesov" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "nie je možné otvoriť pomenovanú rúru %s na čítanie" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "nie je možné otvoriť pomenovanú rúru %s na zápis" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "nie je možné duplikovať pomenovanú rúru %s ako fd %d" -#: subst.c:6370 +#: subst.c:6761 #, fuzzy msgid "command substitution: ignored null byte in input" msgstr "chybná substitúcia: : v reťazci %s chýba uzatvárajúci „`”" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: nie je možné duplikovať rúru ako fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "nie je možné vytvoriť rúru pre substitúciu príkazov" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "nie je možné vytvoriť potomka pre substitúciu príkazov" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: nie je možné duplikovať rúru ako fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, fuzzy, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: %s: neplatná hodnota popisovača trasovacieho súboru" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, fuzzy, c-format msgid "%s: invalid indirect expansion" msgstr "%s: neplatný počet riadkov" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, fuzzy, c-format msgid "%s: invalid variable name" msgstr "„%s“: neplatný názov aliasu" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: chybná substitúcia" + +#: subst.c:8231 #, fuzzy, c-format msgid "%s: parameter not set" msgstr "%s: parameter je null alebo nenastavený" -#: subst.c:7480 -#, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parameter je null alebo nenastavený" - -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: výraz podreťazca < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: chybná substitúcia" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: nie je možné vykonať priradenie takýmto spôsobom" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" @@ -2065,160 +2119,168 @@ msgstr "" "budúce verzie shellu budú vynucovať vyhodnocovanie ako aritmetickú " "substitúciu" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "chybná substitúcia: : v reťazci %s chýba uzatvárajúci „`”" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "bez zhody: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "očakával sa argument" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: očakával sa celočíselný výraz" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "očakávala sa „)“" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "očakávala sa „)“, bolo nájdené %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: očakával sa binárny operátor" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: očakával sa unárny operátor" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "chýba „]“" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "chyba syntaxe: neočakávaná „;“" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "neplatné číslo signálu" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: chybná hodnota v trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "" "run_pending_traps: obsluha signálu je SIG_DFL, znovu posielam %d (%s) sebe" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: chybný signál %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "chyba pri importe definície funkcie „%s“" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "úroveň shellu (%d) je príliš vysoká, nastavujem späť na 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: v aktuálnom rozsahu sa nenachádza kontext funkcie" -#: variables.c:2661 +#: variables.c:2659 #, fuzzy, c-format msgid "%s: variable may not be assigned value" msgstr "%s: nie je možné priradiť popisovač súboru premennej" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: v aktuálnom rozsahu sa nenachádza kontext funkcie" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s má null exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "neplatný znak %d v exportstr %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "žiadne „=“ v exportstr %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: hlavička shell_variables nie je kontext funkcie" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: chýba kontext global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: hlavička shell_variables nie je dočasný rozsah prostredia" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: nemožno otvoriť ako SÚBOR" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: neplatná hodnota popisovača trasovacieho súboru" -#: variables.c:6450 +#: variables.c:6453 #, fuzzy, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s je mimo rozsahu" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2009 Free Software Foundation, Inc.\n" -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2226,39 +2288,39 @@ msgstr "" "Licencia GPLv3+: GNU GPL verzie 3 alebo novšia http://gnu.org/licenses/gpl." "html\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, verzia %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 #, fuzzy msgid "This is free software; you are free to change and redistribute it." msgstr "Toto je slobodný softvér; môžete ho slobodne meniť a šíriť.\n" -#: version.c:92 version2.c:92 +#: version.c:91 #, fuzzy msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "" "Nie sú poskytované ŽIADNE ZÁRUKY v rozsahu aký povoľuje\n" "aplikovateľné právo.\n" -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: nie je možné alokovať %lu bajtov (%lu bajtov alokovaných)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: nie je možné alokovať %lu bajtov" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: nie je možné alokovať %lu bajtov (%lu bajtov alokovaných)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: nie je možné alokovať %lu bajtov" @@ -2299,7 +2361,7 @@ msgstr "caller [výraz]" #: builtins.c:66 #, fuzzy -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]]] [adresár]" #: builtins.c:68 @@ -2413,8 +2475,9 @@ msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a pole] [-d oddeľovač] [-i text] [-n nznakov] [-N nznakov] [-p " @@ -2467,7 +2530,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] špec_signálu ...]" #: builtins.c:168 @@ -2494,26 +2558,30 @@ msgid "wait [pid ...]" msgstr "wait [pid]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAME [in SLOVÁ ... ] ; do PRÍKAZY; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( výraz1; výraz2; výraz3 )); do PRÍKAZY; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NÁZOV [in SLOVÁ ... ;] do PRÍKAZY; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] rúra" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case SLOVO in [VZOR [| VZOR]...) PRÍKAZY ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2521,66 +2589,66 @@ msgstr "" "if PRÍKAZY; then PRÍKAZY; [ elif PRÍKAZY; then PRÍKAZY; ]... [ else " "PRÍKAZY; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while PRÍKAZY; do PRÍKAZY; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until PRÍKAZY; do PRÍKAZY; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NÁZOV] príkaz [presmerovania]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "" "function názov_funkcie { PRÍKAZY ; } alebo názov_funkcie () { PRÍKAZY ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ PRÍKAZY ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "špec_úlohy [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( výraz ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ výraz ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "premenné - Názvy a významy niektorých premenných shellu" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | adr]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [názov_voľby ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] formát [argumenty]" -#: builtins.c:231 +#: builtins.c:233 #, fuzzy msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" @@ -2591,22 +2659,23 @@ msgstr "" "[-W zoznam_slov] [-F funkcia] [-C príkaz] [-X vzor_filtra] [-P predpona] [-S " "prípona] [názov ...]" -#: builtins.c:235 +#: builtins.c:237 #, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o voľba] [-A operácia] [-G glob_vzor] [-W " "zoznam_slov] [-F funkcia] [-C príkaz] [-X vzor_filtra] [-P predpona] [-S " "prípona] [slovo]" -#: builtins.c:239 +#: builtins.c:241 #, fuzzy msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o voľba] [-DE] [názov ...]" -#: builtins.c:242 +#: builtins.c:244 #, fuzzy msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2615,7 +2684,7 @@ msgstr "" "mapfile [-n počet] [-O začiatok] [-s počet] [-t] [-u fd] [-C spätné_volanie] " "[-c kvantum] [pole]" -#: builtins.c:244 +#: builtins.c:246 #, fuzzy msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2624,7 +2693,7 @@ msgstr "" "readarray [-n počet] [-O začiatok] [-s počet] [-t] [-u fd] [-C " "spätné_volanie] [-c kvantum] [pole]" -#: builtins.c:256 +#: builtins.c:258 #, fuzzy msgid "" "Define or display aliases.\n" @@ -2661,7 +2730,7 @@ msgstr "" " Vráti vždy pravdu ak nebol zadaný NÁZOV, pre ktorý nie je definovaný " "alias." -#: builtins.c:278 +#: builtins.c:280 #, fuzzy msgid "" "Remove each NAME from the list of defined aliases.\n" @@ -2679,7 +2748,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebol zadaný NÁZOV, pre ktorý nie je definovaný alias." -#: builtins.c:291 +#: builtins.c:293 #, fuzzy msgid "" "Set Readline key bindings and variables.\n" @@ -2759,7 +2828,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2777,7 +2846,7 @@ msgstr "" " Návratová hodnota:\n" " Návratová hodnota je 0 ak N nie je väčšie alebo rovné 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2795,7 +2864,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak N nie je väčšie alebo rovné 1." -#: builtins.c:354 +#: builtins.c:356 #, fuzzy msgid "" "Execute shell builtins.\n" @@ -2822,7 +2891,7 @@ msgstr "" "je\n" " vstavaná funkcia shellu." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2849,14 +2918,14 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak shell nevykonáva funkciu shellu a EXPR nie je neplatný." -#: builtins.c:387 +#: builtins.c:389 #, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2923,7 +2992,7 @@ msgstr "" " Vráti 0 ak bol aktuálny adresár zmenený a ak sa pri použití voľby -P\n" " úspešne nastaví $PWD, inak nenulovú hodnotu." -#: builtins.c:425 +#: builtins.c:427 #, fuzzy msgid "" "Print the name of the current working directory.\n" @@ -2952,7 +3021,7 @@ msgstr "" " Vracia 0 ak nie je zadaná neplatná voľba alebo nie je možné\n" " prečítať aktuálny adresár." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2968,7 +3037,7 @@ msgstr "" " Návratová hodnota:\n" " Vždy vráti pravda." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2980,7 +3049,7 @@ msgstr "" " Návratová hodnota:\n" " Vždy vráti 0." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2994,7 +3063,7 @@ msgstr "" " Návratová hodnota:\n" " Vždy vráti nepravda." -#: builtins.c:471 +#: builtins.c:473 #, fuzzy msgid "" "Execute a simple command or display information about commands.\n" @@ -3028,7 +3097,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu PRÍKAZu alebo zlyhá ak nenájde PRÍKAZ." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3057,7 +3126,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3104,7 +3174,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba." -#: builtins.c:532 +#: builtins.c:535 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3115,7 +3185,7 @@ msgstr "" " \n" " Zastaralé. Pozri „help declare“." -#: builtins.c:540 +#: builtins.c:543 #, fuzzy msgid "" "Define local variables.\n" @@ -3142,7 +3212,7 @@ msgstr "" " Vráti 0 ak nebola zadaná neplatná voľba, nevyskytla sa chyba a\n" " shell práve nevykonáva funkciu." -#: builtins.c:557 +#: builtins.c:560 #, fuzzy msgid "" "Write arguments to the standard output.\n" @@ -3210,7 +3280,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak sa nevyskytla sa chyba pri zápise." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3232,7 +3302,8 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak sa nevyskytla sa chyba pri zápise." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3252,6 +3323,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3286,7 +3363,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak NÁZOV nie je vstavaná funkcia shellu a nevyskytla sa chyba." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3305,7 +3382,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu príkazu alebo 0 ak je príkaz prázdny." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy msgid "" "Parse option arguments.\n" @@ -3382,7 +3459,7 @@ msgstr "" " Vráti 0 ak je voľba nájdená; zlyhá po dosiahnutí konca reťazca volieb\n" " alebo ak sa vyskytne chyba." -#: builtins.c:694 +#: builtins.c:702 #, fuzzy msgid "" "Replace the shell with the given command.\n" @@ -3423,7 +3500,7 @@ msgstr "" " Vráti 0 ak sa nestane, že PRÍKAZ nebol nájdený a nevyskytne sa chyba\n" " presmerovania." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3435,7 +3512,7 @@ msgstr "" " Ukončí shell s návratovou hodnotou N. Ak sa N vynechá, návratová\n" " hodnota sa nastaví podľa stavu posledného vykonaného príkazu." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3448,7 +3525,8 @@ msgstr "" " Ukončí login shell s návratovou hodnotou N. Vráti chybu ak nie je\n" " spustený v login shelli." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3473,6 +3551,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3504,7 +3584,7 @@ msgstr "" " Vráti 0 alebo stav vykonaného príkazu; nenulovú hodnotu ak sa vyskytne\n" " chyba." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3524,7 +3604,7 @@ msgstr "" " Stav príkazu umiestneného do popredia; nenulovú hodnotu ak sa vyskytne\n" " chyba." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3545,7 +3625,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nie je riadenie úloh vypnuté a nevyskytne sa chyba." -#: builtins.c:793 +#: builtins.c:803 #, fuzzy msgid "" "Remember or display program locations.\n" @@ -3577,8 +3657,8 @@ msgstr "" " \n" " Voľby:\n" " -d\tzabudnúť zapamätanné umiestnenia každého NÁZVU\n" -" -l\tzobraziť vo formáte, ktoré je možné znova použiť ako \t" -"\tvstup\n" +" -l\tzobraziť vo formáte, ktoré je možné znova použiť ako " +"\t\tvstup\n" " -p cesta\tpoužiť CESTU ako plnú cestu k NÁZVU\n" " -r\tzabudnúť všetky zapamätané umiestnenia\n" " -t\tvypísať zapamätané umiestnenia každého NÁZVU, pred\n" @@ -3593,7 +3673,7 @@ msgstr "" " Vráti 0 ak sa nestalo, že NÁZOV nebol nájdený a nebola zadaná\n" " neplatná voľba." -#: builtins.c:818 +#: builtins.c:828 #, fuzzy msgid "" "Display information about builtin commands.\n" @@ -3634,7 +3714,7 @@ msgstr "" " Vráti 0 ak sa nestalo, že VZOR nebol nájdený a nebola zadaná\n" " neplatná voľba." -#: builtins.c:842 +#: builtins.c:852 #, fuzzy msgid "" "Display or manipulate the history list.\n" @@ -3659,7 +3739,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3699,7 +3783,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba." -#: builtins.c:879 +#: builtins.c:893 #, fuzzy msgid "" "Display status of jobs.\n" @@ -3743,7 +3827,7 @@ msgstr "" " Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba.\n" " Ak je použitá voľba -x, vráti sa návratová hodnota PRÍKAZu." -#: builtins.c:906 +#: builtins.c:920 #, fuzzy msgid "" "Remove jobs from current shell.\n" @@ -3774,7 +3858,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebola zadaná neplatná JOBSPEC." -#: builtins.c:925 +#: builtins.c:939 #, fuzzy msgid "" "Send a signal to a job.\n" @@ -3816,7 +3900,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3901,7 +3985,7 @@ msgstr "" " Návratová hodnota:\n" " Ak sa posledný ARG vyhodnotí na 0, let vráti 1; 0 inak sa vráti 0." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -3926,6 +4010,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3998,7 +4084,7 @@ msgstr "" " Vráti 0 ak sa nenarazí pri čítaní nakoniec súboru, nevyprší čas na\n" " čítanie a ako argument -u nebol je zadaný neplatný popisovač." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4019,7 +4105,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti N alebo zlyhá ak shell nevykonáva funkciu či skript." -#: builtins.c:1055 +#: builtins.c:1071 #, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" @@ -4096,6 +4182,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4191,7 +4281,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebola zadaná neplatná voľba." -#: builtins.c:1140 +#: builtins.c:1160 #, fuzzy msgid "" "Unset values and attributes of shell variables and functions.\n" @@ -4231,7 +4321,7 @@ msgstr "" " Vráti 0 ak sa nestalo, že je NÁZOV iba na čítanie a nebola zadaná\n" " neplatná voľba." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4266,7 +4356,7 @@ msgstr "" " Vráti 0 ak sa nestalo, že je NÁZOV neplatný a nebola zadaná\n" " neplatná voľba." -#: builtins.c:1181 +#: builtins.c:1201 #, fuzzy msgid "" "Mark shell variables as unchangeable.\n" @@ -4306,7 +4396,7 @@ msgstr "" " Vráti 0 ak sa nestalo, že je NÁZOV neplatný a nebola zadaná\n" " neplatná voľba." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4324,7 +4414,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak sa nestalo, že je N záporné alebo väčšie ako $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4348,15 +4438,18 @@ msgstr "" " Vráti návratovú hodnotu posledného príkazu v SÚBORe; zlyhá ak nie je\n" " možné SÚBOR načítať." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4372,7 +4465,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak sa nestalo, že je vypnuté riadenie úloh a nevyskytla sa chyba." -#: builtins.c:1262 +#: builtins.c:1284 #, fuzzy msgid "" "Evaluate conditional expression.\n" @@ -4534,7 +4627,7 @@ msgstr "" " Vráti 0 ak VÝR vyhodnotí ako pravdivý; zlyhá ako sa VÝR vyhodnotí\n" " ako nepravdivý alebo je zadaný neplatný argument." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4546,7 +4639,7 @@ msgstr "" " Toto je synonymum vsatavanej funkcie „test“, ale posledný\n" " argument musí byť literál „]“, ktorý uzatvára otvárajúcu „[“." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4565,7 +4658,8 @@ msgstr "" " Návratová hodnota:\n" " Vždy vráti 0." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy msgid "" "Trap signals and other events.\n" " \n" @@ -4573,31 +4667,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4645,7 +4744,7 @@ msgstr "" " Vráti 0 ak sa nestalo, že je SIGSPEC neplatný a nebola zadaná\n" " neplatná voľba." -#: builtins.c:1401 +#: builtins.c:1430 #, fuzzy msgid "" "Display information about command type.\n" @@ -4701,7 +4800,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak boli nájdené všetky NÁZVY; zlyhá ak nie." -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy msgid "" "Modify shell resource limits.\n" @@ -4744,9 +4843,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4792,7 +4892,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4826,7 +4926,7 @@ msgstr "" " Vráti 0 ak sa nestalo, že je REŽIM neplatný a nebola zadaná\n" " neplatná voľba." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" @@ -4870,7 +4970,7 @@ msgstr "" " Vráti stav ID; zlyhá ak je ID neplatný alebo bola zadaná\n" " neplatná voľba." -#: builtins.c:1534 +#: builtins.c:1564 #, fuzzy msgid "" "Wait for process completion and return exit status.\n" @@ -4896,7 +4996,16 @@ msgstr "" " Vráti stav ID; zlyhá ak je ID neplatný alebo bola zadaná neplatná\n" " voľba." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4918,7 +5027,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu posledného vykonaného príkazu." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4948,7 +5057,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu posledného vykonaného príkazu." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4983,7 +5092,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu posledného vykonaného príkazu." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5011,7 +5120,7 @@ msgstr "" " Návratová hodnota:\n" " Návratová hodnota je návratová hodnota RÚRY." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5029,7 +5138,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu posledného vykonaného príkazu." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5066,7 +5175,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu posledného vykonaného príkazu." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5086,7 +5195,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu posledného vykonaného príkazu." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5106,7 +5215,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu posledného vykonaného príkazu." -#: builtins.c:1672 +#: builtins.c:1712 #, fuzzy msgid "" "Create a coprocess named NAME.\n" @@ -5129,7 +5238,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu PRÍKAZu." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5154,7 +5263,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak sa nestalo, že je NÁZOV iba na čítanie." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5172,7 +5281,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu posledného vykonaného príkazu." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5196,7 +5305,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti návratovú hodnotu obnovenej úlohy." -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy msgid "" "Evaluate arithmetic expression.\n" @@ -5215,7 +5324,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 1 ak sa VÝRAZ vyhodnotí na 0; inak vráti 0." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5263,7 +5372,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 alebo 1 v závislosti na hodnote VÝRAZu." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5367,7 +5476,7 @@ msgstr "" " HISTIGNORE\tBodkočiarkami oddelený zoznam vzoriek, ktoré\n" " \t\tsa používajú na rozhodovanie, či sa príkaz uloží do histórie.\n" -#: builtins.c:1822 +#: builtins.c:1862 #, fuzzy msgid "" "Add directories to stack.\n" @@ -5424,7 +5533,7 @@ msgstr "" " Vráti 0 ak nebol zadaný neplatný argument a nevyskytla sa\n" " chyba pri zmene adresára." -#: builtins.c:1856 +#: builtins.c:1896 #, fuzzy msgid "" "Remove directories from stack.\n" @@ -5475,7 +5584,7 @@ msgstr "" " Vráti 0 ak nebol zadaný neplatný argument a nevyskytla sa\n" " chyba pri zmene adresára." -#: builtins.c:1886 +#: builtins.c:1926 #, fuzzy msgid "" "Display directory stack.\n" @@ -5527,7 +5636,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebol zadaný neplatný argument a nevyskytla sa chyba." -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy msgid "" "Set and unset shell options.\n" @@ -5565,7 +5674,7 @@ msgstr "" " Vráti 0 ak je OPTNAME zapnuté; zlyhá ak bola zadaná\n" " neplatná voľba alebo OPTNAME je vypnuté." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5583,9 +5692,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5632,16 +5741,16 @@ msgstr "" " Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba pri\n" " zápise či priradení." -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5685,14 +5794,19 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5705,7 +5819,7 @@ msgstr "" " Návratová hodnota:\n" " Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba." -#: builtins.c:2019 +#: builtins.c:2062 #, fuzzy msgid "" "Modify or display completion options.\n" @@ -5763,7 +5877,7 @@ msgstr "" " Vráti 0 ak nebola zadaná neplatná voľba a NÁZOV nemá definovanú\n" " špecifikáciu dopĺňania." -#: builtins.c:2050 +#: builtins.c:2093 #, fuzzy msgid "" "Read lines from the standard input into an indexed array variable.\n" @@ -5838,7 +5952,7 @@ msgstr "" " Vráti 0 ak nebola zadaná neplatná voľba a POLE nie je len na čítanie a\n" " nie je to indexované pole." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5848,6 +5962,35 @@ msgstr "" " \n" " Synonymum k „mapfile“." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Vrátiť kontext aktuálneho volania podprocedúry.\n" +#~ " \n" +#~ " Bez VÝR, vráti „$line $filename“. S VÝR,\n" +#~ " vráti „$line $subroutine $filename“; túto informáciu\n" +#~ " je možné využiť pre trasovanie zásobníka.\n" +#~ " \n" +#~ " Hodnota VÝR určuje o koľko rámcov volania sa vrátiť\n" +#~ " pred aktuálny; najvyšší rámec má číslo 0.\n" +#~ " \n" +#~ " Návratová hodnota:\n" +#~ " Vráti 0 ak shell nevykonáva funkciu shellu a EXPR nie je neplatný." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "upozornenie: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: neplatný kľúč asociatívneho poľa" diff --git a/po/sl.gmo b/po/sl.gmo index 2615432b9966576bfbf3d9d1cac7cd1065a21def..0722c7e78ca6ac0baa635012233a5150bc1428b9 100644 GIT binary patch delta 10096 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 V;W*G(R9-yL7-3!B@PhHU@m~{~U0VPE delta 18267 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 diff --git a/po/sl.po b/po/sl.po index 107fcea6e..8a8a2d320 100644 --- a/po/sl.po +++ b/po/sl.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-4.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2013-03-09 20:21+0100\n" "Last-Translator: Klemen Košir <klemen913@gmail.com>\n" "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n" @@ -18,127 +18,127 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" -"%100==4 ? 3 : 0);\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " +"n%100==4 ? 3 : 0);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "slab podpis polja" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: ni mogoče pretvoriti zabeleženega polja v povezano polje" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: ni mogoče dodeliti v ne-številčno kazalo" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: treba je uporabiti podpis pri dodeljevanju povezanega polja" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: ni mogoče ustvariti: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "bash_execute_unix_command: ni mogoče najti tipkovne razvrstitve za ukaz" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: prvi znak brez presledka ni `\"'" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "brez zaključka `%c' v %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: manjka ločilnik dvopičja" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "`%s': ni mogoče odvezati" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "" -#: braces.c:406 +#: braces.c:383 #, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "`%s': neveljaven vzdevek" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "urejanje vrstic ni omogočeno" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "`%s': neveljavno ime tipkovne razvrstitve" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: ni mogoče brati: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "`%s': neznano ime funkcije" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s ni vezan na nobeno tipko.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s se lahko pokliče s pomočjo " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "`%s': ni mogoče odvezati" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "števec zanke" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "smiselno samo v `for', `while', ali `until' zanki" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -148,7 +148,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Vrne vsebino trenutnega klica podprograma.\n" " \n" @@ -163,350 +167,360 @@ msgstr "" " Vrne 0, razen če lupina ne izvršuje funkcije lupine ali pa IZRAZ\n" " ni veljaven." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME ni nastavljen" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "preveč argumentov" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "ni druge mape" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD ni nastavljen" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "vrstica %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "opozorilo: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: uporaba: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: možnost zahteva argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: zahtevan je števni argument" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: ni mogoče najti" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: neveljavna možnost" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: neveljavno ime možnosti" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': neveljavno določilo" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "neveljavno osmiško število" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "neveljavno šestnajstiško število" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "neveljavno število" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: neveljavno določilo signala" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "`%s': ni določilo opravila ali neveljavno določilo posla" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: spremenljivka le za branje" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: ni mogoče ponastaviti" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s izven dosega" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s izven dosega" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: ni takšnega posla" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: ni nadzora posla" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "ni nadzora posla" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: omejeno" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "omejeno" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: ni vgrajena lupina" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "napaka med pisanjem: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "napaka med nastavljanjem atributov terminala: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "napaka med pridobivanjem atributov terminala: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: napaka med pridobivanjem trenutne mape: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: dvoumno določilo posla" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: ni zabeleženo polje" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: ni mogoče ponastaviti: samo za branje %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: ni mogoče ponastaviti" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: neveljavno ime dejanja" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: ni določila dopolnjevanja" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "Opozorilo: možnost -F morda ne bo delovala po pričakovanjih" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "Opozorilo: možnost -C morda ne bo delovala po pričakovanjih" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "trenutno se ne izvaja funkcija dopolnjevanja" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "se lahko uporabi samo v funkciji" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "ni mogoče uporabiti `-f' za ustvarjanje funkcij" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: funkcija samo za branje" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, fuzzy, c-format msgid "`%s': invalid variable name for name reference" msgstr "`%s': neveljaven vzdevek" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: na ta način ni mogoče uničiti spremenljivk polja" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: ni mogoče pretvoriti povezanega polja v zabeleženo polje" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dinamično nalaganje ni na voljo" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "ni mogoče odpreti predmeta v souporabi %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "ni mogoče najti %s v predmetu v souporabi %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: ni dinamično naloženo" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: ni dinamično naloženo" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: ni mogoče izbrisati: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: je mapa" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: ni običajna datoteka" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: datoteka je prevelika" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: ni mogoče izvesti binarne datoteke" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: ni mogoče izvesti: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "odjava\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "ni prijavna lupina: uporabite `exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Obstajajo ustavljeni posli.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Obstajajo posli, ki se izvajajo.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "najdenega ni nobenega ukaza" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "določilo zgodovine" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: ni mogoče odpreti začasne datoteke: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "trenutno" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "posel %d se je pričel brez nadzora" @@ -521,11 +535,11 @@ msgstr "%s: neveljavna možnost -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: možnost zahteva argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "razpršitev je onemogočena" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: razpršitvena razpredelnica je prazna\n" @@ -557,12 +571,12 @@ msgstr "" "nobena tema pomoči se ne ujema s `%s'. Poskusite `help help' ali `man -k " "%s' ali `info %s'." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: ni mogoče odpreti: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -583,21 +597,31 @@ msgstr "" "Zvezdica (*) poleg imena pomeni, da je ukaz onemogočen.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "ni mogoče uporabiti več kot eno od -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "položaj zgodovine" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "prazno ime spremenljivke polja" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameter je prazen ali pa ni določen" + +#: builtins/history.def:349 #, fuzzy, c-format msgid "%s: invalid timestamp" msgstr "%s: neveljavno ime možnosti" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: razširitev zgodovine je spodletela" @@ -611,113 +635,113 @@ msgstr "%s: inlib je spodletel" msgid "no other options allowed with `-x'" msgstr "druge možnosti niso dovoljene z `-x'" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argumenti morajo biti določila opravila ali posla" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Neznana napaka" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "izraz je bil pričakovan" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: ni zabeleženo polje" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: neveljavno določilo opisnika datoteke" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: neveljaven opisnik datoteke: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: neveljavno štetje vrstic" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: neveljaven izvor polja" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: neveljaven del povratnega klica" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "prazno ime spremenljivke polja" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "potrebna podpora spremenljivke polja" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "`%s': manjka znak oblike" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "`%c': neveljavno določilo vrste časa" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "`%c': neveljaven znak oblike" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "opozorilo: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "manjka šestnajstiška števka za \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "manjka števka s podporo unicode za \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "ni druge mape" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, fuzzy, c-format msgid "%s: invalid argument" msgstr "%s: neveljaven argument omejitve" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<ni trenutne mape>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "sklad mape je prazen" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "kazalo sklada mape" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -758,7 +782,7 @@ msgstr "" " -N\tPrikaže Nti vnos s štetjem z desne strani seznama, prikazan s\n" "\tpomočjo map, ko kličemo brez možnosti, začenši z nič." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -804,7 +828,7 @@ msgstr "" " \n" " Ukaz lupine `dirs' prikaže sklad map." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -842,320 +866,331 @@ msgstr "" " \n" " Ukaz lupine `dirs' prikaže sklad map." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: neveljavno določilo časovne omejitve" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "napaka med branjem: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "`return' lahko vrne samo iz funkcije ali skripte z izvorno kodo" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "ni mogoče ponastaviti funkcije in spremenljivke hkrati" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: ni spremenljivka polja" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: ni funkcija" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, fuzzy, c-format msgid "%s: cannot export" msgstr "%s: ni mogoče ponastaviti" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "štetje premika" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "ni mogoče nastaviti in ponastaviti možnosti lupine hkrati" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: neveljavno ime možnosti lupine" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "zahtevan je argument imena datoteke" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: datoteke ni mogoče najti" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "ni mogoče dati v pripravljenost" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "prijavne lupine ni mogoče dati v pripravljenost" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s je drugo ime za `%s'\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s je ključna beseda lupine\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s je funkcija\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, fuzzy, c-format msgid "%s is a special shell builtin\n" msgstr "%s je vgrajena lupina\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s je funkcija\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s je vgrajena lupina\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s je %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s je razpršeno (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: neveljaven argument omejitve" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': slab ukaz" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: ni mogoče dobiti omejitve: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "omejitev" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: ni mogoče spremeniti omejitve: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "osmiško število" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': neveljaven operator simbolnega načina" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': neveljaven znak simbolnega načina" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " vrstica " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "zadnji ukaz: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Prekinjanje ..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "" -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "opozorilo: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "neznana napaka ukaza" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "slaba vrsta ukaza" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "slab povezovalnik" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "slab skok" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: nedoločena spremenljivka" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\apotekla je časovna omejitev med čakanjem na vnos: samodejna odjava\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "ni mogoče preusmeriti običajnega vnosa iz /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': neveljaven znak oblike" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "napaka cevi" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: omejeno: ni mogoče določiti `/' v imenih ukaza" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: ukaza ni mogoče najti" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: slab tolmač" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: ni mogoče izvesti binarne datoteke" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: slab tolmač" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, fuzzy, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: ni mogoče izvesti binarne datoteke" -#: execute_cmd.c:6123 -#, fuzzy, c-format -msgid "`%s': is a special builtin" -msgstr "%s je vgrajena lupina\n" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "ni mogoče podvajati fd %d v fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "stopnja rekurzivnosti izraza presežena" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "prekoračitev spodnje meje sklada rekurzivnosti" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "skladenjska napaka v izrazu" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "poskus dodelitve ne-spremenljivki" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "skladenjska napaka v izrazu" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "delitev z 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "hrošč: slab žeton expassign" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "`:' pričakovano za pogojni izraz" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "eksponent je manjši kot 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "po predhodnem večanju ali manjšanju je pričakovano določilo" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "manjka `)'" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "skladenjska napaka: pričakovan operand" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "skladenjska napaka: neveljaven aritmetični operand" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (žeton napake je \"%s\")" @@ -1173,7 +1208,7 @@ msgstr "%s: neveljavno štetje vrstic" msgid "value too great for base" msgstr "vrednost je prevelika za zbirko" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: napaka izraza\n" @@ -1182,46 +1217,51 @@ msgstr "%s: napaka izraza\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: ni mogoče dostopati do nadrejenih map" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, fuzzy, c-format +msgid "`%s': is a special builtin" +msgstr "%s je vgrajena lupina\n" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "ni mogoče ponastaviti načina brez zakasnitve za fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "ni mogoče dodeliti opisnika novih map za vnos bash iz fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: medpomnilnik že obstaja za nov fd %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: cev pgrp" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "razvejen id opravila %d se pojavi v izvajajočem se poslu %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "brisanje ustavljenega posla %d s skupino opravila %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: id opravila %5ld (%s) je označen kot še živ" @@ -1231,138 +1271,138 @@ msgstr "add_process: id opravila %5ld (%s) je označen kot še živ" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: ni takšnega določila opravila" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Končano" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Zaustavljeno" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Zaustavljeno(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Se izvaja" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Končano(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Končaj %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Neznano stanje" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(izpis jedra) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "podrejeno opravilo setpgid (%ld v %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: opravilo z id %ld ni podrejeno opravilo te lupine" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: ni zapisov o opravilu %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: posel %d je zaustavljen" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: ni takšnega posla" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: posel je uničen" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: posel %d se že izvaja v ozadju" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: vklop WNOHANG za preprečitev nedoločenosti bloka" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: vrstica %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (izpis jedra)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd zdaj: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp je spodletel" -#: jobs.c:4434 +#: jobs.c:4486 #, fuzzy msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: vrstična disciplina" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: vrstična disciplina" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "ni mogoče nastaviti skupine opravil terminala (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "brez nadzora posla v tej lupini" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: spodletela trditev: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1371,384 +1411,394 @@ msgstr "" "\r\n" "malloc: %s:%d: trditev je bila slabo izpeljana\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "neznano" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: vsebina bloka na prostem seznamu je bila prepisana" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: poklican z že sproščenim argumentom bloka" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: klic z nedodeljenim argumentom bloka" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: zaznana prekoračitev spodnje meje; mh_nbytes je izven dosega" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: zaznana prekoračitev spodnje meje; mh_nbytes je izven dosega" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "" "free: velikosti začetnih in končnih podatkovnih kosov \"chunk\" se " "razlikujejo" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: klic z nedodeljenim argumentom bloka" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: zaznana prekoračitev spodnje meje; mh_nbytes je izven dosega" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: zaznana prekoračitev spodnje meje; mh_nbytes je izven dosega" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "" "realloc: velikosti začetnih in končnih podatkovnih kosov \"chunk\" se " "razlikujejo" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: je dodelitvena razpredelnica polna z FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: je %p že v razpredelnici kot dodeljen?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: je %p že v razpredelnici kot prost?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "neveljavna zbirka" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: gostitelj je neznan" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: neveljavna storitev" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: slabo določilo omrežne poti" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "omrežno opravilo ni podprto" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: ni mogoče spremeniti jezikovne oznake (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: ni mogoče spremeniti jezikovne oznake (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: ni mogoče spremeniti jezikovne oznake (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: ni mogoče spremeniti jezikovne oznake (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Imate pošto v $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Imate novo pošto v $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Pošta v %s je bila prebrana\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "skladenjska napaka: potreben je aritmetični izraz" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "skladenjska napaka: `;' nepričakovano" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "skladenjska napaka: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: slaba vrsta navodila %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "here-document v vrstici %d razmejen z end-of-file (želeno `%s')" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: navodilo preusmeritve `%d' je izven dosega" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "napaka med pisanjem: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "nepričakovan konec datoteke med iskanjem ujemanja z `%c'" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "nepričakovan konec datoteke med iskanjem ujemanja z `]]'" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "skladenjska napaka v pogojnem izrazu: nepričakovan žeton `%s'" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "skladenjska napaka v pogojnem izrazu" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "nepričakovan žeton `%s', pričakovan je bil `)'" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "pričakovan `)'" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "nepričakovan argument `%s' do pogojnega enoslovnega operatorja" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "nepričakovan argument do pogojnega enoslovnega operatorja" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "nepričakovan žeton `%s', pričakovan je binarni pogojni operator" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "pričakovan je binarni pogojni operator" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "nepričakovan argument `%s' do pogojnega binarnega operatorja" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "nepričakovan argument do pogojnega binarnega operatorja" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "nepričakovan žeton `%c' v pogojnem ukazu" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "nepričakovan žeton `%s' v pogojnem ukazu" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "nepričakovan žeton %d v pogojnem ukazu" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "skladenjska napaka blizu nepričakovanega žetona `%s'" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "skladenjska napaka blizu `%s'" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "skladenjska napaka: nepričakovan konec datoteke" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "skladenjska napaka: nepričakovan konec datoteke" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "skladenjska napaka" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Uporabite \"%s\", če želite zapustiti lupino.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "nepričakovan konec datoteke med iskanjem ujemanja z `)'" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "končano: funkcije `%s' ni mogoče najti" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: slab povezovalnik `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: neveljaven opisnik datoteke" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: prazen kazalec datoteke NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': neveljaven znak oblike" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "opisnik datoteke je izven dosega" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: dvoumna preusmeritev" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: ni mogoče prepisati obstoječe datoteke" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: omejitev: ni mogoče preusmeriti izhoda" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "ni mogoče ustvariti začasne datoteke za here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: ni mogoče dodeliti fd spremenljivki" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port ni podprt brez omrežja" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "napaka preusmeritve: ni mogoče podvajati fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "ni mogoče najti /tmp, ustvarite ga!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp mora biti veljavno ime mape" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: neveljavna možnost" -#: shell.c:1343 +#: shell.c:1355 #, fuzzy, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "ni mogoče ponastaviti načina brez zakasnitve za fd %d" -#: shell.c:1354 +#: shell.c:1371 #, fuzzy, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "ni mogoče ponastaviti načina brez zakasnitve za fd %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, fuzzy, c-format msgid "%s: Is a directory" msgstr "%s: je mapa" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Ni imena!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, različica %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1757,50 +1807,50 @@ msgstr "" "Uporaba:\t%s [dolga možnost GNU] [možnost] ...\n" "\t%s [dolga možnost GNU] [možnost] skriptni dokument ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Dolge možnosti GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Možnosti lupine:\n" -#: shell.c:2069 +#: shell.c:2061 #, fuzzy msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD ali ukaz -c ali -O shopt_option\t\t(samo sklicevanje)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s ali možnost -o\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "Vpišite `%s -c \"help set\"' za več podrobnosti o možnostih lupine.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "Vpišite `%s -c help' za več podrobnosti o možnostih ukazov lupine.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Uporabite ukaz `bashbug' za poročanje hroščev.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: neveljavno opravilo" @@ -1970,257 +2020,269 @@ msgstr "zahteva po podatkih" msgid "Unknown Signal #%d" msgstr "Neznan signal #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "slaba zamenjava: ni zaključka `%s' v %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: ni mogoče dodeliti seznama članu polja" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "ni mogoče ustvariti cevi za zamenjavo opravila" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "ni mogoče ustvariti podrejenega opravila za zamenjavo opravila" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "ni mogoče odpreti imenovane cevi %s za branje" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "ni mogoče odpreti imenovane cevi %s za pisanje" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "ni mogoče podvajati imenovane cevi %s kot fd %d" -#: subst.c:6370 +#: subst.c:6761 #, fuzzy msgid "command substitution: ignored null byte in input" msgstr "slaba zamenjava: ni zaključka \"`\" v %s" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: ni mogoče podvajati cevi kot fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "ni mogoče ustvariti cevi za zamenjavo ukaza" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "ni mogoče ustvariti podrejenega opravila za zamenjavo ukaza" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: ni mogoče podvajati cevi kot fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, fuzzy, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: %s: neveljavna vrednost za opisnik sledenja datotek" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, fuzzy, c-format msgid "%s: invalid indirect expansion" msgstr "%s: neveljavno štetje vrstic" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, fuzzy, c-format msgid "%s: invalid variable name" msgstr "`%s': neveljaven vzdevek" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: slaba zamenjava" + +#: subst.c:8231 #, fuzzy, c-format msgid "%s: parameter not set" msgstr "%s: parameter je prazen ali pa ni določen" -#: subst.c:7480 -#, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parameter je prazen ali pa ni določen" - -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: izraz podniza < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: slaba zamenjava" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: ni mogoče dodeliti na tak način" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" msgstr "" "prihodnje različice lupine bodo prisilile ocenitev kot aritmetično zamenjavo" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "slaba zamenjava: ni zaključka \"`\" v %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "ni ujemanja: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "pričakovan je argument" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: pričakovan je izraz celega števila" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "pričakovan je `)'" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "pričakovan je `)', najden je %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: pričakuje se binarni operator" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: pričakuje se enosnoven operator" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "manjka `]'" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "skladenjska napaka: `;' nepričakovano" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "neveljavna števka signala" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: slaba vrednost v trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "" "run_pending_traps: ročnik signala je SIG_DFL, ponovno pošiljanje %d (%s) sebi" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: slab signal %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "napaka med uvozom določila funkcije `%s'" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "raven lupine (%d) je previsoka, ponastavljanje na 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: v trenutnem dosegu ni vsebine funkcije" -#: variables.c:2661 +#: variables.c:2659 #, fuzzy, c-format msgid "%s: variable may not be assigned value" msgstr "%s: ni mogoče dodeliti fd spremenljivki" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: v trenutnem dosegu ni vsebine funkcije" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s ima prazen exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "neveljaven znak %d v exportstr za %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "ni `=' v exportstr za %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: glava shell_variables ni vsebina funkcije" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: ni vsebine global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: glava shell_variables ni trenuten obseg okolja" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: ni mogoče odpreti kot DATOTEKO" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: neveljavna vrednost za opisnik sledenja datotek" -#: variables.c:6450 +#: variables.c:6453 #, fuzzy, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s izven dosega" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Avtorske pravice (C) 2009 Free Software Foundation, Inc.\n" -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2228,37 +2290,37 @@ msgstr "" "Dovoljenje GPLv3+: GNU GPL različica 3 ali poznejše <http://gnu.org/licenses/" "gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, različica %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 #, fuzzy msgid "This is free software; you are free to change and redistribute it." msgstr "To je prosta programska oprema; lahko jo spreminjate in razširjate.\n" -#: version.c:92 version2.c:92 +#: version.c:91 #, fuzzy msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Je BREZ KAKRŠNEKOLI GARANCIJE, v obsegu, ki ga dovoljuje zakonodaja.\n" -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: ni mogoče dodeliti %lu bajtov (%lu bajtov je dodeljenih)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: ni mogoče dodeliti %lu bajtov" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: ni mogoče dodeliti %lu bajtov (%lu bajtov dodeljenih)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: ni mogoče dodeliti %lu bajtov" @@ -2299,7 +2361,7 @@ msgstr "caller [izraz]" #: builtins.c:66 #, fuzzy -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]]] [mapa]" #: builtins.c:68 @@ -2414,8 +2476,9 @@ msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a polje] [-d razmejilnik] [-i besedilo] [-n n-znakov] [-N n-" @@ -2468,7 +2531,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] določilo_signala ...]" #: builtins.c:168 @@ -2495,91 +2559,95 @@ msgid "wait [pid ...]" msgstr "wait [id_opravila]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for IME [in IMENA ... ] ; do UKAZI; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( izraz1; izraz2; izraz3 )); do UKAZI; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select IME [in IMENA ... ;] do UKAZI; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] cevovod" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case IME in [VZOREC [| VZOREC]...) UKAZI ;;]... esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" msgstr "" "if UKAZI; then UKAZI; [ elif UKAZI; then UKAZI; ]... [ else UKAZI; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while UKAZI; do UKAZI; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until UKAZI; do UKAZI; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [IME] ukaz [preusmeritve]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function ime { UKAZI ; } ali ime () { UKAZI ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ UKAZI ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "določilo_posla [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( izraz ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ izraz ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "spremenljivke - Imena in pomeni nekaterih spremenljivk lupine" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | mapa]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [ime_možnosti ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v spremenljivka] oblika [argumenti]" -#: builtins.c:231 +#: builtins.c:233 #, fuzzy msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" @@ -2590,22 +2658,23 @@ msgstr "" "krajevni_vzorec] [-W seznam_besed] [-F funkcija] [-C ukaz] [-X " "filtrirni_vzorec] [-P predpona] [-S pripona] [ime ...]" -#: builtins.c:235 +#: builtins.c:237 #, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o možnost] [-A dejanje] [-G krajevni_vzorec] [-W " "seznam_besed] [-F funkcija] [-C ukaz] [-X filtrirni_vzorec] [-P predpona] [-" "S pripona] [beseda]" -#: builtins.c:239 +#: builtins.c:241 #, fuzzy msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o možnost] [-DE] [ime ...]" -#: builtins.c:242 +#: builtins.c:244 #, fuzzy msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2614,7 +2683,7 @@ msgstr "" "mapfile [-n števec] [-O izvor] [-s števec] [-t] [-u fd] [-C povratni_klic] [-" "c del] [polje]" -#: builtins.c:244 +#: builtins.c:246 #, fuzzy msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2623,7 +2692,7 @@ msgstr "" "readarray [-n števec] [-O izvor] [-s števec] [-t] [-u fd] [-C povratni_klic] " "[-c del] [polje]" -#: builtins.c:256 +#: builtins.c:258 #, fuzzy msgid "" "Define or display aliases.\n" @@ -2660,7 +2729,7 @@ msgstr "" " vzdevek vrne pravilno, razen če je predloženo IME, za katero ni\n" " bil določen noben vzdevek." -#: builtins.c:278 +#: builtins.c:280 #, fuzzy msgid "" "Remove each NAME from the list of defined aliases.\n" @@ -2677,7 +2746,7 @@ msgstr "" " \n" " Vrne pravilno, razen če IME ni obstoječ vzdevek." -#: builtins.c:291 +#: builtins.c:293 #, fuzzy msgid "" "Set Readline key bindings and variables.\n" @@ -2758,7 +2827,7 @@ msgstr "" " Status končanja:\n" " bind vrne 0, razen, če je dana neprepoznana možnost ali se pojavi napaka." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2776,7 +2845,7 @@ msgstr "" " Stanje končanja:\n" " Stanje končanja je 0, razen če N ni večji kot ali enak 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2794,7 +2863,7 @@ msgstr "" " Stanje končanja:\n" " Stanje končanja je 0, razen če N ni večji kot ali enak 1." -#: builtins.c:354 +#: builtins.c:356 #, fuzzy msgid "" "Execute shell builtins.\n" @@ -2819,7 +2888,7 @@ msgstr "" " Vrne stanje končanja VGRAJENE_LUPINE ali napak, če VGRAJENA_LUPINA\n" " ni vgrajena lupina .." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2847,14 +2916,14 @@ msgstr "" " Vrne 0, razen če lupina ne izvršuje funkcije lupine ali pa IZRAZ\n" " ni veljaven." -#: builtins.c:387 +#: builtins.c:389 #, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2920,7 +2989,7 @@ msgstr "" " Vrne 0, če je mapa spremenjena in če je $PWD uspešno nastavljen, kadar\n" " je uporabljena možnost -P; drugače je ne-ničelna vrednost" -#: builtins.c:425 +#: builtins.c:427 #, fuzzy msgid "" "Print the name of the current working directory.\n" @@ -2949,7 +3018,7 @@ msgstr "" " Vrne 0, razen če je dana neveljavna možnost ali pa trenutne mape\n" " ni mogoče prebrati." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2965,7 +3034,7 @@ msgstr "" " Stanje končanja:\n" " Vedno uspešno." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2977,7 +3046,7 @@ msgstr "" " Stanje končanja:\n" " Vedno uspešno." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2989,7 +3058,7 @@ msgstr "" " Stanje končanja:\n" " Vedno neuspešno." -#: builtins.c:471 +#: builtins.c:473 #, fuzzy msgid "" "Execute a simple command or display information about commands.\n" @@ -3023,7 +3092,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje končanja UKAZA ali neuspešno, če UKAZA ni mogoče najti." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3052,7 +3121,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3101,7 +3171,7 @@ msgstr "" " Vrne uspešno, razen če je predložena neveljavna možnost ali pride\n" " do napake." -#: builtins.c:532 +#: builtins.c:535 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3112,7 +3182,7 @@ msgstr "" " \n" " Zastarelo. Oglejte si `help declare'." -#: builtins.c:540 +#: builtins.c:543 #, fuzzy msgid "" "Define local variables.\n" @@ -3139,7 +3209,7 @@ msgstr "" " Vrne uspešno, razen če je predložena neveljavna možnost, pride\n" " do napake ali pa lupina ne izvaja funkcije." -#: builtins.c:557 +#: builtins.c:560 #, fuzzy msgid "" "Write arguments to the standard output.\n" @@ -3207,7 +3277,7 @@ msgstr "" " Stanje končanja:\n" " Vrne uspešno, razen če pride do napake pri pisanju." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3229,7 +3299,8 @@ msgstr "" " Stanje končanja:\n" " Vrne uspešno, razen če pride do napake pri pisanju." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3249,6 +3320,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3281,7 +3358,7 @@ msgstr "" " Stanje končanja:\n" " Vrne uspešno, razen če IME ni vgrajena lupina ali če pride do napake." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3300,7 +3377,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje končanja ali uspešno, če je ukaz prazen." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy msgid "" "Parse option arguments.\n" @@ -3379,7 +3456,7 @@ msgstr "" " Vrne uspešno, če je možnost najdena; neuspešno, če pride\n" " do konca možnosti ali do napake." -#: builtins.c:694 +#: builtins.c:702 #, fuzzy msgid "" "Replace the shell with the given command.\n" @@ -3419,7 +3496,7 @@ msgstr "" " Stanje končanja:\n" " Vrne uspešno, razen če UKAZ ni najden ali pride do napake preusmeritve." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3431,7 +3508,7 @@ msgstr "" " Konča lupino s stanjem N. Če je N izpuščen, se uporabi stanje\n" " končanja zadnjega izvršenega ukaza." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3444,7 +3521,8 @@ msgstr "" " Konča prijavno lupino s stanjem končanja N. Vrne napako, če se\n" " ne izvede v prijavni lupini." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3469,6 +3547,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3498,7 +3578,7 @@ msgstr "" " Stanje končanja:\n" " Vrne uspešno ali stanje izvedenega ukaza; ne-ničelno, če pride do napake." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3519,7 +3599,7 @@ msgstr "" " Stanje ukaza, postavljenega v ospredje, ali neuspešno, če se\n" " pojavi napaka." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3542,7 +3622,7 @@ msgstr "" " Vrne uspešno, razen če nadzor posla ni omogočen ali če pride\n" " do napake." -#: builtins.c:793 +#: builtins.c:803 #, fuzzy msgid "" "Remember or display program locations.\n" @@ -3585,7 +3665,7 @@ msgstr "" " Stanje končanja:\n" " Vrne uspešno, razen če IME ni najdeno ali če je dana neveljavna možnost." -#: builtins.c:818 +#: builtins.c:828 #, fuzzy msgid "" "Display information about builtin commands.\n" @@ -3626,7 +3706,7 @@ msgstr "" " Vrne uspešno, razen če VZOREC ni najden ali pa je dana neveljavna\n" " možnost." -#: builtins.c:842 +#: builtins.c:852 #, fuzzy msgid "" "Display or manipulate the history list.\n" @@ -3651,7 +3731,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3695,7 +3779,7 @@ msgstr "" " Vrne uspešno, razen če je podana neveljavna možnost ali če pride\n" " do napake." -#: builtins.c:879 +#: builtins.c:893 #, fuzzy msgid "" "Display status of jobs.\n" @@ -3740,7 +3824,7 @@ msgstr "" " Vrne uspešno, razen če je dana neveljavna možnost ali če pride do\n" " napake. Če se uporabi -x, vrne stanje končanja UKAZA." -#: builtins.c:906 +#: builtins.c:920 #, fuzzy msgid "" "Remove jobs from current shell.\n" @@ -3773,7 +3857,7 @@ msgstr "" " Vrne uspešno, razen če je dana neveljavna možnost ali če je dano\n" " DOLOČILO_POSLA." -#: builtins.c:925 +#: builtins.c:939 #, fuzzy msgid "" "Send a signal to a job.\n" @@ -3816,7 +3900,7 @@ msgstr "" " Vrne uspešno, razen če je dana neveljavna možnost ali če pride do\n" " napake." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3903,7 +3987,7 @@ msgstr "" " Stanje končanja\n" " Če zadnji ARG ovrednoti na 0, let vrne 1; sicer let vrne 0." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -3928,6 +4012,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3998,7 +4084,7 @@ msgstr "" " omejitev prekoračena ali če je dan neveljaven opisnik datotek kot\n" " argument v -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -4018,7 +4104,7 @@ msgstr "" " Stanje končanja\n" " Vrne N ali neuspešno, če lupina ne izvede funkcije ali skripta." -#: builtins.c:1055 +#: builtins.c:1071 #, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" @@ -4095,6 +4181,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4191,7 +4281,7 @@ msgstr "" " Stanje končanja\n" " Vrne uspešno, razen če je dana neveljavna možnost." -#: builtins.c:1140 +#: builtins.c:1160 #, fuzzy msgid "" "Unset values and attributes of shell variables and functions.\n" @@ -4230,7 +4320,7 @@ msgstr "" " Vrne uspešno, razen če je dana neveljavna možnost ali če je IME samo\n" " za branje." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4264,7 +4354,7 @@ msgstr "" " Vrne uspešno, razen če je dana neveljavna možnost ali če je\n" " neveljavno IME." -#: builtins.c:1181 +#: builtins.c:1201 #, fuzzy msgid "" "Mark shell variables as unchangeable.\n" @@ -4304,7 +4394,7 @@ msgstr "" " Vrne uspešno, razen če je dana neveljavna možnost ali če je\n" " neveljavno IME." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4322,7 +4412,7 @@ msgstr "" " Stanje končanja:\n" " Vrne uspešno, razen če je N negativen ali večji kot $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4346,15 +4436,18 @@ msgstr "" " Vrne stanje zadnjega izvršenega ukaza v IMENU_DATOTEKE; vrne\n" " neuspešno, če IMENA_DATOTEKE ni mogoče brati." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4372,7 +4465,7 @@ msgstr "" " Vrne uspešno, razen če nadzor posla ni omogočen ali če pride do\n" " napake." -#: builtins.c:1262 +#: builtins.c:1284 #, fuzzy msgid "" "Evaluate conditional expression.\n" @@ -4534,7 +4627,7 @@ msgstr "" " Vrne uspešno, če IZRAZ ovrednoti prav, neuspešno vrne, če IZRAZ \n" " ovrednoti napak ali če je dan neveljaven argument." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4546,7 +4639,7 @@ msgstr "" " To je sopomenka za vgrajeno lupino \"test\", toda zadnji argument\n" " mora biti dobesedni `]' za ujemanje z uklepajem `['." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4565,7 +4658,8 @@ msgstr "" " Stanje končanja:\n" " Vedno uspešno." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy msgid "" "Trap signals and other events.\n" " \n" @@ -4573,31 +4667,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4645,7 +4744,7 @@ msgstr "" " Vrne uspešno, razen če je SIGSPEC neveljaven ali je dana neveljavna " "možnost." -#: builtins.c:1401 +#: builtins.c:1430 #, fuzzy msgid "" "Display information about command type.\n" @@ -4703,7 +4802,7 @@ msgstr "" " Vrne uspešno, če so vsa IMENA najdena; vrne neuspešno, če katero\n" " ni najdeno." -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy msgid "" "Modify shell resource limits.\n" @@ -4746,9 +4845,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4796,7 +4896,7 @@ msgstr "" " Vrne uspešno, razen če je dana neveljavna možnost ali če pride do\n" " napake." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4830,7 +4930,7 @@ msgstr "" " Vrne uspešno, razen če je NAČIN neveljaven ali če je dana neveljavna\n" " možnost." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" @@ -4875,7 +4975,7 @@ msgstr "" " Vrne stanje ID-ja; vrne neuspešno, če je ID neveljaven ali če je dana\n" " neveljavna možnost." -#: builtins.c:1534 +#: builtins.c:1564 #, fuzzy msgid "" "Wait for process completion and return exit status.\n" @@ -4900,7 +5000,16 @@ msgstr "" " Vrne stanje ID-ja; neuspešno, če je ID neveljaven ali če je dana\n" " neveljavna možnost." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4915,15 +5024,15 @@ msgstr "" "Izvede ukaze za vsakega člana na seznamu.\n" " \n" " Zanka `for' izvede zaporedje ukazov za vsakega člana na seznamu\n" -" predmetov. Če `in BESEDE ...;' niso prisotna, se predvideva `in \"$@" -"\"'.\n" +" predmetov. Če `in BESEDE ...;' niso prisotna, se predvideva `in " +"\"$@\"'.\n" " Za vsak element v BESEDAH je IME nastavljeno temu predmetu in\n" " UKAZI so izvršeni.\n" " \n" " Stanje končanja:\n" " Vrne stanje zadnjega izvršenega ukaza." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4954,7 +5063,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje zadnjega izvršenega ukaza." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4991,7 +5100,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje zadnjega izvršenega ukaza." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -5020,7 +5129,7 @@ msgstr "" " Stanje končanja:\n" " Stanje končanja je stanje končanja CEVOVODA." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -5038,7 +5147,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje zadnjega izvršenega ukaza." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5072,7 +5181,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje zadnjega izvršenega ukaza." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5092,7 +5201,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje zadnjega izvršenega ukaza." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5112,7 +5221,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje zadnjega izvršenega ukaza." -#: builtins.c:1672 +#: builtins.c:1712 #, fuzzy msgid "" "Create a coprocess named NAME.\n" @@ -5135,7 +5244,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje končanja UKAZA." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5159,7 +5268,7 @@ msgstr "" " Stanje končanja:\n" " Vrne uspešno, razen če je IME samo za branje." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5177,7 +5286,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje zadnjega izvršenega ukaza." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5201,7 +5310,7 @@ msgstr "" " Stanje končanja:\n" " Vrne stanje obnovljenega posla." -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy msgid "" "Evaluate arithmetic expression.\n" @@ -5220,7 +5329,7 @@ msgstr "" " Stanje končanja:\n" " Vrne 1, če je IZRAZ enakovreden; sicer vrne 0." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5274,7 +5383,7 @@ msgstr "" " Stanje končanja:\n" " 0 ali 1, odvisno od vrednosti IZRAZA." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5378,7 +5487,7 @@ msgstr "" " HISTIGNORE\tZ dvopičjem ločen seznam vzorcev, ki so uporabljeni \n" " \t\tza odločanje, kateri ukazi naj se shranijo na seznam zgodovine.\n" -#: builtins.c:1822 +#: builtins.c:1862 #, fuzzy msgid "" "Add directories to stack.\n" @@ -5435,7 +5544,7 @@ msgstr "" " Vrne uspešno, razen če je predložen neveljaven argument ali če\n" " sprememba mape spodleti." -#: builtins.c:1856 +#: builtins.c:1896 #, fuzzy msgid "" "Remove directories from stack.\n" @@ -5486,7 +5595,7 @@ msgstr "" " Vrne uspešno, razen če je predložen neveljaven argument ali če\n" " sprememba mape spodleti." -#: builtins.c:1886 +#: builtins.c:1926 #, fuzzy msgid "" "Display directory stack.\n" @@ -5538,7 +5647,7 @@ msgstr "" " Stanje končanja:\n" " Vrne uspešno, razen če je dana neveljavna možnost ali če pride do napake." -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy msgid "" "Set and unset shell options.\n" @@ -5575,7 +5684,7 @@ msgstr "" " Vrne uspešno, če je IME_MOŽNOSTI omogočeno; neuspešno, če je\n" " dana neveljavna možnost ali če je IME_MOŽNOSTI onemogočeno." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5593,9 +5702,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5643,16 +5752,16 @@ msgstr "" "napake\n" " branja ali dodelitve." -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5699,14 +5808,19 @@ msgstr "" " Vrne uspešno, razen če je predložena neveljavna možnost ali če pride\n" " do napake." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5721,7 +5835,7 @@ msgstr "" " Vrne uspešno, razen če je predložena neveljavna možnost ali če pride\n" " do napake." -#: builtins.c:2019 +#: builtins.c:2062 #, fuzzy msgid "" "Modify or display completion options.\n" @@ -5779,7 +5893,7 @@ msgstr "" " Vrne uspešno, razen če je predložena neveljavna možnost ali pa IME\n" " nima določenega določila dopolnjevanja." -#: builtins.c:2050 +#: builtins.c:2093 #, fuzzy msgid "" "Read lines from the standard input into an indexed array variable.\n" @@ -5857,7 +5971,7 @@ msgstr "" " Vrne uspešno, razen če je dana neveljavna možnost oz. je POLJE samo\n" " za branje ali pa ni zabeleženo polje." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5867,6 +5981,36 @@ msgstr "" " \n" " Je sopomenka za `mapfile'." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Vrne vsebino trenutnega klica podprograma.\n" +#~ " \n" +#~ " Brez IZRAZA vrne \"$line $filename\". Z IZRAZOM vrne\n" +#~ " \"$line $subroutine $filename\"; ta dodaten podatek se lahko uporabi\n" +#~ " za zagotovitev sledenja sklada.\n" +#~ " \n" +#~ " Vrednost IZRAZA nakazuje, koliko okvirjev klicev mora nazaj\n" +#~ " pred trenutnega; zgornji okvir je okvir 0.\n" +#~ " \n" +#~ " Stanje končanja:\n" +#~ " Vrne 0, razen če lupina ne izvršuje funkcije lupine ali pa IZRAZ\n" +#~ " ni veljaven." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "opozorilo: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: neveljaven ključ povezanega polja" diff --git a/po/sr.gmo b/po/sr.gmo index 609b01835ca9701d70c85adb351e51d585f5edf1..56a7a1d8542cbd2ffe9fb5776c3e186ecb3dca07 100644 GIT binary patch delta 12641 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 delta 55419 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 diff --git a/po/sr.po b/po/sr.po index 63cabb302..42a421788 100644 --- a/po/sr.po +++ b/po/sr.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: bash-5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-08-22 00:19+0200\n" "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" "Language-Team: Serbian <(nothing)>\n" @@ -18,126 +18,128 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "лоша подскрипта низа" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: уклањам атрибут упуте назива" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: не могу да претворим пописани низ у придружив" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: не могу да доделим у не-бројевни попис" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: мора користити индекс приликом додељивања придруживог низа" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: не могу да направим: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "баш_изврши_јуникс_наредбу: не могу да нађем мапу кључа за наредбу" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: први не-празан знак није \"" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "нема затварајућег „%c“ у %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: недостаје раздвојник двотачке" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "„%s“: не могу да развежем у мапи тастера наредбе" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "ширење заграде: не могу да доделим меморију за „%s“" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "ширење заграде: нисам успео да доделим меморију за %u елемента" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "ширење заграде: нисам успео да доделим меморију за „%s“" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "„%s“: неисправан назив алијаса" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "уређивање реда није укључено" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "„%s“: неисправан назив мапе кључа" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: не могу да читам: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "„%s“: непознат назив функције" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "„%s“ није привезано ни за један кључ.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "„%s“ не може бити призвано путем" -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "„%s“: не могу да развежем" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "број петљи" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "једино има смисла у петљи „for“, „while“, или „until“" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -146,7 +148,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Даје садржај текућег позива подрутине.\n" " \n" @@ -155,351 +161,365 @@ msgstr "" " коришћен за обезбеђивање праћења спремника.\n" " \n" " Вредност ИЗРАЗА показује колико кадрова позива да се иде уназад пре\n" -" текућег; први кадар је кадар 0." +" текућег; први кадар је кадар 0.\n" +" \n" +" Излазно стање:\n" +" Даје 0 осим ако шкољка не извршава функцију шкољке или ИЗРАЗ\n" +" није исправан." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "„HOME“ није подешено" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "превише аргумената" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "ништаван директоријум" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "„OLDPWD“ није подешено" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "%d. ред:" -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "упозорење:" -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: употреба:" -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: опција захтева аргумент" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: потребан је бројевни аргумент" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: не постоји" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: неисправна опција" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: неисправан назив опције" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "„%s“: није исправан одредник" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "неисправан октални број" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "неисправан хексадецимални број" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "неисправан број" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: неисправна одредба сигнала" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "„%s“: није пиб или исправна одредба посла" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: променљива само за читање" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: не могу да доделим" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: „%s“ је ван опсега" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "аргумент" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "„%s“ је ван опсега" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: нема таквог посла" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: нема управљања послом" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "нема управљања послом" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: ограничено" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "ограничено" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: није уграђеност шкољке" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "грешка писања: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "грешка подешавања особина терминала: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "грешка добављања особина терминала: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: грешка довлачења текућег директоријума: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: нејасна одредба посла" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "помоћ није доступна у овом издању" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: није пописани низ" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: не могу да расподесим: „%s“ је само за читање" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: не могу да расподесим" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: неисправан назив радње" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: нема одредбе довршавања" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "упозорење: опција „-F“ можда неће радити како сте очекивали" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "упозорење: опција „-C“ можда неће радити како сте очекивали" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "тренутно не обавља функцију довршавања" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "може бити коришћено једино у функцији" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "не можете користити „-f“ да направите функције" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: функција само за читање" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: променљива упуте не може бити низ" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: самоупућивање променљиве упуте назива није дозвољено" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: кружна упута назива" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "%s: неисправан назив променљиве за упуту назива" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: не могу да уништим променљиве низа на овај начин" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: не могу да претворим придруживи низ у пописани" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: додела низа цитираног споја је застарела" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "променљиво учитавање није доступно" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "не могу да отворим дељени предмет „%s“: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "не могу да нађем „%s“ у дељеном предмету „%s“: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: динамичка уградња је већ учитана" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "функција учитавања за „%s“ није успела (%d): није учитано" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: није динамички учитано" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: не могу да обришем: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: је директоријум" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: није обична датотека" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: датотека је превелика" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: не могу да извршим бинарну датотеку" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: не могу да извршим: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "одјави\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "није шкољка пријављивања: користите „exit“" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Има заустављених послова.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Има покренутих послова.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "нема такве наредбе" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "одредба историјата" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: не могу да отворим привремену датотеку: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "текуће" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "посао „%d“ је започет без управљања послом" @@ -514,11 +534,11 @@ msgstr "%s: неисправна опција -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: опција захтева аргумент -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "хеширање је искључено" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: хеш табела је празна\n" @@ -545,15 +565,18 @@ msgstr "" #: builtins/help.def:185 #, 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:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: не могу да отворим: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -572,21 +595,31 @@ msgstr "" "Звездица (*) поред назива значи да је наредба искључена.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "не могу користити више од једног „-anrw“" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "положај историјата" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "празан назив променљиве низа" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: параметар је ништаван или није подешен" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: неисправна ознака времена" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: није успело ширење историјата" @@ -600,113 +633,113 @@ msgstr "%s: није успело „inlib“" msgid "no other options allowed with `-x'" msgstr "нису допуштене друге опције уз „-x“" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: аргументи морају бити процеси или ИБ-ови посла" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Непозната грешка" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "очекиван је израз" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: није пописани низ" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: неисправна одредба описника датотеке" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: неисправан описник датотеке: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: неисправан број реда" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: неисправно порекло низа" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: неисправна количина опозива" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "празан назив променљиве низа" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "потребна је подршка променљиве низа" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "„%s“: недостаје знак записа" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "„%c“: неисправна одредба записа времена" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "„%c“: неисправан знак записа" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "упозорење: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "проблем обраде записа: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "недостаје хексадецимална цифра за \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "недостаје цифра уникода за \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "нема другог директоријума" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: неисправан аргумент" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<нема текућег директоријума>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "празан спремник директоријума" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "попис спремника директоријума" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -721,10 +754,12 @@ 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" @@ -746,7 +781,7 @@ msgstr "" " -N\tПриказује н-ти унос почевши с десна на списку приказаном\n" "\t директоријумима када се призову без опција, почевши од нуле." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -792,7 +827,7 @@ msgstr "" " \n" " Уграђено „dirs“ приказује спремник директоријума." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -817,7 +852,8 @@ msgstr "" " \n" " Опције:\n" " -n\tПотискује нормалну замену директоријума приликом уклањања\n" -" \t директоријума из спремника, тако да се ради само са спремником.\n" +" \t директоријума из спремника, тако да се ради само са " +"спремником.\n" " \n" " Аргументи:\n" " +N\tУклања н-ти унос бројећи с лева на списку кога приказује\n" @@ -830,319 +866,331 @@ msgstr "" " \n" " Уграђено „dirs“ приказује спремник директоријума." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: неисправна одредба временског истека" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "грешка читања: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "могу једино да „испишем“ из функције или изворног списа" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "не могу истовремено да расподесим функцију и променљиву" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: није променљива низа" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: није функција" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: не могу да извезем" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "број помака" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "не могу истовремено да подесим и да расподесим опције шкољке" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: неисправан назив опције шкољке" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "потребан је аргумент назива датотеке" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: нисам пронашао датотеку" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "не могу да обуставим" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "не могу да обуставим шкољку пријављивања" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s је измењен у псеудоним „%s“\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "„%s“ је кључна реч шкољке\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s: је функција\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s: је нарочита уграђеност шкољке\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s: је функција\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s: јесте уграђеност шкољке\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "„%s“ јесте „%s“\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "„%s“ је хеширано (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: неисправан аргумент ограничења" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "„%c“: лоша наредба" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: не могу да добавим ограничење: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "ограничење" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: не могу да изменим ограничење: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "октални број" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "„%c“: неисправан оператер симболичког режима" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "„%c“: неисправан знак симболичког режима" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " ред " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "последња наредба: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Прекидам..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "ПОДАЦИ: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "упозорење ПРОЧИШЋАВАЊА:" -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "непозната грешка наредбе" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "лоша врста наредбе" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "лош спајач" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "лош скок" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: несвезана променљива" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aистекло је време чекајући на улаз: сам се одјављујем\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "не могу да преусмерим стандардни улаз из „/dev/null:“: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "ЗАПИСВРЕМЕНА: „%c“: неисправан знак записа" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "изврши_копроц: копроцес [%d:%s] још увек постоји" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "грешка спојке" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "процена: премашен је највећи ниво угнежђивања процене (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: премашен је највећи ниво угнежђивања извора (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: премашен је највећи ниво угнежђивања функције (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: ограничено: не могу да наведем / у називима наредби" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: нема такве наредбе" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: лош тумач" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: не могу да извршим: нисам нашао потребну датотеку" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: лош тумач" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: не могу да извршим бинарну датотеку: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "„%s“: јесте посебна уграђеност" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "не могу да удвостручим „fd %d“ у „fd %d“" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "премашен је ниво дубачења израза" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "недоток спремника дубачења" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "садржајна грешка у изразу" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "покушано је додељивање у не-променљиву" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "садржајна грешка у додели променљиве" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "дељење 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "грешка: лош симбол доделе израза" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "„:“ је очекивано за условни израз" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "изложилац је мањи од 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "одредник је очекиван након пре-увећања или пре-умањења" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "недостаје )" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "садржајна грешка: очекиван је операнд" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "садржајна грешка: неисправан аритметички оператор" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (симбол грешке је „%s“)" @@ -1159,7 +1207,7 @@ msgstr "неисправна константа целог броја" msgid "value too great for base" msgstr "вредност је превише велика за основу" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: грешка израза\n" @@ -1168,46 +1216,51 @@ msgstr "%s: грешка израза\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: не могу да приступим родитељском директоријуму" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "„%s“: јесте посебна уграђеност" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "не могу да поништим режим без-кашњења за фд „%d“" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "не могу да доделим нови описник датотеке за улаз баша из фд „%d“" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: већ постоји међумеморија за нови фд „%d“" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: „pgrp“ спојка" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "исцепљени пиб „%d“ се јавља у покренутом послу „%d“" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "бришем заустављени посао „%d“ са групом процеса %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: пиб %5ld (%s) је означен да је још жив" @@ -1217,137 +1270,137 @@ msgstr "add_process: пиб %5ld (%s) је означен да је још жи msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: нема таквог пиб-а" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Сигнал %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Урађен" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Заустављен" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Заустављен(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Покренут" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Урађен(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Изађи из „%d“" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Непознато стање" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(језгрени избачај)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "сетпгиб порода (%ld у %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: пиб %ld није пород ове шкољке" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Нема записа о процесу %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: посао „%d“ је заустављен" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: нема текућих послова" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: посао је завршио" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: посао „%dд је већ у позадини" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: укључујем „WNOHANG“ да избегнем неодређени блок" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: ред %d:" -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (језгрени избачај)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(„wd“ сада: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: није успело „getpgrp“" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: нема контроле посла у позадини" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: дисциплина реда" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "не могу да подесим групу процеса терминала (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "нема управљања послом у овој шкољци" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: тврдња није успела: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1356,376 +1409,390 @@ msgstr "" "\r\n" "malloc: %s:%d: тврдња је лоше изведена\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "непознато" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: блок на слободном списку је преписан" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: позвана са већ ослобођеним аргументом блока" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: позвана са недодељеним аргументом блока" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: откривена је недовољност тока; mh_n-бајтова је ван опсега" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: откривена је недовољност тока; „magic8“ је оштећено" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: почетна и крајња величина дела се разликују" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: позвана са недодељеним аргументом блока" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: откривена је недовољност тока; mh_n-бајтова је ван опсега" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: откривена је недовољност тока; „magic8“ је оштећено" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: почетна и крајња величина дела се разликују" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: табела доделе је пуна са „FIND_ALLOC“?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: „%p“ је већ у табели као додељено?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: „%p“ је већ у табели као слободно?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "неисправна основа" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: непознат домаћин" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: неисправна услуга" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: лоша одредба путање мреже" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "радње мреже нису подржане" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: не могу да изменим језик (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: не могу да изменим језик (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: не могу да изменим језик (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: не могу да изменим језик (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Имате пошту у $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Имате нову пошту у $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Пошта у „%s“ је прочитана\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "садржајна грешка: потребан је аритметички израз" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "садржајна грешка: није очекивано „;“" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "садржајна грешка: „((%s))“" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: лоша врста упутства „%d“" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "овде-документ у %d. реду је ограничен крајем-датотеке (тражи се „%s“)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: упутсво преусмерења „%d“ је ван опсега" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: величина_реда_улаза_шкољке (%zu) је премашила НАЈВЕЋУ_ВЕЛИЧИНУ (%lu): ред је скраћен" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: величина_реда_улаза_шкољке (%zu) је премашила НАЈВЕЋУ_ВЕЛИЧИНУ " +"(%lu): ред је скраћен" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "грешка писања: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "премашен је највећи број „овде-документ“" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "неочекивани крај датотеке приликом тражења поклапања „%c“" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "неочекивани крај датотеке приликом тражења „]]“" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "садржајна грешка у условном изразу: неочекивани симбол „%s“" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "садржајна грешка у условном изразу" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "неочекивани симбол „%s“, очекивана је )" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "очекивана је )" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "неочекивани аргумент „%s“ условном једночланом оператору" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "неочекивани аргумент условном једночланом оператору" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "неочекивани симбол „%s“, очекиван је условни двочлани оператор" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "очекиван је условни двочлани оператор" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "неочекивани аргумент „%s“ условном двочланом оператору" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "неочекивани аргумент условном двочланом оператору" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "неочекивани симбол „%c“ у условној наредби" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "неочекивани симбол „%s“ у условној наредби" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "неочекивани симбол „%d“ у условној наредби" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "садржајна грешка близу неочекиваног симбола „%s“" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "садржајна грешка близу „%s“" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "садржајна грешка: неочекивани крај датотеке" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "садржајна грешка: неочекивани крај датотеке" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "садржајна грешка" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Користите „%s“ да напустите шкољку.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "неочекивани крај датотеке приликом тражења поклапајуће )" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "довршавање: нисам нашао функцију „%s“" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: могуће понављање покушаја" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: НИШТАВНА ОДРЕДБА_ДОВРШАВАЊА" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: лош спајач „%d“" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: неисправан описник датотеке" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: НИШТАВАН указивач датотеке" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: „%c“: неисправан знак записа" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "описник датотеке је ван опсега" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: нејасно преусмерење" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: не могу да препишем постојећу датотеку" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: ограничено: не могу да преусмерим излаз" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "не могу да направим привремену датотеку за документ-овде: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: не могу да доделим фд променљивој" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "„/dev/(tcp|udp)/домаћин/прикључник“ није подржано без умрежавања" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "грешка преусмерења: не могу да удвостручим фд" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "не могу да нађем „/tmp“, направите га!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "„/tmp“ мора бити исправан назив директоријума" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "режим уредног исписа је занемарен у међудејственим шкољкама" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: неисправна опција" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "не могу да подесим јиб на %d: стварни јиб %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "не могу да подесим гиб на %d: стварни гиб %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "не могу да покренем прочишћавача; режим прочишћавања је искључен" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: је директоријум" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Немам назив!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "Гну баш, издање %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1734,49 +1801,49 @@ msgstr "" "Употреба:\t%s [Гнуова дуга опција] [опција] ...\n" " \t%s [Гнуова дуга опција] [опција] датотека-списа ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Гнуове дуге опције:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Опције шкољке:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t„-ilrsD“ или наредба „-c“ или -O шопц_опција\t\t(призивање само)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t„-%s“ или опција „-o“\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "Укуцајте „%s -c \"help set\"“ за више података о опцијама шкољке.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "Укуцајте „%s -c help“ за више података о уграђеним наредбама шкољке.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "Користите наредбу „bashbug“ да известите о грешкама.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Матична страница баша: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Општа помоћ коришћења Гну софтвера: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: неисправна операција" @@ -1946,282 +2013,305 @@ msgstr "Захтев за подацима" msgid "Unknown Signal #%d" msgstr "Непознат сигнал #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "лоша замена: нема затварајуће „%s“ у „%s“" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: не могу да доделим списак члану низа" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "не могу да начиним спојку за замену процеса" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "не могу да начиним пород за замену процеса" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "не могу да отворим именовану спојку „%s“ за читање" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "не могу да отворим именовану спојку „%s“ за писање" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "не могу да удвостручим именовану спојку „%s“ као фд %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "замена наредбе: занемарих ништавни бајт у улазу" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: не могу да удвостручим спојку као фд 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "не могу да начиним спојку за замену наредбе" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "не могу да начиним пород за замену наредбе" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: не могу да удвостручим спојку као фд 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: неисправан назив променљиве за упуту назива" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: неисправно посредно ширење" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: неисправан назив променљиве" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: параметар није подешен" +msgid "%s: bad substitution" +msgstr "%s: лоша замена" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: параметар је ништаван или није подешен" +msgid "%s: parameter not set" +msgstr "%s: параметар није подешен" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: израз подниске < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: лоша замена" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: не могу дадоделим на овај начин" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" msgstr "будућа издања шкољке ће приморати процену као аритметичку замену" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "лоша замена: нема затварајућег „`“ у „%s“" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "нема поклапања: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "очекиван је аргумент" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: очекиван је израз целог броја" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "очекивана је )" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "очекивана је ), а пронађена %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: очекиван је двочлани оператор" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: очекиван је једночлани оператор" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "недостаје ]" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "садржајна грешка: није очекивано „%s“" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "неисправан сигнални број" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "руковалац изузетком: премашен је највећи ниво руковаоца изузецима (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: лоша вредност у „trap_list[%d]“: %p" -#: trap.c:416 +#: trap.c:454 #, 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:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: лош сигнал %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "грешка увоза одреднице функције за „%s“" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "ниво шкољке (%d) је превисок, поново постављам на 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "премашен је највећи број „овде-документ“" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: нема садржаја функције на текућем досегу" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: вредности не може бити додељена вредност" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: не могу да наследим вредност из несагласне врсте" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: додељујем цео број упути назива" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variable: нема садржаја функције на текућем досегу" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s има ништавну ниску извоза" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "неисправан знак %d у нисци извоза за „%s“" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "нема = у нисци извоза за „%s“" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: глава променљивих шкољке није садржајност функције" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: нема садржаја општих променљивих" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: глава променљивих шкољке није привремени досег окружења" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: не могу да отворим као ДАТОТЕКУ" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: неисправна вредност за описник праћења датотеке" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: вреднсот сагласности је ван опсега" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Ауторска права © 2022. Фондација слободног софтвера, Доо." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Дозвола ОЈЛи3+: Гнуова ОЈЛ издање 3 или касније <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Дозвола ОЈЛи3+: Гнуова ОЈЛ издање 3 или касније <http://gnu.org/licenses/gpl." +"html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "Гну баш, издање %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "Ово је слободан софтвер; слободни сте да га мењате и да га расподељујете." +msgstr "" +"Ово је слободан софтвер; слободни сте да га мењате и да га расподељујете." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Нема НИКАКВЕ ГАРАНЦИЈЕ у оквирима дозвољеним законом." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: не могу да доделим %lu бајта (%lu бајта је додељено)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: не могу да доделим %lu бајта" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: не могу да доделим %lu бајта (%lu бајта је додељено)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: не могу да доделим %lu бајта" @@ -2235,8 +2325,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] назив [назив ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m мапа кључа] [-f датотека] [-q назив] [-u назив] [-r низ кључа] [-x низ кључа:наредба-шкољке] [низ кључа:функција-читањареда или наредба-читањареда]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m мапа кључа] [-f датотека] [-q назив] [-u назив] [-r низ " +"кључа] [-x низ кључа:наредба-шкољке] [низ кључа:функција-читањареда или " +"наредба-читањареда]" #: builtins.c:56 msgid "break [n]" @@ -2255,7 +2350,8 @@ msgid "caller [expr]" msgstr "caller [израз]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [дир]" #: builtins.c:68 @@ -2267,12 +2363,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] command [арг ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [назив[=вредност] ...] или declare -p [-aAfFilnrtux] [назив ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [назив[=вредност] ...] или declare -p [-" +"aAfFilnrtux] [назив ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] [-p] назив[=вредност] ... или typeset -p [-aAfFilnrtux] [назив ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] [-p] назив[=вредност] ... или typeset -p [-" +"aAfFilnrtux] [назив ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2331,8 +2435,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [шаблон ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d померај] [n] или history -anrw [датотека] или history -ps arg [аргумент...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d померај] [n] или history -anrw [датотека] или history -ps " +"arg [аргумент...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2343,16 +2451,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [одредба_посла ... | пид ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s одредба-сигнала | -n бр.сигнала | -sigspec] пиб | одредба_посла ... или kill -l [одредба_посла]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s одредба-сигнала | -n бр.сигнала | -sigspec] пиб | одредба_посла ... " +"или kill -l [одредба_посла]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let arg [аргумент ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a низ] [-d ограничи] [-i текст] [-n н-знак] [-N н-знак] [-p упит] [-t временски рок] [-u фд] [назив ...]" +#, fuzzy +msgid "" +"read [-Eers] [-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:140 msgid "return [n]" @@ -2399,7 +2516,8 @@ msgid "[ arg... ]" msgstr "[ арг... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[арг] одредба_сигнала ...]" #: builtins.c:168 @@ -2423,106 +2541,135 @@ msgid "wait [pid ...]" msgstr "wait [пиб ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for НАЗИВ [у РЕЧИМА ... ] ; do НАРЕДБЕ; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( израз1; израз2; израз3 )); do НАРЕДБЕ; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select НАЗИВ [у РЕЧИМА ... ;] do НАРЕДБЕ; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] спојни_ред" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case РЕЧ у [ШАБЛОН [| ШАБЛОН]...) НАРЕДБЕ ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if НАРЕДБЕ; then НАРЕДБЕ; [ elif НАРЕДБЕ; then НАРЕДБЕ; ]... [ else НАРЕДБЕ; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if НАРЕДБЕ; then НАРЕДБЕ; [ elif НАРЕДБЕ; then НАРЕДБЕ; ]... [ else " +"НАРЕДБЕ; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while НАРЕДБЕ; do НАРЕДБЕ-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until НАРЕДБЕ; do НАРЕДБЕ-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [НАЗИВ] наредба [преусмерења]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function name { НАРЕДБЕ ; } или name () { НАРЕДБЕ ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ НАРЕДБЕ ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( израз ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ израз ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables — Називи и значења неких променљивих шкољке" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | дир]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [називопције ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v променљива] format [аргументи]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o опција] [-A радња] [-G општапутања] [-W списакречи] [-F функција] [-C наредба] [-X путањауслова] [-P префикс] [-S суфикс] [назив ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o опција] [-A радња] [-G " +"општапутања] [-W списакречи] [-F функција] [-C наредба] [-X путањауслова] [-" +"P префикс] [-S суфикс] [назив ...]" -#: builtins.c:235 -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 +#, fuzzy +msgid "" +"compgen [-V varname] [-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:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o опција] [-DEI] [назив ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d раздвој] [-n број] [-O порекло] [-s број] [-t] [-u фд] [-C опозив] [-c количина] [низ]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d гранич] [-n број] [-O порекло] [-s број] [-t] [-u фд] [-C опозив] [-c количина] [низ]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d раздвој] [-n број] [-O порекло] [-s број] [-t] [-u фд] [-C " +"опозив] [-c количина] [низ]" -#: builtins.c:256 +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d гранич] [-n број] [-O порекло] [-s број] [-t] [-u фд] [-C " +"опозив] [-c количина] [низ]" + +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2537,7 +2684,8 @@ 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" @@ -2545,7 +2693,8 @@ msgstr "" " Без аргумената, „alias“ исписује списак псеудонима у поново\n" " употрбљивом облику „alias НАЗИВ=ВРЕДНОСТ“ на стандардном излазу.\n" " \n" -" У супротном, псеудоним се одређује за сваки НАЗИВ чија ВРЕДНОСТ је дата.\n" +" У супротном, псеудоним се одређује за сваки НАЗИВ чија ВРЕДНОСТ је " +"дата.\n" " Претходећи размак у ВРЕДНОСТИ доводи до тога да следећа реч бива\n" " проверена за заменом псеудонима када је псеудоним раширен.\n" " \n" @@ -2556,7 +2705,7 @@ msgstr "" " „alias“ даје тачност осим ако је достављен НАЗИВ за који ниједан\n" " псеудоним није одређен." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2572,7 +2721,7 @@ msgstr "" " \n" " Резултат је успешан осим ако НАЗИВ није постојећи псеудоним." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2584,25 +2733,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2616,33 +2770,49 @@ msgstr "" " аргумент: нпр., bind „\"\\C-x\\C-r\": re-read-init-file“.\n" " \n" " Опције:\n" -" -m мапа тастера Користи МАПУ_ТАСТЕРА као мапу тастера за трајање ове\n" -" наредбе. Прихватљиви називи мапе тастера су: „emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" -m мапа тастера Користи МАПУ_ТАСТЕРА као мапу тастера " +"за трајање ове\n" +" наредбе. Прихватљиви називи мапе " +"тастера су: „emacs,\n" +" emacs-standard, emacs-meta, emacs-" +"ctlx, vi, vi-move,\n" " vi-command, и vi-insert“.\n" " -l Исписује називе функција.\n" " -P Исписује називе функција и свезе.\n" -" -p Испсиује функције и свезе у облику који може бити поново\n" +" -p Испсиује функције и свезе у облику " +"који може бити поново\n" " коришћен као улаз.\n" -" -S Исписује низове тастера који призивају макрое и њихове вредности\n" -" -s Исписује низове тастера који призивају макрое и њихове вредности\n" -" у облику који може бити поново коришћен као улаз.\n" -" -V Исписује називе и вредности променљивих\n" -" -v Исписује називе и вредности променљивих у облику који може бити\n" +" -S Исписује низове тастера који призивају " +"макрое и њихове вредности\n" +" -s Исписује низове тастера који призивају " +"макрое и њихове вредности\n" +" у облику који може бити поново " +"коришћен као улаз.\n" +" -V Исписује називе и вредности " +"променљивих\n" +" -v Исписује називе и вредности " +"променљивих у облику који може бити\n" " поново коришћен као улаз.\n" -" -q назив-функције Пропитује о томе који тастери призивају именовану функцију.\n" -" -u назив-функције Развезује све тастере који су привезани за именовану функцију.\n" +" -q назив-функције Пропитује о томе који тастери " +"призивају именовану функцију.\n" +" -u назив-функције Развезује све тастере који су " +"привезани за именовану функцију.\n" " -r низ тастера Укалања свезу за НИЗ_ТАСТЕРА.\n" -" -f назив датотеке Чита свезе тастера из НАЗИВА_ДАТОТЕКЕ.\n" -" -x низ_тастера:наредба-шкољке Доводи до извршавања НАРЕДБЕ-ШКОЉКЕ приликом уноса\n" +" -f назив датотеке Чита свезе тастера из " +"НАЗИВА_ДАТОТЕКЕ.\n" +" -x низ_тастера:наредба-шкољке Доводи до извршавања НАРЕДБЕ-ШКОЉКЕ " +"приликом уноса\n" " \t\t\t НИЗА_ТАСТЕРА.\n" -" -X Исписује свезе низова тастера са -x и придружене наредбе у облику\n" -" који може бити поново коришћен као улаз.\n" +" -X Исписује свезе низова тастера са -x и " +"придружене наредбе у облику\n" +" који може бити поново коришћен као " +"улаз.\n" " \n" " Излазно стање:\n" -" „bind“ даје 0 осим ако није дата непозната опција или ако не дође до грешке." +" „bind“ даје 0 осим ако није дата непозната опција или ако не дође до " +"грешке." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2654,13 +2824,14 @@ msgid "" msgstr "" "Излазне петље „for“, „while“, или „until“.\n" " \n" -" Излази из петље FOR, WHILE или UNTIL. Ако је наведено N, слама N затварајућих\n" +" Излази из петље FOR, WHILE или UNTIL. Ако је наведено N, слама N " +"затварајућих\n" " петљи.\n" " \n" " Излазно стање:\n" " Излазно стање је 0 осим ако N није веће или једнако 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2678,13 +2849,14 @@ msgstr "" " Излазно стање:\n" " Излазно стање је 0 осим ако N није веће или једнако 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2694,13 +2866,15 @@ msgstr "" " \n" " Извршава УГРАЂЕНОСТ-ШКОЉКЕ са аргументима АРГ-и без обављања тражења\n" " наредбе. Ово је корисно када желите поново да примените уграђеност\n" -" шкољке као функцију шкољке, али морате да извршите уграђеност у функцији.\n" +" шкољке као функцију шкољке, али морате да извршите уграђеност у " +"функцији.\n" " \n" " Излазно стање:\n" -" Даје излазно стање УГРАЂЕНОСТИ-ШКОЉКЕ, или нетачност ако УГРАЂЕНОСТ-ШКОЉКЕ\n" +" Даје излазно стање УГРАЂЕНОСТИ-ШКОЉКЕ, или нетачност ако УГРАЂЕНОСТ-" +"ШКОЉКЕ\n" " није уграђеност шкољке." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2728,20 +2902,27 @@ msgstr "" " Даје 0 осим ако шкољка не извршава функцију шкољке или ИЗРАЗ\n" " није исправан." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2757,11 +2938,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Мења радни директоријум шкољке.\n" @@ -2769,9 +2952,12 @@ msgstr "" " Мења текући директоријум у ДИР. Основни ДИР је вредност променљиве\n" " шкољке „ЛИЧНО“.\n" " \n" -" Променљива „ЦДПУТАЊА“ одређује путању претраге за директоријум који садржи\n" -" ДИР. Заменски називи директоријума у ЦДПУТАЊИ су раздвојени двотачком (:).\n" -" Назив ништавног директоријума је исти као текући директоријум. Ако ДИР почиње\n" +" Променљива „ЦДПУТАЊА“ одређује путању претраге за директоријум који " +"садржи\n" +" ДИР. Заменски називи директоријума у ЦДПУТАЊИ су раздвојени двотачком " +"(:).\n" +" Назив ништавног директоријума је исти као текући директоријум. Ако ДИР " +"почиње\n" " косом цртом (/), тада се ЦДПУТАЊА не користи.\n" " \n" " Ако се не нађе директоријум, а опција шкољке „cdable_vars“ је подешена,\n" @@ -2782,10 +2968,12 @@ msgstr "" " -L\tприморава праћење симболичких веза: решава симболичке везе у\n" " ДИР-у након обраде примерака „..“\n" " -P\tкористи физичку структуру директоријума без праћења симболичких\n" -" веза: решава симболичке везе у ДИР-у пре обраде3 примерака „..“\n" +" веза: решава симболичке везе у ДИР-у пре обраде3 примерака " +"„..“\n" " -e\tако је достављена опција „-P“, а текући радни директоријум не\n" " може бити успешно одређен, излази са не-нултим стањем\n" -" -@ на системима који подржавају, представља датотеку са проширеним\n" +" -@ на системима који подржавају, представља датотеку са " +"проширеним\n" " особинама као директоријум који садржи особине датотеке\n" " \n" " Основно је да прати симболичке везе, као да је наведено „-L“.\n" @@ -2793,10 +2981,11 @@ msgstr "" " косу цтрицу или на почетак ДИР-а.\n" " \n" " Излазно стање:\n" -" Даје 0 ако је директоријум измењен, и ако је $PWD успешно подешено када је\n" +" Даје 0 ако је директоријум измењен, и ако је $PWD успешно подешено када " +"је\n" " коришћено „-P“; у супротном вредност различиту од нуле." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2824,7 +3013,7 @@ msgstr "" " Даје 0 осим ако није дата неисправна опција или текући директоријум\n" " не може бити прочитан." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2840,7 +3029,7 @@ msgstr "" " Излазно стање:\n" " Увек успешна." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2852,7 +3041,7 @@ msgstr "" " Излазно стање:\n" " Увек успешно." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2864,12 +3053,13 @@ msgstr "" " Излазно стање:\n" " Увек неуспешно." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2884,7 +3074,8 @@ msgstr "" "Извршава једноставну наредбу или приказује податке о наредбама.\n" " \n" " Покреће НАРЕДБУ са АРГУМЕНТИМА потискујући тражење функције шкољке, или\n" -" приказује податке о наведеним НАРЕДБАМА. Може да се користи за позивање\n" +" приказује податке о наведеним НАРЕДБАМА. Може да се користи за " +"позивање\n" " наредби на диску када постоји функција са истим називом.\n" " \n" " Опције:\n" @@ -2896,7 +3087,8 @@ msgstr "" " Излазно стање:\n" " Даје излазно стање НАРЕДБЕ, или неуспех ако се НАРЕДБА не пронађе." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2924,12 +3116,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2971,10 +3165,11 @@ msgstr "" " „local“. Опција „-g“ потискује ово понашање.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако се не достави неисправна опција или ако\n" +" Даје позитиван резултат осим ако се не достави неисправна опција или " +"ако\n" " не дође до грешке доделе променљиве." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2984,7 +3179,7 @@ msgstr "" " \n" " Синоним за „declare“. Погледајте „help declare“." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3007,14 +3202,16 @@ msgstr "" " функције у којима су одређене и уњиховим породима.\n" " \n" " Излазно стање:\n" -" Резултат је позитиван осим ако се не достави неисправна опција, ако не дође\n" +" Резултат је позитиван осим ако се не достави неисправна опција, ако не " +"дође\n" " до грешке додељивања променљиве, или ако шкољка не извршава функцију." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3038,9 +3235,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3068,19 +3267,23 @@ msgstr "" " \\t\tводоравни табулатор\n" " \\v\tусправни табулатор\n" " \\\\\tконтра коса црта\n" -" \\0nnn\tзнак чији АСКРИ код јесте „NNN“ (октално). „NNN“ може бити од\n" +" \\0nnn\tзнак чији АСКРИ код јесте „NNN“ (октално). „NNN“ може бити " +"од\n" " \t 0 до 3 окталне цифре\n" -" \\xHH\tосмобитни знак чија вредност јесте „HH“ (хексадецимално). „HH“\n" +" \\xHH\tосмобитни знак чија вредност јесте „HH“ (хексадецимално). " +"„HH“\n" " може бити једна или две хексадецималне цифре\n" -" \\uHHHH\tзнак Јуникода чија вредност јесте хексадецимална вредност „HHHH“.\n" +" \\uHHHH\tзнак Јуникода чија вредност јесте хексадецимална вредност " +"„HHHH“.\n" " \t\t„HHHH“ може имати једну до четири хексадецималне цифре.\n" " \\UHHHHHHHH знак Јуникода чија вредност јесте хексадецимална вредност\n" -" \t\t„HHHHHHHH“. „HHHHHHHH“ може бити једна од осам хексадецималних цифара.\n" +" \t\t„HHHHHHHH“. „HHHHHHHH“ може бити једна од осам хексадецималних " +"цифара.\n" " \n" " Излазно стање:\n" " Даје позитиван резултат осим ако не дође до грешке писања." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3102,7 +3305,8 @@ msgstr "" " Излазно стање:\n" " Даје позитиван резултат осим ако не дође до грешке писања." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3122,6 +3326,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3130,7 +3340,8 @@ msgid "" msgstr "" "Укључује и искључује уграђености шкољке.\n" " \n" -" Укључује и искључује уграђене наредбе шкољке. Искључивање вам омогућава\n" +" Укључује и искључује уграђене наредбе шкољке. Искључивање вам " +"омогућава\n" " да извршите наредбу диска која носи исти назив као уграђеност шкољке\n" " без коришћења пуне путање.\n" " \n" @@ -3150,13 +3361,15 @@ msgstr "" " шкољке, укуцајте „enable -n test“.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако НАЗИВ није уграђеност шкољке или ако не дође до грешке." +" Даје позитиван резултат осим ако НАЗИВ није уграђеност шкољке или ако не " +"дође до грешке." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3170,7 +3383,7 @@ msgstr "" " Излазно стање:\n" " Даје излазно стање наредбе или успех ако је наредба ништавна." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3231,28 +3444,36 @@ msgstr "" " о грешци. У овом режиму, поруке о грешкама се не исписују. Ако је\n" " виђена неисправна опција, поставља знак опцијепронађен у ОПЦАРГ-у. Ако\n" " захтевани аргумент није нађен, поставља двотачку „:“ у НАЗИВ и подешава\n" -" ОПЦАРГ на нађени знак опције. Ако „добави_опцију“ није у нечујном режиму,\n" +" ОПЦАРГ на нађени знак опције. Ако „добави_опцију“ није у нечујном " +"режиму,\n" " а виђена је неисправна опција, онда поставља знак питања „?“ у НАЗИВ и\n" -" расподешава ОПЦАРГ. Ако није пронађен захтевани аргумент, питање „?“ се\n" -" поставља у НАЗИВУ, ОПЦАРГ се расподешава, а исписује се порука о дијагнози.\n" -" \n" -" Ако променљива шкољке ОПЦГРЕШКА има вредност 0, „добави_опцију“ искључује\n" -" исписивање порука о грешкама, чак и ако први знак ОПЦНИСКЕ није двотачка.\n" +" расподешава ОПЦАРГ. Ако није пронађен захтевани аргумент, питање „?“ " +"се\n" +" поставља у НАЗИВУ, ОПЦАРГ се расподешава, а исписује се порука о " +"дијагнози.\n" +" \n" +" Ако променљива шкољке ОПЦГРЕШКА има вредност 0, „добави_опцију“ " +"искључује\n" +" исписивање порука о грешкама, чак и ако први знак ОПЦНИСКЕ није " +"двотачка.\n" " ОПЦГРЕШКА има вредност 1 по основи.\n" " \n" -" „Добави_опцију“ обично обрађује положајне параметре, али ако су аргументи\n" +" „Добави_опцију“ обично обрађује положајне параметре, али ако су " +"аргументи\n" " достављени као АРГ вредности, онда се они обрађују.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат ако је пронађена опција; неуспех ако се наиђе на\n" +" Даје позитиван резултат ако је пронађена опција; неуспех ако се наиђе " +"на\n" " крај опције или ако не дође до грешке." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3260,16 +3481,19 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Замењује шкољку датом наредбом.\n" " \n" " Извршава НАРЕДБУ, замењујући ову шкољку наведеним програмом. АРГУМЕНТИ\n" -" постају аргументи НАРЕДБЕ. Ако није наведена НАРЕДБА, свако преусмеравање\n" +" постају аргументи НАРЕДБЕ. Ако није наведена НАРЕДБА, свако " +"преусмеравање\n" " има дејства у текућој шкољци.\n" " \n" " Опције:\n" @@ -3277,13 +3501,15 @@ msgstr "" " -c\t\tизвршава НАРЕДБУ са празним окружењем\n" " -l\t\tпоставља цртицу у нултом аргументу НАРЕДБЕ\n" " \n" -" Ако наредба не може бити извршена, постоји не-међудејствена шкољка, осим\n" +" Ако наредба не може бити извршена, постоји не-међудејствена шкољка, " +"осим\n" " ако није подешена опција шкољке „execfail“.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако НАРЕДБА није нађена или ако не дође до грешке преусмеравања." +" Даје позитиван резултат осим ако НАРЕДБА није нађена или ако не дође до " +"грешке преусмеравања." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3295,29 +3521,34 @@ msgstr "" " Напушта шкољку са стањем N. Ако је N изостављено, излазно стање\n" " је оно последње извршене наредбе." -#: builtins.c:724 +#: builtins.c:732 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 "" "Напушта шкољку пријављивања.\n" " \n" -" Напушта шкољку пријављивања са излазним стањем N. Даје грешку ако није извршено\n" +" Напушта шкољку пријављивања са излазним стањем N. Даје грешку ако није " +"извршено\n" " у шкољци пријављивања." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3330,17 +3561,24 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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" -" „fc“ се користи за исписивање или уређивање и за поновно извршавање наредби\n" -" са списка историјата. ПРВИ и ПОСЛЕДЊИ могу бити бројеви који наводе опсег,\n" -" или ПРВИ може бити ниска, што значи да најсвежија наредба почиње том ниском.\n" +" „fc“ се користи за исписивање или уређивање и за поновно извршавање " +"наредби\n" +" са списка историјата. ПРВИ и ПОСЛЕДЊИ могу бити бројеви који наводе " +"опсег,\n" +" или ПРВИ може бити ниска, што значи да најсвежија наредба почиње том " +"ниском.\n" " \n" " Опције:\n" -" -e ЕНАЗИВ\t бира уређивача за коришћење. Основно је „FCEDIT“, затим „EDITOR“,\n" +" -e ЕНАЗИВ\t бира уређивача за коришћење. Основно је „FCEDIT“, затим " +"„EDITOR“,\n" " \t\t затим „vi“\n" " -l \t прави списак редова уместо да уређује\n" " -n\t изоставља бројеве редова приликом стварања списка\n" @@ -3354,9 +3592,10 @@ msgstr "" " последњу наредбу.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат или стање извршене наредбе; не-нулу ако дође до грешке." +" Даје позитиван резултат или стање извршене наредбе; не-нулу ако дође до " +"грешке." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3376,12 +3615,14 @@ msgstr "" " Излазно стање:\n" " Стање наредбе постављене у први план, или неуспех ако дође до грешке." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3389,19 +3630,22 @@ msgid "" msgstr "" "Премешта посао у позадину.\n" " \n" -" Поставља посао одређен сваком „JOB_SPEC“ у позадину, као да су покренути\n" +" Поставља посао одређен сваком „JOB_SPEC“ у позадину, као да су " +"покренути\n" " са &. Ако „JOB_SPEC“ није присутно, користи се шкољкино поимање\n" " текућег посла.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није укључено управљање послом или ако не дође до грешке." +" Даје позитиван резултат осим ако није укључено управљање послом или ако " +"не дође до грешке." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3436,9 +3680,10 @@ msgstr "" " \t\tзапамћених наредби.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако се НАЗИВ не нађе или ако је дата неисправна опција." +" Даје позитиван резултат осим ако се НАЗИВ не нађе или ако је дата " +"неисправна опција." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3456,7 +3701,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Приказује податке о уграђеним наредбама.\n" " \n" @@ -3474,9 +3720,11 @@ msgstr "" " ШАБЛОН\tШаблон који наводи тему помоћи\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако ШАБЛОН није пронађен или ако је дата неисправна опција." +" Даје позитиван резултат осим ако ШАБЛОН није пронађен или ако је дата " +"неисправна опција." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3500,11 +3748,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3519,7 +3772,8 @@ msgstr "" " -d померај брише унос историјата на померају ПОМЕРАЈ.\n" " \n" " -a\t додаје редове историјата из ове сесије у датотеку историјата\n" -" -n\t чита све редове историјата који нису прочитани из датотеке историјата\n" +" -n\t чита све редове историјата који нису прочитани из датотеке " +"историјата\n" " \t\tи додаје их на списак историјата\n" " -r\t чита датотеку историјата и додаје садржај на списак историјата\n" " -w\t пише текући историјат у датотеку историјата\n" @@ -3529,16 +3783,21 @@ msgstr "" " -s\t додаје АРГ-те на списак историјата као један унос\n" " \n" " Ако је дата ДАТОТЕКА, користи се као датотека историјата. У супротном,\n" -" ако ДАТОТЕКА_ИСТОРИЈАТА има вредност, она се користи, другачије „~/.bash_history“.\n" +" ако ДАТОТЕКА_ИСТОРИЈАТА има вредност, она се користи, другачије „~/." +"bash_history“.\n" " \n" -" Ако је променљива ЗАПИСВРЕМЕНАИСТОРИЈАТА подешена и није ништавна, користи се\n" -" њена вредност као ниска записа за „strftime(3)“ да исписше временску ознаку придружену\n" -" сваком приказаном уносу историјата. У супротном временске ознаке се не исписују.\n" +" Ако је променљива ЗАПИСВРЕМЕНАИСТОРИЈАТА подешена и није ништавна, " +"користи се\n" +" њена вредност као ниска записа за „strftime(3)“ да исписше временску " +"ознаку придружену\n" +" сваком приказаном уносу историјата. У супротном временске ознаке се не " +"исписују.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није дата неисправна опција или ако не дође до грешке." +" Даје позитиван резултат осим ако није дата неисправна опција или ако не " +"дође до грешке." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3574,14 +3833,17 @@ msgstr "" " -r\tограничава излаз на покренуте послове\n" " -s\tограничава излаз на заустављене послове\n" " \n" -" Ако је достављено „-x“, НАРЕДБА се покреће након што се све одредбе посла које\n" -" се јављају у АРГУМЕНТИМА замене ИБ-ом процеса тог вође групе процеса посла.\n" +" Ако је достављено „-x“, НАРЕДБА се покреће након што се све одредбе " +"посла које\n" +" се јављају у АРГУМЕНТИМА замене ИБ-ом процеса тог вође групе процеса " +"посла.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није дата неисправна опција или ако не дође до грешке.\n" +" Даје позитиван резултат осим ако није дата неисправна опција или ако не " +"дође до грешке.\n" " Ако се користи „-x“, даје излазно стање НАРЕДБЕ." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3604,14 +3866,16 @@ msgstr "" " \n" " Опције:\n" " -a\tуклања све послове ако није достављена ОДРЕДБАПОСЛА\n" -" -h\tозначава сваку ОДРЕДБУПОСЛА тако да СИГНАЛГОРЕ није послат послу ако\n" +" -h\tозначава сваку ОДРЕДБУПОСЛА тако да СИГНАЛГОРЕ није послат послу " +"ако\n" " \t шкољка прими СИГНАЛГОРЕ\n" " -r\tуклања само покренуте послове\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није дата неисправна опција или ОДРЕДБАПОСЛА." +" Даје позитиван резултат осим ако није дата неисправна опција или " +"ОДРЕДБАПОСЛА." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3636,7 +3900,8 @@ msgstr "" "Шаље сигнал послу.\n" " \n" " Шаље процесима препознатих ПИБ-ом или ОДРЕДБОМПОСЛА сигнал именован\n" -" ОДРЕДБОМСИГНАЛА или БРОЈЕМСИГНАЛА. Ако није присутно ни ОДРЕДБА_СИГНАЛА\n" +" ОДРЕДБОМСИГНАЛА или БРОЈЕМСИГНАЛА. Ако није присутно ни " +"ОДРЕДБА_СИГНАЛА\n" " ни БРОЈ_СИГНАЛА, подразумева се ТЕРМ_СИГНАЛА.\n" " \n" " Опције:\n" @@ -3646,21 +3911,25 @@ msgstr "" " \t се да су бројеви сигнала за које називи требају бити исписани\n" " -L\tсиноним за „-l“\n" " \n" -" „Kill“ је уграђеност шкољке из два разлога: омогућава да ИБ-ови послова буду\n" -" коришћени уместо ИБ-ова процеса, и омогућава убијање процеса ако је достигнуто\n" +" „Kill“ је уграђеност шкољке из два разлога: омогућава да ИБ-ови послова " +"буду\n" +" коришћени уместо ИБ-ова процеса, и омогућава убијање процеса ако је " +"достигнуто\n" " ограничење процеса које можете да направите.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није дата неисправна опција или ако не дође до грешке." +" Даје позитиван резултат осим ако није дата неисправна опција или ако не " +"дође до грешке." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3736,19 +4005,24 @@ msgstr "" " Излазно стање:\n" " Ако се последњи АРГ процени на 0, исписује 1; у супротном даје 0." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3756,11 +4030,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3778,8 +4055,10 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Чита ред са стандардног улаза и дели га на поља.\n" @@ -3788,10 +4067,12 @@ msgstr "" " ако је достављена опција „-u“. Ред је подељен на поља као при дељењу\n" " речи, а прва реч се додељује првом НАЗИВУ, друга реч другом НАЗИВУ,\n" " и тако редом, са сваком наредном речју додељеном последњем НАЗИВУ.\n" -" Само знаци пронађени у „$IFS“ се признају за граничнике речи. По основи,\n" +" Само знаци пронађени у „$IFS“ се признају за граничнике речи. По " +"основи,\n" " знак контра косе црте мења значење знакова граничника и новог реда.\n" " \n" -" Ако нису достављени НАЗИВИ, читани ред је смештен у променљивој ОДГОВОР.\n" +" Ако нису достављени НАЗИВИ, читани ред је смештен у променљивој " +"ОДГОВОР.\n" " \n" " Опције:\n" " -a низ\t додељује читање речи секвенцијалним индексима променљиве\n" @@ -3800,18 +4081,23 @@ msgstr "" " \t\t радије него нови ред\n" " -e\t користи читање реда да добије ред у међудејственој шкољци\n" " -i текст\t користи ТЕКСТ као почетни текст за читање реда\n" -" -n n-знака даје резултат након читања знакова N-ЗНАКОВА радије него да\n" +" -n n-знака даје резултат након читања знакова N-ЗНАКОВА радије него " +"да\n" " \t\t чека на нови ред, али поштује граничника ако је прочитано\n" " \t\t мање знакова од N-ЗНАКОВА пре граничника\n" -" -N n-знака даје резултат само након читања тачно знакова N-ЗНАКОВА, осим\n" +" -N n-знака даје резултат само након читања тачно знакова N-ЗНАКОВА, " +"осим\n" " \t\t ако не наиђе на крај датотеке или ако не истекне време читања,\n" " занемарујући све граничнике\n" -" -p упит\t исписује ниску УПИТ без пратећег новог реда пре покушаја читања\n" +" -p упит\t исписује ниску УПИТ без пратећег новог реда пре покушаја " +"читања\n" " -r\t не дозвољава контра косим цртама да преломе ниједан од знакова\n" " -s\t не оглашава улаз који долази са терминала\n" -" -t истек\t неуспех временског рока и давања резултата ако читав ред улаза\n" +" -t истек\t неуспех временског рока и давања резултата ако читав ред " +"улаза\n" " \t\t није прочитан за време од ВРЕМЕ_РОК секунде. Вредност променљиве\n" -" \t\t ВИСТЕКА је основни временски рок. ВРЕМЕНСКИ_РОК може бити разломак.\n" +" \t\t ВИСТЕКА је основни временски рок. ВРЕМЕНСКИ_РОК може бити " +"разломак.\n" " \t\t Ако је ВРЕМЕНСКИ_РОК 0, читање даје резултат одмах, без покушаја\n" " \t\t читања некох података, дајући позитиван резултат само ако је улаз\n" " \t\t доступан на наведеном описнику датотеке. Излазно стање је веће\n" @@ -3819,11 +4105,14 @@ msgstr "" " -u фд\t чита из описника датотеке ФД уместо са стандардног улаза\n" " \n" " Излазно стање:\n" -" Резултат је нула, осим ако се не наиђе на крај датотеке, не истекне време\n" -" читања (у том случају је већи од 128), ако не дође до грешке доделе променљиве,\n" -" или ако се не достави неисправан описник датотеке као аргумент опције „-u“." - -#: builtins.c:1042 +" Резултат је нула, осим ако се не наиђе на крај датотеке, не истекне " +"време\n" +" читања (у том случају је већи од 128), ако не дође до грешке доделе " +"променљиве,\n" +" или ако се не достави неисправан описник датотеке као аргумент опције „-" +"u“." + +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3843,7 +4132,8 @@ msgstr "" " Излазно стање:\n" " Даје N, или неуспех ако шкољка не извршава функцију или спис." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3886,7 +4176,8 @@ 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" @@ -3910,13 +4201,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3965,18 +4261,24 @@ msgstr "" " nounset исто као -u\n" " onecmd исто као -t\n" " physical исто као -P\n" -" pipefail вредност резултата спојнице јесте стање последње наредбе\n" -" за прекид са не-нултим стањем, или са нулом ако ниједна\n" +" pipefail вредност резултата спојнице јесте стање последње " +"наредбе\n" +" за прекид са не-нултим стањем, или са нулом ако " +"ниједна\n" " наредба није завршила са не-нултим стањем\n" -" posix мења понашање баша где се основна радња разликује\n" +" posix мења понашање баша где се основна радња " +"разликује\n" " од стандарда Посикса да би одговарала стандарду\n" " privileged исто као -p\n" " verbose исто као -v\n" " vi користи сучеље уређивања реда у стилу вија\n" " xtrace исто као -x\n" -" -p Укључено кад год се ибови стварног и ефективног корисника не подударају.\n" -" Искључује обраду датотеке „$ENV“ и увоз функција шкољке. Искључивање ове\n" -" опције доводи до тога да ефективни јиб и гиб буду подешени на стварни\n" +" -p Укључено кад год се ибови стварног и ефективног корисника не " +"подударају.\n" +" Искључује обраду датотеке „$ENV“ и увоз функција шкољке. " +"Искључивање ове\n" +" опције доводи до тога да ефективни јиб и гиб буду подешени на " +"стварни\n" " јиб и гиб.\n" " -t Излази након читања и извршавања једне наредбе.\n" " -u Сматра променљиве расподешавања за грешку приликом замењивања.\n" @@ -3990,7 +4292,8 @@ msgstr "" " по основи када је шкољка међудејствена.\n" " -P Ако је подешено, не решава симболичке везе приликом извршавања\n" " наредби као што је „cd“ која мења текући директоријум.\n" -" -T Ако је подешено, хватања ПРОЧИШЋАВАЊА и РЕЗУЛТАТА се наслеђују функцијама шкољке.\n" +" -T Ако је подешено, хватања ПРОЧИШЋАВАЊА и РЕЗУЛТАТА се наслеђују " +"функцијама шкољке.\n" " -- Додељује све преостале аргументе положајним параметрима.\n" " Ако нема преосталих аргумената, положајни параметри се\n" " расподешавају.\n" @@ -4006,7 +4309,7 @@ msgstr "" " Излазно стање:\n" " Даје позитиван резултат осим ако није дата неисправна опција." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4018,7 +4321,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4036,20 +4340,23 @@ msgstr "" " -n\tсматра сваки НАЗИВ као упуту назива и расподешава\n" " \t саму променљиву радије него упуте променљиве\n" " \n" -" Без опција, „unset“ прво покушава да расподеси променљиву, а ако то не успе,\n" +" Без опција, „unset“ прво покушава да расподеси променљиву, а ако то не " +"успе,\n" " покушава да расподеси функцију.\n" " \n" " Неке променљиве не могу бити расподешене; видите такође „readonly“.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није дата неисправна опција или ако је НАЗИВ само за читање." +" Даје позитиван резултат осим ако није дата неисправна опција или ако је " +"НАЗИВ само за читање." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4074,9 +4381,10 @@ msgstr "" " Аргумент „--“ искључује даљу обраду опције.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако је дата неисправна опција или је НАЗИВ неисправан." +" Даје позитиван резултат осим ако је дата неисправна опција или је НАЗИВ " +"неисправан." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4098,23 +4406,27 @@ msgid "" msgstr "" "Означава променљиве шкољке непроменљивим.\n" " \n" -" Означава сваки НАЗИВ као само за читање; вредности тих НАЗИВА не могу бити\n" -" измењене подсеквенционалним додељивањем. Ако је достављена ВРЕДНОСТ, додељује\n" +" Означава сваки НАЗИВ као само за читање; вредности тих НАЗИВА не могу " +"бити\n" +" измењене подсеквенционалним додељивањем. Ако је достављена ВРЕДНОСТ, " +"додељује\n" " ВРЕДНОСТ пре него ли јеозначи само за читање.\n" " \n" " Опције:\n" " -a\tупућује на променљиве пописивог низа\n" " -A\tупућује на променљиве придруживог низа\n" " -f\tупућује на функције шкољке\n" -" -p\tприказује списак свих променљивих и функција само за читање, зависно\n" +" -p\tприказује списак свих променљивих и функција само за читање, " +"зависно\n" " од тога да ли је опција „-f“ дата или није\n" " \n" " Аргумент „--“ искључује даље обрађивање опције.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није дата неисправна опција или ако је НАЗИВ неисправан." +" Даје позитиван резултат осим ако није дата неисправна опција или ако је " +"НАЗИВ неисправан." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4132,7 +4444,7 @@ msgstr "" " Излазно стање:\n" " Резултати су успешни осим ако N није негативно иливеће од $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4156,15 +4468,18 @@ msgstr "" " Даје стање последње извршене наредбе у ДАТОТЕЦИ; не успева\n" " ако назив ДАТОТЕКЕ не може бити прочитан." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4178,9 +4493,10 @@ msgstr "" " -f\tприморава обустављање, чак и ако је шкољка пријављивања\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није укључено управљање послом или ако не дође до грешке." +" Даје позитиван резултат осим ако није укључено управљање послом или ако " +"не дође до грешке." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4214,7 +4530,8 @@ 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" @@ -4235,7 +4552,8 @@ 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" @@ -4277,7 +4595,8 @@ msgstr "" " -c ДАТОТЕКА Тачно ако је датотека посебног знака.\n" " -d ДАТОТЕКА Тачно ако је датотека директоријум.\n" " -e ДАТОТЕКА Тачно ако датотека постоји.\n" -" -f ДАТОТЕКА Тачно ако датотека постоји и ако је обична датотека.\n" +" -f ДАТОТЕКА Тачно ако датотека постоји и ако је обична " +"датотека.\n" " -g ДАТОТЕКА Тачно ако је датотека подеси-иб-групе.\n" " -h ДАТОТЕКА Тачно ако је датотека симболичка веза.\n" " -L ДАТОТЕКА Тачно ако је датотека симболичка веза.\n" @@ -4291,14 +4610,18 @@ msgstr "" " -w ДАТОТЕКА Тачно ако у датотеку можете ви да пишете.\n" " -x ДАТОТЕКА Тачно ако датотеку можете ви да извршите.\n" " -O ДАТОТЕКА Тачно ако је датотека заправо у вашем власништву.\n" -" -G ДАТОТЕКА Тачно ако је датотека заправо у власништву ваше групе.\n" -" -N ДАТОТЕКА Тачно ако је датотека измењена након последњег читања.\n" +" -G ДАТОТЕКА Тачно ако је датотека заправо у власништву ваше " +"групе.\n" +" -N ДАТОТЕКА Тачно ако је датотека измењена након последњег " +"читања.\n" " \n" -" ДАТОТЕКА1 -nt ДАТОТЕКА2 Тачно ако је датотека1 новија од датотеке2 (према датуму измене).\n" +" ДАТОТЕКА1 -nt ДАТОТЕКА2 Тачно ако је датотека1 новија од датотеке2 " +"(према датуму измене).\n" " \n" " ДАТОТЕКА1 -ot ДАТОТЕКА2 Тачно ако је датотека1 старија од датотеке2.\n" " \n" -" ДАТОТЕКА1 -ef ДАТОТЕКА2 Тачно ако је датотека1 чврста веза до датотеке2.\n" +" ДАТОТЕКА1 -ef ДАТОТЕКА2 Тачно ако је датотека1 чврста веза до " +"датотеке2.\n" " \n" " Оператори ниске:\n" " \n" @@ -4309,29 +4632,35 @@ msgstr "" " \n" " НИСКА1 = НИСКА2 Тачно ако су ниске једнаке.\n" " НИСКА1 != НИСКА2 Тачно ако ниске нису једнаке.\n" -" НИСКА1 < НИСКА2 Тачно ако НИСКА1 долази пре НИСКЕ2 лексикографски.\n" -" НИСКА1 > НИСКА2 Тачно ако НИСКА1 долази после НИСКЕ2 лексикографски.\n" +" НИСКА1 < НИСКА2 Тачно ако НИСКА1 долази пре НИСКЕ2 " +"лексикографски.\n" +" НИСКА1 > НИСКА2 Тачно ако НИСКА1 долази после НИСКЕ2 " +"лексикографски.\n" " \n" " Остали оператори:\n" " \n" " -o ОПЦИЈА Тачно ако је опција шкољке ОПЦИЈА укључена.\n" " -v ПРОМ Тачно ако је променљива шкољке ПРОМ подешена\n" -" -R ПРОМ Тачно ако је променљива шкољке ПРОМ подешена и ако је упута назива.\n" +" -R ПРОМ Тачно ако је променљива шкољке ПРОМ подешена и ако " +"је упута назива.\n" " ! ИЗРАЗ Тачно ако је израз нетачан.\n" " ИЗРАЗ1 -a ИЗРАЗ2 Тачно ако је тачан и израз1 И израз2.\n" " ИЗРАЗ1 -o ИЗРАЗ2 Тачно ако је тачан или израз1 ИЛИ израз2.\n" " \n" -" арг1 ОП арг2 Аритметичка проба. ОП је једно од следећег: -eq, -ne,\n" +" арг1 ОП арг2 Аритметичка проба. ОП је једно од следећег: -eq, -" +"ne,\n" " -lt, -le, -gt, or -ge.\n" " \n" -" Аритметички двочлани оператори дају тачно ако је АРГ1 једнак, није-једнак,\n" +" Аритметички двочлани оператори дају тачно ако је АРГ1 једнак, није-" +"једнак,\n" " мањи-од, мањи-од-или-једнак, већи-од, или већи-од-или-једнак са АРГ2.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат ако се ИЗРАЗ процени на тачно; неуспех ако се ИЗРАЗ процени\n" +" Даје позитиван резултат ако се ИЗРАЗ процени на тачно; неуспех ако се " +"ИЗРАЗ процени\n" " на нетачно или ако је дат неисправан аргумент." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4343,11 +4672,12 @@ msgstr "" " Ово је синоним за уграђеност „test“, али последњи аргумент мора\n" " бити дословна ], да поклопи отворену [." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4361,39 +4691,54 @@ msgstr "" " Излазно стање:\n" " Увек успешно." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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" @@ -4403,31 +4748,39 @@ msgstr "" " АРГ је наредба за читање и извршавање када шкољка прими ОДРЕДБУ_СИГНАЛА\n" " сигнала. Ако АРГ недостаје (а достављена је једна ОДРЕДБА_СИГНАЛА) или\n" " „-“, сваки наведени сигнал се враћа на првобитну вредност. Ако је АРГ\n" -" ништавна ниска свака ОДРЕДБА_СИГНАЛА се занемарује од стране шкољке и од\n" +" ништавна ниска свака ОДРЕДБА_СИГНАЛА се занемарује од стране шкољке и " +"од\n" " наредби које призива.\n" " \n" " Ако је ОДРЕДБА_СИГНАЛА ИЗАЂИ (0) АРГ се извршава при изласку из шкољке.\n" " Ако је ОДРЕДБА_СИГНАЛА ПРОЧИСТИ, АРГ се извршава пре сваке једноставне\n" -" наредбе. Ако је ОДРЕДБА_СИГНАЛА ВРАТИ, АРГ се извршава сваки пут када се\n" -" заврши извршавање функције шкољке или списа покренутих . или уграђености\n" -" извора. ОДРЕДБА_СИГНАЛА или ГРЕШКА значи извршавање АРГ-а сваки пут када\n" -" би неуспех наредбе довео до изласка шкољке када је укључена опција „-e“.\n" -" \n" -" Ако нису достављени аргументи, „trap“ исписује списак наредби придружених\n" +" наредбе. Ако је ОДРЕДБА_СИГНАЛА ВРАТИ, АРГ се извршава сваки пут када " +"се\n" +" заврши извршавање функције шкољке или списа покренутих . или " +"уграђености\n" +" извора. ОДРЕДБА_СИГНАЛА или ГРЕШКА значи извршавање АРГ-а сваки пут " +"када\n" +" би неуспех наредбе довео до изласка шкољке када је укључена опција „-" +"e“.\n" +" \n" +" Ако нису достављени аргументи, „trap“ исписује списак наредби " +"придружених\n" " сваком сигналу.\n" " \n" " Опције:\n" " -l\tисписује списак назива сигнала и њихових одговарајућих бројева\n" " -p\tприказује наредбе хватања придружене свакој ОДРЕДБИ_СИГНАЛА\n" " \n" -" Свака ОДРЕДБА_СИГНАЛА је или назив сигнала у <signal.h> или број сигнала.\n" +" Свака ОДРЕДБА_СИГНАЛА је или назив сигнала у <signal.h> или број " +"сигнала.\n" " Називи сигнала нису осетљиви на величину слова а префикс СИГ је опција.\n" " Сигнал може бити послат шкољци помоћу „kill -signal $$“.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим за неисправну ОДРЕДБА_СИГНАЛА или за неисправну опцију." +" Даје позитиван резултат осим за неисправну ОДРЕДБА_СИГНАЛА или за " +"неисправну опцију." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4453,7 +4806,8 @@ 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" @@ -4465,27 +4819,34 @@ msgstr "" " \t укључује псеудониме, уграђености, и функције, ако и само ако\n" " \t опција „-p“ није такође коришћена\n" " -f\tпотискује тражење функције шкољке\n" -" -P\tприморава претрагу ПУТАЊЕ за сваким НАЗИВОМ, чак и ако је псеудоним,\n" -" \t уграђеност, или функција, и враћа назив датотеке диска која ће бити\n" +" -P\tприморава претрагу ПУТАЊЕ за сваким НАЗИВОМ, чак и ако је " +"псеудоним,\n" +" \t уграђеност, или функција, и враћа назив датотеке диска која ће " +"бити\n" " \t извршена\n" " -p\tдаје или назив датотеке диска која ће бити извршена, или ништа\n" " \t ако „type -t НАЗИВ“ неће дати „датотеку“.\n" " -t\tисписује једну реч која је једна од следећих: „alias“, „keyword“,\n" -" \t „function“, „builtin“, „file“ или „“, ако је НАЗИВ псеудоним, реч\n" -" \t резервисана шкољком, функција шкољке, уграђеност шкољке, датотека диска,\n" +" \t „function“, „builtin“, „file“ или „“, ако је НАЗИВ псеудоним, " +"реч\n" +" \t резервисана шкољком, функција шкољке, уграђеност шкољке, " +"датотека диска,\n" " или ако није пронађена\n" " \n" " Аргументи:\n" " НАЗИВ\tНазив наредбе за тумачење.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат ако су пронађени сви НАЗИВИ; неуспех ако ниједан није пронађен." +" Даје позитиван резултат ако су пронађени сви НАЗИВИ; неуспех ако ниједан " +"није пронађен." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4522,9 +4883,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4557,7 +4919,8 @@ msgstr "" " -v\tвеличина виртуелне меморије\n" " -x\tнајвећи број закључавања датотеке\n" " -P\tнајвећи број псеудотерминала\n" -" -R\tнајвеће време за које процес у реалном времену може да ради пре блокирања\n" +" -R\tнајвеће време за које процес у реалном времену може да ради пре " +"блокирања\n" " -T\tнајвећи број нити\n" " \n" " Нису све опције доступне на свим платформама.\n" @@ -4568,14 +4931,16 @@ msgstr "" " У супротном, тренутна вредност наведеног изворишта се исписује. Ако\n" " није дата ниједна опција, онда се подразумева „-f“.\n" " \n" -" Вредности су у 1024-битном повећавању, изузев за „-t“ која је у секундама,\n" +" Вредности су у 1024-битном повећавању, изузев за „-t“ која је у " +"секундама,\n" " „-p“ која се повећава за 512 бајта, и „-u“ која је произвољан број\n" " процеса.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако се не достави неисправна опција или ако не дође до грешке." +" Даје позитиван резултат осим ако се не достави неисправна опција или ако " +"не дође до грешке." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4601,29 +4966,35 @@ msgstr "" " симболичка ниска режима као она коју прихвата „chmod(1)“.\n" " \n" " Опције:\n" -" -p\tако је РЕЖИМ изостављен, исписује у облику који може бити поново коришћен као улаз\n" +" -p\tако је РЕЖИМ изостављен, исписује у облику који може бити поново " +"коришћен као улаз\n" " -S\tчини излаз симболичким; у супротном излаз је октални број\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако је РЕЖИМ неисправан или ако је дата неисправна опција." +" Даје позитиван резултат осим ако је РЕЖИМ неисправан или ако је дата " +"неисправна опција." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4641,46 +5012,65 @@ msgstr "" " дат, чека на све тренутно радне потпроцесе, а излазно стање је нула.\n" " Ако је ИБ одредба посла, чека на све процесе у тој спојници посла.\n" " \n" -" Ако је достављена опција „-n“, чека на појединачни посао са списка ИБ-ова,\n" -" или, ако ИБ-ови нису достављени, на следећи посао да заврши и даје његово\n" +" Ако је достављена опција „-n“, чека на појединачни посао са списка ИБ-" +"ова,\n" +" или, ако ИБ-ови нису достављени, на следећи посао да заврши и даје " +"његово\n" " излазно стање.\n" " \n" " Ако је достављена опција „-p, процес или одредник посла за посао\n" " за који је дато излазно стање се додељује променљивој ПРОМ\n" -" именованој аргументом опције. Променљива ће бити на почетку непостављена,\n" -" пре неког додељивања. Ово је корисно само када је достављена опција „-n“.\n" +" именованој аргументом опције. Променљива ће бити на почетку " +"непостављена,\n" +" пре неког додељивања. Ово је корисно само када је достављена опција „-" +"n“.\n" " \n" " Ако је достављена опција „-f“, а контрола посла је укључена, чека на\n" " наведени ИБ да оконча, уместо да чека на њега да промени статус.\n" " \n" " Излазно стање:\n" " Исписује стање последњег ИБ-а; неуспех ако је ИБ неисправан или ако је\n" -" дата неисправна опција, или ако је достављено „-n“ а шкољка нема „unwaited-for“\n" +" дата неисправна опција, или ако је достављено „-n“ а шкољка нема " +"„unwaited-for“\n" " пород." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Чека на довршавање процеса и даје излазно стање.\n" " \n" -" Чека на сваки процес наведен ПИБ-ом и извештава о његовом излазном стању.\n" -" Ако ПИБ ниије дат, чека на све тренутно радне потпроцесе, а враћено стање\n" +" Чека на сваки процес наведен ПИБ-ом и извештава о његовом излазном " +"стању.\n" +" Ако ПИБ ниије дат, чека на све тренутно радне потпроцесе, а враћено " +"стање\n" " је нула. ПИБ мора бити ИБ процеса.\n" " \n" " Излазно стање:\n" -" Исписује стање последњег ПИБ-а; неуспех ако је ПИБ неисправан или ако је дата\n" +" Исписује стање последњег ПИБ-а; неуспех ако је ПИБ неисправан или ако је " +"дата\n" " неисправна опција." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4702,7 +5092,7 @@ msgstr "" " Излазно стање:\n" " Исписује стање последње извршене наредбе." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4726,13 +5116,14 @@ msgstr "" " \t\tНАРЕДБЕ\n" " \t\t(( ИЗРАЗ3 ))\n" " \tdone\n" -" ИЗРАЗ1, ИЗРАЗ2, и ИЗРАЗ3 јесу аритметички изрази. Ако је изостављен неки израз,\n" +" ИЗРАЗ1, ИЗРАЗ2, и ИЗРАЗ3 јесу аритметички изрази. Ако је изостављен " +"неки израз,\n" " понаша се као да се процењује на 1.\n" " \n" " Излазно стање:\n" " Исписује стање последње извршене наредбе." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4768,7 +5159,7 @@ msgstr "" " Излазно стање:\n" " Исписује стање последње извршене наредбе." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4797,7 +5188,7 @@ msgstr "" " Излазно стање:\n" " Стање резултата јесте стање резултата СПОЈНОГРЕДА." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4815,16 +5206,21 @@ msgstr "" " Излазно стање:\n" " Исписује стање последње извршене наредбе." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4832,21 +5228,28 @@ msgid "" msgstr "" "Извршава наредбе на основу условности.\n" " \n" -" Извршава се списак „if НАРЕДБЕ“. Ако је његово излазно стање нула, тада се\n" -" извршава списак „then НАРЕДБЕ“. У супротном, сваки списак „elif НАРЕДБЕ“\n" -" се извршава на смену, и ако је његово излазно стање нула, одговарајући списак\n" -" „then НАРЕДБЕ“ се извршава и наредба „if“ се завршава. У супротном, извршава\n" -" се списак „else НАРЕДБЕ“, ако постоји. Излазно стање читаве конструкције је\n" -" излазно стање последње извршене наредбе, или нула ако нема испробаног услова.\n" +" Извршава се списак „if НАРЕДБЕ“. Ако је његово излазно стање нула, тада " +"се\n" +" извршава списак „then НАРЕДБЕ“. У супротном, сваки списак „elif " +"НАРЕДБЕ“\n" +" се извршава на смену, и ако је његово излазно стање нула, одговарајући " +"списак\n" +" „then НАРЕДБЕ“ се извршава и наредба „if“ се завршава. У супротном, " +"извршава\n" +" се списак „else НАРЕДБЕ“, ако постоји. Излазно стање читаве " +"конструкције је\n" +" излазно стање последње извршене наредбе, или нула ако нема испробаног " +"услова.\n" " \n" " Излазно стање:\n" " Исписује стање последње извршене наредбе." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4860,11 +5263,12 @@ msgstr "" " Излазно стање:\n" " Исписује стање последње извршене наредбе." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4878,7 +5282,7 @@ msgstr "" " Излазно стање:\n" " Исписује стање последње извршене наредбе." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4900,12 +5304,13 @@ msgstr "" " Излазно стање:\n" " Наредба копроцеса даје излазно стање 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4914,15 +5319,18 @@ msgid "" msgstr "" "Одређује функцију шкољке.\n" " \n" -" Ствара функцију шкољке под називом НАЗИВ. Када се призове као једна наредба,\n" -" НАЗИВ покреће НАРЕДБЕ у контексту шкољке позивања. Када се призове НАЗИВ,\n" -" аргументи се прослеђују функцији као $1...$n, а назив функције се налази у\n" +" Ствара функцију шкољке под називом НАЗИВ. Када се призове као једна " +"наредба,\n" +" НАЗИВ покреће НАРЕДБЕ у контексту шкољке позивања. Када се призове " +"НАЗИВ,\n" +" аргументи се прослеђују функцији као $1...$n, а назив функције се налази " +"у\n" " $НАЗИВУ_ФУНКЦИЈЕ.\n" " \n" " Излазно стање:\n" " Даје позитиван резултат осим ако је НАЗИВ само за читање." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4940,7 +5348,7 @@ msgstr "" " Излазно стање:\n" " Исписује стање последње извршене наредбе." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4956,14 +5364,15 @@ msgstr "" "Наставља посао у првом плану.\n" " \n" " Исто као и аргумент ОДРЕДБА_ПОСЛА у наредби „fg“. Наставља заустављени\n" -" или посао у позадини. ОДРЕДБА_ПОСЛА може да наведе назив посла или број\n" +" или посао у позадини. ОДРЕДБА_ПОСЛА може да наведе назив посла или " +"број\n" " посла. Пропративши ОДРЕДБУ_ПОСЛА са & поставља посао у позадину, као\n" " да је одредба посла достављена као аргумент уз „bg“.\n" " \n" " Излазно стање:\n" " Даје стање настављеног посла." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4981,13 +5390,16 @@ msgstr "" " Излазно стање:\n" " Даје 1 ако се ИЗРАЗ процени на 0; у супротном даје 0." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5013,21 +5425,25 @@ msgstr "" " \n" " ( ИЗРАЗ )\t Даје вредност ИЗРАЗА\n" " ! ИЗРАЗ\t\tТачно ако је ИЗРАЗ нетачан; у супротном нетачно\n" -" ИЗРАЗ1 && ИЗРАЗ2\tТачно ако су и ИЗРАЗ1 и ИЗРАЗ2 тачни; у супротном нетачно\n" -" ИЗРАЗ1 || ИЗРАЗ2\tТачно ако је или ИЗРАЗ1 или ИЗРАЗ2 тачан; у супротном нетачно\n" +" ИЗРАЗ1 && ИЗРАЗ2\tТачно ако су и ИЗРАЗ1 и ИЗРАЗ2 тачни; у супротном " +"нетачно\n" +" ИЗРАЗ1 || ИЗРАЗ2\tТачно ако је или ИЗРАЗ1 или ИЗРАЗ2 тачан; у " +"супротном нетачно\n" " \n" " КАда се користе оператори „==“ и „!=“, ниска са десне стране оператора\n" -" се користи као шаблон а поређење са шаблоном се обавља. Када се користи\n" +" се користи као шаблон а поређење са шаблоном се обавља. Када се " +"користи\n" " оператор „=~“, ниска са десне стране оператора се поклапа као регуларни\n" " израз.\n" " \n" -" Оператори && и || не процењују ИЗРАЗ2 ако је ИЗРАЗ1 довољан за одређивање\n" +" Оператори && и || не процењују ИЗРАЗ2 ако је ИЗРАЗ1 довољан за " +"одређивање\n" " вредности израза.\n" " \n" " Излазно стање:\n" " 0 или 1 у зависности од вредност ИЗРАЗА." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5085,26 +5501,39 @@ msgstr "" " ИЗДАЊЕ_БАША Подаци о издању за овај Баш.\n" " ЦДПУТАЊА Списак директоријума раздвојен двотачком за тражење\n" " директоријума који су дати као аргументи за „cd“.\n" -" ОПШТЕЗАНЕМАРИ Списак шаблона раздвојен двотачком који описује називе\n" -" датотека који ће бити занемарени ширењем назива путање.\n" -" ИСТОРИОТЕКА Назив датотеке у којој је смештен историјат наредби.\n" -" ВЕЛИЧИНАИСТОРИОТЕКЕ Највећи број редова које може да садржи ова датотека.\n" +" ОПШТЕЗАНЕМАРИ Списак шаблона раздвојен двотачком који описује " +"називе\n" +" датотека који ће бити занемарени ширењем назива " +"путање.\n" +" ИСТОРИОТЕКА Назив датотеке у којој је смештен историјат " +"наредби.\n" +" ВЕЛИЧИНАИСТОРИОТЕКЕ Највећи број редова које може да садржи ова " +"датотека.\n" " ВЕЛИЧИНАИСТОРИЈАТА Највећи број редова историјата којима покренута\n" " шкољка може да приступи.\n" " ЛИЧНО Потпуна путања до вашег директоријума пријављивања.\n" " НАЗИВДОМАЋИНА Назив текућег домаћина.\n" " ВРСТАДОМАЋИНА Врста процесора под којим ради ово издање Баша.\n" -" ЗАНЕМАРИКРД Управља радњом шкољке при пријему знака за крај датотеке\n" -" само као улаза. Ако је подешено, онда је његова вредност\n" -" број знакова КРД-а који могу бити виђени у реду празног\n" -" реда пре него ли шкољка изађе (основно је 10). Када\n" +" ЗАНЕМАРИКРД Управља радњом шкољке при пријему знака за крај " +"датотеке\n" +" само као улаза. Ако је подешено, онда је његова " +"вредност\n" +" број знакова КРД-а који могу бити виђени у реду " +"празног\n" +" реда пре него ли шкољка изађе (основно је 10). " +"Када\n" " није подешено, КРД значи крај улаза.\n" -" ВРСТАМАШИНЕ Ниска која описује текући систем на коме је Баш покренут.\n" -" ПРОВЕРАПОШТЕ Колико често, у секундама, Баш првоерава нову пошту.\n" -" ПУТАЊАПОШТЕ Списак датотека раздвојен двотачком које Баш проверава\n" +" ВРСТАМАШИНЕ Ниска која описује текући систем на коме је Баш " +"покренут.\n" +" ПРОВЕРАПОШТЕ Колико често, у секундама, Баш првоерава нову " +"пошту.\n" +" ПУТАЊАПОШТЕ Списак датотека раздвојен двотачком које Баш " +"проверава\n" " за новом поштом.\n" -" ВРСТАОСА Издање Јуникса на коме је покренуто ово издање Баша.\n" -" ПУТАЊА Списак директоријума раздвојен двотачком за претрагу\n" +" ВРСТАОСА Издање Јуникса на коме је покренуто ово издање " +"Баша.\n" +" ПУТАЊА Списак директоријума раздвојен двотачком за " +"претрагу\n" " приликом тражења наредби.\n" " НАРЕДБА_УПИТА Наредба која ће бити извршена пре исписивања сваког\n" " главног упита.\n" @@ -5115,22 +5544,34 @@ msgstr "" " ТЕРМИНАЛ Назив врсте текућег терминала.\n" " ЗАПИСВРЕМЕНА Излазни запис за статистике времена које приказује\n" " резервисана реч „time“.\n" -" сам_настави Не-ништа значи да је реч наредбе која се појављује на реду\n" -" сама по себи прва тражена на списку тренутно заустављених\n" -" послова. Ако се ту пронађе, тај посао се поставља у први\n" -" план. Вредност „exact“ значи да реч наредбе мора тачно да\n" -" одговара наредби на списку заустављених послова. Вредност\n" -" „substring“ значи да реч наредбе мора да одговара поднисци\n" -" посла. Свака друга вредност значи да наредба мора бити\n" +" сам_настави Не-ништа значи да је реч наредбе која се појављује " +"на реду\n" +" сама по себи прва тражена на списку тренутно " +"заустављених\n" +" послова. Ако се ту пронађе, тај посао се поставља у " +"први\n" +" план. Вредност „exact“ значи да реч наредбе мора " +"тачно да\n" +" одговара наредби на списку заустављених послова. " +"Вредност\n" +" „substring“ значи да реч наредбе мора да одговара " +"поднисци\n" +" посла. Свака друга вредност значи да наредба мора " +"бити\n" " префикс заустављеног посла.\n" -" знакисторијата Знаци који управљају ширењем историјата и брзом заменом.\n" -" Први знак јесте знак замене историјата, обично је то „!“.\n" -" Други јесте знак „брзе замене“, обично је то „^“. Трећи\n" +" знакисторијата Знаци који управљају ширењем историјата и брзом " +"заменом.\n" +" Први знак јесте знак замене историјата, обично је то " +"„!“.\n" +" Други јесте знак „брзе замене“, обично је то „^“. " +"Трећи\n" " јесте знак „напомене историјата“, обично је то „#“.\n" -" ЗАНЕМАРИИСТОРИЈАТ Списак шаблона раздвојен двотачком коришћених за одлучивање\n" -" о наредбама које требају бити сачуване на списку историјата.\n" +" ЗАНЕМАРИИСТОРИЈАТ Списак шаблона раздвојен двотачком коришћених за " +"одлучивање\n" +" о наредбама које требају бити сачуване на списку " +"историјата.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5172,10 +5613,12 @@ msgstr "" " \n" " Аргументи:\n" " +N\tОкреће спремник тако да је N-ти директоријум на врху (бројећи\n" -" са леве стране списка кога приказује „dirs“, почевши од нуле).\n" +" са леве стране списка кога приказује „dirs“, почевши од " +"нуле).\n" " \n" " -N\tОкреће спремник тако да је N-ти директоријум на врху (бројећи\n" -" са десне стране списка кога приказује „dirs“, почевши од нуле).\n" +" са десне стране списка кога приказује „dirs“, почевши од " +"нуле).\n" " \n" " dir\tДодајеs ДИР у спремник директоријума на врху, учинивши га новим\n" " \t текућим радним директоријумом.\n" @@ -5183,10 +5626,11 @@ msgstr "" " Уграђеност „dirs“ приказује спремник директоријума.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није достављен неисправан аргумент или замена\n" +" Даје позитиван резултат осим ако није достављен неисправан аргумент или " +"замена\n" " директоријума не успе." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5219,7 +5663,8 @@ msgstr "" " \n" " Опције:\n" " -n\tПотискује уобичајену замену директоријума приликом уклањања\n" -" \t директоријума из спремника, тако да се ради само са спремником.\n" +" \t директоријума из спремника, тако да се ради само са " +"спремником.\n" " \n" " Аргументи:\n" " +N\tУклања N-ти унос почевши са леве стране списка кога приказује\n" @@ -5227,16 +5672,18 @@ msgstr "" " \t директоријум, „popd +1“ други.\n" " \n" " -N\tУклања N-ти унос почевши са десне стране списка кога приказује\n" -" \t „dirs“, почевши од нуле. На пример: „popd -0“ уклања последњи\n" +" \t „dirs“, почевши од нуле. На пример: „popd -0“ уклања " +"последњи\n" " \t директоријум, „popd -1“ претпоследњи.\n" " \n" " Уграђеност „dirs“ приказује спремник директоријума.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није достављен неисправан аргумент или измена\n" +" Даје позитиван резултат осим ако није достављен неисправан аргумент или " +"измена\n" " директоријума не успе." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5280,15 +5727,18 @@ msgstr "" " \n" " Аргументи:\n" " +N\tПриказујеs N-ти унос бројећи са леве стране на списку кога\n" -" приказује „dirs“ када се призове без опција, почевши од нуле.\n" +" приказује „dirs“ када се призове без опција, почевши од " +"нуле.\n" " \n" " -N\tПриказујеs N-ти унос бројећи са десне стране на списку кога\n" -" приказује „dirs“ када се призове без опција, почевши од нуле.\n" +" приказује „dirs“ када се призове без опција, почевши од " +"нуле.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако се не достави неисправна опција или ако не дође до грешке." +" Даје позитиван резултат осим ако се не достави неисправна опција или ако " +"не дође до грешке." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5309,7 +5759,8 @@ msgid "" msgstr "" "Подешава и расподешава опције шкољке.\n" " \n" -" Мења подешавање сваке оције шкољке НАЗИВ_ОПЦИЈЕ. Без аргумената опција,\n" +" Мења подешавање сваке оције шкољке НАЗИВ_ОПЦИЈЕ. Без аргумената " +"опција,\n" " исписује сваки достављени НАЗИВ_ОПЦИЈЕ, или све опције шкољке ако није\n" " дат ниједан НАЗИВ_ОПЦИЈЕ, са назнаком да ли је свака подешена или није.\n" " \n" @@ -5321,10 +5772,12 @@ msgstr "" " -u\tискључује (расподешава) сваки НАЗИВ_ОПЦИЈЕ\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат ако је НАЗИВ_ОПЦИЈЕ укључен; неуспех ако је дата\n" +" Даје позитиван резултат ако је НАЗИВ_ОПЦИЈЕ укључен; неуспех ако је " +"дата\n" " неисправна опција или ако је НАЗИВ_ОПЦИЈЕ искључен." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5332,29 +5785,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Обликује и исписује АРГУМЕНТЕ под управом ЗАПИСА.\n" @@ -5366,7 +5826,8 @@ msgstr "" " ЗАПИС јесте ниска знака која садржи три врсте објекта: обични знаци,\n" " који се једноставно умножавају на стандардни излаз; низови прекида\n" " знака, који се претварају и умножавају на стандардни излаз; и одредбе\n" -" записа, од којих свака доводи до исписивања следећег наредног аргумента.\n" +" записа, од којих свака доводи до исписивања следећег наредног " +"аргумента.\n" " \n" " Као додатак одредбама стандардног записа описаних у „printf(1)“,\n" " „printf“ тумачи:\n" @@ -5375,7 +5836,8 @@ msgstr "" " %q\tцитира аргумент на начин како би био коришћен као улаз шкољке\n" " %Q\tкао %q, али примењује сваку тачност на нецитирани аргумент пре\n" " \t\tцитирања\n" -" %(fmt)T исписује ниску датум-време резултирајући коришћењем ФМТ-а као\n" +" %(fmt)T исписује ниску датум-време резултирајући коришћењем ФМТ-а " +"као\n" " ниске записа за „strftime(3)“\n" " \n" " Запис се поново користи јер је потребно утрошити све аргументе. Ако\n" @@ -5386,13 +5848,16 @@ msgstr "" " Даје позитиван резултат осим ако није дата неисправна опција или ако не\n" " дође до грешке писања или доделе." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5406,8 +5871,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5419,7 +5886,8 @@ msgstr "" " који омогућава да буду поново коришћене као улаз.\n" " \n" " Опције:\n" -" -p\tисписује постојеће одредбе довршавања у поново употребљивом запису\n" +" -p\tисписује постојеће одредбе довршавања у поново употребљивом " +"запису\n" " -r\tуклања одредбу довршавања за сваки НАЗИВ, или, ако НАЗИВИ нису\n" " \t достављени, све одредбе довршавања\n" " -D\tпримењује довршавања и радње као основне за радње\n" @@ -5429,18 +5897,26 @@ msgstr "" " -I\tпримењује довршавања и радње на почетну (обично наредбу) реч\n" " \n" " Када се покуша са довршавањем, радње се примењују по редоследу опција\n" -" великих слова наведених горе. Опција „-D“ има првенство над „-E“, и обе имају предност у односу на „-I“.\n" +" великих слова наведених горе. Опција „-D“ има првенство над „-E“, и обе " +"имају предност у односу на „-I“.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако се не достави неисправна опција или ако не дође до грешке." +" Даје позитиван резултат осим ако се не достави неисправна опција или ако " +"не дође до грешке." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5451,15 +5927,19 @@ msgstr "" " Ако је достављен изборни аргумент РЕЧ, стварају се поређења са РЕЧЈУ.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако се не достави неисправна опција или ако не дође до грешке." +" Даје позитиван резултат осим ако се не достави неисправна опција или ако " +"не дође до грешке." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5497,30 +5977,37 @@ msgstr "" " \n" " Аргументи:\n" " \n" -" Сваки НАЗИВ упућује на наредбу за коју одредба довршавања мора претходно\n" +" Сваки НАЗИВ упућује на наредбу за коју одредба довршавања мора " +"претходно\n" " бити одређена употребом уграђености „complete“. Ако НАЗИВИ нису дати,\n" " „compopt“ мора бити позвано функцијом која тренутно ствара довршавања,\n" " а опције ствараоца који тренутно извршава довршавање су измењене.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако се не достави неисправна опција или НАЗИВ\n" +" Даје позитиван резултат осим ако се не достави неисправна опција или " +"НАЗИВ\n" " нема одређену одредбу довршавања." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5533,28 +6020,38 @@ 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" " \n" -" Чита редове са стандардног улаза у променљивој индексираног низа НИЗ, или\n" -" из описника датотеке ОД ако је достављена опција „-u“. Променљива МАПОТЕКА\n" +" Чита редове са стандардног улаза у променљивој индексираног низа НИЗ, " +"или\n" +" из описника датотеке ОД ако је достављена опција „-u“. Променљива " +"МАПОТЕКА\n" " јесте основни НИЗ.\n" " \n" " Опције:\n" " -d гранич Користи ГРАНИЧНИК да оконча редове, уместо новог реда\n" -" -n број Умножава највише БРОЈ редова. Ако је БРОЈ 0, умножавају се сви редови\n" -" -O порекло Почиње додељивање НИЗУ при индексу ПОРЕКЛО. Основни индекс је 0\n" +" -n број Умножава највише БРОЈ редова. Ако је БРОЈ 0, умножавају " +"се сви редови\n" +" -O порекло Почиње додељивање НИЗУ при индексу ПОРЕКЛО. Основни " +"индекс је 0\n" " -s број Одбацује првих БРОЈ прочитаних редова\n" -" -t Уклања пратећи ГРАНИЧНИК из сваког прочитаног реда (основни нови ред)\n" -" -u од Чита редове из описника датотеке ОД уместо са стандардног улаза\n" -" -C опозив Процењује ОПОЗИВ сваког пута када се прочита КОЛИЧИНА редова\n" -" -c количина Наводи број прочитаних редова између сваког позива за ОПОЗИВ\n" +" -t Уклања пратећи ГРАНИЧНИК из сваког прочитаног реда " +"(основни нови ред)\n" +" -u од Чита редове из описника датотеке ОД уместо са стандардног " +"улаза\n" +" -C опозив Процењује ОПОЗИВ сваког пута када се прочита КОЛИЧИНА " +"редова\n" +" -c количина Наводи број прочитаних редова између сваког позива за " +"ОПОЗИВ\n" " \n" " Аргументи:\n" " НИЗ Назив променљиве низа за податке датотеке\n" @@ -5568,10 +6065,11 @@ msgstr "" " него што му додели.\n" " \n" " Излазно стање:\n" -" Даје позитиван резултат осим ако није дата неисправна опција или ако је НИЗ само\n" +" Даје позитиван резултат осим ако није дата неисправна опција или ако је " +"НИЗ само\n" " за читање или није индексирани низ." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5581,6 +6079,31 @@ msgstr "" " \n" " Синоним за „mapfile“." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Даје садржај текућег позива подрутине.\n" +#~ " \n" +#~ " Без ИЗРАЗА, даје „$ред $назив_датотеке“. Са ИЗРАЗОМ, даје\n" +#~ " „$ред $подрутина $назив_датотеке“; овај додатни податак може бити\n" +#~ " коришћен за обезбеђивање праћења спремника.\n" +#~ " \n" +#~ " Вредност ИЗРАЗА показује колико кадрова позива да се иде уназад пре\n" +#~ " текућег; први кадар је кадар 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "упозорење: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: неисправан кључ придруживог низа" diff --git a/po/sv.gmo b/po/sv.gmo index 804ca8fe0275155582e4efa4edda921183f88f67..9c75047118749cebad41cc362b6f314bd2c7558e 100644 GIT binary patch delta 12605 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 delta 50202 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%0ApD>r#`wr0bpB~Y%%ZD{u!5f}V(f=^ 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 diff --git a/po/sv.po b/po/sv.po index 7a12ea0be..94a083d87 100644 --- a/po/sv.po +++ b/po/sv.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-06-17 22:31+0200\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" @@ -20,123 +20,126 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "felaktigt vektorindex" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: tar bort attributet namnreferens" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: det går inte att konvertera en indexerad vektor till associativ" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: det går inte att tilldela till ickenumeriska index" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: måste använda index vid tilldelning av associativ vektor" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: det går inte att skapa: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command: det går inte att hitta en tangentbindning för kommandot" +msgstr "" +"bash_execute_unix_command: det går inte att hitta en tangentbindning för " +"kommandot" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: första ickeblanka tecknet är inte '\"'" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "ingen avslutande ”%c” i %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: kolonseparator saknas" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "”%s”: det går inte att avbinda i kommandotangentbindning" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "klammerexpansion: det går inte att allokera minne för %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "klammerexpansion: misslyckades att allokera minne för %u element" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "klammerexpansion: misslyckades att allokera minne för ”%s”" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "”%s”: ogiltigt aliasnamn" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "radredigering är inte aktiverat" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "”%s”: ogiltigt tangentbindningsnamn" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: det går inte att läsa: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "”%s”: okänt funktionsnamn" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s är inte bundet till några tangenter.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s kan anropas via " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "”%s”: det går inte att avbinda" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "slingräknare" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "endast meningsfullt i en ”for”-, ”while”- eller ”until”-slinga" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -145,360 +148,378 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" -"Returnerar kontexten för det aktuella subrutinsanropet.\n" +"Returnera kontexten för det aktuella funktionsanropet.\n" " \n" " Utan UTTR, returneras ”$rad $filnamn”. Med UTTR, returneras\n" " ”$rad $subrutin $filnamn”. Denna extra information kan användas för\n" " att ge en stackspårning.\n" " \n" " Värdet på UTTR indikerar hur många anropsramar att gå tillbaka före den\n" -" aktuella, toppramen är ram 0." +" aktuella, toppramen är ram 0.\n" +" \n" +" Slutstatus:\n" +" Returnerar 0 om inte skalet inte kör en skalfunktion eller UTTR är\n" +" ogiltigt." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME är inte satt" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "för många argument" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "null-katalog" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD är inte satt" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "rad %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "varning: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: användning: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: flaggan kräver ett argument" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: numeriskt argument krävs" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: finns inte" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: ogiltig flagga" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: ogiltigt flaggnamn" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "”%s”: inte en giltig identifierare" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "ogiltigt oktalt tal" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "ogiltigt hexadecimalt tal" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "ogiltigt tal" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: ogiltig signalspecifikation" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "”%s”: inte en pid eller giltig jobbspecifikation" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: endast läsbar variabel" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: det går inte att tilldela" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s utanför giltigt intervall" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argument" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s utanför giltigt intervall" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: inget sådant jobb" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: ingen jobbstyrning" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "ingen jobbstyrning" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: begränsat" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "begränsat" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: inte inbyggt i skalet" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "skrivfel: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "fel när terminalattribut ställdes in: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "fel när terminalattribut hämtades: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: fel när aktuell katalog hämtades: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: tvetydig jobbspecifikation" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "hjälp är inte tillgängligt i denna version" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: inte en indexerad vektor" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: det går inte att ta bort tilldelning: endast läsbar %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: det går inte att ta bort tilldelning" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: ogiltigt åtgärdsnamn" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: ingen kompletteringsspecifikation" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "varning: flaggan -F fungerar kanske inte som du väntar dig" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "varning: flaggan -C fungerar kanske inte som du väntar dig" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "kör inte en kompletteringsfunktion" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "kan endast användas i en funktion" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "det går inte att använda ”-f” för att göra funktioner" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: endast läsbar funktion" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: en referensvariabel kan inte vara en vektor" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: att en namnreferensvariabel självrefererar är inte tillåtet" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: cirkulär namnreferens" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "”%s”: ogiltigt variabelnamn för referens" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: det går inte att förstöra vektorvariabler på detta sätt" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: det går inte att konvertera en associativ vektor till indexerad" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: citerad sammansatt tilldelning av vektorer undanbedes" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "dynamisk laddning är inte tillgängligt" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "det går inte att öppna delat objekt %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "det går inte att hitta %s i det delade objektet %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: den dynamiska inbyggda är redan inläst" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "inläsningsfunktionen för %s returnerar misslyckande (%d): inte inläst" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: inte dynamiskt laddad" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: kan inte ta bort: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: är en katalog" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: inte en normal fil" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: filen är för stor" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: det går inte att köra binär fil" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: kan inte köra: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "utloggning\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "inte ett inloggningsskal: använd ”exit”" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Det finns stoppade jobb.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Det finns körande jobb.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "hittar inget kommando" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "historiespecifikation" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: det går inte att öppna temporärfil: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "aktuell" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "jobb %d startade utan jobbstyrning" @@ -513,11 +534,11 @@ msgstr "%s: ogiltig flagga -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: flaggan kräver ett argument -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "hashning avslaget" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: hashtabellen tom\n" @@ -543,15 +564,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "inget hjälpämne matchar ”%s”. Prova ”help help” eller ”man -k %s” eller ”info %s”." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"inget hjälpämne matchar ”%s”. Prova ”help help” eller ”man -k %s” eller " +"”info %s”." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: det går inte att öppna: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -571,21 +595,31 @@ msgstr "" "En stjärna (*) bredvid ett namn betyder att det kommandot är avstängt.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "det går inte att använda mer än en av -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "historieposition" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "tomt vektorvariabelnamn" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parametern tom eller inte satt" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: ogiltig tidsstämpel" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: historieexpansionen misslyckades" @@ -599,113 +633,113 @@ msgstr "%s: inlib misslyckades" msgid "no other options allowed with `-x'" msgstr "inga andra flaggor är tillåtna med ”-x”" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argument måste vara processer eller jobb-id:n" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Okänt fel" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "uttryck förväntades" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: inte en indexerad vektor" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: ogiltig filbeskrivarspecifikation" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: ogiltig filbeskrivare: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: ogiltigt radantal" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: ogiltig vektorstart" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: ogiltigt kvantum för återanrop" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "tomt vektorvariabelnamn" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "stöd för vektorvariabler krävs" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "”%s”: formateringstecken saknas" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "”%c”: ogiltig specifikation av tidsformat" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "”%c”: ogiltigt formateringstecken" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "varning: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "formattolkningsproblem: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "hexadecimal siffra saknas för \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "unicode-siffra saknas för \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "ingen annan katalog" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: ogiltigt argument" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<ingen aktuell katalog>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "katalogstacken är tom" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "katalogstackindex" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -720,10 +754,12 @@ 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 "" "Visa listan av kataloger i minnet just nu. Kataloger hamnar i listan\n" @@ -745,7 +781,7 @@ msgstr "" " -N\tVisa den N:e posten räknat från höger i listan som visas\n" "\tav dirs när det anropas utan flaggor, räknat från noll." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -791,7 +827,7 @@ msgstr "" " \n" " Den inbyggda ”dirs” visar katalogstacken." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -829,319 +865,332 @@ msgstr "" " \n" " Den inbyggda ”dirs” visar katalogstacken." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: ogiltig tidsgränsspecifikation" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "läsfel: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "det går bara att göra ”return” från en funktion eller källinläst skript" +msgstr "" +"det går bara att göra ”return” från en funktion eller källinläst skript" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "det går inte att samtidigt ta bort en funktion och en variabel" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: inte en vektorvariabel" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: inte en funktion" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: det går inte att exportera" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "skiftantal" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "det går inte att sätta och ta bort skalflaggor samtidigt" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: ogiltigt skalflaggsnamn" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "filnamnsargument krävs" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: filen finns inte" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "det går inte att suspendera" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "det går inte att suspendera ett inloggningsskal" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s är ett alias för ”%s”\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s är ett nyckelord i skalet\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s är en funktion\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s är en special inbyggd i skalet\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s är en funktion\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s är inbyggt i skalet\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s är %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s är hashad (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: ogiltigt gränsargument" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "”%c”: felaktigt kommando" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: kan inte avgöra gränsen: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "gräns" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: kan inte ändra gränsen: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "oktalt tal" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "”%c”: ogiltig operator för symboliskt läge" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "”%c”: ogiltigt tecken för symboliskt läge" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " rad " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "senaste kommando: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Avbryter..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "INFORMATION: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "FELSÖKNINGS-varning: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "okänt kommandofel" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "felaktig kommandotyp" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "felaktig anslutning" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "felaktigt hopp" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: obunden variabel" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\atiden gick ut i väntan på indata: automatisk utloggning\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "det går inte att omdirigera standard in från /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: ”%c”: ogiltigt formateringstecken" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] finns fortfarande" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "rörfel" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: maximal nästning av eval överskriden (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: maximal nästning av source överskriden (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: maximal nästning av funktioner överskriden (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: begränsat: det går inte att ange ”/” i kommandonamn" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: kommandot finns inte" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: felaktig tolk" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: det går inte att köra: en nödvändig fil finns inte" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: felaktig tolk" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: det går inte att köra binär fil: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "”%s”: är en speciell inbyggd" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "det går inte att duplicera fb %d till fb %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "rekursionsnivå i uttryck överskriden" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "underspill i rekursionsstacken" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "syntaxfel i uttrycket" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "försök att tilldela till en icke-variabel" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "syntaxfel i variabeltilldelning" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "division med 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "fel: felaktig expassign-symbol" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "”:” förväntades i villkorligt uttryck" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "exponenten är mindre än 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "en identifierare förväntades efter pre-ökning eller pre-minskning" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "”)” saknas" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "syntaxfel: en operand förväntades" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "syntaxfel: ogiltig aritmetisk operator" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (felsymbol är ”%s”)" @@ -1158,7 +1207,7 @@ msgstr "felaktig heltalskonstant" msgid "value too great for base" msgstr "värdet är för stort för basen" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: uttrycksfel\n" @@ -1167,46 +1216,52 @@ msgstr "%s: uttrycksfel\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: det går inte att komma åt föräldrakatalogen" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "”%s”: är en speciell inbyggd" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "det går inte att återställa fördröjningsfritt läge för fb %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "det går inte att allokera en ny filbeskrivare för bashindata från fb %d" +msgstr "" +"det går inte att allokera en ny filbeskrivare för bashindata från fb %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: buffert finns redan för ny fb %d" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp rör" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "avgrenad pid %d finns i körande jobb %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "tar bort stoppat jobb %d med processgrupp %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) markerad som fortfarande vid liv" @@ -1216,137 +1271,137 @@ msgstr "add_process: pid %5ld (%s) markerad som fortfarande vid liv" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: ingen sådan pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Signal %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Klart" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Stoppad" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Stoppad(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Kör" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Klart(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Avslut %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Okänd status" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(minnesutskrift skapad) " -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (ak: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "barns setpgid (%ld till %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld är inte ett barn till detta skal" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Ingen uppgift om process %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: jobb %d är stoppat" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: inga aktuella jobb" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: jobbet har avslutat" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: jobb %d är redan i bakgrunden" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: slår på WNOHANG för att undvika oändlig blockering" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: rad %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (minnesutskrift skapad)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(ak nu: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp misslyckades" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: ingen jobbstyrning i bakgrunden" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: linjedisciplin" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "det går inte att sätta terminalprocessgrupp (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "ingen jobbstyrning i detta skal" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: försäkran misslyckades: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1355,376 +1410,391 @@ msgstr "" "\r\n" "malloc: %s:%d: försäkran gick fel\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "okänd" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: block på frilista överskrivet" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: anropad med redan frigjort block som argument" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: anropad med oallokerat block som argument" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: underspill upptäckt: mh_nbytes utanför giltigt intervall" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: underspill upptäckt: magic8 är trasig" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: start- och slutstyckesstorlekar skiljer" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: anropat med oallokerat block som argument" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: underspill upptäckt: mh_nbytes utanför giltigt intervall" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: underspill upptäckt: magic8 är trasig" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: start- och slutstyckesstorlekar skiljer" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: allokeringstabellen är full med FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p finns redan i tabellen som allokerat?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p finns redan i tabellen som fritt?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "ogiltig bas" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: okänd värd" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: ogiltig tjänst" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: felaktig specifikation av nätverkssökväg" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "nätverksoperationer stöds inte" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: det går inte att ändra lokal (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: det går inte att ändra lokal (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: det går inte att ändra lokal (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: det går inte att ändra lokal (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Du har post i $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Du har ny post i $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Posten i %s har lästs\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "syntaxfel: aritmetiskt uttryck krävs" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "syntaxfel: oväntat ”;”" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "syntaxfel: ”((%s))”" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: felaktig instruktionstyp %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "här-dokument på rad %d avgränsas av filslut (ville ha ”%s”)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" -msgstr "make_redirection: omdirigeringsinstruktion ”%d” utanför giltigt intervall" +msgstr "" +"make_redirection: omdirigeringsinstruktion ”%d” utanför giltigt intervall" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) överstiger SIZE_MAX (%lu): raden avhuggen" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) överstiger SIZE_MAX (%lu): raden " +"avhuggen" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "skrivfel: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "maximalt antal av här-dokument överskridet" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "oväntat filslut vid sökning efter matchande ”%c”" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "oväntat filslut vid sökning efter ”]]”" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "syntaxfel i villkorligt uttryck: oväntad symbol ”%s”" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "syntaxfel i villkorligt uttryck" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "oväntad symbol ”%s”, ”)” förväntades" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "”)” förväntades" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "oväntat argument ”%s” till villkorlig unär operator" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "oväntat argument till villkorlig unär operator" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "oväntad symbol ”%s”, villkorlig binär operator förväntades" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "villkorlig binär operator förväntades" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "oväntat argument ”%s” till villkorlig binär operator" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "oväntat argument till villkorlig binär operator" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "oväntad symbol ”%c” i villkorligt kommando" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "oväntad symbol ”%s” i villkorligt kommando" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "oväntad symbol %d i villkorligt kommando" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "syntaxfel nära den oväntade symbolen ”%s”" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "syntaxfel nära ”%s”" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "syntaxfel: oväntat filslut" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "syntaxfel: oväntat filslut" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "syntaxfel" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Använd ”%s” för att lämna skalet.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "oväntat filslut när matchande ”)” söktes" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "komplettering: funktion ”%s” finns inte" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: möjlig slinga av omförsök" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: felaktig anslutning ”%d”" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: ogiltig filbeskrivare" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: NULL-filpekare" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: ”%c”: ogiltigt formateringstecken" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "filbeskrivare utanför giltigt intervall" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: tvetydig omdirigering" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: det går inte att skriva över en existerande fil" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: begränsat: det går inte att omdirigera utdata" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "det går inte att skapa temporärfil för här-dokument: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: det går inte att tilldela fb till variabel" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port stöds inte utan nätverksfunktion" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "omdirigeringsfel: det går inte att duplicera fb" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "hittade inte /tmp, var god skapa!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp måste vara ett giltigt katalognamn" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "läget för snygg utskrift ignoreras i interaktiva skal" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: ogiltig flagga" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "det går sätta uid till %d: effektiv uid %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "det går inte att sätta gid till %d: effektiv gid %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "kan inte starta felsökaren, felsökningsläge avaktiverat" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: är en katalog" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Jag har inget namn!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, version %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1733,51 +1803,52 @@ msgstr "" "Användning:\t%s [GNU lång flagga] [flagga] ...\n" "\t\t%s [GNU lång flagga] [flagga] skriptfil ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU långa flaggor:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Skalflaggor:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD eller -c kommando eller -O shopt_flagga\t\t(bara uppstart)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s eller -o flagga\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "Skriv ”%s -c 'help set'” för mer information om skalflaggor.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "Skriv ”%s -c help” för mer information om inbyggda skalkommandon.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "" "Använd kommandot ”bashbug” för att rapportera fel.\n" "Skicka synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bash hemsida: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "Allmän hjälp i att använda GNU-program: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Allmän hjälp i att använda GNU-program: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: ogiltig operation" @@ -1947,282 +2018,309 @@ msgstr "Informationsbegäran" msgid "Unknown Signal #%d" msgstr "Okänd signal nr %d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "felaktig substitution: ingen avslutande ”%s” i %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: det går inte att tilldela listor till vektormedlemmar" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "det går inte att skapa rör för processubstitution" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "det går inte att skapa barn för processubstitution" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "det går inte att öppna namngivet rör %s för läsning" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "det går inte att öppna namngivet rör %s för skrivning" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "det går inte att duplicera namngivet rör %s som fb %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "kommandoersättning: ignorerade nollbyte i indata" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: det går inte att duplicera rör som fb 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "det går inte att skapa rör för kommandosubstitution" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "det går inte att skapa barn för kommandosubstitution" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: det går inte att duplicera rör som fb 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: ogiltigt variabelnamn för referens" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: felaktig indirekt expansion" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: felaktigt variabelnamn" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parametern är inte satt" +msgid "%s: bad substitution" +msgstr "%s: felaktig substitution" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parametern tom eller inte satt" +msgid "%s: parameter not set" +msgstr "%s: parametern är inte satt" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: delstränguttryck < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: felaktig substitution" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: det går inte att tilldela på detta sätt" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "framtida versioner av skalet kommer att framtvinga evaluering som en aritmetisk substitution" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"framtida versioner av skalet kommer att framtvinga evaluering som en " +"aritmetisk substitution" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "felaktig ersättning: ingen avslutande ”`” i %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "ingen matchning: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argument förväntades" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: heltalsuttryck förväntades" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "”)” förväntades" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "”)” förväntades, fann %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: binär operator förväntades" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: unär operator förväntades" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "”]” saknas" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "syntaxfel: oväntat ”%s”" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "ogiltigt signalnummer" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "fällhanterare: maximal nivå av fällhanterare överskriden (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: felaktigt värde i trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: signalhanterare är SIG_DFL, skickar om %d (%s) till mig själv" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: signalhanterare är SIG_DFL, skickar om %d (%s) till mig " +"själv" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: felaktig signal %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "fel vid import av funktionsdefinition för ”%s”" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "skalnivå (%d) för hög, återställer till 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "maximalt antal av här-dokument överskridet" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: ingen funktionskontext i aktuellt sammanhang" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: variabeln får inte tilldelas ett värde" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: det går inte att ärva ett värde från en inkompatibel typ" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: tilldelar ett heltal till en namnreferens" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: ingen funktionskontext i aktuellt sammanhang" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s har tom exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "ogiltigt tecken %d i exportstr för %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "inget ”=” i exportstr för %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "pop_var_context: huvudet på shell_variables är inte en funktionskontext" +msgstr "" +"pop_var_context: huvudet på shell_variables är inte en funktionskontext" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: ingen kontext global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: huvudet på shell_variables är inte en temporär omgivningsräckvidd" +msgstr "" +"pop_scope: huvudet på shell_variables är inte en temporär omgivningsräckvidd" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: går inte att öppna som FILE" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: ogiltigt värde för spårningsfilbeskrivare" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: kompatibilitetsvärde utanför giltigt intervall" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright © 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl." +"html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, version %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "Detta är fri programvara, du får fritt ändra och vidaredistribuera den." +msgstr "" +"Detta är fri programvara, du får fritt ändra och vidaredistribuera den." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Det finns INGEN GARANTI, så långt lagen tillåter." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: det går inte att allokera %lu byte (%lu byte allokerade)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: det går inte att allokera %lu byte" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: det går inte att allokera %lu byte (%lu byte allokerade)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: det går inte att allokera %lu byte" @@ -2236,8 +2334,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] namn [namn ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpvsPVSX] [-m tangentkarta] [-f filnamn] [-q namn] [-u namn] [-r tangentsekv] [-x tangentsekv:skalkommando] [tangentsekv:readline-funktion eller readline-kommando]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpvsPVSX] [-m tangentkarta] [-f filnamn] [-q namn] [-u namn] [-r " +"tangentsekv] [-x tangentsekv:skalkommando] [tangentsekv:readline-funktion " +"eller readline-kommando]" #: builtins.c:56 msgid "break [n]" @@ -2256,7 +2359,8 @@ msgid "caller [expr]" msgstr "caller [uttr]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [kat]" #: builtins.c:68 @@ -2268,12 +2372,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] kommando [arg ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [namn[=värde] …] eller declare -p [-aAfFilnrtux] [namn …]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [namn[=värde] …] eller declare -p [-aAfFilnrtux] " +"[namn …]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] namn[=värde] … eller typeset -p [-aAfFilnrtux] [namn …]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] namn[=värde] … eller typeset -p [-aAfFilnrtux] " +"[namn …]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2313,7 +2425,8 @@ msgstr "logout [n]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "fc [-e rnamn] [-lnr] [första] [sista] eller fc -s [mnst=ers] [kommando]" +msgstr "" +"fc [-e rnamn] [-lnr] [första] [sista] eller fc -s [mnst=ers] [kommando]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2332,8 +2445,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [mönster ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d avstånd] [n] eller history -anrw [filnamn] eller history -ps arg [arg...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d avstånd] [n] eller history -anrw [filnamn] eller history -" +"ps arg [arg...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2344,16 +2461,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [jobbspec … | pid …]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s sigspec | -n signum | -sigspec] pid | jobbspec ... eller kill -l [sigspec]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobbspec ... eller kill -l " +"[sigspec]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a vektor] [-d avgr] [-i text] [-n ntkn] [-N ntkn] [-p prompt] [-t tidgräns] [-u fb] [namn ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a vektor] [-d avgr] [-i text] [-n ntkn] [-N ntkn] [-p prompt] " +"[-t tidgräns] [-u fb] [namn ...]" #: builtins.c:140 msgid "return [n]" @@ -2400,7 +2526,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] signalspec ...]" #: builtins.c:168 @@ -2424,106 +2551,134 @@ msgid "wait [pid ...]" msgstr "wait [pid …]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NAMN [in ORD ... ] ; do KOMMANDON; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( utr1; utr2; utr3 )); do KOMMANDON; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAMN [in ORD ... ;] do KOMMANDON; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] rör" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case ORD in [MÖNSTER [| MÖNSTER]...) KOMMANDON ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if KOMMANDON; then KOMMANDON; [ elif KOMMANDON; then KOMMANDON; ]... [ else KOMMANDON; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if KOMMANDON; then KOMMANDON; [ elif KOMMANDON; then KOMMANDON; ]... [ else " +"KOMMANDON; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while KOMMANDON; do KOMMANDON-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until KOMMANDON; do KOMMANDON-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [NAMN] kommando [omdirigeringar]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function namn { KOMMANDON ; } or namn () { KOMMANDON ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ KOMMANDON ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "jobbspec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( uttryck ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ uttryck ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variabler - Namn och betydelse av några skalvariabler" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | kat]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [flgnamn ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] format [argument]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o flagga] [-A åtgärd] [-G globmnst] [-W ordlista] [-F funktion] [-C kommando] [-X filtermnst] [-P prefix] [-S suffix] [namn …]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o flagga] [-A åtgärd] [-G globmnst] " +"[-W ordlista] [-F funktion] [-C kommando] [-X filtermnst] [-P prefix] [-S " +"suffix] [namn …]" -#: builtins.c:235 -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 flagga] [-A åtgärd] [-G globmnst] [-W ordlista] [-F funktion] [-C kommando] [-X filtermnst] [-P prefix] [-S suffix] [ord]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o flagga] [-A åtgärd] [-G globmnst] [-W ordlista] " +"[-F funktion] [-C kommando] [-X filtermnst] [-P prefix] [-S suffix] [ord]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o flagga] [-DEI] [namn …]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d avgränsare] [-n antal] [-O start] [-s antal] [-t] [-u fb] [-C återanrop] [-c kvanta] [vektor]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d avgränsare] [-n antal] [-O start] [-s antal] [-t] [-u fb] [-C återanrop] [-c kvanta] [vektor]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d avgränsare] [-n antal] [-O start] [-s antal] [-t] [-u fb] [-C " +"återanrop] [-c kvanta] [vektor]" -#: builtins.c:256 +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d avgränsare] [-n antal] [-O start] [-s antal] [-t] [-u fb] [-C " +"återanrop] [-c kvanta] [vektor]" + +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2538,12 +2693,14 @@ 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 "" "Definiera eller visa alias.\n" " \n" -" Utan argument skriver ”alias” listan på alias på den återanvändbara formen\n" +" Utan argument skriver ”alias” listan på alias på den återanvändbara " +"formen\n" " ”alias NAMN=VÄRDE” på standard ut.\n" " \n" " Annars är ett alias definierat för varje NAMN vars VÄRDE är angivet.\n" @@ -2557,7 +2714,7 @@ msgstr "" " alias returnerar sant om inte ett NAMN ges för vilket inget alias har\n" " definierats." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2573,7 +2730,7 @@ msgstr "" " \n" " Returnerar framgång om inte ett NAMN inte är ett existerande alias." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2585,25 +2742,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2611,28 +2773,36 @@ msgid "" msgstr "" "Sätt Readline-tangentbindningar och -variabler.\n" " \n" -" Bind en tangentsekvens till en Readline-funktion eller -makro, eller sätt\n" +" Bind en tangentsekvens till en Readline-funktion eller -makro, eller " +"sätt\n" " en Readline-variabel. Syntaxen för argument vid sidan om flaggor är\n" -" densamma som den i ~/.inputrc, men måste skickas som ett ensamt argument:\n" +" densamma som den i ~/.inputrc, men måste skickas som ett ensamt " +"argument:\n" " t.ex., bind '\"\\C-x\\C-r\": re-read-init-file'.\n" " \n" " Flaggor:\n" " -m tangentkarta Använt TANGENTKARTA som tangentkarta under detta\n" " kommando. Acceptabla tangentkartenamn är emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command och vi-insert.\n" " -l Lista namnen på funktioner.\n" " -P Lista funktionsnamn och bindningar.\n" -" -p Lista funktioner och bindningar på ett sätt som kan\n" +" -p Lista funktioner och bindningar på ett sätt som " +"kan\n" " återanvändas som indata.\n" -" -S Lista tangentsekvenser som anropar makron och deras\n" +" -S Lista tangentsekvenser som anropar makron och " +"deras\n" " värden.\n" -" -s Lista tangentsekvenser som anropar makron och deras\n" -" värden på ett sätt som kan återanvändas som indata.\n" +" -s Lista tangentsekvenser som anropar makron och " +"deras\n" +" värden på ett sätt som kan återanvändas som " +"indata.\n" " -V Lista variabelnamn och värden\n" " -v Lista variabelnamn och värden på ett sätt som kan\n" " återanvändas som indata.\n" -" -q funktionsnamn Fråga efter vilka tangenter som anropar den namngivna\n" +" -q funktionsnamn Fråga efter vilka tangenter som anropar den " +"namngivna\n" " funktionen\n" " -u funktionsnamn Tag bort alla tangenter som är bundna till den\n" " namngivna funktionen.\n" @@ -2640,14 +2810,15 @@ msgstr "" " -f filnamn Läs tangentbindningar från FILNAMN.\n" " -x tangentsekv:skalkommando Gör så att SKALKOMMANDO körs när\n" " \t\t\t\t TANGENTSEKV skrivs.\n" -" -X Lista tangentsekvenser bundna med -x och tillhörande\n" +" -X Lista tangentsekvenser bundna med -x och " +"tillhörande\n" " kommandon på ett format som kan återanvändas som\n" " indata.\n" " \n" " Slutstatus:\n" " bind returnerar 0 om inte en okänd flagga ges eller ett fel inträffar." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2665,7 +2836,7 @@ msgstr "" " Slutstatus:\n" " Returvärdet är 0 förutsatt att N är större eller lika med 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2677,19 +2848,21 @@ msgid "" msgstr "" "Återuppta for-, while eller until-slinga.\n" " \n" -" Återuppta nästa iteration i den omslutande FOR-, WHILE- eller UNTIL-slingan.\n" +" Återuppta nästa iteration i den omslutande FOR-, WHILE- eller UNTIL-" +"slingan.\n" " Om N anges, återuppta den N:e omslutande slingan.\n" " \n" " Slutstatus:\n" " Slutstatus är 0 förutsatt att N är större eller lika med 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2697,16 +2870,18 @@ msgid "" msgstr "" "Exekvera en i skalet inbyggd funktion.\n" " \n" -" Exekvera SKALINBYGGD med argument ARG utan att utföra kommandouppslagning.\n" +" Exekvera SKALINBYGGD med argument ARG utan att utföra " +"kommandouppslagning.\n" " Detta är användbart när du vill implementera om en inbyggd funktion i\n" " skalet som en skalfunktion, men behöver köra den inbyggda funktionen i\n" " skalfunktionen.\n" " \n" " Slutstatus:\n" -" Returnerar slutstatus från SKALINBYGGD, eller falskt om SKALINBYGGD inte\n" +" Returnerar slutstatus från SKALINBYGGD, eller falskt om SKALINBYGGD " +"inte\n" " är inbyggd i skalet." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2734,20 +2909,27 @@ msgstr "" " Returnerar 0 om inte skalet inte kör en skalfunktion eller UTTR är\n" " ogiltigt." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2763,11 +2945,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Ändra skalets arbetskatalog.\n" @@ -2792,7 +2976,8 @@ msgstr "" " \t”..”\n" " -e\tom flaggan -P ges, och det inte går att avgöra den aktuella\n" " \tkatalogen, returnera då med status skild från noll\n" -" -@ på system som stödjer det, presentera en fil med utökade attribut\n" +" -@ på system som stödjer det, presentera en fil med utökade " +"attribut\n" " som en katalog som innehåller filattributen\n" " \n" " Standardvärde är att följa symboliska länkar, som om ”-L” vore angivet.\n" @@ -2803,7 +2988,7 @@ msgstr "" " Returnerar 0 om katalogen är ändrad, och om $PWD satts korrekt om -P\n" " angetts; skilt från noll annars." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2828,10 +3013,11 @@ msgstr "" " Som standard beter sig ”pwd” som om ”-L” vore angivet.\n" " \n" " Slutstatus:\n" -" Returnerar 0 om inte en ogiltig flagga anges eller den aktuella katalogen\n" +" Returnerar 0 om inte en ogiltig flagga anges eller den aktuella " +"katalogen\n" " inte kan läsas." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2847,7 +3033,7 @@ msgstr "" " Slutstatus:\n" " Lyckas alltid." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2859,7 +3045,7 @@ msgstr "" " Slutstatus:\n" " Lyckas alltid." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2871,12 +3057,13 @@ msgstr "" " Slutstatus:\n" " Misslyckas alltid." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2901,10 +3088,12 @@ msgstr "" " -V skriv en mer utförlig beskrivning om varje KOMMANDO\n" " \n" " Slutstatus:\n" -" Returnerar slutstatus från KOMMANDO, eller misslyckande om KOMMANDO inte\n" +" Returnerar slutstatus från KOMMANDO, eller misslyckande om KOMMANDO " +"inte\n" " finns." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2932,12 +3121,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2963,11 +3154,13 @@ msgstr "" " -a\tför att göra NAMN till indexerade vektorer (om det stöds)\n" " -A\tför att göra NAMN till associativa vektorer (om det stöds)\n" " -i\tför att ge NAMN attributet ”heltal”\n" -" -l\tför att konvertera värdet av varje NAMN till gemena vid tilldelning\n" +" -l\tför att konvertera värdet av varje NAMN till gemena vid " +"tilldelning\n" " -n\tgör NAMN till en referens till variabeln som namnges som värde\n" " -r\tför att göra NAMN endast läsbart\n" " -t\tför att ge NAMN attributet ”spåra”\n" -" -u\tför att konvertera värdet av varje NAMN till versaler vid tilldelning\n" +" -u\tför att konvertera värdet av varje NAMN till versaler vid " +"tilldelning\n" " -x\tför att exportera NAMN\n" " \n" " Användning av ”+” istället för ”-” slår av det angivna attributet.\n" @@ -2975,14 +3168,15 @@ msgstr "" " För variabler med attributet heltal utförs aritmetisk beräkning (se\n" " kommandot ”let”) när variabeln tilldelas ett värde.\n" " \n" -" Vid användning i en funktion gör ”declare” NAMN lokala, som med kommandot\n" +" Vid användning i en funktion gör ”declare” NAMN lokala, som med " +"kommandot\n" " ”local”. Flaggan ”-g” åsidosätter detta beteende.\n" " \n" " Slutstatus:\n" " Returnerar framgång om inte en ogiltig flagga ges eller ett fel vid\n" " variabeltilldelning inträffar." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2992,7 +3186,7 @@ msgstr "" " \n" " En synonym för ”declare”. Se ”help declare”." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3011,18 +3205,20 @@ msgstr "" " Skapa en lokal variabel kallad NAMN, och ge den VÄRDE. FLAGGA kan\n" " vara alla flaggor som accepteras av ”declare”.\n" " \n" -" Lokala variabler kan endast användas i en funktion; de är synliga endast\n" +" Lokala variabler kan endast användas i en funktion; de är synliga " +"endast\n" " för funktionen de definieras i och dess barn.\n" " \n" " Slutstatus:\n" " Returnerar framgång om inte en ogiltig flagga ges, ett fel vid\n" " variabeltilldelning inträffar eller skalet inte exekverar en funktion." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3046,9 +3242,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3080,7 +3278,8 @@ msgstr "" " \t\t0 till 3 oktala siffror\n" " \\xHH\tdet åttabitarstecken vars värde är HH (hexadecimalt). HH\n" " \t\tkan vara en eller två hexadecimala siffror\n" -" \\uHHHH\tdet Unicode-tecken vars värde är det hexadeimala värdet HHHH.\n" +" \\uHHHH\tdet Unicode-tecken vars värde är det hexadeimala värdet " +"HHHH.\n" " \t\tHHHH kan vara en till fyra hexadecimala siffror.\n" " \\UHHHHHHHH det Unicode-tecken vars värde är det hexadecimala värdet\n" " \t\tHHHHHHHH. HHHHHHHH kan vara en till åtta hexadecimala siffror.\n" @@ -3088,7 +3287,7 @@ msgstr "" " Slutstatus:\n" " Returnerar framgång om inte ett skrivfel inträffar." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3110,7 +3309,8 @@ msgstr "" " Slutstatus:\n" " Returnerar framgång om inte ett skrivfel inträffar." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3130,6 +3330,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3164,11 +3370,12 @@ msgstr "" " Returnerar framgång om inte NAMN inte är inbyggd i skalet eller ett fel\n" " inträffar." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3176,13 +3383,14 @@ msgid "" msgstr "" "Exekvera argument som ett skalkommando.\n" " \n" -" Kombinera ARGument till en enda sträng, och använd resultatet som indata\n" +" Kombinera ARGument till en enda sträng, och använd resultatet som " +"indata\n" " till skalet och exekvera de resulterande kommandona.\n" " \n" " Slutstatus:\n" " Returnerar slutstatus av kommandot eller framgång om kommandot är tomt." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3259,12 +3467,13 @@ msgstr "" " Returnerar framgång om en flagga hittas, misslyckas om slutet av\n" " flaggorna nås eller ett fel inträffar." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3272,15 +3481,18 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Ersätt skalet med det givna kommandot.\n" " \n" -" Exekvera KOMMANDO genom att ersätta detta skal med det angivna programmet.\n" +" Exekvera KOMMANDO genom att ersätta detta skal med det angivna " +"programmet.\n" " ARGUMENT blir argument till KOMMANDO. Om KOMMANDO inte anges kommer\n" " eventuella omdirigeringar att gälla för det aktuella skalet.\n" " \n" @@ -3296,7 +3508,7 @@ msgstr "" " Returnerar framgång om inte KOMMANDO inte finns eller ett fel vid\n" " omdirigering inträffar." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3308,11 +3520,12 @@ msgstr "" " Avslutar skalet med statusen N. Om N utelämnas är slutstatusen den\n" " hos det sist körda kommandot." -#: builtins.c:724 +#: builtins.c:732 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 "" "Avsluta ett inloggningsskal.\n" @@ -3320,17 +3533,20 @@ msgstr "" " Avslutar ett inloggningsskal med slutstatus N. Returnerar ett fel om\n" " det inte körs i ett inloggningsskal." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3343,8 +3559,11 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Visa eller kör kommandon från historielistan.\n" " \n" @@ -3363,7 +3582,8 @@ msgstr "" " Med formatet ”fc -s [mnst=ers ...] [kommando]” körs KOMMANDO om efter\n" " att substitutionen GAMMALT=NYTT har utförts.\n" " \n" -" Ett användbart alias att använda med detta är r=\"fc -s\", så att skriva\n" +" Ett användbart alias att använda med detta är r=\"fc -s\", så att " +"skriva\n" " ”r cc” kör senaste kommandot som börjar med ”cc” och att skriva ”r” kör\n" " om senaste kommandot.\n" " \n" @@ -3371,7 +3591,7 @@ msgstr "" " Returnerar framgång eller status på exekverat kommando, skilt från noll\n" " om ett fel inträffar." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3392,12 +3612,14 @@ msgstr "" " Status på kommandot som placerades i förgrunden, eller misslyckande om\n" " ett fel inträffar." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3405,20 +3627,23 @@ msgid "" msgstr "" "Flytta jobb till bakgrunden.\n" " \n" -" Placera jobben som identifieras av varje JOBBSPEC i bakgrunden som om de\n" +" Placera jobben som identifieras av varje JOBBSPEC i bakgrunden som om " +"de\n" " hade startats med ”&”. Om ingen JOBBSPEC finns används skalets begrepp\n" " om det aktuella jobbet.\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte jobbstyrning inte är aktiverat eller ett fel\n" +" Returnerar framgång om inte jobbstyrning inte är aktiverat eller ett " +"fel\n" " inträffar." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3438,7 +3663,8 @@ msgstr "" "Kom ihåg eller visa programlägen.\n" " \n" " Bestäm och kom ihåg den fullständiga sökvägen till varje kommando NAMN.\n" -" Om inget argument ges visas information om kommandon som finns i minnet.\n" +" Om inget argument ges visas information om kommandon som finns i " +"minnet.\n" " \n" " Flaggor:\n" " -d\tglöm platsen i minnet för varje NAMN\n" @@ -3454,7 +3680,7 @@ msgstr "" " Slutstatus:\n" " Returnerar framgång om inte NAMN inte hittas eller en ogiltig flagga ges." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3472,12 +3698,14 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Visa information om inbyggda kommandon.\n" " \n" " Visar korta sammanfattningar om inbyggda kommandon. Om MÖNSTER anges\n" -" ges detaljerad hjälp om alla kommandon som matchar MÖNSTER, annars skrivs\n" +" ges detaljerad hjälp om alla kommandon som matchar MÖNSTER, annars " +"skrivs\n" " listan med hjälpämnen.\n" " \n" " Flaggor:\n" @@ -3490,9 +3718,11 @@ msgstr "" " MÖNSTER\tMönster som anger hjälpämnen\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte MÖNSTER inte finns eller en ogiltig flagga ges." +" Returnerar framgång om inte MÖNSTER inte finns eller en ogiltig flagga " +"ges." -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3516,11 +3746,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3549,13 +3784,15 @@ msgstr "" " ett värde används det, annars ~/.bash_history.\n" " \n" " Om variabeln HISTTIMEFORMAT är satt och inte tom används dess värde som\n" -" en formatsträng till strftime(3) för att skriva tidsstämplar tillhörande\n" +" en formatsträng till strftime(3) för att skriva tidsstämplar " +"tillhörande\n" " varje visad historiepost. Inga tidsstämplar skrivs annars.\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte en ogiltig flagga ges eller ett fel inträffar." +" Returnerar framgång om inte en ogiltig flagga ges eller ett fel " +"inträffar." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3595,10 +3832,11 @@ msgstr "" " i ARG har ersatts med process-id:t för det jobbets processgruppledare.\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte en ogiltig flagga ges eller ett fel inträffar.\n" +" Returnerar framgång om inte en ogiltig flagga ges eller ett fel " +"inträffar.\n" " Om -x används returneras slutstatus från KOMMANDO." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3628,7 +3866,7 @@ msgstr "" " Slutstatus:\n" " Returnerar framgång om inte en ogiltig flagga eller JOBBSPEC ges." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3652,7 +3890,8 @@ msgid "" msgstr "" "Skicka en signal till ett jobb.\n" " \n" -" Skicka processerna som identifieras av PID eller JOBBSPEC signalerna som\n" +" Skicka processerna som identifieras av PID eller JOBBSPEC signalerna " +"som\n" " namnges av SIGSPEC eller SIGNUM. Om varken SIGSPEC eller SIGNUM är\n" " angivna antas SIGTERM.\n" " \n" @@ -3663,22 +3902,25 @@ msgstr "" " \t\tsignalnummer som namn skall listas för\n" " -L\tsynonym för -l\n" " \n" -" Kill är inbyggt i skalet av två skäl: det tillåter att jobb-id:n används\n" -" istället för process-id:n, och det tillåter processer att dödas om gränsen\n" +" Kill är inbyggt i skalet av två skäl: det tillåter att jobb-id:n " +"används\n" +" istället för process-id:n, och det tillåter processer att dödas om " +"gränsen\n" " för hur många processer du får skapa har nåtts.\n" " \n" " Slutstatus:\n" " Returnerar framgång om inte en ogiltig flagga angivits eller ett fel\n" " inträffar." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3716,10 +3958,12 @@ msgid "" msgstr "" "Evaluera aritmetiska uttryck.\n" " \n" -" Evaluera varje ARG som ett aritmetiskt uttryck. Evaluering görs i heltal\n" +" Evaluera varje ARG som ett aritmetiskt uttryck. Evaluering görs i " +"heltal\n" " med fix bredd utan kontroll av spill, fast division med 0 fångas och\n" " flaggas som ett fel. Följande lista över operatorer är grupperad i\n" -" nivåer av operatorer med samma precedens. Nivåerna är listade i ordning\n" +" nivåer av operatorer med samma precedens. Nivåerna är listade i " +"ordning\n" " med sjunkande precedens.\n" " \n" " \tid++, id--\tpostinkrementering av variabel, postdekrementering\n" @@ -3748,25 +3992,32 @@ msgstr "" " uttryck. Variablerna behöver inte ha sina heltalsattribut påslagna för\n" " att användas i ett uttryck.\n" " \n" -" Operatorer beräknas i precedensordning. Deluttryck i parenteser beräknas\n" +" Operatorer beräknas i precedensordning. Deluttryck i parenteser " +"beräknas\n" " först och kan åsidosätta precedensreglerna ovan.\n" " \n" " Slutstatus:\n" -" Om det sista ARG beräknas till 0, returnerar let 1; let returnerar 0 annars." +" Om det sista ARG beräknas till 0, returnerar let 1; let returnerar 0 " +"annars." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3774,11 +4025,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3796,15 +4050,19 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Läs en rad från standard in och dela upp den i fält.\n" " \n" " Läser en ensam rad från standard in, eller från filbeskrivare FB om\n" -" flaggan -u ges. Raden delas upp i fält som vid orduppdelning, och första\n" -" ordet tilldelas det första NAMNet, andra ordet till det andra NAMNet, och\n" +" flaggan -u ges. Raden delas upp i fält som vid orduppdelning, och " +"första\n" +" ordet tilldelas det första NAMNet, andra ordet till det andra NAMNet, " +"och\n" " så vidare, med eventuella återstående ord tilldelade till det sista\n" " NAMNet. Endast tecknen som finns i $IFS används som ordavgränsare. Som\n" " standard skyddar tecknet omvänt snedstreck avgränsningstecken och\n" @@ -3813,7 +4071,8 @@ msgstr "" " Om inga NAMN anges, lagras den inlästa raden i variabeln REPLY.\n" " \n" " Flaggor:\n" -" -a vektor\ttilldela de inlästa orden till sekventiella index i vektor-\n" +" -a vektor\ttilldela de inlästa orden till sekventiella index i " +"vektor-\n" " \t\tvariabeln VEKTOR, med start från noll\n" " -d avgr\tfortsätt tills det första tecknet i AVGR lästs, istället för\n" " \t\tnyrad\n" @@ -3822,7 +4081,8 @@ msgstr "" " -n ntkn\treturnera efter att ha läst NTKN tecken istället för att\n" " \t\tvänta på en nyrad, men ta hänsyn till en avgränsare om färre\n" " \t\tän NTKN tecken lästs före avgränsaren\n" -" -N ntkn\treturnera endast efter att ha läst exakt NTKN tecken, om inte\n" +" -N ntkn\treturnera endast efter att ha läst exakt NTKN tecken, om " +"inte\n" " \t\tfilslut påträffades eller tidsgränsen överskreds, ignorera\n" " \t\talla avgränsare\n" " -p prompt\tskriv ut strängen PROMPT utan en avslutande nyrad före\n" @@ -3833,17 +4093,19 @@ msgstr "" " \t\tkomplett rad lästs inom TIDSGRÄNS sekunder. Värdet på variabeln\n" " \t\tTMOUT är standardvärdet på tidsgränsen. TIDSGRÄNS kan vara ett\n" " \t\tdecimaltal. Om TIDSGRÄNS är 0 returnerar read direkt, utan\n" -" att försöka läsa några data, och returnerar lyckad status bara\n" +" att försöka läsa några data, och returnerar lyckad status " +"bara\n" "\t\tom det finns indata tillgängligt på den angivna filbeskrivaren.\n" " Slutstatus är större än 128 om tidsgränsen överskrids\n" " -u fb\tläs från filbeskrivare FB istället för standard in\n" " \n" " Slutstatus:\n" " Returkoden är noll om inte filslut nås, läsningens tidsgräns överskrids\n" -" (då den är större än 128), ett fel vid variabeltilldelning inträffar eller\n" +" (då den är större än 128), ett fel vid variabeltilldelning inträffar " +"eller\n" " en ogiltig filbeskrivare ges som argument till -u." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3864,7 +4126,8 @@ msgstr "" " Returnerar N, eller misslyckande om skalet inte kör en funktion eller\n" " skript." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3907,7 +4170,8 @@ 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" @@ -3931,13 +4195,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3958,7 +4227,8 @@ msgstr "" " -e Avsluta omedelbart om ett kommando avslutar med nollskild status.\n" " -f Avaktivera filnamnsgenerering (globbing).\n" " -h Kom ihåg platsen för kommandon när de slås upp.\n" -" -k Alla tilldelningsargument placeras i miljön för ett kommando, inte\n" +" -k Alla tilldelningsargument placeras i miljön för ett kommando, " +"inte\n" " bara de som föregår kommandonamnet.\n" " -m Jobbstyrning är aktiverat.\n" " -n Läs kommandon men exekvera dem inte.\n" @@ -3973,7 +4243,8 @@ msgstr "" " hashall samma som -h\n" " histexpand samma som -H\n" " history aktivera kommandohistoria\n" -" ignoreeof skalet kommer inte avsluta vid läsning av filslut\n" +" ignoreeof skalet kommer inte avsluta vid läsning av " +"filslut\n" " interactive-comments\n" " tillåt kommentarer att förekomma i interaktiva\n" " kommandon\n" @@ -4000,7 +4271,8 @@ msgstr "" " xtrace samma som -x\n" " -p Slås på när den verkliga och effektiva användar-id:n inte stämmer\n" " överens. Avaktiverar bearbetning av $ENV-filen och import av\n" -" skalfunktioner. Att slå av denna flagga får den effektiva uid och\n" +" skalfunktioner. Att slå av denna flagga får den effektiva uid " +"och\n" " gid att sättas till den verkliga uid och gid.\n" " -t Avsluta efter att ha läst och exekverat ett kommando.\n" " -u Behandla osatta variabler som fel vid substitution.\n" @@ -4015,13 +4287,16 @@ msgstr "" " -P Om satt löses inte symboliska länkar upp när kommandon såsom cd\n" " körs som ändrar aktuell katalog.\n" " -T Om satt ärvs DEBUG och RETURN-fällorna av skalfunktioner.\n" -" -- Tilldela eventuella återstående argument till positionsparametrar.\n" +" -- Tilldela eventuella återstående argument till " +"positionsparametrar.\n" " Om det inte finns några återstående argument nollställs\n" " positionsparametrarna.\n" -" - Tilldela eventuella återstående argument till positionsparametrar.\n" +" - Tilldela eventuella återstående argument till " +"positionsparametrar.\n" " Flaggorna -x och -v slås av.\n" " \n" -" Användning av + istället för - får dessa flaggor att slås av. Flaggorna\n" +" Användning av + istället för - får dessa flaggor att slås av. " +"Flaggorna\n" " kan även användas vid uppstart av skalet. Den aktuella uppsättningen\n" " flaggor finns i $-. De återstående n ARGumenten är positionsparametrar\n" " och tilldelas, i ordning, till $1, $2, .. $n. Om inga ARGument ges\n" @@ -4030,7 +4305,7 @@ msgstr "" " Slutstatus:\n" " Returnerar framgång om inte en ogiltig flagga ges." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4042,7 +4317,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4069,12 +4345,13 @@ msgstr "" " Returnerar framgång om inte en ogiltig flagga ges eller NAMN endast är\n" " läsbart." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4101,7 +4378,7 @@ msgstr "" " Slutstatus:\n" " Returnerar framgång om inte en ogiltig flagga ges eller NAMN är ogiltigt." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4139,7 +4416,7 @@ msgstr "" " Slutstatus:\n" " Returnerar framgång om inte en ogiltig flagga ges eller NAMN är ogiltigt." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4151,13 +4428,14 @@ msgid "" msgstr "" "Skifta positionsparametrar.\n" " \n" -" Byt namn på positionsparametrarna $N+1,$N+2 ... till $1,$2 ... Om N inte\n" +" Byt namn på positionsparametrarna $N+1,$N+2 ... till $1,$2 ... Om N " +"inte\n" " anges antas det vara 1.\n" " \n" " Slutstatus:\n" " Returnerar framgång om inte N är negativt eller större än $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4172,7 +4450,8 @@ msgid "" msgstr "" "Exekvera kommandon från en fil i det aktuella skalet.\n" " \n" -" Läs och exekvera kommandon från FILNAMN i det aktuella skalet. Posterna\n" +" Läs och exekvera kommandon från FILNAMN i det aktuella skalet. " +"Posterna\n" " i $PATH används för att hitta katalogen som innehåller FILNAMN. Om\n" " något ARGUMENT ges blir de positionsparametrar när FILNAMN körs.\n" " \n" @@ -4180,15 +4459,18 @@ msgstr "" " Returnerar status på det sista kommandot som körs i FILNAMN, misslyckas\n" " om FILNAMN inte kan läsas." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4202,10 +4484,11 @@ msgstr "" " -f\tframtvinga suspendering, även om skalet är ett inloggningsskal\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte jobbstyrning inte är aktiverat eller ett fel\n" +" Returnerar framgång om inte jobbstyrning inte är aktiverat eller ett " +"fel\n" " inträffar." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4239,7 +4522,8 @@ 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" @@ -4260,7 +4544,8 @@ 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" @@ -4346,7 +4631,8 @@ msgstr "" " \n" " -o FLAGGA Sant om skalflaggan FLAGGA är aktiv.\n" " -v VAR Sant om skalvariabeln VAR är satt.\n" -" -R VAR Sant om skalvariabeln VAR är satt och är en namnreferens.\n" +" -R VAR Sant om skalvariabeln VAR är satt och är en " +"namnreferens.\n" " ! UTTR Sant om uttr är falskt.\n" " UTTR1 -a UTTR2 Sant om både uttr1 OCH uttr2 är sanna.\n" " UTTR1 -o UTTR2 Sant om antingen uttr1 ELLER uttr2 är sanna.\n" @@ -4362,7 +4648,7 @@ msgstr "" " Returnerar framgång om UTTR beräknas till sant. Misslyckas ifall UTTR\n" " beräknas till falskt eller ett ogiltigt argument ges." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4374,11 +4660,12 @@ msgstr "" " Detta är en synonym till det inbyggda ”test”, men det sista argumentet\n" " måste vara en bokstavlig ”]”, för att matcha den inledande ”[”." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4386,45 +4673,61 @@ msgid "" msgstr "" "Visa processtider.\n" " \n" -" Skriver ut den sammanlagda användar- och systemtiden för skalet och alla\n" +" Skriver ut den sammanlagda användar- och systemtiden för skalet och " +"alla\n" " dess barnprocesser.\n" " \n" " Slutstatus:\n" " Lyckas alltid." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "Fånga signaler och andra händelser.\n" " \n" @@ -4444,7 +4747,8 @@ msgstr "" " SIGNALSPEC ERR betyder att köra ARG varje gång ett kommandos felstatus\n" " skulle fått skalet att avsluta om flaggan -e vore satt.\n" " \n" -" Om inga argument ges skriver trap listan av kommandon som hör till varje\n" +" Om inga argument ges skriver trap listan av kommandon som hör till " +"varje\n" " signal.\n" " \n" " Flaggor:\n" @@ -4456,10 +4760,11 @@ msgstr "" " frivilligt. En signal kan skickas till skalet med ”kill -signal $$”.\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte en SIGSPEC är ogiltig eller en ogiltig flagga\n" +" Returnerar framgång om inte en SIGSPEC är ogiltig eller en ogiltig " +"flagga\n" " ges." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4485,7 +4790,8 @@ 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 "" "Visa information om kommandotyper.\n" " \n" @@ -4513,11 +4819,13 @@ msgstr "" " Slutstatus:\n" " Returnerar framgång om alla NAMNen finns, misslyckas om något inte finns." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4554,16 +4862,18 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Modifiera skalresursgränser.\n" " \n" -" Ger kontroll över resurserna som är tillgängliga till skalet och processer\n" +" Ger kontroll över resurserna som är tillgängliga till skalet och " +"processer\n" " det skapar, på system som möjliggör sådan styrning.\n" " \n" " Flaggor:\n" @@ -4598,17 +4908,20 @@ msgstr "" " \n" " Om GRÄNS anges är det ett nytt värde för den specificerade resursen; de\n" " speciella GRÄNS-värdena ”soft”, ”hard” och ”unlimited” står för den\n" -" aktuella mjuka gränsen, den aktuella hårda gränsen respektive ingen gräns.\n" +" aktuella mjuka gränsen, den aktuella hårda gränsen respektive ingen " +"gräns.\n" " Annars skrivs det aktuella värdet på den specificerade resursen. Om\n" " ingen flagga ges antas -f.\n" " \n" -" Värden är i 1024-bytesteg, utom för -t som är i sekunder, -p som är i steg\n" +" Värden är i 1024-bytesteg, utom för -t som är i sekunder, -p som är i " +"steg\n" " på 512 byte och -u som är ett antal processer utan någon skalning.\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte en ogiltig flagga anges eller ett fel inträffar." +" Returnerar framgång om inte en ogiltig flagga anges eller ett fel " +"inträffar." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4630,7 +4943,8 @@ msgstr "" " Sätter användarens filskapningsmask till RÄTTIGHETER. Om RÄTTIGHETER\n" " utelämnas skrivs det aktuella värdet på masken.\n" " \n" -" Om RÄTTIGHETER börjar med en siffra tolkas det som ett oktalt tal, annars\n" +" Om RÄTTIGHETER börjar med en siffra tolkas det som ett oktalt tal, " +"annars\n" " är det en symbolisk rättighetssträng som den som tas av chmod(1).\n" " \n" " Flaggor:\n" @@ -4639,26 +4953,31 @@ msgstr "" " -S\tgör utmatningen symbolisk, annars används oktala tal\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte RÄTTIGHETER är ogiltig eller en ogiltig flagga\n" +" Returnerar framgång om inte RÄTTIGHETER är ogiltig eller en ogiltig " +"flagga\n" " ges." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4674,10 +4993,12 @@ msgstr "" " Väntar på varje process som identifieras av ett ID, som kan vara en\n" " process-id eller en jobbspecifikation, och rapportera dess\n" " avslutningsstatus. Om ID inte ges, vänta på alla nu körande\n" -" barnprocesser, och returstatus är noll. Om ID är en jobbspecifikation, \n" +" barnprocesser, och returstatus är noll. Om ID är en " +"jobbspecifikation, \n" " vänta på alla processer i det jobbets rör.\n" " \n" -" Om flaggan -n ges väntar på ett enda jobb från listan av ID:n, eller, om\n" +" Om flaggan -n ges väntar på ett enda jobb från listan av ID:n, eller, " +"om\n" " inga ID:n ges, nästa jobb som avslutar och returnera dess slutstatus.\n" " \n" " Om flaggan -p ges tilldelas till variabeln VAR som ges som ges som\n" @@ -4692,16 +5013,18 @@ msgstr "" " Returnerar status på den sista ID, misslyckas ifall ID är ogiltig\n" " eller en ogiltig flagga ges." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Vänta på att en process blir färdig och returnerar slutstatus.\n" @@ -4714,7 +5037,16 @@ msgstr "" " Returnerar status på den sista PID, misslyckas ifall PID är ogiltig\n" " eller en ogiltig flagga ges." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4736,7 +5068,7 @@ msgstr "" " Slutstatus:\n" " Returnerar status för det sist exekverade kommandot." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4766,7 +5098,7 @@ msgstr "" " Slutstatus:\n" " Returnerar statusen från det sist exekverade kommandot." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4801,7 +5133,7 @@ msgstr "" " Slutstatus:\n" " Returnerar statusen från det sist exekverade kommandot." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4830,7 +5162,7 @@ msgstr "" " Slutstatus:\n" " Returstatusen är returstatusen från RÖR." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4848,16 +5180,21 @@ msgstr "" " Slutstatus:\n" " Returnerar statusen från det sist exekverade kommandot." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4865,10 +5202,12 @@ msgid "" msgstr "" "Exekvera kommandon baserat på ett villkor.\n" " \n" -" Listan ”if KOMMANDON” exekveras. Om dess slutstatus är noll så exekveras\n" +" Listan ”if KOMMANDON” exekveras. Om dess slutstatus är noll så " +"exekveras\n" " listan ”then KOMMANDON”. Annars exekveras varje lista ”elif KOMMANDON”\n" " i tur och ordning, och om dess slutstatus är noll exekveras motsvarande\n" -" lista ”then KOMMANDON” och if-kommandot avslutar. Annars exekveras listan\n" +" lista ”then KOMMANDON” och if-kommandot avslutar. Annars exekveras " +"listan\n" " ”else KOMMANDON” om den finns. Slutstatus av hela konstruktionen är\n" " slutstatusen på det sist exekverade kommandot, eller noll om inget\n" " villkor returnerade sant.\n" @@ -4876,11 +5215,12 @@ msgstr "" " Slutstatus:\n" " Returnerar status från det sist exekverade kommandot." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4894,11 +5234,12 @@ msgstr "" " Slutstatus:\n" " Returnerar statusen från det sist exekverade kommandot." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4912,7 +5253,7 @@ msgstr "" " Slutstatus:\n" " Returnerar statusen från det sist exekverade kommandot." -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4934,12 +5275,13 @@ msgstr "" " Slutstatus:\n" " Kommandot coproc returnerar slutstatusen 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4956,7 +5298,7 @@ msgstr "" " Slutstatus:\n" " Returnerar framgång om inte NAMN endast är läsbart." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4974,7 +5316,7 @@ msgstr "" " Slutstatus:\n" " Returnerar statusen från det sist exekverade kommandot." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4998,7 +5340,7 @@ msgstr "" " Slutstatus:\n" " Returnerar statusen på det återupptagna jobbet." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5016,13 +5358,16 @@ msgstr "" " Slutstatus:\n" " Returnerar 1 om UTTRYCK beräknas till 0, returnerar 0 annars." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5043,7 +5388,8 @@ msgstr "" "Kör ett villkorligt kommando.\n" " \n" " Returnerar en status av 0 eller 1 beroende på evalueringen av det\n" -" villkorliga uttrycket UTTRYCK. Uttryck är sammansatta av samma primitiver\n" +" villkorliga uttrycket UTTRYCK. Uttryck är sammansatta av samma " +"primitiver\n" " som används av det inbyggda ”test”, och kan kombineras med följande\n" " operatorer:\n" " \n" @@ -5054,7 +5400,8 @@ msgstr "" " falskt\n" " \n" " När operatorerna ”==” och ”!=” används används strängen till höger om\n" -" som ett mönster och mönstermatchning utförs. När operatorn ”=~” används\n" +" som ett mönster och mönstermatchning utförs. När operatorn ”=~” " +"används\n" " matchas strängen till höger om operatorn som ett reguljärt uttryck.\n" " \n" " Operatorerna && och || beräknar inte UTTR2 om UTTR1 är tillräckligt för\n" @@ -5063,7 +5410,7 @@ msgstr "" " Slutstatus:\n" " 0 eller 1 beroende på värdet av UTTRYCK." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5168,7 +5515,7 @@ msgstr "" " HISTIGNORE\tEn kolonseparerad lista av mönster som används för att\n" " \t\tbestämma vilka kommandon som skall sparas i historielistan.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5226,7 +5573,7 @@ msgstr "" " Returnerar framgång om inte ett ogiltigt argument ges eller bytet av\n" " katalog misslyckas." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5276,7 +5623,7 @@ msgstr "" " Returnerar framgång om inte ett ogiltigt argument ges eller bytet av\n" " katalog misslyckas." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5326,9 +5673,10 @@ msgstr "" " \t\tav dirs när det anropas utan flaggor, med början från noll.\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte en ogiltig flagga ges eller ett fel inträffar." +" Returnerar framgång om inte en ogiltig flagga ges eller ett fel " +"inträffar." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5364,7 +5712,8 @@ msgstr "" " Returnerar framgång om FLGNAMN är aktiverat, misslyckas om en ogiltig\n" " flagga ges eller FLGNAMN är avaktiverat." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5372,29 +5721,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Formatera och skriv ARGUMENT styrda av FORMAT.\n" @@ -5405,7 +5761,8 @@ msgstr "" " \n" " FORMAT är en teckensträng som innehåller tre sorters objekt: vanliga\n" " tecken, som helt enkelt kopieras till standard ut, teckenstyrsekvenser\n" -" som konverteras och kopieras till standard ut och formatspecifikationer,\n" +" som konverteras och kopieras till standard ut och " +"formatspecifikationer,\n" " där var och en medför utskrift av det nästföljande argumentet.\n" " \n" " Förutom de standardformatspecifikationer som beskrivs a printf(1),\n" @@ -5428,13 +5785,16 @@ msgstr "" " Returnerar framgång om inte en ogiltig flagga ges eller ett skriv-\n" " eller tilldelningsfel inträffar." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5448,8 +5808,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5475,15 +5837,22 @@ msgstr "" " flaggan -D företräde framför -E, och båda har företräde framför -I.\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte en ogiltig flagga ges eller ett fel inträffar." +" Returnerar framgång om inte en ogiltig flagga ges eller ett fel " +"inträffar." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5495,15 +5864,19 @@ msgstr "" " matchningar av ORD.\n" " \n" " Slutstatus:\n" -" Returnerar framgång om inte en ogiltig flagga ges eller ett fel inträffar." +" Returnerar framgång om inte en ogiltig flagga ges eller ett fel " +"inträffar." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5527,7 +5900,8 @@ msgid "" msgstr "" "Modifiera eller visa kompletteringsflaggor.\n" " \n" -" Modifiera kompletteringsflaggorna för varje NAMN, eller, om inga NAMN är\n" +" Modifiera kompletteringsflaggorna för varje NAMN, eller, om inga NAMN " +"är\n" " givna, den komplettering som för närvarande körs. Om ingen FLAGGA är\n" " given skrivs kompletteringsflaggorna för varje NAMN eller den aktuella\n" " kompletteringsspecifikationen.\n" @@ -5543,7 +5917,8 @@ msgstr "" " Argument:\n" " \n" " Varje NAMN refererar till ett kommando för vilket en kompletterings-\n" -" specifikation måste ha definierats tidigare med det inbyggda ”complete”.\n" +" specifikation måste ha definierats tidigare med det inbyggda " +"”complete”.\n" " Om inget NAMN ges måste compopt anropas av en funktion som just nu\n" " genererar kompletteringar, och flaggorna för den just nu exekverande\n" " kompletteringsgeneratorn modifieras.\n" @@ -5552,21 +5927,26 @@ msgstr "" " Returnerar framgång om inte en ogiltig flagga ges eller NAMN inte har\n" " någon kompletteringsspecifikation definierad." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5579,11 +5959,13 @@ msgid "" " element to be assigned and the line to be assigned to that element\n" " as additional arguments.\n" " \n" -" If not supplied with an explicit origin, mapfile will clear ARRAY before\n" +" If not supplied with an explicit origin, mapfile will clear ARRAY " +"before\n" " assigning to it.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or ARRAY is readonly or\n" +" Returns success unless an invalid option is given or ARRAY is readonly " +"or\n" " not an indexed array." msgstr "" "Läs rader från standard in till en indexerad vektorvariabel.\n" @@ -5594,8 +5976,10 @@ msgstr "" " \n" " Flaggor:\n" " -d avgr Använd AVGR för att avsluta rader, istället för nyrad\n" -" -n antal\tKopiera högs ANTAL rader. Om ANTAL är 0 kopieras alla rader\n" -" -O start\tBörja tilldela till VEKTOR vid index START. Standardindex är 0\n" +" -n antal\tKopiera högs ANTAL rader. Om ANTAL är 0 kopieras alla " +"rader\n" +" -O start\tBörja tilldela till VEKTOR vid index START. Standardindex " +"är 0\n" " -s antal \tSläng de första ANTAL inlästa raderna\n" " -t\tTa bort en avslutande AVGR från varje inläst rad (nyrad som\n" " standard)\n" @@ -5608,17 +5992,19 @@ msgstr "" " VEKTOR\tNamn på vektorvariabel att använda för fildata\n" " \n" " Om -C ges utan -c är standardkvanta 5000. När ÅTERANROP evalueras får\n" -" den indexet på nästa vektorelement att tilldelas och raden att tilldelas\n" +" den indexet på nästa vektorelement att tilldelas och raden att " +"tilldelas\n" " till det elementet som extra argument.\n" " \n" -" Om det inte ges någon specificerad start kommer mapfile nollställa VEKTOR\n" +" Om det inte ges någon specificerad start kommer mapfile nollställa " +"VEKTOR\n" " före tilldelning till den.\n" " \n" " Slutstatus:\n" " Returnerar framgång om inte en ogiltig flagga ges eller VEKTOR är\n" " oföränderlig eller inte en indexerad vektor." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5627,3 +6013,29 @@ msgstr "" "Läs rader från en fil till en vektorvariabel.\n" " \n" " En synonym till ”mapfile”." + +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Returnerar kontexten för det aktuella subrutinsanropet.\n" +#~ " \n" +#~ " Utan UTTR, returneras ”$rad $filnamn”. Med UTTR, returneras\n" +#~ " ”$rad $subrutin $filnamn”. Denna extra information kan användas för\n" +#~ " att ge en stackspårning.\n" +#~ " \n" +#~ " Värdet på UTTR indikerar hur många anropsramar att gå tillbaka före " +#~ "den\n" +#~ " aktuella, toppramen är ram 0." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "varning: %s: %s" diff --git a/po/tr.gmo b/po/tr.gmo index ecd482e3a2b19548df610e56b5b5c57788743c04..ee1f2854a983dceb7877db6c457fcc04249bfb7b 100644 GIT binary patch delta 12160 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 delta 33011 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 Mr#W>U=bKObZ=M?(b^rhX diff --git a/po/tr.po b/po/tr.po index f0a7e8428..7206e22c2 100644 --- a/po/tr.po +++ b/po/tr.po @@ -5,145 +5,142 @@ # Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2006. # Volkan Gezer <vlkngzr@gmail.com>, 2013, 2014, 2017. # Emir SARI <emir_sari@icloud.com>, 2022 +# Muhammet Kara <muhammetk@gmail.com>, 2024. # msgid "" msgstr "" -"Project-Id-Version: bash-5.1\n" +"Project-Id-Version: bash-5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 12:51-0500\n" -"PO-Revision-Date: 2022-04-11 23:00+0300\n" -"Last-Translator: Emir SARI <emir_sari@icloud.com>\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" +"PO-Revision-Date: 2024-02-13 22:49+0300\n" +"Last-Translator: Muhammet Kara <muhammetk@gmail.com>\n" "Language-Team: Turkish <gnome-turk@gnome.org>\n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Generator: Lokalize 2.0\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Gtranslator 45.3\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "hatalı dizilim indisi" -#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300 -#: variables.c:3133 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: nameref özniteliği kaldırılıyor" -#: arrayfunc.c:446 builtins/declare.def:851 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: indisli dizilim, ilişkisel dizilime dönüştürülemez" -#: arrayfunc.c:700 -#, c-format -msgid "%s: invalid associative array key" -msgstr "%s: geçersiz ilişkisel dizilim anahtarı" - -#: arrayfunc.c:702 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: sayısal olmayan indise atama yapılamaz" -#: arrayfunc.c:747 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: ilişkisel bir dizilim ataması yapılırken indis kullanılmalıdır" -#: bashhist.c:452 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: oluşturulamıyor: %s" -#: bashline.c:4310 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: komut için kısayol bulunamıyor" -#: bashline.c:4459 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: boşluk olmayan ilk karakter `\"' değil" -#: bashline.c:4488 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "%2$s içinde kapatan `%1$c' yok" -#: bashline.c:4519 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: iki nokta imi eksik" -#: bashline.c:4555 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "`%s': komut düğme eşleminde bağıntı kaldırılamıyor" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "destek genişletme: %s için bellek ayrılamıyor" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "destek genişletme: %u öge için bellek ayrılamıyor" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "destek genişletme: `%s' için bellek ayrılamıyor" -#: builtins/alias.def:131 variables.c:1844 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "`%s': geçersiz takma ad" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "satır düzenleme etkin değil" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "`%s': düğme eşlem adı geçersiz" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: okunamıyor: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "`%s': işlev adı bilinmiyor" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s için bir kısayol atanmamış.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s bunun üzerinden çağrılabilir: " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "`%s': kısayol değiştirilemiyor" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "döngü sayısı" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "yalnızca bir `for', `while' veya `until' döngüsünde anlamlı" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -152,355 +149,379 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" -"Geçerli altrutin çağrısının bağlamını döndürür.\n" +"Geçerli alt yordam çağrısının bağlamını döndürür.\n" " \n" -" İFADE olmadan, \"$satır $dosyaadı\" döndürür. İFADE ile \"$satır\n" -" $altrutin $dosyaadı\" döndürür; bu ek bilgi bir yığın izlemesi sağlamak\n" -" için kullanılabilir.\n" +" İFADE olmadan, \"$satır $dosyaadı\" döndürür. İFADE ile " +"kullanıldığında\n" +" \"$satır $altyordam $dosyaadı\" döndürür; bu ek bilgi bir yığın izi " +"sağlamak\n" +" için kullanılabilir.\n" " \n" -" İFADE'nin değeri, geçerli çağrı biriminden önce kaç tane geri gidilmesi\n" -" gerektiğini belirtir; en üst çerçeve, 0. çerçevedir." +" İFADE değeri, geçerli çerçeveden önce kaç tane çerçeve çağrılacağını\n" +" belirtir. Üst çerçeve 0. çerçevedir. \n" +" Çıkış Durumu:\n" +" İFADE geçersiz olmadığı ve bir kabuk işlevi çalıştırmadığı durumda 0 " +"döndürür." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME atanmamış" -#: builtins/cd.def:335 builtins/common.c:161 test.c:901 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "pek fazla argüman" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "boş dizini" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD boş" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "%d. satır: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "uyarı: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: kullanım: " -#: builtins/common.c:193 shell.c:516 shell.c:844 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: seçenek bir argüman gerektiriyor" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: sayısal argüman gerekiyor" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: yok" -#: builtins/common.c:216 shell.c:857 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: seçenek geçersiz" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: seçenek adı geçersiz" -#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "`%s': geçerli bir tanımlayıcı değil" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "geçersiz sekizli sayı" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "geçersiz onaltılık sayı" -#: builtins/common.c:244 expr.c:1569 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "geçersiz sayı" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: sinyal belirtimi geçersiz" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "`%s': geçerli bir iş belirtimi veya süreç numarası değil" -#: builtins/common.c:266 error.c:510 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: saltokunur değişken" -#: builtins/common.c:274 +#: builtins/common.c:248 +#, c-format +msgid "%s: cannot assign" +msgstr "%s: atanamaz" + +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s erim dışı" -#: builtins/common.c:274 builtins/common.c:276 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "argüman" -#: builtins/common.c:276 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s erim dışı" -#: builtins/common.c:284 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: böyle bir iş yok" -#: builtins/common.c:292 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: iş denetimi yok" -#: builtins/common.c:294 +#: builtins/common.c:273 msgid "no job control" msgstr "iş denetimi yok" -#: builtins/common.c:304 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: kısıtlı" -#: builtins/common.c:306 +#: builtins/common.c:284 msgid "restricted" msgstr "kısıtlı" -#: builtins/common.c:314 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: bir kabuk yerleşiği değil" -#: builtins/common.c:323 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "yazma hatası: %s" -#: builtins/common.c:331 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "uçbirim öznitelikleri ayarlanırken hata: %s" -#: builtins/common.c:333 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "uçbirim öznitelikleri alınırken hata: %s" -#: builtins/common.c:635 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: geçerli dizin alınırken hata: %s: %s\n" -#: builtins/common.c:701 builtins/common.c:703 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: iş belirtimi belirsiz" -#: builtins/common.c:964 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "bu sürümde yardım kullanılamıyor" -#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: bir sıralı dizi değil" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: unset yapılamaz: %s saltokunur" -#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: unset yapılamaz" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: eylem adı geçersiz" -#: builtins/complete.def:486 builtins/complete.def:634 -#: builtins/complete.def:865 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: tamamlama belirtimi yok" -#: builtins/complete.def:688 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "uyarı: -F seçeneği umduğunuz gibi çalışmayabilir" -#: builtins/complete.def:690 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "uyarı: -C seçeneği umduğunuz gibi çalışmayabilir" -#: builtins/complete.def:838 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "şuan tamamlama işlevi çalıştırılmıyor" -#: builtins/declare.def:134 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "yalnızca bir işlevde kullanılabilir" -#: builtins/declare.def:363 builtins/declare.def:756 +#: builtins/declare.def:472 +msgid "cannot use `-f' to make functions" +msgstr "işlev yapmak için `-f' kullanılamaz" + +#: builtins/declare.def:500 execute_cmd.c:6249 +#, c-format +msgid "%s: readonly function" +msgstr "%s: saltokunur işlev" + +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: başvuru değeri bir dizilim olamaz" -#: builtins/declare.def:374 variables.c:3385 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: nameref değişkeninin kendine yaptığı başvurulara izin verilmiyor" -#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312 -#: variables.c:3382 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: çembersel ad başvurusu" -#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "%s: ad başvuarusu için geçersiz değişken adı" -#: builtins/declare.def:514 -msgid "cannot use `-f' to make functions" -msgstr "işlev yapmak için `-f' kullanılamaz" - -#: builtins/declare.def:526 execute_cmd.c:5986 -#, c-format -msgid "%s: readonly function" -msgstr "%s: saltokunur işlev" - -#: builtins/declare.def:824 -#, c-format -msgid "%s: quoted compound array assignment deprecated" -msgstr "%s: alıntılanmış bileşik dizi ataması artık kullanılmıyor" - -#: builtins/declare.def:838 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: dizi değişkenleri bu yolla iptal edilemez" -#: builtins/declare.def:845 builtins/read.def:815 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: ilişkisel dizilim, indisli dizilime dönüştürülemez" -#: builtins/enable.def:143 builtins/enable.def:151 +#: builtins/declare.def:947 +#, c-format +msgid "%s: quoted compound array assignment deprecated" +msgstr "%s: alıntılanmış bileşik dizi ataması artık kullanılmıyor" + +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "devingen yükleme olanaklı değil" -#: builtins/enable.def:343 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "%s paylaşımlı nesnesi açılamıyor: %s" -#: builtins/enable.def:371 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "%2$s paylaşımlı nesnesinde %1$s bulunamıyor: %3$s" -#: builtins/enable.def:388 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: devinen yerleşiği halihazırda yüklenmiş" -#: builtins/enable.def:392 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "%s için yükleme işlevi hata döndürdü (%d): yüklenmedi" -#: builtins/enable.def:517 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: devingen olarak yüklenmemiş" -#: builtins/enable.def:543 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: silinemiyor: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: bir dizin" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: bir dosya değil" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: dosya çok büyük" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: ikili dosya çalıştırılamıyor" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: çalıştırılamıyor: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "çıkış\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "oturum açma kabuğu değil: `exit' kullanın" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Durmuş işler var.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Çalışan görevler mevcut.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "komut yok" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "geçmiş belirtimi" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: geçici dosya açılamıyor: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "geçerli" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "%d. iş, iş denetimsiz başlamış" @@ -515,11 +536,11 @@ msgstr "%s: kural dışı seçenek -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: seçenek bir argüman gerektiriyor -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "sağlama iptal edildi" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: sağlama tablosu boş\n" @@ -545,15 +566,18 @@ msgstr "" #: builtins/help.def:185 #, c-format -msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "`%s' ile ilgili yardım konusu yok. `help help', `man -k %s', `info %s' yazmayı deneyin." +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"`%s' ile ilgili yardım konusu yok. `help help', `man -k %s', `info %s' " +"yazmayı deneyin." -#: builtins/help.def:224 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: açılamıyor: %s" -#: builtins/help.def:524 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -565,7 +589,8 @@ msgid "" "\n" msgstr "" "Bu kabuk komutları dahili olarak tanımlı. Listeyi görmek için `help'yazın.\n" -"`AD' gibi bir işlev hakkında bilgi almak için `help AD' yazın. Kabuk hakkında\n" +"`AD' gibi bir işlev hakkında bilgi almak için `help AD' yazın. Kabuk " +"hakkında\n" "genel bir bilgi edinmek için `info bash' yazın.\n" "Bu listede olmayan\n" "komutlar hakkında bilgi bulmak isterseniz `man -k' veya `info' yazın.\n" @@ -573,21 +598,31 @@ msgstr "" "Bir adın yanında bir yıldız imi (*) varsa komut iptal edilmiş demektir.\n" "\n" -#: builtins/history.def:155 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "tek bir -anrw kullanılabilir" -#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213 -#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "geçmiş konumu" -#: builtins/history.def:340 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "boş bir dizilim değişken adı" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parametre boş veya değer atanmamış" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: geçersiz zaman damgası" -#: builtins/history.def:451 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: geçmiş yorumlaması başarısız" @@ -601,113 +636,113 @@ msgstr "%s: inlib başarısız" msgid "no other options allowed with `-x'" msgstr "`-x' ile başka seçenek kullanılamaz" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: argümanlar süreç veya iş kimlikleri olmalı" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Bilinmeyen hata" -#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "ifade bekleniyordu" -#: builtins/mapfile.def:178 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: bir sıralı dizi değil" - -#: builtins/mapfile.def:271 builtins/read.def:308 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: dosya tanıtıcı belirtimi geçersiz" -#: builtins/mapfile.def:279 builtins/read.def:315 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: dosya açıklayıcısı geçersiz: %s" -#: builtins/mapfile.def:288 builtins/mapfile.def:326 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: geçersiz satır sayısı" -#: builtins/mapfile.def:299 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: geçersiz dizilim kökeni" -#: builtins/mapfile.def:316 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: geçersiz geri çağırım niceliği" -#: builtins/mapfile.def:349 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "boş bir dizilim değişken adı" -#: builtins/mapfile.def:370 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "dizi değişken desteği gerekli" -#: builtins/printf.def:419 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "`%s': biçim karakteri eksik" -#: builtins/printf.def:474 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "`%c': geçersiz zaman biçimi belirtimi" -#: builtins/printf.def:676 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "`%c': biçim karakteri geçersiz" -#: builtins/printf.def:702 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "uyarı: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:788 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "biçim ayrıştırma sorunu: %s" -#: builtins/printf.def:885 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "\\x için onaltılık rakam eksik" -#: builtins/printf.def:900 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "\\%c için unicode rakamı eksik" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "başka dizin yok" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: geçersiz argüman" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<geçerli dizin yok>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "dizin yığını boş" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "dizin yığını indisi" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -722,10 +757,12 @@ 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 "" "Geçerli hatırlanan dizinlerin listesini görüntüler. Dizinler\n" @@ -747,7 +784,7 @@ msgstr "" " -N\tDizinler tarafından gösterilen listenin sağından başlayarak\n" "\tN'inci girdiyi gösterir. Seçenek kullanılmadığında sıfırdan başlar." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -792,7 +829,7 @@ msgstr "" " \n" " Dizin yığınını `dirs' komutuyla görebilirsiniz." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -830,289 +867,301 @@ msgstr "" " \n" " Dizin yığınını `dirs' komutuyla görebilirsiniz." -#: builtins/read.def:280 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: zamanaşımı belirtimi geçersiz" -#: builtins/read.def:755 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "okuma hatası: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "yalnızca bir işlev veya betikten kaynaklı olarak `return' yapılabilir" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "bir işlev ve bir değişken aynı anda unset yapılamaz" -#: builtins/set.def:966 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: bir dizi değişkeni değil" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: bir işlev değil" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: export yapılamıyor" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "shift sayısı" -#: builtins/shopt.def:310 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "kabuk seçenekleri aynı anda hem atanıp hem de iptal edilemez" -#: builtins/shopt.def:428 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: kabuk seçenek adı geçersiz" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "dosya adı argüman gerekir" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: dosya yok" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "engellenemez" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "bir oturum açma kabuğu engellenemez" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s `%s' için takma addır\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s bir kabuk anahtar sözcüğüdür\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s bir işlevdir\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s özel bir kabuk yerleşiğidir\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s bir işlevdir\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s bir kabuk yerleşiğidir\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s %s'dir\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s çitilmiş (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: sınırlama argümanı geçersiz" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "`%c': hatalı komut" -#: builtins/ulimit.def:455 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: sınır alınamıyor: %s" -#: builtins/ulimit.def:481 +#: builtins/ulimit.def:492 msgid "limit" msgstr "sınır" -#: builtins/ulimit.def:493 builtins/ulimit.def:793 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: sınır değiştirilemiyor: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "sekizlik sayı" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "`%c': simgesel kip işleci geçersiz" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "`%c': simgesel kip karakteri geçersiz" -#: error.c:89 error.c:347 error.c:349 error.c:351 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " satır " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "son komut: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Çıkılıyor..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "BİLGİLENDİR: " -#: error.c:462 +#: error.c:261 +#, c-format +msgid "DEBUG warning: " +msgstr "HATA-AYIKLAMA uyarısı: " + +#: error.c:413 msgid "unknown command error" msgstr "bilinmeyen komut hatası" -#: error.c:463 +#: error.c:414 msgid "bad command type" msgstr "hatalı komut türü" -#: error.c:464 +#: error.c:415 msgid "bad connector" msgstr "hatalı bağlantı" -#: error.c:465 +#: error.c:416 msgid "bad jump" msgstr "hatalı sıçrama" -#: error.c:503 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: bağlanmamış değişken" -#: eval.c:242 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\agirdi beklerken zamanaşımı: auto-logout\n" -#: execute_cmd.c:537 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "/dev/null'dan standart girdiye yönlendirme yapılamaz: %s" -#: execute_cmd.c:1297 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': biçim karakteri geçersiz" -#: execute_cmd.c:2362 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] hala mevcut" -#: execute_cmd.c:2486 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "iletişim tüneli hatası" -#: execute_cmd.c:4793 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: azami eval yuvalama sınırı aşıldı (%d)" -#: execute_cmd.c:4805 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: azami kaynak yuvalama sınırı aşıldı (%d)" -#: execute_cmd.c:4913 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: azami işlev yuvalama sınırı aşıldı (%d)" -#: execute_cmd.c:5467 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: kısıtlı: komut adında `/' kullanamazsınız" -#: execute_cmd.c:5574 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: komut yok" -#: execute_cmd.c:5816 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" - -#: execute_cmd.c:5854 +#: execute_cmd.c:6118 #, c-format msgid "%s: %s: bad interpreter" msgstr "%s: %s: hatalı yorumlayıcı" -#: execute_cmd.c:5891 +#: execute_cmd.c:6127 #, c-format -msgid "%s: cannot execute binary file: %s" -msgstr "%s: ikili dosya çalıştırılamıyor: %s" +msgid "%s: cannot execute: required file not found" +msgstr "%s: çalıştırılamıyor: gerekli dosya bulunamadı" -#: execute_cmd.c:5977 +#: execute_cmd.c:6164 #, c-format -msgid "`%s': is a special builtin" -msgstr "%s: bir kabuk yerleşiğidir" +msgid "%s: cannot execute binary file: %s" +msgstr "%s: ikili dosya çalıştırılamıyor: %s" -#: execute_cmd.c:6029 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "fd %d, fd %d olarak yinelenemiyor" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "ifade özyineleme düzeyi aşıldı" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "özyineleme yığını alttan taştı" -#: expr.c:477 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "ifadede sözdizim hatası" -#: expr.c:521 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "değişken olmayana atama yapmaya çalışıldı" -#: expr.c:530 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "değişken atamada sözdizim hatası" -#: expr.c:544 expr.c:911 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "sıfırla bölme" -#: expr.c:592 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "yazılım hatası: bad expassign token" -#: expr.c:646 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "koşullu ifade için `:' bekleniyordu" -#: expr.c:972 +#: expr.c:968 msgid "exponent less than 0" msgstr "üs sıfırdan küçük" @@ -1124,32 +1173,42 @@ msgstr "belirteç ön-arttırım veya ön-eksiltim sonrası bekleniyordu" msgid "missing `)'" msgstr "eksik `)'" -#: expr.c:1107 expr.c:1487 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "sözdizim hatası: terim umuluyordu" -#: expr.c:1489 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "sözdizim hatası: geçersiz aritmetik işleci" -#: expr.c:1513 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (hata belirtisi \"%s\")" -#: expr.c:1573 +#: expr.c:1578 msgid "invalid arithmetic base" msgstr "geçersiz sayı tabanı" -#: expr.c:1582 +#: expr.c:1587 msgid "invalid integer constant" msgstr "geçersiz tamsayı sabiti" -#: expr.c:1598 +#: expr.c:1603 msgid "value too great for base" msgstr "değer taban için fazla büyük" -#: expr.c:1647 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: ifade hatası\n" @@ -1158,186 +1217,192 @@ msgstr "%s: ifade hatası\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: üst dizinlere erişilemiyor" -#: input.c:99 subst.c:6069 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "%s: bir kabuk yerleşiğidir" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "fd %d için geciktirmeme kipi sıfırlanamıyor" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "fd %d tanıtıcısındaki bash girdisi için yeni dosya tanıtıcısı ayrılamıyor" +msgstr "" +"fd %d tanıtıcısındaki bash girdisi için yeni dosya tanıtıcısı ayrılamıyor" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: yeni fd %d için tampon zaten var" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp iletişim tüneli" -#: jobs.c:906 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:959 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1283 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "çatallanan pid %d, çalışan iş %d içinde görünüyor" -#: jobs.c:1402 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "durdurulan %2$ld süreç gruplu iş %1$d siliniyor" -#: jobs.c:1511 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: %5ld (%s) program kimliği hala canlı olarak işaretli" -#: jobs.c:1850 +#: jobs.c:1839 #, c-format msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: böyle bir pid yok" -#: jobs.c:1865 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Sinyal %d" -#: jobs.c:1879 jobs.c:1905 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Bitti" -#: jobs.c:1884 siglist.c:122 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Durdu" -#: jobs.c:1888 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Durdu(%s)" -#: jobs.c:1892 +#: jobs.c:1877 msgid "Running" msgstr "Çalışıyor" -#: jobs.c:1909 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Bitti(%d)" -#: jobs.c:1911 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Çıkış %d" -#: jobs.c:1914 +#: jobs.c:1899 msgid "Unknown status" msgstr "Bilinmeyen durum" -#: jobs.c:2001 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(çekirdek döküldü) " -#: jobs.c:2020 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2259 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "alt setpgid (şuradan: %ld şuraya: %ld)" -#: jobs.c:2617 nojobs.c:664 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld bu kabuğun bir alt sürecine ait değil" -#: jobs.c:2893 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: süreç %ld için kayıt yok" -#: jobs.c:3236 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: iş %d durdu" -#: jobs.c:3564 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: geçerli iş yok" -#: jobs.c:3571 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: iş sonlanmış" -#: jobs.c:3580 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: iş %d zaten artalanda" -#: jobs.c:3806 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: belirsiz blok önlenmek için WNOHANG açılıyor" -#: jobs.c:4320 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: satır %d: " -#: jobs.c:4334 nojobs.c:919 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (çekirdek döküldü)" -#: jobs.c:4346 jobs.c:4359 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd artık: %s)\n" -#: jobs.c:4391 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp başarısız" -#: jobs.c:4447 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: arka planda iş denetimi yok" -#: jobs.c:4463 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: satır düzeni" -#: jobs.c:4473 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4494 jobs.c:4503 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" -msgstr "uçbirim süreç grunu (%d) ayarlanamaz" +msgstr "uçbirim süreç grubu (%d) ayarlanamaz" -#: jobs.c:4508 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "bu kabukta iş denetimi yok" -#: lib/malloc/malloc.c:353 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: kanaat doğrulaması başarısız: %s\n" -#: lib/malloc/malloc.c:369 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1346,376 +1411,390 @@ msgstr "" "\r\n" "malloc: %s:%d: kanaat doğrulaması battı\r\n" -#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "bilinmeyen" -#: lib/malloc/malloc.c:882 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: serbest bırakılmış liste üstünde blok üste yazdı" -#: lib/malloc/malloc.c:972 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: zaten serbest bırakılmış blok argümanı ile çağrıldı" -#: lib/malloc/malloc.c:975 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: ayrılmamış blok argümanı ile çağrıldı" -#: lib/malloc/malloc.c:994 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: alttan taşma saptandı; mh_nbytes aralık dışında" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: alttan taşma saptandı; magic8 hasarlı" -#: lib/malloc/malloc.c:1009 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: başlangıç ve son tomar boyutları farklı" -#: lib/malloc/malloc.c:1119 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: ayrılmamış blok argümanı ile çağrıldı" -#: lib/malloc/malloc.c:1134 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: alttan taşma saptandı; mh_nbytes aralık dışında" -#: lib/malloc/malloc.c:1141 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: alttan taşma saptandı; magic8 hasarlı" -#: lib/malloc/malloc.c:1150 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: başlangıç ve son tomar boyutları farklı" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: alloc tablosu FIND_ALLOC ile dolu olabilir mi?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p zaten ayrılmış olarak tabloda değil mi?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p zaten serbest bırakılmış olarak tabloda değil mi?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "geçersiz taban" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: konak bilinmiyor" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: geçersiz hizmet" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: hatalı ağ yolu belirtimi" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "desteklenmeyen ağ işlemleri" -#: locale.c:217 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: (%s) diline değiştirilemedi" -#: locale.c:219 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: şu dile (%s) değiştirilemedi: %s" -#: locale.c:292 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: yerel (%s) değiştirilemiyor" -#: locale.c:294 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: yerel (%s) değiştirilemiyor: %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "$_'de postanız var" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "$_'de yeni postanız var" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "%s'deki posta okundu\n" -#: make_cmd.c:317 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "sözdizim hatası: aritmetik ifadesi gerekli" -#: make_cmd.c:319 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "sözdizim hatası: `;' beklenmiyordu" -#: make_cmd.c:320 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "sözdizim hatası: `((%s))'" -#: make_cmd.c:572 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: hatalı yönerge türü %d" -#: make_cmd.c:657 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "bu belgede %d satırında dosya sonu sonlandırılmış (istenen `%s')" -#: make_cmd.c:756 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: yönlendirme yönergesi `%d' aralık dışında" -#: parse.y:2393 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) SIZE_MAX değerini aşıyor (%lu): satır kırpıldı" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) SIZE_MAX değerini aşıyor (%lu): " +"satır kırpıldı" + +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "yazma hatası: %s" -#: parse.y:2826 +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "en fazla buraya belge sayısı aşıldı" -#: parse.y:3581 parse.y:3957 parse.y:4556 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "`%c' için eşleşme aranırken beklenmedik dosya sonu" -#: parse.y:4696 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "`]]' aranırken beklenmedik dosya sonu" -#: parse.y:4701 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "koşullu ifadede sözdizim hatası: beklenmedik jeton `%s'" -#: parse.y:4705 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "koşullu ifadede sözdizim hatası" -#: parse.y:4783 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "beklenmedik jeton `%s', `)' umuluyordu" -#: parse.y:4787 +#: parse.y:5025 msgid "expected `)'" msgstr "`)' umuluyordu" -#: parse.y:4815 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "koşullu tek terimli işlece beklenmedik argüman `%s'" -#: parse.y:4819 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "koşullu tek terimli işlece beklenmedik argüman" -#: parse.y:4865 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "beklenmedik jeton `%s', koşullu iki terimli işleç umuluyordu" -#: parse.y:4869 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "koşullu iki terimli işleç umuluyordu" -#: parse.y:4891 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "koşullu iki terimli işlece beklenmedik argüman `%s'" -#: parse.y:4895 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "koşullu iki terimli işlece beklenmedik argüman" -#: parse.y:4906 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "koşullu komutta beklenmeyen jeton `%c'" -#: parse.y:4909 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "koşullu komutta beklenmeyen jeton `%s'" -#: parse.y:4913 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "koşullu komutta beklenmeyen jeton %d" -#: parse.y:6336 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "beklenmeyen jeton `%s' yakınında sözdizim hatası" -#: parse.y:6355 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "`%s' yakınında sözdizim hatası" -#: parse.y:6365 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "sözdizim hatası: beklenmeyen dosya sonu" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "sözdizim hatası: beklenmeyen dosya sonu" -#: parse.y:6365 +#: parse.y:6772 msgid "syntax error" msgstr "sözdizim hatası" -#: parse.y:6428 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Kabuğu bırakmak için \"%s\" kullanın.\n" -#: parse.y:6602 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "`)' için eşleşme aranırken beklenmedik dosya sonu" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "completion: `%s' işlevi yok" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: muhtemel yeniden deneme döngüsü" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: hatalı bağlayıcı `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: geçersiz dosya tanımlayıcısı" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: BOŞ dosya işaretçisi" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1540 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': geçersiz biçim karakteri" -#: redir.c:149 redir.c:197 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "dosya tanıtıcı aralık dışında" -#: redir.c:204 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: belirsiz yönlendirme" -#: redir.c:208 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: mevcut dosyanın üzerine yazılamıyor" -#: redir.c:213 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: kısıtlı: çıktı yönlendirilemiyor" -#: redir.c:218 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "belge için geçici dosya oluşturulamıyor: %s" -#: redir.c:222 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: fd değişkene atanamıyor" -#: redir.c:649 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port ağ olmaksızın desteklenmiyor" -#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "yönlendirme hatası: fd yinelenemiyor" -#: shell.c:347 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "/tmp bulunamadı, lütfen oluşturun!" -#: shell.c:351 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp geçerli bir dizinin adı olmalıdır" -#: shell.c:804 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:948 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: geçersiz seçenek" -#: shell.c:1319 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "uid %d olarak ayarlanamıyor: etkin uid %d" -#: shell.c:1330 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "gid %d olarak ayarlanamıyor: etkin gid %d" -#: shell.c:1518 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "hata ayıklayıcı başlatılamadı, hata ayıklama devre dışı" -#: shell.c:1632 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: Bir dizin" -#: shell.c:1881 +#: shell.c:1889 msgid "I have no name!" msgstr "Adsızım ben!" -#: shell.c:2035 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, sürüm %s-(%s)\n" -#: shell.c:2036 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1724,423 +1803,451 @@ msgstr "" "Kullanım:\t%s [GNU uzun seçeneği] [seçenek] ...\n" "\t%s [GNU uzun seçeneği] [seçenek] betik-dosyası ...\n" -#: shell.c:2038 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU uzun seçenekleri:\n" -#: shell.c:2042 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Kabuk seçenekleri:\n" -#: shell.c:2043 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" -msgstr "\t-ilrsD veya -c KOMUT veya -O shopt_seçeneği\t\t(yalnızca çağrı için)\n" +msgstr "" +"\t-ilrsD veya -c KOMUT veya -O shopt_seçeneği\t\t(yalnızca çağrı için)\n" -#: shell.c:2062 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s veya -o seçeneği\n" -#: shell.c:2068 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Kabuk seçenekleriyle ilgili daha fazla bilgi için `%s -c \"help set\"' yazın.\n" +msgstr "" +"Kabuk seçenekleriyle ilgili daha fazla bilgi için `%s -c \"help set\"' " +"yazın.\n" -#: shell.c:2069 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "Kabuk yerleşik komutlarıyla ilgili bilgi almak için `%s -c help' yazın.\n" +msgstr "" +"Kabuk yerleşik komutlarıyla ilgili bilgi almak için `%s -c help' yazın.\n" -#: shell.c:2070 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "" "Yazılım hatalarını raporlamak için `bashbug' komutunu kullanınız.\n" "Çeviri hatalarını ise <gnu-tr@belgeler.org> adresine bildiriniz.\n" -#: shell.c:2072 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bash ana sayfası: <http://www.gnu.org/software/bash>\n" -#: shell.c:2073 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "GNU yazılımı kullanımı hakkında genel yardım: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"GNU yazılımı kullanımı hakkında genel yardım: <http://www.gnu.org/gethelp/>\n" -#: sig.c:757 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: geçersiz işlem" -#: siglist.c:47 +#: siglist.c:48 msgid "Bogus signal" msgstr "Bogus sinyali" -#: siglist.c:50 +#: siglist.c:51 msgid "Hangup" msgstr "Engelle" -#: siglist.c:54 +#: siglist.c:55 msgid "Interrupt" msgstr "Kes" -#: siglist.c:58 +#: siglist.c:59 msgid "Quit" msgstr "Çık" -#: siglist.c:62 +#: siglist.c:63 msgid "Illegal instruction" msgstr "Geçersiz talimat" -#: siglist.c:66 +#: siglist.c:67 msgid "BPT trace/trap" msgstr "BPT izle/tuzak" -#: siglist.c:74 +#: siglist.c:75 msgid "ABORT instruction" msgstr "Talimatı DURDUR" -#: siglist.c:78 +#: siglist.c:79 msgid "EMT instruction" msgstr "EMT talimatı" -#: siglist.c:82 +#: siglist.c:83 msgid "Floating point exception" msgstr "Kayan nokta istisnası" -#: siglist.c:86 +#: siglist.c:87 msgid "Killed" msgstr "Öldürüldü" -#: siglist.c:90 +#: siglist.c:91 msgid "Bus error" msgstr "Veriyolu hatası" -#: siglist.c:94 +#: siglist.c:95 msgid "Segmentation fault" msgstr "Bölünme hatası" -#: siglist.c:98 +#: siglist.c:99 msgid "Bad system call" msgstr "Bozuk sistem çağırımı" -#: siglist.c:102 +#: siglist.c:103 msgid "Broken pipe" msgstr "Bozuk iletişim tüneli" -#: siglist.c:106 +#: siglist.c:107 msgid "Alarm clock" msgstr "Çalar saat" -#: siglist.c:110 +#: siglist.c:111 msgid "Terminated" msgstr "Sonlandırıldı" -#: siglist.c:114 +#: siglist.c:115 msgid "Urgent IO condition" msgstr "Acil GÇ koşulu" -#: siglist.c:118 +#: siglist.c:119 msgid "Stopped (signal)" msgstr "Durduruldu (sinyal)" -#: siglist.c:126 +#: siglist.c:127 msgid "Continue" msgstr "Devam et" -#: siglist.c:134 +#: siglist.c:135 msgid "Child death or stop" msgstr "Alt ölümü veya durdurulma" -#: siglist.c:138 +#: siglist.c:139 msgid "Stopped (tty input)" msgstr "Durduruldu (tty girişi)" -#: siglist.c:142 +#: siglist.c:143 msgid "Stopped (tty output)" msgstr "Durduruldu (tty çıkışı)" -#: siglist.c:146 +#: siglist.c:147 msgid "I/O ready" msgstr "G/Ç hazır" -#: siglist.c:150 +#: siglist.c:151 msgid "CPU limit" msgstr "CPU sınırı" -#: siglist.c:154 +#: siglist.c:155 msgid "File limit" msgstr "Dosya sınırı" -#: siglist.c:158 +#: siglist.c:159 msgid "Alarm (virtual)" msgstr "Alarm (sanal)" -#: siglist.c:162 +#: siglist.c:163 msgid "Alarm (profile)" msgstr "Alarm (profil)" -#: siglist.c:166 +#: siglist.c:167 msgid "Window changed" msgstr "Pencere değiştirildi" -#: siglist.c:170 +#: siglist.c:171 msgid "Record lock" msgstr "Kayıt kilidi" -#: siglist.c:174 +#: siglist.c:175 msgid "User signal 1" msgstr "Kullanıcı sinyali 1" -#: siglist.c:178 +#: siglist.c:179 msgid "User signal 2" msgstr "Kullanıcı sinyali 2" -#: siglist.c:182 +#: siglist.c:183 msgid "HFT input data pending" msgstr "HFT girdi verisi bekliyor" -#: siglist.c:186 +#: siglist.c:187 msgid "power failure imminent" msgstr "yakın güç başarısızlığı" -#: siglist.c:190 +#: siglist.c:191 msgid "system crash imminent" msgstr "yakın sistem çökmesi" -#: siglist.c:194 +#: siglist.c:195 msgid "migrate process to another CPU" msgstr "süreci başka bir işlemciye aktar" -#: siglist.c:198 +#: siglist.c:199 msgid "programming error" msgstr "programlama hatası" -#: siglist.c:202 +#: siglist.c:203 msgid "HFT monitor mode granted" msgstr "HFT izleyici kipine geçildi" -#: siglist.c:206 +#: siglist.c:207 msgid "HFT monitor mode retracted" msgstr "HFT izleyici kipi kapatıldı" -#: siglist.c:210 +#: siglist.c:211 msgid "HFT sound sequence has completed" msgstr "HFT ses sırası tamamlandı" -#: siglist.c:214 +#: siglist.c:215 msgid "Information request" msgstr "Bilgi talebi" -#: siglist.c:222 siglist.c:224 +#: siglist.c:223 siglist.c:225 #, c-format msgid "Unknown Signal #%d" msgstr "Bilinmeyen Sinyal #%d" -#: subst.c:1476 subst.c:1666 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "hatalı ikame: %2$s içinde kapatan `%1$s' yok" -#: subst.c:3281 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: dizi üyesine liste atanamaz" -#: subst.c:5910 subst.c:5926 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "süreç ikamesi için borulama yapılamıyor" -#: subst.c:5985 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "süreç ikamesi için alt süreç yapılamıyor" -#: subst.c:6059 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "adlı boru %s okumak için açılamıyor" -#: subst.c:6061 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "adlı boru %s yazmak için açılamıyor" -#: subst.c:6084 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "adlı boru %s fd %d olarak yinelenemiyor" -#: subst.c:6213 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "komut ikamesi: girdideki null bayt yok sayıldı" -#: subst.c:6353 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: boru fd 1 olarak yinelenemiyor" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "komut ikamesi için boru yapılamıyor" -#: subst.c:6397 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "komut ikamesi için alt süreç yapılamıyor" -#: subst.c:6423 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: boru fd 1 olarak yinelenemiyor" -#: subst.c:6883 subst.c:9952 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: dosya izleme tanımlayıcısı için geçersiz değer" -#: subst.c:6979 subst.c:6997 subst.c:7169 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: geçersiz dolaylı yayılım" -#: subst.c:7013 subst.c:7177 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: geçersiz değişken adı" -#: subst.c:7256 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: parametre ayarlanmamış" +msgid "%s: bad substitution" +msgstr "%s: hatalı ikame" -#: subst.c:7258 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: parametre boş veya değer atanmamış" +msgid "%s: parameter not set" +msgstr "%s: parametre ayarlanmamış" -#: subst.c:7503 subst.c:7518 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: altdizi ifadesi < 0" -#: subst.c:9281 subst.c:9302 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: hatalı ikame" - -#: subst.c:9390 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: bu yolla atama yapılmaz" -#: subst.c:9814 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "kabuk gelecekteki sürümlerinde, bir aritmetik ikame olarak değerlendirmeye zorlayacak" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"kabuk gelecekteki sürümlerinde, bir aritmetik ikame olarak değerlendirmeye " +"zorlayacak" -#: subst.c:10367 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "hatalı ikame: %s içinde kapatan \"`\" yok" -#: subst.c:11434 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "eşleşme yok: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "argüman bekleniyordu" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: tamsayı ifadesi bekleniyordu" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "`)' bekleniyordu" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "`)' bekleniyordu, %s bulundu" -#: test.c:466 test.c:799 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: iki terimli işleci bekleniyordu" -#: test.c:756 test.c:759 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: tek terimli işleci bekleniyordu" -#: test.c:881 +#: test.c:926 msgid "missing `]'" msgstr "eksik `]'" -#: test.c:899 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "sözdizim hatası: '%s' beklenmiyordu" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "geçersiz sinyal numarası" -#: trap.c:325 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "tuzak işleyicisi: en yüksek tuzak işleyicisi düzeyi aşıldı (%d)" -#: trap.c:414 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps:trap_list[%d] içinde hatalı değer: %p" -#: trap.c:418 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: sinyal yakalayıcı SIG_DFL'dir, kendime %d (%s) göndererek" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: sinyal yakalayıcı SIG_DFL'dir, kendime %d (%s) göndererek" -#: trap.c:487 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler:hatalı sinyal %d" -#: variables.c:421 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "`%s'nin işlev tanımının içeri aktarılmasında hata" -#: variables.c:833 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "kabuk düzeyi (%d) çok yüksek, 1 yapılıyor" -#: variables.c:2674 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "en fazla buraya belge sayısı aşıldı" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: geçerli etki alanında hiç işlev bağlamı yok" -#: variables.c:2693 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: değişkene değer atanmamış olabilir" -#: variables.c:3475 +#: variables.c:2830 variables.c:2883 +#, c-format +msgid "%s: cannot inherit value from incompatible type" +msgstr "" + +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: ad başvurusuna tamsayı ataması" -#: variables.c:4404 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: geçerli etki alanında hiç işlev bağlamı yok" -#: variables.c:4771 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s boş exportstr içeriyor" -#: variables.c:4776 variables.c:4785 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "%2$s için exportstr içinde geçersiz karakter %1$d" -#: variables.c:4791 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "%s için exportstr içinde `=' yok" @@ -2153,62 +2260,68 @@ msgstr "pop_var_context: kabuk değişkenlerinin başı bir işlev bağlamı de msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: genel değişkenler bağlamı yok" -#: variables.c:5424 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: kabuk değişkenlerinin başı bir geçici ortam etki alanı değil" +msgstr "" +"pop_scope: kabuk değişkenlerinin başı bir geçici ortam etki alanı değil" -#: variables.c:6387 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: DOSYA olarak açılamaz" -#: variables.c:6392 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: dosya izleme tanımlayıcısı için geçersiz değer" -#: variables.c:6437 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: uyumlulukdeğeri aralık dışı" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2020 Free Software Foundation, Inc." -msgstr "Telif hakkı (C) 2020 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." +msgstr "Telif hakkı (C) 2022 Free Software Foundation, Inc." -#: version.c:47 version2.c:47 -msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" -msgstr "Lisans GPLv3+: GNU GPL sürüm 3 veya sonrası <http://gnu.org/licenses/gpl.html>\n" +#: version.c:47 +msgid "" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>\n" +msgstr "" +"Lisans GPLv3+: GNU GPL sürüm 3 veya sonrası <http://gnu.org/licenses/gpl." +"html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, sürüm %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Bu ücretsiz bir yazılımdır; değiştirmekte ve dağıtmakta özgürsünüz." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "İzin verilen yasalar kapsamında hiçbir GARANTİSİ BULUNMAMAKTADIR." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %lu bayt ayrılamıyor (%lu bayt ayrıldı)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: %lu bayt ayrılamıyor" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: %lu bayt ayrılamıyor (%lu bayt ayrıldı)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: %lu bayt ayrılamıyor" @@ -2222,8 +2335,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] ad [ad ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpvsPVSX] [-m anahtar eşleniği] [-f dosyaadı] [-q ad] [-u ad] [-r anahtar sırası] [-x keyseq:kabuk-komutu] [keyseq:satırokuma-işlevi veya satırokuma-komutu]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpvsPVSX] [-m anahtar eşleniği] [-f dosyaadı] [-q ad] [-u ad] [-r " +"anahtar sırası] [-x keyseq:kabuk-komutu] [keyseq:satırokuma-işlevi veya " +"satırokuma-komutu]" #: builtins.c:56 msgid "break [n]" @@ -2242,7 +2360,8 @@ msgid "caller [expr]" msgstr "caller [ifade]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [dizin]" #: builtins.c:68 @@ -2254,11 +2373,17 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] command [arg ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]" +#, fuzzy +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" msgstr "declare [-aAfFgiIlnrtux] [-p] [ad[=değer] ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..." +#, fuzzy +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" msgstr "typeset [-aAfFgiIlnrtux] [-p] ad[=değer] ..." #: builtins.c:82 @@ -2318,8 +2443,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [desen ...]" #: builtins.c:123 -msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d başlangıç] [n] veya history -anrw [dosyaadı] veya history -ps arg [arg...]" +msgid "" +"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " +"[arg...]" +msgstr "" +"history [-c] [-d başlangıç] [n] veya history -anrw [dosyaadı] veya history -" +"ps arg [arg...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2330,23 +2459,33 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [görevtan ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s sinspec | -n signum | -sigspec] pid | görevtan ... veya kill -l [sigspec]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s sinspec | -n signum | -sigspec] pid | görevtan ... veya kill -l " +"[sigspec]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let arg [arg ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a dizi] [-d sonlandırıcı] [-i metin] [-n nkarakter] [-N nkarakter] [-p istem] [-t zamanaşımı] [-u fd] [ad ...]" +#, fuzzy +msgid "" +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"prompt] [-t timeout] [-u fd] [name ...]" +msgstr "" +"read [-ers] [-a dizi] [-d sonlandırıcı] [-i metin] [-n nkarakter] [-N " +"nkarakter] [-p istem] [-t zamanaşımı] [-u fd] [ad ...]" #: builtins.c:140 msgid "return [n]" msgstr "return [n]" #: builtins.c:142 -msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]" +#, fuzzy +msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]" msgstr "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]" #: builtins.c:144 @@ -2386,7 +2525,8 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[arg] sinyal_tan ...]" #: builtins.c:168 @@ -2394,7 +2534,8 @@ msgid "type [-afptP] name [name ...]" msgstr "type [-afptP] ad [ad ...]" #: builtins.c:171 -msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]" +#, fuzzy +msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]" msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [sınır]" #: builtins.c:174 @@ -2410,106 +2551,136 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for AD [in SÖZCÜKLER ... ] ; do KOMUTLAR; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( ifade1; ifade2; ifade3 )); do KOMUTLAR; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select AD [in SÖZCÜKLER ... ;] do KOMUTLAR; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] zamantüneli" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case SÖZCÜK in [DİZGİ [| DİZGİ]...) KOMUTLAR ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if KOMUTLAR; then KOMUTLAR; [ elif KOMUTLAR; then KOMUTLAR; ]... [ else KOMUTLAR; ] fi" - #: builtins.c:196 -msgid "while COMMANDS; do COMMANDS; done" -msgstr "while KOMUTLAR; do KOMUTLAR; done" +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if KOMUTLAR; then KOMUTLAR; [ elif KOMUTLAR; then KOMUTLAR; ]... [ else " +"KOMUTLAR; ] fi" #: builtins.c:198 -msgid "until COMMANDS; do COMMANDS; done" -msgstr "until KOMUTLAR; do KOMUTLAR; done" +#, fuzzy +msgid "while COMMANDS; do COMMANDS-2; done" +msgstr "while KOMUTLAR; do KOMUTLAR; done" #: builtins.c:200 +#, fuzzy +msgid "until COMMANDS; do COMMANDS-2; done" +msgstr "until KOMUTLAR; do KOMUTLAR; done" + +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [ad] command [yönlendirmeler]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function ad { KOMUTLAR ; } veya ad () { KOMUTLAR ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ KOMUTLAR ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "görev_tan [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( ifade ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ ifade ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - Bazı kabuk değişkenlerinin ad ve anlamları" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | dizin]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [optname ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] biçim [argümanlar]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o seçenek] [-A eylem] [-G global kısım] [-W sözcük listesi] [-F işlev] [-C komut] [-X süzgeç] [-P önek] [-S sonek] [ad ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o seçenek] [-A eylem] [-G global " +"kısım] [-W sözcük listesi] [-F işlev] [-C komut] [-X süzgeç] [-P önek] [-S " +"sonek] [ad ...]" -#: builtins.c:235 -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 seçenek] [-A eylem] [-G global kısım] [-W sözcük listesi] [-F işlev] [-C komut] [-X süzgeç] [-P önek] [-S sonek] [sözcük]" +#: builtins.c:237 +#, fuzzy +msgid "" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" +msgstr "" +"compgen [-abcdefgjksuv] [-o seçenek] [-A eylem] [-G global kısım] [-W sözcük " +"listesi] [-F işlev] [-C komut] [-X süzgeç] [-P önek] [-S sonek] [sözcük]" -#: builtins.c:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o seçenek] [-DEI] [ad ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d sonlandrc] [-n say] [-O kaynak] [-s say] [-t] [-u fd] [-C geriçağırım] [-c parçacık] [dizi]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d sınırlandırıcı] [-n sayım] [-O köken] [-s sayım] [-t] [-u fd] [-C geri çağırma] [-c kuantum] [dizilim]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d sonlandrc] [-n say] [-O kaynak] [-s say] [-t] [-u fd] [-C " +"geriçağırım] [-c parçacık] [dizi]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d sınırlandırıcı] [-n sayım] [-O köken] [-s sayım] [-t] [-u fd] " +"[-C geri çağırma] [-c kuantum] [dizilim]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2524,12 +2695,14 @@ 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 "" "Rumuz tanımla veya görüntüle.\n" " \n" -" `alias' argümansız kullanıldığında standart çıktıda kullanılabilecek tüm\n" +" `alias' argümansız kullanıldığında standart çıktıda kullanılabilecek " +"tüm\n" " rumuzları `alias AD=DEĞER' biçiminde listeler.\n" " \n" " Diğer durumda DEĞERi verilmiş her AD için bir rumuz tanımlanır.\n" @@ -2542,7 +2715,7 @@ msgstr "" " Çıkış Durumu:\n" " Hiçbir şeyin rumuzu olmayan bir AD verilmedikçe alias doğru döndürür." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2559,7 +2732,7 @@ msgstr "" " AD mevcut olmayan bir rumuz olmadığı takdirde doğru\n" " döndür." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2571,25 +2744,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2618,19 +2796,25 @@ msgstr "" " -V Değişken adlarını ve değerlerini listeler.\n" " -v Değişken adlarını ve değerlerini girdi olarak\n" " kullanılabilir biçimde listeler.\n" -" -q İŞLEV Adı belirtilen İŞLEVi çağıran düğmeler hakkında sorgu.\n" -" -u İŞLEV Adı belirtilen İŞLEVi çağıran tüm düğme kısayollarını\n" +" -q İŞLEV Adı belirtilen İŞLEVi çağıran düğmeler hakkında " +"sorgu.\n" +" -u İŞLEV Adı belirtilen İŞLEVi çağıran tüm düğme " +"kısayollarını\n" " kaldırır.\n" " -r DÜĞMEDİZİSİ DÜĞMEDİZİSİ için mevcut kısayolları kaldırır.\n" -" -x DÜĞMEDİZİSİ:KABUK-KOMUTU\tDÜĞMEDİZİSİnin her girilişinde KABUK-KOMUTUnun\n" +" -x DÜĞMEDİZİSİ:KABUK-KOMUTU\tDÜĞMEDİZİSİnin her girilişinde KABUK-" +"KOMUTUnun\n" " \t\t\t\tçalıştırılmasını sağlar.\n" -" -X Düğme dizilerini -x ve ilişkili komutlarını yeniden\n" -" bir girdi olarak kullanılabilecek biçimde listeler.\n" +" -X Düğme dizilerini -x ve ilişkili komutlarını " +"yeniden\n" +" bir girdi olarak kullanılabilecek biçimde " +"listeler.\n" " \n" " Çıkış Durumu:\n" -" tanınmayan bir seçenek girilmediği veya bir hata oluşmadığı durumda 0 döndürür." +" tanınmayan bir seçenek girilmediği veya bir hata oluşmadığı durumda 0 " +"döndürür." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2642,13 +2826,14 @@ msgid "" msgstr "" "for, while veya until döngülerinden çık.\n" " \n" -" Bir FOR, WHILE veya UNTIL döngüsünden çık. Eğer N belirtilmişse N ilişkili\n" +" Bir FOR, WHILE veya UNTIL döngüsünden çık. Eğer N belirtilmişse N " +"ilişkili\n" " döngüden çık.\n" " \n" " Çıkış Durumu:\n" " N, 1'e eşit veya daha fazla olmadığında çıkış durumu 0'dır." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2666,24 +2851,15 @@ msgstr "" " Çıkış Durumu:\n" " N, 1 veya daha büyük olmadığında çıkış durumu 0'dır." -#: builtins.c:354 +#: builtins.c:356 #, fuzzy -#| msgid "" -#| "Execute shell builtins.\n" -#| " \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" -#| " \n" -#| " Exit Status:\n" -#| " Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n" -#| " not a shell builtin.." msgid "" "Execute shell builtins.\n" " \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" @@ -2692,13 +2868,16 @@ msgstr "" "Kabuk dahillerini çalıştır.\n" " \n" " Komut araması yapmadan KABUK-DAHİLİ, ARGÜMANLAR argümanları ile\n" -" çalıştır. Bu, bir KABUK-DAHİLİ, bir kabuk işlevi olarak yeniden uygulamak isteyip\n" -" işlev içerisinde dahili olanı da çalıştırmanız gerektiğinizde kullanışlıdır.\n" +" çalıştır. Bu, bir KABUK-DAHİLİ, bir kabuk işlevi olarak yeniden " +"uygulamak isteyip\n" +" işlev içerisinde dahili olanı da çalıştırmanız gerektiğinizde " +"kullanışlıdır.\n" " \n" " Çıkış Durumu:\n" -" KABUK-DAHİLİnin çıkış durumunu veya eğer KABUK-DAHİLİ değilse false döndürür." +" KABUK-DAHİLİnin çıkış durumunu veya eğer KABUK-DAHİLİ değilse false " +"döndürür." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2715,29 +2894,39 @@ msgid "" msgstr "" "Geçerli alt yordam çağrısının bağlamını döndürür.\n" " \n" -" İFADE olmadan, \"$satır $dosyaadı\" döndürür. İFADE ile kullanıldığında\n" -" \"$satır $altyordam $dosyaadı\" döndürür; bu ek bilgi bir yığın izi sağlamak\n" +" İFADE olmadan, \"$satır $dosyaadı\" döndürür. İFADE ile " +"kullanıldığında\n" +" \"$satır $altyordam $dosyaadı\" döndürür; bu ek bilgi bir yığın izi " +"sağlamak\n" " için kullanılabilir.\n" " \n" " İFADE değeri, geçerli çerçeveden önce kaç tane çerçeve çağrılacağını\n" " belirtir. Üst çerçeve 0. çerçevedir. \n" " Çıkış Durumu:\n" -" İFADE geçersiz olmadığı ve bir kabuk işlevi çalıştırmadığı durumda 0 döndürür." +" İFADE geçersiz olmadığı ve bir kabuk işlevi çalıştırmadığı durumda 0 " +"döndürür." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2753,43 +2942,56 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Kabuk çalışma dizinini değiştir.\n" " \n" -" Geçerli dizini DİZİN olarak değiştir. Öntanımlı dizin kabuk değişkeninin EV\n" +" Geçerli dizini DİZİN olarak değiştir. Öntanımlı dizin kabuk değişkeninin " +"EV\n" " dizini değeridir.\n" " \n" -" CDPATH değişkeni, DİZİN içeren dizinler için arama yolunu tanımlar. CDPATH\n" +" CDPATH değişkeni, DİZİN içeren dizinler için arama yolunu tanımlar. " +"CDPATH\n" " için alternatif dizin adları iki nokta (:) ile ayrılır.\n" -" Boş dizin adı, geçerli dizinle aynıdır. Eğer DİZİN bölü (/) ile başlıyorsa CDPATH\n" +" Boş dizin adı, geçerli dizinle aynıdır. Eğer DİZİN bölü (/) ile " +"başlıyorsa CDPATH\n" " kullanılmaz.\n" " \n" -" Eğer dizin bulunamazsa ve kabuk seçeneği `cdable_vars' ayarlanmışsa sözcük\n" -" bir değişken adı olarak varsayılır. Eğer değişken bir değere sahipse değeri DİZİN\n" +" Eğer dizin bulunamazsa ve kabuk seçeneği `cdable_vars' ayarlanmışsa " +"sözcük\n" +" bir değişken adı olarak varsayılır. Eğer değişken bir değere sahipse " +"değeri DİZİN\n" " için kullanılır\n" " \n" " Seçenekler:\n" -" -L\tsembolik bağlantıların takip edilmesini zorla: '..' örneklerinin\n" +" -L\tsembolik bağlantıların takip edilmesini zorla: '..' " +"örneklerinin\n" " \t\tişlenmesinden sonra DİZİN içindeki sembolik bağlantıları çöz\n" -" -P\tsembolik bağlantıları takip etmeden fiziksel dizini kullan: '..' örneklerinin\n" +" -P\tsembolik bağlantıları takip etmeden fiziksel dizini kullan: '..' " +"örneklerinin\n" " \t\tişlenmesinden önce DİZİN içindeki sembolik bağlantıları çöz\n" -" -e\teğer -P seçeneği belirtilmişse ve geçerli çalışma dizini başarılı şekilde\n" +" -e\teğer -P seçeneği belirtilmişse ve geçerli çalışma dizini " +"başarılı şekilde\n" " \tbelirlenemiyorsa sıfır olmayan bir durumla çık\n" -" -@\tdestekleyen sistemlerde, dosya niteliklerini içeren bir dizin olarak uzatılmış\n" +" -@\tdestekleyen sistemlerde, dosya niteliklerini içeren bir dizin " +"olarak uzatılmış\n" " niteliklere sahip bir dosya sun \n" -" Öntanımlı olan `-L' tanımlanmış gibi sembolik bağlantıları takip etmektir.\n" +" Öntanımlı olan `-L' tanımlanmış gibi sembolik bağlantıları takip " +"etmektir.\n" " \n" " Çıkış Durumu:\n" -" Eğer dizin değişmişse ve -P kullanıldığında $PWD başarılı ayarlanırsa 0; diğer durumda\n" +" Eğer dizin değişmişse ve -P kullanıldığında $PWD başarılı ayarlanırsa 0; " +"diğer durumda\n" " sıfır olmayan bir değer döndürür." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2815,7 +3017,7 @@ msgstr "" " Çıkış Durumu:\n" " Dizin okunamadığı veya geçersiz seçenek verilmediği takdirde 0 döndürür." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2831,7 +3033,7 @@ msgstr "" " Çıkış Durumu:\n" " Her zaman başarılıdır." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2843,7 +3045,7 @@ msgstr "" " Çıkış Durumu:\n" " Her zaman başarılıdır." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2855,12 +3057,13 @@ msgstr "" " Çıkış Durumu:\n" " Her zaman başarısızdır." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2874,12 +3077,15 @@ msgid "" msgstr "" "Basit bir komut çalıştır veya komutlar hakkında bilgi görüntüle.\n" " \n" -" KOMUTU ARGümanları ile kabuk işlevi aramasını ihmal ederek çalıştırır veya\n" -" belirtilen KOMUTLAR hakkında bilgi görüntüler. Aynı adda bir işlev varsa\n" +" KOMUTU ARGümanları ile kabuk işlevi aramasını ihmal ederek çalıştırır " +"veya\n" +" belirtilen KOMUTLAR hakkında bilgi görüntüler. Aynı adda bir işlev " +"varsa\n" " diskte komutları çalıştırmak için kullanılabilir.\n" " \n" " Seçenekler:\n" -" -p YOL için, tüm standart yardımcıları bulabilmek için bir öntanımlı değer\n" +" -p YOL için, tüm standart yardımcıları bulabilmek için bir " +"öntanımlı değer\n" " \tkullan\n" " -v `type' dahilisine benzer bir KOMUT açıklaması göster\n" " -V her KOMUTun fazla açıklamasını göster\n" @@ -2887,44 +3093,8 @@ msgstr "" " Çıkış Durumu:\n" " KOMUTun çıkış durumunu döndürür. KOMUT bulunamazsa başarısız olur." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy -#| msgid "" -#| "Set variable values and attributes.\n" -#| " \n" -#| " Declare variables and give them attributes. If no NAMEs are given,\n" -#| " display the attributes and values of all variables.\n" -#| " \n" -#| " Options:\n" -#| " -f\trestrict action or display to function names and definitions\n" -#| " -F\trestrict display to function names only (plus line number and\n" -#| " \t\tsource file when debugging)\n" -#| " -g\tcreate global variables when used in a shell function; otherwise\n" -#| " \t\tignored\n" -#| " -p\tdisplay the attributes and value of each NAME\n" -#| " \n" -#| " Options which set attributes:\n" -#| " -a\tto make NAMEs indexed arrays (if supported)\n" -#| " -A\tto make NAMEs associative arrays (if supported)\n" -#| " -i\tto make NAMEs have the `integer' attribute\n" -#| " -l\tto convert NAMEs to lower case on assignment\n" -#| " -n\tmake NAME a reference to the variable named by its value\n" -#| " -r\tto make NAMEs readonly\n" -#| " -t\tto make NAMEs have the `trace' attribute\n" -#| " -u\tto convert NAMEs to upper case on assignment\n" -#| " -x\tto make NAMEs export\n" -#| " \n" -#| " Using `+' instead of `-' turns off the given attribute.\n" -#| " \n" -#| " 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" -#| " command. The `-g' option suppresses this behavior.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is supplied or a variable\n" -#| " assignment error occurs." msgid "" "Set variable values and attributes.\n" " \n" @@ -2952,12 +3122,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2966,11 +3138,13 @@ msgid "" msgstr "" "Değişken değer ve niteliklerini ayarla.\n" " \n" -" Değişkenleri ayarla ve nitelik ver. Eğer AD verilmemişse tüm değişkenlerin, niteliklerini ve değerlerini görüntüle.\n" +" Değişkenleri ayarla ve nitelik ver. Eğer AD verilmemişse tüm " +"değişkenlerin, niteliklerini ve değerlerini görüntüle.\n" " \n" " Seçenekler:\n" " -f\teylemi veya işlev adı ile tanımları gösterimini kısıtla\n" -" -F\tyalnızca işlev ad gösterimlerini kısıtla (ek olarak satır sayısı ve hata ayıklarken\n" +" -F\tyalnızca işlev ad gösterimlerini kısıtla (ek olarak satır sayısı " +"ve hata ayıklarken\n" " \t\tkaynak dosyayı)\n" " -g\tbir kabuk işlevinde kullanıldığında evrensel değişken oluştur,\n" " \t\taksi takdirde yok sayılır\n" @@ -2989,17 +3163,19 @@ msgstr "" " \n" " `-' yerine `+' kullanmak belirtilen niteliği kapatır.\n" " \n" -" Tamsayı niteliğine sahip değişkenler, bir değere atandıklarında aritmetik değerlendirmeye tabi tutulurlar (`let' komutuna bakın).\n" +" Tamsayı niteliğine sahip değişkenler, bir değere atandıklarında " +"aritmetik değerlendirmeye tabi tutulurlar (`let' komutuna bakın).\n" " \n" " Bir işlevde kullanıldığında, `declare' AD'ları, `local' komutu\n" "gibi yerel\n" " yapar. `-g' seçeneği bu davranışı iptal eder.\n" " \n" " Çıkış Durumu:\n" -" Geçersiz bir değer sağlanmadığı veya değişken atama hatası olmadığı sürece\n" +" Geçersiz bir değer sağlanmadığı veya değişken atama hatası olmadığı " +"sürece\n" " başarılı döner." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -3009,7 +3185,7 @@ msgstr "" " \n" " `declare' ile eş anlamlıdır. Bkz. `help declare'." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3028,49 +3204,22 @@ msgstr "" " AD adıyla bir yerel değişken oluştur ve DEĞER ata. SEÇENEK `declare'\n" " tarafından kabul edilen herhangi bir seçenek olabilir.\n" " \n" -" Yerel değişkenler yalnızca bir işlev içerisinde kullanılabilirler ve tanımlandıkları\n" +" Yerel değişkenler yalnızca bir işlev içerisinde kullanılabilirler ve " +"tanımlandıkları\n" " işleve ve alt işlevlerine görünebilirler.\n" " \n" " Çıkış Durumu:\n" -" Geçersiz bir seçenek verilmediğinde, bir değişken hatası oluşmadığında veya\n" +" Geçersiz bir seçenek verilmediğinde, bir değişken hatası oluşmadığında " +"veya\n" " kabuk bir işlev çalıştırmıyorsa başarılı döner." -#: builtins.c:557 +#: builtins.c:560 #, fuzzy -#| msgid "" -#| "Write arguments to the standard output.\n" -#| " \n" -#| " Display the ARGs, separated by a single space character and followed by a\n" -#| " newline, on the standard output.\n" -#| " \n" -#| " Options:\n" -#| " -n\tdo not append a newline\n" -#| " -e\tenable interpretation of the following backslash escapes\n" -#| " -E\texplicitly suppress interpretation of backslash escapes\n" -#| " \n" -#| " `echo' interprets the following backslash-escaped characters:\n" -#| " \\a\talert (bell)\n" -#| " \\b\tbackspace\n" -#| " \\c\tsuppress further output\n" -#| " \\e\tescape character\n" -#| " \\E\tescape character\n" -#| " \\f\tform feed\n" -#| " \\n\tnew line\n" -#| " \\r\tcarriage return\n" -#| " \\t\thorizontal tab\n" -#| " \\v\tvertical tab\n" -#| " \\\\\tbackslash\n" -#| " \\0nnn\tthe character whose ASCII code is NNN (octal). NNN can be\n" -#| " \t\t0 to 3 octal digits\n" -#| " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" -#| " \t\tcan be one or two hex digits\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless a write error occurs." msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3094,9 +3243,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3124,7 +3275,8 @@ msgstr "" " \\t\tyatay sekme\n" " \\v\tdikey sekme\n" " \\\\\tters bölü\n" -" \\0nnn\tASCII kodu NNN (sekizlik) olan karakter. NNN 0-3 arası sekizli\n" +" \\0nnn\tASCII kodu NNN (sekizlik) olan karakter. NNN 0-3 arası " +"sekizli\n" " \t\trakamlardan oluşabilir.\n" " \\xHH\tdeğeri HH (onaltılık) olan sekiz bit karakter. HH bir veya iki\n" " \t\tonaltılık rakam olabilir\n" @@ -3132,7 +3284,7 @@ msgstr "" " Çıkış Durumu:\n" " Yazma hatası oluşmadığı takdirde başarılı döner." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3154,7 +3306,8 @@ msgstr "" " Çıkış Durumu:\n" " Bir hata oluşmadığı sürece başarılı döner." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3174,6 +3327,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3182,11 +3341,13 @@ msgid "" msgstr "" "Kabuk yerleşiklerini etkinleştir/devre dışı bırak.\n" " \n" -" Dahili kabuk komutlarını etkinleştirir ve devre dışı bırakır. Devre dışı\n" +" Dahili kabuk komutlarını etkinleştirir ve devre dışı bırakır. Devre " +"dışı\n" " bırakmak bir kabuk yerleşiği ile aynı ada sahip bir disk komutunu tam\n" " bir yol adı kullanmadan çalıştırmanızı sağlar. \n" " Seçenekler:\n" -" -a\ttüm yerleşikler listesini etkin olup olmadıkları bilgisi ile yazdır\n" +" -a\ttüm yerleşikler listesini etkin olup olmadıkları bilgisi ile " +"yazdır\n" " -n\ther AD'ı devre dışı bırak veya devre dışı olanları listele\n" " -p\tyerleşik listesini yeniden kullanılabilir biçimde yazdır\n" " -s\tyalnızca Posix `özel' yerleşiklerinin adlarını yazdır\n" @@ -3203,11 +3364,12 @@ msgstr "" " Çıktı Durumu:\n" " AD bir kabuk yerleşiği değilse ve hata oluşmazsa başarılı döner." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3215,52 +3377,15 @@ msgid "" msgstr "" "Argümanları kabuk komutu olarak çalıştır.\n" " \n" -" ARGümanları tek bir diziye birleştir, sonucu kabuğa girdi olarak kullan,\n" +" ARGümanları tek bir diziye birleştir, sonucu kabuğa girdi olarak " +"kullan,\n" " ve sonuçlanan komutları çalıştır.\n" " \n" " Çıkış Durumu:\n" " Komutun çıkış durumunu döndürür veya komut boşsa başarılı döner." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy -#| msgid "" -#| "Parse option arguments.\n" -#| " \n" -#| " Getopts is used by shell procedures to parse positional parameters\n" -#| " as options.\n" -#| " \n" -#| " OPTSTRING contains the option letters to be recognized; if a letter\n" -#| " is followed by a colon, the option is expected to have an argument,\n" -#| " which should be separated from it by white space.\n" -#| " \n" -#| " Each time it is invoked, getopts will place the next option in the\n" -#| " shell variable $name, initializing name if it does not exist, and\n" -#| " the index of the next argument to be processed into the shell\n" -#| " variable OPTIND. OPTIND is initialized to 1 each time the shell or\n" -#| " a shell script is invoked. When an option requires an argument,\n" -#| " getopts places that argument into the shell variable OPTARG.\n" -#| " \n" -#| " getopts reports errors in one of two ways. If the first character\n" -#| " of OPTSTRING is a colon, getopts uses silent error reporting. In\n" -#| " this mode, no error messages are printed. If an invalid option is\n" -#| " seen, getopts places the option character found into OPTARG. If a\n" -#| " required argument is not found, getopts places a ':' into NAME and\n" -#| " sets OPTARG to the option character found. If getopts is not in\n" -#| " silent mode, and an invalid option is seen, getopts places '?' into\n" -#| " NAME and unsets OPTARG. If a required argument is not found, a '?'\n" -#| " is placed in NAME, OPTARG is unset, and a diagnostic message is\n" -#| " printed.\n" -#| " \n" -#| " If the shell variable OPTERR has the value 0, getopts disables the\n" -#| " printing of error messages, even if the first character of\n" -#| " OPTSTRING is not a colon. OPTERR has the value 1 by default.\n" -#| " \n" -#| " Getopts normally parses the positional parameters ($0 - $9), but if\n" -#| " more arguments are given, they are parsed instead.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success if an option is found; fails if the end of options is\n" -#| " encountered or an error occurs." msgid "" "Parse option arguments.\n" " \n" @@ -3302,47 +3427,63 @@ msgid "" msgstr "" "Seçenek argümanlarını ayıklar.\n" " \n" -" Getopts kabuk betikleri tarafından konumsal parametreleri çözümlemekte\n" +" Getopts kabuk betikleri tarafından konumsal parametreleri " +"çözümlemekte\n" " kullanılır.\n" " \n" " SÇNSİ tanınan seçenek karakterlerini içerir; bir karakterden sonra\n" -" bir ikinokta imi (:) geliyorsa seçeneğin ondan bir boşlukla ayrılmış bir\n" +" bir ikinokta imi (:) geliyorsa seçeneğin ondan bir boşlukla ayrılmış " +"bir\n" " argümana sahip olacağı umulur.\n" " \n" -" Her çağrılışında getopts işlenecek sonraki argümanın indisini OPTIND\n" -" kabuk değişkenine ve AD değişkenini de mevcut değilse ilklendirerek\n" +" Her çağrılışında getopts işlenecek sonraki argümanın indisini " +"OPTIND\n" +" kabuk değişkenine ve AD değişkenini de mevcut değilse " +"ilklendirerek\n" " sonraki seçeneği $AD kabuk değişkenine yerleştirir. OPTIND kabuğun veya\n" -" bir kabuk betiğinin her çağrılışında 1 ile ilklendirilir. Bir seçenek\n" -" bir argüman gerektirdiğinde getopts argümanı OPTARG değişkenine\n" +" bir kabuk betiğinin her çağrılışında 1 ile ilklendirilir. Bir " +"seçenek\n" +" bir argüman gerektirdiğinde getopts argümanı OPTARG " +"değişkenine\n" " yerleştirir.\n" " \n" " getopts hataları iki yolla raporlayabilir. Eğer SÇNSİnin ilk\n" -" karakteri bir ':' ise sessiz hata raporlaması kullanılır. Bu kipte\n" -" hiçbir hata iletisi basılmaz. Bir geçersiz seçenek saptanırsa getopt\n" -" OPTARG'a bulunan seçenek karakterini yerleştirir. Bir gerekli argüman\n" +" karakteri bir ':' ise sessiz hata raporlaması kullanılır. Bu " +"kipte\n" +" hiçbir hata iletisi basılmaz. Bir geçersiz seçenek saptanırsa " +"getopt\n" +" OPTARG'a bulunan seçenek karakterini yerleştirir. Bir gerekli " +"argüman\n" " verilmemişse getopts AD'a bir ':' yerleştirir. Getopts sessiz kipte\n" -" değilse ve geçersiz bir seçenek görüldüğünde, getopts ? karakterini AD'a\n" -" yerleştirir ve OPTARG değişkenini kaldırır. Eğer bir gerekli argüman\n" -" bulunamazsa ve getopts sessiz kipte değilse AD'a ? karakteri\n" +" değilse ve geçersiz bir seçenek görüldüğünde, getopts ? karakterini " +"AD'a\n" +" yerleştirir ve OPTARG değişkenini kaldırır. Eğer bir gerekli " +"argüman\n" +" bulunamazsa ve getopts sessiz kipte değilse AD'a ? " +"karakteri\n" " yerleştirilir, OPTARG kaldırılır ve bir tanı iletisi basılır.\n" " \n" " OPTERR değişkeninin değeri 0 ise SÇNSİnin ilk karakteri bir ':'\n" -" olmasa bile hata iletileri gösterilmez. OPTERR değişkeninin öntanımlı\n" +" olmasa bile hata iletileri gösterilmez. OPTERR değişkeninin " +"öntanımlı\n" " değeri 1'dir.\n" " \n" -" Getopts normalde konumsal parametreleri ($0 - $9) çözümlese de başka\n" +" Getopts normalde konumsal parametreleri ($0 - $9) çözümlese de " +"başka\n" " argümanlar verilmişse bunları çözümler.\n" " \n" " Çıktı Durumu:\n" -" Bir seçenek bulunduğunda başarılı, seçenek sonuna gelindiğinde veya bir hata oluştuğunda başarısız döner.\n" +" Bir seçenek bulunduğunda başarılı, seçenek sonuna gelindiğinde veya " +"bir hata oluştuğunda başarısız döner.\n" " encountered or an error occurs." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3350,11 +3491,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Kabuğu verilen komutla değiştir.\n" " \n" @@ -3367,13 +3510,14 @@ msgstr "" " -c\tKOMUTu boş bir ortamla çalıştır\n" " -l\tKOMUTun sıfırıncı argümanına bir çizgi koy\n" " \n" -" Eğer komut çalıştırılamıyorsa `execfail' ayarlanmadığı sürece etkileşimsiz kabuk\n" +" Eğer komut çalıştırılamıyorsa `execfail' ayarlanmadığı sürece " +"etkileşimsiz kabuk\n" " çıkış yapar.\n" " \n" " Çıkış Durumu:\n" " KOMUT bulunduğu ve bir yönlendirme hatası olmadığı sürece başarılı döner." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3385,11 +3529,12 @@ msgstr "" " N durumu ile dönerek kabuk çıkar. N verilmezse son çalıştırılan komutun\n" " çıkış durumu döner." -#: builtins.c:724 +#: builtins.c:732 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 "" "Oturum kabuğundan çık.\n" @@ -3397,17 +3542,20 @@ msgstr "" " N durumuyla bir oturum kabuğundan çıkar. Eğer çalıştırılmamışsa oturum\n" " kabuğunda bir hata döndürür." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3420,13 +3568,18 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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 "" "Geçmiş listesindeki komutları görüntüle veya çalıştır\n" " \n" -" fc, komut geçmişi listesindeki komutları listelemek, düzenlemek ve\n" -" yeniden çalıştırmak için kullanılır. İLK ve SON olarak numara vererek\n" +" fc, komut geçmişi listesindeki komutları listelemek, düzenlemek " +"ve\n" +" yeniden çalıştırmak için kullanılır. İLK ve SON olarak numara " +"vererek\n" " bir aralık belirtilebileceği gibi İLK bir dizi de olabilir, bu takdirde\n" " bu dizi ile başlayan en son komut anlamına gelir.\n" " \n" @@ -3445,9 +3598,10 @@ msgstr "" " r' yazarak en son komut çalıştırılabilir.\n" " \n" " Çıktı Durumu:\n" -" Başarılı veya çalıştırılan komut durumu döndürülür; hata oluştuğunda sıfır harici değer döner." +" Başarılı veya çalıştırılan komut durumu döndürülür; hata oluştuğunda " +"sıfır harici değer döner." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3467,12 +3621,14 @@ msgstr "" " Çıktı Durumu:\n" " Ön plana yerleştirilmiş komutun durumu veya hata olduğunda başarısız." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3481,16 +3637,19 @@ msgstr "" "İşi arka plana taşı.\n" " \n" " `&' ile başlatılmışçasına İŞ_BELİRTİMİni artalana yerleştirir.\n" -" İŞ_BELİRTİMİ verilmemişse iş belirtimi olarak o an ki iş kullanılır. \n" +" İŞ_BELİRTİMİ verilmemişse iş belirtimi olarak o an ki iş " +"kullanılır. \n" " Çıktı Durumu:\n" -" İş denetimi etkin olmadığı veya bir hata oluşmadığı sürece başarılı döner." +" İş denetimi etkin olmadığı veya bir hata oluşmadığı sürece başarılı " +"döner." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3508,26 +3667,8 @@ msgid "" " Returns success unless NAME is not found or an invalid option is given." msgstr "" -#: builtins.c:818 +#: builtins.c:828 #, fuzzy -#| msgid "" -#| "Display information about builtin commands.\n" -#| " \n" -#| " Displays brief summaries of builtin commands. If PATTERN is\n" -#| " specified, gives detailed help on all commands matching PATTERN,\n" -#| " otherwise the list of help topics is printed.\n" -#| " \n" -#| " Options:\n" -#| " -d\toutput short description for each topic\n" -#| " -m\tdisplay usage in pseudo-manpage format\n" -#| " -s\toutput only a short usage synopsis for each topic matching\n" -#| " \t\tPATTERN\n" -#| " \n" -#| " Arguments:\n" -#| " PATTERN\tPattern specifiying a help topic\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless PATTERN is not found or an invalid option is given." msgid "" "Display information about builtin commands.\n" " \n" @@ -3545,7 +3686,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Dahili komutlar hakkında bilgi görüntüle.\n" " \n" @@ -3563,40 +3705,11 @@ msgstr "" " DİZGİ\tBir yardım konusunu belirten desen\n" " \n" " Çıktı Durumu:\n" -" DİZGİ bulunmadığı veya geçersiz bir seçenek verilmediğinde başarılı döner." +" DİZGİ bulunmadığı veya geçersiz bir seçenek verilmediğinde başarılı " +"döner." -#: builtins.c:842 +#: builtins.c:852 #, fuzzy -#| msgid "" -#| "Display or manipulate the history list.\n" -#| " \n" -#| " Display the history list with line numbers, prefixing each modified\n" -#| " entry with a `*'. An argument of N lists only the last N entries.\n" -#| " \n" -#| " Options:\n" -#| " -c\tclear the history list by deleting all of the entries\n" -#| " -d offset\tdelete the history entry at position OFFSET.\n" -#| " \n" -#| " -a\tappend history lines from this session to the history file\n" -#| " -n\tread all history lines not already read from the history file\n" -#| " \t\tand append them to the history list\n" -#| " -r\tread the history file and append the contents to the history\n" -#| " \t\tlist\n" -#| " -w\twrite the current history to the history file\n" -#| " \n" -#| " -p\tperform history expansion on each ARG and display the result\n" -#| " \t\twithout storing it in the history list\n" -#| " -s\tappend the ARGs to the history list as a single entry\n" -#| " \n" -#| " If FILENAME is given, it is used as the history file. Otherwise,\n" -#| " if HISTFILE has a value, that is used, else ~/.bash_history.\n" -#| " \n" -#| " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" -#| " as a format string for strftime(3) to print the time stamp associated\n" -#| " with each displayed history entry. No time stamps are printed otherwise.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or an error occurs." msgid "" "Display or manipulate the history list.\n" " \n" @@ -3620,11 +3733,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3633,7 +3751,8 @@ msgstr "" " \n" " Seçeneksiz kullanıldığında komut geçmişi listesini satır numaraları ile\n" " gösterir. Değişiklik yapılmış satırlarda numaralardan önce bir `*'\n" -" vardır. Argüman olarak N belirtildiğinde yalnızca son N satır listelenir.\n" +" vardır. Argüman olarak N belirtildiğinde yalnızca son N satır " +"listelenir.\n" " \n" " Seçenekler:\n" " -c\tkomut geçmişi listesini tüm girdilerini silerek temizler.\n" @@ -3658,9 +3777,10 @@ msgstr "" " damgasını basacak olan strftime(3) işlevine biçim girdisi olur; aksi\n" " takdirde hiç zaman damgası basılmaz. \n" " Çıktı Durumu:\n" -" Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde başarılı döner." +" Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde " +"başarılı döner." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3689,7 +3809,8 @@ msgstr "" " Seçenekler olmadan, tüm etkin görev durumları görüntülenir.\n" " \n" " Seçenekler:\n" -" -l\tile normal bilgilere ek olarak süreç kimliklerini de (PID) listele\n" +" -l\tile normal bilgilere ek olarak süreç kimliklerini de (PID) " +"listele\n" " -n\tile yalnızca kullanıcının durumları hakkında aldığı son uyarıdan\n" " \t\tberi durumları değişen işler hakkında bilgi gösterir.\n" " -p\tile işlerin yalnızca süreç kimliklerini listeler\n" @@ -3701,10 +3822,11 @@ msgstr "" " çalıştırılır.\n" " \n" " Çıktı Durumu:\n" -" Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde başarılı döner.\n" +" Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde " +"başarılı döner.\n" " -x kullanılmışsa KOMUTun çıkış durumu döndürülür." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3722,19 +3844,21 @@ msgid "" msgstr "" "Görevleri geçerli kabuktan kaldır.\n" " \n" -" Her İŞTANIMı argümanını etkin görevler tablosundan kaldırır. İŞTANIMı olmadan,\n" +" Her İŞTANIMı argümanını etkin görevler tablosundan kaldırır. İŞTANIMı " +"olmadan,\n" " kabuk geçerli görev kavramını kullanır.\n" " \n" " Seçenekler:\n" " -a\tİŞTANIMı belirtilmemişse tüm görevleri kaldır\n" -" -h\ther İŞTANIMını işaretle, böylece kabul bir SIGHUP aldığında göreve SIGHUP\n" +" -h\ther İŞTANIMını işaretle, böylece kabul bir SIGHUP aldığında göreve " +"SIGHUP\n" " \t\tgönderme\n" " -r\tyalnızca çalışan görevleri kaldırremove \n" " \n" " Çıkış Durumu:\n" " Geçersiz bir seçenek veya İŞTANIMı girilmedikçe başarılı döner." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3769,22 +3893,27 @@ msgstr "" " \t\tArgümanlı -l seçeneğinde argümanların listelenecek\n" " sinyal adlarının numaraları olduğu varsayılır. \n" " -L\t, -l anahtarının eş anlamlısıdır\n" -" Kill iki sebepten dolayı bir kabuk yerleşiğidir: süreç kimlikleri yerine iş\n" -" kimliklerinin kullanımını mümkün kılar ve eğer oluşturabileceğiniz süreç\n" -" sayısı sınırını aşarsanız başka bir süreci öldürecek bir süreci başlatmak\n" +" Kill iki sebepten dolayı bir kabuk yerleşiğidir: süreç kimlikleri yerine " +"iş\n" +" kimliklerinin kullanımını mümkün kılar ve eğer oluşturabileceğiniz " +"süreç\n" +" sayısı sınırını aşarsanız başka bir süreci öldürecek bir süreci " +"başlatmak\n" " zorunda kalmazsınız.\n" " \n" " Çıktı Durumu:\n" -" Geçersiz bir seçenek belirtilmediği veya bir hata oluşmadığında başarılı döner." +" Geçersiz bir seçenek belirtilmediği veya bir hata oluşmadığında başarılı " +"döner." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3862,18 +3991,23 @@ msgstr "" " Çıktı Durumu:\n" " Son ifade'nin sonucu 0 ise dönüş durumu 1 dir, aksi takdirde 0 dır." -#: builtins.c:994 +#: builtins.c:1008 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" -" delimiters.\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" +" and newline.\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" @@ -3881,11 +4015,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3903,12 +4040,14 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" -#: builtins.c:1041 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3928,7 +4067,8 @@ msgstr "" " Çıkış Durumu:\n" " N veya kabul bir işlev veya betik çalıştırmıyorsa başarısız döner." -#: builtins.c:1054 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3971,7 +4111,8 @@ 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" @@ -3995,13 +4136,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4019,10 +4165,13 @@ msgstr "" " Seçenekler:\n" " -a Müteakip komutların ortamına aktarılmak üzere değiştirilen veya\n" " oluşturulan işlev ve değişkenleri imler.\n" -" -b Sonlandırılan artalan işlerin durumunun anında raporlanmasını sağlar.\n" -" -e Bir komut sıfırdan farklı bir çıkış durumu ile çıkarsa anında çıkar.\n" +" -b Sonlandırılan artalan işlerin durumunun anında raporlanmasını " +"sağlar.\n" +" -e Bir komut sıfırdan farklı bir çıkış durumu ile çıkarsa anında " +"çıkar.\n" " -f Dosya adı üretimini (globbing) iptal eder.\n" -" -h Çalıştırmak için aranan komutları bulur ve yerlerini hatırlar (hash).\n" +" -h Çalıştırmak için aranan komutları bulur ve yerlerini hatırlar " +"(hash).\n" " -k Atama deyimleri şeklindeki tüm argümanları komut adından önce\n" " belirtmek yerine ortama yerleştirir.\n" " -m İş denetimi etkinleştirilir.\n" @@ -4053,23 +4202,31 @@ msgstr "" " nounset -u ile aynı\n" " onecmd -t ile aynı\n" " physical -P ile aynı\n" -" pipefail bir boru hattının dönüş değeri ya sıfırdan farklı bir\n" -" durumla çıkan son (en sağdaki) komutun değeridir ya\n" -" da boru hattındaki tüm komutlar başarılıysa sıfırdır\n" -" posix Standart uyumu için POSIX 1003.2 standardındakinden\n" -" farklı öntanımlı işlemde Bash davranışını değiştirir\n" +" pipefail bir boru hattının dönüş değeri ya sıfırdan farklı " +"bir\n" +" durumla çıkan son (en sağdaki) komutun değeridir " +"ya\n" +" da boru hattındaki tüm komutlar başarılıysa " +"sıfırdır\n" +" posix Standart uyumu için POSIX 1003.2 " +"standardındakinden\n" +" farklı öntanımlı işlemde Bash davranışını " +"değiştirir\n" " privileged -p ile aynı\n" " verbose -v ile aynı\n" " vi vi tarzı bir satır düzenleme arayüzü kullanılır\n" " xtrace -x ile aynı\n" -" -p Ayrıcalıklı kipi etkinleştirir. Bu kipte, $BASH_ENV ve $ENV dosyaları\n" +" -p Ayrıcalıklı kipi etkinleştirir. Bu kipte, $BASH_ENV ve $ENV " +"dosyaları\n" " işlenmez, kabuk işlevleri ortamdan miras alınmaz. Kabuk, gerçek\n" " kullanıcı (grup) kimliği ile aynı olmayan etkin kullanıcı (grup)\n" " kimliği ile başlatılmışsa ve -p seçeneği verilmemişse, bu eylemler\n" " alınır ve etkin kullanıcı (grup) kimliği, gerçek kullanıcı (grup)\n" " kimliğine ayarlanır. Başlatırken -p seçeneği verilmişse, etkin\n" -" kullanıcı (grup) kimliği sıfırlanmaz. Bu seçeneğin kapatılması etkin\n" -" kullanıcı ve grup kimliklerinin gerçek kullanıcı ve grup kimliklerine\n" +" kullanıcı (grup) kimliği sıfırlanmaz. Bu seçeneğin kapatılması " +"etkin\n" +" kullanıcı ve grup kimliklerinin gerçek kullanıcı ve grup " +"kimliklerine\n" " ayarlanmasına sebep olur.\n" " -t Tek bir komutu okuyup çalıştırdıktan sonra çıkar..\n" " -u Parametre yorumlaması uygulanırken bir hata sonucu değişkenlerin\n" @@ -4100,7 +4257,7 @@ msgstr "" " Çıktı Durumu:\n" " Geçersiz seçenek belirtilmediği sürece başarılı döner." -#: builtins.c:1139 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4112,7 +4269,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4121,12 +4279,13 @@ msgid "" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -#: builtins.c:1161 +#: builtins.c:1182 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" @@ -4139,7 +4298,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1180 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4160,7 +4319,7 @@ msgid "" " Returns success unless an invalid option is given or NAME is invalid." msgstr "" -#: builtins.c:1202 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4171,7 +4330,7 @@ msgid "" " Returns success unless N is negative or greater than $#." msgstr "" -#: builtins.c:1214 builtins.c:1229 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4188,7 +4347,8 @@ msgstr "" " \n" " DOSYAİSMİndeki komutlar okunur ve çalıştırılır. DOSYAİSMİ içermiyorsa\n" " DOSYAİSMİnin yerini bulmak için $PATH değişkeni kullanılır. Bash POSIX\n" -" kipinde değilse ve $PATH içinde DOSYAİSMİ yoksa bulunulan dizine bakılır.\n" +" kipinde değilse ve $PATH içinde DOSYAİSMİ yoksa bulunulan dizine " +"bakılır.\n" " Verilmiş ARGÜMANlar varsa DOSYAİSMİ çalıştırılırken bunlar konumsal\n" " parametreler haline gelir. Aksi takdirde, konumsal parametreler\n" " değiştirilmez.\n" @@ -4197,21 +4357,23 @@ msgstr "" " DOSYAİSMİnde çalıştırılan son komutun durumunu döndürür. DOSYAİSMİ\n" " okunamazsa başarısız döner." -#: builtins.c:1245 +#: builtins.c:1266 msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." msgstr "" -#: builtins.c:1261 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4245,7 +4407,8 @@ 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" @@ -4266,7 +4429,8 @@ 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" @@ -4331,7 +4495,8 @@ msgstr "" " DOSYA1 -ot DOSYA2 dosya1, dosya2 den daha eski ise veya dosya2\n" " mevcutken dosya1 yoksa doğrudur.\n" " \n" -" DOSYA1 -ef DOSYA2 dosya1 ile dosya2 aynı aygıt ve aynı dosya düğümünü\n" +" DOSYA1 -ef DOSYA2 dosya1 ile dosya2 aynı aygıt ve aynı dosya " +"düğümünü\n" " gösteriyorsa (ona sabit bağ ise) doğrudur.\n" " \n" " Dizi işleçleri:\n" @@ -4357,17 +4522,20 @@ msgstr "" " İFADE1 -a İFADE2 İFADE1 ve İFADE2 her ikisi de doğruysa doğrudur.\n" " İFADE1 -o İFADE2 İFADE1 veya İFADE2 doğruysa doğrudur.\n" " \n" -" arg1 İM arg2 Aritmetik sınamalar. İM bunlardan biri olmalıdır:\n" +" arg1 İM arg2 Aritmetik sınamalar. İM bunlardan biri " +"olmalıdır:\n" " -eq, -ne, -lt, -le, -gt veya -ge.\n" " \n" -" Bir aritmetik ifadede ARG1 ve ARG2 arasında, aranan eşitlik, eşitsizlik,\n" +" Bir aritmetik ifadede ARG1 ve ARG2 arasında, aranan eşitlik, " +"eşitsizlik,\n" " küçüklük, büyüklük, küçüklük veya eşitlik, büyüklük veya eşitlik varsa\n" " ifadenin sonucu doğrudur. \n" " Çıktı Durumu:\n" -" Eğer İFADE true olursa başarılı, İFADE false ile sonuçlanırsa veya geçersiz\n" +" Eğer İFADE true olursa başarılı, İFADE false ile sonuçlanırsa veya " +"geçersiz\n" " argümanda başarısız döner." -#: builtins.c:1343 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4379,11 +4547,12 @@ msgstr "" " \"test\" yerleşiği ile aynıdır, fakat son argüman açan `[' ile eşleşen\n" " kapatan `]' olmak zorundadır." -#: builtins.c:1352 +#: builtins.c:1375 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" @@ -4397,40 +4566,54 @@ msgstr "" " Çıktı Durumu:\n" " Her zaman başarılı döner." -#: builtins.c:1364 +#: builtins.c:1387 #, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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 "" "\rtrap [-lp] [ARG SİNYAL ...]\n" " ARGüman içindeki komutlar, kabuk SİNYAL sinyalini aldığında okunur ve\n" @@ -4449,7 +4632,7 @@ msgstr "" " numaraları ile birlikte listelemesini sağlar. Kabuğa bir sinyal\n" " göndermek isterseniz \"kill -SİGNAL $$\" sözdizimini kullanabilirsiniz." -#: builtins.c:1400 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4475,60 +4658,17 @@ 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 "" -#: builtins.c:1431 +#: builtins.c:1461 #, fuzzy -#| msgid "" -#| "Modify shell resource limits.\n" -#| " \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" -#| " -S\tuse the `soft' resource limit\n" -#| " -H\tuse the `hard' resource limit\n" -#| " -a\tall current limits are reported\n" -#| " -b\tthe socket buffer size\n" -#| " -c\tthe maximum size of core files created\n" -#| " -d\tthe maximum size of a process's data segment\n" -#| " -e\tthe maximum scheduling priority (`nice')\n" -#| " -f\tthe maximum size of files written by the shell and its children\n" -#| " -i\tthe maximum number of pending signals\n" -#| " -k\tthe maximum number of kqueues allocated for this process\n" -#| " -l\tthe maximum size a process may lock into memory\n" -#| " -m\tthe maximum resident set size\n" -#| " -n\tthe maximum number of open file descriptors\n" -#| " -p\tthe pipe buffer size\n" -#| " -q\tthe maximum number of bytes in POSIX message queues\n" -#| " -r\tthe maximum real-time scheduling priority\n" -#| " -s\tthe maximum stack size\n" -#| " -t\tthe maximum amount of cpu time in seconds\n" -#| " -u\tthe maximum number of user processes\n" -#| " -v\tthe size of virtual memory\n" -#| " -x\tthe maximum number of file locks\n" -#| " -P\tthe maximum number of pseudoterminals\n" -#| " -T\tthe maximum number of threads\n" -#| " \n" -#| " Not all options are available on all platforms.\n" -#| " \n" -#| " If LIMIT is given, it is the new value of the specified resource; the\n" -#| " special LIMIT values `soft', `hard', and `unlimited' stand for the\n" -#| " current soft limit, the current hard limit, and no limit, respectively.\n" -#| " Otherwise, the current value of the specified resource is printed. If\n" -#| " no option is given, then -f is assumed.\n" -#| " \n" -#| " Values are in 1024-byte increments, except for -t, which is in seconds,\n" -#| " -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -#| " number of processes.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is supplied or an error occurs." 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" @@ -4565,9 +4705,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4612,9 +4753,10 @@ msgstr "" " için 512 baytlık blok sayısı olarak, -n ve -u için birimsiz, kalan\n" " seçenekler için 1024 baytlık blok sayısı olarak belirtilmelidir. \n" " Çıktı Durumu:\n" -" Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde başarılı döner." +" Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde " +"başarılı döner." -#: builtins.c:1482 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4632,39 +4774,28 @@ msgid "" " Returns success unless MODE is invalid or an invalid option is given." msgstr "" -#: builtins.c:1502 +#: builtins.c:1533 #, fuzzy -#| msgid "" -#| "Wait for job completion and return exit status.\n" -#| " \n" -#| " Waits for each process identified by an ID, which may be a process ID or a\n" -#| " 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" -#| " in that job's pipeline.\n" -#| " \n" -#| " If the -n option is supplied, waits for the next job to terminate and\n" -#| " returns its exit status.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns the status of the last ID; fails if ID is invalid or an invalid\n" -#| " option is given." msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4677,39 +4808,57 @@ msgid "" msgstr "" "Sürecin tamamlanmasını bekle ve çıkış durumunu döndür.\n" " \n" -" Belirtilen süreci bekler ve sonlandırma durumunu raporlar. Eğer ID verilmemişse\n" -" geçerli tüm alt süreçler beklenir ve dönüş kodu sıfırdır. Eğer ID bir görev tanımıysa\n" +" Belirtilen süreci bekler ve sonlandırma durumunu raporlar. Eğer ID " +"verilmemişse\n" +" geçerli tüm alt süreçler beklenir ve dönüş kodu sıfırdır. Eğer ID bir " +"görev tanımıysa\n" " görevin iletişim tünelindeki tüm süreçler beklenir.\n" " \n" -" -n seçeneği verilirse sonraki görevin sonlanması beklenir ve çıkış durumunı döndürür.\n" +" -n seçeneği verilirse sonraki görevin sonlanması beklenir ve çıkış " +"durumunı döndürür.\n" " \n" " Çıkış Durumu:\n" -" Kimlik durumunu döndürür, kimlik geçersizse veya geçersiz bir seçenek verilmişse\n" +" Kimlik durumunu döndürür, kimlik geçersizse veya geçersiz bir seçenek " +"verilmişse\n" " başarısız olur." -#: builtins.c:1533 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Sürecin tamamlanmasını bekle ve çıkış durumunu döndür.\n" " \n" -" PID tarafından belirtilen her süreci bekler ve sonlandırma durumunu raporlar.\n" -" Eğer PID verilmemişse geçerli tüm alt süreçler beklenir ve dönüş kodu sıfırdır.\n" +" PID tarafından belirtilen her süreci bekler ve sonlandırma durumunu " +"raporlar.\n" +" Eğer PID verilmemişse geçerli tüm alt süreçler beklenir ve dönüş kodu " +"sıfırdır.\n" " PID bir süreç kimliği olmalıdır.\n" " \n" " Çıkış Durumu:\n" -" Son PID'nin durumunu döndürür, PID geçersizse veya geçersiz bir seçenek verilmişse\n" +" Son PID'nin durumunu döndürür, PID geçersizse veya geçersiz bir seçenek " +"verilmişse\n" " başarısız olur." -#: builtins.c:1548 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4723,14 +4872,17 @@ msgid "" msgstr "" "Bir listedeki her üye için komut çalıştır.\n" " \n" -" `for' döngüsü bir öge listesindeki her üye için komut sırasını çalıştırır.\n" -" Eğer `in SÖZCÜKLER ...;' belirtilmemişse `in \"$@\"' varsayılır. SÖZCÜKLER\n" -" içerisindeki her eleman için, AD bu elemana atanır ve KOMUTLAR çalıştırılır.\n" +" `for' döngüsü bir öge listesindeki her üye için komut sırasını " +"çalıştırır.\n" +" Eğer `in SÖZCÜKLER ...;' belirtilmemişse `in \"$@\"' varsayılır. " +"SÖZCÜKLER\n" +" içerisindeki her eleman için, AD bu elemana atanır ve KOMUTLAR " +"çalıştırılır.\n" " \n" " Çıkış Durumu:\n" " Son çalıştırılan komutun durumunu döndürür." -#: builtins.c:1562 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4754,13 +4906,14 @@ msgstr "" " \t\tKOMUTLAR\n" " \t\t(( İFADE3 ))\n" " \tdone\n" -" İFADE1, İFADE2 ve İFADE3 aritmetik ifadelerdir. Eğer ifadelerden biri yoksa\n" +" İFADE1, İFADE2 ve İFADE3 aritmetik ifadelerdir. Eğer ifadelerden biri " +"yoksa\n" " 1'e değerlendirilmiş şekilde davranır.\n" " \n" " Çıkış Durumu:\n" " Son çalıştırılan komutun durumunu döndürür." -#: builtins.c:1580 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4781,21 +4934,25 @@ msgid "" msgstr "" "Listeden sözcükleri seç ve komutları çalıştır.\n" " \n" -" `SÖZ ...;' listesi yorumlanarak öğe listesi üretilir. Öğe listesindeki\n" -" her öğenin başına bir numara eklenerek standart hataya çıktılanır. Eğer\n" +" `SÖZ ...;' listesi yorumlanarak öğe listesi üretilir. Öğe " +"listesindeki\n" +" her öğenin başına bir numara eklenerek standart hataya çıktılanır. " +"Eğer\n" " `in SÖZ ... ;' parçası verilmezse in \"$@\"' verilmiş gibi konuma bağlı\n" -" parametreler basılır ve standart girdide PS3 istemi ile girdi beklenir.\n" +" parametreler basılır ve standart girdide PS3 istemi ile girdi " +"beklenir.\n" " Listede belirtilen numaralardan biri girdi olarak verilirse o konuma\n" " bağlı SÖZcük ile AD eşleştirilir. Girdi satırı boş verilirse dosyasonu\n" " okununcaya kadar komut istemi yinelenir. Listede belirtilenler dışında\n" -" verilen her değer için AD null ile eşleştirilir. Okunan satır $REPLY\n" +" verilen her değer için AD null ile eşleştirilir. Okunan satır " +"$REPLY\n" " değişkeninde tutulur. Her seçimden sonra bir break komutu ile\n" " sonlandırılıncaya kadar komutlar çalıştırılır.\n" " \n" " Çıktı Durumu:\n" " Son çalıştırılan komutun durumunu döndürür." -#: builtins.c:1601 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4812,7 +4969,8 @@ msgid "" msgstr "" "Veriyolu çalıştırması tarafından harcanan zamanı bildir.\n" " \n" -" VERİYOLUnu çalıştır ve sonlandığında kullanıcı işlemci zamanı ile sistem\n" +" VERİYOLUnu çalıştır ve sonlandığında kullanıcı işlemci zamanı ile " +"sistem\n" " işlemci zamanını içeren gerçek zamanın bir özetini yazdır.\n" " \n" " Seçenekler:\n" @@ -4823,7 +4981,7 @@ msgstr "" " Çıktı Durumu:\n" " VERİYOLU döndürme değerini döndürür." -#: builtins.c:1618 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4841,16 +4999,21 @@ msgstr "" " Çıkış Durumu:\n" " Son çalıştırılan komutun durumunu döndürür." -#: builtins.c:1630 +#: builtins.c:1671 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" @@ -4868,12 +5031,14 @@ msgstr "" " doğru sonuç vermemişse sıfır döner. Çıkış Durumu:\n" " Son çalıştırılan komutun durumunu döndürür." -#: builtins.c:1647 +#: builtins.c:1688 +#, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS as long as the final command in the\n" -" `while' COMMANDS has an exit status of zero.\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" +" an exit status of zero.\n" " \n" " Exit Status:\n" " Returns the status of the last command executed." @@ -4886,12 +5051,14 @@ msgstr "" " Çıktı Durumu:\n" " En son çalıştırılan komutun durumunu döndürür." -#: builtins.c:1659 +#: builtins.c:1700 +#, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS as long as the final command in the\n" -" `until' COMMANDS has an exit status which is not zero.\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" +" an exit status which is not zero.\n" " \n" " Exit Status:\n" " Returns the status of the last command executed." @@ -4904,7 +5071,7 @@ msgstr "" " Çıktı Durumu:\n" " Son çalıştırılan komutun durumunu döndürür." -#: builtins.c:1671 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4917,12 +5084,13 @@ msgid "" " The coproc command returns an exit status of 0." msgstr "" -#: builtins.c:1685 +#: builtins.c:1726 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" @@ -4930,7 +5098,7 @@ msgid "" " Returns success unless NAME is readonly." msgstr "" -#: builtins.c:1699 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4948,7 +5116,7 @@ msgstr "" " Çıktı Durumu:\n" " Son çalıştırılan komutun durumunu döndürür." -#: builtins.c:1711 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4972,16 +5140,8 @@ msgstr "" " Çıktı Durumu:\n" " Devam edilen görevin durumunu döndürür." -#: builtins.c:1726 +#: builtins.c:1767 #, fuzzy -#| msgid "" -#| "Evaluate arithmetic expression.\n" -#| " \n" -#| " The EXPRESSION is evaluated according to the rules for arithmetic\n" -#| " evaluation. Equivalent to \"let EXPRESSION\".\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise." msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4999,13 +5159,16 @@ msgstr "" " Çıktı Durumu:\n" " İFADE 0 olursa 1; aksi takdirde 0 döndürür." -#: builtins.c:1738 +#: builtins.c:1779 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" @@ -5026,7 +5189,8 @@ msgstr "" "Koşullu komut çalıştır.\n" " \n" " Koşullu İFADE'nin değerine bağlı olarak 0 veya 1 durumu ile döner.\n" -" İfadeler test yerleşiği tarafından kullanılan aynı ilkelerle oluşturulur\n" +" İfadeler test yerleşiği tarafından kullanılan aynı ilkelerle " +"oluşturulur\n" " ve aşağıdaki işleçler kullanılarak biraraya getirilebilirler:\n" "\n" " ( İFADE ) İFADE'nin değeri döner\n" @@ -5034,7 +5198,8 @@ msgstr "" " İFADE1 && İFADE2 İFADE1 ve İFADE2 her ikisi de doğruysa doğrudur\n" " İFADE1 || İFADE2 İFADE1 veya İFADE2 doğruysa doğrudur\n" "\n" -" `==' ve `!=' işleçleri kullanıldığında, işlecin sağındaki dizi bir kalıp\n" +" `==' ve `!=' işleçleri kullanıldığında, işlecin sağındaki dizi bir " +"kalıp\n" " olarak ele alınır ve kalıp eşleştirmesi uygulanır. `=~' kullanıldığında\n" " işlecin sağındaki dizi düzenli ifade olarak eşleştirilir.\n" " İFADE1, ifadenin değeri için tek başına yeterli ise && ve || İFADE2'yi\n" @@ -5043,7 +5208,7 @@ msgstr "" " Çıkış Durumu:\n" " İFADE değerine göre 0 veya 1." -#: builtins.c:1764 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5156,7 +5321,7 @@ msgstr "" " \t\tgerektiğine karar vermek için kullanılan kalıpların\n" " \t\tikinokta imi ayraçlı listesi.\n" -#: builtins.c:1821 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5214,7 +5379,7 @@ msgstr "" " Geçersiz bir argüman belirtilmediği veya dizin değişikliği başarısız\n" " olmadıkça başarılı döner." -#: builtins.c:1855 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5264,7 +5429,7 @@ msgstr "" " Geçersiz bir argüman belirtilmediği veya dizin değişikliği başarısız\n" " olmadıkça başarılı döner." -#: builtins.c:1885 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5315,9 +5480,10 @@ msgstr "" " \t\tsıfırla başlayarak sayılan N'inci girdiyi gösterir.\n" " \n" " Çıkış Durumu:\n" -" Geçersiz seçenek belirtilmediği veya bir hata oluşmadığı sürece başarılı döner." +" Geçersiz seçenek belirtilmediği veya bir hata oluşmadığı sürece başarılı " +"döner." -#: builtins.c:1916 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5337,7 +5503,8 @@ msgid "" " given or OPTNAME is disabled." msgstr "" -#: builtins.c:1937 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5345,27 +5512,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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\toutput the date-time string resulting from using FMT as a format\n" +" %Q\tlike %q, but apply any precision to the unquoted argument before\n" +" \t\tquoting\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "BİÇİM'in denetimi altında ARGÜMAN'ları biçimleyerek yazdırır\n" @@ -5396,13 +5572,15 @@ msgstr "" " Geçersiz bir seçenek belirtilmediği veya yazılmadığı takdirde veya bir\n" " atama hatası oluşmadığı sürece başarılı döner." -#: builtins.c:1971 +#: builtins.c:2014 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" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5416,20 +5594,28 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" -#: builtins.c:2001 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5441,15 +5627,19 @@ msgstr "" " takdirde eşleşmelerden yalnızca SÖZCÜK ile eşleşenler üretilir.\n" " \n" " Çıktı Durumu:\n" -" Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde başarılı döner." +" Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde " +"başarılı döner." -#: builtins.c:2016 +#: builtins.c:2062 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" @@ -5472,21 +5662,26 @@ msgid "" " have a completion specification defined." msgstr "" -#: builtins.c:2047 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5499,15 +5694,17 @@ 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 "" -#: builtins.c:2083 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5516,3 +5713,33 @@ msgstr "" "Bir dosyadaki satırları bir dizi değişkenine oku.\n" " \n" " `mapfile' ile eşanlamlıdır." + +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Geçerli altrutin çağrısının bağlamını döndürür.\n" +#~ " \n" +#~ " İFADE olmadan, \"$satır $dosyaadı\" döndürür. İFADE ile \"$satır\n" +#~ " $altrutin $dosyaadı\" döndürür; bu ek bilgi bir yığın izlemesi " +#~ "sağlamak\n" +#~ " için kullanılabilir.\n" +#~ " \n" +#~ " İFADE'nin değeri, geçerli çağrı biriminden önce kaç tane geri " +#~ "gidilmesi\n" +#~ " gerektiğini belirtir; en üst çerçeve, 0. çerçevedir." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "uyarı: %s: %s" + +#~ msgid "%s: invalid associative array key" +#~ msgstr "%s: geçersiz ilişkisel dizilim anahtarı" diff --git a/po/uk.gmo b/po/uk.gmo index eda38affa5962775d49e625d931a7c143defe39b..1d7e3f4673a0ae75aac1ebaa8de5ab445f484a34 100644 GIT binary patch delta 12637 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 NX{+iwyu#*d{vXaw`TGC> delta 55027 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%0AvJF9b0~HGb zu?BFjbZFp%#oGl{b&A;IbdGxx5<iltQ{~!$0v@9J5}k+EnZ+%BOa?-eMY0=njUHnN zpUAfE9ISY1Jq+&jkJzIvFucvR_K7m1_Y!nQ82Peut(hsdb&<FdWS;DzKmh6gEY&$a zjv5;|_X4T%1LkUb*L{YWA#T9(s_zx-#XS;#n0OXwXU7A2Uv}H|t$N=pf&KQz?<b{p zcrp-dFErf&P4~KU+Rty(hgj$ngMzkO2scT9%D2D|TS!@7WJBA8PCwc7OXNvkaPP-5 z-`ld^;cPYwbU~J)QiSCie($$oZhL->-ai*F&4PW`(`{Mt1Zih1qAEE@DxdU~XJmWf zCB46$U9K0{Z~jK_*UzJpJk#1Y{Z_xyezH=ZFjnY6C%kgm;S!qWM16Mv)bfCr^}hB? zx9bD!RU`C%1BIs|8B7><!6$ZTijkI!S7Iq%2e0Kh#xw6rH7<yJRfpu*C%yphYxqf{ zdyZM?^Jq>)!g*LOid>-=AGp+RU%*mtA8GU(S%N|@t+Dhn6V*G>?SSq7x1M5u{4YJl zqIZsHK6GZ0llHV6N30d`g;H_^SkeaF_&D(6PLL8*d#5O-*vbJ}7HF7#^bkY6bF3Io zWi;;x%n4cv4QY{KzgMUj&pK@61*C}*%+NR{N%lo(v?sxKc@zpuNy5!tAZVA!g%wVC z7vU1qH~anxfDw`j^fk9SzKY|BB}}0zqlAH-aeYeYy9<T!qVQGsC#oiLGw-z8m<z@^ zAf`)BCSq_$p;m1~>bF~LgyXMEg1ia7uKmi5dhca4mb;&`!tww`gn||!M(dQwajys? zOXIB6e&;$pWvRL@kJNsv9k_YIxGg+X;!^w4jUe)sBlIq_D1>!o@DeL`5aPXHC?O67 zP5J<6(no=R_mTS`f~bT5!0uV6_wEl2ega6=h*Uix1pGO6`0VB-AV;Vp0`5x)(F9&d zob#aL0Jp`tB4{A59{mZ2o9r<)daAu=xzWWQ^|{`@&tow7gYk!a3W3~^ymvjju{f4Q zsl8%^KHvtB&K)$@In*j_-(6R?MK;15hIfqNHAFCxz<?A<$^=}gI@h28$aW-LT*gcP z@&mm~uVD#Smc=jFgP+$^=lFztJ2{Hej=+;$W@@(Zf<QEQ2R5n<cmI~U|GUVuLx=yO z=UTIP>#l0O$V-r_YEm3JXeCle3I>%P>>*J5cG$trd|w}Izp_=|+`fTQV)JGheQfJ` zBe^$Y`XZUT^KAX>J=^p#_Rp_3(i^Ybq-V5Cl|00j9LxaDU>|!`Pq%;HsHfRI-qQ!! ztADDux4&~j?_$TV)>GQkjwt2`paF2xdNdiZ0$}JOEL`YVfq;|jx}kaFUwD_w#8Pk9 zi@@qGR^4p7dZAWBQ3M>kx8*@VdZWG4rw<%{j2xJK@kf|Q?mWQoPM*$QzYCb7@HM@I z{inA;qE^o|u1H~j_W~<P%DIBC*1T0e-hq=5_OVoBxV>PMF}yKvvp%`Y;C*P9MV!Mi zK?8ef{LGF=^`UlCq0!quI^XCr@Y^-+)zu_(cmbZ{q&;poQZ3ewjUsx5=vcZg^_;#? zV=khf#~~t3bV|y;lMHZ{A~b@Nhod&c#gr>N(QN;34`YD6H^b;)|Ne)1uMDA{DDOhF zK7n(#2zl&(eWMSwOP&UY;olL6To1#~r$o}qjf+(8$X*)KhYs>7V*$-5klV>KTtXdq zT<>iFS1zA!4781DM!F?}sEhw~e2MgP(l1Kz;&K#SfB0LChT?Cp41qJ1R|@}`e~mFv zPqy>M8YyMMH*Y@R(bO$Qbet_G4SL30P1BsF<a0gcs%WhlUgJe?4PZnzaF8S_IkH3) zWR%^^@ut0WmoajPat|CCNeXd@{?7@6w)F@4uvy^n!_WKTdx>pu!1I8sa}-!M$RL^0 zH7Ixc=@;jzFc9(MId;Eqz@4rAfo|$P`~E{ls{P3ty<ZZ{Zl^Cau1Y4;j@)nmE6?cP zQ;ln$!oh9-Xx;3>m%<5;{@wn1-%046ZN+G<R@@NhjpC$WaIAPq#Bp@qP-~CrX{3%o zRj?Hmj*rvWr!n9lG$r00XAddYH`#kS8lCNVKL+XSu@m&(w7q(-_M9{-Eitm~Evxlz z_A}e`UX7dY($7x24p88RWVIe)Z;*L2PQGoSK=XpgG=cG-2(gCUsCVm%c!Z#uLbXRJ z<i2u)noF;j32jdzl)Q)T2}c$7yFb)ZMzur{xOBXv(;|qbRGP5r_Ag3}Yb_-lG)cFd zM~OhK;rhpo-n<&bzrr*hNXUn9cHy)<G7v5arm#WjqN|GRg*noOi6VRnyV(M=@#;j< z%XRX`6r>3L$86bd<xB>ZTLW9N_^C-|OVMIK*FJVu?`=1YH#%C*;N)y>BP-P;yb#5T zP+%#v-~mn){`c9X^XI6z1N7;P63g4S?J>H|Y>}UE-Agp1jjo$7a?2d2HF(pf$W<vx zXMhpr|4C0xRmJQPJQ~D>+wb~~loT3CT@>o$sy#+uOrkr^zfhX6E9WM>_zCqUJbA7I z_C%zxYiSSr6EDU?hb9rXUNtL-)DEd+SCtuq4KvfezsxZEN*3lrqb-#GC%o7{D>M4F z%R*s?ji<Ilb8ZjWsrO!;<KCnP%8kz@&$JLjz<^17-o!Ma&9M53pHRHs3xX8&PNo(e zpx%9W@y;m;3K<dJe*O=7+8VllkK8rP1)kvkC<u5R9}9?^<)WZ~*jo68_3~7g+&;m& zwWd7!aQWnvJ>(>~qqTAk!d&yV$ZnkyIaWEoCp+pkl&1~DGu1>>RuTBybyB6B=Dds= zvU4cX6CWNBt|~bp<RcD4K~dCO{J8f_gS|=QyL1{zFr4B;+uwYxr?)4sj@qH6NXI;I z=k!E+N!mOg(Nj&zM6{xKg@6659eP4fw<w24s%H=V*HLxc{w_fojzp0L=Ul`mMlvKR zo)jJGN9h4Kl4>J2m*WZKdHc_!^=?BbMa9{~gzjp<ks>%kInNTO?8Agdq=qpElvF7B z#`e37dU{8pcxxGz$G*~Ev_mCEPJiKYp=hGuqnzy*8PUe8U(#RhG1692T;z&ha069T zd|QY&YSG-<cNBqbv!2yESo^(>ENV4!&Xqhlt8;kNB#*sJ;p$U7g<65FDzP4G0GZ_? zUw^l>3OjHK<Rr`0^vC6JMlB%@ZQfyLPS6K-^&IipN1OE##$s^}`|F_IahSN1u;q^3 z*TIzLmbjbnGR^(M*K~6^7`bf|d+;1@BLB8M5a`sSgk99PTR01Q<((X3ne4KXnguq> zaql#YKWtasWAvS@^i&ffrwCb1oUDeA6l~!jIqo%wVhB?m0+U)NrI2xAtKQzbRZr<w ztDFLJ&-7lnS6J62;x;r2+w6q{jFeP)(_xO{yYghiTUoD=FE<%hZ`VI&q+LyQ1>}aI zZ0;gtpJOJ-abLUueT1P9yBYQN5r`%W@ykh(CSm7>+-x8Q<{70kkZ|(tUhUAzm;*Ym z%SQEpTF7VLcZHGOk@W%a-_!y<y^C^|!8`T4JC(UTtVmHfT*<sQI(Y|AjM300^(y5w z1u8;Opc-MGQ$k5P4*o?xu|kPelaVdA*-PYB&Iyv@>Enc3^bu3k7^?-lN^T|cB<2y< z%cXX5yV?G~>ixQN5`}Pzhw}I^)dzH;dl=aaW+D%sKt7=q<n}BzJ$YF!Ov_??$Uscw z2-vQ9f;(Q_P>&dp9#K=2G10D1dm4d^qP=Fb-gP{q)y(7!1oh&x8+EnSts&cfah1`_ zekaXH$*Ol>^i9Ao<%3AC(oXD4*Xn6~-8Xz&8+U}4moWX}5w;xnf<`+8Tkj%Hs}7)x zW6xS?3>xUg9Ocm*kKmNu?Shfs$GxACLR;?=rb+!Lj@P`Rrns|5WVH&P04P?({^ew2 z;KW8J0ud3IO!cXCC(^raqNC7lY<=x#w&=qLokoxOe#)vIpv>yw__IEdlK>ZE;b;hP zFZ@yO)QNJbbcA<cke+JKx=QaUisO*dNh^$$VXAFxu5CRgAwxc=#gy_2NIoJH*FchT zQ}2QF90`+-@{vPq`Ml*auqoCFXc}6vEk5^*Sn2W{aVoNQ>%C;mE5Z^y3l#3@XrV0K z_RaUIrEe{^Yu~RMY4*`sMtl4CWWZ*}8r`(puP}Ob^WxC{W`r@wUa-RG(D^wEv)!t; z^mu*CJTm4X%%R3W`__H>AiL|A==s&srIN0eIO7wp9_39bVxaU3UM<PKgUDYyCuhpR zQ410F(WR3T(-%Z_1To(^yl`^7Gch}Uh(f%0lARNg@k?|%ciS(lGJ5wA9=;e2L!NRy zWan<vyW1=L;MRT88UFLrkMtq-9jo;ooUZuK+xqWQI+DMRH6suM4!nUf6dY63%Ob}U z<mS_A&ni}c)6VCm`yt9TITwMbIPffnUvgyotxxso_K-Y~k<m9AJ*{dW`ce0cFJUH6 zF`+XNeQ<KKqWH=!4{&~vbq#8U#7mqei+gctr%ZV5K-ZjH(UYFx=yXB;lF)^tFQAZn zA|X#->qTO(Ufs=UUe;A=n83LWu_>Q8Sz|B1#{dYJJSVW8*;#T}w>)m7TA~<^b+g23 z6V(k~lzM=Z5(&8!$-|`L4^Ym+TkwikZHhSQQH&QDGd|BiX0JBl@j)g@!WJ&5;{$PJ zdRlvDkrtuSoTk6){rLRm&u{7jZ%|KzQAM5?VyK47-h;ABt!#nr+N5OKWIxLvuA-sU zRGRdz#DS%UM)v43J#8e#8mGyi$Uu^E@fgz{iys8)9G7)0_Pp!$fnB)VkmM)F9`bkH zw4P8-LuH<T!+R=L5#_B;p-Zd8!$KT98{Z$_5q~KDU0{ua@k3(X%oh10_v{ofI)a^G zk?L2Aa}a@9ij%H{Gacpin|AJ8qkoQjB<A|jrto-RQl~0NoCmBNsi*Y^26`ZV2#cp= zBrM0wvETf=KGZ_?qN5{838!+lQK}a;TX9Hi{g9~0+R;i%GTvGOl$?r_#KoL0AaOir zNs?TYQT|0T&G#y0P&w`uo-OkLlB1Me_>?TayC0Xm)SUz_zZH*~flX|6OF+bVhNzoO zOkjA2vU3XcKBJt26E*K7i%PgA|Flyn1AOpRy58ULnf8Jk^b``?E=sghWv^PSr(Vm| z9IYpYu&C$=vFwwMKO;`N?T`KeGC|hX<<tXNZlQ+UrWb4R3yL2vDzv<nq%x*<6%*wL zFzd`!C#Fbo02fbmk~50JQVRzY$e}p@_A|LgAM27+;akte$ckhmKZ%4V>m{%d%56Y2 zBJ$|AZ0RAl!byot<DM>{$6|4ja}ymBonb|Zv9EJjF5DSM*}L`9$-)uFr9H>GR{H6g zt#~t83fE9AEA=i?R(Hv4LvK?xV9P32O6MwX3z&RiYV&?dPZzdPsNIV5Nt<*|$Z@)d zK(Mfu?a}P`6QrMy+aCvwepj4gHnER_skusZLtA!`m#f+*)`JtDwN~%ao~m-~smqQ2 z^8|$(I0nZx?xC|XVt|W@I2Qq=OtP?DxX>)~wf3hY^^_clER_YdB9k6oI?zW?)qVEp z)B2!kLXe&8FY70+AY|l>89TwbNh`bByAoJ(Hmx8nIo_Iuvj6m{?n^)3x=OY4zN`1P zbB7zr_GhI=Z~J?*^gKK3CxEeKAL%`(c$BG=WAb@xK|~<mB$<c^iQ~f_)23x6@&LN_ z&JIsI`^!>B75<YbZneX!^?@9aeR{Xi-##A4D&lL6P6IB{nIP*#w=;N8fF#>rsb|^A zw;IFsoW@^%qIVi+ufM3LG(K+{qm9Pbt~Bl(V!wC2G2Y&iYjm)4XBoro{<DlO_(D}z zd-P<Zr|o+{?_*cx8fo3ss<Zf6j7|sGLpSNYc~S9ejM4UUj~PAe-Ghv-_TI4G?^-|j zT@O%T%mt(BQHkp2xTj+5KU(|rzOz{S(<!=>FKyl}`{S?b)vLhlO``mCmz;rQ+a6S) zr?2I5j8h^PKpyQ$=`*MovWgRCQMxJ&0cUY>^(xIdTB~=Cn`K31(@F?h&ZQb%#)1x0 zZ)tVwBb@SRLa0bJ!T<KyU2o7c`nGXpYuvU6|4UEp=+r4p{YFpk>nRIslCMi_;d1)H zH}OraPL_d-55>mXI$6kWEqyNEl@S3oS9nbH34JQv1dIZG%E<_$>MTZQ?94d^(SB(z z@K4p#dWSxIi7TK7B~?L?z40B0nwxIdJ9Ob&Tv@X1QD^nk&hE+6McXorK3y;Xk?69I zy{7l>tE?lw&xuCR7rx_lJ>7mg1tPl3Ueb!H$`pC`(=v&AR@~Xz)|IVob!znn*DJ&q zDjUf0oUxG-Mx66iukM*HW*fn5Zk4x0wq5|<)>W^U+t+0;er>&z^<OT6ZELE_-V57S zr&ex>EpxAlZL8O1Z;ci9K^4oE^@|{wSP(eoa+k@v{;Tqyk$v>Xdg|c+5(}VDn>O^@ z-7!1T^wd<zV1t!_i04rFF_5$urWk4Vi|6%J>vH$ZwuQFKUOU@Xr^-&PT|#S#TWH(r zb=ga4+v;@LJ8He1EVox#i(bl=wPd25*G)MSbCz>nYVicA9blT1q)xY}Nt)KLwY4t4 zlgnOn+g7LQgifAIZxcE#b9!C&65O_?YV%H9d(dEGm^~oP7zlbgenuZeDhWQndqPjO z>o4lv(;ffawW{={UR62f*}!SB$2_9<sXMy4!z6hithzwLL?ynBl`z~H``sBvZ|ib* z-#YGw`|_nMqM|C#TD}HXzA8z_4P55$ye!Fuvk4tV{)cq<SL2PIV?`28eQ8K!lsRtO z<4L!YYg(Ufr1qx8dJ6#vn|AJ4qrG)WxZ`v-B^({n`RC<%vUp#Hy{yaKx7!w#FL(X! z_%?f8?mAvFY9m`WYS69?i)KK_S%-`v*5$70ZEHE|t-Y#4Ar9Klstz2k=`6mAL9613 z^fWDnss`<xEyfjg>Mh0qd_VNJX-3*II*C24x)qJ&#h+BOlsVGTlV!8&(T^HH)$@hF z;LtpBw=rO*T5v3)TQP}JL_p`Xo(W_?Ena)0qXPp3Y~g4ly^pdT4D6gYBkVod#!xzV zv+BjpPg0_|Nn9VG9DgZig|YwYAph6AmmB!=%S(1nx{=)Zl6a+Pf3t1-pVm|Td|z<< zk(MbDE}-`2q19MI<OP*ng7X@)2+Al`Z9lTv=xeFB3%63^s=kER5SOP69xt2o-rnqn zdi`)~m9vgEv!|Zb+ZXVu1*OkhxZ=VJiJz5szIe0hEyeMDcJm?#V;|gT3`}u;m`-xQ z6{{=m##8xvdD_l3HW#^^Mf&AV5rQWlz!mLkrd8AkIY+84zuL`%^}*%xrDuUO_0nQD zJ<!mafMN(O4(aOYLLh#ZSX4hydAm|4IA(#7ojSYK=m99)zq9hf2vzcSG>3rvJPz^8 z^NWm>F^Rfb6}!aMU6M{!x_$C7BW;9wr7>slzSZ3fcK3_=0Q>NF^v+j#A|)<BB)lRA zmz0WAw|e`Jx{+<E*B5_#44x6!8v~<?+l@KI7U5V+)T;5d`VNFWd4X|7Cxyy)EHL^_ z$;QyKwR4DuHbP6cM0FRCpz8pAK(AAxSjd}N=s!-qG+o(n8v|1o3lE;sb)P+DmXVQ_ zc-aSUIl)PzYP_Ql>U}IFBW$*{tJb#T_%|E^lRF}g>(o6tuaXK6lkXm(Pc&~5;&lD3 zdfFIN8+?ko!TYj>Yhje5ORxm?`PcNpIZA1#o3v}d6`3OwOLDVw>^W~hyy?8{DXGq5 zp7m;R`I?4ZzerCRgy!e4>Lz<wkl))``G(%bY9hVuVo!J_i6?Z~;w@`N-#PhmP^$!% z^i(dcX$8sb-W|B8_fB@t=I$@k2li@miVNlW4^^+H3>%|f^UTa<FR0T~^n-YiKiEDp z+34Jk^vyGqVSlCPj6wFEK}Hw*H(T{e`^y|q36<9yJ&hdAuG*xh*~{~dt@ip&-~_{` znFAjY_leL;svcXljV*OrJF-dPd?US+n?JSp{7WBbkD6j6clEsJitYN?Q_mS`9oa#K zuAg3Gq}m%t8fI=;GMY`1TvohY%9Whrmzi3;yCL4y#pQf@g^_B+FW3vl8U3u8Z45?h zX?q-xD`RG2T?!CwtMYcR@>-hmW?`~4DL$?z9CJXLUq1M7UqtY{p0&qy>+JardY|jW zr3D<I(RmK8*v+PuCo46WuAT<>>Cy^4y^}KBu>w7<9cq3%JjgJ!oR|FF@=NiqYQl=> z1qS=2$Bdz_<}OH<*4$eFDyo+mtD@wHYUMrW3aYMFy@?jrp&alYI9P3-R8Wo>Gj?E4 zcS~=&<;_N|Uv?ob0&w4AAa6+aREp)gCtPjdaBq5g!kYoILV(^4>LA{p0qIC-PXbTk zF-*DP+WTIsTVQa|ez#c%N@Y4!95F%fKinmM-etO0U8(o6^Iy?Z68lfgQj0D<rLW4n zM-3uhzm4CWV1;WxbH6@d5SJXbG4XNo4T`uFxL(x~wFz|&wa&?R%fl#nmxQPpVji;x z57pE265hjbHZ1bGs5!lFjbe&iY+ws6!XEQ0Jymb8zaD4w9UEyIgY2TaoW>eC)6UD( z2d&Cd>j_)OVf^7XuqZFvR%;4d+v@cHvQ>^=wtwr*uG^H{_9=!lxcB<EdYNqyCKxa1 zCc@&?+;NYs_M8dW`XnQzq_zzVsB@5mVtPZNmcbB8Rck}-wr@4{e)hr!Fjiys8L90l zs<nT&OHUh=N$<cm<Rre1Nq2i^+3$V{M(M?E`d|Z#N>=HEE#*pXmnSgUuVCJ*-rP%} z5*fwk+ytfG;Uuo|rVDL6{u5s1?aN4bDOGtpv_+Z+-;AwsEOzg{?uA{gy<^<?R=%;< z=%-u~BiAQRD{cRqdY}HScq<WEaPqIO0bMKK)ccQU&8HE^_5x9k??JcPjecEkXa8fI z-qRjE#psx!Tu-RJ0GC*4Z=Zi#htU3e(6`gC^t5iAaS*R``s|nedVhS~vyc66Kg@x3 zMfT&b=skNRzSw0y@;dOwh--}D_VQBDhRTI7?|_HUwUx$=uY$=N{42fJV2&?aRDC!K zKJNp)PdmC{!&&W6S2fH?ZuycAM|3dDWX>S4Bg3!zZj+^5$nXNA3jc^p3%FbZE7uDX zUKitZ+bQ{$67$T(7VjzKUv60i>au987r*0ukEMD0i{4uts0^)1N{n;cxZU#^J#DtE zAoRS>Pv`F~YnKX=6JNSYSln`FaWefTu1~5LwV@4C5jq8Zo?<K|K=vghW3%l0Z!*&C z#SMCDrn{T^Rx#-l__6CVjXv{Q+#}?p^3y#$zKj;U6@KJiIJ__Jgrrb%;VdKNDt>8E z)$SK$GRxKO2M+vH?@J}O-A_?+Ow>Vv>$_r#(Pvyjga+*Bl)bj7vllOK+tx}wwLe~W zE^f!-oZT6^R<j;ok(fWrNE=4Oh&L}TJ5&<T6ctsyJ$jVU$*xZY4C4#@_S)ITcY4X# zl+$%|f;4{sw79TY??F*X&$b)%%y*7)m4Y9qM(Ct-wT8Gez2y~H{0`Rdeyp4J#|w>q zX|iBdPR4{`#bQo3uCRZ<)#%CR#P$4!5PI)k_t~4^tT)xGWvC`NP3UNEvI8Rb1ICCe zcCsnK_nJrQIgKd=#_@KOjwq=Zjz0E#wkTiD=S$|~brj5=pt6UW^)hYBQJb5?Wh-$8 zD+wtP)Z4nm-m~YG8+CN&RXHaWepa>Q2^XK3iPz7;@IsT;dS9~?SIyBog_rCT3-sQF zGGEw&z?}J|8qYdX!w<!eXX3psS!%sb!ctIAr(6Z`TfL`eLRnB26`$C-D~z<^=-#k_ zOc=^1oibRgJ>+w}cV}fl=PiUTU1YH~QFP@<J$<M++_>B_uddgJ4OGU<j33N$P(>TZ z(!YLohd=4vl((u9ZtLUB0bjP6a7);MAx8f!6$3yczS4bkmapY{{=7vW)ME?hEW~** zh{Vw!gL(XVve9W=3tHfK;$HU_>>z7m3?n^5<~&+lpLNN7c@Xe*pue8Vg~%J8(7X5K zg;0FU?1^+u8&6k;JJI}ee4wJ-5}}$Zr#9W*dxepb;@nKBa6E~;USUtkH3m*;DGqLu z+sOfVN)fA+JMgH&gWmb@WZ{I$S9uts1yz&|NfskIstxf5BdNxnYu=O#IGkwLS$JR4 zgD{SA>$$jg^OyaBUB7}L)uLROxc#EVo{5om(q!UF8gYL>LbyRSlzb8<_I$eePI^&q zE9&7+GEtduaSY&UhA4f@!Oc38djbr;U4*iEGG<A5Db?N!K5QDz(&9RGue;o*n~Ktd zId*QLk>2?8dB(mGsl%%i3d@Nn4sJANHeSEUc)wFdNgH>rd#@Q?(RgL85z|v!Uce4b zsjSC-`A*|Uo!$2wR@7yGKC<!RoyLhF{ptT}g>o~yTQ9%DKK!^bu)A93jRU^(cRh7V zc4B=jU)A2SM7m|e<)VDJFW=(cN-?b6?Fpk_=WOMY+A((<LmO{@+$iZ}Z_LuW+cWBo z%w94vBwZ*VOW{yG+unP^xT^7Y^~MwW1N*>)kA+yxZhzKDv0pf0Wa4$}sa<7ihRe_P n;`1F1#>vqn-|`0c#NcCvhh6zT_X#JBE0g7Y?o%%q^NjxobrPNr diff --git a/po/uk.po b/po/uk.po index 0c3568d07..ba6fc5299 100644 --- a/po/uk.po +++ b/po/uk.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2022-06-17 19:34+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n" @@ -18,127 +18,131 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 20.12.0\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "неправильний індекс масиву" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: вилучаємо атрибут nameref" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: неможливо перетворити індексований масив на асоціативний" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: означення нечислових елементів неможливе" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: при означенні асоціативних масивів слід вказувати ключ" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: не вдалося створити: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command: не вдалося знайти відповідне призначення для команди" +msgstr "" +"bash_execute_unix_command: не вдалося знайти відповідне призначення для " +"команди" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: перший непробільний символ не є «\"»" # c-format -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "нема заключної «%c» у %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: пропущено двокрапку-роздільник" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "«%s»: не вдалося зняти призначення у мапі ключів команди" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "розкриття дужок: не вдалося отримати пам’ять для %s" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "розкриття дужок: не вдалося отримати об’єм пам’яті для %u елементів" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "розкриття дужок: не вдалося отримати об’єм пам’яті для «%s»" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "«%s»: некоректна назва замінника" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "редагування рядку не ввімкнено" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "«%s»: неправильна назва набору призначень клавіш" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: не вдалося прочитати: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "«%s»: невідома назва функції" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s не призначено жодної клавіші.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s можна запустити за допомогою " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "«%s»: не вдалося зняти призначення" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "кількість циклів" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "має сенс лише усередині циклів `for', `while' та `until'" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -147,7 +151,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Повертає контекст виконання поточної підпрограми.\n" " \n" @@ -156,351 +164,368 @@ msgstr "" " використовувати для трасування стеку.\n" " \n" " Значення ВИРАЗУ визначає на скільки рівнів викликів піднятися від\n" -" поточного; поточний рівень є нульовим." +" поточного; поточний рівень є нульовим.\n" +" \n" +" Код завершення:\n" +" Команда завершується невдало, якщо оболонка зараз не виконує функцію\n" +" або якщо ВИРАЗ є неправильним." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "змінну HOME не встановлено" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "забагато аргументів" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "порожній каталог" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "змінну OLDPWD не встановлено" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "рядок %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "попередження: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: використовуйте: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: параметр потребує аргументу" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: потрібен числовий аргумент" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: не знайдено" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: неправильний параметр" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: некоректна назва параметра" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "«%s»: неправильний ідентифікатор" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "неправильне вісімкове число" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "неправильне шістнадцяткове число" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "неправильне число" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: сигнал вказано з помилками" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "«%s»: не є ідентифікатором процесу чи завдання" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: змінна призначена лише для читання" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: не вдалося встановити значення" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s виходить за встановлені межі" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "аргумент" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s виходить за встановлені межі" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: нема такого завдання" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: керування завданнями не ввімкнене" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "керування завданнями не ввімкнене" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: заборонено обмеженнями" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "заборонено обмеженнями" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: не є вбудованою командою оболонки" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "помилка запису: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "помилка встановлення параметрів термінала: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "помилка отримання параметрів термінала: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: помилка отримання поточного каталогу: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: завдання вказано неоднозначно" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "у цій версії не можна скористатися довідкою" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: не є індексованим масивом" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: не вдалося знищити: %s лише для читання" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: не вдалося знищити" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: неправильна назва дії" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: не вказано специфікація завершення" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "попередження: можливо параметр -F працює не так, як ви очікуєте" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "попередження: можливо параметр -C працює не так, як ви очікуєте" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "наразі функція завершення рядку не виконується" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "може використовуватися лише усередині функції" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "`-f' не використовується для створення функцій" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: незмінна функція" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: еталонна змінна не може бути масивом" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: не можна використовувати циклічне посилання у змінній посилання" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: циклічне посилання за назвою" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "«%s»: некоректна назва змінної для посилання за назвою" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: неможливо знищити масив таким чином" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: неможливо перетворити асоціативний масив на індексований" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" -msgstr "%s: встановлення значень для складеного масиву у лапках вважається застарілим" +msgstr "" +"%s: встановлення значень для складеного масиву у лапках вважається застарілим" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "динамічне завантаження недоступне" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "не вдалося відкрити колективний об’єкт %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "не вдалося знайти %s у колективному об’єкті %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: динамічне вбудовування вже завантажено" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" -msgstr "функцією завантаження для %s повернуто повідомлення щодо помилки (%d): не завантажено" +msgstr "" +"функцією завантаження для %s повернуто повідомлення щодо помилки (%d): не " +"завантажено" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: завантажений не динамічно" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: не вдалося вилучити: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: це каталог" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: не є звичайним файлом" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: файл завеликий" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: не вдалося виконати бінарний файл" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: не вдалося виконати: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "вихід\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "це не оболонка сеансу: використовуйте `exit'" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Залишилися призупинені завдання.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Фонові завдання все ще виконуються.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "команду не знайдено" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "параметри журналу" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: не вдалося відкрити тимчасовий файл: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "поточне" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "завдання %d запущене без контролю завдань" @@ -515,11 +540,11 @@ msgstr "%s: неправильний параметр — %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: параметр потребує аргументу — %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "кешування вимкнене" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: в кеші нічого немає\n" @@ -546,15 +571,18 @@ msgstr "" #: builtins/help.def:185 #, 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:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: не вдалося відкрити: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -565,30 +593,43 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"Ці команди оболонки визначені внутрішньо. Введіть `help', щоб побачити їх список.\n" +"Ці команди оболонки визначені внутрішньо. Введіть `help', щоб побачити їх " +"список.\n" "Введіть `help name', щоб дізнатися більше про функцію `name'.\n" -"Використовуйте `info bash', щоб отримати більше інформації про оболонку в цілому.\n" -"`man -k' чи `info' можуть стати в пригоді для отримання довідки з команд, яких немає\n" +"Використовуйте `info bash', щоб отримати більше інформації про оболонку в " +"цілому.\n" +"`man -k' чи `info' можуть стати в пригоді для отримання довідки з команд, " +"яких немає\n" "у цьому списку.\n" "\n" "Зірочка (*) поряд з назвою команди означає, що команда заборонена.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "-anrw можуть зустрічатися лише один раз" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "позиція у журналу команд" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "порожня назва змінної-масиву" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: параметр нульової довжини чи не вказаний" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: некоректна часова позначка" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: невдалий пошук по журналу команд" @@ -602,113 +643,113 @@ msgstr "%s: помилка inlib" msgid "no other options allowed with `-x'" msgstr "не можна використовувати інші параметри разом з `-x'" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: аргументи мають бути ідентифікаторами завдань чи процесів" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Невідома помилка" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "очікувався вираз" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: не є індексованим масивом" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: неправильно вказаний дескриптор файла" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: неправильний дескриптор файла: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: неправильна кількість рядків" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: неправильний початковий індекс" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: неправильний крок виклику функції" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "порожня назва змінної-масиву" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "змінні-масиви не підтримуються" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "«%s»: пропущено символ у шаблоні" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "«%c»: помилкове визначення формату часу" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "«%c»: помилковий символ у шаблоні" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "попередження: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "проблема з обробкою форматування: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "пропущено шістнадцяткову цифру у \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "пропущено цифру Unicode у \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "немає іншого каталогу" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: некоректний аргумент" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<немає поточного каталогу>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "стек каталогів порожній" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "рівень стеку каталогів" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -723,10 +764,12 @@ 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" @@ -748,7 +791,7 @@ msgstr "" " -N\tПоказує N-ний з кінця каталог у списку, що виводиться командою\n" "\tdirs без аргументів, відлік починається з нуля." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -794,7 +837,7 @@ msgstr "" " \n" " Вбудована команда `dirs' показує стек каталогів." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -823,8 +866,10 @@ msgstr "" " \tкаталогів зі стеку, проводити операції лише над стеком.\n" " \n" " Аргументи:\n" -" +N\tВилучає N-ний зліва каталог у списку, що показується командою `dirs'\n" -" \t(відлік починається з нуля). Наприклад: `popd +0' вилучає перший каталог,\n" +" +N\tВилучає N-ний зліва каталог у списку, що показується командою " +"`dirs'\n" +" \t(відлік починається з нуля). Наприклад: `popd +0' вилучає перший " +"каталог,\n" " \t`popd +1' — другий.\n" " \n" " -N\tВилучає N-ний з кінця каталог у списку, що показується командою\n" @@ -833,321 +878,334 @@ msgstr "" " \n" " Вбудована команда `dirs' показує стек каталогів." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: некоректне визначення часу очікування" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "помилка читання: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "`return' працює лише у функції чи скрипті, запущеному за допомогою `source'" +msgstr "" +"`return' працює лише у функції чи скрипті, запущеному за допомогою `source'" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "не можна одночасно знищити і функцію і змінну" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: не є масивом" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: не є функцією" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: не вдалося експортувати" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "кількість зсувів" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "не можна одночасно встановлювати й скасовувати параметри оболонки" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: неправильна назва параметра оболонки" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "потрібна назва файла" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: файл не знайдено" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "не вдалося призупинити" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "не можна призупинити оболонку сеансу" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s є псевдонімом до «%s»\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s — це ключове слово оболонки\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s є функцією\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s є спеціальною вбудованою командою оболонки\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s є функцією\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s є вбудованою командою оболонки\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s — це %s\n" # I know the difference between hash and cache, but here, # I think, this is more suitable... -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s знаходиться в кеші (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: помилковий аргумент обмеження" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "«%c»: неправильна команда" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: не вдалося отримати значення обмеження: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "значення обмеження" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: не вдалося змінити обмеження: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "вісімкове число" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "«%c»: помилковий оператор у символьному режимі" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "«%c»: помилковий символ у символьному режимі" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " рядок " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "остання команда: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Припинення..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "ІНФОРМАЦІЯ: " -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "Діагностичне попередження: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "невідома помилка команди" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "неправильний тип команди" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "неправильний з’єднувальний оператор" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "неправильний перехід" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: неозначена змінна" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aчас очікування вводу вичерпано: автоматичний вихід\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "не вдалося переспрямувати /dev/null на стандартний ввід: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: «%c»: помилковий символ шаблону" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: coproc [%d:%s] все ще існує" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "помилка каналу" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: перевищено максимальний рівень вкладеності eval (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: перевищено максимальний рівень вкладеності джерела (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: перевищено максимальний рівень вкладеності функцій (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: обмеження: не можна вказувати `/' у назві команди" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: команду не знайдено" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: неправильний інтерпретатор" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: не вдалося виконати: не знайдено потрібного файла" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: неправильний інтерпретатор" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: не вдалося виконати бінарний файл: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "%s є спеціальною вбудованою командою оболонки" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "не вдалося створити копію файлового дескриптору %d у %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "рівень вкладення виразів перевищено" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "нестача стеку рекурсії" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "синтаксична помилка у виразі" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "спроба призначення не-змінної" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "синтаксична помилка при спробі надати змінній значення" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "ділення на 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "вада: неправильна лексема у виразі" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "очікувалася `:' умовного виразу" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "експонента менша за 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "пре-інкремент чи пре-декремент потребують ідентифікатор" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "відсутня `)'" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "синтаксична помилка: очікувався операнд" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "синтаксична помилка: помилковий арифметичний оператор" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (позначка помилки \"%s\")" @@ -1164,7 +1222,7 @@ msgstr "некоректна ціла стала" msgid "value too great for base" msgstr "завелике значення основи" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: помилка у виразі\n" @@ -1173,186 +1231,195 @@ msgstr "%s: помилка у виразі\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: не вдалося отримати доступ до каталогів вищого рівня" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "%s є спеціальною вбудованою командою оболонки" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "не вдалося перевстановити режим без затримки файлового дескриптору %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "не вдалося отримати новий файловий дескриптор для вводу bash з файлового дескриптору %d" +msgstr "" +"не вдалося отримати новий файловий дескриптор для вводу bash з файлового " +"дескриптору %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: для нового файлового дескриптору %d вже існує буфер" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" -msgstr "ідентифікатор відгалуженого процесу %d знайдено у поточному завданні %d" +msgstr "" +"ідентифікатор відгалуженого процесу %d знайдено у поточному завданні %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "вилучення зупиненого завдання %d, що має групу процесів %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" -msgstr "add_process: ідентифікатор процесу %5ld (%s) вказує на його працездатність" +msgstr "" +"add_process: ідентифікатор процесу %5ld (%s) вказує на його працездатність" #: jobs.c:1839 #, c-format msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: ідентифікатор процесу не існує" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Сигнал %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Завершено" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Зупинено" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Зупинено(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Працює" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Зроблено(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Вихід %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Невідомий стан" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(збережено знімок оперативної пам’яті)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (РД: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "зміна групи дочірнього процесу (%ld на %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: процес %ld не є відгалуженим від цієї оболонки" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Нема запису для процесу %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: завдання %d зупинене" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: немає поточних завдань" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: завдання завершилося" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: завдання %d вже працює в фоні" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: увімкнути WNOHANG, щоб уникнути нескінченного блокування" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: рядок %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (збережено знімок оперативної пам’яті)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(тепер РД: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: помилка getpgrp" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: немає керування завданнями у тлі" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: алгоритм реалізації рядків" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "не вдалося встановити групу процесу для термінала (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "ця оболонка не може керувати завданнями" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: умова не виконується: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1361,376 +1428,398 @@ msgstr "" "\r\n" "malloc: %s:%d: потрібна умова не виконується\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "невідомий" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: зайнятий блок у списку вільних" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: аргумент є вже звільненим блоком" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: блок ще не виділено" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" -msgstr "free: виявлено перехід за нижню границю блоку; mh_nbytes не вкладається у рамки" +msgstr "" +"free: виявлено перехід за нижню границю блоку; mh_nbytes не вкладається у " +"рамки" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: виявлено перехід за нижню границю блоку; magic8 пошкоджено" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: розмір у записах на початку та в кінці блоку відрізняється" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: блок ще не виділено" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" -msgstr "realloc: виявлено перехід за нижню границю блоку; mh_nbytes не вкладається у рамки" +msgstr "" +"realloc: виявлено перехід за нижню границю блоку; mh_nbytes не вкладається у " +"рамки" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: виявлено перехід за нижню границю блоку; magic8 пошкоджено" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: розмір у записах на початку та в кінці блоку відрізняється" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: таблицю виділення заповнено FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p вже позначений як виділений у таблиці?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p вже позначений як вільний у таблиці?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "неправильна основа" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: невідомий хост" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: неправильна служба" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: неправильно вказаний мережевий шлях" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "мережеві операції не підтримуються" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: не вдалося змінити локаль (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: не вдалося змінити локаль (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: не вдалося змінити локаль (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: не вдалося змінити локаль (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Присутня пошта у $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Нова пошта у $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Пошту у %s прочитано\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "синтаксична помилка: потрібен арифметичний вираз" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "синтаксична помилка: неочікувана `;'" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "синтаксична помилка: `((%s))'" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: неправильний тип інструкції %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "here-document з рядка %d закінчено кінцем файла (очікувалося «%s»)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: інструкція переспрямування `%d' поза межами" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) перевищує обмеження SIZE_MAX (%lu): рядок обрізано" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) перевищує обмеження SIZE_MAX (%lu): " +"рядок обрізано" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "помилка запису: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "перевищено максимальну можливу кількість here-document" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "файл скінчився раніше, ніж було знайдено відповідний «%c»" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "файл скінчився раніше, ніж було знайдено `]]'" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "синтаксична помилка в умовному виразі: неочікувана лексема «%s»" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "синтаксична помилка в умовному виразі" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "неочікувана лексема «%s», очікувалася `)'" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "очікувалася `)'" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "неочікуваний аргумент унарного умовного оператора «%s»" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "неочікуваний аргумент унарного умовного оператора" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "неочікувана лексема «%s», очікувався бінарний умовний оператор" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "очікувався бінарний умовний оператор" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "неочікуваний аргумент бінарного умовного оператора «%s»" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "неочікуваний аргумент бінарного умовного оператора" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "неочікувана лексема «%c» в умовній команді" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "неочікувана лексема «%s» в умовній команді" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "неочікувана лексема %d в умовній команді" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "синтаксична помилка коло неочікуваної лексеми «%s»" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "синтаксична помилка коло «%s»" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "синтаксична помилка: раптово скінчився файл" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "синтаксична помилка: раптово скінчився файл" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "синтаксична помилка" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Використовуйте \"%s\", щоб вийти з оболонки.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "файл скінчився, перш ніж було знайдено відповідну `)'" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "завершення: функцію «%s» не знайдено" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: можливий цикл повторних спроб" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: неправильний з’єднувальний оператор `%d'" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: некоректний дескриптор файла" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: нульовий вказівник на файл" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" -msgstr "дескриптор файла xtrace (%d) не дорівнює номеру файла у вказівнику xtrace (%d)" +msgstr "" +"дескриптор файла xtrace (%d) не дорівнює номеру файла у вказівнику xtrace " +"(%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: «%c»: неправильний символ шаблону" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "дескриптор файла поза можливими межами" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: неоднозначне переспрямування" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: заборонено перезаписувати наявні файли" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: обмеження: переспрямування виводу заборонене" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "не вдалося створити тимчасовий файл для here-document: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: не вдалося надати змінній значення дескриптора файла" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port не підтримується" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "помилка переспрямування: не вдалося створити копію дескриптора файла" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "не вдалося знайти /tmp, будь ласка створіть його!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp має бути чинною назвою каталогу" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" -msgstr "режим форматованого виведення даних у інтерактивних оболонках буде проігноровано" +msgstr "" +"режим форматованого виведення даних у інтерактивних оболонках буде " +"проігноровано" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: помилковий параметр" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "не вдалося встановити uid %d: ефективним є uid %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "не вдалося встановити gid %d: ефективним є gid %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "не вдалося запустити засіб діагностики: режим діагностування вимкнено" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: це каталог" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "У мене нема назви!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, версія %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1739,49 +1828,56 @@ msgstr "" "Використовуйте:\t%s [довгий параметр GNU] [параметр] ...\n" "\t%s [довгий параметр GNU] [параметр] файл_сценарію ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Довгі параметри GNU:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Параметри оболонки:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD чи -c команда чи -O параметр_shopt\t\t(тільки на початку)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s чи -o параметр\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" -msgstr "Введіть `%s -c \"help set\"', щоб отримати більше інформації про параметри оболонки.\n" +msgstr "" +"Введіть `%s -c \"help set\"', щоб отримати більше інформації про параметри " +"оболонки.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "Введіть `%s -c help', щоб отримати більше інформації про вбудовані команди оболонки.\n" +msgstr "" +"Введіть `%s -c help', щоб отримати більше інформації про вбудовані команди " +"оболонки.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" -msgstr "Щоб повідомити про помилку в програмі, використовуйте команду `bashbug'.\n" +msgstr "" +"Щоб повідомити про помилку в програмі, використовуйте команду `bashbug'.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Домашня сторінка bash: <http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" -msgstr "Загальна довідкова інформація щодо використання програмного забезпечення GNU: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Загальна довідкова інформація щодо використання програмного забезпечення " +"GNU: <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: некоректна операція" @@ -1951,282 +2047,315 @@ msgstr "Інформаційний запит" msgid "Unknown Signal #%d" msgstr "Невідомий сигнал №%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "неправильна заміна: немає заключної «%s» у %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: неможливо означити елемент масиву списком" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "не вдалося створити канал для підставляння процесу" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "не вдалося створити дочірній процес для підставляння процесу" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "не вдалося відкрити іменований канал %s для читання" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "не вдалося відкрити іменований канал %s для запису" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "не вдалося здублювати іменований канал %s як fd %d" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "заміна команди: проігноровано порожній байт у вхідних даних" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "" +"command_substitute: не вдалося створити копію каналу із файловим " +"дескриптором 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "не вдалося створити канал для підставляння команди" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "не вдалося створити дочірній процес для підставляння команди" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" -msgstr "command_substitute: не вдалося створити копію каналу із файловим дескриптором 1" +msgstr "" +"command_substitute: не вдалося створити копію каналу із файловим " +"дескриптором 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: некоректна назва змінної для посилання за назвою" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: некоректне непряме розгортання" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: некоректна назва змінної" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: параметр не встановлено" +msgid "%s: bad substitution" +msgstr "%s: неправильна заміна" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: параметр нульової довжини чи не вказаний" +msgid "%s: parameter not set" +msgstr "%s: параметр не встановлено" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: підрядок коротший за 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: неправильна заміна" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: не можна призначити таким чином" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "у наступних версіях оболонки буде виконуватися обчислення для заміни арифметичних виразів" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" +msgstr "" +"у наступних версіях оболонки буде виконуватися обчислення для заміни " +"арифметичних виразів" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "неправильна заміна: немає заключної \"`\" у %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "нема відповідника: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "очікувався аргумент" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: очікувався числовий вираз" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "очікувалася `)'" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "очікувалася `)', отримано %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: очікувався бінарний оператор" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: очікувався унарний оператор" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "відсутня `]'" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "синтаксична помилка: неочікуване `%s'" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "неправильний номер сигналу" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "обробник пасток: досягнуто максимального рівня для обробника пасток (%d)" +msgstr "" +"обробник пасток: досягнуто максимального рівня для обробника пасток (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: неправильне значення у trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, 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:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: неправильний сигнал %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "помилка імпортування означення функції «%s»" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "рівень оболонки (%d) занадто високий, перевстановлено у 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "перевищено максимальну можливу кількість here-document" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: немає контексту функції у поточній області" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: змінною не може бути значення, яке приймають інші змінні" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: неможливо успадкувати значення несумісного типу" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: присвоєння цілого числа посиланню з назвою" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: немає контексту функції у поточній області" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s має нульове значення рядка експортування" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "Помилковий символ %d у рядку експорту для %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "немає `=' у рядку експорту для %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "pop_var_context: перший елемент shell_variables не є контекстом функції" +msgstr "" +"pop_var_context: перший елемент shell_variables не є контекстом функції" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: немає контексту global_variables" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "pop_scope: перший елемент shell_variables не є тимчасовим оточенням виконання" +msgstr "" +"pop_scope: перший елемент shell_variables не є тимчасовим оточенням виконання" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: не вдалося відкрити ФАЙЛ" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: некоректне значення дескриптора файла трасування" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: значення сумісності не належить припустимому діапазону значень" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "© Free Software Foundation, Inc., 2022" -#: version.c:47 version2.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" +#: 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" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, версія %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." -msgstr "Це вільне програмне забезпечення; ви можете його змінювати та розповсюджувати." +msgstr "" +"Це вільне програмне забезпечення; ви можете його змінювати та " +"розповсюджувати." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Не надається НІЯКИХ ГАРАНТІЙ у межах, передбачених законом." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: не вдалося виділити %lu байтів (виділено %lu байтів)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: не вдалося виділити %lu байтів" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: не вдалося виділити %lu байтів (виділено %lu байтів)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: не вдалося виділити %lu байтів" @@ -2240,8 +2369,13 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] назва [назва ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpsvPSVX] [-m keymap] [-f файл] [-q назва] [-u назва] [-r послідовність-клавіш] [-x послідовність-клавіш:команда-оболонки] [послідовність-клавіш:функція-readline чи команда-readline]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpsvPSVX] [-m keymap] [-f файл] [-q назва] [-u назва] [-r " +"послідовність-клавіш] [-x послідовність-клавіш:команда-оболонки] " +"[послідовність-клавіш:функція-readline чи команда-readline]" #: builtins.c:56 msgid "break [n]" @@ -2260,7 +2394,8 @@ msgid "caller [expr]" msgstr "caller [вираз]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [каталог]" #: builtins.c:68 @@ -2272,12 +2407,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] команда [аргумент ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [назва[=значення] ...] або declare -p [-aAfFilnrtux] [назва ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [назва[=значення] ...] або declare -p [-" +"aAfFilnrtux] [назва ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] назва[=значення] ... або typeset -p [-aAfFilnrtux] [назва ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] назва[=значення] ... або typeset -p [-aAfFilnrtux] " +"[назва ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2317,7 +2460,9 @@ msgstr "logout [n]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "fc [-e редактор] [-lnr] [перший] [останній] чи fc -s [шаблон=заміна] [команда]" +msgstr "" +"fc [-e редактор] [-lnr] [перший] [останній] чи fc -s [шаблон=заміна] " +"[команда]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2336,8 +2481,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [шаблон ...]" #: builtins.c:123 -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:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2348,16 +2497,26 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [специфікація завдання ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s сигнал | -n номер-сигналу | -сигнал] pid | завдання ... чи kill -l [сигнал]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s сигнал | -n номер-сигналу | -сигнал] pid | завдання ... чи kill -l " +"[сигнал]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let аргумент [аргумент ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a масив] [-d роздільник] [-i текст] [-n кількість-символів] [-N кількість-символів][-p запрошення] [-t ліміт-часу] [-u дескриптор-файла] [назва ...]" +#, fuzzy +msgid "" +"read [-Eers] [-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:140 msgid "return [n]" @@ -2365,7 +2524,8 @@ msgstr "return [n]" #: builtins.c:142 msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]" -msgstr "set [-abefhkmnptuvxBCEHPT] [-o назва-параметра] [--] [-] [аргумент ...]" +msgstr "" +"set [-abefhkmnptuvxBCEHPT] [-o назва-параметра] [--] [-] [аргумент ...]" #: builtins.c:144 msgid "unset [-f] [-v] [-n] [name ...]" @@ -2404,7 +2564,8 @@ msgid "[ arg... ]" msgstr "[ аргумент... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[аргумент] сигнал ...]" #: builtins.c:168 @@ -2428,106 +2589,135 @@ msgid "wait [pid ...]" msgstr "wait [ідентифікатор-процесу ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for НАЗВА [in СЛОВА ... ] ; do КОМАНДИ; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( вираз1; вираз2; вираз3 )); do КОМАНДИ; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select НАЗВА [in СЛОВА ...;] do КОМАНДИ; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] канал" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case СЛОВО in [ШАБЛОН [| ШАБЛОН]...) КОМАНДИ ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" -msgstr "if КОМАНДИ; then КОМАНДИ; [ elif КОМАНДИ; then КОМАНДИ; ]... [ else КОМАНДИ; ] fi" - #: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" +msgstr "" +"if КОМАНДИ; then КОМАНДИ; [ elif КОМАНДИ; then КОМАНДИ; ]... [ else " +"КОМАНДИ; ] fi" + +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while КОМАНДИ; do КОМАНДИ-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until КОМАНДИ; do КОМАНДИ-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [НАЗВА] команда [переспрямування]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function НАЗВА { КОМАНДИ ; } чи НАЗВА () { КОМАНДИ ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ КОМАНДИ ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "завдання [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( вираз ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ вираз ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - назви та значення деяких змінних оболонки" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | каталог]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [назва-параметра ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v змінна] шаблон-форматування [аргументи]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o параметр] [-A дія] [-G шаблон-оболонки] [-W список-слів] [-F функція] [-C команда] [-X шаблон-фільтрування] [-P префікс] [-S суфікс] [назва ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o параметр] [-A дія] [-G шаблон-" +"оболонки] [-W список-слів] [-F функція] [-C команда] [-X шаблон-" +"фільтрування] [-P префікс] [-S суфікс] [назва ...]" -#: builtins.c:235 -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 +#, fuzzy +msgid "" +"compgen [-V varname] [-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:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o параметр] [-DEI] [назва ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d роздільник] [-n кількість] [-O початок-відліку] [-s кількість] [-t] [-u дескриптор] [-C обробник] [-c крок] [масив]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d роздільник] [-n кількість] [-O початок-відліку] [-s кількість] [-t] [-u дескриптор] [-C обробник] [-c крок] [масив]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d роздільник] [-n кількість] [-O початок-відліку] [-s кількість] [-" +"t] [-u дескриптор] [-C обробник] [-c крок] [масив]" -#: builtins.c:256 +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d роздільник] [-n кількість] [-O початок-відліку] [-s кількість] " +"[-t] [-u дескриптор] [-C обробник] [-c крок] [масив]" + +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2542,7 +2732,8 @@ 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" @@ -2551,7 +2742,8 @@ msgstr "" " придатній до подальшого виконання формі `alias НАЗВА=ЗНАЧЕННЯ'.\n" " \n" " Інакше вона додає псевдоніми для кожної вказаної НАЗВИ, для якої надане\n" -" ЗНАЧЕННЯ. Пробіли в кінці ЗНАЧЕННЯ дозволяють увімкнути подальше розкриття\n" +" ЗНАЧЕННЯ. Пробіли в кінці ЗНАЧЕННЯ дозволяють увімкнути подальше " +"розкриття\n" " псевдонімів усередині цього псевдоніму під час його підставляння.\n" " \n" " Параметри:\n" @@ -2561,7 +2753,7 @@ msgstr "" " Команда завершується невдало, якщо було вказано НАЗВУ, для якої немає\n" " псевдоніма." -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2578,7 +2770,7 @@ msgstr "" " Код завершення:\n" " Завершується невдало, якщо НАЗВА не є визначеним псевдонімом." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2590,25 +2782,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2623,13 +2820,17 @@ msgstr "" " \n" " Параметри:\n" " -m набір Використовувати НАБІР призначень клавіш на час\n" -" виконання цієї команди. Назви наявних наборів: emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" виконання цієї команди. Назви наявних наборів: " +"emacs,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command та vi-insert.\n" " -l Вивести назви функцій.\n" -" -P Вивести назви функцій та які послідовності клавіш їм\n" +" -P Вивести назви функцій та які послідовності клавіш " +"їм\n" " призначено.\n" -" -p Вивести функції та призначення у формі, придатній для\n" +" -p Вивести функції та призначення у формі, придатній " +"для\n" " подальшого використання як ввід.\n" " -S Вивести послідовності клавіш, які запускають\n" " макровизначення.\n" @@ -2641,20 +2842,23 @@ msgstr "" " бути надалі використана як ввід.\n" " -q функція Показати, які послідовності клавіш запускають цю\n" " функцію.\n" -" -u функція Скасувати усі призначені цій функції послідовності.\n" +" -u функція Скасувати усі призначені цій функції " +"послідовності.\n" " -r послідовність Скасувати призначення ПОСЛІДОВНОСТІ.\n" " -f файл Прочитати призначення клавіш з ФАЙЛУ.\n" " -x послідовність:команда-оболонки\tПри введенні ПОСЛІДОВНОСТІ буде\n" " \t\t\t\tзапускатися КОМАНДА-ОБОЛОНКИ.\n" -" -X Показати список послідовностей клавіш, пов'язаних з -x та відповідні\n" -" команди у форматі, яким можна скористатися як вхідними даними\n" +" -X Показати список послідовностей клавіш, пов'язаних з " +"-x та відповідні\n" +" команди у форматі, яким можна скористатися як " +"вхідними даними\n" " для іншої програми.\n" " \n" " Код завершення:\n" " Команда завершується успішно, якщо вказані правильні параметри та не\n" " виникло помилки під час виконання." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2672,7 +2876,7 @@ msgstr "" " Код завершення:\n" " Команда завершується невдало, якщо N менше за 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2690,13 +2894,14 @@ msgstr "" " Код завершення:\n" " Команда завершується невдало, якщо N менше 1." -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2713,7 +2918,7 @@ msgstr "" " Команда повертає код завершення ВБУДОВАНОЇ-КОМАНДИ або помилку, якщо\n" " ВБУДОВАНА-КОМАНДА не є вбудованою командою оболонки." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2741,20 +2946,27 @@ msgstr "" " Команда завершується невдало, якщо оболонка зараз не виконує функцію\n" " або якщо ВИРАЗ є неправильним." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2770,11 +2982,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "Змінює робочий каталог оболонки.\n" @@ -2797,9 +3011,11 @@ msgstr "" " -P\tВикористовувати фізичну структуру каталогів, не переходити за\n" " \tсимволічними посиланнями: визначати джерело символічних посилань як\n" " \tКАТАЛОГ до обробки записів `..'.\n" -" -e\tякщо вказано параметр -P і програмі не вдасться визначити поточний\n" +" -e\tякщо вказано параметр -P і програмі не вдасться визначити " +"поточний\n" " \tробочий каталог, вийти з ненульовим значенням стану.\n" -" -@ у системах, де передбачено таку підтримку, показати файл з розширеними\n" +" -@ у системах, де передбачено таку підтримку, показати файл з " +"розширеними\n" " атрибутами як каталог, що містить атрибути файла\n" " \n" " Зазвичай команда переходитиме за символічними посиланнями, неначе було\n" @@ -2808,10 +3024,12 @@ msgstr "" " похилої риски або за початковим компонентом каталогу КАТАЛОГ.\n" " \n" " Код завершення:\n" -" Повертає 0, якщо каталог було змінено і якщо було успішно встановлено значення\n" -" $PWD у разі використання -P. За інших результатів повертає ненульове значення." +" Повертає 0, якщо каталог було змінено і якщо було успішно встановлено " +"значення\n" +" $PWD у разі використання -P. За інших результатів повертає ненульове " +"значення." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2838,7 +3056,7 @@ msgstr "" " Команда завершується невдало, якщо вказано неправильний параметр чи\n" " не вдалося отримати доступ до поточного робочого каталогу." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2854,7 +3072,7 @@ msgstr "" " Код завершення:\n" " Команда завжди успішна." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2866,7 +3084,7 @@ msgstr "" " Код завершення:\n" " Команда завжди успішна." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2878,12 +3096,13 @@ msgstr "" " Код завершення:\n" " Команда завжди завершується невдало." -#: builtins.c:471 +#: builtins.c:473 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" @@ -2897,21 +3116,25 @@ msgid "" msgstr "" "Запускає звичайну команду чи показує інформацію про команди.\n" " \n" -" Запускає КОМАНДУ з АРГУМЕНТАМИ, не роблячи пошуку серед функцій оболонки,\n" +" Запускає КОМАНДУ з АРГУМЕНТАМИ, не роблячи пошуку серед функцій " +"оболонки,\n" " чи показує інформацію про вказані КОМАНДИ. Може використовуватися для\n" " запуску команд з диску, коли існує функція з такою ж назвою.\n" " \n" " Параметри:\n" " -p Використовувати стандартне значення PATH, яке забезпечує\n" " знаходження усіх стандартних утиліт.\n" -" -v Вивести опис КОМАНД, подібний до виводу вбудованої команди `type'.\n" +" -v Вивести опис КОМАНД, подібний до виводу вбудованої команди " +"`type'.\n" " -V Вивести більш багатослівний опис кожної з КОМАНД.\n" " \n" " Код завершення:\n" -" Команда повертає код завершення КОМАНДИ або помилку, якщо КОМАНДУ не буде\n" +" Команда повертає код завершення КОМАНДИ або помилку, якщо КОМАНДУ не " +"буде\n" " знайдено." -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2939,12 +3162,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2971,10 +3196,12 @@ msgstr "" " -A\tЗробити НАЗВИ асоціативними масивами (якщо підтримується).\n" " -i\tНадати НАЗВА властивість `ціле число'.\n" " -n\tЗробити НАЗВУ посиланням на змінну, вказану як значення\n" -" -l\tПеретворити значення кожної НАЗВИ до нижнього регістру, якщо НАЗВИ визначено.\n" +" -l\tПеретворити значення кожної НАЗВИ до нижнього регістру, якщо НАЗВИ " +"визначено.\n" " -r\tЗробити НАЗВИ незмінними (лише для читання).\n" " -t\tНадати НАЗВАМ властивість `trace'.\n" -" -u\tПеретворити значення кожної НАЗВИ до верхнього регістру, якщо НАЗВИ визначено.\n" +" -u\tПеретворити значення кожної НАЗВИ до верхнього регістру, якщо " +"НАЗВИ визначено.\n" " -x\tЕкспортувати НАЗВИ.\n" " \n" " Замінивши `+' на `-' можна вимкнути відповідну властивість.\n" @@ -2986,10 +3213,11 @@ msgstr "" " змінними, як команда `local'. Параметр `-g' вимикає таку поведінку.\n" " \n" " Код завершення:\n" -" Команда завершується успішно, якщо вказані правильні параметри і не виникло\n" +" Команда завершується успішно, якщо вказані правильні параметри і не " +"виникло\n" " помилки під час виконання." -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2999,7 +3227,7 @@ msgstr "" " \n" " Синонім `declare'. Дивіться `help declare'." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3015,21 +3243,26 @@ msgid "" msgstr "" "Описує локальні змінні.\n" " \n" -" Створює локальну змінну НАЗВА та призначає їй ЗНАЧЕННЯ. ПАРАМЕТР може бути\n" +" Створює локальну змінну НАЗВА та призначає їй ЗНАЧЕННЯ. ПАРАМЕТР може " +"бути\n" " будь-яким параметром, що приймається командою `declare'.\n" " \n" -" Локальні змінні можуть використовуватися лише усередині функції; їх видно\n" +" Локальні змінні можуть використовуватися лише усередині функції; їх " +"видно\n" " лише у функції, де їх визначено та її нащадках.\n" " \n" " Код завершення:\n" -" Команда завершується невдало, якщо вказано помилкові параметри, стається\n" -" помилка під час надання змінній значення або якщо оболонка не виконує функцію." +" Команда завершується невдало, якщо вказано помилкові параметри, " +"стається\n" +" помилка під час надання змінній значення або якщо оболонка не виконує " +"функцію." -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3053,9 +3286,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3063,7 +3298,8 @@ msgid "" msgstr "" "Друкує аргументи до стандартного виводу.\n" " \n" -" Виводить АРГУМЕНТИ, відокремлені один від одного одинарним символом пробілу, із\n" +" Виводить АРГУМЕНТИ, відокремлені один від одного одинарним символом " +"пробілу, із\n" " завершальним символом розриву рядка до стандартного виводу.\n" " \n" " Параметри:\n" @@ -3089,14 +3325,16 @@ msgstr "" " \\xHH\tвосьмибітовий символ із шістнадцятковим кодом HH. HH\n" " \t\tможе бути одною чи двома шістнадцятковими цифрами\n" " \\uHHHH\tсимвол Unicode, чиє значення є шістнадцятковим числом HHHH.\n" -" \t\tHHHH може складатися з одної, двох, трьох або чотирьох шістнадцяткових цифр.\n" +" \t\tHHHH може складатися з одної, двох, трьох або чотирьох " +"шістнадцяткових цифр.\n" " \\UHHHHHHHH символ Unicode, чиє значення є шістнадцятковим числом\n" -" \t\tHHHHHHHH. HHHHHHHH може містити від однією до восьми шістнадцяткових цифр.\n" +" \t\tHHHHHHHH. HHHHHHHH може містити від однією до восьми шістнадцяткових " +"цифр.\n" " \n" " Код завершення:\n" " Команда завершується невдало, якщо виникне помилка запису." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3118,7 +3356,8 @@ msgstr "" " Код завершення:\n" " Команда завершується невдало, якщо трапиться помилка запису." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3138,6 +3377,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3146,8 +3391,10 @@ msgid "" msgstr "" "Вмикає та вимикає вбудовані команди оболонки.\n" " \n" -" Вмикає та вимикає вбудовані команди оболонки. Вимкнення команди дозволяє\n" -" вам запускати команду з диску, що має таку ж назву, як і вбудована команда\n" +" Вмикає та вимикає вбудовані команди оболонки. Вимкнення команди " +"дозволяє\n" +" вам запускати команду з диску, що має таку ж назву, як і вбудована " +"команда\n" " оболонки, без потреби вказувати повний шлях до команди.\n" " \n" " Параметри:\n" @@ -3158,7 +3405,8 @@ msgstr "" " -s\tДрукувати лише назви `спеціальних' команд Posix.\n" " \n" " Параметри, що контролюють динамічне завантаження:\n" -" -f\tЗавантажити вбудовану команду НАЗВА з колективного об’єктного ФАЙЛУ.\n" +" -f\tЗавантажити вбудовану команду НАЗВА з колективного об’єктного " +"ФАЙЛУ.\n" " -d\tВилучити вбудовану команду, завантажену за допомогою -f.\n" " \n" " Без параметрів вмикає кожну з НАЗВ.\n" @@ -3170,11 +3418,12 @@ msgstr "" " Команда завершується невдало, якщо НАЗВА не є вбудованою командою\n" " оболонки або якщо трапиться помилка під час виконання." -#: builtins.c:640 +#: builtins.c:648 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" @@ -3182,14 +3431,16 @@ msgid "" msgstr "" "Виконує аргументи як команду оболонки.\n" " \n" -" Об’єднує АРГУМЕНТИ в один рядок та виконує результат як команди, введені\n" +" Об’єднує АРГУМЕНТИ в один рядок та виконує результат як команди, " +"введені\n" " до оболонки.\n" " \n" " Код завершення:\n" -" Команда повертає результат виконання команди. Якщо отриманий рядок команди\n" +" Команда повертає результат виконання команди. Якщо отриманий рядок " +"команди\n" " є порожнім рядком, команда завершується успішно." -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3234,23 +3485,32 @@ msgstr "" " Getopts використовується підпрограмами оболонки для аналізу позиційних\n" " аргументів як параметрів командного рядку.\n" " \n" -" РЯДОК-ПАРАМЕТРІВ містить літери параметрів, які можуть бути вказані; якщо\n" +" РЯДОК-ПАРАМЕТРІВ містить літери параметрів, які можуть бути вказані; " +"якщо\n" " за літерою іде двокрапка, цей параметр очікує аргументу, відокремленого\n" " від нього пробілом.\n" " \n" -" Після кожного запуску getopts кладе наступний параметр до змінної оболонки\n" +" Після кожного запуску getopts кладе наступний параметр до змінної " +"оболонки\n" " $name, створюючи її, якщо треба. Номер наступного неопрацьованого\n" -" аргументу кладеться до змінної оболонки OPTIND. OPTIND встановлюється у 1\n" +" аргументу кладеться до змінної оболонки OPTIND. OPTIND встановлюється у " +"1\n" " кожного разу, як запускається оболонка чи скрипт. Якщо параметр очікує\n" " аргументу, getopts кладе аргумент до змінної оболонки OPTARG.\n" " \n" -" Getopts може повідомляти про помилки двома способами. Якщо першим символом\n" -" РЯДКУ-ПАРАМЕТРІВ є двокрапка, getopts використовує `тихе' повідомлення про\n" -" помилки. В такому режимі повідомлення про помилки не виводяться. Якщо буде\n" +" Getopts може повідомляти про помилки двома способами. Якщо першим " +"символом\n" +" РЯДКУ-ПАРАМЕТРІВ є двокрапка, getopts використовує `тихе' повідомлення " +"про\n" +" помилки. В такому режимі повідомлення про помилки не виводяться. Якщо " +"буде\n" " знайдено неправильний параметр, getopts покладе його до OPTARG. Якщо не\n" -" буде вказано очікуваний аргумент, getopts покладе ':' до НАЗВА, а символ\n" -" параметра — до OPTARG. У `гучному' режимі, при з помилками у параметрі у NAME\n" -" кладеться '?', а OPTARG скидається. Якщо потрібний аргумент не вказано, у\n" +" буде вказано очікуваний аргумент, getopts покладе ':' до НАЗВА, а " +"символ\n" +" параметра — до OPTARG. У `гучному' режимі, при з помилками у параметрі у " +"NAME\n" +" кладеться '?', а OPTARG скидається. Якщо потрібний аргумент не вказано, " +"у\n" " NAME кладеться '?', OPTARG скидається і друкується діагностичне\n" " повідомлення.\n" " \n" @@ -3265,12 +3525,13 @@ msgstr "" " Команда завершується успішно, якщо знайдено параметр; помилково, якщо\n" " параметри скінчилися або трапилася помилка." -#: builtins.c:694 +#: builtins.c:702 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" @@ -3278,11 +3539,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "Заміщує оболонку вказаною командою.\n" " \n" @@ -3295,14 +3558,15 @@ msgstr "" " -c\tЗапустити КОМАНДУ з порожнім оточенням.\n" " -l\tПокласти риску до нульового аргументу КОМАНДИ.\n" " \n" -" Якщо команду не вдасться запустити, неінтерактивна оболонка завершується,\n" +" Якщо команду не вдасться запустити, неінтерактивна оболонка " +"завершується,\n" " якщо тільки не встановлено параметр оболонки `execfail'.\n" " \n" " Код завершення:\n" " Команда завершується невдало, якщо команду не буде знайдено або якщо\n" " трапиться помилка переспрямування." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3314,29 +3578,34 @@ msgstr "" " Виходить з оболонки, повертаючи статус N. Якщо N не вказано, береться\n" " статус останньої запущеної команди." -#: builtins.c:724 +#: builtins.c:732 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 "" "Виходить з оболонки сеансу.\n" " \n" -" Виходить з оболонки сеансу зі статусом N. Повертає помилку, якщо команду\n" +" Виходить з оболонки сеансу зі статусом N. Повертає помилку, якщо " +"команду\n" " запущено не у оболонці сеансу." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3349,8 +3618,11 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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" @@ -3369,7 +3641,8 @@ msgstr "" " У форматі `fc -s [шаблон=заміна ...] [команда]', КОМАНДА запускається\n" " після заміни ШАБЛОН=ЗАМІНА.\n" " \n" -" При використанні цієї команди може бути зручним псевдонім r='fc -s' — тоді\n" +" При використанні цієї команди може бути зручним псевдонім r='fc -s' — " +"тоді\n" " `r cc' запустить останню команду, що починається з `cc', а `r' повторно\n" " виконає останню команду.\n" " \n" @@ -3377,7 +3650,7 @@ msgstr "" " Команда завершується зі статусом запущених команд, або помилкою, якщо\n" " трапиться помилка." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3390,7 +3663,8 @@ msgid "" msgstr "" "Переводить завдання у пріоритетний режим.\n" " \n" -" Переводить ЗАВДАННЯ у пріоритетний режим виконання і робить його поточним\n" +" Переводить ЗАВДАННЯ у пріоритетний режим виконання і робить його " +"поточним\n" " завданням. Якщо ЗАВДАННЯ не вказане, береться завдання, яке оболонка\n" " вважає поточним.\n" " \n" @@ -3398,12 +3672,14 @@ msgstr "" " Команда завершується зі статусом завершення завдання, що переведене\n" " у пріоритетний режим, або помилкою, якщо трапиться помилка." -#: builtins.c:779 +#: builtins.c:789 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" @@ -3411,20 +3687,23 @@ msgid "" msgstr "" "Переводить завдання у фоновий режим.\n" " \n" -" Переводить кожне з ЗАВДАНЬ у фоновий режим виконання, як ніби їх запущено\n" +" Переводить кожне з ЗАВДАНЬ у фоновий режим виконання, як ніби їх " +"запущено\n" " із `&'. Якщо ЗАВДАННЯ не вказані, береться завдання, що оболонка вважає\n" " поточним.\n" " \n" " Код завершення:\n" -" Команда завершується невдало, якщо контроль завдань не ввімкнено або якщо\n" +" Команда завершується невдало, якщо контроль завдань не ввімкнено або " +"якщо\n" " трапиться помилка." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3454,14 +3733,15 @@ msgstr "" " -t\tВивести збережені розташування НАЗВ, вказуючи перед розташуванням\n" " \t\tвідповідну НАЗВУ, якщо вказано декілька НАЗВ.\n" " Аргументи:\n" -" НАЗВА\tКожна з НАЗВ шукається у $PATH та додається до списку збережених\n" +" НАЗВА\tКожна з НАЗВ шукається у $PATH та додається до списку " +"збережених\n" " \t\tкоманд.\n" " \n" " Код завершення:\n" " Команда завершується невдало, якщо НАЗВУ не вдалося знайти або якщо\n" " вказано помилковий параметр." -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3479,18 +3759,21 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "Показує інформацію про вбудовані команди.\n" " \n" " Показує коротку довідку з вбудованих команд. Якщо вказано ШАБЛОН, надає\n" -" детальну довідку з усіх команд, що відповідають цьому ШАБЛОНУ. Якщо його\n" +" детальну довідку з усіх команд, що відповідають цьому ШАБЛОНУ. Якщо " +"його\n" " не вказано, друкує список пунктів довідки.\n" " \n" " Параметри:\n" " -d\tВивести короткий опис кожного з пунктів.\n" " -m\tПоказати довідку у форматі, подібному до man(1).\n" -" -s\tВивести лише короткий опис синтаксису використання кожної з команд,\n" +" -s\tВивести лише короткий опис синтаксису використання кожної з " +"команд,\n" " \tщо відповідають ШАБЛОНУ\n" " \n" " Аргументи:\n" @@ -3501,7 +3784,8 @@ msgstr "" " помилковий параметр." # WTF??? history list += history + history file ??? -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3525,23 +3809,31 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." msgstr "" "Показує чи змінює список попередніх команд.\n" " \n" -" Показує список журналу команд з номерами рядків, вказуючи `*' перед кожним\n" -" зміненим рядком. Якщо вказано аргумент N, показує лише N останніх рядків.\n" +" Показує список журналу команд з номерами рядків, вказуючи `*' перед " +"кожним\n" +" зміненим рядком. Якщо вказано аргумент N, показує лише N останніх " +"рядків.\n" " \n" " Параметри:\n" " -c\tВилучити зі списку усі збережені команди.\n" -" -d позиція\tВилучити рядок у ПОЗИЦІЇ (відносній). Відлік від'ємних значень\n" +" -d позиція\tВилучити рядок у ПОЗИЦІЇ (відносній). Відлік від'ємних " +"значень\n" " \t\tпозиції ведеться від кінця списку журналу\n" " \n" "\n" @@ -3556,18 +3848,22 @@ msgstr "" " \tпоказати результат (без збереження у списку журналу команд).\n" " -s\tДодати АРГУМЕНТИ до списку журналу як один запис.\n" " \n" -" Якщо вказаний ФАЙЛ, його буде використано як файл журналу команд. Інакше,\n" -" якщо визначено $HISTFILE, береться її значення, якщо ні — ~/.bash_history.\n" +" Якщо вказаний ФАЙЛ, його буде використано як файл журналу команд. " +"Інакше,\n" +" якщо визначено $HISTFILE, береться її значення, якщо ні — ~/." +"bash_history.\n" " \n" -" Якщо змінна $HISTTIMEFORMAT має значення, відмінне від порожнього рядку,\n" +" Якщо змінна $HISTTIMEFORMAT має значення, відмінне від порожнього " +"рядку,\n" " її буде використано як шаблон strftime(3) для показу часових позначок.\n" " Інакше часові позначки не виводяться.\n" " \n" " Код завершення:\n" -" Команда завершується успішно, якщо вказано вірні параметри та не виникло\n" +" Команда завершується успішно, якщо вказано вірні параметри та не " +"виникло\n" " помилки під час виконання." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3612,7 +3908,7 @@ msgstr "" " виникло помилки під час виконання. При використанні -x команда\n" " завершується зі статусом завершення КОМАНДИ." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3635,7 +3931,8 @@ msgstr "" " \n" " Параметри:\n" " -a\tВилучити усі завдання, якщо ЗАВДАННЯ не вказані.\n" -" -h\tПозначити ЗАВДАННЯ так, щоб вони не отримали SIGHUP, якщо оболонка\n" +" -h\tПозначити ЗАВДАННЯ так, щоб вони не отримали SIGHUP, якщо " +"оболонка\n" " \t\tотримає SIGHUP.\n" " -r\tВилучати лише поточні завдання.\n" " \n" @@ -3643,7 +3940,7 @@ msgstr "" " Команда завершується невдало, якщо вказано неправильний параметр чи\n" " ЗАВДАННЯ." -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3668,7 +3965,8 @@ msgstr "" "Надіслати сигнал до завдання.\n" " \n" " Надіслати процесу, вказаному за ідентифікатором процесу чи завдання\n" -" сигнал, вказаний за його номером чи назвою. Якщо не вказано ані першого,\n" +" сигнал, вказаний за його номером чи назвою. Якщо не вказано ані " +"першого,\n" " ані другого, буде надіслано SIGTERM.\n" " \n" " Параметри:\n" @@ -3686,14 +3984,15 @@ msgstr "" " Команда завершується успішно, якщо вказані правильні аргументи та не\n" " трапилося помилки під час виконання." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3758,7 +4057,8 @@ msgstr "" " \t+=, -=, <<=, >>=,\n" " \t&=, ^=, |=\tприсвоєння\n" " \n" -" Змінні оболонки можуть виступати операндами. Назву змінної буде замінено\n" +" Змінні оболонки можуть виступати операндами. Назву змінної буде " +"замінено\n" " її значенням (приведеним до цілого числа фіксованої довжини) у виразі.\n" " Для цього не потрібно встановлювати властивість змінної `ціле число'.\n" " \n" @@ -3770,19 +4070,24 @@ msgstr "" " Якщо результатом обчислення останнього АРГУМЕНТУ є 0, let повертає 1,\n" " інакше — 0." -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3790,11 +4095,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3812,13 +4120,16 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "Читає рядок зі стандартного вводу та розбиває його на поля.\n" " \n" -" Зчитує один рядок зі стандартного вводу чи з ФАЙЛОВОГО-ДЕСКРИПТОРА, якщо\n" +" Зчитує один рядок зі стандартного вводу чи з ФАЙЛОВОГО-ДЕСКРИПТОРА, " +"якщо\n" " вказано параметр -u. Рядок розбивається на поля по словах, перше слово\n" " призначується першій НАЗВІ, друге слово — другій НАЗВІ тощо, якщо\n" " залишаться непризначені слова, їх буде призначено останній НАЗВІ. Як\n" @@ -3840,13 +4151,15 @@ msgstr "" " -N кількість\tПрипинити, лише після читання КІЛЬКОСТІ символів, якщо\n" " \t\tсеред них не виявиться символі кінця файла або не буде перевищено\n" " \t\tчас очікування, ігнорувати роздільники.\n" -" -p запрошення\tВивести рядок ЗАПРОШЕННЯ (без переведення рядка в кінці)\n" +" -p запрошення\tВивести рядок ЗАПРОШЕННЯ (без переведення рядка в " +"кінці)\n" " \t\tперед читанням.\n" " -r\t\tНе обробляти зворотню похилу риску для екранування символів.\n" " -s\t\tНе виводити отриманий ввід на термінал.\n" " -t ліміт-часу\tПрипинити читання та вийти з помилкою якщо за вказаний\n" " \t\tпроміжок часу (в секундах) не було прочитано рядок цілком. Значення\n" -" \t\tзмінної TMOUT є стандартним значенням обмеження за часом. ЛІМІТ-ЧАСУ\n" +" \t\tзмінної TMOUT є стандартним значенням обмеження за часом. ЛІМІТ-" +"ЧАСУ\n" " \t\tможе бути дробовим числом. Якщо ЛІМІТ-ЧАСУ 0, read завершується\n" " \t\tуспішно, лише якщо ввід вже наявний на вказаному файловому\n" " \t\tдескрипторі. Якщо перевищено термін очікування, код завершення буде\n" @@ -3855,11 +4168,13 @@ msgstr "" " \t\tстандартного вводу.\n" " \n" " Код завершення:\n" -" Команда повертає помилку, якщо знайдено кінець файла, якщо вичерпано час\n" +" Команда повертає помилку, якщо знайдено кінець файла, якщо вичерпано " +"час\n" " очікування (значення, більше за 128), якщо сталася помилка під час\n" -" встановлення значення змінної, або якщо із -u вказано неправильний файловий дескриптор." +" встановлення значення змінної, або якщо із -u вказано неправильний " +"файловий дескриптор." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3872,14 +4187,16 @@ msgid "" msgstr "" "Повертається з функції оболонки.\n" " \n" -" Виходить з функції чи сценарію, виконаного за допомогою source зі вказаним\n" +" Виходить з функції чи сценарію, виконаного за допомогою source зі " +"вказаним\n" " кодом завершення N. Якщо N не вказане, return повертає статус останньої\n" " виконаної всередині сценарію чи функції команди.\n" " \n" " Код завершення:\n" " Команда повертає N, або помилку, якщо викликана не у функції чи сценарії." -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3922,7 +4239,8 @@ 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" @@ -3946,13 +4264,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3964,7 +4287,8 @@ msgid "" msgstr "" "Встановлює та скидає параметри оболонки та позиційні параметри.\n" " \n" -" Змінює значення властивостей оболонки та позиційних параметрів чи показує\n" +" Змінює значення властивостей оболонки та позиційних параметрів чи " +"показує\n" " назви та значення змінних оболонки.\n" " \n" " Параметри:\n" @@ -3973,7 +4297,8 @@ msgstr "" " -e Завершити роботу, якщо одна з команд завершиться помилкою.\n" " -f Вимкнути розкриття шаблонів назв файлів (globbing).\n" " -h Запам’ятовувати розміщення команд по мірі використання.\n" -" -k Переносити усі аргументи-присвоєння до оточення команди, не лише ті,\n" +" -k Переносити усі аргументи-присвоєння до оточення команди, не лише " +"ті,\n" " що йдуть перед назвою команди.\n" " -m Ввімкнути контроль завдань.\n" " -n Читати команди, але не виконувати їх.\n" @@ -3989,7 +4314,8 @@ msgstr "" " hashall те саме, що й -h\n" " histexpand те саме, що й -H\n" " history ввімкнути збереження журналу команд\n" -" ignoreeof не виходити з оболонки після зчитування кінця файла\n" +" ignoreeof не виходити з оболонки після зчитування кінця " +"файла\n" " interactive-comments\n" " дозволити коментарі у інтерактивній оболонці\n" " keyword те саме, що й -k\n" @@ -4002,18 +4328,22 @@ msgstr "" " nounset те саме, що й -u\n" " onecmd те саме, що й -t\n" " physical те саме, що й -P\n" -" pipefail кодом завершення ланцюжка команд є код завершення\n" +" pipefail кодом завершення ланцюжка команд є код " +"завершення\n" " останньої команди, що завершилася невдало, або\n" " нуль, якщо усі команди завершилися успішно\n" -" posix змінити поведінку bash у ситуаціях, де її поведінка\n" -" зазвичай відхиляється від стандарту Posix так, щоб\n" +" posix змінити поведінку bash у ситуаціях, де її " +"поведінка\n" +" зазвичай відхиляється від стандарту Posix так, " +"щоб\n" " вона відповідала стандарту\n" " privileged те саме, що й -p\n" " verbose те саме, що й -v\n" " vi використовувати подібний до vi інтерфейс\n" " редагування рядку\n" " xtrace те саме, що й -x\n" -" -p Ввімкнений, якщо дійсний та ефективний ідентифікатори користувача не\n" +" -p Ввімкнений, якщо дійсний та ефективний ідентифікатори користувача " +"не\n" " збігаються. Вимикає обробку файла $ENV та імпортування функцій\n" " оболонки. Вимикання цього параметра встановлює ефективні\n" " ідентифікатори користувача та групи у реальні.\n" @@ -4025,14 +4355,18 @@ msgstr "" " -C Вмикання параметра забороняє перезапис наявних звичайних файлів\n" " переспрямуванням виводу.\n" " -E Якщо ввімкнений, пастка ERR успадковується функціями оболонки.\n" -" -H Ввімкнути підставляння журналу за допомогою !. Цей параметр зазвичай\n" +" -H Ввімкнути підставляння журналу за допомогою !. Цей параметр " +"зазвичай\n" " ввімкнено у інтерактивних оболонках.\n" " -P Не переходити за символічними посиланнями при запуску команд,\n" " таких як cd, яка змінює поточний каталог.\n" -" -T Якщо ввімкнений, пастки DEBUG і RETURN будуть успадковуватися функціями\n" +" -T Якщо ввімкнений, пастки DEBUG і RETURN будуть успадковуватися " +"функціями\n" " оболонки.\n" -" -- Призначити всі аргументи, які ще не призначено до позиційних параметрів.\n" -" Якщо всі аргументи вже призначено, позиційні параметри вважатимуться\n" +" -- Призначити всі аргументи, які ще не призначено до позиційних " +"параметрів.\n" +" Якщо всі аргументи вже призначено, позиційні параметри " +"вважатимуться\n" " невстановленими.\n" " - Призначити аргументи, що залишилися позиційним параметрам.\n" " Параметри -x та -v вимикаються.\n" @@ -4040,13 +4374,14 @@ msgstr "" " Вимкнути параметр можна вказавши + замість -. Параметри можна змінювати\n" " й після запуску оболонки. Наразі ввімкнені параметри можна побачити у\n" " змінній $-. Залишкові аргументи вважаються позиційними параметрами\n" -" та призначаються по порядку відповідно до $1 $2, .. $n. Якщо АРГУМЕНТИ не\n" +" та призначаються по порядку відповідно до $1 $2, .. $n. Якщо АРГУМЕНТИ " +"не\n" " вказані, виводиться список усіх змінних оболонки.\n" " \n" " Код завершення:\n" " Команда завершується успішно, якщо вказані правильні параметри." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4058,7 +4393,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -4073,7 +4409,8 @@ msgstr "" " Параметри:\n" " -f\tНАЗВИ є функціями оболонки.\n" " -v\tНАЗВИ є змінними оболонки.\n" -" -n\tНАЗВИ є посиланнями на назви, визначення самих змінних скасовується.\n" +" -n\tНАЗВИ є посиланнями на назви, визначення самих змінних " +"скасовується.\n" " \n" " Без параметрів, unset спочатку намагається скинути змінну, якщо це не\n" " вдасться, тоді функцію.\n" @@ -4081,15 +4418,17 @@ msgstr "" " Деякі змінні не можуть бути скинутими; див. `readonly'.\n" " \n" " Код завершення:\n" -" Команда завершується невдало, якщо вказано неправильний параметр чи НАЗВА\n" +" Команда завершується невдало, якщо вказано неправильний параметр чи " +"НАЗВА\n" " доступна лише для читання." -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4103,7 +4442,8 @@ msgid "" msgstr "" "Вмикає властивість експортування змінних оболонки.\n" " \n" -" Позначає кожну з НАЗВ для експорту до середовища запущених надалі команд.\n" +" Позначає кожну з НАЗВ для експорту до середовища запущених надалі " +"команд.\n" " Якщо вказане ЗНАЧЕННЯ, призначає ЗНАЧЕННЯ перед тим, як експортувати.\n" " \n" " Параметри:\n" @@ -4116,7 +4456,7 @@ msgstr "" " Код завершення:\n" " Команда завершується успішно, якщо вказано правильні параметри та НАЗВИ." -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4139,7 +4479,8 @@ msgstr "" "Робить змінні оболонки незмінними.\n" " \n" " Позначає кожну з НАЗВ як незмінну; після цього значення НАЗВИ не можуть\n" -" бути змінені призначенням. Якщо вказане ЗНАЧЕННЯ, воно призначається, перш\n" +" бути змінені призначенням. Якщо вказане ЗНАЧЕННЯ, воно призначається, " +"перш\n" " ніж змінну буде позначено незмінною.\n" " \n" " Параметри:\n" @@ -4154,7 +4495,7 @@ msgstr "" " Код завершення:\n" " Команда завершується успішно, якщо вказано правильні параметри та НАЗВИ." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4172,7 +4513,7 @@ msgstr "" " Код завершення:\n" " Команда завершується невдало, якщо N менше за нуль чи більше за $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4192,18 +4533,22 @@ msgstr "" " позиційними параметрами при запуску ФАЙЛУ.\n" " \n" " Код завершення:\n" -" Команда повертає код завершення останньої команди, виконаної у ФАЙЛІ, або\n" +" Команда повертає код завершення останньої команди, виконаної у ФАЙЛІ, " +"або\n" " помилку, якщо ФАЙЛ не вдалося прочитати." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4220,7 +4565,7 @@ msgstr "" " Команда завершується невдало, якщо не ввімкнене керування завданнями чи\n" " якщо трапиться помилка." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4254,7 +4599,8 @@ 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" @@ -4275,7 +4621,8 @@ 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" @@ -4304,7 +4651,8 @@ msgstr "" " \n" " Завершується з кодом 0 (істинний) чи 1 (хибний), залежно від\n" " результату обчислення ВИРАЗУ. Вирази можуть бути унарними чи бінарними.\n" -" Унарні вирази часто використовуються для визначення властивостей файлів.\n" +" Унарні вирази часто використовуються для визначення властивостей " +"файлів.\n" " Також є оператори для рядків та для порівняння чисел.\n" " \n" " Файлові оператори:\n" @@ -4315,7 +4663,8 @@ msgstr "" " -d файл Істинний, якщо файл є каталогом.\n" " -e файл Істинний, якщо файл існує.\n" " -f файл Істинний, якщо файл існує та є звичайним файлом.\n" -" -g файл Істинний, якщо файл має встановлений біт `set-group-id'.\n" +" -g файл Істинний, якщо файл має встановлений біт `set-group-" +"id'.\n" " -h файл Істинний, якщо файл є символічним посиланням.\n" " -L файл Істинний, якщо файл є символічним посиланням.\n" " -k файл Істинний, якщо файл має встановленим біт `sticky'.\n" @@ -4324,7 +4673,8 @@ msgstr "" " -s файл Істинний, якщо файл існує і не є порожнім.\n" " -S файл Істинний, якщо файл є сокетом.\n" " -t дескриптор Істинний, якщо дескриптор відкритий у терміналі.\n" -" -u файл Істинний, якщо файл має встановлений біт `set-user-id'.\n" +" -u файл Істинний, якщо файл має встановлений біт `set-user-" +"id'.\n" " -w файл Істинний, якщо ви можете записувати до файла.\n" " -x файл Істинний, якщо ви можете виконати файл.\n" " -O файл Істинний, якщо ви є власником файла.\n" @@ -4332,7 +4682,8 @@ msgstr "" " -N файл Істинний, якщо файл був змінений після останнього\n" " читання\n" " \n" -" файл1 -nt файл2 Істинний, якщо файл1 новіший за файл2 (за датою зміни).\n" +" файл1 -nt файл2 Істинний, якщо файл1 новіший за файл2 (за датою " +"зміни).\n" " \n" " файл1 -ot файл2 Істинний, якщо файл1 старіший за файл2.\n" " \n" @@ -4360,7 +4711,8 @@ msgstr "" " \n" " -o параметр Істинний, якщо параметр оболонки ввімкнено.\n" " -v ЗМІННА\t Істинний, якщо встановлено змінну середовища ЗМІННА\n" -" -R ЗМІННА\t Істинний, якщо встановлено змінну середовища ЗМІННА і ця змінна є посиланням на назву.\n" +" -R ЗМІННА\t Істинний, якщо встановлено змінну середовища ЗМІННА і ця " +"змінна є посиланням на назву.\n" " ! вираз Істинний, якщо вираз хибний.\n" " вираз1 -a вираз2 Істинний, якщо обидва вирази істинні.\n" " вираз1 -o вираз2 Істинний, якщо хоч один з виразів істинний.\n" @@ -4369,14 +4721,16 @@ msgstr "" " Арифметичне порівняння. ОПЕРАТОР може бути: -eq, -ne,\n" " -lt, -le, -gt, чи -ge.\n" " \n" -" Арифметичні бінарні оператори істинні, якщо аргумент1 рівний, не рівний,\n" +" Арифметичні бінарні оператори істинні, якщо аргумент1 рівний, не " +"рівний,\n" " менший, менший чи рівний, більший, чи більший чи рівний аргументу2.\n" " \n" " Код завершення:\n" -" Команда завершується успішно, якщо ВИРАЗ істинний; невдало, якщо вказано\n" +" Команда завершується успішно, якщо ВИРАЗ істинний; невдало, якщо " +"вказано\n" " помилковий аргумент чи ВИРАЗ хибний." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4385,14 +4739,16 @@ msgid "" msgstr "" "Перевіряє умовний вираз.\n" " \n" -" Це синонім до вбудованої команди \"test\", але на відміну від неї останнім\n" +" Це синонім до вбудованої команди \"test\", але на відміну від неї " +"останнім\n" " аргументом має бути `]'." -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4406,39 +4762,54 @@ msgstr "" " Код завершення:\n" " Команда завжди успішна." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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" @@ -4451,8 +4822,10 @@ msgstr "" " початковий стан. Якщо АРГУМЕНТ є порожнім рядком, СИГНАЛ(И) буде\n" " ігноруватися оболонкою та запущеними з неї командами.\n" " \n" -" Якщо СИГНАЛ є EXIT (0), АРГУМЕНТ буде виконано при виході з оболонки. Якщо\n" -" СИГНАЛ є DEBUG, АРГУМЕНТ буде виконуватися перед кожною простою командою.\n" +" Якщо СИГНАЛ є EXIT (0), АРГУМЕНТ буде виконано при виході з оболонки. " +"Якщо\n" +" СИГНАЛ є DEBUG, АРГУМЕНТ буде виконуватися перед кожною простою " +"командою.\n" " \n" " Якщо аргументи взагалі не вказано, trap покаже список команд,\n" " призначених до сигналів.\n" @@ -4462,14 +4835,16 @@ msgstr "" " -p\tПоказати команди, призначені СИГНАЛАМ.\n" " \n" " Кожен з СИГНАЛІВ має бути або назвою сигналу з <signal.h> або номером\n" -" номером сигналу. Назви сигналів нечутливі до регістру літер, префікс SIG\n" +" номером сигналу. Назви сигналів нечутливі до регістру літер, префікс " +"SIG\n" " необов’язковий. Сигнал можна надіслати оболонці за допомогою\n" " \"kill -signal $$\".\n" " \n" " Код завершення:\n" -" Команда завершується успішно, якщо вказані правильні параметри та СИГНАЛИ." +" Команда завершується успішно, якщо вказані правильні параметри та " +"СИГНАЛИ." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4495,7 +4870,8 @@ 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" @@ -4516,14 +4892,17 @@ msgstr "" " НАЗВА\tназва команди для інтерпретації.\n" " \n" " Код завершення:\n" -" Команда завершується успішно, якщо буде знайдено усі НАЗВИ; невдало, якщо\n" +" Команда завершується успішно, якщо буде знайдено усі НАЗВИ; невдало, " +"якщо\n" " хоч одне з них не вдасться знайти." -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4560,16 +4939,18 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." msgstr "" "Змінює обмеження ресурсів оболонки.\n" " \n" -" Дозволяє керувати доступними оболонці та створеним нею процесам ресурсами,\n" +" Дозволяє керувати доступними оболонці та створеним нею процесам " +"ресурсами,\n" " якщо це підтримується системою.\n" " \n" " Параметри:\n" @@ -4615,7 +4996,7 @@ msgstr "" " Команда завершується невдало, якщо вказано неправильний параметр чи\n" " трапилася помилка під час виконання." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4642,29 +5023,34 @@ msgstr "" " використовується chmod(1).\n" " \n" " Параметри:\n" -" -p\tЯкщо МАСКУ не вказано, вивести її у формі, придатній для виконання.\n" +" -p\tЯкщо МАСКУ не вказано, вивести її у формі, придатній для " +"виконання.\n" " -S\tВиводити у символьному режимі; інакше виводиться вісімкове число.\n" " \n" " Код завершення:\n" " Команда завершується успішно, якщо вказано правильну МАСКУ та параметри." -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4678,13 +5064,16 @@ msgstr "" "Чекає завершення виконання завдання та повертає його код завершення.\n" " \n" " Очікує завершення роботи процесу, вказаного за ІДЕНТИФІКАТОРОМ, що може\n" -" бути ідентифікатором процесу чи завдання, та повертає його код завершення.\n" +" бути ідентифікатором процесу чи завдання, та повертає його код " +"завершення.\n" " Якщо ІДЕНТИФІКАТОР не вказано, очікує завершення усіх активних дочірніх\n" " процесів та повертає код 0. Якщо ІДЕНТИФІКАТОР є завданням, очікує на\n" " завершення усіх процесів у ланцюжку завдання.\n" " \n" -" Якщо вказано параметр -n, очікує на завершення якогось завдання зі списку\n" -" ідентифікаторів або, якщо не вказано жодного ідентифікатора, на завершення\n" +" Якщо вказано параметр -n, очікує на завершення якогось завдання зі " +"списку\n" +" ідентифікаторів або, якщо не вказано жодного ідентифікатора, на " +"завершення\n" " наступного завдання і повертає його стан завершення.\n" " \n" " Якщо вказано параметр -p, процес або ідентифікатор завдання, для якого\n" @@ -4697,34 +5086,51 @@ msgstr "" " його стану.\n" " \n" " Код завершення:\n" -" Команда повертає код завершення вказаного завдання; помилку, якщо вказано\n" -" неправильні параметри чи ІДЕНТИФІКАТОР або якщо вказано -n і оболонка не\n" +" Команда повертає код завершення вказаного завдання; помилку, якщо " +"вказано\n" +" неправильні параметри чи ІДЕНТИФІКАТОР або якщо вказано -n і оболонка " +"не\n" " має неочікуваних дочірніх процесів." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "Очікує на завершення роботи процесу та повертає його код завершення.\n" " \n" -" Очікує, поки завершиться вказаний процес, та доповідає про його успішність.\n" +" Очікує, поки завершиться вказаний процес, та доповідає про його " +"успішність.\n" " Якщо ІДЕНТИФІКАТОР-ПРОЦЕСУ не вказаний, очікує завершення усіх дочірніх\n" -" процесів й завершується з кодом 0. ІДЕНТИФІКАТОР має бути ідентифікатором\n" +" процесів й завершується з кодом 0. ІДЕНТИФІКАТОР має бути " +"ідентифікатором\n" " процесу.\n" " \n" " Код завершення:\n" -" Команда повертає код завершення процесу з останнім вказаним ідентифікатором.\n" -" Повертає код помилки, якщо вказано неправильний ІДЕНТИФІКАТОР чи параметр." +" Команда повертає код завершення процесу з останнім вказаним " +"ідентифікатором.\n" +" Повертає код помилки, якщо вказано неправильний ІДЕНТИФІКАТОР чи " +"параметр." + +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" -#: builtins.c:1549 +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4745,7 +5151,7 @@ msgstr "" " Код завершення:\n" " Команда повертає код завершення останньої виконаної команди." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4775,7 +5181,7 @@ msgstr "" " Код завершення:\n" " Команда повертає код завершення останньої виконаної команди." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4797,12 +5203,16 @@ msgstr "" "Пропонує вибрати слово та виконує відповідні команди.\n" " \n" " СЛОВА розгортаються, утворюючи список слів. Отриманий список слів\n" -" виводиться пронумерованим до стандартного виводу помилок. Якщо `in СЛОВА'\n" +" виводиться пронумерованим до стандартного виводу помилок. Якщо `in " +"СЛОВА'\n" " не вказано, береться `in \"$@\"'. Тоді виводиться запрошення PS3 та зі\n" " стандартного вводу зчитується рядок. Якщо цей рядок є числом, що вказує\n" -" номер одного зі слів, НАЗВА встановлюється у це слово. Якщо рядок порожній,\n" -" СЛОВА та запрошення виводяться знов. Якщо прочитано кінець файла, команда\n" -" завершується. Якщо рядок містить щось інше, НАЗВІ призначається порожній\n" +" номер одного зі слів, НАЗВА встановлюється у це слово. Якщо рядок " +"порожній,\n" +" СЛОВА та запрошення виводяться знов. Якщо прочитано кінець файла, " +"команда\n" +" завершується. Якщо рядок містить щось інше, НАЗВІ призначається " +"порожній\n" " рядок. Прочитаний рядок зберігається у змінній REPLY. Після кожного\n" " зчитування виконуються КОМАНДИ. Команда продовжує виконання доки не\n" " буде викликано команду break.\n" @@ -4810,7 +5220,7 @@ msgstr "" " Код завершення:\n" " Команда повертає код завершення останньої виконаної команди." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4838,7 +5248,7 @@ msgstr "" " Код завершення:\n" " Команда повертає код завершення ЛАНЦЮЖКА-КОМАНД." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4856,16 +5266,21 @@ msgstr "" " Код завершення:\n" " Команда повертає код завершення останньої виконаної команди." -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4875,7 +5290,8 @@ msgstr "" " \n" " КОМАНДИ з `if КОМАНДИ' виконуються, і якщо їх код завершення нульовий,\n" " виконуються КОМАНДИ з `then КОМАНДИ'. Інакше в свою чергу виконуються\n" -" команди з `elif КОМАНДИ', і якщо їх код завершення нульовий, виконуються\n" +" команди з `elif КОМАНДИ', і якщо їх код завершення нульовий, " +"виконуються\n" " КОМАНДИ з відповідного `then КОМАНДИ'. Інакше виконуються КОМАНДИ з\n" " `else КОМАНДИ'. Блоки elif та else не обов’язкові.\n" " \n" @@ -4883,11 +5299,12 @@ msgstr "" " Команда повертає код завершення останньої виконаної команди або нуль,\n" " якщо жодна з перевірених умов не була істинною." -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4901,11 +5318,12 @@ msgstr "" " Код завершення:\n" " Команда повертає код завершення останньої виконаної команди." -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4920,7 +5338,7 @@ msgstr "" " Команда повертає код завершення останньої виконаної команди." # WTF? How can it return exit code of _asynchronous_ process... -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4934,20 +5352,23 @@ msgid "" msgstr "" "Створює співпроцес з назвою НАЗВА.\n" " \n" -" Починає асинхронне виконання КОМАНДИ, під’єднавши її стандартний ввід та\n" -" вивід через канали до файлових дескрипторів, які присвоюються елементам 0\n" +" Починає асинхронне виконання КОМАНДИ, під’єднавши її стандартний ввід " +"та\n" +" вивід через канали до файлових дескрипторів, які присвоюються елементам " +"0\n" " та 1 змінної-масиву НАЗВА.\n" " Стандартна назва змінної — \"COPROC\".\n" " \n" " Код завершення:\n" " Команда coproc повертає стан виходу 0." -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4956,15 +5377,18 @@ msgid "" msgstr "" "Описує функцію оболонки.\n" " \n" -" Створює функцію оболонки з назвою НАЗВА. Функція запускається як звичайна\n" -" команда з назвою НАЗВА та послідовно виконує КОМАНДИ. Аргументи до команди\n" -" призначаються на час виконання змінним $1...$n, а назва функції — змінній\n" +" Створює функцію оболонки з назвою НАЗВА. Функція запускається як " +"звичайна\n" +" команда з назвою НАЗВА та послідовно виконує КОМАНДИ. Аргументи до " +"команди\n" +" призначаються на час виконання змінним $1...$n, а назва функції — " +"змінній\n" " $FUNCNAME.\n" " \n" " Код завершення:\n" " Команда завершується невдало, якщо НАЗВА є незмінною." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4976,13 +5400,14 @@ msgid "" msgstr "" "Групує команди в один блок.\n" " \n" -" Виконує згрупований набір команд. Це один з методів перенаправлення виводу\n" +" Виконує згрупований набір команд. Це один з методів перенаправлення " +"виводу\n" " групи команд.\n" " \n" " Код завершення:\n" " Конструкція повертає код завершення останньої виконаної команди." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4998,14 +5423,16 @@ msgstr "" "Продовжує виконання завдання на передньому плані.\n" " \n" " Продовжує на передньому плані виконання призупиненого чи фонового\n" -" завдання, як це робить команда `fg'. ЗАВДАННЯ може бути назвою чи номером\n" -" завдання. Якщо після ЗАВДАННЯ вказано `&', завдання продовжує виконання у\n" +" завдання, як це робить команда `fg'. ЗАВДАННЯ може бути назвою чи " +"номером\n" +" завдання. Якщо після ЗАВДАННЯ вказано `&', завдання продовжує виконання " +"у\n" " фоні, тобто команда має ефект команди `bg'.\n" " \n" " Код завершення:\n" " Команда повертає статус продовженого завдання." -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5023,13 +5450,16 @@ msgstr "" " Код завершення:\n" " Команда завершується успішно, якщо результат обчислення ненульовий." -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -5069,7 +5499,7 @@ msgstr "" " Код завершення:\n" " Команда завершується успішно, якщо ВИРАЗ істинний." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5127,7 +5557,8 @@ msgstr "" " BASH_VERSION\tІнформація щодо версії Bash.\n" " CDPATH\tРозділений двокрапкою список каталогів, у яких оболонка буде\n" " \t\tшукати каталоги, вказані команді `cd'.\n" -" GLOBIGNORE\tРозділений двокрапкою список шаблонів назв файлів, які будуть\n" +" GLOBIGNORE\tРозділений двокрапкою список шаблонів назв файлів, які " +"будуть\n" " \t\tігноруватися під час розкриття шляхів.\n" " HISTFILE\tНазва файла, де зберігається історія команд.\n" " HISTFILESIZE\tНайбільша дозволена кількість записів у файлі журналу.\n" @@ -5171,7 +5602,7 @@ msgstr "" " HISTIGNORE\tРозділений двокрапкою список шаблонів, що використовуються\n" " \t\tпри визначенні, чи зберігати команду у списку журналу.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5229,7 +5660,7 @@ msgstr "" " Команда завершується невдало, якщо вказаний неправильний аргумент чи\n" " якщо не вдалося змінити поточну каталог." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5262,7 +5693,8 @@ msgstr "" " відповідно до нової вершини стеку.\n" " \n" " Параметри:\n" -" -n\tНе виконувати звичайного переходу до нового каталогу при вилученні\n" +" -n\tНе виконувати звичайного переходу до нового каталогу при " +"вилученні\n" " \t\tкаталогів зі стеку, проводити операції лише над стеком.\n" " \n" " Аргументи:\n" @@ -5280,7 +5712,7 @@ msgstr "" " Команда завершується невдало, якщо вказано помилковий аргумент чи якщо\n" " не вдалося змінити поточний каталог." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5311,7 +5743,8 @@ msgstr "" "Показує список збережених каталогів.\n" " \n" " Показує список збережених каталогів. Каталоги додаються до цього списку\n" -" командою `pushd'; ви можете повернутися назад по цьому списку за допомогою\n" +" командою `pushd'; ви можете повернутися назад по цьому списку за " +"допомогою\n" " команди `popd'.\n" " \n" " Параметри:\n" @@ -5329,10 +5762,11 @@ msgstr "" " -N\tПоказує N-ний з кінця каталог у списку, що виводиться\n" " \t\tкомандою dirs без аргументів, відлік починається з нуля. \n" " Код завершення:\n" -" Команда завершується невдало, якщо вказано неправильний параметр чи якщо\n" +" Команда завершується невдало, якщо вказано неправильний параметр чи " +"якщо\n" " трапиться помилка." -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5353,9 +5787,11 @@ msgid "" msgstr "" "Встановлює та скидає параметри оболонки.\n" " \n" -" Змінює значення ПАРАМЕТРІВ. Якщо аргументи ПАРАМЕТРИ не вказані, виводить\n" +" Змінює значення ПАРАМЕТРІВ. Якщо аргументи ПАРАМЕТРИ не вказані, " +"виводить\n" " список усіх вказаних параметрів оболонки. Якщо ж параметрів не вказано,\n" -" виводить список усіх параметрів, вказуючи, чи параметр ввімкнений, чи ні.\n" +" виводить список усіх параметрів, вказуючи, чи параметр ввімкнений, чи " +"ні.\n" " \n" " Параметри:\n" " -o\tПриймати лише ПАРАМЕТРИ, з якими працює `set -o'.\n" @@ -5368,7 +5804,8 @@ msgstr "" " Команда завершується успішно, якщо ПАРАМЕТР ввімкнено; невдало, якщо\n" " вказано неправильні параметри чи ПАРАМЕТР вимкнено." -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5376,29 +5813,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "Форматує та виводить аргументи відповідно до шаблону ФОРМАТ.\n" @@ -5420,27 +5864,35 @@ msgstr "" " \t\tзворотної похилої риски) у відповідному аргументі.\n" " %q\tВзяти аргумент в лапки так, щоб його можна було використати як\n" " \t\tввід оболонки\n" -" %Q\tподібна до %q, але буде застосовано довільну точність до аргументу\n" +" %Q\tподібна до %q, але буде застосовано довільну точність до " +"аргументу\n" " \t\tбез лапок до застосування лапок\n" " %(формат)T – вивести рядок дати і часу з використанням ФОРМАТУ\n" " для форматування даних strftime(3)\n" " \n" -" Визначене форматування використовується так, щоб було оброблено усі аргументи.\n" -" Якщо аргументів виявиться менше за кількість визначених форматів, для зайвих\n" -" специфікаторів форматів буде використано нульові значення або порожні рядки,\n" +" Визначене форматування використовується так, щоб було оброблено усі " +"аргументи.\n" +" Якщо аргументів виявиться менше за кількість визначених форматів, для " +"зайвих\n" +" специфікаторів форматів буде використано нульові значення або порожні " +"рядки,\n" " залежно від типу форматування.\n" " \n" " Код завершення:\n" -" Команда завершується невдало лише якщо вказано неправильний параметр або\n" +" Команда завершується невдало лише якщо вказано неправильний параметр " +"або\n" " якщо трапиться помилка запису чи присвоєння." -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5454,8 +5906,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5486,13 +5940,19 @@ msgstr "" " Команда завершується успішно, якщо вказано правильні параметри та не\n" " трапиться помилки під час виконання." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5507,13 +5967,16 @@ msgstr "" " Команда завершується успішно, якщо вказано правильні параметри і не\n" " трапиться помилки під час виконання." -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5562,21 +6025,26 @@ msgstr "" " Команда завершується успішно, якщо вказано правильні параметри та\n" " вказівки завершень для НАЗВ існують." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5589,21 +6057,26 @@ 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" " \n" -" Читає рядки зі стандартного вводу чи з ФАЙЛОВОГО-ДЕСКРИПТОРА, якщо вказано\n" -" параметр -u, і вставляє їх до вказаної змінної-масиву. Якщо назву змінної\n" +" Читає рядки зі стандартного вводу чи з ФАЙЛОВОГО-ДЕСКРИПТОРА, якщо " +"вказано\n" +" параметр -u, і вставляє їх до вказаної змінної-масиву. Якщо назву " +"змінної\n" " не вказано, використовується змінна MAPFILE.\n" " \n" " Параметри:\n" -" -d роздільник\tВикористати для поділу на рядки вказаний роздільник, а не\n" +" -d роздільник\tВикористати для поділу на рядки вказаний роздільник, а " +"не\n" " символ розриву рядка\n" " -n кількість\tПрочитати вказану кількість рядків. Нуль означає\n" " \t\t\t«без обмежень».\n" @@ -5623,17 +6096,19 @@ msgstr "" " МАСИВ\t\tНазва змінної-масиву для збереження даних з файла.\n" " \n" " Якщо вказано лише -C, без -c, обробник викликатиметься із кроком 5000.\n" -" Обробник викликається із параметром, що вказує наступний елемент масиву,\n" +" Обробник викликається із параметром, що вказує наступний елемент " +"масиву,\n" " якому буде призначено значення.\n" " \n" " Якщо початковий елемент не вказано, mapfile спорожнить МАСИВ, перш ніж\n" " починати присвоєння.\n" " \n" " Код завершення:\n" -" Команда завершується невдало лише якщо вказано неправильний параметр або\n" +" Команда завершується невдало лише якщо вказано неправильний параметр " +"або\n" " якщо МАСИВ є незмінним." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5643,6 +6118,31 @@ msgstr "" " \n" " Синонім до `mapfile'." +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Повертає контекст виконання поточної підпрограми.\n" +#~ " \n" +#~ " Якщо ВИРАЗ не вказано, виводить \"$line $filename\". Інакше виводить\n" +#~ " \"$line $subroutine $filename\"; цю додаткову інформацію можна\n" +#~ " використовувати для трасування стеку.\n" +#~ " \n" +#~ " Значення ВИРАЗУ визначає на скільки рівнів викликів піднятися від\n" +#~ " поточного; поточний рівень є нульовим." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "попередження: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: неправильний ключ асоціативного масиву" @@ -5682,14 +6182,22 @@ msgstr "" #~ msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n" #~ msgstr "© Free Software Foundation, Inc., 2009\n" -#~ 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 версія 2 чи новіша <http://gnu.org/licenses/gpl." +#~ "html>\n" #~ msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)" -#~ msgstr "xrealloc: не вдається змінити розмір виділеного блоку до %lu байтів (виділено %lu байтів)" +#~ msgstr "" +#~ "xrealloc: не вдається змінити розмір виділеного блоку до %lu байтів " +#~ "(виділено %lu байтів)" #~ msgid "xrealloc: cannot allocate %lu bytes" #~ msgstr "xrealloc: не вдається виділити %lu байтів" #~ msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)" -#~ msgstr "xrealloc: %s:%d: не вдається змінити розмір виділеного блоку до %lu байтів (виділено %lu байтів)" +#~ msgstr "" +#~ "xrealloc: %s:%d: не вдається змінити розмір виділеного блоку до %lu " +#~ "байтів (виділено %lu байтів)" diff --git a/po/vi.gmo b/po/vi.gmo index f97a37d60945d5120cf56677b2a4108e745f2a5f..f7c97330ed7bb94368f55edbe026c0d4ebcfdc40 100644 GIT binary patch delta 11320 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 M8osYT;qa#ZKP|rEXaE2J delta 22672 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 diff --git a/po/vi.po b/po/vi.po index aa9ad4b85..2891d3d0c 100644 --- a/po/vi.po +++ b/po/vi.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 4.4-beta1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2015-10-18 07:47+0700\n" "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" @@ -22,124 +22,124 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Gtranslator 2.91.7\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "sai chỉ số mảng" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: không thể chuyển đổi mảng kiểu chỉ số sang mảng kết hợp" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: không thể gán cho chỉ số không thuộc kiểu số" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: phải sử dụng chỉ số phụ khi gán mảng kết hợp" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: không thể tạo: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" "bash_execute_unix_command: không tìm thấy ánh xạ phím (keymap) cho câu lệnh" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: ký tự khác khoảng trắng đầu tiên không phải là “\"”" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "thiếu dấu đóng “%c” trong %s" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: thiếu dấu hai chấm phân cách" -#: bashline.c:4733 +#: bashline.c:4832 #, fuzzy, c-format msgid "`%s': cannot unbind in command keymap" msgstr "“%s”: không thể tháo" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "khai triển ngoặc ôm: không thể phân bổ bộ nhớ cho %s" -#: braces.c:406 +#: braces.c:383 #, fuzzy, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "khai triển ngoặc ôm: gặp lỗi khi phân bổ bộ nhớ cho “%d” phần tử" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "khai triển ngoặc ôm: gặp lỗi khi phân bổ bộ nhớ cho “%s”" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "“%s”: tên bí danh không hợp lệ" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "chưa bật sửa đổi dòng" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "“%s”: tên sơ đồ phím không hợp lệ" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: không thể đọc: %s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "“%s”: không hiểu tên hàm" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s không được ràng buộc với bất kỳ phím nào.\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s có thể được gọi thông qua " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "“%s”: không thể tháo" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "đếm vòng" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "chỉ có nghĩa trong vòng lặp “for”, “while” hay “until”" -#: builtins/caller.def:136 +#: builtins/caller.def:135 #, fuzzy msgid "" "Returns the context of the current subroutine call.\n" @@ -149,7 +149,11 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "Trả về ngữ cảnh của lệnh gọi hàm hiện thời.\n" "\n" @@ -163,350 +167,360 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại 0 trừ khi hệ vỏ đang chạy hàm hệ vỏ, BTHỨC cũng hợp lệ." -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "Chưa đặt biến môi trường HOME" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "quá nhiều đối số" -#: builtins/cd.def:342 +#: builtins/cd.def:336 #, fuzzy msgid "null directory" msgstr "không có thư mục khác" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "Chưa đặt biến môi trường OLDPWD" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "dòng %d: " -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "cảnh báo: " -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: cách dùng: " -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: tùy chọn cần một đối số" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: cần đối số thuộc kiểu số" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: không tìm thấy" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: tùy chọn không hợp lệ" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: tên tùy chọn không hợp lệ" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "“%s”: không phải là định danh hợp lệ" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "số bát phân không hợp lệ" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "số thập lục không hợp lệ" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "số không hợp lệ" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: sai đặc tả tín hiệu" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "“%s”: không phải một pid hoặc đặc tả công việc hợp lệ" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: biến chỉ đọc" -#: builtins/common.c:273 +#: builtins/common.c:248 #, fuzzy, c-format msgid "%s: cannot assign" msgstr "%s: không thể hủy đặt" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s nằm ngoài phạm vi" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "đối số" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s nằm ngoài phạm vi" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: không có công việc như vậy" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: không có điều khiển công việc" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "không có điều khiển công việc" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: bị hạn chế" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "bị hạn chế" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: không phải là lệnh tích hợp trong hệ vỏ" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "lỗi ghi: %s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "lỗi đặt các thuộc tính thiết bị cuối: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "lỗi lấy các thuộc tính thiết bị cuối: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: lỗi lấy thư mục hiện thời: %s: %s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: đặc tả công việc chưa rõ ràng" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "trợ giúp không sẵn có ở phiên bản này" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: không phải là mảng chỉ số" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: không thể hủy đặt: %s chỉ đọc" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: không thể hủy đặt" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: tên hành động không hợp lệ" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: không có đặc tả tự hoàn thiện" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "cảnh báo: tùy chọn “-F” có thể không hoạt động như mong đợi" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "cảnh báo: tùy chọn “-C” có thể không hoạt động như bạn mong đợi" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "hiện thời không thực thi chức năng tự hoàn thiện" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "chỉ có thể dùng trong một hàm" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "không thể dùng “-f” để tạo hàm" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: hàm chỉ đọc" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: biến tham chiếu không thể là một mảng" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: biến nameref tự tham chiếu là không được phép" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: tên tham chiếu quẩn tròn" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, fuzzy, c-format msgid "`%s': invalid variable name for name reference" msgstr "%s: tên biến không hợp lệ cho một tham chiếu tên" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: không thể hủy biến mảng bằng cách này" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: không thể chuyển đổi mảng kết hợp sang mảng chỉ số" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: gán mảng phức hợp được trích dẫn đã lạc hậu" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "không có chức năng nạp động" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "không thể mở đối tượng dùng chung %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "không tìm thấy %s trong đối tượng dùng chung %s: %s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, fuzzy, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s không được tải động" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "tải hàm cho %s trả về lỗi nghiêm trọng (%d): nên không được tải" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s không được tải động" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: không thể xóa: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: là thư mục" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: không phải là tập tin thường" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: tập tin quá lớn" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: không thể thực hiện tập tin nhị phân" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: không thể thực thi: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "đăng xuất\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "không phải hệ vỏ đăng nhập: hãy dùng lệnh “exit”" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "Có công việc bị dừng.\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "Có công việc đang chạy.\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "không tìm thấy lệnh" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "đặc tả lịch sử" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: không thể mở tập tin tạm: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "hiện tại" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "công việc %d đã khởi chạy mà không có điều khiển công việc" @@ -521,11 +535,11 @@ msgstr "%s: tùy chọn không được phép -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: tùy chọn cần đối số -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "tắt băm" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: bảng băm rỗng\n" @@ -554,12 +568,12 @@ msgstr "" "không có trợ giúp cho “%s”. Hãy chạy lệnh “help help” hoặc “man -k %s” hay " "“info %s”." -#: builtins/help.def:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: không thể mở: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -579,21 +593,31 @@ msgstr "" "Dấu sao (*) bên cạnh tên nghĩa là lệnh bị tắt.\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "chỉ có thể dùng một của những tùy chọn -anrw" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "vị trí lịch sử" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "tên biến mảng vẫn trống" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: tham số null hoặc chưa được đặt" + +#: builtins/history.def:349 #, fuzzy, c-format msgid "%s: invalid timestamp" msgstr "%s: đối số không hợp lệ" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: gặp lỗi khi khai triển lịch sử" @@ -607,113 +631,113 @@ msgstr "%s: inlib bị lỗi" msgid "no other options allowed with `-x'" msgstr "không cho phép dùng tùy chọn thêm với “-x”" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: đối số phải là ID tiến trình hoặc công việc" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "Lỗi không rõ" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "cần biểu thức" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: không phải là mảng chỉ số" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: đặc tả bộ mô tả tập tin không hợp lệ" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: bộ mô tả tập tin không hợp lệ: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: sai số lượng dòng" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: gốc mảng không hợp lệ" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: lượng gọi ngược không hợp lệ" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "tên biến mảng vẫn trống" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "cần hỗ trợ biến mảng" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "“%s”: thiếu ký tự định dạng" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "“%c”: đặc tả định dạng thời gian không đúng" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "“%c”: ký tự định dạng không hợp lệ" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "cảnh báo: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "vấn đề phân tích cú pháp định dạng: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "thiếu chữ số thập lục phân cho \\x" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "thiếu chữ số unicode cho \\%c" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "không có thư mục khác" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: đối số không hợp lệ" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<không có thư mục hiện thời>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "ngăn xếp thư mục trống" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "chỉ số ngăn xếp thư mục" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -753,7 +777,7 @@ msgstr "" " -N\thiển thị mục thứ N đếm từ bên phải khi gọi không tùy chọn,\n" " bắt đầu từ số không." -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -797,7 +821,7 @@ msgstr "" "\n" " Lệnh “dirs” hiển thị ngăn xếp thư mục." -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -835,320 +859,331 @@ msgstr "" "\n" " Lệnh “dirs” hiển thị ngăn xếp thư mục." -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: sai đặc tả thời gian chờ tối đa" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "lỗi đọc: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "chỉ có thể “return” từ một hàm hoặc văn lệnh được “source”" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "không thể hủy đặt đồng thời một hàm VÀ một biến" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: không phải biến mảng" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: không phải hàm" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: không thể xuất" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "số lượng dịch" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "không thể đồng thời đặt và hủy đặt các tùy chọn hệ vỏ" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: tên tùy chọn hệ vỏ không hợp lệ" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "cần đối số tên tập tin" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: không tìm thấy tập tin" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "không thể ngưng" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "không thể ngưng hệ vỏ đăng nhập" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s là bí danh của “%s”\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s là từ khóa của hệ vỏ\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s là một hàm\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s là lệnh tích hợp đặc biệt của hệ vỏ\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s là một hàm\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s là lệnh tích hợp hệ vỏ\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s là %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s được băm (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: đối số giới hạn không hợp lệ" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "“%c”: câu lệnh sai" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: không thể lấy giới hạn: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "giới hạn" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: không thể sửa đổi giới hạn: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "số bát phân" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "“%c”: toán tử chế độ ký hiệu không hợp lệ" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "“%c”: ký tự chế độ ký hiệu không hợp lệ" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " dòng " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "lệnh cuối: %s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "Hủy bỏ…" #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "THBÁO:" -#: error.c:310 +#: error.c:261 #, fuzzy, c-format msgid "DEBUG warning: " msgstr "cảnh báo: " -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "lỗi lệnh không rõ" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "kiểu lệnh sai" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "bộ kết nối sai" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "nhảy sai" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: biến chưa liên kết" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\aquá thời hạn đợi dữ liệu nhập: tự động đăng xuất\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "không thể chuyển hướng đầu vào chuẩn từ /dev/null: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "ĐỊNH DẠNG THỜI GIAN: “%c”: ký tự định dạng không hợp lệ" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "lỗi ống dẫn" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: vượt quá mức độ eval lồng nhau tối đa (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: vượt quá mức độ nguồn lồng nhau tối đa (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: vượt quá mức độ các hàm lồng nhau tối đa (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: bị hạn chế: không thể dùng “/” trong tên lệnh" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: không tìm thấy lệnh" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: bộ thông dịch sai" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, fuzzy, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: không thể thực hiện tập tin nhị phân" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: bộ thông dịch sai" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: không thể thực hiện tập tin nhị phân: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "“%s”: là lệnh tích hợp đặc biệt" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "không thể nhân đôi fd %d thành fd %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "vượt quá ngưỡng đệ quy của biểu thức" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "tràn ngược ngăn xếp đệ quy" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "lỗi cú pháp trong biểu thức" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "thử gán cho thứ không phải biến" -#: expr.c:531 +#: expr.c:525 #, fuzzy -msgid "syntax error in variable assignment" +msgid "arithmetic syntax error in variable assignment" msgstr "lỗi cú pháp trong biểu thức" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "chia cho không" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "lỗi: “token expassign” sai" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "cần “:” cho biểu thức điều kiện" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "số mũ nhỏ hơn 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "cần định danh sau tăng/giảm dần trước" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "thiếu “)”" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "lỗi cú pháp: cần toán hạng" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "lỗi cú pháp: toán tử số học không hợp lệ" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (thẻ bài lỗi là \"%s\")" @@ -1166,7 +1201,7 @@ msgstr "%s: sai số lượng dòng" msgid "value too great for base" msgstr "cơ số có giá trị quá lớn" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: lỗi biểu thức\n" @@ -1175,47 +1210,52 @@ msgstr "%s: lỗi biểu thức\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: không thể truy cập thư mục cấp trên" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "“%s”: là lệnh tích hợp đặc biệt" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "không thể đặt lại chế độ “nodelay” cho fd %d" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "không thể cấp phát bộ mô tả tập tin mới cho dữ liệu nhập bash từ fd %d" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: đã có bộ đệm cho fd mới %d" # Nghĩa chữ ? -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: pgrp pipe" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "pid được tánh nhánh %d có vẻ đang chạy trong công việc %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "đang xóa công việc bị dừng chạy %d với nhóm tiến trình %ld" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) được đánh dấu vẫn hoạt động" @@ -1225,139 +1265,139 @@ msgstr "add_process: pid %5ld (%s) được đánh dấu vẫn hoạt động" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: không có pid như vậy" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "Tín hiệu %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "Xong" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "Bị dừng" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "Bị dừng(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "Đang chạy" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "Xong(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "Thoát %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "Không rõ trạng thái" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(xuất ra core)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (wd: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "setpgid tiến trình con (%ld thành %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld không phải là tiến trình con của hệ vỏ này" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: Không có mục ghi về tiến trình %ld" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: công việc %d bị dừng chạy" -#: jobs.c:3551 +#: jobs.c:3566 #, fuzzy, c-format msgid "%s: no current jobs" msgstr "%s: không có công việc như vậy" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: công việc bị chấm dứt" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: công việc %d đã đang chạy nền" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: đang bật WNOHANG để tránh bị chặn vô hạn" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: dòng %d: " -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (xuất ra core)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(wd ngay: %s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp bị lỗi" -#: jobs.c:4434 +#: jobs.c:4486 #, fuzzy msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: kỷ luật dòng" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: kỷ luật dòng" # Nghĩa chữ : dừng dịch -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "không thể đặt nhóm tiến trình cuối cùng (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "không có điều khiển công việc trong hệ vỏ này" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: khẳng định gặp lỗi: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1366,383 +1406,393 @@ msgstr "" "\r\n" "malloc: %s:%d: khẳng định bị sai\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "không rõ" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "" "malloc (cấp phát bộ nhớ): khối bộ nhớ dành riêng trên danh sách các khối còn " "trống bị ghi vào" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: đã được gọi với đối số khối đã được giải phóng" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: đã được gọi với đối số khối chưa cấp phát" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: phát hiện sự tràn ngược; mh_nbytes ở ngoại phạm vi" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 #, fuzzy msgid "free: underflow detected; magic8 corrupted" msgstr "free: phát hiện sự tràn ngược; mh_nbytes ở ngoại phạm vi" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: kích cỡ đoạn đầu và cuối không trùng" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: đã được gọi với đối số khối chưa cấp phát" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: phát hiện sự tràn ngược; mh_nbytes nằm ngoài phạm vi cho phép" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 #, fuzzy msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: phát hiện sự tràn ngược; mh_nbytes nằm ngoài phạm vi cho phép" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: kích cỡ đoạn đầu và cuối không trùng" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: bảng cấp phát đầy với FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p đã có trong bảng như được cấp phát?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p đã có trong bảng như còn trống?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "cơ số không hợp lệ" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: không rõ máy" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: dịch vụ không hợp lệ" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: đặc tả đường dẫn mạng sai" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "không hỗ trợ thao tác mạng" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: không thể chuyển đổi miền địa phương (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: không thể chuyển đổi miền địa phương (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: không thể chuyển đổi miền địa phương (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: không thể chuyển đổi miền địa phương (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "Bạn có thư trong $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "Bạn có thư mới trong $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "Đã đọc thư trong %s\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "lỗi cú pháp: cần biểu thức số học" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "lỗi cú pháp: gặp dấu chấm phẩy “;” bất thường" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "lỗi cú pháp: “((%s))”" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: kiểu chỉ lệnh sai %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "tài liệu này ở dòng %d định giới bằng kết thúc tập tin (muốn “%s”)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: chỉ dẫn chuyển hướng “%d” nằm ngoài phạm vi" -#: parse.y:2428 +#: parse.y:2518 #, c-format msgid "" "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " "truncated" msgstr "" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "lỗi ghi: %s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "vượt quá số lượng tài-liệu-đây tối đa" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "gặp kết thúc tập tin bất thường trong khi tìm “%c” tương ứng" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "gặp kết thúc tập tin bất thường trong khi tìm “]]”" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "gặp lỗi cú pháp trong biểu thức điều kiện: thẻ bài bất thường “%s”" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "gặp lỗi cú pháp trong biểu thức điều kiện" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "gặp thẻ bài bất thường “%s”, cần “)”" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "cần “)”" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "đối số bất thường “%s” cho toán tử một ngôi điều kiện" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "đối số bất thường cho toán tử một ngôi điều kiện" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "thẻ bài bất thường “%s”, cần toán tử hai ngôi điều kiện" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "cần toán tử hai ngôi điều kiện" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "đối số bất thường “%s” cho toán tử hai ngôi điều kiện" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "đối số bất thường cho toán tử hai ngôi điều kiện" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "gặp thẻ bài bất thường “%c” trong câu lệnh điều kiện" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "gặp thẻ bài bất thường “%s” trong câu lệnh điều kiện" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "gặp thẻ bài bất thường “%d” trong câu lệnh điều kiện" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "có lỗi cú pháp ở gần thẻ bài bất thường “%s”" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "lỗi cú pháp ở gần “%s”" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "lỗi cú pháp: kết thúc tập tin bất thường" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "lỗi cú pháp: kết thúc tập tin bất thường" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "lỗi cú pháp" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Dùng \"%s\" để rời hệ vỏ.\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "gặp kết thúc tập tin bất thường trong khi tìm “)” tương ứng" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "tự hoàn thiện: không tìm thấy hàm “%s”" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: bộ kết nối sai “%d”" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: sai bộ mô tả tập tin" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: con trỏ tập tin NULL" # Nghĩa chữ ? -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: “%c”: ký tự định dạng không hợp lệ" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "bộ mô tả tập tin ở ngoại phạm vi" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: chuyển hướng chưa rõ ràng" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: không thể ghi đè lên tập tin đã có" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: bị hạn chế: không thể chuyển hướng kết xuất" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "không thể tạo tập tin tạm thời cho tài liệu này: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: không thể gán fd vào biến" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "/dev/(tcp|udp)/host/port không được hỗ trợ nếu không có mạng" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "lỗi chuyển hướng: không thể nhân đôi fd" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "không tìm thấy /tmp, hãy tạo mới!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "“/tmp” phải là tên thư mục hợp lệ" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: tùy chọn không hợp lệ" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "không thể đặt uid thành %d: uid chịu tác động %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "không thể đặt gid thành %d: gid chịu tác động %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: Là một thư mục" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "Không có tên!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash, phiên bản %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1751,52 +1801,52 @@ msgstr "" "Cách dùng:\t%s [tùy chọn GNU dài] [tùy chọn] …\n" "\t\t%s [tùy chọn GNU dài] [tùy chọn] tập-tin-văn-lệnh …\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "Tùy chọn dài:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Tùy chọn:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD hoặc -c lệnh hay -O tùy-chọn-ngắn\t\t(chỉ gọi)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s hoặc -o tùy-chọn\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "Gõ “%s -c \"help set\"” để xem thông tin về các tùy chọn hệ vỏ.\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "Gõ “%s -c help” để xem thông tin về các lệnh hệ vỏ tích hợp.\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "" "Dùng lệnh “bashbug” để thông báo lỗi.\n" "Báo cáo các lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "Trang chủ bash: <http://www.gnu.org/software/bash/>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Trợ giúp chung về cách sử dụng phần mềm GNU : <http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: thao tác không hợp lệ" @@ -1966,165 +2016,169 @@ msgstr "yêu cầu thông tin" msgid "Unknown Signal #%d" msgstr "Tín hiệu lạ #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "sai chỉ số phụ: không có đóng “%s” trong %s" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: không thể gán danh sách cho bộ phận của mảng" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "không thể tạo ống dẫn để thay thế tiến trình" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "không thể tạo tiến trình con để thay thế tiến trình" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "không thể mở ống dẫn đặt tên %s để đọc" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "không thể mở ống dẫn có tên %s để ghi" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "không thể nhân đôi ống dẫn đặt tên %s thành fd %d" -#: subst.c:6370 +#: subst.c:6761 #, fuzzy msgid "command substitution: ignored null byte in input" msgstr "sai thay thế: không có \"“\" đóng trong %s" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: không thể nhân đôi ống dẫn thành fd 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "không thể tạo ống dẫn để thay thế lệnh" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "không thể tạo tiến trình con để thay thế lệnh" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: không thể nhân đôi ống dẫn thành fd 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: tên biến không hợp lệ cho một tham chiếu tên" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: triển khai gián tiếp không hợp lệ" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "“%s”: tên biến không hợp lệ" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: thay thế sai" + +#: subst.c:8231 #, fuzzy, c-format msgid "%s: parameter not set" msgstr "%s: tham số null hoặc chưa được đặt" -#: subst.c:7480 -#, c-format -msgid "%s: parameter null or not set" -msgstr "%s: tham số null hoặc chưa được đặt" - -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: biểu thức chuỗi con < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: thay thế sai" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: không thể gán bằng cách này" -#: subst.c:10111 +#: subst.c:10862 msgid "" "future versions of the shell will force evaluation as an arithmetic " "substitution" msgstr "" "phiên bản hệ vỏ mới sẽ ép buộc ước lượng dưới dạng một hàm thay thế số học" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "sai thay thế: không có \"“\" đóng trong %s" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "không khớp: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "cần đối số" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: cần biểu thức số nguyên" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "cần “)”" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "cần “)” nhưng lại nhận được %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: cần toán tử hai ngôi" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: cần toán tử một ngôi" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "thiếu “]”" -#: test.c:914 +#: test.c:944 #, fuzzy, c-format msgid "syntax error: `%s' unexpected" msgstr "lỗi cú pháp: gặp dấu chấm phẩy “;” bất thường" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "số thứ tự tín hiệu không hợp lệ" -#: trap.c:323 +#: trap.c:358 #, fuzzy, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "eval: vượt quá mức độ eval lồng nhau tối đa (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: giá trị sai trong danh sách trap_list[%d]: %p" -#: trap.c:416 +#: trap.c:454 #, c-format msgid "" "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" @@ -2132,97 +2186,105 @@ msgstr "" "run_pending_traps: bộ xử lý tín hiệu là SIG_DFL, đang gửi lại %d (%s) cho " "chính mình" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: tín hiệu sai %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "gặp lỗi khi nhập vào định nghĩa hàm cho “%s”" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "cấp hệ vỏ (%d) quá cao nên đặt lại thành 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "vượt quá số lượng tài-liệu-đây tối đa" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: không có ngữ cảnh hàm ở phạm vi hiện thời" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: không thể gán giá trị cho biến" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "" -#: variables.c:3459 +#: variables.c:3436 #, fuzzy, c-format msgid "%s: assigning integer to name reference" msgstr "%s: tên biến không hợp lệ cho một tham chiếu tên" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: không có ngữ cảnh hàm ở phạm vi hiện thời" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s có exportstr null" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "sai ký tự %d trong exportstr cho %s" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "không có “=” trong exportstr cho %s" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "" "pop_var_context: đầu của shell_variables (các biến hệ vỏ) không phải là ngữ " "cảnh hàm" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "" "pop_var_context: không có ngữ cảnh global_variables (các biến toàn cục)" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" "pop_scope: đầu của shell_variables (các biến hệ vỏ) không phải là phạm vi " "môi trường tạm thời" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: không thể mở như là TẬP-TIN" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: sai đặt giá trị cho bộ mô tả tập tin vết" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: giá trị so sánh nằm ngoài phạm vi" -#: version.c:46 version2.c:46 +#: version.c:46 #, fuzzy -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Tác quyền (C) năm 2014 của Tổ chức Quỹ Phần mềm Tự do, Inc." -#: version.c:47 version2.c:47 +#: version.c:47 msgid "" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>\n" @@ -2230,35 +2292,35 @@ msgstr "" "Giấy phép GPLv3+: GNU GPL phiên bản 3 hoặc mới hơn <http://gnu.org/licenses/" "gpl.html>\n" -#: version.c:86 version2.c:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash, phiên bản %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "Đây là phần mềm tự do; bạn có quyền sửa đổi và phát hành lại nó." -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "Ở đây KHÔNG BẢO HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép." -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: không thể cấp phát %lu byte (%lu byte được cấp phát)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: không thể cấp phát %lu byte" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: không thể cấp phát %lu byte (%lu byte được cấp phát)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: không thể cấp phát %lu byte" @@ -2296,7 +2358,8 @@ msgid "caller [expr]" msgstr "caller [BTHỨC]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]]] [-@]] [THƯ-MỤC]" #: builtins.c:68 @@ -2408,8 +2471,9 @@ msgid "let arg [arg ...]" msgstr "let ĐỐI-SỐ [ĐỐI-SỐ …]" #: builtins.c:138 +#, fuzzy msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " +"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " "prompt] [-t timeout] [-u fd] [name ...]" msgstr "" "read [-ers] [-a MẢNG] [-d GIỚI-HẠN] [-i VĂN-BẢN] [-n SỐ-KÝ-TỰ] [-N SỐ-KÝ-TỰ] " @@ -2462,7 +2526,8 @@ msgid "[ arg... ]" msgstr "[ Đ.SỐ … ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[Đ.SỐ] ĐTTH …]" #: builtins.c:168 @@ -2488,26 +2553,30 @@ msgid "wait [pid ...]" msgstr "wait [pid …]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for TÊN [in TỪ… ;] do CÁC;CÂU;LỆNH; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( BTHỨC1; BTHỨC2; BTHỨC3 )); do CÁC;CÂU;LỆNH; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select TÊN [in CÁC TỪ … ;] do CÁC;CÂU;LỆNH; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] ỐNG-DẪN" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case TỪ in [MẪU [| MẪU]…) CÁC;CÂU;LỆNH;;]… esac" -#: builtins.c:194 +#: builtins.c:196 msgid "" "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " "COMMANDS; ] fi" @@ -2515,65 +2584,65 @@ msgstr "" "if LỆNH; then CÁC;CÂU;LỆNH; [ elif CÁC;CÂU;LỆNH; then CÁC;CÂU;LỆNH; ]… " "[ else CÁC;CÂU;LỆNH; ] fi" -#: builtins.c:196 +#: builtins.c:198 #, fuzzy msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while CÁC;CÂU;LỆNH; do CÁC;CÂU;LỆNH; done" -#: builtins.c:198 +#: builtins.c:200 #, fuzzy msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until CÁC;CÂU;LỆNH; do CÁC;CÂU;LỆNH; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [TÊN] LỆNH [CHUYỂN-HƯỚNG]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function TÊN { CÁC;CÂU;LỆNH; } or TÊN () { CÁC;CÂU;LỆNH; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ CÁC;CÂU;LỆNH ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "ĐTCV [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( BTHỨC ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ BTHỨC ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "biến — tên và nghĩa của một số biến hệ vỏ" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | tmục]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [tên-tùy-chọn …]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v BIẾN] ĐỊNH-DẠNG [CÁC-ĐỐI-SỐ]" -#: builtins.c:231 +#: builtins.c:233 #, fuzzy msgid "" "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" @@ -2584,21 +2653,22 @@ msgstr "" "GLOB] [-W DANH-SÁCH-TỪ] [-F HÀM] [-C LỆNH] [-X MẪU-LỌC] [-P TIỀN-TỐ] [-S " "HẬU-TỐ] [TÊN …]" -#: builtins.c:235 +#: builtins.c:237 #, fuzzy msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-" -"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +"compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [word]" msgstr "" "compgen [-abcdefgjksuv] [-o TÙY-CHỌN] [-A HÀNH-ĐỘNG] [-G MẪU-GLOB] [-W DANH-" "SÁCH-TỪ] [-F HÀM] [-C LỆNH] [-X MẪU-LỌC] [-P TIỀN-TỐ] [-S HẬU-TỐ] [TỪ]" -#: builtins.c:239 +#: builtins.c:241 #, fuzzy msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o TÙY-CHỌN] [-DE] [TÊN …]" -#: builtins.c:242 +#: builtins.c:244 msgid "" "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " "callback] [-c quantum] [array]" @@ -2606,7 +2676,7 @@ msgstr "" "mapfile [-d delim] [-n SỐ-LƯỢNG] [-O GỐC] [-s SỐ-LƯỢNG] [-t] [-u fd] [-C " "GỌI-NGƯỢC] [-c LƯỢNG] [MẢNG]" -#: builtins.c:244 +#: builtins.c:246 #, fuzzy msgid "" "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " @@ -2615,7 +2685,7 @@ msgstr "" "readarray [-n ĐẾM] [-O GỐC] [-s SỐ-LƯỢNG] [-t] [-u FD] [-C GỌI-NGƯỢC] [-c " "LƯỢNG] [MẢNG]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2652,7 +2722,7 @@ msgstr "" " alias trả lại thành công trừ khi TÊN đã cho không phải là\n" " một bí danh đã được định nghĩa" -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2668,7 +2738,7 @@ msgstr "" " \n" " Trả lại thành công trừ khi TÊN không phải là một bí danh." -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2744,7 +2814,7 @@ msgstr "" " Trạng thái thoát:\n" " lệnh bind trả về 0 trừ khi đưa ra tùy chọn không nhận ra hay gặp lỗi." -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2762,7 +2832,7 @@ msgstr "" " Trạng thái thoát:\n" " Trạng thái thoát là 0 trừ khi N nhỏ hơn 1." -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2780,7 +2850,7 @@ msgstr "" " Trạng thái thoát:\n" " Trạng thái thoát là 0 trừ khi N nhỏ hơn 1." -#: builtins.c:354 +#: builtins.c:356 #, fuzzy msgid "" "Execute shell builtins.\n" @@ -2804,7 +2874,7 @@ msgstr "" " Trả lại trạng thái thoát của SHELL-BUILTIN, hoặc sai nếu\n" " SHELL-BUILTIN không phải là một lệnh tích hợp hệ vỏ." -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2831,13 +2901,14 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại 0 trừ khi hệ vỏ đang chạy hàm hệ vỏ, BTHỨC cũng hợp lệ." -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" " Change the current directory to DIR. The default DIR is the value of " "the\n" -" HOME shell variable.\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\n" " \n" " The variable CDPATH defines the search path for the directory " "containing\n" @@ -2909,7 +2980,7 @@ msgstr "" " Trả về 0 nếu thay đổi thư mục, và nếu $PWD được đặt thành công khi\n" " -P được sử dụng; không thì khác không." -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2936,7 +3007,7 @@ msgstr "" " Trả về 0 trừ khi đưa ra tùy chọn sai hoặc không đọc được thư mục hiện " "tại." -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2952,7 +3023,7 @@ msgstr "" " Trạng thái thoát:\n" " Lúc nào cũng thành công." -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2964,7 +3035,7 @@ msgstr "" " Trạng thái thoát:\n" " Lúc nào cũng thành công." -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2976,7 +3047,7 @@ msgstr "" " Trạng thái thoát:\n" " Lúc nào cũng không thành công." -#: builtins.c:471 +#: builtins.c:473 msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3010,7 +3081,7 @@ msgstr "" " Trả lại trạng thái thoát của LỆNH, hoặc thất bại nếu không tìm\n" " thấy LỆNH." -#: builtins.c:490 +#: builtins.c:492 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3039,7 +3110,8 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" @@ -3087,7 +3159,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công trừ khi đưa ra tùy chọn sai hoặc gặp lỗi khi gán biến." -#: builtins.c:532 +#: builtins.c:535 #, fuzzy msgid "" "Set variable values and attributes.\n" @@ -3098,7 +3170,7 @@ msgstr "" "\n" " Lệnh này đã lạc hậu. Xem “help declare”." -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -3124,7 +3196,7 @@ msgstr "" " Trả lại thành công trừ khi đưa ra tùy chọn sai hay gặp lỗi,\n" " hoặc nếu hệ vỏ không chạy hàm." -#: builtins.c:557 +#: builtins.c:560 #, fuzzy msgid "" "Write arguments to the standard output.\n" @@ -3192,7 +3264,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không gặp lỗi khi ghi." -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3214,7 +3286,8 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không gặp lỗi ghi." -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3234,6 +3307,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3264,7 +3343,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công trừ khi TÊN không phải lệnh tích hợp hoặc gặp lỗi." -#: builtins.c:640 +#: builtins.c:648 msgid "" "Execute arguments as a shell command.\n" " \n" @@ -3283,7 +3362,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái thoát của câu lệnh hay thành công nếu lệnh rỗng." -#: builtins.c:652 +#: builtins.c:660 #, fuzzy msgid "" "Parse option arguments.\n" @@ -3360,7 +3439,7 @@ msgstr "" " Trả lại thành công nếu tìm thấy một tùy chọn; không thành công nếu\n" " gặp kết thúc các tùy chọn, hoặc nếu gặp lỗi." -#: builtins.c:694 +#: builtins.c:702 msgid "" "Replace the shell with the given command.\n" " \n" @@ -3400,7 +3479,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công trừ khi không tìm được LỆNH hoặc gặp lỗi chuyển hướng." -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3412,7 +3491,7 @@ msgstr "" " Thoát khỏi hệ vỏ với trạng thái N. Không xác định N thì trạng thái\n" " thoát là trạng thái của lệnh cuối cùng được chạy." -#: builtins.c:724 +#: builtins.c:732 msgid "" "Exit a login shell.\n" " \n" @@ -3425,7 +3504,8 @@ msgstr "" " Thoát khỏi hệ vỏ đăng nhập với trạng thái N. Trả về lỗi nếu không\n" " phải hệ vỏ đăng nhập." -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy msgid "" "Display or execute commands from the history list.\n" " \n" @@ -3450,6 +3530,8 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\n" +" \n" " Exit Status:\n" " Returns success or status of executed command; non-zero if an error " "occurs." @@ -3477,7 +3559,7 @@ msgstr "" " Trả lại thành công hay trạng thái của câu lệnh được thực thi; gặp\n" " lỗi thì khác số không." -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3498,7 +3580,7 @@ msgstr "" " Trạng thái của câu lệnh được nâng lên trước; hoặc thất bại nếu xảy\n" " ra lỗi." -#: builtins.c:779 +#: builtins.c:789 msgid "" "Move jobs to the background.\n" " \n" @@ -3521,7 +3603,7 @@ msgstr "" " Trả lại thành công nếu chức năng điều khiển công việc được bật và\n" " không gặp lỗi." -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" @@ -3565,7 +3647,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu tìm được TÊN và không đưa ra tùy chọn sai." -#: builtins.c:818 +#: builtins.c:828 #, fuzzy msgid "" "Display information about builtin commands.\n" @@ -3605,7 +3687,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu tìm được MẪU và không đưa ra tùy chọn sai." -#: builtins.c:842 +#: builtins.c:852 #, fuzzy msgid "" "Display or manipulate the history list.\n" @@ -3630,7 +3712,11 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" @@ -3672,7 +3758,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không gặp tùy chọn sai hay gặp lỗi." -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3715,7 +3801,7 @@ msgstr "" " Trả lại thành công nếu không gặp tùy chọn sai hay gặp lỗi.\n" " Đưa ra “-x” thì trả lại trạng thái thoát của LỆNH." -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3746,7 +3832,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không đưa ra tùy chọn hay ĐTCV sai." -#: builtins.c:925 +#: builtins.c:939 #, fuzzy msgid "" "Send a signal to a job.\n" @@ -3788,7 +3874,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không đưa ra tùy chọn sai hay gặp lỗi." -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" @@ -3872,7 +3958,7 @@ msgstr "" " Nếu ĐỐI-SỐ cuối cùng được định giá thành 0 thì trả về 1; không thì\n" " trả về 0." -#: builtins.c:994 +#: builtins.c:1008 #, fuzzy msgid "" "Read a line from the standard input and split it into fields.\n" @@ -3897,6 +3983,8 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" @@ -3969,7 +4057,7 @@ msgstr "" " Mã trả lại là số không, nếu không gặp kết thúc tập tin, hay chờ quá\n" " lâu, hoặc đưa ra bộ mô tả tập tin sai làm đối số cho “-u”." -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3990,7 +4078,7 @@ msgstr "" " Trả lại N, hoặc bị lỗi nếu hệ vỏ không đang chạy một hàm hay văn\n" " lệnh." -#: builtins.c:1055 +#: builtins.c:1071 #, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" @@ -4067,6 +4155,10 @@ msgid "" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -4163,7 +4255,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công trừ phi gặp tùy chọn sai." -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4202,7 +4294,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không đưa ra tùy chọn sai hay TÊN chỉ-đọc." -#: builtins.c:1162 +#: builtins.c:1182 msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4235,7 +4327,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không đưa ra tùy chọn hay TÊN sai," -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4273,7 +4365,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không đưa ra tùy chọn sai hay TÊN không hợp lệ." -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4291,7 +4383,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công trừ khi N âm hay lớn hơn $#." -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4314,15 +4406,18 @@ msgstr "" " Trả lại trạng thái của câu lệnh cuối cùng được thực thi trong\n" " TẬP-TIN; không thành công nếu không thể đọc TẬP-TIN." -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4339,7 +4434,7 @@ msgstr "" " Trả lại thành công trừ khi chức năng điều khiển công việc không\n" " được bật hoặc gặp lỗi." -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4498,7 +4593,7 @@ msgstr "" " Trả lại thành công nếu BTHỨC định giá là Đúng; không thành công\n" " nếu BTHỨC định giá thành Sai hay đối số được chỉ ra sai." -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4510,7 +4605,7 @@ msgstr "" " Lệnh này cùng chức năng lệnh tích hợp \"test\", nhưng đối số cuối\n" " cùng phải là ký tự “]” để khớp với “[” ở đầu." -#: builtins.c:1353 +#: builtins.c:1375 msgid "" "Display process times.\n" " \n" @@ -4529,7 +4624,8 @@ msgstr "" " Trạng thái thoát:\n" " Lúc nào cũng thành công." -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy msgid "" "Trap signals and other events.\n" " \n" @@ -4537,31 +4633,36 @@ msgid "" "signals\n" " or other conditions.\n" " \n" -" ARG is a command to be read and executed when the shell receives the\n" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" " \n" " If no arguments are supplied, trap prints the list of commands " "associated\n" -" with each signal.\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" " \n" " Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " "number.\n" @@ -4606,7 +4707,7 @@ msgstr "" " Trả lại thành công trừ phi đưa ra ĐTTH sai hay tùy chọn\n" " sai." -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4663,7 +4764,7 @@ msgstr "" " Trả lại thành công nếu tìm thấy tất cả các TÊN; bị lỗi nếu không tìm " "thấy." -#: builtins.c:1432 +#: builtins.c:1461 #, fuzzy msgid "" "Modify shell resource limits.\n" @@ -4706,9 +4807,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4757,7 +4859,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không đưa ra tùy chọn sai hay có lỗi phát sinh." -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4790,7 +4892,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không có CHẾ_ĐỘ sai hay tùy chọn sai." -#: builtins.c:1503 +#: builtins.c:1533 #, fuzzy msgid "" "Wait for job completion and return exit status.\n" @@ -4838,7 +4940,7 @@ msgstr "" " Trả về trạng thái của ID cuối; không thành công nếu ID sai hoặc đưa\n" " ra tùy chọn sai." -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" @@ -4862,7 +4964,16 @@ msgstr "" " Trả lại trạng thái của PID; không thành công nếu PID sai, hoặc nếu\n" " đưa ra tùy chọn sai." -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4885,7 +4996,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái của câu lệnh cuối cùng được chạy." -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4915,7 +5026,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái của câu lệnh cuối cùng được chạy." -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4949,7 +5060,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái của câu lệnh cuối cùng được chạy." -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4978,7 +5089,7 @@ msgstr "" " Trạng thái thoát:\n" " Trạng thái trả về là trạng thái trả về của ỐNG-DẪN." -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4996,7 +5107,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái của câu lệnh cuối cùng được chạy." -#: builtins.c:1631 +#: builtins.c:1671 msgid "" "Execute commands based on conditional.\n" " \n" @@ -5031,7 +5142,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái của câu lệnh cuối cùng được chạy." -#: builtins.c:1648 +#: builtins.c:1688 #, fuzzy msgid "" "Execute commands as long as a test succeeds.\n" @@ -5052,7 +5163,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái của câu lệnh cuối cùng được chạy." -#: builtins.c:1660 +#: builtins.c:1700 #, fuzzy msgid "" "Execute commands as long as a test does not succeed.\n" @@ -5073,7 +5184,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái của câu lệnh cuối cùng được chạy." -#: builtins.c:1672 +#: builtins.c:1712 #, fuzzy msgid "" "Create a coprocess named NAME.\n" @@ -5095,7 +5206,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái thoát của câu LỆNH." -#: builtins.c:1686 +#: builtins.c:1726 msgid "" "Define shell function.\n" " \n" @@ -5118,7 +5229,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu TÊN không phải chỉ đọc." -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -5136,7 +5247,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái của câu lệnh cuối cùng được chạy." -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -5159,7 +5270,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại trạng thái của công việc đã tiếp tục lại." -#: builtins.c:1727 +#: builtins.c:1767 #, fuzzy msgid "" "Evaluate arithmetic expression.\n" @@ -5178,7 +5289,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại 1 nếu BTHỨC tính là 0; không thì trả lại 0." -#: builtins.c:1739 +#: builtins.c:1779 msgid "" "Execute conditional command.\n" " \n" @@ -5227,7 +5338,7 @@ msgstr "" " Trạng thái thoát:\n" " 0 hay 1 phụ thuộc vào giá trị của BTHỨC." -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5331,7 +5442,7 @@ msgstr "" " HISTIGNORE\tDanh sách mẫu cách bằng dấu hai chấm dùng để quyết định\n" " \tnhững câu lệnh nào nên được lưu vào danh sách lịch sử.\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5385,7 +5496,7 @@ msgstr "" " Trả lại thành công nếu không đưa ra đối số sai, cũng không sai\n" " chuyển đổi thư mục." -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5433,7 +5544,7 @@ msgstr "" " Trả lại thành công nếu không đưa ra đối số sai, cũng không sai\n" " chuyển đổi thư mục." -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5486,7 +5597,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả về thành công nếu không đưa ra tùy chọn sai hay gặp lỗi." -#: builtins.c:1917 +#: builtins.c:1957 #, fuzzy msgid "" "Set and unset shell options.\n" @@ -5523,7 +5634,7 @@ msgstr "" " Trả lại thành công nếu TÊN_TÙY_CHỌN được bật; không thành công nếu\n" " đưa ra tùy chọn sai hay TÊN_TÙY_CHỌN bị tắt." -#: builtins.c:1938 +#: builtins.c:1978 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -5541,9 +5652,9 @@ msgid "" "successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in " -"printf(1),\n" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" @@ -5592,16 +5703,16 @@ msgstr "" " Trả lại thành công trừ phi đưa ra tùy chọn sai hay gặp lỗi khi ghi\n" " hay gán." -#: builtins.c:1974 +#: builtins.c:2014 #, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" " For each NAME, specify how arguments are to be completed. If no " "options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" -" allows them to be reused as input.\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5644,14 +5755,19 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không đưa ra tùy chọn sai hay gặp lỗi." -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5665,7 +5781,7 @@ msgstr "" " Trạng thái thoát:\n" " Trả lại thành công nếu không đưa ra tùy chọn sai hay gặp lỗi." -#: builtins.c:2019 +#: builtins.c:2062 #, fuzzy msgid "" "Modify or display completion options.\n" @@ -5724,7 +5840,7 @@ msgstr "" " Trả lại thành công trừ phi đưa ra tùy chọn sai, hoặc TÊN có một\n" " đặc tả tự hoàn thiện được xác định." -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" @@ -5797,7 +5913,7 @@ msgstr "" " Trả lại thành công trừ phi đưa ra tùy chọn sai và MẢNG không phải\n" " chỉ đọc hay không là một mảng chỉ số." -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5807,6 +5923,35 @@ msgstr "" " \n" " Giống với “mapfile”." +#, fuzzy +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "Trả về ngữ cảnh của lệnh gọi hàm hiện thời.\n" +#~ "\n" +#~ " Không có BTHỨC thì trả lại \"$line $filename\". Có BTHỨC thì trả\n" +#~ " lại \"$line $subroutine $filename\"; thông tin bổ sung này có thể\n" +#~ " được dùng để cung cấp stack trace.\n" +#~ "\n" +#~ " Giá trị của BTHỨC thì ngụ ý bao nhiêu lần gọi cần lùi lại đằng\n" +#~ " trước lệnh gọi hiện tại; khung gọi đầu là khung 0.\n" +#~ "\n" +#~ " Trạng thái thoát:\n" +#~ " Trả lại 0 trừ khi hệ vỏ đang chạy hàm hệ vỏ, BTHỨC cũng hợp lệ." + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "cảnh báo: %s: %s" + #, c-format #~ msgid "%s: invalid associative array key" #~ msgstr "%s: khóa mảng liên kết không hợp lệ" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo index e3171aefc5079f3bf9c1c4030a40f2366f195a21..3fc5be2ba66ed7a1a7a0ce35ed46c00790c3c0fd 100644 GIT binary patch delta 12651 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 M91qvZSVvX+e|e}E-~a#s delta 47924 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 HX_@~IAy%c$ diff --git a/po/zh_CN.po b/po/zh_CN.po index 1869a358d..ed6d74046 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -9,7 +9,7 @@ # liushuyu <liushuyu011@gmail.com>, 2016. # Mingye Wang <arthur200126@gmail.com>, 2015, 2016. # Boyuan Yang <073plan@gmail.com>, 2018, 2019, 2020. -# Wenbin Lv <wenbin816@gmail.com>, 2021, 2022. +# Wenbin Lv <wenbin816@gmail.com>, 2021, 2022, 2024. # # 本翻译目前采用的格式约定,和其他注意事项: # @@ -25,8 +25,8 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" -"PO-Revision-Date: 2022-06-18 14:25+0800\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" +"PO-Revision-Date: 2024-01-09 22:43+0800\n" "Last-Translator: Wenbin Lv <wenbin816@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" "Language: zh_CN\n" @@ -37,126 +37,127 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 3.1\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "数组下标不正确" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s: 正在移除名称引用属性" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: 无法将索引数组转换为关联数组" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: 无法为非数值的索引赋值" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: 为关联数组赋值时必须使用下标" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: 无法创建:%s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: 无法找到命令的键映射" # 为了可读性,不改动外层引号 -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: 第一个非空白字符不是 `\"'" # %c == ' 或 ",为了可读性,不改动外层引号 -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "%2$s 中没有右 `%1$c'" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: 缺少冒号分隔符" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "\"%s\": 无法解除绑定命令键映射" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "大括号展开:无法为 %s 分配内存" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "大括号展开:为 %u 个元素分配内存失败" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "大括号展开:为 \"%s\"分配内存失败" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "\"%s\": 无效的别名" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "未启用行编辑" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "\"%s\": 无效的键映射名" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s: 无法读取:%s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "\"%s\": 未知的函数名" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s 未与任何键绑定。\n" # Blame the source string. -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s 已被绑定到 " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "\"%s\": 无法解除绑定" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "循环计数" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "仅在 \"for\"、\"while\" 或者 \"until\" 循环中有意义" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -165,359 +166,376 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "返回当前子例程调用的上下文。\n" " \n" " 不带有 <表达式> 时,返回 \"$line $filename\"。带有 <表达式> 时,\n" " 返回 \"$line $subroutine $filename\";这个额外的信息可以用来提供\n" -" 栈跟踪 (stack trace)。\n" +" 栈追踪 (stack trace)。\n" " \n" -" <表达式> 的值表示从当前调用帧需要回去多少个调用帧;栈顶帧是第 0 帧。" +" <表达式> 的值表示从当前调用帧需要回去多少个调用帧;栈顶帧是第 0 帧。\n" +" \n" +" 退出状态:\n" +" 返回 0,除非 shell 不在执行一个 shell 函数,或者 <表达式> 无效。" -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "HOME 未设定" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "参数太多" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "空值目录" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "OLDPWD 未设定" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "第 %d 行:" -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "警告:" -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s: 用法:" -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s: 选项需要一个参数" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s: 需要数值参数" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s: 未找到" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s: 无效的选项" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s: 无效的选项名" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "\"%s\": 不是有效的标识符" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "无效的八进制数" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "无效的十六进制数" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "无效的数字" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s: 无效的信号说明符" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "\"%s\": 不是一个 pid 或有效的任务说明符" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s: 只读变量" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s: 无法赋值" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s: %s超出范围" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "参数" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s超出范围" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s: 无此任务" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s: 无任务控制" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "无任务控制" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s: 受限" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "受限" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s: 不是 shell 内建" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "写入错误:%s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "设定终端属性时出错:%s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "获取终端属性时出错:%s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: 获取当前目录时出错:%s:%s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: 有歧义的任务说明符" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "帮助在当前版本中不可用" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: 不是一个索引数组" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: 无法取消设定:只读%s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: 无法取消设定" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s: 无效的动作名" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s: 没有补全规约" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "警告:-F 选项可能不像您预期的那样工作" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "警告:-C 选项可能不像您预期的那样工作" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "当前未在执行补全函数" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "只能在函数中使用" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "无法用 \"-f\" 生成函数" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s: 只读函数" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: 引用变量不能为数组" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: 不允许名称引用变量引用自身" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: 循环的名称引用" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "\"%s\": 名称引用变量引用的变量名无效" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: 无法以这种方式销毁数组变量" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: 无法将关联数组转换为索引数组" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s: 带引号的复合数组赋值已被弃用" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "动态加载不可用" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "无法打开共享目标 %s:%s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "无法在共享目标 %2$s 中找到 %1$s:%3$s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: 动态内建已经加载" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "%s 的加载函数返回失败 (%d):未加载" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: 未动态加载" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: 无法删除:%s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: 是一个目录" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: 不是普通文件" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: 文件太大" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: 无法执行二进制文件" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: 无法执行:%s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "注销\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "不是登录 shell:使用 \"exit\"" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "有已停止的任务。\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "有运行中的任务。\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "未找到命令" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "历史说明符" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: 无法打开临时文件:%s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "当前" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "在不带任务控制的情况下启动了任务 %d" @@ -532,11 +550,11 @@ msgstr "%s: 非法的选项 -- %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: 选项需要一个参数 -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "已禁用哈希" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: 哈希表为空\n" @@ -561,15 +579,18 @@ msgstr "" #: builtins/help.def:185 #, 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:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: 无法打开:%s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -588,21 +609,31 @@ msgstr "" "名称旁边的星号 (*) 表示该命令被禁用。\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "最多只能使用 -anrw 选项中的一个" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "历史位置" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "空的数组变量名" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: 参数为空或未设置" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s: 无效的时间戳" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: 历史展开失败" @@ -616,113 +647,113 @@ msgstr "%s: inlib 失败" msgid "no other options allowed with `-x'" msgstr "其他选项不能与 \"-x\" 同时使用" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: 参数必须是进程或任务 ID" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "未知错误" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "需要表达式" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: 不是一个索引数组" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: 指定的文件描述符无效" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: 无效的文件描述符:%s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: 无效的行数" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: 无效的数组起始" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: 无效的回调间隔" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "空的数组变量名" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "需要数组变量支持" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "\"%s\": 缺少格式字符" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "\"%c\": 指定的时间格式无效" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "\"%c\": 无效的格式字符" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "警告:%s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "格式解析出现问题:%s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "使用了 \\x 但缺少十六进制数" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "使用了 \\%c 但缺少 unicode 数" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "无其他目录" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: 无效的参数" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<无当前目录>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "目录栈为空" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "目录栈索引" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -737,10 +768,12 @@ 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 "" "显示当前记住的目录列表。 使用 \"pushd\" 命令将目录加入这个列表;\n" @@ -760,7 +793,7 @@ msgstr "" " -N\t显示 dirs 不带选项启动时显示的目录列表中右起第 N 个目录,\n" " \t从零开始。" -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -802,7 +835,7 @@ msgstr "" " \n" " \"dirs\" 内建可以显示目录栈。" -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -836,319 +869,331 @@ msgstr "" " \n" " \"dirs\" 内建可以显示目录栈。" -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: 指定的超时时间无效" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "读取错误:%d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "只能在函数或者被 source 的脚本中使用 \"return\"" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "无法同时取消设定一个函数和一个变量" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: 不是数组变量" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: 不是函数" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s: 无法导出" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "移位次数" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "无法同时设定和取消设定 shell 选项" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: 无效的 shell 选项名" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "需要文件名参数" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: 未找到文件" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "无法挂起" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "无法挂起一个登录 shell" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s 是 \"%s\" 的别名\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s 是 shell 关键字\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s 是函数\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s 是特殊 shell 内建\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s 是函数\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s 是 shell 内建\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s 是 %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s 已被录入哈希表 (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: 无效的限制参数" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "\"%c\": 错误的命令" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s: 无法获取限制:%s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "限制" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s: 无法修改限制:%s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "八进制数" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "\"%c\": 无效的符号模式运算符" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "\"%c\": 无效的符号模式字符" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " 行 " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "上一个命令:%s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "正在中止..." #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "信息:" -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "调试警告:" -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "未知的命令错误" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "错误的命令类型" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "错误的条件连接符" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "错误的跳转" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: 未绑定的变量" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\a等待输入超时:自动注销\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "无法从 /dev/null 重定向标准输入:%s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "时间格式:\"%c\": 无效的格式字符" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc: 副进程 [%d:%s] 仍然存在" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "管道错误" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval: 超出最大 eval 嵌套层数 (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: 超出最大 source 嵌套层数 (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: 超出最大函数嵌套层数 (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: 受限:无法在命令名中使用 \"/\"" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s: 未找到命令" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: 错误的解释器" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s: 无法执行:找不到需要的文件" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: 错误的解释器" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: 无法执行二进制文件:%s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "\"%s\": 是特殊内建" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "无法复制文件描述符 %d 到文件描述符 %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "超出表达式递归层数上限" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "递归栈下溢" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "表达式中有语法错误" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "尝试给非变量赋值" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "变量赋值中有语法错误" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "除以 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "bug: 错误的表达式赋值记号" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "条件表达式需要 \":\"" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "指数小于 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "前缀自增或前缀自减运算符之后需要标识符" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "缺少 \")\"" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "语法错误:需要操作数" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "语法错误:无效的算术运算符" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s(错误记号是 \"%s\")" @@ -1165,7 +1210,7 @@ msgstr "无效的整数常数" msgid "value too great for base" msgstr "值对于底数而言过大" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: 表达式错误\n" @@ -1174,46 +1219,51 @@ msgstr "%s: 表达式错误\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: 无法访问父目录" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "\"%s\": 是特殊内建" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "无法为文件描述符 %d 重置 nodelay 模式" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "无法从文件描述符 %d 为 bash 的输入分配一个新的文件描述符" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: 新的文件描述符 %d 的缓冲区已存在" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: 进程组管道" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "进程复制 (fork) 产生的 pid %d 出现在运行中的任务 %d 中" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "删除进程组 %2$ld 中已停止的任务 %1$d" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: pid %5ld (%s) 标记为仍存活" @@ -1223,137 +1273,137 @@ msgstr "add_process: pid %5ld (%s) 标记为仍存活" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: 无此 pid" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "信号 %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "已完成" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "已停止" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "已停止(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "运行中" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "已完成(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "退出 %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "未知状态" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(核心已转储)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (工作目录:%s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "子进程 setpgid(%ld 到 %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld 不是当前 shell 的子进程" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: 没有进程 %ld 的记录" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: 任务 %d 已停止" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s: 无当前任务" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: 任务已经终止" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: 任务 %d 已在后台" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: 打开 WNOHANG 以避免无限阻塞" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: 第 %d 行:" -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr "(核心已转储)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(当前工作目录:%s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp 失败" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control: 后台无任务控制" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: 行规则" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "无法设定终端进程组 (%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "此 shell 中无任务控制" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: 断言失败:%s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1362,378 +1412,391 @@ msgstr "" "\r\n" "malloc: %s:%d: 断言已搞砸\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "未知" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: 空闲列表中的块损坏" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: 调用时用了已经释放的块作为参数" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: 调用时用了未分配的块作为参数" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: 检测到下溢;mh_nbytes 超出范围" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: 检测到下溢;magic8 损坏" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: 起始和末尾组块大小不一致" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: 调用时用了未分配的块作为参数" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: 检测到下溢;mh_nbytes 超出范围" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: 检测到下溢;magic8 损坏" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: 起始和末尾组块大小不一致" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: 使用 FIND_ALLOC 时分配表已满?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p 已在表中显示为已分配?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p 已在表中显示为未分配?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "无效的底数" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s: 未知的主机" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s: 无效的服务" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s: 指定的网络路径无效" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "不支持网络操作" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: 无法改变区域设置 (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: 无法改变区域设置 (%s):%s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: 无法改变区域设置 (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: 无法改变区域设置 (%s):%s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "您在 $_ 中有邮件" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "您在 $_ 中有新邮件" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "%s 中的邮件已被读过\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "语法错误:需要算术表达式" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "语法错误:未预期的 \";\"" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "语法错误:\"((%s))\"" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: 错误的指令类型 %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "立即文档在第 %d 行被文件结束符分隔(需要 \"%s\")" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: 重定向指令 \"%d\" 超出范围" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" -msgstr "shell_getc: shell_input_line_size (%zu) 超过 SIZE_MAX (%lu):行已被截断" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" +msgstr "" +"shell_getc: shell_input_line_size (%zu) 超过 SIZE_MAX (%lu):行已被截断" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "写入错误:%s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "超出最大立即文档计数" # %c 可能为引号 -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "寻找匹配的 `%c' 时遇到了未预期的 EOF" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "寻找 \"]]\" 时遇到了未预期的 EOF" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "条件表达式中有语法错误:未预期的记号 \"%s\"" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "条件表达式中有语法错误" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "未预期的记号 \"%s\",需要 \")\"" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "需要 \")\"" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "一元条件运算符使用了未预期的参数 \"%s\"" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "一元条件运算符使用了未预期的参数" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "未预期的记号 \"%s\",需要二元条件运算符" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "需要二元条件运算符" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "二元条件运算符使用了未预期的参数 \"%s\"" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "二元条件运算符使用了未预期的参数" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "条件命令中有未预期的记号 \"%c\"" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "条件命令中有未预期的记号 \"%s\"" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "条件命令中有未预期的记号 %d" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "未预期的记号 \"%s\" 附近有语法错误" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "\"%s\" 附近有语法错误" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "语法错误:未预期的文件结束符" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "语法错误:未预期的文件结束符" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "语法错误" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "使用 \"%s\" 退出 shell 。\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "寻找匹配的 \")\" 时遇到了未预期的 EOF" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "补全:未找到函数 \"%s\"" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion: %s: 可能的重试循环" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: COMPSPEC 为 NULL" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: 错误的条件连接符 \"%d\"" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: 无效的文件描述符" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: 文件指针为 NULL" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: \"%c\": 无效的格式字符" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "文件描述符超出范围" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: 有歧义的重定向" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: 无法覆盖已存在的文件" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: 受限:无法重定向输出" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "无法为立即文档创建临时文件:%s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: 无法将文件描述符赋值给变量" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "没有网络时不支持 /dev/(tcp|udp)/host/port" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "重定向错误:无法复制文件描述符" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "无法找到 /tmp,请创建!" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp 必须为有效的目录名" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "在交互式 shell 中将忽略美化输出模式" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c: 无效的选项" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "无法将 uid 设为 %d:有效 uid %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "无法将 gid 设为 %d:有效 gid %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "无法启动调试器;调试模式已禁用" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: 是一个目录" # 这个是查看用户的 /etc/passwd 信息得到的名字。既然是用户的名字,就叫做无名氏吧。(有点想写“红领巾”来着。) -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "无名氏!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash,版本 %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1742,52 +1805,52 @@ msgstr "" "用法:\t%s [GNU 长选项] [选项] ...\n" "\t%s [GNU 长选项] [选项] 脚本文件 ...\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU 长选项:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Shell 选项:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-ilrsD 或 -c <命令> 或 -O <shopt 选项>\t\t(仅适合调用)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s 或 -o <选项>\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "请输入 `%s -c \"help set\"' 以获得关于 shell 选项的更多信息。\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "请输入 `%s -c help' 以获得关于 shell 内建命令的更多信息。\n" # 写如何报告程序错误的地方应该提到如何报告翻译问题。 -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "" "请使用 \"bashbug\" 命令来报告程序错误。\n" "请将翻译错误报告到 <i18n-zh@googlegroups.com>。\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bash 主页:<http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "使用 GNU 软件的通用帮助:<http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: 无效的操作" @@ -1814,7 +1877,7 @@ msgstr "非法指令" #: siglist.c:67 msgid "BPT trace/trap" -msgstr "断点跟踪或陷阱" +msgstr "断点追踪或陷阱" #: siglist.c:75 msgid "ABORT instruction" @@ -1958,282 +2021,302 @@ msgstr "信息请求" msgid "Unknown Signal #%d" msgstr "未知信号 #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "错误的替换:在 %2$s 中没有右 `%1$s'" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: 无法将列表赋值给数组成员" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "无法为进程替换创建管道" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "无法为进程替换创建子进程" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "无法打开命名管道 %s 进行读取" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "无法打开命名管道 %s 进行写入" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "无法将命名管道 %s 作为文件描述符 %d 复制" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "命令替换:忽略输入中的 null 字节" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: 无法将管道复制为文件描述符 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "无法为命令替换创建管道" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "无法为命令替换创建子进程" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: 无法将管道复制为文件描述符 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: 名称引用变量引用的变量名无效" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: 无效的间接展开" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s: 无效的变量名" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s: 参数未设置" +msgid "%s: bad substitution" +msgstr "%s: 错误的替换" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: 参数为空或未设置" +msgid "%s: parameter not set" +msgstr "%s: 参数未设置" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: 子串表达式 < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: 错误的替换" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: 无法这样赋值" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" msgstr "未来版本的 shell 会强制求值为算术替换" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "错误的替换:在 %s 中没有右 \"`\"" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "无匹配:%s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "需要参数" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: 需要整数表达式" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "需要 \")\"" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "需要 \")\",却找到 %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: 需要二元运算符" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: 需要一元运算符" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "缺少 \"]\"" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "语法错误:未预期的 \"%s\"" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "无效的信号编号" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "trap handler: 超出最大的 trap handler 层数 (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: 错误的 trap_list[%d] 值:%p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "run_pending_traps: 信号处理程序是 SIG_DFL,重新发送 %d (%s) 给自己" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler: 错误的信号 %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "导入 \"%s\" 的函数定义时出错" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "shell 层数 (%d) 太高,重置为 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "超出最大立即文档计数" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: 当前作用域中没有函数上下文" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: 变量不可赋值" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s: 无法从不兼容的类型继承值" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s: 将整数赋值给名称引用" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: 当前作用域中没有函数上下文" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s 的 exportstr 为空" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "%2$s 的 exportstr 中有无效的字符 %1$d" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "%s 的 exportstr 中没有 \"=\"" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: shell_variables 的头部不是函数上下文" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: 没有 global_variables 上下文" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: shell_variables 的头部不是临时环境作用域" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: 无法作为 FILE 打开" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" -msgstr "%s: %s: 跟踪文件描述符的值无效" +msgstr "%s: %s: 追踪文件描述符的值无效" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: 兼容性的值超出范围" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "Copyright (C) 2022 自由软件基金会" -#: version.c:47 version2.c:47 -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:47 +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:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash,版本 %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "本软件是自由软件,您可以自由地更改和重新发布。" -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "在法律许可的情况下特此明示,本软件不提供任何担保。" -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: 无法分配 %lu 字节(已分配 %lu 字节)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: 无法分配 %lu 字节" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: 无法分配 %lu 字节(已分配 %lu 字节)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: 无法分配 %lu 字节" @@ -2247,8 +2330,12 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] 名称 [名称 ...]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpvsPSVX] [-m 键映射] [-f 文件名] [-q 名称] [-u 名称] [-r 键序列] [-x 键序列:shell-命令] [键序列:readline-函数 或 readline-命令]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpvsPSVX] [-m 键映射] [-f 文件名] [-q 名称] [-u 名称] [-r 键序列] [-x " +"键序列:shell-命令] [键序列:readline-函数 或 readline-命令]" #: builtins.c:56 msgid "break [n]" @@ -2267,7 +2354,8 @@ msgid "caller [expr]" msgstr "caller [表达式]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [目录]" #: builtins.c:68 @@ -2279,12 +2367,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] 命令 [参数 ...]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [名称[=值] ...] 或 declare -p [-aAfFilnrtux] [名称 ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [名称[=值] ...] 或 declare -p [-aAfFilnrtux] [名" +"称 ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] 名称[=值] ... 或 typeset -p [-aAfFilnrtux] [名称 ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] 名称[=值] ... 或 typeset -p [-aAfFilnrtux] [名" +"称 ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2343,8 +2439,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [模式 ...]" #: builtins.c:123 -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:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2355,16 +2455,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [任务说明符 ... | pid ...]" #: builtins.c:134 -msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s 信号说明符 | -n 信号编号 | -信号说明符] pid | 任务说明符 ... 或 kill -l [信号说明符]" +msgid "" +"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " +"[sigspec]" +msgstr "" +"kill [-s 信号说明符 | -n 信号编号 | -信号说明符] pid | 任务说明符 ... 或 " +"kill -l [信号说明符]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let 参数 [参数 ...]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a 数组] [-d 分隔符] [-i 文本] [-n 字符数] [-N 字符数] [-p 提示符] [-t 超时] [-u fd] [名称 ...]" +#, fuzzy +msgid "" +"read [-Eers] [-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 fd] [名称 ...]" #: builtins.c:140 msgid "return [n]" @@ -2411,7 +2520,8 @@ msgid "[ arg... ]" msgstr "[ 参数... ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[参数] 信号说明符 ...]" #: builtins.c:168 @@ -2435,106 +2545,131 @@ msgid "wait [pid ...]" msgstr "wait [pid ...]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for 名称 [in 词语 ... ] ; do 命令; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( 表达式1; 表达式2; 表达式3 )); do 命令; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select 名称 [in 词语 ... ;] do 命令; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] 流水线" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case 词语 in [模式 [| 模式]...) 命令 ;;]... esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" +#: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" msgstr "if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi" -#: builtins.c:196 +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while 命令; do 命令-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until 命令; do 命令-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [名称] 命令 [重定向]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function 名称 { 命令 ; } 或 name () { 命令 ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ 命令 ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "任务说明符 [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( 表达式 ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ 表达式 ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - 一些 shell 变量的名称和含义" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | 目录]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [选项名 ...]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] 格式 [参数]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o 选项] [-A 动作] [-G 全局模式] [-W 词语列表] [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [名称 ...]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o 选项] [-A 动作] [-G 全局模式] [-W " +"词语列表] [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [名称 ...]" -#: builtins.c:235 -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 +#, fuzzy +msgid "" +"compgen [-V varname] [-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:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o 选项] [-DEI] [名称 ...]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d 分隔符] [-n 计数] [-O 起始] [-s 计数] [-t] [-u fd] [-C 回调] [-c 间隔] [数组]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d 分隔符] [-n 计数] [-O 起始] [-s 计数] [-t] [-u fd] [-C 回调] [-c 间隔] [数组]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d 分隔符] [-n 计数] [-O 起始] [-s 计数] [-t] [-u fd] [-C 回调] [-c " +"间隔] [数组]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d 分隔符] [-n 计数] [-O 起始] [-s 计数] [-t] [-u fd] [-C 回调] [-" +"c 间隔] [数组]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2549,7 +2684,8 @@ 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" @@ -2567,7 +2703,7 @@ msgstr "" " 退出状态:\n" " alias 返回真,除非提供了一个尚未定义别名的 <名称>。" -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2583,7 +2719,7 @@ msgstr "" " \n" " 返回成功,除非 <名称> 不是一个已存在的别名。" -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2595,25 +2731,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2643,12 +2784,13 @@ msgstr "" " -r 键序列 取消 <键序列> 的绑定。\n" " -f 文件名 从 <文件名> 中读取键绑定。\n" " -x 键序列:shell-命令\t当 <键序列> 被输入时,执行 <shell-命令>。\n" -" -X 以可以重新用作输入的格式列出用 -x 绑定的键序列和命令。\n" +" -X 以可以重新用作输入的格式列出用 -x 绑定的键序列和命" +"令。\n" " \n" " 退出状态:\n" " bind 返回 0,除非使用了无法识别的选项,或者有错误发生。" -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2666,7 +2808,7 @@ msgstr "" " 退出状态:\n" " 退出状态为 0,除非 N 不大于等于 1。" -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2684,13 +2826,14 @@ msgstr "" " 退出状态:\n" " 退出状态为 0,除非 N 不大于等于 1。" -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2706,7 +2849,7 @@ msgstr "" " 返回 <shell-内建> 的退出状态,或者如果 <shell-内建> 不是一个 shell 内建\n" " 时返回假。" -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2725,27 +2868,34 @@ msgstr "" " \n" " 不带有 <表达式> 时,返回 \"$line $filename\"。带有 <表达式> 时,\n" " 返回 \"$line $subroutine $filename\";这个额外的信息可以用来提供\n" -" 栈跟踪 (stack trace)。\n" +" 栈追踪 (stack trace)。\n" " \n" " <表达式> 的值表示从当前调用帧需要回去多少个调用帧;栈顶帧是第 0 帧。\n" " \n" " 退出状态:\n" " 返回 0,除非 shell 不在执行一个 shell 函数,或者 <表达式> 无效。" -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2761,11 +2911,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "改变 shell 工作目录。\n" @@ -2776,7 +2928,8 @@ msgstr "" " 目录名称以冒号 (:) 隔开。空的 CDPATH 表示当前目录。如果 <目录> 以\n" " 斜杠 (/) 开头,则不会使用 CDPATH。\n" " \n" -" 如果找不到目录,并且 shell 选项 \"cdable_vars\" 被设定,则假定参数是一个\n" +" 如果找不到目录,并且 shell 选项 \"cdable_vars\" 被设定,则假定参数是一" +"个\n" " 变量名。如果该变量有值,则它的值被当作 <目录>。\n" " \n" " 选项:\n" @@ -2794,7 +2947,7 @@ msgstr "" " 退出状态:\n" " 如果目录改变,或在使用 -P 选项时 $PWD 修改成功,则返回 0;否则返回非零。" -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2820,7 +2973,7 @@ msgstr "" " 退出状态:\n" " 返回 0,除非使用了无效的选项,或者无法读取当前目录。" -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2836,7 +2989,7 @@ msgstr "" " 退出状态:\n" " 总是成功。" -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2848,7 +3001,7 @@ msgstr "" " 退出状态:\n" " 总是成功。" -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2860,12 +3013,13 @@ msgstr "" " 退出状态:\n" " 总是失败。" -#: builtins.c:471 +#: builtins.c:473 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" @@ -2890,7 +3044,8 @@ msgstr "" " 退出状态:\n" " 返回 <命令> 的退出状态,或者当找不到 <命令> 时则返回失败。" -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2918,12 +3073,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2949,7 +3106,7 @@ msgstr "" " -l\t将 <名称> 的值在赋值时转换为小写\n" " -n\t使 <名称> 成为一个对以它的值为名称的变量的引用\n" " -r\t将 <名称> 变为只读\n" -" -t\t使 <名称> 带有 \"跟踪\" (trace) 属性\n" +" -t\t使 <名称> 带有 \"追踪\" (trace) 属性\n" " -u\t使 <名称> 的值在赋值时转换为大写\n" " -x\t将 <名称> 导出\n" " \n" @@ -2963,7 +3120,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者发生变量赋值错误。" -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2973,7 +3130,7 @@ msgstr "" " \n" " 同 \"declare\"。参见 \"help declare\"。" -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2999,11 +3156,12 @@ msgstr "" " 执行一个函数。" # 此字符串可以很好地测试各个 po 编辑器对转义字符的支持是否有 bug(手动斜眼)。poedit(至少在 <=3.0.1 版本中)对 \a 的处理存在 bug,如果你修改了这条翻译,请用纯文本编辑器检查一下 msgstr 里的 \a 前面是否是两个反斜杠。就算你用的不是 poedit,也最好检查一下所有的转义字符,看看是不是和 msgid 里的一致,如不一致请修改。 -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3027,9 +3185,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3056,8 +3216,10 @@ msgstr "" " \\t\t水平制表符\n" " \\v\t垂直制表符\n" " \\\\\t反斜杠\n" -" \\0nnn\tASCII 码为 NNN(八进制)的字符。NNN 可以是 0 至 3 位的八进制数。\n" -" \\xHH\t值为 HH(十六进制)的 8 位字符。HH 可以是一至两位的十六进制数。\n" +" \\0nnn\tASCII 码为 NNN(八进制)的字符。NNN 可以是 0 至 3 位的八进制" +"数。\n" +" \\xHH\t值为 HH(十六进制)的 8 位字符。HH 可以是一至两位的十六进制" +"数。\n" " \\uHHHH\t值为 HHHH(十六进制)的 Unicode 字符。HHHH 可以是一至四位的\n" " \t\t十六进制数。\n" " \\UHHHHHHHH 值为 HHHHHHHH(十六进制)的 Unicode 字符。\n" @@ -3066,7 +3228,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非有写入错误发生。" -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3088,7 +3250,8 @@ msgstr "" " 退出状态:\n" " 返回成功,除非有写入错误发生。" -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3108,6 +3271,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3126,7 +3295,7 @@ msgstr "" " -s\t仅打印 Posix \"特殊\" 内建的名称\n" " \n" " 控制动态加载的选项:\n" -" -f\t从共享对象 <文件名> 中加载 <名称> 内建\n" +" -f\t从共享目标 <文件名> 中加载 <名称> 内建\n" " -d\t删除以 -f 选项加载的内建\n" " \n" " 不带选项时,启用每一个 <名称>。\n" @@ -3137,11 +3306,12 @@ msgstr "" " 退出状态:\n" " 返回成功,除非 <名称> 不是一个 shell 内建,或者有错误发生。" -#: builtins.c:640 +#: builtins.c:648 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" @@ -3154,7 +3324,7 @@ msgstr "" " 退出状态:\n" " 返回命令的退出状态,或者在命令为空的情况下返回成功。" -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3228,12 +3398,13 @@ msgstr "" " 如果找到了一个选项,则返回成功;如果遇到了选项的末尾或者有错误发生,\n" " 则返回失败。" -#: builtins.c:694 +#: builtins.c:702 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" @@ -3241,11 +3412,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "使用指定命令替换 shell。\n" " \n" @@ -3263,7 +3436,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非未找到 <命令>,或者出现一个 <重定向> 错误。" -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3275,11 +3448,12 @@ msgstr "" " 退出 shell,退出状态为 N。如果 N 被省略,则退出状态为最后一个执行的\n" " 命令的退出状态。" -#: builtins.c:724 +#: builtins.c:732 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" @@ -3287,17 +3461,20 @@ msgstr "" " 退出一个登录 shell,退出状态为 N。如果不在登录 shell 中执行,\n" " 则返回一个错误。" -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3310,8 +3487,11 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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" @@ -3329,13 +3509,14 @@ msgstr "" " 使用 \"fc -s [模式=替换串 ...] [命令]\" 的格式,<命令> 会在完成\n" " <模式>=<替换串> 的替换之后被重新执行。\n" " \n" -" r='fc -s' 是一个有用的别名,这样的话输入 \"r cc\" 会执行最后一个以 \"cc\"\n" +" r='fc -s' 是一个有用的别名,这样的话输入 \"r cc\" 会执行最后一个以 " +"\"cc\"\n" " 开头的命令,输入 \"r\" 会重新执行最后一个命令。\n" " \n" " 退出状态:\n" " 返回成功,或者执行的命令的状态;如果有错误发生,则返回非零。" -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3354,12 +3535,14 @@ msgstr "" " 退出状态:\n" " 放至前台的命令的状态,或者当错误发生时则返回失败。" -#: builtins.c:779 +#: builtins.c:789 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" @@ -3373,12 +3556,13 @@ msgstr "" " 退出状态:\n" " 返回成功,除非任务控制没有启用,或者有错误发生。" -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3415,7 +3599,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非没有找到 <名称>,或者使用了无效的选项。" -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3433,7 +3617,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "显示内建命令的相关信息。\n" " \n" @@ -3451,7 +3636,8 @@ msgstr "" " 退出状态:\n" " 返回成功,除非没有找到 <模式>,或者使用了无效的选项。" -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3475,11 +3661,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3511,7 +3702,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者有错误发生。" -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3553,7 +3744,7 @@ msgstr "" " 返回成功,除非使用了无效的选项或者有错误发生。\n" " 如果使用了 -x 选项,则返回 <命令> 的退出状态。" -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3583,7 +3774,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项或者 <任务说明符>。" -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3624,14 +3815,15 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者有错误发生。" -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3703,19 +3895,24 @@ msgstr "" " 退出状态:\n" " 如果最后一个 <参数> 求值结果为 0,则 let 返回 1; 否则 let 返回 0。" -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3723,11 +3920,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3745,8 +3945,10 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "从标准输入读取一行,并将其分割为不同的字段。\n" @@ -3783,7 +3985,7 @@ msgstr "" " 返回码为零,除非遇到了文件结束符、读取超时(此时返回码大于 128)、\n" " 发生了变量赋值错误,或者 -u 选项的参数中的文件描述符无效。" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3802,7 +4004,8 @@ msgstr "" " 退出状态:\n" " 返回 N,或者如果 shell 不在执行一个函数或脚本时,返回失败。" -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3845,7 +4048,8 @@ 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" @@ -3869,13 +4073,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3923,7 +4132,8 @@ msgstr "" " nounset 与 -u 相同\n" " onecmd 与 -t 相同\n" " physical 与 -P 相同\n" -" pipefail 流水线的返回值是最后一个以非零状态退出的命令的退出\n" +" pipefail 流水线的返回值是最后一个以非零状态退出的命令的退" +"出\n" " 状态,或者如果没有命令以非零状态退出,则返回零。\n" " posix 改变 bash 中默认操作和 Posix 标准不同的行为,\n" " 以符合标准\n" @@ -3942,21 +4152,23 @@ msgstr "" " -C 设定之后,禁止以重定向输出的方式覆盖普通文件。\n" " -E 设定之后,ERR 陷阱会被 shell 函数继承。\n" " -H 启用 ! 风格的历史替换。当 shell 是交互式的时候这个标志默认打开。\n" -" -P 设定之后,当执行会改变当前目录的命令,例如 cd 时,不解析符号链接。\n" +" -P 设定之后,当执行会改变当前目录的命令,例如 cd 时,不解析符号链" +"接。\n" " -T 设定之后,DEBUG 和 RETURN 陷阱会被 shell 函数继承。\n" " -- 将所有剩余的参数赋值给位置参数。\n" " 如果没有剩余的参数,则取消设定位置参数。\n" " - 将所有剩余的参数赋值给位置参数。\n" " 关闭 -x 和 -v 选项。\n" " \n" -" 使用 + 而不是 - 会关闭标志。标志也可以在 shell 被启动时使用。当前已设定的\n" +" 使用 + 而不是 - 会关闭标志。标志也可以在 shell 被启动时使用。当前已设定" +"的\n" " 标志可以在 $- 变量中找到。剩余的 n 个 <参数> 是位置参数,并且会被按顺序\n" " 赋值给 $1, $2, .. $n。如果没有给定 <参数>,则打印所有的 shell 变量。\n" " \n" " 退出状态:\n" " 返回成功,除非使用了无效的参数。" -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3968,7 +4180,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -3994,12 +4207,13 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者 <名称> 为只读。" -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4026,7 +4240,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者 <名称> 无效。" -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4062,7 +4276,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者 <名称> 无效。" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4080,7 +4294,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非 N 为负数或者大于 $#。" -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4103,15 +4317,18 @@ msgstr "" " 返回 <文件名> 中最后一个被执行的命令的状态;如果无法读取 <文件名>,\n" " 则返回失败。" -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4127,7 +4344,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非没有启用任务控制,或者有错误发生。" -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4161,7 +4378,8 @@ 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" @@ -4182,7 +4400,8 @@ 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" @@ -4266,7 +4485,8 @@ msgstr "" " \n" " -o 选项 如果指定的 shell 选项 <选项> 启用则为真。\n" " -v 变量 如果指定的 shell 变量 <变量> 已设定则为真。\n" -" -R 变量 如果指定的 shell 变量 <变量> 已设定且为名称引用则为真。\n" +" -R 变量 如果指定的 shell 变量 <变量> 已设定且为名称引用则为" +"真。\n" " ! 表达式 如果 <表达式> 为假则为真。\n" " 表达式1 -a 表达式2\n" " 如果 <表达式1> 和 <表达式2> 都为真则为真。\n" @@ -4284,7 +4504,7 @@ msgstr "" " 如果 <表达式> 求值结果为真则返回成功;如果 <表达式> 求值结果为假,\n" " 或者使用了无效的参数,则返回失败。" -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4295,11 +4515,12 @@ msgstr "" " \n" " 同 \"test\" 内建,但是最后一个参数必须是字符 \"]\",以匹配起始的 \"[\"。" -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4314,39 +4535,54 @@ msgstr "" # EXIT and DEBUG should be as-is. Use before you translate, please. # The -signal is only an example; Read carefully. -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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" @@ -4370,14 +4606,16 @@ msgstr "" " -l\t打印信号名称以及和它们对应的编号的列表\n" " -p\t打印与每个 <信号说明符> 相关联的陷阱命令\n" " \n" -" 每一个 <信号说明符> 可以是 <signal.h> 中的信号名称或者信号编号。信号名称\n" -" 是大小写敏感的,并且 SIG 前缀是可选的。可以使用 \"kill -信号 $$\" 给 shell\n" +" 每一个 <信号说明符> 可以是 <signal.h> 中的信号名称或者信号编号。信号名" +"称\n" +" 是大小写敏感的,并且 SIG 前缀是可选的。可以使用 \"kill -信号 $$\" 给 " +"shell\n" " 发送信号。\n" " \n" " 退出状态:\n" " 返回成功,除非使用了无效的 <信号说明符>,或者无效的选项。" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4403,7 +4641,8 @@ 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" @@ -4427,11 +4666,13 @@ msgstr "" " 退出状态:\n" " 如果所有的 <名称> 都被找到则返回成功;任何一个未找到则失败。" -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4468,9 +4709,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4509,7 +4751,8 @@ msgstr "" " 并非所有选项都在所有系统上可用。\n" " \n" " 如果提供了 <限制>,则它将成为指定的资源的新的值;特殊的 <限制> 值为\n" -" \"soft\"、\"hard\" 和 \"unlimited\",分别表示当前的软限制、当前的硬限制,\n" +" \"soft\"、\"hard\" 和 \"unlimited\",分别表示当前的软限制、当前的硬限" +"制,\n" " 以及无限制。否则,打印指定资源的当前限制值。如果未提供选项,则假定\n" " 为 -f。\n" " \n" @@ -4519,7 +4762,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者有错误发生。" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4550,23 +4793,27 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的 <模式> 或者选项。" -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4598,27 +4845,40 @@ msgstr "" " 返回最后一个 <ID> 的状态;如果使用了无效的 <ID> ,或者使用了无效的\n" " 选项,或者给定了 -n 选项但 shell 没有尚未等待的子进程,则失败。" -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "等待进程完成并且返回退出状态。\n" " \n" -" 等待以 <PID> 指定的进程并报告它的终止状态。如果没有提供 <PID>,则等待当前\n" +" 等待以 <PID> 指定的进程并报告它的终止状态。如果没有提供 <PID>,则等待当" +"前\n" " 所有活跃的子进程,并且返回码为零。<PID> 必须为进程 ID。\n" " \n" " 退出状态:\n" -" 返回最后一个 <PID> 的状态;如果 <PID> 无效,或者使用了无效的选项,则失败。" +" 返回最后一个 <PID> 的状态;如果 <PID> 无效,或者使用了无效的选项,则失" +"败。" -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4639,7 +4899,7 @@ msgstr "" " 退出状态:\n" " 返回最后执行的命令的状态。" -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4669,7 +4929,7 @@ msgstr "" " 退出状态:\n" " 返回最后执行的命令的状态。" -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4702,7 +4962,7 @@ msgstr "" " 退出状态:\n" " 返回最后一个执行的命令的状态。" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4730,7 +4990,7 @@ msgstr "" " 退出状态:\n" " 返回状态是 <流水线> 的返回状态。" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4748,16 +5008,21 @@ msgstr "" " 退出状态:\n" " 返回最后一个执行的命令的状态。" -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4774,11 +5039,12 @@ msgstr "" " 退出状态:\n" " 返回最后一个执行的命令的状态。" -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4791,11 +5057,12 @@ msgstr "" " 退出状态:\n" " 返回最后一个执行的命令的状态。" -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4803,12 +5070,13 @@ msgid "" msgstr "" "只要测试仍然不成功,就执行命令。\n" " \n" -" 只要 <命令> 中的最后一个命令的退出状态仍然不为 0,就展开并执行 <命令-2>。\n" +" 只要 <命令> 中的最后一个命令的退出状态仍然不为 0,就展开并执行 <命" +"令-2>。\n" " \n" " 退出状态:\n" " 返回最后一个执行的命令的状态。" -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4830,12 +5098,13 @@ msgstr "" " 退出状态:\n" " coproc 命令返回退出状态 0。" -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4851,7 +5120,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非 <名称> 为只读。" -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4868,7 +5137,7 @@ msgstr "" " 退出状态:\n" " 返回最后一个执行的命令的状态。" -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4891,7 +5160,7 @@ msgstr "" " 退出状态:\n" " 返回被继续的任务的状态。" -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4908,13 +5177,16 @@ msgstr "" " 退出状态:\n" " 如果 <表达式> 求值结果为 0,则返回 1;否则返回 0。" -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -4944,7 +5216,8 @@ msgstr "" " 表达式1 || 表达式2\t如果 <表达式1> 和 <表达式2> 中任何一个为真\n" " \t\t\t\t则为真,否则为假\n" " \n" -" 当使用 \"==\" 和 \"!=\" 运算符时,运算符右边的字符串被视为模式,进行模式匹配。\n" +" 当使用 \"==\" 和 \"!=\" 运算符时,运算符右边的字符串被视为模式,进行模式" +"匹配。\n" " 当使用 \"=~\" 运算符时,运算符右边的字符串被视为正则表达式来进行匹配。\n" " \n" " 如果 <表达式1> 足够确定整个表达式的值,运算符 && 和 || 将不会对\n" @@ -4953,7 +5226,7 @@ msgstr "" " 退出状态:\n" " 根据 <表达式> 的值返回 0 或 1。" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5044,7 +5317,7 @@ msgstr "" " \t\t通常是 \"^\"。第三个字符是历史注释字符,通常是 \"#\"。\n" " HISTIGNORE\t用于决定哪些命令被存入历史文件的模式列表,以冒号分隔。\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5097,7 +5370,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的参数,或者改变目录失败。" -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5125,7 +5398,8 @@ msgid "" msgstr "" "从栈中删除目录。\n" " \n" -" 从目录栈中删除条目。不带参数时,删除栈顶目录,并改变目录至新的栈顶目录。\n" +" 从目录栈中删除条目。不带参数时,删除栈顶目录,并改变目录至新的栈顶目" +"录。\n" " \n" " 选项:\n" " -n\t阻止从栈中删除目录时通常的改变目录操作,从而仅对栈进行操作。\n" @@ -5142,7 +5416,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的参数,或者改变目录失败。" -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5192,7 +5466,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者有错误发生。" -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5228,7 +5502,8 @@ msgstr "" " 如果 <选项名> 被启用则返回成功;如果使用了无效的选项,或者 <选项名>\n" " 被禁用,则返回失败。" -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5236,29 +5511,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "在 <格式> 的控制下格式化并打印 <参数>。\n" @@ -5267,8 +5549,10 @@ msgstr "" " -v 变量\t将输出赋值给 shell 变量 <变量>,而不是将它显示在\n" " \t\t标准输出上\n" " \n" -" FORMAT 是包含三种类型的对象的字符串:普通字符,会被简单地复制到标准输出;\n" -" 字符转义序列,会在转义之后复制到标准输出;格式说明符,每个都会让 shell 打印\n" +" FORMAT 是包含三种类型的对象的字符串:普通字符,会被简单地复制到标准输" +"出;\n" +" 字符转义序列,会在转义之后复制到标准输出;格式说明符,每个都会让 shell 打" +"印\n" " 下一个多余的参数。\n" " \n" " 除了 printf(1) 中描述的标准格式说明符以外,printf 还可解析:\n" @@ -5285,13 +5569,16 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者发生了写入或赋值错误。" -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5305,8 +5592,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5330,13 +5619,19 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者有错误发生。" -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5349,13 +5644,16 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者有错误发生。" -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5379,8 +5677,10 @@ msgid "" msgstr "" "修改或显示补全选项。\n" " \n" -" 修改每个 <名称> 的补全选项,或者如果没有提供 <名称>,修改正在执行的补全的\n" -" 选项。如果没有提供 <选项>,打印每个 <名称> 的补全选项或者当前的补全规约。\n" +" 修改每个 <名称> 的补全选项,或者如果没有提供 <名称>,修改正在执行的补全" +"的\n" +" 选项。如果没有提供 <选项>,打印每个 <名称> 的补全选项或者当前的补全规" +"约。\n" " \n" " 选项:\n" " \t-o 选项\t\t为每个 <名称> 设定补全选项 <选项>\n" @@ -5392,28 +5692,34 @@ msgstr "" " \n" " 参数:\n" " \n" -" 每个 <名称> 都对应一个之前已通过 \"complete\" 内建定义了补全规约的命令。\n" +" 每个 <名称> 都对应一个之前已通过 \"complete\" 内建定义了补全规约的命" +"令。\n" " 如果没有提供 <名称>,compopt 必须由当前正在生成补全的函数进行调用,\n" " 并且当前正在执行的补全生成器的选项会被修改。\n" " \n" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者 <名称> 没有定义补全规约。" -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5426,11 +5732,13 @@ 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" @@ -5460,7 +5768,7 @@ msgstr "" " 退出状态:\n" " 返回成功,除非使用了无效的选项,或者 <数组> 为只读或不是索引数组。" -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5470,6 +5778,30 @@ msgstr "" " \n" " 同 \"mapfile\"。" +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "返回当前子例程调用的上下文。\n" +#~ " \n" +#~ " 不带有 <表达式> 时,返回 \"$line $filename\"。带有 <表达式> 时,\n" +#~ " 返回 \"$line $subroutine $filename\";这个额外的信息可以用来提供\n" +#~ " 栈追踪 (stack trace)。\n" +#~ " \n" +#~ " <表达式> 的值表示从当前调用帧需要回去多少个调用帧;栈顶帧是第 0 帧。" + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "警告:%s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: 无效的关联数组键" @@ -5498,8 +5830,12 @@ msgstr "" #~ msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n" #~ msgstr "版权所有 (C) 2009 自由软件基金会\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" +#~ 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" #~ msgid "" #~ ". With EXPR, returns\n" @@ -5512,7 +5848,8 @@ 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/po/zh_TW.gmo b/po/zh_TW.gmo index a56fe55c75266bcd659458f9740b30e4b2516bf1..9d92d309f2ed7782ad1aa2f6a3a314c48e52ba40 100644 GIT binary patch delta 12601 zc-n1R34D#m`kpxwOCm%hl|2$!swxDrWl^LkMU~PPx7CKCwG?eF)l;>!iq=wzE>soe zDy30JOSx_>S4*gf$U-8L*s>=g5#s;6=NbQ-+k5l-ojl*nH}lTB&-PVpbvjzs$a>k$ zVXeYnltn3DU}X!XYVdrjjk5pk?x56Tz&$`WU=}bMSON?NKHgC&C*Uw(GvF9tL*VN` zf8Y$DJ8%^+0Js(S2=F-2Ln*7egoh@mr~qPYb>B2-9zhI^AfXsj9uq-EW&-_yOMuOR zn}Mx?dn3p|DzK$63~U7~1^NIRcT(z6U@)))##e*!5QU2QohZ@Iz@EU%oj8zJXAb<h z!M>eI;6-2<a3L@VxT7;AP3}xhUhPZ<RTri3sQkN7z-POV(Rg4e##f8w0r-6v;Yg_z zgAF3>DpH*dJ_QU1z7$D~d=kllcSe%2v%q%1YmpqNWmly<fgxQ<FSaW+FtsZg`xs~y z6>aNELI=B2W!XSiF^OsD(2X5~x{;CCZfrlI8wtN->c2DiYd2~x1=t=~VCvnwQ!|fs zC;k52p?@ztJZ~yybf>KrcBd-8>`n=Gn~o=eZG~WWYQVLJQr^H0J*a_!Jvi{V9;7p? z2L)Q*gMw`ALDe4u28y6PtmI6?;KE2N;N!rEo+R|Qp6u{uPY$pe=mOjhgr6!~PnzVq zDYuHEmk)^Iz!RfL=iMke>8Garbrk9SXpJJLC!@%~l_*MF8%4?7qd8!QXi5+h%>hP7 z(`V*IQ-Dq8{r+g0<btVh7(?`pq2@ZpP;+Bq7_QcNF(mYH483$u3{{;ULz`P-X$pU! zvp8cc+xG%C08WUd=_bdL;JjEe{BbNLTnB`<)ek^PDK|{LOE0^VT2*i_67CAj2gN?X z0l-K5Qe|)UBQEI2cB_E>v{LK)alpL(d|v@<Dp50l?OX>iulO1a9YB+G1Rg-fiUT&5 z_*cV~ngW7NhLg}cBa}Lf@`u1y$b|hzDm516m!4PZA{hJi1$aK{6UKtLgHpF%LfE0) zI39i>;XVOOpxtF)FJSH@M36+!6d4dXV+zOV2&|OxpTI+*qf(JmmHGuD1kF-v1L`lm z4`x94-33bBk<`2psTo+f2r({Euvn?r@IHBoQstt-rAoa8M%#XjTmt-hnNn$B;OP}g zy^V74Dy14pRILV0;I}~Q1w6D~qtr*hJ8PKB-~WtGxa>1J;bwz}Kcn|%0AVFn1pEWo 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 delta 47687 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 diff --git a/po/zh_TW.po b/po/zh_TW.po index cae843920..07fec5666 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: bash 5.2-rc1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-11 14:50-0500\n" +"POT-Creation-Date: 2024-04-05 12:15-0400\n" "PO-Revision-Date: 2023-02-09 00:40+0800\n" "Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n" "Language-Team: Chinese (traditional) <zh-l10n@lists.linux.org.tw>\n" @@ -22,123 +22,124 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 3.2.2\n" -#: arrayfunc.c:66 +#: arrayfunc.c:63 msgid "bad array subscript" msgstr "陣列下標不正確" -#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268 -#: variables.c:3101 +#: arrayfunc.c:463 builtins/declare.def:749 variables.c:2195 variables.c:2224 +#: variables.c:3098 #, c-format msgid "%s: removing nameref attribute" msgstr "%s:正在移除 nameref 屬性" -#: arrayfunc.c:496 builtins/declare.def:868 +#: arrayfunc.c:490 builtins/declare.def:924 #, c-format msgid "%s: cannot convert indexed to associative array" msgstr "%s: 無法將索引陣列轉化為關聯陣列" -#: arrayfunc.c:777 +#: arrayfunc.c:786 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "%s: 無法指派為非數字的索引" -#: arrayfunc.c:822 +#: arrayfunc.c:838 #, c-format msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: 指派為關聯陣列時必須使用下標" -#: bashhist.c:455 +#: bashhist.c:464 #, c-format msgid "%s: cannot create: %s" msgstr "%s: 無法建立: %s" -#: bashline.c:4479 +#: bashline.c:4555 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: 無法為指令找到按鍵映射" -#: bashline.c:4637 +#: bashline.c:4725 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: 第一個非空字元不是「\"」" -#: bashline.c:4666 +#: bashline.c:4754 #, c-format msgid "no closing `%c' in %s" msgstr "%2$s 中沒有閉合的「%1$c」" -#: bashline.c:4697 -#, c-format -msgid "%s: missing colon separator" +#: bashline.c:4785 +#, fuzzy, c-format +msgid "%s: missing separator" msgstr "%s: 缺少冒號分隔符" -#: bashline.c:4733 +#: bashline.c:4832 #, c-format msgid "`%s': cannot unbind in command keymap" msgstr "「%s」: 無法在命令按鍵映射中解除綁定" -#: braces.c:327 +#: braces.c:320 #, c-format msgid "brace expansion: cannot allocate memory for %s" msgstr "大括號展開:無法為 %s 分配記憶體" -#: braces.c:406 -#, c-format -msgid "brace expansion: failed to allocate memory for %u elements" +#: braces.c:383 +#, fuzzy, c-format +msgid "brace expansion: failed to allocate memory for %s elements" msgstr "大括號展開:為 %u 個元素分配記憶體失敗" -#: braces.c:451 +#: braces.c:442 #, c-format msgid "brace expansion: failed to allocate memory for `%s'" msgstr "大括號展開:為「%s」分配記憶體失敗" -#: builtins/alias.def:131 variables.c:1817 +#: builtins/alias.def:131 variables.c:1788 #, c-format msgid "`%s': invalid alias name" msgstr "「%s」: 無效的別名" -#: builtins/bind.def:122 builtins/bind.def:125 +#: builtins/bind.def:119 msgid "line editing not enabled" msgstr "未啟用列編輯" -#: builtins/bind.def:212 +#: builtins/bind.def:204 #, c-format msgid "`%s': invalid keymap name" msgstr "「%s」: 無效的按鍵映射名" -#: builtins/bind.def:252 +#: builtins/bind.def:271 #, c-format msgid "%s: cannot read: %s" msgstr "%s:不能讀取:%s" -#: builtins/bind.def:328 builtins/bind.def:358 +#: builtins/bind.def:347 builtins/bind.def:376 #, c-format msgid "`%s': unknown function name" msgstr "「%s」:不明函數名稱" -#: builtins/bind.def:336 +#: builtins/bind.def:355 #, c-format msgid "%s is not bound to any keys.\n" msgstr "%s 未與任何按鍵綁定。\n" -#: builtins/bind.def:340 +#: builtins/bind.def:359 #, c-format msgid "%s can be invoked via " msgstr "%s 可以被呼叫,藉由 " -#: builtins/bind.def:378 builtins/bind.def:395 +#: builtins/bind.def:395 builtins/bind.def:412 #, c-format msgid "`%s': cannot unbind" msgstr "「%s」: 無法解除綁定" -#: builtins/break.def:77 builtins/break.def:119 +#: builtins/break.def:80 builtins/break.def:125 msgid "loop count" msgstr "迴圈計數" -#: builtins/break.def:139 +#: builtins/break.def:145 msgid "only meaningful in a `for', `while', or `until' loop" msgstr "僅在「for」,「while」, 或者「until」迴圈中有意義" -#: builtins/caller.def:136 +#: builtins/caller.def:135 +#, fuzzy msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -147,360 +148,378 @@ msgid "" " provide a stack trace.\n" " \n" " The value of EXPR indicates how many call frames to go back before the\n" -" current one; the top frame is frame 0." +" current one; the top frame is frame 0.\n" +" \n" +" Exit Status:\n" +" Returns 0 unless the shell is not executing a shell function or EXPR\n" +" is invalid." msgstr "" "回傳目前子呼叫的語境。\n" " \n" " 不帶有 EXPR 時,回傳「$line $filename」。帶有 EXPR 時,回傳\n" -" 「$line $subroutine $filename」;提供堆疊追蹤時可以用到這個\n" -" 延伸資訊。\n" +" 「$line $subroutine $filename」;這個額外的資訊可以被用於提供\n" +" 堆疊追蹤。\n" " \n" " EXPR 的值顯示了到目前呼叫框格需要回去多少個呼叫框格;頂部框格\n" -" 是第 0 框格。" +" 是第 0 框格。\n" +" \n" +" 結束狀態:\n" +" 除非 shell 不在執行一個 shell 函數或者 EXPR 無效,否則回傳結\n" +" 果為 0。" -#: builtins/cd.def:327 +#: builtins/cd.def:321 msgid "HOME not set" msgstr "未設定 HOME" -#: builtins/cd.def:335 builtins/common.c:161 test.c:916 +#: builtins/cd.def:329 builtins/common.c:143 builtins/fc.def:293 test.c:946 msgid "too many arguments" msgstr "太多參數" -#: builtins/cd.def:342 +#: builtins/cd.def:336 msgid "null directory" msgstr "空的目錄" -#: builtins/cd.def:353 +#: builtins/cd.def:347 msgid "OLDPWD not set" msgstr "未設定 OLDPWD" -#: builtins/common.c:96 +#: builtins/common.c:91 #, c-format msgid "line %d: " msgstr "第 %d 列:" -#: builtins/common.c:134 error.c:264 +#: builtins/common.c:117 error.c:227 #, c-format msgid "warning: " msgstr "警告:" -#: builtins/common.c:148 +#: builtins/common.c:131 #, c-format msgid "%s: usage: " msgstr "%s:用法:" -#: builtins/common.c:193 shell.c:524 shell.c:866 +#: builtins/common.c:178 shell.c:524 shell.c:863 #, c-format msgid "%s: option requires an argument" msgstr "%s:選項需要一個參數" -#: builtins/common.c:200 +#: builtins/common.c:184 #, c-format msgid "%s: numeric argument required" msgstr "%s:需要數字參數" -#: builtins/common.c:207 +#: builtins/common.c:190 #, c-format msgid "%s: not found" msgstr "%s:沒有找到" -#: builtins/common.c:216 shell.c:879 +#: builtins/common.c:198 shell.c:876 #, c-format msgid "%s: invalid option" msgstr "%s:無效選項" -#: builtins/common.c:223 +#: builtins/common.c:204 #, c-format msgid "%s: invalid option name" msgstr "%s:無效選項名稱" -#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373 +#: builtins/common.c:210 execute_cmd.c:2461 general.c:360 general.c:365 +#: general.c:446 general.c:457 #, c-format msgid "`%s': not a valid identifier" msgstr "「%s」:不是一個有效的識別符" -#: builtins/common.c:240 +#: builtins/common.c:219 msgid "invalid octal number" msgstr "無效的八進位數字" -#: builtins/common.c:242 +#: builtins/common.c:221 msgid "invalid hex number" msgstr "無效的十六進位數字" -#: builtins/common.c:244 expr.c:1574 +#: builtins/common.c:223 expr.c:1560 expr.c:1574 msgid "invalid number" msgstr "無效數字" -#: builtins/common.c:252 +#: builtins/common.c:230 #, c-format msgid "%s: invalid signal specification" msgstr "%s:無效的訊號規格" -#: builtins/common.c:259 +#: builtins/common.c:236 #, c-format msgid "`%s': not a pid or valid job spec" msgstr "「%s」:不是一個 pid 或有效的工作規格" -#: builtins/common.c:266 error.c:536 +#: builtins/common.c:242 error.c:455 #, c-format msgid "%s: readonly variable" msgstr "%s:唯讀的變數" -#: builtins/common.c:273 +#: builtins/common.c:248 #, c-format msgid "%s: cannot assign" msgstr "%s:無法指定" -#: builtins/common.c:281 +#: builtins/common.c:255 #, c-format msgid "%s: %s out of range" msgstr "%s:%s 超出範圍" -#: builtins/common.c:281 builtins/common.c:283 +#: builtins/common.c:255 builtins/common.c:257 msgid "argument" msgstr "參數" -#: builtins/common.c:283 +#: builtins/common.c:257 #, c-format msgid "%s out of range" msgstr "%s 超出範圍" -#: builtins/common.c:291 +#: builtins/common.c:264 #, c-format msgid "%s: no such job" msgstr "%s:沒有此類工作" -#: builtins/common.c:299 +#: builtins/common.c:271 #, c-format msgid "%s: no job control" msgstr "%s:沒有工作控制" -#: builtins/common.c:301 +#: builtins/common.c:273 msgid "no job control" msgstr "沒有工作控制" -#: builtins/common.c:311 +#: builtins/common.c:282 #, c-format msgid "%s: restricted" msgstr "%s:受限的" -#: builtins/common.c:313 +#: builtins/common.c:284 msgid "restricted" msgstr "受限的" -#: builtins/common.c:321 +#: builtins/common.c:291 #, c-format msgid "%s: not a shell builtin" msgstr "%s:不是一個內建 shell" -#: builtins/common.c:330 +#: builtins/common.c:300 #, c-format msgid "write error: %s" msgstr "寫入時發生錯誤:%s" -#: builtins/common.c:338 +#: builtins/common.c:307 #, c-format msgid "error setting terminal attributes: %s" msgstr "設定終端屬性時發生錯誤: %s" -#: builtins/common.c:340 +#: builtins/common.c:309 #, c-format msgid "error getting terminal attributes: %s" msgstr "取得終端屬性時發生錯誤: %s" -#: builtins/common.c:642 +#: builtins/common.c:599 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s:檢索目前目錄時發生錯誤:%s:%s\n" -#: builtins/common.c:708 builtins/common.c:710 +#: builtins/common.c:663 builtins/common.c:665 #, c-format msgid "%s: ambiguous job spec" msgstr "%s:模稜兩可的工作規格" -#: builtins/common.c:971 +#: builtins/common.c:917 msgid "help not available in this version" msgstr "這個版本沒有可用的說明" -#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825 +#: builtins/common.c:985 +#, c-format +msgid "%s: not an indexed array" +msgstr "%s: 不是一個索引陣列" + +#: builtins/common.c:1008 builtins/set.def:964 variables.c:3864 #, c-format msgid "%s: cannot unset: readonly %s" msgstr "%s: 無法取消設定: 唯讀 %s" -#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830 +#: builtins/common.c:1013 builtins/set.def:930 variables.c:3869 #, c-format msgid "%s: cannot unset" msgstr "%s: 無法取消設定" -#: builtins/complete.def:287 +#: builtins/complete.def:285 #, c-format msgid "%s: invalid action name" msgstr "%s:無效的功能名稱" -#: builtins/complete.def:486 builtins/complete.def:642 -#: builtins/complete.def:873 +#: builtins/complete.def:501 builtins/complete.def:644 +#: builtins/complete.def:899 #, c-format msgid "%s: no completion specification" msgstr "%s:沒有完成的規格" -#: builtins/complete.def:696 +#: builtins/complete.def:703 msgid "warning: -F option may not work as you expect" msgstr "警告:-F 選項可能無法按預期工作" -#: builtins/complete.def:698 +#: builtins/complete.def:705 msgid "warning: -C option may not work as you expect" msgstr "警告:-C 選項可能無法按預期工作" -#: builtins/complete.def:846 +#: builtins/complete.def:872 msgid "not currently executing completion function" msgstr "目前未執行自動完成功能" -#: builtins/declare.def:137 +#: builtins/declare.def:136 msgid "can only be used in a function" msgstr "只能用在函數中" -#: builtins/declare.def:437 +#: builtins/declare.def:472 msgid "cannot use `-f' to make functions" msgstr "無法用「-f」產生函數" -#: builtins/declare.def:464 execute_cmd.c:6132 +#: builtins/declare.def:500 execute_cmd.c:6249 #, c-format msgid "%s: readonly function" msgstr "%s:唯讀函數" -#: builtins/declare.def:521 builtins/declare.def:804 +#: builtins/declare.def:557 builtins/declare.def:844 #, c-format msgid "%s: reference variable cannot be an array" msgstr "%s: 引用變數不能為陣列" -#: builtins/declare.def:532 variables.c:3359 +#: builtins/declare.def:568 variables.c:3345 #, c-format msgid "%s: nameref variable self references not allowed" msgstr "%s: 不允許名稱引用變數引用自身" -#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286 -#: variables.c:3356 +#: builtins/declare.def:573 variables.c:2034 variables.c:3342 #, c-format msgid "%s: circular name reference" msgstr "%s: 迴圈變數名引用" -#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820 +#: builtins/declare.def:577 builtins/declare.def:851 builtins/declare.def:860 #, c-format msgid "`%s': invalid variable name for name reference" msgstr "「%s」:無效的引用變數名" -#: builtins/declare.def:856 +#: builtins/declare.def:912 #, c-format msgid "%s: cannot destroy array variables in this way" msgstr "%s: 無法以這種方式銷毀陣列變數" -#: builtins/declare.def:862 builtins/read.def:887 +#: builtins/declare.def:918 #, c-format msgid "%s: cannot convert associative to indexed array" msgstr "%s: 無法將關聯陣列轉化為索引陣列" -#: builtins/declare.def:891 +#: builtins/declare.def:947 #, c-format msgid "%s: quoted compound array assignment deprecated" msgstr "%s:不建議使用引用的複合陣列指定" -#: builtins/enable.def:145 builtins/enable.def:153 +#: builtins/enable.def:149 builtins/enable.def:157 msgid "dynamic loading not available" msgstr "動態載入不可用" -#: builtins/enable.def:376 +#: builtins/enable.def:385 #, c-format msgid "cannot open shared object %s: %s" msgstr "無法開啟共享物件 %s: %s" -#: builtins/enable.def:405 +#: builtins/enable.def:404 +#, c-format +msgid "%s: builtin names may not contain slashes" +msgstr "" + +#: builtins/enable.def:419 #, c-format msgid "cannot find %s in shared object %s: %s" msgstr "無法在共享物件 %2$s 中找到 %1$s: %3$s" -#: builtins/enable.def:422 +#: builtins/enable.def:436 #, c-format msgid "%s: dynamic builtin already loaded" msgstr "%s: 已經載入動態內建指令" -#: builtins/enable.def:426 +#: builtins/enable.def:440 #, c-format msgid "load function for %s returns failure (%d): not loaded" msgstr "為 %s 載入函式時回傳錯誤 (%d):尚未載入" -#: builtins/enable.def:551 +#: builtins/enable.def:561 #, c-format msgid "%s: not dynamically loaded" msgstr "%s: 未以動態方式載入" -#: builtins/enable.def:577 +#: builtins/enable.def:587 #, c-format msgid "%s: cannot delete: %s" msgstr "%s: 無法刪除: %s" -#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959 +#: builtins/evalfile.c:136 builtins/hash.def:190 execute_cmd.c:6082 #, c-format msgid "%s: is a directory" msgstr "%s: 是一個目錄" -#: builtins/evalfile.c:144 +#: builtins/evalfile.c:142 #, c-format msgid "%s: not a regular file" msgstr "%s: 不是一般檔案" -#: builtins/evalfile.c:153 +#: builtins/evalfile.c:151 #, c-format msgid "%s: file is too large" msgstr "%s: 檔案太大" -#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673 +#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1688 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: 無法執行二進位檔案" -#: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 +#: builtins/exec.def:157 builtins/exec.def:159 builtins/exec.def:245 #, c-format msgid "%s: cannot execute: %s" msgstr "%s: 無法執行: %s" -#: builtins/exit.def:64 +#: builtins/exit.def:61 #, c-format msgid "logout\n" msgstr "登出\n" -#: builtins/exit.def:89 +#: builtins/exit.def:85 msgid "not login shell: use `exit'" msgstr "不是登入 shell: 使用「exit」" -#: builtins/exit.def:121 +#: builtins/exit.def:116 #, c-format msgid "There are stopped jobs.\n" msgstr "有停止的工作。\n" -#: builtins/exit.def:123 +#: builtins/exit.def:118 #, c-format msgid "There are running jobs.\n" msgstr "有執行中的工作。\n" -#: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 +#: builtins/fc.def:284 builtins/fc.def:391 builtins/fc.def:435 msgid "no command found" msgstr "未找到指令" -#: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407 -#: builtins/fc.def:412 +#: builtins/fc.def:381 builtins/fc.def:386 builtins/fc.def:425 +#: builtins/fc.def:430 msgid "history specification" msgstr "歷史記錄規格" -#: builtins/fc.def:444 +#: builtins/fc.def:462 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: 無法開啟暫存檔案: %s" -#: builtins/fg_bg.def:152 builtins/jobs.def:284 +#: builtins/fg_bg.def:148 builtins/jobs.def:289 msgid "current" msgstr "目前" -#: builtins/fg_bg.def:161 +#: builtins/fg_bg.def:157 #, c-format msgid "job %d started without job control" msgstr "在不帶工作控制的情況下啟動了工作 %d" @@ -515,11 +534,11 @@ msgstr "%s:不合法的選項 ─ %c\n" msgid "%s: option requires an argument -- %c\n" msgstr "%s: 選項需要一個參數 -- %c\n" -#: builtins/hash.def:91 +#: builtins/hash.def:88 msgid "hashing disabled" msgstr "已停用雜湊" -#: builtins/hash.def:139 +#: builtins/hash.def:144 #, c-format msgid "%s: hash table empty\n" msgstr "%s: 雜湊表為空\n" @@ -544,15 +563,17 @@ msgstr "" #: builtins/help.def:185 #, 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:223 +#: builtins/help.def:214 #, c-format msgid "%s: cannot open: %s" msgstr "%s: 無法開啟: %s" -#: builtins/help.def:523 +#: builtins/help.def:502 #, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" @@ -571,21 +592,31 @@ msgstr "" "名稱旁邊的星號(*)表示該指令被停用。\n" "\n" -#: builtins/history.def:159 +#: builtins/history.def:162 msgid "cannot use more than one of -anrw" msgstr "最多能使用 -anrw 選項之一" -#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215 -#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247 +#: builtins/history.def:195 builtins/history.def:207 builtins/history.def:218 +#: builtins/history.def:243 builtins/history.def:250 msgid "history position" msgstr "歷史記錄位置" -#: builtins/history.def:338 +#: builtins/history.def:278 +#, fuzzy +msgid "empty filename" +msgstr "空陣列變數名" + +#: builtins/history.def:280 subst.c:8233 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: 參數為空或未設定" + +#: builtins/history.def:349 #, c-format msgid "%s: invalid timestamp" msgstr "%s:無效時間戳" -#: builtins/history.def:449 +#: builtins/history.def:457 #, c-format msgid "%s: history expansion failed" msgstr "%s: 歷史記錄擴充套件失敗" @@ -599,113 +630,113 @@ msgstr "%s: inlib 失敗" msgid "no other options allowed with `-x'" msgstr "其他選項不能與「-x」同時使用" -#: builtins/kill.def:211 +#: builtins/kill.def:210 #, c-format msgid "%s: arguments must be process or job IDs" msgstr "%s: 參數必須是行程或工作 ID" -#: builtins/kill.def:274 +#: builtins/kill.def:271 msgid "Unknown error" msgstr "未知錯誤" -#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658 +#: builtins/let.def:96 builtins/let.def:120 expr.c:634 expr.c:652 msgid "expression expected" msgstr "需要表示式" -#: builtins/mapfile.def:180 -#, c-format -msgid "%s: not an indexed array" -msgstr "%s: 不是一個索引陣列" - -#: builtins/mapfile.def:276 builtins/read.def:336 +#: builtins/mapfile.def:249 builtins/read.def:359 #, c-format msgid "%s: invalid file descriptor specification" msgstr "%s: 無效的檔案描述符規格" -#: builtins/mapfile.def:284 builtins/read.def:343 +#: builtins/mapfile.def:257 builtins/read.def:366 #, c-format msgid "%d: invalid file descriptor: %s" msgstr "%d: 無效的檔案描述符: %s" -#: builtins/mapfile.def:293 builtins/mapfile.def:331 +#: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format msgid "%s: invalid line count" msgstr "%s: 無效的列數" -#: builtins/mapfile.def:304 +#: builtins/mapfile.def:277 #, c-format msgid "%s: invalid array origin" msgstr "%s: 無效的陣列原點" -#: builtins/mapfile.def:321 +#: builtins/mapfile.def:294 #, c-format msgid "%s: invalid callback quantum" msgstr "%s: 無效的回呼定量" -#: builtins/mapfile.def:354 +#: builtins/mapfile.def:327 msgid "empty array variable name" msgstr "空陣列變數名" -#: builtins/mapfile.def:375 +#: builtins/mapfile.def:347 msgid "array variable support required" msgstr "需要陣列變數支援" -#: builtins/printf.def:430 +#: builtins/printf.def:475 #, c-format msgid "`%s': missing format character" msgstr "「%s」: 缺少格式字元" -#: builtins/printf.def:485 +#: builtins/printf.def:600 #, c-format msgid "`%c': invalid time format specification" msgstr "「%c」: 無效的時間格式規格" -#: builtins/printf.def:708 +#: builtins/printf.def:702 +#, c-format +msgid "%%Q: string length: %s" +msgstr "" + +#: builtins/printf.def:802 #, c-format msgid "`%c': invalid format character" msgstr "「%c」: 無效格式字元" -#: builtins/printf.def:734 +#: builtins/printf.def:827 execute_cmd.c:6080 #, c-format -msgid "warning: %s: %s" -msgstr "警告: %s: %s" +msgid "%s: %s" +msgstr "%s: %s" -#: builtins/printf.def:822 +#: builtins/printf.def:919 #, c-format msgid "format parsing problem: %s" msgstr "格式解析問題: %s" -#: builtins/printf.def:919 +#: builtins/printf.def:1104 msgid "missing hex digit for \\x" msgstr "使用了 \\x 但缺少十六進位數字" -#: builtins/printf.def:934 +#: builtins/printf.def:1119 #, c-format msgid "missing unicode digit for \\%c" msgstr "使用了 \\%c 但缺少萬國碼數字" -#: builtins/pushd.def:199 +#: builtins/pushd.def:198 msgid "no other directory" msgstr "無其他目錄" -#: builtins/pushd.def:360 +#: builtins/pushd.def:358 builtins/pushd.def:383 #, c-format msgid "%s: invalid argument" msgstr "%s: 無效參數" -#: builtins/pushd.def:480 +#: builtins/pushd.def:501 msgid "<no current directory>" msgstr "<無目前目錄>" -#: builtins/pushd.def:524 +#: builtins/pushd.def:543 msgid "directory stack empty" msgstr "目錄堆疊為空" -#: builtins/pushd.def:526 +#: builtins/pushd.def:545 msgid "directory stack index" msgstr "目錄堆疊索引" -#: builtins/pushd.def:701 +#: builtins/pushd.def:708 msgid "" "Display the list of currently remembered directories. Directories\n" " find their way onto the list with the `pushd' command; you can get\n" @@ -720,10 +751,12 @@ 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" @@ -745,7 +778,7 @@ msgstr "" " -N\t以 dirs 不帶選項輸出的順序,從右起第 N 個項目顯示列表,\n" "\t從 0 開始。" -#: builtins/pushd.def:723 +#: builtins/pushd.def:730 msgid "" "Adds a directory to the top of the directory stack, or rotates\n" " the stack, making the new top of the stack the current working\n" @@ -791,7 +824,7 @@ msgstr "" " \n" " 「dirs」內建指令顯示目錄堆疊。" -#: builtins/pushd.def:748 +#: builtins/pushd.def:755 msgid "" "Removes entries from the directory stack. With no arguments, removes\n" " the top directory from the stack, and changes to the new top directory.\n" @@ -829,319 +862,331 @@ msgstr "" " \n" " 「dirs」內建變數顯示目錄堆疊。" -#: builtins/read.def:308 +#: builtins/read.def:331 #, c-format msgid "%s: invalid timeout specification" msgstr "%s: 無效的逾時規格" -#: builtins/read.def:827 +#: builtins/read.def:868 #, c-format msgid "read error: %d: %s" msgstr "讀取錯誤: %d: %s" -#: builtins/return.def:68 +#: builtins/return.def:73 msgid "can only `return' from a function or sourced script" msgstr "只能從函數或者原始指令稿「return」" -#: builtins/set.def:869 +#: builtins/set.def:863 msgid "cannot simultaneously unset a function and a variable" msgstr "無法同時取消設定一個函數和一個變數" -#: builtins/set.def:969 +#: builtins/set.def:981 #, c-format msgid "%s: not an array variable" msgstr "%s: 不是陣列變數" -#: builtins/setattr.def:189 +#: builtins/setattr.def:187 #, c-format msgid "%s: not a function" msgstr "%s: 不是函數" -#: builtins/setattr.def:194 +#: builtins/setattr.def:192 #, c-format msgid "%s: cannot export" msgstr "%s:無法匯出" -#: builtins/shift.def:72 builtins/shift.def:79 +#: builtins/shift.def:74 builtins/shift.def:86 msgid "shift count" msgstr "位移計數" -#: builtins/shopt.def:323 +#: builtins/shopt.def:330 msgid "cannot set and unset shell options simultaneously" msgstr "無法同時設定和取消設定 shell 選項" -#: builtins/shopt.def:444 +#: builtins/shopt.def:454 #, c-format msgid "%s: invalid shell option name" msgstr "%s: 無效的 shell 選項名稱" -#: builtins/source.def:128 +#: builtins/source.def:127 msgid "filename argument required" msgstr "需要檔名參數" -#: builtins/source.def:154 +#: builtins/source.def:153 #, c-format msgid "%s: file not found" msgstr "%s: 檔案未找到" -#: builtins/suspend.def:102 +#: builtins/suspend.def:105 msgid "cannot suspend" msgstr "無法暫停" -#: builtins/suspend.def:112 +#: builtins/suspend.def:111 msgid "cannot suspend a login shell" msgstr "無法暫停登入 shell" -#: builtins/type.def:235 +#: builtins/type.def:231 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s 是「%s」的別名\n" -#: builtins/type.def:256 +#: builtins/type.def:252 #, c-format msgid "%s is a shell keyword\n" msgstr "%s 是 shell 關鍵字\n" -#: builtins/type.def:275 -#, c-format -msgid "%s is a function\n" -msgstr "%s 是一個函數\n" - -#: builtins/type.def:299 +#: builtins/type.def:270 builtins/type.def:314 #, c-format msgid "%s is a special shell builtin\n" msgstr "%s 是特別的 shell 內建命令\n" -#: builtins/type.def:301 +#: builtins/type.def:289 +#, c-format +msgid "%s is a function\n" +msgstr "%s 是一個函數\n" + +#: builtins/type.def:316 #, c-format msgid "%s is a shell builtin\n" msgstr "%s 是 shell 內建命令\n" -#: builtins/type.def:323 builtins/type.def:408 +#: builtins/type.def:338 builtins/type.def:425 #, c-format msgid "%s is %s\n" msgstr "%s 是 %s\n" -#: builtins/type.def:343 +#: builtins/type.def:358 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s 已進行雜湊操作 (%s)\n" -#: builtins/ulimit.def:400 +#: builtins/ulimit.def:398 #, c-format msgid "%s: invalid limit argument" msgstr "%s: 無效的 limit 參數" -#: builtins/ulimit.def:426 +#: builtins/ulimit.def:424 #, c-format msgid "`%c': bad command" msgstr "「%c」:不當的指令" -#: builtins/ulimit.def:464 +#: builtins/ulimit.def:459 #, c-format msgid "%s: cannot get limit: %s" msgstr "%s:不能得到 limit: %s" -#: builtins/ulimit.def:490 +#: builtins/ulimit.def:492 msgid "limit" msgstr "limit" -#: builtins/ulimit.def:502 builtins/ulimit.def:802 +#: builtins/ulimit.def:504 builtins/ulimit.def:790 #, c-format msgid "%s: cannot modify limit: %s" msgstr "%s:不能修改 limit: %s" -#: builtins/umask.def:115 +#: builtins/umask.def:114 msgid "octal number" msgstr "八進位數字" -#: builtins/umask.def:232 +#: builtins/umask.def:256 #, c-format msgid "`%c': invalid symbolic mode operator" msgstr "「%c」: 無效的符號狀態運算子" -#: builtins/umask.def:287 +#: builtins/umask.def:341 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "「%c」: 無效的符號狀態字元" -#: error.c:89 error.c:373 error.c:375 error.c:377 +#: error.c:83 error.c:311 error.c:313 error.c:315 msgid " line " msgstr " 列 " -#: error.c:164 +#: error.c:151 #, c-format msgid "last command: %s\n" msgstr "最後的指令:%s\n" -#: error.c:172 +#: error.c:159 #, c-format msgid "Aborting..." msgstr "中止…" #. TRANSLATORS: this is a prefix for informational messages. -#: error.c:287 +#: error.c:244 #, c-format msgid "INFORM: " msgstr "通知:" -#: error.c:310 +#: error.c:261 #, c-format msgid "DEBUG warning: " msgstr "除錯警告:" -#: error.c:488 +#: error.c:413 msgid "unknown command error" msgstr "不明指令錯誤" -#: error.c:489 +#: error.c:414 msgid "bad command type" msgstr "不當的指令類型" -#: error.c:490 +#: error.c:415 msgid "bad connector" msgstr "不當的連接器" -#: error.c:491 +#: error.c:416 msgid "bad jump" msgstr "錯誤的跳轉" -#: error.c:529 +#: error.c:449 #, c-format msgid "%s: unbound variable" msgstr "%s: 未綁定的變數" -#: eval.c:243 +#: eval.c:252 msgid "\atimed out waiting for input: auto-logout\n" msgstr "\a 等待輸入逾時:自動登出\n" -#: execute_cmd.c:555 +#: execute_cmd.c:587 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "無法從 /dev/null 重定向標準輸入: %s" -#: execute_cmd.c:1317 +#: execute_cmd.c:1369 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "時間格式:「%c」: 無效的格式字元" -#: execute_cmd.c:2391 +#: execute_cmd.c:2447 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" msgstr "execute_coproc:coproc [%d:%s] 仍然存在" -#: execute_cmd.c:2524 +#: execute_cmd.c:2600 msgid "pipe error" msgstr "管道錯誤" -#: execute_cmd.c:4923 +#: execute_cmd.c:4048 +#, c-format +msgid "invalid regular expression `%s': %s" +msgstr "" + +#: execute_cmd.c:4050 +#, c-format +msgid "invalid regular expression `%s'" +msgstr "" + +#: execute_cmd.c:5028 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" msgstr "eval:超出最大 eval 巢狀層數 (%d)" -#: execute_cmd.c:4935 +#: execute_cmd.c:5041 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" msgstr "%s: 超出最大來源巢狀層數 (%d)" -#: execute_cmd.c:5043 +#: execute_cmd.c:5170 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: 超出最大函數巢狀層數 (%d)" -#: execute_cmd.c:5598 +#: execute_cmd.c:5727 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: 受限的: 無法在指令名稱中使用「/」" -#: execute_cmd.c:5715 +#: execute_cmd.c:5844 #, c-format msgid "%s: command not found" msgstr "%s:指令找不到" -#: execute_cmd.c:5957 +#: execute_cmd.c:6118 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: 不當的直譯器" -#: execute_cmd.c:5975 +#: execute_cmd.c:6127 #, c-format msgid "%s: cannot execute: required file not found" msgstr "%s:無法執行:找不到必須檔案" -#: execute_cmd.c:6000 -#, c-format -msgid "%s: %s: bad interpreter" -msgstr "%s: %s: 不當的直譯器" - -#: execute_cmd.c:6037 +#: execute_cmd.c:6164 #, c-format msgid "%s: cannot execute binary file: %s" msgstr "%s: 無法執行二進位檔案: %s" -#: execute_cmd.c:6123 -#, c-format -msgid "`%s': is a special builtin" -msgstr "「%s」: 特殊內建" - -#: execute_cmd.c:6175 +#: execute_cmd.c:6290 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "無法複製檔案描述符 %d 到檔案描述符 %d" -#: expr.c:263 +#: expr.c:265 msgid "expression recursion level exceeded" msgstr "表示式遞迴層次超出範圍" -#: expr.c:291 +#: expr.c:293 msgid "recursion stack underflow" msgstr "遞迴堆疊下限溢位" -#: expr.c:478 -msgid "syntax error in expression" +#: expr.c:472 +#, fuzzy +msgid "arithmetic syntax error in expression" msgstr "表示式語法錯誤" -#: expr.c:522 +#: expr.c:516 msgid "attempted assignment to non-variable" msgstr "嘗試指派給非變數" -#: expr.c:531 -msgid "syntax error in variable assignment" +#: expr.c:525 +#, fuzzy +msgid "arithmetic syntax error in variable assignment" msgstr "變數定義語法錯誤" -#: expr.c:545 expr.c:912 +#: expr.c:539 expr.c:906 msgid "division by 0" msgstr "除 0" -#: expr.c:593 +#: expr.c:587 msgid "bug: bad expassign token" msgstr "錯誤:不當的表示式字組" -#: expr.c:647 +#: expr.c:641 msgid "`:' expected for conditional expression" msgstr "條件表示式需要「:」" -#: expr.c:973 +#: expr.c:968 msgid "exponent less than 0" msgstr "指數小於 0" -#: expr.c:1030 +#: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" msgstr "預增符或預減符後應跟有識別符" -#: expr.c:1057 +#: expr.c:1056 msgid "missing `)'" msgstr "缺少「)」" -#: expr.c:1108 expr.c:1492 -msgid "syntax error: operand expected" +#: expr.c:1107 expr.c:1490 +#, fuzzy +msgid "arithmetic syntax error: operand expected" msgstr "語法錯誤: 需要運算元" -#: expr.c:1494 -msgid "syntax error: invalid arithmetic operator" +#: expr.c:1451 expr.c:1472 +msgid "--: assignment requires lvalue" +msgstr "" + +#: expr.c:1453 expr.c:1474 +msgid "++: assignment requires lvalue" +msgstr "" + +#: expr.c:1492 +#, fuzzy +msgid "arithmetic syntax error: invalid arithmetic operator" msgstr "語法錯誤: 無效的算術運算子" -#: expr.c:1518 +#: expr.c:1515 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" msgstr "%s%s%s: %s (錯誤字組是「%s」)" @@ -1158,7 +1203,7 @@ msgstr "無效的整數常數" msgid "value too great for base" msgstr "數值太大不可為算術進位的基底" -#: expr.c:1652 +#: expr.c:1654 #, c-format msgid "%s: expression error\n" msgstr "%s: 表示式錯誤\n" @@ -1167,46 +1212,51 @@ msgstr "%s: 表示式錯誤\n" msgid "getcwd: cannot access parent directories" msgstr "getcwd: 無法存取上層目錄" -#: input.c:99 subst.c:6208 +#: general.c:452 +#, c-format +msgid "`%s': is a special builtin" +msgstr "「%s」: 特殊內建" + +#: input.c:98 subst.c:6580 #, c-format msgid "cannot reset nodelay mode for fd %d" msgstr "無法為檔案描述符 %d 重設無延遲模式" -#: input.c:266 +#: input.c:254 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" msgstr "無法為來自 fd %d 的 bash 輸入分配新的檔案描述符" -#: input.c:274 +#: input.c:262 #, c-format msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: 已經存在提供給新 fd %d 的緩衝區" -#: jobs.c:543 +#: jobs.c:539 msgid "start_pipeline: pgrp pipe" msgstr "start_pipeline: 行程群組管道" -#: jobs.c:907 +#: jobs.c:899 #, c-format msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:960 +#: jobs.c:951 #, c-format msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" -#: jobs.c:1279 +#: jobs.c:1292 #, c-format msgid "forked pid %d appears in running job %d" msgstr "產生的行程識別碼 %d 顯示為執行中的工作 %d" -#: jobs.c:1397 +#: jobs.c:1408 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "刪除行程群組 %2$ld 中已停止的工作 %1$d" -#: jobs.c:1502 +#: jobs.c:1509 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" msgstr "add_process: 行程識別碼 %5ld(%s) 標註為仍活著" @@ -1216,137 +1266,137 @@ msgstr "add_process: 行程識別碼 %5ld(%s) 標註為仍活著" msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: 無此行程識別碼" -#: jobs.c:1854 +#: jobs.c:1853 #, c-format msgid "Signal %d" msgstr "訊號 %d" -#: jobs.c:1868 jobs.c:1894 +#: jobs.c:1864 jobs.c:1890 msgid "Done" msgstr "已完成" -#: jobs.c:1873 siglist.c:123 +#: jobs.c:1869 siglist.c:123 msgid "Stopped" msgstr "停止" -#: jobs.c:1877 +#: jobs.c:1873 #, c-format msgid "Stopped(%s)" msgstr "已停止(%s)" -#: jobs.c:1881 +#: jobs.c:1877 msgid "Running" msgstr "執行中" -#: jobs.c:1898 +#: jobs.c:1894 #, c-format msgid "Done(%d)" msgstr "已完成(%d)" -#: jobs.c:1900 +#: jobs.c:1896 #, c-format msgid "Exit %d" msgstr "結束 %d" -#: jobs.c:1903 +#: jobs.c:1899 msgid "Unknown status" msgstr "不明狀態" -#: jobs.c:1990 +#: jobs.c:1983 #, c-format msgid "(core dumped) " msgstr "(核心已傾印)" -#: jobs.c:2009 +#: jobs.c:2002 #, c-format msgid " (wd: %s)" msgstr " (工作目錄: %s)" -#: jobs.c:2250 +#: jobs.c:2229 #, c-format msgid "child setpgid (%ld to %ld)" msgstr "子行程 setpgid (%ld 到 %ld)" -#: jobs.c:2608 nojobs.c:666 +#: jobs.c:2580 nojobs.c:637 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: 行程識別碼 %ld 不是目前 shell 的子行程" -#: jobs.c:2884 +#: jobs.c:2872 #, c-format msgid "wait_for: No record of process %ld" msgstr "wiat_for: 沒有行程 %ld 的紀錄" -#: jobs.c:3223 +#: jobs.c:3228 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: 工作 %d 已停止" -#: jobs.c:3551 +#: jobs.c:3566 #, c-format msgid "%s: no current jobs" msgstr "%s:目前沒有工作" -#: jobs.c:3558 +#: jobs.c:3573 #, c-format msgid "%s: job has terminated" msgstr "%s: 工作已經終止" -#: jobs.c:3567 +#: jobs.c:3582 #, c-format msgid "%s: job %d already in background" msgstr "%s: 工作 %d 已在背景執行" -#: jobs.c:3793 +#: jobs.c:3810 msgid "waitchld: turning on WNOHANG to avoid indefinite block" msgstr "waitchld: 開啟 WNOHANG 以避免無限阻塞" -#: jobs.c:4307 +#: jobs.c:4348 #, c-format msgid "%s: line %d: " msgstr "%s: 第 %d 列:" -#: jobs.c:4321 nojobs.c:921 +#: jobs.c:4363 nojobs.c:892 #, c-format msgid " (core dumped)" msgstr " (核心已傾印)" -#: jobs.c:4333 jobs.c:4346 +#: jobs.c:4379 jobs.c:4399 #, c-format msgid "(wd now: %s)\n" msgstr "(目前工作目錄:%s)\n" -#: jobs.c:4378 +#: jobs.c:4430 msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp 失敗" -#: jobs.c:4434 +#: jobs.c:4486 msgid "initialize_job_control: no job control in background" msgstr "initialize_job_control:背景中沒有工作控制" -#: jobs.c:4450 +#: jobs.c:4502 msgid "initialize_job_control: line discipline" msgstr "initialize_job_control: 列規律" -#: jobs.c:4460 +#: jobs.c:4512 msgid "initialize_job_control: setpgid" msgstr "initialize_job_control: setpgid" -#: jobs.c:4481 jobs.c:4490 +#: jobs.c:4533 jobs.c:4542 #, c-format msgid "cannot set terminal process group (%d)" msgstr "無法設定終端行程群組(%d)" -#: jobs.c:4495 +#: jobs.c:4547 msgid "no job control in this shell" msgstr "此 shell 中無工作控制" -#: lib/malloc/malloc.c:367 +#: lib/malloc/malloc.c:364 #, c-format msgid "malloc: failed assertion: %s\n" msgstr "malloc: 主張失敗: %s\n" -#: lib/malloc/malloc.c:383 +#: lib/malloc/malloc.c:375 #, c-format msgid "" "\r\n" @@ -1355,376 +1405,388 @@ msgstr "" "\r\n" "malloc: %s:%d: 主張已修補\r\n" -#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941 +#: lib/malloc/malloc.c:376 lib/malloc/malloc.c:925 msgid "unknown" msgstr "不明" -#: lib/malloc/malloc.c:892 +#: lib/malloc/malloc.c:876 msgid "malloc: block on free list clobbered" msgstr "malloc: 空閒串列中的區塊損壞" -#: lib/malloc/malloc.c:980 +#: lib/malloc/malloc.c:961 msgid "free: called with already freed block argument" msgstr "free: 用已經釋放的區塊做為呼叫參數" -#: lib/malloc/malloc.c:983 +#: lib/malloc/malloc.c:964 msgid "free: called with unallocated block argument" msgstr "free: 用未分配的區塊做為呼叫參數" -#: lib/malloc/malloc.c:1001 +#: lib/malloc/malloc.c:982 msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: 檢測到下限溢位;mh_nbytes 超出範圍" -#: lib/malloc/malloc.c:1007 +#: lib/malloc/malloc.c:988 msgid "free: underflow detected; magic8 corrupted" msgstr "free: 偵測到下限溢位;magic8 損壞" -#: lib/malloc/malloc.c:1014 +#: lib/malloc/malloc.c:995 msgid "free: start and end chunk sizes differ" msgstr "free: 啟始和末尾區塊大小不一致" -#: lib/malloc/malloc.c:1176 +#: lib/malloc/malloc.c:1154 msgid "realloc: called with unallocated block argument" msgstr "realloc: 用未分配的區塊做為呼叫參數" -#: lib/malloc/malloc.c:1191 +#: lib/malloc/malloc.c:1169 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: 檢測到下限溢位;mh_nbytes 超出範圍" -#: lib/malloc/malloc.c:1197 +#: lib/malloc/malloc.c:1175 msgid "realloc: underflow detected; magic8 corrupted" msgstr "realloc: 偵測到下限溢位;magic8 損壞" -#: lib/malloc/malloc.c:1205 +#: lib/malloc/malloc.c:1183 msgid "realloc: start and end chunk sizes differ" msgstr "realloc: 啟始和末尾區塊大小不一致" -#: lib/malloc/table.c:191 +#: lib/malloc/table.c:179 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "register_alloc: 分配表已經充滿了 FIND_ALLOC?\n" -#: lib/malloc/table.c:200 +#: lib/malloc/table.c:188 #, c-format msgid "register_alloc: %p already in table as allocated?\n" msgstr "register_alloc: %p 在表中顯示為已分配?\n" -#: lib/malloc/table.c:253 +#: lib/malloc/table.c:237 #, c-format msgid "register_free: %p already in table as free?\n" msgstr "register_free: %p 在表中顯示為已釋放?\n" -#: lib/sh/fmtulong.c:102 +#: lib/sh/fmtulong.c:90 msgid "invalid base" msgstr "無效的基底" -#: lib/sh/netopen.c:168 +#: lib/sh/netopen.c:161 #, c-format msgid "%s: host unknown" msgstr "%s:不明的主機" -#: lib/sh/netopen.c:175 +#: lib/sh/netopen.c:168 #, c-format msgid "%s: invalid service" msgstr "%s:無效服務" -#: lib/sh/netopen.c:306 +#: lib/sh/netopen.c:294 #, c-format msgid "%s: bad network path specification" msgstr "%s:不當的網路路徑規格" -#: lib/sh/netopen.c:347 +#: lib/sh/netopen.c:332 msgid "network operations not supported" msgstr "不支援網路操作" -#: locale.c:219 +#: locale.c:222 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" msgstr "setlocale: LC_ALL: 無法變更語區選項 (%s)" -#: locale.c:221 +#: locale.c:224 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s): %s" msgstr "setlocale: LC_ALL: 無法變更語區選項 (%s): %s" -#: locale.c:294 +#: locale.c:297 #, c-format msgid "setlocale: %s: cannot change locale (%s)" msgstr "setlocale: %s: 無法變更語區選項 (%s)" -#: locale.c:296 +#: locale.c:299 #, c-format msgid "setlocale: %s: cannot change locale (%s): %s" msgstr "setlocale: %s: 無法變更語區選項 (%s): %s" -#: mailcheck.c:439 +#: mailcheck.c:435 msgid "You have mail in $_" msgstr "您有郵件在 $_" -#: mailcheck.c:464 +#: mailcheck.c:460 msgid "You have new mail in $_" msgstr "您有新郵件在 $_" -#: mailcheck.c:480 +#: mailcheck.c:476 #, c-format msgid "The mail in %s has been read\n" msgstr "郵件在 %s 已閱讀\n" -#: make_cmd.c:314 +#: make_cmd.c:286 msgid "syntax error: arithmetic expression required" msgstr "語法錯誤:需要算式" -#: make_cmd.c:316 +#: make_cmd.c:288 msgid "syntax error: `;' unexpected" msgstr "語法錯誤:「;」意外" -#: make_cmd.c:317 +#: make_cmd.c:289 #, c-format msgid "syntax error: `((%s))'" msgstr "語法錯誤:「((%s))」" -#: make_cmd.c:569 +#: make_cmd.c:523 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document:不當的指示類型 %d" -#: make_cmd.c:668 +#: make_cmd.c:627 #, c-format msgid "here-document at line %d delimited by end-of-file (wanted `%s')" msgstr "立即檔案在第 %d 列被檔案結束符分隔 (需要「%s」)" -#: make_cmd.c:769 +#: make_cmd.c:722 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection:重新導向指示「%d」超出範圍" -#: parse.y:2428 +#: parse.y:2518 #, c-format -msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" +msgid "" +"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " +"truncated" msgstr "shell_getc: shell_input_line_size (%zu) 超過 SIZE_MAX (%lu):列被截斷" -#: parse.y:2921 +#: parse.y:2810 +#, fuzzy, c-format +msgid "script file read error: %s" +msgstr "寫入時發生錯誤:%s" + +#: parse.y:3046 msgid "maximum here-document count exceeded" msgstr "超過此處檔案上限最大值" -#: parse.y:3684 parse.y:4244 parse.y:6148 +#: parse.y:3831 parse.y:4727 parse.y:6767 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "尋找符合的「%c」時遇到了未預期的檔案結束符" -#: parse.y:4452 +#: parse.y:4934 msgid "unexpected EOF while looking for `]]'" msgstr "尋找「]]」時遇到了未預期的檔案結束符" -#: parse.y:4457 +#: parse.y:4939 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "條件表示式中有語法錯誤: 未預期的字組「%s」" -#: parse.y:4461 +#: parse.y:4943 msgid "syntax error in conditional expression" msgstr "語法錯誤,在有條件的表示式" -#: parse.y:4539 +#: parse.y:5021 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "未預期的字組「%s」,需要「)」" -#: parse.y:4543 +#: parse.y:5025 msgid "expected `)'" msgstr "預期「)」" -#: parse.y:4571 +#: parse.y:5053 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "一元條件運算子使用了未預期的參數「%s」" -#: parse.y:4575 +#: parse.y:5057 msgid "unexpected argument to conditional unary operator" msgstr "一元條件運算子使用了未預期的參數" -#: parse.y:4621 +#: parse.y:5104 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "未預期的字組「%s」,需要二元條件運算子" -#: parse.y:4625 +#: parse.y:5108 msgid "conditional binary operator expected" msgstr "需要二元條件運算子" -#: parse.y:4647 +#: parse.y:5135 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "二元條件運算子使用了未預期的參數「%s」" -#: parse.y:4651 +#: parse.y:5139 msgid "unexpected argument to conditional binary operator" msgstr "二元條件運算子使用了未預期的參數" -#: parse.y:4662 +#: parse.y:5150 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "條件指令中有未預期的字組「%c」" -#: parse.y:4665 +#: parse.y:5153 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "條件指令中有未預期的字組「%s」" -#: parse.y:4669 +#: parse.y:5157 #, c-format msgid "unexpected token %d in conditional command" msgstr "條件指令中有未預期的字組 %d" -#: parse.y:6118 +#: parse.y:6737 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "未預期的字組「%s」附近有語法錯誤" -#: parse.y:6137 +#: parse.y:6756 #, c-format msgid "syntax error near `%s'" msgstr "「%s」附近有語法錯誤" -#: parse.y:6151 +#: parse.y:6769 +#, fuzzy, c-format +msgid "syntax error: unexpected end of file from command on line %d" +msgstr "語法錯誤: 未預期的檔案結尾" + +#: parse.y:6772 msgid "syntax error: unexpected end of file" msgstr "語法錯誤: 未預期的檔案結尾" -#: parse.y:6151 +#: parse.y:6772 msgid "syntax error" msgstr "語法錯誤" -#: parse.y:6216 +#: parse.y:6821 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "使用「%s」結束 shell。\n" -#: parse.y:6394 +#: parse.y:7018 msgid "unexpected EOF while looking for matching `)'" msgstr "尋找符合的「)」時遇到了未預期的檔案結束符" -#: pcomplete.c:1132 +#: pcomplete.c:1070 #, c-format msgid "completion: function `%s' not found" msgstr "自動完成: 未找到函數「%s」" -#: pcomplete.c:1722 +#: pcomplete.c:1654 #, c-format msgid "programmable_completion: %s: possible retry loop" msgstr "programmable_completion:%s:可能重試迴圈" -#: pcomplib.c:182 +#: pcomplib.c:176 #, c-format msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: 空的自動完成規格" -#: print_cmd.c:302 +#: print_cmd.c:324 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: 錯誤的條件連接符「%d」" -#: print_cmd.c:375 +#: print_cmd.c:399 #, c-format msgid "xtrace_set: %d: invalid file descriptor" msgstr "xtrace_set: %d: 無效的檔案描述符" -#: print_cmd.c:380 +#: print_cmd.c:404 msgid "xtrace_set: NULL file pointer" msgstr "xtrace_set: 空的檔案指標" -#: print_cmd.c:384 +#: print_cmd.c:408 #, c-format msgid "xtrace fd (%d) != fileno xtrace fp (%d)" msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" -#: print_cmd.c:1545 +#: print_cmd.c:1576 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf:「%c」: 無效的格式字元" -#: redir.c:150 redir.c:198 +#: redir.c:145 redir.c:193 msgid "file descriptor out of range" msgstr "檔案描述符超出範圍" -#: redir.c:205 +#: redir.c:200 #, c-format msgid "%s: ambiguous redirect" msgstr "%s: 模稜兩可的重定向" -#: redir.c:209 +#: redir.c:204 #, c-format msgid "%s: cannot overwrite existing file" msgstr "%s: 無法覆寫已存在的檔案" -#: redir.c:214 +#: redir.c:209 #, c-format msgid "%s: restricted: cannot redirect output" msgstr "%s: 受限的: 無法重定向輸出" -#: redir.c:219 +#: redir.c:214 #, c-format msgid "cannot create temp file for here-document: %s" msgstr "無法為立即檔案建立暫存檔案: %s" -#: redir.c:223 +#: redir.c:218 #, c-format msgid "%s: cannot assign fd to variable" msgstr "%s: 無法將檔案描述符指派給變數" -#: redir.c:650 +#: redir.c:633 msgid "/dev/(tcp|udp)/host/port not supported without networking" msgstr "沒有網路時不支援 /dev/(tcp|udp)/host/port" -#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303 +#: redir.c:920 redir.c:1034 redir.c:1092 redir.c:1256 msgid "redirection error: cannot duplicate fd" msgstr "重定向錯誤: 無法複製檔案描述符" -#: shell.c:353 +#: shell.c:359 msgid "could not find /tmp, please create!" msgstr "無法找到 /tmp,請建立" -#: shell.c:357 +#: shell.c:363 msgid "/tmp must be a valid directory name" msgstr "/tmp 必須為有效的目錄名稱" -#: shell.c:826 +#: shell.c:825 msgid "pretty-printing mode ignored in interactive shells" msgstr "已在互動式 shell 中忽略美化輸出模式" -#: shell.c:972 +#: shell.c:967 #, c-format msgid "%c%c: invalid option" msgstr "%c%c:無效選項" -#: shell.c:1343 +#: shell.c:1355 #, c-format msgid "cannot set uid to %d: effective uid %d" msgstr "無法設定 UID 至 %d:有效的 UID %d" -#: shell.c:1354 +#: shell.c:1371 #, c-format msgid "cannot set gid to %d: effective gid %d" msgstr "無法設定 GID 至 %d:有效的 GID %d" -#: shell.c:1544 +#: shell.c:1560 msgid "cannot start debugger; debugging mode disabled" msgstr "無法開啟偵錯器;偵錯模式已停用" -#: shell.c:1658 +#: shell.c:1673 #, c-format msgid "%s: Is a directory" msgstr "%s: 是一個目錄" -#: shell.c:1907 +#: shell.c:1889 msgid "I have no name!" msgstr "我沒有名字!" -#: shell.c:2061 +#: shell.c:2053 #, c-format msgid "GNU bash, version %s-(%s)\n" msgstr "GNU bash,版本 %s-(%s)\n" -#: shell.c:2062 +#: shell.c:2054 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1733,49 +1795,49 @@ msgstr "" "用法:\t%s [GNU 長選項] [選項] …\n" "\t%s [GNU 長選項] [選項] 指令稿檔案 …\n" -#: shell.c:2064 +#: shell.c:2056 msgid "GNU long options:\n" msgstr "GNU 長選項:\n" -#: shell.c:2068 +#: shell.c:2060 msgid "Shell options:\n" msgstr "Shell 選項:\n" -#: shell.c:2069 +#: shell.c:2061 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD 或 -c <指令> 或 -O <shopt 選項>\t\t(僅適合呼叫)\n" -#: shell.c:2088 +#: shell.c:2080 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s or -o 選項\n" -#: shell.c:2094 +#: shell.c:2086 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "輸入「%s -c \"help set\"」更多關於 shell 選項的訊息。\n" -#: shell.c:2095 +#: shell.c:2087 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "輸入「%s -c help」更多關於內建 shell 指令的訊息。\n" -#: shell.c:2096 +#: shell.c:2088 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "使用「bashbug」指令通報程式錯誤。\n" -#: shell.c:2098 +#: shell.c:2090 #, c-format msgid "bash home page: <http://www.gnu.org/software/bash>\n" msgstr "bash 官網:<http://www.gnu.org/software/bash>\n" -#: shell.c:2099 +#: shell.c:2091 #, c-format msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "GNU 軟體的常見使用說明:<http://www.gnu.org/gethelp/>\n" -#: sig.c:765 +#: sig.c:808 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask:%d:無效操作" @@ -1945,282 +2007,302 @@ msgstr "資訊請求" msgid "Unknown Signal #%d" msgstr "不明訊號 #%d" -#: subst.c:1480 subst.c:1670 +#: subst.c:1501 subst.c:1793 subst.c:1999 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "錯誤的取代: 在 %2$s 中沒有閉合的「%1$s」" -#: subst.c:3307 +#: subst.c:3602 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: 無法將串列指派給陣列成員" -#: subst.c:6048 subst.c:6064 +#: subst.c:6420 subst.c:6436 msgid "cannot make pipe for process substitution" msgstr "無法為行程取代建立管道" -#: subst.c:6124 +#: subst.c:6496 msgid "cannot make child for process substitution" msgstr "無法為行程取代建立子行程" -#: subst.c:6198 +#: subst.c:6570 #, c-format msgid "cannot open named pipe %s for reading" msgstr "無法開啟命名管道 %s 進 readline-" -#: subst.c:6200 +#: subst.c:6572 #, c-format msgid "cannot open named pipe %s for writing" msgstr "無法開啟命名管道 %s 進行寫入" -#: subst.c:6223 +#: subst.c:6595 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "無法將命名管道 %s 做為檔案描述符 %d 複製" -#: subst.c:6370 +#: subst.c:6761 msgid "command substitution: ignored null byte in input" msgstr "指令取代:在輸入中忽略了空位元組" -#: subst.c:6533 +#: subst.c:6990 +msgid "function_substitute: cannot open anonymous file for output" +msgstr "" + +#: subst.c:7064 +#, fuzzy +msgid "function_substitute: cannot duplicate anonymous file as standard output" +msgstr "command_substitute: 無法將管道複製為檔案描述符 1" + +#: subst.c:7236 subst.c:7257 msgid "cannot make pipe for command substitution" msgstr "無法為指令取代建立管道" -#: subst.c:6580 +#: subst.c:7305 msgid "cannot make child for command substitution" msgstr "無法為指令取代建立子行程" -#: subst.c:6613 +#: subst.c:7338 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: 無法將管道複製為檔案描述符 1" -#: subst.c:7082 subst.c:10252 +#: subst.c:7820 subst.c:10996 #, c-format msgid "%s: invalid variable name for name reference" msgstr "%s: 無效的引用變數名" -#: subst.c:7178 subst.c:7196 subst.c:7369 +#: subst.c:7913 subst.c:7931 subst.c:8107 #, c-format msgid "%s: invalid indirect expansion" msgstr "%s: 無效的間接擴充" -#: subst.c:7212 subst.c:7377 +#: subst.c:7947 subst.c:8115 #, c-format msgid "%s: invalid variable name" msgstr "%s:無效的變數名稱" -#: subst.c:7478 +#: subst.c:8132 subst.c:10278 subst.c:10305 #, c-format -msgid "%s: parameter not set" -msgstr "%s:參數未設定" +msgid "%s: bad substitution" +msgstr "%s: 錯誤的取代" -#: subst.c:7480 +#: subst.c:8231 #, c-format -msgid "%s: parameter null or not set" -msgstr "%s: 參數為空或未設定" +msgid "%s: parameter not set" +msgstr "%s:參數未設定" -#: subst.c:7727 subst.c:7742 +#: subst.c:8487 subst.c:8502 #, c-format msgid "%s: substring expression < 0" msgstr "%s: 子串表示式 < 0" -#: subst.c:9560 subst.c:9587 -#, c-format -msgid "%s: bad substitution" -msgstr "%s: 錯誤的取代" - -#: subst.c:9678 +#: subst.c:10404 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: 無法如此指派" -#: subst.c:10111 -msgid "future versions of the shell will force evaluation as an arithmetic substitution" +#: subst.c:10862 +msgid "" +"future versions of the shell will force evaluation as an arithmetic " +"substitution" msgstr "未來版本的 shell 會強制以算術取代求值" -#: subst.c:10795 +#: subst.c:11542 #, c-format msgid "bad substitution: no closing \"`\" in %s" msgstr "錯誤的取代: 在 %s 中沒有閉合的「`」" -#: subst.c:11874 +#: subst.c:12615 #, c-format msgid "no match: %s" msgstr "無符合: %s" -#: test.c:147 +#: test.c:156 msgid "argument expected" msgstr "需要參數" -#: test.c:156 -#, c-format -msgid "%s: integer expression expected" +#: test.c:164 +#, fuzzy, c-format +msgid "%s: integer expected" msgstr "%s: 需要整數表示式" -#: test.c:265 +#: test.c:292 msgid "`)' expected" msgstr "需要「)」" -#: test.c:267 +#: test.c:294 #, c-format msgid "`)' expected, found %s" msgstr "需要「)」,得到 %s" -#: test.c:469 test.c:814 +#: test.c:488 test.c:831 #, c-format msgid "%s: binary operator expected" msgstr "%s: 需要二元表示式" -#: test.c:771 test.c:774 +#: test.c:792 test.c:795 #, c-format msgid "%s: unary operator expected" msgstr "%s: 需要一元表示式" -#: test.c:896 +#: test.c:926 msgid "missing `]'" msgstr "缺少「]」" -#: test.c:914 +#: test.c:944 #, c-format msgid "syntax error: `%s' unexpected" msgstr "語法錯誤:非預期的「%s」" -#: trap.c:220 +#: trap.c:225 msgid "invalid signal number" msgstr "無效訊號數字" -#: trap.c:323 +#: trap.c:358 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" msgstr "捕捉處理函式:達到最大捕捉處理函式等級 (%d)" -#: trap.c:412 +#: trap.c:450 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" msgstr "run_pending_traps: trap_list[%d] 中的錯誤值: %p" -#: trap.c:416 +#: trap.c:454 #, c-format -msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" msgstr "run_pending_traps:訊號處理是 SIG_DFL,resending %d (%s) to myself" -#: trap.c:509 +#: trap.c:582 #, c-format msgid "trap_handler: bad signal %d" msgstr "trap_handler:不當的訊號 %d" -#: variables.c:424 +#: variables.c:440 #, c-format msgid "error importing function definition for `%s'" msgstr "錯誤,輸入的函數定義為「%s」" -#: variables.c:838 +#: variables.c:863 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "shell 層次 (%d) 太高,重設為 1" -#: variables.c:2642 +#: variables.c:2190 variables.c:2219 variables.c:2277 variables.c:2296 +#: variables.c:2314 variables.c:2349 variables.c:2377 variables.c:2404 +#: variables.c:2430 variables.c:3273 variables.c:3281 variables.c:3793 +#: variables.c:3837 +#, fuzzy, c-format +msgid "%s: maximum nameref depth (%d) exceeded" +msgstr "超過此處檔案上限最大值" + +#: variables.c:2640 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: 目前作用域中沒有函數語境" -#: variables.c:2661 +#: variables.c:2659 #, c-format msgid "%s: variable may not be assigned value" msgstr "%s: 變數不可指派值" -#: variables.c:2818 variables.c:2874 +#: variables.c:2830 variables.c:2883 #, c-format msgid "%s: cannot inherit value from incompatible type" msgstr "%s:無法從不相容的類型繼承數值" -#: variables.c:3459 +#: variables.c:3436 #, c-format msgid "%s: assigning integer to name reference" msgstr "%s:指定數字至名稱參考" -#: variables.c:4390 +#: variables.c:4389 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: 目前作用域中沒有函數語境" -#: variables.c:4757 +#: variables.c:4793 #, c-format msgid "%s has null exportstr" msgstr "%s 有空的 exportstr" -#: variables.c:4762 variables.c:4771 +#: variables.c:4798 variables.c:4807 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "%2$s 的 exportstr 中有無效的字元 %1$d" -#: variables.c:4777 +#: variables.c:4813 #, c-format msgid "no `=' in exportstr for %s" msgstr "%s 的 exportstr 中沒有「=」" -#: variables.c:5317 +#: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: shell_variables 的前端不是函數語境" -#: variables.c:5330 +#: variables.c:5344 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: 沒有 global_variables 語境" -#: variables.c:5410 +#: variables.c:5434 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: shell_variables 的前端不是臨時環境作用域" -#: variables.c:6400 +#: variables.c:6404 #, c-format msgid "%s: %s: cannot open as FILE" msgstr "%s: %s: 無法做為檔案開啟" -#: variables.c:6405 +#: variables.c:6409 #, c-format msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: 追蹤檔案描述符的值無效" -#: variables.c:6450 +#: variables.c:6453 #, c-format msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: 相容版本數值超出範圍" -#: version.c:46 version2.c:46 -msgid "Copyright (C) 2022 Free Software Foundation, Inc." +#: version.c:46 +#, fuzzy +msgid "Copyright (C) 2024 Free Software Foundation, Inc." msgstr "著作權所有 (C) 2022 自由軟體基金會" -#: version.c:47 version2.c:47 -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:47 +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:86 +#: version.c:85 #, c-format msgid "GNU bash, version %s (%s)\n" msgstr "GNU bash,版本 %s (%s)\n" -#: version.c:91 version2.c:91 +#: version.c:90 msgid "This is free software; you are free to change and redistribute it." msgstr "本軟體是自由軟體,您可以自由地變更和重新發布。" -#: version.c:92 version2.c:92 +#: version.c:91 msgid "There is NO WARRANTY, to the extent permitted by law." msgstr "在法律許可的情況下特此明示,本軟體不提供任何擔保。" -#: xmalloc.c:93 +#: xmalloc.c:84 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: 無法分配 %lu 位元組 (已分配 %lu 位元組)" -#: xmalloc.c:95 +#: xmalloc.c:86 #, c-format msgid "%s: cannot allocate %lu bytes" msgstr "%s: 無法分配 %lu 位元組" -#: xmalloc.c:165 +#: xmalloc.c:164 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "%s: %s:%d: 無法分配 %lu 位元組 (已分配 %lu 位元組)" -#: xmalloc.c:167 +#: xmalloc.c:166 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: %s:%d: 無法分配 %lu 位元組" @@ -2234,8 +2316,12 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] 名稱 [名稱 …]" #: builtins.c:53 -msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpvsPSVX] [-m 按鍵映射] [-f 檔名] [-q 名稱] [-u 名稱] [-r 按鍵序列] [-x 按鍵序列:shell-指令] [按鍵序列:readline-函數 或 readline-指令]" +msgid "" +"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" +"x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "" +"bind [-lpvsPSVX] [-m 按鍵映射] [-f 檔名] [-q 名稱] [-u 名稱] [-r 按鍵序列] [-" +"x 按鍵序列:shell-指令] [按鍵序列:readline-函數 或 readline-指令]" #: builtins.c:56 msgid "break [n]" @@ -2254,7 +2340,8 @@ msgid "caller [expr]" msgstr "caller [表示式]" #: builtins.c:66 -msgid "cd [-L|[-P [-e]] [-@]] [dir]" +#, fuzzy +msgid "cd [-L|[-P [-e]]] [-@] [dir]" msgstr "cd [-L|[-P [-e]] [-@]] [目錄]" #: builtins.c:68 @@ -2266,12 +2353,20 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] 指令 [參數 …]" #: builtins.c:78 -msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [name[=value] ...] 或 declare -p [-aAfFilnrtux] [name ...]" +msgid "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"declare [-aAfFgiIlnrtux] [name[=value] ...] 或 declare -p [-aAfFilnrtux] " +"[name ...]" #: builtins.c:80 -msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] name[=value] ... 或 typeset -p [-aAfFilnrtux] [name ...]" +msgid "" +"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] " +"[name ...]" +msgstr "" +"typeset [-aAfFgiIlnrtux] name[=value] ... 或 typeset -p [-aAfFilnrtux] " +"[name ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2330,8 +2425,12 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [模式 …]" #: builtins.c:123 -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:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2342,16 +2441,25 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [jobspec ... | pid ...]" #: builtins.c:134 -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:136 msgid "let arg [arg ...]" msgstr "let 參數 [參數 …]" #: builtins.c:138 -msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a 陣列] [-d 分隔符] [-i 緩衝區文字] [-n 讀取字元數] [-N 讀取字元數] [-p 提示符] [-t 逾時] [-u 檔案描述符] [名稱 …]" +#, fuzzy +msgid "" +"read [-Eers] [-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:140 msgid "return [n]" @@ -2398,7 +2506,8 @@ msgid "[ arg... ]" msgstr "[ 參數… ]" #: builtins.c:166 -msgid "trap [-lp] [[arg] signal_spec ...]" +#, fuzzy +msgid "trap [-Plp] [[action] signal_spec ...]" msgstr "trap [-lp] [[參數] 訊號規格 …]" #: builtins.c:168 @@ -2422,106 +2531,131 @@ msgid "wait [pid ...]" msgstr "wait [行程識別碼 …]" #: builtins.c:184 +msgid "! PIPELINE" +msgstr "" + +#: builtins.c:186 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for 名稱 [in 字詞 … ] ; do 指令 ; done" -#: builtins.c:186 +#: builtins.c:188 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for (( 表示式1; 表示式2; 表示式3 )); do 指令 ; done" -#: builtins.c:188 +#: builtins.c:190 msgid "select NAME [in WORDS ... ;] do COMMANDS; done" msgstr "select NAME [in 字詞 … ;] do 指令 ; done" -#: builtins.c:190 +#: builtins.c:192 msgid "time [-p] pipeline" msgstr "time [-p] 管道" -#: builtins.c:192 +#: builtins.c:194 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case 詞 in [模式 [| 模式]…) 指令 ;;]… esac" -#: builtins.c:194 -msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" +#: builtins.c:196 +msgid "" +"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " +"COMMANDS; ] fi" msgstr "if 指令 ; then 指令 ; [ elif 指令 ; then 指令 ; ]… [ else 指令 ; ] fi" -#: builtins.c:196 +#: builtins.c:198 msgid "while COMMANDS; do COMMANDS-2; done" msgstr "while COMMANDS; do COMMANDS-2; done" -#: builtins.c:198 +#: builtins.c:200 msgid "until COMMANDS; do COMMANDS-2; done" msgstr "until COMMANDS; do COMMANDS-2; done" -#: builtins.c:200 +#: builtins.c:202 msgid "coproc [NAME] command [redirections]" msgstr "coproc [名稱] 指令 [重定向]" -#: builtins.c:202 +#: builtins.c:204 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function 名稱 { 指令 ; } 或 name () { 指令 ; }" -#: builtins.c:204 +#: builtins.c:206 msgid "{ COMMANDS ; }" msgstr "{ 指令 ; }" -#: builtins.c:206 +#: builtins.c:208 msgid "job_spec [&]" msgstr "job_spec [&]" -#: builtins.c:208 +#: builtins.c:210 msgid "(( expression ))" msgstr "(( 表示式 ))" -#: builtins.c:210 +#: builtins.c:212 msgid "[[ expression ]]" msgstr "[[ 表示式 ]]" -#: builtins.c:212 +#: builtins.c:214 msgid "variables - Names and meanings of some shell variables" msgstr "variables - 一些 shell 變數的名稱和含義" -#: builtins.c:215 +#: builtins.c:217 msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [-n] [+N | -N | 目錄]" -#: builtins.c:219 +#: builtins.c:221 msgid "popd [-n] [+N | -N]" msgstr "popd [-n] [+N | -N]" -#: builtins.c:223 +#: builtins.c:225 msgid "dirs [-clpv] [+N] [-N]" msgstr "dirs [-clpv] [+N] [-N]" -#: builtins.c:226 +#: builtins.c:228 msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o] [選項名 …]" -#: builtins.c:228 +#: builtins.c:230 msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] 格式 [參數]" -#: builtins.c:231 -msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" -msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o 選項] [-A 動作] [-G 全域模式] [-W 詞語列表] [-F 函數] [-C 指令] [-X 過濾模式] [-P 字首] [-S 字尾] [名稱 …]" +#: builtins.c:233 +msgid "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-" +"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " +"suffix] [name ...]" +msgstr "" +"complete [-abcdefgjksuv] [-pr] [-DEI] [-o 選項] [-A 動作] [-G 全域模式] [-W " +"詞語列表] [-F 函數] [-C 指令] [-X 過濾模式] [-P 字首] [-S 字尾] [名稱 …]" -#: builtins.c:235 -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 +#, fuzzy +msgid "" +"compgen [-V varname] [-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:239 +#: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o 選項] [-DEI] [名稱 …]" -#: builtins.c:242 -msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" - #: builtins.c:244 -msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" -msgstr "readarray [-d 分割符號] [-n 計數] [-O 起始序號] [-s 計數] [-t] [-u fd] [-C 回呼] [-c 定量] [陣列]" +msgid "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" + +#: builtins.c:246 +msgid "" +"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C " +"callback] [-c quantum] [array]" +msgstr "" +"readarray [-d 分割符號] [-n 計數] [-O 起始序號] [-s 計數] [-t] [-u fd] [-C 回" +"呼] [-c 定量] [陣列]" -#: builtins.c:256 +#: builtins.c:258 msgid "" "Define or display aliases.\n" " \n" @@ -2536,7 +2670,8 @@ 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" @@ -2555,7 +2690,7 @@ msgstr "" " 除非一個沒有定義的名字被做為參數提供,否則 alias \n" " 回傳值為真。" -#: builtins.c:278 +#: builtins.c:280 msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2571,7 +2706,7 @@ msgstr "" " \n" " 回傳成功,除非 <名稱> 不是一個已存在的別名。" -#: builtins.c:291 +#: builtins.c:293 msgid "" "Set Readline key bindings and variables.\n" " \n" @@ -2583,25 +2718,30 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" +"move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their values\n" -" -s List key sequences that invoke macros and their values\n" +" -S List key sequences that invoke macros and their " +"values\n" +" -s List key sequences that invoke macros and their " +"values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named function.\n" +" -u function-name Unbind all keys which are bound to the named " +"function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" " \t\t\t\tKEYSEQ is entered.\n" -" -X List key sequences bound with -x and associated commands\n" +" -X List key sequences bound with -x and associated " +"commands\n" " in a form that can be reused as input.\n" " \n" " Exit Status:\n" @@ -2616,26 +2756,29 @@ msgstr "" " \n" " 選項:\n" " -m 按鍵映射 在此指令執行過程中使用指定的按鍵映射。\n" -" 可被接受的按鍵映射名字有 emacs、emacs-standard、emacs-meta、\n" +" 可被接受的按鍵映射名字有 emacs、emacs-standard、emacs-" +"meta、\n" " emacs-ctlx、vi、vi-move、vi-command、和 vi-insert。\n" " -l 列出函數名稱。\n" " -P 列出函數名稱和綁定。\n" " -p 以可以重新用作輸入的格式列出函數名稱和綁定。\n" " -S 列出可以啟動巨集的按鍵序列以及它們的值\n" -" -s 以可以重新用作輸入的格式列出可以啟動巨集的鍵以及它們的值。\n" +" -s 以可以重新用作輸入的格式列出可以啟動巨集的鍵以及它們的" +"值。\n" " -V 列出變數名稱和它們的值\n" " -v 以可以重新用作輸入的格式列出變數的名稱和它們的值\n" " -q 函數名 查詢指定的函數可以由哪些鍵啟動。\n" " -u 函數名 反綁定所有綁定至指定函數的鍵。\n" " -r 按鍵序列 取消指定按鍵序列的綁定。\n" " -f 檔名 從指定檔案中讀取按鍵綁定。\n" -" -x 按鍵序列:shell 指令\t當指定的按鍵序列被輸入時,執行指定的 shell 指令。\n" +" -x 按鍵序列:shell 指令\t當指定的按鍵序列被輸入時,執行指定的 shell 指" +"令。\n" " -X 以可被重用的形式列出用 -x 綁定的按鍵序列和指令。\n" " \n" " 結束狀態:\n" " 除非使用了無法識別的選項或者錯誤發生,否則回傳 0。" -#: builtins.c:330 +#: builtins.c:332 msgid "" "Exit for, while, or until loops.\n" " \n" @@ -2653,7 +2796,7 @@ msgstr "" " 結束狀態:\n" " 結束狀態為 0 除非 N 不大於或等於 1。" -#: builtins.c:342 +#: builtins.c:344 msgid "" "Resume for, while, or until loops.\n" " \n" @@ -2671,13 +2814,14 @@ msgstr "" " 結束狀態:\n" " 結束狀態為 0 除非 N 不大於或等於 1。" -#: builtins.c:354 +#: builtins.c:356 msgid "" "Execute shell builtins.\n" " \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" @@ -2690,10 +2834,11 @@ msgstr "" " 但需要在函數之內執行該 shell 內建命令的情況下有用處。\n" " \n" " 結束狀態:\n" -" 以 <shell 內建命令> 的結束狀態為準,或者如果 <shell 內建命令> 不是一個 shell 內建命令時\n" +" 以 <shell 內建命令> 的結束狀態為準,或者如果 <shell 內建命令> 不是一個 " +"shell 內建命令時\n" " 回傳 false。" -#: builtins.c:369 +#: builtins.c:371 msgid "" "Return the context of the current subroutine call.\n" " \n" @@ -2721,20 +2866,27 @@ msgstr "" " 除非 shell 不在執行一個 shell 函數或者 EXPR 無效,否則回傳結\n" " 果為 0。" -#: builtins.c:387 +#: builtins.c:389 +#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of the\n" -" HOME shell variable.\n" +" Change the current directory to DIR. The default DIR is the value of " +"the\n" +" HOME shell variable. If DIR is \"-\", it is converted to $OLDPWD.\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" @@ -2750,11 +2902,13 @@ msgid "" " \t\tattributes as a directory containing the file attributes\n" " \n" " The default is to follow symbolic links, as if `-L' were specified.\n" -" `..' is processed by removing the immediately previous pathname component\n" +" `..' is processed by removing the immediately previous pathname " +"component\n" " back to a slash or the beginning of DIR.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully " +"when\n" " -P is used; non-zero otherwise." msgstr "" "變更 shell 工作目錄。\n" @@ -2762,18 +2916,24 @@ msgstr "" " 變更目前目錄至 <目錄>。預設的 <目錄> 是 shell 變數 HOME\n" " 的值。\n" " \n" -" 變數 CDPATH 定義了含有 <目錄> 的目錄搜尋路徑,其中不同的目錄名稱由冒號 (:) 分隔。\n" -" 一個空的目錄名稱表示目前目錄。如果要切換到的 <目錄> 由斜線 (/) 開頭,則 CDPATH\n" +" 變數 CDPATH 定義了含有 <目錄> 的目錄搜尋路徑,其中不同的目錄名稱由冒號 " +"(:) 分隔。\n" +" 一個空的目錄名稱表示目前目錄。如果要切換到的 <目錄> 由斜線 (/) 開頭,則 " +"CDPATH\n" " 變數不會被使用。\n" " \n" -" 如果路徑找不到,並且 shell 選項「cdable_vars」被設定,則參數詞被假定為一個\n" +" 如果路徑找不到,並且 shell 選項「cdable_vars」被設定,則參數詞被假定為一" +"個\n" " 變數名。如果該變數有值,則它的值被當做 <目錄>。\n" " \n" " 選項:\n" " -L\t強制跟隨符號連結: 在處理「..」之後解析 <目錄> 中的符號連結。\n" -" -P\t使用實體目錄結構而不跟隨符號連結: 在處理「..」之前解析 <目錄> 中的符號連結。\n" -" -e\t如果使用了 -P 參數,但不能成功確定目前工作目錄時,回傳非零的回傳值。\n" -" -@\t在支援擴充屬性的系統上,將一個有這些屬性的檔案當做有檔案屬性的目錄。\n" +" -P\t使用實體目錄結構而不跟隨符號連結: 在處理「..」之前解析 <目錄> 中" +"的符號連結。\n" +" -e\t如果使用了 -P 參數,但不能成功確定目前工作目錄時,回傳非零的回傳" +"值。\n" +" -@\t在支援擴充屬性的系統上,將一個有這些屬性的檔案當做有檔案屬性的目" +"錄。\n" " \n" " 預設情況下跟隨符號連結,如同指定「-L」。\n" " 「..」使用移除向前相鄰目錄名成員直到 <目錄> 開始或一個斜線的方式處理。\n" @@ -2781,7 +2941,7 @@ msgstr "" " 結束狀態:\n" " 如果目錄變更,或在使用 -P 選項時 $PWD 修改成功時回傳 0,否則非零。" -#: builtins.c:425 +#: builtins.c:427 msgid "" "Print the name of the current working directory.\n" " \n" @@ -2807,7 +2967,7 @@ msgstr "" " 結束狀態:\n" " 除非使用了無效選項或者目前目錄不可讀,否則回傳狀態為 0。" -#: builtins.c:442 +#: builtins.c:444 msgid "" "Null command.\n" " \n" @@ -2823,7 +2983,7 @@ msgstr "" " 結束狀態:\n" " 一律成功。" -#: builtins.c:453 +#: builtins.c:455 msgid "" "Return a successful result.\n" " \n" @@ -2835,7 +2995,7 @@ msgstr "" " 結束狀態:\n" " 一律成功。" -#: builtins.c:462 +#: builtins.c:464 msgid "" "Return an unsuccessful result.\n" " \n" @@ -2847,12 +3007,13 @@ msgstr "" " 結束狀態:\n" " 一律失敗。" -#: builtins.c:471 +#: builtins.c:473 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" @@ -2878,7 +3039,8 @@ msgstr "" " 結束狀態:\n" " 回傳 COMMAND 指令的回傳狀態,或者當找不到 COMMAND 指令時失敗。" -#: builtins.c:490 +#: builtins.c:492 +#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -2906,12 +3068,14 @@ msgid "" " -u\tto convert the value of each NAME to upper case on assignment\n" " -x\tto make NAMEs export\n" " \n" -" Using `+' instead of `-' turns off the given attribute.\n" +" Using `+' instead of `-' turns off the given attribute, except for a,\n" +" A, and r.\n" " \n" " 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" @@ -2952,7 +3116,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效選項,或者發生錯誤。" -#: builtins.c:532 +#: builtins.c:535 msgid "" "Set variable values and attributes.\n" " \n" @@ -2962,7 +3126,7 @@ msgstr "" " \n" " 功能相同於「declare」。參見「help declare」。" -#: builtins.c:540 +#: builtins.c:543 msgid "" "Define local variables.\n" " \n" @@ -2985,13 +3149,15 @@ msgstr "" " 部以及子函數中可見。\n" " \n" " 結束狀態:\n" -" 回傳成功,除非使用了無效的選項、發生了指派錯誤或者 shell 不在執行一個函數。" +" 回傳成功,除非使用了無效的選項、發生了指派錯誤或者 shell 不在執行一個函" +"數。" -#: builtins.c:557 +#: builtins.c:560 msgid "" "Write arguments to the standard output.\n" " \n" -" Display the ARGs, separated by a single space character and followed by a\n" +" Display the ARGs, separated by a single space character and followed by " +"a\n" " newline, on the standard output.\n" " \n" " Options:\n" @@ -3015,9 +3181,11 @@ msgid "" " \t\t0 to 3 octal digits\n" " \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n" " \t\tcan be one or two hex digits\n" -" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n" +" \\uHHHH\tthe Unicode character whose value is the hexadecimal value " +"HHHH.\n" " \t\tHHHH can be one to four hex digits.\n" -" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n" +" \\UHHHHHHHH the Unicode character whose value is the hexadecimal " +"value\n" " \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n" " \n" " Exit Status:\n" @@ -3043,8 +3211,10 @@ msgstr "" " \\t\t橫向製表符\n" " \\v\t縱向製表符\n" " \\\\\t反斜線\n" -" \\0nnn\t以 NNN (八進位)為 ASCII 碼的字元。 NNN 可以是 0 到 3 個八進位數字\n" -" \\xHH\t以 HH (十六進位)為值的八進位字元。HH 可以是一個或兩個十六進位數字\n" +" \\0nnn\t以 NNN (八進位)為 ASCII 碼的字元。 NNN 可以是 0 到 3 個八進位數" +"字\n" +" \\xHH\t以 HH (十六進位)為值的八進位字元。HH 可以是一個或兩個十六進位數" +"字\n" " \\uHHHH\t以十六進位 HHHH 為值的 Unicode 字元。\n" " \t\tHHHH 可為一個到四個十六進位數字。\n" " \\UHHHHHHHH 以十六進位 HHHHHHHH 為值的 Unicode 字元。\n" @@ -3053,7 +3223,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功除非有寫入錯誤發生。" -#: builtins.c:597 +#: builtins.c:600 msgid "" "Write arguments to the standard output.\n" " \n" @@ -3075,7 +3245,8 @@ msgstr "" " 結束狀態:\n" " 除非寫錯誤發生,否則回傳成功。" -#: builtins.c:612 +#: builtins.c:615 +#, fuzzy msgid "" "Enable and disable shell builtins.\n" " \n" @@ -3095,6 +3266,12 @@ msgid "" " \n" " Without options, each NAME is enabled.\n" " \n" +" On systems with dynamic loading, the shell variable BASH_LOADABLES_PATH\n" +" defines a search path for the directory containing FILENAMEs that do\n" +" not contain a slash. It may include \".\" to force a search of the " +"current\n" +" directory.\n" +" \n" " To use the `test' found in $PATH instead of the shell builtin\n" " version, type `enable -n test'.\n" " \n" @@ -3125,11 +3302,12 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非 <名稱> 不是一個 shell 內建命令或者有錯誤發生。" -#: builtins.c:640 +#: builtins.c:648 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" @@ -3143,7 +3321,7 @@ msgstr "" " 結束狀態:\n" " 以指令的狀態結束,或者在指令為空的情況下回傳成功。" -#: builtins.c:652 +#: builtins.c:660 msgid "" "Parse option arguments.\n" " \n" @@ -3217,12 +3395,13 @@ msgstr "" " 找到選項則回傳成功;如果選項提早結束,或者有錯誤發生,\n" " 則回傳失敗。" -#: builtins.c:694 +#: builtins.c:702 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" @@ -3230,11 +3409,13 @@ msgid "" " -c\texecute COMMAND with an empty environment\n" " -l\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, unless\n" +" If the command cannot be executed, a non-interactive shell exits, " +"unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error occurs." +" Returns success unless COMMAND is not found or a redirection error " +"occurs." msgstr "" "使用指定指令取代 shell。\n" " \n" @@ -3253,7 +3434,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功除非 COMMAND 指令沒有找到或者出現一個重定向錯誤。" -#: builtins.c:715 +#: builtins.c:723 msgid "" "Exit the shell.\n" " \n" @@ -3265,11 +3446,12 @@ msgstr "" " 以狀態 N 結束 shell。 如果 N 被省略,則結束狀態\n" " 為最後一個執行指令的結束狀態。" -#: builtins.c:724 +#: builtins.c:732 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" @@ -3277,17 +3459,20 @@ msgstr "" " 以狀態 N 結束一個登入 shell。如果不在登入 shell 中執行,則\n" " 回傳一個錯誤。" -#: builtins.c:734 +#: builtins.c:742 +#, fuzzy 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" @@ -3300,8 +3485,11 @@ msgid "" " runs the last command beginning with `cc' and typing `r' re-executes\n" " the last command.\n" " \n" +" The history builtin also operates on the history list.\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" @@ -3327,7 +3515,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,或者執行指令的狀態;如果錯誤發生則回傳非零。" -#: builtins.c:764 +#: builtins.c:774 msgid "" "Move job to the foreground.\n" " \n" @@ -3347,12 +3535,14 @@ msgstr "" " 結束狀態:\n" " 放至前臺的指令狀態,或者當錯誤發生時為失敗。" -#: builtins.c:779 +#: builtins.c:789 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" @@ -3367,12 +3557,13 @@ msgstr "" " 結束狀態:\n" " 回傳成功除非工作管理沒有啟用或者錯誤發生。" -#: builtins.c:793 +#: builtins.c:803 msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is displayed.\n" +" no arguments are given, information about remembered commands is " +"displayed.\n" " \n" " Options:\n" " -d\tforget the remembered location of each NAME\n" @@ -3403,13 +3594,14 @@ msgstr "" " \t\t<名稱>,則每個位置前面會加上相應的 <名稱> \n" " \t\t\n" " 參數:\n" -" <名稱>\t\t每個 <名稱> 會在 $PATH 路徑變數中被搜尋,並且新增到記住的指令\n" +" <名稱>\t\t每個 <名稱> 會在 $PATH 路徑變數中被搜尋,並且新增到記住的指" +"令\n" " 列表中。\n" " \n" " 結束狀態:\n" " 回傳成功,除非 <名稱> 指令沒有找到或者使用了無效的選項。" -#: builtins.c:818 +#: builtins.c:828 msgid "" "Display information about builtin commands.\n" " \n" @@ -3427,7 +3619,8 @@ msgid "" " PATTERN\tPattern specifying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is given." +" Returns success unless PATTERN is not found or an invalid option is " +"given." msgstr "" "顯示內建指令的相關資訊。\n" " \n" @@ -3447,7 +3640,8 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非 PATTERN 模式沒有找到或者使用了無效選項。" -#: builtins.c:842 +#: builtins.c:852 +#, fuzzy msgid "" "Display or manipulate the history list.\n" " \n" @@ -3471,11 +3665,16 @@ msgid "" " -s\tappend the ARGs to the history list as a single entry\n" " \n" " If FILENAME is given, it is used as the history file. Otherwise,\n" -" if HISTFILE has a value, that is used, else ~/.bash_history.\n" +" if HISTFILE has a value, that is used. If FILENAME is not supplied\n" +" and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n" +" no effect and return success.\n" +" \n" +" The fc builtin also operates on the history list.\n" " \n" " If the HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed otherwise.\n" +" 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." @@ -3492,7 +3691,8 @@ msgstr "" " \n" " -a\t將目前工作階段的歷史記錄列追加到歷史記錄檔案中\n" " -n\t從歷史記錄檔案中讀取所有未被讀取的列\n" -"\t\t並且將它們追加到歷史列表 -r\t讀取歷史記錄檔案並將內容追加到歷史記錄列表中\n" +"\t\t並且將它們追加到歷史列表 -r\t讀取歷史記錄檔案並將內容追加到歷史記錄" +"列表中\n" " -w\t將目前歷史記錄寫入到歷史記錄檔案中,並追加到歷史記錄列表中\n" " \n" " -p\t對每一個 <參數> 展開歷史記錄並顯示結果,而不儲存到歷史記錄列表中\n" @@ -3508,7 +3708,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者發生錯誤。" -#: builtins.c:879 +#: builtins.c:893 msgid "" "Display status of jobs.\n" " \n" @@ -3550,7 +3750,7 @@ msgstr "" " 回傳成功,除非使用了無效的選項或者有錯誤發生。\n" " 如果使用 -x 選項,則回傳 COMMAND 指令的結束狀態。" -#: builtins.c:906 +#: builtins.c:920 msgid "" "Remove jobs from current shell.\n" " \n" @@ -3580,7 +3780,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功除非使用了無效的選項或者 JOBSPEC 規格。" -#: builtins.c:925 +#: builtins.c:939 msgid "" "Send a signal to a job.\n" " \n" @@ -3614,20 +3814,22 @@ msgstr "" " -l\t列出訊號名稱;如果參數後跟「-l」則被假設為訊號編號,\n" " \t而相應的訊號名稱會被列出\n" " \n" -" Kill 成為 shell 內建命令有兩個理由:它允許使用工作編號而不是行程識別碼,\n" +" Kill 成為 shell 內建命令有兩個理由:它允許使用工作編號而不是行程識別" +"碼,\n" " 並且在可以建立的行程數上限達到時允許行程被砍除。\n" " \n" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者有錯誤發生。" -#: builtins.c:949 +#: builtins.c:963 msgid "" "Evaluate arithmetic expressions.\n" " \n" " 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" @@ -3695,24 +3897,30 @@ msgstr "" " Shell 變數允許做為運算元。表示式中的變數名稱會以值取代\n" " (強制轉換為定寬的整數)。表示式中的變數不需要開啟整數屬性。\n" " \n" -" 運算子按照優先順序進行求值。括號中的子表示式將被先求值,並可取代上述表示式規則。\n" +" 運算子按照優先順序進行求值。括號中的子表示式將被先求值,並可取代上述表示" +"式規則。\n" " \n" " 結束狀態:\n" " 如果最後一個 <參數> 求值為 0,則 let 回傳 1;否則 let 回傳 0。" -#: builtins.c:994 +#: builtins.c:1008 +#, fuzzy 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" -" delimiters. By default, the backslash character escapes delimiter characters\n" +" the last NAME. Only the characters found in $IFS are recognized as " +"word\n" +" delimiters. By default, the backslash character escapes delimiter " +"characters\n" " and newline.\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" @@ -3720,11 +3928,14 @@ msgid "" " -d delim\tcontinue until the first character of DELIM is read, rather\n" " \t\tthan newline\n" " -e\tuse Readline to obtain the line\n" +" -E\tuse Readline to obtain the line and use the bash default\n" +" \t\tcompletion instead of Readline's default completion\n" " -i text\tuse TEXT as the initial text for Readline\n" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than\n" " \t\tNCHARS characters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, " +"unless\n" " \t\tEOF is encountered or read times out, ignoring any\n" " \t\tdelimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" @@ -3742,16 +3953,22 @@ msgid "" " -u fd\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times out\n" -" (in which case it's greater than 128), a variable assignment error occurs,\n" +" The return code is zero, unless end-of-file is encountered, read times " +"out\n" +" (in which case it's greater than 128), a variable assignment error " +"occurs,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "從標準輸入讀取一列,並將其分為不同的區域。\n" " \n" -" 從標準輸入讀取單獨的一列,或者如果使用了 -u 選項,從檔案描述元 FD 中讀取。\n" -" 該列會分割成區域,如同字詞分割一樣,並且第一個字詞被指派給第一個 NAME 變數,第二\n" -" 個字詞被指派給第二個 NAME 變數,如此繼續,直到剩下所有的字詞被指派給最後一個 <名稱>\n" -" 變數。只有 $IFS 變數中的字元被認做是字詞分隔符。預設情況下,反斜線字元會跳脫分割字元和換行。\n" +" 從標準輸入讀取單獨的一列,或者如果使用了 -u 選項,從檔案描述元 FD 中讀" +"取。\n" +" 該列會分割成區域,如同字詞分割一樣,並且第一個字詞被指派給第一個 NAME 變" +"數,第二\n" +" 個字詞被指派給第二個 NAME 變數,如此繼續,直到剩下所有的字詞被指派給最後" +"一個 <名稱>\n" +" 變數。只有 $IFS 變數中的字元被認做是字詞分隔符。預設情況下,反斜線字元會" +"跳脫分割字元和換行。\n" " \n" " 如果沒有提供 NAME 變數,則讀取的列會存放在 REPLY 變數中。\n" " \n" @@ -3762,13 +3979,15 @@ msgstr "" " -i text\t使用 TEXT 文字做為 Readline 的初始文字\n" " -n nchars\t讀取 NCHARS 個字元之後回傳,而不是等到讀取換列符。\n" " \t\t但如果遇到分隔符之前讀取了不足 NCHARS 個字元,分隔符仍然有效。\n" -" -N nchars\t在準確讀取了 NCHARS 個字元之後回傳,除非遇到檔案結束符或者讀取逾時,\n" +" -N nchars\t在準確讀取了 NCHARS 個字元之後回傳,除非遇到檔案結束符或者讀" +"取逾時,\n" " \t\t任何的分隔符都被忽略\n" " -p prompt\t在嘗試讀取之前輸出 PROMPT 提示符並且不帶\n" " \t\t換列符\n" " -r\t不允許反斜線逸出任何字元\n" " -s\t不顯示終端的任何輸入\n" -" -t timeout\t如果在 TIMEOUT 秒內沒有讀取一個完整的列則逾時並且回傳失敗。\n" +" -t timeout\t如果在 TIMEOUT 秒內沒有讀取一個完整的列則逾時並且回傳失" +"敗。\n" " \t\tTMOUT 變數的值是預設逾時時間。\n" " \t\tTIMEOUT 可以是小數。如果 TIMEOUT 是 0,則立即回傳而不嘗試\n" " \t\t讀取任何資料,如果指定的檔案描述符有輸入,則回傳成功\n" @@ -3779,7 +3998,7 @@ msgstr "" " 回傳碼為 0,除非遇到了檔案結束符、讀取逾時,或將無效的檔案\n" " 描述符,作為參數傳向 -u 選項。" -#: builtins.c:1042 +#: builtins.c:1058 msgid "" "Return from a shell function.\n" " \n" @@ -3799,7 +4018,8 @@ msgstr "" " 結束狀態:\n" " 回傳 N,或者如果 shell 不在執行一個函數或引用指令稿時,失敗。" -#: builtins.c:1055 +#: builtins.c:1071 +#, fuzzy msgid "" "Set or unset values of shell options and positional parameters.\n" " \n" @@ -3842,7 +4062,8 @@ 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" @@ -3866,13 +4087,18 @@ msgid "" " by default when the shell is interactive.\n" " -P If set, do not resolve symbolic links when executing commands\n" " such as cd which change the current directory.\n" -" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n" +" -T If set, the DEBUG and RETURN traps are inherited by shell " +"functions.\n" " -- Assign any remaining arguments to the positional parameters.\n" " If there are no remaining arguments, the positional parameters\n" " are unset.\n" " - Assign any remaining arguments to the positional parameters.\n" " The -x and -v options are turned off.\n" " \n" +" If -o is supplied with no option-name, set prints the current shell\n" +" option settings. If +o is supplied with no option-name, set prints a\n" +" series of set commands to recreate the current option settings.\n" +" \n" " Using + rather than - causes these flags to be turned off. The\n" " flags can also be used upon invocation of the shell. The current\n" " set of flags may be found in $-. The remaining n ARGs are positional\n" @@ -3958,7 +4184,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功除非使用了無效的參數。" -#: builtins.c:1140 +#: builtins.c:1160 msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -3970,7 +4196,8 @@ msgid "" " -n\ttreat each NAME as a name reference and unset the variable itself\n" " \t\trather than the variable it references\n" " \n" -" Without options, unset first tries to unset a variable, and if that fails,\n" +" Without options, unset first tries to unset a variable, and if that " +"fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -3987,19 +4214,21 @@ msgstr "" " -v\t將每個 <名稱> 視為變數\n" " -n\t將每個 <名稱> 視為名稱引用,只取消其本身而非其指向的變數\n" " \n" -" 不帶選項時,unset 首先嘗試取消設定一個變數,如果失敗,再嘗試取消設定一個函數。\n" +" 不帶選項時,unset 首先嘗試取消設定一個變數,如果失敗,再嘗試取消設定一個" +"函數。\n" " \n" " 某些變數不可以被取消設定;參見「readonly」。\n" " \n" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者 NAME 名稱為唯讀。" -#: builtins.c:1162 +#: builtins.c:1182 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" @@ -4026,7 +4255,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者 <名稱>。" -#: builtins.c:1181 +#: builtins.c:1201 msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4062,7 +4291,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者 <名稱>。" -#: builtins.c:1203 +#: builtins.c:1223 msgid "" "Shift positional parameters.\n" " \n" @@ -4080,7 +4309,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非 N 為負或者大於 $#。" -#: builtins.c:1215 builtins.c:1230 +#: builtins.c:1235 builtins.c:1250 msgid "" "Execute commands from a file in the current shell.\n" " \n" @@ -4102,15 +4331,18 @@ msgstr "" " 結束狀態:\n" " 回傳 <檔名> 檔案中最後一個指令的狀態;如果 <檔名> 檔案不可讀則失敗。" -#: builtins.c:1246 +#: builtins.c:1266 +#, fuzzy msgid "" "Suspend shell execution.\n" " \n" " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -" Unless forced, login shells cannot be suspended.\n" +" Unless forced, login shells and shells without job control cannot be\n" +" suspended.\n" " \n" " Options:\n" -" -f\tforce the suspend, even if the shell is a login shell\n" +" -f\tforce the suspend, even if the shell is a login shell or job\n" +" \t\tcontrol is not enabled.\n" " \n" " Exit Status:\n" " Returns success unless job control is not enabled or an error occurs." @@ -4126,7 +4358,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非沒有啟用工作控制或者有錯誤發生。" -#: builtins.c:1262 +#: builtins.c:1284 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4160,7 +4392,8 @@ 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" @@ -4181,7 +4414,8 @@ 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" @@ -4278,7 +4512,7 @@ msgstr "" " 如果 EXPR 表示式求值為真則回傳成功;如果 EXPR 表示式求值\n" " 為假或者使用了無效的參數則回傳失敗。" -#: builtins.c:1344 +#: builtins.c:1366 msgid "" "Evaluate conditional expression.\n" " \n" @@ -4290,11 +4524,12 @@ msgstr "" " 是內建指令「test」的同義詞,但是最後一個參數必須是\n" " 字元「]」,以符合起始的「[」。" -#: builtins.c:1353 +#: builtins.c:1375 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" @@ -4308,39 +4543,54 @@ msgstr "" " 結束狀態:\n" " 一律成功。" -#: builtins.c:1365 +#: builtins.c:1387 +#, fuzzy 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" -" signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC\n" +" ACTION is a command to be read and executed when the shell receives the\n" +" signal(s) SIGNAL_SPEC. If ACTION is absent (and a single SIGNAL_SPEC\n" " is supplied) or `-', each specified signal is reset to its original\n" -" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" +" value. If ACTION 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" -" shell to exit when the -e option is enabled.\n" -" \n" -" If no arguments are supplied, trap prints the list of commands associated\n" -" with each signal.\n" +" If a SIGNAL_SPEC is EXIT (0) ACTION is executed on exit from the shell.\n" +" If a SIGNAL_SPEC is DEBUG, ACTION is executed before every simple " +"command\n" +" and selected other commands. If a SIGNAL_SPEC is RETURN, ACTION is\n" +" executed each time a shell function or a script run by the . or source\n" +" builtins finishes executing. A SIGNAL_SPEC of ERR means to execute " +"ACTION\n" +" each time a command's failure would cause the shell to exit when the -e\n" +" option is enabled.\n" +" \n" +" If no arguments are supplied, trap prints the list of commands " +"associated\n" +" with each trapped signal in a form that may be reused as shell input to\n" +" restore the same signal dispositions.\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" +" -p\tdisplay the trap commands associated with each SIGNAL_SPEC in a\n" +" \t\tform that may be reused as shell input; or for all trapped\n" +" \t\tsignals if no arguments are supplied\n" +" -P\tdisplay the trap commands associated with each SIGNAL_SPEC. At " +"least\n" +" \t\tone SIGNAL_SPEC must be supplied. -P and -p cannot be used\n" +" \t\ttogether.\n" +" \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" @@ -4349,7 +4599,8 @@ msgstr "" " <參數> 是當 shell 接收到 SIGNAL_SPEC 訊號時讀取和執行的指令。\n" " 如果沒有指定 <參數> (並且只給出一個 SIGNAL_SPEC 訊號) 或者\n" " <參數> 為\n" -" 「-」,每一個指定的參數會被重設為原始值。如果 <參數> 是一個空串,則每一個\n" +" 「-」,每一個指定的參數會被重設為原始值。如果 <參數> 是一個空串,則每一" +"個\n" " SIGNAL_SPEC 訊號會被 shell 和它啟動的指令忽略。\n" " \n" " 如果一個 SIGNAL_SPEC 訊號是 EXIT (0),則 <參數> 指令會在 shell 結束時被\n" @@ -4369,7 +4620,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者 SIGSPEC。" -#: builtins.c:1401 +#: builtins.c:1430 msgid "" "Display information about command type.\n" " \n" @@ -4395,7 +4646,8 @@ 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" @@ -4419,11 +4671,13 @@ msgstr "" " 結束狀態:\n" " 若找到所有的 NAME,則回傳成功;有任何一個沒找到,則回傳失敗。" -#: builtins.c:1432 +#: builtins.c:1461 +#, fuzzy msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and processes\n" +" Provides control over the resources available to the shell and " +"processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4460,9 +4714,10 @@ msgid "" " Otherwise, the current value of the specified resource is printed. If\n" " no option is given, then -f is assumed.\n" " \n" -" Values are in 1024-byte increments, except for -t, which is in seconds,\n" -" -p, which is in increments of 512 bytes, and -u, which is an unscaled\n" -" number of processes.\n" +" Values are in 1024-byte increments, except for -t, which is in seconds;\n" +" -p, which is in increments of 512 bytes; -R, which is in microseconds;\n" +" -b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,\n" +" which accept unscaled values.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -4510,7 +4765,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者錯誤發生。" -#: builtins.c:1483 +#: builtins.c:1513 msgid "" "Display or set file mode mask.\n" " \n" @@ -4542,23 +4797,27 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的 MODE 模式或者選項。" -#: builtins.c:1503 +#: builtins.c:1533 msgid "" "Wait for job completion and return exit status.\n" " \n" -" Waits for each process identified by an ID, which may be a process ID or a\n" +" Waits for each process identified by an ID, which may be a process ID or " +"a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" " status is zero. If ID is a job specification, waits for all processes\n" " in that job's pipeline.\n" " \n" -" If the -n option is supplied, waits for a single job from the list of IDs,\n" -" or, if no IDs are supplied, for the next job to complete and returns its\n" +" If the -n option is supplied, waits for a single job from the list of " +"IDs,\n" +" or, if no IDs are supplied, for the next job to complete and returns " +"its\n" " exit status.\n" " \n" " If the -p option is supplied, the process or job identifier of the job\n" " for which the exit status is returned is assigned to the variable VAR\n" -" named by the option argument. The variable will be unset initially, before\n" +" named by the option argument. The variable will be unset initially, " +"before\n" " any assignment. This is useful only when the -n option is supplied.\n" " \n" " If the -f option is supplied, and job control is enabled, waits for the\n" @@ -4591,16 +4850,18 @@ msgstr "" " 或有指定 -n,shell 卻沒有要不等待 (unwaited) 的子行程,\n" " 則回傳失敗。" -#: builtins.c:1534 +#: builtins.c:1564 msgid "" "Wait for process completion and return exit status.\n" " \n" -" Waits for each process specified by a PID and reports its termination status.\n" +" Waits for each process specified by a PID and reports its termination " +"status.\n" " If PID is not given, waits for all currently active child processes,\n" " and the return status is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of the last PID; fails if PID is invalid or an invalid\n" +" Returns the status of the last PID; fails if PID is invalid or an " +"invalid\n" " option is given." msgstr "" "等待行程完成並且回傳結束狀態。\n" @@ -4609,9 +4870,19 @@ msgstr "" " 子行程都會被等待,並且回傳碼為零。PID 必須為行程識別碼。\n" " \n" " 結束狀態:\n" -" 回傳行程 ID 的狀態;如果 PID 是無效的行程識別碼或者指定了無效的選項則失敗。" +" 回傳行程 ID 的狀態;如果 PID 是無效的行程識別碼或者指定了無效的選項則失" +"敗。" -#: builtins.c:1549 +#: builtins.c:1579 +msgid "" +"Execute PIPELINE, which can be a simple command, and negate PIPELINE's\n" +" return status.\n" +" \n" +" Exit Status:\n" +" The logical negation of PIPELINE's return status." +msgstr "" + +#: builtins.c:1589 msgid "" "Execute commands for each member in a list.\n" " \n" @@ -4632,7 +4903,7 @@ msgstr "" " 結束狀態:\n" " 回傳最後執行指令的狀態。" -#: builtins.c:1563 +#: builtins.c:1603 msgid "" "Arithmetic for loop.\n" " \n" @@ -4662,7 +4933,7 @@ msgstr "" " 結束狀態:\n" " 回傳最後執行指令的狀態。" -#: builtins.c:1581 +#: builtins.c:1621 msgid "" "Select words from a list and execute commands.\n" " \n" @@ -4695,7 +4966,7 @@ msgstr "" " 結束狀態:\n" " 回傳最後一個執行指令的狀態。" -#: builtins.c:1602 +#: builtins.c:1642 msgid "" "Report time consumed by pipeline's execution.\n" " \n" @@ -4723,7 +4994,7 @@ msgstr "" " 結束狀態:\n" " 回傳狀態即 PIPELINE 的回傳狀態。" -#: builtins.c:1619 +#: builtins.c:1659 msgid "" "Execute commands based on pattern matching.\n" " \n" @@ -4741,16 +5012,21 @@ msgstr "" " 結束狀態:\n" " 回傳最後一個執行指令的狀態。" -#: builtins.c:1631 +#: builtins.c:1671 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" @@ -4767,11 +5043,12 @@ msgstr "" " 結束狀態:\n" " 回傳最後一個執行指令的狀態。" -#: builtins.c:1648 +#: builtins.c:1688 msgid "" "Execute commands as long as a test succeeds.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status of zero.\n" " \n" " Exit Status:\n" @@ -4785,11 +5062,12 @@ msgstr "" " 結束狀態:\n" " 回傳最後一個執行指令的狀態。" -#: builtins.c:1660 +#: builtins.c:1700 msgid "" "Execute commands as long as a test does not succeed.\n" " \n" -" Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n" +" Expand and execute COMMANDS-2 as long as the final command in COMMANDS " +"has\n" " an exit status which is not zero.\n" " \n" " Exit Status:\n" @@ -4803,7 +5081,7 @@ msgstr "" " 結束狀態:\n" " 回傳最後一個執行指令的狀態。" -#: builtins.c:1672 +#: builtins.c:1712 msgid "" "Create a coprocess named NAME.\n" " \n" @@ -4825,12 +5103,13 @@ msgstr "" " 結束狀態:\n" " coprc 指令回傳離開代碼 0。" -#: builtins.c:1686 +#: builtins.c:1726 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" @@ -4847,7 +5126,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功除非 <名稱> 為唯讀。" -#: builtins.c:1700 +#: builtins.c:1740 msgid "" "Group commands as a unit.\n" " \n" @@ -4865,7 +5144,7 @@ msgstr "" " 結束狀態:\n" " 回傳最後一個執行指令的狀態。" -#: builtins.c:1712 +#: builtins.c:1752 msgid "" "Resume job in foreground.\n" " \n" @@ -4889,7 +5168,7 @@ msgstr "" " 結束狀態:\n" " 回傳被繼續的工作狀態。" -#: builtins.c:1727 +#: builtins.c:1767 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4907,13 +5186,16 @@ msgstr "" " 結束狀態:\n" " 如果表示式求值為 0 則回傳 1;否則回傳 0。" -#: builtins.c:1739 +#: builtins.c:1779 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" @@ -4939,7 +5221,8 @@ msgstr "" " ( 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" @@ -4951,7 +5234,7 @@ msgstr "" " 結束狀態:\n" " 根據 EXPRESSION 的值為 0 或 1。" -#: builtins.c:1765 +#: builtins.c:1805 msgid "" "Common shell variable names and usage.\n" " \n" @@ -5046,7 +5329,7 @@ msgstr "" " HISTIGNORE\t用於決定哪些指令被存入歷史記錄檔案的模式\n" " \t\t列表,以冒號分隔。\n" -#: builtins.c:1822 +#: builtins.c:1862 msgid "" "Add directories to stack.\n" " \n" @@ -5097,7 +5380,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的參數或者目錄變換失敗。" -#: builtins.c:1856 +#: builtins.c:1896 msgid "" "Remove directories from stack.\n" " \n" @@ -5144,7 +5427,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的參數或者目錄變換失敗。" -#: builtins.c:1886 +#: builtins.c:1926 msgid "" "Display directory stack.\n" " \n" @@ -5193,7 +5476,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者發生錯誤。" -#: builtins.c:1917 +#: builtins.c:1957 msgid "" "Set and unset shell options.\n" " \n" @@ -5229,7 +5512,8 @@ msgstr "" " 如果 <選項名稱> 選項被啟用則回傳成功;如果是\n" " 無效的選項或 <選項名稱> 被停用則失敗。" -#: builtins.c:1938 +#: builtins.c:1978 +#, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" " \n" @@ -5237,29 +5521,36 @@ 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" -" printf interprets:\n" +" In addition to the standard format characters csndiouxXeEfFgGaA " +"described\n" +" in 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" " %Q\tlike %q, but apply any precision to the unquoted argument before\n" " \t\tquoting\n" -" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n" +" %(fmt)T\toutput the date-time string resulting from using FMT as a " +"format\n" " \t string for strftime(3)\n" " \n" " The format is re-used as necessary to consume all of the arguments. If\n" " there are fewer arguments than the format requires, extra format\n" -" specifications behave as if a zero value or null string, as appropriate,\n" +" specifications behave as if a zero value or null string, as " +"appropriate,\n" " had been supplied.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or assignment\n" +" Returns success unless an invalid option is given or a write or " +"assignment\n" " error occurs." msgstr "" "在 FORMAT 的控制下格式化並印出 ARGUMENTS。\n" @@ -5268,7 +5559,8 @@ msgstr "" " -v var\t將輸出指派給 shell 變數 VAR 而非顯示在標準輸出上\n" " \n" " FORMAT 是包含三種物件的字元:簡單複製到標準輸出的純字元;\n" -" 變換後複製到標準輸入的跳脫字元;以及每個都會影響到下個引數的格式化規格。\n" +" 變換後複製到標準輸入的跳脫字元;以及每個都會影響到下個引數的格式化規" +"格。\n" " \n" " 除了 printf(1) 中描述的標準格式化規格,printf 還會解析:\n" " \n" @@ -5277,19 +5569,23 @@ msgstr "" " %Q\t類似 %q,但精度要求會在加引號之前,對未括住的引數生效\n" " %(fmt)T\t將 FMT 用來當作 strftime(3) 的格式,輸出日期與時間字串\n" " \n" -" 必要時會重用格式以消耗掉所有引數。如果引數少於格式所需,其他的格式規範則會\n" +" 必要時會重用格式以消耗掉所有引數。如果引數少於格式所需,其他的格式規範則" +"會\n" " 視為 0 值或空字串(視情況而定)套用。\n" " \n" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者發生寫入或指派錯誤。" -#: builtins.c:1974 +#: builtins.c:2014 +#, fuzzy msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no options\n" -" are supplied, existing completion specifications are printed in a way that\n" -" allows them to be reused as input.\n" +" For each NAME, specify how arguments are to be completed. If no " +"options\n" +" or NAMEs are supplied, display existing completion specifications in a " +"way\n" +" that allows them to be reused as input.\n" " \n" " Options:\n" " -p\tprint existing completion specifications in a reusable format\n" @@ -5303,8 +5599,10 @@ msgid "" " \t\tcommand) word\n" " \n" " When completion is attempted, the actions are applied in the order the\n" -" uppercase-letter options are listed above. If multiple options are supplied,\n" -" the -D option takes precedence over -E, and both take precedence over -I.\n" +" uppercase-letter options are listed above. If multiple options are " +"supplied,\n" +" the -D option takes precedence over -E, and both take precedence over -" +"I.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5322,19 +5620,26 @@ msgstr "" " -E\t對於「empty」指令——嘗試對空白列進行自動完成——套用自動完成和動作。\n" " -I\t套用自動完成和動作到首個(通常是命令)單字\n" " \n" -" 發起自動完成嘗試時,將依上述大寫字母選項的順序進行動作。若傳入了多個選項,\n" +" 發起自動完成嘗試時,將依上述大寫字母選項的順序進行動作。若傳入了多個選" +"項,\n" " -D 選項優先於 -E 選項,而兩者優先於 -I 選項。\n" " \n" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者錯誤發生。" -#: builtins.c:2004 +#: builtins.c:2044 +#, fuzzy 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" -" WORD are generated.\n" +" completions. If the optional WORD argument is present, generate " +"matches\n" +" against WORD.\n" +" \n" +" If the -V option is supplied, store the possible completions in the " +"indexed\n" +" array VARNAME instead of printing them to the standard output.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is supplied or an error occurs." @@ -5348,13 +5653,16 @@ msgstr "" " 結束狀態:\n" " 除非使用了無效選項或者錯誤發生,否則回傳成功。" -#: builtins.c:2019 +#: builtins.c:2062 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" @@ -5378,7 +5686,8 @@ msgid "" msgstr "" "修改或顯示自動完成選項。\n" " \n" -" 修改每個 <名稱> 的自動完成選項,或如果沒有提供 <名稱>,執行目前的自動完成。\n" +" 修改每個 <名稱> 的自動完成選項,或如果沒有提供 <名稱>,執行目前的自動完" +"成。\n" " 如果不帶選項,印出每個 <名稱> 的自動完成選項或目前的自動完成規格。\n" " \n" " 選項:\n" @@ -5398,21 +5707,26 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項或者 <名稱> 沒有定義自動完成規格。" -#: builtins.c:2050 +#: builtins.c:2093 msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" +" Read lines from the standard input into the indexed array variable " +"ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable " +"MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" " -d delim\tUse DELIM to terminate lines, instead of newline\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " +"copied\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " +"index is 0\n" " -s count\tDiscard the first COUNT lines read\n" " -t\tRemove a trailing DELIM from each line read (default newline)\n" -" -u fd\tRead lines from file descriptor FD instead of the standard input\n" +" -u fd\tRead lines from file descriptor FD instead of the standard " +"input\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n" " -c quantum\tSpecify the number of lines read between each call to\n" " \t\t\tCALLBACK\n" @@ -5425,11 +5739,13 @@ 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" @@ -5458,7 +5774,7 @@ msgstr "" " 結束狀態:\n" " 回傳成功,除非使用了無效的選項,或者 ARRAY 變數唯讀或不是索引陣列。" -#: builtins.c:2086 +#: builtins.c:2129 msgid "" "Read lines from a file into an array variable.\n" " \n" @@ -5468,6 +5784,31 @@ msgstr "" " \n" " 一個「mapfile」的同義詞。" +#~ msgid "" +#~ "Returns the context of the current subroutine call.\n" +#~ " \n" +#~ " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" +#~ " \"$line $subroutine $filename\"; 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" +#~ " current one; the top frame is frame 0." +#~ msgstr "" +#~ "回傳目前子呼叫的語境。\n" +#~ " \n" +#~ " 不帶有 EXPR 時,回傳「$line $filename」。帶有 EXPR 時,回傳\n" +#~ " 「$line $subroutine $filename」;提供堆疊追蹤時可以用到這個\n" +#~ " 延伸資訊。\n" +#~ " \n" +#~ " EXPR 的值顯示了到目前呼叫框格需要回去多少個呼叫框格;頂部框格\n" +#~ " 是第 0 框格。" + +#, c-format +#~ msgid "warning: %s: %s" +#~ msgstr "警告: %s: %s" + #~ msgid "%s: invalid associative array key" #~ msgstr "%s: 無效的關聯陣列鍵值" diff --git a/print_cmd.c b/print_cmd.c index b81549471..36268e19d 100644 --- a/print_cmd.c +++ b/print_cmd.c @@ -1,6 +1,6 @@ /* print_command -- A way to make readable commands from a command tree. */ -/* Copyright (C) 1989-2022 Free Software Foundation, Inc. +/* Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,11 +29,7 @@ # include <unistd.h> #endif -#if defined (PREFER_STDARG) -# include <stdarg.h> -#else -# include <varargs.h> -#endif +#include <stdarg.h> #include "bashansi.h" #include "bashintl.h" @@ -50,64 +46,64 @@ #include "builtins/common.h" #if !HAVE_DECL_PRINTF -extern int printf PARAMS((const char *, ...)); /* Yuck. Double yuck. */ +extern int printf (const char *, ...); /* Yuck. Double yuck. */ #endif static int indentation; static int indentation_amount = 4; -#if defined (PREFER_STDARG) -typedef void PFUNC PARAMS((const char *, ...)); +typedef void PFUNC (const char *, ...); -static void cprintf PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); -static void xprintf PARAMS((const char *, ...)) __attribute__((__format__ (printf, 1, 2))); -#else -#define PFUNC VFunction -static void cprintf (); -static void xprintf (); -#endif +static void cprintf (const char *, ...) __attribute__((__format__ (printf, 1, 2))); +static void xprintf (const char *, ...) __attribute__((__format__ (printf, 1, 2))); + +static void uw_reset_locals (void *); -static void reset_locals PARAMS((void)); -static void newline PARAMS((char *)); -static void indent PARAMS((int)); -static void semicolon PARAMS((void)); -static void the_printed_command_resize PARAMS((int)); - -static void make_command_string_internal PARAMS((COMMAND *)); -static void _print_word_list PARAMS((WORD_LIST *, char *, PFUNC *)); -static void command_print_word_list PARAMS((WORD_LIST *, char *)); -static void print_case_clauses PARAMS((PATTERN_LIST *)); -static void print_redirection_list PARAMS((REDIRECT *)); -static void print_redirection PARAMS((REDIRECT *)); -static void print_heredoc_header PARAMS((REDIRECT *)); -static void print_heredoc_body PARAMS((REDIRECT *)); -static void print_heredocs PARAMS((REDIRECT *)); -static void print_heredoc_bodies PARAMS((REDIRECT *)); -static void print_deferred_heredocs PARAMS((const char *)); - -static void print_for_command PARAMS((FOR_COM *)); +static void newline (char *); +static void indent (int); +static void semicolon (void); +static void the_printed_command_resize (size_t); + +static void make_command_string_internal (COMMAND *); +static void _print_word_list (WORD_LIST *, char *, PFUNC *); +static void command_print_word_list (WORD_LIST *, char *); +static void print_case_clauses (PATTERN_LIST *); +static void print_redirection_list (REDIRECT *); +static void print_redirection (REDIRECT *); +static void print_heredoc_header (REDIRECT *); +static void print_heredoc_body (REDIRECT *); +static void print_heredocs (REDIRECT *); +static void print_heredoc_bodies (REDIRECT *); +static void print_deferred_heredocs (const char *); + +static void print_for_command (FOR_COM *); #if defined (ARITH_FOR_COMMAND) -static void print_arith_for_command PARAMS((ARITH_FOR_COM *)); +static void print_arith_for_command (ARITH_FOR_COM *); #endif #if defined (SELECT_COMMAND) -static void print_select_command PARAMS((SELECT_COM *)); +static void print_select_command (SELECT_COM *); #endif -static void print_group_command PARAMS((GROUP_COM *)); -static void print_case_command PARAMS((CASE_COM *)); -static void print_while_command PARAMS((WHILE_COM *)); -static void print_until_command PARAMS((WHILE_COM *)); -static void print_until_or_while PARAMS((WHILE_COM *, char *)); -static void print_if_command PARAMS((IF_COM *)); +static void print_group_command (GROUP_COM *); +static void print_case_command (CASE_COM *); +static void print_while_command (WHILE_COM *); +static void print_until_command (WHILE_COM *); +static void print_until_or_while (WHILE_COM *, char *); +static void print_if_command (IF_COM *); #if defined (COND_COMMAND) -static void print_cond_node PARAMS((COND_COM *)); +static void print_cond_node (COND_COM *); +#endif +static void print_function_def (FUNCTION_DEF *); + +#ifdef DEBUG +void debug_print_word_list (char *, WORD_LIST *, char *); +void debug_print_cond_command (COND_COM *); #endif -static void print_function_def PARAMS((FUNCTION_DEF *)); #define PRINTED_COMMAND_INITIAL_SIZE 64 #define PRINTED_COMMAND_GROW_SIZE 128 char *the_printed_command = (char *)NULL; -int the_printed_command_size = 0; +size_t the_printed_command_size = 0; int command_string_index = 0; int xtrace_fd = -1; @@ -138,12 +134,11 @@ static int group_command_nesting; /* A buffer to indicate the indirection level (PS4) when set -x is enabled. */ static char *indirection_string = 0; -static int indirection_stringsiz = 0; +static size_t indirection_stringsiz = 0; /* Print COMMAND (a command tree) on standard output. */ void -print_command (command) - COMMAND *command; +print_command (COMMAND *command) { command_string_index = 0; printf ("%s", make_command_string (command)); @@ -154,8 +149,7 @@ print_command (command) not consed, so you have to do that yourself if you want it to remain around. */ char * -make_command_string (command) - COMMAND *command; +make_command_string (COMMAND *command) { command_string_index = was_heredoc = 0; deferred_heredocs = 0; @@ -167,8 +161,7 @@ make_command_string (command) back into an external representation without turning newlines into `;'. Placeholder for other changes, if any are necessary. */ char * -print_comsub (command) - COMMAND *command; +print_comsub (COMMAND *command) { char *ret; @@ -180,8 +173,7 @@ print_comsub (command) /* The internal function. This is the real workhorse. */ static void -make_command_string_internal (command) - COMMAND *command; +make_command_string_internal (COMMAND *command) { char s[3]; @@ -335,7 +327,13 @@ make_command_string_internal (command) } make_command_string_internal (command->value.Connection->second); - PRINT_DEFERRED_HEREDOCS (""); + /* If this is a recursive call to make_command_string_internal to + print a connection with more than two components, defer printing + the here-document bodies until our caller can print the + connector. Remember that the parser builds lists to be left-side + heavy. */ + if (printing_connection == 1) + PRINT_DEFERRED_HEREDOCS (""); printing_connection--; break; @@ -353,10 +351,13 @@ make_command_string_internal (command) make_command_string_internal (command->value.Subshell->command); PRINT_DEFERRED_HEREDOCS (""); cprintf (" )"); + was_heredoc = 0; /* last wasn't heredoc/newline */ break; case cm_coproc: - cprintf ("coproc %s ", command->value.Coproc->name); + cprintf ("coproc "); + if (command->value.Coproc->command->type != cm_simple) + cprintf ("%s ", command->value.Coproc->name); skip_this_indent++; make_command_string_internal (command->value.Coproc->command); break; @@ -376,10 +377,7 @@ make_command_string_internal (command) } static void -_print_word_list (list, separator, pfunc) - WORD_LIST *list; - char *separator; - PFUNC *pfunc; +_print_word_list (WORD_LIST *list, char *separator, PFUNC *pfunc) { WORD_LIST *w; @@ -388,17 +386,13 @@ _print_word_list (list, separator, pfunc) } void -print_word_list (list, separator) - WORD_LIST *list; - char *separator; +print_word_list (WORD_LIST *list, char *separator) { _print_word_list (list, separator, xprintf); } void -xtrace_set (fd, fp) - int fd; - FILE *fp; +xtrace_set (int fd, FILE *fp) { if (fd >= 0 && sh_validfd (fd) == 0) { @@ -418,13 +412,13 @@ xtrace_set (fd, fp) } void -xtrace_init () +xtrace_init (void) { xtrace_set (-1, stderr); } void -xtrace_reset () +xtrace_reset (void) { if (xtrace_fd >= 0 && xtrace_fp) { @@ -439,8 +433,7 @@ xtrace_reset () } void -xtrace_fdchk (fd) - int fd; +xtrace_fdchk (int fd) { if (fd == xtrace_fd) xtrace_reset (); @@ -449,12 +442,14 @@ xtrace_fdchk (fd) /* Return a string denoting what our indirection level is. */ char * -indirection_level_string () +indirection_level_string (void) { register int i, j; char *ps4; char ps4_firstc[MB_LEN_MAX+1]; - int ps4_firstc_len, ps4_len, ineed, old; + size_t ps4_firstc_len, ps4_len, ineed; + int old; + DECLARE_MBSTATE; ps4 = get_string_value ("PS4"); if (indirection_string == 0) @@ -465,7 +460,7 @@ indirection_level_string () return (indirection_string); old = change_flag ('x', FLAG_OFF); - ps4 = decode_prompt_string (ps4); + ps4 = decode_prompt_string (ps4, 1); if (old) change_flag ('x', FLAG_ON); @@ -477,7 +472,7 @@ indirection_level_string () #if defined (HANDLE_MULTIBYTE) ps4_len = strnlen (ps4, MB_CUR_MAX); - ps4_firstc_len = MBLEN (ps4, ps4_len); + ps4_firstc_len = MBRLEN (ps4, ps4_len, &state); if (ps4_firstc_len == 1 || ps4_firstc_len == 0 || ps4_firstc_len < 0) { ps4_firstc[0] = ps4[0]; @@ -493,7 +488,7 @@ indirection_level_string () /* Dynamically resize indirection_string so we have room for everything and we don't have to truncate ps4 */ ineed = (ps4_firstc_len * indirection_level) + strlen (ps4); - if (ineed > indirection_stringsiz - 1) + if (ineed + 1 > indirection_stringsiz) { indirection_stringsiz = ineed + 1; indirection_string = xrealloc (indirection_string, indirection_stringsiz); @@ -516,9 +511,7 @@ indirection_level_string () } void -xtrace_print_assignment (name, value, assign_list, xflags) - char *name, *value; - int assign_list, xflags; +xtrace_print_assignment (char *name, char *value, int assign_list, int xflags) { char *nval; @@ -530,10 +523,10 @@ xtrace_print_assignment (name, value, assign_list, xflags) /* VALUE should not be NULL when this is called. */ if (*value == '\0' || assign_list) nval = value; - else if (sh_contains_shell_metas (value)) - nval = sh_single_quote (value); else if (ansic_shouldquote (value)) nval = ansic_quote (value, 0, (int *)0); + else if (sh_contains_shell_metas (value)) + nval = sh_single_quote (value); else nval = value; @@ -553,9 +546,7 @@ xtrace_print_assignment (name, value, assign_list, xflags) quoting the words because they haven't been expanded yet. XTFLAGS&1 means to print $PS4; XTFLAGS&2 means to suppress quoting the words in LIST. */ void -xtrace_print_word_list (list, xtflags) - WORD_LIST *list; - int xtflags; +xtrace_print_word_list (WORD_LIST *list, int xtflags) { WORD_LIST *w; char *t, *x; @@ -572,15 +563,15 @@ xtrace_print_word_list (list, xtflags) fprintf (xtrace_fp, "''%s", w->next ? " " : ""); else if (xtflags & 2) fprintf (xtrace_fp, "%s%s", t, w->next ? " " : ""); - else if (sh_contains_shell_metas (t)) + else if (ansic_shouldquote (t)) { - x = sh_single_quote (t); + x = ansic_quote (t, 0, (int *)0); fprintf (xtrace_fp, "%s%s", x, w->next ? " " : ""); free (x); } - else if (ansic_shouldquote (t)) + else if (sh_contains_shell_metas (t)) { - x = ansic_quote (t, 0, (int *)0); + x = sh_single_quote (t); fprintf (xtrace_fp, "%s%s", x, w->next ? " " : ""); free (x); } @@ -592,24 +583,30 @@ xtrace_print_word_list (list, xtflags) } static void -command_print_word_list (list, separator) - WORD_LIST *list; - char *separator; +command_print_word_list (WORD_LIST *list, char *separator) { - _print_word_list (list, separator, cprintf); + WORD_LIST *nlist; + + /* A start at removing CTLESC from commands that haven't been expanded. */ + if (pretty_print_mode) + { + nlist = list ? dequote_list (list) : list; + _print_word_list (nlist, separator, cprintf); + /* we're just pretty-printing, so this can be destructive */ + } + else + _print_word_list (list, separator, cprintf); } void -print_for_command_head (for_command) - FOR_COM *for_command; +print_for_command_head (FOR_COM *for_command) { cprintf ("for %s in ", for_command->name->word); command_print_word_list (for_command->map_list, " "); } void -xtrace_print_for_command_head (for_command) - FOR_COM *for_command; +xtrace_print_for_command_head (FOR_COM *for_command) { CHECK_XTRACE_FP; fprintf (xtrace_fp, "%s", indirection_level_string ()); @@ -618,8 +615,7 @@ xtrace_print_for_command_head (for_command) } static void -print_for_command (for_command) - FOR_COM *for_command; +print_for_command (FOR_COM *for_command) { print_for_command_head (for_command); cprintf (";"); @@ -636,8 +632,7 @@ print_for_command (for_command) #if defined (ARITH_FOR_COMMAND) static void -print_arith_for_command (arith_for_command) - ARITH_FOR_COM *arith_for_command; +print_arith_for_command (ARITH_FOR_COM *arith_for_command) { cprintf ("for (("); command_print_word_list (arith_for_command->init, " "); @@ -658,16 +653,19 @@ print_arith_for_command (arith_for_command) #if defined (SELECT_COMMAND) void -print_select_command_head (select_command) - SELECT_COM *select_command; +print_select_command_head (SELECT_COM *select_command) { - cprintf ("select %s in ", select_command->name->word); + WORD_DESC *w; + + w = (pretty_print_mode) ? dequote_word (select_command->name) : select_command->name; + /* we're just pretty-printing, so this can be destructive */ + + cprintf ("select %s in ", w->word); command_print_word_list (select_command->map_list, " "); } void -xtrace_print_select_command_head (select_command) - SELECT_COM *select_command; +xtrace_print_select_command_head (SELECT_COM *select_command) { CHECK_XTRACE_FP; fprintf (xtrace_fp, "%s", indirection_level_string ()); @@ -676,8 +674,7 @@ xtrace_print_select_command_head (select_command) } static void -print_select_command (select_command) - SELECT_COM *select_command; +print_select_command (SELECT_COM *select_command) { print_select_command_head (select_command); @@ -693,13 +690,12 @@ print_select_command (select_command) #endif /* SELECT_COMMAND */ static void -print_group_command (group_command) - GROUP_COM *group_command; +print_group_command (GROUP_COM *group_command) { group_command_nesting++; cprintf ("{ "); - if (inside_function_def == 0) + if (inside_function_def == 0 /* && pretty_print_mode == 0 */) skip_this_indent++; else { @@ -713,7 +709,7 @@ print_group_command (group_command) make_command_string_internal (group_command->command); PRINT_DEFERRED_HEREDOCS (""); - if (inside_function_def) + if (inside_function_def /* || pretty_print_mode */) { cprintf ("\n"); indentation -= indentation_amount; @@ -726,20 +722,24 @@ print_group_command (group_command) } cprintf ("}"); + was_heredoc = 0; /* last wasn't heredoc/newline */ group_command_nesting--; } void -print_case_command_head (case_command) - CASE_COM *case_command; +print_case_command_head (CASE_COM *case_command) { - cprintf ("case %s in ", case_command->word->word); + WORD_DESC *w; + + w = (pretty_print_mode) ? dequote_word (case_command->word) : case_command->word; + /* we're just pretty-printing, so this can be destructive */ + + cprintf ("case %s in ", w->word); } void -xtrace_print_case_command_head (case_command) - CASE_COM *case_command; +xtrace_print_case_command_head (CASE_COM *case_command) { CHECK_XTRACE_FP; fprintf (xtrace_fp, "%s", indirection_level_string ()); @@ -747,8 +747,7 @@ xtrace_print_case_command_head (case_command) } static void -print_case_command (case_command) - CASE_COM *case_command; +print_case_command (CASE_COM *case_command) { print_case_command_head (case_command); @@ -758,13 +757,28 @@ print_case_command (case_command) } static void -print_case_clauses (clauses) - PATTERN_LIST *clauses; +print_case_clauses (PATTERN_LIST *clauses) { + int first = 1; + indentation += indentation_amount; while (clauses) { - newline (""); + /* If we're printing a comsub, the result will be reparsed later, so + we don't want to insert a newline after the `in': that could cause + the parser to parse a reserved word in error, since the newline + inserts a token after the `in'. */ + if (printing_comsub == 0 || first == 0) + newline (""); + first = 0; + /* "The grammar shows that reserved words can be used as patterns, + even if one is the first word on a line. Obviously, the reserved + word esac cannot be used in this manner." */ + /* If the first word of the pattern list is literal "esac", the only + way it could have gotten through the parser is to have been + preceded by a left paren. */ + if (STREQ (clauses->patterns->word->word, "esac")) + cprintf("("); command_print_word_list (clauses->patterns, " | "); cprintf (")\n"); indentation += indentation_amount; @@ -783,30 +797,33 @@ print_case_clauses (clauses) } static void -print_while_command (while_command) - WHILE_COM *while_command; +print_while_command (WHILE_COM *while_command) { print_until_or_while (while_command, "while"); } static void -print_until_command (while_command) - WHILE_COM *while_command; +print_until_command (WHILE_COM *while_command) { print_until_or_while (while_command, "until"); } static void -print_until_or_while (while_command, which) - WHILE_COM *while_command; - char *which; +print_until_or_while (WHILE_COM *while_command, char *which) { cprintf ("%s ", which); skip_this_indent++; make_command_string_internal (while_command->test); PRINT_DEFERRED_HEREDOCS (""); semicolon (); - cprintf (" do\n"); /* was newline ("do\n"); */ + if (was_heredoc) + { + indent (indentation); + cprintf ("do\n"); + was_heredoc = 0; + } + else + cprintf (" do\n"); /* was newline ("do\n"); */ indentation += indentation_amount; make_command_string_internal (while_command->action); PRINT_DEFERRED_HEREDOCS (""); @@ -816,14 +833,21 @@ print_until_or_while (while_command, which) } static void -print_if_command (if_command) - IF_COM *if_command; +print_if_command (IF_COM *if_command) { cprintf ("if "); skip_this_indent++; make_command_string_internal (if_command->test); + PRINT_DEFERRED_HEREDOCS (""); semicolon (); - cprintf (" then\n"); + if (was_heredoc) + { + indent (indentation_amount); + cprintf ("then\n"); + was_heredoc = 0; + } + else + cprintf (" then\n"); indentation += indentation_amount; make_command_string_internal (if_command->true_case); PRINT_DEFERRED_HEREDOCS (""); @@ -844,8 +868,7 @@ print_if_command (if_command) #if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND) void -print_arith_command (arith_cmd_list) - WORD_LIST *arith_cmd_list; +print_arith_command (WORD_LIST *arith_cmd_list) { cprintf ("(("); command_print_word_list (arith_cmd_list, " "); @@ -855,8 +878,7 @@ print_arith_command (arith_cmd_list) #if defined (COND_COMMAND) static void -print_cond_node (cond) - COND_COM *cond; +print_cond_node (COND_COM *cond) { if (cond->flags & CMD_INVERT_RETURN) cprintf ("! "); @@ -900,8 +922,7 @@ print_cond_node (cond) } void -print_cond_command (cond) - COND_COM *cond; +print_cond_command (COND_COM *cond) { cprintf ("[[ "); print_cond_node (cond); @@ -910,10 +931,7 @@ print_cond_command (cond) #ifdef DEBUG void -debug_print_word_list (s, list, sep) - char *s; - WORD_LIST *list; - char *sep; +debug_print_word_list (char *s, WORD_LIST *list, char *sep) { WORD_LIST *w; @@ -925,8 +943,7 @@ debug_print_word_list (s, list, sep) } void -debug_print_cond_command (cond) - COND_COM *cond; +debug_print_cond_command (COND_COM *cond) { fprintf (stderr, "DEBUG: "); command_string_index = 0; @@ -936,10 +953,7 @@ debug_print_cond_command (cond) #endif void -xtrace_print_cond_term (type, invert, op, arg1, arg2) - int type, invert; - WORD_DESC *op; - char *arg1, *arg2; +xtrace_print_cond_term (int type, int invert, WORD_DESC *op, char *arg1, char *arg2) { CHECK_XTRACE_FP; command_string_index = 0; @@ -969,8 +983,7 @@ xtrace_print_cond_term (type, invert, op, arg1, arg2) #if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND) /* A function to print the words of an arithmetic command when set -x is on. */ void -xtrace_print_arith_cmd (list) - WORD_LIST *list; +xtrace_print_arith_cmd (WORD_LIST *list) { WORD_LIST *w; @@ -986,11 +999,12 @@ xtrace_print_arith_cmd (list) #endif void -print_simple_command (simple_command) - SIMPLE_COM *simple_command; +print_simple_command (SIMPLE_COM *simple_command) { if (simple_command->words) command_print_word_list (simple_command->words, " "); + else + cprintf (""); if (simple_command->redirects) { @@ -1001,8 +1015,7 @@ print_simple_command (simple_command) } static void -print_heredocs (heredocs) - REDIRECT *heredocs; +print_heredocs (REDIRECT *heredocs) { REDIRECT *hdtail; @@ -1016,8 +1029,7 @@ print_heredocs (heredocs) } static void -print_heredoc_bodies (heredocs) - REDIRECT *heredocs; +print_heredoc_bodies (REDIRECT *heredocs) { REDIRECT *hdtail; @@ -1038,8 +1050,7 @@ print_heredoc_bodies (heredocs) if it's a `;', but we use it to note not to print an extra space after the last heredoc body and newline. */ static void -print_deferred_heredocs (cstring) - const char *cstring; +print_deferred_heredocs (const char *cstring) { /* We now print the heredoc headers in print_redirection_list */ if (cstring && cstring[0] && (cstring[0] != ';' || cstring[1])) @@ -1056,11 +1067,9 @@ print_deferred_heredocs (cstring) } static void -print_redirection_list (redirects) - REDIRECT *redirects; +print_redirection_list (REDIRECT *redirects) { REDIRECT *heredocs, *hdtail, *newredir; - char *rw; heredocs = (REDIRECT *)NULL; hdtail = heredocs; @@ -1068,7 +1077,7 @@ print_redirection_list (redirects) was_heredoc = 0; while (redirects) { - /* Defer printing the here document bodiess until we've printed the rest of the + /* Defer printing the here document bodies until we've printed the rest of the redirections, but print the headers in the order they're given. */ if (redirects->instruction == r_reading_until || redirects->instruction == r_deblank_reading_until) { @@ -1085,19 +1094,6 @@ print_redirection_list (redirects) else hdtail = heredocs = newredir; } -#if 0 - /* Remove this heuristic now that the command printing code doesn't - unconditionally put in the redirector file descriptor. */ - else if (redirects->instruction == r_duplicating_output_word && (redirects->flags & REDIR_VARASSIGN) == 0 && redirects->redirector.dest == 1) - { - /* Temporarily translate it as the execution code does. */ - rw = redirects->redirectee.filename->word; - if (rw && *rw != '-' && DIGIT (*rw) == 0 && EXPCHAR (*rw) == 0) - redirects->instruction = r_err_and_out; - print_redirection (redirects); - redirects->instruction = r_duplicating_output_word; - } -#endif else print_redirection (redirects); @@ -1119,8 +1115,7 @@ print_redirection_list (redirects) } static void -print_heredoc_header (redirect) - REDIRECT *redirect; +print_heredoc_header (REDIRECT *redirect) { int kill_leading; char *x; @@ -1145,16 +1140,14 @@ print_heredoc_header (redirect) } static void -print_heredoc_body (redirect) - REDIRECT *redirect; +print_heredoc_body (REDIRECT *redirect) { /* Here doc body */ cprintf ("%s%s", redirect->redirectee.filename->word, redirect->here_doc_eof); } static void -print_redirection (redirect) - REDIRECT *redirect; +print_redirection (REDIRECT *redirect) { int redirector, redir_fd; WORD_DESC *redirectee, *redir_word; @@ -1317,7 +1310,7 @@ print_redirection (redirect) } static void -reset_locals () +uw_reset_locals (void *ignore) { inside_function_def = 0; indentation = 0; @@ -1327,27 +1320,36 @@ reset_locals () } static void -print_function_def (func) - FUNCTION_DEF *func; +print_function_def (FUNCTION_DEF *func) { COMMAND *cmdcopy; REDIRECT *func_redirects; + WORD_DESC *w; + + w = pretty_print_mode ? dequote_word (func->name) : func->name; + /* we're just pretty-printing, so this can be destructive */ func_redirects = NULL; - /* When in posix mode, print functions as posix specifies them. */ + /* When in posix mode, print functions as posix specifies them, but prefix + `function' to words that are not valid POSIX identifiers. */ if (posixly_correct == 0) - cprintf ("function %s () \n", func->name->word); + cprintf ("function %s () \n", w->word); + else if (valid_function_name (w->word, posixly_correct) == 0) + cprintf ("function %s () \n", w->word); else - cprintf ("%s () \n", func->name->word); - add_unwind_protect (reset_locals, 0); + cprintf ("%s () \n", w->word); + + begin_unwind_frame ("function-def"); + add_unwind_protect (uw_reset_locals, 0); indent (indentation); - cprintf ("{ \n"); + cprintf ("{ \n"); /* } */ inside_function_def++; indentation += indentation_amount; - cmdcopy = copy_command (func->command); + cmdcopy = func->command; + unwind_protect_pointer (cmdcopy); if (cmdcopy->type == cm_group) { func_redirects = cmdcopy->redirects; @@ -1358,7 +1360,6 @@ print_function_def (func) : cmdcopy); PRINT_DEFERRED_HEREDOCS (""); - remove_unwind_protect (); indentation -= indentation_amount; inside_function_def--; @@ -1375,7 +1376,7 @@ print_function_def (func) was_heredoc = 0; /* not printing any here-documents now */ } - dispose_command (cmdcopy); + discard_unwind_frame ("function-def"); } /* Return the string representation of the named function. @@ -1385,10 +1386,7 @@ print_function_def (func) flags&FUNC_EXTERNAL means convert from internal to external form */ char * -named_function_string (name, command, flags) - char *name; - COMMAND *command; - int flags; +named_function_string (char *name, COMMAND *command, int flags) { char *result; int old_indent, old_amount; @@ -1403,7 +1401,7 @@ named_function_string (name, command, flags) if (name && *name) { - if (find_reserved_word (name) >= 0) + if (valid_function_name (name, posixly_correct) == 0) cprintf ("function "); cprintf ("%s ", name); } @@ -1423,9 +1421,11 @@ named_function_string (name, command, flags) inside_function_def++; - cprintf ((flags & FUNC_MULTILINE) ? "{ \n" : "{ "); + cprintf ((flags & FUNC_MULTILINE) ? "{ \n" : "{ "); /* }} */ + + cmdcopy = command; + unwind_protect_pointer (cmdcopy); - cmdcopy = copy_command (command); /* Take any redirections specified in the function definition (which should apply to the function as a whole) and save them for printing later. */ func_redirects = (REDIRECT *)NULL; @@ -1455,26 +1455,15 @@ named_function_string (name, command, flags) was_heredoc = 0; } + remove_unwind_protect (); /* unwind_protect_pointer */ result = the_printed_command; if ((flags & FUNC_MULTILINE) == 0) { -#if 0 - register int i; - for (i = 0; result[i]; i++) - if (result[i] == '\n') - { - strcpy (result + i, result + i + 1); - --i; - } -#else - if (result[2] == '\n') /* XXX -- experimental */ + if (result[2] == '\n') memmove (result + 2, result + 3, strlen (result) - 2); -#endif } - dispose_command (cmdcopy); - if (flags & FUNC_EXTERNAL) result = remove_quoted_escapes (result); @@ -1482,8 +1471,7 @@ named_function_string (name, command, flags) } static void -newline (string) - char *string; +newline (char *string) { cprintf ("\n"); indent (indentation); @@ -1492,11 +1480,10 @@ newline (string) } static char *indentation_string; -static int indentation_size; +static size_t indentation_size; static void -indent (amount) - int amount; +indent (int amount) { register int i; @@ -1509,31 +1496,28 @@ indent (amount) } static void -semicolon () +semicolon (void) { - if (command_string_index > 0 && - (the_printed_command[command_string_index - 1] == '&' || - the_printed_command[command_string_index - 1] == '\n')) + if ((command_string_index > 0 && + the_printed_command[command_string_index - 1] == '\n') || + (command_string_index > 1 && + the_printed_command[command_string_index - 1] == '&' && + the_printed_command[command_string_index - 2] == ' ')) return; cprintf (";"); } /* How to make the string. */ static void -#if defined (PREFER_STDARG) cprintf (const char *control, ...) -#else -cprintf (control, va_alist) - const char *control; - va_dcl -#endif { - register const char *s; + const char *s; char char_arg[2], *argp, intbuf[INT_STRLEN_BOUND (unsigned int) + 1]; - int digit_arg, arg_len, c; + int digit_arg, c; + size_t arg_len; va_list args; - SH_VA_START (args, control); + va_start (args, control); arg_len = strlen (control); the_printed_command_resize (arg_len + 1); @@ -1610,8 +1594,7 @@ cprintf (control, va_alist) /* Ensure that there is enough space to stuff LENGTH characters into THE_PRINTED_COMMAND. */ static void -the_printed_command_resize (length) - int length; +the_printed_command_resize (size_t length) { if (the_printed_command == 0) { @@ -1621,7 +1604,7 @@ the_printed_command_resize (length) } else if ((command_string_index + length) >= the_printed_command_size) { - int new; + size_t new; new = command_string_index + length + 1; /* Round up to the next multiple of PRINTED_COMMAND_GROW_SIZE. */ @@ -1632,34 +1615,13 @@ the_printed_command_resize (length) } } -#if defined (HAVE_VPRINTF) -/* ``If vprintf is available, you may assume that vfprintf and vsprintf are - also available.'' */ - static void -#if defined (PREFER_STDARG) xprintf (const char *format, ...) -#else -xprintf (format, va_alist) - const char *format; - va_dcl -#endif { va_list args; - SH_VA_START (args, format); + va_start (args, format); vfprintf (stdout, format, args); va_end (args); } - -#else - -static void -xprintf (format, arg1, arg2, arg3, arg4, arg5) - const char *format; -{ - printf (format, arg1, arg2, arg3, arg4, arg5); -} - -#endif /* !HAVE_VPRINTF */ diff --git a/quit.h b/quit.h index 0af1d121f..44d908283 100644 --- a/quit.h +++ b/quit.h @@ -45,6 +45,7 @@ extern volatile sig_atomic_t terminating_signal; #define DELINTERRUPT interrupt_state-- #define ISINTERRUPT interrupt_state != 0 +#define ISTERMSIG terminating_signal != 0 /* The same sort of thing, this time just for signals that would ordinarily cause the shell to terminate. */ @@ -72,4 +73,14 @@ extern volatile sig_atomic_t terminating_signal; do { \ if (sigterm_received) termsig_handler (SIGTERM); \ } while (0) + +#define CHECK_WINCH \ +do { \ + if (sigwinch_received) \ + { \ + sigwinch_received = 0; \ + get_new_window_size (0, (int *)0, (int *)0); \ + } \ +} while (0) + #endif /* _QUIT_H_ */ diff --git a/redir.c b/redir.c index 8369adccb..6c2f62d2e 100644 --- a/redir.c +++ b/redir.c @@ -1,6 +1,6 @@ /* redir.c -- Functions to perform input and output redirection. */ -/* Copyright (C) 1997-2021 Free Software Foundation, Inc. +/* Copyright (C) 1997-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -54,9 +54,7 @@ extern int errno; #include "redir.h" #include "trap.h" -#if defined (BUFFERED_INPUT) -# include "input.h" -#endif +#include "input.h" #include "builtins/pipesize.h" @@ -94,24 +92,24 @@ extern REDIRECT *redirection_undo_list; extern REDIRECT *exec_redirection_undo_list; /* Static functions defined and used in this file. */ -static void add_exec_redirect PARAMS((REDIRECT *)); -static int add_undo_redirect PARAMS((int, enum r_instruction, int)); -static int add_undo_close_redirect PARAMS((int)); -static int expandable_redirection_filename PARAMS((REDIRECT *)); -static int stdin_redirection PARAMS((enum r_instruction, int)); -static int undoablefd PARAMS((int)); -static int do_redirection_internal PARAMS((REDIRECT *, int, char **)); +static void add_exec_redirect (REDIRECT *); +static int add_undo_redirect (int, enum r_instruction, int); +static int add_undo_close_redirect (int); +static int expandable_redirection_filename (REDIRECT *); +static int stdin_redirection (enum r_instruction, int); +static int undoablefd (int); +static int do_redirection_internal (REDIRECT *, int, char **); -static char *heredoc_expand PARAMS((WORD_DESC *, enum r_instruction, size_t *)); -static int heredoc_write PARAMS((int, char *, size_t)); -static int here_document_to_fd PARAMS((WORD_DESC *, enum r_instruction)); +static char *heredoc_expand (WORD_DESC *, enum r_instruction, size_t *); +static int heredoc_write (int, const char *, size_t); +static int here_document_to_fd (WORD_DESC *, enum r_instruction); -static int redir_special_open PARAMS((int, char *, int, int, enum r_instruction)); -static int noclobber_open PARAMS((char *, int, int, enum r_instruction)); -static int redir_open PARAMS((char *, int, int, enum r_instruction)); +static int redir_special_open (int, char *, int, int, enum r_instruction); +static int noclobber_open (const char *, int, int, enum r_instruction); +static int redir_open (char *, int, int, enum r_instruction); -static int redir_varassign PARAMS((REDIRECT *, int)); -static int redir_varvalue PARAMS((REDIRECT *)); +static int redir_varassign (REDIRECT *, int); +static int redir_varvalue (REDIRECT *); /* Spare redirector used when translating [N]>&WORD[-] or [N]<&WORD[-] to a new redirection and when creating the redirection undo list. */ @@ -133,10 +131,7 @@ do { \ } while (0) void -redirection_error (temp, error, fn) - REDIRECT *temp; - int error; - char *fn; /* already-expanded filename */ +redirection_error (REDIRECT *temp, int error, char *fn) { char *filename, *allocname; int oflags; @@ -188,7 +183,7 @@ redirection_error (temp, error, fn) oflags = temp->redirectee.filename->flags; if (posixly_correct && interactive_shell == 0) temp->redirectee.filename->flags |= W_NOGLOB; - temp->redirectee.filename->flags |= W_NOCOMSUB; + temp->redirectee.filename->flags |= W_NOCOMSUB|W_NOPROCSUB; filename = allocname = redirection_expand (temp->redirectee.filename); temp->redirectee.filename->flags = oflags; if (filename == 0) @@ -238,9 +233,7 @@ redirection_error (temp, error, fn) is non-zero, file descriptors opened in do_redirection () have their close-on-exec flag set. */ int -do_redirections (list, flags) - REDIRECT *list; - int flags; +do_redirections (REDIRECT *list, int flags) { int error; REDIRECT *temp; @@ -275,8 +268,7 @@ do_redirections (list, flags) /* Return non-zero if the redirection pointed to by REDIRECT has a redirectee.filename that can be expanded. */ static int -expandable_redirection_filename (redirect) - REDIRECT *redirect; +expandable_redirection_filename (REDIRECT *redirect) { switch (redirect->instruction) { @@ -302,8 +294,7 @@ expandable_redirection_filename (redirect) /* Expand the word in WORD returning a string. If WORD expands to multiple words (or no words), then return NULL. */ char * -redirection_expand (word) - WORD_DESC *word; +redirection_expand (WORD_DESC *word) { char *result; WORD_LIST *tlist1, *tlist2; @@ -353,10 +344,7 @@ redirection_expand (word) descriptor is specified. In particular, it adds a newline to the end of a here-string to preserve previous semantics. */ static char * -heredoc_expand (redirectee, ri, lenp) - WORD_DESC *redirectee; - enum r_instruction ri; - size_t *lenp; +heredoc_expand (WORD_DESC *redirectee, enum r_instruction ri, size_t *lenp) { char *document; size_t dlen; @@ -410,10 +398,7 @@ heredoc_expand (redirectee, ri, lenp) /* Write HEREDOC (of length HDLEN) to FD, returning 0 on success and ERRNO on error. Don't handle interrupts. */ static int -heredoc_write (fd, heredoc, herelen) - int fd; - char *heredoc; - size_t herelen; +heredoc_write (int fd, const char *heredoc, size_t herelen) { ssize_t nw; int e; @@ -434,9 +419,7 @@ heredoc_write (fd, heredoc, herelen) pointed to by REDIRECTEE, and return a file descriptor open for reading to it. Return -1 on any error, and make sure errno is set appropriately. */ static int -here_document_to_fd (redirectee, ri) - WORD_DESC *redirectee; - enum r_instruction ri; +here_document_to_fd (WORD_DESC *redirectee, enum r_instruction ri) { char *filename; int r, fd, fd2, herepipe[2]; @@ -603,11 +586,7 @@ static STRING_INT_ALIST _redir_special_filenames[] = { }; static int -redir_special_open (spec, filename, flags, mode, ri) - int spec; - char *filename; - int flags, mode; - enum r_instruction ri; +redir_special_open (int spec, char *filename, int flags, int mode, enum r_instruction ri) { int fd; #if !defined (HAVE_DEV_FD) @@ -619,7 +598,7 @@ redir_special_open (spec, filename, flags, mode, ri) { #if !defined (HAVE_DEV_FD) case RF_DEVFD: - if (all_digits (filename+8) && legal_number (filename+8, &lfd) && lfd == (int)lfd) + if (all_digits (filename+8) && valid_number (filename+8, &lfd) && lfd == (int)lfd) { fd = lfd; fd = fcntl (fd, F_DUPFD, SHELL_FD_BASE); @@ -665,10 +644,7 @@ redir_special_open (spec, filename, flags, mode, ri) race conditions and avoiding the problem where the file is replaced between the stat(2) and open(2). */ static int -noclobber_open (filename, flags, mode, ri) - char *filename; - int flags, mode; - enum r_instruction ri; +noclobber_open (const char *filename, int flags, int mode, enum r_instruction ri) { int r, fd; struct stat finfo, finfo2; @@ -717,10 +693,7 @@ noclobber_open (filename, flags, mode, ri) } static int -redir_open (filename, flags, mode, ri) - char *filename; - int flags, mode; - enum r_instruction ri; +redir_open (char *filename, int flags, int mode, enum r_instruction ri) { int fd, r, e; @@ -751,6 +724,7 @@ redir_open (filename, flags, mode, ri) } while (fd < 0 && errno == EINTR); +#if 0 /* TAG: bash-5.3 champetier.etienne@gmail.com 01/28/2024 */ #if defined (AFS) if ((fd < 0) && (errno == EACCES)) { @@ -758,14 +732,14 @@ redir_open (filename, flags, mode, ri) errno = EACCES; /* restore errno */ } #endif /* AFS */ +#endif } return fd; } static int -undoablefd (fd) - int fd; +undoablefd (int fd) { int clexec; @@ -784,10 +758,7 @@ undoablefd (fd) close-on-exec. FNP, if non-null is a pointer to a location where the expanded filename is stored. The caller will free it. */ static int -do_redirection_internal (redirect, flags, fnp) - REDIRECT *redirect; - int flags; - char **fnp; +do_redirection_internal (REDIRECT *redirect, int flags, char **fnp) { WORD_DESC *redirectee; int redir_fd, fd, redirector, r, oflags; @@ -831,7 +802,7 @@ do_redirection_internal (redirect, flags, fnp) else if (all_digits (redirectee_word)) { sd = redirect->redirector; - if (legal_number (redirectee_word, &lfd) && (int)lfd == lfd) + if (valid_number (redirectee_word, &lfd) && (int)lfd == lfd) rd.dest = lfd; else rd.dest = -1; /* XXX */ @@ -965,11 +936,9 @@ do_redirection_internal (redirect, flags, fnp) REDIRECTION_ERROR (r, errno, fd); } -#if defined (BUFFERED_INPUT) /* inhibit call to sync_buffered_stream() for async processes */ if (redirector != 0 || (subshell_environment & SUBSHELL_ASYNC) == 0) check_bash_input (redirector); -#endif /* Make sure there is no pending output before we change the state of the underlying file descriptor, since the builtins use stdio @@ -1000,13 +969,11 @@ do_redirection_internal (redirect, flags, fnp) return (errno); } -#if defined (BUFFERED_INPUT) /* Do not change the buffered stream for an implicit redirection of /dev/null to fd 0 for asynchronous commands without job control (r_inputa_direction). */ if (ri == r_input_direction || ri == r_input_output) duplicate_buffered_stream (fd, redirector); -#endif /* BUFFERED_INPUT */ /* * If we're remembering, then this is the result of a while, for @@ -1024,11 +991,9 @@ do_redirection_internal (redirect, flags, fnp) if (fd != redirector) { -#if defined (BUFFERED_INPUT) if (INPUT_REDIRECT (ri)) close_buffered_fd (fd); else -#endif /* !BUFFERED_INPUT */ close (fd); /* Don't close what we just opened! */ } @@ -1086,9 +1051,8 @@ do_redirection_internal (redirect, flags, fnp) REDIRECTION_ERROR (r, errno, fd); } -#if defined (BUFFERED_INPUT) check_bash_input (redirector); -#endif + if (redirect->rflags & REDIR_VARASSIGN) { if ((r = redir_varassign (redirect, redirector)) < 0) @@ -1105,20 +1069,14 @@ do_redirection_internal (redirect, flags, fnp) return (r); } -#if defined (BUFFERED_INPUT) duplicate_buffered_stream (fd, redirector); -#endif if ((flags & RX_CLEXEC) && (redirector > 2)) SET_CLOSE_ON_EXEC (redirector); } if (fd != redirector) -#if defined (BUFFERED_INPUT) close_buffered_fd (fd); -#else - close (fd); -#endif } break; @@ -1160,11 +1118,11 @@ do_redirection_internal (redirect, flags, fnp) REDIRECTION_ERROR (r, errno, -1); } } -#if defined (BUFFERED_INPUT) + /* inhibit call to sync_buffered_stream() for async processes */ if (redirector != 0 || (subshell_environment & SUBSHELL_ASYNC) == 0) check_bash_input (redirector); -#endif + if (redirect->rflags & REDIR_VARASSIGN) { if ((r = redir_varassign (redirect, redirector)) < 0) @@ -1177,10 +1135,8 @@ do_redirection_internal (redirect, flags, fnp) else if (dup2 (redir_fd, redirector) < 0) return (errno); -#if defined (BUFFERED_INPUT) if (ri == r_duplicating_input || ri == r_move_input) duplicate_buffered_stream (redir_fd, redirector); -#endif /* BUFFERED_INPUT */ /* First duplicate the close-on-exec state of redirectee. dup2 leaves the flag unset on the new descriptor, which means it @@ -1247,14 +1203,10 @@ do_redirection_internal (redirect, flags, fnp) #endif xtrace_fdchk (redirector); -#if defined (BUFFERED_INPUT) /* inhibit call to sync_buffered_stream() for async processes */ if (redirector != 0 || (subshell_environment & SUBSHELL_ASYNC) == 0) check_bash_input (redirector); r = close_buffered_fd (redirector); -#else /* !BUFFERED_INPUT */ - r = close (redirector); -#endif /* !BUFFERED_INPUT */ if (r < 0 && (flags & RX_INTERNAL) && (errno == EIO || errno == ENOSPC)) REDIRECTION_ERROR (r, errno, -1); @@ -1283,10 +1235,7 @@ do_redirection_internal (redirect, flags, fnp) puts the process over its fd limit, causing fcntl to fail, we try again with SHELL_FD_BASE. Return 0 on success, -1 on error. */ static int -add_undo_redirect (fd, ri, fdbase) - int fd; - enum r_instruction ri; - int fdbase; +add_undo_redirect (int fd, enum r_instruction ri, int fdbase) { int new_fd, clexec_flag, savefd_flag; REDIRECT *new_redirect, *closer, *dummy_redirect; @@ -1373,8 +1322,7 @@ add_undo_redirect (fd, ri, fdbase) /* Set up to close FD when we are finished with the current command and its redirections. Return 0 on success, -1 on error. */ static int -add_undo_close_redirect (fd) - int fd; +add_undo_close_redirect (int fd) { REDIRECT *closer; REDIRECTEE sd; @@ -1390,8 +1338,7 @@ add_undo_close_redirect (fd) } static void -add_exec_redirect (dummy_redirect) - REDIRECT *dummy_redirect; +add_exec_redirect (REDIRECT *dummy_redirect) { dummy_redirect->next = exec_redirection_undo_list; exec_redirection_undo_list = dummy_redirect; @@ -1400,9 +1347,7 @@ add_exec_redirect (dummy_redirect) /* Return 1 if the redirection specified by RI and REDIRECTOR alters the standard input. */ static int -stdin_redirection (ri, redirector) - enum r_instruction ri; - int redirector; +stdin_redirection (enum r_instruction ri, int redirector) { switch (ri) { @@ -1436,8 +1381,7 @@ stdin_redirection (ri, redirector) /* Return non-zero if any of the redirections in REDIRS alter the standard input. */ int -stdin_redirects (redirs) - REDIRECT *redirs; +stdin_redirects (REDIRECT *redirs) { REDIRECT *rp; int n; @@ -1449,9 +1393,7 @@ stdin_redirects (redirs) } /* bind_var_to_int handles array references */ static int -redir_varassign (redir, fd) - REDIRECT *redir; - int fd; +redir_varassign (REDIRECT *redir, int fd) { WORD_DESC *w; SHELL_VAR *v; @@ -1467,8 +1409,7 @@ redir_varassign (redir, fd) /* Handles {array[ind]} for redirection words */ static int -redir_varvalue (redir) - REDIRECT *redir; +redir_varvalue (REDIRECT *redir) { SHELL_VAR *v; char *val, *w; @@ -1520,7 +1461,7 @@ redir_varvalue (redir) if (val == 0 || *val == 0) return -1; - if (legal_number (val, &vmax) < 0) + if (valid_number (val, &vmax) == 0) return -1; i = vmax; /* integer truncation */ diff --git a/redir.h b/redir.h index 340dc1c02..f1378ccb3 100644 --- a/redir.h +++ b/redir.h @@ -1,6 +1,6 @@ /* redir.h - functions from redir.c. */ -/* Copyright (C) 1997, 2001, 2005, 2008, 2009-2021 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2001, 2005, 2008, 2009-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -32,12 +32,12 @@ #define RX_SAVCLEXEC 0x20 /* set close-on-exec off in restored fd even though saved on has it on */ #define RX_SAVEFD 0x40 /* fd used to save another even if < SHELL_FD_BASE */ -extern void redirection_error PARAMS((REDIRECT *, int, char *)); -extern int do_redirections PARAMS((REDIRECT *, int)); -extern char *redirection_expand PARAMS((WORD_DESC *)); -extern int stdin_redirects PARAMS((REDIRECT *)); +extern void redirection_error (REDIRECT *, int, char *); +extern int do_redirections (REDIRECT *, int); +extern char *redirection_expand (WORD_DESC *); +extern int stdin_redirects (REDIRECT *); /* in builtins/evalstring.c for now, could move later */ -extern int open_redir_file PARAMS((REDIRECT *, char **)); +extern int open_redir_file (REDIRECT *, char **); #endif /* _REDIR_H_ */ diff --git a/shell.c b/shell.c index ebd89651e..01fffac2d 100644 --- a/shell.c +++ b/shell.c @@ -1,6 +1,6 @@ /* shell.c -- GNU's idea of the POSIX shell specification. */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -62,8 +62,8 @@ #include "jobs.h" #else extern int running_in_background; -extern int initialize_job_control PARAMS((int)); -extern int get_tty_state PARAMS((void)); +extern int initialize_job_control (int); +extern int get_tty_state (void); #endif /* JOB_CONTROL */ #include "input.h" @@ -94,7 +94,7 @@ extern int get_tty_state PARAMS((void)); #endif #if !defined (HAVE_GETPW_DECLS) -extern struct passwd *getpwuid (); +extern struct passwd *getpwuid (uid_t); #endif /* !HAVE_GETPW_DECLS */ #if !defined (errno) @@ -117,7 +117,8 @@ COMMAND *global_command = (COMMAND *)NULL; /* Information about the current user. */ struct user_info current_user = { - (uid_t)-1, (uid_t)-1, (gid_t)-1, (gid_t)-1, + (uid_t)-1, (uid_t)-1, (uid_t)-1, + (gid_t)-1, (gid_t)-1, (gid_t)-1, (char *)NULL, (char *)NULL, (char *)NULL }; @@ -161,12 +162,17 @@ int autocd = 0; int startup_state = 0; int reading_shell_script = 0; +int ssh_reading_startup_files = 0; + /* Special debugging helper. */ int debugging_login_shell = 0; /* The environment that the shell passes to other commands. */ char **shell_environment; +/* Non-zero when we are parsing a command, managed by parse_command/parse_comsub */ +int parsing_command = 0; + /* Non-zero when we are executing a top-level command. */ int executing = 0; @@ -193,8 +199,8 @@ int have_devfd = HAVE_DEV_FD; int have_devfd = 0; #endif -/* The name of the .(shell)rc file. */ -static char *bashrc_file = DEFAULT_BASHRC; +/* The name of the .(shell)rc file, DEFAULT_BASHRC is sourced by default */ +static char *bashrc_file; /* Non-zero means to act more like the Bourne shell on startup. */ static int act_like_sh; @@ -288,10 +294,8 @@ char **subshell_envp; char *exec_argv0; -#if defined (BUFFERED_INPUT) /* The file descriptor from which the shell is reading input. */ int default_buffered_input = -1; -#endif /* The following two variables are not static so they can show up in $-. */ int read_from_stdin; /* -s flag supplied */ @@ -310,42 +314,44 @@ static FILE *default_input; static STRING_INT_ALIST *shopt_alist; static int shopt_ind = 0, shopt_len = 0; -static int parse_long_options PARAMS((char **, int, int)); -static int parse_shell_options PARAMS((char **, int, int)); -static int bind_args PARAMS((char **, int, int, int)); +static int parse_long_options (char **, int, int); +static int parse_shell_options (char **, int, int); +static int bind_args (char **, int, int, int); -static void start_debugger PARAMS((void)); +static void start_debugger (void); -static void add_shopt_to_alist PARAMS((char *, int)); -static void run_shopt_alist PARAMS((void)); +static void add_shopt_to_alist (char *, int); +static void run_shopt_alist (void); -static void execute_env_file PARAMS((char *)); -static void run_startup_files PARAMS((void)); -static int open_shell_script PARAMS((char *)); -static void set_bash_input PARAMS((void)); -static int run_one_command PARAMS((char *)); +static void execute_env_file (char *); +static void execute_profile_file (void); +static void execute_bashrc_file (void); +static void run_startup_files (void); +static int open_shell_script (char *); +static void set_bash_input (void); +static int run_one_command (char *); #if defined (WORDEXP_OPTION) -static int run_wordexp PARAMS((char *)); +static int run_wordexp (char *); #endif -static int uidget PARAMS((void)); +static int uidget (void); -static void set_option_defaults PARAMS((void)); -static void reset_option_defaults PARAMS((void)); +static void set_option_defaults (void); +static void reset_option_defaults (void); -static void init_interactive PARAMS((void)); -static void init_noninteractive PARAMS((void)); -static void init_interactive_script PARAMS((void)); +static void init_interactive (void); +static void init_noninteractive (void); +static void init_interactive_script (void); -static void set_shell_name PARAMS((char *)); -static void shell_initialize PARAMS((void)); -static void shell_reinitialize PARAMS((void)); +static void set_shell_name (char *); +static void shell_initialize (void); +static void shell_reinitialize (void); -static void show_shell_usage PARAMS((FILE *, int)); +static void show_shell_usage (FILE *, int); #ifdef __CYGWIN__ static void -_cygwin32_check_tmp () +_cygwin32_check_tmp (void) { struct stat sb; @@ -362,14 +368,10 @@ _cygwin32_check_tmp () #if defined (NO_MAIN_ENV_ARG) /* systems without third argument to main() */ int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) #else /* !NO_MAIN_ENV_ARG */ int -main (argc, argv, env) - int argc; - char **argv, **env; +main (int argc, char **argv, char **env) #endif /* !NO_MAIN_ENV_ARG */ { register int i; @@ -379,11 +381,11 @@ main (argc, argv, env) #endif volatile int locally_skip_execution; volatile int arg_index, top_level_arg_index; -#ifdef __OPENNT +#if defined (__OPENNT) || defined (__MVS__) char **env; env = environ; -#endif /* __OPENNT */ +#endif /* __OPENNT || __MVS__ */ USE_VAR(argc); USE_VAR(argv); @@ -439,12 +441,10 @@ main (argc, argv, env) arg_index = 1; if (arg_index > argc) arg_index = argc; - command_execution_string = shell_script_filename = (char *)NULL; + command_execution_string = shell_script_filename = NULL; want_pending_command = locally_skip_execution = read_from_stdin = 0; default_input = stdin; -#if defined (BUFFERED_INPUT) default_buffered_input = -1; -#endif /* Fix for the `infinite process creation' bug when running shell scripts from startup files on System V. */ @@ -526,7 +526,7 @@ main (argc, argv, env) } arg_index++; } - this_command_name = (char *)NULL; + this_command_name = NULL; /* First, let the outside world know about our interactive status. A shell is interactive if the `-i' flag was given, or if all of @@ -627,6 +627,8 @@ main (argc, argv, env) gnu_error_format = 1; } + compat_init (); + top_level_arg_index = arg_index; old_errexit_flag = exit_immediately_on_error; @@ -700,6 +702,7 @@ main (argc, argv, env) arg_index = bind_args (argv, arg_index, argc, 1); /* $1 ... $n */ /* The startup files are run with `set -e' temporarily disabled. */ + ssh_reading_startup_files = 0; /* paranoia */ if (locally_skip_execution == 0 && running_setuid == 0) { char *t; @@ -759,7 +762,7 @@ main (argc, argv, env) start_debugger (); #if defined (ONESHOT) - executing = 1; + executing = shell_initialized = 1; run_one_command (command_execution_string); exit_shell (last_command_exit_value); #else /* ONESHOT */ @@ -776,11 +779,7 @@ main (argc, argv, env) { /* In this mode, bash is reading a script from stdin, which is a pipe or redirected file. */ -#if defined (BUFFERED_INPUT) default_buffered_input = fileno (stdin); /* == 0 */ -#else - setbuf (default_input, (char *)NULL); -#endif /* !BUFFERED_INPUT */ read_from_stdin = 1; } else if (top_level_arg_index == argc) /* arg index before startup files */ @@ -835,9 +834,7 @@ main (argc, argv, env) } static int -parse_long_options (argv, arg_start, arg_end) - char **argv; - int arg_start, arg_end; +parse_long_options (char **argv, int arg_start, int arg_end) { int arg_index, longarg, i; char *arg_string; @@ -890,9 +887,7 @@ parse_long_options (argv, arg_start, arg_end) } static int -parse_shell_options (argv, arg_start, arg_end) - char **argv; - int arg_start, arg_end; +parse_shell_options (char **argv, int arg_start, int arg_end) { int arg_index; int arg_character, on_or_off, next_arg, i; @@ -985,16 +980,18 @@ parse_shell_options (argv, arg_start, arg_end) /* Exit the shell with status S. */ void -exit_shell (s) - int s; +exit_shell (int s) { fflush (stdout); /* XXX */ fflush (stderr); /* Clean up the terminal if we are in a state where it's been modified. */ #if defined (READLINE) - if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function) + if (bash_readline_initialized && RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function) +{ +itrace("exit_shell: calling rl_deprep_term_function"); (*rl_deprep_term_function) (); +} #endif if (read_tty_modified ()) read_tty_cleanup (); @@ -1040,12 +1037,11 @@ exit_shell (s) /* A wrapper for exit that (optionally) can do other things, like malloc statistics tracing. */ void -sh_exit (s) - int s; +sh_exit (int s) { #if defined (MALLOC_DEBUG) && defined (USING_BASH_MALLOC) if (malloc_trace_at_exit && (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0) - trace_malloc_stats (get_name_for_error (), (char *)NULL); + trace_malloc_stats (get_name_for_error (), NULL); /* mlocation_write_table (); */ #endif @@ -1056,8 +1052,7 @@ sh_exit (s) do any more cleanup, since a subshell is created as an exact copy of its parent. */ void -subshell_exit (s) - int s; +subshell_exit (int s) { fflush (stdout); fflush (stderr); @@ -1072,8 +1067,7 @@ subshell_exit (s) } void -set_exit_status (s) - int s; +set_exit_status (int s) { set_pipestatus_from_exit (last_command_exit_value = s); } @@ -1106,8 +1100,8 @@ set_exit_status (s) */ static void -execute_env_file (env_file) - char *env_file; + +execute_env_file (char *env_file) { char *fn; @@ -1120,27 +1114,57 @@ execute_env_file (env_file) } } +/* Execute /etc/profile and one of the personal login shell initialization files. */ +static void +execute_profile_file (void) +{ + maybe_execute_file (SYS_PROFILE, 1); + + if (act_like_sh) /* sh */ + maybe_execute_file ("~/.profile", 1); + else if ((maybe_execute_file ("~/.bash_profile", 1) == 0) && + (maybe_execute_file ("~/.bash_login", 1) == 0)) /* bash */ + maybe_execute_file ("~/.profile", 1); +} + +static void +execute_bashrc_file (void) +{ +#ifdef SYS_BASHRC +# if defined (__OPENNT) + maybe_execute_file (_prefixInstallPath(SYS_BASHRC, NULL, 0), 1); +# else + maybe_execute_file (SYS_BASHRC, 1); +# endif +#endif + + if (bashrc_file) + maybe_execute_file (bashrc_file, 1); + else + maybe_execute_file (DEFAULT_BASHRC, 1); +} + static void -run_startup_files () +run_startup_files (void) { #if defined (JOB_CONTROL) int old_job_control; #endif int sourced_login, run_by_ssh; -#if 1 /* TAG:bash-5.3 andrew.gregory.8@gmail.com 2/21/2022 */ + /* TAG:bash-5.3 andrew.gregory.8@gmail.com 2/21/2022 */ /* get the rshd/sshd case out of the way first. */ if (interactive_shell == 0 && no_rc == 0 && login_shell == 0 && - act_like_sh == 0 && command_execution_string) + act_like_sh == 0 && command_execution_string && shell_level < 2) { #ifdef SSH_SOURCE_BASHRC run_by_ssh = (find_variable ("SSH_CLIENT") != (SHELL_VAR *)0) || (find_variable ("SSH2_CLIENT") != (SHELL_VAR *)0); #else run_by_ssh = 0; -#endif #endif + ssh_reading_startup_files = 0; /* If we were run by sshd or we think we were run by rshd, execute ~/.bashrc if we are a top-level shell. */ #if 1 /* TAG:bash-5.3 */ @@ -1149,14 +1173,9 @@ run_startup_files () if (isnetconn (fileno (stdin) && shell_level < 2) #endif { -#ifdef SYS_BASHRC -# if defined (__OPENNT) - maybe_execute_file (_prefixInstallPath(SYS_BASHRC, NULL, 0), 1); -# else - maybe_execute_file (SYS_BASHRC, 1); -# endif -#endif - maybe_execute_file (bashrc_file, 1); + ssh_reading_startup_files = 1; + execute_bashrc_file (); + ssh_reading_startup_files = 0; return; } } @@ -1184,15 +1203,7 @@ run_startup_files () /* Execute /etc/profile and one of the personal login shell initialization files. */ if (no_profile == 0) - { - maybe_execute_file (SYS_PROFILE, 1); - - if (act_like_sh) /* sh */ - maybe_execute_file ("~/.profile", 1); - else if ((maybe_execute_file ("~/.bash_profile", 1) == 0) && - (maybe_execute_file ("~/.bash_login", 1) == 0)) /* bash */ - maybe_execute_file ("~/.profile", 1); - } + execute_profile_file (); sourced_login = 1; } @@ -1217,32 +1228,13 @@ run_startup_files () /* We don't execute .bashrc for login shells. */ no_rc++; - /* Execute /etc/profile and one of the personal login shell - initialization files. */ if (no_profile == 0) - { - maybe_execute_file (SYS_PROFILE, 1); - - if (act_like_sh) /* sh */ - maybe_execute_file ("~/.profile", 1); - else if ((maybe_execute_file ("~/.bash_profile", 1) == 0) && - (maybe_execute_file ("~/.bash_login", 1) == 0)) /* bash */ - maybe_execute_file ("~/.profile", 1); - } + execute_profile_file (); } /* bash */ if (act_like_sh == 0 && no_rc == 0) - { -#ifdef SYS_BASHRC -# if defined (__OPENNT) - maybe_execute_file (_prefixInstallPath(SYS_BASHRC, NULL, 0), 1); -# else - maybe_execute_file (SYS_BASHRC, 1); -# endif -#endif - maybe_execute_file (bashrc_file, 1); - } + execute_bashrc_file (); /* sh */ else if (act_like_sh && privileged_mode == 0 && sourced_env++ == 0) execute_env_file (get_string_value ("ENV")); @@ -1264,8 +1256,7 @@ run_startup_files () value of `restricted'. Don't actually do anything, just return a boolean value. */ int -shell_is_restricted (name) - char *name; +shell_is_restricted (char *name) { char *temp; @@ -1285,8 +1276,7 @@ shell_is_restricted (name) Do this also if `restricted' is already set to 1; maybe the shell was started with -r. */ int -maybe_make_restricted (name) - char *name; +maybe_make_restricted (char *name) { char *temp; @@ -1313,22 +1303,33 @@ maybe_make_restricted (name) /* Fetch the current set of uids and gids and return 1 if we're running setuid or setgid. */ static int -uidget () +uidget (void) { uid_t u; - u = getuid (); + u = current_user.uid; + +#if HAVE_SETRESUID + (void) getresuid (&current_user.uid, &current_user.euid, &current_user.saveuid); +#else + current_user.uid = getuid (); + current_user.euid = geteuid (); +#endif + +#if HAVE_SETRESGID + (void) getresgid (&current_user.gid, &current_user.egid, &current_user.savegid); +#else + current_user.gid = getgid (); + current_user.egid = getegid (); +#endif + if (current_user.uid != u) { FREE (current_user.user_name); FREE (current_user.shell); FREE (current_user.home_dir); - current_user.user_name = current_user.shell = current_user.home_dir = (char *)NULL; + current_user.user_name = current_user.shell = current_user.home_dir = NULL; } - current_user.uid = u; - current_user.gid = getgid (); - current_user.euid = geteuid (); - current_user.egid = getegid (); /* See whether or not we are running setuid or setgid. */ return (current_user.uid != current_user.euid) || @@ -1336,15 +1337,19 @@ uidget () } void -disable_priv_mode () +disable_priv_mode (void) { - int e; + int e, r; + r = 0; #if HAVE_SETRESUID - if (setresuid (current_user.uid, current_user.uid, current_user.uid) < 0) + if (current_user.euid != current_user.uid || current_user.saveuid != current_user.uid) + r = setresuid (current_user.uid, current_user.uid, current_user.uid) ; #else - if (setuid (current_user.uid) < 0) + if (current_user.euid != current_user.uid) + r = setuid (current_user.uid); #endif + if (r < 0) { e = errno; sys_error (_("cannot set uid to %d: effective uid %d"), current_user.uid, current_user.euid); @@ -1353,21 +1358,28 @@ disable_priv_mode () exit (e); #endif } + + r = 0; #if HAVE_SETRESGID - if (setresgid (current_user.gid, current_user.gid, current_user.gid) < 0) + if (current_user.egid != current_user.gid || current_user.savegid != current_user.gid) + r = setresgid (current_user.gid, current_user.gid, current_user.gid); #else - if (setgid (current_user.gid) < 0) + if (current_user.egid != current_user.gid) + r = setgid (current_user.gid); #endif + if (r < 0) sys_error (_("cannot set gid to %d: effective gid %d"), current_user.gid, current_user.egid); current_user.euid = current_user.uid; current_user.egid = current_user.gid; + + current_user.saveuid = current_user.uid; + current_user.savegid = current_user.gid; } #if defined (WORDEXP_OPTION) static int -run_wordexp (words) - char *words; +run_wordexp (char *words) { int code, nw, nb; WORD_LIST *wl, *tl, *result; @@ -1443,8 +1455,7 @@ run_wordexp (words) /* Run one command, given as the argument to the -c option. Tell parse_and_execute not to fork for a simple command. */ static int -run_one_command (command) - char *command; +run_one_command (char *command) { int code; @@ -1475,9 +1486,7 @@ run_one_command (command) #endif /* ONESHOT */ static int -bind_args (argv, arg_start, arg_end, start_index) - char **argv; - int arg_start, arg_end, start_index; +bind_args (char **argv, int arg_start, int arg_end, int start_index) { register int i; WORD_LIST *args, *tl; @@ -1529,14 +1538,14 @@ bind_args (argv, arg_start, arg_end, start_index) } void -unbind_args () +unbind_args (void) { remember_args ((WORD_LIST *)NULL, 1); pop_args (); /* Reset BASH_ARGV and BASH_ARGC */ } static void -start_debugger () +start_debugger (void) { #if defined (DEBUGGER) && defined (DEBUGGER_START_FILE) int old_errexit; @@ -1561,8 +1570,7 @@ start_debugger () } static int -open_shell_script (script_name) - char *script_name; +open_shell_script (char *script_name) { int fd, e, fd_is_tty; char *filename, *path_filename, *t; @@ -1608,7 +1616,7 @@ open_shell_script (script_name) if (exec_argv0) { free (exec_argv0); - exec_argv0 = (char *)NULL; + exec_argv0 = NULL; } if (file_isdir (filename)) @@ -1692,22 +1700,8 @@ open_shell_script (script_name) not match with ours. */ fd = move_to_high_fd (fd, 1, -1); -#if defined (BUFFERED_INPUT) default_buffered_input = fd; SET_CLOSE_ON_EXEC (default_buffered_input); -#else /* !BUFFERED_INPUT */ - default_input = fdopen (fd, "r"); - - if (default_input == 0) - { - file_error (filename); - exit (EX_NOTFOUND); - } - - SET_CLOSE_ON_EXEC (fd); - if (fileno (default_input) != fd) - SET_CLOSE_ON_EXEC (fileno (default_input)); -#endif /* !BUFFERED_INPUT */ /* Just about the only way for this code to be executed is if something like `bash -i /dev/stdin' is executed. */ @@ -1716,12 +1710,7 @@ open_shell_script (script_name) dup2 (fd, 0); close (fd); fd = 0; -#if defined (BUFFERED_INPUT) default_buffered_input = 0; -#else - fclose (default_input); - default_input = stdin; -#endif } else if (forced_interactive && fd_is_tty == 0) /* But if a script is called with something like `bash -i scriptname', @@ -1737,24 +1726,20 @@ open_shell_script (script_name) /* Initialize the input routines for the parser. */ static void -set_bash_input () +set_bash_input (void) { /* Make sure the fd from which we are reading input is not in no-delay mode. */ -#if defined (BUFFERED_INPUT) if (interactive == 0) sh_unset_nodelay_mode (default_buffered_input); else -#endif /* !BUFFERED_INPUT */ sh_unset_nodelay_mode (fileno (stdin)); /* with_input_from_stdin really means `with_input_from_readline' */ if (interactive && no_line_editing == 0) with_input_from_stdin (); -#if defined (BUFFERED_INPUT) else if (interactive == 0) with_input_from_buffered_stream (default_buffered_input, dollar_vars[0]); -#endif /* BUFFERED_INPUT */ else with_input_from_stream (default_input, dollar_vars[0]); } @@ -1764,10 +1749,8 @@ set_bash_input () is non-zero, we close default_buffered_input even if it's the standard input (fd 0). */ void -unset_bash_input (check_zero) - int check_zero; +unset_bash_input (int check_zero) { -#if defined (BUFFERED_INPUT) if ((check_zero && default_buffered_input >= 0) || (check_zero == 0 && default_buffered_input > 0)) { @@ -1775,13 +1758,6 @@ unset_bash_input (check_zero) default_buffered_input = bash_input.location.buffered_fd = -1; bash_input.type = st_none; /* XXX */ } -#else /* !BUFFERED_INPUT */ - if (default_input) - { - fclose (default_input); - default_input = (FILE *)NULL; - } -#endif /* !BUFFERED_INPUT */ } @@ -1790,8 +1766,7 @@ unset_bash_input (check_zero) #endif static void -set_shell_name (argv0) - char *argv0; +set_shell_name (char *argv0) { /* Here's a hack. If the name of this shell is "sh", then don't do any startup files; just try to be more like /bin/sh. */ @@ -1826,7 +1801,7 @@ set_shell_name (argv0) them after the call to list_minus_o_options (). */ /* XXX - could also do this for histexp_flag, jobs_m_flag */ static void -set_option_defaults () +set_option_defaults (void) { #if defined (HISTORY) enable_history_list = 0; @@ -1834,7 +1809,7 @@ set_option_defaults () } static void -reset_option_defaults () +reset_option_defaults (void) { #if defined (HISTORY) enable_history_list = -1; @@ -1842,7 +1817,7 @@ reset_option_defaults () } static void -init_interactive () +init_interactive (void) { expand_aliases = expaliases_flag = 1; interactive_shell = startup_state = interactive = 1; @@ -1857,7 +1832,7 @@ init_interactive () } static void -init_noninteractive () +init_noninteractive (void) { #if defined (HISTORY) if (enable_history_list == -1) /* set default */ @@ -1875,7 +1850,7 @@ init_noninteractive () } static void -init_interactive_script () +init_interactive_script (void) { #if defined (HISTORY) if (enable_history_list == -1) @@ -1889,7 +1864,7 @@ init_interactive_script () } void -get_current_user_info () +get_current_user_info (void) { struct passwd *entry; @@ -1925,7 +1900,7 @@ get_current_user_info () /* Do whatever is necessary to initialize the shell. Put new initializations in here. */ static void -shell_initialize () +shell_initialize (void) { char hostname[256]; int should_be_restricted; @@ -2005,7 +1980,7 @@ shell_initialize () had some initialization performed. This is supposed to reset the world back to a pristine state, as if we had been exec'ed. */ static void -shell_reinitialize () +shell_reinitialize (void) { /* The default shell prompts. */ primary_prompt = PPROMPT; @@ -2021,13 +1996,25 @@ shell_reinitialize () no_rc = no_profile = 1; /* Things that get 0. */ - login_shell = make_login_shell = interactive = executing = 0; - debugging = do_version = line_number = last_command_exit_value = 0; - forced_interactive = interactive_shell = 0; + login_shell = make_login_shell = executing = 0; + debugging = debugging_mode = 0; + do_version = line_number = last_command_exit_value = 0; + forced_interactive = interactive_shell = interactive = 0; subshell_environment = running_in_background = 0; expand_aliases = expaliases_flag = 0; bash_argv_initialized = 0; + /* 20240120 */ + startup_state = reading_shell_script = 0; + /* XXX - inherit posixly_correct? */ + + /* The shell has never done this. Should it? */ +#if 0 + reset_shell_flags (); + reset_shell_options (); + reset_shopt_options (); +#endif + /* XXX - should we set jobs_m_flag to 0 here? */ #if defined (HISTORY) @@ -2040,7 +2027,7 @@ shell_reinitialize () /* Ensure that the default startup file is used. (Except that we don't execute this file for reinitialized shells). */ - bashrc_file = DEFAULT_BASHRC; + bashrc_file = NULL; /* Delete all variables and functions. They will be reinitialized when the environment is parsed. */ @@ -2057,9 +2044,7 @@ shell_reinitialize () } static void -show_shell_usage (fp, extra) - FILE *fp; - int extra; +show_shell_usage (FILE *fp, int extra) { int i; char *set_opts, *s, *t; @@ -2108,9 +2093,7 @@ show_shell_usage (fp, extra) } static void -add_shopt_to_alist (opt, on_or_off) - char *opt; - int on_or_off; +add_shopt_to_alist (char *opt, int on_or_off) { if (shopt_ind >= shopt_len) { @@ -2123,7 +2106,7 @@ add_shopt_to_alist (opt, on_or_off) } static void -run_shopt_alist () +run_shopt_alist (void) { register int i; diff --git a/shell.h b/shell.h index 6e44bca69..b9d259a51 100644 --- a/shell.h +++ b/shell.h @@ -1,6 +1,6 @@ /* shell.h -- The data structures used by the shell */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,7 +29,6 @@ #include "general.h" #include "error.h" #include "variables.h" -#include "arrayfunc.h" #include "quit.h" #include "maxpath.h" #include "unwind_prot.h" @@ -37,6 +36,7 @@ #include "make_cmd.h" #include "ocache.h" #include "subst.h" +#include "arrayfunc.h" #include "sig.h" #include "pathnames.h" #include "externs.h" @@ -73,6 +73,7 @@ extern int EOF_Reached; #define EX_BADASSIGN 260 /* variable assignment error */ #define EX_EXPFAIL 261 /* word expansion failed */ #define EX_DISKFALLBACK 262 /* fall back to disk command from builtin */ +#define EX_UTILERROR 263 /* Posix special builtin utility error */ /* Flag values that control parameter pattern substitution. */ #define MATCH_ANY 0x000 @@ -96,9 +97,11 @@ extern char *command_execution_string; extern int debugging_mode; extern int executing, login_shell; +extern int parsing_command; extern int interactive, interactive_shell; extern int startup_state; extern int reading_shell_script; +extern int ssh_reading_startup_files; extern int shell_initialized; extern int bash_argv_initialized; extern int subshell_environment; @@ -107,6 +110,8 @@ extern int indirection_level; extern int shell_compatibility_level; extern int running_under_emacs; +extern int pretty_print_mode; + extern int posixly_correct; extern int no_line_editing; @@ -144,8 +149,8 @@ struct fd_bitmap { /* Information about the current user. */ struct user_info { - uid_t uid, euid; - gid_t gid, egid; + uid_t uid, euid, saveuid; + gid_t gid, egid, savegid; char *user_name; char *shell; /* shell from the password file */ char *home_dir; @@ -171,6 +176,7 @@ typedef struct _sh_parser_state_t /* parsing state */ int parser_state; int *token_state; + int parsing_command; char *token; size_t token_buffer_size; @@ -228,13 +234,15 @@ typedef struct _sh_input_line_state_t } sh_input_line_state_t; /* Let's try declaring these here. */ -extern void shell_ungets PARAMS((char *)); -extern void rewind_input_string PARAMS((void)); +extern void shell_ungets (char *); +extern void rewind_input_string (void); -extern char *parser_remaining_input PARAMS((void)); +extern char *parser_remaining_input (void); -extern sh_parser_state_t *save_parser_state PARAMS((sh_parser_state_t *)); -extern void restore_parser_state PARAMS((sh_parser_state_t *)); +extern sh_parser_state_t *save_parser_state (sh_parser_state_t *); +extern void restore_parser_state (sh_parser_state_t *); +extern void flush_parser_state (sh_parser_state_t *); +extern void uw_restore_parser_state (void *); -extern sh_input_line_state_t *save_input_line_state PARAMS((sh_input_line_state_t *)); -extern void restore_input_line_state PARAMS((sh_input_line_state_t *)); +extern sh_input_line_state_t *save_input_line_state (sh_input_line_state_t *); +extern void restore_input_line_state (sh_input_line_state_t *); diff --git a/sig.c b/sig.c index 78980aacc..2d200c608 100644 --- a/sig.c +++ b/sig.c @@ -1,6 +1,6 @@ /* sig.c - interface for shell signal handlers and signal initialization. */ -/* Copyright (C) 1994-2021 Free Software Foundation, Inc. +/* Copyright (C) 1994-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -24,7 +24,7 @@ #if defined (HAVE_UNISTD_H) # ifdef _MINIX -# include <sys/types.h> +initialize_shell_signals (# include <sys/types.h> # endif # include <unistd.h> #endif @@ -55,11 +55,11 @@ # include "bashhist.h" #endif -extern void initialize_siglist PARAMS((void)); -extern void set_original_signal PARAMS((int, SigHandler *)); +extern void initialize_siglist (void); +extern void set_original_signal (int, SigHandler *); #if !defined (JOB_CONTROL) -extern void initialize_job_signals PARAMS((void)); +extern void initialize_job_signals (void); #endif /* Non-zero after SIGINT. */ @@ -74,6 +74,8 @@ volatile sig_atomic_t sigterm_received = 0; /* Set to the value of any terminating signal received. */ volatile sig_atomic_t terminating_signal = 0; +volatile int builtin_catch_sigpipe = 0; + /* The environment at the top-level R-E loop. We use this in the case of error return. */ procenv_t top_level; @@ -93,12 +95,11 @@ int terminate_immediately = 0; static SigHandler *old_winch = (SigHandler *)SIG_DFL; #endif -static void initialize_shell_signals PARAMS((void)); -static void kill_shell PARAMS((int)); +static void initialize_shell_signals (void); +static void kill_shell (int); void -initialize_signals (reinit) - int reinit; +initialize_signals (int reinit) { initialize_shell_signals (); initialize_job_signals (); @@ -227,7 +228,7 @@ static int termsigs_initialized = 0; this when a trap is defined for EXIT (0) or when trap is run to display signal dispositions. */ void -initialize_terminating_signals () +initialize_terminating_signals (void) { register int i; #if defined (HAVE_POSIX_SIGNALS) @@ -253,6 +254,8 @@ initialize_terminating_signals () /* If we've already trapped it, don't do anything. */ if (signal_is_trapped (XSIG (i))) continue; + if (signal_is_async_ignored (XSIG (i))) + continue; sigaction (XSIG (i), &act, &oact); XHANDLER(i) = oact.sa_handler; @@ -307,7 +310,7 @@ initialize_terminating_signals () } static void -initialize_shell_signals () +initialize_shell_signals (void) { if (interactive) initialize_terminating_signals (); @@ -339,7 +342,7 @@ initialize_shell_signals () } void -reset_terminating_signals () +reset_terminating_signals (void) { register int i; #if defined (HAVE_POSIX_SIGNALS) @@ -381,7 +384,7 @@ reset_terminating_signals () jump_to_top_level from a builtin command context. XXX - might want to also call reset_parser here. */ void -top_level_cleanup () +top_level_cleanup (void) { /* Clean up string parser environment. */ while (parse_and_execute_level) @@ -393,12 +396,14 @@ top_level_cleanup () run_unwind_protects (); loop_level = continuing = breaking = funcnest = 0; - executing_list = comsub_ignore_return = return_catch_flag = wait_intr_flag = 0; + interrupt_execution = retain_fifos = executing_funsub = 0; + comsub_ignore_return = return_catch_flag = wait_intr_flag = 0; + variable_context = 0; /* XXX */ } /* What to do when we've been interrupted, and it is safe to handle it. */ void -throw_to_top_level () +throw_to_top_level (void) { int print_newline = 0; @@ -445,7 +450,12 @@ throw_to_top_level () #if defined (READLINE) if (interactive) - bashline_reset (); + { + if (RL_ISSTATE (RL_STATE_SIGHANDLER) == 0) + rl_cleanup_after_signal (); + bashline_reset (); + } + #endif /* READLINE */ #if defined (PROCESS_SUBSTITUTION) @@ -454,7 +464,11 @@ throw_to_top_level () run_unwind_protects (); loop_level = continuing = breaking = funcnest = 0; - executing_list = comsub_ignore_return = return_catch_flag = wait_intr_flag = 0; + interrupt_execution = retain_fifos = executing_funsub = 0; + comsub_ignore_return = return_catch_flag = wait_intr_flag = 0; + variable_context = 0; + + executing = parsing_command = 0; if (interactive && print_newline) { @@ -473,14 +487,13 @@ throw_to_top_level () /* This is just here to isolate the longjmp calls. */ void -jump_to_top_level (value) - int value; +jump_to_top_level (int value) { sh_longjmp (top_level, value); } void -restore_sigmask () +restore_sigmask (void) { #if defined (JOB_CONTROL) || defined (HAVE_POSIX_SIGNALS) sigprocmask (SIG_SETMASK, &top_level_mask, (sigset_t *)NULL); @@ -490,8 +503,7 @@ restore_sigmask () static int handling_termsig = 0; sighandler -termsig_sighandler (sig) - int sig; +termsig_sighandler (int sig) { /* If we get called twice with the same signal before handling it, terminate right away. */ @@ -566,14 +578,15 @@ termsig_sighandler (sig) RL_STATE_TERMPREPPED is possibly redundant. */ if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED)) bashline_set_event_hook (); + else if (RL_ISSTATE (RL_STATE_COMPLETING|RL_STATE_DISPATCHING)) + bashline_set_event_hook (); #endif SIGRETURN (0); } void -termsig_handler (sig) - int sig; +termsig_handler (int sig) { /* Simple semaphore to keep this function from being executed multiple times. Since we no longer are running as a signal handler, we don't @@ -584,6 +597,9 @@ termsig_handler (sig) handling_termsig = terminating_signal; /* for termsig_sighandler */ terminating_signal = 0; /* keep macro from re-testing true. */ + if (sig == SIGPIPE && builtin_catch_sigpipe) + sigpipe_handler (sig); + /* I don't believe this condition ever tests true. */ if (sig == SIGINT && signal_is_trapped (SIGINT)) run_interrupt_trap (0); @@ -604,6 +620,7 @@ termsig_handler (sig) if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)))) hangup_all_jobs (); + /* XXX - should we also suppress this call if SUBSHELL_PIPE? */ if ((subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0) end_job_control (); #endif /* JOB_CONTROL */ @@ -617,7 +634,8 @@ termsig_handler (sig) /* Reset execution context */ loop_level = continuing = breaking = funcnest = 0; - executing_list = comsub_ignore_return = return_catch_flag = wait_intr_flag = 0; + interrupt_execution = retain_fifos = executing_funsub = 0; + comsub_ignore_return = return_catch_flag = wait_intr_flag = 0; run_exit_trap (); /* XXX - run exit trap possibly in signal context? */ @@ -625,8 +643,7 @@ termsig_handler (sig) } static void -kill_shell (sig) - int sig; +kill_shell (int sig) { int i, core; sigset_t mask; @@ -645,7 +662,7 @@ kill_shell (sig) if (dollar_dollar_pid != 1) exit (128+sig); /* just in case the kill fails? */ - /* We get here only under extraordinary circumstances. */ + /* We get here only under extraordinarily rare circumstances. */ /* We are PID 1, and the kill above failed to kill the process. We assume this means that we are running as an init process in a pid namespace @@ -672,8 +689,7 @@ kill_shell (sig) /* What we really do when SIGINT occurs. */ sighandler -sigint_sighandler (sig) - int sig; +sigint_sighandler (int sig) { #if defined (MUST_REINSTALL_SIGHANDLERS) signal (sig, sigint_sighandler); @@ -707,12 +723,15 @@ sigint_sighandler (sig) set_exit_status (128 + sig); throw_to_top_level (); } + #if defined (READLINE) /* Set the event hook so readline will call it after the signal handlers finish executing, so if this interrupted character input we can get quick response. */ else if (RL_ISSTATE (RL_STATE_SIGHANDLER)) bashline_set_event_hook (); + else if (RL_ISSTATE (RL_STATE_COMPLETING|RL_STATE_DISPATCHING)) + bashline_set_event_hook (); #endif SIGRETURN (0); @@ -720,8 +739,7 @@ sigint_sighandler (sig) #if defined (SIGWINCH) sighandler -sigwinch_sighandler (sig) - int sig; +sigwinch_sighandler (int sig) { #if defined (MUST_REINSTALL_SIGHANDLERS) set_signal_handler (SIGWINCH, sigwinch_sighandler); @@ -732,7 +750,7 @@ sigwinch_sighandler (sig) #endif /* SIGWINCH */ void -set_sigwinch_handler () +set_sigwinch_handler (void) { #if defined (SIGWINCH) old_winch = set_signal_handler (SIGWINCH, sigwinch_sighandler); @@ -740,7 +758,7 @@ set_sigwinch_handler () } void -unset_sigwinch_handler () +unset_sigwinch_handler (void) { #if defined (SIGWINCH) set_signal_handler (SIGWINCH, old_winch); @@ -748,19 +766,26 @@ unset_sigwinch_handler () } sighandler -sigterm_sighandler (sig) - int sig; +sigterm_sighandler (int sig) { sigterm_received = 1; /* XXX - counter? */ SIGRETURN (0); } +void +sigpipe_handler (int sig) +{ + handling_termsig = 0; + builtin_catch_sigpipe = 0; + last_command_exit_value = 128 + sig; + throw_to_top_level (); +} + /* Signal functions used by the rest of the code. */ #if !defined (HAVE_POSIX_SIGNALS) /* Perform OPERATION on NEWSET, perhaps leaving information in OLDSET. */ -sigprocmask (operation, newset, oldset) - int operation, *newset, *oldset; +sigprocmask (int operation, int *newset, int *oldset) { int old, new; @@ -798,9 +823,7 @@ sigprocmask (operation, newset, oldset) #endif SigHandler * -set_signal_handler (sig, handler) - int sig; - SigHandler *handler; +set_signal_handler (int sig, SigHandler *handler) { struct sigaction act, oact; diff --git a/sig.h b/sig.h index 0217be53d..8d197be6d 100644 --- a/sig.h +++ b/sig.h @@ -1,6 +1,6 @@ /* sig.h -- header file for signal handler definitions. */ -/* Copyright (C) 1994-2021 Free Software Foundation, Inc. +/* Copyright (C) 1994-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -32,7 +32,7 @@ #endif #define sighandler void -typedef void SigHandler PARAMS((int)); +typedef void SigHandler (int); #define SIGRETURN(n) return @@ -42,7 +42,7 @@ typedef void SigHandler PARAMS((int)); #if !defined (HAVE_POSIX_SIGNALS) # define set_signal_handler(sig, handler) (SigHandler *)signal (sig, handler) #else -extern SigHandler *set_signal_handler PARAMS((int, SigHandler *)); /* in sig.c */ +extern SigHandler *set_signal_handler (int, SigHandler *); /* in sig.c */ #endif /* _POSIX_VERSION */ #if !defined (SIGCHLD) && defined (SIGCLD) @@ -108,29 +108,33 @@ extern volatile sig_atomic_t sigterm_received; extern int interrupt_immediately; /* no longer used */ extern int terminate_immediately; +extern volatile int builtin_catch_sigpipe; /* not used yet */ + /* Functions from sig.c. */ -extern sighandler termsig_sighandler PARAMS((int)); -extern void termsig_handler PARAMS((int)); -extern sighandler sigint_sighandler PARAMS((int)); -extern void initialize_signals PARAMS((int)); -extern void initialize_terminating_signals PARAMS((void)); -extern void reset_terminating_signals PARAMS((void)); -extern void top_level_cleanup PARAMS((void)); -extern void throw_to_top_level PARAMS((void)); -extern void jump_to_top_level PARAMS((int)) __attribute__((__noreturn__)); -extern void restore_sigmask PARAMS((void)); - -extern sighandler sigwinch_sighandler PARAMS((int)); -extern void set_sigwinch_handler PARAMS((void)); -extern void unset_sigwinch_handler PARAMS((void)); - -extern sighandler sigterm_sighandler PARAMS((int)); +extern sighandler termsig_sighandler (int); +extern void termsig_handler (int); +extern sighandler sigint_sighandler (int); +extern void initialize_signals (int); +extern void initialize_terminating_signals (void); +extern void reset_terminating_signals (void); +extern void top_level_cleanup (void); +extern void throw_to_top_level (void); +extern void jump_to_top_level (int) __attribute__((__noreturn__)); +extern void restore_sigmask (void); + +extern sighandler sigwinch_sighandler (int); +extern void set_sigwinch_handler (void); +extern void unset_sigwinch_handler (void); + +extern sighandler sigterm_sighandler (int); + +extern void sigpipe_handler (int); /* Functions defined in trap.c. */ -extern SigHandler *set_sigint_handler PARAMS((void)); -extern SigHandler *trap_to_sighandler PARAMS((int)); -extern sighandler trap_handler PARAMS((int)); +extern SigHandler *set_sigint_handler (void); +extern SigHandler *trap_to_sighandler (int); +extern sighandler trap_handler (int); -extern int block_trapped_signals PARAMS((sigset_t *, sigset_t *)); -extern int unblock_trapped_signals PARAMS((sigset_t *)); +extern int block_trapped_signals (sigset_t *, sigset_t *); +extern int unblock_trapped_signals (sigset_t *); #endif /* _SIG_H_ */ diff --git a/siglist.c b/siglist.c index ec706c90b..4c3bf6f44 100644 --- a/siglist.c +++ b/siglist.c @@ -1,6 +1,6 @@ /* siglist.c -- signal list for those machines that don't have one. */ -/* Copyright (C) 1989-2021 Free Software Foundation, Inc. +/* Copyright (C) 1989-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -38,7 +38,7 @@ char *sys_siglist[NSIG]; void -initialize_siglist () +initialize_siglist (void) { register int i; diff --git a/siglist.h b/siglist.h index 321c20c46..6ac84efb4 100644 --- a/siglist.h +++ b/siglist.h @@ -1,6 +1,6 @@ /* siglist.h -- encapsulate various definitions for sys_siglist */ -/* Copyright (C) 1993, 2001, 2005, 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993, 2001, 2005, 2008-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -38,7 +38,7 @@ extern char *sys_siglist[]; #endif /* !strsignal && !HAVE_STRSIGNAL */ #if !defined (strsignal) && !HAVE_DECL_STRSIGNAL -extern char *strsignal PARAMS((int)); +extern char *strsignal (int); #endif #endif /* _SIGLIST_H */ diff --git a/stringlib.c b/stringlib.c index 73304966f..1aa7abe6c 100644 --- a/stringlib.c +++ b/stringlib.c @@ -1,6 +1,6 @@ /* stringlib.c - Miscellaneous string functions. */ -/* Copyright (C) 1996-2009 Free Software Foundation, Inc. +/* Copyright (C) 1996-2009,2022-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -48,10 +48,7 @@ /* Find STRING in ALIST, a list of string key/int value pairs. If FLAGS is 1, STRING is treated as a pattern and matched using strmatch. */ int -find_string_in_alist (string, alist, flags) - char *string; - STRING_INT_ALIST *alist; - int flags; +find_string_in_alist (char *string, STRING_INT_ALIST *alist, int flags) { register int i; int r; @@ -75,10 +72,7 @@ find_string_in_alist (string, alist, flags) corresponding string. Allocates memory for the returned string. FLAGS is currently ignored, but reserved. */ char * -find_token_in_alist (token, alist, flags) - int token; - STRING_INT_ALIST *alist; - int flags; +find_token_in_alist (int token, STRING_INT_ALIST *alist, int flags) { register int i; @@ -87,14 +81,11 @@ find_token_in_alist (token, alist, flags) if (alist[i].token == token) return (savestring (alist[i].word)); } - return ((char *)NULL); + return (NULL); } int -find_index_in_alist (string, alist, flags) - char *string; - STRING_INT_ALIST *alist; - int flags; +find_index_in_alist (char *string, STRING_INT_ALIST *alist, int flags) { register int i; int r; @@ -124,12 +115,10 @@ find_index_in_alist (string, alist, flags) /* Cons a new string from STRING starting at START and ending at END, not including END. */ char * -substring (string, start, end) - const char *string; - int start, end; +substring (const char *string, size_t start, size_t end) { - register int len; - register char *result; + size_t len; + char *result; len = end - start; result = (char *)xmalloc (len + 1); @@ -142,25 +131,28 @@ substring (string, start, end) replace all occurrences, otherwise replace only the first. This returns a new string; the caller should free it. */ char * -strsub (string, pat, rep, global) - char *string, *pat, *rep; - int global; +strsub (const char *string, const char *pat, const char *rep, int global) { size_t patlen, replen, templen, tempsize, i; int repl; - char *temp, *r; + char *temp, *r;; patlen = strlen (pat); replen = strlen (rep); - for (temp = (char *)NULL, i = templen = tempsize = 0, repl = 1; string[i]; ) + for (temp = NULL, i = templen = tempsize = 0, repl = 1; string[i]; ) { if (repl && STREQN (string + i, pat, patlen)) { if (replen) RESIZE_MALLOCED_BUFFER (temp, templen, replen, tempsize, (replen * 2)); - for (r = rep; *r; ) /* can rep == "" */ +#if 0 + for (r = (char *)rep; *r; ) /* can rep == "" */ temp[templen++] = *r++; +#else + memcpy (temp + templen, rep, replen); + templen += replen; +#endif i += patlen ? patlen : 1; /* avoid infinite recursion */ repl = global != 0; @@ -183,13 +175,10 @@ strsub (string, pat, rep, global) globbing. Backslash may be used to quote C. If (FLAGS & 2) we allow backslash to escape backslash as well. */ char * -strcreplace (string, c, text, flags) - char *string; - int c; - const char *text; - int flags; +strcreplace (const char *string, int c, const char *text, int flags) { - char *ret, *p, *r, *t; + char *ret, *r, *t; + const char *p; size_t len, rlen, ind, tlen; int do_glob, escape_backslash; @@ -248,8 +237,7 @@ strcreplace (string, c, text, flags) /* Remove all leading whitespace from STRING. This includes newlines. STRING should be terminated with a zero. */ void -strip_leading (string) - char *string; +strip_leading (char *string) { char *start = string; @@ -269,27 +257,58 @@ strip_leading (string) newlines. If NEWLINES_ONLY is non-zero, only trailing newlines are removed. STRING should be terminated with a zero. */ void -strip_trailing (string, len, newlines_only) - char *string; - int len; - int newlines_only; +strip_trailing (char *string, int len, int newlines_only) { while (len >= 0) { if ((newlines_only && string[len] == '\n') || (!newlines_only && whitespace (string[len]))) - len--; + { + len--; +#ifdef __MSYS__ + if (newlines_only && string[len + 1] == '\n' && string[len] == '\r') + len--; +#endif + } else break; } string[len + 1] = '\0'; } +int +str_firstdiff (const char *s, const char *t) +{ + int n; + + if (s == 0 || t == 0 || *s == '\0' || *t == '\0') + return 0; + for (n = 0; s[n] && t[n] && s[n] == t[n]; n++) + ; + return n; +} + +/* This returns the index in OLD of a common suffix of OLD and NEW */ +int +str_lastsame (const char *old, const char *new) +{ + const char *o, *n; + + if (old == 0 || *old == '\0' || new == 0 || *new == '\0') + return 0; /* XXX */ + + o = old + STRLEN (old) - 1; + n = new + STRLEN (new) - 1; + + while (o > old && n > new && (*o == *n)) + o--, n--; + + return (o - old); +} + /* A wrapper for bcopy that can be prototyped in general.h */ void -xbcopy (s, d, n) - char *s, *d; - int n; +xbcopy (const void *s, void *d, size_t n) { FASTCOPY (s, d, n); } diff --git a/subst.c b/subst.c index 2012e1fd9..a29eb5beb 100644 --- a/subst.c +++ b/subst.c @@ -4,7 +4,7 @@ /* ``Have a little faith, there's magic in the night. You ain't a beauty, but, hey, you're alright.'' */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -43,12 +43,17 @@ #include "posixstat.h" #include "bashintl.h" +#ifdef __CYGWIN__ +# define NEED_SH_SETLINEBUF_DECL +#endif + #include "shell.h" #include "parser.h" #include "redir.h" #include "flags.h" #include "jobs.h" #include "execute_cmd.h" +#include "builtins.h" #include "filecntl.h" #include "trap.h" #include "pathexp.h" @@ -144,11 +149,12 @@ extern int errno; /* 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 PARAMS((char *, int)); +typedef WORD_LIST *EXPFUNC (const 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; +int last_command_subst_status = 0; /* Variables used to keep track of the characters in IFS. */ SHELL_VAR *ifs_var; @@ -189,7 +195,10 @@ int fail_glob_expansion; /* If non-zero, perform `&' substitution on the replacement string in the pattern substitution word expansion. */ -int patsub_replacement = 1; +int patsub_replacement = PATSUB_REPLACE_DEFAULT; + +/* Are we executing a ${ command; } nofork comsub? */ +int executing_funsub = 0; /* Extern functions and variables from different files. */ extern struct fd_bitmap *current_fds_to_close; @@ -197,12 +206,8 @@ extern int wordexp_only; extern int singlequote_translations; extern int extended_quote; -#if defined (JOB_CONTROL) && defined (PROCESS_SUBSTITUTION) -extern PROCESS *last_procsub_child; -#endif - #if !defined (HAVE_WCSDUP) && defined (HANDLE_MULTIBYTE) -extern wchar_t *wcsdup PARAMS((const wchar_t *)); +extern wchar_t *wcsdup (const wchar_t *); #endif #if 0 @@ -233,145 +238,150 @@ static int expand_no_split_dollar_star = 0; without any leading variable assignments. */ static WORD_LIST *garglist = (WORD_LIST *)NULL; -static char *quoted_substring PARAMS((char *, int, int)); -static int quoted_strlen PARAMS((char *)); -static char *quoted_strchr PARAMS((char *, int, int)); +static char *quoted_substring (char *, int, int); +static int quoted_strlen (char *); +static char *quoted_strchr (char *, int, int); -static char *expand_string_if_necessary PARAMS((char *, int, EXPFUNC *)); -static inline char *expand_string_to_string_internal PARAMS((char *, int, EXPFUNC *)); -static WORD_LIST *call_expand_word_internal PARAMS((WORD_DESC *, int, int, int *, int *)); -static WORD_LIST *expand_string_internal PARAMS((char *, int)); -static WORD_LIST *expand_string_leave_quoted PARAMS((char *, int)); -static WORD_LIST *expand_string_for_rhs PARAMS((char *, int, int, int, int *, int *)); -static WORD_LIST *expand_string_for_pat PARAMS((char *, int, int *, int *)); +static char *expand_string_if_necessary (char *, int, EXPFUNC *); +static inline char *expand_string_to_string_internal (char *, int, EXPFUNC *); +static WORD_LIST *call_expand_word_internal (WORD_DESC *, int, int, int *, int *); +static WORD_LIST *expand_string_internal (const char *, int); +static WORD_LIST *expand_string_leave_quoted (const char *, int); +static WORD_LIST *expand_string_for_rhs (const char *, int, int, int, int *, int *); +static WORD_LIST *expand_string_for_pat (const char *, int, int *, int *); -static char *quote_escapes_internal PARAMS((const char *, int)); +static char *quote_escapes_internal (const char *, int); -static WORD_LIST *list_quote_escapes PARAMS((WORD_LIST *)); -static WORD_LIST *list_dequote_escapes PARAMS((WORD_LIST *)); +static char *quote_ifs (const char *); +static WORD_LIST *list_quote_ifs (WORD_LIST *); -static char *make_quoted_char PARAMS((int)); -static WORD_LIST *quote_list PARAMS((WORD_LIST *)); +static WORD_LIST *list_quote_escapes (WORD_LIST *); +static WORD_LIST *list_dequote_escapes (WORD_LIST *); -static int unquoted_substring PARAMS((char *, char *)); -static int unquoted_member PARAMS((int, char *)); +static char *make_quoted_char (int); +static WORD_LIST *quote_list (WORD_LIST *); + +static int unquoted_substring (const char *, const char *); +static int unquoted_member (int, const char *); #if defined (ARRAY_VARS) -static SHELL_VAR *do_compound_assignment PARAMS((char *, char *, int)); +static SHELL_VAR *do_compound_assignment (const char *, char *, int); #endif -static int do_assignment_internal PARAMS((const WORD_DESC *, int)); +static int do_assignment_internal (const WORD_DESC *, int); -static char *string_extract_verbatim PARAMS((char *, size_t, int *, char *, int)); -static char *string_extract PARAMS((char *, int *, char *, int)); -static char *string_extract_double_quoted PARAMS((char *, int *, int)); -static inline char *string_extract_single_quoted PARAMS((char *, int *, int)); -static inline int skip_single_quoted PARAMS((const char *, size_t, int, int)); -static int skip_double_quoted PARAMS((char *, size_t, int, int)); -static char *extract_delimited_string PARAMS((char *, int *, char *, char *, char *, int)); -static char *extract_heredoc_dolbrace_string PARAMS((char *, int *, int, int)); -static char *extract_dollar_brace_string PARAMS((char *, int *, int, int)); -static int skip_matched_pair PARAMS((const char *, int, int, int, int)); +static char *string_extract_verbatim (const char *, size_t, size_t *, char *, int); +static char *string_extract (const char *, size_t *, const char *, int); +static char *string_extract_double_quoted (const char *, size_t *, int); +static inline char *string_extract_single_quoted (const char *, size_t *, int); +static inline size_t skip_single_quoted (const char *, size_t, size_t, int); +static int skip_double_quoted (const char *, size_t, size_t, int); +static char *extract_delimited_string (const char *, size_t *, char *, char *, char *, int); +static char *extract_heredoc_dolbrace_string (const char *, size_t *, int, int); +static int skip_matched_pair (const char *, int, int, int, int); -static char *pos_params PARAMS((char *, int, int, int, int)); +static char *pos_params (const char *, int, int, int, int); -static unsigned char *mb_getcharlens PARAMS((char *, int)); +static unsigned char *mb_getcharlens (const char *, int); -static char *remove_upattern PARAMS((char *, char *, int)); +static char *remove_upattern (char *, char *, int); #if defined (HANDLE_MULTIBYTE) -static wchar_t *remove_wpattern PARAMS((wchar_t *, size_t, wchar_t *, int)); +static wchar_t *remove_wpattern (wchar_t *, size_t, wchar_t *, int); #endif -static char *remove_pattern PARAMS((char *, char *, int)); +static char *remove_pattern (char *, char *, int); -static int match_upattern PARAMS((char *, char *, int, char **, char **)); +static int match_upattern (char *, char *, int, char **, char **); #if defined (HANDLE_MULTIBYTE) -static int match_wpattern PARAMS((wchar_t *, char **, size_t, wchar_t *, int, char **, char **)); -#endif -static int match_pattern PARAMS((char *, char *, int, char **, char **)); -static int getpatspec PARAMS((int, char *)); -static char *getpattern PARAMS((char *, int, int)); -static char *variable_remove_pattern PARAMS((char *, char *, int, int)); -static char *list_remove_pattern PARAMS((WORD_LIST *, char *, int, int, int)); -static char *parameter_list_remove_pattern PARAMS((int, char *, int, int)); +static int match_wpattern (wchar_t *, char **, size_t, wchar_t *, int, char **, char **); +#endif +static int match_pattern (char *, char *, int, char **, char **); +static int getpatspec (int, const char *); +static char *getpattern (char *, int, int); +static char *variable_remove_pattern (char *, char *, int, int); +static char *list_remove_pattern (WORD_LIST *, char *, int, int, int); +static char *parameter_list_remove_pattern (int, char *, int, int); #ifdef ARRAY_VARS -static char *array_remove_pattern PARAMS((SHELL_VAR *, char *, int, int, int)); +static char *array_remove_pattern (SHELL_VAR *, char *, int, int, int); #endif -static char *parameter_brace_remove_pattern PARAMS((char *, char *, array_eltstate_t *, char *, int, int, int)); +static char *parameter_brace_remove_pattern (char *, char *, array_eltstate_t *, char *, int, int, int); -static char *string_var_assignment PARAMS((SHELL_VAR *, char *)); +static char *string_var_assignment (SHELL_VAR *, char *); #if defined (ARRAY_VARS) -static char *array_var_assignment PARAMS((SHELL_VAR *, int, int, int)); +static char *array_var_assignment (SHELL_VAR *, int, int, int); #endif -static char *pos_params_assignment PARAMS((WORD_LIST *, int, int)); -static char *string_transform PARAMS((int, SHELL_VAR *, char *)); -static char *list_transform PARAMS((int, SHELL_VAR *, WORD_LIST *, int, int)); -static char *parameter_list_transform PARAMS((int, int, int)); +static char *pos_params_assignment (WORD_LIST *, int, int); +static char *string_transform (int, SHELL_VAR *, char *); +static char *list_transform (int, SHELL_VAR *, WORD_LIST *, int, int); +static char *parameter_list_transform (int, int, int); #if defined ARRAY_VARS -static char *array_transform PARAMS((int, SHELL_VAR *, int, int)); +static char *array_transform (int, SHELL_VAR *, int, int); #endif -static char *parameter_brace_transform PARAMS((char *, char *, array_eltstate_t *, char *, int, int, int, int)); -static int valid_parameter_transform PARAMS((char *)); +static char *parameter_brace_transform (char *, char *, array_eltstate_t *, char *, int, int, int, int); +static int valid_parameter_transform (const char *); -static char *process_substitute PARAMS((char *, int)); +static char *process_substitute (char *, int); -static char *optimize_cat_file PARAMS((REDIRECT *, int, int, int *)); -static char *read_comsub PARAMS((int, int, int, int *)); +static char *optimize_cat_file (REDIRECT *, int, int, int *); +static char *read_comsub (int, int, int, int *); #ifdef ARRAY_VARS -static arrayind_t array_length_reference PARAMS((char *)); +static arrayind_t array_length_reference (const char *); #endif -static int valid_brace_expansion_word PARAMS((char *, int)); -static int chk_atstar PARAMS((char *, int, int, int *, int *)); -static int chk_arithsub PARAMS((const char *, int)); +static int valid_brace_expansion_word (const char *, int); +static int chk_atstar (const char *, int, int, int *, int *); +static int chk_arithsub (const char *, int); -static WORD_DESC *parameter_brace_expand_word PARAMS((char *, int, int, int, array_eltstate_t *)); -static char *parameter_brace_find_indir PARAMS((char *, int, int, int)); -static WORD_DESC *parameter_brace_expand_indir PARAMS((char *, int, int, int, int *, int *)); -static WORD_DESC *parameter_brace_expand_rhs PARAMS((char *, char *, int, int, int, int *, int *)); -static void parameter_brace_expand_error PARAMS((char *, char *, int)); +static WORD_DESC *parameter_brace_expand_word (char *, int, int, int, array_eltstate_t *); +static char *parameter_brace_find_indir (char *, int, int, int); +static WORD_DESC *parameter_brace_expand_indir (char *, int, int, int, int *, int *); +static WORD_DESC *parameter_brace_expand_rhs (char *, char *, int, int, int, int *, int *); +static void parameter_brace_expand_error (char *, char *, int); -static int valid_length_expression PARAMS((char *)); -static intmax_t parameter_brace_expand_length PARAMS((char *)); +static int valid_length_expression (const char *); +static intmax_t parameter_brace_expand_length (char *); -static char *skiparith PARAMS((char *, int)); -static int verify_substring_values PARAMS((SHELL_VAR *, char *, char *, int, intmax_t *, intmax_t *)); -static int get_var_and_type PARAMS((char *, char *, array_eltstate_t *, int, int, SHELL_VAR **, char **)); -static char *mb_substring PARAMS((char *, int, int)); -static char *parameter_brace_substring PARAMS((char *, char *, array_eltstate_t *, char *, int, int, int)); +static char *skiparith (char *, int); +static int verify_substring_values (SHELL_VAR *, char *, char *, int, intmax_t *, intmax_t *); +static int get_var_and_type (char *, char *, array_eltstate_t *, int, int, SHELL_VAR **, char **); +static char *mb_subfstring (const char *, int, int); +static char *parameter_brace_substring (char *, char *, array_eltstate_t *, char *, int, int, int); -static int shouldexp_replacement PARAMS((char *)); +static int shouldexp_replacement (const char *); -static char *pos_params_pat_subst PARAMS((char *, char *, char *, int)); +static char *pos_params_pat_subst (char *, char *, char *, int); -static char *expand_string_for_patsub PARAMS((char *, int)); -static char *parameter_brace_patsub PARAMS((char *, char *, array_eltstate_t *, char *, int, int, int)); +static char *expand_string_for_patsub (char *, int); +static char *parameter_brace_patsub (char *, char *, array_eltstate_t *, char *, int, int, int); -static char *pos_params_casemod PARAMS((char *, char *, int, int)); -static char *parameter_brace_casemod PARAMS((char *, char *, array_eltstate_t *, int, char *, int, int, int)); +static char *pos_params_casemod (char *, char *, int, int); +static char *parameter_brace_casemod (char *, char *, array_eltstate_t *, int, char *, int, int, int); -static WORD_DESC *parameter_brace_expand PARAMS((char *, int *, int, int, int *, int *)); -static WORD_DESC *param_expand PARAMS((char *, int *, int, int *, int *, int *, int *, int)); +static WORD_DESC *parameter_brace_expand (char *, size_t *, int, int, int *, int *); +static WORD_DESC *param_expand (char *, size_t *, int, int *, int *, int *, int *, int); -static WORD_LIST *expand_word_internal PARAMS((WORD_DESC *, int, int, int *, int *)); +static WORD_LIST *expand_word_internal (WORD_DESC *, int, int, int *, int *); -static WORD_LIST *word_list_split PARAMS((WORD_LIST *)); +static WORD_LIST *word_list_split (WORD_LIST *); -static void exp_jump_to_top_level PARAMS((int)); +static void exp_jump_to_top_level (int); -static WORD_LIST *separate_out_assignments PARAMS((WORD_LIST *)); -static WORD_LIST *glob_expand_word_list PARAMS((WORD_LIST *, int)); +static WORD_LIST *separate_out_assignments (WORD_LIST *); +static WORD_LIST *glob_expand_word_list (WORD_LIST *, int); #ifdef BRACE_EXPANSION -static WORD_LIST *brace_expand_word_list PARAMS((WORD_LIST *, int)); +static WORD_LIST *brace_expand_word_list (WORD_LIST *, int); #endif #if defined (ARRAY_VARS) -static int make_internal_declare PARAMS((char *, char *, char *)); -static void expand_compound_assignment_word PARAMS((WORD_LIST *, int)); -static WORD_LIST *expand_declaration_argument PARAMS((WORD_LIST *, WORD_LIST *)); +static int make_internal_declare (const char *, const char *, const char *, const char *); +static void expand_compound_assignment_word (WORD_LIST *, int); +static WORD_LIST *expand_declaration_argument (WORD_LIST *, WORD_LIST *); #endif -static WORD_LIST *shell_expand_word_list PARAMS((WORD_LIST *, int)); -static WORD_LIST *expand_word_list_internal PARAMS((WORD_LIST *, int)); +static WORD_LIST *shell_expand_word_list (WORD_LIST *, int); +static WORD_LIST *expand_word_list_internal (WORD_LIST *, int); + +static void posix_variable_assignment_error (int); +static void bash_variable_assignment_error (int); -static int do_assignment_statements PARAMS((WORD_LIST *, char *, int)); +static int do_assignment_statements (WORD_LIST *, char *, int); /* **************************************************************** */ /* */ @@ -381,8 +391,7 @@ static int do_assignment_statements PARAMS((WORD_LIST *, char *, int)); #if defined (DEBUG) void -dump_word_flags (flags) - int flags; +dump_word_flags (int flags) { int f; @@ -546,9 +555,7 @@ dump_word_flags (flags) #ifdef INCLUDE_UNUSED static char * -quoted_substring (string, start, end) - char *string; - int start, end; +quoted_substring (char *string, int start, int end) { register int len, l; register char *result, *s, *r; @@ -589,8 +596,7 @@ quoted_substring (string, start, end) #ifdef INCLUDE_UNUSED /* Return the length of S, skipping over quoted characters */ static int -quoted_strlen (s) - char *s; +quoted_strlen (char *s) { register char *p; int i; @@ -617,9 +623,7 @@ quoted_strlen (s) 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; +quoted_strchr (char *s, int c, int flags) { register char *p; @@ -642,12 +646,10 @@ quoted_strchr (s, c, flags) /* 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; +unquoted_member (int character, const char *string) { - size_t slen; - int sindex, c; + size_t slen, sindex; + int c; DECLARE_MBSTATE; slen = strlen (string); @@ -683,11 +685,10 @@ unquoted_member (character, string) /* Return 1 if SUBSTR appears in an unquoted portion of STRING. */ static int -unquoted_substring (substr, string) - char *substr, *string; +unquoted_substring (const char *substr, const char *string) { - size_t slen; - int sindex, c, sublen; + size_t sindex, slen, sublen; + int c; DECLARE_MBSTATE; if (substr == 0 || *substr == '\0') @@ -738,17 +739,14 @@ unquoted_substring (substr, string) 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; - size_t *indx; - size_t *size; +sub_append_string (char *source, char *target, size_t *indx, size_t *size) { if (source) { size_t n, srclen; srclen = STRLEN (source); - if (srclen >= (*size - *indx)) + if ((srclen + *indx) >= *size) { n = srclen + *indx; n = (n + DEFAULT_ARRAY_SIZE) - (n % DEFAULT_ARRAY_SIZE); @@ -769,11 +767,7 @@ sub_append_string (source, target, indx, size) /* 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; - char *target; - size_t *indx; - size_t *size; +sub_append_number (intmax_t number, char *target, size_t *indx, size_t *size) { char *temp; @@ -792,19 +786,15 @@ sub_append_number (number, target, indx, size) update SINDEX. If (flags & SX_REQMATCH) is non-zero, the string must contain a closing character from CHARLIST. */ static char * -string_extract (string, sindex, charlist, flags) - char *string; - int *sindex; - char *charlist; - int flags; +string_extract (const char *string, size_t *sindex, const char *charlist, int flags) { - register int c, i; + int c; int found; - size_t slen; + size_t i, slen; char *temp; DECLARE_MBSTATE; - slen = (MB_CUR_MAX > 1) ? strlen (string + *sindex) + *sindex : 0; + slen = (locale_mb_cur_max > 1) ? strlen (string + *sindex) + *sindex : 0; i = *sindex; found = 0; while (c = string[i]) @@ -857,16 +847,13 @@ string_extract (string, sindex, charlist, flags) 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, flags) - char *string; - int *sindex, flags; +string_extract_double_quoted (const char *string, size_t *sindex, int flags) { - size_t slen; - char *send; - int j, i, t; + size_t i, j, t, si, slen; + const char *send; unsigned char c; char *temp, *ret; /* The new string we return. */ - int pass_next, backquote, si; /* State variables for the machine. */ + int pass_next, backquote; /* State variables for the machine. */ int dquote; int stripdq; DECLARE_MBSTATE; @@ -959,6 +946,8 @@ add_one_character: si = i + 2; if (string[i + 1] == LPAREN) ret = extract_command_subst (string, &si, (flags & SX_COMPLETE)); + else if (string[i + 1] == LBRACE && FUNSUB_CHAR (string[si])) + ret = extract_function_subst (string, &si, Q_DOUBLE_QUOTES, (flags & SX_COMPLETE)); else ret = extract_dollar_brace_string (string, &si, Q_DOUBLE_QUOTES, 0); @@ -970,7 +959,7 @@ add_one_character: if (ret == 0 && no_longjmp_on_fatal_error) { free_ret = 0; - ret = string + i + 2; + ret = (char *)string + i + 2; } /* XXX - CHECK_STRING_OVERRUN here? */ @@ -1020,15 +1009,12 @@ add_one_character: /* This should really be another option to string_extract_double_quoted. */ static int -skip_double_quoted (string, slen, sind, flags) - char *string; - size_t slen; - int sind; - int flags; +skip_double_quoted (const char *string, size_t slen, size_t sind, int flags) { - int c, i; + int c; + size_t i, si; char *ret; - int pass_next, backquote, si; + int pass_next, backquote; DECLARE_MBSTATE; pass_next = backquote = 0; @@ -1065,8 +1051,10 @@ skip_double_quoted (string, slen, sind, flags) si = i + 2; if (string[i + 1] == LPAREN) ret = extract_command_subst (string, &si, SX_NOALLOC|(flags&SX_COMPLETE)); + else if (string[i + 1] == LBRACE && FUNSUB_CHAR (string[si])) + ret = extract_function_subst (string, &si, Q_DOUBLE_QUOTES, SX_NOALLOC|(flags & SX_COMPLETE)); else - ret = extract_dollar_brace_string (string, &si, Q_DOUBLE_QUOTES, SX_NOALLOC); + ret = extract_dollar_brace_string (string, &si, Q_DOUBLE_QUOTES, SX_NOALLOC|(flags&SX_COMPLETE)); /* These can consume the entire string if they are unterminated */ CHECK_STRING_OVERRUN (i, si, slen, c); @@ -1095,19 +1083,15 @@ skip_double_quoted (string, slen, sind, flags) the closing single quote. ALLOWESC allows the single quote to be quoted by a backslash; it's not used yet. */ static inline char * -string_extract_single_quoted (string, sindex, allowesc) - char *string; - int *sindex; - int allowesc; +string_extract_single_quoted (const char *string, size_t *sindex, int allowesc) { - register int i; - size_t slen; + size_t i, slen; char *t; int pass_next; DECLARE_MBSTATE; /* Don't need slen for ADVANCE_CHAR unless multibyte chars possible. */ - slen = (MB_CUR_MAX > 1) ? strlen (string + *sindex) + *sindex : 0; + slen = (locale_mb_cur_max > 1) ? strlen (string + *sindex) + *sindex : 0; i = *sindex; pass_next = 0; while (string[i]) @@ -1137,44 +1121,35 @@ string_extract_single_quoted (string, sindex, allowesc) /* Skip over a single-quoted string. We overload the SX_COMPLETE flag to mean that we are splitting out words for completion and have encountered a $'...' string, which allows backslash-escaped single quotes. */ -static inline int -skip_single_quoted (string, slen, sind, flags) - const char *string; - size_t slen; - int sind; - int flags; +static inline size_t +skip_single_quoted (const char *string, size_t slen, size_t sind, int flags) { - register int c; + size_t si; DECLARE_MBSTATE; - c = sind; - while (string[c] && string[c] != '\'') + si = sind; + while (string[si] && string[si] != '\'') { - if ((flags & SX_COMPLETE) && string[c] == '\\' && string[c+1] == '\'' && string[c+2]) - ADVANCE_CHAR (string, slen, c); - ADVANCE_CHAR (string, slen, c); + if ((flags & SX_COMPLETE) && string[si] == '\\' && string[si+1] == '\'' && string[si+2]) + ADVANCE_CHAR (string, slen, si); + ADVANCE_CHAR (string, slen, si); } - if (string[c]) - c++; - return c; + if (string[si]) + si++; + return si; } /* 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, slen, sindex, charlist, flags) - char *string; - size_t slen; - int *sindex; - char *charlist; - int flags; +string_extract_verbatim (const char *string, size_t slen, size_t *sindex, char *charlist, int flags) { - register int i; + size_t i, c; #if defined (HANDLE_MULTIBYTE) wchar_t *wcharlist; + mbstate_t mbstmp; #endif - int c; char *temp; DECLARE_MBSTATE; @@ -1190,9 +1165,10 @@ string_extract_verbatim (string, slen, sindex, charlist, flags) *sindex */ if (*charlist == 0) { - temp = string + *sindex; - c = (*sindex == 0) ? slen : STRLEN (temp); - temp = savestring (temp); + const char *xtemp; + xtemp = string + *sindex; + c = (*sindex == 0) ? slen : STRLEN (xtemp); + temp = savestring (xtemp); *sindex += c; return temp; } @@ -1226,11 +1202,15 @@ string_extract_verbatim (string, slen, sindex, charlist, flags) if (locale_utf8locale && slen > i && UTF8_SINGLEBYTE (string[i])) mblength = (string[i] != 0) ? 1 : 0; else - mblength = MBLEN (string + i, slen - i); + { + mbstmp = state; + mblength = MBRLEN (string + i, slen - i, &mbstmp); + } if (mblength > 1) { wchar_t wc; - mblength = mbtowc (&wc, string + i, slen - i); + mbstmp = state; + mblength = mbrtowc (&wc, string + i, slen - i, &mbstmp); if (MB_INVALIDCH (mblength)) { if (MEMBER (c, charlist)) @@ -1275,19 +1255,37 @@ string_extract_verbatim (string, slen, sindex, charlist, flags) Make (SINDEX) get the position of the matching ")". ) XFLAGS is additional flags to pass to other extraction functions. */ char * -extract_command_subst (string, sindex, xflags) - char *string; - int *sindex; - int xflags; +extract_command_subst (const char *string, size_t *sindex, int xflags) { char *ret; + char *xstr; if (string[*sindex] == LPAREN || (xflags & SX_COMPLETE)) return (extract_delimited_string (string, sindex, "$(", "(", ")", xflags|SX_COMMAND)); /*)*/ else { xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0); - ret = xparse_dolparen (string, string+*sindex, sindex, xflags); + xstr = (char *)string + *sindex; + ret = xparse_dolparen (string, xstr, sindex, xflags); + return ret; + } +} + +/* Take a ${Ccommand} where C is a character that introduces a function + substitution and extract the string. */ +char * +extract_function_subst (const char *string, size_t *sindex, int quoted, int xflags) +{ + char *ret; + char *xstr; + + if (string[*sindex] == LBRACE || (xflags & SX_COMPLETE)) + return (extract_dollar_brace_string (string, sindex, quoted, xflags|SX_COMMAND)); + else + { + xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0); + xstr = (char *)string + *sindex; + ret = xparse_dolparen (string, xstr, sindex, xflags|SX_FUNSUB); return ret; } } @@ -1296,9 +1294,7 @@ extract_command_subst (string, sindex, xflags) 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; +extract_arithmetic_subst (const char *string, size_t *sindex) { return (extract_delimited_string (string, sindex, "$[", "[", "]", 0)); /*]*/ } @@ -1308,18 +1304,22 @@ extract_arithmetic_subst (string, sindex) 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, xflags) - char *string; - char *starter; - int *sindex; - int xflags; +extract_process_subst (const char *string, char *starter, size_t *sindex, int xflags) { + char *ret; + char *xstr; #if 0 /* XXX - check xflags&SX_COMPLETE here? */ - return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND)); + if (flags & SX_COMPLETE) + return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND)); + else #else - xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0); - return (xparse_dolparen (string, string+*sindex, sindex, xflags)); + { + xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0); + xstr = (char *)string + *sindex; + ret = xparse_dolparen (string, xstr, sindex, xflags); + return ret; + } #endif } #endif /* PROCESS_SUBSTITUTION */ @@ -1329,11 +1329,9 @@ extract_process_subst (string, starter, sindex, xflags) each caller verifies that the last character in STRING is a right paren, we don't even need to call extract_delimited_string. */ char * -extract_array_assignment_list (string, sindex) - char *string; - int *sindex; +extract_array_assignment_list (const char *string, size_t *sindex) { - int slen; + size_t slen; char *ret; slen = strlen (string); @@ -1356,17 +1354,13 @@ extract_array_assignment_list (string, sindex) 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; +extract_delimited_string (const char *string, size_t *sindex, char *opener, char *alt_opener, char *closer, int flags) { - int i, c, si; - size_t slen; + int c, xflags; + size_t i, si, slen; char *t, *result; int pass_character, nesting_level, in_comment; - int len_closer, len_opener, len_alt_opener; + size_t len_closer, len_opener, len_alt_opener; DECLARE_MBSTATE; slen = strlen (string + *sindex) + *sindex; @@ -1387,7 +1381,6 @@ extract_delimited_string (string, sindex, opener, alt_opener, closer, flags) the end of the string, catch it and cut the loop. */ if (i > slen) { - i = slen; c = string[i = slen]; break; } @@ -1437,6 +1430,16 @@ extract_delimited_string (string, sindex, opener, alt_opener, closer, flags) continue; } + /* Process alternate form of nested command substitution. */ + if ((flags & SX_COMMAND) && string[i] == '$' && string[i+1] == LBRACE && FUNSUB_CHAR (string[i+2])) + { + si = i + 2; + t = extract_function_subst (string, &si, 0, flags|SX_NOALLOC); + CHECK_STRING_OVERRUN (i, si, slen, c); + i = si + 1; + continue; + } + /* Process a nested OPENER. */ if (STREQN (string + i, opener, len_opener)) { @@ -1481,8 +1484,8 @@ extract_delimited_string (string, sindex, opener, alt_opener, closer, flags) if (c == '\'' || c == '"') { si = i + 1; - i = (c == '\'') ? skip_single_quoted (string, slen, si, 0) - : skip_double_quoted (string, slen, si, 0); + i = (c == '\'') ? skip_single_quoted (string, slen, si, flags) + : skip_double_quoted (string, slen, si, flags); continue; } @@ -1528,14 +1531,13 @@ extract_delimited_string (string, sindex, opener, alt_opener, closer, flags) This needs to match the logic in parse.y:parse_matched_pair so we get consistent behavior between here-documents and double-quoted strings. */ static char * -extract_heredoc_dolbrace_string (string, sindex, quoted, flags) - char *string; - int *sindex, quoted, flags; +extract_heredoc_dolbrace_string (const char *string, size_t *sindex, int quoted, int flags) { - register int i, c; - size_t slen, tlen, result_index, result_size; - int pass_character, nesting_level, si, dolbrace_state; - char *result, *t, *send; + register int c; + size_t i, si, slen, tlen, result_index, result_size; + int pass_character, nesting_level, dolbrace_state; + char *result, *t; + const char *send; DECLARE_MBSTATE; pass_character = 0; @@ -1575,7 +1577,7 @@ extract_heredoc_dolbrace_string (string, sindex, quoted, flags) if (c == '$' && string[i+1] == '\'') { char *ttrans; - int ttranslen; + size_t ttranslen; if ((posixly_correct || extended_quote == 0) && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2) { @@ -1620,7 +1622,7 @@ extract_heredoc_dolbrace_string (string, sindex, quoted, flags) if (c == '$' && string[i+1] == '"') { char *ttrans; - int ttranslen; + size_t ttranslen; si = i + 2; t = string_extract_double_quoted (string, &si, flags); /* XXX */ @@ -1687,16 +1689,22 @@ extract_heredoc_dolbrace_string (string, sindex, quoted, flags) /* Pass the contents of new-style command substitutions and arithmetic substitutions through verbatim. */ - if (string[i] == '$' && string[i+1] == LPAREN) + if (string[i] == '$' && (string[i+1] == LPAREN || (string[i+1] == LBRACE && FUNSUB_CHAR (string[i+2])))) { + int open; + si = i + 2; - t = extract_command_subst (string, &si, flags); + open = string[i+1]; + if (open == LPAREN) + t = extract_command_subst (string, &si, flags); + else + t = extract_function_subst (string, &si, quoted, flags); CHECK_STRING_OVERRUN (i, si, slen, c); tlen = si - i - 2; RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 4, result_size, 64); result[result_index++] = c; - result[result_index++] = LPAREN; + result[result_index++] = open; strncpy (result + result_index, t, tlen); result_index += tlen; result[result_index++] = string[si]; @@ -1809,14 +1817,12 @@ static int dbstate[PARAMEXPNEST_MAX]; 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; +char * +extract_dollar_brace_string (const char *string, size_t *sindex, int quoted, int flags) { register int i, c; - size_t slen; - int pass_character, nesting_level, si, dolbrace_state; + size_t si, slen; + int pass_character, nesting_level, dolbrace_state; char *result, *t; DECLARE_MBSTATE; @@ -1902,6 +1908,19 @@ extract_dollar_brace_string (string, sindex, quoted, flags) continue; } + /* Pass the contents of foreground command substitutions (funsub/valsub) + through verbatim. */ + if (string[i] == '$' && string[i+1] == LBRACE && FUNSUB_CHAR (string[i+2])) + { + si = i + 2; + t = extract_function_subst (string, &si, quoted, flags|SX_NOALLOC); + + CHECK_STRING_OVERRUN (i, si, slen, c); + + i = si + 1; + continue; + } + #if defined (PROCESS_SUBSTITUTION) /* Technically this should only work at the start of a word */ if ((string[i] == '<' || string[i] == '>') && string[i+1] == LPAREN) @@ -1996,11 +2015,10 @@ extract_dollar_brace_string (string, sindex, quoted, flags) /* Remove backslashes which are quoting backquotes from STRING. Modifies STRING, and returns a pointer to it. */ char * -de_backslash (string) - char *string; +de_backslash (char *string, int qflags) { register size_t slen; - register int i, j, prev_i; + register size_t i, j, prev_i; DECLARE_MBSTATE; slen = strlen (string); @@ -2012,6 +2030,8 @@ de_backslash (string) if (string[i] == '\\' && (string[i + 1] == '`' || string[i + 1] == '\\' || string[i + 1] == '$')) i++; + else if (posixly_correct && (qflags & Q_HERE_DOCUMENT) && string[i] == '\\' && string[i + 1] == '"') + i++; prev_i = i; ADVANCE_CHAR (string, slen, i); if (j < prev_i) @@ -2028,8 +2048,7 @@ de_backslash (string) /*UNUSED*/ /* Replace instances of \! in a string with !. */ void -unquote_bang (string) - char *string; +unquote_bang (char *string) { register int i, j; register char *temp; @@ -2060,13 +2079,11 @@ unquote_bang (string) arrayfunc.c:assign_compound_array_list()) or during execution by a builtin which has already undergone word expansion. */ static int -skip_matched_pair (string, start, open, close, flags) - const char *string; - int start, open, close, flags; +skip_matched_pair (const char *string, int start, int open, int close, int flags) { - int i, pass_next, backq, si, c, count, oldjmp; - size_t slen; - char *temp, *ss; + int pass_next, backq, c, count, oldjmp; + size_t i, si, slen; + char *temp; DECLARE_MBSTATE; slen = strlen (string + start) + start; @@ -2079,7 +2096,6 @@ skip_matched_pair (string, start, open, close, flags) i = (flags & 2) ? start : start + 1; count = 1; pass_next = backq = 0; - ss = (char *)string; while (c = string[i]) { if (pass_next) @@ -2125,8 +2141,8 @@ skip_matched_pair (string, start, open, close, flags) } else if ((flags & 1) == 0 && (c == '\'' || c == '"')) { - i = (c == '\'') ? skip_single_quoted (ss, slen, ++i, 0) - : skip_double_quoted (ss, slen, ++i, 0); + i = (c == '\'') ? skip_single_quoted (string, slen, ++i, 0) + : skip_double_quoted (string, slen, ++i, 0); /* no increment, the skip functions increment past the closing quote. */ } else if ((flags & 1) == 0 && c == '$' && (string[i+1] == LPAREN || string[i+1] == LBRACE)) @@ -2135,11 +2151,11 @@ skip_matched_pair (string, start, open, close, flags) if (string[si] == '\0') CQ_RETURN(si); - /* XXX - extract_command_subst here? */ + /* XXX - extract_command_subst/extract_function_subst here? */ if (string[i+1] == LPAREN) - temp = extract_delimited_string (ss, &si, "$(", "(", ")", SX_NOALLOC|SX_COMMAND); /* ) */ + temp = extract_delimited_string (string, &si, "$(", "(", ")", SX_NOALLOC|SX_COMMAND); /* ) */ else - temp = extract_dollar_brace_string (ss, &si, 0, SX_NOALLOC); + temp = extract_dollar_brace_string (string, &si, 0, SX_NOALLOC); CHECK_STRING_OVERRUN (i, si, slen, c); @@ -2163,9 +2179,7 @@ skip_matched_pair (string, start, open, close, flags) character past the open bracket; FLAGS & 2 == 0 means that STRING[START] points to the open bracket. skip_matched_pair knows how to deal with this. */ int -skipsubscript (string, start, flags) - const char *string; - int start, flags; +skipsubscript (const char *string, int start, int flags) { return (skip_matched_pair (string, start, '[', ']', flags)); } @@ -2178,16 +2192,12 @@ skipsubscript (string, start, flags) 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, flags) - char *string; - int start; - char *delims; - int flags; +skip_to_delim (const char *string, int start, const char *delims, int flags) { - int i, pass_next, backq, dquote, si, c, oldjmp; + int pass_next, backq, dquote, c, oldjmp; int invert, skipquote, skipcmd, noprocsub, completeflag; int arithexp, skipcol; - size_t slen; + size_t i, si, slen; char *temp, open[3]; DECLARE_MBSTATE; @@ -2287,7 +2297,7 @@ skip_to_delim (string, start, delims, flags) if (string[i+1] == LPAREN) temp = extract_delimited_string (string, &si, "$(", "(", ")", SX_NOALLOC|SX_COMMAND|completeflag); /* ) */ else - temp = extract_dollar_brace_string (string, &si, 0, SX_NOALLOC); + temp = extract_dollar_brace_string (string, &si, 0, SX_NOALLOC|completeflag); CHECK_STRING_OVERRUN (i, si, slen, c); i = si; if (string[i] == '\0') /* don't increment i past EOS in loop */ @@ -2360,15 +2370,11 @@ skip_to_delim (string, start, delims, flags) down version of skip_to_delims. The essential difference is that this resets the quoting state when starting a command substitution */ int -skip_to_histexp (string, start, delims, flags) - char *string; - int start; - char *delims; - int flags; +skip_to_histexp (const char *string, int start, const char *delims, int flags) { - int i, pass_next, backq, dquote, c, oldjmp; + int pass_next, backq, dquote, c, oldjmp; int histexp_comsub, histexp_backq, old_dquote; - size_t slen; + size_t i, slen; DECLARE_MBSTATE; slen = strlen (string + start) + start; @@ -2485,9 +2491,7 @@ skip_to_histexp (string, start, delims, flags) rl_completer_quote_characters. */ int -char_is_quoted (string, eindex) - char *string; - int eindex; +char_is_quoted (char *string, int eindex) { int i, pass_next, c, oldjmp; size_t slen; @@ -2553,13 +2557,10 @@ char_is_quoted (string, eindex) } int -unclosed_pair (string, eindex, openstr) - char *string; - int eindex; - char *openstr; +unclosed_pair (char *string, int eindex, char *openstr) { - int i, pass_next, openc, olen; - size_t slen; + int i, pass_next, openc; + size_t olen, slen; DECLARE_MBSTATE; slen = strlen (string); @@ -2608,12 +2609,7 @@ unclosed_pair (string, eindex, openstr) the index of the word containing SENTINEL. Non-whitespace chars in DELIMS delimit separate fields. This is used by programmable completion. */ WORD_LIST * -split_at_delims (string, slen, delims, sentinel, flags, nwp, cwp) - char *string; - int slen; - const char *delims; - int sentinel, flags; - int *nwp, *cwp; +split_at_delims (const char *string, int slen, const char *delims, int sentinel, int flags, int *nwp, int *cwp) { int ts, te, i, nw, cw, ifs_split, dflags; char *token, *d, *d2; @@ -2716,8 +2712,10 @@ split_at_delims (string, slen, delims, sentinel, flags, nwp, cwp) 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) + sentinel word to the current word. We don't do this if this is + being called as part of completion, since readline attempts + completion on empty words in this case. */ + if ((flags & SD_COMPLETE) == 0 && cwp && cw == -1 && sentinel == ts-1) cw = nw; /* If the cursor is at whitespace between two words, make a new, empty @@ -2776,8 +2774,7 @@ split_at_delims (string, slen, delims, sentinel, flags, nwp, cwp) /* UNUSED */ /* Extract the name of the variable to bind to from the assignment string. */ char * -assignment_name (string) - char *string; +assignment_name (const char *string) { int offset; char *temp; @@ -2799,9 +2796,7 @@ assignment_name (string) /* 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; +string_list_internal (WORD_LIST *list, char *sep) { register WORD_LIST *t; char *result, *r; @@ -2852,8 +2847,7 @@ string_list_internal (list, sep) /* Return a single string of all the words present in LIST, separating each word with a space. */ char * -string_list (list) - WORD_LIST *list; +string_list (WORD_LIST *list) { return (string_list_internal (list, " ")); } @@ -2863,8 +2857,7 @@ string_list (list) the multibyte complications. If LENP is non-null, it is set to the length of the returned string. */ char * -ifs_firstchar (lenp) - int *lenp; +ifs_firstchar (int *lenp) { char *ret; int len; @@ -2902,9 +2895,7 @@ ifs_firstchar (lenp) /* Posix interpretation 888 changes this when IFS is null by specifying that when unquoted, this expands to separate arguments */ char * -string_list_dollar_star (list, quoted, flags) - WORD_LIST *list; - int quoted, flags; +string_list_dollar_star (WORD_LIST *list, int quoted, int flags) { char *ret; #if defined (HANDLE_MULTIBYTE) @@ -2919,7 +2910,7 @@ string_list_dollar_star (list, quoted, flags) #if defined (HANDLE_MULTIBYTE) # if !defined (__GNUC__) - sep = (char *)xmalloc (MB_CUR_MAX + 1); + sep = (char *)xmalloc (locale_mb_cur_max + 1); # endif /* !__GNUC__ */ if (ifs_firstc_len == 1) { @@ -2959,10 +2950,7 @@ string_list_dollar_star (list, quoted, flags) one that we didn't handle before is assignment statement arguments to declaration builtins like `declare'. */ char * -string_list_dollar_at (list, quoted, flags) - WORD_LIST *list; - int quoted; - int flags; +string_list_dollar_at (WORD_LIST *list, int quoted, int flags) { char *ifs, *ret; #if defined (HANDLE_MULTIBYTE) @@ -2981,7 +2969,7 @@ string_list_dollar_at (list, quoted, flags) #if defined (HANDLE_MULTIBYTE) # if !defined (__GNUC__) - sep = (char *)xmalloc (MB_CUR_MAX + 1); + sep = (char *)xmalloc (locale_mb_cur_max + 1); # endif /* !__GNUC__ */ /* XXX - testing PF_ASSIGNRHS to make sure positional parameters are separated with a space even when word splitting will not occur. */ @@ -3035,10 +3023,7 @@ string_list_dollar_at (list, quoted, flags) /* This needs to fully understand the additional contexts where word splitting does not occur (W_ASSIGNRHS, etc.) */ char * -string_list_pos_params (pchar, list, quoted, pflags) - int pchar; - WORD_LIST *list; - int quoted, pflags; +string_list_pos_params (int pchar, WORD_LIST *list, int quoted, int pflags) { char *ret; WORD_LIST *tlist; @@ -3053,7 +3038,7 @@ string_list_pos_params (pchar, list, quoted, pflags) { tlist = quote_list (list); word_list_remove_quoted_nulls (tlist); - ret = string_list (tlist); + ret = string_list_dollar_star (tlist, 0, 0); } else if (pchar == '*' && quoted == 0 && ifs_is_null) /* XXX */ ret = expand_no_split_dollar_star ? string_list_dollar_star (list, quoted, 0) : string_list_dollar_at (list, quoted, 0); /* Posix interp 888 */ @@ -3127,14 +3112,13 @@ string_list_pos_params (pchar, list, quoted, pflags) : ifs_whitespace (c)) WORD_LIST * -list_string (string, separators, quoted) - register char *string, *separators; - int quoted; +list_string (char *string, char *separators, int quoted) { WORD_LIST *result; WORD_DESC *t; char *current_word, *s; - int sindex, sh_style_split, whitesep, xflags, free_word; + int sh_style_split, whitesep, xflags, free_word; + size_t sindex; size_t slen; if (!string || !*string) @@ -3156,14 +3140,10 @@ list_string (string, separators, quoted) STRING is quoted or if there are no separator characters. We use the Posix definition of whitespace as a member of the space character class in the current locale. */ -#if 0 - if (!quoted || !separators || !*separators) -#else /* issep() requires that separators be non-null, and always returns 0 if separator is the empty string, so don't bother if we get an empty string for separators. We already returned NULL above if STRING is empty. */ if (!quoted && separators && *separators) -#endif { for (s = string; *s && issep (*s) && ifs_whitespace (*s); s++); @@ -3179,7 +3159,8 @@ list_string (string, separators, quoted) skip sequences of whitespace characters as long as they are separators This obeys the field splitting rules in Posix.2. */ slen = STRLEN (string); - for (result = (WORD_LIST *)NULL, sindex = 0; string[sindex]; ) + result = NULL; + for (sindex = 0; sindex < slen; ) { /* Don't need string length in ADVANCE_CHAR unless multibyte chars are possible, but need it in string_extract_verbatim for bounds checking */ @@ -3280,13 +3261,13 @@ list_string (string, separators, quoted) #define islocalsep(c) (local_cmap[(unsigned char)(c)] != 0) char * -get_word_from_string (stringp, separators, endptr) - char **stringp, *separators, **endptr; +get_word_from_string (char **stringp, char *separators, char **endptr) { register char *s; char *current_word; - int sindex, sh_style_split, whitesep, xflags; + int sh_style_split, whitesep, xflags; unsigned char local_cmap[UCHAR_MAX+1]; /* really only need single-byte chars here */ + size_t sindex; size_t slen; if (!stringp || !*stringp || !**stringp) @@ -3379,14 +3360,12 @@ get_word_from_string (stringp, separators, endptr) 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; +strip_trailing_ifs_whitespace (char *string, char *separators, int saw_escape) { char *s; s = string + STRLEN (string) - 1; - while (s > string && ((spctabnl (*s) && isifs (*s)) || + while (s > string && ((ifs_whitespace (*s) && isifs (*s)) || (saw_escape && *s == CTLESC && spctabnl (s[1])))) s--; *++s = '\0'; @@ -3398,12 +3377,11 @@ strip_trailing_ifs_whitespace (string, separators, saw_escape) /* 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; +list_string_with_quotes (char *string) { WORD_LIST *list; char *token, *s; - size_t s_len; + size_t slen; int c, i, tokstart, len; for (s = string; s && *s && spctabnl (*s); s++) @@ -3411,7 +3389,7 @@ list_string_with_quotes (string) if (s == 0 || *s == 0) return ((WORD_LIST *)NULL); - s_len = strlen (s); + slen = strlen (s); tokstart = i = 0; list = (WORD_LIST *)NULL; while (1) @@ -3424,9 +3402,9 @@ list_string_with_quotes (string) i++; } else if (c == '\'') - i = skip_single_quoted (s, s_len, ++i, 0); + i = skip_single_quoted (s, slen, ++i, 0); else if (c == '"') - i = skip_double_quoted (s, s_len, ++i, 0); + i = skip_double_quoted (s, slen, ++i, 0); else if (c == 0 || spctabnl (c)) { /* We have found the end of a token. Make a word out of it and @@ -3456,12 +3434,10 @@ list_string_with_quotes (string) #if defined (ARRAY_VARS) static SHELL_VAR * -do_compound_assignment (name, value, flags) - char *name, *value; - int flags; +do_compound_assignment (const char *name, char *value, int flags) { SHELL_VAR *v; - int mklocal, mkassoc, mkglobal, chklocal; + int mklocal, mkassoc, mkglobal, chklocal, r; WORD_LIST *list; char *newname; /* used for local nameref references */ @@ -3485,10 +3461,11 @@ do_compound_assignment (name, value, flags) v = make_local_assoc_variable (newname, 0); else if (v == 0 || (array_p (v) == 0 && assoc_p (v) == 0) || v->context != variable_context) v = make_local_array_variable (newname, 0); - if (v) - assign_compound_array_list (v, list, flags); + r = v ? assign_compound_array_list (v, list, flags) : 0; if (list) dispose_words (list); + if (r == 0) /* compound assignment error */ + return ((SHELL_VAR *)0); } /* In a function but forcing assignment in global context. CHKLOCAL means to check for an existing local variable first. */ @@ -3506,20 +3483,21 @@ do_compound_assignment (name, value, flags) return (v); /* XXX */ } /* sanity check */ - newname = (v == 0) ? nameref_transform_name (name, flags) : name; + newname = (v == 0) ? nameref_transform_name (name, flags) : (char *)name; list = expand_compound_array_assignment (v, value, flags); if (v == 0 && mkassoc) v = make_new_assoc_variable (newname); - else if (v && mkassoc && assoc_p (v) == 0) + else if (v && mkassoc && assoc_p (v) == 0) /* convert array? */ v = convert_var_to_assoc (v); else if (v == 0) v = make_new_array_variable (newname); - else if (v && mkassoc == 0 && array_p (v) == 0) + else if (v && mkassoc == 0 && array_p (v) == 0 && assoc_p (v) == 0) v = convert_var_to_array (v); - if (v) - assign_compound_array_list (v, list, flags); + r = v ? assign_compound_array_list (v, list, flags) : 0; if (list) dispose_words (list); + if (r == 0) /* compound assignment error */ + return ((SHELL_VAR *)0); } else { @@ -3542,18 +3520,16 @@ do_compound_assignment (name, value, flags) 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 (word, expand) - const WORD_DESC *word; - int expand; +do_assignment_internal (const WORD_DESC *word, int expand) { int offset, appendop, assign_list, aflags, retval; char *name, *value, *temp; SHELL_VAR *entry; #if defined (ARRAY_VARS) char *t; - int ni; + size_t ni; #endif - const char *string; + char *string; if (word == 0 || word->word == 0) return 0; @@ -3561,7 +3537,7 @@ do_assignment_internal (word, expand) appendop = assign_list = aflags = 0; string = word->word; offset = assignment (string, 0); - name = savestring (string); + name = string; value = (char *)NULL; if (name[offset] == '=') @@ -3578,7 +3554,8 @@ do_assignment_internal (word, expand) #if defined (ARRAY_VARS) if (expand && (word->flags & W_COMPASSIGN)) { - assign_list = ni = 1; + assign_list = 1; + ni = 1; value = extract_array_assignment_list (temp, &ni); } else @@ -3604,12 +3581,20 @@ do_assignment_internal (word, expand) name[offset - 1] = '\0'; } -#define ASSIGN_RETURN(r) do { FREE (value); free (name); return (r); } while (0) +#define ASSIGN_RETURN(r) \ +do \ +{ \ + FREE (value); \ + if (appendop) name[offset - 1] = '+'; \ + name[offset] = '='; \ + return (r); \ +} while (0) if (appendop) aflags |= ASS_APPEND; #if defined (ARRAY_VARS) + /* could use strchr, since variable names can't yet contain multibyte characters */ if (t = mbschr (name, LBRACK)) { if (assign_list) @@ -3663,8 +3648,7 @@ do_assignment_internal (word, expand) /* Perform the assignment statement in STRING, and expand the right side by doing tilde, command and parameter expansion. */ int -do_assignment (string) - char *string; +do_assignment (char *string) { WORD_DESC td; @@ -3675,9 +3659,7 @@ do_assignment (string) } int -do_word_assignment (word, flags) - WORD_DESC *word; - int flags; +do_word_assignment (const WORD_DESC *word, int flags) { return do_assignment_internal (word, 1); } @@ -3686,8 +3668,7 @@ do_word_assignment (word, flags) of the `=', and bind it to the left side. Do not perform any word expansions on the right hand side. */ int -do_assignment_no_expand (string) - char *string; +do_assignment_no_expand (char *string) { WORD_DESC td; @@ -3705,7 +3686,7 @@ do_assignment_no_expand (string) /* Return the word list that corresponds to `$*'. */ WORD_LIST * -list_rest_of_args () +list_rest_of_args (void) { register WORD_LIST *list, *args; int i; @@ -3722,8 +3703,7 @@ list_rest_of_args () /* Return the value of a positional parameter. This handles values > 10. */ char * -get_dollar_var_value (ind) - intmax_t ind; +get_dollar_var_value (intmax_t ind) { char *temp; WORD_LIST *p; @@ -3744,8 +3724,7 @@ get_dollar_var_value (ind) 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; +string_rest_of_args (int dollar_star) { register WORD_LIST *list; char *string; @@ -3762,9 +3741,7 @@ string_rest_of_args (dollar_star) 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, pflags) - char *string; - int start, end, quoted, pflags; +pos_params (const char *string, int start, int end, int quoted, int pflags) { WORD_LIST *save, *params, *h, *t; char *ret; @@ -3827,10 +3804,7 @@ pos_params (string, start, end, quoted, pflags) 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; +expand_string_if_necessary (char *string, int quoted, EXPFUNC *func) { WORD_LIST *list; size_t slen; @@ -3839,7 +3813,7 @@ expand_string_if_necessary (string, quoted, func) DECLARE_MBSTATE; /* Don't need string length for ADVANCE_CHAR unless multibyte chars possible. */ - slen = (MB_CUR_MAX > 1) ? strlen (string) : 0; + slen = (locale_mb_cur_max > 1) ? strlen (string) : 0; i = saw_quote = 0; while (string[i]) { @@ -3870,10 +3844,7 @@ expand_string_if_necessary (string, quoted, func) } static inline char * -expand_string_to_string_internal (string, quoted, func) - char *string; - int quoted; - EXPFUNC *func; +expand_string_to_string_internal (char *string, int quoted, EXPFUNC *func) { WORD_LIST *list; char *ret; @@ -3894,25 +3865,19 @@ expand_string_to_string_internal (string, quoted, func) } char * -expand_string_to_string (string, quoted) - char *string; - int quoted; +expand_string_to_string (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; +expand_string_unsplit_to_string (char *string, int quoted) { return (expand_string_to_string_internal (string, quoted, expand_string_unsplit)); } char * -expand_assignment_string_to_string (string, quoted) - char *string; - int quoted; +expand_assignment_string_to_string (char *string, int quoted) { return (expand_string_to_string_internal (string, quoted, expand_string_assignment)); } @@ -3922,9 +3887,7 @@ expand_assignment_string_to_string (string, quoted) or a backslash into a backslash. The output of this function must eventually be processed by strcreplace(). */ static char * -quote_string_for_repl (string, flags) - char *string; - int flags; +quote_string_for_repl (const char *string, int flags) { size_t slen; char *result, *t; @@ -3983,9 +3946,7 @@ quote_string_for_repl (string, flags) backslash escapes before CTLESC-quoted backslash and `& if patsub_replacement is enabled. */ static char * -expand_string_for_patsub (string, quoted) - char *string; - int quoted; +expand_string_for_patsub (char *string, int quoted) { WORD_LIST *value; char *ret, *t; @@ -4004,7 +3965,7 @@ expand_string_for_patsub (string, quoted) if (value) { t = (value->next) ? string_list (value) : value->word->word; - ret = quote_string_for_repl (t, quoted); + ret = t ? quote_string_for_repl (t, quoted) : t; if (t != value->word->word) free (t); dispose_words (value); @@ -4016,9 +3977,7 @@ expand_string_for_patsub (string, quoted) } char * -expand_arith_string (string, quoted) - char *string; - int quoted; +expand_arith_string (char *string, int quoted) { WORD_DESC td; WORD_LIST *list, *tlist; @@ -4028,7 +3987,7 @@ expand_arith_string (string, quoted) DECLARE_MBSTATE; /* Don't need string length for ADVANCE_CHAR unless multibyte chars possible. */ - slen = (MB_CUR_MAX > 1) ? strlen (string) : 0; + slen = (locale_mb_cur_max > 1) ? strlen (string) : 0; i = saw_quote = 0; while (string[i]) { @@ -4083,10 +4042,10 @@ expand_arith_string (string, quoted) #if defined (COND_COMMAND) /* Just remove backslashes in STRING. Returns a new string. */ char * -remove_backslashes (string) - char *string; +remove_backslashes (const char *string) { - char *r, *ret, *s; + char *r, *ret; + const char *s; r = ret = (char *)xmalloc (strlen (string) + 1); for (s = string; s && *s; ) @@ -4114,9 +4073,7 @@ remove_backslashes (string) any case, since we don't perform word splitting, we need to do quoted null character removal. */ char * -cond_expand_word (w, special) - WORD_DESC *w; - int special; +cond_expand_word (WORD_DESC *w, int special) { char *r, *p; WORD_LIST *l; @@ -4172,13 +4129,14 @@ cond_expand_word (w, special) FLAGS argument is 1 if this function should treat CTLESC as a quote character (e.g., for here-documents) or not (e.g., for shell_expand_line). */ char * -expand_string_dollar_quote (string, flags) - char *string; - int flags; +expand_string_dollar_quote (const char *string, int flags) { size_t slen, retind, retsize; - int sindex, c, translen, peekc, news; - char *ret, *trans, *send, *t; + size_t sindex, news; + int c, peekc; + char *ret, *trans, *t; + size_t translen; + const char *send; DECLARE_MBSTATE; slen = strlen (string); @@ -4212,7 +4170,7 @@ expand_string_dollar_quote (string, flags) news = skip_single_quoted (string, slen, ++sindex, SX_COMPLETE); else news = skip_double_quoted (string, slen, ++sindex, SX_COMPLETE); - translen = news - sindex - 1; + translen = (news > sindex) ? news - sindex - 1 : 0; RESIZE_MALLOCED_BUFFER (ret, retind, translen + 3, retsize, 64); ret[retind++] = c; if (translen > 0) @@ -4287,12 +4245,17 @@ expand_string_dollar_quote (string, flags) continue; } trans = locale_expand (t, 0, news-sindex, 0, &translen); - free (t); if (singlequote_translations && ((news-sindex-1) != translen || STREQN (t, trans, translen) == 0)) - t = sh_single_quote (trans); + { + free (t); + t = sh_single_quote (trans); + } else - t = sh_mkdoublequoted (trans, translen, 0); + { + free (t); + t = sh_mkdoublequoted (trans, translen, 0); + } sindex = news; } #endif /* TRANSLATABLE_STRINGS */ @@ -4316,9 +4279,7 @@ expand_string_dollar_quote (string, flags) 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; +call_expand_word_internal (WORD_DESC *w, int q, int i, int *c, int *e) { WORD_LIST *result; @@ -4344,9 +4305,7 @@ call_expand_word_internal (w, q, i, c, e) Since this does not perform word splitting, it leaves quoted nulls in the result. */ static WORD_LIST * -expand_string_internal (string, quoted) - char *string; - int quoted; +expand_string_internal (const char *string, int quoted) { WORD_DESC td; WORD_LIST *tresult; @@ -4369,9 +4328,7 @@ expand_string_internal (string, quoted) 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; +expand_string_unsplit (const char *string, int quoted) { WORD_LIST *value; @@ -4396,9 +4353,7 @@ expand_string_unsplit (string, quoted) /* Expand the rhs of an assignment statement */ WORD_LIST * -expand_string_assignment (string, quoted) - char *string; - int quoted; +expand_string_assignment (const char *string, int quoted) { WORD_DESC td; WORD_LIST *value; @@ -4442,10 +4397,7 @@ expand_string_assignment (string, quoted) 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, wflags) - char *string; - int quoted; - int wflags; +expand_prompt_string (const char *string, int quoted, int wflags) { WORD_LIST *value; WORD_DESC td; @@ -4484,9 +4436,7 @@ expand_prompt_string (string, quoted, wflags) 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; +expand_string_leave_quoted (const char *string, int quoted) { WORD_LIST *tlist; WORD_LIST *tresult; @@ -4508,10 +4458,7 @@ expand_string_leave_quoted (string, quoted) /* This does not perform word splitting or dequote the WORD_LIST it returns. */ static WORD_LIST * -expand_string_for_rhs (string, quoted, op, pflags, dollar_at_p, expanded_p) - char *string; - int quoted, op, pflags; - int *dollar_at_p, *expanded_p; +expand_string_for_rhs (const char *string, int quoted, int op, int pflags, int *dollar_at_p, int *expanded_p) { WORD_DESC td; WORD_LIST *tresult; @@ -4534,6 +4481,8 @@ expand_string_for_rhs (string, quoted, op, pflags, dollar_at_p, expanded_p) /* This was further clarified on the austin-group list in March, 2017 and in Posix bug 1129 */ old_nosplit = expand_no_split_dollar_star; + /* The check against ifs_is_null is so we don't split this time through, + since we will split the (possibly-quoted) results of this function. */ expand_no_split_dollar_star = (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || op == '=' || ifs_is_null == 0; /* XXX - was 1 */ td.flags = W_EXPANDRHS; /* expanding RHS of ${paramOPword} */ td.flags |= W_NOSPLIT2; /* no splitting, remove "" and '' */ @@ -4556,9 +4505,7 @@ expand_string_for_rhs (string, quoted, op, pflags, dollar_at_p, expanded_p) /* This does not perform word splitting or dequote the WORD_LIST it returns and it treats $* as if it were quoted. */ static WORD_LIST * -expand_string_for_pat (string, quoted, dollar_at_p, expanded_p) - char *string; - int quoted, *dollar_at_p, *expanded_p; +expand_string_for_pat (const char *string, int quoted, int *dollar_at_p, int *expanded_p) { WORD_DESC td; WORD_LIST *tresult; @@ -4584,9 +4531,7 @@ expand_string_for_pat (string, quoted, dollar_at_p, expanded_p) 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; +expand_string (const char *string, int quoted) { WORD_LIST *result; @@ -4608,9 +4553,7 @@ expand_string (string, quoted) word splitting, and quote removal. */ WORD_LIST * -expand_word (word, quoted) - WORD_DESC *word; - int quoted; +expand_word (WORD_DESC *word, int quoted) { WORD_LIST *result, *tresult; @@ -4624,9 +4567,7 @@ expand_word (word, quoted) does parameter expansion, command substitution, arithmetic expansion, and quote removal. */ WORD_LIST * -expand_word_unsplit (word, quoted) - WORD_DESC *word; - int quoted; +expand_word_unsplit (WORD_DESC *word, int quoted) { WORD_LIST *result; @@ -4638,9 +4579,7 @@ expand_word_unsplit (word, quoted) quote removal on the result. Virtually identical to expand_word_unsplit; could be combined if implementations don't diverge. */ WORD_LIST * -expand_word_leave_quoted (word, quoted) - WORD_DESC *word; - int quoted; +expand_word_leave_quoted (WORD_DESC *word, int quoted) { WORD_LIST *result; @@ -4679,9 +4618,7 @@ expand_word_leave_quoted (word, quoted) and there is a CTLESC or CTLNUL in IFS, we need to quote CTLESC and CTLNUL, respectively, to prevent them from being removed as part of dequoting. */ static char * -quote_escapes_internal (string, flags) - const char *string; - int flags; +quote_escapes_internal (const char *string, int flags) { const char *s, *send; char *t, *result; @@ -4695,11 +4632,8 @@ quote_escapes_internal (string, flags) quote_spaces = (ifs_value && *ifs_value == 0); nosplit = (flags & PF_NOSPLIT2); - for (skip_ctlesc = skip_ctlnul = 0, s = ifs_value; s && *s; s++) - { - skip_ctlesc |= (nosplit == 0 && *s == CTLESC); - skip_ctlnul |= (nosplit == 0 && *s == CTLNUL); - } + skip_ctlesc = nosplit == 0 && ifs_cmap[CTLESC]; + skip_ctlnul = nosplit == 0 && ifs_cmap[CTLNUL]; t = result = (char *)xmalloc ((slen * 2) + 1); s = string; @@ -4716,24 +4650,21 @@ quote_escapes_internal (string, flags) } char * -quote_escapes (string) - const char *string; +quote_escapes (const char *string) { return (quote_escapes_internal (string, 0)); } char * -quote_rhs (string) - const char *string; +quote_nosplit (const char *string) { return (quote_escapes_internal (string, PF_NOSPLIT2)); } static WORD_LIST * -list_quote_escapes (list) - WORD_LIST *list; +list_quote_escapes (WORD_LIST *list) { - register WORD_LIST *w; + WORD_LIST *w; char *t; for (w = list; w; w = w->next) @@ -4757,8 +4688,7 @@ list_quote_escapes (list) Also used by parts of the pattern substitution code. */ char * -dequote_escapes (string) - const char *string; +dequote_escapes (const char *string) { const char *s, *send; char *t, *result; @@ -4797,8 +4727,7 @@ dequote_escapes (string) #if defined (INCLUDE_UNUSED) static WORD_LIST * -list_dequote_escapes (list) - WORD_LIST *list; +list_dequote_escapes (WORD_LIST *list) { register WORD_LIST *w; char *t; @@ -4817,8 +4746,7 @@ list_dequote_escapes (list) This turns "" into QUOTED_NULL, so the W_HASQUOTEDNULL flag needs to be set in any resultant WORD_DESC where this value is the word. */ static char * -make_quoted_char (c) - int c; +make_quoted_char (int c) { char *temp; @@ -4841,12 +4769,12 @@ make_quoted_char (c) the W_HASQUOTEDNULL flag needs to be set in any resultant WORD_DESC where this value is the word. */ char * -quote_string (string) - char *string; +quote_string (const char *string) { register char *t; size_t slen; - char *result, *send; + char *result; + const char *send; if (*string == 0) { @@ -4875,12 +4803,12 @@ quote_string (string) /* De-quote quoted characters in STRING. */ char * -dequote_string (string) - char *string; +dequote_string (const char *string) { register char *s, *t; size_t slen; - char *result, *send; + char *result; + const char *send; DECLARE_MBSTATE; if (string[0] == CTLESC && string[1] == 0) @@ -4896,29 +4824,17 @@ dequote_string (string) return (result); } - /* A string consisting of only a single CTLESC should pass through unchanged */ - if (string[0] == CTLESC && string[1] == 0) - { - result[0] = CTLESC; - result[1] = '\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; + s = (char *)string; while (*s) { - if (*s == CTLESC) - { - s++; - if (*s == '\0') - break; - } + if (*s == CTLESC && s[1]) /* don't drop trailing CTLESC */ + s++; COPY_CHAR_P (t, s, send); } @@ -4928,10 +4844,9 @@ dequote_string (string) /* Quote the entire WORD_LIST list. */ static WORD_LIST * -quote_list (list) - WORD_LIST *list; +quote_list (WORD_LIST *list) { - register WORD_LIST *w; + WORD_LIST *w; char *t; for (w = list; w; w = w->next) @@ -4947,10 +4862,9 @@ quote_list (list) } WORD_DESC * -dequote_word (word) - WORD_DESC *word; +dequote_word (WORD_DESC *word) { - register char *s; + char *s; s = dequote_string (word->word); if (QUOTED_NULL (word->word)) @@ -4963,11 +4877,10 @@ dequote_word (word) /* De-quote quoted characters in each word in LIST. */ WORD_LIST * -dequote_list (list) - WORD_LIST *list; +dequote_list (WORD_LIST *list) { - register char *s; - register WORD_LIST *tlist; + char *s; + WORD_LIST *tlist; for (tlist = list; tlist; tlist = tlist->next) { @@ -4976,6 +4889,7 @@ dequote_list (list) tlist->word->flags &= ~W_HASQUOTEDNULL; free (tlist->word->word); tlist->word->word = s; + tlist->word->flags &= ~W_QUOTED; /* no longer quoted */ } return list; } @@ -4983,8 +4897,7 @@ dequote_list (list) /* Remove CTLESC protecting a CTLESC or CTLNUL in place. Return the passed string. */ char * -remove_quoted_escapes (string) - char *string; +remove_quoted_escapes (char *string) { char *t; @@ -4998,17 +4911,58 @@ remove_quoted_escapes (string) return (string); } +/* Use CTLESC to quote IFS characters in STRING. Not used yet. */ +static char * +quote_ifs (const char *string) +{ + const char *s, *send; + char *t, *result; + size_t slen; + DECLARE_MBSTATE; + + slen = strlen (string); + send = string + slen; + + t = result = (char *)xmalloc ((slen * 2) + 1); + s = string; + + while (*s) + { + if (isifs (*s)) + *t++ = CTLESC; + COPY_CHAR_P (t, s, send); + } + *t = '\0'; + + return (result); +} + +static WORD_LIST * +list_quote_ifs (WORD_LIST *list) +{ + WORD_LIST *w; + char *t; + + for (w = list; w; w = w->next) + { + t = w->word->word; + w->word->word = quote_ifs (t); + free (t); + } + return list; +} + /* Remove quoted $IFS characters from STRING. Quoted IFS characters are added to protect them from word splitting, but we need to remove them if no word splitting takes place. This returns newly-allocated memory, so callers can use it to replace savestring(). */ -char * -remove_quoted_ifs (string) - char *string; +static char * +remove_quoted_ifs (const char *string) { register size_t slen; register int i, j; - char *ret, *send; + char *ret; + const char *send; DECLARE_MBSTATE; slen = strlen (string); @@ -5036,8 +4990,7 @@ remove_quoted_ifs (string) } char * -remove_quoted_nulls (string) - char *string; +remove_quoted_nulls (char *string) { register size_t slen; register int i, j, prev_i; @@ -5085,8 +5038,7 @@ remove_quoted_nulls (string) /* Perform quoted null character removal on each element of LIST. This modifies LIST. */ void -word_list_remove_quoted_nulls (list) - WORD_LIST *list; +word_list_remove_quoted_nulls (WORD_LIST *list) { register WORD_LIST *t; @@ -5097,6 +5049,31 @@ word_list_remove_quoted_nulls (list) } } +/* Quote TEMP appropriately using CTLESC. TEMP is a variable value ($x, + ${x[a]}, etc.). This is used in param_expand and parameter_brace_expand_word */ +static inline char * +quote_var_value (char *temp, int quoted, int pflags) +{ + char *ret; + + if (temp == 0) + ret = temp; + else if (*temp == 0) + ret = savestring (""); /* QUOTED_NULL later */ + else if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + ret = quote_string (temp); + else if (pflags & PF_ASSIGNRHS) + ret = quote_nosplit (temp); + else if (expand_no_split_dollar_star && quoted == 0 && (pflags & PF_NOSPLIT2) && ifs_is_set && ifs_is_null == 0) + /* This test might be too specific; we only want to quote CTLESC + in IFS under specific circumstances */ + ret = quote_nosplit (temp); /* XXX */ + else + ret = quote_escapes (temp); + + return ret; +} + /* **************************************************************** */ /* */ /* Functions for Matching and Removing Patterns */ @@ -5106,9 +5083,7 @@ word_list_remove_quoted_nulls (list) #if defined (HANDLE_MULTIBYTE) # ifdef INCLUDE_UNUSED static unsigned char * -mb_getcharlens (string, len) - char *string; - int len; +mb_getcharlens (const char *string, int len) { int i, offset, last; unsigned char *ret; @@ -5145,13 +5120,11 @@ mb_getcharlens (string, len) /* Returns its first argument if nothing matched; new memory otherwise */ static char * -remove_upattern (param, pattern, op) - char *param, *pattern; - int op; +remove_upattern (char *param, char *pattern, int op) { - register size_t len; - register char *end; - register char *p, *ret, c; + size_t len; + char *end, *p; + char *ret, c; len = STRLEN (param); end = param + len; @@ -5218,11 +5191,7 @@ remove_upattern (param, pattern, op) #if defined (HANDLE_MULTIBYTE) /* Returns its first argument if nothing matched; new memory otherwise */ static wchar_t * -remove_wpattern (wparam, wstrlen, wpattern, op) - wchar_t *wparam; - size_t wstrlen; - wchar_t *wpattern; - int op; +remove_wpattern (wchar_t *wparam, size_t wstrlen, wchar_t *wpattern, int op) { wchar_t wc, *ret; int n; @@ -5287,9 +5256,7 @@ remove_wpattern (wparam, wstrlen, wpattern, op) #endif /* HANDLE_MULTIBYTE */ static char * -remove_pattern (param, pattern, op) - char *param, *pattern; - int op; +remove_pattern (char *param, char *pattern, int op) { char *xret; @@ -5299,7 +5266,7 @@ remove_pattern (param, pattern, op) return (savestring (param)); #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1) + if (locale_mb_cur_max > 1) { wchar_t *ret, *oret; size_t n; @@ -5359,10 +5326,7 @@ remove_pattern (param, pattern, op) 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; +match_upattern (char *string, char *pat, int mtype, char **sp, char **ep) { int c, mlen; size_t len; @@ -5511,19 +5475,14 @@ match_upattern (string, pat, mtype, sp, ep) #if defined (HANDLE_MULTIBYTE) -#define WFOLD(c) (match_ignore_case && iswupper (c) ? towlower (c) : (c)) +#define WFOLD(c) (match_ignore_case && iswupper (c) ? towlower (c) : (wint_t)(c)) /* 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; +match_wpattern (wchar_t *wstring, char **indices, size_t wstrlen, wchar_t *wpat, + int mtype, char **sp, char **ep) { wchar_t wc, *wp, *nwpat, *wp1; size_t len; @@ -5662,10 +5621,7 @@ match_wpattern (wstring, indices, wstrlen, wpat, mtype, sp, ep) #endif /* HANDLE_MULTIBYTE */ static int -match_pattern (string, pat, mtype, sp, ep) - char *string, *pat; - int mtype; - char **sp, **ep; +match_pattern (char *string, char *pat, int mtype, char **sp, char **ep) { #if defined (HANDLE_MULTIBYTE) int ret; @@ -5678,7 +5634,7 @@ match_pattern (string, pat, mtype, sp, ep) return (0); #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1) + if (locale_mb_cur_max > 1) { if (mbsmbchar (string) == 0 && mbsmbchar (pat) == 0) return (match_upattern (string, pat, mtype, sp, ep)); @@ -5706,9 +5662,7 @@ match_pattern (string, pat, mtype, sp, ep) } static int -getpatspec (c, value) - int c; - char *value; +getpatspec (int c, const char *value) { if (c == '#') return ((*value == '#') ? RP_LONG_LEFT : RP_SHORT_LEFT); @@ -5725,9 +5679,7 @@ getpatspec (c, value) 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; +getpattern (char *value, int quoted, int expandpat) { char *pat, *tword; WORD_LIST *l; @@ -5772,9 +5724,7 @@ getpattern (value, quoted, expandpat) /* 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; +variable_remove_pattern (char *value, char *pattern, int patspec, int quoted) { char *tword; @@ -5785,10 +5735,7 @@ variable_remove_pattern (value, pattern, patspec, quoted) #endif static char * -list_remove_pattern (list, pattern, patspec, itype, quoted) - WORD_LIST *list; - char *pattern; - int patspec, itype, quoted; +list_remove_pattern (WORD_LIST *list, char *pattern, int patspec, int itype, int quoted) { WORD_LIST *new, *l; WORD_DESC *w; @@ -5810,10 +5757,7 @@ list_remove_pattern (list, pattern, patspec, itype, quoted) } static char * -parameter_list_remove_pattern (itype, pattern, patspec, quoted) - int itype; - char *pattern; - int patspec, quoted; +parameter_list_remove_pattern (int itype, char *pattern, int patspec, int quoted) { char *ret; WORD_LIST *list; @@ -5827,13 +5771,9 @@ parameter_list_remove_pattern (itype, pattern, patspec, quoted) } #if defined (ARRAY_VARS) +/* STARSUB is so we can figure out how it's indexed */ static char * -array_remove_pattern (var, pattern, patspec, starsub, quoted) - SHELL_VAR *var; - char *pattern; - int patspec; - int starsub; /* so we can figure out how it's indexed */ - int quoted; +array_remove_pattern (SHELL_VAR *var, char *pattern, int patspec, int starsub, int quoted) { ARRAY *a; HASH_TABLE *h; @@ -5860,11 +5800,9 @@ array_remove_pattern (var, pattern, patspec, starsub, quoted) #endif /* ARRAY_VARS */ static char * -parameter_brace_remove_pattern (varname, value, estatep, patstr, rtype, quoted, flags) - char *varname, *value; - array_eltstate_t *estatep; - char *patstr; - int rtype, quoted, flags; +parameter_brace_remove_pattern (char *varname, char *value, + array_eltstate_t *estatep, char *patstr, + int rtype, int quoted, int flags) { int vtype, patspec, starsub; char *temp1, *val, *pattern, *oname; @@ -5902,8 +5840,7 @@ parameter_brace_remove_pattern (varname, value, estatep, patstr, rtype, quoted, case VT_VARIABLE: case VT_ARRAYMEMBER: temp1 = remove_pattern (val, pattern, patspec); - if (vtype == VT_VARIABLE) - FREE (val); + FREE (val); if (temp1) { val = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) @@ -5947,14 +5884,14 @@ parameter_brace_remove_pattern (varname, value, estatep, patstr, rtype, quoted, #if defined (PROCESS_SUBSTITUTION) -static void reap_some_procsubs PARAMS((int)); - /*****************************************************************/ /* */ /* Hacking Process Substitution */ /* */ /*****************************************************************/ +static void reap_some_procsubs (int); + #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 @@ -5977,7 +5914,7 @@ static int nfifo; static int fifo_list_size; void -clear_fifo_list () +clear_fifo_list (void) { int i; @@ -5992,8 +5929,7 @@ clear_fifo_list () } void * -copy_fifo_list (sizep) - int *sizep; +copy_fifo_list (int *sizep) { if (sizep) *sizep = 0; @@ -6001,8 +5937,7 @@ copy_fifo_list (sizep) } static void -add_fifo_list (pathname) - char *pathname; +add_fifo_list (char *pathname) { int osize, i; @@ -6024,8 +5959,7 @@ add_fifo_list (pathname) } void -unlink_fifo (i) - int i; +unlink_fifo (int i) { if ((fifo_list[i].proc == (pid_t)-1) || (fifo_list[i].proc > 0 && (kill(fifo_list[i].proc, 0) == -1))) { @@ -6037,7 +5971,7 @@ unlink_fifo (i) } void -unlink_fifo_list () +unlink_fifo_list (void) { int saved, i, j; @@ -6079,7 +6013,7 @@ unlink_fifo_list () } void -unlink_all_fifos () +unlink_all_fifos (void) { int i, fd; @@ -6108,9 +6042,7 @@ unlink_all_fifos () everything in fifo_list. LSIZE is the number of elements in LIST, in case it's larger than fifo_list_size (size of fifo_list). */ void -close_new_fifos (list, lsize) - void *list; - int lsize; +close_new_fifos (void *list, int lsize) { int i; char *plist; @@ -6130,8 +6062,7 @@ close_new_fifos (list, lsize) } int -find_procsub_child (pid) - pid_t pid; +find_procsub_child (pid_t pid) { int i; @@ -6142,10 +6073,7 @@ find_procsub_child (pid) } void -set_procsub_status (ind, pid, status) - int ind; - pid_t pid; - int status; +set_procsub_status (int ind, pid_t pid, int status) { if (ind >= 0 && ind < nfifo) fifo_list[ind].proc = (pid_t)-1; /* sentinel */ @@ -6154,8 +6082,7 @@ set_procsub_status (ind, pid, status) /* If we've marked the process for this procsub as dead, close the associated file descriptor and delete the FIFO. */ static void -reap_some_procsubs (max) - int max; +reap_some_procsubs (int max) { int i; @@ -6165,7 +6092,7 @@ reap_some_procsubs (max) } void -reap_procsubs () +reap_procsubs (void) { reap_some_procsubs (nfifo); } @@ -6173,7 +6100,7 @@ reap_procsubs () #if 0 /* UNUSED */ void -wait_procsubs () +wait_procsubs (void) { int i, r; @@ -6190,19 +6117,19 @@ wait_procsubs () #endif int -fifos_pending () +fifos_pending (void) { return nfifo; } int -num_fifos () +num_fifos (void) { return nfifo; } static char * -make_named_pipe () +make_named_pipe (void) { char *tname; @@ -6230,9 +6157,8 @@ static pid_t *dev_fd_list = (pid_t *)NULL; static int nfds; static int totfds; /* The highest possible number of open files. */ -void -clear_fifo (i) - int i; +static void +clear_fifo (int i) { if (dev_fd_list[i]) { @@ -6242,7 +6168,7 @@ clear_fifo (i) } void -clear_fifo_list () +clear_fifo_list (void) { register int i; @@ -6256,8 +6182,7 @@ clear_fifo_list () } void * -copy_fifo_list (sizep) - int *sizep; +copy_fifo_list (int *sizep) { void *ret; @@ -6275,8 +6200,7 @@ copy_fifo_list (sizep) } static void -add_fifo_list (fd) - int fd; +add_fifo_list (int fd) { if (dev_fd_list == 0 || fd >= totfds) { @@ -6299,20 +6223,19 @@ add_fifo_list (fd) } int -fifos_pending () +fifos_pending (void) { return 0; /* used for cleanup; not needed with /dev/fd */ } int -num_fifos () +num_fifos (void) { return nfds; } void -unlink_fifo (fd) - int fd; +unlink_fifo (int fd) { if (dev_fd_list[fd]) { @@ -6323,7 +6246,7 @@ unlink_fifo (fd) } void -unlink_fifo_list () +unlink_fifo_list (void) { register int i; @@ -6337,7 +6260,7 @@ unlink_fifo_list () } void -unlink_all_fifos () +unlink_all_fifos (void) { unlink_fifo_list (); } @@ -6348,9 +6271,7 @@ unlink_all_fifos () LSIZE is the number of elements in LIST, in case it's larger than totfds (size of dev_fd_list). */ void -close_new_fifos (list, lsize) - void *list; - int lsize; +close_new_fifos (void *list, int lsize) { int i; pid_t *plist; @@ -6370,8 +6291,7 @@ close_new_fifos (list, lsize) } int -find_procsub_child (pid) - pid_t pid; +find_procsub_child (pid_t pid) { int i; @@ -6386,10 +6306,7 @@ find_procsub_child (pid) } void -set_procsub_status (ind, pid, status) - int ind; - pid_t pid; - int status; +set_procsub_status (int ind, pid_t pid, int status) { if (ind >= 0 && ind < totfds) dev_fd_list[ind] = (pid_t)-1; /* sentinel */ @@ -6398,8 +6315,7 @@ set_procsub_status (ind, pid, status) /* If we've marked the process for this procsub as dead, close the associated file descriptor. */ static void -reap_some_procsubs (max) - int max; +reap_some_procsubs (int max) { int i; @@ -6409,7 +6325,7 @@ reap_some_procsubs (max) } void -reap_procsubs () +reap_procsubs (void) { reap_some_procsubs (totfds); } @@ -6417,7 +6333,7 @@ reap_procsubs () #if 0 /* UNUSED */ void -wait_procsubs () +wait_procsubs (void) { int i, r; @@ -6434,7 +6350,7 @@ wait_procsubs () #endif #if defined (NOTDEF) -print_dev_fd_list () +print_dev_fd_list (void) { register int i; @@ -6451,8 +6367,7 @@ print_dev_fd_list () #endif /* NOTDEF */ static char * -make_dev_fd_filename (fd) - int fd; +make_dev_fd_filename (int fd) { char *ret, intbuf[INT_STRLEN_BOUND (int) + 1], *p; @@ -6481,9 +6396,7 @@ make_dev_fd_filename (fd) 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; +process_substitute (char *string, int open_for_read_in_child) { char *pathname; int fd, result, rc, function_value; @@ -6762,10 +6675,31 @@ process_substitute (string, open_for_read_in_child) #define COMSUB_PIPEBUF 4096 +static inline int +comsub_shouldquote (int c, int quoted, int flags, int skip_ctlesc, int skip_ctlnul) +{ + /* This is essentially quote_string inline */ + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + return 1; + else if ((flags & PF_ASSIGNRHS) && skip_ctlesc && c == CTLESC) + return 1; + else if ((flags & PF_ASSIGNRHS) && skip_ctlnul && c == CTLNUL) + return 1; + /* Escape CTLESC and CTLNUL in the output to protect those characters + from the rest of the word expansions (word splitting and globbing.) + This is essentially quote_escapes inline. */ + else if (skip_ctlesc == 0 && c == CTLESC) + return 1; + else if (skip_ctlnul == 0 && c == CTLNUL) + return 1; + else if (c == ' ' && ifs_value && *ifs_value == 0) + return 1; + else + return 0; +} + static char * -optimize_cat_file (r, quoted, flags, flagp) - REDIRECT *r; - int quoted, flags, *flagp; +optimize_cat_file (REDIRECT *r, int quoted, int flags, int *flagp) { char *ret; int fd; @@ -6781,13 +6715,10 @@ optimize_cat_file (r, quoted, flags, flagp) } static char * -read_comsub (fd, quoted, flags, rflag) - int fd, quoted, flags; - int *rflag; +read_comsub (int fd, int quoted, int flags, int *rflag) { char *istring, buf[COMSUB_PIPEBUF], *bufp; int c, tflag, skip_ctlesc, skip_ctlnul; - int mb_cur_max; size_t istring_index; size_t istring_size; ssize_t bufn; @@ -6800,12 +6731,12 @@ read_comsub (fd, quoted, flags, rflag) #endif istring = (char *)NULL; - istring_index = istring_size = bufn = tflag = 0; + istring_index = istring_size = tflag = 0; + bufn = 0; skip_ctlesc = ifs_cmap[CTLESC]; skip_ctlnul = ifs_cmap[CTLNUL]; - mb_cur_max = MB_CUR_MAX; nullbyte = 0; /* Read the output of the command through the pipe. */ @@ -6835,24 +6766,14 @@ read_comsub (fd, quoted, flags, rflag) } /* Add the character to ISTRING, possibly after resizing it. */ - RESIZE_MALLOCED_BUFFER (istring, istring_index, mb_cur_max+1, istring_size, 512); + RESIZE_MALLOCED_BUFFER (istring, istring_index, locale_mb_cur_max+1, istring_size, 512); - /* This is essentially quote_string inline */ - if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) /* || c == CTLESC || c == CTLNUL */) - istring[istring_index++] = CTLESC; - else if ((flags & PF_ASSIGNRHS) && skip_ctlesc && c == CTLESC) - istring[istring_index++] = CTLESC; - /* Escape CTLESC and CTLNUL in the output to protect those characters - from the rest of the word expansions (word splitting and globbing.) - This is essentially quote_escapes inline. */ - else if (skip_ctlesc == 0 && c == CTLESC) - istring[istring_index++] = CTLESC; - else if ((skip_ctlnul == 0 && c == CTLNUL) || (c == ' ' && (ifs_value && *ifs_value == 0))) + if (comsub_shouldquote (c, quoted, flags, skip_ctlesc, skip_ctlnul)) istring[istring_index++] = CTLESC; #if defined (HANDLE_MULTIBYTE) if ((locale_utf8locale && (c & 0x80)) || - (locale_utf8locale == 0 && mb_cur_max > 1 && (unsigned char)c > 127)) + (locale_utf8locale == 0 && locale_mb_cur_max > 1 && (unsigned char)c > 127)) { /* read a multibyte character from buf */ /* punt on the hard case for now */ @@ -6899,6 +6820,17 @@ read_comsub (fd, quoted, flags, rflag) /* If the newline was quoted, remove the quoting char. */ if (istring[istring_index - 1] == CTLESC) --istring_index; + +#ifdef __MSYS__ + if (istring_index > 0 && istring[istring_index - 1] == '\r') + { + --istring_index; + + /* If the carriage return was quoted, remove the quoting char. */ + if (istring[istring_index - 1] == CTLESC) + --istring_index; + } +#endif } else break; @@ -6913,13 +6845,321 @@ read_comsub (fd, quoted, flags, rflag) return istring; } +static void +uw_pop_var_context (void *ignore) +{ + variable_context--; + pop_var_context (); + + sv_ifs ("IFS"); /* XXX here for now */ +} + +#if defined (ARRAY_VARS) +static void +uw_restore_pipestatus_array (void *a) +{ + restore_pipestatus_array (a); +} +#endif + +/* If S == -1, it's a special value saying to close stdin */ +static void +restore_stdout (int fd) +{ + if (fd == -1) + close (1); + else + { + dup2 (fd, 1); + close (fd); + } +} + +static void +uw_restore_stdout (void *fd) +{ + restore_stdout ((intptr_t) fd); +} + +static void +uw_anonclose (void *fdesc) +{ + STRING_INT_ALIST *af; + + af = (STRING_INT_ALIST *)fdesc; + anonclose (af->token, af->word); + free (af->word); +} + +static void +uw_unbind_variable (void *name) +{ + unbind_variable_noref (name); +} + +static void +uw_restore_pipeline (void *discard) +{ + restore_pipeline ((intptr_t) discard); +} + +static void +uw_restore_errexit (void *eflag) +{ + change_flag ('e', (intptr_t) eflag ? FLAG_ON : FLAG_OFF); + set_shellopts (); +} + +/* Quote the output of nofork varsub command substitution in the way that the + caller of function_substitute expects. The caller guarantees that STRING + is non-null. This is equivalent to what read_comsub does to the output it + reads. The return value will be post-processed to turn "" into CTLNUL if + necessary. */ +static char * +comsub_quote_string (char *string, int quoted, int flags) +{ + int skip_ctlesc, skip_ctlnul; + size_t ind, slen; + const char *send; + int i, c; + char *ret; + DECLARE_MBSTATE; + + slen = strlen (string); + send = string + slen; + + ret = (char *)xmalloc ((2 * slen) + 1); + + skip_ctlesc = ifs_cmap[CTLESC]; + skip_ctlnul = ifs_cmap[CTLNUL]; + + for (i = 0, ind = 0; c = string[i]; ) + { + if (comsub_shouldquote (c, quoted, flags, skip_ctlesc, skip_ctlnul)) + ret[ind++] = CTLESC; + + COPY_CHAR_I (ret, ind, string, send, i); + } + + ret[ind] = '\0'; + return ret; +} + +static SHELL_VAR lambdafunc = { ".bash.lambda", 0, 0, 0, 0, 0, 0 }; + +WORD_DESC * +function_substitute (char *string, int quoted, int flags) +{ + volatile int function_code; + int valsub, stdout_valid, saveout, old_frozen; + int result, pflags, tflag, was_trap; + char *istring, *s; + WORD_DESC *ret; + SHELL_VAR *v; + STRING_INT_ALIST anonf; + int afd; + char *afn; + sigset_t set, oset; + sh_getopt_state_t *gs; + sh_parser_state_t ps; + SHELL_VAR *gv; +#if defined (ARRAY_VARS) + ARRAY *psa; +#endif + + if (valsub = (string && *string == '|')) + string++; + + /* In the case of no command to run, just return NULL. */ + for (s = string; s && *s && (shellblank (*s) || *s == '\n'); s++) + ; + if (s == 0 || *s == 0) + return ((WORD_DESC *)NULL); + + istring = (char *)NULL; + /* Flags to pass to parse_and_execute() */ + pflags = (interactive && sourcelevel == 0) ? SEVAL_RESETLINE : 0; + pflags |= SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE|SEVAL_NOOPTIMIZE; /* XXX */ + + /* Let's get an anonymous file before we really try anything else. */ + if (valsub == 0) + { + afd = anonopen ("sh-nfc", 0, &afn); /* don't use filename yet */ + if (afd < 0) + { + sys_error ("%s", _("function_substitute: cannot open anonymous file for output")); + exp_jump_to_top_level (DISCARD); /* XXX */ + } + } + + gs = sh_getopt_save_istate (); + + begin_unwind_frame ("nofork comsub"); + + /* Save command and expansion state we need. */ + if (valsub == 0) + { + anonf.word = afn; + anonf.token = afd; + add_unwind_protect (uw_anonclose, (void *)&anonf); + } + unwind_protect_int (executing_funsub); + unwind_protect_int (expand_aliases); + unwind_protect_pointer (subst_assign_varlist); + unwind_protect_pointer (temporary_env); + unwind_protect_pointer (this_shell_function); + unwind_protect_pointer (this_shell_builtin); + unwind_protect_pointer (current_builtin); + unwind_protect_pointer (currently_executing_command); + unwind_protect_int (eof_encountered); + add_unwind_protect (uw_pop_var_context, 0); + add_unwind_protect (uw_maybe_restore_getopt_state, gs); + + if (parsing_command) + { + save_parser_state (&ps); + add_unwind_protect (uw_restore_parser_state, &ps); + } + +#if defined (ARRAY_VARS) + if (parsing_command == 0) + { + psa = save_pipestatus_array (); + add_unwind_protect (uw_restore_pipestatus_array, psa); + } +#endif + + subst_assign_varlist = 0; + + push_context (lambdafunc.name, 1, temporary_env); /* make local variables work */ + temporary_env = 0; + this_shell_function = &lambdafunc; + + unwind_protect_int (verbose_flag); + change_flag ('v', FLAG_OFF); + + /* When inherit_errexit option is not enabled, command substitution does + not inherit the -e flag. It is enabled when Posix mode is enabled */ + if (inherit_errexit == 0) + { + unwind_protect_int (builtin_ignoring_errexit); + builtin_ignoring_errexit = 0; + add_unwind_protect (uw_restore_errexit, (void *) (intptr_t) errexit_flag); + change_flag ('e', FLAG_OFF); + } + set_shellopts (); + + if (valsub == 0) + { + fflush (stdout); + fpurge (stdout); + + stdout_valid = sh_validfd (1); + saveout = stdout_valid ? move_to_high_fd (1, 1, -1) : -1; + add_unwind_protect (uw_restore_stdout, (void *) (intptr_t) saveout); + + /* Redirect stdout to the anonymous file */ + if (dup2 (afd, 1) < 0) + { + sys_error ("%s", _("function_substitute: cannot duplicate anonymous file as standard output")); + run_unwind_frame ("nofork comsub"); + exp_jump_to_top_level (DISCARD); + } +#ifdef __CYGWIN__ + freopen (NULL, "w", stdout); + sh_setlinebuf (stdout); +#endif + } + else + { + v = make_local_variable ("REPLY", 0); /* should be new instance */ + /* We don't check $REPLY for readonly yet, but we could */ + if (v) + add_unwind_protect (uw_unbind_variable, "REPLY"); + } + + old_frozen = freeze_jobs_list (); + add_unwind_protect (uw_lastpipe_cleanup, (void *) (intptr_t) old_frozen); + +#if defined (JOB_CONTROL) + unwind_protect_var (pipeline_pgrp); + /* Don't reset the pipeline pgrp if we're already a subshell in a pipeline or + we've already forked to run a disk command (and are expanding redirections, + for example). */ + if ((subshell_environment & (SUBSHELL_FORK|SUBSHELL_PIPE)) == 0) + pipeline_pgrp = shell_pgrp; + save_pipeline (1); + add_unwind_protect (uw_restore_pipeline, (void *) (intptr_t) 1); + stop_making_children (); +#endif /* JOB_CONTROL */ + + remove_quoted_escapes (string); + + currently_executing_command = NULL; + executing_funsub++; + if (expand_aliases) + expand_aliases = posixly_correct == 0; + + /* if we are in a position to accept return, we have to save the old values */ + function_code = 0; + unwind_protect_int (return_catch_flag); + if (return_catch_flag) + unwind_protect_jmp_buf (return_catch); + + was_trap = running_trap; + + return_catch_flag++; + function_code = setjmp_nosigs (return_catch); + + if (function_code) + { + parse_and_execute_cleanup (was_trap); + result = return_catch_value; + } + else + result = parse_and_execute (string, "nofork comsub", pflags); + + /* rewind back to the start of the file and read the contents */ + + tflag = 0; + if (valsub == 0) + { + /* We call anonclose as part of the outer nofork unwind-protects */ + BLOCK_SIGNAL (SIGINT, set, oset); + lseek (afd, 0, SEEK_SET); + istring = read_comsub (afd, quoted, flags, &tflag); + UNBLOCK_SIGNAL (oset); + } + else + { + s = get_string_value ("REPLY"); + istring = s ? comsub_quote_string (s, quoted, flags) : savestring (""); + } + + /* Check for local OPTIND and note for cleanup */ + gv = find_variable ("OPTIND"); + if (gv && gv->context == variable_context) + gs->gs_flags |= 1; + + run_unwind_frame ("nofork comsub"); /* restores stdout, job control stuff */ + + last_command_subst_status = result; + if (posixly_correct == 0) /* POSIX interp 1150 */ + last_command_exit_value = last_command_subst_status; + last_command_subst_pid = dollar_dollar_pid; + expand_aliases = expaliases_flag; + + ret = alloc_word_desc (); + ret->word = istring; + ret->flags = tflag; + + return (ret); +} + /* Perform command substitution on STRING. This returns a WORD_DESC * with the contained string possibly quoted. */ WORD_DESC * -command_substitute (string, quoted, flags) - char *string; - int quoted; - int flags; +command_substitute (char *string, int quoted, int flags) { pid_t pid, old_pid, old_pipeline_pgrp, old_async_pid; char *istring, *s; @@ -6947,13 +7187,16 @@ command_substitute (string, quoted, flags) istring = optimize_cat_file (cmd->value.Simple->redirects, quoted, flags, &tflag); if (istring == &expand_param_error) { - last_command_exit_value = EXECUTION_FAILURE; + last_command_subst_status = EXECUTION_FAILURE; istring = 0; } else - last_command_exit_value = EXECUTION_SUCCESS; /* compat */ + last_command_subst_status = EXECUTION_SUCCESS; /* compat */ last_command_subst_pid = dollar_dollar_pid; + if (posixly_correct == 0) /* POSIX interp 1150 */ + last_command_exit_value = last_command_subst_status; /* XXX */ + dispose_command (cmd); ret = alloc_word_desc (); ret->word = istring; @@ -6994,6 +7237,28 @@ command_substitute (string, quoted, flags) goto error_exit; } +#ifdef __CYGWIN__ + /* Passing a pipe through std fds can cause hangs when talking to a + non-cygwin child. Move it. */ + if (fildes[0] < 3) + { + int fd = fcntl (fildes[0], F_DUPFD, 3); + close (fildes[0]); + fildes[0] = fd; + } + if (fildes[1] < 3) + { + int fd = fcntl (fildes[1], F_DUPFD, 3); + close (fildes[1]); + fildes[1] = fd; + } + if (fildes[0] < 0 || fildes[1] < 0) + { + sys_error (_("cannot make pipe for command substitution")); + goto error_exit; + } +#endif /* __CYGWIN__ */ + #if defined (JOB_CONTROL) old_pipeline_pgrp = pipeline_pgrp; /* Don't reset the pipeline pgrp if we're already a subshell in a pipeline or @@ -7107,10 +7372,10 @@ command_substitute (string, quoted, flags) /* When inherit_errexit option is not enabled, command substitution does not inherit the -e flag. It is enabled when Posix mode is enabled */ if (inherit_errexit == 0) - { - builtin_ignoring_errexit = 0; + { + builtin_ignoring_errexit = 0; change_flag ('e', FLAG_OFF); - } + } set_shellopts (); /* If we are expanding a redirection, we can dispose of any temporary @@ -7184,7 +7449,7 @@ command_substitute (string, quoted, flags) begin_unwind_frame ("read-comsub"); dummyfd = fildes[0]; - add_unwind_protect (close, dummyfd); + add_unwind_protect (uw_close, (void *) (intptr_t) dummyfd); /* Block SIGINT while we're reading from the pipe. If the child process gets a SIGINT, it will either handle it or die, and the @@ -7197,11 +7462,13 @@ command_substitute (string, quoted, flags) discard_unwind_frame ("read-comsub"); UNBLOCK_SIGNAL (oset); - current_command_subst_pid = pid; - last_command_exit_value = wait_for (pid, JWAIT_NOTERM); + last_command_subst_status = wait_for (pid, JWAIT_NOTERM); last_command_subst_pid = pid; last_made_pid = old_pid; + if (posixly_correct == 0) /* POSIX interp 1150 */ + last_command_exit_value = last_command_subst_status; /* XXX */ + #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 @@ -7210,6 +7477,8 @@ command_substitute (string, quoted, flags) kill (getpid (), SIGINT); #endif /* JOB_CONTROL */ + CHECK_TERMSIG; + ret = alloc_word_desc (); ret->word = istring; ret->flags = tflag; @@ -7227,8 +7496,7 @@ command_substitute (string, quoted, flags) #if defined (ARRAY_VARS) static arrayind_t -array_length_reference (s) - char *s; +array_length_reference (const char *s) { int len; arrayind_t ind; @@ -7274,11 +7542,14 @@ array_length_reference (s) if (assoc_p (var)) { t[len - 1] = '\0'; - akey = expand_subscript_string (t, 0); /* [ */ + akey = expand_subscript_string (t, 0); t[len - 1] = RBRACK; if (akey == 0 || *akey == 0) { - err_badarraysub (t); + char *t1; + + t1 = (t > s) ? t - 1 : t; /* get the left bracket */ + err_badarraysub (t1); FREE (akey); return (-1); } @@ -7293,7 +7564,10 @@ array_length_reference (s) ind = array_max_index (array_cell (var)) + 1 + ind; if (ind < 0) { - err_badarraysub (t); + char *t1; + + t1 = (t > s) ? t - 1 : t; /* get the left bracket */ + err_badarraysub (t1); return (-1); } if (array_p (var)) @@ -7308,9 +7582,7 @@ array_length_reference (s) #endif /* ARRAY_VARS */ static int -valid_brace_expansion_word (name, var_is_special) - char *name; - int var_is_special; +valid_brace_expansion_word (const char *name, int var_is_special) { if (DIGIT (*name) && all_digits (name)) return 1; @@ -7320,17 +7592,14 @@ valid_brace_expansion_word (name, var_is_special) else if (valid_array_reference (name, 0)) return 1; #endif /* ARRAY_VARS */ - else if (legal_identifier (name)) + else if (valid_identifier (name)) return 1; else return 0; } static int -chk_atstar (name, quoted, pflags, quoted_dollar_atp, contains_dollar_at) - char *name; - int quoted, pflags; - int *quoted_dollar_atp, *contains_dollar_at; +chk_atstar (const char *name, int quoted, int pflags, int *quoted_dollar_atp, int *contains_dollar_at) { char *temp1; @@ -7393,10 +7662,7 @@ chk_atstar (name, quoted, pflags, quoted_dollar_atp, contains_dollar_at) the shell, e.g., "@", "$", "*", etc. QUOTED, if non-zero, means that NAME was found inside of a double-quoted expression. */ static WORD_DESC * -parameter_brace_expand_word (name, var_is_special, quoted, pflags, estatep) - char *name; - int var_is_special, quoted, pflags; - array_eltstate_t *estatep; +parameter_brace_expand_word (char *name, int var_is_special, int quoted, int pflags, array_eltstate_t *estatep) { WORD_DESC *ret; char *temp, *tt; @@ -7420,20 +7686,16 @@ parameter_brace_expand_word (name, var_is_special, quoted, pflags, estatep) #endif /* Handle multiple digit arguments, as in ${11}. */ - if (legal_number (name, &arg_index)) + if (valid_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; + temp = quote_var_value (tt, quoted, pflags); FREE (tt); } else if (var_is_special) /* ${@} */ { - int sindex; + size_t sindex; + tt = (char *)xmalloc (2 + strlen (name)); tt[sindex = 0] = '$'; strcpy (tt + 1, name); @@ -7482,6 +7744,8 @@ expand_arrayref: temp = array_value (name, quoted, 0, &es); else if (tt[0] == '*' && tt[1] == RBRACK && expand_no_split_dollar_star && ifs_is_null) temp = array_value (name, Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT, 0, &es); + else if (tt[0] == '*' && tt[1] == RBRACK && expand_no_split_dollar_star && ifs_is_set && ifs_is_null == 0 && quoted == 0) + temp = array_value (name, quoted, AV_ASSIGNRHS, &es); else if (tt[0] == '*' && tt[1] == RBRACK) temp = array_value (name, quoted, 0, &es); else @@ -7493,9 +7757,7 @@ expand_arrayref: temp = array_value (name, quoted, 0, &es); if (es.subtype == 0 && temp) { - temp = (*temp && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) - ? quote_string (temp) - : quote_escapes (temp); + temp = quote_var_value (temp, quoted, pflags); rflags |= W_ARRAYIND; } /* Note that array[*] and array[@] expanded to a quoted null string by @@ -7529,16 +7791,11 @@ expand_arrayref: else if (array_p (var)) temp = array_reference (array_cell (var), 0); else - temp = value_cell (var); -#else - temp = value_cell (var); #endif + temp = value_cell (var); + + temp = quote_var_value (temp, quoted, pflags); - if (temp) - temp = (*temp && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) - ? quote_string (temp) - : ((pflags & PF_ASSIGNRHS) ? quote_rhs (temp) - : quote_escapes (temp)); FREE (tt); } else @@ -7557,7 +7814,7 @@ expand_arrayref: else #endif /* y=2 ; typeset -n x=y; echo ${x} is not the same as echo ${2} in ksh */ - if (temp && *temp && legal_identifier (temp) == 0) + if (temp && *temp && valid_identifier (temp) == 0) { set_exit_status (EXECUTION_FAILURE); report_error (_("%s: invalid variable name for name reference"), temp); @@ -7579,9 +7836,7 @@ expand_arrayref: } static char * -parameter_brace_find_indir (name, var_is_special, quoted, find_nameref) - char *name; - int var_is_special, quoted, find_nameref; +parameter_brace_find_indir (char *name, int var_is_special, int quoted, int find_nameref) { char *temp, *t; WORD_DESC *w; @@ -7625,15 +7880,14 @@ parameter_brace_find_indir (name, var_is_special, quoted, find_nameref) /* Expand an indirect reference to a variable: ${!NAME} expands to the value of the variable whose name is the value of NAME. */ static WORD_DESC * -parameter_brace_expand_indir (name, var_is_special, quoted, pflags, quoted_dollar_atp, contains_dollar_at) - char *name; - int var_is_special, quoted, pflags; - int *quoted_dollar_atp, *contains_dollar_at; +parameter_brace_expand_indir (char *name, int var_is_special, int quoted, int pflags, int *quoted_dollar_atp, int *contains_dollar_at) { char *t; WORD_DESC *w; SHELL_VAR *v; + v = 0; /* silence a maybe-uninitialized warning */ + /* See if it's a nameref first, behave in ksh93-compatible fashion. There is at least one incompatibility: given ${!foo[0]} where foo=bar, bash performs an indirect lookup on foo[0] and expands the result; @@ -7654,7 +7908,7 @@ parameter_brace_expand_indir (name, var_is_special, quoted, pflags, quoted_dolla is ok. Indirect references to array references, as explained above, are ok (currently). Only references to unset variables are errors at this point. */ - if (legal_identifier (name) && v == 0) + if (valid_identifier (name) && v == 0) { report_error (_("%s: invalid indirect expansion"), name); w = alloc_word_desc (); @@ -7709,14 +7963,15 @@ parameter_brace_expand_indir (name, var_is_special, quoted, pflags, quoted_dolla "-", "+", or "=". QUOTED is true if the entire brace expression occurs between double quotes. */ static WORD_DESC * -parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdollarat) - char *name, *value; - int op, quoted, pflags, *qdollaratp, *hasdollarat; +parameter_brace_expand_rhs (char *name, char *value, + int op, int quoted, int pflags, + int *qdollaratp, int *hasdollarat) { WORD_DESC *w; WORD_LIST *l, *tl; char *t, *t1, *temp, *vname, *newval; - int l_hasdollat, sindex, arrayref; + int l_hasdollat, arrayref; + size_t sindex; SHELL_VAR *v; array_eltstate_t es; @@ -7788,6 +8043,8 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll temp = string_list (l); if (temp && (QUOTED_NULL (temp) == 0) && (l->word->flags & W_SAWQUOTEDNULL)) w->flags |= W_SAWQUOTEDNULL; /* XXX */ + if (temp && (l->word->flags & W_QUOTED) && quoted == 0) + w->flags |= W_QUOTED; } /* If we have a quoted null result (QUOTED_NULL(temp)) and the word is @@ -7853,7 +8110,7 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll dispose_word (w); return &expand_wdesc_error; } - if (legal_identifier (vname) == 0) + if (valid_identifier (vname) == 0) { report_error (_("%s: invalid variable name"), vname); free (vname); @@ -7862,7 +8119,24 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll return &expand_wdesc_error; } } - + /* We check for this here instead of letting bind_variable do it so we can + satisfy the POSIX semantics of returning the final value assigned to the + variable, even after assignment transformations (uppercase, lowercase, etc.). + We need the final name to get the right value back. */ + else if ((v = find_variable_last_nameref (name, 0)) && nameref_p (v)) + { + temp = nameref_cell (v); + /* shouldn't happen at this point, but... */ + if (temp == 0 || *temp == 0) + { + report_error (_("%s: bad substitution"), name); + free (t1); + dispose_word (w); + return &expand_wdesc_error; + } + vname = savestring (temp); + } + arrayref = 0; #if defined (ARRAY_VARS) if (valid_array_reference (vname, 0)) @@ -7881,14 +8155,14 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll if ((v == 0 || readonly_p (v)) && interactive_shell == 0 && posixly_correct) { last_command_exit_value = EXECUTION_FAILURE; - exp_jump_to_top_level (FORCE_EOF); + posix_variable_assignment_error (1); } else { if (vname != name) free (vname); last_command_exit_value = EX_BADUSAGE; - exp_jump_to_top_level (DISCARD); + bash_variable_assignment_error (0); } } @@ -7939,9 +8213,7 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll used as the error message to print, otherwise a standard message is printed. */ static void -parameter_brace_expand_error (name, value, check_null) - char *name, *value; - int check_null; +parameter_brace_expand_error (char *name, char *value, int check_null) { WORD_LIST *l; char *temp; @@ -7969,8 +8241,7 @@ parameter_brace_expand_error (name, value, check_null) /* Return 1 if NAME is something for which parameter_brace_expand_length is OK to do. */ static int -valid_length_expression (name) - char *name; +valid_length_expression (const char *name) { return (name[1] == '\0' || /* ${#} */ ((sh_syntaxtab[(unsigned char) name[1]] & CSPECVAR) && name[2] == '\0') || /* special param */ @@ -7978,14 +8249,13 @@ valid_length_expression (name) #if defined (ARRAY_VARS) valid_array_reference (name + 1, 0) || /* ${#a[7]} */ #endif - legal_identifier (name + 1)); /* ${#PS1} */ + valid_identifier (name + 1)); /* ${#PS1} */ } /* 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; +parameter_brace_expand_length (char *name) { char *t, *newname; intmax_t number, arg_index; @@ -7993,6 +8263,7 @@ parameter_brace_expand_length (name) SHELL_VAR *var; var = (SHELL_VAR *)NULL; + number = 0; if (name[1] == '\0') /* ${#} */ number = number_of_args (); @@ -8029,20 +8300,19 @@ parameter_brace_expand_length (name) else if (valid_array_reference (name + 1, 0)) number = array_length_reference (name + 1); #endif /* ARRAY_VARS */ + else if (valid_number (name + 1, &arg_index)) /* ${#1} */ + { + t = get_dollar_var_value (arg_index); + if (t == 0 && unbound_vars_is_error) + return INTMAX_MIN; + number = MB_STRLEN (t); + FREE (t); + } else { - number = 0; - - if (legal_number (name + 1, &arg_index)) /* ${#1} */ - { - t = get_dollar_var_value (arg_index); - if (t == 0 && unbound_vars_is_error) - return INTMAX_MIN; - number = MB_STRLEN (t); - FREE (t); - } + var = find_variable (name + 1); #if defined (ARRAY_VARS) - else if ((var = find_variable (name + 1)) && (invisible_p (var) == 0) && (array_p (var) || assoc_p (var))) + if (var && (invisible_p (var) == 0) && (array_p (var) || assoc_p (var))) { if (assoc_p (var)) t = assoc_reference (assoc_cell (var), "0"); @@ -8052,14 +8322,28 @@ parameter_brace_expand_length (name) return INTMAX_MIN; number = MB_STRLEN (t); } + else #endif - /* Fast path for the common case of taking the length of a non-dynamic - scalar variable value. */ - else if ((var || (var = find_variable (name + 1))) && - invisible_p (var) == 0 && - array_p (var) == 0 && assoc_p (var) == 0 && - var->dynamic_value == 0) + /* Fast path for the common case of taking the length of a scalar + variable value. */ + if (var && invisible_p (var) == 0 && + array_p (var) == 0 && assoc_p (var) == 0 && + nameref_p (var) == 0) number = value_cell (var) ? MB_STRLEN (value_cell (var)) : 0; + else if ((var = find_variable_last_nameref (name + 1, 0)) && nameref_p (var)) + { + /* nameref that resolves to unset variable or non-identifier */ + newname = nameref_cell (var); + if (newname && *newname) + { + newname = (char *)xmalloc (strlen (nameref_cell (var)) + 2); + newname[0] = '#'; + strcpy (newname + 1, nameref_cell (var)); + if (valid_length_expression (newname)) + number = parameter_brace_expand_length (newname); + free (newname); + } + } else if (var == 0 && unbound_vars_is_error == 0) number = 0; else /* ${#PS1} */ @@ -8089,9 +8373,7 @@ parameter_brace_expand_length (name) */ static char * -skiparith (substr, delim) - char *substr; - int delim; +skiparith (char *substr, int delim) { int i; char delims[2]; @@ -8110,11 +8392,8 @@ skiparith (substr, delim) 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 (v, value, substr, vtype, e1p, e2p) - SHELL_VAR *v; - char *value, *substr; - int vtype; - intmax_t *e1p, *e2p; +verify_substring_values (SHELL_VAR *v, char *value, char *substr, int vtype, + intmax_t *e1p, intmax_t *e2p) { char *t, *temp1, *temp2; arrayind_t len; @@ -8247,12 +8526,8 @@ verify_substring_values (v, value, substr, vtype, e1p, e2p) 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, estatep, quoted, flags, varp, valp) - char *varname, *value; - array_eltstate_t *estatep; - int quoted, flags; - SHELL_VAR **varp; - char **valp; +get_var_and_type (char *varname, char *value, array_eltstate_t *estatep, int quoted, int flags, + SHELL_VAR **varp, char **valp) { int vtype, want_indir; char *temp, *vname; @@ -8310,7 +8585,8 @@ get_var_and_type (varname, value, estatep, quoted, flags, varp, valp) else { vtype = VT_ARRAYMEMBER; - *valp = array_value (vname, Q_DOUBLE_QUOTES, flags, estatep); + temp = array_value (vname, Q_DOUBLE_QUOTES, flags, estatep); + *valp = temp ? savestring (temp) : temp; } *varp = v; } @@ -8327,14 +8603,16 @@ get_var_and_type (varname, value, estatep, quoted, flags, varp, valp) { vtype = VT_ARRAYMEMBER; *varp = v; - *valp = array_value (vname, Q_DOUBLE_QUOTES, flags, estatep); + temp = array_value (vname, Q_DOUBLE_QUOTES, flags, estatep); + *valp = temp ? savestring (temp) : temp; } } else if ((v = find_variable (vname)) && (invisible_p (v) == 0) && (assoc_p (v) || array_p (v))) { vtype = VT_ARRAYMEMBER; *varp = v; - *valp = assoc_p (v) ? assoc_reference (assoc_cell (v), "0") : array_reference (array_cell (v), 0); + temp = assoc_p (v) ? assoc_reference (assoc_cell (v), "0") : array_reference (array_cell (v), 0); + *valp = temp ? savestring (temp) : temp; } else #endif @@ -8364,23 +8642,33 @@ get_var_and_type (varname, value, estatep, quoted, flags, varp, valp) /***********************************************************/ static char * -string_var_assignment (v, s) - SHELL_VAR *v; - char *s; +string_var_assignment (SHELL_VAR *v, char *s) { char flags[MAX_ATTRIBUTES], *ret, *val; int i; val = (v && (invisible_p (v) || var_isset (v) == 0)) ? (char *)NULL : sh_quote_reusable (s, 0); i = var_attribute_string (v, 0, flags); - if (i == 0 && val == 0) +#if 0 /*TAG: notyet */ + if (v && local_p (v) == 0 && variable_context > 0) + flags[i++] = 'g'; +#endif + /* i = strlen (flags) */ + if (i == 0 && val == 0 && (local_p (v) == 0 || v->context != variable_context)) return (char *)NULL; ret = (char *)xmalloc (i + STRLEN (val) + strlen (v->name) + 16 + MAX_ATTRIBUTES); + if (i > 0 && val == 0) - sprintf (ret, "declare -%s %s", flags, v->name); + sprintf (ret, "declare -%s %s", flags, v->name); /* just attributes, unset */ else if (i > 0) - sprintf (ret, "declare -%s %s=%s", flags, v->name, val); + sprintf (ret, "declare -%s %s=%s", flags, v->name, val); /* attributes, set */ +#if 1 /*TAG: tentative */ + else if (i == 0 && val && local_p (v) && variable_context == v->context) + sprintf (ret, "declare %s=%s", v->name, val); /* set local variable at current scope */ + else if (i == 0 && val == 0 && local_p (v) && variable_context == v->context) + sprintf (ret, "declare %s", v->name); /* unset local variable at current scope, unset */ +#endif else sprintf (ret, "%s=%s", v->name, val); free (val); @@ -8389,9 +8677,7 @@ string_var_assignment (v, s) #if defined (ARRAY_VARS) static char * -array_var_assignment (v, itype, quoted, atype) - SHELL_VAR *v; - int itype, quoted, atype; +array_var_assignment (SHELL_VAR *v, int itype, int quoted, int atype) { char *ret, *val, flags[MAX_ATTRIBUTES]; int i; @@ -8425,6 +8711,7 @@ array_var_assignment (v, itype, quoted, atype) return val; i = var_attribute_string (v, 0, flags); + /* i == strlen (flags) */ ret = (char *)xmalloc (i + STRLEN (val) + strlen (v->name) + 16); if (val) sprintf (ret, "declare -%s %s=%s", flags, v->name, val); @@ -8436,10 +8723,7 @@ array_var_assignment (v, itype, quoted, atype) #endif static char * -pos_params_assignment (list, itype, quoted) - WORD_LIST *list; - int itype; - int quoted; +pos_params_assignment (WORD_LIST *list, int itype, int quoted) { char *temp, *ret; @@ -8453,12 +8737,9 @@ pos_params_assignment (list, itype, quoted) } static char * -string_transform (xc, v, s) - int xc; - SHELL_VAR *v; - char *s; +string_transform (int xc, SHELL_VAR *v, char *s) { - char *ret, flags[MAX_ATTRIBUTES], *t; + char *ret, flags[MAX_ATTRIBUTES]; int i; if (((xc == 'A' || xc == 'a') && v == 0)) @@ -8482,12 +8763,10 @@ string_transform (xc, v, s) break; /* Transformations that modify the variable's value */ case 'E': - t = ansiexpand (s, 0, strlen (s), (int *)0); - ret = dequote_escapes (t); - free (t); + ret = ansicstr (s, strlen (s), 0, 0, 0); break; case 'P': - ret = decode_prompt_string (s); + ret = decode_prompt_string (s, 0); break; case 'Q': ret = sh_quote_reusable (s, 0); @@ -8509,11 +8788,7 @@ string_transform (xc, v, s) } static char * -list_transform (xc, v, list, itype, quoted) - int xc; - SHELL_VAR *v; - WORD_LIST *list; - int itype, quoted; +list_transform (int xc, SHELL_VAR *v, WORD_LIST *list, int itype, int quoted) { WORD_LIST *new, *l; WORD_DESC *w; @@ -8542,10 +8817,7 @@ list_transform (xc, v, list, itype, quoted) } static char * -parameter_list_transform (xc, itype, quoted) - int xc; - int itype; - int quoted; +parameter_list_transform (int xc, int itype, int quoted) { char *ret; WORD_LIST *list; @@ -8562,12 +8834,9 @@ parameter_list_transform (xc, itype, quoted) } #if defined (ARRAY_VARS) +/* STARSUB so we can figure out how it's indexed */ static char * -array_transform (xc, var, starsub, quoted) - int xc; - SHELL_VAR *var; - int starsub; /* so we can figure out how it's indexed */ - int quoted; +array_transform (int xc, SHELL_VAR *var, int starsub, int quoted) { ARRAY *a; HASH_TABLE *h; @@ -8625,9 +8894,8 @@ array_transform (xc, var, starsub, quoted) } #endif /* ARRAY_VARS */ -static int -valid_parameter_transform (xform) - char *xform; +static inline int +valid_parameter_transform (const char *xform) { if (xform[1]) return 0; @@ -8652,11 +8920,8 @@ valid_parameter_transform (xform) } static char * -parameter_brace_transform (varname, value, estatep, xform, rtype, quoted, pflags, flags) - char *varname, *value; - array_eltstate_t *estatep; - char *xform; - int rtype, quoted, pflags, flags; +parameter_brace_transform (char *varname, char *value, array_eltstate_t *estatep, + char *xform, int rtype, int quoted, int pflags, int flags) { int vtype, xc, starsub; char *temp1, *val, *oname; @@ -8698,8 +8963,7 @@ parameter_brace_transform (varname, value, estatep, xform, rtype, quoted, pflags case VT_VARIABLE: case VT_ARRAYMEMBER: temp1 = string_transform (xc, v, val); - if (vtype == VT_VARIABLE) - FREE (val); + FREE (val); if (temp1) { val = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) @@ -8755,9 +9019,7 @@ parameter_brace_transform (varname, value, estatep, xform, rtype, quoted, pflags 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; +mb_substring (const char *string, int s, int e) { char *tt; int start, stop, i; @@ -8766,7 +9028,7 @@ mb_substring (string, s, e) start = 0; /* Don't need string length in ADVANCE_CHAR unless multibyte chars possible. */ - slen = (MB_CUR_MAX > 1) ? STRLEN (string) : 0; + slen = (locale_mb_cur_max > 1) ? STRLEN (string) : 0; i = s; while (string[start] && i--) @@ -8785,11 +9047,8 @@ mb_substring (string, s, e) VARNAME. If VARNAME is an array variable, use the array elements. */ static char * -parameter_brace_substring (varname, value, estatep, substr, quoted, pflags, flags) - char *varname, *value; - array_eltstate_t *estatep; - char *substr; - int quoted, pflags, flags; +parameter_brace_substring (char *varname, char *value, array_eltstate_t *estatep, + char *substr, int quoted, int pflags, int flags) { intmax_t e1, e2; int vtype, r, starsub; @@ -8816,7 +9075,7 @@ parameter_brace_substring (varname, value, estatep, substr, quoted, pflags, flag this_command_name = oname; if (r <= 0) { - if (vtype == VT_VARIABLE) + if (vtype == VT_VARIABLE || vtype == VT_ARRAYMEMBER) FREE (val); return ((r == 0) ? &expand_param_error : (char *)NULL); } @@ -8826,14 +9085,13 @@ parameter_brace_substring (varname, value, estatep, substr, quoted, pflags, flag case VT_VARIABLE: case VT_ARRAYMEMBER: #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1) + if (locale_mb_cur_max > 1) tt = mb_substring (val, e1, e2); else #endif tt = substring (val, e1, e2); - if (vtype == VT_VARIABLE) - FREE (val); + FREE (val); if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) temp = quote_string (tt); else @@ -8891,11 +9149,10 @@ parameter_brace_substring (varname, value, estatep, substr, quoted, pflags, flag /****************************************************************/ static int -shouldexp_replacement (s) - char *s; +shouldexp_replacement (const char *s) { - size_t slen; - int sindex, c; + size_t sindex, slen; + int c; DECLARE_MBSTATE; sindex = 0; @@ -8924,9 +9181,7 @@ shouldexp_replacement (s) } char * -pat_subst (string, pat, rep, mflags) - char *string, *pat, *rep; - int mflags; +pat_subst (char *string, char *pat, char *rep, int mflags) { char *ret, *s, *e, *str, *rstr, *mstr, *send; int rptr, mtype, rxpand, mlen; @@ -9064,9 +9319,7 @@ pat_subst (string, pat, rep, mflags) /* 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; +pos_params_pat_subst (char *string, char *pat, char *rep, int mflags) { WORD_LIST *save, *params; WORD_DESC *w; @@ -9106,11 +9359,8 @@ pos_params_pat_subst (string, pat, rep, mflags) 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, estatep, patsub, quoted, pflags, flags) - char *varname, *value; - array_eltstate_t *estatep; - char *patsub; - int quoted, pflags, flags; +parameter_brace_patsub (char *varname, char *value, array_eltstate_t *estatep, + char *patsub, int quoted, int pflags, int flags) { int vtype, mflags, starsub, delim; char *val, *temp, *pat, *rep, *p, *lpatsub, *tt, *oname; @@ -9192,7 +9442,6 @@ parameter_brace_patsub (varname, value, estatep, patsub, quoted, pflags, flags) consistently. */ if (patsub_replacement && rep && *rep && shouldexp_replacement (rep)) mflags |= MATCH_EXPREP; - } /* ksh93 doesn't allow the match specifier to be a part of the expanded @@ -9231,8 +9480,7 @@ parameter_brace_patsub (varname, value, estatep, patsub, quoted, pflags, flags) case VT_VARIABLE: case VT_ARRAYMEMBER: temp = pat_subst (val, p, rep, mflags); - if (vtype == VT_VARIABLE) - FREE (val); + FREE (val); if (temp) { tt = (mflags & MATCH_QUOTED) ? quote_string (temp) : quote_escapes (temp); @@ -9309,10 +9557,7 @@ parameter_brace_patsub (varname, value, estatep, patsub, quoted, pflags, flags) /* Do case modification on the positional parameters. */ static char * -pos_params_modcase (string, pat, modop, mflags) - char *string, *pat; - int modop; - int mflags; +pos_params_modcase (char *string, char *pat, int modop, int mflags) { WORD_LIST *save, *params; WORD_DESC *w; @@ -9352,12 +9597,8 @@ pos_params_modcase (string, pat, modop, mflags) to perform. QUOTED is a flags word containing the type of quoting currently in effect. */ static char * -parameter_brace_casemod (varname, value, estatep, modspec, patspec, quoted, pflags, flags) - char *varname, *value; - array_eltstate_t *estatep; - int modspec; - char *patspec; - int quoted, pflags, flags; +parameter_brace_casemod (char *varname, char *value, array_eltstate_t *estatep, + int modspec, char *patspec, int quoted, int pflags, int flags) { int vtype, starsub, modop, mflags, x; char *val, *temp, *pat, *p, *lpat, *tt, *oname; @@ -9419,8 +9660,7 @@ parameter_brace_casemod (varname, value, estatep, modspec, patspec, quoted, pfla case VT_VARIABLE: case VT_ARRAYMEMBER: temp = sh_modcase (val, pat, modop); - if (vtype == VT_VARIABLE) - FREE (val); + FREE (val); if (temp) { tt = (mflags & MATCH_QUOTED) ? quote_string (temp) : quote_escapes (temp); @@ -9484,9 +9724,7 @@ parameter_brace_casemod (varname, value, estatep, modspec, patspec, quoted, pfla means that this must not be an arithmetic expression, though the parser will not accept it without a balanced total number of parens. */ static int -chk_arithsub (s, len) - const char *s; - int len; +chk_arithsub (const char *s, int len) { int i, count; DECLARE_MBSTATE; @@ -9520,7 +9758,7 @@ chk_arithsub (s, len) break; case '"': - i = skip_double_quoted ((char *)s, len, ++i, 0); + i = skip_double_quoted (s, len, ++i, 0); break; } } @@ -9536,15 +9774,14 @@ chk_arithsub (s, len) /* ${[#][!]name[[:][^[^]][,[,]]#[#]%[%]-=?+[word][:e1[:e2]]]} */ static WORD_DESC * -parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, contains_dollar_at) - char *string; - int *indexp, quoted, pflags, *quoted_dollar_atp, *contains_dollar_at; +parameter_brace_expand (char *string, size_t *indexp, int quoted, int pflags, int *quoted_dollar_atp, int *contains_dollar_at) { int check_nullness, var_is_set, var_is_null, var_is_special; int want_substring, want_indir, want_patsub, want_casemod, want_attributes; char *name, *value, *temp, *temp1; WORD_DESC *tdesc, *ret; - int t_index, sindex, c, tflag, modspec, local_pflags, all_element_arrayref; + size_t t_index, sindex; + int c, tflag, modspec, local_pflags, all_element_arrayref; intmax_t number; array_eltstate_t es; @@ -10224,15 +10461,13 @@ bad_substitution: the braces are used, parameter_brace_expand() does the work, possibly calling param_expand recursively. */ static WORD_DESC * -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; +param_expand (char *string, size_t *sindex, int quoted, + int *expanded_something, int *contains_dollar_at, int *quoted_dollar_at_p, + int *had_quoted_null_p, int pflags) { char *temp, *temp1, uerror[3], *savecmd; - int zindex, t_index, expok, eflag; + size_t zindex, t_index; + int expok, eflag; unsigned char c; intmax_t number; SHELL_VAR *var; @@ -10273,13 +10508,7 @@ param_expand (string, sindex, quoted, expanded_something, err_unboundvar (uerror); return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal); } - if (temp1) - temp = (*temp1 && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) - ? quote_string (temp1) - : quote_escapes (temp1); - else - temp = (char *)NULL; - + temp = quote_var_value (temp1, quoted, pflags); break; /* $$ -- pid of the invoking shell. */ @@ -10362,9 +10591,10 @@ 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. */ - temp = (quoted & (Q_DOUBLE_QUOTES|Q_PATQUOTE)) ? string_list_dollar_star (list, quoted, 0) : string_list (list); + temp = string_list_dollar_star (list, quoted, 0); if (temp) { + /* Q_HERE_DOCUMENT as well? */ temp1 = (quoted & Q_DOUBLE_QUOTES) ? quote_string (temp) : temp; if (*temp == 0) tflag |= W_HASQUOTEDNULL; @@ -10404,6 +10634,18 @@ param_expand (string, sindex, quoted, expanded_something, temp1 = string_list_dollar_star (list, quoted, pflags); temp = temp1 ? quote_string (temp1) : temp1; + /* XXX - tentative - note that we saw a quoted null here */ + if (temp1 && *temp1 == 0 && QUOTED_NULL (temp)) + tflag |= W_SAWQUOTEDNULL; + FREE (temp1); + } + else if (expand_no_split_dollar_star && quoted == 0 && ifs_is_set && ifs_is_null == 0 && (pflags & PF_NOSPLIT2)) + { + /* no splitting (conditional command, pattern expansion, array + subscripts, case command word), IFS set to non-null value */ + temp1 = string_list_dollar_star (list, quoted, 0); + temp = temp1 ? quote_nosplit (temp1) : temp1; + /* XXX - tentative - note that we saw a quoted null here */ if (temp1 && *temp1 == 0 && QUOTED_NULL (temp)) tflag |= W_SAWQUOTEDNULL; @@ -10422,11 +10664,7 @@ param_expand (string, sindex, quoted, expanded_something, temp = string_list_dollar_at (list, quoted, 0); /* Set W_SPLITSPACE to make sure the individual positional parameters are split into separate arguments */ -#if 0 - if (quoted == 0 && (ifs_is_set == 0 || ifs_is_null)) -#else /* change with bash-5.0 */ if (quoted == 0 && ifs_is_null) -#endif tflag |= W_SPLITSPACE; /* If we're not quoted but we still don't want word splitting, make we quote the IFS characters to protect them from splitting (e.g., @@ -10535,6 +10773,30 @@ param_expand (string, sindex, quoted, expanded_something, break; case LBRACE: + /* Foreground command substitution. */ + if (FUNSUB_CHAR (string[zindex + 1])) + { + /* We have to extract the contents of this command substitution. */ + t_index = zindex + 1; + temp = extract_function_subst (string, &t_index, quoted, (pflags&PF_COMPLETE) ? SX_COMPLETE : 0); + zindex = t_index; + + /* This is basically the same as the comsub code. */ + if (pflags & PF_NOCOMSUB) + /* we need zindex+1 because string[zindex] == RPAREN */ + temp1 = substring (string, *sindex, zindex+1); + else + { + tdesc = function_substitute (temp, quoted, pflags&PF_ASSIGNRHS); + temp1 = tdesc ? tdesc->word : (char *)NULL; + if (tdesc) + dispose_word_desc (tdesc); + } + FREE (temp); + temp = temp1; + break; + } + tdesc = parameter_brace_expand (string, &zindex, quoted, pflags, quoted_dollar_at_p, contains_dollar_at); @@ -10692,26 +10954,18 @@ comsub: { #if defined (ARRAY_VARS) if (assoc_p (var) || array_p (var)) - { - temp = array_p (var) ? array_reference (array_cell (var), 0) - : assoc_reference (assoc_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; - } + temp = array_p (var) ? array_reference (array_cell (var), 0) + : assoc_reference (assoc_cell (var), "0"); else #endif - { - temp = value_cell (var); + /* $X */ + temp = value_cell (var); - temp = (*temp && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) - ? quote_string (temp) - : ((pflags & PF_ASSIGNRHS) ? quote_rhs (temp) - : quote_escapes (temp)); - } + /* Quote the value appropriately */ + if (temp == 0 && unbound_vars_is_error) + goto unbound_variable; /* can happen if array[0] is not set */ + else + temp = quote_var_value (temp, quoted, pflags); free (temp1); @@ -10727,6 +10981,7 @@ comsub: { chk_atstar (temp, quoted, pflags, quoted_dollar_at_p, contains_dollar_at); tdesc = parameter_brace_expand_word (temp, SPECIAL_VAR (temp, 0), quoted, pflags, 0); + free (temp1); if (tdesc == &expand_wdesc_error || tdesc == &expand_wdesc_fatal) return (tdesc); ret = tdesc; @@ -10735,10 +10990,11 @@ comsub: else #endif /* y=2 ; typeset -n x=y; echo $x is not the same as echo $2 in ksh */ - if (temp && *temp && legal_identifier (temp) == 0) + if (temp && *temp && valid_identifier (temp) == 0) { set_exit_status (EXECUTION_FAILURE); report_error (_("%s: invalid variable name for name reference"), temp); + free (temp1); return (&expand_wdesc_error); /* XXX */ } else @@ -10787,9 +11043,7 @@ static char abstab[256] = { '\1' }; /* Run an array subscript through the appropriate word expansions. */ char * -expand_subscript_string (string, quoted) - char *string; - int quoted; +expand_subscript_string (const char *string, int quoted) { WORD_DESC td; WORD_LIST *tlist; @@ -10833,14 +11087,11 @@ expand_subscript_string (string, quoted) only expand it once, we quote the characters that would start another expansion and the bracket characters that are special to array subscripts. */ static char * -expand_array_subscript (string, sindex, quoted, flags) - char *string; - int *sindex; - int quoted, flags; +expand_array_subscript (const char *string, size_t *sindex, int quoted, int flags) { char *ret, *exp, *t; - size_t slen; - int si, ni; + size_t si, slen; + int ni; si = *sindex; slen = STRLEN (string); @@ -10878,6 +11129,7 @@ expand_array_subscript (string, sindex, quoted, flags) exp = substring (string, si+1, ni); t = expand_subscript_string (exp, quoted & ~(Q_ARITH|Q_DOUBLE_QUOTES)); free (exp); + /* XXX - use sh_single_quote here? */ exp = t ? sh_backslash_quote (t, abstab, 0) : savestring (""); free (t); @@ -10896,7 +11148,7 @@ expand_array_subscript (string, sindex, quoted, flags) #endif void -invalidate_cached_quoted_dollar_at () +invalidate_cached_quoted_dollar_at (void) { dispose_words (cached_quoted_dollar_at); cached_quoted_dollar_at = 0; @@ -10929,11 +11181,7 @@ invalidate_cached_quoted_dollar_at () #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; +expand_word_internal (WORD_DESC *word, int quoted, int isexp, int *contains_dollar_at, int *expanded_something) { WORD_LIST *list; WORD_DESC *tword; @@ -10957,7 +11205,7 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin size_t string_size; /* The index into STRING. */ - int sindex; + size_t sindex; /* This gets 1 if we see a $@ while quoted. */ int quoted_dollar_at; @@ -10976,12 +11224,11 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin int local_expanded; int tflag; int pflags; /* flags passed to param_expand */ - int mb_cur_max; int assignoff; /* If assignment, offset of `=' */ register unsigned char c; /* Current character. */ - int t_index; /* For calls to string_extract_xxx. */ + size_t t_index; /* For calls to string_extract_xxx. */ char twochars[2]; @@ -11017,11 +11264,10 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin string = word->word; if (string == 0) goto finished_with_string; - mb_cur_max = MB_CUR_MAX; /* Don't need the string length for the SADD... and COPY_ macros unless multibyte characters are possible, but do need it for bounds checking. */ - string_size = (mb_cur_max > 1) ? strlen (string) : 1; + string_size = (locale_mb_cur_max > 1) ? strlen (string) : 1; if (contains_dollar_at) *contains_dollar_at = 0; @@ -11043,7 +11289,7 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin case CTLESC: sindex++; #if HANDLE_MULTIBYTE - if (mb_cur_max > 1 && string[sindex]) + if (locale_mb_cur_max > 1 && string[sindex]) { SADD_MBQCHAR_BODY(temp, string, sindex, string_size); } @@ -11258,6 +11504,12 @@ add_string: if (tword && (tword->flags & W_SAWQUOTEDNULL)) had_quoted_null = 1; /* XXX */ + /* This loses tword->flags. If quoted == 0 but (tword->flags & W_QUOTED), + we need to note that somewhere. It means that the result will be + split, but this portion should not be. It only really matters if + $IFS contains $'\001', since usually quoting with CTLESC will + inhibit the word splitting. */ + temp = tword ? tword->word : (char *)NULL; dispose_word_desc (tword); @@ -11303,7 +11555,7 @@ add_string: temp1 = substring (string, t_index, sindex + 1); else { - de_backslash (temp); + de_backslash (temp, quoted); tword = command_substitute (temp, quoted, PF_BACKQUOTE); temp1 = tword ? tword->word : (char *)NULL; if (tword) @@ -11545,6 +11797,10 @@ add_twochars: will cause word splitting. */ if (temp == 0 && quoted_state == PARTIALLY_QUOTED && quoted == 0 && (word->flags & (W_NOSPLIT|W_EXPANDRHS|W_ASSIGNRHS)) == W_EXPANDRHS) { + /* Don't add a quoted null character if it would eventually be + used as a word delimiter when splitting. */ + if (isifs (CTLNUL)) + continue; c = CTLNUL; sindex--; had_quoted_null = 1; @@ -11553,6 +11809,11 @@ add_twochars: if (temp == 0 && quoted_state == PARTIALLY_QUOTED && (word->flags & (W_NOSPLIT|W_NOSPLIT2))) continue; + /* Throw away a quoted null instead of adding a character that + would eventually be a word delimiter when splitting. */ + if (temp == 0 && quoted_state == PARTIALLY_QUOTED && had_quoted_null && isifs(CTLNUL)) + continue; + add_quoted_string: if (temp) @@ -11660,10 +11921,10 @@ add_quoted_character: #if HANDLE_MULTIBYTE /* XXX - should make sure that c is actually multibyte, otherwise we can use the twochars branch */ - if (mb_cur_max > 1) + if (locale_mb_cur_max > 1) sindex--; - if (mb_cur_max > 1) + if (locale_mb_cur_max > 1) { SADD_MBQCHAR_BODY(temp, string, sindex, string_size); } @@ -11889,13 +12150,12 @@ set_word_flags: /* 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; +string_quote_removal (const char *string, int quoted) { - size_t slen; - char *r, *result_string, *temp, *send; - int sindex, tindex, dquote; + size_t slen, sindex, tindex; + char *r, *result_string, *temp; + const char *send; + int dquote; unsigned char c; DECLARE_MBSTATE; @@ -11957,9 +12217,7 @@ string_quote_removal (string, quoted) /* 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_quote_removal (WORD_DESC *word, int quoted) { WORD_DESC *w; char *t; @@ -11974,18 +12232,13 @@ word_quote_removal (word, quoted) 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_quote_removal (WORD_LIST *list, int quoted) { WORD_LIST *result, *t, *tresult, *e; for (t = list, result = (WORD_LIST *)NULL; t; t = t->next) { tresult = make_word_list (word_quote_removal (t->word, quoted), (WORD_LIST *)NULL); -#if 0 - result = (WORD_LIST *) list_append (result, tresult); -#else if (result == 0) result = e = tresult; else @@ -11994,7 +12247,6 @@ word_list_quote_removal (list, quoted) while (e->next) e = e->next; } -#endif } return (result); } @@ -12007,8 +12259,7 @@ word_list_quote_removal (list, quoted) *******************************************/ void -setifs (v) - SHELL_VAR *v; +setifs (SHELL_VAR *v) { char *t; unsigned char uc; @@ -12041,8 +12292,9 @@ setifs (v) else { size_t ifs_len; - ifs_len = strnlen (ifs_value, MB_CUR_MAX); - ifs_firstc_len = MBLEN (ifs_value, ifs_len); + DECLARE_MBSTATE; + ifs_len = strnlen (ifs_value, locale_mb_cur_max); + ifs_firstc_len = MBRLEN (ifs_value, ifs_len, &state); } if (ifs_firstc_len == 1 || ifs_firstc_len == 0 || MB_INVALIDCH (ifs_firstc_len)) { @@ -12059,18 +12311,16 @@ setifs (v) } char * -getifs () +getifs (void) { - return ifs_value; + return ifs_value ? savestring (ifs_value) : 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_split (WORD_DESC *w, char *ifs_chars) { WORD_LIST *result; @@ -12090,8 +12340,7 @@ word_split (w, ifs_chars) /* 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_split (WORD_LIST *list) { WORD_LIST *result, *t, *tresult, *e; WORD_DESC *w; @@ -12138,8 +12387,7 @@ word_list_split (list) /* Do any word-expansion-specific cleanup and jump to top_level */ static void -exp_jump_to_top_level (v) - int v; +exp_jump_to_top_level (int v) { set_pipestatus_from_exit (last_command_exit_value); @@ -12166,8 +12414,7 @@ exp_jump_to_top_level (v) variable assignments and other environment assignments are placed on SUBST_ASSIGN_VARLIST. */ static WORD_LIST * -separate_out_assignments (tlist) - WORD_LIST *tlist; +separate_out_assignments (WORD_LIST *tlist) { register WORD_LIST *vp, *lp; @@ -12278,8 +12525,7 @@ separate_out_assignments (tlist) variable assignments. */ WORD_LIST * -expand_words (list) - WORD_LIST *list; +expand_words (WORD_LIST *list) { return (expand_word_list_internal (list, WEXP_ALL)); } @@ -12287,23 +12533,19 @@ expand_words (list) /* Same as expand_words (), but doesn't hack variable or environment variables. */ WORD_LIST * -expand_words_no_vars (list) - WORD_LIST *list; +expand_words_no_vars (WORD_LIST *list) { return (expand_word_list_internal (list, WEXP_NOVARS)); } WORD_LIST * -expand_words_shellexp (list) - WORD_LIST *list; +expand_words_shellexp (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; +glob_expand_word_list (WORD_LIST *tlist, int eflags) { char **glob_array, *temp_string; register int glob_index; @@ -12364,7 +12606,7 @@ glob_expand_word_list (tlist, eflags) if (glob_list) { - output_list = (WORD_LIST *)list_append (glob_list, output_list); + output_list = (WORD_LIST *)list_append ((GENERIC_LIST *)glob_list, (GENERIC_LIST *)output_list); PREPEND_LIST (tlist, disposables); } else if (fail_glob_expansion != 0) @@ -12410,9 +12652,7 @@ glob_expand_word_list (tlist, eflags) #if defined (BRACE_EXPANSION) static WORD_LIST * -brace_expand_word_list (tlist, eflags) - WORD_LIST *tlist; - int eflags; +brace_expand_word_list (WORD_LIST *tlist, int eflags) { register char **expansions; char *temp_string; @@ -12448,6 +12688,12 @@ brace_expand_word_list (tlist, eflags) if (mbschr (tlist->word->word, LBRACE)) { expansions = brace_expand (tlist->word->word); + if (expansions == 0) + { + expansions = strvec_create (2); + expansions[0] = savestring (tlist->word->word); + expansions[1] = NULL; + } for (eindex = 0; temp_string = expansions[eindex]; eindex++) { @@ -12490,10 +12736,7 @@ brace_expand_word_list (tlist, eflags) the list of options to supply to `declare'. CMD is the declaration command we are expanding right now; it's unused currently. */ static int -make_internal_declare (word, option, cmd) - char *word; - char *option; - char *cmd; +make_internal_declare (const char *word, const char *opts_on, const char *opts_off, const char *cmd) { int t, r; WORD_LIST *wl; @@ -12510,7 +12753,10 @@ make_internal_declare (word, option, cmd) } wl = make_word_list (w, (WORD_LIST *)NULL); - wl = make_word_list (make_word (option), wl); + if (*opts_on) + wl = make_word_list (make_word (opts_on), wl); + if (*opts_off) + wl = make_word_list (make_word (opts_off), wl); r = declare_builtin (wl); @@ -12535,21 +12781,19 @@ make_internal_declare (word, option, cmd) ['expanded-ind']='expanded-value'. */ static WORD_LIST * -expand_oneword (value, flags) - char *value; - int flags; +expand_oneword (char *value, int atype) { WORD_LIST *l, *nl; char *t; int kvpair; - if (flags == 0) + if (atype == 0) { /* Indexed array */ - l = expand_compound_array_assignment ((SHELL_VAR *)NULL, value, flags); + l = expand_compound_array_assignment ((SHELL_VAR *)NULL, value, atype); /* Now we quote the results of the expansion above to prevent double expansion. */ - quote_compound_array_list (l, flags); + quote_compound_array_list (l, atype); return l; } else @@ -12574,7 +12818,7 @@ expand_oneword (value, flags) if ((nl->word->flags & W_ASSIGNMENT) == 0) t = sh_single_quote (nl->word->word ? nl->word->word : ""); else - t = expand_and_quote_assoc_word (nl->word->word, flags); + t = expand_and_quote_assoc_word (nl->word->word, atype); free (nl->word->word); nl->word->word = t; } @@ -12590,12 +12834,11 @@ expand_oneword (value, flags) handling, see expand_oneword() above. The return value is NAME[+]=( expanded-and-quoted-VALUE ). */ static void -expand_compound_assignment_word (tlist, flags) - WORD_LIST *tlist; - int flags; +expand_compound_assignment_word (WORD_LIST *tlist, int atype) { WORD_LIST *l; - int wlen, oind, t; + size_t wlen, oind; + int t; char *value, *temp; /*itrace("expand_compound_assignment_word: original word = -%s-", tlist->word->word);*/ @@ -12606,7 +12849,7 @@ expand_compound_assignment_word (tlist, flags) value = extract_array_assignment_list (tlist->word->word + t + 1, &oind); /* This performs one round of expansion on the index/key and value and single-quotes each word in the result. */ - l = expand_oneword (value, flags); + l = expand_oneword (value, atype); free (value); value = string_list (l); @@ -12650,99 +12893,76 @@ expand_compound_assignment_word (tlist, flags) etc.) even though the word is single-quoted so all that needs to happen is quote removal. */ static WORD_LIST * -expand_declaration_argument (tlist, wcmd) - WORD_LIST *tlist, *wcmd; +expand_declaration_argument (WORD_LIST *tlist, WORD_LIST *wcmd) { - char opts[16], omap[128]; - int t, opti, oind, skip, inheriting; + char opts_on[16], opts_off[16], omap[128]; + int t, i_on, i_off, oind, skip, inheriting; WORD_LIST *l; - inheriting = localvar_inherit; - opti = 0; - if (tlist->word->flags & (W_ASSIGNASSOC|W_ASSNGLOBAL|W_CHKLOCAL|W_ASSIGNARRAY)) - opts[opti++] = '-'; + memset (omap, '\0', sizeof (omap)); - if ((tlist->word->flags & (W_ASSIGNASSOC|W_ASSNGLOBAL)) == (W_ASSIGNASSOC|W_ASSNGLOBAL)) - { - opts[opti++] = 'g'; - opts[opti++] = 'A'; - } - else if (tlist->word->flags & W_ASSIGNASSOC) - { - opts[opti++] = 'A'; - } - else if ((tlist->word->flags & (W_ASSIGNARRAY|W_ASSNGLOBAL)) == (W_ASSIGNARRAY|W_ASSNGLOBAL)) - { - opts[opti++] = 'g'; - opts[opti++] = 'a'; - } + if (tlist->word->flags & W_ASSIGNASSOC) + omap['A'] = 1; else if (tlist->word->flags & W_ASSIGNARRAY) - { - opts[opti++] = 'a'; - } - else if (tlist->word->flags & W_ASSNGLOBAL) - opts[opti++] = 'g'; + omap['a'] = 1; + if (tlist->word->flags & W_ASSNGLOBAL) + omap['g'] = 1; if (tlist->word->flags & W_CHKLOCAL) - opts[opti++] = 'G'; + omap['G'] = 1; /* If we have special handling note the integer attribute and others that transform the value upon assignment. What we do is take all of the option arguments and scan through them looking for options - that cause such transformations, and add them to the `opts' array. */ + that cause such transformations, and add them to either the `opts_on' + or `opts_off' array as appropriate. */ - memset (omap, '\0', sizeof (omap)); for (l = wcmd->next; l != tlist; l = l->next) { int optchar; if (l->word->word[0] != '-' && l->word->word[0] != '+') break; /* non-option argument */ - if (l->word->word[0] == '-' && l->word->word[1] == '-' && l->word->word[2] == 0) + if (l->word->word[1] == 0) + break; /* handle `local -'; let `declare +' be an error */ + + if (ISOPTION (l->word->word, '-')) break; /* -- signals end of options */ + optchar = l->word->word[0]; for (oind = 1; l->word->word[oind]; oind++) switch (l->word->word[oind]) { case 'I': - inheriting = 1; case 'i': case 'l': case 'u': case 'c': - omap[l->word->word[oind]] = 1; - if (opti == 0) - opts[opti++] = optchar; + omap[l->word->word[oind]] |= (optchar == '-' ? 1 : 2); break; default: break; } } + i_on = i_off = 0; for (oind = 0; oind < sizeof (omap); oind++) - if (omap[oind]) - opts[opti++] = oind; - - /* If there are no -a/-A options, but we have a compound assignment, - we have a choice: we can set opts[0]='-', opts[1]='a', since the - default is to create an indexed array, and call - make_internal_declare with that, or we can just skip the -a and let - declare_builtin deal with it. Once we're here, we're better set - up for the latter, since we don't want to deal with looking up - any existing variable here -- better to let declare_builtin do it. - We need the variable created, though, especially if it's local, so - we get the scoping right before we call do_word_assignment. - To ensure that make_local_declare gets called, we add `--' if there - aren't any options. */ - if ((tlist->word->flags & (W_ASSIGNASSOC|W_ASSIGNARRAY)) == 0) { - if (opti == 0) + if (omap[oind] & 1) /* on options */ + { + if (i_on == 0) + opts_on[i_on++] = '-'; + opts_on[i_on++] = oind; + } + if (omap[oind] & 2) /* off options */ { - opts[opti++] = '-'; - opts[opti++] = '-'; + if (i_off == 0) + opts_off[i_off++] = '+'; + opts_off[i_off++] = oind; } } - opts[opti] = '\0'; + + opts_on[i_on] = opts_off[i_off] = '\0'; /* This isn't perfect, but it's a start. Improvements later. We expand tlist->word->word and single-quote the results to avoid multiple @@ -12753,17 +12973,15 @@ expand_declaration_argument (tlist, wcmd) expand_compound_assignment_word (tlist, (tlist->word->flags & W_ASSIGNASSOC) ? 1 : 0); skip = 0; - if (opti > 0) + /* We always call make_internal_declare */ + t = make_internal_declare (tlist->word->word, opts_on, opts_off, wcmd ? wcmd->word->word : (char *)0); + if (t != EXECUTION_SUCCESS) { - t = make_internal_declare (tlist->word->word, opts, wcmd ? wcmd->word->word : (char *)0); - if (t != EXECUTION_SUCCESS) - { - last_command_exit_value = t; - if (tlist->word->flags & W_FORCELOCAL) /* non-fatal error */ - skip = 1; - else - exp_jump_to_top_level (DISCARD); - } + last_command_exit_value = t; + if (tlist->word->flags & W_FORCELOCAL) /* non-fatal error */ + skip = 1; + else + exp_jump_to_top_level (DISCARD); } if (skip == 0) @@ -12772,7 +12990,7 @@ expand_declaration_argument (tlist, wcmd) if (t == 0) { last_command_exit_value = EXECUTION_FAILURE; - exp_jump_to_top_level (DISCARD); + bash_variable_assignment_error (0); } } @@ -12788,9 +13006,7 @@ expand_declaration_argument (tlist, wcmd) #endif /* ARRAY_VARS */ static WORD_LIST * -shell_expand_word_list (tlist, eflags) - WORD_LIST *tlist; - int eflags; +shell_expand_word_list (WORD_LIST *tlist, int eflags) { WORD_LIST *expanded, *orig_list, *new_list, *next, *temp_list, *wcmd; int expanded_something, has_dollar_at; @@ -12855,7 +13071,7 @@ shell_expand_word_list (tlist, eflags) } expanded = REVERSE_LIST (temp_list, WORD_LIST *); - new_list = (WORD_LIST *)list_append (expanded, new_list); + new_list = (WORD_LIST *)list_append ((GENERIC_LIST *)expanded, (GENERIC_LIST *)new_list); } if (orig_list) @@ -12867,14 +13083,39 @@ shell_expand_word_list (tlist, eflags) return (new_list); } +/* Handle a variable assignment error in default mode. */ +static inline void +bash_variable_assignment_error (int force_exit) +{ + if (interactive_shell == 0 && force_exit) + exp_jump_to_top_level (FORCE_EOF); + else if (interactive_shell == 0) + exp_jump_to_top_level (DISCARD); /* XXX - maybe change later */ + else + exp_jump_to_top_level (DISCARD); +} + +/* Handle a variable assignment error in posix mode. */ +static inline void +posix_variable_assignment_error (int force_exit) +{ +#if defined (STRICT_POSIX) + if (posixly_correct && interactive_shell == 0) +#else + if (posixly_correct && interactive_shell == 0 && executing_command_builtin == 0) +#endif + exp_jump_to_top_level (FORCE_EOF); + else if (force_exit) + exp_jump_to_top_level (FORCE_EOF); + else + exp_jump_to_top_level (DISCARD); +} + /* Perform assignment statements optionally preceding a command name COMMAND. If COMMAND == NULL, is_nullcmd usually == 1. Follow the POSIX rules for variable assignment errors. */ static int -do_assignment_statements (varlist, command, is_nullcmd) - WORD_LIST *varlist; - char *command; - int is_nullcmd; +do_assignment_statements (WORD_LIST *varlist, char *command, int is_nullcmd) { WORD_LIST *temp_list; char *savecmd; @@ -12910,14 +13151,7 @@ do_assignment_statements (varlist, command, is_nullcmd) if (is_nullcmd) /* assignment statement */ { last_command_exit_value = EXECUTION_FAILURE; -#if defined (STRICT_POSIX) - if (posixly_correct && interactive_shell == 0) -#else - if (posixly_correct && interactive_shell == 0 && executing_command_builtin == 0) -#endif - exp_jump_to_top_level (FORCE_EOF); - else - exp_jump_to_top_level (DISCARD); + posix_variable_assignment_error (0); } /* In posix mode, assignment errors in the temporary environment cause a non-interactive shell executing a special builtin to @@ -12931,14 +13165,9 @@ do_assignment_statements (varlist, command, is_nullcmd) { last_command_exit_value = EXECUTION_FAILURE; #if defined (STRICT_POSIX) - exp_jump_to_top_level ((interactive_shell == 0) ? FORCE_EOF : DISCARD); + posix_variable_assignment_error (1); #else - if (interactive_shell == 0 && is_special_builtin) - exp_jump_to_top_level (FORCE_EOF); - else if (interactive_shell == 0) - exp_jump_to_top_level (DISCARD); /* XXX - maybe change later */ - else - exp_jump_to_top_level (DISCARD); + bash_variable_assignment_error (is_special_builtin); #endif } else @@ -12962,11 +13191,9 @@ do_assignment_statements (varlist, command, is_nullcmd) with W_NOBRACE set do not undergo brace expansion (see brace_expand_word_list above). */ static WORD_LIST * -expand_word_list_internal (list, eflags) - WORD_LIST *list; - int eflags; +expand_word_list_internal (WORD_LIST *list, int eflags) { - WORD_LIST *new_list, *temp_list; + WORD_LIST *new_list; tempenv_assign_error = 0; if (list == 0) diff --git a/subst.h b/subst.h index 28cc92031..6c20978fc 100644 --- a/subst.h +++ b/subst.h @@ -1,6 +1,6 @@ /* subst.h -- Names of externally visible functions in subst.c. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -44,7 +44,7 @@ #define Q_ARRAYSUB 0x200 /* expanding indexed array subscript */ /* Flag values controlling how assignment statements are treated. */ -#define ASS_APPEND 0x0001 +#define ASS_APPEND 0x0001 /* a+=b */ #define ASS_MKLOCAL 0x0002 #define ASS_MKASSOC 0x0004 #define ASS_MKGLOBAL 0x0008 /* force global assignment */ @@ -57,6 +57,8 @@ #define ASS_NOINVIS 0x0400 /* don't resolve local invisible variables */ #define ASS_ALLOWALLSUB 0x0800 /* allow * and @ as associative array keys */ #define ASS_ONEWORD 0x1000 /* don't check array subscripts, assume higher level has done that */ +#define ASS_NOTEMPENV 0x2000 /* don't assign into temporary environment */ +#define ASS_XTRACE 0x4000 /* print trace after compound assignment expansion */ /* Flags for the string extraction functions. */ #define SX_NOALLOC 0x0001 /* just skip; don't return substring */ @@ -66,7 +68,7 @@ #define SX_NOCTLESC 0x0010 /* don't honor CTLESC quoting */ #define SX_NOESCCTLNUL 0x0020 /* don't let CTLESC quote CTLNUL */ #define SX_NOLONGJMP 0x0040 /* don't longjmp on fatal error */ -#define SX_ARITHSUB 0x0080 /* extracting $(( ... )) (currently unused) */ +#define SX_FUNSUB 0x0080 /* extracting ${ command; }; passed to xparse_dolparen */ #define SX_POSIXEXP 0x0100 /* extracting new Posix pattern removal expansions in extract_dollar_brace_string */ #define SX_WORD 0x0200 /* extracting word in ${param op word} */ #define SX_COMPLETE 0x0400 /* extracting word for completion */ @@ -75,232 +77,249 @@ /* Remove backslashes which are quoting backquotes from STRING. Modifies STRING, and returns a pointer to it. */ -extern char * de_backslash PARAMS((char *)); +extern char * de_backslash (char *, int); /* Replace instances of \! in a string with !. */ -extern void unquote_bang PARAMS((char *)); +extern void unquote_bang (char *); /* 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 just after the matching ")". XFLAGS is additional flags to pass to other extraction functions, */ -extern char *extract_command_subst PARAMS((char *, int *, int)); +extern char *extract_command_subst (const char *, size_t *, int); + +/* Placeholder */ +extern char *extract_function_subst (const char *, size_t *, int, int); /* 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 just after the matching "]". */ -extern char *extract_arithmetic_subst PARAMS((char *, int *)); +extern char *extract_arithmetic_subst (const char *, size_t *); #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 just after the matching ")". */ -extern char *extract_process_subst PARAMS((char *, char *, int *, int)); +extern char *extract_process_subst (const char *, char *, size_t *, int); #endif /* PROCESS_SUBSTITUTION */ +/* 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. */ +extern char *extract_dollar_brace_string (const char *, size_t *, int, int); + /* Extract the name of the variable to bind to from the assignment string. */ -extern char *assignment_name PARAMS((char *)); +extern char *assignment_name (const char *); /* Return a single string of all the words present in LIST, separating each word with SEP. */ -extern char *string_list_internal PARAMS((WORD_LIST *, char *)); +extern char *string_list_internal (WORD_LIST *, char *); /* Return a single string of all the words present in LIST, separating each word with a space. */ -extern char *string_list PARAMS((WORD_LIST *)); +extern char *string_list (WORD_LIST *); /* Turn $* into a single string, obeying POSIX rules. */ -extern char *string_list_dollar_star PARAMS((WORD_LIST *, int, int)); +extern char *string_list_dollar_star (WORD_LIST *, int, int); /* Expand $@ into a single string, obeying POSIX rules. */ -extern char *string_list_dollar_at PARAMS((WORD_LIST *, int, int)); +extern char *string_list_dollar_at (WORD_LIST *, int, int); /* Turn the positional parameters into a string, understanding quoting and the various subtleties of using the first character of $IFS as the separator. Calls string_list_dollar_at, string_list_dollar_star, and string_list as appropriate. */ -extern char *string_list_pos_params PARAMS((int, WORD_LIST *, int, int)); +extern char *string_list_pos_params (int, WORD_LIST *, int, int); /* Perform quoted null character removal on each element of LIST. This modifies LIST. */ -extern void word_list_remove_quoted_nulls PARAMS((WORD_LIST *)); +extern void word_list_remove_quoted_nulls (WORD_LIST *); /* This performs word splitting and quoted null character removal on STRING. */ -extern WORD_LIST *list_string PARAMS((char *, char *, int)); +extern WORD_LIST *list_string (char *, char *, int); -extern char *ifs_firstchar PARAMS((int *)); -extern char *get_word_from_string PARAMS((char **, char *, char **)); -extern char *strip_trailing_ifs_whitespace PARAMS((char *, char *, int)); +extern char *ifs_firstchar (int *); +extern char *get_word_from_string (char **, char *, char **); +extern char *strip_trailing_ifs_whitespace (char *, char *, int); /* 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 tilde expansion, parameter expansion, command substitution, and arithmetic expansion on the right-hand side. Do not perform word splitting on the result of expansion. */ -extern int do_assignment PARAMS((char *)); -extern int do_assignment_no_expand PARAMS((char *)); -extern int do_word_assignment PARAMS((WORD_DESC *, int)); +extern int do_assignment (char *); +extern int do_assignment_no_expand (char *); +extern int do_word_assignment (const WORD_DESC *, int); /* 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 free ()ing it. Returns TARGET in case the location has changed. */ -extern char *sub_append_string PARAMS((char *, char *, size_t *, size_t *)); +extern char *sub_append_string (char *, char *, size_t *, size_t *); /* Append the textual representation of NUMBER to TARGET. INDEX and SIZE are as in SUB_APPEND_STRING. */ -extern char *sub_append_number PARAMS((intmax_t, char *, int *, int *)); +extern char *sub_append_number (intmax_t, char *, int *, int *); /* Return the word list that corresponds to `$*'. */ -extern WORD_LIST *list_rest_of_args PARAMS((void)); +extern WORD_LIST *list_rest_of_args (void); /* 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. */ -extern char *string_rest_of_args PARAMS((int)); +extern char *string_rest_of_args (int); /* 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 made here because word splitting normally takes care of quote removal. */ -extern WORD_LIST *expand_string_unsplit PARAMS((char *, int)); +extern WORD_LIST *expand_string_unsplit (const char *, int); /* Expand the rhs of an assignment statement. */ -extern WORD_LIST *expand_string_assignment PARAMS((char *, int)); +extern WORD_LIST *expand_string_assignment (const char *, int); /* Expand a prompt string. */ -extern WORD_LIST *expand_prompt_string PARAMS((char *, int, int)); +extern WORD_LIST *expand_prompt_string (const char *, int, int); /* 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. */ -extern WORD_LIST *expand_string PARAMS((char *, int)); +extern WORD_LIST *expand_string (const char *, int); /* Convenience functions that expand strings to strings, taking care of converting the WORD_LIST * returned by the expand_string* functions to a string and deallocating the WORD_LIST *. */ -extern char *expand_string_to_string PARAMS((char *, int)); -extern char *expand_string_unsplit_to_string PARAMS((char *, int)); -extern char *expand_assignment_string_to_string PARAMS((char *, int)); -extern char *expand_subscript_string PARAMS((char *, int)); +extern char *expand_string_to_string (char *, int); +extern char *expand_string_unsplit_to_string (char *, int); +extern char *expand_assignment_string_to_string (char *, int); +extern char *expand_subscript_string (const char *, int); /* Expand an arithmetic expression string */ -extern char *expand_arith_string PARAMS((char *, int)); +extern char *expand_arith_string (char *, int); /* Expand $'...' and $"..." in a string for code paths that do not. */ -extern char *expand_string_dollar_quote PARAMS((char *, int)); +extern char *expand_string_dollar_quote (const char *, int); /* De-quote quoted characters in STRING. */ -extern char *dequote_string PARAMS((char *)); +extern char *dequote_string (const char *); /* De-quote CTLESC-escaped CTLESC or CTLNUL characters in STRING. */ -extern char *dequote_escapes PARAMS((const char *)); +extern char *dequote_escapes (const char *); -extern WORD_DESC *dequote_word PARAMS((WORD_DESC *)); +extern WORD_DESC *dequote_word (WORD_DESC *); /* De-quote quoted characters in each word in LIST. */ -extern WORD_LIST *dequote_list PARAMS((WORD_LIST *)); +extern WORD_LIST *dequote_list (WORD_LIST *); /* Expand WORD, performing word splitting on the result. This does parameter expansion, command substitution, arithmetic expansion, word splitting, and quote removal. */ -extern WORD_LIST *expand_word PARAMS((WORD_DESC *, int)); +extern WORD_LIST *expand_word (WORD_DESC *, int); /* Expand WORD, but do not perform word splitting on the result. This does parameter expansion, command substitution, arithmetic expansion, and quote removal. */ -extern WORD_LIST *expand_word_unsplit PARAMS((WORD_DESC *, int)); -extern WORD_LIST *expand_word_leave_quoted PARAMS((WORD_DESC *, int)); +extern WORD_LIST *expand_word_unsplit (WORD_DESC *, int); +extern WORD_LIST *expand_word_leave_quoted (WORD_DESC *, int); /* Return the value of a positional parameter. This handles values > 10. */ -extern char *get_dollar_var_value PARAMS((intmax_t)); +extern char *get_dollar_var_value (intmax_t); /* Quote a string to protect it from word splitting. */ -extern char *quote_string PARAMS((char *)); +extern char *quote_string (const char *); /* Quote escape characters (characters special to internals of expansion) in a string. */ -extern char *quote_escapes PARAMS((const char *)); +extern char *quote_escapes (const char *); /* And remove such quoted special characters. */ -extern char *remove_quoted_escapes PARAMS((char *)); +extern char *remove_quoted_escapes (char *); + +/* Quote escape characters in contexts where word splitting won't be + performed, e.g., on the rhs of a word expansion. */ +extern char *quote_nosplit (const char *); /* Remove CTLNUL characters from STRING unless they are quoted with CTLESC. */ -extern char *remove_quoted_nulls PARAMS((char *)); +extern char *remove_quoted_nulls (char *); /* Perform quote removal on STRING. If QUOTED > 0, assume we are obeying the backslash quoting rules for within double quotes. */ -extern char *string_quote_removal PARAMS((char *, int)); +extern char *string_quote_removal (const char *, int); /* Perform quote removal on word WORD. This allocates and returns a new WORD_DESC *. */ -extern WORD_DESC *word_quote_removal PARAMS((WORD_DESC *, int)); +extern WORD_DESC *word_quote_removal (WORD_DESC *, int); /* 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. */ -extern WORD_LIST *word_list_quote_removal PARAMS((WORD_LIST *, int)); +extern WORD_LIST *word_list_quote_removal (WORD_LIST *, int); /* Called when IFS is changed to maintain some private variables. */ -extern void setifs PARAMS((SHELL_VAR *)); +extern void setifs (SHELL_VAR *); /* Return the value of $IFS, or " \t\n" if IFS is unset. */ -extern char *getifs PARAMS((void)); +extern char *getifs (void); /* 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. */ -extern WORD_LIST *word_split PARAMS((WORD_DESC *, char *)); +extern WORD_LIST *word_split (WORD_DESC *, char *); /* 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. */ -extern WORD_LIST *expand_words PARAMS((WORD_LIST *)); +extern WORD_LIST *expand_words (WORD_LIST *); /* Same as expand_words (), but doesn't hack variable or environment variables. */ -extern WORD_LIST *expand_words_no_vars PARAMS((WORD_LIST *)); +extern WORD_LIST *expand_words_no_vars (WORD_LIST *); /* Perform the `normal shell expansions' on a WORD_LIST. These are brace expansion, tilde expansion, parameter and variable substitution, command substitution, arithmetic expansion, and word splitting. */ -extern WORD_LIST *expand_words_shellexp PARAMS((WORD_LIST *)); +extern WORD_LIST *expand_words_shellexp (WORD_LIST *); -extern WORD_DESC *command_substitute PARAMS((char *, int, int)); -extern char *pat_subst PARAMS((char *, char *, char *, int)); +extern WORD_DESC *command_substitute (char *, int, int); +extern WORD_DESC *function_substitute (char *, int, int); +extern char *pat_subst (char *, char *, char *, int); #if defined (PROCESS_SUBSTITUTION) -extern int fifos_pending PARAMS((void)); -extern int num_fifos PARAMS((void)); -extern void unlink_fifo_list PARAMS((void)); -extern void unlink_all_fifos PARAMS((void)); -extern void unlink_fifo PARAMS((int)); +extern int fifos_pending (void); +extern int num_fifos (void); +extern void unlink_fifo_list (void); +extern void unlink_all_fifos (void); +extern void unlink_fifo (int); -extern void *copy_fifo_list PARAMS((int *)); -extern void close_new_fifos PARAMS((void *, int)); +extern void *copy_fifo_list (int *); +extern void close_new_fifos (void *, int); -extern void clear_fifo_list PARAMS((void)); +extern void clear_fifo_list (void); -extern int find_procsub_child PARAMS((pid_t)); -extern void set_procsub_status PARAMS((int, pid_t, int)); +extern int find_procsub_child (pid_t); +extern void set_procsub_status (int, pid_t, int); -extern void wait_procsubs PARAMS((void)); -extern void reap_procsubs PARAMS((void)); +extern void wait_procsubs (void); +extern void reap_procsubs (void); #endif -extern WORD_LIST *list_string_with_quotes PARAMS((char *)); +extern WORD_LIST *list_string_with_quotes (char *); #if defined (ARRAY_VARS) -extern char *extract_array_assignment_list PARAMS((char *, int *)); +extern char *extract_array_assignment_list (const char *, size_t *); #endif #if defined (COND_COMMAND) -extern char *remove_backslashes PARAMS((char *)); -extern char *cond_expand_word PARAMS((WORD_DESC *, int)); +extern char *remove_backslashes (const char *); +extern char *cond_expand_word (WORD_DESC *, int); #endif /* Flags for skip_to_delim */ @@ -317,16 +336,16 @@ extern char *cond_expand_word PARAMS((WORD_DESC *, int)); #define SD_ARITHEXP 0x400 /* skip_to_delim during arithmetic expansion */ #define SD_NOERROR 0x800 /* don't print error messages */ -extern int skip_to_delim PARAMS((char *, int, char *, int)); +extern int skip_to_delim (const char *, int, const char *, int); #if defined (BANG_HISTORY) -extern int skip_to_histexp PARAMS((char *, int, char *, int)); +extern int skip_to_histexp (const char *, int, const char *, int); #endif #if defined (READLINE) -extern int char_is_quoted PARAMS((char *, int)); -extern int unclosed_pair PARAMS((char *, int, char *)); -extern WORD_LIST *split_at_delims PARAMS((char *, int, const char *, int, int, int *, int *)); +extern int char_is_quoted (char *, int); +extern int unclosed_pair (char *, int, char *); +extern WORD_LIST *split_at_delims (const char *, int, const char *, int, int, int *, int *); #endif /* Variables used to keep track of the characters in IFS. */ @@ -347,6 +366,8 @@ extern int expanding_redir; extern int inherit_errexit; extern pid_t last_command_subst_pid; +extern int last_command_subst_status; +extern int executing_funsub; /* Evaluates to 1 if C is a character in $IFS. */ #define isifs(c) (ifs_cmap[(unsigned char)(c)] != 0) @@ -357,6 +378,6 @@ extern pid_t last_command_subst_pid; /* Is the first character of STRING a quoted NULL character? */ #define QUOTED_NULL(string) ((string)[0] == CTLNUL && (string)[1] == '\0') -extern void invalidate_cached_quoted_dollar_at PARAMS((void)); +extern void invalidate_cached_quoted_dollar_at (void); #endif /* !_SUBST_H_ */ diff --git a/support/bashbug.sh b/support/bashbug.sh index 940f70654..ac93b6107 100644 --- a/support/bashbug.sh +++ b/support/bashbug.sh @@ -102,7 +102,7 @@ esac BASHTESTERS="bash-testers@cwru.edu" case "$RELSTATUS" in -alpha*|beta*|devel*|rc*) BUGBASH=chet@cwru.edu ;; +alpha*|beta*|devel*|rc*) BUGBASH=chet.ramey@case.edu ;; *) BUGBASH=bug-bash@gnu.org ;; esac diff --git a/support/bashbug.sh.in b/support/bashbug.sh.in index 77e14e56e..4f558a546 100644 --- a/support/bashbug.sh.in +++ b/support/bashbug.sh.in @@ -132,9 +132,9 @@ if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then DEFEDITOR=emacs elif [ -x /usr/bin/xemacs ]; then DEFEDITOR=xemacs - elif [ -x /usr/bin/vim; then + elif [ -x /usr/bin/vim ]; then DEFEDITOR=vim - elif [ -x /usr/bin/gvim; then + elif [ -x /usr/bin/gvim ]; then DEFEDITOR=gvim elif [ -x /usr/bin/nano ]; then DEFEDITOR=nano diff --git a/support/bashversion.c b/support/bashversion.c index ad02d46ea..6357adf70 100644 --- a/support/bashversion.c +++ b/support/bashversion.c @@ -1,6 +1,6 @@ /* bashversion.c -- Display bash version information. */ -/* Copyright (C) 2001-2021 Free Software Foundation, Inc. +/* Copyright (C) 2001-2022,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -26,6 +26,8 @@ #if defined (HAVE_UNISTD_H) # include <unistd.h> +extern int optind; +extern char *optarg; #endif #include "bashansi.h" @@ -41,28 +43,23 @@ #define LFLAG 0x0020 #define XFLAG 0x0040 -extern int optind; -extern char *optarg; - extern char *dist_version; extern int patch_level; -extern char *shell_version_string PARAMS((void)); -extern void show_shell_version PARAMS((int)); +extern char *shell_version_string (void); +extern void show_shell_version (int); char *shell_name = "bash"; char *progname; static void -usage() +usage(void) { fprintf(stderr, "%s: usage: %s [-hrvpmlsx]\n", progname, progname); } int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { int opt, oflags; char dv[128], *rv; diff --git a/support/config.guess b/support/config.guess index 7f76b6228..f6d217a49 100644 --- a/support/config.guess +++ b/support/config.guess @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2022 Free Software Foundation, Inc. +# Copyright 1992-2024 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2022-01-09' +timestamp='2024-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -47,7 +47,7 @@ me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] -Output the configuration name of the system \`$me' is run on. +Output the configuration name of the system '$me' is run on. Options: -h, --help print this help, then exit @@ -60,13 +60,13 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2022 Free Software Foundation, Inc. +Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" -Try \`$me --help' for more information." +Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do @@ -102,8 +102,8 @@ GUESS= # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. +# Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still +# use 'HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. @@ -155,6 +155,9 @@ Linux|GNU|GNU/*) set_cc_for_build cat <<-EOF > "$dummy.c" + #if defined(__ANDROID__) + LIBC=android + #else #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc @@ -162,6 +165,8 @@ Linux|GNU|GNU/*) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu + #elif defined(__LLVM_LIBC__) + LIBC=llvm #else #include <stdarg.h> /* First heuristic to detect musl libc. */ @@ -169,6 +174,7 @@ Linux|GNU|GNU/*) LIBC=musl #endif #endif + #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" @@ -459,7 +465,7 @@ case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in UNAME_RELEASE=`uname -v` ;; esac - # Japanese Language versions have a version number like `4.1.3-JL'. + # Japanese Language versions have a version number like '4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; @@ -904,7 +910,7 @@ EOF fi ;; *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` + UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; @@ -966,11 +972,37 @@ EOF GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; + x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-pc-managarm-mlibc" + ;; + *:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" + ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) - GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + set_cc_for_build + CPU=$UNAME_MACHINE + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + ABI=64 + sed 's/^ //' << EOF > "$dummy.c" + #ifdef __ARM_EABI__ + #ifdef __ARM_PCS_VFP + ABI=eabihf + #else + ABI=eabi + #endif + #endif +EOF + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` + eval "$cc_set_abi" + case $ABI in + eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;; + esac + fi + GUESS=$CPU-unknown-linux-$LIBCABI ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be @@ -1036,7 +1068,16 @@ EOF k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; - loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) + kvx:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + kvx:cos:*:*) + GUESS=$UNAME_MACHINE-unknown-cos + ;; + kvx:mbr:*:*) + GUESS=$UNAME_MACHINE-unknown-mbr + ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) @@ -1151,16 +1192,27 @@ EOF ;; x86_64:Linux:*:*) set_cc_for_build + CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then - if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_X32 >/dev/null - then - LIBCABI=${LIBC}x32 - fi + ABI=64 + sed 's/^ //' << EOF > "$dummy.c" + #ifdef __i386__ + ABI=x86 + #else + #ifdef __ILP32__ + ABI=x32 + #endif + #endif +EOF + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` + eval "$cc_set_abi" + case $ABI in + x86) CPU=i686 ;; + x32) LIBCABI=${LIBC}x32 ;; + esac fi - GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI + GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC @@ -1180,7 +1232,7 @@ EOF GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility + # If we were able to find 'uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; @@ -1321,7 +1373,7 @@ EOF GUESS=ns32k-sni-sysv fi ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> GUESS=i586-unisys-sysv4 ;; @@ -1367,8 +1419,11 @@ EOF BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; - x86_64:Haiku:*:*) - GUESS=x86_64-unknown-haiku + ppc:Haiku:*:*) # Haiku running on Apple PowerPC + GUESS=powerpc-apple-haiku + ;; + *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) + GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE @@ -1540,6 +1595,9 @@ EOF *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; + *:Ironclad:*:*) + GUESS=$UNAME_MACHINE-unknown-ironclad + ;; esac # Do we have a guess based on uname results? diff --git a/support/config.rpath b/support/config.rpath index fc5913d78..3893ddd86 100755 --- a/support/config.rpath +++ b/support/config.rpath @@ -2,7 +2,7 @@ # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # -# Copyright 1996-2018 Free Software Foundation, Inc. +# Copyright 1996-2024 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # @@ -371,7 +371,7 @@ else hardcode_direct=yes hardcode_minus_L=yes ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; @@ -547,7 +547,7 @@ case "$host_os" in freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) library_names_spec='$libname$shrext' ;; gnu*) diff --git a/support/config.sub b/support/config.sub index 9b62e37c4..2c6a07ab3 100644 --- a/support/config.sub +++ b/support/config.sub @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2021 Free Software Foundation, Inc. +# Copyright 1992-2024 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2021-12-25' +timestamp='2024-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -76,13 +76,13 @@ Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) -Copyright 1992-2021 Free Software Foundation, Inc. +Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" -Try \`$me --help' for more information." +Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do @@ -130,7 +130,7 @@ IFS=$saved_IFS # Separate into logical components for further validation case $1 in *-*-*-*-*) - echo Invalid configuration \`"$1"\': more than four components >&2 + echo "Invalid configuration '$1': more than four components" >&2 exit 1 ;; *-*-*-*) @@ -145,7 +145,8 @@ case $1 in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ - | storm-chaos* | os2-emx* | rtmk-nova*) + | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \ + | windows-* ) basic_machine=$field1 basic_os=$maybe_os ;; @@ -943,7 +944,7 @@ $basic_machine EOF IFS=$saved_IFS ;; - # We use `pc' rather than `unknown' + # We use 'pc' rather than 'unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) @@ -1075,7 +1076,7 @@ case $cpu-$vendor in pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) cpu=i586 ;; - pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) + pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*) cpu=i686 ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) @@ -1180,7 +1181,7 @@ case $cpu-$vendor in case $cpu in 1750a | 580 \ | a29k \ - | aarch64 | aarch64_be \ + | aarch64 | aarch64_be | aarch64c | arm64ec \ | abacus \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ @@ -1199,50 +1200,29 @@ case $cpu-$vendor in | d10v | d30v | dlx | dsp16xx \ | e2k | elxsi | epiphany \ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | javascript \ | h8300 | h8500 \ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i*86 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ + | kvx \ | le32 | le64 \ | lm32 \ - | loongarch32 | loongarch64 | loongarchx32 \ + | loongarch32 | loongarch64 \ | m32c | m32r | m32rle \ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ | m88110 | m88k | maxq | mb | mcore | mep | metag \ | microblaze | microblazeel \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64eb | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r3 | mipsisa32r3el \ - | mipsisa32r5 | mipsisa32r5el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r3 | mipsisa64r3el \ - | mipsisa64r5 | mipsisa64r5el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ + | mips* \ | mmix \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ + | nanomips* \ | nds32 | nds32le | nds32be \ | nfp \ | nios | nios2 | nios2eb | nios2el \ @@ -1274,6 +1254,7 @@ case $cpu-$vendor in | ubicom32 \ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ | vax \ + | vc4 \ | visium \ | w65 \ | wasm32 | wasm64 \ @@ -1285,7 +1266,7 @@ case $cpu-$vendor in ;; *) - echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2 exit 1 ;; esac @@ -1306,11 +1287,12 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if test x$basic_os != x +if test x"$basic_os" != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. +obj= case $basic_os in gnu/linux*) kernel=linux @@ -1341,6 +1323,10 @@ EOF kernel=linux os=`echo "$basic_os" | sed -e 's|linux|gnu|'` ;; + managarm*) + kernel=managarm + os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'` + ;; *) kernel= os=$basic_os @@ -1506,10 +1492,16 @@ case $os in os=eabi ;; *) - os=elf + os= + obj=elf ;; esac ;; + aout* | coff* | elf* | pe*) + # These are machine code file formats, not OSes + obj=$os + os= + ;; *) # No normalization, but not necessarily accepted, that comes below. ;; @@ -1528,12 +1520,15 @@ else # system, and we'll never get to this point. kernel= +obj= case $cpu-$vendor in score-*) - os=elf + os= + obj=elf ;; spu-*) - os=elf + os= + obj=elf ;; *-acorn) os=riscix1.2 @@ -1543,28 +1538,35 @@ case $cpu-$vendor in os=gnu ;; arm*-semi) - os=aout + os= + obj=aout ;; c4x-* | tic4x-*) - os=coff + os= + obj=coff ;; c8051-*) - os=elf + os= + obj=elf ;; clipper-intergraph) os=clix ;; hexagon-*) - os=elf + os= + obj=elf ;; tic54x-*) - os=coff + os= + obj=coff ;; tic55x-*) - os=coff + os= + obj=coff ;; tic6x-*) - os=coff + os= + obj=coff ;; # This must come before the *-dec entry. pdp10-*) @@ -1586,19 +1588,24 @@ case $cpu-$vendor in os=sunos3 ;; m68*-cisco) - os=aout + os= + obj=aout ;; mep-*) - os=elf + os= + obj=elf ;; mips*-cisco) - os=elf + os= + obj=elf ;; - mips*-*) - os=elf + mips*-*|nanomips*-*) + os= + obj=elf ;; or32-*) - os=coff + os= + obj=coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=sysv3 @@ -1607,7 +1614,8 @@ case $cpu-$vendor in os=sunos4.1.1 ;; pru-*) - os=elf + os= + obj=elf ;; *-be) os=beos @@ -1688,10 +1696,12 @@ case $cpu-$vendor in os=uxpv ;; *-rom68k) - os=coff + os= + obj=coff ;; *-*bug) - os=coff + os= + obj=coff ;; *-apple) os=macos @@ -1709,10 +1719,11 @@ esac fi -# Now, validate our (potentially fixed-up) OS. +# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ). + case $os in # Sometimes we do "kernel-libc", so those need to count as OSes. - musl* | newlib* | relibc* | uclibc*) + llvm* | musl* | newlib* | relibc* | uclibc*) ;; # Likewise for "kernel-abi" eabi* | gnueabi*) @@ -1720,6 +1731,9 @@ case $os in # VxWorks passes extra cpu info in the 4th filed. simlinux | simwindows | spe) ;; + # See `case $cpu-$os` validation below + ghcjs) + ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. @@ -1728,7 +1742,7 @@ case $os in | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ | hiux* | abug | nacl* | netware* | windows* \ - | os9* | macos* | osx* | ios* \ + | os9* | macos* | osx* | ios* | tvos* | watchos* \ | mpw* | magic* | mmixware* | mon960* | lnews* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* | twizzler* \ @@ -1737,11 +1751,11 @@ case $os in | mirbsd* | netbsd* | dicos* | openedition* | ose* \ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ - | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ - | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | bosx* | nextstep* | cxux* | oabi* \ + | ptx* | ecoff* | winnt* | domain* | vsta* \ | udi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* | serenity* \ - | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | cygwin* | msys* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | mint* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ @@ -1754,49 +1768,116 @@ case $os in | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ - | fiwix* ) + | fiwix* | mlibc* | cos* | mbr* | ironclad* ) ;; # This one is extra strict with allowed versions sco3.2v2 | sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; + # This refers to builds using the UEFI calling convention + # (which depends on the architecture) and PE file format. + # Note that this is both a different calling convention and + # different file format than that of GNU-EFI + # (x86_64-w64-mingw32). + uefi) + ;; none) ;; + kernel* | msvc* ) + # Restricted further below + ;; + '') + if test x"$obj" = x + then + echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2 + fi + ;; + *) + echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 + exit 1 + ;; +esac + +case $obj in + aout* | coff* | elf* | pe*) + ;; + '') + # empty is fine + ;; *) - echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 + echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 + exit 1 + ;; +esac + +# Here we handle the constraint that a (synthetic) cpu and os are +# valid only in combination with each other and nowhere else. +case $cpu-$os in + # The "javascript-unknown-ghcjs" triple is used by GHC; we + # accept it here in order to tolerate that, but reject any + # variations. + javascript-ghcjs) + ;; + javascript-* | *-ghcjs) + echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. -case $kernel-$os in - linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ - | linux-musl* | linux-relibc* | linux-uclibc* ) +case $kernel-$os-$obj in + linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ + | linux-mlibc*- | linux-musl*- | linux-newlib*- \ + | linux-relibc*- | linux-uclibc*- ) + ;; + uclinux-uclibc*- ) + ;; + managarm-mlibc*- | managarm-kernel*- ) ;; - uclinux-uclibc* ) + windows*-msvc*-) ;; - -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) + -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ + | -uclibc*- ) # These are just libc implementations, not actual OSes, and thus # require a kernel. - echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 exit 1 ;; - kfreebsd*-gnu* | kopensolaris*-gnu*) + -kernel*- ) + echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 + exit 1 ;; - vxworks-simlinux | vxworks-simwindows | vxworks-spe) + *-kernel*- ) + echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 + exit 1 ;; - nto-qnx*) + *-msvc*- ) + echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 + exit 1 ;; - os2-emx) + kfreebsd*-gnu*- | kopensolaris*-gnu*-) + ;; + vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) + ;; + nto-qnx*-) + ;; + os2-emx-) ;; - *-eabi* | *-gnueabi*) + *-eabi*- | *-gnueabi*-) ;; - -*) + none--*) + # None (no kernel, i.e. freestanding / bare metal), + # can be paired with an machine code file format + ;; + -*-) # Blank kernel with real OS is always fine. ;; - *-*) - echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + --*) + # Blank kernel and OS with real machine code file format is always fine. + ;; + *-*-*) + echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 exit 1 ;; esac @@ -1879,7 +1960,7 @@ case $vendor in ;; esac -echo "$cpu-$vendor-${kernel:+$kernel-}$os" +echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: diff --git a/support/man2html.c b/support/man2html.c index e6f441b4a..097f48ee5 100644 --- a/support/man2html.c +++ b/support/man2html.c @@ -452,10 +452,19 @@ print_sig(void) struct tm *timetm; time_t clock; - datbuf[0] = '\0'; +#ifdef HAVE_GETTIMEOFDAY + struct timeval tv; + gettimeofday (&tv, 0); + clock = tv.tv_sec; +#else clock = time(NULL); +#endif timetm = localtime(&clock); - strftime(datbuf, MED_STR_MAX, TIMEFORMAT, timetm); + datbuf[0] = '\0'; + if (timetm) + strftime(datbuf, MED_STR_MAX, TIMEFORMAT, timetm); + else + strcpy (datbuf, "??"); printf(signature, manpage, datbuf); } diff --git a/support/mksignames.c b/support/mksignames.c index ba87ae8bc..9d0a01350 100644 --- a/support/mksignames.c +++ b/support/mksignames.c @@ -1,7 +1,7 @@ /* mksignames.c -- Create and write `signames.h', which contains an array of signal names. */ -/* Copyright (C) 1992-2020 Free Software Foundation, Inc. +/* Copyright (C) 1992-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -39,14 +39,13 @@ #define LASTSIG NSIG+2 /* Imported from signames.c */ -extern void initialize_signames (); +extern void initialize_signames (void); extern char *signal_names[]; char *progname; void -write_signames (stream) - FILE *stream; +write_signames (FILE *stream) { register int i; @@ -57,7 +56,7 @@ write_signames (stream) "/* A translation list so we can be polite to our users. */\n"); #if defined (CROSS_COMPILING) fprintf (stream, "extern char *signal_names[];\n\n"); - fprintf (stream, "extern void initialize_signames PARAMS((void));\n\n"); + fprintf (stream, "extern void initialize_signames (void);\n\n"); #else fprintf (stream, "char *signal_names[NSIG + 4] = {\n"); @@ -71,9 +70,7 @@ write_signames (stream) } int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { char *stream_name; FILE *stream; diff --git a/support/mkversion.sh b/support/mkversion.sh index 5960a4255..d61f59a2c 100755 --- a/support/mkversion.sh +++ b/support/mkversion.sh @@ -5,7 +5,7 @@ # in the makefile. This creates a file named by the -o option, # otherwise everything is echoed to the standard output. -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2022 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -153,8 +153,8 @@ echo "#define SCCSVERSION \"@(#)Bash version ${sccs_string}\"" # extern function declarations #echo #echo '/* Functions from version.c. */' -#echo 'extern char *shell_version_string PARAMS((void));' -#echo 'extern void show_shell_version PARAMS((int));' +#echo 'extern char *shell_version_string (void);' +#echo 'extern void show_shell_version (int);' if [ -n "$inc_build" ]; then # Make sure we can write to .build diff --git a/support/printenv.c b/support/printenv.c index 154e086cb..20ad96df1 100644 --- a/support/printenv.c +++ b/support/printenv.c @@ -6,7 +6,7 @@ chet@po.cwru.edu */ -/* Copyright (C) 1997-2002 Free Software Foundation, Inc. +/* Copyright (C) 1997-2002,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -34,9 +34,7 @@ extern char **environ; int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { register char **envp, *eval; int len; diff --git a/support/recho.c b/support/recho.c index 7e3c6bc65..7643cc474 100644 --- a/support/recho.c +++ b/support/recho.c @@ -6,7 +6,7 @@ chet@po.cwru.edu */ -/* Copyright (C) 2002-2005 Free Software Foundation, Inc. +/* Copyright (C) 2002-2005,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -31,12 +31,10 @@ #include "bashansi.h" #include <stdio.h> -void strprint(); +void strprint(char *); int -main(argc, argv) -int argc; -char **argv; +main(int argc, char **argv) { register int i; @@ -49,8 +47,7 @@ char **argv; } void -strprint(str) -char *str; +strprint(char *str) { register unsigned char *s; diff --git a/support/rlvers.sh b/support/rlvers.sh index 64cadc776..03ed901fa 100755 --- a/support/rlvers.sh +++ b/support/rlvers.sh @@ -78,6 +78,7 @@ cat > $TDIR/rlvers.c << EOF #include <stdio.h> extern char *rl_library_version; +int main() { printf("%s\n", rl_library_version ? rl_library_version : "0"); diff --git a/support/shobj-conf b/support/shobj-conf index cd7634dfa..c3df351af 100755 --- a/support/shobj-conf +++ b/support/shobj-conf @@ -114,7 +114,7 @@ sunos5*-*gcc*|solaris2*-*gcc*) ;; sunos5*|solaris2*) - SHOBJ_CFLAGS='-K pic' + SHOBJ_CFLAGS='-fPIC' # was -K pic SHOBJ_LD=/usr/ccs/bin/ld SHOBJ_LDFLAGS='-G -dy -z text -i -h $@' @@ -494,6 +494,24 @@ cygwin*) fi ;; +msys*) + SHOBJ_LD='$(CC)' + SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' + SHLIB_LIBPREF='msys-' + SHLIB_LIBSUFF='dll' + SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' + SHLIB_LIBS='$(TERMCAP_LIB)' + + SHLIB_DOT= + # For official cygwin releases, DLLVERSION will be defined in the + # environment of configure, and will be incremented any time the API + # changes in a non-backwards compatible manner. Otherwise, it is just + # SHLIB_MAJOR. + if [ -n "$DLLVERSION" ] ; then + SHLIB_DLLVERSION="$DLLVERSION" + fi + ;; + mingw*) SHOBJ_LD='$(CC)' SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' diff --git a/support/signames.c b/support/signames.c index 84864fd79..9c22c9a20 100644 --- a/support/signames.c +++ b/support/signames.c @@ -67,7 +67,7 @@ extern char *progname; #endif void -initialize_signames () +initialize_signames (void) { register int i; #if defined (SIGRTMAX) || defined (SIGRTMIN) @@ -298,6 +298,29 @@ initialize_signames () signal_names[SIGTHR] = "SIGTHR"; #endif +/* z/OS */ +#if defined(SIGABND) + signal_names[SIGABND] = "SIGABND"; +#endif +#if defined(SIGIOERR) + signal_names[SIGIOERR] = "SIGIOERR"; +#endif +#if defined(SIGTHSTOP) + signal_names[SIGTHSTOP] = "SIGTHSTOP"; +#endif +#if defined(SIGTHCONT) + signal_names[SIGTHCONT] = "SIGTHCONT"; +#endif +#if defined(SIGTRACE) + signal_names[SIGTRACE] = "SIGTRACE"; +#endif +#if defined(SIGDCE) + signal_names[SIGDCE] = "SIGDCE"; +#endif +#if defined(SIGDUMP) + signal_names[SIGDUMP] = "SIGDUMP"; +#endif + /* Common */ #if defined (SIGHUP) /* hangup */ signal_names[SIGHUP] = "SIGHUP"; diff --git a/support/xcase.c b/support/xcase.c index 527840db8..683330f4e 100644 --- a/support/xcase.c +++ b/support/xcase.c @@ -1,6 +1,6 @@ /* xcase - change uppercase characters to lowercase or vice versa. */ -/* Copyright (C) 2008,2009 Free Software Foundation, Inc. +/* Copyright (C) 2008,2009,2023 Free Software Foundation, Inc. This file is part of GNU Bash. @@ -42,9 +42,7 @@ extern int optind; #define UPPER 2 int -main(ac, av) -int ac; -char **av; +main(int ac, char **av) { int c, x; int op; diff --git a/support/zecho.c b/support/zecho.c index f3a4fe03e..6a125f48f 100644 --- a/support/zecho.c +++ b/support/zecho.c @@ -26,9 +26,7 @@ #include <stdio.h> int -main(argc, argv) -int argc; -char **argv; +main(int argc, char **argv) { argv++; diff --git a/test.c b/test.c index 9997df149..2ac48093b 100644 --- a/test.c +++ b/test.c @@ -2,7 +2,7 @@ /* Modified to run with the GNU shell Apr 25, 1988 by bfox. */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -70,6 +70,13 @@ extern int errno; #endif /* !STREQ */ #define STRCOLLEQ(a, b) ((a)[0] == (b)[0] && strcoll ((a), (b)) == 0) +/* Same as ISOPTION from builtins/common.h */ +#define ISPRIMARY(s, c) (s[0] == '-' && s[1] == c && s[2] == '\0') +#define ANDOR(s) (s[0] == '-' && (s[1] == 'a' || s[1] == 'o') && s[2] == 0) + +/* single-character tokens like `!', `(', and `)' */ +#define ISTOKEN(s, c) (s[0] == (c) && s[1] == '\0') + #if !defined (R_OK) #define R_OK 4 #define W_OK 2 @@ -103,35 +110,37 @@ static int test_error_return; #define test_exit(val) \ do { test_error_return = val; sh_longjmp (test_exit_buf, 1); } while (0) -extern int sh_stat PARAMS((const char *, struct stat *)); +extern int sh_stat (const char *, struct stat *); static int pos; /* The offset of the current argument in ARGV. */ static int argc; /* The number of arguments present in ARGV. */ static char **argv; /* The argument list. */ static int noeval; -static void test_syntax_error PARAMS((char *, char *)) __attribute__((__noreturn__)); -static void beyond PARAMS((void)) __attribute__((__noreturn__)); -static void integer_expected_error PARAMS((char *)) __attribute__((__noreturn__)); +static void test_syntax_error (char *, char *) __attribute__((__noreturn__)); +static void beyond (void) __attribute__((__noreturn__)); +static void integer_expected_error (char *) __attribute__((__noreturn__)); -static int unary_operator PARAMS((void)); -static int binary_operator PARAMS((void)); -static int two_arguments PARAMS((void)); -static int three_arguments PARAMS((void)); -static int posixtest PARAMS((void)); +static int unary_test (char *, char *, int); +static int binary_test (char *, char *, char *, int); -static int expr PARAMS((void)); -static int term PARAMS((void)); -static int and PARAMS((void)); -static int or PARAMS((void)); +static int unary_operator (void); +static int binary_operator (void); +static int two_arguments (void); +static int three_arguments (void); +static int posixtest (int); -static int filecomp PARAMS((char *, char *, int)); -static int arithcomp PARAMS((char *, char *, int, int)); -static int patcomp PARAMS((char *, char *, int)); +static int expr (void); +static int term (void); +static int and (void); +static int or (void); + +static int filecomp (const char *, const char *, int); +static int arithcomp (char *, char *, int, int); +static int patcomp (char *, char *, int); static void -test_syntax_error (format, arg) - char *format, *arg; +test_syntax_error (char *format, char *arg) { builtin_error (format, arg); test_exit (TEST_ERREXIT_STATUS); @@ -142,7 +151,7 @@ test_syntax_error (format, arg) * error condition) */ static void -beyond () +beyond (void) { test_syntax_error (_("argument expected"), (char *)NULL); } @@ -150,10 +159,9 @@ beyond () /* Syntax error for when an integer argument was expected, but something else was found. */ static void -integer_expected_error (pch) - char *pch; +integer_expected_error (char *pch) { - test_syntax_error (_("%s: integer expression expected"), pch); + test_syntax_error (_("%s: integer expected"), pch); } /* Increment our position in the argument list. Check that we're not @@ -167,7 +175,7 @@ integer_expected_error (pch) * or */ static int -expr () +expr (void) { if (pos >= argc) beyond (); @@ -181,12 +189,12 @@ expr () * and '-o' or */ static int -or () +or (void) { int value, v2; value = and (); - if (pos < argc && argv[pos][0] == '-' && argv[pos][1] == 'o' && !argv[pos][2]) + if (pos < argc && ISPRIMARY (argv[pos], 'o')) { advance (0); v2 = or (); @@ -202,12 +210,12 @@ or () * term '-a' and */ static int -and () +and (void) { int value, v2; value = term (); - if (pos < argc && argv[pos][0] == '-' && argv[pos][1] == 'a' && !argv[pos][2]) + if (pos < argc && ISPRIMARY (argv[pos], 'a')) { advance (0); v2 = and (); @@ -236,7 +244,7 @@ and () * positive and negative integers */ static int -term () +term (void) { int value; @@ -259,8 +267,27 @@ term () /* A paren-bracketed argument. */ if (argv[pos][0] == '(' && argv[pos][1] == '\0') /* ) */ { + int nargs, count; + advance (1); - value = expr (); + /* Steal an idea from coreutils and scan forward to check where the right + paren appears to prevent some ambiguity. If we find a valid sub- + expression that has 1-4 arguments, call posixtest on it. Handle + nested subexpressions. ( */ + for (nargs = count = 1; pos + nargs < argc; nargs++) + { + if (ISTOKEN (argv[pos+nargs], ')')) + count--; + else if (ISTOKEN (argv[pos+nargs], '(')) /*)*/ + count++; + if (count == 0) + break; + } + /* only use posixtest if we have a valid parenthesized expression */ + if (shell_compatibility_level > 52 && pos + nargs < argc && nargs <= 4) + value = posixtest (nargs); + else + value = expr (); if (argv[pos] == 0) /* ( */ test_syntax_error (_("`)' expected"), (char *)NULL); else if (argv[pos][0] != ')' || argv[pos][1]) /* ( */ @@ -288,10 +315,7 @@ term () } static int -stat_mtime (fn, st, ts) - char *fn; - struct stat *st; - struct timespec *ts; +stat_mtime (const char *fn, struct stat *st, struct timespec *ts) { int r; @@ -303,9 +327,7 @@ stat_mtime (fn, st, ts) } static int -filecomp (s, t, op) - char *s, *t; - int op; +filecomp (const char *s, const char *t, int op) { struct stat st1, st2; struct timespec ts1, ts2; @@ -332,9 +354,7 @@ filecomp (s, t, op) } static int -arithcomp (s, t, op, flags) - char *s, *t; - int op, flags; +arithcomp (char *s, char *t, int op, int flags) { intmax_t l, r; int expok; @@ -353,9 +373,9 @@ arithcomp (s, t, op, flags) } else { - if (legal_number (s, &l) == 0) + if (valid_number (s, &l) == 0) integer_expected_error (s); - if (legal_number (t, &r) == 0) + if (valid_number (t, &r) == 0) integer_expected_error (t); } @@ -373,9 +393,7 @@ arithcomp (s, t, op, flags) } static int -patcomp (string, pat, op) - char *string, *pat; - int op; +patcomp (char *string, char *pat, int op) { int m; @@ -383,10 +401,8 @@ patcomp (string, pat, op) return ((op == EQ) ? (m == 0) : (m != 0)); } -int -binary_test (op, arg1, arg2, flags) - char *op, *arg1, *arg2; - int flags; +static int +binary_test (char *op, char *arg1, char *arg2, int flags) { int patmatch; @@ -397,7 +413,10 @@ binary_test (op, arg1, arg2, flags) else if ((op[0] == '>' || op[0] == '<') && op[1] == '\0') { #if defined (HAVE_STRCOLL) - if (shell_compatibility_level > 40 && flags & TEST_LOCALE) + /* POSIX interp 375 */ + if (posixly_correct && (flags & TEST_LOCALE)) + return ((op[0] == '>') ? (strcoll (arg1, arg2) > 0) : (strcoll (arg1, arg2) < 0)); + else if (shell_compatibility_level > 40 && (flags & TEST_LOCALE)) return ((op[0] == '>') ? (strcoll (arg1, arg2) > 0) : (strcoll (arg1, arg2) < 0)); else #endif @@ -438,9 +457,8 @@ binary_test (op, arg1, arg2, flags) return (FALSE); /* should never get here */ } - static int -binary_operator () +binary_operator (void) { int value; char *w; @@ -450,7 +468,8 @@ binary_operator () ((w[0] == '>' || w[0] == '<') && w[1] == '\0') || /* <, > */ (w[0] == '!' && w[1] == '=' && w[2] == '\0')) /* != */ { - value = binary_test (w, argv[pos], argv[pos + 2], 0); + /* POSIX interp 375 11/9/2022 */ + value = binary_test (w, argv[pos], argv[pos + 2], (posixly_correct ? TEST_LOCALE : 0)); pos += 3; return (value); } @@ -477,7 +496,7 @@ binary_operator () } static int -unary_operator () +unary_operator (void) { char *op; intmax_t r; @@ -487,20 +506,23 @@ unary_operator () return (FALSE); /* the only tricky case is `-t', which may or may not take an argument. */ - if (op[1] == 't') + if (posixly_correct == 0 && op[1] == 't') { advance (0); if (pos < argc) { - if (legal_number (argv[pos], &r)) + if (valid_number (argv[pos], &r)) { advance (0); return (unary_test (op, argv[pos - 1], 0)); } + else if (argc >= 5 && ANDOR (argv[pos])) + return (unary_test (op, "1", 0)); else - return (FALSE); + integer_expected_error (argv[pos]); } else + /* this is not called when pos == argc; the one-argument code is used */ return (unary_test (op, "1", 0)); } @@ -512,10 +534,8 @@ unary_operator () return (unary_test (op, argv[pos - 1], 0)); } -int -unary_test (op, arg, flags) - char *op, *arg; - int flags; +static int +unary_test (char *op, char *arg, int flags) { intmax_t r; struct stat stat_buf; @@ -614,8 +634,8 @@ unary_test (op, arg, flags) #endif case 't': /* File fd is a terminal? */ - if (legal_number (arg, &r) == 0) - return (FALSE); + if (valid_number (arg, &r) == 0) + integer_expected_error (arg); return ((r == (int)r) && isatty ((int)r)); case 'n': /* True if arg has some length. */ @@ -629,7 +649,7 @@ unary_test (op, arg, flags) case 'v': #if defined (ARRAY_VARS) - aflags = assoc_expand_once ? AV_NOEXPAND : 0; + aflags = array_expand_once ? AV_NOEXPAND : 0; if (valid_array_reference (arg, aflags)) { char *t; @@ -652,7 +672,7 @@ unary_test (op, arg, flags) flush_eltstate (&es); return ret; } - else if (legal_number (arg, &r)) /* -v n == is $n set? */ + else if (valid_number (arg, &r)) /* -v n == is $n set? */ return ((r >= 0 && r <= number_of_args()) ? TRUE : FALSE); v = find_variable (arg); if (v && invisible_p (v) == 0 && array_p (v)) @@ -684,8 +704,7 @@ unary_test (op, arg, flags) /* Return TRUE if OP is one of the test command's binary operators. */ int -test_binop (op) - char *op; +test_binop (char *op) { if (op[0] == '=' && op[1] == '\0') return (1); /* '=' */ @@ -738,8 +757,7 @@ test_binop (op) /* Return non-zero if OP is one of the test command's unary operators. */ int -test_unop (op) - char *op; +test_unop (char *op) { if (op[0] != '-' || (op[1] && op[2] != 0)) return (0); @@ -759,10 +777,13 @@ test_unop (op) } static int -two_arguments () +two_arguments (void) { if (argv[pos][0] == '!' && argv[pos][1] == '\0') - return (argv[pos + 1][0] == '\0'); + { + advance (0); + return (argv[pos++][0] == '\0'); + } else if (argv[pos][0] == '-' && argv[pos][1] && argv[pos][2] == '\0') { if (test_unop (argv[pos])) @@ -776,40 +797,35 @@ two_arguments () return (0); } -#define ANDOR(s) (s[0] == '-' && (s[1] == 'a' || s[1] == 'o') && s[2] == 0) - /* This could be augmented to handle `-t' as equivalent to `-t 1', but POSIX requires that `-t' be given an argument. */ #define ONE_ARG_TEST(s) ((s)[0] != '\0') static int -three_arguments () +three_arguments (void) { int value; if (test_binop (argv[pos+1])) - { - value = binary_operator (); - pos = argc; - } + value = binary_operator (); else if (ANDOR (argv[pos+1])) { if (argv[pos+1][1] == 'a') value = ONE_ARG_TEST(argv[pos]) && ONE_ARG_TEST(argv[pos+2]); else value = ONE_ARG_TEST(argv[pos]) || ONE_ARG_TEST(argv[pos+2]); - pos = argc; + pos += 3; } else if (argv[pos][0] == '!' && argv[pos][1] == '\0') { advance (1); value = !two_arguments (); - pos = argc; } - else if (argv[pos][0] == '(' && argv[pos+2][0] == ')') + else if (ISTOKEN (argv[pos], '(') && ISTOKEN (argv[pos+2], ')')) { - value = ONE_ARG_TEST(argv[pos+1]); - pos = argc; + advance (0); + value = ONE_ARG_TEST(argv[pos]); + pos += 2; } else test_syntax_error (_("%s: binary operator expected"), argv[pos+1]); @@ -819,25 +835,23 @@ three_arguments () /* This is an implementation of a Posix.2 proposal by David Korn. */ static int -posixtest () +posixtest (int nargs) { int value; - switch (argc - 1) /* one extra passed in */ + switch (nargs) { case 0: value = FALSE; - pos = argc; break; case 1: value = ONE_ARG_TEST(argv[1]); - pos = argc; + advance (0); break; case 2: value = two_arguments (); - pos = argc; break; case 3: @@ -851,11 +865,11 @@ posixtest () value = !three_arguments (); break; } - else if (argv[pos][0] == '(' && argv[pos][1] == '\0' && argv[argc-1][0] == ')' && argv[argc-1][1] == '\0') + else if (ISTOKEN (argv[pos], '(') && ISTOKEN (argv[pos+3], ')')) { advance (1); value = two_arguments (); - pos = argc; + advance (0); break; } /* FALLTHROUGH */ @@ -866,6 +880,23 @@ posixtest () return (value); } +#if defined (COND_COMMAND) +int +cond_test (char *op, char *arg1, char *arg2, int flags) +{ + int code, ret; + + code = setjmp_nosigs (test_exit_buf); + + if (code) + return (test_error_return); + + ret = arg2 ? binary_test (op, arg1, arg2, flags) : unary_test (op, arg1, flags); + + return (ret ? EXECUTION_SUCCESS : EXECUTION_FAILURE); +} +#endif + /* * [: * '[' expr ']' @@ -873,9 +904,7 @@ posixtest () * test expr */ int -test_command (margc, margv) - int margc; - char **margv; +test_command (int margc, char **margv) { int value; int code; @@ -907,7 +936,7 @@ test_command (margc, margv) test_exit (SHELL_BOOLEAN (FALSE)); noeval = 0; - value = posixtest (); + value = posixtest (argc - 1); if (pos != argc) { diff --git a/test.h b/test.h index ffd79e5e0..b3937db81 100644 --- a/test.h +++ b/test.h @@ -1,6 +1,6 @@ /* test.h -- external interface to the conditional command code. */ -/* Copyright (C) 1997-2021 Free Software Foundation, Inc. +/* Copyright (C) 1997-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,12 +29,11 @@ #define TEST_LOCALE 0x04 #define TEST_ARRAYEXP 0x08 /* array subscript expansion */ -extern int test_unop PARAMS((char *)); -extern int test_binop PARAMS((char *)); +extern int test_unop (char *); +extern int test_binop (char *); -extern int unary_test PARAMS((char *, char *, int)); -extern int binary_test PARAMS((char *, char *, char *, int)); +extern int cond_test (char *, char *, char *, int); -extern int test_command PARAMS((int, char **)); +extern int test_command (int, char **); #endif /* _TEST_H_ */ diff --git a/tests/alias.right b/tests/alias.right index 76f32076f..3ab73512a 100644 --- a/tests/alias.right +++ b/tests/alias.right @@ -1,8 +1,12 @@ alias: 0 alias: 0 ./alias.tests: line 38: qfoo: command not found +./alias.tests: line 44: unalias: foo: not found quux hi +declare -a m=([0]="x") +./alias.tests: line 66: alias: `\$': invalid alias name +./alias.tests: line 67: `\$': invalid alias name bar value bar @@ -31,6 +35,7 @@ a b a a b ok 3 ok 4 +line with escaped newline bar bad 0 @@ -43,3 +48,17 @@ bar baz <áa> <aá> +bar +foo bar x +foo +x +bar +x +bar +x +foo=v bar= +foo +foo in v +bash: -c: line 7: syntax error near unexpected token `do' +bash: -c: line 7: `do echo foo=$foo bar=$bar' +foo=v bar= diff --git a/tests/alias.tests b/tests/alias.tests index 15eac5b17..437378b09 100644 --- a/tests/alias.tests +++ b/tests/alias.tests @@ -40,6 +40,8 @@ qfoo unalias qfoo qbar qbaz quux unalias -a +# error +unalias foo alias foo='echo ' alias bar=baz @@ -54,12 +56,20 @@ unalias foo bar baz alias foo='a=() b="" for i in 1; do echo hi; done' foo - unalias foo +alias L='m=("x")' +L +declare -p m + +# invalid alias names generate errors +alias '\$'=xx +BASH_ALIASES['\$']=xx + ${THIS_SH} ./alias1.sub ${THIS_SH} ./alias2.sub ${THIS_SH} ./alias3.sub ${THIS_SH} ./alias4.sub ${THIS_SH} ./alias5.sub ${THIS_SH} ./alias6.sub +${THIS_SH} ./alias7.sub diff --git a/tests/alias4.sub b/tests/alias4.sub index 0864a3c46..cd2cb1d42 100644 --- a/tests/alias4.sub +++ b/tests/alias4.sub @@ -82,6 +82,12 @@ long_comment text after # comment comment foo bar +# make sure escaped newlines in alias bodies are processed correctly +alias xx='echo line with \ +escaped newline' +xx +unalias xx + # alias ending in a tab alias foo="\ echo \"bar\" \ @@ -98,3 +104,4 @@ foo>&2 alias a='printf "<%s>\n" \' a|cat + diff --git a/tests/arith-for.right b/tests/arith-for.right index 06127be89..2dcbfda79 100644 --- a/tests/arith-for.right +++ b/tests/arith-for.right @@ -84,3 +84,13 @@ bash: -c: line 1: syntax error: `(( i=0; i < 3; i++; 7 ))' 2 1 0 +43210 +ok1 +./arith-for.tests: line 133: ((: 7++ : arithmetic syntax error: operand expected (error token is "+ ") +./arith-for.tests: line 134: ((: i < 4/0: division by 0 (error token is "0") +./arith-for.tests: line 135: ((: i=2/0: division by 0 (error token is "0") +./arith-for.tests: line 137: ((: 7=4 : attempted assignment to non-variable (error token is "=4 ") +./arith-for.tests: line 139: ((: j=: arithmetic syntax error: operand expected (error token is "=") +X +./arith-for.tests: line 141: break: only meaningful in a `for', `while', or `until' loop +Y diff --git a/tests/arith-for.tests b/tests/arith-for.tests index db913da5d..1f8b19fb5 100644 --- a/tests/arith-for.tests +++ b/tests/arith-for.tests @@ -126,3 +126,17 @@ echo for (( i = 4; ;i--)) ; do echo $i; if (( $i == 0 )); then break; fi; done for (( i = 4;;i--)) ; do echo $i; if (( $i == 0 )); then break; fi; done +i=4 ; for (( ;;i--)) ; do echo -n $i; if (( i == 0 )); then break; fi; done; echo + +# arithmetic for commands with expression errors + +for (( i=1; i < 4; 7++ )); do echo ok$i ; done +for (( i=2; i < 4/0; 7++ )); do echo whoops1 ; done +for (( i=2/0; i < 4; 7++ )); do echo whoops2 ; done + +for (( 7=4 ; 7 > 7; )); do echo whoops3; done + +for ((j=;;)); do :; done +echo X +break +echo Y diff --git a/tests/arith.right b/tests/arith.right index 02687815d..e17a127a0 100644 --- a/tests/arith.right +++ b/tests/arith.right @@ -51,6 +51,7 @@ 1 1 32 +32 4 20 1,i+=2 @@ -60,7 +61,7 @@ 1,i+=2 30 1,j+=2 -./arith.tests: line 127: 1 ? 20 : x+=2: attempted assignment to non-variable (error token is "+=2") +./arith.tests: line 129: 1 ? 20 : x+=2: attempted assignment to non-variable (error token is "+=2") 20 6 6,5,3 @@ -70,6 +71,8 @@ 127 36 40 +40 +40 10 10 10 @@ -80,16 +83,18 @@ 36 62 63 -./arith.tests: line 162: 3425#56: invalid arithmetic base (error token is "3425#56") -./arith.tests: line 165: 2#: invalid integer constant (error token is "2#") -./arith.tests: line 168: 7 = 43 : attempted assignment to non-variable (error token is "= 43 ") -./arith.tests: line 169: 2#44: value too great for base (error token is "2#44") -./arith.tests: line 170: 44 / 0 : division by 0 (error token is "0 ") -./arith.tests: line 171: let: jv += $iv: syntax error: operand expected (error token is "$iv") -./arith.tests: line 172: jv += $iv : syntax error: operand expected (error token is "$iv ") -./arith.tests: line 173: let: rv = 7 + (43 * 6: missing `)' (error token is "6") -./arith.tests: line 177: 0#4: invalid number (error token is "0#4") -./arith.tests: line 178: 2#110#11: invalid number (error token is "2#110#11") +./arith.tests: line 168: 3425#56: invalid arithmetic base (error token is "3425#56") +./arith.tests: line 171: 2#: invalid integer constant (error token is "2#") +./arith.tests: line 174: 7 = 43 : attempted assignment to non-variable (error token is "= 43 ") +./arith.tests: line 175: 2#44: value too great for base (error token is "2#44") +./arith.tests: line 176: 44 / 0 : division by 0 (error token is "0 ") +./arith.tests: line 177: let: jv += $iv: arithmetic syntax error: operand expected (error token is "$iv") +./arith.tests: line 178: jv += $iv : arithmetic syntax error: operand expected (error token is "$iv ") +./arith.tests: line 179: let: rv = 7 + (43 * 6: missing `)' (error token is "6") +./arith.tests: line 182: b / 0 : division by 0 (error token is "0 ") +./arith.tests: line 183: b /= 0 : division by 0 (error token is "0 ") +./arith.tests: line 188: 0#4: invalid number (error token is "0#4") +./arith.tests: line 189: 2#110#11: invalid number (error token is "2#110#11") abc def ghi @@ -97,15 +102,15 @@ ok 6 1 0 -./arith.tests: line 196: 4 + : syntax error: operand expected (error token is "+ ") +./arith.tests: line 207: 4 + : arithmetic syntax error: operand expected (error token is "+ ") 16 -./arith.tests: line 201: 4 ? : 3 + 5 : expression expected (error token is ": 3 + 5 ") -./arith.tests: line 202: 1 ? 20 : `:' expected for conditional expression (error token is "20 ") -./arith.tests: line 203: 4 ? 20 : : expression expected (error token is ": ") +./arith.tests: line 212: 4 ? : 3 + 5 : expression expected (error token is ": 3 + 5 ") +./arith.tests: line 213: 1 ? 20 : `:' expected for conditional expression (error token is "20 ") +./arith.tests: line 214: 4 ? 20 : : expression expected (error token is ": ") 9 -./arith.tests: line 209: 0 && B=42 : attempted assignment to non-variable (error token is "=42 ") +./arith.tests: line 220: 0 && B=42 : attempted assignment to non-variable (error token is "=42 ") 9 -./arith.tests: line 212: 1 || B=88 : attempted assignment to non-variable (error token is "=88 ") +./arith.tests: line 223: 1 || B=88 : attempted assignment to non-variable (error token is "=88 ") 9 0 9 @@ -121,6 +126,7 @@ ok 131072 2147483647 1 +./arith.tests: line 255: 2**-1 : exponent less than 0 (error token is "1 ") 4 4 5 @@ -131,22 +137,23 @@ ok 4 4 7 -./arith.tests: line 260: 7-- : syntax error: operand expected (error token is "- ") -./arith.tests: line 262: --x=7 : attempted assignment to non-variable (error token is "=7 ") -./arith.tests: line 263: ++x=7 : attempted assignment to non-variable (error token is "=7 ") -./arith.tests: line 265: x++=7 : attempted assignment to non-variable (error token is "=7 ") -./arith.tests: line 266: x--=7 : attempted assignment to non-variable (error token is "=7 ") +./arith.tests: line 274: 7-- : arithmetic syntax error: operand expected (error token is "- ") +./arith.tests: line 276: --x=7 : attempted assignment to non-variable (error token is "=7 ") +./arith.tests: line 277: ++x=7 : attempted assignment to non-variable (error token is "=7 ") +./arith.tests: line 279: x++=7 : attempted assignment to non-variable (error token is "=7 ") +./arith.tests: line 280: x--=7 : attempted assignment to non-variable (error token is "=7 ") 4 7 -7 7 7 +./arith.tests: line 292: --x++ : ++: assignment requires lvalue (error token is "++ ") 2 2 -./arith1.sub: line 15: 4-- : syntax error: operand expected (error token is "- ") -./arith1.sub: line 16: 4++ : syntax error: operand expected (error token is "+ ") -./arith1.sub: line 17: 4 -- : syntax error: operand expected (error token is "- ") -./arith1.sub: line 18: 4 ++ : syntax error: operand expected (error token is "+ ") +./arith1.sub: line 15: 4-- : arithmetic syntax error: operand expected (error token is "- ") +./arith1.sub: line 16: 4++ : arithmetic syntax error: operand expected (error token is "+ ") +./arith1.sub: line 17: 4 -- : arithmetic syntax error: operand expected (error token is "- ") +./arith1.sub: line 18: 4 ++ : arithmetic syntax error: operand expected (error token is "+ ") 1 2 1 @@ -161,10 +168,10 @@ ok 2 -2 1 -./arith1.sub: line 48: ((: ++ : syntax error: operand expected (error token is "+ ") +./arith1.sub: line 48: ((: ++ : arithmetic syntax error: operand expected (error token is "+ ") 7 7 -./arith1.sub: line 51: ((: -- : syntax error: operand expected (error token is "- ") +./arith1.sub: line 51: ((: -- : arithmetic syntax error: operand expected (error token is "- ") 7 7 7 @@ -183,10 +190,10 @@ ok 1 4 0 -./arith2.sub: line 46: ((: -- : syntax error: operand expected (error token is "- ") +./arith2.sub: line 46: ((: -- : arithmetic syntax error: operand expected (error token is "- ") -7 -7 -./arith2.sub: line 50: ((: ++ : syntax error: operand expected (error token is "+ ") +./arith2.sub: line 50: ((: ++ : arithmetic syntax error: operand expected (error token is "+ ") 7 7 -7 @@ -249,15 +256,40 @@ efg 0 0 0 +./arith9.sub: line 4: a: unbound variable +./arith9.sub: line 5: a: unbound variable +0 +after 3 0 +0 +after 4 0 +./arith9.sub: line 14: b: expression recursion level exceeded (error token is "b") ++ var=42 ++ echo 42 +42 ++ echo 0 +0 ++ echo 0 +0 ++ echo 0 +0 ++ (( 42 )) ++ echo 0 +0 ++ (( )) ++ echo 1 +1 ++ set +x +./arith9.sub: line 37: 4+: arithmetic syntax error: operand expected (error token is "+") +x = 4+ y = 8 12 -./arith.tests: line 310: ((: x=9 y=41 : syntax error in expression (error token is "y=41 ") -./arith.tests: line 314: a b: syntax error in expression (error token is "b") -./arith.tests: line 315: ((: a b: syntax error in expression (error token is "b") +./arith.tests: line 332: ((: x=9 y=41 : arithmetic syntax error in expression (error token is "y=41 ") +./arith.tests: line 336: a b: arithmetic syntax error in expression (error token is "b") +./arith.tests: line 337: ((: a b: arithmetic syntax error in expression (error token is "b") 42 42 42 42 42 42 -./arith.tests: line 330: 'foo' : syntax error: operand expected (error token is "'foo' ") -./arith.tests: line 333: b[c]d: syntax error in expression (error token is "d") +./arith.tests: line 352: 'foo' : arithmetic syntax error: operand expected (error token is "'foo' ") +./arith.tests: line 355: b[c]d: arithmetic syntax error in expression (error token is "d") diff --git a/tests/arith.tests b/tests/arith.tests index e9ab57651..fec2afd02 100644 --- a/tests/arith.tests +++ b/tests/arith.tests @@ -97,6 +97,8 @@ echo $(( 4<(2+3) ? 1 : 32)) echo $(( (2+2)<(2+3) ? 1 : 32)) echo $(( (2+2)>(2+3) ? 1 : 32)) +echo $(( (2+2)>(2+3) ? 2**0 : 32)) + # bug in bash versions through bash-3.2 S=105 W=$((S>99?4:S>9?3:S>0?2:0)) @@ -143,6 +145,10 @@ echo $(( 16#FF/2 )) echo $(( 8#44 )) echo $(( 8 ^ 32 )) +a=8 +echo $(( a ^ 32 )) +echo $(( a ^= 32 )) +unset -v a # other bases echo $(( 16#a )) @@ -172,6 +178,11 @@ let 'jv += $iv' echo $(( jv += \$iv )) let 'rv = 7 + (43 * 6' +b=44 +echo $(( b / 0 )) +echo $(( b /= 0 )) +unset -v b + # more errors declare -i i i=0#4 @@ -240,6 +251,9 @@ echo $(( 2**16*2 )) echo $(( 2**31-1)) echo $(( 2**0 )) +# error +echo $(( 2**-1 )) + # {pre,post}-{inc,dec}rement and associated errors x=4 @@ -273,6 +287,11 @@ echo $(( -7 )) echo $(( ++7 )) echo $(( --7 )) +unset -v x +x=8 +echo $(( --x++ )) # error +unset -v x + # combinations of expansions echo $(( "`echo 1+1`" )) echo $(( `echo 1+1` )) @@ -299,6 +318,9 @@ ${THIS_SH} ./arith7.sub # problems with evaluation of conditional expressions ${THIS_SH} ./arith8.sub +# expressions with unset variables and nounset enabled +${THIS_SH} ./arith9.sub + x=4 y=7 diff --git a/tests/array.right b/tests/array.right index 62278852a..6b7b21c2f 100644 --- a/tests/array.right +++ b/tests/array.right @@ -1,6 +1,6 @@ -./array.tests: line 28: syntax error near unexpected token `&' -./array.tests: line 28: `test=(first & second)' +./array.tests: line 34: syntax error near unexpected token `&' +./array.tests: line 34: `test=(first & second)' 1 abcde abcde @@ -26,7 +26,7 @@ hello world 11 3 bdef hello world test expression test 2 -./array.tests: line 92: readonly: `a[5]': not a valid identifier +./array.tests: line 98: readonly: `a[5]': not a valid identifier declare -ar a=([1]="" [2]="bdef" [5]="hello world" [6]="test expression" [15]="test 2") declare -ar c declare -ar a=([1]="" [2]="bdef" [5]="hello world" [6]="test expression" [15]="test 2") @@ -46,17 +46,17 @@ declare -ar c declare -a d=([1]="" [2]="bdef" [5]="hello world" [6]="test" [9]="ninth element") declare -a e=([0]="test") declare -a f=([0]="" [1]="bdef" [2]="hello world" [3]="test" [4]="ninth element") -./array.tests: line 116: a: readonly variable -./array.tests: line 118: b[]: bad array subscript -./array.tests: line 119: b[*]: bad array subscript +./array.tests: line 122: a: readonly variable +./array.tests: line 124: b[]: bad array subscript +./array.tests: line 125: b[*]: bad array subscript this -./array.tests: line 122: c[-2]: bad array subscript -./array.tests: line 123: c: bad array subscript +./array.tests: line 128: c[-2]: bad array subscript +./array.tests: line 129: c: bad array subscript -./array.tests: line 125: d[7]: cannot assign list to array member -./array.tests: line 127: []=abcde: bad array subscript -./array.tests: line 127: [*]=last: cannot assign to non-numeric index -./array.tests: line 127: [-65]=negative: bad array subscript +./array.tests: line 131: d[7]: cannot assign list to array member +./array.tests: line 133: []=abcde: bad array subscript +./array.tests: line 134: [*]=last: cannot assign to non-numeric index +./array.tests: line 135: [-65]=negative: bad array subscript declare -a BASH_ARGC=() declare -a BASH_ARGV=() declare -a BASH_LINENO=([0]="0") @@ -69,8 +69,8 @@ declare -ar c declare -a d=([1]="test test") declare -a e=() declare -a f=([0]="" [1]="bdef" [2]="hello world" [3]="test" [4]="ninth element") -./array.tests: line 135: unset: ps1: not an array variable -./array.tests: line 139: declare: c: cannot destroy array variables in this way +./array.tests: line 143: unset: ps1: not an array variable +./array.tests: line 147: declare: c: readonly variable this of this is a test of read using arrays this test @@ -123,13 +123,17 @@ argv[1] = </> 55 49 6 -- 6 +./array.tests: line 238: [-10]: bad array subscript +0 42 14 44 grep [ 123 ] * 6 7 9 6 7 9 5 length = 3 value = new1 new2 new3 -./array.tests: line 255: narray: unbound variable +./array.tests: line 267: syntax error near unexpected token `&' +./array.tests: line 267: `badarray=( metacharacters like & need to be quoted in compound assignments)' +./array.tests: line 271: narray: unbound variable ./array1.sub: line 1: syntax error near unexpected token `(' ./array1.sub: line 1: `printf "%s\n" -a a=(a 'b c')' ./array2.sub: line 1: declare: `[]=asdf': not a valid identifier @@ -156,10 +160,10 @@ for case if then else 12 14 16 18 20 4414758999202 aaa bbb -./array.tests: line 305: syntax error near unexpected token `<>' -./array.tests: line 305: `metas=( <> < > ! )' -./array.tests: line 306: syntax error near unexpected token `<>' -./array.tests: line 306: `metas=( [1]=<> [2]=< [3]=> [4]=! )' +./array.tests: line 321: syntax error near unexpected token `<>' +./array.tests: line 321: `metas=( <> < > ! )' +./array.tests: line 322: syntax error near unexpected token `<>' +./array.tests: line 322: `metas=( [1]=<> [2]=< [3]=> [4]=! )' abc 3 case 4 abc case if then else 5 @@ -206,6 +210,13 @@ e b c $0 declare -a A=([0]="X=a" [1]="b") +2 3 4 5 6 +FIN1:0 +FIN2:0 +FIN3:0 +FIN4:0 +FIN5:0 +FIN6:0 t [3]=abcde r s t u v e @@ -393,6 +404,10 @@ bar: array with element zero unset: ok bar: element zero: ok qux: unset array: ok qux: unset array element 0: ok +1 +0 +0 +0 2 2 2 @@ -400,7 +415,7 @@ qux: unset array element 0: ok 0 0 1 -./array17.sub: line 43: ~: syntax error: operand expected (error token is "~") +./array17.sub: line 43: ~: arithmetic syntax error: operand expected (error token is "~") 0 0 3 @@ -415,7 +430,7 @@ one one two two -./array17.sub: line 89: ~ : syntax error: operand expected (error token is "~ ") +./array17.sub: line 89: ~ : arithmetic syntax error: operand expected (error token is "~ ") 1 argv[1] = <> argv[2] = <> @@ -453,7 +468,7 @@ declare -A a=([1]="b" [0]="a" ) declare -a var=([0]="[\$(echo" [1]="total" [2]="0)]=1" [3]="[2]=2]") declare -a var=([0]="[\$(echo total 0)]=1 [2]=2]") declare -a var=([0]="[\$(echo" [1]="total" [2]="0)]=1" [3]="[2]=2]") -./array19.sub: line 89: total 0: syntax error in expression (error token is "0") +./array19.sub: line 89: total 0: arithmetic syntax error in expression (error token is "0") declare -a var=() declare -al foo=([0]="abcde" [1]="two" [2]="three") declare -al foo=([0]="abcde") @@ -522,14 +537,14 @@ p3 argv[1] = <y> <X> <X> <X> <X> <X> <X> <X> <X> -./array23.sub: line 22: $( echo >&2 foo ) : syntax error: operand expected (error token is "$( echo >&2 foo ) ") -./array23.sub: line 23: $( echo >&2 foo ) : syntax error: operand expected (error token is "$( echo >&2 foo ) ") -./array23.sub: line 24: $( echo >&2 foo ) : syntax error: operand expected (error token is "$( echo >&2 foo ) ") -./array23.sub: line 26: $( echo >&2 foo ) : syntax error: operand expected (error token is "$( echo >&2 foo ) ") -./array23.sub: line 30: $( echo >&2 foo ): syntax error: operand expected (error token is "$( echo >&2 foo )") -./array23.sub: line 33: $( echo >&2 foo ): syntax error: operand expected (error token is "$( echo >&2 foo )") -./array23.sub: line 34: $index: syntax error: operand expected (error token is "$index") -./array23.sub: line 35: $( echo >&2 foo ): syntax error: operand expected (error token is "$( echo >&2 foo )") +./array23.sub: line 22: $( echo >&2 foo ) : arithmetic syntax error: operand expected (error token is "$( echo >&2 foo ) ") +./array23.sub: line 23: $( echo >&2 foo ) : arithmetic syntax error: operand expected (error token is "$( echo >&2 foo ) ") +./array23.sub: line 24: $( echo >&2 foo ) : arithmetic syntax error: operand expected (error token is "$( echo >&2 foo ) ") +./array23.sub: line 26: $( echo >&2 foo ) : arithmetic syntax error: operand expected (error token is "$( echo >&2 foo ) ") +./array23.sub: line 30: $( echo >&2 foo ): arithmetic syntax error: operand expected (error token is "$( echo >&2 foo )") +./array23.sub: line 33: $( echo >&2 foo ): arithmetic syntax error: operand expected (error token is "$( echo >&2 foo )") +./array23.sub: line 34: $index: arithmetic syntax error: operand expected (error token is "$index") +./array23.sub: line 35: $( echo >&2 foo ): arithmetic syntax error: operand expected (error token is "$( echo >&2 foo )") 0 0 0 @@ -583,7 +598,7 @@ jkl 1. indexed: reference: 1. 0 -./array25.sub: line 24: ' ': syntax error: operand expected (error token is "' '") +./array25.sub: line 24: ' ': arithmetic syntax error: operand expected (error token is "' '") 3. 0 4. 0 5. 0 @@ -757,6 +772,8 @@ declare -A A=([$'\t']="X" ["*"]="X" [" "]="X" ["@"]="X" ) declare -A A=(["*"]="X" ["@"]="X" ) ./array27.sub: line 76: declare: `A[]]=X': not a valid identifier declare -A A=(["*"]="X" ["@"]="X" ) +./array27.sub: line 81: y[]: bad array subscript +./array27.sub: line 81: y[]: bad array subscript declare -a bug4=([0]="" [1]="5" [2]="" [3]="1" [4]="") declare -a bug=([0]="" [1]="5" [2]="" [3]="1" [4]="") declare -a bug2=([0]="") @@ -785,3 +802,51 @@ FOO declare -Au A=([Darwin]="FOO" ) FOO declare -Au A=(["@"]="FOO" ) +declare -a aa=([0]="/homes/cj/Desktop") +declare -a aa=([0]="/homes/cj/Desktop") +declare -a aa=([0]="/homes/cj/Desktop:/homes/cj/Library:/homes/cj/Documents") +declare -a aa=([0]="/homes/cj/Desktop:/homes/cj/Library:/homes/cj/Documents") +declare -a aa=([0]="/homes/cj/Desktop:/homes/cj/Library:/homes/cj/Documents" [1]="/homes/cj/Applications") +declare -a aa=([0]="/homes/cj/Desktop:/homes/cj/Library:/homes/cj/Documents" [1]="/homes/cj/Applications") +./array32.sub: line 20: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +./array32.sub: line 21: declare: a: not found +./array32.sub: line 24: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +./array32.sub: line 25: declare: a: not found +./array32.sub: line 29: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +declare -a a=([0]="hi") +./array32.sub: line 35: declare: a: not found +./array32.sub: line 38: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +./array32.sub: line 39: declare: a: not found +./array32.sub: line 42: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +declare -a a +./array32.sub: line 50: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +declare -a a +./array32.sub: line 57: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +declare -ai a +./array32.sub: line 65: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +./array32.sub: line 66: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +./array32.sub: line 68: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +./array32.sub: line 75: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +declare -a a +./array32.sub: line 77: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +declare -a a +./array32.sub: line 80: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +declare -a a +./array32.sub: line 85: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +./array32.sub: line 91: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +declare -a a=() +./array32.sub: line 95: $(echo INJECTION! >&2 ; echo 0): arithmetic syntax error: operand expected (error token is "$(echo INJECTION! >&2 ; echo 0)") +declare -a a=() +declare -A A=([x]="x" ) +declare -A A=([1]="1" ) +./array33.sub: line 27: f: A: cannot convert associative to indexed array +./array33.sub: line 27: declare: A: cannot convert associative to indexed array +./array33.sub: line 31: A: cannot convert associative to indexed array +declare -A A=([1]="1" ) +declare -a A=([0]="x" [1]="x") +./array33.sub: line 40: f: A: cannot convert indexed to associative array +./array33.sub: line 40: declare: A: cannot convert indexed to associative array +declare -a A=([0]="x" [1]="x") +./array33.sub: line 46: A: cannot convert indexed to associative array +declare -a A=([0]="x" [1]="x") +./array33.sub: line 52: read: A: not an indexed array diff --git a/tests/array.tests b/tests/array.tests index d0bb08b74..dfcba2d09 100644 --- a/tests/array.tests +++ b/tests/array.tests @@ -11,13 +11,19 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # + +# Filter stdin to remove builtin array variables that are +# automatically set and possibly contain values that vary. +ignore_builtin_arrays() +{ + grep -v -e BASH_VERSINFO= -e PIPESTATUS= -e GROUPS= +} + # this is needed so that the bad assignments (b[]=bcde, for example) do not # cause fatal shell errors when in posix mode set +o posix set +a -# The calls to egrep -v are to filter out builtin array variables that are -# automatically set and possibly contain values that vary. # first make sure we handle the basics x=() @@ -61,7 +67,7 @@ echo ${a[@]} echo ${a[*]} # this should print out values, too -declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' +declare -a | ignore_builtin_arrays unset a[7] echo ${a[*]} @@ -92,11 +98,11 @@ echo ${a[@]} readonly a[5] readonly a # these two lines should output `declare' commands -readonly -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' -declare -ar | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' +readonly -a | ignore_builtin_arrays +declare -ar | ignore_builtin_arrays # this line should output `readonly' commands, even for arrays set -o posix -readonly -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' +readonly -a | ignore_builtin_arrays set +o posix declare -a d='([1]="" [2]="bdef" [5]="hello world" "test")' @@ -111,7 +117,7 @@ b=([0]=this [1]=is [2]=a [3]=test [4]="$PS1" [5]=$pass) echo ${b[@]:2:3} -declare -pa | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' +declare -pa | ignore_builtin_arrays a[3]="this is a test" @@ -125,11 +131,13 @@ echo ${c[-4]} d[7]=(abdedfegeee) d=([]=abcde [1]="test test" [*]=last [-65]=negative ) +d=([0]=abcde [1]="test test" [*]=last ) +d=([1]="test test" [-65]=negative ) unset d[12] unset e[*] -declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' +declare -a | ignore_builtin_arrays ps1='hello' unset ps1[2] @@ -155,7 +163,7 @@ echo ${vv[0]} ${vv[3]} echo ${vv[@]} unset vv -declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)' +declare -a | ignore_builtin_arrays export rv #set @@ -226,6 +234,11 @@ unset xpath[nelem-1] nelem=${#xpath[@]} echo ${#xpath[@]} -- $nelem +# error +echo ${#xpath[-10]} +# zero length for unset elements +echo ${#xpath[42]} + # arrays and things that look like index assignments array=(42 [1]=14 [2]=44) @@ -250,6 +263,9 @@ barray=(new1 new2 new3) echo "length = ${#barray[@]}" echo "value = ${barray[*]}" +# the compound assignment syntax inherited from ksh93 has some quirks +badarray=( metacharacters like & need to be quoted in compound assignments) + # make sure the array code behaves correctly with respect to unset variables set -u ( echo ${#narray[4]} ) @@ -397,6 +413,18 @@ Z='a b' A=( X=$Z ) declare -p A +# combine with brace expansion +letters=( {0..9} ) +echo "${letters["{2..6}"]}" + +# tests for assigning to noassign array variables +BASH_ARGC=(xxx) ; echo FIN1:$? +BASH_ARGC=foio ; echo FIN2:$? +declare BASH_ARGC=(xxx) ; echo FIN3:$? +declare BASH_ARGC=foio ; echo FIN4:$? +BASH_ARGV[1]=foo ; echo FIN5:$? +declare BASH_ARGV[1]=foo ; echo FIN6:$? + # tests for bash-3.1 problems ${THIS_SH} ./array5.sub @@ -427,3 +455,6 @@ ${THIS_SH} ./array27.sub ${THIS_SH} ./array28.sub ${THIS_SH} ./array29.sub ${THIS_SH} ./array30.sub +${THIS_SH} ./array31.sub +${THIS_SH} ./array32.sub +${THIS_SH} ./array33.sub diff --git a/tests/array16.sub b/tests/array16.sub index b82dbca28..94013ea2f 100644 --- a/tests/array16.sub +++ b/tests/array16.sub @@ -32,3 +32,12 @@ bar[1]=set typeset -a qux [[ -v qux ]] || echo qux: unset array: ok [[ -v qux[0] ]] || echo qux: unset array element 0: ok + +unset -v a +a[1]=set + +[[ -v a ]] ; echo $? +[[ -v a[1] ]] ; echo $? +[[ -v a[@] ]] ; echo $? + +[[ ${#a[@]} > 0 ]]; echo $? diff --git a/tests/array27.sub b/tests/array27.sub index e2a1e7083..856456414 100644 --- a/tests/array27.sub +++ b/tests/array27.sub @@ -76,3 +76,6 @@ for k in ']' '*' '@'; do declare "A[$k]=X" done declare -p A + +# empty arrays in arith contexts +(( y[$none] )) diff --git a/tests/assoc.right b/tests/assoc.right index 9a1662c45..84a2bc49e 100644 --- a/tests/assoc.right +++ b/tests/assoc.right @@ -40,6 +40,8 @@ argv[2] = <qix> argv[1] = <qux qix> declare -A wheat=([six]="6" ["foo bar"]="qux qix" ) argv[1] = <2> +./assoc.tests: line 99: [$unset]: bad array subscript +0 argv[1] = <7> argv[1] = <qux> argv[2] = <qix> @@ -283,7 +285,7 @@ declare -A assoc=(["*"]="star" ["!"]="bang" ["@"]="at" ) at star declare -A a=(["@"]="at" ) -./assoc13.sub: line 22: ia[@]: bad array subscript +./assoc13.sub: line 35: ia[@]: bad array subscript declare -a ia declare -A a=(["@"]="at2" ) declare -A a=(["@"]=" string" ) @@ -398,3 +400,10 @@ declare -A A=() declare -A A=(["]"]="rbracket" ["["]="lbracket" ) declare -A A=() 5: ok 1 +declare -A aa=([key]="/homes/cj/Desktop" ) +declare -A aa=([key]="/homes/cj/Desktop" ) +declare -A aa=([k2]="/homes/cj/Library" [key]="/homes/cj/Desktop" ) +declare -A aa=([/homes/cj/key]="/homes/cj/Desktop" ) +declare -A aa=([/homes/cj/Documents]="/homes/cj/Library" [/homes/cj/key]="/homes/cj/Desktop" ) +declare -A aa=([/homes/cj/Documents]="/homes/cj/Library" [/homes/cj/key]="/homes/cj/Desktop:/homes/cj/Documents:/homes/cj/Applications" ) +declare -A aa=([/homes/cj/Documents]="/homes/cj/Library" [/homes/cj/key]="/homes/cj/Desktop:/homes/cj/Documents:/homes/cj/Applications" ) diff --git a/tests/assoc.tests b/tests/assoc.tests index c656536b5..07fc9b591 100644 --- a/tests/assoc.tests +++ b/tests/assoc.tests @@ -95,6 +95,11 @@ wheat=([six]=6 [foo bar]="qux qix" ) recho ${#wheat[@]} +# and error +echo ${#wheat[$unset]} +# zero length for unset element +echo ${#wheat[unset]} + recho ${#wheat[foo bar]} # TEST - appending assignment operator @@ -266,3 +271,5 @@ ${THIS_SH} ./assoc17.sub # tests with `[' and `]' subscripts and printf/read/wait builtins ${THIS_SH} ./assoc18.sub +# tests with tilde expansion in keys and values post-bash-5.2 +${THIS_SH} ./assoc19.sub diff --git a/tests/assoc13.sub b/tests/assoc13.sub index 7e669727d..ae6516773 100644 --- a/tests/assoc13.sub +++ b/tests/assoc13.sub @@ -1,3 +1,16 @@ +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# # assignment to @ and * declare -A assoc @@ -41,4 +54,3 @@ declare a[*]=star2 declare -p a unset a - diff --git a/tests/attr.right b/tests/attr.right index d2d28b7b4..f4c3010cd 100644 --- a/tests/attr.right +++ b/tests/attr.right @@ -1,5 +1,5 @@ after f1:declare -ar a=([0]="1") -./attr.tests: line 17: a: readonly variable +./attr.tests: line 17: f2: a: readonly variable after f2:declare -ar a=([0]="1") ./attr.tests: line 18: a: readonly variable after f3:declare -ar a=([0]="1") @@ -17,7 +17,7 @@ declare -r p="1" declare -ar r=([0]="1") ./attr1.sub: line 36: r: readonly variable declare -ar r=([0]="1") -./attr1.sub: line 40: r: readonly variable +./attr1.sub: line 40: f: r: readonly variable declare -ar r=([0]="1") ./attr1.sub: line 44: readonly: r: readonly variable declare -ar r=([0]="1") diff --git a/tests/braces.right b/tests/braces.right index 401754647..7bcbc3880 100644 --- a/tests/braces.right +++ b/tests/braces.right @@ -22,6 +22,11 @@ foobar foobaz bazx bazy vx vy bazx bazy +4 +4 +./braces.tests: command substitution: line 59: unexpected EOF while looking for matching `)' +4 +4 1 2 3 4 5 6 7 8 9 10 0..10 braces 0 1 2 3 4 5 6 7 8 9 10 braces @@ -58,6 +63,8 @@ a b c d e f g h i j k l m n o p q r s t u v w x y z a c e g i k m o q s u w y z x v t r p n l j h f d b 2147483645 2147483646 2147483647 2147483648 2147483649 +00 01 02 03 04 05 06 07 08 09 10 +00 02 04 06 08 10 10 8 6 4 2 0 10 8 6 4 2 0 -50 -45 -40 -35 -30 -25 -20 -15 -10 -5 0 diff --git a/tests/braces.tests b/tests/braces.tests index da0b624bc..e1920f29a 100644 --- a/tests/braces.tests +++ b/tests/braces.tests @@ -49,6 +49,17 @@ echo ${var}{x,y} unset var varx vary +# make sure ${ is parsed as a word expansion, since it may contain other +# expansions +a=4 +echo "${a#'$('\'}" +echo "${a-'$('\'}" +echo "${a+'$('\'}" + +echo "${a#aaaa'$(aaaa'aaa)aaa\'}" +echo "${a#aaaa'$(aaaa)'aaaa\'}" +unset -v a + # new sequence brace operators echo {1..10} @@ -110,6 +121,10 @@ echo {z..a..-2} # make sure brace expansion handles ints > 2**31 - 1 using intmax_t echo {2147483645..2147483649} +# want zero-padding here +echo {00..10} +echo {00..10..2} + # unwanted zero-padding -- fixed post-bash-4.0 echo {10..0..2} echo {10..0..-2} diff --git a/tests/builtins.right b/tests/builtins.right index 4f51d436c..e2fc4f946 100644 --- a/tests/builtins.right +++ b/tests/builtins.right @@ -1,4 +1,3 @@ -1000 a end-1 a @@ -84,13 +83,17 @@ enable times enable trap enable unset enable -n test worked +enable -n test enable test worked +./builtins.tests: line 126: enable: notbuiltin: not a shell builtin +./builtins.tests: line 127: enable: test: not dynamically loaded specialname -specialname FOO=BAR FOO=BAR hash: hash table empty 0 +no-newline AVAR foo in source.sub2, calling return @@ -106,6 +109,7 @@ m n o p /tmp/bash-dir-a /tmp/bash-dir-a /tmp/bash-dir-a +/ ./source5.sub: line 23: /tmp/source-notthere: No such file or directory after bad source 1 ./source5.sub: line 30: /tmp/source-notthere: No such file or directory @@ -145,17 +149,19 @@ AVAR foo declare -x foo="" declare -x FOO="\$\$" -./builtins.tests: line 228: declare: FOO: not found +./builtins.tests: line 239: declare: FOO: not found declare -x FOO="\$\$" ok ok -./builtins.tests: line 260: kill: 4096: invalid signal specification +./builtins.tests: line 271: kill: 4096: invalid signal specification 1 a\n\n\nb a b +-p +a b c before: f = 4 inside after: f = 8 bar = 4 @@ -278,4 +284,210 @@ type + command -p -- command -v type type + set +x -./builtins.tests: line 284: exit: status: numeric argument required +u=rw,g=rx,o=rx +u=r,g=rx,o=rx +u=rwx,g=rwx,o= +u=rw,g=wx,o=rx +u=rx,g=rx,o=rx +u=rwx,g=rx,o=rwx +u=rwx,g=rwx,o=rx +u=rx,g=rx,o=rx +u=rwx,g=rx,o=rx +u=rwx,g=rwx,o=rwx +u=rwx,g=rwx,o=rwx +u=rwx,g=rx,o=rx +u=rwx,g=rx,o=rx +u=rwx,g=rx,o=rx +u=rwx,g=rx,o=rx +u=rwx,g=rx,o=rx +u=rwx,g=rx,o=rx +u=rwx,g=rx,o=x +hash: hash table empty +./builtins9.sub: line 19: hash: notthere: not found +1 +/nosuchdir/nosuchfile +builtin hash -p /nosuchdir/nosuchfile cat +builtin hash -p /nosuchdir/nosuchfile cat +./builtins9.sub: line 30: hash: notthere: not found +./builtins9.sub: line 32: hash: notthere: not found +./builtins9.sub: line 33: hash: notthere: not found +1 +./builtins9.sub: line 40: /nosuchdir/nosuchfile: No such file or directory +127 +/nosuchdir/nosuchfile +0 +0 +found +./builtins9.sub: line 52: hash: /: Is a directory +builtin hash -p /nosuchfile cat +./builtins10.sub: line 17: help: -x: invalid option +help: usage: help [-dms] [pattern ...] +These shell commands are defined internally. Type `help' to see this list. +Type `help name' to find out more about the function `name'. +Use `info bash' to find out more about the shell in general. +Use `man -k' or `info' to find out more about commands not in this list. + +A star (*) next to a name means that the command is disabled. + + ! PIPELINE history [-c] [-d offset] [n] or hist> + job_spec [&] if COMMANDS; then COMMANDS; [ elif C> + (( expression )) jobs [-lnprs] [jobspec ...] or jobs > + . filename [arguments] kill [-s sigspec | -n signum | -sigs> + : let arg [arg ...] + [ arg... ] local [option] name[=value] ... + [[ expression ]] logout [n] + alias [-p] [name[=value] ... ] mapfile [-d delim] [-n count] [-O or> + bg [job_spec ...] popd [-n] [+N | -N] + bind [-lpsvPSVX] [-m keymap] [-f file> printf [-v var] format [arguments] + break [n] pushd [-n] [+N | -N | dir] + builtin [shell-builtin [arg ...]] pwd [-LP] + caller [expr] read [-Eers] [-a array] [-d delim] [> + case WORD in [PATTERN [| PATTERN]...)> readarray [-d delim] [-n count] [-O > + cd [-L|[-P [-e]]] [-@] [dir] readonly [-aAf] [name[=value] ...] o> + command [-pVv] command [arg ...] return [n] + compgen [-V varname] [-abcdefgjksuv] > select NAME [in WORDS ... ;] do COMM> + complete [-abcdefgjksuv] [-pr] [-DEI]> set [-abefhkmnptuvxBCEHPT] [-o optio> + compopt [-o|+o option] [-DEI] [name .> shift [n] + continue [n] shopt [-pqsu] [-o] [optname ...] + coproc [NAME] command [redirections] source filename [arguments] + declare [-aAfFgiIlnrtux] [name[=value> suspend [-f] + dirs [-clpv] [+N] [-N] test [expr] + disown [-h] [-ar] [jobspec ... | pid > time [-p] pipeline + echo [-neE] [arg ...] times + enable [-a] [-dnps] [-f filename] [na> trap [-Plp] [[action] signal_spec ..> + eval [arg ...] true + exec [-cl] [-a name] [command [argume> type [-afptP] name [name ...] + exit [n] typeset [-aAfFgiIlnrtux] name[=value> + export [-fn] [name[=value] ...] or ex> ulimit [-SHabcdefiklmnpqrstuvxPRT] [> + false umask [-p] [-S] [mode] + fc [-e ename] [-lnr] [first] [last] o> unalias [-a] name [name ...] + fg [job_spec] unset [-f] [-v] [-n] [name ...] + for NAME [in WORDS ... ] ; do COMMAND> until COMMANDS; do COMMANDS-2; done + for (( exp1; exp2; exp3 )); do COMMAN> variables - Names and meanings of so> + function name { COMMANDS ; } or name > wait [-fn] [-p var] [id ...] + getopts optstring name [arg ...] while COMMANDS; do COMMANDS-2; done + hash [-lr] [-p pathname] [-dt] [name > { COMMANDS ; } + help [-dms] [pattern ...] +help: help [-dms] [pattern ...] +shift - Shift positional parameters. +shift: shift [n] + Shift positional parameters. + + Rename the positional parameters $N+1,$N+2 ... to $1,$2 ... If N is + not given, it is assumed to be 1. + + Exit Status: + Returns success unless N is negative or greater than $#. +builtin: builtin [shell-builtin [arg ...]] +shift: shift [n] +Shell commands matching keyword `read*' + +read: read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] +readarray: readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array] +readonly: readonly [-aAf] [name[=value] ...] or readonly -p +read: read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] +readarray: readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array] +readonly: readonly [-aAf] [name[=value] ...] or readonly -p +:: : + Null command. + + No effect; the command does nothing. + + Exit Status: + Always succeeds. +NAME + : - Null command. + +SYNOPSIS + : + +DESCRIPTION + Null command. + + No effect; the command does nothing. + + Exit Status: + Always succeeds. + +SEE ALSO + bash(1) + +IMPLEMENTATION + Copyright (C) 2024 Free Software Foundation, Inc. + +These shell commands are defined internally. Type `help' to see this list. +Type `help name' to find out more about the function `name'. +Use `info bash' to find out more about the shell in general. +Use `man -k' or `info' to find out more about commands not in this list. + +A star (*) next to a name means that the command is disabled. + + ! PIPELINE history [-c] [-d offset] [n] or hist> + job_spec [&] if COMMANDS; then COMMANDS; [ elif C> + (( expression )) jobs [-lnprs] [jobspec ...] or jobs > + . filename [arguments] kill [-s sigspec | -n signum | -sigs> + : let arg [arg ...] + [ arg... ] local [option] name[=value] ... + [[ expression ]] logout [n] + alias [-p] [name[=value] ... ] mapfile [-d delim] [-n count] [-O or> + bg [job_spec ...] popd [-n] [+N | -N] + bind [-lpsvPSVX] [-m keymap] [-f file> printf [-v var] format [arguments] + break [n] pushd [-n] [+N | -N | dir] + builtin [shell-builtin [arg ...]] pwd [-LP] + caller [expr] read [-Eers] [-a array] [-d delim] [> + case WORD in [PATTERN [| PATTERN]...)> readarray [-d delim] [-n count] [-O > + cd [-L|[-P [-e]]] [-@] [dir] readonly [-aAf] [name[=value] ...] o> + command [-pVv] command [arg ...] return [n] + compgen [-V varname] [-abcdefgjksuv] > select NAME [in WORDS ... ;] do COMM> + complete [-abcdefgjksuv] [-pr] [-DEI]> set [-abefhkmnptuvxBCEHPT] [-o optio> + compopt [-o|+o option] [-DEI] [name .> shift [n] + continue [n] shopt [-pqsu] [-o] [optname ...] + coproc [NAME] command [redirections] source filename [arguments] + declare [-aAfFgiIlnrtux] [name[=value> suspend [-f] + dirs [-clpv] [+N] [-N] test [expr] + disown [-h] [-ar] [jobspec ... | pid > time [-p] pipeline + echo [-neE] [arg ...] times + enable [-a] [-dnps] [-f filename] [na> trap [-Plp] [[action] signal_spec ..> + eval [arg ...] true + exec [-cl] [-a name] [command [argume> type [-afptP] name [name ...] + exit [n] typeset [-aAfFgiIlnrtux] name[=value> + export [-fn] [name[=value] ...] or ex> ulimit [-SHabcdefiklmnpqrstuvxPRT] [> + false umask [-p] [-S] [mode] + fc [-e ename] [-lnr] [first] [last] o> unalias [-a] name [name ...] + fg [job_spec] unset [-f] [-v] [-n] [name ...] + for NAME [in WORDS ... ] ; do COMMAND> until COMMANDS; do COMMANDS-2; done + for (( exp1; exp2; exp3 )); do COMMAN> variables - Names and meanings of so> + function name { COMMANDS ; } or name > wait [-fn] [-p var] [id ...] + getopts optstring name [arg ...] while COMMANDS; do COMMANDS-2; done + hash [-lr] [-p pathname] [-dt] [name > { COMMANDS ; } + help [-dms] [pattern ...] +./builtins10.sub: line 39: help: no help topics match `bash'. Try `help help' or `man -k bash' or `info bash'. +unlimited +unlimited +./builtins11.sub: line 27: ulimit: +1999: invalid number +0 +0 +./builtins11.sub: line 37: ulimit: -g: invalid option +ulimit: usage: ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit] +./builtins11.sub: line 39: ulimit: max user processes: cannot modify limit: Operation not permitted +/tmp /bin +/tmp /bin +/bin /tmp +./builtins12.sub: line 21: pushd: -x: invalid number +pushd: usage: pushd [-n] [+N | -N | dir] +/tmp +./builtins12.sub: line 24: popd: -x: invalid number +popd: usage: popd [-n] [+N | -N] +/ /tmp +./builtins12.sub: line 27: popd: dir: invalid argument +popd: usage: popd [-n] [+N | -N] +/ +/tmp +/tmp / +/bin /tmp / +./builtins12.sub: line 35: popd: -8: directory stack index out of range +./builtins12.sub: line 36: popd: +8: directory stack index out of range +/tmp / +/ +./builtins.tests: line 322: exit: status: numeric argument required +after non-numeric arg to exit: 2 diff --git a/tests/builtins.tests b/tests/builtins.tests index 8eee43e6e..60ec6bbc3 100644 --- a/tests/builtins.tests +++ b/tests/builtins.tests @@ -15,10 +15,6 @@ set +p set +o posix -ulimit -S -c 0 2>/dev/null -ulimit -c -S -- 1000 2>/dev/null -ulimit -c 2>/dev/null - # check that break breaks loops for i in a b c; do echo $i; break; echo bad-$i; done echo end-1 @@ -71,6 +67,10 @@ for i in a b c; do done echo end +# check arguments to break and continue that exceed the loop level +for f in 1 2 3; do break -- 5; done +for f in 1 2 3; do continue -- 5; done + # check that `eval' re-evaluates arguments, but `builtin' and `command' do not AVAR='$BVAR' BVAR=foo @@ -87,7 +87,7 @@ BVAR=xxx eval echo $AVAR unset -v AVAR BVAR -# test umask +# basic umask tests mask=$(umask) umask 022 umask @@ -115,6 +115,7 @@ case "$(type -t test)" in builtin) echo oops -- enable -n test failed ;; *) echo enable -n test worked ;; esac +enable -n | grep test enable test case "$(type -t test)" in @@ -122,6 +123,9 @@ builtin) echo enable test worked ;; *) echo oops -- enable test failed ;; esac +enable -d notbuiltin +enable -d test + # test options to exec (exec -a specialname ${THIS_SH} -c 'echo $0' ) (exec -l -a specialname ${THIS_SH} -c 'echo $0' ) @@ -145,11 +149,18 @@ command -p hash rm # check out source/. # sourcing a zero-length-file had better not be an error -rm -f /tmp/zero-length-file -cp /dev/null /tmp/zero-length-file -. /tmp/zero-length-file +rm -f $TMPDIR/zero-length-file-$$ +cp /dev/null $TMPDIR/zero-length-file-$$ +. $TMPDIR/zero-length-file-$$ echo $? -rm /tmp/zero-length-file +rm $TMPDIR/zero-length-file-$$ + +# and sourcing a file that doesn't end in a newline had better work too +SFILE=$TMPDIR/sourced-file-$$ +printf 'echo no-newline' > $SFILE +. $SFILE +rm -f $SFILE +unset -v SFILE AVAR=AVAR @@ -262,6 +273,13 @@ kill -l 4096 # kill -l NAME should return the signal number kill -l ${sigone/SIG/} +# kill -l NAME should work with and without the SIG prefix +x=$(kill -l INT) +y=$(kill -l SIGINT) + +[[ $x == $y ]] || echo kill -l error with SIG prefix +unset -v x y + # test behavior of shopt xpg_echo ${THIS_SH} ./builtins2.sub @@ -280,7 +298,26 @@ ${THIS_SH} ./builtins6.sub # test behavior of command builtin after changing it to a pseudo-keyword ${THIS_SH} ./builtins7.sub -# this must be last -- it is a fatal error -exit status +# POSIX complete symbolic umask tests +${THIS_SH} ./builtins8.sub -echo after bad exit +# hash tests +${THIS_SH} ./builtins9.sub + +# help tests +${THIS_SH} ./builtins10.sub + +# ulimit tests +${THIS_SH} ./builtins11.sub + +# pushd/popd/dirs +${THIS_SH} ./builtins12.sub + +shift 0 # succeeds silently + +options=$(set -o -B 2>&1 | wc -l) +[[ $options -gt 3 ]] || echo 'set: bad -o option name parsing' + +# this no longer must be last -- it is no longer a fatal error +exit status +echo after non-numeric arg to exit: $? diff --git a/tests/builtins1.sub b/tests/builtins1.sub index 52185b54f..ae3defb87 100644 --- a/tests/builtins1.sub +++ b/tests/builtins1.sub @@ -12,3 +12,7 @@ echo $PWD cd "$MYDIR" rmdir $FULLDIR + +cd / +cd /tmp +cd - # should print / diff --git a/tests/builtins2.sub b/tests/builtins2.sub index e4cb32ae6..9b6cb73ea 100644 --- a/tests/builtins2.sub +++ b/tests/builtins2.sub @@ -8,3 +8,7 @@ echo 'a\n\n\nb' shopt -s xpg_echo echo 'a\n\n\nb' + +echo -p +set -o posix +echo 'a\tb\tc' diff --git a/tests/case.right b/tests/case.right index d33c8c5af..3ff3eaf51 100644 --- a/tests/case.right +++ b/tests/case.right @@ -15,6 +15,9 @@ no no ok esac +unset word ok 1 +unset word ok 2 +unset word ok 3 ok 1 ok 2 ok 3 diff --git a/tests/case.tests b/tests/case.tests index 7ad4c683a..2bb0922de 100644 --- a/tests/case.tests +++ b/tests/case.tests @@ -66,6 +66,15 @@ case " " in ( [" "] ) echo ok;; ( * ) echo no;; esac case esac in (esac) echo esac;; esac case k in else|done|time|esac) for f in 1 2 3 ; do :; done esac +# null words and patterns +var=value +case $unset in +'') echo unset word ok 1 ;;& +$unset|$var) echo unset word ok 2 ;;& +unset|$unset) echo unset word ok 3 ;; +*) echo unset word bad ;; +esac + # tests of quote removal and pattern matching ${THIS_SH} ./case1.sub ${THIS_SH} ./case2.sub diff --git a/tests/casemod.right b/tests/casemod.right index df1247547..55081a59e 100644 --- a/tests/casemod.right +++ b/tests/casemod.right @@ -43,5 +43,7 @@ Be Conservative in what you send and Liberal in what you accept BE CONSERVATIVE IN WHAT YOU SEND AND LIBERAL IN WHAT YOU ACCEPT Be conservative in what you send and liberal in what you accept BE CONSERVATIVE IN WHAT YOU SEND AND LIBERAL IN WHAT YOU ACCEPT +acKnowledGEmEnt +oENoPHiLe abcdexyz ABCDEXYZ diff --git a/tests/casemod.tests b/tests/casemod.tests index 56ab20d95..a7709a5f6 100644 --- a/tests/casemod.tests +++ b/tests/casemod.tests @@ -114,8 +114,11 @@ echo ${TEXT2^^} M1=${S1^^[aeiou]} M2=${U2,,[AEIOU]} -#echo ${M1} ${M1~} -#echo ${M2} ${M2~~} +# case-toggling modifiers are still in there for now +Z1=AcKnowledGEmEnt +Z2=OenOphIlE +echo ${Z1~} +echo ${Z2~~} declare -l lower=aBcDe lower+=XyZ diff --git a/tests/complete.right b/tests/complete.right index c8bf1dc0c..d933a22dd 100644 --- a/tests/complete.right +++ b/tests/complete.right @@ -61,3 +61,326 @@ complete -d rmdir complete -f more complete -f -X '!*.+(gz|tgz)' gzcat ./complete.tests: line 123: complete: notthere: no completion specification +./complete.tests: line 130: complete: -V: invalid option +complete: usage: complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...] +./complete.tests: line 132: compgen: `invalid-name': not a valid identifier +. +unalias -- fee +unalias -- fi +unalias -- fum +! +% +(( ... )) +. +: +[ +[[ ... ]] +alias +bg +bind +break +builtin +caller +case +cd +command +compgen +complete +compopt +continue +coproc +declare +dirs +disown +echo +enable +eval +exec +exit +export +false +fc +fg +for +for (( +function +getopts +hash +help +history +if +jobs +kill +let +local +logout +mapfile +popd +printf +pushd +pwd +read +readarray +readonly +return +select +set +shift +shopt +source +suspend +test +time +times +trap +true +type +typeset +ulimit +umask +unalias +unset +until +variables +wait +while +{ ... } +allexport +braceexpand +emacs +errexit +errtrace +functrace +hashall +histexpand +history +ignoreeof +interactive-comments +keyword +monitor +noclobber +noexec +noglob +nolog +notify +nounset +onecmd +physical +pipefail +posix +privileged +verbose +vi +xtrace +autocd +array_expand_once +assoc_expand_once +cdable_vars +cdspell +checkhash +checkjobs +checkwinsize +cmdhist +compat31 +compat32 +compat40 +compat41 +compat42 +compat43 +compat44 +complete_fullquote +direxpand +dirspell +dotglob +execfail +expand_aliases +extdebug +extglob +extquote +failglob +force_fignore +globasciiranges +globskipdots +globstar +gnu_errfmt +histappend +histreedit +histverify +hostcomplete +huponexit +inherit_errexit +interactive_comments +lastpipe +lithist +localvar_inherit +localvar_unset +login_shell +mailwarn +no_empty_cmd_completion +nocaseglob +nocasematch +noexpand_translation +nullglob +patsub_replacement +progcomp +progcomp_alias +promptvars +restricted_shell +shift_verbose +sourcepath +varredir_close +xpg_echo +. +: +[ +alias +bg +bind +break +builtin +caller +cd +command +compgen +complete +compopt +continue +declare +dirs +disown +echo +enable +eval +exec +exit +export +false +fc +fg +getopts +hash +help +history +jobs +kill +let +local +logout +mapfile +popd +printf +pushd +pwd +read +readarray +readonly +return +set +shift +shopt +source +suspend +test +times +trap +true +type +typeset +ulimit +umask +unalias +unset +wait +. +: +[ +alias +bg +bind +break +builtin +caller +cd +command +compgen +complete +compopt +continue +declare +dirs +disown +echo +enable +eval +exec +exit +export +false +fc +fg +getopts +hash +help +history +jobs +kill +let +local +logout +mapfile +popd +printf +pushd +pwd +read +readarray +readonly +return +set +shift +shopt +source +suspend +test +times +trap +true +type +typeset +ulimit +umask +unalias +unset +wait +if +then +else +elif +fi +case +esac +for +select +while +until +do +done +in +function +time +{ +} +! +[[ +]] +coproc +./complete.tests: line 152: complete: -z: invalid option +complete: usage: complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...] +complete: usage: complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...] +./complete.tests: line 154: compgen: -r: invalid option +compgen: usage: compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word] +./complete.tests: line 155: compgen: noaction: invalid action name +./complete.tests: line 156: compgen: -D: invalid option +compgen: usage: compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word] +./complete.tests: line 157: compgen: nooption: invalid option name +./complete.tests: line 159: compopt: nooption: invalid option name diff --git a/tests/complete.tests b/tests/complete.tests index 36a398336..adb7761a2 100644 --- a/tests/complete.tests +++ b/tests/complete.tests @@ -124,3 +124,36 @@ complete -r notthere complete -r complete + +# new complete/compgen -V option +# doesn't work for complete +complete -V name + +compgen -V invalid-name -b +compgen -V array -b +echo ${array[0]} + +# a more complicated example +unalias -a +alias fee=one fi=two fo=three fum=four +compgen -a -X 'fo*' -V vv -P 'unalias -- ' f +printf '%s\n' "${vv[@]}" + +# some random compgen topics + +compgen -A helptopic +builtin compgen -A setopt +compgen -A shopt +command compgen -b +compgen -A enabled +compgen -k + +# and some errors +complete -z +complete -b +compgen -r +compgen -A noaction +compgen -D +compgen -o nooption + +compopt -o nooption diff --git a/tests/comsub-eof.right b/tests/comsub-eof.right index cd5ab6923..c6a4c9ef4 100644 --- a/tests/comsub-eof.right +++ b/tests/comsub-eof.right @@ -1,4 +1,6 @@ -./comsub-eof0.sub: line 5: warning: here-document at line 3 delimited by end-of-file (wanted `EOF') +./comsub-eof0.sub: line 4: warning: here-document at line 2 delimited by end-of-file (wanted `EOF') +hi +./comsub-eof0.sub: line 11: warning: here-document at line 9 delimited by end-of-file (wanted `EOF') hi hi ./comsub-eof2.sub: line 2: warning: here-document at line 1 delimited by end-of-file (wanted `EOF') diff --git a/tests/comsub-eof0.sub b/tests/comsub-eof0.sub index 7490faabc..1cbbb819a 100644 --- a/tests/comsub-eof0.sub +++ b/tests/comsub-eof0.sub @@ -1,3 +1,9 @@ +# this works as it should, but with a warning +foo=$(cat <<EOF +hi +EOF) +echo $foo +unset -v foo # it's only the space before the paren that makes this an error # when I fix it, it will show up here foo=$(cat <<EOF diff --git a/tests/comsub.right b/tests/comsub.right index eae8c3b28..5c856400d 100644 --- a/tests/comsub.right +++ b/tests/comsub.right @@ -1,4 +1,4 @@ -./comsub.tests: line 20: hijkl: command not found +./comsub.tests: line 19: hijkl: command not found argv[1] = <ab> argv[2] = <cd> argv[1] = <abmn> @@ -20,6 +20,11 @@ argv[1] = <foo\^Jbar> argv[1] = <foobar> argv[1] = <foo\^Jbar> nested +blank ---- +blank ---- +blank ---- +blank ---- +func: v = comsub #esac a ok 1 @@ -77,3 +82,16 @@ Mon Aug 29 20:03:02 EDT 2022 hey after x ./comsub6.sub: line 40: syntax error near unexpected token `)' ./comsub6.sub: line 40: `math1)' +123 +123 +0 +123 +123 +0 +Mon Aug 29 20:03:02 EDT 2022 +Mon Aug 29 20:03:02 EDT 2022 +Mon Aug 29 20:03:02 EDT 2022 +Mon Aug 29 20:03:02 EDT 2022 +123 +before 123 +in for 123 diff --git a/tests/comsub.tests b/tests/comsub.tests index 698ce30b0..b4ae69b2f 100644 --- a/tests/comsub.tests +++ b/tests/comsub.tests @@ -76,9 +76,34 @@ echo $(echo $( echo nested ) ) ) +# empty comsubs, fork and nofork +echo blank --$( +)-- +echo blank --$()-- + +echo blank --${ +}-- +echo blank --${ }-- + + +BUILDDIR=/builds/test +read << EOC +Dir: ${BUILDDIR#<(echo a)/} +EOC + +# return in a comsub inside a shell function should abort the comsub +func() +{ + local v + v=$( echo comsub ; return ; echo after) + echo $FUNCNAME: v = $v +} +func + ${THIS_SH} ./comsub1.sub ${THIS_SH} ./comsub2.sub ${THIS_SH} ./comsub3.sub ${THIS_SH} ./comsub4.sub ${THIS_SH} ./comsub5.sub ${THIS_SH} ./comsub6.sub +${THIS_SH} ./comsub7.sub diff --git a/tests/cond-regexp2.sub b/tests/cond-regexp2.sub index 4da0a88f4..0a0ade518 100644 --- a/tests/cond-regexp2.sub +++ b/tests/cond-regexp2.sub @@ -21,6 +21,16 @@ [[ "\\" =~ [\\] ]] || echo bad 5 +[[ x =~ [z-a] ]] && echo bad 6 + +[[ x =~ [[:invalid:]abc] ]] && echo bad 7 + +exp='x\' +[[ x =~ $exp ]] && echo bad 8 + +exp='a(xb' +[[ x =~ $exp ]] && echo bad 9 + [[ dog =~ [[=d=]].. ]] && echo ok 1 [[ d.. =~ [[=d=]]\.\. ]] && echo ok 2 [[ dog =~ ['[=d=]'].. ]] && echo ok 3 # dubious diff --git a/tests/cond.right b/tests/cond.right index a72a1537e..4f90a7a7d 100644 --- a/tests/cond.right +++ b/tests/cond.right @@ -12,6 +12,8 @@ returns: 0 returns: 0 returns: 1 returns: 0 +./cond.tests: line 65: [[: X: integer expected +returns: 2 returns: 0 returns: 1 returns: 1 @@ -27,7 +29,7 @@ returns: 0 returns: 1 returns: 1 returns: 0 -./cond.tests: line 122: [[: 4+: syntax error: operand expected (error token is "+") +./cond.tests: line 126: [[: 4+: arithmetic syntax error: operand expected (error token is "+") returns: 1 returns: 0 returns: 0 @@ -52,6 +54,12 @@ ok 2 ok 3 ok 4 ok 5 +ok c1 +ok c2 +ok c3 +ok c4 +ok c5 +ok c6 match 1 match 2 match 3 @@ -76,6 +84,11 @@ match control-a 2 match control-a 3 match control-a 4 match control-a 5 +./cond-regexp2.sub: line 18: [[: invalid regular expression `[\.': brackets ([ ]) not balanced +./cond-regexp2.sub: line 24: [[: invalid regular expression `[z-a]': invalid character range +./cond-regexp2.sub: line 26: [[: invalid regular expression `[[:invalid:]abc]': invalid character class +./cond-regexp2.sub: line 29: [[: invalid regular expression `x\': trailing backslash (\) +./cond-regexp2.sub: line 32: [[: invalid regular expression `a(xb': parentheses not balanced ok 1 ok 2 ok 3 @@ -140,3 +153,44 @@ ok 5 ok 6 ok 7 ok 8 +bash: -c: line 1: unexpected token `EOF', expected `)' +bash: -c: line 2: syntax error: unexpected end of file +bash: -c: line 1: unexpected EOF while looking for `]]' +bash: -c: line 2: syntax error: unexpected end of file +bash: -c: line 1: syntax error in conditional expression +bash: -c: line 1: syntax error near `]' +bash: -c: line 1: `[[ ( -t X ) ]' +bash: -c: line 1: unexpected argument `&' to conditional unary operator +bash: -c: line 1: syntax error near `&' +bash: -c: line 1: `[[ -n &' +bash: -c: line 1: syntax error in conditional expression: unexpected token `&' +bash: -c: line 1: syntax error near `&' +bash: -c: line 1: `[[ -n XX &' +bash: -c: line 1: syntax error in conditional expression: unexpected token `&' +bash: -c: line 1: syntax error near `&' +bash: -c: line 1: `[[ -n XX & ]' +bash: -c: line 1: unexpected token `&', conditional binary operator expected +bash: -c: line 1: syntax error near `&' +bash: -c: line 1: `[[ 4 & ]]' +bash: -c: line 1: unexpected argument `&' to conditional binary operator +bash: -c: line 1: syntax error near `&' +bash: -c: line 1: `[[ 4 > & ]]' +bash: -c: line 1: unexpected token `&' in conditional command +bash: -c: line 1: syntax error near `&' +bash: -c: line 1: `[[ & ]]' +bash: -c: line 1: conditional binary operator expected +bash: -c: line 1: syntax error near `7' +bash: -c: line 1: `[[ -Q 7 ]]' +bash: -c: line 1: unexpected argument `<' to conditional unary operator +bash: -c: line 1: syntax error near `<' +bash: -c: line 1: `[[ -n < ]]' +ERR: 22: -[[ -n $unset ]]- failed +ERR: 28: -[[ -z nonempty ]]- failed ++ [[ -t X ]] +./cond-xtrace1.sub: line 6: [[: X: integer expected ++ [[ '' > 7 ]] ++ [[ -n X ]] ++ ivar=42 ++ [[ 42 -eq 42 ]] ++ [[ -n a ]] ++ [[ -n b ]] diff --git a/tests/cond.tests b/tests/cond.tests index c0747e981..110f702fe 100644 --- a/tests/cond.tests +++ b/tests/cond.tests @@ -61,6 +61,10 @@ echo returns: $? [[ -z $UNSET ]] echo returns: $? +# need to handle test syntax errors and longjmp +[[ -t X ]] +echo returns: $? + # the ==/= and != operators do pattern matching [[ $TDIR == /usr/homes/* ]] echo returns: $? @@ -225,8 +229,20 @@ del=$'\177' # allow reserved words after a conditional command just because if [[ str ]] then [[ str ]] fi -${THIS_SH} ./cond-regexp1.sub +# make sure pattern matching does the right thing with CTLESC +var=$'ab\001' +[[ $var == $var ]] && echo ok c1 +[[ $var == a* ]] && echo ok c2 +[[ $var == $'ab\001' ]] && echo ok c3 -${THIS_SH} ./cond-regexp2.sub +var=$'ab\001c' +[[ $var == $var ]] && echo ok c4 +[[ $var == a* ]] && echo ok c5 +[[ $var == $'ab\001'* ]] && echo ok c6 +${THIS_SH} ./cond-regexp1.sub +${THIS_SH} ./cond-regexp2.sub ${THIS_SH} ./cond-regexp3.sub + +${THIS_SH} ./cond-error1.sub +${THIS_SH} ./cond-xtrace1.sub diff --git a/tests/dbg-support.right b/tests/dbg-support.right index 6e2194aae..f50270112 100644 --- a/tests/dbg-support.right +++ b/tests/dbg-support.right @@ -1,7 +1,10 @@ -debug lineno: 74 main -debug lineno: 77 main -FUNCNAME main +0 NULL +./dbg-support.tests: line 72: caller: -z: invalid option +caller: usage: caller [expr] +debug lineno: 78 main debug lineno: 81 main +FUNCNAME main +debug lineno: 85 main debug lineno: 30 fn1 debug lineno: 31 fn1 LINENO 31 @@ -12,9 +15,9 @@ BASH_SOURCE[0] ./dbg-support.tests debug lineno: 34 fn1 FUNCNAME[0] fn1 debug lineno: 35 fn1 -debug lineno: 35 fn1 81 ./dbg-support.tests +debug lineno: 35 fn1 85 ./dbg-support.tests debug lineno: 36 fn1 -debug lineno: 36 fn1 81 main ./dbg-support.tests +debug lineno: 36 fn1 85 main ./dbg-support.tests debug lineno: 37 fn1 debug lineno: 37 fn1 debug lineno: 38 fn1 @@ -26,7 +29,7 @@ debug lineno: 25 print_return_trap debug lineno: 26 print_return_trap return lineno: 30 fn1 debug lineno: 27 print_return_trap -debug lineno: 82 main +debug lineno: 86 main debug lineno: 41 fn2 debug lineno: 42 fn2 fn2 here. Calling fn1... @@ -45,7 +48,7 @@ debug lineno: 35 fn1 43 ./dbg-support.tests debug lineno: 36 fn1 debug lineno: 36 fn1 43 fn2 ./dbg-support.tests debug lineno: 37 fn1 -debug lineno: 37 fn1 82 main ./dbg-support.tests +debug lineno: 37 fn1 86 main ./dbg-support.tests debug lineno: 38 fn1 ./dbg-support.tests: line 38: caller: foo: invalid number caller: usage: caller [expr] @@ -60,7 +63,7 @@ debug lineno: 25 print_return_trap debug lineno: 26 print_return_trap return lineno: 41 fn2 debug lineno: 27 print_return_trap -debug lineno: 83 main +debug lineno: 87 main debug lineno: 46 fn3 debug lineno: 47 fn3 LINENO 47 @@ -112,7 +115,7 @@ debug lineno: 23 sourced_fn debug lineno: 24 sourced_fn debug lineno: 25 sourced_fn debug lineno: 26 sourced_fn -FUNCNAME[2]: fn3 called from ./dbg-support.tests at line 83 +FUNCNAME[2]: fn3 called from ./dbg-support.tests at line 87 debug lineno: 23 sourced_fn debug lineno: 23 sourced_fn debug lineno: 24 sourced_fn @@ -137,7 +140,7 @@ debug lineno: 25 print_return_trap debug lineno: 26 print_return_trap return lineno: 46 fn3 debug lineno: 27 print_return_trap -debug lineno: 84 main +debug lineno: 88 main debug lineno: 31 source SOURCED LINENO 31 debug lineno: 32 source @@ -160,7 +163,7 @@ debug lineno: 23 sourced_fn debug lineno: 24 sourced_fn debug lineno: 25 sourced_fn debug lineno: 26 sourced_fn -FUNCNAME[1]: source called from ./dbg-support.tests at line 84 +FUNCNAME[1]: source called from ./dbg-support.tests at line 88 debug lineno: 23 sourced_fn debug lineno: 23 sourced_fn debug lineno: 24 sourced_fn @@ -175,24 +178,24 @@ debug lineno: 25 print_return_trap debug lineno: 26 print_return_trap return lineno: 16 sourced_fn debug lineno: 27 print_return_trap -debug lineno: 84 main +debug lineno: 88 main debug lineno: 25 print_return_trap debug lineno: 26 print_return_trap -return lineno: 84 main +return lineno: 88 main debug lineno: 27 print_return_trap -debug lineno: 87 main -debug lineno: 90 main +debug lineno: 91 main +debug lineno: 94 main LINENO 31 LINENO 32 BASH_SOURCE[0] ./dbg-support.tests FUNCNAME[0] fn1 -90 ./dbg-support.tests -90 main ./dbg-support.tests +94 ./dbg-support.tests +94 main ./dbg-support.tests ./dbg-support.tests: line 38: caller: foo: invalid number caller: usage: caller [expr] -debug lineno: 91 main +debug lineno: 95 main fn2 here. Calling fn1... LINENO 31 LINENO 32 @@ -200,11 +203,11 @@ BASH_SOURCE[0] ./dbg-support.tests FUNCNAME[0] fn1 43 ./dbg-support.tests 43 fn2 ./dbg-support.tests -91 main ./dbg-support.tests +95 main ./dbg-support.tests ./dbg-support.tests: line 38: caller: foo: invalid number caller: usage: caller [expr] -debug lineno: 92 main +debug lineno: 96 main LINENO 47 BASH_SOURCE[0] ./dbg-support.tests fn3 called from file `./dbg-support.tests' at line 0 @@ -214,13 +217,13 @@ SOURCED BASH_SOURCE[0] ./dbg-support.sub SOURCED FN LINENO 18 FUNCNAME[0]: sourced_fn called from ./dbg-support.sub at line 33 FUNCNAME[1]: source called from ./dbg-support.tests at line 59 -FUNCNAME[2]: fn3 called from ./dbg-support.tests at line 92 +FUNCNAME[2]: fn3 called from ./dbg-support.tests at line 96 FUNCNAME[3]: main called from ./dbg-support.tests at line 0 -debug lineno: 93 main +debug lineno: 97 main fn4 here. Calling fn3... LINENO 47 BASH_SOURCE[0] ./dbg-support.tests -fn3 called from file `./dbg-support.tests' at line 93 +fn3 called from file `./dbg-support.tests' at line 97 fn4 called from file `./dbg-support.tests' at line 0 main called from file `./dbg-support.tests' at line 0 SOURCED LINENO 31 @@ -229,18 +232,18 @@ SOURCED FN LINENO 18 FUNCNAME[0]: sourced_fn called from ./dbg-support.sub at line 33 FUNCNAME[1]: source called from ./dbg-support.tests at line 59 FUNCNAME[2]: fn3 called from ./dbg-support.tests at line 64 -FUNCNAME[3]: fn4 called from ./dbg-support.tests at line 93 +FUNCNAME[3]: fn4 called from ./dbg-support.tests at line 97 FUNCNAME[4]: main called from ./dbg-support.tests at line 0 -debug lineno: 94 main +debug lineno: 98 main SOURCED LINENO 31 SOURCED BASH_SOURCE[0] ./dbg-support.sub SOURCED FN LINENO 18 FUNCNAME[0]: sourced_fn called from ./dbg-support.sub at line 33 -FUNCNAME[1]: source called from ./dbg-support.tests at line 94 +FUNCNAME[1]: source called from ./dbg-support.tests at line 98 FUNCNAME[2]: main called from ./dbg-support.tests at line 0 -return lineno: 94 main -debug lineno: 97 main -debug lineno: 100 main +return lineno: 98 main +debug lineno: 101 main +debug lineno: 104 main debug lineno: 31 source SOURCED LINENO 31 debug lineno: 32 source @@ -263,7 +266,7 @@ debug lineno: 23 sourced_fn debug lineno: 24 sourced_fn debug lineno: 25 sourced_fn debug lineno: 26 sourced_fn -FUNCNAME[1]: source called from ./dbg-support.tests at line 100 +FUNCNAME[1]: source called from ./dbg-support.tests at line 104 debug lineno: 23 sourced_fn debug lineno: 23 sourced_fn debug lineno: 24 sourced_fn @@ -278,39 +281,39 @@ debug lineno: 25 print_return_trap debug lineno: 26 print_return_trap return lineno: 16 sourced_fn debug lineno: 27 print_return_trap -debug lineno: 100 main +debug lineno: 104 main debug lineno: 25 print_return_trap debug lineno: 26 print_return_trap -return lineno: 100 main +return lineno: 104 main debug lineno: 27 print_return_trap -debug lineno: 101 main -debug lineno: 104 main -debug lineno: 104 main debug lineno: 105 main debug lineno: 108 main -debug lineno: 104 main -debug lineno: 104 main -debug lineno: 105 main debug lineno: 108 main -debug lineno: 104 main -debug lineno: 104 main -debug lineno: 105 main -debug lineno: 106 main +debug lineno: 109 main +debug lineno: 112 main +debug lineno: 108 main +debug lineno: 108 main +debug lineno: 109 main +debug lineno: 112 main +debug lineno: 108 main +debug lineno: 108 main +debug lineno: 109 main +debug lineno: 110 main Hit 2 +debug lineno: 112 main debug lineno: 108 main -debug lineno: 104 main -debug lineno: 104 main -debug lineno: 114 main -SOURCED FN LINENO 18 FUNCNAME[0]: sourced_fn called from ./dbg-support.tests at line 114 FUNCNAME[1]: main called from ./dbg-support.tests at line 0 -debug lineno: 115 main -SOURCED FN LINENO 18 FUNCNAME[0]: sourced_fn called from ./dbg-support.tests at line 115 FUNCNAME[1]: main called from ./dbg-support.tests at line 0 -debug lineno: 116 main -debug lineno: 117 main +debug lineno: 108 main +debug lineno: 118 main +SOURCED FN LINENO 18 FUNCNAME[0]: sourced_fn called from ./dbg-support.tests at line 118 FUNCNAME[1]: main called from ./dbg-support.tests at line 0 +debug lineno: 119 main +SOURCED FN LINENO 18 FUNCNAME[0]: sourced_fn called from ./dbg-support.tests at line 119 FUNCNAME[1]: main called from ./dbg-support.tests at line 0 +debug lineno: 120 main +debug lineno: 121 main SOURCED FN LINENO 18 -FUNCNAME[0]: sourced_fn called from ./dbg-support.tests at line 117 +FUNCNAME[0]: sourced_fn called from ./dbg-support.tests at line 121 FUNCNAME[1]: main called from ./dbg-support.tests at line 0 -debug lineno: 121 main -debug lineno: 122 main +debug lineno: 125 main +debug lineno: 126 main debug lineno: 16 sourced_fn debug lineno: 17 sourced_fn debug lineno: 18 sourced_fn @@ -322,7 +325,7 @@ debug lineno: 23 sourced_fn debug lineno: 24 sourced_fn debug lineno: 25 sourced_fn debug lineno: 26 sourced_fn -FUNCNAME[0]: sourced_fn called from ./dbg-support.tests at line 122 +FUNCNAME[0]: sourced_fn called from ./dbg-support.tests at line 126 debug lineno: 23 sourced_fn debug lineno: 23 sourced_fn debug lineno: 24 sourced_fn @@ -337,21 +340,21 @@ debug lineno: 25 print_return_trap debug lineno: 26 print_return_trap return lineno: 16 sourced_fn debug lineno: 27 print_return_trap -debug lineno: 125 main -debug lineno: 130 main +debug lineno: 129 main debug lineno: 134 main +debug lineno: 138 main got it -debug lineno: 142 main -debug lineno: 143 main -debug lineno: 144 main -debug lineno: 143 main -debug lineno: 144 main -debug lineno: 142 main -debug lineno: 143 main -debug lineno: 144 main -debug lineno: 143 main -debug lineno: 144 main +debug lineno: 146 main +debug lineno: 147 main +debug lineno: 148 main +debug lineno: 147 main +debug lineno: 148 main +debug lineno: 146 main +debug lineno: 147 main +debug lineno: 148 main +debug lineno: 147 main debug lineno: 148 main +debug lineno: 152 main main: calling f1 f1: calling f2 f2: calling f3 diff --git a/tests/dbg-support.tests b/tests/dbg-support.tests index b4a58e4b6..d07d928c9 100644 --- a/tests/dbg-support.tests +++ b/tests/dbg-support.tests @@ -67,6 +67,10 @@ fn4() { # # Test of support for debugging facilities in bash # + +caller +caller -z + # Test debugger set option functrace - set on. Not in vanilla Bash 2.05 # set -o functrace diff --git a/tests/dollar-at-star b/tests/dollar-at-star index 721eea124..e7b24eed4 100644 --- a/tests/dollar-at-star +++ b/tests/dollar-at-star @@ -329,4 +329,7 @@ ${THIS_SH} ./dollar-star9.sub # null strings as the positional parameters ${THIS_SH} ./dollar-star10.sub +# tests for expansions of $* when IFS=$'\1' +${THIS_SH} ./dollar-star11.sub + exit 0 diff --git a/tests/dollar.right b/tests/dollar.right index 10c5cca13..afb744840 100644 --- a/tests/dollar.right +++ b/tests/dollar.right @@ -742,3 +742,43 @@ argv[2] = <2> var=1 2 argv[1] = <1 2> argv[1] = <1 2> +argv[1] = <^Aaa^Abb^Acc^A--^Add^A> +argv[1] = <^A--^A> +ok 1 +ok 2 +ok 3 +ok 4 +ok 5 +ok 6 +ok 7 +ok 8 +ok 9 +ok 10 +ok 11 +ok 12 +ok 13 +ok 14 +ok 15 +ok 16 +ok 17 +ok 18 +ok 19 +ok 20 +ok 21 +ok 22 +ok 23 +ok 24 +ok 25 +ok 26 +ok 27 +ok 28 +ok 29 +ok 30 +ok 31 +ok 32 +ok 33 +ok 34 +ok 35 +ok 36 +ok 37 +ok 38 diff --git a/tests/dynvar.right b/tests/dynvar.right index e1344c60d..fe7955259 100644 --- a/tests/dynvar.right +++ b/tests/dynvar.right @@ -5,3 +5,11 @@ SECONDS ok EPOCHSECONDS ok EPOCHREALTIME ok echo $BASH_COMMAND +110 +111 +112 +113 +114 +./dynvar.tests: line 115: ((: LINENO / 0 : division by 0 (error token is "0 ") +0 +0 diff --git a/tests/dynvar.tests b/tests/dynvar.tests index ddf69ed1c..690f1cc76 100644 --- a/tests/dynvar.tests +++ b/tests/dynvar.tests @@ -47,6 +47,11 @@ after=$SECONDS if (( $after > $before )); then echo SECONDS ok; fi unset before after +# do the best we can to test assignment to SECONDS +SECONDS=2 +sleep 1 +[[ $SECONDS -ge 10 ]] && echo 'SECONDS: bad value assignment' + # EPOCHSECONDS # not exact, but should work @@ -99,4 +104,23 @@ ${THIS_SH} -c 'echo $BASH_COMMAND' # FUNCNAME tested in func.tests # RANDOM tested in varenv.sh -# LINENO tested in dbg-support +# LINENO tested in dbg-support, misc additional tests here +arith_lineno() +{ + echo $LINENO + for f in 1 ; do echo $LINENO; done + for (( f=1 ; f < 2; f++ )); do echo $LINENO; done + echo $(( $LINENO )) + (( 1 == 1 )) && echo $LINENO + (( LINENO / 0 )) +} +arith_lineno + +# assignments to noassign variables are ignored +FUNCNAME=42 +echo $? $FUNCNAME + +GROUPS[0]=-1 +echo $? + +[[ ${GROUPS[0]} != -1 ]] || echo GROUPS noassign error diff --git a/tests/errors.right b/tests/errors.right index 0bd88efb9..9b760de3c 100644 --- a/tests/errors.right +++ b/tests/errors.right @@ -1,110 +1,153 @@ -./errors.tests: line 30: alias: -x: invalid option +unalias: usage: unalias [-a] name [name ...] +./errors.tests: line 31: alias: -x: invalid option alias: usage: alias [-p] [name[=value] ... ] -./errors.tests: line 31: unalias: -x: invalid option +./errors.tests: line 32: unalias: -x: invalid option unalias: usage: unalias [-a] name [name ...] -./errors.tests: line 32: alias: hoowah: not found -./errors.tests: line 33: unalias: hoowah: not found -./errors.tests: line 36: `1': not a valid identifier +./errors.tests: line 33: alias: hoowah: not found +./errors.tests: line 34: unalias: hoowah: not found +./errors.tests: line 37: `1': not a valid identifier +./errors.tests: line 41: `f\1': not a valid identifier +./errors.tests: line 45: `invalid-name': not a valid identifier +./errors.tests: line 47: `f\1': not a valid identifier +./errors.tests: line 50: `1': not a valid identifier +./errors.tests: line 51: `f\1': not a valid identifier +./errors.tests: line 52: `invalid-name': not a valid identifier +./errors.tests: line 54: `1': not a valid identifier +./errors.tests: line 55: `f\1': not a valid identifier +./errors.tests: line 59: `$1': not a valid identifier declare -fr func -./errors.tests: line 49: func: readonly function -./errors.tests: line 52: unset: -x: invalid option +./errors.tests: line 76: func: readonly function +./errors.tests: line 79: unset: -x: invalid option unset: usage: unset [-f] [-v] [-n] [name ...] -./errors.tests: line 55: unset: func: cannot unset: readonly function -./errors.tests: line 58: declare: func: readonly function -./errors.tests: line 62: declare: -a: invalid option -./errors.tests: line 63: declare: -i: invalid option -./errors.tests: line 67: unset: XPATH: cannot unset: readonly variable -./errors.tests: line 73: unset: cannot simultaneously unset a function and a variable -./errors.tests: line 76: declare: -z: invalid option +./errors.tests: line 82: unset: func: cannot unset: readonly function +./errors.tests: line 85: declare: func: readonly function +./errors.tests: line 89: declare: -a: invalid option +./errors.tests: line 90: declare: -i: invalid option +./errors.tests: line 94: unset: XPATH: cannot unset: readonly variable +./errors.tests: line 100: unset: cannot simultaneously unset a function and a variable +./errors.tests: line 103: declare: -z: invalid option declare: usage: declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...] -./errors.tests: line 78: declare: `-z': not a valid identifier -./errors.tests: line 79: declare: `/bin/sh': not a valid identifier -./errors.tests: line 83: declare: cannot use `-f' to make functions -./errors.tests: line 86: exec: -i: invalid option +./errors.tests: line 105: declare: `-z': not a valid identifier +./errors.tests: line 106: declare: `/bin/sh': not a valid identifier +./errors.tests: line 110: declare: cannot use `-f' to make functions +./errors.tests: line 113: exec: -i: invalid option exec: usage: exec [-cl] [-a name] [command [argument ...]] [redirection ...] -./errors.tests: line 90: export: XPATH: not a function -./errors.tests: line 93: break: only meaningful in a `for', `while', or `until' loop -./errors.tests: line 94: continue: only meaningful in a `for', `while', or `until' loop -./errors.tests: line 97: shift: label: numeric argument required -./errors.tests: line 102: shift: too many arguments -./errors.tests: line 108: let: expression expected -./errors.tests: line 111: local: can only be used in a function -./errors.tests: line 114: logout: not login shell: use `exit' -./errors.tests: line 117: hash: notthere: not found -./errors.tests: line 120: hash: -v: invalid option +./errors.tests: line 120: export: XPATH: not a function +./errors.tests: line 123: break: only meaningful in a `for', `while', or `until' loop +./errors.tests: line 124: continue: only meaningful in a `for', `while', or `until' loop +./errors.tests: line 127: shift: label: numeric argument required +./errors.tests: line 132: shift: too many arguments +./errors.tests: line 138: let: expression expected +./errors.tests: line 141: local: can only be used in a function +./errors.tests: line 144: logout: not login shell: use `exit' +./errors.tests: line 147: hash: notthere: not found +./errors.tests: line 150: hash: -v: invalid option hash: usage: hash [-lr] [-p pathname] [-dt] [name ...] -./errors.tests: line 124: hash: hashing disabled -./errors.tests: line 127: export: `AA[4]': not a valid identifier -./errors.tests: line 128: readonly: `AA[4]': not a valid identifier -./errors.tests: line 131: unset: [-2]: bad array subscript -./errors.tests: line 135: AA: readonly variable -./errors.tests: line 139: AA: readonly variable -./errors.tests: line 147: shift: 5: shift count out of range -./errors.tests: line 148: shift: -2: shift count out of range -./errors.tests: line 151: shopt: no_such_option: invalid shell option name -./errors.tests: line 152: shopt: no_such_option: invalid shell option name -./errors.tests: line 155: umask: 09: octal number out of range -./errors.tests: line 156: umask: `:': invalid symbolic mode character -./errors.tests: line 157: umask: `:': invalid symbolic mode operator -./errors.tests: line 160: umask: -i: invalid option +./errors.tests: line 153: hash: -d: option requires an argument +./errors.tests: line 157: hash: hashing disabled +./errors.tests: line 160: unset: [-2]: bad array subscript +./errors.tests: line 164: AA: readonly variable +./errors.tests: line 168: AA: readonly variable +./errors.tests: line 176: shift: 5: shift count out of range +./errors.tests: line 177: shift: -2: shift count out of range +./errors.tests: line 178: shift: 5: shift count out of range +./errors.tests: line 179: shift: -2: shift count out of range +./errors.tests: line 182: shopt: no_such_option: invalid shell option name +./errors.tests: line 183: shopt: no_such_option: invalid shell option name +./errors.tests: line 184: shopt: no_such_option: invalid option name +./errors.tests: line 187: umask: 09: octal number out of range +./errors.tests: line 188: umask: `:': invalid symbolic mode character +./errors.tests: line 189: umask: `:': invalid symbolic mode operator +./errors.tests: line 192: umask: -i: invalid option umask: usage: umask [-p] [-S] [mode] -./errors.tests: line 164: umask: `u': invalid symbolic mode character -./errors.tests: line 173: VAR: readonly variable -./errors.tests: line 176: declare: VAR: readonly variable -./errors.tests: line 177: declare: VAR: readonly variable -./errors.tests: line 179: declare: unset: not found -./errors.tests: line 182: VAR: readonly variable +./errors.tests: line 196: umask: `p': invalid symbolic mode character +./errors.tests: line 205: VAR: readonly variable +./errors.tests: line 208: declare: VAR: readonly variable +./errors.tests: line 209: declare: VAR: readonly variable +./errors.tests: line 211: declare: unset: not found +./errors.tests: line 214: VAR: readonly variable comsub: -c: line 1: syntax error near unexpected token `)' comsub: -c: line 1: `: $( for z in 1 2 3; do )' comsub: -c: line 1: syntax error near unexpected token `done' comsub: -c: line 1: `: $( for z in 1 2 3; done )' -./errors.tests: line 189: cd: HOME not set -./errors.tests: line 190: cd: /tmp/xyz.bash: No such file or directory -./errors.tests: line 192: cd: OLDPWD not set -./errors.tests: line 193: cd: /bin/sh: Not a directory -./errors.tests: line 195: cd: /tmp/cd-notthere: No such file or directory -./errors.tests: line 198: .: filename argument required +./errors.tests: line 221: cd: HOME not set +./errors.tests: line 222: cd: /tmp/xyz.bash: No such file or directory +./errors.tests: line 224: cd: OLDPWD not set +./errors.tests: line 225: cd: /bin/sh: Not a directory +./errors.tests: line 227: cd: /tmp/cd-notthere: No such file or directory +./errors.tests: line 229: cd: too many arguments +bash: line 1: PWD: readonly variable +1 +bash: line 1: OLDPWD: readonly variable +1 +./errors.tests: line 236: .: filename argument required .: usage: . filename [arguments] -./errors.tests: line 199: source: filename argument required +./errors.tests: line 237: source: filename argument required source: usage: source filename [arguments] -./errors.tests: line 202: .: -i: invalid option +./errors.tests: line 240: .: -i: invalid option .: usage: . filename [arguments] -./errors.tests: line 205: set: -q: invalid option +./errors.tests: line 243: set: -q: invalid option set: usage: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...] -./errors.tests: line 208: enable: sh: not a shell builtin -./errors.tests: line 208: enable: bash: not a shell builtin -./errors.tests: line 211: shopt: cannot set and unset shell options simultaneously -./errors.tests: line 214: read: var: invalid timeout specification -./errors.tests: line 217: read: `/bin/sh': not a valid identifier -./errors.tests: line 220: VAR: readonly variable -./errors.tests: line 223: readonly: -x: invalid option +./errors.tests: line 246: enable: sh: not a shell builtin +./errors.tests: line 246: enable: bash: not a shell builtin +./errors.tests: line 249: shopt: cannot set and unset shell options simultaneously +./errors.tests: line 252: read: -x: invalid option +read: usage: read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] +./errors.tests: line 255: read: var: invalid timeout specification +./errors.tests: line 258: read: `/bin/sh': not a valid identifier +./errors.tests: line 259: read: `/bin/sh': not a valid identifier +./errors.tests: line 260: read: `invalid-name': not a valid identifier +./errors.tests: line 263: VAR: readonly variable +./errors.tests: line 266: read: XX: invalid file descriptor specification +./errors.tests: line 267: read: 42: invalid file descriptor: Bad file descriptor +./errors.tests: line 270: mapfile: XX: invalid file descriptor specification +./errors.tests: line 271: mapfile: 42: invalid file descriptor: Bad file descriptor +./errors.tests: line 275: mapfile: empty array variable name +./errors.tests: line 276: mapfile: `invalid-var': not a valid identifier +./errors.tests: line 279: readonly: -x: invalid option readonly: usage: readonly [-aAf] [name[=value] ...] or readonly -p -./errors.tests: line 226: eval: -i: invalid option +./errors.tests: line 282: eval: -i: invalid option eval: usage: eval [arg ...] -./errors.tests: line 227: command: -i: invalid option +./errors.tests: line 283: command: -i: invalid option command: usage: command [-pVv] command [arg ...] -./errors.tests: line 230: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0") -./errors.tests: line 231: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0") -./errors.tests: line 234: trap: NOSIG: invalid signal specification -./errors.tests: line 237: trap: -s: invalid option -trap: usage: trap [-lp] [[arg] signal_spec ...] -./errors.tests: line 243: return: can only `return' from a function or sourced script -./errors.tests: line 247: break: 0: loop count out of range -./errors.tests: line 251: continue: 0: loop count out of range -./errors.tests: line 256: builtin: bash: not a shell builtin -./errors.tests: line 260: bg: no job control -./errors.tests: line 261: fg: no job control -./errors.tests: line 264: kill: -s: option requires an argument -./errors.tests: line 266: kill: S: invalid signal specification -./errors.tests: line 268: kill: `': not a pid or valid job spec +./errors.tests: line 286: /bin/sh + 0: arithmetic syntax error: operand expected (error token is "/bin/sh + 0") +./errors.tests: line 287: /bin/sh + 0: arithmetic syntax error: operand expected (error token is "/bin/sh + 0") +./errors.tests: line 290: trap: NOSIG: invalid signal specification +./errors.tests: line 293: trap: -s: invalid option +trap: usage: trap [-Plp] [[action] signal_spec ...] +./errors.tests: line 299: return: can only `return' from a function or sourced script +./errors.tests: line 303: break: 0: loop count out of range +./errors.tests: line 307: continue: 0: loop count out of range +./errors.tests: line 312: builtin: -x: invalid option +builtin: usage: builtin [shell-builtin [arg ...]] +./errors.tests: line 315: builtin: bash: not a shell builtin +./errors.tests: line 319: bg: no job control +./errors.tests: line 320: fg: no job control +kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] +./errors.tests: line 324: kill: -s: option requires an argument +./errors.tests: line 326: kill: S: invalid signal specification +./errors.tests: line 328: kill: `': not a pid or valid job spec kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] -./errors.tests: line 273: set: trackall: invalid option name -./errors.tests: line 277: xx: readonly variable +./errors.tests: line 332: kill: SIGBAD: invalid signal specification +./errors.tests: line 334: kill: BAD: invalid signal specification +./errors.tests: line 336: kill: @12: arguments must be process or job IDs +./errors.tests: line 339: unset: BASH_LINENO: cannot unset +./errors.tests: line 339: unset: BASH_SOURCE: cannot unset +./errors.tests: line 342: set: trackall: invalid option name +./errors.tests: line 343: set: -q: invalid option +set: usage: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...] +./errors.tests: line 344: set: -i: invalid option +set: usage: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...] +./errors.tests: line 348: xx: readonly variable 1 ./errors1.sub: line 14: .: -i: invalid option .: usage: . filename [arguments] ./errors1.sub: line 22: shift: -4: shift count out of range +./errors1.sub: line 23: shift: -4: shift count out of range ./errors1.sub: line 27: break: -1: loop count out of range +./errors1.sub: line 28: continue: -1: loop count out of range +./errors1.sub: line 29: break: -5: loop count out of range +./errors1.sub: line 30: continue: -5: loop count out of range after f ./errors2.sub: line 3: ${$NO_SUCH_VAR}: bad substitution 1 @@ -115,7 +158,18 @@ TEST 2 ./errors4.sub: line 20: var: readonly variable after readonly assignment -./errors4.sub: line 26: break: x: numeric argument required +./errors4.sub: line 27: var: readonly variable +./errors4.sub: line 31: f: readonly variable +./errors4.sub: line 34: var: readonly variable +1) 1 +2) 2 +3) 3 +#? ./errors4.sub: line 37: var: readonly variable +1) 1 +2) 2 +3) 3 +#? ./errors4.sub: line 40: var: readonly variable +./errors4.sub: line 45: break: x: numeric argument required 1 2 ./errors4.sub: line 20: var: readonly variable @@ -177,6 +231,7 @@ after non-special builtin: 0 after special builtin: 0 ./errors7.sub: line 27: x: readonly variable ./errors7.sub: line 29: x: readonly variable +./errors7.sub: line 32: v: readonly variable ./errors7.sub: line 21: x: readonly variable after no such command: 1 ./errors7.sub: line 23: x: readonly variable @@ -184,6 +239,7 @@ after non-special builtin: 1 ./errors7.sub: line 25: x: readonly variable ./errors7.sub: line 27: x: readonly variable ./errors7.sub: line 29: x: readonly variable +./errors7.sub: line 32: v: readonly variable ./errors8.sub: eval: line 7: syntax error: unexpected end of file ok 1 ./errors8.sub: line 8: v: readonly variable @@ -196,13 +252,90 @@ ok 4 ok 5 ./errors8.sub: line 14: set: notanoption: invalid option name ok 6 +./errors8.sub: line 16: /notthere: No such file or directory +ok 7 +./errors8.sub: line 17: .: -x: invalid option +.: usage: . filename [arguments] +ok 8 DEBUG -./errors9.sub: line 6: [[: ++: syntax error: operand expected (error token is "+") +./errors9.sub: line 6: [[: ++: arithmetic syntax error: operand expected (error token is "+") DEBUG -./errors9.sub: line 8: ((: -- : syntax error: operand expected (error token is "- ") +./errors9.sub: line 8: ((: -- : arithmetic syntax error: operand expected (error token is "- ") DEBUG -./errors9.sub: line 10: ((: -- : syntax error: operand expected (error token is "- ") +./errors9.sub: line 10: ((: -- : arithmetic syntax error: operand expected (error token is "- ") +invalid numeric argument +bash: line 1: exit: abcde: numeric argument required +after exit: 2 +bash: line 1: break: abcde: numeric argument required +bash: line 1: continue: abcde: numeric argument required +bash: line 1: shift: abcde: numeric argument required +after shift: 2 +bash: line 1: return: abcde: numeric argument required +after return: 2 +bash: line 1: exit: abcde: numeric argument required +bash: line 1: break: abcde: numeric argument required +bash: line 1: continue: abcde: numeric argument required +bash: line 1: shift: abcde: numeric argument required +bash: line 1: return: abcde: numeric argument required +./errors10.sub: line 38: history: abcde: numeric argument required +after history: 2 +./errors10.sub: line 40: history: too many arguments +after history: 2 +too many arguments +errors: line 3: exit: too many arguments +after exit: 2 +errors: line 3: return: too many arguments +after return: 2 +errors: line 3: shift: too many arguments +after shift: 2 +errors: line 3: break: too many arguments +after break: 2 +errors: line 3: continue: too many arguments +after continue: 2 +errors: line 3: exit: too many arguments +after exit: 2 +errors: line 3: return: too many arguments +after return: 2 +errors: line 3: shift: too many arguments +after shift: 2 +errors: line 3: break: too many arguments +after break: 2 +errors: line 3: continue: too many arguments +after continue: 2 +bash: line 1: readonly: `non-identifier': not a valid identifier +after: 1 +bash: line 1: export: `non-identifier': not a valid identifier +after: 1 +bash: line 1: readonly: `non-identifier': not a valid identifier +bash: line 1: readonly: `invalid+ident': not a valid identifier +after: 1 +bash: line 1: export: `non-identifier': not a valid identifier +bash: line 1: export: `invalid+ident': not a valid identifier +after: 1 +sh: line 1: readonly: `non-identifier': not a valid identifier +sh: line 1: export: `non-identifier': not a valid identifier +sh: line 1: readonly: `non-identifier': not a valid identifier +sh: line 1: export: `non-identifier': not a valid identifier +bash: line 1: readonly: `non-identifier': not a valid identifier +command: 1 +bash: line 1: export: `non-identifier': not a valid identifier +command: 1 +sh: line 1: readonly: `non-identifier': not a valid identifier +command: 1 +sh: line 1: export: `non-identifier': not a valid identifier +command: 1 +bash: line 1: export: `AA[4]': not a valid identifier +array: 1 +bash: line 1: readonly: `AA[4]': not a valid identifier +array: 1 +sh: line 1: export: `AA[4]': not a valid identifier +sh: line 1: readonly: `AA[4]': not a valid identifier bash: line 1: return: can only `return' from a function or sourced script after return bash: line 1: return: can only `return' from a function or sourced script -./errors.tests: line 305: `!!': not a valid identifier +sh: line 1: unset: a: cannot unset: readonly variable +sh: line 1: unset: `a-b': not a valid identifier +sh: line 1: /nosuchfile: No such file or directory +sh: line 1: trap: SIGNOSIG: invalid signal specification +after trap +./errors.tests: line 393: `!!': not a valid identifier diff --git a/tests/errors.tests b/tests/errors.tests index 0880bb556..c8a3b7e5b 100644 --- a/tests/errors.tests +++ b/tests/errors.tests @@ -24,6 +24,7 @@ set +e set +o posix # various alias/unalias errors +unalias # at some point, this may mean to `export' an alias, like ksh, but # for now it is an error @@ -33,7 +34,33 @@ alias hoowah unalias hoowah # the iteration variable must be a valid identifier -for 1 in a b c; do echo $1; done +for 1 in a b c +do + echo $1 +done +for f\1 in a b c ; do echo $f ; done + +# in posix mode, it's a fatal error +(set -o posix +for invalid-name in a b c; do echo $1; done; echo after posix for) +(set -o posix +for f\1 in a b c ; do echo $f ; done; echo after posix for 2) + +# same with select +select 1 in a b c; do echo $REPLY; done +select f\1 in a b c ; do echo $REPLY ; done +select invalid-name in a b c; do echo $REPLY; done + +(set -o posix ; select 1 in a b c; do echo $REPLY; done; echo after posix select) +(set -o posix ; select f\1 in a b c ; do echo $REPLY ; done ; echo after posix select 2) + +# even in functions +bad-select() +{ + select $1 in a b c ; do echo $REPLY ; done +} +bad-select 'a b' +unset -f bad-select # try to rebind a read-only function func() @@ -85,6 +112,9 @@ declare -f func='() { echo "this is func"; }' # bad option to exec -- this should not exit the script exec -i /bin/sh +# trying to exec non-executable file is a fatal error +( exec ./errors1.sub 2>/dev/null ; echo after failed exec ) + # try to export -f something that is not a function -- this should be # an error, not create an `invisible function' export -f XPATH @@ -119,14 +149,13 @@ hash notthere # bad option to hash, although it may mean `verbose' at some future point hash -v +# hash -d requires an argument +hash -d + # turn off hashing, then try to hash something set +o hashall hash -p ${THIS_SH} ${THIS_SH##*/} -# bad identifiers to declare/readonly/export -export AA[4] -readonly AA[4] - declare -a AA unset AA[-2] @@ -146,10 +175,13 @@ AA=(one two three) shopt -s shift_verbose shift $(( $# + 5 )) shift -2 +shift -- $(( $# + 5 )) +shift -- -2 # bad shell options shopt -s no_such_option shopt no_such_option +shopt -s -o no_such_option # non-octal digits for umask and other errors umask 09 @@ -161,7 +193,7 @@ umask -i # bad assignments shouldn't change the umask mask=$(umask) -umask g=u +umask g=p mask2=$(umask) if [ "$mask" != "$mask2" ]; then echo "umask errors change process umask" @@ -193,6 +225,12 @@ cd - cd /bin/sh # error - not a directory OLDPWD=/tmp/cd-notthere cd - +# too many arguments +cd one two three +# cd doesn't like it if PWD is readonly +${THIS_SH} -c 'readonly PWD ; cd / ; echo $?' bash +# or if OLDPWD is readonly +${THIS_SH} -c 'readonly OLDPWD ; cd / ; echo $?' bash # various `source/.' errors . @@ -210,15 +248,33 @@ enable sh bash # try to set and unset shell options simultaneously shopt -s -u checkhash +# error +read -x + # this is an error -- bad timeout spec read -t var < /dev/null # try to read into an invalid identifier read /bin/sh < /dev/null +read A /bin/sh < /dev/null +read -a invalid-name < /dev/null # try to read into a readonly variable read VAR < /dev/null +# invalid file descriptor +read -u XX < /dev/null +read -u 42 < /dev/null + +# same with mapfile +mapfile -u XX A < /dev/null +mapfile -u 42 A < /dev/null +unset -v A + +# invalid identifier arguments to mapfile +mapfile '' </dev/null +mapfile invalid-var < /dev/null + # bad option to readonly/export readonly -x foo @@ -252,6 +308,9 @@ for z in 1 2 3; do echo $x done +# invalid option +builtin -x + # builtin with non-builtin builtin bash @@ -261,6 +320,7 @@ bg fg # argument required +kill kill -s # bad argument kill -S @@ -268,9 +328,20 @@ kill -S kill -INT '' # argument required kill -INT +# bad signal specification +kill -l SIGBAD +# bad signal specification +kill -l BAD +# bad process specification +kill -HUP @12 + +# cannot unset non-unsettable variables +unset -v BASH_LINENO BASH_SOURCE # bad shell option names set -o trackall # bash is not ksh +set -q # this is an error +set -i # this is not allowed # problem with versions through bash-4.2 readonly xx=5 @@ -294,9 +365,26 @@ ${THIS_SH} -o posix ./errors7.sub ${THIS_SH} ./errors8.sub ${THIS_SH} ./errors9.sub +# invalid numeric arguments and too many arguments +${THIS_SH} ./errors10.sub + +# invalid identifiers to readonly/export +${THIS_SH} ./errors11.sub + ${THIS_SH} -c 'return ; echo after return' bash ${THIS_SH} -o posix -c 'return ; echo after return' bash +# various posix-mode special builtin fatal (or not) errors + +# posix says unsetting readonly variables is a fatal error +${THIS_SH} -o posix -c 'readonly a=a ; unset -v a; echo after unset 1' sh +# the same with non-identifiers +${THIS_SH} -o posix -c 'unset -v a-b; echo after unset 2' sh +# and sourcing a non-existent file is fatal too +${THIS_SH} -o posix -c '. /nosuchfile ; echo after source' sh +# but trap specifying a bad signal nunber is non-fatal +${THIS_SH} -o posix -c 'trap "echo bad" SIGNOSIG; echo after trap' sh + # this must be last! # in posix mode, a function name must be a valid identifier # this can't go in posix2.tests, since it causes the shell to exit diff --git a/tests/errors1.sub b/tests/errors1.sub index 52a9e3422..840d24e45 100644 --- a/tests/errors1.sub +++ b/tests/errors1.sub @@ -20,13 +20,14 @@ f() set -- a b c shift -4 +shift -- -4 f -for f in 1 2 3; do - break -1 -done - +for f in 1 2 3; do break -1; done +for f in 1 2 3; do continue -1; done +for f in 1 2 3; do break -- -5; done +for f in 1 2 3; do continue -- -5; done f() { diff --git a/tests/errors4.sub b/tests/errors4.sub index 6b4050245..5ee6d583d 100644 --- a/tests/errors4.sub +++ b/tests/errors4.sub @@ -23,6 +23,22 @@ for num in 1 2 3 4 5; do done echo after readonly assignment +# can't have the variable in a for command be readonly +for var in 1 2 3 4 5; do echo $var; done + +# but in posix mode these are fatal errors +(set -o posix +for f in 1 2 3 4; do readonly f; done ; echo after for readonly assignment) + +(set -o posix +for var in 1 2 3 4; do echo $var; done; echo after posix for readonly variable) + +# same with select +select var in 1 2 3; do echo $REPLY; done <<<1 + +(set -o posix +select var in 1 2 3; do echo $REPLY; done <<<1 ; echo after posix select readonly variable) + # non-numeric arguments to break are fatal errors for all non-interactive shells for f in 1 2 3 4 5 do diff --git a/tests/errors7.sub b/tests/errors7.sub index 544e3e4c1..a564ed5c3 100644 --- a/tests/errors7.sub +++ b/tests/errors7.sub @@ -28,3 +28,6 @@ echo after special builtin: $? ) echo after assignment error: $? ) ( x=8 echo after assignment statement error: $? ) + +( readonly v; : ${v:=val} + echo variable assignment error ) diff --git a/tests/errors8.sub b/tests/errors8.sub index b65e1ab69..699a2cac0 100644 --- a/tests/errors8.sub +++ b/tests/errors8.sub @@ -12,3 +12,6 @@ command shift 12 || echo ok 4 command return 16 || echo ok 5 command set -o notanoption || echo ok 6 + +command . /notthere || echo ok 7 +command . -x true || echo ok 8 diff --git a/tests/exec.right b/tests/exec.right index ef02fbb41..dd1913305 100644 --- a/tests/exec.right +++ b/tests/exec.right @@ -5,17 +5,22 @@ after exec1.sub with args: 0 after exec1.sub without args: 0 after exec1.sub: one two three -./execscript: line 21: notthere: command not found +./execscript: line 37: notthere: command not found 127 +we would do something here with notthere /tmp/bash: notthere: No such file or directory 127 /bin/sh: /bin/sh: cannot execute binary file 126 -./execscript: line 40: /: Is a directory +./execscript: line 64: /: Is a directory 126 /: /: Is a directory 126 -./execscript: line 47: .: /: is a directory +bash: line 1: exec: .: cannot execute: Is a directory +posix-bash: line 1: exec: .: cannot execute: Is a directory +bash: line 1: exec: .: cannot execute: Is a directory +posix-bash: line 1: exec: .: cannot execute: Is a directory +./execscript: line 79: .: /: is a directory 1 126 0 @@ -31,11 +36,17 @@ trap -- '' SIGTERM trap -- 'echo USR1' SIGUSR1 USR1 EXIT -./execscript: line 71: notthere: No such file or directory +./execscript: line 103: notthere: command not found 127 -./execscript: line 74: notthere: No such file or directory +./execscript: line 105: notthere: command not found 127 -./execscript: line 77: notthere: command not found +./execscript: line 107: notthere: command not found +127 +./execscript: line 113: notthere: command not found +127 +./execscript: line 115: notthere: command not found +127 +./execscript: line 117: notthere: command not found 127 this is sh this is sh @@ -59,6 +70,13 @@ this is ohio-state 1 0 1 +1 hi 1 +2 hi 0 +! +! +0 +1 +0 testb expand_aliases on 1 @@ -170,3 +188,33 @@ w x y z +Darwin +x +archive +install +s +sub1 +sub2 +test +68 +archive +install +s +sub1 +sub2 +test +44 +archive +install +s +sub1 +sub2 +test +86 +2 +78 +1 start +2 start +sub3 +1 done +42 diff --git a/tests/exec6.sub b/tests/exec6.sub index dd53e74b1..a727f9110 100644 --- a/tests/exec6.sub +++ b/tests/exec6.sub @@ -65,3 +65,19 @@ echo $? echo $? rm -f /tmp/notwrite + +!; echo 1 hi $? +!& echo 2 hi $? + +(echo !) +#echo !(echo c) +echo !>/dev/null +echo !</dev/null + +! & +echo $? +! +echo $? + +{ time & } 2>/dev/null +echo $? diff --git a/tests/execscript b/tests/execscript index 28096769f..1e2117e6b 100644 --- a/tests/execscript +++ b/tests/execscript @@ -1,3 +1,16 @@ +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# export LC_ALL=C export LANG=C @@ -5,6 +18,9 @@ if [ $UID -eq 0 ]; then echo "execscript: the test suite should not be run as root" >&2 fi +# this should succeed silently +$cmd & + set -- one two three echo before exec1.sub: "$@" echo calling exec1.sub @@ -21,6 +37,14 @@ export PATH notthere echo $? +# now let's set up a command-not-found hook +command_not_found_handle() +{ + echo we would do something here with $1 +} +notthere a b c +unset -f command_not_found_handle + # this is iffy, since the error messages may vary from system to system # and /tmp might not exist ln -s ${THIS_SH} /tmp/bash 2>/dev/null @@ -43,6 +67,14 @@ echo $? ${THIS_SH} / echo $? +# trying to exec a directory is a fatal error +${THIS_SH} -c 'exec . ; default: after exec directory' bash +POSIXLY_CORRECT=1 ${THIS_SH} -c 'exec . ; posix: after exec directory' posix-bash + +# even if preceded by `command' +${THIS_SH} -c 'command exec . ; default: after command exec directory 2' bash +POSIXLY_CORRECT=1 ${THIS_SH} -c 'command exec . ; posix: after command exec directory 2' posix-bash + # try sourcing a directory . / echo $? @@ -65,15 +97,23 @@ ${THIS_SH} ./exec3.sub rm -f $TMPDIR/bashenv unset BASH_ENV +# these results should be the same as with an empty PATH +PATH=. + +notthere +echo $? +command notthere +echo $? +command -p notthere +echo $? + # we're resetting the $PATH to empty, so this should be last PATH= notthere echo $? - command notthere echo $? - command -p notthere echo $? @@ -158,3 +198,6 @@ $THIS_SH -c '/bin/echo c && /bin/echo d && echo e' ${THIS_SH} ./exec13.sub ${THIS_SH} ./exec14.sub + +# problems with fork optimization in bash-5.2 +${THIS_SH} ./exec15.sub diff --git a/tests/exp.right b/tests/exp.right index 60241a1db..bc2dae5e5 100644 --- a/tests/exp.right +++ b/tests/exp.right @@ -88,6 +88,8 @@ argv[1] = <abc> argv[1] = <abc> argv[1] = <posix> argv[1] = <10> +argv[1] = <5> +argv[1] = <5> argv[1] = <file.o> argv[1] = <posix> argv[1] = </src/cmd> @@ -164,6 +166,20 @@ argv[2] = <^?> argv[1] = <^A^?> argv[1] = <^A^?^A^?> argv[1] = <^A^A^?> +argv[1] = <\^A> +argv[1] = <^A> +argv[1] = <\^A> +argv[1] = <\^A> +argv[1] = <^A> +argv[1] = <^A> +argv[1] = <^A^A> +argv[1] = <^A^A> +argv[1] = <\^A> +argv[1] = <\^A> +argv[1] = <\^A^?> +argv[1] = <\^A^?> +argv[1] = <^\^A ^\^?> +argv[1] = <^A ^_> 0.net 0.net0 @@ -236,7 +252,7 @@ declare -- var="x\001y\177z"$ argv[1] = <$'x\001y\177z'> argv[1] = <x^Ay^?z> var=$'x\001y\177z' -./exp8.sub: line 30: xyz: syntax error: invalid arithmetic operator (error token is "z") +./exp8.sub: line 30: xyz: arithmetic syntax error: invalid arithmetic operator (error token is "z") declare -a array=() declare -a array=([0]=$'x\001y\177z') argv[1] = <x^Ay^?z> diff --git a/tests/exp.tests b/tests/exp.tests index 61a39d3b4..8dc0a601b 100644 --- a/tests/exp.tests +++ b/tests/exp.tests @@ -237,6 +237,15 @@ POSIX=/usr/posix expect '<10>' recho ${#POSIX} +# this was a problem through bash-5.2 -- it would skip random numbers because +# of multiple calls to find_variable +RANDOM=42 +expect '<5>' +recho ${#RANDOM} # 17772 +declare -i RANDOM=42 +expect '<5>' +recho ${#RANDOM} # 17772 + # remove shortest trailing match x=file.c expect '<file.o>' diff --git a/tests/exp1.sub b/tests/exp1.sub index 3dbe3d90f..234705e9e 100644 --- a/tests/exp1.sub +++ b/tests/exp1.sub @@ -32,3 +32,23 @@ recho $FOO recho '' recho '' recho '' + +# tests of backslash-escaped CTLESC + +recho "${_+\}" +recho ${_+\} +recho "${_+\\}" +recho ${_+\\} +recho "${_+}" +recho ${_+} +recho "${_+}" +recho ${_+} + +recho $'\\\1' +recho "\\" + +recho "\\" +recho \\ + +recho $'\c\\\001 \c\\\177' +recho $'\c \c' diff --git a/tests/exportfunc.right b/tests/exportfunc.right index 890bdfa4b..ad6b58c6a 100644 --- a/tests/exportfunc.right +++ b/tests/exportfunc.right @@ -5,7 +5,7 @@ exportfunc ok 2 ./exportfunc.tests: line 43: cve7169-bad2: No such file or directory ./exportfunc1.sub: line 14: maximum here-document count exceeded ./exportfunc.tests: line 72: HELLO_WORLD: No such file or directory -eval ok +./exportfunc.tests: eval: line 83: unexpected EOF while looking for matching `}' ./exportfunc3.sub: line 23: export: foo=bar: cannot export status: 1 equals-1 diff --git a/tests/exportfunc.tests b/tests/exportfunc.tests index d06b1a33b..64eb38bb2 100644 --- a/tests/exportfunc.tests +++ b/tests/exportfunc.tests @@ -78,6 +78,7 @@ env -i BASH_FUNC_x%%='() { _; } >_[${ $() }] { id; }' ${THIS_SH} -c : 2>/dev/nul env BASH_FUNC_x%%=$'() { _;}>_[$($())]\n{ echo vuln;}' ${THIS_SH} -c : 2>/dev/null eval 'x() { _;}>_[$($())] { echo vuln;}' 2>/dev/null +# this fails looking for closing `}' now that `${ ' has syntactic meaning eval 'foo() { _; } >_[${ $() }] ;{ echo eval ok; }' # other tests fixed in bash43-030 concerning function name transformation diff --git a/tests/extglob.right b/tests/extglob.right index 2974cecaf..dca15ed53 100644 --- a/tests/extglob.right +++ b/tests/extglob.right @@ -182,3 +182,10 @@ no dotglob: .a .foo bar ? . .. .a .foo * bar +extglob off +x +extglob off +extglob off +extglob off +extglob off +extglob off diff --git a/tests/extglob.tests b/tests/extglob.tests index 7a7cf91bf..ef5d7793c 100644 --- a/tests/extglob.tests +++ b/tests/extglob.tests @@ -379,6 +379,11 @@ shopt -u globstar # in the right place builtin cd "$MYDIR" +# seg fault in bash-5.2 +foo= +foo=${foo/#*([.])} +unset foo + ${THIS_SH} ./extglob1.sub ${THIS_SH} ./extglob1a.sub ${THIS_SH} ./extglob3.sub @@ -386,5 +391,6 @@ ${THIS_SH} ./extglob4.sub ${THIS_SH} ./extglob5.sub ${THIS_SH} ./extglob6.sub ${THIS_SH} ./extglob7.sub +${THIS_SH} ./extglob8.sub exit 0 diff --git a/tests/func.right b/tests/func.right index f4db4d168..2c83a0fb1 100644 --- a/tests/func.right +++ b/tests/func.right @@ -166,4 +166,98 @@ after FUNCNEST unset: f = 201 ./func4.sub: line 23: foo: maximum function nesting level exceeded (20) 1 after FUNCNEST assign: f = 38 +./func5.sub: line 31: `sys$read': not a valid identifier +11111 () +{ + printf "FUNCNAME: %s\n" $FUNCNAME +} +function a=2 () +{ + printf "FUNCNAME: %s\n" $FUNCNAME +} +function 11111 () +{ + printf "FUNCNAME: %s\n" $FUNCNAME +} +function a=2 () +{ + printf "FUNCNAME: %s\n" $FUNCNAME +} +FUNCNAME: a=2 +<(:) +<(:) is a function +<(:) () +{ + echo $FUNCNAME +} +posix mode: +type +break is a special shell builtin +builtin +command -v +break +command -V +break is a special shell builtin +type -a +break is a special shell builtin +break is a function +break () +{ + echo inside function $FUNCNAME +} +declare +break () +{ + echo inside function $FUNCNAME +} +execution +default mode: +type +break is a function +break () +{ + echo inside function $FUNCNAME +} +function +command -v +break +command -V +break is a function +break () +{ + echo inside function $FUNCNAME +} +type -a +break is a function +break () +{ + echo inside function $FUNCNAME +} +break is a shell builtin +declare +break () +{ + echo inside function $FUNCNAME +} +execution +inside function break +./func5.sub: line 86: `break': is a special builtin +./func5.sub: line 92: `!!': not a valid identifier +!! is a function +!! () +{ + fc -s "$@" +} +!! is a function +function !! () +{ + fc -s "$@" +} 5 +rfunc () +{ + local -; + local var; + local -p +} +declare -fr rfunc diff --git a/tests/func.tests b/tests/func.tests index e35ec2b85..1a753af78 100644 --- a/tests/func.tests +++ b/tests/func.tests @@ -166,6 +166,7 @@ export -f zf ${THIS_SH} -c 'type -t zf' ${THIS_SH} -c 'type zf' +unset -f zf ${THIS_SH} ./func1.sub @@ -179,6 +180,9 @@ ${THIS_SH} ./func3.sub # FUNCNEST testing ${THIS_SH} ./func4.sub +# function naming restrictions +${THIS_SH} ./func5.sub + unset -f myfunction myfunction() { echo "bad shell function redirection" @@ -195,4 +199,15 @@ segv() segv echo $? +# functions can have attributes +rfunc() +{ + local - + local var + + local -p +} +readonly -f rfunc +readonly -f + exit 0 diff --git a/tests/getopts.right b/tests/getopts.right index 599d830a3..f5a5262a7 100644 --- a/tests/getopts.right +++ b/tests/getopts.right @@ -66,3 +66,5 @@ OPTARG = x = ? unset x = ? declare -r RO="foo" declare -r RO="foo" +./getopts10.sub: line 33: V: readonly variable +1 diff --git a/tests/getopts10.sub b/tests/getopts10.sub index 49b2bfe9c..a761bd34d 100644 --- a/tests/getopts10.sub +++ b/tests/getopts10.sub @@ -28,3 +28,9 @@ typeset -p RO getopts x x typeset -p RO + +readonly V +getopts x V +echo $? + + diff --git a/tests/glob.right b/tests/glob.right index 723ee7b46..4d89de806 100644 --- a/tests/glob.right +++ b/tests/glob.right @@ -125,6 +125,22 @@ a aa b bb .a .aa .b .bb a aa b bb .a .aa .b .bb . .. .a .aa .b .bb +mailcheck.o make_cmd.o mksignames mksignames.o mksyntax mksyntax.dSYM + +mailcheck.o make_cmd.o mksignames mksignames.o mksyntax mksyntax.dSYM +mksyntax.dSYM mksyntax mksignames.o mksignames make_cmd.o mailcheck.o + +mailcheck.o make_cmd.o mksignames mksignames.o mksyntax mksyntax.dSYM +mailcheck.o make_cmd.o mksignames mksignames.o mksyntax mksyntax.dSYM + +mksyntax mksignames make_cmd.o mailcheck.o mksignames.o mksyntax.dSYM +mksyntax.dSYM mksignames.o mailcheck.o make_cmd.o mksignames mksyntax + +mksyntax mksignames make_cmd.o mailcheck.o mksignames.o mksyntax.dSYM +mksyntax.dSYM mksignames.o mailcheck.o make_cmd.o mksignames mksyntax + +mksyntax mksignames make_cmd.o mailcheck.o mksignames.o mksyntax.dSYM +mksyntax.dSYM mksignames.o mailcheck.o make_cmd.o mksignames mksyntax argv[1] = <a> argv[2] = <abc> argv[3] = <abd> @@ -139,7 +155,7 @@ argv[2] = <abc> argv[3] = <abd> argv[4] = <abe> tmp/l1 tmp/l2 tmp/*4 tmp/l3 -./glob.tests: line 66: no match: tmp/*4 +./glob.tests: line 67: no match: tmp/*4 argv[1] = <bdir/> argv[1] = <*> argv[1] = <a*> diff --git a/tests/glob.tests b/tests/glob.tests index 02d530261..bdb2b774c 100644 --- a/tests/glob.tests +++ b/tests/glob.tests @@ -31,6 +31,7 @@ ${THIS_SH} ./glob7.sub ${THIS_SH} ./glob8.sub ${THIS_SH} ./glob9.sub ${THIS_SH} ./glob10.sub +${THIS_SH} ./glob11.sub MYDIR=$PWD # save where we are diff --git a/tests/glob10.sub b/tests/glob10.sub index 7c14c0d24..1ee8046ed 100644 --- a/tests/glob10.sub +++ b/tests/glob10.sub @@ -15,7 +15,7 @@ # test basic behavior of globskipdots TDIR=/tmp/dotglob-$$ -{ mkdir $TDIR && cd $TDIR; } || exit 1 +{ mkdir $TDIR && cd -L $TDIR; } || exit 1 touch a b aa bb .a .b .aa .bb diff --git a/tests/glob2.sub b/tests/glob2.sub index 09cb6d51f..7425ea4a7 100644 --- a/tests/glob2.sub +++ b/tests/glob2.sub @@ -14,10 +14,10 @@ . ./test-glue-functions # this locale causes problems all over the place -if locale -a | grep -i '^zh_HK\.big5hkscs' >/dev/null ; then +if locale -a | grep -i '^zh_TW\.big5' >/dev/null ; then : else - echo "glob2.sub: warning: you do not have the zh_HK.big5hkscs locale installed;" >&2 + echo "glob2.sub: warning: you do not have the zh_TW.big5 locale installed;" >&2 echo "glob2.sub: warning: that will cause some of these tests to fail." >&2 fi @@ -41,7 +41,7 @@ esac [[ $var = $var ]] && echo ok 4 [[ $var = $'ab\134' ]] && echo ok 5 -LC_ALL=zh_HK.big5hkscs +LC_ALL=zh_TW.big5 read a b c <<< $'\u3b1 b c\n' echo $b @@ -62,4 +62,4 @@ printf "%s" "a${alpha}b" | LC_ALL=C od -b | _intl_normalize_spaces a=$'\u3b1' [[ $a = $a ]] && echo ok 6 -LC_ALL=zh_HK.big5hkscs ${THIS_SH} -c $'[[ \u3b1 = \u3b1 ]]' && echo ok 7 +LC_ALL=zh_TW.big5 ${THIS_SH} -c $'[[ \u3b1 = \u3b1 ]]' && echo ok 7 diff --git a/tests/glob8.sub b/tests/glob8.sub index dca54fcc6..877c8bd10 100644 --- a/tests/glob8.sub +++ b/tests/glob8.sub @@ -15,7 +15,7 @@ TESTDIR=${TMPDIR}/glob-test-$$ mkdir ${TESTDIR} -cd $TESTDIR || { +cd -L $TESTDIR || { echo "$TESTDIR: cannot cd" >&2 exit 1 } diff --git a/tests/heredoc.right b/tests/heredoc.right index cc193f666..a3ef0336f 100644 --- a/tests/heredoc.right +++ b/tests/heredoc.right @@ -17,14 +17,18 @@ hi\ there EO\ F +line 1line 2 hi hi +nextEOF tab 1 tab 2 tab 3 abc def ghi jkl mno +echo " +echo \" fff is a function fff () { @@ -124,10 +128,41 @@ argv[3] = <ve> foo bar ./heredoc7.sub: line 21: after: command not found ./heredoc7.sub: line 29: warning: here-document at line 29 delimited by end-of-file (wanted `EOF') -./heredoc7.sub: line 29: foobar: command not found -./heredoc7.sub: line 30: EOF: command not found +./heredoc7.sub: line 26: foobar: command not found +./heredoc7.sub: line 27: EOF: command not found grep: *.c: No such file or directory +foo () +{ + echo begin; + if cat <<HERE +contents +HERE + then + echo 1 2; + echo 3 4; + fi +} +foo () +{ + echo begin; + while read var <<HERE +contents +HERE + do + echo 1 2; + echo 3 4; + done +} +hello +world +hello +world +here-doc line 1 +here-doc line 2 +here-document +here-document comsub here-string -./heredoc.tests: line 156: warning: here-document at line 154 delimited by end-of-file (wanted `EOF') +./heredoc.tests: line 184: warning: here-document at line 181 delimited by end-of-file (wanted `') hi there +'' diff --git a/tests/heredoc.tests b/tests/heredoc.tests index d10a7c104..d6431b8a7 100644 --- a/tests/heredoc.tests +++ b/tests/heredoc.tests @@ -80,6 +80,12 @@ F EOF true +# but unquoted here-documents remove backslash-newline +cat <<EOF +line 1\ +line 2 +EOF + # check that \newline is removed at start of here-doc cat << EO\ F @@ -92,6 +98,12 @@ hi EO\ F +# backslash-newline processing is performed before the check for the delimiter +cat <<EOF +next\ +EOF +EOF + # check operation of tab removal in here documents cat <<- EOF tab 1 @@ -100,16 +112,25 @@ cat <<- EOF EOF # check appending of text to file from here document -rm -f ${TMPDIR}/bash-zzz -cat > ${TMPDIR}/bash-zzz << EOF +rm -f ${TMPDIR}/bash-zzz-$$ +cat > ${TMPDIR}/bash-zzz-$$ << EOF abc EOF -cat >> ${TMPDIR}/bash-zzz << EOF +cat >> ${TMPDIR}/bash-zzz-$$ << EOF def ghi jkl mno EOF -cat ${TMPDIR}/bash-zzz -rm -f ${TMPDIR}/bash-zzz +cat ${TMPDIR}/bash-zzz-$$ +rm -f ${TMPDIR}/bash-zzz-$$ + +# check behavior of double quotes and backslashes in here-documents +cat <<EOF +echo " +EOF + +cat <<EOF +echo \" +EOF # make sure command printing puts the here-document as the last redirection # on the line, and the function export code preserves syntactic correctness @@ -142,7 +163,13 @@ ${THIS_SH} ./heredoc6.sub # interaction between here-documents and command substitutions ${THIS_SH} ./heredoc7.sub +${THIS_SH} ./heredoc8.sub + +# various tests for printing here-documents in function bodies +${THIS_SH} ./heredoc9.sub +# test various combinations of here-documents and aliases +${THIS_SH} ./heredoc10.sub echo $( cat <<< "comsub here-string" @@ -151,6 +178,7 @@ echo $( # check that end of file delimits a here-document # THIS MUST BE LAST! -cat << EOF +cat <<'' hi there +'' diff --git a/tests/histexp.right b/tests/histexp.right index 341252c0d..d9b8fea81 100644 --- a/tests/histexp.right +++ b/tests/histexp.right @@ -148,6 +148,10 @@ echo four ; echo two \! \! \! +1 hi 1 +2 hi 0 +! +! a b c diff --git a/tests/histexp1.sub b/tests/histexp1.sub index cc2c5d1d4..582d393fd 100644 --- a/tests/histexp1.sub +++ b/tests/histexp1.sub @@ -34,3 +34,11 @@ echo "\!" echo "$( echo '\!' )" echo '\!' + +# more stop characters post-bash-5.2 +!; echo 1 hi $? +!& echo 2 hi $? + +(echo !) +echo !>/dev/null +echo !</dev/null diff --git a/tests/history.right b/tests/history.right index 5273de6bc..46b12ed33 100644 --- a/tests/history.right +++ b/tests/history.right @@ -97,7 +97,7 @@ line 2 for history 6 HISTFILE=$TMPDIR/newhistory 7 echo displaying \$HISTFILE after history -a 8 cat $HISTFILE -./history.tests: line 90: fc: no command found +./history.tests: line 91: fc: no command found 15 echo line 2 for history 16 unset HISTSIZE 17 unset HISTFILE @@ -107,7 +107,7 @@ echo xx xb xc xx xb xc echo 44 48 4c 44 48 4c -./history.tests: line 105: fc: no command found +./history.tests: line 106: fc: no command found aa bb cc @@ -140,9 +140,11 @@ three one two three -5.2 +(exit 42) +42 +5.3 echo ${BASH_VERSION%\.*} -5.2 +5.3 echo ${BASH_VERSION%\.*} a b @@ -178,6 +180,8 @@ i 4 echo g 5 echo h +./history3.sub: line 48: history: @42: invalid number +./history3.sub: line 49: history: @42: numeric argument required 0 1 @@ -264,6 +268,22 @@ out of range 3 12 echo out of range 3 out of range 4 13 fc -l 1 99 +a +b +c +# out of range specs aren't errors +echo a +a +d +e +1 echo a +2 echo b +3 echo c +4 # out of range specs aren't errors +5 # out of range specs aren't errors +6 echo a +7 echo d +8 echo e 1 2 3 @@ -297,3 +317,58 @@ out of range 4 7 echo 9 8 echo 10 5 echo 10 +$ 1 +$ 2 +$ 3 +$ exit +6 +$ 1 +$ 2 +$ 3 +$ 4 +$ 5 +$ exit +6 +$ 1 +$ 2 +$ exit +4 +$ e 1 +$ e 2 +$ e 3 +$ exit +3 +e 1 +e 2 +e 3 +$ x 1 +$ x 2 +$ x 3 +$ x 4 +$ x 5 +$ exit +3 +x 3 +x 4 +x 5 +$ y 1 +$ y 2 +$ exit +2 +y 1 +y 2 +$ 1 +$ 2 +$ exit +0 +a +b +c +d + 1 echo a + 2 echo c + 3 echo d + 4 history -d 2 + 5 history +./history8.sub: line 15: history: 72: history position out of range +./history8.sub: line 16: history: -72: history position out of range diff --git a/tests/history.tests b/tests/history.tests index 5826d1304..baa835d53 100644 --- a/tests/history.tests +++ b/tests/history.tests @@ -50,6 +50,7 @@ history -s "echo line for history" history history -p '!!' +history -p # this succeeds silently fc -nl @@ -131,3 +132,5 @@ ${THIS_SH} ./history3.sub ${THIS_SH} ./history4.sub ${THIS_SH} ./history5.sub ${THIS_SH} ./history6.sub +${THIS_SH} ./history7.sub +${THIS_SH} ./history8.sub diff --git a/tests/history1.sub b/tests/history1.sub index b67a0efa4..eb8b4f59f 100644 --- a/tests/history1.sub +++ b/tests/history1.sub @@ -26,3 +26,8 @@ three history fc -s cat + +# try re-executing a failed command, check the exit status +(exit 42) +fc -s -1 +echo $? diff --git a/tests/history3.sub b/tests/history3.sub index d8a220382..6bc067572 100644 --- a/tests/history3.sub +++ b/tests/history3.sub @@ -45,5 +45,8 @@ history -d 5-0xaf history ; echo +history -d @42 +history @42 + unset HISTFILE exit 0 diff --git a/tests/history5.sub b/tests/history5.sub index 245c28d0d..5a89c79fc 100644 --- a/tests/history5.sub +++ b/tests/history5.sub @@ -54,4 +54,20 @@ fc -l 1 99 echo out of range 4 fc -l -20 -40 +HISTSIZE=10 +history -c + +echo a +echo b +echo c + +# out of range specs aren't errors +fc -e - 48 +fc -s -- -42 + +echo d +echo e + +fc -l + unset HISTFILE # suppress writing history file diff --git a/tests/intl.right b/tests/intl.right index 7da99192d..7e25d29f8 100644 --- a/tests/intl.right +++ b/tests/intl.right @@ -21,7 +21,7 @@ aéb bytematch 0000000 254 012 0000002 -Passed all 1378 Unicode tests +Passed all 1770 Unicode tests 0000000 303 277 012 0000003 0000000 303 277 012 @@ -55,3 +55,13 @@ Passed all 1378 Unicode tests $'5\247@3\231+\306S8\237\242\352\263' + : $'5\247@3\231+\306S8\237\242\352\263' + set +x +ಇಳಿಕೆಗಳು +ಇಳ +ಇ +ಇಳ + ಇಳ +ಇಳ --- +ಇ +ಇ + ಇ +ಇ --- diff --git a/tests/intl.tests b/tests/intl.tests index c4ff02c3c..990d782dd 100644 --- a/tests/intl.tests +++ b/tests/intl.tests @@ -66,3 +66,5 @@ ${THIS_SH} ./unicode1.sub # 2>/dev/null ${THIS_SH} ./unicode2.sub ${THIS_SH} ./unicode3.sub 2>&1 + +${THIS_SH} ./intl4.sub diff --git a/tests/jobs.right b/tests/jobs.right index 0510e044a..173743aea 100644 --- a/tests/jobs.right +++ b/tests/jobs.right @@ -33,17 +33,20 @@ i killed it 2: ok 3 127 ./jobs5.sub: line 71: declare: wpid: not found +./jobs5.sub: line 74: wait: `invalid-varname': not a valid identifier +./jobs5.sub: line 76: wait: WV: cannot unset: readonly variable child1 exit status 0 [1]+ Running sleep 20 & ./jobs7.sub: line 5: fg: no current jobs [1]+ Running sleep 20 & +got USR1 0 -./jobs.tests: line 40: wait: %1: no such job -./jobs.tests: line 45: fg: no job control +./jobs.tests: line 45: wait: %1: no such job +./jobs.tests: line 50: fg: no job control wait-for-pid wait-errors -./jobs.tests: line 58: wait: `1-1': not a pid or valid job spec -./jobs.tests: line 59: wait: `-4': not a pid or valid job spec +./jobs.tests: line 70: wait: `1-1': not a pid or valid job spec +./jobs.tests: line 71: wait: `-4': not a pid or valid job spec wait-for-background-pids async list wait-for-background-pids async list wait for child @@ -52,7 +55,7 @@ wait-when-no-children posix jobs output [1]+ Done sleep 1 wait-for-job -./jobs.tests: line 84: wait: %2: no such job +./jobs.tests: line 96: wait: %2: no such job 127 async list wait-for-job forked @@ -65,19 +68,20 @@ sleep 2 fg-bg 4 sleep 2 fg-bg 5 -./jobs.tests: line 111: fg: %2: no such job -./jobs.tests: line 112: bg: job 1 already in background +./jobs.tests: line 123: fg: %2: no such job +./jobs.tests: line 124: bg: job 1 already in background fg-bg 6 -./jobs.tests: line 119: fg: -s: invalid option +./jobs.tests: line 131: fg: -s: invalid option fg: usage: fg [job_spec] -./jobs.tests: line 120: bg: -s: invalid option +./jobs.tests: line 132: bg: -s: invalid option bg: usage: bg [job_spec ...] -./jobs.tests: line 125: disown: -s: invalid option +./jobs.tests: line 137: disown: -s: invalid option disown: usage: disown [-h] [-ar] [jobspec ... | pid ...] -./jobs.tests: line 129: disown: %1: no such job -./jobs.tests: line 132: disown: %2: no such job +./jobs.tests: line 141: disown: %1: no such job +./jobs.tests: line 144: disown: %2: no such job +./jobs.tests: line 147: disown: @12: no such job wait-for-non-child -./jobs.tests: line 135: wait: pid 1 is not a child of this shell +./jobs.tests: line 150: wait: pid 1 is not a child of this shell 127 3 -- 1 2 3 -- 1 - 2 - 3 [1] Running sleep 300 & @@ -87,8 +91,8 @@ running jobs: [1] Running sleep 300 & [2]- Running sleep 350 & [3]+ Running sleep 400 & -./jobs.tests: line 152: kill: %4: no such job -./jobs.tests: line 154: jobs: %4: no such job +./jobs.tests: line 167: kill: %4: no such job +./jobs.tests: line 169: jobs: %4: no such job current job: [3]+ Running sleep 400 & previous job: @@ -118,3 +122,9 @@ done after KILL -STOP, foregrounding %1 sleep 4 done +./jobs.tests: line 229: jobs: -q: invalid option +jobs: usage: jobs [-lnprs] [jobspec ...] or jobs -x command [args] +./jobs.tests: line 231: suspend: -z: invalid option +suspend: usage: suspend [-f] +./jobs.tests: line 232: suspend: cannot suspend: no job control +./jobs.tests: line 233: suspend: cannot suspend: no job control diff --git a/tests/jobs.tests b/tests/jobs.tests index dacdc15d0..4fa19b7cc 100644 --- a/tests/jobs.tests +++ b/tests/jobs.tests @@ -32,6 +32,11 @@ ${THIS_SH} ./jobs5.sub ${THIS_SH} ./jobs6.sub ${THIS_SH} ./jobs7.sub +# more disown -h tests +${THIS_SH} ./jobs8.sub + +# wait interrupted by signal for which a trap has been set +${THIS_SH} ./jobs9.sub jobs echo $? @@ -40,16 +45,23 @@ echo $? wait %1 # make sure we can't fg a job started when job control was not active -sleep 30 & +sleep 20 & pid=$! fg %1 # make sure the killed processes don't cause a message exec 5>&2 exec 2>/dev/null -kill -n 9 $pid -wait # make sure we reap the processes while stderr is still redirected +kill -n9 $pid +wait $pid # make sure we reap the processes while stderr is still redirected + +sleep 30 & +pid2=$! +kill -sHUP $pid2 +wait $pid2 exec 2>&5 +unset -v pid pid2 +# echo wait-for-pid sleep 4 & wait $! @@ -131,6 +143,9 @@ disown %1 # this, however, is an error disown %2 +# this is definitely an error +disown -h @12 + echo wait-for-non-child wait 1 echo $? @@ -205,5 +220,14 @@ kill -STOP %1 sleep 2 # give time for the shell to get the stop notification echo after KILL -STOP, foregrounding %1 fg %1 - echo done + +# these are all errors + +set +m + +jobs -q + +suspend -z +suspend +suspend -- diff --git a/tests/jobs5.sub b/tests/jobs5.sub index e348f2e2f..23e1b1db9 100644 --- a/tests/jobs5.sub +++ b/tests/jobs5.sub @@ -69,3 +69,8 @@ echo $wpid $? jobs wait -p wpid declare -p wpid + +# let's check errors like with other builtins that take variable names +wait -p invalid-varname +readonly WV +wait -p WV diff --git a/tests/lastpipe.right b/tests/lastpipe.right index 84e1e2ea3..d311d6f8c 100644 --- a/tests/lastpipe.right +++ b/tests/lastpipe.right @@ -7,6 +7,7 @@ last = c 1 -- 0 0 1 1 -- 0 0 1 1 -- 0 1 0 +1 42 lastpipe1.sub returns 14 A1 A2 diff --git a/tests/lastpipe.tests b/tests/lastpipe.tests index f9d669ddc..2fc5e8e64 100644 --- a/tests/lastpipe.tests +++ b/tests/lastpipe.tests @@ -65,6 +65,9 @@ echo $? -- ${PIPESTATUS[@]} true | binfalse | true echo $? -- ${PIPESTATUS[@]} + +binfalse | true | true | VAR=42 +echo $? $VAR set +o pipefail ${THIS_SH} ./lastpipe1.sub diff --git a/tests/more-exp.right b/tests/more-exp.right index f5f37c92b..2fd3548f1 100644 --- a/tests/more-exp.right +++ b/tests/more-exp.right @@ -190,7 +190,7 @@ argv[1] = <0> ./more-exp.tests: line 442: ${#=}: bad substitution ./more-exp.tests: line 444: ${#+}: bad substitution ./more-exp.tests: line 446: ${#1xyz}: bad substitution -./more-exp.tests: line 449: #: %: syntax error: operand expected (error token is "%") +./more-exp.tests: line 449: #: %: arithmetic syntax error: operand expected (error token is "%") argv[1] = <0> argv[1] = <a+b> argv[1] = <+> diff --git a/tests/nameref.right b/tests/nameref.right index 83e9ee5b8..31b84afd3 100644 --- a/tests/nameref.right +++ b/tests/nameref.right @@ -92,6 +92,10 @@ expect <one> one expect <four> four +expect <X> +X +expect <X> +X errors = 0 1 2 @@ -123,17 +127,17 @@ bar unset ./nameref8.sub: line 16: typeset: warning: v: circular name reference ./nameref8.sub: line 16: warning: v: circular name reference -./nameref8.sub: line 18: warning: v: circular name reference +./nameref8.sub: line 18: warning: v: maximum nameref depth (8) exceeded inside inside: two outside: ./nameref8.sub: line 42: typeset: warning: x: circular name reference ./nameref8.sub: line 42: warning: x: circular name reference -./nameref8.sub: line 44: warning: x: circular name reference +./nameref8.sub: line 44: warning: x: maximum nameref depth (8) exceeded foo ./nameref8.sub: line 51: typeset: warning: v: circular name reference ./nameref8.sub: line 51: warning: v: circular name reference -./nameref8.sub: line 51: warning: v: circular name reference +./nameref8.sub: line 51: warning: v: maximum nameref depth (8) exceeded local ./nameref8.sub: line 60: typeset: v: nameref variable self references not allowed ./nameref8.sub: line 67: warning: x: circular name reference @@ -302,7 +306,7 @@ declare -n ref="var" declare -a a=([0]="0") ./nameref15.sub: line 14: local: warning: a: circular name reference ./nameref15.sub: line 14: warning: a: circular name reference -./nameref15.sub: line 14: warning: a: circular name reference +./nameref15.sub: line 14: warning: a: maximum nameref depth (8) exceeded declare -a a=([0]="X") declare -a b=([0]="X") ./nameref15.sub: line 14: local: warning: a: circular name reference @@ -311,14 +315,14 @@ declare -a b=([0]="X") declare -a b=([0]="0") ./nameref15.sub: line 32: typeset: warning: ref: circular name reference ./nameref15.sub: line 32: warning: ref: circular name reference -./nameref15.sub: line 33: warning: ref: circular name reference +./nameref15.sub: line 33: warning: ref: maximum nameref depth (8) exceeded ./nameref15.sub: line 34: warning: ref: circular name reference inside X outside X before: 7 ./nameref15.sub: line 45: typeset: warning: xxx: circular name reference ./nameref15.sub: line 45: warning: xxx: circular name reference -./nameref15.sub: line 46: warning: xxx: circular name reference +./nameref15.sub: line 46: warning: xxx: maximum nameref depth (8) exceeded declare -n xxx="xxx" ./nameref15.sub: line 48: warning: xxx: circular name reference xxx_func: inside: xxx = foo @@ -529,17 +533,18 @@ declare -a array=([0]="zero") declare -a array=([0]="one" [1]="two" [2]="three") declare -ai a=([0]="5") declare -ai a=([0]="6") +declare -ai a=([0]="42") declare -ai a=([0]="1") -./nameref23.sub: line 15: declare: b: not found +./nameref23.sub: line 16: declare: b: not found declare -ai a=([0]="1") declare -- b="1" declare -ai a=([0]="1") declare -- b="11" declare -ai a=([0]="1") declare -- b="110" -./nameref23.sub: line 25: declare: `1': invalid variable name for name reference +./nameref23.sub: line 26: declare: `1': invalid variable name for name reference declare -ai a=([0]="1") -./nameref23.sub: line 27: declare: b: not found +./nameref23.sub: line 28: declare: b: not found declare -ai a=([0]="4") declare -in b="a[0]" declare -ai a=([0]="6") @@ -558,3 +563,14 @@ declare -ai a=([0]="0" [1]="16") 12 16 declare -ai a=([0]="0" [1]="16") +./nameref24.sub: line 24: declare: `': not a valid identifier +./nameref24.sub: line 25: declare: `a&b': invalid variable name for name reference +3 +3 +0 +0 +0 +./nameref24.sub: line 38: declare: `aa&bb': invalid variable name for name reference +3 +3 +5 diff --git a/tests/nameref23.sub b/tests/nameref23.sub index 358c381e1..f751bb6ea 100644 --- a/tests/nameref23.sub +++ b/tests/nameref23.sub @@ -5,6 +5,7 @@ declare -n b='a[0]' b+=1 ; declare -p a declare b+=1 ; declare -p a +declare b=42 ; declare -p a unset a b unset -n b diff --git a/tests/nameref4.sub b/tests/nameref4.sub index 6367d5656..970a85e98 100644 --- a/tests/nameref4.sub +++ b/tests/nameref4.sub @@ -228,6 +228,20 @@ echo "expect <four>" echo $qux ckval qux ${bar[3]} +bar=() +declare -n ref='bar[1]' + +echo "expect <X>" +echo ${ref=X} +ckval ref ${bar[1]} + +unset -n ref +declare -n ref + +echo "expect <X>" +echo ${ref=X} +ckval ref ${ref} + # Need to add code and tests for `for' loop nameref variables echo errors = $errors diff --git a/tests/new-exp.right b/tests/new-exp.right index e3dc40e17..c926871d9 100644 --- a/tests/new-exp.right +++ b/tests/new-exp.right @@ -3,7 +3,7 @@ argv[1] = <foo> argv[1] = </usr/homes/chet> argv[1] = </usr/homes/chet> argv[1] = </usr/homes/chet> -./new-exp.tests: line 41: HOME: }: syntax error: operand expected (error token is "}") +./new-exp.tests: line 41: HOME: }: arithmetic syntax error: operand expected (error token is "}") unset argv[1] = </usr/homes/chet> argv[1] = </usr/homes/chet> @@ -59,6 +59,7 @@ argv[1] = <4> argv[1] = <op> argv[1] = <abcdefghijklmnop> argv[1] = <abcdefghijklmnop> +./new-exp.tests: line 189: bad-var: invalid variable name argv[1] = <a> argv[2] = <b> argv[3] = <c> @@ -66,8 +67,8 @@ argv[4] = <d> argv[1] = <a> argv[2] = <b c> argv[3] = <d> -./new-exp.tests: line 197: ABX: unbound variable -./new-exp.tests: line 201: $6: cannot assign in this way +./new-exp.tests: line 202: ABX: unbound variable +./new-exp.tests: line 206: $6: cannot assign in this way argv[1] = <xxcde> argv[1] = <axxde> argv[1] = <abxyz> @@ -176,7 +177,7 @@ a ./new-exp2.sub: line 62: 1111111111111111111111: command not found argv[1] = <6> -./new-exp.tests: line 302: ${#:}: bad substitution +./new-exp.tests: line 307: ${#:}: bad substitution argv[1] = <'> argv[1] = <"> argv[1] = <"hello"> @@ -411,13 +412,13 @@ argv[6] = <w> argv[7] = <x> argv[8] = <y> argv[9] = <z> -./new-exp.tests: line 520: $9: unbound variable -./new-exp.tests: line 521: 9: unbound variable -./new-exp.tests: line 522: UNSET: unbound variable -./new-exp.tests: line 523: UNSET: unbound variable -./new-exp.tests: line 524: UNSET: unbound variable -./new-exp.tests: line 525: UNSET: unbound variable -./new-exp.tests: line 526: UNSET: unbound variable +./new-exp.tests: line 525: $9: unbound variable +./new-exp.tests: line 526: 9: unbound variable +./new-exp.tests: line 527: UNSET: unbound variable +./new-exp.tests: line 528: UNSET: unbound variable +./new-exp.tests: line 529: UNSET: unbound variable +./new-exp.tests: line 530: UNSET: unbound variable +./new-exp.tests: line 531: UNSET: unbound variable argv[1] = <5> argv[1] = <#> argv[1] = <#> @@ -464,7 +465,7 @@ Case05---3---A:B:C--- Case06---1---A B C::--- Case07---3---A:B:C--- Case08---3---A:B:C--- -./new-exp.tests: line 546: ${$(($#-1))}: bad substitution +./new-exp.tests: line 551: ${$(($#-1))}: bad substitution argv[1] = <a> argv[2] = <b> argv[3] = <c> @@ -481,8 +482,8 @@ argv[1] = <a> argv[1] = <a> argv[2] = <b> argv[1] = <> -./new-exp.tests: line 565: $(($# - 2)): substring expression < 0 -./new-exp.tests: line 567: -2: substring expression < 0 +./new-exp.tests: line 570: $(($# - 2)): substring expression < 0 +./new-exp.tests: line 572: -2: substring expression < 0 argv[1] = <bin> argv[2] = <bin> argv[3] = <ucb> @@ -625,13 +626,13 @@ bash: line 1: ${x@C}: bad substitution <'ab cd'> <'4'> <'ab cd'> <> -argv[1] = <host(2)[5.2]$ > < > <' \t\n'> < > <$' \t\n'> +$'\001\001' declare -r x='ab '\''cd'\'' ef' set -- 'ab' 'cd ef' '' 'gh' declare -a A=([0]="ab" [1]="cd ef" [2]="" [3]="gh") @@ -648,7 +649,15 @@ i declare -i foo A declare -A foo -./new-exp10.sub: line 118: ${V@}: bad substitution +LOWER +Lower +argv[1] = <host(2)[5.3]$ > +argv[1] = <~$ > +argv[1] = <^A[0]~$ > +argv[1] = <^A^G^B[0:1]~\$ > +argv[1] = </ bash$ > +argv[1] = <1^J/ bash$ > +./new-exp10.sub: line 153: ${V@}: bad substitution abcxxxdef abcÃ¥def ḅć diff --git a/tests/new-exp.tests b/tests/new-exp.tests index c542313f1..cabaf7b0f 100644 --- a/tests/new-exp.tests +++ b/tests/new-exp.tests @@ -184,6 +184,11 @@ recho ${a-$z} expect nothing recho ${!1-$z} +expect an error +v=bad-var +echo ${!v} +unset -v v + set -- a 'b c' d unset foo foo=@ diff --git a/tests/new-exp10.sub b/tests/new-exp10.sub index 5b199d4f5..028cdf940 100644 --- a/tests/new-exp10.sub +++ b/tests/new-exp10.sub @@ -42,13 +42,6 @@ printf "<%s> " "${z@Q}" ; echo # empty string? recho ${z@Q} # this disappears -# -HOST=host -SHELL_LEVEL=2 -NPS1='\[\]${HOST}($SHELL_LEVEL)[\v]\$ ' - -recho "${NPS1@P}" - # D=' \t\n' printf "<%s>" "${D@E}" ; echo @@ -58,6 +51,10 @@ E=$' \t\n' printf "<%s>" "${E@E}" ; echo printf "<%s>" "${E@Q}" ; echo +v=$'\1\1' +printf '%q\n' "${v@E}" +unset -v v + declare x declare -r x="ab 'cd' ef" printf "%s" "${x@A}" ; echo @@ -114,5 +111,43 @@ echo ${foo@a} declare -p foo +unset -v foo +foo=lower +echo ${foo@U} +echo ${foo@u} + +# framework for testing prompt expansions using @P transformation +cd /tmp + +HOST=host +SHELL_LEVEL=2 +HOME=$PWD + +NPS1='\[\]${HOST}($SHELL_LEVEL)[\v]\$ ' +recho "${NPS1@P}" + +NPS1='\[\]\W\$\040' +recho "${NPS1@P}" + +NPS1='\[\001\][\j]\w\$\040' +recho "${NPS1@P}" + +NPS1='\[\a\][\j:\!]\w\\\$\040' +set -o emacs +recho "${NPS1@P}" +set +o emacs + +cd / +# no longer abbreviate as ~ +NPS1='\W \s\$\040' +recho "${NPS1@P}" + +set -o posix +NPS1='!\n\W \s\$\040' +recho "${NPS1@P}" + +cd $OLDPWD + +# this must be last, fatal error V=42 echo ${V@} # error diff --git a/tests/parser.right b/tests/parser.right index 3a01004fe..e0cdfac7a 100644 --- a/tests/parser.right +++ b/tests/parser.right @@ -1,3 +1,4 @@ +bash: -c: line 1: unexpected EOF while looking for matching `)' AAA bash5: line 1: `invalid-name': not a valid identifier in diff --git a/tests/parser.tests b/tests/parser.tests index 6e020a4ba..51f566855 100644 --- a/tests/parser.tests +++ b/tests/parser.tests @@ -1,5 +1,15 @@ # catch-all for parsing problems that don't fit anywhere else +# word_top issues in bash-5.2 +case x in x) if ((1)); then :; fi ;; esac +case x in x) if ((1)); then :; fi esac + +case x in x) if ((true ) ); then :; fi ;; esac +case x in x) if ((true ) ); then :; fi esac + +# problem with bash-5.2 +${THIS_SH} -c '((X=([))]' bash + # this has to be in a separate file to get desired EOF behavior ${THIS_SH} ./parser1.sub diff --git a/tests/posixpipe.right b/tests/posixpipe.right index 8f6c9cbd8..392880d6c 100644 --- a/tests/posixpipe.right +++ b/tests/posixpipe.right @@ -39,3 +39,7 @@ a real 0.00 user 0.00 sys 0.00 +real 0.00 +user 0.00 +sys 0.00 +4 diff --git a/tests/posixpipe.tests b/tests/posixpipe.tests index fa8febed3..3fe5f770b 100644 --- a/tests/posixpipe.tests +++ b/tests/posixpipe.tests @@ -54,3 +54,10 @@ echo $? echo $? time -p -- echo a + +time -- : + +# this should print timing information +. ./test-glue-functions + +${THIS_SH} -c '{ time; echo after; }' |& wc -l | _cut_leading_spaces diff --git a/tests/printf.right b/tests/printf.right index b032dcbfd..8af40aa71 100644 --- a/tests/printf.right +++ b/tests/printf.right @@ -1,5 +1,10 @@ printf: usage: printf [-v var] format [arguments] printf: usage: printf [-v var] format [arguments] +./printf.tests: line 26: printf: -x: invalid option +printf: usage: printf [-v var] format [arguments] +./printf.tests: line 29: printf: `invalid-var': not a valid identifier +abc +./printf.tests: line 30: printf: `invalid-var': not a valid identifier 10 one one\ctwo @@ -13,6 +18,11 @@ unquoted unquoted quoted unquoted quoted this\&that +echo a\\;ls +echo a\'\;ls +echo 'a'\''b'\;ls +\* +\* 1 2 3 4 5 onestring 0 0 0 onestring 0 0 0.00 @@ -30,7 +40,7 @@ A7 --\"abcd\"-- --\'abcd\'-- --a\x-- -./printf.tests: line 95: printf: missing hex digit for \x +./printf.tests: line 115: printf: missing hex digit for \x --\x-- ---- ---- @@ -91,12 +101,12 @@ A7 26 26 26 -./printf.tests: line 219: printf: `%10': missing format character -./printf.tests: line 220: printf: `M': invalid format character -ab./printf.tests: line 223: printf: `y': invalid format character -./printf.tests: line 226: printf: GNU: invalid number +./printf.tests: line 239: printf: `%10': missing format character +./printf.tests: line 240: printf: `M': invalid format character +ab./printf.tests: line 243: printf: `y': invalid format character +./printf.tests: line 246: printf: GNU: invalid number 0 -./printf.tests: line 227: printf: GNU: invalid number +./printf.tests: line 247: printf: GNU: invalid number 0 - (foo )(bar ) @@ -149,6 +159,16 @@ b xx xx < >< > +0 +^@ +0 +0.00 +'' +'' +./printf.tests: line 364: printf: 9223372036854775825: Result too large +9223372036854775807 +./printf.tests: line 365: printf: -9223372036854775815: Result too large +-9223372036854775808 one one\ctwo 4\.2 @@ -161,6 +181,8 @@ unquoted unquoted quoted unquoted quoted this\&that +'no-quotes-needed' +'quotes;needed' 1 2 3 4 5 onestring 0 0 0 onestring 0 0 0.00 @@ -174,7 +196,7 @@ A7 --\"abcd\"-- --\'abcd\'-- --a\x-- -./printf1.sub: line 107: printf: missing hex digit for \x +./printf1.sub: line 111: printf: missing hex digit for \x --\x-- ---- ---- @@ -235,12 +257,12 @@ A7 26 26 26 -./printf1.sub: line 293: printf: `%10': missing format character -./printf1.sub: line 294: printf: `M': invalid format character -./printf1.sub: line 297: printf: `y': invalid format character -./printf1.sub: line 300: printf: GNU: invalid number +./printf1.sub: line 297: printf: `%10': missing format character +./printf1.sub: line 298: printf: `M': invalid format character +./printf1.sub: line 301: printf: `y': invalid format character +./printf1.sub: line 304: printf: GNU: invalid number 0 -./printf1.sub: line 302: printf: GNU: invalid number +./printf1.sub: line 306: printf: GNU: invalid number 0 - (foo )(bar ) @@ -296,3 +318,88 @@ x +123x x +123x x +123x x +123x +abcd +ab + 123 + 123 + 173 + 7b + 7B + hello + hello + 123 + 6 +123 -- +123 -- +173 -- +7b -- +7B -- +hello -- +hello -- +123 -- +6 -- +0000000 000 +0000001 +0000000 000 +0000001 +0000000 340 262 207 340 262 263 340 262 277 340 262 225 340 263 206 340 +0000010 262 227 340 262 263 340 263 201 012 +0000019 +0000000 340 262 207 340 262 263 012 +0000007 +0000000 340 262 207 012 +0000004 +0000000 340 262 207 340 262 263 012 +0000007 +0000000 040 040 340 262 207 340 262 263 012 +0000009 +0000000 340 262 207 340 262 263 040 040 055 055 055 012 +000000c +0000000 340 262 207 012 +0000004 +0000000 340 262 207 012 +0000004 +0000000 340 262 207 012 +0000004 +0000000 340 262 207 012 +0000004 +0000000 040 040 040 340 262 207 012 +0000007 +0000000 340 262 207 040 040 040 055 055 055 012 +000000a +[][] +./printf7.sub: line 19: printf: 21474836470: Result too large +[] +./printf7.sub: line 20: printf: 21474836470: Result too large +[X] +./printf7.sub: line 22: printf: 21474836470: Result too large +VAR=[] +./printf7.sub: line 25: printf: 21474836470: Result too large +VAR=[X] +./printf7.sub: line 31: printf: 9223372036854775825: Result too large +[] +./printf7.sub: line 32: printf: 9223372036854775825: Result too large +[X] +./printf7.sub: line 34: printf: 9223372036854775825: Result too large +VAR=[] +./printf7.sub: line 37: printf: 9223372036854775825: Result too large +VAR=[X] +./printf7.sub: line 43: printf: 21474836470: Result too large +[] +./printf7.sub: line 44: printf: 21474836470: Result too large +[X] +./printf7.sub: line 46: printf: 21474836470: Result too large +VAR=[] +./printf7.sub: line 49: printf: 21474836470: Result too large +VAR=[X] +./printf7.sub: line 55: printf: 9223372036854775825: Result too large +[] +./printf7.sub: line 56: printf: 9223372036854775825: Result too large +[X] +./printf7.sub: line 58: printf: 9223372036854775825: Result too large +VAR=[] +./printf7.sub: line 61: printf: 9223372036854775825: Result too large +VAR=[X] +XY +./printf7.sub: line 71: printf: 9223372036854775825: Result too large +XY diff --git a/tests/printf.tests b/tests/printf.tests index df37e47ee..af03960a8 100644 --- a/tests/printf.tests +++ b/tests/printf.tests @@ -22,6 +22,13 @@ printf -- printf "" printf -- "" +# this is an error +printf -x + +# these are errors +printf -v invalid-var 'abc\n' +printf '%s\n%n' abc invalid-var + # in the future this may mean to put the output into VAR, but for # now it is an error # 2005-03-15 no longer an error @@ -60,6 +67,19 @@ printf "%s%10q\n" unquoted quoted printf "%q\n" 'this&that' +# %Q is like %q but treats the precision differently +S="a'b" +S1="${S@Q}" +T=';ls' + +printf 'echo %.2q%q\n' "$S" "$T" +printf 'echo %.2Q%Q\n' "$S" "$T" # note the difference +# a different way to do it +printf 'echo %.*s%q\n' ${#S1} "$S1" "$T" + +printf '%.1Q\n' '**' +printf '%.*Q\n' 1 '**' + # make sure the format string is reused to use up arguments printf "%d " 1 2 3 4 5; printf "\n" @@ -324,11 +344,32 @@ printf -v var "%b" @(hugo); echo "x${var}x" # make sure that missing arguments are always handled like the empty string printf "<%3s><%3b>\n" +# other format specifiers with missing arguments +# 0 +printf '%d\n' +# null char +printf '%c\n' + +printf '%x\n' +printf '%4.2f\n' + +printf '%b' +printf '%q\n' +printf '%Q\n' + +# let's test some out-of-range integer errors for POSIX-specified behavior +TOOBIG=9223372036854775825 +TOOSMALL=-9223372036854775815 + +printf '%d\n' "$TOOBIG" +printf '%d\n' "$TOOSMALL" + # tests variable assignment with -v ${THIS_SH} ./printf1.sub - ${THIS_SH} ./printf2.sub - ${THIS_SH} ./printf3.sub - ${THIS_SH} ./printf4.sub +${THIS_SH} ./printf5.sub +# multibyte characters with %ls/%S and %lc/%C +${THIS_SH} ./printf6.sub +${THIS_SH} ./printf7.sub diff --git a/tests/printf1.sub b/tests/printf1.sub index 2cbbc6a6a..38c5c4e41 100644 --- a/tests/printf1.sub +++ b/tests/printf1.sub @@ -60,6 +60,10 @@ printf "%s" "$vv" printf -v vv "%q\n" 'this&that' printf "%s" "$vv" +# altform with %q will force single-quoting +printf -v vv '%#q\n' no-quotes-needed 'quotes;needed' +printf "%s" "$vv" + # make sure the format string is reused to use up arguments printf -v vv "%d " 1 2 3 4 5 printf "%s" "$vv" @@ -158,7 +162,7 @@ printf "%s" "$vv" printf -v vv "%*b\n" 6 4.4BSD printf "%s" "$vv" -# we handle this crap with homemade code in printf -v vv.def +# we handle this crap with homemade code in printf printf -v vv "%10b\n" 4.4BSD printf "%s" "$vv" printf -v vv -- "--%-10b--\n" 4.4BSD @@ -224,7 +228,7 @@ printf "%s" "$vv" printf -v vv "%6.2g\n" 4.2 printf "%s" "$vv" -# test some of the more esoteric features of POSIX.1 printf -v vv +# test some of the more esoteric features of POSIX.1 printf printf -v vv "%d\n" "'string'" printf "%s" "$vv" printf -v vv "%d\n" '"string"' @@ -293,7 +297,7 @@ printf "%s" "$vv" printf -v vv "%10" printf -v vv "ab%Mcd\n" -# this caused an infinite loop in older versions of printf -v vv +# this caused an infinite loop in older versions of printf printf -v vv "%y" 0 # these should print a warning and `0', according to POSIX.2 diff --git a/tests/quote.right b/tests/quote.right index 303e685dc..bf9aba0dc 100644 --- a/tests/quote.right +++ b/tests/quote.right @@ -72,6 +72,8 @@ string \ string \ string \ string \} +escape\ +escape\ 'weferfds'\''dsfsdf' 'weferfdsdsfsdf' 'weferfds'\''dsfsdf' diff --git a/tests/quote.tests b/tests/quote.tests index 0a0b4afe4..f454f8b08 100644 --- a/tests/quote.tests +++ b/tests/quote.tests @@ -133,6 +133,13 @@ echo ${foo:-'string \'} echo "${foo:-string \\}" echo ${foo:-string \\\}} +: ${TMPDIR:=/tmp} + +${THIS_SH} -c 'echo escape\' +printf 'echo escape\' > $TMPDIR/quote-$$ +${THIS_SH} $TMPDIR/quote-$$ +rm -f $TMPDIR/quote-$$ + ${THIS_SH} ./quote1.sub ${THIS_SH} ./quote2.sub ${THIS_SH} ./quote3.sub diff --git a/tests/quotearray.right b/tests/quotearray.right index e68936598..a3cc93a6b 100644 --- a/tests/quotearray.right +++ b/tests/quotearray.right @@ -1,9 +1,9 @@ declare -A assoc=(["x],b[\$(echo uname >&2)"]="1" ) declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="1" ) declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="2" ) -./quotearray.tests: line 31: ((: 'assoc[x\],b\[\$(echo uname >&2)]++' : syntax error: operand expected (error token is "'assoc[x\],b\[\$(echo uname >&2)]++' ") +./quotearray.tests: line 31: ((: 'assoc[x\],b\[\$(echo uname >&2)]++' : arithmetic syntax error: operand expected (error token is "'assoc[x\],b\[\$(echo uname >&2)]++' ") declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="2" ) -./quotearray.tests: line 34: ((: 'assoc[x\],b\[\$(echo uname >&2)]'++ : syntax error: operand expected (error token is "'assoc[x\],b\[\$(echo uname >&2)]'++ ") +./quotearray.tests: line 34: ((: 'assoc[x\],b\[\$(echo uname >&2)]'++ : arithmetic syntax error: operand expected (error token is "'assoc[x\],b\[\$(echo uname >&2)]'++ ") declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="2" ) declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="3" ) 4 @@ -24,14 +24,14 @@ declare -a a=([0]="12" [1]="42") declare -Ai assoc=(["']"]="3" ["\$var"]="1" ) 105 declare -A assoc=(["\` echo >&2 foo\`"]="42" ["\$( echo >&2 bar)"]="63" ) -./quotearray.tests: line 140: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") -./quotearray.tests: line 144: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") +./quotearray.tests: line 140: x],b[$(echo uname >&2): arithmetic syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") +./quotearray.tests: line 144: x],b[$(echo uname >&2): arithmetic syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") 1 -./quotearray.tests: line 147: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") +./quotearray.tests: line 147: x],b[$(echo uname >&2): arithmetic syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") 1 -./quotearray.tests: line 150: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") +./quotearray.tests: line 150: x],b[$(echo uname >&2): arithmetic syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") 1 -./quotearray.tests: line 153: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") +./quotearray.tests: line 153: x],b[$(echo uname >&2): arithmetic syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)") 1 declare -A assoc 0 @@ -44,7 +44,7 @@ declare -A assoc=(["\` echo >&2 foo\`"]="128" [0]="0" ["]"]="12" ["x],b[\$(echo foo 0 0 -./quotearray1.sub: line 68: 0\],b\[1: syntax error: invalid arithmetic operator (error token is "\],b\[1") +./quotearray1.sub: line 68: 0\],b\[1: arithmetic syntax error: invalid arithmetic operator (error token is "\],b\[1") declare -a array 0 0 diff --git a/tests/read.right b/tests/read.right index e21fcb5f2..9c7fd33bd 100644 --- a/tests/read.right +++ b/tests/read.right @@ -9,6 +9,8 @@ a. -\ a b\- -\-a b\- -\ a b\- +argv[1] = <abc> +argv[1] = <abc\> argv[1] = <^A> argv[1] = <^A> argv[1] = <^?> @@ -29,6 +31,8 @@ argv[1] = < foo> argv[1] = <foo> argv[1] = <foo> argv[1] = < foo> +./read.tests: line 101: b: readonly variable +a = a b = c = stat = 2 a = abcdefg xyz a = xyz @@ -43,6 +47,7 @@ unset or null 3 ./read2.sub: line 45: read: -3: invalid timeout specification 1 +abcde abcde abcde ./read3.sub: line 17: read: -1: invalid number @@ -51,6 +56,7 @@ defg ab abc # +0 while read -u 3 var do echo "$var" @@ -83,3 +89,6 @@ one two three four one two three four +IFS=[,] var=[abc] rest=[def,ghi] +IFS=[] var=[abc] rest=[def,ghi] +IFS=[ ] var=[ abc] rest=[def,ghi ] diff --git a/tests/read.tests b/tests/read.tests index 6132b6fe8..c06cd7a76 100644 --- a/tests/read.tests +++ b/tests/read.tests @@ -26,6 +26,10 @@ echo "\ a b\ " | ( read -r x ; echo -"$x"- ) echo " \ a b\ " | ( read -r x y ; echo -"$x"-"$y"- ) echo " \ a b\ " | ( read -r x ; echo -"$x"- ) +# input ending in backslash +printf 'abc\' | { read var ; recho "$var"; } +printf 'abc\' | { read -r var ; recho "$var"; } + # make sure that CTLESC and CTLNUL are passed through correctly echo $'\001' | ( read var ; recho "$var" ) echo $'\001' | ( read ; recho "$REPLY" ) @@ -92,6 +96,15 @@ echo " foo" | { IFS=$' \t\n' ; read line; recho "$line"; } echo " foo" | { IFS=$':' ; read line; recho "$line"; } +# this leaves `b' readonly +readonly b +read a b c <<EOF +a b c +EOF + +# the latest POSIX draft says $? should be > 1 +echo a = $a b = $b c = $c stat = $? + # test read -d delim behavior ${THIS_SH} ./read1.sub @@ -115,3 +128,9 @@ ${THIS_SH} ./read7.sub # test behavior of read -n and read -d on regular files ${THIS_SH} ./read8.sub + +# test behavior of trailing IFS whitespace - POSIX conformance +${THIS_SH} ./read9.sub + +# test behavior of read builtin modifying $IFS +${THIS_SH} ./read10.sub diff --git a/tests/read2.sub b/tests/read2.sub index d35301153..bc26ac6d6 100644 --- a/tests/read2.sub +++ b/tests/read2.sub @@ -53,7 +53,7 @@ echo abcde | { echo $a } -read -t .0001 a <<<abcde +read -t .001 a <<<abcde echo $a # this is the original test that prompted the change to sh_timers @@ -70,3 +70,8 @@ done cd $OLDPWD rm -f $TMPDIR/a.pipe # paranoia + +TMOUT=.001 +read a <<<abcde +echo $a + diff --git a/tests/read3.sub b/tests/read3.sub index 8a2404013..7bd3d0e08 100644 --- a/tests/read3.sub +++ b/tests/read3.sub @@ -36,3 +36,7 @@ echo abc | { read -n 1 < $0 echo "$REPLY" + +# succeed if fd is valid +read -n 0 var <<<'abc' +echo $? diff --git a/tests/read7.sub b/tests/read7.sub index 553070f46..17e4d4fd7 100644 --- a/tests/read7.sub +++ b/tests/read7.sub @@ -57,10 +57,9 @@ echo abcde | { echo $a } -read -e -t .0001 a <<<abcde +read -e -t .001 a <<<abcde echo $a set -o posix read -t 0.1 a </dev/tty echo $a - diff --git a/tests/redir.right b/tests/redir.right index 8db104142..c5d3779cf 100644 --- a/tests/redir.right +++ b/tests/redir.right @@ -1,9 +1,13 @@ abc -./redir.tests: line 28: /tmp/redir-test: cannot overwrite existing file +./redir.tests: line 31: /tmp/redir-test: cannot overwrite existing file abc def def -./redir.tests: line 44: $z: ambiguous redirect +ghi +./redir.tests: line 52: -1: ambiguous redirect +./redir.tests: line 53: exec: -1: invalid option +exec: usage: exec [-cl] [-a name] [command [argument ...]] [redirection ...] +./redir.tests: line 58: $z: ambiguous redirect Point 1 Point 2 to a @@ -44,7 +48,7 @@ kl ab cd cd -./redir.tests: line 170: redir1.*: No such file or directory +./redir.tests: line 184: redir1.*: No such file or directory # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -114,6 +118,8 @@ c4 is 4 fd 10 fd 8 fd 10 +next fd +fd 10 fd 8 1 2 @@ -154,10 +160,25 @@ foo 1 7 after: 42 -./redir11.sub: line 53: $(ss= declare -i ss): ambiguous redirect +./redir11.sub: line 55: $(ss= declare -i ss): ambiguous redirect after: 42 a+=3 foo foo -./redir11.sub: line 75: 42: No such file or directory +./redir11.sub: line 77: 42: No such file or directory 42 +./redir12.sub: line 27: unwritable-file: Permission denied +1 x = +./redir12.sub: line 31: unwritable-file: cannot overwrite existing file +1 x = +./redir12.sub: line 34: unwritable-file: Permission denied +1 x = +./redir12.sub: line 38: unreadable-file: Permission denied +./redir12.sub: line 44: unwritable-file: Permission denied +got error ERR +after ERR trap: 1 +./redir12.sub: line 48: unwritable-file: Permission denied +./redir12.sub: line 53: unreadable-file: Permission denied +got error ERR +./redir12.sub: line 56: unreadable-file: Permission denied +/tmp diff --git a/tests/redir.tests b/tests/redir.tests index 63bd4d374..a17da0fc3 100644 --- a/tests/redir.tests +++ b/tests/redir.tests @@ -19,25 +19,39 @@ export LANG=C # catch-all for remaining untested redirection stuff set +o posix +# this should succeed silently +cat </dev/null >/dev/null 2>&1 + echo abc > /tmp/redir-test cat /tmp/redir-test set -o noclobber -#this should be an error +#this should be an error, so it needs the same fixed filename echo def > /tmp/redir-test cat /tmp/redir-test # but this should succeed -echo def > /tmp/redir-test-2 -cat /tmp/redir-test-2 +echo def > $TMPDIR/redir-test-2 +cat $TMPDIR/redir-test-2 # and so should this echo def >| /tmp/redir-test cat /tmp/redir-test +# this should work as normal +echo ghi >| $TMPDIR/redir-test-3 +cat $TMPDIR/redir-test-3 + set +o noclobber -rm /tmp/redir-test /tmp/redir-test-2 +rm -f /tmp/redir-test +rm -f $TMPDIR/redir-test-2 $TMPDIR/redir-test-3 + +# these are errors +fd=-1 +exec <&$fd +exec $fd</dev/null +unset -v fd # this should be an error z="a b" @@ -71,7 +85,7 @@ cat $TMPDIR/bash-c echo "Point 5" # clean up before running scripts -exec 4>&- 5>&- 6<&- +exec 4>&- 5>&- 6<&$unset- # ksh93 quirk with unset variable rm -f $TMPDIR/bash-a $TMPDIR/bash-b $TMPDIR/bash-c @@ -194,7 +208,7 @@ ${THIS_SH} ./redir7.sub ${THIS_SH} ./redir8.sub exec 9>&2 -command exec 2>$TMPDIR/foo-$$ +command exec 2>>$TMPDIR/foo-$$ echo whatsis >&2 echo cat /tmp/foo cat $TMPDIR/foo-$$ @@ -203,7 +217,8 @@ exec 2>&9 exec 9>&- ${THIS_SH} ./redir9.sub - ${THIS_SH} ./redir10.sub - ${THIS_SH} ./redir11.sub +${THIS_SH} ./redir12.sub + +${THIS_SH} < ./redir13.in diff --git a/tests/redir11.sub b/tests/redir11.sub index d417cdb60..ca9854cdc 100644 --- a/tests/redir11.sub +++ b/tests/redir11.sub @@ -34,6 +34,8 @@ a=4 b=7 ss=4 declare -i ss a=4 b=7 foo echo after: $a +exec 7>&- 4>&- + unset a a=4 echo foo 2>&1 >&$(foo) | { grep -q 'Bad file' || echo 'redir11 bad 3'; } a=1 echo foo 2>&1 >&$(foo) | { grep -q 'Bad file' || echo 'redir11 bad 4'; } diff --git a/tests/redir12.sub b/tests/redir12.sub index 0e68f3b23..7e1f3eea2 100644 --- a/tests/redir12.sub +++ b/tests/redir12.sub @@ -1,5 +1,59 @@ -# make sure we can wait for the last process substitution, since it sets $! -cat <(exit 123) >/dev/null +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# -wait "$!" -echo $? +# failing redirections with various compound commands and their effect on +# set -e and the ERR trap + +: ${TMPDIR:=/tmp} +TDIR=$TMPDIR/redir-fail-$$ +mkdir $TDIR +cd $TDIR || exit 1 + +touch unwritable-file unreadable-file +chmod a-w unwritable-file +chmod a-r unreadable-file + +while [ -z "x" ]; do x=4; done > unwritable-file +echo $? x = $x + +set -o noclobber +while [ -z "x" ]; do x=4; done > unwritable-file +echo $? x = $x +# test priority of noclobber and permission denied +while [ -z "x" ]; do x=4; done >| unwritable-file +echo $? x = $x +set +o noclobber + +while [ -z "x" ]; do x=4; done < unreadable-file + +# ERR trap is not fatal unless set -e is also enabled +(trap 'echo got error ERR' ERR +# have to undo redirections on redirection error +while [ -z "x" ]; do x=4; done </dev/null > unwritable-file +echo after ERR trap: $?) + +(set -e +for f in 1 2; do x=4; done > unwritable-file +echo after set -e: $?) + +(set -e +trap 'echo got error ERR' ERR +for f in 1 2; do x=4; done < unreadable-file +echo after set -e with ERR trap: $?) + +# the subshell never gets executed +( echo wow this is bad ) < unreadable-file + +cd $OLDPWD +rm -rf $TDIR diff --git a/tests/redir8.sub b/tests/redir8.sub index d2d700cba..314cb1c0f 100644 --- a/tests/redir8.sub +++ b/tests/redir8.sub @@ -22,6 +22,11 @@ ${THIS_SH} -c 'exec 8>&1; echo fd 8 >&8' 8>u cat u rm -f u +# command preceding exec acts as if `command' isn't there +${THIS_SH} -c 'command exec 10>&1; echo fd 10 >&10; echo next fd' 10>u +cat u +rm -f u + exec 10>u exec 10>&1; echo 'fd 10' >&10 cat u diff --git a/tests/rsh.right b/tests/rsh.right index 5f64049b6..e9a4ae6a1 100644 --- a/tests/rsh.right +++ b/tests/rsh.right @@ -8,12 +8,13 @@ ./rsh.tests: line 26: PATH: readonly variable ./rsh.tests: line 27: SHELL: readonly variable ./rsh.tests: line 28: /bin/sh: restricted: cannot specify `/' in command names -./rsh.tests: line 30: .: ./source.sub3: restricted -./rsh.tests: line 33: /tmp/restricted: restricted: cannot redirect output -./rsh.tests: line 37: /tmp/restricted: restricted: cannot redirect output -./rsh.tests: line 42: command: -p: restricted -./rsh.tests: line 44: set: +r: invalid option +./rsh.tests: line 29: /bin/cat: restricted: cannot specify `/' in command names +./rsh.tests: line 31: .: ./source.sub3: restricted +./rsh.tests: line 34: /tmp/restricted: restricted: cannot redirect output +./rsh.tests: line 38: /tmp/restricted: restricted: cannot redirect output +./rsh.tests: line 43: command: -p: restricted +./rsh.tests: line 45: set: +r: invalid option set: usage: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...] -./rsh.tests: line 45: set: restricted: invalid option name -./rsh.tests: line 47: exec: restricted +./rsh.tests: line 46: set: restricted: invalid option name +./rsh.tests: line 48: exec: restricted ./rsh.tests: after exec diff --git a/tests/rsh.tests b/tests/rsh.tests index 0d06fa1e5..491608bff 100644 --- a/tests/rsh.tests +++ b/tests/rsh.tests @@ -26,6 +26,7 @@ cd / PATH=$PATH:/usr/local/bin SHELL=/bin/sh /bin/sh -c 'echo /bin/sh executed' +/bin/cat foo | cat . ./source.sub3 diff --git a/tests/run-all b/tests/run-all index 1f7492395..19e3229ba 100644 --- a/tests/run-all +++ b/tests/run-all @@ -18,7 +18,7 @@ export TMPDIR # basic /bin/sh syntax -SUFFIX=`${THIS_SH} -c 'echo $(( $RANDOM + $BASHPID ))'` +SUFFIX=$( ${THIS_SH} -c 'echo $(( $RANDOM + $BASHPID ))' ) BASH_TSTOUT=${TMPDIR}/bashtst-$SUFFIX # for now export BASH_TSTOUT diff --git a/tests/run-braces b/tests/run-braces index 554e21839..1045d1f52 100644 --- a/tests/run-braces +++ b/tests/run-braces @@ -1,2 +1,2 @@ -${THIS_SH} ./braces.tests > ${BASH_TSTOUT} +${THIS_SH} ./braces.tests > ${BASH_TSTOUT} 2>&1 diff ${BASH_TSTOUT} braces.right && rm -f ${BASH_TSTOUT} diff --git a/tests/run-cond b/tests/run-cond index 603e73972..2cbc86ac6 100644 --- a/tests/run-cond +++ b/tests/run-cond @@ -2,6 +2,8 @@ echo "warning: all of these tests will fail if the conditional command has not" echo "warning: been compiled into the shell" >&2 echo "warning: some of these tests will fail if extended pattern matching has not" >&2 echo "warning: been compiled into the shell" >&2 +echo "warning: the text of system error messages may vary between systems and" >&2 +echo "warning: produce diff output." >&2 ${THIS_SH} ./cond.tests > ${BASH_TSTOUT} 2>&1 diff ${BASH_TSTOUT} cond.right && rm -f ${BASH_TSTOUT} diff --git a/tests/run-extglob b/tests/run-extglob index 149e34af8..a1464aa7e 100644 --- a/tests/run-extglob +++ b/tests/run-extglob @@ -1,4 +1,4 @@ PATH=$PATH:`pwd` export PATH -${THIS_SH} ./extglob.tests | grep -v '^expect' > ${BASH_TSTOUT} +${THIS_SH} ./extglob.tests 2>&1 | grep -v '^expect' > ${BASH_TSTOUT} diff ${BASH_TSTOUT} extglob.right && rm -f ${BASH_TSTOUT} diff --git a/tests/run-minimal b/tests/run-minimal index 0c3a2e5fb..ece8cffe9 100644 --- a/tests/run-minimal +++ b/tests/run-minimal @@ -22,7 +22,7 @@ export TMPDIR # basic /bin/sh syntax -SUFFIX=`${THIS_SH} -c 'echo $(( $RANDOM + $BASHPID ))'` +SUFFIX=$( ${THIS_SH} -c 'echo $(( $RANDOM + $BASHPID ))' ) BASH_TSTOUT=${TMPDIR}/bashtst-$SUFFIX # for now export BASH_TSTOUT diff --git a/tests/run-set-x b/tests/run-set-x index b999e6980..e6e2c49f8 100644 --- a/tests/run-set-x +++ b/tests/run-set-x @@ -2,7 +2,7 @@ #$Id: run-set-x,v 1.1 2002/12/09 13:12:37 rockyb Exp $ TEST_NAME='set-x' -TEST_FILE="/tmp/${TEST_NAME}.check" +TEST_FILE="${BASH_TSTOUT}" ${THIS_SH} ./${TEST_NAME}.tests > $TEST_FILE 2>&1 < /dev/null set -f diff $TEST_FILE ${TEST_NAME}.right && rm -f $TEST_FILE diff --git a/tests/set-e.right b/tests/set-e.right index e2a9f2c4b..d5bce867d 100644 --- a/tests/set-e.right +++ b/tests/set-e.right @@ -22,6 +22,8 @@ until succeeded: 4 if succeeded AND list succeeded OR list succeeded +00 01 02 03 04 05 06 07 08 09 +00 01 02 03 04 05 06 07 08 09 ! succeeded eval succeeded ! eval succeeded -- 1 diff --git a/tests/set-e.tests b/tests/set-e.tests index 3e0d66981..a0311be43 100644 --- a/tests/set-e.tests +++ b/tests/set-e.tests @@ -80,6 +80,19 @@ echo AND list succeeded false || echo OR list succeeded +# more compound commands containing failing commands +for (( f=0; f<10; f++ )); do + printf '%.2d ' $f + false +done && echo done +echo + +for f in {0..9}; do + printf '%.2d ' $f + false +done && echo done +echo + ! false echo ! succeeded diff --git a/tests/set-x.right b/tests/set-x.right index 259602e5e..7b14626d2 100644 --- a/tests/set-x.right +++ b/tests/set-x.right @@ -30,11 +30,16 @@ + foo+=two + echo onetwo onetwo ++ foo=one ++ echo onetwo +onetwo + set +x +./set-x1.sub: line 18: BASH_XTRACEFD: 4: invalid value for trace file descriptor 1 2 3 4 ++ exec + for f in a b c d e + echo a a @@ -58,3 +63,10 @@ TRACEFILE: + echo 4 + unset BASH_XTRACEFD ===== ++ metas=(\| \& \; \( \) \< \> ' ' ' ' ' +') ++ n=($@) ++ : '|' '&' ';' '(' ')' '<' '>' ' ' $'\t' $'\n' ++ DEFAULT_IFS=$' \t\n' ++ set +x +declare -a metas=([0]="|" [1]="&" [2]=";" [3]="(" [4]=")" [5]="<" [6]=">" [7]=" " [8]=$'\t' [9]=$'\n') diff --git a/tests/set-x.tests b/tests/set-x.tests index 3723552dc..b0b2cccac 100644 --- a/tests/set-x.tests +++ b/tests/set-x.tests @@ -32,7 +32,12 @@ foo=one foo+=two echo $foo +foo=one echo $foo + set +x # test BASH_XTRACEFD ${THIS_SH} ./set-x1.sub + +# compound assignment printing +${THIS_SH} ./set-x2.sub diff --git a/tests/set-x1.sub b/tests/set-x1.sub index cb7fa8270..042652683 100644 --- a/tests/set-x1.sub +++ b/tests/set-x1.sub @@ -15,6 +15,8 @@ TRACEFILE=$TMPDIR/bash-trace-$$ trap 'rm -f $TRACEFILE' 0 1 2 3 6 15 +BASH_XTRACEFD=4 # error, invalid FD + exec 4>$TRACEFILE BASH_XTRACEFD=4 @@ -26,6 +28,7 @@ echo 3 echo 4 unset BASH_XTRACEFD +exec 4<&- # no unset hooks yet for f in a b c d e; do echo $f ; done diff --git a/tests/shopt.right b/tests/shopt.right index d617c1d72..f3df307e2 100644 --- a/tests/shopt.right +++ b/tests/shopt.right @@ -2,6 +2,7 @@ shopt: usage: shopt [-pqsu] [-o] [optname ...] -- shopt -u autocd +shopt -u array_expand_once shopt -u assoc_expand_once shopt -u cdable_vars shopt -s cdspell @@ -79,6 +80,7 @@ shopt -s promptvars shopt -s sourcepath -- shopt -u autocd +shopt -u array_expand_once shopt -u assoc_expand_once shopt -u cdable_vars shopt -u checkhash @@ -123,6 +125,7 @@ shopt -u varredir_close shopt -u xpg_echo -- autocd off +array_expand_once off assoc_expand_once off cdable_vars off checkhash off @@ -304,9 +307,5 @@ xtrace off -- ./shopt.tests: line 106: shopt: xyz1: invalid shell option name ./shopt.tests: line 107: shopt: xyz1: invalid option name -28c28 -< globskipdots off ---- -> globskipdots on expand_aliases on expand_aliases on diff --git a/tests/test.right b/tests/test.right index 4be22f4bb..522dd6e2c 100644 --- a/tests/test.right +++ b/tests/test.right @@ -1,3 +1,5 @@ +t +1 t -a noexist 1 t -a run-all @@ -136,6 +138,8 @@ t 700 -le 1000 -a -n "1" -a "20" = "20" 0 t ! \( 700 -le 1000 -a -n "1" -a "20" = "20" \) 1 +t -n xx -a -z "" -a -t 0 -a -t +0 t /tmp/abc -nt /tmp/def 1 t /tmp/abc -ot /tmp/def @@ -148,6 +152,18 @@ t /tmp/abc -ef /tmp/def 1 t /tmp/abc -ef /tmp/ghi 0 +t noexist -ot /tmp/abc +0 +t /tmp/abc -ot noexist +1 +t noexist -nt /tmp/abc +1 +t noexist -ef /tmp/abc +1 +t -N noexist +1 +t -N /tmp/abc +1 t -r /dev/fd/0 0 t -w /dev/fd/1 @@ -186,6 +202,8 @@ t -v set 0 t -v set 0 +t -R UID +1 t xx -a yy 0 t xx -o "" @@ -216,6 +234,8 @@ t ( -E ) 0 t ( "" ) 1 +t ( -n xx ) +0 t ! -z "$z" 0 t ! -n "$z" @@ -235,28 +255,28 @@ t -G /tmp/test.group t -h /tmp/test.symlink 0 t 4+3 -eq 7 -./test.tests: line 26: test: 4+3: integer expression expected +./test.tests: line 26: test: 4+3: integer expected 2 b 4-5 -eq 7 -./test.tests: line 20: [: 4+3: integer expression expected +./test.tests: line 20: [: 4-5: integer expected 2 t 9 -eq 4+5 -./test.tests: line 26: test: 4+5: integer expression expected +./test.tests: line 26: test: 4+5: integer expected 2 b 9 -eq 4+5 -./test.tests: line 20: [: 4+5: integer expression expected +./test.tests: line 20: [: 4+5: integer expected 2 t A -eq 7 -./test.tests: line 26: test: A: integer expression expected +./test.tests: line 26: test: A: integer expected 2 b A -eq 7 -./test.tests: line 20: [: A: integer expression expected +./test.tests: line 20: [: A: integer expected 2 t 9 -eq B -./test.tests: line 26: test: B: integer expression expected +./test.tests: line 26: test: B: integer expected 2 b 9 -eq B -./test.tests: line 20: [: B: integer expression expected +./test.tests: line 20: [: B: integer expected 2 t ( 1 = 2 ./test.tests: line 26: test: `)' expected @@ -274,23 +294,44 @@ b ( 1 = 2 2 ./test.tests: line 26: test: too many arguments 2 -./test.tests: line 434: [: missing `]' +./test.tests: line 26: test: syntax error: `-t' unexpected +2 +./test.tests: line 26: test: argument expected +2 +./test.tests: line 473: [: missing `]' +2 +./test.tests: line 475: [: missing `]' 2 ./test.tests: line 26: test: (: unary operator expected 2 t -t a -1 +./test.tests: line 26: test: a: integer expected +2 t -t addsds -1 +./test.tests: line 26: test: addsds: integer expected +2 t -t 42 1 t -t /dev/tty -1 +./test.tests: line 26: test: /dev/tty: integer expected +2 t -t /dev/tty4 -1 +./test.tests: line 26: test: /dev/tty4: integer expected +2 t -t /dev/tty4444444... +./test.tests: line 26: test: /dev/tty4444444...: integer expected +2 +./test.tests: line 26: test: : integer expected +2 1 -1 +0 +0 +./test.tests: line 26: test: `)' expected +2 +./test.tests: line 26: test: (: unary operator expected +2 +./test.tests: line 26: test: `)' expected +2 t -p /dev/fd/6 1 t -p /dev/fd/6 diff --git a/tests/test.tests b/tests/test.tests index df4b85095..412e78347 100644 --- a/tests/test.tests +++ b/tests/test.tests @@ -27,6 +27,9 @@ t() echo $? } +echo 't' +t + echo 't -a noexist' t -a noexist echo 't -a run-all' @@ -244,6 +247,10 @@ t 700 -le 1000 -a -n "1" -a "20" = "20" echo 't ! \( 700 -le 1000 -a -n "1" -a "20" = "20" \)' t ! \( 700 -le 1000 -a -n "1" -a "20" = "20" \) +# more traditional parsing algorithm +echo 't -n xx -a -z "" -a -t 0 -a -t' +t -n xx -a -z "" -a -t 0 -a -t + touch /tmp/abc sleep 2 touch /tmp/def @@ -265,6 +272,29 @@ t /tmp/abc -ef /tmp/ghi rm /tmp/abc /tmp/def /tmp/ghi +touch /tmp/abc + +echo 't noexist -ot /tmp/abc' +t noexist -ot /tmp/abc + +echo 't /tmp/abc -ot noexist' +t /tmp/abc -ot noexist + +echo 't noexist -nt /tmp/abc' +t noexist -nt /tmp/abc + +echo 't noexist -ef /tmp/abc' +t noexist -ef /tmp/abc + +echo 't -N noexist' +t -N noexist + +# false; it's been read since modified +echo 't -N /tmp/abc' +t -N /tmp/abc + +rm -f /tmp/abc + echo 't -r /dev/fd/0' t -r /dev/fd/0 echo 't -w /dev/fd/1' @@ -317,6 +347,9 @@ set=set echo 't -v set' t -v set +echo 't -R UID' +t -R UID + echo 't xx -a yy' t xx -a yy echo 't xx -o ""' @@ -349,6 +382,8 @@ echo 't ( -E )' t \( -E \) echo 't ( "" )' t \( "" \) +echo 't ( -n xx )' +t \( -n xx \) z=42 @@ -397,7 +432,7 @@ fi echo "t 4+3 -eq 7" t 4+3 -eq 7 echo "b 4-5 -eq 7" -b 4+3 -eq 7 +b 4-5 -eq 7 echo "t 9 -eq 4+5" t 9 -eq 4+5 @@ -430,9 +465,15 @@ t -A v t 4 -eq 4 -a 2 -ne 5 -a 4 -ne # too many arguments t 4 -eq 4 -a 3 4 +# syntax error +t -n xx -a -z "" -a -t 0 -t +# argument expected +t -n xx -a -z "" -a -t 0 -a [ echo $? +[ -n xx +echo $? t \( \) @@ -453,4 +494,15 @@ t -t /dev/tty4444444... # fixed in bash-4.0-beta t -t ' ' +# ambiguous parenthesized test expressions with more than 4 arguments + +t true -a \( ! -a \) +t true -a \( -n foo \) +t true -a \( foo \) + +t 1 = 1 -a \( \) +t \( \) + +t 1 = 1 -a \( \) -a -n "" + ${THIS_SH} ./test1.sub diff --git a/tests/test1.sub b/tests/test1.sub index d25e0dc7c..3625bdeb1 100644 --- a/tests/test1.sub +++ b/tests/test1.sub @@ -15,7 +15,7 @@ # return different results : ${TMPDIR:=/tmp} -trap 'rm -f ${TMPDIR}/pipe' 0 1 2 3 6 15 +trap 'rm -f ${TMPDIR}/pipe' EXIT HUP INT QUIT ABRT TERM exec 6>&- echo "t -p /dev/fd/6" diff --git a/tests/tilde.right b/tests/tilde.right index 1301c0b07..dc7dcb578 100644 --- a/tests/tilde.right +++ b/tests/tilde.right @@ -1,4 +1,5 @@ ~chet +~chet/foo /usr/xyz/foo ~chet/foo ~chet/foo diff --git a/tests/tilde.tests b/tests/tilde.tests index 20268a731..f3228b085 100644 --- a/tests/tilde.tests +++ b/tests/tilde.tests @@ -21,6 +21,7 @@ set +o posix HOME=/usr/xyz SHELL=~/bash echo ~ch\et +echo ~ch\et/foo echo ~/"foo" echo "~chet"/"foo" echo \~chet/"foo" diff --git a/tests/trap.right b/tests/trap.right index 4338ff4cb..4f3225349 100644 --- a/tests/trap.right +++ b/tests/trap.right @@ -105,11 +105,33 @@ fn after 1 fn after 2 +before +after +CHLD +CHLD +CHLD +CHLD +BASH_TRAPSIG = USR1 +func=7 +222 +exit=0 +exit=0 +A +In trap-argument: last command preceding the trap action +In a function call: last command in the trap action caught a child death caught a child death caught a child death trap -- 'echo caught a child death' SIGCHLD +echo caught a child death +./trap.tests: line 118: trap: cannot specify both -p and -P +./trap.tests: line 119: trap: -P requires at least one signal name +trap: usage: trap [-Plp] [[action] signal_spec ...] +./trap.tests: line 121: trap: -x: invalid option +trap: usage: trap [-Plp] [[action] signal_spec ...] trap -- 'echo exiting' EXIT trap -- 'echo aborting' SIGABRT trap -- 'echo caught a child death' SIGCHLD +trap: usage: trap [-Plp] [[action] signal_spec ...] +echo exiting exiting diff --git a/tests/trap.tests b/tests/trap.tests index 4f808be3e..8e38cb359 100644 --- a/tests/trap.tests +++ b/tests/trap.tests @@ -14,7 +14,7 @@ # test the trap code trap 'echo exiting' 0 -trap 'echo aborting' 1 2 3 6 15 +trap 'echo aborting' HUP INT QUIT ABRT TERM # make sure a user-specified subshell runs the exit trap, but does not # inherit the exit trap from a parent shell @@ -90,6 +90,15 @@ ${THIS_SH} ./trap4.sub # Return trap issues ${THIS_SH} ./trap6.sub +# eval and ERR trap +${THIS_SH} ./trap7.sub + +# SIGCHLD traps +${THIS_SH} ./trap8.sub + +# return without argument in trap string +${THIS_SH} ./trap9.sub + # # show that setting a trap on SIGCHLD is not disastrous. # @@ -103,6 +112,13 @@ sleep 7 & sleep 6 & sleep 5 & wait trap -p SIGCHLD +trap -P SIGCHLD + +# all errors +trap -p -P +trap -P +trap '' +trap -x # Now reset some of the signals the shell handles specially back to # their default values (with or without the SIG prefix) @@ -112,3 +128,12 @@ trap trap - SIGCHLD wait + +trap 512 # error +trap 0 # revert +trap -p EXIT + +trap 'echo exiting' 0 +trap -P EXIT + +exit diff --git a/tests/trap2.sub b/tests/trap2.sub index bd9a76be8..f5567db0a 100755 --- a/tests/trap2.sub +++ b/tests/trap2.sub @@ -54,6 +54,8 @@ if [ -x /bin/false ]; then FALSE=/bin/false elif [ -x /usr/bin/false ]; then FALSE=/usr/bin/false +elif [ -x /usr/local/bin/false ]; then + FALSE=/usr/local/bin/false else FALSE='command false' fi diff --git a/tests/trap6.sub b/tests/trap6.sub index 72685580d..9dbb0d6dc 100644 --- a/tests/trap6.sub +++ b/tests/trap6.sub @@ -26,3 +26,14 @@ fn echo after 2 unset -f fn + +# since this sets the exit trap, it has to go last + +set +o functrace +# posix interp 1602 +ReturnFalse() +{ + false ; return +} + +trap 'ReturnFalse && echo "woops"' EXIT diff --git a/tests/type.right b/tests/type.right index bbc228e85..957bc97d1 100644 --- a/tests/type.right +++ b/tests/type.right @@ -1,6 +1,7 @@ ./type.tests: line 22: type: -r: invalid option type: usage: type [-afptP] name [name ...] ./type.tests: line 25: type: notthere: not found +./type.tests: line 29: command: notthere: not found function keyword builtin @@ -24,21 +25,21 @@ func () } while while is a shell keyword -./type.tests: line 56: type: m: not found -alias m='more' -alias m='more' -m is aliased to `more' +./type.tests: line 59: type: morealias: not found +alias morealias='more' +alias morealias='more' +morealias is aliased to `more' alias -alias m='more' -alias m='more' -alias m='more' -m is aliased to `more' +alias morealias='more' +alias morealias='more' +alias morealias='more' +morealias is aliased to `more' builtin builtin is a shell builtin /bin/sh /bin/sh is /bin/sh -./type.tests: line 78: type: func: not found -./type.tests: line 80: type: m: not found +./type.tests: line 81: type: func: not found +./type.tests: line 83: type: m: not found /bin/sh /tmp/bash bash is hashed (/tmp/bash) @@ -103,7 +104,7 @@ bb () foo bar EOF - ) + ); echo after subshell } mkcoprocs is a function @@ -114,13 +115,13 @@ mkcoprocs () producer 1 EOF1 - } + }; coproc b { cat <<EOF2 producer 2 EOF2 - } + }; echo "coprocs created" } mkcoprocs is a function @@ -130,6 +131,17 @@ mkcoprocs () heredoc body EOF - ) + ); echo "coprocs created" } +mkcoprocs is a function +mkcoprocs () +{ + coproc cat -u - & read -u ${COPROC[0]} msg +} +cat is /bin/cat +cat is aliased to `echo cat' +/bin/cat +break is a shell builtin +break is a special shell builtin +./e diff --git a/tests/type.tests b/tests/type.tests index fd39c18a3..48c97d7ed 100644 --- a/tests/type.tests +++ b/tests/type.tests @@ -21,11 +21,12 @@ type # this should be a usage error type -r ${THIS_SH} -# these should behave identically +# these should behave identically, but POSIX says command -v is silent if the name is not found type notthere command -v notthere -alias m=more +# but this will produce an error message +command -V notthere unset -f func 2>/dev/null func() { echo this is func; } @@ -49,24 +50,26 @@ command -V func command -v while command -V while +alias morealias=more + # the following two lines should produce the same output # post-3.0 patch makes command -v silent, as posix specifies # first test with alias expansion off (should all fail or produce no output) -type -t m -type m -command -v m +type -t morealias +type morealias +command -v morealias alias -p -alias m +alias morealias # then test with alias expansion on shopt -s expand_aliases -type m -type -t m -command -v m +type morealias +type -t morealias +command -v morealias alias -p -alias m +alias morealias -command -V m +command -V morealias shopt -u expand_aliases command -v builtin @@ -76,7 +79,7 @@ command -V /bin/sh unset -f func type func -unalias m +unalias morealias type m hash -r @@ -102,9 +105,7 @@ f() { type f | cat -v ${THIS_SH} type1.sub - ${THIS_SH} type2.sub - ${THIS_SH} type3.sub - ${THIS_SH} type4.sub +${THIS_SH} type5.sub diff --git a/tests/type4.sub b/tests/type4.sub index 937f9980c..cff16ac3c 100644 --- a/tests/type4.sub +++ b/tests/type4.sub @@ -54,3 +54,13 @@ echo "coprocs created" } type mkcoprocs + +unset -f mkcoprocs + +# make sure that simple commands are printed without the coproc name +mkcoprocs () +{ + coproc cat -u - & + read -u ${COPROC[0]} msg +} +type mkcoprocs diff --git a/tests/unicode1.sub b/tests/unicode1.sub index 713ab40f0..efd704df7 100644 --- a/tests/unicode1.sub +++ b/tests/unicode1.sub @@ -11,45 +11,27 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # +# Originally donated by John Kearney <dethrophes@web.de> Tue, 21 Feb 2012 +# Updates from Grisha Levit <grishalevit@gmail.com> 22 Nov 2023 +# unset LC_ALL ErrorCnt=0 TestCnt=0 - function check_valid_var_name { - case "${1:?Missing Variable Name}" in - [!a-zA-Z_]* | *[!a-zA-Z_0-9]* ) return 3;; - esac - } - # get_array_element VariableName ArrayName ArrayElement - function get_array_element { - check_valid_var_name "${1:?Missing Variable Name}" || return $? - check_valid_var_name "${2:?Missing Array Name}" || return $? - eval "${1}"'="${'"${2}"'["${3:?Missing Array Index}"]}"' - } - # unset_array_element VarName ArrayName - function get_array_element_cnt { - check_valid_var_name "${1:?Missing Variable Name}" || return $? - check_valid_var_name "${2:?Missing Array Name}" || return $? - eval "${1}"'="${#'"${2}"'[@]}"' - } - - function TestCodePage { local TargetCharset="${1:?Missing Test charset}" - local EChar RChar TCnt - get_array_element_cnt TCnt "${2:?Missing Array Name}" - for (( x=1 ; x<${TCnt} ; x++ )); do - get_array_element EChar "${2}" ${x} - if [ -n "${EChar}" ]; then + local EChar RChar Uval x + local -n Array=${2:?Missing Array Name} + for x in "${!Array[@]}"; do let TestCnt+=1 + EChar=${Array[$x]} printf -v UVal '\\U%08x' "${x}" LC_CTYPE=${TargetCharset} printf -v RChar "${UVal}" 2>/dev/null if [ "${EChar}" != "${RChar}" ]; then let ErrorCnt+=1 - printf "${TargetCharset}: Error Encoding U+%08X to ${TL} [ \"%q\" != \"%q\" ]\n" "${x}" "${EChar}" "${RChar}" + printf "%s: Error Encoding U+%08X [ \"%q\" != \"%q\" ]\n" "${TargetCharset}" "${x}" "${EChar}" "${RChar}" fi - fi done } @@ -118,8 +100,15 @@ else fi zh_TW_BIG5=( - [0x00f6]=$'\366' [0x00f7]=$'\367' [0x00f8]=$'\370' [0x00f9]=$'\371' [0x00fa]=$'\372' - [0x00fb]=$'\373' [0x00fc]=$'\374' [0x00fd]=$'\375' [0x00fe]=$'\376' +# these are the original incorrect tests +# [0x00f6]=$'\366' [0x00f7]=$'\367' [0x00f8]=$'\370' [0x00f9]=$'\371' [0x00fa]=$'\372' +# [0x00fb]='\373' [0x00fc]=$'\374' [0x00fd]=$'\375' [0x00fe]=$'\376' +# some valid encodings + [0x03A8]=$'\243Z' [0x03A9]=$'\243[' [0x03B1]=$'\243\\' [0x03B2]=$'\243]' + [0x03B3]=$'\243^' [0x03B4]=$'\243_' [0x03B5]=$'\243`' [0x03B6]=$'\243a' +# and some invalid ones that output \u0XX +# can't use these any more; macos 14 (sonoma) broke libiconv +# [0x00fb]='\u00FB' [0x00fc]='\u00FC' [0x00fd]='\u00FD' [0x00fe]='\u00FE' ) TestCodePage zh_TW.BIG5 zh_TW_BIG5 @@ -324,10 +313,10 @@ else echo "unicode1.sub: that will cause some of these tests to be skipped." >&2 fi -#for ((x=1;x<1000;x++)); do printf ' [0x%04x]=%-11q' "$x" "$(printf "$(printf '\\U%08x' $x)")" ; [ $(($x%5)) = 0 ] && echo; done +#for ((x=1;x<1000;x++)); do printf -v u '\\U%08x' "$x"; printf ' [0x%04x]=%-11q' "$x" "${u@E}"; [ $(($x%5)) = 0 ] && echo; done C_UTF_8=( [0x0001]=$'\001' [0x0002]=$'\002' [0x0003]=$'\003' [0x0004]=$'\004' [0x0005]=$'\005' - [0x0006]=$'\006' [0x0007]=$'\a' [0x0008]=$'\b' [0x0009]=$'\t' [0x000a]='' + [0x0006]=$'\006' [0x0007]=$'\a' [0x0008]=$'\b' [0x0009]=$'\t' [0x000a]=$'\n' [0x000b]=$'\v' [0x000c]=$'\f' [0x000d]=$'\r' [0x000e]=$'\016' [0x000f]=$'\017' [0x0010]=$'\020' [0x0011]=$'\021' [0x0012]=$'\022' [0x0013]=$'\023' [0x0014]=$'\024' [0x0015]=$'\025' [0x0016]=$'\026' [0x0017]=$'\027' [0x0018]=$'\030' [0x0019]=$'\031' diff --git a/tests/varenv.right b/tests/varenv.right index f6bd1b5bd..608b647de 100644 --- a/tests/varenv.right +++ b/tests/varenv.right @@ -38,6 +38,9 @@ abcde 30 40 50 +declare -x var="60" +outside +assignment |0|10| 10 |0|10| @@ -159,6 +162,8 @@ inside func: var=two outside 2.1: var=global inside func1: var=value outside 3.0: var=value +inside func1: var=func +outside 3.5: var=outside inside func2: var=global outside 4.0: var=outside foo: hello world @@ -186,6 +191,12 @@ declare -a a=([0]="X" [1]="Y") declare -a s=([0]="X" [1]="Y") declare -a a=([0]="XY") declare -a s=([0]="XY") +declare -A v=([1]="one" [0]="7" ) +declare -a v=([0]="7" [1]="1") +./varenv14.sub: line 77: declare: array: cannot convert indexed to associative array +declare -a array=([0]="1" [1]="2" [2]="3" [3]="list" [4]="of" [5]="four" [6]="words") +./varenv14.sub: line 85: declare: assoc: cannot convert associative to indexed array +declare -A assoc=([four]="words" [two]="2" [three]="3" [one]="1" [list]="of" ) f: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 f1: after: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 done: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 @@ -263,6 +274,7 @@ ignoreeof on ignoreeof off ignoreeof on 10 +local - match 1 trap -- 'echo trap:$FUNCNAME' EXIT trap:f @@ -272,6 +284,50 @@ trap -- 'echo trap:$FUNCNAME' EXIT trap:f trap -- 'echo trap:$FUNCNAME' EXIT trap:f +declare -rx x="4" +declare -rx y="5" +f:3 +f1:3 +global1:bcde +f:3 +f1:3 +global2:bcde +f:3 +f1:3 +global:bcde +f:3 +f1:3 +global:bcde +f:3 +bcde +f:3 +bcde +f1:3 +global: bcde +f1:3 +global: 3 +f: 3 +global: declare -rx c="3" +f1: 4 +global: declare -- b="8" +f1: x = local +f2: x = local +after f2: x = global +default after f1: x = global +f1: x = local +f2: x = local +after f2: x = unset +localvar_unset after f1: x = global +f1: x = temp +after f1: x = global +1009: after bash unset: x = global +1009: after posix unset: x = unset +f1: x = local +after unset f1: x = local +1009: after bash f1: x = global +f1: x = local +after unset f1: x = unset +1009: after posix f1: x = global a=z a=b a=z diff --git a/tests/varenv.tests b/tests/varenv.tests index 68c619ec7..587f83125 100644 --- a/tests/varenv.tests +++ b/tests/varenv.tests @@ -260,6 +260,8 @@ ${THIS_SH} ./varenv19.sub ${THIS_SH} ./varenv20.sub ${THIS_SH} ./varenv21.sub ${THIS_SH} ./varenv22.sub +${THIS_SH} ./varenv23.sub +${THIS_SH} ./varenv24.sub # make sure variable scoping is done right tt() { typeset a=b;echo a=$a; };a=z;echo a=$a;tt;echo a=$a diff --git a/tests/varenv1.sub b/tests/varenv1.sub index 8def153ad..b74de20c1 100644 --- a/tests/varenv1.sub +++ b/tests/varenv1.sub @@ -39,3 +39,26 @@ var=40 func echo expect 50 var=50 command printenv var + +# this behaves the same in bash and posix mode +export -n var # make sure it's not exported +echo expect 60 +var=60 export var +declare -p var + +# this behaves differently in bash and posix mode: `.' is a special builtin +unset -v var +var=outside +echo 'var=assignment' >$TMPFILE + +echo expect outside +var=temp . $TMPFILE +echo $var + +set -o posix +echo expect assignment +var=temp . $TMPFILE +echo $var + +rm -f $TMPFILE +unset -v var diff --git a/tests/varenv12.sub b/tests/varenv12.sub index 92b3692f5..441a02f03 100644 --- a/tests/varenv12.sub +++ b/tests/varenv12.sub @@ -134,6 +134,19 @@ echo -n 'outside 3.0: ' ; echo "var=${var-<unset>}" unset -v var unset -f func1 +# operations inside a function on temporary variables do not propagate +func1() +{ + export var + echo -n 'inside func1: ' ; echo "var=${var-<unset>}" +} +var=outside +var=func func1 +echo -n 'outside 3.5: ' ; echo "var=${var-<unset>}" + +unset -v var +unset -f func1 + func2() { local var=local diff --git a/tests/varenv14.sub b/tests/varenv14.sub index 091c47004..f943d6e17 100644 --- a/tests/varenv14.sub +++ b/tests/varenv14.sub @@ -44,3 +44,46 @@ f f() { local -a a+=Y s+=Y; declare -p a s; } f + +# inherit from different array types/variable types +unset -v v +unset -f f + +v=7 + +f() +{ + declare -A v + v+=(1 one) + declare -p v +} +f + +f() +{ + declare -a v + v+=(1) + declare -p v +} +f + +unset -v array assoc + +declare -a array=(1 2 3) +declare -A assoc=(one 1 two 2 three 3) + +f() +{ + declare -A array + array+=(list of four words) + declare -p array +} +f + +f() +{ + declare -a assoc + assoc+=(list of four words) + declare -p assoc +} +f diff --git a/tests/varenv2.sub b/tests/varenv2.sub index 0fde5b20d..138c869a6 100644 --- a/tests/varenv2.sub +++ b/tests/varenv2.sub @@ -49,6 +49,10 @@ fff x=10 fff x=1 fff x=4 fff2 +# set this because variable assignments preceding functions should never +# persist after the function returns, no matter what a builtin inside the +# function does to them +x=4 x=11 fff3 echo after fff3: x=$x x=12 fff4 diff --git a/tests/varenv21.sub b/tests/varenv21.sub index 613e47592..45d2d86c1 100644 --- a/tests/varenv21.sub +++ b/tests/varenv21.sub @@ -34,6 +34,7 @@ f() local - set -m -H +B set -u + local -p # make sure it prints `local -' } before="$-|$SHELLOPTS" diff --git a/tests/varenv7.sub b/tests/varenv7.sub index 4b2596061..078d2db8e 100644 --- a/tests/varenv7.sub +++ b/tests/varenv7.sub @@ -17,7 +17,7 @@ foo() local -r myvar=0 echo "${myvar[@]}" - declare -p myvar + local -p myvar } foo2() @@ -26,7 +26,7 @@ foo2() local -r myvar=1 echo "${myvar}" - declare -p myvar + local -p myvar } declare -a outside=() diff --git a/tests/vredir.right b/tests/vredir.right index 6465595b5..d0a76a48a 100644 --- a/tests/vredir.right +++ b/tests/vredir.right @@ -5,16 +5,18 @@ foo 3 bar is a function bar () { - exec {v}> $TMPFILE; + exec {v}>> $TMPFILE; echo $v } ./vredir.tests: line 19: v: readonly variable ./vredir.tests: line 19: v: cannot assign fd to variable 42 +./vredir.tests: line 38: v: readonly variable +./vredir.tests: line 38: v: cannot assign fd to variable bar is a function bar () { - exec {v}> $TMPFILE; + exec {v}>> $TMPFILE; echo $v } 10 @@ -32,6 +34,21 @@ EOF echo $v } +11 +line 1 +line 2 +line 3 +bar is a function +bar () +{ + exec {v}<<-EOF +line 1 +line 2 +line 3 +EOF + + echo $v +} 10 foo 1 foo 2 @@ -72,6 +89,9 @@ swizzle () exec {stdin}<&$fd0; exec {stdout}>&$fd1 } +10 11 +10 11 +./vredir4.sub: line 51: ${output}: Bad file descriptor 12 10 a a @@ -98,4 +118,6 @@ swizzle () exec {stdin}<&${fd[0]}-; exec {stdout}>&${fd[1]}- } -./vredir8.sub: line 12: $fd: Bad file descriptor +redir 2 +./vredir8.sub: line 33: $fd: Bad file descriptor +./vredir8.sub: line 38: $fd: Bad file descriptor diff --git a/tests/vredir.tests b/tests/vredir.tests index bd4cb7752..f2c5e4dd4 100644 --- a/tests/vredir.tests +++ b/tests/vredir.tests @@ -16,7 +16,7 @@ TMPFILE=$TMPDIR/foo bar() { -exec {v}>$TMPFILE +exec {v}>>$TMPFILE echo $v } @@ -32,8 +32,10 @@ rm -f $TMPFILE type bar exec {v}>&- +# errors readonly v=42 bar +exec {v}>&1 echo foo 1 2>&1 >&$v | { grep -q '\$v: Bad' || echo 'bad foo 1'; } echo foo 2 2>&1 >&$v | { grep -q '\$v: Bad' || echo 'bad foo 2'; } diff --git a/tests/vredir1.sub b/tests/vredir1.sub index 484f313b4..d09a01569 100644 --- a/tests/vredir1.sub +++ b/tests/vredir1.sub @@ -25,6 +25,23 @@ bar cat <&$v +type bar +unset -f bar + +bar() +{ +exec {v}<<-EOF + line 1 + line 2 + line 3 +EOF +echo $v +} + +bar + +cat <&$v + type bar exit 0 diff --git a/tests/vredir4.sub b/tests/vredir4.sub index f861bcfc8..7a4b091b8 100644 --- a/tests/vredir4.sub +++ b/tests/vredir4.sub @@ -32,4 +32,22 @@ echo $line >&$stdout type swizzle +exec {stdin}<&- +exec {stdout}>&- + +stdin=-1 stdout=-1 + +declare -n stdin=input +declare -n stdout=output + +swizzle +echo ${input} ${output} +echo ${stdin} ${stdout} + +exec {stdin}<&- +exec {stdout}>&- + +# this should be an error +echo invalid fd >&${output} + exit 0 diff --git a/tests/vredir7.sub b/tests/vredir7.sub index 0f76f404b..bd402d48e 100644 --- a/tests/vredir7.sub +++ b/tests/vredir7.sub @@ -33,4 +33,10 @@ echo $line >&$stdout type swizzle +exec {fd[0]}<&- +exec {fd[1]}<&- + +exec {stdin}<&- +exec {stdout}>&- + exit 0 diff --git a/tests/vredir8.sub b/tests/vredir8.sub index e87b45b3c..804626dc4 100644 --- a/tests/vredir8.sub +++ b/tests/vredir8.sub @@ -1,13 +1,40 @@ +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + # test varredir_close +# these should work fine + : {fd}<>/dev/null echo redir 1 >&$fd exec {fd}>&- +: {fd}>&1 +echo redir 2 >&$fd +exec {fd}>&- + shopt -s varredir_close : {fd}<>/dev/tty -echo redir 2 >&$fd +# these should fail with Bad file descriptor errors +echo redir 3 >&$fd exec {fd}>&- +unset fd + +: {fd}>&1 +echo redir 4 >&$fd +unset fd + diff --git a/trap.c b/trap.c index e56f6cc36..d28791365 100644 --- a/trap.c +++ b/trap.c @@ -1,7 +1,7 @@ /* trap.c -- Not the trap command, but useful functions for manipulating those objects. The trap command is in builtins/trap.def. */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -66,6 +66,7 @@ extern int errno; #define SIG_INPROGRESS 0x10 /* Signal handler currently executing. */ #define SIG_CHANGED 0x20 /* Trap value changed in trap handler. */ #define SIG_IGNORED 0x40 /* The signal is currently being ignored. */ +#define SIG_ASYNCSIG 0x80 /* The signal is ignored because it's in an asynchronous command. */ #define SPECIAL_TRAP(s) ((s) == EXIT_TRAP || (s) == DEBUG_TRAP || (s) == ERROR_TRAP || (s) == RETURN_TRAP) @@ -85,7 +86,7 @@ static void restore_signal (int); static void reset_or_restore_signal_handlers (sh_resetsig_func_t *); static void reinit_trap (int); -static void trap_if_untrapped (int, char *); +static void trap_if_untrapped (int, const char *); /* Variables used here but defined in other files. */ @@ -113,6 +114,12 @@ int pending_traps[NSIG]; trap command (e.g., when `return' is executed in the trap command). */ int running_trap; +/* The execution context (function/source execution level) when we began + running this trap command. This is used to determine whether we have + executed any shell functions or sourced files from the trap action, and + determines where `return' without arguments gets its return status. */ +int trap_return_context; + /* Set to last_command_exit_value before running a trap. */ int trap_saved_exit_value; @@ -144,7 +151,7 @@ int suppress_debug_trap_verbose = 0; GETORIGSIG(sig) void -initialize_traps () +initialize_traps (void) { register int i; @@ -192,8 +199,7 @@ initialize_traps () #ifdef DEBUG /* Return a printable representation of the trap handler for SIG. */ static char * -trap_handler_string (sig) - int sig; +trap_handler_string (int sig) { if (trap_list[sig] == (char *)DEFAULT_SIG) return "DEFAULT_SIG"; @@ -210,8 +216,7 @@ trap_handler_string (sig) /* Return the print name of this signal. */ char * -signal_name (sig) - int sig; +signal_name (int sig) { char *ret; @@ -228,27 +233,25 @@ signal_name (sig) then (int)2 is returned. Return NO_SIG if STRING doesn't contain a valid signal descriptor. */ int -decode_signal (string, flags) - char *string; - int flags; +decode_signal (const char *string, int flags) { intmax_t sig; char *name; - if (legal_number (string, &sig)) + if (valid_number (string, &sig)) return ((sig >= 0 && sig < NSIG) ? (int)sig : NO_SIG); #if defined (SIGRTMIN) && defined (SIGRTMAX) if (STREQN (string, "SIGRTMIN+", 9) || ((flags & DSIG_NOCASE) && strncasecmp (string, "SIGRTMIN+", 9) == 0)) { - if (legal_number (string+9, &sig) && sig >= 0 && sig <= SIGRTMAX - SIGRTMIN) + if (valid_number (string+9, &sig) && sig >= 0 && sig <= SIGRTMAX - SIGRTMIN) return (SIGRTMIN + sig); else return NO_SIG; } else if (STREQN (string, "RTMIN+", 6) || ((flags & DSIG_NOCASE) && strncasecmp (string, "RTMIN+", 6) == 0)) { - if (legal_number (string+6, &sig) && sig >= 0 && sig <= SIGRTMAX - SIGRTMIN) + if (valid_number (string+6, &sig) && sig >= 0 && sig <= SIGRTMAX - SIGRTMIN) return (SIGRTMIN + sig); else return NO_SIG; @@ -290,21 +293,50 @@ decode_signal (string, flags) return (NO_SIG); } +static char * +save_bash_trapsig (void) +{ + char *ret; + + if (ret = get_string_value ("BASH_TRAPSIG")) + ret = savestring (ret); + return ret; +} + +static void +set_bash_trapsig (int sig) +{ + bind_var_to_int ("BASH_TRAPSIG", sig, 0); +} + +static void +restore_bash_trapsig (char *oldval) +{ + if (oldval == 0) + unbind_variable_noref ("BASH_TRAPSIG"); + else + { + bind_variable ("BASH_TRAPSIG", oldval, 0); + free (oldval); + } +} + /* Non-zero when we catch a trapped signal. */ static int catch_flag; void -run_pending_traps () +run_pending_traps (void) { register int sig; int x; - volatile int old_exit_value, old_running; + volatile int old_exit_value, old_running, old_context; WORD_LIST *save_subst_varlist; HASH_TABLE *save_tempenv; sh_parser_state_t pstate; volatile int save_return_catch_flag, function_code; procenv_t save_return_catch; char *trap_command, *old_trap; + char *old_trapsig; #if defined (ARRAY_VARS) ARRAY *ps; #endif @@ -337,6 +369,8 @@ run_pending_traps () ps = save_pipestatus_array (); #endif old_running = running_trap; + old_context = trap_return_context; + old_trapsig = save_bash_trapsig (); for (sig = 1; sig < NSIG; sig++) { @@ -346,6 +380,9 @@ run_pending_traps () { /* XXX - set last_command_exit_value = trap_saved_exit_value here? */ running_trap = sig + 1; + trap_return_context = funcnest + sourcenest; + + set_bash_trapsig (sig); if (sig == SIGINT) { @@ -420,6 +457,7 @@ run_pending_traps () } else { + /* XXX - why not set SIG_INPROGRESS, clear SIG_CHANGED here? */ old_trap = trap_list[sig]; trap_command = savestring (old_trap); @@ -470,6 +508,8 @@ run_pending_traps () if (function_code) { running_trap = old_running; /* XXX */ + trap_return_context = old_context; + restore_bash_trapsig (old_trapsig); /* caller will set last_command_exit_value */ sh_longjmp (return_catch, 1); } @@ -478,20 +518,21 @@ run_pending_traps () pending_traps[sig] = 0; /* XXX - move before evalstring? */ running_trap = old_running; + trap_return_context = old_context; } } #if defined (ARRAY_VARS) restore_pipestatus_array (ps); #endif + restore_bash_trapsig (old_trapsig); last_command_exit_value = old_exit_value; } /* Set the private state variables noting that we received a signal SIG for which we have a trap set. */ void -set_trap_state (sig) - int sig; +set_trap_state (int sig) { catch_flag = 1; pending_traps[sig]++; @@ -499,8 +540,7 @@ set_trap_state (sig) } sighandler -trap_handler (sig) - int sig; +trap_handler (int sig) { int oerrno; @@ -574,8 +614,7 @@ trap_handler (sig) } int -next_pending_trap (start) - int start; +next_pending_trap (int start) { register int i; @@ -586,7 +625,7 @@ next_pending_trap (start) } int -first_pending_trap () +first_pending_trap (void) { return (next_pending_trap (1)); } @@ -594,7 +633,7 @@ first_pending_trap () /* Return > 0 if any of the "real" signals (not fake signals like EXIT) are trapped. */ int -any_signals_trapped () +any_signals_trapped (void) { register int i; @@ -605,7 +644,7 @@ any_signals_trapped () } void -clear_pending_traps () +clear_pending_traps (void) { register int i; @@ -614,7 +653,7 @@ clear_pending_traps () } void -check_signals () +check_signals (void) { /* Add any other shell timeouts here */ check_read_timeout (); /* set by the read builtin */ @@ -623,7 +662,7 @@ check_signals () /* Convenience functions the rest of the shell can use */ void -check_signals_and_traps () +check_signals_and_traps (void) { check_signals (); @@ -635,8 +674,7 @@ check_signals_and_traps () #ifdef INCLUDE_UNUSED /* Make COMMAND_STRING be executed when SIGCHLD is caught. */ void -set_sigchld_trap (command_string) - char *command_string; +set_sigchld_trap (const char *command_string) { set_signal (SIGCHLD, command_string); } @@ -648,30 +686,28 @@ set_sigchld_trap (command_string) reset the disposition to the default and not have the original signal accidentally restored, undoing the user's command. */ void -maybe_set_sigchld_trap (command_string) - char *command_string; +uw_maybe_set_sigchld_trap (void *command_string) { if ((sigmodes[SIGCHLD] & SIG_TRAPPED) == 0 && trap_list[SIGCHLD] == (char *)IMPOSSIBLE_TRAP_HANDLER) - set_signal (SIGCHLD, command_string); + set_signal (SIGCHLD, (const char *)command_string); } /* Temporarily set the SIGCHLD trap string to IMPOSSIBLE_TRAP_HANDLER. Used as a sentinel in run_sigchld_trap and maybe_set_sigchld_trap to see whether or not a SIGCHLD trap handler reset SIGCHLD disposition to the default. */ void -set_impossible_sigchld_trap () +set_impossible_sigchld_trap (void) { restore_default_signal (SIGCHLD); change_signal (SIGCHLD, (char *)IMPOSSIBLE_TRAP_HANDLER); - sigmodes[SIGCHLD] &= ~SIG_TRAPPED; /* maybe_set_sigchld_trap checks this */ + sigmodes[SIGCHLD] &= ~SIG_TRAPPED; /* uw_maybe_set_sigchld_trap checks this */ } /* Act as if we received SIGCHLD NCHILD times and increment pending_traps[SIGCHLD] by that amount. This allows us to still run the SIGCHLD trap once for each exited child. */ void -queue_sigchld_trap (nchild) - int nchild; +queue_sigchld_trap (int nchild) { if (nchild > 0) { @@ -684,17 +720,14 @@ queue_sigchld_trap (nchild) /* Set a trap for SIG only if SIG is not already trapped. */ static inline void -trap_if_untrapped (sig, command) - int sig; - char *command; +trap_if_untrapped (int sig, const char *command) { if ((sigmodes[sig] & SIG_TRAPPED) == 0) set_signal (sig, command); } void -set_debug_trap (command) - char *command; +set_debug_trap (const char *command) { set_signal (DEBUG_TRAP, command); } @@ -706,44 +739,44 @@ set_debug_trap (command) SIG_TRAPPED will be set and we don't bother restoring the original trap string. This is used by both functions and the source builtin. */ void -maybe_set_debug_trap (command) - char *command; +uw_maybe_set_debug_trap (void *command) { trap_if_untrapped (DEBUG_TRAP, command); } void -set_error_trap (command) - char *command; +set_error_trap (const char *command) { set_signal (ERROR_TRAP, command); } void -maybe_set_error_trap (command) - char *command; +uw_set_error_trap (void *command) +{ + set_error_trap (command); +} + +void +uw_maybe_set_error_trap (void *command) { trap_if_untrapped (ERROR_TRAP, command); } void -set_return_trap (command) - char *command; +set_return_trap (const char *command) { set_signal (RETURN_TRAP, command); } void -maybe_set_return_trap (command) - char *command; +uw_maybe_set_return_trap (void *command) { trap_if_untrapped (RETURN_TRAP, command); } #ifdef INCLUDE_UNUSED void -set_sigint_trap (command) - char *command; +set_sigint_trap (const char *command) { set_signal (SIGINT, command); } @@ -753,7 +786,7 @@ set_sigint_trap (command) things, like waiting for command substitution or executing commands in explicit subshells ( ( cmd ) ), can catch interrupts properly. */ SigHandler * -set_sigint_handler () +set_sigint_handler (void) { if (sigmodes[SIGINT] & SIG_HARD_IGNORE) return ((SigHandler *)SIG_IGN); @@ -765,7 +798,8 @@ set_sigint_handler () return ((SigHandler *)set_signal_handler (SIGINT, trap_handler)); /* The signal is not trapped, so set the handler to the shell's special - interrupt handler. */ + interrupt handler. Make sure this agrees with code in sig.c and + builtins/trap.def */ else if (interactive) /* XXX - was interactive_shell */ return (set_signal_handler (SIGINT, sigint_sighandler)); else @@ -775,8 +809,7 @@ set_sigint_handler () /* Return the correct handler for signal SIG according to the values in sigmodes[SIG]. */ SigHandler * -trap_to_sighandler (sig) - int sig; +trap_to_sighandler (int sig) { if (sigmodes[sig] & (SIG_IGNORED|SIG_HARD_IGNORE)) return (SIG_IGN); @@ -788,9 +821,7 @@ trap_to_sighandler (sig) /* Set SIG to call STRING as a command. */ void -set_signal (sig, string) - int sig; - char *string; +set_signal (int sig, const char *string) { sigset_t set, oset; @@ -814,8 +845,8 @@ set_signal (sig, string) /* If we aren't sure of the original value, check it. */ if (original_signals[sig] == IMPOSSIBLE_TRAP_HANDLER) GETORIGSIG (sig); - if (original_signals[sig] == SIG_IGN) - return; + if (original_signals[sig] == SIG_IGN && (sigmodes[sig] & SIG_ASYNCSIG) == 0) + return; /* XXX */ } /* Only change the system signal handler if SIG_NO_TRAP is not set. @@ -834,8 +865,7 @@ set_signal (sig, string) } static void -free_trap_command (sig) - int sig; +free_trap_command (int sig) { if ((sigmodes[sig] & SIG_TRAPPED) && trap_list[sig] && (trap_list[sig] != (char *)IGNORE_SIG) && @@ -847,9 +877,7 @@ free_trap_command (sig) /* If SIG has a string assigned to it, get rid of it. Then give it VALUE. */ static void -change_signal (sig, value) - int sig; - char *value; +change_signal (int sig, char *value) { if ((sigmodes[sig] & SIG_INPROGRESS) == 0) free_trap_command (sig); @@ -865,8 +893,7 @@ change_signal (sig, value) } void -get_original_signal (sig) - int sig; +get_original_signal (int sig) { /* If we aren't sure the of the original value, then get it. */ if (sig > 0 && sig < NSIG && original_signals[sig] == (SigHandler *)IMPOSSIBLE_TRAP_HANDLER) @@ -874,7 +901,7 @@ get_original_signal (sig) } void -get_all_original_signals () +get_all_original_signals (void) { register int i; @@ -883,9 +910,7 @@ get_all_original_signals () } void -set_original_signal (sig, handler) - int sig; - SigHandler *handler; +set_original_signal (int sig, SigHandler *handler) { if (sig > 0 && sig < NSIG && original_signals[sig] == (SigHandler *)IMPOSSIBLE_TRAP_HANDLER) SETORIGSIG (sig, handler); @@ -896,8 +921,7 @@ set_original_signal (sig, handler) from trap_builtin (), which takes care to restore the handlers for the signals the shell treats specially. */ void -restore_default_signal (sig) - int sig; +restore_default_signal (int sig) { if (SPECIAL_TRAP (sig)) { @@ -918,6 +942,17 @@ restore_default_signal (sig) if (sigmodes[sig] & SIG_HARD_IGNORE) return; + /* Even if the signal is not trapped, POSIX interp 751 requires that we + allow `trap - SIGINT' to reset the signal disposition for SIGINT to + SIG_DFL. */ + if ((sigmodes[sig] & (SIG_TRAPPED|SIG_ASYNCSIG|SIG_NO_TRAP)) == SIG_ASYNCSIG) + { + original_signals[sig] = SIG_DFL; /* XXX */ + set_signal_handler (sig, SIG_DFL); + change_signal (sig, (char *)DEFAULT_SIG); + return; + } + /* If we aren't trapping this signal, don't bother doing anything else. */ /* We special-case SIGCHLD and IMPOSSIBLE_TRAP_HANDLER (see above) as a sentinel to determine whether or not disposition is reset to the default @@ -939,8 +974,7 @@ restore_default_signal (sig) /* Make this signal be ignored. */ void -ignore_signal (sig) - int sig; +ignore_signal (int sig) { if (SPECIAL_TRAP (sig) && ((sigmodes[sig] & SIG_IGNORED) == 0)) { @@ -957,7 +991,11 @@ ignore_signal (sig) /* If already trapped and ignored, no change necessary. */ if (sigmodes[sig] & SIG_IGNORED) - return; + { + sigmodes[sig] |= SIG_TRAPPED; /* just make sure */ + /* XXX - turn off SIG_ASYNCSIG here? */ + return; + } /* Only change the signal handler for SIG if it allows it. */ if ((sigmodes[sig] & SIG_NO_TRAP) == 0) @@ -971,9 +1009,10 @@ ignore_signal (sig) the command to be executed includes an "exit". This is why we have to provide our own place for top_level to jump to. */ int -run_exit_trap () +run_exit_trap (void) { char *trap_command; + char *old_trapsig; int code, function_code, retval; #if defined (ARRAY_VARS) ARRAY *ps; @@ -997,6 +1036,10 @@ run_exit_trap () retval = trap_saved_exit_value; running_trap = 1; + trap_return_context = funcnest + sourcenest; + + old_trapsig = save_bash_trapsig (); + set_bash_trapsig (EXIT_TRAP); code = setjmp_nosigs (top_level); @@ -1022,6 +1065,7 @@ run_exit_trap () #if defined (ARRAY_VARS) array_dispose (ps); #endif + restore_bash_trapsig (old_trapsig); return retval; } @@ -1033,8 +1077,7 @@ run_exit_trap () } void -run_trap_cleanup (sig) - int sig; +run_trap_cleanup (int sig) { /* XXX - should we clean up trap_list[sig] == IMPOSSIBLE_TRAP_HANDLER? */ sigmodes[sig] &= ~(SIG_INPROGRESS|SIG_CHANGED); @@ -1045,14 +1088,13 @@ run_trap_cleanup (sig) /* Run a trap command for SIG. SIG is one of the signals the shell treats specially. Returns the exit status of the executed trap command list. */ static int -_run_trap_internal (sig, tag) - int sig; - char *tag; +_run_trap_internal (int sig, char *tag) { char *trap_command, *old_trap; + char *old_trapsig; int trap_exit_value; volatile int save_return_catch_flag, function_code; - int old_modes, old_running, old_int; + int old_modes, old_running, old_int, old_context; int flags; procenv_t save_return_catch; WORD_LIST *save_subst_varlist; @@ -1062,9 +1104,9 @@ _run_trap_internal (sig, tag) ARRAY *ps; #endif - old_modes = old_running = -1; + old_modes = old_running = old_context = -1; - trap_exit_value = function_code = 0; + trap_exit_value = 0; trap_saved_exit_value = last_command_exit_value; /* Run the trap only if SIG is trapped and not ignored, and we are not currently executing in the trap handler. */ @@ -1081,12 +1123,17 @@ _run_trap_internal (sig, tag) old_trap = trap_list[sig]; old_modes = sigmodes[sig]; old_running = running_trap; + old_context = trap_return_context; sigmodes[sig] |= SIG_INPROGRESS; sigmodes[sig] &= ~SIG_CHANGED; /* just to be sure */ trap_command = savestring (old_trap); + old_trapsig = save_bash_trapsig (); + set_bash_trapsig (sig); + running_trap = sig + 1; + trap_return_context = funcnest + sourcenest; old_int = interrupt_state; /* temporarily suppress pending interrupts */ CLRINTERRUPT; @@ -1101,12 +1148,23 @@ _run_trap_internal (sig, tag) save_tempenv = temporary_env; temporary_env = 0; /* traps should not run with temporary env */ + /* Will be restored by restore_parser_state */ + if (shell_eof_token) + { + reset_parser (); /* resets parser-private state */ + shell_eof_token = 0; + } + #if defined (JOB_CONTROL) if (sig != DEBUG_TRAP) /* run_debug_trap does this */ save_pipeline (1); /* XXX only provides one save level */ #endif + /* XXX - set pending_traps[sig] = 0 here? */ + evalnest++; + /* If we're in a function, make sure return longjmps come here, too. */ + function_code = 0; save_return_catch_flag = return_catch_flag; if (return_catch_flag) { @@ -1117,7 +1175,6 @@ _run_trap_internal (sig, tag) flags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE; if (sig != DEBUG_TRAP && sig != RETURN_TRAP && sig != ERROR_TRAP) flags |= SEVAL_RESETLINE; - evalnest++; if (function_code == 0) { parse_and_execute (trap_command, tag, flags); @@ -1144,8 +1201,11 @@ _run_trap_internal (sig, tag) if ((old_modes & SIG_INPROGRESS) == 0) sigmodes[sig] &= ~SIG_INPROGRESS; + restore_bash_trapsig (old_trapsig); + running_trap = old_running; interrupt_state = old_int; + trap_return_context = old_context; if (sigmodes[sig] & SIG_CHANGED) { @@ -1180,7 +1240,7 @@ _run_trap_internal (sig, tag) } int -run_debug_trap () +run_debug_trap (void) { int trap_exit_value, old_verbose; pid_t save_pgrp; @@ -1236,14 +1296,14 @@ run_debug_trap () } void -run_error_trap () +run_error_trap (void) { if ((sigmodes[ERROR_TRAP] & SIG_TRAPPED) && ((sigmodes[ERROR_TRAP] & SIG_IGNORED) == 0) && (sigmodes[ERROR_TRAP] & SIG_INPROGRESS) == 0) _run_trap_internal (ERROR_TRAP, "error trap"); } void -run_return_trap () +run_return_trap (void) { int old_exit_value; @@ -1262,9 +1322,9 @@ run_return_trap () /* Run a trap set on SIGINT. This is called from throw_to_top_level (), and declared here to localize the trap functions. */ +/* WILL_THROW indicates whether we're run from throw_to_top_level */ void -run_interrupt_trap (will_throw) - int will_throw; /* from throw_to_top_level? */ +run_interrupt_trap (int will_throw) { if (will_throw && running_trap > 0) run_trap_cleanup (running_trap - 1); @@ -1281,7 +1341,7 @@ run_interrupt_trap (will_throw) reset_or_restore_signal_handlers and not change the disposition of signals that are set to be ignored. */ void -free_trap_strings () +free_trap_strings (void) { register int i; @@ -1304,8 +1364,7 @@ free_trap_strings () /* Free a trap command string associated with SIG without changing signal disposition. Intended to be called from free_trap_strings() */ static void -free_trap_string (sig) - int sig; +free_trap_string (int sig) { change_signal (sig, (char *)DEFAULT_SIG); sigmodes[sig] &= ~SIG_TRAPPED; /* XXX - SIG_INPROGRESS? */ @@ -1314,9 +1373,17 @@ free_trap_string (sig) /* Reset the handler for SIG to the original value but leave the trap string in place. */ static void -reset_signal (sig) - int sig; +reset_signal (int sig) { +#if 1 + /* If we have a trapped signal that was previously ignored because it was + SIGINT or SIGQUIT in an asynchronous list, then we need to restore the + default signal and not the (artificial) SIG_IGN. We know that the signal + was not ignored at shell invocation because you can't trap it if + SIG_HARD_IGNORE is set. */ + if ((sigmodes[sig] & SIG_ASYNCSIG) && signal_is_trapped (sig) && original_signals[sig] == SIG_IGN) + original_signals[sig] = SIG_DFL; +#endif set_signal_handler (sig, original_signals[sig]); sigmodes[sig] &= ~SIG_TRAPPED; /* XXX - SIG_INPROGRESS? */ } @@ -1324,17 +1391,24 @@ reset_signal (sig) /* Set the handler signal SIG to the original and free any trap command associated with it. */ static void -restore_signal (sig) - int sig; +restore_signal (int sig) { +#if 1 + /* If we have a trapped signal that was previously ignored because it was + SIGINT or SIGQUIT in an asynchronous list, then we need to restore the + default signal and not the (artificial) SIG_IGN. We know that the signal + was not ignored at shell invocation because you can't trap it if + SIG_HARD_IGNORE is set. */ + if ((sigmodes[sig] & SIG_ASYNCSIG) && signal_is_trapped (sig) && original_signals[sig] == SIG_IGN) + original_signals[sig] = SIG_DFL; +#endif set_signal_handler (sig, original_signals[sig]); change_signal (sig, (char *)DEFAULT_SIG); sigmodes[sig] &= ~SIG_TRAPPED; } static void -reset_or_restore_signal_handlers (reset) - sh_resetsig_func_t *reset; +reset_or_restore_signal_handlers (sh_resetsig_func_t *reset) { register int i; @@ -1381,7 +1455,7 @@ reset_or_restore_signal_handlers (reset) trap strings. Called by the command substitution code and other places that create a "subshell environment". */ void -reset_signal_handlers () +reset_signal_handlers (void) { reset_or_restore_signal_handlers (reset_signal); } @@ -1390,7 +1464,7 @@ reset_signal_handlers () ignored with trap '' SIGNAL should be ignored, so we make sure that they are. Called by child processes after they are forked. */ void -restore_original_signals () +restore_original_signals (void) { reset_or_restore_signal_handlers (restore_signal); } @@ -1398,8 +1472,7 @@ restore_original_signals () /* Change the flags associated with signal SIG without changing the trap string. The string is TRAP_LIST[SIG] if we need it. */ static void -reinit_trap (sig) - int sig; +reinit_trap (int sig) { sigmodes[sig] |= SIG_TRAPPED; if (trap_list[sig] == (char *)IGNORE_SIG) @@ -1414,7 +1487,7 @@ reinit_trap (sig) leaves the trap strings in place. This understands how reset_signal_handlers works. */ void -restore_traps () +restore_traps (void) { char *trapstr; int i; @@ -1469,8 +1542,7 @@ restore_traps () /* If a trap handler exists for signal SIG, then call it; otherwise just return failure. Returns 1 if it called the trap handler. */ int -maybe_call_trap_handler (sig) - int sig; +maybe_call_trap_handler (int sig) { /* Call the trap handler for SIG if the signal is trapped and not ignored. */ if ((sigmodes[sig] & SIG_TRAPPED) && ((sigmodes[sig] & SIG_IGNORED) == 0)) @@ -1500,67 +1572,70 @@ maybe_call_trap_handler (sig) } int -signal_is_trapped (sig) - int sig; +signal_is_trapped (int sig) { return (sigmodes[sig] & SIG_TRAPPED); } int -signal_is_pending (sig) - int sig; +signal_is_pending (int sig) { return (pending_traps[sig]); } int -signal_is_special (sig) - int sig; +signal_is_special (int sig) { return (sigmodes[sig] & SIG_SPECIAL); } int -signal_is_ignored (sig) - int sig; +signal_is_ignored (int sig) { return (sigmodes[sig] & SIG_IGNORED); } int -signal_is_hard_ignored (sig) - int sig; +signal_is_hard_ignored (int sig) { return (sigmodes[sig] & SIG_HARD_IGNORE); } void -set_signal_hard_ignored (sig) - int sig; +set_signal_hard_ignored (int sig) { sigmodes[sig] |= SIG_HARD_IGNORE; original_signals[sig] = SIG_IGN; } void -set_signal_ignored (sig) - int sig; +set_signal_ignored (int sig) { original_signals[sig] = SIG_IGN; } +void +set_signal_async_ignored (int sig) +{ + original_signals[sig] = SIG_IGN; + sigmodes[sig] |= SIG_ASYNCSIG|SIG_IGNORED; +} + +int +signal_is_async_ignored (int sig) +{ + return (sigmodes[sig] & SIG_ASYNCSIG); +} + int -signal_in_progress (sig) - int sig; +signal_in_progress (int sig) { return (sigmodes[sig] & SIG_INPROGRESS); } #if 0 /* unused */ int -block_trapped_signals (maskp, omaskp) - sigset_t *maskp; - sigset_t *omaskp; +block_trapped_signals (sigset_t *maskp, sigset_t *omaskp) { int i; @@ -1572,8 +1647,7 @@ block_trapped_signals (maskp, omaskp) } int -unblock_trapped_signals (maskp) - sigset_t *maskp; +unblock_trapped_signals (sigset_t *maskp) { return (sigprocmask (SIG_SETMASK, maskp, 0)); } diff --git a/trap.h b/trap.h index 89402a1bc..82a3c6510 100644 --- a/trap.h +++ b/trap.h @@ -1,6 +1,6 @@ /* trap.h -- data structures used in the trap mechanism. */ -/* Copyright (C) 1993-2021 Free Software Foundation, Inc. +/* Copyright (C) 1993-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -63,67 +63,71 @@ extern char *trap_list[]; extern int trapped_signal_received; extern int wait_signal_received; extern int running_trap; +extern int trap_return_context; extern int trap_saved_exit_value; extern int suppress_debug_trap_verbose; /* Externally-visible functions declared in trap.c. */ -extern void initialize_traps PARAMS((void)); - -extern void run_pending_traps PARAMS((void)); - -extern void queue_sigchld_trap PARAMS((int)); -extern void maybe_set_sigchld_trap PARAMS((char *)); -extern void set_impossible_sigchld_trap PARAMS((void)); -extern void set_sigchld_trap PARAMS((char *)); - -extern void set_debug_trap PARAMS((char *)); -extern void set_error_trap PARAMS((char *)); -extern void set_return_trap PARAMS((char *)); - -extern void maybe_set_debug_trap PARAMS((char *)); -extern void maybe_set_error_trap PARAMS((char *)); -extern void maybe_set_return_trap PARAMS((char *)); - -extern void set_sigint_trap PARAMS((char *)); -extern void set_signal PARAMS((int, char *)); - -extern void restore_default_signal PARAMS((int)); -extern void ignore_signal PARAMS((int)); -extern int run_exit_trap PARAMS((void)); -extern void run_trap_cleanup PARAMS((int)); -extern int run_debug_trap PARAMS((void)); -extern void run_error_trap PARAMS((void)); -extern void run_return_trap PARAMS((void)); - -extern void free_trap_strings PARAMS((void)); -extern void reset_signal_handlers PARAMS((void)); -extern void restore_original_signals PARAMS((void)); -extern void restore_traps PARAMS((void)); - -extern void get_original_signal PARAMS((int)); -extern void get_all_original_signals PARAMS((void)); - -extern char *signal_name PARAMS((int)); - -extern int decode_signal PARAMS((char *, int)); -extern void run_interrupt_trap PARAMS((int)); -extern int maybe_call_trap_handler PARAMS((int)); -extern int signal_is_special PARAMS((int)); -extern int signal_is_trapped PARAMS((int)); -extern int signal_is_pending PARAMS((int)); -extern int signal_is_ignored PARAMS((int)); -extern int signal_is_hard_ignored PARAMS((int)); -extern void set_signal_hard_ignored PARAMS((int)); -extern void set_signal_ignored PARAMS((int)); -extern int signal_in_progress PARAMS((int)); - -extern void set_trap_state PARAMS((int)); - -extern int next_pending_trap PARAMS((int)); -extern int first_pending_trap PARAMS((void)); -extern void clear_pending_traps PARAMS((void)); -extern int any_signals_trapped PARAMS((void)); -extern void check_signals PARAMS((void)); -extern void check_signals_and_traps PARAMS((void)); +extern void initialize_traps (void); + +extern void run_pending_traps (void); + +extern void queue_sigchld_trap (int); +extern void set_impossible_sigchld_trap (void); +extern void set_sigchld_trap (const char *); + +extern void set_debug_trap (const char *); +extern void set_error_trap (const char *); +extern void set_return_trap (const char *); + +extern void uw_set_error_trap (void *); +extern void uw_maybe_set_sigchld_trap (void *); +extern void uw_maybe_set_debug_trap (void *); +extern void uw_maybe_set_error_trap (void *); +extern void uw_maybe_set_return_trap (void *); + +extern void set_sigint_trap (const char *); +extern void set_signal (int, const char *); + +extern void restore_default_signal (int); +extern void ignore_signal (int); +extern int run_exit_trap (void); +extern void run_trap_cleanup (int); +extern int run_debug_trap (void); +extern void run_error_trap (void); +extern void run_return_trap (void); + +extern void free_trap_strings (void); +extern void reset_signal_handlers (void); +extern void restore_original_signals (void); +extern void restore_traps (void); + +extern void get_original_signal (int); +extern void get_all_original_signals (void); + +extern char *signal_name (int); + +extern int decode_signal (const char *, int); +extern void run_interrupt_trap (int); +extern int maybe_call_trap_handler (int); +extern int signal_is_special (int); +extern int signal_is_trapped (int); +extern int signal_is_pending (int); +extern int signal_is_ignored (int); +extern int signal_is_hard_ignored (int); +extern void set_signal_hard_ignored (int); +extern void set_signal_ignored (int); +extern void set_signal_async_ignored (int); +extern int signal_is_async_ignored (int); +extern int signal_in_progress (int); + +extern void set_trap_state (int); + +extern int next_pending_trap (int); +extern int first_pending_trap (void); +extern void clear_pending_traps (void); +extern int any_signals_trapped (void); +extern void check_signals (void); +extern void check_signals_and_traps (void); #endif /* _TRAP_H_ */ diff --git a/unwind_prot.c b/unwind_prot.c index ec82393d5..4a5195a64 100644 --- a/unwind_prot.c +++ b/unwind_prot.c @@ -3,7 +3,7 @@ /* I can't stand it anymore! Please can't we just write the whole Unix system in lisp or something? */ -/* Copyright (C) 1987-2021 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -35,14 +35,6 @@ # include <unistd.h> #endif -#if defined (HAVE_STDDEF_H) -# include <stddef.h> -#endif - -#ifndef offsetof -# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) -#endif - #include "command.h" #include "general.h" #include "unwind_prot.h" @@ -65,11 +57,11 @@ typedef struct { typedef union uwp { struct uwp_head { union uwp *next; - Function *cleanup; + sh_uwfunc_t *cleanup; } head; struct { struct uwp_head uwp_head; - char *v; + void *v; } arg; struct { struct uwp_head uwp_head; @@ -77,15 +69,14 @@ typedef union uwp { } sv; } UNWIND_ELT; -static void without_interrupts PARAMS((VFunction *, char *, char *)); -static void unwind_frame_discard_internal PARAMS((char *, char *)); -static void unwind_frame_run_internal PARAMS((char *, char *)); -static void add_unwind_protect_internal PARAMS((Function *, char *)); -static void remove_unwind_protect_internal PARAMS((char *, char *)); -static void run_unwind_protects_internal PARAMS((char *, char *)); -static void clear_unwind_protects_internal PARAMS((char *, char *)); -static inline void restore_variable PARAMS((SAVED_VAR *)); -static void unwind_protect_mem_internal PARAMS((char *, char *)); +static void unwind_frame_discard_internal (char *); +static void unwind_frame_run_internal (char *); +static void add_unwind_protect_internal (sh_uwfunc_t *, void *); +static void remove_unwind_protect_internal (void); +static void run_unwind_protects_internal (void); +static void clear_unwind_protects_internal (int); +static inline void restore_variable (void *); +static void unwind_protect_mem_internal (void *, int); static UNWIND_ELT *unwind_protect_list = (UNWIND_ELT *)NULL; @@ -103,98 +94,73 @@ sh_obj_cache_t uwcache = {0, 0, 0}; #endif void -uwp_init () +uwp_init (void) { ocache_create (uwcache, UNWIND_ELT, UWCACHESIZE); } -/* Run a function without interrupts. This relies on the fact that the - FUNCTION cannot call QUIT (). */ -static void -without_interrupts (function, arg1, arg2) - VFunction *function; - char *arg1, *arg2; -{ - (*function)(arg1, arg2); -} - /* Start the beginning of a region. */ void -begin_unwind_frame (tag) - char *tag; +begin_unwind_frame (char *tag) { - add_unwind_protect ((Function *)NULL, tag); + add_unwind_protect (NULL, tag); } /* Discard the unwind protects back to TAG. */ void -discard_unwind_frame (tag) - char *tag; +discard_unwind_frame (char *tag) { if (unwind_protect_list) - without_interrupts (unwind_frame_discard_internal, tag, (char *)NULL); + unwind_frame_discard_internal (tag); } /* Run the unwind protects back to TAG. */ void -run_unwind_frame (tag) - char *tag; +run_unwind_frame (char *tag) { if (unwind_protect_list) - without_interrupts (unwind_frame_run_internal, tag, (char *)NULL); + unwind_frame_run_internal (tag); } /* Add the function CLEANUP with ARG to the list of unwindable things. */ void -add_unwind_protect (cleanup, arg) - Function *cleanup; - char *arg; +add_unwind_protect (sh_uwfunc_t *cleanup, void *arg) { - without_interrupts (add_unwind_protect_internal, (char *)cleanup, arg); + add_unwind_protect_internal (cleanup, arg); } /* Remove the top unwind protect from the list. */ void -remove_unwind_protect () +remove_unwind_protect (void) { if (unwind_protect_list) - without_interrupts - (remove_unwind_protect_internal, (char *)NULL, (char *)NULL); + remove_unwind_protect_internal (); } /* Run the list of cleanup functions in unwind_protect_list. */ void -run_unwind_protects () +run_unwind_protects (void) { if (unwind_protect_list) - without_interrupts - (run_unwind_protects_internal, (char *)NULL, (char *)NULL); + run_unwind_protects_internal (); } /* Erase the unwind-protect list. If flags is 1, free the elements. */ void -clear_unwind_protect_list (flags) - int flags; +clear_unwind_protect_list (int flags) { - char *flag; - if (unwind_protect_list) - { - flag = flags ? "" : (char *)NULL; - without_interrupts - (clear_unwind_protects_internal, flag, (char *)NULL); - } + clear_unwind_protects_internal (flags); } int -have_unwind_protects () +have_unwind_protects (void) { return (unwind_protect_list != 0); } int -unwind_protect_tag_on_stack (tag) - const char *tag; +unwind_protect_tag_on_stack (const char *tag) { UNWIND_ELT *elt; @@ -215,9 +181,7 @@ unwind_protect_tag_on_stack (tag) /* **************************************************************** */ static void -add_unwind_protect_internal (cleanup, arg) - Function *cleanup; - char *arg; +add_unwind_protect_internal (sh_uwfunc_t *cleanup, void *arg) { UNWIND_ELT *elt; @@ -229,8 +193,7 @@ add_unwind_protect_internal (cleanup, arg) } static void -remove_unwind_protect_internal (ignore1, ignore2) - char *ignore1, *ignore2; +remove_unwind_protect_internal (void) { UNWIND_ELT *elt; @@ -243,27 +206,24 @@ remove_unwind_protect_internal (ignore1, ignore2) } static void -run_unwind_protects_internal (ignore1, ignore2) - char *ignore1, *ignore2; +run_unwind_protects_internal (void) { - unwind_frame_run_internal ((char *) NULL, (char *) NULL); + unwind_frame_run_internal (NULL); } static void -clear_unwind_protects_internal (flag, ignore) - char *flag, *ignore; +clear_unwind_protects_internal (int flag) { if (flag) { while (unwind_protect_list) - remove_unwind_protect_internal ((char *)NULL, (char *)NULL); + remove_unwind_protect_internal (); } unwind_protect_list = (UNWIND_ELT *)NULL; } static void -unwind_frame_discard_internal (tag, ignore) - char *tag, *ignore; +unwind_frame_discard_internal (char *tag) { UNWIND_ELT *elt; int found; @@ -290,15 +250,15 @@ unwind_frame_discard_internal (tag, ignore) sv->desired_setting is a block of memory SIZE bytes long holding the value itself. This block of memory is copied back into the variable. */ static inline void -restore_variable (sv) - SAVED_VAR *sv; +restore_variable (void *arg) { + SAVED_VAR *sv; + sv = arg; FASTCOPY (sv->desired_setting, sv->variable, sv->size); } static void -unwind_frame_run_internal (tag, ignore) - char *tag, *ignore; +unwind_frame_run_internal (char *tag) { UNWIND_ELT *elt; int found; @@ -320,7 +280,7 @@ unwind_frame_run_internal (tag, ignore) } else { - if (elt->head.cleanup == (Function *) restore_variable) + if (elt->head.cleanup == restore_variable) restore_variable (&elt->sv.v); else (*(elt->head.cleanup)) (elt->arg.v); @@ -333,20 +293,17 @@ unwind_frame_run_internal (tag, ignore) } static void -unwind_protect_mem_internal (var, psize) - char *var; - char *psize; +unwind_protect_mem_internal (void *var, int size) { - int size, allocated; + size_t allocated; UNWIND_ELT *elt; - size = *(int *) psize; allocated = size + offsetof (UNWIND_ELT, sv.v.desired_setting[0]); if (allocated < sizeof (UNWIND_ELT)) allocated = sizeof (UNWIND_ELT); elt = (UNWIND_ELT *)xmalloc (allocated); elt->head.next = unwind_protect_list; - elt->head.cleanup = (Function *) restore_variable; + elt->head.cleanup = restore_variable; elt->sv.v.variable = var; elt->sv.v.size = size; FASTCOPY (var, elt->sv.v.desired_setting, size); @@ -357,18 +314,16 @@ unwind_protect_mem_internal (var, psize) are run. VAR is a pointer to the variable. SIZE is the size in bytes of VAR. */ void -unwind_protect_mem (var, size) - char *var; - int size; +unwind_protect_mem (char *var, int size) { - without_interrupts (unwind_protect_mem_internal, var, (char *) &size); + unwind_protect_mem_internal (var, size); } #if defined (DEBUG) #include <stdio.h> void -print_unwind_protect_tags () +print_unwind_protect_tags (void) { UNWIND_ELT *elt; @@ -376,7 +331,7 @@ print_unwind_protect_tags () while (elt) { if (elt->head.cleanup == 0) - fprintf(stderr, "tag: %s\n", elt->arg.v); + fprintf(stderr, "tag: %s\n", (char *)elt->arg.v); elt = elt->head.next; } } diff --git a/unwind_prot.h b/unwind_prot.h index 97b3af902..3236f2949 100644 --- a/unwind_prot.h +++ b/unwind_prot.h @@ -1,6 +1,6 @@ /* unwind_prot.h - Macros and functions for hacking unwind protection. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2023 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -21,26 +21,34 @@ #if !defined (_UNWIND_PROT_H) #define _UNWIND_PROT_H -extern void uwp_init PARAMS((void)); +/* Generic function type void (*) (void *) for all unwind cleanups. A + cleanup function does not return a value and takes a single generic + pointer argument. This type works fine for arbitrary pointers; if a + cleanup function needs to take an int argument, it's passed through + a cast to intptr_t, an integer type that's safe to convert to and + from a pointer. */ +typedef void sh_uwfunc_t (void *); + +extern void uwp_init (void); /* Run a function without interrupts. */ -extern void begin_unwind_frame PARAMS((char *)); -extern void discard_unwind_frame PARAMS((char *)); -extern void run_unwind_frame PARAMS((char *)); -extern void add_unwind_protect (); /* Not portable to arbitrary C99 hosts. */ -extern void remove_unwind_protect PARAMS((void)); -extern void run_unwind_protects PARAMS((void)); -extern void clear_unwind_protect_list PARAMS((int)); -extern int have_unwind_protects PARAMS((void)); -extern int unwind_protect_tag_on_stack PARAMS((const char *)); -extern void uwp_init PARAMS((void)); +extern void begin_unwind_frame (char *); +extern void discard_unwind_frame (char *); +extern void run_unwind_frame (char *); +extern void add_unwind_protect (sh_uwfunc_t *, void *); +extern void remove_unwind_protect (void); +extern void run_unwind_protects (void); +extern void clear_unwind_protect_list (int); +extern int have_unwind_protects (void); +extern int unwind_protect_tag_on_stack (const char *); /* Define for people who like their code to look a certain way. */ #define end_unwind_frame() /* How to protect a variable. */ #define unwind_protect_var(X) unwind_protect_mem ((char *)&(X), sizeof (X)) -extern void unwind_protect_mem PARAMS((char *, int)); + +extern void unwind_protect_mem (char *, int); /* Backwards compatibility */ #define unwind_protect_int unwind_protect_var diff --git a/variables.c b/variables.c index 1a0c2c45c..8473e9f9d 100644 --- a/variables.c +++ b/variables.c @@ -1,6 +1,6 @@ /* variables.c -- Functions for hacking shell variables. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -175,7 +175,7 @@ int shell_level = 0; shell variables that are marked for export. */ char **export_env = (char **)NULL; static int export_env_index; -static int export_env_size; +static size_t export_env_size; #if defined (READLINE) static int winsize_assignment; /* currently assigning to LINES or COLUMNS */ @@ -188,157 +188,161 @@ static HASH_TABLE *last_table_searched; /* hash_lookup sets this */ static VAR_CONTEXT *last_context_searched; /* Some forward declarations. */ -static void create_variable_tables PARAMS((void)); - -static void set_machine_vars PARAMS((void)); -static void set_home_var PARAMS((void)); -static void set_shell_var PARAMS((void)); -static char *get_bash_name PARAMS((void)); -static void initialize_shell_level PARAMS((void)); -static void uidset PARAMS((void)); +static void create_variable_tables (void); + +static void set_machine_vars (void); +static void set_home_var (void); +static void set_shell_var (void); +static char *get_bash_name (void); +static void initialize_shell_level (void); +static void uidset (void); #if defined (ARRAY_VARS) -static void make_vers_array PARAMS((void)); +static void make_vers_array (void); #endif -static SHELL_VAR *null_assign PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); +static SHELL_VAR *null_assign (SHELL_VAR *, char *, arrayind_t, char *); #if defined (ARRAY_VARS) -static SHELL_VAR *null_array_assign PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); +static SHELL_VAR *null_array_assign (SHELL_VAR *, char *, arrayind_t, char *); #endif -static SHELL_VAR *get_self PARAMS((SHELL_VAR *)); +static SHELL_VAR *get_self (SHELL_VAR *); #if defined (ARRAY_VARS) -static SHELL_VAR *init_dynamic_array_var PARAMS((char *, sh_var_value_func_t *, sh_var_assign_func_t *, int)); -static SHELL_VAR *init_dynamic_assoc_var PARAMS((char *, sh_var_value_func_t *, sh_var_assign_func_t *, int)); +static SHELL_VAR *init_dynamic_array_var (char *, sh_var_value_func_t *, sh_var_assign_func_t *, int); +static SHELL_VAR *init_dynamic_assoc_var (char *, sh_var_value_func_t *, sh_var_assign_func_t *, int); #endif static inline SHELL_VAR *set_int_value (SHELL_VAR *, intmax_t, int); static inline SHELL_VAR *set_string_value (SHELL_VAR *, const char *, int); -static SHELL_VAR *assign_seconds PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); -static SHELL_VAR *get_seconds PARAMS((SHELL_VAR *)); -static SHELL_VAR *init_seconds_var PARAMS((void)); +static SHELL_VAR *assign_seconds (SHELL_VAR *, char *, arrayind_t, char *); +static SHELL_VAR *get_seconds (SHELL_VAR *); +static SHELL_VAR *init_seconds_var (void); -static SHELL_VAR *assign_random PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); -static SHELL_VAR *get_random PARAMS((SHELL_VAR *)); +static SHELL_VAR *get_monoseconds (SHELL_VAR *); -static SHELL_VAR *get_urandom PARAMS((SHELL_VAR *)); +static SHELL_VAR *assign_random (SHELL_VAR *, char *, arrayind_t, char *); +static SHELL_VAR *get_random (SHELL_VAR *); -static SHELL_VAR *assign_lineno PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); -static SHELL_VAR *get_lineno PARAMS((SHELL_VAR *)); +static SHELL_VAR *get_urandom (SHELL_VAR *); -static SHELL_VAR *assign_subshell PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); -static SHELL_VAR *get_subshell PARAMS((SHELL_VAR *)); +static SHELL_VAR *assign_lineno (SHELL_VAR *, char *, arrayind_t, char *); +static SHELL_VAR *get_lineno (SHELL_VAR *); -static SHELL_VAR *get_epochseconds PARAMS((SHELL_VAR *)); -static SHELL_VAR *get_epochrealtime PARAMS((SHELL_VAR *)); +static SHELL_VAR *assign_subshell (SHELL_VAR *, char *, arrayind_t, char *); +static SHELL_VAR *get_subshell (SHELL_VAR *); -static SHELL_VAR *get_bashpid PARAMS((SHELL_VAR *)); +static SHELL_VAR *get_epochseconds (SHELL_VAR *); +static SHELL_VAR *get_epochrealtime (SHELL_VAR *); -static SHELL_VAR *get_bash_argv0 PARAMS((SHELL_VAR *)); -static SHELL_VAR *assign_bash_argv0 PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); -static void set_argv0 PARAMS((void)); +static SHELL_VAR *get_bashpid (SHELL_VAR *); + +static SHELL_VAR *get_bash_argv0 (SHELL_VAR *); +static SHELL_VAR *assign_bash_argv0 (SHELL_VAR *, char *, arrayind_t, char *); +static void set_argv0 (void); #if defined (HISTORY) -static SHELL_VAR *get_histcmd PARAMS((SHELL_VAR *)); +static SHELL_VAR *get_histcmd (SHELL_VAR *); #endif #if defined (READLINE) -static SHELL_VAR *get_comp_wordbreaks PARAMS((SHELL_VAR *)); -static SHELL_VAR *assign_comp_wordbreaks PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); +static SHELL_VAR *get_comp_wordbreaks (SHELL_VAR *); +static SHELL_VAR *assign_comp_wordbreaks (SHELL_VAR *, char *, arrayind_t, char *); #endif #if defined (PUSHD_AND_POPD) && defined (ARRAY_VARS) -static SHELL_VAR *assign_dirstack PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); -static SHELL_VAR *get_dirstack PARAMS((SHELL_VAR *)); +static SHELL_VAR *assign_dirstack (SHELL_VAR *, char *, arrayind_t, char *); +static SHELL_VAR *get_dirstack (SHELL_VAR *); #endif #if defined (ARRAY_VARS) -static SHELL_VAR *get_groupset PARAMS((SHELL_VAR *)); +static SHELL_VAR *get_groupset (SHELL_VAR *); # if defined (DEBUGGER) -static SHELL_VAR *get_bashargcv PARAMS((SHELL_VAR *)); +static SHELL_VAR *get_bashargcv (SHELL_VAR *); # endif -static SHELL_VAR *build_hashcmd PARAMS((SHELL_VAR *)); -static SHELL_VAR *get_hashcmd PARAMS((SHELL_VAR *)); -static SHELL_VAR *assign_hashcmd PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); +static SHELL_VAR *build_hashcmd (SHELL_VAR *); +static SHELL_VAR *get_hashcmd (SHELL_VAR *); +static SHELL_VAR *assign_hashcmd (SHELL_VAR *, char *, arrayind_t, char *); # if defined (ALIAS) -static SHELL_VAR *build_aliasvar PARAMS((SHELL_VAR *)); -static SHELL_VAR *get_aliasvar PARAMS((SHELL_VAR *)); -static SHELL_VAR *assign_aliasvar PARAMS((SHELL_VAR *, char *, arrayind_t, char *)); +static SHELL_VAR *build_aliasvar (SHELL_VAR *); +static SHELL_VAR *get_aliasvar (SHELL_VAR *); +static SHELL_VAR *assign_aliasvar (SHELL_VAR *, char *, arrayind_t, char *); # endif #endif -static SHELL_VAR *get_funcname PARAMS((SHELL_VAR *)); -static SHELL_VAR *init_funcname_var PARAMS((void)); +static SHELL_VAR *get_funcname (SHELL_VAR *); +static SHELL_VAR *init_funcname_var (void); + +static void initialize_dynamic_variables (void); -static void initialize_dynamic_variables PARAMS((void)); +static SHELL_VAR *bind_invalid_envvar (const char *, const char *, int); -static SHELL_VAR *bind_invalid_envvar PARAMS((const char *, char *, int)); +static int var_sametype (SHELL_VAR *, SHELL_VAR *); -static int var_sametype PARAMS((SHELL_VAR *, SHELL_VAR *)); +static SHELL_VAR *hash_lookup (const char *, HASH_TABLE *); +static SHELL_VAR *new_shell_variable (const char *); +static SHELL_VAR *make_new_variable (const char *, HASH_TABLE *); +static SHELL_VAR *bind_variable_internal (const char *, const char *, HASH_TABLE *, int, int); -static SHELL_VAR *hash_lookup PARAMS((const char *, HASH_TABLE *)); -static SHELL_VAR *new_shell_variable PARAMS((const char *)); -static SHELL_VAR *make_new_variable PARAMS((const char *, HASH_TABLE *)); -static SHELL_VAR *bind_variable_internal PARAMS((const char *, char *, HASH_TABLE *, int, int)); +static void init_shell_variable (SHELL_VAR *); -static void dispose_variable_value PARAMS((SHELL_VAR *)); -static void free_variable_hash_data PARAMS((PTR_T)); +static void dispose_variable_value (SHELL_VAR *); +static void free_variable_hash_data (PTR_T); -static VARLIST *vlist_alloc PARAMS((int)); -static VARLIST *vlist_realloc PARAMS((VARLIST *, int)); -static void vlist_add PARAMS((VARLIST *, SHELL_VAR *, int)); +static VARLIST *vlist_alloc (size_t); +static VARLIST *vlist_realloc (VARLIST *, size_t); +static void vlist_add (VARLIST *, SHELL_VAR *, int); -static void flatten PARAMS((HASH_TABLE *, sh_var_map_func_t *, VARLIST *, int)); +static void flatten (HASH_TABLE *, sh_var_map_func_t *, VARLIST *, int); -static int qsort_var_comp PARAMS((SHELL_VAR **, SHELL_VAR **)); +static int qsort_var_comp (SHELL_VAR **, SHELL_VAR **); -static SHELL_VAR **vapply PARAMS((sh_var_map_func_t *)); -static SHELL_VAR **fapply PARAMS((sh_var_map_func_t *)); +static SHELL_VAR **vapply (sh_var_map_func_t *); +static SHELL_VAR **fapply (sh_var_map_func_t *); -static int visible_var PARAMS((SHELL_VAR *)); -static int visible_and_exported PARAMS((SHELL_VAR *)); -static int export_environment_candidate PARAMS((SHELL_VAR *)); -static int local_and_exported PARAMS((SHELL_VAR *)); -static int visible_variable_in_context PARAMS((SHELL_VAR *)); -static int variable_in_context PARAMS((SHELL_VAR *)); +static int visible_var (SHELL_VAR *); +static int visible_and_exported (SHELL_VAR *); +static int export_environment_candidate (SHELL_VAR *); +static int local_and_exported (SHELL_VAR *); +static int visible_variable_in_context (SHELL_VAR *); +static int variable_in_context (SHELL_VAR *); #if defined (ARRAY_VARS) -static int visible_array_vars PARAMS((SHELL_VAR *)); +static int visible_array_vars (SHELL_VAR *); #endif -static SHELL_VAR *find_variable_internal PARAMS((const char *, int)); +static SHELL_VAR *find_variable_internal (const char *, int); -static SHELL_VAR *find_nameref_at_context PARAMS((SHELL_VAR *, VAR_CONTEXT *)); -static SHELL_VAR *find_variable_nameref_context PARAMS((SHELL_VAR *, VAR_CONTEXT *, VAR_CONTEXT **)); -static SHELL_VAR *find_variable_last_nameref_context PARAMS((SHELL_VAR *, VAR_CONTEXT *, VAR_CONTEXT **)); +static SHELL_VAR *find_nameref_at_context (SHELL_VAR *, VAR_CONTEXT *); +static SHELL_VAR *find_variable_nameref_context (SHELL_VAR *, VAR_CONTEXT *, VAR_CONTEXT **); +static SHELL_VAR *find_variable_last_nameref_context (SHELL_VAR *, VAR_CONTEXT *, VAR_CONTEXT **); -static SHELL_VAR *bind_tempenv_variable PARAMS((const char *, char *)); -static void push_posix_temp_var PARAMS((PTR_T)); -static void push_temp_var PARAMS((PTR_T)); -static void propagate_temp_var PARAMS((PTR_T)); -static void dispose_temporary_env PARAMS((sh_free_func_t *)); +static SHELL_VAR *bind_tempenv_variable (const char *, const char *); +static void push_posix_temp_var (PTR_T); +static void push_temp_var (PTR_T); +static void propagate_temp_var (PTR_T); +static void dispose_temporary_env (sh_free_func_t *); -static inline char *mk_env_string PARAMS((const char *, const char *, int)); -static char **make_env_array_from_var_list PARAMS((SHELL_VAR **)); -static char **make_var_export_array PARAMS((VAR_CONTEXT *)); -static char **make_func_export_array PARAMS((void)); -static void add_temp_array_to_env PARAMS((char **, int, int)); +static inline char *mk_env_string (const char *, const char *, int); +static char **make_env_array_from_var_list (SHELL_VAR **); +static char **make_var_export_array (VAR_CONTEXT *); +static char **make_func_export_array (void); +static void add_temp_array_to_env (char **, int, int); -static int n_shell_variables PARAMS((void)); -static int set_context PARAMS((SHELL_VAR *)); +static int n_shell_variables (void); +static int set_context (SHELL_VAR *); -static void push_func_var PARAMS((PTR_T)); -static void push_builtin_var PARAMS((PTR_T)); -static void push_exported_var PARAMS((PTR_T)); +static void push_func_var (PTR_T); +static void push_builtin_var (PTR_T); +static void push_exported_var (PTR_T); -static void delete_local_contexts PARAMS((VAR_CONTEXT *)); +static void delete_local_contexts (VAR_CONTEXT *); /* This needs to be looked at again. */ -static inline void push_posix_tempvar_internal PARAMS((SHELL_VAR *, int)); +static inline void push_posix_tempvar_internal (SHELL_VAR *, int); -static inline int find_special_var PARAMS((const char *)); +static inline int find_special_var (const char *); static void -create_variable_tables () +create_variable_tables (void) { if (shell_variables == 0) { @@ -360,9 +364,7 @@ create_variable_tables () If PRIVMODE is nonzero, don't import functions from ENV or parse $SHELLOPTS. */ void -initialize_shell_variables (env, privmode) - char **env; - int privmode; +initialize_shell_variables (char **env, int privmode) { char *name, *string, *temp_string; int c, char_index, string_index, string_length, ro; @@ -417,7 +419,7 @@ initialize_shell_variables (env, privmode) /* Don't import function names that are invalid identifiers from the environment in posix mode, though we still allow them to be defined as shell variables. */ - if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname))) + if (absolute_program (tname) == 0 && (posixly_correct == 0 || valid_identifier (tname))) parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); else free (temp_string); /* parse_and_execute does this */ @@ -462,7 +464,7 @@ initialize_shell_variables (env, privmode) temp_string = extract_array_assignment_list (string, &string_length); temp_var = assign_array_from_string (tname, temp_string, 0); FREE (temp_string); - if (temp_var) + if (temp_var && noassign_p (temp_var) == 0) { VSETATTR (temp_var, (att_exported | att_imported)); array_needs_making = 1; @@ -482,6 +484,8 @@ initialize_shell_variables (env, privmode) /* need to make sure it exists as an associative array first */ temp_var = find_or_make_array_variable (tname, 2); + if (temp_var && noassign_p (temp_var)) + temp_var = 0; if (temp_var) { string_length = 1; @@ -499,25 +503,18 @@ initialize_shell_variables (env, privmode) # endif /* ARRAY_EXPORT */ #endif { - ro = 0; - /* If we processed a command-line option that caused SHELLOPTS to be - set, it may already be set (and read-only) by the time we process - the shell's environment. */ - if (/* posixly_correct &&*/ STREQ (name, "SHELLOPTS")) + /* If we processed a command-line option that caused SHELLOPTS or + BASHOPTS to be set, it may already be set (and read-only) by the + time we process the shell's environment. */ + ro = STREQ (name, "SHELLOPTS") || STREQ (name, "BASHOPTS"); + if (valid_identifier (name)) { - temp_var = find_variable ("SHELLOPTS"); - ro = temp_var && readonly_p (temp_var); - if (temp_var) - VUNSETATTR (temp_var, att_readonly); - } - if (legal_identifier (name)) - { - temp_var = bind_variable (name, string, 0); + temp_var = bind_variable (name, string, ro ? ASS_FORCE : 0); if (temp_var) { VSETATTR (temp_var, (att_exported | att_imported)); if (ro) - VSETATTR (temp_var, att_readonly); + VSETATTR (temp_var, att_readonly); /* just make sure */ } } else @@ -654,7 +651,7 @@ initialize_shell_variables (env, privmode) that we are remembering commands on the history list. */ if (remember_on_history) { - name = bash_tilde_expand (posixly_correct ? "~/.sh_history" : "~/.bash_history", 0); + name = bash_default_histfile (); set_if_not ("HISTFILE", name); free (name); @@ -718,7 +715,7 @@ initialize_shell_variables (env, privmode) /* **************************************************************** */ static void -set_machine_vars () +set_machine_vars (void) { SHELL_VAR *temp_var; @@ -735,7 +732,7 @@ set_machine_vars () /* This function is not static so the tilde and readline libraries can use it. */ char * -sh_get_home_dir () +sh_get_home_dir (void) { if (current_user.home_dir == 0) get_current_user_info (); @@ -743,7 +740,7 @@ sh_get_home_dir () } static void -set_home_var () +set_home_var (void) { SHELL_VAR *temp_var; @@ -758,7 +755,7 @@ set_home_var () /* Set $SHELL to the user's login shell if it is not already set. Call get_current_user_info if we haven't already fetched the shell. */ static void -set_shell_var () +set_shell_var (void) { SHELL_VAR *temp_var; @@ -775,7 +772,7 @@ set_shell_var () } static char * -get_bash_name () +get_bash_name (void) { char *name; @@ -791,7 +788,7 @@ get_bash_name () { /* Fast path for common case. */ char *cdir; - int len; + size_t len; cdir = get_string_value ("PWD"); if (cdir) @@ -848,15 +845,14 @@ get_bash_name () } void -adjust_shell_level (change) - int change; +adjust_shell_level (int change) { char new_level[5], *old_SHLVL; intmax_t old_level; SHELL_VAR *temp_var; old_SHLVL = get_string_value ("SHLVL"); - if (old_SHLVL == 0 || *old_SHLVL == '\0' || legal_number (old_SHLVL, &old_level) == 0) + if (old_SHLVL == 0 || *old_SHLVL == '\0' || valid_number (old_SHLVL, &old_level) == 0) old_level = 0; shell_level = old_level + change; @@ -894,7 +890,7 @@ adjust_shell_level (change) } static void -initialize_shell_level () +initialize_shell_level (void) { adjust_shell_level (1); } @@ -907,7 +903,7 @@ initialize_shell_level () that's not the same string as $PWD, set PWD=$HOME. */ void -set_pwd () +set_pwd (void) { SHELL_VAR *temp_var, *home_var; char *temp_string, *home_string, *current_dir; @@ -970,7 +966,7 @@ set_pwd () /* Make a variable $PPID, which holds the pid of the shell's parent. */ void -set_ppid () +set_ppid (void) { char namebuf[INT_STRLEN_BOUND(pid_t) + 1], *name; SHELL_VAR *temp_var; @@ -978,13 +974,13 @@ set_ppid () name = inttostr (getppid (), namebuf, sizeof(namebuf)); temp_var = find_variable ("PPID"); if (temp_var) - VUNSETATTR (temp_var, (att_readonly | att_exported)); - temp_var = bind_variable ("PPID", name, 0); + VUNSETATTR (temp_var, att_exported); + temp_var = bind_variable ("PPID", name, ASS_FORCE); VSETATTR (temp_var, (att_readonly | att_integer)); } static void -uidset () +uidset (void) { char buff[INT_STRLEN_BOUND(uid_t) + 1], *b; register SHELL_VAR *v; @@ -1010,7 +1006,7 @@ uidset () #if defined (ARRAY_VARS) static void -make_vers_array () +make_vers_array (void) { SHELL_VAR *vv; ARRAY *av; @@ -1040,8 +1036,7 @@ make_vers_array () /* Set the environment variables $LINES and $COLUMNS in response to a window size change. */ void -sh_set_lines_and_columns (lines, cols) - int lines, cols; +sh_set_lines_and_columns (int lines, int cols) { char val[INT_STRLEN_BOUND(int) + 1], *v; @@ -1067,8 +1062,7 @@ sh_set_lines_and_columns (lines, cols) /* Print LIST (a list of shell variables) to stdout in such a way that they can be read back in. */ void -print_var_list (list) - register SHELL_VAR **list; +print_var_list (SHELL_VAR **list) { register int i; register SHELL_VAR *var; @@ -1081,8 +1075,7 @@ print_var_list (list) /* Print LIST (a list of shell functions) to stdout in such a way that they can be read back in. */ void -print_func_list (list) - register SHELL_VAR **list; +print_func_list (SHELL_VAR **list) { register int i; register SHELL_VAR *var; @@ -1099,8 +1092,7 @@ print_func_list (list) output, but the variable is printed in such a way that it can be read back in. */ void -print_assignment (var) - SHELL_VAR *var; +print_assignment (SHELL_VAR *var) { if (var_isset (var) == 0) return; @@ -1130,9 +1122,7 @@ print_assignment (var) and the value contains shell metacharacters, quote the value in such a way that it can be read back in. */ void -print_var_value (var, quote) - SHELL_VAR *var; - int quote; +print_var_value (SHELL_VAR *var, int quote) { char *t; @@ -1158,8 +1148,7 @@ print_var_value (var, quote) /* Print the function cell of VAR, a shell variable. Do not print the name, nor leading/trailing newline. */ void -print_var_function (var) - SHELL_VAR *var; +print_var_function (SHELL_VAR *var) { char *x; @@ -1237,22 +1226,14 @@ print_var_function (var) while (0) static SHELL_VAR * -null_assign (self, value, unused, key) - SHELL_VAR *self; - char *value; - arrayind_t unused; - char *key; +null_assign (SHELL_VAR *self, char *value, arrayind_t unused, char *key) { return (self); } #if defined (ARRAY_VARS) static SHELL_VAR * -null_array_assign (self, value, ind, key) - SHELL_VAR *self; - char *value; - arrayind_t ind; - char *key; +null_array_assign (SHELL_VAR *self, char *value, arrayind_t ind, char *key) { return (self); } @@ -1261,8 +1242,7 @@ null_array_assign (self, value, ind, key) /* Degenerate `dynamic_value' function; just returns what's passed without manipulation. */ static SHELL_VAR * -get_self (self) - SHELL_VAR *self; +get_self (SHELL_VAR *self) { return (self); } @@ -1271,11 +1251,7 @@ get_self (self) /* A generic dynamic array variable initializer. Initialize array variable NAME with dynamic value function GETFUNC and assignment function SETFUNC. */ static SHELL_VAR * -init_dynamic_array_var (name, getfunc, setfunc, attrs) - char *name; - sh_var_value_func_t *getfunc; - sh_var_assign_func_t *setfunc; - int attrs; +init_dynamic_array_var (char *name, sh_var_value_func_t *getfunc, sh_var_assign_func_t *setfunc, int attrs) { SHELL_VAR *v; @@ -1289,11 +1265,7 @@ init_dynamic_array_var (name, getfunc, setfunc, attrs) } static SHELL_VAR * -init_dynamic_assoc_var (name, getfunc, setfunc, attrs) - char *name; - sh_var_value_func_t *getfunc; - sh_var_assign_func_t *setfunc; - int attrs; +init_dynamic_assoc_var (char *name, sh_var_value_func_t *getfunc, sh_var_assign_func_t *setfunc, int attrs) { SHELL_VAR *v; @@ -1346,11 +1318,7 @@ set_string_value (SHELL_VAR *var, const char *value, int flags) static intmax_t seconds_value_assigned; static SHELL_VAR * -assign_seconds (self, value, unused, key) - SHELL_VAR *self; - char *value; - arrayind_t unused; - char *key; +assign_seconds (SHELL_VAR *self, char *value, arrayind_t unused, char *key) { intmax_t nval; int expok; @@ -1358,7 +1326,7 @@ assign_seconds (self, value, unused, key) if (integer_p (self)) nval = evalexp (value, 0, &expok); else - expok = legal_number (value, &nval); + expok = valid_number (value, &nval); seconds_value_assigned = expok ? nval : 0; gettimeofday (&shellstart, NULL); shell_start_time = shellstart.tv_sec; @@ -1366,8 +1334,7 @@ assign_seconds (self, value, unused, key) } static SHELL_VAR * -get_seconds (var) - SHELL_VAR *var; +get_seconds (SHELL_VAR *var) { time_t time_since_start; struct timeval tv; @@ -1378,31 +1345,52 @@ get_seconds (var) } static SHELL_VAR * -init_seconds_var () +init_seconds_var (void) { SHELL_VAR *v; v = find_variable ("SECONDS"); if (v) { - if (legal_number (value_cell(v), &seconds_value_assigned) == 0) + if (valid_number (value_cell(v), &seconds_value_assigned) == 0) seconds_value_assigned = 0; } INIT_DYNAMIC_VAR ("SECONDS", (v ? value_cell (v) : (char *)NULL), get_seconds, assign_seconds); return v; } +/* Functions for BASH_MONOSECONDS */ +static SHELL_VAR * +get_monoseconds (SHELL_VAR *self) +{ + int ret; + intmax_t nval; + struct timeval tv; + +#if defined (HAVE_CLOCK_GETTIME) && defined (CLOCK_MONOTONIC) + struct timespec ts; + + ret = clock_gettime (CLOCK_MONOTONIC, &ts); + if (ret == 0) + { + nval = ts.tv_sec; + return (set_int_value (self, nval, integer_p (self) != 0)); + } +#endif + + /* Fall back to gettimeofday if clock_gettime not available or fails */ + ret = gettimeofday (&tv, NULL); + nval = tv.tv_sec; + return (set_int_value (self, nval, integer_p (self) != 0)); +} + /* Functions for $RANDOM and $SRANDOM */ int last_random_value; static int seeded_subshell = 0; static SHELL_VAR * -assign_random (self, value, unused, key) - SHELL_VAR *self; - char *value; - arrayind_t unused; - char *key; +assign_random (SHELL_VAR *self, char *value, arrayind_t unused, char *key) { intmax_t seedval; int expok; @@ -1410,7 +1398,7 @@ assign_random (self, value, unused, key) if (integer_p (self)) seedval = evalexp (value, 0, &expok); else - expok = legal_number (value, &seedval); + expok = valid_number (value, &seedval); if (expok == 0) return (self); sbrand (seedval); @@ -1420,7 +1408,7 @@ assign_random (self, value, unused, key) } int -get_random_number () +get_random_number (void) { int rv, pid; @@ -1440,8 +1428,7 @@ get_random_number () } static SHELL_VAR * -get_random (var) - SHELL_VAR *var; +get_random (SHELL_VAR *var) { int rv; @@ -1450,8 +1437,7 @@ get_random (var) } static SHELL_VAR * -get_urandom (var) - SHELL_VAR *var; +get_urandom (SHELL_VAR *var) { u_bits32_t rv; @@ -1460,15 +1446,11 @@ get_urandom (var) } static SHELL_VAR * -assign_lineno (var, value, unused, key) - SHELL_VAR *var; - char *value; - arrayind_t unused; - char *key; +assign_lineno (SHELL_VAR *var, char *value, arrayind_t unused, char *key) { intmax_t new_value; - if (value == 0 || *value == '\0' || legal_number (value, &new_value) == 0) + if (value == 0 || *value == '\0' || valid_number (value, &new_value) == 0) new_value = 0; line_number = line_number_base = new_value; return (set_int_value (var, line_number, integer_p (var) != 0)); @@ -1476,8 +1458,7 @@ assign_lineno (var, value, unused, key) /* Function which returns the current line number. */ static SHELL_VAR * -get_lineno (var) - SHELL_VAR *var; +get_lineno (SHELL_VAR *var) { int ln; @@ -1486,30 +1467,24 @@ get_lineno (var) } static SHELL_VAR * -assign_subshell (var, value, unused, key) - SHELL_VAR *var; - char *value; - arrayind_t unused; - char *key; +assign_subshell (SHELL_VAR *var, char *value, arrayind_t unused, char *key) { intmax_t new_value; - if (value == 0 || *value == '\0' || legal_number (value, &new_value) == 0) + if (value == 0 || *value == '\0' || valid_number (value, &new_value) == 0) new_value = 0; subshell_level = new_value; return var; } static SHELL_VAR * -get_subshell (var) - SHELL_VAR *var; +get_subshell (SHELL_VAR *var) { return (set_int_value (var, subshell_level, 0)); } static SHELL_VAR * -get_epochseconds (var) - SHELL_VAR *var; +get_epochseconds (SHELL_VAR *var) { intmax_t now; @@ -1518,8 +1493,7 @@ get_epochseconds (var) } static SHELL_VAR * -get_epochrealtime (var) - SHELL_VAR *var; +get_epochrealtime (SHELL_VAR *var) { char buf[32]; struct timeval tv; @@ -1533,8 +1507,7 @@ get_epochrealtime (var) } static SHELL_VAR * -get_bashpid (var) - SHELL_VAR *var; +get_bashpid (SHELL_VAR *var) { int pid; @@ -1543,8 +1516,7 @@ get_bashpid (var) } static SHELL_VAR * -get_bash_argv0 (var) - SHELL_VAR *var; +get_bash_argv0 (SHELL_VAR *var) { return (set_string_value (var, dollar_vars[0], 0)); } @@ -1552,11 +1524,7 @@ get_bash_argv0 (var) static char *static_shell_name = 0; static SHELL_VAR * -assign_bash_argv0 (var, value, unused, key) - SHELL_VAR *var; - char *value; - arrayind_t unused; - char *key; +assign_bash_argv0 (SHELL_VAR *var, char *value, arrayind_t unused, char *key) { size_t vlen; @@ -1576,7 +1544,7 @@ assign_bash_argv0 (var, value, unused, key) } static void -set_argv0 () +set_argv0 (void) { SHELL_VAR *v; @@ -1586,8 +1554,7 @@ set_argv0 () } static SHELL_VAR * -get_bash_command (var) - SHELL_VAR *var; +get_bash_command (SHELL_VAR *var) { char *p; @@ -1597,8 +1564,7 @@ get_bash_command (var) #if defined (HISTORY) static SHELL_VAR * -get_histcmd (var) - SHELL_VAR *var; +get_histcmd (SHELL_VAR *var) { int n; @@ -1617,8 +1583,7 @@ get_histcmd (var) #if defined (READLINE) /* When this function returns, VAR->value points to malloced memory. */ static SHELL_VAR * -get_comp_wordbreaks (var) - SHELL_VAR *var; +get_comp_wordbreaks (SHELL_VAR *var) { /* If we don't have anything yet, assign a default value. */ if (rl_completer_word_break_characters == 0 && bash_readline_initialized == 0) @@ -1630,11 +1595,7 @@ get_comp_wordbreaks (var) /* When this function returns, rl_completer_word_break_characters points to malloced memory. */ static SHELL_VAR * -assign_comp_wordbreaks (self, value, unused, key) - SHELL_VAR *self; - char *value; - arrayind_t unused; - char *key; +assign_comp_wordbreaks (SHELL_VAR *self, char *value, arrayind_t unused, char *key) { if (rl_completer_word_break_characters && rl_completer_word_break_characters != rl_basic_word_break_characters) @@ -1647,19 +1608,14 @@ assign_comp_wordbreaks (self, value, unused, key) #if defined (PUSHD_AND_POPD) && defined (ARRAY_VARS) static SHELL_VAR * -assign_dirstack (self, value, ind, key) - SHELL_VAR *self; - char *value; - arrayind_t ind; - char *key; +assign_dirstack (SHELL_VAR *self, char *value, arrayind_t ind, char *key) { set_dirstack_element (ind, 1, value); return self; } static SHELL_VAR * -get_dirstack (self) - SHELL_VAR *self; +get_dirstack (SHELL_VAR *self) { ARRAY *a; WORD_LIST *l; @@ -1677,8 +1633,7 @@ get_dirstack (self) /* We don't want to initialize the group set with a call to getgroups() unless we're asked to, but we only want to do it once. */ static SHELL_VAR * -get_groupset (self) - SHELL_VAR *self; +get_groupset (SHELL_VAR *self) { register int i; int ng; @@ -1697,8 +1652,7 @@ get_groupset (self) # if defined (DEBUGGER) static SHELL_VAR * -get_bashargcv (self) - SHELL_VAR *self; +get_bashargcv (SHELL_VAR *self) { static int self_semaphore = 0; @@ -1717,8 +1671,7 @@ get_bashargcv (self) # endif static SHELL_VAR * -build_hashcmd (self) - SHELL_VAR *self; +build_hashcmd (SHELL_VAR *self) { HASH_TABLE *h; int i; @@ -1751,19 +1704,14 @@ build_hashcmd (self) } static SHELL_VAR * -get_hashcmd (self) - SHELL_VAR *self; +get_hashcmd (SHELL_VAR *self) { build_hashcmd (self); return (self); } static SHELL_VAR * -assign_hashcmd (self, value, ind, key) - SHELL_VAR *self; - char *value; - arrayind_t ind; - char *key; +assign_hashcmd (SHELL_VAR *self, char *value, arrayind_t ind, char *key) { #if defined (RESTRICTED_SHELL) char *full_path; @@ -1793,8 +1741,7 @@ assign_hashcmd (self, value, ind, key) #if defined (ALIAS) static SHELL_VAR * -build_aliasvar (self) - SHELL_VAR *self; +build_aliasvar (SHELL_VAR *self) { HASH_TABLE *h; int i; @@ -1827,21 +1774,16 @@ build_aliasvar (self) } static SHELL_VAR * -get_aliasvar (self) - SHELL_VAR *self; +get_aliasvar (SHELL_VAR *self) { build_aliasvar (self); return (self); } static SHELL_VAR * -assign_aliasvar (self, value, ind, key) - SHELL_VAR *self; - char *value; - arrayind_t ind; - char *key; +assign_aliasvar (SHELL_VAR *self, char *value, arrayind_t ind, char *key) { - if (legal_alias_name (key, 0) == 0) + if (valid_alias_name (key, 0) == 0) { report_error (_("`%s': invalid alias name"), key); return (self); @@ -1856,8 +1798,7 @@ assign_aliasvar (self, value, ind, key) /* If ARRAY_VARS is not defined, this just returns the name of any currently-executing function. If we have arrays, it's a call stack. */ static SHELL_VAR * -get_funcname (self) - SHELL_VAR *self; +get_funcname (SHELL_VAR *self) { #if ! defined (ARRAY_VARS) if (variable_context && this_shell_function) @@ -1867,8 +1808,7 @@ get_funcname (self) } void -make_funcname_visible (on_or_off) - int on_or_off; +make_funcname_visible (int on_or_off) { SHELL_VAR *v; @@ -1883,7 +1823,7 @@ make_funcname_visible (on_or_off) } static SHELL_VAR * -init_funcname_var () +init_funcname_var (void) { SHELL_VAR *v; @@ -1900,7 +1840,7 @@ init_funcname_var () } static void -initialize_dynamic_variables () +initialize_dynamic_variables (void) { SHELL_VAR *v; @@ -1911,6 +1851,8 @@ initialize_dynamic_variables () INIT_DYNAMIC_VAR ("BASH_COMMAND", (char *)NULL, get_bash_command, (sh_var_assign_func_t *)NULL); INIT_DYNAMIC_VAR ("BASH_SUBSHELL", (char *)NULL, get_subshell, assign_subshell); + INIT_DYNAMIC_VAR ("BASH_MONOSECONDS", (char *)NULL, get_monoseconds, (sh_var_assign_func_t *)NULL); + INIT_DYNAMIC_VAR ("RANDOM", (char *)NULL, get_random, assign_random); VSETATTR (v, att_integer); INIT_DYNAMIC_VAR ("SRANDOM", (char *)NULL, get_urandom, (sh_var_assign_func_t *)NULL); @@ -1966,15 +1908,13 @@ initialize_dynamic_variables () #if 0 /* not yet */ int -var_isset (var) - SHELL_VAR *var; +var_isset (SHELL_VAR *var) { return (var->value != 0); } int -var_isunset (var) - SHELL_VAR *var; +var_isunset (SHELL_VAR *var) { return (var->value == 0); } @@ -1985,9 +1925,7 @@ var_isunset (var) of interest (either variables or functions). */ static SHELL_VAR * -hash_lookup (name, hashed_vars) - const char *name; - HASH_TABLE *hashed_vars; +hash_lookup (const char *name, HASH_TABLE *hashed_vars) { BUCKET_CONTENTS *bucket; @@ -2000,9 +1938,7 @@ hash_lookup (name, hashed_vars) } SHELL_VAR * -var_lookup (name, vcontext) - const char *name; - VAR_CONTEXT *vcontext; +var_lookup (const char *name, VAR_CONTEXT *vcontext) { VAR_CONTEXT *vc; SHELL_VAR *v; @@ -2023,9 +1959,7 @@ var_lookup (name, vcontext) */ SHELL_VAR * -find_variable_internal (name, flags) - const char *name; - int flags; +find_variable_internal (const char *name, int flags) { SHELL_VAR *var; int search_tempenv, force_tempenv; @@ -2073,8 +2007,7 @@ find_variable_internal (name, flags) /* Look up and resolve the chain of nameref variables starting at V all the way to NULL or non-nameref. */ SHELL_VAR * -find_variable_nameref (v) - SHELL_VAR *v; +find_variable_nameref (SHELL_VAR *v) { int level, flags; char *newname; @@ -2086,7 +2019,7 @@ find_variable_nameref (v) { level++; if (level > NAMEREF_MAX) - return ((SHELL_VAR *)0); /* error message here? */ + return (&nameref_maxloop_value); newname = nameref_cell (v); if (newname == 0 || *newname == '\0') return ((SHELL_VAR *)0); @@ -2114,9 +2047,7 @@ find_variable_nameref (v) /* Resolve the chain of nameref variables for NAME. XXX - could change later */ SHELL_VAR * -find_variable_last_nameref (name, vflags) - const char *name; - int vflags; +find_variable_last_nameref (const char *name, int vflags) { SHELL_VAR *v, *nv; char *newname; @@ -2144,9 +2075,7 @@ find_variable_last_nameref (name, vflags) /* Resolve the chain of nameref variables for NAME. XXX - could change later */ SHELL_VAR * -find_global_variable_last_nameref (name, vflags) - const char *name; - int vflags; +find_global_variable_last_nameref (const char *name, int vflags) { SHELL_VAR *v, *nv; char *newname; @@ -2170,9 +2099,7 @@ find_global_variable_last_nameref (name, vflags) } static SHELL_VAR * -find_nameref_at_context (v, vc) - SHELL_VAR *v; - VAR_CONTEXT *vc; +find_nameref_at_context (SHELL_VAR *v, VAR_CONTEXT *vc) { SHELL_VAR *nv, *nv2; char *newname; @@ -2202,10 +2129,7 @@ find_nameref_at_context (v, vc) nameref resolution (so the bind_variable_internal can use the correct variable context and hash table). */ static SHELL_VAR * -find_variable_nameref_context (v, vc, nvcp) - SHELL_VAR *v; - VAR_CONTEXT *vc; - VAR_CONTEXT **nvcp; +find_variable_nameref_context (SHELL_VAR *v, VAR_CONTEXT *vc, VAR_CONTEXT **nvcp) { SHELL_VAR *nv, *nv2; VAR_CONTEXT *nvc; @@ -2233,10 +2157,7 @@ find_variable_nameref_context (v, vc, nvcp) nameref resolution (so the bind_variable_internal can use the correct variable context and hash table). */ static SHELL_VAR * -find_variable_last_nameref_context (v, vc, nvcp) - SHELL_VAR *v; - VAR_CONTEXT *vc; - VAR_CONTEXT **nvcp; +find_variable_last_nameref_context (SHELL_VAR *v, VAR_CONTEXT *vc, VAR_CONTEXT **nvcp) { SHELL_VAR *nv, *nv2; VAR_CONTEXT *nvc; @@ -2257,15 +2178,18 @@ find_variable_last_nameref_context (v, vc, nvcp) } SHELL_VAR * -find_variable_nameref_for_create (name, flags) - const char *name; - int flags; +find_variable_nameref_for_create (const char *name, int flags) { SHELL_VAR *var; /* See if we have a nameref pointing to a variable that hasn't been created yet. */ var = find_variable_last_nameref (name, 1); + if (var == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + return ((SHELL_VAR *)INVALID_NAMEREF_VALUE); + } if ((flags&1) && var && nameref_p (var) && invisible_p (var)) { internal_warning (_("%s: removing nameref attribute"), name); @@ -2273,7 +2197,7 @@ find_variable_nameref_for_create (name, flags) } if (var && nameref_p (var)) { - if (legal_identifier (nameref_cell (var)) == 0) + if (valid_identifier (nameref_cell (var)) == 0) { sh_invalidid (nameref_cell (var) ? nameref_cell (var) : ""); return ((SHELL_VAR *)INVALID_NAMEREF_VALUE); @@ -2283,15 +2207,18 @@ find_variable_nameref_for_create (name, flags) } SHELL_VAR * -find_variable_nameref_for_assignment (name, flags) - const char *name; - int flags; +find_variable_nameref_for_assignment (const char *name, int flags) { SHELL_VAR *var; /* See if we have a nameref pointing to a variable that hasn't been created yet. */ var = find_variable_last_nameref (name, 1); + if (var == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + return ((SHELL_VAR *)INVALID_NAMEREF_VALUE); + } if (var && nameref_p (var) && invisible_p (var)) /* XXX - flags */ { internal_warning (_("%s: removing nameref attribute"), name); @@ -2314,12 +2241,9 @@ find_variable_nameref_for_assignment (name, flags) function, but dealing strictly with names. This takes assignment flags so it can deal with the various assignment modes used by `declare'. */ char * -nameref_transform_name (name, flags) - char *name; - int flags; +nameref_transform_name (const char *name, int flags) { SHELL_VAR *v; - char *newname; v = 0; if (flags & ASS_MKLOCAL) @@ -2335,44 +2259,62 @@ nameref_transform_name (name, flags) : find_global_variable_last_nameref (name, 1); if (v && nameref_p (v) && valid_nameref_value (nameref_cell (v), 1)) return nameref_cell (v); - return name; + return (char *)name; } /* Find a variable, forcing a search of the temporary environment first */ SHELL_VAR * -find_variable_tempenv (name) - const char *name; +find_variable_tempenv (const char *name) { SHELL_VAR *var; var = find_variable_internal (name, FV_FORCETEMPENV); if (var && nameref_p (var)) - var = find_variable_nameref (var); + { + var = find_variable_nameref (var); + if (var == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + return (0); + } + } return (var); } /* Find a variable, not forcing a search of the temporary environment first */ SHELL_VAR * -find_variable_notempenv (name) - const char *name; +find_variable_notempenv (const char *name) { SHELL_VAR *var; var = find_variable_internal (name, 0); if (var && nameref_p (var)) - var = find_variable_nameref (var); + { + var = find_variable_nameref (var); + if (var == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + return (0); + } + } return (var); } SHELL_VAR * -find_global_variable (name) - const char *name; +find_global_variable (const char *name) { SHELL_VAR *var; var = var_lookup (name, global_variables); if (var && nameref_p (var)) - var = find_variable_nameref (var); /* XXX - find_global_variable_noref? */ + { + var = find_variable_nameref (var); /* XXX - find_global_variable_noref? */ + if (var == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + return ((SHELL_VAR *)NULL); + } + } if (var == 0) return ((SHELL_VAR *)NULL); @@ -2381,8 +2323,7 @@ find_global_variable (name) } SHELL_VAR * -find_global_variable_noref (name) - const char *name; +find_global_variable_noref (const char *name) { SHELL_VAR *var; @@ -2395,14 +2336,20 @@ find_global_variable_noref (name) } SHELL_VAR * -find_shell_variable (name) - const char *name; +find_shell_variable (const char *name) { SHELL_VAR *var; var = var_lookup (name, shell_variables); if (var && nameref_p (var)) - var = find_variable_nameref (var); + { + var = find_variable_nameref (var); + if (var == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + return ((SHELL_VAR *)NULL); + } + } if (var == 0) return ((SHELL_VAR *)NULL); @@ -2412,8 +2359,7 @@ find_shell_variable (name) /* Look up the variable entry named NAME. Returns the entry or NULL. */ SHELL_VAR * -find_variable (name) - const char *name; +find_variable (const char *name) { SHELL_VAR *v; int flags; @@ -2424,7 +2370,15 @@ find_variable (name) flags |= FV_FORCETEMPENV; v = find_variable_internal (name, flags); if (v && nameref_p (v)) - v = find_variable_nameref (v); + { + v = find_variable_nameref (v); + if (v == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + return (0); + } + } + return v; } @@ -2432,8 +2386,7 @@ find_variable (name) one found without att_invisible set; return 0 if no non-invisible instances found. */ SHELL_VAR * -find_variable_no_invisible (name) - const char *name; +find_variable_no_invisible (const char *name) { SHELL_VAR *v; int flags; @@ -2444,15 +2397,22 @@ find_variable_no_invisible (name) flags |= FV_FORCETEMPENV; v = find_variable_internal (name, flags); if (v && nameref_p (v)) - v = find_variable_nameref (v); + { + v = find_variable_nameref (v); + if (v == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + return (0); + } + } + return v; } /* Find the first instance of NAME in the variable context chain; return first one found even if att_invisible set. */ SHELL_VAR * -find_variable_for_assignment (name) - const char *name; +find_variable_for_assignment (const char *name) { SHELL_VAR *v; int flags; @@ -2463,13 +2423,20 @@ find_variable_for_assignment (name) flags |= FV_FORCETEMPENV; v = find_variable_internal (name, flags); if (v && nameref_p (v)) - v = find_variable_nameref (v); + { + v = find_variable_nameref (v); + if (v == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + return (0); + } + } + return v; } SHELL_VAR * -find_variable_noref (name) - const char *name; +find_variable_noref (const char *name) { SHELL_VAR *v; int flags; @@ -2484,8 +2451,7 @@ find_variable_noref (name) /* Look up the function entry whose name matches STRING. Returns the entry or NULL. */ SHELL_VAR * -find_function (name) - const char *name; +find_function (const char *name) { return (hash_lookup (name, shell_functions)); } @@ -2493,8 +2459,7 @@ find_function (name) /* Find the function definition for the shell function named NAME. Returns the entry or NULL. */ FUNCTION_DEF * -find_function_def (name) - const char *name; +find_function_def (const char *name) { #if defined (DEBUGGER) return ((FUNCTION_DEF *)hash_lookup (name, shell_function_defs)); @@ -2506,8 +2471,7 @@ find_function_def (name) /* Return the value of VAR. VAR is assumed to have been the result of a lookup without any subscript, if arrays are compiled into the shell. */ char * -get_variable_value (var) - SHELL_VAR *var; +get_variable_value (SHELL_VAR *var) { if (var == 0) return ((char *)NULL); @@ -2527,19 +2491,17 @@ get_variable_value (var) leak in practice. Since functions and variables have separate name spaces, returns NULL if var_name is a shell function only. */ char * -get_string_value (var_name) - const char *var_name; +get_string_value (const char *name) { SHELL_VAR *var; - var = find_variable (var_name); + var = find_variable (name); return ((var) ? get_variable_value (var) : (char *)NULL); } /* This is present for use by the tilde and readline libraries. */ char * -sh_get_env_value (v) - const char *v; +sh_get_env_value (const char *v) { return get_string_value (v); } @@ -2550,10 +2512,8 @@ sh_get_env_value (v) /* */ /* **************************************************************** */ -static int -var_sametype (v1, v2) - SHELL_VAR *v1; - SHELL_VAR *v2; +static inline int +var_sametype (SHELL_VAR *v1, SHELL_VAR *v2) { if (v1 == 0 || v2 == 0) return 0; @@ -2572,9 +2532,7 @@ var_sametype (v1, v2) } int -validate_inherited_value (var, type) - SHELL_VAR *var; - int type; +validate_inherited_value (SHELL_VAR *var, int type) { #if defined (ARRAY_VARS) if (type == att_array && assoc_p (var)) @@ -2588,11 +2546,24 @@ validate_inherited_value (var, type) /* Set NAME to VALUE if NAME has no value. */ SHELL_VAR * -set_if_not (name, value) - char *name, *value; +set_if_not (const char *name, const char *value) { SHELL_VAR *v; +#ifdef __MSYS__ + /* Remove trailing \r from value */ + { + char *tpos; + if (value && *value) + { + tpos = strchr (value, '\0'); + tpos--; + if (*tpos == '\r') + *tpos = '\0'; + } + } +#endif + if (shell_variables == 0) create_variable_tables (); @@ -2604,9 +2575,7 @@ set_if_not (name, value) /* Create a local variable referenced by NAME. */ SHELL_VAR * -make_local_variable (name, flags) - const char *name; - int flags; +make_local_variable (const char *name, int flags) { SHELL_VAR *new_var, *old_var, *old_ref; VAR_CONTEXT *vc; @@ -2699,6 +2668,21 @@ make_local_variable (name, flags) new_var = make_new_variable (name, vc->table); else { +#if 0 + /* This handles the case where a variable is found in both the temporary + environment *and* declared as a local variable. If we want to avoid + multiple entries with the same name in VC->table (that might mess up + unset), we need to use the existing variable entry and destroy the + current value. Currently disabled because it doesn't matter -- the + right things happen. */ + new_var = 0; + if (was_tmpvar && (new_var = hash_lookup (name, vc->table))) + { + dispose_variable_value (new_var); + init_variable (new_var); + } + if (new_var == 0) +#endif new_var = make_new_variable (name, vc->table); /* If we found this variable in one of the temporary environments, @@ -2758,16 +2742,9 @@ set_local_var_flags: return (new_var); } -/* Create a new shell variable with name NAME. */ -static SHELL_VAR * -new_shell_variable (name) - const char *name; +static void +init_variable (SHELL_VAR *entry) { - SHELL_VAR *entry; - - entry = (SHELL_VAR *)xmalloc (sizeof (SHELL_VAR)); - - entry->name = savestring (name); var_setvalue (entry, (char *)NULL); CLEAR_EXPORTSTR (entry); @@ -2780,16 +2757,25 @@ new_shell_variable (name) make_local_variable has the responsibility of changing the variable context. */ entry->context = 0; +} +/* Create a new shell variable with name NAME. */ +static SHELL_VAR * +new_shell_variable (const char *name) +{ + SHELL_VAR *entry; + + entry = (SHELL_VAR *)xmalloc (sizeof (SHELL_VAR)); + + entry->name = savestring (name); + init_variable (entry); return (entry); } /* Create a new shell variable with name NAME and add it to the hash table TABLE. */ static SHELL_VAR * -make_new_variable (name, table) - const char *name; - HASH_TABLE *table; +make_new_variable (const char *name, HASH_TABLE *table) { SHELL_VAR *entry; BUCKET_CONTENTS *elt; @@ -2808,8 +2794,7 @@ make_new_variable (name, table) #if defined (ARRAY_VARS) SHELL_VAR * -make_new_array_variable (name) - char *name; +make_new_array_variable (const char *name) { SHELL_VAR *entry; ARRAY *array; @@ -2823,9 +2808,7 @@ make_new_array_variable (name) } SHELL_VAR * -make_local_array_variable (name, flags) - char *name; - int flags; +make_local_array_variable (const char *name, int flags) { SHELL_VAR *var; ARRAY *array; @@ -2864,8 +2847,7 @@ make_local_array_variable (name, flags) } SHELL_VAR * -make_new_assoc_variable (name) - char *name; +make_new_assoc_variable (const char *name) { SHELL_VAR *entry; HASH_TABLE *hash; @@ -2879,9 +2861,7 @@ make_new_assoc_variable (name) } SHELL_VAR * -make_local_assoc_variable (name, flags) - char *name; - int flags; +make_local_assoc_variable (const char *name, int flags) { SHELL_VAR *var; HASH_TABLE *hash; @@ -2921,14 +2901,12 @@ make_local_assoc_variable (name, flags) #endif char * -make_variable_value (var, value, flags) - SHELL_VAR *var; - char *value; - int flags; +make_variable_value (SHELL_VAR *var, const char *value, int flags) { char *retval, *oval; intmax_t lval, rval; - int expok, olen, op; + int expok, op; + size_t olen; /* If this variable has had its type set to integer (via `declare -i'), then do expression evaluation on it and store the result. The @@ -3030,10 +3008,7 @@ make_value: /* If we can optimize appending to string variables, say so */ static int -can_optimize_assignment (entry, value, aflags) - SHELL_VAR *entry; - char *value; - int aflags; +can_optimize_assignment (SHELL_VAR *entry, const char *value, int aflags) { if ((aflags & ASS_APPEND) == 0) return 0; @@ -3050,10 +3025,7 @@ can_optimize_assignment (entry, value, aflags) /* right now we optimize appends to string variables */ static SHELL_VAR * -optimized_assignment (entry, value, aflags) - SHELL_VAR *entry; - char *value; - int aflags; +optimized_assignment (SHELL_VAR *entry, const char *value, int aflags) { size_t len, vlen; char *v, *new; @@ -3078,11 +3050,7 @@ optimized_assignment (entry, value, aflags) temporary environment (but usually is not). HFLAGS controls how NAME is looked up in TABLE; AFLAGS controls how VALUE is assigned */ static SHELL_VAR * -bind_variable_internal (name, value, table, hflags, aflags) - const char *name; - char *value; - HASH_TABLE *table; - int hflags, aflags; +bind_variable_internal (const char *name, const char *value, HASH_TABLE *table, int hflags, int aflags) { char *newval, *tname; SHELL_VAR *entry, *tentry; @@ -3166,7 +3134,7 @@ bind_variable_internal (name, value, table, hflags, aflags) } INVALIDATE_EXPORTSTR (entry); - newval = (aflags & ASS_APPEND) ? make_variable_value (entry, value, aflags) : value; + newval = (aflags & ASS_APPEND) ? make_variable_value (entry, value, aflags) : (char *)value; if (assoc_p (entry)) entry = (*(entry->assign_func)) (entry, newval, -1, savestring ("0")); else if (array_p (entry)) @@ -3253,10 +3221,7 @@ assign_value: first, then we bind into shell_variables. */ SHELL_VAR * -bind_variable (name, value, flags) - const char *name; - char *value; - int flags; +bind_variable (const char *name, const char *value, int flags) { SHELL_VAR *v, *nv; VAR_CONTEXT *vc, *nvc; @@ -3268,8 +3233,9 @@ bind_variable (name, value, flags) and, if found, modify the value there before modifying it in the shell_variables table. This allows sourced scripts to modify values given to them in a temporary environment while modifying the variable - value that the caller sees. */ - if (temporary_env && value) /* XXX - can value be null here? */ + value that the caller sees. The caller can inhibit this by setting + ASS_NOTEMPENV in FLAGS. */ + if (temporary_env && value && (flags & ASS_NOTEMPENV) == 0) /* XXX - can value be null here? */ bind_tempenv_variable (name, value); /* XXX -- handle local variables here. */ @@ -3288,7 +3254,7 @@ bind_variable (name, value, flags) if (nv == 0) { nv = find_variable_last_nameref_context (v, vc, &nvc); - if (nv && nameref_p (nv)) + if (nv && nv != &nameref_maxloop_value && nameref_p (nv)) { /* If this nameref variable doesn't have a value yet, set the value. Otherwise, assign using the value as @@ -3304,7 +3270,7 @@ bind_variable (name, value, flags) } else if (nv == &nameref_maxloop_value) { - internal_warning (_("%s: circular name reference"), v->name); + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), v->name, NAMEREF_MAX); return (bind_global_variable (v->name, value, flags)); } else @@ -3312,7 +3278,7 @@ bind_variable (name, value, flags) } else if (nv == &nameref_maxloop_value) { - internal_warning (_("%s: circular name reference"), v->name); + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), v->name, NAMEREF_MAX); return (bind_global_variable (v->name, value, flags)); } else @@ -3327,10 +3293,7 @@ bind_variable (name, value, flags) } SHELL_VAR * -bind_global_variable (name, value, flags) - const char *name; - char *value; - int flags; +bind_global_variable (const char *name, const char *value, int flags) { if (shell_variables == 0) create_variable_tables (); @@ -3340,14 +3303,11 @@ bind_global_variable (name, value, flags) } static SHELL_VAR * -bind_invalid_envvar (name, value, flags) - const char *name; - char *value; - int flags; +bind_invalid_envvar (const char *name, const char *value, int aflags) { if (invalid_env == 0) invalid_env = hash_create (64); /* XXX */ - return (bind_variable_internal (name, value, invalid_env, HASH_NOSRCH, flags)); + return (bind_variable_internal (name, value, invalid_env, HASH_NOSRCH, aflags)); } /* Make VAR, a simple shell variable, have value VALUE. Once assigned a @@ -3356,10 +3316,7 @@ bind_invalid_envvar (name, value, flags) all modified variables should be exported, mark the variable for export and note that the export environment needs to be recreated. */ SHELL_VAR * -bind_variable_value (var, value, aflags) - SHELL_VAR *var; - char *value; - int aflags; +bind_variable_value (SHELL_VAR *var, char *value, int aflags) { char *t; int invis; @@ -3425,9 +3382,7 @@ bind_variable_value (var, value, aflags) variable we set here, then turn it back on after binding as necessary. */ SHELL_VAR * -bind_int_variable (lhs, rhs, flags) - char *lhs, *rhs; - int flags; +bind_int_variable (const char *lhs, const char *rhs, int flags) { register SHELL_VAR *v; int isint, isarr, implicitarray, vflags, avflags; @@ -3435,21 +3390,14 @@ bind_int_variable (lhs, rhs, flags) isint = isarr = implicitarray = 0; #if defined (ARRAY_VARS) /* Don't rely on VA_NOEXPAND being 1, set it explicitly */ - vflags = (flags & ASS_NOEXPAND) ? VA_NOEXPAND : 0; - if (flags & ASS_ONEWORD) - vflags |= VA_ONEWORD; + vflags = convert_assign_flags_to_validarray_flags (flags); if (valid_array_reference (lhs, vflags)) { isarr = 1; - avflags = 0; - /* Common code to translate between assignment and reference flags. */ - if (flags & ASS_NOEXPAND) - avflags |= AV_NOEXPAND; - if (flags & ASS_ONEWORD) - avflags |= AV_ONEWORD; + avflags = convert_assign_flags_to_arrayval_flags (flags); v = array_variable_part (lhs, avflags, (char **)0, (int *)0); } - else if (legal_identifier (lhs) == 0) + else if (valid_identifier (lhs) == 0) { sh_invalidid (lhs); return ((SHELL_VAR *)NULL); @@ -3491,10 +3439,7 @@ bind_int_variable (lhs, rhs, flags) } SHELL_VAR * -bind_var_to_int (var, val, flags) - char *var; - intmax_t val; - int flags; +bind_var_to_int (const char *var, intmax_t val, int flags) { char ibuf[INT_STRLEN_BOUND (intmax_t) + 1], *p; @@ -3505,9 +3450,7 @@ bind_var_to_int (var, val, flags) /* Do a function binding to a variable. You pass the name and the command to bind to. This conses the name and command. */ SHELL_VAR * -bind_function (name, value) - const char *name; - COMMAND *value; +bind_function (const char *name, COMMAND *value) { SHELL_VAR *entry; @@ -3554,10 +3497,7 @@ bind_function (name, value) If (FLAGS & 1), overwrite any existing definition. If FLAGS == 0, leave any existing definition alone. */ void -bind_function_def (name, value, flags) - const char *name; - FUNCTION_DEF *value; - int flags; +bind_function_def (const char *name, FUNCTION_DEF *value, int flags) { FUNCTION_DEF *entry; BUCKET_CONTENTS *elt; @@ -3589,9 +3529,7 @@ bind_function_def (name, value, flags) responsible for moving the main temporary env to one of the other temporary environments. The expansion code in subst.c calls this. */ int -assign_in_env (word, flags) - WORD_DESC *word; - int flags; +assign_in_env (const WORD_DESC *word, int flags) { int offset, aflags; char *name, *temp, *value, *newname; @@ -3616,7 +3554,7 @@ assign_in_env (word, flags) aflags |= ASS_APPEND; } - if (legal_identifier (name) == 0) + if (valid_identifier (name) == 0) { sh_invalidid (name); free (name); @@ -3717,8 +3655,7 @@ assign_in_env (word, flags) #ifdef INCLUDE_UNUSED /* Copy VAR to a new data structure and return that structure. */ SHELL_VAR * -copy_variable (var) - SHELL_VAR *var; +copy_variable (SHELL_VAR *var) { SHELL_VAR *copy = (SHELL_VAR *)NULL; @@ -3763,10 +3700,11 @@ copy_variable (var) /* Dispose of the information attached to VAR. */ static void -dispose_variable_value (var) - SHELL_VAR *var; +dispose_variable_value (SHELL_VAR *var) { - if (function_p (var)) + if (nofree_p (var)) + var_setvalue (var, (char *)NULL); + else if (function_p (var)) dispose_command (function_cell (var)); #if defined (ARRAY_VARS) else if (array_p (var)) @@ -3781,8 +3719,7 @@ dispose_variable_value (var) } void -dispose_variable (var) - SHELL_VAR *var; +dispose_variable (SHELL_VAR *var) { if (var == 0) return; @@ -3800,17 +3737,62 @@ dispose_variable (var) free (var); } +/* placeholder function to work out the right semantics */ + +/* POSIX interp 1009 says to unset the tempvar variable and unset it at + the previous scope (or the current scope if the variable is a local + var at the current scope). So we destroy the temp var, then call + unbind_variable again with that variable out of the way. We assume this + is called from unset_builtin with the shell in posix mode. */ +int +posix_unbind_tempvar (const char *name) +{ + SHELL_VAR *v; + int r; + + /* We need a way to differentiate between variable assignments preceding + a function and variable assignments preceding a special builtin. + We test the head of the variables chain: shell_variables->flags. If it + contains VC_FUNCENV, this is a temp environment preceding a function + call; if it contains VC_BLTNENV, it's a temp environment preceding a + shell builtin of interest (including unset). So we see if NAME is a + shell variable in a temp environment preceding a special builtin. If + not, we just unset the variable as normal. */ + v = vc_isbltnenv (shell_variables) ? hash_lookup (name, shell_variables->table) : 0; + if (v == 0 || tempvar_p (v) == 0) + return (unbind_variable (name)); + + /* We know NAME is a temporary variable in a temporary environment + preceding a special builtin of interest (unset). */ + /* tempvar variables can't be namerefs, so don't worry about that. */ + r = makunbound (name, shell_variables); + + /* Now that we've removed the temporary variable, we have to implement + the POSIX semantics for assignments preceding a special builtin: + "if an assigned variable is further modified by the utility, the + modifications made by the utility shall persist." So we unset it at + the first previous context where we find it. */ + unbind_variable (name); + + /* Always return the status of unbinding the temporary environment entry. */ + return r; +} + /* Unset the shell variable referenced by NAME. Unsetting a nameref variable unsets the variable it resolves to but leaves the nameref alone. */ int -unbind_variable (name) - const char *name; +unbind_variable (const char *name) { SHELL_VAR *v, *nv; int r; v = var_lookup (name, shell_variables); nv = (v && nameref_p (v)) ? find_variable_nameref (v) : (SHELL_VAR *)NULL; + if (nv == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + nv = 0; + } r = nv ? makunbound (nv->name, shell_variables) : makunbound (name, shell_variables); return r; @@ -3818,8 +3800,7 @@ unbind_variable (name) /* Unbind NAME, where NAME is assumed to be a nameref variable */ int -unbind_nameref (name) - const char *name; +unbind_nameref (const char *name) { SHELL_VAR *v; @@ -3831,8 +3812,7 @@ unbind_nameref (name) /* Unbind the first instance of NAME, whether it's a nameref or not */ int -unbind_variable_noref (name) - const char *name; +unbind_variable_noref (const char *name) { SHELL_VAR *v; @@ -3843,8 +3823,7 @@ unbind_variable_noref (name) } int -unbind_global_variable (name) - const char *name; +unbind_global_variable (const char *name) { SHELL_VAR *v, *nv; int r; @@ -3853,14 +3832,18 @@ unbind_global_variable (name) /* This starts at the current scope, just like find_global_variable; should we use find_global_variable_nameref here? */ nv = (v && nameref_p (v)) ? find_variable_nameref (v) : (SHELL_VAR *)NULL; + if (nv == &nameref_maxloop_value) + { + internal_warning (_("%s: maximum nameref depth (%d) exceeded"), name, NAMEREF_MAX); + nv = 0; + } r = nv ? makunbound (nv->name, shell_variables) : makunbound (name, global_variables); return r; } int -unbind_global_variable_noref (name) - const char *name; +unbind_global_variable_noref (const char *name) { SHELL_VAR *v; @@ -3871,8 +3854,7 @@ unbind_global_variable_noref (name) } int -check_unbind_variable (name) - const char *name; +check_unbind_variable (const char *name) { SHELL_VAR *v; @@ -3892,8 +3874,7 @@ check_unbind_variable (name) /* Unset the shell function named NAME. */ int -unbind_func (name) - const char *name; +unbind_func (const char *name) { BUCKET_CONTENTS *elt; SHELL_VAR *func; @@ -3923,8 +3904,7 @@ unbind_func (name) #if defined (DEBUGGER) int -unbind_function_def (name) - const char *name; +unbind_function_def (const char *name) { BUCKET_CONTENTS *elt; FUNCTION_DEF *funcdef; @@ -3946,9 +3926,7 @@ unbind_function_def (name) #endif /* DEBUGGER */ int -delete_var (name, vc) - const char *name; - VAR_CONTEXT *vc; +delete_var (const char *name, VAR_CONTEXT *vc) { BUCKET_CONTENTS *elt; SHELL_VAR *old_var; @@ -3974,9 +3952,7 @@ delete_var (name, vc) shell_variables or shell_functions). Returns non-zero if the variable couldn't be found. */ int -makunbound (name, vc) - const char *name; - VAR_CONTEXT *vc; +makunbound (const char *name, VAR_CONTEXT *vc) { BUCKET_CONTENTS *elt, *new_elt; SHELL_VAR *old_var; @@ -4004,22 +3980,18 @@ makunbound (name, vc) if (old_var && local_p (old_var) && (old_var->context == variable_context || (localvar_unset && old_var->context < variable_context))) { - if (nofree_p (old_var)) - var_setvalue (old_var, (char *)NULL); -#if defined (ARRAY_VARS) - else if (array_p (old_var)) - array_dispose (array_cell (old_var)); - else if (assoc_p (old_var)) - assoc_dispose (assoc_cell (old_var)); -#endif - else if (nameref_p (old_var)) - FREE (nameref_cell (old_var)); - else - FREE (value_cell (old_var)); + dispose_variable_value (old_var); + +#if 0 /* Reset the attributes. Preserve the export attribute if the variable came from a temporary environment. Make sure it stays local, and make it invisible. */ old_var->attributes = (exported_p (old_var) && tempvar_p (old_var)) ? att_exported : 0; +#else /* TAG:bash-5.3 look at this again */ + /* Reset the attributes, but preserve the export attribute. + Make sure it stays local, and make it invisible. */ + old_var->attributes = exported_p (old_var) ? att_exported : 0; +#endif VSETATTR (old_var, att_local); VSETATTR (old_var, att_invisible); var_setvalue (old_var, (char *)NULL); @@ -4051,7 +4023,7 @@ makunbound (name, vc) /* Get rid of all of the variables in the current context. */ void -kill_all_local_variables () +kill_all_local_variables (void) { VAR_CONTEXT *vc; @@ -4070,8 +4042,7 @@ kill_all_local_variables () } static void -free_variable_hash_data (data) - PTR_T data; +free_variable_hash_data (PTR_T data) { SHELL_VAR *var; @@ -4081,8 +4052,7 @@ free_variable_hash_data (data) /* Delete the entire contents of the hash table. */ void -delete_all_variables (hashed_vars) - HASH_TABLE *hashed_vars; +delete_all_variables (HASH_TABLE *hashed_vars) { hash_flush (hashed_vars, free_variable_hash_data); } @@ -4108,8 +4078,7 @@ delete_all_variables (hashed_vars) /* Make the variable associated with NAME be readonly. If NAME does not exist yet, create it. */ void -set_var_read_only (name) - char *name; +set_var_read_only (char *name) { SHELL_VAR *entry; @@ -4121,8 +4090,7 @@ set_var_read_only (name) /* Make the function associated with NAME be readonly. If NAME does not exist, we just punt, like auto_export code below. */ void -set_func_read_only (name) - const char *name; +set_func_read_only (const char *name) { SHELL_VAR *entry; @@ -4134,8 +4102,7 @@ set_func_read_only (name) /* Make the variable associated with NAME be auto-exported. If NAME does not exist yet, create it. */ void -set_var_auto_export (name) - char *name; +set_var_auto_export (char *name) { SHELL_VAR *entry; @@ -4145,8 +4112,7 @@ set_var_auto_export (name) /* Make the function associated with NAME be auto-exported. */ void -set_func_auto_export (name) - const char *name; +set_func_auto_export (const char *name) { SHELL_VAR *entry; @@ -4163,8 +4129,7 @@ set_func_auto_export (name) /* **************************************************************** */ static VARLIST * -vlist_alloc (nentries) - int nentries; +vlist_alloc (size_t nentries) { VARLIST *vlist; @@ -4178,9 +4143,7 @@ vlist_alloc (nentries) } static VARLIST * -vlist_realloc (vlist, n) - VARLIST *vlist; - int n; +vlist_realloc (VARLIST *vlist, size_t n) { if (vlist == 0) return (vlist = vlist_alloc (n)); @@ -4193,10 +4156,7 @@ vlist_realloc (vlist, n) } static void -vlist_add (vlist, var, flags) - VARLIST *vlist; - SHELL_VAR *var; - int flags; +vlist_add (VARLIST *vlist, SHELL_VAR *var, int flags) { register int i; @@ -4217,14 +4177,12 @@ vlist_add (vlist, var, flags) variables for which FUNCTION returns a non-zero value. A NULL value for FUNCTION means to use all variables. */ SHELL_VAR ** -map_over (function, vc) - sh_var_map_func_t *function; - VAR_CONTEXT *vc; +map_over (sh_var_map_func_t *function, VAR_CONTEXT *vc) { VAR_CONTEXT *v; VARLIST *vlist; SHELL_VAR **ret; - int nentries; + size_t nentries; for (nentries = 0, v = vc; v; v = v->down) nentries += HASH_ENTRIES (v->table); @@ -4243,8 +4201,7 @@ map_over (function, vc) } SHELL_VAR ** -map_over_funcs (function) - sh_var_map_func_t *function; +map_over_funcs (sh_var_map_func_t *function) { VARLIST *vlist; SHELL_VAR **ret; @@ -4268,11 +4225,7 @@ map_over_funcs (function) NULL, FUNC is applied to each SHELL_VAR in VAR_HASH_TABLE. If VLIST and FUNC are both NULL, nothing happens. */ static void -flatten (var_hash_table, func, vlist, flags) - HASH_TABLE *var_hash_table; - sh_var_map_func_t *func; - VARLIST *vlist; - int flags; +flatten (HASH_TABLE *var_hash_table, sh_var_map_func_t *func, VARLIST *vlist, int flags) { register int i; register BUCKET_CONTENTS *tlist; @@ -4296,15 +4249,13 @@ flatten (var_hash_table, func, vlist, flags) } void -sort_variables (array) - SHELL_VAR **array; +sort_variables (SHELL_VAR **array) { qsort (array, strvec_len ((char **)array), sizeof (SHELL_VAR *), (QSFUNC *)qsort_var_comp); } static int -qsort_var_comp (var1, var2) - SHELL_VAR **var1, **var2; +qsort_var_comp (SHELL_VAR **var1, SHELL_VAR **var2) { int result; @@ -4317,8 +4268,7 @@ qsort_var_comp (var1, var2) /* Apply FUNC to each variable in SHELL_VARIABLES, adding each one for which FUNC succeeds to an array of SHELL_VAR *s. Returns the array. */ static SHELL_VAR ** -vapply (func) - sh_var_map_func_t *func; +vapply (sh_var_map_func_t *func) { SHELL_VAR **list; @@ -4331,8 +4281,7 @@ vapply (func) /* Apply FUNC to each variable in SHELL_FUNCTIONS, adding each one for which FUNC succeeds to an array of SHELL_VAR *s. Returns the array. */ static SHELL_VAR ** -fapply (func) - sh_var_map_func_t *func; +fapply (sh_var_map_func_t *func) { SHELL_VAR **list; @@ -4344,33 +4293,32 @@ fapply (func) /* Create a NULL terminated array of all the shell variables. */ SHELL_VAR ** -all_shell_variables () +all_shell_variables (void) { return (vapply ((sh_var_map_func_t *)NULL)); } /* Create a NULL terminated array of all the shell functions. */ SHELL_VAR ** -all_shell_functions () +all_shell_functions (void) { return (fapply ((sh_var_map_func_t *)NULL)); } static int -visible_var (var) - SHELL_VAR *var; +visible_var (SHELL_VAR *var) { return (invisible_p (var) == 0); } SHELL_VAR ** -all_visible_functions () +all_visible_functions (void) { return (fapply (visible_var)); } SHELL_VAR ** -all_visible_variables () +all_visible_variables (void) { return (vapply (visible_var)); } @@ -4378,8 +4326,7 @@ all_visible_variables () /* Return non-zero if the variable VAR is visible and exported. Array variables cannot be exported. */ static int -visible_and_exported (var) - SHELL_VAR *var; +visible_and_exported (SHELL_VAR *var) { return (invisible_p (var) == 0 && exported_p (var)); } @@ -4388,8 +4335,7 @@ visible_and_exported (var) with the export attribute or invalid variables inherited from the initial environment and simply passed through. */ static int -export_environment_candidate (var) - SHELL_VAR *var; +export_environment_candidate (SHELL_VAR *var) { return (exported_p (var) && (invisible_p (var) == 0 || imported_p (var))); } @@ -4397,41 +4343,37 @@ export_environment_candidate (var) /* Return non-zero if VAR is a local variable in the current context and is exported. */ static int -local_and_exported (var) - SHELL_VAR *var; +local_and_exported (SHELL_VAR *var) { return (invisible_p (var) == 0 && local_p (var) && var->context == variable_context && exported_p (var)); } SHELL_VAR ** -all_exported_variables () +all_exported_variables (void) { return (vapply (visible_and_exported)); } SHELL_VAR ** -local_exported_variables () +local_exported_variables (void) { return (vapply (local_and_exported)); } static int -variable_in_context (var) - SHELL_VAR *var; +variable_in_context (SHELL_VAR *var) { return (local_p (var) && var->context == variable_context); } static int -visible_variable_in_context (var) - SHELL_VAR *var; +visible_variable_in_context (SHELL_VAR *var) { return (invisible_p (var) == 0 && local_p (var) && var->context == variable_context); } SHELL_VAR ** -all_local_variables (visible_only) - int visible_only; +all_local_variables (int visible_only) { VARLIST *vlist; SHELL_VAR **ret; @@ -4467,26 +4409,25 @@ all_local_variables (visible_only) #if defined (ARRAY_VARS) /* Return non-zero if the variable VAR is visible and an array. */ static int -visible_array_vars (var) - SHELL_VAR *var; +visible_array_vars (SHELL_VAR *var) { return (invisible_p (var) == 0 && (array_p (var) || assoc_p (var))); } SHELL_VAR ** -all_array_variables () +all_array_variables (void) { return (vapply (visible_array_vars)); } #endif /* ARRAY_VARS */ char ** -all_variables_matching_prefix (prefix) - const char *prefix; +all_variables_matching_prefix (const char *prefix) { SHELL_VAR **varlist; char **rlist; - int vind, rind, plen; + int rind; + size_t plen, vind; plen = STRLEN (prefix); varlist = all_visible_variables (); @@ -4514,9 +4455,7 @@ all_variables_matching_prefix (prefix) /* Make variable NAME have VALUE in the temporary environment. */ static SHELL_VAR * -bind_tempenv_variable (name, value) - const char *name; - char *value; +bind_tempenv_variable (const char *name, const char *value) { SHELL_VAR *var; @@ -4535,8 +4474,7 @@ bind_tempenv_variable (name, value) /* Find a variable in the temporary environment that is named NAME. Return the SHELL_VAR *, or NULL if not found. */ SHELL_VAR * -find_tempenv_variable (name) - const char *name; +find_tempenv_variable (const char *name) { return (temporary_env ? hash_lookup (name, temporary_env) : (SHELL_VAR *)NULL); } @@ -4549,11 +4487,12 @@ int tvlist_ind; is called from merge_temporary_env, which is only called when in posix mode. */ static void -push_posix_temp_var (data) - PTR_T data; +push_posix_temp_var (PTR_T data) { SHELL_VAR *var, *v; +#if 0 HASH_TABLE *binding_table; +#endif var = (SHELL_VAR *)data; @@ -4565,11 +4504,13 @@ push_posix_temp_var (data) /* XXX - do we need to worry about array variables here? */ +#if 0 /* If this modifies an existing local variable, v->context will be non-zero. If it comes back with v->context == 0, we bound at the global context. Set binding_table appropriately. It doesn't matter whether it's correct if the variable is local, only that it's not global_variables->table */ binding_table = v->context ? shell_variables->table : global_variables->table; +#endif /* global variables are no longer temporary and don't need propagating. */ if (v->context == 0) @@ -4604,8 +4545,7 @@ push_posix_temp_var (data) we can create variables in the current scope. */ static void -push_temp_var (data) - PTR_T data; +push_temp_var (PTR_T data) { SHELL_VAR *var, *v; HASH_TABLE *binding_table; @@ -4624,6 +4564,11 @@ push_temp_var (data) v = bind_variable_internal (var->name, value_cell (var), binding_table, 0, ASS_FORCE|ASS_NOLONGJMP); +#if defined (ARRAY_VARS) + if (v && (array_p (var) || assoc_p (var))) + arrayvar_copyval (var, v); +#endif + /* XXX - should we set the context here? It shouldn't matter because of how assign_in_env works, but we do it anyway. */ if (v) @@ -4651,13 +4596,12 @@ push_temp_var (data) taking a variable like `var=value declare -x var' and propagating it to the enclosing scope. */ static void -propagate_temp_var (data) - PTR_T data; +propagate_temp_var (PTR_T data) { SHELL_VAR *var; var = (SHELL_VAR *)data; - if (tempvar_p (var) && (var->attributes & att_propagate)) + if (tempvar_p (var) && propagate_p (var)) push_temp_var (data); else { @@ -4675,8 +4619,7 @@ propagate_temp_var (data) function can call stupidly_hack_special_variables on all the variables in the list when the temporary hash table is destroyed. */ static void -dispose_temporary_env (pushf) - sh_free_func_t *pushf; +dispose_temporary_env (sh_free_func_t *pushf) { int i; HASH_TABLE *disposer; @@ -4703,7 +4646,7 @@ dispose_temporary_env (pushf) } void -dispose_used_env_vars () +dispose_used_env_vars (void) { if (temporary_env) { @@ -4718,7 +4661,7 @@ dispose_used_env_vars () accident of creating global variables from assignment statements preceding special builtins, but we check in case this acquires another caller later. */ void -merge_temporary_env () +merge_temporary_env (void) { if (temporary_env) dispose_temporary_env (posixly_correct ? push_posix_temp_var : push_temp_var); @@ -4727,14 +4670,14 @@ merge_temporary_env () /* Temporary function to use if we want to separate function and special builtin behavior. */ void -merge_function_temporary_env () +merge_function_temporary_env (void) { if (temporary_env) dispose_temporary_env (push_temp_var); } void -flush_temporary_env () +flush_temporary_env (void) { if (temporary_env) { @@ -4751,9 +4694,7 @@ flush_temporary_env () /* **************************************************************** */ static inline char * -mk_env_string (name, value, attributes) - const char *name, *value; - int attributes; +mk_env_string (const char *name, const char *value, int attributes) { size_t name_len, value_len; char *p, *q, *t; @@ -4842,8 +4783,7 @@ mk_env_string (name, value, attributes) #ifdef DEBUG /* Debugging */ static int -valid_exportstr (v) - SHELL_VAR *v; +valid_exportstr (SHELL_VAR *v) { char *s; @@ -4884,8 +4824,7 @@ valid_exportstr (v) #endif static char ** -make_env_array_from_var_list (vars) - SHELL_VAR **vars; +make_env_array_from_var_list (SHELL_VAR **vars) { register int i, list_index; register SHELL_VAR *var; @@ -4956,8 +4895,7 @@ make_env_array_from_var_list (vars) HASHED_VARS which contains SHELL_VARs. Only visible, exported variables are eligible. */ static char ** -make_var_export_array (vcxt) - VAR_CONTEXT *vcxt; +make_var_export_array (VAR_CONTEXT *vcxt) { char **list; SHELL_VAR **vars; @@ -4978,7 +4916,7 @@ make_var_export_array (vcxt) } static char ** -make_func_export_array () +make_func_export_array (void) { char **list; SHELL_VAR **vars; @@ -5010,9 +4948,7 @@ do \ /* Add ASSIGN to EXPORT_ENV, or supersede a previous assignment in the array with the same left-hand side. Return the new EXPORT_ENV. */ char ** -add_or_supercede_exported_var (assign, do_alloc) - char *assign; - int do_alloc; +add_or_supercede_exported_var (char *assign, int do_alloc) { register int i; int equal_offset; @@ -5042,9 +4978,7 @@ add_or_supercede_exported_var (assign, do_alloc) } static void -add_temp_array_to_env (temp_array, do_alloc, do_supercede) - char **temp_array; - int do_alloc, do_supercede; +add_temp_array_to_env (char **temp_array, int do_alloc, int do_supercede) { register int i; @@ -5079,7 +5013,7 @@ add_temp_array_to_env (temp_array, do_alloc, do_supercede) */ static int -n_shell_variables () +n_shell_variables (void) { VAR_CONTEXT *vc; int n; @@ -5090,8 +5024,7 @@ n_shell_variables () } int -chkexport (name) - char *name; +chkexport (char *name) { SHELL_VAR *v; @@ -5106,7 +5039,7 @@ chkexport (name) } void -maybe_make_export_env () +maybe_make_export_env (void) { register char **temp_array; int new_size; @@ -5186,10 +5119,7 @@ maybe_make_export_env () just update the variables in place and mark the exported environment as no longer needing a remake. */ void -update_export_env_inplace (env_prefix, preflen, value) - char *env_prefix; - int preflen; - char *value; +update_export_env_inplace (char *env_prefix, int preflen, char *value) { char *evar; @@ -5202,8 +5132,7 @@ update_export_env_inplace (env_prefix, preflen, value) /* We always put _ in the environment as the name of this command. */ void -put_command_name_into_env (command_name) - char *command_name; +put_command_name_into_env (char *command_name) { update_export_env_inplace ("_=", 2, command_name); } @@ -5218,9 +5147,7 @@ put_command_name_into_env (command_name) NAME can be NULL. */ VAR_CONTEXT * -new_var_context (name, flags) - char *name; - int flags; +new_var_context (char *name, int flags) { VAR_CONTEXT *vc; @@ -5238,8 +5165,7 @@ new_var_context (name, flags) /* Free a variable context and its data, including the hash table. Dispose all of the variables. */ void -dispose_var_context (vc) - VAR_CONTEXT *vc; +dispose_var_context (VAR_CONTEXT *vc) { FREE (vc->name); @@ -5254,8 +5180,7 @@ dispose_var_context (vc) /* Set VAR's scope level to the current variable context. */ static int -set_context (var) - SHELL_VAR *var; +set_context (SHELL_VAR *var) { return (var->context = variable_context); } @@ -5264,10 +5189,7 @@ set_context (var) temporary variables, and push it onto shell_variables. This is for shell functions. */ VAR_CONTEXT * -push_var_context (name, flags, tempvars) - char *name; - int flags; - HASH_TABLE *tempvars; +push_var_context (char *name, int flags, HASH_TABLE *tempvars) { VAR_CONTEXT *vc; int posix_func_behavior; @@ -5311,9 +5233,7 @@ push_var_context (name, flags, tempvars) */ static inline void -push_posix_tempvar_internal (var, isbltin) - SHELL_VAR *var; - int isbltin; +push_posix_tempvar_internal (SHELL_VAR *var, int isbltin) { SHELL_VAR *v; int posix_var_behavior; @@ -5330,6 +5250,7 @@ push_posix_tempvar_internal (var, isbltin) set_current_options (value_cell (var)); set_shellopts (); } + /* This takes variable assignments preceding special builtins that can execute multiple commands (source, eval, etc.) and performs the equivalent of an assignment statement to modify the closest enclosing variable (the @@ -5371,21 +5292,14 @@ push_posix_tempvar_internal (var, isbltin) #if defined (ARRAY_VARS) if (v && (array_p (var) || assoc_p (var))) - { - FREE (value_cell (v)); - if (array_p (var)) - var_setarray (v, array_copy (array_cell (var))); - else - var_setassoc (v, assoc_copy (assoc_cell (var))); - } -#endif + arrayvar_copyval (var, v); +#endif dispose_variable (var); } static void -push_func_var (data) - PTR_T data; +push_func_var (PTR_T data) { SHELL_VAR *var; @@ -5394,8 +5308,7 @@ push_func_var (data) } static void -push_builtin_var (data) - PTR_T data; +push_builtin_var (PTR_T data) { SHELL_VAR *var; @@ -5406,14 +5319,16 @@ push_builtin_var (data) /* Pop the top context off of VCXT and dispose of it, returning the rest of the stack. */ void -pop_var_context () +pop_var_context (void) { VAR_CONTEXT *ret, *vcxt; vcxt = shell_variables; if (vc_isfuncenv (vcxt) == 0) { - internal_error (_("pop_var_context: head of shell_variables not a function context")); + /* If we haven't flushed all of the local contexts already, flag an error */ + if (shell_variables != global_variables || variable_context > 0) + internal_error (_("pop_var_context: head of shell_variables not a function context")); return; } @@ -5430,8 +5345,7 @@ pop_var_context () } static void -delete_local_contexts (vcxt) - VAR_CONTEXT *vcxt; +delete_local_contexts (VAR_CONTEXT *vcxt) { VAR_CONTEXT *v, *t; @@ -5445,8 +5359,7 @@ delete_local_contexts (vcxt) /* Delete the HASH_TABLEs for all variable contexts beginning at VCXT, and all of the VAR_CONTEXTs except GLOBAL_VARIABLES. */ void -delete_all_contexts (vcxt) - VAR_CONTEXT *vcxt; +delete_all_contexts (VAR_CONTEXT *vcxt) { delete_local_contexts (vcxt); delete_all_variables (global_variables->table); @@ -5456,7 +5369,7 @@ delete_all_contexts (vcxt) /* Reset the context so we are not executing in a shell function. Only call this if you are getting ready to exit the shell. */ void -reset_local_contexts () +reset_local_contexts (void) { delete_local_contexts (shell_variables); shell_variables = global_variables; @@ -5470,16 +5383,13 @@ reset_local_contexts () /* **************************************************************** */ VAR_CONTEXT * -push_scope (flags, tmpvars) - int flags; - HASH_TABLE *tmpvars; +push_scope (int flags, HASH_TABLE *tmpvars) { return (push_var_context ((char *)NULL, flags, tmpvars)); } static void -push_exported_var (data) - PTR_T data; +push_exported_var (PTR_T data) { SHELL_VAR *var, *v; @@ -5489,7 +5399,7 @@ push_exported_var (data) propagated, bind it in the previous scope before disposing it. */ /* XXX - This isn't exactly right, because all tempenv variables have the export attribute set. */ - if (tempvar_p (var) && exported_p (var) && (var->attributes & att_propagate)) + if (tempvar_p (var) && exported_p (var) && propagate_p (var)) { var->attributes &= ~att_tempvar; /* XXX */ v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0, 0); @@ -5513,8 +5423,7 @@ push_exported_var (data) variables in its temporary environment. In the first case, we call push_builtin_var, which does the right thing. */ void -pop_scope (is_special) - int is_special; +pop_scope (void *is_special) { VAR_CONTEXT *vcxt, *ret; int is_bltinenv; @@ -5538,7 +5447,7 @@ pop_scope (is_special) FREE (vcxt->name); if (vcxt->table) { - if (is_special) + if ((intptr_t) is_special) hash_flush (vcxt->table, push_builtin_var); else hash_flush (vcxt->table, push_exported_var); @@ -5562,13 +5471,13 @@ struct saved_dollar_vars { }; static struct saved_dollar_vars *dollar_arg_stack = (struct saved_dollar_vars *)NULL; -static int dollar_arg_stack_slots; +static size_t dollar_arg_stack_slots; static int dollar_arg_stack_index; /* Functions to manipulate dollar_vars array. Need to keep these in sync with whatever remember_args() does. */ static char ** -save_dollar_vars () +save_dollar_vars (void) { char **ret; int i; @@ -5583,8 +5492,7 @@ save_dollar_vars () } static void -restore_dollar_vars (args) - char **args; +restore_dollar_vars (char **args) { int i; @@ -5593,7 +5501,7 @@ restore_dollar_vars (args) } static void -free_dollar_vars () +free_dollar_vars (void) { int i; @@ -5605,8 +5513,7 @@ free_dollar_vars () } static void -free_saved_dollar_vars (args) - char **args; +free_saved_dollar_vars (char **args) { int i; @@ -5616,7 +5523,7 @@ free_saved_dollar_vars (args) /* Do what remember_args (xxx, 1) would have done. */ void -clear_dollar_vars () +clear_dollar_vars (void) { free_dollar_vars (); dispose_words (rest_of_args); @@ -5626,11 +5533,9 @@ clear_dollar_vars () } /* XXX - should always be followed by remember_args () */ +/* NAME is the function name */ void -push_context (name, is_subshell, tempvars) - char *name; /* function name */ - int is_subshell; - HASH_TABLE *tempvars; +push_context (char *name, int is_subshell, HASH_TABLE *tempvars) { if (is_subshell == 0) push_dollar_vars (); @@ -5641,7 +5546,7 @@ push_context (name, is_subshell, tempvars) /* Only called when subshell == 0, so we don't need to check, and can unconditionally pop the dollar vars off the stack. */ void -pop_context () +pop_context (void *ignore) { pop_dollar_vars (); variable_context--; @@ -5652,7 +5557,7 @@ pop_context () /* Save the existing positional parameters on a stack. */ void -push_dollar_vars () +push_dollar_vars (void) { if (dollar_arg_stack_index + 2 > dollar_arg_stack_slots) { @@ -5673,7 +5578,7 @@ push_dollar_vars () /* Restore the positional parameters from our stack. */ void -pop_dollar_vars () +pop_dollar_vars (void) { if (dollar_arg_stack == 0 || dollar_arg_stack_index == 0) return; @@ -5695,7 +5600,7 @@ pop_dollar_vars () } void -dispose_saved_dollar_vars () +dispose_saved_dollar_vars (void) { if (dollar_arg_stack == 0 || dollar_arg_stack_index == 0) return; @@ -5712,7 +5617,7 @@ dispose_saved_dollar_vars () /* Initialize BASH_ARGV and BASH_ARGC after turning on extdebug after the shell is initialized */ void -init_bash_argv () +init_bash_argv (void) { if (bash_argv_initialized == 0) { @@ -5722,7 +5627,7 @@ init_bash_argv () } void -save_bash_argv () +save_bash_argv (void) { WORD_LIST *list; @@ -5734,8 +5639,7 @@ save_bash_argv () /* Manipulate the special BASH_ARGV and BASH_ARGC variables. */ void -push_args (list) - WORD_LIST *list; +push_args (WORD_LIST *list) { #if defined (ARRAY_VARS) && defined (DEBUGGER) SHELL_VAR *bash_argv_v, *bash_argc_v; @@ -5760,7 +5664,7 @@ push_args (list) array and use that value as the count of elements to remove from BASH_ARGV. */ void -pop_args () +pop_args (void) { #if defined (ARRAY_VARS) && defined (DEBUGGER) SHELL_VAR *bash_argv_v, *bash_argc_v; @@ -5772,7 +5676,7 @@ pop_args () GET_ARRAY_FROM_VAR ("BASH_ARGC", bash_argc_v, bash_argc_a); ce = array_unshift_element (bash_argc_a); - if (ce == 0 || legal_number (element_value (ce), &i) == 0) + if (ce == 0 || valid_number (element_value (ce), &i) == 0) i = 0; for ( ; i > 0; i--) @@ -5781,6 +5685,12 @@ pop_args () #endif /* ARRAY_VARS && DEBUGGER */ } +void +uw_pop_args (void *ignore) +{ + pop_args (); +} + /************************************************* * * * Functions to manage special variables * @@ -5822,6 +5732,7 @@ static struct name_and_function special_vars[] = { { "FUNCNEST", sv_funcnest }, { "GLOBIGNORE", sv_globignore }, + { "GLOBSORT", sv_globsort }, #if defined (HISTORY) { "HISTCONTROL", sv_history_control }, @@ -5889,8 +5800,7 @@ static struct name_and_function special_vars[] = { #define N_SPECIAL_VARS (sizeof (special_vars) / sizeof (special_vars[0]) - 1) static int -sv_compare (sv1, sv2) - struct name_and_function *sv1, *sv2; +sv_compare (struct name_and_function *sv1, struct name_and_function *sv2) { int r; @@ -5900,8 +5810,7 @@ sv_compare (sv1, sv2) } static inline int -find_special_var (name) - const char *name; +find_special_var (const char *name) { register int i, r; @@ -5923,8 +5832,7 @@ find_special_var (name) /* The variable in NAME has just had its state changed. Check to see if it is one of the special ones where something special happens. */ void -stupidly_hack_special_variables (name) - char *name; +stupidly_hack_special_variables (const char *name) { static int sv_sorted = 0; int i; @@ -5938,13 +5846,13 @@ stupidly_hack_special_variables (name) i = find_special_var (name); if (i != -1) - (*(special_vars[i].function)) (name); + (*(special_vars[i].function)) ((char *)name); } /* Special variables that need hooks to be run when they are unset as part of shell reinitialization should have their sv_ functions run here. */ void -reinit_special_variables () +reinit_special_variables (void) { #if defined (READLINE) sv_comp_wordbreaks ("COMP_WORDBREAKS"); @@ -5954,8 +5862,7 @@ reinit_special_variables () } void -sv_ifs (name) - char *name; +sv_ifs (const char *name) { SHELL_VAR *v; @@ -5965,8 +5872,7 @@ sv_ifs (name) /* What to do just after the PATH variable has changed. */ void -sv_path (name) - char *name; +sv_path (const char *name) { /* hash -r */ phash_flush (); @@ -5976,8 +5882,7 @@ sv_path (name) is the name of the variable. This is called with NAME set to one of MAIL, MAILCHECK, or MAILPATH. */ void -sv_mail (name) - char *name; +sv_mail (const char *name) { /* If the time interval for checking the files has changed, then reset the mail timer. Otherwise, one of the pathname vars @@ -5993,8 +5898,7 @@ sv_mail (name) } void -sv_funcnest (name) - char *name; +sv_funcnest (const char *name) { SHELL_VAR *v; intmax_t num; @@ -6002,7 +5906,7 @@ sv_funcnest (name) v = find_variable (name); if (v == 0) funcnest_max = 0; - else if (legal_number (value_cell (v), &num) == 0) + else if (valid_number (value_cell (v), &num) == 0) funcnest_max = 0; else funcnest_max = num; @@ -6010,25 +5914,29 @@ sv_funcnest (name) /* What to do when EXECIGNORE changes. */ void -sv_execignore (name) - char *name; +sv_execignore (const char *name) { setup_exec_ignore (name); } /* What to do when GLOBIGNORE changes. */ void -sv_globignore (name) - char *name; +sv_globignore (const char *name) { if (privileged_mode == 0) setup_glob_ignore (name); } +/* What to do when GLOBSORT changes. */ +void +sv_globsort (const char *name) +{ + setup_globsort (name); +} + #if defined (READLINE) void -sv_comp_wordbreaks (name) - char *name; +sv_comp_wordbreaks (const char *name) { SHELL_VAR *sv; @@ -6041,16 +5949,14 @@ sv_comp_wordbreaks (name) If we are an interactive shell, then try to reset the terminal information in readline. */ void -sv_terminal (name) - char *name; +sv_terminal (const char *name) { if (interactive_shell && no_line_editing == 0) rl_reset_terminal (get_string_value ("TERM")); } void -sv_hostfile (name) - char *name; +sv_hostfile (const char *name) { SHELL_VAR *v; @@ -6066,8 +5972,7 @@ sv_hostfile (name) found in the initial environment) to override the terminal size reported by the kernel. */ void -sv_winsize (name) - char *name; +sv_winsize (const char *name) { SHELL_VAR *v; intmax_t xd; @@ -6081,7 +5986,7 @@ sv_winsize (name) rl_reset_screen_size (); else { - if (legal_number (value_cell (v), &xd) == 0) + if (valid_number (value_cell (v), &xd) == 0) return; winsize_assignment = 1; d = xd; /* truncate */ @@ -6098,8 +6003,8 @@ sv_winsize (name) /* Update the value of HOME in the export environment so tilde expansion will work on cygwin. */ #if defined (__CYGWIN__) -sv_home (name) - char *name; +void +sv_home (const char *name) { array_needs_making = 1; maybe_make_export_env (); @@ -6114,8 +6019,7 @@ sv_home (name) numeric, truncate the history file to hold no more than that many lines. */ void -sv_histsize (name) - char *name; +sv_histsize (const char *name) { char *temp; intmax_t num; @@ -6125,7 +6029,7 @@ sv_histsize (name) if (temp && *temp) { - if (legal_number (temp, &num)) + if (valid_number (temp, &num)) { hmax = num; if (hmax < 0 && name[4] == 'S') @@ -6154,16 +6058,14 @@ sv_histsize (name) /* What to do after the HISTIGNORE variable changes. */ void -sv_histignore (name) - char *name; +sv_histignore (const char *name) { setup_history_ignore (name); } /* What to do after the HISTCONTROL variable changes. */ void -sv_history_control (name) - char *name; +sv_history_control (const char *name) { char *temp; char *val; @@ -6194,8 +6096,7 @@ sv_history_control (name) #if defined (BANG_HISTORY) /* Setting/unsetting of the history expansion character. */ void -sv_histchars (name) - char *name; +sv_histchars (const char *name) { char *temp; @@ -6220,8 +6121,7 @@ sv_histchars (name) #endif /* BANG_HISTORY */ void -sv_histtimefmt (name) - char *name; +sv_histtimefmt (const char *name) { SHELL_VAR *v; @@ -6236,8 +6136,7 @@ sv_histtimefmt (name) #if defined (HAVE_TZSET) void -sv_tz (name) - char *name; +sv_tz (const char *name) { SHELL_VAR *v; @@ -6259,8 +6158,7 @@ sv_tz (name) of times we actually ignore the EOF. The default is small, (smaller than csh, anyway). */ void -sv_ignoreeof (name) - char *name; +sv_ignoreeof (const char *name) { SHELL_VAR *tmp_var; char *temp; @@ -6276,8 +6174,7 @@ sv_ignoreeof (name) } void -sv_optind (name) - char *name; +sv_optind (const char *name) { SHELL_VAR *var; char *tt; @@ -6304,8 +6201,7 @@ sv_optind (name) } void -sv_opterr (name) - char *name; +sv_opterr (const char *name) { char *tt; @@ -6314,8 +6210,7 @@ sv_opterr (name) } void -sv_strict_posix (name) - char *name; +sv_strict_posix (const char *name) { SHELL_VAR *var; @@ -6330,8 +6225,7 @@ sv_strict_posix (name) } void -sv_locale (name) - char *name; +sv_locale (const char *name) { char *v; int r; @@ -6350,9 +6244,7 @@ sv_locale (name) #if defined (ARRAY_VARS) void -set_pipestatus_array (ps, nproc) - int *ps; - int nproc; +set_pipestatus_array (int *ps, int nproc) { SHELL_VAR *v; ARRAY *a; @@ -6441,7 +6333,7 @@ set_pipestatus_array (ps, nproc) } ARRAY * -save_pipestatus_array () +save_pipestatus_array (void) { SHELL_VAR *v; ARRAY *a; @@ -6456,8 +6348,7 @@ save_pipestatus_array () } void -restore_pipestatus_array (a) - ARRAY *a; +restore_pipestatus_array (ARRAY *a) { SHELL_VAR *v; ARRAY *a2; @@ -6475,8 +6366,7 @@ restore_pipestatus_array (a) #endif void -set_pipestatus_from_exit (s) - int s; +set_pipestatus_from_exit (int s) { #if defined (ARRAY_VARS) static int v[2] = { 0, -1 }; @@ -6487,8 +6377,7 @@ set_pipestatus_from_exit (s) } void -sv_xtracefd (name) - char *name; +sv_xtracefd (const char *name) { SHELL_VAR *v; char *t, *e; @@ -6524,8 +6413,7 @@ sv_xtracefd (name) #define MIN_COMPAT_LEVEL 31 void -sv_shcompat (name) - char *name; +sv_shcompat (const char *name) { SHELL_VAR *v; char *val; @@ -6577,8 +6465,7 @@ compat_error: #if defined (JOB_CONTROL) void -sv_childmax (name) - char *name; +sv_childmax (const char *name) { char *tt; int s; diff --git a/variables.h b/variables.h index 55f497de0..ba1319251 100644 --- a/variables.h +++ b/variables.h @@ -1,6 +1,6 @@ /* variables.h -- data structures for shell variables. */ -/* Copyright (C) 1987-2022 Free Software Foundation, Inc. +/* Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -46,6 +46,7 @@ typedef struct var_context { #define VC_FUNCENV 0x04 /* also function if name != NULL */ #define VC_BLTNENV 0x08 /* builtin_env */ #define VC_TEMPENV 0x10 /* temporary_env */ +#define VC_SPECTEMPENV 0x20 /* temporary environment preceding a posix special builtin */ #define VC_TEMPFLAGS (VC_FUNCENV|VC_BLTNENV|VC_TEMPENV) @@ -61,8 +62,8 @@ typedef struct var_context { /* What a shell variable looks like. */ -typedef struct variable *sh_var_value_func_t PARAMS((struct variable *)); -typedef struct variable *sh_var_assign_func_t PARAMS((struct variable *, char *, arrayind_t, char *)); +typedef struct variable *sh_var_value_func_t (struct variable *); +typedef struct variable *sh_var_assign_func_t (struct variable *, char *, arrayind_t, char *); /* For the future */ union _value { @@ -95,8 +96,8 @@ typedef struct variable { typedef struct _vlist { SHELL_VAR **list; - int list_size; /* allocated size */ - int list_len; /* current number of entries */ + size_t list_size; /* allocated size */ + size_t list_len; /* current number of entries */ } VARLIST; /* The various attributes that a given variable can have. */ @@ -114,9 +115,17 @@ typedef struct _vlist { #define att_capcase 0x0000400 /* word capitalized on assignment */ #define att_nameref 0x0000800 /* word is a name reference */ +#define attmask_user 0x0000fff + #define user_attrs (att_exported|att_readonly|att_integer|att_local|att_trace|att_uppercase|att_lowercase|att_capcase|att_nameref) -#define attmask_user 0x0000fff +/* These define attributes you can set on readonly variables using declare. + You're allowed to set the readonly attribute on a readonly variable. + declare checks whether it gets +r explicitly, before testing these. + att_nameref is in there because declare performs its own validation due + to some ksh93 quirks. */ +#define valid_readonly_attrs (att_exported|att_local|att_nameref|att_trace|att_readonly) +#define invalid_readonly_attrs (~valid_readonly_attrs & attmask_user) /* Internal attributes used for bookkeeping */ #define att_invisible 0x0001000 /* cannot see */ @@ -231,7 +240,7 @@ extern SHELL_VAR nameref_invalid_value; #define INVALID_NAMEREF_VALUE (void *)&nameref_invalid_value /* Stuff for hacking variables. */ -typedef int sh_var_map_func_t PARAMS((SHELL_VAR *)); +typedef int sh_var_map_func_t (SHELL_VAR *); /* Where we keep the variables and functions */ extern VAR_CONTEXT *global_variables; @@ -255,208 +264,212 @@ extern pid_t dollar_dollar_pid; extern int localvar_inherit; /* declared in variables.c */ -extern void initialize_shell_variables PARAMS((char **, int)); - -extern int validate_inherited_value PARAMS((SHELL_VAR *, int)); - -extern SHELL_VAR *set_if_not PARAMS((char *, char *)); - -extern void sh_set_lines_and_columns PARAMS((int, int)); -extern void set_pwd PARAMS((void)); -extern void set_ppid PARAMS((void)); -extern void make_funcname_visible PARAMS((int)); - -extern SHELL_VAR *var_lookup PARAMS((const char *, VAR_CONTEXT *)); - -extern SHELL_VAR *find_function PARAMS((const char *)); -extern FUNCTION_DEF *find_function_def PARAMS((const char *)); -extern SHELL_VAR *find_variable PARAMS((const char *)); -extern SHELL_VAR *find_variable_noref PARAMS((const char *)); -extern SHELL_VAR *find_variable_last_nameref PARAMS((const char *, int)); -extern SHELL_VAR *find_global_variable_last_nameref PARAMS((const char *, int)); -extern SHELL_VAR *find_variable_nameref PARAMS((SHELL_VAR *)); -extern SHELL_VAR *find_variable_nameref_for_create PARAMS((const char *, int)); -extern SHELL_VAR *find_variable_nameref_for_assignment PARAMS((const char *, int)); -/*extern SHELL_VAR *find_variable_internal PARAMS((const char *, int));*/ -extern SHELL_VAR *find_variable_tempenv PARAMS((const char *)); -extern SHELL_VAR *find_variable_notempenv PARAMS((const char *)); -extern SHELL_VAR *find_global_variable PARAMS((const char *)); -extern SHELL_VAR *find_global_variable_noref PARAMS((const char *)); -extern SHELL_VAR *find_shell_variable PARAMS((const char *)); -extern SHELL_VAR *find_tempenv_variable PARAMS((const char *)); -extern SHELL_VAR *find_variable_no_invisible PARAMS((const char *)); -extern SHELL_VAR *find_variable_for_assignment PARAMS((const char *)); -extern char *nameref_transform_name PARAMS((char *, int)); -extern SHELL_VAR *copy_variable PARAMS((SHELL_VAR *)); -extern SHELL_VAR *make_local_variable PARAMS((const char *, int)); -extern SHELL_VAR *bind_variable PARAMS((const char *, char *, int)); -extern SHELL_VAR *bind_global_variable PARAMS((const char *, char *, int)); -extern SHELL_VAR *bind_function PARAMS((const char *, COMMAND *)); - -extern void bind_function_def PARAMS((const char *, FUNCTION_DEF *, int)); - -extern SHELL_VAR **map_over PARAMS((sh_var_map_func_t *, VAR_CONTEXT *)); -SHELL_VAR **map_over_funcs PARAMS((sh_var_map_func_t *)); +extern void initialize_shell_variables (char **, int); + +extern int validate_inherited_value (SHELL_VAR *, int); + +extern SHELL_VAR *set_if_not (const char *, const char *); + +extern void sh_set_lines_and_columns (int, int); +extern void set_pwd (void); +extern void set_ppid (void); +extern void make_funcname_visible (int); + +extern SHELL_VAR *var_lookup (const char *, VAR_CONTEXT *); + +extern SHELL_VAR *find_function (const char *); +extern FUNCTION_DEF *find_function_def (const char *); +extern SHELL_VAR *find_variable (const char *); +extern SHELL_VAR *find_variable_noref (const char *); +extern SHELL_VAR *find_variable_last_nameref (const char *, int); +extern SHELL_VAR *find_global_variable_last_nameref (const char *, int); +extern SHELL_VAR *find_variable_nameref (SHELL_VAR *); +extern SHELL_VAR *find_variable_nameref_for_create (const char *, int); +extern SHELL_VAR *find_variable_nameref_for_assignment (const char *, int); +/*extern SHELL_VAR *find_variable_internal (const char *, int);*/ +extern SHELL_VAR *find_variable_tempenv (const char *); +extern SHELL_VAR *find_variable_notempenv (const char *); +extern SHELL_VAR *find_global_variable (const char *); +extern SHELL_VAR *find_global_variable_noref (const char *); +extern SHELL_VAR *find_shell_variable (const char *); +extern SHELL_VAR *find_tempenv_variable (const char *); +extern SHELL_VAR *find_variable_no_invisible (const char *); +extern SHELL_VAR *find_variable_for_assignment (const char *); +extern char *nameref_transform_name (const char *, int); +extern SHELL_VAR *copy_variable (SHELL_VAR *); +extern SHELL_VAR *make_local_variable (const char *, int); +extern SHELL_VAR *bind_variable (const char *, const char *, int); +extern SHELL_VAR *bind_global_variable (const char *, const char *, int); +extern SHELL_VAR *bind_function (const char *, COMMAND *); + +extern void bind_function_def (const char *, FUNCTION_DEF *, int); + +extern SHELL_VAR **map_over (sh_var_map_func_t *, VAR_CONTEXT *); +SHELL_VAR **map_over_funcs (sh_var_map_func_t *); -extern SHELL_VAR **all_shell_variables PARAMS((void)); -extern SHELL_VAR **all_shell_functions PARAMS((void)); -extern SHELL_VAR **all_visible_variables PARAMS((void)); -extern SHELL_VAR **all_visible_functions PARAMS((void)); -extern SHELL_VAR **all_exported_variables PARAMS((void)); -extern SHELL_VAR **local_exported_variables PARAMS((void)); -extern SHELL_VAR **all_local_variables PARAMS((int)); +extern SHELL_VAR **all_shell_variables (void); +extern SHELL_VAR **all_shell_functions (void); +extern SHELL_VAR **all_visible_variables (void); +extern SHELL_VAR **all_visible_functions (void); +extern SHELL_VAR **all_exported_variables (void); +extern SHELL_VAR **local_exported_variables (void); +extern SHELL_VAR **all_local_variables (int); #if defined (ARRAY_VARS) -extern SHELL_VAR **all_array_variables PARAMS((void)); +extern SHELL_VAR **all_array_variables (void); #endif -extern char **all_variables_matching_prefix PARAMS((const char *)); - -extern char **make_var_array PARAMS((HASH_TABLE *)); -extern char **add_or_supercede_exported_var PARAMS((char *, int)); - -extern char *get_variable_value PARAMS((SHELL_VAR *)); -extern char *get_string_value PARAMS((const char *)); -extern char *sh_get_env_value PARAMS((const char *)); -extern char *make_variable_value PARAMS((SHELL_VAR *, char *, int)); - -extern SHELL_VAR *bind_variable_value PARAMS((SHELL_VAR *, char *, int)); -extern SHELL_VAR *bind_int_variable PARAMS((char *, char *, int)); -extern SHELL_VAR *bind_var_to_int PARAMS((char *, intmax_t, int)); - -extern int assign_in_env PARAMS((WORD_DESC *, int)); - -extern int unbind_variable PARAMS((const char *)); -extern int check_unbind_variable PARAMS((const char *)); -extern int unbind_nameref PARAMS((const char *)); -extern int unbind_variable_noref PARAMS((const char *)); -extern int unbind_global_variable PARAMS((const char *)); -extern int unbind_global_variable_noref PARAMS((const char *)); -extern int unbind_func PARAMS((const char *)); -extern int unbind_function_def PARAMS((const char *)); -extern int delete_var PARAMS((const char *, VAR_CONTEXT *)); -extern int makunbound PARAMS((const char *, VAR_CONTEXT *)); -extern int kill_local_variable PARAMS((const char *)); - -extern void delete_all_variables PARAMS((HASH_TABLE *)); -extern void delete_all_contexts PARAMS((VAR_CONTEXT *)); -extern void reset_local_contexts PARAMS((void)); - -extern VAR_CONTEXT *new_var_context PARAMS((char *, int)); -extern void dispose_var_context PARAMS((VAR_CONTEXT *)); -extern VAR_CONTEXT *push_var_context PARAMS((char *, int, HASH_TABLE *)); -extern void pop_var_context PARAMS((void)); -extern VAR_CONTEXT *push_scope PARAMS((int, HASH_TABLE *)); -extern void pop_scope PARAMS((int)); - -extern void clear_dollar_vars PARAMS((void)); - -extern void push_context PARAMS((char *, int, HASH_TABLE *)); -extern void pop_context PARAMS((void)); -extern void push_dollar_vars PARAMS((void)); -extern void pop_dollar_vars PARAMS((void)); -extern void dispose_saved_dollar_vars PARAMS((void)); - -extern void init_bash_argv PARAMS((void)); -extern void save_bash_argv PARAMS((void)); -extern void push_args PARAMS((WORD_LIST *)); -extern void pop_args PARAMS((void)); - -extern void adjust_shell_level PARAMS((int)); -extern void non_unsettable PARAMS((char *)); -extern void dispose_variable PARAMS((SHELL_VAR *)); -extern void dispose_used_env_vars PARAMS((void)); -extern void dispose_function_env PARAMS((void)); -extern void dispose_builtin_env PARAMS((void)); -extern void merge_temporary_env PARAMS((void)); -extern void flush_temporary_env PARAMS((void)); -extern void merge_builtin_env PARAMS((void)); -extern void kill_all_local_variables PARAMS((void)); - -extern void set_var_read_only PARAMS((char *)); -extern void set_func_read_only PARAMS((const char *)); -extern void set_var_auto_export PARAMS((char *)); -extern void set_func_auto_export PARAMS((const char *)); - -extern void sort_variables PARAMS((SHELL_VAR **)); - -extern int chkexport PARAMS((char *)); -extern void maybe_make_export_env PARAMS((void)); -extern void update_export_env_inplace PARAMS((char *, int, char *)); -extern void put_command_name_into_env PARAMS((char *)); -extern void put_gnu_argv_flags_into_env PARAMS((intmax_t, char *)); - -extern void print_var_list PARAMS((SHELL_VAR **)); -extern void print_func_list PARAMS((SHELL_VAR **)); -extern void print_assignment PARAMS((SHELL_VAR *)); -extern void print_var_value PARAMS((SHELL_VAR *, int)); -extern void print_var_function PARAMS((SHELL_VAR *)); +extern char **all_variables_matching_prefix (const char *); + +extern char **make_var_array (HASH_TABLE *); +extern char **add_or_supercede_exported_var (char *, int); + +extern char *get_variable_value (SHELL_VAR *); +extern char *get_string_value (const char *); +extern char *sh_get_env_value (const char *); +extern char *make_variable_value (SHELL_VAR *, const char *, int); + +extern SHELL_VAR *bind_variable_value (SHELL_VAR *, char *, int); +extern SHELL_VAR *bind_int_variable (const char *, const char *, int); +extern SHELL_VAR *bind_var_to_int (const char *, intmax_t, int); + +extern int assign_in_env (const WORD_DESC *, int); + +extern int posix_unbind_tempvar (const char *); +extern int unbind_variable (const char *); +extern int check_unbind_variable (const char *); +extern int unbind_nameref (const char *); +extern int unbind_variable_noref (const char *); +extern int unbind_global_variable (const char *); +extern int unbind_global_variable_noref (const char *); +extern int unbind_func (const char *); +extern int unbind_function_def (const char *); +extern int delete_var (const char *, VAR_CONTEXT *); +extern int makunbound (const char *, VAR_CONTEXT *); +extern int kill_local_variable (const char *); + +extern void delete_all_variables (HASH_TABLE *); +extern void delete_all_contexts (VAR_CONTEXT *); +extern void reset_local_contexts (void); + +extern VAR_CONTEXT *new_var_context (char *, int); +extern void dispose_var_context (VAR_CONTEXT *); +extern VAR_CONTEXT *push_var_context (char *, int, HASH_TABLE *); +extern void pop_var_context (void); +extern VAR_CONTEXT *push_scope (int, HASH_TABLE *); +extern void pop_scope (void *); /* XXX uw_ */ + +extern void clear_dollar_vars (void); + +extern void push_context (char *, int, HASH_TABLE *); +extern void pop_context (void *); /* XXX uw_ */ +extern void push_dollar_vars (void); +extern void pop_dollar_vars (void); +extern void dispose_saved_dollar_vars (void); + +extern void init_bash_argv (void); +extern void save_bash_argv (void); +extern void push_args (WORD_LIST *); +extern void pop_args (void); +extern void uw_pop_args (void *); + +extern void adjust_shell_level (int); +extern void non_unsettable (char *); +extern void dispose_variable (SHELL_VAR *); +extern void dispose_used_env_vars (void); +extern void dispose_function_env (void); +extern void dispose_builtin_env (void); +extern void merge_temporary_env (void); +extern void merge_function_temporary_env (void); +extern void flush_temporary_env (void); +extern void merge_builtin_env (void); +extern void kill_all_local_variables (void); + +extern void set_var_read_only (char *); +extern void set_func_read_only (const char *); +extern void set_var_auto_export (char *); +extern void set_func_auto_export (const char *); + +extern void sort_variables (SHELL_VAR **); + +extern int chkexport (char *); +extern void maybe_make_export_env (void); +extern void update_export_env_inplace (char *, int, char *); +extern void put_command_name_into_env (char *); +extern void put_gnu_argv_flags_into_env (intmax_t, char *); + +extern void print_var_list (SHELL_VAR **); +extern void print_func_list (SHELL_VAR **); +extern void print_assignment (SHELL_VAR *); +extern void print_var_value (SHELL_VAR *, int); +extern void print_var_function (SHELL_VAR *); #if defined (ARRAY_VARS) -extern SHELL_VAR *make_new_array_variable PARAMS((char *)); -extern SHELL_VAR *make_local_array_variable PARAMS((char *, int)); +extern SHELL_VAR *make_new_array_variable (const char *); +extern SHELL_VAR *make_local_array_variable (const char *, int); -extern SHELL_VAR *make_new_assoc_variable PARAMS((char *)); -extern SHELL_VAR *make_local_assoc_variable PARAMS((char *, int)); +extern SHELL_VAR *make_new_assoc_variable (const char *); +extern SHELL_VAR *make_local_assoc_variable (const char *, int); -extern void set_pipestatus_array PARAMS((int *, int)); -extern ARRAY *save_pipestatus_array PARAMS((void)); -extern void restore_pipestatus_array PARAMS((ARRAY *)); +extern void set_pipestatus_array (int *, int); +extern ARRAY *save_pipestatus_array (void); +extern void restore_pipestatus_array (ARRAY *); #endif -extern void set_pipestatus_from_exit PARAMS((int)); +extern void set_pipestatus_from_exit (int); /* The variable in NAME has just had its state changed. Check to see if it is one of the special ones where something special happens. */ -extern void stupidly_hack_special_variables PARAMS((char *)); +extern void stupidly_hack_special_variables (const char *); /* Reinitialize some special variables that have external effects upon unset when the shell reinitializes itself. */ -extern void reinit_special_variables PARAMS((void)); +extern void reinit_special_variables (void); -extern int get_random_number PARAMS((void)); +extern int get_random_number (void); /* The `special variable' functions that get called when a particular variable is set. */ -extern void sv_ifs PARAMS((char *)); -extern void sv_path PARAMS((char *)); -extern void sv_mail PARAMS((char *)); -extern void sv_funcnest PARAMS((char *)); -extern void sv_execignore PARAMS((char *)); -extern void sv_globignore PARAMS((char *)); -extern void sv_ignoreeof PARAMS((char *)); -extern void sv_strict_posix PARAMS((char *)); -extern void sv_optind PARAMS((char *)); -extern void sv_opterr PARAMS((char *)); -extern void sv_locale PARAMS((char *)); -extern void sv_xtracefd PARAMS((char *)); -extern void sv_shcompat PARAMS((char *)); +extern void sv_ifs (const char *); +extern void sv_path (const char *); +extern void sv_mail (const char *); +extern void sv_funcnest (const char *); +extern void sv_execignore (const char *); +extern void sv_globignore (const char *); +extern void sv_ignoreeof (const char *); +extern void sv_strict_posix (const char *); +extern void sv_optind (const char *); +extern void sv_opterr (const char *); +extern void sv_locale (const char *); +extern void sv_xtracefd (const char *); +extern void sv_shcompat (const char *); +extern void sv_globsort (const char *); #if defined (READLINE) -extern void sv_comp_wordbreaks PARAMS((char *)); -extern void sv_terminal PARAMS((char *)); -extern void sv_hostfile PARAMS((char *)); -extern void sv_winsize PARAMS((char *)); +extern void sv_comp_wordbreaks (const char *); +extern void sv_terminal (const char *); +extern void sv_hostfile (const char *); +extern void sv_winsize (const char *); #endif #if defined (__CYGWIN__) -extern void sv_home PARAMS((char *)); +extern void sv_home (const char *); #endif #if defined (HISTORY) -extern void sv_histsize PARAMS((char *)); -extern void sv_histignore PARAMS((char *)); -extern void sv_history_control PARAMS((char *)); +extern void sv_histsize (const char *); +extern void sv_histignore (const char *); +extern void sv_history_control (const char *); # if defined (BANG_HISTORY) -extern void sv_histchars PARAMS((char *)); +extern void sv_histchars (const char *); # endif -extern void sv_histtimefmt PARAMS((char *)); +extern void sv_histtimefmt (const char *); #endif /* HISTORY */ #if defined (HAVE_TZSET) -extern void sv_tz PARAMS((char *)); +extern void sv_tz (const char *); #endif #if defined (JOB_CONTROL) -extern void sv_childmax PARAMS((char *)); +extern void sv_childmax (const char *); #endif #endif /* !_VARIABLES_H_ */ diff --git a/version.c b/version.c index 94c85bd22..1ebb03ea6 100644 --- a/version.c +++ b/version.c @@ -1,6 +1,6 @@ /* version.c -- distribution and version numbers. */ -/* Copyright (C) 1989-2022 Free Software Foundation, Inc. +/* Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -43,7 +43,7 @@ const char * const release_status = (char *)0; #endif const char * const sccs_version = SCCSVERSION; -const char * const bash_copyright = N_("Copyright (C) 2022 Free Software Foundation, Inc."); +const char * const bash_copyright = N_("Copyright (C) 2024 Free Software Foundation, Inc."); const char * const bash_license = N_("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"); /* If == 31, shell compatible with bash-3.1, == 32 with bash-3.2, and so on */ @@ -52,12 +52,12 @@ int shell_compatibility_level = DEFAULT_COMPAT_LEVEL; /* Functions for getting, setting, and displaying the shell version. */ /* Forward declarations so we don't have to include externs.h */ -extern char *shell_version_string PARAMS((void)); -extern void show_shell_version PARAMS((int)); +extern char *shell_version_string (void); +extern void show_shell_version (int); /* Give version information about this shell. */ char * -shell_version_string () +shell_version_string (void) { static char tt[32] = { '\0' }; @@ -80,8 +80,7 @@ shell_version_string () } void -show_shell_version (extended) - int extended; +show_shell_version (int extended) { printf (_("GNU bash, version %s (%s)\n"), shell_version_string (), MACHTYPE); if (extended) diff --git a/xmalloc.c b/xmalloc.c index 1b3b40887..340ce84d9 100644 --- a/xmalloc.c +++ b/xmalloc.c @@ -1,6 +1,6 @@ /* xmalloc.c -- safe versions of malloc and realloc */ -/* Copyright (C) 1991-2016 Free Software Foundation, Inc. +/* Copyright (C) 1991-2016,2023 Free Software Foundation, Inc. This file is part of GNU Bash, the GNU Bourne Again SHell. @@ -29,22 +29,15 @@ # include <unistd.h> #endif -#if defined (HAVE_STDLIB_H) -# include <stdlib.h> -#else -# include "ansi_stdlib.h" -#endif /* HAVE_STDLIB_H */ +#include "bashansi.h" +#include <stdckdint.h> #include "error.h" #include "bashintl.h" #if !defined (PTR_T) -# if defined (__STDC__) -# define PTR_T void * -# else -# define PTR_T char * -# endif /* !__STDC__ */ +# define PTR_T void * #endif /* !PTR_T */ #if HAVE_SBRK && !HAVE_DECL_SBRK @@ -74,7 +67,7 @@ do { \ } while (0) static size_t -findbrk () +findbrk (void) { FINDBRK(); return (char *)sbrk (0) - (char *)lbreak; @@ -84,9 +77,7 @@ findbrk () #endif static void -allocerr (func, bytes) - const char *func; - size_t bytes; +allocerr (const char *func, size_t bytes) { #if HAVE_SBRK && defined (USING_BASH_MALLOC) allocated = findbrk (); @@ -100,8 +91,7 @@ allocerr (func, bytes) to hold BYTES number of bytes. If the memory cannot be allocated, print an error message and abort. */ PTR_T -xmalloc (bytes) - size_t bytes; +xmalloc (size_t bytes) { PTR_T temp; @@ -120,9 +110,7 @@ xmalloc (bytes) } PTR_T -xrealloc (pointer, bytes) - PTR_T pointer; - size_t bytes; +xrealloc (PTR_T pointer, size_t bytes) { PTR_T temp; @@ -140,11 +128,26 @@ xrealloc (pointer, bytes) return (temp); } +/* Reallocate the storage addressed by POINTER so that it is of + size NMEMB*SIZE, preserving contents like realloc does. + If POINTER is null, allocate new storage. This is like + glibc reallocarray except that it never returns a null pointer; + if storage is exhausted it reports an error and exits. */ +PTR_T +xreallocarray (PTR_T ptr, size_t nmemb, size_t size) +{ + size_t nbytes; + + if (ckd_mul (&nbytes, nmemb, size)) + allocerr ("xreallocarray", (size_t)-1); + + return xrealloc (ptr, nbytes); +} + /* Use this as the function to call when adding unwind protects so we don't need to know what free() returns. */ void -xfree (string) - PTR_T string; +xfree (PTR_T string) { if (string) free (string); @@ -154,11 +157,7 @@ xfree (string) #include <malloc/shmalloc.h> static void -sh_allocerr (func, bytes, file, line) - const char *func; - size_t bytes; - char *file; - int line; +sh_allocerr (const char *func, size_t bytes, char *file, int line) { #if HAVE_SBRK allocated = findbrk (); @@ -169,10 +168,7 @@ sh_allocerr (func, bytes, file, line) } PTR_T -sh_xmalloc (bytes, file, line) - size_t bytes; - char *file; - int line; +sh_xmalloc (size_t bytes, char *file, int line) { PTR_T temp; @@ -191,11 +187,7 @@ sh_xmalloc (bytes, file, line) } PTR_T -sh_xrealloc (pointer, bytes, file, line) - PTR_T pointer; - size_t bytes; - char *file; - int line; +sh_xrealloc (PTR_T pointer, size_t bytes, char *file, int line) { PTR_T temp; @@ -213,11 +205,19 @@ sh_xrealloc (pointer, bytes, file, line) return (temp); } +PTR_T +sh_xreallocarray (PTR_T ptr, size_t nmemb, size_t size, char *file, int line) +{ + size_t nbytes; + + if (ckd_mul (&nbytes, nmemb, size)) + sh_allocerr ("xreallocarray", (size_t)-1, file, line); + + return sh_xrealloc (ptr, nbytes, file, line); +} + void -sh_xfree (string, file, line) - PTR_T string; - char *file; - int line; +sh_xfree (PTR_T string, char *file, int line) { if (string) sh_free (string, file, line); diff --git a/xmalloc.h b/xmalloc.h index 55d2e3d04..d8fb32a75 100644 --- a/xmalloc.h +++ b/xmalloc.h @@ -1,6 +1,6 @@ /* xmalloc.h -- defines for the `x' memory allocation functions */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2024 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -26,27 +26,24 @@ /* Generic pointer type. */ #ifndef PTR_T - -#if defined (__STDC__) # define PTR_T void * -#else -# define PTR_T char * -#endif - #endif /* PTR_T */ /* Allocation functions in xmalloc.c */ -extern PTR_T xmalloc PARAMS((size_t)); -extern PTR_T xrealloc PARAMS((void *, size_t)); -extern void xfree PARAMS((void *)); +extern PTR_T xmalloc (size_t); +extern PTR_T xrealloc (void *, size_t); +extern PTR_T xreallocarray (void *, size_t, size_t); +extern void xfree (void *); #if defined(USING_BASH_MALLOC) && !defined (DISABLE_MALLOC_WRAPPERS) -extern PTR_T sh_xmalloc PARAMS((size_t, const char *, int)); -extern PTR_T sh_xrealloc PARAMS((void *, size_t, const char *, int)); -extern void sh_xfree PARAMS((void *, const char *, int)); +extern PTR_T sh_xmalloc (size_t, const char *, int); +extern PTR_T sh_xrealloc (void *, size_t, const char *, int); +extern PTR_T sh_xreallocarray (void *, size_t, size_t, const char *, int); +extern void sh_xfree (void *, const char *, int); #define xmalloc(x) sh_xmalloc((x), __FILE__, __LINE__) #define xrealloc(x, n) sh_xrealloc((x), (n), __FILE__, __LINE__) +#define xreallocarray(x, n, s) sh_xreallocarray((x), (n), (s), __FILE__, __LINE__) #define xfree(x) sh_xfree((x), __FILE__, __LINE__) #ifdef free @@ -54,7 +51,7 @@ extern void sh_xfree PARAMS((void *, const char *, int)); #endif #define free(x) sh_xfree((x), __FILE__, __LINE__) -extern PTR_T sh_malloc PARAMS((size_t, const char *, int)); +extern PTR_T sh_malloc (size_t, const char *, int); #ifdef malloc #undef malloc diff --git a/y.tab.c b/y.tab.c index 78c793065..c5d3297e7 100644 --- a/y.tab.c +++ b/y.tab.c @@ -87,6 +87,7 @@ #include <stdio.h> #include "chartypes.h" #include <signal.h> +#include <errno.h> #include "memalloc.h" @@ -121,7 +122,8 @@ #if defined (JOB_CONTROL) # include "jobs.h" #else -extern int cleanup_dead_jobs PARAMS((void)); +extern int cleanup_dead_jobs (void); +extern int count_all_jobs (void); #endif /* JOB_CONTROL */ #if defined (ALIAS) @@ -131,10 +133,10 @@ typedef void *alias_t; #endif /* ALIAS */ #if defined (PROMPT_STRING_DECODE) -# ifndef _MINIX +# if !defined (_MINIX) || !defined (__MVS__) # include <sys/param.h> # endif -# include <time.h> +# include "posixtime.h" # if defined (TM_IN_SYS_TIME) # include <sys/types.h> # include <sys/time.h> @@ -147,6 +149,10 @@ typedef void *alias_t; #define END_ALIAS -2 +#ifndef READERR +# define READERR -2 +#endif + #ifdef DEBUG # define YYDEBUG 1 #else @@ -164,6 +170,7 @@ typedef void *alias_t; # define MBTEST(x) ((x)) #endif +#if defined (HANDLE_MULTIBYTE) #define EXTEND_SHELL_INPUT_LINE_PROPERTY() \ do { \ if (shell_input_line_len + 2 > shell_input_line_propsize) \ @@ -173,6 +180,9 @@ do { \ shell_input_line_propsize); \ } \ } while (0) +#else +#define EXTEND_SHELL_INPUT_LINE_PROPERTY() +#endif #if defined (EXTENDED_GLOB) extern int extended_glob, extglob_flag; @@ -194,87 +204,93 @@ extern int errno; /* **************************************************************** */ #ifdef DEBUG -static void debug_parser PARAMS((int)); +static void debug_parser (int); #endif -static int yy_getc PARAMS((void)); -static int yy_ungetc PARAMS((int)); - -#if defined (READLINE) -static int yy_readline_get PARAMS((void)); -static int yy_readline_unget PARAMS((int)); +#if defined (DEBUG) +static void dump_tflags (int); +static void dump_pflags (int); #endif -static int yy_string_get PARAMS((void)); -static int yy_string_unget PARAMS((int)); -static int yy_stream_get PARAMS((void)); -static int yy_stream_unget PARAMS((int)); +static int yy_getc (void); +static int yy_ungetc (int); -static int shell_getc PARAMS((int)); -static void shell_ungetc PARAMS((int)); -static void discard_until PARAMS((int)); - -static void push_string PARAMS((char *, int, alias_t *)); -static void pop_string PARAMS((void)); -static void free_string_list PARAMS((void)); - -static char *read_a_line PARAMS((int)); - -static int reserved_word_acceptable PARAMS((int)); -static int yylex PARAMS((void)); +#if defined (READLINE) +static int yy_readline_get (void); +static int yy_readline_unget (int); +#endif -static void push_heredoc PARAMS((REDIRECT *)); -static char *mk_alexpansion PARAMS((char *)); -static int alias_expand_token PARAMS((char *)); -static int time_command_acceptable PARAMS((void)); -static int special_case_tokens PARAMS((char *)); -static int read_token PARAMS((int)); -static char *parse_matched_pair PARAMS((int, int, int, int *, int)); -static char *parse_comsub PARAMS((int, int, int, int *, int)); +static int yy_string_get (void); +static int yy_string_unget (int); +static int yy_stream_get (void); +static int yy_stream_unget (int); + +static int shell_getc (int); +static void shell_ungetc (int); +static int discard_until (int); + +static void push_string (char *, int, alias_t *); +static void pop_string (void); +static void free_string_list (void); + +static char *read_a_line (int); + +static int set_word_top (int); +static int reserved_word_acceptable (int); +static int yylex (void); + +static void push_heredoc (REDIRECT *); +static char *mk_alexpansion (const char *); +static int alias_expand_token (const char *); +static int time_command_acceptable (void); +static int special_case_tokens (const char *); +static int read_token (int); +static char *parse_matched_pair (int, int, int, size_t *, int); +static char *parse_comsub (int, int, int, size_t *, int); #if defined (ARRAY_VARS) -static char *parse_compound_assignment PARAMS((int *)); +static char *parse_compound_assignment (size_t *); #endif #if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND) -static int parse_dparen PARAMS((int)); -static int parse_arith_cmd PARAMS((char **, int)); +static int parse_dparen (int); +static int parse_arith_cmd (char **, int); #endif #if defined (COND_COMMAND) -static void cond_error PARAMS((void)); -static COND_COM *cond_expr PARAMS((void)); -static COND_COM *cond_or PARAMS((void)); -static COND_COM *cond_and PARAMS((void)); -static COND_COM *cond_term PARAMS((void)); -static int cond_skip_newlines PARAMS((void)); -static COMMAND *parse_cond_command PARAMS((void)); +static void cond_error (void); +static COND_COM *cond_expr (void); +static COND_COM *cond_or (void); +static COND_COM *cond_and (void); +static COND_COM *cond_term (void); +static int cond_skip_newlines (void); +static COMMAND *parse_cond_command (void); #endif #if defined (ARRAY_VARS) -static int token_is_assignment PARAMS((char *, int)); -static int token_is_ident PARAMS((char *, int)); +static int token_is_assignment (const char *, int); +static int token_is_ident (char *, int); #endif -static int read_token_word PARAMS((int)); -static void discard_parser_constructs PARAMS((int)); +static int read_token_word (int); +static void discard_parser_constructs (int); -static char *error_token_from_token PARAMS((int)); -static char *error_token_from_text PARAMS((void)); -static void print_offending_line PARAMS((void)); -static void report_syntax_error PARAMS((char *)); +static char *error_token_from_token (int); +static char *error_token_from_text (void); +static void print_offending_line (void); +static void report_syntax_error (const char *); -static void handle_eof_input_unit PARAMS((void)); -static void prompt_again PARAMS((int)); +static void handle_eof_input_unit (void); +static void prompt_again (int); #if 0 -static void reset_readline_prompt PARAMS((void)); +static void reset_readline_prompt (void); #endif -static void print_prompt PARAMS((void)); +static void print_prompt (void); #if defined (HANDLE_MULTIBYTE) -static void set_line_mbstate PARAMS((void)); +static void set_line_mbstate (void); static char *shell_input_line_property = NULL; static size_t shell_input_line_propsize = 0; #else # define set_line_mbstate() #endif -extern int yyerror PARAMS((const char *)); +extern int yyerror (const char *); #ifdef DEBUG extern int yydebug; @@ -329,6 +345,9 @@ int parser_state; static REDIRECT *redir_stack[HEREDOC_MAX]; int need_here_doc; +/* Are we reading a here-document from a string? (alias) */ +int heredoc_string; + /* Where shell input comes from. History expansion is performed on each line when the shell is interactive. */ static char *shell_input_line = (char *)NULL; @@ -339,11 +358,21 @@ static size_t shell_input_line_len; /* strlen (shell_input_line) */ /* Either zero or EOF. */ static int shell_input_line_terminator; +/* This implements one-character lookahead/lookbehind across physical input + lines, to avoid something being lost because it's pushed back with + shell_ungetc when we're at the start of a line. */ +static int eol_ungetc_lookahead = 0; + +static int simplecmd_lineno = -1; +static int save_simple_lineno = -1; + /* The line number in a script on which a function definition starts. */ static int function_dstart; +static int save_dstart = -1; /* The line number in a script on which a function body starts. */ static int function_bstart; +static int save_bstart = -1; /* The line number in a script at which an arithmetic for command starts. */ static int arith_for_lineno; @@ -362,13 +391,11 @@ static int token_before_that; /* The token read prior to token_before_that. */ static int two_tokens_ago; -static int global_extglob; - /* The line number in a script where the word in a `case WORD', `select WORD' or `for WORD' begins. This is a nested command maximum, since the array index is decremented after a case, select, or for command is parsed. */ -#define MAX_CASE_NEST 128 -static int word_lineno[MAX_CASE_NEST+1]; +#define MAX_COMPOUND_NEST 256 +static int word_lineno[MAX_COMPOUND_NEST+1]; static int word_top = -1; /* If non-zero, it is the token that we want read_token to return @@ -384,7 +411,7 @@ static REDIRECTEE redir; static FILE *yyoutstream; static FILE *yyerrstream; -#line 388 "y.tab.c" +#line 415 "y.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -475,7 +502,8 @@ extern int yydebug; GREATER_BAR = 302, /* GREATER_BAR */ BAR_AND = 303, /* BAR_AND */ DOLPAREN = 304, /* DOLPAREN */ - yacc_EOF = 305 /* yacc_EOF */ + DOLBRACE = 305, /* DOLBRACE */ + yacc_EOF = 306 /* yacc_EOF */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -531,13 +559,14 @@ extern int yydebug; #define GREATER_BAR 302 #define BAR_AND 303 #define DOLPAREN 304 -#define yacc_EOF 305 +#define DOLBRACE 305 +#define yacc_EOF 306 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 338 "/usr/local/src/chet/src/bash/src/parse.y" +#line 365 "/usr/local/src/chet/src/bash/src/parse.y" WORD_DESC *word; /* the word that we read. */ int number; /* the number that we read. */ @@ -547,7 +576,7 @@ union YYSTYPE ELEMENT element; PATTERN_LIST *pattern; -#line 551 "y.tab.c" +#line 580 "y.tab.c" }; typedef union YYSTYPE YYSTYPE; @@ -617,56 +646,59 @@ enum yysymbol_kind_t YYSYMBOL_GREATER_BAR = 47, /* GREATER_BAR */ YYSYMBOL_BAR_AND = 48, /* BAR_AND */ YYSYMBOL_DOLPAREN = 49, /* DOLPAREN */ - YYSYMBOL_50_ = 50, /* '&' */ - YYSYMBOL_51_ = 51, /* ';' */ - YYSYMBOL_52_n_ = 52, /* '\n' */ - YYSYMBOL_yacc_EOF = 53, /* yacc_EOF */ - YYSYMBOL_54_ = 54, /* '|' */ - YYSYMBOL_55_ = 55, /* '>' */ - YYSYMBOL_56_ = 56, /* '<' */ - YYSYMBOL_57_ = 57, /* '-' */ - YYSYMBOL_58_ = 58, /* '{' */ - YYSYMBOL_59_ = 59, /* '}' */ - YYSYMBOL_60_ = 60, /* '(' */ - YYSYMBOL_61_ = 61, /* ')' */ - YYSYMBOL_YYACCEPT = 62, /* $accept */ - YYSYMBOL_inputunit = 63, /* inputunit */ - YYSYMBOL_word_list = 64, /* word_list */ - YYSYMBOL_redirection = 65, /* redirection */ - YYSYMBOL_simple_command_element = 66, /* simple_command_element */ - YYSYMBOL_redirection_list = 67, /* redirection_list */ - YYSYMBOL_simple_command = 68, /* simple_command */ - YYSYMBOL_command = 69, /* command */ - YYSYMBOL_shell_command = 70, /* shell_command */ - YYSYMBOL_for_command = 71, /* for_command */ - YYSYMBOL_arith_for_command = 72, /* arith_for_command */ - YYSYMBOL_select_command = 73, /* select_command */ - YYSYMBOL_case_command = 74, /* case_command */ - YYSYMBOL_function_def = 75, /* function_def */ - YYSYMBOL_function_body = 76, /* function_body */ - YYSYMBOL_subshell = 77, /* subshell */ - YYSYMBOL_comsub = 78, /* comsub */ - YYSYMBOL_coproc = 79, /* coproc */ - YYSYMBOL_if_command = 80, /* if_command */ - YYSYMBOL_group_command = 81, /* group_command */ - YYSYMBOL_arith_command = 82, /* arith_command */ - YYSYMBOL_cond_command = 83, /* cond_command */ - YYSYMBOL_elif_clause = 84, /* elif_clause */ - YYSYMBOL_case_clause = 85, /* case_clause */ - YYSYMBOL_pattern_list = 86, /* pattern_list */ - YYSYMBOL_case_clause_sequence = 87, /* case_clause_sequence */ - YYSYMBOL_pattern = 88, /* pattern */ - YYSYMBOL_compound_list = 89, /* compound_list */ - YYSYMBOL_list0 = 90, /* list0 */ - YYSYMBOL_list1 = 91, /* list1 */ - YYSYMBOL_simple_list_terminator = 92, /* simple_list_terminator */ - YYSYMBOL_list_terminator = 93, /* list_terminator */ - YYSYMBOL_newline_list = 94, /* newline_list */ - YYSYMBOL_simple_list = 95, /* simple_list */ - YYSYMBOL_simple_list1 = 96, /* simple_list1 */ - YYSYMBOL_pipeline_command = 97, /* pipeline_command */ - YYSYMBOL_pipeline = 98, /* pipeline */ - YYSYMBOL_timespec = 99 /* timespec */ + YYSYMBOL_DOLBRACE = 50, /* DOLBRACE */ + YYSYMBOL_51_ = 51, /* '&' */ + YYSYMBOL_52_ = 52, /* ';' */ + YYSYMBOL_53_n_ = 53, /* '\n' */ + YYSYMBOL_yacc_EOF = 54, /* yacc_EOF */ + YYSYMBOL_55_ = 55, /* '|' */ + YYSYMBOL_56_ = 56, /* '>' */ + YYSYMBOL_57_ = 57, /* '<' */ + YYSYMBOL_58_ = 58, /* '-' */ + YYSYMBOL_59_ = 59, /* '{' */ + YYSYMBOL_60_ = 60, /* '}' */ + YYSYMBOL_61_ = 61, /* '(' */ + YYSYMBOL_62_ = 62, /* ')' */ + YYSYMBOL_YYACCEPT = 63, /* $accept */ + YYSYMBOL_inputunit = 64, /* inputunit */ + YYSYMBOL_word_list = 65, /* word_list */ + YYSYMBOL_redirection = 66, /* redirection */ + YYSYMBOL_simple_command_element = 67, /* simple_command_element */ + YYSYMBOL_redirection_list = 68, /* redirection_list */ + YYSYMBOL_simple_command = 69, /* simple_command */ + YYSYMBOL_command = 70, /* command */ + YYSYMBOL_shell_command = 71, /* shell_command */ + YYSYMBOL_for_command = 72, /* for_command */ + YYSYMBOL_arith_for_command = 73, /* arith_for_command */ + YYSYMBOL_select_command = 74, /* select_command */ + YYSYMBOL_case_command = 75, /* case_command */ + YYSYMBOL_function_def = 76, /* function_def */ + YYSYMBOL_function_body = 77, /* function_body */ + YYSYMBOL_subshell = 78, /* subshell */ + YYSYMBOL_comsub = 79, /* comsub */ + YYSYMBOL_funsub = 80, /* funsub */ + YYSYMBOL_coproc = 81, /* coproc */ + YYSYMBOL_if_command = 82, /* if_command */ + YYSYMBOL_group_command = 83, /* group_command */ + YYSYMBOL_arith_command = 84, /* arith_command */ + YYSYMBOL_cond_command = 85, /* cond_command */ + YYSYMBOL_elif_clause = 86, /* elif_clause */ + YYSYMBOL_case_clause = 87, /* case_clause */ + YYSYMBOL_pattern_list = 88, /* pattern_list */ + YYSYMBOL_case_clause_sequence = 89, /* case_clause_sequence */ + YYSYMBOL_pattern = 90, /* pattern */ + YYSYMBOL_compound_list = 91, /* compound_list */ + YYSYMBOL_list0 = 92, /* list0 */ + YYSYMBOL_list1 = 93, /* list1 */ + YYSYMBOL_simple_list_terminator = 94, /* simple_list_terminator */ + YYSYMBOL_list_terminator = 95, /* list_terminator */ + YYSYMBOL_nullcmd_terminator = 96, /* nullcmd_terminator */ + YYSYMBOL_newline_list = 97, /* newline_list */ + YYSYMBOL_simple_list = 98, /* simple_list */ + YYSYMBOL_simple_list1 = 99, /* simple_list1 */ + YYSYMBOL_pipeline_command = 100, /* pipeline_command */ + YYSYMBOL_pipeline = 101, /* pipeline */ + YYSYMBOL_timespec = 102 /* timespec */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -992,21 +1024,21 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 122 +#define YYFINAL 128 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 740 +#define YYLAST 791 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 62 +#define YYNTOKENS 63 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 38 +#define YYNNTS 40 /* YYNRULES -- Number of rules. */ -#define YYNRULES 175 +#define YYNRULES 180 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 350 +#define YYNSTATES 358 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 305 +#define YYMAXUTOK 306 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1021,18 +1053,18 @@ union yyalloc static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 52, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 53, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 50, 2, - 60, 61, 2, 2, 2, 57, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, - 56, 2, 55, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 51, 2, + 61, 62, 2, 2, 2, 58, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, + 57, 2, 56, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 58, 54, 59, 2, 2, 2, 2, + 2, 2, 2, 59, 55, 60, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1050,31 +1082,32 @@ static const yytype_int8 yytranslate[] = 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 53 + 45, 46, 47, 48, 49, 50, 54 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 395, 395, 406, 414, 423, 438, 455, 470, 480, - 482, 486, 492, 498, 504, 510, 516, 522, 528, 534, - 540, 546, 552, 558, 564, 570, 576, 583, 590, 597, - 604, 611, 618, 624, 630, 636, 642, 648, 654, 660, - 666, 672, 678, 684, 690, 696, 702, 708, 714, 720, - 726, 732, 738, 744, 750, 758, 760, 762, 766, 770, - 781, 783, 787, 789, 791, 807, 809, 813, 815, 817, - 819, 821, 823, 825, 827, 829, 831, 833, 837, 842, - 847, 852, 857, 862, 867, 872, 879, 885, 891, 897, - 905, 910, 915, 920, 925, 930, 935, 940, 947, 952, - 957, 964, 966, 968, 970, 974, 976, 1007, 1014, 1018, - 1024, 1029, 1046, 1051, 1068, 1075, 1077, 1079, 1084, 1088, - 1092, 1096, 1098, 1100, 1104, 1105, 1109, 1111, 1113, 1115, - 1119, 1121, 1123, 1125, 1127, 1129, 1133, 1135, 1144, 1150, - 1156, 1157, 1164, 1168, 1170, 1172, 1179, 1181, 1188, 1192, - 1193, 1196, 1198, 1200, 1204, 1205, 1214, 1229, 1247, 1264, - 1266, 1268, 1275, 1278, 1282, 1284, 1290, 1296, 1316, 1339, - 1341, 1364, 1368, 1370, 1372, 1374 + 0, 425, 425, 436, 443, 450, 459, 474, 491, 506, + 516, 518, 522, 528, 534, 540, 546, 552, 558, 564, + 570, 576, 582, 588, 594, 600, 606, 612, 619, 626, + 633, 640, 647, 654, 660, 666, 672, 678, 684, 690, + 696, 702, 708, 714, 720, 726, 732, 738, 744, 750, + 756, 762, 768, 774, 780, 786, 794, 796, 798, 806, + 810, 821, 823, 827, 829, 831, 847, 849, 853, 855, + 857, 862, 867, 869, 871, 873, 875, 877, 879, 883, + 888, 893, 898, 903, 908, 913, 918, 925, 931, 937, + 943, 951, 956, 961, 966, 971, 976, 981, 986, 993, + 998, 1003, 1010, 1012, 1014, 1016, 1020, 1022, 1053, 1060, + 1064, 1070, 1074, 1080, 1085, 1102, 1107, 1124, 1131, 1136, + 1141, 1149, 1153, 1157, 1161, 1163, 1165, 1169, 1170, 1174, + 1176, 1178, 1180, 1184, 1186, 1188, 1190, 1192, 1194, 1198, + 1200, 1209, 1215, 1221, 1222, 1229, 1233, 1235, 1237, 1244, + 1246, 1253, 1257, 1259, 1263, 1265, 1267, 1271, 1273, 1277, + 1278, 1287, 1302, 1320, 1337, 1339, 1341, 1348, 1351, 1355, + 1357, 1363, 1369, 1392, 1418, 1420, 1443, 1447, 1449, 1451, + 1453 }; #endif @@ -1098,18 +1131,18 @@ static const char *const yytname[] = "AND_AND", "OR_OR", "GREATER_GREATER", "LESS_LESS", "LESS_AND", "LESS_LESS_LESS", "GREATER_AND", "SEMI_SEMI", "SEMI_AND", "SEMI_SEMI_AND", "LESS_LESS_MINUS", "AND_GREATER", "AND_GREATER_GREATER", - "LESS_GREATER", "GREATER_BAR", "BAR_AND", "DOLPAREN", "'&'", "';'", - "'\\n'", "yacc_EOF", "'|'", "'>'", "'<'", "'-'", "'{'", "'}'", "'('", - "')'", "$accept", "inputunit", "word_list", "redirection", + "LESS_GREATER", "GREATER_BAR", "BAR_AND", "DOLPAREN", "DOLBRACE", "'&'", + "';'", "'\\n'", "yacc_EOF", "'|'", "'>'", "'<'", "'-'", "'{'", "'}'", + "'('", "')'", "$accept", "inputunit", "word_list", "redirection", "simple_command_element", "redirection_list", "simple_command", "command", "shell_command", "for_command", "arith_for_command", "select_command", "case_command", "function_def", "function_body", - "subshell", "comsub", "coproc", "if_command", "group_command", + "subshell", "comsub", "funsub", "coproc", "if_command", "group_command", "arith_command", "cond_command", "elif_clause", "case_clause", "pattern_list", "case_clause_sequence", "pattern", "compound_list", "list0", "list1", "simple_list_terminator", "list_terminator", - "newline_list", "simple_list", "simple_list1", "pipeline_command", - "pipeline", "timespec", YY_NULLPTR + "nullcmd_terminator", "newline_list", "simple_list", "simple_list1", + "pipeline_command", "pipeline", "timespec", YY_NULLPTR }; static const char * @@ -1119,7 +1152,7 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-125) +#define YYPACT_NINF (-215) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -1133,41 +1166,42 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 329, 27, -125, 8, 81, 10, -125, -125, 16, 38, - 0, 434, -5, -16, -125, 670, 684, -125, 33, 43, - 62, 63, 71, 69, 94, 105, 108, 116, -125, -125, - -125, 125, 139, -125, -125, 111, -125, -125, 626, -125, - 648, -125, -125, -125, -125, -125, -125, -125, -125, -125, - -125, -125, -125, 5, -21, -125, -15, 434, -125, -125, - -125, 196, 485, -125, 157, 2, 180, 207, 222, 227, - 638, 626, 648, 224, -125, -125, -125, -125, -125, 219, - -125, 185, 223, 228, 140, 230, 161, 232, 233, 234, - 236, 241, 248, 249, 162, 250, 163, 251, 254, 256, - 257, 258, -125, -125, -125, -125, -125, -125, -125, -125, - -125, -125, -125, -125, -125, -125, 225, 380, -125, -125, - 229, 231, -125, -125, -125, -125, 648, -125, -125, -125, - -125, -125, 536, 536, -125, -125, -125, -125, -125, -125, - -125, 214, -125, -7, -125, 85, -125, -125, -125, -125, - 89, -125, -125, -125, 235, 648, -125, 648, 648, -125, - -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, - -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, - -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, - -125, -125, -125, -125, -125, 485, 485, 138, 138, 587, - 587, 17, -125, -125, -125, -125, -125, -125, 88, -125, - 122, -125, 274, 238, 100, 101, -125, 122, -125, 276, - 278, 260, -125, 648, 648, 260, -125, -125, -15, -15, - -125, -125, -125, 287, 485, 485, 485, 485, 485, 290, - 164, -125, 26, -125, -125, 285, -125, 131, -125, 242, - -125, -125, -125, -125, -125, -125, 288, 131, -125, 243, - -125, -125, -125, 260, -125, 297, 302, -125, -125, -125, - 152, 152, 152, -125, -125, -125, -125, 170, 61, -125, - -125, 281, -36, 293, 252, -125, -125, -125, 102, -125, - 298, 255, 300, 262, -125, -125, 103, -125, -125, -125, - -125, -125, -125, -125, -125, -33, 296, -125, -125, -125, - 110, -125, -125, -125, -125, -125, -125, 112, -125, -125, - 189, -125, -125, -125, 485, -125, -125, 310, 267, -125, - -125, 314, 275, -125, -125, -125, 485, 318, 277, -125, - -125, 320, 279, -125, -125, -125, -125, -125, -125, -125 + 337, 13, -215, 5, 4, 8, -215, -215, 18, 655, + -16, 444, 59, -14, -215, 273, 734, -215, 23, 32, + -6, 36, 65, 81, 105, 121, 123, 157, -215, -215, + -215, -215, 164, 167, -215, -215, 113, -215, -215, 695, + -215, 718, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, 39, 126, -215, -30, 444, + -215, -215, -215, 190, 551, -215, 112, 84, 149, 193, + 197, 109, 707, 695, 718, 195, -215, -215, -215, -215, + -215, -215, -215, 191, -215, 158, 200, 201, 150, 205, + 170, 207, 208, 215, 218, 225, 228, 236, 206, 242, + 213, 244, 261, 264, 265, 266, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + 231, 389, 237, 496, -215, -215, 238, 239, -215, -215, + -215, -215, 718, -215, -215, -215, -215, -215, 603, 603, + -215, -215, -215, -215, -215, -215, -215, 233, -215, -10, + -215, 87, -215, -215, -215, -215, 95, -215, -215, -215, + 240, 718, -215, 718, 718, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, 551, 551, 72, 72, 43, 43, 31, + -215, -215, -215, -215, -215, -215, 104, -215, 203, -215, + 280, 245, 116, 138, -215, 203, -215, 284, 285, 235, + -215, 718, 718, 235, -215, -215, -30, -30, -215, -215, + -215, 297, 551, 551, 551, 551, 551, 298, 140, -215, + 15, -215, -215, 299, -215, 226, -215, 255, -215, -215, + -215, -215, -215, -215, 306, 226, -215, 262, -215, -215, + -215, 235, -215, 316, 322, -215, -215, -215, 92, 92, + 92, -215, -215, -215, -215, 241, 24, -215, -215, 302, + -34, 318, 274, -215, -215, -215, 139, -215, 326, 277, + 327, 283, -215, -215, 147, -215, -215, -215, -215, -215, + -215, -215, -215, -33, 320, -215, -215, -215, 159, -215, + -215, -215, -215, -215, -215, 160, -215, -215, 161, -215, + -215, -215, 551, -215, -215, 329, 291, -215, -215, 341, + 292, -215, -215, -215, 551, 342, 301, -215, -215, 343, + 308, -215, -215, -215, -215, -215, -215, -215 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1175,59 +1209,60 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 0, 154, 0, 0, 0, 154, 154, 0, 0, - 0, 0, 172, 55, 56, 0, 0, 119, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 154, 4, - 8, 0, 0, 154, 154, 0, 57, 60, 62, 171, - 63, 67, 77, 71, 68, 65, 73, 3, 66, 72, - 74, 75, 76, 0, 156, 163, 164, 0, 7, 5, - 6, 0, 0, 154, 154, 0, 154, 0, 0, 0, - 55, 114, 110, 0, 152, 151, 153, 168, 165, 173, - 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 159, 0, 0, 0, 159, 159, 0, 0, + 0, 0, 177, 56, 57, 0, 0, 122, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 159, 159, + 5, 9, 0, 0, 159, 159, 0, 58, 61, 63, + 176, 64, 68, 78, 72, 69, 66, 74, 3, 4, + 67, 73, 75, 76, 77, 0, 161, 168, 169, 0, + 8, 6, 7, 0, 0, 159, 159, 0, 159, 0, + 0, 0, 56, 117, 113, 0, 158, 155, 154, 156, + 157, 173, 170, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 26, 41, 35, 50, 32, 44, 38, - 47, 29, 53, 54, 23, 20, 0, 0, 11, 12, - 0, 0, 1, 55, 61, 58, 64, 149, 150, 2, - 154, 154, 157, 158, 154, 154, 167, 166, 154, 155, - 138, 139, 148, 0, 154, 0, 154, 154, 154, 154, - 0, 154, 154, 154, 154, 105, 103, 112, 111, 120, - 175, 154, 19, 28, 43, 37, 52, 34, 46, 40, - 49, 31, 25, 22, 15, 16, 18, 27, 42, 36, - 51, 33, 45, 39, 48, 30, 24, 21, 13, 14, - 108, 109, 118, 107, 59, 0, 0, 161, 162, 0, - 0, 0, 154, 154, 154, 154, 154, 154, 0, 154, - 0, 154, 0, 0, 0, 0, 154, 0, 154, 0, - 0, 0, 154, 106, 113, 0, 159, 160, 170, 169, - 154, 154, 115, 0, 0, 0, 141, 142, 140, 0, - 124, 154, 0, 154, 154, 0, 9, 0, 154, 0, - 88, 89, 154, 154, 154, 154, 0, 0, 154, 0, - 69, 70, 104, 0, 101, 0, 0, 117, 143, 144, - 145, 146, 147, 100, 130, 132, 134, 125, 0, 98, - 136, 0, 0, 0, 0, 78, 10, 154, 0, 79, - 0, 0, 0, 0, 90, 154, 0, 91, 102, 116, - 154, 131, 133, 135, 99, 0, 0, 154, 80, 81, - 0, 154, 154, 86, 87, 92, 93, 0, 154, 154, - 121, 154, 137, 126, 127, 154, 154, 0, 0, 154, - 154, 0, 0, 154, 123, 128, 129, 0, 0, 84, - 85, 0, 0, 96, 97, 122, 82, 83, 94, 95 + 0, 0, 0, 0, 0, 0, 18, 27, 42, 36, + 51, 33, 45, 39, 48, 30, 54, 55, 24, 21, + 0, 0, 0, 0, 12, 13, 0, 0, 1, 56, + 62, 59, 65, 152, 153, 2, 159, 159, 162, 163, + 159, 159, 172, 171, 159, 160, 141, 142, 151, 0, + 159, 0, 159, 159, 159, 159, 0, 159, 159, 159, + 159, 106, 104, 115, 114, 123, 180, 159, 20, 29, + 44, 38, 53, 35, 47, 41, 50, 32, 26, 23, + 16, 17, 19, 28, 43, 37, 52, 34, 46, 40, + 49, 31, 25, 22, 14, 15, 109, 110, 111, 112, + 121, 108, 60, 0, 0, 166, 167, 0, 0, 0, + 159, 159, 159, 159, 159, 159, 0, 159, 0, 159, + 0, 0, 0, 0, 159, 0, 159, 0, 0, 0, + 159, 107, 116, 0, 164, 165, 175, 174, 159, 159, + 118, 0, 0, 0, 144, 145, 143, 0, 127, 159, + 0, 159, 159, 0, 10, 0, 159, 0, 89, 90, + 159, 159, 159, 159, 0, 0, 159, 0, 70, 71, + 105, 0, 102, 0, 0, 120, 146, 147, 148, 149, + 150, 101, 133, 135, 137, 128, 0, 99, 139, 0, + 0, 0, 0, 79, 11, 159, 0, 80, 0, 0, + 0, 0, 91, 159, 0, 92, 103, 119, 159, 134, + 136, 138, 100, 0, 0, 159, 81, 82, 0, 159, + 159, 87, 88, 93, 94, 0, 159, 159, 124, 159, + 140, 129, 130, 159, 159, 0, 0, 159, 159, 0, + 0, 159, 126, 131, 132, 0, 0, 85, 86, 0, + 0, 97, 98, 125, 83, 84, 95, 96 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -125, -125, 126, -25, -28, -65, 335, -125, -8, -125, - -125, -125, -125, -125, -96, -125, -125, -125, -125, -125, - -125, -125, 28, -125, 109, -125, 68, -2, -125, -11, - -125, -54, -26, -125, -124, 6, 34, -125 + -215, -215, 137, -29, -25, -66, 360, -215, -8, -215, + -215, -215, -215, -215, -214, -215, -215, -215, -215, -215, + -215, -215, -215, 42, -215, 122, -215, 88, -2, -215, + 30, -215, -60, 319, -26, -215, -129, 6, -36, -215 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 35, 247, 36, 37, 126, 38, 39, 40, 41, - 42, 43, 44, 45, 156, 46, 47, 48, 49, 50, - 51, 52, 233, 239, 240, 241, 282, 121, 140, 141, - 129, 77, 62, 53, 54, 142, 56, 57 + 0, 36, 255, 37, 38, 132, 39, 40, 41, 42, + 43, 44, 45, 46, 162, 47, 48, 49, 50, 51, + 52, 53, 54, 241, 247, 248, 249, 290, 127, 146, + 147, 135, 80, 81, 64, 55, 56, 148, 58, 59 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1235,160 +1270,170 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 61, 72, 117, 136, 67, 68, 55, 158, 197, 198, - 124, 148, 130, 131, 207, 125, 146, 78, 306, 79, - 80, 306, 230, 231, 232, 307, 116, 58, 321, 132, - 133, 120, 73, 134, 63, 279, 66, 143, 145, 135, - 150, 2, 69, 124, 81, 139, 3, 125, 4, 5, - 6, 7, 280, 74, 75, 76, 10, 127, 128, 102, - 147, 155, 157, 137, 70, 14, 15, 16, 17, 103, - 304, 226, 227, 18, 19, 20, 21, 22, 139, 59, - 60, 23, 24, 25, 26, 27, 281, 280, 104, 107, - 223, 105, 224, 31, 32, 111, 33, 108, 34, 209, - 109, 194, 243, 216, 195, 196, 210, 64, 199, 200, - 217, 122, 65, 139, 252, 254, 311, 318, 208, 106, - 112, 281, 214, 215, 325, 262, 329, 221, 110, 264, - 125, 113, 125, 194, 114, 225, 201, 139, 55, 55, - 139, 139, 115, 211, 212, 213, 244, 218, 246, 219, - 220, 118, 139, 139, 139, 139, 248, 286, 253, 255, - 312, 319, 139, 258, 139, 119, 164, 298, 326, 165, - 330, 130, 131, 74, 75, 76, 234, 235, 236, 237, - 238, 242, 74, 75, 76, 202, 203, 168, 178, 182, - 169, 179, 183, 287, 333, 231, 263, 166, 194, 194, - 138, 55, 55, 295, 274, 275, 276, 245, 144, 249, - 301, 302, 303, 155, 256, 278, 259, 155, 170, 180, - 184, 151, 288, 268, 269, 270, 271, 272, 265, 266, - 2, 149, 296, 228, 229, 3, 152, 4, 5, 6, - 7, 283, 284, 159, 160, 10, 161, 202, 203, 162, - 290, 291, 292, 293, 163, 155, 167, 17, 171, 172, - 173, 310, 174, 2, 204, 205, 206, 175, 3, 317, - 4, 5, 6, 7, 176, 177, 181, 185, 10, 153, - 186, 324, 187, 188, 189, 33, 190, 154, 192, 250, - 17, 260, 193, 261, 267, 336, 222, 251, 320, 273, - 285, 289, 297, 294, 299, 323, 300, 280, 308, 327, - 328, 309, 139, 313, 314, 315, 331, 332, 33, 335, - 34, 316, 322, 337, 338, 339, 340, 341, 342, 343, - 1, 345, 2, 346, 344, 348, 347, 3, 349, 4, - 5, 6, 7, 257, 71, 8, 9, 10, 334, 305, - 277, 11, 12, 0, 0, 13, 14, 15, 16, 17, + 63, 74, 121, 123, 69, 70, 57, 154, 164, 205, + 206, 215, 131, 60, 130, 270, 75, 82, 140, 272, + 108, 314, 314, 109, 287, 141, 120, 122, 315, 329, + 66, 65, 126, 312, 68, 67, 238, 239, 240, 149, + 151, 288, 156, 145, 71, 131, 2, 85, 130, 106, + 288, 3, 110, 4, 5, 6, 7, 306, 107, 8, + 9, 10, 111, 161, 163, 143, 61, 62, 145, 13, + 14, 15, 16, 17, 234, 235, 289, 145, 18, 19, + 20, 21, 22, 83, 84, 289, 23, 24, 25, 26, + 27, 112, 133, 134, 113, 231, 145, 232, 152, 32, + 33, 217, 34, 202, 35, 136, 137, 115, 218, 224, + 203, 204, 2, 128, 207, 208, 225, 3, 251, 4, + 5, 6, 7, 114, 216, 210, 211, 10, 222, 223, + 260, 116, 131, 229, 131, 202, 77, 78, 79, 17, + 145, 233, 209, 153, 57, 57, 219, 117, 145, 118, + 220, 221, 262, 319, 226, 227, 228, 145, 256, 136, + 137, 326, 159, 252, 150, 266, 341, 239, 34, 145, + 160, 236, 237, 333, 337, 261, 170, 138, 139, 171, + 282, 283, 284, 119, 242, 243, 244, 245, 246, 250, + 124, 145, 145, 125, 144, 295, 174, 263, 320, 175, + 145, 155, 202, 202, 271, 303, 327, 157, 172, 57, + 57, 158, 145, 145, 165, 253, 166, 257, 334, 338, + 167, 161, 264, 286, 267, 161, 168, 169, 176, 254, + 296, 173, 184, 177, 178, 185, 273, 274, 2, 188, + 304, 179, 189, 3, 180, 4, 5, 6, 7, 291, + 292, 181, 294, 10, 182, 77, 78, 79, 298, 299, + 300, 301, 183, 161, 186, 17, 210, 211, 187, 318, + 191, 190, 276, 277, 278, 279, 280, 325, 77, 78, + 79, 309, 310, 311, 212, 213, 214, 192, 145, 332, + 193, 194, 195, 196, 34, 258, 35, 198, 200, 268, + 269, 201, 230, 344, 275, 259, 328, 281, 86, 87, + 88, 89, 90, 331, 293, 297, 91, 335, 336, 92, + 93, 302, 305, 307, 339, 340, 308, 343, 288, 94, + 95, 345, 346, 316, 317, 349, 350, 322, 1, 353, + 2, 321, 323, 324, 347, 3, 330, 4, 5, 6, + 7, 348, 352, 8, 9, 10, 351, 354, 356, 11, + 12, 355, 265, 13, 14, 15, 16, 17, 357, 73, + 342, 285, 18, 19, 20, 21, 22, 313, 142, 0, + 23, 24, 25, 26, 27, 0, 28, 29, 0, 0, + 30, 31, 2, 32, 33, 0, 34, 3, 35, 4, + 5, 6, 7, 0, 0, 8, 9, 10, 0, 0, + 0, 11, 12, 0, 0, 13, 14, 15, 16, 17, 0, 0, 0, 0, 18, 19, 20, 21, 22, 0, - 0, 0, 23, 24, 25, 26, 27, 0, 28, 0, - 0, 29, 30, 2, 31, 32, 0, 33, 3, 34, - 4, 5, 6, 7, 0, 0, 8, 9, 10, 0, - 0, 0, 11, 12, 0, 0, 13, 14, 15, 16, - 17, 0, 0, 0, 0, 18, 19, 20, 21, 22, - 0, 0, 0, 23, 24, 25, 26, 27, 0, 0, - 0, 0, 139, 0, 0, 31, 32, 2, 33, 0, - 34, 191, 3, 0, 4, 5, 6, 7, 0, 0, + 0, 0, 23, 24, 25, 26, 27, 0, 0, 0, + 0, 0, 145, 0, 0, 32, 33, 2, 34, 0, + 35, 197, 3, 0, 4, 5, 6, 7, 0, 0, 8, 9, 10, 0, 0, 0, 11, 12, 0, 0, 13, 14, 15, 16, 17, 0, 0, 0, 0, 18, 19, 20, 21, 22, 0, 0, 0, 23, 24, 25, - 26, 27, 0, 0, 0, 74, 75, 76, 2, 31, - 32, 0, 33, 3, 34, 4, 5, 6, 7, 0, - 0, 8, 9, 10, 0, 0, 0, 11, 12, 0, - 0, 13, 14, 15, 16, 17, 0, 0, 0, 0, - 18, 19, 20, 21, 22, 0, 0, 0, 23, 24, - 25, 26, 27, 0, 0, 0, 0, 139, 0, 2, - 31, 32, 0, 33, 3, 34, 4, 5, 6, 7, + 26, 27, 0, 0, 0, 76, 77, 78, 79, 2, + 32, 33, 0, 34, 3, 35, 4, 5, 6, 7, 0, 0, 8, 9, 10, 0, 0, 0, 11, 12, 0, 0, 13, 14, 15, 16, 17, 0, 0, 0, 0, 18, 19, 20, 21, 22, 0, 0, 0, 23, - 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, - 2, 31, 32, 0, 33, 3, 34, 4, 5, 6, - 7, 0, 0, 8, 9, 10, 0, 0, 0, 0, - 0, 0, 0, 13, 14, 15, 16, 17, 0, 0, - 0, 0, 18, 19, 20, 21, 22, 0, 0, 0, - 23, 24, 25, 26, 27, 0, 0, 0, 0, 139, - 0, 2, 31, 32, 0, 33, 3, 34, 4, 5, - 6, 7, 123, 14, 15, 16, 10, 0, 0, 0, - 0, 18, 19, 20, 21, 22, 0, 0, 17, 23, - 24, 25, 26, 27, 0, 0, 15, 16, 0, 0, - 0, 31, 32, 18, 19, 20, 21, 22, 0, 0, - 0, 23, 24, 25, 26, 27, 33, 0, 34, 0, - 0, 0, 0, 31, 32, 82, 83, 84, 85, 86, - 0, 0, 0, 87, 0, 0, 88, 89, 0, 92, - 93, 94, 95, 96, 0, 90, 91, 97, 0, 0, - 98, 99, 0, 0, 0, 0, 0, 0, 0, 100, - 101 + 24, 25, 26, 27, 0, 0, 0, 0, 0, 145, + 0, 0, 32, 33, 2, 34, 199, 35, 0, 3, + 0, 4, 5, 6, 7, 0, 0, 8, 9, 10, + 0, 0, 0, 11, 12, 0, 0, 13, 14, 15, + 16, 17, 0, 0, 0, 0, 18, 19, 20, 21, + 22, 0, 0, 0, 23, 24, 25, 26, 27, 0, + 0, 0, 0, 0, 145, 0, 2, 32, 33, 0, + 34, 3, 35, 4, 5, 6, 7, 0, 0, 8, + 9, 10, 0, 0, 0, 11, 12, 0, 0, 13, + 14, 15, 16, 17, 0, 0, 0, 0, 18, 19, + 20, 21, 22, 0, 0, 0, 23, 24, 25, 26, + 27, 0, 0, 0, 0, 0, 0, 0, 2, 32, + 33, 0, 34, 3, 35, 4, 5, 6, 7, 0, + 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, + 0, 72, 14, 15, 16, 17, 0, 0, 0, 0, + 18, 19, 20, 21, 22, 0, 0, 0, 23, 24, + 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, + 2, 32, 33, 0, 34, 3, 35, 4, 5, 6, + 7, 129, 14, 15, 16, 10, 0, 0, 0, 0, + 18, 19, 20, 21, 22, 0, 0, 17, 23, 24, + 25, 26, 27, 0, 0, 0, 15, 16, 0, 0, + 0, 32, 33, 18, 19, 20, 21, 22, 0, 0, + 0, 23, 24, 25, 26, 27, 34, 0, 35, 96, + 97, 98, 99, 100, 32, 33, 0, 101, 0, 0, + 102, 103, 0, 0, 0, 0, 0, 0, 0, 0, + 104, 105 }; static const yytype_int16 yycheck[] = { - 2, 9, 28, 57, 6, 7, 0, 72, 132, 133, - 38, 65, 33, 34, 21, 40, 14, 11, 54, 24, - 25, 54, 5, 6, 7, 61, 28, 0, 61, 50, - 51, 33, 32, 48, 26, 9, 26, 63, 64, 54, - 66, 3, 26, 71, 60, 52, 8, 72, 10, 11, - 12, 13, 26, 51, 52, 53, 18, 52, 53, 26, - 58, 69, 70, 57, 26, 27, 28, 29, 30, 26, - 9, 195, 196, 35, 36, 37, 38, 39, 52, 52, - 53, 43, 44, 45, 46, 47, 60, 26, 26, 26, - 155, 29, 157, 55, 56, 26, 58, 26, 60, 14, - 29, 126, 14, 14, 130, 131, 21, 26, 134, 135, - 21, 0, 31, 52, 14, 14, 14, 14, 144, 57, - 26, 60, 148, 149, 14, 221, 14, 153, 57, 225, - 155, 26, 157, 158, 26, 161, 138, 52, 132, 133, - 52, 52, 26, 58, 146, 147, 58, 58, 26, 151, - 152, 26, 52, 52, 52, 52, 210, 26, 58, 58, - 58, 58, 52, 217, 52, 26, 26, 263, 58, 29, - 58, 33, 34, 51, 52, 53, 202, 203, 204, 205, - 206, 207, 51, 52, 53, 33, 34, 26, 26, 26, - 29, 29, 29, 247, 5, 6, 222, 57, 223, 224, - 4, 195, 196, 257, 40, 41, 42, 209, 51, 211, - 40, 41, 42, 221, 216, 241, 218, 225, 57, 57, - 57, 14, 248, 234, 235, 236, 237, 238, 230, 231, - 3, 51, 258, 199, 200, 8, 14, 10, 11, 12, - 13, 243, 244, 19, 25, 18, 61, 33, 34, 26, - 252, 253, 254, 255, 26, 263, 26, 30, 26, 26, - 26, 287, 26, 3, 50, 51, 52, 26, 8, 295, - 10, 11, 12, 13, 26, 26, 26, 26, 18, 52, - 26, 307, 26, 26, 26, 58, 61, 60, 59, 15, - 30, 15, 61, 15, 7, 321, 61, 59, 300, 9, - 15, 59, 59, 15, 7, 307, 4, 26, 15, 311, - 312, 59, 52, 15, 59, 15, 318, 319, 58, 321, - 60, 59, 26, 325, 326, 15, 59, 329, 330, 15, - 1, 333, 3, 15, 59, 15, 59, 8, 59, 10, - 11, 12, 13, 217, 9, 16, 17, 18, 320, 281, - 241, 22, 23, -1, -1, 26, 27, 28, 29, 30, + 2, 9, 28, 29, 6, 7, 0, 67, 74, 138, + 139, 21, 41, 0, 39, 229, 32, 11, 48, 233, + 26, 55, 55, 29, 9, 55, 28, 29, 62, 62, + 26, 26, 34, 9, 26, 31, 5, 6, 7, 65, + 66, 26, 68, 53, 26, 74, 3, 61, 73, 26, + 26, 8, 58, 10, 11, 12, 13, 271, 26, 16, + 17, 18, 26, 71, 72, 59, 53, 54, 53, 26, + 27, 28, 29, 30, 203, 204, 61, 53, 35, 36, + 37, 38, 39, 24, 25, 61, 43, 44, 45, 46, + 47, 26, 53, 54, 29, 161, 53, 163, 14, 56, + 57, 14, 59, 132, 61, 33, 34, 26, 21, 14, + 136, 137, 3, 0, 140, 141, 21, 8, 14, 10, + 11, 12, 13, 58, 150, 33, 34, 18, 154, 155, + 14, 26, 161, 159, 163, 164, 52, 53, 54, 30, + 53, 167, 144, 59, 138, 139, 59, 26, 53, 26, + 152, 153, 14, 14, 59, 157, 158, 53, 218, 33, + 34, 14, 53, 59, 52, 225, 5, 6, 59, 53, + 61, 207, 208, 14, 14, 59, 26, 51, 52, 29, + 40, 41, 42, 26, 210, 211, 212, 213, 214, 215, + 26, 53, 53, 26, 4, 255, 26, 59, 59, 29, + 53, 52, 231, 232, 230, 265, 59, 14, 58, 203, + 204, 14, 53, 53, 19, 217, 25, 219, 59, 59, + 62, 229, 224, 249, 226, 233, 26, 26, 58, 26, + 256, 26, 26, 26, 26, 29, 238, 239, 3, 26, + 266, 26, 29, 8, 26, 10, 11, 12, 13, 251, + 252, 26, 26, 18, 26, 52, 53, 54, 260, 261, + 262, 263, 26, 271, 58, 30, 33, 34, 26, 295, + 26, 58, 242, 243, 244, 245, 246, 303, 52, 53, + 54, 40, 41, 42, 51, 52, 53, 26, 53, 315, + 26, 26, 26, 62, 59, 15, 61, 60, 60, 15, + 15, 62, 62, 329, 7, 60, 308, 9, 35, 36, + 37, 38, 39, 315, 15, 60, 43, 319, 320, 46, + 47, 15, 60, 7, 326, 327, 4, 329, 26, 56, + 57, 333, 334, 15, 60, 337, 338, 60, 1, 341, + 3, 15, 15, 60, 15, 8, 26, 10, 11, 12, + 13, 60, 60, 16, 17, 18, 15, 15, 15, 22, + 23, 60, 225, 26, 27, 28, 29, 30, 60, 9, + 328, 249, 35, 36, 37, 38, 39, 289, 59, -1, + 43, 44, 45, 46, 47, -1, 49, 50, -1, -1, + 53, 54, 3, 56, 57, -1, 59, 8, 61, 10, + 11, 12, 13, -1, -1, 16, 17, 18, -1, -1, + -1, 22, 23, -1, -1, 26, 27, 28, 29, 30, -1, -1, -1, -1, 35, 36, 37, 38, 39, -1, - -1, -1, 43, 44, 45, 46, 47, -1, 49, -1, - -1, 52, 53, 3, 55, 56, -1, 58, 8, 60, - 10, 11, 12, 13, -1, -1, 16, 17, 18, -1, - -1, -1, 22, 23, -1, -1, 26, 27, 28, 29, - 30, -1, -1, -1, -1, 35, 36, 37, 38, 39, - -1, -1, -1, 43, 44, 45, 46, 47, -1, -1, - -1, -1, 52, -1, -1, 55, 56, 3, 58, -1, - 60, 61, 8, -1, 10, 11, 12, 13, -1, -1, + -1, -1, 43, 44, 45, 46, 47, -1, -1, -1, + -1, -1, 53, -1, -1, 56, 57, 3, 59, -1, + 61, 62, 8, -1, 10, 11, 12, 13, -1, -1, 16, 17, 18, -1, -1, -1, 22, 23, -1, -1, 26, 27, 28, 29, 30, -1, -1, -1, -1, 35, 36, 37, 38, 39, -1, -1, -1, 43, 44, 45, - 46, 47, -1, -1, -1, 51, 52, 53, 3, 55, - 56, -1, 58, 8, 60, 10, 11, 12, 13, -1, - -1, 16, 17, 18, -1, -1, -1, 22, 23, -1, - -1, 26, 27, 28, 29, 30, -1, -1, -1, -1, - 35, 36, 37, 38, 39, -1, -1, -1, 43, 44, - 45, 46, 47, -1, -1, -1, -1, 52, -1, 3, - 55, 56, -1, 58, 8, 60, 10, 11, 12, 13, + 46, 47, -1, -1, -1, 51, 52, 53, 54, 3, + 56, 57, -1, 59, 8, 61, 10, 11, 12, 13, -1, -1, 16, 17, 18, -1, -1, -1, 22, 23, -1, -1, 26, 27, 28, 29, 30, -1, -1, -1, -1, 35, 36, 37, 38, 39, -1, -1, -1, 43, - 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, - 3, 55, 56, -1, 58, 8, 60, 10, 11, 12, - 13, -1, -1, 16, 17, 18, -1, -1, -1, -1, - -1, -1, -1, 26, 27, 28, 29, 30, -1, -1, - -1, -1, 35, 36, 37, 38, 39, -1, -1, -1, - 43, 44, 45, 46, 47, -1, -1, -1, -1, 52, - -1, 3, 55, 56, -1, 58, 8, 60, 10, 11, - 12, 13, 26, 27, 28, 29, 18, -1, -1, -1, - -1, 35, 36, 37, 38, 39, -1, -1, 30, 43, - 44, 45, 46, 47, -1, -1, 28, 29, -1, -1, - -1, 55, 56, 35, 36, 37, 38, 39, -1, -1, - -1, 43, 44, 45, 46, 47, 58, -1, 60, -1, - -1, -1, -1, 55, 56, 35, 36, 37, 38, 39, - -1, -1, -1, 43, -1, -1, 46, 47, -1, 35, - 36, 37, 38, 39, -1, 55, 56, 43, -1, -1, - 46, 47, -1, -1, -1, -1, -1, -1, -1, 55, - 56 + 44, 45, 46, 47, -1, -1, -1, -1, -1, 53, + -1, -1, 56, 57, 3, 59, 60, 61, -1, 8, + -1, 10, 11, 12, 13, -1, -1, 16, 17, 18, + -1, -1, -1, 22, 23, -1, -1, 26, 27, 28, + 29, 30, -1, -1, -1, -1, 35, 36, 37, 38, + 39, -1, -1, -1, 43, 44, 45, 46, 47, -1, + -1, -1, -1, -1, 53, -1, 3, 56, 57, -1, + 59, 8, 61, 10, 11, 12, 13, -1, -1, 16, + 17, 18, -1, -1, -1, 22, 23, -1, -1, 26, + 27, 28, 29, 30, -1, -1, -1, -1, 35, 36, + 37, 38, 39, -1, -1, -1, 43, 44, 45, 46, + 47, -1, -1, -1, -1, -1, -1, -1, 3, 56, + 57, -1, 59, 8, 61, 10, 11, 12, 13, -1, + -1, -1, -1, 18, -1, -1, -1, -1, -1, -1, + -1, 26, 27, 28, 29, 30, -1, -1, -1, -1, + 35, 36, 37, 38, 39, -1, -1, -1, 43, 44, + 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, + 3, 56, 57, -1, 59, 8, 61, 10, 11, 12, + 13, 26, 27, 28, 29, 18, -1, -1, -1, -1, + 35, 36, 37, 38, 39, -1, -1, 30, 43, 44, + 45, 46, 47, -1, -1, -1, 28, 29, -1, -1, + -1, 56, 57, 35, 36, 37, 38, 39, -1, -1, + -1, 43, 44, 45, 46, 47, 59, -1, 61, 35, + 36, 37, 38, 39, 56, 57, -1, 43, -1, -1, + 46, 47, -1, -1, -1, -1, -1, -1, -1, -1, + 56, 57 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -1397,85 +1442,88 @@ static const yytype_int8 yystos[] = { 0, 1, 3, 8, 10, 11, 12, 13, 16, 17, 18, 22, 23, 26, 27, 28, 29, 30, 35, 36, - 37, 38, 39, 43, 44, 45, 46, 47, 49, 52, - 53, 55, 56, 58, 60, 63, 65, 66, 68, 69, - 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, - 81, 82, 83, 95, 96, 97, 98, 99, 0, 52, - 53, 89, 94, 26, 26, 31, 26, 89, 89, 26, - 26, 68, 70, 32, 51, 52, 53, 93, 97, 24, - 25, 60, 35, 36, 37, 38, 39, 43, 46, 47, - 55, 56, 35, 36, 37, 38, 39, 43, 46, 47, - 55, 56, 26, 26, 26, 29, 57, 26, 26, 29, - 57, 26, 26, 26, 26, 26, 89, 94, 26, 26, - 89, 89, 0, 26, 66, 65, 67, 52, 53, 92, - 33, 34, 50, 51, 48, 54, 93, 97, 4, 52, - 90, 91, 97, 94, 51, 94, 14, 58, 93, 51, - 94, 14, 14, 52, 60, 70, 76, 70, 67, 19, - 25, 61, 26, 26, 26, 29, 57, 26, 26, 29, - 57, 26, 26, 26, 26, 26, 26, 26, 26, 29, - 57, 26, 26, 29, 57, 26, 26, 26, 26, 26, - 61, 61, 59, 61, 65, 94, 94, 96, 96, 94, - 94, 89, 33, 34, 50, 51, 52, 21, 94, 14, - 21, 58, 89, 89, 94, 94, 14, 21, 58, 89, - 89, 94, 61, 67, 67, 94, 96, 96, 98, 98, - 5, 6, 7, 84, 94, 94, 94, 94, 94, 85, - 86, 87, 94, 14, 58, 89, 26, 64, 93, 89, - 15, 59, 14, 58, 14, 58, 89, 64, 93, 89, - 15, 15, 76, 94, 76, 89, 89, 7, 91, 91, - 91, 91, 91, 9, 40, 41, 42, 86, 94, 9, - 26, 60, 88, 89, 89, 15, 26, 93, 94, 59, - 89, 89, 89, 89, 15, 93, 94, 59, 76, 7, - 4, 40, 41, 42, 9, 88, 54, 61, 15, 59, - 94, 14, 58, 15, 59, 15, 59, 94, 14, 58, - 89, 61, 26, 89, 94, 14, 58, 89, 89, 14, - 58, 89, 89, 5, 84, 89, 94, 89, 89, 15, - 59, 89, 89, 15, 59, 89, 15, 59, 15, 59 + 37, 38, 39, 43, 44, 45, 46, 47, 49, 50, + 53, 54, 56, 57, 59, 61, 64, 66, 67, 69, + 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, + 81, 82, 83, 84, 85, 98, 99, 100, 101, 102, + 0, 53, 54, 91, 97, 26, 26, 31, 26, 91, + 91, 26, 26, 69, 71, 32, 51, 52, 53, 54, + 95, 96, 100, 24, 25, 61, 35, 36, 37, 38, + 39, 43, 46, 47, 56, 57, 35, 36, 37, 38, + 39, 43, 46, 47, 56, 57, 26, 26, 26, 29, + 58, 26, 26, 29, 58, 26, 26, 26, 26, 26, + 91, 97, 91, 97, 26, 26, 91, 91, 0, 26, + 67, 66, 68, 53, 54, 94, 33, 34, 51, 52, + 48, 55, 96, 100, 4, 53, 92, 93, 100, 97, + 52, 97, 14, 59, 95, 52, 97, 14, 14, 53, + 61, 71, 77, 71, 68, 19, 25, 62, 26, 26, + 26, 29, 58, 26, 26, 29, 58, 26, 26, 26, + 26, 26, 26, 26, 26, 29, 58, 26, 26, 29, + 58, 26, 26, 26, 26, 26, 62, 62, 60, 60, + 60, 62, 66, 97, 97, 99, 99, 97, 97, 91, + 33, 34, 51, 52, 53, 21, 97, 14, 21, 59, + 91, 91, 97, 97, 14, 21, 59, 91, 91, 97, + 62, 68, 68, 97, 99, 99, 101, 101, 5, 6, + 7, 86, 97, 97, 97, 97, 97, 87, 88, 89, + 97, 14, 59, 91, 26, 65, 95, 91, 15, 60, + 14, 59, 14, 59, 91, 65, 95, 91, 15, 15, + 77, 97, 77, 91, 91, 7, 93, 93, 93, 93, + 93, 9, 40, 41, 42, 88, 97, 9, 26, 61, + 90, 91, 91, 15, 26, 95, 97, 60, 91, 91, + 91, 91, 15, 95, 97, 60, 77, 7, 4, 40, + 41, 42, 9, 90, 55, 62, 15, 60, 97, 14, + 59, 15, 60, 15, 60, 97, 14, 59, 91, 62, + 26, 91, 97, 14, 59, 91, 91, 14, 59, 91, + 91, 5, 86, 91, 97, 91, 91, 15, 60, 91, + 91, 15, 60, 91, 15, 60, 15, 60 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int8 yyr1[] = { - 0, 62, 63, 63, 63, 63, 63, 63, 63, 64, - 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 66, 66, 66, 67, 67, - 68, 68, 69, 69, 69, 69, 69, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, - 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, - 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, - 74, 75, 75, 75, 75, 76, 76, 77, 78, 78, - 79, 79, 79, 79, 79, 80, 80, 80, 81, 82, - 83, 84, 84, 84, 85, 85, 86, 86, 86, 86, - 87, 87, 87, 87, 87, 87, 88, 88, 89, 89, - 90, 90, 90, 91, 91, 91, 91, 91, 91, 92, - 92, 93, 93, 93, 94, 94, 95, 95, 95, 96, - 96, 96, 96, 96, 97, 97, 97, 97, 97, 98, - 98, 98, 99, 99, 99, 99 + 0, 63, 64, 64, 64, 64, 64, 64, 64, 64, + 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, + 68, 69, 69, 70, 70, 70, 70, 70, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, + 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, + 73, 74, 74, 74, 74, 74, 74, 74, 74, 75, + 75, 75, 76, 76, 76, 76, 77, 77, 78, 79, + 79, 80, 80, 81, 81, 81, 81, 81, 82, 82, + 82, 83, 84, 85, 86, 86, 86, 87, 87, 88, + 88, 88, 88, 89, 89, 89, 89, 89, 89, 90, + 90, 91, 91, 92, 92, 92, 93, 93, 93, 93, + 93, 93, 94, 94, 95, 95, 95, 96, 96, 97, + 97, 98, 98, 98, 99, 99, 99, 99, 99, 100, + 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, + 102 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ static const yytype_int8 yyr2[] = { - 0, 2, 2, 1, 1, 2, 2, 2, 1, 1, - 2, 2, 2, 3, 3, 3, 3, 2, 3, 3, + 0, 2, 2, 1, 1, 1, 2, 2, 2, 1, + 1, 2, 2, 2, 3, 3, 3, 3, 2, 3, + 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, - 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, - 2, 3, 3, 2, 2, 1, 1, 1, 1, 2, - 1, 2, 1, 1, 2, 1, 1, 1, 1, 5, - 5, 1, 1, 1, 1, 1, 1, 1, 6, 6, - 7, 7, 10, 10, 9, 9, 7, 7, 5, 5, - 6, 6, 7, 7, 10, 10, 9, 9, 6, 7, - 6, 5, 6, 3, 5, 1, 2, 3, 3, 3, - 2, 3, 3, 4, 2, 5, 7, 6, 3, 1, - 3, 4, 6, 5, 1, 2, 4, 4, 5, 5, - 2, 3, 2, 3, 2, 3, 1, 3, 2, 2, - 3, 3, 3, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 0, 2, 1, 2, 2, 4, - 4, 3, 3, 1, 1, 2, 2, 2, 2, 4, - 4, 1, 1, 2, 2, 3 + 3, 2, 3, 3, 2, 2, 1, 1, 1, 1, + 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, + 5, 5, 1, 1, 1, 1, 1, 1, 1, 6, + 6, 7, 7, 10, 10, 9, 9, 7, 7, 5, + 5, 6, 6, 7, 7, 10, 10, 9, 9, 6, + 7, 6, 5, 6, 3, 5, 1, 2, 3, 3, + 3, 3, 3, 2, 3, 3, 4, 2, 5, 7, + 6, 3, 1, 3, 4, 6, 5, 1, 2, 4, + 4, 5, 5, 2, 3, 2, 3, 2, 3, 1, + 3, 2, 2, 3, 3, 3, 4, 4, 4, 4, + 4, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 2, 1, 2, 2, 4, 4, 3, 3, 1, 1, + 2, 2, 2, 2, 4, 4, 1, 1, 2, 2, + 3 }; @@ -1939,7 +1987,7 @@ yyreduce: switch (yyn) { case 2: /* inputunit: simple_list simple_list_terminator */ -#line 396 "/usr/local/src/chet/src/bash/src/parse.y" +#line 426 "/usr/local/src/chet/src/bash/src/parse.y" { /* Case of regular command. Discard the error safety net,and return the command just parsed. */ @@ -1950,23 +1998,33 @@ yyreduce: parser_state |= PST_EOFTOKEN; YYACCEPT; } -#line 1954 "y.tab.c" +#line 2002 "y.tab.c" break; case 3: /* inputunit: comsub */ -#line 407 "/usr/local/src/chet/src/bash/src/parse.y" +#line 437 "/usr/local/src/chet/src/bash/src/parse.y" { /* This is special; look at the production and how parse_comsub sets token_to_read */ global_command = (yyvsp[0].command); - eof_encountered = 0; YYACCEPT; } -#line 1966 "y.tab.c" +#line 2013 "y.tab.c" break; - case 4: /* inputunit: '\n' */ -#line 415 "/usr/local/src/chet/src/bash/src/parse.y" + case 4: /* inputunit: funsub */ +#line 444 "/usr/local/src/chet/src/bash/src/parse.y" + { + /* This is special; look at the production and how + parse_comsub/parse_valsub sets token_to_read */ + global_command = (yyvsp[0].command); + YYACCEPT; + } +#line 2024 "y.tab.c" + break; + + case 5: /* inputunit: '\n' */ +#line 451 "/usr/local/src/chet/src/bash/src/parse.y" { /* Case of regular command, but not a very interesting one. Return a NULL command. */ @@ -1975,11 +2033,11 @@ yyreduce: parser_state |= PST_EOFTOKEN; YYACCEPT; } -#line 1979 "y.tab.c" +#line 2037 "y.tab.c" break; - case 5: /* inputunit: error '\n' */ -#line 424 "/usr/local/src/chet/src/bash/src/parse.y" + case 6: /* inputunit: error '\n' */ +#line 460 "/usr/local/src/chet/src/bash/src/parse.y" { /* Error during parsing. Return NULL command. */ global_command = (COMMAND *)NULL; @@ -1994,11 +2052,11 @@ yyreduce: YYABORT; } } -#line 1998 "y.tab.c" +#line 2056 "y.tab.c" break; - case 6: /* inputunit: error yacc_EOF */ -#line 439 "/usr/local/src/chet/src/bash/src/parse.y" + case 7: /* inputunit: error yacc_EOF */ +#line 475 "/usr/local/src/chet/src/bash/src/parse.y" { /* EOF after an error. Do ignoreeof or not. Really only interesting in non-interactive shells */ @@ -2015,11 +2073,11 @@ yyreduce: YYABORT; } } -#line 2019 "y.tab.c" +#line 2077 "y.tab.c" break; - case 7: /* inputunit: error $end */ -#line 456 "/usr/local/src/chet/src/bash/src/parse.y" + case 8: /* inputunit: error $end */ +#line 492 "/usr/local/src/chet/src/bash/src/parse.y" { global_command = (COMMAND *)NULL; if (last_command_exit_value == 0) @@ -2034,11 +2092,11 @@ yyreduce: YYABORT; } } -#line 2038 "y.tab.c" +#line 2096 "y.tab.c" break; - case 8: /* inputunit: yacc_EOF */ -#line 471 "/usr/local/src/chet/src/bash/src/parse.y" + case 9: /* inputunit: yacc_EOF */ +#line 507 "/usr/local/src/chet/src/bash/src/parse.y" { /* Case of EOF seen by itself. Do ignoreeof or not. */ @@ -2046,495 +2104,499 @@ yyreduce: handle_eof_input_unit (); YYACCEPT; } -#line 2050 "y.tab.c" +#line 2108 "y.tab.c" break; - case 9: /* word_list: WORD */ -#line 481 "/usr/local/src/chet/src/bash/src/parse.y" + case 10: /* word_list: WORD */ +#line 517 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); } -#line 2056 "y.tab.c" +#line 2114 "y.tab.c" break; - case 10: /* word_list: word_list WORD */ -#line 483 "/usr/local/src/chet/src/bash/src/parse.y" + case 11: /* word_list: word_list WORD */ +#line 519 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-1].word_list)); } -#line 2062 "y.tab.c" +#line 2120 "y.tab.c" break; - case 11: /* redirection: '>' WORD */ -#line 487 "/usr/local/src/chet/src/bash/src/parse.y" + case 12: /* redirection: '>' WORD */ +#line 523 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 1; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0); } -#line 2072 "y.tab.c" +#line 2130 "y.tab.c" break; - case 12: /* redirection: '<' WORD */ -#line 493 "/usr/local/src/chet/src/bash/src/parse.y" + case 13: /* redirection: '<' WORD */ +#line 529 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 0; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0); } -#line 2082 "y.tab.c" +#line 2140 "y.tab.c" break; - case 13: /* redirection: NUMBER '>' WORD */ -#line 499 "/usr/local/src/chet/src/bash/src/parse.y" + case 14: /* redirection: NUMBER '>' WORD */ +#line 535 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0); } -#line 2092 "y.tab.c" +#line 2150 "y.tab.c" break; - case 14: /* redirection: NUMBER '<' WORD */ -#line 505 "/usr/local/src/chet/src/bash/src/parse.y" + case 15: /* redirection: NUMBER '<' WORD */ +#line 541 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0); } -#line 2102 "y.tab.c" +#line 2160 "y.tab.c" break; - case 15: /* redirection: REDIR_WORD '>' WORD */ -#line 511 "/usr/local/src/chet/src/bash/src/parse.y" + case 16: /* redirection: REDIR_WORD '>' WORD */ +#line 547 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_output_direction, redir, REDIR_VARASSIGN); } -#line 2112 "y.tab.c" +#line 2170 "y.tab.c" break; - case 16: /* redirection: REDIR_WORD '<' WORD */ -#line 517 "/usr/local/src/chet/src/bash/src/parse.y" + case 17: /* redirection: REDIR_WORD '<' WORD */ +#line 553 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_input_direction, redir, REDIR_VARASSIGN); } -#line 2122 "y.tab.c" +#line 2180 "y.tab.c" break; - case 17: /* redirection: GREATER_GREATER WORD */ -#line 523 "/usr/local/src/chet/src/bash/src/parse.y" + case 18: /* redirection: GREATER_GREATER WORD */ +#line 559 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 1; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0); } -#line 2132 "y.tab.c" +#line 2190 "y.tab.c" break; - case 18: /* redirection: NUMBER GREATER_GREATER WORD */ -#line 529 "/usr/local/src/chet/src/bash/src/parse.y" + case 19: /* redirection: NUMBER GREATER_GREATER WORD */ +#line 565 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0); } -#line 2142 "y.tab.c" +#line 2200 "y.tab.c" break; - case 19: /* redirection: REDIR_WORD GREATER_GREATER WORD */ -#line 535 "/usr/local/src/chet/src/bash/src/parse.y" + case 20: /* redirection: REDIR_WORD GREATER_GREATER WORD */ +#line 571 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_appending_to, redir, REDIR_VARASSIGN); } -#line 2152 "y.tab.c" +#line 2210 "y.tab.c" break; - case 20: /* redirection: GREATER_BAR WORD */ -#line 541 "/usr/local/src/chet/src/bash/src/parse.y" + case 21: /* redirection: GREATER_BAR WORD */ +#line 577 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 1; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_output_force, redir, 0); } -#line 2162 "y.tab.c" +#line 2220 "y.tab.c" break; - case 21: /* redirection: NUMBER GREATER_BAR WORD */ -#line 547 "/usr/local/src/chet/src/bash/src/parse.y" + case 22: /* redirection: NUMBER GREATER_BAR WORD */ +#line 583 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_output_force, redir, 0); } -#line 2172 "y.tab.c" +#line 2230 "y.tab.c" break; - case 22: /* redirection: REDIR_WORD GREATER_BAR WORD */ -#line 553 "/usr/local/src/chet/src/bash/src/parse.y" + case 23: /* redirection: REDIR_WORD GREATER_BAR WORD */ +#line 589 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_output_force, redir, REDIR_VARASSIGN); } -#line 2182 "y.tab.c" +#line 2240 "y.tab.c" break; - case 23: /* redirection: LESS_GREATER WORD */ -#line 559 "/usr/local/src/chet/src/bash/src/parse.y" + case 24: /* redirection: LESS_GREATER WORD */ +#line 595 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 0; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_input_output, redir, 0); } -#line 2192 "y.tab.c" +#line 2250 "y.tab.c" break; - case 24: /* redirection: NUMBER LESS_GREATER WORD */ -#line 565 "/usr/local/src/chet/src/bash/src/parse.y" + case 25: /* redirection: NUMBER LESS_GREATER WORD */ +#line 601 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_input_output, redir, 0); } -#line 2202 "y.tab.c" +#line 2260 "y.tab.c" break; - case 25: /* redirection: REDIR_WORD LESS_GREATER WORD */ -#line 571 "/usr/local/src/chet/src/bash/src/parse.y" + case 26: /* redirection: REDIR_WORD LESS_GREATER WORD */ +#line 607 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_input_output, redir, REDIR_VARASSIGN); } -#line 2212 "y.tab.c" +#line 2270 "y.tab.c" break; - case 26: /* redirection: LESS_LESS WORD */ -#line 577 "/usr/local/src/chet/src/bash/src/parse.y" + case 27: /* redirection: LESS_LESS WORD */ +#line 613 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 0; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0); push_heredoc ((yyval.redirect)); } -#line 2223 "y.tab.c" +#line 2281 "y.tab.c" break; - case 27: /* redirection: NUMBER LESS_LESS WORD */ -#line 584 "/usr/local/src/chet/src/bash/src/parse.y" + case 28: /* redirection: NUMBER LESS_LESS WORD */ +#line 620 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0); push_heredoc ((yyval.redirect)); } -#line 2234 "y.tab.c" +#line 2292 "y.tab.c" break; - case 28: /* redirection: REDIR_WORD LESS_LESS WORD */ -#line 591 "/usr/local/src/chet/src/bash/src/parse.y" + case 29: /* redirection: REDIR_WORD LESS_LESS WORD */ +#line 627 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN); push_heredoc ((yyval.redirect)); } -#line 2245 "y.tab.c" +#line 2303 "y.tab.c" break; - case 29: /* redirection: LESS_LESS_MINUS WORD */ -#line 598 "/usr/local/src/chet/src/bash/src/parse.y" + case 30: /* redirection: LESS_LESS_MINUS WORD */ +#line 634 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 0; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0); push_heredoc ((yyval.redirect)); } -#line 2256 "y.tab.c" +#line 2314 "y.tab.c" break; - case 30: /* redirection: NUMBER LESS_LESS_MINUS WORD */ -#line 605 "/usr/local/src/chet/src/bash/src/parse.y" + case 31: /* redirection: NUMBER LESS_LESS_MINUS WORD */ +#line 641 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0); push_heredoc ((yyval.redirect)); } -#line 2267 "y.tab.c" +#line 2325 "y.tab.c" break; - case 31: /* redirection: REDIR_WORD LESS_LESS_MINUS WORD */ -#line 612 "/usr/local/src/chet/src/bash/src/parse.y" + case 32: /* redirection: REDIR_WORD LESS_LESS_MINUS WORD */ +#line 648 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN); push_heredoc ((yyval.redirect)); } -#line 2278 "y.tab.c" +#line 2336 "y.tab.c" break; - case 32: /* redirection: LESS_LESS_LESS WORD */ -#line 619 "/usr/local/src/chet/src/bash/src/parse.y" + case 33: /* redirection: LESS_LESS_LESS WORD */ +#line 655 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 0; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0); } -#line 2288 "y.tab.c" +#line 2346 "y.tab.c" break; - case 33: /* redirection: NUMBER LESS_LESS_LESS WORD */ -#line 625 "/usr/local/src/chet/src/bash/src/parse.y" + case 34: /* redirection: NUMBER LESS_LESS_LESS WORD */ +#line 661 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0); } -#line 2298 "y.tab.c" +#line 2356 "y.tab.c" break; - case 34: /* redirection: REDIR_WORD LESS_LESS_LESS WORD */ -#line 631 "/usr/local/src/chet/src/bash/src/parse.y" + case 35: /* redirection: REDIR_WORD LESS_LESS_LESS WORD */ +#line 667 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_reading_string, redir, REDIR_VARASSIGN); } -#line 2308 "y.tab.c" +#line 2366 "y.tab.c" break; - case 35: /* redirection: LESS_AND NUMBER */ -#line 637 "/usr/local/src/chet/src/bash/src/parse.y" + case 36: /* redirection: LESS_AND NUMBER */ +#line 673 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 0; redir.dest = (yyvsp[0].number); (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0); } -#line 2318 "y.tab.c" +#line 2376 "y.tab.c" break; - case 36: /* redirection: NUMBER LESS_AND NUMBER */ -#line 643 "/usr/local/src/chet/src/bash/src/parse.y" + case 37: /* redirection: NUMBER LESS_AND NUMBER */ +#line 679 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.dest = (yyvsp[0].number); (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0); } -#line 2328 "y.tab.c" +#line 2386 "y.tab.c" break; - case 37: /* redirection: REDIR_WORD LESS_AND NUMBER */ -#line 649 "/usr/local/src/chet/src/bash/src/parse.y" + case 38: /* redirection: REDIR_WORD LESS_AND NUMBER */ +#line 685 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.dest = (yyvsp[0].number); (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, REDIR_VARASSIGN); } -#line 2338 "y.tab.c" +#line 2396 "y.tab.c" break; - case 38: /* redirection: GREATER_AND NUMBER */ -#line 655 "/usr/local/src/chet/src/bash/src/parse.y" + case 39: /* redirection: GREATER_AND NUMBER */ +#line 691 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 1; redir.dest = (yyvsp[0].number); (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0); } -#line 2348 "y.tab.c" +#line 2406 "y.tab.c" break; - case 39: /* redirection: NUMBER GREATER_AND NUMBER */ -#line 661 "/usr/local/src/chet/src/bash/src/parse.y" + case 40: /* redirection: NUMBER GREATER_AND NUMBER */ +#line 697 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.dest = (yyvsp[0].number); (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0); } -#line 2358 "y.tab.c" +#line 2416 "y.tab.c" break; - case 40: /* redirection: REDIR_WORD GREATER_AND NUMBER */ -#line 667 "/usr/local/src/chet/src/bash/src/parse.y" + case 41: /* redirection: REDIR_WORD GREATER_AND NUMBER */ +#line 703 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.dest = (yyvsp[0].number); (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, REDIR_VARASSIGN); } -#line 2368 "y.tab.c" +#line 2426 "y.tab.c" break; - case 41: /* redirection: LESS_AND WORD */ -#line 673 "/usr/local/src/chet/src/bash/src/parse.y" + case 42: /* redirection: LESS_AND WORD */ +#line 709 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 0; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0); } -#line 2378 "y.tab.c" +#line 2436 "y.tab.c" break; - case 42: /* redirection: NUMBER LESS_AND WORD */ -#line 679 "/usr/local/src/chet/src/bash/src/parse.y" + case 43: /* redirection: NUMBER LESS_AND WORD */ +#line 715 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0); } -#line 2388 "y.tab.c" +#line 2446 "y.tab.c" break; - case 43: /* redirection: REDIR_WORD LESS_AND WORD */ -#line 685 "/usr/local/src/chet/src/bash/src/parse.y" + case 44: /* redirection: REDIR_WORD LESS_AND WORD */ +#line 721 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, REDIR_VARASSIGN); } -#line 2398 "y.tab.c" +#line 2456 "y.tab.c" break; - case 44: /* redirection: GREATER_AND WORD */ -#line 691 "/usr/local/src/chet/src/bash/src/parse.y" + case 45: /* redirection: GREATER_AND WORD */ +#line 727 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 1; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0); } -#line 2408 "y.tab.c" +#line 2466 "y.tab.c" break; - case 45: /* redirection: NUMBER GREATER_AND WORD */ -#line 697 "/usr/local/src/chet/src/bash/src/parse.y" + case 46: /* redirection: NUMBER GREATER_AND WORD */ +#line 733 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0); } -#line 2418 "y.tab.c" +#line 2476 "y.tab.c" break; - case 46: /* redirection: REDIR_WORD GREATER_AND WORD */ -#line 703 "/usr/local/src/chet/src/bash/src/parse.y" + case 47: /* redirection: REDIR_WORD GREATER_AND WORD */ +#line 739 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, REDIR_VARASSIGN); } -#line 2428 "y.tab.c" +#line 2486 "y.tab.c" break; - case 47: /* redirection: GREATER_AND '-' */ -#line 709 "/usr/local/src/chet/src/bash/src/parse.y" + case 48: /* redirection: GREATER_AND '-' */ +#line 745 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 1; redir.dest = 0; (yyval.redirect) = make_redirection (source, r_close_this, redir, 0); } -#line 2438 "y.tab.c" +#line 2496 "y.tab.c" break; - case 48: /* redirection: NUMBER GREATER_AND '-' */ -#line 715 "/usr/local/src/chet/src/bash/src/parse.y" + case 49: /* redirection: NUMBER GREATER_AND '-' */ +#line 751 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.dest = 0; (yyval.redirect) = make_redirection (source, r_close_this, redir, 0); } -#line 2448 "y.tab.c" +#line 2506 "y.tab.c" break; - case 49: /* redirection: REDIR_WORD GREATER_AND '-' */ -#line 721 "/usr/local/src/chet/src/bash/src/parse.y" + case 50: /* redirection: REDIR_WORD GREATER_AND '-' */ +#line 757 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.dest = 0; (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN); } -#line 2458 "y.tab.c" +#line 2516 "y.tab.c" break; - case 50: /* redirection: LESS_AND '-' */ -#line 727 "/usr/local/src/chet/src/bash/src/parse.y" + case 51: /* redirection: LESS_AND '-' */ +#line 763 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 0; redir.dest = 0; (yyval.redirect) = make_redirection (source, r_close_this, redir, 0); } -#line 2468 "y.tab.c" +#line 2526 "y.tab.c" break; - case 51: /* redirection: NUMBER LESS_AND '-' */ -#line 733 "/usr/local/src/chet/src/bash/src/parse.y" + case 52: /* redirection: NUMBER LESS_AND '-' */ +#line 769 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = (yyvsp[-2].number); redir.dest = 0; (yyval.redirect) = make_redirection (source, r_close_this, redir, 0); } -#line 2478 "y.tab.c" +#line 2536 "y.tab.c" break; - case 52: /* redirection: REDIR_WORD LESS_AND '-' */ -#line 739 "/usr/local/src/chet/src/bash/src/parse.y" + case 53: /* redirection: REDIR_WORD LESS_AND '-' */ +#line 775 "/usr/local/src/chet/src/bash/src/parse.y" { source.filename = (yyvsp[-2].word); redir.dest = 0; (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN); } -#line 2488 "y.tab.c" +#line 2546 "y.tab.c" break; - case 53: /* redirection: AND_GREATER WORD */ -#line 745 "/usr/local/src/chet/src/bash/src/parse.y" + case 54: /* redirection: AND_GREATER WORD */ +#line 781 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 1; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_err_and_out, redir, 0); } -#line 2498 "y.tab.c" +#line 2556 "y.tab.c" break; - case 54: /* redirection: AND_GREATER_GREATER WORD */ -#line 751 "/usr/local/src/chet/src/bash/src/parse.y" + case 55: /* redirection: AND_GREATER_GREATER WORD */ +#line 787 "/usr/local/src/chet/src/bash/src/parse.y" { source.dest = 1; redir.filename = (yyvsp[0].word); (yyval.redirect) = make_redirection (source, r_append_err_and_out, redir, 0); } -#line 2508 "y.tab.c" +#line 2566 "y.tab.c" break; - case 55: /* simple_command_element: WORD */ -#line 759 "/usr/local/src/chet/src/bash/src/parse.y" + case 56: /* simple_command_element: WORD */ +#line 795 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; } -#line 2514 "y.tab.c" +#line 2572 "y.tab.c" break; - case 56: /* simple_command_element: ASSIGNMENT_WORD */ -#line 761 "/usr/local/src/chet/src/bash/src/parse.y" + case 57: /* simple_command_element: ASSIGNMENT_WORD */ +#line 797 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; } -#line 2520 "y.tab.c" +#line 2578 "y.tab.c" break; - case 57: /* simple_command_element: redirection */ -#line 763 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.element).redirect = (yyvsp[0].redirect); (yyval.element).word = 0; } -#line 2526 "y.tab.c" + case 58: /* simple_command_element: redirection */ +#line 799 "/usr/local/src/chet/src/bash/src/parse.y" + { + if (simplecmd_lineno == -1) + simplecmd_lineno = line_number; /* XXX */ + (yyval.element).redirect = (yyvsp[0].redirect); (yyval.element).word = 0; + } +#line 2588 "y.tab.c" break; - case 58: /* redirection_list: redirection */ -#line 767 "/usr/local/src/chet/src/bash/src/parse.y" + case 59: /* redirection_list: redirection */ +#line 807 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.redirect) = (yyvsp[0].redirect); } -#line 2534 "y.tab.c" +#line 2596 "y.tab.c" break; - case 59: /* redirection_list: redirection_list redirection */ -#line 771 "/usr/local/src/chet/src/bash/src/parse.y" + case 60: /* redirection_list: redirection_list redirection */ +#line 811 "/usr/local/src/chet/src/bash/src/parse.y" { register REDIRECT *t; @@ -2543,35 +2605,35 @@ yyreduce: t->next = (yyvsp[0].redirect); (yyval.redirect) = (yyvsp[-1].redirect); } -#line 2547 "y.tab.c" +#line 2609 "y.tab.c" break; - case 60: /* simple_command: simple_command_element */ -#line 782 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[0].element), (COMMAND *)NULL); } -#line 2553 "y.tab.c" + case 61: /* simple_command: simple_command_element */ +#line 822 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.command) = make_simple_command ((yyvsp[0].element), (COMMAND *)NULL, simplecmd_lineno); } +#line 2615 "y.tab.c" break; - case 61: /* simple_command: simple_command simple_command_element */ -#line 784 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[0].element), (yyvsp[-1].command)); } -#line 2559 "y.tab.c" + case 62: /* simple_command: simple_command simple_command_element */ +#line 824 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.command) = make_simple_command ((yyvsp[0].element), (yyvsp[-1].command), line_number); } +#line 2621 "y.tab.c" break; - case 62: /* command: simple_command */ -#line 788 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = clean_simple_command ((yyvsp[0].command)); } -#line 2565 "y.tab.c" + case 63: /* command: simple_command */ +#line 828 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.command) = clean_simple_command ((yyvsp[0].command)); simplecmd_lineno = -1; } +#line 2627 "y.tab.c" break; - case 63: /* command: shell_command */ -#line 790 "/usr/local/src/chet/src/bash/src/parse.y" + case 64: /* command: shell_command */ +#line 830 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2571 "y.tab.c" +#line 2633 "y.tab.c" break; - case 64: /* command: shell_command redirection_list */ -#line 792 "/usr/local/src/chet/src/bash/src/parse.y" + case 65: /* command: shell_command redirection_list */ +#line 832 "/usr/local/src/chet/src/bash/src/parse.y" { COMMAND *tc; @@ -2587,330 +2649,336 @@ yyreduce: tc->redirects = (yyvsp[0].redirect); (yyval.command) = (yyvsp[-1].command); } -#line 2591 "y.tab.c" +#line 2653 "y.tab.c" break; - case 65: /* command: function_def */ -#line 808 "/usr/local/src/chet/src/bash/src/parse.y" + case 66: /* command: function_def */ +#line 848 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2597 "y.tab.c" +#line 2659 "y.tab.c" break; - case 66: /* command: coproc */ -#line 810 "/usr/local/src/chet/src/bash/src/parse.y" + case 67: /* command: coproc */ +#line 850 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2603 "y.tab.c" +#line 2665 "y.tab.c" break; - case 67: /* shell_command: for_command */ -#line 814 "/usr/local/src/chet/src/bash/src/parse.y" + case 68: /* shell_command: for_command */ +#line 854 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2609 "y.tab.c" +#line 2671 "y.tab.c" break; - case 68: /* shell_command: case_command */ -#line 816 "/usr/local/src/chet/src/bash/src/parse.y" + case 69: /* shell_command: case_command */ +#line 856 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2615 "y.tab.c" +#line 2677 "y.tab.c" break; - case 69: /* shell_command: WHILE compound_list DO compound_list DONE */ -#line 818 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_while_command ((yyvsp[-3].command), (yyvsp[-1].command)); } -#line 2621 "y.tab.c" + case 70: /* shell_command: WHILE compound_list DO compound_list DONE */ +#line 858 "/usr/local/src/chet/src/bash/src/parse.y" + { + (yyval.command) = make_while_command ((yyvsp[-3].command), (yyvsp[-1].command)); + if (word_top >= 0) word_top--; + } +#line 2686 "y.tab.c" break; - case 70: /* shell_command: UNTIL compound_list DO compound_list DONE */ -#line 820 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_until_command ((yyvsp[-3].command), (yyvsp[-1].command)); } -#line 2627 "y.tab.c" + case 71: /* shell_command: UNTIL compound_list DO compound_list DONE */ +#line 863 "/usr/local/src/chet/src/bash/src/parse.y" + { + (yyval.command) = make_until_command ((yyvsp[-3].command), (yyvsp[-1].command)); + if (word_top >= 0) word_top--; + } +#line 2695 "y.tab.c" break; - case 71: /* shell_command: select_command */ -#line 822 "/usr/local/src/chet/src/bash/src/parse.y" + case 72: /* shell_command: select_command */ +#line 868 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2633 "y.tab.c" +#line 2701 "y.tab.c" break; - case 72: /* shell_command: if_command */ -#line 824 "/usr/local/src/chet/src/bash/src/parse.y" + case 73: /* shell_command: if_command */ +#line 870 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2639 "y.tab.c" +#line 2707 "y.tab.c" break; - case 73: /* shell_command: subshell */ -#line 826 "/usr/local/src/chet/src/bash/src/parse.y" + case 74: /* shell_command: subshell */ +#line 872 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2645 "y.tab.c" +#line 2713 "y.tab.c" break; - case 74: /* shell_command: group_command */ -#line 828 "/usr/local/src/chet/src/bash/src/parse.y" + case 75: /* shell_command: group_command */ +#line 874 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2651 "y.tab.c" +#line 2719 "y.tab.c" break; - case 75: /* shell_command: arith_command */ -#line 830 "/usr/local/src/chet/src/bash/src/parse.y" + case 76: /* shell_command: arith_command */ +#line 876 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2657 "y.tab.c" +#line 2725 "y.tab.c" break; - case 76: /* shell_command: cond_command */ -#line 832 "/usr/local/src/chet/src/bash/src/parse.y" + case 77: /* shell_command: cond_command */ +#line 878 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2663 "y.tab.c" +#line 2731 "y.tab.c" break; - case 77: /* shell_command: arith_for_command */ -#line 834 "/usr/local/src/chet/src/bash/src/parse.y" + case 78: /* shell_command: arith_for_command */ +#line 880 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2669 "y.tab.c" +#line 2737 "y.tab.c" break; - case 78: /* for_command: FOR WORD newline_list DO compound_list DONE */ -#line 838 "/usr/local/src/chet/src/bash/src/parse.y" + case 79: /* for_command: FOR WORD newline_list DO compound_list DONE */ +#line 884 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_for_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2678 "y.tab.c" +#line 2746 "y.tab.c" break; - case 79: /* for_command: FOR WORD newline_list '{' compound_list '}' */ -#line 843 "/usr/local/src/chet/src/bash/src/parse.y" + case 80: /* for_command: FOR WORD newline_list '{' compound_list '}' */ +#line 889 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_for_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2687 "y.tab.c" +#line 2755 "y.tab.c" break; - case 80: /* for_command: FOR WORD ';' newline_list DO compound_list DONE */ -#line 848 "/usr/local/src/chet/src/bash/src/parse.y" + case 81: /* for_command: FOR WORD ';' newline_list DO compound_list DONE */ +#line 894 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_for_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2696 "y.tab.c" +#line 2764 "y.tab.c" break; - case 81: /* for_command: FOR WORD ';' newline_list '{' compound_list '}' */ -#line 853 "/usr/local/src/chet/src/bash/src/parse.y" + case 82: /* for_command: FOR WORD ';' newline_list '{' compound_list '}' */ +#line 899 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_for_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2705 "y.tab.c" +#line 2773 "y.tab.c" break; - case 82: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE */ -#line 858 "/usr/local/src/chet/src/bash/src/parse.y" + case 83: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE */ +#line 904 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_for_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2714 "y.tab.c" +#line 2782 "y.tab.c" break; - case 83: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}' */ -#line 863 "/usr/local/src/chet/src/bash/src/parse.y" + case 84: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}' */ +#line 909 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_for_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2723 "y.tab.c" +#line 2791 "y.tab.c" break; - case 84: /* for_command: FOR WORD newline_list IN list_terminator newline_list DO compound_list DONE */ -#line 868 "/usr/local/src/chet/src/bash/src/parse.y" + case 85: /* for_command: FOR WORD newline_list IN list_terminator newline_list DO compound_list DONE */ +#line 914 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_for_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2732 "y.tab.c" +#line 2800 "y.tab.c" break; - case 85: /* for_command: FOR WORD newline_list IN list_terminator newline_list '{' compound_list '}' */ -#line 873 "/usr/local/src/chet/src/bash/src/parse.y" + case 86: /* for_command: FOR WORD newline_list IN list_terminator newline_list '{' compound_list '}' */ +#line 919 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_for_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2741 "y.tab.c" +#line 2809 "y.tab.c" break; - case 86: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_list DONE */ -#line 880 "/usr/local/src/chet/src/bash/src/parse.y" + case 87: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_list DONE */ +#line 926 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_arith_for_command ((yyvsp[-5].word_list), (yyvsp[-1].command), arith_for_lineno); if ((yyval.command) == 0) YYERROR; - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2751 "y.tab.c" +#line 2819 "y.tab.c" break; - case 87: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list '{' compound_list '}' */ -#line 886 "/usr/local/src/chet/src/bash/src/parse.y" + case 88: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list '{' compound_list '}' */ +#line 932 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_arith_for_command ((yyvsp[-5].word_list), (yyvsp[-1].command), arith_for_lineno); if ((yyval.command) == 0) YYERROR; - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2761 "y.tab.c" +#line 2829 "y.tab.c" break; - case 88: /* arith_for_command: FOR ARITH_FOR_EXPRS DO compound_list DONE */ -#line 892 "/usr/local/src/chet/src/bash/src/parse.y" + case 89: /* arith_for_command: FOR ARITH_FOR_EXPRS DO compound_list DONE */ +#line 938 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_arith_for_command ((yyvsp[-3].word_list), (yyvsp[-1].command), arith_for_lineno); if ((yyval.command) == 0) YYERROR; - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2771 "y.tab.c" +#line 2839 "y.tab.c" break; - case 89: /* arith_for_command: FOR ARITH_FOR_EXPRS '{' compound_list '}' */ -#line 898 "/usr/local/src/chet/src/bash/src/parse.y" + case 90: /* arith_for_command: FOR ARITH_FOR_EXPRS '{' compound_list '}' */ +#line 944 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_arith_for_command ((yyvsp[-3].word_list), (yyvsp[-1].command), arith_for_lineno); if ((yyval.command) == 0) YYERROR; - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2781 "y.tab.c" +#line 2849 "y.tab.c" break; - case 90: /* select_command: SELECT WORD newline_list DO compound_list DONE */ -#line 906 "/usr/local/src/chet/src/bash/src/parse.y" + case 91: /* select_command: SELECT WORD newline_list DO compound_list DONE */ +#line 952 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_select_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2790 "y.tab.c" +#line 2858 "y.tab.c" break; - case 91: /* select_command: SELECT WORD newline_list '{' compound_list '}' */ -#line 911 "/usr/local/src/chet/src/bash/src/parse.y" + case 92: /* select_command: SELECT WORD newline_list '{' compound_list '}' */ +#line 957 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_select_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2799 "y.tab.c" +#line 2867 "y.tab.c" break; - case 92: /* select_command: SELECT WORD ';' newline_list DO compound_list DONE */ -#line 916 "/usr/local/src/chet/src/bash/src/parse.y" + case 93: /* select_command: SELECT WORD ';' newline_list DO compound_list DONE */ +#line 962 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_select_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2808 "y.tab.c" +#line 2876 "y.tab.c" break; - case 93: /* select_command: SELECT WORD ';' newline_list '{' compound_list '}' */ -#line 921 "/usr/local/src/chet/src/bash/src/parse.y" + case 94: /* select_command: SELECT WORD ';' newline_list '{' compound_list '}' */ +#line 967 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_select_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2817 "y.tab.c" +#line 2885 "y.tab.c" break; - case 94: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE */ -#line 926 "/usr/local/src/chet/src/bash/src/parse.y" + case 95: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE */ +#line 972 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_select_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2826 "y.tab.c" +#line 2894 "y.tab.c" break; - case 95: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}' */ -#line 931 "/usr/local/src/chet/src/bash/src/parse.y" + case 96: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}' */ +#line 977 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_select_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2835 "y.tab.c" +#line 2903 "y.tab.c" break; - case 96: /* select_command: SELECT WORD newline_list IN list_terminator newline_list DO compound_list DONE */ -#line 936 "/usr/local/src/chet/src/bash/src/parse.y" + case 97: /* select_command: SELECT WORD newline_list IN list_terminator newline_list DO compound_list DONE */ +#line 982 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_select_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2844 "y.tab.c" +#line 2912 "y.tab.c" break; - case 97: /* select_command: SELECT WORD newline_list IN list_terminator newline_list '{' compound_list '}' */ -#line 941 "/usr/local/src/chet/src/bash/src/parse.y" + case 98: /* select_command: SELECT WORD newline_list IN list_terminator newline_list '{' compound_list '}' */ +#line 987 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_select_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2853 "y.tab.c" +#line 2921 "y.tab.c" break; - case 98: /* case_command: CASE WORD newline_list IN newline_list ESAC */ -#line 948 "/usr/local/src/chet/src/bash/src/parse.y" + case 99: /* case_command: CASE WORD newline_list IN newline_list ESAC */ +#line 994 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_case_command ((yyvsp[-4].word), (PATTERN_LIST *)NULL, word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2862 "y.tab.c" +#line 2930 "y.tab.c" break; - case 99: /* case_command: CASE WORD newline_list IN case_clause_sequence newline_list ESAC */ -#line 953 "/usr/local/src/chet/src/bash/src/parse.y" + case 100: /* case_command: CASE WORD newline_list IN case_clause_sequence newline_list ESAC */ +#line 999 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_case_command ((yyvsp[-5].word), (yyvsp[-2].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2871 "y.tab.c" +#line 2939 "y.tab.c" break; - case 100: /* case_command: CASE WORD newline_list IN case_clause ESAC */ -#line 958 "/usr/local/src/chet/src/bash/src/parse.y" + case 101: /* case_command: CASE WORD newline_list IN case_clause ESAC */ +#line 1004 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_case_command ((yyvsp[-4].word), (yyvsp[-1].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; + if (word_top >= 0) word_top--; } -#line 2880 "y.tab.c" +#line 2948 "y.tab.c" break; - case 101: /* function_def: WORD '(' ')' newline_list function_body */ -#line 965 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); } -#line 2886 "y.tab.c" + case 102: /* function_def: WORD '(' ')' newline_list function_body */ +#line 1011 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); function_dstart = save_dstart; simplecmd_lineno = -1; } +#line 2954 "y.tab.c" break; - case 102: /* function_def: FUNCTION WORD '(' ')' newline_list function_body */ -#line 967 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); } -#line 2892 "y.tab.c" + case 103: /* function_def: FUNCTION WORD '(' ')' newline_list function_body */ +#line 1013 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); function_dstart = save_dstart; } +#line 2960 "y.tab.c" break; - case 103: /* function_def: FUNCTION WORD function_body */ -#line 969 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_function_def ((yyvsp[-1].word), (yyvsp[0].command), function_dstart, function_bstart); } -#line 2898 "y.tab.c" + case 104: /* function_def: FUNCTION WORD function_body */ +#line 1015 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.command) = make_function_def ((yyvsp[-1].word), (yyvsp[0].command), function_dstart, function_bstart); function_dstart = save_dstart; } +#line 2966 "y.tab.c" break; - case 104: /* function_def: FUNCTION WORD '\n' newline_list function_body */ -#line 971 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_function_def ((yyvsp[-3].word), (yyvsp[0].command), function_dstart, function_bstart); } -#line 2904 "y.tab.c" + case 105: /* function_def: FUNCTION WORD '\n' newline_list function_body */ +#line 1017 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.command) = make_function_def ((yyvsp[-3].word), (yyvsp[0].command), function_dstart, function_bstart); function_dstart = save_dstart; } +#line 2972 "y.tab.c" break; - case 105: /* function_body: shell_command */ -#line 975 "/usr/local/src/chet/src/bash/src/parse.y" + case 106: /* function_body: shell_command */ +#line 1021 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2910 "y.tab.c" +#line 2978 "y.tab.c" break; - case 106: /* function_body: shell_command redirection_list */ -#line 977 "/usr/local/src/chet/src/bash/src/parse.y" + case 107: /* function_body: shell_command redirection_list */ +#line 1023 "/usr/local/src/chet/src/bash/src/parse.y" { COMMAND *tc; @@ -2939,45 +3007,61 @@ yyreduce: tc->redirects = (yyvsp[0].redirect); (yyval.command) = (yyvsp[-1].command); } -#line 2943 "y.tab.c" +#line 3011 "y.tab.c" break; - case 107: /* subshell: '(' compound_list ')' */ -#line 1008 "/usr/local/src/chet/src/bash/src/parse.y" + case 108: /* subshell: '(' compound_list ')' */ +#line 1054 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_subshell_command ((yyvsp[-1].command)); (yyval.command)->flags |= CMD_WANT_SUBSHELL; } -#line 2952 "y.tab.c" +#line 3020 "y.tab.c" break; - case 108: /* comsub: DOLPAREN compound_list ')' */ -#line 1015 "/usr/local/src/chet/src/bash/src/parse.y" + case 109: /* comsub: DOLPAREN compound_list ')' */ +#line 1061 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[-1].command); } -#line 2960 "y.tab.c" +#line 3028 "y.tab.c" + break; + + case 110: /* comsub: DOLPAREN newline_list ')' */ +#line 1065 "/usr/local/src/chet/src/bash/src/parse.y" + { + (yyval.command) = (COMMAND *)NULL; + } +#line 3036 "y.tab.c" + break; + + case 111: /* funsub: DOLBRACE compound_list '}' */ +#line 1071 "/usr/local/src/chet/src/bash/src/parse.y" + { + (yyval.command) = (yyvsp[-1].command); + } +#line 3044 "y.tab.c" break; - case 109: /* comsub: DOLPAREN newline_list ')' */ -#line 1019 "/usr/local/src/chet/src/bash/src/parse.y" + case 112: /* funsub: DOLBRACE newline_list '}' */ +#line 1075 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (COMMAND *)NULL; } -#line 2968 "y.tab.c" +#line 3052 "y.tab.c" break; - case 110: /* coproc: COPROC shell_command */ -#line 1025 "/usr/local/src/chet/src/bash/src/parse.y" + case 113: /* coproc: COPROC shell_command */ +#line 1081 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_coproc_command ("COPROC", (yyvsp[0].command)); (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; } -#line 2977 "y.tab.c" +#line 3061 "y.tab.c" break; - case 111: /* coproc: COPROC shell_command redirection_list */ -#line 1030 "/usr/local/src/chet/src/bash/src/parse.y" + case 114: /* coproc: COPROC shell_command redirection_list */ +#line 1086 "/usr/local/src/chet/src/bash/src/parse.y" { COMMAND *tc; @@ -2994,20 +3078,20 @@ yyreduce: (yyval.command) = make_coproc_command ("COPROC", (yyvsp[-1].command)); (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; } -#line 2998 "y.tab.c" +#line 3082 "y.tab.c" break; - case 112: /* coproc: COPROC WORD shell_command */ -#line 1047 "/usr/local/src/chet/src/bash/src/parse.y" + case 115: /* coproc: COPROC WORD shell_command */ +#line 1103 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_coproc_command ((yyvsp[-1].word)->word, (yyvsp[0].command)); (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; } -#line 3007 "y.tab.c" +#line 3091 "y.tab.c" break; - case 113: /* coproc: COPROC WORD shell_command redirection_list */ -#line 1052 "/usr/local/src/chet/src/bash/src/parse.y" + case 116: /* coproc: COPROC WORD shell_command redirection_list */ +#line 1108 "/usr/local/src/chet/src/bash/src/parse.y" { COMMAND *tc; @@ -3024,245 +3108,278 @@ yyreduce: (yyval.command) = make_coproc_command ((yyvsp[-2].word)->word, (yyvsp[-1].command)); (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; } -#line 3028 "y.tab.c" +#line 3112 "y.tab.c" break; - case 114: /* coproc: COPROC simple_command */ -#line 1069 "/usr/local/src/chet/src/bash/src/parse.y" + case 117: /* coproc: COPROC simple_command */ +#line 1125 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[0].command))); (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; } -#line 3037 "y.tab.c" +#line 3121 "y.tab.c" break; - case 115: /* if_command: IF compound_list THEN compound_list FI */ -#line 1076 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (COMMAND *)NULL); } -#line 3043 "y.tab.c" + case 118: /* if_command: IF compound_list THEN compound_list FI */ +#line 1132 "/usr/local/src/chet/src/bash/src/parse.y" + { + (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (COMMAND *)NULL); + if (word_top >= 0) word_top--; + } +#line 3130 "y.tab.c" break; - case 116: /* if_command: IF compound_list THEN compound_list ELSE compound_list FI */ -#line 1078 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_if_command ((yyvsp[-5].command), (yyvsp[-3].command), (yyvsp[-1].command)); } -#line 3049 "y.tab.c" + case 119: /* if_command: IF compound_list THEN compound_list ELSE compound_list FI */ +#line 1137 "/usr/local/src/chet/src/bash/src/parse.y" + { + (yyval.command) = make_if_command ((yyvsp[-5].command), (yyvsp[-3].command), (yyvsp[-1].command)); + if (word_top >= 0) word_top--; + } +#line 3139 "y.tab.c" break; - case 117: /* if_command: IF compound_list THEN compound_list elif_clause FI */ -#line 1080 "/usr/local/src/chet/src/bash/src/parse.y" - { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[-1].command)); } -#line 3055 "y.tab.c" + case 120: /* if_command: IF compound_list THEN compound_list elif_clause FI */ +#line 1142 "/usr/local/src/chet/src/bash/src/parse.y" + { + (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[-1].command)); + if (word_top >= 0) word_top--; + } +#line 3148 "y.tab.c" break; - case 118: /* group_command: '{' compound_list '}' */ -#line 1085 "/usr/local/src/chet/src/bash/src/parse.y" + case 121: /* group_command: '{' compound_list '}' */ +#line 1150 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_group_command ((yyvsp[-1].command)); } -#line 3061 "y.tab.c" +#line 3154 "y.tab.c" break; - case 119: /* arith_command: ARITH_CMD */ -#line 1089 "/usr/local/src/chet/src/bash/src/parse.y" + case 122: /* arith_command: ARITH_CMD */ +#line 1154 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_arith_command ((yyvsp[0].word_list)); } -#line 3067 "y.tab.c" +#line 3160 "y.tab.c" break; - case 120: /* cond_command: COND_START COND_CMD COND_END */ -#line 1093 "/usr/local/src/chet/src/bash/src/parse.y" + case 123: /* cond_command: COND_START COND_CMD COND_END */ +#line 1158 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[-1].command); } -#line 3073 "y.tab.c" +#line 3166 "y.tab.c" break; - case 121: /* elif_clause: ELIF compound_list THEN compound_list */ -#line 1097 "/usr/local/src/chet/src/bash/src/parse.y" + case 124: /* elif_clause: ELIF compound_list THEN compound_list */ +#line 1162 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_if_command ((yyvsp[-2].command), (yyvsp[0].command), (COMMAND *)NULL); } -#line 3079 "y.tab.c" +#line 3172 "y.tab.c" break; - case 122: /* elif_clause: ELIF compound_list THEN compound_list ELSE compound_list */ -#line 1099 "/usr/local/src/chet/src/bash/src/parse.y" + case 125: /* elif_clause: ELIF compound_list THEN compound_list ELSE compound_list */ +#line 1164 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[0].command)); } -#line 3085 "y.tab.c" +#line 3178 "y.tab.c" break; - case 123: /* elif_clause: ELIF compound_list THEN compound_list elif_clause */ -#line 1101 "/usr/local/src/chet/src/bash/src/parse.y" + case 126: /* elif_clause: ELIF compound_list THEN compound_list elif_clause */ +#line 1166 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (yyvsp[0].command)); } -#line 3091 "y.tab.c" +#line 3184 "y.tab.c" break; - case 125: /* case_clause: case_clause_sequence pattern_list */ -#line 1106 "/usr/local/src/chet/src/bash/src/parse.y" + case 128: /* case_clause: case_clause_sequence pattern_list */ +#line 1171 "/usr/local/src/chet/src/bash/src/parse.y" { (yyvsp[0].pattern)->next = (yyvsp[-1].pattern); (yyval.pattern) = (yyvsp[0].pattern); } -#line 3097 "y.tab.c" +#line 3190 "y.tab.c" break; - case 126: /* pattern_list: newline_list pattern ')' compound_list */ -#line 1110 "/usr/local/src/chet/src/bash/src/parse.y" + case 129: /* pattern_list: newline_list pattern ')' compound_list */ +#line 1175 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); } -#line 3103 "y.tab.c" +#line 3196 "y.tab.c" break; - case 127: /* pattern_list: newline_list pattern ')' newline_list */ -#line 1112 "/usr/local/src/chet/src/bash/src/parse.y" + case 130: /* pattern_list: newline_list pattern ')' newline_list */ +#line 1177 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); } -#line 3109 "y.tab.c" +#line 3202 "y.tab.c" break; - case 128: /* pattern_list: newline_list '(' pattern ')' compound_list */ -#line 1114 "/usr/local/src/chet/src/bash/src/parse.y" + case 131: /* pattern_list: newline_list '(' pattern ')' compound_list */ +#line 1179 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); } -#line 3115 "y.tab.c" +#line 3208 "y.tab.c" break; - case 129: /* pattern_list: newline_list '(' pattern ')' newline_list */ -#line 1116 "/usr/local/src/chet/src/bash/src/parse.y" + case 132: /* pattern_list: newline_list '(' pattern ')' newline_list */ +#line 1181 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); } -#line 3121 "y.tab.c" +#line 3214 "y.tab.c" break; - case 130: /* case_clause_sequence: pattern_list SEMI_SEMI */ -#line 1120 "/usr/local/src/chet/src/bash/src/parse.y" + case 133: /* case_clause_sequence: pattern_list SEMI_SEMI */ +#line 1185 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3127 "y.tab.c" +#line 3220 "y.tab.c" break; - case 131: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI */ -#line 1122 "/usr/local/src/chet/src/bash/src/parse.y" + case 134: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI */ +#line 1187 "/usr/local/src/chet/src/bash/src/parse.y" { (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3133 "y.tab.c" +#line 3226 "y.tab.c" break; - case 132: /* case_clause_sequence: pattern_list SEMI_AND */ -#line 1124 "/usr/local/src/chet/src/bash/src/parse.y" + case 135: /* case_clause_sequence: pattern_list SEMI_AND */ +#line 1189 "/usr/local/src/chet/src/bash/src/parse.y" { (yyvsp[-1].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3139 "y.tab.c" +#line 3232 "y.tab.c" break; - case 133: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_AND */ -#line 1126 "/usr/local/src/chet/src/bash/src/parse.y" + case 136: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_AND */ +#line 1191 "/usr/local/src/chet/src/bash/src/parse.y" { (yyvsp[-1].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3145 "y.tab.c" +#line 3238 "y.tab.c" break; - case 134: /* case_clause_sequence: pattern_list SEMI_SEMI_AND */ -#line 1128 "/usr/local/src/chet/src/bash/src/parse.y" + case 137: /* case_clause_sequence: pattern_list SEMI_SEMI_AND */ +#line 1193 "/usr/local/src/chet/src/bash/src/parse.y" { (yyvsp[-1].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3151 "y.tab.c" +#line 3244 "y.tab.c" break; - case 135: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI_AND */ -#line 1130 "/usr/local/src/chet/src/bash/src/parse.y" + case 138: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI_AND */ +#line 1195 "/usr/local/src/chet/src/bash/src/parse.y" { (yyvsp[-1].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3157 "y.tab.c" +#line 3250 "y.tab.c" break; - case 136: /* pattern: WORD */ -#line 1134 "/usr/local/src/chet/src/bash/src/parse.y" + case 139: /* pattern: WORD */ +#line 1199 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); } -#line 3163 "y.tab.c" +#line 3256 "y.tab.c" break; - case 137: /* pattern: pattern '|' WORD */ -#line 1136 "/usr/local/src/chet/src/bash/src/parse.y" + case 140: /* pattern: pattern '|' WORD */ +#line 1201 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-2].word_list)); } -#line 3169 "y.tab.c" +#line 3262 "y.tab.c" break; - case 138: /* compound_list: newline_list list0 */ -#line 1145 "/usr/local/src/chet/src/bash/src/parse.y" + case 141: /* compound_list: newline_list list0 */ +#line 1210 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); if (need_here_doc && last_read_token == '\n') gather_here_documents (); } -#line 3179 "y.tab.c" +#line 3272 "y.tab.c" break; - case 139: /* compound_list: newline_list list1 */ -#line 1151 "/usr/local/src/chet/src/bash/src/parse.y" + case 142: /* compound_list: newline_list list1 */ +#line 1216 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3187 "y.tab.c" +#line 3280 "y.tab.c" break; - case 141: /* list0: list1 '&' newline_list */ -#line 1158 "/usr/local/src/chet/src/bash/src/parse.y" + case 144: /* list0: list1 '&' newline_list */ +#line 1223 "/usr/local/src/chet/src/bash/src/parse.y" { if ((yyvsp[-2].command)->type == cm_connection) (yyval.command) = connect_async_list ((yyvsp[-2].command), (COMMAND *)NULL, '&'); else (yyval.command) = command_connect ((yyvsp[-2].command), (COMMAND *)NULL, '&'); } -#line 3198 "y.tab.c" +#line 3291 "y.tab.c" break; - case 143: /* list1: list1 AND_AND newline_list list1 */ -#line 1169 "/usr/local/src/chet/src/bash/src/parse.y" + case 146: /* list1: list1 AND_AND newline_list list1 */ +#line 1234 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); } -#line 3204 "y.tab.c" +#line 3297 "y.tab.c" break; - case 144: /* list1: list1 OR_OR newline_list list1 */ -#line 1171 "/usr/local/src/chet/src/bash/src/parse.y" + case 147: /* list1: list1 OR_OR newline_list list1 */ +#line 1236 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); } -#line 3210 "y.tab.c" +#line 3303 "y.tab.c" break; - case 145: /* list1: list1 '&' newline_list list1 */ -#line 1173 "/usr/local/src/chet/src/bash/src/parse.y" + case 148: /* list1: list1 '&' newline_list list1 */ +#line 1238 "/usr/local/src/chet/src/bash/src/parse.y" { if ((yyvsp[-3].command)->type == cm_connection) (yyval.command) = connect_async_list ((yyvsp[-3].command), (yyvsp[0].command), '&'); else (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '&'); } -#line 3221 "y.tab.c" +#line 3314 "y.tab.c" break; - case 146: /* list1: list1 ';' newline_list list1 */ -#line 1180 "/usr/local/src/chet/src/bash/src/parse.y" + case 149: /* list1: list1 ';' newline_list list1 */ +#line 1245 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';'); } -#line 3227 "y.tab.c" +#line 3320 "y.tab.c" break; - case 147: /* list1: list1 '\n' newline_list list1 */ -#line 1182 "/usr/local/src/chet/src/bash/src/parse.y" + case 150: /* list1: list1 '\n' newline_list list1 */ +#line 1247 "/usr/local/src/chet/src/bash/src/parse.y" { if (parser_state & PST_CMDSUBST) (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '\n'); else (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';'); } -#line 3238 "y.tab.c" +#line 3331 "y.tab.c" break; - case 148: /* list1: pipeline_command */ -#line 1189 "/usr/local/src/chet/src/bash/src/parse.y" + case 151: /* list1: pipeline_command */ +#line 1254 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3244 "y.tab.c" +#line 3337 "y.tab.c" break; - case 151: /* list_terminator: '\n' */ -#line 1197 "/usr/local/src/chet/src/bash/src/parse.y" + case 152: /* simple_list_terminator: '\n' */ +#line 1258 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.number) = '\n'; } -#line 3250 "y.tab.c" +#line 3343 "y.tab.c" break; - case 152: /* list_terminator: ';' */ -#line 1199 "/usr/local/src/chet/src/bash/src/parse.y" + case 153: /* simple_list_terminator: yacc_EOF */ +#line 1260 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.number) = yacc_EOF; } +#line 3349 "y.tab.c" + break; + + case 154: /* list_terminator: '\n' */ +#line 1264 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.number) = '\n'; } +#line 3355 "y.tab.c" + break; + + case 155: /* list_terminator: ';' */ +#line 1266 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.number) = ';'; } -#line 3256 "y.tab.c" +#line 3361 "y.tab.c" break; - case 153: /* list_terminator: yacc_EOF */ -#line 1201 "/usr/local/src/chet/src/bash/src/parse.y" + case 156: /* list_terminator: yacc_EOF */ +#line 1268 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.number) = yacc_EOF; } -#line 3262 "y.tab.c" +#line 3367 "y.tab.c" + break; + + case 157: /* nullcmd_terminator: list_terminator */ +#line 1272 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.number) = (yyvsp[0].number); } +#line 3373 "y.tab.c" + break; + + case 158: /* nullcmd_terminator: '&' */ +#line 1274 "/usr/local/src/chet/src/bash/src/parse.y" + { (yyval.number) = '&'; } +#line 3379 "y.tab.c" break; - case 156: /* simple_list: simple_list1 */ -#line 1215 "/usr/local/src/chet/src/bash/src/parse.y" + case 161: /* simple_list: simple_list1 */ +#line 1288 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); if (need_here_doc) @@ -3277,11 +3394,11 @@ INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 -> simple_li YYACCEPT; } } -#line 3281 "y.tab.c" +#line 3398 "y.tab.c" break; - case 157: /* simple_list: simple_list1 '&' */ -#line 1230 "/usr/local/src/chet/src/bash/src/parse.y" + case 162: /* simple_list: simple_list1 '&' */ +#line 1303 "/usr/local/src/chet/src/bash/src/parse.y" { if ((yyvsp[-1].command)->type == cm_connection) (yyval.command) = connect_async_list ((yyvsp[-1].command), (COMMAND *)NULL, '&'); @@ -3299,11 +3416,11 @@ INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 '&' -> simpl YYACCEPT; } } -#line 3303 "y.tab.c" +#line 3420 "y.tab.c" break; - case 158: /* simple_list: simple_list1 ';' */ -#line 1248 "/usr/local/src/chet/src/bash/src/parse.y" + case 163: /* simple_list: simple_list1 ';' */ +#line 1321 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[-1].command); if (need_here_doc) @@ -3318,127 +3435,133 @@ INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 ';' -> simpl YYACCEPT; } } -#line 3322 "y.tab.c" +#line 3439 "y.tab.c" break; - case 159: /* simple_list1: simple_list1 AND_AND newline_list simple_list1 */ -#line 1265 "/usr/local/src/chet/src/bash/src/parse.y" + case 164: /* simple_list1: simple_list1 AND_AND newline_list simple_list1 */ +#line 1338 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); } -#line 3328 "y.tab.c" +#line 3445 "y.tab.c" break; - case 160: /* simple_list1: simple_list1 OR_OR newline_list simple_list1 */ -#line 1267 "/usr/local/src/chet/src/bash/src/parse.y" + case 165: /* simple_list1: simple_list1 OR_OR newline_list simple_list1 */ +#line 1340 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); } -#line 3334 "y.tab.c" +#line 3451 "y.tab.c" break; - case 161: /* simple_list1: simple_list1 '&' simple_list1 */ -#line 1269 "/usr/local/src/chet/src/bash/src/parse.y" + case 166: /* simple_list1: simple_list1 '&' simple_list1 */ +#line 1342 "/usr/local/src/chet/src/bash/src/parse.y" { if ((yyvsp[-2].command)->type == cm_connection) (yyval.command) = connect_async_list ((yyvsp[-2].command), (yyvsp[0].command), '&'); else (yyval.command) = command_connect ((yyvsp[-2].command), (yyvsp[0].command), '&'); } -#line 3345 "y.tab.c" +#line 3462 "y.tab.c" break; - case 162: /* simple_list1: simple_list1 ';' simple_list1 */ -#line 1276 "/usr/local/src/chet/src/bash/src/parse.y" + case 167: /* simple_list1: simple_list1 ';' simple_list1 */ +#line 1349 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = command_connect ((yyvsp[-2].command), (yyvsp[0].command), ';'); } -#line 3351 "y.tab.c" +#line 3468 "y.tab.c" break; - case 163: /* simple_list1: pipeline_command */ -#line 1279 "/usr/local/src/chet/src/bash/src/parse.y" + case 168: /* simple_list1: pipeline_command */ +#line 1352 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3357 "y.tab.c" +#line 3474 "y.tab.c" break; - case 164: /* pipeline_command: pipeline */ -#line 1283 "/usr/local/src/chet/src/bash/src/parse.y" + case 169: /* pipeline_command: pipeline */ +#line 1356 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3363 "y.tab.c" +#line 3480 "y.tab.c" break; - case 165: /* pipeline_command: BANG pipeline_command */ -#line 1285 "/usr/local/src/chet/src/bash/src/parse.y" + case 170: /* pipeline_command: BANG pipeline_command */ +#line 1358 "/usr/local/src/chet/src/bash/src/parse.y" { if ((yyvsp[0].command)) (yyvsp[0].command)->flags ^= CMD_INVERT_RETURN; /* toggle */ (yyval.command) = (yyvsp[0].command); } -#line 3373 "y.tab.c" +#line 3490 "y.tab.c" break; - case 166: /* pipeline_command: timespec pipeline_command */ -#line 1291 "/usr/local/src/chet/src/bash/src/parse.y" + case 171: /* pipeline_command: timespec pipeline_command */ +#line 1364 "/usr/local/src/chet/src/bash/src/parse.y" { if ((yyvsp[0].command)) (yyvsp[0].command)->flags |= (yyvsp[-1].number); (yyval.command) = (yyvsp[0].command); } -#line 3383 "y.tab.c" +#line 3500 "y.tab.c" break; - case 167: /* pipeline_command: timespec list_terminator */ -#line 1297 "/usr/local/src/chet/src/bash/src/parse.y" + case 172: /* pipeline_command: timespec nullcmd_terminator */ +#line 1370 "/usr/local/src/chet/src/bash/src/parse.y" { ELEMENT x; + /* POSIX interp 267 */ /* Boy, this is unclean. `time' by itself can time a null command. We cheat and push a - newline back if the list_terminator was a newline - to avoid the double-newline problem (one to - terminate this, one to terminate the command) */ + newline back if the nullcmd_terminator was a + newline to avoid the double-newline problem (one + to terminate this, one to terminate the command) */ x.word = 0; x.redirect = 0; - (yyval.command) = make_simple_command (x, (COMMAND *)NULL); + (yyval.command) = make_simple_command (x, (COMMAND *)NULL, line_number); (yyval.command)->flags |= (yyvsp[-1].number); /* XXX - let's cheat and push a newline back */ if ((yyvsp[0].number) == '\n') token_to_read = '\n'; else if ((yyvsp[0].number) == ';') token_to_read = ';'; + else if ((yyvsp[0].number) == '&') + token_to_read = '&'; parser_state &= ~PST_REDIRLIST; /* make_simple_command sets this */ } -#line 3407 "y.tab.c" +#line 3527 "y.tab.c" break; - case 168: /* pipeline_command: BANG list_terminator */ -#line 1317 "/usr/local/src/chet/src/bash/src/parse.y" + case 173: /* pipeline_command: BANG nullcmd_terminator */ +#line 1393 "/usr/local/src/chet/src/bash/src/parse.y" { ELEMENT x; + /* POSIX interp 267 */ /* This is just as unclean. Posix says that `!' by itself should be equivalent to `false'. - We cheat and push a - newline back if the list_terminator was a newline - to avoid the double-newline problem (one to - terminate this, one to terminate the command) */ + We cheat and push a newline back if the + nullcmd_terminator was a newline to avoid the + double-newline problem (one to terminate this, + one to terminate the command) */ x.word = 0; x.redirect = 0; - (yyval.command) = make_simple_command (x, (COMMAND *)NULL); + (yyval.command) = make_simple_command (x, (COMMAND *)NULL, line_number); (yyval.command)->flags |= CMD_INVERT_RETURN; /* XXX - let's cheat and push a newline back */ if ((yyvsp[0].number) == '\n') token_to_read = '\n'; - if ((yyvsp[0].number) == ';') + else if ((yyvsp[0].number) == ';') token_to_read = ';'; + else if ((yyvsp[0].number) == '&') + token_to_read = '&'; parser_state &= ~PST_REDIRLIST; /* make_simple_command sets this */ } -#line 3432 "y.tab.c" +#line 3555 "y.tab.c" break; - case 169: /* pipeline: pipeline '|' newline_list pipeline */ -#line 1340 "/usr/local/src/chet/src/bash/src/parse.y" + case 174: /* pipeline: pipeline '|' newline_list pipeline */ +#line 1419 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|'); } -#line 3438 "y.tab.c" +#line 3561 "y.tab.c" break; - case 170: /* pipeline: pipeline BAR_AND newline_list pipeline */ -#line 1342 "/usr/local/src/chet/src/bash/src/parse.y" + case 175: /* pipeline: pipeline BAR_AND newline_list pipeline */ +#line 1421 "/usr/local/src/chet/src/bash/src/parse.y" { /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */ COMMAND *tc; @@ -3461,41 +3584,41 @@ INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 ';' -> simpl (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|'); } -#line 3465 "y.tab.c" +#line 3588 "y.tab.c" break; - case 171: /* pipeline: command */ -#line 1365 "/usr/local/src/chet/src/bash/src/parse.y" + case 176: /* pipeline: command */ +#line 1444 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3471 "y.tab.c" +#line 3594 "y.tab.c" break; - case 172: /* timespec: TIME */ -#line 1369 "/usr/local/src/chet/src/bash/src/parse.y" + case 177: /* timespec: TIME */ +#line 1448 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.number) = CMD_TIME_PIPELINE; } -#line 3477 "y.tab.c" +#line 3600 "y.tab.c" break; - case 173: /* timespec: TIME TIMEOPT */ -#line 1371 "/usr/local/src/chet/src/bash/src/parse.y" + case 178: /* timespec: TIME TIMEOPT */ +#line 1450 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } -#line 3483 "y.tab.c" +#line 3606 "y.tab.c" break; - case 174: /* timespec: TIME TIMEIGN */ -#line 1373 "/usr/local/src/chet/src/bash/src/parse.y" + case 179: /* timespec: TIME TIMEIGN */ +#line 1452 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } -#line 3489 "y.tab.c" +#line 3612 "y.tab.c" break; - case 175: /* timespec: TIME TIMEOPT TIMEIGN */ -#line 1375 "/usr/local/src/chet/src/bash/src/parse.y" + case 180: /* timespec: TIME TIMEOPT TIMEIGN */ +#line 1454 "/usr/local/src/chet/src/bash/src/parse.y" { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } -#line 3495 "y.tab.c" +#line 3618 "y.tab.c" break; -#line 3499 "y.tab.c" +#line 3622 "y.tab.c" default: break; } @@ -3688,7 +3811,7 @@ yyreturnlab: return yyresult; } -#line 1377 "/usr/local/src/chet/src/bash/src/parse.y" +#line 1456 "/usr/local/src/chet/src/bash/src/parse.y" /* Initial size to allocate for tokens, and the @@ -3706,13 +3829,18 @@ yyreturnlab: # define expanding_alias() 0 #endif +#if defined (DPAREN_ARITHMETIC) +# define parsing_dparen() (pushed_string_list && (pushed_string_list->flags & PSH_DPAREN)) +#else +# define parsing_dparen() 0 +#endif + /* Global var is non-zero when end of file has been reached. */ int EOF_Reached = 0; #ifdef DEBUG static void -debug_parser (i) - int i; +debug_parser (int i) { #if YYDEBUG != 0 yydebug = i; @@ -3732,7 +3860,7 @@ debug_parser (i) /* Unconditionally returns end-of-file. */ int -return_EOF () +return_EOF (void) { return (EOF); } @@ -3744,7 +3872,7 @@ BASH_INPUT bash_input; /* Set all of the fields in BASH_INPUT to NULL. Free bash_input.name if it is non-null, avoiding a memory leak. */ void -initialize_bash_input () +initialize_bash_input (void) { bash_input.type = st_none; FREE (bash_input.name); @@ -3758,12 +3886,7 @@ initialize_bash_input () /* Set the contents of the current bash input stream from GET, UNGET, TYPE, NAME, and LOCATION. */ void -init_yy_io (get, unget, type, name, location) - sh_cget_func_t *get; - sh_cunget_func_t *unget; - enum stream_type type; - const char *name; - INPUT_STREAM location; +init_yy_io (sh_cget_func_t *get, sh_cunget_func_t *unget, enum stream_type type, const char *name, INPUT_STREAM location) { bash_input.type = type; FREE (bash_input.name); @@ -3780,31 +3903,36 @@ init_yy_io (get, unget, type, name, location) } char * -yy_input_name () +yy_input_name (void) { return (bash_input.name ? bash_input.name : "stdin"); } /* Call this to get the next character of input. */ static int -yy_getc () +yy_getc (void) { +#ifndef __MSYS__ return (*(bash_input.getter)) (); +#else + int c; + /* skip \r entirely on MSYS */ + while ((c = (*(bash_input.getter)) ()) == '\r'); + return c; +#endif } /* Call this to unget C. That is, to make C the next character to be read. */ static int -yy_ungetc (c) - int c; +yy_ungetc (int c) { return (*(bash_input.ungetter)) (c); } -#if defined (BUFFERED_INPUT) #ifdef INCLUDE_UNUSED int -input_file_descriptor () +input_file_descriptor (void) { switch (bash_input.type) { @@ -3818,7 +3946,6 @@ input_file_descriptor () } } #endif -#endif /* BUFFERED_INPUT */ /* **************************************************************** */ /* */ @@ -3832,10 +3959,10 @@ char *current_readline_line = (char *)NULL; int current_readline_line_index = 0; static int -yy_readline_get () +yy_readline_get (void) { SigHandler *old_sigint; - int line_len; + size_t line_len; unsigned char c; if (current_readline_line == 0) @@ -3895,8 +4022,7 @@ yy_readline_get () } static int -yy_readline_unget (c) - int c; +yy_readline_unget (int c) { if (current_readline_line_index && current_readline_line) current_readline_line[--current_readline_line_index] = c; @@ -3904,7 +4030,7 @@ yy_readline_unget (c) } void -with_input_from_stdin () +with_input_from_stdin (void) { INPUT_STREAM location; @@ -3921,7 +4047,7 @@ with_input_from_stdin () embed a newline in the middle of the line it collects, which the parser will interpret as a line break and command delimiter. */ int -parser_will_prompt () +parser_will_prompt (void) { return (current_readline_line == 0 || current_readline_line[current_readline_line_index] == 0); } @@ -3929,7 +4055,7 @@ parser_will_prompt () #else /* !READLINE */ void -with_input_from_stdin () +with_input_from_stdin (void) { with_input_from_stream (stdin, "stdin"); } @@ -3942,10 +4068,10 @@ with_input_from_stdin () /* **************************************************************** */ static int -yy_string_get () +yy_string_get (void) { - register char *string; - register unsigned char c; + char *string; + unsigned char c; string = bash_input.location.string; @@ -3961,17 +4087,17 @@ yy_string_get () } static int -yy_string_unget (c) - int c; +yy_string_unget (int c) { + if (c == EOF && *bash_input.location.string == '\0') + return EOF; + *(--bash_input.location.string) = c; return (c); } void -with_input_from_string (string, name) - char *string; - const char *name; +with_input_from_string (char *string, const char *name) { INPUT_STREAM location; @@ -3985,7 +4111,7 @@ with_input_from_string (string, name) that number of characters, so it points to the last character actually consumed by the parser. */ void -rewind_input_string () +rewind_input_string (void) { int xchars; @@ -4019,7 +4145,7 @@ rewind_input_string () We will need to restart it ourselves. */ static int -yy_stream_get () +yy_stream_get (void) { int result; @@ -4034,16 +4160,13 @@ yy_stream_get () } static int -yy_stream_unget (c) - int c; +yy_stream_unget (int c) { return (ungetc_with_restart (c, bash_input.location.file)); } void -with_input_from_stream (stream, name) - FILE *stream; - const char *name; +with_input_from_stream (FILE *stream, const char *name) { INPUT_STREAM location; @@ -4055,9 +4178,7 @@ typedef struct stream_saver { struct stream_saver *next; BASH_INPUT bash_input; int line; -#if defined (BUFFERED_INPUT) BUFFERED_STREAM *bstream; -#endif /* BUFFERED_INPUT */ } STREAM_SAVER; /* The globally known line number. */ @@ -4074,20 +4195,17 @@ static int cond_token; STREAM_SAVER *stream_list = (STREAM_SAVER *)NULL; void -push_stream (reset_lineno) - int reset_lineno; +push_stream (int reset_lineno) { STREAM_SAVER *saver = (STREAM_SAVER *)xmalloc (sizeof (STREAM_SAVER)); xbcopy ((char *)&bash_input, (char *)&(saver->bash_input), sizeof (BASH_INPUT)); -#if defined (BUFFERED_INPUT) saver->bstream = (BUFFERED_STREAM *)NULL; /* If we have a buffered stream, clear out buffers[fd]. */ if (bash_input.type == st_bstream && bash_input.location.buffered_fd >= 0) saver->bstream = set_buffered_stream (bash_input.location.buffered_fd, (BUFFERED_STREAM *)NULL); -#endif /* BUFFERED_INPUT */ saver->line = line_number; bash_input.name = (char *)NULL; @@ -4099,7 +4217,7 @@ push_stream (reset_lineno) } void -pop_stream () +pop_stream (void) { if (!stream_list) EOF_Reached = 1; @@ -4116,7 +4234,6 @@ pop_stream () saver->bash_input.name, saver->bash_input.location); -#if defined (BUFFERED_INPUT) /* If we have a buffered stream, restore buffers[fd]. */ /* If the input file descriptor was changed while this was on the save stack, update the buffered fd to the new file descriptor and @@ -4136,7 +4253,6 @@ pop_stream () /* XXX could free buffered stream returned as result here. */ set_buffered_stream (bash_input.location.buffered_fd, saver->bstream); } -#endif /* BUFFERED_INPUT */ line_number = saver->line; @@ -4147,8 +4263,7 @@ pop_stream () /* Return 1 if a stream of type TYPE is saved on the stack. */ int -stream_on_stack (type) - enum stream_type type; +stream_on_stack (enum stream_type type) { register STREAM_SAVER *s; @@ -4160,21 +4275,21 @@ stream_on_stack (type) /* Save the current token state and return it in a malloced array. */ int * -save_token_state () +save_token_state (void) { int *ret; - ret = (int *)xmalloc (4 * sizeof (int)); + ret = (int *)xmalloc (5 * sizeof (int)); ret[0] = last_read_token; ret[1] = token_before_that; ret[2] = two_tokens_ago; ret[3] = current_token; + ret[4] = token_to_read; return ret; } void -restore_token_state (ts) - int *ts; +restore_token_state (int *ts) { if (ts == 0) return; @@ -4182,6 +4297,7 @@ restore_token_state (ts) token_before_that = ts[1]; two_tokens_ago = ts[2]; current_token = ts[3]; + token_to_read = ts[4]; } /* @@ -4232,10 +4348,7 @@ STRING_SAVER *pushed_string_list = (STRING_SAVER *)NULL; * into S; it is saved and used to prevent infinite recursive expansion. */ static void -push_string (s, expand, ap) - char *s; - int expand; - alias_t *ap; +push_string (char *s, int expand, alias_t *ap) { STRING_SAVER *temp = (STRING_SAVER *)xmalloc (sizeof (STRING_SAVER)); @@ -4263,9 +4376,6 @@ push_string (s, expand, ap) shell_input_line_size = shell_input_line_len = STRLEN (s); shell_input_line_index = 0; shell_input_line_terminator = '\0'; -#if 0 - parser_state &= ~PST_ALEXPNEXT; /* XXX */ -#endif set_line_mbstate (); } @@ -4277,7 +4387,7 @@ push_string (s, expand, ap) * and needs to return to the original input line. */ static void -pop_string () +pop_string (void) { STRING_SAVER *t; @@ -4291,8 +4401,6 @@ pop_string () #if defined (ALIAS) if (pushed_string_list->expand_alias) parser_state |= PST_ALEXPNEXT; - else - parser_state &= ~PST_ALEXPNEXT; #endif t = pushed_string_list; @@ -4309,7 +4417,7 @@ pop_string () } static void -free_string_list () +free_string_list (void) { register STRING_SAVER *t, *t1; @@ -4328,7 +4436,7 @@ free_string_list () } void -free_pushed_string_input () +free_pushed_string_input (void) { #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) free_string_list (); @@ -4336,13 +4444,13 @@ free_pushed_string_input () } int -parser_expanding_alias () +parser_expanding_alias (void) { return (expanding_alias ()); } void -parser_save_alias () +parser_save_alias (void) { #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) push_string ((char *)NULL, 0, (alias_t *)NULL); @@ -4353,7 +4461,7 @@ parser_save_alias () } void -parser_restore_alias () +parser_restore_alias (void) { #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) if (pushed_string_list) @@ -4367,8 +4475,7 @@ parser_restore_alias () /* Before freeing AP, make sure that there aren't any cases of pointer aliasing that could cause us to reference freed memory later on. */ void -clear_string_list_expander (ap) - alias_t *ap; +clear_string_list_expander (alias_t *ap) { register STRING_SAVER *t; @@ -4381,7 +4488,7 @@ clear_string_list_expander (ap) #endif void -clear_shell_input_line () +clear_shell_input_line (void) { if (shell_input_line) shell_input_line[shell_input_line_index = 0] = '\0'; @@ -4392,11 +4499,10 @@ clear_shell_input_line () is non-zero, we remove unquoted \<newline> pairs. This is used by read_secondary_line to read here documents. */ static char * -read_a_line (remove_quoted_newline) - int remove_quoted_newline; +read_a_line (int remove_quoted_newline) { static char *line_buffer = (char *)NULL; - static int buffer_size = 0; + static size_t buffer_size = 0; int indx, c, peekc, pass_next; #if defined (READLINE) @@ -4412,7 +4518,8 @@ read_a_line (remove_quoted_newline) /* Allow immediate exit if interrupted during input. */ QUIT; - c = yy_getc (); + /* If we're reading the here-document from an alias, use shell_getc */ + c = heredoc_string ? shell_getc (0) : yy_getc (); /* Ignore null bytes in input. */ if (c == 0) @@ -4424,7 +4531,13 @@ read_a_line (remove_quoted_newline) if (interactive && bash_input.type == st_stream) clearerr (stdin); if (indx == 0) - return ((char *)NULL); + { + /* if we use shell_getc, that increments line_number on eof */ + if (heredoc_string) + line_number--; + + return ((char *)NULL); + } c = '\n'; } @@ -4446,15 +4559,36 @@ read_a_line (remove_quoted_newline) else if (c == '\\' && remove_quoted_newline) { QUIT; - peekc = yy_getc (); + /* If we're reading the here-document from an alias, use shell_getc */ + peekc = heredoc_string ? shell_getc (0) : yy_getc (); if (peekc == '\n') { - line_number++; + if (heredoc_string == 0) + line_number++; continue; /* Make the unquoted \<newline> pair disappear. */ } + else if (peekc == EOF) + { + /* Don't push EOF back. */ +#if 1 + /* Leave this in for now, relies on how the expansion code + treats an unescaped backslash at the end of a word. */ + RESIZE_MALLOCED_BUFFER (line_buffer, indx, 2, buffer_size, 128); + if (expanding_alias() == 0 && + (bash_input.type == st_string || bash_input.type == st_bstream || + (interactive == 0 && bash_input.type == st_stream))) + line_buffer[indx++] = '\\'; /* like below in shell_getc */ +#endif + line_buffer[indx++] = c; + c = '\n'; /* force break below */ + } else { - yy_ungetc (peekc); + if (heredoc_string) + shell_ungetc (peekc); + else + yy_ungetc (peekc); + pass_next = 1; line_buffer[indx++] = c; /* Preserve the backslash. */ } @@ -4483,11 +4617,9 @@ read_a_line (remove_quoted_newline) newlines quoted with backslashes while reading the line. It is non-zero unless the delimiter of the here document was quoted. */ char * -read_secondary_line (remove_quoted_newline) - int remove_quoted_newline; +read_secondary_line (int remove_quoted_newline) { char *ret; - int n, c; prompt_string_pointer = &ps2_prompt; if (SHOULD_PROMPT ()) @@ -4631,29 +4763,19 @@ static struct dstack temp_dstack = { (char *)NULL, 0, 0 }; read the next line. This is called by read_token when the shell is processing normal command input. */ -/* This implements one-character lookahead/lookbehind across physical input - lines, to avoid something being lost because it's pushed back with - shell_ungetc when we're at the start of a line. */ -static int eol_ungetc_lookahead = 0; - static int unquoted_backslash = 0; static int -shell_getc (remove_quoted_newline) - int remove_quoted_newline; +shell_getc (int remove_quoted_newline) { - register int i; + int i; int c, truncating, last_was_backslash; unsigned char uc; QUIT; last_was_backslash = 0; - if (sigwinch_received) - { - sigwinch_received = 0; - get_new_window_size (0, (int *)0, (int *)0); - } + CHECK_WINCH; if (eol_ungetc_lookahead) { @@ -4765,14 +4887,32 @@ shell_getc (remove_quoted_newline) else RESIZE_MALLOCED_BUFFER (shell_input_line, i, 2, shell_input_line_size, 256); +#ifdef __MSYS__ + if (c == '\r') + continue; +#endif + if (c == EOF) { - if (bash_input.type == st_stream) + if (interactive && bash_input.type == st_stream) clearerr (stdin); if (i == 0) shell_input_line_terminator = EOF; + if (bash_input.type == st_bstream && fd_berror (default_buffered_input)) + shell_input_line_terminator = READERR; + else if (interactive_shell == 0 && bash_input.type == st_stream && ferror (stdin)) + shell_input_line_terminator = READERR; + + /* We want to make read errors cancel execution of any partial + line, so we set i = 0 if shell_input_line_terminator == READERR. */ + /* XXX TAG: bash-5.3 austingroup interp 1629 */ +#if defined (FATAL_READERROR) + if (shell_input_line_terminator == READERR) + i = 0; /* no-op for now */ +#endif + shell_input_line[i] = '\0'; break; } @@ -4864,7 +5004,8 @@ shell_getc (remove_quoted_newline) reason for the test against shell_eof_token, which is set to a right paren when parsing the contents of command substitutions. */ if (echo_input_at_read && (shell_input_line[0] || - shell_input_line_terminator != EOF) && + (shell_input_line_terminator != EOF && + shell_input_line_terminator != READERR)) && shell_eof_token == 0) fprintf (stderr, "%s\n", shell_input_line); } @@ -4879,9 +5020,9 @@ shell_getc (remove_quoted_newline) /* Add the newline to the end of this string, iff the string does not already end in an EOF character. */ - if (shell_input_line_terminator != EOF) + if (shell_input_line_terminator != EOF && shell_input_line_terminator != READERR) { - if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) + if (shell_input_line_size + 3 < SIZE_MAX && (shell_input_line_len+3 > shell_input_line_size)) shell_input_line = (char *)xrealloc (shell_input_line, 1 + (shell_input_line_size += 2)); @@ -4891,6 +5032,10 @@ shell_getc (remove_quoted_newline) word expansion). */ if (bash_input.type == st_string && expanding_alias() == 0 && last_was_backslash && c == EOF && remove_quoted_newline) shell_input_line[shell_input_line_len] = '\\'; + else if (bash_input.type == st_bstream && expanding_alias() == 0 && last_was_backslash && c == EOF && remove_quoted_newline) + shell_input_line[shell_input_line_len] = '\\'; + else if (interactive == 0 && bash_input.type == st_stream && expanding_alias() == 0 && last_was_backslash && c == EOF && remove_quoted_newline) + shell_input_line[shell_input_line_len] = '\\'; else shell_input_line[shell_input_line_len] = '\n'; shell_input_line[shell_input_line_len + 1] = '\0'; @@ -4939,12 +5084,13 @@ next_alias_char: return the space that will delimit the token and postpone the pop_string. This set of conditions duplicates what used to be in mk_alexpansion () below, with the addition that we don't add a space if we're currently - reading a quoted string or in a shell comment. */ + reading a quoted string or in a shell comment or here-document. */ #ifndef OLD_ALIAS_HACK if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE && pushed_string_list->flags != PSH_DPAREN && (parser_state & PST_COMMENT) == 0 && (parser_state & PST_ENDALIAS) == 0 && /* only once */ + heredoc_string == 0 && shell_input_line_index > 0 && shellblank (shell_input_line[shell_input_line_index-1]) == 0 && shell_input_line[shell_input_line_index-1] != '\n' && @@ -4955,6 +5101,7 @@ next_alias_char: parser_state |= PST_ENDALIAS; /* We need to do this to make sure last_shell_getc_is_singlebyte returns true, since we are returning a single-byte space. */ +#if defined (HANDLE_MULTIBYTE) if (shell_input_line_index == shell_input_line_len && last_shell_getc_is_singlebyte == 0) { #if 0 @@ -4968,6 +5115,7 @@ next_alias_char: shell_input_line_property[shell_input_line_index - 1] = 1; #endif } +#endif return ' '; /* END_ALIAS */ } #endif @@ -5015,6 +5163,16 @@ pop_alias: if (uc == 0 && shell_input_line_terminator == EOF) return ((shell_input_line_index != 0) ? '\n' : EOF); + else if (uc == 0 && shell_input_line_terminator == READERR) + { +#if defined (FATAL_READERROR) + report_error (_("script file read error: %s"), strerror (errno)); + exit_shell (128); /* POSIX mandated error status */ +#else + /* Treat read errors like EOF here. */ + return ((shell_input_line_index != 0) ? '\n' : EOF); +#endif + } #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) /* We already know that we are not parsing an alias expansion because of the @@ -5047,8 +5205,7 @@ pop_alias: to change when manipulating shell_input_line. The define for last_shell_getc_is_singlebyte should take care of it, though. */ static void -shell_ungetc (c) - int c; +shell_ungetc (int c) { if (shell_input_line && shell_input_line_index) shell_input_line[--shell_input_line_index] = c; @@ -5058,8 +5215,7 @@ shell_ungetc (c) /* Push S back into shell_input_line; updating shell_input_line_index */ void -shell_ungets (s) - char *s; +shell_ungets (char *s) { size_t slen, chars_left; @@ -5111,7 +5267,7 @@ shell_ungets (s) } char * -parser_remaining_input () +parser_remaining_input (void) { if (shell_input_line == 0) return 0; @@ -5123,7 +5279,7 @@ parser_remaining_input () #ifdef INCLUDE_UNUSED /* Back the input pointer up by one, effectively `ungetting' a character. */ static void -shell_ungetchar () +shell_ungetchar (void) { if (shell_input_line && shell_input_line_index) shell_input_line_index--; @@ -5132,9 +5288,8 @@ shell_ungetchar () /* Discard input until CHARACTER is seen, then push that character back onto the input stream. */ -static void -discard_until (character) - int character; +static int +discard_until (int character) { int c; @@ -5143,24 +5298,22 @@ discard_until (character) if (c != EOF) shell_ungetc (c); + return (c); } void -execute_variable_command (command, vname) - char *command, *vname; +execute_variable_command (const char *command, const char *vname) { char *last_lastarg; sh_parser_state_t ps; save_parser_state (&ps); - last_lastarg = get_string_value ("_"); - if (last_lastarg) - last_lastarg = savestring (last_lastarg); + last_lastarg = save_lastarg (); parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE); restore_parser_state (&ps); - bind_variable ("_", last_lastarg, 0); + bind_lastarg (last_lastarg); FREE (last_lastarg); if (token_to_read == '\n') /* reset_parser was called */ @@ -5168,8 +5321,7 @@ execute_variable_command (command, vname) } void -push_token (x) - int x; +push_token (int x) { two_tokens_ago = token_before_that; token_before_that = last_read_token; @@ -5194,7 +5346,7 @@ static size_t token_buffer_size; /* Function for yyparse to call. yylex keeps track of the last two tokens read, and calls read_token. */ static int -yylex () +yylex (void) { if (interactive && (current_token == 0 || current_token == '\n')) { @@ -5244,8 +5396,7 @@ static int esacs_needed_count; static int expecting_in_token; static void -push_heredoc (r) - REDIRECT *r; +push_heredoc (REDIRECT *r) { if (need_here_doc >= HEREDOC_MAX) { @@ -5259,7 +5410,7 @@ push_heredoc (r) } void -gather_here_documents () +gather_here_documents (void) { int r; @@ -5268,6 +5419,7 @@ gather_here_documents () while (need_here_doc > 0) { parser_state |= PST_HEREDOC; + heredoc_string = expanding_alias () && (shell_input_line_index < shell_input_line_len); make_here_document (redir_stack[r++], line_number); parser_state &= ~PST_HEREDOC; need_here_doc--; @@ -5336,6 +5488,12 @@ static int open_brace_count; open_brace_count++; \ else if (word_token_alist[i].token == '}' && open_brace_count) \ open_brace_count--; \ +\ + if (last_read_token == IF || last_read_token == WHILE || last_read_token == UNTIL) \ + set_word_top (last_read_token); \ +\ + if (posixly_correct) \ + parser_state &= ~PST_ALEXPNEXT; \ return (word_token_alist[i].token); \ } \ } \ @@ -5357,10 +5515,9 @@ static int open_brace_count; In a pattern list in a case statement (parser_state & PST_CASEPAT). */ static char * -mk_alexpansion (s) - char *s; +mk_alexpansion (const char *s) { - int l; + size_t l; char *r; l = strlen (s); @@ -5380,18 +5537,12 @@ mk_alexpansion (s) } static int -alias_expand_token (tokstr) - char *tokstr; +alias_expand_token (const char *tokstr) { char *expanded; alias_t *ap; -#if 0 - if (((parser_state & PST_ALEXPNEXT) || command_token_position (last_read_token)) && - (parser_state & PST_CASEPAT) == 0) -#else if ((parser_state & PST_ALEXPNEXT) || assignment_acceptable (last_read_token)) -#endif { ap = find_alias (tokstr); @@ -5423,7 +5574,7 @@ alias_expand_token (tokstr) #endif /* ALIAS */ static int -time_command_acceptable () +time_command_acceptable (void) { #if defined (COMMAND_TIMING) int i; @@ -5466,6 +5617,7 @@ time_command_acceptable () case TIMEOPT: /* time -p time pipeline */ case TIMEIGN: /* time -p -- ... */ case DOLPAREN: + case DOLBRACE: return 1; default: return 0; @@ -5502,8 +5654,7 @@ time_command_acceptable () */ static int -special_case_tokens (tokstr) - char *tokstr; +special_case_tokens (const char *tokstr) { /* Posix grammar rule 6 */ if ((last_read_token == WORD) && @@ -5627,7 +5778,7 @@ special_case_tokens (tokstr) /* Called from shell.c when Control-C is typed at top level. Or by the error rule at top level. */ void -reset_parser () +reset_parser (void) { dstack.delimiter_depth = 0; /* No delimiters found so far. */ open_brace_count = 0; @@ -5666,23 +5817,30 @@ reset_parser () redir_stack[0] = 0; esacs_needed_count = expecting_in_token = 0; + simplecmd_lineno = line_number; + current_token = '\n'; /* XXX */ last_read_token = '\n'; token_to_read = '\n'; } void -reset_readahead_token () +reset_readahead_token (void) { if (token_to_read == '\n') token_to_read = 0; } +void +unset_readahead_token (void) +{ + token_to_read = 0; +} + /* Read the next token. Command can be READ (normal operation) or RESET (to normalize state). */ static int -read_token (command) - int command; +read_token (int command) { int character; /* Current character. */ int peek_char; /* Temporary look-ahead character. */ @@ -5703,12 +5861,14 @@ read_token (command) word_desc_to_read = (WORD_DESC *)NULL; } token_to_read = 0; + /* XXX - PST_ALEXPNEXT? */ return (result); } #if defined (COND_COMMAND) if ((parser_state & (PST_CONDCMD|PST_CONDEXPR)) == PST_CONDCMD) { + parser_state &= ~PST_CMDBLTIN; cond_lineno = line_number; parser_state |= PST_CONDEXPR; yylval.command = parse_cond_command (); @@ -5752,7 +5912,13 @@ read_token (command) { /* A comment. Discard until EOL or EOF, and then return a newline. */ parser_state |= PST_COMMENT; - discard_until ('\n'); + character = discard_until ('\n'); + if (character == EOF) + { + parser_state &= ~PST_COMMENT; + EOF_Reached = 1; + return (yacc_EOF); /* XXX */ + } shell_getc (0); parser_state &= ~PST_COMMENT; character = '\n'; /* this will take the next if statement and return. */ @@ -5770,6 +5936,10 @@ read_token (command) #endif /* ALIAS */ parser_state &= ~PST_ASSIGNOK; + parser_state &= ~PST_CMDBLTIN; + + if (last_read_token == IF || last_read_token == WHILE || last_read_token == UNTIL) + set_word_top (last_read_token); return (character); } @@ -5781,13 +5951,13 @@ read_token (command) if MBTEST(shellmeta (character)) { #if defined (ALIAS) - /* Turn off alias tokenization iff this character sequence would - not leave us ready to read a command. */ - if (character == '<' || character == '>') - parser_state &= ~PST_ALEXPNEXT; + /* Turn off alias tokenization, we will perform alias expansion on the + next command word if it's one where a command word is acceptable. */ + parser_state &= ~PST_ALEXPNEXT; #endif /* ALIAS */ parser_state &= ~PST_ASSIGNOK; + parser_state &= ~PST_CMDBLTIN; /* If we are parsing a command substitution and we have read a character that marks the end of it, don't bother to skip over quoted newlines @@ -5822,10 +5992,6 @@ read_token (command) case ';': parser_state |= PST_CASEPAT; -#if defined (ALIAS) - parser_state &= ~PST_ALEXPNEXT; -#endif /* ALIAS */ - peek_char = shell_getc (1); if MBTEST(peek_char == '&') return (SEMI_SEMI_AND); @@ -5875,9 +6041,6 @@ read_token (command) else if MBTEST(character == ';' && peek_char == '&') { parser_state |= PST_CASEPAT; -#if defined (ALIAS) - parser_state &= ~PST_ALEXPNEXT; -#endif /* ALIAS */ return (SEMI_AND); } @@ -5889,9 +6052,7 @@ read_token (command) if MBTEST(character == ')' && last_read_token == '(' && token_before_that == WORD) { parser_state |= PST_ALLOWOPNBRC; -#if defined (ALIAS) - parser_state &= ~PST_ALEXPNEXT; -#endif /* ALIAS */ + save_dstart = function_dstart; function_dstart = line_number; } @@ -5917,7 +6078,10 @@ read_token (command) /* Hack <&- (close stdin) case. Also <&N- (dup and close). */ if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND)) - return (character); + { + parser_state &= ~PST_CMDBLTIN; + return (character); + } tokword: /* Okay, if we got this far, we have to read a word. Read one, @@ -5986,16 +6150,15 @@ tokword: static char matched_pair_error; +/* QC == `"' if this construct is within double quotes */ static char * -parse_matched_pair (qc, open, close, lenp, flags) - int qc; /* `"' if this construct is within double quotes */ - int open, close; - int *lenp, flags; +parse_matched_pair (int qc, int open, int close, size_t *lenp, int flags) { - int count, ch, prevch, tflags; - int nestlen, ttranslen, start_lineno; + int count, ch, prevch, tflags, start_lineno; + size_t nestlen, ttranslen; char *ret, *nestret, *ttrans; - int retind, retsize, rflags; + int rflags; + size_t retsize, retind; int dolbrace_state; dolbrace_state = (flags & P_DOLBRACE) ? DOLBRACE_PARAM : 0; @@ -6023,9 +6186,10 @@ parse_matched_pair (qc, open, close, lenp, flags) if (ch == EOF) { free (ret); - parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close); + if ((parser_state & PST_NOERROR) == 0) + parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close); EOF_Reached = 1; /* XXX */ - parser_state |= PST_NOERROR; /* avoid redundant error message */ + parser_state |= PST_NOERROR; /* avoid redundant error message */ return (&matched_pair_error); } @@ -6064,9 +6228,7 @@ parse_matched_pair (qc, open, close, lenp, flags) continue; } - RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64); - if MBTEST(ch == CTLESC) - ret[retind++] = CTLESC; + RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64); ret[retind++] = ch; continue; } @@ -6091,7 +6253,7 @@ parse_matched_pair (qc, open, close, lenp, flags) count--; /* handle nested ${...} specially. */ else if MBTEST(open != close && (tflags & LEX_WASDOL) && open == '{' && ch == open) /* } */ - count++; + count++; /* XXX */ else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && ch == open) /* nested begin */ count++; @@ -6214,7 +6376,6 @@ parse_matched_pair (qc, open, close, lenp, flags) /* Locale expand $"..." here. */ /* PST_NOEXPAND */ ttrans = locale_expand (nestret, 0, nestlen - 1, start_lineno, &ttranslen); - free (nestret); /* If we're supposed to single-quote translated strings, check whether the translated result is different from @@ -6222,6 +6383,7 @@ parse_matched_pair (qc, open, close, lenp, flags) if (singlequote_translations && ((nestlen - 1) != ttranslen || STREQN (nestret, ttrans, ttranslen) == 0)) { + free (nestret); if ((rflags & P_DQUOTE) == 0) nestret = sh_single_quote (ttrans); else if ((rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2) && (flags & P_DOLBRACE)) @@ -6231,7 +6393,10 @@ parse_matched_pair (qc, open, close, lenp, flags) nestret = sh_backslash_quote_for_double_quotes (ttrans, 0); } else - nestret = sh_mkdoublequoted (ttrans, ttranslen, 0); + { + free (nestret); + nestret = sh_mkdoublequoted (ttrans, ttranslen, 0); + } free (ttrans); nestlen = strlen (nestret); retind -= 2; /* back up before the $" */ @@ -6242,10 +6407,21 @@ parse_matched_pair (qc, open, close, lenp, flags) FREE (nestret); } else if ((flags & (P_ARRAYSUB|P_DOLBRACE)) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */ + /* This also handles ${ command; } */ goto parse_dollar_word; else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '(') /*)*/ /* $() inside $(( ))/$[ ] */ goto parse_dollar_word; + else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '{') /*)*/ + /* ${} inside $(( ))/$[ ] */ + { + int npeek; + npeek = shell_getc (1); + shell_ungetc (npeek); + if (FUNSUB_CHAR (npeek)) + goto parse_dollar_word; + } + #if defined (PROCESS_SUBSTITUTION) /* XXX - technically this should only be recognized at the start of a word */ @@ -6274,7 +6450,16 @@ parse_dollar_word: if (ch == '(') /* ) */ nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE); else if (ch == '{') /* } */ - nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags); + { + int npeek; + + npeek = shell_getc (1); + shell_ungetc (npeek); + if (FUNSUB_CHAR (npeek)) + nestret = parse_comsub (0, '{', '}', &nestlen, rflags|P_COMMAND); + else + nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags); + } else if (ch == '[') /* ] */ nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags|P_ARITH); @@ -6304,8 +6489,7 @@ parse_dollar_word: #if defined (DEBUG) static void -dump_tflags (flags) - int flags; +dump_tflags (int flags) { int f; @@ -6390,20 +6574,166 @@ dump_tflags (flags) fprintf (stderr, "\n"); fflush (stderr); } + +static void +dump_pflags (int flags) +{ + int f; + + f = flags; + fprintf (stderr, "%d -> ", f); + if (f & PST_CASEPAT) + { + f &= ~PST_CASEPAT; + fprintf (stderr, "PST_CASEPAT%s", f ? "|" : ""); + } + if (f & PST_ALEXPNEXT) + { + f &= ~PST_ALEXPNEXT; + fprintf (stderr, "PST_ALEXPNEXT%s", f ? "|" : ""); + } + if (f & PST_ALLOWOPNBRC) + { + f &= ~PST_ALLOWOPNBRC; + fprintf (stderr, "PST_ALLOWOPNBRC%s", f ? "|" : ""); + } + if (f & PST_NEEDCLOSBRC) + { + f &= ~PST_NEEDCLOSBRC; + fprintf (stderr, "PST_NEEDCLOSBRC%s", f ? "|" : ""); + } + if (f & PST_DBLPAREN) + { + f &= ~PST_DBLPAREN; + fprintf (stderr, "PST_DBLPAREN%s", f ? "|" : ""); + } + if (f & PST_SUBSHELL) + { + f &= ~PST_SUBSHELL; + fprintf (stderr, "PST_SUBSHELL%s", f ? "|" : ""); + } + if (f & PST_CMDSUBST) + { + f &= ~PST_CMDSUBST; + fprintf (stderr, "PST_CMDSUBST%s", f ? "|" : ""); + } + if (f & PST_FUNSUBST) + { + f &= ~PST_FUNSUBST; + fprintf (stderr, "PST_FUNSUBST%s", f ? "|" : ""); + } + if (f & PST_CASESTMT) + { + f &= ~PST_CASESTMT; + fprintf (stderr, "PST_CASESTMT%s", f ? "|" : ""); + } + if (f & PST_CONDCMD) + { + f &= ~PST_CONDCMD; + fprintf (stderr, "PST_CONDCMD%s", f ? "|" : ""); + } + if (f & PST_CONDEXPR) + { + f &= ~PST_CONDEXPR; + fprintf (stderr, "PST_CONDEXPR%s", f ? "|" : ""); + } + if (f & PST_ARITHFOR) + { + f &= ~PST_ARITHFOR; + fprintf (stderr, "PST_ARITHFOR%s", f ? "|" : ""); + } + if (f & PST_ALEXPAND) + { + f &= ~PST_ALEXPAND; + fprintf (stderr, "PST_ALEXPAND%s", f ? "|" : ""); + } + if (f & PST_EXTPAT) + { + f &= ~PST_EXTPAT; + fprintf (stderr, "PST_EXTPAT%s", f ? "|" : ""); + } + if (f & PST_COMPASSIGN) + { + f &= ~PST_COMPASSIGN; + fprintf (stderr, "PST_COMPASSIGN%s", f ? "|" : ""); + } + if (f & PST_ASSIGNOK) + { + f &= ~PST_ASSIGNOK; + fprintf (stderr, "PST_ASSIGNOK%s", f ? "|" : ""); + } + if (f & PST_EOFTOKEN) + { + f &= ~PST_EOFTOKEN; + fprintf (stderr, "PST_EOFTOKEN%s", f ? "|" : ""); + } + if (f & PST_REGEXP) + { + f &= ~PST_REGEXP; + fprintf (stderr, "PST_REGEXP%s", f ? "|" : ""); + } + if (f & PST_HEREDOC) + { + f &= ~PST_HEREDOC; + fprintf (stderr, "PST_HEREDOC%s", f ? "|" : ""); + } + if (f & PST_REPARSE) + { + f &= ~PST_REPARSE; + fprintf (stderr, "PST_REPARSE%s", f ? "|" : ""); + } + if (f & PST_REDIRLIST) + { + f &= ~PST_REDIRLIST; + fprintf (stderr, "PST_REDIRLIST%s", f ? "|" : ""); + } + if (f & PST_COMMENT) + { + f &= ~PST_COMMENT; + fprintf (stderr, "PST_COMMENT%s", f ? "|" : ""); + } + if (f & PST_ENDALIAS) + { + f &= ~PST_ENDALIAS; + fprintf (stderr, "PST_ENDALIAS%s", f ? "|" : ""); + } + if (f & PST_NOEXPAND) + { + f &= ~PST_NOEXPAND; + fprintf (stderr, "PST_NOEXPAND%s", f ? "|" : ""); + } + if (f & PST_NOERROR) + { + f &= ~PST_NOERROR; + fprintf (stderr, "PST_NOERROR%s", f ? "|" : ""); + } + if (f & PST_STRING) + { + f &= ~PST_STRING; + fprintf (stderr, "PST_STRING%s", f ? "|" : ""); + } + if (f & PST_CMDBLTIN) + { + f &= ~PST_CMDBLTIN; + fprintf (stderr, "PST_CMDBLTIN%s", f ? "|" : ""); + } + + fprintf (stderr, "\n"); + fflush (stderr); +} #endif /* Parse a $(...) command substitution. This reads input from the current - input stream. */ + input stream. QC == `"' if this construct is within double quotes */ static char * -parse_comsub (qc, open, close, lenp, flags) - int qc; /* `"' if this construct is within double quotes */ - int open, close; - int *lenp, flags; +parse_comsub (int qc, int open, int close, size_t *lenp, int flags) { int peekc, r; - int start_lineno, local_extglob, was_extpat; + int dolbrace_spec, local_extglob, was_extpat; + int start_lineno, save_lineno; + int was_word, was_newline, was_semi, was_amp; char *ret, *tcmd; - int retlen; + size_t retlen; sh_parser_state_t ps; STRING_SAVER *saved_strings; COMMAND *saved_global, *parsed_command; @@ -6414,18 +6744,40 @@ parse_comsub (qc, open, close, lenp, flags) { peekc = shell_getc (1); shell_ungetc (peekc); - if (peekc == '(') /*)*/ + if (peekc == '(') /* ) */ return (parse_matched_pair (qc, open, close, lenp, P_ARITH)); } + else if (open == '{') /* } */ + { + peekc = shell_getc (1); + if (FUNSUB_CHAR (peekc)) + { + dolbrace_spec = peekc; +#if 0 + if (dolbrace_spec == '(') /* ksh93 compatibility ) */ + shell_ungetc (peekc); +#else + if (dolbrace_spec == '\n') + shell_ungetc (peekc); /* get PS2 prompting right */ +#endif + } + else + { + shell_ungetc (peekc); + return parse_matched_pair (qc, open, close, lenp, flags); + } + } /*itrace("parse_comsub: qc = `%c' open = %c close = %c", qc, open, close);*/ /*debug_parser(1);*/ start_lineno = line_number; + save_lineno = simplecmd_lineno; save_parser_state (&ps); was_extpat = (parser_state & PST_EXTPAT); + was_word = was_newline = was_semi = was_amp = 0; /* State flags we don't want to persist into command substitutions. */ parser_state &= ~(PST_REGEXP|PST_EXTPAT|PST_CONDCMD|PST_CONDEXPR|PST_COMPASSIGN); @@ -6436,6 +6788,8 @@ parse_comsub (qc, open, close, lenp, flags) parser_state &= ~(PST_CASEPAT|PST_ALEXPNEXT|PST_SUBSHELL|PST_REDIRLIST); /* State flags we want to set for this run through the parser. */ parser_state |= PST_CMDSUBST|PST_EOFTOKEN|PST_NOEXPAND; + if (open == '{') /* } */ + parser_state |= PST_FUNSUBST; /* leave pushed_string_list alone, since we might need to consume characters from it to satisfy this command substitution (in some perverse case). */ @@ -6465,10 +6819,23 @@ parse_comsub (qc, open, close, lenp, flags) #endif current_token = '\n'; /* XXX */ - token_to_read = DOLPAREN; /* let's trick the parser */ + token_to_read = (open == '(') ? DOLPAREN : DOLBRACE; /* let's trick the parser ) */ + parsing_command = 1; /* saved as part of sh_parser_state_t */ r = yyparse (); + if (open == '{') + { + if (current_token == shell_eof_token) + { + was_semi = last_read_token == ';'; + was_newline = last_read_token == '\n'; + was_amp = last_read_token == '&'; + + was_word = (was_semi || was_newline) && (token_before_that == WORD || token_before_that == ASSIGNMENT_WORD); + } + } + if (need_here_doc > 0) { internal_warning ("command substitution: %d unterminated here-document%s", need_here_doc, (need_here_doc == 1) ? "" : "s"); @@ -6487,8 +6854,11 @@ parse_comsub (qc, open, close, lenp, flags) shell_eof_token = ps.eof_token; expand_aliases = ps.expand_aliases; - /* yyparse() has already called yyerror() and reset_parser() */ + /* yyparse() has already called yyerror() and reset_parser(), so we set + PST_NOERROR to avoid a redundant error message. */ parser_state |= PST_NOERROR; + + flush_parser_state (&ps); return (&matched_pair_error); } else if (r != 0) @@ -6505,6 +6875,7 @@ parse_comsub (qc, open, close, lenp, flags) shell_eof_token = ps.eof_token; expand_aliases = ps.expand_aliases; + flush_parser_state (&ps); jump_to_top_level (DISCARD); /* XXX - return (&matched_pair_error)? */ } } @@ -6521,6 +6892,7 @@ INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, she shell_eof_token = ps.eof_token; expand_aliases = ps.expand_aliases; + flush_parser_state (&ps); return (&matched_pair_error); } @@ -6531,19 +6903,46 @@ INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, she restore_parser_state (&ps); pushed_string_list = saved_strings; + simplecmd_lineno = save_lineno; + tcmd = print_comsub (parsed_command); /* returns static memory */ retlen = strlen (tcmd); - if (tcmd[0] == '(') /* ) need a space to prevent arithmetic expansion */ - retlen++; - ret = xmalloc (retlen + 2); - if (tcmd[0] == '(') /* ) */ + if (open == '(') /* ) */ { - ret[0] = ' '; - strcpy (ret + 1, tcmd); + if (tcmd[0] == '(') /* ) need a space to prevent arithmetic expansion */ + retlen++; + ret = xmalloc (retlen + 2); + if (tcmd[0] == '(') /* ) */ + { + ret[0] = ' '; + strcpy (ret + 1, tcmd); + } + else + strcpy (ret, tcmd); } - else - strcpy (ret, tcmd); - ret[retlen++] = ')'; + else if (retlen == 0) /* open == '{' }, empty command */ + { + ret = xmalloc (3); + ret[retlen++] = ' '; + } + else /* open == '{' } */ + { + int lastc; + + lastc = tcmd[retlen - 1]; + retlen++; + ret = xmalloc (retlen + 4); + ret[0] = (dolbrace_spec == '|') ? '|' : ' '; + strcpy (ret + 1, tcmd); /* ( */ + if (was_newline) + ret[retlen++] = '\n'; + else if (was_word || was_semi) + ret[retlen++] = ';'; + else if (lastc != '\n' && lastc != ';' && lastc != '&') + ret[retlen++] = ';'; + ret[retlen++] = ' '; + } + ret[retlen++] = close; ret[retlen] = '\0'; dispose_command (parsed_command); @@ -6556,25 +6955,24 @@ INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, she return ret; } -/* Recursively call the parser to parse a $(...) command substitution. This is +/* Recursively call the parser to parse a command substitution. This is called by the word expansion code and so does not have to reset as much parser state before calling yyparse(). */ char * -xparse_dolparen (base, string, indp, flags) - char *base; - char *string; - int *indp; - int flags; +xparse_dolparen (const char *base, char *string, size_t *indp, int flags) { sh_parser_state_t ps; sh_input_line_state_t ls; - int orig_ind, nc, sflags, start_lineno, local_extglob; + size_t orig_ind; + int nc, sflags, start_lineno, local_extglob, funsub, closer; + int save_lineno; char *ret, *ep, *ostring; /*debug_parser(1);*/ orig_ind = *indp; ostring = string; start_lineno = line_number; + save_lineno = simplecmd_lineno; if (*string == 0) { @@ -6588,6 +6986,8 @@ xparse_dolparen (base, string, indp, flags) /*itrace("xparse_dolparen: size = %d shell_input_line = `%s' string=`%s'", shell_input_line_size, shell_input_line, string);*/ + funsub = flags & SX_FUNSUB; + sflags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE; if (flags & SX_NOLONGJMP) sflags |= SEVAL_NOLONGJMP; @@ -6599,10 +6999,12 @@ xparse_dolparen (base, string, indp, flags) pushed_string_list = (STRING_SAVER *)NULL; #endif /*(*/ - parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*(*/ - shell_eof_token = ')'; - if (flags & SX_COMPLETE) + parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*{(*/ + closer = shell_eof_token = funsub ? '}' : ')'; + if (flags & (SX_COMPLETE|SX_NOERROR)) parser_state |= PST_NOERROR; + if (funsub) + parser_state |= PST_FUNSUBST; /* Don't expand aliases on this pass at all. Either parse_comsub() does it at parse time, in which case this string already has aliases expanded, @@ -6614,7 +7016,10 @@ xparse_dolparen (base, string, indp, flags) local_extglob = extended_glob; #endif - token_to_read = DOLPAREN; /* let's trick the parser */ + if (funsub && FUNSUB_CHAR (*string) && *string == '|') + string++; + + token_to_read = funsub ? DOLBRACE : DOLPAREN; /* let's trick the parser */ nc = parse_string (string, "command substitution", sflags, (COMMAND **)NULL, &ep); @@ -6627,13 +7032,15 @@ xparse_dolparen (base, string, indp, flags) /* reset_parser() clears shell_input_line and associated variables, including parser_state, so we want to reset things, then restore what we need. */ restore_input_line_state (&ls); - restore_parser_state (&ps); + restore_parser_state (&ps); /* restores shell_eof_token */ #if defined (EXTENDED_GLOB) extended_glob = local_extglob; #endif token_to_read = 0; + simplecmd_lineno = save_lineno; + /* If parse_string returns < 0, we need to jump to top level with the negative of the return value. We abandon the rest of this input line first */ @@ -6641,7 +7048,7 @@ xparse_dolparen (base, string, indp, flags) { clear_shell_input_line (); /* XXX */ if (bash_input.type != st_string) /* paranoia */ - parser_state &= ~(PST_CMDSUBST|PST_EOFTOKEN); + parser_state &= ~(PST_CMDSUBST|PST_EOFTOKEN|PST_FUNSUBST); if ((flags & SX_NOLONGJMP) == 0) jump_to_top_level (-nc); /* XXX */ } @@ -6651,7 +7058,7 @@ xparse_dolparen (base, string, indp, flags) and return it. If flags & 1 (SX_NOALLOC) we can return NULL. */ /*(*/ - if (ep[-1] != ')') + if (ep[-1] != closer) { #if 0 if (ep[-1] != '\n') @@ -6672,11 +7079,11 @@ xparse_dolparen (base, string, indp, flags) itrace("xparse_dolparen:%d: *indp (%d) < orig_ind (%d), orig_string = `%s'", line_number, *indp, orig_ind, ostring); #endif - if (base[*indp] != ')' && (flags & SX_NOLONGJMP) == 0) + if (base[*indp] != closer && (flags & SX_NOLONGJMP) == 0) { /*(*/ if ((flags & SX_NOERROR) == 0) - parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), ')'); + parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), closer); jump_to_top_level (DISCARD); } @@ -6698,15 +7105,13 @@ xparse_dolparen (base, string, indp, flags) substitution to a COMMAND *. This is called from command_substitute() and has the same parser state constraints as xparse_dolparen(). */ COMMAND * -parse_string_to_command (string, flags) - char *string; - int flags; +parse_string_to_command (char *string, int flags) { sh_parser_state_t ps; sh_input_line_state_t ls; int nc, sflags; size_t slen; - char *ret, *ep; + char *ep; COMMAND *cmd; if (*string == 0) @@ -6727,7 +7132,7 @@ parse_string_to_command (string, flags) #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) pushed_string_list = (STRING_SAVER *)NULL; #endif - if (flags & SX_COMPLETE) + if (flags & (SX_COMPLETE|SX_NOERROR)) parser_state |= PST_NOERROR; parser_state |= PST_STRING; @@ -6769,8 +7174,7 @@ parse_string_to_command (string, flags) the parsed token, -1 on error, or -2 if we didn't do anything and should just go on. */ static int -parse_dparen (c) - int c; +parse_dparen (int c) { int cmdtyp, sline; char *wval; @@ -6779,9 +7183,8 @@ parse_dparen (c) #if defined (ARITH_FOR_COMMAND) if (last_read_token == FOR) { - if (word_top < MAX_CASE_NEST) - word_top++; - arith_for_lineno = word_lineno[word_top] = line_number; + set_word_top (last_read_token); + arith_for_lineno = line_number; cmdtyp = parse_arith_cmd (&wval, 0); if (cmdtyp == 1) { @@ -6800,6 +7203,8 @@ parse_dparen (c) { sline = line_number; + if (last_read_token == IF || last_read_token == WHILE || last_read_token == UNTIL) + set_word_top (last_read_token); cmdtyp = parse_arith_cmd (&wval, 0); if (cmdtyp == 1) /* arithmetic command */ { @@ -6831,13 +7236,11 @@ parse_dparen (c) allocated buffer and make *ep point to that buffer. Return -1 on an error, for example EOF. */ static int -parse_arith_cmd (ep, adddq) - char **ep; - int adddq; +parse_arith_cmd (char **ep, int adddq) { int exp_lineno, rval, c; char *ttok, *tokstr; - int ttoklen; + size_t ttoklen; exp_lineno = line_number; ttok = parse_matched_pair (0, '(', ')', &ttoklen, P_ARITH); @@ -6882,7 +7285,7 @@ parse_arith_cmd (ep, adddq) #if defined (COND_COMMAND) static void -cond_error () +cond_error (void) { char *etext; @@ -6901,13 +7304,13 @@ cond_error () } static COND_COM * -cond_expr () +cond_expr (void) { return (cond_or ()); } static COND_COM * -cond_or () +cond_or (void) { COND_COM *l, *r; @@ -6921,7 +7324,7 @@ cond_or () } static COND_COM * -cond_and () +cond_and (void) { COND_COM *l, *r; @@ -6935,7 +7338,7 @@ cond_and () } static int -cond_skip_newlines () +cond_skip_newlines (void) { while ((cond_token = read_token (READ)) == '\n') { @@ -6949,7 +7352,7 @@ cond_skip_newlines () do { cond_token = COND_ERROR; return ((COND_COM *)NULL); } while (0) static COND_COM * -cond_term () +cond_term (void) { WORD_DESC *op; COND_COM *term, *tleft, *tright; @@ -7119,7 +7522,7 @@ cond_term () /* This is kind of bogus -- we slip a mini recursive-descent parser in here to handle the conditional statement syntax. */ static COMMAND * -parse_cond_command () +parse_cond_command (void) { COND_COM *cexp; @@ -7135,9 +7538,7 @@ parse_cond_command () substitution that will reallocate atoken. We don't want to write beyond the end of an allocated buffer. */ static int -token_is_assignment (t, i) - char *t; - int i; +token_is_assignment (const char *t, int i) { int r; char *atoken; @@ -7158,24 +7559,21 @@ token_is_assignment (t, i) /* XXX - possible changes here for `+=' */ static int -token_is_ident (t, i) - char *t; - int i; +token_is_ident (char *t, int i) { unsigned char c; int r; c = t[i]; t[i] = '\0'; - r = legal_identifier (t); + r = valid_identifier (t); t[i] = c; return r; } #endif static int -read_token_word (character) - int character; +read_token_word (int character) { /* The value for YYLVAL when a WORD is read. */ WORD_DESC *the_word; @@ -7204,7 +7602,7 @@ read_token_word (character) int cd; int result, peek_char; char *ttok, *ttrans; - int ttoklen, ttranslen; + size_t ttoklen, ttranslen; intmax_t lvalue; if (token_buffer_size < TOKEN_DEFAULT_INITIAL_SIZE) @@ -7217,7 +7615,16 @@ read_token_word (character) for (;;) { if (character == EOF) - goto got_token; + { + /* delimit the current token, then return EOF if the shell is + interactive. */ + if (interactive) + { + EOF_Reached = 1; + token_to_read = yacc_EOF; + } + goto got_token; + } if (pass_next_character) { @@ -7261,6 +7668,24 @@ read_token_word (character) } } + /* Just an awful special case. We want '}' to delimit the foreground + command substitution construct ${Ccommand; } but since it's a word + expansion, we need to join it with any potential following + characters. We fake things out here and treat a word beginning with + a close brace as the '}' reserved word, treat it as a separate + token, terminate the command substitution, and go on reading + characters into the same upper-layer token. */ + if ((parser_state & PST_FUNSUBST) && token_index == 0 && quoted == 0 && + reserved_word_acceptable (last_read_token) && + MBTEST(character == '}')) + { + RESIZE_MALLOCED_BUFFER (token, token_index, 2, + token_buffer_size, TOKEN_DEFAULT_GROW_SIZE); + token[token_index++] = character; + all_digit_token = dollar_present = 0; + goto got_token; + } + /* Parse a matched pair of quote characters. */ if MBTEST(shellquote (character)) { @@ -7345,7 +7770,19 @@ read_token_word (character) ((peek_char == '{' || peek_char == '[') && character == '$')) /* ) ] } */ { if (peek_char == '{') /* } */ - ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE|P_DOLBRACE); + { + int npeek; + npeek = shell_getc (1); + shell_ungetc (npeek); + if (FUNSUB_CHAR (npeek)) + { + push_delimiter (dstack, peek_char); + ttok = parse_comsub (cd, '{', '}', &ttoklen, P_COMMAND); + pop_delimiter (dstack); + } + else + ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE|P_DOLBRACE); + } else if (peek_char == '(') /* ) */ { /* XXX - push and pop the `(' as a delimiter for use by @@ -7369,7 +7806,7 @@ read_token_word (character) strcpy (token + token_index, ttok); token_index += ttoklen; FREE (ttok); - dollar_present = 1; + dollar_present |= character == '$'; all_digit_token = 0; goto next_character; } @@ -7410,15 +7847,20 @@ read_token_word (character) /* PST_NOEXPAND */ /* Try to locale-expand the converted string. */ ttrans = locale_expand (ttok, 0, ttoklen - 1, first_line, &ttranslen); - free (ttok); /* Add the double quotes back (or single quotes if the user has set that option). */ if (singlequote_translations && ((ttoklen - 1) != ttranslen || STREQN (ttok, ttrans, ttranslen) == 0)) - ttok = sh_single_quote (ttrans); + { + free (ttok); + ttok = sh_single_quote (ttrans); + } else - ttok = sh_mkdoublequoted (ttrans, ttranslen, 0); + { + free (ttok); + ttok = sh_mkdoublequoted (ttrans, ttranslen, 0); + } free (ttrans); ttrans = ttok; @@ -7557,7 +7999,7 @@ got_token: last_read_token == LESS_AND || last_read_token == GREATER_AND)) { - if (legal_number (token, &lvalue) && (int)lvalue == lvalue) + if (valid_number (token, &lvalue) && (int)lvalue == lvalue) { yylval.number = lvalue; return (NUMBER); @@ -7567,7 +8009,7 @@ got_token: /* Check for special case tokens. */ result = (last_shell_getc_is_singlebyte) ? special_case_tokens (token) : -1; if (result >= 0) - return result; + return result; /* don't need to set word_top in any of these cases */ #if defined (ALIAS) /* Posix.2 does not allow reserved words to be aliased, so check for all @@ -7614,11 +8056,11 @@ got_token: { the_word->flags |= W_NOSPLIT; if (parser_state & PST_COMPASSIGN) - the_word->flags |= W_NOGLOB; /* XXX - W_NOBRACE? */ + the_word->flags |= W_NOGLOB|W_NOBRACE; } } - if (command_token_position (last_read_token)) + if (command_token_position (last_read_token) || (parser_state & PST_CMDBLTIN)) { struct builtin *b; b = builtin_address_internal (token, 0); @@ -7626,7 +8068,18 @@ got_token: parser_state |= PST_ASSIGNOK; else if (STREQ (token, "eval") || STREQ (token, "let")) parser_state |= PST_ASSIGNOK; + /* If we don't want to allow multiple instances of `command' to act as + declaration utilities as long as the last one is followed by a + declaration utility, add back a check for command_token_position. + subst.c:fix_assignment_words allows multiple instances of "command" + but I don't think that POSIX requires this. */ + else if (posixly_correct && STREQ (token, "command")) + parser_state |= PST_CMDBLTIN; + else + parser_state &= ~PST_CMDBLTIN; } + else + parser_state &= ~PST_CMDBLTIN; yylval.word = the_word; @@ -7637,9 +8090,9 @@ got_token: /* can use token; already copied to the_word */ token[token_index-1] = '\0'; #if defined (ARRAY_VARS) - if (legal_identifier (token+1) || valid_array_reference (token+1, 0)) + if (valid_identifier (token+1) || valid_array_reference (token+1, 0)) #else - if (legal_identifier (token+1)) + if (valid_identifier (token+1)) #endif { strcpy (the_word->word, token+1); @@ -7657,30 +8110,53 @@ got_token: result = ((the_word->flags & (W_ASSIGNMENT|W_NOSPLIT)) == (W_ASSIGNMENT|W_NOSPLIT)) ? ASSIGNMENT_WORD : WORD; + /* Are we potentially starting a simple command? */ + if (command_token_position (last_read_token)) + simplecmd_lineno = line_number; + switch (last_read_token) { case FUNCTION: parser_state |= PST_ALLOWOPNBRC; + save_dstart = function_dstart; function_dstart = line_number; break; case CASE: case SELECT: case FOR: - if (word_top < MAX_CASE_NEST) - word_top++; - word_lineno[word_top] = line_number; expecting_in_token++; break; } + set_word_top (last_read_token); return (result); } +static inline int +set_word_top (int t) +{ + switch (t) + { + case CASE: + case SELECT: + case FOR: + case IF: + case WHILE: + case UNTIL: + if (word_top < MAX_COMPOUND_NEST) + word_top++; + word_lineno[word_top] = line_number; + break; + default: + break; + } + return word_top; +} + /* Return 1 if TOKSYM is a token that after being read would allow a reserved word to be seen, else 0. */ -static int -reserved_word_acceptable (toksym) - int toksym; +static inline int +reserved_word_acceptable (int toksym) { switch (toksym) { @@ -7717,6 +8193,7 @@ reserved_word_acceptable (toksym) case WHILE: case 0: case DOLPAREN: + case DOLBRACE: return 1; default: #if defined (COPROCESS_SUPPORT) @@ -7732,8 +8209,7 @@ reserved_word_acceptable (toksym) /* Return the index of TOKEN in the alist of reserved words, or -1 if TOKEN is not a shell reserved word. */ int -find_reserved_word (tokstr) - char *tokstr; +find_reserved_word (const char *tokstr) { int i; for (i = 0; word_token_alist[i].word; i++) @@ -7745,7 +8221,7 @@ find_reserved_word (tokstr) /* An interface to let the rest of the shell (primarily the completion system) know what the parser is expecting. */ int -parser_in_command_position () +parser_in_command_position (void) { return (command_token_position (last_read_token)); } @@ -7756,14 +8232,14 @@ parser_in_command_position () the new prompt string is gets propagated to readline's local prompt variable. */ static void -reset_readline_prompt () +reset_readline_prompt (void) { char *temp_prompt; if (prompt_string_pointer) { temp_prompt = (*prompt_string_pointer) - ? decode_prompt_string (*prompt_string_pointer) + ? decode_prompt_string (*prompt_string_pointer, 1) : (char *)NULL; if (temp_prompt == 0) @@ -7786,7 +8262,7 @@ reset_readline_prompt () static const int no_semi_successors[] = { '\n', '{', '(', ')', ';', '&', '|', CASE, DO, ELSE, IF, SEMI_SEMI, SEMI_AND, SEMI_SEMI_AND, THEN, UNTIL, - WHILE, AND_AND, OR_OR, IN, + WHILE, AND_AND, OR_OR, IN, DOLPAREN, DOLBRACE, 0 }; @@ -7796,8 +8272,7 @@ static const int no_semi_successors[] = { history entry. LINE is the line we're about to add; it helps make some more intelligent decisions in certain cases. */ char * -history_delimiting_chars (line) - const char *line; +history_delimiting_chars (const char *line) { static int last_was_heredoc = 0; /* was the last entry the start of a here document? */ register int i; @@ -7806,7 +8281,27 @@ history_delimiting_chars (line) last_was_heredoc = 0; if (dstack.delimiter_depth != 0) - return ("\n"); + { + char ch; + HIST_ENTRY *current; + size_t curlen; + + ch = current_delimiter(dstack); + if (shellquote(ch)) + return ("\n"); + else if (ch == '(') /* ) and maybe for other non-quote-char delimiters */ + { + using_history (); + current = previous_history (); + curlen = current ? strlen (current->line) : 0; + /* If we're not reading some kind of quoted string, don't bother + adding a newline if the current history entry already ends in a + newline. It's just extra. */ + return ((curlen > 0 && current->line[curlen - 1] == '\n') ? "" : "\n"); + } + else + return ("\n"); + } /* We look for current_command_line_count == 2 because we are looking to add the first line of the body of the here document (the second line @@ -7889,8 +8384,7 @@ history_delimiting_chars (line) /* Issue a prompt, or prepare to issue a prompt when the next character is read. */ static void -prompt_again (force) - int force; +prompt_again (int force) { char *temp_prompt; @@ -7906,7 +8400,7 @@ prompt_again (force) prompt_string_pointer = &ps1_prompt; temp_prompt = *prompt_string_pointer - ? decode_prompt_string (*prompt_string_pointer) + ? decode_prompt_string (*prompt_string_pointer, 1) : (char *)NULL; if (temp_prompt == 0) @@ -7933,21 +8427,20 @@ prompt_again (force) } int -get_current_prompt_level () +get_current_prompt_level (void) { return ((current_prompt_string && current_prompt_string == ps2_prompt) ? 2 : 1); } void -set_current_prompt_level (x) - int x; +set_current_prompt_level (int x) { prompt_string_pointer = (x == 2) ? &ps2_prompt : &ps1_prompt; current_prompt_string = *prompt_string_pointer; } static void -print_prompt () +print_prompt (void) { fprintf (stderr, "%s", current_decoded_prompt); fflush (stderr); @@ -7958,8 +8451,7 @@ print_prompt () the first line of a potentially multi-line command, so we compensate here by returning one fewer when appropriate. */ static int -prompt_history_number (pmt) - char *pmt; +prompt_history_number (char *pmt) { int ret; @@ -8008,16 +8500,18 @@ prompt_history_number (pmt) \\ a backslash \[ begin a sequence of non-printing chars \] end a sequence of non-printing chars + + IS_PROMPT is non-zero if we are decoding one of the PS[0124] prompt strings + instead of an arbitrary string applying the @P transformation. */ #define PROMPT_GROWTH 48 char * -decode_prompt_string (string) - char *string; +decode_prompt_string (char *string, int is_prompt) { WORD_LIST *list; - char *result, *t, *orig_string; + char *result, *t, *last_lastarg; struct dstack save_dstack; - int last_exit_value, last_comsub_pid; + int last_exit_value, last_comsub_pid, last_comsub_status; #if defined (PROMPT_STRING_DECODE) size_t result_size; size_t result_index; @@ -8027,11 +8521,17 @@ decode_prompt_string (string) time_t the_time; char timebuf[128]; char *timefmt; + size_t tslen; + static char *decoding_prompt; result = (char *)xmalloc (result_size = PROMPT_GROWTH); result[result_index = 0] = 0; temp = (char *)NULL; - orig_string = string; + + /* Keep track of which (real) prompt string is being decoded so that we can + process embedded ${var@P} expansions correctly. */ + if (is_prompt) + decoding_prompt = string; while (c = *string++) { @@ -8047,7 +8547,7 @@ decode_prompt_string (string) #if !defined (HISTORY) temp = savestring ("1"); #else /* HISTORY */ - temp = itos (prompt_history_number (orig_string)); + temp = itos (prompt_history_number (decoding_prompt)); #endif /* HISTORY */ string--; /* add_string increments string again. */ goto add_string; @@ -8102,24 +8602,28 @@ decode_prompt_string (string) case '@': case 'A': /* Make the current time/date into a string. */ - (void) time (&the_time); + the_time = getnow (); #if defined (HAVE_TZSET) sv_tz ("TZ"); /* XXX -- just make sure */ #endif tm = localtime (&the_time); - - if (c == 'd') - n = strftime (timebuf, sizeof (timebuf), "%a %b %d", tm); + if (tm == 0) + { + strcpy (timebuf, "??"); + tslen = 2; + } + else if (c == 'd') + tslen = strftime (timebuf, sizeof (timebuf), "%a %b %d", tm); else if (c == 't') - n = strftime (timebuf, sizeof (timebuf), "%H:%M:%S", tm); + tslen = strftime (timebuf, sizeof (timebuf), "%H:%M:%S", tm); else if (c == 'T') - n = strftime (timebuf, sizeof (timebuf), "%I:%M:%S", tm); + tslen = strftime (timebuf, sizeof (timebuf), "%I:%M:%S", tm); else if (c == '@') - n = strftime (timebuf, sizeof (timebuf), "%I:%M %p", tm); + tslen = strftime (timebuf, sizeof (timebuf), "%I:%M %p", tm); else if (c == 'A') - n = strftime (timebuf, sizeof (timebuf), "%H:%M", tm); + tslen = strftime (timebuf, sizeof (timebuf), "%H:%M", tm); - if (n == 0) + if (tslen == 0) timebuf[0] = '\0'; else timebuf[sizeof(timebuf) - 1] = '\0'; @@ -8131,24 +8635,38 @@ decode_prompt_string (string) if (string[1] != '{') /* } */ goto not_escape; - (void) time (&the_time); + the_time = getnow (); tm = localtime (&the_time); string += 2; /* skip { */ - timefmt = xmalloc (strlen (string) + 3); - for (t = timefmt; *string && *string != '}'; ) - *t++ = *string++; - *t = '\0'; + t = string; + while (*string && *string != '}') + string++; c = *string; /* tested at add_string */ - if (timefmt[0] == '\0') + if (tm) { - timefmt[0] = '%'; - timefmt[1] = 'X'; /* locale-specific current time */ - timefmt[2] = '\0'; + size_t tflen; + tflen = string - t; + timefmt = xmalloc (tflen + 3); + memcpy (timefmt, t, tflen); + timefmt[tflen] = '\0'; + + if (timefmt[0] == '\0') + { + timefmt[0] = '%'; + timefmt[1] = 'X'; /* locale-specific current time */ + timefmt[2] = '\0'; + } + + tslen = strftime (timebuf, sizeof (timebuf), timefmt, tm); + free (timefmt); + } + else + { + strcpy (timebuf, "??"); + tslen = 2; } - n = strftime (timebuf, sizeof (timebuf), timefmt, tm); - free (timefmt); - if (n == 0) + if (tslen == 0) timebuf[0] = '\0'; else timebuf[sizeof(timebuf) - 1] = '\0'; @@ -8174,7 +8692,6 @@ decode_prompt_string (string) /* Try to quote anything the user can set in the file system */ if (promptvars || posixly_correct) { - char *t; t = sh_strvis (temp); temp = sh_backslash_quote_for_double_quotes (t, 0); free (t); @@ -8256,7 +8773,6 @@ decode_prompt_string (string) second argument of Q_DOUBLE_QUOTES if we use this function here. */ { - char *t; t = sh_strvis (t_string); temp = sh_backslash_quote_for_double_quotes (t, 0); free (t); @@ -8292,7 +8808,7 @@ decode_prompt_string (string) n = current_command_number; /* If we have already incremented current_command_number (PS4, ${var@P}), compensate */ - if (orig_string != ps0_prompt && orig_string != ps1_prompt && orig_string != ps2_prompt) + if (decoding_prompt != ps0_prompt && decoding_prompt != ps1_prompt && decoding_prompt != ps2_prompt) n--; temp = itos (n); goto add_string; @@ -8301,7 +8817,7 @@ decode_prompt_string (string) #if !defined (HISTORY) temp = savestring ("1"); #else /* HISTORY */ - temp = itos (prompt_history_number (orig_string)); + temp = itos (prompt_history_number (decoding_prompt)); #endif /* HISTORY */ goto add_string; @@ -8406,12 +8922,17 @@ not_escape: { last_exit_value = last_command_exit_value; last_comsub_pid = last_command_subst_pid; + last_comsub_status = last_command_subst_status; + last_lastarg = save_lastarg (); list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0); free (result); result = string_list (list); dispose_words (list); + bind_lastarg (last_lastarg); + free (last_lastarg); last_command_exit_value = last_exit_value; last_command_subst_pid = last_comsub_pid; + last_command_subst_status = last_comsub_status; } else { @@ -8421,6 +8942,10 @@ not_escape: } dstack = save_dstack; +#if defined (PROMPT_STRING_DECODE) + if (is_prompt) + decoding_prompt = (char *)NULL; +#endif return (result); } @@ -8434,8 +8959,7 @@ not_escape: /* Report a syntax error, and restart the parser. Call here for fatal errors. */ int -yyerror (msg) - const char *msg; +yyerror (const char *msg) { if ((parser_state & PST_NOERROR) == 0) report_syntax_error ((char *)NULL); @@ -8444,8 +8968,7 @@ yyerror (msg) } static char * -error_token_from_token (tok) - int tok; +error_token_from_token (int tok) { char *t; @@ -8484,7 +9007,7 @@ error_token_from_token (tok) } static char * -error_token_from_text () +error_token_from_text (void) { char *msg, *t; int token_end, i; @@ -8526,7 +9049,7 @@ error_token_from_text () } static void -print_offending_line () +print_offending_line (void) { char *msg; int token_end; @@ -8545,8 +9068,7 @@ print_offending_line () then place it in MESSAGE, otherwise pass NULL and this will figure out an appropriate message for you. */ static void -report_syntax_error (message) - char *message; +report_syntax_error (const char *message) { char *msg, *p; @@ -8602,6 +9124,8 @@ report_syntax_error (message) { if (EOF_Reached && shell_eof_token && current_token != shell_eof_token) parser_error (line_number, _("unexpected EOF while looking for matching `%c'"), shell_eof_token); + else if (EOF_Reached && word_top >= 0) + parser_error (line_number, _("syntax error: unexpected end of file from command on line %d"), word_lineno[word_top]); else { msg = EOF_Reached ? _("syntax error: unexpected end of file") : _("syntax error"); @@ -8625,8 +9149,7 @@ report_syntax_error (message) to throw away the information about where the allocated objects live. (dispose_command () will actually free the command.) */ static void -discard_parser_constructs (error_p) - int error_p; +discard_parser_constructs (int error_p) { } @@ -8649,12 +9172,31 @@ int eof_encountered = 0; /* The limit for eof_encountered. */ int eof_encountered_limit = 10; +int +handle_ignoreeof (int reset_prompt) +{ + if (eof_encountered < eof_encountered_limit) + { + fprintf (stderr, _("Use \"%s\" to leave the shell.\n"), + login_shell ? "logout" : "exit"); + eof_encountered++; + /* Reset the parsing state. */ + last_read_token = current_token = '\n'; + if (reset_prompt) + /* Reset the prompt string to be $PS1. */ + prompt_string_pointer = (char **)NULL; + prompt_again (0); + return 1; + } + return 0; +} + /* If we have EOF as the only input unit, this user wants to leave the shell. If the shell is not interactive, then just leave. Otherwise, if ignoreeof is set, and we haven't done this the required number of times in a row, print a message. */ static void -handle_eof_input_unit () +handle_eof_input_unit (void) { if (interactive) { @@ -8665,21 +9207,8 @@ handle_eof_input_unit () EOF_Reached = 0; /* If the user wants to "ignore" eof, then let her do so, kind of. */ - if (ignoreeof) - { - if (eof_encountered < eof_encountered_limit) - { - fprintf (stderr, _("Use \"%s\" to leave the shell.\n"), - login_shell ? "logout" : "exit"); - eof_encountered++; - /* Reset the parsing state. */ - last_read_token = current_token = '\n'; - /* Reset the prompt string to be $PS1. */ - prompt_string_pointer = (char **)NULL; - prompt_again (0); - return; - } - } + if (ignoreeof && handle_ignoreeof (1)) + return; /* In this case EOF should exit the shell. Do it now. */ reset_parser (); @@ -8709,10 +9238,7 @@ static WORD_LIST parse_string_error; /* Take a string and run it through the shell parser, returning the resultant word list. Used by compound array assignment. */ WORD_LIST * -parse_string_to_word_list (s, flags, whom) - char *s; - int flags; - const char *whom; +parse_string_to_word_list (char *s, int flags, const char *whom) { WORD_LIST *wl; int tok, orig_current_token, orig_line_number; @@ -8762,6 +9288,7 @@ parse_string_to_word_list (s, flags, whom) orig_current_token = current_token; current_token = tok; yyerror (NULL); /* does the right thing */ + ps.pushed_strings = NULL; /* freed by reset_parser */ current_token = orig_current_token; if (wl) dispose_words (wl); @@ -8785,23 +9312,28 @@ parse_string_to_word_list (s, flags, whom) if (wl == &parse_string_error) { set_exit_status (EXECUTION_FAILURE); + current_token = '\n'; /* XXX */ if (interactive_shell == 0 && posixly_correct) jump_to_top_level (FORCE_EOF); else - jump_to_top_level (DISCARD); + { + if (executing && parse_and_execute_level == 0) + top_level_cleanup (); + jump_to_top_level (DISCARD); + } } return (REVERSE_LIST (wl, WORD_LIST *)); } static char * -parse_compound_assignment (retlenp) - int *retlenp; +parse_compound_assignment (size_t *retlenp) { WORD_LIST *wl, *rl; - int tok, orig_line_number, assignok; + int tok, orig_line_number, assignok, ea, restore_pushed_strings; sh_parser_state_t ps; char *ret; + STRING_SAVER *ss; orig_line_number = line_number; save_parser_state (&ps); @@ -8824,6 +9356,12 @@ parse_compound_assignment (retlenp) esacs_needed_count = expecting_in_token = 0; + /* We're not pushing any new input here, we're reading from the current input + source. If that's an alias, we have to be prepared for the alias to get + popped out from underneath us. */ + ss = (ea = (expanding_alias () || parsing_dparen ())) ? pushed_string_list : (STRING_SAVER *)NULL; + restore_pushed_strings = 0; + while ((tok = read_token (READ)) != ')') { if (tok == '\n') /* Allow newlines in compound assignments */ @@ -8837,8 +9375,12 @@ parse_compound_assignment (retlenp) current_token = tok; /* for error reporting */ if (tok == yacc_EOF) /* ( */ parser_error (orig_line_number, _("unexpected EOF while looking for matching `)'")); + /* XXX - reset_parser here, even at EOF? */ else - yyerror(NULL); /* does the right thing */ + { + yyerror(NULL); /* does the right thing */ + ps.pushed_strings = NULL; /* freed by reset_parser */ + } if (wl) dispose_words (wl); wl = &parse_string_error; @@ -8847,17 +9389,34 @@ parse_compound_assignment (retlenp) wl = make_word_list (yylval.word, wl); } - restore_parser_state (&ps); - if (wl == &parse_string_error) { set_exit_status (EXECUTION_FAILURE); - last_read_token = '\n'; /* XXX */ + last_read_token = current_token = '\n'; /* XXX */ + /* This will eventually call reset_parser */ if (interactive_shell == 0 && posixly_correct) jump_to_top_level (FORCE_EOF); else - jump_to_top_level (DISCARD); + { + if (executing && parse_and_execute_level == 0) + top_level_cleanup (); + jump_to_top_level (DISCARD); + } + } + + /* Check whether or not an alias got popped out from underneath us and + fix up after restore_parser_state. */ + if (ea && ss && ss != pushed_string_list) + { + restore_pushed_strings = 1; + ss = pushed_string_list; + /* Don't bother with restoring the pushed string list from ps if we're + just going to overwrite it. */ + ps.pushed_strings = NULL; } + restore_parser_state (&ps); + if (restore_pushed_strings) + pushed_string_list = ss; if (wl) { @@ -8884,8 +9443,7 @@ parse_compound_assignment (retlenp) ************************************************/ sh_parser_state_t * -save_parser_state (ps) - sh_parser_state_t *ps; +save_parser_state (sh_parser_state_t *ps) { if (ps == 0) ps = (sh_parser_state_t *)xmalloc (sizeof (sh_parser_state_t)); @@ -8895,6 +9453,8 @@ save_parser_state (ps) ps->parser_state = parser_state; ps->token_state = save_token_state (); + ps->parsing_command = parsing_command; + ps->input_line_terminator = shell_input_line_terminator; ps->eof_encountered = eof_encountered; ps->eol_lookahead = eol_ungetc_lookahead; @@ -8946,11 +9506,8 @@ save_parser_state (ps) } void -restore_parser_state (ps) - sh_parser_state_t *ps; +restore_parser_state (sh_parser_state_t *ps) { - int i; - if (ps == 0) return; @@ -8960,6 +9517,7 @@ restore_parser_state (ps) restore_token_state (ps->token_state); free (ps->token_state); } + parsing_command = ps->parsing_command; shell_input_line_terminator = ps->input_line_terminator; eof_encountered = ps->eof_encountered; @@ -9012,9 +9570,35 @@ restore_parser_state (ps) shell_eof_token = ps->eof_token; } +void +uw_restore_parser_state (void *ps) +{ + restore_parser_state (ps); +} + +/* Free the parts of a parser state struct that have allocated memory. */ +void +flush_parser_state (sh_parser_state_t *ps) +{ + if (ps == 0) + return; + + FREE (ps->token_state); + ps->token_state = 0; + + if (ps->pipestatus) + array_dispose (ps->pipestatus); + ps->pipestatus = 0; + + /* We want to free the saved token and leave the current token for error + reporting and cleanup. */ + FREE (ps->token); + ps->token = 0; + ps->token_buffer_size = 0; +} + sh_input_line_state_t * -save_input_line_state (ls) - sh_input_line_state_t *ls; +save_input_line_state (sh_input_line_state_t *ls) { if (ls == 0) ls = (sh_input_line_state_t *)xmalloc (sizeof (sh_input_line_state_t)); @@ -9044,8 +9628,7 @@ save_input_line_state (ls) } void -restore_input_line_state (ls) - sh_input_line_state_t *ls; +restore_input_line_state (sh_input_line_state_t *ls) { FREE (shell_input_line); shell_input_line = ls->input_line; @@ -9076,7 +9659,7 @@ restore_input_line_state (ls) #define MAX_PROPSIZE 32768 static void -set_line_mbstate () +set_line_mbstate (void) { int c; size_t i, previ, len; diff --git a/y.tab.h b/y.tab.h index 3f3010777..b1689c0ab 100644 --- a/y.tab.h +++ b/y.tab.h @@ -101,7 +101,8 @@ extern int yydebug; GREATER_BAR = 302, /* GREATER_BAR */ BAR_AND = 303, /* BAR_AND */ DOLPAREN = 304, /* DOLPAREN */ - yacc_EOF = 305 /* yacc_EOF */ + DOLBRACE = 305, /* DOLBRACE */ + yacc_EOF = 306 /* yacc_EOF */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -157,13 +158,14 @@ extern int yydebug; #define GREATER_BAR 302 #define BAR_AND 303 #define DOLPAREN 304 -#define yacc_EOF 305 +#define DOLBRACE 305 +#define yacc_EOF 306 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 338 "/usr/local/src/chet/src/bash/src/parse.y" +#line 365 "/usr/local/src/chet/src/bash/src/parse.y" WORD_DESC *word; /* the word that we read. */ int number; /* the number that we read. */ @@ -173,7 +175,7 @@ union YYSTYPE ELEMENT element; PATTERN_LIST *pattern; -#line 177 "y.tab.h" +#line 179 "y.tab.h" }; typedef union YYSTYPE YYSTYPE; -- 2.47.3